VGhpcyB2ZXJzaW9uIG9mIEdOVSBtYWtlIGhhcyBiZWVuIHRlc3RlZCBvbgpPcGVuVk1TIFY4LjMgKEFscGhhKSBhbmQgVjguNCAoSW50ZWdyaXR5KS4KCkJ1aWxkIGluc3RydWN0aW9ucwotLS0tLS0tLS0tLS0tLS0tLS0KTWFrZSBhIDFzdCB2ZXJzaW9uCiAgICAgICAkIEBtYWtlZmlsZS5jb20gICEgaWdub3JlIGFueSBjb21waWxlciBhbmQvb3IgbGlua2VyIHdhcm5pbmcKICAgICAgICQgY29weSBtYWtlLmV4ZSAxc3QtbWFrZS5leGUKICBVc2UgdGhlIDFzdCB2ZXJzaW9uIHRvIGdlbmVyYXRlIGEgMm5kIHZlcnNpb24KICAgICAgICQgbWMgc3lzJGRpc2s6W10xc3QtbWFrZSBjbGVhbiAgISBpZ25vcmUgYW55IGZpbGUgbm90IGZvdW5kIG1lc3NhZ2VzCiAgICAgICAkIG1jIHN5cyRkaXNrOltdMXN0LW1ha2UKICBWZXJpZnkgeW91ciAybmQgdmVyc2lvbgogICAgICAgJCBjb3B5IG1ha2UuZXhlIDJuZC1tYWtlLmV4ZQogICAgICAgJCBtYyBzeXMkZGlzazpbXTJuZC1tYWtlIGNsZWFuCiAgICAgICAkIG1jIHN5cyRkaXNrOltdMm5kLW1ha2UKICBEb24ndCB1c2UgdGhlIEhQIEMgVjcuMi0wMDEgY29tcGlsZXIsIHdoaWNoIGhhcyBhbiBpbmNvbXBhdGlibGUgY2hhbmdlCiAgaG93IF9fU1REQ19fIGlzIGRlZmluZWQuIFRoaXMgcmVzdWx0cyBhdCBsZWFzdCBpbiBjb21waWxlIHRpbWUgd2FybmluZ3MuCgwKQ2hhbmdlcyBzaW5jZSBHTlUgbWFrZSAzLjgyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKRml4IGJ1aWxkIHByb2JsZW1zLgoKVGhlIG5ldyBmZWF0dXJlICJMb2FkYWJsZSBvYmplY3RzIiBpcyBub3QgeWV0IHN1cHBvcnRlZC4gSWYgeW91IG5lZWQgaXQsCnBsZWFzZSBzZW5kIGEgY2hhbmdlIHJlcXVlc3Qgb3Igc3VibWl0IGEgYnVnIHJlcG9ydC4KClRoZSBuZXcgb3B0aW9uIC0tb3V0cHV0LXN5bmMgKC1PKSBpcyBhY2NlcHRlZCBidXQgaGFzIG5vIGVmZmVjdDogR05VIG1ha2UKZm9yIFZNUyBkb2VzIG5vdCBzdXBwb3J0IHJ1bm5pbmcgbXVsdGlwbGUgY29tbWFuZHMgc2ltdWx0YW5lb3VzbHkuCgwKQ2hhbmdlcyBmb3IgR05VIG1ha2UgMy44MgoKTWljaGFlbCBHZWhyZSAoYXQgVklTVEVDLVNFTUkgZG90IENPTSkgc3VwcGxpZWQgYSBmaXggZm9yIGEgcHJvYmxlbSB3aXRoCnRpbWVzdGFtcHMgb2Ygb2JqZWN0IG1vZHVsZXMgaW4gT0xCcy4gVGhlIHRpbWVzdGFtcHMgd2VyZSBub3QgY29ycmVjdGx5CmFkanVzdGVkIHRvIEdNVCBiYXNlZCB0aW1lLCBpZiB0aGUgbG9jYWwgVk1TIHRpbWUgd2FzIHVzaW5nIGEgZGF5bGlnaHQgc2F2aW5nCmFsZ29yaXRobSBhbmQgaWYgZGF5bGlnaHQgc2F2aW5nIHdhcyBzd2l0Y2hlZCBvZmYuCgpKb2huIEVpc2VuYnJhdW4gKGF0IEhQIGRvdCBDT00pIHN1cHBsaWVkIGZpeGVzIGFuZCBhbmQgYW4gZW5oYW5jZW1lbnQgdG8gYXBwZW5kCm91dHB1dCByZWRpcmVjdGlvbiBpbiBhY3Rpb24gbGluZXMuCgpSZXdvcmsgb2YgY3RybCtjIGFuZCBjdHJsK3kgaGFuZGxpbmcuCgpGaXggYSBwcm9ibGVtIHdpdGggY2FjaGVkIHN0cmluZ3MsIHdoaWNoIHNob3dlZCBvbiBjYXNlLWluc2Vuc2l0aXZlIGZpbGUKc3lzdGVtcy4KCkJ1aWxkIGZpeGVzIGZvciBjb25zdC1pZmllZCBjb2RlIGluIFZNUyBzcGVjaWZpYyBzb3VyY2VzLgoKQSBub3RlIG9uIGFwcGVuZGluZyB0aGUgcmVkaXJlY3RlZCBvdXRwdXQuIFdpdGggdGhpcyBjaGFuZ2UsIGEgc2ltcGxlIG1lY2hhbmlzbQppcyBpbXBsZW1lbnRlZCB0byBtYWtlICI+PiIgd29yayBpbiBhY3Rpb24gbGluZXMuIEluIFZNUyB0aGVyZSBpcyBubyBzaW1wbGUKZmVhdHVyZSBsaWtlICI+PiIgdG8gaGF2ZSBEQ0wgY29tbWFuZCBvciBwcm9ncmFtIG91dHB1dCByZWRpcmVjdGVkIGFuZCBhcHBlbmRlZAp0byBhIGZpbGUuIEdOVSBtYWtlIGZvciBWTVMgYWxyZWFkeSBpbXBsZW1lbnRzIHRoZSByZWRpcmVjdGlvbiBvZiBvdXRwdXQuIElmCnN1Y2ggYSByZWRpcmVjdGlvbiBpcyBkZXRlY3RlZCwgYW4gIj4iIG9uIHRoZSBhY3Rpb24gbGluZSwgR05VIG1ha2UgY3JlYXRlcyBhCkRDTCBjb21tYW5kIHByb2NlZHVyZSB0byBleGVjdXRlIHRoZSBhY3Rpb24gYW5kIHRvIHJlZGlyZWN0IGl0cyBvdXRwdXQuIEJhc2VkCm9uIHRoYXQsIG5vdyAiPj4iIGlzIGFsc28gcmVjb2duaXplZCBhbmQgYSBzaW1pbGFyIGJ1dCBkaWZmZXJlbnQgY29tbWFuZApwcm9jZWR1cmUgaXMgY3JlYXRlZCB0byBpbXBsZW1lbnQgdGhlIGFwcGVuZC4gVGhlIG1haW4gaWRlYSBoZXJlIGlzIHRvIGNyZWF0ZSBhCnRlbXBvcmFyeSBmaWxlIHdoaWNoIGNvbGxlY3RzIHRoZSBvdXRwdXQgYW5kIHdoaWNoIGlzIGFwcGVuZGVkIHRvIHRoZSB3YW50ZWQKb3V0cHV0IGZpbGUuIFRoZW4gdGhlIHRlbXBvcmFyeSBmaWxlIGlzIGRlbGV0ZWQuIFRoaXMgaXMgYWxsIGRvbmUgaW4gdGhlCmNvbW1hbmQgcHJvY2VkdXJlIHRvIGtlZXAgY2hhbmdlcyBpbiBtYWtlIHNtYWxsIGFuZCBzaW1wbGUuIFRoaXMgb2J2aW91c2x5IGhhcwpzb21lIGxpbWl0YXRpb25zIGJ1dCBpdCBzZWVtcyBnb29kIGVub3VnaCBjb21wYXJlZCB3aXRoIHRoZSBjdXJyZW50ICI+IgppbXBsZW1lbnRhdGlvbi4gKEFuZCBpbiBteSBvcGluaW9uLCByZWRpcmVjdGlvbiBpcyBub3QgcmVhbGx5IHdoYXQgR05VIG1ha2UgaGFzCnRvIGRvLikgV2l0aCB0aGlzIGFwcHJvYWNoLCBpdCBtYXkgaGFwcGVuIHRoYXQgdGhlIHRlbXBvcmFyeSBmaWxlIGlzIG5vdCB5ZXQKYXBwZW5kZWQgYW5kIGlzIGxlZnQgaW4gU1lTJFNDUkFUQ0guIFRoZSB0ZW1wb3JhcnkgZmlsZSBuYW1lcyBsb29rIGxpa2UKIkNNRHh4eHh4LiIuIEFueSB0aW1lIHRoZSBjcmVhdGVkIGNvbW1hbmQgcHJvY2VkdXJlIGNhbiBub3QgY29tcGxldGUsIHRoaXMKaGFwcGVucy4gUHJlc3NpbmcgQ3RybCtZIHRvIGFib3J0IG1ha2UgaXMgb25lIGNhc2UuIEluIGNhc2Ugb2YgQ3RybCtZIHRoZQphc3NvY2lhdGVkIGNvbW1hbmQgcHJvY2VkdXJlIGlzIGxlZnQgaW4gU1lTJFNDUkFUQ0ggYXMgd2VsbC4gSXRzIG5hbWUgaXMKQ01EeHh4eHguQ09NLgoKQ2hhbmdlIGluIHRoZSBDdHJsK1kgaGFuZGxpbmcuIFRoZSBDdHJsWSBoYW5kbGVyIG5vdyB1c2VzICRkZWxwcmMgdG8gZGVsZXRlIGFsbApjaGlsZHJlbi4gVGhpcyB3YXkgYWxzbyBhY3Rpb25zIHdpdGggRENMIGNvbW1hbmRzIHdpbGwgYmUgc3RvcHBlZC4gQXMgYmVmb3JlCnRoZSBDdHJsWSBoYW5kbGVyIHRoZW4gc2VuZHMgU0lHUVVJVCB0byBpdHNlbGYsIHdoaWNoIGlzIGhhbmRsZWQgaW4gY29tbW9uCmNvZGUuCgpDaGFuZ2UgaW4gZGVsZXRlaW5nIHRlbXBvcmFyeSBjb21tYW5kIGZpbGVzLiBUZW1wb3JhcnkgY29tbWFuZCBmaWxlcyBhcmUgbm93CmRlbGV0ZWQgaW4gdGhlIHZtcyBjaGlsZCB0ZXJtaW5hdGlvbiBoYW5kbGVyLiBUaGF0IGRlbGV0ZXMgdGhlbSBldmVuIGlmCmEgQ3RybCtDIHdhcyBwcmVzc2VkLgoKVGhlIGJlaGF2aW9yIG9mIHByZXNzaW5nIEN0cmwrQyBpcyBub3QgY2hhbmdlZC4gSXQgc3RpbGwgaGFzIG9ubHkgYW4gZWZmZWN0LAphZnRlciB0aGUgY3VycmVudCBhY3Rpb24gaXMgdGVybWluYXRlZC4gSWYgdGhhdCBkb2Vzbid0IGhhcHBlbiBvciB0YWtlcyB0b28KbG9uZywgQ3RybCtZIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCgwKQ2hhbmdlcyBmb3IgR05VIG1ha2UgMy44MAoKLiBJbiBkZWZhdWx0LmMgZGVmaW5lIHZhcmlhYmxlIEFSQ0ggYXMgSUE2NCBmb3IgVk1TIG9uIEl0YW5pdW0gc3lzdGVtcy4KCi4gSW4gbWFrZWZpbGUudm1zIGF2b2lkIG5hbWUgY29sbGlzaW9uIGZvciBnbG9iIGFuZCBnbG9iZnJlZS4KDApUaGlzIGlzIHRoZSBWTVMgcG9ydCBvZiBHTlUgTWFrZSBkb25lIGJ5IEhhcnRtdXQuQmVja2VyQGNvbXBhcS5jb20uCgpJdCBpcyBiYXNlZCBvbiB0aGUgc3BlY2lmaWMgdmVyc2lvbiAzLjc3ayBhbmQgb24gMy43OC4xLiAzLjc3ayB3YXMgZG9uZQpieSBLbGF1cyBL5G1wZiA8a2thZW1wZkBybWkuZGU+LCB0aGUgY29kZSB3YXMgYmFzZWQgb24gdGhlIFZNUyBwb3J0IG9mCkdOVSBNYWtlIDMuNjAgYnkgTWlrZSBNb3JldHRpLgoKSXQgd2FzIHBvcnRlZCBvbiBPcGVuVk1TL0FscGhhIFY3LjEsIERFQ0MgVjUuNy0wMDYuIEl0IHdhcyByZS1idWlsZCBhbmQKdGVzdGVkIG9uIE9wZW5WTVMvQWxwaGEgVjcuMiwgT3BlblZNUy9WQVggNy4xIGFuZCA1LjUtMi4gRGlmZmVyZW50CnZlcnNpb25zIG9mIERFQ0Mgd2VyZSB1c2VkLiBWQVhDIHdhcyB0cmllZDogaXQgZmFpbHM7IGJ1dCBpdCBkb2Vzbid0CnNlZW0gd29ydGggdG8gZ2V0IGl0IHdvcmtpbmcuIFRoZXJlIGFyZSBzdGlsbCBzb21lIFBUUk1JU01BVENIIHdhcm5pbmdzCmR1cmluZyB0aGUgY29tcGlsZS4gQWx0aG91Z2ggcGVybCBpcyB3b3JraW5nIG9uIFZNUyB0aGUgdGVzdCBzY3JpcHRzCmRvbid0IHdvcmsuIFRoZSBmdW5jdGlvbiAkc2hlbGwgaXMgc3RpbGwgbWlzc2luZy4KClRoZXJlIGlzIGEga25vd24gYnVnIGluIHNvbWUgb2YgdGhlIFZNUyBDUlRMcy4gSXQgaXMgaW4gdGhlIHNoaXBwZWQKdmVyc2lvbnMgb2YgVk1TIFY3LjIgYW5kIFY3LjItMSBhbmQgaW4gdGhlIGN1cnJlbnRseSAoT2N0b2JlciAxOTk5KQphdmFpbGFibGUgRUNPcyBmb3IgVk1TIFY3LjEgYW5kIG5ld2VyIHZlcnNpb25zLiBJdCBpcyBmaXhlZCBpbiB2ZXJzaW9ucwpzaGlwcGVkIHdpdGggbmV3ZXIgVk1TIHZlcnNpb25zIGFuZCBhbGwgRUNPIGtpdHMgYWZ0ZXIgT2N0b2JlciAxOTk5LiBJdApvbmx5IHNob3dzIHVwIGR1cmluZyB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgcGVyaW9kIChEU1QpOiBzdGF0KCkKcmV0dXJucyBhIG1vZGlmaWNhdGlvbiB0aW1lIDEgaG91ciBhaGVhZC4gVGhpcyByZXN1bHRzIGluIEdOVSBtYWtlCndhcm5pbmcgbWVzc2FnZXMuIEZvciBhIGp1c3QgY3JlYXRlZCBzb3VyY2UgeW91IHdpbGwgc2VlOgoKICQgZ21ha2UgeC5leGUKIGdtYWtlLmV4ZTsxOiAqKiogV2FybmluZzogRmlsZSAneC5jJyBoYXMgbW9kaWZpY2F0aW9uIHRpbWUgaW4gdGhlIGZ1dHVyZSAoOTQwNTgyODYzID4gOTQwNTc5MjY5KQogY2MgICAgL29iaj14Lm9iaiB4LmMKIGxpbmsgIHgub2JqICAgIC9leGU9eC5leGUKIGdtYWtlLmV4ZTsxOiAqKiogV2FybmluZzogIENsb2NrIHNrZXcgZGV0ZWN0ZWQuICBZb3VyIGJ1aWxkIG1heSBiZSBpbmNvbXBsZXRlLgoKCk5ldyBpbiAzLjc4LjE6CgpGaXggYSBwcm9ibGVtIHdpdGggYXV0b21hdGljYWxseSByZW1ha2luZyBtYWtlZmlsZXMuIEdOVSBtYWtlIHVzZXMgYW4KZXhlY3ZlIHRvIHJlc3RhcnQgaXRzZWxmIGFmdGVyIGEgc3VjY2Vzc2Z1bCByZW1ha2Ugb2YgdGhlIG1ha2VmaWxlLiBPbgpVTklYIHN5c3RlbXMgZXhlY3ZlIHJlcGxhY2VzIHRoZSBydW5uaW5nIHByb2dyYW0gd2l0aCBhIG5ldyBvbmUgYW5kCnJlc2V0cyBhbGwgc2lnbmFsIGhhbmRsaW5nIHRvIHRoZSBkZWZhdWx0LiBPbiBWTVMgZXhlY3ZlIGNyZWF0ZXMgYSBjaGlsZApwcm9jZXNzLCBzaWduYWwgYW5kIGV4aXQgaGFuZGxlcnMgb2YgdGhlIHBhcmVudCBhcmUgc3RpbGwgYWN0aXZlLCBhbmQsCnVuZm9ydHVuYXRlbHksIGNvcnJ1cHQgdGhlIGV4aXQgY29kZSBmcm9tIHRoZSBjaGlsZC4gRml4IGluIGpvYi5jOgppZ25vcmUgU0lHQ0hMRC4KCkFkZGVkIHNvbWUgc3dpdGNoZXMgdG8gcmVmbGVjdCBsYXRlc3QgZmVhdHVyZXMgb2YgREVDQy4gTW9kaWZpY2F0aW9ucyBpbgptYWtlZmlsZS52bXMuCgpTZXQgc29tZSBkZWZpbml0aW9ucyB0byByZWZsZWN0IGxhdGVzdCBmZWF0dXJlcyBvZiBERUNDLiBNb2RpZmljYXRpb25zIGluCmNvbmZpZy5oLXZtcyAod2hpY2ggaXMgY29waWVkIHRvIGNvbmZpZy5oKS4KCkFkZGVkIGV4dGVybiBzdHJjbXBpIGRlY2xhcmF0aW9uIHRvIGF2b2lkICdpbXBsaWNpdGx5IGRlY2xhcmVkJyBtZXNzYWdlcy4KTW9kaWZpY2F0aW9uIGluIG1ha2UuaC4KCkRlZmF1bHQgcnVsZSBmb3IgQysrLCBjb25kaXRpb25hbHMgZm9yIGdjYyAoR0NDX0lTX05BVElWRSkgb3IgREVDL0RpZ2l0YWwvCkNvbXBhcSBjL2MrKyBjb21waWxlcnMuIE1vZGlmaWNhdGlvbnMgaW4gZGVmYXVsdC5jLgoKVXNhZ2Ugb2Ygb3BlbmRpcigpIGFuZCBmcmllbmRzLCBzdXBwcmVzcyBmaWxlIHZlcnNpb24uIE1vZGlmaWNhdGlvbnMgaW4gZGlyLmMuCgpBZGRlZCBWTVMgc3BlY2lmaWMgY29kZSB0byBoYW5kbGUgY3RybCtjIGFuZCBjdHJsK3kgdG8gYWJvcnQgbWFrZS4KTW9kaWZpY2F0aW9ucyBpbiBqb2IuYy4KCkFkZGVkIHN1cHBvcnQgdG8gaGF2ZSBjYXNlIHNlbnNpdGl2ZSB0YXJnZXRzIGFuZCBkZXBlbmRlbmNpZXMgYnV0IHRvCnN0aWxsIHVzZSBjYXNlIGJsaW5kIGZpbGUgbmFtZXMuIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgZm9yIEphdmEKbWFrZWZpbGVzIG9uIFZNUzoKCgkuU1VGRklYRVMgOgoJLlNVRkZJWEVTIDoJLmNsYXNzIC5qYXZhCgkuamF2YS5jbGFzcyA6CgkJamF2YWMgIiQ8CglIZWxsb1dvcmxkLmNsYXNzIDogICAgICBIZWxsb1dvcmxkLmphdmEKCkEgbmV3IG1hY3JvIFdBTlRfQ0FTRV9TRU5TSVRJVkVfVEFSR0VUUyBpbiBjb25maWcuaC12bXMgd2FzIGludHJvZHVjZWQuCkl0IG5lZWRzIHRvIGJlIGVuYWJsZWQgdG8gZ2V0IHRoaXMgZmVhdHVyZTsgZGVmYXVsdCBpcyBkaXNhYmxlZC4gIFRoZQptYWNybyBIQVZFX0NBU0VfSU5TRU5TSVRJVkVfRlMgbXVzdCBub3QgYmUgdG91Y2hlZDogaXQgaXMgc3RpbGwgZW5hYmxlZC4KTW9kaWZpY2F0aW9ucyBpbiBmaWxlLmMgYW5kIGNvbmZpZy5oLXZtcy4KCkJvb3RzdHJhcCBtYWtlIHRvIHN0YXJ0IGJ1aWxkaW5nIG1ha2UgaXMgc3RpbGwgbWFrZWZpbGUuY29tLCBidXQgbWFrZQpuZWVkcyB0byBiZSByZS1tYWRlIHdpdGggYSBtYWtlIHRvIG1ha2UgYSBjb3JyZWN0IHZlcnNpb246IGlnbm9yZSBhbGwKcG9zc2libGUgd2FybmluZ3MsIGRlbGV0ZSBhbGwgb2JqZWN0cywgcmVuYW1lIG1ha2UuZXhlIHRvIGEgZGlmZmVyZW50Cm5hbWUgYW5kIHJ1biBpdC4KCk1hZGUgc29tZSBtaW5vciBtb2RpZmljYXRpb25zIHRvIHRoZSBib290c3RyYXAgYnVpbGQgbWFrZWZpbGUuY29tLgoMClRoaXMgaXMgdGhlIFZNUyBwb3J0IG9mIEdOVSBNYWtlLgoKSXQgaXMgYmFzZWQgb24gdGhlIFZNUyBwb3J0IG9mIEdOVSBNYWtlIDMuNjAgYnkgTWlrZSBNb3JldHRpLgoKVGhpcyBwb3J0IHdhcyBkb25lIGJ5IEtsYXVzIEvkbXBmIDxra2FlbXBmQHJtaS5kZT4KClRoZXJlIGlzIGZpcnN0LWxldmVsIHN1cHBvcnQgYXZhaWxhYmxlIGZyb20gcHJvR0lTIFNvZnR3YXJlLCBHZXJtYW55LgpWaXNpdCB0aGVpciB3ZWItc2l0ZSBhdCBodHRwOi8vd3d3LnByb2dpcy5kZSB0byBnZXQgaW5mb3JtYXRpb24KYWJvdXQgb3RoZXIgdm1zIHNvZnR3YXJlIGFuZCBmb3J0aGNvbWluZyB1cGRhdGVzIHRvIGdudSBtYWtlLgoKTmV3IGZvciAzLjc3OgoKL2Jpbi9zaCBzdHlsZSBJL08gcmVkaXJlY3Rpb24gaXMgc3VwcG9ydGVkLiBZb3UgY2FuIG5vdyB3cml0ZSBsaW5lcyBsaWtlCgltY3Igc3lzJGRpc2s6W11wcm9ncmFtLmV4ZSA8IGlucHV0LnR4dCA+IG91dHB1dC50eHQgJj4gZXJyb3IudHh0CgpNYWtlZmlsZSB2YXJpYWJsZXMgYXJlIGxvb2tlZCB1cCBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudC4gWW91IGNhbiBzZXQKc3ltYm9scyBvciBsb2dpY2FscyBpbiBEQ0wgYW5kIGV2YWx1YXRlIHRoZW0gaW4gdGhlIE1ha2VmaWxlIHZpYQokKDxuYW1lLW9mLXN5bWJvbC1vci1sb2dpY2FsPikuICBWYXJpYWJsZXMgZGVmaW5lZCBpbiB0aGUgTWFrZWZpbGUKb3ZlcnJpZGUgVk1TIHN5bWJvbHMvbG9naWNhbHMgIQoKRnVuY3Rpb25zIGZvciBmaWxlIG5hbWVzIGFyZSB3b3JraW5nIG5vdy4gU2VlIHRoZSBHTlUgTWFrZSBtYW51YWwgZm9yCiQoZGlyIC4uLikgIGFuZCAkKHdpbGRjYXJkIC4uLikuICBVbml4LXN0eWxlIGFuZCBWTVMtc3R5bGUgbmFtZXMgYXJlCnN1cHBvcnRlZCBhcyBhcmd1bWVudHMuCgpUaGUgZGVmYXVsdCBydWxlcyBhcmUgc2V0IHVwIGZvciBHTlUgQy4gQnVpbGRpbmcgYW4gZXhlY3V0YWJsZSBmcm9tIGEKc2luZ2xlIHNvdXJjZSBmaWxlIGlzIGFzIGVhc3kgYXMgJ21ha2UgZmlsZS5leGUnLgoKVGhlIHZhcmlhYmxlICQoQVJDSCkgaXMgcHJlZGVmaW5lZCBhcyBBTFBIQSBvciBWQVggcmVzcC4gTWFrZWZpbGVzIGZvcgpkaWZmZXJlbnQgVk1TIHN5c3RlbXMgY2FuIG5vdyBiZSB3cml0dGVuIGJ5IGNoZWNraW5nICQoQVJDSCkgYXMgaW4KICBpZmVxICgkKEFSQ0gpLEFMUEhBKQogICAgJChFQ0hPKSAiT24gdGhlIEFscGhhIgogIGVsc2UKICAgICQoRUNITykgIk9uIHRoZSBWQVgiCiAgZW5kaWYKCkNvbW1hbmQgbGluZXMgb2YgZXhjZXNzaXZlIGxlbmd0aCBhcmUgY29ycmVjdGx5IGJyb2tlbiBhbmQgd3JpdHRlbiB0byBhCmJhdGNoIGZpbGUgaW4gc3lzJHNjcmF0Y2ggZm9yIGxhdGVyIGV4ZWN1dGlvbi4gVGhlcmUncyBubyBsaW1pdCB0byB0aGUKbGVuZ3RocyBvZiBjb21tYW5kcyAoYW5kIG5vIG5lZWQgZm9yIC5vcHQgZmlsZXMgOi0pIGFueSBtb3JlLgoKRW1wdHkgY29tbWFuZHMgYXJlIGhhbmRsZWQgY29ycmVjdGx5IGFuZCBkb24ndCBlbmQgaW4gYSBuZXcgRENMIHByb2Nlc3MuCgoKTmV3IGZvciAzLjc2OgoKSm9obiBXLiBFYXRvbiBoYXMgdXBkYXRlZCB0aGUgVk1TIHBvcnQgdG8gc3VwcG9ydCBsaWJyYXJpZXMgYW5kIFZQQVRILgoKClRvIGJ1aWxkIE1ha2UsIHNpbXBseSB0eXBlIEBtYWtlZmlsZS4gIFRoaXMgc2hvdWxkIGNvbXBpbGUgYWxsIHRoZQpuZWNlc3NhcnkgZmlsZXMgYW5kIGxpbmsgTWFrZS4gIFRoZXJlIGlzIGFsc28gYSBmaWxlIGNhbGxlZAptYWtlZmlsZS52bXMuICBJZiB5b3UgYWxyZWFkeSBoYXZlIEdOVSBNYWtlIGJ1aWx0IHlvdSBjYW4ganVzdCB1c2UKTWFrZSB3aXRoIHRoaXMgbWFrZWZpbGUgdG8gcmVidWlsZC4KCkhlcmUgYXJlIHNvbWUgbm90ZXMgYWJvdXQgR05VIE1ha2UgZm9yIFZNUzoKClRoZSBjZCBjb21tYW5kIGlzIHN1cHBvcnRlZCBpZiBpdCdzIGNhbGxlZCBhcyAkKENEKS4gVGhpcyBpbnZva2VzCnRoZSAnYnVpbHRpbl9jZCcgY29tbWFuZCB3aGljaCBjaGFuZ2VzIHRoZSBkaXJlY3RvcnkuCkNhbGxpbmcgJ3NldCBkZWYnIGRvZXNuJ3QgZG8gdGhlIHRyaWNrLCBzaW5jZSBhIHN1Yi1zaGVsbCBpcwpzcGF3bmVkIGZvciB0aGlzIGNvbW1hbmQsIHRoZSBkaXJlY3RvcnkgaXMgY2hhbmdlZCAqaW4gdGhpcyBzdWItc2hlbGwqCmFuZCB0aGUgc3ViLXNoZWxsIGVuZHMuCgpMaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFRoZXkgd2VyZSBpbiBHTlUgTWFrZSAzLjYwIGJ1dCBzb21laG93IEkKZGlkbid0IGNhcmUgcG9ydGluZyB0aGUgY29kZS4gSWYgdGhlcmUgaXMgZW5vdWdoIGludGVyZXN0LCBJJ2xsIGRvIGl0IGF0CnNvbWUgbGF0ZXIgdGltZS4KClRoZSB2YXJpYWJsZSAkXiBzZXBhcmF0ZXMgZmlsZXMgd2l0aCBjb21tYXMgaW5zdGVhZCBvZiBzcGFjZXMgKEl0J3MgdGhlCm5hdHVyYWwgdGhpbmcgdG8gZG8gZm9yIFZNUykuCgpTZWUgZGVmYXVsdHMuYyBmb3IgVk1TIGRlZmF1bHQgc3VmZml4ZXMgYW5kIG15IGRlZmluaXRpb25zIGZvciBkZWZhdWx0CnJ1bGVzIGFuZCB2YXJpYWJsZXMuCgpUaGUgc2hlbGwgZnVuY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIHlldC4KCkxvYWQgYXZlcmFnZSByb3V0aW5lcyBoYXZlbid0IGJlZW4gaW1wbGVtZW50ZWQgZm9yIFZNUyB5ZXQuCgpUaGUgZGVmYXVsdCBpbmNsdWRlIGRpcmVjdG9yeSBmb3IgaW5jbHVkaW5nIG90aGVyIG1ha2VmaWxlcyBpcwpTWVMkU1lTUk9PVDpbU1lTTElCXSAoSSBkb24ndCByZW1lbWJlciB3aHkgSSBkaWRuJ3QganVzdCB1c2UKU1lTJExJQlJBUlk6IGluc3RlYWQ7IG1heWJlIGl0IHdvdWxkbid0IHdvcmsgdGhhdCB3YXkpLgoKVGhlIGRlZmF1bHQgbWFrZWZpbGVzIG1ha2UgbG9va3MgZm9yIGFyZTogbWFrZWZpbGUudm1zLCBnbnVtYWtlZmlsZSwKbWFrZWZpbGUuLCBhbmQgZ251bWFrZWZpbGUuIC4KClRoZSBzdGF0KCkgZnVuY3Rpb24gYW5kIGhhbmRsaW5nIG9mIHRpbWUgc3RhbXBzIGluIFZNUyBpcyBicm9rZW4sIHNvIEkKcmVwbGFjZWQgaXQgd2l0aCBhIGhhY2sgaW4gdm1zZnVuY3Rpb25zLmMuIEkgd2lsbCBwcm92aWRlIGEgZnVsbCByZXdyaXRlCnNvbWV3aGVyZSBpbiB0aGUgZnV0dXJlLiBCZSB3YXJuZWQsIHRoZSB0aW1lIHJlc29sdXRpb24gaW5zaWRlIG1ha2UgaXMKbGVzcyB0aGFuIHdoYXQgdm1zIHByb3ZpZGVzLiBUaGlzIG1pZ2h0IGJlIGEgcHJvYmxlbSBvbiB0aGUgZmFzdGVyIEFscGhhcy4KCllvdSBjYW4gdXNlIGEgOiBpbiBhIGZpbGVuYW1lIG9ubHkgaWYgeW91IHByZWNlZGUgaXQgd2l0aCBhIGJhY2tzbGFzaCAoJ1wnKS4KRS5nLi0gaG9iYmVzXDpbYm9nYXMuZmlsZXNdCgpNYWtlIGlnbm9yZXMgc3VjY2VzcywgaW5mb3JtYXRpb25hbCwgb3Igd2FybmluZyBlcnJvcnMgKC1TLSwgLUktLCBvcgotVy0pLiAgQnV0IGl0IHdpbGwgc3RvcCBvbiAtRS0gYW5kIC1GLSBlcnJvcnMuICh1bmxlc3MgeW91IGRvIHNvbWV0aGluZwp0byBvdmVycmlkZSB0aGlzIGluIHlvdXIgbWFrZWZpbGUsIG9yIHdoYXRldmVyKS4KClJlbW90ZSBzdHVmZiBpc24ndCBpbXBsZW1lbnRlZCB5ZXQuCgpNdWx0aXBsZSBsaW5lIERDTCBjb21tYW5kcywgc3VjaCBhcyAiaWYiIHN0YXRlbWVudHMsIG11c3QgYmUgcHV0IGluc2lkZQpjb21tYW5kIGZpbGVzLiAgWW91IGNhbiBydW4gYSBjb21tYW5kIGZpbGUgYnkgdXNpbmcgXEAuCgoKVk1TIGNoYW5nZXMgbWFkZSBmb3IgMy43NC4zCgpMb3RzIG9mIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGFkYXB0ZWQgZm9yIFZNUy4gU2VlIGRlZmF1bHQuYy4KCkxvbmcgY29tbWFuZCBsaW5lcyBhcmUgbm93IGNvbnZlcnRlZCB0byBjb21tYW5kIGZpbGVzLgoKQ29tbWEgKCcsJykgYXMgYSBzZXBhcmF0b3IgaXMgbm93IGFsbG93ZWQuIFNlZSBtYWtlZmlsZS52bXMgZm9yIGFuIGV4YW1wbGUuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkNvcHlyaWdodCAoQykgMTk5Ni0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgpUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTWFrZS4KCkdOVSBNYWtlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCnRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKdmVyc2lvbi4KCkdOVSBNYWtlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQpXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgpBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgo=