ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICBEZWJ1Z2dpbmcgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKCQkJICAgICAgICAgICAgICAgYnkKCQlEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pCgkJQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZXN0IHZpZXdlZCB3aXRoIGZpeGVkIHdpZHRoIGZvbnRzIAoKT3ZlcnZpZXcgb2YgRG9jdW1lbnQ6Cj09PT09PT09PT09PT09PT09PT09PQpUaGlzIGRvY3VtZW50IGlzIGludGVuZGVkIHRvIGdpdmUgYW4gZ29vZCBvdmVydmlldyBvZiBob3cgdG8gZGVidWcgCkxpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIGl0IGlzbid0IGludGVuZGVkIGFzIGEgY29tcGxldGUgcmVmZXJlbmNlICYgbm90IGEKdHV0b3JpYWwgb24gdGhlIGZ1bmRhbWVudGFscyBvZiBDICYgYXNzZW1ibHksIGl0IGRvc2VuJ3QgZ28gaW50bwozOTAgSU8gaW4gYW55IGRldGFpbC4gSXQgaXMgaW50ZW5kZWQgdG8gY29tcGxlbWVudCB0aGUgZG9jdW1lbnRzIGluIHRoZQpyZWZlcmVuY2Ugc2VjdGlvbiBiZWxvdyAmIGFueSBvdGhlciB3b3J0aHdoaWxlIHJlZmVyZW5jZXMgeW91IGdldC4KCkl0IGlzIGludGVuZGVkIGxpa2UgdGhlIEVudGVycHJpc2UgU3lzdGVtcyBBcmNoaXRlY3R1cmUvMzkwIFJlZmVyZW5jZSBTdW1tYXJ5CnRvIGJlIHByaW50ZWQgb3V0ICYgdXNlZCBhcyBhIHF1aWNrIGNoZWF0IHNoZWV0IHNlbGYgaGVscCBzdHlsZSByZWZlcmVuY2Ugd2hlbgpwcm9ibGVtcyBvY2N1ci4KCkNvbnRlbnRzCj09PT09PT09ClJlZ2lzdGVyIFNldApBZGRyZXNzIFNwYWNlcyBvbiBJbnRlbCBMaW51eApBZGRyZXNzIFNwYWNlcyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQpUaGUgTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUgS2VybmVsIFRhc2sgU3RydWN0dXJlClJlZ2lzdGVyIFVzYWdlICYgU3RhY2tmcmFtZXMgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKQSBzYW1wbGUgcHJvZ3JhbSB3aXRoIGNvbW1lbnRzCkNvbXBpbGluZyBwcm9ncmFtcyBmb3IgZGVidWdnaW5nIG9uIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCkZpZ3VyaW5nIG91dCBnY2MgY29tcGlsZSBlcnJvcnMKRGVidWdnaW5nIFRvb2xzCm9iamR1bXAKc3RyYWNlClBlcmZvcm1hbmNlIERlYnVnZ2luZyAKRGVidWdnaW5nIHVuZGVyIFZNCnMvMzkwICYgei9BcmNoaXRlY3R1cmUgSU8gT3ZlcnZpZXcKRGVidWdnaW5nIElPIG9uIHMvMzkwICYgei9BcmNoaXRlY3R1cmUgdW5kZXIgVk0KR0RCIG9uIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKU3RhY2sgY2hhaW5pbmcgaW4gZ2RiIGJ5IGhhbmQKRXhhbWluaW5nIGNvcmUgZHVtcHMKbGRkCkRlYnVnZ2luZyBtb2R1bGVzClRoZSBwcm9jIGZpbGUgc3lzdGVtClN0YXJ0aW5nIHBvaW50cyBmb3IgZGVidWdnaW5nIHNjcmlwdGluZyBsYW5ndWFnZXMgZXRjLgpEdW1wdG9vbCAmIExjcmFzaApTeXNScQpSZWZlcmVuY2VzClNwZWNpYWwgVGhhbmtzCgpSZWdpc3RlciBTZXQKPT09PT09PT09PT09ClRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZXMgaGF2ZSB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycy4KIAoxNiAgR2VuZXJhbCBwcm9wb3NlIHJlZ2lzdGVycywgMzIgYml0IG9uIHMvMzkwIDY0IGJpdCBvbiB6L0FyY2hpdGVjdHVyZSwgcjAtcjE1IG9yIGdwcjAtZ3ByMTUgdXNlZCBmb3IgYXJpdGhtZXRpYyAmIGFkZHJlc3NpbmcuIAoKMTYgQ29udHJvbCByZWdpc3RlcnMsIDMyIGJpdCBvbiBzLzM5MCA2NCBiaXQgb24gei9BcmNoaXRlY3R1cmUsICggY3IwLWNyMTUga2VybmVsIHVzYWdlIG9ubHkgKSB1c2VkIGZvciBtZW1vcnkgbWFuYWdlbWVudCwKaW50ZXJydXB0IGNvbnRyb2wsZGVidWdnaW5nIGNvbnRyb2wgZXRjLgoKMTYgQWNjZXNzIHJlZ2lzdGVycyAoIGFyMC1hcjE1ICkgMzIgYml0IG9uIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKbm90IHVzZWQgYnkgbm9ybWFsIHByb2dyYW1zIGJ1dCBwb3RlbnRpYWxseSBjb3VsZCAKYmUgdXNlZCBhcyB0ZW1wb3Jhcnkgc3RvcmFnZS4gVGhlaXIgbWFpbiBwdXJwb3NlIGlzIHRoZWlyIDEgdG8gMQphc3NvY2lhdGlvbiB3aXRoIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgYW5kIGFyZSB1c2VkIGluCnRoZSBrZXJuZWwgZm9yIGNvcHlpbmcgZGF0YSBiZXR3ZWVuIGtlcm5lbCAmIHVzZXIgYWRkcmVzcyBzcGFjZXMuCkFjY2VzcyByZWdpc3RlciAwICggJiBhY2Nlc3MgcmVnaXN0ZXIgMSBvbiB6L0FyY2hpdGVjdHVyZSAoIG5lZWRzIDY0IGJpdCAKcG9pbnRlciApICkgaXMgY3VycmVudGx5IHVzZWQgYnkgdGhlIHB0aHJlYWQgbGlicmFyeSBhcyBhIHBvaW50ZXIgdG8KdGhlIGN1cnJlbnQgcnVubmluZyB0aHJlYWRzIHByaXZhdGUgYXJlYS4KCjE2IDY0IGJpdCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKGZwMC1mcDE1ICkgSUVFRSAmIEhGUCBmbG9hdGluZyAKcG9pbnQgZm9ybWF0IGNvbXBsaWFudCBvbiBHNSB1cHdhcmRzICYgYSBGbG9hdGluZyBwb2ludCBjb250cm9sIHJlZyAoRlBDKSAKNCAgNjQgYml0IHJlZ2lzdGVycyAoZnAwLGZwMixmcDQgJiBmcDYpIEhGUCBvbmx5IG9uIG9sZGVyIG1hY2hpbmVzLgpOb3RlOgpMaW51eCAoY3VycmVudGx5KSBhbHdheXMgdXNlcyBJRUVFICYgZW11bGF0ZXMgRzUgSUVFRSBmb3JtYXQgb24gb2xkZXIgbWFjaGluZXMsCiggcHJvdmlkZWQgdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIGZvciB0aGlzICkuCgoKVGhlIFBTVyBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgcmVnaXN0ZXIgb24gdGhlIG1hY2hpbmUgaXQKaXMgNjQgYml0IG9uIHMvMzkwICYgMTI4IGJpdCBvbiB6L0FyY2hpdGVjdHVyZSAmIHNlcnZlcyB0aGUgcm9sZXMgb2YgCmEgcHJvZ3JhbSBjb3VudGVyIChwYyksIGNvbmRpdGlvbiBjb2RlIHJlZ2lzdGVyLG1lbW9yeSBzcGFjZSBkZXNpZ25hdG9yLgpJbiBJQk0gc3RhbmRhcmQgbm90YXRpb24gSSBhbSBjb3VudGluZyBiaXQgMCBhcyB0aGUgTVNCLgpJdCBoYXMgc2V2ZXJhbCBhZHZhbnRhZ2VzIG92ZXIgYSBub3JtYWwgcHJvZ3JhbSBjb3VudGVyCmluIHRoYXQgeW91IGNhbiBjaGFuZ2UgYWRkcmVzcyB0cmFuc2xhdGlvbiAmIHByb2dyYW0gY291bnRlciAKaW4gYSBzaW5nbGUgaW5zdHJ1Y3Rpb24uIFRvIGNoYW5nZSBhZGRyZXNzIHRyYW5zbGF0aW9uLAplLmcuIHN3aXRjaGluZyBhZGRyZXNzIHRyYW5zbGF0aW9uIG9mZiByZXF1aXJlcyB0aGF0IHlvdQpoYXZlIGEgbG9naWNhbD1waHlzaWNhbCBtYXBwaW5nIGZvciB0aGUgYWRkcmVzcyB5b3UgYXJlCmN1cnJlbnRseSBydW5uaW5nIGF0LgoKICAgICAgQml0ICAgICAgICAgICBWYWx1ZQpzLzM5MCB6L0FyY2hpdGVjdHVyZQowICAgICAgIDAgICAgIFJlc2VydmVkICggbXVzdCBiZSAwICkgb3RoZXJ3aXNlIHNwZWNpZmljYXRpb24gZXhjZXB0aW9uIG9jY3Vycy4KCjEgICAgICAgMSAgICAgUHJvZ3JhbSBFdmVudCBSZWNvcmRpbmcgMSBQRVIgZW5hYmxlZCwgCgkgICAgICBQRVIgaXMgdXNlZCB0byBmYWNpbGl0aXRhdGUgZGVidWdnaW5nIGUuZy4gc2luZ2xlIHN0ZXBwaW5nLgoKMi00ICAgIDItNCAgICBSZXNlcnZlZCAoIG11c3QgYmUgMCApLiAKCjUgICAgICAgNSAgICAgRHluYW1pYyBhZGRyZXNzIHRyYW5zbGF0aW9uIDE9REFUIG9uLgoKNiAgICAgICA2ICAgICBJbnB1dC9PdXRwdXQgaW50ZXJydXB0IE1hc2sKCjcgICAgICAgNyAgICAgRXh0ZXJuYWwgaW50ZXJydXB0IE1hc2sgdXNlZCBwcmltYXJpbHkgZm9yIGludGVycHJvY2Vzc29yIHNpZ25hbGxpbmcgJiAKCSAgICAgIGNsb2NrIGludGVycnVwdHMuCgo4LTExICA4LTExICAgIFBTVyBLZXkgdXNlZCBmb3IgY29tcGxleCBtZW1vcnkgcHJvdGVjdGlvbiBtZWNoYW5pc20gbm90IHVzZWQgdW5kZXIgbGludXgKCjEyICAgICAgMTIgICAgMSBvbiBzLzM5MCAwIG9uIHovQXJjaGl0ZWN0dXJlCgoxMyAgICAgIDEzICAgIE1hY2hpbmUgQ2hlY2sgTWFzayAxPWVuYWJsZSBtYWNoaW5lIGNoZWNrIGludGVycnVwdHMKCjE0ICAgICAgMTQgICAgV2FpdCBTdGF0ZSBzZXQgdGhpcyB0byAxIHRvIHN0b3AgdGhlIHByb2Nlc3NvciBleGNlcHQgZm9yIGludGVycnVwdHMgJiBnaXZlIAoJICAgICAgdGltZSB0byBvdGhlciBMUEFSUyB1c2VkIGluIENQVSBpZGxlIGluIHRoZSBrZXJuZWwgdG8gaW5jcmVhc2Ugb3ZlcmFsbCAKCSAgICAgIHVzYWdlIG9mIHByb2Nlc3NvciByZXNvdXJjZXMuCgoxNSAgICAgIDE1ICAgIFByb2JsZW0gc3RhdGUgKCBpZiBzZXQgdG8gMSBjZXJ0YWluIGluc3RydWN0aW9ucyBhcmUgZGlzYWJsZWQgKQoJICAgICAgYWxsIGxpbnV4IHVzZXIgcHJvZ3JhbXMgcnVuIHdpdGggdGhpcyBiaXQgMSAKCSAgICAgICggdXNlZnVsIGluZm8gZm9yIGRlYnVnZ2luZyB1bmRlciBWTSApLgoKMTYtMTcgMTYtMTcgICBBZGRyZXNzIFNwYWNlIENvbnRyb2wKCgkgICAgICAwMCBQcmltYXJ5IFNwYWNlIE1vZGUgd2hlbiBEQVQgb24KCSAgICAgIFRoZSBsaW51eCBrZXJuZWwgY3VycmVudGx5IHJ1bnMgaW4gdGhpcyBtb2RlLCBDUjEgaXMgYWZmaWxpYXRlZCB3aXRoIAogICAgICAgICAgICAgIHRoaXMgbW9kZSAmIHBvaW50cyB0byB0aGUgcHJpbWFyeSBzZWdtZW50IHRhYmxlIG9yaWdpbiBldGMuCgoJICAgICAgMDEgQWNjZXNzIHJlZ2lzdGVyIG1vZGUgdGhpcyBtb2RlIGlzIHVzZWQgaW4gZnVuY3Rpb25zIHRvIAoJICAgICAgY29weSBkYXRhIGJldHdlZW4ga2VybmVsICYgdXNlciBzcGFjZS4KCgkgICAgICAxMCBTZWNvbmRhcnkgc3BhY2UgbW9kZSBub3QgdXNlZCBpbiBsaW51eCBob3dldmVyIENSNyB0aGUKCSAgICAgIHJlZ2lzdGVyIGFmZmlsaWF0ZWQgd2l0aCB0aGlzIG1vZGUgaXMgJiB0aGlzICYgbm9ybWFsbHkKCSAgICAgIENSMTM9Q1I3IHRvIGFsbG93IHVzIHRvIGNvcHkgZGF0YSBiZXR3ZWVuIGtlcm5lbCAmIHVzZXIgc3BhY2UuCgkgICAgICBXZSBkbyB0aGlzIGFzIGZvbGxvd3M6CgkgICAgICBXZSBzZXQgYXIyIHRvIDAgdG8gZGVzaWduYXRlIGl0cwoJICAgICAgYWZmaWxpYXRlZCBncHIgKCBncHIyICl0byBwb2ludCB0byBwcmltYXJ5PWtlcm5lbCBzcGFjZS4KCSAgICAgIFdlIHNldCBhcjQgdG8gMSB0byBkZXNpZ25hdGUgaXRzCgkgICAgICBhZmZpbGlhdGVkIGdwciAoIGdwcjQgKSB0byBwb2ludCB0byBzZWNvbmRhcnk9aG9tZT11c2VyIHNwYWNlCgkgICAgICAmIHRoZW4gZXNzZW50aWFsbHkgZG8gYSBtZW1jb3B5KGdwcjIsZ3ByNCxzaXplKSB0bwoJICAgICAgY29weSBkYXRhIGJldHdlZW4gdGhlIGFkZHJlc3Mgc3BhY2VzLCB0aGUgcmVhc29uIHdlIHVzZSBob21lIHNwYWNlIGZvciB0aGUKCSAgICAgIGtlcm5lbCAmIGRvbid0IGtlZXAgc2Vjb25kYXJ5IHNwYWNlIGZyZWUgaXMgdGhhdCBjb2RlIHdpbGwgbm90IHJ1biBpbiAKCSAgICAgIHNlY29uZGFyeSBzcGFjZS4KCgkgICAgICAxMSBIb21lIFNwYWNlIE1vZGUgYWxsIHVzZXIgcHJvZ3JhbXMgcnVuIGluIHRoaXMgbW9kZS4KCSAgICAgIGl0IGlzIGFmZmlsaWF0ZWQgd2l0aCBDUjEzLgoKMTgtMTkgMTgtMTkgICBDb25kaXRpb24gY29kZXMgKENDKQoKMjAgICAgMjAgICAgICBGaXhlZCBwb2ludCBvdmVyZmxvdyBtYXNrIGlmIDE9RlBVIGV4Y2VwdGlvbnMgZm9yIHRoaXMgZXZlbnQgCiAgICAgICAgICAgICAgb2NjdXIgKCBub3JtYWxseSAwICkgCgoyMSAgICAyMSAgICAgIERlY2ltYWwgb3ZlcmZsb3cgbWFzayBpZiAxPUZQVSBleGNlcHRpb25zIGZvciB0aGlzIGV2ZW50IG9jY3VyIAogICAgICAgICAgICAgICggbm9ybWFsbHkgMCApCgoyMiAgICAyMiAgICAgIEV4cG9uZW50IHVuZGVyZmxvdyBtYXNrIGlmIDE9RlBVIGV4Y2VwdGlvbnMgZm9yIHRoaXMgZXZlbnQgb2NjdXIgCiAgICAgICAgICAgICAgKCBub3JtYWxseSAwICkKCjIzICAgIDIzICAgICAgU2lnbmlmaWNhbmNlIE1hc2sgaWYgMT1GUFUgZXhjZXB0aW9ucyBmb3IgdGhpcyBldmVudCBvY2N1ciAKICAgICAgICAgICAgICAoIG5vcm1hbGx5IDAgKQoKMjQtMzEgMjQtMzAgICBSZXNlcnZlZCBNdXN0IGJlIDAuCgogICAgICAzMSAgICAgIEV4dGVuZGVkIEFkZHJlc3NpbmcgTW9kZQogICAgICAzMiAgICAgIEJhc2ljIEFkZHJlc3NpbmcgTW9kZQogICAgICAgICAgICAgIFVzZWQgdG8gc2V0IGFkZHJlc3NpbmcgbW9kZQoJICAgICAgUFNXIDMxICAgUFNXIDMyCiAgICAgICAgICAgICAgICAwICAgICAgICAgMCAgICAgICAgMjQgYml0CiAgICAgICAgICAgICAgICAwICAgICAgICAgMSAgICAgICAgMzEgYml0CiAgICAgICAgICAgICAgICAxICAgICAgICAgMSAgICAgICAgNjQgYml0CgozMiAgICAgICAgICAgICAxPTMxIGJpdCBhZGRyZXNzaW5nIG1vZGUgMD0yNCBiaXQgYWRkcmVzc2luZyBtb2RlIChmb3IgYmFja3dhcmQgCiAgICAgICAgICAgICAgIGNvbXBhdGliaWxpdHkgKSwgbGludXggYWx3YXlzIHJ1bnMgd2l0aCB0aGlzIGJpdCBzZXQgdG8gMQoKMzMtNjQgICAgICAgICAgSW5zdHJ1Y3Rpb24gYWRkcmVzcy4KICAgICAgMzMtNjMgICAgUmVzZXJ2ZWQgbXVzdCBiZSAwCiAgICAgIDY0LTEyNyAgIEFkZHJlc3MKICAgICAgICAgICAgICAgSW4gMjQgYml0cyBtb2RlIGJpdHMgNjQtMTAzPTAgYml0cyAxMDQtMTI3IEFkZHJlc3MgCiAgICAgICAgICAgICAgIEluIDMxIGJpdHMgbW9kZSBiaXRzIDY0LTk2PTAgYml0cyA5Ny0xMjcgQWRkcmVzcwogICAgICAgICAgICAgICBOb3RlOiB1bmxpa2UgMzEgYml0IG1vZGUgb24gcy8zOTAgYml0IDk2IG11c3QgYmUgemVybwoJICAgICAgIHdoZW4gbG9hZGluZyB0aGUgYWRkcmVzcyB3aXRoIExQU1dFIG90aGVyd2lzZSBhIAogICAgICAgICAgICAgICBzcGVjaWZpY2F0aW9uIGV4Y2VwdGlvbiBvY2N1cnMsIExQU1cgaXMgZnVsbHkgYmFja3dhcmQKICAgICAgICAgICAgICAgY29tcGF0aWJsZS4KIAkgIAoJICAKUHJlZml4IFBhZ2UocykKLS0tLS0tLS0tLS0tLS0JICAKVGhpcyBwZXIgY3B1IG1lbW9yeSBhcmVhIGlzIHRvbyBpbnRpbWF0ZWx5IHRpZWQgdG8gdGhlIHByb2Nlc3NvciBub3QgdG8gbWVudGlvbi4KSXQgZXhpc3RzIGJldHdlZW4gdGhlIHJlYWwgYWRkcmVzc2VzIDAtNDA5NiBvbiBzLzM5MCAmIDAtODE5MiB6L0FyY2hpdGVjdHVyZSAmIGlzIGV4Y2hhbmdlZCAKd2l0aCBhIDEgcGFnZSBvbiBzLzM5MCBvciAyIHBhZ2VzIG9uIHovQXJjaGl0ZWN0dXJlIGluIGFic29sdXRlIHN0b3JhZ2UgYnkgdGhlIHNldCAKcHJlZml4IGluc3RydWN0aW9uIGluIGxpbnV4J2VzIHN0YXJ0dXAuIApUaGlzIHBhZ2UgaXMgbWFwcGVkIHRvIGEgZGlmZmVyZW50IHByZWZpeCBmb3IgZWFjaCBwcm9jZXNzb3IgaW4gYW4gU01QIGNvbmZpZ3VyYXRpb24KKCBhc3N1bWluZyB0aGUgb3MgZGVzaWduZXIgaXMgc2FuZSBvZiBjb3Vyc2UgOi0pICkuCkJ5dGVzIDAtNTEyICggMjAwIGhleCApIG9uIHMvMzkwICYgMC01MTIsNDA5Ni00NTQ0LDQ2MDQtNTExOSBjdXJyZW50bHkgb24gei9BcmNoaXRlY3R1cmUgCmFyZSB1c2VkIGJ5IHRoZSBwcm9jZXNzb3IgaXRzZWxmIGZvciBob2xkaW5nIHN1Y2ggaW5mb3JtYXRpb24gYXMgZXhjZXB0aW9uIGluZGljYXRpb25zICYgCmVudHJ5IHBvaW50cyBmb3IgZXhjZXB0aW9ucy4KQnl0ZXMgYWZ0ZXIgMHhjMDAgaGV4IGFyZSB1c2VkIGJ5IGxpbnV4IGZvciBwZXIgcHJvY2Vzc29yIGdsb2JhbHMgb24gcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSAKKCB0aGVyZSBpcyBhIGdhcCBvbiB6L0FyY2hpdGVjdXJlIHRvbyBjdXJyZW50bHkgYmV0d2VlbiAweGMwMCAmIDEwMDAgd2hpY2ggbGludXggdXNlcyApLgpUaGUgY2xvc2VzdCB0aGluZyB0byB0aGlzIG9uIHRyYWRpdGlvbmFsIGFyY2hpdGVjdHVyZXMgaXMgdGhlIGludGVycnVwdAp2ZWN0b3IgdGFibGUuIFRoaXMgaXMgYSBnb29kIHRoaW5nICYgZG9lcyBzaW1wbGlmeSBzb21lIG9mIHRoZSBrZXJuZWwgY29kaW5nCmhvd2V2ZXIgaXQgbWVhbnMgdGhhdCB3ZSBub3cgY2Fubm90IGNhdGNoIHN0cmF5IE5VTEwgcG9pbnRlcnMgaW4gdGhlCmtlcm5lbCB3aXRob3V0IGhhcmQgY29kZWQgY2hlY2tzLgoKCgpBZGRyZXNzIFNwYWNlcyBvbiBJbnRlbCBMaW51eAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhlIHRyYWRpdGlvbmFsIEludGVsIExpbnV4IGlzIGFwcHJveGltYXRlbHkgbWFwcGVkIGFzIGZvbGxvd3MgZm9yZ2l2ZQp0aGUgYXNjaWkgYXJ0LgoweEZGRkZGRkZGIDRHQiBIaW1lbSAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEtlcm5lbCBTcGFjZSAgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKiogICAgICAgICAgKioqKioqKioqKioqKioqKgpVc2VyIFNwYWNlIEhpbWVtICh0eXBpY2FsbHkgMHhDMDAwMDAwMCAzR0IgKSogIFVzZXIgU3RhY2sgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKCQkJCSAgICAgICAgICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICogICAgICAgICAgICAgICoKCQkJCQkgICAgKiAgU2hhcmVkIExpYnMgICogICAgICAgICAgKiBOZXh0IFByb2Nlc3MgKiAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqICAgICB0byAgICAgICAqICAKCQkJCQkgICAgKiAgICAgICAgICAgICAgICogICAgPD09ICAgKiAgICAgUnVuICAgICAgKiAgPD09CgkJCQkJICAgICogIFVzZXIgUHJvZ3JhbSAqICAgICAgICAgICogICAgICAgICAgICAgICoKCQkJCQkgICAgKiAgIERhdGEgQlNTICAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoJIFRleHQgICAgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCiAgICAgICAgIAkJCSAgICAgICAgICAgICogICBTZWN0aW9ucyAgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKMHgwMDAwMDAwMCAgICAgICAgIAkJCSAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqKioqKioqKioqKioqKioqCgpOb3cgaXQgaXMgZWFzeSB0byBzZWUgdGhhdCBvbiBJbnRlbCBpdCBpcyBxdWl0ZSBlYXN5IHRvIHJlY29nbmlzZSBhIGtlcm5lbCBhZGRyZXNzIAphcyBiZWluZyBvbmUgZ3JlYXRlciB0aGFuIHVzZXIgc3BhY2UgaGltZW0gKCBpbiB0aGlzIGNhc2UgMHhDMDAwMDAwMCkuCiYgYWRkcmVzc2VzIG9mIGxlc3MgdGhhbiB0aGlzIGFyZSB0aGUgb25lcyBpbiB0aGUgY3VycmVudCBydW5uaW5nIHByb2dyYW0gb24gdGhpcwpwcm9jZXNzb3IgKCBpZiBhbiBzbXAgYm94ICkuCklmIHVzaW5nIHRoZSB2aXJ0dWFsIG1hY2hpbmUgKCBWTSApIGFzIGEgZGVidWdnZXIgaXQgaXMgcXVpdGUgZGlmZmljdWx0IHRvCmtub3cgd2hpY2ggdXNlciBwcm9jZXNzIGlzIHJ1bm5pbmcgYXMgdGhlIGFkZHJlc3Mgc3BhY2UgeW91IGFyZSBsb29raW5nIGF0CmNvdWxkIGJlIGZyb20gYW55IHByb2Nlc3MgaW4gdGhlIHJ1biBxdWV1ZS4KClRoZSBsaW1pdGF0aW9uIG9mIEludGVscyBhZGRyZXNzaW5nIHRlY2huaXF1ZSBpcyB0aGF0IHRoZSBsaW51eAprZXJuZWwgdXNlcyBhIHZlcnkgc2ltcGxlIHJlYWwgYWRkcmVzcyB0byB2aXJ0dWFsIGFkZHJlc3NpbmcgdGVjaG5pcXVlCm9mIFJlYWwgQWRkcmVzcz1WaXJ0dWFsIEFkZHJlc3MtVXNlciBTcGFjZSBIaW1lbS4KVGhpcyBtZWFucyB0aGF0IG9uIEludGVsIHRoZSBrZXJuZWwgbGludXggY2FuIHR5cGljYWxseSBvbmx5IGFkZHJlc3MKSGltZW09MHhGRkZGRkZGRi0weEMwMDAwMDAwPTFHQiAmIHRoaXMgaXMgYWxsIHRoZSBSQU0gdGhlc2UgbWFjaGluZXMKY2FuIHR5cGljYWxseSB1c2UuClRoZXkgY2FuIGxvd2VyIFVzZXIgSGltZW0gdG8gMkdCIG9yIGxvd2VyICYgdGh1cyBiZQphYmxlIHRvIHVzZSAyR0Igb2YgUkFNIGhvd2V2ZXIgdGhpcyBzaHJpbmtzIHRoZSBtYXhpbXVtIHNpemUKb2YgVXNlciBTcGFjZSBmcm9tIDNHQiB0byAyR0IgdGhleSBoYXZlIGEgbm8gd2luIGxpbWl0IG9mIDRHQiB1bmxlc3MKdGhleSBnbyB0byA2NCBCaXQuCgoKT24gMzkwIG91ciBsaW1pdGF0aW9ucyAmIHN0cmVuZ3RocyBtYWtlIHVzIHNsaWdodGx5IGRpZmZlcmVudC4KRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2UgYXJlIG9ubHkgYWxsb3dlZCB1c2UgMzEgYml0cyAoMkdCKQpvZiBvdXIgMzIgYml0IGFkZHJlc3Nlcyxob3dldmVyLCB3ZSB1c2UgZW50aXJlbHkgc2VwYXJhdGUgYWRkcmVzcyAKc3BhY2VzIGZvciB0aGUgdXNlciAmIGtlcm5lbC4KClRoaXMgbWVhbnMgd2UgY2FuIHN1cHBvcnQgMkdCIG9mIG5vbiBFeHRlbmRlZCBSQU0gb24gcy8zOTAsICYgbW9yZQp3aXRoIHRoZSBFeHRlbmRlZCBtZW1vcnkgbWFuYWdlbWVudCBzd2FwIGRldmljZSAmIApjdXJyZW50bHkgNFRCIG9mIHBoeXNpY2FsIG1lbW9yeSBjdXJyZW50bHkgb24gei9BcmNoaXRlY3R1cmUuCgoKQWRkcmVzcyBTcGFjZXMgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCk91ciBhZGRyZXNzaW5nIHNjaGVtZSBpcyBhcyBmb2xsb3dzCgoKSGltZW0gMHg3ZmZmZmZmZiAyR0Igb24gcy8zOTAgICAgKioqKioqKioqKioqKioqKiogICAgICAgICAgKioqKioqKioqKioqKioqKgpjdXJyZW50bHkgMHgzZmZmZmZmZmZmZiAoMl40MiktMSAqICBVc2VyIFN0YWNrICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCm9uIHovQXJjaGl0ZWN0dXJlLgkJICoqKioqKioqKioqKioqKioqICAgICAgICAgICogICAgICAgICAgICAgICoKCQkgICAgICAgICAgICAgICAgICogIFNoYXJlZCBMaWJzICAqICAgICAgICAgICogICAgICAgICAgICAgICogICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKiogICAgICAgICAgKiAgICAgICAgICAgICAgKiAgCgkJCSAgICAgICAgICogICAgICAgICAgICAgICAqICAgICAgICAgICogICAgS2VybmVsICAgICogIAoJCSAgICAgICAgICAgICAgICAgKiAgVXNlciBQcm9ncmFtICogICAgICAgICAgKiAgICAgICAgICAgICAgKgoJCSAgICAgICAgICAgICAgICAgKiAgIERhdGEgQlNTICAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgIFRleHQgICAgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCiAgICAgICAgICAgIAkJCSAqICAgU2VjdGlvbnMgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCjB4MDAwMDAwMDAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICoqKioqKioqKioqKioqKioKClRoaXMgYWxzbyBtZWFucyB0aGF0IHdlIG5lZWQgdG8gbG9vayBhdCB0aGUgUFNXIHByb2JsZW0gc3RhdGUgYml0Cm9yIHRoZSBhZGRyZXNzaW5nIG1vZGUgdG8gZGVjaWRlIHdoZXRoZXIgd2UgYXJlIGxvb2tpbmcgYXQKdXNlciBvciBrZXJuZWwgc3BhY2UuCgpWaXJ0dWFsIEFkZHJlc3NlcyBvbiBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkEgdmlydHVhbCBhZGRyZXNzIG9uIHMvMzkwIGlzIG1hZGUgdXAgb2YgMyBwYXJ0cwpUaGUgU1ggKCBzZWdtZW50IGluZGV4LCByb3VnaGx5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIFBHRCAmIFBNRCBpbiBsaW51eCB0ZXJtaW5vbG9neSApIApiZWluZyBiaXRzIDEtMTEuClRoZSBQWCAoIHBhZ2UgaW5kZXgsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhZ2UgdGFibGUgZW50cnkgKHB0ZSkgaW4gbGludXggdGVybWlub2xvZ3kgKQpiZWluZyBiaXRzIDEyLTE5LiAKVGhlIHJlbWFpbmluZyBiaXRzIEJYICh0aGUgYnl0ZSBpbmRleCBhcmUgdGhlIG9mZnNldCBpbiB0aGUgcGFnZSApCmkuZS4gYml0cyAyMCB0byAzMS4KCk9uIHovQXJjaGl0ZWN0dXJlIGluIGxpbnV4IHdlIGN1cnJlbnRseSBtYWtlIHVwIGFuIGFkZHJlc3MgZnJvbSA0IHBhcnRzLgpUaGUgcmVnaW9uIGluZGV4IGJpdHMgKFJYKSAwLTMyIHdlIGN1cnJlbnRseSB1c2UgYml0cyAyMi0zMgpUaGUgc2VnbWVudCBpbmRleCAoU1gpIGJlaW5nIGJpdHMgMzMtNDMKVGhlIHBhZ2UgaW5kZXggKFBYKSBiZWluZyBiaXRzICA0NC01MQpUaGUgYnl0ZSBpbmRleCAoQlgpIGJlaW5nIGJpdHMgIDUyLTYzCgpOb3RlczoKMSkgcy8zOTAgaGFzIG5vIFBNRCBzbyB0aGUgUE1EIGlzIHJlYWxseSB0aGUgUEdEIGFsc28uCkEgbG90IG9mIHRoaXMgc3R1ZmYgaXMgZGVmaW5lZCBpbiBwZ3RhYmxlLmguCgoyKSBBbHNvIHNlZWluZyBhcyBzLzM5MCdzIHBhZ2UgaW5kZXhlcyBhcmUgb25seSAxayAgaW4gc2l6ZSAKKGJpdHMgMTItMTkgeCA0IGJ5dGVzIHBlciBwdGUgKSB3ZSB1c2UgMSAoIHBhZ2UgNGsgKQp0byBtYWtlIHRoZSBiZXN0IHVzZSBvZiBtZW1vcnkgYnkgdXBkYXRpbmcgNCBzZWdtZW50IGluZGljZXMgCmVudHJpZXMgZWFjaCB0aW1lIHdlIG1lc3Mgd2l0aCBhIFBNRCAmIHVzZSBvZmZzZXRzIAowLDEwMjQsMjA0OCAmIDMwNzIgaW4gdGhpcyBwYWdlIGFzIGZvciBvdXIgc2VnbWVudCBpbmRleGVzLgpPbiB6L0FyY2hpdGVjdHVyZSBvdXIgcGFnZSBpbmRleGVzIGFyZSBub3cgMmsgaW4gc2l6ZQooIGJpdHMgMTItMTkgeCA4IGJ5dGVzIHBlciBwdGUgKSB3ZSBkbyBhIHNpbWlsYXIgdHJpY2sKYnV0IG9ubHkgbWVzcyB3aXRoIDIgc2VnbWVudCBpbmRpY2VzIGVhY2ggdGltZSB3ZSBtZXNzIHdpdGgKYSBQTUQuCgozKSBBcyB6L0FyY2hpdGVjdHVyZSBzdXBwb3J0cyB1cHRvIGEgbWFzc2l2ZSA1LWxldmVsIHBhZ2UgdGFibGUgbG9va3VwIHdlIApjYW4gb25seSB1c2UgMyBjdXJyZW50bHkgb24gTGludXggKCBhcyB0aGlzIGlzIGFsbCB0aGUgZ2VuZXJpYyBrZXJuZWwKY3VycmVudGx5IHN1cHBvcnRzICkgaG93ZXZlciB0aGlzIG1heSBjaGFuZ2UgaW4gZnV0dXJlCnRoaXMgYWxsb3dzIHVzIHRvIGFjY2VzcyAoIGFjY29yZGluZyB0byBteSBzdW1zICkKNFRCIG9mIHZpcnR1YWwgc3RvcmFnZSBwZXIgcHJvY2VzcyBpLmUuCjQwOTYqNTEyKFBURVMpKjEwMjQoUE1EUykqMjA0OChQR0QpID0gNDM5ODA0NjUxMTEwNCBieXRlcywKZW5vdWdoIGZvciBhbm90aGVyIDIgb3IgMyBvZiB5ZWFycyBJIHRoaW5rIDotKS4KdG8gZG8gdGhpcyB3ZSB1c2UgYSByZWdpb24tdGhpcmQtdGFibGUgZGVzaWduYXRpb24gdHlwZSBpbgpvdXIgYWRkcmVzcyBzcGFjZSBjb250cm9sIHJlZ2lzdGVycy4KIAoKVGhlIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIEtlcm5lbCBUYXNrIFN0cnVjdHVyZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkVhY2ggcHJvY2Vzcy90aHJlYWQgdW5kZXIgTGludXggZm9yIFMzOTAgaGFzIGl0cyBvd24ga2VybmVsIHRhc2tfc3RydWN0CmRlZmluZWQgaW4gbGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oClRoZSBTMzkwIG9uIGluaXRpYWxpc2F0aW9uICYgcmVzdW1pbmcgb2YgYSBwcm9jZXNzIG9uIGEgY3B1IHNldHMKdGhlIF9fTENfS0VSTkVMX1NUQUNLIHZhcmlhYmxlIGluIHRoZSBzcGFyZSBwcmVmaXggYXJlYSBmb3IgdGhpcyBjcHUKKCB3aGljaCB3ZSB1c2UgZm9yIHBlciBwcm9jZXNzb3IgZ2xvYmFscykuCgpUaGUga2VybmVsIHN0YWNrIHBvaW50ZXIgaXMgaW50aW1hdGVseSB0aWVkIHdpdGggdGhlIHRhc2sgc3R1Y3R1cmUgZm9yCmVhY2ggcHJvY2Vzc29yIGFzIGZvbGxvd3MuCgogICAgICAgICAgICAgICAgICAgICAgcy8zOTAKICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICogIDEgcGFnZSBrZXJuZWwgc3RhY2sgKgoJICAgICogICAgICAgICggNEsgKSAgICAgICAgKgogICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICAgICAgKiAgIDEgcGFnZSB0YXNrX3N0cnVjdCAqICAgICAgICAKICAgICAgICAgICAgKiAgICAgICAgKCA0SyApICAgICAgICAqCjhLIGFsaWduZWQgICoqKioqKioqKioqKioqKioqKioqKioqKiAKCiAgICAgICAgICAgICAgICAgei9BcmNoaXRlY3R1cmUKICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICogIDIgcGFnZSBrZXJuZWwgc3RhY2sgKgoJICAgICogICAgICAgICggOEsgKSAgICAgICAgKgogICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICAgICAgKiAgMiBwYWdlIHRhc2tfc3RydWN0ICAqICAgICAgICAKICAgICAgICAgICAgKiAgICAgICAgKCA4SyApICAgICAgICAqCjE2SyBhbGlnbmVkICoqKioqKioqKioqKioqKioqKioqKioqKiAKCldoYXQgdGhpcyBtZWFucyBpcyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gZGVkaWNhdGUgYW55IHJlZ2lzdGVyIG9yIGdsb2JhbCB2YXJpYWJsZQp0byBwb2ludCB0byB0aGUgY3VycmVudCBydW5uaW5nIHByb2Nlc3MgJiBjYW4gcmV0cmlldmUgaXQgd2l0aCB0aGUgZm9sbG93aW5nCnZlcnkgc2ltcGxlIGNvbnN0cnVjdCBmb3Igcy8zOTAgJiBvbmUgdmVyeSBzaW1pbGFyIGZvciB6L0FyY2hpdGVjdHVyZS4KCnN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICogZ2V0X2N1cnJlbnQodm9pZCkKewogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudDsKICAgICAgICBfX2FzbV9fKCJsaGkgICAlMCwtODE5MlxuXHQiCiAgICAgICAgICAgICAgICAibnIgICAgJTAsMTUiCiAgICAgICAgICAgICAgICA6ICI9ciIgKGN1cnJlbnQpICk7CiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7Cn0KCmkuZS4ganVzdCBhbmRpbmcgdGhlIGN1cnJlbnQga2VybmVsIHN0YWNrIHBvaW50ZXIgd2l0aCB0aGUgbWFzayAtODE5Mi4KVGhhbmtmdWxseSBiZWNhdXNlIExpbnV4IGRvc2VuJ3QgaGF2ZSBzdXBwb3J0IGZvciBuZXN0ZWQgSU8gaW50ZXJydXB0cwomIG91ciBkZXZpY2VzIGhhdmUgbGFyZ2UgYnVmZmVycyBjYW4gc3Vydml2ZSBpbnRlcnJ1cHRzIGJlaW5nIHNodXQgZm9yIApzaG9ydCBhbW91bnRzIG9mIHRpbWUgd2UgZG9uJ3QgbmVlZCBhIHNlcGFyYXRlIHN0YWNrIGZvciBpbnRlcnJ1cHRzLgoKCgoKUmVnaXN0ZXIgVXNhZ2UgJiBTdGFja2ZyYW1lcyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpPdmVydmlldzoKLS0tLS0tLS0tClRoaXMgaXMgdGhlIGNvZGUgdGhhdCBnY2MgcHJvZHVjZXMgYXQgdGhlIHRvcCAmIHRoZSBib3R0b20gb2YKZWFjaCBmdW5jdGlvbiwgaXQgdXN1YWxseSBpcyBmYWlybHkgY29uc2lzdGVudCAmIHNpbWlsYXIgZnJvbSAKZnVuY3Rpb24gdG8gZnVuY3Rpb24gJiBpZiB5b3Uga25vdyBpdHMgbGF5b3V0IHlvdSBjYW4gcHJvYmFsYnkKbWFrZSBzb21lIGhlYWR3YXkgaW4gZmluZGluZyB0aGUgdWx0aW1hdGUgY2F1c2Ugb2YgYSBwcm9ibGVtCmFmdGVyIGEgY3Jhc2ggd2l0aG91dCBhIHNvdXJjZSBsZXZlbCBkZWJ1Z2dlci4KCk5vdGU6IFRvIGZvbGxvdyBzdGFja2ZyYW1lcyByZXF1aXJlcyBhIGtub3dsZWRnZSBvZiBDIG9yIFBhc2NhbCAmCmxpbWl0ZWQga25vd2xlZGdlIG9mIG9uZSBhc3NlbWJseSBsYW5ndWFnZS4KCkl0IHNob3VsZCBiZSBub3RlZCB0aGF0IHRoZXJlIGFyZSBzb21lIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlCnMvMzkwICYgei9BcmNoaXRlY3R1cmUgc3RhY2sgbGF5b3V0cyBhcyB0aGUgei9BcmNoaXRlY3R1cmUgc3RhY2sgbGF5b3V0IGRpZG4ndCBoYXZlCnRvIG1haW50YWluIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBsaW5rYWdlIGZvcm1hdHMuCgpHbG9zc2FyeToKLS0tLS0tLS0tCmFsbG9jYToKVGhpcyBpcyBhIGJ1aWx0IGluIGNvbXBpbGVyIGZ1bmN0aW9uIGZvciBydW50aW1lIGFsbG9jYXRpb24Kb2YgZXh0cmEgc3BhY2Ugb24gdGhlIGNhbGxlcnMgc3RhY2sgd2hpY2ggaXMgb2J2aW91c2x5IGZyZWVkCnVwIG9uIGZ1bmN0aW9uIGV4aXQgKCBlLmcuIHRoZSBjYWxsZXIgbWF5IGNob29zZSB0byBhbGxvY2F0ZSBub3RoaW5nCm9mIGEgYnVmZmVyIG9mIDRrIGlmIHJlcXVpcmVkIGZvciB0ZW1wb3JhcnkgcHVycG9zZXMgKSwgaXQgZ2VuZXJhdGVzIAp2ZXJ5IGVmZmljaWVudCBjb2RlICggYSBmZXcgY3ljbGVzICApIHdoZW4gY29tcGFyZWQgdG8gYWx0ZXJuYXRpdmVzIApsaWtlIG1hbGxvYy4KCmF1dG9tYXRpY3M6IFRoZXNlIGFyZSBsb2NhbCB2YXJpYWJsZXMgb24gdGhlIHN0YWNrLAppLmUgdGhleSBhcmVuJ3QgaW4gcmVnaXN0ZXJzICYgdGhleSBhcmVuJ3Qgc3RhdGljLgoKYmFjay1jaGFpbjoKVGhpcyBpcyBhIHBvaW50ZXIgdG8gdGhlIHN0YWNrIHBvaW50ZXIgYmVmb3JlIGVudGVyaW5nIGEKZnJhbWVkIGZ1bmN0aW9ucyAoIHNlZSBmcmFtZWxlc3MgZnVuY3Rpb24gKSBwcm9sb2d1ZSBnb3QgYnkgCmRlZmVyZW5jaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSBjdXJyZW50IHN0YWNrIHBvaW50ZXIsCiBpLmUuIGdvdCBieSBhY2Nlc3NpbmcgdGhlIDMyIGJpdCB2YWx1ZSBhdCB0aGUgc3RhY2sgcG9pbnRlcnMKY3VycmVudCBsb2NhdGlvbi4KCmJhc2UtcG9pbnRlcjoKVGhpcyBpcyBhIHBvaW50ZXIgdG8gdGhlIGJhY2sgb2YgdGhlIGxpdGVyYWwgcG9vbCB3aGljaAppcyBhbiBhcmVhIGp1c3QgYmVoaW5kIGVhY2ggcHJvY2VkdXJlIHVzZWQgdG8gc3RvcmUgY29uc3RhbnRzCmluIGVhY2ggZnVuY3Rpb24uCgpjYWxsLWNsb2JiZXJlZDogVGhlIGNhbGxlciBwcm9iYWJseSBuZWVkcyB0byBzYXZlIHRoZXNlIHJlZ2lzdGVycyBpZiB0aGVyZSAKaXMgc29tZXRoaW5nIG9mIHZhbHVlIGluIHRoZW0sIG9uIHRoZSBzdGFjayBvciBlbHNld2hlcmUgYmVmb3JlIG1ha2luZyBhIApjYWxsIHRvIGFub3RoZXIgcHJvY2VkdXJlIHNvIHRoYXQgaXQgY2FuIHJlc3RvcmUgaXQgbGF0ZXIuCgplcGlsb2d1ZToKVGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciB0byByZXR1cm4gdG8gdGhlIGNhbGxlci4KCmZyYW1lbGVzcy1mdW5jdGlvbgpBIGZyYW1lbGVzcyBmdW5jdGlvbiBpbiBMaW51eCBmb3IgczM5MCAmIHovQXJjaGl0ZWN0dXJlIGlzIG9uZSB3aGljaCBkb2Vzbid0IApuZWVkIG1vcmUgdGhhbiB0aGUgcmVnaXN0ZXIgc2F2ZSBhcmVhICggOTYgYnl0ZXMgb24gcy8zOTAsIDE2MCBvbiB6L0FyY2hpdGVjdHVyZSApCmdpdmVuIHRvIGl0IGJ5IHRoZSBjYWxsZXIuCkEgZnJhbWVsZXNzIGZ1bmN0aW9uIG5ldmVyOgoxKSBTZXRzIHVwIGEgYmFjayBjaGFpbi4KMikgQ2FsbHMgYWxsb2NhLgozKSBDYWxscyBvdGhlciBub3JtYWwgZnVuY3Rpb25zCjQpIEhhcyBhdXRvbWF0aWNzLgoKR09ULXBvaW50ZXI6ClRoaXMgaXMgYSBwb2ludGVyIHRvIHRoZSBnbG9iYWwtb2Zmc2V0LXRhYmxlIGluIEVMRgooIEV4ZWN1dGFibGUgTGlua2FibGUgRm9ybWF0LCBMaW51eCdlcyBtb3N0IGNvbW1vbiBleGVjdXRhYmxlIGZvcm1hdCApLAphbGwgZ2xvYmFscyAmIHNoYXJlZCBsaWJyYXJ5IG9iamVjdHMgYXJlIGZvdW5kIHVzaW5nIHRoaXMgcG9pbnRlci4KCmxhenktYmluZGluZwpFTEYgc2hhcmVkIGxpYnJhcmllcyBhcmUgdHlwaWNhbGx5IG9ubHkgbG9hZGVkIHdoZW4gcm91dGluZXMgaW4gdGhlIHNoYXJlZApsaWJyYXJ5IGFyZSBhY3R1YWxseSBmaXJzdCBjYWxsZWQgYXQgcnVudGltZS4gVGhpcyBpcyBsYXp5IGJpbmRpbmcuCgpwcm9jZWR1cmUtbGlua2FnZS10YWJsZQpUaGlzIGlzIGEgdGFibGUgZm91bmQgZnJvbSB0aGUgR09UIHdoaWNoIGNvbnRhaW5zIHBvaW50ZXJzIHRvIHJvdXRpbmVzCmluIG90aGVyIHNoYXJlZCBsaWJyYXJpZXMgd2hpY2ggY2FuJ3QgYmUgY2FsbGVkIHRvIGJ5IGVhc2llciBtZWFucy4KCnByb2xvZ3VlOgpUaGUgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyIHRvIHNldCB1cCB0aGUgc3RhY2sgZnJhbWUuCgpvdXRnb2luZy1hcmdzOgpUaGlzIGlzIGV4dHJhIGFyZWEgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpZiB0aGUKcGFyYW1ldGVycyBmb3IgdGhlIGNhbGxlZSdzIGNhbm5vdCBhbGwgYmUgcHV0IGluIHJlZ2lzdGVycywgdGhlIHNhbWUKYXJlYSBjYW4gYmUgcmV1c2VkIGJ5IGVhY2ggZnVuY3Rpb24gdGhlIGNhbGxlciBjYWxscy4KCnJvdXRpbmUtZGVzY3JpcHRvcjoKQSBDT0ZGICBleGVjdXRhYmxlIGZvcm1hdCBiYXNlZCBjb25jZXB0IG9mIGEgcHJvY2VkdXJlIHJlZmVyZW5jZSAKYWN0dWFsbHkgYmVpbmcgOCBieXRlcyBvciBtb3JlIGFzIG9wcG9zZWQgdG8gYSBzaW1wbGUgcG9pbnRlciB0byB0aGUgcm91dGluZS4KVGhpcyBpcyB0eXBpY2FsbHkgZGVmaW5lZCBhcyBmb2xsb3dzClJvdXRpbmUgRGVzY3JpcHRvciBvZmZzZXQgMD1Qb2ludGVyIHRvIEZ1bmN0aW9uClJvdXRpbmUgRGVzY3JpcHRvciBvZmZzZXQgND1Qb2ludGVyIHRvIFRhYmxlIG9mIENvbnRlbnRzClRoZSB0YWJsZSBvZiBjb250ZW50cy9UT0MgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGEgR09UIHBvaW50ZXIuCiYgaXQgbWVhbnMgdGhhdCBzaGFyZWQgbGlicmFyaWVzIGV0Yy4gY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIHNldmVyYWwKZW52aXJvbm1lbnRzIGVhY2ggd2l0aCB0aGVpciBvd24gVE9DLgoKIApzdGF0aWMtY2hhaW46IFRoaXMgaXMgdXNlZCBpbiBuZXN0ZWQgZnVuY3Rpb25zIGEgY29uY2VwdCBhZG9wdGVkIGZyb20gcGFzY2FsIApieSBnY2Mgbm90IHVzZWQgaW4gYW5zaSBDIG9yIEMrKyAoIGFsdGhvdWdoIHF1aXRlIHVzZWZ1bCApLCBiYXNpY2FsbHkgaXQKaXMgYSBwb2ludGVyIHVzZWQgdG8gcmVmZXJlbmNlIGxvY2FsIHZhcmlhYmxlcyBvZiBlbmNsb3NpbmcgZnVuY3Rpb25zLgpZb3UgbWlnaHQgY29tZSBhY3Jvc3MgdGhpcyBzdHVmZiBvbmNlIG9yIHR3aWNlIGluIHlvdXIgbGlmZXRpbWUuCgplLmcuClRoZSBmdW5jdGlvbiBiZWxvdyBzaG91bGQgcmV0dXJuIDExIHRob3VnaCBnY2MgbWF5IGdldCB1cHNldCAmIHRvc3Mgd2FybmluZ3MgCmFib3V0IHVudXNlZCB2YXJpYWJsZXMuCmludCBGdW5jdGlvbkEoaW50IGEpCnsKCWludCBiOwoJRnVuY3Rpb25DKGludCBjKQoJewoJCWI9YysxOwoJfQoJRnVuY3Rpb25DKDEwKTsKCXJldHVybihiKTsKfQoKCnMvMzkwICYgei9BcmNoaXRlY3R1cmUgUmVnaXN0ZXIgdXNhZ2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpyMCAgICAgICB1c2VkIGJ5IHN5c2NhbGxzL2Fzc2VtYmx5ICAgICAgICAgICAgICAgICAgY2FsbC1jbG9iYmVyZWQKcjEJIHVzZWQgYnkgc3lzY2FsbHMvYXNzZW1ibHkgICAgICAgICAgICAgICAgICBjYWxsLWNsb2JiZXJlZApyMiAgICAgICBhcmd1bWVudCAwIC8gcmV0dXJuIHZhbHVlIDAgICAgICAgICAgICAgICAgY2FsbC1jbG9iYmVyZWQKcjMgICAgICAgYXJndW1lbnQgMSAvIHJldHVybiB2YWx1ZSAxIChpZiBsb25nIGxvbmcpIGNhbGwtY2xvYmJlcmVkCnI0ICAgICAgIGFyZ3VtZW50IDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsLWNsb2JiZXJlZApyNSAgICAgICBhcmd1bWVudCAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbC1jbG9iYmVyZWQKcjYJIGFyZ3VtZW50IDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZApyNyAgICAgICBwb2ludGVyLXRvIGFyZ3VtZW50cyA1IHRvIC4uLiAgICAgICAgICAgICAgc2F2ZWQgICAgICAKcjggICAgICAgdGhpcyAmIHRoYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkCnI5ICAgICAgIHRoaXMgJiB0aGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZApyMTAgICAgICBzdGF0aWMtY2hhaW4gKCBpZiBuZXN0ZWQgZnVuY3Rpb24gKSAgICAgICAgc2F2ZWQKcjExICAgICAgZnJhbWUtcG9pbnRlciAoIGlmIGZ1bmN0aW9uIHVzZWQgYWxsb2NhICkgIHNhdmVkCnIxMiAgICAgIGdvdC1wb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZApyMTMgICAgICBiYXNlLXBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWQKcjE0ICAgICAgcmV0dXJuLWFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkCnIxNSAgICAgIHN0YWNrLXBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZAoKZjAgICAgICAgYXJndW1lbnQgMCAvIHJldHVybiB2YWx1ZSAoIGZsb2F0L2RvdWJsZSApIGNhbGwtY2xvYmJlcmVkCmYyICAgICAgIGFyZ3VtZW50IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsLWNsb2JiZXJlZApmNCAgICAgICB6L0FyY2hpdGVjdHVyZSBhcmd1bWVudCAyICAgICAgICAgICAgICAgICAgc2F2ZWQKZjYgICAgICAgei9BcmNoaXRlY3R1cmUgYXJndW1lbnQgMyAgICAgICAgICAgICAgICAgIHNhdmVkClRoZSByZW1haW5pbmcgZmxvYXRpbmcgcG9pbnRzCmYxLGYzLGY1IGY3LWYxNSBhcmUgY2FsbC1jbG9iYmVyZWQuCgpOb3RlczoKLS0tLS0tCjEpIFRoZSBvbmx5IHJlcXVpcmVtZW50IGlzIHRoYXQgcmVnaXN0ZXJzIHdoaWNoIGFyZSB1c2VkCmJ5IHRoZSBjYWxsZWUgYXJlIHNhdmVkLCBlLmcuIHRoZSBjb21waWxlciBpcyBwZXJmZWN0bHkKY2FwaWJsZSBvZiB1c2luZyByMTEgZm9yIHB1cnBvc2VzIG90aGVyIHRoYW4gYSBmcmFtZSBhCmZyYW1lIHBvaW50ZXIgaWYgYSBmcmFtZSBwb2ludGVyIGlzIG5vdCBuZWVkZWQuCjIpIEluIGZ1bmN0aW9ucyB3aXRoIHZhcmlhYmxlIGFyZ3VtZW50cyBlLmcuIHByaW50ZiB0aGUgY2FsbGluZyBwcm9jZWR1cmUgCmlzIGlkZW50aWNhbCB0byBvbmUgd2l0aG91dCB2YXJpYWJsZSBhcmd1bWVudHMgJiB0aGUgc2FtZSBudW1iZXIgb2YgCnBhcmFtZXRlcnMuIEhvd2V2ZXIsIHRoZSBwcm9sb2d1ZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHNvbWV3aGF0IG1vcmUKaGFpcnkgb3dpbmcgdG8gaXQgaGF2aW5nIHRvIG1vdmUgdGhlc2UgcGFyYW1ldGVycyB0byB0aGUgc3RhY2sgdG8KZ2V0IHZhX3N0YXJ0LCB2YV9hcmcgJiB2YV9lbmQgdG8gd29yay4KMykgQWNjZXNzIHJlZ2lzdGVycyBhcmUgY3VycmVudGx5IHVudXNlZCBieSBnY2MgYnV0IGFyZSB1c2VkIGluCnRoZSBrZXJuZWwuIFBvc3NpYmlsaXRpZXMgZXhpc3QgdG8gdXNlIHRoZW0gYXQgdGhlIG1vbWVudCBmb3IKdGVtcG9yYXJ5IHN0b3JhZ2UgYnV0IGl0IGlzbid0IHJlY29tbWVuZGVkLgo0KSBPbmx5IDQgb2YgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyBhcmUgdXNlZCBmb3IKcGFyYW1ldGVyIHBhc3NpbmcgYXMgb2xkZXIgbWFjaGluZXMgc3VjaCBhcyBHMyBvbmx5IGhhdmUgb25seSA0CiYgaXQga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGNvbXBhdGlibGUgd2l0aCBvdGhlciBjb21waWxlcnMuCkhvd2V2ZXIgd2l0aCBJRUVFIGZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbiB1bmRlciBsaW51eCBvbiB0aGUKb2xkZXIgbWFjaGluZXMgeW91IGFyZSBmcmVlIHRvIHVzZSB0aGUgb3RoZXIgMTIuCjUpIEEgbG9uZyBsb25nIG9yIGRvdWJsZSBwYXJhbWV0ZXIgY2Fubm90IGJlIGhhdmUgdGhlIApmaXJzdCA0IGJ5dGVzIGluIGEgcmVnaXN0ZXIgJiB0aGUgc2Vjb25kIGZvdXIgYnl0ZXMgaW4gdGhlIApvdXRnb2luZyBhcmdzIGFyZWEuIEl0IG11c3QgYmUgcHVyZWx5IGluIHRoZSBvdXRnb2luZyBhcmdzCmFyZWEgaWYgY3Jvc3NpbmcgdGhpcyBib3VuZGFyeS4KNikgRmxvYXRpbmcgcG9pbnQgcGFyYW1ldGVycyBhcmUgbWl4ZWQgd2l0aCBvdXRnb2luZyBhcmdzCm9uIHRoZSBvdXRnb2luZyBhcmdzIGFyZWEgaW4gdGhlIG9yZGVyIHRoZSBhcmUgcGFzc2VkIGluIGFzIHBhcmFtZXRlcnMuCjcpIEZsb2F0aW5nIHBvaW50IGFyZ3VtZW50cyAyICYgMyBhcmUgc2F2ZWQgaW4gdGhlIG91dGdvaW5nIGFyZ3MgYXJlYSBmb3IgCnovQXJjaGl0ZWN0dXJlCgoKU3RhY2sgRnJhbWUgTGF5b3V0Ci0tLS0tLS0tLS0tLS0tLS0tLQpzLzM5MCAgICAgei9BcmNoaXRlY3R1cmUKMCAgICAgICAgIDAgICAgICAgICAgICAgYmFjayBjaGFpbiAoIGEgMCBoZXJlIHNpZ25pZmllcyBlbmQgb2YgYmFjayBjaGFpbiApCjQgICAgICAgICA4ICAgICAgICAgICAgIGVvcyAoIGVuZCBvZiBzdGFjaywgbm90IHVzZWQgb24gTGludXggZm9yIFMzOTAgdXNlZCBpbiBvdGhlciBsaW5rYWdlIGZvcm1hdHMgKQo4ICAgICAgICAgMTYgICAgICAgICAgICBnbHVlIHVzZWQgaW4gb3RoZXIgcy8zOTAgbGlua2FnZSBmb3JtYXRzIGZvciBzYXZlZCByb3V0aW5lIGRlc2NyaXB0b3JzIGV0Yy4KMTIgICAgICAgIDI0ICAgICAgICAgICAgZ2x1ZSB1c2VkIGluIG90aGVyIHMvMzkwIGxpbmthZ2UgZm9ybWF0cyBmb3Igc2F2ZWQgcm91dGluZSBkZXNjcmlwdG9ycyBldGMuCjE2ICAgICAgICAzMiAgICAgICAgICAgIHNjcmF0Y2ggYXJlYQoyMCAgICAgICAgNDAgICAgICAgICAgICBzY3JhdGNoIGFyZWEKMjQgICAgICAgIDQ4ICAgICAgICAgICAgc2F2ZWQgcjYgb2YgY2FsbGVyIGZ1bmN0aW9uCjI4ICAgICAgICA1NiAgICAgICAgICAgIHNhdmVkIHI3IG9mIGNhbGxlciBmdW5jdGlvbgozMiAgICAgICAgNjQgICAgICAgICAgICBzYXZlZCByOCBvZiBjYWxsZXIgZnVuY3Rpb24KMzYgICAgICAgIDcyICAgICAgICAgICAgc2F2ZWQgcjkgb2YgY2FsbGVyIGZ1bmN0aW9uCjQwICAgICAgICA4MCAgICAgICAgICAgIHNhdmVkIHIxMCBvZiBjYWxsZXIgZnVuY3Rpb24KNDQgICAgICAgIDg4ICAgICAgICAgICAgc2F2ZWQgcjExIG9mIGNhbGxlciBmdW5jdGlvbgo0OCAgICAgICAgOTYgICAgICAgICAgICBzYXZlZCByMTIgb2YgY2FsbGVyIGZ1bmN0aW9uCjUyICAgICAgICAxMDQgICAgICAgICAgIHNhdmVkIHIxMyBvZiBjYWxsZXIgZnVuY3Rpb24KNTYgICAgICAgIDExMiAgICAgICAgICAgc2F2ZWQgcjE0IG9mIGNhbGxlciBmdW5jdGlvbgo2MCAgICAgICAgMTIwICAgICAgICAgICBzYXZlZCByMTUgb2YgY2FsbGVyIGZ1bmN0aW9uCjY0ICAgICAgICAxMjggICAgICAgICAgIHNhdmVkIGY0IG9mIGNhbGxlciBmdW5jdGlvbgo3MiAgICAgICAgMTMyICAgICAgICAgICBzYXZlZCBmNiBvZiBjYWxsZXIgZnVuY3Rpb24KODAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkCjk2ICAgICAgICAxNjAgICAgICAgICAgIG91dGdvaW5nIGFyZ3MgcGFzc2VkIGZyb20gY2FsbGVyIHRvIGNhbGxlZQo5Nit4ICAgICAgMTYwK3ggICAgICAgICBwb3NzaWJsZSBzdGFjayBhbGlnbm1lbnQgKCA4IGJ5dGVzIGRlc2lyYWJsZSApCjk2K3greSAgICAxNjAreCt5ICAgICAgIGFsbG9jYSBzcGFjZSBvZiBjYWxsZXIgKCBpZiB1c2VkICkKOTYreCt5K3ogIDE2MCt4K3kreiAgICAgYXV0b21hdGljcyBvZiBjYWxsZXIgKCBpZiB1c2VkICkKMCAgICAgICAgICAgICAgICAgICAgICAgYmFjay1jaGFpbgoKQSBzYW1wbGUgcHJvZ3JhbSB3aXRoIGNvbW1lbnRzLgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDb21tZW50cyBvbiB0aGUgZnVuY3Rpb24gdGVzdAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoxKSBJdCBkaWRuJ3QgbmVlZCB0byBzZXQgdXAgYSBwb2ludGVyIHRvIHRoZSBjb25zdGFudCBwb29sIGdwcjEzIGFzIGl0IGlzbid0IHVzZWQKKCA6LSggKS4KMikgVGhpcyBpcyBhIGZyYW1lbGVzcyBmdW5jdGlvbiAmIG5vIHN0YWNrIGlzIGJvdWdodC4KMykgVGhlIGNvbXBpbGVyIHdhcyBjbGV2ZXIgZW5vdWdoIHRvIHJlY29nbmlzZSB0aGF0IGl0IGNvdWxkIHJldHVybiB0aGUKdmFsdWUgaW4gcjIgYXMgd2VsbCBhcyB1c2UgaXQgZm9yIHRoZSBwYXNzZWQgaW4gcGFyYW1ldGVyICggOi0pICkuCjQpIFRoZSBiYXNyICggYnJhbmNoIHJlbGF0aXZlICYgc2F2ZSApIHRyaWNrIHdvcmtzIGFzIGZvbGxvd3MgdGhlIGluc3RydWN0aW9uIApoYXMgYSBzcGVjaWFsIGNhc2Ugd2l0aCByMCxyMCB3aXRoIHNvbWUgaW5zdHJ1Y3Rpb24gb3BlcmFuZHMgaXMgdW5kZXJzdG9vZCBhcyAKdGhlIGxpdGVyYWwgdmFsdWUgMCwgc29tZSByaXNjIGFyY2hpdGVjdHVyZXMgYWxzbyBkbyB0aGlzICkuIFNvIG5vdwp3ZSBhcmUgYnJhbmNoaW5nIHRvIHRoZSBuZXh0IGFkZHJlc3MgJiB0aGUgYWRkcmVzcyBuZXcgcHJvZ3JhbSBjb3VudGVyIGlzCmluIHIxMyxzbyBub3cgd2Ugc3VidHJhY3QgdGhlIHNpemUgb2YgdGhlIGZ1bmN0aW9uIHByb2xvZ3VlIHdlIGhhdmUgZXhlY3V0ZWQKKyB0aGUgc2l6ZSBvZiB0aGUgbGl0ZXJhbCBwb29sIHRvIGdldCB0byB0aGUgdG9wIG9mIHRoZSBsaXRlcmFsIHBvb2wKMDA0MDAzN2MgaW50IHRlc3QoaW50IGIpCnsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGdW5jdGlvbiBwcm9sb2d1ZSBiZWxvdwogIDQwMDM3YzoJOTAgZGUgZjAgMzQgCXN0bQklcjEzLCVyMTQsNTIoJXIxNSkgIyBTYXZlIHJlZ2lzdGVycyByMTMgJiByMTQKICA0MDAzODA6CTBkIGQwICAgICAgIAliYXNyCSVyMTMsJXIwICAgICAgICAgICAjIFNldCB1cCBwb2ludGVyIHRvIGNvbnN0YW50IHBvb2wgdXNpbmcKICA0MDAzODI6CWE3IGRhIGZmIGZhIAlhaGkJJXIxMywtNiAgICAgICAgICAgICMgYmFzciB0cmljawoJcmV0dXJuKDUrYik7CgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEh1Z2UgbWFpbiBwcm9ncmFtCiAgNDAwMzg2OglhNyAyYSAwMCAwNSAJYWhpCSVyMiw1ICAgICAgICAgICAgICAjIGFkZCA1IHRvIHIyCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRnVuY3Rpb24gZXBpbG9ndWUgYmVsb3cgCiAgNDAwMzhhOgk5OCBkZSBmMCAzNCAJbG0JJXIxMywlcjE0LDUyKCVyMTUpICMgcmVzdG9yZSByZWdpc3RlcnMgcjEzICYgMTQKICA0MDAzOGU6CTA3IGZlICAgICAgIAlicgklcjE0ICAgICAgICAgICAgICAgIyByZXR1cm4KfQoKQ29tbWVudHMgb24gdGhlIGZ1bmN0aW9uIG1haW4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KMSkgVGhlIGNvbXBpbGVyIGRpZCB0aGlzIGZ1bmN0aW9uIG9wdGltYWxseSAoIDgtKSApCgpMaXRlcmFsIHBvb2wgZm9yIG1haW4uCjQwMDM5MDoJZmYgZmYgZmYgZWMgCS5sb25nIDB4ZmZmZmZmZWMKbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pCnsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGdW5jdGlvbiBwcm9sb2d1ZSBiZWxvdwogIDQwMDM5NDoJOTAgYmYgZjAgMmMgCXN0bQklcjExLCVyMTUsNDQoJXIxNSkgIyBTYXZlIG5lY2Vzc2FyeSByZWdpc3RlcnMKICA0MDAzOTg6CTE4IDBmICAgICAgIAlscgklcjAsJXIxNSAgICAgICAgICAgIyBjb3B5IHN0YWNrIHBvaW50ZXIgdG8gcjAKICA0MDAzOWE6CWE3IGZhIGZmIGEwIAlhaGkJJXIxNSwtOTYgICAgICAgICAgICMgTWFrZSBhcmVhIGZvciBjYWxsZWUgc2F2aW5nIAogIDQwMDM5ZToJMGQgZDAgICAgICAgCWJhc3IJJXIxMywlcjAgICAgICAgICAgICMgU2V0IHVwIHIxMyB0byBwb2ludCB0bwogIDQwMDNhMDoJYTcgZGEgZmYgZjAgCWFoaQklcjEzLC0xNiAgICAgICAgICAgIyBsaXRlcmFsIHBvb2wKICA0MDAzYTQ6CTUwIDAwIGYwIDAwIAlzdAklcjAsMCglcjE1KSAgICAgICAgIyBTYXZlIGJhY2tjaGFpbgoKCXJldHVybih0ZXN0KDUpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWFpbiBQcm9ncmFtIEJlbG93CiAgNDAwM2E4Ogk1OCBlMCBkMCAwMCAJbAklcjE0LDAoJXIxMykgICAgICAgIyBsb2FkIHJlbGF0aXZlIGFkZHJlc3Mgb2YgdGVzdCBmcm9tCgkJCQkJCSAgICAgICAgICAgIyBsaXRlcmFsIHBvb2wKICA0MDAzYWM6CWE3IDI4IDAwIDA1IAlsaGkJJXIyLDUgICAgICAgICAgICAgICMgU2V0IGZpcnN0IHBhcmFtZXRlciB0byA1CiAgNDAwM2IwOgk0ZCBlZSBkMCAwMCAJYmFzCSVyMTQsMCglcjE0LCVyMTMpICAjIGp1bXAgdG8gdGVzdCBzZXR0aW5nIHIxNCBhcyByZXR1cm4KCQkJCQkJCSAgICMgYWRkcmVzcyB1c2luZyBicmFuY2ggJiBzYXZlIGluc3RydWN0aW9uLgoKCQkJCQkJCSAgICMgRnVuY3Rpb24gRXBpbG9ndWUgYmVsb3cKICA0MDAzYjQ6CTk4IGJmIGYwIDhjIAlsbQklcjExLCVyMTUsMTQwKCVyMTUpIyBSZXN0b3JlIG5lY2Vzc2FyeSByZWdpc3RlcnMuCiAgNDAwM2I4OgkwNyBmZSAgICAgICAJYnIJJXIxNCAgICAgICAgICAgICAgICMgcmV0dXJuIHRvIGRvIHByb2dyYW0gZXhpdCAKfQoKCkNvbXBpbGVyIHVwZGF0ZXMKLS0tLS0tLS0tLS0tLS0tLQoKbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pCnsKICA0MDA0ZmM6CTkwIDdmIGYwIDFjICAgICAgIAlzdG0JJXI3LCVyMTUsMjgoJXIxNSkKICA0MDA1MDA6CWE3IGQ1IDAwIDA0ICAgICAgIAlicmFzCSVyMTMsNDAwNTA4IDxtYWluKzB4Yz4KICA0MDA1MDQ6CTAwIDQwIDA0IGY0ICAgICAgIAkubG9uZwkweDAwNDAwNGY0IAogICMgY29tcGlsZXIgbm93IHB1dHMgY29uc3RhbnQgcG9vbCBpbiBjb2RlIHRvIHNvIGl0IHNhdmVzIGFuIGluc3RydWN0aW9uIAogIDQwMDUwODoJMTggMGYgICAgICAgICAgICAgCWxyCSVyMCwlcjE1CiAgNDAwNTBhOglhNyBmYSBmZiBhMCAgICAgICAJYWhpCSVyMTUsLTk2CiAgNDAwNTBlOgk1MCAwMCBmMCAwMCAgICAgICAJc3QJJXIwLDAoJXIxNSkKCXJldHVybih0ZXN0KDUpKTsKICA0MDA1MTI6CTU4IDEwIGQwIDAwICAgICAgIAlsCSVyMSwwKCVyMTMpCiAgNDAwNTE2OglhNyAyOCAwMCAwNSAgICAgICAJbGhpCSVyMiw1CiAgNDAwNTFhOgkwZCBlMSAgICAgICAgICAgICAJYmFzcgklcjE0LCVyMQogICMgY29tcGlsZXIgYWRkcyAxIGV4dHJhIGluc3RydWN0aW9uIHRvIGVwaWxvZ3VlIHRoaXMgaXMgZG9uZSB0bwogICMgYXZvaWQgcHJvY2Vzc29yIHBpcGVsaW5lIHN0YWxscyBvd2luZyB0byBkYXRhIGRlcGVuZGVuY2llcyBvbiBnNSAmCiAgIyBhYm92ZSBhcyByZWdpc3RlciAxNCBpbiB0aGUgb2xkIGNvZGUgd2FzIG5lZWRlZCBkaXJlY3RseSBhZnRlciBiZWluZyBsb2FkZWQgCiAgIyBieSB0aGUgbG0JJXIxMSwlcjE1LDE0MCglcjE1KSBmb3IgdGhlIGJyICUxNC4KICA0MDA1MWM6CTU4IDQwIGYwIDk4ICAgICAgIAlsCSVyNCwxNTIoJXIxNSkKICA0MDA1MjA6CTk4IDdmIGYwIDdjICAgICAgIAlsbQklcjcsJXIxNSwxMjQoJXIxNSkKICA0MDA1MjQ6CTA3IGY0ICAgICAgICAgICAgIAlicgklcjQKfQoKCkhhcnRtdXQgKCBvdXIgY29tcGlsZXIgZGV2ZWxvcGVyICkgYWxzbyBoYXMgYmVlbiB0aHJlYXRlbmluZyB0byB0YWtlIG91dCB0aGUKc3RhY2sgYmFja2NoYWluIGluIG9wdGltaXNlZCBjb2RlIGFzIHRoaXMgYWxzbyBjYXVzZXMgcGlwZWxpbmUgc3RhbGxzLCB5b3UKaGF2ZSBiZWVuIHdhcm5lZC4KCjY0IGJpdCB6L0FyY2hpdGVjdHVyZSBjb2RlIGRpc2Fzc2VtYmx5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpJZiB5b3UgdW5kZXJzdGFuZCB0aGUgc3R1ZmYgYWJvdmUgeW91J2xsIHVuZGVyc3RhbmQgdGhlIHN0dWZmCmJlbG93IHRvbyBzbyBJJ2xsIGF2b2lkIHJlcGVhdGluZyBteXNlbGYgJiBqdXN0IHNheSB0aGF0IApzb21lIG9mIHRoZSBpbnN0cnVjdGlvbnMgaGF2ZSBnJ3Mgb24gdGhlIGVuZCBvZiB0aGVtIHRvIGluZGljYXRlCnRoZXkgYXJlIDY0IGJpdCAmIHRoZSBzdGFjayBvZmZzZXRzIGFyZSBhIGJpZ2dlciwgCnRoZSBvbmx5IG90aGVyIGRpZmZlcmVuY2UgeW91J2xsIGZpbmQgYmV0d2VlbiAzMiAmIDY0IGJpdCBpcyB0aGF0CndlIG5vdyB1c2UgZjQgJiBmNiBmb3IgZmxvYXRpbmcgcG9pbnQgYXJndW1lbnRzIG9uIDY0IGJpdC4KMDAwMDAwMDA4MDAwMDViMCA8dGVzdD46CmludCB0ZXN0KGludCBiKQp7CglyZXR1cm4oNStiKTsKICAgIDgwMDAwNWIwOglhNyAyYSAwMCAwNSAgICAgICAJYWhpCSVyMiw1CiAgICA4MDAwMDViNDoJYjkgMTQgMDAgMjIgICAgICAgCWxnZnIJJXIyLCVyMiAjIGRvd25jYXN0IHRvIGludGVnZXIKICAgIDgwMDAwNWI4OgkwNyBmZSAgICAgICAgICAgICAJYnIJJXIxNAogICAgODAwMDA1YmE6CTA3IDA3ICAgICAgICAgICAgIAliY3IJMCwlcjcKCgp9CgowMDAwMDAwMDgwMDAwNWJjIDxtYWluPjoKbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pCnsgCiAgICA4MDAwMDViYzoJZWIgYmYgZjAgNTggMDAgMjQgCXN0bWcJJXIxMSwlcjE1LDg4KCVyMTUpCiAgICA4MDAwMDVjMjoJYjkgMDQgMDAgMWYgICAgICAgCWxncgklcjEsJXIxNQogICAgODAwMDA1YzY6CWE3IGZiIGZmIDYwICAgICAgIAlhZ2hpCSVyMTUsLTE2MAogICAgODAwMDA1Y2E6CWUzIDEwIGYwIDAwIDAwIDI0IAlzdGcJJXIxLDAoJXIxNSkKCXJldHVybih0ZXN0KDUpKTsKICAgIDgwMDAwNWQwOglhNyAyOSAwMCAwNSAgICAgICAJbGdoaQklcjIsNQogICAgIyBicmFzbCBhbGxvd3MganVtcHMgPiA2NGsgJiBpcyBvdmVya2lsbCBoZXJlIGJyYXMgd291bGQgZG8gZnVuZQogICAgODAwMDA1ZDQ6CWMwIGU1IGZmIGZmIGZmIGVlIAlicmFzbAklcjE0LDgwMDAwNWIwIDx0ZXN0PiAKICAgIDgwMDAwNWRhOgllMyA0MCBmMSAxMCAwMCAwNCAJbGcJJXI0LDI3MiglcjE1KQogICAgODAwMDA1ZTA6CWViIGJmIGYwIGY4IDAwIDA0IAlsbWcJJXIxMSwlcjE1LDI0OCglcjE1KQogICAgODAwMDA1ZTY6CTA3IGY0ICAgICAgICAgICAgIAlicgklcjQKfQoKCgpDb21waWxpbmcgcHJvZ3JhbXMgZm9yIGRlYnVnZ2luZyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZ2R3YXJmLTIgbm93IHdvcmtzIGl0IHNob3VsZCBiZSBjb25zaWRlcmVkIHRoZSBkZWZhdWx0IGRlYnVnZ2luZwpmb3JtYXQgZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUgYXMgaXQgaXMgbW9yZSByZWxpYWJsZSBmb3IgZGVidWdnaW5nCnNoYXJlZCBsaWJyYXJpZXMsICBub3JtYWwgLWcgZGVidWdnaW5nIHdvcmtzIG11Y2ggYmV0dGVyIG5vdwpUaGFua3MgdG8gdGhlIElCTSBqYXZhIGNvbXBpbGVyIGRldmVsb3BlcnMgYnVnIHJlcG9ydHMuIAoKVGhpcyBpcyB0eXBpY2FsbHkgZG9uZSBhZGRpbmcvYXBwZW5kaW5nIHRoZSBmbGFncyAtZyBvciAtZ2R3YXJmLTIgdG8gdGhlIApDRkxBR1MgJiBMREZMQUdTIHZhcmlhYmxlcyBNYWtlZmlsZSBvZiB0aGUgcHJvZ3JhbSBjb25jZXJuZWQuCgpJZiB1c2luZyBnZGIgJiB5b3Ugd291bGQgbGlrZSBhY2N1cmF0ZSBkaXNwbGF5cyBvZiByZWdpc3RlcnMgJgogc3RhY2sgdHJhY2VzIGNvbXBpbGUgd2l0aG91dCBvcHRpbWlzYXRpb24gaS5lIG1ha2Ugc3VyZQp0aGF0IHRoZXJlIGlzIG5vIC1PMiBvciBzaW1pbGFyIG9uIHRoZSBDRkxBR1MgbGluZSBvZiB0aGUgTWFrZWZpbGUgJgp0aGUgZW1pdHRlZCBnY2MgY29tbWFuZHMsIG9idmlvdXNseSB0aGlzIHdpbGwgcHJvZHVjZSB3b3JzZSBjb2RlIAooIG5vdCBhZHZpc2FibGUgZm9yIHNoaXBtZW50ICkgYnV0IGl0IGlzIGFuICBhaWQgdG8gdGhlIGRlYnVnZ2luZyBwcm9jZXNzLgoKVGhpcyBhaWRzIGRlYnVnZ2luZyBiZWNhdXNlIHRoZSBjb21waWxlciB3aWxsIGNvcHkgcGFyYW1ldGVycyBwYXNzZWQgaW4KaW4gcmVnaXN0ZXJzIG9udG8gdGhlIHN0YWNrIHNvIGJhY2t0cmFjaW5nICYgbG9va2luZyBhdCBwYXNzZWQgaW4KcGFyYW1ldGVycyB3aWxsIHdvcmssIGhvd2V2ZXIgc29tZSBsYXJnZXIgcHJvZ3JhbXMgd2hpY2ggdXNlIGlubGluZSBmdW5jdGlvbnMKd2lsbCBub3QgY29tcGlsZSB3aXRob3V0IG9wdGltaXNhdGlvbi4KCkRlYnVnZ2luZyB3aXRoIG9wdGltaXNhdGlvbiBoYXMgc2luY2UgbXVjaCBpbXByb3ZlZCBhZnRlciBmaXhpbmcKc29tZSBidWdzLCBwbGVhc2UgbWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgZ2RiLTUuMCBvciBsYXRlciBkZXZlbG9wZWQgCmFmdGVyIE5vdicyMDAwLgoKRmlndXJpbmcgb3V0IGdjYyBjb21waWxlIGVycm9ycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklmIHlvdSBhcmUgZ2V0dGluZyBhIGxvdCBvZiBzeW50YXggZXJyb3JzIGNvbXBpbGluZyBhIHByb2dyYW0gJiB0aGUgcHJvYmxlbQppc24ndCBibGF0YW50bHkgb2J2aW91cyBmcm9tIHRoZSBzb3VyY2UuCkl0IG9mdGVuIGhlbHBzIHRvIGp1c3QgcHJlcHJvY2VzcyB0aGUgZmlsZSwgdGhpcyBpcyBkb25lIHdpdGggdGhlIC1FCm9wdGlvbiBpbiBnY2MuCldoYXQgdGhpcyBkb2VzIGlzIHRoYXQgaXQgcnVucyB0aHJvdWdoIHRoZSB2ZXJ5IGZpcnN0IHBoYXNlIG9mIGNvbXBpbGF0aW9uCiggY29tcGlsYXRpb24gaW4gZ2NjIGlzIGRvbmUgaW4gc2V2ZXJhbCBzdGFnZXMgJiBnY2MgY2FsbHMgbWFueSBwcm9ncmFtcyB0bwphY2hpZXZlIGl0cyBlbmQgcmVzdWx0ICkgd2l0aCB0aGUgLUUgb3B0aW9uIGdjYyBqdXN0IGNhbGxzIHRoZSBnY2MgcHJlcHJvY2Vzc29yIChjcHApLgpUaGUgYyBwcmVwcm9jZXNzb3IgZG9lcyB0aGUgZm9sbG93aW5nLCBpdCBqb2lucyBhbGwgdGhlIGZpbGVzICNpbmNsdWRlZCB0b2dldGhlcgpyZWN1cnNpdmVseSAoICNpbmNsdWRlIGZpbGVzIGNhbiAjaW5jbHVkZSBvdGhlciBmaWxlcyApICYgYWxzbyB0aGUgYyBmaWxlIHlvdSB3aXNoIHRvIGNvbXBpbGUuCkl0IHB1dHMgYSBmdWxseSBxdWFsaWZpZWQgcGF0aCBvZiB0aGUgI2luY2x1ZGVkIGZpbGVzIGluIGEgY29tbWVudCAmIGl0CmRvZXMgbWFjcm8gZXhwYW5zaW9uLgpUaGlzIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nIGJlY2F1c2UKMSkgWW91IGNhbiBkb3VibGUgY2hlY2sgd2hldGhlciB0aGUgZmlsZXMgeW91IGV4cGVjdCB0byBiZSBpbmNsdWRlZCBhcmUgdGhlIG9uZXMKdGhhdCBhcmUgYmVpbmcgaW5jbHVkZWQgKCBlLmcuIGRvdWJsZSBjaGVjayB0aGF0IHlvdSBhcmVuJ3QgZ29pbmcgdG8gdGhlIGkzODYgYXNtIGRpcmVjdG9yeSApLgoyKSBDaGVjayB0aGF0IG1hY3JvIGRlZmluaXRpb25zIGFyZW4ndCBjbGFzaGluZyB3aXRoIHR5cGVkZWZzLAozKSBDaGVjayB0aGF0IGRlZmluaXRvbnMgYXJlbid0IGJlaW5nIHVzZWQgYmVmb3JlIHRoZXkgYXJlIGJlaW5nIGluY2x1ZGVkLgo0KSBIZWxwcyBwdXQgdGhlIGxpbmUgZW1pdHRpbmcgdGhlIGVycm9yIHVuZGVyIHRoZSBtaWNyb3Njb3BlIGlmIGl0IGNvbnRhaW5zIG1hY3Jvcy4KCkZvciBjb252ZW5pZW5jZSB0aGUgTGludXgga2VybmVsJ3MgbWFrZWZpbGUgd2lsbCBkbyBwcmVwcm9jZXNzaW5nIGF1dG9tYXRpY2FsbHkgZm9yIHlvdQpieSBzdWZmaXhpbmcgdGhlIGZpbGUgeW91IHdhbnQgYnVpbHQgd2l0aCAuaSAoIGluc3RlYWQgb2YgLm8gKQoKZS5nLgpmcm9tIHRoZSBsaW51eCBkaXJlY3RvcnkgdHlwZQptYWtlIGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmkKdGhpcyB3aWxsIGJ1aWxkCgpzMzkwLWdjYyAtRF9fS0VSTkVMX18gLUkvaG9tZTEvYmFycm93L2xpbnV4L2luY2x1ZGUgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIKLWZuby1zdHJpY3QtYWxpYXNpbmcgLURfX1NNUF9fIC1waXBlIC1mbm8tc3RyZW5ndGgtcmVkdWNlICAgLUUgYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYwo+IGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmkgIAoKTm93IGxvb2sgYXQgc2lnbmFsLmkgeW91IHNob3VsZCBzZWUgc29tZXRoaW5nIGxpa2UuCgoKIyAxICIvaG9tZTEvYmFycm93L2xpbnV4L2luY2x1ZGUvYXNtL3R5cGVzLmgiIDEKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bW9kZV90Owp0eXBlZGVmIF9fc2lnbmVkX18gY2hhciBfX3M4Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191ODsKdHlwZWRlZiBfX3NpZ25lZF9fIHNob3J0IF9fczE2Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OwoKSWYgaW5zdGVhZCB5b3UgYXJlIGdldHRpbmcgZXJyb3JzIGZ1cnRoZXIgZG93biBlLmcuCnVua25vd24gaW5zdHJ1Y3Rpb246MjUxNSAibW92ZS5sIiBvciBiZXR0ZXIgc3RpbGwgdW5rbm93biBpbnN0cnVjdGlvbjoyNTE1IAoiRml4bWUgbm90IGltcGxlbWVudGVkIHlldCwgY2FsbCBNYXJ0aW4iIHlvdSBhcmUgcHJvYmFibHkgYXJlIGF0dGVtcHRpbmcgdG8gY29tcGlsZSBzb21lIGNvZGUgCm1lYW50IGZvciBhbm90aGVyIGFyY2hpdGVjdHVyZSBvciBjb2RlIHRoYXQgaXMgc2ltcGx5IG5vdCBpbXBsZW1lbnRlZCwgd2l0aCBhIGZpeG1lIHN0YXRlbWVudApzdHVjayBpbnRvIHRoZSBpbmxpbmUgYXNzZW1ibHkgY29kZSBzbyB0aGF0IHRoZSBhdXRob3Igb2YgdGhlIGZpbGUgbm93IGtub3dzIGhlIGhhcyB3b3JrIHRvIGRvLgpUbyBsb29rIGF0IHRoZSBhc3NlbWJseSBlbWl0dGVkIGJ5IGdjYyBqdXN0IGJlZm9yZSBpdCBpcyBhYm91dCB0byBjYWxsIGdhcyAoIHRoZSBnbnUgYXNzZW1ibGVyICkKdXNlIHRoZSAtUyBvcHRpb24uCkFnYWluIGZvciB5b3VyIGNvbnZlbmllbmNlIHRoZSBMaW51eCBrZXJuZWwncyBNYWtlZmlsZSB3aWxsIGhvbGQgeW91ciBoYW5kICYKZG8gYWxsIHRoaXMgZG9ua2V5IHdvcmsgZm9yIHlvdSBhbHNvIGJ5IGJ1aWxkaW5nIHRoZSBmaWxlIHdpdGggdGhlIC5zIHN1ZmZpeC4KZS5nLgpmcm9tIHRoZSBMaW51eCBkaXJlY3RvcnkgdHlwZSAKbWFrZSBhcmNoL3MzOTAva2VybmVsL3NpZ25hbC5zIAoKczM5MC1nY2MgLURfX0tFUk5FTF9fIC1JL2hvbWUxL2JhcnJvdy9saW51eC9pbmNsdWRlIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyCi1mbm8tc3RyaWN0LWFsaWFzaW5nIC1EX19TTVBfXyAtcGlwZSAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAgLVMgYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYyAKLW8gYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwucyAgCgoKVGhpcyB3aWxsIG91dHB1dCBzb21ldGhpbmcgbGlrZSwgKCBwbGVhc2Ugbm90ZSB0aGUgY29uc3RhbnQgcG9vbCAmIHRoZSB1c2VmdWwgY29tbWVudHMKaW4gdGhlIHByb2xvZ3VlIHRvIGdpdmUgeW91IGEgaGFuZCBhdCBpbnRlcnByZXRpbmcgaXQgKS4KCi5MQzU0OgoJLnN0cmluZwkibWlzYWxpZ25lZCAoX191MTYgKikgaW4gX194Y2hnXG4iCi5MQzU3OgoJLnN0cmluZwkibWlzYWxpZ25lZCAoX191MzIgKikgaW4gX194Y2hnXG4iCi5MJFBHMTogIyBQb29sIHN5c19zaWdzdXNwZW5kCi5MQzE5MjoKCS5sb25nCS0yNjI0MDEKLkxDMTkzOgoJLmxvbmcJLTEKLkxDMTk0OgoJLmxvbmcJc2NoZWR1bGUtLkwkUEcxCi5MQzE5NToKCS5sb25nCWRvX3NpZ25hbC0uTCRQRzEKCS5hbGlnbiA0Ci5nbG9ibCBzeXNfc2lnc3VzcGVuZAoJLnR5cGUJIHN5c19zaWdzdXNwZW5kLEBmdW5jdGlvbgpzeXNfc2lnc3VzcGVuZDoKIwlsZWFmIGZ1bmN0aW9uICAgICAgICAgICAwCiMJYXV0b21hdGljcyAgICAgICAgICAgICAgMTYKIwlvdXRnb2luZyBhcmdzICAgICAgICAgICAwCiMJbmVlZCBmcmFtZSBwb2ludGVyICAgICAgMAojCWNhbGwgYWxsb2NhICAgICAgICAgICAgIDAKIwloYXMgdmFyYXJncyAgICAgICAgICAgICAwCiMJaW5jb21pbmcgYXJncyAoc3RhY2spICAgMAojCWZ1bmN0aW9uIGxlbmd0aCAgICAgICAgIDE2OAoJU1RNCTgsMTUsMzIoMTUpCglMUgkwLDE1CglBSEkJMTUsLTExMgoJQkFTUgkxMywwCi5MJENPMToJQUhJCTEzLC5MJFBHMS0uTCRDTzEKCVNUCTAsMCgxNSkKCUxSICAgIDgsMgoJTiAgICAgNSwuTEMxOTItLkwkUEcxKDEzKSAKCkFkZGluZyAtZyB0byB0aGUgYWJvdmUgb3V0cHV0IG1ha2VzIHRoZSBvdXRwdXQgZXZlbiBtb3JlIHVzZWZ1bAplLmcuIHR5cGluZwptYWtlIENDOj0iczM5MC1nY2MgLWciIGtlcm5lbC9zY2hlZC5zCgp3aGljaCBjb21waWxlcy4KczM5MC1nY2MgLWcgLURfX0tFUk5FTF9fIC1JL2hvbWUvYmFycm93L2xpbnV4LTIuMy9pbmNsdWRlIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1waXBlIC1mbm8tc3RyZW5ndGgtcmVkdWNlICAgLVMga2VybmVsL3NjaGVkLmMgLW8ga2VybmVsL3NjaGVkLnMgCgphbHNvIG91dHB1dHMgc3RhYnMgKCBkZWJ1Z2dlciApIGluZm8sIGZyb20gdGhpcyBpbmZvIHlvdSBjYW4gZmluZCBvdXQgdGhlCm9mZnNldHMgJiBzaXplcyBvZiB2YXJpb3VzIGVsZW1lbnRzIGluIHN0cnVjdHVyZXMuCmUuZy4gdGhlIHN0YWIgZm9yIHRoZSBzdHJ1Y3R1cmUKc3RydWN0IHJsaW1pdCB7Cgl1bnNpZ25lZCBsb25nCXJsaW1fY3VyOwoJdW5zaWduZWQgbG9uZwlybGltX21heDsKfTsKaXMKLnN0YWJzICJybGltaXQ6VCgxNTEsMik9czhybGltX2N1cjooMCw1KSwwLDMyO3JsaW1fbWF4OigwLDUpLDMyLDMyOzsiLDEyOCwwLDAsMApmcm9tIHRoaXMgc3RhYiB5b3UgY2FuIHNlZSB0aGF0IApybGltaXRfY3VyIHN0YXJ0cyBhdCBiaXQgb2Zmc2V0IDAgJiBpcyAzMiBiaXRzIGluIHNpemUKcmxpbWl0X21heCBzdGFydHMgYXQgYml0IG9mZnNldCAzMiAmIGlzIDMyIGJpdHMgaW4gc2l6ZS4KCgpEZWJ1Z2dpbmcgVG9vbHM6Cj09PT09PT09PT09PT09PT0KCm9iamR1bXAKPT09PT09PQpUaGlzIGlzIGEgdG9vbCB3aXRoIG1hbnkgb3B0aW9ucyB0aGUgbW9zdCB1c2VmdWwgYmVpbmcgKCBpZiBjb21waWxlZCB3aXRoIC1nKS4Kb2JqZHVtcCAtLXNvdXJjZSA8dmljdGltIHByb2dyYW0gb3Igb2JqZWN0IGZpbGU+ID4gPHZpY3RpbXMgZGVidWcgbGlzdGluZyA+CgoKVGhlIHdob2xlIGtlcm5lbCBjYW4gYmUgY29tcGlsZWQgbGlrZSB0aGlzICggRG9pbmcgdGhpcyB3aWxsIG1ha2UgYSAxN01CIGtlcm5lbAomIGEgMjAwIE1CIGxpc3RpbmcgKSBob3dldmVyIHlvdSBoYXZlIHRvIHN0cmlwIGl0IGJlZm9yZSBidWlsZGluZyB0aGUgaW1hZ2UKdXNpbmcgdGhlIHN0cmlwIGNvbW1hbmQgdG8gbWFrZSBpdCBhIG1vcmUgcmVhc29uYWJsZSBzaXplIHRvIGJvb3QgaXQuCgpBIHNvdXJjZS9hc3NlbWJseSBtaXhlZCBkdW1wIG9mIHRoZSBrZXJuZWwgY2FuIGJlIGRvbmUgd2l0aCB0aGUgbGluZQpvYmpkdW1wIC0tc291cmNlIHZtbGludXggPiB2bWxpbnV4LmxzdApBbHNvIGlmIHRoZSBmaWxlIGlzbid0IGNvbXBpbGVkIC1nIHRoaXMgd2lsbCBvdXRwdXQgYXMgbXVjaCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KYXMgaXQgY2FuICggZS5nLiBmdW5jdGlvbiBuYW1lcyApLCBob3dldmVyLCB0aGlzIGlzIHZlcnkgc2xvdyBhcyBpdCBzcGVuZHMgbG90cwpvZiB0aW1lIHNlYXJjaGluZyBmb3IgZGVidWdnaW5nIGluZm8sIHRoZSBmb2xsb3dpbmcgc2VsZiBleHBsYW5pdG9yeSBsaW5lIHNob3VsZCBiZSB1c2VkIAppbnN0ZWFkIGlmIHRoZSBjb2RlIGlzbid0IGNvbXBpbGVkIC1nLgpvYmpkdW1wIC0tZGlzYXNzZW1ibGUtYWxsIC0tc3ltcyB2bWxpbnV4ID4gdm1saW51eC5sc3QgIAphcyBpdCBpcyBtdWNoIGZhc3RlcgoKQXMgaGFyZCBkcml2ZSBzcGFjZSBpcyB2YWx1YmxlIG1vc3Qgb2YgdXMgdXNlIHRoZSBmb2xsb3dpbmcgYXBwcm9hY2guCjEpIExvb2sgYXQgdGhlIGVtaXR0ZWQgcHN3IG9uIHRoZSBjb25zb2xlIHRvIGZpbmQgdGhlIGNyYXNoIGFkZHJlc3MgaW4gdGhlIGtlcm5lbC4KMikgTG9vayBhdCB0aGUgZmlsZSBTeXN0ZW0ubWFwICggaW4gdGhlIGxpbnV4IGRpcmVjdG9yeSApIHByb2R1Y2VkIHdoZW4gYnVpbGRpbmcgCnRoZSBrZXJuZWwgdG8gZmluZCB0aGUgY2xvc2VzdCBhZGRyZXNzIGxlc3MgdGhhbiB0aGUgY3VycmVudCBQU1cgdG8gZmluZCB0aGUKb2ZmZW5kaW5nIGZ1bmN0aW9uLgozKSB1c2UgZ3JlcCBvciBzaW1pbGFyIHRvIHNlYXJjaCB0aGUgc291cmNlIHRyZWUgbG9va2luZyBmb3IgdGhlIHNvdXJjZSBmaWxlCiB3aXRoIHRoaXMgZnVuY3Rpb24gaWYgeW91IGRvbid0IGtub3cgd2hlcmUgaXQgaXMuCjQpIHJlYnVpbGQgdGhpcyBvYmplY3QgZmlsZSB3aXRoIC1nIG9uLCBhcyBhbiBleGFtcGxlIHN1cHBvc2UgdGhlIGZpbGUgd2FzCiggL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLm8gKSAKNSkgQXNzdW1pbmcgdGhlIGZpbGUgd2l0aCB0aGUgZXJyb25lb3VzIGZ1bmN0aW9uIGlzIHNpZ25hbC5jIE1vdmUgdG8gdGhlIGJhc2Ugb2YgdGhlIApMaW51eCBzb3VyY2UgdHJlZS4KNikgcm0gL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLm8KNykgbWFrZSAvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwubwo4KSB3YXRjaCB0aGUgZ2NjIGNvbW1hbmQgbGluZSBlbWl0dGVkCjkpIHR5cGUgaXQgaW4gYWdhaW4gb3IgYWxlcm5hdGl2ZWx5IGN1dCAmIHBhc3RlIGl0IG9uIHRoZSBjb25zb2xlIGFkZGluZyB0aGUgLWcgb3B0aW9uLgoxMCkgb2JqZHVtcCAtLXNvdXJjZSBhcmNoL3MzOTAva2VybmVsL3NpZ25hbC5vID4gc2lnbmFsLmxzdApUaGlzIHdpbGwgb3V0cHV0IHRoZSBzb3VyY2UgJiB0aGUgYXNzZW1ibHkgaW50ZXJtaXhlZCwgYXMgdGhlIHNuaXBwZXQgYmVsb3cgc2hvd3MKVGhpcyB3aWxsIHVuZm9ydHVuYXRlbHkgb3V0cHV0IGFkZHJlc3NlcyB3aGljaCBhcmVuJ3QgdGhlIHNhbWUKYXMgdGhlIGtlcm5lbCBvbmVzIHlvdSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYXJvdW5kIHRoZSBtZW50YWwgYXJpdGhtZXRpYwpieSBwbGF5aW5nIHdpdGggdGhlIC0tYWRqdXN0LXZtYSBwYXJhbWV0ZXIgdG8gb2JqZHVtcC4KCgoKCmV4dGVybiBpbmxpbmUgdm9pZCBzcGluX2xvY2soc3BpbmxvY2tfdCAqbHApCnsKICAgICAgYTA6ICAgICAgIDE4IDM0ICAgICAgICAgICBsciAgICAgICVyMywlcjQKICAgICAgYTI6ICAgICAgIGE3IDNhIDAzIGJjICAgICBhaGkgICAgICVyMyw5NTYKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGUoIiAgICBsaGkgICAxLC0xXG4iCiAgICAgIGE2OiAgICAgICBhNyAxOCBmZiBmZiAgICAgbGhpICAgICAlcjEsLTEKICAgICAgYWE6ICAgICAgIDFmIDAwICAgICAgICAgICBzbHIgICAgICVyMCwlcjAKICAgICAgYWM6ICAgICAgIGJhIDAxIDMwIDAwICAgICBjcyAgICAgICVyMCwlcjEsMCglcjMpCiAgICAgIGIwOiAgICAgICBhNyA0NCBmZiBmZCAgICAgam0gICAgICBhYSA8c3lzX3NpZ3N1c3BlbmQrMHgyZT4KICAgICAgICBzYXZlc2V0ID0gY3VycmVudC0+YmxvY2tlZDsKICAgICAgYjQ6ICAgICAgIGQyIDA3IGYwIDY4ICAgICBtdmMgICAgIDEwNCg4LCVyMTUpLDk3MiglcjQpCiAgICAgIGI4OiAgICAgICA0MyBjYwogICAgICAgIHJldHVybiAoc2V0LT5zaWdbMF0gJiBtYXNrKSAhPSAwOwp9IAoKNikgSWYgZGVidWdnaW5nIHVuZGVyIFZNIGdvIGRvd24gdG8gdGhhdCBzZWN0aW9uIGluIHRoZSBkb2N1bWVudCBmb3IgbW9yZSBpbmZvLgoKCkkgbm93IGhhdmUgYSB0b29sIHdoaWNoIHRha2VzIHRoZSBwYWluIG91dCBvZiAtLWFkanVzdC12bWEKJiB5b3UgYXJlIGFibGUgdG8gZG8gc29tZXRoaW5nIGxpa2UKbWFrZSAvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5sc3QKJiBpdCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlcyB0aGUgY29ycmVjdGx5IHJlbG9jYXRlZCBlbnRyaWVzIGZvcgp0aGUgdGV4dCBzZWdtZW50IGluIHRyYXBzLmxzdC4KVGhpcyB0b29sIGlzIG5vdyBzdGFuZGFyZCBpbiBsaW51eCBkaXN0cm8ncyBpbiBzY3JpcHRzL21ha2Vsc3QKCnN0cmFjZToKLS0tLS0tLQpRLiBXaGF0IGlzIGl0ID8KQS4gSXQgaXMgYSB0b29sIGZvciBpbnRlcmNlcHRpbmcgY2FsbHMgdG8gdGhlIGtlcm5lbCAmIGxvZ2dpbmcgdGhlbQp0byBhIGZpbGUgJiBvbiB0aGUgc2NyZWVuLgoKUS4gV2hhdCB1c2UgaXMgaXQgPwpBLiBZb3UgY2FuIHVzZWQgaXQgdG8gZmluZCBvdXQgd2hhdCBmaWxlcyBhIHBhcnRpY3VsYXIgcHJvZ3JhbSBvcGVucy4KCgoKRXhhbXBsZSAxCi0tLS0tLS0tLQpJZiB5b3Ugd2FudGVkIHRvIGtub3cgZG9lcyBwaW5nIHdvcmsgYnV0IGRpZG4ndCBoYXZlIHRoZSBzb3VyY2UgCnN0cmFjZSBwaW5nIC1jIDEgMTI3LjAuMC4xICAKJiB0aGVuIGxvb2sgYXQgdGhlIG1hbiBwYWdlcyBmb3IgZWFjaCBvZiB0aGUgc3lzY2FsbHMgYmVsb3csCiggSW4gZmFjdCB0aGlzIGlzIHNvbWV0aW1lcyBlYXNpZXIgdGhhbiBsb29raW5nIGF0IHNvbWUgc3BhZ2V0dGkKc291cmNlIHdoaWNoIGNvbmRpdGlvbmFsbHkgY29tcGlsZXMgZm9yIHNldmVyYWwgYXJjaGl0ZWN0dXJlcyApCk5vdCBldmVyeXRoaW5nIHRoYXQgaXQgdGhyb3dzIG91dCBuZWVkcyB0byBtYWtlIHNlbnNlIGltbWVhZGlhdGVseQoKSnVzdCBsb29raW5nIHF1aWNrbHkgeW91IGNhbiBzZWUgdGhhdCBpdCBpcyBtYWtpbmcgdXAgYSBSQVcgc29ja2V0CmZvciB0aGUgSUNNUCBwcm90b2NvbC4KRG9pbmcgYW4gYWxhcm0oMTApIGZvciBhIDEwIHNlY29uZCB0aW1lb3V0CiYgZG9pbmcgYSBnZXR0aW1lb2ZkYXkgY2FsbCBiZWZvcmUgJiBhZnRlciBlYWNoIHJlYWQgdG8gc2VlIApob3cgbG9uZyB0aGUgcmVwbGllcyB0b29rLCAmIHdyaXRpbmcgc29tZSB0ZXh0IHRvIHN0ZG91dCBzbyB0aGUgdXNlcgpoYXMgYW4gaWRlYSB3aGF0IGlzIGdvaW5nIG9uLgoKc29ja2V0KFBGX0lORVQsIFNPQ0tfUkFXLCBJUFBST1RPX0lDTVApID0gMwpnZXR1aWQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwCnNldHVpZCgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAKc3RhdCgiL3Vzci9zaGFyZS9sb2NhbGUvQy9saWJjLmNhdCIsIDB4YmZmZmYxMzQpID0gLTEgRU5PRU5UIChObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5KQpzdGF0KCIvdXNyL3NoYXJlL2xvY2FsZS9saWJjL0MiLCAweGJmZmZmMTM0KSA9IC0xIEVOT0VOVCAoTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSkKc3RhdCgiL3Vzci9sb2NhbC9zaGFyZS9sb2NhbGUvQy9saWJjLmNhdCIsIDB4YmZmZmYxMzQpID0gLTEgRU5PRU5UIChObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5KQpnZXRwaWQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAzNTMKc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19CUk9BRENBU1QsIFsxXSwgNCkgPSAwCnNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCBbNDkxNTJdLCA0KSA9IDAKZnN0YXQoMSwge3N0X21vZGU9U19JRkNIUnwwNjIwLCBzdF9yZGV2PW1ha2VkZXYoMywgMSksIC4uLn0pID0gMAptbWFwKDAsIDQwOTYsIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTLCAtMSwgMCkgPSAweDQwMDA4MDAwCmlvY3RsKDEsIFRDR0VUUywge0I5NjAwIG9wb3N0IGlzaWcgaWNhbm9uIGVjaG8gLi4ufSkgPSAwCndyaXRlKDEsICJQSU5HIDEyNy4wLjAuMSAoMTI3LjAuMC4xKTogNTYgZCIuLi4sIDQyUElORyAxMjcuMC4wLjEgKDEyNy4wLjAuMSk6IDU2IGRhdGEgYnl0ZXMKKSA9IDQyCnNpZ2FjdGlvbihTSUdJTlQsIHsweDgwNDliYTAsIFtdLCBTQV9SRVNUQVJUfSwge1NJR19ERkx9KSA9IDAgCnNpZ2FjdGlvbihTSUdBTFJNLCB7MHg4MDQ5NjAwLCBbXSwgU0FfUkVTVEFSVH0sIHtTSUdfREZMfSkgPSAwCmdldHRpbWVvZmRheSh7OTQ4OTA0NzE5LCAxMzg5NTF9LCBOVUxMKSA9IDAKc2VuZHRvKDMsICJcMTBcMERcMjAxYVwxXDBcMFwxNyNcMjE3OFwzMDdcMzYiLi4uLCA2NCwgMCwge3Npbl9mYW1pbHk9QUZfSU5FVCwKc2luX3BvcnQ9aHRvbnMoMCksIHNpbl9hZGRyPWluZXRfYWRkcigiMTI3LjAuMC4xIil9LCAxNikgPSA2NApzaWdhY3Rpb24oU0lHQUxSTSwgezB4ODA0OTYwMCwgW10sIFNBX1JFU1RBUlR9LCB7MHg4MDQ5NjAwLCBbXSwgU0FfUkVTVEFSVH0pID0gMApzaWdhY3Rpb24oU0lHQUxSTSwgezB4ODA0OWJhMCwgW10sIFNBX1JFU1RBUlR9LCB7MHg4MDQ5NjAwLCBbXSwgU0FfUkVTVEFSVH0pID0gMAphbGFybSgxMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwCnJlY3Zmcm9tKDMsICJFXDBcMFRcMDAwNVwwXDBAXDF8clwxNzdcMFwwXDFcMTc3Ii4uLiwgMTkyLCAwLCAKe3Npbl9mYW1pbHk9QUZfSU5FVCwgc2luX3BvcnQ9aHRvbnMoNTA4ODIpLCBzaW5fYWRkcj1pbmV0X2FkZHIoIjEyNy4wLjAuMSIpfSwgWzE2XSkgPSA4NApnZXR0aW1lb2ZkYXkoezk0ODkwNDcxOSwgMTYwMjI0fSwgTlVMTCkgPSAwCnJlY3Zmcm9tKDMsICJFXDBcMFRcMDAwNlwwXDBcMzc3XDFcMjc1cFwxNzdcMCIuLi4sIDE5MiwgMCwgCntzaW5fZmFtaWx5PUFGX0lORVQsIHNpbl9wb3J0PWh0b25zKDUwODgyKSwgc2luX2FkZHI9aW5ldF9hZGRyKCIxMjcuMC4wLjEiKX0sIFsxNl0pID0gODQKZ2V0dGltZW9mZGF5KHs5NDg5MDQ3MTksIDE2Njk1Mn0sIE5VTEwpID0gMAp3cml0ZSgxLCAiNjQgYnl0ZXMgZnJvbSAxMjcuMC4wLjE6IGljbXBfc2UiLi4uLCAKNTc2NCBieXRlcyBmcm9tIDEyNy4wLjAuMTogaWNtcF9zZXE9MCB0dGw9MjU1IHRpbWU9MjguMCBtcwoKRXhhbXBsZSAyCi0tLS0tLS0tLQpzdHJhY2UgcGFzc3dkIDI+JjEgfCBncmVwIG9wZW4KcHJvZHVjZXMgdGhlIGZvbGxvd2luZyBvdXRwdXQKb3BlbigiL2V0Yy9sZC5zby5jYWNoZSIsIE9fUkRPTkxZKSAgICAgID0gMwpvcGVuKCIvb3B0L2tkZS9saWIvbGliYy5zby41IiwgT19SRE9OTFkpID0gLTEgRU5PRU5UIChObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5KQpvcGVuKCIvbGliL2xpYmMuc28uNSIsIE9fUkRPTkxZKSAgICAgICAgPSAzCm9wZW4oIi9kZXYiLCBPX1JET05MWSkgICAgICAgICAgICAgICAgICA9IDMKb3BlbigiL3Zhci9ydW4vdXRtcCIsIE9fUkRPTkxZKSAgICAgICAgID0gMwpvcGVuKCIvZXRjL3Bhc3N3ZCIsIE9fUkRPTkxZKSAgICAgICAgICAgPSAzCm9wZW4oIi9ldGMvc2hhZG93IiwgT19SRE9OTFkpICAgICAgICAgICA9IDMKb3BlbigiL2V0Yy9sb2dpbi5kZWZzIiwgT19SRE9OTFkpICAgICAgID0gNApvcGVuKCIvZGV2L3R0eSIsIE9fUkRPTkxZKSAgICAgICAgICAgICAgPSA0IAoKVGhlIDI+JjEgaXMgZG9uZSB0byByZWRpcmVjdCBzdGRlcnIgdG8gc3Rkb3V0ICYgZ3JlcCBpcyB0aGVuIGZpbHRlcmluZyB0aGlzIGlucHV0IAp0aHJvdWdoIHRoZSBwaXBlIGZvciBlYWNoIGxpbmUgY29udGFpbmluZyB0aGUgc3RyaW5nIG9wZW4uCgoKRXhhbXBsZSAzCi0tLS0tLS0tLQpHZXR0aW5nIHNvcGhpc3RvY2F0ZWQKdGVsbmV0ZCBjcmFzaGVzIG9uICYgSSBkb24ndCBrbm93IHdoeQpTdGVwcwotLS0tLQoxKSBSZXBsYWNlIHRoZSBmb2xsb3dpbmcgbGluZSBpbiAvZXRjL2luZXRkLmNvbmYKdGVsbmV0ICBzdHJlYW0gIHRjcCAgICAgbm93YWl0ICByb290ICAgIC91c3Ivc2Jpbi9pbi50ZWxuZXRkIC1oIAp3aXRoCnRlbG5ldCAgc3RyZWFtICB0Y3AgICAgIG5vd2FpdCAgcm9vdCAgICAvYmxhaAoKMikgQ3JlYXRlIHRoZSBmaWxlIC9ibGFoIHdpdGggdGhlIGZvbGxvd2luZyBjb250ZW50cyB0byBzdGFydCB0cmFjaW5nIHRlbG5ldGQgCiMhL2Jpbi9iYXNoCi91c3IvYmluL3N0cmFjZSAtby90MSAtZiAvdXNyL3NiaW4vaW4udGVsbmV0ZCAtaCAKMykgY2htb2QgNzAwIC9ibGFoIHRvIG1ha2UgaXQgZXhlY3V0YWJsZSBvbmx5IHRvIHJvb3QKNCkKa2lsbGFsbCAtSFVQIGluZXRkCm9yIHBzIGF1eCB8IGdyZXAgaW5ldGQKZ2V0IGluZXRkJ3MgcHJvY2VzcyBpZAomIGtpbGwgLUhVUCBpbmV0ZCB0byByZXN0YXJ0IGl0LgoKSW1wb3J0YW50IG9wdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0KLW8gaXMgdXNlZCB0byB0ZWxsIHN0cmFjZSB0byBvdXRwdXQgdG8gYSBmaWxlIGluIG91ciBjYXNlIHQxIGluIHRoZSByb290IGRpcmVjdG9yeQotZiBpcyB0byBmb2xsb3cgY2hpbGRyZW4gaS5lLgplLmcgaW4gb3VyIGNhc2UgYWJvdmUgdGVsbmV0ZCB3aWxsIHN0YXJ0IHRoZSBsb2dpbiBwcm9jZXNzICYgc3Vic2VxdWVudGx5IGEgc2hlbGwgbGlrZSBiYXNoLgpZb3Ugd2lsbCBiZSBhYmxlIHRvIHRlbGwgd2hpY2ggaXMgd2hpY2ggZnJvbSB0aGUgcHJvY2VzcyBJRCdzIGxpc3RlZCBvbiB0aGUgbGVmdCBoYW5kIHNpZGUKb2YgdGhlIHN0cmFjZSBvdXRwdXQuCi1wPHBpZD4gd2lsbCB0ZWxsIHN0cmFjZSB0byBhdHRhY2ggdG8gYSBydW5uaW5nIHByb2Nlc3MsIHl1cCB0aGlzIGNhbiBiZSBkb25lIHByb3ZpZGVkCiBpdCBpc24ndCBiZWluZyB0cmFjZWQgb3IgZGVidWdnZWQgYWxyZWFkeSAmIHlvdSBoYXZlIGVub3VnaCBwcml2aWxlZ2VzLAp0aGUgcmVhc29uIDIgcHJvY2Vzc2VzIGNhbm5vdCB0cmFjZSBvciBkZWJ1ZyB0aGUgc2FtZSBwcm9ncmFtIGlzIHRoYXQgc3RyYWNlCmJlY29tZXMgdGhlIHBhcmVudCBwcm9jZXNzIG9mIHRoZSBvbmUgYmVpbmcgZGVidWdnZWQgJiBwcm9jZXNzZXMgKCB1bmxpa2UgcGVvcGxlICkKY2FuIGhhdmUgb25seSBvbmUgcGFyZW50LgoKCkhvd2V2ZXIgdGhlIGZpbGUgL3QxIHdpbGwgZ2V0IGJpZyBxdWl0ZSBxdWlja2x5CnRvIHRlc3QgaXQgdGVsbmV0IDEyNy4wLjAuMQoKbm93IGxvb2sgYXQgd2hhdCBmaWxlcyBpbi50ZWxuZXRkIGV4ZWN2ZSdkCjQxMyAgIGV4ZWN2ZSgiL3Vzci9zYmluL2luLnRlbG5ldGQiLCBbIi91c3Ivc2Jpbi9pbi50ZWxuZXRkIiwgIi1oIl0sIFsvKiAxNyB2YXJzICovXSkgPSAwCjQxNCAgIGV4ZWN2ZSgiL2Jpbi9sb2dpbiIsIFsiL2Jpbi9sb2dpbiIsICItaCIsICJsb2NhbGhvc3QiLCAiLXAiXSwgWy8qIDIgdmFycyAqL10pID0gMCAKCldoZXkgaXQgd29ya2VkIS4KCgpPdGhlciBoaW50czoKLS0tLS0tLS0tLS0tCklmIHRoZSBwcm9ncmFtIGlzIG5vdCB2ZXJ5IGludGVyYWN0aXZlICggaS5lLiBub3QgbXVjaCBrZXlib2FyZCBpbnB1dCApCiYgaXMgY3Jhc2hpbmcgaW4gb25lIGFyY2hpdGVjdHVyZSBidXQgbm90IGluIGFub3RoZXIgeW91IGNhbiBkbyAKYW4gc3RyYWNlIG9mIGJvdGggcHJvZ3JhbXMgdW5kZXIgYXMgaWRlbnRpY2FsIGEgc2NlbmFyaW8gYXMgeW91IGNhbgpvbiBib3RoIGFyY2hpdGVjdHVyZXMgb3V0cHV0dGluZyB0byBhIGZpbGUgdGhlbi4KZG8gYSBkaWZmIG9mIHRoZSB0d28gdHJhY2VzIHVzaW5nIHRoZSBkaWZmIHByb2dyYW0KaS5lLgpkaWZmIG91dHB1dDEgb3V0cHV0MgomIG1heWJlIHlvdSdsbCBiZSBhYmxlIHRvIHNlZSB3aGVyZSB0aGUgY2FsbCBwYXRocyBkaWZmZXJlZCwgdGhpcwppcyBwb3NzaWJseSBuZWFyIHRoZSBjYXVzZSBvZiB0aGUgY3Jhc2guIAoKTW9yZSBpbmZvCi0tLS0tLS0tLQpMb29rIGF0IG1hbiBwYWdlcyBmb3Igc3RyYWNlICYgdGhlIHZhcmlvdXMgc3lzY2FsbHMKZS5nLiBtYW4gc3RyYWNlLCBtYW4gYWxhcm0sIG1hbiBzb2NrZXQuCgoKUGVyZm9ybWFuY2UgRGVidWdnaW5nCj09PT09PT09PT09PT09PT09PT09PQpnY2MgaXMgY2FwaWJsZSBvZiBjb21waWxpbmcgaW4gcHJvZmlsaW5nIGNvZGUganVzdCBhZGQgdGhlIC1wIG9wdGlvbgp0byB0aGUgQ0ZMQUdTLCB0aGlzIG9idmlvdXNseSBhZmZlY3RzIHByb2dyYW0gc2l6ZSAmIHBlcmZvcm1hbmNlLgpUaGlzIGNhbiBiZSB1c2VkIGJ5IHRoZSBncHJvZiBnbnUgcHJvZmlsaW5nIHRvb2wgb3IgdGhlCmdjb3YgdGhlIGdudSBjb2RlIGNvdmVyYWdlIHRvb2wgKCBjb2RlIGNvdmVyYWdlIGlzIGEgbWVhbnMgb2YgdGVzdGluZwpjb2RlIHF1YWxpdHkgYnkgY2hlY2tpbmcgaWYgYWxsIHRoZSBjb2RlIGluIGFuIGV4ZWN1dGFibGUgaW4gZXhlcmNpc2VkIGJ5CmEgdGVzdGVyICkuCgoKVXNpbmcgdG9wIHRvIGZpbmQgb3V0IHdoZXJlIHByb2Nlc3NlcyBhcmUgc2xlZXBpbmcgaW4gdGhlIGtlcm5lbAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRvIGRvIHRoaXMgY29weSB0aGUgU3lzdGVtLm1hcCBmcm9tIHRoZSByb290IGRpcmVjdG9yeSB3aGVyZQp0aGUgbGludXgga2VybmVsIHdhcyBidWlsdCB0byB0aGUgL2Jvb3QgZGlyZWN0b3J5IG9uIHlvdXIgCmxpbnV4IG1hY2hpbmUuClN0YXJ0IHRvcApOb3cgdHlwZSBmVTxyZXR1cm4+CllvdSBzaG91bGQgc2VlIGEgbmV3IGZpZWxkIGNhbGxlZCBXQ0hBTiB3aGljaAp0ZWxscyB5b3Ugd2hlcmUgZWFjaCBwcm9jZXNzIGlzIHNsZWVwaW5nIGhlcmUgaXMgYSB0eXBpY2FsIG91dHB1dC4KIAogNjo1OXBtICB1cCA0MSBtaW4sICAxIHVzZXIsICBsb2FkIGF2ZXJhZ2U6IDAuMDAsIDAuMDAsIDAuMDAKMjggcHJvY2Vzc2VzOiAyNyBzbGVlcGluZywgMSBydW5uaW5nLCAwIHpvbWJpZSwgMCBzdG9wcGVkCkNQVSBzdGF0ZXM6ICAwLjAlIHVzZXIsICAwLjElIHN5c3RlbSwgIDAuMCUgbmljZSwgOTkuOCUgaWRsZQpNZW06ICAgMjU0OTAwSyBhdiwgICA0NTk3NksgdXNlZCwgIDIwODkyNEsgZnJlZSwgICAgICAgMEsgc2hyZCwgICAyODYzNksgYnVmZgpTd2FwOiAgICAgICAwSyBhdiwgICAgICAgMEsgdXNlZCwgICAgICAgMEsgZnJlZSAgICAgICAgICAgICAgICAgICAgODYyMEsgY2FjaGVkCgogIFBJRCBVU0VSICAgICBQUkkgIE5JICBTSVpFICBSU1MgU0hBUkUgV0NIQU4gICAgIFNUQVQgIExJQiAlQ1BVICVNRU0gICBUSU1FIENPTU1BTkQKICA3NTAgcm9vdCAgICAgIDEyICAgMCAgIDg0OCAgODQ4ICAgNzAwIGRvX3NlbGVjdCBTICAgICAgIDAgIDAuMSAgMC4zICAgMDowMCBpbi50ZWxuZXRkCiAgNzY3IHJvb3QgICAgICAxNiAgIDAgIDExNDAgMTE0MCAgIDk2NCAgICAgICAgICAgUiAgICAgICAwICAwLjEgIDAuNCAgIDA6MDAgdG9wCiAgICAxIHJvb3QgICAgICAgOCAgIDAgICAyMTIgIDIxMiAgIDE4MCBkb19zZWxlY3QgUyAgICAgICAwICAwLjAgIDAuMCAgIDA6MDAgaW5pdAogICAgMiByb290ICAgICAgIDkgICAwICAgICAwICAgIDAgICAgIDAgZG93bl9pbnRlIFNXICAgICAgMCAgMC4wICAwLjAgICAwOjAwIGttY2hlY2sKClRoZSB0aW1lIGNvbW1hbmQKLS0tLS0tLS0tLS0tLS0tLQpBbm90aGVyIHJlbGF0ZWQgY29tbWFuZCBpcyB0aGUgdGltZSBjb21tYW5kIHdoaWNoIGdpdmVzIHlvdSBhbiBpbmRpY2F0aW9uCm9mIHdoZXJlIGEgcHJvY2VzcyBpcyBzcGVuZGluZyB0aGUgbWFqb3JpdHkgb2YgaXRzIHRpbWUuCmUuZy4KdGltZSBwaW5nIC1jIDUgbmMKb3V0cHV0cwpyZWFsCTBtNC4wNTRzCnVzZXIJMG0wLjAxMHMKc3lzCTBtMC4wMTBzCgpEZWJ1Z2dpbmcgdW5kZXIgVk0KPT09PT09PT09PT09PT09PT09CgpOb3RlcwotLS0tLQpBZGRyZXNzZXMgJiB2YWx1ZXMgaW4gdGhlIFZNIGRlYnVnZ2VyIGFyZSBhbHdheXMgaGV4IG5ldmVyIGRlY2ltYWwKQWRkcmVzcyByYW5nZXMgYXJlIG9mIHRoZSBmb3JtYXQgPEhleFZhbHVlMT4tPEhleFZhbHVlMj4gb3IgPEhleFZhbHVlMT4uPEhleFZhbHVlMj4gCmUuZy4gVGhlIGFkZHJlc3MgcmFuZ2UgIDB4MjAwMCB0byAweDMwMDAgY2FuIGJlIGRlc2NyaWJlZCBkZXNjcmliZWQgYXMKMjAwMC0zMDAwIG9yIDIwMDAuMTAwMAoKVGhlIFZNIERlYnVnZ2VyIGlzIGNhc2UgaW5zZW5zaXRpdmUuCgpWTSdzIHN0cmVuZ3RocyBhcmUgdXN1YWxseSBvdGhlciBkZWJ1Z2dlcnMgd2Vha25lc3NlcyB5b3UgY2FuIGdldCBhdCBhbnkgcmVzb3VyY2UKbm8gbWF0dGVyIGhvdyBzZW5zaXRpdmUgZS5nLiBtZW1vcnkgbWFuYWdlbWVudCByZXNvdXJjZXMsY2hhbmdlIGFkZHJlc3MgdHJhbnNsYXRpb24KaW4gdGhlIFBTVy4gRm9yIGtlcm5lbCBoYWNraW5nIHlvdSB3aWxsIHJlYXAgZGl2aWRlbmRzIGlmIHlvdSBnZXQgZ29vZCBhdCBpdC4KClRoZSBWTSBEZWJ1Z2dlciBkaXNwbGF5cyBvcGVyYXRvcnMgYnV0IG5vdCBvcGVyYW5kcywgcHJvYmFibHkgYmVjYXVzZSBzb21lCm9mIGl0IHdhcyB3cml0dGVuIHdoZW4gbWVtb3J5IHdhcyBleHBlbnNpdmUgJiB0aGUgcHJvZ3JhbW1lciB3YXMgcHJvYmFibHkgcHJvdWQgdGhhdAppdCBmaXR0ZWQgaW50byAyayBvZiBtZW1vcnkgJiB0aGUgcHJvZ3JhbW1lcnMgJiBkaWRuJ3Qgd2FudCB0byBzaG9jayBoYXJkY29yZSBWTSdlcnMgYnkKY2hhbmdpbmcgdGhlIGludGVyZmFjZSA6LSksIGFsc28gdGhlIGRlYnVnZ2VyIGRpc3BsYXlzIHVzZWZ1bCBpbmZvcm1hdGlvbiBvbiB0aGUgc2FtZSBsaW5lICYgCnRoZSBhdXRob3Igb2YgdGhlIGNvZGUgcHJvYmFibHkgZmVsdCB0aGF0IGl0IHdhcyBhIGdvb2QgaWRlYSBub3QgdG8gZ28gb3ZlciAKdGhlIDgwIGNvbHVtbnMgb24gdGhlIHNjcmVlbi4gCgpBcyBzb21lIG9mIHlvdSBhcmUgcHJvYmFibHkgaW4gYSBwYW5pYyBub3cgdGhpcyBpc24ndCBhcyB1bmludHVpdGl2ZSBhcyBpdCBtYXkgc2VlbQphcyB0aGUgMzkwIGluc3RydWN0aW9ucyBhcmUgZWFzeSB0byBkZWNvZGUgbWVudGFsbHkgJiB5b3UgY2FuIG1ha2UgYSBnb29kIGd1ZXNzIGF0IGEgbG90IApvZiB0aGVtIGFzIGFsbCB0aGUgb3BlcmFuZHMgYXJlIG5pYmJsZSAoIGhhbGYgYnl0ZSBhbGlnbmVkICkgJiBpZiB5b3UgaGF2ZSBhbiBvYmpkdW1wIGxpc3RpbmcKYWxzbyBpdCBpcyBxdWl0ZSBlYXN5IHRvIGZvbGxvdywgaWYgeW91IGRvbid0IGhhdmUgYW4gb2JqZHVtcCBsaXN0aW5nIGtlZXAgYSBjb3B5IG9mCnRoZSBzLzM5MCBSZWZlcmVuY2UgU3VtbWFyeSAmIGxvb2sgYXQgYmV0d2VlbiBwYWdlcyAyICYgNyBvciBhbHRlcm5hdGl2ZWx5IHRoZQpzLzM5MCBwcmluY2lwbGVzIG9mIG9wZXJhdGlvbi4KZS5nLiBldmVuIEkgY2FuIGd1ZXNzIHRoYXQgCjAwMDFBRkY4JyBMUiAgICAxODBGICAgICAgICBDQyAwCmlzIGEgKCBsb2FkIHJlZ2lzdGVyICkgbHIgcjAscjE1IAoKQWxzbyBpdCBpcyB2ZXJ5IGVhc3kgdG8gdGVsbCB0aGUgbGVuZ3RoIG9mIGEgMzkwIGluc3RydWN0aW9uIGZyb20gdGhlIDIgbW9zdCBzaWduaWZpY2FudApiaXRzIGluIHRoZSBpbnN0cnVjdGlvbiAoIG5vdCB0aGF0IHRoaXMgaW5mbyBpcyByZWFsbHkgdXNlZnVsIGV4Y2VwdCBpZiB5b3UgYXJlIHRyeWluZyB0bwptYWtlIHNlbnNlIG9mIGEgaGV4ZHVtcCBvZiBjb2RlICkuCkhlcmUgaXMgYSB0YWJsZQpCaXRzICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiBMZW5ndGgKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCjAwICAgICAgICAgICAgICAgICAgICAgICAgICAyIEJ5dGVzCjAxICAgICAgICAgICAgICAgICAgICAgICAgICA0IEJ5dGVzCjEwICAgICAgICAgICAgICAgICAgICAgICAgICA0IEJ5dGVzCjExICAgICAgICAgICAgICAgICAgICAgICAgICA2IEJ5dGVzCgoKCgpUaGUgZGVidWdnZXIgYWxzbyBkaXNwbGF5cyBvdGhlciB1c2VmdWwgaW5mbyBvbiB0aGUgc2FtZSBsaW5lIHN1Y2ggYXMgdGhlCmFkZHJlc3NlcyBiZWluZyBvcGVyYXRlZCBvbiBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgb2YgYnJhbmNoZXMgJiBjb25kaXRpb24gY29kZXMuCmUuZy4gIAowMDAxOTczNicgQUhJICAgQTdEQUZGMEUgICAgQ0MgMQowMDAxOThCQScgQlJDICAgQTc4NDAwMDQgLT4gMDAwMTk4QzInICAgQ0MgMAowMDAxOThDRScgU1RNICAgOTAwRUYwNjggPj4gMEZBOTVFNzggICAgQ0MgMgoKCgpVc2VmdWwgVk0gZGVidWdnZXIgY29tbWFuZHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpJIHN1cHBvc2UgSSdkIGJldHRlciBtZW50aW9uIHRoaXMgYmVmb3JlIEkgc3RhcnQKdG8gbGlzdCB0aGUgY3VycmVudCBhY3RpdmUgdHJhY2VzIGRvIApRIFRSCnRoZXJlIGNhbiBiZSBhIG1heGltdW0gb2YgMjU1IG9mIHRoZXNlIHBlciBzZXQKKCBtb3JlIGFib3V0IHRyYWNlIHNldHMgbGF0ZXIgKS4KVG8gc3RvcCB0cmFjZXMgaXNzdWUgYQpUUiBFTkQuClRvIGRlbGV0ZSBhIHBhcnRpY3VsYXIgYnJlYWtwb2ludCBpc3N1ZQpUUiBERUwgPGJyZWFrcG9pbnQgbnVtYmVyPgoKVGhlIFBBMSBrZXkgZHJvcHMgdG8gQ1AgbW9kZSBzbyB5b3UgY2FuIGlzc3VlIGRlYnVnZ2VyIGNvbW1hbmRzLApEb2luZyBhbHQgYyAob24gbXkgMzI3MCBjb25zb2xlIGF0IGxlYXN0ICkgY2xlYXJzIHRoZSBzY3JlZW4uIApoaXR0aW5nIGIgPGVudGVyPiBjb21lcyBiYWNrIHRvIHRoZSBydW5uaW5nIG9wZXJhdGluZyBzeXN0ZW0KZnJvbSBjcCBtb2RlICggaW4gb3VyIGNhc2UgbGludXggKS4KSXQgaXMgdHlwaWNhbGx5IHVzZWZ1bCB0byBhZGQgc2hvcnRjdXRzIHRvIHlvdXIgcHJvZmlsZS5leGVjIGZpbGUKaWYgeW91IGhhdmUgb25lICggdGhpcyBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gYXV0b2V4ZWMuYmF0IGluIERPUyApLgpmaWxlIGhlcmUgYXJlIGEgZmV3IGZyb20gbWluZS4KLyogdGhpcyBnaXZlcyBtZSBjb21tYW5kIGhpc3Rvcnkgb24gaXNzdWluZyBmMTIgKi8Kc2V0IHBmMTIgcmV0cmlldmUgCi8qIHRoaXMgY29udGludWVzICovCnNldCBwZjggaW1tIGIKLyogZ29lcyB0byB0cmFjZSBzZXQgYSAqLwpzZXQgcGYxIGltbSB0ciBnb3RvIGEKLyogZ29lcyB0byB0cmFjZSBzZXQgYiAqLwpzZXQgcGYyIGltbSB0ciBnb3RvIGIKLyogZ29lcyB0byB0cmFjZSBzZXQgYyAqLwpzZXQgcGYzIGltbSB0ciBnb3RvIGMKCgoKSW5zdHJ1Y3Rpb24gVHJhY2luZwotLS0tLS0tLS0tLS0tLS0tLS0tClNldHRpbmcgYSBzaW1wbGUgYnJlYWtwb2ludApUUiBJIFBTV0EgPGFkZHJlc3M+ClRvIGRlYnVnIGEgcGFydGljdWxhciBmdW5jdGlvbiB0cnkKVFIgSSBSIDxmdW5jdGlvbiBhZGRyZXNzIHJhbmdlPgpUUiBJIG9uIGl0cyBvd24gd2lsbCBzaW5nbGUgc3RlcC4KVFIgSSBEQVRBIDxNTkVNT05JQz4gPE9QVElPTkFMIFJBTkdFPiB3aWxsIHRyYWNlIGZvciBwYXJ0aWN1bGFyIG1uZW1vbmljcwplLmcuClRSIEkgREFUQSA0RCBSIDAxOTdCQy40MDAwCndpbGwgdHJhY2UgZm9yIEJBUydlcyAoIG9wY29kZSA0RCApIGluIHRoZSByYW5nZSAwMTk3QkMuNDAwMAppZiB5b3Ugd2VyZSBpbmNsaW5lZCB5b3UgY291bGQgYWRkIHRyYWNlcyBmb3IgYWxsIGJyYW5jaCBpbnN0cnVjdGlvbnMgJgpzdWZmaXggdGhlbSB3aXRoIHRoZSBydW4gcHJlZml4IHNvIHlvdSB3b3VsZCBoYXZlIGEgYmFja3RyYWNlIG9uIHNjcmVlbiAKd2hlbiBhIHByb2dyYW0gY3Jhc2hlcy4KVFIgQlIgPElOVE8gT1IgRlJPTT4gd2lsbCB0cmFjZSBicmFuY2hlcyBpbnRvIG9yIG91dCBvZiBhbiBhZGRyZXNzLgplLmcuClRSIEJSIElOVE8gMCBpcyBvZnRlbiBxdWl0ZSB1c2VmdWwgaWYgYSBwcm9ncmFtIGlzIGdldHRpbmcgYXdrd2FyZCAmIGRlY2lkaW5nCnRvIGJyYW5jaCB0byAwICYgY3Jhc2hpbmcgYXMgdGhpcyB3aWxsIHN0b3AgYXQgdGhlIGFkZHJlc3MgYmVmb3JlIGluIGp1bXBzIHRvIDAuClRSIEkgUiA8YWRkcmVzcyByYW5nZT4gUlVOIGNtZCBkIGcKc2luZ2xlIHN0ZXBzIGEgcmFuZ2Ugb2YgYWRkcmVzc2VzIGJ1dCBzdGF5cyBydW5uaW5nICYKZGlzcGxheXMgdGhlIGdwcnMgb24gZWFjaCBzdGVwLgoKCgpEaXNwbGF5aW5nICYgbW9kaWZ5aW5nIFJlZ2lzdGVycwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpEIEcgd2lsbCBkaXNwbGF5IGFsbCB0aGUgZ3BycwpBZGRpbmcgYSBleHRyYSBHIHRvIGFsbCB0aGUgY29tbWFuZHMgaXMgbmVjZXNzYXJ5IHRvIGFjY2VzcyB0aGUgZnVsbCA2NCBiaXQgCmNvbnRlbnQgaW4gVk0gb24gei9BcmNoaXRlY3R1cmUgb2J2aW91c2x5IHRoaXMgaXNuJ3QgcmVxdWlyZWQgZm9yIGFjY2VzcyByZWdpc3RlcnMKYXMgdGhlc2UgYXJlIHN0aWxsIDMyIGJpdC4KZS5nLiBER0cgaW5zdGVhZCBvZiBERyAKRCBYIHdpbGwgZGlzcGxheSBhbGwgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzCkQgQVIgd2lsbCBkaXNwbGF5IGFsbCB0aGUgYWNjZXNzIHJlZ2lzdGVycwpEIEFSNC03IHdpbGwgZGlzcGxheSBhY2Nlc3MgcmVnaXN0ZXJzIDQgdG8gNwpDUFUgQUxMIEQgRyB3aWxsIGRpc3BsYXkgdGhlIEdSUFMgb2YgYWxsIENQVVMgaW4gdGhlIGNvbmZpZ3VyYXRpb24KRCBQU1cgd2lsbCBkaXNwbGF5IHRoZSBjdXJyZW50IFBTVwpzdCBQU1cgMjAwMCB3aWxsIHB1dCB0aGUgdmFsdWUgMjAwMCBpbnRvIHRoZSBQU1cgJgpjYXVzZSBjcmFzaCB5b3VyIG1hY2hpbmUuCkQgUFJFRklYIGRpc3BsYXlzIHRoZSBwcmVmaXggb2Zmc2V0CgoKRGlzcGxheWluZyBNZW1vcnkKLS0tLS0tLS0tLS0tLS0tLS0KVG8gZGlzcGxheSBtZW1vcnkgbWFwcGVkIHVzaW5nIHRoZSBjdXJyZW50IFBTVydzIG1hcHBpbmcgdHJ5CkQgPHJhbmdlPgpUbyBtYWtlIFZNIGRpc3BsYXkgYSBtZXNzYWdlIGVhY2ggdGltZSBpdCBoaXRzIGEgcGFydGljdWxhciBhZGRyZXNzICYgY29udGludWUgdHJ5CkQgSTxyYW5nZT4gd2lsbCBkaXNhc3NlbWJsZS9kaXNwbGF5IGEgcmFuZ2Ugb2YgaW5zdHJ1Y3Rpb25zLgpTVCBhZGRyIDMyIGJpdCB3b3JkIHdpbGwgc3RvcmUgYSAzMiBiaXQgYWxpZ25lZCBhZGRyZXNzCkQgVDxyYW5nZT4gd2lsbCBkaXNwbGF5IHRoZSBFQkNESUMgaW4gYW4gYWRkcmVzcyAoIGlmIHlvdSBhcmUgdGhhdCB3YXkgaW5jbGluZWQgKQpEIFI8cmFuZ2U+IHdpbGwgZGlzcGxheSByZWFsIGFkZHJlc3NlcyAoIHdpdGhvdXQgREFUICkgYnV0IHdpdGggcHJlZml4aW5nLgpUaGVyZSBhcmUgb3RoZXIgY29tcGxleCBvcHRpb25zIHRvIGRpc3BsYXkgaWYgeW91IG5lZWQgdG8gZ2V0IGF0IHNheSBob21lIHNwYWNlCmJ1dCBhcmUgaW4gcHJpbWFyeSBzcGFjZSB0aGUgZWFzaWVzdCB0aGluZyB0byBkbyBpcyB0byB0ZW1wb3JhcmlseQptb2RpZnkgdGhlIFBTVyB0byB0aGUgb3RoZXIgYWRkcmVzc2luZyBtb2RlLCBkaXNwbGF5IHRoZSBzdHVmZiAmIHRoZW4KcmVzdG9yZSBpdC4KCgogCkhpbnRzCi0tLS0tCklmIHlvdSB3YW50IHRvIGlzc3VlIGEgZGVidWdnZXIgY29tbWFuZCB3aXRob3V0IGhhbHRpbmcgeW91ciB2aXJ0dWFsIG1hY2hpbmUgd2l0aCB0aGUKUEExIGtleSB0cnkgcHJlZml4aW5nIHRoZSBjb21tYW5kIHdpdGggI0NQIGUuZy4KI2NwIHRyIGkgcHN3YSAyMDAwCmFsc28gc3VmZml4aW5nIG1vc3QgZGVidWdnZXIgY29tbWFuZHMgd2l0aCBSVU4gd2lsbCBjYXVzZSB0aGVtIG5vdAp0byBzdG9wIGp1c3QgZGlzcGxheSB0aGUgbW5lbW9uaWMgYXQgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gb24gdGhlIGNvbnNvbGUuCklmIHlvdSBoYXZlIHNldmVyYWwgYnJlYWtwb2ludHMgeW91IHdhbnQgdG8gcHV0IGludG8geW91ciBwcm9ncmFtICYKeW91IGdldCBmZWQgdXAgb2YgY3Jvc3MgcmVmZXJlbmNpbmcgd2l0aCBTeXN0ZW0ubWFwCnlvdSBjYW4gZG8gdGhlIGZvbGxvd2luZyB0cmljayBmb3Igc2V2ZXJhbCBzeW1ib2xzLgpncmVwIGRvX3NpZ25hbCBTeXN0ZW0ubWFwIAp3aGljaCBlbWl0cyB0aGUgZm9sbG93aW5nIGFtb25nIG90aGVyIHRoaW5ncwowMDAxZjRlMCBUIGRvX3NpZ25hbCAKbm93IHlvdSBjYW4gZG8KClRSIEkgUFNXQSAwMDAxZjRlMCBjbWQgbXNnICogZG9fc2lnbmFsClRoaXMgc2VuZHMgYSBtZXNzYWdlIHRvIHlvdXIgb3duIGNvbnNvbGUgZWFjaCB0aW1lIGRvX3NpZ25hbCBpcyBlbnRlcmVkLgooIEFzIGFuIGFzaWRlIEkgd3JvdGUgYSBwZXJsIHNjcmlwdCBvbmNlIHdoaWNoIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGEgUkVYWApzY3JpcHQgd2l0aCBicmVha3BvaW50cyBvbiBldmVyeSBrZXJuZWwgcHJvY2VkdXJlLCB0aGlzIGlzbid0IGEgZ29vZCBpZGVhCmJlY2F1c2UgdGhlcmUgYXJlIHRob3VzYW5kcyBvZiB0aGVzZSByb3V0aW5lcyAmIFZNIGNhbiBvbmx5IHNldCAyNTUgYnJlYWtwb2ludHMKYXQgYSB0aW1lIHNvIHlvdSBuZWFybHkgaGFkIHRvIHNwZW5kIGFzIGxvbmcgcHJ1bmluZyB0aGUgZmlsZSBkb3duIGFzIHlvdSB3b3VsZCAKZW50ZXJpbmcgdGhlIG1zZydzIGJ5IGhhbmQgKSxob3dldmVyLCB0aGUgdHJpY2sgbWlnaHQgYmUgdXNlZnVsIGZvciBhIHNpbmdsZSBvYmplY3QgZmlsZS4KT24gbGludXgnZXMgMzI3MCBlbXVsYXRvciB4MzI3MCB0aGVyZSBpcyBhIHZlcnkgdXNlZnVsIG9wdGlvbiB1bmRlciB0aGUgZmlsZSBtZW50ClNhdmUgU2NyZWVucyBJbiBGaWxlIHRoaXMgaXMgdmVyeSBnb29kIG9mIGtlZXBpbmcgYSBjb3B5IG9mIHRyYWNlcy4gCgpGcm9tIENNUyBoZWxwIDxjb21tYW5kIG5hbWU+IHdpbGwgZ2l2ZSB5b3Ugb25saW5lIGhlbHAgb24gYSBwYXJ0aWN1bGFyIGNvbW1hbmQuIAplLmcuIApIRUxQIERJU1BMQVkKCkFsc28gQ1AgaGFzIGEgZmlsZSBjYWxsZWQgcHJvZmlsZS5leGVjIHdoaWNoIGF1dG9tYXRpY2FsbHkgZ2V0cyBjYWxsZWQKb24gc3RhcnR1cCBvZiBDTVMgKCBsaWtlIGF1dG9leGVjLmJhdCApLCBrZWVwaW5nIG9uIGEgRE9TIGFuYWxvZ3kgc2Vzc2lvbgpDUCBoYXMgYSBmZWF0dXJlIHNpbWlsYXIgdG8gZG9za2V5LCBpdCBtYXkgYmUgdXNlZnVsIGZvciB5b3UgdG8KdXNlIHByb2ZpbGUuZXhlYyB0byBkZWZpbmUgc29tZSBrZXlzdHJva2VzLiAKZS5nLgpTRVQgUEY5IElNTSBCClRoaXMgZG9lcyBhIHNpbmdsZSBzdGVwIGluIFZNIG9uIHByZXNzaW5nIEY4LiAKU0VUIFBGMTAgIF4KVGhpcyBzZXRzIHVwIHRoZSBeIGtleS4Kd2hpY2ggY2FuIGJlIHVzZWQgZm9yIF5jIChjdHJsLWMpLF56IChjdHJsLXopIHdoaWNoIGNhbid0IGJlIHR5cGVkIGRpcmVjdGx5IGludG8gc29tZSAzMjcwIGNvbnNvbGVzLgpTRVQgUEYxMSBeLQpUaGlzIHR5cGVzIHRoZSBzdGFydGluZyBrZXlzdHJva2VzIGZvciBhIHN5c3JxIHNlZSBTeXNScSBiZWxvdy4KU0VUIFBGMTIgUkVUUklFVkUKVGhpcyByZXRyaWV2ZXMgY29tbWFuZCBoaXN0b3J5IG9uIHByZXNzaW5nIEYxMi4KCgpTb21ldGltZXMgaW4gVk0gdGhlIGRpc3BsYXkgaXMgc2V0IHVwIHRvIHNjcm9sbCBhdXRvbWF0aWNhbGx5IHRoaXMKY2FuIGJlIHZlcnkgYW5ub3lpbmcgaWYgdGhlcmUgYXJlIG1lc3NhZ2VzIHlvdSB3aXNoIHRvIGxvb2sgYXQKdG8gc3RvcCB0aGlzIGRvClRFUk0gTU9SRSAyNTUgMjU1ClRoaXMgd2lsbCBuZWFybHkgc3RvcCBhdXRvbWF0aWMgc2NyZWVuIHVwZGF0ZXMsIGhvd2V2ZXIgaXQgd2lsbApjYXVzZSBhIGRlbmlhbCBvZiBzZXJ2aWNlIGlmIGxvdHMgb2YgbWVzc2FnZXMgZ28gdG8gdGhlIDMyNzAgY29uc29sZSwKc28gaXQgd291bGQgYmUgZm9vbGlzaCB0byB1c2UgdGhpcyBhcyB0aGUgZGVmYXVsdCBvbiBhIHByb2R1Y3Rpb24gbWFjaGluZS4KIAoKVHJhY2luZyBwYXJ0aWN1bGFyIHByb2Nlc3NlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRoZSBrZXJuZWwncyB0ZXh0IHNlZ21lbnQgaXMgaW50ZW50aW9uYWxseSBhdCBhbiBhZGRyZXNzIGluIG1lbW9yeSB0aGF0IGl0IHdpbGwKdmVyeSBzZWxkb20gY29sbGlkZSB3aXRoIHRleHQgc2VnbWVudHMgb2YgdXNlciBwcm9ncmFtcyAoIHRoYW5rcyBNYXJ0aW4gKSwKdGhpcyBzaW1wbGlmaWVzIGRlYnVnZ2luZyB0aGUga2VybmVsLgpIb3dldmVyIGl0IGlzIHF1aXRlIGNvbW1vbiBmb3IgdXNlciBwcm9jZXNzZXMgdG8gaGF2ZSBhZGRyZXNzZXMgd2hpY2ggY29sbGlkZQp0aGlzIGNhbiBtYWtlIGRlYnVnZ2luZyBhIHBhcnRpY3VsYXIgcHJvY2VzcyB1bmRlciBWTSBwYWluZnVsIHVuZGVyIG5vcm1hbApjaXJjdW1zdGFuY2VzIGFzIHRoZSBwcm9jZXNzIG1heSBjaGFuZ2Ugd2hlbiBkb2luZyBhIApUUiBJIFIgPGFkZHJlc3MgcmFuZ2U+LgpUaGFua2Z1bGx5IGFmdGVyIHJlYWRpbmcgVk0ncyBvbmxpbmUgaGVscCBJIGZpZ3VyZWQgb3V0IGhvdyB0byBkZWJ1ZwpJIHBhcnRpY3VsYXIgcHJvY2Vzcy4KCllvdXIgZmlyc3QgcHJvYmxlbSBpcyB0byBmaW5kIHRoZSBTVEQgKCBzZWdtZW50IHRhYmxlIGRlc2lnbmF0aW9uICkKb2YgdGhlIHByb2dyYW0geW91IHdpc2ggdG8gZGVidWcuClRoZXJlIGFyZSBzZXZlcmFsIHdheXMgeW91IGNhbiBkbyB0aGlzIGhlcmUgYXJlIGEgZmV3CjEpIG9iamR1bXAgLS1zeW1zIDxwcm9ncmFtIHRvIGJlIGRlYnVnZ2VkPiB8IGdyZXAgbWFpbgpUbyBnZXQgdGhlIGFkZHJlc3Mgb2YgbWFpbiBpbiB0aGUgcHJvZ3JhbS4KdHIgaSBwc3dhIDxhZGRyZXNzIG9mIG1haW4+ClN0YXJ0IHRoZSBwcm9ncmFtLCBpZiBWTSBkcm9wcyB0byBDUCBvbiB3aGF0IGxvb2tzIGxpa2UgdGhlIGVudHJ5CnBvaW50IG9mIHRoZSBtYWluIGZ1bmN0aW9uIHRoaXMgaXMgbW9zdCBsaWtlbHkgdGhlIHByb2Nlc3MgeW91IHdpc2ggdG8gZGVidWcuCk5vdyBkbyBhIEQgWDEzIG9yIEQgWEcxMyBvbiB6L0FyY2hpdGVjdHVyZS4KT24gMzEgYml0IHRoZSBTVEQgaXMgYml0cyAxLTE5ICggdGhlIFNUTyBzZWdtZW50IHRhYmxlIG9yaWdpbiApIAomIDI1LTMxICggdGhlIFNUTCBzZWdtZW50IHRhYmxlIGxlbmd0aCApIG9mIENSMTMuCm5vdyB0eXBlClRSIEkgUiBTVEQgPENSMTMncyB2YWx1ZT4gMC43ZmZmZmZmZgplLmcuClRSIEkgUiBTVEQgOEYzMkUxRkYgMC43ZmZmZmZmZgpBbm90aGVyIHZlcnkgdXNlZnVsIHZhcmlhdGlvbiBpcwpUUiBTVE9SRSBJTlRPIFNURCA8Q1IxMydzIHZhbHVlPiA8YWRkcmVzcyByYW5nZT4KZm9yIGZpbmRpbmcgb3V0IHdoZW4gYSBwYXJ0aWN1bGFyIHZhcmlhYmxlIGNoYW5nZXMuCgpBbiBhbHRlcm5hdGl2ZSB3YXkgb2YgZmluZGluZyB0aGUgU1REIG9mIGEgY3VycmVudGx5IHJ1bm5pbmcgcHJvY2VzcyAKaXMgdG8gZG8gdGhlIGZvbGxvd2luZywgKCB0aGlzIG1ldGhvZCBpcyBtb3JlIGNvbXBsZXggYnV0CmNvdWxkIGJlIHF1aXRlIGNvbnZpZW50IGlmIHlvdSBhcmVuJ3QgdXBkYXRpbmcgdGhlIGtlcm5lbCBtdWNoICYKc28geW91ciBrZXJuZWwgc3RydWN0dXJlcyB3aWxsIHN0YXkgY29uc3RhbnQgZm9yIGEgcmVhc29uYWJsZSBwZXJpb2Qgb2YKdGltZSApLgoKZ3JlcCB0YXNrIC9wcm9jLzxwaWQ+L3N0YXR1cwpmcm9tIHRoaXMgeW91IHNob3VsZCBzZWUgc29tZXRoaW5nIGxpa2UKdGFzazogMGYxNjAwMDAga3NwOiAwZjE2MWRlOCBwdF9yZWdzOiAwZjE2MWY2OApUaGlzIG5vdyBnaXZlcyB5b3UgYSBwb2ludGVyIHRvIHRoZSB0YXNrIHN0cnVjdHVyZS4KTm93IG1ha2UgQ0M6PSJzMzkwLWdjYyAtZyIga2VybmVsL3NjaGVkLnMKVG8gZ2V0IHRoZSB0YXNrX3N0cnVjdCBzdGFiaW5mby4KKCB0YXNrX3N0cnVjdCBpcyBkZWZpbmVkIGluIGluY2x1ZGUvbGludXgvc2NoZWQuaCApLgpOb3cgd2Ugd2FudCB0byBsb29rIGF0CnRhc2stPmFjdGl2ZV9tbS0+cGdkCm9uIG15IG1hY2hpbmUgdGhlIGFjdGl2ZV9tbSBpbiB0aGUgdGFzayBzdHJ1Y3R1cmUgc3RhYiBpcwphY3RpdmVfbW06KDQsMTIpLDY3MiwzMgppdHMgb2Zmc2V0IGlzIDY3Mi84PTg0PTB4NTQKdGhlIHBnZCBtZW1iZXIgaW4gdGhlIG1tX3N0cnVjdCBzdGFiIGlzCnBnZDooNCw2KT0qKDI5LDUpLDk2LDMyCnNvIGl0cyBvZmZzZXQgaXMgOTYvOD0xMj0weGMKCnNvIHdlJ2xsCmhleGR1bXAgLXMgMHhmMTYwMDU0IC9kZXYvbWVtIHwgbW9yZQppLmUuIHRhc2tfc3RydWN0K2FjdGl2ZV9tbSBvZmZzZXQKdG8gbG9vayBhdCB0aGUgYWN0aXZlX21tIG1lbWJlcgpmMTYwMDU0IDBmZWUgY2M2MCAwMDE5IGUzMzQgMDAwMCAwMDAwIDAwMDAgMDAxMQpoZXhkdW1wIC1zIDB4MGZlZWNjNmMgL2Rldi9tZW0gfCBtb3JlCmkuZS4gYWN0aXZlX21tK3BnZCBvZmZzZXQKZmVlY2M2YyAwZjJjIDAwMDAgMDAwMCAwMDAxIDAwMDAgMDAwMSAwMDAwIDAwMTAKd2UgZ2V0IHNvbWV0aGluZyBsaWtlCm5vdyBkbyAKVFIgSSBSIFNURCA8cGdkfDB4N2Y+IDAuN2ZmZmZmZmYKaS5lLiB0aGUgMHg3ZiBpcyBhZGRlZCBiZWNhdXNlIHRoZSBwZ2Qgb25seQpnaXZlcyB0aGUgcGFnZSB0YWJsZSBvcmlnaW4gJiB3ZSBuZWVkIHRvIHNldCB0aGUgbG93IGJpdHMKdG8gdGhlIG1heGltdW0gcG9zc2libGUgc2VnbWVudCB0YWJsZSBsZW5ndGguClRSIEkgUiBTVEQgMGYyYzAwN2YgMC43ZmZmZmZmZgpvbiB6L0FyY2hpdGVjdHVyZSB5b3UnbGwgcHJvYmFibHkgbmVlZCB0byBkbwpUUiBJIFIgU1REIDxwZ2R8MHg3PiAwLmZmZmZmZmZmZmZmZmZmZmYKdG8gc2V0IHRoZSBUYWJsZVR5cGUgdG8gMHgxICYgdGhlIFRhYmxlIGxlbmd0aCB0byAzLgoKCgpUcmFjaW5nIFByb2dyYW0gRXhjZXB0aW9ucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJZiB5b3UgZ2V0IGEgY3Jhc2ggd2hpY2ggc2F5cyBzb21ldGhpbmcgbGlrZQppbGxlZ2FsIG9wZXJhdGlvbiBvciBzcGVjaWZpY2F0aW9uIGV4Y2VwdGlvbiBmb2xsb3dlZCBieSBhIHJlZ2lzdGVyIGR1bXAKWW91IGNhbiByZXN0YXJ0IGxpbnV4ICYgdHJhY2UgdGhlc2UgdXNpbmcgdGhlIHRyIHByb2cgPHJhbmdlIG9yIHZhbHVlPiB0cmFjZSBvcHRpb24uCgoKClRoZSBtb3N0IGNvbW1vbiBvbmVzIHlvdSB3aWxsIG5vcm1hbGx5IGJlIHRyYWNpbmcgZm9yIGlzCjE9b3BlcmF0aW9uIGV4Y2VwdGlvbgoyPXByaXZpbGVnZWQgb3BlcmF0aW9uIGV4Y2VwdGlvbgo0PXByb3RlY3Rpb24gZXhjZXB0aW9uCjU9YWRkcmVzc2luZyBleGNlcHRpb24KNj1zcGVjaWZpY2F0aW9uIGV4Y2VwdGlvbgoxMD1zZWdtZW50IHRyYW5zbGF0aW9uIGV4Y2VwdGlvbgoxMT1wYWdlIHRyYW5zbGF0aW9uIGV4Y2VwdGlvbgoKVGhlIGZ1bGwgbGlzdCBvZiB0aGVzZSBpcyBvbiBwYWdlIDIyIG9mIHRoZSBjdXJyZW50IHMvMzkwIFJlZmVyZW5jZSBTdW1tYXJ5LgplLmcuCnRyIHByb2cgMTAgd2lsbCB0cmFjZSBzZWdtZW50IHRyYW5zbGF0aW9uIGV4Y2VwdGlvbnMuCnRyIHByb2cgb24gaXRzIG93biB3aWxsIHRyYWNlIGFsbCBwcm9ncmFtIGludGVycnVwdGlvbiBjb2Rlcy4KClRyYWNlIFNldHMKLS0tLS0tLS0tLQpPbiBzdGFydGluZyBWTSB5b3UgYXJlIGluaXRpYWxseSBpbiB0aGUgSU5JVElBTCB0cmFjZSBzZXQuCllvdSBjYW4gZG8gYSBRIFRSIHRvIHZlcmlmeSB0aGlzLgpJZiB5b3UgaGF2ZSBhIGNvbXBsZXggdHJhY2luZyBzaXR1YXRpb24gd2hlcmUgeW91IHdpc2ggdG8gd2FpdCBmb3IgaW5zdGFuY2UgCnRpbGwgYSBkcml2ZXIgaXMgb3BlbiBiZWZvcmUgeW91IHN0YXJ0IHRyYWNpbmcgSU8sIGJ1dCBrbm93IGluIHlvdXIKaGVhcnQgdGhhdCB5b3UgYXJlIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBzZXZlcmFsIHJ1bnMgdGhyb3VnaCB0aGUgY29kZSB0aWxsIHlvdQpoYXZlIGEgY2x1ZSB3aGF0cyBnb2luZyBvbi4gCgpXaGF0IHlvdSBjYW4gZG8gaXMKVFIgSSBQU1dBIDxEcml2ZXIgb3BlbiBhZGRyZXNzPgpoaXQgYiB0byBjb250aW51ZSB0aWxsIGJyZWFrcG9pbnQKcmVhY2ggdGhlIGJyZWFrcG9pbnQKbm93IGRvIHlvdXIKVFIgR09UTyBCIApUUiBJTyA3YzA4LTdjMDkgaW5zdCBpbnQgcnVuIApvciB3aGF0ZXZlciB0aGUgSU8gY2hhbm5lbHMgeW91IHdpc2ggdG8gdHJhY2UgYXJlICYgaGl0IGIKClRvIGdvdCBiYWNrIHRvIHRoZSBpbml0aWFsIHRyYWNlIHNldCBkbwpUUiBHT1RPIElOSVRJQUwKJiB0aGUgVFIgSSBQU1dBIDxEcml2ZXIgb3BlbiBhZGRyZXNzPiB3aWxsIGJlIHRoZSBvbmx5IGFjdGl2ZSBicmVha3BvaW50IGFnYWluLgoKClRyYWNpbmcgbGludXggc3lzY2FsbHMgdW5kZXIgVk0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTeXNjYWxscyBhcmUgaW1wbGVtZW50ZWQgb24gTGludXggZm9yIFMzOTAgYnkgdGhlIFN1cGVydmlzb3IgY2FsbCBpbnN0cnVjdGlvbiAoU1ZDKSB0aGVyZSAyNTYgCnBvc3NpYmlsaXRpZXMgb2YgdGhlc2UgYXMgdGhlIGluc3RydWN0aW9uIGlzIG1hZGUgdXAgb2YgYSAgMHhBIG9wY29kZSAmIHRoZSBzZWNvbmQgYnl0ZSBiZWluZwp0aGUgc3lzY2FsbCBudW1iZXIuIFRoZXkgYXJlIHRyYWNlZCB1c2luZyB0aGUgc2ltcGxlIGNvbW1hbmQuClRSIFNWQyAgPE9wdGlvbmFsIHZhbHVlIG9yIHJhbmdlPgp0aGUgc3lzY2FsbHMgYXJlIGRlZmluZWQgaW4gbGludXgvaW5jbHVkZS9hc20tczM5MC91bmlzdGQuaAplLmcuIHRvIHRyYWNlIGFsbCBmaWxlIG9wZW5zIGp1c3QgZG8KVFIgU1ZDIDUgKCBhcyB0aGlzIGlzIHRoZSBzeXNjYWxsIG51bWJlciBvZiBvcGVuICkKCgpTTVAgU3BlY2lmaWMgY29tbWFuZHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRvIGZpbmQgb3V0IGhvdyBtYW55IGNwdXMgeW91IGhhdmUKUSBDUFVTIGRpc3BsYXlzIGFsbCB0aGUgQ1BVJ3MgYXZhaWxhYmxlIHRvIHlvdXIgdmlydHVhbCBtYWNoaW5lClRvIGZpbmQgdGhlIGNwdSB0aGF0IHRoZSBjdXJyZW50IGNwdSBWTSBkZWJ1Z2dlciBjb21tYW5kcyBhcmUgYmVpbmcgZGlyZWN0ZWQgYXQgZG8KUSBDUFUgdG8gY2hhbmdlIHRoZSBjdXJyZW50IGNwdSBjcHUgVk0gZGVidWdnZXIgY29tbWFuZHMgYXJlIGJlaW5nIGRpcmVjdGVkIGF0IGRvCkNQVSA8ZGVzaXJlZCBjcHUgbm8+CgpPbiBhIFNNUCBndWVzdCBpc3N1ZSBhIGNvbW1hbmQgdG8gYWxsIENQVXMgdHJ5IHByZWZpeGluZyB0aGUgY29tbWFuZCB3aXRoIGNwdSBhbGwuClRvIGlzc3VlIGEgY29tbWFuZCB0byBhIHBhcnRpY3VsYXIgY3B1IHRyeSBjcHUgPGNwdSBudW1iZXI+IGUuZy4KQ1BVIDAxIFRSIEkgUiAyMDAwLjMwMDAKSWYgeW91IGFyZSBydW5uaW5nIG9uIGEgZ3Vlc3Qgd2l0aCBzZXZlcmFsIGNwdXMgJiB5b3UgaGF2ZSBhIElPIHJlbGF0ZWQgcHJvYmxlbQomIGNhbm5vdCBmb2xsb3cgdGhlIGZsb3cgb2YgY29kZSBidXQgeW91IGtub3cgaXQgaXNudCBzbXAgcmVsYXRlZC4KZnJvbSB0aGUgYmFzaCBwcm9tcHQgaXNzdWUKc2h1dGRvd24gLWggbm93IG9yIGhhbHQuCmRvIGEgUSBDUFVTIHRvIGZpbmQgb3V0IGhvdyBtYW55IGNwdXMgeW91IGhhdmUKZGV0YWNoIGVhY2ggb25lIG9mIHRoZW0gZnJvbSBjcCBleGNlcHQgY3B1IDAgCmJ5IGlzc3VpbmcgYSAKREVUQUNIIENQVSAwMS0obnVtYmVyIG9mIGNwdXMgaW4gY29uZmlndXJhdGlvbikKJiBib290IGxpbnV4IGFnYWluLgpUUiBTSUdQIHdpbGwgdHJhY2UgaW50ZXIgcHJvY2Vzc29yIHNpZ25hbCBwcm9jZXNzb3IgaW5zdHJ1Y3Rpb25zLgpERUZJTkUgQ1BVIDAxLShudW1iZXIgaW4gY29uZmlndXJhdGlvbikgCndpbGwgZ2V0IHlvdXIgZ3Vlc3RzIGNwdXMgYmFjay4KCgpIZWxwIGZvciBkaXNwbGF5aW5nIGFzY2lpIHRleHRzdHJpbmdzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KT24gdGhlIHZlcnkgbGF0ZXN0IFZNIE51Y2xldXMnZXMgVk0gY2FuIG5vdyBkaXNwbGF5IGFzY2lpCiggdGhhbmtzIE5lYWxlIGZvciB0aGUgaGludCApIGJ5IGRvaW5nCkQgVFg8bG93YWRkcj4uPGxlbj4KZS5nLgpEIFRYMC4xMDAKCkFsdGVybmF0aXZlbHkKPT09PT09PT09PT09PQpVbmRlciBvbGRlciBWTSBkZWJ1Z2dlcnMgKCBJIGxvdmUgRUJESUMgdG9vICkgeW91IGNhbiB1c2UgdGhpcyBsaXR0bGUgcHJvZ3JhbSBJIHdyb3RlIHdoaWNoCndpbGwgY29udmVydCBhIGNvbW1hbmQgbGluZSBvZiBoZXggZGlnaXRzIHRvIGFzY2lpIHRleHQgd2hpY2ggY2FuIGJlIGNvbXBpbGVkIHVuZGVyIGxpbnV4ICYgCnlvdSBjYW4gY29weSB0aGUgaGV4IGRpZ2l0cyBmcm9tIHlvdXIgeDMyNzAgdGVybWluYWwgdG8geW91ciB4dGVybSBpZiB5b3UgYXJlIGRlYnVnZ2luZwpmcm9tIGEgbGludXhib3guCgpUaGlzIGlzIHF1aXRlIHVzZWZ1bCB3aGVuIGxvb2tpbmcgYXQgYSBwYXJhbWV0ZXIgcGFzc2VkIGluIGFzIGEgdGV4dCBzdHJpbmcKdW5kZXIgVk0gKCB1bmxlc3MgeW91IGFyZSBnb29kIGF0IGRlY29kaW5nIEFTQ0lJIGluIHlvdXIgaGVhZCApLgoKZS5nLiBjb25zaWRlciB0cmFjaW5nIGFuIG9wZW4gc3lzY2FsbApUUiBTVkMgNQpXZSBoYXZlIHN0b3BwZWQgYXQgYSBicmVha3BvaW50CjAwMDE1MUIwJyBTVkMgICAwQTA1ICAgICAtPiAwMDAxOTA5QScgICBDQyAwCgpEIDIwLjggdG8gY2hlY2sgdGhlIFNWQyBvbGQgcHN3IGluIHRoZSBwcmVmaXggYXJlYSAmIHNlZSB3YXMgaXQgZnJvbSB1c2Vyc3BhY2UKKCBmb3IgdGhlIGxheW91dCBvZiB0aGUgcHJlZml4IGFyZWEgY29uc3VsdCBQMTggb2YgdGhlIHMvMzkwIDM5MCBSZWZlcmVuY2UgU3VtbWFyeSAKaWYgeW91IGhhdmUgaXQgYXZhaWxhYmxlICkuClYwMDAwMDAyMCAgMDcwQzIwMDAgODAwMTUxQjIKVGhlIHByb2JsZW0gc3RhdGUgYml0IHdhc24ndCBzZXQgJiAgaXQncyBhbHNvIHRvbyBlYXJseSBpbiB0aGUgYm9vdCBzZXF1ZW5jZQpmb3IgaXQgdG8gYmUgYSB1c2Vyc3BhY2UgU1ZDIGlmIGl0IHdhcyB3ZSB3b3VsZCBoYXZlIHRvIHRlbXBvcmFyaWx5IHN3aXRjaCB0aGUgCnBzdyB0byB1c2VyIHNwYWNlIGFkZHJlc3Npbmcgc28gd2UgY291bGQgZ2V0IGF0IHRoZSBmaXJzdCBwYXJhbWV0ZXIgb2YgdGhlIG9wZW4gaW4KZ3ByMi4KTmV4dCBkbyBhIApEIEcyCkdQUiAgMiA9ICAwMDAxNENCNApOb3cgZGlzcGxheSB3aGF0IGdwcjIgaXMgcG9pbnRpbmcgdG8KRCAwMDAxNENCNC4yMApWMDAwMTRDQjQgIDJGNjQ2NTc2IDJGNjM2RjZFIDczNkY2QzY1IDAwMDAxQkY1ClYwMDAxNENDNCAgRkMwMDAxNEMgQjQwMDEwMDEgRTAwMDEwMDAgQjgwNzA3MDcKTm93IGNvcHkgdGhlIHRleHQgdGlsbCB0aGUgZmlyc3QgMDAgaGV4ICggd2hpY2ggaXMgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCnRvIGFuIHh0ZXJtICYgZG8gaGV4MmFzY2lpIG9uIGl0LgpoZXgyYXNjaWkgMkY2NDY1NzYgMkY2MzZGNkUgNzM2RjZDNjUgMDAgCm91dHB1dHMKRGVjb2RlZCBIZXg6PS8gZCBlIHYgLyBjIG8gbiBzIG8gbCBlIDB4MDAgCldlIHdlcmUgb3BlbmluZyB0aGUgY29uc29sZSBkZXZpY2UsCgpZb3UgY2FuIGNvbXBpbGUgdGhlIGNvZGUgYmVsb3cgeW91cnNlbGYgZm9yIHByYWN0aWNlIDotKSwKLyoKICogICAgaGV4MmFzY2lpLmMKICogICAgYSB1c2VmdWwgbGl0dGxlIHRvb2wgZm9yIGNvbnZlcnRpbmcgYSBoZXhhZGVjaW1hbCBjb21tYW5kIGxpbmUgdG8gYXNjaWkKICoKICogICAgQXV0aG9yKHMpOiBEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pCiAqICAgIChDKSAyMDAwIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24uCiAqLyAgIAojaW5jbHVkZSA8c3RkaW8uaD4KCmludCBtYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSkKewogIGludCBjbnQxLGNudDIsbGVuLHRvZ2dsZT0wOwogIGludCBzdGFydGNudD0xOwogIHVuc2lnbmVkIGNoYXIgYyxoZXg7CiAgCiAgaWYoYXJnYz4xJiYoc3RyY21wKGFyZ3ZbMV0sIi1hIik9PTApKQogICAgIHN0YXJ0Y250PTI7CiAgcHJpbnRmKCJEZWNvZGVkIEhleDo9Iik7CiAgZm9yKGNudDE9c3RhcnRjbnQ7Y250MTxhcmdjO2NudDErKykKICB7CiAgICBsZW49c3RybGVuKGFyZ3ZbY250MV0pOwogICAgZm9yKGNudDI9MDtjbnQyPGxlbjtjbnQyKyspCiAgICB7CiAgICAgICBjPWFyZ3ZbY250MV1bY250Ml07CiAgICAgICBpZihjPj0nMCcmJmM8PSc5JykKCSAgYz1jLScwJzsKICAgICAgIGlmKGM+PSdBJyYmYzw9J0YnKQoJICBjPWMtJ0EnKzEwOwogICAgICAgaWYoYz49J2EnJiZjPD0nZicpCgkgIGM9Yy0nYScrMTA7CiAgICAgICBzd2l0Y2godG9nZ2xlKQogICAgICAgewoJICBjYXNlIDA6CgkgICAgIGhleD1jPDw0OwoJICAgICB0b2dnbGU9MTsKCSAgYnJlYWs7CgkgIGNhc2UgMToKCSAgICAgaGV4Kz1jOwoJICAgICBpZihoZXg8MzJ8fGhleD4xMjcpCgkgICAgIHsKCQlpZihzdGFydGNudD09MSkKCQkgICBwcmludGYoIjB4JTAyWCAiLChpbnQpaGV4KTsKCQllbHNlCgkJICAgcHJpbnRmKCIuIik7CgkgICAgIH0KCSAgICAgZWxzZQoJICAgICB7CgkgICAgICAgcHJpbnRmKCIlYyIsaGV4KTsKCSAgICAgICBpZihzdGFydGNudD09MSkKCQkgIHByaW50ZigiICIpOwoJICAgICB9CgkgICAgIHRvZ2dsZT0wOwoJICBicmVhazsKICAgICAgIH0KICAgIH0KICB9CiAgcHJpbnRmKCJcbiIpOwp9CgoKCgpTdGFjayB0cmFjaW5nIHVuZGVyIFZNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQSBiYXNpYyBiYWNrdHJhY2UKLS0tLS0tLS0tLS0tLS0tLS0KCkhlcmUgYXJlIHRoZSB0cmlja3MgSSB1c2UgOSBvdXQgb2YgMTAgdGltZXMgaXQgd29ya3MgcHJldHR5IHdlbGwsCgpXaGVuIHlvdXIgYmFja2NoYWluIHJlYWNoZXMgYSBkZWFkIGVuZAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaGlzIGNhbiBoYXBwZW4gd2hlbiBhbiBleGNlcHRpb24gaGFwcGVucyBpbiB0aGUga2VybmVsICYgdGhlIGtlcm5lbCBpcyBlbnRlcmVkIHR3aWNlCmlmIHlvdSByZWFjaCB0aGUgTlVMTCBwb2ludGVyIGF0IHRoZSBlbmQgb2YgdGhlIGJhY2sgY2hhaW4geW91IHNob3VsZCBiZQphYmxlIHRvIHNuaWZmIGZ1cnRoZXIgYmFjayBpZiB5b3UgZm9sbG93IHRoZSBmb2xsb3dpbmcgdHJpY2tzLgoxKSBBIGtlcm5lbCBhZGRyZXNzIHNob3VsZCBiZSBlYXN5IHRvIHJlY29nbmlzZSBzaW5jZSBpdCBpcyBpbgpwcmltYXJ5IHNwYWNlICYgdGhlIHByb2JsZW0gc3RhdGUgYml0IGlzbid0IHNldCAmIGFsc28KVGhlIEhpIGJpdCBvZiB0aGUgYWRkcmVzcyBpcyBzZXQuCjIpIEFub3RoZXIgYmFja2NoYWluIHNob3VsZCBhbHNvIGJlIGVhc3kgdG8gcmVjb2duaXNlIHNpbmNlIGl0IGlzIGFuIAphZGRyZXNzIHBvaW50aW5nIHRvIGFub3RoZXIgYWRkcmVzcyBhcHByb3hpbWF0ZWx5IDEwMCBieXRlcyBvciAweDcwIGhleApiZWhpbmQgdGhlIGN1cnJlbnQgc3RhY2twb2ludGVyLgoKCkhlcmUgaXMgc29tZSBwcmFjdGljZS4KYm9vdCB0aGUga2VybmVsICYgaGl0IFBBMSBhdCBzb21lIHJhbmRvbSB0aW1lCmQgZyB0byBkaXNwbGF5IHRoZSBncHJzLCB0aGlzIHNob3VsZCBkaXNwbGF5IHNvbWV0aGluZyBsaWtlCkdQUiAgMCA9ICAwMDAwMDAwMSAgMDAxNTYwMTggIDAwMTQzNTlDICAwMDAwMDAwMApHUFIgIDQgPSAgMDAwMDAwMDEgIDAwMUI4ODg4ICAwMDAwMDNFMCAgMDAwMDAwMDAKR1BSICA4ID0gIDAwMTAwMDgwICAwMDEwMDA4NCAgMDAwMDAwMDAgIDAwMEZFMDAwCkdQUiAxMiA9ICAwMDAxMDQwMCAgODAwMUIyREMgIDgwMDFCMzZBICAwMDBGRkVEOApOb3RlIHRoYXQgR1BSMTQgaXMgYSByZXR1cm4gYWRkcmVzcyBidXQgYXMgd2UgYXJlIHJlYWwgbWVuIHdlIGFyZSBnb2luZyB0bwp0cmFjZSB0aGUgc3RhY2suCmRpc3BsYXkgMHg0MCBieXRlcyBhZnRlciB0aGUgc3RhY2sgcG9pbnRlci4KClYwMDBGRkVEOCAgMDAwRkZGMzggODAwMUI4MzggODAwMTRDOEUgMDAwRkZGMzgKVjAwMEZGRUU4ICAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDNFMCAwMDAwMDAwMApWMDAwRkZFRjggIDAwMTAwMDgwIDAwMTAwMDg0IDAwMDAwMDAwIDAwMEZFMDAwClYwMDBGRkYwOCAgMDAwMTA0MDAgODAwMUIyREMgODAwMUIzNkEgMDAwRkZFRDgKCgpBaCBub3cgbG9vayBhdCB3aGF0cyBpbiBzcCs1NiAoc3ArMHgzOCkgdGhpcyBpcyA4MDAxQjM2QSBvdXIgc2F2ZWQgcjE0IGlmCnlvdSBsb29rIGFib3ZlIGF0IG91ciBzdGFja2ZyYW1lICYgYWxzbyBhZ3JlZXMgd2l0aCBHUFIxNC4KCm5vdyBiYWNrY2hhaW4gCmQgMDAwRkZGMzguNDAKd2Ugbm93IGFyZSB0YWtpbmcgdGhlIGNvbnRlbnRzIG9mIFNQIHRvIGdldCBvdXIgZmlyc3QgYmFja2NoYWluLgoKVjAwMEZGRjM4ICAwMDBGRkZBMCAwMDAwMDAwMCAwMDAxNDk5NSAwMDE0NzA5NApWMDAwRkZGNDggIDAwMTQ3MDkwIDAwMTQ3MEEwIDAwMDAwM0UwIDAwMDAwMDAwClYwMDBGRkY1OCAgMDAxMDAwODAgMDAxMDAwODQgMDAwMDAwMDAgMDAxQkYxRDAKVjAwMEZGRjY4ICAwMDAxMDQwMCA4MDAxNDlCQSA4MDAxNENBNiAwMDBGRkYzOAoKVGhpcyBkaXNwbGF5cyBhIDJuZCByZXR1cm4gYWRkcmVzcyBvZiA4MDAxNENBNgoKbm93IGRvIGQgMDAwRkZGQTAuNDAgZm9yIG91ciAzcmQgYmFja2NoYWluCgpWMDAwRkZGQTAgIDA0QjUyMDAyIDAwMDExMDdGIDAwMDAwMDAwIDAwMDAwMDAwClYwMDBGRkZCMCAgMDAwMDAwMDAgMDAwMDAwMDAgRkYwMDAwMDAgMDAwMTEwN0YKVjAwMEZGRkMwICAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMApWMDAwRkZGRDAgIDAwMDEwNDAwIDgwMDEwODAyIDgwMDEwODVBIDAwMEZGRkEwCgoKb3VyIDNyZCByZXR1cm4gYWRkcmVzcyBpcyA4MDAxMDg1QQoKYXMgdGhlIDA0QjUyMDAyIGxvb2tzIHN1c3BpY2lvdXNseSBsaWtlIHJ1YmJpc2ggaXQgaXMgZmFpciB0byBhc3N1bWUgdGhhdCB0aGUga2VybmVsIGVudHJ5IHJvdXRpbmVzCmZvciB0aGUgc2FrZSBvZiBvcHRpbWlzYXRpb24gZG9udCBzZXQgdXAgYSBiYWNrY2hhaW4uCgpub3cgbG9vayBhdCBTeXN0ZW0ubWFwIHRvIHNlZSBpZiB0aGUgYWRkcmVzc2VzIG1ha2UgYW55IHNlbnNlLgoKZ3JlcCAtaSAwMDAxYjMgU3lzdGVtLm1hcApvdXRwdXRzIGFtb25nIG90aGVyIHRoaW5ncwowMDAxYjMwNCBUIGNwdV9pZGxlIApzbyA4MDAxQjM2QQppcyBjcHVfaWRsZSsweDY2ICggcXVpZXQgdGhlIGNwdSBpcyBhc2xlZXAsIGRvbid0IHdha2UgaXQgKQoKCmdyZXAgLWkgMDAwMTQgU3lzdGVtLm1hcCAKcHJvZHVjZXMgYW1vbmcgb3RoZXIgdGhpbmdzCjAwMDE0YTc4IFQgc3RhcnRfa2VybmVsICAKc28gMDAxNENBNiBpcyBzdGFydF9rZXJuZWwrc29tZSBoZXggbnVtYmVyIEkgY2FuJ3QgYWRkIGluIG15IGhlYWQuCgpncmVwIC1pIDAwMTA4IFN5c3RlbS5tYXAgCnRoaXMgcHJvZHVjZXMKMDAwMTA4MDAgVCBfc3RleHQKc28gICA4MDAxMDg1QSBpcyBfc3RleHQrMHg1YQoKQ29uZ3JhdHMgeW91J3ZlIGRvbmUgeW91ciBmaXJzdCBiYWNrY2hhaW4uCgoKCnMvMzkwICYgei9BcmNoaXRlY3R1cmUgSU8gT3ZlcnZpZXcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKSSBhbSBub3QgZ29pbmcgdG8gZ2l2ZSBhIGNvdXJzZSBpbiAzOTAgSU8gYXJjaGl0ZWN0dXJlIGFzIHRoaXMgd291bGQgdGFrZSBtZSBxdWl0ZSBhCndoaWxlICYgSSdtIG5vIGV4cGVydC4gSW5zdGVhZCBJJ2xsIGdpdmUgYSAzOTAgSU8gYXJjaGl0ZWN0dXJlIHN1bW1hcnkgZm9yIER1bW1pZXMgaWYgeW91IGhhdmUgCnRoZSBzLzM5MCBwcmluY2lwbGVzIG9mIG9wZXJhdGlvbiBhdmFpbGFibGUgcmVhZCB0aGlzIGluc3RlYWQuIElmIG5vdGhpbmcgZWxzZSB5b3UgbWF5IGZpbmQgYSBmZXcgCnVzZWZ1bCBrZXl3b3JkcyBpbiBoZXJlICYgYmUgYWJsZSB0byB1c2UgdGhlbSBvbiBhIHdlYiBzZWFyY2ggZW5naW5lIGxpa2UgYWx0YXZpc3RhIHRvIGZpbmQgCm1vcmUgdXNlZnVsIGluZm9ybWF0aW9uLgoKVW5saWtlIG90aGVyIGJ1cyBhcmNoaXRlY3R1cmVzIG1vZGVybiAzOTAgc3lzdGVtcyBkbyB0aGVpciBJTyB1c2luZyBtb3N0bHkKZmlicmUgb3B0aWNzICYgZGV2aWNlcyBzdWNoIGFzIHRhcGVzICYgZGlza3MgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIHNldmVyYWwgbWFpbmZyYW1lcywKYWxzbyBTMzkwIGNhbiBzdXBwb3J0IHVwdG8gNjU1MzYgZGV2aWNlcyB3aGlsZSBhIGhpZ2ggZW5kIFBDIGJhc2VkIHN5c3RlbSBtaWdodCBiZSBjaG9raW5nIAp3aXRoIGFyb3VuZCA2NC4gSGVyZSBpcyBzb21lIG9mIHRoZSBjb21tb24gSU8gdGVybWlub2xvZ3kKClN1YmNoYW5uZWw6ClRoaXMgaXMgdGhlIGxvZ2ljYWwgbnVtYmVyIG1vc3QgSU8gY29tbWFuZHMgdXNlIHRvIHRhbGsgdG8gYW4gSU8gZGV2aWNlIHRoZXJlIGNhbiBiZSB1cHRvCjB4MTAwMDAgKDY1NTM2KSBvZiB0aGVzZSBpbiBhIGNvbmZpZ3VyYXRpb24gdHlwaWNhbGx5IHRoZXJlIGlzIGEgZmV3IGh1bmRyZWQuIFVuZGVyIFZNCmZvciBzaW1wbGljaXR5IHRoZXkgYXJlIGFsbG9jYXRlZCBjb250aWd1b3VzbHksIGhvd2V2ZXIgb24gdGhlIG5hdGl2ZSBoYXJkd2FyZSB0aGV5IGFyZSBub3QKdGhleSB0eXBpY2FsbHkgc3RheSBjb25zaXN0ZW50IGJldHdlZW4gYm9vdHMgcHJvdmlkZWQgbm8gbmV3IGhhcmR3YXJlIGlzIGluc2VydGVkIG9yIHJlbW92ZWQuClVuZGVyIExpbnV4IGZvciAzOTAgd2UgdXNlIHRoZXNlIGFzIElSUSdzICYgYWxzbyB3aGVuIGlzc3VpbmcgYW4gSU8gY29tbWFuZCAoQ0xFQVIgU1VCQ0hBTk5FTCwKSEFMVCBTVUJDSEFOTkVMLE1PRElGWSBTVUJDSEFOTkVMLFJFU1VNRSBTVUJDSEFOTkVMLFNUQVJUIFNVQkNIQU5ORUwsU1RPUkUgU1VCQ0hBTk5FTCAmIApURVNUIFNVQkNIQU5ORUwgKSB3ZSB1c2UgdGhpcyBhcyB0aGUgSUQgb2YgdGhlIGRldmljZSB3ZSB3aXNoIHRvIHRhbGsgdG8sIHRoZSBtb3N0CmltcG9ydGFudCBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgYXJlIFNUQVJUIFNVQkNIQU5ORUwgKCB0byBzdGFydCBJTyApLCBURVNUIFNVQkNIQU5ORUwgKCB0byBjaGVjawp3aGV0aGVyIHRoZSBJTyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ICksICYgSEFMVCBTVUJDSEFOTkVMICggdG8ga2lsbCBJTyApLCBhIHN1YmNoYW5uZWwKY2FuIGhhdmUgdXAgdG8gOCBjaGFubmVsIHBhdGhzIHRvIGEgZGV2aWNlIHRoaXMgb2ZmZXJzIHJlZHVuYW5jeSBpZiBvbmUgaXMgbm90IGF2YWlsYWJsZS4KCgpEZXZpY2UgTnVtYmVyOgpUaGlzIG51bWJlciByZW1haW5zIHN0YXRpYyAmIElzIGNsb3NlbHkgdGllZCB0byB0aGUgaGFyZHdhcmUsIHRoZXJlIGFyZSA2NTUzNiBvZiB0aGVzZQphbHNvIHRoZXkgYXJlIG1hZGUgdXAgb2YgYSBDSFBJRCAoIENoYW5uZWwgUGF0aCBJRCwgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgOCBiaXRzICkgCiYgYW5vdGhlciBsc2IgOCBiaXRzLiBUaGVzZSByZW1haW4gc3RhdGljIGV2ZW4gaWYgbW9yZSBkZXZpY2VzIGFyZSBpbnNlcnRlZCBvciByZW1vdmVkCmZyb20gdGhlIGhhcmR3YXJlLCB0aGVyZSBpcyBhIDEgdG8gMSBtYXBwaW5nIGJldHdlZW4gU3ViY2hhbm5lbHMgJiBEZXZpY2UgTnVtYmVycyBwcm92aWRlZApkZXZpY2VzIGFyZW50IGluc2VydGVkIG9yIHJlbW92ZWQuCgpDaGFubmVsIENvbnRyb2wgV29yZHM6CkNDV1MgYXJlIGxpbmtlZCBsaXN0cyBvZiBpbnN0cnVjdGlvbnMgaW5pdGlhbGx5IHBvaW50ZWQgdG8gYnkgYW4gb3BlcmF0aW9uIHJlcXVlc3QgYmxvY2sgKE9SQiksCndoaWNoIGlzIGluaXRpYWxseSBnaXZlbiB0byBTdGFydCBTdWJjaGFubmVsIChTU0NIKSBjb21tYW5kIGFsb25nIHdpdGggdGhlIHN1YmNoYW5uZWwgbnVtYmVyCmZvciB0aGUgSU8gc3Vic3lzdGVtIHRvIHByb2Nlc3Mgd2hpbGUgdGhlIENQVSBjb250aW51ZXMgZXhlY3V0aW5nIG5vcm1hbCBjb2RlLgpUaGVzZSBjb21lIGluIHR3byBmbGF2b3VycywgRm9ybWF0IDAgKCAyNCBiaXQgZm9yIGJhY2t3YXJkICkKY29tcGF0aWJpbGl0eSAmIEZvcm1hdCAxICggMzEgYml0ICkuIFRoZXNlIGFyZSB0eXBpY2FsbHkgdXNlZCB0byBpc3N1ZSByZWFkICYgd3JpdGUgCiggJiBtYW55IG90aGVyIGluc3RydWN0aW9ucyApIHRoZXkgY29uc2lzdCBvZiBhIGxlbmd0aCBmaWVsZCAmIGFuIGFic29sdXRlIGFkZHJlc3MgZmllbGQuCkZvciBlYWNoIElPIHR5cGljYWxseSBnZXQgMSBvciAyIGludGVycnVwdHMgb25lIGZvciBjaGFubmVsIGVuZCAoIHByaW1hcnkgc3RhdHVzICkgd2hlbiB0aGUKY2hhbm5lbCBpcyBpZGxlICYgdGhlIHNlY29uZCBmb3IgZGV2aWNlIGVuZCAoIHNlY29uZGFyeSBzdGF0dXMgKSBzb21ldGltZXMgeW91IGdldCBib3RoCmNvbmN1cnJlbnRseSwgeW91IGNoZWNrIGhvdyB0aGUgSU8gd2VudCBvbiBieSBpc3N1aW5nIGEgVEVTVCBTVUJDSEFOTkVMIGF0IGVhY2ggaW50ZXJydXB0LApmcm9tIHdoaWNoIHlvdSByZWNlaXZlIGFuIEludGVycnVwdGlvbiByZXNwb25zZSBibG9jayAoSVJCKS4gSWYgeW91IGdldCBjaGFubmVsICYgZGV2aWNlIGVuZCAKc3RhdHVzIGluIHRoZSBJUkIgd2l0aG91dCBjaGFubmVsIGNoZWNrcyBldGMuIHlvdXIgSU8gcHJvYmFibHkgd2VudCBva2F5LiBJZiB5b3UgZGlkbid0IHlvdQpwcm9iYWJseSBuZWVkIGEgZG9jdG9ydG8gZXhhbWluZSB0aGUgSVJCICYgZXh0ZW5kZWQgc3RhdHVzIHdvcmQgZXRjLgpJZiBhbiBlcnJvciBvY2N1cnMgbW9yZSBzb3BoaXN0b2NhdGVkIGNvbnRyb2wgdW5pdHMgaGF2ZSBhIGZhY2l0aXR5IGtub3duIGFzCmNvbmN1cnJlbnQgc2Vuc2UgdGhpcyBtZWFucyB0aGF0IGlmIGFuIGVycm9yIG9jY3VycyBFeHRlbmRlZCBzZW5zZSBpbmZvcm1hdGlvbiB3aWxsCmJlIHByZXNlbnRlZCBpbiB0aGUgRXh0ZW5kZWQgc3RhdHVzIHdvcmQgaW4gdGhlIElSQiBpZiBub3QgeW91IGhhdmUgdG8gaXNzdWUgYQpzdWJzZXF1ZW50IFNFTlNFIENDVyBjb21tYW5kIGFmdGVyIHRoZSB0ZXN0IHN1YmNoYW5uZWwuIAoKClRQSSggVGVzdCBwZW5kaW5nIGludGVycnVwdCkgY2FuIGFsc28gYmUgdXNlZCBmb3IgcG9sbGVkIElPIGJ1dCBpbiBtdWx0aXRhc2tpbmcgbXVsdGlwcm9jZXNzb3IKc3lzdGVtcyBpdCBpc24ndCByZWNvbW1lbmRlZCBleGNlcHQgZm9yIGNoZWNraW5nIHNwZWNpYWwgY2FzZXMgKCBpLmUuIG5vbiBsb29waW5nIGNoZWNrcyBmb3IKcGVuZGluZyBJTyBldGMuICkuCgpTdG9yZSBTdWJjaGFubmVsICYgTW9kaWZ5IFN1YmNoYW5uZWwgY2FuIGJlIHVzZWQgdG8gZXhhbWluZSAmIG1vZGlmeSBvcGVyYXRpbmcgY2hhcmFjdGVyaXN0aWNzCm9mIGEgc3ViY2hhbm5lbCAoIGUuZy4gY2hhbm5lbCBwYXRocyApLgoKT3RoZXIgSU8gcmVsYXRlZCBUZXJtczoKU3lzcGxleDogUzM5MCdzIENsdXN0ZXJpbmcgVGVjaG5vbG9neQpRRElPOiBTMzkwJ3MgbmV3IGhpZ2ggc3BlZWQgSU8gYXJjaGl0ZWN0dXJlIHRvIHN1cHBvcnQgZGV2aWNlcyBzdWNoIGFzIGdpZ2FiaXQgZXRoZXJuZXQsCnRoaXMgYXJjaGl0ZWN0dXJlIGlzIGFsc28gZGVzaWduZWQgdG8gYmUgZm9yd2FyZCBjb21wYXRpYmxlIHdpdGggdXAgJiBjb21pbmcgNjQgYml0IG1hY2hpbmVzLgoKCkdlbmVyYWwgQ29uY2VwdHMgCgpJbnB1dCBPdXRwdXQgUHJvY2Vzc29ycyAoSU9QJ3MpIGFyZSByZXNwb25zaWJsZSBmb3IgY29tbXVuaWNhdGluZyBiZXR3ZWVuCnRoZSBtYWluZnJhbWUgQ1BVJ3MgJiB0aGUgY2hhbm5lbCAmIHJlbGlldmUgdGhlIG1haW5mcmFtZSBDUFUncyBmcm9tIHRoZQpidXJkZW4gb2YgY29tbXVuaWNhdGluZyB3aXRoIElPIGRldmljZXMgZGlyZWN0bHksIHRoaXMgYWxsb3dzIHRoZSBDUFUncyB0byAKY29uY2VudHJhdGUgb24gZGF0YSBwcm9jZXNzaW5nLiAKCklPUCdzIGNhbiB1c2Ugb25lIG9yIG1vcmUgbGlua3MgKCBrbm93biBhcyBjaGFubmVsIHBhdGhzICkgdG8gdGFsayB0byBlYWNoIApJTyBkZXZpY2UuIEl0IGZpcnN0IGNoZWNrcyBmb3IgcGF0aCBhdmFpbGFiaWxpdHkgJiBjaG9vc2VzIGFuIGF2YWlsYWJsZSBvbmUsCnRoZW4gc3RhcnRzICggJiBzb21ldGltZXMgdGVybWluYXRlcyBJTyApLgpUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGNoYW5uZWwgcGF0aCBFU0NPTiAmIHRoZSBQYXJhbGVsbCBJTyBpbnRlcmZhY2UuCgpJTyBkZXZpY2VzIGFyZSBhdHRhY2hlZCB0byBjb250cm9sIHVuaXRzLCBjb250cm9sIHVuaXRzIHByb3ZpZGUgdGhlCmxvZ2ljIHRvIGludGVyZmFjZSB0aGUgY2hhbm5lbCBwYXRocyAmIGNoYW5uZWwgcGF0aCBJTyBwcm90b2NvbHMgdG8gCnRoZSBJTyBkZXZpY2VzLCB0aGV5IGNhbiBiZSBpbnRlZ3JhdGVkIHdpdGggdGhlIGRldmljZXMgb3IgaG91c2VkIHNlcGFyYXRlbHkKJiBvZnRlbiB0YWxrIHRvIHNldmVyYWwgc2ltaWxhciBkZXZpY2VzICggdHlwaWNhbCBleGFtcGxlcyB3b3VsZCBiZSByYWlkIApjb250cm9sbGVycyBvciBhIGNvbnRyb2wgdW5pdCB3aGljaCBjb25uZWN0cyB0byAxMDAwIDMyNzAgdGVybWluYWxzICkuCgoKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICB8ICstLS0tLSsgKy0tLS0tKyArLS0tLS0rICstLS0tLSsgICstLS0tLS0tLS0tKyAgKy0tLS0tLS0tLS0rICAgfAogICAgfCB8IENQVSB8IHwgQ1BVIHwgfCBDUFUgfCB8IENQVSB8ICB8ICBNYWluICAgIHwgIHwgRXhwYW5kZWQgfCAgIHwKICAgIHwgfCAgICAgfCB8ICAgICB8IHwgICAgIHwgfCAgICAgfCAgfCAgTWVtb3J5ICB8ICB8ICBTdG9yYWdlIHwgICB8CiAgICB8ICstLS0tLSsgKy0tLS0tKyArLS0tLS0rICstLS0tLSsgICstLS0tLS0tLS0tKyAgKy0tLS0tLS0tLS0rICAgfCAKICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICB8ICAgSU9QICAgICAgICB8ICAgICAgSU9QICAgICAgfCAgICAgICBJT1AgICAgICAgICAgICAgICAgICAgICAgfAogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CiAgICAgICAgIHx8ICBCdXMgJiBUYWcgQ2hhbm5lbCBQYXRoICAgICAgICAgICAgICAgICAgICAgIHx8IEVTQ09OCiAgICAgICAgIHx8ICA9PT09PT09PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgIHx8IENoYW5uZWwKICAgICAgICAgfHwgIHx8ICAgICAgICAgICAgICAgICAgfHwgICAgICAgICAgICAgICAgICAgICAgfHwgUGF0aAogICAgKy0tLS0tLS0tLS0rICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0rICAgICAgICAgKy0tLS0tLS0tLS0rCiAgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgIHwKICAgIHwgICAgQ1UgICAgfCAgICAgICAgICAgICAgIHwgICAgQ1UgICAgfCAgICAgICAgIHwgICAgQ1UgICAgfAogICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0tLSsgICAgICAgICArLS0tLS0tLS0tLSsKICAgICAgIHwgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8ICAgICAgIHwKKy0tLS0tLS0tLS0rICstLS0tLS0tLS0tKyAgICAgICstLS0tLS0tLS0tKyAgICstLS0tLS0tLS0tKyArLS0tLS0tLS0tLSsKfEkvTyBEZXZpY2V8IHxJL08gRGV2aWNlfCAgICAgIHxJL08gRGV2aWNlfCAgIHxJL08gRGV2aWNlfCB8SS9PIERldmljZXwKKy0tLS0tLS0tLS0rICstLS0tLS0tLS0tKyAgICAgICstLS0tLS0tLS0tKyAgICstLS0tLS0tLS0tKyArLS0tLS0tLS0tLSsKICBDUFUgPSBDZW50cmFsIFByb2Nlc3NpbmcgVW5pdCAgICAKICBDID0gQ2hhbm5lbCAgICAgICAgICAgICAgICAgICAgICAKICBJT1AgPSBJUCBQcm9jZXNzb3IgICAgICAgICAgICAgICAKICBDVSA9IENvbnRyb2wgVW5pdAoKVGhlIDM5MCBJTyBzeXN0ZW1zIGNvbWUgaW4gMiBmbGF2b3VycyB0aGUgY3VycmVudCAzOTAgbWFjaGluZXMgc3VwcG9ydCBib3RoCgpUaGUgT2xkZXIgMzYwICYgMzcwIEludGVyZmFjZSxzb21ldGltZXMgY2FsbGVkIHRoZSBwYXJhbGVsbCBJL08gaW50ZXJmYWNlLApzb21ldGltZXMgY2FsbGVkIEJ1cy1hbmQgVGFnICYgc29tZXRpbWVzIE9yaWdpbmFsIEVxdWlwbWVudCBNYW51ZmFjdHVyZXJzCkludGVyZmFjZSAoT0VNSSkuCgpUaGlzIGJ5dGUgd2lkZSBwYXJhbGVsbCBjaGFubmVsIHBhdGgvYnVzIGhhcyBwYXJpdHkgJiBkYXRhIG9uIHRoZSAiQnVzIiBjYWJsZSAKJiBjb250cm9sIGxpbmVzIG9uIHRoZSAiVGFnIiBjYWJsZS4gVGhlc2UgY2FuIG9wZXJhdGUgaW4gYnl0ZSBtdWx0aXBsZXggbW9kZSBmb3IKc2hhcmluZyBiZXR3ZWVuIHNldmVyYWwgc2xvdyBkZXZpY2VzIG9yIGJ1cnN0IG1vZGUgJiBtb25vcG9saXplIHRoZSBjaGFubmVsIGZvciB0aGUKd2hvbGUgYnVyc3QuIFVwdG8gMjU2IGRldmljZXMgY2FuIGJlIGFkZHJlc3NlZCAgb24gb25lIG9mIHRoZXNlIGNhYmxlcy4gVGhlc2UgY2FibGVzIGFyZQphYm91dCBvbmUgaW5jaCBpbiBkaWFtZXRlci4gVGhlIG1heGltdW0gdW5leHRlbmRlZCBsZW5ndGggc3VwcG9ydGVkIGJ5IHRoZXNlIGNhYmxlcyBpcwoxMjUgTWV0ZXJzIGJ1dCB0aGlzIGNhbiBiZSBleHRlbmRlZCB1cCB0byAya20gd2l0aCBhIGZpYnJlIG9wdGljIGNoYW5uZWwgZXh0ZW5kZWQgCnN1Y2ggYXMgYSAzMDQ0LiBUaGUgbWF4aW11bSBidXJzdCBzcGVlZCBzdXBwb3J0ZWQgaXMgNC41IG1lZ2FieXRlcyBwZXIgc2Vjb25kIGhvd2V2ZXIKc29tZSByZWFsbHkgb2xkIHByb2Nlc3NvcnMgc3VwcG9ydCBvbmx5IHRyYW5zZmVyIHJhdGVzIG9mIDMuMCwgMi4wICYgMS4wIE1CL3NlYy4KT25lIG9mIHRoZXNlIHBhdGhzIGNhbiBiZSBkYWlzeSBjaGFpbmVkIHRvIHVwIHRvIDggY29udHJvbCB1bml0cy4KCgpFU0NPTiBpZiBmaWJyZSBvcHRpYyBpdCBpcyBhbHNvIGNhbGxlZCBGSUNPTiAKV2FzIGludHJvZHVjZWQgYnkgSUJNIGluIDE5OTAuIEhhcyAyIGZpYnJlIG9wdGljIGNhYmxlcyAmIHVzZXMgZWl0aGVyIGxlZHMgb3IgbGFzZXJzCmZvciBjb21tdW5pY2F0aW9uIGF0IGEgc2lnbmFsaW5nIHJhdGUgb2YgdXB0byAyMDAgbWVnYWJpdHMvc2VjLiBBcyAxMGJpdHMgYXJlIHRyYW5zZmVycmVkCmZvciBldmVyeSA4IGJpdHMgaW5mbyB0aGlzIGRyb3BzIHRvIDE2MCBtZWdhYml0cy9zZWMgJiB0byAxOC42IE1lZ2FieXRlcy9zZWMgb25jZQpjb250cm9sIGluZm8gJiBDUkMgYXJlIGFkZGVkLiBFU0NPTiBvbmx5IG9wZXJhdGVzIGluIGJ1cnN0IG1vZGUuCiAKRVNDT05zIHR5cGljYWwgbWF4IGNhYmxlIGxlbmd0aCBpcyAza20gZm9yIHRoZSBsZWQgdmVyc2lvbiAmIDIwa20gZm9yIHRoZSBsYXNlciB2ZXJzaW9uCmtub3duIGFzIFhERiAoIGV4dGVuZGVkIGRpc3RhbmNlIGZhY2lsaXR5ICkuIFRoaXMgY2FuIGJlIGZ1cnRoZXIgZXh0ZW5kZWQgYnkgdXNpbmcgYW4KRVNDT04gZGlyZWN0b3Igd2hpY2ggdHJpcGxlcyB0aGUgYWJvdmUgbWVudGlvbmVkIHJhbmdlcy4gVW5saWtlIEJ1cyAmIFRhZyBhcyBFU0NPTiBpcwpzZXJpYWwgaXQgdXNlcyBhIHBhY2tldCBzd2l0Y2hpbmcgYXJjaGl0ZWN0dXJlIHRoZSBzdGFuZGFyZCBCdXMgJiBUYWcgY29udHJvbCBwcm90b2NvbAppcyBob3dldmVyIHByZXNlbnQgd2l0aGluIHRoZSBwYWNrZXRzLiBVcHRvIDI1NiBkZXZpY2VzIGNhbiBiZSBhdHRhY2hlZCB0byBlYWNoIGNvbnRyb2wgCnVuaXQgdGhhdCB1c2VzIG9uZSBvZiB0aGVzZSBpbnRlcmZhY2VzLgoKQ29tbW9uIDM5MCBEZXZpY2VzIGluY2x1ZGU6Ck5ldHdvcmsgYWRhcHRlcnMgdHlwaWNhbGx5IE9TQTIsMzE3MidzLDIxMTYncyAmIE9TQS1FIGdpZ2FiaXQgZXRoZXJuZXQgYWRhcHRlcnMsCkNvbnNvbGVzIDMyNzAgJiAzMjE1ICggYSB0ZWxldHlwZSBlbXVsYXRlZCB1bmRlciBsaW51eCBmb3IgYSBsaW5lIG1vZGUgY29uc29sZSApLgpEQVNEJ3MgZGlyZWN0IGFjY2VzcyBzdG9yYWdlIGRldmljZXMgKCBvdGhlcndpc2Uga25vd24gYXMgaGFyZCBkaXNrcyApLgpUYXBlIERyaXZlcy4KQ1RDICggQ2hhbm5lbCB0byBDaGFubmVsIEFkYXB0ZXJzICksCkVTQ09OIG9yIFBhcmFsZWxsIENhYmxlcyB1c2VkIGFzIGEgdmVyeSBoaWdoIHNwZWVkIHNlcmlhbCBsaW5rCmJldHdlZW4gMiBtYWNoaW5lcy4gV2UgdXNlIDIgY2FibGVzIHVuZGVyIGxpbnV4IHRvIGRvIGEgYmktZGlyZWN0aW9uYWwgc2VyaWFsIGxpbmsuCgoKRGVidWdnaW5nIElPIG9uIHMvMzkwICYgei9BcmNoaXRlY3R1cmUgdW5kZXIgVk0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCk5vdyB3ZSBhcmUgcmVhZHkgdG8gZ28gb24gd2l0aCBJTyB0cmFjaW5nIGNvbW1hbmRzIHVuZGVyIFZNCgpBIGZldyBzZWxmIGV4cGxhbmF0b3J5IHF1ZXJpZXM6ClEgT1NBClEgQ1RDClEgRElTSyAoIFRoaXMgY29tbWFuZCBpcyBDTVMgc3BlY2lmaWMgKQpRIERBU0QKCgoKCgoKUSBPU0Egb24gbXkgbWFjaGluZSByZXR1cm5zCk9TQSAgN0MwOCBPTiBPU0EgICA3QzA4IFNVQkNIQU5ORUwgPSAwMDAwCk9TQSAgN0MwOSBPTiBPU0EgICA3QzA5IFNVQkNIQU5ORUwgPSAwMDAxCk9TQSAgN0MxNCBPTiBPU0EgICA3QzE0IFNVQkNIQU5ORUwgPSAwMDAyCk9TQSAgN0MxNSBPTiBPU0EgICA3QzE1IFNVQkNIQU5ORUwgPSAwMDAzCgpJZiB5b3UgaGF2ZSBhIGd1ZXN0IHdpdGggY2VydGFpbiBwcml2aWxpZ2VzIHlvdSBtYXkgYmUgYWJsZSB0byBzZWUgZGV2aWNlcwp3aGljaCBkb24ndCBiZWxvbmcgdG8geW91IHRvIGF2b2lkIHRoaXMgZG8gYWRkIHRoZSBvcHRpb24gVi4KZS5nLgpRIFYgT1NBCgpOb3cgdXNpbmcgdGhlIGRldmljZSBudW1iZXJzIHJldHVybmVkIGJ5IHRoaXMgY29tbWFuZCB3ZSB3aWxsClRyYWNlIHRoZSBpbyBzdGFydGluZyB1cCBvbiB0aGUgZmlyc3QgZGV2aWNlIDdjMDggJiA3YzA5CkluIG91ciBzaW1wbGVzdCBjYXNlIHdlIGNhbiB0cmFjZSB0aGUgCnN0YXJ0IHN1YmNoYW5uZWxzCmxpa2UgVFIgU1NDSCA3QzA4LTdDMDkKb3IgdGhlIGhhbHQgc3ViY2hhbm5lbHMKb3IgVFIgSFNDSCA3QzA4LTdDMDkKTVNDSCdzICxTVFNDSCdzIEkgdGhpbmsgeW91IGNhbiBndWVzcyB0aGUgcmVzdAoKSW5nbydzIGZhdm91cml0ZSB0cmljayBpcyB0cmFjaW5nIGFsbCB0aGUgSU8ncyAmIENDV1MgJiBzcG9vbGluZyB0aGVtIGludG8gdGhlIHJlYWRlciBvZiBhbm90aGVyClZNIGd1ZXN0IHNvIGhlIGNhbiBmdHAgdGhlIGxvZ2ZpbGUgYmFjayB0byBoaXMgb3duIG1hY2hpbmUuSSdsbCBkbyBhIHNtYWxsIGJpdCBvZiB0aGlzICYgZ2l2ZSB5b3UKIGEgbG9vayBhdCB0aGUgb3V0cHV0LgoKMSkgU3Bvb2wgc3Rkb3V0IHRvIFZNIHJlYWRlcgpTUCBQUlQgVE8gKGFub3RoZXIgdm0gZ3Vlc3QgKSBvciAqIGZvciB0aGUgbG9jYWwgdm0gZ3Vlc3QKMikgRmlsbCB0aGUgcmVhZGVyIHdpdGggdGhlIHRyYWNlClRSIElPIDdjMDgtN2MwOSBJTlNUIElOVCBDQ1cgUFJUIFJVTgozKSBTdGFydCB1cCBsaW51eCAKaSAwMGMgIAo0KSBGaW5pc2ggdGhlIHRyYWNlClRSIEVORAo1KSBjbG9zZSB0aGUgcmVhZGVyCkMgUFJUCjYpIGxpc3QgcmVhZGVyIGNvbnRlbnRzClJEUkxJU1QKNykgY29weSBpdCB0byBsaW51eDQncyBtaW5pZGlzayAKUkVDRUlWRSAvIExPRyBUWFQgQTEgKCByZXBsYWNlCjgpCmZpbGVsICYgcHJlc3MgRjExIHRvIGxvb2sgYXQgaXQKWW91IHNob3VsZCBzZWUgc29tZXRpbmcgbGlrZS4KCjAwMDIwOTQyJyBTU0NIICBCMjMzNDAwMCAgICAwMDQ4ODEzQyAgICBDQyAwICAgIFNDSCAwMDAwICAgIERFViA3QzA4CiAgICAgICAgICBDUEEgMDAwRkZERjAgICBQQVJNIDAwRTJDOUM0ICAgIEtFWSAwICBGUEkgQzAgIExQTSA4MAogICAgICAgICAgQ0NXICAgIDAwMEZGREYwICBFNDIwMDEwMCAwMDQ4N0ZFOCAgIDAwMDAgIEU0MjQwMTAwIC4uLi4uLi4uCiAgICAgICAgICBJREFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0M0Q4QUZFOAogICAgICAgICAgSURBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMEZCNzYwMDAKMDAwMjBCMEEnICAgSS9PIERFViA3QzA4IC0+IDAwMDE5N0JDJyAgIFNDSCAwMDAwICAgUEFSTSAwMEUyQzlDNAowMDAyMTYyOCcgVFNDSCAgQjIzNTQwMDAgPj4gMDA0ODgxNjQgICAgQ0MgMCAgICBTQ0ggMDAwMCAgICBERVYgN0MwOAogICAgICAgICAgQ0NXQSAwMDBGRkRGOCAgIERFViBTVFMgMEMgIFNDSCBTVFMgMDAgIENOVCAwMEVDCiAgICAgICAgICAgS0VZIDAgICBGUEkgQzAgIENDIDAgICBDVExTIDQwMDcKMDAwMjIyMzgnIFNUU0NIIEIyMzQ0MDAwID4+IDAwNDg4MTA4ICAgIENDIDAgICAgU0NIIDAwMDAgICAgREVWIDdDMDgKCklmIHlvdSBkb24ndCBsaWtlIG1lc3NpbmcgdXAgeW91ciByZWFkZWQgKCBiZWNhdXNlIHlvdSBwb3NzaWJseSBib290ZWQgZnJvbSBpdCApCnlvdSBjYW4gYWx0ZXJuYXRpdmVseSBzcG9vbCBpdCB0byBhbm90aGVyIHJlYWRlcnMgZ3Vlc3QuCgoKT3RoZXIgY29tbW9uIFZNIGRldmljZSByZWxhdGVkIGNvbW1hbmRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaGVzZSBjb21tYW5kcyBhcmUgbGlzdGVkIG9ubHkgYmVjYXVzZSB0aGV5IGhhdmUKYmVlbiBvZiB1c2UgdG8gbWUgaW4gdGhlIHBhc3QgJiBtYXkgYmUgb2YgdXNlIHRvCnlvdSB0b28uIEZvciBtb3JlIGNvbXBsZXRlIGluZm8gb24gZWFjaCBvZiB0aGUgY29tbWFuZHMKdXNlIHR5cGUgSEVMUCA8Y29tbWFuZD4gZnJvbSBDTVMuCmRldGFjaGluZyBkZXZpY2VzCkRFVCA8ZGV2bm8gcmFuZ2U+CkFUVCA8ZGV2bm8gcmFuZ2U+IDxndWVzdD4gCmF0dGFjaCBhIGRldmljZSB0byBndWVzdCAqIGZvciB5b3VyIG93biBndWVzdApSRUFEWSA8ZGV2bm8+IGNhdXNlIFZNIHRvIGlzc3VlIGEgZmFrZSBpbnRlcnJ1cHQuCgpUaGUgVkFSWSBjb21tYW5kIGlzIG5vcm1hbGx5IG9ubHkgYXZhaWxhYmxlIHRvIFZNIGFkbWluaXN0cmF0b3JzLgpWQVJZIE9OIFBBVEggPHBhdGg+IFRPIDxkZXZubyByYW5nZT4KVkFSWSBPRkYgUEFUSCA8UEFUSD4gRlJPTSA8ZGV2bm8gcmFuZ2U+ClRoaXMgaXMgdXNlZCB0byBzd2l0Y2ggb24gb3Igb2ZmIGNoYW5uZWwgcGF0aHMgdG8gZGV2aWNlcy4KClEgQ0hQSUQgPGNoYW5uZWwgcGF0aCBJRD4KVGhpcyBkaXNwbGF5cyBzdGF0ZSBvZiBkZXZpY2VzIHVzaW5nIHRoaXMgY2hhbm5lbCBwYXRoCkQgU0NISUIgPHN1YmNoYW5uZWw+ClRoaXMgZGlzcGxheXMgdGhlIHN1YmNoYW5uZWwgaW5mb3JtYXRpb24gU0NISUIgYmxvY2sgZm9yIHRoZSBkZXZpY2UuCnRoaXMgSSBiZWxpZXZlIGlzIGFsc28gb25seSBhdmFpbGFibGUgdG8gYWRtaW5pc3RyYXRvcnMuCkRFRklORSBDVEMgPGRldm5vPgpkZWZpbmVzIGEgdmlydHVhbCBDVEMgY2hhbm5lbCB0byBjaGFubmVsIGNvbm5lY3Rpb24KMiBuZWVkIHRvIGJlIGRlZmluZWQgb24gZWFjaCBndWVzdCBmb3IgdGhlIENUQyBkcml2ZXIgdG8gdXNlLgpDT1VQTEUgIGRldm5vIHVzZXJpZCByZW1vdGUgZGV2bm8KSm9pbnMgYSBsb2NhbCB2aXJ0dWFsIGRldmljZSB0byBhIHJlbW90ZSB2aXJ0dWFsIGRldmljZQooIGNvbW1vbmx5IHVzZWQgZm9yIHRoZSBDVEMgZHJpdmVyICkuCgpCdWlsZGluZyBhIFZNIHJhbWRpc2sgdW5kZXIgQ01TIHdoaWNoIGxpbnV4IGNhbiB1c2UKZGVmIHZmYi08YmxvY2tzaXplPiA8c3ViY2hhbm5lbD4gPG51bWJlciBibG9ja3M+CmJsb2Nrc2l6ZSBpcyBjb21tb25seSA0MDk2IGZvciBsaW51eC4KRm9ybWF0dGluZyBpdApmb3JtYXQgPHN1YmNoYW5uZWw+IDxkcml2ZXIgbGV0dGVyIGUuZy4geD4gKGJsa3NpemUgPGJsb2Nrc2l6ZT4KClNoYXJpbmcgYSBkaXNrIGJldHdlZW4gbXVsdGlwbGUgZ3Vlc3RzCkxJTksgdXNlcmlkIGRldm5vMSBkZXZubzIgbW9kZSBwYXNzd29yZAoKCgpHREIgb24gUzM5MAo9PT09PT09PT09PQpOLkIuIGlmIGNvbXBpbGluZyBmb3IgZGVidWdnaW5nIGdkYiB3b3JrcyBiZXR0ZXIgd2l0aG91dCBvcHRpbWlzYXRpb24gCiggc2VlIENvbXBpbGluZyBwcm9ncmFtcyBmb3IgZGVidWdnaW5nICkKCmludm9jYXRpb24KLS0tLS0tLS0tLQpnZGIgPHZpY3RpbSBwcm9ncmFtPiA8b3B0aW9uYWwgY29yZWZpbGU+CgpPbmxpbmUgaGVscAotLS0tLS0tLS0tLQpoZWxwOiBnaXZlcyBoZWxwIG9uIGNvbW1hbmRzCmUuZy4KaGVscApoZWxwIGRpc3BsYXkKTm90ZSBnZGIncyBvbmxpbmUgaGVscCBpcyB2ZXJ5IGdvb2QgdXNlIGl0LgoKCkFzc2VtYmx5Ci0tLS0tLS0tCmluZm8gcmVnaXN0ZXJzOiBkaXNwbGF5cyByZWdpc3RlcnMgb3RoZXIgdGhhbiBmbG9hdGluZyBwb2ludC4KaW5mbyBhbGwtcmVnaXN0ZXJzOiBkaXNwbGF5cyBmbG9hdGluZyBwb2ludHMgYXMgd2VsbC4KZGlzYXNzZW1ibGU6IGRpc3Nhc3NlbWJsZXMKZS5nLgpkaXNhc3NlbWJsZSB3aXRob3V0IHBhcmFtZXRlcnMgd2lsbCBkaXNhc3NlbWJsZSB0aGUgY3VycmVudCBmdW5jdGlvbgpkaXNhc3NlbWJsZSAkcGMgJHBjKzEwIAoKVmlld2luZyAmIG1vZGlmeWluZyB2YXJpYWJsZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KcHJpbnQgb3IgcDogZGlzcGxheXMgdmFyaWFibGUgb3IgcmVnaXN0ZXIKZS5nLiBwL3ggJHNwIHdpbGwgZGlzcGxheSB0aGUgc3RhY2sgcG9pbnRlcgoKZGlzcGxheTogcHJpbnRzIHZhcmlhYmxlIG9yIHJlZ2lzdGVyIGVhY2ggdGltZSBwcm9ncmFtIHN0b3BzCmUuZy4KZGlzcGxheS94ICRwYyB3aWxsIGRpc3BsYXkgdGhlIHByb2dyYW0gY291bnRlcgpkaXNwbGF5IGFyZ2MKCnVuZGlzcGxheSA6IHVuZG8ncyBkaXNwbGF5J3MKCmluZm8gYnJlYWtwb2ludHM6IHNob3dzIGFsbCBjdXJyZW50IGJyZWFrcG9pbnRzCgppbmZvIHN0YWNrOiBzaG93cyBzdGFjayBiYWNrIHRyYWNlICggaWYgdGhpcyBkb3NlbnQgd29yayB0b28gd2VsbCwgSSdsbCBzaG93IHlvdSB0aGUKc3RhY2t0cmFjZSBieSBoYW5kIGJlbG93ICkuCgppbmZvIGxvY2FsczogZGlzcGxheXMgbG9jYWwgdmFyaWFibGVzLgoKaW5mbyBhcmdzOiBkaXNwbGF5IGN1cnJlbnQgcHJvY2VkdXJlIGFyZ3VtZW50cy4KCnNldCBhcmdzOiB3aWxsIHNldCBhcmdjICYgYXJndiBlYWNoIHRpbWUgdGhlIHZpY3RpbSBwcm9ncmFtIGlzIGludm9rZWQuCgpzZXQgPHZhcmlhYmxlPj12YWx1ZQpzZXQgYXJnYz0xMDAKc2V0ICRwYz0wCgoKCk1vZGlmeWluZyBleGVjdXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLQpzdGVwOiBzdGVwcyBuIGxpbmVzIG9mIHNvdXJjZWNvZGUKc3RlcCBzdGVwcyAxIGxpbmUuCnN0ZXAgMTAwIHN0ZXBzIDEwMCBsaW5lcyBvZiBjb2RlLgoKbmV4dDogbGlrZSBzdGVwIGV4Y2VwdCB0aGlzIHdpbGwgbm90IHN0ZXAgaW50byBzdWJyb3V0aW5lcwoKc3RlcGk6IHN0ZXBzIGEgc2luZ2xlIG1hY2hpbmUgY29kZSBpbnN0cnVjdGlvbi4KZS5nLiBzdGVwaSAxMDAKCm5leHRpOiBzdGVwcyBhIHNpbmdsZSBtYWNoaW5lIGNvZGUgaW5zdHJ1Y3Rpb24gYnV0IHdpbGwgbm90IHN0ZXAgaW50byBzdWJyb3V0aW5lcy4KCmZpbmlzaDogd2lsbCBydW4gdW50aWwgZXhpdCBvZiB0aGUgY3VycmVudCByb3V0aW5lCgpydW46IChyZSlzdGFydHMgYSBwcm9ncmFtCgpjb250OiBjb250aW51ZXMgYSBwcm9ncmFtCgpxdWl0OiBleGl0cyBnZGIuCgoKYnJlYWtwb2ludHMKLS0tLS0tLS0tLS0tCgpicmVhawpzZXRzIGEgYnJlYWtwb2ludAplLmcuCgpicmVhayBtYWluCgpicmVhayAqJHBjCgpicmVhayAqMHg0MDA2MTgKCmhlcmVzIGEgcmVhbGx5IHVzZWZ1bCBvbmUgZm9yIGxhcmdlIHByb2dyYW1zCnJicgpTZXQgYSBicmVha3BvaW50IGZvciBhbGwgZnVuY3Rpb25zIG1hdGNoaW5nIFJFR0VYUAplLmcuCnJiciAzOTAKd2lsbCBzZXQgYSBicmVha3BvaW50IHdpdGggYWxsIGZ1bmN0aW9ucyB3aXRoIDM5MCBpbiB0aGVpciBuYW1lLgoKaW5mbyBicmVha3BvaW50cwpsaXN0cyBhbGwgYnJlYWtwb2ludHMKCmRlbGV0ZTogZGVsZXRlIGJyZWFrcG9pbnQgYnkgbnVtYmVyIG9yIGRlbGV0ZSB0aGVtIGFsbAplLmcuCmRlbGV0ZSAxIHdpbGwgZGVsZXRlIHRoZSBmaXJzdCBicmVha3BvaW50CmRlbGV0ZSB3aWxsIGRlbGV0ZSB0aGVtIGFsbAoKd2F0Y2g6IFRoaXMgd2lsbCBzZXQgYSB3YXRjaHBvaW50ICggdXN1YWxseSBoYXJkd2FyZSBhc3Npc3RlZCApLApUaGlzIHdpbGwgd2F0Y2ggYSB2YXJpYWJsZSB0aWxsIGl0IGNoYW5nZXMKZS5nLgp3YXRjaCBjbnQsIHdpbGwgd2F0Y2ggdGhlIHZhcmlhYmxlIGNudCB0aWxsIGl0IGNoYW5nZXMuCkFzIGFuIGFzaWRlIHVuZm9ydHVuYXRlbHkgZ2RiJ3MsIGFyY2hpdGVjdHVyZSBpbmRlcGVuZGVudCB3YXRjaHBvaW50IGNvZGUKaXMgaW5jb25zaXN0ZW50ICYgbm90IHZlcnkgZ29vZCwgd2F0Y2hwb2ludHMgdXN1YWxseSB3b3JrIGJ1dCBub3QgYWx3YXlzLgoKaW5mbyB3YXRjaHBvaW50czogRGlzcGxheSBjdXJyZW50bHkgYWN0aXZlIHdhdGNocG9pbnRzCgpjb25kaXRpb246ICggYW5vdGhlciB1c2VmdWwgb25lICkKU3BlY2lmeSBicmVha3BvaW50IG51bWJlciBOIHRvIGJyZWFrIG9ubHkgaWYgQ09ORCBpcyB0cnVlLgpVc2FnZSBpcyBgY29uZGl0aW9uIE4gQ09ORCcsIHdoZXJlIE4gaXMgYW4gaW50ZWdlciBhbmQgQ09ORCBpcyBhbgpleHByZXNzaW9uIHRvIGJlIGV2YWx1YXRlZCB3aGVuZXZlciBicmVha3BvaW50IE4gaXMgcmVhY2hlZC4KCgoKVXNlciBkZWZpbmVkIGZ1bmN0aW9ucy9tYWNyb3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGVmaW5lOiAoIE5vdGUgdGhpcyBpcyB2ZXJ5IHZlcnkgdXNlZnVsLHNpbXBsZSAmIHBvd2VyZnVsICkKdXNhZ2UgZGVmaW5lIDxuYW1lPiA8bGlzdCBvZiBjb21tYW5kcz4gZW5kCgpleGFtcGxlcyB3aGljaCB5b3Ugc2hvdWxkIGNvbnNpZGVyIHB1dHRpbmcgaW50byAuZ2RiaW5pdCBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5CmRlZmluZSBkCnN0ZXBpCmRpc2Fzc2VtYmxlICRwYyAkcGMrMTAKZW5kCgpkZWZpbmUgZQpuZXh0aQpkaXNhc3NlbWJsZSAkcGMgJHBjKzEwCmVuZAoKCk90aGVyIGhhcmQgdG8gY2xhc3NpZnkgc3R1ZmYKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzaWduYWwgbjoKc2VuZHMgdGhlIHZpY3RpbSBwcm9ncmFtIGEgc2lnbmFsLgplLmcuIHNpZ25hbCAzIHdpbGwgc2VuZCBhIFNJR1FVSVQuCgppbmZvIHNpZ25hbHM6CndoYXQgZ2RiIGRvZXMgd2hlbiB0aGUgdmljdGltIHJlY2VpdmVzIGNlcnRhaW4gc2lnbmFscy4KCmxpc3Q6CmUuZy4KbGlzdCBsaXN0cyBjdXJyZW50IGZ1bmN0aW9uIHNvdXJjZQpsaXN0IDEsMTAgbGlzdCBmaXJzdCAxMCBsaW5lcyBvZiBjdXJyZXQgZmlsZS4KbGlzdCB0ZXN0LmM6MSwxMAoKCmRpcmVjdG9yeToKQWRkcyBkaXJlY3RvcmllcyB0byBiZSBzZWFyY2hlZCBmb3Igc291cmNlIGlmIGdkYiBjYW5ub3QgZmluZCB0aGUgc291cmNlLgoobm90ZSBpdCBpcyBhIGJpdCBzZW5zaXRpdGl2ZSBhYm91dCBzbGFzaGVzICkgCmUuZy4gVG8gYWRkIHRoZSByb290IG9mIHRoZSBmaWxlc3lzdGVtIHRvIHRoZSBzZWFyY2hwYXRoIGRvCmRpcmVjdG9yeSAvLwoKCmNhbGwgPGZ1bmN0aW9uPgpUaGlzIGNhbGxzIGEgZnVuY3Rpb24gaW4gdGhlIHZpY3RpbSBwcm9ncmFtLCB0aGlzIGlzIHByZXR0eSBwb3dlcmZ1bAplLmcuCihnZGIpIGNhbGwgcHJpbnRmKCJoZWxsbyB3b3JsZCIpCm91dHB1dHM6CiQxID0gMTEgCgpZb3UgbWlnaHQgbm93IGJlIHRoaW5raW5nIHRoYXQgdGhlIGxpbmUgYWJvdmUgZGlkbid0IHdvcmssIHNvbWV0aGluZyBleHRyYSBoYWQgdG8gYmUgZG9uZS4KKGdkYikgY2FsbCBmZmx1c2goc3Rkb3V0KQpoZWxsbyB3b3JsZCQyID0gMApBcyBhbiBhc2lkZSB0aGUgZGVidWdnZXIgYWxzbyBjYWxscyBtYWxsb2MgJiBmcmVlIHVuZGVyIHRoZSBob29kIAp0byBtYWtlIHNwYWNlIGZvciB0aGUgImhlbGxvIHdvcmxkIiBzdHJpbmcuCgoKCmhpbnRzCi0tLS0tCjEpIGNvbW1hbmQgY29tcGxldGlvbiB3b3JrcyBqdXN0IGxpa2UgYmFzaCAKKCBpZiB5b3UgYXJlIGEgYmFkIHR5cGlzdCBsaWtlIG1lIHRoaXMgcmVhbGx5IGhlbHBzICkKZS5nLiBoaXQgYnIgPFRBQj4gJiBjdXJzb3IgdXAgJiBkb3duIDotKS4KCjIpIGlmIHlvdSBoYXZlIGEgZGVidWdnaW5nIHByb2JsZW0gdGhhdCB0YWtlcyBhIGZldyBzdGVwcyB0byByZWNyZWF0ZQpwdXQgdGhlIHN0ZXBzIGludG8gYSBmaWxlIGNhbGxlZCAuZ2RiaW5pdCBpbiB5b3VyIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKaWYgeW91IGhhdmUgZGVmaW5lZCBhIGZldyBleHRyYSB1c2VmdWwgdXNlciBkZWZpbmVkIGNvbW1hbmRzIHB1dCB0aGVzZSBpbiAKeW91ciBob21lIGRpcmVjdG9yeSAmIHRoZXkgd2lsbCBiZSByZWFkIGVhY2ggdGltZSBnZGIgaXMgbGF1bmNoZWQuCgpBIHR5cGljYWwgLmdkYmluaXQgZmlsZSBtaWdodCBiZS4KYnJlYWsgbWFpbgpydW4KYnJlYWsgcnVudGltZV9leGNlcHRpb24KY29udCAKCgpzdGFjayBjaGFpbmluZyBpbiBnZGIgYnkgaGFuZAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaGlzIGlzIGRvbmUgdXNpbmcgYSB0aGUgc2FtZSB0cmljayBkZXNjcmliZWQgZm9yIFZNIApwL3ggKCooJHNwKzU2KSkmMHg3ZmZmZmZmZiBnZXQgdGhlIGZpcnN0IGJhY2tjaGFpbi4KCkZvciB6L0FyY2hpdGVjdHVyZQpSZXBsYWNlIDU2IHdpdGggMTEyICYgaWdub3JlIHRoZSAmMHg3ZmZmZmZmZgppbiB0aGUgbWFjcm9zIGJlbG93ICYgZG8gbmFzdHkgY2FzdHMgdG8gbG9uZ3MgbGlrZSB0aGUgZm9sbG93aW5nCmFzIGdkYiB1bmZvcnR1bmF0ZWx5IGRlYWxzIHdpdGggcHJpbnRlZCBhcmd1bWVudHMgYXMgaW50cyB3aGljaAptZXNzZXMgdXAgZXZlcnl0aGluZy4KaS5lLiBoZXJlIGlzIGEgM3JkIGJhY2tjaGFpbiBkZXJlZmVyZW5jZQpwL3ggKihsb25nICopKCoqKihsb25nICoqKikkc3ArMTEyKQoKCnRoaXMgb3V0cHV0cyAKJDUgPSAweDUyOGYxOCAKb24gbXkgbWFjaGluZS4KTm93IHlvdSBjYW4gdXNlIAppbmZvIHN5bWJvbCAoKigkc3ArNTYpKSYweDdmZmZmZmZmIAp5b3UgbWlnaHQgc2VlIHNvbWV0aGluZyBsaWtlLgpybF9nZXRjICsgMzYgaW4gc2VjdGlvbiAudGV4dCAgdGVsbGluZyB5b3Ugd2hhdCBpcyBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MjhmMTgKTm93IGRvLgpwL3ggKCooKiRzcCs1NikpJjB4N2ZmZmZmZmYgClRoaXMgb3V0cHV0cwokNiA9IDB4NTI4ZWQwCk5vdyBkby4KaW5mbyBzeW1ib2wgKCooKiRzcCs1NikpJjB4N2ZmZmZmZmYKcmxfcmVhZF9rZXkgKyAxODAgaW4gc2VjdGlvbiAudGV4dApub3cgZG8KcC94ICgqKCoqJHNwKzU2KSkmMHg3ZmZmZmZmZgomIHNvIG9uLgoKRGlzYXNzZW1ibGluZyBpbnN0cnVjdGlvbnMgd2l0aG91dCBkZWJ1ZyBpbmZvCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpnZGIgdHlwaWNhbGx5IGNvbXBhaW5zIGlmIHRoZXJlIGlzIGEgbGFjayBvZiBkZWJ1Z2dpbmcKc3ltYm9scyBpbiAgdGhlIGRpc2Fzc2VtYmxlIGNvbW1hbmQgd2l0aCAKIk5vIGZ1bmN0aW9uIGNvbnRhaW5zIHNwZWNpZmllZCBhZGRyZXNzLiIgdG8gZ2V0IGFyb3VuZAp0aGlzIGRvIAp4LzxudW1iZXIgbGluZXMgdG8gZGlzYXNzZW1ibGU+eGkgPGFkZHJlc3M+CmUuZy4KeC8yMHhpIDB4NDAwNzMwCgoKCk5vdGU6IFJlbWVtYmVyIGdkYiBoYXMgaGlzdG9yeSBqdXN0IGxpa2UgYmFzaCB5b3UgZG9uJ3QgbmVlZCB0byByZXR5cGUgdGhlCndob2xlIGxpbmUganVzdCB1c2UgdGhlIHVwICYgZG93biBhcnJvd3MuCgoKCkZvciBtb3JlIGluZm8KLS0tLS0tLS0tLS0tLQpGcm9tIHlvdXIgbGludXhib3ggZG8gCm1hbiBnZGIgb3IgaW5mbyBnZGIuCgpjb3JlIGR1bXBzCi0tLS0tLS0tLS0KV2hhdCBhIGNvcmUgZHVtcCA/LApBIGNvcmUgZHVtcCBpcyBhIGZpbGUgZ2VuZXJhdGVkIGJ5IHRoZSBrZXJuZWwgKCBpZiBhbGxvd2VkICkgd2hpY2ggY29udGFpbnMgdGhlIHJlZ2lzdGVycywKJiBhbGwgYWN0aXZlIHBhZ2VzIG9mIHRoZSBwcm9ncmFtIHdoaWNoIGhhcyBjcmFzaGVkLgpGcm9tIHRoaXMgZmlsZSBnZGIgd2lsbCBhbGxvdyB5b3UgdG8gbG9vayBhdCB0aGUgcmVnaXN0ZXJzICYgc3RhY2sgdHJhY2UgJiBtZW1vcnkgb2YgdGhlCnByb2dyYW0gYXMgaWYgaXQganVzdCBjcmFzaGVkIG9uIHlvdXIgc3lzdGVtLCBpdCBpcyB1c3VhbGx5IGNhbGxlZCBjb3JlICYgY3JlYXRlZCBpbiB0aGUKY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBpbiB0aGF0IGEgY3VzdG9tZXIgY2FuIG1haWwgYSBjb3JlIGR1bXAgdG8gYSB0ZWNobmljYWwgc3VwcG9ydCBkZXBhcnRtZW50CiYgdGhlIHRlY2huaWNhbCBzdXBwb3J0IGRlcGFydG1lbnQgY2FuIHJlY29uc3RydWN0IHdoYXQgaGFwcGVuZWQuClByb3ZpZGVkIHRoZSBoYXZlIGFuIGlkZW50aWNhbCBjb3B5IG9mIHRoaXMgcHJvZ3JhbSB3aXRoIGRlYnVnZ2luZyBzeW1ib2xzIGNvbXBpbGVkIGluICYgCnRoZSBzb3VyY2UgYmFzZSBvZiB0aGlzIGJ1aWxkIGlzIGF2YWlsYWJsZS4KSW4gc2hvcnQgaXQgaXMgZmFyIG1vcmUgdXNlZnVsIHRoYW4gc29tZXRoaW5nIGxpa2UgYSBjcmFzaCBsb2cgY291bGQgZXZlciBob3BlIHRvIGJlLgoKSW4gdGhlb3J5IGFsbCB0aGF0IGlzIG1pc3NpbmcgdG8gcmVzdGFydCBhIGNvcmUgZHVtcGVkIHByb2dyYW0gaXMgYSBrZXJuZWwgcGF0Y2ggd2hpY2gKd2lsbCBkbyB0aGUgZm9sbG93aW5nLgoxKSBNYWtlIGEgbmV3IGtlcm5lbCB0YXNrIHN0cnVjdHVyZQoyKSBSZWxvYWQgYWxsIHRoZSBkdW1wZWQgcGFnZXMgYmFjayBpbnRvIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLgozKSBEbyB0aGUgcmVxdWlyZWQgY2xvY2sgZml4dXBzCjQpIEdldCBhbGwgZmlsZXMgJiBuZXR3b3JrIGNvbm5lY3Rpb25zIGZvciB0aGUgcHJvY2VzcyBiYWNrIGludG8gYW4gaWRlbnRpY2FsIHN0YXRlICggcmVhbGx5IGRpZmZpY3VsdCApLgo1KSBBIGZldyBtb3JlIGRpZmZpY3VsdCB0aGluZ3MgSSBoYXZlbid0IHRob3VnaHQgb2YuCgoKCldoeSBoYXZlIEkgbmV2ZXIgc2VlbiBvbmUgPy4KUHJvYmFibHkgYmVjYXVzZSB5b3UgaGF2ZW4ndCB1c2VkIHRoZSBjb21tYW5kIAp1bGltaXQgLWMgdW5saW1pdGVkIGluIGJhc2gKdG8gYWxsb3cgY29yZSBkdW1wcywgbm93IGRvIAp1bGltaXQgLWEgCnRvIHZlcmlmeSB0aGF0IHRoZSBsaW1pdCB3YXMgYWNjZXB0ZWQuCgpBIHNhbXBsZSBjb3JlIGR1bXAKVG8gY3JlYXRlIHRoaXMgSSdtIGdvaW5nIHRvIGRvCnVsaW1pdCAtYyB1bmxpbWl0ZWQKZ2RiIAp0byBsYXVuY2ggZ2RiIChteSB2aWN0aW0gYXBwLiApIG5vdyBiZSBiYWQgJiBkbyB0aGUgZm9sbG93aW5nIGZyb20gYW5vdGhlciAKdGVsbmV0L3h0ZXJtIHNlc3Npb24gdG8gdGhlIHNhbWUgbWFjaGluZQpwcyAtYXV4IHwgZ3JlcCBnZGIKa2lsbCAtU0lHU0VHViA8Z2RiJ3MgcGlkPgpvciBhbHRlcm5hdGl2ZWx5IHVzZSBraWxsYWxsIC1TSUdTRUdWIGdkYiBpZiB5b3UgaGF2ZSB0aGUga2lsbGFsbCBjb21tYW5kLgpOb3cgbG9vayBhdCB0aGUgY29yZSBkdW1wLgouL2dkYiAuL2dkYiBjb3JlCkRpc3BsYXlzIHRoZSBmb2xsb3dpbmcKR05VIGdkYiA0LjE4CkNvcHlyaWdodCAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgpHREIgaXMgZnJlZSBzb2Z0d2FyZSwgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB5b3UgYXJlCndlbGNvbWUgdG8gY2hhbmdlIGl0IGFuZC9vciBkaXN0cmlidXRlIGNvcGllcyBvZiBpdCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuClR5cGUgInNob3cgY29weWluZyIgdG8gc2VlIHRoZSBjb25kaXRpb25zLgpUaGVyZSBpcyBhYnNvbHV0ZWx5IG5vIHdhcnJhbnR5IGZvciBHREIuICBUeXBlICJzaG93IHdhcnJhbnR5IiBmb3IgZGV0YWlscy4KVGhpcyBHREIgd2FzIGNvbmZpZ3VyZWQgYXMgInMzOTAtaWJtLWxpbnV4Ii4uLgpDb3JlIHdhcyBnZW5lcmF0ZWQgYnkgYC4vZ2RiJy4KUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggc2lnbmFsIDExLCBTZWdtZW50YXRpb24gZmF1bHQuClJlYWRpbmcgc3ltYm9scyBmcm9tIC91c3IvbGliL2xpYm5jdXJzZXMuc28uNC4uLmRvbmUuClJlYWRpbmcgc3ltYm9scyBmcm9tIC9saWIvbGlibS5zby42Li4uZG9uZS4KUmVhZGluZyBzeW1ib2xzIGZyb20gL2xpYi9saWJjLnNvLjYuLi5kb25lLgpSZWFkaW5nIHN5bWJvbHMgZnJvbSAvbGliL2xkLWxpbnV4LnNvLjIuLi5kb25lLgojMCAgMHg0MDEyNmQxYSBpbiByZWFkICgpIGZyb20gL2xpYi9saWJjLnNvLjYKU2V0dGluZyB1cCB0aGUgZW52aXJvbm1lbnQgZm9yIGRlYnVnZ2luZyBnZGIuCkJyZWFrcG9pbnQgMSBhdCAweDRkYzZmODogZmlsZSB1dGlscy5jLCBsaW5lIDQ3MS4KQnJlYWtwb2ludCAyIGF0IDB4NGQ4N2E0OiBmaWxlIHRvcC5jLCBsaW5lIDI2MDkuCih0b3AtZ2RiKSBpbmZvIHN0YWNrCiMwICAweDQwMTI2ZDFhIGluIHJlYWQgKCkgZnJvbSAvbGliL2xpYmMuc28uNgojMSAgMHg1MjhmMjYgaW4gcmxfZ2V0YyAoc3RyZWFtPTB4N2ZmZmZkZTgpIGF0IGlucHV0LmM6NDAyCiMyICAweDUyOGVkMCBpbiBybF9yZWFkX2tleSAoKSBhdCBpbnB1dC5jOjM4MQojMyAgMHg1MTY3ZTYgaW4gcmVhZGxpbmVfaW50ZXJuYWxfY2hhciAoKSBhdCByZWFkbGluZS5jOjQ1NAojNCAgMHg1MTY4ZWUgaW4gcmVhZGxpbmVfaW50ZXJuYWxfY2hhcmxvb3AgKCkgYXQgcmVhZGxpbmUuYzo1MDcKIzUgIDB4NTE2OTJjIGluIHJlYWRsaW5lX2ludGVybmFsICgpIGF0IHJlYWRsaW5lLmM6NTIxCiM2ICAweDUxNjRmZSBpbiByZWFkbGluZSAocHJvbXB0PTB4N2ZmZmY4MTAgIlwxNzeB/4H4eFwxNzeB/4H3gdhcMTc3gf+B+HiBwCIpCiAgICBhdCByZWFkbGluZS5jOjM0OQojNyAgMHg0ZDdhOGEgaW4gY29tbWFuZF9saW5lX2lucHV0IChwcnJvbXB0PTB4NTY0NDIwICIoZ2RiKSAiLCByZXBlYXQ9MSwKICAgIGFubm90YXRpb25fc3VmZml4PTB4NGQ2YjQ0ICJwcm9tcHQiKSBhdCB0b3AuYzoyMDkxCiM4ICAweDRkNmNmMCBpbiBjb21tYW5kX2xvb3AgKCkgYXQgdG9wLmM6MTM0NQojOSAgMHg0ZTI1YmMgaW4gbWFpbiAoYXJnYz0xLCBhcmd2PTB4N2ZmZmZkZjQpIGF0IG1haW4uYzo2MzUKCgpMREQKPT09ClRoaXMgaXMgYSBwcm9ncmFtIHdoaWNoIGxpc3RzIHRoZSBzaGFyZWQgbGlicmFyaWVzIHdoaWNoIGEgbGlicmFyeSBuZWVkcywKTm90ZSB5b3UgYWxzbyBnZXQgdGhlIHJlbG9jYXRpb25zIG9mIHRoZSBzaGFyZWQgbGlicmFyeSB0ZXh0IHNlZ21lbnRzIHdoaWNoCmhlbHAgd2hlbiB1c2luZyBvYmpkdW1wIC0tc291cmNlLgplLmcuCiBsZGQgLi9nZGIKb3V0cHV0cwpsaWJuY3Vyc2VzLnNvLjQgPT4gL3Vzci9saWIvbGlibmN1cnNlcy5zby40ICgweDQwMDE4MDAwKQpsaWJtLnNvLjYgPT4gL2xpYi9saWJtLnNvLjYgKDB4NDAwNWUwMDApCmxpYmMuc28uNiA9PiAvbGliL2xpYmMuc28uNiAoMHg0MDA4NDAwMCkKL2xpYi9sZC1saW51eC5zby4yID0+IC9saWIvbGQtbGludXguc28uMiAoMHg0MDAwMDAwMCkKCgpEZWJ1Z2dpbmcgc2hhcmVkIGxpYnJhcmllcwo9PT09PT09PT09PT09PT09PT09PT09PT09PQpNb3N0IHByb2dyYW1zIHVzZSBzaGFyZWQgbGlicmFyaWVzLCBob3dldmVyIGl0IGNhbiBiZSB2ZXJ5IHBhaW5mdWwKd2hlbiB5b3Ugc2luZ2xlIHN0ZXAgaW5zdHJ1Y3Rpb24gaW50byBhIGZ1bmN0aW9uIGxpa2UgcHJpbnRmIGZvciB0aGUgCmZpcnN0IHRpbWUgJiB5b3UgZW5kIHVwIGluIGZ1bmN0aW9ucyBsaWtlIF9kbF9ydW50aW1lX3Jlc29sdmUgdGhpcyBpcwp0aGUgbGQuc28gZG9pbmcgbGF6eSBiaW5kaW5nLCBsYXp5IGJpbmRpbmcgaXMgYSBjb25jZXB0IGluIEVMRiB3aGVyZSAKc2hhcmVkIGxpYnJhcnkgZnVuY3Rpb25zIGFyZSBub3QgbG9hZGVkIGludG8gbWVtb3J5IHVubGVzcyB0aGV5IGFyZSAKYWN0dWFsbHkgdXNlZCwgZ3JlYXQgZm9yIHNhdmluZyBtZW1vcnkgYnV0IGEgcGFpbiB0byBkZWJ1Zy4KVG8gZ2V0IGFyb3VuZCB0aGlzIGVpdGhlciByZWxpbmsgdGhlIHByb2dyYW0gLXN0YXRpYyBvciBleGl0IGdkYiB0eXBlIApleHBvcnQgTERfQklORF9OT1c9dHJ1ZSB0aGlzIHdpbGwgc3RvcCBsYXp5IGJpbmRpbmcgJiByZXN0YXJ0IHRoZSBnZGInaW5nIAp0aGUgcHJvZ3JhbSBpbiBxdWVzdGlvbi4KIAoKCkRlYnVnZ2luZyBtb2R1bGVzCj09PT09PT09PT09PT09PT09CkFzIG1vZHVsZXMgYXJlIGR5bmFtaWNhbGx5IGxvYWRlZCBpbnRvIHRoZSBrZXJuZWwgdGhlaXIgYWRkcmVzcyBjYW4gYmUKYW55d2hlcmUgdG8gZ2V0IGFyb3VuZCB0aGlzIHVzZSB0aGUgLW0gb3B0aW9uIHdpdGggaW5zbW9kIHRvIGVtaXQgYSBsb2FkCm1hcCB3aGljaCBjYW4gYmUgcGlwZWQgaW50byBhIGZpbGUgaWYgcmVxdWlyZWQuCgpUaGUgcHJvYyBmaWxlIHN5c3RlbQo9PT09PT09PT09PT09PT09PT09PQpXaGF0IGlzIGl0ID8uCkl0IGlzIGEgZmlsZXN5c3RlbSBjcmVhdGVkIGJ5IHRoZSBrZXJuZWwgd2l0aCBmaWxlcyB3aGljaCBhcmUgY3JlYXRlZCBvbiBkZW1hbmQKYnkgdGhlIGtlcm5lbCBpZiByZWFkLCBvciBjYW4gYmUgdXNlZCB0byBtb2RpZnkga2VybmVsIHBhcmFtZXRlcnMsCml0IGlzIGEgcG93ZXJmdWwgY29uY2VwdC4KCmUuZy4KCmNhdCAvcHJvYy9zeXMvbmV0L2lwdjQvaXBfZm9yd2FyZCAKT24gbXkgbWFjaGluZSBvdXRwdXRzIAowIAp0ZWxsaW5nIG1lIGlwX2ZvcndhcmRpbmcgaXMgbm90IG9uIHRvIHN3aXRjaCBpdCBvbiBJIGNhbiBkbwplY2hvIDEgPiAgL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2ZvcndhcmQKY2F0IGl0IGFnYWluCmNhdCAvcHJvYy9zeXMvbmV0L2lwdjQvaXBfZm9yd2FyZCAKT24gbXkgbWFjaGluZSBub3cgb3V0cHV0cwoxCklQIGZvcndhcmRpbmcgaXMgb24uClRoZXJlIGlzIGEgbG90IG9mIHVzZWZ1bCBpbmZvIGluIGhlcmUgYmVzdCBmb3VuZCBieSBnb2luZyBpbiAmIGhhdmluZyBhIGxvb2sgYXJvdW5kLApzbyBJJ2xsIHRha2UgeW91IHRocm91Z2ggc29tZSBlbnRyaWVzIEkgY29uc2lkZXIgaW1wb3J0YW50LgoKQWxsIHRoZSBwcm9jZXNzZXMgcnVubmluZyBvbiB0aGUgbWFjaGluZSBoYXZlIHRoZXJlIG93biBlbnRyeSBkZWZpbmVkIGJ5Ci9wcm9jLzxwaWQ+ClNvIGxldHMgaGF2ZSBhIGxvb2sgYXQgdGhlIGluaXQgcHJvY2VzcwpjZCAvcHJvYy8xCgpjYXQgY21kbGluZQplbWl0cwppbml0IFsyXQoKY2QgL3Byb2MvMS9mZApUaGlzIGNvbnRhaW5zIG51bWVyaWNhbCBlbnRyaWVzIG9mIGFsbCB0aGUgb3BlbiBmaWxlcywKc29tZSBvZiB0aGVzZSB5b3UgY2FuIGNhdCBlLmcuIHN0ZG91dCAoMikKCmNhdCAvcHJvYy8yOS9tYXBzCm9uIG15IG1hY2hpbmUgZW1pdHMKCjAwNDAwMDAwLTAwNDc4MDAwIHIteHAgMDAwMDAwMDAgNWY6MDAgNDEwMyAgICAgICAvYmluL2Jhc2gKMDA0NzgwMDAtMDA0N2UwMDAgcnctcCAwMDA3NzAwMCA1ZjowMCA0MTAzICAgICAgIC9iaW4vYmFzaAowMDQ3ZTAwMC0wMDQ5MjAwMCByd3hwIDAwMDAwMDAwIDAwOjAwIDAKNDAwMDAwMDAtNDAwMTUwMDAgci14cCAwMDAwMDAwMCA1ZjowMCAxNDM4MiAgICAgIC9saWIvbGQtMi4xLjIuc28KNDAwMTUwMDAtNDAwMTYwMDAgcnctcCAwMDAxNDAwMCA1ZjowMCAxNDM4MiAgICAgIC9saWIvbGQtMi4xLjIuc28KNDAwMTYwMDAtNDAwMTcwMDAgcnd4cCAwMDAwMDAwMCAwMDowMCAwCjQwMDE3MDAwLTQwMDE4MDAwIHJ3LXAgMDAwMDAwMDAgMDA6MDAgMAo0MDAxODAwMC00MDAxYjAwMCByLXhwIDAwMDAwMDAwIDVmOjAwIDE0NDM1ICAgICAgL2xpYi9saWJ0ZXJtY2FwLnNvLjIuMC44CjQwMDFiMDAwLTQwMDFjMDAwIHJ3LXAgMDAwMDIwMDAgNWY6MDAgMTQ0MzUgICAgICAvbGliL2xpYnRlcm1jYXAuc28uMi4wLjgKNDAwMWMwMDAtNDAxMGQwMDAgci14cCAwMDAwMDAwMCA1ZjowMCAxNDM4NyAgICAgIC9saWIvbGliYy0yLjEuMi5zbwo0MDEwZDAwMC00MDExMTAwMCBydy1wIDAwMGYwMDAwIDVmOjAwIDE0Mzg3ICAgICAgL2xpYi9saWJjLTIuMS4yLnNvCjQwMTExMDAwLTQwMTE0MDAwIHJ3LXAgMDAwMDAwMDAgMDA6MDAgMAo0MDExNDAwMC00MDExZTAwMCByLXhwIDAwMDAwMDAwIDVmOjAwIDE0NDA4ICAgICAgL2xpYi9saWJuc3NfZmlsZXMtMi4xLjIuc28KNDAxMWUwMDAtNDAxMWYwMDAgcnctcCAwMDAwOTAwMCA1ZjowMCAxNDQwOCAgICAgIC9saWIvbGlibnNzX2ZpbGVzLTIuMS4yLnNvCjdmZmZkMDAwLTgwMDAwMDAwIHJ3eHAgZmZmZmUwMDAgMDA6MDAgMAoKClNob3dpbmcgdXMgdGhlIHNoYXJlZCBsaWJyYXJpZXMgaW5pdCB1c2VzIHdoZXJlIHRoZXkgYXJlIGluIG1lbW9yeQomIG1lbW9yeSBhY2Nlc3MgcGVybWlzc2lvbnMgZm9yIGVhY2ggdmlydHVhbCBtZW1vcnkgYXJlYS4KCi9wcm9jLzEvY3dkIGlzIGEgc29mdGxpbmsgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCi9wcm9jLzEvcm9vdCBpcyB0aGUgcm9vdCBvZiB0aGUgZmlsZXN5c3RlbSBmb3IgdGhpcyBwcm9jZXNzLiAKCi9wcm9jLzEvbWVtIGlzIHRoZSBjdXJyZW50IHJ1bm5pbmcgcHJvY2Vzc2VzIG1lbW9yeSB3aGljaCB5b3UKY2FuIHJlYWQgJiB3cml0ZSB0byBsaWtlIGEgZmlsZS4Kc3RyYWNlIHVzZXMgdGhpcyBzb21ldGltZXMgYXMgaXQgaXMgYSBiaXQgZmFzdGVyIHRoYW4gdGhlCnJhdGhlciBpbmVmZmljZW50IHB0cmFjZSBpbnRlcmZhY2UgZm9yIHBlZWtpbmcgYXQgREFUQS4KCgpjYXQgc3RhdHVzIAoKTmFtZTogICBpbml0ClN0YXRlOiAgUyAoc2xlZXBpbmcpClBpZDogICAgMQpQUGlkOiAgIDAKVWlkOiAgICAwICAgICAgIDAgICAgICAgMCAgICAgICAwCkdpZDogICAgMCAgICAgICAwICAgICAgIDAgICAgICAgMApHcm91cHM6ClZtU2l6ZTogICAgICA0MDgga0IKVm1MY2s6ICAgICAgICAgMCBrQgpWbVJTUzogICAgICAgMjA4IGtCClZtRGF0YTogICAgICAgMjQga0IKVm1TdGs6ICAgICAgICAgOCBrQgpWbUV4ZTogICAgICAgMzY4IGtCClZtTGliOiAgICAgICAgIDAga0IKU2lnUG5kOiAwMDAwMDAwMDAwMDAwMDAwClNpZ0JsazogMDAwMDAwMDAwMDAwMDAwMApTaWdJZ246IDdmZmZmZmZmZDdmMGQ4ZmMKU2lnQ2d0OiAwMDAwMDAwMDI4MGIyNjAzCkNhcEluaDogMDAwMDAwMDBmZmZmZmVmZgpDYXBQcm06IDAwMDAwMDAwZmZmZmZmZmYKQ2FwRWZmOiAwMDAwMDAwMGZmZmZmZWZmCgpVc2VyIFBTVzogICAgMDcwZGUwMDAgODA0MTQxNDYKdGFzazogMDA0YjYwMDAgdHNzOiAwMDRiNjJkOCBrc3A6IDAwNGI3Y2E4IHB0X3JlZ3M6IDAwNGI3ZjY4ClVzZXIgR1BSUzoKMDAwMDA0MDAgIDAwMDAwMDAwICAwMDAwMDAwYiAgN2ZmZmZhOTAKMDAwMDAwMDAgIDAwMDAwMDAwICAwMDAwMDAwMCAgMDA0NWQ5ZjQKMDA0NWNhZmMgIDdmZmZmYTkwICA3ZmZmZmYxOCAgMDA0NWNiMDgKMDAwMTA0MDAgIDgwNDAzOWU4ICA4MDQwM2FmOCAgN2ZmZmY4YjAKVXNlciBBQ1JTOgowMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwICAwMDAwMDAwMAowMDAwMDAwMSAgMDAwMDAwMDAgIDAwMDAwMDAwICAwMDAwMDAwMAowMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwICAwMDAwMDAwMAowMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwICAwMDAwMDAwMApLZXJuZWwgQmFja0NoYWluICBDYWxsQ2hhaW4gICAgQmFja0NoYWluICBDYWxsQ2hhaW4KICAgICAgIDAwNGI3Y2E4ICAgODAwMmJkMGMgICAgIDAwNGI3ZDE4ICAgODAwMmI5MmMKICAgICAgIDAwNGI3ZGI4ICAgODAwNWNkNTAgICAgIDAwNGI3ZTM4ICAgODAwNWQxMmEKICAgICAgIDAwNGI3ZjA4ICAgODAwMTkxMTQgICAgICAgICAgICAgICAgICAgICAKU2hvd2luZyBhbW9uZyBvdGhlciB0aGluZ3MgbWVtb3J5IHVzYWdlICYgc3RhdHVzIG9mIHNvbWUgc2lnbmFscyAmCnRoZSBwcm9jZXNzZXMnZXMgcmVnaXN0ZXJzIGZyb20gdGhlIGtlcm5lbCB0YXNrX3N0cnVjdHVyZQphcyB3ZWxsIGFzIGEgYmFja2NoYWluIHdoaWNoIG1heSBiZSB1c2VmdWwgaWYgYSBwcm9jZXNzIGNyYXNoZXMKaW4gdGhlIGtlcm5lbCBmb3Igc29tZSB1bmtub3duIHJlYXNvbi4KClNvbWUgZHJpdmVyIGRlYnVnZ2luZyB0ZWNobmlxdWVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRlYnVnIGZlYXR1cmUKLS0tLS0tLS0tLS0tLQpTb21lIG9mIG91ciBkcml2ZXJzIG5vdyBzdXBwb3J0IGEgImRlYnVnIGZlYXR1cmUiIGluCi9wcm9jL3MzOTBkYmYgc2VlIHMzOTBkYmYudHh0IGluIHRoZSBsaW51eC9Eb2N1bWVudGF0aW9uIGRpcmVjdG9yeQpmb3IgbW9yZSBpbmZvLgplLmcuIAp0byBzd2l0Y2ggb24gdGhlIGxjcyAiZGVidWcgZmVhdHVyZSIKZWNobyA1ID4gL3Byb2MvczM5MGRiZi9sY3MvbGV2ZWwKJiB0aGVuIGFmdGVyIHRoZSBlcnJvciBvY2N1cnJlZC4KY2F0IC9wcm9jL3MzOTBkYmYvbGNzL3NwcmludGYgPi9sb2dmaWxlCnRoZSBsb2dmaWxlIG5vdyBjb250YWlucyBzb21lIGluZm9ybWF0aW9uIHdoaWNoIG1heSBoZWxwCnRlY2ggc3VwcG9ydCByZXNvbHZlIGEgcHJvYmxlbSBpbiB0aGUgZmllbGQuCgoKCmhpZ2ggbGV2ZWwgZGVidWdnaW5nIG5ldHdvcmsgZHJpdmVycwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KaWZjb25maWcgaXMgYSBxdWl0ZSB1c2VmdWwgY29tbWFuZAppdCBnaXZlcyB0aGUgY3VycmVudCBzdGF0ZSBvZiBuZXR3b3JrIGRyaXZlcnMuCgpJZiB5b3Ugc3VzcGVjdCB5b3VyIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBpcyBkZWFkCm9uZSB3YXkgdG8gY2hlY2sgaXMgdHlwZSAKaWZjb25maWcgPG5ldHdvcmsgZGV2aWNlPiAKZS5nLiB0cjAKWW91IHNob3VsZCBzZWUgc29tZXRoaW5nIGxpa2UKdHIwICAgICAgIExpbmsgZW5jYXA6MTYvNCBNYnBzIFRva2VuIFJpbmcgKE5ldykgIEhXYWRkciAwMDowNDpBQzoyMDo4RTo0OAogICAgICAgICAgaW5ldCBhZGRyOjkuMTY0LjE4NS4xMzIgIEJjYXN0OjkuMTY0LjE5MS4yNTUgIE1hc2s6MjU1LjI1NS4yMjQuMAogICAgICAgICAgVVAgQlJPQURDQVNUIFJVTk5JTkcgTVVMVElDQVNUICBNVFU6MjAwMCAgTWV0cmljOjEKICAgICAgICAgIFJYIHBhY2tldHM6MjQ2MTM0IGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGZyYW1lOjAKICAgICAgICAgIFRYIHBhY2tldHM6NSBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBjYXJyaWVyOjAKICAgICAgICAgIGNvbGxpc2lvbnM6MCB0eHF1ZXVlbGVuOjEwMAoKaWYgdGhlIGRldmljZSBkb2Vzbid0IHNheSB1cAp0cnkKL2V0Yy9yYy5kL2luaXQuZC9uZXR3b3JrIHN0YXJ0IAooIHRoaXMgc3RhcnRzIHRoZSBuZXR3b3JrIHN0YWNrICYgaG9wZWZ1bGx5IGNhbGxzIGlmY29uZmlnIHRyMCB1cCApLgppZmNvbmZpZyBsb29rcyBhdCB0aGUgb3V0cHV0IG9mIC9wcm9jL25ldC9kZXYgJiBwcmVzZW50cyBpdCBpbiBhIG1vcmUgcHJlc2VudGFibGUgZm9ybQpOb3cgcGluZyB0aGUgZGV2aWNlIGZyb20gYSBtYWNoaW5lIGluIHRoZSBzYW1lIHN1Ym5ldC4KaWYgdGhlIFJYIHBhY2tldHMgY291bnQgJiBUWCBwYWNrZXRzIGNvdW50cyBkb24ndCBpbmNyZW1lbnQgeW91IHByb2JhYmx5CmhhdmUgcHJvYmxlbXMuCm5leHQgCmNhdCAvcHJvYy9uZXQvYXJwCkRvIHlvdSBzZWUgYW55IGhhcmR3YXJlIGFkZHJlc3NlcyBpbiB0aGUgY2FjaGUgaWYgbm90IHlvdSBtYXkgaGF2ZSBwcm9ibGVtcy4KTmV4dCB0cnkKcGluZyAtYyA1IDxicm9hZGNhc3RfYWRkcj4gaS5lLiB0aGUgQmNhc3QgZmllbGQgYWJvdmUgaW4gdGhlIG91dHB1dCBvZgppZmNvbmZpZy4gRG8geW91IHNlZSBhbnkgcmVwbGllcyBmcm9tIG1hY2hpbmVzIG90aGVyIHRoYW4gdGhlIGxvY2FsIG1hY2hpbmUKaWYgbm90IHlvdSBtYXkgaGF2ZSBwcm9ibGVtcy4gYWxzbyBpZiB0aGUgVFggcGFja2V0cyBjb3VudCBpbiBpZmNvbmZpZwpoYXNuJ3QgaW5jcmVtZW50ZWQgZWl0aGVyIHlvdSBoYXZlIHNlcmlvdXMgcHJvYmxlbXMgaW4geW91ciBkcml2ZXIgCihlLmcuIHRoZSB0eGJ1c3kgZmllbGQgb2YgdGhlIG5ldHdvcmsgZGV2aWNlIGJlaW5nIHN0dWNrIG9uICkgCm9yIHlvdSBtYXkgaGF2ZSBtdWx0aXBsZSBuZXR3b3JrIGRldmljZXMgY29ubmVjdGVkLgoKCmNoYW5kZXYKLS0tLS0tLQpUaGVyZSBpcyBhIG5ldyBkZXZpY2UgbGF5ZXIgZm9yIGNoYW5uZWwgZGV2aWNlcywgc29tZQpkcml2ZXJzIGUuZy4gbGNzIGFyZSByZWdpc3RlcmVkIHdpdGggdGhpcyBsYXllci4KSWYgdGhlIGRldmljZSB1c2VzIHRoZSBjaGFubmVsIGRldmljZSBsYXllciB5b3UnbGwgYmUKYWJsZSB0byBmaW5kIHdoYXQgaW50ZXJydXB0cyBpdCB1c2VzICYgdGhlIGN1cnJlbnQgc3RhdGUgCm9mIHRoZSBkZXZpY2UuClNlZSB0aGUgbWFucGFnZSBjaGFuZGV2LjggJnR5cGUgY2F0IC9wcm9jL2NoYW5kZXYgZm9yIG1vcmUgaW5mby4KCgoKU3RhcnRpbmcgcG9pbnRzIGZvciBkZWJ1Z2dpbmcgc2NyaXB0aW5nIGxhbmd1YWdlcyBldGMuCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKYmFzaC9zaAoKYmFzaCAteCA8c2NyaXB0bmFtZT4KZS5nLiBiYXNoIC14IC91c3IvYmluL2Jhc2hidWcKZGlzcGxheXMgdGhlIGZvbGxvd2luZyBsaW5lcyBhcyBpdCBleGVjdXRlcyB0aGVtLgorIE1BQ0hJTkU9aTU4NgorIE9TPWxpbnV4LWdudQorIENDPWdjYworIENGTEFHUz0gLURQUk9HUkFNPSdiYXNoJyAtREhPU1RUWVBFPSdpNTg2JyAtRE9TVFlQRT0nbGludXgtZ251JyAtRE1BQ0hUWVBFPSdpNTg2LXBjLWxpbnV4LWdudScgLURTSEVMTCAtREhBVkVfQ09ORklHX0ggICAtSS4gLUkuIC1JLi9saWIgLU8yIC1waXBlCisgUkVMRUFTRT0yLjAxCisgUEFUQ0hMRVZFTD0xCisgUkVMU1RBVFVTPXJlbGVhc2UKKyBNQUNIVFlQRT1pNTg2LXBjLWxpbnV4LWdudSAgIAoKcGVybCAtZCA8c2NyaXB0bmFtZT4gcnVucyB0aGUgcGVybHNjcmlwdCBpbiBhIGZ1bGx5IGludGVyY2F0aXZlIGRlYnVnZ2VyCjxsaWtlIGdkYj4uClR5cGUgJ2gnIGluIHRoZSBkZWJ1Z2dlciBmb3IgaGVscC4KCmZvciBkZWJ1Z2dpbmcgamF2YSB0eXBlCmpkYiA8ZmlsZW5hbWU+IGFub3RoZXIgZnVsbHkgaW50ZXJhY3RpdmUgZ2RiIHN0eWxlIGRlYnVnZ2VyLgomIHR5cGUgPyBpbiB0aGUgZGVidWdnZXIgZm9yIGhlbHAuCgoKCkR1bXB0b29sICYgTGNyYXNoICggbGtjZCApCj09PT09PT09PT09PT09PT09PT09PT09PT09Ck1pY2hhZWwgSG9semhldSAmIG90aGVycyBoZXJlIGF0IElCTSBoYXZlIGEgZmFpcmx5IG1hdHVyZSBwb3J0IG9mIApTR0kncyBsY3Jhc2ggdG9vbCB3aGljaCBhbGxvd3Mgb25lIHRvIGxvb2sgYXQga2VybmVsIHN0cnVjdHVyZXMgaW4gYQpydW5uaW5nIGtlcm5lbC4KCkl0IGFsc28gY29tcGxlbWVudHMgYSB0b29sIGNhbGxlZCBkdW1wdG9vbCB3aGljaCBkdW1wcyBhbGwgdGhlIGtlcm5lbCdzCm1lbW9yeSBwYWdlcyAmIHJlZ2lzdGVycyB0byBlaXRoZXIgYSB0YXBlIG9yIGEgZGlzay4KVGhpcyBjYW4gYmUgdXNlZCBieSB0ZWNoIHN1cHBvcnQgb3IgYW4gYW1iaXRpb3VzIGVuZCB1c2VyIGRvCnBvc3QgbW9ydGVtIGRlYnVnZ2luZyBvZiBhIG1hY2hpbmUgbGlrZSBnZGIgY29yZSBkdW1wcy4KCkdvaW5nIGludG8gaG93IHRvIHVzZSB0aGlzIHRvb2wgaW4gZGV0YWlsIHdpbGwgYmUgZXhwbGFpbmVkCmluIG90aGVyIGRvY3VtZW50YXRpb24gc3VwcGxpZWQgYnkgSUJNIHdpdGggdGhlIHBhdGNoZXMgJiB0aGUgCmxjcmFzaCBob21lcGFnZSBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvbGtjZC8gJiB0aGUgbGNyYXNoIG1hbnBhZ2UuCgpIb3cgdGhleSB3b3JrCi0tLS0tLS0tLS0tLS0KTGNyYXNoIGlzIGEgcGVyZmVjdGx5IG5vcm1hbCBwcm9ncmFtLGhvd2V2ZXIsIGl0IHJlcXVpcmVzIDIgCmFkZGl0aW9uYWwgZmlsZXMsIEtlcm50eXBlcyB3aGljaCBpcyBidWlsdCB1c2luZyBhIHBhdGNoIHRvIHRoZSAKbGludXgga2VybmVsIHNvdXJjZXMgaW4gdGhlIGxpbnV4IHJvb3QgZGlyZWN0b3J5ICYgdGhlIFN5c3RlbS5tYXAuCgpLZXJudHlwZXMgaXMgYW4gYW4gb2JqZWN0ZmlsZSB3aG9zZSBzb2xlIHB1cnBvc2UgaW4gbGlmZQppcyB0byBwcm92aWRlIHN0YWJzIGRlYnVnIGluZm8gdG8gbGNyYXNoLCB0byBkbyB0aGlzCktlcm50eXBlcyBpcyBidWlsdCBmcm9tIGtlcm50eXBlcy5jIHdoaWNoIGp1c3QgaW5jbHVkZXMgdGhlIG1vc3QgY29tbW9ubHkKcmVmZXJlbmNlZCBoZWFkZXIgZmlsZXMgdXNlZCB3aGVuIGRlYnVnZ2luZywgbGNyYXNoIGNhbiB0aGVuIHJlYWQgdGhlCi5zdGFicyBzZWN0aW9uIG9mIHRoaXMgZmlsZS4KCkRlYnVnZ2luZyBhIGxpdmUgc3lzdGVtIGl0IHVzZXMgL2Rldi9tZW0KYWx0ZXJuYXRpdmVseSBmb3IgcG9zdCBtb3J0ZW0gZGVidWdnaW5nIGl0IHVzZXMgdGhlIGRhdGEgCmNvbGxlY3RlZCBieSBkdW1wdG9vbC4KCgoKU3lzUnEKPT09PT0KVGhpcyBpcyBub3cgc3VwcG9ydGVkIGJ5IGxpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlLgpUbyBlbmFibGUgaXQgZG8gY29tcGlsZSB0aGUga2VybmVsIHdpdGggCktlcm5lbCBIYWNraW5nIC0+IE1hZ2ljIFN5c1JxIEtleSBFbmFibGVkCmVjaG8gIjEiID4gL3Byb2Mvc3lzL2tlcm5lbC9zeXNycQphbHNvIHR5cGUKZWNobyAiOCIgPi9wcm9jL3N5cy9rZXJuZWwvcHJpbnRrClRvIG1ha2UgcHJpbnRrIG91dHB1dCBnbyB0byBjb25zb2xlLgpPbiAzOTAgYWxsIGNvbW1hbmRzIGFyZSBwcmVmaXhlZCB3aXRoCl4tCmUuZy4KXi10IHdpbGwgc2hvdyB0YXNrcy4KXi0/IG9yIHNvbWUgdW5rbm93biBjb21tYW5kIHdpbGwgZGlzcGxheSBoZWxwLgpUaGUgc3lzcnEga2V5IHJlYWRpbmcgaXMgdmVyeSBwaWNreSAoIEkgaGF2ZSB0byB0eXBlIHRoZSBrZXlzIGluIGFuCiB4dGVybSBzZXNzaW9uICYgcGFzdGUgdGhlbSAgaW50byB0aGUgeDMyNzAgY29uc29sZSApCiYgaXQgbWF5IGJlIHdpc2UgdG8gcHJlZGVmaW5lIHRoZSBrZXlzIGFzIGRlc2NyaWJlZCBpbiB0aGUgVk0gaGludHMgYWJvdmUKClRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc3luY2luZyBkaXNrcyB1bm1vdW50aW5nICYgcmVib290aW5nCmlmIHRoZSBtYWNoaW5lIGdldHMgcGFydGlhbGx5IGh1bmcuCgpSZWFkIERvY3VtZW50YXRpb24vc3lzcnEudHh0IGZvciBtb3JlIGluZm8KClJlZmVyZW5jZXM6Cj09PT09PT09PT09CkVudGVycHJpc2UgU3lzdGVtcyBBcmNoaXRlY3R1cmUgUmVmZXJlbmNlIFN1bW1hcnkKRW50ZXJwcmlzZSBTeXN0ZW1zIEFyY2hpdGVjdHVyZSBQcmluY2lwbGVzIG9mIE9wZXJhdGlvbgpIYXJ0bXV0IFBlbm5lcnMgczM5MCBzdGFjayBmcmFtZSBzaGVldC4KSUJNIE1haW5mcmFtZSBDaGFubmVsIEF0dGFjaG1lbnQgYSB0ZWNobm9sb2d5IGJyaWVmIGZyb20gYSBDSVNDTyB3ZWJwYWdlClZhcmlvdXMgYml0cyBvZiBtYW4gJiBpbmZvIHBhZ2VzIG9mIExpbnV4LgpMaW51eCAmIEdEQiBzb3VyY2UuClZhcmlvdXMgaW5mbyAmIG1hbiBwYWdlcy4KQ01TIEhlbHAgb24gdHJhY2luZyBjb21tYW5kcy4KTGludXggZm9yIHMvMzkwIEVsZiBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlCkxpbnV4IGZvciB6L1NlcmllcyBFbGYgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZSAoIEJvdGggSGlnaGx5IFJlY29tbWVuZGVkICkKei9BcmNoaXRlY3R1cmUgUHJpbmNpcGxlcyBvZiBPcGVyYXRpb24gU0EyMi03ODMyLTAwCkVudGVycHJpc2UgU3lzdGVtcyBBcmNoaXRlY3R1cmUvMzkwIFJlZmVyZW5jZSBTdW1tYXJ5IFNBMjItNzIwOS0wMSAmIHRoZQpFbnRlcnByaXNlIFN5c3RlbXMgQXJjaGl0ZWN0dXJlLzM5MCBQcmluY2lwbGVzIG9mIE9wZXJhdGlvbiBTQTIyLTcyMDEtMDUKClNwZWNpYWwgVGhhbmtzCj09PT09PT09PT09PT09ClNwZWNpYWwgdGhhbmtzIHRvIE5lYWxlIEZlcmd1c29uIHdobyBtYWludGFpbnMgYSBtdWNoCnByZXR0aWVyIEhUTUwgdmVyc2lvbiBvZiB0aGlzIHBhZ2UgYXQKaHR0cDovL3Blbmd1aW52bS5wcmluY2V0b24uZWR1L25vdGVzLmh0bWwjRGVidWczOTAKQm9iIEdyYWluZ2VyIFN0ZWZhbiBCYWRlciAmIG90aGVycyBmb3IgcmVwb3J0aW5nIGJ1Z3MK