CowPCiN1bml0dGVzdF9pbXBvcnRfcHVibGljX3Byb3RvMy5wcm90bxIYcHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0IiMKE1B1YmxpY0ltcG9ydE1lc3NhZ2USDAoBZRgBIAEoBVIBZUIdqgIaR29vZ2xlLlByb3RvYnVmLlRlc3RQcm90b3NK/g0KBhIEIAAoAQr2DAoBDBIDIAASMsEMIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwoKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogbWV0OgoKICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiBkaXN0cmlidXRpb24uCiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KCiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoyKCBBdXRob3I6IGxpdWppc2lAZ29vZ2xlLmNvbSAoUGhlcmwgTGl1KQoKCAoBAhIDIgAhCggKAQgSAyQANwoJCgIIJRIDJAA3CgoKAgQAEgQmACgBCgoKAwQAARIDJggbCgsKBAQAAgASAycBDQoNCgUEAAIABBIEJwEmHQoMCgUEAAIABRIDJwEGCgwKBQQAAgABEgMnBwgKDAoFBAACAAMSAycLDGIGcHJvdG8zCpITChx1bml0dGVzdF9pbXBvcnRfcHJvdG8zLnByb3RvEhhwcm90b2J1Zl91bml0dGVzdF9pbXBvcnQaI3VuaXR0ZXN0X2ltcG9ydF9wdWJsaWNfcHJvdG8zLnByb3RvIh0KDUltcG9ydE1lc3NhZ2USDAoBZBgBIAEoBVIBZCpZCgpJbXBvcnRFbnVtEhsKF0lNUE9SVF9FTlVNX1VOU1BFQ0lGSUVEEAASDgoKSU1QT1JUX0ZPTxAHEg4KCklNUE9SVF9CQVIQCBIOCgpJTVBPUlRfQkFaEAlCHaoCGkdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zSo8RCgYSBCQANgEKnw4KAQwSAyQAEjLBDCBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKIG1ldDoKCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogZGlzdHJpYnV0aW9uLgogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KMtABIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQogIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgoKIEEgcHJvdG8gZmlsZSB3aGljaCBpcyBpbXBvcnRlZCBieSB1bml0dGVzdF9wcm90bzMucHJvdG8gdG8gdGVzdCBpbXBvcnRpbmcuCgoICgECEgMmACEKCAoBCBIDKAA3CgkKAgglEgMoADcKHwoCAwASAysANBoUIFRlc3QgcHVibGljIGltcG9ydAoKCQoCCgASAysHDQoKCgIEABIELQAvAQoKCgMEAAESAy0IFQoLCgQEAAIAEgMuAg4KDQoFBAACAAQSBC4CLRcKDAoFBAACAAUSAy4CBwoMCgUEAAIAARIDLggJCgwKBQQAAgADEgMuDA0KCgoCBQASBDEANgEKCgoDBQABEgMxBQ8KCwoEBQACABIDMgIeCgwKBQUAAgABEgMyAhkKDAoFBQACAAISAzIcHQoLCgQFAAIBEgMzAhEKDAoFBQACAQESAzMCDAoMCgUFAAIBAhIDMw8QCgsKBAUAAgISAzQCEQoMCgUFAAICARIDNAIMCgwKBQUAAgICEgM0DxAKCwoEBQACAxIDNQIRCgwKBQUAAgMBEgM1AgwKDAoFBQACAwISAzUPEFAAYgZwcm90bzMKncMBChV1bml0dGVzdF9wcm90bzMucHJvdG8SEnByb3RvYnVmX3VuaXR0ZXN0MxocdW5pdHRlc3RfaW1wb3J0X3Byb3RvMy5wcm90byKrFgoMVGVzdEFsbFR5cGVzEiEKDHNpbmdsZV9pbnQzMhgBIAEoBVILc2luZ2xlSW50MzISIQoMc2luZ2xlX2ludDY0GAIgASgDUgtzaW5nbGVJbnQ2NBIjCg1zaW5nbGVfdWludDMyGAMgASgNUgxzaW5nbGVVaW50MzISIwoNc2luZ2xlX3VpbnQ2NBgEIAEoBFIMc2luZ2xlVWludDY0EiMKDXNpbmdsZV9zaW50MzIYBSABKBFSDHNpbmdsZVNpbnQzMhIjCg1zaW5nbGVfc2ludDY0GAYgASgSUgxzaW5nbGVTaW50NjQSJQoOc2luZ2xlX2ZpeGVkMzIYByABKAdSDXNpbmdsZUZpeGVkMzISJQoOc2luZ2xlX2ZpeGVkNjQYCCABKAZSDXNpbmdsZUZpeGVkNjQSJwoPc2luZ2xlX3NmaXhlZDMyGAkgASgPUg5zaW5nbGVTZml4ZWQzMhInCg9zaW5nbGVfc2ZpeGVkNjQYCiABKBBSDnNpbmdsZVNmaXhlZDY0EiEKDHNpbmdsZV9mbG9hdBgLIAEoAlILc2luZ2xlRmxvYXQSIwoNc2luZ2xlX2RvdWJsZRgMIAEoAVIMc2luZ2xlRG91YmxlEh8KC3NpbmdsZV9ib29sGA0gASgIUgpzaW5nbGVCb29sEiMKDXNpbmdsZV9zdHJpbmcYDiABKAlSDHNpbmdsZVN0cmluZxIhCgxzaW5nbGVfYnl0ZXMYDyABKAxSC3NpbmdsZUJ5dGVzEmIKFXNpbmdsZV9uZXN0ZWRfbWVzc2FnZRgSIAEoCzIuLnByb3RvYnVmX3VuaXR0ZXN0My5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZVITc2luZ2xlTmVzdGVkTWVzc2FnZRJYChZzaW5nbGVfZm9yZWlnbl9tZXNzYWdlGBMgASgLMiIucHJvdG9idWZfdW5pdHRlc3QzLkZvcmVpZ25NZXNzYWdlUhRzaW5nbGVGb3JlaWduTWVzc2FnZRJbChVzaW5nbGVfaW1wb3J0X21lc3NhZ2UYFCABKAsyJy5wcm90b2J1Zl91bml0dGVzdF9pbXBvcnQuSW1wb3J0TWVzc2FnZVITc2luZ2xlSW1wb3J0TWVzc2FnZRJZChJzaW5nbGVfbmVzdGVkX2VudW0YFSABKA4yKy5wcm90b2J1Zl91bml0dGVzdDMuVGVzdEFsbFR5cGVzLk5lc3RlZEVudW1SEHNpbmdsZU5lc3RlZEVudW0STwoTc2luZ2xlX2ZvcmVpZ25fZW51bRgWIAEoDjIfLnByb3RvYnVmX3VuaXR0ZXN0My5Gb3JlaWduRW51bVIRc2luZ2xlRm9yZWlnbkVudW0SUgoSc2luZ2xlX2ltcG9ydF9lbnVtGBcgASgOMiQucHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydEVudW1SEHNpbmdsZUltcG9ydEVudW0Sbgocc2luZ2xlX3B1YmxpY19pbXBvcnRfbWVzc2FnZRgaIAEoCzItLnByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5QdWJsaWNJbXBvcnRNZXNzYWdlUhlzaW5nbGVQdWJsaWNJbXBvcnRNZXNzYWdlEiUKDnJlcGVhdGVkX2ludDMyGB8gAygFUg1yZXBlYXRlZEludDMyEiUKDnJlcGVhdGVkX2ludDY0GCAgAygDUg1yZXBlYXRlZEludDY0EicKD3JlcGVhdGVkX3VpbnQzMhghIAMoDVIOcmVwZWF0ZWRVaW50MzISJwoPcmVwZWF0ZWRfdWludDY0GCIgAygEUg5yZXBlYXRlZFVpbnQ2NBInCg9yZXBlYXRlZF9zaW50MzIYIyADKBFSDnJlcGVhdGVkU2ludDMyEicKD3JlcGVhdGVkX3NpbnQ2NBgkIAMoElIOcmVwZWF0ZWRTaW50NjQSKQoQcmVwZWF0ZWRfZml4ZWQzMhglIAMoB1IPcmVwZWF0ZWRGaXhlZDMyEikKEHJlcGVhdGVkX2ZpeGVkNjQYJiADKAZSD3JlcGVhdGVkRml4ZWQ2NBIrChFyZXBlYXRlZF9zZml4ZWQzMhgnIAMoD1IQcmVwZWF0ZWRTZml4ZWQzMhIrChFyZXBlYXRlZF9zZml4ZWQ2NBgoIAMoEFIQcmVwZWF0ZWRTZml4ZWQ2NBIlCg5yZXBlYXRlZF9mbG9hdBgpIAMoAlINcmVwZWF0ZWRGbG9hdBInCg9yZXBlYXRlZF9kb3VibGUYKiADKAFSDnJlcGVhdGVkRG91YmxlEiMKDXJlcGVhdGVkX2Jvb2wYKyADKAhSDHJlcGVhdGVkQm9vbBInCg9yZXBlYXRlZF9zdHJpbmcYLCADKAlSDnJlcGVhdGVkU3RyaW5nEiUKDnJlcGVhdGVkX2J5dGVzGC0gAygMUg1yZXBlYXRlZEJ5dGVzEmYKF3JlcGVhdGVkX25lc3RlZF9tZXNzYWdlGDAgAygLMi4ucHJvdG9idWZfdW5pdHRlc3QzLlRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlUhVyZXBlYXRlZE5lc3RlZE1lc3NhZ2USXAoYcmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlGDEgAygLMiIucHJvdG9idWZfdW5pdHRlc3QzLkZvcmVpZ25NZXNzYWdlUhZyZXBlYXRlZEZvcmVpZ25NZXNzYWdlEl8KF3JlcGVhdGVkX2ltcG9ydF9tZXNzYWdlGDIgAygLMicucHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydE1lc3NhZ2VSFXJlcGVhdGVkSW1wb3J0TWVzc2FnZRJdChRyZXBlYXRlZF9uZXN0ZWRfZW51bRgzIAMoDjIrLnByb3RvYnVmX3VuaXR0ZXN0My5UZXN0QWxsVHlwZXMuTmVzdGVkRW51bVIScmVwZWF0ZWROZXN0ZWRFbnVtElMKFXJlcGVhdGVkX2ZvcmVpZ25fZW51bRg0IAMoDjIfLnByb3RvYnVmX3VuaXR0ZXN0My5Gb3JlaWduRW51bVITcmVwZWF0ZWRGb3JlaWduRW51bRJWChRyZXBlYXRlZF9pbXBvcnRfZW51bRg1IAMoDjIkLnByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRFbnVtUhJyZXBlYXRlZEltcG9ydEVudW0ScgoecmVwZWF0ZWRfcHVibGljX2ltcG9ydF9tZXNzYWdlGDYgAygLMi0ucHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LlB1YmxpY0ltcG9ydE1lc3NhZ2VSG3JlcGVhdGVkUHVibGljSW1wb3J0TWVzc2FnZRIjCgxvbmVvZl91aW50MzIYbyABKA1IAFILb25lb2ZVaW50MzISYgoUb25lb2ZfbmVzdGVkX21lc3NhZ2UYcCABKAsyLi5wcm90b2J1Zl91bml0dGVzdDMuVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2VIAFISb25lb2ZOZXN0ZWRNZXNzYWdlEiMKDG9uZW9mX3N0cmluZxhxIAEoCUgAUgtvbmVvZlN0cmluZxIhCgtvbmVvZl9ieXRlcxhyIAEoDEgAUgpvbmVvZkJ5dGVzGh8KDU5lc3RlZE1lc3NhZ2USDgoCYmIYASABKAVSAmJiIlYKCk5lc3RlZEVudW0SGwoXTkVTVEVEX0VOVU1fVU5TUEVDSUZJRUQQABIHCgNGT08QARIHCgNCQVIQAhIHCgNCQVoQAxIQCgNORUcQ////////////AUINCgtvbmVvZl9maWVsZCLdAQoSTmVzdGVkVGVzdEFsbFR5cGVzEjwKBWNoaWxkGAEgASgLMiYucHJvdG9idWZfdW5pdHRlc3QzLk5lc3RlZFRlc3RBbGxUeXBlc1IFY2hpbGQSOgoHcGF5bG9hZBgCIAEoCzIgLnByb3RvYnVmX3VuaXR0ZXN0My5UZXN0QWxsVHlwZXNSB3BheWxvYWQSTQoOcmVwZWF0ZWRfY2hpbGQYAyADKAsyJi5wcm90b2J1Zl91bml0dGVzdDMuTmVzdGVkVGVzdEFsbFR5cGVzUg1yZXBlYXRlZENoaWxkIkUKFFRlc3REZXByZWNhdGVkRmllbGRzEi0KEGRlcHJlY2F0ZWRfaW50MzIYASABKAVCAhgBUg9kZXByZWNhdGVkSW50MzIiHgoORm9yZWlnbk1lc3NhZ2USDAoBYxgBIAEoBVIBYyIwChJUZXN0UmVzZXJ2ZWRGaWVsZHNKBAgCEANKBAgPEBBKBAgJEAxSA2JhclIDYmF6ImoKEVRlc3RGb3JlaWduTmVzdGVkElUKDmZvcmVpZ25fbmVzdGVkGAEgASgLMi4ucHJvdG9idWZfdW5pdHRlc3QzLlRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlUg1mb3JlaWduTmVzdGVkIjsKGFRlc3RSZWFsbHlMYXJnZVRhZ051bWJlchIMCgFhGAEgASgFUgFhEhEKAmJiGP///38gASgFUgJiYiJcChRUZXN0UmVjdXJzaXZlTWVzc2FnZRI2CgFhGAEgASgLMigucHJvdG9idWZfdW5pdHRlc3QzLlRlc3RSZWN1cnNpdmVNZXNzYWdlUgFhEgwKAWkYAiABKAVSAWkiUAoUVGVzdE11dHVhbFJlY3Vyc2lvbkESOAoCYmIYASABKAsyKC5wcm90b2J1Zl91bml0dGVzdDMuVGVzdE11dHVhbFJlY3Vyc2lvbkJSAmJiInUKFFRlc3RNdXR1YWxSZWN1cnNpb25CEjYKAWEYASABKAsyKC5wcm90b2J1Zl91bml0dGVzdDMuVGVzdE11dHVhbFJlY3Vyc2lvbkFSAWESJQoOb3B0aW9uYWxfaW50MzIYAiABKAVSDW9wdGlvbmFsSW50MzIiVAoSVGVzdEVudW1BbGxvd0FsaWFzEj4KBXZhbHVlGAEgASgOMigucHJvdG9idWZfdW5pdHRlc3QzLlRlc3RFbnVtV2l0aER1cFZhbHVlUgV2YWx1ZSL7AwoXVGVzdENhbWVsQ2FzZUZpZWxkTmFtZXMSJgoOUHJpbWl0aXZlRmllbGQYASABKAVSDlByaW1pdGl2ZUZpZWxkEiAKC1N0cmluZ0ZpZWxkGAIgASgJUgtTdHJpbmdGaWVsZBI9CglFbnVtRmllbGQYAyABKA4yHy5wcm90b2J1Zl91bml0dGVzdDMuRm9yZWlnbkVudW1SCUVudW1GaWVsZBJGCgxNZXNzYWdlRmllbGQYBCABKAsyIi5wcm90b2J1Zl91bml0dGVzdDMuRm9yZWlnbk1lc3NhZ2VSDE1lc3NhZ2VGaWVsZBI2ChZSZXBlYXRlZFByaW1pdGl2ZUZpZWxkGAcgAygFUhZSZXBlYXRlZFByaW1pdGl2ZUZpZWxkEjAKE1JlcGVhdGVkU3RyaW5nRmllbGQYCCADKAlSE1JlcGVhdGVkU3RyaW5nRmllbGQSTQoRUmVwZWF0ZWRFbnVtRmllbGQYCSADKA4yHy5wcm90b2J1Zl91bml0dGVzdDMuRm9yZWlnbkVudW1SEVJlcGVhdGVkRW51bUZpZWxkElYKFFJlcGVhdGVkTWVzc2FnZUZpZWxkGAogAygLMiIucHJvdG9idWZfdW5pdHRlc3QzLkZvcmVpZ25NZXNzYWdlUhRSZXBlYXRlZE1lc3NhZ2VGaWVsZCL/AQoSVGVzdEZpZWxkT3JkZXJpbmdzEhsKCW15X3N0cmluZxgLIAEoCVIIbXlTdHJpbmcSFQoGbXlfaW50GAEgASgDUgVteUludBIZCghteV9mbG9hdBhlIAEoAlIHbXlGbG9hdBJpChVzaW5nbGVfbmVzdGVkX21lc3NhZ2UYyAEgASgLMjQucHJvdG9idWZfdW5pdHRlc3QzLlRlc3RGaWVsZE9yZGVyaW5ncy5OZXN0ZWRNZXNzYWdlUhNzaW5nbGVOZXN0ZWRNZXNzYWdlGi8KDU5lc3RlZE1lc3NhZ2USDgoCb28YAiABKANSAm9vEg4KAmJiGAEgASgFUgJiYiJYChFTcGFyc2VFbnVtTWVzc2FnZRJDCgtzcGFyc2VfZW51bRgBIAEoDjIiLnByb3RvYnVmX3VuaXR0ZXN0My5UZXN0U3BhcnNlRW51bVIKc3BhcnNlRW51bSIfCglPbmVTdHJpbmcSEgoEZGF0YRgBIAEoCVIEZGF0YSIgCgpNb3JlU3RyaW5nEhIKBGRhdGEYASADKAlSBGRhdGEiHgoIT25lQnl0ZXMSEgoEZGF0YRgBIAEoDFIEZGF0YSIfCglNb3JlQnl0ZXMSEgoEZGF0YRgBIAEoDFIEZGF0YSIiCgxJbnQzMk1lc3NhZ2USEgoEZGF0YRgBIAEoBVIEZGF0YSIjCg1VaW50MzJNZXNzYWdlEhIKBGRhdGEYASABKA1SBGRhdGEiIgoMSW50NjRNZXNzYWdlEhIKBGRhdGEYASABKANSBGRhdGEiIwoNVWludDY0TWVzc2FnZRISCgRkYXRhGAEgASgEUgRkYXRhIiEKC0Jvb2xNZXNzYWdlEhIKBGRhdGEYASABKAhSBGRhdGEikwEKCVRlc3RPbmVvZhIZCgdmb29faW50GAEgASgFSABSBmZvb0ludBIfCgpmb29fc3RyaW5nGAIgASgJSABSCWZvb1N0cmluZxJDCgtmb29fbWVzc2FnZRgDIAEoCzIgLnByb3RvYnVmX3VuaXR0ZXN0My5UZXN0QWxsVHlwZXNIAFIKZm9vTWVzc2FnZUIFCgNmb28i7gQKD1Rlc3RQYWNrZWRUeXBlcxIlCgxwYWNrZWRfaW50MzIYWiADKAVCAhABUgtwYWNrZWRJbnQzMhIlCgxwYWNrZWRfaW50NjQYWyADKANCAhABUgtwYWNrZWRJbnQ2NBInCg1wYWNrZWRfdWludDMyGFwgAygNQgIQAVIMcGFja2VkVWludDMyEicKDXBhY2tlZF91aW50NjQYXSADKARCAhABUgxwYWNrZWRVaW50NjQSJwoNcGFja2VkX3NpbnQzMhheIAMoEUICEAFSDHBhY2tlZFNpbnQzMhInCg1wYWNrZWRfc2ludDY0GF8gAygSQgIQAVIMcGFja2VkU2ludDY0EikKDnBhY2tlZF9maXhlZDMyGGAgAygHQgIQAVINcGFja2VkRml4ZWQzMhIpCg5wYWNrZWRfZml4ZWQ2NBhhIAMoBkICEAFSDXBhY2tlZEZpeGVkNjQSKwoPcGFja2VkX3NmaXhlZDMyGGIgAygPQgIQAVIOcGFja2VkU2ZpeGVkMzISKwoPcGFja2VkX3NmaXhlZDY0GGMgAygQQgIQAVIOcGFja2VkU2ZpeGVkNjQSJQoMcGFja2VkX2Zsb2F0GGQgAygCQgIQAVILcGFja2VkRmxvYXQSJwoNcGFja2VkX2RvdWJsZRhlIAMoAUICEAFSDHBhY2tlZERvdWJsZRIjCgtwYWNrZWRfYm9vbBhmIAMoCEICEAFSCnBhY2tlZEJvb2wSRAoLcGFja2VkX2VudW0YZyADKA4yHy5wcm90b2J1Zl91bml0dGVzdDMuRm9yZWlnbkVudW1CAhABUgpwYWNrZWRFbnVtIqgFChFUZXN0VW5wYWNrZWRUeXBlcxIpCg51bnBhY2tlZF9pbnQzMhhaIAMoBUICEABSDXVucGFja2VkSW50MzISKQoOdW5wYWNrZWRfaW50NjQYWyADKANCAhAAUg11bnBhY2tlZEludDY0EisKD3VucGFja2VkX3VpbnQzMhhcIAMoDUICEABSDnVucGFja2VkVWludDMyEisKD3VucGFja2VkX3VpbnQ2NBhdIAMoBEICEABSDnVucGFja2VkVWludDY0EisKD3VucGFja2VkX3NpbnQzMhheIAMoEUICEABSDnVucGFja2VkU2ludDMyEisKD3VucGFja2VkX3NpbnQ2NBhfIAMoEkICEABSDnVucGFja2VkU2ludDY0Ei0KEHVucGFja2VkX2ZpeGVkMzIYYCADKAdCAhAAUg91bnBhY2tlZEZpeGVkMzISLQoQdW5wYWNrZWRfZml4ZWQ2NBhhIAMoBkICEABSD3VucGFja2VkRml4ZWQ2NBIvChF1bnBhY2tlZF9zZml4ZWQzMhhiIAMoD0ICEABSEHVucGFja2VkU2ZpeGVkMzISLwoRdW5wYWNrZWRfc2ZpeGVkNjQYYyADKBBCAhAAUhB1bnBhY2tlZFNmaXhlZDY0EikKDnVucGFja2VkX2Zsb2F0GGQgAygCQgIQAFINdW5wYWNrZWRGbG9hdBIrCg91bnBhY2tlZF9kb3VibGUYZSADKAFCAhAAUg51bnBhY2tlZERvdWJsZRInCg11bnBhY2tlZF9ib29sGGYgAygIQgIQAFIMdW5wYWNrZWRCb29sEkgKDXVucGFja2VkX2VudW0YZyADKA4yHy5wcm90b2J1Zl91bml0dGVzdDMuRm9yZWlnbkVudW1CAhAAUgx1bnBhY2tlZEVudW0inwIKI1Rlc3RSZXBlYXRlZFNjYWxhckRpZmZlcmVudFRhZ1NpemVzEikKEHJlcGVhdGVkX2ZpeGVkMzIYDCADKAdSD3JlcGVhdGVkRml4ZWQzMhIlCg5yZXBlYXRlZF9pbnQzMhgNIAMoBVINcmVwZWF0ZWRJbnQzMhIqChByZXBlYXRlZF9maXhlZDY0GP4PIAMoBlIPcmVwZWF0ZWRGaXhlZDY0EiYKDnJlcGVhdGVkX2ludDY0GP8PIAMoA1INcmVwZWF0ZWRJbnQ2NBInCg5yZXBlYXRlZF9mbG9hdBj+/w8gAygCUg1yZXBlYXRlZEZsb2F0EikKD3JlcGVhdGVkX3VpbnQ2NBj//w8gAygEUg5yZXBlYXRlZFVpbnQ2NCIrChtUZXN0Q29tbWVudEluamVjdGlvbk1lc3NhZ2USDAoBYRgBIAEoCVIBYSIMCgpGb29SZXF1ZXN0Ig0KC0Zvb1Jlc3BvbnNlIhIKEEZvb0NsaWVudE1lc3NhZ2UiEgoQRm9vU2VydmVyTWVzc2FnZSIMCgpCYXJSZXF1ZXN0Ig0KC0JhclJlc3BvbnNlIhIKEFRlc3RFbXB0eU1lc3NhZ2UiggEKDkNvbW1lbnRNZXNzYWdlEhIKBHRleHQYASABKAlSBHRleHQaNwoUTmVzdGVkQ29tbWVudE1lc3NhZ2USHwoLbmVzdGVkX3RleHQYASABKAlSCm5lc3RlZFRleHQiIwoRTmVzdGVkQ29tbWVudEVudW0SDgoKWkVST19WQUxVRRAAKlkKC0ZvcmVpZ25FbnVtEhcKE0ZPUkVJR05fVU5TUEVDSUZJRUQQABIPCgtGT1JFSUdOX0ZPTxAEEg8KC0ZPUkVJR05fQkFSEAUSDwoLRk9SRUlHTl9CQVoQBip1ChRUZXN0RW51bVdpdGhEdXBWYWx1ZRIoCiRURVNUX0VOVU1fV0lUSF9EVVBfVkFMVUVfVU5TUEVDSUZJRUQQABIICgRGT08xEAESCAoEQkFSMRACEgcKA0JBWhADEggKBEZPTzIQARIICgRCQVIyEAIaAhABKp0BCg5UZXN0U3BhcnNlRW51bRIgChxURVNUX1NQQVJTRV9FTlVNX1VOU1BFQ0lGSUVEEAASDAoIU1BBUlNFX0EQexIOCghTUEFSU0VfQhCm5wMSDwoIU1BBUlNFX0MQsrGABhIVCghTUEFSU0VfRBDx//////////8BEhUKCFNQQVJTRV9FELTe/P///////wESDAoIU1BBUlNFX0cQAiodCgtDb21tZW50RW51bRIOCgpaRVJPX1ZBTFVFEAAynQEKC1Rlc3RTZXJ2aWNlEkYKA0ZvbxIeLnByb3RvYnVmX3VuaXR0ZXN0My5Gb29SZXF1ZXN0Gh8ucHJvdG9idWZfdW5pdHRlc3QzLkZvb1Jlc3BvbnNlEkYKA0JhchIeLnByb3RvYnVmX3VuaXR0ZXN0My5CYXJSZXF1ZXN0Gh8ucHJvdG9idWZfdW5pdHRlc3QzLkJhclJlc3BvbnNlQixCDVVuaXR0ZXN0UHJvdG+qAhpHb29nbGUuUHJvdG9idWYuVGVzdFByb3Rvc0qNhwEKBxIFJACZAwEK/w0KAQwSAyQAEjLBDCBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKIG1ldDoKCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogZGlzdHJpYnV0aW9uLgogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KMrABIEF1dGhvcjoga2VudG9uQGdvb2dsZS5jb20gKEtlbnRvbiBWYXJkYSkKICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQogIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgoKIEEgcHJvdG8gZmlsZSB3ZSB3aWxsIHVzZSBmb3IgdW5pdCB0ZXN0aW5nLgoKCAoBCBIDJgA3CgkKAgglEgMmADcKCAoBCBIDKgAuCmAKAggIEgMqAC4aVSBPbmx5IHByZXNlbnQgc28gd2UgY2FuIHRlc3QgdGhhdCB3ZSBjYW4gcmVhZCBpdCAoYXMgYW4gZXhhbXBsZQogb2YgYSBub24tQyMgb3B0aW9uKQoKCQoCAwASAywAJgoICgECEgMuABsKXAoCBAASBTIAggEBGk8gVGhpcyBwcm90byBpbmNsdWRlcyBldmVyeSB0eXBlIG9mIGZpZWxkIGluIGJvdGggc2luZ3VsYXIgYW5kIHJlcGVhdGVkCiBmb3Jtcy4KCgoKAwQAARIDMggUCgwKBAQAAwASBDMCOAMKDAoFBAADAAESAzMKFwrjAQoGBAADAAIAEgM3BBEa0wEgVGhlIGZpZWxkIG5hbWUgImIiIGZhaWxzIHRvIGNvbXBpbGUgaW4gcHJvdG8xIGJlY2F1c2UgaXQgY29uZmxpY3RzIHdpdGgKIGEgbG9jYWwgdmFyaWFibGUgbmFtZWQgImIiIGluIG9uZSBvZiB0aGUgZ2VuZXJhdGVkIG1ldGhvZHMuICBEb2guCiBUaGlzIGZpbGUgbmVlZHMgdG8gY29tcGlsZSBpbiBwcm90bzEgdG8gdGVzdCBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eS4KCg8K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sQIUIAoNCgUEGAIAAxIEsQInKQoNCgUEGAIACBIEsQIqOQoOCgYEGAIACAISBLECKzgKDAoEBBgCARIEsgICOgoNCgUEGAIBBBIEsgICCgoNCgUEGAIBBRIEsgIOEwoNCgUEGAIBARIEsgIUIAoNCgUEGAIBAxIEsgInKQoNCgUEGAIBCBIEsgIqOQoOCgYEGAIBCAISBLICKzgKDAoEBBgCAhIEswICOgoNCgUEGAICBBIEswICCgoNCgUEGAICBRIEswINEwoNCgUEGAICARIEswIUIQoNCgUEGAICAxIEswInKQoNCgUEGAICCBIEswIqOQoOCgYEGAICCAISBLMCKzgKDAoEBBgCAxIEtAICOgoNCgUEGAIDBBIEtAICCgoNCgUEGAIDBRIEtAINEwoNCgUEGAIDARIEtAIUIQoNCgUEGAIDAxIEtAInKQoNCgUEGAIDCBIEtAIqOQoOCgYEGAIDCAISBLQCKzgKDAoEBBgCBBIEtQICOgoNCgUEGAIEBBIEtQICCgoNCgUEGAIEBRIEtQINEwoNCgUEGAIEARIEtQIUIQoNCgUEGAIEAxIEtQInKQoNCgUEGAIECBIEtQIqOQoOCgYEGAIECAISBLUCKzgKDAoEBBgCBRIEtgICOgoNCgUEGAIFBBIEtgICCgoNCgUEGAIFBRIEtgINEwoNCgUEGAIFARIEtgIUIQoNCgUEGAIFAxIEtgInKQoNCgUEGAIFCBIEtgIqOQoOCgYEGAIFCAISBLYCKzgKDAoEBBgCBhIEtwICOgoNCgUEGAIGBBIEtwICCgoNCgUEGAIGBRIEtwIMEwoNCgUEGAIGARIEtwIUIgoNCgUEGAIGAxIEtwInKQoNCgUEGAIGCBIEtwIqOQoOCgYEGAIGCAISBLcCKzgKDAoEBBgCBxIEuAICOgoNCgUEGAIHBBIEuAICCgoNCgUEGAIHBRIEuAIMEwoNCgUEGAIHARIEuAIUIgoNCgUEGAIHAxIEuAInKQoNCgUEGAIHCBIEuAIqOQoOCgYEGAIHCAISBLgCKzgKDAoEBBgCCBIEuQICOgoNCgUEGAIIBBIEuQICCgoNCgUEGAIIBRIEuQILEwoNCgUEGAIIARIEuQIUIwoNCgUEGAIIAxIEuQInKQoNCgUEGAIICBIEuQIqOQoOCgYEGAIICAISBLkCKzgKDAoEBBgCCRIEugICOgoNCgUEGAIJBBIEugICCgoNCgUEGAIJBRIEugILEwoNCgUEGAIJARIEugIUIwoNCgUEGAIJAxIEugInKQoNCgUEGAIJCBIEugIqOQoOCgYEGAIJCAISBLoCKzgKDAoEBBgCChIEuwICOgoNCgUEGAIKBBIEuwICCgoNCgUEGAIKBRIEuwIOEwoNCgUEGAIKARIEuwIUIAoNCgUEGAIKAxIEuwImKQoNCgUEGAIKCBIEuwIqOQoOCgYEGAIKCAISBLsCKzgKDAoEBBgCCxIEvAICOgoNCgUEGAILBBIEvAICCgoNCgUEGAILBRIEvAINEwoNCgUEGAILARIEvAIUIQoNCgUEGAILAxIEvAImKQoNCgUEGAILCBIEvAIqOQoOCgYEGAILCAISBLwCKzgKDAoEBBgCDBIEvQICOgoNCgUEGAIMBBIEvQICCgoNCgUEGAIMBRIEvQIPEwoNCgUEGAIMARIEvQIUHwoNCgUEGAIMAxIEvQImKQoNCgUEGAIMCBIEvQIqOQoOCgYEGAIMCAISBL0CKzgKDAoEBBgCDRIEvgICOgoNCgUEGAINBBIEvgICCgoNCgUEGAINBhIEvgILFgoNCgUEGAINARIEvgIXIgoNCgUEGAINAxIEvgImKQoNCgUEGAINCBIEvgIqOQoOCgYEGAINCAISBL4CKzgKjQEKAgQZEgbDAgDSAgEafyBBIG1lc3NhZ2Ugd2l0aCB0aGUgc2FtZSBmaWVsZHMgYXMgVGVzdFBhY2tlZFR5cGVzLCBidXQgd2l0aG91dCBwYWNraW5nLiBVc2VkCiB0byB0ZXN0IHBhY2tlZCA8LT4gdW5wYWNrZWQgd2lyZSBjb21wYXRpYmlsaXR5LgoKCwoDBBkBEgTDAggZCgwKBAQZAgASBMQCAj0KDQoFBBkCAAQSBMQCAgoKDQoFBBkCAAUSBMQCDhMKDQoFBBkCAAESBMQCFCIKDQoFBBkCAAMSBMQCKSsKDQoFBBkCAAgSBMQCLDwKDgoGBBkCAAgCEgTEAi07CgwKBAQZAgESBMUCAj0KDQoFBBkCAQQSBMUCAgoKDQoFBBkCAQUSBMUCDhMKDQoFBBkCAQESBMUCFCIKDQoFBBkCAQMSBMUCKSsKDQoFBBkCAQgSBMUCLDwKDgoGBBkCAQgCEgTFAi07CgwKBAQZAgISBMYCAj0KDQoFBBkCAgQSBMYCAgoKDQoFBBkCAgUSBMYCDRMKDQoFBBkCAgESBMYCFCMKDQoFBBkCAgMSBMYCKSsKDQoFBBkCAggSBMYCLDwKDgoGBBkCAggCEgTGAi07CgwKBAQZAgMSBMcCAj0KDQoFBBkCAwQSBMcCAgoKDQoFBBkCAwUSBMcCDRMKDQoFBBkCAwESBMcCFCMKDQoFBBkCAwMSBMcCKSsKDQoFBBkCAwgSBMcCLDwKDgoGBBkCAwgCEgTHAi07CgwKBAQZAgQSBMgCAj0KDQoFBBkCBAQSBMgCAgoKDQoFBBkCBAUSBMgCDRMKDQoFBBkCBAESBMgCFCMKDQoFBBkCBAMSBMgCKSsKDQoFBBkCBAgSBMgCLDwKDgoGBBkCBAgCEgTIAi07CgwKBAQZAgUSBMkCAj0KDQoFBBkCBQQSBMkCAgoKDQoFBBkCBQUSBMkCDRMKDQoFBBkCBQESBMkCFCMKDQoFBBkCBQMSBMkCKSsKDQoFBBkCBQgSBMkCLDwKDgoGBBkCBQgCEgTJAi07CgwKBAQZAgYSBMoCAj0KDQoFBBkCBgQSBMoCAgoKDQoFBBkCBgUSBMoCDBMKDQoFBBkCBgESBMoCFCQKDQoFBBkCBgMSBMoCKSsKDQoFBBkCBggSBMoCLDwKDgoGBBkCBggCEgTKAi07CgwKBAQZAgcSBMsCAj0KDQoFBBkCBwQSBMsCAgoKDQoFBBkCBwUSBMsCDBMKDQoFBBkCBwESBMsCFCQKDQoFBBkCBwMSBMsCKSsKDQoFBBkCBwgSBMsCLDwKDgoGBBkCBwgCEgTLAi07CgwKBAQZAggSBMwCAj0KDQoFBBkCCAQSBMwCAgoKDQoFBBkCCAUSBMwCCxMKDQoFBBkCCAESBMwCFCUKDQoFBBkCCAMSBMwCKSsKDQoFBBkCCAgSBMwCLDwKDgoGBBkCCAgCEgTMAi07CgwKBAQZAgkSBM0CAj0KDQoFBBkCCQQSBM0CAgoKDQoFBBkCCQUSBM0CCxMKDQoFBBkCCQESBM0CFCUKDQoFBBkCCQMSBM0CKSsKDQoFBBkCCQgSBM0CLDwKDgoGBBkCCQgCEgTNAi07CgwKBAQZAgoSBM4CAj0KDQoFBBkCCgQSBM4CAgoKDQoFBBkCCgUSBM4CDhMKDQoFBBkCCgESBM4CFCIKDQoFBBkCCgMSBM4CKCsKDQoF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YXBVaW50MzJVaW50MzJFbnRyeVIPbWFwVWludDMyVWludDMyElwKEW1hcF91aW50NjRfdWludDY0GAQgAygLMjAucHJvdG9idWZfdW5pdHRlc3QzLlRlc3RNYXAuTWFwVWludDY0VWludDY0RW50cnlSD21hcFVpbnQ2NFVpbnQ2NBJcChFtYXBfc2ludDMyX3NpbnQzMhgFIAMoCzIwLnByb3RvYnVmX3VuaXR0ZXN0My5UZXN0TWFwLk1hcFNpbnQzMlNpbnQzMkVudHJ5Ug9tYXBTaW50MzJTaW50MzISXAoRbWFwX3NpbnQ2NF9zaW50NjQYBiADKAsyMC5wcm90b2J1Zl91bml0dGVzdDMuVGVzdE1hcC5NYXBTaW50NjRTaW50NjRFbnRyeVIPbWFwU2ludDY0U2ludDY0EmIKE21hcF9maXhlZDMyX2ZpeGVkMzIYByADKAsyMi5wcm90b2J1Zl91bml0dGVzdDMuVGVzdE1hcC5NYXBGaXhlZDMyRml4ZWQzMkVudHJ5UhFtYXBGaXhlZDMyRml4ZWQzMhJiChNtYXBfZml4ZWQ2NF9maXhlZDY0GAggAygLMjIucHJvdG9idWZfdW5pdHRlc3QzLlRlc3RNYXAuTWFwRml4ZWQ2NEZpeGVkNjRFbnRyeVIRbWFwRml4ZWQ2NEZpeGVkNjQSaAoVbWFwX3NmaXhlZDMyX3NmaXhlZDMyGAkgAygLMjQucHJvdG9idWZfdW5pdHRlc3QzLlRlc3RNYXAuTWFwU2ZpeGVkMzJTZml4ZWQzMkVudHJ5UhNtYXBTZml4ZWQzMlNmaXhlZDMyEmgKFW1hcF9zZml4ZWQ2NF9zZml4ZWQ2NBgKIAMoCzI0LnByb3RvYnVmX3VuaXR0ZXN0My5UZXN0TWFwLk1hcFNmaXhlZDY0U2ZpeGVkNjRFbnRyeVITbWFwU2ZpeGVkNjRTZml4ZWQ2NBJWCg9tYXBfaW50MzJfZmxvYXQYCyADKAsyLi5wcm90b2J1Zl91bml0dGVzdDMuVGVzdE1hcC5NYXBJbnQzMkZsb2F0RW50cnlSDW1hcEludDMyRmxvYXQSWQoQbWFwX2ludDMyX2RvdWJsZRgMIAMoCzIvLnByb3RvYnVmX3VuaXR0ZXN0My5UZXN0TWFwLk1hcEludDMyRG91YmxlRW50cnlSDm1hcEludDMyRG91YmxlElAKDW1hcF9ib29sX2Jvb2wYDSADKAsyLC5wcm90b2J1Zl91bml0dGVzdDMuVGVzdE1hcC5NYXBCb29sQm9vbEVudHJ5UgttYXBCb29sQm9vbBJcChFtYXBfc3RyaW5nX3N0cmluZxgOIAMoCzIwLnByb3RvYnVmX3VuaXR0ZXN0My5UZXN0TWFwLk1hcFN0cmluZ1N0cmluZ0VudHJ5Ug9tYXBTdHJpbmdTdHJpbmcSVgoPbWFwX2ludDMyX2J5dGVzGA8gAygLMi4ucHJvdG9idWZfdW5pdHRlc3QzLlRlc3RNYXAuTWFwSW50MzJCeXRlc0VudHJ5Ug1tYXBJbnQzMkJ5dGVzElMKDm1hcF9pbnQzMl9lbnVtGBAgAygLMi0ucHJvdG9idWZfdW5pdHRlc3QzLlRlc3RNYXAuTWFwSW50MzJFbnVtRW50cnlSDG1hcEludDMyRW51bRJyChltYXBfaW50MzJfZm9yZWlnbl9tZXNzYWdlGBEgAygLMjcucHJvdG9idWZfdW5pdHRlc3QzLlRlc3RNYXAuTWFwSW50MzJGb3JlaWduTWVzc2FnZUVudHJ5UhZtYXBJbnQzMkZvcmVpZ25NZXNzYWdlGkAKEk1hcEludDMySW50MzJFbnRyeRIQCgNrZXkYASABKAVSA2tleRIUCgV2YWx1ZRgCIAEoBVIFdmFsdWU6AjgBGkAKEk1hcEludDY0SW50NjRFbnRyeRIQCgNrZXkYASABKANSA2tleRIUCgV2YWx1ZRgCIAEoA1IFdmFsdWU6AjgBGkIKFE1hcFVpbnQzMlVpbnQzMkVudHJ5EhAKA2tleRgBIAEoDVIDa2V5EhQKBXZhbHVlGAIgASgNUgV2YWx1ZToCOAEaQgoUTWFwVWludDY0VWludDY0RW50cnkSEAoDa2V5GAEgASgEUgNrZXkSFAoFdmFsdWUYAiABKARSBXZhbHVlOgI4ARpCChRNYXBTaW50MzJTaW50MzJFbnRyeRIQCgNrZXkYASABKBFSA2tleRIUCgV2YWx1ZRgCIAEoEVIFdmFsdWU6AjgBGkIKFE1hcFNpbnQ2NFNpbnQ2NEVudHJ5EhAKA2tleRgBIAEoElIDa2V5EhQKBXZhbHVlGAIgASgSUgV2YWx1ZToCOAEaRAoWTWFwRml4ZWQzMkZpeGVkMzJFbnRyeRIQCgNrZXkYASABKAdSA2tleRIUCgV2YWx1ZRgCIAEoB1IFdmFsdWU6AjgBGkQKFk1hcEZpeGVkNjRGaXhlZDY0RW50cnkSEAoDa2V5GAEgASgGUgNrZXkSFAoFdmFsdWUYAiABKAZSBXZhbHVlOgI4ARpGChhNYXBTZml4ZWQzMlNmaXhlZDMyRW50cnkSEAoDa2V5GAEgASgPUgNrZXkSFAoFdmFsdWUYAiABKA9SBXZhbHVlOgI4ARpGChhNYXBTZml4ZWQ2NFNmaXhlZDY0RW50cnkSEAoDa2V5GAEgASgQUgNrZXkSFAoFdmFsdWUYAiABKBBSBXZhbHVlOgI4ARpAChJNYXBJbnQzMkZsb2F0RW50cnkSEAoDa2V5GAEgASgFUgNrZXkSFAoFdmFsdWUYAiABKAJSBXZhbHVlOgI4ARpBChNNYXBJbnQzMkRvdWJsZUVudHJ5EhAKA2tleRgBIAEoBVIDa2V5EhQKBXZhbHVlGAIgASgBUgV2YWx1ZToCOAEaPgoQTWFwQm9vbEJvb2xFbnRyeRIQCgNrZXkYASABKAhSA2tleRIUCgV2YWx1ZRgCIAEoCFIFdmFsdWU6AjgBGkIKFE1hcFN0cmluZ1N0cmluZ0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEaQAoSTWFwSW50MzJCeXRlc0VudHJ5EhAKA2tleRgBIAEoBVIDa2V5EhQKBXZhbHVlGAIgASgMUgV2YWx1ZToCOAEaXAoRTWFwSW50MzJFbnVtRW50cnkSEAoDa2V5GAEgASgFUgNrZXkSMQoFdmFsdWUYAiABKA4yGy5wcm90b2J1Zl91bml0dGVzdDMuTWFwRW51bVIFdmFsdWU6AjgBGm0KG01hcEludDMyRm9yZWlnbk1lc3NhZ2VFbnRyeRIQCgNrZXkYASABKAVSA2tleRI4CgV2YWx1ZRgCIAEoCzIiLnByb3RvYnVmX3VuaXR0ZXN0My5Gb3JlaWduTWVzc2FnZVIFdmFsdWU6AjgBIksKEVRlc3RNYXBTdWJtZXNzYWdlEjYKCHRlc3RfbWFwGAEgASgLMhsucHJvdG9idWZfdW5pdHRlc3QzLlRlc3RNYXBSB3Rlc3RNYXAi2wEKDlRlc3RNZXNzYWdlTWFwEmMKEW1hcF9pbnQzMl9tZXNzYWdlGAEgAygLMjcucHJvdG9idWZfdW5pdHRlc3QzLlRlc3RNZXNzYWdlTWFwLk1hcEludDMyTWVzc2FnZUVudHJ5Ug9tYXBJbnQzMk1lc3NhZ2UaZAoUTWFwSW50MzJNZXNzYWdlRW50cnkSEAoDa2V5GAEgASgFUgNrZXkSNgoFdmFsdWUYAiABKAsyIC5wcm90b2J1Zl91bml0dGVzdDMuVGVzdEFsbFR5cGVzUgV2YWx1ZToCOAEiiQIKD1Rlc3RTYW1lVHlwZU1hcBJBCgRtYXAxGAEgAygLMi0ucHJvdG9idWZfdW5pdHRlc3QzLlRlc3RTYW1lVHlwZU1hcC5NYXAxRW50cnlSBG1hcDESQQoEbWFwMhgCIAMoCzItLnByb3RvYnVmX3VuaXR0ZXN0My5UZXN0U2FtZVR5cGVNYXAuTWFwMkVudHJ5UgRtYXAyGjcKCU1hcDFFbnRyeRIQCgNrZXkYASABKAVSA2tleRIUCgV2YWx1ZRgCIAEoBVIFdmFsdWU6AjgBGjcKCU1hcDJFbnRyeRIQCgNrZXkYASABKAVSA2tleRIUCgV2YWx1ZRgCIAEoBVIFdmFsdWU6AjgBIq0UCgxUZXN0QXJlbmFNYXASWwoPbWFwX2ludDMyX2ludDMyGAEgAygLMjMucHJvdG9idWZfdW5pdHRlc3QzLlRlc3RBcmVuYU1hcC5NYXBJbnQzMkludDMyRW50cnlSDW1hcEludDMySW50MzISWwoPbWFwX2ludDY0X2ludDY0GAIgAygLMjMucHJvdG9idWZfdW5pdHRlc3QzLlRlc3RBcmVuYU1hcC5NYXBJbnQ2NEludDY0RW50cnlSDW1hcEludDY0SW50NjQSYQoRbWFwX3VpbnQzMl91aW50MzIYAyADKAsyNS5wcm90b2J1Zl91bml0dGVzdDMuVGVzdEFyZW5hTWFwLk1hcFVpbnQzMlVpbnQzMkVudHJ5Ug9tYXBVaW50MzJVaW50MzISYQoRbWFwX3VpbnQ2NF91aW50NjQYBCADKAsyNS5wcm90b2J1Zl91bml0dGVzdDMuVGVzdEFyZW5hTWFwLk1hcFVpbnQ2NFVpbnQ2NEVudHJ5Ug9tYXBVaW50NjRVaW50NjQSYQoRbWFwX3NpbnQzMl9zaW50MzIYBSADKAsyNS5wcm90b2J1Zl91bml0dGVzdDMuVGVzdEFyZW5hTWFwLk1hcFNpbnQzMlNpbnQzMkVudHJ5Ug9tYXBTaW50MzJTaW50MzISYQoRbWFwX3NpbnQ2NF9zaW50NjQYBiADKAsyNS5wcm90b2J1Zl91bml0dGVzdDMuVGVzdEFyZW5hTWFwLk1hcFNpbnQ2NFNpbnQ2NEVudHJ5Ug9tYXBTaW50NjRTaW50NjQSZwoTbWFwX2ZpeGVkMzJfZml4ZWQzMhgHIAMoCzI3LnByb3RvYnVmX3VuaXR0ZXN0My5UZXN0QXJlbmFNYXAuTWFwRml4ZWQzMkZpeGVkMzJFbnRyeVIRbWFwRml4ZWQzMkZpeGVkMzISZwoTbWFwX2ZpeGVkNjRfZml4ZWQ2NBgIIAMoCzI3LnByb3RvYnVmX3VuaXR0ZXN0My5UZXN0QXJlbmFNYXAuTWFwRml4ZWQ2NEZpeGVkNjRFbnRyeVIRbWFwRml4ZWQ2NEZpeGVkNjQSbQoVbWFwX3NmaXhlZDMyX3NmaXhlZDMyGAkgAygLMjkucHJvdG9idWZfdW5pdHRlc3QzLlRlc3RBcmVuYU1hcC5NYXBTZml4ZWQzMlNmaXhlZDMyRW50cnlSE21hcFNmaXhlZDMyU2ZpeGVkMzISbQoVbWFwX3NmaXhlZDY0X3NmaXhlZDY0GAogAygLMjkucHJvdG9idWZfdW5pdHRlc3QzLlRlc3RBcmVuYU1hcC5NYXBTZml4ZWQ2NFNmaXhlZDY0RW50cnlSE21hcFNmaXhlZDY0U2ZpeGVkNjQSWwoPbWFwX2ludDMyX2Zsb2F0GAsgAygLMjMucHJvdG9idWZfdW5pdHRlc3QzLlRlc3RBcmVuYU1hcC5NYXBJbnQzMkZsb2F0RW50cnlSDW1hcEludDMyRmxvYXQSXgoQbWFwX2ludDMyX2RvdWJsZRgMIAMoCzI0LnByb3RvYnVmX3VuaXR0ZXN0My5UZXN0QXJlbmFNYXAuTWFwSW50MzJEb3VibGVFbnRyeVIObWFwSW50MzJEb3VibGUSVQoNbWFwX2Jvb2xfYm9vbBgNIAMoCzIxLnByb3RvYnVmX3VuaXR0ZXN0My5UZXN0QXJlbmFNYXAuTWFwQm9vbEJvb2xFbnRyeVILbWFwQm9vbEJvb2wSWAoObWFwX2ludDMyX2VudW0YDiADKAsyMi5wcm90b2J1Zl91bml0dGVzdDMuVGVzdEFyZW5hTWFwLk1hcEludDMyRW51bUVudHJ5UgxtYXBJbnQzMkVudW0SdwoZbWFwX2ludDMyX2ZvcmVpZ25fbWVzc2FnZRgPIAMoCzI8LnByb3RvYnVmX3VuaXR0ZXN0My5UZXN0QXJlbmFNYXAuTWFwSW50MzJGb3JlaWduTWVzc2FnZUVudHJ5UhZtYXBJbnQzMkZvcmVpZ25NZXNzYWdlGkAKEk1hcEludDMySW50MzJFbnRyeRIQCgNrZXkYASABKAVSA2tleRIUCgV2YWx1ZRgCIAEoBVIFdmFsdWU6AjgBGkAKEk1hcEludDY0SW50NjRFbnRyeRIQCgNrZXkYASABKANSA2tleRIUCgV2YWx1ZRgCIAEoA1IFdmFsdWU6AjgBGkIKFE1hcFVpbnQzMlVpbnQzMkVudHJ5EhAKA2tleRgBIAEoDVIDa2V5EhQKBXZhbHVlGAIgASgNUgV2YWx1ZToCOAEaQgoUTWFwVWludDY0VWludDY0RW50cnkSEAoDa2V5GAEgASgEUgNrZXkSFAoFdmFsdWUYAiABKARSBXZhbHVlOgI4ARpCChRNYXBTaW50MzJTaW50MzJFbnRyeRIQCgNrZXkYASABKBFSA2tleRIUCgV2YWx1ZRgCIAEoEVIFdmFsdWU6AjgBGkIKFE1hcFNpbnQ2NFNpbnQ2NEVudHJ5EhAKA2tleRgBIAEoElIDa2V5EhQKBXZhbHVlGAIgASgSUgV2YWx1ZToCOAEaRAoWTWFwRml4ZWQzMkZpeGVkMzJFbnRyeRIQCgNrZXkYASABKAdSA2tleRIUCgV2YWx1ZRgCIAEoB1IFdmFsdWU6AjgBGkQKFk1hcEZpeGVkNjRGaXhlZDY0RW50cnkSEAoDa2V5GAEgASgGUgNrZXkSFAoFdmFsdWUYAiABKAZSBXZhbHVlOgI4ARpGChhNYXBTZml4ZWQzMlNmaXhlZDMyRW50cnkSEAoDa2V5GAEgASgPUgNrZXkSFAoFdmFsdWUYAiABKA9SBXZhbHVlOgI4ARpGChhNYXBTZml4ZWQ2NFNmaXhlZDY0RW50cnkSEAoDa2V5GAEgASgQUgNrZXkSFAoFdmFsdWUYAiABKBBSBXZhbHVlOgI4ARpAChJNYXBJbnQzMkZsb2F0RW50cnkSEAoDa2V5GAEgASgFUgNrZXkSFAoFdmFsdWUYAiABKAJSBXZhbHVlOgI4ARpBChNNYXBJbnQzMkRvdWJsZUVudHJ5EhAKA2tleRgBIAEoBVIDa2V5EhQKBXZhbHVlGAIgASgBUgV2YWx1ZToCOAEaPgoQTWFwQm9vbEJvb2xFbnRyeRIQCgNrZXkYASABKAhSA2tleRIUCgV2YWx1ZRgCIAEoCFIFdmFsdWU6AjgBGlwKEU1hcEludDMyRW51bUVudHJ5EhAKA2tleRgBIAEoBVIDa2V5EjEKBXZhbHVlGAIgASgOMhsucHJvdG9idWZfdW5pdHRlc3QzLk1hcEVudW1SBXZhbHVlOgI4ARptChtNYXBJbnQzMkZvcmVpZ25NZXNzYWdlRW50cnkSEAoDa2V5GAEgASgFUgNrZXkSOAoFdmFsdWUYAiABKAsyIi5wcm90b2J1Zl91bml0dGVzdDMuRm9yZWlnbk1lc3NhZ2VSBXZhbHVlOgI4ASL4AQofTWVzc2FnZUNvbnRhaW5pbmdFbnVtQ2FsbGVkVHlwZRJRCgR0eXBlGAEgAygLMj0ucHJvdG9idWZfdW5pdHRlc3QzLk1lc3NhZ2VDb250YWluaW5nRW51bUNhbGxlZFR5cGUuVHlwZUVudHJ5UgR0eXBlGmwKCVR5cGVFbnRyeRIQCgNrZXkYASABKAVSA2tleRJJCgV2YWx1ZRgCIAEoCzIzLnByb3RvYnVmX3VuaXR0ZXN0My5NZXNzYWdlQ29udGFpbmluZ0VudW1DYWxsZWRUeXBlUgV2YWx1ZToCOAEiFAoEVHlwZRIMCghUWVBFX0ZPTxAAIrEBCh9NZXNzYWdlQ29udGFpbmluZ01hcENhbGxlZEVudHJ5ElQKBWVudHJ5GAEgAygLMj4ucHJvdG9idWZfdW5pdHRlc3QzLk1lc3NhZ2VDb250YWluaW5nTWFwQ2FsbGVkRW50cnkuRW50cnlFbnRyeVIFZW50cnkaOAoKRW50cnlFbnRyeRIQCgNrZXkYASABKAVSA2tleRIUCgV2YWx1ZRgCIAEoBVIFdmFsdWU6AjgBKj8KB01hcEVudW0SEAoMTUFQX0VOVU1fRk9PEAASEAoMTUFQX0VOVU1fQkFSEAESEAoMTUFQX0VOVU1fQkFaEAJCHaoCGkdvb2dsZS5Qcm90b2J1Zi5UZXN0UHJvdG9zSpwpCgYSBCQAcwEKmw8KAQwSAyQAEhrMAiBUaGlzIGZpbGUgaXMgbW9zdGx5IGVxdWl2YWxlbnQgdG8gbWFwX3VuaXR0ZXN0LnByb3RvLCBidXQgaW1wb3J0cwogdW5pdHRlc3RfcHJvdG8zLnByb3RvIGluc3RlYWQgb2YgdW5pdHRlc3QucHJvdG8sIHNvIHRoYXQgaXQgb25seQogdXNlcyBwcm90bzMgbWVzc2FnZXMuIFRoaXMgbWFrZXMgaXQgc3VpdGFibGUgZm9yIHRlc3RpbmcKIGltcGxlbWVudGF0aW9ucyB3aGljaCBvbmx5IHN1cHBvcnQgcHJvdG8zLgogVGhlIFRlc3RSZXF1aXJlZE1lc3NhZ2VNYXAgbWVzc2FnZSBoYXMgYmVlbiByZW1vdmVkIGFzIHRoZXJlIGFyZSBubwogcmVxdWlyZWQgZmllbGRzIGluIHByb3RvMy4KMsEMIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwoKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogbWV0OgoKICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiBkaXN0cmlidXRpb24uCiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KCiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU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YWx1ZRgBIAEoDjIdLnVuaXR0ZXN0X2lzc3Vlcy5OZWdhdGl2ZUVudW1SBXZhbHVlEjkKBnZhbHVlcxgCIAMoDjIdLnVuaXR0ZXN0X2lzc3Vlcy5OZWdhdGl2ZUVudW1CAhAAUgZ2YWx1ZXMSRgoNcGFja2VkX3ZhbHVlcxgDIAMoDjIdLnVuaXR0ZXN0X2lzc3Vlcy5OZWdhdGl2ZUVudW1CAhABUgxwYWNrZWRWYWx1ZXMiEQoPRGVwcmVjYXRlZENoaWxkIosDChdEZXByZWNhdGVkRmllbGRzTWVzc2FnZRIqCg5QcmltaXRpdmVWYWx1ZRgBIAEoBUICGAFSDlByaW1pdGl2ZVZhbHVlEioKDlByaW1pdGl2ZUFycmF5GAIgAygFQgIYAVIOUHJpbWl0aXZlQXJyYXkSSAoMTWVzc2FnZVZhbHVlGAMgASgLMiAudW5pdHRlc3RfaXNzdWVzLkRlcHJlY2F0ZWRDaGlsZEICGAFSDE1lc3NhZ2VWYWx1ZRJICgxNZXNzYWdlQXJyYXkYBCADKAsyIC51bml0dGVzdF9pc3N1ZXMuRGVwcmVjYXRlZENoaWxkQgIYAVIMTWVzc2FnZUFycmF5EkEKCUVudW1WYWx1ZRgFIAEoDjIfLnVuaXR0ZXN0X2lzc3Vlcy5EZXByZWNhdGVkRW51bUICGAFSCUVudW1WYWx1ZRJBCglFbnVtQXJyYXkYBiADKA4yHy51bml0dGVzdF9pc3N1ZXMuRGVwcmVjYXRlZEVudW1CAhgBUglFbnVtQXJyYXkiHwoJSXRlbUZpZWxkEhIKBGl0ZW0YASABKAVSBGl0ZW0iVwoNUmVzZXJ2ZWROYW1lcxIUCgV0eXBlcxgBIAEoBVIFdHlwZXMSHgoKZGVzY3JpcHRvchgCIAEoBVIKZGVzY3JpcHRvchoQCg5Tb21lTmVzdGVkVHlwZSLfAQoVVGVzdEpzb25GaWVsZE9yZGVyaW5nEh8KC3BsYWluX2ludDMyGAQgASgFUgpwbGFpbkludDMyEh0KCW8xX3N0cmluZxgCIAEoCUgAUghvMVN0cmluZxIbCghvMV9pbnQzMhgFIAEoBUgAUgdvMUludDMyEiEKDHBsYWluX3N0cmluZxgBIAEoCVILcGxhaW5TdHJpbmcSGwoIbzJfaW50MzIYBiABKAVIAVIHbzJJbnQzMhIdCglvMl9zdHJpbmcYAyABKAlIAVIIbzJTdHJpbmdCBAoCbzFCBAoCbzIiUQoMVGVzdEpzb25OYW1lEhIKBG5hbWUYASABKAlSBG5hbWUSGQoLZGVzY3JpcHRpb24YAiABKAlSBGRlc2MSEgoEZ3VpZBgDIAEoCVIEZXhpZCKTAQoMT25lb2ZNZXJnaW5nEhQKBHRleHQYASABKAlIAFIEdGV4dBI+CgZuZXN0ZWQYAiABKAsyJC51bml0dGVzdF9pc3N1ZXMuT25lb2ZNZXJnaW5nLk5lc3RlZEgAUgZuZXN0ZWQaJAoGTmVzdGVkEgwKAXgYASABKAVSAXgSDAoBeRgCIAEoBVIBeUIHCgV2YWx1ZSpVCgxOZWdhdGl2ZUVudW0SFgoSTkVHQVRJVkVfRU5VTV9aRVJPEAASFgoJRml2ZUJlbG93EPv//////////wESFQoITWludXNPbmUQ////////////ASouCg5EZXByZWNhdGVkRW51bRITCg9ERVBSRUNBVEVEX1pFUk8QABIHCgNvbmUQAUIdqgIaVW5pdFRlc3QuSXNzdWVzLlRlc3RQcm90b3NK/yMKBxIFAACLAQEKCAoBDBIDAAASCggKAQgSAwYANwqOAgoCCCUSAwYANxplIElzc3VlOiBOb24tIkdvb2dsZS5Qcm90b2J1ZmZlcnMiIG5hbWVzcGFjZSB3aWxsIGVuc3VyZSB0aGF0IHByb3RvYnVmZmVyIGxpYnJhcnkgdHlwZXMgYXJlIHF1YWxpZmllZAoymwEgVGhlc2UgcHJvdG8gZGVzY3JpcHRvcnMgaGF2ZSBhdCBvbmUgdGltZSBiZWVuIHJlcG9ydGVkIGFzIGFuIGlzc3VlIG9yIGRlZmVjdC4KIFRoZXkgYXJlIGtlcHQgaGVyZSB0byByZXBsaWNhdGUgdGhlIGlzc3VlLCBhbmQgY29udGludWUgdG8gdmVyaWZ5IHRoZSBmaXguCgoICgECEgMIABgKdgoCBAASBAwAEQEaaiBJc3N1ZSAzMDc6IHdoZW4gZ2VuZXJhdGluZyBkb3VibHktbmVzdGVkIHR5cGVzLCBhbnkgcmVmZXJlbmNlcwogc2hvdWxkIGJlIG9mIHRoZSBmb3JtIEEuVHlwZXMuQi5UeXBlcy5DLgoKCgoDBAABEgMMCBAKDAoEBAADABIE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BCADKAsyIC5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvUgttZXNzYWdlVHlwZRJBCgllbnVtX3R5cGUYBSADKAsyJC5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90b1IIZW51bVR5cGUSQQoHc2VydmljZRgGIAMoCzInLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlRGVzY3JpcHRvclByb3RvUgdzZXJ2aWNlEkMKCWV4dGVuc2lvbhgHIAMoCzIlLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b1IJZXh0ZW5zaW9uEjYKB29wdGlvbnMYCCABKAsyHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnNSB29wdGlvbnMSSQoQc291cmNlX2NvZGVfaW5mbxgJIAEoCzIfLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mb1IOc291cmNlQ29kZUluZm8SFgoGc3ludGF4GAwgASgJUgZzeW50YXgiuQYKD0Rlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEjsKBWZpZWxkGAIgAygLMiUuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvUgVmaWVsZBJDCglleHRlbnNpb24YBiADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG9SCWV4dGVuc2lvbhJBCgtuZXN0ZWRfdHlwZRgDIAMoCzIgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG9SCm5lc3RlZFR5cGUSQQoJZW51bV90eXBlGAQgAygLMiQuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG9SCGVudW1UeXBlElgKD2V4dGVuc2lvbl9yYW5nZRgFIAMoCzIvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0ZW5zaW9uUmFuZ2VSDmV4dGVuc2lvblJhbmdlEkQKCm9uZW9mX2RlY2wYCCADKAsyJS5nb29nbGUucHJvdG9idWYuT25lb2ZEZXNjcmlwdG9yUHJvdG9SCW9uZW9mRGVjbBI5CgdvcHRpb25zGAcgASgLMh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zUgdvcHRpb25zElUKDnJlc2VydmVkX3JhbmdlGAkgAygLMi4uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5SZXNlcnZlZFJhbmdlUg1yZXNlcnZlZFJhbmdlEiMKDXJlc2VydmVkX25hbWUYCiADKAlSDHJlc2VydmVkTmFtZRp6Cg5FeHRlbnNpb25SYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQSQAoHb3B0aW9ucxgDIAEoCzImLmdvb2dsZS5wcm90b2J1Zi5FeHRlbnNpb25SYW5nZU9wdGlvbnNSB29wdGlvbnMaNwoNUmVzZXJ2ZWRSYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQifAoVRXh0ZW5zaW9uUmFuZ2VPcHRpb25zElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIimAYKFEZpZWxkRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSFgoGbnVtYmVyGAMgASgFUgZudW1iZXISQQoFbGFiZWwYBCABKA4yKy5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uTGFiZWxSBWxhYmVsEj4KBHR5cGUYBSABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZVIEdHlwZRIbCgl0eXBlX25hbWUYBiABKAlSCHR5cGVOYW1lEhoKCGV4dGVuZGVlGAIgASgJUghleHRlbmRlZRIjCg1kZWZhdWx0X3ZhbHVlGAcgASgJUgxkZWZhdWx0VmFsdWUSHwoLb25lb2ZfaW5kZXgYCSABKAVSCm9uZW9mSW5kZXgSGwoJanNvbl9uYW1lGAogASgJUghqc29uTmFtZRI3CgdvcHRpb25zGAggASgLMh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9uc1IHb3B0aW9ucyK2AgoEVHlwZRIPCgtUWVBFX0RPVUJMRRABEg4KClRZUEVfRkxPQVQQAhIOCgpUWVBFX0lOVDY0EAMSDwoLVFlQRV9VSU5UNjQQBBIOCgpUWVBFX0lOVDMyEAUSEAoMVFlQRV9GSVhFRDY0EAYSEAoMVFlQRV9GSVhFRDMyEAcSDQoJVFlQRV9CT09MEAgSDwoLVFlQRV9TVFJJTkcQCRIOCgpUWVBFX0dST1VQEAoSEAoMVFlQRV9NRVNTQUdFEAsSDgoKVFlQRV9CWVRFUxAMEg8KC1RZUEVfVUlOVDMyEA0SDQoJVFlQRV9FTlVNEA4SEQoNVFlQRV9TRklYRUQzMhAPEhEKDVRZUEVfU0ZJWEVENjQQEBIPCgtUWVBFX1NJTlQzMhAREg8KC1RZUEVfU0lOVDY0EBIiQwoFTGFiZWwSEgoOTEFCRUxfT1BUSU9OQUwQARISCg5MQUJFTF9SRVFVSVJFRBACEhIKDkxBQkVMX1JFUEVBVEVEEAMiYwoUT25lb2ZEZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRI3CgdvcHRpb25zGAIgASgLMh0uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9uc1IHb3B0aW9ucyLjAgoTRW51bURlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEj8KBXZhbHVlGAIgAygLMikuZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZURlc2NyaXB0b3JQcm90b1IFdmFsdWUSNgoHb3B0aW9ucxgDIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9uc1IHb3B0aW9ucxJdCg5yZXNlcnZlZF9yYW5nZRgEIAMoCzI2Lmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvLkVudW1SZXNlcnZlZFJhbmdlUg1yZXNlcnZlZFJhbmdlEiMKDXJlc2VydmVkX25hbWUYBSADKAlSDHJlc2VydmVkTmFtZRo7ChFFbnVtUmVzZXJ2ZWRSYW5nZRIUCgVzdGFydBgBIAEoBVIFc3RhcnQSEAoDZW5kGAIgASgFUgNlbmQigwEKGEVudW1WYWx1ZURlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEhYKBm51bWJlchgCIAEoBVIGbnVtYmVyEjsKB29wdGlvbnMYAyABKAsyIS5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9uc1IHb3B0aW9ucyKnAQoWU2VydmljZURlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEj4KBm1ldGhvZBgCIAMoCzImLmdvb2dsZS5wcm90b2J1Zi5NZXRob2REZXNjcmlwdG9yUHJvdG9SBm1ldGhvZBI5CgdvcHRpb25zGAMgASgLMh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zUgdvcHRpb25zIokCChVNZXRob2REZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRIdCgppbnB1dF90eXBlGAIgASgJUglpbnB1dFR5cGUSHwoLb3V0cHV0X3R5cGUYAyABKAlSCm91dHB1dFR5cGUSOAoHb3B0aW9ucxgEIAEoCzIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zUgdvcHRpb25zEjAKEGNsaWVudF9zdHJlYW1pbmcYBSABKAg6BWZhbHNlUg9jbGllbnRTdHJlYW1pbmcSMAoQc2VydmVyX3N0cmVhbWluZxgGIAEoCDoFZmFsc2VSD3NlcnZlclN0cmVhbWluZyKSCQoLRmlsZU9wdGlvbnMSIQoMamF2YV9wYWNrYWdlGAEgASgJUgtqYXZhUGFja2FnZRIwChRqYXZhX291dGVyX2NsYXNzbmFtZRgIIAEoCVISamF2YU91dGVyQ2xhc3NuYW1lEjUKE2phdmFfbXVsdGlwbGVfZmlsZXMYCiABKAg6BWZhbHNlUhFqYXZhTXVsdGlwbGVGaWxlcxJECh1qYXZhX2dlbmVyYXRlX2VxdWFsc19hbmRfaGFzaBgUIAEoCEICGAFSGWphdmFHZW5lcmF0ZUVxdWFsc0FuZEhhc2gSOgoWamF2YV9zdHJpbmdfY2hlY2tfdXRmOBgbIAEoCDoFZmFsc2VSE2phdmFTdHJpbmdDaGVja1V0ZjgSUwoMb3B0aW1pemVfZm9yGAkgASgOMikuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zLk9wdGltaXplTW9kZToFU1BFRURSC29wdGltaXplRm9yEh0KCmdvX3BhY2thZ2UYCyABKAlSCWdvUGFja2FnZRI1ChNjY19nZW5lcmljX3NlcnZpY2VzGBAgASgIOgVmYWxzZVIRY2NHZW5lcmljU2VydmljZXMSOQoVamF2YV9nZW5lcmljX3NlcnZpY2VzGBEgASgIOgVmYWxzZVITamF2YUdlbmVyaWNTZXJ2aWNlcxI1ChNweV9nZW5lcmljX3NlcnZpY2VzGBIgASgIOgVmYWxzZVIRcHlHZW5lcmljU2VydmljZXMSNwoUcGhwX2dlbmVyaWNfc2VydmljZXMYKiABKAg6BWZhbHNlUhJwaHBHZW5lcmljU2VydmljZXMSJQoKZGVwcmVjYXRlZBgXIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQSLwoQY2NfZW5hYmxlX2FyZW5hcxgfIAEoCDoFZmFsc2VSDmNjRW5hYmxlQXJlbmFzEioKEW9iamNfY2xhc3NfcHJlZml4GCQgASgJUg9vYmpjQ2xhc3NQcmVmaXgSKQoQY3NoYXJwX25hbWVzcGFjZRglIAEoCVIPY3NoYXJwTmFtZXNwYWNlEiEKDHN3aWZ0X3ByZWZpeBgnIAEoCVILc3dpZnRQcmVmaXgSKAoQcGhwX2NsYXNzX3ByZWZpeBgoIAEoCVIOcGhwQ2xhc3NQcmVmaXgSIwoNcGhwX25hbWVzcGFjZRgpIAEoCVIMcGhwTmFtZXNwYWNlEjQKFnBocF9tZXRhZGF0YV9uYW1lc3BhY2UYLCABKAlSFHBocE1ldGFkYXRhTmFtZXNwYWNlEiEKDHJ1YnlfcGFja2FnZRgtIAEoCVILcnVieVBhY2thZ2USWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24iOgoMT3B0aW1pemVNb2RlEgkKBVNQRUVEEAESDQoJQ09ERV9TSVpFEAISEAoMTElURV9SVU5USU1FEAMqCQjoBxCAgICAAkoECCYQJyLRAgoOTWVzc2FnZU9wdGlvbnMSPAoXbWVzc2FnZV9zZXRfd2lyZV9mb3JtYXQYASABKAg6BWZhbHNlUhRtZXNzYWdlU2V0V2lyZUZvcm1hdBJMCh9ub19zdGFuZGFyZF9kZXNjcmlwdG9yX2FjY2Vzc29yGAIgASgIOgVmYWxzZVIcbm9TdGFuZGFyZERlc2NyaXB0b3JBY2Nlc3NvchIlCgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBIbCgltYXBfZW50cnkYByABKAhSCG1hcEVudHJ5ElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAJKBAgIEAlKBAgJEAoi4gMKDEZpZWxkT3B0aW9ucxJBCgVjdHlwZRgBIAEoDjIjLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5cGU6BlNUUklOR1IFY3R5cGUSFgoGcGFja2VkGAIgASgIUgZwYWNrZWQSRwoGanN0eXBlGAYgASgOMiQuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5KU1R5cGU6CUpTX05PUk1BTFIGanN0eXBlEhkKBGxhenkYBSABKAg6BWZhbHNlUgRsYXp5EiUKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlUgpkZXByZWNhdGVkEhkKBHdlYWsYCiABKAg6BWZhbHNlUgR3ZWFrElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uIi8KBUNUeXBlEgoKBlNUUklORxAAEggKBENPUkQQARIQCgxTVFJJTkdfUElFQ0UQAiI1CgZKU1R5cGUSDQoJSlNfTk9STUFMEAASDQoJSlNfU1RSSU5HEAESDQoJSlNfTlVNQkVSEAIqCQjoBxCAgICAAkoECAQQBSJzCgxPbmVvZk9wdGlvbnMSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiLAAQoLRW51bU9wdGlvbnMSHwoLYWxsb3dfYWxpYXMYAiABKAhSCmFsbG93QWxpYXMSJQoKZGVwcmVjYXRlZBgDIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAkoECAUQBiKeAQoQRW51bVZhbHVlT3B0aW9ucxIlCgpkZXByZWNhdGVkGAEgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACIpwBCg5TZXJ2aWNlT3B0aW9ucxIlCgpkZXByZWNhdGVkGCEgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACIuACCg1NZXRob2RPcHRpb25zEiUKCmRlcHJlY2F0ZWQYISABKAg6BWZhbHNlUgpkZXByZWNhdGVkEnEKEWlkZW1wb3RlbmN5X2xldmVsGCIgASgOMi8uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMuSWRlbXBvdGVuY3lMZXZlbDoTSURFTVBPVEVOQ1lfVU5LTk9XTlIQaWRlbXBvdGVuY3lMZXZlbBJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbiJQChBJZGVtcG90ZW5jeUxldmVsEhcKE0lERU1QT1RFTkNZX1VOS05PV04QABITCg9OT19TSURFX0VGRkVDVFMQARIOCgpJREVNUE9URU5UEAIqCQjoBxCAgICAAiKaAwoTVW5pbnRlcnByZXRlZE9wdGlvbhJBCgRuYW1lGAIgAygLMi0uZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24uTmFtZVBhcnRSBG5hbWUSKQoQaWRlbnRpZmllcl92YWx1ZRgDIAEoCVIPaWRlbnRpZmllclZhbHVlEiwKEnBvc2l0aXZlX2ludF92YWx1ZRgEIAEoBFIQcG9zaXRpdmVJbnRWYWx1ZRIsChJuZWdhdGl2ZV9pbnRfdmFsdWUYBSABKANSEG5lZ2F0aXZlSW50VmFsdWUSIQoMZG91YmxlX3ZhbHVlGAYgASgBUgtkb3VibGVWYWx1ZRIhCgxzdHJpbmdfdmFsdWUYByABKAxSC3N0cmluZ1ZhbHVlEicKD2FnZ3JlZ2F0ZV92YWx1ZRgIIAEoCVIOYWdncmVnYXRlVmFsdWUaSgoITmFtZVBhcnQSGwoJbmFtZV9wYXJ0GAEgAigJUghuYW1lUGFydBIhCgxpc19leHRlbnNpb24YAiACKAhSC2lzRXh0ZW5zaW9uIqcCCg5Tb3VyY2VDb2RlSW5mbxJECghsb2NhdGlvbhgBIAMoCzIoLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb2RlSW5mby5Mb2NhdGlvblIIbG9jYXRpb24azgEKCExvY2F0aW9uEhYKBHBhdGgYASADKAVCAhABUgRwYXRoEhYKBHNwYW4YAiADKAVCAhABUgRzcGFuEikKEGxlYWRpbmdfY29tbWVudHMYAyABKAlSD2xlYWRpbmdDb21tZW50cxIrChF0cmFpbGluZ19jb21tZW50cxgEIAEoCVIQdHJhaWxpbmdDb21tZW50cxI6ChlsZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzGAYgAygJUhdsZWFkaW5nRGV0YWNoZWRDb21tZW50cyLRAQoRR2VuZXJhdGVkQ29kZUluZm8STQoKYW5ub3RhdGlvbhgBIAMoCzItLmdvb2dsZS5wcm90b2J1Zi5HZW5lcmF0ZWRDb2RlSW5mby5Bbm5vdGF0aW9uUgphbm5vdGF0aW9uGm0KCkFubm90YXRpb24SFgoEcGF0aBgBIAMoBUICEAFSBHBhdGgSHwoLc291cmNlX2ZpbGUYAiABKAlSCnNvdXJjZUZpbGUSFAoFYmVnaW4YAyABKAVSBWJlZ2luEhAKA2VuZBgEIAEoBVIDZW5kQo8BChNjb20uZ29vZ2xlLnByb3RvYnVmQhBEZXNjcmlwdG9yUHJvdG9zSAFaPmdpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvYy1nZW4tZ28vZGVzY3JpcHRvcjtkZXNjcmlwdG9y+AEBogIDR1BCqgIaR29vZ2xlLlByb3RvYnVmLlJlZmxlY3Rpb25Kyr4CCgcSBScA9AYBCqoPCgEMEgMnABIywQwgUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0CiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCgogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiBtZXQ6CgogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKIGRpc3RyaWJ1dGlvbi4KICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCjLbAiBBdXRob3I6IGtlbnRvbkBnb29nbGUuY29tIChLZW50b24gVmFyZGEpCiAgQmFzZWQgb24gb3JpZ2luYWwgUHJvdG9jb2wgQnVmZmVycyBkZXNpZ24gYnkKICBTYW5qYXkgR2hlbWF3YXQsIEplZmYgRGVhbiwgYW5kIG90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IGJlIGdlbmVyYXRlZCBzbGlnaHRseSBkaWZmZXJlbnRseQogb3IgbWF5IGNvbnRhaW4gaGludHMgZm9yIGNvZGUgdGhhdCBtYW5pcHVsYXRlcyBwcm90b2NvbCBtZXNzYWdlcy4KCiBDbGllbnRzIG1heSBkZWZpbmUgY3VzdG9tIG9wdGlvbnMgYXMgZXh0ZW5zaW9ucyBvZiB0aGUgKk9wdGlvbnMgbWVzc2FnZXMuCiBUaGVzZSBleHRlbnNpb25zIG1heSBub3QgeWV0IGJlIGtub3duIGF0IHBhcnNpbmcgdGltZSwgc28gdGhlIHBhcnNlciBjYW5ub3QKIHN0b3JlIHRoZSB2YWx1ZXMgaW4gdGhlbS4gIEluc3RlYWQgaXQgc3RvcmVzIHRoZW0gaW4gYSBmaWVsZCBpbiB0aGUgKk9wdGlvbnMKIG1lc3NhZ2UgY2FsbGVkIHVuaW50ZXJwcmV0ZWRfb3B0aW9uLiBUaGlzIGZpZWxkIG11c3QgaGF2ZSB0aGUgc2FtZSBuYW1lCiBhY3Jvc3MgYWxsICpPcHRpb25zIG1lc3NhZ2VzLiBXZSB0aGVuIHVzZSB0aGlzIGZpZWxkIHRvIHBvcHVsYXRlIHRoZQogZXh0ZW5zaW9ucyB3aGVuIHdlIGJ1aWxkIGEgZGVzY3JpcHRvciwgYXQgd2hpY2ggcG9pbnQgYWxsIHByb3RvcyBoYXZlIGJlZW4KIHBhcnNlZCBhbmQgc28gYWxsIGV4dGVuc2lvbnMgYXJlIGtub3duLgoKIEV4dGVuc2lvbiBudW1iZXJzIGZvciBjdXN0b20gb3B0aW9ucyBtYXkgYmUgY2hvc2VuIGFzIGZvbGxvd3M6CiAqIEZvciBvcHRpb25zIHdoaWNoIHdpbGwgb25seSBiZSB1c2VkIHdpdGhpbiBhIHNpbmdsZSBhcHBsaWNhdGlvbiBvcgogICBvcmdhbml6YXRpb24sIG9yIGZvciBleHBlcmltZW50YWwgb3B0aW9ucywgdXNlIGZpZWxkIG51bWJlcnMgNTAwMDAKICAgdGhyb3VnaCA5OTk5OS4gIEl0IGlzIHVwIHRvIHlvdSB0byBlbnN1cmUgdGhhdCB5b3UgZG8gbm90IHVzZSB0aGUKICAgc2FtZSBudW1iZXIgZm9yIG11bHRpcGxlIG9wdGlvbnMuCiAqIEZvciBvcHRpb25zIHdoaWNoIHdpbGwgYmUgcHVibGlzaGVkIGFuZCB1c2VkIHB1YmxpY2x5IGJ5IG11bHRpcGxlCiAgIGluZGVwZW5kZW50IGVudGl0aWVzLCBlLW1haWwgcHJvdG9idWYtZ2xvYmFsLWV4dGVuc2lvbi1yZWdpc3RyeUBnb29nbGUuY29tCiAgIHRvIHJlc2VydmUgZXh0ZW5zaW9uIG51bWJlcnMuIFNpbXBseSBwcm92aWRlIHlvdXIgcHJvamVjdCBuYW1lIChlLmcuCiAgIE9iamVjdGl2ZS1DIHBsdWdpbikgYW5kIHlvdXIgcHJvamVjdCB3ZWJzaXRlIChpZiBhdmFpbGFibGUpIC0tIHRoZXJlJ3Mgbm8KICAgbmVlZCB0byBleHBsYWluIGhvdyB5b3UgaW50ZW5kIHRvIHVzZSB0aGVtLiBVc3VhbGx5IHlvdSBvbmx5IG5lZWQgb25lCiAgIGV4dGVuc2lvbiBudW1iZXIuIFlvdSBjYW4gZGVjbGFyZSBtdWx0aXBsZSBvcHRpb25zIHdpdGggb25seSBvbmUgZXh0ZW5zaW9uCiAgIG51bWJlciBieSBwdXR0aW5nIHRoZW0gaW4gYSBzdWItbWVzc2FnZS4gU2VlIHRoZSBDdXN0b20gT3B0aW9ucyBzZWN0aW9uIG9mCiAgIHRoZSBkb2NzIGZvciBleGFtcGxlczoKICAgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL3Byb3RvI29wdGlvbnMKICAgSWYgdGhpcyB0dXJucyBvdXQgdG8gYmUgcG9wdWxhciwgYSB3ZWIgc2VydmljZSB3aWxsIGJlIHNldCB1cAogICB0byBhdXRvbWF0aWNhbGx5IGFzc2lnbiBvcHRpb24gbnVtYmVycy4KCgsKAwQKARIEvQIIEwr0AQoEBAoCABIEwwICIxrlASBTZXRzIHRoZSBKYXZhIHBhY2thZ2Ugd2hlcmUgY2xhc3NlcyBnZW5lcmF0ZWQgZnJvbSB0aGlzIC5wcm90byB3aWxsIGJlCiBwbGFjZWQuICBCeSBkZWZhdWx0LCB0aGUgcHJvdG8gcGFja2FnZSBpcyB1c2VkLCBidXQgdGhpcyBpcyBvZnRlbgogaW5hcHByb3ByaWF0ZSBiZWNhdXNlIHByb3RvIHBhY2thZ2VzIGRvIG5vdCBub3JtYWxseSBzdGFydCB3aXRoIGJhY2t3YXJkcwogZG9tYWluIG5hbWVzLgoKDQoFBAoCAAQSBMMCAgoKDQoFBAoCAAUSBMMCCxEKDQoFBAoCAAESBMMCEh4KDQoFBAoCAAMSBMMCISIKvwIKBAQKAgESBMsCAisasAIgSWYgc2V0LCBhbGwgdGhlIGNsYXNzZXMgZnJvbSB0aGUgLnByb3RvIGZpbGUgYXJlIHdyYXBwZWQgaW4gYSBzaW5nbGUKIG91dGVyIGNsYXNzIHdpdGggdGhlIGdpdmVuIG5hbWUuICBUaGlzIGFwcGxpZXMgdG8gYm90aCBQcm90bzEKIChlcXVpdmFsZW50IHRvIHRoZSBvbGQgIi0tb25lX2phdmFfZmlsZSIgb3B0aW9uKSBhbmQgUHJvdG8yICh3aGVyZQogYSAucHJvdG8gYWx3YXlzIHRyYW5zbGF0ZXMgdG8gYSBzaW5nbGUgY2xhc3MsIGJ1dCB5b3UgbWF5IHdhbnQgdG8KIGV4cGxpY2l0bHkgY2hvb3NlIHRoZSBjbGFzcyBuYW1lKS4KCg0KBQQKAgEEEgTLAgIKCg0KBQQKAgEFEgTLAgsRCg0KBQQKAgEBEgTLAhImCg0KBQQKAgEDEgTLAikqCqMDCgQECgICEgTTAgI7GpQDIElmIHNldCB0cnVlLCB0aGVuIHRoZSBKYXZhIGNvZGUgZ2VuZXJhdG9yIHdpbGwgZ2VuZXJhdGUgYSBzZXBhcmF0ZSAuamF2YQogZmlsZSBmb3IgZWFjaCB0b3AtbGV2ZWwgbWVzc2FnZSwgZW51bSwgYW5kIHNlcnZpY2UgZGVmaW5lZCBpbiB0aGUgLnByb3RvCiBmaWxlLiAgVGh1cywgdGhlc2UgdHlwZXMgd2lsbCAqbm90KiBiZSBuZXN0ZWQgaW5zaWRlIHRoZSBvdXRlciBjbGFzcwogbmFtZWQgYnkgamF2YV9vdXRlcl9jbGFzc25hbWUuICBIb3dldmVyLCB0aGUgb3V0ZXIgY2xhc3Mgd2lsbCBzdGlsbCBiZQogZ2VuZXJhdGVkIHRvIGNvbnRhaW4gdGhlIGZpbGUncyBnZXREZXNjcmlwdG9yKCkgbWV0aG9kIGFz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cy4KIFRoaXMgaXMgcHJvdmlkZWQgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHdpdGggdGhlIE1lc3NhZ2VTZXQgd2lyZQogZm9ybWF0LiAgWW91IHNob3VsZCBub3QgdXNlIHRoaXMgZm9yIGFueSBvdGhlciByZWFzb246ICBJdCdzIGxlc3MKIGVmZmljaWVudCwgaGFzIGZld2VyIGZlYXR1cmVzLCBhbmQgaXMgbW9yZSBjb21wbGljYXRlZC4KCiBUaGUgbWVzc2FnZSBtdXN0IGJlIGRlZmluZWQgZXhhY3RseSBhcyBmb2xsb3dzOgogICBtZXNzYWdlIEZvbyB7CiAgICAgb3B0aW9uIG1lc3NhZ2Vfc2V0X3dpcmVfZm9ybWF0ID0gdHJ1ZTsKICAgICBleHRlbnNpb25zIDQgdG8gbWF4OwogICB9CiBOb3RlIHRoYXQgdGhlIG1lc3NhZ2UgY2Fubm90IGhhdmUgYW55IGRlZmluZWQgZmllbGRzOyBNZXNzYWdlU2V0cyBvbmx5CiBoYXZlIGV4dGVuc2lvbnMuCgogQWxsIGV4dGVuc2lvbnMgb2YgeW91ciB0eXBlIG11c3QgYmUgc2luZ3VsYXIgbWVzc2FnZXM7IGUuZy4gdGhleSBjYW5ub3QKIGJlIGludDMycywgZW51bXMsIG9yIHJlcGVhdGVkIG1lc3NhZ2VzLgoKIEJlY2F1c2UgdGhpcyBpcyBhbiBvcHRpb24sIHRoZSBhYm92ZSB0d28gcmVzdHJpY3Rpb25zIGFyZSBub3QgZW5mb3JjZWQgYnkKIHRoZSBwcm90b2NvbCBjb21waWxlci4KCg0KBQQLAgAEEgTNAwIKCg0KBQQLAgAFEgTNAwsPCg0KBQQLAgABEgTNAxAnCg0KBQQLAgADEgTNAyorCg0KBQQLAgAIEgTNAyw9Cg0KBQQLAgAHEgTNAzc8CusBCgQECwIBEgTSAwJGGtwBIERpc2FibGVzIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBzdGFuZGFyZCAiZGVzY3JpcHRvcigpIiBhY2Nlc3Nvciwgd2hpY2ggY2FuCiBjb25mbGljdCB3aXRoIGEgZmllbGQgb2YgdGhlIHNhbWUgbmFtZS4gIFRoaXMgaXMgbWVhbnQgdG8gbWFrZSBtaWdyYXRp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aW5nIGl0IHRvCiBmYWxzZSB3aWxsIGF2b2lkIHVzaW5nIHBhY2tlZCBlbmNvZGluZy4KCg0KBQQMAgEEEgSPBAIKCg0KBQQMAgEFEgSPBAsPCg0KBQQMAgEBEgSPBBAWCg0KBQQMAgEDEgSPBBkaCpoFCgQEDAICEgScBAIzGosFIFRoZSBqc3R5cGUgb3B0aW9uIGRldGVybWluZXMgdGhlIEphdmFTY3JpcHQgdHlwZSB1c2VkIGZvciB2YWx1ZXMgb2YgdGhlCiBmaWVsZC4gIFRoZSBvcHRpb24gaXMgcGVybWl0dGVkIG9ubHkgZm9yIDY0IGJpdCBpbnRlZ3JhbCBhbmQgZml4ZWQgdHlwZXMKIChpbnQ2NCwgdWludDY0LCBzaW50NjQsIGZpeGVkNjQsIHNmaXhlZDY0KS4gIEEgZmllbGQgd2l0aCBqc3R5cGUgSlNfU1RSSU5HCiBpcyByZXByZXNlbnRlZCBhcyBKYXZhU2NyaXB0IHN0cmluZywgd2hpY2ggYXZvaWRzIGxvc3Mgb2YgcHJlY2lzaW9uIHRoYXQKIGNhbiBoYXBwZW4gd2hlbiBhIGxhcmdlIHZhbHVlIGlzIGNvbnZlcnRlZCB0byBhIGZsb2F0aW5nIHBvaW50IEphdmFTY3JpcHQuCiBTcGVjaWZ5aW5nIEpTX05VTUJFUiBmb3IgdGhlIGpzdHlwZSBjYXVzZXMgdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0IGNvZGUgdG8KIHVzZSB0aGUgSmF2YVNjcmlwdCAibnVtYmVyIiB0eXBlLiAgVGhlIGJlaGF2aW9yIG9mIHRoZSBkZWZhdWx0IG9wdGlvbgogSlNfTk9STUFMIGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4KCiBUaGlzIG9wdGlvbiBpcyBhbiBlbnVtIHRvIHBlcm1pdCBhZGRpdGlvbmFsIHR5cGVzIHRvIGJlIGFkZGVkLCBlLmcuCiBnb29nLm1hdGguSW50ZWdlci4KCg0KBQQMAgIEEgScBAIKCg0KBQQMAgIGEgScBAsRCg0KBQQMAgIBEgScBBIYCg0KBQQMAgIDEgScBBscCg0KBQQMAgIIEgScBB0yCg0KBQQMAgIHEgScBCgxCg4KBAQMBAESBp0EAqYEAwoNCgUEDAQBARIEnQQHDQonCgYEDAQBAgASBJ8EBBIaFyBVc2UgdGhlIGRlZmF1bHQgdHlwZS4KCg8KBwQMBAECAAESBJ8EBA0KDwoHBAwEAQIAAhIEnwQQEQopCgYEDAQBAgESBKIEBBIaGSBVc2UgSmF2YVNjcmlwdCBzdHJpbmdzLgoKDwoHBAwEAQIBARIEogQEDQoPCgcEDAQBAgECEgSiBBARCikKBgQMBAECAhIEpQQEEhoZIFVzZSBKYXZhU2NyaXB0IG51bWJlcnMuCgoPCgcEDAQBAgIBEgSlBAQNCg8KBwQMBAECAgISBKUEEBEK7wwKBAQMAgMSBMQEAisa4AwgU2hvdWxkIHRoaXMgZmllbGQgYmUgcGFyc2VkIGxhemlseT8gIExhenkgYXBwbGllcyBvbmx5IHRvIG1lc3NhZ2UtdHlwZQogZmllbGRzLiAgSXQgbWVhbnMgdGhhdCB3aGVuIHRoZSBvdXRlciBtZXNzYWdlIGlzIGluaXRpYWxseSBwYXJzZWQsIHRoZQogaW5uZXIgbWVzc2FnZSdzIGNvbnRlbnRzIHdpbGwgbm90IGJlIHBhcnNlZCBidXQgaW5zdGVhZCBzdG9yZWQgaW4gZW5jb2RlZAogZm9ybS4gIFRoZSBpbm5lciBtZXNzYWdlIHdpbGwgYWN0dWFsbHkgYmUgcGFyc2VkIHdoZW4gaXQgaXMgZmlyc3QgYWNjZXNzZWQuCgogVGhpcyBpcyBvbmx5IGEgaGludC4gIEltcGxlbWVudGF0aW9ucyBhcmUgZnJlZSB0byBjaG9vc2Ugd2hldGhlciB0byB1c2UKIGVhZ2VyIG9yIGxhenkgcGFyc2luZyByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbi4gIEhvd2V2ZXIsCiBzZXR0aW5nIHRoaXMgb3B0aW9uIHRydWUgc3VnZ2VzdHMgdGhhdCB0aGUgcHJvdG9jb2wgYXV0aG9yIGJlbGlldmVzIHRoYXQKIHVzaW5nIGxhenkgcGFyc2luZyBvbiB0aGlzIGZpZWxkIGlzIHdvcnRoIHRoZSBhZGRpdGlvbmFsIGJvb2trZWVwaW5nCiBvdmVyaGVhZCB0eXBpY2FsbHkgbmVlZGVkIHRvIGltcGxlbWVudCBpdC4KCiBUaGlzIG9wdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIHB1YmxpYyBpbnRlcmZhY2Ugb2YgYW55IGdlbmVyYXRlZCBjb2RlOwogYWxsIG1ldGhvZCBzaWduYXR1cmVzIHJlbWFpbiB0aGUgc2FtZS4gIEZ1cnRoZXJtb3JlLCB0aHJlYWQtc2FmZXR5IG9mIHRoZQogaW50ZXJmYWNlIGlzIG5vdCBhZmZlY3RlZCBieSB0aGlzIG9wdGlvbjsgY29uc3QgbWV0aG9kcyByZW1haW4gc2FmZSB0bwogY2FsbCBmcm9tIG11bHRpcGxlIHRocmVhZHMgY29uY3VycmVudGx5LCB3aGlsZSBub24tY29uc3QgbWV0aG9kcyBjb250aW51ZQogdG8gcmVxdWlyZSBleGNsdXNpdmUgYWNjZXNzLgoKCiBOb3RlIHRoYXQgaW1wbGVtZW50YXRpb25zIG1heSBjaG9vc2Ugbm90IHRvIGNoZWNrIHJlcXVpcmVkIGZpZWxkcyB3aXRoaW4KIGEgbGF6eSBzdWItbWVzc2FnZS4gIFRoYXQgaXMsIGNhbGxpbmcgSXNJbml0aWFsaXplZCgpIG9uIHRoZSBvdXRlciBtZXNzYWdlCiBtYXkgcmV0dXJuIHRydWUgZXZlbiBpZiB0aGUgaW5uZXIgbWVzc2FnZSBoYXMgbWlzc2luZyByZXF1aXJlZCBmaWVsZHMuCiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG90aGVyd2lzZSB0aGUgaW5uZXIgbWVzc2FnZSB3b3VsZCBoYXZlIHRvIGJlCiBwYXJzZWQgaW4gb3JkZXIgdG8gcGVyZm9ybSB0aGUgY2hlY2ssIGRlZmVhdGluZyB0aGUgcHVycG9zZSBvZiBsYXp5CiBwYXJzaW5nLiAgQW4gaW1wbGVtZW50YXRpb24gd2hpY2ggY2hvb3NlcyBub3QgdG8gY2hlY2sgcmVxdWlyZWQgZmllbGRzCiBtdXN0IGJlIGNvbnNpc3RlbnQgYWJvdXQgaXQuICBUaGF0IGlzLCBmb3IgYW55IHBhcnRpY3VsYXIgc3ViLW1lc3NhZ2UsIHRoZQogaW1wbGVtZW50YXRpb24gbXVzdCBlaXRoZXIgKmFsd2F5cyogY2hlY2sgaXRzIHJlcXVpcmVkIGZpZWxkcywgb3IgKm5ldmVyKgogY2hlY2sg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ZW5zaW9ucyBvZiB0aGlzIG1lc3NhZ2UuIFNlZSBhYm92ZS4KCgwKBAQQBQASBJUFDRgKDQoFBBAFAAESBJUFDREKDQoFBBAFAAISBJUFFRgKDAoCBBESBpgFALUFAQoLCgMEEQESBJgFCBUK1gMKBAQRAgASBKMFAjIa3AEgSXMgdGhpcyBtZXRob2QgZGVwcmVjYXRlZD8KIERlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLCB0aGlzIGNhbiBlbWl0IERlcHJlY2F0ZWQgYW5ub3RhdGlvbnMKIGZvciB0aGUgbWV0aG9kLCBvciBpdCB3aWxsIGJlIGNvbXBsZXRlbHkgaWdub3JlZDsgaW4gdGhlIHZlcnkgbGVhc3QsCiB0aGlzIGlzIGEgZm9ybWFsaXphdGlvbiBmb3IgZGVwcmVjYXRpbmcgbWV0aG9kcy4KMugBIE5vdGU6ICBGaWVsZCBudW1iZXJzIDEgdGhyb3VnaCAzMiBhcmUgcmVzZXJ2ZWQgZm9yIEdvb2dsZSdzIGludGVybmFsIFJQQwogICBmcmFtZXdvcmsuICBXZSBhcG9sb2dpemUgZm9yIGhvYXJkaW5nIHRoZXNlIG51bWJlcnMgdG8gb3Vyc2VsdmVzLCBidXQKICAgd2Ugd2VyZSBhbHJlYWR5IHVzaW5nIHRoZW0gbG9uZyBiZWZvcmUgd2UgZGVjaWRlZCB0byByZWxlYXNlIFByb3RvY29sCiAgIEJ1ZmZlcnMuCgoNCgUEEQIABBIEowUCCgoNCgUEEQIABRIEowULDwoNCgUEEQIAARIEowUQGgoNCgUEEQIAAxIEowUdHwoNCgUEEQIACBIEowUgMQoNCgUEEQIABxIEowUrMArwAQoEBBEEABIGqAUCrAUDGt8BIElzIHRoaXMgbWV0aG9kIHNpZGUtZWZmZWN0LWZyZWUgKG9yIHNhZmUgaW4gSFRUUCBwYXJsYW5jZSksIG9yIGlkZW1wb3RlbnQsCiBvciBuZWl0aGVyPyBIVFRQIGJhc2VkIFJQQyBpbXBsZW1lbnRhdGlvbiBtYXkgY2hvb3NlIEdFVCB2ZXJiIGZvciBzYWZlCiBtZXRob2RzLCBhbmQgUFVUIHZlcmIgZm9yIGlkZW1wb3RlbnQgbWV0aG9kcyBpbnN0ZWFkIG9mIHRoZSBk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bXBsZSwgc2F5IHdlIGhhdmUgYSBmaWxlIGxpa2U6CiAgIG1lc3NhZ2UgRm9vIHsKICAgICBvcHRpb25hbCBzdHJpbmcgZm9vID0gMTsKICAgfQogTGV0J3MgbG9vayBhdCBqdXN0IHRoZSBmaWVsZCBkZWZpbml0aW9uOgogICBvcHRpb25hbCBzdHJpbmcgZm9vID0gMTsKICAgXiAgICAgICBeXiAgICAgXl4gIF4gIF5eXgogICBhICAgICAgIGJjICAgICBkZSAgZiAgZ2hpCiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgogICBzcGFuICAgcGF0aCAgICAgICAgICAgICAgIHJlcHJlc2VudHMKICAgW2EsaSkgIFsgNCwgMCwgMiwgMCBdICAgICBUaGUgd2hvbGUgZmllbGQgZGVmaW5pdGlvbi4KICAgW2EsYikgIFsgNCwgMCwgMiwgMCwgNCBdICBUaGUgbGFiZWwgKG9wdGlvbmFsKS4KICAgW2MsZCkgIFsgNCwgMCwgMiwgMCwgNSBdICBUaGUgdHlwZSAoc3RyaW5nKS4KICAgW2UsZikgIFsgNCwgMCwgMiwgMCwgMSBdICBUaGUgbmFtZSAoZm9vKS4KICAgW2csaCkgIFsgNCwgMCwgMiwgMCwgMyBdICBUaGUgbnVtYmVyICgxKS4KCiBOb3RlczoKIC0gQSBsb2NhdGlvbiBtYXkgcmVmZXIgdG8gYSByZXBlYXRlZCBmaWVsZCBpdHNlbGYgKGkuZS4gbm90IHRvIGFueQogICBwYXJ0aWN1bGFyIGluZGV4IHdpdGhpbiBpdCkuICBUaGlzIGlzIHVzZWQgd2hlbmV2ZXIgYSBzZXQgb2YgZWxlbWVudHMgYXJlCiAgIGxvZ2ljYWxseSBlbmNsb3NlZCBpbiBhIHNpbmdsZSBjb2RlIHNlZ21lbnQuICBGb3IgZXhhbXBsZSwgYW4gZW50aXJlCiAgIGV4dGVuZCBibG9jayAocG9zc2libHkgY29udGFpbmluZyBtdWx0aXBsZSBleHRlbnNpb24gZGVmaW5pdGlvbnMpIHdpbGwKICAgaGF2ZSBhbiBvdXRlciBsb2NhdGlvbiB3aG9zZSBwYXRoIHJlZmVycyB0byB0aGUgImV4dGVuc2lvbnMiIHJlcGVhdGVkCiAgIGZpZWxkIHdpdGhvdXQgYW4gaW5kZXguCiAtIE11bHRpcGxlIGxvY2F0aW9ucyBtYXkgaGF2ZSB0aGUgc2FtZSBwYXRoLiAgVGhpcyBoYXBwZW5zIHdoZW4gYSBzaW5nbGUKICAgbG9naWNhbCBkZWNsYXJhdGlvbiBpcyBzcHJlYWQgb3V0IGFjcm9zcyBtdWx0aXBsZSBwbGFjZXMuICBUaGUgbW9zdAogICBvYnZpb3VzIGV4YW1wbGUgaXMgdGhlICJleHRlbmQiIGJsb2NrIGFnYWluIC0tIHRoZXJlIG1heSBiZSBtdWx0aXBsZQogICBleHRlbmQgYmxvY2tzIGluIHRoZSBzYW1lIHNjb3BlLCBlYWNoIG9mIHdoaWNoIHdpbGwgaGF2ZSB0aGUgc2FtZSBwYXRoLgogLSBBIGxvY2F0aW9uJ3Mgc3BhbiBpcyBub3QgYWx3YXlzIGEgc3Vic2V0IG9mIGl0cyBwYXJlbnQncyBzcGFuLiAgRm9yCiAgIGV4YW1wbGUsIHRoZSAiZXh0ZW5kZWUiIG9mIGFuIGV4dGVuc2lvbiBkZWNsYXJhdGlvbiBhcHBlYXJzIGF0IHRoZQogICBiZWdpbm5pbmcgb2YgdGhlICJleHRlbmQiIGJsb2NrIGFuZCBpcyBzaGFyZWQgYnkgYWxsIGV4dGVuc2lvbnMgd2l0aGluCiAgIHRoZSBibG9jay4KIC0gSnVzdCBiZWNhdXNlIGEgbG9jYXRpb24ncyBzcGFuIGlzIGEgc3Vic2V0IG9mIHNvbWUgb3RoZXIgbG9jYXRpb24ncyBzcGFuCiAgIGRvZXMgbm90IG1lYW4gdGhhdCBpdCBpcyBhIGRlc2NlbmRhbnQuICBGb3IgZXhhbXBsZSwgYSAiZ3JvdXAiIGRlZmluZXMKICAgYm90aCBhIHR5cGUgYW5kIGEgZmllbGQgaW4gYSBzaW5nbGUgZGVjbGFyYXRpb24uICBUaHVzLCB0aGUgbG9jYXRpb25zCiAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR5cGUgYW5kIGZpZWxkIGFuZCB0aGVpciBjb21wb25lbnRzIHdpbGwgb3ZlcmxhcC4KIC0gQ29kZSB3aGljaCB0cmllcyB0byBpbnRlcnByZXQgbG9jYXRpb25zIHNob3VsZCBwcm9iYWJseSBiZSBkZXNpZ25lZCB0bwogICBpZ25vcmUgdGhvc2UgdGhhdCBpdCBkb2Vzbid0IHVuZGVyc3RhbmQsIGFzIG1vcmUgdHlwZXMgb2YgbG9jYXRpb25zIGNvdWxkCiAgIGJlIHJlY29yZGVkIGluIHRoZSBmdXR1cmUuCgoNCgUEEwIABBIEhQYCCgoNCgUEEwIABhIEhQYLEwoNCgUEEwIAARIEhQYUHAoNCgUEEwIAAxIEhQYfIAoOCgQEEwMAEgaGBgLZBgMKDQoFBBMDAAESBIYGChIKgwcKBgQTAwACABIEngYELBryBiBJZGVudGlmaWVzIHdoaWNoIHBhcnQgb2YgdGhlIEZpbGVEZXNjcmlwdG9yUHJvdG8gd2FzIGRlZmluZWQgYXQgdGhpcwogbG9jYXRpb24uCgogRWFjaCBlbGVtZW50IGlzIGEgZmllbGQgbnVtYmVyIG9yIGFuIGluZGV4LiAgVGhleSBmb3JtIGEgcGF0aCBmcm9tCiB0aGUgcm9vdCBGaWxlRGVzY3JpcHRvclByb3RvIHRvIHRoZSBwbGFjZSB3aGVyZSB0aGUgZGVmaW5pdGlvbi4gIEZvcgogZXhhbXBsZSwgdGhpcyBwYXRoOgogICBbIDQsIDMsIDIsIDcsIDEgXQogcmVmZXJzIHRvOgogICBmaWxlLm1lc3NhZ2VfdHlwZSgzKSAgLy8gNCwgMwogICAgICAgLmZpZWxkKDcpICAgICAgICAgLy8gMiwgNwogICAgICAgLm5hbWUoKSAgICAgICAgICAgLy8gMQogVGhpcyBpcyBiZWNhdXNlIEZpbGVEZXNjcmlwdG9yUHJvdG8ubWVzc2FnZV90eXBlIGhhcyBmaWVsZCBudW1iZXIgNDoKICAgcmVwZWF0ZWQgRGVzY3JpcHRvclByb3RvIG1lc3NhZ2VfdHlwZSA9IDQ7CiBhbmQgRGVzY3JpcHRvclByb3RvLmZpZWxkIGhhcyBmaWVsZCBudW1iZXIgMjoKICAgcmVwZWF0ZWQgRmllbGREZXNjcmlwdG9yUHJvdG8gZmllbGQgPSAyOwogYW5kIEZpZWxkRGVzY3JpcHRvclByb3RvLm5hbWUgaGFzIGZpZWxkIG51bWJlciAxOgogICBvcHRpb25hbCBzdHJpbmcgbmFtZSA9IDE7CgogVGh1cywgdGhlIGFib3ZlIHBhdGggZ2l2ZXMgdGhlIGxvY2F0aW9uIG9mIGEgZmllbGQgbmFtZS4gIElmIHdlIHJlbW92ZWQKIHRoZSBsYXN0IGVsZW1lbnQ6CiAgIFsgNCwgMywgMiwgNyBdCiB0aGlzIHBhdGggcmVmZXJzIHRvIHRoZSB3aG9sZSBmaWVsZCBkZWNsYXJhdGlvbiAoZnJvbSB0aGUgYmVnaW5uaW5nCiBvZiB0aGUgbGFiZWwgdG8gdGhlIHRlcm1pbmF0aW5nIHNlbWljb2xvbikuCgoPCgcEEwMAAgAEEgSeBgQMCg8KBwQTAwACAAUSBJ4GDRIKDwoHBBMDAAIAARIEngYTFwoPCgcEEwMAAgADEgSeBhobCg8KBwQTAwACAAgSBJ4GHCsKEAoIBBMDAAIACAISBJ4GHSoK0gIKBgQTAwACARIEpQYELBrBAiBBbHdheXMgaGFzIGV4YWN0bHkgdGhyZWUgb3IgZm91ciBlbGVtZW50czogc3RhcnQgbGluZSwgc3RhcnQgY29sdW1uLAogZW5kIGxpbmUgKG9wdGlvbmFsLCBvdGhlcndpc2UgYXNzdW1lZCBzYW1lIGFzIHN0YXJ0IGxpbmUpLCBlbmQgY29sdW1uLgogVGhlc2UgYXJlIHBhY2tlZCBpbnRvIGEgc2luZ2xlIGZpZWxkIGZvciBlZmZpY2llbmN5LiAgTm90ZSB0aGF0IGxpbmUKIGFuZCBjb2x1bW4gbnVtYmVycyBhcmUgemVyby1iYXNlZCAtLSB0eXBpY2FsbHkgeW91IHdpbGwgd2FudCB0byBhZGQKIDEgdG8gZWFjaCBiZWZvcmUgZGlzcGxheWluZyB0byBhIHVzZXIuCgoPCgcEEwMAAgEEEgSlBgQMCg8KBwQTAwACAQUSBKUGDRIKDwoHBBMDAAIBARIEpQYTFwoPCgcEEwMAAgEDEgSlBhobCg8KBwQTAwACAQgSBKUGHCsKEAoIBBMDAAIBCAISBKUGHSoKpQwKBgQTAwACAhIE1gYEKRqUDCBJZiB0aGlzIFNvdXJjZUNvZGVJbmZvIHJlcHJlc2VudHMgYSBjb21wbGV0ZSBkZWNsYXJhdGlvbiwgdGhlc2UgYXJlIGFueQogY29tbWVudHMgYXBwZWFyaW5nIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGRlY2xhcmF0aW9uIHdoaWNoIGFwcGVhciB0byBiZQogYXR0YWNoZWQgdG8gdGhlIGRlY2xhcmF0aW9uLgoKIEEgc2VyaWVzIG9mIGxpbmUgY29tbWVudHMgYXBwZWFyaW5nIG9uIGNvbnNlY3V0aXZlIGxpbmVzLCB3aXRoIG5vIG90aGVyCiB0b2tlbnMgYXBwZWFyaW5nIG9uIHRob3NlIGxpbmVzLCB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGUgY29tbWVudC4KCiBsZWFkaW5nX2RldGFjaGVkX2NvbW1lbnRzIHdpbGwga2VlcCBwYXJhZ3JhcGhzIG9mIGNvbW1lbnRzIHRoYXQgYXBwZWFyCiBiZWZvcmUgKGJ1dCBub3QgY29ubmVjdGVkIHRvKSB0aGUgY3VycmVudCBlbGVtZW50LiBFYWNoIHBhcmFncmFwaCwKIHNlcGFyYXRlZCBieSBlbXB0eSBsaW5lcywgd2lsbCBiZSBvbmUgY29tbWVudCBlbGVtZW50IGluIHRoZSByZXBlYXRlZAogZmllbGQuCgogT25seSB0aGUgY29tbWVudCBjb250ZW50IGlzIHByb3ZpZGVkOyBjb21tZW50IG1hcmtlcnMgKGUuZy4gLy8pIGFyZQogc3RyaXBwZWQgb3V0LiAgRm9yIGJsb2NrIGNvbW1lbnRzLCBsZWFkaW5nIHdoaXRlc3BhY2UgYW5kIGFuIGFzdGVyaXNrCiB3aWxsIGJlIHN0cmlwcGVkIGZyb20gdGhlIGJlZ2lubmluZyBvZiBlYWNoIGxpbmUgb3RoZXIgdGhhbiB0aGUgZmlyc3QuCiBOZXdsaW5lcyBhcmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC4KCiBFeGFtcGxlczoKCiAgIG9wdGlvbmFsIGludDMyIGZvbyA9IDE7ICAvLyBDb21tZW50IGF0dGFjaGVkIHRvIGZvby4KICAgLy8gQ29tbWVudCBhdHRhY2hlZCB0byBiYXIuCiAgIG9wdGlvbmFsIGludDMyIGJhciA9IDI7CgogICBvcHRpb25hbCBzdHJpbmcgYmF6ID0gMzsKICAgLy8gQ29tbWVudCBhdHRhY2hlZCB0byBiYXouCiAgIC8vIEFub3RoZXIgbGluZSBhdHRhY2hlZCB0byBi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DRIKDwoHBBQDAAICARIE7QYTGAoPCgcEFAMAAgIDEgTtBhscCtsBCgYEFAMAAgMSBPIGBBsaygEgSWRlbnRpZmllcyB0aGUgZW5kaW5nIG9mZnNldCBpbiBieXRlcyBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUgdGhhdAogcmVsYXRlcyB0byB0aGUgaWRlbnRpZmllZCBvZmZzZXQuIFRoZSBlbmQgb2Zmc2V0IHNob3VsZCBiZSBvbmUgcGFzdAogdGhlIGxhc3QgcmVsZXZhbnQgYnl0ZSAoc28gdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCA9IGVuZCAtIGJlZ2luKS4KCg8KBwQUAwACAwQSBPIGBAwKDwoHBBQDAAIDBRIE8gYNEgoPCgcEFAMAAgMBEgTyBhMWCg8KBwQUAwACAwMSBPIGGRoK1IIBCiR1bml0dGVzdF9jdXN0b21fb3B0aW9uc19wcm90bzMucHJvdG8SEXByb3RvYnVmX3VuaXR0ZXN0GiBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90byLrAQocVGVzdE1lc3NhZ2VXaXRoQ3VzdG9tT3B0aW9ucxImCgZmaWVsZDEYASABKAlCDggBweDDHS3hdQoCAAAAUgZmaWVsZDESIQoLb25lb2ZfZmllbGQYAiABKAVIAFIKb25lb2ZGaWVsZCJTCgZBbkVudW0SFgoSQU5FTlVNX1VOU1BFQ0lGSUVEEAASDwoLQU5FTlVNX1ZBTDEQARIWCgtBTkVOVU1fVkFMMhACGgWwhvoFexoIxfbJHev8//86EAgA4OnCHcj//////////wFCGQoHQW5PbmVvZhIO+KzDHZ3//////////wEiGAoWQ3VzdG9tT3B0aW9uRm9vUmVxdWVzdCIZChdDdXN0b21PcHRpb25Gb29SZXNwb25zZSIeChxDdXN0b21PcHRpb25Gb29DbGllbnRNZXNzYWdlIh4KHEN1c3RvbU9wdGlvbkZvb1NlcnZlck1lc3NhZ2UijwEKGkR1bW15TWVzc2FnZUNvbnRhaW5pbmdFbnVtInEKDFRlc3RFbnVtVHlwZRIgChxURVNUX09QVElPTl9FTlVNX1VOU1BFQ0lGSUVEEAASGgoWVEVTVF9PUFRJT05fRU5VTV9UWVBFMRAWEiMKFlRFU1RfT1BUSU9OX0VOVU1fVFlQRTIQ6f//////////ASIhCh9EdW1teU1lc3NhZ2VJbnZhbGlkQXNPcHRpb25UeXBlIooBChxDdXN0b21PcHRpb25NaW5JbnRlZ2VyVmFsdWVzOmrQ3rIdAOjGsh2AgICA+P////8BsLyyHYCAgICAgICAgAGAk7IdAPj1sB0AgMSwHf////8P+JewHf///////////wGd9a8dAAAAAJHurx0AAAAAAAAAAK2Nrx0AAACAmdaoHQAAAAAAAACAIpEBChxDdXN0b21PcHRpb25NYXhJbnRlZ2VyVmFsdWVzOnHQ3rIdAejGsh3/////B7C8sh3//////////3+Ak7Id/////w/49bAd////////////AYDEsB3+////D/iXsB3+//////////8BnfWvHf////+R7q8d//////////+tja8d////f5nWqB3/////////fyJuChdDdXN0b21PcHRpb25PdGhlclZhbHVlczpT6MayHZz//////////wH136Md54dFQencoh37WYxCysDzP6rcoh0OSGVsbG8sICJXb3JsZCKy2aIdC0hlbGxvAFdvcmxkiNmiHen//////////wEiNAocU2V0dGluZ1JlYWxzRnJvbVBvc2l0aXZlSW50czoU9d+jHQAAQEHp3KIdAAAAAABAY0AiNAocU2V0dGluZ1JlYWxzRnJvbU5lZ2F0aXZlSW50czoU9d+jHQAAQMHp3KIdAAAAAABAY8AiYgoSQ29tcGxleE9wdGlvblR5cGUxEhAKA2ZvbxgBIAEoBVIDZm9vEhIKBGZvbzIYAiABKAVSBGZvbzISEgoEZm9vMxgDIAEoBVIEZm9vMxISCgRmb280GAQgAygFUgRmb280Iq0DChJDb21wbGV4T3B0aW9uVHlwZTISNwoDYmFyGAEgASgLMiUucHJvdG9idWZfdW5pdHRlc3QuQ29tcGxleE9wdGlvblR5cGUxUgNiYXISEAoDYmF6GAIgASgFUgNiYXoSTAoEZnJlZBgDIAEoCzI4LnByb3RvYnVmX3VuaXR0ZXN0LkNvbXBsZXhPcHRpb25UeXBlMi5Db21wbGV4T3B0aW9uVHlwZTRSBGZyZWQSUAoGYmFybmV5GAQgAygLMjgucHJvdG9idWZfdW5pdHRlc3QuQ29tcGxleE9wdGlvblR5cGUyLkNvbXBsZXhPcHRpb25UeXBlNFIGYmFybmV5GqsBChJDb21wbGV4T3B0aW9uVHlwZTQSFAoFd2FsZG8YASABKAVSBXdhbGRvMn8KDGNvbXBsZXhfb3B0NBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiK9dEDIAEoCzI4LnByb3RvYnVmX3VuaXR0ZXN0LkNvbXBsZXhPcHRpb25UeXBlMi5Db21wbGV4T3B0aW9uVHlwZTRSC2NvbXBsZXhPcHQ0IiYKEkNvbXBsZXhPcHRpb25UeXBlMxIQCgNxdXgYASABKAVSA3F1eCJsChVWYXJpb3VzQ29tcGxleE9wdGlvbnM6U6LilR0CCCqi4pUdAiBjouKVHQIgWKr9kB0DENsHqv2QHQUKAwjnBdKojx0DCLMPqv2QHQUaAwjBAqr9kB0EIgIIZar9kB0FIgMI1AH63pAdAggJIlcKCUFnZ3JlZ2F0ZRIMCgFpGAEgASgFUgFpEgwKAXMYAiABKAlSAXMSLgoDc3ViGAMgASgLMhwucHJvdG9idWZfdW5pdHRlc3QuQWdncmVnYXRlUgNzdWIiZAoQQWdncmVnYXRlTWVzc2FnZRI0CglmaWVsZG5hbWUYASABKAVCFvKhhzsREg9GaWVsZEFubm90YXRpb25SCWZpZWxkbmFtZToawtGGOxUIZRIRTWVzc2FnZUFubm90YXRpb24ipAEKEE5lc3RlZE9wdGlvblR5cGUaSAoNTmVzdGVkTWVzc2FnZRIvCgxuZXN0ZWRfZmllbGQYASABKAVCDMHgwx3qAwAAAAAAAFILbmVzdGVkRmllbGQ6BuDpwh3pByJGCgpOZXN0ZWRFbnVtEg8KC1VOU1BFQ0lGSUVEEAASHQoRTkVTVEVEX0VOVU1fVkFMVUUQARoGsIb6BewHGgjF9skd6wMAACpSCgpNZXRob2RPcHQxEhoKFk1FVEhPRE9QVDFfVU5TUEVDSUZJRUQQABITCg9NRVRIT0RPUFQxX1ZBTDEQARITCg9NRVRIT0RPUFQxX1ZBTDIQAipeCg1BZ2dyZWdhdGVFbnVtEg8KC1VOU1BFQ0lGSUVEEAASJQoFVkFMVUUQARoayvyJOxUSE0VudW1WYWx1ZUFubm90YXRpb24aFZKViDsQEg5FbnVtQW5ub3RhdGlvbjKOAQocVGVzdFNlcnZpY2VXaXRoQ3VzdG9tT3B0aW9ucxJjCgNGb28SKS5wcm90b2J1Zl91bml0dGVzdC5DdXN0b21PcHRpb25Gb29SZXF1ZXN0GioucHJvdG9idWZfdW5pdHRlc3QuQ3VzdG9tT3B0aW9uRm9vUmVzcG9uc2UiBeD6jB4CGgmQsose09uAy0kymQEKEEFnZ3JlZ2F0ZVNlcnZpY2USawoGTWV0aG9kEiMucHJvdG9idWZfdW5pdHRlc3QuQWdncmVnYXRlTWVzc2FnZRojLnByb3RvYnVmX3VuaXR0ZXN0LkFnZ3JlZ2F0ZU1lc3NhZ2UiF8rIljsSEhBNZXRob2RBbm5vdGF0aW9uGhjK+447ExIRU2VydmljZUFubm90YXRpb246PAoJZmlsZV9vcHQxEhwuZ29vZ2xlLnByb3RvYnVmLkZpbGVPcHRpb25zGI6d2AMgASgEUghmaWxlT3B0MTpFCgxtZXNzYWdlX29wdDESHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYnK3YAyABKAVSC21lc3NhZ2VPcHQxOj8KCmZpZWxkX29wdDESHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGIi82AMgASgGUglmaWVsZE9wdDE6PwoKb25lb2Zfb3B0MRIdLmdvb2dsZS5wcm90b2J1Zi5PbmVvZk9wdGlvbnMYz7XYAyABKAVSCW9uZW9mT3B0MTo8CgllbnVtX29wdDESHC5nb29nbGUucHJvdG9idWYuRW51bU9wdGlvbnMY6J7ZAyABKA9SCGVudW1PcHQxOksKD2VudW1fdmFsdWVfb3B0MRIhLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zGOagXyABKAVSDWVudW1WYWx1ZU9wdDE6RQoMc2VydmljZV9vcHQxEh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zGKK24QMgASgSUgtzZXJ2aWNlT3B0MTphCgttZXRob2Rfb3B0MRIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zGKzP4QMgASgOMh0ucHJvdG9idWZfdW5pdHRlc3QuTWV0aG9kT3B0MVIKbWV0aG9kT3B0MTo9Cghib29sX29wdBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxjqq9YDIAEoCFIHYm9vbE9wdDo/CglpbnQzMl9vcHQSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMY7ajWAyABKAVSCGludDMyT3B0Oj8KCWludDY0X29wdBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxjGp9YDIAEoA1IIaW50NjRPcHQ6QQoKdWludDMyX29wdBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiwotYDIAEoDVIJdWludDMyT3B0OkEKCnVpbnQ2NF9vcHQSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMY347WAyABKARSCXVpbnQ2NE9wdDpBCgpzaW50MzJfb3B0Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGMCI1gMgASgRUglzaW50MzJPcHQ6QQoKc2ludDY0X29wdBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxj/gtYDIAEoElIJc2ludDY0T3B0OkMKC2ZpeGVkMzJfb3B0Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGNP+1QMgASgHUgpmaXhlZDMyT3B0OkMKC2ZpeGVkNjRfb3B0Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGOL91QMgASgGUgpmaXhlZDY0T3B0OkUKDHNmaXhlZDMyX29wdBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxjV8dUDIAEoD1ILc2ZpeGVkMzJPcHQ6RQoMc2ZpeGVkNjRfb3B0Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGOOK1QMgASgQUgtzZml4ZWQ2NE9wdDo/CglmbG9hdF9vcHQSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMY/rvUAyABKAJSCGZsb2F0T3B0OkEKCmRvdWJsZV9vcHQSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYzavUAyABKAFSCWRvdWJsZU9wdDpBCgpzdHJpbmdfb3B0Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGMWr1AMgASgJUglzdHJpbmdPcHQ6PwoJYnl0ZXNfb3B0Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGJar1AMgASgMUghieXRlc09wdDp5CghlbnVtX29wdBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiRq9QDIAEoDjI6LnByb3RvYnVmX3VuaXR0ZXN0LkR1bW15TWVzc2FnZUNvbnRhaW5pbmdFbnVtLlRlc3RFbnVtVHlwZVIHZW51bU9wdDqAAQoQbWVzc2FnZV90eXBlX29wdBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiv8tMDIAEoCzIyLnByb3RvYnVmX3VuaXR0ZXN0LkR1bW15TWVzc2FnZUludmFsaWRBc09wdGlvblR5cGVSDm1lc3NhZ2VUeXBlT3B0OmwKDGNvbXBsZXhfb3B0MRIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxik3NIDIAEoCzIlLnByb3RvYnVmX3VuaXR0ZXN0LkNvbXBsZXhPcHRpb25UeXBlMVILY29tcGxleE9wdDE6bAoMY29tcGxleF9vcHQyEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGNWP0gMgASgLMiUucHJvdG9idWZfdW5pdHRlc3QuQ29tcGxleE9wdGlvblR5cGUyUgtjb21wbGV4T3B0MjpsCgxjb21wbGV4X29wdDMSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMY74vSAyABKAsyJS5wcm90b2J1Zl91bml0dGVzdC5Db21wbGV4T3B0aW9uVHlwZTNSC2NvbXBsZXhPcHQzOlcKB2ZpbGVvcHQSHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMYz92wByABKAsyHC5wcm90b2J1Zl91bml0dGVzdC5BZ2dyZWdhdGVSB2ZpbGVvcHQ6WAoGbXNnb3B0Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGJjqsAcgASgLMhwucHJvdG9idWZfdW5pdHRlc3QuQWdncmVnYXRlUgZtc2dvcHQ6WgoIZmllbGRvcHQSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGJ70sAcgASgLMhwucHJvdG9idWZfdW5pdHRlc3QuQWdncmVnYXRlUghmaWVsZG9wdDpXCgdlbnVtb3B0EhwuZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zGNKCsQcgASgLMhwucHJvdG9idWZfdW5pdHRlc3QuQWdncmVnYXRlUgdlbnVtb3B0OmIKCmVudW12YWxvcHQSIS5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlT3B0aW9ucxjJn7EHIAEoCzIcLnByb3RvYnVmX3VuaXR0ZXN0LkFnZ3JlZ2F0ZVIKZW51bXZhbG9wdDpgCgpzZXJ2aWNlb3B0Eh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zGLnvsQcgASgLMhwucHJvdG9idWZfdW5pdHRlc3QuQWdncmVnYXRlUgpzZXJ2aWNlb3B0Ol0KCW1ldGhvZG9wdBIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zGInpsgcgASgLMhwucHJvdG9idWZfdW5pdHRlc3QuQWdncmVnYXRlUgltZXRob2RvcHRCVaoCGlVuaXRUZXN0Lklzc3Vlcy5UZXN0UHJvdG9z8OjBHeqtwOUk+uyFOyoIZBIORmlsZUFubm90YXRpb24aFhIUTmVzdGVkRmlsZUFubm90YXRpb25Kk1cKBxIFLADPAgEK9hAKAQwSAywAEjLBDCBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKIG1ldDoKCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogZGlzdHJpYnV0aW9uLgogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KMtMBIEF1dGhvcjogYmVuanlAZ29vZ2xlLmNvbSAoQmVuankgV2VpbmJlcmdlcikKICBCYXNlZCBvbiBvcmlnaW5hbCBQcm90b2NvbCBCdWZmZXJzIGRlc2lnbiBieQogIFNhbmpheSBHaGVtYXdhdCwgSmVmZiBEZWFuLCBhbmQgb3RoZXJzLgoKIEEgcHJvdG8gZmlsZSB1c2VkIHRvIHRlc3QgdGhlICJjdXN0b20gb3B0aW9ucyIgZmVhdHVyZSBvZiBnb29nbGUucHJvdG9idWYuCjLRAiBUaGlzIGZpbGUgaXMgYmFzZWQgb24gdW5pdHRlc3RfY3VzdG9tX29wdGlvbnMucHJvdG8gaW4KIHNyYy9nb29nbGUvcHJvdG9idWYsIGJ1dCBpcyBtb2RpZmllZCBmb3IgcHJvdG8zLiBJdCBjb3VsZAogcG90ZW50aWFsbHkgYmUgbW92ZWQgaW50byBzcmMvZ29vZ2xlL3Byb3RvYnVmLCBidXQgY3VycmVudGx5IEMjCiBpcyB0aGUgb25seSBsYW5ndWFnZSB0aGF0IHJlYWxseSBuZWVkcyBpdCwgYXMgd2UgZG9uJ3Qgc3VwcG9ydAogcHJvdG8yIHN5bnRheC4gSXQncyBjdXQgZG93biBzaWduaWZpY2FudGx5IGFzIHByb3RvMyBvbmx5IHN1cHBvcnRzCiBleHRlbnNpb25zIGZvciBvcHRpb25zLgoKCAoBCBIDLwAgCjUKBQiOndgDEgMvACAaJyBBIGN1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ZiI2CgNBbnkSGQoIdHlwZV91cmwYASABKAlSB3R5cGVVcmwSFAoFdmFsdWUYAiABKAxSBXZhbHVlQm8KE2NvbS5nb29nbGUucHJvdG9idWZCCEFueVByb3RvUAFaJWdpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3B0eXBlcy9hbnmiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNKgSsKBxIFHgCaAQEKzAwKAQwSAx4AEjLBDCBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKIG1ldDoKCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogZGlzdHJpYnV0aW9uLgogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KCggKAQISAyAAGAoICgEIEgMiADsKCQoCCCUSAyIAOwoICgEIEgMjADwKCQoCCAsSAyMAPAoICgEIEgMkACwKCQoCCAESAyQALAoICgEIEgMlACkKCQoCCAgSAyUAKQoICgEIEgMmACIKCQoCCAoSAyYAIgoICgEIEgMnACEKCQoCCCQSAycAIQrkEAoCBAASBXkAmgEBGtYQIGBBbnlgIGNvbnRhaW5zIGFuIGFyYml0cmFyeSBzZXJpYWxpemVkIHByb3RvY29sIGJ1ZmZlciBtZXNzYWdlIGFsb25nIHdpdGggYQogVVJMIHRoYXQgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBzZXJpYWxpemVkIG1lc3NhZ2UuCgogUHJvdG9idWYgbGlicmFyeSBwcm92aWRlcyBzdXBwb3J0IHRvIHBhY2svdW5wYWNrIEFueSB2YWx1ZXMgaW4gdGhlIGZvcm0KIG9mIHV0aWxpdHkgZnVuY3Rpb25zIG9yIGFkZGl0aW9uYWwgZ2VuZXJhdGVkIG1ldGhvZHMgb2YgdGhlIEFueSB0eXBlLgoKIEV4YW1wbGUgMTogUGFjayBhbmQgdW5wYWNrIGEgbWVzc2FnZSBpbiBDKysuCgogICAgIEZvbyBmb28gPSAuLi47CiAgICAgQW55IGFueTsKICAgICBhbnkuUGFja0Zyb20oZm9vKTsKICAgICAuLi4KICAgICBpZiAoYW55LlVucGFja1RvKCZmb28pKSB7CiAgICAgICAuLi4KICAgICB9CgogRXhhbXBsZSAyOiBQYWNrIGFuZCB1bnBhY2sgYSBtZXNzYWdlIGluIEphdmEuCgogICAgIEZvbyBmb28gPSAuLi47CiAgICAgQW55IGFueSA9IEFueS5wYWNrKGZvbyk7CiAgICAgLi4uCiAgICAgaWYgKGFueS5pcyhGb28uY2xhc3MpKSB7CiAgICAgICBmb28gPSBhbnkudW5wYWNrKEZvby5jbGFzcyk7CiAgICAgfQoKICBFeGFtcGxlIDM6IFBhY2sgYW5kIHVucGFjayBhIG1lc3NhZ2UgaW4gUHl0aG9uLgoKICAgICBmb28gPSBGb28oLi4uKQogICAgIGFueSA9IEFueSgpCiAgICAgYW55LlBhY2soZm9vKQogICAgIC4uLgogICAgIGlmIGFueS5JcyhGb28uREVTQ1JJUFRPUik6CiAgICAgICBhbnkuVW5wYWNrKGZvbykKICAgICAgIC4uLgoKICBFeGFtcGxlIDQ6IFBhY2sgYW5kIHVucGFjayBhIG1lc3NhZ2UgaW4gR28KCiAgICAgIGZvbyA6PSAmcGIuRm9vey4uLn0KICAgICAgYW55LCBlcnIgOj0gcHR5cGVzLk1hcnNoYWxBbnkoZm9vKQogICAgICAuLi4KICAgICAgZm9vIDo9ICZwYi5Gb297fQogICAgICBpZiBlcnIgOj0gcHR5cGVzLlVubWFyc2hhbEFueShhbnksIGZvbyk7IGVyciAhPSBuaWwgewogICAgICAgIC4uLgogICAgICB9CgogVGhlIHBhY2sgbWV0aG9kcyBwcm92aWRlZCBieSBwcm90b2J1ZiBsaWJyYXJ5IHdpbGwgYnkgZGVmYXVsdCB1c2UKICd0eXBlLmdvb2dsZWFwaXMuY29tL2Z1bGwudHlwZS5uYW1lJyBhcyB0aGUgdHlwZSBVUkwgYW5kIHRoZSB1bnBhY2sKIG1ldGhvZHMgb25seSB1c2UgdGhlIGZ1bGx5IHF1YWxpZmllZCB0eXBlIG5hbWUgYWZ0ZXIgdGhlIGxhc3QgJy8nCiBpbiB0aGUgdHlwZSBVUkwsIGZvciBleGFtcGxlICJmb28uYmFyLmNvbS94L3kueiIgd2lsbCB5aWVsZCB0eXBlCiBuYW1lICJ5LnoiLgoKCiBKU09OCiA9PT09CiBUaGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhbiBgQW55YCB2YWx1ZSB1c2VzIHRoZSByZWd1bGFyCiByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGVzZXJpYWxpemVkLCBlbWJlZGRlZCBtZXNzYWdlLCB3aXRoIGFuCiBhZGRpdGlvbmFsIGZpZWxkIGBAdHlwZWAgd2hpY2ggY29udGFpbnMgdGhlIHR5cGUgVVJMLiBFeGFtcGxlOgoKICAgICBwYWNrYWdlIGdvb2dsZS5wcm9maWxlOwogICAgIG1lc3NhZ2UgUGVyc29uIHsKICAgICAgIHN0cmluZyBmaXJzdF9uYW1lID0gMTsKICAgICAgIHN0cmluZyBsYXN0X25hbWUgPSAyOwogICAgIH0KCiAgICAgewogICAgICAgIkB0eXBlIjogInR5cGUuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLnByb2ZpbGUuUGVyc29uIiwKICAgICAgICJmaXJzdE5hbWUiOiA8c3RyaW5nPiwKICAgICAgICJsYXN0TmFtZSI6IDxzdHJpbmc+CiAgICAgfQoKIElmIHRoZSBlbWJlZGRlZCBtZXNzYWdlIHR5cGUgaXMgd2VsbC1rbm93biBhbmQgaGFzIGEgY3VzdG9tIEpTT04KIHJlcHJlc2VudGF0aW9uLCB0aGF0IHJlcHJlc2VudGF0aW9uIHdpbGwgYmUgZW1iZWRkZWQgYWRkaW5nIGEgZmllbGQKIGB2YWx1ZWAgd2hpY2ggaG9sZHMgdGhlIGN1c3RvbSBKU09OIGluIGFkZGl0aW9uIHRvIHRoZSBgQHR5cGVgCiBmaWVsZC4gRXhhbXBsZSAoZm9yIG1lc3NhZ2UgW2dvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbl1bXSk6CgogICAgIHsKICAgICAgICJAdHlwZSI6ICJ0eXBlLmdvb2dsZWFwaXMuY29tL2dvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbiIsCiAgICAgICAidmFsdWUiOiAiMS4yMTJzIgogICAgIH0KCgoKCgMEAAESA3kICwrXCgoEBAACABIElgECFhrICiBBIFVSTC9yZXNvdXJjZSBuYW1lIHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgdHlwZSBvZiB0aGUgc2VyaWFsaXplZAogcHJvdG9jb2wgYnVmZmVyIG1lc3NhZ2UuIFRoaXMgc3RyaW5nIG11c3QgY29udGFpbiBhdCBsZWFzdAogb25lICIvIiBjaGFyYWN0ZXIuIFRoZSBsYXN0IHNlZ21lbnQgb2YgdGhlIFVSTCdzIHBhdGggbXVzdCByZXByZXNlbnQKIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgdHlwZSAoYXMgaW4KIGBwYXRoL2dvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbmApLiBUaGUgbmFtZSBzaG91bGQgYmUgaW4gYSBjYW5vbmljYWwgZm9ybQogKGUuZy4sIGxlYWRpbmcgIi4iIGlzIG5vdCBhY2NlcHRlZCkuCgogSW4gcHJhY3RpY2UsIHRlYW1zIHVzdWFsbHkgcHJlY29tcGlsZSBpbnRvIHRoZSBiaW5hcnkgYWxsIHR5cGVzIHRoYXQgdGhleQogZXhwZWN0IGl0IHRvIHVzZSBpbiB0aGUgY29udGV4dCBvZiBBbnkuIEhvd2V2ZXIsIGZvciBVUkxzIHdoaWNoIHVzZSB0aGUKIHNjaGVtZSBgaHR0cGAsIGBodHRwc2AsIG9yIG5vIHNjaGVtZSwgb25lIGNhbiBvcHRpb25hbGx5IHNldCB1cCBhIHR5cGUKIHNlcnZlciB0aGF0IG1hcHMgdHlwZSBVUkxzIHRvIG1lc3NhZ2UgZGVmaW5pdGlvbnMgYXMgZm9sbG93czoKCiAqIElmIG5vIHNjaGVtZSBpcyBwcm92aWRlZCwgYGh0dHBzYCBpcyBhc3N1bWVkLgogKiBBbiBIVFRQIEdFVCBvbiB0aGUgVVJMIG11c3QgeWllbGQgYSBbZ29vZ2xlLnByb3RvYnVmLlR5cGVdW10KICAgdmFsdWUgaW4gYmluYXJ5IGZvcm1hdCwgb3IgcHJvZHVjZSBhbiBlcnJvci4KICogQXBwbGljYXRpb25zIGFyZSBhbGxvd2VkIHRvIGNhY2hlIGxvb2t1cCByZXN1bHRzIGJhc2VkIG9uIHRoZQogICBVUkwsIG9yIGhhdmUgdGhlbSBwcmVjb21waWxlZCBpbnRvIGEgYmluYXJ5IHRvIGF2b2lkIGFueQogICBsb29rdXAuIFRoZXJlZm9yZSwgYmluYXJ5IGNvbXBhdGliaWxpdHkgbmVlZHMgdG8gYmUgcHJlc2VydmVkCiAgIG9uIGNoYW5nZXMgdG8gdHlwZXMuIChVc2UgdmVyc2lvbmVkIHR5cGUgbmFtZXMgdG8gbWFuYWdlCiAgIGJyZWFraW5nIGNoYW5nZXMuKQoKIE5vdGU6IHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3QgY3VycmVudGx5IGF2YWlsYWJsZSBpbiB0aGUgb2ZmaWNpYWwKIHByb3RvYnVmIHJlbGVhc2UsIGFuZCBpdCBpcyBub3QgdXNlZCBmb3IgdHlwZSBVUkxzIGJlZ2lubmluZyB3aXRoCiB0eXBlLmdvb2dsZWFwaXMuY29tLgoKIFNjaGVtZXMgb3RoZXIgdGhhbiBgaHR0cGAsIGBodHRwc2AgKG9yIHRoZSBlbXB0eSBzY2hlbWUpIG1pZ2h0IGJlCiB1c2VkIHdpdGggaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgc2VtYW50aWNzLgoKCg4KBQQAAgAEEgWWAQJ5DQoNCgUEAAIABRIElgECCAoNCgUEAAIAARIElgEJEQoNCgUEAAIAAxIElgEUFQpXCgQEAAIBEgSZAQISGkkgTXVzdCBiZSBhIHZhbGlkIHNlcmlhbGl6ZWQgcHJvdG9jb2wgYnVmZmVyIG9mIHRoZSBhYm92ZSBzcGVjaWZpZWQgdHlwZS4KCg8KBQQAAgEEEgaZAQKWARYKDQoFBAACAQUSBJkBAgcKDQoFBAACAQESBJkBCA0KDQoFBAACAQMSBJkBEBFiBnByb3RvMwrYEgokZ29vZ2xlL3Byb3RvYnVmL3NvdXJjZV9jb250ZXh0LnByb3RvEg9nb29nbGUucHJvdG9idWYiLAoNU291cmNlQ29udGV4dBIbCglmaWxlX25hbWUYASABKAlSCGZpbGVOYW1lQpUBChNjb20uZ29vZ2xlLnByb3RvYnVmQhJTb3VyY2VDb250ZXh0UHJvdG9QAVpBZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8vcHJvdG9idWYvc291cmNlX2NvbnRleHQ7c291cmNlX2NvbnRleHSiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNK0BAKBhIEHgAvAQrMDAoBDBIDHgASMsEMIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwoKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogbWV0OgoKICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiBkaXN0cmlidXRpb24uCiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KCiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoKCAoBAhIDIAAYCggKAQgSAyIAOwoJCgIIJRIDIgA7CggKAQgSAyMALAoJCgIIARIDIwAsCggKAQgSAyQAMwoJCgIICBIDJAAzCggKAQgSAyUAIgoJCgIIChIDJQAiCggKAQgSAyYAIQoJCgIIJBIDJgAhCggKAQgSAycAWAoJCgIICxIDJwBYCoMBCgIEABIEKwAvARp3IGBTb3VyY2VDb250ZXh0YCByZXByZXNlbnRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzb3VyY2Ugb2YgYQogcHJvdG9idWYgZWxlbWVudCwgbGlrZSB0aGUgZmlsZSBpbiB3aGljaCBpdCBpcyBkZWZpbmVkLgoKCgoDBAABEgMrCBUKowEKBAQAAgASAy4CFxqVASBUaGUgcGF0aC1xdWFsaWZpZWQgbmFtZSBvZiB0aGUgLnByb3RvIGZpbGUgdGhhdCBjb250YWluZWQgdGhlIGFzc29jaWF0ZWQKIHByb3RvYnVmIGVsZW1lbnQuICBGb3IgZXhhbXBsZTogYCJnb29nbGUvcHJvdG9idWYvc291cmNlX2NvbnRleHQucHJvdG8iYC4KCg0KBQQAAgAEEgQuAisXCgwKBQQAAgAFEgMuAggKDAoFBAACAAESAy4JEgoMCgUEAAIAAxIDLhUWYgZwcm90bzMKnEkKGmdvb2dsZS9wcm90b2J1Zi90eXBlLnByb3RvEg9nb29nbGUucHJvdG9idWYaGWdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8aJGdvb2dsZS9wcm90b2J1Zi9zb3VyY2VfY29udGV4dC5wcm90byKNAgoEVHlwZRISCgRuYW1lGAEgASgJUgRuYW1lEi4KBmZpZWxkcxgCIAMoCzIWLmdvb2dsZS5wcm90b2J1Zi5GaWVsZFIGZmllbGRzEhYKBm9uZW9mcxgDIAMoCVIGb25lb2ZzEjEKB29wdGlvbnMYBCADKAsyFy5nb29nbGUucHJvdG9idWYuT3B0aW9uUgdvcHRpb25zEkUKDnNvdXJjZV9jb250ZXh0GAUgASgLMh4uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvbnRleHRSDXNvdXJjZUNvbnRleHQSLwoGc3ludGF4GAYgASgOMhcuZ29vZ2xlLnByb3RvYnVmLlN5bnRheFIGc3ludGF4IrQGCgVGaWVsZBIvCgRraW5kGAEgASgOMhsuZ29vZ2xlLnByb3RvYnVmLkZpZWxkLktpbmRSBGtpbmQSRAoLY2FyZGluYWxpdHkYAiABKA4yIi5nb29nbGUucHJvdG9idWYuRmllbGQuQ2FyZGluYWxpdHlSC2NhcmRpbmFsaXR5EhYKBm51bWJlchgDIAEoBVIGbnVtYmVyEhIKBG5hbWUYBCABKAlSBG5hbWUSGQoIdHlwZV91cmwYBiABKAlSB3R5cGVVcmwSHwoLb25lb2ZfaW5kZXgYByABKAVSCm9uZW9mSW5kZXgSFgoGcGFja2VkGAggASgIUgZwYWNrZWQSMQoHb3B0aW9ucxgJIAMoCzIXLmdvb2dsZS5wcm90b2J1Zi5PcHRpb25SB29wdGlvbnMSGwoJanNvbl9uYW1lGAogASgJUghqc29uTmFtZRIjCg1kZWZhdWx0X3ZhbHVlGAsgASgJUgxkZWZhdWx0VmFsdWUiyAIKBEtpbmQSEAoMVFlQRV9VTktOT1dOEAASDwoLVFlQRV9ET1VCTEUQARIOCgpUWVBFX0ZMT0FUEAISDgoKVFlQRV9JTlQ2NBADEg8KC1RZUEVfVUlOVDY0EAQSDgoKVFlQRV9JTlQzMhAFEhAKDFRZUEVfRklYRUQ2NBAGEhAKDFRZUEVfRklYRUQzMhAHEg0KCVRZUEVfQk9PTBAIEg8KC1RZUEVfU1RSSU5HEAkSDgoKVFlQRV9HUk9VUBAKEhAKDFRZUEVfTUVTU0FHRRALEg4KClRZUEVfQllURVMQDBIPCgtUWVBFX1VJTlQzMhANEg0KCVRZUEVfRU5VTRAOEhEKDVRZUEVfU0ZJWEVEMzIQDxIRCg1UWVBFX1NGSVhFRDY0EBASDwoLVFlQRV9TSU5UMzIQERIPCgtUWVBFX1NJTlQ2NBASInQKC0NhcmRpbmFsaXR5EhcKE0NBUkRJTkFMSVRZX1VOS05PV04QABIYChRDQVJESU5BTElUWV9PUFRJT05BTBABEhgKFENBUkRJTkFMSVRZX1JFUVVJUkVEEAISGAoUQ0FSRElOQUxJVFlfUkVQRUFURUQQAyL/AQoERW51bRISCgRuYW1lGAEgASgJUgRuYW1lEjgKCWVudW12YWx1ZRgCIAMoCzIaLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVSCWVudW12YWx1ZRIxCgdvcHRpb25zGAMgAygLMhcuZ29vZ2xlLnByb3RvYnVmLk9wdGlvblIHb3B0aW9ucxJFCg5zb3VyY2VfY29udGV4dBgEIAEoCzIeLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb250ZXh0Ug1zb3VyY2VDb250ZXh0Ei8KBnN5bnRheBgFIAEoDjIXLmdvb2dsZS5wcm90b2J1Zi5TeW50YXhSBnN5bnRheCJqCglFbnVtVmFsdWUSEgoEbmFtZRgBIAEoCVIEbmFtZRIWCgZudW1iZXIYAiABKAVSBm51bWJlchIxCgdvcHRpb25zGAMgAygLMhcuZ29vZ2xlLnByb3RvYnVmLk9wdGlvblIHb3B0aW9ucyJICgZPcHRpb24SEgoEbmFtZRgBIAEoCVIEbmFtZRIqCgV2YWx1ZRgCIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlSBXZhbHVlKi4KBlN5bnRheBIRCg1TWU5UQVhfUFJPVE8yEAASEQoNU1lOVEFYX1BST1RPMxABQn0KE2NvbS5nb29nbGUucHJvdG9idWZCCVR5cGVQcm90b1ABWi9nb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9wcm90b2J1Zi9wdHlwZTtwdHlwZfgBAaICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc0r1OgoHEgUeALoBAQrMDAoBDBIDHgASMsEMIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwoKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogbWV0OgoKICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiBkaXN0cmlidXRpb24uCiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KCiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoKCAoBAhIDIAAYCgkKAgMAEgMiACMKCQoCAwESAyMALgoICgEIEgMlADsKCQoCCCUSAyUAOwoICgEIEgMmAB8KCQoCCB8SAyYAHwoICgEIEgMnACwKCQoCCAESAycALAoICgEIEgMoACoKCQoCCAgSAygAKgoICgEIEgMpACIKCQoCCAoSAykAIgoICgEIEgMqACEKCQoCCCQSAyoAIQoICgEIEgMrAEYK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IHN0b3JlZCBhcyBhbiBpbnQzMgogdmFsdWUgdXNpbmcgdGhlIGdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlIHR5cGUuCgoPCgUEBAIBBBIGsQECrAESCg0KBQQEAgEGEgSxAQIFCg0KBQQEAgEBEgSxAQYLCg0KBQQEAgEDEgSxAQ4PCkkKAgUAEga1AQC6AQEaOyBUaGUgc3ludGF4IGluIHdoaWNoIGEgcHJvdG9jb2wgYnVmZmVyIGVsZW1lbnQgaXMgZGVmaW5lZC4KCgsKAwUAARIEtQEFCwogCgQFAAIAEgS3AQIUGhIgU3ludGF4IGBwcm90bzJgLgoKDQoFBQACAAESBLcBAg8KDQoFBQACAAISBLcBEhMKIAoEBQACARIEuQECFBoSIFN5bnRheCBgcHJvdG8zYC4KCg0KBQUAAgEBEgS5AQIPCg0KBQUAAgECEgS5ARITYgZwcm90bzMK0kQKGWdvb2dsZS9wcm90b2J1Zi9hcGkucHJvdG8SD2dvb2dsZS5wcm90b2J1ZhokZ29vZ2xlL3Byb3RvYnVmL3NvdXJjZV9jb250ZXh0LnByb3RvGhpnb29nbGUvcHJvdG9idWYvdHlwZS5wcm90byLBAgoDQXBpEhIKBG5hbWUYASABKAlSBG5hbWUSMQoHbWV0aG9kcxgCIAMoCzIXLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RSB21ldGhvZHMSMQoHb3B0aW9ucxgDIAMoCzIXLmdvb2dsZS5wcm90b2J1Zi5PcHRpb25SB29wdGlvbnMSGAoHdmVyc2lvbhgEIAEoCVIHdmVyc2lvbhJFCg5zb3VyY2VfY29udGV4dBgFIAEoCzIeLmdvb2dsZS5wcm90b2J1Zi5Tb3VyY2VDb250ZXh0Ug1zb3VyY2VDb250ZXh0Ei4KBm1peGlucxgGIAMoCzIWLmdvb2dsZS5wcm90b2J1Zi5NaXhpblIGbWl4aW5zEi8KBnN5bnRheBgHIAEoDjIXLmdvb2dsZS5wcm90b2J1Zi5TeW50YXhSBnN5bnRheCKyAgoGTWV0aG9kEhIKBG5hbWUYASABKAlSBG5hbWUSKAoQcmVxdWVzdF90eXBlX3VybBgCIAEoCVIOcmVxdWVzdFR5cGVVcmwSKwoRcmVxdWVzdF9zdHJlYW1pbmcYAyABKAhSEHJlcXVlc3RTdHJlYW1pbmcSKgoRcmVzcG9uc2VfdHlwZV91cmwYBCABKAlSD3Jlc3BvbnNlVHlwZVVybBItChJyZXNwb25zZV9zdHJlYW1pbmcYBSABKAhSEXJlc3BvbnNlU3RyZWFtaW5nEjEKB29wdGlvbnMYBiADKAsyFy5nb29nbGUucHJvdG9idWYuT3B0aW9uUgdvcHRpb25zEi8KBnN5bnRheBgHIAEoDjIXLmdvb2dsZS5wcm90b2J1Zi5TeW50YXhSBnN5bnRheCIvCgVNaXhpbhISCgRuYW1lGAEgASgJUgRuYW1lEhIKBHJvb3QYAiABKAlSBHJvb3RCdQoTY29tLmdvb2dsZS5wcm90b2J1ZkIIQXBpUHJvdG9QAVorZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8vcHJvdG9idWYvYXBpO2FwaaICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc0q4PQoHEgUeANEBAQrMDAoBDBIDHgASMsEMIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwoKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogbWV0OgoKICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiBkaXN0cmlidXRpb24uCiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KCiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoKCAoBAhIDIAAYCgkKAgMAEgMiAC4KCQoCAwESAyMAJAoICgEIEgMlADsKCQoCCCUSAyUAOwoICgEIEgMmACwKCQoCCAESAyYALAoICgEIEgMnACkKCQoCCAgSAycAKQoICgEIEgMoACIKCQoCCAoSAygAIgoICgEIEgMpACEKCQoCCCQSAykAIQoICgEIEgMqAEIKCQoCCAsSAyoAQgqrBAoCBAASBDUAYQEangQgQXBpIGlzIGEgbGlnaHQtd2VpZ2h0IGRlc2NyaXB0b3IgZm9yIGFuIEFQSSBJbnRlcmZhY2UuCgogSW50ZXJmYWNlcyBhcmUgYWxzbyBkZXNjcmliZWQgYXMgInByb3RvY29sIGJ1ZmZlciBzZXJ2aWNlcyIgaW4gc29tZSBjb250ZXh0cywKIHN1Y2ggYXMgYnkgdGhlICJzZXJ2aWNlIiBrZXl3b3JkIGluIGEgLnByb3RvIGZpbGUsIGJ1dCB0aGV5IGFyZSBkaWZmZXJlbnQKIGZyb20gQVBJIFNlcnZpY2VzLCB3aGljaCByZXByZXNlbnQgYSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBhbiBpbnRlcmZhY2UKIGFzIG9wcG9zZWQgdG8gc2ltcGx5IGEgZGVzY3JpcHRpb24gb2YgbWV0aG9kcyBhbmQgYmluZGluZ3MuIFRoZXkgYXJlIGFsc28KIHNvbWV0aW1lcyBzaW1wbHkgcmVmZXJyZWQgdG8gYXMgIkFQSXMiIGluIG90aGVyIGNvbnRleHRzLCBzdWNoIGFzIHRoZSBuYW1lIG9mCiB0aGlzIG1lc3NhZ2UgaXRzZWxmLiBTZWUgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2FwaXMvZGVzaWduL2dsb3NzYXJ5IGZvcgogZGV0YWlsZWQgdGVybWlub2xvZ3kuCgoKCgMEAAESAzUICwp7CgQEAAIAEgM5AhIabiBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhpcyBpbnRlcmZhY2UsIGluY2x1ZGluZyBwYWNrYWdlIG5hbWUKIGZvbGxvd2VkIGJ5IHRoZSBpbnRlcmZhY2UncyBzaW1wbGUgbmFtZS4KCg0KBQQAAgAEEgQ5AjUNCgwKBQQAAgAFEgM5AggKDAoFBAACAAESAzkJDQoMCgUEAAIAAxIDORARCkMKBAQAAgESAzwCHho2IFRoZSBtZXRob2RzIG9mIHRoaXMgaW50ZXJmYWNlLCBpbiB1bnNwZWNpZmllZCBvcmRlci4KCgwKBQQAAgEEEgM8AgoKDAoFBAACAQYSAzwLEQoMCgUEAAIBARIDPBIZCgwKBQQAAgEDEgM8HB0KNgoEBAACAhIDPwIeGikgQW55IG1ldGFkYXRhIGF0dGFjaGVkIHRvIHRoZSBpbnRlcmZhY2UuCgoMCgUEAAICBBIDPwIKCgwKBQQAAgIGEgM/CxEKDAoFBAACAgESAz8SGQoMCgUEAAICAxIDPxwdCoIICgQEAAIDEgNWAhUa9AcgQSB2ZXJzaW9uIHN0cmluZyBmb3IgdGhpcyBpbnRlcmZhY2UuIElmIHNwZWNpZmllZCwgbXVzdCBoYXZlIHRoZSBmb3JtCiBgbWFqb3ItdmVyc2lvbi5taW5vci12ZXJzaW9uYCwgYXMgaW4gYDEuMTBgLiBJZiB0aGUgbWlub3IgdmVyc2lvbiBpcwogb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gemVyby4gSWYgdGhlIGVudGlyZSB2ZXJzaW9uIGZpZWxkIGlzIGVtcHR5LCB0aGUKIG1ham9yIHZlcnNpb24gaXMgZGVyaXZlZCBmcm9tIHRoZSBwYWNrYWdlIG5hbWUsIGFzIG91dGxpbmVkIGJlbG93LiBJZiB0aGUKIGZpZWxkIGlzIG5vdCBlbXB0eSwgdGhlIHZlcnNpb24gaW4gdGhlIHBhY2thZ2UgbmFtZSB3aWxsIGJlIHZlcmlmaWVkIHRvIGJlCiBjb25zaXN0ZW50IHdpdGggd2hhdCBpcyBwcm92aWRlZCBoZXJlLgoKIFRoZSB2ZXJzaW9uaW5nIHNjaGVtYSB1c2VzIFtzZW1hbnRpYwogdmVyc2lvbmluZ10oaHR0cDovL3NlbXZlci5vcmcpIHdoZXJlIHRoZSBtYWpvciB2ZXJzaW9uIG51bWJlcgogaW5kaWNhdGVzIGEgYnJlYWtpbmcgY2hhbmdlIGFuZCB0aGUgbWlub3IgdmVyc2lvbiBhbiBhZGRpdGl2ZSwKIG5vbi1icmVha2luZyBjaGFuZ2UuIEJvdGggdmVyc2lvbiBudW1iZXJzIGFyZSBzaWduYWxzIHRvIHVzZXJzCiB3aGF0IHRvIGV4cGVjdCBmcm9tIGRpZmZlcmVudCB2ZXJzaW9ucywgYW5kIHNob3VsZCBiZSBjYXJlZnVsbHkKIGNob3NlbiBiYXNlZCBvbiB0aGUgcHJvZHVjdCBwbGFuLgoKIFRoZSBtYWpvciB2ZXJzaW9uIGlzIGFsc28gcmVmbGVjdGVkIGluIHRoZSBwYWNrYWdlIG5hbWUgb2YgdGhlCiBpbnRlcmZhY2UsIHdoaWNoIG11c3QgZW5kIGluIGB2PG1ham9yLXZlcnNpb24+YCwgYXMgaW4KIGBnb29nbGUuZmVhdHVyZS52MWAuIEZvciBtYWpvciB2ZXJzaW9ucyAwIGFuZCAxLCB0aGUgc3VmZml4IGNhbgogYmUgb21pdHRlZC4gWmVybyBtYWpvciB2ZXJzaW9ucyBtdXN0IG9ubHkgYmUgdXNlZCBmb3IKIGV4cGVyaW1lbnRhbCwgbm9uLUdBIGludGVyZmFjZXMuCgoKCg0KBQQAAgMEEgRWAj8eCgwKBQQAAgMFEgNWAggKDAoFBAACAwESA1YJEAoMCgUEAAIDAxIDVhMUClsKBAQAAgQSA1oCIxpOIFNvdXJjZSBjb250ZXh0IGZvciB0aGUgcHJvdG9jb2wgYnVmZmVyIHNlcnZpY2UgcmVwcmVzZW50ZWQgYnkgdGhpcwogbWVzc2FnZS4KCg0KBQQAAgQEEgRaAlYVCgwKBQQAAgQGEgNaAg8KDAoFBAACBAESA1oQHgoMCgUEAAIEAxIDWiEiCjIKBAQAAgUSA10CHBolIEluY2x1ZGVkIGludGVyZmFjZXMuIFNlZSBbTWl4aW5dW10uCgoMCgUEAAIFBBIDXQIKCgwKBQQAAgUGEgNdCxAKDAoFBAACBQESA10RFwoMCgUEAAIFAxIDXRobCjAKBAQAAgYSA2ACFBojIFRoZSBzb3VyY2Ugc3ludGF4IG9mIHRoZSBzZXJ2aWNlLgoKDQoFBAACBgQSBGACXRwKDAoFBAACBgYSA2ACCAoMCgUEAAIGARIDYAkPCgwKBQQAAgYDEgNgEhMKPQoCBAESBGQAegEaMSBNZXRob2QgcmVwcmVzZW50cyBhIG1ldGhvZCBvZiBhbiBBUEkgaW50ZXJmYWNlLgoKCgoDBAEBEgNkCA4KLgoEBAECABIDZwISGiEgVGhlIHNpbXBsZSBuYW1lIG9mIHRoaXMgbWV0aG9kLgoKDQoFBAECAAQSBGcCZBAKDAoFBAECAAUSA2cCCAoMCgUEAQIAARIDZwkNCgwKBQQBAgADEgNnEBEKLwoEBAECARIDagIeGiIgQSBVUkwgb2YgdGhlIGlucHV0IG1lc3NhZ2UgdHlwZS4KCg0KBQQBAgEEEgRqAmcSCgwKBQQBAgEFEgNqAggKDAoFBAECAQESA2oJGQoMCgUEAQIBAxIDahwdCjAKBAQBAgISA20CHRojIElmIHRydWUsIHRoZSByZXF1ZXN0IGlzIHN0cmVhbWVkLgoKDQoFBAECAgQSBG0Cah4KDAoFBAECAgUSA20CBgoMCgUEAQICARIDbQcYCgwKBQQBAgIDEgNtGxwKMgoEBAECAxIDcAIfGiUgVGhlIFVSTCBvZiB0aGUgb3V0cHV0IG1lc3NhZ2UgdHlwZS4KCg0KBQQBAgMEEgRwAm0dCgwKBQQBAgMFEgNwAggKDAoFBAECAwESA3AJGgoMCgUEAQIDAxIDcB0eCjEKBAQBAgQSA3MCHhokIElmIHRydWUsIHRoZSByZXNwb25zZSBpcyBzdHJlYW1lZC4KCg0KBQQBAgQEEgRzAnAfCgwKBQQBAgQFEgNzAgYKDAoFBAECBAESA3MHGQoMCgUEAQIEAxIDcxwdCjMKBAQBAgUSA3YCHhomIEFueSBtZXRhZGF0YSBhdHRhY2hlZCB0byB0aGUgbWV0aG9kLgoKDAoFBAECBQQSA3YCCgoMCgUEAQIFBhIDdgsRCgwKBQQBAgUBEgN2EhkKDAoFBAECBQMSA3YcHQowCgQEAQIGEgN5AhQaIyBUaGUgc291cmNlIHN5bnRheCBvZiB0aGlzIG1ldGhvZC4KCg0KBQQBAgYEEgR5AnYeCgwKBQQBAgYGEgN5AggKDAoFBAECBgESA3kJDwoMCgUEAQIGAxIDeRITCskTCgIEAhIGygEA0QEBGroTIERlY2xhcmVzIGFuIEFQSSBJbnRlcmZhY2UgdG8gYmUgaW5jbHVkZWQgaW4gdGhpcyBpbnRlcmZhY2UuIFRoZSBpbmNsdWRpbmcKIGludGVyZmFjZSBtdXN0IHJlZGVjbGFyZSBhbGwgdGhlIG1ldGhvZHMgZnJvbSB0aGUgaW5jbHVkZWQgaW50ZXJmYWNlLCBidXQKIGRvY3VtZW50YXRpb24gYW5kIG9wdGlvbnMgYXJlIGluaGVyaXRlZCBhcyBmb2xsb3dzOgoKIC0gSWYgYWZ0ZXIgY29tbWVudCBhbmQgd2hpdGVzcGFjZSBzdHJpcHBpbmcsIHRoZSBkb2N1bWVudGF0aW9uCiAgIHN0cmluZyBvZiB0aGUgcmVkZWNsYXJlZCBtZXRob2QgaXMgZW1wdHksIGl0IHdpbGwgYmUgaW5oZXJpdGVkCiAgIGZyb20gdGhlIG9yaWdpbmFsIG1ldGhvZC4KCiAtIEVhY2ggYW5ub3RhdGlvbiBiZWxvbmdpbmcgdG8gdGhlIHNlcnZpY2UgY29uZmlnIChodHRwLAogICB2aXNpYmlsaXR5KSB3aGljaCBpcyBub3Qgc2V0IGluIHRoZSByZWRlY2xhcmVkIG1ldGhvZCB3aWxsIGJlCiAgIGluaGVyaXRlZC4KCiAtIElmIGFuIGh0dHAgYW5ub3RhdGlvbiBpcyBpbmhlcml0ZWQsIHRoZSBwYXRoIHBhdHRlcm4gd2lsbCBiZQogICBtb2RpZmllZCBhcyBmb2xsb3dzLiBBbnkgdmVyc2lvbiBwcmVmaXggd2lsbCBiZSByZXBsYWNlZCBieSB0aGUKICAgdmVyc2lvbiBvZiB0aGUgaW5jbHVkaW5nIGludGVyZmFjZSBwbHVzIHRoZSBbcm9vdF1bXSBwYXRoIGlmCiAgIHNwZWNpZmllZC4KCiBFeGFtcGxlIG9mIGEgc2ltcGxlIG1peGluOgoKICAgICBwYWNrYWdlIGdvb2dsZS5hY2wudjE7CiAgICAgc2VydmljZSBBY2Nlc3NDb250cm9sIHsKICAgICAgIC8vIEdldCB0aGUgdW5kZXJseWluZyBBQ0wgb2JqZWN0LgogICAgICAgcnBjIEdldEFjbChHZXRBY2xSZXF1ZXN0KSByZXR1cm5zIChBY2wpIHsKICAgICAgICAgb3B0aW9uIChnb29nbGUuYXBpLmh0dHApLmdldCA9ICIvdjEve3Jlc291cmNlPSoqfTpnZXRBY2wiOwogICAgICAgfQogICAgIH0KCiAgICAgcGFja2FnZSBnb29nbGUuc3RvcmFnZS52MjsKICAgICBzZXJ2aWNlIFN0b3JhZ2UgewogICAgICAgcnBjIEdldEFjbChHZXRBY2xSZXF1ZXN0KSByZXR1cm5zIChBY2wpOwoKICAgICAgIC8vIEdldCBhIGRhdGEgcmVjb3JkLgogICAgICAgcnBjIEdldERhdGEoR2V0RGF0YVJlcXVlc3QpIHJldHVybnMgKERhdGEpIHsKICAgICAgICAgb3B0aW9uIChnb29nbGUuYXBpLmh0dHApLmdldCA9ICIvdjIve3Jlc291cmNlPSoqfSI7CiAgICAgICB9CiAgICAgfQoKIEV4YW1wbGUgb2YgYSBtaXhpbiBjb25maWd1cmF0aW9uOgoKICAgICBhcGlzOgogICAgIC0gbmFtZTogZ29vZ2xlLnN0b3JhZ2UudjIuU3RvcmFnZQogICAgICAgbWl4aW5zOgogICAgICAgLSBuYW1lOiBnb29nbGUuYWNsLnYxLkFjY2Vzc0NvbnRyb2wKCiBUaGUgbWl4aW4gY29uc3RydWN0IGltcGxpZXMgdGhhdCBhbGwgbWV0aG9kcyBpbiBgQWNjZXNzQ29udHJvbGAgYXJlCiBhbHNvIGRlY2xhcmVkIHdpdGggc2FtZSBuYW1lIGFuZCByZXF1ZXN0L3Jlc3BvbnNlIHR5cGVzIGluCiBgU3RvcmFnZWAuIEEgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3Igb3IgYW5ub3RhdGlvbiBwcm9jZXNzb3Igd2lsbAogc2VlIHRoZSBlZmZlY3RpdmUgYFN0b3JhZ2UuR2V0QWNsYCBtZXRob2QgYWZ0ZXIgaW5oZXJ0aW5nCiBkb2N1bWVudGF0aW9uIGFuZCBhbm5vdGF0aW9ucyBhcyBmb2xsb3dzOgoKICAgICBzZXJ2aWNlIFN0b3JhZ2UgewogICAgICAgLy8gR2V0IHRoZSB1bmRlcmx5aW5nIEFDTCBvYmplY3QuCiAgICAgICBycGMgR2V0QWNsKEdldEFjbFJlcXVlc3QpIHJldHVybnMgKEFjbCkgewogICAgICAgICBvcHRpb24gKGdvb2dsZS5hcGkuaHR0cCkuZ2V0ID0gIi92Mi97cmVzb3VyY2U9Kip9OmdldEFjbCI7CiAgICAgICB9CiAgICAgICAuLi4KICAgICB9CgogTm90ZSBob3cgdGhlIHZlcnNpb24gaW4gdGhlIHBhdGggcGF0dGVybiBjaGFuZ2VkIGZyb20gYHYxYCB0byBgdjJgLgoKIElmIHRoZSBgcm9vdGAgZmllbGQgaW4gdGhlIG1peGluIGlzIHNwZWNpZmllZCwgaXQgc2hvdWxkIGJlIGEKIHJlbGF0aXZlIHBhdGggdW5kZXIgd2hpY2ggaW5oZXJpdGVkIEhUVFAgcGF0aHMgYXJlIHBsYWNlZC4gRXhhbXBsZToKCiAgICAgYXBpczoKICAgICAtIG5hbWU6IGdvb2dsZS5zdG9yYWdlLnYyLlN0b3JhZ2UKICAgICAgIG1peGluczoKICAgICAgIC0gbmFtZTogZ29vZ2xlLmFjbC52MS5BY2Nlc3NDb250cm9sCiAgICAgICAgIHJvb3Q6IGFjbHMKCiBUaGlzIGltcGxpZXMgdGhlIGZvbGxvd2luZyBpbmhlcml0ZWQgSFRUUCBhbm5vdGF0aW9uOgoKICAgICBzZXJ2aWNlIFN0b3JhZ2UgewogICAgICAgLy8gR2V0IHRoZSB1bmRlcmx5aW5nIEFDTCBvYmplY3QuCiAgICAgICBycGMgR2V0QWNsKEdldEFjbFJlcXVlc3QpIHJldHVybnMgKEFjbCkgewogICAgICAgICBvcHRpb24gKGdvb2dsZS5hcGkuaHR0cCkuZ2V0ID0gIi92Mi9hY2xzL3tyZXNvdXJjZT0qKn06Z2V0QWNsIjsKICAgICAgIH0KICAgICAgIC4uLgogICAgIH0KCgsKAwQCARIEygEIDQpMCgQEAgIAEgTMAQISGj4gVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBpbnRlcmZhY2Ugd2hpY2ggaXMgaW5jbHVkZWQuCgoPCgUEAgIABBIGzAECygEPCg0KBQQCAgAFEgTMAQIICg0KBQQCAgABEgTMAQkNCg0KBQQCAgADEgTMARARClsKBAQCAgESBNABAhIaTSBJZiBub24tZW1wdHkgc3BlY2lmaWVzIGEgcGF0aCB1bmRlciB3aGljaCBpbmhlcml0ZWQgSFRUUCBwYXRocwogYXJlIHJvb3RlZC4KCg8KBQQCAgEEEgbQAQLMARIKDQoFBAICAQUSBNABAggKDQoFBAICAQESBNABCQ0KDQoFBAICAQMSBNABEBFiBnByb3RvMwruJQoeZ29vZ2xlL3Byb3RvYnVmL2R1cmF0aW9uLnByb3RvEg9nb29nbGUucHJvdG9idWYiOgoIRHVyYXRpb24SGAoHc2Vjb25kcxgBIAEoA1IHc2Vjb25kcxIUCgVuYW5vcxgCIAEoBVIFbmFub3NCfAoTY29tLmdvb2dsZS5wcm90b2J1ZkINRHVyYXRpb25Qcm90b1ABWipnaXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wdHlwZXMvZHVyYXRpb274AQGiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNK+CMKBhIEHgBzAQrMDAoBDBIDHgASMsEMIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwoKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogbWV0OgoKICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiBkaXN0cmlidXRpb24uCiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KCiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoKCAoBAhIDIAAYCggKAQgSAyIAOwoJCgIIJRIDIgA7CggKAQgSAyMAHwoJCgIIHxIDIwAfCggKAQgSAyQAQQoJCgIICxIDJABBCggKAQgSAyUALAoJCgIIARIDJQAsCggKAQgSAyYALgoJCgIICBIDJgAuCggKAQgSAycAIgoJCgIIChIDJwAiCggKAQgSAygAIQoJCgIIJBIDKAAhCp4QCgIEABIEZgBzARqRECBBIER1cmF0aW9uIHJlcHJlc2VudHMgYSBzaWduZWQsIGZpeGVkLWxlbmd0aCBzcGFuIG9mIHRpbWUgcmVwcmVzZW50ZWQKIGFzIGEgY291bnQgb2Ygc2Vjb25kcyBhbmQgZnJhY3Rpb25zIG9mIHNlY29uZHMgYXQgbmFub3NlY29uZAogcmVzb2x1dGlvbi4gSXQgaXMgaW5kZXBlbmRlbnQgb2YgYW55IGNhbGVuZGFyIGFuZCBjb25jZXB0cyBsaWtlICJkYXkiCiBvciAibW9udGgiLiBJdCBpcyByZWxhdGVkIHRvIFRpbWVzdGFtcCBpbiB0aGF0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KIHR3byBUaW1lc3RhbXAgdmFsdWVzIGlzIGEgRHVyYXRpb24gYW5kIGl0IGNhbiBiZSBhZGRlZCBvciBzdWJ0cmFjdGVkCiBmcm9tIGEgVGltZXN0YW1wLiBSYW5nZSBpcyBhcHByb3hpbWF0ZWx5ICstMTAsMDAwIHllYXJzLgoKICMgRXhhbXBsZXMKCiBFeGFtcGxlIDE6IENvbXB1dGUgRHVyYXRpb24gZnJvbSB0d28gVGltZXN0YW1wcyBpbiBwc2V1ZG8gY29kZS4KCiAgICAgVGltZXN0YW1wIHN0YXJ0ID0gLi4uOwogICAgIFRpbWVzdGFtcCBlbmQgPSAuLi47CiAgICAgRHVyYXRpb24gZHVyYXRpb24gPSAuLi47CgogICAgIGR1cmF0aW9uLnNlY29uZHMgPSBlbmQuc2Vjb25kcyAtIHN0YXJ0LnNlY29uZHM7CiAgICAgZHVyYXRpb24ubmFub3MgPSBlbmQubmFub3MgLSBzdGFydC5uYW5vczsKCiAgICAgaWYgKGR1cmF0aW9uLnNlY29uZHMgPCAwICYmIGR1cmF0aW9uLm5hbm9zID4gMCkgewogICAgICAgZHVyYXRpb24uc2Vjb25kcyArPSAxOwogICAgICAgZHVyYXRpb24ubmFub3MgLT0gMTAwMDAwMDAwMDsKICAgICB9IGVsc2UgaWYgKGR1cmF0aW9uLnNlY29uZHMgPiAwICYmIGR1cmF0aW9uLm5hbm9zIDwgMCkgewogICAgICAgZHVyYXRpb24uc2Vjb25kcyAtPSAxOwogICAgICAgZHVyYXRpb24ubmFub3MgKz0gMTAwMDAwMDAwMDsKICAgICB9CgogRXhhbXBsZSAyOiBDb21wdXRlIFRpbWVzdGFtcCBmcm9tIFRpbWVzdGFtcCArIER1cmF0aW9uIGluIHBzZXVkbyBjb2RlLgoKICAgICBUaW1lc3RhbXAgc3RhcnQgPSAuLi47CiAgICAgRHVyYXRpb24gZHVyYXRpb24gPSAuLi47CiAgICAgVGltZXN0YW1wIGVuZCA9IC4uLjsKCiAgICAgZW5kLnNlY29uZHMgPSBzdGFydC5zZWNvbmRzICsgZHVyYXRpb24uc2Vjb25kczsKICAgICBlbmQubmFub3MgPSBzdGFydC5uYW5vcyArIGR1cmF0aW9uLm5hbm9zOwoKICAgICBpZiAoZW5kLm5hbm9zIDwgMCkgewogICAgICAgZW5kLnNlY29uZHMgLT0gMTsKICAgICAgIGVuZC5uYW5vcyArPSAxMDAwMDAwMDAwOwogICAgIH0gZWxzZSBpZiAoZW5kLm5hbm9zID49IDEwMDAwMDAwMDApIHsKICAgICAgIGVuZC5zZWNvbmRzICs9IDE7CiAgICAgICBlbmQubmFub3MgLT0gMTAwMDAwMDAwMDsKICAgICB9CgogRXhhbXBsZSAzOiBDb21wdXRlIER1cmF0aW9uIGZyb20gZGF0ZXRpbWUudGltZWRlbHRhIGluIFB5dGhvbi4KCiAgICAgdGQgPSBkYXRldGltZS50aW1lZGVsdGEoZGF5cz0zLCBtaW51dGVzPTEwKQogICAgIGR1cmF0aW9uID0gRHVyYXRpb24oKQogICAgIGR1cmF0aW9uLkZyb21UaW1lZGVsdGEodGQpCgogIyBKU09OIE1hcHBpbmcKCiBJbiBKU09OIGZvcm1hdCwgdGhlIER1cmF0aW9uIHR5cGUgaXMgZW5jb2RlZCBhcyBhIHN0cmluZyByYXRoZXIgdGhhbiBhbgogb2JqZWN0LCB3aGVyZSB0aGUgc3RyaW5nIGVuZHMgaW4gdGhlIHN1ZmZpeCAicyIgKGluZGljYXRpbmcgc2Vjb25kcykgYW5kCiBpcyBwcmVjZWRlZCBieSB0aGUgbnVtYmVyIG9mIHNlY29uZHMsIHdpdGggbmFub3NlY29uZHMgZXhwcmVzc2VkIGFzCiBmcmFjdGlvbmFsIHNlY29uZHMuIEZvciBleGFtcGxlLCAzIHNlY29uZHMgd2l0aCAwIG5hbm9zZWNvbmRzIHNob3VsZCBiZQogZW5jb2RlZCBpbiBKU09OIGZvcm1hdCBhcyAiM3MiLCB3aGlsZSAzIHNlY29uZHMgYW5kIDEgbmFub3NlY29uZCBzaG91bGQKIGJlIGV4cHJlc3NlZCBpbiBKU09OIGZvcm1hdCBhcyAiMy4wMDAwMDAwMDFzIiwgYW5kIDMgc2Vjb25kcyBhbmQgMQogbWljcm9zZWNvbmQgc2hvdWxkIGJlIGV4cHJlc3NlZCBpbiBKU09OIGZvcm1hdCBhcyAiMy4wMDAwMDFzIi4KCgoKCgoDBAABEgNmCBAK3AEKBAQAAgASA2oCFBrOASBTaWduZWQgc2Vjb25kcyBvZiB0aGUgc3BhbiBvZiB0aW1lLiBNdXN0IGJlIGZyb20gLTMxNSw1NzYsMDAwLDAwMAogdG8gKzMxNSw1NzYsMDAwLDAwMCBpbmNsdXNpdmUuIE5vdGU6IHRoZXNlIGJvdW5kcyBhcmUgY29tcHV0ZWQgZnJvbToKIDYwIHNlYy9taW4gKiA2MCBtaW4vaHIgKiAyNCBoci9kYXkgKiAzNjUuMjUgZGF5cy95ZWFyICogMTAwMDAgeWVhcnMKCg0KBQQAAgAEEgRqAmYSCgwKBQQAAgAFEgNqAgcKDAoFBAACAAESA2oIDwoMCgUEAAIAAxIDahITCoMDCgQEAAIBEgNyAhIa9QIgU2lnbmVkIGZyYWN0aW9ucyBvZiBhIHNlY29uZCBhdCBuYW5vc2Vjb25kIHJlc29sdXRpb24gb2YgdGhlIHNwYW4KIG9mIHRpbWUuIER1cmF0aW9ucyBsZXNzIHRoYW4gb25lIHNlY29uZCBhcmUgcmVwcmVzZW50ZWQgd2l0aCBhIDAKIGBzZWNvbmRzYCBmaWVsZCBhbmQgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBgbmFub3NgIGZpZWxkLiBGb3IgZHVyYXRpb25zCiBvZiBvbmUgc2Vjb25kIG9yIG1vcmUsIGEgbm9uLXplcm8gdmFsdWUgZm9yIHRoZSBgbmFub3NgIGZpZWxkIG11c3QgYmUKIG9mIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGBzZWNvbmRzYCBmaWVsZC4gTXVzdCBiZSBmcm9tIC05OTksOTk5LDk5OQogdG8gKzk5OSw5OTksOTk5IGluY2x1c2l2ZS4KCg0KBQQAAgEEEgRyAmoUCgwKBQQAAgEFEgNyAgcKDAoFBAACAQESA3IIDQoMCgUEAAIBAxIDchARYgZwcm90bzMKuBIKG2dvb2dsZS9wcm90b2J1Zi9lbXB0eS5wcm90bxIPZ29vZ2xlLnByb3RvYnVmIgcKBUVtcHR5QnYKE2NvbS5nb29nbGUucHJvdG9idWZCCkVtcHR5UHJvdG9QAVonZ2l0aHViLmNvbS9nb2xhbmcvcHJvdG9idWYvcHR5cGVzL2VtcHR5+AEBogIDR1BCqgIeR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzSv4QCgYSBB4AMxAKzAwKAQwSAx4AEjLBDCBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKIG1ldDoKCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogZGlzdHJpYnV0aW9uLgogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KCggKAQISAyAAGAoICgEIEgMiADsKCQoCCCUSAyIAOwoICgEIEgMjAD4KCQoCCAsSAyMAPgoICgEIEgMkACwKCQoCCAESAyQALAoICgEIEgMlACsKCQoCCAgSAyUAKwoICgEIEgMmACIKCQoCCAoSAyYAIgoICgEIEgMnACEKCQoCCCQSAycAIQoICgEIEgMoAB8KCQoCCB8SAygAHwr7AgoCBAASAzMAEBrvAiBBIGdlbmVyaWMgZW1wdHkgbWVzc2FnZSB0aGF0IHlvdSBjYW4gcmUtdXNlIHRvIGF2b2lkIGRlZmluaW5nIGR1cGxpY2F0ZWQKIGVtcHR5IG1lc3NhZ2VzIGluIHlvdXIgQVBJcy4gQSB0eXBpY2FsIGV4YW1wbGUgaXMgdG8gdXNlIGl0IGFzIHRoZSByZXF1ZXN0CiBvciB0aGUgcmVzcG9uc2UgdHlwZSBvZiBhbiBBUEkgbWV0aG9kLiBGb3IgaW5zdGFuY2U6CgogICAgIHNlcnZpY2UgRm9vIHsKICAgICAgIHJwYyBCYXIoZ29vZ2xlLnByb3RvYnVmLkVtcHR5KSByZXR1cm5zIChnb29nbGUucHJvdG9idWYuRW1wdHkpOwogICAgIH0KCiBUaGUgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgYEVtcHR5YCBpcyBlbXB0eSBKU09OIG9iamVjdCBge31gLgoKCgoDBAABEgMzCA1iBnByb3RvMwqfPQogZ29vZ2xlL3Byb3RvYnVmL2ZpZWxkX21hc2sucHJvdG8SD2dvb2dsZS5wcm90b2J1ZiIhCglGaWVsZE1hc2sSFAoFcGF0aHMYASADKAlSBXBhdGhzQowBChNjb20uZ29vZ2xlLnByb3RvYnVmQg5GaWVsZE1hc2tQcm90b1ABWjlnb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9wcm90b2J1Zi9maWVsZF9tYXNrO2ZpZWxkX21hc2v4AQGiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNKrzsKBxIFHgD0AQEKzAwKAQwSAx4AEjLBDCBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKIG1ldDoKCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogZGlzdHJpYnV0aW9uLgogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KCggKAQISAyAAGAoICgEIEgMiADsKCQoCCCUSAyIAOwoICgEIEgMjACwKCQoCCAESAyMALAoICgEIEgMkAC8KCQoCCAgSAyQALwoICgEIEgMlACIKCQoCCAoSAyUAIgoICgEIEgMmACEKCQoCCCQSAyYAIQoICgEIEgMnAFAKCQoCCAsSAycAUAoICgEIEgMoAB8KCQoCCB8SAygAHwrALAoCBAASBvEBAPQBARqxLCBgRmllbGRNYXNrYCByZXByZXNlbnRzIGEgc2V0IG9mIHN5bWJvbGljIGZpZWxkIHBhdGhzLCBmb3IgZXhhbXBsZToKCiAgICAgcGF0aHM6ICJmLmEiCiAgICAgcGF0aHM6ICJmLmIuZCIKCiBIZXJlIGBmYCByZXByZXNlbnRzIGEgZmllbGQgaW4gc29tZSByb290IG1lc3NhZ2UsIGBhYCBhbmQgYGJgCiBmaWVsZHMgaW4gdGhlIG1lc3NhZ2UgZm91bmQgaW4gYGZgLCBhbmQgYGRgIGEgZmllbGQgZm91bmQgaW4gdGhlCiBtZXNzYWdlIGluIGBmLmJgLgoKIEZpZWxkIG1hc2tzIGFyZSB1c2VkIHRvIHNwZWNpZnkgYSBzdWJzZXQgb2YgZmllbGRzIHRoYXQgc2hvdWxkIGJlCiByZXR1cm5lZCBieSBhIGdldCBvcGVyYXRpb24gb3IgbW9kaWZpZWQgYnkgYW4gdXBkYXRlIG9wZXJhdGlvbi4KIEZpZWxkIG1hc2tzIGFsc28gaGF2ZSBhIGN1c3RvbSBKU09OIGVuY29kaW5nIChzZWUgYmVsb3cpLgoKICMgRmllbGQgTWFza3MgaW4gUHJvamVjdGlvbnMKCiBXaGVuIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgYSBwcm9qZWN0aW9uLCBhIHJlc3BvbnNlIG1lc3NhZ2Ugb3IKIHN1Yi1tZXNzYWdlIGlzIGZpbHRlcmVkIGJ5IHRoZSBBUEkgdG8gb25seSBjb250YWluIHRob3NlIGZpZWxkcyBhcwogc3BlY2lmaWVkIGluIHRoZSBtYXNrLiBGb3IgZXhhbXBsZSwgaWYgdGhlIG1hc2sgaW4gdGhlIHByZXZpb3VzCiBleGFtcGxlIGlzIGFwcGxpZWQgdG8gYSByZXNwb25zZSBtZXNzYWdlIGFzIGZvbGxvd3M6CgogICAgIGYgewogICAgICAgYSA6IDIyCiAgICAgICBiIHsKICAgICAgICAgZCA6IDEKICAgICAgICAgeCA6IDIKICAgICAgIH0KICAgICAgIHkgOiAxMwogICAgIH0KICAgICB6OiA4CgogVGhlIHJlc3VsdCB3aWxsIG5vdCBjb250YWluIHNwZWNpZmljIHZhbHVlcyBmb3IgZmllbGRzIHgseSBhbmQgegogKHRoZWlyIHZhbHVlIHdpbGwgYmUgc2V0IHRvIHRoZSBkZWZhdWx0LCBhbmQgb21pdHRlZCBpbiBwcm90byB0ZXh0CiBvdXRwdXQpOgoKCiAgICAgZiB7CiAgICAgICBhIDogMjIKICAgICAgIGIgewogICAgICAgICBkIDogMQogICAgICAgfQogICAgIH0KCiBBIHJlcGVhdGVkIGZpZWxkIGlzIG5vdCBhbGxvd2VkIGV4Y2VwdCBhdCB0aGUgbGFzdCBwb3NpdGlvbiBvZiBhCiBwYXRocyBzdHJpbmcuCgogSWYgYSBGaWVsZE1hc2sgb2JqZWN0IGlzIG5vdCBwcmVzZW50IGluIGEgZ2V0IG9wZXJhdGlvbiwgdGhlCiBvcGVyYXRpb24gYXBwbGllcyB0byBhbGwgZmllbGRzIChhcyBpZiBhIEZpZWxkTWFzayBvZiBhbGwgZmllbGRzCiBoYWQgYmVlbiBzcGVjaWZpZWQpLgoKIE5vdGUgdGhhdCBhIGZpZWxkIG1hc2sgZG9lcyBub3QgbmVjZXNzYXJpbHkgYXBwbHkgdG8gdGhlCiB0b3AtbGV2ZWwgcmVzcG9uc2UgbWVzc2FnZS4gSW4gY2FzZSBvZiBhIFJFU1QgZ2V0IG9wZXJhdGlvbiwgdGhlCiBmaWVsZCBtYXNrIGFwcGxpZXMgZGlyZWN0bHkgdG8gdGhlIHJlc3BvbnNlLCBidXQgaW4gY2FzZSBvZiBhIFJFU1QKIGxpc3Qgb3BlcmF0aW9uLCB0aGUgbWFzayBpbnN0ZWFkIGFwcGxpZXMgdG8gZWFjaCBpbmRpdmlkdWFsIG1lc3NhZ2UKIGluIHRoZSByZXR1cm5lZCByZXNvdXJjZSBsaXN0LiBJbiBjYXNlIG9mIGEgUkVTVCBjdXN0b20gbWV0aG9kLAogb3RoZXIgZGVmaW5pdGlvbnMgbWF5IGJlIHVzZWQuIFdoZXJlIHRoZSBtYXNrIGFwcGxpZXMgd2lsbCBiZQogY2xlYXJseSBkb2N1bWVudGVkIHRvZ2V0aGVyIHdpdGggaXRzIGRlY2xhcmF0aW9uIGluIHRoZSBBUEkuICBJbgogYW55IGNhc2UsIHRoZSBlZmZlY3Qgb24gdGhlIHJldHVybmVkIHJlc291cmNlL3Jlc291cmNlcyBpcyByZXF1aXJlZAogYmVoYXZpb3IgZm9yIEFQSXMuCgogIyBGaWVsZCBNYXNrcyBpbiBVcGRhdGUgT3BlcmF0aW9ucwoKIEEgZmllbGQgbWFzayBpbiB1cGRhdGUgb3BlcmF0aW9ucyBzcGVjaWZpZXMgd2hpY2ggZmllbGRzIG9mIHRoZQogdGFyZ2V0ZWQgcmVzb3VyY2UgYXJlIGdvaW5nIHRvIGJlIHVwZGF0ZWQuIFRoZSBBUEkgaXMgcmVxdWlyZWQKIHRvIG9ubHkgY2hhbmdlIHRoZSB2YWx1ZXMgb2YgdGhlIGZpZWxkcyBhcyBzcGVjaWZpZWQgaW4gdGhlIG1hc2sKIGFuZCBsZWF2ZSB0aGUgb3RoZXJzIHVudG91Y2hlZC4gSWYgYSByZXNvdXJjZSBpcyBwYXNzZWQgaW4gdG8KIGRlc2NyaWJlIHRoZSB1cGRhdGVkIHZhbHVlcywgdGhlIEFQSSBpZ25vcmVzIHRoZSB2YWx1ZXMgb2YgYWxsCiBmaWVsZHMgbm90IGNvdmVyZWQgYnkgdGhlIG1hc2suCgogSWYgYSByZXBlYXRlZCBmaWVsZCBpcyBzcGVjaWZpZWQgZm9yIGFuIHVwZGF0ZSBvcGVyYXRpb24sIG5ldyB2YWx1ZXMgd2lsbAogYmUgYXBwZW5kZWQgdG8gdGhlIGV4aXN0aW5nIHJlcGVhdGVkIGZpZWxkIGluIHRoZSB0YXJnZXQgcmVzb3VyY2UuIE5vdGUgdGhhdAogYSByZXBlYXRlZCBmaWVsZCBpcyBvbmx5IGFsbG93ZWQgaW4gdGhlIGxhc3QgcG9zaXRpb24gb2YgYSBgcGF0aHNgIHN0cmluZy4KCiBJZiBhIHN1Yi1tZXNzYWdlIGlzIHNwZWNpZmllZCBpbiB0aGUgbGFzdCBwb3NpdGlvbiBvZiB0aGUgZmllbGQgbWFzayBmb3IgYW4KIHVwZGF0ZSBvcGVyYXRpb24sIHRoZW4gbmV3IHZhbHVlIHdpbGwgYmUgbWVyZ2VkIGludG8gdGhlIGV4aXN0aW5nIHN1Yi1tZXNzYWdlCiBpbiB0aGUgdGFyZ2V0IHJlc291cmNlLgoKIEZvciBleGFtcGxlLCBnaXZlbiB0aGUgdGFyZ2V0IG1lc3NhZ2U6CgogICAgIGYgewogICAgICAgYiB7CiAgICAgICAgIGQ6IDEKICAgICAgICAgeDogMgogICAgICAgfQogICAgICAgYzogWzFdCiAgICAgfQoKIEFuZCBhbiB1cGRhdGUgbWVzc2FnZToKCiAgICAgZiB7CiAgICAgICBiIHsKICAgICAgICAgZDogMTAKICAgICAgIH0KICAgICAgIGM6IFsyXQogICAgIH0KCiB0aGVuIGlmIHRoZSBmaWVsZCBtYXNrIGlzOgoKICBwYXRoczogWyJmLmIiLCAiZi5jIl0KCiB0aGVuIHRoZSByZXN1bHQgd2lsbCBiZToKCiAgICAgZiB7CiAgICAgICBiIHsKICAgICAgICAgZDogMTAKICAgICAgICAgeDogMgogICAgICAgfQogICAgICAgYzogWzEsIDJdCiAgICAgfQoKIEFuIGltcGxlbWVudGF0aW9uIG1heSBwcm92aWRlIG9wdGlvbnMgdG8gb3ZlcnJpZGUgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGZvcgogcmVwZWF0ZWQgYW5kIG1lc3NhZ2UgZmllbGRzLgoKIEluIG9yZGVyIHRvIHJlc2V0IGEgZmllbGQncyB2YWx1ZSB0byB0aGUgZGVmYXVsdCwgdGhlIGZpZWxkIG11c3QKIGJlIGluIHRoZSBtYXNrIGFuZCBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUgaW4gdGhlIHByb3ZpZGVkIHJlc291cmNlLgogSGVuY2UsIGluIG9yZGVyIHRvIHJlc2V0IGFsbCBmaWVsZHMgb2YgYSByZXNvdXJjZSwgcHJvdmlkZSBhIGRlZmF1bHQKIGluc3RhbmNlIG9mIHRoZSByZXNvdXJjZSBhbmQgc2V0IGFsbCBmaWVsZHMgaW4gdGhlIG1hc2ssIG9yIGRvCiBub3QgcHJvdmlkZSBhIG1hc2sgYXMgZGVzY3JpYmVkIGJlbG93LgoKIElmIGEgZmllbGQgbWFzayBpcyBub3QgcHJlc2VudCBvbiB1cGRhdGUsIHRoZSBvcGVyYXRpb24gYXBwbGllcyB0bwogYWxsIGZpZWxkcyAoYXMgaWYgYSBmaWVsZCBtYXNrIG9mIGFsbCBmaWVsZHMgaGFzIGJlZW4gc3BlY2lmaWVkKS4KIE5vdGUgdGhhdCBpbiB0aGUgcHJlc2VuY2Ugb2Ygc2NoZW1hIGV2b2x1dGlvbiwgdGhpcyBtYXkgbWVhbiB0aGF0CiBmaWVsZHMgdGhlIGNsaWVudCBkb2VzIG5vdCBrbm93IGFuZCBoYXMgdGhlcmVmb3JlIG5vdCBmaWxsZWQgaW50bwogdGhlIHJlcXVlc3Qgd2lsbCBiZSByZXNldCB0byB0aGVpciBkZWZhdWx0LiBJZiB0aGlzIGlzIHVud2FudGVkCiBiZWhhdmlvciwgYSBzcGVjaWZpYyBzZXJ2aWNlIG1heSByZXF1aXJlIGEgY2xpZW50IHRvIGFsd2F5cyBzcGVjaWZ5CiBhIGZpZWxkIG1hc2ssIHByb2R1Y2luZyBhbiBlcnJvciBpZiBub3QuCgogQXMgd2l0aCBnZXQgb3BlcmF0aW9ucywgdGhlIGxvY2F0aW9uIG9mIHRoZSByZXNvdXJjZSB3aGljaAogZGVzY3JpYmVzIHRoZSB1cGRhdGVkIHZhbHVlcyBpbiB0aGUgcmVxdWVzdCBtZXNzYWdlIGRlcGVuZHMgb24gdGhlCiBvcGVyYXRpb24ga2luZC4gSW4gYW55IGNhc2UsIHRoZSBlZmZlY3Qgb2YgdGhlIGZpZWxkIG1hc2sgaXMKIHJlcXVpcmVkIHRvIGJlIGhvbm9yZWQgYnkgdGhlIEFQSS4KCiAjIyBDb25zaWRlcmF0aW9ucyBmb3IgSFRUUCBSRVNUCgogVGhlIEhUVFAga2luZCBvZiBhbiB1cGRhdGUgb3BlcmF0aW9uIHdoaWNoIHVzZXMgYSBmaWVsZCBtYXNrIG11c3QKIGJlIHNldCB0byBQQVRDSCBpbnN0ZWFkIG9mIFBVVCBpbiBvcmRlciB0byBzYXRpc2Z5IEhUVFAgc2VtYW50aWNzCiAoUFVUIG11c3Qgb25seSBiZSB1c2VkIGZvciBmdWxsIHVwZGF0ZXMpLgoKICMgSlNPTiBFbmNvZGluZyBvZiBGaWVsZCBNYXNrcwoKIEluIEpTT04sIGEgZmllbGQgbWFzayBpcyBlbmNvZGVkIGFzIGEgc2luZ2xlIHN0cmluZyB3aGVyZSBwYXRocyBhcmUKIHNlcGFyYXRlZCBieSBhIGNvbW1hLiBGaWVsZHMgbmFtZSBpbiBlYWNoIHBhdGggYXJlIGNvbnZlcnRlZAogdG8vZnJvbSBsb3dlci1jYW1lbCBuYW1pbmcgY29udmVudGlvbnMuCgogQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBtZXNzYWdlIGRlY2xhcmF0aW9uczoKCiAgICAgbWVzc2FnZSBQcm9maWxlIHsKICAgICAgIFVzZXIgdXNlciA9IDE7CiAgICAgICBQaG90byBwaG90byA9IDI7CiAgICAgfQogICAgIG1lc3NhZ2UgVXNlciB7CiAgICAgICBzdHJpbmcgZGlzcGxheV9uYW1lID0gMTsKICAgICAgIHN0cmluZyBhZGRyZXNzID0gMjsKICAgICB9CgogSW4gcHJvdG8gYSBmaWVsZCBtYXNrIGZvciBgUHJvZmlsZWAgbWF5IGxvb2sgYXMgc3VjaDoKCiAgICAgbWFzayB7CiAgICAgICBwYXRoczogInVzZXIuZGlzcGxheV9uYW1lIgogICAgICAgcGF0aHM6ICJwaG90byIKICAgICB9CgogSW4gSlNPTiwgdGhlIHNhbWUgbWFzayBpcyByZXByZXNlbnRlZCBhcyBiZWxvdzoKCiAgICAgewogICAgICAgbWFzazogInVzZXIuZGlzcGxheU5hbWUscGhvdG8iCiAgICAgfQoKICMgRmllbGQgTWFza3MgYW5kIE9uZW9mIEZpZWxkcwoKIEZpZWxkIG1hc2tzIHRyZWF0IGZpZWxkcyBpbiBvbmVvZnMganVzdCBhcyByZWd1bGFyIGZpZWxkcy4gQ29uc2lkZXIgdGhlCiBmb2xsb3dpbmcgbWVzc2FnZToKCiAgICAgbWVzc2FnZSBTYW1wbGVNZXNzYWdlIHsKICAgICAgIG9uZW9mIHRlc3Rfb25lb2YgewogICAgICAgICBzdHJpbmcgbmFtZSA9IDQ7CiAgICAgICAgIFN1Yk1lc3NhZ2Ugc3ViX21lc3NhZ2UgPSA5OwogICAgICAgfQogICAgIH0KCiBUaGUgZmllbGQgbWFzayBjYW4gYmU6CgogICAgIG1hc2sgewogICAgICAgcGF0aHM6ICJuYW1lIgogICAgIH0KCiBPcjoKCiAgICAgbWFzayB7CiAgICAgICBwYXRoczogInN1Yl9tZXNzYWdlIgogICAgIH0KCiBOb3RlIHRoYXQgb25lb2YgdHlwZSBuYW1lcyAoInRlc3Rfb25lb2YiIGluIHRoaXMgY2FzZSkgY2Fubm90IGJlIHVzZWQgaW4KIHBhdGhzLgoKICMjIEZpZWxkIE1hc2sgVmVyaWZpY2F0aW9uCgogVGhlIGltcGxlbWVudGF0aW9uIG9mIGFueSBBUEkgbWV0aG9kIHdoaWNoIGhhcyBhIEZpZWxkTWFzayB0eXBlIGZpZWxkIGluIHRoZQogcmVxdWVzdCBzaG91bGQgdmVyaWZ5IHRoZSBpbmNsdWRlZCBmaWVsZCBwYXRocywgYW5kIHJldHVybiBhbgogYElOVkFMSURfQVJHVU1FTlRgIGVycm9yIGlmIGFueSBwYXRoIGlzIGR1cGxpY2F0ZWQgb3IgdW5tYXBwYWJsZS4KCgsKAwQAARIE8QEIEQosCgQEAAIAEgTzAQIcGh4gVGhlIHNldCBvZiBmaWVsZCBtYXNrIHBhdGhzLgoKDQoFBAACAAQSBPMBAgoKDQoFBAACAAUSBPMBCxEKDQoFBAACAAESBPMBEhcKDQoFBAACAAMSBPMBGhtiBnByb3RvMwqQIwocZ29vZ2xlL3Byb3RvYnVmL3N0cnVjdC5wcm90bxIPZ29vZ2xlLnByb3RvYnVmIpgBCgZTdHJ1Y3QSOwoGZmllbGRzGAEgAygLMiMuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdC5GaWVsZHNFbnRyeVIGZmllbGRzGlEKC0ZpZWxkc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EiwKBXZhbHVlGAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUgV2YWx1ZToCOAEisgIKBVZhbHVlEjsKCm51bGxfdmFsdWUYASABKA4yGi5nb29nbGUucHJvdG9idWYuTnVsbFZhbHVlSABSCW51bGxWYWx1ZRIjCgxudW1iZXJfdmFsdWUYAiABKAFIAFILbnVtYmVyVmFsdWUSIwoMc3RyaW5nX3ZhbHVlGAMgASgJSABSC3N0cmluZ1ZhbHVlEh8KCmJvb2xfdmFsdWUYBCABKAhIAFIJYm9vbFZhbHVlEjwKDHN0cnVjdF92YWx1ZRgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAFILc3RydWN0VmFsdWUSOwoKbGlzdF92YWx1ZRgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5MaXN0VmFsdWVIAFIJbGlzdFZhbHVlQgYKBGtpbmQiOwoJTGlzdFZhbHVlEi4KBnZhbHVlcxgBIAMoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZVIGdmFsdWVzKhsKCU51bGxWYWx1ZRIOCgpOVUxMX1ZBTFVFEABCgQEKE2NvbS5nb29nbGUucHJvdG9idWZCC1N0cnVjdFByb3RvUAFaMWdpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3B0eXBlcy9zdHJ1Y3Q7c3RydWN0cGL4AQGiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNKqB0KBhIEHgBeAQrMDAoBDBIDHgASMsEMIFByb3RvY29sIEJ1ZmZlcnMgLSBHb29nbGUncyBkYXRhIGludGVyY2hhbmdlIGZvcm1hdAogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzLwoKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogbWV0OgoKICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiBkaXN0cmlidXRpb24uCiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KCiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoKCAoBAhIDIAAYCggKAQgSAyIAOwoJCgIIJRIDIgA7CggKAQgSAyMAHwoJCgIIHxIDIwAfCggKAQgSAyQASAoJCgIICxIDJABICggKAQgSAyUALAoJCgIIARIDJQAsCggKAQgSAyYALAoJCgIICBIDJgAsCggKAQgSAycAIgoJCgIIChIDJwAiCggKAQgSAygAIQoJCgIIJBIDKAAhCrMDCgIEABIEMgA1ARqmAyBgU3RydWN0YCByZXByZXNlbnRzIGEgc3RydWN0dXJlZCBkYXRhIHZhbHVlLCBjb25zaXN0aW5nIG9mIGZpZWxkcwogd2hpY2ggbWFwIHRvIGR5bmFtaWNhbGx5IHR5cGVkIHZhbHVlcy4gSW4gc29tZSBsYW5ndWFnZXMsIGBTdHJ1Y3RgCiBtaWdodCBiZSBzdXBwb3J0ZWQgYnkgYSBuYXRpdmUgcmVwcmVzZW50YXRpb24uIEZvciBleGFtcGxlLCBpbgogc2NyaXB0aW5nIGxhbmd1YWdlcyBsaWtlIEpTIGEgc3RydWN0IGlzIHJlcHJlc2VudGVkIGFzIGFuCiBvYmplY3Qu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AiABKAVSBW5hbm9zQn4KE2NvbS5nb29nbGUucHJvdG9idWZCDlRpbWVzdGFtcFByb3RvUAFaK2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3B0eXBlcy90aW1lc3RhbXD4AQGiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNK+i0KBxIFHgCJAQEKzAwKAQwSAx4AEjLBDCBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKIG1ldDoKCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogZGlzdHJpYnV0aW9uLgogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KCggKAQISAyAAGAoICgEIEgMiADsKCQoCCCUSAyIAOwoICgEIEgMjAB8KCQoCCB8SAyMAHwoICgEIEgMkAEIKCQoCCAsSAyQAQgoICgEIEgMlACwKCQoCCAESAyUALAoICgEIEgMmAC8KCQoCCAgSAyYALwoICgEIEgMnACIKCQoCCAoSAycAIgoICgEIEgMoACEKCQoCCCQSAygAIQrzGwoCBAASBX4AiQEBGuUbIEEgVGltZXN0YW1wIHJlcHJlc2VudHMgYSBwb2ludCBpbiB0aW1lIGluZGVwZW5kZW50IG9mIGFueSB0aW1lIHpvbmUgb3IgbG9jYWwKIGNhbGVuZGFyLCBlbmNvZGVkIGFzIGEgY291bnQgb2Ygc2Vjb25kcyBhbmQgZnJhY3Rpb25zIG9mIHNlY29uZHMgYXQKIG5hbm9zZWNvbmQgcmVzb2x1dGlvbi4gVGhlIGNvdW50IGlzIHJlbGF0aXZlIHRvIGFuIGVwb2NoIGF0IFVUQyBtaWRuaWdodCBvbgogSmFudWFyeSAxLCAxOTcwLCBpbiB0aGUgcHJvbGVwdGljIEdyZWdvcmlhbiBjYWxlbmRhciB3aGljaCBleHRlbmRzIHRoZQogR3JlZ29yaWFuIGNhbGVuZGFyIGJhY2t3YXJkcyB0byB5ZWFyIG9uZS4KCiBBbGwgbWludXRlcyBhcmUgNjAgc2Vjb25kcyBsb25nLiBMZWFwIHNlY29uZHMgYXJlICJzbWVhcmVkIiBzbyB0aGF0IG5vIGxlYXAKIHNlY29uZCB0YWJsZSBpcyBuZWVkZWQgZm9yIGludGVycHJldGF0aW9uLCB1c2luZyBhIFsyNC1ob3VyIGxpbmVhcgogc21lYXJdKGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3RpbWUvc21lYXIpLgoKIFRoZSByYW5nZSBpcyBmcm9tIDAwMDEtMDEtMDFUMDA6MDA6MDBaIHRvIDk5OTktMTItMzFUMjM6NTk6NTkuOTk5OTk5OTk5Wi4gQnkKIHJlc3RyaWN0aW5nIHRvIHRoYXQgcmFuZ2UsIHdlIGVuc3VyZSB0aGF0IHdlIGNhbiBjb252ZXJ0IHRvIGFuZCBmcm9tIFtSRkMKIDMzMzldKGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzMzM5LnR4dCkgZGF0ZSBzdHJpbmdzLgoKICMgRXhhbXBsZXMKCiBFeGFtcGxlIDE6IENvbXB1dGUgVGltZXN0YW1wIGZyb20gUE9TSVggYHRpbWUoKWAuCgogICAgIFRpbWVzdGFtcCB0aW1lc3RhbXA7CiAgICAgdGltZXN0YW1wLnNldF9zZWNvbmRzKHRpbWUoTlVMTCkpOwogICAgIHRpbWVzdGFtcC5zZXRfbmFub3MoMCk7CgogRXhhbXBsZSAyOiBDb21wdXRlIFRpbWVzdGFtcCBmcm9tIFBPU0lYIGBnZXR0aW1lb2ZkYXkoKWAuCgogICAgIHN0cnVjdCB0aW1ldmFsIHR2OwogICAgIGdldHRpbWVvZmRheSgmdHYsIE5VTEwpOwoKICAgICBUaW1lc3RhbXAgdGltZXN0YW1wOwogICAgIHRpbWVzdGFtcC5zZXRfc2Vjb25kcyh0di50dl9zZWMpOwogICAgIHRpbWVzdGFtcC5zZXRfbmFub3ModHYudHZfdXNlYyAqIDEwMDApOwoKIEV4YW1wbGUgMzogQ29tcHV0ZSBUaW1lc3RhbXAgZnJvbSBXaW4zMiBgR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoKWAuCgogICAgIEZJTEVUSU1FIGZ0OwogICAgIEdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCZmdCk7CiAgICAgVUlOVDY0IHRpY2tzID0gKCgoVUlOVDY0KWZ0LmR3SGlnaERhdGVUaW1lKSA8PCAzMikgfCBmdC5kd0xvd0RhdGVUaW1lOwoKICAgICAvLyBBIFdpbmRvd3MgdGljayBpcyAxMDAgbmFub3NlY29uZHMuIFdpbmRvd3MgZXBvY2ggMTYwMS0wMS0wMVQwMDowMDowMFoKICAgICAvLyBpcyAxMTY0NDQ3MzYwMCBzZWNvbmRzIGJlZm9yZSBVbml4IGVwb2NoIDE5NzAtMDEtMDFUMDA6MDA6MDBaLgogICAgIFRpbWVzdGFtcCB0aW1lc3RhbXA7CiAgICAgdGltZXN0YW1wLnNldF9zZWNvbmRzKChJTlQ2NCkgKCh0aWNrcyAvIDEwMDAwMDAwKSAtIDExNjQ0NDczNjAwTEwpKTsKICAgICB0aW1lc3RhbXAuc2V0X25hbm9zKChJTlQzMikgKCh0aWNrcyAlIDEwMDAwMDAwKSAqIDEwMCkpOwoKIEV4YW1wbGUgNDogQ29tcHV0ZSBUaW1lc3RhbXAgZnJvbSBKYXZhIGBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKWAuCgogICAgIGxvbmcgbWlsbGlzID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CgogICAgIFRpbWVzdGFtcCB0aW1lc3RhbXAgPSBUaW1lc3RhbXAubmV3QnVpbGRlcigpLnNldFNlY29uZHMobWlsbGlzIC8gMTAwMCkKICAgICAgICAgLnNldE5hbm9zKChpbnQpICgobWlsbGlzICUgMTAwMCkgKiAxMDAwMDAwKSkuYnVpbGQoKTsKCgogRXhhbXBsZSA1OiBDb21wdXRlIFRpbWVzdGFtcCBmcm9tIGN1cnJlbnQgdGltZSBpbiBQeXRob24uCgogICAgIHRpbWVzdGFtcCA9IFRpbWVzdGFtcCgpCiAgICAgdGltZXN0YW1wLkdldEN1cnJlbnRUaW1lKCkKCiAjIEpTT04gTWFwcGluZwoKIEluIEpTT04gZm9ybWF0LCB0aGUgVGltZXN0YW1wIHR5cGUgaXMgZW5jb2RlZCBhcyBhIHN0cmluZyBpbiB0aGUKIFtSRkMgMzMzOV0oaHR0cHM6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzMzMzkudHh0KSBmb3JtYXQuIFRoYXQgaXMsIHRoZQogZm9ybWF0IGlzICJ7eWVhcn0te21vbnRofS17ZGF5fVR7aG91cn06e21pbn06e3NlY31bLntmcmFjX3NlY31dWiIKIHdoZXJlIHt5ZWFyfSBpcyBhbHdheXMgZXhwcmVzc2VkIHVzaW5nIGZvdXIgZGlnaXRzIHdoaWxlIHttb250aH0sIHtkYXl9LAoge2hvdXJ9LCB7bWlufSwgYW5kIHtzZWN9IGFyZSB6ZXJvLXBhZGRlZCB0byB0d28gZGlnaXRzIGVhY2guIFRoZSBmcmFjdGlvbmFsCiBzZWNvbmRzLCB3aGljaCBjYW4gZ28gdXAgdG8gOSBkaWdpdHMgKGkuZS4gdXAgdG8gMSBuYW5vc2Vjb25kIHJlc29sdXRpb24pLAogYXJlIG9wdGlvbmFsLiBUaGUgIloiIHN1ZmZpeCBpbmRpY2F0ZXMgdGhlIHRpbWV6b25lICgiVVRDIik7IHRoZSB0aW1lem9uZQogaXMgcmVxdWlyZWQuIEEgcHJvdG8zIEpTT04gc2VyaWFsaXplciBzaG91bGQgYWx3YXlzIHVzZSBVVEMgKGFzIGluZGljYXRlZCBieQogIloiKSB3aGVuIHByaW50aW5nIHRoZSBUaW1lc3RhbXAgdHlwZSBhbmQgYSBwcm90bzMgSlNPTiBwYXJzZXIgc2hvdWxkIGJlCiBhYmxlIHRvIGFjY2VwdCBib3RoIFVUQyBhbmQgb3RoZXIgdGltZXpvbmVzIChhcyBpbmRpY2F0ZWQgYnkgYW4gb2Zmc2V0KS4KCiBGb3IgZXhhbXBsZSwgIjIwMTctMDEtMTVUMDE6MzA6MTUuMDFaIiBlbmNvZGVzIDE1LjAxIHNlY29uZHMgcGFzdAogMDE6MzAgVVRDIG9uIEphbnVhcnkgMTUsIDIwMTcuCgogSW4gSmF2YVNjcmlwdCwgb25lIGNhbiBjb252ZXJ0IGEgRGF0ZSBvYmplY3QgdG8gdGhpcyBmb3JtYXQgdXNpbmcgdGhlCiBzdGFuZGFyZAogW3RvSVNPU3RyaW5nKCldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGUvdG9JU09TdHJpbmcpCiBtZXRob2QuIEluIFB5dGhvbiwgYSBzdGFuZGFyZCBgZGF0ZXRpbWUuZGF0ZXRpbWVgIG9iamVjdCBjYW4gYmUgY29udmVydGVkCiB0byB0aGlzIGZvcm1hdCB1c2luZwogW2BzdHJmdGltZWBdKGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS90aW1lLmh0bWwjdGltZS5zdHJmdGltZSkgd2l0aAogdGhlIHRpbWUgZm9ybWF0IHNwZWMgJyVZLSVtLSVkVCVIOiVNOiVTLiVmWicuIExpa2V3aXNlLCBpbiBKYXZhLCBvbmUgY2FuIHVzZQogdGhlIEpvZGEgVGltZSdzIFtgSVNPRGF0ZVRpbWVGb3JtYXQuZGF0ZVRpbWUoKWBdKAogaHR0cDovL3d3dy5qb2RhLm9yZy9qb2RhLXRpbWUvYXBpZG9jcy9vcmcvam9kYS90aW1lL2Zvcm1hdC9JU09EYXRlVGltZUZvcm1hdC5odG1sI2RhdGVUaW1lJTJEJTJECiApIHRvIG9idGFpbiBhIGZvcm1hdHRlciBjYXBhYmxlIG9mIGdlbmVyYXRpbmcgdGltZXN0YW1wcyBpbiB0aGlzIGZvcm1hdC4KCgoKCgoDBAABEgN+CBEKnQEKBAQAAgASBIIBAhQajgEgUmVwcmVzZW50cyBzZWNvbmRzIG9mIFVUQyB0aW1lIHNpbmNlIFVuaXggZXBvY2gKIDE5NzAtMDEtMDFUMDA6MDA6MDBaLiBNdXN0IGJlIGZyb20gMDAwMS0wMS0wMVQwMDowMDowMFogdG8KIDk5OTktMTItMzFUMjM6NTk6NTlaIGluY2x1c2l2ZS4KCg4KBQQAAgAEEgWCAQJ+EwoNCgUEAAIABRIEggECBwoNCgUEAAIAARIEggEIDwoNCgUEAAIAAxIEggESEwrlAQoEBAACARIEiAECEhrWASBOb24tbmVnYXRpdmUgZnJhY3Rpb25zIG9mIGEgc2Vjb25kIGF0IG5hbm9zZWNvbmQgcmVzb2x1dGlvbi4gTmVnYXRpdmUKIHNlY29uZCB2YWx1ZXMgd2l0aCBmcmFjdGlvbnMgbXVzdCBzdGlsbCBoYXZlIG5vbi1uZWdhdGl2ZSBuYW5vcyB2YWx1ZXMKIHRoYXQgY291bnQgZm9yd2FyZCBpbiB0aW1lLiBNdXN0IGJlIGZyb20gMCB0byA5OTksOTk5LDk5OQogaW5jbHVzaXZlLgoKDwoFBAACAQQSBogBAoIBFAoNCgUEAAIBBRIEiAECBwoNCgUEAAIBARIEiAEIDQoNCgUEAAIBAxIEiAEQEWIGcHJvdG8zCs4kCh5nb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucHJvdG8SD2dvb2dsZS5wcm90b2J1ZiIjCgtEb3VibGVWYWx1ZRIUCgV2YWx1ZRgBIAEoAVIFdmFsdWUiIgoKRmxvYXRWYWx1ZRIUCgV2YWx1ZRgBIAEoAlIFdmFsdWUiIgoKSW50NjRWYWx1ZRIUCgV2YWx1ZRgBIAEoA1IFdmFsdWUiIwoLVUludDY0VmFsdWUSFAoFdmFsdWUYASABKARSBXZhbHVlIiIKCkludDMyVmFsdWUSFAoFdmFsdWUYASABKAVSBXZhbHVlIiMKC1VJbnQzMlZhbHVlEhQKBXZhbHVlGAEgASgNUgV2YWx1ZSIhCglCb29sVmFsdWUSFAoFdmFsdWUYASABKAhSBXZhbHVlIiMKC1N0cmluZ1ZhbHVlEhQKBXZhbHVlGAEgASgJUgV2YWx1ZSIiCgpCeXRlc1ZhbHVlEhQKBXZhbHVlGAEgASgMUgV2YWx1ZUJ8ChNjb20uZ29vZ2xlLnByb3RvYnVmQg1XcmFwcGVyc1Byb3RvUAFaKmdpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3B0eXBlcy93cmFwcGVyc/gBAaICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc0rNIAoGEgQoAHoBCtsQCgEMEgMoABIywQwgUHJvdG9jb2wgQnVmZmVycyAtIEdvb2dsZSdzIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0CiBDb3B5cmlnaHQgMjAwOCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3Byb3RvY29sLWJ1ZmZlcnMvCgogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiBtZXQ6CgogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKIGRpc3RyaWJ1dGlvbi4KICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCjKMBCBXcmFwcGVycyBmb3IgcHJpbWl0aXZlIChub24tbWVzc2FnZSkgdHlwZXMuIFRoZXNlIHR5cGVzIGFyZSB1c2VmdWwKIGZvciBlbWJlZGRpbmcgcHJpbWl0aXZlcyBpbiB0aGUgYGdvb2dsZS5wcm90b2J1Zi5BbnlgIHR5cGUgYW5kIGZvciBwbGFjZXMKIHdoZXJlIHdlIG5lZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgYWJzZW5jZSBvZiBhIHByaW1pdGl2ZQogdHlwZWQgZmllbGQgYW5kIGl0cyBkZWZhdWx0IHZhbHVlLgoKIFRoZXNlIHdyYXBwZXJzIGhhdmUgbm8gbWVhbmluZ2Z1bCB1c2Ugd2l0aGluIHJlcGVhdGVkIGZpZWxkcyBhcyB0aGV5IGxhY2sKIHRoZSBhYmlsaXR5IHRvIGRldGVjdCBwcmVzZW5jZSBvbiBpbmRpdmlkdWFsIGVsZW1lbnRzLgogVGhlc2Ugd3JhcHBlcnMgaGF2ZSBubyBtZWFuaW5nZnVsIHVzZSB3aXRoaW4gYSBtYXAgb3IgYSBvbmVvZiBzaW5jZQogaW5kaXZpZHVhbCBlbnRyaWVzIG9mIGEgbWFwIG9yIGZpZWxkcyBvZiBhIG9uZW9mIGNhbiBhbHJlYWR5IGRldGVjdCBwcmVzZW5jZS4KCggKAQISAyoAGAoICgEIEgMsADsKCQoCCCUSAywAOwoICgEIEgMtAB8KCQoCCB8SAy0AHwoICgEIEgMuAEEKCQoCCAsSAy4AQQoICgEIEgMvACwKCQoCCAESAy8ALAoICgEIEgMwAC4KCQoCCAgSAzAALgoICgEIEgMxACIKCQoCCAoSAzEAIgoICgEIEgMyACEKCQoCCCQSAzIAIQpnCgIEABIENwA6ARpbIFdyYXBwZXIgbWVzc2FnZSBmb3IgYGRvdWJsZWAuCgogVGhlIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIGBEb3VibGVWYWx1ZWAgaXMgSlNPTiBudW1iZXIuCgoKCgMEAAESAzcIEwogCgQEAAIAEgM5AhMaEyBUaGUgZG91YmxlIHZhbHVlLgoK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ZS9wcm90b2J1Zi9hbnkucHJvdG8aGWdvb2dsZS9wcm90b2J1Zi9hcGkucHJvdG8aHmdvb2dsZS9wcm90b2J1Zi9kdXJhdGlvbi5wcm90bxobZ29vZ2xlL3Byb3RvYnVmL2VtcHR5LnByb3RvGiBnb29nbGUvcHJvdG9idWYvZmllbGRfbWFzay5wcm90bxokZ29vZ2xlL3Byb3RvYnVmL3NvdXJjZV9jb250ZXh0LnByb3RvGhxnb29nbGUvcHJvdG9idWYvc3RydWN0LnByb3RvGh9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnByb3RvGhpnb29nbGUvcHJvdG9idWYvdHlwZS5wcm90bxoeZ29vZ2xlL3Byb3RvYnVmL3dyYXBwZXJzLnByb3RvIrQJChJUZXN0V2VsbEtub3duVHlwZXMSMQoJYW55X2ZpZWxkGAEgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueVIIYW55RmllbGQSMQoJYXBpX2ZpZWxkGAIgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFwaVIIYXBpRmllbGQSQAoOZHVyYXRpb25fZmllbGQYAyABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25SDWR1cmF0aW9uRmllbGQSNwoLZW1wdHlfZmllbGQYBCABKAsyFi5nb29nbGUucHJvdG9idWYuRW1wdHlSCmVtcHR5RmllbGQSRAoQZmllbGRfbWFza19maWVsZBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2tSDmZpZWxkTWFza0ZpZWxkElAKFHNvdXJjZV9jb250ZXh0X2ZpZWxkGAYgASgLMh4uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvbnRleHRSEnNvdXJjZUNvbnRleHRGaWVsZBI6CgxzdHJ1Y3RfZmllbGQYByABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0UgtzdHJ1Y3RGaWVsZBJDCg90aW1lc3RhbXBfZmllbGQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wUg50aW1lc3RhbXBGaWVsZBI0Cgp0eXBlX2ZpZWxkGAkgASgLMhUuZ29vZ2xlLnByb3RvYnVmLlR5cGVSCXR5cGVGaWVsZBI/Cgxkb3VibGVfZmllbGQYCiABKAsyHC5nb29nbGUucHJvdG9idWYuRG91YmxlVmFsdWVSC2RvdWJsZUZpZWxkEjwKC2Zsb2F0X2ZpZWxkGAsgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkZsb2F0VmFsdWVSCmZsb2F0RmllbGQSPAoLaW50NjRfZmllbGQYDCABKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZVIKaW50NjRGaWVsZBI/Cgx1aW50NjRfZmllbGQYDSABKAsyHC5nb29nbGUucHJvdG9idWYuVUludDY0VmFsdWVSC3VpbnQ2NEZpZWxkEjwKC2ludDMyX2ZpZWxkGA4gASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWVSCmludDMyRmllbGQSPwoMdWludDMyX2ZpZWxkGA8gASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlUgt1aW50MzJGaWVsZBI5Cgpib29sX2ZpZWxkGBAgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZVIJYm9vbEZpZWxkEj8KDHN0cmluZ19maWVsZBgRIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVILc3RyaW5nRmllbGQSPAoLYnl0ZXNfZmllbGQYEiABKAsyGy5nb29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZVIKYnl0ZXNGaWVsZBI3Cgt2YWx1ZV9maWVsZBgTIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZVIKdmFsdWVGaWVsZCL/CAoWUmVwZWF0ZWRXZWxsS25vd25UeXBlcxIxCglhbnlfZmllbGQYASADKAsyFC5nb29nbGUucHJvdG9idWYuQW55UghhbnlGaWVsZBIxCglhcGlfZmllbGQYAiADKAsyFC5nb29nbGUucHJvdG9idWYuQXBpUghhcGlGaWVsZBJACg5kdXJhdGlvbl9maWVsZBgDIAMoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvblINZHVyYXRpb25GaWVsZBI3CgtlbXB0eV9maWVsZBgEIAMoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eVIKZW1wdHlGaWVsZBJEChBmaWVsZF9tYXNrX2ZpZWxkGAUgAygLMhouZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFza1IOZmllbGRNYXNrRmllbGQSUAoUc291cmNlX2NvbnRleHRfZmllbGQYBiADKAsyHi5nb29nbGUucHJvdG9idWYuU291cmNlQ29udGV4dFISc291cmNlQ29udGV4dEZpZWxkEjoKDHN0cnVjdF9maWVsZBgHIAMoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RSC3N0cnVjdEZpZWxkEkMKD3RpbWVzdGFtcF9maWVsZBgIIAMoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBSDnRpbWVzdGFtcEZpZWxkEjQKCnR5cGVfZmllbGQYCSADKAsyFS5nb29nbGUucHJvdG9idWYuVHlwZVIJdHlwZUZpZWxkEj8KDGRvdWJsZV9maWVsZBgKIAMoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZVILZG91YmxlRmllbGQSPAoLZmxvYXRfZmllbGQYCyADKAsyGy5nb29nbGUucHJvdG9idWYuRmxvYXRWYWx1ZVIKZmxvYXRGaWVsZBI8CgtpbnQ2NF9maWVsZBgMIAMoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlUgppbnQ2NEZpZWxkEj8KDHVpbnQ2NF9maWVsZBgNIAMoCzIcLmdvb2dsZS5wcm90b2J1Zi5VSW50NjRWYWx1ZVILdWludDY0RmllbGQSPAoLaW50MzJfZmllbGQYDiADKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZVIKaW50MzJGaWVsZBI/Cgx1aW50MzJfZmllbGQYDyADKAsyHC5nb29nbGUucHJvdG9idWYuVUludDMyVmFsdWVSC3VpbnQzMkZpZWxkEjkKCmJvb2xfZmllbGQYECADKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlUglib29sRmllbGQSPwoMc3RyaW5nX2ZpZWxkGBEgAygLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlUgtzdHJpbmdGaWVsZBI8CgtieXRlc19maWVsZBgSIAMoCzIbLmdvb2dsZS5wcm90b2J1Zi5CeXRlc1ZhbHVlUgpieXRlc0ZpZWxkIq8JChNPbmVvZldlbGxLbm93blR5cGVzEjMKCWFueV9maWVsZBgBIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlIAFIIYW55RmllbGQSMwoJYXBpX2ZpZWxkGAIgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFwaUgAUghhcGlGaWVsZBJCCg5kdXJhdGlvbl9maWVsZBgDIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkgAUg1kdXJhdGlvbkZpZWxkEjkKC2VtcHR5X2ZpZWxkGAQgASgLMhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5SABSCmVtcHR5RmllbGQSRgoQZmllbGRfbWFza19maWVsZBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2tIAFIOZmllbGRNYXNrRmllbGQSUgoUc291cmNlX2NvbnRleHRfZmllbGQYBiABKAsyHi5nb29nbGUucHJvdG9idWYuU291cmNlQ29udGV4dEgAUhJzb3VyY2VDb250ZXh0RmllbGQSPAoMc3RydWN0X2ZpZWxkGAcgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgAUgtzdHJ1Y3RGaWVsZBJFCg90aW1lc3RhbXBfZmllbGQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSABSDnRpbWVzdGFtcEZpZWxkEjYKCnR5cGVfZmllbGQYCSABKAsyFS5nb29nbGUucHJvdG9idWYuVHlwZUgAUgl0eXBlRmllbGQSQQoMZG91YmxlX2ZpZWxkGAogASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlSABSC2RvdWJsZUZpZWxkEj4KC2Zsb2F0X2ZpZWxkGAsgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkZsb2F0VmFsdWVIAFIKZmxvYXRGaWVsZBI+CgtpbnQ2NF9maWVsZBgMIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQ2NFZhbHVlSABSCmludDY0RmllbGQSQQoMdWludDY0X2ZpZWxkGA0gASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlSABSC3VpbnQ2NEZpZWxkEj4KC2ludDMyX2ZpZWxkGA4gASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWVIAFIKaW50MzJGaWVsZBJBCgx1aW50MzJfZmllbGQYDyABKAsyHC5nb29nbGUucHJvdG9idWYuVUludDMyVmFsdWVIAFILdWludDMyRmllbGQSOwoKYm9vbF9maWVsZBgQIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVIAFIJYm9vbEZpZWxkEkEKDHN0cmluZ19maWVsZBgRIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZUgAUgtzdHJpbmdGaWVsZBI+CgtieXRlc19maWVsZBgSIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5CeXRlc1ZhbHVlSABSCmJ5dGVzRmllbGRCDQoLb25lb2ZfZmllbGQi2BkKEU1hcFdlbGxLbm93blR5cGVzEk8KCWFueV9maWVsZBgBIAMoCzIyLnByb3RvYnVmX3VuaXR0ZXN0Lk1hcFdlbGxLbm93blR5cGVzLkFueUZpZWxkRW50cnlSCGFueUZpZWxkEk8KCWFwaV9maWVsZBgCIAMoCzIyLnByb3RvYnVmX3VuaXR0ZXN0Lk1hcFdlbGxLbm93blR5cGVzLkFwaUZpZWxkRW50cnlSCGFwaUZpZWxkEl4KDmR1cmF0aW9uX2ZpZWxkGAMgAygLMjcucHJvdG9idWZfdW5pdHRlc3QuTWFwV2VsbEtub3duVHlwZXMuRHVyYXRpb25GaWVsZEVudHJ5Ug1kdXJhdGlvbkZpZWxkElUKC2VtcHR5X2ZpZWxkGAQgAygLMjQucHJvdG9idWZfdW5pdHRlc3QuTWFwV2VsbEtub3duVHlwZXMuRW1wdHlGaWVsZEVudHJ5UgplbXB0eUZpZWxkEmIKEGZpZWxkX21hc2tfZmllbGQYBSADKAsyOC5wcm90b2J1Zl91bml0dGVzdC5NYXBXZWxsS25vd25UeXBlcy5GaWVsZE1hc2tGaWVsZEVudHJ5Ug5maWVsZE1hc2tGaWVsZBJuChRzb3VyY2VfY29udGV4dF9maWVsZBgGIAMoCzI8LnByb3RvYnVmX3VuaXR0ZXN0Lk1hcFdlbGxLbm93blR5cGVzLlNvdXJjZUNvbnRleHRGaWVsZEVudHJ5UhJzb3VyY2VDb250ZXh0RmllbGQSWAoMc3RydWN0X2ZpZWxkGAcgAygLMjUucHJvdG9idWZfdW5pdHRlc3QuTWFwV2VsbEtub3duVHlwZXMuU3RydWN0RmllbGRFbnRyeVILc3RydWN0RmllbGQSYQoPdGltZXN0YW1wX2ZpZWxkGAggAygLMjgucHJvdG9idWZfdW5pdHRlc3QuTWFwV2VsbEtub3duVHlwZXMuVGltZXN0YW1wRmllbGRFbnRyeVIOdGltZXN0YW1wRmllbGQSUgoKdHlwZV9maWVsZBgJIAMoCzIzLnByb3RvYnVmX3VuaXR0ZXN0Lk1hcFdlbGxLbm93blR5cGVzLlR5cGVGaWVsZEVudHJ5Ugl0eXBlRmllbGQSWAoMZG91YmxlX2ZpZWxkGAogAygLMjUucHJvdG9idWZfdW5pdHRlc3QuTWFwV2VsbEtub3duVHlwZXMuRG91YmxlRmllbGRFbnRyeVILZG91YmxlRmllbGQSVQoLZmxvYXRfZmllbGQYCyADKAsyNC5wcm90b2J1Zl91bml0dGVzdC5NYXBXZWxsS25vd25UeXBlcy5GbG9hdEZpZWxkRW50cnlSCmZsb2F0RmllbGQSVQoLaW50NjRfZmllbGQYDCADKAsyNC5wcm90b2J1Zl91bml0dGVzdC5NYXBXZWxsS25vd25UeXBlcy5JbnQ2NEZpZWxkRW50cnlSCmludDY0RmllbGQSWAoMdWludDY0X2ZpZWxkGA0gAygLMjUucHJvdG9idWZfdW5pdHRlc3QuTWFwV2VsbEtub3duVHlwZXMuVWludDY0RmllbGRFbnRyeVILdWludDY0RmllbGQSVQoLaW50MzJfZmllbGQYDiADKAsyNC5wcm90b2J1Zl91bml0dGVzdC5NYXBXZWxsS25vd25UeXBlcy5JbnQzMkZpZWxkRW50cnlSCmludDMyRmllbGQSWAoMdWludDMyX2ZpZWxkGA8gAygLMjUucHJvdG9idWZfdW5pdHRlc3QuTWFwV2VsbEtub3duVHlwZXMuVWludDMyRmllbGRFbnRyeVILdWludDMyRmllbGQSUgoKYm9vbF9maWVsZBgQIAMoCzIzLnByb3RvYnVmX3VuaXR0ZXN0Lk1hcFdlbGxLbm93blR5cGVzLkJvb2xGaWVsZEVudHJ5Uglib29sRmllbGQSWAoMc3RyaW5nX2ZpZWxkGBEgAygLMjUucHJvdG9idWZfdW5pdHRlc3QuTWFwV2VsbEtub3duVHlwZXMuU3RyaW5nRmllbGRFbnRyeVILc3RyaW5nRmllbGQSVQoLYnl0ZXNfZmllbGQYEiADKAsyNC5wcm90b2J1Zl91bml0dGVzdC5NYXBXZWxsS25vd25UeXBlcy5CeXRlc0ZpZWxkRW50cnlSCmJ5dGVzRmllbGQaUQoNQW55RmllbGRFbnRyeRIQCgNrZXkYASABKAVSA2tleRIqCgV2YWx1ZRgCIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlSBXZhbHVlOgI4ARpRCg1BcGlGaWVsZEVudHJ5EhAKA2tleRgBIAEoBVIDa2V5EioKBXZhbHVlGAIgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFwaVIFdmFsdWU6AjgBGlsKEkR1cmF0aW9uRmllbGRFbnRyeRIQCgNrZXkYASABKAVSA2tleRIvCgV2YWx1ZRgCIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvblIFdmFsdWU6AjgBGlUKD0VtcHR5RmllbGRFbnRyeRIQCgNrZXkYASABKAVSA2tleRIsCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eVIFdmFsdWU6AjgBGl0KE0ZpZWxkTWFza0ZpZWxkRW50cnkSEAoDa2V5GAEgASgFUgNrZXkSMAoFdmFsdWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrUgV2YWx1ZToCOAEaZQoXU291cmNlQ29udGV4dEZpZWxkRW50cnkSEAoDa2V5GAEgASgFUgNrZXkSNAoFdmFsdWUYAiABKAsyHi5nb29nbGUucHJvdG9idWYuU291cmNlQ29udGV4dFIFdmFsdWU6AjgBGlcKEFN0cnVjdEZpZWxkRW50cnkSEAoDa2V5GAEgASgFUgNrZXkSLQoFdmFsdWUYAiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0UgV2YWx1ZToCOAEaXQoTVGltZXN0YW1wRmllbGRFbnRyeRIQCgNrZXkYASABKAVSA2tleRIwCgV2YWx1ZRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBSBXZhbHVlOgI4ARpTCg5UeXBlRmllbGRFbnRyeRIQCgNrZXkYASABKAVSA2tleRIrCgV2YWx1ZRgCIAEoCzIVLmdvb2dsZS5wcm90b2J1Zi5UeXBlUgV2YWx1ZToCOAEaXAoQRG91YmxlRmllbGRFbnRyeRIQCgNrZXkYASABKAVSA2tleRIyCgV2YWx1ZRgCIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5Eb3VibGVWYWx1ZVIFdmFsdWU6AjgBGloKD0Zsb2F0RmllbGRFbnRyeRIQCgNrZXkYASABKAVSA2tleRIxCgV2YWx1ZRgCIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5GbG9hdFZhbHVlUgV2YWx1ZToCOAEaWgoPSW50NjRGaWVsZEVudHJ5EhAKA2tleRgBIAEoBVIDa2V5EjEKBXZhbHVlGAIgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDY0VmFsdWVSBXZhbHVlOgI4ARpcChBVaW50NjRGaWVsZEVudHJ5EhAKA2tleRgBIAEoBVIDa2V5EjIKBXZhbHVlGAIgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlUgV2YWx1ZToCOAEaWgoPSW50MzJGaWVsZEVudHJ5EhAKA2tleRgBIAEoBVIDa2V5EjEKBXZhbHVlGAIgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWVSBXZhbHVlOgI4ARpcChBVaW50MzJGaWVsZEVudHJ5EhAKA2tleRgBIAEoBVIDa2V5EjIKBXZhbHVlGAIgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlUgV2YWx1ZToCOAEaWAoOQm9vbEZpZWxkRW50cnkSEAoDa2V5GAEgASgFUgNrZXkSMAoFdmFsdWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuQm9vbFZhbHVlUgV2YWx1ZToCOAEaXAoQU3RyaW5nRmllbGRFbnRyeRIQCgNrZXkYASABKAVSA2tleRIyCgV2YWx1ZRgCIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZVIFdmFsdWU6AjgBGloKD0J5dGVzRmllbGRFbnRyeRIQCgNrZXkYASABKAVSA2tleRIxCgV2YWx1ZRgCIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5CeXRlc1ZhbHVlUgV2YWx1ZToCOAFCOQoYY29tLmdvb2dsZS5wcm90b2J1Zi50ZXN0UAGqAhpHb29nbGUuUHJv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BAMCDgQSBG0CbDkKDAoFBAMCDgYSA20CKAoMCgUEAwIOARIDbSk1CgwKBQQDAg4DEgNtODoKCwoEBAMCDxIDbgI3Cg0KBQQDAg8EEgRuAm07CgwKBQQDAg8GEgNuAiYKDAoFBAMCDwESA24nMQoMCgUEAwIPAxIDbjQ2CgsKBAQDAhASA28COwoNCgUEAwIQBBIEbwJuNwoMCgUEAwIQBhIDbwIoCgwKBQQDAhABEgNvKTUKDAoFBAMCEAMSA284OgoLCgQEAwIREgNwAjkKDQoFBAMCEQQSBHACbzsKDAoFBAMCEQYSA3ACJwoMCgUEAwIRARIDcCgzCgwKBQQDAhEDEgNwNjhiBnByb3RvMwrbtAEKKmdvb2dsZS9wcm90b2J1Zi90ZXN0X21lc3NhZ2VzX3Byb3RvMy5wcm90bxIdcHJvdG9idWZfdGVzdF9tZXNzYWdlcy5wcm90bzMaGWdvb2dsZS9wcm90b2J1Zi9hbnkucHJvdG8aHmdvb2dsZS9wcm90b2J1Zi9kdXJhdGlvbi5wcm90bxogZ29vZ2xlL3Byb3RvYnVmL2ZpZWxkX21hc2sucHJvdG8aHGdvb2dsZS9wcm90b2J1Zi9zdHJ1Y3QucHJvdG8aH2dvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXAucHJvdG8aHmdvb2dsZS9wcm90b2J1Zi93cmFwcGVycy5wcm90byK+TwoSVGVzdEFsbFR5cGVzUHJvdG8zEiUKDm9wdGlvbmFsX2ludDMyGAEgASgFUg1vcHRpb25hbEludDMyEiUKDm9wdGlvbmFsX2ludDY0GAIgASgDUg1vcHRpb25hbEludDY0EicKD29wdGlvbmFsX3VpbnQzMhgDIAEoDVIOb3B0aW9uYWxVaW50MzISJwoPb3B0aW9uYWxfdWludDY0GAQgASgEUg5vcHRpb25hbFVpbnQ2NBInCg9vcHRpb25hbF9zaW50MzIYBSABKBFSDm9wdGlvbmFsU2ludDMyEicKD29wdGlvbmFsX3NpbnQ2NBgGIAEoElIOb3B0aW9uYWxTaW50NjQSKQoQb3B0aW9uYWxfZml4ZWQzMhgHIAEoB1IPb3B0aW9uYWxGaXhlZDMyEikKEG9wdGlvbmFsX2ZpeGVkNjQYCCABKAZSD29wdGlvbmFsRml4ZWQ2NBIrChFvcHRpb25hbF9zZml4ZWQzMhgJIAEoD1IQb3B0aW9uYWxTZml4ZWQzMhIrChFvcHRpb25hbF9zZml4ZWQ2NBgKIAEoEFIQb3B0aW9uYWxTZml4ZWQ2NBIlCg5vcHRpb25hbF9mbG9hdBgLIAEoAlINb3B0aW9uYWxGbG9hdBInCg9vcHRpb25hbF9kb3VibGUYDCABKAFSDm9wdGlvbmFsRG91YmxlEiMKDW9wdGlvbmFsX2Jvb2wYDSABKAhSDG9wdGlvbmFsQm9vbBInCg9vcHRpb25hbF9zdHJpbmcYDiABKAlSDm9wdGlvbmFsU3RyaW5nEiUKDm9wdGlvbmFsX2J5dGVzGA8gASgMUg1vcHRpb25hbEJ5dGVzEncKF29wdGlvbmFsX25lc3RlZF9tZXNzYWdlGBIgASgLMj8ucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5wcm90bzMuVGVzdEFsbFR5cGVzUHJvdG8zLk5lc3RlZE1lc3NhZ2VSFW9wdGlvbmFsTmVzdGVkTWVzc2FnZRJnChhvcHRpb25hbF9mb3JlaWduX21lc3NhZ2UYEyABKAsyLS5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLnByb3RvMy5Gb3JlaWduTWVzc2FnZVIWb3B0aW9uYWxGb3JlaWduTWVzc2FnZRJuChRvcHRpb25hbF9uZXN0ZWRfZW51bRgVIAEoDjI8LnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMucHJvdG8zLlRlc3RBbGxUeXBlc1Byb3RvMy5OZXN0ZWRFbnVtUhJvcHRpb25hbE5lc3RlZEVudW0SXgoVb3B0aW9uYWxfZm9yZWlnbl9lbnVtGBYgASgOMioucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5wcm90bzMuRm9yZWlnbkVudW1SE29wdGlvbmFsRm9yZWlnbkVudW0ScQoVb3B0aW9uYWxfYWxpYXNlZF9lbnVtGBcgASgOMj0ucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5wcm90bzMuVGVzdEFsbFR5cGVzUHJvdG8zLkFsaWFzZWRFbnVtUhNvcHRpb25hbEFsaWFzZWRFbnVtEjYKFW9wdGlvbmFsX3N0cmluZ19waWVjZRgYIAEoCUICCAJSE29wdGlvbmFsU3RyaW5nUGllY2USJwoNb3B0aW9uYWxfY29yZBgZIAEoCUICCAFSDG9wdGlvbmFsQ29yZBJeChFyZWN1cnNpdmVfbWVzc2FnZRgbIAEoCzIxLnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMucHJvdG8zLlRlc3RBbGxUeXBlc1Byb3RvM1IQcmVjdXJzaXZlTWVzc2FnZRIlCg5yZXBlYXRlZF9pbnQzMhgfIAMoBVINcmVwZWF0ZWRJbnQzMhIlCg5yZXBlYXRlZF9pbnQ2NBggIAMoA1INcmVwZWF0ZWRJbnQ2NBInCg9yZXBlYXRlZF91aW50MzIYISADKA1SDnJlcGVhdGVkVWludDMyEicKD3JlcGVhdGVkX3VpbnQ2NBgiIAMoBFIOcmVwZWF0ZWRVaW50NjQSJwoPcmVwZWF0ZWRfc2ludDMyGCMgAygRUg5yZXBlYXRlZFNpbnQzMhInCg9yZXBlYXRlZF9zaW50NjQYJCADKBJSDnJlcGVhdGVkU2ludDY0EikKEHJlcGVhdGVkX2ZpeGVkMzIYJSADKAdSD3JlcGVhdGVkRml4ZWQzMhIpChByZXBlYXRlZF9maXhlZDY0GCYgAygGUg9yZXBlYXRlZEZpeGVkNjQSKwoRcmVwZWF0ZWRfc2ZpeGVkMzIYJyADKA9SEHJlcGVhdGVkU2ZpeGVkMzISKwoRcmVwZWF0ZWRfc2ZpeGVkNjQYKCADKBBSEHJlcGVhdGVkU2ZpeGVkNjQSJQoOcmVwZWF0ZWRfZmxvYXQYKSADKAJSDXJlcGVhdGVkRmxvYXQSJwoPcmVwZWF0ZWRfZG91YmxlGCogAygBUg5yZXBlYXRlZERvdWJsZRIjCg1yZXBlYXRlZF9ib29sGCsgAygIUgxyZXBlYXRlZEJvb2wSJwoPcmVwZWF0ZWRfc3RyaW5nGCwgAygJUg5yZXBlYXRlZFN0cmluZxIlCg5yZXBlYXRlZF9ieXRlcxgtIAMoDFINcmVwZWF0ZWRCeXRlcxJ3ChdyZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZRgwIAMoCzI/LnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMucHJvdG8zLlRlc3RBbGxUeXBlc1Byb3RvMy5OZXN0ZWRNZXNzYWdlUhVyZXBlYXRlZE5lc3RlZE1lc3NhZ2USZwoYcmVwZWF0ZWRfZm9yZWlnbl9tZXNzYWdlGDEgAygLMi0ucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5wcm90bzMuRm9yZWlnbk1lc3NhZ2VSFnJlcGVhdGVkRm9yZWlnbk1lc3NhZ2USbgoUcmVwZWF0ZWRfbmVzdGVkX2VudW0YMyADKA4yPC5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLnByb3RvMy5UZXN0QWxsVHlwZXNQcm90bzMuTmVzdGVkRW51bVIScmVwZWF0ZWROZXN0ZWRFbnVtEl4KFXJlcGVhdGVkX2ZvcmVpZ25fZW51bRg0IAMoDjIqLnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMucHJvdG8zLkZvcmVpZ25FbnVtUhNyZXBlYXRlZEZvcmVpZ25FbnVtEjYKFXJlcGVhdGVkX3N0cmluZ19waWVjZRg2IAMoCUICCAJSE3JlcGVhdGVkU3RyaW5nUGllY2USJwoNcmVwZWF0ZWRfY29yZBg3IAMoCUICCAFSDHJlcGVhdGVkQ29yZBJsCg9tYXBfaW50MzJfaW50MzIYOCADKAsyRC5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLnByb3RvMy5UZXN0QWxsVHlwZXNQcm90bzMuTWFwSW50MzJJbnQzMkVudHJ5Ug1tYXBJbnQzMkludDMyEmwKD21hcF9pbnQ2NF9pbnQ2NBg5IAMoCzJELnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMucHJvdG8zLlRlc3RBbGxUeXBlc1Byb3RvMy5NYXBJbnQ2NEludDY0RW50cnlSDW1hcEludDY0SW50NjQScgoRbWFwX3VpbnQzMl91aW50MzIYOiADKAsyRi5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLnByb3RvMy5UZXN0QWxsVHlwZXNQcm90bzMuTWFwVWludDMyVWludDMyRW50cnlSD21hcFVpbnQzMlVpbnQzMhJyChFtYXBfdWludDY0X3VpbnQ2NBg7IAMoCzJGLnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMucHJvdG8zLlRlc3RBbGxUeXBlc1Byb3RvMy5NYXBVaW50NjRVaW50NjRFbnRyeVIPbWFwVWludDY0VWludDY0EnIKEW1hcF9zaW50MzJfc2ludDMyGDwgAygLMkYucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5wcm90bzMuVGVzdEFsbFR5cGVzUHJvdG8zLk1hcFNpbnQzMlNpbnQzMkVudHJ5Ug9tYXBTaW50MzJTaW50MzIScgoRbWFwX3NpbnQ2NF9zaW50NjQYPSADKAsyRi5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLnByb3RvMy5UZXN0QWxsVHlwZXNQcm90bzMuTWFwU2ludDY0U2ludDY0RW50cnlSD21hcFNpbnQ2NFNpbnQ2NBJ4ChNtYXBfZml4ZWQzMl9maXhlZDMyGD4gAygLMkgucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5wcm90bzMuVGVzdEFsbFR5cGVzUHJvdG8zLk1hcEZpeGVkMzJGaXhlZDMyRW50cnlSEW1hcEZpeGVkMzJGaXhlZDMyEngKE21hcF9maXhlZDY0X2ZpeGVkNjQYPyADKAsySC5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLnByb3RvMy5UZXN0QWxsVHlwZXNQcm90bzMuTWFwRml4ZWQ2NEZpeGVkNjRFbnRyeVIRbWFwRml4ZWQ2NEZpeGVkNjQSfgoVbWFwX3NmaXhlZDMyX3NmaXhlZDMyGEAgAygLMkoucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5wcm90bzMuVGVzdEFsbFR5cGVzUHJvdG8zLk1hcFNmaXhlZDMyU2ZpeGVkMzJFbnRyeVITbWFwU2ZpeGVkMzJTZml4ZWQzMhJ+ChVtYXBfc2ZpeGVkNjRfc2ZpeGVkNjQYQSADKAsySi5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLnByb3RvMy5UZXN0QWxsVHlwZXNQcm90bzMuTWFwU2ZpeGVkNjRTZml4ZWQ2NEVudHJ5UhNtYXBTZml4ZWQ2NFNmaXhlZDY0EmwKD21hcF9pbnQzMl9mbG9hdBhCIAMoCzJELnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMucHJvdG8zLlRlc3RBbGxUeXBlc1Byb3RvMy5NYXBJbnQzMkZsb2F0RW50cnlSDW1hcEludDMyRmxvYXQSbwoQbWFwX2ludDMyX2RvdWJsZRhDIAMoCzJFLnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMucHJvdG8zLlRlc3RBbGxUeXBlc1Byb3RvMy5NYXBJbnQzMkRvdWJsZUVudHJ5Ug5tYXBJbnQzMkRvdWJsZRJmCg1tYXBfYm9vbF9ib29sGEQgAygLMkIucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5wcm90bzMuVGVzdEFsbFR5cGVzUHJvdG8zLk1hcEJvb2xCb29sRW50cnlSC21hcEJvb2xCb29sEnIKEW1hcF9zdHJpbmdfc3RyaW5nGEUgAygLMkYucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5wcm90bzMuVGVzdEFsbFR5cGVzUHJvdG8zLk1hcFN0cmluZ1N0cmluZ0VudHJ5Ug9tYXBTdHJpbmdTdHJpbmcSbwoQbWFwX3N0cmluZ19ieXRlcxhGIAMoCzJFLnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMucHJvdG8zLlRlc3RBbGxUeXBlc1Byb3RvMy5NYXBTdHJpbmdCeXRlc0VudHJ5Ug5tYXBTdHJpbmdCeXRlcxKIAQoZbWFwX3N0cmluZ19uZXN0ZWRfbWVzc2FnZRhHIAMoCzJNLnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMucHJvdG8zLlRlc3RBbGxUeXBlc1Byb3RvMy5NYXBTdHJpbmdOZXN0ZWRNZXNzYWdlRW50cnlSFm1hcFN0cmluZ05lc3RlZE1lc3NhZ2USiwEKGm1hcF9zdHJpbmdfZm9yZWlnbl9tZXNzYWdlGEggAygLMk4ucHJvdG9idWZfdGVzdF9tZXNzYWdlcy5wcm90bzMuVGVzdEFsbFR5cGVzUHJvdG8zLk1hcFN0cmluZ0ZvcmVpZ25NZXNzYWdlRW50cnlSF21hcFN0cmluZ0ZvcmVpZ25NZXNzYWdlEn8KFm1hcF9zdHJpbmdfbmVzdGVkX2VudW0YSSADKAsySi5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLnByb3RvMy5UZXN0QWxsVHlwZXNQcm90bzMuTWFwU3RyaW5nTmVzdGVkRW51bUVudHJ5UhNtYXBTdHJpbmdOZXN0ZWRFbnVtEoIBChdtYXBfc3RyaW5nX2ZvcmVpZ25fZW51bRhKIAMoCzJLLnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMucHJvdG8zLlRlc3RBbGxUeXBlc1Byb3RvMy5NYXBTdHJpbmdGb3JlaWduRW51bUVudHJ5UhRtYXBTdHJpbmdGb3JlaWduRW51bRIjCgxvbmVvZl91aW50MzIYbyABKA1IAFILb25lb2ZVaW50MzIScwoUb25lb2ZfbmVzdGVkX21lc3NhZ2UYcCABKAsyPy5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLnByb3RvMy5UZXN0QWxsVHlwZXNQcm90bzMuTmVzdGVkTWVzc2FnZUgAUhJvbmVvZk5lc3RlZE1lc3NhZ2USIwoMb25lb2Zfc3RyaW5nGHEgASgJSABSC29uZW9mU3RyaW5nEiEKC29uZW9mX2J5dGVzGHIgASgMSABSCm9uZW9mQnl0ZXMSHwoKb25lb2ZfYm9vbBhzIAEoCEgAUglvbmVvZkJvb2wSIwoMb25lb2ZfdWludDY0GHQgASgESABSC29uZW9mVWludDY0EiEKC29uZW9mX2Zsb2F0GHUgASgCSABSCm9uZW9mRmxvYXQSIwoMb25lb2ZfZG91YmxlGHYgASgBSABSC29uZW9mRG91YmxlEl0KCm9uZW9mX2VudW0YdyABKA4yPC5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLnByb3RvMy5UZXN0QWxsVHlwZXNQcm90bzMuTmVzdGVkRW51bUgAUglvbmVvZkVudW0STwoVb3B0aW9uYWxfYm9vbF93cmFwcGVyGMkBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVSE29wdGlvbmFsQm9vbFdyYXBwZXISUgoWb3B0aW9uYWxfaW50MzJfd3JhcHBlchjKASABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZVIUb3B0aW9uYWxJbnQzMldyYXBwZXISUgoWb3B0aW9uYWxfaW50NjRfd3JhcHBlchjLASABKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZVIUb3B0aW9uYWxJbnQ2NFdyYXBwZXISVQoXb3B0aW9uYWxfdWludDMyX3dyYXBwZXIYzAEgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlUhVvcHRpb25hbFVpbnQzMldyYXBwZXISVQoXb3B0aW9uYWxfdWludDY0X3dyYXBwZXIYzQEgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlUhVvcHRpb25hbFVpbnQ2NFdyYXBwZXISUgoWb3B0aW9uYWxfZmxvYXRfd3JhcHBlchjOASABKAsyGy5nb29nbGUucHJvdG9idWYuRmxvYXRWYWx1ZVIUb3B0aW9uYWxGbG9hdFdyYXBwZXISVQoXb3B0aW9uYWxfZG91YmxlX3dyYXBwZXIYzwEgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlUhVvcHRpb25hbERvdWJsZVdyYXBwZXISVQoXb3B0aW9uYWxfc3RyaW5nX3dyYXBwZXIY0AEgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlUhVvcHRpb25hbFN0cmluZ1dyYXBwZXISUgoWb3B0aW9uYWxfYnl0ZXNfd3JhcHBlchjRASABKAsyGy5nb29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZVIUb3B0aW9uYWxCeXRlc1dyYXBwZXISTwoVcmVwZWF0ZWRfYm9vbF93cmFwcGVyGNMBIAMoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWVSE3JlcGVhdGVkQm9vbFdyYXBwZXISUgoWcmVwZWF0ZWRfaW50MzJfd3JhcHBlchjUASADKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZVIUcmVwZWF0ZWRJbnQzMldyYXBwZXISUgoWcmVwZWF0ZWRfaW50NjRfd3JhcHBlchjVASADKAsyGy5nb29nbGUucHJvdG9idWYuSW50NjRWYWx1ZVIUcmVwZWF0ZWRJbnQ2NFdyYXBwZXISVQoXcmVwZWF0ZWRfdWludDMyX3dyYXBwZXIY1gEgAygLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlUhVyZXBlYXRlZFVpbnQzMldyYXBwZXISVQoXcmVwZWF0ZWRfdWludDY0X3dyYXBwZXIY1wEgAygLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQ2NFZhbHVlUhVyZXBlYXRlZFVpbnQ2NFdyYXBwZXISUgoWcmVwZWF0ZWRfZmxvYXRfd3JhcHBlchjYASADKAsyGy5nb29nbGUucHJvdG9idWYuRmxvYXRWYWx1ZVIUcmVwZWF0ZWRGbG9hdFdyYXBwZXISVQoXcmVwZWF0ZWRfZG91YmxlX3dyYXBwZXIY2QEgAygLMhwuZ29vZ2xlLnByb3RvYnVmLkRvdWJsZVZhbHVlUhVyZXBlYXRlZERvdWJsZVdyYXBwZXISVQoXcmVwZWF0ZWRfc3RyaW5nX3dyYXBwZXIY2gEgAygLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlUhVyZXBlYXRlZFN0cmluZ1dyYXBwZXISUgoWcmVwZWF0ZWRfYnl0ZXNfd3JhcHBlchjbASADKAsyGy5nb29nbGUucHJvdG9idWYuQnl0ZXNWYWx1ZVIUcmVwZWF0ZWRCeXRlc1dyYXBwZXISRwoRb3B0aW9uYWxfZHVyYXRpb24YrQIgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uUhBvcHRpb25hbER1cmF0aW9uEkoKEm9wdGlvbmFsX3RpbWVzdGFtcBiuAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wUhFvcHRpb25hbFRpbWVzdGFtcBJLChNvcHRpb25hbF9maWVsZF9tYXNrGK8CIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2tSEW9wdGlvbmFsRmllbGRNYXNrEkEKD29wdGlvbmFsX3N0cnVjdBiwAiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Ug5vcHRpb25hbFN0cnVjdBI4CgxvcHRpb25hbF9hbnkYsQIgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueVILb3B0aW9uYWxBbnkSPgoOb3B0aW9uYWxfdmFsdWUYsgIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUg1vcHRpb25hbFZhbHVlEkcKEXJlcGVhdGVkX2R1cmF0aW9uGLcCIAMoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvblIQcmVwZWF0ZWREdXJhdGlvbhJKChJyZXBlYXRlZF90aW1lc3RhbXAYuAIgAygLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcFIRcmVwZWF0ZWRUaW1lc3RhbXASSgoScmVwZWF0ZWRfZmllbGRtYXNrGLkCIAMoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2tSEXJlcGVhdGVkRmllbGRtYXNrEkEKD3JlcGVhdGVkX3N0cnVjdBjEAiADKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Ug5yZXBlYXRlZFN0cnVjdBI4CgxyZXBlYXRlZF9hbnkYuwIgAygLMhQuZ29vZ2xlLnByb3RvYnVmLkFueVILcmVwZWF0ZWRBbnkSPgoOcmVwZWF0ZWRfdmFsdWUYvAIgAygLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUg1yZXBlYXRlZFZhbHVlEksKE3JlcGVhdGVkX2xpc3RfdmFsdWUYvQIgAygLMhouZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZVIRcmVwZWF0ZWRMaXN0VmFsdWUSHwoKZmllbGRuYW1lMRiRAyABKAVSCmZpZWxkbmFtZTESIAoLZmllbGRfbmFtZTIYkgMgASgFUgpmaWVsZE5hbWUyEiEKDF9maWVsZF9uYW1lMxiTAyABKAVSCkZpZWxkTmFtZTMSIgoNZmllbGRfX25hbWU0XxiUAyABKAVSCmZpZWxkTmFtZTQSIQoLZmllbGQwbmFtZTUYlQMgASgFUgtmaWVsZDBuYW1lNRIjCg1maWVsZF8wX25hbWU2GJYDIAEoBVILZmllbGQwTmFtZTYSHwoKZmllbGROYW1lNxiXAyABKAVSCmZpZWxkTmFtZTcSHwoKRmllbGROYW1lOBiYAyABKAVSCkZpZWxkTmFtZTgSIAoLZmllbGRfTmFtZTkYmQMgASgFUgpmaWVsZE5hbWU5EiIKDEZpZWxkX05hbWUxMBiaAyABKAVSC0ZpZWxkTmFtZTEwEiIKDEZJRUxEX05BTUUxMRibAyABKAVSC0ZJRUxETkFNRTExEiIKDEZJRUxEX25hbWUxMhicAyABKAVSC0ZJRUxETmFtZTEyEiQKDl9fZmllbGRfbmFtZTEzGJ0DIAEoBVILRmllbGROYW1lMTMSJAoOX19GaWVsZF9uYW1lMTQYngMgASgFUgtGaWVsZE5hbWUxNBIjCg1maWVsZF9fbmFtZTE1GJ8DIAEoBVILZmllbGROYW1lMTUSIwoNZmllbGRfX05hbWUxNhigAyABKAVSC2ZpZWxkTmFtZTE2EiQKDmZpZWxkX25hbWUxN19fGKEDIAEoBVILZmllbGROYW1lMTcSJAoORmllbGRfbmFtZTE4X18YogMgASgFUgtGaWVsZE5hbWUxOBpyCg1OZXN0ZWRNZXNzYWdlEgwKAWEYASABKAVSAWESUwoLY29yZWN1cnNpdmUYAiABKAsyMS5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLnByb3RvMy5UZXN0QWxsVHlwZXNQcm90bzNSC2NvcmVjdXJzaXZlGkAKEk1hcEludDMySW50MzJFbnRyeRIQCgNrZXkYASABKAVSA2tleRIUCgV2YWx1ZRgCIAEoBVIFdmFsdWU6AjgBGkAKEk1hcEludDY0SW50NjRFbnRyeRIQCgNrZXkYASABKANSA2tleRIUCgV2YWx1ZRgCIAEoA1IFdmFsdWU6AjgBGkIKFE1hcFVpbnQzMlVpbnQzMkVudHJ5EhAKA2tleRgBIAEoDVIDa2V5EhQKBXZhbHVlGAIgASgNUgV2YWx1ZToCOAEaQgoUTWFwVWludDY0VWludDY0RW50cnkSEAoDa2V5GAEgASgEUgNrZXkSFAoFdmFsdWUYAiABKARSBXZhbHVlOgI4ARpCChRNYXBTaW50MzJTaW50MzJFbnRyeRIQCgNrZXkYASABKBFSA2tleRIUCgV2YWx1ZRgCIAEoEVIFdmFsdWU6AjgBGkIKFE1hcFNpbnQ2NFNpbnQ2NEVudHJ5EhAKA2tleRgBIAEoElIDa2V5EhQKBXZhbHVlGAIgASgSUgV2YWx1ZToCOAEaRAoWTWFwRml4ZWQzMkZpeGVkMzJFbnRyeRIQCgNrZXkYASABKAdSA2tleRIUCgV2YWx1ZRgCIAEoB1IFdmFsdWU6AjgBGkQKFk1hcEZpeGVkNjRGaXhlZDY0RW50cnkSEAoDa2V5GAEgASgGUgNrZXkSFAoFdmFsdWUYAiABKAZSBXZhbHVlOgI4ARpGChhNYXBTZml4ZWQzMlNmaXhlZDMyRW50cnkSEAoDa2V5GAEgASgPUgNrZXkSFAoFdmFsdWUYAiABKA9SBXZhbHVlOgI4ARpGChhNYXBTZml4ZWQ2NFNmaXhlZDY0RW50cnkSEAoDa2V5GAEgASgQUgNrZXkSFAoFdmFsdWUYAiABKBBSBXZhbHVlOgI4ARpAChJNYXBJbnQzMkZsb2F0RW50cnkSEAoDa2V5GAEgASgFUgNrZXkSFAoFdmFsdWUYAiABKAJSBXZhbHVlOgI4ARpBChNNYXBJbnQzMkRvdWJsZUVudHJ5EhAKA2tleRgBIAEoBVIDa2V5EhQKBXZhbHVlGAIgASgBUgV2YWx1ZToCOAEaPgoQTWFwQm9vbEJvb2xFbnRyeRIQCgNrZXkYASABKAhSA2tleRIUCgV2YWx1ZRgCIAEoCFIFdmFsdWU6AjgBGkIKFE1hcFN0cmluZ1N0cmluZ0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEaQQoTTWFwU3RyaW5nQnl0ZXNFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoDFIFdmFsdWU6AjgBGooBChtNYXBTdHJpbmdOZXN0ZWRNZXNzYWdlRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSVQoFdmFsdWUYAiABKAsyPy5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLnByb3RvMy5UZXN0QWxsVHlwZXNQcm90bzMuTmVzdGVkTWVzc2FnZVIFdmFsdWU6AjgBGnkKHE1hcFN0cmluZ0ZvcmVpZ25NZXNzYWdlRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSQwoFdmFsdWUYAiABKAsyLS5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLnByb3RvMy5Gb3JlaWduTWVzc2FnZVIFdmFsdWU6AjgBGoQBChhNYXBTdHJpbmdOZXN0ZWRFbnVtRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSUgoFdmFsdWUYAiABKA4yPC5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLnByb3RvMy5UZXN0QWxsVHlwZXNQcm90bzMuTmVzdGVkRW51bVIFdmFsdWU6AjgBGnMKGU1hcFN0cmluZ0ZvcmVpZ25FbnVtRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSQAoFdmFsdWUYAiABKA4yKi5wcm90b2J1Zl90ZXN0X21lc3NhZ2VzLnByb3RvMy5Gb3JlaWduRW51bVIFdmFsdWU6AjgBIjkKCk5lc3RlZEVudW0SBwoDRk9PEAASBwoDQkFSEAESBwoDQkFaEAISEAoDTkVHEP///////////wEiWQoLQWxpYXNlZEVudW0SDQoJQUxJQVNfRk9PEAASDQoJQUxJQVNfQkFSEAESDQoJQUxJQVNfQkFaEAISBwoDUVVYEAISBwoDcXV4EAISBwoDYkF6EAIaAhABQg0KC29uZW9mX2ZpZWxkSgYI9QMQ/wMiHgoORm9yZWlnbk1lc3NhZ2USDAoBYxgBIAEoBVIBYypACgtGb3JlaWduRW51bRIPCgtGT1JFSUdOX0ZPTxAAEg8KC0ZPUkVJR05fQkFSEAESDwoLRk9SRUlHTl9CQVoQAkI4Cihjb20uZ29vZ2xlLnByb3RvYnVmX3Rlc3RfbWVzc2FnZXMucHJvdG8zSAH4AQGiAgZQcm90bzNK7GEKBxIFJQDzAQEKwA0KAQwSAyUAEjK1DSBQcm90b2NvbCBCdWZmZXJzIC0gR29vZ2xlJ3MgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKIENvcHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy8KCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKIG1ldDoKCiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogZGlzdHJpYnV0aW9uLgogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KCiBUZXN0IHNjaGVtYSBmb3IgcHJvdG8zIG1lc3NhZ2VzLiAgVGhpcyB0ZXN0IHNjaGVtYSBpcyB1c2VkIGJ5OgoKIC0gYmVuY2htYXJrcwogLSBmdXp6IHRlc3RzCiAtIGNvbmZv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