SElTVE9SWSBvZiB0aGUgTFpNQSBTREsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCjQuNjUgICAgICAgICAgIDIwMDktMDItMDMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIFNvbWUgbWlub3IgZml4ZXMKCgo0LjYzICAgICAgICAgICAyMDA4LTEyLTMxCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBTb21lIG1pbm9yIGZpeGVzCgoKNC42MSBiZXRhICAgICAgMjAwOC0xMS0yMwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gVGhlIGJ1ZyBpbiBBTlNJLUMgTFpNQSBEZWNvZGVyIHdhcyBmaXhlZDoKICAgIElmIGVuY29kZWQgc3RyZWFtIHdhcyBjb3JydXB0ZWQsIGRlY29kZXIgY291bGQgYWNjZXNzIG1lbW9yeQogICAgb3V0c2lkZSBvZiBhbGxvY2F0ZWQgcmFuZ2UuCi0gU29tZSBjaGFuZ2VzIGluIEFOU0ktQyA3eiBEZWNvZGVyIGludGVyZmFjZXMuCi0gTFpNQSBTREsgaXMgcGxhY2VkIGluIHRoZSBwdWJsaWMgZG9tYWluLgoKCjQuNjAgYmV0YSAgICAgIDIwMDgtMDgtMTkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIFNvbWUgbWlub3IgZml4ZXMuCgoKNC41OSBiZXRhICAgICAgMjAwOC0wOC0xMwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gVGhlIGJ1ZyB3YXMgZml4ZWQ6CiAgICBMWk1BIEVuY29kZXIgaW4gZmFzdCBjb21wcmVzc2lvbiBtb2RlIGNvdWxkIGFjY2VzcyBtZW1vcnkgb3V0c2lkZSBvZgogICAgYWxsb2NhdGVkIHJhbmdlIGluIHNvbWUgcmFyZSBjYXNlcy4KCgo0LjU4IGJldGEgICAgICAyMDA4LTA1LTA1Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBBTlNJLUMgTFpNQSBEZWNvZGVyIHdhcyByZXdyaXR0ZW4gZm9yIHNwZWVkIG9wdGltaXphdGlvbnMuCi0gQU5TSS1DIExaTUEgRW5jb2RlciB3YXMgaW5jbHVkZWQgdG8gTFpNQSBTREsuCi0gQysrIExaTUEgY29kZSBub3cgaXMganVzdCB3cmFwcGVyIG92ZXIgQU5TSS1DIGNvZGUuCgoKNC41NyAgICAgICAgICAgMjAwNy0xMi0xMgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gU3BlZWQgb3B0aW1pemF0aW9ucyBpbiDRKysgTFpNQSBEZWNvZGVyLgotIFNtYWxsIGNoYW5nZXMgZm9yIG1vcmUgY29tcGF0aWJpbGl0eSB3aXRoIHNvbWUgQy9DKysgY29tcGlsZXJzLgoKCjQuNDkgYmV0YSAgICAgIDIwMDctMDctMDUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIC43eiBBTlNJLUMgRGVjb2RlcjoKICAgICAtIG5vdyBpdCBzdXBwb3J0cyBCQ0ogYW5kIEJDSjIgZmlsdGVycwogICAgIC0gbm93IGl0IHN1cHBvcnRzIGZpbGVzIGxhcmdlciB0aGFuIDQgR0IuCiAgICAgLSBub3cgaXQgc3VwcG9ydHMgIkxhc3QgV3JpdGUgVGltZSIgZmllbGQgZm9yIGZpbGVzLgotIEMrKyBjb2RlIGZvciAuN3ogYXJjaGl2ZXMgY29tcHJlc3NpbmcvZGVjb21wcmVzc2luZyBmcm9tIDctemlwCiAgd2FzIGluY2x1ZGVkIHRvIExaTUEgU0RLLgoKCjQuNDMgICAgICAgICAgIDIwMDYtMDYtMDQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIFNtYWxsIGNoYW5nZXMgZm9yIG1vcmUgY29tcGF0aWJpbGl0eSB3aXRoIHNvbWUgQy9DKysgY29tcGlsZXJzLgoKCjQuNDIgICAgICAgICAgIDIwMDYtMDUtMTUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIFNtYWxsIGNoYW5nZXMgaW4gLmggZmlsZXMgaW4gQU5TSS1DIHZlcnNpb24uCgoKNC4zOSBiZXRhICAgICAgMjAwNi0wNC0xNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gVGhlIGJ1ZyBpbiB2ZXJzaW9ucyA0LjMzYjo0LjM4YiB3YXMgZml4ZWQ6CiAgQysrIHZlcnNpb24gb2YgTFpNQSBlbmNvZGVyIGNvdWxkIG5vdCBjb3JyZWN0bHkgY29tcHJlc3MKICBmaWxlcyBsYXJnZXIgdGhhbiAyIEdCIHdpdGggSEM0IG1hdGNoIGZpbmRlciAoLW1maGM0KS4KCgo0LjM3IGJldGEgICAgICAyMDA1LTA0LTA2Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBGaXhlcyBpbiBDKysgY29kZTogY29kZSBjb3VsZCBubyBiZSBjb21waWxlZCBpZiBfTk9fRVhDRVBUSU9OUyB3YXMgZGVmaW5lZC4KCgo0LjM1IGJldGEgICAgICAyMDA1LTAzLTAyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBUaGUgYnVnIHdhcyBmaXhlZCBpbiBDKysgdmVyc2lvbiBvZiBMWk1BIERlY29kZXI6CiAgICBJZiBlbmNvZGVkIHN0cmVhbSB3YXMgY29ycnVwdGVkLCBkZWNvZGVyIGNvdWxkIGFjY2VzcyBtZW1vcnkKICAgIG91dHNpZGUgb2YgYWxsb2NhdGVkIHJhbmdlLgoKCjQuMzQgYmV0YSAgICAgIDIwMDYtMDItMjcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIENvbXByZXNzaW5nIHNwZWVkIGFuZCBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBjb21wcmVzc2luZyB3ZXJlIGluY3JlYXNlZAotIExaTUEgbm93IGNhbiB1c2Ugb25seSB0aGVzZSBtYXRjaCBmaW5kZXJzOiBIQzQsIEJUMiwgQlQzLCBCVDQKCgo0LjMyICAgICAgICAgICAyMDA1LTEyLTA5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBKYXZhIHZlcnNpb24gb2YgTFpNQSBTREsgd2FzIGluY2x1ZGVkCgoKNC4zMCAgICAgICAgICAgMjAwNS0xMS0yMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gQ29tcHJlc3Npb24gcmF0aW8gd2FzIGltcHJvdmVkIGluIC1hMiBtb2RlCi0gU3BlZWQgb3B0aW1pemF0aW9ucyBmb3IgY29tcHJlc3NpbmcgaW4gLWEyIG1vZGUKLSAtZmIgc3dpdGNoIG5vdyBzdXBwb3J0cyB2YWx1ZXMgdXAgdG8gMjczCi0gVGhlIGJ1ZyBpbiA3el9DICg3ekluLmMpIHdhcyBmaXhlZDoKICBJdCB1c2VkIEFsbG9jL0ZyZWUgZnVuY3Rpb25zIGZyb20gZGlmZmVyZW50IG1lbW9yeSBwb29scy4KICBTbyBpZiBwcm9ncmFtIHVzZWQgdHdvIG1lbW9yeSBwb29scywgaXQgd29ya2VkIGluY29ycmVjdGx5LgotIDd6X0M6IC43eiBmb3JtYXQgc3VwcG9ydGluZyB3YXMgaW1wcm92ZWQKLSBMWk1BIyBTREsgKEMjLk5FVCB2ZXJzaW9uKSB3YXMgaW5jbHVkZWQKCgo0LjI3IChVcGRhdGVkKSAyMDA1LTA5LTIxCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBTb21lIEdVSURzL2ludGVyZmFjZXMgaW4gQysrIHdlcmUgY2hhbmdlZC4KIElTdHJlYW0uaDoKICAgSVNlcXVlbnRpYWxJblN0cmVhbTo6UmVhZCBub3cgd29ya3MgYXMgb2xkIFJlYWRQYXJ0CiAgIElTZXF1ZW50aWFsT3V0U3RyZWFtOjpXcml0ZSBub3cgd29ya3MgYXMgb2xkIFdyaXRlUGFydAoKCjQuMjcgICAgICAgICAgIDIwMDUtMDgtMDcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIFRoZSBidWcgaW4gTHptYURlY29kZVNpemUuYyB3YXMgZml4ZWQ6CiAgIGlmIF9MWk1BX0lOX0NCIGFuZCBfTFpNQV9PVVRfUkVBRCB3ZXJlIGRlZmluZWQsCiAgIGRlY29tcHJlc3Npbmcgd29ya2VkIGluY29ycmVjdGx5LgoKCjQuMjYgICAgICAgICAgIDIwMDUtMDgtMDUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIEZpeGVzIGluIDd6X0MgY29kZSBhbmQgTHptYVRlc3QuYzoKICBwcmV2aW91cyB2ZXJzaW9ucyBjb3VsZCB3b3JrIGluY29ycmVjdGx5LAogIGlmIG1hbGxvYygwKSByZXR1cm5zIDAKCgo0LjIzICAgICAgICAgICAyMDA1LTA2LTI5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBTbWFsbCBmaXhlcyBpbiBDKysgY29kZQoKCjQuMjIgICAgICAgICAgIDIwMDUtMDYtMTAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIFNtYWxsIGZpeGVzCgoKNC4yMSAgICAgICAgICAgMjAwNS0wNi0wOAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gSW50ZXJmYWNlcyBmb3IgQU5TSS1DIExaTUEgRGVjb2RlciAoTHptYURlY29kZS5jKSB3ZXJlIGNoYW5nZWQKLSBOZXcgYWRkaXRpb25hbCB2ZXJzaW9uIG9mIEFOU0ktQyBMWk1BIERlY29kZXIgd2l0aCB6bGliLWxpa2UgaW50ZXJmYWNlOgogICAgLSBMem1hU3RhdGVEZWNvZGUuaAogICAgLSBMem1hU3RhdGVEZWNvZGUuYwogICAgLSBMem1hU3RhdGVUZXN0LmMKLSBBTlNJLUMgTFpNQSBEZWNvZGVyIG5vdyBjYW4gZGVjb21wcmVzcyBmaWxlcyBsYXJnZXIgdGhhbiA0IEdCCgoKNC4xNyAgICAgICAgICAgMjAwNS0wNC0xOAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gTmV3IGV4YW1wbGUgZm9yIFJBTS0+UkFNIGNvbXByZXNzaW5nL2RlY29tcHJlc3Npbmc6CiAgTFpNQSArIEJDSiAoZmlsdGVyIGZvciB4ODYgY29kZSk6CiAgICAtIEx6bWFSYW0uaAogICAgLSBMem1hUmFtLmNwcAogICAgLSBMem1hUmFtRGVjb2RlLmgKICAgIC0gTHptYVJhbURlY29kZS5jCiAgICAtIC1mODYgc3dpdGNoIGZvciBsem1hLmV4ZQoKCjQuMTYgICAgICAgICAgIDIwMDUtMDMtMjkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIFRoZSBidWcgd2FzIGZpeGVkIGluIEx6bWFEZWNvZGUuYyAoQU5TSS1DIExaTUEgRGVjb2Rlcik6CiAgIElmIF9MWk1BX09VVF9SRUFEIHdhcyBkZWZpbmVkLCBhbmQgaWYgZW5jb2RlZCBzdHJlYW0gd2FzIGNvcnJ1cHRlZCwKICAgZGVjb2RlciBjb3VsZCBhY2Nlc3MgbWVtb3J5IG91dHNpZGUgb2YgYWxsb2NhdGVkIHJhbmdlLgotIFNwZWVkIG9wdGltaXphdGlvbiBvZiBBTlNJLUMgTFpNQSBEZWNvZGVyIChub3cgaXQncyBhYm91dCAyMCUgZmFzdGVyKS4KICBPbGQgdmVyc2lvbiBvZiBMWk1BIERlY29kZXIgbm93IGlzIGluIGZpbGUgTHptYURlY29kZVNpemUuYy4KICBMem1hRGVjb2RlU2l6ZS5jIGNhbiBwcm92aWRlIHNsaWdodGx5IHNtYWxsZXIgY29kZSB0aGFuIEx6bWFEZWNvZGUuYwotIFNtYWxsIHNwZWVkIG9wdGltaXphdGlvbiBpbiBMWk1BIEMrKyBjb2RlCi0gZmlsdGVyIGZvciBTUEFSQydzIGNvZGUgd2FzIGFkZGVkCi0gU2ltcGxpZmllZCB2ZXJzaW9uIG9mIC43eiBBTlNJLUMgRGVjb2RlciB3YXMgaW5jbHVkZWQKCgo0LjA2ICAgICAgICAgICAyMDA0LTA5LTA1Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBUaGUgYnVnIGluIHY0LjA1IHdhcyBmaXhlZDoKICAgIExaTUEtRW5jb2RlciBkaWRuJ3QgcmVsZWFzZSBvdXRwdXQgc3RyZWFtIGluIHNvbWUgY2FzZXMuCgoKNC4wNSAgICAgICAgICAgMjAwNC0wOC0yNQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gU291cmNlIGNvZGUgb2YgZmlsdGVycyBmb3IgeDg2LCBJQS02NCwgQVJNLCBBUk0tVGh1bWIKICBhbmQgUG93ZXJQQyBjb2RlIHdhcyBpbmNsdWRlZCB0byBTREsKLSBTb21lIGludGVybmFsIG1pbm9yIGNoYW5nZXMKCgo0LjA0ICAgICAgICAgICAyMDA0LTA3LTI4Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBNb3JlIGNvbXBhdGliaWxpdHkgd2l0aCBzb21lIEMrKyBjb21waWxlcnMKCgo0LjAzICAgICAgICAgICAyMDA0LTA2LTE4Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAiQmVuY2htYXJrIiBjb21tYW5kIHdhcyBhZGRlZC4gSXQgbWVhc3VyZXMgY29tcHJlc3NpbmcKICBhbmQgZGVjb21wcmVzc2luZyBzcGVlZCBhbmQgc2hvd3MgcmF0aW5nIHZhbHVlcy4KICBBbHNvIGl0IGNoZWNrcyBoYXJkd2FyZSBlcnJvcnMuCgoKNC4wMiAgICAgICAgICAgMjAwNC0wNi0xMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gQysrIExaTUEgRW5jb2Rlci9EZWNvZGVyIGNvZGUgbm93IGlzIG1vcmUgcG9ydGFibGUKICBhbmQgaXQgY2FuIGJlIGNvbXBpbGVkIGJ5IEdDQyBvbiBMaW51eC4KCgo0LjAxICAgICAgICAgICAyMDA0LTAyLTE1Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBTb21lIGRldGVjdGlvbiBvZiBkYXRhIGNvcnJ1cHRpb24gd2FzIGVuYWJsZWQuCiAgICBMem1hRGVjb2RlLmMgLyBSYW5nZURlY29kZXJSZWFkQnl0ZQogICAgLi4uLi4KICAgIHsKICAgICAgcmQtPkV4dHJhQnl0ZXMgPSAxOwogICAgICByZXR1cm4gMHhGRjsKICAgIH0KCgo0LjAwICAgICAgICAgICAyMDA0LTAyLTEzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBPcmlnaW5hbCB2ZXJzaW9uIG9mIExaTUEgU0RLCgoKCkhJU1RPUlkgb2YgdGhlIExaTUEKLS0tLS0tLS0tLS0tLS0tLS0tLQogIDIwMDEtMjAwODogIEltcHJvdmVtZW50cyB0byBMWk1BIGNvbXByZXNzaW5nL2RlY29tcHJlc3NpbmcgY29kZSwKICAgICAgICAgICAgICBrZWVwaW5nIGNvbXBhdGliaWxpdHkgd2l0aCBvcmlnaW5hbCBMWk1BIGZvcm1hdAogIDE5OTYtMjAwMTogIERldmVsb3BtZW50IG9mIExaTUEgY29tcHJlc3Npb24gZm9ybWF0CgogIFNvbWUgbWlsZXN0b25lczoKCiAgMjAwMS0wOC0zMDogTFpNQSBjb21wcmVzc2lvbiB3YXMgYWRkZWQgdG8gNy1aaXAKICAxOTk5LTAxLTAyOiBGaXJzdCB2ZXJzaW9uIG9mIDctWmlwIHdhcyByZWxlYXNlZAoKCkVuZCBvZiBkb2N1bWVudAo=