IwojIE1ha2VmaWxlIGZvciBGcmVlVHlwZTIgbGluayBsaWJyYXJ5IHVzaW5nIEFtaWdhIFNBUy9DIDYuNTgKIwoKCiMgQ29weXJpZ2h0IDIwMDUtMjAxOCBieQojIFdlcm5lciBMZW1iZXJnIGFuZCBEZXRsZWYgV/xya25lci4KIwojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCiMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAojIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CiMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKIyBmdWxseS4KCgojIHRvIGJ1aWxkIGZyb20gdGhlIGJ1aWxkcy9hbWlnYSBkaXJlY3RvcnkgY2FsbAojCiMgIHNtYWtlIGFzc2lnbgojICBzbWFrZQojCiMgWW91ciBwcm9ncmFtcyBzb3VyY2UgY29kZSBzaG91bGQgc3RhcnQgd2l0aCB0aGlzCiMgKHVuY29tbWVudCB0aGUgcGFydHMgeW91IGRvIG5vdCBuZWVkIHRvIGtlZXAgdGhlIHByb2dyYW0gc21hbGwpOgojIC0tLTg8LS0tCiNkZWZpbmUgRlRfVVNFX0FVVE9GSVQgLy8gYXV0b2ZpdHRlcgojZGVmaW5lIEZUX1VTRV9SQVNURVIgIC8vIG1vbm9jaHJvbWUgcmFzdGVyaXplcgojZGVmaW5lIEZUX1VTRV9TTU9PVEggIC8vIGFudGktYWxpYXNpbmcgcmFzdGVyaXplcgojZGVmaW5lIEZUX1VTRV9UVCAgICAgIC8vIHRydWV0eXBlIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX1QxICAgICAgLy8gdHlwZTEgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfVDQyICAgICAvLyB0eXBlNDIgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfVDFDSUQgICAvLyBjaWQta2V5ZWQgdHlwZTEgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfQ0ZGICAgICAvLyBvcGVudHlwZSBmb250IGRyaXZlcgojZGVmaW5lIEZUX1VTRV9CREYgICAgIC8vIGJkZiBiaXRtYXAgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfUENGICAgICAvLyBwY2YgYml0bWFwIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX1BGUiAgICAgLy8gcGZyIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX1dJTkZOVCAgLy8gd2luZG93cyAuZm50fC5mb24gYml0bWFwIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX09UViAgICAgLy8gb3BlbnR5cGUgdmFsaWRhdG9yCiNkZWZpbmUgRlRfVVNFX0dYViAgICAgLy8gdHJ1ZXR5cGUgZ3ggdmFsaWRhdG9yCiNpbmNsdWRlICJGVDpzcmMvYmFzZS9mdGluaXQuYyIKIyAtLS04PC0tLQojCiMgbGluayB5b3VyIHByb2dyYW1zIHdpdGggZnQyXzY4MHgwLmxpYiBhbmQgZWl0aGVyIGZ0c3lzdGVtLm8gb3IgZnRzeXN0ZW1wdXJlLm8KIyAoYW5kIGVpdGhlciBmdGRlYnVnLm8gb3IgZnRkZWJ1Z3B1cmUubyBpZiB5b3UgZW5hYmxlZCBGVF9ERUJVR19MRVZFTF9FUlJPUiBvcgojIEZUX0RFQlVHX0xFVkVMX1RSQUNFIGluIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgpLgoKT0JKQkFTRSA9IGZ0YmFzZS5vIGZ0YmJveC5vIGZ0YmRmLm8gZnRiaXRtYXAubyBmdGNpZC5vIGZ0ZnN0eXBlLm8gICAgICBcCgkgIGZ0Z2FzcC5vIGZ0Z2x5cGgubyBmdGd4dmFsLm8gZnRtbS5vIGZ0b3R2YWwubyAgICAgICAgICAgICAgICBcCgkgIGZ0cGF0ZW50Lm8gZnRwZnIubyBmdHN0cm9rZS5vIGZ0c3ludGgubyBmdHR5cGUxLm8gZnR3aW5mbnQubwoKT0JKU1lTVEVNID0gZnRzeXN0ZW0ubyBmdHN5c3RlbXB1cmUubwoKT0JKREVCVUcgPSBmdGRlYnVnLm8gZnRkZWJ1Z3B1cmUubwoKT0JKQUZJVCA9IGF1dG9maXQubwoKT0JKR1hWID0gZ3h2YWxpZC5vCgpPQkpPVFYgPSBvdHZhbGlkLm8KCk9CSlBTID0gcHNhdXgubyBwc25hbWVzLm8gcHNoaW50ZXIubwoKT0JKUkFTVEVSID0gcmFzdGVyLm8gc21vb3RoLm8KCk9CSlNGTlQgPSBzZm50Lm8KCk9CSkNBQ0hFID0gZnRjYWNoZS5vCgpPQkpGT05URCA9IGNmZi5vIHR5cGUxLm8gdHlwZTQyLm8gdHlwZTFjaWQub1wKCSAgIHRydWV0eXBlLm8gd2luZm50Lm8gYmRmLm8gcGNmLm8gcGZyLm8KCkNPUkUgPSBGVDpzcmMvCgpDUFUgICAgICAgPSA2ODAwMAojQ1BVICAgICAgPSA2ODAyMAojQ1BVICAgICAgPSA2ODAzMAojQ1BVICAgICAgPSA2ODA0MAojQ1BVICAgICAgPSA2ODA2MAoKT1BUSU1JWkVSID0gb3B0aW5sb2NhbAoKU0NGTEFHUyA9IG9wdGltaXplIG9wdHRpbWUgb3B0c2NoZWQgc3RybWVyZ2UgZGF0YT1mYXJvbmx5IGlkbGVuPTUwIGNwdT0kKENQVSlcCgkgIGlkaXI9aW5jbHVkZS8gaWRpcj0kKENPUkUpIGlkaXI9RlQ6aW5jbHVkZS8gbm9zdGFja2NoZWNrIG5vY2hrYWJvcnRcCgkgIG5vaWNvbnMgaWdub3JlPTc5LDg1LDExMCwzMDYgcGFyYW1ldGVycz1ib3RoIGRlZmluZT1GVDJfQlVJTERfTElCUkFSWQoKTElCICA9IGZ0Ml8kKENQVSkubGliCgojIHNhbXBsZSBsaW5rZXIgb3B0aW9ucwpPUFRTID0gbGluayBsaWI9JChMSUIpLGxpYjpzYy5saWIsbGliOmFtaWdhLmxpYixsaWI6ZGVidWcubGliXAogICAgICAgc21hbGxjb2RlIHNtYWxsZGF0YSBub2ljb25zIHV0aWxsaWIKCiMgc2FtcGxlIHByb2dyYW0gZW50cnkKI215cHJvZzogbXlwcm9nLmMgZnRzeXN0ZW0ubyAkKExJQikKIwlzYyAkPCBwcm9ncmFtbmFtZT0kQCBmdHN5c3RlbS5vICQoU0NGTEFHUykgJChPUFRTKQoKYWxsOgkkKExJQikgJChPQkpTWVNURU0pICQoT0JKREVCVUcpCgphc3NpZ246Cglhc3NpZ24gRlQ6IC8vCgojIHVzZXMgc2VwYXJhdGUgb2JqZWN0IG1vZHVsZXMgaW4gbGliIHRvIG1ha2UgZm9yIGVhc2llciBkZWJ1Z2dpbmcKIyBhbHNvLCBjYW4gbWFrZSBzbWFsbGVyIHByb2dyYW1zIGlmIGVudGlyZSBlbmdpbmUgaXMgbm90IHVzZWQKZnQyXyQoQ1BVKS5saWI6ICAkKE9CSkJBU0UpICQoT0JKQUZJVCkgJChPQkpPVFYpICQoT0JKUFMpICQoT0JKUkFTVEVSKSAkKE9CSlNGTlQpICQoT0JKQ0FDSEUpICQoT0JKRk9OVEQpIGx6dy5vIGd6aXAubyBiemlwMi5vCglvbWwgJEAgciAkKE9CSkJBU0UpICQoT0JKQUZJVCkgJChPQkpPVFYpICQoT0JKUFMpICQoT0JKUkFTVEVSKSAkKE9CSlNGTlQpICQoT0JKQ0FDSEUpICQoT0JKRk9OVEQpIGx6dy5vIGd6aXAubyBiemlwMi5vCgpjbGVhbjoKCS1kZWxldGUgXCM/Lm8KCnJlYWxjbGVhbjogY2xlYW4KCS1kZWxldGUgZnQyJChDUFUpLmxpYgoKIwojIGZyZWV0eXBlIGxpYnJhcnkgYmFzZQojCmZ0YmFzZS5vOiAkKENPUkUpYmFzZS9mdGJhc2UuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0aW5pdC5vOiAkKENPUkUpYmFzZS9mdGluaXQuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0c3lzdGVtLm86ICQoQ09SRSliYXNlL2Z0c3lzdGVtLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdHN5c3RlbXB1cmUubzogc3JjL2Jhc2UvZnRzeXN0ZW0uYwkjIyBwdXJlIHZlcnNpb24gZm9yIHVzZSBpbiBydW4tdGltZSBsaWJyYXJ5IGV0YwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0ZGVidWcubzogJChDT1JFKWJhc2UvZnRkZWJ1Zy5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRkZWJ1Z3B1cmUubzogc3JjL2Jhc2UvZnRkZWJ1Zy5jCSMjIHB1cmUgdmVyc2lvbiBmb3IgdXNlIGluIHJ1bi10aW1lIGxpYnJhcnkgZXRjCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKIwojIGZyZWV0eXBlIGxpYnJhcnkgYmFzZSBleHRlbnNpb25zCiMKZnRiYm94Lm86ICQoQ09SRSliYXNlL2Z0YmJveC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRiZGYubzogJChDT1JFKWJhc2UvZnRiZGYuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0Yml0bWFwLm86ICQoQ09SRSliYXNlL2Z0Yml0bWFwLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdGNpZC5vOiAkKENPUkUpYmFzZS9mdGNpZC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRmc3R5cGUubzogJChDT1JFKWJhc2UvZnRmc3R5cGUuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0Z2FzcC5vOiAkKENPUkUpYmFzZS9mdGdhc3AuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0Z2x5cGgubzogJChDT1JFKWJhc2UvZnRnbHlwaC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRneHZhbC5vOiAkKENPUkUpYmFzZS9mdGd4dmFsLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdG1tLm86ICQoQ09SRSliYXNlL2Z0bW0uYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0b3R2YWwubzogJChDT1JFKWJhc2UvZnRvdHZhbC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRwYXRlbnQubzogJChDT1JFKWJhc2UvZnRwYXRlbnQuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0cGZyLm86ICQoQ09SRSliYXNlL2Z0cGZyLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdHN0cm9rZS5vOiAkKENPUkUpYmFzZS9mdHN0cm9rZS5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRzeW50aC5vOiAkKENPUkUpYmFzZS9mdHN5bnRoLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdHR5cGUxLm86ICQoQ09SRSliYXNlL2Z0dHlwZTEuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0d2luZm50Lm86ICQoQ09SRSliYXNlL2Z0d2luZm50LmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgYXV0b2ZpdHRlciBtb2R1bGUKIwphdXRvZml0Lm86ICQoQ09SRSlhdXRvZml0L2F1dG9maXQuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBQUyBoaW50aW5nIG1vZHVsZQojCnBzaGludGVyLm86ICQoQ09SRSlwc2hpbnRlci9wc2hpbnRlci5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKIwojIGZyZWV0eXBlIGxpYnJhcnkgUFMgc3VwcG9ydCBtb2R1bGUKIwpwc2F1eC5vOiAkKENPUkUpcHNhdXgvcHNhdXguYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBQUyBnbHlwaCBuYW1lcyBtb2R1bGUKIwpwc25hbWVzLm86ICQoQ09SRSlwc25hbWVzL3BzbmFtZXMuYwoJc2MgJChTQ0ZMQUdTKSBjb2RlPWZhciBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBtb25vY2hyb21lIHJhc3RlciBtb2R1bGUKIwpyYXN0ZXIubzogJChDT1JFKXJhc3Rlci9yYXN0ZXIuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBhbnRpLWFsaWFzaW5nIHJhc3RlciBtb2R1bGUKIwpzbW9vdGgubzogJChDT1JFKXNtb290aC9zbW9vdGguYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSAnc2ZudCcgbW9kdWxlCiMKc2ZudC5vOiAkKENPUkUpc2ZudC9zZm50LmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgZ2x5cGggYW5kIGltYWdlIGNhY2hpbmcgc3lzdGVtIChzdGlsbCBleHBlcmltZW50YWwpCiMKZnRjYWNoZS5vOiAkKENPUkUpY2FjaGUvZnRjYWNoZS5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IE9wZW5UeXBlIGZvbnQgZHJpdmVyCiMKY2ZmLm86ICQoQ09SRSljZmYvY2ZmLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgVHJ1ZVR5cGUgZm9udCBkcml2ZXIKIwp0cnVldHlwZS5vOiAkKENPUkUpdHJ1ZXR5cGUvdHJ1ZXR5cGUuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBUeXBlMSBmb250IGRyaXZlcgojCnR5cGUxLm86ICQoQ09SRSl0eXBlMS90eXBlMS5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBUeXBlNDIgZm9udCBkcml2ZXIKIwp0eXBlNDIubzogJChDT1JFKXR5cGU0Mi90eXBlNDIuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBDSUQta2V5ZWQgVHlwZTEgZm9udCBkcml2ZXIKIwp0eXBlMWNpZC5vOiAkKENPUkUpY2lkL3R5cGUxY2lkLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAojCiMgZnJlZXR5cGUgbGlicmFyeSBDSUQta2V5ZWQgVHlwZTEgZm9udCBkcml2ZXIgZXh0ZW5zaW9ucwojCiNjaWRhZm0ubzogJChDT1JFKWNpZC9jaWRhZm0uYwojCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgQkRGIGJpdG1hcCBmb250IGRyaXZlcgojCmJkZi5vOiAkKENPUkUpYmRmL2JkZi5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IFBDRiBiaXRtYXAgZm9udCBkcml2ZXIKIwpwY2YubzogJChDT1JFKXBjZi9wY2YuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBnemlwIHN1cHBvcnQgZm9yIGNvbXByZXNzZWQgUENGIGJpdG1hcCBmb250cwojCmd6aXAubzogJChDT1JFKWd6aXAvZnRnemlwLmMKCXNjICQoU0NGTEFHUykgZGVmaW5lIEZBUiBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBiemlwMiBzdXBwb3J0IGZvciBjb21wcmVzc2VkIFBDRiBiaXRtYXAgZm9udHMKIwpiemlwMi5vOiAkKENPUkUpYnppcDIvZnRiemlwMi5jCglzYyAkKFNDRkxBR1MpIGRlZmluZSBGQVIgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgY29tcHJlc3Mgc3VwcG9ydCBmb3IgY29tcHJlc3NlZCBQQ0YgYml0bWFwIGZvbnRzCiMKbHp3Lm86ICQoQ09SRSlsencvZnRsencuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBQRlIgZm9udCBkcml2ZXIKIwpwZnIubzogJChDT1JFKXBmci9wZnIuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBXaW5kb3dzIEZOVC9GT04gYml0bWFwIGZvbnQgZHJpdmVyCiMKd2luZm50Lm86ICQoQ09SRSl3aW5mb250cy93aW5mbnQuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBUcnVlVHlwZUdYIHZhbGlkYXRvcgojCmd4dmFsaWQubzogJChDT1JFKWd4dmFsaWQvZ3h2YWxpZC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IE9wZW5UeXBlIHZhbGlkYXRvcgojCm90dmFsaWQubzogJChDT1JFKW90dmFsaWQvb3R2YWxpZC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiNMb2NhbCBWYXJpYWJsZXM6CiNjb2Rpbmc6IGxhdGluLTEKI0VuZDoK