IwojIE1ha2VmaWxlIGZvciBGcmVlVHlwZTIgbGluayBsaWJyYXJ5IHVzaW5nIEFtaWdhIFNBUy9DIDYuNTgKIwoKCiMgQ29weXJpZ2h0IDIwMDUsMjAwNiwgMjAwNyBieQojIFdlcm5lciBMZW1iZXJnIGFuZCBEZXRsZWYgV/xya25lci4KIwojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCiMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCBsaWNlbnNlLAojIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgeW91CiMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKIyBmdWxseS4KCgojIHRvIGJ1aWxkIGZyb20gdGhlIGJ1aWxkcy9hbWlnYSBkaXJlY3RvcnkgY2FsbAojCiMgIHNtYWtlIGFzc2lnbgojICBzbWFrZQojCiMgWW91ciBwcm9ncmFtcyBzb3VyY2UgY29kZSBzaG91bGQgc3RhcnQgd2l0aCB0aGlzCiMgKHVuY29tbWVudCB0aGUgcGFydHMgeW91IGRvIG5vdCBuZWVkIHRvIGtlZXAgdGhlIHByb2dyYW0gc21hbGwpOgojIC0tLTg8LS0tCiNkZWZpbmUgRlRfVVNFX0FVVE9GSVQgLy8gYXV0b2ZpdHRlcgojZGVmaW5lIEZUX1VTRV9SQVNURVIgIC8vIG1vbm9jaHJvbWUgcmFzdGVyaXplcgojZGVmaW5lIEZUX1VTRV9TTU9PVEggIC8vIGFudGktYWxpYXNpbmcgcmFzdGVyaXplcgojZGVmaW5lIEZUX1VTRV9UVCAgICAgIC8vIHRydWV0eXBlIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX1QxICAgICAgLy8gdHlwZTEgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfVDQyICAgICAvLyB0eXBlNDIgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfVDFDSUQgICAvLyBjaWQta2V5ZWQgdHlwZTEgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfQ0ZGICAgICAvLyBvcGVudHlwZSBmb250IGRyaXZlcgojZGVmaW5lIEZUX1VTRV9CREYgICAgIC8vIGJkZiBiaXRtYXAgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfUENGICAgICAvLyBwY2YgYml0bWFwIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX1BGUiAgICAgLy8gcGZyIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX1dJTkZOVCAgLy8gd2luZG93cyAuZm50fC5mb24gYml0bWFwIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX09UViAgICAgLy8gb3BlbnR5cGUgdmFsaWRhdG9yCiNkZWZpbmUgRlRfVVNFX0dYViAgICAgLy8gdHJ1ZXR5cGUgZ3ggdmFsaWRhdG9yCiNpbmNsdWRlICJGVDpzcmMvYmFzZS9mdGluaXQuYyIKIyAtLS04PC0tLQojCiMgbGluayB5b3VyIHByb2dyYW1zIHdpdGggZnQyXzY4MHgwLmxpYiBhbmQgZWl0aGVyIGZ0c3lzdGVtLm8gb3IgZnRzeXN0ZW1wdXJlLm8KIyAoYW5kIGVpdGhlciBmdGRlYnVnLm8gb3IgZnRkZWJ1Z3B1cmUubyBpZiB5b3UgZW5hYmxlZCBGVF9ERUJVR19MRVZFTF9FUlJPUiBvcgojIEZUX0RFQlVHX0xFVkVMX1RSQUNFIGluIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgpLgoKT0JKQkFTRSA9IGZ0YmFzZS5vIGZ0YmJveC5vIGZ0YmRmLm8gZnRiaXRtYXAubyBmdGdhc3AubyBmdGdseXBoLm8gIFwKCSAgZnRneHZhbC5vIGZ0bGNkZmlsLm8gZnRtbS5vIGZ0b3R2YWwubyBmdHBmci5vIGZ0c3Ryb2tlLm8gXAoJICBmdHN5bnRoLm8gZnR0eXBlMS5vIGZ0d2luZm50Lm8gZnR4Zjg2Lm8KCk9CSlNZU1RFTSA9IGZ0c3lzdGVtLm8gZnRzeXN0ZW1wdXJlLm8KCk9CSkRFQlVHID0gZnRkZWJ1Zy5vIGZ0ZGVidWdwdXJlLm8KCk9CSkFGSVQgPSBhdXRvZml0Lm8KCk9CSkdYViA9IGd4dmFsaWQubwoKT0JKT1RWID0gb3R2YWxpZC5vCgpPQkpQUyA9IHBzYXV4Lm8gcHNuYW1lcy5vIHBzaGludGVyLm8KCk9CSlJBU1RFUiA9IHJhc3Rlci5vIHNtb290aC5vCgpPQkpTRk5UID0gc2ZudC5vCgpPQkpDQUNIRSA9IGZ0Y2FjaGUubwoKT0JKRk9OVEQgPSBjZmYubyB0eXBlMS5vIHR5cGU0Mi5vIHR5cGUxY2lkLm9cCgkgICB0cnVldHlwZS5vIHdpbmZudC5vIGJkZi5vIHBjZi5vIHBmci5vCgpDT1JFID0gRlQ6c3JjLwoKQ1BVICAgICAgID0gNjgwMDAKI0NQVSAgICAgID0gNjgwMjAKI0NQVSAgICAgID0gNjgwMzAKI0NQVSAgICAgID0gNjgwNDAKI0NQVSAgICAgID0gNjgwNjAKCk9QVElNSVpFUiA9IG9wdGlubG9jYWwKClNDRkxBR1MgPSBvcHRpbWl6ZSBvcHR0aW1lIG9wdHNjaGVkIHN0cm1lcmdlIGRhdGE9ZmFyb25seSBpZGxlbj01MCBjcHU9JChDUFUpXAoJICBpZGlyPWluY2x1ZGUvIGlkaXI9JChDT1JFKSBpZGlyPUZUOmluY2x1ZGUvIG5vc3RhY2tjaGVjayBub2Noa2Fib3J0XAoJICBub2ljb25zIGlnbm9yZT03OSw4NSwxMTAsMzA2IHBhcmFtZXRlcnM9Ym90aCBkZWZpbmU9RlQyX0JVSUxEX0xJQlJBUlkKCkxJQiAgPSBmdDJfJChDUFUpLmxpYgoKIyBzYW1wbGUgbGlua2VyIG9wdGlvbnMKT1BUUyA9IGxpbmsgbGliPSQoTElCKSxsaWI6c2MubGliLGxpYjphbWlnYS5saWIsbGliOmRlYnVnLmxpYlwKICAgICAgIHNtYWxsY29kZSBzbWFsbGRhdGEgbm9pY29ucyB1dGlsbGliCgojIHNhbXBsZSBwcm9ncmFtIGVudHJ5CiNteXByb2c6IG15cHJvZy5jIGZ0c3lzdGVtLm8gJChMSUIpCiMJc2MgJDwgcHJvZ3JhbW5hbWU9JEAgZnRzeXN0ZW0ubyAkKFNDRkxBR1MpICQoT1BUUykKCmFsbDoJJChMSUIpICQoT0JKU1lTVEVNKSAkKE9CSkRFQlVHKQoKYXNzaWduOgoJYXNzaWduIEZUOiAvLwoKIyB1c2VzIHNlcGFyYXRlIG9iamVjdCBtb2R1bGVzIGluIGxpYiB0byBtYWtlIGZvciBlYXNpZXIgZGVidWdnaW5nCiMgYWxzbywgY2FuIG1ha2Ugc21hbGxlciBwcm9ncmFtcyBpZiBlbnRpcmUgZW5naW5lIGlzIG5vdCB1c2VkCmZ0Ml8kKENQVSkubGliOiAgJChPQkpCQVNFKSAkKE9CSkFGSVQpICQoT0JKT1RWKSAkKE9CSlBTKSAkKE9CSlJBU1RFUikgJChPQkpTRk5UKSAkKE9CSkNBQ0hFKSAkKE9CSkZPTlREKSBsencubyBnemlwLm8KCW9tbCAkQCByICQoT0JKQkFTRSkgJChPQkpBRklUKSAkKE9CSk9UVikgJChPQkpQUykgJChPQkpSQVNURVIpICQoT0JKU0ZOVCkgJChPQkpDQUNIRSkgJChPQkpGT05URCkgbHp3Lm8gZ3ppcC5vCgpjbGVhbjoKCS1kZWxldGUgXCM/Lm8KCnJlYWxjbGVhbjogY2xlYW4KCS1kZWxldGUgZnQyJChDUFUpLmxpYgoKIwojIGZyZWV0eXBlIGxpYnJhcnkgYmFzZQojCmZ0YmFzZS5vOiAkKENPUkUpYmFzZS9mdGJhc2UuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0aW5pdC5vOiAkKENPUkUpYmFzZS9mdGluaXQuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0c3lzdGVtLm86ICQoQ09SRSliYXNlL2Z0c3lzdGVtLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdHN5c3RlbXB1cmUubzogc3JjL2Jhc2UvZnRzeXN0ZW0uYwkjIyBwdXJlIHZlcnNpb24gZm9yIHVzZSBpbiBydW4tdGltZSBsaWJyYXJ5IGV0YwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0ZGVidWcubzogJChDT1JFKWJhc2UvZnRkZWJ1Zy5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRkZWJ1Z3B1cmUubzogc3JjL2Jhc2UvZnRkZWJ1Zy5jCSMjIHB1cmUgdmVyc2lvbiBmb3IgdXNlIGluIHJ1bi10aW1lIGxpYnJhcnkgZXRjCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKIwojIGZyZWV0eXBlIGxpYnJhcnkgYmFzZSBleHRlbnNpb25zCiMKZnRiYm94Lm86ICQoQ09SRSliYXNlL2Z0YmJveC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRiZGYubzogJChDT1JFKWJhc2UvZnRiZGYuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0Yml0bWFwLm86ICQoQ09SRSliYXNlL2Z0Yml0bWFwLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdGdhc3AubzogJChDT1JFKWJhc2UvZnRnYXNwLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdGdseXBoLm86ICQoQ09SRSliYXNlL2Z0Z2x5cGguYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0Z3h2YWwubzogJChDT1JFKWJhc2UvZnRneHZhbC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRsY2RmaWwubzogJChDT1JFKWJhc2UvZnRsY2RmaWwuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0bW0ubzogJChDT1JFKWJhc2UvZnRtbS5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRvdHZhbC5vOiAkKENPUkUpYmFzZS9mdG90dmFsLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdHBmci5vOiAkKENPUkUpYmFzZS9mdHBmci5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRzdHJva2UubzogJChDT1JFKWJhc2UvZnRzdHJva2UuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0c3ludGgubzogJChDT1JFKWJhc2UvZnRzeW50aC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnR0eXBlMS5vOiAkKENPUkUpYmFzZS9mdHR5cGUxLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdHdpbmZudC5vOiAkKENPUkUpYmFzZS9mdHdpbmZudC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnR4Zjg2Lm86ICQoQ09SRSliYXNlL2Z0eGY4Ni5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IGF1dG9maXR0ZXIgbW9kdWxlCiMKYXV0b2ZpdC5vOiAkKENPUkUpYXV0b2ZpdC9hdXRvZml0LmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgUFMgaGludGluZyBtb2R1bGUKIwpwc2hpbnRlci5vOiAkKENPUkUpcHNoaW50ZXIvcHNoaW50ZXIuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CiMKIyBmcmVldHlwZSBsaWJyYXJ5IFBTIHN1cHBvcnQgbW9kdWxlCiMKcHNhdXgubzogJChDT1JFKXBzYXV4L3BzYXV4LmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgUFMgZ2x5cGggbmFtZXMgbW9kdWxlCiMKcHNuYW1lcy5vOiAkKENPUkUpcHNuYW1lcy9wc25hbWVzLmMKCXNjICQoU0NGTEFHUykgY29kZT1mYXIgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgbW9ub2Nocm9tZSByYXN0ZXIgbW9kdWxlCiMKcmFzdGVyLm86ICQoQ09SRSlyYXN0ZXIvcmFzdGVyLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgYW50aS1hbGlhc2luZyByYXN0ZXIgbW9kdWxlCiMKc21vb3RoLm86ICQoQ09SRSlzbW9vdGgvc21vb3RoLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgJ3NmbnQnIG1vZHVsZQojCnNmbnQubzogJChDT1JFKXNmbnQvc2ZudC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IGdseXBoIGFuZCBpbWFnZSBjYWNoaW5nIHN5c3RlbSAoc3RpbGwgZXhwZXJpbWVudGFsKQojCmZ0Y2FjaGUubzogJChDT1JFKWNhY2hlL2Z0Y2FjaGUuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBPcGVuVHlwZSBmb250IGRyaXZlcgojCmNmZi5vOiAkKENPUkUpY2ZmL2NmZi5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IFRydWVUeXBlIGZvbnQgZHJpdmVyCiMKdHJ1ZXR5cGUubzogJChDT1JFKXRydWV0eXBlL3RydWV0eXBlLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgVHlwZTEgZm9udCBkcml2ZXIKIwp0eXBlMS5vOiAkKENPUkUpdHlwZTEvdHlwZTEuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgVHlwZTQyIGZvbnQgZHJpdmVyCiMKdHlwZTQyLm86ICQoQ09SRSl0eXBlNDIvdHlwZTQyLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgQ0lELWtleWVkIFR5cGUxIGZvbnQgZHJpdmVyCiMKdHlwZTFjaWQubzogJChDT1JFKWNpZC90eXBlMWNpZC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKIwojIGZyZWV0eXBlIGxpYnJhcnkgQ0lELWtleWVkIFR5cGUxIGZvbnQgZHJpdmVyIGV4dGVuc2lvbnMKIwojY2lkYWZtLm86ICQoQ09SRSljaWQvY2lkYWZtLmMKIwlzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IEJERiBiaXRtYXAgZm9udCBkcml2ZXIKIwpiZGYubzogJChDT1JFKWJkZi9iZGYuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBQQ0YgYml0bWFwIGZvbnQgZHJpdmVyCiMKcGNmLm86ICQoQ09SRSlwY2YvcGNmLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgZ3ppcCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIFBDRiBiaXRtYXAgZm9udHMKIwpnemlwLm86ICQoQ09SRSlnemlwL2Z0Z3ppcC5jCglzYyAkKFNDRkxBR1MpIGRlZmluZSBGQVIgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgY29tcHJlc3Mgc3VwcG9ydCBmb3IgY29tcHJlc3NlZCBQQ0YgYml0bWFwIGZvbnRzCiMKbHp3Lm86ICQoQ09SRSlsencvZnRsencuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBQRlIgZm9udCBkcml2ZXIKIwpwZnIubzogJChDT1JFKXBmci9wZnIuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBXaW5kb3dzIEZOVC9GT04gYml0bWFwIGZvbnQgZHJpdmVyCiMKd2luZm50Lm86ICQoQ09SRSl3aW5mb250cy93aW5mbnQuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBUcnVlVHlwZUdYIHZhbGlkYXRvcgojCmd4dmFsaWQubzogJChDT1JFKWd4dmFsaWQvZ3h2YWxpZC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IE9wZW5UeXBlIHZhbGlkYXRvcgojCm90dmFsaWQubzogJChDT1JFKW90dmFsaWQvb3R2YWxpZC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiNMb2NhbCBWYXJpYWJsZXM6CiNjb2Rpbmc6IGxhdGluLTEKI0VuZDoK