PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIHNpbmNlIFUtQm9vdCAxLjAuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBGaXggSWNlQ3ViZSBDTEtJTiBjb25maWd1cmF0aW9uIChpdCdzIDMzLjAwMDAwME1IeikKCiogQWRkIG5ldyBjb25maWd1cmF0aW9uIGZvciBJY2VDdWJlIGJvYXJkIHdpdGggRERSIG1lbW9yeQoKKiBVcGRhdGUgVFJBQiBtZW1vcnkgY29uZmlndXJhdGlvbnMKCiogQWRkIEpGRlMyIHN1cHBvcnQgZm9yIElOQ0EtSVAgYm9hcmQKCiogUGF0Y2ggYnkgQmlsbCBIYXJnZW4sIDA5IERlYyAyMDAzOgogIC0gQlVCSU5HQTQwNUVQOiBjaGFuZ2VkIGZsYXNoIGRyaXZlciB0byBwcm90ZWN0IHRvcCBzZWN0b3IgY29udGFpbmluZwogICAgZmlyc3QgaW5zdHJ1Y3Rpb24uCiAgLSBCVUJJTkdBNDA1RVA6IGNvbmZpZ3VyZWQgImVlcHJvbSIgY29tbWFuZCB0byBhY2Nlc3MgYm9vdCBjb25maWcgRUVQUk9NLgogIC0gQlVCSU5HQTQwNUVQOiBmaXhlZCBQTEwgaW5pdCAoaW5pdCBjaGlwIHNlbGVjdHMgYmVmb3JlIEZQR0EvTlZSQU0gYWNjZXNzKS4KICAtIDQwNUVQOiBmaXhlZCBTUEQtYmFzZWQgU0RSQU0gaW5pdCAob25seSB1c2UgYmFua3MgMCBhbmQgMSkuCiAgLSA0MDVFUDogYWRkZWQvZml4ZWQgc3VwcG9ydCBmb3IgInJlZ2luZm8iIGNvbW1hbmQuCiAgLSA0eHg6IHJlbW92ZWQgc3B1cmlvdXMgTUlJIGVycm9yIG1lc3NhZ2VzIG9uICJtaWkgaW5mbyIgY29tbWFuZC4KCiogUGF0Y2ggYnkgQmVybmhhcmQgS3VobiwgMjggTm92IDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIENvbGRmaXJlIENQVQogIGFkZCBzdXBwb3J0IGZvciBNb3Rvcm9sYSBNNTI3MkMzIGFuZCBNNTI4MkVWQiBib2FyZHMKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjQgTm92IDIwMDM6CiAgLSBhZGQgYSByZXR1cm4gdmFsdWUgZm9yIHRoZSBmcGdhIGNvbW1hbmQKICAtIGFkZCBpZGVfcHJlaW5pdCgpIGZ1bmN0aW9uIGNhbGxlZCBpbiBpZGVfaW5pdCBpZiBDT05GSUdfSURFX1BSRUlOSVQKICAgIGlzIGRlZmluZWQuIElmIGlkZV9wcmVpbml0IGZhaWxzLCBpZGVfaW5pdCBpcyBhYm9ydGVkLgogIC0gZml4IGFuIGVuZGlhbmVzcyBwcm9ibGVtIGluIGZhdC5oCgoqIFBhdGNoIGJ5IFdvbHRlciBLYW1waHVpcywgMDUgRGVjIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFNOTUMncyBRUzg1MC9RUzgyMy9RUzg2MFQgYm9hcmRzCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDMgRGVjIDIwMDM6CiAgInJldml2ZSIgVS1Cb290IHN1cHBvcnQgZm9yIG9sZCBNb3Rvcm9sYSBNUEM4NjBBRFMgYm9hcmQKCiogUGF0Y2ggYnkgQ2FtKGlsbz8pLCAwMyBEZWMgMjAwMzoKICBtYWtlIGV4YW1wbGVzIGJ1aWxkIGV2ZW4gd2l0aCBicm9rZW4gTW9udGF2aXN0YSBvYmpjb3B5CgoqIFBhdGNoIGJ5IFBhdmVsIEJhcnR1c2VrLCAyNyBOb3YgMjAwMzoKICBmaXggY29udmVyc2lvbiBwcm9ibGVtIHdpdGggImJvb3RyZXRyeSIgZXZpcm9ubWVudCB2YXJpYWJsZQoKKiBQYXRjaCBieSBBbmRyZSBTY2h3YXJ6LCAyNCBOb3YgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgbXZibHVlIChtdkJsdWVMWU5YIGFuZCBtdkJsdWVCT1gpIGJvYXJkcwoKKiBQYXRjaCBieSBQYXZlbCBCYXJ0dXNlaywgMjEgTm92IDIwMDM6CiAgc2V0IFpNSUkgYnJpZGdlIHNwZWVkIG9uIDQ0MAoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAxNyBOb3YgMjAwMzoKICBGaXggbWlzbWF0Y2hlZCAjaWZkZWYgLyAjZW5kaWYgaW4gaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2hhcmR3YXJlLmgKCiogUGF0Y2hlcyBieSBEYXZpZCBN/GxsZXIsIDE0IE5vdiAyMDAzOgogIC0gYm9hcmQvbXBsL2NvbW1vbi9jb21tb25fdXRpbC5jCiAgICAqIGltcGxlbWVudCBzdXBwb3J0IGZvciBCWklQMiBjb21wcmVzc2VkIGltYWdlcwogICAgKiB2YXJpb3VzIGNsZWFudXBzIChwcmludGYgLT4gcHV0cywgLi4uKQogIC0gYm9hcmQvbXBsL2NvbW1vbi9mbGFzaC5jCiAgICAqIHJlcG9ydCBjb3JyZWN0IGVycm9ycyB0byB1cHBlciBsYXllcnMKICAgICogY2hlY2sgdGhlIGVyYXNlIGZhaWwgYW5kIFZQUCBsb3cgYml0cyBpbiBzdGF0dXMgcmVnCiAgLSBib2FyZC9tcGwvdmNtYTkvY21kX3ZjbWE5LmMKICAtIGJvYXJkL21wbC92Y21hOS9mbGFzaC5jCiAgICAqIHZhcmlvdXMgY2xlYW51cHMgKHByaW50ZiAtPiBwdXRzLCAuLi4pCiAgLSBjb21tb24vY21kX3VzYi5jCiAgICAqIGZpeCB0eXBvIGluIGNvbW1lbnQKICAtIGNwdS9hcm05MjB0L3VzYl9vaGNpLmMKICAgICogc3VwcG9ydCBmb3IgUzNDMjQxMCBpcyBtaXNzaW5nIGluICNpZiBsaW5lCiAgLSBkcml2ZXJzL2NzODkwMC5jCiAgICAqIHJlaW5pdCBzb21lIHJlZ2lzdGVycyBpbiBjYXNlIG9mIGVycm9yIChjYWJsZSBtaXNzaW5nLCAuLi4pCiAgLSBmcy9mYXQvZmF0LmMKICAgICogc3VwcG9ydCBmb3IgVVNCL01NQyBkZXZpY2VzIGlzIG1pc3NpbmcgaW4gI2lmIGxpbmUKICAtIGluY2x1ZGUvY29uZmlncy9NSVA0MDUuaAogIC0gaW5jbHVkZS9jb25maWdzL1BJUDQwNS5oCiAgICAqIGVuYWJsZSBCWklQMiBzdXBwb3J0CiAgICAqIGVubGFyZ2UgbWFsbG9jIHNwYWNlIHRvIDFNaUIgYmVjYXVzZSBvZiBCWklQMiBzdXBwb3J0CiAgLSBpbmNsdWRlL2NvbmZpZ3MvVkNNQTkuaAogICAgKiBlbmFibGUgQlpJUDIgc3VwcG9ydAogICAgKiBlbmxhcmdlIG1hbGxvYyBzcGFjZSB0byAxTWlCIGJlY2F1c2Ugb2YgQlpJUDIgc3VwcG9ydAogICAgKiBlbmFibGUgVVNCIHN1cHBvcnQKICAtIGxpYl9hcm0vYXJtbGludXguYwogICAgKiBjaGFuZ2UgY2FsbGluZyBjb252ZW50aW9uIG9mIEFSTSBMaW51eCBrZXJuZWwgYXMKICAgICAgZGVzY3JpYmVkIG9uIGh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvYm9vdGluZy5waHAKCiogUGF0Y2ggYnkgVGhvbWFzIExhbmdlLCAxNCBOb3YgMjAwMzoKICBTcGxpdCBkYmF1MXgwMCBpbnRvIGRiYXUxMDAwLCBkYmF1MTEwMCBhbmQgZGJhdTE1MDAgY29uZmlncyB0bwogIHN1cHBvcnQgYWxsIHRoZXNlIEFNRCBib2FyZHMuCgoqIFBhdGNoIGJ5IFRob21hcyBMYW5nZSwgMTQgTm92IDIwMDM6CiAgV29ya2Fyb3VuZCBmb3IgbWlwcyBhdTF4MDAgcGh5c2ljYWwgbWVtb3J5IGFjY2Vzc2VzICh0aGUgYXUxeDAwCiAgdXNlcyBhIDM2IGJpdCBidXMgaW50ZXJuYWxseSBhbmQgY2Fubm90IGFjY2VzcyBwaHlzaWNhbCBtZW1vcnkKICBkaXJlY3RseS4gVXNlIHRoZSB1bmNhY2hlZCBTRFJBTSBhZGRyZXNzIGluc3RlYWQgb2YgdGhlIHBoeXNpY2FsCiAgb25lLikKCiogUGF0Y2ggYnkgWHVlIExpZ29uZyAoSm9lKSwgMTMgTm92IDIwMDM6CiAgYWRkIFJlYWx0ZWsgODAxOSBldGhlcm5ldCBkcml2ZXIKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTMgTm92IDIwMDM6CiAgTVBDODI2eEFEUy9QUTJGQURTICBjbGVhbnVwCgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDEyIE5vdiAyMDAzOgogIFVwZGF0ZSBSRUFETUUgdG8gbWFyayB0aGUgUE9SVElPIGNvbW1hbmRzIG5vbi1zdGFuZGFyZAoKKiBQYXRjaCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5p6HJlLCAxMiBOb3YgMjAwMzoKICB1cGRhdGUgZm9yIGZvciBBdG1lbCBBVDkxUk05MjAwREsgZGV2ZWxvcG1lbnQga2l0OgogIC0gc3VwcG9ydCBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIERhdGFGbGFzaAogIC0gQXRtZWwgRGF0YUZsYXNoIEFUNDVEQjEyODIgc3VwcG9ydAoKKiBQYXRjaCBieSBKZWZmIENhcnIsIDExIE5vdiAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBuZXcgdmVyc2lvbiBvZiA4MjcwIHByb2Nlc3NvcnMKCiogUGF0Y2hlcyBieSBHZW9yZ2UgRy4gRGF2aXMsIDA1IE5vdiAyMDAzOgogIC0gb25seSBwYXNzIHRoZSBBUk0gbGludXggaW5pdHJkIHRhZyB0byB0aGUga2VybmVsIHdoZW4gYW4gaW5pdHJkCiAgICBpcyBhY3R1YWxseSBwcmVzZW50CiAgLSB1cGRhdGUgb21hcDE1MTBpbm4gY29uZmlndXJhdGlvbiBmaWxlCgoqIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAzIE5vdiAyMDAzOgogIC0gbW9yZSBlbmRpYW5lc3MgZml4ZXMgZm9yIExBTjkxQzExMSBkcml2ZXIKICAtIENGR19IWiBjb25maWd1cmF0aW9uIHBhdGNoIGZvciBOSU9TIEN5Y2xvbmUgYm9hcmQKCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAyOCBPY3QgMjAwMzoKICBmaXggUEhZX0lOVF9SRUcgdnMuIFBIWV9NQVNLX1JFRyBidWcgaW4gZHJpdmVycy9zbWM5MTExMS5jCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDIwIE9jdCAyMDAzOgogIC0gbWFrZSAibWlpIGluZm8gPGFkZHI+IiBzaG93IGluZm9yIGZvciBQSFkgYXQgImFkZHIiIG9ubHkKICAtIEVuZGlhbiBmaXggZm9yIG1paXBoeV9pbmZvKCkKCiogUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAxOSBTZXAgMjAwMzoKICBNb3ZlIG1vc3Qgb2YgdGhlIHRpbWVyIGludGVycnVwdCByZWxhdGVkIFBQQyBjb2RlIHRvIHBwY19saWIvaW50ZXJydXB0cy5jCgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDE3IFNlcCAyMDAzOgogIEJyaW5nIEFSTSBtZW1vcnkgbGF5b3V0IGluIHN5bmMgd2l0aCB0aGUgZG9jdW1lbnRhdGlvbjoKICBzdGFjayBhbmQgbWFsbG9jLWhlYXAgYXJlIG5vdyBsb2NhdGVkIF9iZWxvd18gdGhlIFUtQm9vdCBjb2RlCgoqIEFjY2VsZXJhdGUgYm9vdGluZyBvbiBUUkFCIGJvYXJkOiByZWFkIGFuZCBjaGVjayAgYXV0b3VwZGF0ZSAgaW1hZ2UKICBoZWFkZXJzIGZpcnN0IGluc3RlYWQgb2YgYWx3YXlzIHJlYWRpbmcgdGhlIHdob2xlIGltYWdlcy4KCiogRml4IHR5cGUgaW4gTVBDNVhYWCBjb2RlIChwb2ludGVkIG91dCBieSBWaWN0b3IgV3JlbikKCiogRW5hYmxlZCBwYXNzd29yZCBjaGVjayBvbiBSTVUgYm9hcmQKCiogRml4IGNvbmZpZ3VyYXRpb24gcHJvYmxlbSB3aXRoIEljZUN1YmUgaW4gTE9XQk9PVCBjb25maWd1cmF0aW9uOgogIGVudnJpb25tZW50IGdvdCBlbWJlZGRlZCwgY29ycnVwdGluZyB0aGUgaW1hZ2UgbGF5b3V0LgoKKiBGaXggTkVDIGRpc3BsYXkgbmFtZXMgKGl0J3MgNjQ0MCBbZm9yIDY0MHg0ODBdLCBub3QgNjY0MCkuCgoqIEFkZGVkIEJNUzIwMDMgYm9hcmQKICBhZGQgc3VwcG9ydCBmb3IgTkVDIE5MNjQ0OEJDMzMtNTQuIDEwLjQiLCA2NDB4NDgwIFRGVCBkaXNwbGF5CgoqIEZpeCBmbGFzaCBkcml2ZXIgZm9yIFRSQUIgYm9hcmQgKG11c3QgdXNlIFVubG9jayBCeXBhc3MgUmVzZXQKICBjb21tYW5kIHRvIGV4aXQgVW5sb2NrIEJ5cGFzcyBNb2RlKTsgYWRqdXN0IHRpbWluZ3MgZm9yIGZsYXNoLCBTUkFNCiAgYW5kIENQTEQKCiogVXNlICItZlBJQyIgaW5zdGVhZCBvZiAiLW1yZWxvY2F0YWJsZSIgdG8gcHJldmVudCBwcm9ibGVtcyB3aXRoCiAgcmVjZW50IHRvb2xzCgoqIEFkZCBjaGVja3N1bSB2ZXJpZmljYXRpb24gdG8gJ2ltbHMnIGNvbW1hbmQKCiogQWRkIGJkX2luZm8gZmllbGRzIG5lZWRlZCBmb3IgNHh4IExpbnV4IEkyQyBkcml2ZXIKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgNCBOb3YuIDIwMDM6CiAgRml4IGVycm9yIGluIGNtZF92ZmQuYyAoVFJBQiBib2FyZDogInZmZCAvMSIgc2hvd3Mgbm93IG9ubHkgb25lIEJpdG1hcCkKCiogUHJpbnQgdXNlZCBuZXR3b3JrIGludGVyZmFjZSB3aGVuIENPTkZJR19ORVRfTVVMVEkgaXMgc2V0CgoqIFBhdGNoIGJ5IEJlcm5oYXJkIEt1aG4sIDI4IE9jdCAyMDAzOgogIEFkZCBsb3cgYm9vdCBzdXBwb3J0IGZvciBNUEM1MjAwCgoqIEZpeCBwcm9ibGVtIHdpdGggZHVhbCBQQ01DSUEgc3VwcG9ydCAoTlNDVSkKCiogRml4IE1QQzUyMDAgSTJDIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjAuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBGaXggcGFyYW1ldGVyIHBhc3NpbmcgdG8gc3RhbmRhbG9uZSBpbWFnZXMgd2l0aCBib290bSBjb21tYW5kCgoqIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAzMCBPY3QgMjAwMzoKICBGaXggYnVpbGQgZXJyb3JzIGZvciBpeGRwNDI1IGJvYXJkCgoqIFBhdGNoIGJ5IERhdmlkIE0uIEhvcm4sIDI5IE9jdCAyMDAzOgogIEZpeGVzIHRvIGJ1aWxkIHVuZGVyIENZR1dJTgoKKiBHZXQgSWNlQ3ViZSBNR1Q1MTAwIHdvcmtpbmcgKGFnYWluKQoKKiBGaXggcHJvYmxlbXMgaW4gbWVtb3J5IHRlc3Qgb24gc29tZSBib2FyZHMgKHdoaWNoIHdhcyBub3QKICBub24tZGVzdHJ1Y3RpdmUgYXMgaW50ZW5kZWQpCgoqIFBhdGNoIGJ5IEdhcnkgSmVubmVqb2huLCAyOCBPY3QgMjAwMzoKICBDaGFuZ2UgZnMvZmF0L2ZhdC5jIHRvIHB1dCBJL08gYnVmZmVycyBpbiBCU1MgaW5zdGVhZCBvbiB0aGUgc3RhY2sKICB0byBwcmV2ZW50IHN0YWNrIG92ZXJmbG93IG9uIEFSTSBzeXN0ZW1zCgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMjggT2N0IDIwMDM6CiAgZml4IGluaXQgc2VxdWVuY2UgZXJyb3IgZm9yIE5JT1MgcG9ydAoKKiBBbGxvdyBsb3dlcmNhc2Ugc3BlbGxpbmcgZm9yIEljZUN1YmVfNTIwMDsgc3VwcG9ydCBNUEM1MjAwTElURSBuYW1lCgoqIEFkZCBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRSB0byBUUkFCIGNvbmZpZ3VyYXRpb24KCiogUGF0Y2ggYnkgWGlhbyBYaWFuZ2h1YSwgMjMgT2N0IDIwMDM6CiAgc21hbGwgcGF0Y2ggZm9yIG1wYzg1eHgKCiogRml4IHNtYWxsIHByb2JsZW0gaW4gTVBDNTIwMCBJMkMgZHJpdmVyCgoqIEZpeCBGQ0MzIHN1cHBvcnQgb24gQVRDIGJvYXJkCgoqIENvcnJlY3QgaGVhZGVyIHByaW50aW5nIGZvciBtdWx0aS1pbWFnZSBmaWxlcyBpbiBkb19ib290bSgpCgoqIE1ha2UgQ09ORklHX1NJTEVOVF9DT05TT0xFIHdvcmsgd2l0aCBDT05GSUdfQVVUT0JPT1RfS0VZRUQKCiogRml4IFBDSSBwcm9ibGVtcyBvbiBQUENoYW1lbGVvbiBib2FyZAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxOCBPY3QgMjAwMzoKICBGaXggQVQ5MVJNOTIwMCBldGhlcm5ldCBkcml2ZXIKCiogUGF0Y2ggYnkgTnllIExpdSwgMTcgT2N0IDIwMDM6CiAgRml4IHR5cG8gaW4gaW5jbHVkZS9tcGM4eHguaAoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxNiBPY3QgMDM6CiAgRml4ZXMgZm9yIGNwdS9hcm05MjUvaW50ZXJydXB0LmMKICAtIEluaXRpYWxpemUgdGltZXN0YW1wICYgbGFzdGRlYyB2YXJzLgogIC0gZml4IHRpbWVzdGFtcCBvdmVyZmxvd3MuCiAgLSBmaXggbGFzdGRlYyBvdmVyZmxvdy4KICAtIHNtYXJ0ZXIgbm9ybWFsaXphdGlvbiB0byBhbGxvdyB1ZGVsYXkoKSBiZWxvdyAxbXMgdG8gd29yay4KCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAxNiBPY3QKICBhZGQgbmV0d29ya2luZyBzdXBwb3J0IGZvciB0aGUgQWx0ZXJhIE5pb3MgRGV2ZWxvcG1lbnQgS2l0LAogIEN5Y2xvbmUgRWRpdGlvbiAoREstMUMyMCkKCiogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDE0IE9jdCAyMDAzOgogIGFkZCBoaW50IGFib3V0IGRvYy9SRUFETUUuc2lsZW50IHRvIFJFQURNRSBmaWxlCgoqIEFkZCBDb21wYWN0Rmxhc2ggc3VwcG9ydCBmb3IgTlNDVQoKKiBGaXggUENJIHByb2JsZW1zIG9uIFBQQ2hhbWVsZW9uRVZCCgoqIFRSQUIgYXV0by11cGRhdGU6IEJhc2UgZGVjaXNpb24gaWYgd2UgaGF2ZSB0byBzdHJpcCB0aGUgaW1hZ2UKICBoZWFkZXIgb24gaW1hZ2UgdHlwZSBhcyBlbmNvZGVkIGluIHRoZSBoZWFkZXIKICAoaW5jbHVkZSBpbWFnZSB0eXBlIHBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE3IE9jdCAyMDAzKQoKKiBQYXRjaGVzIGJ5IFhpYW5naHVhIFhpYW8sIDE1IE9jdCAyMDAzOgoKICAtIEFkZGVkIE1vdG9yb2xhIENQVSA4NTQwLzg1NjAgc3VwcG9ydCAoY3B1Lzg1eHgpCiAgLSBBZGRlZCBNb3Rvcm9sYSBNUEM4NTQwQURTIGJvYXJkIHN1cHBvcnQgKGJvYXJkL21wYzg1NDBhZHMpCiAgLSBBZGRlZCBNb3Rvcm9sYSBNUEM4NTYwQURTIGJvYXJkIHN1cHBvcnQgKGJvYXJkL21wYzg1NjBhZHMpCgoqIEZpeCBmbGFzaCB0aW1pbmdzIG9uIFRSQUIgYm9hcmQKCiogTWFrZSBzdXJlIEhVU0ggaXMgaW5pdGlhbGl6ZWQgZm9yIHJ1bm5pbmcgYXV0by11cGRhdGUgc2NyaXB0cwoKKiBNYWtlIDUyMDAgcmVzZXQgY29tbWFuZCBfcmVhbGx5XyByZXNldCB0aGUgYm9hcmQsIHdpdGhvdXQgcnVubmluZwogIGFueSBvdGhlciBjb2RlIGFmdGVyIGl0CgoqIEZpeCBlcnJvcnMgd2l0aCBmbGFzaCBlcmFzZSB3aGVuIHJhbmdlIHNwYW5zICBhY3Jvc3MgYmFua3MKICB0aGF0IGFyZSBtYXBwZWQgaW4gcmV2ZXJzZSBvcmRlcgoKKiBGaXggZmxhc2ggbWFwcGluZyBhbmQgZGlzcGxheSBvbiBQM0c0IGJvYXJkCgoqIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAxNSBKdWwgMjAwMzoKICAtIGFkZCBzdXBwb3J0IGZvciBJbnRlbCBJWFA0MjUgQ1BVCiAgLSBhZGQgc3VwcG9ydCBmb3IgSVhEUDQyNSBldmFsIGJvYXJkCgoqIEFkZGVkIGNvbmZpZyBvcHRpb24gQ09ORklHX1NJTEVOVF9DT05TT0xFLiAgU2VlIGRvYy9SRUFETUUuc2lsZW50CiAgZm9yIG1vcmUgaW5mb3JtYXRpb24KCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTAgT2N0IDIwMDMKICAtIEFkZCBzdXBwb3J0IGZvciBBbHRlcmEgRlBHQSBBQ0VYMUsKCiogUGF0Y2hlcyBieSBUaG9tYXMgTGFuZ2UsIDA5IE9jdCAyMDAzOgogIC0gZml4IGNtZF9pZGUuYyBmb3Igbm9uIHBwYyBib2FyZHMgKHJlYWQvd3JpdGUgZnVuY3Rpb25zIGRpZCBub3QKICAgIGFkZCBBVEEgYmFzZSBhZGRyZXNzKQogIC0gZml4IGZvciBzaGFubm9uIGJvYXJkCiAgLSAjaWZkZWYgQ09ORklHX0lERV84eHhfRElSRUNUIHNvbWUgb3RoZXJ3aXNlIHVudXNlZCBjb2RlCiAgLSBFbmRpYW4gc3dhcCBBVEEgaWRlbnRpdHkgZm9yIGFsbCBiaWcgZW5kaWFuIENQVXMsIG5vdCBqdXN0IFBQQwogIC0gTUlQUyBvbmx5OiBOZXcgb3B0aW9uIENPTkZJR19NRU1TSVpFX0lOX0JZVEVTIGZvciBwYXNzaW5nIG1lbXNpemUKICAgIGFyZ3MgdG8gbGludXgKICAtIGFkZCBzdXBwb3J0IGZvciBkYmF1MXgwMCBib2FyZCAoTUlQUzMyKQoKKiBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDA3IE9jdCAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBkZWJyaXMgYm9hcmQKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDkgT2N0IDIwMDM6CiAgRml4ZXMgZm9yIFRSQUIgYm9hcmQKICAtIC9ib2FyZC90cmFiL3JzNDg1LmM6IGNvcnJlY3QgYmF1ZHJhdGUKICAtIC9ib2FyZC90cmFiL2NtZF90cmFiLmM6IGJ1ZyBmaXggZm9yIHByb2JsZW0gd2l0aCB0aW1lciBvdmVyZmxvdyBpbgogICAgdWRlbGF5KCk7IGZpeCBzb21lIHRpbWluZyBwcm9ibGVtcyB3aXRoIGFkYyBjb250cm9sbGVyCiAgLSAvYm9hcmQvdHJhYi90cmFiX2ZrdC5jOiBhZGQgbmV3IGNvbW1hbmRzOiBnYWluLCBlZXByb20gYW5kIHBvd2VyOwogICAgbW9kaWZ5IGNvbW1hbmRzOiB0b3VjaCBhbmQgYnV6emVyCgoqIERpc2FibGUgQ09ORklHX1NVUFBPUlRfVkZBVCB3aGVuIHVzZWQgd2l0aCBDT05GSUdfQVVUT19VUERBVEUKICAocXVpY2sgJiBkaXJ0eSB3b3JrYXJvdW5kIGZvciByb2d1ZSBwb2ludGVyIHByb2JsZW0gaW4gZ2V0X3ZmYXRuYW1lKCkpOwogIFVzZSBkaXJlY3QgZnVuY3Rpb24gY2FsbHMgZm9yIGF1dG9fdXBkYXRlIGluc3RlYWQgb2YgaHVzaCBjb21tYW5kcwoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDA0IE9jdCAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIEFsdGVyYSBOaW9zLTMyIENQVQogIC0gYWRkIHN1cHBvcnQgZm9yIE5pb3MgQ3ljbG9uZSBEZXZlbG9wbWVudCBLaXQgKERLLTFDMjApCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI5IFNlcCAyMDAzOgogIC0gQSBzZWNvbmQgcGFyYW1ldGVyIGZvciBib290bSBvdmVyd3JpdGVzIHRoZSBsb2FkIGFkZHJlc3MgZm9yCiAgICAiU3RhbmRhbG9uZSBBcHBsaWNhdGlvbiIgaW1hZ2VzLgogIC0gYm9vdG0gc2V0cyBlbnZpcm9ubWVudCB2YXJpYWJsZSAiZmlsZXNpemUiIHRvIHRoZSByZXN1bHRpbmcKICAgICh1bmNvbXByZXNzZWQpIGRhdGEgbGVuZ3RoIGZvciAiU3RhbmRhbG9uZSBBcHBsaWNhdGlvbiIgaW1hZ2VzCiAgICB3aGVuIGF1dG9zdGFydCBpcyBzZXQgdG8gIm5vIi4gTm93IHlvdSBjYW4gZG8gc29tZXRoaW5nIGxpa2UKCWlmIGJvb3RtICRmcGdhZGF0YSAkc29tZV9mcmVlX3JhbSA7IHRoZW4KCQlmcGdhIGxvYWQgMCAkc29tZV9mcmVlX3JhbSAkZmlsZXNpemUKCWZpCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAyNSBTZXB0IDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIHRoZSBNSVA0MDUgUmV2LiBDIGJvYXJkCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDI1IFNlcCAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBaZXBoeXIgRW5naW5lZXJpbmcgWlBDLjE5MDAgYm9hcmQKCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjMgU2VwIDIwMDM6CiAgYWRkIENNRF9QT1JUSU8gdG8gQ0ZHX0NNRF9OT05TVEQgKGNvbW1hbmRzIGluIHF1ZXN0aW9uIGFyZSBvbmx5CiAgaW1wbGVtZW50ZWQgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlKQoKKiBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDIzIFNlcCAyMDAzOgogIGZpeCBwbGxfcGNpX3RvX21lbV9tdWx0aXBsaWVyIHRhYmxlIGZvciBNUEM4MjQ1CgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDIyIFNlcCAyMDAzOgogIGVuYWJsZSB0aW1lZCBhdXRvYm9vdCBvbiBQWEEKCiogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAyMiBTZXAgMjAwMzoKICAtIGFkZCAkKENGTEFHUykgdG8gIi1wcmludC1saWJnY2MtZmlsZW5hbWUiIHNvIGNvbXBpbGVyIGRyaXZlcgogICAgcmV0dXJucyBjb3JyZWN0IGxpYmdjYyBmaWxlIHBhdGgKICAtICJsYXRlbmN5IiByZWR1Y3Rpb24gb2YgYnVzeS1sb29wIHdhaXRpbmcgdG8gaW1wcm92ZSAiVS1Cb290IiBib290CiAgICB0aW1lIG9uIHMzYzI0eDAgc3lzdGVtcwoKKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTkgU2VwIDIwMDM6CiAgLSBBZGQgQ0ZHX0ZBVUxUX0VDSE9fTElOS19ET1dOIG9wdGlvbiB0byBlY2hvIHRoZSBpbnZlcnRlZCBFdGhlcm5ldAogICAgbGluayBzdGF0ZSB0byB0aGUgZmF1bHQgTEVELgogIC0gSW4gTmV0TG9vcCwgbWFrZSB0aGUgRmF1bHQgTEVEIHJlZmxlY3QgdGhlIGxpbmsgc3RhdHVzLiAgVGhlIGxpbmsKICAgIHN0YXR1cyBnZXRzIHVwZGF0ZWQgb24gZW50cnksIGFuZCBvbiB0aW1lb3V0cy4KCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMTggU2VwIDIwMDM6CiAgYWxsb3cgbWtpbWFnZSB0byBidWlsZCBhbmQgcnVuIG9uIEN5Z3dpbi1ob3N0ZWQgc3lzdGVtcwoKKiBQYXRjaCBieSBGcmFuayBN/GxsZXIsIDE4IFNlcCAyMDAzOgogIHVzZSBiaV9pbnRmcmVxIGluc3RlYWQgb2YgYmlfYnVzZnJlcSB0byBjb21wdXRlIGZlY19taWlfc3BlZWQgaW4KICBjcHUvbXBjOHh4L2ZlYy5jCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNiBTZXAgMjAwMzoKICBhZGQgdG9vbCB0byBjb21wdXRlIGZpbGVkcyBpbiB0aGUgUExQUkNSIHJlZ2lzdGVyIGZvciBNUEM4NngKCiogVXNlIElIX1RZUEVfRklMRVNZU1RFTSBmb3IgVFJBQiAiZGlzayIgaW1hZ2VzLgoKKiBGaXggYnVpbGQgcHJvYmxlbXMgdW5kZXIgRnJlZUJTRAoKKiBBZGQgZ2VuZXJpYyBmaWxlc3lzdGVtIGltYWdlIHR5cGUKCiogTWFrZSBmYXRsb2FkIHNldCBmaWxlc2l6ZSBlbnZpcm9ubWVudCB2YXJpYWJsZQoKKiBlbmFibGUgYmFzaWMgLyBtZWRpdW0gLyBoaWdoLWVuZCBjb25maWd1cmF0aW9ucyBmb3IgUFBDaGFtZWxlb25FVkIKICBib2FyZDsgZml4IE5BTkQgY29kZQoKKiBlbmFibGUgVEZUUCBjbGllbnQgY29kZSB0byBzcGVjaWZ5IHRvIHRoZSBzZXJ2ZXIgdGhlIGRlc2lyZWQKICB0aW1lb3V0IHZhbHVlIChzZWUgUkZDLTIzNDkpCgoqIEltcHJvdmUgU0RSQU0gc2V0dXAgZm9yIFRSQUIgYm9hcmQKCiogU3VwcHJlc3MgYWxsIG91dHB1dCB3aXRoIHNwbGFzaHNjcmVlbiBjb25maWd1cmVkIG9ubHkgaWYgInNwbGFzaGltYWdlIgogIGlzIHNldAoKKiBGaXggcHJvYmxlbXMgd2l0aCBJMkMgc3VwcG9ydCBmb3IgbXBjNTIwMAoKKiBBZGFwdCBUUkFCIGNvbmZpZ3VyYXRpb24gYW5kIGF1dG9fdXBkYXRlIHRvIG5ldyBtZW1vcnkgbGF5b3V0CgoqIEFkZCBjb25maWd1cmF0aW9uIGZvciB3dGsgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIHRoZSBTaGFycCBMUTA2NVQ5RFI1MVUgTENEIGRpc3BsYXkKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDE3IFNlcCAyMDAzOgogIC0gRml4ZXMgZm9yIE1QQzgyNjYgZGVmYXVsdCBjb25maWcKICAtIEFsbG93IGV0aF9sb29wYmFja190ZXN0KCkgb24gODI2MCB0byB1c2UgYSBzdWJzZXQgb2YgdGhlIEZDQydzCgoqIFBhdGNoZXMgYnkgSm9uIERpZWtlbWEsIDE3IFNlcCAyMDAzOgogIC0gdXBkYXRlIFJFQURNRSAoU0hPV19CT09UX1BST0dSRVNTIHZhbHVlcyBmb3IgY21kX25hbmQuYyBhbmQKICAgIGVudl9jb21tb24uYykKICAtIHNiYzgyNjAgdHdlYWtzCiAgLSBhZGp1c3QgImhlbHAiIG91dHB1dAoKKiBQYXRjaGVzIGJ5IEFuZGVycyBMYXJzZW4sIDE3IFNlcCAyMDAzOgogIC0gZml4IHNwZWxsaW5nIGVycm9ycwogIC0gc2V0IEdEX0ZMR19ERVZJTklUIGZsYWcgb25seSBhZnRlciBkZXZpY2UgZnVuY3Rpb24gcG9pbnRlcnMKICAgIGFyZSB2YWxpZAogIC0gQWxsb3cgQ0ZHX0FMVF9NRU1URVNUIG9uIHN5c3RlbXMgd2hlcmUgYWRkcmVzcyB6ZXJvIGlzbid0CiAgICB3cml0ZWFibGUKICAtIGVuYWJsZSAzLnJkIFVBUlQgKFNULVVBUlQpIG9uIFBYQShYU2NhbGUpIENQVXMKICAtIHRyaWdnZXIgd2F0Y2hkb2cgd2hpbGUgd2FpdGluZyBpbiBzZXJpYWwgZHJpdmVyCgoqIEFkZCBhdXRvLXVwZGF0ZSBjb2RlIGZvciBUUkFCIGJvYXJkIHVzaW5nIFVTQiBtZW1vcnkgc3RpY2tzLAogIHN1cHBvcnQgbmV3IGNvbmZpZ3VyYXRpb24gd2l0aCBtb3JlIG1lbW9yeQoKKiBkaXNhYmxlIE1QQzUyMDAgYnVzIHBpcGVsaW5pbmcgYXMgd29ya2Fyb3VuZCBmb3IgYnVzIGNvbnRlbnRpb24KCiogTW9kaWZ5IFhMQiBhcmJpdGVyIHByaW9yaXRpZXMgb24gTVBDNTIwMCBzbyBhbGwgZGV2aWNlcyB1c2Ugc2FtZQogIHByaW9yaXR5OyBjb25maWd1cmUgY3JpdGljYWwgaW50ZXJydXB0cyB0byBiZSBoYW5kbGVkIGxpa2UgZXh0ZXJuYWwKICBpbnRlcnJ1cHRzCgoqIE1ha2UgSVBCIGNsb2NrIG9uIE1HVDUxMDAvTVBDNTIwMCBjb25maWd1cmFibGUgaW4gYm9hcmQgY29uZmlnIGZpbGU7CiAgZ28gYmFjayB0byA2NiBNSHogZm9yIHN0YWJpbGl0eQoKKiBQYXRjaGVzIGJ5IEpvbiBEaWVrZW1hLCAxNSBTZXAgMjAwMzoKICAtIGFkZCBkZXNjcmlwdGlvbiBmb3IgbWlzc2luZyBDRkdfQ01EXyogZW50cmllcyBpbiB0aGUgUkVBRE1FIGZpbGUKICAtIHNhY3NuZyB0d2Vha3MKCiogUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAxNCBTZXAgMjAwMzoKICBlbmFibGUgd2F0Y2hkb2cgc3VwcG9ydCBmb3IgYWxsIE1QQzgyNHggYm9hcmRzIHRoYXQgaGF2ZSBhIHdhdGNoZG9nCgoqIE9uIE1QQzUyMDAsIHJlc3RyaWN0IEZFQyB0byBhIG1heGltdW0gb2YgMTAgTWJwcyB0byB3b3JrIGFyb3VuZCB0aGUKICAiTm9uLW9jdGV0IEFsaWduZWQgRnJhbWUiIGVycm9ycyB3ZSBzZWUgYXQgMTAwIE1icHMKCiogUGF0Y2ggYnkgU2hhcmFkIEd1cHRhLCAxNCBTZXAgMjAwMzoKICBmaXggU1BSIG51bWJlcnMgZm9yIHVwcGVyIEJBVCByZWdpc3RlciAoW0lEXUJBVFs0LTddW1VMXSkKCiogUGF0Y2ggYnkgbGxhbmRyZSwgMTEgU2VwIDIwMDM6CiAgdXBkYXRlIGNvbmZpZ3VyYXRpb24gZm9yIFBQQ2hhbWVsZW9uRVZCIGJvYXJkCgoqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMTMgU2VwIDIwMDM6CiAgdmFyaW91cyBjaGFuZ2VzIHRvIFZDTUE5IGJvYXJkIHNwZWNpZmljIGZpbGVzCgoqIEFkZCBJMkMgc3VwcG9ydCBmb3IgTUdUNTEwMCAvIE1QQzUyMDAKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDExIFNlcCAyMDAzOgogIENoYW5nZWQgZGVmYXVsdCBtZW1vcnkgb3B0aW9uIG9uIE1QQzgyNjZBRFMgdG8gTk9UIGJlIFBhZ2UgQmFzZWQKICBJbnRlcmxlYXZlLCBzaW5jZSB0aGlzIGRvZXNuJ3Qgd29yayB2ZXJ5IHdlbGwgd2l0aCB0aGUgc3RhbmRhcmQKICAxNk1CIERJTU0KCiogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAxMiBTZXAgMjAwMzoKICBmaXggTWFrZWZpbGUgc2V0dGluZ3MgZm9yIHNrOTggZHJpdmVyCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTIgU2VwIDIwMDM6CiAgLSBuZXcgYm9hcmRzIGFkZGVkOiBEUDQwNSwgSFVCNDA1LCBQTFU0MDUsIFZPSDQwNQogIC0gc29tZSBlc2QgYm9hcmRzIHVwZGF0ZWQKICAtIGNwdS9wcGM0eHgvc2RyYW0uYzogZGlzYWJsZSBtZW1vcnkgY29udHJvbGxlciBiZWZvcmUgc2V0dGluZwogICAgZmlyc3QgdmFsdWVzCiAgLSBjcHUvcHBjNHh4LzQwNV9wY2kuYzogc2V0IHZlbmRvciBpZCBvbiBQUEM0MDVFUCBzeXN0ZW1zCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDExIFNlcCAyMDAzOgogIGFkZCBidXJuLWluIHRlc3RzIGZvciBUUkFCIGJvYXJkCgoqIEVuYWJsZSBpbnN0cnVjdGlvbiBjYWNoZSBvbiBNUEM1MjAwIGJvYXJkCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAxMSBTZXAgMjAwMzoKICAtIGZpeCBVU0IgZGF0YSBwb2ludGVyIGFzc2lnbm1lbnQgZm9yIGJ1bGsgb25seSB0cmFuc2Zlci4KICAtIHByZXZlbnQgdG8gZGlzcGxheSBlcmFzZWQgZGlyZWN0b3JpZXMgaW4gRkFUIGZpbGVzeXN0ZW0uCgoqIENoYW5nZSBvdXRwdXQgZm9ybWF0IGZvciBOQU5EIGZsYXNoIC0gbWFrZSBpdCBsb29rIGxpa2UgZm9yIG90aGVyCiAgbWVtb3J5LCB0b28KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC44Ogo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEFkZCBJMkMgYW5kIFJUQyBzdXBwb3J0IGZvciBSTVUgYm9hcmQKCiogUGF0Y2hlcyBieSBEZW5pcyBQZXRlciwgOSBTZXAgMjAwMzoKICBhZGQgRkFUIHN1cHBvcnQgZm9yIElERSwgU0NTSSBhbmQgVVNCCgoqIFBhdGNoZXMgYnkgR2xlYiBOYXRhcG92LCAyIFNlcCAyMDAzOgogIC0gY2xlYW51cCBvZiBQT1NUIGNvZGUgZm9yIHVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMKICAtIE1QQzgyNHggbG9ja3Mgd2F5MCBvZiBkYXRhIGNhY2hlIGZvciB1c2UgYXMgaW5pdGlhbCBSQU07CiAgICB0aGlzIHBhdGNoIHVubG9ja3MgaXQgYWZ0ZXIgcmVsb2NhdGlvbiB0byBSQU0gYW5kIGludmFsaWRhdGVzCiAgICB0aGUgbG9ja2VkIGVudHJpZXMuCgoqIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMzAgQXVnIDIwMDM6CiAgbmV3IEkyQyBkcml2ZXIgZm9yIG1wYzEwNyBicmlkZ2UuIE5vdyB3b3JrcyBmcm9tIGZsYXNoLgoKKiBQYXRjaCBieSBEYXZlIEVsbGlzLCAxMSBBdWcgMjAwMzoKICAtIEpGRlMyOiBmaXggdHlwbyBpbiBjb21tb24vY21kX2pmZnMyLmMKICAtIEpGRlMyOiBmaXggQ0ZHX0pGRlMyX1NPUlRfRlJBR01FTlRTIG9wdGlvbgogIC0gSkZGUzI6IHJlbW92ZSBub2RlIHZlcnNpb24gMCB3YXJuaW5nCiAgLSBKRkZTMjogYWNjZXB0IEpGRlMyIFBBRERJTkcgbm9kZXMKICAtIFNYTkk4NTVUOiBhZGQgQU0yOUxWODAwIHN1cHBvcnQKICAtIFNYTkk4NTVUOiBtb3ZlIGVudmlyb25tZW50IGZyb20gRUVQUk9NIHRvIGZsYXNoCiAgLSBTWE5JODU1VDogYm9vdCBmcm9tIEpGRlMyIGluIE5PUiBvciBOQU5EIGZsYXNoCgoqIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAxMSBBdWcgMjAwMzoKICBmaXhlcyBmb3IgSTJDIG9uIE1QQzgyNDAKICAtIGZpeCBpMmNfd3JpdGUgcm91dGluZQogIC0gZml4IGlwcm9iZSBjb21tYW5kCiAgLSBlbGltaW5hdGVzIHVzZSBvZiBnbG9iYWwgdmFyaWFibGVzLCBwbHVzIGRlYWQgY29kZSwgY2xlYW51cC4KCiogQWRkIHN1cHBvcnQgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgRGV2aWNlcyAoQkJCKQogICh0ZXN0ZWQgd2l0aCBVU0IgbWVtb3J5IHN0aWNrcyBvbmx5KQoKKiBBdm9pZCBmbGlja2VyIG9uIFRSQUIncyBWRkQKCiogQWRkIHN1cHBvcnQgZm9yIFNLOTh4eCBkcml2ZXIKCiogQWRkIFBDSSBzdXBwb3J0IGZvciBTTDgyNDUgYm9hcmQKCiogU3VwcG9ydCBJY2VDdWJlIGJvYXJkIGNvbmZpZ3VyYXRpb25zIHdpdGggMSB4IEFNRCBBTTI5TFYwNjUgKDggTUIpCiAgb3IgMSB4IEFNMjlMVjY1MiAodHdvIExWMDY1IGluIG9uZSBjaGlwID0gMTYgTUIpOwogIFJ1biBJUEIgYXQgMTMzIE1oejsgYWRqdXN0IHRoZSBNSUkgY2xvY2sgZnJlcXVlbmN5IGFjY29yZGluZ2x5CgoqIFNldCBCUkdfQ0xLIG9uIFBNODI1LzgyNiB0byA2NE1IeiAoVkNPX09VVCAvIDQsIGluc3RlYWQgb2YgMTYgIE1IeikKICB0byBhbGxvdyBmb3IgbW9yZSBhY2N1cmF0ZSBiYXVkcmF0ZSBzZXR0aW5ncwogIChlcnJvciBub3cgMC43JSBhdCAxMTUga2JwcywgaW5zdGVhZCBvZiAzLjUlIGJlZm9yZSkKCiogUGF0Y2ggYnkgQW5kcmVhcyBNb2hyLCA0IFNlcCAyMDAzOgogIEZpeCBhIGxvdCBvZiBzcGVsbGluZyBlcnJvcnMKCiogQWRkIHN1cHBvcnQgZm9yIFBQQ2hhbWVsZW9uIEV2YWwgQm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIFAzRzQgYm9hcmQKCiogRml4IHByb2JsZW0gd2l0aCBNR1Q1MTAwIEZFQyBkcml2ZXI6IGFkZCAiZWFybHkiIE1BQyBhZGRyZXNzCiAgaW5pdGlhbGl6YXRpb24KCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgNyBBdWcgMjAwMzoKICBjaGVjayBCQ1NSIHRvIGRldGVjdCBpZiB0aGUgYm9hcmQgaXMgY29uZmlndXJlZCBpbiBQQ0kgbW9kZQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40Ljc6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2ggYnkgUmFnaHUgS3Jpc2huYXByYXNhZCwgNyBBdWcgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgQWRkZXIgSUkgTVBDODUyVCBtb2R1bGUKCiogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAxOSBBdWcgMjAwMzoKICBmaXggVEkgSW5ub3ZhdG9yL09NQVAxNTEwIHBpbiBjb25maWdzCgoqIFBhdGNoZXMgYnkgS3NoaXRpaiwgMTggQXVnIDIwMDMKICAtIGFkZCBzdXBwb3J0IGZvciBhcm05MjZlanMgY3B1IGNvcmUKICAtIGFkZCBzdXBwb3J0IGZvciBUSSBPTUFQIDE2MTAgSW5ub3ZhdG9yIEJvYXJkCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDE0IEF1ZyAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBiemlwMiB1bmNvbXByZXNzaW9uCgoqIEFkZCBHQ0MgbGlicmFyeSB0byBleGFtcGxlcy9NYWtlZmlsZSBzbyBHQ0MgdXRpbGl0eSBmdW5jdGlvbnMgd2lsbAogIGJlIHJlc29sdmVkLCB0b28KCiogQWRkIEkyQyBhbmQgUlRDIHN1cHBvcnQgZm9yIFJNVSBib2FyZCB1c2luZyBzb2Z0d2FyZSBJMkMgZHJpdmVyCiAgKGJlY2F1c2Ugb2YgYmV0dGVyIHJlc3BvbnNlIHRvIGlwcm9iZSBjb21tYW5kKTsgZml4IHByb2JsZW0gd2l0aAogICJyZXNldCIgY29tbWFuZAoKKiBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjggQXVnIDIwMDM6CiAgQWRkZWQgQ09ORklHX0JPT1RQX0ROUzIgYW5kIENPTkZJR19CT09UUF9TRU5EX0hPU1ROQU1FIHRvCiAgQ09ORklHX0JPT1RQX01BS1MgKHNlZSBSRUFETUUpLgoKKiBGaXggSUNVODYyIGVudmlyb25tZW50IHByb2JsZW0KCiogRml4IFJBTSBzaXplIGRldGVjdGlvbiBmb3IgUk1VIGJvYXJkCgoqIEltcGxlbWVudCAicmVzZXQiIGZvciBNR1Q1MTAwL01QQzUyMDAgc3lzdGVtcwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjY6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogTWFrZSBFdGhlcm5ldCBhdXRvbmVnb3RpYXRpb24gb24gSU5DQS1JUCB3b3JrIGZvciBhbGwgY2xvY2sgcmF0ZXM7CiAgYWxsb3cgc2VsZWN0aW9uIG9mIGNsb2NrIGZyZXF1ZW5jeSBhcyAibWFrZSIgdGFyZ2V0CgoqIEltcGxlbWVudCBtZW1vcnkgYXV0b3NpemluZyBjb2RlIGZvciBJY2VDdWJlIGJvYXJkcwoKKiBDb25maWd1cmUgbmV0d29yayBwb3J0IG9uIElOQ0EtSVAgZm9yIGF1dG9uZWdvdGlhdGlvbgoKKiBGaXggb3ZlcmZsb3cgcHJvYmxlbSBpbiBuZXR3b3JrIHRpbWVvdXQgY29kZQoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCA4IEF1ZyAyMDAzOgogIEFsbG93IGNyYzMyIHRvIGJlIHVzZWQgYXQgYWRkcmVzcyAweDAwMCAoY3JjMzJfbm9fY29tcCwgdG9vKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC41Ogo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFVwZGF0ZSBmb3IgVFFNIGJvYXJkIGRlZmF1bHRzOgogIGRpc2FibGUgY2xvY2tzX2luX21oeiwgZW5hYmxlIGJvb3QgY291bnQgbGltaXQKCiogUmVtb3ZlZCB0b29scy9nZGIgZnJvbSAibWFrZSBhbGwiIHRhcmdldC4gIEFkZGVkIG1ha2UgdGFyZ2V0ICJnZGJ0b29scyIKICBpbiB0b3BsZXZlbCBkaXJlY3RvcnkgaW5zdGVhZC4gIFJlbW92ZWQgYXN0ZXN0LmMgZnJvbSB0b29scy9nZGIgYmVjYXVzZQogIGl0IGlzIG5vIGxvbmdlciByZWxldmFudC4KCiogRml4IFBDSSBzdXBwb3J0IGZvciBNUEM1MjAwIC8gSWNlQ3ViZSBCb2FyZAoKKiBNYXAgSVNQMTM2MiBVU0IgT1RHIGNvbnRyb2xsZXIgZm9yIE5TQ1UgYm9hcmQKCiogUGF0Y2ggYnkgQnJhZCBQYXJrZXIsIDAyIEF1ZyAyMDAzOgogIGZpeCBzYzUyMF9jZHAgcHJvYmxlbXMKCiogSW1wbGVtZW50IEJvb3QgQ3ljbGUgRGV0ZWN0aW9uIChSZXEuIDIuMyBvZiBPU0RMIENHTCBSZXFpcmVtZW50cykKCiogQWxsb3cgZXJhc2UgY29tbWFuZCB0byBjcm9zcyBmbGFzaCBiYW5rIGJvdW5kYXJpZXMKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyMSBKdWwgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgTHludXhXb3JrcyBLZXJuZWwgRG93bmxvYWRhYmxlIEltYWdlcyAoS0RJcykuCiAgQm90aCBMeW54T1MgYW5kIEJsdWVDYXQgbGludXggS0RJcyBhcmUgc3VwcG9ydGVkLgoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAyNSBKdWwgMjAwMzoKICB1c2UgbW9yZSByZWxpYWJsZSByZXNldCBmb3IgT01BUC85MjVUCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDI1IEp1bCAyMDAzOgogIGZpeCB0eXBvIGluIG1wYzh4eC5oCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDI0IEp1bCAyMDAzOgogIEZpeGVzIGZvciBjbWRfbmFuZC5jOgogIC0gRml4ZWQgbnVsbCBkZXJlZmVyZWNlIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBpbmNvcnJlY3QgRUNDIHZhbHVlcy4KICAtIEFkZGVkIHN1cHBvcnQgZm9yIGRldmljZXMgd2l0aCBubyBSZWFkeS9CdXN5IHNpZ25hbCBob29rZWQgdXAuCiAgLSBBZGRlZCBPTUFQMTUxMCByZWFkL3dyaXRlIHByb3RlY3QgaGFuZGxpbmcuCiAgLSBGaXhlZCBuYW5kLmgncyBFQ0NQT1MuIEEgY29uZmxpY3QgZXhpc3RlZCB3aXRoIFBPUzUgYW5kIGJhZGJsb2NrCiAgICBmb3Igbm9uLUpGRlMyLgogIC0gU3dpdGNoZWQgZGVmYXVsdCBFQ0MgdG8gYmUgSkZGUzIuCgoqIEFsbG93IGNyYzMyIHRvIGJlIHVzZWQgYXQgYWRkcmVzcyAweDAwMAoKKiBQcm92aWRlIGNvbnNpc3RlbnQgaW50ZXJmYWNlIHRvIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zIHRvIGFjY2VzcwogIHRoZSAnZ2xvYmFsX2RhdGEnIHN0cnVjdHVyZQogIFByb3ZpZGUgYSBkb2MvUkVBRE1FLnN0YW5kYWxvbmUgbW9yZSB1c2VmdWwgdG8gdXNlcnMvZGV2ZWxvcGVycy4KCiogTWFrZSBJY2VDdWJlIE1HVDUxMDAgRkVDIGRyaXZlciB3b3JrCgoqIEltcGxlbWVudCBuZXcgbWVjaGFuaXNtIHRvIGV4cG9ydCBVLUJvb3QncyBmdW5jdGlvbnMgdG8gc3RhbmRhbG9uZQogIGFwcGxpY2F0aW9uczogaW5zdGVhZCBvZiB1c2luZyAoUFBDLXNwZWNpZmljKSBzeXN0ZW0gY2FsbHMgd2Ugbm93CiAgdXNlIGEganVtcCB0YWJsZTsgcGxlYXNlIHNlZSBkb2MvUkVBRE1FLnN0YW5kYWxvbmUgZm9yIGRldGFpbHMKCiogUGF0Y2ggYnkgRGF2ZSBXZXN0d29vZCwgMjQgSnVsIDIwMDM6CiAgYWRkZWQgc3VwcG9ydCBmb3IgVW5pdHkgT1MgKGEgcHJvcHJpZXRhcnkgT1MpCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDIzIEp1bCAyMDAzOgogIGFkZCAiaW1scyIgY29tbWFuZCB0byBwcmludCBmbGFzaCB0YWJsZSBvZiBjb250ZW50cwoKKiBGaXggY29sZCBib290IGRldGVjdGlvbiBmb3IgbG9nIGJ1ZmZlciByZXNldAoKKiBSZXR1cm4gZXJyb3IgZm9yIGludmFsaWQgbGVuZ3RoIHNwZWNpZmllcnMgd2l0aCAiY3AuWCIgZXRjLgoKKiBGaXggc3RhcnR1cCBwcm9ibGVtIG9uIE1JUFMKCiogQWxsb3cgZm9yIENPTkZJR19TUExBU0hfU0NSRUVOIGV2ZW4gd2hlbiBubyBleHBsaWNpdAogIGJpdG1hcCBzdXBwb3J0IGlzIGNvbmZpZ3VyZWQKCiogUGF0Y2ggYnkgQmlsbCBIYXJnZW4sIDE4IEp1bCAyMDAzOgogIC0gZml4IGVuZGluYW5lc3MgcHJvYmxlbSBpbiBjcHUvbXBjODI0eC9kcml2ZXJzL2kyYy9pMmMxLmMKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDE4IEp1bCAyMDAzOgogIC0gZml4IG1lbW9yeSBjb25maWd1cmF0aW9uIGZvciBNSVA0MDVUCiAgLSBmaXggcHJpbnRvdXQgb2YgYmF1ZHJhdGUgZm9yICJsb2FkYiA8bG9hZGFkZHI+IDxiYXVkcmF0ZT4iCgoqIENsZWFudXAgb2YgVFFNODJ4eCBjb25maWd1cmF0aW9uczsgdXNlICJvZmZpY2lhbCIgYm9hcmQgdHlwZXMKICB0byBtYWtlIHNlbGVjdGlvbiBlYXNpZXIuCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE3IEp1bCAyMDAzOgogIGFkZCBkZWxheSB0byBnZXQgSTJDIHdvcmtpbmcgd2l0aCAiaW1tIiBjb21tYW5kIGFuZCBzM2MyNHgwX2kyYy5jCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE3IEp1bHkgMDM6CiAgLSBGaXhlZCBidWcgaW4gT01BUDE1MTAgYmF1ZCByYXRlIGRpdmlzb3Igc2V0dGluZ3MuCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDE2IEp1bHkgMjAwMzoKICBNUEM4NjBGQURTIGZpeGVzOgogIC0gYWRkIE1QQzg2eEFEUyBzdXBwb3J0ICh1c2VzIE1QQzg2eEFEUy5oKQogIC0gYWRkIDg2NlAvVCBjb3JlIHN1cHBvcnQgKGFsc28gTVBDODU5VC9NUEM4NTlEU0wvTVBDODUyVCkKICAgIG8gUExQUkNSIGNoYW5nZXMKICAgIG8gQlJHIGNoYW5nZXMgKEVYVEFML1hUQUwgcmVzdHJpY3RlZCB0byAxME1IeikKICAgIG8gZG9uJ3QgdHJ1c3QgZ2NsaygpIHNvZnR3YXJlIG1lYXN1cmVtZW50IGJ5IGRlZmF1bHQsIGRlcGVuZCBvbgogICAgICBDT05GSUdfOHh4X0dDTEtfRlJFUQogIC0gYWRkIERSQU0gU0lNTSBub3QgaW5zdGFsbGVkIGRldGVjdGlvbgogIC0gdXNlIG1vcmUgImNvcnJlY3QiIFNEUkFNIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlCiAgLSBhbGxvdyBkaWZmZXJlbnQgU0RSQU0gc2l6ZXMgKDh4eEFEUyBoYXMgOE0pCiAgLSBkZWZhdWx0IERFUiBpcyAwCiAgLSByZW1vdmUgdW51c2VkIE1BTVIgZGVmaW5lcyBmcm9tIEZBRFM4NjBULmggKGFsbCBkb25lIGluIGZhZHMuYykKICAtIHJlbmFtZSBNQU1SL01CTVIgZGVmaW5lcyB0byBiZSBtb3JlIGNvbnNpc3RlbnQuIFNob3VsZCBldmVudHVhbGx5CiAgICBiZSBtZXJnZWQgaW50byBNeE1SIHRvIGJldHRlciByZWZsZWN0IHRoZSBQb3dlclFVSUNDIGRhdGFzaGVldC4KCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTYgSnVsIDIwMDM6CiAgc3VwcG9ydCBuZXcgTW90b3JvbGEgUFEyRkFEUy1aVSBldmFsdWF0aW9uIGJvYXJkIHdoaWNoIHJlcGxhY2VkCiAgTVBDODI2MEFEUyBhbmQgTVBDODI2NkFEUwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjQ6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIHN1cHBvcnQgZm9yIEljZUN1YmUgYm9hcmQgKHdpdGggTUdUNTEwMCBhbmQgTVBDNTIwMCBDUFVzKQoKKiBBZGQgc3VwcG9ydCBmb3IgTUdUNTEwMCBhbmQgTVBDNTIwMCBwcm9jZXNzb3JzCgoqIFBhdGNoIGJ5IEx1dHogRGVubmlnLCAxNSBKdWwgMjAwMzoKICB1cGRhdGUgZm9yIFIzNjBNUEkgYm9hcmQKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4zOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoZXMgYnkgS3NoaXRpaiwgMDQgSnVsIDIwMDMKICAtIGFkZGVkIHN1cHBvcnQgZm9yIGFybTkyNXQgY3B1IGNvcmUKICAtIGFkZGVkIHN1cHBvcnQgZm9yIFRJIE9NQVAgMTUxMCBJbm5vdmF0b3IgQm9hcmQKCiogUGF0Y2hlcyBieSBNYXJ0aW4gS3JhdXNlLCAxNCBKdWwgMjAwMzoKICAtIGFkZCBJMkMgc3VwcG9ydCBmb3IgczNjMjQwMCBzeXN0ZW1zICh0cmFiIGJvYXJkKQogIC0gKHJlLSkgYWRkICJwaW5nIiB0byBjb21tYW5kIHRhYmxlCgoqIEZpeCBoYW5kbGluZyBvZiAic2xvdyIgUE9TVCByb3V0aW5lcwoKKiBQYXRjaGVzIGJ5IFl1bGkgQmFyY29oZW4sIDEzIEp1bCAyMDAzOgogIC0gQ29ycmVjdCBmbGFzaCBhbmQgSkZGUzIgc3VwcG9ydCBmb3IgTVBDODI2MEFEUwogIC0gZml4IFBWUiB2YWx1ZXMgYW5kIGNsb2NrIGdlbmVyYXRpb24gZm9yIFBvd2VyUVVJQ0MgSUkgZmFtaWx5CiAgICAoODI3MC84Mjc1LzgyODApCgoqIFBhdGNoIGJ5IEJlcm5oYXJkIEt1aG4sIDA4IEp1bCAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIE02OEsgdGFyZ2V0cwoKKiBQYXRjaCBieSBLZW4gQ2hvdSwgMyBKdWw6CiAgLSBGaXggUENJIGNvbmZpZyB0YWJsZSBmb3IgQTMwMDAKICAtIEZpeCBpb2Jhc2UgZm9yIG5hdHNlbWkuYwogICAgKFBDSV9CQVNFX0FERFJFU1NfMCBpcyB0aGUgSU8gYmFzZSByZWdpc3RlciBmb3IgRFA4MzgxNSkKCiogQWxsb3cgdG8gZW5hYmxlICJzbG93IiBQT1NUIHJvdXRpbmVzIGJ5IGtleSBwcmVzcyBvbiBwb3dlci1vbgoqIEZpeCB0ZW1wZXJhdHVyZSBkZXBlbmRlbmQgc3dpdGNoaW5nIG9mIExDRCBiYWNrbGlnaHQgb24gTFdNT04KKiBUd2VhayBvdXRwdXQgZm9ybWF0IGZvciBMV01PTgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDExIEp1bCAyMDAzOgogIC0gRml4IGJ1ZyBpbiBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRS4KICAtIEFSNDA1IGNvbmZpZyB1cGRhdGVkLgogIC0gT0NSVEMvT1JTRzogYnNwIGNvbW1hbmQgYWRkZWQuCiAgLSBBU0g0MDUgYnNwIHVwZGF0ZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4yOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEFkZCBzdXBwb3J0IGZvciBOU0NVIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04MjNNLCBUUU04NTBNLCBUUU04NTVNIGFuZCBUUU04NjBNIG1vZHVsZXMKCiogQWRkIHN1cHBvcnQgZm9yIEFtMjlMVjE2ME1MLCBBbTI5TFYzMjBNTCwgYW5kIEFtMjlMVjY0ME1MCiAgbWlycm9yIGJpdCBmbGFzaCBvbiBUUU04eHhNIG1vZHVsZXMKCiogUGF0Y2ggYnkgS2VubmV0aCBKb2hhbnNzb24sIDMwIEp1biAyMDAzOgogIGdldCByaWQgb2YgTUtfQ01EX0VOVFJZIG1hY3JvOyB1cGRhdGUgZG9jL1JFQURNRS5jb21tYW5kCgoqIFBhdGNoIGJ5IFNlYiBKYW1lcywgMzAgSnVuIDIwMDM6CiAgSW1wcm92ZSBkb2N1bWVudGF0aW9uIG9mIEkyQyBjb25maWd1cmF0aW9uIGluIFJFQURNRQoKKiBGaXggcHJvYmxlbXMgd2l0aCBwcmV2aW91cyBsb2cgYnVmZmVyICJmaXhlcyIKCiogRml4IG1pbm9yIGhlbHAgdGV4dCBpc3N1ZXMKCiogImxvZyBhcHBlbmQiIGRpZCBub3QgYXBwZW5kIGEgbmV3bGluZQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogRml4IHNvbWUgbWlzc2luZyBjb21tYW5kcywgY2xlYW51cCBoZWFkZXIgZmlsZXMKICAoYXV0b3NjcmlwdCwgYm1wLCBic3AsIGZhdCwgbW1jLCBuYW5kLCBwb3J0aW8sIC4uLikKCiogUmV3cml0ZSBjb21tYW5kIGxvb2t1cCBhbmQgaGVscCBjb21tYW5kIChmaXggcHJvYmxlbXMgd2l0aCBidWJibGUKICBzb3J0IHdoZW4gc29ydGluZyBjb21tYW5kIG5hbWUgbGlzdCkuIE1pbm9yIGNsZWFudXAgaGVyZSBhbmQgdGhlcmUuCgoqIE1lcmdlIGZyb20gInN0YWJsZSBicmFuY2giLCB0YWcgTEFCRUxfMjAwM18wNl8yOF8xODAwLXN0YWJsZToKICAtIEFsbG93IHRvIGNhbGwgc3lzbW9uIGZ1bmN0aW9uIGludGVyYWN0aXZlbHkKICAtIFBJQyBvbiBMV01PTiBib2FyZCBuZWVkcyBkZWxheSBhZnRlciBwb3dlci1vbgogIC0gQWRkIG1pc3NpbmcgUlNSIGRlZmluaXRpb25zIGZvciBNUEM4eHgKICAtIEltcHJvdmUgbG9nIGJ1ZmZlciBoYW5kbGluZzogZ3VhcmFudGVlIGNsZWFuIHJlc2V0IGFmdGVyIHBvd2VyLW9uCiAgLSBBZGQgc3VwcG9ydCBmb3IgRVhCSVRHRU4gYm9hcmQgKGFrYSAiZ2VuaWUiKQogIC0gQWRkIHN1cHBvcnQgZm9yIFNMODI0NSBib2FyZAoKKiBDb2RlIGNsZWFudXA6CiAgLSByZW1vdmUgdHJhaWxpbmcgd2hpdGUgc3BhY2UsIHRyYWlsaW5nIGVtcHR5IGxpbmVzLCBDKysgY29tbWVudHMsIGV0Yy4KICAtIHNwbGl0IGNtZF9ib290LmMgKHNlcGFyYXRlIGNtZF9iZGluZm8uYyBhbmQgY21kX2xvYWQuYykKCiogUGF0Y2hlcyBieSBLZW5uZXRoIEpvaGFuc3NvbiwgMjUgSnVuIDIwMDM6CiAgLSBtYWpvciByZXdvcmsgb2YgY29tbWFuZCBzdHJ1Y3R1cmUKICAgICh3b3JrIGRvbmUgbW9zdGx5IGJ5IE1pY2hhbCBDZW5kcm93c2tpIGFuZCBKb2FraW0gS3Jpc3RpYW5zZW4pCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMjYgSnVuIDIwMDM6CiAgLSBjc2IyMjYgY29uZmlndXJhdGlvbiB1cGRhdGVkCiAgLSBjcmVkaXRzIGZvciBsb2dvZGwgcG9ydCB1cGRhdGVkCiAgLSBpbm5va29tIGNvbmZpZ3VyYXRpb24gdXBkYXRlZAogIC0gbG9nb2RsIHRyZWUgdXBkYXRlLCBzdGlsbCB3aXRoIGNvZGluZyBzdHlsZSBpbmNvbnNpc3RlbmNpZXMKICAtIGFkZGVkIE9DTSBmb3IgcHBjNDA1IHdhcm5pbmcgdG8gUkVBRE1FCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAyNSBKdW4gMjAwMzoKICB1cGRhdGUgTmV0VmlhIHdpdGggVjIgYm9hcmQgc3VwcG9ydAoKKiBIZWFkZXIgZmlsZSBjbGVhbnVwIGZvciBBUk0KCiogUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMjQgSnVuIDIwMDM6CiAgLSBtYWtlIHN1cmUgdG8gdXNlIG9ubHkgVS1ib290IHByb3ZpZGVkIGhlYWRlciBmaWxlcwogIC0gZml4IHByb2JsZW1zIHdpdGggIi5yb2RhdGEuc3RyMS40IiBzZWN0aW9uIGFzIHVzZWQgYnkgR0NDLTMueAoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI0IEp1biAyMDAzOgogIC0gVXBkYXRlIGVzZCBBU0g0MDUgYm9hcmQgZmlsZXMuCiAgLSBVcGRhdGUgZXNkIERBU0FfU0lNIGNvbmZpZyBmaWxlLgogIC0gQWRkIHBpbmcgY29tbWFuZCB0byBzb21lIGVzZCBib2FyZHMuCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIzIEp1biAyMDAzOgogIFVwZGF0ZSBmb3IgTVBDODI2MEFEUyBib2FyZAoKKiBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAyMyBKdW4gMjAwMzoKICAtIGNsZWFudXAgb2YgR0NDIDMueCBjb21waWxlciB3YXJuaW5ncwoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgNCBKdW4gMjAwMzoKICBhZGQgbGFyZ2UgbWVtb3J5IHN1cHBvcnQgZm9yIE1QQzgyNjZBRFMgYm9hcmQKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTkgSnVuZSAwMzoKICAtIEVuYWJsZWQgc3RhbmRhcmQgdS1ib290IGRldmljZSBhYnN0cmFjdGlvbiBmb3IgQVJNCiAgLSBFbmFibGVkIGNvbnNvbGUgZGV2aWNlIGZvciBBUk0KICAtIEluaXRpbGl6ZWQgYmlfYmF1ZHJhdGUgZm9yIEFSTQoKKiBQYXRjaCBieSBCaWxsIEhhcmdlbiwgMjMgQXByIDIwMDM6CiAgZml4IGJ5dGUgb3JkZXIgZm9yIDgyNHggSTJDIGFkZHJlc3NlcyAod3JpdGUgb3ApCgoqIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDIwIEp1biAyMDAzOgogIC0gaHltb2QgdXBkYXRlCiAgLSBjbGVhbnVwIChlc3BlY2lhbGx5IGZvciBnY2MtMy54IGNvbXBpbGVycykKCiogUGF0Y2ggYnkgVG9tIEd1aWxsaWFtcywgMjAgSnVuIDIwMDM6CiAgYWRkZWQgQ09ORklHXzc1MEZYIHN1cHBvcnQgZm9yIElCTSA3NTBGWCBwcm9jZXNzb3JzCgoqIFBhdGNoIGJ5IERldmluIENydW1iLCAwMiBBcHIgMjAwMzoKICBGaXggY2xvY2sgZGl2aWRlciByb3VuZGluZyBwcm9ibGVtIGluIGRyaXZlcnMvc2VyaWFsLmMKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTkgSnVuZSAwMzoKICAtIEZpeGVkIHNtYzkxYzExMSBkcml2ZXIgdG8gc3luYyB3aXRoIHRoZSB1LWJvb3QgZW52aXJvbm1lbnQKICAgIChkcml2ZXIvc21jOTFjMTExLmMpLgogIC0gQWRkZWQgZXRoX2luaXQgZXJyb3IgcmV0dXJuIGNoZWNrIGluIE5ldExvb3AgKG5ldC9uZXQuYykuCgoqIFBhdGNoIGJ5IEtlbiBDaG91LCAxOSBKdW5lIDIwMDM6CiAgQWRkZWQgc3VwcG9ydCBmb3IgQTMwMDAgU0JDIGJvYXJkIChBcnRpcyBNaWNyb3N5c3RlbXMgSW5jLikKCiogUGF0Y2hlcyBieSBNdXJyYXkgSmVuc2VuLCAxNyBKdW4gMjAwMzoKICAtIEh5bW9kIGJvYXJkIGRhdGFiYXNlIG1vZHM6IGFkZCAid2hvIiBmaWVsZCBhbmQgbmV3IHhpbGlueCBjaGlwIHR5cGVzCiAgLSBwcm92aWRlIG5ldyAiaW5pdF9jbWRfdGltZW91dCgpIiBmdW5jdGlvbiBzbyBjb2RlIGV4dGVybmFsIHRvCiAgICAiY29tbW9uL21haW4uYyIgY2FuIHVzZSB0aGUgInJlc2V0X2NtZF90aW1lb3V0KCkiIGZ1bmN0aW9uIGJlZm9yZQogICAgZW50ZXJpbmcgdGhlIG1haW4gbG9vcAogIC0gYWRkIERUVCBzdXBwb3J0IGZvciBhZG0xMDIxIChuZXcgZmlsZSBkdHQvYWRtMTAyMS5jOyBjb25maWcKICAgIHNsaWdodGx5IGRpZmZlcmVudC4gc2VlIGluY2x1ZGUvY29uZmlncy9oeW1vZC5oIGZvciBhbiBleGFtcGxlCiAgICAocmVxdWlyZXMgQ09ORklHX0RUVF9BRE0xMDIxLCBDT05GSUdfRFRUX1NFTlNPUlMsIGFuZAogICAgQ0ZHX0RUVF9BRE0xMDIxIGRlZmluZWQpCiAgLSBhZGQgbmV3ICJlZXByb21fcHJvYmUoKSIgZnVuY3Rpb24gd2hpY2ggaGFzIHNpbWlsYXIgYXJncyBhbmQKICAgIGJlaGF2ZXMgaW4gYSBzaW1pbGFyIHdheSB0byAiZWVwcm9tX3JlYWQoKSIgZXRjLgogIC0gYWRkIDgyNjAgRkNDIGV0aGVybmV0IGxvb3BiYWNrIGNvZGUgKG5ldyAiZXRoX2xvb3BiYWNrX3Rlc3QoKSIKICAgIGZ1bmN0aW9uIHdoaWNoIGlzIGVuYWJsZWQgYnkgZGVmaW5pbmcgQ09ORklHX0VUSEVSX0xPT1BCQUNLX1RFU1QpCiAgLSBnZGJ0b29scyBjb3B5cmlnaHQgdXBkYXRlCiAgLSBlbnN1cmUgdGhhdCBzZXRfbXNyKCkgZXhlY3V0ZXMgdGhlICJzeW5jIiBhbmQgImlzeW5jIiBpbnN0cnVjdGlvbnMKICAgIGFmdGVyIHRoZSAibXRtc3IiIGluc3RydWN0aW9uIGluIGNwdS9tcGM4MjYwL2ludGVycnVwdHMuYwogIC0gODI2MCBJL08gcG9ydHMgZml4OiBPcGVuIERyYWluIHNob3VsZCBiZSBzZXQgbGFzdCB3aGVuIGNvbmZpZ3VyaW5nCiAgLSBhZGQgU0lVIElSUSBkZWZpbmVzIGZvciA4MjYwCiAgLSBhbGxvdyBMRFNDUklQVCBvdmVycmlkZSBhbmQgT0JKQ0ZMQUdTIGluaXRpYWxpemF0aW9uOiBjaGFuZ2UgdG8KICAgIGNvbmZpZy5tayB0byBhbGxvdyBib2FyZCBjb25maWd1cmF0aW9ucyB0byBvdmVycmlkZSB0aGUgR05VCiAgICBsaW5rZXIgc2NyaXB0LCBzZWxlY3RlZCB2aWEgdGhlIExEU0NSSVBULCBtYWtlIHZhcmlhYmxlLCBhbmQgdG8KICAgIGdpdmUgYW4gaW5pdGlhbCB2YWx1ZSB0byB0aGUgT0JKQ0ZMQUdTIG1ha2UgdmFyaWFibGUKICAtIDgyNjAgaTJjIGVuaGFuY2VtZW50OgogICAgbyBjb3JyZWN0bHkgZXh0ZW5kcyB0aGUgdGltZW91dCBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgYWxsCiAgICAgIHF1ZXVlZCBtZXNzYWdlcyBmb3IgYm90aCB0cmFuc21pdCBhbmQgcmVjZWl2ZQogICAgbyB3aWxsIG5vdCBjb250aW51ZSB3aXRoIHJlY2VpdmUgaWYgdHJhbnNtaXQgdGltZXMgb3V0CiAgICBvIGVuc3VyZXMgdGhhdCB0aGUgZXJyb3IgY2FsbGJhY2sgaXMgZG9uZSBmb3IgYWxsIHF1ZXVlZCB0eAogICAgICBhbmQgcnggbWVzc2FnZXMKICAgIG8gY29ycmVjdGx5IGRldGVjdHMgYm90aCB0eCBhbmQgcnggdGltZW91dHMsIG9ubHkgZGVsaXZlcnMgb25lIHRvCiAgICAgIHRoZSBjYWxsYmFjaywgYW5kIGRvZXMgbm90IG92ZXJ3cml0ZSBhbiBlYXJsaWVyIGVycm9yCiAgICBvIGxvZ2ljIGluIGkyY19wcm9iZSBub3cgY29ycmVjdAogIC0gYWRkICJ2cHJpbnRmKCkiIGZ1bmN0aW9uIHNvIHRoYXQgInBhbmljKCkiIGZ1bmN0aW9uIGNhbiBiZQogICAgdGVjaG5pY2FsbHkgY29ycmVjdAogIC0gbWFueSBIeW1vZCBib2FyZCBjaGFuZ2VzCgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAxNCBKdW4gMjAwMzoKICAtIGFkZCBzdXBwb3J0IGZvciBMb2dvdHJvbmljIERMIGRhdGFsb2dnZXIgYm9hcmQKICAtIGNsZWFudXAgc2VyaWFsIGxpbmUgYWZ0ZXIga2VybWl0IGJpbmFyeSBkb3dubG9hZAogIC0gYWRkIGRlYnVnWCBtYWNybyAoZGVidWcgbGV2ZWwgc3VwcG9ydCkKICAtIHVwZGF0ZSBtYWNoLXR5cGVzLmggdG8gbGF0ZXN0IGFybS5saW51eC5vcmcudWsgbWFzdGVyIGxpc3QuCgoqIFBhdGNoZXMgYnkgRGF2aWQgTfxsbGVyLCAxMiBKdW4gMjAwMzoKICAtIHJld3JpdGUgb2YgdGhlIFMzQzI0WDAgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgc3R1ZmYKICAtICJkcml2ZXIiIGZvciB0aGUgYnVpbHQtaW4gUzNDMjRYMCBSVEMKCiogUGF0Y2hlcyBieSBZdWxpIEJhcmNvaGVuLCAxMiBKdW4gMjAwMzoKICAtIEFkZCBNSUkgc3VwcG9ydCBhbmQgRXRoZXJuZXQgUEhZIGluaXRpYWxpemF0aW9uIGZvciBNUEM4MjYwQURTIGJvYXJkCiAgLSBGaXggaW5jb3JyZWN0IFNJVU1DUiBpbml0aWFsaXNhdGlvbiBjYXVzZWQgYnkgd3JvbmcgSGFyZCBSZXNldAogICAgY29uZmlndXJhdGlvbiB3b3JkIHN1cHBsaWVkIGJ5IEZQR0Egb24gc29tZSBNUEM4MjYwQURTIGJvYXJkcwoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTAgSnVuIDIwMDM6CiAgVW5pZnkgc3RhdHVzIExFRCBpbnRlcmZhY2UKCiogQWRkIHN1cHBvcnQgZm9yIERTMTI4ODcgUlRDOyBhZGQgUlRDIHN1cHBvcnQgZm9yIEFUQyBib2FyZAoKKiBQYXRjaCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5pZXJlLCAxMSBKdW4gMjAwMzoKICBNb2RpZmljYXRpb25zIGZvciBBdG1lbCBBVDkxUk05MjAwREsgQVJNOTIwVCBiYXNlZCBkZXZlbG9wbWVudCBraXQKICAtIEFkZCBBdG1lbCBEYXRhRmxhc2ggc3VwcG9ydCBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4KICAtIEFkZCBwb3NzaWJpbGl0eSB0byBib290IGEgTGludXggZnJvbSBEYXRhRmxhc2ggd2l0aCBCT09UTSBjb21tYW5kLgogIC0gQWRkIEZsYXNoIGRldGVjdGlvbiBvbiBBdG1lbCBBVDkxUk05MjAwREsKICAgIChiZXR3ZWVuIEF0bWVsIEFUNDlCVjE2MTQgYW5kIEFUNDlCVjE2MTRBIGZsYXNoZXMpCiAgLSBSZXBsYWNlIG9sZCBFdGhlcm5ldCBQSFkgbGF5ZXIgZnVuY3Rpb25zCiAgLSBDaGFuZ2UgbGluayBhZGRyZXNzCgoqIFBhdGNoIGJ5IEZyYW5rIFNtaXRoLCA5IEp1biAyMDAzOgogIHVzZSBDUklUX0VYQ0VQVElPTiBmb3IgbWFjaGluZSBjaGVjayBvbiA0eHgKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMTMgSnVuIDIwMDM6CiAgYWRkZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlICJjYXJpbmZvIiBjb21tYW5kIGluIGNtZF9pbW1hcC5jCgoqIEZpeCBDT05GSUdfTkVUX01VTFRJIHN1cHBvcnQgaW4gaW5jbHVkZS9uZXQuaAoKKiBQYXRjaGVzIGJ5IEt5bGUgSGFycmlzLCAxMyBNYXIgMjAwMzoKICAtIEFkZCBGQVQgcGFydGl0aW9uIHN1cHBvcnQKICAtIEFkZCBjb21tYW5kIHN1cHBvcnQgZm9yIEZBVAogIC0gQWRkIGNvbW1hbmQgc3VwcG9ydCBmb3IgTU1DCiAgLS0tLQogIC0gQWRkIEludGVsIFBYQSBzdXBwb3J0IGZvciB2aWRlbwogIC0gQWRkIEludGVsIFBYQSBzdXBwb3J0IGZvciBNTUMKICAtLS0tCiAgLSBFbmFibGUgTU1DIGFuZCBGQVQgZm9yIGx1YmJvY2sgYm9hcmQKICAtIE90aGVyIG1pc2MgY2hhbmdlcyBmb3IgbHViYm9jayBib2FyZAoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIEFwcmlsIDAyLCAyMDAzOgogIGZpeCBmb3IgU01TQzkxMTExIGRyaXZlcgoKKiBQYXRjaCBieSBWbGFkaW1pciBHdXJldmljaCwgMDQgSnVuIDIwMDM6CiAgbWFrZSBwcGM0MDUgZXRoZXJuZXQgZHJpdmVyIGNvbXBhdGlibGUgd2l0aCBDT05GSUdfTkVUX01VTFRJIG9wdGlvbgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA1IEp1biAyMDAzOgogIC0gUFBDNHh4OiBGaXggYnVnIGZvciBpbml0aWFsIHN0YWNrIGluIGRhdGEgY2FjaGUgYXMgcG9pbnRlZCBvdXQgYnkKICAgIFRob21hcyBTY2hhZWZlciAodHNjaGFlZmVyQGdpZ2Etc3RyZWFtLmRlKS4gTm93IGluaXRhbCBzdGFjayBpbgogICAgZGF0YSBjYWNoZSBjYW4gYmUgdXNlZCBldmVuIGlmIHRoZSBjaGlwIHNlbGVjdCBpcyBpbiB1c2UuCiAgLSBDRkdfUlhfRVRIX0JVRkZFUiBhZGRlZCB0byBzZXQgdGhlIGV0aGVybmV0IHJlY2VpdmUgYnVmZmVyIGNvdW50CiAgICAoc2VlIFJFQURNRSBmb3IgZnVydGhlciBkZXNjcmlwdGlvbikuCiAgLSBDaGFuZ2VkIGNvbmZpZyBmaWxlcyBvZiBDT05GSUdfRUVQUk8xMDAgYm9hcmRzIHRvIHVzZSB0aGUKICAgIENGR19SWF9FVEhfQlVGRkVSIGRlZmluZS4KCiogQWRkIHN1cHBvcnQgZm9yIFJNVSBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODYyTCBhdCAxMDAvNTAgTUh6CgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAwMiBKdW4gMjAwMzoKICBtYWpvciByZWNvbnN0cnVjdGlvbiBvZiBuZXR3b3JraW5nIGNvZGU7CiAgYWRkICJwaW5nIiBzdXBwb3J0IChvdXRnb2luZyBvbmx5ISkKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDA0IEp1bmUgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNVQgYm9hcmQKCiogUGF0Y2hlcyBieSBVZGkgRmlua2Vsc3RlaW4sIDIgSnVuZSAyMDAzOgogIC0gQWRkZWQgc3VwcG9ydCBmb3IgY3VzdG9tIGtleWJvYXJkcywgaW5pdGlhbGl6ZWQgYnkgZGVmaW5pbmcgYQogICAgYm9hcmQtc3BlY2lmaWMgZHJ2X2tleWJvYXJkX2luaXQgYXMgd2VsbCBhcyBkZWZpbmluZyBDT05GSUdfS0VZQk9BUkQgLgogIC0gQWRkZWQgc3VwcG9ydCBmb3IgdGhlIFJCQzgyMyBib2FyZC4KICAtIGNwdS9tcGM4eHgvbGNkLmMgbm93IGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlcyB0aGUKICAgIEhvcml6b250YWwgUGl4ZWwgQ291bnQgZmllbGQuCgoqIEZpeCBhbGlnbm1lbnQgcHJvYmxlbSBpbiBCT09UUCAoZGhjcF9sZWFzZXRpbWUgb3B0aW9uKQogIFtwb2ludGVkIG91dCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5p6HJlLCAyIEp1biAyMDAzXQoKKiBQYXRjaCBieSBNYXJrIFJha2VzLCAxNCBNYXkgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgSW50ZWwgZTEwMDAgZ2lnIGNhcmRzLgoKKiBQYXRjaCBieSBOeWUgTGl1LCAzIEp1biAyMDAzOgogIGZpeCBjcml0aWNhbCB0eXBvIGluIE1BTVIgZGVmaW5pdGlvbiAoaW5jbHVkZS9tcGM4eHguaCkKCiogRml4IHJlcXVpcmVtZW50IHRvIGFsaWduIFUtQm9vdCBpbWFnZSBvbiAxNiBrQiBib3VuZGFyaWVzIG9uIFBQQy4KCiogUGF0Y2ggYnkgS2xhdXMgSGV5ZGVjaywgMiBKdW4gMjAwMwogIE1pbm9yIGNoYW5nZXMgZm9yIEtVUDRLIGNvbmZpZ3VyYXRpb24KCiogUGF0Y2ggYnkgTWFyYyBTaW5nZXIsIDI5IE1heSAyMDAzOgogIEZpeGVkIHJhcnAgYm9vdCBtZXRob2QgZm9yIElBMzIgYW5kIG90aGVyIGxpdHRsZS1lbmRpYW4gQ1BVcy4KCiogUGF0Y2ggYnkgTWFyYyBTaW5nZXIsIDI4IE1heSAyMDAzOgogIEFkZGVkIHBvcnQgSS9PIGNvbW1hbmRzLgoKKiBQYXRjaCBieSBNYXR0aGV3IE1jQ2xpbnRvY2ssIDI4IE1heSAyMDAzCiAgLSBjcHUvbXBjODI0eC9zdGFydC5TOiBmaXggcmVsb2NhdGlvbiBjb2RlIHdoZW4gYm9vdGluZyBmcm9tIFJBTQogIC0gbWlub3IgcGF0Y2hlcyBmb3IgdXR4ODI0NQoKKiBQYXRjaCBieSBEYW5pZWwgRW5nc3Ry9m0sIDI4IE1heSAyMDAzOgogIHg4NiB1cGRhdGUKCiogUGF0Y2ggYnkgRGF2ZSBFbGxpcywgOSBNYXkgMjAwMyArIDI3IE1heSAyMDAzOgogIGFkZCBuYW5kIGZsYXNoIHN1cHBvcnQgdG8gU1hOSTg1NVQgY29uZmlndXJhdGlvbgogIGZpeC9leHRlbmQgbmFuZCBmbGFzaCBzdXBwb3J0OgogIC0gZml4ICduYW5kIGVyYXNlJyBjb21tYW5kIHNvIGRvZXMgbm90IGVyYXNlIGJhZCBibG9ja3MKICAtIGZpeCAnbmFuZCB3cml0ZScgY29tbWFuZCBzbyBkb2VzIG5vdCB3cml0ZSB0byBiYWQgYmxvY2tzCiAgLSBmaXggbmFuZF9wcm9iZSgpIHNvIGhhbmRsZXMgbm8gZmxhc2ggZGV0ZWN0ZWQgcHJvcGVybHkKICAtIGFkZCBkb2MvUkVBRE1FLm5hbmQKICAtIGFkZCAuamZmczIgYW5kIC5vb2Igb3B0aW9ucyB0byBuYW5kIHJlYWQvd3JpdGUKICAtIGFkZCAnbmFuZCBiYWQnIGNvbW1hbmQgdG8gbGlzdCBiYWQgYmxvY2tzCiAgLSBhZGQgJ2NsZWFuJyBvcHRpb24gdG8gJ25hbmQgZXJhc2UnIHRvIHdyaXRlIEpGRlMyIGNsZWFuIG1hcmtlcnMKICAtIG1ha2UgTkFORCByZWFkL3dyaXRlIGZhc3RlcgoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMjMgTWF5IDIwMDM6CiAgVXBkYXRlIGZvciBNUEM4MjY2QURTIGJvYXJkCgoqIEdldCAobW9zdGx5KSByaWQgb2YgQ0ZHX01PTklUT1JfTEVOIGRlZmluaXRpb247IGNvbXB1dGUgcmVhbCBsZW5ndGgKICBpbnN0ZWFkIENGR19NT05JVE9SX0xFTiBpcyBub3cgb25seSB1c2VkIHRvIGRldGVybWluZSAgX2F0X2NvbXBpbGVfCiAgX3RpbWVfICAoISkgaWYgdGhlIGVudmlyb25tZW50IGlzIGVtYmVkZGVkIHdpdGhpbiB0aGUgVS1Cb290IGltYWdlLAogIG9yIGluIGEgc2VwYXJhdGUgZmxhc2ggc2VjdG9yLgoKKiBDbGVhbnVwIENGR19ERVIgI2RlZmluZXMgaW4gY29uZmlnIGZpbGVzICh3ZCBtYWludGFpbmVkIG9ubHkpCgoqIEZpeCBkYXRhIGFib3J0IGV4Y2VwdGlvbiBoYW5kbGluZyBmb3IgYXJtOTIwdCBDUFUKCiogRml4IGFsaWdubWVudCBwcm9ibGVtcyB3aXRoIGZsYXNoIGRyaXZlciBmb3IgVFJBQiBib2FyZAoKKiBQYXRjaCBieSBEb25hbGQgV2hpdGUsIDIxIE1heSAyMDAzOgogIGZpeCBjYWxjdWxhdGlvbiBvZiBiYXNlIGFkZHJlc3MgaW4gcGNpX2hvc2VfY29uZmlnX2RldmljZSgpCgoqIEZpeCBidWcgaW4gY29tbWFuZCBsaW5lIHBhcnNpbmc6ICJjbWQxO2NtZDIiIGlzIHN1cHBvc2VkIHRvIGFsd2F5cwogIGV4ZWN1dGUgImNtZDIiLCBldmVuIGlmICJjbWQxIiBmYWlscy4gTm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50CiAgdG8gInJ1biB2YXIxIHZhcjIiIHdoZXJlIHRoZSBjb250ZW50cyBvZiAidmFyMiIgd2lsbCBOT1QgYmUKICBleGVjdXRlZCB3aGVuIGEgY29tbWFuZCBpbiAidmFyMSIgZmFpbHMuCgoqIEFkZCB6ZXJvLWNvcHkgcmFtZGlzayBzdXBwb3J0IChyZXF1aXJlcyBjb3JyZXNwb25kaW5nIGtlcm5lbCBzdXBwb3J0ISkKCiogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDIwIE1heSAyMDAzOgogIEluIHByZXBhcmF0aW9uIGZvciBhbiBpeHAgcG9ydCwgcmVuYW1lIGNwdS94c2NhbGUgYW5kIGFyY2gteHNjYWxlCiAgaW50byBjcHUvcHhhIGFuZCBhcmNoLXB4YS4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMyBNYXkgMjAwMzoKICAtIElCTSBQUEM0MDVFUCBwb3J0IGFkZGVkLgogIC0gQ09ORklHX1VBUlQxX0NPTlNPTEUgYWRkZWQuIElmIGRlZmluZWQgaW50ZXJuYWwgVUFSVDEgKGFuZCBub3QKICAgIFVBUlQwKSBpcyB1c2VkIGFzIGRlZmF1bHQgVS1Cb290IGNvbnNvbGUuIFBQQzR4eCBvbmx5IQogIC0gZXNkIEFTSDQwNSBib2FyZCBhZGRlZCAoUFBDNDA1RVAgYmFzZWQpLgogIC0gQlVCSU5HQTQwNUVQIGJvYXJkIGFkZGVkIChQUEM0MDVFUCBiYXNlZCAtIElCTSBFdmFsIEJvYXJkKS4KICAtIGVzZCBDUENJNDA1QUIgYm9hcmQgYWRkZWQuCiAgLSBlc2QgUE1DNDA1IGJvYXJkIGFkZGVkLgogIC0gVXBkYXRlIG9mIHNvbWUgZXNkIGJvYXJkcy4KCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDE5IE1haSAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciB0aGUgTUlQNDA1LTMgYm9hcmQKCiogUGF0Y2ggYnkgRGF2ZSBFbGxpcywgMjIgTWF5IDIwMDM6CiAgRml4IHByb2JsZW0gd2l0aCBvbmx5IHBhcnRpYWxseSBjbGVhcmVkIC5ic3Mgc2VnbWVudAoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTIgTWF5IDIwMDM6CiAgZ2V0IFBDSSB0byB3b3JrIG9uIGEgTVBDODI2NkFEUyBib2FyZDsgaW5jb3Jwb3JhdGUgY2hhbmdlIHRvCiAgY3B1L21wYzgyNjAvcGNpLmMgdG8gZW5hYmxlIG92ZXJyaWRlcyBvZiBQQ0kgbWVtb3J5IHBhcmFtZXRlcnMKCiogUGF0Y2ggYnkgTnllIExpdSwgMSBNYXkgMjAwMzoKICBtaW5vciBwYXRjaGVzIGZvciB0aGUgRkFEUzh4eAoKKiBQYXRjaCBieSBUaG9tYXMgU2No5GZlciwgMjggQXByIDIwMDM6CiAgRml4IFNQRCBoYW5kbGluZyBmb3IgMjU2IEVDQyBESU1NIG9uIFdhbG51dAoKKiBBZGQgc3VwcG9ydCBmb3IgYXJiaXRyYXJ5IGJpdG1hcHMgZm9yIFRSQUIncyAgVkZEIGNvbW1hbmQ7CiAgYWxsb3cgdG8gcGFzcyBib290IGJpdG1hcCBhZGRyZXNzZXMgaW4gZW52aXJvbm1lbnQgdmFyaWFibGVzOwogIGFsbG93IGZvciB6ZXJvIGJvb3QgZGVsYXkKCiogUGF0Y2ggYnkgQ2hyaXN0aWFuIEdlad9pbmdlciwgMTkgTWF5IDIwMDI6CiAgT24gVFJBQjogd2FpdCB1bnRpbCB0aGUgZHVtbXkgYnl0ZSBoYXMgYmVlbiBjb21wbGV0ZWx5IHNlbnQKCiogUGF0Y2ggYnkgRGF2aWQgVXBkZWdyYWZmLCAyMiBBcHIgMjAwMzoKICB1cGRhdGUgZm9yIENyYXlMMSBib2FyZAoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMjEgQXByIDIwMDM6CiAgYWRkIGJvb3Qgc3VwcG9ydCBmb3IgQVJUT1MgKGEgcHJvcHJpZXRhcnkgT1MpCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDExIEFwciAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBSVEMgRFMxMzM4CgoqIFBhdGNoIGJ5IFJvZCBCb3ljZSwgMjQgSmFuIDIwMDM6CiAgRml4IGNvdW50aW5nIG9mIGV4dGVuZGVkIHBhcnRpdGlvbnMgaW4gZGlza2Jvb3QgY29tbWFuZAoKKiBQYXRjaCBieSBDaHJpc3RvcGhlIExpbmRoZWltZXIsIDIwIE1heSAyMDAzOgogIGFsbG93IHRoZSB1c2Ugb2YgQ0ZHX0xPQURTIHdoZW4gQ0ZHX05PX0ZMQVNIIGlzIHNldAoKKiBGaXggU0RSQU0gdGltaW5nIG9uIFB1cnBsZSBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgQ29tcGFjdEZsYXNoIG9uIEFUQyBib2FyZAogIChpbmNsdWRlcyBzdXBwb3J0IGZvciBJbnRlbCA4MjM2NSBhbmQgY29tcGF0aWJsZSBQQyBDYXJkIGNvbnRyb2xsZXJzLAogIGFuZCBZZW50YS1jb21wYXRpYmxlIFBDSS10by1DYXJkQnVzIGNvbnRyb2xsZXJzKQoKKiBQYXRjaCBieSBNYXRoaWpzIEhhYXJtYW4sIDA4IE1heSAyMDAzOgogIEFkZCBsYW45MWM5NiBkcml2ZXIgKHRlc3RlZCBvbiBMdWJib2NrIGFuZCBjdXN0b20gUFhBMjUwIGJvYXJkIG9ubHkpCgoqIEZpeCBwcm9ibGVtIHdpdGggdXNhZ2Ugb2YgInRydWUiICh1bmRlZmluZWQgaW4gY3VycmVudCB2ZXJzaW9ucyBvZiBiZmQuaCkKCiogQWRkIHN1cHBvcnQgZm9yIFByb21lc3MgQVRDIGJvYXJkCgoqIFBhdGNoIGJ5IEtlaXRoIE91dHdhdGVyLCAyOCBBcHIgMjAwMzoKICAtIE1pc2NlbGxhbmVvdXMgY29ycmVjdGlvbnMgYW5kIGFkZGl0aW9ucyB0byBHRU44NjBUIGJvYXJkIHNwZWNpZmljIGNvZGUuCiAgLSBBZGRlZCBHRU44NjBfU0MgdmFyaWFudCB0byBHRU44NjBULgogIC0gTWlzY2VsbGFuZW91cyBjb3JyZWN0aW9ucyB0byBHRU44NjBUIGRvY3VtZW50YXRpb24uCiAgLSBDb3JyZWN0IGR1cGxpY2F0ZSBlbnRyeSBpbiBVLUJvb3QgQ1JFRElUUyBmaWxlLgogIC0gQWRkIEdFTjg2MFRfU0MgZW50cnkgaW4gTUFJTlRBSU5FUlMgZmlsZS4KICAtIFVwZGF0ZSBDUkVESVRTIGZpbGUgd2l0aCBHRU44NjBUX1NDIGluZm8uCgoqIFVwZGF0ZSBTbWl0aHMgQWVyb3NwYWNlIGFkZHJlc3NlcyBpbiBNQUlOVEFJTkVSUyBmaWxlCgoqIEZpeCBlcnJvciBoYW5kbGluZyBpbiBodXNoJ3MgdmVyc2lvbiBvZiAicnVuIiBjb21tYW5kCgoqIExXTU9OIGV4dGVuc2lvbnM6CiAgLSBTcGxhc2hzY3JlZW4gc3VwcG9ydAogIC0gbW9kZW0gc3VwcG9ydAogIC0gc3lzbW9uIHN1cHBvcnQKICAtIHRlbXBlcmF0dXJlIGRlcGVuZGVuZCBlbmFibGluZyBvZiBMQ0QKCiogQWxsb3cgYm9vdGluZyBmcm9tIG9sZCAiUFBDQm9vdCIgZGlzayBwYXJ0aXRpb25zCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04MjU1IEJvYXJkIC8gTVBDODI1NSBDUFUKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuMy4xOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIE1ha2Ugc3VyZSBCbG9jayBMb2NrIEJpdHMgZ2V0IGNsZWFyZWQgaW4gUjM2ME1QSSBmbGFzaCBkcml2ZXIKCiogTVBDODIzIExDRCBkcml2ZXI6IEZpbGwgY29sb3IgbWFwIGJhY2t3YXJkcywgdG8gYWxsb3cgZm9yIHN0ZWFkeQogIGRpc3BsYXkgd2hlbiBMaW51eCB0YWtlcyBvdmVyCgoqIFBhdGNoIGJ5IEVyd2luIFJvbCwgMjcgRmViIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFJURU1TICh0aGlzIHRpbWUgZm9yIHJlYWwpLgoKKiBBZGQgc3VwcG9ydCBmb3IgImJtcCBpbmZvIiBhbmQgImJtcCBkaXNwbGF5IiBjb21tYW5kcyB0byBsb2FkCiAgYml0bWFwIGltYWdlczsgdGhpcyBjYW4gYmUgdXNlZCAoZm9yIGV4YW1wbGUgaW4gYSAicHJlYm9vdCIKICBjb21tYW5kKSB0byBkaXNwbGF5IGEgc3BsYXNoIHNjcmVlbiB2ZXJ5IHF1aWNrbHkgYWZ0ZXIgcG93ZXJvbi4KCiogQWRkIHN1cHBvcnQgZm9yIDEzMyBNSHogY2xvY2sgb24gSU5DQS1JUCBib2FyZAoKKiBQYXRjaCBieSBMdXR6IERlbm5pZywgMTAgQXByIDIwMDM6CiAgVXBkYXRlIGZvciBSMzYwTVBJIGJvYXJkCgoqIEFkZCBuZXcgbWVhbmluZyB0byAiYXV0b3N0YXJ0IiBlbnZpcm9ubWVudCB2YXJpYWJsZToKICBJZiBzZXQgdG8gIm5vIiwgYSBzdGFuZGFsb25lIGltYWdlIHBhc3NlZCB0byB0aGUKICAiYm9vdG0iIGNvbW1hbmQgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIGxvYWQgYWRkcmVzcwogIChhbmQgZXZlbnR1YWxseSB1bmNvbXByZXNzZWQpLCBidXQgTk9UIGJlIHN0YXJ0ZWQuCiAgVGhpcyBjYW4gYmUgdXNlZCB0byBsb2FkIGFuZCB1bmNvbXByZXNzIGFyYml0cmFyeQogIGRhdGEuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTAgQXByIDIwMDM6CiAgQ2hhbmdlZCBESENQIGNsaWVudCB0byB1c2UgSVAgYWRkcmVzcyBmcm9tIHNlcnZlciBvcHRpb24gZmllbGQgIzU0CiAgZnJvbSB0aGUgT0ZGRVIgcGFja2V0IGluIHRoZSBzZXJ2ZXIgb3B0aW9uIGZpZWxkICM1NCBpbiB0aGUgUkVRVUVTVAogIHBhY2tldC4gVGhpcyBmaXhlcyBhIHByb2JsZW0gdXNpbmcgYSBXaW5kb3dzIDIwMDAgREhDUCBzZXJ2ZXIsCiAgd2hlcmUgdGhlIERIQ1Atc2VydmVyIGlzIG5vdCB0aGUgVEZUUC1zZXJ2ZXIuCgoqIFNldCBtYXggYnJpZ2h0bmVzcyBmb3IgTU4xMTIzNiBkaXNwbGF5cyBvbiBUUkFCIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04NjJMIG1vZHVsZXMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuMy4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoIGJ5IEFydW4gRGhhcmFua2FyLCA0IEFwciAyMDAzOgogIEFkZCBJRE1BIGV4YW1wbGUgY29kZSAodGVzdGVkIG9uIDgyNjAgb25seSkKCiogQWRkIHN1cHBvcnQgZm9yIFB1cnBsZSBCb2FyZCAoTUlQUzY0IDVLYykKCiogQWRkIHN1cHBvcnQgZm9yIE1JUFM2NCA1S2MgQ1BVcwoKKiBGaXggbWlzc2luZyBzZXR0aW5nIG9mICJsb2FkYWRkciIgYW5kICJib290ZmlsZSIgb24gQVJNIGFuZCBNSVBTCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAwNCBBcHIgMjAwMzoKICAtIHVwZGF0ZSBNSVA0MDUtNCBib2FyZAoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDQgQXByIDIwMDM6CiAgLSBVLUJvb3QgdmVyc2lvbiBlbnZpcm9ubWVudCB2YXJpYWJsZSAidmVyIiBhZGRlZAogICAgKENPTkZJR19WRVJTSU9OX1ZBUklBQkxFKS4KICAtIENoYW5nZWQgUFBDNDA1R1ByIHZlcnNpb24gZnJvbSBBIHRvIEIuCiAgLSBDaGFuZ2VkIENQQ0k0MDUgdG8gdXNlIENUUyBpbnN0ZWFkIG9mIERTUiBvbiBQUEM0MDUgVUFSVDEuCgoqIFBhdGNoZXMgYnkgRGVuaXMgUGV0ZXIsIDAzIEFwcmlsIDIwMDM6CiAgLSBmaXggUENJIElSUXMgb24gTVBMIGJvYXJkcwogIC0gZml4IHR3byBtb3JlIHVuLXJlbG9jYXRlZCBwb2ludGVyIHByb2JsZW1zCgoqIEZpeCBiZWhhdmlvdXIgb2YgInJ1biIgY29tbWFuZDoKICAtIHByaW50IGVycm9yIG1lc3NhZ2UgaXYgdmFyaWFibGUgZG9lcyBub3QgZXhpc3QKICAtIHRlcm1pbmF0ZSBwcm9jZXNzaW5nIG9mIGFyZ3VtZW50cyBpbiBjYXNlIG9mIGVycm9yCgoqIFBhdGNoZXMgYnkgUGV0ZXIgRmlndWxpLCAxMCBNYXIgMjAwMwogIC0gQWRkIHN1cHBvcnQgZm9yIEJUVUFSVCBvbiBQWEEgcGxhdGZvcm0KICAtIEFkZCBzdXBwb3J0IGZvciBXRVAgRVAyNTAgKFBYQSkgYm9hcmQKCiogRml4IGZsYXNoIHByb2JsZW1zIG9uIElOQ0EtSVA7IGFkZCB0b29sIHRvIGFsbG93IGJydW5pbmcgaW1hZ2VzICB0bwogIGZsYXNoIHVzaW5nIGEgQkRJMjAwMAoKKiBJbXBsZW1lbnQgZml4IGZvciBJMkMgRWRnZSBDb25kaXRpb25zIHByb2JsZW0gZm9yIGFsbCBib2FyZHMgdGhhdAogIHVzZSB0aGUgYml0LWJhbmdpbmcgZHJpdmVyIChjb21tb24vc29mdF9pMmMuYykKCiogUGF0Y2ggYnkgTWFydGluIFdpbmlzdG9lcmZlciwgMjMgTWFyIDIwMDMKICAtIEFkZCBwb3J0IHRvIE1QQzU1NS81NTYgbWljcm9jb250cm9sbGVycwogIC0gQWRkIHN1cHBvcnQgZm9yIGNtaSBjdXN0b21lciBib2FyZCB3aXRoCiAgICBJbnRlbCAyOEYxMjhKM0EsIDI4RjMyMEozQSBvciAyOEY2NDBKM0EgZmxhc2guCgoqIFBhdGNoIGJ5IFJpY2sgQnJvbnNvbiwgMjggTWFyIDIwMDM6CiAgLSBmaXggY29tbW9uL2NtZF9uYW5kLmMKCiogUGF0Y2ggYnkgQXJ1biBEaGFyYW5rYXIsIDI0IE1hciAyMDAzOgogIC0gYWRkIHRocmVhZHMgLyBzY2hlZHVsZXIgZXhhbXBsZSBjb2RlCgoqIEFkZCBwYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMzEgTWFyIDIwMDM6CiAgLSBhZGQgY3RybC1jIHN1cHBvcnQgZm9yIGtlcm1pdCBkb3dubG9hZAogIC0gYWxpZ24gYmRpbmZvIG91dHB1dCBvbiBBUk0KICAtIGNzYjIyNiBib2FyZDogYnJpbmcgaW4gc3luYyB3aXRoIGlubm9rb20vbWVtc2V0dXAuUwogIC0gY3NiMjI2IGJvYXJkOiBmaXggTURSRUZSIGhhbmRsaW5nCiAgLSBtaXNjIGRvYyBmaXhlcyAvIGV4dGVuc2lvbnMKICAtIGlubm9rb20gYm9hcmQ6IGNsZWFudXAsIE1EUkVGUiBmaXggaW4gbWVtc2V0dXAuUywgY29uZmlnIHVwZGF0ZQogIC0gYWRkIEJPT1RfUFJPR1JFU1MgdG8gYXJtbGludXguYwoKKiBBZGQgQ1BVIElELCB2ZXJzaW9uLCBhbmQgY2xvY2sgc3BlZWQgZm9yIElOQ0EtSVAKCiogUGF0Y2hlcyBieSBEYXZlIEVsbGlzLCAxOCBNYXIgMjAwMyBmb3IgU1hOSTg1NVQgYm9hcmQ6CiAgLSBmaXggU1JBTSBhbmQgU0RSQU0gbWVtb3J5IHNpemluZwogIC0gYWRkIHN0YXR1cyBMRUQgc3VwcG9ydAogIC0gYWRkIE1BQyBhZGRyZXNzIGZvciBzZWNvbmQgKFNDQzEpIGV0aGVybmV0IHBvcnQKCiogVXBkYXRlIGRlZmF1bHQgZW52aXJvbm1lbnQgZm9yIFRRTTgyNjAgYm9hcmQKCiogUGF0Y2ggYnkgUmljayBCcm9uc29uLCAxNiBNYXIgMjAwMzoKICAtIEFkZCBOQU5EIGZsYXNoIHN1cHBvcnQgZm9yIHJlYWRpbmcsIHdyaXRpbmcsIGFuZCBlcmFzaW5nIE5BTkQKICAgIGZsYXNoIChjZXJ0YWluIGZvcm1zIG9mIHdoaWNoIGFyZSBjYWxsZWQgU21hcnRNZWRpYSkuCiAgLSBBZGQgc3VwcG9ydCBmb3IgQXRtZWwgQVQ5MVJNOTIwMERLIEFSTTkyMFQgYmFzZWQgZGV2ZWxvcG1lbnQga2l0LgoKKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTkgTWFyIDIwMDM6CiAgLSB1c2UgYXJtLWxpbnV4LWdjYyBhcyBkZWZhdWx0IGNvbXBpbGVyIGZvciBBUk0KICAtIGZpeCBpMmMgZml4dXAgY29kZQogIC0gZml4IG1pc3NpbmcgYmF1ZHJhdGUgc2V0dGluZwogIC0gYWRkZWQgJGxvYWRhZGRyIC8gQ0ZHX0xPQURfQUREUiBzdXBwb3J0IHRvIGxvYWRiCiAgLSBtb3ZlZCAiaWdub3JpbmcgdHJhaWxpbmcgY2hhcmFjdGVycyIgX2JlZm9yZV8gdS1ib290IHdhbnRzIHRvCiAgICBwcmludCBvdXQgZGlhZ25vc3RpY3MgbWVzc2FnZXM7IHJlbW92ZXMgYm9ndXMgY2hhcmFjdGVycyBhdCB0aGUKICAgIGVuZCBvZiB0cmFuc21pc3Npb24KCiogUGF0Y2ggYnkgSm9obiBaaGFuLCAxOCBNYXIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgU2lub1ZlZSBNaWNyb3N5c3RlbXMgU0M4eHggYm9hcmRzCgoqIFBhdGNoIGJ5IFJvbGYgT2ZmZXJtYW5ucywgMjEgTWFyIDIwMDM6CiAgcG9ydGVkIHRoZSBkbnAxMTEwIHJlbGF0ZWQgY2hhbmdlcyBmcm9tIHRoZSBjdXJyZW50IGFybWJvb3QgY3ZzIHRvCiAgY3VycmVudCB1LWJvb3QgY3ZzLiBzbWM5MTExMSBkb2VzIG5vdCB3b3JrLiBwcm9ibGVtIG1hcmtlZCBpbgogIHNtYzkxMTExLmMsIGdyZXAgZm9yICJGSVhNRSIuCgoqIFBhdGNoIGJ5IEJyaWFuIEF1bGQsIDI1IE1hciAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBTVE0gZmxhc2ggY2hpcHMgb24gZWJvbnkgYm9hcmQKCiogQWRkIFBDSSBzdXBwb3J0IGZvciBNUEM4MjUwIEJvYXJkcyAoUE04MjUgbW9kdWxlKQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI1IE1hciAyMDAzOgogIC0gUENJNDA1IHVwZGF0ZS4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMCBNYXIgMjAwMzoKICAtIENQQ0k0MDUyIHVwZGF0ZSAoc3VwcG9ydCBmb3IgcmV2aXNpb24gMykuCiAgLSBTZXQgZWRnZSBjb25kaXRpb25pbmcgY2lyY3VpdHJ5IG9uIFBQQzQwNUdQciBmb3IgY29tcGF0aWJpbGl0eQogICAgdG8gZXhpc3RpbmcgUFBDNDA1R1AgZGVzaWducy4KICAtIENsaXAgdWRpdiB0byA1IGJpdHMgb24gUFBDNDA1IChzZXJpYWwuYykuCgoqIEV4dGVuZCBJTkNBSVAgYm9hcmQgc3VwcG9ydDoKICAtIGFkZCBhdXRvbWF0aWMgUkFNIHNpemUgZGV0ZWN0aW9uCiAgLSBhZGQgImJkaW5mbyIgY29tbWFuZAogIC0gcGFzcyBmbGFzaCBhZGRyZXNzIGFuZCBzaXplIHRvIExpbnV4IGtlcm5lbAogIC0gc3dpdGNoIHRvIDE1MCBNSHogY2xvY2sKCiogQXZvaWQgZmxpY2tlciBvbiB0aGUgVFJBQidzIFZGRCBieSBzeW5jaHJvbml6aW5nIHRoZSBlbmFibGUgd2l0aAogIHRoZSBIU1lOQy9WU1lOQy4gUmVxdWlyZXMgbmV3IENQTEQgY29kZSAoVmVyc2lvbiAxMDEgZm9yIFJldi4gMTAwCiAgYm9hcmRzLCB2ZXJzaW9uIDE1MyBmb3IgUmV2LiAyMDAgYm9hcmRzKS4KCiogUGF0Y2ggYnkgVmxhZGltaXIgR3VyZXZpY2gsIDEyIE1hciAyMDAzOgogIEZpeCByZWxvY2F0aW9uIHByb2JsZW0gb2Ygc3RhdGljYWxseSBpbml0aWFsaXplZCBzdHJpbmcgcG9pbnRlcnMKICBpbiBjb21tb24vY21kX3BjaS5jCgoqIFBhdGNoIGJ5IEthaS1Vd2UgQmz2bSwgMTIgTWFyIDIwMDM6CiAgQ2xlYW51cCAmIGJ1ZyBmaXhlcyBmb3IgSkZGUzIgY29kZToKICAtIHRoZSBtZW1vcnkgbWFuZ2VtZW50IHdhcyBicm9rZW4uIEl0IGNhdXNlZCBoYXZvYyBvbiBtYWxsb2MgYnkKICAgIHdyaXRpbmcgYmV5b25kIHRoZSBibG9jayBib3VuZGFyaWVzLgogIC0gdGhlIGxlbmd0aCBjYWxjdWxhdGlvbiBmb3IgZmlsZXMgd2FzIHdyb25nLCBzb21ldGltZXMgcmVzdWx0aW5nCiAgICBpbiBzaG9ydCBmaWxlIHJlYWRzLgogIC0gZGF0YSBjb3B5aW5nIG5vdyBvcHRpb25hbGx5IHRha2VzIGZyYWdtZW50IHZlcnNpb24gbnVtYmVycyBpbnRvCiAgICBhY2NvdW50LCB0byBhdm9pZCBjb3B5aW5nIGZyb20gb2xkZXIgZGF0YS4KICBTZWUgZG9jL1JFQURNRS5KRkZTMiBmb3IgZGV0YWlscy4KCiogUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAxMiBNYXIgMjAwMzoKICAtIDE2LzMyIE1CIGFuZCA1MC84MCBNSHogc3VwcG9ydCB3aXRoIGF1dG8tZGV0ZWN0aW9uIGZvciBJUDg2MAogIC0gRVRIMDUgYW5kIEJFREJVRyBzdXBwb3J0IGZvciBDVTgyNAogIC0gYWRkZWQgc3VwcG9ydCBmb3IgTWljcm9TeXMgQ1BDNDUKICAtIG5ldyBCT09UUk9NL0ZMQVNIMCBhbmQgRE9DIGJhc2UgZm9yIFBNODI2CgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTIgTWFyIDIwMDM6CiAgRml4IHRoZSBjaHBhcnQgY29tbWFuZCBvbiBpbm5va29tIGJvYXJkCgoqIE5hbWUgY2xlYW51cDoKICBtdiBpbmNsdWRlL2FzbS1pMzg2L3BwY2Jvb3QtaTM4Ni5oIGluY2x1ZGUvYXNtLWkzODYvdS1ib290LWkzODYuaAogIHMvUFBDQm9vdC9VLUJvb3QvIGluIHNvbWUgZmlsZXMKICBzL3BJbWFnZS91SW1hZ2UvICBpbiBzb21lIGZpbGVzCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDE1IEphbiAyMDAzOgogIEZpeCAnJyBjb21tYW5kIGxpbmUgcXVvdGluZwoKKiBQYXRjaCBieSBUaGUgTEVPWCB0ZWFtLCAxOSBKYW4gMjAwMzoKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgRUxQVDg2MCBib2FyZAogIC0gYWRkIHN1cHBvcnQgZm9yIERhbGxhcyBkczE2NHggUlRDCgoqIFBhdGNoZXMgYnkgRGF2aWQgTfxsbGVyLCAzMSBKYW4gMjAwMzoKICAtIG1pbmltYWwgc2V0dXAgZm9yIENhcmRCdXMgYnJpZGdlcwogIC0gYWRkIEVFUFJPTSByZWFkL3dyaXRlIHN1cHBvcnQgaW4gdGhlIENTODkwMCBkcml2ZXIKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgYnVpbHRpbiBJMkMgY29udHJvbGxlciBpbiB0aGUgU2Ftc3VuZyBzM2MyNHgwIGNoaXBzCiAgLSBhZGQgc3VwcG9ydCBmb3IgTVBMJ3MgVkNNQTkgKFNhbXN1bmcgczNjMjQxMCBiYXNlZCkgYm9hcmQKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDQgRmViIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIFJUQyBEUzEzMDcKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDUgRmViIDIwMDM6CiAgZml4IFBMUFJDUi9TQ0NSIGluaXQgc2VxdWVuY2Ugb24gOHh4IHRvIGFsbG93IGZvcgogIGNoYW5nZXMgb2YgRUJERiBieSBzb2Z0d2FyZQoKKiBQYXRjaCBieSBWbGFkaW1pciBHdXJldmljaCwgMDcgRmViIDIwMDM6CiAgIkFQSS1jb21wYXRpYmlsaXR5IHBhdGNoIiBmb3IgNHh4IEkyQyBkcml2ZXIKCiogVFJBQiBmaXhlcyAvIGV4dGVuc2lvbnM6CiAgLSBSZXN0b3JlIFZGRCBicmlnaHRuZXNzIGFzIHNhdmVkIGluIGVudmlyb25tZW50CiAgLSBhZGQgc3VwcG9ydCBmb3IgRnVqaXRzdSBmbGFzaGVzCiAgLSBtYWtlIHN1cmUgYm90aCBidXp6ZXJzIGFyZSB0dXJuZWQgb2ZmIChkcml2ZSBsb3cgbGV2ZWwpCgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAwNiBNYXIgMjAwMzoKICAtIGZpeCBidWcgaW4gQk9PVFAgY29kZSAobXVzdCB1c2UgTmV0Q29weUlQKQogIC0gdXBkYXRlIG9mIENTQjIyNiBwb3J0CiAgLSBjbGVhciBCU1Mgc2VnbWVudCBvbiBYU2NhbGUKICAtIGFkZGVkIHN1cHBvcnQgZm9yIGkyY19pbml0X2JvYXJkKCkgZnVuY3Rpb24KICAtIHVwZGF0ZSB0byB0aGUgSW5ub2tvbSBwbGF0dGZvcm0KCiogRXh0ZW5kIHN1cHBvcnQgZm9yIHJlZHVuZGFuZCBlbnZpcm9ubWVudHMgZm9yIGNvbmZpZ3VyYXRpb25zIHdoZXJlCiAgZW52aXJvbm1lbnQgc2l6ZSA8IHNlY3RvciBzaXplCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxMyBGZWIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgTW90b3JvbGEgTVBDODI2NkFEUyBib2FyZAoKKiBQYXRjaCBieSBLeWxlIEhhcnJpcywgMTkgRmViIDIwMDM6CiAgcGF0Y2hlcyBmb3IgdGhlIEludGVsIGx1YmJvY2sgYm9hcmQ6CiAgbWVtc2V0dXAuUyAtIGdlbmVyYWwgY2xlYW51cCAoYmFzZWQgb24gUm9iZXJ0J3MgY3NiMjI2IGNvZGUpCiAgZmxhc2guYyAtIG92ZXJoYXVsLCBhY3R1YWxseSB3b3JrcyBub3cKICBsdWJib2NrLmMgLSBmaXggaW5pdCBmdW5jcyB0byByZXR1cm4gcHJvcGVyIHZhbHVlCgoqIFBhdGNoIGJ5IEtlbm5ldGggSm9oYW5zc29uLCAyNiBGZWIgMjAwMzoKICAtIEZpeGVkIG9mZiBieSBvbmUgaW4gUkZUQSBjYWxjdWxhdGlvbi4KICAtIE5vIG5lZWQgdG8gYWJvcnQgd2hlbiBMREYgaXMgbG93ZXIgdGhhbiB3ZSBjYW4gcHJvZ3JhbSBpdCdzIG9ubHkKICAgIG1pbmltdW0gdGltaW5nIHNvIGNsYW1wIGl0IHRvIHdoYXQgd2UgY2FuIGRvLgogIC0gVGFrZXMgZnVuY3Rpb24gcG9pbnRlciB0byBmdW5jdGlvbiBmb3IgcmVhZGluZyB0aGUgc3BkX252cmFtLiBVc2VmdWxsCiAgICBmb3IgZmFraW5nIGRhdGEgb3IgaGFyZGNvZGUgYSBtb2R1bGUgd2l0aG91dCB0aGUgbnZyYW0uCiAgLSBmaXggb3RoZXIgdXNlciBmb3IgYWJvdmUgY2hhbmdlCiAgLSBmaXggc29tZSBjb21tZW50cy4KCiogUGF0Y2hlcyBieSBCcmlhbiBXYWl0ZSwgMjYgRmViIDIwMDM6CiAgLSBmaXggcG9ydCBmb3IgZXZiNjQyNjAgYm9hcmQKICAtIGZpeCBQQ0kgZm9yIGV2YjY0MjYwIGJvYXJkCiAgLSBmaXggUENJIHNjYW4KCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDEgTWFyIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIEVNSyBUT1A4NjAgTW9kdWxlCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDAyIE1hciAyMDAzOgogIEFkZCBTUEQgRUVQUk9NIHN1cHBvcnQgZm9yIE1QQzgyNjBBRFMgYm9hcmQKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAyMSBKYW4gMjAwMzoKICAtIEFkZCBzdXBwb3J0IGZvciBJbm5va29tIGJvYXJkCiAgLSBEb24ndCBjb21wbGFpbiBpZiAiaW5zdGFsbCIgZmFpbHMKICAtIFJFQURNRSBjbGVhbnVwIChyZW1vdmUgZHVwbGljYXRlZCBsaW5lcykKICAtIFVwZGF0ZSBQWEEgaGVhZGVyIGZpbGVzCgoqIEFkZCBkb2N1bWVudGF0aW9uIGZvciBleGlzdGluZyBQT1NUIGNvZGUgKGRvYy9SRUFETUUuUE9TVCkKCiogUGF0Y2ggYnkgTGF1ZG5leSBSZW4sIDE1IEphbiAyMDAzOgogIEZpeCBoYW5kbGluZyBvZiByZWR1bmRhbmQgZW52aXJvbm1lbnQgaW4gInRvb2xzL2VudmNyYy5jIgoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAyOCBGZWIgMjAwMzoKICBBZGQgYmVkYnVnIHN1cHBvcnQgZm9yIDgyNHggc3lzdGVtcwoKKiBBZGQgc3VwcG9ydCBmb3IgMTYgTUIgZmxhc2ggY29uZmlndXJhdGlvbiBvZiBUUkFCIGJvYXJkCgoqIFBhdGNoIGJ5IEVyd2luIFJvbCwgMjcgRmViIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFJURU1TCgoqIEFkZCBpbWFnZSBpbmZvcm1hdGlvbiB0byBSRUFETUUKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxOCBGZWIgMjAwMzoKICBDUENJSVNFUjQgY29uZmlndXJhdGlvbiB1cGRhdGVkLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE3IEZlYiAyMDAzOgogIEZpeGVkIGJ1ZyBpbiBleHQuIHNlcmlhbCBjbG9jayBzZXR1cCBvbiBQUEM0MDUgKHNpbmNlIFBQQzQ0MCBwb3J0KS4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBGZWIgMjAwMzoKICBBZGQgInBjaWRlbGF5IiBlbnZpcm9ubWVudCB2YXJpYWJsZSAoaW4gbXMsIGVuYWJsZWQgdmlhCiAgQ09ORklHX1BDSV9CT09UREVMQVkpLgogIFBDSSBzcGVjIDIuMiBkZWZpbmVzLCB0aGF0IGEgcGNpIHRhcmdldCBoYXMgMl4yNSBwY2kgY2xvY2tzIGFmdGVyCiAgUlNUIyB0byByZXNwb25kIHRvIGNvbmZpZ3VyYXRpb24gY3ljbGVzICgzM01IeiAtPiAxcykuCgoqIEZpeCBkdWFsIFBDTUNJQSBzbG90IHN1cHBvcnQgKHdoZW4gcnVubmluZyB3aXRoIGp1c3Qgb25lCiAgc2xvdCBwb3B1bGF0ZWQpCgoqIEFkZCBWRkQgdHlwZSBkZXRlY3Rpb24gdG8gdHJhYiBib2FyZAoKKiBleHRlbmQgZHJpdmVycy9jczg5MDAuYyBkcml2ZXIgdG8gc3luY2hyb25pemUgIGV0aGFkZHIgIGVudmlyb25tZW50CiAgdmFyaWFibGUgd2l0aCB2YWx1ZSBpbiB0aGUgRUVQUk9NCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTAgRmViIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIDRNQiBhbmQgMTI4TUIgb25ib2FyZCBTRFJBTSAoY3B1L3BwYzR4eC9zZHJhbS5jKQoKKiBBZGQgc3VwcG9ydCBmb3IgTUlQUzMyIDRLYyBDUFVzCgoqIEFkZCBzdXBwb3J0IGZvciBJTkNBLUlQIEJvYXJkCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjIuMjoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgZHVhbCBldGhlcm5ldCBzdXBwb3J0IG9uIFBNODI2CgoqIEFkZCBzdXBwb3J0IGZvciBMWFQ5NzEgUEhZIG9uIFBNODI2CgoqIFBhdGNoIGJ5IFRvcmQgQW5kZXJzc29uLCAxNiBKYW4gMjAwMzoKICBGaXggZmxhc2ggc2VjdG9yIGNvdW50IGZvciBUUU04eHhMCgoqIEZpeCBJMkMgRUVQUk9NIHByb2JsZW0gb24gSUNVODYyIGJvYXJkICh3b3VsZCBvbmx5IHdyaXRlIHRoZSBmaXJzdAogIDE2IGJ5dGVzIG91dCBvZiBlYWNoIDMyIGJ5dGUgYmxvY2spCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjIuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgc3VwcG9ydCBmb3IgVjM3IGJvYXJkCiAgKHBhdGNoIGJ5IErzbiBCZW5lZGlrdHNzb24sIDExIERlYyAyMDAyKQoKKiBVcGRhdGUgYmF1ZHJhdGUgaW4gYmRfaW5mbyB3aGVuIGl0IGdldHMgY2hhbmdlZAoKKiBBZGQgd2F0Y2hkb2cgdHJpZ2dlciBwb2ludHMgd2hpbGUgd2FpdGluZyBmb3Igc2VyaWFsIHBvcnQKICAoc28gZmFyIG9ubHkgOHh4IC0tIG5lZWRlZCBvbiBMV01PTiB3aXRoIDEwMG1zIHdhdGNoZG9nKQoKKiBJbXByb3ZlIGNvbW1hbmQgbGluZSB0b29sIHRvIGFjY2VzcyB0aGUgVS1Cb290J3MgZW52aXJvbm1lbnQKICAoZmlndXJhdGlvbiBvZiB0aGUgdXRpbGl0eSwgdXNpbmcgYSBjb25maWcgZmlsZSkKCiogQWRkIHNpbmdsZSBxdW90ZSBzdXBwb3J0IGZvciAob2xkKSBjb21tYW5kIGxpbmUgcGFyc2VyCgoqIFN3aXRjaCBMV01PTiBib2FyZCBkZWZhdWx0IGNvbmZpZyBmcm9tIEZSQU0gdG8gRUVQUk9NOwogIGluIFBPU1QsIEVFUFJPTSBzaG93cyB1cCBvbiA4IGFkZHJlc3NlcwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogVXNlIDEtYnl0ZS1yZWFkIGluc3RlYWQgb2YgLXdyaXRlIGZvciBpcHJvYmUoKSBmdW5jdGlvbgogIEFkZCBpMmMgY29tbWFuZHMgdG8gUE04MjYgY29uZmlnCgoqIGV4dGVuZCBJMkMgUE9TVCBjb2RlOiBjaGVjayBmb3IgbGlzdCBvbiBrbm93biBhZGRyZXNzZXMKCiogSW1wcm92ZSBsb2cgYnVmZmVyIGNvZGU7IHVzZSAibG9nbGV2ZWwiIHRvIGRlY2lkZSB3aGljaCBtZXNzYWdlcwogIHRvIGxvZyBvbiB0aGUgY29uc29sZSwgdG9vIChsaWtlIGluIExpbnV4KTsgZ2V0IHJpZCBvZiAibG9nc3RhcnQiCgoqIEFkZCBjb21tYW5kIGxpbmUgdG9vbCB0byBhY2Nlc3MgdGhlIFUtQm9vdCdzIGVudmlyb25tZW50CiAgKGJvYXJkLXNwZWNpZmljIGZvciBUUkFCIG5vdywgdG8gYmUgZml4ZWQgbGF0ZXIpCgoqIFBhdGNoIGJ5IEhhbnMtSm9lcmcgRnJpZWRlbiwgMDYgRGVjIDIwMDIKICBGaXggbWlzYyBwcm9ibGVtcyB3aXRoIEFtaWdhT25lIHN1cHBvcnQKCiogUGF0Y2ggYnkgQ2hyaXMgSGFsbGluYW4sIDMgRGVjIDIwMDI6CiAgbWlub3IgY2xlYW51cCB0byB0aGUgTVBDODI0NSBFUElDIGRyaXZlcgoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0ICwgMjggTm92IDIwMDIKICBBZGQgc3VwcG9ydCBmb3IgZXh0ZXJuYWwgKFNJVSkgaW50ZXJydXB0cyBvbiBNUEM4eHgKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCAsIDI4IE5vdiAyMDAyCiAgRml4IG5lc3RlZCBzeXNjYWxscyBidWcgaW4gc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMKCiogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAyNyBOb3YgMjAwMjoKICBmaXggb3V0cHV0IG9mICJwY2lpbmZvIiBjb21tYW5kIGZvciBDYXJkQnVzIGJyaWRnZSBkZXZpY2VzLgoKKiBGaXggYnVnIGluIFRRTTgyNjAgYm9hcmQgZGV0ZWN0aW9uIC0gYm9hcmRzIGdvdCBzdHVjayB3aGVuIGJvYXJkIElECiAgd2FzIG5vdCByZWFkYWJsZQoKKiBBZGQgTEVEIGluZGljYXRpb24gZm9yIElERSBhY3Rpdml0eSBvbiBLVVA0SyBib2FyZAoKKiBGaXggc3RhcnR1cCBwcm9ibGVtcyB3aXRoIFZGRCBkaXNwbGF5IG9uIFRSQUIKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjAgTm92IDIwMDIKICBBZGQgZHJpdmVyIGZvciBFcHNvbiBTRUQxMzgwNiBncmFwaGljIGNvbnRyb2xsZXIuCiAgQWRkIHN1cHBvcnQgZm9yIEJNUCBsb2dvcyBpbiBjZmJfY29uc29sZSBkcml2ZXIuCgoqIEFkZGVkIHN1cHBvcnQgZm9yIGJvdGggUENNQ0lBIHNsb3RzIChhdCB0aGUgc2FtZSB0aW1lISkgb24gTVBDOHh4CgoqIFBhdGNoIGJ5IFJvZCBCb3ljZSwgMjEgTm92IDIwMDI6CiAgZml4IFBDTUNJQSBvbiBNQlg4eHggYm9hcmQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCAsIDIxIE5vdiAyMDAyCiAgQWRkIENGR19DUE1fUE9TVF9XT1JEX0FERFIgdG8gbWFrZSB0aGUgb2Zmc2V0IG9mIHRoZQogIGJvb3Rtb2RlIHdvcmQgaW4gRFBSQU0gY29uZmlndXJhYmxlCgoqIFBhdGNoIGJ5IERhbmllbCBFbmdzdHL2bSwgMTggTm92IDIwMDI6CiAgRml4ZXMgZm9yIHg4NiBwb3J0IChtb3N0bHkgc3RyaW5ncyBpc3N1ZXMpCgoqIFBhdGNoIGJ5IEtlbiBDaG91LCAxOCBOb3YgMjAwMjoKICBGaXggZm9yIG5hdHNlbWkgTklDIGNhcmRzIChEUDgzODE1KQoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxOSBOb3YgMjAwMjoKICBmaXggYSBidWcgZm9yIHRoZSBNSUkgY29uZmlndXJhdGlvbiwgYW5kIHNvbWUgd2FybmluZ3MKCiogUGF0Y2ggYnkgVGhvbWFzIEZyaWVkZW4sIDEzIE5vdiAyMDAyOgogIEFkZCBjb2RlIGZvciBBbWlnYU9uZSBib2FyZAogIChwcmVsaW1pbmFyeSBtZXJnZSB0byBVLUJvb3QsIHN0aWxsIFdJUCkKCiogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDEyIE5vdiAyMDAyOgogIC0gQWRkaW5nIFVSTCBmb3IgSUVFRSBPVUkgbG9va3VwCiAgLSBNYWtpbmcgdGhlIGF1dG9ib290ICNkZWZpbmVzIGRlcGVuZGVudCBvbiBDT05GSUdfQVVUT0JPT1RfS0VZRUQKICAgIGJlaW5nIGRlZmluZWQuCiAgLSBJbiB0aGUgQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUyAjZGVmaW5lLCB0aGUgcm9vdC1vbi1pbml0cmQgYW5kCiAgICByb290LW9uLW5mcyBtYWNyb3MgYXJlIGRlc2lnbmVkIHRvIHN3aXRjaCBob3cgdGhlIGRlZmF1bHQgYm9vdAogICAgbWV0aG9kIGdldHMgZGVmaW5lZC4KCiogUGF0Y2ggYnkgRGFuaWVsIEVuZ3N0cvZtLCAxMyBOb3YgMjAwMjoKICBBZGQgc3VwcG9ydCBmb3IgaTM4NiBhcmNoaXRlY3R1cmUgYW5kIEFNRCBTQzUyMCBib2FyZAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxMiBOb3YgMjAwMjoKICBBZGQgc3VwcG9ydCBmb3IgRE9TIGZpbGVzeXN0ZW0gYW5kIGJvb3RpbmcgZnJvbSBET1MgZmxvcHB5IGRpc2sKCiogUGF0Y2ggYnkgSmltIFNhbmRveiwgMDcgTm92IDIwMDI6CiAgSW5jcmVhc2UgbnVtYmVyIG9mIG5ldHdvcmsgUlggYnVmZmVycyAoUEtUQlVGU1JYIGluCiAgImluY2x1ZGUvbmV0LmgiKSBmb3IgRUVQUk8xMDAgYmFzZWQgYm9hcmRzIChlc3BlY2lhbGx5IFNQODI0MCkKICB3aGljaCBzaG93ZWQgIlJlY2VpdmVyIGlzIG5vdCByZWFkeSIgZXJyb3JzIHdoZW4gVS1Cb290IHdhcwogIHByb2Nlc3NpbmcgdGhlIHJlY2VpdmUgYnVmZmVycyBzbG93ZXIgdGhhbiB0aGUgbmV0d29yayBjb250cm9sbGVyCiAgd2FzIGZpbGxpbmcgdGhlbS4KCiogUGF0Y2ggYnkgQW5kcmVhcyBPYmVycml0dGVyLCAwOSBOb3YgMjAwMjoKICBDaGFuZ2UgYmVoYXZpb3VyIG9mIE5ldExvb3AoKTogcmV0dXJuIC0xIGZvciBlcnJvcnMsIGZpbGVzaXplCiAgb3RoZXJ3aXNlOyByZXR1cm4gY29kZSAwIGlzIHZhbGlkIGFuIG1lYW5zIG5vIGZpbGUgbG9hZGVkIC0gaW4gdGhpcwogIGNhc2UgdGhlIGVudmlyb25tZW50IHN0aWxsIGdldHMgdXBkYXRlZCEKCiogUGF0Y2hlcyBieSBKb24gRGlla2VtYSwgOSBOb3YgMjAwMjoKICAtIGltcHJvdmUgQURDL0RBQyBjbG9ja2luZyBvbiB0aGUgU0FDU25nIGJvYXJkIHRvIGFsaWduCiAgICB0aGUgZmFpbGluZyBlZGdlcyBvZiBMUkNMSyBhbmQgU0NMSwogIC0gc2JjODI2MCBjb25maWd1cmF0aW9uIHR3ZWFrcwogIC0gYWRkIHN0YXR1cyBMRUQgc3VwcG9ydCBmb3IgODJ4eCBzeXN0ZW1zCiAgLSB3aXJlIHNzcGkvc3NwbyBjb21tYW5kcyBpbnRvIGNvbW1hbmQgaGFuZGxlcjsgaW1wcm92ZWQgZXJyb3IKICAgIGhhbmRsZXJpbmcKICAtIGFkZCB0aW1lc3RhbXAgc3VwcG9ydCBhbmQgYWx0ZXJuYXRlIG1lbW9yeSB0ZXN0IHRvIHRoZQogICAgU0FDU25nIGNvbmZpZ3VyYXRpb24KCiogUGF0Y2ggYnkgVmluY2UgSHVzb3Zza3ksIDcgTm92IDIwMDI6CiAgQWRkICItbiIgdG8gbGlua2VyIG9wdGlvbnMgdG8gZ2V0IHJpZCBvZiAiTm90IGVub3VnaCByb29tIGZvcgogIHByb2dyYW0gaGVhZGVycyIgcHJvYmxlbQoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDA1IE5vdiAyMDAyCiAgUmVuYW1lIENPTkZJR19QTExfSU5QVVRfRlJFUSB0byBDT05GSUdfU1lTX0NMS19GUkVRCiAgc28gd2UgY2FuIHVzZSBhbiBhbHJlYWR5IGV4aXN0aW5nIG5hbWUKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDUgTm92IDIwMDIKICBIYXJkd2FyZSByZWxhdGllZCBpbXByb3ZtZW50cyBpbiBGREMgYm9vdCBjb2RlCgoqIFBhdGNoIGJ5IEhvbGdlciBTY2h1cmlnLCA1IE5vdiAyMDAyOgogIE1ha2UgdGhlIFBYQSByZWFsbHkgY2hhbmdlIGl0J3MgZnJlcXVlbmN5CgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDA1IE5vdiAyMDAyCiAgQWRkIHN1cHBvcnQgZm9yIHNsYXZlIHNlcmlhbCBTcGFydGFuIDIgRlBHQXMKCiogRml4IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChNQUMgIGFkZHJlc3MpICBpbiAgOHh4ICBTQ0MvRkVDICBldGhlcm5ldAogIGRyaXZlcnMKCiogQWRkIHN1cHBvcnQgZm9yIGxvZyBidWZmZXIgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byBMaW51eCBrZXJuZWwncwogIHN5c2xvZyBtZWNoYW5pc207IHVzZWQgZXNwZWNpYWxseSBmb3IgUE9TVCByZXN1bHRzLgoKKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAzMSBPY3QgMjAwMjoKICBBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBrdXA0ayBib2FyZAoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDA0IE5vdiAyMDAyOgogIC0gdXNlIHdhdGNoZG9nIHRvIHJlc2V0IFBYQTI1MCBzeXN0ZW1zCiAgLSBhZGRlZCBwcm9ncmVzcyBjYWxsYmFja3MgdG8gKHNvbWUgb2YgdGhlKSBBUk0gY29kZQogIC0gdXBkYXRlIGZvciBDb2dlbnQgQ1NCMjI2IGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBGUFM4NjAgYm9hcmQKCiogUGF0Y2ggYnkgR3VpbGxhdW1lIEFsZXhhbmRyZSwsIDA0IE5vdiAyMDAyOgogIEltcHJvdmUgUENJIGFjY2VzcyBvbiAzMi1iaXRzIENvbXBhY3QgUENJIGJ1cwoKKiBGaXggbWRlbGF5KCkgb24gVFJBQiAtIHRoaXMgd2FzIHN0aWxsIHRoZSBkZWJ1Z2dpbmcgdmVyc2lvbiB3aXRoCiAgc2Vjb25kcyBpbnN0ZWFkIG9mIG1zLgoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEgTm92IDIwMDI6CiAgWFNjYWxlIHJlbGF0ZWQgY2xlYW51cCAoYWZmZWN0cyBhbGwgQVJNIGJvYXJkcykKCiogQ2xlYW51cCBvZiBuYW1lcyBhbmQgUkVBRE1FLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpOb3RlcyBmb3IgVS1Cb290IDAuMS4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGlzIGlzIHRoZSBpbml0aWFsIHZlcnNpb24gb2YgIkRhcyBVLUJvb3QiLCB0aGUgVW5pdmVyc2FsIEJvb3QgTG9hZGVyLgoKSXQgaXMgYmFzZWQgb24gdmVyc2lvbiAyLjAuMCAodGhlICJIYWxsb3dlZW4gUmVsZWFzZSIpIG9mIFBQQ0Jvb3QuCkZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGlzdG9yeSBvZiB0aGUgcHJvamVjdCBwbGVhc2Ugc2VlIHRoZQpQUENCb290IHByb2plY3QgcGFnZSBhdCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3BwY2Jvb3QKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K