LyoKICogIEVuaGFuY2VkIENQVSB0eXBlIGRldGVjdGlvbiBieSBNaWtlIEphZ2RpcywgUGF0cmljayBTdC4gSmVhbgogKiAgYW5kIE1hcnRpbiBNYXJlcywgTm92ZW1iZXIgMTk5Ny4KICoKICogIEZvcmNlIEN5cml4IDZ4ODYoTVgpIGFuZCBNIElJIHByb2Nlc3NvcnMgdG8gcmVwb3J0IE1UUlIgY2FwYWJpbGl0eQogKiAgYW5kIEN5cml4ICJjb21hIGJ1ZyIgcmVjb2duaXRpb24gYnkKICogIFpvbHThbiBC9nN69nJt6W55aSA8emJvc3pvckBtYWlsLmV4dGVybmV0Lmh1PiBGZWJydWFyeSAxOTk5LgogKiAKICogIEZvcmNlIENlbnRhdXIgQzYgcHJvY2Vzc29ycyB0byByZXBvcnQgTVRSUiBjYXBhYmlsaXR5LgogKiAgQmFydCBIYXJ0Z2VycyA8YmFydEBldHBtb2QucGh5cy50dWUubmw+LCBNYXkgMTk5OS4KICoKICogIEludGVsIE1vYmlsZSBQZW50aXVtIElJIGRldGVjdGlvbiBmaXguIFNlYW4gR2lsbGV5LCBKdW5lIDE5OTkuCiAqCiAqICBJRFQgV2luY2hpcCB0d2Vha3MsIG1pc2MgY2xlYW4gdXBzLgogKiAgRGF2ZSBKb25lcyA8ZGF2ZWpAc3VzZS5kZT4sIEF1Z3VzdCAxOTk5CiAqCiAqICBCZXR0ZXIgZGV0ZWN0aW9uIG9mIENlbnRhdXIvSURUIFdpbkNoaXAgbW9kZWxzLgogKiAgQmFydCBIYXJ0Z2VycyA8YmFydEBldHBtb2QucGh5cy50dWUubmw+LCBBdWd1c3QgMTk5OS4KICoKICogIENsZWFuZWQgdXAgY2FjaGUtZGV0ZWN0aW9uIGNvZGUKICogIERhdmUgSm9uZXMgPGRhdmVqQHN1c2UuZGU+LCBPY3RvYmVyIDE5OTkKICoKICogIEFkZGVkIHByb3BlciBMMiBjYWNoZSBkZXRlY3Rpb24gZm9yIENvcHBlcm1pbmUKICogIERyYWdhbiBTdGFuY2V2aWMgPHZpc2l0b3JAdmFsaW51eC5jb20+LCBPY3RvYmVyIDE5OTkKICoKICogIEFkZGVkIHRoZSBvcmlnaW5hbCBhcnJheSBmb3IgY2FwYWJpbGl0eSBmbGFncyBidXQgZm9yZ290IHRvIGNyZWRpdCAKICogIG15c2VsZiA6KSAofjE5OTgpIEZpeGVkL2NsZWFuZWQgdXAgc29tZSBjcHVfbW9kZWxfaW5mbyBhbmQgb3RoZXIgc3R1ZmYKICogIEphdWRlciBIbyA8amF1ZGVyaG9AY2FydW1iYS5jb20+LCBKYW51YXJ5IDIwMDAKICoKICogIERldGVjdGlvbiBmb3IgQ2VsZXJvbiBjb3BwZXJtaW5lLCBpZGVudGlmeV9jcHUoKSBvdmVyaGF1bGVkLAogKiAgYW5kIGEgZmV3IG90aGVyIGNsZWFuIHVwcy4KICogIERhdmUgSm9uZXMgPGRhdmVqQHN1c2UuZGU+LCBBcHJpbCAyMDAwCiAqCiAqICBQZW50aXVtIElJSSBGWFNSLCBTU0Ugc3VwcG9ydAogKiAgR2VuZXJhbCBGUFUgc3RhdGUgaGFuZGxpbmcgY2xlYW51cHMKICogIEdhcmV0aCBIdWdoZXMgPGdhcmV0aEB2YWxpbnV4LmNvbT4sIE1heSAyMDAwCiAqCiAqICBBZGRlZCBwcm9wZXIgQ2FzY2FkZXMgQ1BVIGFuZCBMMiBjYWNoZSBkZXRlY3Rpb24gZm9yIENhc2NhZGVzCiAqICBhbmQgOC13YXkgdHlwZSBjYWNoZSBoYXBweSBidW5jaCBmcm9tIEludGVsOl4pCiAqICBEcmFnYW4gU3RhbmNldmljIDx2aXNpdG9yQHZhbGludXguY29tPiwgTWF5IDIwMDAgCiAqCiAqICBGb3J3YXJkIHBvcnQgQU1EIER1cm9uIGVycmF0YSBUMTMgZnJvbSAyLjIuMTdwcmUKICogIERhdmUgSm9uZXMgPGRhdmVqQHN1c2UuZGU+LCBBdWd1c3QgMjAwMAogKgogKiAgRm9yd2FyZCBwb3J0IGxvdHMgb2YgZml4ZXMvaW1wcm92ZW1lbnRzIGZyb20gMi4yLjE4cHJlCiAqICBDeXJpeCBJSUksIFBlbnRpdW0gSVYgc3VwcG9ydC4KICogIERhdmUgSm9uZXMgPGRhdmVqQHN1c2UuZGU+LCBPY3RvYmVyIDIwMDAKICoKICogIE1hc3NpdmUgY2xlYW51cCBvZiBDUFUgZGV0ZWN0aW9uIGFuZCBidWcgaGFuZGxpbmc7CiAqICBUcmFuc21ldGEgQ1BVIGRldGVjdGlvbiwKICogIEguIFBldGVyIEFudmluIDxocGFAenl0b3IuY29tPiwgTm92ZW1iZXIgMjAwMAogKgogKiAgVklBIEMzIFN1cHBvcnQuCiAqICBEYXZlIEpvbmVzIDxkYXZlakBzdXNlLmRlPiwgTWFyY2ggMjAwMQogKgogKiAgQU1EIEF0aGxvbi9EdXJvbi9UaHVuZGVyYmlyZCBibHVlc21va2Ugc3VwcG9ydC4KICogIERhdmUgSm9uZXMgPGRhdmVqQHN1c2UuZGU+LCBBcHJpbCAyMDAxLgogKgogKiAgQ2FjaGVTaXplIGJ1ZyB3b3JrYXJvdW5kIHVwZGF0ZXMgZm9yIEFNRCwgSW50ZWwgJiBWSUEgQ3lyaXguCiAqICBEYXZlIEpvbmVzIDxkYXZlakBzdXNlLmRlPiwgU2VwdGVtYmVyLCBPY3RvYmVyIDIwMDEuCiAqCiAqLwoK