IyBNYWtlZmlsZSBmb3IgVklNIG9uIFdpbjMyLCB1c2luZyAnRUdDUy9taW5ndzMyIDEuMS4yJy4KIyBJbmZvIGF0IGh0dHA6Ly93d3cubWluZ3cub3JnCiMgQWxzbyByZXF1aXJlcyAnR05VIG1ha2UgMy43NycsIHdoaWNoIHlvdSBjYW4gZ2V0IHRocm91Z2ggYSBsaW5rCiMgdG8gJ0phbkphYXAncyBwYWdlIGZyb20gdGhlIGFib3ZlIHBhZ2UuCiMgR2V0IG1pc3NpbmcgbGlicmFyaWVzIGZyb20gaHR0cDovL2dudXdpbjMyLnNmLm5ldC4KIwojIFRlc3RlZCBvbiBXaW4zMiBOVCA0IGFuZCBXaW45NS4KIwojIFRvIG1ha2UgZXZlcnl0aGluZywganVzdCAnbWFrZSAtZiBNYWtlX21pbmcubWFrJwojIFRvIG1ha2UganVzdCBlLmcuIGd2aW0uZXhlLCAnbWFrZSAtZiBNYWtlX21pbmcubWFrIGd2aW0uZXhlJwojIEFmdGVyIGEgcnVuLCB5b3UgY2FuICdtYWtlIC1mIE1ha2VfbWluZy5tYWsgY2xlYW4nIHRvIGNsZWFuIHVwCiMKIyBOT1RFOiBTb21ldGltZXMgJ0dOVSBNYWtlJyB3aWxsIHN0b3AgYWZ0ZXIgYnVpbGRpbmcgdmltcnVuLmV4ZSAtLSBJIHRoaW5rCiMgaXQncyBqdXN0IHJ1biBvdXQgb2YgbWVtb3J5IG9yIHNvbWV0aGluZy4gIFJ1biBhZ2FpbiwgYW5kIGl0IHdpbGwgY29udGludWUKIyB3aXRoICd4eGQnLgojCiMgIm1ha2UgdXB4IiBtYWtlcyAqY29tcHJlc3NlZCogdmVyc2lvbnMgb2YgdGhlIEdVSSBhbmQgY29uc29sZSBFWEVzLCB1c2luZyB0aGUKIyBleGNlbGxlbnQgVVBYIGNvbXByZXNzb3I6CiMgICAgIGh0dHA6Ly91cHguc291cmNlZm9yZ2UubmV0LwojCiMgTWFpbnRhaW5lZCBieSBSb24gQWFyb24gPHJvbmFoYXJvbkB5YWhvby5jb20+CiMgdXBkYXRlZCAyMDAzIEphbiAyMAoKIz4+Pj4+IGNob29zZSBvcHRpb25zOgojIHNldCB0byB5ZXMgZm9yIGEgZGVidWcgYnVpbGQKREVCVUc9bm8KIyBzZXQgdG8gU0laRSBmb3Igc2l6ZSwgU1BFRUQgZm9yIHNwZWVkLCBNQVhTUEVFRCBmb3IgbWF4aW1pdW0gb3B0aW1pemF0aW9uCk9QVElNSVpFPU1BWFNQRUVECiMgc2V0IHRvIHllcyB0byBtYWtlIGd2aW0sIG5vIGZvciB2aW0KR1VJPXllcwojIEZFQVRVUkVTPVtUSU5ZIHwgU01BTEwgIHwgTk9STUFMIHwgQklHIHwgSFVHRV0KIyBzZXQgdG8gVElOWSB0byBtYWtlIG1pbmltYWwgdmVyc2lvbiAoZmV3IGZlYXR1cmVzKQpGRUFUVVJFUz1CSUcKIyBzZXQgdG8gb25lIG9mIGkzODYsIGk0ODYsIGk1ODYsIGk2ODYgYXMgdGhlIG1pbmltdW0gdGFyZ2V0IHByb2Nlc3NvcgpBUkNIPWkzODYKIyBzZXQgdG8geWVzIHRvIGNyb3NzLWNvbXBpbGUgZnJvbSB1bml4OyBubz1uYXRpdmUgV2luZG93cwpDUk9TUz1ubwojIHNldCB0byBwYXRoIHRvIGljb252LmggYW5kIGxpYmljb252LmEgdG8gZW5hYmxlIHVzaW5nICdpY29udi5kbGwnCiNJQ09OVj0iLiIKSUNPTlY9eWVzCkdFVFRFWFQ9eWVzCiMgc2V0IHRvIHllcyB0byBpbmNsdWRlIG11bHRpYnl0ZSBzdXBwb3J0Ck1CWVRFPXllcwojIHNldCB0byB5ZXMgdG8gaW5jbHVkZSBJTUUgc3VwcG9ydApJTUU9eWVzCkRZTkFNSUNfSU1FPXllcwojIHNldCB0byB5ZXMgdG8gZW5hYmxlIHdyaXRpbmcgYSBwb3N0c2NyaXB0IGZpbGUgd2l0aCA6aGFyZGNvcHkKUE9TVFNDUklQVD1ubwojIHNldCB0byB5ZXMgdG8gZW5hYmxlIE9MRSBzdXBwb3J0Ck9MRT1ubwojIFNldCB0aGUgZGVmYXVsdCAkKFdJTlZFUikgdG8gbWFrZSBpdCB3b3JrIHdpdGggcHJlLVdpbjJrCldJTlZFUiA9IDB4MDQwMAojIFNldCB0byB5ZXMgdG8gZW5hYmxlIENzY29wZSBzdXBwb3J0CkNTQ09QRT15ZXMKIyBTZXQgdG8geWVzIHRvIGVuYWJsZSBOZXRiZWFucyBzdXBwb3J0Ck5FVEJFQU5TPSQoR1VJKQoKCiMgSWYgdGhlIHVzZXIgZG9lc24ndCB3YW50IGdldHRleHQsIHVuZGVmaW5lIGl0LgppZmVxIChubywgJChHRVRURVhUKSkKR0VUVEVYVD0KZW5kaWYKIyBBZGRlZCBieSBFLkYuIEFtYXRyaWEgPGVmZXJuYTFAcGxhdGVhLnB0aWMubWVjLmVzPiAyMDAxIEZlYiAyMwojIFVuY29tbWVudCB0aGUgZmlyc3QgbGluZSBhbmQgb25lIG9mIHRoZSBmb2xsb3dpbmcgdGhyZWUgaWYgeW91IHdhbnQgTmF0aXZlIExhbmd1YWdlCiMgU3VwcG9ydC4gIFlvdSdsbCBuZWVkIGdudV9nZXR0ZXh0LndpbjMyLCBhIE1JTkdXMzIgV2luZG93cyBQT1JUIG9mIGdldHRleHQgYnkKIyBGcmFuY28gQmV6IDxmcmFuY28uYmV6QGdteC5kZT4uICBJdCBtYXkgYmUgZm91bmQgYXQKIyBodHRwOi8vaG9tZS5hLWNpdHkuZGUvZnJhbmNvLmJlei9nZXR0ZXh0L2dldHRleHRfd2luMzJfZW4uaHRtbAojIFRlc3RlZCB3aXRoIG1pbmd3MzIgd2l0aCBHQ0MtMi45NS4yIG9uIFdpbjk4CiMgVXBkYXRlZCAyMDAxIEp1biA5CiNHRVRURVhUPWM6L2dldHRleHQud2luMzIubXN2Y3J0CiNTVEFUSUNfR0VUVEVYVD1VU0VfU1RBVElDX0dFVFRFWFQKI0RZTkFNSUNfR0VUVEVYVD1VU0VfR0VUVEVYVF9ETEwKI0RZTkFNSUNfR0VUVEVYVD1VU0VfU0FGRV9HRVRURVhUX0RMTApTQUZFX0dFVFRFWFRfRExMX09CSiA9ICQoR0VUVEVYVCkvc3JjL3NhZmVfZ2V0dGV4dF9kbGwvc2FmZV9nZXR0ZXh0X2RsbC5vCiMgQWx0ZXJuYXRpdmVseSwgaWYgeW91IHVuY29tbWVudCB0aGUgdHdvIGZvbGxvd2luZyBsaW5lcywgeW91IGdldCBhICJzYWZlIiB2ZXJzaW9uCiMgd2l0aG91dCBsaW5raW5nIHRoZSBzYWZlX2dldHRleHRfZGxsLm8gb2JqZWN0IGZpbGUuCiNEWU5BTUlDX0dFVFRFWFQ9RFlOQU1JQ19HRVRURVhUCiNHRVRURVhUX0RZTkFNSUM9Z251X2dldHRleHQuZGxsCklOVExQQVRIPSQoR0VUVEVYVCkvbGliL21pbmd3MzIKSU5UTExJQj1nbnVfZ2V0dGV4dAoKIyBJZiB5b3UgYXJlIHVzaW5nIGdldHRleHQtMC4xMC4zNSBmcm9tIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2V0dGV4dAojIG9yIGdldHRleHQtMC4xMC4zNyBmcm9tIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbWluZ3dyZXAvCiMgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcsIGJ1dCBJIGNhbid0IGJ1aWxkIGEgc3RhdGljIHZlcnNp824gd2l0aCB0aGVtLCA/LSh8CiNHRVRURVhUPWM6L2dldHRleHQtMC4xMC4zNy0yMDAxMDQzMAojU1RBVElDX0dFVFRFWFQ9VVNFX1NUQVRJQ19HRVRURVhUCiNEWU5BTUlDX0dFVFRFWFQ9RFlOQU1JQ19HRVRURVhUCiNJTlRMUEFUSD0kKEdFVFRFWFQpL2xpYgojSU5UTExJQj1pbnRsCgojIHVuY29tbWVudCAnUEVSTCcgaWYgeW91IHdhbnQgYSBwZXJsLWVuYWJsZWQgdmVyc2lvbgojUEVSTD1DOi9wZXJsCmlmZGVmIFBFUkwKaWZuZGVmIFBFUkxfVkVSClBFUkxfVkVSPTU2CmVuZGlmCmlmbmRlZiBEWU5BTUlDX1BFUkwKRFlOQU1JQ19QRVJMPXllcwplbmRpZgojIG9uIExpbnV4LCBmb3IgY3Jvc3MtY29tcGlsZSwgaXQncyBoZXJlOgojUEVSTExJQj0vaG9tZS9yb24vQWN0aXZlUGVybC9saWIKIyBvbiBOVCwgaXQncyBoZXJlOgpQRVJMTElCPSQoUEVSTCkvbGliClBFUkxMSUJTPSQoUEVSTExJQikvQ29yZQplbmRpZgoKIyB1bmNvbW1lbnQgJ01aU0NIRU1FJyBpZiB5b3Ugd2FudCBhIE16U2NoZW1lLWVuYWJsZWQgdmVyc2lvbgojTVpTQ0hFTUU9ZDovcGx0CmlmZGVmIE1aU0NIRU1FCmlmbmRlZiBEWU5BTUlDX01aU0NIRU1FCkRZTkFNSUNfTVpTQ0hFTUU9eWVzCmVuZGlmCgppZm5kZWYgTVpTQ0hFTUVfVkVSCk1aU0NIRU1FX1ZFUj0yMDVfMDAwCmVuZGlmCgppZmVxIChubywkKERZTkFNSUNfTVpTQ0hFTUUpKQpNWlNDSEVNRV9MSUIgPSAtbG16c2NoJChNWlNDSEVNRV9WRVIpIC1sbXpnYyQoTVpTQ0hFTUVfVkVSKQojIHRoZSBtb2Rlcm4gTWluR1cgY2FuIGR5bmFtaWNhbGx5IGxpbmsgdG8gZGxscyBkaXJlY3RseS4KIyBwb2ludCBNWlNDSEVNRV9ETExTIHRvIHdoZXJlIHlvdSBwdXQgbGlibXpzY2hYWFhYWFhYLmRsbCBhbmQgbGliZ2NYWFhYWFhYLmRsbAppZm5kZWYgTVpTQ0hFTUVfRExMUwpNWlNDSEVNRV9ETExTPSQoTVpTQ0hFTUUpCmVuZGlmCk1aU0NIRU1FX0xJQkRJUj0tTCQoTVpTQ0hFTUVfRExMUykKZW5kaWYKCmVuZGlmCgojIFB5dGhvbiBzdXBwb3J0IC0tIHdvcmtzIHdpdGggdGhlIEFjdGl2ZVN0YXRlIHB5dGhvbiAyLjAgcmVsZWFzZSAoYW5kIG90aGVycwojIHRvbywgcHJvYmFibHkpCiMKIyB1bmNvbW1lbnQgJ1BZVEhPTicgdG8gbWFrZSBweXRob24tZW5hYmxlZCB2ZXJzaW9uCiMgUHV0IHRoZSBwYXRoIHRvIHRoZSBweXRob24gZGlzdHJvIGhlcmUuICBJZiBjcm9zcyBjb21waWxpbmcgZnJvbSBMaW51eCwgeW91CiMgd2lsbCBhbHNvIG5lZWQgdG8gY29udmVydCB0aGUgaGVhZGVyIGZpbGVzIHRvIHVuaXggaW5zdGVhZCBvZiBkb3MgZm9ybWF0OgojICAgZm9yIGZpbCBpbiAqLmggOyBkbyB2aW0gLWUgLWMgJ3NldCBmZj11bml4fHd8cScgJGZpbAojIGFuZCBhbHNvLCB5b3Ugd2lsbCBuZWVkIHRvIG1ha2UgYSBtaW5ndzMyICdsaWJweXRob24yMC5hJyB0byBsaW5rIHdpdGg6CiMgICBjZCAkUFlUSE9OL2xpYnMKIyAgIHBleHBvcnRzIHB5dGhvbjIwLmRsbCA+IHB5dGhvbjIwLmRlZgojICAgZGxsdG9vbCAtZCBweXRob24yMC5kZWYgLWwgbGlicHl0aG9uMjAuYQojIG9uIG15IExpbnV4IGJveCwgSSBwdXQgdGhlIFB5dGhvbiBzdHVmZiBoZXJlOgojUFlUSE9OPS9ob21lL3Jvbi9BY3RpdmVQeXRob24tMi4wLjAtMjAyL3NyYy9Db3JlCiMgb24gbXkgTlQgYm94LCBpdCdzIGhlcmU6CiNQWVRIT049YzovcHl0aG9uMjAKCmlmZGVmIFBZVEhPTgppZm5kZWYgRFlOQU1JQ19QWVRIT04KRFlOQU1JQ19QWVRIT049eWVzCmVuZGlmCgppZm5kZWYgUFlUSE9OX1ZFUgpQWVRIT05fVkVSPTIyCmVuZGlmCgppZmVxIChubywkKERZTkFNSUNfUFlUSE9OKSkKUFlUSE9OTElCPS1MJChQWVRIT04pL2xpYnMgLWxweXRob24kKFBZVEhPTl9WRVIpCmVuZGlmCiMgbXkgaW5jbHVkZSBmaWxlcyBhcmUgaW4gJ3dpbjMyaW5jJyBvbiBMaW51eCwgYW5kICdpbmNsdWRlJyBpbiB0aGUgc3RhbmRhcmQKIyBOVCBkaXN0cm8gKEFjdGl2ZVN0YXRlKQppZmVxICgkKENST1NTKSxubykKUFlUSE9OSU5DPS1JICQoUFlUSE9OKS9pbmNsdWRlCmVsc2UKUFlUSE9OSU5DPS1JICQoUFlUSE9OKS93aW4zMmluYwplbmRpZgplbmRpZgoKIwlUQ0wgaW50ZXJmYWNlOgojCSAgVENMPVtQYXRoIHRvIFRDTCBkaXJlY3RvcnldCiMJICBEWU5BTUlDX1RDTD15ZXMgKHRvIGxvYWQgdGhlIFRDTCBETEwgZHluYW1pY2FsbHkpCiMJICBUQ0xfVkVSPVtUQ0wgdmVyc2lvbiwgZWcgODMsIDg0XSAoZGVmYXVsdCBpcyA4MykKI1RDTD1jOi90Y2wKaWZkZWYgVENMCmlmbmRlZiBEWU5BTUlDX1RDTApEWU5BTUlDX1RDTD15ZXMKZW5kaWYKaWZuZGVmIFRDTF9WRVIKVENMX1ZFUiA9IDgzCmVuZGlmClRDTElOQyArPSAtSSQoVENMKS9pbmNsdWRlCmVuZGlmCgoKIwlSdWJ5IGludGVyZmFjZToKIwkgIFJVQlk9W1BhdGggdG8gUnVieSBkaXJlY3RvcnldCiMJICBEWU5BTUlDX1JVQlk9eWVzICh0byBsb2FkIHRoZSBSdWJ5IERMTCBkeW5hbWljYWxseSkKIwkgIFJVQllfVkVSPVtSdWJ5IHZlcnNpb24sIGVnIDE2LCAxN10gKGRlZmF1bHQgaXMgMTYpCiMJICBSVUJZX1ZFUl9MT05HPVtSdWJ5IHZlcnNpb24sIGVnIDEuNiwgMS43XSAoZGVmYXVsdCBpcyAxLjYpCiMJICAgIFlvdSBtdXN0IHNldCBSVUJZX1ZFUl9MT05HIHdoZW4gY2hhbmdlIFJVQllfVkVSLgojUlVCWT1jOi9ydWJ5CmlmZGVmIFJVQlkKaWZuZGVmIERZTkFNSUNfUlVCWQpEWU5BTUlDX1JVQlk9eWVzCmVuZGlmCiMgIFNldCBkZWZhdWx0IHZhbHVlCmlmbmRlZiBSVUJZX1ZFUgpSVUJZX1ZFUiA9IDE2CmVuZGlmCmlmbmRlZiBSVUJZX1ZFUl9MT05HClJVQllfVkVSX0xPTkcgPSAxLjYKZW5kaWYKCmlmZXEgKCQoUlVCWV9WRVIpLCAxNikKaWZuZGVmIFJVQllfUExBVEZPUk0KUlVCWV9QTEFURk9STSA9IGk1ODYtbXN3aW4zMgplbmRpZgppZm5kZWYgUlVCWV9JTlNUQUxMX05BTUUKUlVCWV9JTlNUQUxMX05BTUUgPSBtc3dpbjMyLXJ1YnkkKFJVQllfVkVSKQplbmRpZgplbHNlCmlmbmRlZiBSVUJZX1BMQVRGT1JNClJVQllfUExBVEZPUk0gPSBpMzg2LW1zd2luMzIKZW5kaWYKaWZuZGVmIFJVQllfSU5TVEFMTF9OQU1FClJVQllfSU5TVEFMTF9OQU1FID0gbXN2Y3J0LXJ1YnkkKFJVQllfVkVSKQplbmRpZgplbmRpZgoKUlVCWUlOQyA9LUkgJChSVUJZKS9saWIvcnVieS8kKFJVQllfVkVSX0xPTkcpLyQoUlVCWV9QTEFURk9STSkKaWZlcSAobm8sICQoRFlOQU1JQ19SVUJZKSkKUlVCWUxJQiA9IC1MJChSVUJZKS9saWIgLWwkKFJVQllfSU5TVEFMTF9OQU1FKQplbmRpZgoKZW5kaWYgIyBSVUJZCgojIFNlZSBmZWF0dXJlLmggZm9yIGEgbGlzdCBvZiBvcHRpb25zLgojIEFueSBvdGhlciBkZWZpbmVzIGNhbiBiZSBpbmNsdWRlZCBoZXJlLgpERUZfR1VJPS1ERkVBVF9HVUlfVzMyIC1ERkVBVF9DTElQQk9BUkQKREVGSU5FUz0tRFdJTjMyIC1EV0lOVkVSPSQoV0lOVkVSKSAtRF9XSU4zMl9XSU5OVD0kKFdJTlZFUikgXAoJLURIQVZFX1BBVEhERUYgLURGRUFUXyQoRkVBVFVSRVMpCmlmZXEgKCQoQ1JPU1MpLHllcykKIyBjcm9zcy1jb21waWxlcjoKQ0MgPSBpNTg2LXBjLW1pbmd3MzJtc3ZjLWdjYwpERUwgPSBybQpNS0RJUiA9IG1rZGlyIC1wCldJTkRSRVMgPSBpNTg2LXBjLW1pbmd3MzJtc3ZjLXdpbmRyZXMKZWxzZQojIG5vcm1hbCAoV2luZG93cykgY29tcGlsYXRpb246CkNDID0gZ2NjCmlmbmVxIChzaC5leGUsICQoU0hFTEwpKQpERUwgPSBybQpNS0RJUiA9IG1rZGlyIC1wCkRJUlNMQVNIID0gLwplbHNlCkRFTCA9IGRlbApNS0RJUiA9IG1rZGlyCkRJUlNMQVNIID0gXFwKZW5kaWYKV0lORFJFUyA9IHdpbmRyZXMKZW5kaWYKCiM+Pj4+PiBlbmQgb2YgY2hvaWNlcwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCkNGTEFHUyA9IC1JcHJvdG8gJChERUZJTkVTKSAtcGlwZSAtdyAtbWFyY2g9JChBUkNIKSAtV2FsbAoKaWZkZWYgR0VUVEVYVApERUZJTkVTICs9IC1ESEFWRV9HRVRURVhUIC1ESEFWRV9MT0NBTEVfSApHRVRURVhUSU5DTFVERSA9ICQoR0VUVEVYVCkvaW5jbHVkZQpHRVRURVhUTElCID0gJChJTlRMUEFUSCkKaWZlcSAoeWVzLCAkKEdFVFRFWFQpKQpERUZJTkVTICs9IC1ERFlOQU1JQ19HRVRURVhUCmVsc2UKaWZkZWYgRFlOQU1JQ19HRVRURVhUCkRFRklORVMgKz0gLUQkKERZTkFNSUNfR0VUVEVYVCkKaWZkZWYgR0VUVEVYVF9EWU5BTUlDCkRFRklORVMgKz0gLURHRVRURVhUX0RZTkFNSUMgLURHRVRURVhUX0RMTD1cIiQoR0VUVEVYVF9EWU5BTUlDKVwiCmVuZGlmCmVuZGlmCmVuZGlmCmVuZGlmCgppZmRlZiBQRVJMCkNGTEFHUyArPSAtSSQoUEVSTExJQlMpIC1ERkVBVF9QRVJMIC1MJChQRVJMTElCUykKaWZlcSAoeWVzLCAkKERZTkFNSUNfUEVSTCkpCkNGTEFHUyArPSAtRERZTkFNSUNfUEVSTCAtRERZTkFNSUNfUEVSTF9ETEw9XCJwZXJsJChQRVJMX1ZFUikuZGxsXCIKZW5kaWYKZW5kaWYKCmlmZGVmIE1aU0NIRU1FCkNGTEFHUyArPSAtSSQoTVpTQ0hFTUUpL2luY2x1ZGUgLURGRUFUX01aU0NIRU1FIC1ETVpTQ0hFTUVfQ09MTEVDVFM9XCIkKE1aU0NIRU1FKS9jb2xsZWN0c1wiCmlmZXEgKHllcywgJChEWU5BTUlDX01aU0NIRU1FKSkKQ0ZMQUdTICs9IC1ERFlOQU1JQ19NWlNDSEVNRSAtRERZTkFNSUNfTVpTQ0hfRExMPVwibGlibXpzY2gkKE1aU0NIRU1FX1ZFUikuZGxsXCIgLUREWU5BTUlDX01aR0NfRExMPVwibGlibXpnYyQoTVpTQ0hFTUVfVkVSKS5kbGxcIgplbmRpZgplbmRpZgoKaWZkZWYgUlVCWQpDRkxBR1MgKz0gLURGRUFUX1JVQlkgJChSVUJZSU5DKQppZmVxICh5ZXMsICQoRFlOQU1JQ19SVUJZKSkKQ0ZMQUdTICs9IC1ERFlOQU1JQ19SVUJZIC1ERFlOQU1JQ19SVUJZX0RMTD1cIiQoUlVCWV9JTlNUQUxMX05BTUUpLmRsbFwiCkNGTEFHUyArPSAtRERZTkFNSUNfUlVCWV9WRVI9JChSVUJZX1ZFUikKZW5kaWYKZW5kaWYKCmlmZGVmIFBZVEhPTgpDRkxBR1MgKz0gLURGRUFUX1BZVEhPTiAkKFBZVEhPTklOQykKaWZlcSAoeWVzLCAkKERZTkFNSUNfUFlUSE9OKSkKQ0ZMQUdTICs9IC1ERFlOQU1JQ19QWVRIT04gLUREWU5BTUlDX1BZVEhPTl9ETEw9XCJweXRob24kKFBZVEhPTl9WRVIpLmRsbFwiCmVuZGlmCmVuZGlmCgppZmRlZiBUQ0wKQ0ZMQUdTICs9IC1ERkVBVF9UQ0wgJChUQ0xJTkMpCmlmZXEgKHllcywgJChEWU5BTUlDX1RDTCkpCkNGTEFHUyArPSAtRERZTkFNSUNfVENMIC1ERFlOQU1JQ19UQ0xfRExMPVwidGNsJChUQ0xfVkVSKS5kbGxcIgplbmRpZgplbmRpZgoKaWZlcSAoJChQT1NUU0NSSVBUKSx5ZXMpCkRFRklORVMgKz0gLURNU1dJTlBTCmVuZGlmCgppZmVxICh5ZXMsICQoT0xFKSkKREVGSU5FUyArPSAtREZFQVRfT0xFCmVuZGlmCgppZmVxICgkKENTQ09QRSkseWVzKQpERUZJTkVTICs9IC1ERkVBVF9DU0NPUEUKZW5kaWYKCmlmZXEgKCQoTkVUQkVBTlMpLHllcykKIyBPbmx5IGFsbG93IE5FVEJFQU5TIGZvciBhIEdVSSBidWlsZC4KaWZlcSAoeWVzLCAkKEdVSSkpCkRFRklORVMgKz0gLURGRUFUX05FVEJFQU5TX0lOVEcKCmlmZXEgKCQoTkJERUJVRyksIHllcykKREVGSU5FUyArPSAtRE5CREVCVUcKTkJERUJVR19JTkNMID0gbmJkZWJ1Zy5oCk5CREVCVUdfU1JDID0gbmJkZWJ1Zy5jCmVuZGlmCmVuZGlmCmVuZGlmCgppZmRlZiBYUE0KIyBPbmx5IGFsbG93IFhQTSBmb3IgYSBHVUkgYnVpbGQuCmlmZXEgKHllcywgJChHVUkpKQpDRkxBR1MgKz0gLURGRUFUX1hQTV9XMzIgLUkgJChYUE0pL2luY2x1ZGUKZW5kaWYKZW5kaWYKCmlmZXEgKCQoREVCVUcpLHllcykKQ0ZMQUdTICs9IC1nIC1mc3RhY2stY2hlY2sKREVCVUdfU1VGRklYPWQKZWxzZQppZmVxICgkKE9QVElNSVpFKSwgU0laRSkKQ0ZMQUdTICs9IC1PcwplbHNlCmlmZXEgKCQoT1BUSU1JWkUpLCBNQVhTUEVFRCkKQ0ZMQUdTICs9IC1PMwpDRkxBR1MgKz0gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZyZWctc3RydWN0LXJldHVybgplbHNlICAjIFNQRUVECkNGTEFHUyArPSAtTzIKZW5kaWYKZW5kaWYKQ0ZMQUdTICs9IC1zCmVuZGlmCgpMSUIgPSAtbGtlcm5lbDMyIC1sdXNlcjMyIC1sZ2RpMzIgLWxhZHZhcGkzMiAtbGNvbWRsZzMyIC1sY29tY3RsMzIKR1VJT0JKID0gICQoT1VURElSKS9ndWkubyAkKE9VVERJUikvZ3VpX3czMi5vICQoT1VURElSKS9ndWlfYmV2YWwubyAkKE9VVERJUikvb3NfdzMyZXhlLm8KT0JKID0gXAoJJChPVVRESVIpL2J1ZmZlci5vIFwKCSQoT1VURElSKS9jaGFyc2V0Lm8gXAoJJChPVVRESVIpL2RpZmYubyBcCgkkKE9VVERJUikvZGlncmFwaC5vIFwKCSQoT1VURElSKS9lZGl0Lm8gXAoJJChPVVRESVIpL2V2YWwubyBcCgkkKE9VVERJUikvZXhfY21kcy5vIFwKCSQoT1VURElSKS9leF9jbWRzMi5vIFwKCSQoT1VURElSKS9leF9kb2NtZC5vIFwKCSQoT1VURElSKS9leF9ldmFsLm8gXAoJJChPVVRESVIpL2V4X2dldGxuLm8gXAoJJChPVVRESVIpL2ZpbGVpby5vIFwKCSQoT1VURElSKS9mb2xkLm8gXAoJJChPVVRESVIpL2dldGNoYXIubyBcCgkkKE9VVERJUikvaGFzaHRhYmxlLm8gXAoJJChPVVRESVIpL21haW4ubyBcCgkkKE9VVERJUikvbWFyay5vIFwKCSQoT1VURElSKS9tZW1maWxlLm8gXAoJJChPVVRESVIpL21lbWxpbmUubyBcCgkkKE9VVERJUikvbWVudS5vIFwKCSQoT1VURElSKS9tZXNzYWdlLm8gXAoJJChPVVRESVIpL21pc2MxLm8gXAoJJChPVVRESVIpL21pc2MyLm8gXAoJJChPVVRESVIpL21vdmUubyBcCgkkKE9VVERJUikvbWJ5dGUubyBcCgkkKE9VVERJUikvbm9ybWFsLm8gXAoJJChPVVRESVIpL29wcy5vIFwKCSQoT1VURElSKS9vcHRpb24ubyBcCgkkKE9VVERJUikvb3Nfd2luMzIubyBcCgkkKE9VVERJUikvb3NfbXN3aW4ubyBcCgkkKE9VVERJUikvcGF0aGRlZi5vIFwKCSQoT1VURElSKS9xdWlja2ZpeC5vIFwKCSQoT1VURElSKS9yZWdleHAubyBcCgkkKE9VVERJUikvc2NyZWVuLm8gXAoJJChPVVRESVIpL3NlYXJjaC5vIFwKCSQoT1VURElSKS9zcGVsbC5vIFwKCSQoT1VURElSKS9zeW50YXgubyBcCgkkKE9VVERJUikvdGFnLm8gXAoJJChPVVRESVIpL3Rlcm0ubyBcCgkkKE9VVERJUikvdWkubyBcCgkkKE9VVERJUikvdW5kby5vIFwKCSQoT1VURElSKS92ZXJzaW9uLm8gXAoJJChPVVRESVIpL3ZpbXJjLm8gXAoJJChPVVRESVIpL3dpbmRvdy5vCgppZmRlZiBQRVJMCk9CSiArPSAkKE9VVERJUikvaWZfcGVybC5vCmVuZGlmCmlmZGVmIE1aU0NIRU1FCk9CSiArPSAkKE9VVERJUikvaWZfbXpzY2gubwpNWlNDSEVNRV9JTkNMID0gaWZfbXpzY2guaAplbmRpZgppZmRlZiBQWVRIT04KT0JKICs9ICQoT1VURElSKS9pZl9weXRob24ubwplbmRpZgppZmRlZiBSVUJZCk9CSiArPSAkKE9VVERJUikvaWZfcnVieS5vCmVuZGlmCmlmZGVmIFRDTApPQkogKz0gJChPVVRESVIpL2lmX3RjbC5vCmVuZGlmCmlmZXEgKCQoQ1NDT1BFKSx5ZXMpCk9CSiArPSAkKE9VVERJUikvaWZfY3Njb3BlLm8KZW5kaWYKaWZlcSAoJChORVRCRUFOUykseWVzKQojIE9ubHkgYWxsb3cgTkVUQkVBTlMgZm9yIGEgR1VJIGJ1aWxkLgppZmVxICh5ZXMsICQoR1VJKSkKT0JKICs9ICQoT1VURElSKS9uZXRiZWFucy5vCkxJQiArPSAtbHdzb2NrMzIKZW5kaWYKZW5kaWYKaWZkZWYgWFBNCiMgT25seSBhbGxvdyBYUE0gZm9yIGEgR1VJIGJ1aWxkLgppZmVxICh5ZXMsICQoR1VJKSkKT0JKICs9ICQoT1VURElSKS94cG1fdzMyLm8KIyBZb3UnbGwgbmVlZCBsaWJYcG0uYSBmcm9tIGh0dHA6Ly9nbnV3aW4zMi5zZi5uZXQKTElCICs9IC1MICQoWFBNKS9saWIgLWxYcG0KZW5kaWYKZW5kaWYKCgppZmRlZiBNWlNDSEVNRQpNWlNDSEVNRV9TVUZGSVggPSBaCmVuZGlmCgppZmVxICgkKEdVSSkseWVzKQpUQVJHRVQgOj0gZ3ZpbSQoREVCVUdfU1VGRklYKS5leGUKREVGSU5FUyArPSAkKERFRl9HVUkpCk9CSiArPSAkKEdVSU9CSikKTEZMQUdTICs9IC1td2luZG93cwpPVVRESVIgPSBnb2JqJChERUJVR19TVUZGSVgpJChNWlNDSEVNRV9TVUZGSVgpCmVsc2UKVEFSR0VUIDo9IHZpbSQoREVCVUdfU1VGRklYKS5leGUKT1VURElSID0gb2JqJChERUJVR19TVUZGSVgpJChNWlNDSEVNRV9TVUZGSVgpCmVuZGlmCgppZmRlZiBHRVRURVhUCmlmbmVxICh5ZXMsICQoR0VUVEVYVCkpCkNGTEFHUyArPSAtSSQoR0VUVEVYVElOQ0xVREUpCmlmbmRlZiBTVEFUSUNfR0VUVEVYVApMSUIgKz0gLUwkKEdFVFRFWFRMSUIpIC1sJChJTlRMTElCKQppZmVxIChVU0VfU0FGRV9HRVRURVhUX0RMTCwgJChEWU5BTUlDX0dFVFRFWFQpKQpPQkorPSQoU0FGRV9HRVRURVhUX0RMTF9PQkopCmVuZGlmCmVsc2UKTElCICs9IC1MJChHRVRURVhUTElCKSAtbGludGwKZW5kaWYKZW5kaWYKZW5kaWYKCmlmZGVmIFBFUkwKaWZlcSAobm8sICQoRFlOQU1JQ19QRVJMKSkKTElCICs9IC1scGVybCQoUEVSTF9WRVIpCmVuZGlmCmVuZGlmCgppZmRlZiBUQ0wKTElCICs9IC1MJChUQ0wpL2xpYgppZmVxICh5ZXMsICQoRFlOQU1JQ19UQ0wpKQpMSUIgKz0gLWx0Y2xzdHViJChUQ0xfVkVSKQplbHNlCkxJQiArPSAtbHRjbCQoVENMX1ZFUikKZW5kaWYKZW5kaWYKCmlmZXEgKHllcywgJChPTEUpKQpMSUIgKz0gLWxvbGVhdXQzMiAtbHN0ZGMrKwpPQkogKz0gJChPVVRESVIpL2lmX29sZS5vCmVuZGlmCgppZmVxICh5ZXMsICQoTUJZVEUpKQpERUZJTkVTICs9IC1ERkVBVF9NQllURQplbmRpZgoKaWZlcSAoeWVzLCAkKElNRSkpCkRFRklORVMgKz0gLURGRUFUX01CWVRFX0lNRQppZmVxICh5ZXMsICQoRFlOQU1JQ19JTUUpKQpERUZJTkVTICs9IC1ERFlOQU1JQ19JTUUKZWxzZQpMSUIgKz0gLWxpbW0zMgplbmRpZgplbmRpZgoKaWZkZWYgSUNPTlYKaWZuZXEgKHllcywgJChJQ09OVikpCkxJQiArPSAtTCQoSUNPTlYpCkNGTEFHUyArPSAtSSQoSUNPTlYpCmVuZGlmCkRFRklORVMrPS1ERFlOQU1JQ19JQ09OVgplbmRpZgoKYWxsOiAkKFRBUkdFVCkgdmltcnVuLmV4ZSB4eGQveHhkLmV4ZSBpbnN0YWxsLmV4ZSB1bmluc3RhbC5leGUgR3ZpbUV4dC9ndmltZXh0LmRsbAoKdmltcnVuLmV4ZTogdmltcnVuLmMKCSQoQ0MpICQoQ0ZMQUdTKSAtbyB2aW1ydW4uZXhlIHZpbXJ1bi5jICQoTElCKQoKaW5zdGFsbC5leGU6IGRvc2luc3QuYwoJJChDQykgJChDRkxBR1MpIC1vIGluc3RhbGwuZXhlIGRvc2luc3QuYyAkKExJQikgLWxvbGUzMiAtbHV1aWQKCnVuaW5zdGFsLmV4ZTogdW5pbnN0YWwuYwoJJChDQykgJChDRkxBR1MpIC1vIHVuaW5zdGFsLmV4ZSB1bmluc3RhbC5jICQoTElCKQoKJChUQVJHRVQpOiAkKE9VVERJUikgJChPQkopCgkkKENDKSAkKENGTEFHUykgJChMRkxBR1MpIC1vICRAICQoT0JKKSAkKExJQikgLWxvbGUzMiAtbHV1aWQgJChNWlNDSEVNRV9MSUJESVIpICQoTVpTQ0hFTUVfTElCKSAkKFBZVEhPTkxJQikgJChSVUJZTElCKQoKdXB4OiBleGVzCgl1cHggZ3ZpbS5leGUKCXVweCB2aW0uZXhlCgp4eGQveHhkLmV4ZTogeHhkL3h4ZC5jCgkkKE1BS0UpIC1DIHh4ZCAtZiBNYWtlX2N5Zy5tYWsKCkd2aW1FeHQvZ3ZpbWV4dC5kbGw6IEd2aW1FeHQvZ3ZpbWV4dC5jcHAgR3ZpbUV4dC9ndmltZXh0LnJjIEd2aW1FeHQvZ3ZpbWV4dC5oCgkkKE1BS0UpIC1DIEd2aW1FeHQgLWYgTWFrZV9taW5nLm1hawoKY2xlYW46CgktJChERUwpICQoT1VURElSKSQoRElSU0xBU0gpKi5vCgktJChERUwpICQoT1VURElSKSQoRElSU0xBU0gpKi5yZXMKCS1ybWRpciAkKE9VVERJUikKCS0kKERFTCkgKi5leGUKCS0kKERFTCkgcGF0aGRlZi5jCmlmZGVmIFBFUkwKCS0kKERFTCkgaWZfcGVybC5jCmVuZGlmCgkkKE1BS0UpIC1DIEd2aW1FeHQgLWYgTWFrZV9taW5nLm1hayBjbGVhbgoJJChNQUtFKSAtQyB4eGQgLWYgTWFrZV9jeWcubWFrIGNsZWFuCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKSU5DTCA9IHZpbS5oIGZlYXR1cmUuaCBvc193aW4zMi5oIG9zX2Rvcy5oIGFzY2lpLmgga2V5bWFwLmggdGVybS5oIG1hY3Jvcy5oIFwKCXN0cnVjdHMuaCByZWdleHAuaCBvcHRpb24uaCBleF9jbWRzLmggcHJvdG8uaCBnbG9iYWxzLmggZmFyc2kuaCBcCglndWkuaAoKJChPVVRESVIpLyUubyA6ICUuYyAkKElOQ0wpCgkkKENDKSAtYyAkKENGTEFHUykgJDwgLW8gJEAKCiQoT1VURElSKS92aW1yZXMucmVzOiB2aW0ucmMgdmVyc2lvbi5oIGd1aV93MzJfcmMuaAoJJChXSU5EUkVTKSAkKERFRklORVMpIHZpbS5yYyAkKE9VVERJUikvdmltcmVzLnJlcwoKJChPVVRESVIpL3ZpbXJjLm86ICQoT1VURElSKS92aW1yZXMucmVzCgkkKFdJTkRSRVMpICQoT1VURElSKS92aW1yZXMucmVzICQoT1VURElSKS92aW1yYy5vCgokKE9VVERJUik6CgkkKE1LRElSKSAkKE9VVERJUikKCiQoT1VURElSKS9leF9kb2NtZC5vOglleF9kb2NtZC5jICQoSU5DTCkgZXhfY21kcy5oCgkkKENDKSAtYyAkKENGTEFHUykgZXhfZG9jbWQuYyAtbyAkKE9VVERJUikvZXhfZG9jbWQubwoKJChPVVRESVIpL2V4X2V2YWwubzoJZXhfZXZhbC5jICQoSU5DTCkgZXhfY21kcy5oCgkkKENDKSAtYyAkKENGTEFHUykgZXhfZXZhbC5jIC1vICQoT1VURElSKS9leF9ldmFsLm8KCiQoT1VURElSKS9pZl9jc2NvcGUubzoJaWZfY3Njb3BlLmMgJChJTkNMKSBpZl9jc2NvcGUuaAoJJChDQykgLWMgJChDRkxBR1MpIGlmX2NzY29wZS5jIC1vICQoT1VURElSKS9pZl9jc2NvcGUubwoKJChPVVRESVIpL2lmX29sZS5vOiBpZl9vbGUuY3BwICQoSU5DTCkKCSQoQ0MpICQoQ0ZMQUdTKSAtRF9fSUlEX0RFRklORURfXyAtYyAtbyAkKE9VVERJUikvaWZfb2xlLm8gaWZfb2xlLmNwcAoKJChPVVRESVIpL2lmX3J1YnkubzogaWZfcnVieS5jICQoSU5DTCkKaWZlcSAoMTYsICQoUlVCWSkpCgkkKENDKSAkKENGTEFHUykgLVVfV0lOMzIgLWMgLW8gJChPVVRESVIpL2lmX3J1YnkubyBpZl9ydWJ5LmMKZW5kaWYKCmlmX3BlcmwuYzogaWZfcGVybC54cyB0eXBlbWFwCglwZXJsICQoUEVSTExJQikvRXh0VXRpbHMveHN1YnBwIC1wcm90b3R5cGVzIC10eXBlbWFwIFwKCSAgICAgJChQRVJMTElCKS9FeHRVdGlscy90eXBlbWFwIGlmX3BlcmwueHMgPiAkQAoKJChPVVRESVIpL25ldGJlYW5zLm86CW5ldGJlYW5zLmMgJChJTkNMKSAkKE5CREVCVUdfSU5DTCkgJChOQkRFQlVHX1NSQykKCSQoQ0MpIC1jICQoQ0ZMQUdTKSBuZXRiZWFucy5jIC1vICQoT1VURElSKS9uZXRiZWFucy5vCgpwYXRoZGVmLmM6ICQoSU5DTCkKaWZuZXEgKHNoLmV4ZSwgJChTSEVMTCkpCglAZWNobyBjcmVhdGluZyBwYXRoZGVmLmMKCUBlY2hvICcvKiBwYXRoZGVmLmMgKi8nID4gcGF0aGRlZi5jCglAZWNobyAnI2luY2x1ZGUgInZpbS5oIicgPj4gcGF0aGRlZi5jCglAZWNobyAnY2hhcl91ICpkZWZhdWx0X3ZpbV9kaXIgPSAoY2hhcl91ICopIiQoVklNUkNMT0MpIjsnID4+IHBhdGhkZWYuYwoJQGVjaG8gJ2NoYXJfdSAqZGVmYXVsdF92aW1ydW50aW1lX2RpciA9IChjaGFyX3UgKikiJChWSU1SVU5USU1FRElSKSI7JyA+PiBwYXRoZGVmLmMKCUBlY2hvICdjaGFyX3UgKmFsbF9jZmxhZ3MgPSAoY2hhcl91ICopIiQoQ0MpICQoQ0ZMQUdTKSI7JyA+PiBwYXRoZGVmLmMKCUBlY2hvICdjaGFyX3UgKmFsbF9sZmxhZ3MgPSAoY2hhcl91ICopIiQoQ0MpICQoQ0ZMQUdTKSAkKExGTEFHUykgLW8gJChUQVJHRVQpICQoTElCKSAtbG9sZTMyIC1sdXVpZCAkKE1aU0NIRU1FX0xJQkRJUikgJChNWlNDSEVNRV9MSUIpICQoUFlUSE9OTElCKSAkKFJVQllMSUIpIjsnID4+IHBhdGhkZWYuYwoJQGVjaG8gJ2NoYXJfdSAqY29tcGlsZWRfdXNlciA9IChjaGFyX3UgKikiJChVU0VSTkFNRSkiOycgPj4gcGF0aGRlZi5jCglAZWNobyAnY2hhcl91ICpjb21waWxlZF9zeXMgPSAoY2hhcl91ICopIiQoVVNFUkRPTUFJTikiOycgPj4gcGF0aGRlZi5jCmVsc2UKCUBlY2hvIGNyZWF0aW5nIHBhdGhkZWYuYwoJQGVjaG8gLyogcGF0aGRlZi5jICovID4gcGF0aGRlZi5jCglAZWNobyAjaW5jbHVkZSAidmltLmgiID4+IHBhdGhkZWYuYwoJQGVjaG8gY2hhcl91ICpkZWZhdWx0X3ZpbV9kaXIgPSAoY2hhcl91ICopIiQoVklNUkNMT0MpIjsgPj4gcGF0aGRlZi5jCglAZWNobyBjaGFyX3UgKmRlZmF1bHRfdmltcnVudGltZV9kaXIgPSAoY2hhcl91ICopIiQoVklNUlVOVElNRURJUikiOyA+PiBwYXRoZGVmLmMKCUBlY2hvIGNoYXJfdSAqYWxsX2NmbGFncyA9IChjaGFyX3UgKikiJChDQykgJChDRkxBR1MpIjsgPj4gcGF0aGRlZi5jCglAZWNobyBjaGFyX3UgKmFsbF9sZmxhZ3MgPSAoY2hhcl91ICopIiQoQ0MpICQoQ0ZMQUdTKSAkKExGTEFHUykgLW8gJChUQVJHRVQpICQoTElCKSAtbG9sZTMyIC1sdXVpZCAkKE1aU0NIRU1FX0xJQkRJUikgJChNWlNDSEVNRV9MSUIpICQoUFlUSE9OTElCKSAkKFJVQllMSUIpIjsgPj4gcGF0aGRlZi5jCglAZWNobyBjaGFyX3UgKmNvbXBpbGVkX3VzZXIgPSAoY2hhcl91ICopIiQoVVNFUk5BTUUpIjsgPj4gcGF0aGRlZi5jCglAZWNobyBjaGFyX3UgKmNvbXBpbGVkX3N5cyA9IChjaGFyX3UgKikiJChVU0VSRE9NQUlOKSI7ID4+IHBhdGhkZWYuYwplbmRpZgo=