IyBNaW5HVyBtYWtlZmlsZSBmb3IgRnJlZUltYWdlDQoNCiMgVGhpcyBmaWxlIGNhbiBiZSBnZW5lcmF0ZWQgYnkgLi9nZW5zcmNsaXN0LnNoDQppbmNsdWRlIE1ha2VmaWxlLnNyY3MNCg0KIyBHZW5lcmFsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzOg0KREVTVERJUiA/PSAkKFN5c3RlbVJvb3QpDQpJTlNUQUxMRElSID89ICQoREVTVERJUikvc3lzdGVtMzINCkRJU1RESVIgPz0gRGlzdA0KU1JDRElSID89IFNvdXJjZQ0KSEVBREVSID0gRnJlZUltYWdlLmgNClJDRklMRSA9IEZyZWVJbWFnZS5yYw0KDQojIFVuY29tbWVudCB0aGlzIHZhcmlhYmxlIHRvIG1ha2UgYSBzdGF0aWMgbGlicmFyeS4gVGhpcyBtYXkNCiMgYWxzbyBiZSBzcGVjaWZpZWQgYXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIGNhbiBob2xkDQojIGFueSBvZiBTVEFUSUMgYW5kIFNIQVJFRCBhbmQgbXVzdCBiZSBpbiB1cHBlcmNhc2UgbGV0dGVycy4NCiMgRGVmYXVsdDogU0hBUkVEDQojRlJFRUlNQUdFX0xJQlJBUllfVFlQRSA9IFNUQVRJQw0KDQojIFJlZGVmaW5lIHRoZSBjb21waWxlciAoQ0MgZGVmYXVsdHMgdG8gtGNjtCBmb3IgTWluR1cncyBtYWtlLCBob3dldmVyDQojIHRoZXJlJ3Mgb25seSC0Z2NjtCBhdmFpbGFibGUgd2l0aCBNaW5HVykNCkNDID0gZ2NjDQoNCiMgUmVkZWZpbmUgdGhlIGxpbmtlciAod2UgdXNlILRnKyu0IGZvciBsaW5raW5nLCBzaW5jZSBNaW5HVydzILRsZLQgY29tZXMgd2l0aA0KIyB3cm9uZyAoTGludXgpIHN0YW5kYXJkIGxpYnJhcnkgc2VhcmNoIHBhdGhzKQ0KTEQgPSBnKysNCg0KI0RlZmluZSB0aGUgZGxsdG9vbA0KRExMVE9PTCA9IGRsbHRvb2wNCg0KI0RlZmluZSB0aGUgcmVzb3VyY2UgY29tcGlsZXINClJDID0gd2luZHJlcw0KDQojIERlZmluZSB0aGUgY29weSBjb21tYW5kDQpDUCA9IGNwDQoNCiMgRGVmaW5lIHRoZSBta2RpciBjb21tYW5kDQpNRCA9IG1rZGlyDQoNCiMgRGVmaW5lIGFkZGl0aW9uYWwgbGlicmFyaWVzIG5lZWRlZDoNCiMgbGlic3RkYysrIGlzIGluY2x1ZGVkIGJ5IGRlZmF1bHQgd2l0aCBNaW5HVywgaG93ZXZlciBmb3INCiMgV0lOMzIgYmFzZWQgYnVpbGRzLCBMaWJSYXdMaXRlIG5lZWRzIHRoZSB3aW5zb2NrIGxpYnJhcmllcy4NCkxJQlJBUklFUyA9IC1sd3NvY2szMiAtbHdzMl8zMg0KDQojIERlZmluZSBzb21lIGFkZGl0aW9uYWwgc3ltYm9sZXMgb25seSBuZWVkZWQgZm9yIFdJTjMyIGJhc2VkIGJ1aWxkczoNCldJTjMyX0NGTEFHUyA9ICQoTElCX1RZUEVfRkxBR1MpIC1ET1BKX1NUQVRJQw0KV0lOMzJfQ1hYRkxBR1MgPSAkKFdJTjMyX0NGTEFHUykgLURMSUJSQVdfTk9ETEwgLURMSUJSQVdfTElCUkFSWV9CVUlMRA0KDQpXSU4zMl9TVEFUSUNfRkxBR1MgPSAtREZSRUVJTUFHRV9MSUINCldJTjMyX1NIQVJFRF9GTEFHUyA9IC1ERlJFRUlNQUdFX0VYUE9SVFMNCg0KTU9EVUxFUyA9ICQoU1JDUzouYz0ubykNCk1PRFVMRVMgOj0gJChNT0RVTEVTOi5jcHA9Lm8pDQpSRVNPVVJDRSA9ICQoUkNGSUxFOi5yYz0uY29mZikNCkNGTEFHUyA/PSAtTzMgLWZleGNlcHRpb25zIC1ETkRFQlVHICQoV0lOMzJfQ0ZMQUdTKQ0KQ0ZMQUdTICs9ICQoSU5DTFVERSkNCkNYWEZMQUdTID89IC1PMyAtZmV4Y2VwdGlvbnMgLVduby1jdG9yLWR0b3ItcHJpdmFjeSAtRE5ERUJVRyAkKFdJTjMyX0NYWEZMQUdTKSAtRE5PX0xDTVMNCkNYWEZMQUdTICs9ICQoSU5DTFVERSkNClJDRkxBR1MgPz0gLUROREVCVUcNCkxERkxBR1MgPSAtcyAtc2hhcmVkIC1zdGF0aWMgLVdsLC1zb25hbWUsJChTT0xJQk5BTUUpDQpETExUT09MRkxBR1MgPSAtLWFkZC1zdGRjYWxsLXVuZGVyc2NvcmUNCg0KVEFSR0VUID0gRnJlZUltYWdlDQpTVEFUSUNMSUIgPSAkKFRBUkdFVCkuYQ0KU0hBUkVETElCID0gJChUQVJHRVQpLmRsbA0KSU1QT1JUTElCID0gJChUQVJHRVQpLmxpYg0KRVhQT1JUTElCID0gJChUQVJHRVQpLmV4cA0KU09MSUJOQU1FID0gJChTSEFSRURMSUIpLiQoVkVSX01BSk9SKQ0KDQpESVNUU0hBUkVEID0gJChhZGRwcmVmaXggJChESVNURElSKS8sICQoU0hBUkVETElCKSAkKElNUE9SVExJQikgJChIRUFERVIpKQ0KRElTVFNUQVRJQyA9ICQoYWRkcHJlZml4ICQoRElTVERJUikvLCAkKFNUQVRJQ0xJQikgJChIRUFERVIpKQ0KDQojIFRoZSBGcmVlSW1hZ2UgbGlicmFyeSB0eXBlIGRlZmF1bHRzIHRvIFNIQVJFRA0KRlJFRUlNQUdFX0xJQlJBUllfVFlQRSA/PSBTSEFSRUQNCg0KVEFSR0VUTElCID0gJCgkKEZSRUVJTUFHRV9MSUJSQVJZX1RZUEUpTElCKQ0KVEFSR0VURElTVCA9ICQoRElTVCQoRlJFRUlNQUdFX0xJQlJBUllfVFlQRSkpDQpMSUJfVFlQRV9GTEFHUyA9ICQoV0lOMzJfJChGUkVFSU1BR0VfTElCUkFSWV9UWVBFKV9GTEFHUykNCg0KZGVmYXVsdDogYWxsDQoNCmFsbDogbWtkaXN0DQoNCnJlYnVpbGQ6IGNsZWFuIGFsbA0KDQpta2Rpc3Q6IEZyZWVJbWFnZSAkKFRBUkdFVERJU1QpDQoNCkZyZWVJbWFnZTogJChUQVJHRVRMSUIpDQoNCiUubzogJS5jDQoJJChDQykgJChDRkxBR1MpIC1jICQ8IC1vICRADQoNCiUubzogJS5jcHANCgkkKENYWCkgJChDWFhGTEFHUykgLWMgJDwgLW8gJEANCg0KJS5jb2ZmOiAlLnJjDQoJJChSQykgJChSQ0ZMQUdTKSAtbyAkQCAkPA0KDQokKERJU1RESVIpLyU6ICUNCgkkKENQKSAkPCAkQA0KDQokKERJU1RESVIpLyU6ICQoU1JDRElSKS8lDQoJJChDUCkgJDwgJEANCg0KJChTVEFUSUNMSUIpOiAkKE1PRFVMRVMpDQoJJChBUikgcnMgJEAgJChNT0RVTEVTKQ0KDQokKElNUE9SVExJQikgJChFWFBPUlRMSUIpOiAkKE1PRFVMRVMpIA0KCSQoRExMVE9PTCkgLWUgJChFWFBPUlRMSUIpIC1sICQoSU1QT1JUTElCKSAtRCAkKFNIQVJFRExJQikgJChETExUT09MRkxBR1MpICQoTU9EVUxFUykNCg0KJChTSEFSRURMSUIpOiAkKEVYUE9SVExJQikgJChSRVNPVVJDRSkNCgkkKExEKSAkKExERkxBR1MpIC1vICRAICQoRVhQT1JUTElCKSAkKE1PRFVMRVMpICQoUkVTT1VSQ0UpICQoTElCUkFSSUVTKQ0KDQokKERJU1RESVIpOg0KCSQoTUQpICQoRElTVERJUikNCg0KJChUQVJHRVRESVNUKTogJChESVNURElSKQ0KDQppbnN0YWxsOg0KCSQoQ1ApICQoU0hBUkVETElCKSAkKElOU1RBTExESVIpDQoNCmNsZWFuOg0KCSQoUk0pIGNvcmUgJChESVNURElSKS8qLiogJChNT0RVTEVTKSAkKFJFU09VUkNFKSAkKFNUQVRJQ0xJQikgJChTSEFSRURMSUIpICQoSU1QT1JUTElCKSAkKEVYUE9SVExJQikNCg==