VGhpcyBmaWxlIGRlc2NyaWJlcyB3aGVyZSB0byBzdGFydCBkZWJ1Z2dpbmcgV2luZSBhbmQgaG93IHRvIHdyaXRlCnVzZWZ1bCBidWcgcmVwb3J0cy4KCkNyYXNoZXMKPT09PT09PQoKICBUaGVzZSB1c3VhbGx5IHNob3cgdXAgbGlrZSB0aGlzOgoKfFVuZXhwZWN0ZWQgV2luZG93cyBwcm9ncmFtIHNlZ2ZhdWx0IC0gb3Bjb2RlID0gOGIKfFNlZ21lbnRhdGlvbiBmYXVsdCBpbiBXaW5kb3dzIHByb2dyYW0gMWI3OmM0MS4KfExvYWRpbmcgc3ltYm9scyBmcm9tIEVMRiBmaWxlIC9yb290L3dpbmUvd2luZS4uLgp8Li4uLm1vcmUgTG9hZGluZyBzeW1ib2xzIGZyb20gLi4uCnxJbiAxNiBiaXQgbW9kZS4KfFJlZ2lzdGVyIGR1bXA6CnwgQ1M6MDFiNyBTUzowMTZmIERTOjAyODcgRVM6MDAwMAp8IElQOjBjNDEgU1A6ODc4YSBCUDo4Nzk2IEZMQUdTOjAyNDYKfCBBWDo4MTFlIEJYOjAwMDAgQ1g6MDAwMCBEWDowMDAwIFNJOjAwMDEgREk6ZmZmZgp8U3RhY2sgZHVtcDoKfDB4MDE2ZjoweDg3OGE6ICAwMDAxIDAxNmYgZmZlZCAwMDAwIDAwMDAgMDI4NyA4OTBiIDFlNWIKfDB4MDE2ZjoweDg3OWE6ICAwMWI3IDAwMDEgMDAwZCAxMDUwIDA4YjcgMDE2ZiAwMDAxIDAwMGQKfDB4MDE2ZjoweDg3YWE6ICAwMDBhIDAwMDMgMDAwNCAwMDAwIDAwMDcgMDAwNyAwMTkwIDAwMDAKfDB4MDE2ZjoweDg3YmE6CnwKfDAwNTA6IHNlbD0wMjg3IGJhc2U9NDAyMTFkMzAgbGltaXQ9MGI5M2YgKGJ5dGVzKSAxNi1iaXQgcnctCnxCYWNrdHJhY2U6CnwwIDB4MDFiNzoweDBjNDEgKFBYU1JWX0ZPTkdFVEZBQ0VOQU1FKzB4N2MpCnwxIDB4MDFiNzoweDFlNWIgKFBYU1JWX0ZPTlBVVENBVEZPTlQrMHgyY2QpCnwyIDB4MDFhNzoweDA1YWEKfDMgMHgwMWI3OjB4MDc2OCAoUFhTUlZfRk9OSU5JVEZPTlRTKzB4ODEpCnw0IDB4MDE0ZjoweDAzZWQgKFBET1hXSU5fQFNRTENVUkNCJFE2Q0JUWVBFVUxOOENCU0NUWVBFKzB4MWIxKQp8NSAweDAxM2Y6MHgwMGFjCnwKfDB4MDFiNzoweDBjNDEgKFBYU1JWX0ZPTkdFVEZBQ0VOQU1FKzB4N2MpOiAgbW92dyAgICAgICAgJWVzOjB4MzgoJWJ4KSwlZHgKClN0ZXBzIHRvIGRlYnVnIGEgY3Jhc2guIFlvdSBtYXkgc3RvcCBhdCBhbnkgc3RlcCwgYnV0IHBsZWFzZSByZXBvcnQgdGhlIGJ1ZwphbmQgcHJvdmlkZSBhcyBtdWNoIG9mIHRoZSBpbmZvcm1hdGlvbiBnYXRoZXJlZCB0byB0aGUgbmV3c2dyb3VwIG9yIHRoZQpyZWxldmFudCBkZXZlbG9wZXIgYXMgZmVhc29uYWJsZS4KICAKIDEuIEdldCB0aGUgcmVhc29uIGZvciB0aGUgY3Jhc2guIFRoaXMgaXMgdXN1YWxseSBhbiBhY2Nlc3MgdG8gYW4gaW52YWxpZAogICAgc2VsZWN0b3IsIGFuIGFjY2VzcyB0byBhbiBvdXQgb2YgcmFuZ2UgYWRkcmVzcyBpbiBhIHZhbGlkIHNlbGVjdG9yLAogICAgcG9wcGluZyBhIHNlZ21lbnRyZWdpc3RlciBmcm9tIHRoZSBzdGFjayBvciB0aGUgbGlrZS4gV2hlbiByZXBvcnRpbmcgYQogICAgY3Jhc2gsIHJlcG9ydCB0aGlzIFdIT0xFIGNyYXNoZHVtcCBldmVuIGlmIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byB5b3UuCgogICAgKEluIHRoaXMgY2FzZSBpdCBpcyBhY2Nlc3MgdG8gYW4gaW52YWxpZCBzZWxlY3RvciwgZm9yICVlcyBpcyAwMDAwLCBhcwogICAgc2VlbiBpbiB0aGUgcmVnaXN0ZXIgZHVtcCkuCiAgICAKIDIuIERldGVybWluZSB3aGVyZSB0aGUgcmVhc29uIGNhbWUgZnJvbS4KICAgIFNpbmNlIHRoaXMgaXMgdXN1YWxseSBhIHByaW1hcnkvc2Vjb25kYXJ5IHJlYWN0aW9uIHRvIGEgZmFpbGVkIG9yCiAgICBtaXNiZWhhdmluZyBXaW5lIGZ1bmN0aW9uLCByZXJ1biBXaW5lIHdpdGggIi1kZWJ1Z21zZyArcmVsYXkiICh3aXRob3V0ICIpCiAgICBhZGRlZCB0byB0aGUgY29tbWFuZGxpbmUuIFRoaXMgd2lsbCBnZXQgcmF0aGVyIG11Y2ggb3V0cHV0LCBidXQgdXN1YWxseQogICAgdGhlIHJlYXNvbiBpcyBsb2NhdGVkIGluIHRoZSBsYXN0IGNhbGwocykuICBUaG9zZSBsaW5lcyB1c3VhbGx5IGxvb2sgbGlrZQogICAgdGhpczoKCnxDYWxsIEtFUk5FTC45MDogTFNUUkxFTigwMjI3OjA2OTIgInRleHQiKSByZXQ9MDFlNzoyY2U3IGRzPTAyMjcKICAgICAgXl5eXl5eXl5eICBeICAgICAgIF5eXl5eXl5eXiBeXl5eXl4gICAgICBeXl5eXl5eXl4gICAgXl5eXgogICAgICB8ICAgICAgICAgIHwgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICB8RGF0YXNlZ21lbnQKICAgICAgfCAgICAgICAgICB8ICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICB8UmV0dXJuIGFkZHJlc3MKICAgICAgfCAgICAgICAgICB8ICAgICAgIHwgICAgICAgICB8dGV4dHVhbCBwYXJhbWV0ZXIKICAgICAgfCAgICAgICAgICB8ICAgICAgIHwKICAgICAgfCAgICAgICAgICB8ICAgICAgIHxBcmd1bWVudChzKS4gVGhpcyBvbmUgaXMgYSB3aW4xNiBzZWdtZW50ZWQgcG9pbnRlci4KICAgICAgfCAgICAgICAgICB8RnVuY3Rpb24gY2FsbGVkLgogICAgICB8VGhlIG1vZHVsZSwgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbi4gSW4gdGhpcyBjYXNlIGl0IGlzIEtFUk5FTC4KCQkgICAgICAgIAp8UmV0ICBLRVJORUwuOTA6IExTVFJMRU4oKSByZXR2YWw9MHgwMDA0IHJldD0wMWU3OjJjZTcgZHM9MDIyNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eCgkJCQkgIHxSZXR1cm52YWx1ZSBpcyAxNiBiaXQgYW5kIGhhcyB0aGUgdmFsdWUgNC4KCgogMy4gSWYgeW91IGhhdmUgZm91bmQgYSBtaXNiZWhhdmluZyBmdW5jdGlvbiwgdHJ5IHRvIGZpbmQgb3V0IHdoeSBpdAogICAgbWlzYmVoYXZlcy4gRmluZCB0aGUgZnVuY3Rpb24gaW4gdGhlIHNvdXJjZSBjb2RlLiBUcnkgdG8gbWFrZSBzZW5zZSBvZgogICAgdGhlIGFyZ3VtZW50cyBwYXNzZWQuIFVzdWFsbHkgdGhlcmUgaXMgYQogICAgImRwcmludGZfeHl6KHN0ZGRlYiwiRnVuY3Rpb24oLi4uKSIuLi4pOyIgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKICAgIGZ1bmN0aW9uLiBSZXJ1biB3aW5lIHdpdGggIi1kZWJ1Z21zZyAreHl6LCtyZWxheSIgYWRkZWQgdG8gdGhlCiAgICBjb21tYW5kbGluZS4KCiA0LiBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkZWJ1ZyB1c2luZyB0aGUgaW50ZXJuYWwgZGVidWdnZXIgY2FuIGJlIAogICAgZm91bmQgaW4gZGVidWdnZXIvUkVBRE1FLgoKIDUuIElmIHRob3NlIGluZm9ybWF0aW9uIGlzbid0IGNsZWFyIGVub3VnaCBvciBpZiB5b3Ugd2FudCB0byBrbm93IG1vcmUgYWJvdXQKICAgIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZiwgdHJ5IHJ1bm5pbmcgd2luZSB3aXRoICItZGVidWdtc2cKICAgICthbGwiLCB3aGljaCBkdW1wcyBBTEwgaW5jbHVkZWQgZGVidWcgaW5mb3JtYXRpb24gaW4gd2luZS4KCiA2LiBJZiB0aGF0IGlzbid0IGVub3VnaCBhZGQgbW9yZSBkZWJ1ZyBvdXRwdXQgZm9yIHlvdXJzZWxmIGludG8gdGhlCiAgICBmdW5jdGlvbnMgeW91IGZpbmQgcmVsZXZhbnQuCiAgICBZb3UgbWlnaHQgYWxzbyB0cnkgdG8gcnVuIHRoZSBwcm9ncmFtIGluIGdkYiBpbnN0ZWFkIG9mIHVzaW5nIHRoZQogICAgV0lORS1kZWJ1Z2dlci4gSWYgeW91IGRvbid0IHVzZSB0aGUgIi1kZXNrdG9wIiBvciAiLW1hbmFnZWQiIG9wdGlvbiwKICAgIHN0YXJ0IHRoZSBXSU5FIHByb2Nlc3Mgd2l0aCAiLXN5bmMiLCBvciBjaGFuY2VzIGFyZSBnb29kIHRvIGdldCBYIGludG8KICAgIGFuIHVudXNhYmxlIHN0YXRlLgogIAogNy4gWW91IGNhbiBhbHNvIHNldCBhIGJyZWFrcG9pbnQgZm9yIHRoYXQgZnVuY3Rpb24uIFN0YXJ0IHdpbmUgd2l0aCB0aGUKICAgICItZGVidWciIG9wdGlvbiBhZGRlZCB0byB0aGUgY29tbWFuZGxpbmUuIEFmdGVyIGxvYWRpbmcgdGhlIGV4ZWN1dGFibGUKICAgIHdpbmUgd2lsbCBlbnRlciB0aGUgaW50ZXJuYWwgZGVidWdnZXIuIFVzZSAiYnJlYWsgS0VSTkVMX0xTVFJMRU4iCiAgICAocmVwbGFjZSBieSBmdW5jdGlvbiB5b3Ugd2FudCB0byBkZWJ1ZywgQ0FTRSBJUyBSRUxFVkFOVC4pIHRvIHNldCBhCiAgICBicmVha3BvaW50LiAgVGhlbiB1c2UgImNvbnRpbnVlIiB0byBzdGFydCBub3JtYWwgcHJvZ3JhbS1leGVjdXRpb24uIFdpbmUKICAgIHdpbGwgc3RvcCBpZiBpdCByZWFjaGVzIHRoZSBicmVha3BvaW50LiBJZiB0aGUgcHJvZ3JhbSBpc24ndCB5ZXQgYXQgdGhlCiAgICBjcmFzaGluZyBjYWxsIG9mIHRoYXQgZnVuY3Rpb24sIHVzZSAiY29udGludWUiIGFnYWluIHVudGlsIHlvdSBhcmUgYWJvdXQKICAgIHRvIGVudGVyIHRoYXQgZnVuY3Rpb24uIFlvdSBtYXkgbm93IHByb2NlZWQgd2l0aCBzaW5nbGUtc3RlcHBpbmcgdGhlCiAgICBmdW5jdGlvbiB1bnRpbCB5b3UgcmVhY2ggdGhlIHBvaW50IG9mIGNyYXNoLiBVc2UgdGhlIG90aGVyIGRlYnVnZ2VyCiAgICBjb21tYW5kcyB0byBwcmludCByZWdpc3RlcnMgYW5kIHRoZSBsaWtlLgoKClByb2dyYW0gaGFuZ3MsIG5vdGhpbmcgaGFwcGVucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgU3dpdGNoIHRvIFVOSVggc2hlbGwsIGdldCB0aGUgcHJvY2Vzcy1JRCB1c2luZyAicHMgLWF8Z3JlcCB3aW5lIiwgYW5kIGRvIGEKICAia2lsbCAtSFVQIDxwaWQ+IiAod2l0aG91dCAiIGFuZCA8PikuIFdpbmUgd2lsbCB0aGVuIGVudGVyIGl0cyBpbnRlcm5hbAogIGRlYnVnZ2VyIGFuZCB5b3UgY2FuIHByb2NlZWQgYXMgZXhwbGFpbmVkIGFib3ZlLiBBbHNvLCB5b3UgY2FuIHVzZSAtZGVidWcKICBzd2l0Y2ggYW5kIHRoZW4geW91IGNhbiBnZXQgaW50byBpbnRlcm5hbCBkZWJ1Z2dlciBieSBwcmVzc2luZyBDdHJsLUMgaW4gCiAgdGhlIHRlcm1pbmFsIHdoZXJlIHlvdSBydW4gV2luZS4KClByb2dyYW0gcmVwb3J0cyBhbiBlcnJvciB3aXRoIGEgTWVzc2FnZWJveAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgU29tZXRpbWVzIHByb2dyYW1zIGFyZSByZXBvcnRpbmcgZmFpbHVyZSB1c2luZyBhIG1vcmUgb3IgbGVzcyBub25kZXNjcmlwdAogIG1lc3NhZ2Vib3hlcy4gV2UgY2FuIGRlYnVnIHRoaXMgdXNpbmcgdGhlIHNhbWUgbWV0aG9kIGFzIENyYXNoZXMsIGJ1dCB0aGVyZQogIGlzIG9uZSBwcm9ibGVtLi4uIEZvciBzZXR0aW5nIHVwIGEgbWVzc2FnZSBib3ggdGhlIHByb2dyYW0gYWxzbyBjYWxscyBXaW5lCiAgcHJvZHVjaW5nIGh1Z2UgY2h1bmtzIG9mIGRlYnVnIGNvZGUuCgogIFNpbmNlIHRoZSBmYWlsdXJlIGhhcHBlbnMgdXN1YWxseSBkaXJlY3RseSBiZWZvcmUgc2V0dGluZyB1cCB0aGUgTWVzc2FnZWJveAogIHlvdSBjYW4gc3RhcnQgd2luZSB3aXRoICItZGVidWciIGFkZGVkIHRvIHRoZSBjb21tYW5kbGluZSwgc2V0IGEgYnJlYWtwb2ludAogIGF0ICJNZXNzYWdlQm94MzJBIiAoY2FsbGVkIGJ5IHdpbjE2IGFuZCB3aW4zMiBwcm9ncmFtcykgYW5kIHByb2NlZWQgd2l0aAogICJjb250aW51ZSIuIFdpdGggIi1kZWJ1Z21zZyArYWxsIiBXaW5lIHdpbGwgbm93IHN0b3AgZGlyZWN0bHkgZGlyZWN0bHkKICBiZWZvcmUgc2V0dGluZyB1cCB0aGUgTWVzc2FnZWJveC4gIFByb2NlZWQgYXMgZXhwbGFpbmVkIGFib3ZlLgoKICBZb3UgY2FuIGFsc28gcnVuIHdpbmUgdXNpbmcgIndpbmUgLWRlYnVnbXNnICtyZWxheSBwcm9ncmFtLmV4ZSAyPiYxfGxlc3MgLWkiCiAgYW5kIGluIGxlc3Mgc2VhcmNoIGZvciBtZXNzYWdlYm94LgoKRGlzYXNzZW1ibGluZyBwcm9ncmFtczoKPT09PT09PT09PT09PT09PT09PT09PT0KICBZb3UgbWF5IGFsc28gdHJ5IHRvIGRpc2Fzc2VtYmxlIHRoZSBvZmZlbmRpbmcgcHJvZ3JhbSB0byBjaGVjayBmb3IgCiAgdW5kb2N1bWVudGVkIGZlYXR1cmVzIGFuZC9vciB1c2Ugb2YgdGhlbS4KCiAgVGhlIGJlc3QsIGZyZWVseSBhdmFpbGFibGUsIGRpc2Fzc2VtYmxlciBmb3IgV2luMTYgcHJvZ3JhbXMgaXMKICBXaW5kb3dzIENvZGViYWNrLCBhcmNoaXZlbmFtZSB3Y2J4eHguemlwLCB3aGljaCB1c3VhbGx5IGNhbiBiZSBmb3VuZAogIGluIHRoZSBDaWNhLU1pcnJvciBzdWJkaXJlY3Rvcnkgb24gdGhlIFdJTkUgZnRwc2l0ZXMuIChTZWUgQU5OT1VOQ0UpLgogIERpc2Fzc2VtYmxpbmcgd2luMzIgcHJvZ3JhbXMgaXMgcG9zc2libGUgdXNpbmcgdGhlIFdpbmRvd3MgRGlzYXNzZW1ibGVyIDMyLAogIGFyY2hpdmVuYW1lIHNvbWV0aGluZyBsaWtlIHczMmRhc20uemlwIG9uIGZ0cC53aW5zaXRlLmNvbSBhbmQgbWlycm9ycy4KICBUaGUgc2hhcmV3YXJlIHZlcnNpb24gZG9lcyBub3QgYWxsb3cgc2F2aW5nIG9mIGRpc2Fzc2VtYmx5IGxpc3RpbmdzLgoKICBbSXQgYWxzbyBoYXMgYSBidWcsIGl0IGRpc2Fzc2VtYmxlcyB0aGUgZGxsIGFuZCBpbW1lZGlhdGVseSBhZnRlciB0aGF0CiAgIGNyYXNoZXMsIGxlYXZpbmcgYSB2ZXJ5IGxhcmdlIGZpbGUgY2FsZWQgJ3dpbnN5cycgaW4gdGhlIGRpcmVjdG9yeSBvZiB0aGUKICAgZGlzYXNzZW1ibGVkIGZpbGUuIFRoaXMgZmlsZSBjb250YWlucyBub3RoaW5nIG9mIHZhbHVlIChqdXN0IHRoZSBkaXNhc3NlbWJseSkKICAgYW5kIGNhbiBiZSBzYWZlbHkgZGVsZXRlZC5dCgogIFVuZGVyc3RhbmRpbmcgZGlzYXNzZW1ibGVkIGNvZGUgaXMganVzdCBhIHF1ZXN0aW9uIG9mIGV4ZXJjaXNlLgoKICBNb3N0IGNvZGUgb3V0IHRoZXJlIHVzZXMgc3RhbmRhcmQgQyBmdW5jdGlvbiBlbnRyaWVzIChmb3IgaXQgaXMgdXN1YWxseSAKICB3cml0dGVuIGluIEMpLiBXaW4xNiBmdW5jdGlvbiBlbnRyaWVzIHVzdWFsbHkgbG9vayBsaWtlIHRoYXQ6CnwgIAlwdXNoIGJwCnwJbW92IGJwLCBzcAp8CS4uLiBmdW5jdGlvbiBjb2RlIC4uCnwJcmV0ZiBYWFhYIAk8LS0tLS0tLS0tIFhYWFggaXMgbnVtYmVyIG9mIGJ5dGVzIG9mIGFyZ3VtZW50cwoKICBUaGlzIGlzIGEgRkFSIGZ1bmN0aW9uIHdpdGggbm8gbG9jYWwgc3RvcmFnZS4gVGhlIGFyZ3VtZW50cyB1c3VhbGx5IHN0YXJ0CiAgYXQgW2JwKzZdIHdpdGggaW5jcmVhc2luZyBvZmZzZXRzLiBOb3RlLCB0aGF0IFticCs2XSBiZWxvbmdzIHRvIHRoZSBSSUdIVE1PU1QgCiAgYXJndW1lbnQsIGZvciBleHBvcnRlZCB3aW4xNiBmdW5jdGlvbnMgdXNlIHRoZSBQQVNDQUwgY2FsbGluZyBjb252ZW50aW9uLgogIFNvLCBpZiB3ZSB1c2Ugc3RyY21wKGEsYikgd2l0aCBhIGFuZCBiIGJvdGggMzIgYml0IHZhcmlhYmxlcyBiIHdvdWxkIGJlIGF0CiAgW2JwKzZdIGFuZCBhIGF0IFticCsxMF0uCiAgTW9zdCBmdW5jdGlvbnMgbWFrZSBhbHNvIHVzZSBvZiBsb2NhbCBzdG9yYWdlIGluIHRoZSBzdGFja2ZyYW1lOgp8CWVudGVyIDAwODYsIDAwCnwJLi4uIGZ1bmN0aW9uIGNvZGUgLi4uCnwJbGVhdmUKfAlyZXRmIFhYWFgKICBUaGlzIGRvZXMgbW9zdGx5IHRoZSBzYW1lIGFzIGFib3ZlLCBidXQgYWxzbyBhZGRzIDB4ODYgYnl0ZXMgb2YKICBzdGFja3N0b3JhZ2UsIHdoaWNoIGlzIGFjY2Vzc2VkIHVzaW5nIFticC14eF0uCiAgQmVmb3JlIGNhbGxpbmcgYSBmdW5jdGlvbiwgYXJndW1lbnRzIGFyZSBwdXNoZWQgb24gdGhlIHN0YWNrIHVzaW5nIHNvbWV0aGluZwogIGxpa2UgdGhpczoKfAlwdXNoIHdvcmQgcHRyIFticC0wMl0JPC0gd2lsbCBiZSBhdCBbYnArOF0KfAlwdXNoIGRpCQkJPC0gd2lsbCBiZSBhdCBbYnArNl0KfAljYWxsIEtFUk5FTC5MU1RSTEVOCiAgSGVyZSBmaXJzdCB0aGUgc2VsZWN0b3IgYW5kIHRoZW4gdGhlIG9mZnNldCB0byB0aGUgcGFzc2VkIHN0cmluZyBhcmUgcHVzaGVkLgoKU2FtcGxlIGRlYnVnZ2luZyBzZXNzaW9uOgo9PT09PT09PT09PT09PT09PT09PT09PT09CgogIExldCdzIGRlYnVnIHRoZSBpbmZhbW91cyBXb3JkIFNIQVJFLkVYRSBtZXNzYWdlYm94OiAKCnxtYXJjdXNAamV0ICQgd2luZSB3aW53b3JkLmV4ZQp8ICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCAgICAgICAgICAgIHwgISAgWW91IG11c3QgbGVhdmUgV2luZG93cyBhbmQgbG9hZCBTSEFSRS5FWEV8CnwgICAgICAgICAgICB8ICAgIGJlZm9yZSBzdGFydGluZyBXb3JkLiAgICAgICAgICAgICAgICAgICAgfAp8ICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgp8bWFyY3VzQGpldCAkIHdpbmUgd2lud29yZC5leGUgLWRlYnVnbXNnICtyZWxheSAtZGVidWcKfENhbGxUbzMyKHduZHByb2M9MHg0MDA2NWJjMCxod25kPTAwMDAwMWFjLG1zZz0wMDAwMDA4MSx3cD0wMDAwMDAwMCxscD0wMDAwMDAwMCkKfFdpbjE2IHRhc2sgJ3dpbndvcmQnOiBCcmVha3BvaW50IDEgYXQgMHgwMWQ3OjB4MDAxYQp8Q2FsbFRvMTYoZnVuYz0wMTI3OjAwNzAsZHM9MDkyNykKfENhbGwgV1BST0NTLjI0OiBUQVNLX1JFU0NIRURVTEUoKSByZXQ9MDBiNzoxNDU2IGRzPTA5MjcKfFJldCAgV1BST0NTLjI0OiBUQVNLX1JFU0NIRURVTEUoKSByZXR2YWw9MHg4NjcyIHJldD0wMGI3OjE0NTYgZHM9MDkyNwp8Q2FsbFRvMTYoZnVuYz0wMWQ3OjAwMWEsZHM9MDkyNykKfCAgICAgQVg9MDAwMCBCWD0zY2I0IENYPTFmNDAgRFg9MDAwMCBTST0wMDAwIERJPTA5MjcgQlA9MDAwMCBFUz0xMWY3CnxMb2FkaW5nIHN5bWJvbHM6IC9ob21lL21hcmN1cy93aW5lL3dpbmUuLi4KfFN0b3BwZWQgb24gYnJlYWtwb2ludCAxIGF0IDB4MDFkNzoweDAwMWEKfEluIDE2IGJpdCBtb2RlLgp8V2luZS1kYmc+YnJlYWsgTWVzc2FnZUJveDMyQSAgICAgICAgICAgICAgICAgICAgICAgICAgPC0tLS0gU2V0IEJyZWFrcG9pbnQKfEJyZWFrcG9pbnQgMiBhdCAweDQwMTg5MTAwIChNZXNzYWdlQm94MzJBIFttc2dib3guYzoxOTBdKQp8V2luZS1kYmc+YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC0tLS0gQ29udGludWUKfENhbGwgS0VSTkVMLjkxOiBJTklUVEFTSygpIHJldD0wMTU3OjAwMjIgZHM9MDhhNwp8ICAgICBBWD0wMDAwIEJYPTNjYjQgQ1g9MWY0MCBEWD0wMDAwIFNJPTAwMDAgREk9MDhhNyBFUz0xMWQ3IEVGTD0wMDAwMDI4Ngp8Q2FsbFRvMTYoZnVuYz0wOTBmOjA4NWMsZHM9MGRjZiwweDAwMDAsMHgwMDAwLDB4MDAwMCwweDAwMDAsMHgwODAwLDB4MDAwMCwweDAwMDAsMHgwZGNmKQp8Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC0tLS0tIE11Y2ggZGVidWdvdXRwdXQKfENhbGwgS0VSTkVMLjEzNjogR0VURFJJVkVUWVBFKDB4MDAwMCkgcmV0PTA2MGY6MDk3YiBkcz0wOTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4gRHJpdmUgMCAoQTopCnxSZXQgIEtFUk5FTC4xMzY6IEdFVERSSVZFVFlQRSgpIHJldHZhbD0weDAwMDIgcmV0PTA2MGY6MDk3YiBkcz0wOTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4gIERSSVZFX1JFTU9WRUFCTEUKCQkJCQkJKEl0IGlzIGEgZmxvcHB5IGRpc2tkcml2ZS4pCgp8Q2FsbCBLRVJORUwuMTM2OiBHRVREUklWRVRZUEUoMHgwMDAxKSByZXQ9MDYwZjowOTdiIGRzPTA5MjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXiBEcml2ZSAxIChCOikKfFJldCAgS0VSTkVMLjEzNjogR0VURFJJVkVUWVBFKCkgcmV0dmFsPTB4MDAwMCByZXQ9MDYwZjowOTdiIGRzPTA5MjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXiAgRFJJVkVfQ0FOTk9UREVURVJNSU5FCgkJCQkJCShJIGRvbid0IGhhdmUgZHJpdmUgQjogYXNzaWduZWQpCgp8Q2FsbCBLRVJORUwuMTM2OiBHRVREUklWRVRZUEUoMHgwMDAyKSByZXQ9MDYwZjowOTdiIGRzPTA5MjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl4gRHJpdmUgMiAoQzopCnxSZXQgIEtFUk5FTC4xMzY6IEdFVERSSVZFVFlQRSgpIHJldHZhbD0weDAwMDMgcmV0PTA2MGY6MDk3YiBkcz0wOTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4gRFJJVkVfRklYRUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3BlY2lmaWVkIGFzIGEgaGFyZGRpc2spCgp8Q2FsbCBLRVJORUwuOTc6IEdFVFRFTVBGSUxFTkFNRSgweDAwYzMsMHgwOTI3ODM2NCJkb2MiLDB4MDAwMCwwOTI3OjgyNDgpIHJldD0wNjBmOjA5YjEgZHM9MDkyNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4gICAgICAgICAgIF5eXl5eICAgICAgICBeXl5eXl5eXl4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfGJ1ZmZlciBmb3IgZm5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8dGVtcG9yYXJ5IG5hbWUgfmRvY1hYWFgudG1wCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxGb3JjZSB1c2Ugb2YgRHJpdmUgQzouCgp8V2FybmluZzogR2V0VGVtcEZpbGVOYW1lIHJldHVybnMgJ0M6fmRvYzkyODEudG1wJywgd2hpY2ggZG9lc24ndCBzZWVtIHRvIGJlIHdyaXRlYWJsZS4KfFBsZWFzZSBjaGVjayB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZSBpZiB0aGlzIGdlbmVyYXRlcyBhIGZhaWx1cmUuCgpXaG9vcHMsIGl0IGV2ZW4gZGV0ZWN0cyB0aGF0IHNvbWV0aGluZyBpcyB3cm9uZyEKCnxSZXQgIEtFUk5FTC45NzogR0VUVEVNUEZJTEVOQU1FKCkgcmV0dmFsPTB4OTI4MSByZXQ9MDYwZjowOWIxIGRzPTA5MjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eIFRlbXBvcmFyeSBzdG9yYWdlIElECgp8Q2FsbCBLRVJORUwuNzQ6IE9QRU5GSUxFKDB4MDkyNzgyNDgiQzp+ZG9jOTI4MS50bXAiLDA5Mjc6ODJkYSwweDEwMTIpIHJldD0wNjBmOjA5ZDggZHM9MDkyNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eIF5eXl5eXl5eXiBeXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxmaWxlbmFtZSAgICAgICAgfE9GU1RSVUNUIHxvcGVuIG1vZGU6CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPRl9DUkVBVEV8T0ZfU0hBUkVfRVhDTFVTSVZFfE9GX1JFQURXUklURQoKVGhpcyBmYWlscywgc2luY2UgbXkgQzogZHJpdmUgaXMgaW4gdGhpcyBjYXNlIG1vdW50ZWQgcmVhZG9ubHkuCgp8UmV0ICBLRVJORUwuNzQ6IE9QRU5GSUxFKCkgcmV0dmFsPTB4ZmZmZiByZXQ9MDYwZjowOWQ4IGRzPTA5MjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4gSEZJTEVfRVJST1IxNiwgeWVzLCBpdCBmYWlsZWQuCgp8Q2FsbCBVU0VSLjE6IE1FU1NBR0VCT1goMHgwMDAwLDB4MDkyNzgzNzYiU2llIG38c3NlbiBXaW5kb3dzIHZlcmxhc3NlbiB1bmQgU0hBUkUuRVhFIGxhZGVuIGJldm9yIFNpZSBXb3JkIHN0YXJ0ZW4uIiwweDAwMDAwMDAwLDB4MTAzMCkgcmV0PTA2MGY6MDg0ZiBkcz0wOTI3CiAgICAgICAgICAgCkFuZCBNZXNzYWdlQm94J2VkLgoKfFN0b3BwZWQgb24gYnJlYWtwb2ludCAyIGF0IDB4NDAxODkxMDAgKE1lc3NhZ2VCb3gzMkEgW21zZ2JveC5jOjE5MF0pCnwxOTAgICAgIHsJCTwtIHRoZSBzb3VyY2VsaW5lCkluIDMyIGJpdCBtb2RlLgpXaW5lLWRiZz4KCglUaGUgY29kZSBzZWVtcyB0byBmaW5kIGEgd3JpdGVhYmxlIGhhcmRkaXNrIGFuZCB0cmllcyB0byBjcmVhdGUgYSBmaWxlCgl0aGVyZS4gVG8gd29yayBhcm91bmQgdGhpcyBidWcsIHlvdSBjYW4gZGVmaW5lIEM6IGFzIGEgbmV0d29ya2RyaXZlLAoJd2hpY2ggaXMgaWdub3JlZCBieSB0aGUgY29kZSBhYm92ZS4KCldyaXR0ZW4gYnkgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+LAphZGRpdGlvbnMgd2VsY29tZS4K