IwojIE1ha2VmaWxlIGZvciBGcmVlVHlwZTIgbGluayBsaWJyYXJ5IHVzaW5nIEFtaWdhIFNBUy9DIDYuNTgKIwoKCiMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMjEgYnkKIyBXZXJuZXIgTGVtYmVyZyBhbmQgRGV0bGVmIFf8cmtuZXIuCiMKIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAojIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQojIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CiMgZnVsbHkuCgoKIyB0byBidWlsZCBmcm9tIHRoZSBidWlsZHMvYW1pZ2EgZGlyZWN0b3J5IGNhbGwKIwojICBzbWFrZSBhc3NpZ24KIyAgc21ha2UKIwojIFlvdXIgcHJvZ3JhbXMgc291cmNlIGNvZGUgc2hvdWxkIHN0YXJ0IHdpdGggdGhpcwojICh1bmNvbW1lbnQgdGhlIHBhcnRzIHlvdSBkbyBub3QgbmVlZCB0byBrZWVwIHRoZSBwcm9ncmFtIHNtYWxsKToKIyAtLS04PC0tLQojZGVmaW5lIEZUX1VTRV9BVVRPRklUIC8vIGF1dG9maXR0ZXIKI2RlZmluZSBGVF9VU0VfUkFTVEVSICAvLyBtb25vY2hyb21lIHJhc3Rlcml6ZXIKI2RlZmluZSBGVF9VU0VfU01PT1RIICAvLyBhbnRpLWFsaWFzaW5nIHJhc3Rlcml6ZXIKI2RlZmluZSBGVF9VU0VfVFQgICAgICAvLyB0cnVldHlwZSBmb250IGRyaXZlcgojZGVmaW5lIEZUX1VTRV9UMSAgICAgIC8vIHR5cGUxIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX1Q0MiAgICAgLy8gdHlwZTQyIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX1QxQ0lEICAgLy8gY2lkLWtleWVkIHR5cGUxIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX0NGRiAgICAgLy8gb3BlbnR5cGUgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfQkRGICAgICAvLyBiZGYgYml0bWFwIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX1BDRiAgICAgLy8gcGNmIGJpdG1hcCBmb250IGRyaXZlcgojZGVmaW5lIEZUX1VTRV9QRlIgICAgIC8vIHBmciBmb250IGRyaXZlcgojZGVmaW5lIEZUX1VTRV9XSU5GTlQgIC8vIHdpbmRvd3MgLmZudHwuZm9uIGJpdG1hcCBmb250IGRyaXZlcgojZGVmaW5lIEZUX1VTRV9PVFYgICAgIC8vIG9wZW50eXBlIHZhbGlkYXRvcgojZGVmaW5lIEZUX1VTRV9HWFYgICAgIC8vIHRydWV0eXBlIGd4IHZhbGlkYXRvcgojaW5jbHVkZSAiRlQ6c3JjL2Jhc2UvZnRpbml0LmMiCiMgLS0tODwtLS0KIwojIGxpbmsgeW91ciBwcm9ncmFtcyB3aXRoIGZ0Ml82ODB4MC5saWIgYW5kIGVpdGhlciBmdHN5c3RlbS5vIG9yIGZ0c3lzdGVtcHVyZS5vCiMgKGFuZCBlaXRoZXIgZnRkZWJ1Zy5vIG9yIGZ0ZGVidWdwdXJlLm8gaWYgeW91IGVuYWJsZWQgRlRfREVCVUdfTEVWRUxfRVJST1Igb3IKIyBGVF9ERUJVR19MRVZFTF9UUkFDRSBpbiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oKS4KCk9CSkJBU0UgPSBmdGJhc2UubyBmdGJib3gubyBmdGJkZi5vIGZ0Yml0bWFwLm8gZnRjaWQubyBmdGZzdHlwZS5vICAgICAgXAoJICBmdGdhc3AubyBmdGdseXBoLm8gZnRneHZhbC5vIGZ0bW0ubyBmdG90dmFsLm8gICAgICAgICAgICAgICAgXAoJICBmdHBhdGVudC5vIGZ0cGZyLm8gZnRzdHJva2UubyBmdHN5bnRoLm8gZnR0eXBlMS5vIGZ0d2luZm50Lm8KCk9CSlNZU1RFTSA9IGZ0c3lzdGVtLm8gZnRzeXN0ZW1wdXJlLm8KCk9CSkRFQlVHID0gZnRkZWJ1Zy5vIGZ0ZGVidWdwdXJlLm8KCk9CSkFGSVQgPSBhdXRvZml0Lm8KCk9CSkdYViA9IGd4dmFsaWQubwoKT0JKT1RWID0gb3R2YWxpZC5vCgpPQkpQUyA9IHBzYXV4Lm8gcHNuYW1lcy5vIHBzaGludGVyLm8KCk9CSlJBU1RFUiA9IHJhc3Rlci5vIHNtb290aC5vCgpPQkpTRk5UID0gc2ZudC5vCgpPQkpDQUNIRSA9IGZ0Y2FjaGUubwoKT0JKRk9OVEQgPSBjZmYubyB0eXBlMS5vIHR5cGU0Mi5vIHR5cGUxY2lkLm9cCgkgICB0cnVldHlwZS5vIHdpbmZudC5vIGJkZi5vIHBjZi5vIHBmci5vCgpDT1JFID0gRlQ6c3JjLwoKQ1BVICAgICAgID0gNjgwMDAKI0NQVSAgICAgID0gNjgwMjAKI0NQVSAgICAgID0gNjgwMzAKI0NQVSAgICAgID0gNjgwNDAKI0NQVSAgICAgID0gNjgwNjAKCk9QVElNSVpFUiA9IG9wdGlubG9jYWwKClNDRkxBR1MgPSBvcHRpbWl6ZSBvcHR0aW1lIG9wdHNjaGVkIHN0cm1lcmdlIGRhdGE9ZmFyb25seSBpZGxlbj01MCBjcHU9JChDUFUpXAoJICBpZGlyPWluY2x1ZGUvIGlkaXI9JChDT1JFKSBpZGlyPUZUOmluY2x1ZGUvIG5vc3RhY2tjaGVjayBub2Noa2Fib3J0XAoJICBub2ljb25zIGlnbm9yZT03OSw4NSwxMTAsMzA2IHBhcmFtZXRlcnM9Ym90aCBkZWZpbmU9RlQyX0JVSUxEX0xJQlJBUlkKCkxJQiAgPSBmdDJfJChDUFUpLmxpYgoKIyBzYW1wbGUgbGlua2VyIG9wdGlvbnMKT1BUUyA9IGxpbmsgbGliPSQoTElCKSxsaWI6c2MubGliLGxpYjphbWlnYS5saWIsbGliOmRlYnVnLmxpYlwKICAgICAgIHNtYWxsY29kZSBzbWFsbGRhdGEgbm9pY29ucyB1dGlsbGliCgojIHNhbXBsZSBwcm9ncmFtIGVudHJ5CiNteXByb2c6IG15cHJvZy5jIGZ0c3lzdGVtLm8gJChMSUIpCiMJc2MgJDwgcHJvZ3JhbW5hbWU9JEAgZnRzeXN0ZW0ubyAkKFNDRkxBR1MpICQoT1BUUykKCmFsbDoJJChMSUIpICQoT0JKU1lTVEVNKSAkKE9CSkRFQlVHKQoKYXNzaWduOgoJYXNzaWduIEZUOiAvLwoKIyB1c2VzIHNlcGFyYXRlIG9iamVjdCBtb2R1bGVzIGluIGxpYiB0byBtYWtlIGZvciBlYXNpZXIgZGVidWdnaW5nCiMgYWxzbywgY2FuIG1ha2Ugc21hbGxlciBwcm9ncmFtcyBpZiBlbnRpcmUgZW5naW5lIGlzIG5vdCB1c2VkCmZ0Ml8kKENQVSkubGliOiAgJChPQkpCQVNFKSAkKE9CSkFGSVQpICQoT0JKT1RWKSAkKE9CSlBTKSAkKE9CSlJBU1RFUikgJChPQkpTRk5UKSAkKE9CSkNBQ0hFKSAkKE9CSkZPTlREKSBsencubyBnemlwLm8gYnppcDIubwoJb21sICRAIHIgJChPQkpCQVNFKSAkKE9CSkFGSVQpICQoT0JKT1RWKSAkKE9CSlBTKSAkKE9CSlJBU1RFUikgJChPQkpTRk5UKSAkKE9CSkNBQ0hFKSAkKE9CSkZPTlREKSBsencubyBnemlwLm8gYnppcDIubwoKY2xlYW46CgktZGVsZXRlIFwjPy5vCgpyZWFsY2xlYW46IGNsZWFuCgktZGVsZXRlIGZ0MiQoQ1BVKS5saWIKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IGJhc2UKIwpmdGJhc2UubzogJChDT1JFKWJhc2UvZnRiYXNlLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdGluaXQubzogJChDT1JFKWJhc2UvZnRpbml0LmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdHN5c3RlbS5vOiAkKENPUkUpYmFzZS9mdHN5c3RlbS5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRzeXN0ZW1wdXJlLm86IHNyYy9iYXNlL2Z0c3lzdGVtLmMJIyMgcHVyZSB2ZXJzaW9uIGZvciB1c2UgaW4gcnVuLXRpbWUgbGlicmFyeSBldGMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdGRlYnVnLm86ICQoQ09SRSliYXNlL2Z0ZGVidWcuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0ZGVidWdwdXJlLm86IHNyYy9iYXNlL2Z0ZGVidWcuYwkjIyBwdXJlIHZlcnNpb24gZm9yIHVzZSBpbiBydW4tdGltZSBsaWJyYXJ5IGV0YwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CiMKIyBmcmVldHlwZSBsaWJyYXJ5IGJhc2UgZXh0ZW5zaW9ucwojCmZ0YmJveC5vOiAkKENPUkUpYmFzZS9mdGJib3guYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0YmRmLm86ICQoQ09SRSliYXNlL2Z0YmRmLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdGJpdG1hcC5vOiAkKENPUkUpYmFzZS9mdGJpdG1hcC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRjaWQubzogJChDT1JFKWJhc2UvZnRjaWQuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0ZnN0eXBlLm86ICQoQ09SRSliYXNlL2Z0ZnN0eXBlLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdGdhc3AubzogJChDT1JFKWJhc2UvZnRnYXNwLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdGdseXBoLm86ICQoQ09SRSliYXNlL2Z0Z2x5cGguYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0Z3h2YWwubzogJChDT1JFKWJhc2UvZnRneHZhbC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRtbS5vOiAkKENPUkUpYmFzZS9mdG1tLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdG90dmFsLm86ICQoQ09SRSliYXNlL2Z0b3R2YWwuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0cGF0ZW50Lm86ICQoQ09SRSliYXNlL2Z0cGF0ZW50LmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdHBmci5vOiAkKENPUkUpYmFzZS9mdHBmci5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnRzdHJva2UubzogJChDT1JFKWJhc2UvZnRzdHJva2UuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CmZ0c3ludGgubzogJChDT1JFKWJhc2UvZnRzeW50aC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKZnR0eXBlMS5vOiAkKENPUkUpYmFzZS9mdHR5cGUxLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPApmdHdpbmZudC5vOiAkKENPUkUpYmFzZS9mdHdpbmZudC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IGF1dG9maXR0ZXIgbW9kdWxlCiMKYXV0b2ZpdC5vOiAkKENPUkUpYXV0b2ZpdC9hdXRvZml0LmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgUFMgaGludGluZyBtb2R1bGUKIwpwc2hpbnRlci5vOiAkKENPUkUpcHNoaW50ZXIvcHNoaW50ZXIuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CiMKIyBmcmVldHlwZSBsaWJyYXJ5IFBTIHN1cHBvcnQgbW9kdWxlCiMKcHNhdXgubzogJChDT1JFKXBzYXV4L3BzYXV4LmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgUFMgZ2x5cGggbmFtZXMgbW9kdWxlCiMKcHNuYW1lcy5vOiAkKENPUkUpcHNuYW1lcy9wc25hbWVzLmMKCXNjICQoU0NGTEFHUykgY29kZT1mYXIgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgbW9ub2Nocm9tZSByYXN0ZXIgbW9kdWxlCiMKcmFzdGVyLm86ICQoQ09SRSlyYXN0ZXIvcmFzdGVyLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgYW50aS1hbGlhc2luZyByYXN0ZXIgbW9kdWxlCiMKc21vb3RoLm86ICQoQ09SRSlzbW9vdGgvc21vb3RoLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgJ3NmbnQnIG1vZHVsZQojCnNmbnQubzogJChDT1JFKXNmbnQvc2ZudC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IGdseXBoIGFuZCBpbWFnZSBjYWNoaW5nIHN5c3RlbSAoc3RpbGwgZXhwZXJpbWVudGFsKQojCmZ0Y2FjaGUubzogJChDT1JFKWNhY2hlL2Z0Y2FjaGUuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBPcGVuVHlwZSBmb250IGRyaXZlcgojCmNmZi5vOiAkKENPUkUpY2ZmL2NmZi5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IFRydWVUeXBlIGZvbnQgZHJpdmVyCiMKdHJ1ZXR5cGUubzogJChDT1JFKXRydWV0eXBlL3RydWV0eXBlLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgVHlwZTEgZm9udCBkcml2ZXIKIwp0eXBlMS5vOiAkKENPUkUpdHlwZTEvdHlwZTEuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgVHlwZTQyIGZvbnQgZHJpdmVyCiMKdHlwZTQyLm86ICQoQ09SRSl0eXBlNDIvdHlwZTQyLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgQ0lELWtleWVkIFR5cGUxIGZvbnQgZHJpdmVyCiMKdHlwZTFjaWQubzogJChDT1JFKWNpZC90eXBlMWNpZC5jCglzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKIwojIGZyZWV0eXBlIGxpYnJhcnkgQ0lELWtleWVkIFR5cGUxIGZvbnQgZHJpdmVyIGV4dGVuc2lvbnMKIwojY2lkYWZtLm86ICQoQ09SRSljaWQvY2lkYWZtLmMKIwlzYyAkKFNDRkxBR1MpIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IEJERiBiaXRtYXAgZm9udCBkcml2ZXIKIwpiZGYubzogJChDT1JFKWJkZi9iZGYuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBQQ0YgYml0bWFwIGZvbnQgZHJpdmVyCiMKcGNmLm86ICQoQ09SRSlwY2YvcGNmLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgZ3ppcCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIFBDRiBiaXRtYXAgZm9udHMKIwpnemlwLm86ICQoQ09SRSlnemlwL2Z0Z3ppcC5jCglzYyAkKFNDRkxBR1MpIGRlZmluZSBGQVIgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgYnppcDIgc3VwcG9ydCBmb3IgY29tcHJlc3NlZCBQQ0YgYml0bWFwIGZvbnRzCiMKYnppcDIubzogJChDT1JFKWJ6aXAyL2Z0YnppcDIuYwoJc2MgJChTQ0ZMQUdTKSBkZWZpbmUgRkFSIG9iam5hbWU9JEAgJDwKCiMKIyBmcmVldHlwZSBsaWJyYXJ5IGNvbXByZXNzIHN1cHBvcnQgZm9yIGNvbXByZXNzZWQgUENGIGJpdG1hcCBmb250cwojCmx6dy5vOiAkKENPUkUpbHp3L2Z0bHp3LmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgUEZSIGZvbnQgZHJpdmVyCiMKcGZyLm86ICQoQ09SRSlwZnIvcGZyLmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgV2luZG93cyBGTlQvRk9OIGJpdG1hcCBmb250IGRyaXZlcgojCndpbmZudC5vOiAkKENPUkUpd2luZm9udHMvd2luZm50LmMKCXNjICQoU0NGTEFHUykgb2JqbmFtZT0kQCAkPAoKIwojIGZyZWV0eXBlIGxpYnJhcnkgVHJ1ZVR5cGVHWCB2YWxpZGF0b3IKIwpneHZhbGlkLm86ICQoQ09SRSlneHZhbGlkL2d4dmFsaWQuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojCiMgZnJlZXR5cGUgbGlicmFyeSBPcGVuVHlwZSB2YWxpZGF0b3IKIwpvdHZhbGlkLm86ICQoQ09SRSlvdHZhbGlkL290dmFsaWQuYwoJc2MgJChTQ0ZMQUdTKSBvYmpuYW1lPSRAICQ8CgojTG9jYWwgVmFyaWFibGVzOgojY29kaW5nOiBsYXRpbi0xCiNFbmQ6Cg==