ZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9LY29uZmlnIGIvYXJjaC9tNjhrL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA3MTNjN2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvS2NvbmZpZwpAQCAtMCwwICsxLDY3MCBAQAorIworIyBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgc3ludGF4IG9mIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlLAorIyBzZWUgRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50eHQuCisjCitjb25maWcgTTY4SworCWJvb2wKKwlkZWZhdWx0IHkKKworY29uZmlnIE1NVQorCWJvb2wKKwlkZWZhdWx0IHkKKworY29uZmlnIFVJRDE2CisJYm9vbAorCWRlZmF1bHQgeQorCitjb25maWcgUldTRU1fR0VORVJJQ19TUElOTE9DSworCWJvb2wKKwlkZWZhdWx0IHkKKworY29uZmlnIFJXU0VNX1hDSEdBRERfQUxHT1JJVEhNCisJYm9vbAorCitjb25maWcgR0VORVJJQ19DQUxJQlJBVEVfREVMQVkKKwlib29sCisJZGVmYXVsdCB5CisKK21haW5tZW51ICJMaW51eC82OGsgS2VybmVsIENvbmZpZ3VyYXRpb24iCisKK3NvdXJjZSAiaW5pdC9LY29uZmlnIgorCittZW51ICJQbGF0Zm9ybSBkZXBlbmRlbnQgc2V0dXAiCisKK2NvbmZpZyBFSVNBCisJYm9vbAorCS0tLWhlbHAtLS0KKwkgIFRoZSBFeHRlbmRlZCBJbmR1c3RyeSBTdGFuZGFyZCBBcmNoaXRlY3R1cmUgKEVJU0EpIGJ1cyB3YXMKKwkgIGRldmVsb3BlZCBhcyBhbiBvcGVuIGFsdGVybmF0aXZlIHRvIHRoZSBJQk0gTWljcm9DaGFubmVsIGJ1cy4KKworCSAgVGhlIEVJU0EgYnVzIHByb3ZpZGVkIHNvbWUgb2YgdGhlIGZlYXR1cmVzIG9mIHRoZSBJQk0gTWljcm9DaGFubmVsCisJICBidXMgd2hpbGUgbWFpbnRhaW5pbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGNhcmRzIG1hZGUgZm9yCisJICB0aGUgb2xkZXIgSVNBIGJ1cy4gIFRoZSBFSVNBIGJ1cyBzYXcgbGltaXRlZCB1c2UgYmV0d2VlbiAxOTg4IGFuZAorCSAgMTk5NSB3aGVuIGl0IHdhcyBtYWRlIG9ic29sZXRlIGJ5IHRoZSBQQ0kgYnVzLgorCisJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgYnVpbGRpbmcgYSBrZXJuZWwgZm9yIGFuIEVJU0EtYmFzZWQgbWFjaGluZS4KKworCSAgT3RoZXJ3aXNlLCBzYXkgTi4KKworY29uZmlnIE1DQQorCWJvb2wKKwloZWxwCisJICBNaWNyb0NoYW5uZWwgQXJjaGl0ZWN0dXJlIGlzIGZvdW5kIGluIHNvbWUgSUJNIFBTLzIgbWFjaGluZXMgYW5kCisJICBsYXB0b3BzLiAgSXQgaXMgYSBidXMgc3lzdGVtIHNpbWlsYXIgdG8gUENJIG9yIElTQS4gU2VlCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL21jYS50eHQ+IChhbmQgZXNwZWNpYWxseSB0aGUgd2ViIHBhZ2UgZ2l2ZW4KKwkgIHRoZXJlKSBiZWZvcmUgYXR0ZW1wdGluZyB0byBidWlsZCBhbiBNQ0EgYnVzIGtlcm5lbC4KKworY29uZmlnIFBDTUNJQQorCXRyaXN0YXRlCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBhdHRhY2ggUENNQ0lBLSBvciBQQy1jYXJkcyB0byB5b3VyIExpbnV4CisJICBjb21wdXRlci4gIFRoZXNlIGFyZSBjcmVkaXQtY2FyZCBzaXplIGRldmljZXMgc3VjaCBhcyBuZXR3b3JrIGNhcmRzLAorCSAgbW9kZW1zIG9yIGhhcmQgZHJpdmVzIG9mdGVuIHVzZWQgd2l0aCBsYXB0b3BzIGNvbXB1dGVycy4gIFRoZXJlIGFyZQorCSAgYWN0dWFsbHkgdHdvIHZhcmlldGllcyBvZiB0aGVzZSBjYXJkczogdGhlIG9sZGVyIDE2IGJpdCBQQ01DSUEgY2FyZHMKKwkgIGFuZCB0aGUgbmV3ZXIgMzIgYml0IENhcmRCdXMgY2FyZHMuICBJZiB5b3Ugd2FudCB0byB1c2UgQ2FyZEJ1cworCSAgY2FyZHMsIHlvdSBuZWVkIHRvIHNheSBZIGhlcmUgYW5kIGFsc28gdG8gIkNhcmRCdXMgc3VwcG9ydCIgYmVsb3cuCisKKwkgIFRvIHVzZSB5b3VyIFBDLWNhcmRzLCB5b3Ugd2lsbCBuZWVkIHN1cHBvcnRpbmcgc29mdHdhcmUgZnJvbSBEYXZpZAorCSAgSGluZHMnIHBjbWNpYS1jcyBwYWNrYWdlIChzZWUgdGhlIGZpbGUgPGZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzPgorCSAgZm9yIGxvY2F0aW9uKS4gIFBsZWFzZSBhbHNvIHJlYWQgdGhlIFBDTUNJQS1IT1dUTywgYXZhaWxhYmxlIGZyb20KKwkgIDxodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0bz4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgbW9kdWxlcywgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGVzIHdpbGwgYmUgY2FsbGVkIHBjbWNpYV9jb3JlIGFuZCBkcy4KKworY29uZmlnIFNVTjMKKwlib29sICJTdW4zIHN1cHBvcnQiCisJc2VsZWN0IE02ODAyMAorCXNlbGVjdCBNTVVfU1VOMyBpZiBNTVUKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBTdW4gMyBzZXJpZXMgb2Ygd29ya3N0YXRpb25zCisJICAoMy81MCwgMy82MCwgMy8xeHgsIDMvMnh4IHN5c3RlbXMpLiBFbmFibGluZyB0aGlzIG9wdGlvbiByZXF1aXJlcworCSAgdGhhdCBhbGwgb3RoZXIgaGFyZHdhcmUgdHlwZXMgbXVzdCBiZSBkaXNhYmxlZCwgYXMgU3VuIDMga2VybmVscworCSAgYXJlIGluY29tcGF0aWJsZSB3aXRoIGFsbCBvdGhlciBtNjhrIHRhcmdldHMgKGluY2x1ZGluZyBTdW4gM3ghKS4KKworCSAgSWYgeW91IGRvbid0IHdhbnQgdG8gY29tcGlsZSBhIGtlcm5lbCBleGNsdXNpdmVseSBmb3IgYSBTdW4gMywgc2F5IE4uCisKK2NvbmZpZyBBTUlHQQorCWJvb2wgIkFtaWdhIHN1cHBvcnQiCisJZGVwZW5kcyBvbiAhTU1VX1NVTjMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBBbWlnYSBzZXJpZXMgb2YgY29tcHV0ZXJzLiBJZgorCSAgeW91IHBsYW4gdG8gdXNlIHRoaXMga2VybmVsIG9uIGFuIEFtaWdhLCBzYXkgWSBoZXJlIGFuZCBicm93c2UgdGhlCisJICBtYXRlcmlhbCBhdmFpbGFibGUgaW4gPGZpbGU6RG9jdW1lbnRhdGlvbi9tNjhrPjsgb3RoZXJ3aXNlIHNheSBOLgorCitjb25maWcgQVRBUkkKKwlib29sICJBdGFyaSBzdXBwb3J0IgorCWRlcGVuZHMgb24gIU1NVV9TVU4zCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgNjgwMDAtYmFzZWQgQXRhcmkgc2VyaWVzIG9mCisJICBjb21wdXRlcnMgKGluY2x1ZGluZyB0aGUgVFQsIEZhbGNvbiBhbmQgTWVkdXNhKS4gSWYgeW91IHBsYW4gdG8gdXNlCisJICB0aGlzIGtlcm5lbCBvbiBhbiBBdGFyaSwgc2F5IFkgaGVyZSBhbmQgYnJvd3NlIHRoZSBtYXRlcmlhbAorCSAgYXZhaWxhYmxlIGluIDxmaWxlOkRvY3VtZW50YXRpb24vbTY4az47IG90aGVyd2lzZSBzYXkgTi4KKworY29uZmlnIEhBREVTCisJYm9vbCAiSGFkZXMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFUQVJJICYmIEJST0tFTgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEhhZGVzIEF0YXJpIGNsb25lLiBJZiB5b3UgcGxhbgorCSAgdG8gdXNlIHRoaXMga2VybmVsIG9uIGEgSGFkZXMsIHNheSBZIGhlcmU7IG90aGVyd2lzZSBzYXkgTi4KKworY29uZmlnIFBDSQorCWJvb2wKKwlkZXBlbmRzIG9uIEhBREVTCisJZGVmYXVsdCB5CisJaGVscAorCSAgRmluZCBvdXQgd2hldGhlciB5b3UgaGF2ZSBhIFBDSSBtb3RoZXJib2FyZC4gUENJIGlzIHRoZSBuYW1lIG9mIGEKKwkgIGJ1cyBzeXN0ZW0sIGkuZS4gdGhlIHdheSB0aGUgQ1BVIHRhbGtzIHRvIHRoZSBvdGhlciBzdHVmZiBpbnNpZGUKKwkgIHlvdXIgYm94LiBPdGhlciBidXMgc3lzdGVtcyBhcmUgSVNBLCBFSVNBLCBNaWNyb0NoYW5uZWwgKE1DQSkgb3IKKwkgIFZFU0EuIElmIHlvdSBoYXZlIFBDSSwgc2F5IFksIG90aGVyd2lzZSBOLgorCisJICBUaGUgUENJLUhPV1RPLCBhdmFpbGFibGUgZnJvbQorCSAgPGh0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvPiwgY29udGFpbnMgdmFsdWFibGUKKwkgIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoIFBDSSBoYXJkd2FyZSBkb2VzIHdvcmsgdW5kZXIgTGludXggYW5kIHdoaWNoCisJICBkb2Vzbid0LgorCitjb25maWcgTUFDCisJYm9vbCAiTWFjaW50b3NoIHN1cHBvcnQiCisJZGVwZW5kcyBvbiAhTU1VX1NVTjMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBBcHBsZSBNYWNpbnRvc2ggc2VyaWVzIG9mCisJICBjb21wdXRlcnMgKHllcywgdGhlcmUgaXMgZXhwZXJpbWVudGFsIHN1cHBvcnQgbm93LCBhdCBsZWFzdCBmb3IgcGFydAorCSAgb2YgdGhlIHNlcmllcykuCisKKwkgIFNheSBOIHVubGVzcyB5b3UncmUgd2lsbGluZyB0byBjb2RlIHRoZSByZW1haW5pbmcgbmVjZXNzYXJ5IHN1cHBvcnQuCisJICA7KQorCitjb25maWcgTlVCVVMKKwlib29sCisJZGVwZW5kcyBvbiBNQUMKKwlkZWZhdWx0IHkKKworY29uZmlnIE02OEtfTDJfQ0FDSEUKKwlib29sCisJZGVwZW5kcyBvbiBNQUMKKwlkZWZhdWx0IHkKKworY29uZmlnIEFQT0xMTworCWJvb2wgIkFwb2xsbyBzdXBwb3J0IgorCWRlcGVuZHMgb24gIU1NVV9TVU4zCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBydW4gTGludXggb24gYW4gTUM2ODB4MC1iYXNlZCBBcG9sbG8KKwkgIERvbWFpbiB3b3Jrc3RhdGlvbiBzdWNoIGFzIHRoZSBETjM1MDAuCisKK2NvbmZpZyBWTUUKKwlib29sICJWTUUgKE1vdG9yb2xhIGFuZCBCVk0pIHN1cHBvcnQiCisJZGVwZW5kcyBvbiAhTU1VX1NVTjMKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIGEga2VybmVsIGZvciBhIDY4MHgwIGJhc2VkIFZNRQorCSAgYm9hcmQuICBCb2FyZHMgY3VycmVudGx5IHN1cHBvcnRlZCBpbmNsdWRlIE1vdG9yb2xhIGJvYXJkcyBNVk1FMTQ3LAorCSAgTVZNRTE2MiwgTVZNRTE2NiwgTVZNRTE2NywgTVZNRTE3MiwgYW5kIE1WTUUxNzcuICBCVk1FNDAwMCBhbmQKKwkgIEJWTUU2MDAwIGJvYXJkcyBmcm9tIEJWTSBMdGQgYXJlIGFsc28gc3VwcG9ydGVkLgorCitjb25maWcgTVZNRTE0NworCWJvb2wgIk1WTUUxNDcgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZNRQorCWhlbHAKKwkgIFNheSBZIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgZWFybHkgTW90b3JvbGEgVk1FIGJvYXJkcy4gIFRoaXMgd2lsbAorCSAgYnVpbGQgYSBrZXJuZWwgd2hpY2ggY2FuIHJ1biBvbiBNVk1FMTQ3IHNpbmdsZS1ib2FyZCBjb21wdXRlcnMuICBJZgorCSAgeW91IHNlbGVjdCB0aGlzIG9wdGlvbiB5b3Ugd2lsbCBoYXZlIHRvIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUKKwkgIGRyaXZlcnMgZm9yIFNDU0ksIEV0aGVybmV0IGFuZCBzZXJpYWwgcG9ydHMgbGF0ZXIgb24uCisKK2NvbmZpZyBNVk1FMTZ4CisJYm9vbCAiTVZNRTE2MiwgMTY2IGFuZCAxNjcgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZNRQorCWhlbHAKKwkgIFNheSBZIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgTW90b3JvbGEgVk1FIGJvYXJkcy4gIFRoaXMgd2lsbCBidWlsZCBhCisJICBrZXJuZWwgd2hpY2ggY2FuIHJ1biBvbiBNVk1FMTYyLCBNVk1FMTY2LCBNVk1FMTY3LCBNVk1FMTcyLCBhbmQKKwkgIE1WTUUxNzcgYm9hcmRzLiAgSWYgeW91IHNlbGVjdCB0aGlzIG9wdGlvbiB5b3Ugd2lsbCBoYXZlIHRvIHNlbGVjdAorCSAgdGhlIGFwcHJvcHJpYXRlIGRyaXZlcnMgZm9yIFNDU0ksIEV0aGVybmV0IGFuZCBzZXJpYWwgcG9ydHMgbGF0ZXIKKwkgIG9uLgorCitjb25maWcgQlZNRTYwMDAKKwlib29sICJCVk1FNDAwMCBhbmQgQlZNRTYwMDAgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZNRQorCWhlbHAKKwkgIFNheSBZIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgVk1FIGJvYXJkcyBmcm9tIEJWTSBMdGQuICBUaGlzIHdpbGwKKwkgIGJ1aWxkIGEga2VybmVsIHdoaWNoIGNhbiBydW4gb24gQlZNRTQwMDAgYW5kIEJWTUU2MDAwIGJvYXJkcy4gIElmCisJICB5b3Ugc2VsZWN0IHRoaXMgb3B0aW9uIHlvdSB3aWxsIGhhdmUgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZQorCSAgZHJpdmVycyBmb3IgU0NTSSwgRXRoZXJuZXQgYW5kIHNlcmlhbCBwb3J0cyBsYXRlciBvbi4KKworY29uZmlnIEhQMzAwCisJYm9vbCAiSFA5MDAwLzMwMCBhbmQgSFA5MDAwLzQwMCBzdXBwb3J0IgorCWRlcGVuZHMgb24gIU1NVV9TVU4zCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgSFA5MDAwLzMwMCBhbmQgSFA5MDAwLzQwMCBzZXJpZXMKKwkgIG9mIHdvcmtzdGF0aW9ucy4gU3VwcG9ydCBmb3IgdGhlc2UgbWFjaGluZXMgaXMgc3RpbGwgc29tZXdoYXQKKwkgIGV4cGVyaW1lbnRhbC4gSWYgeW91IHBsYW4gdG8gdHJ5IHRvIHVzZSB0aGUga2VybmVsIG9uIHN1Y2ggYSBtYWNoaW5lCisJICBzYXkgWSBoZXJlLgorCSAgRXZlcnlib2R5IGVsc2Ugc2F5cyBOLgorCitjb25maWcgRElPCisJYm9vbCAiRElPIGJ1cyBzdXBwb3J0IgorCWRlcGVuZHMgb24gSFAzMDAKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgIkRJTyIgZXhwYW5zaW9uIGJ1cyB1c2VkIGluCisJICBIUDMwMCBtYWNoaW5lcy4gSWYgeW91IGFyZSB1c2luZyBzdWNoIGEgc3lzdGVtIHlvdSBhbG1vc3QgY2VydGFpbmx5CisJICB3YW50IHRoaXMuCisKK2NvbmZpZyBTVU4zWAorCWJvb2wgIlN1bjN4IHN1cHBvcnQiCisJZGVwZW5kcyBvbiAhTU1VX1NVTjMKKwlzZWxlY3QgTTY4MDMwCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgU3VuIDN4IHNlcmllcyBvZiB3b3Jrc3RhdGlvbnMuCisJICBCZSB3YXJuZWQgdGhhdCB0aGlzIHN1cHBvcnQgaXMgdmVyeSBleHBlcmltZW50YWwuCisJICBOb3RlIHRoYXQgU3VuIDN4IGtlcm5lbHMgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggU3VuIDMgaGFyZHdhcmUuCisJICBHZW5lcmFsIExpbnV4IGluZm9ybWF0aW9uIG9uIHRoZSBTdW4gM3ggc2VyaWVzIChub3cgZGlzY29udGludWVkKQorCSAgaXMgYXQgPGh0dHA6Ly93d3cuYW5nZWxmaXJlLmNvbS9jYTIvdGVjaDY4ay9zdW4zLmh0bWw+LgorCisJICBJZiB5b3UgZG9uJ3Qgd2FudCB0byBjb21waWxlIGEga2VybmVsIGZvciBhIFN1biAzeCwgc2F5IE4uCisKK2NvbmZpZyBRNDAKKwlib29sICJRNDAvUTYwIHN1cHBvcnQiCisJZGVwZW5kcyBvbiAhTU1VX1NVTjMKKwloZWxwCisJICBUaGUgUTQwIGlzIGEgTW90b3JvbGEgNjgwNDAtYmFzZWQgc3VjY2Vzc29yIHRvIHRoZSBTaW5jbGFpciBRTAorCSAgbWFudWZhY3R1cmVkIGluIEdlcm1hbnkuICBUaGVyZSBpcyBhbiBvZmZpY2lhbCBRNDAgaG9tZSBwYWdlIGF0CisJICA8aHR0cDovL3d3dy5xNDAuZGUvPi4gIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFE0MCBhbmQKKwkgIFE2MC4gU2VsZWN0IHlvdXIgQ1BVIGJlbG93LiAgRm9yIDY4TEMwNjAgZG9uJ3QgZm9yZ2V0IHRvIGVuYWJsZSBGUFUKKwkgIGVtdWxhdGlvbi4KKworY29tbWVudCAiUHJvY2Vzc29yIHR5cGUiCisKK2NvbmZpZyBNNjgwMjAKKwlib29sICI2ODAyMCBzdXBwb3J0IgorCWhlbHAKKwkgIElmIHlvdSBhbnRpY2lwYXRlIHJ1bm5pbmcgdGhpcyBrZXJuZWwgb24gYSBjb21wdXRlciB3aXRoIGEgTUM2ODAyMAorCSAgcHJvY2Vzc29yLCBzYXkgWS4gT3RoZXJ3aXNlLCBzYXkgTi4gTm90ZSB0aGF0IHRoZSA2ODAyMCByZXF1aXJlcyBhCisJICA2ODg1MSBNTVUgKE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQpIHRvIHJ1biBMaW51eC9tNjhrLCBleGNlcHQgb24gdGhlCisJICBTdW4gMywgd2hpY2ggcHJvdmlkZXMgaXRzIG93biB2ZXJzaW9uLgorCitjb25maWcgTTY4MDMwCisJYm9vbCAiNjgwMzAgc3VwcG9ydCIKKwlkZXBlbmRzIG9uICFNTVVfU1VOMworCWhlbHAKKwkgIElmIHlvdSBhbnRpY2lwYXRlIHJ1bm5pbmcgdGhpcyBrZXJuZWwgb24gYSBjb21wdXRlciB3aXRoIGEgTUM2ODAzMAorCSAgcHJvY2Vzc29yLCBzYXkgWS4gT3RoZXJ3aXNlLCBzYXkgTi4gTm90ZSB0aGF0IGEgTUM2OEVDMDMwIHdpbGwgbm90CisJICB3b3JrLCBhcyBpdCBkb2VzIG5vdCBpbmNsdWRlIGFuIE1NVSAoTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCkuCisKK2NvbmZpZyBNNjgwNDAKKwlib29sICI2ODA0MCBzdXBwb3J0IgorCWRlcGVuZHMgb24gIU1NVV9TVU4zCisJaGVscAorCSAgSWYgeW91IGFudGljaXBhdGUgcnVubmluZyB0aGlzIGtlcm5lbCBvbiBhIGNvbXB1dGVyIHdpdGggYSBNQzY4TEMwNDAKKwkgIG9yIE1DNjgwNDAgcHJvY2Vzc29yLCBzYXkgWS4gT3RoZXJ3aXNlLCBzYXkgTi4gTm90ZSB0aGF0IGFuCisJICBNQzY4RUMwNDAgd2lsbCBub3Qgd29yaywgYXMgaXQgZG9lcyBub3QgaW5jbHVkZSBhbiBNTVUgKE1lbW9yeQorCSAgTWFuYWdlbWVudCBVbml0KS4KKworY29uZmlnIE02ODA2MAorCWJvb2wgIjY4MDYwIHN1cHBvcnQiCisJZGVwZW5kcyBvbiAhTU1VX1NVTjMKKwloZWxwCisJICBJZiB5b3UgYW50aWNpcGF0ZSBydW5uaW5nIHRoaXMga2VybmVsIG9uIGEgY29tcHV0ZXIgd2l0aCBhIE1DNjgwNjAKKwkgIHByb2Nlc3Nvciwgc2F5IFkuIE90aGVyd2lzZSwgc2F5IE4uCisKK2NvbmZpZyBNTVVfTU9UT1JPTEEKKwlib29sCisJZGVwZW5kcyBvbiBNTVUgJiYgIU1NVV9TVU4zCisJZGVmYXVsdCB5CisKK2NvbmZpZyBNTVVfU1VOMworCWJvb2wKKworY29uZmlnIE02OEtGUFVfRU1VCisJYm9vbCAiTWF0aCBlbXVsYXRpb24gc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIEF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgdGhpcyB3aWxsIGNhdXNlIGZsb2F0aW5nLXBvaW50IG1hdGgKKwkgIGluc3RydWN0aW9ucyB0byBiZSBlbXVsYXRlZCBieSB0aGUga2VybmVsIG9uIG1hY2hpbmVzIHRoYXQgbGFjayBhCisJICBmbG9hdGluZy1wb2ludCBtYXRoIGNvcHJvY2Vzc29yLiAgVGhyaWxsLXNlZWtlcnMgYW5kIGNocm9uaWNhbGx5CisJICBzbGVlcC1kZXByaXZlZCBwc3ljaG90aWMgaGFja2VyIHR5cGVzIGNhbiBzYXkgWSBub3csIGV2ZXJ5b25lIGVsc2UKKwkgIHNob3VsZCBwcm9iYWJseSB3YWl0IGEgd2hpbGUuCisKK2NvbmZpZyBNNjhLRlBVX0VNVV9FWFRSQVBSRUMKKwlib29sICJNYXRoIGVtdWxhdGlvbiBleHRyYSBwcmVjaXNpb24iCisJZGVwZW5kcyBvbiBNNjhLRlBVX0VNVQorCWhlbHAKKwkgIFRoZSBmcHUgdXNlcyBub3JtYWxseSBhIGZldyBiaXQgbW9yZSBkdXJpbmcgY2FsY3VsYXRpb25zIGZvcgorCSAgY29ycmVjdCByb3VuZGluZywgdGhlIGVtdWxhdG9yIGNhbiAob2Z0ZW4pIGRvIHRoZSBzYW1lIGJ1dCB0aGlzCisJICBleHRyYSBjYWxjdWxhdGlvbiBjYW4gY29zdCBxdWl0ZSBzb21lIHRpbWUsIHNvIHlvdSBjYW4gZGlzYWJsZQorCSAgaXQgaGVyZS4gVGhlIGVtdWxhdG9yIHdpbGwgdGhlbiAib25seSIgY2FsY3VsYXRlIHdpdGggYSA2NCBiaXQKKwkgIG1hbnRpc3NhIGFuZCByb3VuZCBzbGlnaHRseSBpbmNvcnJlY3QsIHdoYXQgaXMgbW9yZSB0aGVuIGVub3VnaAorCSAgZm9yIG5vcm1hbCB1c2FnZS4KKworY29uZmlnIE02OEtGUFVfRU1VX09OTFkKKwlib29sICJNYXRoIGVtdWxhdGlvbiBvbmx5IGtlcm5lbCIKKwlkZXBlbmRzIG9uIE02OEtGUFVfRU1VCisJaGVscAorCSAgVGhpcyBvcHRpb24gcHJldmVudHMgYW55IGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucyBmcm9tIGJlaW5nCisJICBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsIHRoZXJlYnkgdGhlIGtlcm5lbCBkb2Vzbid0IHNhdmUgYW55CisJICBmbG9hdGluZyBwb2ludCBjb250ZXh0IGFueW1vcmUgZHVyaW5nIHRhc2sgc3dpdGNoZXMsIHNvIHRoaXMKKwkgIGtlcm5lbCB3aWxsIG9ubHkgYmUgdXNhYmxlIG9uIG1hY2hpbmVzIHdpdGhvdXQgYSBmbG9hdGluZy1wb2ludAorCSAgbWF0aCBjb3Byb2Nlc3Nvci4gVGhpcyBtYWtlcyB0aGUga2VybmVsIGEgYml0IGZhc3RlciBhcyBubyB0ZXN0cworCSAgbmVlZHMgdG8gYmUgZXhlY3V0ZWQgd2hldGhlciBhIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9uIGluIHRoZQorCSAga2VybmVsIHNob3VsZCBiZSBleGVjdXRlZCBvciBub3QuCisKK2NvbmZpZyBBRFZBTkNFRAorCWJvb2wgIkFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIKKwktLS1oZWxwLS0tCisJICBUaGlzIGdpdmVzIHlvdSBhY2Nlc3MgdG8gc29tZSBhZHZhbmNlZCBvcHRpb25zIGZvciB0aGUgQ1BVLiBUaGUKKwkgIGRlZmF1bHRzIHNob3VsZCBiZSBmaW5lIGZvciBtb3N0IHVzZXJzLCBidXQgdGhlc2Ugb3B0aW9ucyBtYXkgbWFrZQorCSAgaXQgcG9zc2libGUgZm9yIHlvdSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIHNvbWV3aGF0IGlmIHlvdSBrbm93IHdoYXQKKwkgIHlvdSBhcmUgZG9pbmcuCisKKwkgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gd29uJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZQorCSAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbAorCSAgdGhlIHF1ZXN0aW9ucyBhYm91dCB0aGVzZSBvcHRpb25zLgorCisJICBNb3N0IHVzZXJzIHNob3VsZCBzYXkgTiB0byB0aGlzIHF1ZXN0aW9uLgorCitjb25maWcgUk1XX0lOU05TCisJYm9vbCAiVXNlIHJlYWQtbW9kaWZ5LXdyaXRlIGluc3RydWN0aW9ucyIKKwlkZXBlbmRzIG9uIEFEVkFOQ0VECisJLS0taGVscC0tLQorCSAgVGhpcyBhbGxvd3MgdG8gdXNlIGNlcnRhaW4gaW5zdHJ1Y3Rpb25zIHRoYXQgd29yayB3aXRoIGluZGl2aXNpYmxlCisJICByZWFkLW1vZGlmeS13cml0ZSBidXMgY3ljbGVzLiBXaGlsZSB0aGlzIGlzIGZhc3RlciB0aGFuIHRoZQorCSAgd29ya2Fyb3VuZCBvZiBkaXNhYmxpbmcgaW50ZXJydXB0cywgaXQgY2FuIGNvbmZsaWN0IHdpdGggRE1BCisJICAoID0gZGlyZWN0IG1lbW9yeSBhY2Nlc3MpIG9uIG1hbnkgQW1pZ2Egc3lzdGVtcywgYW5kIGl0IGlzIGFsc28gc2FpZAorCSAgdG8gZGVzdGFiaWxpemUgb3RoZXIgbWFjaGluZXMuIEl0IGlzIHZlcnkgbGlrZWx5IHRoYXQgdGhpcyB3aWxsCisJICBjYXVzZSBzZXJpb3VzIHByb2JsZW1zIG9uIGFueSBBbWlnYSBvciBBdGFyaSBNZWR1c2EgaWYgc2V0LiBUaGUgb25seQorCSAgY29uZmlndXJhdGlvbiB3aGVyZSBpdCBzaG91bGQgd29yayBhcmUgNjgwMzAtYmFzZWQgQXRhcmlzLCB3aGVyZSBpdAorCSAgYXBwYXJlbnRseSBpbXByb3ZlcyBwZXJmb3JtYW5jZS4gQnV0IHlvdSd2ZSBiZWVuIHdhcm5lZCEgVW5sZXNzIHlvdQorCSAgcmVhbGx5IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLCBzYXkgTi4gVHJ5IFkgb25seSBpZiB5b3UncmUgcXVpdGUKKwkgIGFkdmVudHVyb3VzLgorCitjb25maWcgU0lOR0xFX01FTU9SWV9DSFVOSworCWJvb2wgIlVzZSBvbmUgcGh5c2ljYWwgY2h1bmsgb2YgbWVtb3J5IG9ubHkiCisJZGVwZW5kcyBvbiBBRFZBTkNFRCAmJiAhU1VOMworCWhlbHAKKwkgIElnbm9yZSBhbGwgYnV0IHRoZSBmaXJzdCBjb250aWd1b3VzIGNodW5rIG9mIHBoeXNpY2FsIG1lbW9yeSBmb3IgVk0KKwkgIHB1cnBvc2VzLiAgVGhpcyB3aWxsIHNhdmUgYSBmZXcgYnl0ZXMga2VybmVsIHNpemUgYW5kIG1heSBzcGVlZCB1cAorCSAgc29tZSBvcGVyYXRpb25zLiAgU2F5IE4gaWYgbm90IHN1cmUuCisKK2NvbmZpZyAwNjBfV1JJVEVUSFJPVUdICisJYm9vbCAiVXNlIHdyaXRlLXRocm91Z2ggY2FjaGluZyBmb3IgNjgwNjAgc3VwZXJ2aXNvciBhY2Nlc3NlcyIKKwlkZXBlbmRzIG9uIEFEVkFOQ0VEICYmIE02ODA2MAorCS0tLWhlbHAtLS0KKwkgIFRoZSA2ODA2MCBnZW5lcmFsbHkgdXNlcyBjb3B5YmFjayBjYWNoaW5nIG9mIHJlY2VudGx5IGFjY2Vzc2VkIGRhdGEuCisJICBDb3B5YmFjayBjYWNoaW5nIG1lYW5zIHRoYXQgbWVtb3J5IHdyaXRlcyB3aWxsIGJlIGhlbGQgaW4gYW4gb24tY2hpcAorCSAgY2FjaGUgYW5kIG9ubHkgd3JpdHRlbiBiYWNrIHRvIG1lbW9yeSBzb21lIHRpbWUgbGF0ZXIuICBTYXlpbmcgWQorCSAgaGVyZSB3aWxsIGZvcmNlIHN1cGVydmlzb3IgKGtlcm5lbCkgYWNjZXNzZXMgdG8gdXNlIHdyaXRldGhyb3VnaAorCSAgY2FjaGluZy4gIFdyaXRldGhyb3VnaCBjYWNoaW5nIG1lYW5zIHRoYXQgZGF0YSBpcyB3cml0dGVuIHRvIG1lbW9yeQorCSAgc3RyYWlnaHQgYXdheSwgc28gdGhhdCBjYWNoZSBhbmQgbWVtb3J5IGRhdGEgYWx3YXlzIGFncmVlLgorCSAgV3JpdGV0aHJvdWdoIGNhY2hpbmcgaXMgbGVzcyBlZmZpY2llbnQsIGJ1dCBpcyBuZWVkZWQgZm9yIHNvbWUKKwkgIGRyaXZlcnMgb24gNjgwNjAgYmFzZWQgc3lzdGVtcyB3aGVyZSB0aGUgNjgwNjAgYnVzIHNub29waW5nIHNpZ25hbAorCSAgaXMgaGFyZHdpcmVkIG9uLiAgVGhlIDUzYzcxMCBTQ1NJIGRyaXZlciBpcyBrbm93biB0byBzdWZmZXIgZnJvbQorCSAgdGhpcyBwcm9ibGVtLgorCitlbmRtZW51CisKK21lbnUgIkdlbmVyYWwgc2V0dXAiCisKK3NvdXJjZSAiZnMvS2NvbmZpZy5iaW5mbXQiCisKK2NvbmZpZyBaT1JSTworCWJvb2wgIkFtaWdhIFpvcnJvIChBdXRvQ29uZmlnKSBidXMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFNSUdBCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBab3JybyBidXMgaW4gdGhlIEFtaWdhLiBJZiB5b3UgaGF2ZQorCSAgZXhwYW5zaW9uIGNhcmRzIGluIHlvdXIgQW1pZ2EgdGhhdCBjb25mb3JtIHRvIHRoZSBBbWlnYQorCSAgQXV0b0NvbmZpZyh0bSkgc3BlY2lmaWNhdGlvbiwgc2F5IFksIG90aGVyd2lzZSBOLiBOb3RlIHRoYXQgZXZlbgorCSAgZXhwYW5zaW9uIGNhcmRzIHRoYXQgZG8gbm90IGZpdCBpbiB0aGUgWm9ycm8gc2xvdHMgYnV0IGZpdCBpbiBlLmcuCisJICB0aGUgQ1BVIHNsb3QgbWF5IGZhbGwgaW4gdGhpcyBjYXRlZ29yeSwgc28geW91IGhhdmUgdG8gc2F5IFkgdG8gbGV0CisJICBMaW51eCB1c2UgdGhlc2UuCisKK2NvbmZpZyBBTUlHQV9QQ01DSUEKKwlib29sICJBbWlnYSAxMjAwLzYwMCBQQ01DSUEgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEFNSUdBICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBpbiB0aGUga2VybmVsIGZvciBwY21jaWEgb24gQW1pZ2EgMTIwMCBhbmQgQW1pZ2EKKwkgIDYwMC4gSWYgeW91IGludGVuZCB0byB1c2UgcGNtY2lhIGNhcmRzIHNheSBZOyBvdGhlcndpc2Ugc2F5IE4uCisKK2NvbmZpZyBTVFJBTV9TV0FQCisJYm9vbCAiU3VwcG9ydCBmb3IgU1QtUkFNIGFzIHN3YXAgc3BhY2UiCisJZGVwZW5kcyBvbiBBVEFSSSAmJiBCUk9LRU4KKwktLS1oZWxwLS0tCisJICBTb21lIEF0YXJpIDY4ayBtYWNoaW5lcyAoaW5jbHVkaW5nIHRoZSA1MjBTVEYgYW5kIDEwMjBTVEUpIGRpdmlkZQorCSAgdGhlaXIgYWRkcmVzc2FibGUgbWVtb3J5IGludG8gU1QgYW5kIFRUIHNlY3Rpb25zLiAgVGhlIFRUIHNlY3Rpb24KKwkgICh1cCB0byA1MTJNQikgaXMgdGhlIG1haW4gbWVtb3J5OyB0aGUgU1Qgc2VjdGlvbiAodXAgdG8gNE1CKSBpcworCSAgYWNjZXNzaWJsZSB0byB0aGUgYnVpbHQtaW4gZ3JhcGhpY3MgYm9hcmQsIHJ1bnMgc2xvd2VyLCBhbmQgaXMKKwkgIHByZXNlbnQgbWFpbmx5IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgbWFjaGluZXMuCisKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB1c2luZyAocGFydHMgb2YpIFNULVJBTSBhcyBzd2FwIHNwYWNlLAorCSAgaW5zdGVhZCBvZiBhcyBub3JtYWwgc3lzdGVtIG1lbW9yeS4gVGhpcyBjYW4gZmlyc3QgZW5oYW5jZSBzeXN0ZW0KKwkgIHBlcmZvcm1hbmNlIGlmIHlvdSBoYXZlIGxvdHMgb2YgYWx0ZXJuYXRlIFJBTSAoY29tcGFyZWQgdG8gdGhlIHNpemUKKwkgIG9mIFNULVJBTSksIGJlY2F1c2UgZXhlY3V0YWJsZSBjb2RlIGFsd2F5cyB3aWxsIHJlc2lkZSBpbiBmYXN0ZXIKKwkgIG1lbW9yeS4gU1QtUkFNIHdpbGwgcmVtYWluIGFzIHVsdHJhLWZhc3Qgc3dhcCBzcGFjZS4gT24gdGhlIG90aGVyCisJICBoYW5kLCBpdCBhbGxvd3MgbXVjaCBpbXByb3ZlZCBkeW5hbWljIGFsbG9jYXRpb25zIG9mIFNULVJBTSBidWZmZXJzCisJICBmb3IgZGV2aWNlIGRyaXZlciBtb2R1bGVzIChlLmcuIGZsb3BweSwgQUNTSSwgU0xNIHByaW50ZXIsIERNQQorCSAgc291bmQpLiBUaGUgcHJvYmFiaWxpdHkgdGhhdCBzdWNoIGFsbG9jYXRpb25zIGF0IG1vZHVsZSBsb2FkIHRpbWUKKwkgIGZhaWwgaXMgZHJhc3RpY2FsbHkgcmVkdWNlZC4KKworY29uZmlnIFNUUkFNX1BST0MKKwlib29sICJTVC1SQU0gc3RhdGlzdGljcyBpbiAvcHJvYyIKKwlkZXBlbmRzIG9uIEFUQVJJCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byByZXBvcnQgU1QtUkFNIHVzYWdlIHN0YXRpc3RpY3MgaW4gL3Byb2Mvc3RyYW0uICBTZWUKKwkgIHRoZSBoZWxwIGZvciBDT05GSUdfU1RSQU1fU1dBUCBmb3IgZGlzY3Vzc2lvbiBvZiBTVC1SQU0gYW5kIGl0cworCSAgdXNlcy4KKworY29uZmlnIEhFQVJUQkVBVAorCWJvb2wgIlVzZSBwb3dlciBMRUQgYXMgYSBoZWFydGJlYXQiIGlmIEFNSUdBIHx8IEFQT0xMTyB8fCBBVEFSSSB8fCBNQUMgfHxRNDAKKwlkZWZhdWx0IHkgaWYgIUFNSUdBICYmICFBUE9MTE8gJiYgIUFUQVJJICYmICFNQUMgJiYgIVE0MCAmJiBIUDMwMAorCWhlbHAKKwkgIFVzZSB0aGUgcG93ZXItb24gTEVEIG9uIHlvdXIgbWFjaGluZSBhcyBhIGxvYWQgbWV0ZXIuICBUaGUgZXhhY3QKKwkgIGJlaGF2aW9yIGlzIHBsYXRmb3JtLWRlcGVuZGVudCwgYnV0IG5vcm1hbGx5IHRoZSBmbGFzaCBmcmVxdWVuY3kgaXMKKwkgIGEgaHlwZXJib2xpYyBmdW5jdGlvbiBvZiB0aGUgNS1taW51dGUgbG9hZCBhdmVyYWdlLgorCisjIFdlIGhhdmUgYSBkZWRpY2F0ZWQgaGVhcnRiZWF0IExFRC4gOi0pCitjb25maWcgUFJPQ19IQVJEV0FSRQorCWJvb2wgIi9wcm9jL2hhcmR3YXJlIHN1cHBvcnQiCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSAvcHJvYy9oYXJkd2FyZSBmaWxlLCB3aGljaCBnaXZlcyB5b3UKKwkgIGFjY2VzcyB0byBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWFjaGluZSB5b3UncmUgcnVubmluZyBvbiwKKwkgIGluY2x1ZGluZyB0aGUgbW9kZWwsIENQVSwgTU1VLCBjbG9jayBzcGVlZCwgQm9nb01JUFMgcmF0aW5nLAorCSAgYW5kIG1lbW9yeSBzaXplLgorCitjb25maWcgSVNBCisJYm9vbAorCWRlcGVuZHMgb24gUTQwIHx8IEFNSUdBX1BDTUNJQSB8fCBHRzIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBGaW5kIG91dCB3aGV0aGVyIHlvdSBoYXZlIElTQSBzbG90cyBvbiB5b3VyIG1vdGhlcmJvYXJkLiAgSVNBIGlzIHRoZQorCSAgbmFtZSBvZiBhIGJ1cyBzeXN0ZW0sIGkuZS4gdGhlIHdheSB0aGUgQ1BVIHRhbGtzIHRvIHRoZSBvdGhlciBzdHVmZgorCSAgaW5zaWRlIHlvdXIgYm94LiAgT3RoZXIgYnVzIHN5c3RlbXMgYXJlIFBDSSwgRUlTQSwgTWljcm9DaGFubmVsCisJICAoTUNBKSBvciBWRVNBLiAgSVNBIGlzIGFuIG9sZGVyIHN5c3RlbSwgbm93IGJlaW5nIGRpc3BsYWNlZCBieSBQQ0k7CisJICBuZXdlciBib2FyZHMgZG9uJ3Qgc3VwcG9ydCBpdC4gIElmIHlvdSBoYXZlIElTQSwgc2F5IFksIG90aGVyd2lzZSBOLgorCitjb25maWcgR0VORVJJQ19JU0FfRE1BCisJYm9vbAorCWRlcGVuZHMgb24gUTQwIHx8IEFNSUdBX1BDTUNJQSB8fCBHRzIKKwlkZWZhdWx0IHkKKworc291cmNlICJkcml2ZXJzL3BjaS9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvem9ycm8vS2NvbmZpZyIKKworZW5kbWVudQorCitzb3VyY2UgImRyaXZlcnMvS2NvbmZpZyIKKworbWVudSAiQ2hhcmFjdGVyIGRldmljZXMiCisKK2NvbmZpZyBBVEFSSV9NRlBTRVIKKwl0cmlzdGF0ZSAiQXRhcmkgTUZQIHNlcmlhbCBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVRBUkkKKwktLS1oZWxwLS0tCisJICBJZiB5b3UgbGlrZSB0byB1c2UgdGhlIE1GUCBzZXJpYWwgcG9ydHMgKCJNb2RlbTEiLCAiU2VyaWFsMSIpIHVuZGVyCisJICBMaW51eCwgc2F5IFkuIFRoZSBkcml2ZXIgZXF1YWxseSBzdXBwb3J0cyBhbGwga2luZHMgb2YgTUZQIHNlcmlhbAorCSAgcG9ydHMgYW5kIGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB3aGV0aGVyIFNlcmlhbDEgaXMgYXZhaWxhYmxlLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLgorCisJICBOb3RlIGZvciBGYWxjb24gdXNlcnM6IFlvdSBhbHNvIGhhdmUgYW4gTUZQIHBvcnQsIGl0J3MganVzdCBub3QKKwkgIHdpcmVkIHRvIHRoZSBvdXRzaWRlLi4uIEJ1dCB5b3UgY291bGQgdXNlIHRoZSBwb3J0IHVuZGVyIExpbnV4LgorCitjb25maWcgQVRBUklfU0NDCisJdHJpc3RhdGUgIkF0YXJpIFNDQyBzZXJpYWwgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFUQVJJCisJLS0taGVscC0tLQorCSAgSWYgeW91IGhhdmUgc2VyaWFsIHBvcnRzIGJhc2VkIG9uIGEgWmlsb2cgU0NDIGNoaXAgKE1vZGVtMiwgU2VyaWFsMiwKKwkgIExBTikgYW5kIGxpa2UgdG8gdXNlIHRoZW0gdW5kZXIgTGludXgsIHNheSBZLiBBbGwgYnVpbHQtaW4gU0NDJ3MgYXJlCisJICBzdXBwb3J0ZWQgKFRULCBNZWdhU1RFLCBGYWxjb24pLCBhbmQgYWxzbyB0aGUgU1QtRVNDQy4gSWYgeW91IGhhdmUKKwkgIHR3byBjb25uZWN0b3JzIGZvciBjaGFubmVsIEEgKFNlcmlhbDIgYW5kIExBTiksIHRoZXkgYXJlIHZpc2libGUgYXMKKwkgIHR3byBzZXBhcmF0ZSBkZXZpY2VzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLgorCitjb25maWcgQVRBUklfU0NDX0RNQQorCWJvb2wgIkF0YXJpIFNDQyBzZXJpYWwgRE1BIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBBVEFSSV9TQ0MKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgRE1BIHN1cHBvcnQgZm9yIHJlY2VpdmluZyBkYXRhIG9uIGNoYW5uZWwgQSBvZiB0aGUgU0NDLgorCSAgSWYgeW91IGhhdmUgYSBUVCB5b3UgbWF5IHNheSBZIGhlcmUgYW5kIHJlYWQKKwkgIGRyaXZlcnMvY2hhci9hdGFyaV9TQ0MuUkVBRE1FLiBBbGwgb3RoZXIgdXNlcnMgc2hvdWxkIHNheSBOIGhlcmUsCisJICBiZWNhdXNlIG9ubHkgdGhlIFRUIGhhcyBTQ0MtRE1BLCBldmVuIGlmIHlvdXIgbWFjaGluZSBrZWVwcyBjbGFpbWluZworCSAgc28gYXQgYm9vdCB0aW1lLgorCitjb25maWcgQVRBUklfTUlESQorCXRyaXN0YXRlICJBdGFyaSBNSURJIHNlcmlhbCBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVRBUkkKKwloZWxwCisJICBJZiB5b3Ugd2FudCB0byB1c2UgeW91ciBBdGFyaSdzIE1JREkgcG9ydCBpbiBMaW51eCwgc2F5IFkuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuCisKK2NvbmZpZyBBVEFSSV9EU1A1NksKKwl0cmlzdGF0ZSAiQXRhcmkgRFNQNTZrIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBBVEFSSSAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBJZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSB0aGUgRFNQNTYwMDEgaW4gRmFsY29ucywgc2F5IFkuIFRoaXMKKwkgIGRyaXZlciBpcyBzdGlsbCBleHBlcmltZW50YWwsIGFuZCBpZiB5b3UgZG9uJ3Qga25vdyB3aGF0IGl0IGlzLCBvcgorCSAgaWYgeW91IGRvbid0IGhhdmUgdGhpcyBwcm9jZXNzb3IsIGp1c3Qgc2F5IE4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuCisKK2NvbmZpZyBBTUlHQV9CVUlMVElOX1NFUklBTAorCXRyaXN0YXRlICJBbWlnYSBidWlsdGluIHNlcmlhbCBzdXBwb3J0IgorCWRlcGVuZHMgb24gQU1JR0EKKwloZWxwCisJICBJZiB5b3Ugd2FudCB0byB1c2UgeW91ciBBbWlnYSdzIGJ1aWx0LWluIHNlcmlhbCBwb3J0IGluIExpbnV4LAorCSAgYW5zd2VyIFkuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuCisKK2NvbmZpZyBXSElQUEVUX1NFUklBTAorCXRyaXN0YXRlICJIaXNvZnQgV2hpcHBldCBQQ01DSUEgc2VyaWFsIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBBTUlHQV9QQ01DSUEKKwloZWxwCisJICBIaVNvZnQgaGFzIGEgd2ViIHBhZ2UgYXQgPGh0dHA6Ly93d3cuaGlzb2Z0LmNvLnVrLz4sIGJ1dCB0aGVyZQorCSAgaXMgbm8gbGlzdGluZyBmb3IgdGhlIFdoaXBwZXQgaW4gdGhlaXIgQW1pZ2Egc2VjdGlvbi4KKworY29uZmlnIE1VTFRJRkFDRV9JSUlfVFRZCisJdHJpc3RhdGUgIk11bHRpZmFjZSBDYXJkIElJSSBzZXJpYWwgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFNSUdBCisJaGVscAorCSAgSWYgeW91IHdhbnQgdG8gdXNlIGEgTXVsdGlmYWNlIElJSSBjYXJkJ3Mgc2VyaWFsIHBvcnQgaW4gTGludXgsCisJICBhbnN3ZXIgWS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4KKworY29uZmlnIEdWUElPRVhUCisJdHJpc3RhdGUgIkdWUCBJTy1FeHRlbmRlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gUEFSUE9SVD1uICYmIFpPUlJPCisJaGVscAorCSAgSWYgeW91IHdhbnQgdG8gdXNlIGEgR1ZQIElPLUV4dGVuZGVyIHNlcmlhbCBjYXJkIGluIExpbnV4LCBzYXkgWS4KKwkgIE90aGVyd2lzZSwgc2F5IE4uCisKK2NvbmZpZyBHVlBJT0VYVF9MUAorCXRyaXN0YXRlICJHVlAgSU8tRXh0ZW5kZXIgcGFyYWxsZWwgcHJpbnRlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gR1ZQSU9FWFQKKwloZWxwCisJICBTYXkgWSB0byBlbmFibGUgZHJpdmluZyBhIHByaW50ZXIgZnJvbSB0aGUgcGFyYWxsZWwgcG9ydCBvbiB5b3VyCisJICBHVlAgSU8tRXh0ZW5kZXIgY2FyZCwgTiBvdGhlcndpc2UuCisKK2NvbmZpZyBHVlBJT0VYVF9QTElQCisJdHJpc3RhdGUgIkdWUCBJTy1FeHRlbmRlciBQTElQIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBHVlBJT0VYVAorCWhlbHAKKwkgIFNheSBZIHRvIGVuYWJsZSBkb2luZyBJUCBvdmVyIHRoZSBwYXJhbGxlbCBwb3J0IG9uIHlvdXIgR1ZQCisJICBJTy1FeHRlbmRlciBjYXJkLCBOIG90aGVyd2lzZS4KKworY29uZmlnIE1BQ19TQ0MKKwl0cmlzdGF0ZSAiTWFjaW50b3NoIHNlcmlhbCBzdXBwb3J0IgorCWRlcGVuZHMgb24gTUFDCisKK2NvbmZpZyBNQUNfSElECisJYm9vbAorCWRlcGVuZHMgb24gSU5QVVRfQURCSElECisJZGVmYXVsdCB5CisKK2NvbmZpZyBNQUNfQURCS0VZQ09ERVMKKwlib29sICJTdXBwb3J0IGZvciBBREIgcmF3IGtleWNvZGVzIgorCWRlcGVuZHMgb24gSU5QVVRfQURCSElECisJaGVscAorCSAgVGhpcyBwcm92aWRlcyBzdXBwb3J0IGZvciBzZW5kaW5nIHJhdyBBREIga2V5Y29kZXMgdG8gY29uc29sZQorCSAgZGV2aWNlcy4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgdXAgdG8gMi40LjAsIGJ1dCBpbiBmdXR1cmUgdGhpcyBtYXkgYmUKKwkgIHBoYXNlZCBvdXQgaW4gZmF2b3Igb2YgZ2VuZXJpYyBMaW51eCBrZXljb2Rlcy4gIElmIHlvdSBzYXkgWSBoZXJlLAorCSAgeW91IGNhbiBkeW5hbWljYWxseSBzd2l0Y2ggdmlhIHRoZQorCSAgL3Byb2Mvc3lzL2Rldi9tYWNfaGlkL2tleWJvYXJkX3NlbmRzX2xpbnV4X2tleWNvZGVzCisJICBzeXNjdGwgYW5kIHdpdGggdGhlICJrZXlib2FyZF9zZW5kc19saW51eF9rZXljb2Rlcz0iIGtlcm5lbAorCSAgYXJndW1lbnQuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkgaGVyZS4KKworY29uZmlnIEFEQl9LRVlCT0FSRAorCWJvb2wgIlN1cHBvcnQgZm9yIEFEQiBrZXlib2FyZCAob2xkIGRyaXZlcikiCisJZGVwZW5kcyBvbiBNQUMgJiYgIUlOUFVUX0FEQkhJRAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gdXNlIGFuIEFEQiBrZXlib2FyZCBhdHRhY2hlZCB0byB5b3VyCisJICBtYWNoaW5lLiBOb3RlIHRoYXQgdGhpcyBkaXNhYmxlcyBhbnkgb3RoZXIgKGllLiBQUy8yKSBrZXlib2FyZAorCSAgc3VwcG9ydCwgZXZlbiBpZiB5b3VyIG1hY2hpbmUgaXMgcGh5c2ljYWxseSBjYXBhYmxlIG9mIHVzaW5nIGJvdGggYXQKKwkgIHRoZSBzYW1lIHRpbWUuCisKKwkgIElmIHlvdSB1c2UgYW4gQURCIGtleWJvYXJkICg0IHBpbiBjb25uZWN0b3IpLCBzYXkgWSBoZXJlLgorCSAgSWYgeW91IHVzZSBhIFBTLzIga2V5Ym9hcmQgKDYgcGluIGNvbm5lY3RvciksIHNheSBOIGhlcmUuCisKK2NvbmZpZyBIUERDQQorCXRyaXN0YXRlICJIUCBEQ0Egc2VyaWFsIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBESU8gJiYgU0VSSUFMXzgyNTAKKwloZWxwCisJICBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIGludGVybmFsICJEQ0EiIHNlcmlhbCBwb3J0cyBvbiBhbiBIUDMwMAorCSAgbWFjaGluZSwgc2F5IFkgaGVyZS4KKworY29uZmlnIEhQQVBDSQorCXRyaXN0YXRlICJIUCBBUENJIHNlcmlhbCBzdXBwb3J0IgorCWRlcGVuZHMgb24gSFAzMDAgJiYgU0VSSUFMXzgyNTAgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBpbnRlcm5hbCAiQVBDSSIgc2VyaWFsIHBvcnRzIG9uIGFuIEhQNDAwCisJICBtYWNoaW5lLCBzYXkgWSBoZXJlLgorCitjb25maWcgTVZNRTE0N19TQ0MKKwlib29sICJTQ0Mgc3VwcG9ydCBmb3IgTVZNRTE0NyBzZXJpYWwgcG9ydHMiCisJZGVwZW5kcyBvbiBNVk1FMTQ3CisJaGVscAorCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgc2VyaWFsIHBvcnRzIG9uIHRoZSBNb3Rvcm9sYSBNVk1FMTQ3CisJICBib2FyZHMuICBFdmVyeW9uZSB1c2luZyBvbmUgb2YgdGhlc2UgYm9hcmRzIHNob3VsZCBzYXkgWSBoZXJlLgorCitjb25maWcgU0VSSUFMMTY3CisJYm9vbCAiQ0QyNDAxIHN1cHBvcnQgZm9yIE1WTUUxNjYvNyBzZXJpYWwgcG9ydHMiCisJZGVwZW5kcyBvbiBNVk1FMTZ4ICYmIEJST0tFTgorCWhlbHAKKwkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIHNlcmlhbCBwb3J0cyBvbiB0aGUgTW90b3JvbGEgTVZNRTE2NiwKKwkgIDE2NywgYW5kIDE3MiBib2FyZHMuICBFdmVyeW9uZSB1c2luZyBvbmUgb2YgdGhlc2UgYm9hcmRzIHNob3VsZCBzYXkKKwkgIFkgaGVyZS4KKworY29uZmlnIE1WTUUxNjJfU0NDCisJYm9vbCAiU0NDIHN1cHBvcnQgZm9yIE1WTUUxNjIgc2VyaWFsIHBvcnRzIgorCWRlcGVuZHMgb24gTVZNRTE2eAorCWhlbHAKKwkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIHNlcmlhbCBwb3J0cyBvbiB0aGUgTW90b3JvbGEgTVZNRTE2MiBhbmQKKwkgIDE3MiBib2FyZHMuICBFdmVyeW9uZSB1c2luZyBvbmUgb2YgdGhlc2UgYm9hcmRzIHNob3VsZCBzYXkgWSBoZXJlLgorCitjb25maWcgQlZNRTYwMDBfU0NDCisJYm9vbCAiU0NDIHN1cHBvcnQgZm9yIEJWTUU2MDAwIHNlcmlhbCBwb3J0cyIKKwlkZXBlbmRzIG9uIEJWTUU2MDAwCisJaGVscAorCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgc2VyaWFsIHBvcnRzIG9uIHRoZSBCVk1FNDAwMCBhbmQgQlZNRTYwMDAKKwkgIGJvYXJkcyBmcm9tIEJWTSBMdGQuICBFdmVyeW9uZSB1c2luZyBvbmUgb2YgdGhlc2UgYm9hcmRzIHNob3VsZCBzYXkKKwkgIFkgaGVyZS4KKworY29uZmlnIEROX1NFUklBTAorCWJvb2wgIlN1cHBvcnQgZm9yIEROIHNlcmlhbCBwb3J0IChkdW1teSkiCisJZGVwZW5kcyBvbiBBUE9MTE8KKworY29uZmlnIFNFUklBTF9DT05TT0xFCisJYm9vbCAiU3VwcG9ydCBmb3Igc2VyaWFsIHBvcnQgY29uc29sZSIKKwlkZXBlbmRzIG9uIChBTUlHQSB8fCBBVEFSSSB8fCBNQUMgfHwgU1VOMyB8fCBTVU4zWCB8fCBWTUUgfHwgQVBPTExPKSAmJiAoQVRBUklfTUZQU0VSPXkgfHwgQVRBUklfU0NDPXkgfHwgQVRBUklfTUlEST15IHx8IE1BQ19TQ0M9eSB8fCBBTUlHQV9CVUlMVElOX1NFUklBTD15IHx8IEdWUElPRVhUPXkgfHwgTVVMVElGQUNFX0lJSV9UVFk9eSB8fCBTRVJJQUw9eSB8fCBNVk1FMTQ3X1NDQyB8fCBTRVJJQUwxNjcgfHwgTVZNRTE2Ml9TQ0MgfHwgQlZNRTYwMDBfU0NDIHx8IEROX1NFUklBTCkKKwktLS1oZWxwLS0tCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byB1c2UgYSBzZXJpYWwgcG9ydCBhcyB0aGUKKwkgIHN5c3RlbSBjb25zb2xlICh0aGUgc3lzdGVtIGNvbnNvbGUgaXMgdGhlIGRldmljZSB3aGljaCByZWNlaXZlcyBhbGwKKwkgIGtlcm5lbCBtZXNzYWdlcyBhbmQgd2FybmluZ3MgYW5kIHdoaWNoIGFsbG93cyBsb2dpbnMgaW4gc2luZ2xlIHVzZXIKKwkgIG1vZGUpLiBUaGlzIGNvdWxkIGJlIHVzZWZ1bCBpZiBzb21lIHRlcm1pbmFsIG9yIHByaW50ZXIgaXMgY29ubmVjdGVkCisJICB0byB0aGF0IHNlcmlhbCBwb3J0LgorCisJICBFdmVuIGlmIHlvdSBzYXkgWSBoZXJlLCB0aGUgY3VycmVudGx5IHZpc2libGUgdmlydHVhbCBjb25zb2xlCisJICAoL2Rldi90dHkwKSB3aWxsIHN0aWxsIGJlIHVzZWQgYXMgdGhlIHN5c3RlbSBjb25zb2xlIGJ5IGRlZmF1bHQsIGJ1dAorCSAgeW91IGNhbiBhbHRlciB0aGF0IHVzaW5nIGEga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gc3VjaCBhcworCSAgImNvbnNvbGU9dHR5UzEiLiAoVHJ5ICJtYW4gYm9vdHBhcmFtIiBvciBzZWUgdGhlIGRvY3VtZW50YXRpb24gb2YKKwkgIHlvdXIgYm9vdCBsb2FkZXIgKGxpbG8gb3IgbG9hZGxpbikgYWJvdXQgaG93IHRvIHBhc3Mgb3B0aW9ucyB0byB0aGUKKwkgIGtlcm5lbCBhdCBib290IHRpbWUuKQorCisJICBJZiB5b3UgZG9uJ3QgaGF2ZSBhIFZHQSBjYXJkIGluc3RhbGxlZCBhbmQgeW91IHNheSBZIGhlcmUsIHRoZQorCSAga2VybmVsIHdpbGwgYXV0b21hdGljYWxseSB1c2UgdGhlIGZpcnN0IHNlcmlhbCBsaW5lLCAvZGV2L3R0eVMwLCBhcworCSAgc3lzdGVtIGNvbnNvbGUuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2VuZG1lbnUKKworc291cmNlICJmcy9LY29uZmlnIgorCitzb3VyY2UgImFyY2gvbTY4ay9LY29uZmlnLmRlYnVnIgorCitzb3VyY2UgInNlY3VyaXR5L0tjb25maWciCisKK3NvdXJjZSAiY3J5cHRvL0tjb25maWciCisKK3NvdXJjZSAibGliL0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvbTY4ay9LY29uZmlnLmRlYnVnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1M2I2ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvS2NvbmZpZy5kZWJ1ZwpAQCAtMCwwICsxLDUgQEAKK21lbnUgIktlcm5lbCBoYWNraW5nIgorCitzb3VyY2UgImxpYi9LY29uZmlnLmRlYnVnIgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL202OGsvTWFrZWZpbGUgYi9hcmNoL202OGsvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY2ZTc0MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9NYWtlZmlsZQpAQCAtMCwwICsxLDEyNiBAQAorIworIyBtNjhrL01ha2VmaWxlCisjCisjIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBieSB0aGUgZ2xvYmFsIG1ha2VmaWxlIHNvIHRoYXQgeW91IGNhbiBhZGQgeW91ciBvd24KKyMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYWdzIGFuZCBkZXBlbmRlbmNpZXMuIFJlbWVtYmVyIHRvIGRvIGhhdmUgYWN0aW9ucworIyBmb3IgImFyY2hjbGVhbiIgYW5kICJhcmNoZGVwIiBmb3IgY2xlYW5pbmcgdXAgYW5kIG1ha2luZyBkZXBlbmRlbmNpZXMgZm9yCisjIHRoaXMgYXJjaGl0ZWN0dXJlCisjCisjIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyMgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk0IGJ5IEhhbWlzaCBNYWNkb25hbGQKKyMKKworIyB0ZXN0IGZvciBjcm9zcyBjb21waWxpbmcKK0NPTVBJTEVfQVJDSCA9ICQoc2hlbGwgdW5hbWUgLW0pCisKKyMgb3ZlcnJpZGUgdG9wIGxldmVsIG1ha2VmaWxlCitBUyArPSAtbTY4MDIwCitMREZMQUdTIDo9IC1tIG02OGtlbGYKK2lmbmVxICgkKENPTVBJTEVfQVJDSCksJChBUkNIKSkKKwkjIHByZWZpeCBmb3IgY3Jvc3MtY29tcGlsaW5nIGJpbmFyaWVzCisJQ1JPU1NfQ09NUElMRSA9IG02OGstbGludXgtCitlbmRpZgorCitpZmRlZiBDT05GSUdfU1VOMworTERGTEFHU192bWxpbnV4ID0gLU4KK2VuZGlmCisKK0NIRUNLRkxBR1MgKz0gLURfX21jNjgwMDBfXworCisjIHdpdGhvdXQgLWZuby1zdHJlbmd0aC1yZWR1Y2UgdGhlIDUzYzd4eC5jIGRyaXZlciBmYWlscyA7LSgKK0NGTEFHUyArPSAtcGlwZSAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAtZmZpeGVkLWEyCisKKyMgZW5hYmxlIHByb2Nlc3NvciBzd2l0Y2ggaWYgY29tcGlsZWQgb25seSBmb3IgYSBzaW5nbGUgY3B1CitpZm5kZWYgQ09ORklHX002ODAyMAoraWZuZGVmIENPTkZJR19NNjgwMzAKKworaWZuZGVmIENPTkZJR19NNjgwNjAKK0NGTEFHUyA6PSAkKENGTEFHUykgLW02ODA0MAorZW5kaWYKKworaWZuZGVmIENPTkZJR19NNjgwNDAKK0NGTEFHUyA6PSAkKENGTEFHUykgLW02ODA2MAorZW5kaWYKKworZW5kaWYKK2VuZGlmCisKK2lmZGVmIENPTkZJR19LR0RCCisjIElmIGNvbmZpZ3VyZWQgZm9yIGtnZGIgc3VwcG9ydCwgaW5jbHVkZSBkZWJ1Z2dpbmcgaW5mb3MgYW5kIGtlZXAgdGhlCisjIGZyYW1lIHBvaW50ZXIKK0NGTEFHUyA6PSAkKHN1YnN0IC1mb21pdC1mcmFtZS1wb2ludGVyLCwkKENGTEFHUykpIC1nCitlbmRpZgorCitpZm5kZWYgQ09ORklHX1NVTjMKK2hlYWQteSA6PSBhcmNoL202OGsva2VybmVsL2hlYWQubworZWxzZQoraGVhZC15IDo9IGFyY2gvbTY4ay9rZXJuZWwvc3VuMy1oZWFkLm8KK2VuZGlmCisKK2NvcmUteQkJCQkrPSBhcmNoL202OGsva2VybmVsLwlhcmNoL202OGsvbW0vCitsaWJzLXkJCQkJKz0gYXJjaC9tNjhrL2xpYi8KKworY29yZS0kKENPTkZJR19RNDApCQkrPSBhcmNoL202OGsvcTQwLworY29yZS0kKENPTkZJR19BTUlHQSkJCSs9IGFyY2gvbTY4ay9hbWlnYS8KK2NvcmUtJChDT05GSUdfQVRBUkkpCQkrPSBhcmNoL202OGsvYXRhcmkvCitjb3JlLSQoQ09ORklHX01BQykJCSs9IGFyY2gvbTY4ay9tYWMvCitjb3JlLSQoQ09ORklHX0hQMzAwKQkJKz0gYXJjaC9tNjhrL2hwMzAwLworY29yZS0kKENPTkZJR19BUE9MTE8pCQkrPSBhcmNoL202OGsvYXBvbGxvLworY29yZS0kKENPTkZJR19NVk1FMTQ3KQkJKz0gYXJjaC9tNjhrL212bWUxNDcvCitjb3JlLSQoQ09ORklHX01WTUUxNngpCQkrPSBhcmNoL202OGsvbXZtZTE2eC8KK2NvcmUtJChDT05GSUdfQlZNRTYwMDApCQkrPSBhcmNoL202OGsvYnZtZTYwMDAvCitjb3JlLSQoQ09ORklHX1NVTjNYKQkJKz0gYXJjaC9tNjhrL3N1bjN4LwlhcmNoL202OGsvc3VuMy8KK2NvcmUtJChDT05GSUdfU1VOMykJCSs9IGFyY2gvbTY4ay9zdW4zLwlhcmNoL202OGsvc3VuMy9wcm9tLworY29yZS0kKENPTkZJR19NNjgwNDApCQkrPSBhcmNoL202OGsvZnBzcDA0MC8KK2NvcmUtJChDT05GSUdfTTY4MDYwKQkJKz0gYXJjaC9tNjhrL2lmcHNwMDYwLworY29yZS0kKENPTkZJR19NNjhLRlBVX0VNVSkJKz0gYXJjaC9tNjhrL21hdGgtZW11LworCithbGw6CXpJbWFnZQorCitsaWxvOgl2bWxpbnV4CisJaWYgWyAtZiAkKElOU1RBTExfUEFUSCkvdm1saW51eCBdOyB0aGVuIG12IC1mICQoSU5TVEFMTF9QQVRIKS92bWxpbnV4ICQoSU5TVEFMTF9QQVRIKS92bWxpbnV4Lm9sZDsgZmkKKwlpZiBbIC1mICQoSU5TVEFMTF9QQVRIKS9TeXN0ZW0ubWFwIF07IHRoZW4gbXYgLWYgJChJTlNUQUxMX1BBVEgpL1N5c3RlbS5tYXAgJChJTlNUQUxMX1BBVEgpL1N5c3RlbS5vbGQ7IGZpCisJY2F0IHZtbGludXggPiAkKElOU1RBTExfUEFUSCkvdm1saW51eAorCWNwIFN5c3RlbS5tYXAgJChJTlNUQUxMX1BBVEgpL1N5c3RlbS5tYXAKKwlpZiBbIC14IC9zYmluL2xpbG8gXTsgdGhlbiAvc2Jpbi9saWxvOyBlbHNlIC9ldGMvbGlsby9pbnN0YWxsOyBmaQorCit6SW1hZ2UgY29tcHJlc3NlZDogdm1saW51eC5negorCit2bWxpbnV4Lmd6OiB2bWxpbnV4CisKK2lmbmRlZiBDT05GSUdfS0dEQgorCWNwIHZtbGludXggdm1saW51eC50bXAKKwkkKFNUUklQKSB2bWxpbnV4LnRtcAorCWd6aXAgLTljIHZtbGludXgudG1wID52bWxpbnV4Lmd6CisJcm0gdm1saW51eC50bXAKK2Vsc2UKKwlnemlwIC05YyB2bWxpbnV4ID52bWxpbnV4Lmd6CitlbmRpZgorCitiekltYWdlOiB2bWxpbnV4LmJ6MgorCit2bWxpbnV4LmJ6Mjogdm1saW51eAorCitpZm5kZWYgQ09ORklHX0tHREIKKwljcCB2bWxpbnV4IHZtbGludXgudG1wCisJJChTVFJJUCkgdm1saW51eC50bXAKKwliemlwMiAtMWMgdm1saW51eC50bXAgPnZtbGludXguYnoyCisJcm0gdm1saW51eC50bXAKK2Vsc2UKKwliemlwMiAtMWMgdm1saW51eCA+dm1saW51eC5iejIKK2VuZGlmCisKK3ByZXBhcmU6IGluY2x1ZGUvYXNtLSQoQVJDSCkvb2Zmc2V0cy5oCitDTEVBTl9GSUxFUyArPSBpbmNsdWRlL2FzbS0kKEFSQ0gpL29mZnNldHMuaAorCithcmNoLyQoQVJDSCkva2VybmVsL2FzbS1vZmZzZXRzLnM6IGluY2x1ZGUvYXNtIGluY2x1ZGUvbGludXgvdmVyc2lvbi5oIFwKKwkJCQkgICBpbmNsdWRlL2NvbmZpZy9NQVJLRVIKKworaW5jbHVkZS9hc20tJChBUkNIKS9vZmZzZXRzLmg6IGFyY2gvJChBUkNIKS9rZXJuZWwvYXNtLW9mZnNldHMucworCSQoY2FsbCBmaWxlY2hrLGdlbi1hc20tb2Zmc2V0cykKKworYXJjaGNsZWFuOgorCXJtIC1mIHZtbGludXguZ3ogdm1saW51eC5iejIKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hbWlnYS9NYWtlZmlsZSBiL2FyY2gvbTY4ay9hbWlnYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjQxNTY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2FtaWdhL01ha2VmaWxlCkBAIC0wLDAgKzEsNyBAQAorIworIyBNYWtlZmlsZSBmb3IgTGludXggYXJjaC9tNjhrL2FtaWdhIHNvdXJjZSBkaXJlY3RvcnkKKyMKKworb2JqLXkJCTo9IGNvbmZpZy5vIGFtaWludHMubyBjaWEubyBjaGlwcmFtLm8gYW1pc291bmQubyBhbWlnYV9rc3ltcy5vCisKK29iai0kKENPTkZJR19BTUlHQV9QQ01DSUEpCSs9IHBjbWNpYS5vCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYW1pZ2EvYW1pZ2Ffa3N5bXMuYyBiL2FyY2gvbTY4ay9hbWlnYS9hbWlnYV9rc3ltcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YmQ4NGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvYW1pZ2EvYW1pZ2Ffa3N5bXMuYwpAQCAtMCwwICsxLDM2IEBACisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2FtaWdhaHcuaD4KKyNpbmNsdWRlIDxhc20vYW1pZ2FpbnRzLmg+CisjaW5jbHVkZSA8YXNtL2FtaXBjbWNpYS5oPgorCitleHRlcm4gdm9sYXRpbGUgdV9zaG9ydCBhbWlnYV9hdWRpb19taW5fcGVyaW9kOworZXh0ZXJuIHVfc2hvcnQgYW1pZ2FfYXVkaW9fcGVyaW9kOworCisvKgorICogQWRkIHRoaW5ncyBoZXJlIHdoZW4geW91IGZpbmQgdGhlIG5lZWQgZm9yIGl0LgorICovCitFWFBPUlRfU1lNQk9MKGFtaWdhX21vZGVsKTsKK0VYUE9SVF9TWU1CT0woYW1pZ2FfY2hpcHNldCk7CitFWFBPUlRfU1lNQk9MKGFtaWdhX2h3X3ByZXNlbnQpOworRVhQT1JUX1NZTUJPTChhbWlnYV9lY2xvY2spOworRVhQT1JUX1NZTUJPTChhbWlnYV9jb2xvcmNsb2NrKTsKK0VYUE9SVF9TWU1CT0woYW1pZ2FfY2hpcF9hbGxvYyk7CitFWFBPUlRfU1lNQk9MKGFtaWdhX2NoaXBfZnJlZSk7CitFWFBPUlRfU1lNQk9MKGFtaWdhX2NoaXBfYXZhaWwpOworRVhQT1JUX1NZTUJPTChhbWlnYV9jaGlwX3NpemUpOworRVhQT1JUX1NZTUJPTChhbWlnYV9hdWRpb19wZXJpb2QpOworRVhQT1JUX1NZTUJPTChhbWlnYV9hdWRpb19taW5fcGVyaW9kKTsKK0VYUE9SVF9TWU1CT0woYW1pZ2FfZG9faXJxKTsKK0VYUE9SVF9TWU1CT0woYW1pZ2FfZG9faXJxX2xpc3QpOworCisjaWZkZWYgQ09ORklHX0FNSUdBX1BDTUNJQQorICBFWFBPUlRfU1lNQk9MKHBjbWNpYV9yZXNldCk7CisgIEVYUE9SVF9TWU1CT0wocGNtY2lhX2NvcHlfdHVwbGUpOworICBFWFBPUlRfU1lNQk9MKHBjbWNpYV9wcm9ncmFtX3ZvbHRhZ2UpOworICBFWFBPUlRfU1lNQk9MKHBjbWNpYV9hY2Nlc3Nfc3BlZWQpOworICBFWFBPUlRfU1lNQk9MKHBjbWNpYV93cml0ZV9lbmFibGUpOworICBFWFBPUlRfU1lNQk9MKHBjbWNpYV93cml0ZV9kaXNhYmxlKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2FtaWdhL2FtaWludHMuYyBiL2FyY2gvbTY4ay9hbWlnYS9hbWlpbnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDllZGYyZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9hbWlnYS9hbWlpbnRzLmMKQEAgLTAsMCArMSw1MjAgQEAKKy8qCisgKiBsaW51eC9hcmNoL202OGsvYW1pZ2EvYW1paW50cy5jIC0tIEFtaWdhIExpbnV4IGludGVycnVwdCBoYW5kbGluZyBjb2RlCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIDExLzA3Lzk2OiByZXdyaXR0ZW4gaW50ZXJydXB0IGhhbmRsaW5nLCBpcnEgbGlzdHMgYXJlIGV4aXN0cyBub3cgb25seSBmb3IKKyAqICAgICAgICAgICB0aGlzIHNvdXJjZXMgd2hlcmUgaXQgbWFrZXMgc2Vuc2UgKFZFUlRCL1BPUlRTL0VYVEVSKSBhbmQgeW91IG11c3QKKyAqICAgICAgICAgICBiZSBjYXJlZnVsIHRoYXQgZGV2X2lkIGZvciB0aGlzIHNvdXJjZXMgaXMgdW5pcXVlIHNpbmNlIHRoaXMgdGhlCisgKiAgICAgICAgICAgb25seSBwb3NzaWJpbGl0eSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGRpZmZlcmVudCBoYW5kbGVycyBmb3IKKyAqICAgICAgICAgICBmcmVlX2lycS4gaXJxIGxpc3RzIGFsc28gaGF2ZSBkaWZmZXJlbnQgaXJxIGZsYWdzOgorICogICAgICAgICAgIC0gSVJRX0ZMR19GQVNUOiBoYW5kbGVyIGlzIGluc2VydGVkIGF0IHRvcCBvZiBsaXN0IChhZnRlciBvdGhlcgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBmYXN0IGhhbmRsZXJzKQorICogICAgICAgICAgIC0gSVJRX0ZMR19TTE9XOiBoYW5kbGVyIGlzIGluc2VydGVkIGF0IGJvdHRvbSBvZiBsaXN0IGFuZCBiZWZvcmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhleSdyZSBleGVjdXRlZCBpcnEgbGV2ZWwgaXMgc2V0IHRvIHRoZSBwcmV2aW91cworICogICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUsIGJ1dCBoYW5kbGVycyBkb24ndCBuZWVkIHRvIGJlIHJlZW50cmFudCwgaWYKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVlbnRyYW5jZSBvY2N1cnJlZCwgc2xvdyBoYW5kbGVycyB3aWxsIGJlIGp1c3QKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkIGFnYWluLgorICogICAgICAgICAgIFRoZSB3aG9sZSBpbnRlcnJ1cHQgaGFuZGxpbmcgZm9yIENJQXMgaXMgbW92ZWQgdG8gY2lhLmMKKyAqICAgICAgICAgICAvUm9tYW4gWmlwcGVsCisgKgorICogMDcvMDgvOTk6IHJld2FtcCBvZiB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIC0gd2Ugbm93IGhhdmUgdHdvIHR5cGVzIG9mCisgKiAgICAgICAgICAgaW50ZXJydXB0cywgbm9ybWFsIGFuZCBmYXN0IGhhbmRsZXJzLCBmYXN0IGhhbmRsZXJzIGJlaW5nCisgKiAgICAgICAgICAgbWFya2VkIHdpdGggU0FfSU5URVJSVVBUIGFuZCBydW5zIHdpdGggYWxsIG90aGVyIGludGVycnVwdHMKKyAqICAgICAgICAgICBkaXNhYmxlZC4gTm9ybWFsIGludGVycnVwdHMgZGlzYWJsZSB0aGVpciBvd24gc291cmNlIGJ1dAorICogICAgICAgICAgIHJ1biB3aXRoIGFsbCBvdGhlciBpbnRlcnJ1cHQgc291cmNlcyBlbmFibGVkLgorICogICAgICAgICAgIFBPUlRTIGFuZCBFWFRFUiBpbnRlcnJ1cHRzIGFyZSBhbHdheXMgc2hhcmVkIGV2ZW4gaWYgdGhlCisgKiAgICAgICAgICAgZHJpdmVycyBkbyBub3QgZXhwbGljaXRseSBtYXJrIHRoaXMgd2hlbiBjYWxsaW5nCisgKiAgICAgICAgICAgcmVxdWVzdF9pcnEgd2hpY2ggdGhleSByZWFsbHkgc2hvdWxkIGRvLgorICogICAgICAgICAgIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgd2F5IGludGVycnVwdHMgYXJlIGhhbmRsZWQgb24gYWxsCisgKiAgICAgICAgICAgb3RoZXIgYXJjaGl0ZWN0dXJlcyBhbmQgbWFrZXMgYSB0b24gb2Ygc2Vuc2UgYmVzaWRlcworICogICAgICAgICAgIGhhdmluZyB0aGUgYWR2YW50YWdlIG9mIG1ha2luZyBpdCBlYXNpZXIgdG8gc2hhcmUKKyAqICAgICAgICAgICBkcml2ZXJzLgorICogICAgICAgICAgIC9KZXMKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL2FtaWdhaHcuaD4KKyNpbmNsdWRlIDxhc20vYW1pZ2FpbnRzLmg+CisjaW5jbHVkZSA8YXNtL2FtaXBjbWNpYS5oPgorCitleHRlcm4gaW50IGNpYV9yZXF1ZXN0X2lycShzdHJ1Y3QgY2lhYmFzZSAqYmFzZSxpbnQgaXJxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpOworZXh0ZXJuIHZvaWQgY2lhX2ZyZWVfaXJxKHN0cnVjdCBjaWFiYXNlICpiYXNlLCB1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpOworZXh0ZXJuIHZvaWQgY2lhX2luaXRfSVJRKHN0cnVjdCBjaWFiYXNlICpiYXNlKTsKK2V4dGVybiBpbnQgY2lhX2dldF9pcnFfbGlzdChzdHJ1Y3QgY2lhYmFzZSAqYmFzZSwgc3RydWN0IHNlcV9maWxlICpwKTsKKworLyogaXJxIG5vZGUgdmFyaWFibGVzIGZvciBhbWlnYSBpbnRlcnJ1cHQgc291cmNlcyAqLworc3RhdGljIGlycV9ub2RlX3QgKmFtaV9pcnFfbGlzdFtBTUlfU1REX0lSUVNdOworCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgYW1pZ2FfaW50ZW5hX3ZhbHNbQU1JX1NURF9JUlFTXSA9IHsKKwlbSVJRX0FNSUdBX1ZFUlRCXQk9IElGX1ZFUlRCLAorCVtJUlFfQU1JR0FfQ09QUEVSXQk9IElGX0NPUEVSLAorCVtJUlFfQU1JR0FfQVVEMF0JPSBJRl9BVUQwLAorCVtJUlFfQU1JR0FfQVVEMV0JPSBJRl9BVUQxLAorCVtJUlFfQU1JR0FfQVVEMl0JPSBJRl9BVUQyLAorCVtJUlFfQU1JR0FfQVVEM10JPSBJRl9BVUQzLAorCVtJUlFfQU1JR0FfQkxJVF0JPSBJRl9CTElULAorCVtJUlFfQU1JR0FfRFNLU1lOXQk9IElGX0RTS1NZTiwKKwlbSVJRX0FNSUdBX0RTS0JMS10JPSBJRl9EU0tCTEssCisJW0lSUV9BTUlHQV9SQkZdCQk9IElGX1JCRiwKKwlbSVJRX0FNSUdBX1RCRV0JCT0gSUZfVEJFLAorCVtJUlFfQU1JR0FfU09GVF0JPSBJRl9TT0ZULAorCVtJUlFfQU1JR0FfUE9SVFNdCT0gSUZfUE9SVFMsCisJW0lSUV9BTUlHQV9FWFRFUl0JPSBJRl9FWFRFUgorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFtaV9zZXJ2ZXJzW0FNSV9TVERfSVJRU10gPSB7CisJW0lSUV9BTUlHQV9WRVJUQl0JPSAxLAorCVtJUlFfQU1JR0FfUE9SVFNdCT0gMSwKKwlbSVJRX0FNSUdBX0VYVEVSXQk9IDEKK307CisKK3N0YXRpYyBzaG9ydCBhbWlfYWJsZWNvdW50W0FNSV9JUlFTXTsKKworc3RhdGljIGlycXJldHVybl90IGFtaV9iYWRpbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJbnVtX3NwdXJpb3VzICs9IDE7CisJcmV0dXJuIElSUV9OT05FOworfQorCisvKgorICogdm9pZCBhbWlnYV9pbml0X0lSUSh2b2lkKQorICoKKyAqIFBhcmFtZXRlcnM6CU5vbmUKKyAqCisgKiBSZXR1cm5zOglOb3RoaW5nCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGR1cmluZyBrZXJuZWwgc3RhcnR1cCB0byBpbml0aWFsaXplCisgKiB0aGUgYW1pZ2EgSVJRIGhhbmRsaW5nIHJvdXRpbmVzLgorICovCisKK3ZvaWQgX19pbml0IGFtaWdhX2luaXRfSVJRKHZvaWQpCit7CisJaW50IGk7CisKKwkvKiBpbml0aWFsaXplIGhhbmRsZXJzICovCisJZm9yIChpID0gMDsgaSA8IEFNSV9TVERfSVJRUzsgaSsrKSB7CisJCWlmIChhbWlfc2VydmVyc1tpXSkgeworCQkJYW1pX2lycV9saXN0W2ldID0gTlVMTDsKKwkJfSBlbHNlIHsKKwkJCWFtaV9pcnFfbGlzdFtpXSA9IG5ld19pcnFfbm9kZSgpOworCQkJYW1pX2lycV9saXN0W2ldLT5oYW5kbGVyID0gYW1pX2JhZGludDsKKwkJCWFtaV9pcnFfbGlzdFtpXS0+ZmxhZ3MgICA9IDA7CisJCQlhbWlfaXJxX2xpc3RbaV0tPmRldl9pZCAgPSBOVUxMOworCQkJYW1pX2lycV9saXN0W2ldLT5kZXZuYW1lID0gTlVMTDsKKwkJCWFtaV9pcnFfbGlzdFtpXS0+bmV4dCAgICA9IE5VTEw7CisJCX0KKwl9CisJZm9yIChpID0gMDsgaSA8IEFNSV9JUlFTOyBpKyspCisJCWFtaV9hYmxlY291bnRbaV0gPSAwOworCisJLyogdHVybiBvZmYgUENNQ0lBIGludGVycnVwdHMgKi8KKwlpZiAoQU1JR0FIV19QUkVTRU5UKFBDTUNJQSkpCisJCWdheWxlLmludGVuID0gR0FZTEVfSVJRX0lERTsKKworCS8qIHR1cm4gb2ZmIGFsbCBpbnRlcnJ1cHRzIGFuZCBlbmFibGUgdGhlIG1hc3RlciBpbnRlcnJ1cHQgYml0ICovCisJY3VzdG9tLmludGVuYSA9IDB4N2ZmZjsKKwljdXN0b20uaW50cmVxID0gMHg3ZmZmOworCWN1c3RvbS5pbnRlbmEgPSBJRl9TRVRDTFIgfCBJRl9JTlRFTjsKKworCWNpYV9pbml0X0lSUSgmY2lhYV9iYXNlKTsKKwljaWFfaW5pdF9JUlEoJmNpYWJfYmFzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFtaWdhX2luc2VydF9pcnEoaXJxX25vZGVfdCAqKmxpc3QsIGlycV9ub2RlX3QgKm5vZGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpcnFfbm9kZV90ICpjdXI7CisKKwlpZiAoIW5vZGUtPmRldl9pZCkKKwkJcHJpbnRrKCIlczogV2FybmluZzogZGV2X2lkIG9mICVzIGlzIHplcm9cbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIG5vZGUtPmRldm5hbWUpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJY3VyID0gKmxpc3Q7CisKKwlpZiAobm9kZS0+ZmxhZ3MgJiBTQV9JTlRFUlJVUFQpIHsKKwkJaWYgKG5vZGUtPmZsYWdzICYgU0FfU0hJUlEpCisJCQlyZXR1cm4gLUVCVVNZOworCQkvKgorCQkgKiBUaGVyZSBzaG91bGQgbmV2ZXIgYmUgbW9yZSB0aGFuIG9uZQorCQkgKi8KKwkJd2hpbGUgKGN1ciAmJiBjdXItPmZsYWdzICYgU0FfSU5URVJSVVBUKSB7CisJCQlsaXN0ID0gJmN1ci0+bmV4dDsKKwkJCWN1ciA9IGN1ci0+bmV4dDsKKwkJfQorCX0gZWxzZSB7CisJCXdoaWxlIChjdXIpIHsKKwkJCWxpc3QgPSAmY3VyLT5uZXh0OworCQkJY3VyID0gY3VyLT5uZXh0OworCQl9CisJfQorCisJbm9kZS0+bmV4dCA9IGN1cjsKKwkqbGlzdCA9IG5vZGU7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhbWlnYV9kZWxldGVfaXJxKGlycV9ub2RlX3QgKipsaXN0LCB2b2lkICpkZXZfaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpcnFfbm9kZV90ICpub2RlOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJZm9yIChub2RlID0gKmxpc3Q7IG5vZGU7IGxpc3QgPSAmbm9kZS0+bmV4dCwgbm9kZSA9ICpsaXN0KSB7CisJCWlmIChub2RlLT5kZXZfaWQgPT0gZGV2X2lkKSB7CisJCQkqbGlzdCA9IG5vZGUtPm5leHQ7CisJCQkvKiBNYXJrIGl0IGFzIGZyZWUuICovCisJCQlub2RlLT5oYW5kbGVyID0gTlVMTDsKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcHJpbnRrICgiJXM6IHRyaWVkIHRvIHJlbW92ZSBpbnZhbGlkIGlycVxuIiwgX19GVU5DVElPTl9fKTsKK30KKworLyoKKyAqIGFtaWdhX3JlcXVlc3RfaXJxIDogYWRkIGFuIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgZm9yIGEgcGFydGljdWxhcgorICogICAgICAgICAgICAgICAgICAgICBtYWNoaW5lIHNwZWNpZmljIGludGVycnVwdCBzb3VyY2UuCisgKiAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBhZGRpdGlvbiB3YXMgc3VjY2Vzc2Z1bCwgaXQgcmV0dXJucyAwLgorICovCisKK2ludCBhbWlnYV9yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLAorCQkgICAgICBpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpCit7CisJaXJxX25vZGVfdCAqbm9kZTsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKGlycSA+PSBBTUlfSVJRUykgeworCQlwcmludGsgKCIlczogVW5rbm93biBJUlEgJWQgZnJvbSAlc1xuIiwgX19GVU5DVElPTl9fLAorCQkJaXJxLCBkZXZuYW1lKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlpZiAoaXJxID49IElSUV9BTUlHQV9BVVRPKQorCQlyZXR1cm4gY3B1X3JlcXVlc3RfaXJxKGlycSAtIElSUV9BTUlHQV9BVVRPLCBoYW5kbGVyLAorCQkgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLCBkZXZuYW1lLCBkZXZfaWQpOworCisJaWYgKGlycSA+PSBJUlFfQU1JR0FfQ0lBQikKKwkJcmV0dXJuIGNpYV9yZXF1ZXN0X2lycSgmY2lhYl9iYXNlLCBpcnEgLSBJUlFfQU1JR0FfQ0lBQiwKKwkJICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLCBmbGFncywgZGV2bmFtZSwgZGV2X2lkKTsKKworCWlmIChpcnEgPj0gSVJRX0FNSUdBX0NJQUEpCisJCXJldHVybiBjaWFfcmVxdWVzdF9pcnEoJmNpYWFfYmFzZSwgaXJxIC0gSVJRX0FNSUdBX0NJQUEsCisJCSAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciwgZmxhZ3MsIGRldm5hbWUsIGRldl9pZCk7CisKKwkvKgorCSAqIElSUV9BTUlHQV9QT1JUUyAmIElSUV9BTUlHQV9FWFRFUiBkZWZhdWx0cyB0byBzaGFyZWQsCisJICogd2UgY291bGQgYWRkIGEgY2hlY2sgaGVyZSBmb3IgdGhlIFNBX1NISVJRIGZsYWcgYnV0IGFsbCBkcml2ZXJzCisJICogc2hvdWxkIGJlIGF3YXJlIG9mIHNoYXJpbmcgYW55d2F5LgorCSAqLworCWlmIChhbWlfc2VydmVyc1tpcnFdKSB7CisJCWlmICghKG5vZGUgPSBuZXdfaXJxX25vZGUoKSkpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJbm9kZS0+aGFuZGxlciA9IGhhbmRsZXI7CisJCW5vZGUtPmZsYWdzICAgPSBmbGFnczsKKwkJbm9kZS0+ZGV2X2lkICA9IGRldl9pZDsKKwkJbm9kZS0+ZGV2bmFtZSA9IGRldm5hbWU7CisJCW5vZGUtPm5leHQgICAgPSBOVUxMOworCQllcnJvciA9IGFtaWdhX2luc2VydF9pcnEoJmFtaV9pcnFfbGlzdFtpcnFdLCBub2RlKTsKKwl9IGVsc2UgeworCQlhbWlfaXJxX2xpc3RbaXJxXS0+aGFuZGxlciA9IGhhbmRsZXI7CisJCWFtaV9pcnFfbGlzdFtpcnFdLT5mbGFncyAgID0gZmxhZ3M7CisJCWFtaV9pcnFfbGlzdFtpcnFdLT5kZXZfaWQgID0gZGV2X2lkOworCQlhbWlfaXJxX2xpc3RbaXJxXS0+ZGV2bmFtZSA9IGRldm5hbWU7CisJfQorCisJLyogZW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi8KKwlpZiAoaXJxIDwgSVJRX0FNSUdBX1BPUlRTICYmICFhbWlfYWJsZWNvdW50W2lycV0pCisJCWN1c3RvbS5pbnRlbmEgPSBJRl9TRVRDTFIgfCBhbWlnYV9pbnRlbmFfdmFsc1tpcnFdOworCisJcmV0dXJuIGVycm9yOworfQorCit2b2lkIGFtaWdhX2ZyZWVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlpZiAoaXJxID49IEFNSV9JUlFTKSB7CisJCXByaW50ayAoIiVzOiBVbmtub3duIElSUSAlZFxuIiwgX19GVU5DVElPTl9fLCBpcnEpOworCQlyZXR1cm47CisJfQorCisJaWYgKGlycSA+PSBJUlFfQU1JR0FfQVVUTykKKwkJY3B1X2ZyZWVfaXJxKGlycSAtIElSUV9BTUlHQV9BVVRPLCBkZXZfaWQpOworCisJaWYgKGlycSA+PSBJUlFfQU1JR0FfQ0lBQikgeworCQljaWFfZnJlZV9pcnEoJmNpYWJfYmFzZSwgaXJxIC0gSVJRX0FNSUdBX0NJQUIsIGRldl9pZCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaXJxID49IElSUV9BTUlHQV9DSUFBKSB7CisJCWNpYV9mcmVlX2lycSgmY2lhYV9iYXNlLCBpcnEgLSBJUlFfQU1JR0FfQ0lBQSwgZGV2X2lkKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChhbWlfc2VydmVyc1tpcnFdKSB7CisJCWFtaWdhX2RlbGV0ZV9pcnEoJmFtaV9pcnFfbGlzdFtpcnFdLCBkZXZfaWQpOworCQkvKiBpZiBzZXJ2ZXIgbGlzdCBlbXB0eSwgZGlzYWJsZSB0aGUgaW50ZXJydXB0ICovCisJCWlmICghYW1pX2lycV9saXN0W2lycV0gJiYgaXJxIDwgSVJRX0FNSUdBX1BPUlRTKQorCQkJY3VzdG9tLmludGVuYSA9IGFtaWdhX2ludGVuYV92YWxzW2lycV07CisJfSBlbHNlIHsKKwkJaWYgKGFtaV9pcnFfbGlzdFtpcnFdLT5kZXZfaWQgIT0gZGV2X2lkKQorCQkJcHJpbnRrKCIlczogcmVtb3ZpbmcgcHJvYmFibHkgd3JvbmcgSVJRICVkIGZyb20gJXNcbiIsCisJCQkgICAgICAgX19GVU5DVElPTl9fLCBpcnEsIGFtaV9pcnFfbGlzdFtpcnFdLT5kZXZuYW1lKTsKKwkJYW1pX2lycV9saXN0W2lycV0tPmhhbmRsZXIgPSBhbWlfYmFkaW50OworCQlhbWlfaXJxX2xpc3RbaXJxXS0+ZmxhZ3MgICA9IDA7CisJCWFtaV9pcnFfbGlzdFtpcnFdLT5kZXZfaWQgID0gTlVMTDsKKwkJYW1pX2lycV9saXN0W2lycV0tPmRldm5hbWUgPSBOVUxMOworCQljdXN0b20uaW50ZW5hID0gYW1pZ2FfaW50ZW5hX3ZhbHNbaXJxXTsKKwl9Cit9CisKKy8qCisgKiBFbmFibGUvZGlzYWJsZSBhIHBhcnRpY3VsYXIgbWFjaGluZSBzcGVjaWZpYyBpbnRlcnJ1cHQgc291cmNlLgorICogTm90ZSB0aGF0IHRoaXMgbWF5IGFmZmVjdCBvdGhlciBpbnRlcnJ1cHRzIGluIGNhc2Ugb2YgYSBzaGFyZWQgaW50ZXJydXB0LgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgZm9yIGEgX3ZlcnlfIHNob3J0IHRpbWUgdG8gY2hhbmdlIHNvbWUKKyAqIGludGVybmFsIGRhdGEsIHRoYXQgbWF5IG5vdCBiZSBjaGFuZ2VkIGJ5IHRoZSBpbnRlcnJ1cHQgYXQgdGhlIHNhbWUgdGltZS4KKyAqIGFtaV8oZW5hYmxlfGRpc2FibGUpX2lycSBjYWxscyBtYXkgYWxzbyBiZSBuZXN0ZWQuCisgKi8KKwordm9pZCBhbWlnYV9lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaWYgKGlycSA+PSBBTUlfSVJRUykgeworCQlwcmludGsoIiVzOiBVbmtub3duIElSUSAlZFxuIiwgX19GVU5DVElPTl9fLCBpcnEpOworCQlyZXR1cm47CisJfQorCisJaWYgKC0tYW1pX2FibGVjb3VudFtpcnFdKQorCQlyZXR1cm47CisKKwkvKiBObyBhY3Rpb24gZm9yIGF1dG8tdmVjdG9yIGludGVycnVwdHMgKi8KKwlpZiAoaXJxID49IElSUV9BTUlHQV9BVVRPKXsKKwkJcHJpbnRrKCIlczogVHJ5aW5nIHRvIGVuYWJsZSBhdXRvLXZlY3RvciBJUlEgJWlcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIGlycSAtIElSUV9BTUlHQV9BVVRPKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpcnEgPj0gSVJRX0FNSUdBX0NJQUIpIHsKKwkJY2lhX3NldF9pcnEoJmNpYWJfYmFzZSwgKDEgPDwgKGlycSAtIElSUV9BTUlHQV9DSUFCKSkpOworCQljaWFfYWJsZV9pcnEoJmNpYWJfYmFzZSwgQ0lBX0lDUl9TRVRDTFIgfAorCQkgICAgICAgICAgICAgKDEgPDwgKGlycSAtIElSUV9BTUlHQV9DSUFCKSkpOworCQlyZXR1cm47CisJfQorCisJaWYgKGlycSA+PSBJUlFfQU1JR0FfQ0lBQSkgeworCQljaWFfc2V0X2lycSgmY2lhYV9iYXNlLCAoMSA8PCAoaXJxIC0gSVJRX0FNSUdBX0NJQUEpKSk7CisJCWNpYV9hYmxlX2lycSgmY2lhYV9iYXNlLCBDSUFfSUNSX1NFVENMUiB8CisJCSAgICAgICAgICAgICAoMSA8PCAoaXJxIC0gSVJRX0FNSUdBX0NJQUEpKSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBlbmFibGUgdGhlIGludGVycnVwdCAqLworCWN1c3RvbS5pbnRlbmEgPSBJRl9TRVRDTFIgfCBhbWlnYV9pbnRlbmFfdmFsc1tpcnFdOworfQorCit2b2lkIGFtaWdhX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaWYgKGlycSA+PSBBTUlfSVJRUykgeworCQlwcmludGsoIiVzOiBVbmtub3duIElSUSAlZFxuIiwgX19GVU5DVElPTl9fLCBpcnEpOworCQlyZXR1cm47CisJfQorCisJaWYgKGFtaV9hYmxlY291bnRbaXJxXSsrKQorCQlyZXR1cm47CisKKwkvKiBObyBhY3Rpb24gZm9yIGF1dG8tdmVjdG9yIGludGVycnVwdHMgKi8KKwlpZiAoaXJxID49IElSUV9BTUlHQV9BVVRPKSB7CisJCXByaW50aygiJXM6IFRyeWluZyB0byBkaXNhYmxlIGF1dG8tdmVjdG9yIElSUSAlaVxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgaXJxIC0gSVJRX0FNSUdBX0FVVE8pOworCQlyZXR1cm47CisJfQorCisJaWYgKGlycSA+PSBJUlFfQU1JR0FfQ0lBQikgeworCQljaWFfYWJsZV9pcnEoJmNpYWJfYmFzZSwgMSA8PCAoaXJxIC0gSVJRX0FNSUdBX0NJQUIpKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpcnEgPj0gSVJRX0FNSUdBX0NJQUEpIHsKKwkJY2lhX2FibGVfaXJxKCZjaWFhX2Jhc2UsIDEgPDwgKGlycSAtIElSUV9BTUlHQV9DSUFBKSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgKi8KKwljdXN0b20uaW50ZW5hID0gYW1pZ2FfaW50ZW5hX3ZhbHNbaXJxXTsKK30KKworaW5saW5lIHZvaWQgYW1pZ2FfZG9faXJxKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwlrc3RhdF9jcHUoMCkuaXJxc1tTWVNfSVJRUyArIGlycV0rKzsKKwlhbWlfaXJxX2xpc3RbaXJxXS0+aGFuZGxlcihpcnEsIGFtaV9pcnFfbGlzdFtpcnFdLT5kZXZfaWQsIGZwKTsKK30KKwordm9pZCBhbWlnYV9kb19pcnFfbGlzdChpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJaXJxX25vZGVfdCAqbm9kZTsKKworCWtzdGF0X2NwdSgwKS5pcnFzW1NZU19JUlFTICsgaXJxXSsrOworCisJY3VzdG9tLmludHJlcSA9IGFtaWdhX2ludGVuYV92YWxzW2lycV07CisKKwlmb3IgKG5vZGUgPSBhbWlfaXJxX2xpc3RbaXJxXTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHQpCisJCW5vZGUtPmhhbmRsZXIoaXJxLCBub2RlLT5kZXZfaWQsIGZwKTsKK30KKworLyoKKyAqIFRoZSBidWlsdGluIEFtaWdhIGhhcmR3YXJlIGludGVycnVwdCBoYW5kbGVycy4KKyAqLworCitzdGF0aWMgaXJxcmV0dXJuX3QgYW1pX2ludDEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJdW5zaWduZWQgc2hvcnQgaW50cyA9IGN1c3RvbS5pbnRyZXFyICYgY3VzdG9tLmludGVuYXI7CisKKwkvKiBpZiBzZXJpYWwgdHJhbnNtaXQgYnVmZmVyIGVtcHR5LCBpbnRlcnJ1cHQgKi8KKwlpZiAoaW50cyAmIElGX1RCRSkgeworCQljdXN0b20uaW50cmVxID0gSUZfVEJFOworCQlhbWlnYV9kb19pcnEoSVJRX0FNSUdBX1RCRSwgZnApOworCX0KKworCS8qIGlmIGZsb3BweSBkaXNrIHRyYW5zZmVyIGNvbXBsZXRlLCBpbnRlcnJ1cHQgKi8KKwlpZiAoaW50cyAmIElGX0RTS0JMSykgeworCQljdXN0b20uaW50cmVxID0gSUZfRFNLQkxLOworCQlhbWlnYV9kb19pcnEoSVJRX0FNSUdBX0RTS0JMSywgZnApOworCX0KKworCS8qIGlmIHNvZnR3YXJlIGludGVycnVwdCBzZXQsIGludGVycnVwdCAqLworCWlmIChpbnRzICYgSUZfU09GVCkgeworCQljdXN0b20uaW50cmVxID0gSUZfU09GVDsKKwkJYW1pZ2FfZG9faXJxKElSUV9BTUlHQV9TT0ZULCBmcCk7CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGFtaV9pbnQzKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCXVuc2lnbmVkIHNob3J0IGludHMgPSBjdXN0b20uaW50cmVxciAmIGN1c3RvbS5pbnRlbmFyOworCisJLyogaWYgYSBibGl0dGVyIGludGVycnVwdCAqLworCWlmIChpbnRzICYgSUZfQkxJVCkgeworCQljdXN0b20uaW50cmVxID0gSUZfQkxJVDsKKwkJYW1pZ2FfZG9faXJxKElSUV9BTUlHQV9CTElULCBmcCk7CisJfQorCisJLyogaWYgYSBjb3BwZXIgaW50ZXJydXB0ICovCisJaWYgKGludHMgJiBJRl9DT1BFUikgeworCQljdXN0b20uaW50cmVxID0gSUZfQ09QRVI7CisJCWFtaWdhX2RvX2lycShJUlFfQU1JR0FfQ09QUEVSLCBmcCk7CisJfQorCisJLyogaWYgYSB2ZXJ0aWNhbCBibGFuayBpbnRlcnJ1cHQgKi8KKwlpZiAoaW50cyAmIElGX1ZFUlRCKQorCQlhbWlnYV9kb19pcnFfbGlzdChJUlFfQU1JR0FfVkVSVEIsIGZwKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhbWlfaW50NChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwl1bnNpZ25lZCBzaG9ydCBpbnRzID0gY3VzdG9tLmludHJlcXIgJiBjdXN0b20uaW50ZW5hcjsKKworCS8qIGlmIGF1ZGlvIDAgaW50ZXJydXB0ICovCisJaWYgKGludHMgJiBJRl9BVUQwKSB7CisJCWN1c3RvbS5pbnRyZXEgPSBJRl9BVUQwOworCQlhbWlnYV9kb19pcnEoSVJRX0FNSUdBX0FVRDAsIGZwKTsKKwl9CisKKwkvKiBpZiBhdWRpbyAxIGludGVycnVwdCAqLworCWlmIChpbnRzICYgSUZfQVVEMSkgeworCQljdXN0b20uaW50cmVxID0gSUZfQVVEMTsKKwkJYW1pZ2FfZG9faXJxKElSUV9BTUlHQV9BVUQxLCBmcCk7CisJfQorCisJLyogaWYgYXVkaW8gMiBpbnRlcnJ1cHQgKi8KKwlpZiAoaW50cyAmIElGX0FVRDIpIHsKKwkJY3VzdG9tLmludHJlcSA9IElGX0FVRDI7CisJCWFtaWdhX2RvX2lycShJUlFfQU1JR0FfQVVEMiwgZnApOworCX0KKworCS8qIGlmIGF1ZGlvIDMgaW50ZXJydXB0ICovCisJaWYgKGludHMgJiBJRl9BVUQzKSB7CisJCWN1c3RvbS5pbnRyZXEgPSBJRl9BVUQzOworCQlhbWlnYV9kb19pcnEoSVJRX0FNSUdBX0FVRDMsIGZwKTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYW1pX2ludDUoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJdW5zaWduZWQgc2hvcnQgaW50cyA9IGN1c3RvbS5pbnRyZXFyICYgY3VzdG9tLmludGVuYXI7CisKKwkvKiBpZiBzZXJpYWwgcmVjZWl2ZSBidWZmZXIgZnVsbCBpbnRlcnJ1cHQgKi8KKwlpZiAoaW50cyAmIElGX1JCRikgeworCQkvKiBhY2tub3dsZWRnZSBvZiBJRl9SQkYgbXVzdCBiZSBkb25lIGJ5IHRoZSBzZXJpYWwgaW50ZXJydXB0ICovCisJCWFtaWdhX2RvX2lycShJUlFfQU1JR0FfUkJGLCBmcCk7CisJfQorCisJLyogaWYgYSBkaXNrIHN5bmMgaW50ZXJydXB0ICovCisJaWYgKGludHMgJiBJRl9EU0tTWU4pIHsKKwkJY3VzdG9tLmludHJlcSA9IElGX0RTS1NZTjsKKwkJYW1pZ2FfZG9faXJxKElSUV9BTUlHQV9EU0tTWU4sIGZwKTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYW1pX2ludDcoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJcGFuaWMgKCJsZXZlbCA3IGludGVycnVwdCByZWNlaXZlZFxuIik7Cit9CisKK2lycXJldHVybl90ICgqYW1pZ2FfZGVmYXVsdF9oYW5kbGVyW1NZU19JUlFTXSkoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopID0geworCVswXSA9IGFtaV9iYWRpbnQsCisJWzFdID0gYW1pX2ludDEsCisJWzJdID0gYW1pX2JhZGludCwKKwlbM10gPSBhbWlfaW50MywKKwlbNF0gPSBhbWlfaW50NCwKKwlbNV0gPSBhbWlfaW50NSwKKwlbNl0gPSBhbWlfYmFkaW50LAorCVs3XSA9IGFtaV9pbnQ3Cit9OworCitpbnQgc2hvd19hbWlnYV9pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKK3sKKwlpbnQgaTsKKwlpcnFfbm9kZV90ICpub2RlOworCisJZm9yIChpID0gMDsgaSA8IEFNSV9TVERfSVJRUzsgaSsrKSB7CisJCWlmICghKG5vZGUgPSBhbWlfaXJxX2xpc3RbaV0pKQorCQkJY29udGludWU7CisJCXNlcV9wcmludGYocCwgImFtaSAgJTJkOiAlMTB1ICIsIGksCisJCSAgICAgICAgICAgICAgIGtzdGF0X2NwdSgwKS5pcnFzW1NZU19JUlFTICsgaV0pOworCQlkbyB7CisJCQlpZiAobm9kZS0+ZmxhZ3MgJiBTQV9JTlRFUlJVUFQpCisJCQkJc2VxX3B1dHMocCwgIkYgIik7CisJCQllbHNlCisJCQkJc2VxX3B1dHMocCwgIiAgIik7CisJCQlzZXFfcHJpbnRmKHAsICIlc1xuIiwgbm9kZS0+ZGV2bmFtZSk7CisJCQlpZiAoKG5vZGUgPSBub2RlLT5uZXh0KSkKKwkJCQlzZXFfcHV0cyhwLCAiICAgICAgICAgICAgICAgICAgICAiKTsKKwkJfSB3aGlsZSAobm9kZSk7CisJfQorCisJY2lhX2dldF9pcnFfbGlzdCgmY2lhYV9iYXNlLCBwKTsKKwljaWFfZ2V0X2lycV9saXN0KCZjaWFiX2Jhc2UsIHApOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2FtaWdhL2FtaXNvdW5kLmMgYi9hcmNoL202OGsvYW1pZ2EvYW1pc291bmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjVkOTM2MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9hbWlnYS9hbWlzb3VuZC5jCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogbGludXgvYXJjaC9tNjhrL2FtaWdhL2FtaXNvdW5kLmMKKyAqCisgKiBhbWlnYSBzb3VuZCBkcml2ZXIgZm9yIExpbnV4L202OGsKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYW1pZ2Fody5oPgorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgKnNuZF9kYXRhOworc3RhdGljIGNvbnN0IHNpZ25lZCBjaGFyIHNpbmVfZGF0YVtdID0geworCTAsICAzOSwgIDc1LCAgMTAzLCAgMTIxLCAgMTI3LCAgMTIxLCAgMTAzLCAgNzUsICAzOSwKKwkwLCAtMzksIC03NSwgLTEwMywgLTEyMSwgLTEyNywgLTEyMSwgLTEwMywgLTc1LCAtMzkKK307CisjZGVmaW5lIERBVEFfU0laRQkoc2l6ZW9mKHNpbmVfZGF0YSkvc2l6ZW9mKHNpbmVfZGF0YVswXSkpCisKKyAgICAvKgorICAgICAqIFRoZSBtaW5pbXVtIHBlcmlvZCBmb3IgYXVkaW8gbWF5IGJlIG1vZGlmaWVkIGJ5IHRoZSBmcmFtZSBidWZmZXIKKyAgICAgKiBkZXZpY2Ugc2luY2UgaXQgZGVwZW5kcyBvbiBodG90YWwgKGZvciBPQ1MvRUNTL0FHQSkKKyAgICAgKi8KKwordm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgYW1pZ2FfYXVkaW9fbWluX3BlcmlvZCA9IDEyNDsgLyogRGVmYXVsdCBmb3IgcHJlLU9DUyAqLworCisjZGVmaW5lIE1BWF9QRVJJT0QJKDY1NTM1KQorCisKKyAgICAvKgorICAgICAqCUN1cnJlbnQgcGVyaW9kIChzZXQgYnkgZG1hc291bmQuYykKKyAgICAgKi8KKwordW5zaWduZWQgc2hvcnQgYW1pZ2FfYXVkaW9fcGVyaW9kID0gTUFYX1BFUklPRDsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xvY2tfY29uc3RhbnQ7CisKK3ZvaWQgX19pbml0IGFtaWdhX2luaXRfc291bmQodm9pZCkKK3sKKwlzdGF0aWMgc3RydWN0IHJlc291cmNlIGJlZXBfcmVzID0geyAubmFtZSA9ICJCZWVwIiB9OworCisJc25kX2RhdGEgPSBhbWlnYV9jaGlwX2FsbG9jX3JlcyhzaXplb2Yoc2luZV9kYXRhKSwgJmJlZXBfcmVzKTsKKwlpZiAoIXNuZF9kYXRhKSB7CisJCXByaW50ayAoS0VSTl9DUklUICJhbWlnYSBpbml0X3NvdW5kOiBmYWlsZWQgdG8gYWxsb2NhdGUgY2hpcG1lbVxuIik7CisJCXJldHVybjsKKwl9CisJbWVtY3B5IChzbmRfZGF0YSwgc2luZV9kYXRhLCBzaXplb2Yoc2luZV9kYXRhKSk7CisKKwkvKiBzZXR1cCBkaXZpc29yICovCisJY2xvY2tfY29uc3RhbnQgPSAoYW1pZ2FfY29sb3JjbG9jaytEQVRBX1NJWkUvMikvREFUQV9TSVpFOworCisJLyogd2l0aG91dCBhbWlmYiwgdHVybiB2aWRlbyBvZmYgYW5kIGVuYWJsZSBoaWdoIHF1YWxpdHkgc291bmQgKi8KKyNpZm5kZWYgQ09ORklHX0ZCX0FNSUdBCisJYW1pZmJfdmlkZW9fb2ZmKCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgbm9zb3VuZCggdW5zaWduZWQgbG9uZyBpZ25vcmVkICk7CitzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3Qgc291bmRfdGltZXIgPSBUSU1FUl9JTklUSUFMSVpFUihub3NvdW5kLCAwLCAwKTsKKwordm9pZCBhbWlnYV9ta3NvdW5kKCB1bnNpZ25lZCBpbnQgaHosIHVuc2lnbmVkIGludCB0aWNrcyApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghc25kX2RhdGEpCisJCXJldHVybjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlkZWxfdGltZXIoICZzb3VuZF90aW1lciApOworCisJaWYgKGh6ID4gMjAgJiYgaHogPCAzMjc2NykgeworCQl1bnNpZ25lZCBsb25nIHBlcmlvZCA9IChjbG9ja19jb25zdGFudCAvIGh6KTsKKworCQlpZiAocGVyaW9kIDwgYW1pZ2FfYXVkaW9fbWluX3BlcmlvZCkKKwkJCXBlcmlvZCA9IGFtaWdhX2F1ZGlvX21pbl9wZXJpb2Q7CisJCWlmIChwZXJpb2QgPiBNQVhfUEVSSU9EKQorCQkJcGVyaW9kID0gTUFYX1BFUklPRDsKKworCQkvKiBzZXR1cCBwb2ludGVyIHRvIGRhdGEsIHBlcmlvZCwgbGVuZ3RoIGFuZCB2b2x1bWUgKi8KKwkJY3VzdG9tLmF1ZFsyXS5hdWRsYyA9IHNuZF9kYXRhOworCQljdXN0b20uYXVkWzJdLmF1ZGxlbiA9IHNpemVvZihzaW5lX2RhdGEpLzI7CisJCWN1c3RvbS5hdWRbMl0uYXVkcGVyID0gKHVuc2lnbmVkIHNob3J0KXBlcmlvZDsKKwkJY3VzdG9tLmF1ZFsyXS5hdWR2b2wgPSAzMjsgLyogNTAlIG9mIG1heHZvbCAqLworCisJCWlmICh0aWNrcykgeworCQkJc291bmRfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyB0aWNrczsKKwkJCWFkZF90aW1lciggJnNvdW5kX3RpbWVyICk7CisJCX0KKworCQkvKiB0dXJuIG9uIERNQSBmb3IgYXVkaW8gY2hhbm5lbCAyICovCisJCWN1c3RvbS5kbWFjb24gPSBETUFGX1NFVENMUiB8IERNQUZfQVVEMjsKKworCX0gZWxzZQorCQlub3NvdW5kKCAwICk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKworc3RhdGljIHZvaWQgbm9zb3VuZCggdW5zaWduZWQgbG9uZyBpZ25vcmVkICkKK3sKKwkvKiB0dXJuIG9mZiBETUEgZm9yIGF1ZGlvIGNoYW5uZWwgMiAqLworCWN1c3RvbS5kbWFjb24gPSBETUFGX0FVRDI7CisJLyogcmVzdG9yZSBwZXJpb2QgdG8gcHJldmlvdXMgdmFsdWUgYWZ0ZXIgYmVlcGluZyAqLworCWN1c3RvbS5hdWRbMl0uYXVkcGVyID0gYW1pZ2FfYXVkaW9fcGVyaW9kOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2FtaWdhL2NoaXByYW0uYyBiL2FyY2gvbTY4ay9hbWlnYS9jaGlwcmFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU4ZDVmZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9hbWlnYS9jaGlwcmFtLmMKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisqKiAgbGludXgvYW1pZ2EvY2hpcHJhbS5jCisqKgorKiogICAgICBNb2RpZmllZCAwMy1NYXktOTQgYnkgR2VlcnQgVXl0dGVyaG9ldmVuIDxnZWVydEBsaW51eC1tNjhrLm9yZz4KKyoqICAgICAgICAgIC0gNjQtYml0IGFsaWduZWQgYWxsb2NhdGlvbnMgZm9yIGZ1bGwgQUdBIGNvbXBhdGliaWxpdHkKKyoqCisqKglSZXdyaXR0ZW4gMTUvOS8yMDAwIGJ5IEdlZXJ0IHRvIHVzZSByZXNvdXJjZSBtYW5hZ2VtZW50CisqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2FtaWdhaHcuaD4KKwordW5zaWduZWQgbG9uZyBhbWlnYV9jaGlwX3NpemU7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2hpcHJhbV9yZXMgPSB7CisgICAgLm5hbWUgPSAiQ2hpcCBSQU0iLCAuc3RhcnQgPSBDSElQX1BIWVNBRERSCit9Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2hpcGF2YWlsOworCisKK3ZvaWQgX19pbml0IGFtaWdhX2NoaXBfaW5pdCh2b2lkKQoreworICAgIGlmICghQU1JR0FIV19QUkVTRU5UKENISVBfUkFNKSkKKwlyZXR1cm47CisKKyNpZm5kZWYgQ09ORklHX0FQVVNfRkFTVF9FWENFUFQKKyAgICAvKgorICAgICAqICBSZW1vdmUgdGhlIGZpcnN0IDQgcGFnZXMgd2hlcmUgUFBDIGV4Y2VwdGlvbiBoYW5kbGVycyB3aWxsIGJlIGxvY2F0ZWQKKyAgICAgKi8KKyAgICBhbWlnYV9jaGlwX3NpemUgLT0gMHg0MDAwOworI2VuZGlmCisgICAgY2hpcHJhbV9yZXMuZW5kID0gYW1pZ2FfY2hpcF9zaXplLTE7CisgICAgcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZjaGlwcmFtX3Jlcyk7CisKKyAgICBjaGlwYXZhaWwgPSBhbWlnYV9jaGlwX3NpemU7Cit9CisKKwordm9pZCAqYW1pZ2FfY2hpcF9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgc3RydWN0IHJlc291cmNlICpyZXM7CisKKyAgICAvKiByb3VuZCB1cCAqLworICAgIHNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCisjaWZkZWYgREVCVUcKKyAgICBwcmludGsoImFtaWdhX2NoaXBfYWxsb2M6IGFsbG9jYXRlICVsZCBieXRlc1xuIiwgc2l6ZSk7CisjZW5kaWYKKyAgICByZXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKKyAgICBpZiAoIXJlcykKKwlyZXR1cm4gTlVMTDsKKyAgICBtZW1zZXQocmVzLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7CisgICAgcmVzLT5uYW1lID0gbmFtZTsKKworICAgIGlmIChhbGxvY2F0ZV9yZXNvdXJjZSgmY2hpcHJhbV9yZXMsIHJlcywgc2l6ZSwgMCwgVUlOVF9NQVgsIFBBR0VfU0laRSwgTlVMTCwgTlVMTCkgPCAwKSB7CisJa2ZyZWUocmVzKTsKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisgICAgY2hpcGF2YWlsIC09IHNpemU7CisjaWZkZWYgREVCVUcKKyAgICBwcmludGsoImFtaWdhX2NoaXBfYWxsb2M6IHJldHVybmluZyAlbHhcbiIsIHJlcy0+c3RhcnQpOworI2VuZGlmCisgICAgcmV0dXJuICh2b2lkICopWlRXT19WQUREUihyZXMtPnN0YXJ0KTsKK30KKworCisgICAgLyoKKyAgICAgKiAgV2FybmluZzoKKyAgICAgKiAgYW1pZ2FfY2hpcF9hbGxvY19yZXMgaXMgbWVhbnQgb25seSBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdG8gYWxsb2NhdGUKKyAgICAgKiAgQ2hpcCBSQU0gYmVmb3JlIGttYWxsb2MoKSBpcyBmdW5jdGlvbmFsLiBBcyBhIGNvbnNlcXVlbmNlLCB0aG9zZQorICAgICAqICBkcml2ZXJzIG11c3Qgbm90IGZyZWUgdGhhdCBDaGlwIFJBTSBhZnRlcndhcmRzLgorICAgICAqLworCit2b2lkICogX19pbml0IGFtaWdhX2NoaXBfYWxsb2NfcmVzKHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IHJlc291cmNlICpyZXMpCit7CisgICAgdW5zaWduZWQgbG9uZyBzdGFydDsKKworICAgIC8qIHJvdW5kIHVwICovCisgICAgc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CisgICAgLyogZG1lc2cgaW50byBjaGlwbWVtIHByZWZlcnMgbWVtb3J5IGF0IHRoZSBzYWZlIGVuZCAqLworICAgIHN0YXJ0ID0gQ0hJUF9QSFlTQUREUiArIGNoaXBhdmFpbCAtIHNpemU7CisKKyNpZmRlZiBERUJVRworICAgIHByaW50aygiYW1pZ2FfY2hpcF9hbGxvY19yZXM6IGFsbG9jYXRlICVsZCBieXRlc1xuIiwgc2l6ZSk7CisjZW5kaWYKKyAgICBpZiAoYWxsb2NhdGVfcmVzb3VyY2UoJmNoaXByYW1fcmVzLCByZXMsIHNpemUsIHN0YXJ0LCBVSU5UX01BWCwgUEFHRV9TSVpFLCBOVUxMLCBOVUxMKSA8IDApIHsKKwlwcmludGsoImFtaWdhX2NoaXBfYWxsb2NfcmVzOiBmaXJzdCBhbGxvYyBmYWlsZWQhXG4iKTsKKwlpZiAoYWxsb2NhdGVfcmVzb3VyY2UoJmNoaXByYW1fcmVzLCByZXMsIHNpemUsIDAsIFVJTlRfTUFYLCBQQUdFX1NJWkUsIE5VTEwsIE5VTEwpIDwgMCkKKwkgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGNoaXBhdmFpbCAtPSBzaXplOworI2lmZGVmIERFQlVHCisgICAgcHJpbnRrKCJhbWlnYV9jaGlwX2FsbG9jX3JlczogcmV0dXJuaW5nICVseFxuIiwgcmVzLT5zdGFydCk7CisjZW5kaWYKKyAgICByZXR1cm4gKHZvaWQgKilaVFdPX1ZBRERSKHJlcy0+c3RhcnQpOworfQorCit2b2lkIGFtaWdhX2NoaXBfZnJlZSh2b2lkICpwdHIpCit7CisgICAgdW5zaWduZWQgbG9uZyBzdGFydCA9IFpUV09fUEFERFIocHRyKTsKKyAgICBzdHJ1Y3QgcmVzb3VyY2UgKipwLCAqcmVzOworICAgIHVuc2lnbmVkIGxvbmcgc2l6ZTsKKworICAgIGZvciAocCA9ICZjaGlwcmFtX3Jlcy5jaGlsZDsgKHJlcyA9ICpwKTsgcCA9ICZyZXMtPnNpYmxpbmcpIHsKKwlpZiAocmVzLT5zdGFydCAhPSBzdGFydCkKKwkgICAgY29udGludWU7CisJKnAgPSByZXMtPnNpYmxpbmc7CisJc2l6ZSA9IHJlcy0+ZW5kLXN0YXJ0OworI2lmZGVmIERFQlVHCisJcHJpbnRrKCJhbWlnYV9jaGlwX2ZyZWU6IGZyZWUgJWxkIGJ5dGVzIGF0ICVwXG4iLCBzaXplLCBwdHIpOworI2VuZGlmCisJY2hpcGF2YWlsICs9IHNpemU7CisJa2ZyZWUocmVzKTsKKwlyZXR1cm47CisgICAgfQorICAgIHByaW50aygiYW1pZ2FfY2hpcF9mcmVlOiB0cnlpbmcgdG8gZnJlZSBub25leGlzdGVudCByZWdpb24gYXQgJXBcbiIsIHB0cik7Cit9CisKKwordW5zaWduZWQgbG9uZyBhbWlnYV9jaGlwX2F2YWlsKHZvaWQpCit7CisjaWZkZWYgREVCVUcKKwlwcmludGsoImFtaWdhX2NoaXBfYXZhaWwgOiAlbGQgYnl0ZXNcbiIsIGNoaXBhdmFpbCk7CisjZW5kaWYKKwlyZXR1cm4gY2hpcGF2YWlsOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2FtaWdhL2NpYS5jIGIvYXJjaC9tNjhrL2FtaWdhL2NpYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNTU2ODIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvYW1pZ2EvY2lhLmMKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiAgbGludXgvYXJjaC9tNjhrL2FtaWdhL2NpYS5jIC0gQ0lBIHN1cHBvcnQKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2IFJvbWFuIFppcHBlbAorICoKKyAqICBUaGUgY29uY2VwdCBvZiBzb21lIGZ1bmN0aW9ucyBiYXNlcyBvbiB0aGUgb3JpZ2luYWwgQW1pZ2EgT1MgZnVuY3Rpb24KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FtaWdhaHcuaD4KKyNpbmNsdWRlIDxhc20vYW1pZ2FpbnRzLmg+CisKK3N0cnVjdCBjaWFiYXNlIHsKKwl2b2xhdGlsZSBzdHJ1Y3QgQ0lBICpjaWE7CisJdW5zaWduZWQgY2hhciBpY3JfbWFzaywgaWNyX2RhdGE7CisJdW5zaWduZWQgc2hvcnQgaW50X21hc2s7CisJaW50IGhhbmRsZXJfaXJxLCBjaWFfaXJxLCBzZXJ2ZXJfaXJxOworCWNoYXIgKm5hbWU7CisJaXJxX2hhbmRsZXJfdCBpcnFfbGlzdFtDSUFfSVJRU107Cit9IGNpYWFfYmFzZSA9IHsKKwkuY2lhCQk9ICZjaWFhLAorCS5pbnRfbWFzawk9IElGX1BPUlRTLAorCS5oYW5kbGVyX2lycQk9IElSUV9BTUlHQV9BVVRPXzIsCisJLmNpYV9pcnEJPSBJUlFfQU1JR0FfQ0lBQSwKKwkuc2VydmVyX2lycQk9IElSUV9BTUlHQV9QT1JUUywKKwkubmFtZQkJPSAiQ0lBQSBoYW5kbGVyIgorfSwgY2lhYl9iYXNlID0geworCS5jaWEJCT0gJmNpYWIsCisJLmludF9tYXNrCT0gSUZfRVhURVIsCisJLmhhbmRsZXJfaXJxCT0gSVJRX0FNSUdBX0FVVE9fNiwKKwkuY2lhX2lycQk9IElSUV9BTUlHQV9DSUFCLAorCS5zZXJ2ZXJfaXJxCT0gSVJRX0FNSUdBX0VYVEVSLAorCS5uYW1lCQk9ICJDSUFCIGhhbmRsZXIiCit9OworCisvKgorICogIENhdXNlIG9yIGNsZWFyIENJQSBpbnRlcnJ1cHRzLCByZXR1cm4gb2xkIGludGVycnVwdCBzdGF0dXMuCisgKi8KKwordW5zaWduZWQgY2hhciBjaWFfc2V0X2lycShzdHJ1Y3QgY2lhYmFzZSAqYmFzZSwgdW5zaWduZWQgY2hhciBtYXNrKQoreworCXVuc2lnbmVkIGNoYXIgb2xkOworCisJb2xkID0gKGJhc2UtPmljcl9kYXRhIHw9IGJhc2UtPmNpYS0+aWNyKTsKKwlpZiAobWFzayAmIENJQV9JQ1JfU0VUQ0xSKQorCQliYXNlLT5pY3JfZGF0YSB8PSBtYXNrOworCWVsc2UKKwkJYmFzZS0+aWNyX2RhdGEgJj0gfm1hc2s7CisJaWYgKGJhc2UtPmljcl9kYXRhICYgYmFzZS0+aWNyX21hc2spCisJCWN1c3RvbS5pbnRyZXEgPSBJRl9TRVRDTFIgfCBiYXNlLT5pbnRfbWFzazsKKwlyZXR1cm4gb2xkICYgYmFzZS0+aWNyX21hc2s7Cit9CisKKy8qCisgKiAgRW5hYmxlIG9yIGRpc2FibGUgQ0lBIGludGVycnVwdHMsIHJldHVybiBvbGQgaW50ZXJydXB0IG1hc2ssCisgKiAgaW50ZXJydXB0cyB3aWxsIG9ubHkgYmUgZW5hYmxlZCBpZiBhIGhhbmRsZXIgZXhpc3RzCisgKi8KKwordW5zaWduZWQgY2hhciBjaWFfYWJsZV9pcnEoc3RydWN0IGNpYWJhc2UgKmJhc2UsIHVuc2lnbmVkIGNoYXIgbWFzaykKK3sKKwl1bnNpZ25lZCBjaGFyIG9sZCwgdG1wOworCWludCBpOworCisJb2xkID0gYmFzZS0+aWNyX21hc2s7CisJYmFzZS0+aWNyX2RhdGEgfD0gYmFzZS0+Y2lhLT5pY3I7CisJYmFzZS0+Y2lhLT5pY3IgPSBtYXNrOworCWlmIChtYXNrICYgQ0lBX0lDUl9TRVRDTFIpCisJCWJhc2UtPmljcl9tYXNrIHw9IG1hc2s7CisJZWxzZQorCQliYXNlLT5pY3JfbWFzayAmPSB+bWFzazsKKwliYXNlLT5pY3JfbWFzayAmPSBDSUFfSUNSX0FMTDsKKwlmb3IgKGkgPSAwLCB0bXAgPSAxOyBpIDwgQ0lBX0lSUVM7IGkrKywgdG1wIDw8PSAxKSB7CisJCWlmICgodG1wICYgYmFzZS0+aWNyX21hc2spICYmICFiYXNlLT5pcnFfbGlzdFtpXS5oYW5kbGVyKSB7CisJCQliYXNlLT5pY3JfbWFzayAmPSB+dG1wOworCQkJYmFzZS0+Y2lhLT5pY3IgPSB0bXA7CisJCX0KKwl9CisJaWYgKGJhc2UtPmljcl9kYXRhICYgYmFzZS0+aWNyX21hc2spCisJCWN1c3RvbS5pbnRyZXEgPSBJRl9TRVRDTFIgfCBiYXNlLT5pbnRfbWFzazsKKwlyZXR1cm4gb2xkOworfQorCitpbnQgY2lhX3JlcXVlc3RfaXJxKHN0cnVjdCBjaWFiYXNlICpiYXNlLCB1bnNpZ25lZCBpbnQgaXJxLAorICAgICAgICAgICAgICAgICAgICBpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKQoreworCXVuc2lnbmVkIGNoYXIgbWFzazsKKworCWJhc2UtPmlycV9saXN0W2lycV0uaGFuZGxlciA9IGhhbmRsZXI7CisJYmFzZS0+aXJxX2xpc3RbaXJxXS5mbGFncyAgID0gZmxhZ3M7CisJYmFzZS0+aXJxX2xpc3RbaXJxXS5kZXZfaWQgID0gZGV2X2lkOworCWJhc2UtPmlycV9saXN0W2lycV0uZGV2bmFtZSA9IGRldm5hbWU7CisKKwkvKiBlbmFibGUgdGhlIGludGVycnVwdCAqLworCW1hc2sgPSAxIDw8IGlycTsKKwljaWFfc2V0X2lycShiYXNlLCBtYXNrKTsKKwljaWFfYWJsZV9pcnEoYmFzZSwgQ0lBX0lDUl9TRVRDTFIgfCBtYXNrKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjaWFfZnJlZV9pcnEoc3RydWN0IGNpYWJhc2UgKmJhc2UsIHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlpZiAoYmFzZS0+aXJxX2xpc3RbaXJxXS5kZXZfaWQgIT0gZGV2X2lkKQorCQlwcmludGsoIiVzOiByZW1vdmluZyBwcm9iYWJseSB3cm9uZyBJUlEgJWkgZnJvbSAlc1xuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgYmFzZS0+Y2lhX2lycSArIGlycSwKKwkJICAgICAgIGJhc2UtPmlycV9saXN0W2lycV0uZGV2bmFtZSk7CisKKwliYXNlLT5pcnFfbGlzdFtpcnFdLmhhbmRsZXIgPSBOVUxMOworCWJhc2UtPmlycV9saXN0W2lycV0uZmxhZ3MgICA9IDA7CisKKwljaWFfYWJsZV9pcnEoYmFzZSwgMSA8PCBpcnEpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgY2lhX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJc3RydWN0IGNpYWJhc2UgKmJhc2UgPSAoc3RydWN0IGNpYWJhc2UgKilkZXZfaWQ7CisJaW50IG1hY2hfaXJxLCBpOworCXVuc2lnbmVkIGNoYXIgaW50czsKKworCW1hY2hfaXJxID0gYmFzZS0+Y2lhX2lycTsKKwlpcnEgPSBTWVNfSVJRUyArIG1hY2hfaXJxOworCWludHMgPSBjaWFfc2V0X2lycShiYXNlLCBDSUFfSUNSX0FMTCk7CisJY3VzdG9tLmludHJlcSA9IGJhc2UtPmludF9tYXNrOworCWZvciAoaSA9IDA7IGkgPCBDSUFfSVJRUzsgaSsrLCBpcnErKywgbWFjaF9pcnErKykgeworCQlpZiAoaW50cyAmIDEpIHsKKwkJCWtzdGF0X2NwdSgwKS5pcnFzW2lycV0rKzsKKwkJCWJhc2UtPmlycV9saXN0W2ldLmhhbmRsZXIobWFjaF9pcnEsIGJhc2UtPmlycV9saXN0W2ldLmRldl9pZCwgZnApOworCQl9CisJCWludHMgPj49IDE7CisJfQorCWFtaWdhX2RvX2lycV9saXN0KGJhc2UtPnNlcnZlcl9pcnEsIGZwKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3ZvaWQgX19pbml0IGNpYV9pbml0X0lSUShzdHJ1Y3QgY2lhYmFzZSAqYmFzZSkKK3sKKwlpbnQgaTsKKworCS8qIGluaXQgaXNyIGhhbmRsZXJzICovCisJZm9yIChpID0gMDsgaSA8IENJQV9JUlFTOyBpKyspIHsKKwkJYmFzZS0+aXJxX2xpc3RbaV0uaGFuZGxlciA9IE5VTEw7CisJCWJhc2UtPmlycV9saXN0W2ldLmZsYWdzICAgPSAwOworCX0KKworCS8qIGNsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdCBhbmQgdHVybiBvZmYgYWxsIGludGVycnVwdHMgKi8KKwljaWFfc2V0X2lycShiYXNlLCBDSUFfSUNSX0FMTCk7CisJY2lhX2FibGVfaXJxKGJhc2UsIENJQV9JQ1JfQUxMKTsKKworCS8qIGluc3RhbGwgQ0lBIGhhbmRsZXIgKi8KKwlyZXF1ZXN0X2lycShiYXNlLT5oYW5kbGVyX2lycSwgY2lhX2hhbmRsZXIsIDAsIGJhc2UtPm5hbWUsIGJhc2UpOworCisJY3VzdG9tLmludGVuYSA9IElGX1NFVENMUiB8IGJhc2UtPmludF9tYXNrOworfQorCitpbnQgY2lhX2dldF9pcnFfbGlzdChzdHJ1Y3QgY2lhYmFzZSAqYmFzZSwgc3RydWN0IHNlcV9maWxlICpwKQoreworCWludCBpLCBqOworCisJaiA9IGJhc2UtPmNpYV9pcnE7CisJZm9yIChpID0gMDsgaSA8IENJQV9JUlFTOyBpKyspIHsKKwkJc2VxX3ByaW50ZihwLCAiY2lhICAlMmQ6ICUxMGQgIiwgaiArIGksCisJCQkgICAgICAga3N0YXRfY3B1KDApLmlycXNbU1lTX0lSUVMgKyBqICsgaV0pOworCQlzZXFfcHV0cyhwLCAiICAiKTsKKwkJc2VxX3ByaW50ZihwLCAiJXNcbiIsIGJhc2UtPmlycV9saXN0W2ldLmRldm5hbWUpOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYyBiL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Nzc1ZTE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jCkBAIC0wLDAgKzEsMTAwNyBAQAorLyoKKyAqICBsaW51eC9hcmNoL202OGsvYW1pZ2EvY29uZmlnLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTkzIEhhbWlzaCBNYWNkb25hbGQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgQW1pZ2Egc3R1ZmYKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaWZkZWYgQ09ORklHX1pPUlJPCisjaW5jbHVkZSA8bGludXgvem9ycm8uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL2FtaWdhaHcuaD4KKyNpbmNsdWRlIDxhc20vYW1pZ2FpbnRzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9ydGMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCit1bnNpZ25lZCBsb25nIGFtaWdhX21vZGVsOwordW5zaWduZWQgbG9uZyBhbWlnYV9lY2xvY2s7Cit1bnNpZ25lZCBsb25nIGFtaWdhX21hc3RlcmNsb2NrOwordW5zaWduZWQgbG9uZyBhbWlnYV9jb2xvcmNsb2NrOwordW5zaWduZWQgbG9uZyBhbWlnYV9jaGlwc2V0OwordW5zaWduZWQgY2hhciBhbWlnYV92Ymxhbms7Cit1bnNpZ25lZCBjaGFyIGFtaWdhX3BzZnJlcTsKK3N0cnVjdCBhbWlnYV9od19wcmVzZW50IGFtaWdhX2h3X3ByZXNlbnQ7CisKK3N0YXRpYyBjaGFyIHNfYTUwMFtdIF9faW5pdGRhdGEgPSAiQTUwMCI7CitzdGF0aWMgY2hhciBzX2E1MDBwW10gX19pbml0ZGF0YSA9ICJBNTAwKyI7CitzdGF0aWMgY2hhciBzX2E2MDBbXSBfX2luaXRkYXRhID0gIkE2MDAiOworc3RhdGljIGNoYXIgc19hMTAwMFtdIF9faW5pdGRhdGEgPSAiQTEwMDAiOworc3RhdGljIGNoYXIgc19hMTIwMFtdIF9faW5pdGRhdGEgPSAiQTEyMDAiOworc3RhdGljIGNoYXIgc19hMjAwMFtdIF9faW5pdGRhdGEgPSAiQTIwMDAiOworc3RhdGljIGNoYXIgc19hMjUwMFtdIF9faW5pdGRhdGEgPSAiQTI1MDAiOworc3RhdGljIGNoYXIgc19hMzAwMFtdIF9faW5pdGRhdGEgPSAiQTMwMDAiOworc3RhdGljIGNoYXIgc19hMzAwMHRbXSBfX2luaXRkYXRhID0gIkEzMDAwVCI7CitzdGF0aWMgY2hhciBzX2EzMDAwcFtdIF9faW5pdGRhdGEgPSAiQTMwMDArIjsKK3N0YXRpYyBjaGFyIHNfYTQwMDBbXSBfX2luaXRkYXRhID0gIkE0MDAwIjsKK3N0YXRpYyBjaGFyIHNfYTQwMDB0W10gX19pbml0ZGF0YSA9ICJBNDAwMFQiOworc3RhdGljIGNoYXIgc19jZHR2W10gX19pbml0ZGF0YSA9ICJDRFRWIjsKK3N0YXRpYyBjaGFyIHNfY2QzMltdIF9faW5pdGRhdGEgPSAiQ0QzMiI7CitzdGF0aWMgY2hhciBzX2RyYWNvW10gX19pbml0ZGF0YSA9ICJEcmFjbyI7CitzdGF0aWMgY2hhciAqYW1pZ2FfbW9kZWxzW10gX19pbml0ZGF0YSA9IHsKKyAgICBbQU1JXzUwMC1BTUlfNTAwXQkJPSBzX2E1MDAsCisgICAgW0FNSV81MDBQTFVTLUFNSV81MDBdCT0gc19hNTAwcCwKKyAgICBbQU1JXzYwMC1BTUlfNTAwXQkJPSBzX2E2MDAsCisgICAgW0FNSV8xMDAwLUFNSV81MDBdCQk9IHNfYTEwMDAsCisgICAgW0FNSV8xMjAwLUFNSV81MDBdCQk9IHNfYTEyMDAsCisgICAgW0FNSV8yMDAwLUFNSV81MDBdCQk9IHNfYTIwMDAsCisgICAgW0FNSV8yNTAwLUFNSV81MDBdCQk9IHNfYTI1MDAsCisgICAgW0FNSV8zMDAwLUFNSV81MDBdCQk9IHNfYTMwMDAsCisgICAgW0FNSV8zMDAwVC1BTUlfNTAwXQkJPSBzX2EzMDAwdCwKKyAgICBbQU1JXzMwMDBQTFVTLUFNSV81MDBdCT0gc19hMzAwMHAsCisgICAgW0FNSV80MDAwLUFNSV81MDBdCQk9IHNfYTQwMDAsCisgICAgW0FNSV80MDAwVC1BTUlfNTAwXQkJPSBzX2E0MDAwdCwKKyAgICBbQU1JX0NEVFYtQU1JXzUwMF0JCT0gc19jZHR2LAorICAgIFtBTUlfQ0QzMi1BTUlfNTAwXQkJPSBzX2NkMzIsCisgICAgW0FNSV9EUkFDTy1BTUlfNTAwXQkJPSBzX2RyYWNvLAorfTsKKworc3RhdGljIGNoYXIgYW1pZ2FfbW9kZWxfbmFtZVsxM10gPSAiQW1pZ2EgIjsKKworZXh0ZXJuIGNoYXIgbTY4a19kZWJ1Z19kZXZpY2VbXTsKKworc3RhdGljIHZvaWQgYW1pZ2Ffc2NoZWRfaW5pdChpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSk7CisvKiBhbWlnYSBzcGVjaWZpYyBpcnEgZnVuY3Rpb25zICovCitleHRlcm4gdm9pZCBhbWlnYV9pbml0X0lSUSAodm9pZCk7CitleHRlcm4gaXJxcmV0dXJuX3QgKCphbWlnYV9kZWZhdWx0X2hhbmRsZXJbXSkgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiBpbnQgYW1pZ2FfcmVxdWVzdF9pcnEgKHVuc2lnbmVkIGludCBpcnEsCisJCQkgICAgICBpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsCisJCQkgICAgICB2b2lkICpkZXZfaWQpOworZXh0ZXJuIHZvaWQgYW1pZ2FfZnJlZV9pcnEgKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCk7CitleHRlcm4gdm9pZCBhbWlnYV9lbmFibGVfaXJxICh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgYW1pZ2FfZGlzYWJsZV9pcnEgKHVuc2lnbmVkIGludCk7CitzdGF0aWMgdm9pZCBhbWlnYV9nZXRfbW9kZWwoY2hhciAqbW9kZWwpOworc3RhdGljIGludCBhbWlnYV9nZXRfaGFyZHdhcmVfbGlzdChjaGFyICpidWZmZXIpOworZXh0ZXJuIGludCBzaG93X2FtaWdhX2ludGVycnVwdHMgKHN0cnVjdCBzZXFfZmlsZSAqLCB2b2lkICopOworLyogYW1pZ2Egc3BlY2lmaWMgdGltZXIgZnVuY3Rpb25zICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhbWlnYV9nZXR0aW1lb2Zmc2V0ICh2b2lkKTsKK3N0YXRpYyBpbnQgYTMwMDBfaHdjbGsgKGludCwgc3RydWN0IHJ0Y190aW1lICopOworc3RhdGljIGludCBhMjAwMF9od2NsayAoaW50LCBzdHJ1Y3QgcnRjX3RpbWUgKik7CitzdGF0aWMgaW50IGFtaWdhX3NldF9jbG9ja19tbXNzICh1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYW1pZ2FfZ2V0X3NzICh2b2lkKTsKK2V4dGVybiB2b2lkIGFtaWdhX21rc291bmQoIHVuc2lnbmVkIGludCBjb3VudCwgdW5zaWduZWQgaW50IHRpY2tzICk7CisjaWZkZWYgQ09ORklHX0FNSUdBX0ZMT1BQWQorZXh0ZXJuIHZvaWQgYW1pZ2FfZmxvcHB5X3NldHVwKGNoYXIgKiwgaW50ICopOworI2VuZGlmCitzdGF0aWMgdm9pZCBhbWlnYV9yZXNldCAodm9pZCk7CitleHRlcm4gdm9pZCBhbWlnYV9pbml0X3NvdW5kKHZvaWQpOworc3RhdGljIHZvaWQgYW1pZ2Ffc2F2ZWttc2dfaW5pdCh2b2lkKTsKK3N0YXRpYyB2b2lkIGFtaWdhX21lbV9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqYiwKKwkJCQkgICAgdW5zaWduZWQgaW50IGNvdW50KTsKK3ZvaWQgYW1pZ2Ffc2VyaWFsX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzLAorCQkJCXVuc2lnbmVkIGludCBjb3VudCk7CitzdGF0aWMgdm9pZCBhbWlnYV9kZWJ1Z19pbml0KHZvaWQpOworI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKK3N0YXRpYyB2b2lkIGFtaWdhX2hlYXJ0YmVhdChpbnQgb24pOworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSBhbWlnYV9jb25zb2xlX2RyaXZlciA9IHsKKwkubmFtZSA9CQkiZGVidWciLAorCS5mbGFncyA9CUNPTl9QUklOVEJVRkZFUiwKKwkuaW5kZXggPQktMSwKK307CisKKworICAgIC8qCisgICAgICogIE1vdGhlcmJvYXJkIFJlc291cmNlcyBwcmVzZW50IGluIGFsbCBBbWlnYSBtb2RlbHMKKyAgICAgKi8KKworc3RhdGljIHN0cnVjdCB7CisgICAgc3RydWN0IHJlc291cmNlIF9jaWFiLCBfY2lhYSwgX2N1c3RvbSwgX2tpY2tzdGFydDsKK30gbWJfcmVzb3VyY2VzID0geworICAgIC5fY2lhYiA9IHsKKwkubmFtZSA9ICJDSUEgQiIsIC5zdGFydCA9IDB4MDBiZmQwMDAsIC5lbmQgPSAweDAwYmZkZmZmCisgICAgfSwKKyAgICAuX2NpYWEgPSB7CisJLm5hbWUgPSAiQ0lBIEEiLCAuc3RhcnQgPSAweDAwYmZlMDAwLCAuZW5kID0gMHgwMGJmZWZmZgorICAgIH0sCisgICAgLl9jdXN0b20gPSB7CisJLm5hbWUgPSAiQ3VzdG9tIEkvTyIsIC5zdGFydCA9IDB4MDBkZmYwMDAsIC5lbmQgPSAweDAwZGZmZmZmCisgICAgfSwKKyAgICAuX2tpY2tzdGFydCA9IHsKKwkubmFtZSA9ICJLaWNrc3RhcnQgUk9NIiwgLnN0YXJ0ID0gMHgwMGY4MDAwMCwgLmVuZCA9IDB4MDBmZmZmZmYKKyAgICB9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZSA9IHsKKyAgICAuc3RhcnQgPSAweDAwZGMwMDAwLCAuZW5kID0gMHgwMGRjZmZmZgorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSByYW1fcmVzb3VyY2VbTlVNX01FTUlORk9dOworCisKKyAgICAvKgorICAgICAqICBQYXJzZSBhbiBBbWlnYS1zcGVjaWZpYyByZWNvcmQgaW4gdGhlIGJvb3RpbmZvCisgICAgICovCisKK2ludCBhbWlnYV9wYXJzZV9ib290aW5mbyhjb25zdCBzdHJ1Y3QgYmlfcmVjb3JkICpyZWNvcmQpCit7CisgICAgaW50IHVua25vd24gPSAwOworICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmRhdGEgPSByZWNvcmQtPmRhdGE7CisKKyAgICBzd2l0Y2ggKHJlY29yZC0+dGFnKSB7CisJY2FzZSBCSV9BTUlHQV9NT0RFTDoKKwkgICAgYW1pZ2FfbW9kZWwgPSAqZGF0YTsKKwkgICAgYnJlYWs7CisKKwljYXNlIEJJX0FNSUdBX0VDTE9DSzoKKwkgICAgYW1pZ2FfZWNsb2NrID0gKmRhdGE7CisJICAgIGJyZWFrOworCisJY2FzZSBCSV9BTUlHQV9DSElQU0VUOgorCSAgICBhbWlnYV9jaGlwc2V0ID0gKmRhdGE7CisJICAgIGJyZWFrOworCisJY2FzZSBCSV9BTUlHQV9DSElQX1NJWkU6CisJICAgIGFtaWdhX2NoaXBfc2l6ZSA9ICooY29uc3QgaW50ICopZGF0YTsKKwkgICAgYnJlYWs7CisKKwljYXNlIEJJX0FNSUdBX1ZCTEFOSzoKKwkgICAgYW1pZ2FfdmJsYW5rID0gKihjb25zdCB1bnNpZ25lZCBjaGFyICopZGF0YTsKKwkgICAgYnJlYWs7CisKKwljYXNlIEJJX0FNSUdBX1BTRlJFUToKKwkgICAgYW1pZ2FfcHNmcmVxID0gKihjb25zdCB1bnNpZ25lZCBjaGFyICopZGF0YTsKKwkgICAgYnJlYWs7CisKKwljYXNlIEJJX0FNSUdBX0FVVE9DT046CisjaWZkZWYgQ09ORklHX1pPUlJPCisJICAgIGlmICh6b3Jyb19udW1fYXV0b2NvbiA8IFpPUlJPX05VTV9BVVRPKSB7CisJCWNvbnN0IHN0cnVjdCBDb25maWdEZXYgKmNkID0gKHN0cnVjdCBDb25maWdEZXYgKilkYXRhOworCQlzdHJ1Y3Qgem9ycm9fZGV2ICpkZXYgPSAmem9ycm9fYXV0b2Nvblt6b3Jyb19udW1fYXV0b2NvbisrXTsKKwkJZGV2LT5yb20gPSBjZC0+Y2RfUm9tOworCQlkZXYtPnNsb3RhZGRyID0gY2QtPmNkX1Nsb3RBZGRyOworCQlkZXYtPnNsb3RzaXplID0gY2QtPmNkX1Nsb3RTaXplOworCQlkZXYtPnJlc291cmNlLnN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpY2QtPmNkX0JvYXJkQWRkcjsKKwkJZGV2LT5yZXNvdXJjZS5lbmQgPSBkZXYtPnJlc291cmNlLnN0YXJ0K2NkLT5jZF9Cb2FyZFNpemUtMTsKKwkgICAgfSBlbHNlCisJCXByaW50aygiYW1pZ2FfcGFyc2VfYm9vdGluZm86IHRvbyBtYW55IEF1dG9Db25maWcgZGV2aWNlc1xuIik7CisjZW5kaWYgLyogQ09ORklHX1pPUlJPICovCisJICAgIGJyZWFrOworCisJY2FzZSBCSV9BTUlHQV9TRVJQRVI6CisJICAgIC8qIHNlcmlhbCBwb3J0IHBlcmlvZDogaWdub3JlZCBoZXJlICovCisJICAgIGJyZWFrOworCisJZGVmYXVsdDoKKwkgICAgdW5rbm93biA9IDE7CisgICAgfQorICAgIHJldHVybih1bmtub3duKTsKK30KKworICAgIC8qCisgICAgICogIElkZW50aWZ5IGJ1aWx0aW4gaGFyZHdhcmUKKyAgICAgKi8KKworc3RhdGljIHZvaWQgX19pbml0IGFtaWdhX2lkZW50aWZ5KHZvaWQpCit7CisgIC8qIEZpbGwgaW4gc29tZSBkZWZhdWx0IHZhbHVlcywgaWYgbmVjZXNzYXJ5ICovCisgIGlmIChhbWlnYV9lY2xvY2sgPT0gMCkKKyAgICBhbWlnYV9lY2xvY2sgPSA3MDkzNzk7CisKKyAgbWVtc2V0KCZhbWlnYV9od19wcmVzZW50LCAwLCBzaXplb2YoYW1pZ2FfaHdfcHJlc2VudCkpOworCisgIHByaW50aygiQW1pZ2EgaGFyZHdhcmUgZm91bmQ6ICIpOworICBpZiAoYW1pZ2FfbW9kZWwgPj0gQU1JXzUwMCAmJiBhbWlnYV9tb2RlbCA8PSBBTUlfRFJBQ08pIHsKKyAgICBwcmludGsoIlslc10gIiwgYW1pZ2FfbW9kZWxzW2FtaWdhX21vZGVsLUFNSV81MDBdKTsKKyAgICBzdHJjYXQoYW1pZ2FfbW9kZWxfbmFtZSwgYW1pZ2FfbW9kZWxzW2FtaWdhX21vZGVsLUFNSV81MDBdKTsKKyAgfQorCisgIHN3aXRjaChhbWlnYV9tb2RlbCkgeworICBjYXNlIEFNSV9VTktOT1dOOgorICAgIGdvdG8gR2VuZXJpYzsKKworICBjYXNlIEFNSV82MDA6CisgIGNhc2UgQU1JXzEyMDA6CisgICAgQU1JR0FIV19TRVQoQTEyMDBfSURFKTsKKyAgICBBTUlHQUhXX1NFVChQQ01DSUEpOworICBjYXNlIEFNSV81MDA6CisgIGNhc2UgQU1JXzUwMFBMVVM6CisgIGNhc2UgQU1JXzEwMDA6CisgIGNhc2UgQU1JXzIwMDA6CisgIGNhc2UgQU1JXzI1MDA6CisgICAgQU1JR0FIV19TRVQoQTIwMDBfQ0xLKTsJLyogSXMgdGhpcyBjb3JyZWN0IGZvciBhbGwgbW9kZWxzPyAqLworICAgIGdvdG8gR2VuZXJpYzsKKworICBjYXNlIEFNSV8zMDAwOgorICBjYXNlIEFNSV8zMDAwVDoKKyAgICBBTUlHQUhXX1NFVChBTUJFUl9GRik7CisgICAgQU1JR0FIV19TRVQoTUFHSUNfUkVLSUNLKTsKKyAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgY2FzZSBBTUlfMzAwMFBMVVM6CisgICAgQU1JR0FIV19TRVQoQTMwMDBfU0NTSSk7CisgICAgQU1JR0FIV19TRVQoQTMwMDBfQ0xLKTsKKyAgICBBTUlHQUhXX1NFVChaT1JSTzMpOworICAgIGdvdG8gR2VuZXJpYzsKKworICBjYXNlIEFNSV80MDAwVDoKKyAgICBBTUlHQUhXX1NFVChBNDAwMF9TQ1NJKTsKKyAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgY2FzZSBBTUlfNDAwMDoKKyAgICBBTUlHQUhXX1NFVChBNDAwMF9JREUpOworICAgIEFNSUdBSFdfU0VUKEEzMDAwX0NMSyk7CisgICAgQU1JR0FIV19TRVQoWk9SUk8zKTsKKyAgICBnb3RvIEdlbmVyaWM7CisKKyAgY2FzZSBBTUlfQ0RUVjoKKyAgY2FzZSBBTUlfQ0QzMjoKKyAgICBBTUlHQUhXX1NFVChDRF9ST00pOworICAgIEFNSUdBSFdfU0VUKEEyMDAwX0NMSyk7ICAgICAgICAgICAgIC8qIElzIHRoaXMgY29ycmVjdD8gKi8KKyAgICBnb3RvIEdlbmVyaWM7CisKKyAgR2VuZXJpYzoKKyAgICBBTUlHQUhXX1NFVChBTUlfVklERU8pOworICAgIEFNSUdBSFdfU0VUKEFNSV9CTElUVEVSKTsKKyAgICBBTUlHQUhXX1NFVChBTUlfQVVESU8pOworICAgIEFNSUdBSFdfU0VUKEFNSV9GTE9QUFkpOworICAgIEFNSUdBSFdfU0VUKEFNSV9LRVlCT0FSRCk7CisgICAgQU1JR0FIV19TRVQoQU1JX01PVVNFKTsKKyAgICBBTUlHQUhXX1NFVChBTUlfU0VSSUFMKTsKKyAgICBBTUlHQUhXX1NFVChBTUlfUEFSQUxMRUwpOworICAgIEFNSUdBSFdfU0VUKENISVBfUkFNKTsKKyAgICBBTUlHQUhXX1NFVChQQVVMQSk7CisKKyAgICBzd2l0Y2goYW1pZ2FfY2hpcHNldCkgeworICAgIGNhc2UgQ1NfT0NTOgorICAgIGNhc2UgQ1NfRUNTOgorICAgIGNhc2UgQ1NfQUdBOgorICAgICAgc3dpdGNoIChjdXN0b20uZGVuaXNlaWQgJiAweGYpIHsKKyAgICAgIGNhc2UgMHgwYzoKKwlBTUlHQUhXX1NFVChERU5JU0VfSFIpOworCWJyZWFrOworICAgICAgY2FzZSAweDA4OgorCUFNSUdBSFdfU0VUKExJU0EpOworCWJyZWFrOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIEFNSUdBSFdfU0VUKERFTklTRSk7CisgICAgICBicmVhazsKKyAgICB9CisgICAgc3dpdGNoICgoY3VzdG9tLnZwb3NyPj44KSAmIDB4N2YpIHsKKyAgICBjYXNlIDB4MDA6CisgICAgICBBTUlHQUhXX1NFVChBR05VU19QQUwpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAweDEwOgorICAgICAgQU1JR0FIV19TRVQoQUdOVVNfTlRTQyk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDB4MjA6CisgICAgY2FzZSAweDIxOgorICAgICAgQU1JR0FIV19TRVQoQUdOVVNfSFJfUEFMKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMHgzMDoKKyAgICBjYXNlIDB4MzE6CisgICAgICBBTUlHQUhXX1NFVChBR05VU19IUl9OVFNDKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMHgyMjoKKyAgICBjYXNlIDB4MjM6CisgICAgICBBTUlHQUhXX1NFVChBTElDRV9QQUwpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAweDMyOgorICAgIGNhc2UgMHgzMzoKKyAgICAgIEFNSUdBSFdfU0VUKEFMSUNFX05UU0MpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIEFNSUdBSFdfU0VUKFpPUlJPKTsKKyAgICBicmVhazsKKworICBjYXNlIEFNSV9EUkFDTzoKKyAgICBwYW5pYygiTm8gc3VwcG9ydCBmb3IgRHJhY28geWV0Iik7CisKKyAgZGVmYXVsdDoKKyAgICBwYW5pYygiVW5rbm93biBBbWlnYSBNb2RlbCIpOworICB9CisKKyNkZWZpbmUgQU1JR0FIV19BTk5PVU5DRShuYW1lLCBzdHIpCQkJXAorICBpZiAoQU1JR0FIV19QUkVTRU5UKG5hbWUpKQkJCQlcCisgICAgcHJpbnRrKHN0cikKKworICBBTUlHQUhXX0FOTk9VTkNFKEFNSV9WSURFTywgIlZJREVPICIpOworICBBTUlHQUhXX0FOTk9VTkNFKEFNSV9CTElUVEVSLCAiQkxJVFRFUiAiKTsKKyAgQU1JR0FIV19BTk5PVU5DRShBTUJFUl9GRiwgIkFNQkVSX0ZGICIpOworICBBTUlHQUhXX0FOTk9VTkNFKEFNSV9BVURJTywgIkFVRElPICIpOworICBBTUlHQUhXX0FOTk9VTkNFKEFNSV9GTE9QUFksICJGTE9QUFkgIik7CisgIEFNSUdBSFdfQU5OT1VOQ0UoQTMwMDBfU0NTSSwgIkEzMDAwX1NDU0kgIik7CisgIEFNSUdBSFdfQU5OT1VOQ0UoQTQwMDBfU0NTSSwgIkE0MDAwX1NDU0kgIik7CisgIEFNSUdBSFdfQU5OT1VOQ0UoQTEyMDBfSURFLCAiQTEyMDBfSURFICIpOworICBBTUlHQUhXX0FOTk9VTkNFKEE0MDAwX0lERSwgIkE0MDAwX0lERSAiKTsKKyAgQU1JR0FIV19BTk5PVU5DRShDRF9ST00sICJDRF9ST00gIik7CisgIEFNSUdBSFdfQU5OT1VOQ0UoQU1JX0tFWUJPQVJELCAiS0VZQk9BUkQgIik7CisgIEFNSUdBSFdfQU5OT1VOQ0UoQU1JX01PVVNFLCAiTU9VU0UgIik7CisgIEFNSUdBSFdfQU5OT1VOQ0UoQU1JX1NFUklBTCwgIlNFUklBTCAiKTsKKyAgQU1JR0FIV19BTk5PVU5DRShBTUlfUEFSQUxMRUwsICJQQVJBTExFTCAiKTsKKyAgQU1JR0FIV19BTk5PVU5DRShBMjAwMF9DTEssICJBMjAwMF9DTEsgIik7CisgIEFNSUdBSFdfQU5OT1VOQ0UoQTMwMDBfQ0xLLCAiQTMwMDBfQ0xLICIpOworICBBTUlHQUhXX0FOTk9VTkNFKENISVBfUkFNLCAiQ0hJUF9SQU0gIik7CisgIEFNSUdBSFdfQU5OT1VOQ0UoUEFVTEEsICJQQVVMQSAiKTsKKyAgQU1JR0FIV19BTk5PVU5DRShERU5JU0UsICJERU5JU0UgIik7CisgIEFNSUdBSFdfQU5OT1VOQ0UoREVOSVNFX0hSLCAiREVOSVNFX0hSICIpOworICBBTUlHQUhXX0FOTk9VTkNFKExJU0EsICJMSVNBICIpOworICBBTUlHQUhXX0FOTk9VTkNFKEFHTlVTX1BBTCwgIkFHTlVTX1BBTCAiKTsKKyAgQU1JR0FIV19BTk5PVU5DRShBR05VU19OVFNDLCAiQUdOVVNfTlRTQyAiKTsKKyAgQU1JR0FIV19BTk5PVU5DRShBR05VU19IUl9QQUwsICJBR05VU19IUl9QQUwgIik7CisgIEFNSUdBSFdfQU5OT1VOQ0UoQUdOVVNfSFJfTlRTQywgIkFHTlVTX0hSX05UU0MgIik7CisgIEFNSUdBSFdfQU5OT1VOQ0UoQUxJQ0VfUEFMLCAiQUxJQ0VfUEFMICIpOworICBBTUlHQUhXX0FOTk9VTkNFKEFMSUNFX05UU0MsICJBTElDRV9OVFNDICIpOworICBBTUlHQUhXX0FOTk9VTkNFKE1BR0lDX1JFS0lDSywgIk1BR0lDX1JFS0lDSyAiKTsKKyAgQU1JR0FIV19BTk5PVU5DRShQQ01DSUEsICJQQ01DSUEgIik7CisgIGlmIChBTUlHQUhXX1BSRVNFTlQoWk9SUk8pKQorICAgIHByaW50aygiWk9SUk8lcyAiLCBBTUlHQUhXX1BSRVNFTlQoWk9SUk8zKSA/ICIzIiA6ICIiKTsKKyAgcHJpbnRrKCJcbiIpOworCisjdW5kZWYgQU1JR0FIV19BTk5PVU5DRQorfQorCisgICAgLyoKKyAgICAgKiAgU2V0dXAgdGhlIEFtaWdhIGNvbmZpZ3VyYXRpb24gaW5mbworICAgICAqLworCit2b2lkIF9faW5pdCBjb25maWdfYW1pZ2Eodm9pZCkKK3sKKyAgaW50IGk7CisKKyAgYW1pZ2FfZGVidWdfaW5pdCgpOworICBhbWlnYV9pZGVudGlmeSgpOworCisgIC8qIFl1aywgd2UgZG9uJ3QgaGF2ZSBQQ0kgbWVtb3J5ICovCisgIGlvbWVtX3Jlc291cmNlLm5hbWUgPSAiTWVtb3J5IjsKKyAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKyAgICByZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJigoc3RydWN0IHJlc291cmNlICopJm1iX3Jlc291cmNlcylbaV0pOworCisgIG1hY2hfc2NoZWRfaW5pdCAgICAgID0gYW1pZ2Ffc2NoZWRfaW5pdDsKKyAgbWFjaF9pbml0X0lSUSAgICAgICAgPSBhbWlnYV9pbml0X0lSUTsKKyAgbWFjaF9kZWZhdWx0X2hhbmRsZXIgPSAmYW1pZ2FfZGVmYXVsdF9oYW5kbGVyOworICBtYWNoX3JlcXVlc3RfaXJxICAgICA9IGFtaWdhX3JlcXVlc3RfaXJxOworICBtYWNoX2ZyZWVfaXJxICAgICAgICA9IGFtaWdhX2ZyZWVfaXJxOworICBlbmFibGVfaXJxICAgICAgICAgICA9IGFtaWdhX2VuYWJsZV9pcnE7CisgIGRpc2FibGVfaXJxICAgICAgICAgID0gYW1pZ2FfZGlzYWJsZV9pcnE7CisgIG1hY2hfZ2V0X21vZGVsICAgICAgID0gYW1pZ2FfZ2V0X21vZGVsOworICBtYWNoX2dldF9oYXJkd2FyZV9saXN0ID0gYW1pZ2FfZ2V0X2hhcmR3YXJlX2xpc3Q7CisgIG1hY2hfZ2V0X2lycV9saXN0ICAgID0gc2hvd19hbWlnYV9pbnRlcnJ1cHRzOworICBtYWNoX2dldHRpbWVvZmZzZXQgICA9IGFtaWdhX2dldHRpbWVvZmZzZXQ7CisgIGlmIChBTUlHQUhXX1BSRVNFTlQoQTMwMDBfQ0xLKSl7CisgICAgbWFjaF9od2NsayAgICAgICAgID0gYTMwMDBfaHdjbGs7CisgICAgcnRjX3Jlc291cmNlLm5hbWUgPSAiQTMwMDAgUlRDIjsKKyAgICByZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnJ0Y19yZXNvdXJjZSk7CisgIH0KKyAgZWxzZXsgLyogaWYgKEFNSUdBSFdfUFJFU0VOVChBMjAwMF9DTEspKSAqLworICAgIG1hY2hfaHdjbGsgICAgICAgICA9IGEyMDAwX2h3Y2xrOworICAgIHJ0Y19yZXNvdXJjZS5uYW1lID0gIkEyMDAwIFJUQyI7CisgICAgcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZydGNfcmVzb3VyY2UpOworICB9CisKKyAgbWFjaF9tYXhfZG1hX2FkZHJlc3MgPSAweGZmZmZmZmZmOyAvKgorCQkJCSAgICAgICogZGVmYXVsdCBNQVhfRE1BPTB4ZmZmZmZmZmYKKwkJCQkgICAgICAqIG9uIGFsbCBtYWNoaW5lcy4gSWYgd2UgZG9uJ3QKKwkJCQkgICAgICAqIGRvIHNvLCB0aGUgU0NTSSBjb2RlIHdpbGwgbm90CisJCQkJICAgICAgKiBiZSBhYmxlIHRvIGFsbG9jYXRlIGFueSBtZW0KKwkJCQkgICAgICAqIGZvciB0cmFuc2ZlcnMsIHVubGVzcyB3ZSBhcmUKKwkJCQkgICAgICAqIGRlYWxpbmcgd2l0aCBhIFoyIG1lbSBvbmx5CisJCQkJICAgICAgKiBzeXN0ZW0uICAgICAgICAgICAgICAgICAgL0plcworCQkJCSAgICAgICovCisKKyAgbWFjaF9zZXRfY2xvY2tfbW1zcyAgPSBhbWlnYV9zZXRfY2xvY2tfbW1zczsKKyAgbWFjaF9nZXRfc3MgICAgICAgICAgPSBhbWlnYV9nZXRfc3M7CisjaWZkZWYgQ09ORklHX0FNSUdBX0ZMT1BQWQorICBtYWNoX2Zsb3BweV9zZXR1cCAgICA9IGFtaWdhX2Zsb3BweV9zZXR1cDsKKyNlbmRpZgorICBtYWNoX3Jlc2V0ICAgICAgICAgICA9IGFtaWdhX3Jlc2V0OworI2lmZGVmIENPTkZJR19EVU1NWV9DT05TT0xFCisgIGNvbnN3aXRjaHAgICAgICAgICAgID0gJmR1bW15X2NvbjsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0lOUFVUX002OEtfQkVFUCkgfHwgZGVmaW5lZChDT05GSUdfSU5QVVRfTTY4S19CRUVQX01PRFVMRSkKKyAgbWFjaF9iZWVwICAgICAgICAgICAgPSBhbWlnYV9ta3NvdW5kOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCisgIG1hY2hfaGVhcnRiZWF0ID0gYW1pZ2FfaGVhcnRiZWF0OworI2VuZGlmCisKKyAgLyogRmlsbCBpbiB0aGUgY2xvY2sgdmFsdWVzIChiYXNlZCBvbiB0aGUgNzAwIGtIeiBFLUNsb2NrKSAqLworICBhbWlnYV9tYXN0ZXJjbG9jayA9IDQwKmFtaWdhX2VjbG9jazsJLyogMjggTUh6ICovCisgIGFtaWdhX2NvbG9yY2xvY2sgPSA1KmFtaWdhX2VjbG9jazsJLyogMy41IE1IeiAqLworCisgIC8qIGNsZWFyIGFsbCBETUEgYml0cyAqLworICBjdXN0b20uZG1hY29uID0gRE1BRl9BTEw7CisgIC8qIGVuc3VyZSB0aGF0IHRoZSBETUEgbWFzdGVyIGJpdCBpcyBzZXQgKi8KKyAgY3VzdG9tLmRtYWNvbiA9IERNQUZfU0VUQ0xSIHwgRE1BRl9NQVNURVI7CisKKyAgLyogZG9uJ3QgdXNlIFoyIFJBTSBhcyBzeXN0ZW0gbWVtb3J5IG9uIFozIGNhcGFibGUgbWFjaGluZXMgKi8KKyAgaWYgKEFNSUdBSFdfUFJFU0VOVChaT1JSTzMpKSB7CisgICAgaW50IGksIGo7CisgICAgdTMyIGRpc2FibGVkX3oybWVtID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbTY4a19udW1fbWVtb3J5OyBpKyspCisgICAgICBpZiAobTY4a19tZW1vcnlbaV0uYWRkciA8IDE2KjEwMjQqMTAyNCkgeworCWlmIChpID09IDApIHsKKwkgIC8qIGRvbid0IGN1dCBvZmYgdGhlIGJyYW5jaCB3ZSdyZSBzaXR0aW5nIG9uICovCisJICBwcmludGsoIldhcm5pbmc6IGtlcm5lbCBydW5zIGluIFpvcnJvIElJIG1lbW9yeVxuIik7CisJICBjb250aW51ZTsKKwl9CisJZGlzYWJsZWRfejJtZW0gKz0gbTY4a19tZW1vcnlbaV0uc2l6ZTsKKwltNjhrX251bV9tZW1vcnktLTsKKwlmb3IgKGogPSBpOyBqIDwgbTY4a19udW1fbWVtb3J5OyBqKyspCisJICBtNjhrX21lbW9yeVtqXSA9IG02OGtfbWVtb3J5W2orMV07CisJaS0tOworICAgICAgfQorICAgIGlmIChkaXNhYmxlZF96Mm1lbSkKKyAgICAgIHByaW50aygiJWRLIG9mIFpvcnJvIElJIG1lbW9yeSB3aWxsIG5vdCBiZSB1c2VkIGFzIHN5c3RlbSBtZW1vcnlcbiIsCisJICAgICBkaXNhYmxlZF96Mm1lbT4+MTApOworICB9CisKKyAgLyogcmVxdWVzdCBhbGwgUkFNICovCisgIGZvciAoaSA9IDA7IGkgPCBtNjhrX251bV9tZW1vcnk7IGkrKykgeworICAgIHJhbV9yZXNvdXJjZVtpXS5uYW1lID0KKyAgICAgIChtNjhrX21lbW9yeVtpXS5hZGRyID49IDB4MDEwMDAwMDApID8gIjMyLWJpdCBGYXN0IFJBTSIgOgorICAgICAgKG02OGtfbWVtb3J5W2ldLmFkZHIgPCAweDAwYzAwMDAwKSA/ICIxNi1iaXQgRmFzdCBSQU0iIDoKKyAgICAgICIxNi1iaXQgU2xvdyBSQU0iOworICAgIHJhbV9yZXNvdXJjZVtpXS5zdGFydCA9IG02OGtfbWVtb3J5W2ldLmFkZHI7CisgICAgcmFtX3Jlc291cmNlW2ldLmVuZCA9IG02OGtfbWVtb3J5W2ldLmFkZHIrbTY4a19tZW1vcnlbaV0uc2l6ZS0xOworICAgIHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmcmFtX3Jlc291cmNlW2ldKTsKKyAgfQorCisgIC8qIGluaXRpYWxpemUgY2hpcHJhbSBhbGxvY2F0b3IgKi8KKyAgYW1pZ2FfY2hpcF9pbml0ICgpOworCisgIC8qIGRlYnVnZ2luZyB1c2luZyBjaGlwcmFtICovCisgIGlmICghc3RyY21wKCBtNjhrX2RlYnVnX2RldmljZSwgIm1lbSIgKSl7CisJICBpZiAoIUFNSUdBSFdfUFJFU0VOVChDSElQX1JBTSkpCisJCSAgcHJpbnRrKCJXYXJuaW5nOiBubyBjaGlwcmFtIHByZXNlbnQgZm9yIGRlYnVnZ2luZ1xuIik7CisJICBlbHNlIHsKKwkJICBhbWlnYV9zYXZla21zZ19pbml0KCk7CisJCSAgYW1pZ2FfY29uc29sZV9kcml2ZXIud3JpdGUgPSBhbWlnYV9tZW1fY29uc29sZV93cml0ZTsKKwkJICByZWdpc3Rlcl9jb25zb2xlKCZhbWlnYV9jb25zb2xlX2RyaXZlcik7CisJICB9CisgIH0KKworICAvKiBvdXIgYmVsb3ZlZCBiZWVwZXIgKi8KKyAgaWYgKEFNSUdBSFdfUFJFU0VOVChBTUlfQVVESU8pKQorCSAgYW1pZ2FfaW5pdF9zb3VuZCgpOworCisgIC8qCisgICAqIGlmIGl0IGlzIGFuIEEzMDAwLCBzZXQgdGhlIG1hZ2ljIGJpdCB0aGF0IGZvcmNlcworICAgKiBhIGhhcmQgcmVraWNrCisgICAqLworICBpZiAoQU1JR0FIV19QUkVTRU5UKE1BR0lDX1JFS0lDSykpCisJICAqKHVuc2lnbmVkIGNoYXIgKilaVFdPX1ZBRERSKDB4ZGUwMDAyKSB8PSAweDgwOworfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgamlmZnlfdGlja3M7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhbWlnYV9zY2hlZF9pbml0KGlycXJldHVybl90ICgqdGltZXJfcm91dGluZSkoaW50LCB2b2lkICosCisJCQkJCQkJICBzdHJ1Y3QgcHRfcmVncyAqKSkKK3sKKwlzdGF0aWMgc3RydWN0IHJlc291cmNlIHNjaGVkX3JlcyA9IHsKKwkgICAgLm5hbWUgPSAidGltZXIiLCAuc3RhcnQgPSAweDAwYmZkNDAwLCAuZW5kID0gMHgwMGJmZDVmZiwKKwl9OworCWppZmZ5X3RpY2tzID0gKGFtaWdhX2VjbG9jaytIWi8yKS9IWjsKKworCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZtYl9yZXNvdXJjZXMuX2NpYWIsICZzY2hlZF9yZXMpKQorCSAgICBwcmludGsoIkNhbm5vdCBhbGxvY2F0ZSBjaWFiLnRhe2xvLGhpfVxuIik7CisJY2lhYi5jcmEgJj0gMHhDMDsgICAvKiB0dXJuIG9mZiB0aW1lciBBLCBjb250aW51b3VzIG1vZGUsIGZyb20gRWNsayAqLworCWNpYWIudGFsbyA9IGppZmZ5X3RpY2tzICUgMjU2OworCWNpYWIudGFoaSA9IGppZmZ5X3RpY2tzIC8gMjU2OworCisJLyogaW5zdGFsbCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGZvciBDSUFCIFRpbWVyIEEKKwkgKgorCSAqIFBsZWFzZSBkb24ndCBjaGFuZ2UgdGhpcyB0byB1c2UgY2lhYSwgYXMgaXQgaW50ZXJmZXJlcyB3aXRoIHRoZQorCSAqIFNDU0kgY29kZS4gV2UnbGwgaGF2ZSB0byB0YWtlIGEgbG9vayBhdCB0aGlzIGxhdGVyCisJICovCisJcmVxdWVzdF9pcnEoSVJRX0FNSUdBX0NJQUJfVEEsIHRpbWVyX3JvdXRpbmUsIDAsICJ0aW1lciIsIE5VTEwpOworCS8qIHN0YXJ0IHRpbWVyICovCisJY2lhYi5jcmEgfD0gMHgxMTsKK30KKworI2RlZmluZSBUSUNLX1NJWkUgMTAwMDAKKworLyogVGhpcyBpcyBhbHdheXMgZXhlY3V0ZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLiAgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFtaWdhX2dldHRpbWVvZmZzZXQgKHZvaWQpCit7CisJdW5zaWduZWQgc2hvcnQgaGksIGxvLCBoaTI7CisJdW5zaWduZWQgbG9uZyB0aWNrcywgb2Zmc2V0ID0gMDsKKworCS8qIHJlYWQgQ0lBIEIgdGltZXIgQSBjdXJyZW50IHZhbHVlICovCisJaGkgID0gY2lhYi50YWhpOworCWxvICA9IGNpYWIudGFsbzsKKwloaTIgPSBjaWFiLnRhaGk7CisKKwlpZiAoaGkgIT0gaGkyKSB7CisJCWxvID0gY2lhYi50YWxvOworCQloaSA9IGhpMjsKKwl9CisKKwl0aWNrcyA9IGhpIDw8IDggfCBsbzsKKworCWlmICh0aWNrcyA+IGppZmZ5X3RpY2tzIC8gMikKKwkJLyogY2hlY2sgZm9yIHBlbmRpbmcgaW50ZXJydXB0ICovCisJCWlmIChjaWFfc2V0X2lycSgmY2lhYl9iYXNlLCAwKSAmIENJQV9JQ1JfVEEpCisJCQlvZmZzZXQgPSAxMDAwMDsKKworCXRpY2tzID0gamlmZnlfdGlja3MgLSB0aWNrczsKKwl0aWNrcyA9ICgxMDAwMCAqIHRpY2tzKSAvIGppZmZ5X3RpY2tzOworCisJcmV0dXJuIHRpY2tzICsgb2Zmc2V0OworfQorCitzdGF0aWMgaW50IGEzMDAwX2h3Y2xrKGludCBvcCwgc3RydWN0IHJ0Y190aW1lICp0KQoreworCXRvZF8zMDAwLmNudHJsMSA9IFRPRDMwMDBfQ05UUkwxX0hPTEQ7CisKKwlpZiAoIW9wKSB7IC8qIHJlYWQgKi8KKwkJdC0+dG1fc2VjICA9IHRvZF8zMDAwLnNlY29uZDEgKiAxMCArIHRvZF8zMDAwLnNlY29uZDI7CisJCXQtPnRtX21pbiAgPSB0b2RfMzAwMC5taW51dGUxICogMTAgKyB0b2RfMzAwMC5taW51dGUyOworCQl0LT50bV9ob3VyID0gdG9kXzMwMDAuaG91cjEgICAqIDEwICsgdG9kXzMwMDAuaG91cjI7CisJCXQtPnRtX21kYXkgPSB0b2RfMzAwMC5kYXkxICAgICogMTAgKyB0b2RfMzAwMC5kYXkyOworCQl0LT50bV93ZGF5ID0gdG9kXzMwMDAud2Vla2RheTsKKwkJdC0+dG1fbW9uICA9IHRvZF8zMDAwLm1vbnRoMSAgKiAxMCArIHRvZF8zMDAwLm1vbnRoMiAtIDE7CisJCXQtPnRtX3llYXIgPSB0b2RfMzAwMC55ZWFyMSAgICogMTAgKyB0b2RfMzAwMC55ZWFyMjsKKwkJaWYgKHQtPnRtX3llYXIgPD0gNjkpCisJCQl0LT50bV95ZWFyICs9IDEwMDsKKwl9IGVsc2UgeworCQl0b2RfMzAwMC5zZWNvbmQxID0gdC0+dG1fc2VjIC8gMTA7CisJCXRvZF8zMDAwLnNlY29uZDIgPSB0LT50bV9zZWMgJSAxMDsKKwkJdG9kXzMwMDAubWludXRlMSA9IHQtPnRtX21pbiAvIDEwOworCQl0b2RfMzAwMC5taW51dGUyID0gdC0+dG1fbWluICUgMTA7CisJCXRvZF8zMDAwLmhvdXIxICAgPSB0LT50bV9ob3VyIC8gMTA7CisJCXRvZF8zMDAwLmhvdXIyICAgPSB0LT50bV9ob3VyICUgMTA7CisJCXRvZF8zMDAwLmRheTEgICAgPSB0LT50bV9tZGF5IC8gMTA7CisJCXRvZF8zMDAwLmRheTIgICAgPSB0LT50bV9tZGF5ICUgMTA7CisJCWlmICh0LT50bV93ZGF5ICE9IC0xKQorCQkJdG9kXzMwMDAud2Vla2RheSA9IHQtPnRtX3dkYXk7CisJCXRvZF8zMDAwLm1vbnRoMSAgPSAodC0+dG1fbW9uICsgMSkgLyAxMDsKKwkJdG9kXzMwMDAubW9udGgyICA9ICh0LT50bV9tb24gKyAxKSAlIDEwOworCQlpZiAodC0+dG1feWVhciA+PSAxMDApCisJCQl0LT50bV95ZWFyIC09IDEwMDsKKwkJdG9kXzMwMDAueWVhcjEgICA9IHQtPnRtX3llYXIgLyAxMDsKKwkJdG9kXzMwMDAueWVhcjIgICA9IHQtPnRtX3llYXIgJSAxMDsKKwl9CisKKwl0b2RfMzAwMC5jbnRybDEgPSBUT0QzMDAwX0NOVFJMMV9GUkVFOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYTIwMDBfaHdjbGsoaW50IG9wLCBzdHJ1Y3QgcnRjX3RpbWUgKnQpCit7CisJaW50IGNudCA9IDU7CisKKwl0b2RfMjAwMC5jbnRybDEgPSBUT0QyMDAwX0NOVFJMMV9IT0xEOworCisJd2hpbGUgKCh0b2RfMjAwMC5jbnRybDEgJiBUT0QyMDAwX0NOVFJMMV9CVVNZKSAmJiBjbnQtLSkKKwl7CisJICAgICAgICB0b2RfMjAwMC5jbnRybDEgJj0gflRPRDIwMDBfQ05UUkwxX0hPTEQ7CisJICAgICAgICB1ZGVsYXkoNzApOworCSAgICAgICAgdG9kXzIwMDAuY250cmwxIHw9IFRPRDIwMDBfQ05UUkwxX0hPTEQ7CisJfQorCisJaWYgKCFjbnQpCisJCXByaW50ayhLRVJOX0lORk8gImh3Y2xrOiB0aW1lZCBvdXQgd2FpdGluZyBmb3IgUlRDICgweCV4KVxuIiwgdG9kXzIwMDAuY250cmwxKTsKKworCWlmICghb3ApIHsgLyogcmVhZCAqLworCQl0LT50bV9zZWMgID0gdG9kXzIwMDAuc2Vjb25kMSAgICAgKiAxMCArIHRvZF8yMDAwLnNlY29uZDI7CisJCXQtPnRtX21pbiAgPSB0b2RfMjAwMC5taW51dGUxICAgICAqIDEwICsgdG9kXzIwMDAubWludXRlMjsKKwkJdC0+dG1faG91ciA9ICh0b2RfMjAwMC5ob3VyMSAmIDMpICogMTAgKyB0b2RfMjAwMC5ob3VyMjsKKwkJdC0+dG1fbWRheSA9IHRvZF8yMDAwLmRheTEgICAgICAgICogMTAgKyB0b2RfMjAwMC5kYXkyOworCQl0LT50bV93ZGF5ID0gdG9kXzIwMDAud2Vla2RheTsKKwkJdC0+dG1fbW9uICA9IHRvZF8yMDAwLm1vbnRoMSAgICAgICogMTAgKyB0b2RfMjAwMC5tb250aDIgLSAxOworCQl0LT50bV95ZWFyID0gdG9kXzIwMDAueWVhcjEgICAgICAgKiAxMCArIHRvZF8yMDAwLnllYXIyOworCQlpZiAodC0+dG1feWVhciA8PSA2OSkKKwkJCXQtPnRtX3llYXIgKz0gMTAwOworCisJCWlmICghKHRvZF8yMDAwLmNudHJsMyAmIFRPRDIwMDBfQ05UUkwzXzI0SE1PREUpKXsKKwkJCWlmICghKHRvZF8yMDAwLmhvdXIxICYgVE9EMjAwMF9IT1VSMV9QTSkgJiYgdC0+dG1faG91ciA9PSAxMikKKwkJCQl0LT50bV9ob3VyID0gMDsKKwkJCWVsc2UgaWYgKCh0b2RfMjAwMC5ob3VyMSAmIFRPRDIwMDBfSE9VUjFfUE0pICYmIHQtPnRtX2hvdXIgIT0gMTIpCisJCQkJdC0+dG1faG91ciArPSAxMjsKKwkJfQorCX0gZWxzZSB7CisJCXRvZF8yMDAwLnNlY29uZDEgPSB0LT50bV9zZWMgLyAxMDsKKwkJdG9kXzIwMDAuc2Vjb25kMiA9IHQtPnRtX3NlYyAlIDEwOworCQl0b2RfMjAwMC5taW51dGUxID0gdC0+dG1fbWluIC8gMTA7CisJCXRvZF8yMDAwLm1pbnV0ZTIgPSB0LT50bV9taW4gJSAxMDsKKwkJaWYgKHRvZF8yMDAwLmNudHJsMyAmIFRPRDIwMDBfQ05UUkwzXzI0SE1PREUpCisJCQl0b2RfMjAwMC5ob3VyMSA9IHQtPnRtX2hvdXIgLyAxMDsKKwkJZWxzZSBpZiAodC0+dG1faG91ciA+PSAxMikKKwkJCXRvZF8yMDAwLmhvdXIxID0gVE9EMjAwMF9IT1VSMV9QTSArCisJCQkJKHQtPnRtX2hvdXIgLSAxMikgLyAxMDsKKwkJZWxzZQorCQkJdG9kXzIwMDAuaG91cjEgPSB0LT50bV9ob3VyIC8gMTA7CisJCXRvZF8yMDAwLmhvdXIyICAgPSB0LT50bV9ob3VyICUgMTA7CisJCXRvZF8yMDAwLmRheTEgICAgPSB0LT50bV9tZGF5IC8gMTA7CisJCXRvZF8yMDAwLmRheTIgICAgPSB0LT50bV9tZGF5ICUgMTA7CisJCWlmICh0LT50bV93ZGF5ICE9IC0xKQorCQkJdG9kXzIwMDAud2Vla2RheSA9IHQtPnRtX3dkYXk7CisJCXRvZF8yMDAwLm1vbnRoMSAgPSAodC0+dG1fbW9uICsgMSkgLyAxMDsKKwkJdG9kXzIwMDAubW9udGgyICA9ICh0LT50bV9tb24gKyAxKSAlIDEwOworCQlpZiAodC0+dG1feWVhciA+PSAxMDApCisJCQl0LT50bV95ZWFyIC09IDEwMDsKKwkJdG9kXzIwMDAueWVhcjEgICA9IHQtPnRtX3llYXIgLyAxMDsKKwkJdG9kXzIwMDAueWVhcjIgICA9IHQtPnRtX3llYXIgJSAxMDsKKwl9CisKKwl0b2RfMjAwMC5jbnRybDEgJj0gflRPRDIwMDBfQ05UUkwxX0hPTEQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbWlnYV9zZXRfY2xvY2tfbW1zcyAodW5zaWduZWQgbG9uZyBub3d0aW1lKQoreworCXNob3J0IHJlYWxfc2Vjb25kcyA9IG5vd3RpbWUgJSA2MCwgcmVhbF9taW51dGVzID0gKG5vd3RpbWUgLyA2MCkgJSA2MDsKKworCWlmIChBTUlHQUhXX1BSRVNFTlQoQTMwMDBfQ0xLKSkgeworCQl0b2RfMzAwMC5jbnRybDEgPSBUT0QzMDAwX0NOVFJMMV9IT0xEOworCisJCXRvZF8zMDAwLnNlY29uZDEgPSByZWFsX3NlY29uZHMgLyAxMDsKKwkJdG9kXzMwMDAuc2Vjb25kMiA9IHJlYWxfc2Vjb25kcyAlIDEwOworCQl0b2RfMzAwMC5taW51dGUxID0gcmVhbF9taW51dGVzIC8gMTA7CisJCXRvZF8zMDAwLm1pbnV0ZTIgPSByZWFsX21pbnV0ZXMgJSAxMDsKKworCQl0b2RfMzAwMC5jbnRybDEgPSBUT0QzMDAwX0NOVFJMMV9GUkVFOworCX0gZWxzZSAvKiBpZiAoQU1JR0FIV19QUkVTRU5UKEEyMDAwX0NMSykpICovIHsKKwkJaW50IGNudCA9IDU7CisKKwkJdG9kXzIwMDAuY250cmwxIHw9IFRPRDIwMDBfQ05UUkwxX0hPTEQ7CisKKwkJd2hpbGUgKCh0b2RfMjAwMC5jbnRybDEgJiBUT0QyMDAwX0NOVFJMMV9CVVNZKSAmJiBjbnQtLSkKKwkJeworCQkJdG9kXzIwMDAuY250cmwxICY9IH5UT0QyMDAwX0NOVFJMMV9IT0xEOworCQkJdWRlbGF5KDcwKTsKKwkJCXRvZF8yMDAwLmNudHJsMSB8PSBUT0QyMDAwX0NOVFJMMV9IT0xEOworCQl9CisKKwkJaWYgKCFjbnQpCisJCQlwcmludGsoS0VSTl9JTkZPICJzZXRfY2xvY2tfbW1zczogdGltZWQgb3V0IHdhaXRpbmcgZm9yIFJUQyAoMHgleClcbiIsIHRvZF8yMDAwLmNudHJsMSk7CisKKwkJdG9kXzIwMDAuc2Vjb25kMSA9IHJlYWxfc2Vjb25kcyAvIDEwOworCQl0b2RfMjAwMC5zZWNvbmQyID0gcmVhbF9zZWNvbmRzICUgMTA7CisJCXRvZF8yMDAwLm1pbnV0ZTEgPSByZWFsX21pbnV0ZXMgLyAxMDsKKwkJdG9kXzIwMDAubWludXRlMiA9IHJlYWxfbWludXRlcyAlIDEwOworCisJCXRvZF8yMDAwLmNudHJsMSAmPSB+VE9EMjAwMF9DTlRSTDFfSE9MRDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBhbWlnYV9nZXRfc3MoIHZvaWQgKQoreworCXVuc2lnbmVkIGludCBzOworCisJaWYgKEFNSUdBSFdfUFJFU0VOVChBMzAwMF9DTEspKSB7CisJCXRvZF8zMDAwLmNudHJsMSA9IFRPRDMwMDBfQ05UUkwxX0hPTEQ7CisJCXMgPSB0b2RfMzAwMC5zZWNvbmQxICogMTAgKyB0b2RfMzAwMC5zZWNvbmQyOworCQl0b2RfMzAwMC5jbnRybDEgPSBUT0QzMDAwX0NOVFJMMV9GUkVFOworCX0gZWxzZSAvKiBpZiAoQU1JR0FIV19QUkVTRU5UKEEyMDAwX0NMSykpICovIHsKKwkJcyA9IHRvZF8yMDAwLnNlY29uZDEgKiAxMCArIHRvZF8yMDAwLnNlY29uZDI7CisJfQorCXJldHVybiBzOworfQorCitzdGF0aWMgTk9SRVRfVFlQRSB2b2lkIGFtaWdhX3Jlc2V0KCB2b2lkICkKKyAgICBBVFRSSUJfTk9SRVQ7CisKK3N0YXRpYyB2b2lkIGFtaWdhX3Jlc2V0ICh2b2lkKQoreworICB1bnNpZ25lZCBsb25nIGptcF9hZGRyMDQwID0gdmlydF90b19waHlzKCYmam1wX2FkZHJfbGFiZWwwNDApOworICB1bnNpZ25lZCBsb25nIGptcF9hZGRyID0gdmlydF90b19waHlzKCYmam1wX2FkZHJfbGFiZWwpOworCisgIGxvY2FsX2lycV9kaXNhYmxlKCk7CisgIGlmIChDUFVfSVNfMDQwX09SXzA2MCkKKyAgICAvKiBTZXR1cCB0cmFuc3BhcmVudCB0cmFuc2xhdGlvbiByZWdpc3RlcnMgZm9yIG1hcHBpbmcKKyAgICAgKiBvZiAxNiBNQiBrZXJuZWwgc2VnbWVudCBiZWZvcmUgZGlzYWJsaW5nIHRyYW5zbGF0aW9uCisgICAgICovCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18KKyAgICAgICgibW92ZWwgICAgJTAsJS9kMFxuXHQiCisgICAgICAgImFuZGwgICAgICMweGZmMDAwMDAwLCUvZDBcblx0IgorICAgICAgICJvcncgICAgICAjMHhlMDIwLCUvZDBcblx0IiAgIC8qIG1hcCAxNiBNQiwgZW5hYmxlLCBjYWNoZWFibGUgKi8KKyAgICAgICAiLmNoaXAgICAgNjgwNDBcblx0IgorICAgICAgICJtb3ZlYyAgICAlJWQwLCUlaXR0MFxuXHQiCisgICAgICAgIm1vdmVjICAgICUlZDAsJSVkdHQwXG5cdCIKKyAgICAgICAiLmNoaXAgICAgNjhrXG5cdCIKKyAgICAgICAiam1wICAgICAgJTBAXG5cdCIKKyAgICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKyAgICAgICA6ICJhIiAoam1wX2FkZHIwNDApKTsKKyAgZWxzZQorICAgIC8qIGZvciA2ODBbMjNdMCwganVzdCBkaXNhYmxlIHRyYW5zbGF0aW9uIGFuZCBqdW1wIHRvIHRoZSBwaHlzaWNhbAorICAgICAqIGFkZHJlc3Mgb2YgdGhlIGxhYmVsCisgICAgICovCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18KKyAgICAgICgicG1vdmUgICUvdGMsJUBcblx0IgorICAgICAgICJiY2xyICAgIzcsJUBcblx0IgorICAgICAgICJwbW92ZSAgJUAsJS90Y1xuXHQiCisgICAgICAgImptcCAgICAlMEBcblx0IgorICAgICAgIDogLyogbm8gb3V0cHV0cyAqLworICAgICAgIDogImEiIChqbXBfYWRkcikpOworIGptcF9hZGRyX2xhYmVsMDQwOgorICAvKiBkaXNhYmxlIHRyYW5zbGF0aW9uIG9uICcwNDAgbm93ICovCisgIF9fYXNtX18gX192b2xhdGlsZV9fCisgICAgKCJtb3ZlcSAjMCwlL2QwXG5cdCIKKyAgICAgIi5jaGlwIDY4MDQwXG5cdCIKKyAgICAgIm1vdmVjICUlZDAsJSV0Y1xuXHQiCS8qIGRpc2FibGUgTU1VICovCisgICAgICIuY2hpcCA2OGtcblx0IgorICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKyAgICAgOiAvKiBubyBpbnB1dHMgKi8KKyAgICAgOiAiZDAiKTsKKworIGptcF9hZGRyX2xhYmVsOgorICAvKiBwaWNrdXAgcmVzZXQgYWRkcmVzcyBmcm9tIEFtaWdhT1MgUk9NLCByZXNldCBkZXZpY2VzIGFuZCBqdW1wCisgICAqIHRvIHJlc2V0IGFkZHJlc3MKKyAgICovCisgIF9fYXNtX18gX192b2xhdGlsZV9fCisgICAgKCJtb3ZldyAjMHgyNzAwLCUvc3Jcblx0IgorICAgICAibGVhbCAgMHgwMTAwMDAwMCwlL2EwXG5cdCIKKyAgICAgInN1YmwgICUvYTBAKC0weDE0KSwlL2EwXG5cdCIKKyAgICAgIm1vdmVsICUvYTBAKDQpLCUvYTBcblx0IgorICAgICAic3VicWwgIzIsJS9hMFxuXHQiCisgICAgICJicmEgICAxZlxuXHQiCisgICAgIC8qIGFsaWduIG9uIGEgbG9uZ3dvcmQgYm91bmRhcnkgKi8KKyAgICAgX19BTElHTl9TVFIgIlxuIgorICAgICAiMTpcblx0IgorICAgICAicmVzZXRcblx0IgorICAgICAiam1wICAgJS9hMEAiIDogLyogSnVzdCB0aGF0IGdjYyBzY2FucyBpdCBmb3IgJSBlc2NhcGVzICovICk7CisKKyAgZm9yICg7Oyk7CisKK30KKworCisgICAgLyoKKyAgICAgKiAgRGVidWdnaW5nCisgICAgICovCisKKyNkZWZpbmUgU0FWRUtNU0dfTUFYTUVNCQkxMjgqMTAyNAorCisjZGVmaW5lIFNBVkVLTVNHX01BR0lDMQkJMHg1MzQxNTY0NQkvKiAnU0FWRScgKi8KKyNkZWZpbmUgU0FWRUtNU0dfTUFHSUMyCQkweDRCNEQ1MzQ3CS8qICdLTVNHJyAqLworCitzdHJ1Y3Qgc2F2ZWttc2cgeworICAgIHVuc2lnbmVkIGxvbmcgbWFnaWMxOwkJLyogU0FWRUtNU0dfTUFHSUMxICovCisgICAgdW5zaWduZWQgbG9uZyBtYWdpYzI7CQkvKiBTQVZFS01TR19NQUdJQzIgKi8KKyAgICB1bnNpZ25lZCBsb25nIG1hZ2ljcHRyOwkJLyogYWRkcmVzcyBvZiBtYWdpYzEgKi8KKyAgICB1bnNpZ25lZCBsb25nIHNpemU7CisgICAgY2hhciBkYXRhWzBdOworfTsKKworc3RhdGljIHN0cnVjdCBzYXZla21zZyAqc2F2ZWttc2c7CisKK3N0YXRpYyB2b2lkIGFtaWdhX21lbV9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywKKwkJCQkgICAgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIGlmIChzYXZla21zZy0+c2l6ZStjb3VudCA8PSBTQVZFS01TR19NQVhNRU0tc2l6ZW9mKHN0cnVjdCBzYXZla21zZykpIHsKKyAgICAgICAgbWVtY3B5KHNhdmVrbXNnLT5kYXRhK3NhdmVrbXNnLT5zaXplLCBzLCBjb3VudCk7CisgICAgICAgIHNhdmVrbXNnLT5zaXplICs9IGNvdW50OworICAgIH0KK30KKworc3RhdGljIHZvaWQgYW1pZ2Ffc2F2ZWttc2dfaW5pdCh2b2lkKQoreworICAgIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGVidWdfcmVzID0geyAubmFtZSA9ICJEZWJ1ZyIgfTsKKworICAgIHNhdmVrbXNnID0gYW1pZ2FfY2hpcF9hbGxvY19yZXMoU0FWRUtNU0dfTUFYTUVNLCAmZGVidWdfcmVzKTsKKyAgICBzYXZla21zZy0+bWFnaWMxID0gU0FWRUtNU0dfTUFHSUMxOworICAgIHNhdmVrbXNnLT5tYWdpYzIgPSBTQVZFS01TR19NQUdJQzI7CisgICAgc2F2ZWttc2ctPm1hZ2ljcHRyID0gWlRXT19QQUREUihzYXZla21zZyk7CisgICAgc2F2ZWttc2ctPnNpemUgPSAwOworfQorCitzdGF0aWMgdm9pZCBhbWlnYV9zZXJpYWxfcHV0YyhjaGFyIGMpCit7CisgICAgY3VzdG9tLnNlcmRhdCA9ICh1bnNpZ25lZCBjaGFyKWMgfCAweDEwMDsKKyAgICB3aGlsZSAoIShjdXN0b20uc2VyZGF0ciAmIDB4MjAwMCkpCisJOworfQorCit2b2lkIGFtaWdhX3NlcmlhbF9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIHdoaWxlIChjb3VudC0tKSB7CisJaWYgKCpzID09ICdcbicpCisJICAgIGFtaWdhX3NlcmlhbF9wdXRjKCdccicpOworCWFtaWdhX3NlcmlhbF9wdXRjKCpzKyspOworICAgIH0KK30KKworI2lmZGVmIENPTkZJR19TRVJJQUxfQ09OU09MRQordm9pZCBhbWlnYV9zZXJpYWxfcHV0cyhjb25zdCBjaGFyICpzKQoreworICAgIGFtaWdhX3NlcmlhbF9jb25zb2xlX3dyaXRlKE5VTEwsIHMsIHN0cmxlbihzKSk7Cit9CisKK2ludCBhbWlnYV9zZXJpYWxfY29uc29sZV93YWl0X2tleShzdHJ1Y3QgY29uc29sZSAqY28pCit7CisgICAgaW50IGNoOworCisgICAgd2hpbGUgKCEoY3VzdG9tLmludHJlcXIgJiBJRl9SQkYpKQorCWJhcnJpZXIoKTsKKyAgICBjaCA9IGN1c3RvbS5zZXJkYXRyICYgMHhmZjsKKyAgICAvKiBjbGVhciB0aGUgaW50ZXJydXB0LCBzbyB0aGF0IGFub3RoZXIgY2hhcmFjdGVyIGNhbiBiZSByZWFkICovCisgICAgY3VzdG9tLmludHJlcSA9IElGX1JCRjsKKyAgICByZXR1cm4gY2g7Cit9CisKK3ZvaWQgYW1pZ2Ffc2VyaWFsX2dldHMoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpzLCBpbnQgbGVuKQoreworICAgIGludCBjaCwgY250ID0gMDsKKworICAgIHdoaWxlICgxKSB7CisJY2ggPSBhbWlnYV9zZXJpYWxfY29uc29sZV93YWl0X2tleShjbyk7CisKKwkvKiBDaGVjayBmb3IgYmFja3NwYWNlLiAqLworCWlmIChjaCA9PSA4IHx8IGNoID09IDEyNykgeworCSAgICBpZiAoY250ID09IDApIHsKKwkJYW1pZ2Ffc2VyaWFsX3B1dGMoJ1wwMDcnKTsKKwkJY29udGludWU7CisJICAgIH0KKwkgICAgY250LS07CisJICAgIGFtaWdhX3NlcmlhbF9wdXRzKCJcMDEwIFwwMTAiKTsKKwkgICAgY29udGludWU7CisJfQorCisJLyogQ2hlY2sgZm9yIGVudGVyLiAqLworCWlmIChjaCA9PSAxMCB8fCBjaCA9PSAxMykKKwkgICAgYnJlYWs7CisKKwkvKiBTZWUgaWYgbGluZSBpcyB0b28gbG9uZy4gKi8KKwlpZiAoY250ID49IGxlbiArIDEpIHsKKwkgICAgYW1pZ2Ffc2VyaWFsX3B1dGMoNyk7CisJICAgIGNudC0tOworCSAgICBjb250aW51ZTsKKwl9CisKKwkvKiBTdG9yZSBhbmQgZWNobyBjaGFyYWN0ZXIuICovCisJc1tjbnQrK10gPSBjaDsKKwlhbWlnYV9zZXJpYWxfcHV0YyhjaCk7CisgICAgfQorICAgIC8qIFByaW50IGVudGVyLiAqLworICAgIGFtaWdhX3NlcmlhbF9wdXRzKCJcclxuIik7CisgICAgc1tjbnRdID0gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBfX2luaXQgYW1pZ2FfZGVidWdfaW5pdCh2b2lkKQoreworCWlmICghc3RyY21wKCBtNjhrX2RlYnVnX2RldmljZSwgInNlciIgKSkgeworCQkvKiBubyBpbml0aWFsaXphdGlvbiByZXF1aXJlZCAoPykgKi8KKwkJYW1pZ2FfY29uc29sZV9kcml2ZXIud3JpdGUgPSBhbWlnYV9zZXJpYWxfY29uc29sZV93cml0ZTsKKwkJcmVnaXN0ZXJfY29uc29sZSgmYW1pZ2FfY29uc29sZV9kcml2ZXIpOworCX0KK30KKworI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKK3N0YXRpYyB2b2lkIGFtaWdhX2hlYXJ0YmVhdChpbnQgb24pCit7CisgICAgaWYgKG9uKQorCWNpYWEucHJhICY9IH4yOworICAgIGVsc2UKKwljaWFhLnByYSB8PSAyOworfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqICBBbWlnYSBzcGVjaWZpYyBwYXJ0cyBvZiAvcHJvYworICAgICAqLworCitzdGF0aWMgdm9pZCBhbWlnYV9nZXRfbW9kZWwoY2hhciAqbW9kZWwpCit7CisgICAgc3RyY3B5KG1vZGVsLCBhbWlnYV9tb2RlbF9uYW1lKTsKK30KKworCitzdGF0aWMgaW50IGFtaWdhX2dldF9oYXJkd2FyZV9saXN0KGNoYXIgKmJ1ZmZlcikKK3sKKyAgICBpbnQgbGVuID0gMDsKKworICAgIGlmIChBTUlHQUhXX1BSRVNFTlQoQ0hJUF9SQU0pKQorCWxlbiArPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICJDaGlwIFJBTTpcdCVsZEtcbiIsIGFtaWdhX2NoaXBfc2l6ZT4+MTApOworICAgIGxlbiArPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICJQUyBGcmVxOlx0JWRIelxuRUNsb2NrIEZyZXE6XHQlbGRIelxuIiwKKwkJICAgYW1pZ2FfcHNmcmVxLCBhbWlnYV9lY2xvY2spOworICAgIGlmIChBTUlHQUhXX1BSRVNFTlQoQU1JX1ZJREVPKSkgeworCWNoYXIgKnR5cGU7CisJc3dpdGNoKGFtaWdhX2NoaXBzZXQpIHsKKwkgICAgY2FzZSBDU19PQ1M6CisJCXR5cGUgPSAiT0NTIjsKKwkJYnJlYWs7CisJICAgIGNhc2UgQ1NfRUNTOgorCQl0eXBlID0gIkVDUyI7CisJCWJyZWFrOworCSAgICBjYXNlIENTX0FHQToKKwkJdHlwZSA9ICJBR0EiOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJdHlwZSA9ICJPbGQgb3IgVW5rbm93biI7CisJCWJyZWFrOworCX0KKwlsZW4gKz0gc3ByaW50ZihidWZmZXIrbGVuLCAiR3JhcGhpY3M6XHQlc1xuIiwgdHlwZSk7CisgICAgfQorCisjZGVmaW5lIEFNSUdBSFdfQU5OT1VOQ0UobmFtZSwgc3RyKQkJCVwKKyAgICBpZiAoQU1JR0FIV19QUkVTRU5UKG5hbWUpKQkJCQlcCisJbGVuICs9IHNwcmludGYgKGJ1ZmZlcitsZW4sICJcdCVzXG4iLCBzdHIpCisKKyAgICBsZW4gKz0gc3ByaW50ZiAoYnVmZmVyICsgbGVuLCAiRGV0ZWN0ZWQgaGFyZHdhcmU6XG4iKTsKKworICAgIEFNSUdBSFdfQU5OT1VOQ0UoQU1JX1ZJREVPLCAiQW1pZ2EgVmlkZW8iKTsKKyAgICBBTUlHQUhXX0FOTk9VTkNFKEFNSV9CTElUVEVSLCAiQmxpdHRlciIpOworICAgIEFNSUdBSFdfQU5OT1VOQ0UoQU1CRVJfRkYsICJBbWJlciBGbGlja2VyIEZpeGVyIik7CisgICAgQU1JR0FIV19BTk5PVU5DRShBTUlfQVVESU8sICJBbWlnYSBBdWRpbyIpOworICAgIEFNSUdBSFdfQU5OT1VOQ0UoQU1JX0ZMT1BQWSwgIkZsb3BweSBDb250cm9sbGVyIik7CisgICAgQU1JR0FIV19BTk5PVU5DRShBMzAwMF9TQ1NJLCAiU0NTSSBDb250cm9sbGVyIFdEMzNDOTMgKEEzMDAwIHN0eWxlKSIpOworICAgIEFNSUdBSFdfQU5OT1VOQ0UoQTQwMDBfU0NTSSwgIlNDU0kgQ29udHJvbGxlciBOQ1I1M0M3MTAgKEE0MDAwVCBzdHlsZSkiKTsKKyAgICBBTUlHQUhXX0FOTk9VTkNFKEExMjAwX0lERSwgIklERSBJbnRlcmZhY2UgKEExMjAwIHN0eWxlKSIpOworICAgIEFNSUdBSFdfQU5OT1VOQ0UoQTQwMDBfSURFLCAiSURFIEludGVyZmFjZSAoQTQwMDAgc3R5bGUpIik7CisgICAgQU1JR0FIV19BTk5PVU5DRShDRF9ST00sICJJbnRlcm5hbCBDRCBST00gZHJpdmUiKTsKKyAgICBBTUlHQUhXX0FOTk9VTkNFKEFNSV9LRVlCT0FSRCwgIktleWJvYXJkIik7CisgICAgQU1JR0FIV19BTk5PVU5DRShBTUlfTU9VU0UsICJNb3VzZSBQb3J0Iik7CisgICAgQU1JR0FIV19BTk5PVU5DRShBTUlfU0VSSUFMLCAiU2VyaWFsIFBvcnQiKTsKKyAgICBBTUlHQUhXX0FOTk9VTkNFKEFNSV9QQVJBTExFTCwgIlBhcmFsbGVsIFBvcnQiKTsKKyAgICBBTUlHQUhXX0FOTk9VTkNFKEEyMDAwX0NMSywgIkhhcmR3YXJlIENsb2NrIChBMjAwMCBzdHlsZSkiKTsKKyAgICBBTUlHQUhXX0FOTk9VTkNFKEEzMDAwX0NMSywgIkhhcmR3YXJlIENsb2NrIChBMzAwMCBzdHlsZSkiKTsKKyAgICBBTUlHQUhXX0FOTk9VTkNFKENISVBfUkFNLCAiQ2hpcCBSQU0iKTsKKyAgICBBTUlHQUhXX0FOTk9VTkNFKFBBVUxBLCAiUGF1bGEgODM2NCIpOworICAgIEFNSUdBSFdfQU5OT1VOQ0UoREVOSVNFLCAiRGVuaXNlIDgzNjIiKTsKKyAgICBBTUlHQUhXX0FOTk9VTkNFKERFTklTRV9IUiwgIkRlbmlzZSA4MzczIik7CisgICAgQU1JR0FIV19BTk5PVU5DRShMSVNBLCAiTGlzYSA4Mzc1Iik7CisgICAgQU1JR0FIV19BTk5PVU5DRShBR05VU19QQUwsICJOb3JtYWwvRmF0IFBBTCBBZ251cyA4MzY3LzgzNzEiKTsKKyAgICBBTUlHQUhXX0FOTk9VTkNFKEFHTlVTX05UU0MsICJOb3JtYWwvRmF0IE5UU0MgQWdudXMgODM2MS84MzcwIik7CisgICAgQU1JR0FIV19BTk5PVU5DRShBR05VU19IUl9QQUwsICJGYXQgSGlyZXMgUEFMIEFnbnVzIDgzNzIiKTsKKyAgICBBTUlHQUhXX0FOTk9VTkNFKEFHTlVTX0hSX05UU0MsICJGYXQgSGlyZXMgTlRTQyBBZ251cyA4MzcyIik7CisgICAgQU1JR0FIV19BTk5PVU5DRShBTElDRV9QQUwsICJQQUwgQWxpY2UgODM3NCIpOworICAgIEFNSUdBSFdfQU5OT1VOQ0UoQUxJQ0VfTlRTQywgIk5UU0MgQWxpY2UgODM3NCIpOworICAgIEFNSUdBSFdfQU5OT1VOQ0UoTUFHSUNfUkVLSUNLLCAiTWFnaWMgSGFyZCBSZWtpY2siKTsKKyAgICBBTUlHQUhXX0FOTk9VTkNFKFBDTUNJQSwgIlBDTUNJQSBTbG90Iik7CisjaWZkZWYgQ09ORklHX1pPUlJPCisgICAgaWYgKEFNSUdBSFdfUFJFU0VOVChaT1JSTykpCisJbGVuICs9IHNwcmludGYoYnVmZmVyK2xlbiwgIlx0Wm9ycm8gSUklcyBBdXRvQ29uZmlnOiAlZCBFeHBhbnNpb24gIgorCQkJCSAgICJEZXZpY2Ulc1xuIiwKKwkJICAgICAgIEFNSUdBSFdfUFJFU0VOVChaT1JSTzMpID8gIkkiIDogIiIsCisJCSAgICAgICB6b3Jyb19udW1fYXV0b2Nvbiwgem9ycm9fbnVtX2F1dG9jb24gPT0gMSA/ICIiIDogInMiKTsKKyNlbmRpZiAvKiBDT05GSUdfWk9SUk8gKi8KKworI3VuZGVmIEFNSUdBSFdfQU5OT1VOQ0UKKworICAgIHJldHVybihsZW4pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2FtaWdhL3BjbWNpYS5jIGIvYXJjaC9tNjhrL2FtaWdhL3BjbWNpYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNTdjNmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvYW1pZ2EvcGNtY2lhLmMKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisqKiBhc20tbTY4ay9wY21jaWEuYyAtLSBBbWlnYSBMaW51eCBQQ01DSUEgc3VwcG9ydAorKiogICAgICAgICAgICAgICAgICAgICAgbW9zdCBpbmZvcm1hdGlvbiB3YXMgZm91bmQgYnkgZGlzYXNzZW1ibGluZyBjYXJkLnJlc291cmNlCisqKiAgICAgICAgICAgICAgICAgICAgICBJJ20gc3RpbGwgbG9va2luZyBmb3IgYW4gb2ZmaWNpYWwgZG9jICEKKyoqCisqKiBDb3B5cmlnaHQgMTk5NyBieSBBbGFpbiBNYWxlaworKioKKyoqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisqKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorKiogZm9yIG1vcmUgZGV0YWlscy4KKyoqCisqKiBDcmVhdGVkOiAxMi8xMC85NyBieSBBbGFpbiBNYWxlaworKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8YXNtL2FtaWdheWxlLmg+CisjaW5jbHVkZSA8YXNtL2FtaXBjbWNpYS5oPgorCisvKiBnYXlsZSBjb25maWcgYnl0ZSBmb3IgcHJvZ3JhbSB2b2x0YWdlIGFuZCBhY2Nlc3Mgc3BlZWQgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNmZ19ieXRlID0gR0FZTEVfQ0ZHXzBWfEdBWUxFX0NGR18xNTBOUzsKKwordm9pZCBwY21jaWFfcmVzZXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJlc2V0X3N0YXJ0X3RpbWUgPSBqaWZmaWVzOworCXVuc2lnbmVkIGNoYXIgYjsKKworCWdheWxlX3Jlc2V0ID0gMHgwMDsKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgcmVzZXRfc3RhcnRfdGltZSArIDEqSFovMTAwKSk7CisJYiA9IGdheWxlX3Jlc2V0OworfQorCisKKy8qIGNvcHkgYSB0dXBsZSwgaW5jbHVkaW5nIHR1cGxlIGhlYWRlci4gcmV0dXJuIG5iIGJ5dGVzIGNvcGllZCAqLworLyogYmUgY2FyZWZ1bGwgYXMgdGhpcyBtYXkgdHJpZ2dlciBhIEdBWUxFX0lSUV9XUiBpbnRlcnJ1cHQgISAqLworCitpbnQgcGNtY2lhX2NvcHlfdHVwbGUodW5zaWduZWQgY2hhciB0dXBsZV9pZCwgdm9pZCAqdHVwbGUsIGludCBtYXhfbGVuKQoreworCXVuc2lnbmVkIGNoYXIgaWQsICpkZXN0OworCWludCBjbnQsIHBvcywgbGVuOworCisJZGVzdCA9IHR1cGxlOworCXBvcyA9IDA7CisKKwlpZCA9IGdheWxlX2F0dHJpYnV0ZVtwb3NdOworCisJd2hpbGUoKGlkICE9IENJU1RQTF9FTkQpICYmIChwb3MgPCAweDEwMDAwKSkgeworCQlsZW4gPSAoaW50KWdheWxlX2F0dHJpYnV0ZVtwb3MrMl0gKyAyOworCQlpZiAoaWQgPT0gdHVwbGVfaWQpIHsKKwkJCWxlbiA9IChsZW4gPiBtYXhfbGVuKT9tYXhfbGVuOmxlbjsKKwkJCWZvciAoY250ID0gMDsgY250IDwgbGVuOyBjbnQrKykgeworCQkJCSpkZXN0KysgPSBnYXlsZV9hdHRyaWJ1dGVbcG9zKyhjbnQ8PDEpXTsKKwkJCX0KKworCQkJcmV0dXJuIGxlbjsKKwkJfQorCQlwb3MgKz0gbGVuPDwxOworCQlpZCA9IGdheWxlX2F0dHJpYnV0ZVtwb3NdOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIHBjbWNpYV9wcm9ncmFtX3ZvbHRhZ2UoaW50IHZvbHRhZ2UpCit7CisJdW5zaWduZWQgY2hhciB2OworCisJc3dpdGNoICh2b2x0YWdlKSB7CisJY2FzZSBQQ01DSUFfMFY6CisJCXYgPSBHQVlMRV9DRkdfMFY7CisJCWJyZWFrOworCWNhc2UgUENNQ0lBXzVWOgorCQl2ID0gR0FZTEVfQ0ZHXzVWOworCQlicmVhazsKKwljYXNlIFBDTUNJQV8xMlY6CisJCXYgPSBHQVlMRV9DRkdfMTJWOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2ID0gR0FZTEVfQ0ZHXzBWOworCX0KKworCWNmZ19ieXRlID0gKGNmZ19ieXRlICYgMHhmYykgfCB2OworCWdheWxlLmNvbmZpZyA9IGNmZ19ieXRlOworCit9CisKK3ZvaWQgcGNtY2lhX2FjY2Vzc19zcGVlZChpbnQgc3BlZWQpCit7CisJdW5zaWduZWQgY2hhciBzOworCisJaWYgKHNwZWVkIDw9IFBDTUNJQV9TUEVFRF8xMDBOUykKKwkJcyA9IEdBWUxFX0NGR18xMDBOUzsKKwllbHNlIGlmIChzcGVlZCA8PSBQQ01DSUFfU1BFRURfMTUwTlMpCisJCXMgPSBHQVlMRV9DRkdfMTUwTlM7CisJZWxzZSBpZiAoc3BlZWQgPD0gUENNQ0lBX1NQRUVEXzI1ME5TKQorCQlzID0gR0FZTEVfQ0ZHXzI1ME5TOworCWVsc2UKKwkJcyA9IEdBWUxFX0NGR183MjBOUzsKKworCWNmZ19ieXRlID0gKGNmZ19ieXRlICYgMHhmMykgfCBzOworCWdheWxlLmNvbmZpZyA9IGNmZ19ieXRlOworfQorCit2b2lkIHBjbWNpYV93cml0ZV9lbmFibGUodm9pZCkKK3sKKwlnYXlsZS5jYXJkc3RhdHVzID0gR0FZTEVfQ1NfV1J8R0FZTEVfQ1NfREE7Cit9CisKK3ZvaWQgcGNtY2lhX3dyaXRlX2Rpc2FibGUodm9pZCkKK3sKKwlnYXlsZS5jYXJkc3RhdHVzID0gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hcG9sbG8vTWFrZWZpbGUgYi9hcmNoL202OGsvYXBvbGxvL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MjY0ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvYXBvbGxvL01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorIworIyBNYWtlZmlsZSBmb3IgTGludXggYXJjaC9tNjhrL2FtaWdhIHNvdXJjZSBkaXJlY3RvcnkKKyMKKworb2JqLXkJCTo9IGNvbmZpZy5vIGRuX2ludHMubyBkbWEubwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Fwb2xsby9jb25maWcuYyBiL2FyY2gvbTY4ay9hcG9sbG8vY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY0OTI5NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9hcG9sbG8vY29uZmlnLmMKQEAgLTAsMCArMSwzMDUgQEAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3Z0X2tlcm4uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9hcG9sbG9ody5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vcnRjLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKwordV9sb25nIHNpbzAxX3BoeXNhZGRyOwordV9sb25nIHNpbzIzX3BoeXNhZGRyOwordV9sb25nIHJ0Y19waHlzYWRkcjsKK3VfbG9uZyBwaWNhX3BoeXNhZGRyOwordV9sb25nIHBpY2JfcGh5c2FkZHI7Cit1X2xvbmcgY3B1Y3RybF9waHlzYWRkcjsKK3VfbG9uZyB0aW1lcl9waHlzYWRkcjsKK3VfbG9uZyBhcG9sbG9fbW9kZWw7CisKK2V4dGVybiB2b2lkIGRuX3NjaGVkX2luaXQoaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsdm9pZCAqLHN0cnVjdCBwdF9yZWdzICopKTsKK2V4dGVybiB2b2lkIGRuX2luaXRfSVJRKHZvaWQpOworZXh0ZXJuIGludCBkbl9yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKTsKK2V4dGVybiB2b2lkIGRuX2ZyZWVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCk7CitleHRlcm4gdm9pZCBkbl9lbmFibGVfaXJxKHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBkbl9kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIGludCBzaG93X2RuX2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICosIHZvaWQgKik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBkbl9nZXR0aW1lb2Zmc2V0KHZvaWQpOworZXh0ZXJuIGludCBkbl9kdW1teV9od2NsayhpbnQsIHN0cnVjdCBydGNfdGltZSAqKTsKK2V4dGVybiBpbnQgZG5fZHVtbXlfc2V0X2Nsb2NrX21tc3ModW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBkbl9kdW1teV9yZXNldCh2b2lkKTsKK2V4dGVybiB2b2lkIGRuX2R1bW15X3dhaXRidXQodm9pZCk7CitleHRlcm4gc3RydWN0IGZiX2luZm8gKmRuX2ZiX2luaXQobG9uZyAqKTsKK2V4dGVybiB2b2lkIGRuX2R1bW15X2RlYnVnX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBkbl9kdW1teV92aWRlb19zZXR1cChjaGFyICosaW50ICopOworZXh0ZXJuIGlycXJldHVybl90IGRuX3Byb2Nlc3NfaW50KGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpmcCk7CisjaWZkZWYgQ09ORklHX0hFQVJUQkVBVAorc3RhdGljIHZvaWQgZG5faGVhcnRiZWF0KGludCBvbik7CisjZW5kaWYKK3N0YXRpYyBpcnFyZXR1cm5fdCBkbl90aW1lcl9pbnQoaW50IGlycSx2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworc3RhdGljIGlycXJldHVybl90ICgqc2NoZWRfdGltZXJfaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopPU5VTEw7CitzdGF0aWMgdm9pZCBkbl9nZXRfbW9kZWwoY2hhciAqbW9kZWwpOworc3RhdGljIGNvbnN0IGNoYXIgKmFwb2xsb19tb2RlbHNbXSA9IHsKKwlbQVBPTExPX0ROMzAwMC1BUE9MTE9fRE4zMDAwXSA9ICJETjMwMDAgKE90dGVyKSIsCisJW0FQT0xMT19ETjMwMTAtQVBPTExPX0ROMzAwMF0gPSAiRE4zMDEwIChPdHRlcikiLAorCVtBUE9MTE9fRE4zNTAwLUFQT0xMT19ETjMwMDBdID0gIkROMzUwMCAoQ291Z2FyIElJKSIsCisJW0FQT0xMT19ETjQwMDAtQVBPTExPX0ROMzAwMF0gPSAiRE40MDAwIChNaW5rKSIsCisJW0FQT0xMT19ETjQ1MDAtQVBPTExPX0ROMzAwMF0gPSAiRE40NTAwIChSb2FkcnVubmVyKSIKK307CisKK2ludCBhcG9sbG9fcGFyc2VfYm9vdGluZm8oY29uc3Qgc3RydWN0IGJpX3JlY29yZCAqcmVjb3JkKSB7CisKKwlpbnQgdW5rbm93biA9IDA7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqZGF0YSA9IHJlY29yZC0+ZGF0YTsKKworCXN3aXRjaChyZWNvcmQtPnRhZykgeworCQljYXNlIEJJX0FQT0xMT19NT0RFTDoKKwkJCWFwb2xsb19tb2RlbD0qZGF0YTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkgdW5rbm93bj0xOworCX0KKworCXJldHVybiB1bmtub3duOworfQorCit2b2lkIGRuX3NldHVwX21vZGVsKHZvaWQpIHsKKworCisJcHJpbnRrKCJBcG9sbG8gaGFyZHdhcmUgZm91bmQ6ICIpOworCXByaW50aygiWyVzXVxuIiwgYXBvbGxvX21vZGVsc1thcG9sbG9fbW9kZWwgLSBBUE9MTE9fRE4zMDAwXSk7CisKKwlzd2l0Y2goYXBvbGxvX21vZGVsKSB7CisJCWNhc2UgQVBPTExPX1VOS05PV046CisJCQlwYW5pYygiVW5rbm93biBhcG9sbG8gbW9kZWwiKTsKKwkJCWJyZWFrOworCQljYXNlIEFQT0xMT19ETjMwMDA6CisJCWNhc2UgQVBPTExPX0ROMzAxMDoKKwkJCXNpbzAxX3BoeXNhZGRyPVNBVThfU0lPMDFfUEhZU0FERFI7CisJCQlydGNfcGh5c2FkZHI9U0FVOF9SVENfUEhZU0FERFI7CisJCQlwaWNhX3BoeXNhZGRyPVNBVThfUElDQTsKKwkJCXBpY2JfcGh5c2FkZHI9U0FVOF9QSUNCOworCQkJY3B1Y3RybF9waHlzYWRkcj1TQVU4X0NQVUNUUkw7CisJCQl0aW1lcl9waHlzYWRkcj1TQVU4X1RJTUVSOworCQkJYnJlYWs7CisJCWNhc2UgQVBPTExPX0RONDAwMDoKKwkJCXNpbzAxX3BoeXNhZGRyPVNBVTdfU0lPMDFfUEhZU0FERFI7CisJCQlzaW8yM19waHlzYWRkcj1TQVU3X1NJTzIzX1BIWVNBRERSOworCQkJcnRjX3BoeXNhZGRyPVNBVTdfUlRDX1BIWVNBRERSOworCQkJcGljYV9waHlzYWRkcj1TQVU3X1BJQ0E7CisJCQlwaWNiX3BoeXNhZGRyPVNBVTdfUElDQjsKKwkJCWNwdWN0cmxfcGh5c2FkZHI9U0FVN19DUFVDVFJMOworCQkJdGltZXJfcGh5c2FkZHI9U0FVN19USU1FUjsKKwkJCWJyZWFrOworCQljYXNlIEFQT0xMT19ETjQ1MDA6CisJCQlwYW5pYygiQXBvbGxvIG1vZGVsIG5vdCB5ZXQgc3VwcG9ydGVkIik7CisJCQlicmVhazsKKwkJY2FzZSBBUE9MTE9fRE4zNTAwOgorCQkJc2lvMDFfcGh5c2FkZHI9U0FVN19TSU8wMV9QSFlTQUREUjsKKwkJCXNpbzIzX3BoeXNhZGRyPVNBVTdfU0lPMjNfUEhZU0FERFI7CisJCQlydGNfcGh5c2FkZHI9U0FVN19SVENfUEhZU0FERFI7CisJCQlwaWNhX3BoeXNhZGRyPVNBVTdfUElDQTsKKwkJCXBpY2JfcGh5c2FkZHI9U0FVN19QSUNCOworCQkJY3B1Y3RybF9waHlzYWRkcj1TQVU3X0NQVUNUUkw7CisJCQl0aW1lcl9waHlzYWRkcj1TQVU3X1RJTUVSOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwYW5pYygiVW5kZWZpbmVkIGFwb2xsbyBtb2RlbCIpOworCQkJYnJlYWs7CisJfQorCisKK30KKworaW50IGRuX3NlcmlhbF9jb25zb2xlX3dhaXRfa2V5KHN0cnVjdCBjb25zb2xlICpjbykgeworCisJd2hpbGUoIShzaW8wMS5zcmJfY3NyYiAmIDEpKQorCQliYXJyaWVyKCk7CisJcmV0dXJuIHNpbzAxLnJocmJfdGhyYjsKK30KKwordm9pZCBkbl9zZXJpYWxfY29uc29sZV93cml0ZSAoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzdHIsdW5zaWduZWQgaW50IGNvdW50KQoreworICAgd2hpbGUoY291bnQtLSkgeworCWlmICgqc3RyID09ICdcbicpIHsKKwlzaW8wMS5yaHJiX3RocmIgPSAodW5zaWduZWQgY2hhciknXHInOworCXdoaWxlICghKHNpbzAxLnNyYl9jc3JiICYgMHg0KSkKKyAgICAgICAgICAgICAgICA7CisJfQorICAgIHNpbzAxLnJocmJfdGhyYiA9ICh1bnNpZ25lZCBjaGFyKSpzdHIrKzsKKyAgICB3aGlsZSAoIShzaW8wMS5zcmJfY3NyYiAmIDB4NCkpCisgICAgICAgICAgICA7CisgIH0KK30KKwordm9pZCBkbl9zZXJpYWxfcHJpbnQgKGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgICB3aGlsZSAoKnN0cikgeworICAgICAgICBpZiAoKnN0ciA9PSAnXG4nKSB7CisgICAgICAgICAgICBzaW8wMS5yaHJiX3RocmIgPSAodW5zaWduZWQgY2hhciknXHInOworICAgICAgICAgICAgd2hpbGUgKCEoc2lvMDEuc3JiX2NzcmIgJiAweDQpKQorICAgICAgICAgICAgICAgIDsKKyAgICAgICAgfQorICAgICAgICBzaW8wMS5yaHJiX3RocmIgPSAodW5zaWduZWQgY2hhcikqc3RyKys7CisgICAgICAgIHdoaWxlICghKHNpbzAxLnNyYl9jc3JiICYgMHg0KSkKKyAgICAgICAgICAgIDsKKyAgICB9Cit9CisKK3ZvaWQgY29uZmlnX2Fwb2xsbyh2b2lkKSB7CisKKwlpbnQgaTsKKworCWRuX3NldHVwX21vZGVsKCk7CisKKwltYWNoX3NjaGVkX2luaXQ9ZG5fc2NoZWRfaW5pdDsgLyogKi8KKwltYWNoX2luaXRfSVJRPWRuX2luaXRfSVJROworCW1hY2hfZGVmYXVsdF9oYW5kbGVyPU5VTEw7CisJbWFjaF9yZXF1ZXN0X2lycSAgICAgPSBkbl9yZXF1ZXN0X2lycTsKKwltYWNoX2ZyZWVfaXJxICAgICAgICA9IGRuX2ZyZWVfaXJxOworCWVuYWJsZV9pcnEgICAgICA9IGRuX2VuYWJsZV9pcnE7CisJZGlzYWJsZV9pcnEgICAgID0gZG5fZGlzYWJsZV9pcnE7CisJbWFjaF9nZXRfaXJxX2xpc3QgICAgPSBzaG93X2RuX2ludGVycnVwdHM7CisJbWFjaF9nZXR0aW1lb2Zmc2V0ICAgPSBkbl9nZXR0aW1lb2Zmc2V0OworCW1hY2hfbWF4X2RtYV9hZGRyZXNzID0gMHhmZmZmZmZmZjsKKwltYWNoX2h3Y2xrICAgICAgICAgICA9IGRuX2R1bW15X2h3Y2xrOyAvKiAqLworCW1hY2hfc2V0X2Nsb2NrX21tc3MgID0gZG5fZHVtbXlfc2V0X2Nsb2NrX21tc3M7IC8qICovCisJbWFjaF9wcm9jZXNzX2ludCAgICAgPSBkbl9wcm9jZXNzX2ludDsKKwltYWNoX3Jlc2V0CSAgICAgPSBkbl9kdW1teV9yZXNldDsgIC8qICovCisjaWZkZWYgQ09ORklHX0RVTU1ZX0NPTlNPTEUKKyAgICAgICAgY29uc3dpdGNocCAgICAgICAgICAgPSAmZHVtbXlfY29uOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hFQVJUQkVBVAorCW1hY2hfaGVhcnRiZWF0ID0gZG5faGVhcnRiZWF0OworI2VuZGlmCisJbWFjaF9nZXRfbW9kZWwgICAgICAgPSBkbl9nZXRfbW9kZWw7CisKKwljcHVjdHJsPTB4YWEwMDsKKworCS8qIGNsZWFyIERNQSB0cmFuc2xhdGlvbiB0YWJsZSAqLworCWZvcihpPTA7aTwweDQwMDtpKyspCisJCWFkZHJfeGxhdF9tYXBbaV09MDsKKworfQorCitpcnFyZXR1cm5fdCBkbl90aW1lcl9pbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApIHsKKworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgeDsKKworCXNjaGVkX3RpbWVyX2hhbmRsZXIoaXJxLGRldl9pZCxmcCk7CisKKwl4PSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSh0aW1lciszKTsKKwl4PSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSh0aW1lcis1KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwordm9pZCBkbl9zY2hlZF9pbml0KGlycXJldHVybl90ICgqdGltZXJfcm91dGluZSkoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopKSB7CisKKwkvKiBwcm9ncmFtIHRpbWVyIDEgKi8KKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikodGltZXIrMyk9MHgwMTsKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikodGltZXIrMSk9MHg0MDsKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikodGltZXIrNSk9MHgwOTsKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikodGltZXIrNyk9MHhjNDsKKworCS8qIGVuYWJsZSBJUlEgb2YgUElDIEIgKi8KKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikocGljYSsxKSY9KH44KTsKKworI2lmIDAKKwlwcmludGsoIiooMHgxMDgwMykgJTAyeFxuIiwqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikodGltZXIrMHgzKSk7CisJcHJpbnRrKCIqKDB4MTA4MDMpICUwMnhcbiIsKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKHRpbWVyKzB4MykpOworI2VuZGlmCisKKwlzY2hlZF90aW1lcl9oYW5kbGVyPXRpbWVyX3JvdXRpbmU7CisJcmVxdWVzdF9pcnEoMCxkbl90aW1lcl9pbnQsMCxOVUxMLE5VTEwpOworCit9CisKK3Vuc2lnbmVkIGxvbmcgZG5fZ2V0dGltZW9mZnNldCh2b2lkKSB7CisKKwlyZXR1cm4gMHhkZWFkYmVlZjsKKworfQorCitpbnQgZG5fZHVtbXlfaHdjbGsoaW50IG9wLCBzdHJ1Y3QgcnRjX3RpbWUgKnQpIHsKKworCisgIGlmKCFvcCkgeyAvKiByZWFkICovCisgICAgdC0+dG1fc2VjPXJ0Yy0+c2Vjb25kOworICAgIHQtPnRtX21pbj1ydGMtPm1pbnV0ZTsKKyAgICB0LT50bV9ob3VyPXJ0Yy0+aG91cnM7CisgICAgdC0+dG1fbWRheT1ydGMtPmRheV9vZl9tb250aDsKKyAgICB0LT50bV93ZGF5PXJ0Yy0+ZGF5X29mX3dlZWs7CisgICAgdC0+dG1fbW9uPXJ0Yy0+bW9udGg7CisgICAgdC0+dG1feWVhcj1ydGMtPnllYXI7CisgIH0gZWxzZSB7CisgICAgcnRjLT5zZWNvbmQ9dC0+dG1fc2VjOworICAgIHJ0Yy0+bWludXRlPXQtPnRtX21pbjsKKyAgICBydGMtPmhvdXJzPXQtPnRtX2hvdXI7CisgICAgcnRjLT5kYXlfb2ZfbW9udGg9dC0+dG1fbWRheTsKKyAgICBpZih0LT50bV93ZGF5IT0tMSkKKyAgICAgIHJ0Yy0+ZGF5X29mX3dlZWs9dC0+dG1fd2RheTsKKyAgICBydGMtPm1vbnRoPXQtPnRtX21vbjsKKyAgICBydGMtPnllYXI9dC0+dG1feWVhcjsKKyAgfQorCisgIHJldHVybiAwOworCit9CisKK2ludCBkbl9kdW1teV9zZXRfY2xvY2tfbW1zcyh1bnNpZ25lZCBsb25nIG5vd3RpbWUpIHsKKworICBwcmludGsoInNldF9jbG9ja19tbXNzXG4iKTsKKworICByZXR1cm4gMDsKKworfQorCit2b2lkIGRuX2R1bW15X3Jlc2V0KHZvaWQpIHsKKworICBkbl9zZXJpYWxfcHJpbnQoIlRoZSBlbmQgIVxuIik7CisKKyAgZm9yKDs7KTsKKworfQorCit2b2lkIGRuX2R1bW15X3dhaXRidXQodm9pZCkgeworCisgIGRuX3NlcmlhbF9wcmludCgid2FpdGJ1dFxuIik7CisKK30KKworc3RhdGljIHZvaWQgZG5fZ2V0X21vZGVsKGNoYXIgKm1vZGVsKQoreworICAgIHN0cmNweShtb2RlbCwgIkFwb2xsbyAiKTsKKyAgICBpZiAoYXBvbGxvX21vZGVsID49IEFQT0xMT19ETjMwMDAgJiYgYXBvbGxvX21vZGVsIDw9IEFQT0xMT19ETjQ1MDApCisgICAgICAgIHN0cmNhdChtb2RlbCwgYXBvbGxvX21vZGVsc1thcG9sbG9fbW9kZWwgLSBBUE9MTE9fRE4zMDAwXSk7Cit9CisKKyNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCitzdGF0aWMgaW50IGRuX2NwdWN0cmw9MHhmZjAwOworCitzdGF0aWMgdm9pZCBkbl9oZWFydGJlYXQoaW50IG9uKSB7CisKKwlpZihvbikgeworCQlkbl9jcHVjdHJsJj1+MHgxMDA7CisJCWNwdWN0cmw9ZG5fY3B1Y3RybDsKKwl9CisJZWxzZSB7CisJCWRuX2NwdWN0cmwmPX4weDEwMDsKKwkJZG5fY3B1Y3RybHw9MHgxMDA7CisJCWNwdWN0cmw9ZG5fY3B1Y3RybDsKKwl9Cit9CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Fwb2xsby9kbWEuYyBiL2FyY2gvbTY4ay9hcG9sbG8vZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVkOGJlMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9hcG9sbG8vZG1hLmMKQEAgLTAsMCArMSw1MCBAQAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9hcG9sbG9kbWEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworLyogbm90ZSBvbmx5IHdvcmtzIGZvciAxNiBCaXQgMSBwYWdlIERNQSdzICovCisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBuZXh0X2ZyZWVfeGxhdF9lbnRyeT0wOworCit1bnNpZ25lZCBzaG9ydCBkbWFfbWFwX3BhZ2UodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsaW50IGNvdW50LGludCB0eXBlKSB7CisKKwl1bnNpZ25lZCBsb25nIHBhZ2VfYWxpZ25lZF9hZGRyPXBoeXNfYWRkciAmICh+KCgxPDwxMiktMSkpOworCXVuc2lnbmVkIHNob3J0IHN0YXJ0X21hcF9hZGRyPXBhZ2VfYWxpZ25lZF9hZGRyID4+IDEwOworCXVuc2lnbmVkIHNob3J0IGZyZWVfeGxhdF9lbnRyeSwgKnhsYXRfbWFwX2VudHJ5OworCWludCBpOworCisJZnJlZV94bGF0X2VudHJ5PW5leHRfZnJlZV94bGF0X2VudHJ5OworCWZvcihpPTAseGxhdF9tYXBfZW50cnk9YWRkcl94bGF0X21hcCsoZnJlZV94bGF0X2VudHJ5PDwyKTtpPDg7aSsrLHhsYXRfbWFwX2VudHJ5KyspIHsKKyNpZiAwCisJCXByaW50aygicGh5c19hZGRyOiAleCwgcGFnZV9hbGlnbmVkX2FkZHI6ICV4LCBzdGFydF9tYXBfYWRkcjogJXhcbiIscGh5c19hZGRyLHBhZ2VfYWxpZ25lZF9hZGRyLHN0YXJ0X21hcF9hZGRyK2kpOworI2VuZGlmCisJCW91dF9iZTE2KHhsYXRfbWFwX2VudHJ5LCBzdGFydF9tYXBfYWRkcitpKTsKKwl9CisKKwluZXh0X2ZyZWVfeGxhdF9lbnRyeSs9MjsKKwlpZihuZXh0X2ZyZWVfeGxhdF9lbnRyeT4xMjUpCisJCW5leHRfZnJlZV94bGF0X2VudHJ5PTA7CisKKyNpZiAwCisJcHJpbnRrKCJuZXh0X2ZyZWVfeGxhdF9lbnRyeTogJWRcbiIsbmV4dF9mcmVlX3hsYXRfZW50cnkpOworI2VuZGlmCisKKwlyZXR1cm4gZnJlZV94bGF0X2VudHJ5PDwxMDsKK30KKwordm9pZCBkbWFfdW5tYXBfcGFnZSh1bnNpZ25lZCBzaG9ydCBkbWFfYWRkcikgeworCisJcmV0dXJuIDsKKworfQorCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXBvbGxvL2RuX2ludHMuYyBiL2FyY2gvbTY4ay9hcG9sbG8vZG5faW50cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMTI1OTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvYXBvbGxvL2RuX2ludHMuYwpAQCAtMCwwICsxLDEyNSBAQAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9hcG9sbG9ody5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorCitzdGF0aWMgaXJxX2hhbmRsZXJfdCBkbl9pcnFzWzE2XTsKKworaXJxcmV0dXJuX3QgZG5fcHJvY2Vzc19pbnQoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworICBpcnFyZXR1cm5fdCByZXMgPSBJUlFfTk9ORTsKKworICBpZihkbl9pcnFzW2lycS0xNjBdLmhhbmRsZXIpIHsKKyAgICByZXMgPSBkbl9pcnFzW2lycS0xNjBdLmhhbmRsZXIoaXJxLGRuX2lycXNbaXJxLTE2MF0uZGV2X2lkLGZwKTsKKyAgfSBlbHNlIHsKKyAgICBwcmludGsoInNwdXJpb3VzIGlycSAlZCBvY2N1cnJlZFxuIixpcnEpOworICB9CisKKyAgKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKHBpY2EpPTB4MjA7CisgICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShwaWNiKT0weDIwOworCisgIHJldHVybiByZXM7Cit9CisKK3ZvaWQgZG5faW5pdF9JUlEodm9pZCkgeworCisgIGludCBpOworCisgIGZvcihpPTA7aTwxNjtpKyspIHsKKyAgICBkbl9pcnFzW2ldLmhhbmRsZXI9TlVMTDsKKyAgICBkbl9pcnFzW2ldLmZsYWdzPUlSUV9GTEdfU1REOworICAgIGRuX2lycXNbaV0uZGV2X2lkPU5VTEw7CisgICAgZG5faXJxc1tpXS5kZXZuYW1lPU5VTEw7CisgIH0KKworfQorCitpbnQgZG5fcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGlycSwgaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkgeworCisgIGlmKChpcnE8MCkgfHwgKGlycT4xNSkpIHsKKyAgICBwcmludGsoIlRyeWluZyB0byByZXF1ZXN0IGludmFsaWQgSVJRXG4iKTsKKyAgICByZXR1cm4gLUVOWElPOworICB9CisKKyAgaWYoIWRuX2lycXNbaXJxXS5oYW5kbGVyKSB7CisgICAgZG5faXJxc1tpcnFdLmhhbmRsZXI9aGFuZGxlcjsKKyAgICBkbl9pcnFzW2lycV0uZmxhZ3M9SVJRX0ZMR19TVEQ7CisgICAgZG5faXJxc1tpcnFdLmRldl9pZD1kZXZfaWQ7CisgICAgZG5faXJxc1tpcnFdLmRldm5hbWU9ZGV2bmFtZTsKKyAgICBpZihpcnE8OCkKKyAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShwaWNhKzEpJj1+KDE8PGlycSk7CisgICAgZWxzZQorICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKHBpY2IrMSkmPX4oMTw8KGlycS04KSk7CisKKyAgICByZXR1cm4gMDsKKyAgfQorICBlbHNlIHsKKyAgICBwcmludGsoIlRyeWluZyB0byByZXF1ZXN0IGFscmVhZHkgYXNzaWduZWQgaXJxICVkXG4iLGlycSk7CisgICAgcmV0dXJuIC1FTlhJTzsKKyAgfQorCit9CisKK3ZvaWQgZG5fZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKSB7CisKKyAgaWYoKGlycTwwKSB8fCAoaXJxPjE1KSkgeworICAgIHByaW50aygiVHJ5aW5nIHRvIGZyZWUgaW52YWxpZCBJUlFcbiIpOworICAgIHJldHVybiA7CisgIH0KKworICBpZihpcnE8OCkKKyAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikocGljYSsxKXw9KDE8PGlycSk7CisgIGVsc2UKKyAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikocGljYisxKXw9KDE8PChpcnEtOCkpOworCisgIGRuX2lycXNbaXJxXS5oYW5kbGVyPU5VTEw7CisgIGRuX2lycXNbaXJxXS5mbGFncz1JUlFfRkxHX1NURDsKKyAgZG5faXJxc1tpcnFdLmRldl9pZD1OVUxMOworICBkbl9pcnFzW2lycV0uZGV2bmFtZT1OVUxMOworCisgIHJldHVybiA7CisKK30KKwordm9pZCBkbl9lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpIHsKKworICBwcmludGsoImRuIGVuYWJsZSBpcnFcbiIpOworCit9CisKK3ZvaWQgZG5fZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkgeworCisgIHByaW50aygiZG4gZGlzYWJsZSBpcnFcbiIpOworCit9CisKK2ludCBzaG93X2RuX2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KSB7CisKKyAgcHJpbnRrKCJkbiBnZXQgaXJxIGxpc3RcbiIpOworCisgIHJldHVybiAwOworCit9CisKK3N0cnVjdCBmYl9pbmZvICpkbl9kdW1teV9mYl9pbml0KGxvbmcgKm1lbV9zdGFydCkgeworCisgIHByaW50aygiZmIgaW5pdFxuIik7CisKKyAgcmV0dXJuIE5VTEw7CisKK30KKwordm9pZCBkbl9kdW1teV92aWRlb19zZXR1cChjaGFyICpvcHRpb25zLGludCAqaW50cykgeworCisgIHByaW50aygibm8gdmlkZW8geWV0XG4iKTsKKworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL01ha2VmaWxlIGIvYXJjaC9tNjhrL2F0YXJpL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYjYyMzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvYXRhcmkvTWFrZWZpbGUKQEAgLTAsMCArMSwxMCBAQAorIworIyBNYWtlZmlsZSBmb3IgTGludXggYXJjaC9tNjhrL2F0YXJpIHNvdXJjZSBkaXJlY3RvcnkKKyMKKworb2JqLXkJCTo9IGNvbmZpZy5vIHRpbWUubyBkZWJ1Zy5vIGF0YWludHMubyBzdGRtYS5vIFwKKwkJCWF0YXNvdW5kLm8gc3RyYW0ubyBhdGFyaV9rc3ltcy5vCisKK2lmZXEgKCQoQ09ORklHX1BDSSkseSkKK29iai0kKENPTkZJR19IQURFUykJKz0gaGFkZXMtcGNpLm8KK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvYXRhaW50cy5jIGIvYXJjaC9tNjhrL2F0YXJpL2F0YWludHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzZmNDc5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2F0YXJpL2F0YWludHMuYwpAQCAtMCwwICsxLDY0OCBAQAorLyoKKyAqIGFyY2gvbTY4ay9hdGFyaS9hdGFpbnRzLmMgLS0gQXRhcmkgTGludXggaW50ZXJydXB0IGhhbmRsaW5nIGNvZGUKKyAqCisgKiA1LzIvOTQgUm9tYW4gSG9kZWs6CisgKiAgQWRkZWQgc3VwcG9ydCBmb3IgVFQgaW50ZXJydXB0czsgc2V0dXAgZm9yIFRUIFNDVSAobWF5IHNvbWVvbmUgaGFzCisgKiAgdHdpZGRsZWQgdGhlcmUgYW5kIHdlIHdvbid0IGdldCB0aGUgcmlnaHQgaW50ZXJydXB0cyA6LSgpCisgKgorICogIE1ham9yIGNoYW5nZTogVGhlIGRldmljZS1pbmRlcGVuZGVudCBjb2RlIGluIG02OGsvaW50cy5jIGRpZG4ndCBrbm93CisgKiAgYWJvdXQgbm9uLWF1dG92ZWMgaW50cyB5ZXQuIEl0IGhhcmRjb2RlZCB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIGludHMgdG8KKyAqICA3IChJUlExLi4uSVJRNykuIEJ1dCB0aGUgQXRhcmkgaGFzIGxvdHMgb2Ygbm9uLWF1dG92ZWMgaW50cyEgSSBtYWRlIHRoZQorICogIG51bWJlciBvZiBwb3NzaWJsZSBpbnRzIGEgY29uc3RhbnQgZGVmaW5lZCBpbiBpbnRlcnJ1cHQuaCwgd2hpY2ggaXMKKyAqICA0NyBmb3IgdGhlIEF0YXJpLiBTbyB3ZSBjYW4gY2FsbCByZXF1ZXN0X2lycSgpIGZvciBhbGwgQXRhcmkgaW50ZXJydXB0cworICogIGp1c3QgdGhlIG5vcm1hbCB3YXkuIEFkZGl0aW9uYWxseSwgYWxsIHZlY3RvcnMgPj0gNDggYXJlIGluaXRpYWxpemVkIHRvCisgKiAgY2FsbCB0cmFwKCkgaW5zdGVhZCBvZiBpbnRoYW5kbGVyKCkuIFRoaXMgbXVzdCBiZSBjaGFuZ2VkIGhlcmUsIHRvby4KKyAqCisgKiAxOTk1LTA3LTE2IExhcnMgQnJpbmtob2ZmIDxmOTNsYWJyQGRkLmNoYWxtZXJzLnNlPjoKKyAqICBDb3JyZWN0ZWQgYSBidWcgaW4gYXRhcmlfYWRkX2lzcigpIHdoaWNoIHJlamVjdGVkIGFsbCBTQ0MKKyAqICBpbnRlcnJ1cHQgc291cmNlcyBpZiB0aGVyZSB3ZXJlIG5vIFRUIE1GUCEKKyAqCisgKiAxMi8xMy85NTogTmV3IGludGVyZmFjZSBmdW5jdGlvbnMgYXRhcmlfbGV2ZWxfdHJpZ2dlcmVkX2ludCgpIGFuZAorICogIGF0YXJpX3JlZ2lzdGVyX3ZtZV9pbnQoKSBhcyBzdXBwb3J0IGZvciBsZXZlbCB0cmlnZ2VyZWQgVk1FIGludGVycnVwdHMuCisgKgorICogMDIvMTIvOTY6IChSb21hbikKKyAqICBUb3RhbCByZXdyaXRlIG9mIEF0YXJpIGludGVycnVwdCBoYW5kbGluZywgZm9yIG5ldyBzY2hlbWUgc2VlIGNvbW1lbnRzCisgKiAgYmVsb3cuCisgKgorICogMTk5Ni0wOS0wMyBsYXJzIGJyaW5raG9mZiA8ZjkzbGFickBkZC5jaGFsbWVycy5zZT46CisgKiAgQWRkZWQgbmV3IGZ1bmN0aW9uIGF0YXJpX3VucmVnaXN0ZXJfdm1lX2ludCgpLCBhbmQKKyAqICBtb2RpZmllZCBhdGFyaV9yZWdpc3Rlcl92bWVfaW50KCkgYXMgd2VsbCBhcyBJU19WQUxJRF9JTlROTygpCisgKiAgdG8gd29yayB3aXRoIGl0LgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKworI2luY2x1ZGUgPGFzbS9hdGFyaWh3Lmg+CisjaW5jbHVkZSA8YXNtL2F0YXJpaW50cy5oPgorI2luY2x1ZGUgPGFzbS9hdGFyaV9zdGRtYS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vZW50cnkuaD4KKworCisvKgorICogQXRhcmkgaW50ZXJydXB0IGhhbmRsaW5nIHNjaGVtZToKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogQWxsIGludGVycnVwdCBzb3VyY2UgaGF2ZSBhbiBpbnRlcm5hbCBudW1iZXIgKGRlZmluZWQgaW4KKyAqIDxhc20vYXRhcmlpbnRzLmg+KTogQXV0b3ZlY3RvciBpbnRlcnJ1cHRzIGFyZSAxLi43LCB0aGVuIGZvbGxvdyBTVC1NRlAsCisgKiBUVC1NRlAsIFNDQywgYW5kIGZpbmFsbHkgVk1FIGludGVycnVwdHMuIFZlY3RvciBudW1iZXJzIGZvciB0aGUgbGF0dGVyIGNhbgorICogYmUgYWxsb2NhdGVkIGJ5IGF0YXJpX3JlZ2lzdGVyX3ZtZV9pbnQoKS4KKyAqCisgKiBFYWNoIGludGVycnVwdCBjYW4gYmUgb2YgdGhyZWUgdHlwZXM6CisgKgorICogIC0gU0xPVzogVGhlIGhhbmRsZXIgcnVucyB3aXRoIGFsbCBpbnRlcnJ1cHRzIGVuYWJsZWQsIGV4Y2VwdCB0aGUgb25lIGl0CisgKiAgICB3YXMgY2FsbGVkIGJ5ICh0byBhdm9pZCByZWVudGVyaW5nKS4gVGhpcyBzaG91bGQgYmUgdGhlIHVzdWFsIG1ldGhvZC4KKyAqICAgIEJ1dCBpdCBpcyBjdXJyZW50bHkgcG9zc2libGUgb25seSBmb3IgTUZQIGludHMsIHNpbmNlIG9ubHkgdGhlIE1GUAorICogICAgb2ZmZXJzIGFuIGVhc3kgd2F5IHRvIG1hc2sgaW50ZXJydXB0cy4KKyAqCisgKiAgLSBGQVNUOiBUaGUgaGFuZGxlciBydW5zIHdpdGggYWxsIGludGVycnVwdHMgZGlzYWJsZWQuIFRoaXMgc2hvdWxkIGJlIHVzZWQKKyAqICAgIG9ubHkgZm9yIHJlYWxseSBmYXN0IGhhbmRsZXJzLCB0aGF0IGp1c3QgZG8gYWN0aW9ucyBpbW1lZGlhdGVseQorICogICAgbmVjZXNzYXJ5LCBhbmQgbGV0IHRoZSByZXN0IGRvIGEgYm90dG9tIGhhbGYgb3IgdGFzayBxdWV1ZS4KKyAqCisgKiAgLSBQUklPUklUSVpFRDogVGhlIGhhbmRsZXIgY2FuIGJlIGludGVycnVwdGVkIGJ5IGhpZ2hlci1sZXZlbCBpbnRzCisgKiAgICAoZ3JlYXRlciBJUEwsIG5vIE1GUCBwcmlvcml0aWVzISkuIFRoaXMgaXMgdGhlIG1ldGhvZCBvZiBjaG9pY2UgZm9yIGludHMKKyAqICAgIHdoaWNoIHNob3VsZCBiZSBzbG93LCBidXQgYXJlIG5vdCBmcm9tIGEgTUZQLgorICoKKyAqIFRoZSBmZWF0dXJlIG9mIG1vcmUgdGhhbiBvbmUgaGFuZGxlciBmb3Igb25lIGludCBzb3VyY2UgaXMgc3RpbGwgdGhlcmUsIGJ1dAorICogb25seSBhcHBsaWNhYmxlIGlmIGFsbCBoYW5kZXJzIGFyZSBvZiB0aGUgc2FtZSB0eXBlLiBUbyBub3Qgc2xvdyBkb3duCisgKiBwcm9jZXNzaW5nIG9mIGludHMgd2l0aCBvbmx5IG9uZSBoYW5kbGVyIGJ5IHRoZSBjaGFpbmluZyBmZWF0dXJlLCB0aGUgbGlzdAorICogY2FsbGluZyBmdW5jdGlvbiBhdGFyaV9jYWxsX2lycV9saXN0KCkgaXMgb25seSBwbHVnZ2VkIGluIGF0IHRoZSB0aW1lIHRoZQorICogc2Vjb25kIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZC4KKyAqCisgKiBJbXBsZW1lbnRhdGlvbiBub3RlczogRm9yIGZhc3QtYXMtcG9zc2libGUgaW50IGhhbmRsaW5nLCB0aGVyZSBhcmUgc2VwYXJhdGUKKyAqIGVudHJ5IHBvaW50cyBmb3IgZWFjaCB0eXBlIChzbG93L2Zhc3QvcHJpbykuIFRoZSBhc3NlbWJsZXIgaGFuZGxlciBjYWxscworICogdGhlIGlycSBkaXJlY3RseSBpbiB0aGUgdXN1YWwgY2FzZSwgbm8gQyB3cmFwcGVyIGlzIGludm9sdmVkLiBJbiBjYXNlIG9mCisgKiBtdWx0aXBsZSBoYW5kbGVycywgYXRhcmlfY2FsbF9pcnFfbGlzdCgpIGlzIHJlZ2lzdGVyZWQgYXMgaGFuZGxlciBhbmQgY2FsbHMKKyAqIGluIHR1cm4gdGhlIHJlYWwgaXJxJ3MuIFRvIGVhc2UgYWNjZXNzIGZyb20gYXNzZW1ibGVyIGxldmVsIHRvIHRoZSBpcnEKKyAqIGZ1bmN0aW9uIHBvaW50ZXIgYW5kIGFjY29tcGFueWluZyBkYXRhLCB0aGVzZSB0d28gYXJlIHN0b3JlZCBpbiBhIHNlcGFyYXRlCisgKiBhcnJheSwgaXJxX2hhbmRsZXJbXS4gVGhlIHJlc3Qgb2YgZGF0YSAodHlwZSwgbmFtZSkgYXJlIHB1dCBpbnRvIGEgc2Vjb25kCisgKiBhcnJheSwgaXJxX3BhcmFtLCB0aGF0IGlzIGFjY2Vzc2VkIGZyb20gQyBvbmx5LiBGb3IgZWFjaCBzbG93IGludGVycnVwdCAoMzIKKyAqIGluIGFsbCkgdGhlcmUgYXJlIHNlcGFyYXRlIGhhbmRsZXIgZnVuY3Rpb25zLCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0bworICogaGFyZC1jb2RlIHRoZSBNRlAgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgdmFsdWUsIGFyZSBuZWNlc3NhcnkgdG8gbWFzayB0aGUKKyAqIGludC4gSWYgdGhlcmUnZCBiZSBvbmx5IG9uZSBnZW5lcmljIGZ1bmN0aW9uLCBsb3RzIG9mIGNhbGN1bGF0aW9ucyB3b3VsZCBiZQorICogbmVlZGVkIHRvIGRldGVybWluZSBNRlAgcmVnaXN0ZXIgYW5kIGludCBtYXNrIGZyb20gdGhlIHZlY3RvciBudW1iZXIgOi0oCisgKgorICogRnVydGhlcm1vcmUsIHNsb3cgaW50cyBtYXkgbm90IGxvd2VyIHRoZSBJUEwgYmVsb3cgaXRzIHByZXZpb3VzIHZhbHVlCisgKiAoYmVmb3JlIHRoZSBpbnQgaGFwcGVuZWQpLiBUaGlzIGlzIG5lZWRlZCBzbyB0aGF0IGFuIGludCBvZiBjbGFzcyBQUklPLCBvbgorICogdGhhdCB0aGlzIGludCBtYXkgYmUgc3RhY2tlZCwgY2Fubm90IGJlIHJlZW50ZXJlZC4gVGhpcyBmZWF0dXJlIGlzCisgKiBpbXBsZW1lbnRlZCBhcyBmb2xsb3dzOiBJZiB0aGUgc3RhY2sgZnJhbWUgZm9ybWF0IGlzIDEgKHRocm93YXdheSksIHRoZSBpbnQKKyAqIGlzIG5vdCBzdGFja2VkLCBhbmQgdGhlIElQTCBpcyBhbmRlZCB3aXRoIDB4ZmJmZiwgcmVzdWx0aW5nIGluIGEgbmV3IGxldmVsCisgKiAyLCB3aGljaCBzdGlsbCBibG9ja3MgdGhlIEhTWU5DLCBidXQgbm8gaW50ZXJydXB0cyBvZiBpbnRlcmVzdC4gSWYgdGhlCisgKiBmcmFtZSBmb3JtYXQgaXMgMCwgdGhlIGludCBpcyBuZXN0ZWQsIGFuZCB0aGUgb2xkIElQTCB2YWx1ZSBjYW4gYmUgZm91bmQgaW4KKyAqIHRoZSBzciBjb3B5IGluIHRoZSBmcmFtZS4KKyAqLworCisKKyNkZWZpbmUJTlVNX0lOVF9TT1VSQ0VTCSg4ICsgTlVNX0FUQVJJX1NPVVJDRVMpCisKK3R5cGVkZWYgdm9pZCAoKmFzbV9pcnFfaGFuZGxlcikodm9pZCk7CisKK3N0cnVjdCBpcnFoYW5kbGVyIHsKKwlpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKwl2b2lkCSpkZXZfaWQ7Cit9OworCitzdHJ1Y3QgaXJxcGFyYW0geworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJY29uc3QgY2hhcgkqZGV2bmFtZTsKK307CisKKy8qCisgKiBBcnJheSB3aXRoIGlycSdzIGFuZCB0aGVpciBwYXJhbWV0ZXIgZGF0YS4gVGhpcyBhcnJheSBpcyBhY2Nlc3NlZCBmcm9tIGxvdworICogbGV2ZWwgYXNzZW1ibGVyIGNvZGUsIHNvIGFuIGVsZW1lbnQgc2l6ZSBvZiA4IGFsbG93cyB1c2FnZSBvZiBpbmRleCBzY2FsaW5nCisgKiBhZGRyZXNzaW5nIG1vZGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJxaGFuZGxlciBpcnFfaGFuZGxlcltOVU1fSU5UX1NPVVJDRVNdOworCisvKgorICogVGhpcyBhcnJheSBob2xkIHRoZSByZXN0IG9mIHBhcmFtZXRlcnMgb2YgaW50IGhhbmRsZXJzOiB0eXBlCisgKiAoc2xvdyxmYXN0LHByaW8pIGFuZCB0aGUgbmFtZSBvZiB0aGUgaGFuZGxlci4gVGhlc2UgdmFsdWVzIGFyZSBvbmx5CisgKiBhY2Nlc3NlZCBmcm9tIEMKKyAqLworc3RhdGljIHN0cnVjdCBpcnFwYXJhbSBpcnFfcGFyYW1bTlVNX0lOVF9TT1VSQ0VTXTsKKworLyoKKyAqIEJpdG1hcCBmb3IgZnJlZSBpbnRlcnJ1cHQgdmVjdG9yIG51bWJlcnMKKyAqIChuZXcgdmVjdG9ycyBzdGFydGluZyBmcm9tIDB4NzAgY2FuIGJlIGFsbG9jYXRlZCBieQorICogYXRhcmlfcmVnaXN0ZXJfdm1lX2ludCgpKQorICovCitzdGF0aWMgaW50IGZyZWVfdm1lX3ZlY19iaXRtYXA7CisKKy8qIGNoZWNrIGZvciB2YWxpZCBpbnQgbnVtYmVyIChjb21wbGV4LCBzaWdoLi4uKSAqLworI2RlZmluZQlJU19WQUxJRF9JTlROTyhuKQkJCQkJCQkJCQkJXAorCSgobikgPiAwICYmCQkJCQkJCQkJCQkJCQlcCisJIC8qIGF1dG92ZWMgYW5kIFNULU1GUCBvayBhbnl3YXkgKi8JCQkJCQkJCVwKKwkgKCgobikgPCBUVE1GUF9TT1VSQ0VfQkFTRSkgfHwJCQkJCQkJCQlcCisJICAvKiBUVC1NRlAgb2sgaWYgcHJlc2VudCAqLwkJCQkJCQkJCVwKKwkgICgobikgPj0gVFRNRlBfU09VUkNFX0JBU0UgJiYgKG4pIDwgU0NDX1NPVVJDRV9CQVNFICYmCQkJXAorCSAgIEFUQVJJSFdfUFJFU0VOVChUVF9NRlApKSB8fAkJCQkJCQkJCVwKKwkgIC8qIFNDQyBvayBpZiBwcmVzZW50IGFuZCBudW1iZXIgZXZlbiAqLwkJCQkJCVwKKwkgICgobikgPj0gU0NDX1NPVVJDRV9CQVNFICYmIChuKSA8IFZNRV9TT1VSQ0VfQkFTRSAmJgkJCVwKKwkgICAhKChuKSAmIDEpICYmIEFUQVJJSFdfUFJFU0VOVChTQ0MpKSB8fAkJCQkJCVwKKwkgIC8qIGdyZWF0ZXIgbnVtYmVycyBvayBpZiB0aGV5IGFyZSByZWdpc3RlcmVkIFZNRSB2ZWN0b3JzICovCQlcCisJICAoKG4pID49IFZNRV9TT1VSQ0VfQkFTRSAmJiAobikgPCBWTUVfU09VUkNFX0JBU0UgKyBWTUVfTUFYX1NPVVJDRVMgJiYgXAorCQkgIGZyZWVfdm1lX3ZlY19iaXRtYXAgJiAoMSA8PCAoKG4pIC0gVk1FX1NPVVJDRV9CQVNFKSkpKSkKKworCisvKgorICogSGVyZSBzdGFydCB0aGUgYXNzZW1ibGVyIGVudHJ5IHBvaW50cyBmb3IgaW50ZXJydXB0cworICovCisKKyNkZWZpbmUgSVJRX05BTUUobnIpIGF0YXJpX3Nsb3dfaXJxXyMjbnIjI19oYW5kbGVyKHZvaWQpCisKKyNkZWZpbmUJQlVJTERfU0xPV19JUlEobikJCQkJCQkgICBcCithc21saW5rYWdlIHZvaWQgSVJRX05BTUUobik7CQkJCQkJICAgXAorLyogRHVtbXkgZnVuY3Rpb24gdG8gYWxsb3cgYXNtIHdpdGggb3BlcmFuZHMuICAqLwkJCSAgIFwKK3ZvaWQgYXRhcmlfc2xvd19pcnFfIyNuIyNfZHVtbXkgKHZvaWQpIHsJCQkJICAgXAorX19hc21fXyAoX19BTElHTl9TVFIgIlxuIgkJCQkJCSAgIFwKKyJhdGFyaV9zbG93X2lycV8iICNuICJfaGFuZGxlcjpcdCIJCQkJCSAgIFwKKyIJYWRkbAklNiwlNVxuIgkvKiBwcmVlbXB0X2NvdW50KCkgKz0gSEFSRElSUV9PRkZTRVQgKi8JICAgXAorCVNBVkVfQUxMX0lOVCAiXG4iCQkJCQkJICAgXAorCUdFVF9DVVJSRU5UKCUlZDApICJcbiIJCQkJCQkgICBcCisiCWFuZGIJI34oMTw8KCVjMyY3KSksJWE0OndcbiIJLyogbWFzayB0aGlzIGludGVycnVwdCAqLwkgICBcCisJLyogZ2V0IG9sZCBJUEwgZnJvbSBzdGFjayBmcmFtZSAqLwkJCQkgICBcCisiCWJmZXh0dQklJXNwQCglYzIpeyM1LCMzfSwlJWQwXG4iCQkJCSAgIFwKKyIJbW92ZXcJJSVzciwlJWQxXG4iCQkJCQkJICAgXAorIgliZmlucwklJWQwLCUlZDF7IzIxLCMzfVxuIgkJCQkJICAgXAorIgltb3ZldwklJWQxLCUlc3JcbiIJCS8qIHNldCBJUEwgPSBwcmV2aW91cyB2YWx1ZSAqLwkgICBcCisiCWFkZHFsCSMxLCVhMFxuIgkJCQkJCSAgIFwKKyIJbGVhCSVhMSwlJWEwXG4iCQkJCQkJICAgXAorIglwZWEJJSVzcEBcbiIJCS8qIHB1c2ggYWRkciBvZiBmcmFtZSAqLwkgICBcCisiCW1vdmVsCSUlYTBAKDQpLCUlc3BALVxuIgkvKiBwdXNoIGhhbmRsZXIgZGF0YSAqLwkJICAgXAorIglwZWEJKCVjMys4KVxuIgkJLyogcHVzaCBpbnQgbnVtYmVyICovCQkgICBcCisiCW1vdmVsCSUlYTBALCUlYTBcbiIJCQkJCQkgICBcCisiCWpic3IJJSVhMEBcbiIJCS8qIGNhbGwgdGhlIGhhbmRsZXIgKi8JCSAgIFwKKyIJYWRkcWwJIzgsJSVzcFxuIgkJCQkJCSAgIFwKKyIJYWRkcWwJIzQsJSVzcFxuIgkJCQkJCSAgIFwKKyIJb3J3CSMweDA2MDAsJSVzclxuIgkJCQkJCSAgIFwKKyIJYW5kdwkjMHhmZWZmLCUlc3JcbiIJCS8qIHNldCBJUEwgPSA2IGFnYWluICovCQkgICBcCisiCW9yYgkjKDE8PCglYzMmNykpLCVhNDp3XG4iCS8qIG5vdyB1bm1hc2sgdGhlIGludCBhZ2FpbiAqLwkgICBcCisiCWpicmEJcmV0X2Zyb21faW50ZXJydXB0XG4iCQkJCQkgICBcCisJIDogOiAiaSIgKCZrc3RhdF9jcHUoMCkuaXJxc1tuKzhdKSwgImkiICgmaXJxX2hhbmRsZXJbbis4XSksCSAgIFwKKwkgICAgICJuIiAoUFRfT0ZGX1NSKSwgIm4iIChuKSwJCQkJCSAgIFwKKwkgICAgICJpIiAobiAmIDggPyAobiAmIDE2ID8gJnR0X21mcC5pbnRfbWtfYSA6ICZtZnAuaW50X21rX2EpCSAgIFwKKwkJICAgICAgICA6IChuICYgMTYgPyAmdHRfbWZwLmludF9ta19iIDogJm1mcC5pbnRfbWtfYikpLAkgICBcCisJICAgICAibSIgKHByZWVtcHRfY291bnQoKSksICJkaSIgKEhBUkRJUlFfT0ZGU0VUKQkJICAgXAorKTsJCQkJCQkJCQkgICBcCisJZm9yICg7Oyk7CQkJLyogZmFrZSBub3JldHVybiAqLwkJICAgXAorfQorCitCVUlMRF9TTE9XX0lSUSgwKTsKK0JVSUxEX1NMT1dfSVJRKDEpOworQlVJTERfU0xPV19JUlEoMik7CitCVUlMRF9TTE9XX0lSUSgzKTsKK0JVSUxEX1NMT1dfSVJRKDQpOworQlVJTERfU0xPV19JUlEoNSk7CitCVUlMRF9TTE9XX0lSUSg2KTsKK0JVSUxEX1NMT1dfSVJRKDcpOworQlVJTERfU0xPV19JUlEoOCk7CitCVUlMRF9TTE9XX0lSUSg5KTsKK0JVSUxEX1NMT1dfSVJRKDEwKTsKK0JVSUxEX1NMT1dfSVJRKDExKTsKK0JVSUxEX1NMT1dfSVJRKDEyKTsKK0JVSUxEX1NMT1dfSVJRKDEzKTsKK0JVSUxEX1NMT1dfSVJRKDE0KTsKK0JVSUxEX1NMT1dfSVJRKDE1KTsKK0JVSUxEX1NMT1dfSVJRKDE2KTsKK0JVSUxEX1NMT1dfSVJRKDE3KTsKK0JVSUxEX1NMT1dfSVJRKDE4KTsKK0JVSUxEX1NMT1dfSVJRKDE5KTsKK0JVSUxEX1NMT1dfSVJRKDIwKTsKK0JVSUxEX1NMT1dfSVJRKDIxKTsKK0JVSUxEX1NMT1dfSVJRKDIyKTsKK0JVSUxEX1NMT1dfSVJRKDIzKTsKK0JVSUxEX1NMT1dfSVJRKDI0KTsKK0JVSUxEX1NMT1dfSVJRKDI1KTsKK0JVSUxEX1NMT1dfSVJRKDI2KTsKK0JVSUxEX1NMT1dfSVJRKDI3KTsKK0JVSUxEX1NMT1dfSVJRKDI4KTsKK0JVSUxEX1NMT1dfSVJRKDI5KTsKK0JVSUxEX1NMT1dfSVJRKDMwKTsKK0JVSUxEX1NMT1dfSVJRKDMxKTsKKworYXNtX2lycV9oYW5kbGVyIHNsb3dfaGFuZGxlcnNbMzJdID0geworCVswXQk9IGF0YXJpX3Nsb3dfaXJxXzBfaGFuZGxlciwKKwlbMV0JPSBhdGFyaV9zbG93X2lycV8xX2hhbmRsZXIsCisJWzJdCT0gYXRhcmlfc2xvd19pcnFfMl9oYW5kbGVyLAorCVszXQk9IGF0YXJpX3Nsb3dfaXJxXzNfaGFuZGxlciwKKwlbNF0JPSBhdGFyaV9zbG93X2lycV80X2hhbmRsZXIsCisJWzVdCT0gYXRhcmlfc2xvd19pcnFfNV9oYW5kbGVyLAorCVs2XQk9IGF0YXJpX3Nsb3dfaXJxXzZfaGFuZGxlciwKKwlbN10JPSBhdGFyaV9zbG93X2lycV83X2hhbmRsZXIsCisJWzhdCT0gYXRhcmlfc2xvd19pcnFfOF9oYW5kbGVyLAorCVs5XQk9IGF0YXJpX3Nsb3dfaXJxXzlfaGFuZGxlciwKKwlbMTBdCT0gYXRhcmlfc2xvd19pcnFfMTBfaGFuZGxlciwKKwlbMTFdCT0gYXRhcmlfc2xvd19pcnFfMTFfaGFuZGxlciwKKwlbMTJdCT0gYXRhcmlfc2xvd19pcnFfMTJfaGFuZGxlciwKKwlbMTNdCT0gYXRhcmlfc2xvd19pcnFfMTNfaGFuZGxlciwKKwlbMTRdCT0gYXRhcmlfc2xvd19pcnFfMTRfaGFuZGxlciwKKwlbMTVdCT0gYXRhcmlfc2xvd19pcnFfMTVfaGFuZGxlciwKKwlbMTZdCT0gYXRhcmlfc2xvd19pcnFfMTZfaGFuZGxlciwKKwlbMTddCT0gYXRhcmlfc2xvd19pcnFfMTdfaGFuZGxlciwKKwlbMThdCT0gYXRhcmlfc2xvd19pcnFfMThfaGFuZGxlciwKKwlbMTldCT0gYXRhcmlfc2xvd19pcnFfMTlfaGFuZGxlciwKKwlbMjBdCT0gYXRhcmlfc2xvd19pcnFfMjBfaGFuZGxlciwKKwlbMjFdCT0gYXRhcmlfc2xvd19pcnFfMjFfaGFuZGxlciwKKwlbMjJdCT0gYXRhcmlfc2xvd19pcnFfMjJfaGFuZGxlciwKKwlbMjNdCT0gYXRhcmlfc2xvd19pcnFfMjNfaGFuZGxlciwKKwlbMjRdCT0gYXRhcmlfc2xvd19pcnFfMjRfaGFuZGxlciwKKwlbMjVdCT0gYXRhcmlfc2xvd19pcnFfMjVfaGFuZGxlciwKKwlbMjZdCT0gYXRhcmlfc2xvd19pcnFfMjZfaGFuZGxlciwKKwlbMjddCT0gYXRhcmlfc2xvd19pcnFfMjdfaGFuZGxlciwKKwlbMjhdCT0gYXRhcmlfc2xvd19pcnFfMjhfaGFuZGxlciwKKwlbMjldCT0gYXRhcmlfc2xvd19pcnFfMjlfaGFuZGxlciwKKwlbMzBdCT0gYXRhcmlfc2xvd19pcnFfMzBfaGFuZGxlciwKKwlbMzFdCT0gYXRhcmlfc2xvd19pcnFfMzFfaGFuZGxlcgorfTsKKworYXNtbGlua2FnZSB2b2lkIGF0YXJpX2Zhc3RfaXJxX2hhbmRsZXIoIHZvaWQgKTsKK2FzbWxpbmthZ2Ugdm9pZCBhdGFyaV9wcmlvX2lycV9oYW5kbGVyKCB2b2lkICk7CisKKy8qIER1bW15IGZ1bmN0aW9uIHRvIGFsbG93IGFzbSB3aXRoIG9wZXJhbmRzLiAgKi8KK3ZvaWQgYXRhcmlfZmFzdF9wcmlvX2lycV9kdW1teSAodm9pZCkgeworX19hc21fXyAoX19BTElHTl9TVFIgIlxuIgorImF0YXJpX2Zhc3RfaXJxX2hhbmRsZXI6XG5cdCIKKwkib3J3CSMweDcwMCwlJXNyXG4iCQkvKiBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisiYXRhcmlfcHJpb19pcnFfaGFuZGxlcjpcblx0IgorCSJhZGRsCSUzLCUyXG5cdCIJCS8qIHByZWVtcHRfY291bnQoKSArPSBIQVJESVJRX09GRlNFVCAqLworCVNBVkVfQUxMX0lOVCAiXG5cdCIKKwlHRVRfQ1VSUkVOVCglJWQwKSAiXG5cdCIKKwkvKiBnZXQgdmVjdG9yIG51bWJlciBmcm9tIHN0YWNrIGZyYW1lIGFuZCBjb252ZXJ0IHRvIHNvdXJjZSAqLworCSJiZmV4dHUJJSVzcEAoJWMxKXsjNCwjMTB9LCUlZDBcblx0IgorCSJzdWJ3CSMoMHg0MC04KSwlJWQwXG5cdCIKKwkianBsCTFmXG5cdCIKKwkiYWRkdwkjKDB4NDAtOC0weDE4KSwlJWQwXG4iCisgICAgIjE6XHRsZWEJJWEwLCUlYTBcblx0IgorCSJhZGRxbAkjMSwlJWEwQCglJWQwOmw6NClcblx0IgorCSJsZWEJaXJxX2hhbmRsZXIsJSVhMFxuXHQiCisJImxlYQklJWEwQCglJWQwOmw6OCksJSVhMFxuXHQiCisJInBlYQklJXNwQFxuXHQiCQkvKiBwdXNoIGZyYW1lIGFkZHJlc3MgKi8KKwkibW92ZWwJJSVhMEAoNCksJSVzcEAtXG5cdCIJLyogcHVzaCBoYW5kbGVyIGRhdGEgKi8KKwkibW92ZWwJJSVkMCwlJXNwQC1cblx0IgkvKiBwdXNoIGludCBudW1iZXIgKi8KKwkibW92ZWwJJSVhMEAsJSVhMFxuXHQiCisJImpzcgklJWEwQFxuXHQiCQkvKiBhbmQgY2FsbCB0aGUgaGFuZGxlciAqLworCSJhZGRxbAkjOCwlJXNwXG5cdCIKKwkiYWRkcWwJIzQsJSVzcFxuXHQiCisJImpicmEJcmV0X2Zyb21faW50ZXJydXB0IgorCSA6IDogImkiICgma3N0YXRfY3B1KDApLmlycXMpLCAibiIgKFBUX09GRl9GT1JNQVRWRUMpLAorCSAgICAgIm0iIChwcmVlbXB0X2NvdW50KCkpLCAiZGkiIChIQVJESVJRX09GRlNFVCkKKyk7CisJZm9yICg7Oyk7Cit9CisKKy8qIEdLOgorICogSEJMIElSUSBoYW5kbGVyIGZvciBGYWxjb24uIE5vYm9keSBuZWVkcyBpdCA6LSkKKyAqICsrYW5kcmVhczogcmFpc2UgaXBsIHRvIGRpc2FibGUgZnVydGhlciBIQkxBTksgaW50ZXJydXB0cy4KKyAqLworYXNtbGlua2FnZSB2b2lkIGZhbGNvbl9oYmxoYW5kbGVyKHZvaWQpOworYXNtKCIudGV4dFxuIgorX19BTElHTl9TVFIgIlxuXHQiCisiZmFsY29uX2hibGhhbmRsZXI6XG5cdCIKKwkib3J3CSMweDIwMCwlc3BAXG5cdCIJLyogc2V0IHNhdmVkIGlwbCB0byAyICovCisJInJ0ZSIpOworCisvKiBEZWZpbmVkIGluIGVudHJ5LlM7IG9ubHkgaW5jcmVtZW50cyAnbnVtX3NwdXJpb3VzJyAqLworYXNtbGlua2FnZSB2b2lkIGJhZF9pbnRlcnJ1cHQodm9pZCk7CisKK2V4dGVybiB2b2lkIGF0YXJpX21pY3Jvd2lyZV9jbWQoIGludCBjbWQgKTsKKworZXh0ZXJuIGludCBhdGFyaV9TQ0NfcmVzZXRfZG9uZTsKKworLyoKKyAqIHZvaWQgYXRhcmlfaW5pdF9JUlEgKHZvaWQpCisgKgorICogUGFyYW1ldGVyczoJTm9uZQorICoKKyAqIFJldHVybnM6CU5vdGhpbmcKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZHVyaW5nIGtlcm5lbCBzdGFydHVwIHRvIGluaXRpYWxpemUKKyAqIHRoZSBhdGFyaSBJUlEgaGFuZGxpbmcgcm91dGluZXMuCisgKi8KKwordm9pZCBfX2luaXQgYXRhcmlfaW5pdF9JUlEodm9pZCkKK3sKKwlpbnQgaTsKKworCS8qIGluaXRpYWxpemUgdGhlIHZlY3RvciB0YWJsZSAqLworCWZvciAoaSA9IDA7IGkgPCBOVU1fSU5UX1NPVVJDRVM7ICsraSkgeworCQl2ZWN0b3JzW0lSUV9TT1VSQ0VfVE9fVkVDVE9SKGkpXSA9IGJhZF9pbnRlcnJ1cHQ7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgTUZQKHMpICovCisKKyNpZmRlZiBBVEFSSV9VU0VfU09GVFdBUkVfRU9JCisJbWZwLnZlY19hZHIgID0gMHg0ODsJLyogU29mdHdhcmUgRU9JLU1vZGUgKi8KKyNlbHNlCisJbWZwLnZlY19hZHIgID0gMHg0MDsJLyogQXV0b21hdGljIEVPSS1Nb2RlICovCisjZW5kaWYKKwltZnAuaW50X2VuX2EgPSAweDAwOwkvKiB0dXJuIG9mZiBNRlAtSW50cyAqLworCW1mcC5pbnRfZW5fYiA9IDB4MDA7CisJbWZwLmludF9ta19hID0gMHhmZjsJLyogbm8gTWFza2luZyAqLworCW1mcC5pbnRfbWtfYiA9IDB4ZmY7CisKKwlpZiAoQVRBUklIV19QUkVTRU5UKFRUX01GUCkpIHsKKyNpZmRlZiBBVEFSSV9VU0VfU09GVFdBUkVfRU9JCisJCXR0X21mcC52ZWNfYWRyICA9IDB4NTg7CQkvKiBTb2Z0d2FyZSBFT0ktTW9kZSAqLworI2Vsc2UKKwkJdHRfbWZwLnZlY19hZHIgID0gMHg1MDsJCS8qIEF1dG9tYXRpYyBFT0ktTW9kZSAqLworI2VuZGlmCisJCXR0X21mcC5pbnRfZW5fYSA9IDB4MDA7CQkvKiB0dXJuIG9mZiBNRlAtSW50cyAqLworCQl0dF9tZnAuaW50X2VuX2IgPSAweDAwOworCQl0dF9tZnAuaW50X21rX2EgPSAweGZmOwkJLyogbm8gTWFza2luZyAqLworCQl0dF9tZnAuaW50X21rX2IgPSAweGZmOworCX0KKworCWlmIChBVEFSSUhXX1BSRVNFTlQoU0NDKSAmJiAhYXRhcmlfU0NDX3Jlc2V0X2RvbmUpIHsKKwkJc2NjLmNoYV9hX2N0cmwgPSA5OworCQlNRlBERUxBWSgpOworCQlzY2MuY2hhX2FfY3RybCA9IChjaGFyKSAweGMwOyAvKiBoYXJkd2FyZSByZXNldCAqLworCX0KKworCWlmIChBVEFSSUhXX1BSRVNFTlQoU0NVKSkgeworCQkvKiBpbml0IHRoZSBTQ1UgaWYgcHJlc2VudCAqLworCQl0dF9zY3Uuc3lzX21hc2sgPSAweDEwOwkJLyogZW5hYmxlIFZCTCAoZm9yIHRoZSBjdXJzb3IpIGFuZAorCQkJCQkJCQkJICogZGlzYWJsZSBIU1lOQyBpbnRlcnJ1cHRzICh3aG8KKwkJCQkJCQkJCSAqIG5lZWRzIHRoZW0/KSAgTUZQIGFuZCBTQ0MgYXJlCisJCQkJCQkJCQkgKiBlbmFibGVkIGluIFZNRSBtYXNrCisJCQkJCQkJCQkgKi8KKwkJdHRfc2N1LnZtZV9tYXNrID0gMHg2MDsJCS8qIGVuYWJsZSBNRlAgYW5kIFNDQyBpbnRzICovCisJfQorCWVsc2UgeworCQkvKiBJZiBubyBTQ1UgYW5kIG5vIEhhZGVzLCB0aGUgSFNZTkMgaW50ZXJydXB0IG5lZWRzIHRvIGJlCisJCSAqIGRpc2FibGVkIHRoaXMgd2F5LiAoRWxzZSBfaW50aGFuZGxlciBpbiBrZXJuZWwvc3lzX2NhbGwuUworCQkgKiBnZXRzIG92ZXJydW5zKQorCQkgKi8KKworCQlpZiAoIU1BQ0hfSVNfSEFERVMpCisJCQl2ZWN0b3JzW1ZFQ19JTlQyXSA9IGZhbGNvbl9oYmxoYW5kbGVyOworCX0KKworCWlmIChBVEFSSUhXX1BSRVNFTlQoUENNXzhCSVQpICYmIEFUQVJJSFdfUFJFU0VOVChNSUNST1dJUkUpKSB7CisJCS8qIEluaXRpYWxpemUgdGhlIExNMTk5MiBTb3VuZCBDb250cm9sbGVyIHRvIGVuYWJsZQorCQkgICB0aGUgUFNHIHNvdW5kLiAgVGhpcyBpcyBtaXNwbGFjZWQgaGVyZSwgaXQgc2hvdWxkCisJCSAgIGJlIGluIGFuIGF0YXNvdW5kX2luaXQoKSwgdGhhdCBkb2Vzbid0IGV4aXN0IHlldC4gKi8KKwkJYXRhcmlfbWljcm93aXJlX2NtZChNV19MTTE5OTJfUFNHX0hJR0gpOworCX0KKworCXN0ZG1hX2luaXQoKTsKKworCS8qIEluaXRpYWxpemUgdGhlIFBTRzogYWxsIHNvdW5kcyBvZmYsIGJvdGggcG9ydHMgb3V0cHV0ICovCisJc291bmRfeW0ucmRfZGF0YV9yZWdfc2VsID0gNzsKKwlzb3VuZF95bS53ZF9kYXRhID0gMHhmZjsKK30KKworCitzdGF0aWMgaXJxcmV0dXJuX3QgYXRhcmlfY2FsbF9pcnFfbGlzdCggaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnAgKQoreworCWlycV9ub2RlX3QgKm5vZGU7CisKKwlmb3IgKG5vZGUgPSAoaXJxX25vZGVfdCAqKWRldl9pZDsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHQpCisJCW5vZGUtPmhhbmRsZXIoaXJxLCBub2RlLT5kZXZfaWQsIGZwKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKworLyoKKyAqIGF0YXJpX3JlcXVlc3RfaXJxIDogYWRkIGFuIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgZm9yIGEgcGFydGljdWxhcgorICogICAgICAgICAgICAgICAgICAgICBtYWNoaW5lIHNwZWNpZmljIGludGVycnVwdCBzb3VyY2UuCisgKiAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBhZGRpdGlvbiB3YXMgc3VjY2Vzc2Z1bCwgaXQgcmV0dXJucyAwLgorICovCisKK2ludCBhdGFyaV9yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpCit7CisJaW50IHZlY3RvcjsKKwl1bnNpZ25lZCBsb25nIG9mbGFncyA9IGZsYWdzOworCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGlzIGEgaGFjayB0byBtYWtlIHNvbWUgUENJIGNhcmQgZHJpdmVycyB3b3JrLAorCSAqIHdoaWNoIHNldCB0aGUgU0FfU0hJUlEgZmxhZy4KKwkgKi8KKworCWZsYWdzICY9IH5TQV9TSElSUTsKKworCWlmIChmbGFncyA9PSBTQV9JTlRFUlJVUFQpIHsKKwkJcHJpbnRrICgiJXM6IFNBX0lOVEVSUlVQVCBjaGFuZ2VkIHRvIElSUV9UWVBFX1NMT1cgZm9yICVzXG4iLAorCQkJX19GVU5DVElPTl9fLCBkZXZuYW1lKTsKKwkJZmxhZ3MgPSBJUlFfVFlQRV9TTE9XOworCX0KKwlpZiAoZmxhZ3MgPCBJUlFfVFlQRV9TTE9XIHx8IGZsYWdzID4gSVJRX1RZUEVfUFJJTykgeworCQlwcmludGsgKCIlczogQmFkIGlycSB0eXBlIDB4JWx4IDwweCVseD4gcmVxdWVzdGVkIGZyb20gJXNcbiIsCisJCSAgICAgICAgX19GVU5DVElPTl9fLCBmbGFncywgb2ZsYWdzLCBkZXZuYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICghSVNfVkFMSURfSU5UTk8oaXJxKSkgeworCQlwcmludGsgKCIlczogVW5rbm93biBpcnEgJWQgcmVxdWVzdGVkIGZyb20gJXNcbiIsCisJCSAgICAgICAgX19GVU5DVElPTl9fLCBpcnEsIGRldm5hbWUpOworCQlyZXR1cm4gLUVOWElPOworCX0KKwl2ZWN0b3IgPSBJUlFfU09VUkNFX1RPX1ZFQ1RPUihpcnEpOworCisJLyoKKwkgKiBDaGVjayB0eXBlL3NvdXJjZSBjb21iaW5hdGlvbjogc2xvdyBpbnRzIGFyZSAoY3VycmVudGx5KQorCSAqIG9ubHkgcG9zc2libGUgZm9yIE1GUC1pbnRlcnJ1cHRzLgorCSAqLworCWlmIChmbGFncyA9PSBJUlFfVFlQRV9TTE9XICYmCisJCShpcnEgPCBTVE1GUF9TT1VSQ0VfQkFTRSB8fCBpcnEgPj0gU0NDX1NPVVJDRV9CQVNFKSkgeworCQlwcmludGsgKCIlczogU2xvdyBpcnEgcmVxdWVzdGVkIGZvciBub24tTUZQIHNvdXJjZSAlZCBmcm9tICVzXG4iLAorCQkgICAgICAgIF9fRlVOQ1RJT05fXywgaXJxLCBkZXZuYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHZlY3RvcnNbdmVjdG9yXSA9PSBiYWRfaW50ZXJydXB0KSB7CisJCS8qIGludCBoYXMgbm8gaGFuZGxlciB5ZXQgKi8KKwkJaXJxX2hhbmRsZXJbaXJxXS5oYW5kbGVyID0gaGFuZGxlcjsKKwkJaXJxX2hhbmRsZXJbaXJxXS5kZXZfaWQgID0gZGV2X2lkOworCQlpcnFfcGFyYW1baXJxXS5mbGFncyAgID0gZmxhZ3M7CisJCWlycV9wYXJhbVtpcnFdLmRldm5hbWUgPSBkZXZuYW1lOworCQl2ZWN0b3JzW3ZlY3Rvcl0gPQorCQkJKGZsYWdzID09IElSUV9UWVBFX1NMT1cpID8gc2xvd19oYW5kbGVyc1tpcnEtU1RNRlBfU09VUkNFX0JBU0VdIDoKKwkJCShmbGFncyA9PSBJUlFfVFlQRV9GQVNUKSA/IGF0YXJpX2Zhc3RfaXJxX2hhbmRsZXIgOgorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICBhdGFyaV9wcmlvX2lycV9oYW5kbGVyOworCQkvKiBJZiBNRlAgaW50LCBhbHNvIGVuYWJsZSBhbmQgdW1hc2sgaXQgKi8KKwkJYXRhcmlfdHVybm9uX2lycShpcnEpOworCQlhdGFyaV9lbmFibGVfaXJxKGlycSk7CisKKwkJcmV0dXJuIDA7CisJfQorCWVsc2UgaWYgKGlycV9wYXJhbVtpcnFdLmZsYWdzID09IGZsYWdzKSB7CisJCS8qIG9sZCBoYW5kbGVyIGlzIG9mIHNhbWUgdHlwZSAtPiBoYW5kbGVycyBjYW4gYmUgY2hhaW5lZCAqLworCQlpcnFfbm9kZV90ICpub2RlOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCQlpZiAoaXJxX2hhbmRsZXJbaXJxXS5oYW5kbGVyICE9IGF0YXJpX2NhbGxfaXJxX2xpc3QpIHsKKwkJCS8qIE9ubHkgb25lIGhhbmRsZXIgeWV0LCBtYWtlIGEgbm9kZSBmb3IgdGhpcyBmaXJzdCBvbmUgKi8KKwkJCWlmICghKG5vZGUgPSBuZXdfaXJxX25vZGUoKSkpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQlub2RlLT5oYW5kbGVyID0gaXJxX2hhbmRsZXJbaXJxXS5oYW5kbGVyOworCQkJbm9kZS0+ZGV2X2lkICA9IGlycV9oYW5kbGVyW2lycV0uZGV2X2lkOworCQkJbm9kZS0+ZGV2bmFtZSA9IGlycV9wYXJhbVtpcnFdLmRldm5hbWU7CisJCQlub2RlLT5uZXh0ID0gTlVMTDsKKworCQkJaXJxX2hhbmRsZXJbaXJxXS5oYW5kbGVyID0gYXRhcmlfY2FsbF9pcnFfbGlzdDsKKwkJCWlycV9oYW5kbGVyW2lycV0uZGV2X2lkICA9IG5vZGU7CisJCQlpcnFfcGFyYW1baXJxXS5kZXZuYW1lICAgPSAiY2hhaW5lZCI7CisJCX0KKworCQlpZiAoIShub2RlID0gbmV3X2lycV9ub2RlKCkpKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCW5vZGUtPmhhbmRsZXIgPSBoYW5kbGVyOworCQlub2RlLT5kZXZfaWQgID0gZGV2X2lkOworCQlub2RlLT5kZXZuYW1lID0gZGV2bmFtZTsKKwkJLyogbmV3IGhhbmRsZXJzIGFyZSBwdXQgaW4gZnJvbnQgb2YgdGhlIHF1ZXVlICovCisJCW5vZGUtPm5leHQgPSBpcnFfaGFuZGxlcltpcnFdLmRldl9pZDsKKwkJaXJxX2hhbmRsZXJbaXJxXS5kZXZfaWQgPSBub2RlOworCisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcHJpbnRrICgiJXM6IElycSAlZCBhbGxvY2F0ZWQgYnkgb3RoZXIgdHlwZSBpbnQgKGNhbGwgZnJvbSAlcylcbiIsCisJCSAgICAgICAgX19GVU5DVElPTl9fLCBpcnEsIGRldm5hbWUpOworCQlyZXR1cm4gLUVCVVNZOworCX0KK30KKwordm9pZCBhdGFyaV9mcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgdmVjdG9yOworCWlycV9ub2RlX3QgKipsaXN0LCAqbm9kZTsKKworCWlmICghSVNfVkFMSURfSU5UTk8oaXJxKSkgeworCQlwcmludGsoIiVzOiBVbmtub3duIGlycSAlZFxuIiwgX19GVU5DVElPTl9fLCBpcnEpOworCQlyZXR1cm47CisJfQorCisJdmVjdG9yID0gSVJRX1NPVVJDRV9UT19WRUNUT1IoaXJxKTsKKwlpZiAodmVjdG9yc1t2ZWN0b3JdID09IGJhZF9pbnRlcnJ1cHQpCisJCWdvdG8gbm90X2ZvdW5kOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJaWYgKGlycV9oYW5kbGVyW2lycV0uaGFuZGxlciAhPSBhdGFyaV9jYWxsX2lycV9saXN0KSB7CisJCS8qIEl0J3MgdGhlIG9ubHkgaGFuZGxlciBmb3IgdGhlIGludGVycnVwdCAqLworCQlpZiAoaXJxX2hhbmRsZXJbaXJxXS5kZXZfaWQgIT0gZGV2X2lkKSB7CisJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCQlnb3RvIG5vdF9mb3VuZDsKKwkJfQorCQlpcnFfaGFuZGxlcltpcnFdLmhhbmRsZXIgPSBOVUxMOworCQlpcnFfaGFuZGxlcltpcnFdLmRldl9pZCAgPSBOVUxMOworCQlpcnFfcGFyYW1baXJxXS5kZXZuYW1lICAgPSBOVUxMOworCQl2ZWN0b3JzW3ZlY3Rvcl0gPSBiYWRfaW50ZXJydXB0OworCQkvKiBJZiBNRlAgaW50LCBhbHNvIGRpc2FibGUgaXQgKi8KKwkJYXRhcmlfZGlzYWJsZV9pcnEoaXJxKTsKKwkJYXRhcmlfdHVybm9mZl9pcnEoaXJxKTsKKworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBUaGUgaW50ZXJydXB0IGlzIGNoYWluZWQsIGZpbmQgdGhlIGlycSBvbiB0aGUgbGlzdCAqLworCWZvcihsaXN0ID0gKGlycV9ub2RlX3QgKiopJmlycV9oYW5kbGVyW2lycV0uZGV2X2lkOyAqbGlzdDsgbGlzdCA9ICYoKmxpc3QpLT5uZXh0KSB7CisJCWlmICgoKmxpc3QpLT5kZXZfaWQgPT0gZGV2X2lkKSBicmVhazsKKwl9CisJaWYgKCEqbGlzdCkgeworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCWdvdG8gbm90X2ZvdW5kOworCX0KKworCSgqbGlzdCktPmhhbmRsZXIgPSBOVUxMOyAvKiBNYXJrIGl0IGFzIGZyZWUgZm9yIHJlYWxsb2NhdGlvbiAqLworCSpsaXN0ID0gKCpsaXN0KS0+bmV4dDsKKworCS8qIElmIHRoZXJlJ3Mgbm93IG9ubHkgb25lIGhhbmRsZXIsIHVuY2hhaW4gdGhlIGludGVycnVwdCwgaS5lLiBwbHVnIGluCisJICogdGhlIGhhbmRsZXIgZGlyZWN0bHkgYWdhaW4gYW5kIG9taXQgYXRhcmlfY2FsbF9pcnFfbGlzdCAqLworCW5vZGUgPSAoaXJxX25vZGVfdCAqKWlycV9oYW5kbGVyW2lycV0uZGV2X2lkOworCWlmIChub2RlICYmICFub2RlLT5uZXh0KSB7CisJCWlycV9oYW5kbGVyW2lycV0uaGFuZGxlciA9IG5vZGUtPmhhbmRsZXI7CisJCWlycV9oYW5kbGVyW2lycV0uZGV2X2lkICA9IG5vZGUtPmRldl9pZDsKKwkJaXJxX3BhcmFtW2lycV0uZGV2bmFtZSAgID0gbm9kZS0+ZGV2bmFtZTsKKwkJbm9kZS0+aGFuZGxlciA9IE5VTEw7IC8qIE1hcmsgaXQgYXMgZnJlZSBmb3IgcmVhbGxvY2F0aW9uICovCisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybjsKKworbm90X2ZvdW5kOgorCXByaW50aygiJXM6IHRyaWVkIHRvIHJlbW92ZSBpbnZhbGlkIGlycVxuIiwgX19GVU5DVElPTl9fKTsKKwlyZXR1cm47Cit9CisKKworLyoKKyAqIGF0YXJpX3JlZ2lzdGVyX3ZtZV9pbnQoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYSBmcmVlIGludGVycnVwdCB2ZWN0b3IgZm9yCisgKiBoYXJkd2FyZSB3aXRoIGEgcHJvZ3JhbW1hYmxlIGludCB2ZWN0b3IgKHByb2JhYmx5IGEgVk1FIGJvYXJkKS4KKyAqLworCit1bnNpZ25lZCBsb25nIGF0YXJpX3JlZ2lzdGVyX3ZtZV9pbnQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvcihpID0gMDsgaSA8IDMyOyBpKyspCisJCWlmKChmcmVlX3ZtZV92ZWNfYml0bWFwICYgKDEgPDwgaSkpID09IDApCisJCQlicmVhazsKKworCWlmKGkgPT0gMTYpCisJCXJldHVybiAwOworCisJZnJlZV92bWVfdmVjX2JpdG1hcCB8PSAxIDw8IGk7CisJcmV0dXJuIChWTUVfU09VUkNFX0JBU0UgKyBpKTsKK30KKworCit2b2lkIGF0YXJpX3VucmVnaXN0ZXJfdm1lX2ludCh1bnNpZ25lZCBsb25nIGlycSkKK3sKKwlpZihpcnEgPj0gVk1FX1NPVVJDRV9CQVNFICYmIGlycSA8IFZNRV9TT1VSQ0VfQkFTRSArIFZNRV9NQVhfU09VUkNFUykgeworCQlpcnEgLT0gVk1FX1NPVVJDRV9CQVNFOworCQlmcmVlX3ZtZV92ZWNfYml0bWFwICY9IH4oMSA8PCBpcnEpOworCX0KK30KKworCitpbnQgc2hvd19hdGFyaV9pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fSU5UX1NPVVJDRVM7ICsraSkgeworCQlpZiAodmVjdG9yc1tJUlFfU09VUkNFX1RPX1ZFQ1RPUihpKV0gPT0gYmFkX2ludGVycnVwdCkKKwkJCWNvbnRpbnVlOworCQlpZiAoaSA8IFNUTUZQX1NPVVJDRV9CQVNFKQorCQkJc2VxX3ByaW50ZihwLCAiYXV0byAlMmQ6ICUxMHUgIiwKKwkJCQkgICAgICAgaSwga3N0YXRfY3B1KDApLmlycXNbaV0pOworCQllbHNlCisJCQlzZXFfcHJpbnRmKHAsICJ2ZWMgJCUwMng6ICUxMHUgIiwKKwkJCQkgICAgICAgSVJRX1NPVVJDRV9UT19WRUNUT1IoaSksCisJCQkJICAgICAgIGtzdGF0X2NwdSgwKS5pcnFzW2ldKTsKKworCQlpZiAoaXJxX2hhbmRsZXJbaV0uaGFuZGxlciAhPSBhdGFyaV9jYWxsX2lycV9saXN0KSB7CisJCQlzZXFfcHJpbnRmKHAsICIlc1xuIiwgaXJxX3BhcmFtW2ldLmRldm5hbWUpOworCQl9CisJCWVsc2UgeworCQkJaXJxX25vZGVfdCAqbjsKKwkJCWZvciggbiA9IChpcnFfbm9kZV90ICopaXJxX2hhbmRsZXJbaV0uZGV2X2lkOyBuOyBuID0gbi0+bmV4dCApIHsKKwkJCQlzZXFfcHJpbnRmKHAsICIlc1xuIiwgbi0+ZGV2bmFtZSk7CisJCQkJaWYgKG4tPm5leHQpCisJCQkJCXNlcV9wdXRzKHAsICIgICAgICAgICAgICAgICAgICAgICIgKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAobnVtX3NwdXJpb3VzKQorCQlzZXFfcHJpbnRmKHAsICJzcHVyaW8uOiAlMTB1XG4iLCBudW1fc3B1cmlvdXMpOworCisJcmV0dXJuIDA7Cit9CisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL2F0YXJpX2tzeW1zLmMgYi9hcmNoL202OGsvYXRhcmkvYXRhcmlfa3N5bXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDQ3NTcxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2F0YXJpL2F0YXJpX2tzeW1zLmMKQEAgLTAsMCArMSwzNSBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9hdGFyaWh3Lmg+CisjaW5jbHVkZSA8YXNtL2F0YXJpaW50cy5oPgorI2luY2x1ZGUgPGFzbS9hdGFyaWtiLmg+CisjaW5jbHVkZSA8YXNtL2F0YXJpX2pveXN0aWNrLmg+CisjaW5jbHVkZSA8YXNtL2F0YXJpX3N0ZG1hLmg+CisjaW5jbHVkZSA8YXNtL2F0YXJpX3N0cmFtLmg+CisKK2V4dGVybiB2b2lkIGF0YXJpX21pY3Jvd2lyZV9jbWQoIGludCBjbWQgKTsKK2V4dGVybiBpbnQgYXRhcmlfTUZQX2luaXRfZG9uZTsKK2V4dGVybiBpbnQgYXRhcmlfU0NDX2luaXRfZG9uZTsKK2V4dGVybiBpbnQgYXRhcmlfU0NDX3Jlc2V0X2RvbmU7CisKK0VYUE9SVF9TWU1CT0woYXRhcmlfbWNoX2Nvb2tpZSk7CitFWFBPUlRfU1lNQk9MKGF0YXJpX21jaF90eXBlKTsKK0VYUE9SVF9TWU1CT0woYXRhcmlfaHdfcHJlc2VudCk7CitFWFBPUlRfU1lNQk9MKGF0YXJpX3N3aXRjaGVzKTsKK0VYUE9SVF9TWU1CT0woYXRhcmlfZG9udF90b3VjaF9mbG9wcHlfc2VsZWN0KTsKK0VYUE9SVF9TWU1CT0woYXRhcmlfcmVnaXN0ZXJfdm1lX2ludCk7CitFWFBPUlRfU1lNQk9MKGF0YXJpX3VucmVnaXN0ZXJfdm1lX2ludCk7CitFWFBPUlRfU1lNQk9MKHN0ZG1hX2xvY2spOworRVhQT1JUX1NZTUJPTChzdGRtYV9yZWxlYXNlKTsKK0VYUE9SVF9TWU1CT0woc3RkbWFfb3RoZXJzX3dhaXRpbmcpOworRVhQT1JUX1NZTUJPTChzdGRtYV9pc2xvY2tlZCk7CitFWFBPUlRfU1lNQk9MKGF0YXJpX3N0cmFtX2FsbG9jKTsKK0VYUE9SVF9TWU1CT0woYXRhcmlfc3RyYW1fZnJlZSk7CisKK0VYUE9SVF9TWU1CT0woYXRhcmlfTUZQX2luaXRfZG9uZSk7CitFWFBPUlRfU1lNQk9MKGF0YXJpX1NDQ19pbml0X2RvbmUpOworRVhQT1JUX1NZTUJPTChhdGFyaV9TQ0NfcmVzZXRfZG9uZSk7CisKK0VYUE9SVF9TWU1CT0woYXRhcmlfbWljcm93aXJlX2NtZCk7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvYXRhc291bmQuYyBiL2FyY2gvbTY4ay9hdGFyaS9hdGFzb3VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMDQyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvYXRhcmkvYXRhc291bmQuYwpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvbTY4ay9hdGFyaS9hdGFzb3VuZC5jCisgKgorICogKytHZWVydDogTW92ZWQgYWxtb3N0IGFsbCBzdHVmZiB0byBsaW51eC9kcml2ZXJzL3NvdW5kLworICoKKyAqIFRoZSBhdXRob3Igb2YgYXRhcmlfbm9zb3VuZCwgYXRhcmlfbWtzb3VuZCBhbmQgYXRhcmlfbWljcm93aXJlX2NtZCBpcworICogdW5rbm93bi4gKCsrcm9tYW46IFRoYXQncyBtZS4uLiA6LSkKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogMTk5OC0wNS0zMSArK2FuZHJlYXM6IGF0YXJpX21rc291bmQgcmV3cml0dGVuIHRvIGFsd2F5cyB1c2UgdGhlIGVudmVsb3BlLAorICoJCQkgbm8gdGltZXIsIGF0YXJpX25vc291bmQgcmVtb3ZlZC4KKyAqCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxhc20vYXRhcmlody5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vYXRhcmlpbnRzLmg+CisKKworLyoKKyAqIHN0dWZmIGZyb20gdGhlIG9sZCBhdGFzb3VuZC5jCisgKi8KKwordm9pZCBhdGFyaV9taWNyb3dpcmVfY21kIChpbnQgY21kKQoreworCXR0X21pY3Jvd2lyZS5tYXNrID0gMHg3ZmY7CisJdHRfbWljcm93aXJlLmRhdGEgPSBNV19MTTE5OTJfQUREUiB8IGNtZDsKKworCS8qIEJ1c3kgd2FpdCBmb3IgZGF0YSBiZWluZyBjb21wbGV0ZWx5IHNlbnQgOi0oICovCisJd2hpbGUoIHR0X21pY3Jvd2lyZS5tYXNrICE9IDB4N2ZmKQorCQk7Cit9CisKKworLyogUFNHIGJhc2UgZnJlcXVlbmN5ICovCisjZGVmaW5lCVBTR19GUkVRCTEyNTAwMAorLyogUFNHIGVudmVsb3BlIGJhc2UgZnJlcXVlbmN5IHRpbWVzIDEwICovCisjZGVmaW5lIFBTR19FTlZfRlJFUV8xMAk3ODEyNQorCit2b2lkIGF0YXJpX21rc291bmQgKHVuc2lnbmVkIGludCBoeiwgdW5zaWduZWQgaW50IHRpY2tzKQoreworCS8qIEdlbmVyYXRlcyBzb3VuZCBvZiBzb21lIGZyZXF1ZW5jeSBmb3Igc29tZSBudW1iZXIgb2YgY2xvY2sKKwkgICB0aWNrcy4gICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBjaGFyIHRtcDsKKwlpbnQgcGVyaW9kOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisKKwkvKiBEaXNhYmxlIGdlbmVyYXRvciBBIGluIG1peGVyIGNvbnRyb2wuICAqLworCXNvdW5kX3ltLnJkX2RhdGFfcmVnX3NlbCA9IDc7CisJdG1wID0gc291bmRfeW0ucmRfZGF0YV9yZWdfc2VsOworCXRtcCB8PSAwMTE7CisJc291bmRfeW0ud2RfZGF0YSA9IHRtcDsKKworCWlmIChoeikgeworCSAgICAvKiBDb252ZXJ0IGZyb20gZnJlcXVlbmN5IHZhbHVlIHRvIFBTRyBwZXJpb2QgdmFsdWUgKGJhc2UKKwkgICAgICAgZnJlcXVlbmN5IDEyNSBrSHopLiAgKi8KKworCSAgICBwZXJpb2QgPSBQU0dfRlJFUSAvIGh6OworCisJICAgIGlmIChwZXJpb2QgPiAweGZmZikgcGVyaW9kID0gMHhmZmY7CisKKwkvKiBTZXQgZ2VuZXJhdG9yIEEgZnJlcXVlbmN5IHRvIGh6LiAgKi8KKwlzb3VuZF95bS5yZF9kYXRhX3JlZ19zZWwgPSAwOworCXNvdW5kX3ltLndkX2RhdGEgPSBwZXJpb2QgJiAweGZmOworCXNvdW5kX3ltLnJkX2RhdGFfcmVnX3NlbCA9IDE7CisJc291bmRfeW0ud2RfZGF0YSA9IChwZXJpb2QgPj4gOCkgJiAweGY7CisJaWYgKHRpY2tzKSB7CisJCS8qIFNldCBsZW5ndGggb2YgZW52ZWxvcGUgKG1heCA4IHNlYykuICAqLworCQlpbnQgbGVuZ3RoID0gKHRpY2tzICogUFNHX0VOVl9GUkVRXzEwKSAvIEhaIC8gMTA7CisKKwkJaWYgKGxlbmd0aCA+IDB4ZmZmZikgbGVuZ3RoID0gMHhmZmZmOworCQlzb3VuZF95bS5yZF9kYXRhX3JlZ19zZWwgPSAxMTsKKwkJc291bmRfeW0ud2RfZGF0YSA9IGxlbmd0aCAmIDB4ZmY7CisJCXNvdW5kX3ltLnJkX2RhdGFfcmVnX3NlbCA9IDEyOworCQlzb3VuZF95bS53ZF9kYXRhID0gbGVuZ3RoID4+IDg7CisJCS8qIEVudmVsb3BlIGZvcm06IG1heCAtPiBtaW4gc2luZ2xlLiAgKi8KKwkJc291bmRfeW0ucmRfZGF0YV9yZWdfc2VsID0gMTM7CisJCXNvdW5kX3ltLndkX2RhdGEgPSAwOworCQkvKiBVc2UgZW52ZWxvcGUgZm9yIGdlbmVyYXRvciBBLiAgKi8KKwkJc291bmRfeW0ucmRfZGF0YV9yZWdfc2VsID0gODsKKwkJc291bmRfeW0ud2RfZGF0YSA9IDB4MTA7CisJfSBlbHNlIHsKKwkJLyogU2V0IGdlbmVyYXRvciBBIGxldmVsIHRvIG1heGltdW0sIG5vIGVudmVsb3BlLiAgKi8KKwkJc291bmRfeW0ucmRfZGF0YV9yZWdfc2VsID0gODsKKwkJc291bmRfeW0ud2RfZGF0YSA9IDE1OworCX0KKwkvKiBUdXJuIG9uIGdlbmVyYXRvciBBIGluIG1peGVyIGNvbnRyb2wuICAqLworCXNvdW5kX3ltLnJkX2RhdGFfcmVnX3NlbCA9IDc7CisJdG1wICY9IH4xOworCXNvdW5kX3ltLndkX2RhdGEgPSB0bXA7CisJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9hdGFzb3VuZC5oIGIvYXJjaC9tNjhrL2F0YXJpL2F0YXNvdW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM2Mjc2MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9hdGFzb3VuZC5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBNaW5vciBudW1iZXJzIGZvciB0aGUgc291bmQgZHJpdmVyLgorICoKKyAqIFVuZm9ydHVuYXRlbHkgQ3JlYXRpdmUgY2FsbGVkIHRoZSBjb2RlYyBjaGlwIG9mIFNCIGFzIGEgRFNQLiBGb3IgdGhpcworICogcmVhc29uIHRoZSAvZGV2L2RzcCBpcyByZXNlcnZlZCBmb3IgZGlnaXRpemVkIGF1ZGlvIHVzZS4gVGhlcmUgaXMgYQorICogZGV2aWNlIGZvciB0cnVlIERTUCBwcm9jZXNzb3JzIGJ1dCBpdCB3aWxsIGJlIGNhbGxlZCBzb21ldGhpbmcgZWxzZS4KKyAqIEluIHYzLjAgaXQncyAvZGV2L3NuZHByb2MgYnV0IHRoaXMgY291bGQgYmUgYSB0ZW1wb3Jhcnkgc29sdXRpb24uCisgKi8KKworI2RlZmluZSBTTkRfTkRFVlMJMjU2CS8qIE51bWJlciBvZiBzdXBwb3J0ZWQgZGV2aWNlcyAqLworI2RlZmluZSBTTkRfREVWX0NUTAkwCS8qIENvbnRyb2wgcG9ydCAvZGV2L21peGVyICovCisjZGVmaW5lIFNORF9ERVZfU0VRCTEJLyogU2VxdWVuY2VyIG91dHB1dCAvZGV2L3NlcXVlbmNlciAoRk0KKwkJCQkgICBzeW50aGVzaXplciBhbmQgTUlESSBvdXRwdXQpICovCisjZGVmaW5lIFNORF9ERVZfTUlESU4JMgkvKiBSYXcgbWlkaSBhY2Nlc3MgKi8KKyNkZWZpbmUgU05EX0RFVl9EU1AJMwkvKiBEaWdpdGl6ZWQgdm9pY2UgL2Rldi9kc3AgKi8KKyNkZWZpbmUgU05EX0RFVl9BVURJTwk0CS8qIFNwYXJjIGNvbXBhdGlibGUgL2Rldi9hdWRpbyAqLworI2RlZmluZSBTTkRfREVWX0RTUDE2CTUJLyogTGlrZSAvZGV2L2RzcCBidXQgMTYgYml0cy9zYW1wbGUgKi8KKyNkZWZpbmUgU05EX0RFVl9TVEFUVVMJNgkvKiAvZGV2L3NuZHN0YXQgKi8KKy8qICM3IG5vdCBpbiB1c2Ugbm93LiBXYXMgaW4gMi40LiBGcmVlIGZvciB1c2UgYWZ0ZXIgdjMuMC4gKi8KKyNkZWZpbmUgU05EX0RFVl9TRVEyCTgJLyogL2Rldi9zZXF1ZW5jZXIsIGxldmVsIDIgaW50ZXJmYWNlICovCisjZGVmaW5lIFNORF9ERVZfU05EUFJPQyA5CS8qIC9kZXYvc25kcHJvYyBmb3IgcHJvZ3JhbW1hYmxlIGRldmljZXMgKi8KKyNkZWZpbmUgU05EX0RFVl9QU1MJU05EX0RFVl9TTkRQUk9DCisKKyNkZWZpbmUgRFNQX0RFRkFVTFRfU1BFRUQJODAwMAorCisjZGVmaW5lIE9OCQkxCisjZGVmaW5lIE9GRgkJMAorCisjZGVmaW5lIE1BWF9BVURJT19ERVYJNQorI2RlZmluZSBNQVhfTUlYRVJfREVWCTIKKyNkZWZpbmUgTUFYX1NZTlRIX0RFVgkzCisjZGVmaW5lIE1BWF9NSURJX0RFVgk2CisjZGVmaW5lIE1BWF9USU1FUl9ERVYJMwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL2NvbmZpZy5jIGIvYXJjaC9tNjhrL2F0YXJpL2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNjFkMmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvYXRhcmkvY29uZmlnLmMKQEAgLTAsMCArMSw3MjYgQEAKKy8qCisgKiAgbGludXgvYXJjaC9tNjhrL2F0YXJpL2NvbmZpZy5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NCBCam9lcm4gQnJhdWVsCisgKgorICogIDUvMi85NCBSb21hbiBIb2RlazoKKyAqICAgIEFkZGVkIHNldHRpbmcgb2YgdGltZV9hZGogdG8gZ2V0IGEgYmV0dGVyIGNsb2NrLgorICoKKyAqICA1LzE0Lzk0IFJvbWFuIEhvZGVrOgorICogICAgZ2V0dG9kKCkgZm9yIFRUCisgKgorICogIDUvMTUvOTQgUm9tYW4gSG9kZWs6CisgKiAgICBoYXJkX3Jlc2V0X25vdygpIGZvciBBdGFyaSAoYW5kIG90aGVycz8pCisgKgorICogIDk0LzEyLzMwIEFuZHJlYXMgU2Nod2FiOgorICogICAgYXRhcmlfc2NoZWRfaW5pdCBmaXhlZCB0byBnZXQgcHJlY2lzZSBjbG9jay4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgYXRhcmkgc3R1ZmYKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+CisKKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vYXRhcmlody5oPgorI2luY2x1ZGUgPGFzbS9hdGFyaWludHMuaD4KKyNpbmNsdWRlIDxhc20vYXRhcmlfc3RyYW0uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vaHd0ZXN0Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK3VfbG9uZyBhdGFyaV9tY2hfY29va2llOwordV9sb25nIGF0YXJpX21jaF90eXBlOworc3RydWN0IGF0YXJpX2h3X3ByZXNlbnQgYXRhcmlfaHdfcHJlc2VudDsKK3VfbG9uZyBhdGFyaV9zd2l0Y2hlczsKK2ludCBhdGFyaV9kb250X3RvdWNoX2Zsb3BweV9zZWxlY3Q7CitpbnQgYXRhcmlfcnRjX3llYXJfb2Zmc2V0OworCisvKiBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzICovCitzdGF0aWMgdm9pZCBhdGFyaV9yZXNldCggdm9pZCApOworI2lmZGVmIENPTkZJR19BVEFSSV9GTE9QUFkKK2V4dGVybiB2b2lkIGF0YXJpX2Zsb3BweV9zZXR1cChjaGFyICosIGludCAqKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgYXRhcmlfZ2V0X21vZGVsKGNoYXIgKm1vZGVsKTsKK3N0YXRpYyBpbnQgYXRhcmlfZ2V0X2hhcmR3YXJlX2xpc3QoY2hhciAqYnVmZmVyKTsKKworLyogYXRhcmkgc3BlY2lmaWMgaXJxIGZ1bmN0aW9ucyAqLworZXh0ZXJuIHZvaWQgYXRhcmlfaW5pdF9JUlEgKHZvaWQpOworZXh0ZXJuIGludCBhdGFyaV9yZXF1ZXN0X2lycSAodW5zaWduZWQgaW50IGlycSwgaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpOworZXh0ZXJuIHZvaWQgYXRhcmlfZnJlZV9pcnEgKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCk7CitleHRlcm4gdm9pZCBhdGFyaV9lbmFibGVfaXJxICh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgYXRhcmlfZGlzYWJsZV9pcnEgKHVuc2lnbmVkIGludCk7CitleHRlcm4gaW50IHNob3dfYXRhcmlfaW50ZXJydXB0cyAoc3RydWN0IHNlcV9maWxlICosIHZvaWQgKik7CitleHRlcm4gdm9pZCBhdGFyaV9ta3NvdW5kKCB1bnNpZ25lZCBpbnQgY291bnQsIHVuc2lnbmVkIGludCB0aWNrcyApOworI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKK3N0YXRpYyB2b2lkIGF0YXJpX2hlYXJ0YmVhdCggaW50IG9uICk7CisjZW5kaWYKKworLyogYXRhcmkgc3BlY2lmaWMgdGltZXIgZnVuY3Rpb25zIChpbiB0aW1lLmMpICovCitleHRlcm4gdm9pZCBhdGFyaV9zY2hlZF9pbml0KGlycXJldHVybl90ICgqKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXRhcmlfZ2V0dGltZW9mZnNldCAodm9pZCk7CitleHRlcm4gaW50IGF0YXJpX21zdGVfaHdjbGsgKGludCwgc3RydWN0IHJ0Y190aW1lICopOworZXh0ZXJuIGludCBhdGFyaV90dF9od2NsayAoaW50LCBzdHJ1Y3QgcnRjX3RpbWUgKik7CitleHRlcm4gaW50IGF0YXJpX21zdGVfc2V0X2Nsb2NrX21tc3MgKHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIGludCBhdGFyaV90dF9zZXRfY2xvY2tfbW1zcyAodW5zaWduZWQgbG9uZyk7CisKKy8qIGF0YXJpIHNwZWNpZmljIGRlYnVnIGZ1bmN0aW9ucyAoaW4gZGVidWcuYykgKi8KK2V4dGVybiB2b2lkIGF0YXJpX2RlYnVnX2luaXQodm9pZCk7CisKKworLyogSSd2ZSBtb3ZlZCBod3JlZ19wcmVzZW50KCkgYW5kIGh3cmVnX3ByZXNlbnRfYnl3cml0ZSgpIG91dCBpbnRvCisgKiBtbS9od3Rlc3QuYywgdG8gYXZvaWQgaGF2aW5nIG11bHRpcGxlIGNvcGllcyBvZiB0aGUgc2FtZSByb3V0aW5lCisgKiBpbiB0aGUga2VybmVsIFtJIHdhbnRlZCB0aGVtIGluIGhwMzAwIGFuZCB0aGV5IHdlcmUgYWxyZWFkeSB1c2VkCisgKiBpbiB0aGUgbnVidXMgY29kZS4gTkI6IEkgZG9uJ3QgaGF2ZSBhbiBBdGFyaSBzbyB0aGlzIG1pZ2h0IChqdXN0CisgKiBjb25jZWl2YWJseSkgYnJlYWsgc29tZXRoaW5nLgorICogSSd2ZSBwcmVzZXJ2ZWQgdGhlICNpZiAwIHZlcnNpb24gb2YgaHdyZWdfcHJlc2VudF9ieXdyaXRlKCkgaGVyZQorICogZm9yIHBvc3Rlcml0eS4KKyAqICAgLS0gUGV0ZXIgTWF5ZGVsbCA8cG1heWRlbGxAY2hpYXJrLmdyZWVuZW5kLm9yZy51az4sIDA1LzE5OTgKKyAqLworCisjaWYgMAorc3RhdGljIGludCBfX2luaXQKK2h3cmVnX3ByZXNlbnRfYnl3cml0ZSh2b2xhdGlsZSB2b2lkICpyZWdwLCB1bnNpZ25lZCBjaGFyIHZhbCkKK3sKKyAgICBpbnQJCXJldDsKKyAgICBsb25nCXNhdmVfc3AsIHNhdmVfdmJyOworICAgIHN0YXRpYyBsb25nIHRtcF92ZWN0b3JzWzNdID0geyBbMl0gPSAobG9uZykmJmFmdGVyX3Rlc3QgfTsKKworICAgIF9fYXNtX18gX192b2xhdGlsZV9fCisJKAkibW92ZWMJJS92YnIsJTJcblx0IgkvKiBzYXZlIHZiciB2YWx1ZSAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgIm1vdmVjCSU0LCUvdmJyXG5cdCIJLyogc2V0IHVwIHRlbXBvcmFyeSB2ZWN0b3JzICAqLworCQkibW92ZWwJJS9zcCwlMVxuXHQiCS8qIHNhdmUgc3AgICAgICAgICAgICAgICAgICAgKi8KKwkJIm1vdmVxCSMwLCUwXG5cdCIJLyogYXNzdW1lIG5vdCBwcmVzZW50ICAgICAgICAqLworCQkibW92ZWIJJTUsJTNAXG5cdCIJLyogd3JpdGUgdGhlIGhhcmR3YXJlIHJlZyAgICAqLworCQkiY21wYgklM0AsJTVcblx0IgkvKiBjb21wYXJlIGl0ICAgICAgICAgICAgICAgICovCisJCSJzZXEJJTAiCQkvKiBjb21lcyBoZXJlIG9ubHkgaWYgcmVnICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXMgcHJlc2VudCAgICAgICAgICAgICAgICAqLworCQk6ICI9ZCYiIChyZXQpLCAiPXImIiAoc2F2ZV9zcCksICI9ciYiIChzYXZlX3ZicikKKwkJOiAiYSIgKHJlZ3ApLCAiciIgKHRtcF92ZWN0b3JzKSwgImQiICh2YWwpCisgICAgICAgICAgICAgICAgKTsKKyAgYWZ0ZXJfdGVzdDoKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXworICAgICAgKAkibW92ZWwJJTAsJS9zcFxuXHQiCQkvKiByZXN0b3JlIHNwICAgICAgICAgICAgICAgICovCisgICAgICAgICJtb3ZlYwklMSwlL3ZiciIJCQkvKiByZXN0b3JlIHZiciAgICAgICAgICAgICAgICovCisgICAgICAgIDogOiAiciIgKHNhdmVfc3ApLCAiciIgKHNhdmVfdmJyKSA6ICJzcCIKKwkpOworCisgICAgcmV0dXJuKCByZXQgKTsKK30KKyNlbmRpZgorCisKKy8qICsrcm9tYW46IFRoaXMgaXMgYSBtb3JlIGVsYWJvcmF0ZSB0ZXN0IGZvciBhbiBTQ0MgY2hpcCwgc2luY2UgdGhlIHBsYWluCisgKiBNZWR1c2EgYm9hcmQgZ2VuZXJhdGVzIERUQUNLIGF0IHRoZSBTQ0MncyBzdGFuZGFyZCBhZGRyZXNzZXMsIGJ1dCBhIFNDQworICogYm9hcmQgaW4gdGhlIE1lZHVzYSBpcyBwb3NzaWJsZS4gQWxzbywgdGhlIGFkZHJlc3NlcyB3aGVyZSB0aGUgU1RfRVNDQworICogcmVzaWRlcyBnZW5lcmF0ZSBEVEFDSyB3aXRob3V0IHRoZSBjaGlwLCB0b28uCisgKiBUaGUgbWV0aG9kIGlzIHRvIHdyaXRlIHZhbHVlcyBpbnRvIHRoZSBpbnRlcnJ1cHQgdmVjdG9yIHJlZ2lzdGVyLCB0aGF0CisgKiBzaG91bGQgYmUgcmVhZGFibGUgd2l0aG91dCB0cm91YmxlIChmcm9tIGNoYW5uZWwgQSEpLgorICovCisKK3N0YXRpYyBpbnQgX19pbml0IHNjY190ZXN0KCB2b2xhdGlsZSBjaGFyICpjdGxhICkKK3sKKwlpZiAoIWh3cmVnX3ByZXNlbnQoIGN0bGEgKSkKKwkJcmV0dXJuKCAwICk7CisJTUZQREVMQVkoKTsKKworCSpjdGxhID0gMjsgTUZQREVMQVkoKTsKKwkqY3RsYSA9IDB4NDA7IE1GUERFTEFZKCk7CisKKwkqY3RsYSA9IDI7IE1GUERFTEFZKCk7CisJaWYgKCpjdGxhICE9IDB4NDApIHJldHVybiggMCApOworCU1GUERFTEFZKCk7CisKKwkqY3RsYSA9IDI7IE1GUERFTEFZKCk7CisJKmN0bGEgPSAweDYwOyBNRlBERUxBWSgpOworCisJKmN0bGEgPSAyOyBNRlBERUxBWSgpOworCWlmICgqY3RsYSAhPSAweDYwKSByZXR1cm4oIDAgKTsKKworCXJldHVybiggMSApOworfQorCisKKyAgICAvKgorICAgICAqICBQYXJzZSBhbiBBdGFyaS1zcGVjaWZpYyByZWNvcmQgaW4gdGhlIGJvb3RpbmZvCisgICAgICovCisKK2ludCBfX2luaXQgYXRhcmlfcGFyc2VfYm9vdGluZm8oY29uc3Qgc3RydWN0IGJpX3JlY29yZCAqcmVjb3JkKQoreworICAgIGludCB1bmtub3duID0gMDsKKyAgICBjb25zdCB1X2xvbmcgKmRhdGEgPSByZWNvcmQtPmRhdGE7CisKKyAgICBzd2l0Y2ggKHJlY29yZC0+dGFnKSB7CisJY2FzZSBCSV9BVEFSSV9NQ0hfQ09PS0lFOgorCSAgICBhdGFyaV9tY2hfY29va2llID0gKmRhdGE7CisJICAgIGJyZWFrOworCWNhc2UgQklfQVRBUklfTUNIX1RZUEU6CisJICAgIGF0YXJpX21jaF90eXBlID0gKmRhdGE7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIHVua25vd24gPSAxOworICAgIH0KKyAgICByZXR1cm4odW5rbm93bik7Cit9CisKKworLyogUGFyc2UgdGhlIEF0YXJpLXNwZWNpZmljIHN3aXRjaGVzPSBvcHRpb24uICovCit2b2lkIF9faW5pdCBhdGFyaV9zd2l0Y2hlc19zZXR1cCggY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBsZW4gKQoreworICAgIGNoYXIgc3dpdGNoZXNbbGVuKzFdOworICAgIGNoYXIgKnA7CisgICAgaW50IG92c2Nfc2hpZnQ7CisgICAgY2hhciAqYXJncyA9IHN3aXRjaGVzOworCisgICAgLyogY29weSBzdHJpbmcgdG8gbG9jYWwgYXJyYXksIHN0cnNlcCB3b3JrcyBkZXN0cnVjdGl2ZWx5Li4uICovCisgICAgc3RybGNweSggc3dpdGNoZXMsIHN0ciwgc2l6ZW9mKHN3aXRjaGVzKSApOworICAgIGF0YXJpX3N3aXRjaGVzID0gMDsKKworICAgIC8qIHBhcnNlIHRoZSBvcHRpb25zICovCisgICAgd2hpbGUgKChwID0gc3Ryc2VwKCZhcmdzLCAiLCIpKSAhPSBOVUxMKSB7CisJaWYgKCEqcCkgY29udGludWU7CisJb3ZzY19zaGlmdCA9IDA7CisJaWYgKHN0cm5jbXAoIHAsICJvdl8iLCAzICkgPT0gMCkgeworCSAgICBwICs9IDM7CisJICAgIG92c2Nfc2hpZnQgPSBBVEFSSV9TV0lUQ0hfT1ZTQ19TSElGVDsKKwl9CisKKwlpZiAoc3RyY21wKCBwLCAiaWtiZCIgKSA9PSAwKSB7CisJICAgIC8qIFJUUyBsaW5lIG9mIElLQkQgQUNJQSAqLworCSAgICBhdGFyaV9zd2l0Y2hlcyB8PSBBVEFSSV9TV0lUQ0hfSUtCRCA8PCBvdnNjX3NoaWZ0OworCX0KKwllbHNlIGlmIChzdHJjbXAoIHAsICJtaWRpIiApID09IDApIHsKKwkgICAgLyogUlRTIGxpbmUgb2YgTUlESSBBQ0lBICovCisJICAgIGF0YXJpX3N3aXRjaGVzIHw9IEFUQVJJX1NXSVRDSF9NSURJIDw8IG92c2Nfc2hpZnQ7CisJfQorCWVsc2UgaWYgKHN0cmNtcCggcCwgInNuZDYiICkgPT0gMCkgeworCSAgICBhdGFyaV9zd2l0Y2hlcyB8PSBBVEFSSV9TV0lUQ0hfU05ENiA8PCBvdnNjX3NoaWZ0OworCX0KKwllbHNlIGlmIChzdHJjbXAoIHAsICJzbmQ3IiApID09IDApIHsKKwkgICAgYXRhcmlfc3dpdGNoZXMgfD0gQVRBUklfU1dJVENIX1NORDcgPDwgb3ZzY19zaGlmdDsKKwl9CisgICAgfQorfQorCisKKyAgICAvKgorICAgICAqICBTZXR1cCB0aGUgQXRhcmkgY29uZmlndXJhdGlvbiBpbmZvCisgICAgICovCisKK3ZvaWQgX19pbml0IGNvbmZpZ19hdGFyaSh2b2lkKQoreworICAgIHVuc2lnbmVkIHNob3J0IHRvc192ZXJzaW9uOworCisgICAgbWVtc2V0KCZhdGFyaV9od19wcmVzZW50LCAwLCBzaXplb2YoYXRhcmlfaHdfcHJlc2VudCkpOworCisgICAgYXRhcmlfZGVidWdfaW5pdCgpOworCisgICAgaW9wb3J0X3Jlc291cmNlLmVuZCAgPSAweEZGRkZGRkZGOyAgLyogQ2hhbmdlIHNpemUgb2YgSS9PIHNwYWNlIGZyb20gNjRLQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIDRHQi4gKi8KKworICAgIG1hY2hfc2NoZWRfaW5pdCAgICAgID0gYXRhcmlfc2NoZWRfaW5pdDsKKyAgICBtYWNoX2luaXRfSVJRICAgICAgICA9IGF0YXJpX2luaXRfSVJROworICAgIG1hY2hfcmVxdWVzdF9pcnEgICAgID0gYXRhcmlfcmVxdWVzdF9pcnE7CisgICAgbWFjaF9mcmVlX2lycSAgICAgICAgPSBhdGFyaV9mcmVlX2lycTsKKyAgICBlbmFibGVfaXJxICAgICAgICAgICA9IGF0YXJpX2VuYWJsZV9pcnE7CisgICAgZGlzYWJsZV9pcnEgICAgICAgICAgPSBhdGFyaV9kaXNhYmxlX2lycTsKKyAgICBtYWNoX2dldF9tb2RlbAkgPSBhdGFyaV9nZXRfbW9kZWw7CisgICAgbWFjaF9nZXRfaGFyZHdhcmVfbGlzdCA9IGF0YXJpX2dldF9oYXJkd2FyZV9saXN0OworICAgIG1hY2hfZ2V0X2lycV9saXN0CSA9IHNob3dfYXRhcmlfaW50ZXJydXB0czsKKyAgICBtYWNoX2dldHRpbWVvZmZzZXQgICA9IGF0YXJpX2dldHRpbWVvZmZzZXQ7CisgICAgbWFjaF9yZXNldCAgICAgICAgICAgPSBhdGFyaV9yZXNldDsKKyNpZmRlZiBDT05GSUdfQVRBUklfRkxPUFBZCisgICAgbWFjaF9mbG9wcHlfc2V0dXAJID0gYXRhcmlfZmxvcHB5X3NldHVwOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0RVTU1ZX0NPTlNPTEUKKyAgICBjb25zd2l0Y2hwCSAgICAgICAgID0gJmR1bW15X2NvbjsKKyNlbmRpZgorICAgIG1hY2hfbWF4X2RtYV9hZGRyZXNzID0gMHhmZmZmZmY7CisjaWYgZGVmaW5lZChDT05GSUdfSU5QVVRfTTY4S19CRUVQKSB8fCBkZWZpbmVkKENPTkZJR19JTlBVVF9NNjhLX0JFRVBfTU9EVUxFKQorICAgIG1hY2hfYmVlcCAgICAgICAgICA9IGF0YXJpX21rc291bmQ7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCisgICAgbWFjaF9oZWFydGJlYXQgPSBhdGFyaV9oZWFydGJlYXQ7CisjZW5kaWYKKworICAgIC8qIFNldCBzd2l0Y2hlcyBhcyByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIgKi8KKyAgICBpZiAoYXRhcmlfc3dpdGNoZXMgJiBBVEFSSV9TV0lUQ0hfSUtCRCkKKwlhY2lhLmtleV9jdHJsID0gQUNJQV9ESVY2NCB8IEFDSUFfRDhOMVMgfCBBQ0lBX1JIVElEOworICAgIGlmIChhdGFyaV9zd2l0Y2hlcyAmIEFUQVJJX1NXSVRDSF9NSURJKQorCWFjaWEubWlkX2N0cmwgPSBBQ0lBX0RJVjE2IHwgQUNJQV9EOE4xUyB8IEFDSUFfUkhUSUQ7CisgICAgaWYgKGF0YXJpX3N3aXRjaGVzICYgKEFUQVJJX1NXSVRDSF9TTkQ2fEFUQVJJX1NXSVRDSF9TTkQ3KSkgeworCXNvdW5kX3ltLnJkX2RhdGFfcmVnX3NlbCA9IDE0OworCXNvdW5kX3ltLndkX2RhdGEgPSBzb3VuZF95bS5yZF9kYXRhX3JlZ19zZWwgfAorCQkJICAgKChhdGFyaV9zd2l0Y2hlcyZBVEFSSV9TV0lUQ0hfU05ENikgPyAweDQwIDogMCkgfAorCQkJICAgKChhdGFyaV9zd2l0Y2hlcyZBVEFSSV9TV0lUQ0hfU05ENykgPyAweDgwIDogMCk7CisgICAgfQorCisgICAgLyogKytiam9lcm46CisgICAgICogRGV0ZXJtaW5lIGhhcmR3YXJlIHByZXNlbnQKKyAgICAgKi8KKworICAgIHByaW50ayggIkF0YXJpIGhhcmR3YXJlIGZvdW5kOiAiICk7CisgICAgaWYgKE1BQ0hfSVNfTUVEVVNBIHx8IE1BQ0hfSVNfSEFERVMpIHsKKyAgICAgICAgLyogVGhlcmUncyBubyBBdGFyaSB2aWRlbyBoYXJkd2FyZSBvbiB0aGUgTWVkdXNhLCBidXQgYWxsIHRoZQorICAgICAgICAgKiBhZGRyZXNzZXMgYmVsb3cgZ2VuZXJhdGUgYSBEVEFDSyBzbyBubyBidXMgZXJyb3Igb2NjdXJzISAqLworICAgIH0KKyAgICBlbHNlIGlmIChod3JlZ19wcmVzZW50KCBmMDMwX3hyZWcgKSkgeworCUFUQVJJSFdfU0VUKFZJREVMX1NISUZURVIpOworICAgICAgICBwcmludGsoICJWSURFTCAiICk7CisgICAgICAgIC8qIFRoaXMgaXMgYSB0ZW1wb3JhcnkgaGFjazogSWYgdGhlcmUgaXMgRmFsY29uIHZpZGVvCisgICAgICAgICAqIGhhcmR3YXJlLCB3ZSBhc3N1bWUgdGhhdCB0aGUgU1QtRE1BIHNlcnZlcyBTQ1NJIGluc3RlYWQgb2YKKyAgICAgICAgICogQUNTSS4gSW4gdGhlIGZ1dHVyZSwgdGhlcmUgc2hvdWxkIGJlIGEgYmV0dGVyIG1ldGhvZCBmb3IKKyAgICAgICAgICogdGhpcy4uLgorICAgICAgICAgKi8KKwlBVEFSSUhXX1NFVChTVF9TQ1NJKTsKKyAgICAgICAgcHJpbnRrKCAiU1RETUEtU0NTSSAiICk7CisgICAgfQorICAgIGVsc2UgaWYgKGh3cmVnX3ByZXNlbnQoIHR0X3BhbGV0dGUgKSkgeworCUFUQVJJSFdfU0VUKFRUX1NISUZURVIpOworICAgICAgICBwcmludGsoICJUVF9TSElGVEVSICIgKTsKKyAgICB9CisgICAgZWxzZSBpZiAoaHdyZWdfcHJlc2VudCggJnNoaWZ0ZXIuYmFzX2hpICkpIHsKKyAgICAgICAgaWYgKGh3cmVnX3ByZXNlbnQoICZzaGlmdGVyLmJhc19sbyApICYmCisJICAgIChzaGlmdGVyLmJhc19sbyA9IDB4MGFhdSwgc2hpZnRlci5iYXNfbG8gPT0gMHgwYWF1KSkgeworCSAgICBBVEFSSUhXX1NFVChFWFREX1NISUZURVIpOworICAgICAgICAgICAgcHJpbnRrKCAiRVhURF9TSElGVEVSICIgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKwkgICAgQVRBUklIV19TRVQoU1RORF9TSElGVEVSKTsKKyAgICAgICAgICAgIHByaW50ayggIlNUTkRfU0hJRlRFUiAiICk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGh3cmVnX3ByZXNlbnQoICZtZnAucGFyX2R0X3JlZyApKSB7CisJQVRBUklIV19TRVQoU1RfTUZQKTsKKyAgICAgICAgcHJpbnRrKCAiU1RfTUZQICIgKTsKKyAgICB9CisgICAgaWYgKGh3cmVnX3ByZXNlbnQoICZ0dF9tZnAucGFyX2R0X3JlZyApKSB7CisJQVRBUklIV19TRVQoVFRfTUZQKTsKKyAgICAgICAgcHJpbnRrKCAiVFRfTUZQICIgKTsKKyAgICB9CisgICAgaWYgKGh3cmVnX3ByZXNlbnQoICZ0dF9zY3NpX2RtYS5kbWFfYWRkcl9oaSApKSB7CisJQVRBUklIV19TRVQoU0NTSV9ETUEpOworICAgICAgICBwcmludGsoICJUVF9TQ1NJX0RNQSAiICk7CisgICAgfQorICAgIGlmICghTUFDSF9JU19IQURFUyAmJiBod3JlZ19wcmVzZW50KCAmc3RfZG1hLmRtYV9oaSApKSB7CisJQVRBUklIV19TRVQoU1RORF9ETUEpOworICAgICAgICBwcmludGsoICJTVE5EX0RNQSAiICk7CisgICAgfQorICAgIGlmIChNQUNIX0lTX01FRFVTQSB8fCAvKiBUaGUgU1QtRE1BIGFkZHJlc3MgcmVnaXN0ZXJzIGFyZW4ndCByZWFkYWJsZQorCQkJICAgKiBvbiBhbGwgTWVkdXNhcywgc28gdGhlIHRlc3QgYmVsb3cgbWF5IGZhaWwgKi8KKyAgICAgICAgKGh3cmVnX3ByZXNlbnQoICZzdF9kbWEuZG1hX3ZoaSApICYmCisgICAgICAgICAoc3RfZG1hLmRtYV92aGkgPSAweDU1KSAmJiAoc3RfZG1hLmRtYV9oaSA9IDB4YWEpICYmCisgICAgICAgICBzdF9kbWEuZG1hX3ZoaSA9PSAweDU1ICYmIHN0X2RtYS5kbWFfaGkgPT0gMHhhYSAmJgorICAgICAgICAgKHN0X2RtYS5kbWFfdmhpID0gMHhhYSkgJiYgKHN0X2RtYS5kbWFfaGkgPSAweDU1KSAmJgorICAgICAgICAgc3RfZG1hLmRtYV92aGkgPT0gMHhhYSAmJiBzdF9kbWEuZG1hX2hpID09IDB4NTUpKSB7CisJQVRBUklIV19TRVQoRVhURF9ETUEpOworICAgICAgICBwcmludGsoICJFWFREX0RNQSAiICk7CisgICAgfQorICAgIGlmIChod3JlZ19wcmVzZW50KCAmdHRfc2NzaS5zY3NpX2RhdGEgKSkgeworCUFUQVJJSFdfU0VUKFRUX1NDU0kpOworICAgICAgICBwcmludGsoICJUVF9TQ1NJICIgKTsKKyAgICB9CisgICAgaWYgKGh3cmVnX3ByZXNlbnQoICZzb3VuZF95bS5yZF9kYXRhX3JlZ19zZWwgKSkgeworCUFUQVJJSFdfU0VUKFlNXzIxNDkpOworICAgICAgICBwcmludGsoICJZTTIxNDkgIiApOworICAgIH0KKyAgICBpZiAoIU1BQ0hfSVNfTUVEVVNBICYmICFNQUNIX0lTX0hBREVTICYmCisJaHdyZWdfcHJlc2VudCggJnR0X2RtYXNuZC5jdHJsICkpIHsKKwlBVEFSSUhXX1NFVChQQ01fOEJJVCk7CisgICAgICAgIHByaW50ayggIlBDTSAiICk7CisgICAgfQorICAgIGlmICghTUFDSF9JU19IQURFUyAmJiBod3JlZ19wcmVzZW50KCAmZmFsY29uX2NvZGVjLnVudXNlZDUgKSkgeworCUFUQVJJSFdfU0VUKENPREVDKTsKKyAgICAgICAgcHJpbnRrKCAiQ09ERUMgIiApOworICAgIH0KKyAgICBpZiAoaHdyZWdfcHJlc2VudCggJmRzcDU2a19ob3N0X2ludGVyZmFjZS5pY3IgKSkgeworCUFUQVJJSFdfU0VUKERTUDU2Syk7CisgICAgICAgIHByaW50ayggIkRTUDU2SyAiICk7CisgICAgfQorICAgIGlmIChod3JlZ19wcmVzZW50KCAmdHRfc2NjX2RtYS5kbWFfY3RybCApICYmCisjaWYgMAorCS8qIFRoaXMgdGVzdCBzdWNrcyEgV2hvIGtub3dzIHNvbWUgYmV0dGVyPyAqLworCSh0dF9zY2NfZG1hLmRtYV9jdHJsID0gMHgwMSwgKHR0X3NjY19kbWEuZG1hX2N0cmwgJiAxKSA9PSAxKSAmJgorCSh0dF9zY2NfZG1hLmRtYV9jdHJsID0gMHgwMCwgKHR0X3NjY19kbWEuZG1hX2N0cmwgJiAxKSA9PSAwKQorI2Vsc2UKKwkhTUFDSF9JU19NRURVU0EgJiYgIU1BQ0hfSVNfSEFERVMKKyNlbmRpZgorCSkgeworCUFUQVJJSFdfU0VUKFNDQ19ETUEpOworICAgICAgICBwcmludGsoICJTQ0NfRE1BICIgKTsKKyAgICB9CisgICAgaWYgKHNjY190ZXN0KCAmc2NjLmNoYV9hX2N0cmwgKSkgeworCUFUQVJJSFdfU0VUKFNDQyk7CisgICAgICAgIHByaW50ayggIlNDQyAiICk7CisgICAgfQorICAgIGlmIChzY2NfdGVzdCggJnN0X2VzY2MuY2hhX2JfY3RybCApKSB7CisJQVRBUklIV19TRVQoIFNUX0VTQ0MgKTsKKwlwcmludGsoICJTVF9FU0NDICIgKTsKKyAgICB9CisgICAgaWYgKE1BQ0hfSVNfSEFERVMpCisgICAgeworICAgICAgICBBVEFSSUhXX1NFVCggVk1FICk7CisgICAgICAgIHByaW50ayggIlZNRSAiICk7CisgICAgfQorICAgIGVsc2UgaWYgKGh3cmVnX3ByZXNlbnQoICZ0dF9zY3Uuc3lzX21hc2sgKSkgeworCUFUQVJJSFdfU0VUKFNDVSk7CisJLyogQXNzdW1lIGEgVk1FIGJ1cyBpZiB0aGVyZSdzIGEgU0NVICovCisJQVRBUklIV19TRVQoIFZNRSApOworICAgICAgICBwcmludGsoICJWTUUgU0NVICIgKTsKKyAgICB9CisgICAgaWYgKGh3cmVnX3ByZXNlbnQoICh2b2lkICopKDB4ZmZmZjkyMTApICkpIHsKKwlBVEFSSUhXX1NFVChBTkFMT0dfSk9ZKTsKKyAgICAgICAgcHJpbnRrKCAiQU5BTE9HX0pPWSAiICk7CisgICAgfQorICAgIGlmICghTUFDSF9JU19IQURFUyAmJiBod3JlZ19wcmVzZW50KCBibGl0dGVyLmhhbGZ0b25lICkpIHsKKwlBVEFSSUhXX1NFVChCTElUVEVSKTsKKyAgICAgICAgcHJpbnRrKCAiQkxJVFRFUiAiICk7CisgICAgfQorICAgIGlmIChod3JlZ19wcmVzZW50KCh2b2lkICopMHhmZmYwMDAzOSkpIHsKKwlBVEFSSUhXX1NFVChJREUpOworICAgICAgICBwcmludGsoICJJREUgIiApOworICAgIH0KKyNpZiAxIC8qIFRoaXMgbWF5YmUgd3JvbmcgKi8KKyAgICBpZiAoIU1BQ0hfSVNfTUVEVVNBICYmICFNQUNIX0lTX0hBREVTICYmCisJaHdyZWdfcHJlc2VudCggJnR0X21pY3Jvd2lyZS5kYXRhICkgJiYKKwlod3JlZ19wcmVzZW50KCAmdHRfbWljcm93aXJlLm1hc2sgKSAmJgorCSh0dF9taWNyb3dpcmUubWFzayA9IDB4N2ZmLAorCSB1ZGVsYXkoMSksCisJIHR0X21pY3Jvd2lyZS5kYXRhID0gTVdfTE0xOTkyX1BTR19ISUdIIHwgTVdfTE0xOTkyX0FERFIsCisJIHVkZWxheSgxKSwKKwkgdHRfbWljcm93aXJlLmRhdGEgIT0gMCkpIHsKKwlBVEFSSUhXX1NFVChNSUNST1dJUkUpOworCXdoaWxlICh0dF9taWNyb3dpcmUubWFzayAhPSAweDdmZikgOworICAgICAgICBwcmludGsoICJNSUNST1dJUkUgIiApOworICAgIH0KKyNlbmRpZgorICAgIGlmIChod3JlZ19wcmVzZW50KCAmdHRfcnRjLnJlZ3NlbCApKSB7CisJQVRBUklIV19TRVQoVFRfQ0xLKTsKKyAgICAgICAgcHJpbnRrKCAiVFRfQ0xLICIgKTsKKyAgICAgICAgbWFjaF9od2NsayA9IGF0YXJpX3R0X2h3Y2xrOworICAgICAgICBtYWNoX3NldF9jbG9ja19tbXNzID0gYXRhcmlfdHRfc2V0X2Nsb2NrX21tc3M7CisgICAgfQorICAgIGlmICghTUFDSF9JU19IQURFUyAmJiBod3JlZ19wcmVzZW50KCAmbXN0ZV9ydGMuc2VjX29uZXMpKSB7CisJQVRBUklIV19TRVQoTVNURV9DTEspOworICAgICAgICBwcmludGsoICJNU1RFX0NMSyAiKTsKKyAgICAgICAgbWFjaF9od2NsayA9IGF0YXJpX21zdGVfaHdjbGs7CisgICAgICAgIG1hY2hfc2V0X2Nsb2NrX21tc3MgPSBhdGFyaV9tc3RlX3NldF9jbG9ja19tbXNzOworICAgIH0KKyAgICBpZiAoIU1BQ0hfSVNfTUVEVVNBICYmICFNQUNIX0lTX0hBREVTICYmCisJaHdyZWdfcHJlc2VudCggJmRtYV93ZC5mZGNfc3BlZWQgKSAmJgorCWh3cmVnX3dyaXRlKCAmZG1hX3dkLmZkY19zcGVlZCwgMCApKSB7CisJICAgIEFUQVJJSFdfU0VUKEZEQ1NQRUVEKTsKKwkgICAgcHJpbnRrKCAiRkRDX1NQRUVEICIpOworICAgIH0KKyAgICBpZiAoIU1BQ0hfSVNfSEFERVMgJiYgIUFUQVJJSFdfUFJFU0VOVChTVF9TQ1NJKSkgeworCUFUQVJJSFdfU0VUKEFDU0kpOworICAgICAgICBwcmludGsoICJBQ1NJICIgKTsKKyAgICB9CisgICAgcHJpbnRrKCJcbiIpOworCisgICAgaWYgKENQVV9JU18wNDBfT1JfMDYwKQorICAgICAgICAvKiBOb3cgaXQgc2VlbXMgdG8gYmUgc2FmZSB0byB0dXJuIG9mIHRoZSB0dDAgdHJhbnNwYXJlbnQKKyAgICAgICAgICogdHJhbnNsYXRpb24gKHRoZSBvbmUgdGhhdCBtdXN0IG5vdCBiZSB0dXJuZWQgb2ZmIGluCisgICAgICAgICAqIGhlYWQuUy4uLikKKyAgICAgICAgICovCisgICAgICAgIF9fYXNtX18gdm9sYXRpbGUgKCJtb3ZlcSAjMCwlL2QwXG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIi5jaGlwIDY4MDQwXG5cdCIKKwkJCSAgIm1vdmVjICUlZDAsJSVpdHQwXG5cdCIKKwkJCSAgIm1vdmVjICUlZDAsJSVkdHQwXG5cdCIKKwkJCSAgIi5jaGlwIDY4ayIKKwkJCQkJCSAgOiAvKiBubyBvdXRwdXRzICovCisJCQkJCQkgIDogLyogbm8gaW5wdXRzICovCisJCQkJCQkgIDogImQwIik7CisKKyAgICAvKiBhbGxvY2F0b3IgZm9yIG1lbW9yeSB0aGF0IG11c3QgcmVzaWRlIGluIHN0LXJhbSAqLworICAgIGF0YXJpX3N0cmFtX2luaXQgKCk7CisKKyAgICAvKiBTZXQgdXAgYSBtYXBwaW5nIGZvciB0aGUgVk1FYnVzIGFkZHJlc3MgcmVnaW9uOgorICAgICAqCisgICAgICogVk1FIGlzIGVpdGhlciBhdCBwaHlzLiAweGZleHh4eHh4IChUVCkgb3IgMHhhMDAwMDAuLjB4ZGZmZmZmCisgICAgICogKE1lZ2FTVEUpIEluIGJvdGggY2FzZXMsIHRoZSB3aG9sZSAxNiBNQiBjaHVuayBpcyBtYXBwZWQgYXQKKyAgICAgKiAweGZlMDAwMDAwIHZpcnQuLCBiZWNhdXNlIHRoaXMgY2FuIGJlIGRvbmUgd2l0aCBhIHNpbmdsZQorICAgICAqIHRyYW5zcGFyZW50IHRyYW5zbGF0aW9uLiBPbiB0aGUgNjgwNDAsIGxvdHMgb2Ygb2Z0ZW4gdW51c2VkCisgICAgICogcGFnZSB0YWJsZXMgd291bGQgYmUgbmVlZGVkIG90aGVyd2lzZS4gT24gYSBNZWdhU1RFIG9yIHNpbWlsYXIsCisgICAgICogdGhlIGhpZ2hlc3QgYnl0ZSBpcyBzdHJpcHBlZCBvZmYgYnkgaGFyZHdhcmUgZHVlIHRvIHRoZSAyNCBiaXQKKyAgICAgKiBkZXNpZ24gb2YgdGhlIGJ1cy4KKyAgICAgKi8KKworICAgIGlmIChDUFVfSVNfMDIwX09SXzAzMCkgeworICAgICAgICB1bnNpZ25lZCBsb25nCXR0MV92YWw7CisgICAgICAgIHR0MV92YWwgPSAweGZlMDA4NTQzOwkvKiBUcmFuc2xhdGUgMHhmZXh4eHh4eCwgZW5hYmxlLCBjYWNoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbmhpYml0LCByZWFkIGFuZCB3cml0ZSwgRkRDIG1hc2sgPSAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBGREMgdmFsID0gNCAtPiBTdXBlcnZpc29yIG9ubHkgKi8KKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAiLmNoaXAgNjgwMzBcblx0IgorCQkJCSJwbW92ZQklMEAsJS90dDFcblx0IgorCQkJCSIuY2hpcCA2OGsiCisJCQkJOiA6ICJhIiAoJnR0MV92YWwpICk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXworICAgICAgICAgICAgKCAibW92ZWwgJTAsJS9kMFxuXHQiCisJICAgICAgIi5jaGlwIDY4MDQwXG5cdCIKKwkgICAgICAibW92ZWMgJSVkMCwlJWl0dDFcblx0IgorCSAgICAgICJtb3ZlYyAlJWQwLCUlZHR0MVxuXHQiCisJICAgICAgIi5jaGlwIDY4ayIKKyAgICAgICAgICAgICAgOgorICAgICAgICAgICAgICA6ICJnIiAoMHhmZTAwYTA0MCkJLyogVHJhbnNsYXRlIDB4ZmV4eHh4eHgsIGVuYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzdXBlcnZpc29yIG9ubHksIG5vbi1jYWNoZWFibGUvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2VyaWFsaXplZCwgd3JpdGFibGUgKi8KKyAgICAgICAgICAgICAgOiAiZDAiICk7CisKKyAgICB9CisKKyAgICAvKiBGZXRjaCB0b3MgdmVyc2lvbiBhdCBQaHlzaWNhbCAyICovCisgICAgLyogV2UgbXkgbm90IGJlIGFibGUgdG8gYWNjZXNzIHRoaXMgYWRkcmVzcyBpZiB0aGUga2VybmVsIGlzCisgICAgICAgbG9hZGVkIHRvIHN0IHJhbSwgc2luY2UgdGhlIGZpcnN0IHBhZ2UgaXMgdW5tYXBwZWQuICBPbiB0aGUKKyAgICAgICBNZWR1c2EgdGhpcyBpcyBhbHdheXMgdGhlIGNhc2UgYW5kIHRoZXJlIGlzIG5vdGhpbmcgd2UgY2FuIGRvCisgICAgICAgYWJvdXQgdGhpcywgc28gd2UganVzdCBhc3N1bWUgdGhlIHNtYWxsZXIgb2Zmc2V0LiAgRm9yIHRoZSBUVAorICAgICAgIHdlIHVzZSB0aGUgZmFjdCB0aGF0IGluIGhlYWQuUyB3ZSBoYXZlIHNldCB1cCBhIG1hcHBpbmcKKyAgICAgICAweEZGeHh4eHh4IC0+IDB4MDB4eHh4eHgsIHNvIHRoYXQgdGhlIGZpcnN0IDE2TUIgaXMgYWNjZXNzaWJsZQorICAgICAgIGluIHRoZSBsYXN0IDE2TUIgb2YgdGhlIGFkZHJlc3Mgc3BhY2UuICovCisgICAgdG9zX3ZlcnNpb24gPSAoTUFDSF9JU19NRURVU0EgfHwgTUFDSF9JU19IQURFUykgPworCQkgIDB4ZmZmIDogKih1bnNpZ25lZCBzaG9ydCAqKTB4ZmYwMDAwMDI7CisgICAgYXRhcmlfcnRjX3llYXJfb2Zmc2V0ID0gKHRvc192ZXJzaW9uIDwgMHgzMDYpID8gNzAgOiA2ODsKK30KKworI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKK3N0YXRpYyB2b2lkIGF0YXJpX2hlYXJ0YmVhdCggaW50IG9uICkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIHRtcDsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCisgICAgaWYgKGF0YXJpX2RvbnRfdG91Y2hfZmxvcHB5X3NlbGVjdCkKKwlyZXR1cm47CisKKyAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisgICAgc291bmRfeW0ucmRfZGF0YV9yZWdfc2VsID0gMTQ7IC8qIFNlbGVjdCBQU0cgUG9ydCBBICovCisgICAgdG1wID0gc291bmRfeW0ucmRfZGF0YV9yZWdfc2VsOworICAgIHNvdW5kX3ltLndkX2RhdGEgPSBvbiA/ICh0bXAgJiB+MHgwMikgOiAodG1wIHwgMHgwMik7CisgICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorI2VuZGlmCisKKy8qICsrcm9tYW46CisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgcmVzZXQgb24gbWFjaGluZXMgdGhhdCBsYWNrIHRoZSBhYmlsaXR5IHRvCisgKiBhc3NlcnQgdGhlIHByb2Nlc3NvcidzIF9SRVNFVCBzaWduYWwgc29tZWhvdyB2aWEgaGFyZHdhcmUuIEl0IGlzCisgKiBiYXNlZCBvbiB0aGUgZmFjdCB0aGF0IHlvdSBjYW4gZmluZCB0aGUgaW5pdGlhbCBTUCBhbmQgUEMgdmFsdWVzCisgKiBhZnRlciBhIHJlc2V0IGF0IHBoeXNpY2FsIGFkZHJlc3NlcyAwIGFuZCA0LiBUaGlzIHdvcmtzIHByZXR0eSB3ZWxsCisgKiBmb3IgQXRhcmkgbWFjaGluZXMsIHNpbmNlIHRoZSBsb3dlc3QgOCBieXRlcyBvZiBwaHlzaWNhbCBtZW1vcnkgYXJlCisgKiByZWFsbHkgUk9NIChtYXBwZWQgYnkgaGFyZHdhcmUpLiBGb3Igb3RoZXIgNjgweDAgbWFjaGluZXM6IGRvbid0CisgKiBrbm93IGlmIGl0IHdvcmtzLi4uCisgKgorICogVG8gZ2V0IHRoZSB2YWx1ZXMgYXQgYWRkcmVzc2VzIDAgYW5kIDQsIHRoZSBNTVUgYmV0dGVyIGlzIHR1cm5lZAorICogb2ZmIGZpcnN0LiBBZnRlciB0aGF0LCB3ZSBoYXZlIHRvIGp1bXAgaW50byBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlCisgKiAodGhlIFBDIGJlZm9yZSB0aGUgcG1vdmUgc3RhdGVtZW50IHBvaW50cyB0byB0aGUgdmlydHVhbCBhZGRyZXNzIG9mCisgKiB0aGUgY29kZSkuIEdldHRpbmcgdGhhdCBwaHlzaWNhbCBhZGRyZXNzIGlzIG5vdCBoYXJkLCBidXQgdGhlIGNvZGUKKyAqIGJlY29tZXMgYSBiaXQgY29tcGxleCBzaW5jZSBJJ3ZlIHRyaWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBqdW1wCisgKiBzdGF0ZW1lbnQgYWZ0ZXIgdGhlIHBtb3ZlIGlzIGluIHRoZSBjYWNoZSBhbHJlYWR5IChvdGhlcndpc2UgdGhlCisgKiBwcm9jZXNzb3IgY2FuJ3QgZmV0Y2ggaXQhKS4gRm9yIHRoYXQsIHRoZSBjb2RlIGZpcnN0IGp1bXBzIHRvIHRoZQorICoganVtcCBzdGF0ZW1lbnQgd2l0aCB0aGUgKHZpcnR1YWwpIGFkZHJlc3Mgb2YgdGhlIHBtb3ZlIHNlY3Rpb24gaW4KKyAqIGFuIGFkZHJlc3MgcmVnaXN0ZXIgLiBUaGUganVtcCBzdGF0ZW1lbnQgaXMgc3VyZWx5IGluIHRoZSBjYWNoZQorICogbm93LiBBZnRlciB0aGF0LCB0aGF0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIHJlc2V0IGNvZGUgaXMgbG9hZGVkCisgKiBpbnRvIHRoZSBzYW1lIGFkZHJlc3MgcmVnaXN0ZXIsIHBtb3ZlIGlzIGRvbmUgYW5kIHRoZSBzYW1lIGp1bXAKKyAqIHN0YXRlbWVudHMgZ29lcyB0byB0aGUgcmVzZXQgY29kZS4gU2luY2UgdGhlcmUgYXJlIG5vdCBtYW55CisgKiBzdGF0ZW1lbnRzIGJldHdlZW4gdGhlIHR3byBqdW1wcywgSSBob3BlIGl0IHN0YXlzIGluIHRoZSBjYWNoZS4KKyAqCisgKiBUaGUgQyBjb2RlIG1ha2VzIGhlYXZ5IHVzZSBvZiB0aGUgR0NDIGZlYXR1cmVzIHRoYXQgeW91IGNhbiBnZXQgdGhlCisgKiBhZGRyZXNzIG9mIGEgQyBsYWJlbC4gTm8gaG9wZSB0byBjb21waWxlIHRoaXMgd2l0aCBhbm90aGVyIGNvbXBpbGVyCisgKiB0aGFuIEdDQyEKKyAqLworCisvKiArK2FuZHJlYXM6IG5vIG5lZWQgZm9yIGNvbXBsaWNhdGVkIGNvZGUsIGp1c3QgZGVwZW5kIG9uIHByZWZldGNoICovCisKK3N0YXRpYyB2b2lkIGF0YXJpX3Jlc2V0ICh2b2lkKQoreworICAgIGxvbmcgdGNfdmFsID0gMDsKKyAgICBsb25nIHJlc2V0X2FkZHI7CisKKyAgICAvKiBPbiB0aGUgTWVkdXNhLCBwaHlzLiAweDQgbWF5IGNvbnRhaW4gZ2FyYmFnZSBiZWNhdXNlIGl0J3Mgbm8KKyAgICAgICBST00uICBTZWUgYWJvdmUgZm9yIGV4cGxhbmF0aW9uIHdoeSB3ZSBjYW5ub3QgdXNlIFBUT1YoNCkuICovCisgICAgcmVzZXRfYWRkciA9IE1BQ0hfSVNfSEFERVMgPyAweDdmZTAwMDMwIDoKKyAgICAgICAgICAgICAgICAgTUFDSF9JU19NRURVU0EgfHwgTUFDSF9JU19BQjQwID8gMHhlMDAwMzAgOgorCQkgKih1bnNpZ25lZCBsb25nICopIDB4ZmYwMDAwMDQ7CisKKyAgICAvKiByZXNldCBBQ0lBIGZvciBzd2l0Y2ggb2ZmIE92ZXJTY2FuLCBpZiBpdCdzIGFjdGl2ZSAqLworICAgIGlmIChhdGFyaV9zd2l0Y2hlcyAmIEFUQVJJX1NXSVRDSF9PVlNDX0lLQkQpCisJYWNpYS5rZXlfY3RybCA9IEFDSUFfUkVTRVQ7CisgICAgaWYgKGF0YXJpX3N3aXRjaGVzICYgQVRBUklfU1dJVENIX09WU0NfTUlESSkKKwlhY2lhLm1pZF9jdHJsID0gQUNJQV9SRVNFVDsKKworICAgIC8qIHByb2Nlc3NvciBpbmRlcGVuZGVudDogdHVybiBvZmYgaW50ZXJydXB0cyBhbmQgcmVzZXQgdGhlIFZCUjsKKyAgICAgKiB0aGUgY2FjaGVzIG11c3QgYmUgbGVmdCBlbmFibGVkLCBlbHNlIHByZWZldGNoaW5nIHRoZSBmaW5hbCBqdW1wCisgICAgICogaW5zdHJ1Y3Rpb24gZG9lc24ndCB3b3JrLiAqLworICAgIGxvY2FsX2lycV9kaXNhYmxlKCk7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18KKwkoIm1vdmVxCSMwLCUvZDBcblx0IgorCSAibW92ZWMJJS9kMCwlL3ZiciIKKwkgOiA6IDogImQwIiApOworCisgICAgaWYgKENQVV9JU18wNDBfT1JfMDYwKSB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgam1wX2FkZHIwNDAgPSB2aXJ0X3RvX3BoeXMoJiZqbXBfYWRkcl9sYWJlbDA0MCk7CisJaWYgKENQVV9JU18wNjApIHsKKwkgICAgLyogNjgwNjA6IGNsZWFyIFBDUiB0byB0dXJuIG9mZiBzdXBlcnNjYWxhciBvcGVyYXRpb24gKi8KKwkgICAgX19hc21fXyBfX3ZvbGF0aWxlX18KKwkJKCJtb3ZlcQkjMCwlL2QwXG5cdCIKKwkJICIuY2hpcCA2ODA2MFxuXHQiCisJCSAibW92ZWMgJSVkMCwlJXBjclxuXHQiCisJCSAiLmNoaXAgNjhrIgorCQkgOiA6IDogImQwIiApOworCX0KKworICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXworICAgICAgICAgICAgKCJtb3ZlbCAgICAlMCwlL2QwXG5cdCIKKyAgICAgICAgICAgICAiYW5kbCAgICAgIzB4ZmYwMDAwMDAsJS9kMFxuXHQiCisgICAgICAgICAgICAgIm9ydyAgICAgICMweGUwMjAsJS9kMFxuXHQiICAgLyogbWFwIDE2IE1CLCBlbmFibGUsIGNhY2hlYWJsZSAqLworICAgICAgICAgICAgICIuY2hpcCA2ODA0MFxuXHQiCisJICAgICAibW92ZWMgICAgJSVkMCwlJWl0dDBcblx0IgorICAgICAgICAgICAgICJtb3ZlYyAgICAlJWQwLCUlZHR0MFxuXHQiCisJICAgICAiLmNoaXAgNjhrXG5cdCIKKyAgICAgICAgICAgICAiam1wICAgJTBAXG5cdCIKKyAgICAgICAgICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKyAgICAgICAgICAgICA6ICJhIiAoam1wX2FkZHIwNDApCisgICAgICAgICAgICAgOiAiZDAiICk7CisgICAgICBqbXBfYWRkcl9sYWJlbDA0MDoKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18KKyAgICAgICAgICAoIm1vdmVxICMwLCUvZDBcblx0IgorCSAgICJub3Bcblx0IgorCSAgICIuY2hpcCA2ODA0MFxuXHQiCisJICAgImNpbnZhICUlYmNcblx0IgorCSAgICJub3Bcblx0IgorCSAgICJwZmx1c2hhXG5cdCIKKwkgICAibm9wXG5cdCIKKwkgICAibW92ZWMgJSVkMCwlJXRjXG5cdCIKKwkgICAibm9wXG5cdCIKKwkgICAvKiB0aGUgZm9sbG93aW5nIHNldHVwIG9mIHRyYW5zcGFyZW50IHRyYW5zbGF0aW9ucyBpcyBuZWVkZWQgb24gdGhlCisJICAgICogQWZ0ZXJidXJuZXIwNDAgdG8gc3VjY2Vzc2Z1bGx5IHJlYm9vdC4gT3RoZXIgbWFjaGluZXMgc2hvdWxkbid0CisJICAgICogY2FyZSBhYm91dCBhIGRpZmZlcmVudCB0dCByZWdzIHNldHVwLCB0aGV5IGFsc28gZGlkbid0IGNhcmUgaW4KKwkgICAgKiB0aGUgcGFzdCB0aGF0IHRoZSByZWdzIHdlcmVuJ3QgdHVybmVkIG9mZi4gKi8KKwkgICAibW92ZWwgIzB4ZmZjMDAwLCUlZDBcblx0IiAvKiB3aG9sZSBpbnNuIHNwYWNlIGNhY2hlYWJsZSAqLworCSAgICJtb3ZlYyAlJWQwLCUlaXR0MFxuXHQiCisJICAgIm1vdmVjICUlZDAsJSVpdHQxXG5cdCIKKwkgICAib3J3ICAgIzB4NDAsJS9kMFxuXHQiIC8qIHdob2xlIGRhdGEgc3BhY2Ugbm9uLWNhY2hlYWJsZS9zZXIuICovCisJICAgIm1vdmVjICUlZDAsJSVkdHQwXG5cdCIKKwkgICAibW92ZWMgJSVkMCwlJWR0dDFcblx0IgorCSAgICIuY2hpcCA2OGtcblx0IgorICAgICAgICAgICAiam1wICUwQCIKKyAgICAgICAgICAgOiAvKiBubyBvdXRwdXRzICovCisgICAgICAgICAgIDogImEiIChyZXNldF9hZGRyKQorICAgICAgICAgICA6ICJkMCIpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fCisgICAgICAgICAgICAoInBtb3ZlICUwQCwlL3RjXG5cdCIKKyAgICAgICAgICAgICAiam1wICUxQCIKKyAgICAgICAgICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKyAgICAgICAgICAgICA6ICJhIiAoJnRjX3ZhbCksICJhIiAocmVzZXRfYWRkcikpOworfQorCisKK3N0YXRpYyB2b2lkIGF0YXJpX2dldF9tb2RlbChjaGFyICptb2RlbCkKK3sKKyAgICBzdHJjcHkobW9kZWwsICJBdGFyaSAiKTsKKyAgICBzd2l0Y2ggKGF0YXJpX21jaF9jb29raWUgPj4gMTYpIHsKKwljYXNlIEFUQVJJX01DSF9TVDoKKwkgICAgaWYgKEFUQVJJSFdfUFJFU0VOVChNU1RFX0NMSykpCisJCXN0cmNhdCAobW9kZWwsICJNZWdhIFNUIik7CisJICAgIGVsc2UKKwkJc3RyY2F0IChtb2RlbCwgIlNUIik7CisJICAgIGJyZWFrOworCWNhc2UgQVRBUklfTUNIX1NURToKKwkgICAgaWYgKE1BQ0hfSVNfTVNURSkKKwkJc3RyY2F0IChtb2RlbCwgIk1lZ2EgU1RFIik7CisJICAgIGVsc2UKKwkJc3RyY2F0IChtb2RlbCwgIlNURSIpOworCSAgICBicmVhazsKKwljYXNlIEFUQVJJX01DSF9UVDoKKwkgICAgaWYgKE1BQ0hfSVNfTUVEVVNBKQorCQkvKiBNZWR1c2EgaGFzIFRUIF9NQ0ggY29va2llICovCisJCXN0cmNhdCAobW9kZWwsICJNZWR1c2EiKTsKKwkgICAgZWxzZSBpZiAoTUFDSF9JU19IQURFUykKKwkJc3RyY2F0KG1vZGVsLCAiSGFkZXMiKTsKKwkgICAgZWxzZQorCQlzdHJjYXQgKG1vZGVsLCAiVFQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSBBVEFSSV9NQ0hfRkFMQ09OOgorCSAgICBzdHJjYXQgKG1vZGVsLCAiRmFsY29uIik7CisJICAgIGlmIChNQUNIX0lTX0FCNDApCisJCXN0cmNhdCAobW9kZWwsICIgKHdpdGggQWZ0ZXJidXJuZXIwNDApIik7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIHNwcmludGYgKG1vZGVsICsgc3RybGVuIChtb2RlbCksICIodW5rbm93biBtYWNoIGNvb2tpZSAweCVseCkiLAorCQkgICAgIGF0YXJpX21jaF9jb29raWUpOworCSAgICBicmVhazsKKyAgICB9Cit9CisKKworc3RhdGljIGludCBhdGFyaV9nZXRfaGFyZHdhcmVfbGlzdChjaGFyICpidWZmZXIpCit7CisgICAgaW50IGxlbiA9IDAsIGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbTY4a19udW1fbWVtb3J5OyBpKyspCisJbGVuICs9IHNwcmludGYgKGJ1ZmZlcitsZW4sICJcdCUzbGQgTUIgYXQgMHglMDhseCAoJXMpXG4iLAorCQkJbTY4a19tZW1vcnlbaV0uc2l6ZSA+PiAyMCwgbTY4a19tZW1vcnlbaV0uYWRkciwKKwkJCShtNjhrX21lbW9yeVtpXS5hZGRyICYgMHhmZjAwMDAwMCA/CisJCQkgImFsdGVybmF0ZSBSQU0iIDogIlNULVJBTSIpKTsKKworI2RlZmluZSBBVEFSSUhXX0FOTk9VTkNFKG5hbWUsc3RyKQkJCQlcCisgICAgaWYgKEFUQVJJSFdfUFJFU0VOVChuYW1lKSkJCQlcCisJbGVuICs9IHNwcmludGYgKGJ1ZmZlciArIGxlbiwgIlx0JXNcbiIsIHN0cikKKworICAgIGxlbiArPSBzcHJpbnRmIChidWZmZXIgKyBsZW4sICJEZXRlY3RlZCBoYXJkd2FyZTpcbiIpOworICAgIEFUQVJJSFdfQU5OT1VOQ0UoU1RORF9TSElGVEVSLCAiU1QgU2hpZnRlciIpOworICAgIEFUQVJJSFdfQU5OT1VOQ0UoRVhURF9TSElGVEVSLCAiU1RlIFNoaWZ0ZXIiKTsKKyAgICBBVEFSSUhXX0FOTk9VTkNFKFRUX1NISUZURVIsICJUVCBTaGlmdGVyIik7CisgICAgQVRBUklIV19BTk5PVU5DRShWSURFTF9TSElGVEVSLCAiRmFsY29uIFNoaWZ0ZXIiKTsKKyAgICBBVEFSSUhXX0FOTk9VTkNFKFlNXzIxNDksICJQcm9ncmFtbWFibGUgU291bmQgR2VuZXJhdG9yIik7CisgICAgQVRBUklIV19BTk5PVU5DRShQQ01fOEJJVCwgIlBDTSA4IEJpdCBTb3VuZCIpOworICAgIEFUQVJJSFdfQU5OT1VOQ0UoQ09ERUMsICJDT0RFQyBTb3VuZCIpOworICAgIEFUQVJJSFdfQU5OT1VOQ0UoVFRfU0NTSSwgIlNDU0kgQ29udHJvbGxlciBOQ1I1MzgwIChUVCBzdHlsZSkiKTsKKyAgICBBVEFSSUhXX0FOTk9VTkNFKFNUX1NDU0ksICJTQ1NJIENvbnRyb2xsZXIgTkNSNTM4MCAoRmFsY29uIHN0eWxlKSIpOworICAgIEFUQVJJSFdfQU5OT1VOQ0UoQUNTSSwgIkFDU0kgSW50ZXJmYWNlIik7CisgICAgQVRBUklIV19BTk5PVU5DRShJREUsICJJREUgSW50ZXJmYWNlIik7CisgICAgQVRBUklIV19BTk5PVU5DRShGRENTUEVFRCwgIjgvMTYgTWh6IFN3aXRjaCBmb3IgRkRDIik7CisgICAgQVRBUklIV19BTk5PVU5DRShTVF9NRlAsICJNdWx0aSBGdW5jdGlvbiBQZXJpcGhlcmFsIE1GUCA2ODkwMSIpOworICAgIEFUQVJJSFdfQU5OT1VOQ0UoVFRfTUZQLCAiU2Vjb25kIE11bHRpIEZ1bmN0aW9uIFBlcmlwaGVyYWwgTUZQIDY4OTAxIik7CisgICAgQVRBUklIV19BTk5PVU5DRShTQ0MsICJTZXJpYWwgQ29tbXVuaWNhdGlvbnMgQ29udHJvbGxlciBTQ0MgODUzMCIpOworICAgIEFUQVJJSFdfQU5OT1VOQ0UoU1RfRVNDQywgIkV4dGVuZGVkIFNlcmlhbCBDb21tdW5pY2F0aW9ucyBDb250cm9sbGVyIFNDQyA4NTIzMCIpOworICAgIEFUQVJJSFdfQU5OT1VOQ0UoQU5BTE9HX0pPWSwgIlBhZGRsZSBJbnRlcmZhY2UiKTsKKyAgICBBVEFSSUhXX0FOTk9VTkNFKE1JQ1JPV0lSRSwgIk1JQ1JPV0lSRSh0bSkgSW50ZXJmYWNlIik7CisgICAgQVRBUklIV19BTk5PVU5DRShTVE5EX0RNQSwgIkRNQSBDb250cm9sbGVyICgyNCBiaXQpIik7CisgICAgQVRBUklIV19BTk5PVU5DRShFWFREX0RNQSwgIkRNQSBDb250cm9sbGVyICgzMiBiaXQpIik7CisgICAgQVRBUklIV19BTk5PVU5DRShTQ1NJX0RNQSwgIkRNQSBDb250cm9sbGVyIGZvciBOQ1I1MzgwIik7CisgICAgQVRBUklIV19BTk5PVU5DRShTQ0NfRE1BLCAiRE1BIENvbnRyb2xsZXIgZm9yIFNDQyIpOworICAgIEFUQVJJSFdfQU5OT1VOQ0UoVFRfQ0xLLCAiQ2xvY2sgQ2hpcCBNQzE0NjgxOEEiKTsKKyAgICBBVEFSSUhXX0FOTk9VTkNFKE1TVEVfQ0xLLCAiQ2xvY2sgQ2hpcCBSUDVDMTUiKTsKKyAgICBBVEFSSUhXX0FOTk9VTkNFKFNDVSwgIlN5c3RlbSBDb250cm9sIFVuaXQiKTsKKyAgICBBVEFSSUhXX0FOTk9VTkNFKEJMSVRURVIsICJCbGl0dGVyIik7CisgICAgQVRBUklIV19BTk5PVU5DRShWTUUsICJWTUUgQnVzIik7CisgICAgQVRBUklIV19BTk5PVU5DRShEU1A1NkssICJEU1A1NjAwMSBwcm9jZXNzb3IiKTsKKworICAgIHJldHVybihsZW4pOworfQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogIGMtaW5kZW50LWxldmVsOiA0CisgKiAgdGFiLXdpZHRoOiA4CisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jIGIvYXJjaC9tNjhrL2F0YXJpL2RlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNlMDVmNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jCkBAIC0wLDAgKzEsMzQ3IEBACisvKgorICogbGludXgvYXJjaC9tNjhrL2F0YXJpL2RlYnVnLmMKKyAqCisgKiBBdGFyaSBkZWJ1Z2dpbmcgYW5kIHNlcmlhbCBjb25zb2xlIHN0dWZmCisgKgorICogQXNzZW1ibGVkIG9mIHBhcnRzIG9mIGZvcm1lciBhdGFyaS9jb25maWcuYyA5Ny0xMi0xOCBieSBSb21hbiBIb2RlaworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxhc20vYXRhcmlody5oPgorI2luY2x1ZGUgPGFzbS9hdGFyaWludHMuaD4KKworZXh0ZXJuIGNoYXIgbTY4a19kZWJ1Z19kZXZpY2VbXTsKKworLyogRmxhZyB0aGF0IE1vZGVtMSBwb3J0IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgYW5kIHVzZWQgKi8KK2ludCBhdGFyaV9NRlBfaW5pdF9kb25lOworLyogRmxhZyB0aGF0IE1vZGVtMSBwb3J0IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgYW5kIHVzZWQgKi8KK2ludCBhdGFyaV9TQ0NfaW5pdF9kb25lOworLyogQ2FuIGJlIHNldCBzb21ld2hlcmUsIGlmIGEgU0NDIG1hc3RlciByZXNldCBoYXMgYWxyZWFkeSBiZSBkb25lIGFuZCBzaG91bGQKKyAqIG5vdCBiZSByZXBlYXRlZDsgdXNlZCBieSBrZ2RiICovCitpbnQgYXRhcmlfU0NDX3Jlc2V0X2RvbmU7CisKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSBhdGFyaV9jb25zb2xlX2RyaXZlciA9IHsKKwkubmFtZSA9CQkiZGVidWciLAorCS5mbGFncyA9CUNPTl9QUklOVEJVRkZFUiwKKwkuaW5kZXggPQktMSwKK307CisKKworc3RhdGljIGlubGluZSB2b2lkIGF0YV9tZnBfb3V0IChjaGFyIGMpCit7CisgICAgd2hpbGUgKCEobWZwLnRybl9zdGF0ICYgMHg4MCkpIC8qIHdhaXQgZm9yIHR4IGJ1ZiBlbXB0eSAqLworCWJhcnJpZXIgKCk7CisgICAgbWZwLnVzYXJ0X2R0YSA9IGM7Cit9CisKK3ZvaWQgYXRhcmlfbWZwX2NvbnNvbGVfd3JpdGUgKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqc3RyLAorCQkJICAgICAgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIHdoaWxlIChjb3VudC0tKSB7CisJaWYgKCpzdHIgPT0gJ1xuJykKKwkgICAgYXRhX21mcF9vdXQoICdccicgKTsKKwlhdGFfbWZwX291dCggKnN0cisrICk7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRhX3NjY19vdXQgKGNoYXIgYykKK3sKKyAgICBkbyB7CisJTUZQREVMQVkoKTsKKyAgICB9IHdoaWxlICghKHNjYy5jaGFfYl9jdHJsICYgMHgwNCkpOyAvKiB3YWl0IGZvciB0eCBidWYgZW1wdHkgKi8KKyAgICBNRlBERUxBWSgpOworICAgIHNjYy5jaGFfYl9kYXRhID0gYzsKK30KKwordm9pZCBhdGFyaV9zY2NfY29uc29sZV93cml0ZSAoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzdHIsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY291bnQpCit7CisgICAgd2hpbGUgKGNvdW50LS0pIHsKKwlpZiAoKnN0ciA9PSAnXG4nKQorCSAgICBhdGFfc2NjX291dCggJ1xyJyApOworCWF0YV9zY2Nfb3V0KCAqc3RyKysgKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGFfbWlkaV9vdXQgKGNoYXIgYykKK3sKKyAgICB3aGlsZSAoIShhY2lhLm1pZF9jdHJsICYgQUNJQV9URFJFKSkgLyogd2FpdCBmb3IgdHggYnVmIGVtcHR5ICovCisJYmFycmllciAoKTsKKyAgICBhY2lhLm1pZF9kYXRhID0gYzsKK30KKwordm9pZCBhdGFyaV9taWRpX2NvbnNvbGVfd3JpdGUgKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqc3RyLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICB3aGlsZSAoY291bnQtLSkgeworCWlmICgqc3RyID09ICdcbicpCisJICAgIGF0YV9taWRpX291dCggJ1xyJyApOworCWF0YV9taWRpX291dCggKnN0cisrICk7CisgICAgfQorfQorCitzdGF0aWMgaW50IGF0YV9wYXJfb3V0IChjaGFyIGMpCit7CisgICAgdW5zaWduZWQgY2hhciB0bXA7CisgICAgLyogVGhpcyBhIHNvbWUtc2Vjb25kcyB0aW1lb3V0IGluIGNhc2Ugbm8gcHJpbnRlciBpcyBjb25uZWN0ZWQgKi8KKyAgICB1bnNpZ25lZCBsb25nIGkgPSBsb29wc19wZXJfamlmZnkgPiAxID8gbG9vcHNfcGVyX2ppZmZ5IDogMTAwMDAwMDAvSFo7CisKKyAgICB3aGlsZSggKG1mcC5wYXJfZHRfcmVnICYgMSkgJiYgLS1pICkgLyogd2FpdCBmb3IgQlVTWSA9PSBMICovCisJOworICAgIGlmICghaSkgcmV0dXJuKCAwICk7CisKKyAgICBzb3VuZF95bS5yZF9kYXRhX3JlZ19zZWwgPSAxNTsgIC8qIHNlbGVjdCBwb3J0IEIgKi8KKyAgICBzb3VuZF95bS53ZF9kYXRhID0gYzsgICAgICAgICAgIC8qIHB1dCBjaGFyIG9udG8gcG9ydCAqLworICAgIHNvdW5kX3ltLnJkX2RhdGFfcmVnX3NlbCA9IDE0OyAgLyogc2VsZWN0IHBvcnQgQSAqLworICAgIHRtcCA9IHNvdW5kX3ltLnJkX2RhdGFfcmVnX3NlbDsKKyAgICBzb3VuZF95bS53ZF9kYXRhID0gdG1wICYgfjB4MjA7IC8qIHNldCBzdHJvYmUgTCAqLworICAgIE1GUERFTEFZKCk7ICAgICAgICAgICAgICAgICAgICAgLyogd2FpdCBhIGJpdCAqLworICAgIHNvdW5kX3ltLndkX2RhdGEgPSB0bXAgfCAweDIwOyAgLyogc2V0IHN0cm9iZSBIICovCisgICAgcmV0dXJuKCAxICk7Cit9CisKK3N0YXRpYyB2b2lkIGF0YXJpX3Bhcl9jb25zb2xlX3dyaXRlIChzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnN0ciwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICBzdGF0aWMgaW50IHByaW50ZXJfcHJlc2VudCA9IDE7CisKKyAgICBpZiAoIXByaW50ZXJfcHJlc2VudCkKKwlyZXR1cm47CisKKyAgICB3aGlsZSAoY291bnQtLSkgeworCWlmICgqc3RyID09ICdcbicpCisJICAgIGlmICghYXRhX3Bhcl9vdXQoICdccicgKSkgeworCQlwcmludGVyX3ByZXNlbnQgPSAwOworCQlyZXR1cm47CisJICAgIH0KKwlpZiAoIWF0YV9wYXJfb3V0KCAqc3RyKysgKSkgeworCSAgICBwcmludGVyX3ByZXNlbnQgPSAwOworCSAgICByZXR1cm47CisJfQorICAgIH0KK30KKworI2lmZGVmIENPTkZJR19TRVJJQUxfQ09OU09MRQoraW50IGF0YXJpX21mcF9jb25zb2xlX3dhaXRfa2V5KHN0cnVjdCBjb25zb2xlICpjbykKK3sKKyAgICB3aGlsZSggIShtZnAucmN2X3N0YXQgJiAweDgwKSApIC8qIHdhaXQgZm9yIHJ4IGJ1ZiBmaWxsZWQgKi8KKwliYXJyaWVyKCk7CisgICAgcmV0dXJuKCBtZnAudXNhcnRfZHRhICk7Cit9CisKK2ludCBhdGFyaV9zY2NfY29uc29sZV93YWl0X2tleShzdHJ1Y3QgY29uc29sZSAqY28pCit7CisgICAgZG8geworCU1GUERFTEFZKCk7CisgICAgfSB3aGlsZSggIShzY2MuY2hhX2JfY3RybCAmIDB4MDEpICk7IC8qIHdhaXQgZm9yIHJ4IGJ1ZiBmaWxsZWQgKi8KKyAgICBNRlBERUxBWSgpOworICAgIHJldHVybiggc2NjLmNoYV9iX2RhdGEgKTsKK30KKworaW50IGF0YXJpX21pZGlfY29uc29sZV93YWl0X2tleShzdHJ1Y3QgY29uc29sZSAqY28pCit7CisgICAgd2hpbGUoICEoYWNpYS5taWRfY3RybCAmIEFDSUFfUkRSRikgKSAvKiB3YWl0IGZvciByeCBidWYgZmlsbGVkICovCisJYmFycmllcigpOworICAgIHJldHVybiggYWNpYS5taWRfZGF0YSApOworfQorI2VuZGlmCisKKy8qIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBkbyBhIHF1aWNrJ24nZGlydHkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIE1GUCBvcgorICogU0NDIHNlcmlhbCBwb3J0cy4gVGhleSdyZSB1c2VkIGJ5IHRoZSBkZWJ1Z2dpbmcgaW50ZXJmYWNlLCBrZ2RiLCBhbmQgdGhlCisgKiBzZXJpYWwgY29uc29sZSBjb2RlLiAqLworI2lmbmRlZiBDT05GSUdfU0VSSUFMX0NPTlNPTEUKK3N0YXRpYyB2b2lkIF9faW5pdCBhdGFyaV9pbml0X21mcF9wb3J0KCBpbnQgY2ZsYWcgKQorI2Vsc2UKK3ZvaWQgYXRhcmlfaW5pdF9tZnBfcG9ydCggaW50IGNmbGFnICkKKyNlbmRpZgoreworICAgIC8qIHRpbWVyIHZhbHVlcyBmb3IgMTIwMC4uLjExNTIwMCBicHM7ID4gMzg0MDAgc2VsZWN0IDExMCwgMTM0LCBvciAxNTAKKyAgICAgKiBicHMsIHJlc3AuLCBhbmQgd29yayBvbmx5IGNvcnJlY3QgaWYgdGhlcmUncyBhIFJTVkUgb3IgUlNTUEVFRCAqLworICAgIHN0YXRpYyBpbnQgYmF1ZF90YWJsZVs5XSA9IHsgMTYsIDExLCA4LCA0LCAyLCAxLCAxNzUsIDE0MywgMTI4IH07CisgICAgaW50IGJhdWQgPSBjZmxhZyAmIENCQVVEOworICAgIGludCBwYXJpdHkgPSAoY2ZsYWcgJiBQQVJFTkIpID8gKChjZmxhZyAmIFBBUk9ERCkgPyAweDA0IDogMHgwNikgOiAwOworICAgIGludCBjc2l6ZSA9ICgoY2ZsYWcgJiBDU0laRSkgPT0gQ1M3KSA/IDB4MjAgOiAweDAwOworCisgICAgaWYgKGNmbGFnICYgQ0JBVURFWCkKKwliYXVkICs9IEIzODQwMDsKKyAgICBpZiAoYmF1ZCA8IEIxMjAwIHx8IGJhdWQgPiBCMzg0MDArMikKKwliYXVkID0gQjk2MDA7IC8qIHVzZSBkZWZhdWx0IDk2MDBicHMgZm9yIG5vbi1pbXBsZW1lbnRlZCByYXRlcyAqLworICAgIGJhdWQgLT0gQjEyMDA7IC8qIGJhdWRfdGFibGVbXSBzdGFydHMgYXQgMTIwMGJwcyAqLworCisgICAgbWZwLnRybl9zdGF0ICY9IH4weDAxOyAvKiBkaXNhYmxlIFRYICovCisgICAgbWZwLnVzYXJ0X2N0ciA9IHBhcml0eSB8IGNzaXplIHwgMHg4ODsgLyogMToxNiBjbGsgbW9kZSwgMSBzdG9wIGJpdCAqLworICAgIG1mcC50aW1fY3RfY2QgJj0gMHg3MDsgIC8qIHN0b3AgdGltZXIgRCAqLworICAgIG1mcC50aW1fZHRfZCA9IGJhdWRfdGFibGVbYmF1ZF07CisgICAgbWZwLnRpbV9jdF9jZCB8PSAweDAxOyAgLyogc3RhcnQgdGltZXIgRCwgMTo0ICovCisgICAgbWZwLnRybl9zdGF0IHw9IDB4MDE7ICAvKiBlbmFibGUgVFggKi8KKworICAgIGF0YXJpX01GUF9pbml0X2RvbmUgPSAxOworfQorCisjZGVmaW5lIFNDQ19XUklURShyZWcsdmFsKQkJCQlcCisgICAgZG8gewkJCQkJCVwKKwlzY2MuY2hhX2JfY3RybCA9IChyZWcpOwkJCQlcCisJTUZQREVMQVkoKTsJCQkJCVwKKwlzY2MuY2hhX2JfY3RybCA9ICh2YWwpOwkJCQlcCisJTUZQREVMQVkoKTsJCQkJCVwKKyAgICB9IHdoaWxlKDApCisKKy8qIGxvb3BzX3Blcl9qaWZmeSBpc24ndCBpbml0aWFsaXplZCB5ZXQsIHNvIHdlIGNhbid0IHVzZSB1ZGVsYXkoKS4gVGhpcyBkb2VzIGEKKyAqIGRlbGF5IG9mIH4gNjB1cy4gKi8KKyNkZWZpbmUgTE9OR19ERUxBWSgpCQkJCVwKKyAgICBkbyB7CQkJCQlcCisJaW50IGk7CQkJCQlcCisJZm9yKCBpID0gMTAwOyBpID4gMDsgLS1pICkJCVwKKwkgICAgTUZQREVMQVkoKTsJCQkJXAorICAgIH0gd2hpbGUoMCkKKworI2lmbmRlZiBDT05GSUdfU0VSSUFMX0NPTlNPTEUKK3N0YXRpYyB2b2lkIF9faW5pdCBhdGFyaV9pbml0X3NjY19wb3J0KCBpbnQgY2ZsYWcgKQorI2Vsc2UKK3ZvaWQgYXRhcmlfaW5pdF9zY2NfcG9ydCggaW50IGNmbGFnICkKKyNlbmRpZgoreworICAgIGV4dGVybiBpbnQgYXRhcmlfU0NDX3Jlc2V0X2RvbmU7CisgICAgc3RhdGljIGludCBjbGtzcmNfdGFibGVbOV0gPQorCS8qIHJlZyAxMTogMHg1MCA9IEJSRywgMHgwMCA9IFJUeEMsIDB4MjggPSBUUnhDICovCisJeyAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDAwLCAweDAwIH07CisgICAgc3RhdGljIGludCBicmdzcmNfdGFibGVbOV0gPQorCS8qIHJlZyAxNDogMCA9IFJUeEMsIDIgPSBQQ0xLICovCisJeyAyLCAyLCAyLCAyLCAyLCAyLCAwLCAyLCAyIH07CisgICAgc3RhdGljIGludCBjbGttb2RlX3RhYmxlWzldID0KKwkvKiByZWcgNDogMHg0MCA9IHgxNiwgMHg4MCA9IHgzMiwgMHhjMCA9IHg2NCAqLworCXsgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHg0MCwgMHhjMCwgMHg4MCB9OworICAgIHN0YXRpYyBpbnQgZGl2X3RhYmxlWzldID0KKwkvKiByZWcxMiAoQlJHIGxvdykgKi8KKwl7IDIwOCwgMTM4LCAxMDMsIDUwLCAyNCwgMTEsIDEsIDAsIDAgfTsKKworICAgIGludCBiYXVkID0gY2ZsYWcgJiBDQkFVRDsKKyAgICBpbnQgY2xrc3JjLCBjbGttb2RlLCBkaXYsIHJlZzMsIHJlZzU7CisKKyAgICBpZiAoY2ZsYWcgJiBDQkFVREVYKQorCWJhdWQgKz0gQjM4NDAwOworICAgIGlmIChiYXVkIDwgQjEyMDAgfHwgYmF1ZCA+IEIzODQwMCsyKQorCWJhdWQgPSBCOTYwMDsgLyogdXNlIGRlZmF1bHQgOTYwMGJwcyBmb3Igbm9uLWltcGxlbWVudGVkIHJhdGVzICovCisgICAgYmF1ZCAtPSBCMTIwMDsgLyogdGFibGVzIHN0YXJ0cyBhdCAxMjAwYnBzICovCisKKyAgICBjbGtzcmMgID0gY2xrc3JjX3RhYmxlW2JhdWRdOworICAgIGNsa21vZGUgPSBjbGttb2RlX3RhYmxlW2JhdWRdOworICAgIGRpdiAgICAgPSBkaXZfdGFibGVbYmF1ZF07CisgICAgaWYgKEFUQVJJSFdfUFJFU0VOVChUVF9NRlApICYmIGJhdWQgPj0gNikgeworCS8qIHNwZWNpYWwgdHJlYXRtZW50IGZvciBUVCwgd2hlcmUgcmF0ZXMgPj0gMzg0MDAgYXJlIGRvbmUgdmlhIFRSeEMgKi8KKwljbGtzcmMgPSAweDI4OyAvKiBUUnhDICovCisJY2xrbW9kZSA9IGJhdWQgPT0gNiA/IDB4YzAgOgorCQkgIGJhdWQgPT0gNyA/IDB4ODAgOiAvKiByZWFsbHkgNzY4MDBicHMgKi8KKwkJCSAgICAgIDB4NDA7ICAvKiByZWFsbHkgMTUzNjAwYnBzICovCisJZGl2ID0gMDsKKyAgICB9CisKKyAgICByZWczID0gKGNmbGFnICYgQ1NJWkUpID09IENTOCA/IDB4YzAgOiAweDQwOworICAgIHJlZzUgPSAoY2ZsYWcgJiBDU0laRSkgPT0gQ1M4ID8gMHg2MCA6IDB4MjAgfCAweDgyIC8qIGFzc2VydCBEVFIvUlRTICovOworCisgICAgKHZvaWQpc2NjLmNoYV9iX2N0cmw7CS8qIHJlc2V0IHJlZyBwb2ludGVyICovCisgICAgU0NDX1dSSVRFKCA5LCAweGMwICk7CS8qIHJlc2V0ICovCisgICAgTE9OR19ERUxBWSgpOwkJLyogZXh0cmEgZGVsYXkgYWZ0ZXIgV1I5IGFjY2VzcyAqLworICAgIFNDQ19XUklURSggNCwgKGNmbGFnICYgUEFSRU5CKSA/ICgoY2ZsYWcgJiBQQVJPREQpID8gMHgwMSA6IDB4MDMpIDogMCB8CisJCSAgMHgwNCAvKiAxIHN0b3BiaXQgKi8gfAorCQkgIGNsa21vZGUgKTsKKyAgICBTQ0NfV1JJVEUoIDMsIHJlZzMgKTsKKyAgICBTQ0NfV1JJVEUoIDUsIHJlZzUgKTsKKyAgICBTQ0NfV1JJVEUoIDksIDAgKTsJCS8qIG5vIGludGVycnVwdHMgKi8KKyAgICBMT05HX0RFTEFZKCk7CQkvKiBleHRyYSBkZWxheSBhZnRlciBXUjkgYWNjZXNzICovCisgICAgU0NDX1dSSVRFKCAxMCwgMCApOwkJLyogTlJaIG1vZGUgKi8KKyAgICBTQ0NfV1JJVEUoIDExLCBjbGtzcmMgKTsJLyogbWFpbiBjbG9jayBzb3VyY2UgKi8KKyAgICBTQ0NfV1JJVEUoIDEyLCBkaXYgKTsJLyogQlJHIHZhbHVlICovCisgICAgU0NDX1dSSVRFKCAxMywgMCApOwkJLyogQlJHIGhpZ2ggYnl0ZSAqLworICAgIFNDQ19XUklURSggMTQsIGJyZ3NyY190YWJsZVtiYXVkXSApOworICAgIFNDQ19XUklURSggMTQsIGJyZ3NyY190YWJsZVtiYXVkXSB8IChkaXYgPyAxIDogMCkgKTsKKyAgICBTQ0NfV1JJVEUoIDMsIHJlZzMgfCAxICk7CisgICAgU0NDX1dSSVRFKCA1LCByZWc1IHwgOCApOworCisgICAgYXRhcmlfU0NDX3Jlc2V0X2RvbmUgPSAxOworICAgIGF0YXJpX1NDQ19pbml0X2RvbmUgPSAxOworfQorCisjaWZuZGVmIENPTkZJR19TRVJJQUxfQ09OU09MRQorc3RhdGljIHZvaWQgX19pbml0IGF0YXJpX2luaXRfbWlkaV9wb3J0KCBpbnQgY2ZsYWcgKQorI2Vsc2UKK3ZvaWQgYXRhcmlfaW5pdF9taWRpX3BvcnQoIGludCBjZmxhZyApCisjZW5kaWYKK3sKKyAgICBpbnQgYmF1ZCA9IGNmbGFnICYgQ0JBVUQ7CisgICAgaW50IGNzaXplID0gKChjZmxhZyAmIENTSVpFKSA9PSBDUzgpID8gMHgxMCA6IDB4MDA7CisgICAgLyogd2FybmluZyA3TjEgaXNuJ3QgcG9zc2libGUhIChpbnN0ZWFkIDdPMiBpcyB1c2VkLi4uKSAqLworICAgIGludCBwYXJpdHkgPSAoY2ZsYWcgJiBQQVJFTkIpID8gKChjZmxhZyAmIFBBUk9ERCkgPyAweDBjIDogMHgwOCkgOiAweDA0OworICAgIGludCBkaXY7CisKKyAgICAvKiA0ODAwIHNlbGVjdHMgNzgxMi41LCAxMTUyMDAgc2VsZWN0cyA1MDAwMDAsIGFsbCBvdGhlciAoaW5jbC4gOTYwMCBhcworICAgICAqIGRlZmF1bHQpIHRoZSBzdGFuZGFyZCBNSURJIHNwZWVkIDMxMjUwLiAqLworICAgIGlmIChjZmxhZyAmIENCQVVERVgpCisJYmF1ZCArPSBCMzg0MDA7CisgICAgaWYgKGJhdWQgPT0gQjQ4MDApCisJZGl2ID0gQUNJQV9ESVY2NDsgLyogcmVhbGx5IDc4MTIuNSBicHMgKi8KKyAgICBlbHNlIGlmIChiYXVkID09IEIzODQwMCsyIC8qIDExNTIwMCAqLykKKwlkaXYgPSBBQ0lBX0RJVjE7IC8qIHJlYWxseSA1MDAga2JwcyAoZG9lcyB0aGF0IHdvcms/PykgKi8KKyAgICBlbHNlCisJZGl2ID0gQUNJQV9ESVYxNjsgLyogMzEyNTAgYnBzLCBzdGFuZGFyZCBmb3IgTUlESSAqLworCisgICAgLyogUlRTIGxvdywgaW50cyBkaXNhYmxlZCAqLworICAgIGFjaWEubWlkX2N0cmwgPSBkaXYgfCBjc2l6ZSB8IHBhcml0eSB8CisJCSAgICAoKGF0YXJpX3N3aXRjaGVzICYgQVRBUklfU1dJVENIX01JREkpID8KKwkJICAgICBBQ0lBX1JIVElEIDogQUNJQV9STFRJRCk7Cit9CisKK3ZvaWQgX19pbml0IGF0YXJpX2RlYnVnX2luaXQodm9pZCkKK3sKKyAgICBpZiAoIXN0cmNtcCggbTY4a19kZWJ1Z19kZXZpY2UsICJzZXIiICkpIHsKKwkvKiBkZWZhdWx0cyB0byBzZXIyIGZvciBhIEZhbGNvbiBhbmQgc2VyMSBvdGhlcndpc2UgKi8KKwlzdHJjcHkoIG02OGtfZGVidWdfZGV2aWNlLCBNQUNIX0lTX0ZBTENPTiA/ICJzZXIyIiA6ICJzZXIxIiApOworCisgICAgfQorCisgICAgaWYgKCFzdHJjbXAoIG02OGtfZGVidWdfZGV2aWNlLCAic2VyMSIgKSkgeworCS8qIFNULU1GUCBNb2RlbTEgc2VyaWFsIHBvcnQgKi8KKwlhdGFyaV9pbml0X21mcF9wb3J0KCBCOTYwMHxDUzggKTsKKwlhdGFyaV9jb25zb2xlX2RyaXZlci53cml0ZSA9IGF0YXJpX21mcF9jb25zb2xlX3dyaXRlOworICAgIH0KKyAgICBlbHNlIGlmICghc3RyY21wKCBtNjhrX2RlYnVnX2RldmljZSwgInNlcjIiICkpIHsKKwkvKiBTQ0MgTW9kZW0yIHNlcmlhbCBwb3J0ICovCisJYXRhcmlfaW5pdF9zY2NfcG9ydCggQjk2MDB8Q1M4ICk7CisJYXRhcmlfY29uc29sZV9kcml2ZXIud3JpdGUgPSBhdGFyaV9zY2NfY29uc29sZV93cml0ZTsKKyAgICB9CisgICAgZWxzZSBpZiAoIXN0cmNtcCggbTY4a19kZWJ1Z19kZXZpY2UsICJtaWRpIiApKSB7CisJLyogTUlESSBwb3J0ICovCisJYXRhcmlfaW5pdF9taWRpX3BvcnQoIEI5NjAwfENTOCApOworCWF0YXJpX2NvbnNvbGVfZHJpdmVyLndyaXRlID0gYXRhcmlfbWlkaV9jb25zb2xlX3dyaXRlOworICAgIH0KKyAgICBlbHNlIGlmICghc3RyY21wKCBtNjhrX2RlYnVnX2RldmljZSwgInBhciIgKSkgeworCS8qIHBhcmFsbGVsIHByaW50ZXIgKi8KKwlhdGFyaV90dXJub2ZmX2lycSggSVJRX01GUF9CVVNZICk7IC8qIGF2b2lkIGludHMgKi8KKwlzb3VuZF95bS5yZF9kYXRhX3JlZ19zZWwgPSA3OyAgLyogc2VsZWN0IG1peGVyIGNvbnRyb2wgKi8KKwlzb3VuZF95bS53ZF9kYXRhID0gMHhmZjsgICAgICAgLyogc291bmQgb2ZmLCBwb3J0cyBhcmUgb3V0cHV0ICovCisJc291bmRfeW0ucmRfZGF0YV9yZWdfc2VsID0gMTU7IC8qIHNlbGVjdCBwb3J0IEIgKi8KKwlzb3VuZF95bS53ZF9kYXRhID0gMDsgICAgICAgICAgLyogbm8gY2hhciAqLworCXNvdW5kX3ltLnJkX2RhdGFfcmVnX3NlbCA9IDE0OyAvKiBzZWxlY3QgcG9ydCBBICovCisJc291bmRfeW0ud2RfZGF0YSA9IHNvdW5kX3ltLnJkX2RhdGFfcmVnX3NlbCB8IDB4MjA7IC8qIHN0cm9iZSBIICovCisJYXRhcmlfY29uc29sZV9kcml2ZXIud3JpdGUgPSBhdGFyaV9wYXJfY29uc29sZV93cml0ZTsKKyAgICB9CisgICAgaWYgKGF0YXJpX2NvbnNvbGVfZHJpdmVyLndyaXRlKQorCXJlZ2lzdGVyX2NvbnNvbGUoJmF0YXJpX2NvbnNvbGVfZHJpdmVyKTsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqICBjLWluZGVudC1sZXZlbDogNAorICogIHRhYi13aWR0aDogOAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvaGFkZXMtcGNpLmMgYi9hcmNoL202OGsvYXRhcmkvaGFkZXMtcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg4OGRlYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9oYWRlcy1wY2kuYwpAQCAtMCwwICsxLDQ0NCBAQAorLyoKKyAqIGhhZGVzLXBjaS5jIC0gSGFyZHdhcmUgc3BlY2lmaWMgUENJIEJJT1MgZnVuY3Rpb25zIHRoZSBIYWRlcyBBdGFyaSBjbG9uZS4KKyAqCisgKiBXcml0dGVuIGJ5IFdvdXQgS2xhcmVuLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpZiAwCisjIGRlZmluZSBEQkdfREVWUyhhcmdzKQkJcHJpbnRrIGFyZ3MKKyNlbHNlCisjIGRlZmluZSBEQkdfREVWUyhhcmdzKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX0hBREVTKQorCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlIDxhc20vYXRhcmlody5oPgorI2luY2x1ZGUgPGFzbS9hdGFyaWludHMuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL3BjaS5oPgorCisjZGVmaW5lIEhBREVTX01FTV9CQVNFCQkweDgwMDAwMDAwCisjZGVmaW5lIEhBREVTX01FTV9TSVpFCQkweDIwMDAwMDAwCisjZGVmaW5lIEhBREVTX0NPTkZJR19CQVNFCTB4QTAwMDAwMDAKKyNkZWZpbmUgSEFERVNfQ09ORklHX1NJWkUJMHgxMDAwMDAwMAorI2RlZmluZSBIQURFU19JT19CQVNFCQkweEIwMDAwMDAwCisjZGVmaW5lIEhBREVTX0lPX1NJWkUJCTB4MTAwMDAwMDAKKyNkZWZpbmUgSEFERVNfVklSVF9JT19TSVpFCTB4MDAwMTAwMDAJLyogT25seSA2NGsgaXMgcmVtYXBwZWQgYW5kIGFjdHVhbGx5IHVzZWQuICovCisKKyNkZWZpbmUgTl9TTE9UUwkJCQk0CQkJLyogTnVtYmVyIG9mIFBDSSBzbG90cy4gKi8KKworc3RhdGljIGNvbnN0IGNoYXIgcGNpX21lbV9uYW1lW10gPSAiUENJIG1lbW9yeSBzcGFjZSI7CitzdGF0aWMgY29uc3QgY2hhciBwY2lfaW9fbmFtZVtdID0gIlBDSSBJL08gc3BhY2UiOworc3RhdGljIGNvbnN0IGNoYXIgcGNpX2NvbmZpZ19uYW1lW10gPSAiUENJIGNvbmZpZyBzcGFjZSI7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY29uZmlnX3NwYWNlID0geworICAgIC5uYW1lID0gcGNpX2NvbmZpZ19uYW1lLAorICAgIC5zdGFydCA9IEhBREVTX0NPTkZJR19CQVNFLAorICAgIC5lbmQgPSBIQURFU19DT05GSUdfQkFTRSArIEhBREVTX0NPTkZJR19TSVpFIC0gMQorfTsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW9fc3BhY2UgPSB7CisgICAgLm5hbWUgPSBwY2lfaW9fbmFtZSwKKyAgICAuc3RhcnQgPSBIQURFU19JT19CQVNFLAorICAgIC5lbmQgPSBIQURFU19JT19CQVNFICsgSEFERVNfSU9fU0laRSAtIDEKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIHBjaV9jb25mX2Jhc2VfcGh5c1tdID0geworICAgIDB4QTAwODAwMDAsIDB4QTAwNDAwMDAsIDB4QTAwMjAwMDAsIDB4QTAwMTAwMDAKK307CitzdGF0aWMgdW5zaWduZWQgbG9uZyBwY2lfY29uZl9iYXNlX3ZpcnRbTl9TTE9UU107CitzdGF0aWMgdW5zaWduZWQgbG9uZyBwY2lfaW9fYmFzZV92aXJ0OworCisvKgorICogc3RhdGljIHZvaWQgKm1rX2NvbmZfYWRkcih1bnNpZ25lZCBjaGFyIGJ1cywgdW5zaWduZWQgY2hhciBkZXZpY2VfZm4sCisgKgkJCSAgICAgdW5zaWduZWQgY2hhciB3aGVyZSkKKyAqCisgKiBDYWxjdWxhdGUgdGhlIGFkZHJlc3Mgb2YgdGhlIFBDSSBjb25maWd1cmF0aW9uIGFyZWEgb2YgdGhlIGdpdmVuCisgKiBkZXZpY2UuCisgKgorICogQlVHOiBib2FyZHMgd2l0aCBtdWx0aXBsZSBmdW5jdGlvbnMgYXJlIHByb2JhYmx5IG5vdCBjb3JyZWN0bHkKKyAqIHN1cHBvcnRlZC4KKyAqLworCitzdGF0aWMgdm9pZCAqbWtfY29uZl9hZGRyKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSkKK3sKKwlpbnQgZGV2aWNlID0gZGV2LT5kZXZmbiA+PiAzLCBmdW5jdGlvbiA9IGRldi0+ZGV2Zm4gJiA3OworCXZvaWQgKnJlc3VsdDsKKworCURCR19ERVZTKCgibWtfY29uZl9hZGRyKGJ1cz0lZCAsZGV2aWNlX2ZuPTB4JXgsIHdoZXJlPTB4JXgsIHBjaV9hZGRyPTB4JXApXG4iLAorCQkgIGRldi0+YnVzLT5udW1iZXIsIGRldi0+ZGV2Zm4sIHdoZXJlLCBwY2lfYWRkcikpOworCisJaWYgKGRldmljZSA+IDMpCisJeworCQlEQkdfREVWUygoIm1rX2NvbmZfYWRkcjogZGV2aWNlICglZCkgPiAzLCByZXR1cm5pbmcgTlVMTFxuIiwgZGV2aWNlKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChkZXYtPmJ1cy0+bnVtYmVyICE9IDApCisJeworCQlEQkdfREVWUygoIm1rX2NvbmZfYWRkcjogYnVzICglZCkgPiAwLCByZXR1cm5pbmcgTlVMTFxuIiwgZGV2aWNlKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJlc3VsdCA9ICh2b2lkICopIChwY2lfY29uZl9iYXNlX3ZpcnRbZGV2aWNlXSB8IChmdW5jdGlvbiA8PCA4KSB8ICh3aGVyZSkpOworCURCR19ERVZTKCgibWtfY29uZl9hZGRyOiByZXR1cm5pbmcgcGNpX2FkZHIgMHglbHhcbiIsICh1bnNpZ25lZCBsb25nKSByZXN1bHQpKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGhhZGVzX3JlYWRfY29uZmlnX2J5dGUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHdoZXJlLCB1OCAqdmFsdWUpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcGNpX2FkZHI7CisKKwkqdmFsdWUgPSAweGZmOworCisJaWYgKChwY2lfYWRkciA9ICh1bnNpZ25lZCBjaGFyICopIG1rX2NvbmZfYWRkcihkZXYsIHdoZXJlKSkgPT0gTlVMTCkKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCSp2YWx1ZSA9ICpwY2lfYWRkcjsKKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0YXRpYyBpbnQgaGFkZXNfcmVhZF9jb25maWdfd29yZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hlcmUsIHUxNiAqdmFsdWUpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnBjaV9hZGRyOworCisJKnZhbHVlID0gMHhmZmZmOworCisJaWYgKHdoZXJlICYgMHgxKQorCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOworCisJaWYgKChwY2lfYWRkciA9ICh1bnNpZ25lZCBzaG9ydCAqKSBta19jb25mX2FkZHIoZGV2LCB3aGVyZSkpID09IE5VTEwpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwkqdmFsdWUgPSBsZTE2X3RvX2NwdSgqcGNpX2FkZHIpOworCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIGludCBoYWRlc19yZWFkX2NvbmZpZ19kd29yZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hlcmUsIHUzMiAqdmFsdWUpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50ICpwY2lfYWRkcjsKKwl1bnNpZ25lZCBjaGFyIGhlYWRlcl90eXBlOworCWludCByZXN1bHQ7CisKKwkqdmFsdWUgPSAweGZmZmZmZmZmOworCisJaWYgKHdoZXJlICYgMHgzKQorCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOworCisJaWYgKChwY2lfYWRkciA9ICh1bnNpZ25lZCBpbnQgKikgbWtfY29uZl9hZGRyKGRldiwgd2hlcmUpKSA9PSBOVUxMKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJKnZhbHVlID0gbGUzMl90b19jcHUoKnBjaV9hZGRyKTsKKworCS8qCisJICogQ2hlY2sgaWYgdGhlIHZhbHVlIGlzIGFuIGFkZHJlc3Mgb24gdGhlIGJ1cy4gSWYgdHJ1ZSwgYWRkIHRoZQorCSAqIGJhc2UgYWRkcmVzcyBvZiB0aGUgUENJIG1lbW9yeSBvciBQQ0kgSS9PIGFyZWEgb24gdGhlIEhhZGVzLgorCSAqLworCisJaWYgKChyZXN1bHQgPSBoYWRlc19yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0hFQURFUl9UWVBFLAorCQkJCQkgICAgICZoZWFkZXJfdHlwZSkpICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCWlmICgoKHdoZXJlID49IFBDSV9CQVNFX0FERFJFU1NfMCkgJiYgKHdoZXJlIDw9IFBDSV9CQVNFX0FERFJFU1NfMSkpIHx8CisJICAgICgoaGVhZGVyX3R5cGUgIT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgJiYgKCh3aGVyZSA+PSBQQ0lfQkFTRV9BRERSRVNTXzIpICYmCisJCQkJCQkJICh3aGVyZSA8PSBQQ0lfQkFTRV9BRERSRVNTXzUpKSkpCisJeworCQlpZiAoKCp2YWx1ZSAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0UpID09IFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pCisJCXsKKwkJCS8qCisJCQkgKiBCYXNlIGFkZHJlc3MgcmVnaXN0ZXIgdGhhdCBjb250YWlucyBhbiBJL08gYWRkcmVzcy4gSWYgdGhlCisJCQkgKiBhZGRyZXNzIGlzIHZhbGlkIG9uIHRoZSBIYWRlcyAoMCA8PSAqdmFsdWUgPCBIQURFU19WSVJUX0lPX1NJWkUpLAorCQkJICogYWRkICdwY2lfaW9fYmFzZV92aXJ0JyB0byB0aGUgdmFsdWUuCisJCQkgKi8KKworCQkJaWYgKCp2YWx1ZSA8IEhBREVTX1ZJUlRfSU9fU0laRSkKKwkJCQkqdmFsdWUgKz0gcGNpX2lvX2Jhc2VfdmlydDsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBCYXNlIGFkZHJlc3MgcmVnaXN0ZXIgdGhhdCBjb250YWlucyBhbiBtZW1vcnkgYWRkcmVzcy4gSWYgdGhlCisJCQkgKiBhZGRyZXNzIGlzIHZhbGlkIG9uIHRoZSBIYWRlcyAoMCA8PSAqdmFsdWUgPCBIQURFU19NRU1fU0laRSksCisJCQkgKiBhZGQgSEFERVNfTUVNX0JBU0UgdG8gdGhlIHZhbHVlLgorCQkJICovCisKKwkJCWlmICgqdmFsdWUgPT0gMCkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIEJhc2UgYWRkcmVzcyBpcyAwLiBUZXN0IGlmIHRoaXMgYmFzZQorCQkJCSAqIGFkZHJlc3MgcmVnaXN0ZXIgaXMgdXNlZC4KKwkJCQkgKi8KKworCQkJCSpwY2lfYWRkciA9IDB4ZmZmZmZmZmY7CisJCQkJaWYgKCpwY2lfYWRkciAhPSAwKQorCQkJCXsKKwkJCQkJKnBjaV9hZGRyID0gKnZhbHVlOworCQkJCQlpZiAoKnZhbHVlIDwgSEFERVNfTUVNX1NJWkUpCisJCQkJCQkqdmFsdWUgKz0gSEFERVNfTUVNX0JBU0U7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmICgqdmFsdWUgPCBIQURFU19NRU1fU0laRSkKKwkJCQkJKnZhbHVlICs9IEhBREVTX01FTV9CQVNFOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIGludCBoYWRlc193cml0ZV9jb25maWdfYnl0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hlcmUsIHU4IHZhbHVlKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnBjaV9hZGRyOworCisJaWYgKChwY2lfYWRkciA9ICh1bnNpZ25lZCBjaGFyICopIG1rX2NvbmZfYWRkcihkZXYsIHdoZXJlKSkgPT0gTlVMTCkKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCSpwY2lfYWRkciA9IHZhbHVlOworCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIGludCBoYWRlc193cml0ZV9jb25maWdfd29yZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hlcmUsIHUxNiB2YWx1ZSkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqcGNpX2FkZHI7CisKKwlpZiAoKHBjaV9hZGRyID0gKHVuc2lnbmVkIHNob3J0ICopIG1rX2NvbmZfYWRkcihkZXYsIHdoZXJlKSkgPT0gTlVMTCkKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCSpwY2lfYWRkciA9IGNwdV90b19sZTE2KHZhbHVlKTsKKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0YXRpYyBpbnQgaGFkZXNfd3JpdGVfY29uZmlnX2R3b3JkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSwgdTMyIHZhbHVlKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqcGNpX2FkZHI7CisJdW5zaWduZWQgY2hhciBoZWFkZXJfdHlwZTsKKwlpbnQgcmVzdWx0OworCisJaWYgKChwY2lfYWRkciA9ICh1bnNpZ25lZCBpbnQgKikgbWtfY29uZl9hZGRyKGRldiwgd2hlcmUpKSA9PSBOVUxMKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGUgdmFsdWUgaXMgYW4gYWRkcmVzcyBvbiB0aGUgYnVzLiBJZiB0cnVlLCBzdWJ0cmFjdCB0aGUKKwkgKiBiYXNlIGFkZHJlc3Mgb2YgdGhlIFBDSSBtZW1vcnkgb3IgUENJIEkvTyBhcmVhIG9uIHRoZSBIYWRlcy4KKwkgKi8KKworCWlmICgocmVzdWx0ID0gaGFkZXNfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9IRUFERVJfVFlQRSwKKwkJCQkJICAgICAmaGVhZGVyX3R5cGUpKSAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpCisJCXJldHVybiByZXN1bHQ7CisKKwlpZiAoKCh3aGVyZSA+PSBQQ0lfQkFTRV9BRERSRVNTXzApICYmICh3aGVyZSA8PSBQQ0lfQkFTRV9BRERSRVNTXzEpKSB8fAorCSAgICAoKGhlYWRlcl90eXBlICE9IFBDSV9IRUFERVJfVFlQRV9CUklER0UpICYmICgod2hlcmUgPj0gUENJX0JBU0VfQUREUkVTU18yKSAmJgorCQkJCQkJCSAod2hlcmUgPD0gUENJX0JBU0VfQUREUkVTU181KSkpKQorCXsKKwkJaWYgKCh2YWx1ZSAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0UpID09CisJCSAgICBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPKQorCQl7CisJCQkvKgorCQkJICogSS9PIGFkZHJlc3MuIENoZWNrIGlmIHRoZSBhZGRyZXNzIGlzIHZhbGlkIGFkZHJlc3Mgb24KKwkJCSAqIHRoZSBIYWRlcyAocGNpX2lvX2Jhc2VfdmlydCA8PSB2YWx1ZSA8IHBjaV9pb19iYXNlX3ZpcnQgKworCQkJICogSEFERVNfVklSVF9JT19TSVpFKSBvciBpZiB0aGUgdmFsdWUgaXMgMHhmZmZmZmZmZi4gSWYgbm90CisJCQkgKiB0cnVlIGRvIG5vdCB3cml0ZSB0aGUgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyLiBJZiBpdCBpcyBhCisJCQkgKiB2YWxpZCBiYXNlIGFkZHJlc3Mgc3VidHJhY3QgJ3BjaV9pb19iYXNlX3ZpcnQnIGZyb20gdGhlIHZhbHVlLgorCQkJICovCisKKwkJCWlmICgodmFsdWUgPj0gcGNpX2lvX2Jhc2VfdmlydCkgJiYgKHZhbHVlIDwgKHBjaV9pb19iYXNlX3ZpcnQgKworCQkJCQkJCQkJCQkJCQkgSEFERVNfVklSVF9JT19TSVpFKSkpCisJCQkJdmFsdWUgLT0gcGNpX2lvX2Jhc2VfdmlydDsKKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAodmFsdWUgIT0gMHhmZmZmZmZmZikKKwkJCQkJcmV0dXJuIFBDSUJJT1NfU0VUX0ZBSUxFRDsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBNZW1vcnkgYWRkcmVzcy4gQ2hlY2sgaWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQgYWRkcmVzcyBvbgorCQkJICogdGhlIEhhZGVzIChIQURFU19NRU1fQkFTRSA8PSB2YWx1ZSA8IEhBREVTX01FTV9CQVNFICsgSEFERVNfTUVNX1NJWkUpIG9yCisJCQkgKiBpZiB0aGUgdmFsdWUgaXMgMHhmZmZmZmZmZi4gSWYgbm90IHRydWUgZG8gbm90IHdyaXRlCisJCQkgKiB0aGUgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyLiBJZiBpdCBpcyBhIHZhbGlkIGJhc2UgYWRkcmVzcworCQkJICogc3VidHJhY3QgSEFERVNfTUVNX0JBU0UgZnJvbSB0aGUgdmFsdWUuCisJCQkgKi8KKworCQkJaWYgKCh2YWx1ZSA+PSBIQURFU19NRU1fQkFTRSkgJiYgKHZhbHVlIDwgKEhBREVTX01FTV9CQVNFICsgSEFERVNfTUVNX1NJWkUpKSkKKwkJCQl2YWx1ZSAtPSBIQURFU19NRU1fQkFTRTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAodmFsdWUgIT0gMHhmZmZmZmZmZikKKwkJCQkJcmV0dXJuIFBDSUJJT1NfU0VUX0ZBSUxFRDsKKwkJCX0KKwkJfQorCX0KKworCSpwY2lfYWRkciA9IGNwdV90b19sZTMyKHZhbHVlKTsKKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKKy8qCisgKiBzdGF0aWMgaW5saW5lIHZvaWQgaGFkZXNfZml4dXAodm9pZCkKKyAqCisgKiBBc3NpZ24gSVJRIG51bWJlcnMgYXMgdXNlZCBieSBMaW51eCB0byB0aGUgaW50ZXJydXB0IHBpbnMKKyAqIG9mIHRoZSBQQ0kgY2FyZHMuCisgKi8KKworc3RhdGljIHZvaWQgX19pbml0IGhhZGVzX2ZpeHVwKGludCBwY2lfbW9kaWZ5KQoreworCWNoYXIgaXJxX3RhYls0XSA9IHsKKwkJWzBdID0gSVJRX1RUX01GUF9JTzAsCQkvKiBTbG90IDAuICovCisJCVsxXSA9IElSUV9UVF9NRlBfSU8xLAkJLyogU2xvdCAxLiAqLworCQlbMl0gPSBJUlFfVFRfTUZQX1NDQywJCS8qIFNsb3QgMi4gKi8KKwkJWzNdID0gSVJRX1RUX01GUF9TQ1NJRE1BCS8qIFNsb3QgMy4gKi8KKwl9OworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgc2xvdDsKKworCS8qCisJICogR28gdGhyb3VnaCBhbGwgZGV2aWNlcywgZml4aW5nIHVwIGlycXMgYXMgd2Ugc2VlIGZpdDoKKwkgKi8KKworCXdoaWxlICgoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZGV2KSkgIT0gTlVMTCkKKwl7CisJCWlmIChkZXYtPmNsYXNzID4+IDE2ICE9IFBDSV9CQVNFX0NMQVNTX0JSSURHRSkKKwkJeworCQkJc2xvdCA9IFBDSV9TTE9UKGRldi0+ZGV2Zm4pOwkvKiBEZXRlcm1pbmUgc2xvdCBudW1iZXIuICovCisJCQlkZXYtPmlycSA9IGlycV90YWJbc2xvdF07CisJCQlpZiAocGNpX21vZGlmeSkKKwkJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsIGRldi0+aXJxKTsKKwkJfQorCX0KK30KKworLyoKKyAqIHN0YXRpYyB2b2lkIGhhZGVzX2NvbmZfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCisgKgorICogTWFjaGluZSBkZXBlbmRlbnQgQ29uZmlndXJlIHRoZSBnaXZlbiBkZXZpY2UuCisgKgorICogUGFyYW1ldGVyczoKKyAqCisgKiBkZXYJCS0gdGhlIHBjaSBkZXZpY2UuCisgKi8KKworc3RhdGljIHZvaWQgX19pbml0IGhhZGVzX2NvbmZfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX29wcyBoYWRlc19wY2lfb3BzID0geworCS5yZWFkX2J5dGUgPQloYWRlc19yZWFkX2NvbmZpZ19ieXRlLAorCS5yZWFkX3dvcmQgPQloYWRlc19yZWFkX2NvbmZpZ193b3JkLAorCS5yZWFkX2R3b3JkID0JaGFkZXNfcmVhZF9jb25maWdfZHdvcmQsCisJLndyaXRlX2J5dGUgPQloYWRlc193cml0ZV9jb25maWdfYnl0ZSwKKwkud3JpdGVfd29yZCA9CWhhZGVzX3dyaXRlX2NvbmZpZ193b3JkLAorCS53cml0ZV9kd29yZCA9CWhhZGVzX3dyaXRlX2NvbmZpZ19kd29yZAorfTsKKworLyoKKyAqIHN0cnVjdCBwY2lfYnVzX2luZm8gKmluaXRfaGFkZXNfcGNpKHZvaWQpCisgKgorICogTWFjaGluZSBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbjoKKyAqCisgKiAtIEFsbG9jYXRlIGFuZCBpbml0aWFsaXNlIGEgJ3BjaV9idXNfaW5mbycgc3RydWN0dXJlCisgKiAtIEluaXRpYWxpc2UgaGFyZHdhcmUKKyAqCisgKiBSZXN1bHQ6IHBvaW50ZXIgdG8gJ3BjaV9idXNfaW5mbycgc3RydWN0dXJlLgorICovCisKK3N0cnVjdCBwY2lfYnVzX2luZm8gKiBfX2luaXQgaW5pdF9oYWRlc19wY2kodm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2J1c19pbmZvICpidXM7CisJaW50IGk7CisKKwkvKgorCSAqIFJlbWFwIEkvTyBhbmQgY29uZmlndXJhdGlvbiBzcGFjZS4KKwkgKi8KKworCXBjaV9pb19iYXNlX3ZpcnQgPSAodW5zaWduZWQgbG9uZykgaW9yZW1hcChIQURFU19JT19CQVNFLCBIQURFU19WSVJUX0lPX1NJWkUpOworCisJZm9yIChpID0gMDsgaSA8IE5fU0xPVFM7IGkrKykKKwkJcGNpX2NvbmZfYmFzZV92aXJ0W2ldID0gKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXAocGNpX2NvbmZfYmFzZV9waHlzW2ldLCAweDEwMDAwKTsKKworCS8qCisJICogQWxsb2NhdGUgbWVtb3J5IGZvciBidXMgaW5mbyBzdHJ1Y3R1cmUuCisJICovCisKKwlidXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX2J1c19pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidXMpCisJCXJldHVybiBOVUxMOworCW1lbXNldChidXMsIDAsIHNpemVvZihzdHJ1Y3QgcGNpX2J1c19pbmZvKSk7CisKKwkvKgorCSAqIENsYWltIHJlc291cmNlcy4gVGhlIG02OGsgaGFzIG5vIHNlcGFyYXRlIEkvTyBzcGFjZSwgYm90aAorCSAqIFBDSSBtZW1vcnkgc3BhY2UgYW5kIFBDSSBJL08gc3BhY2UgYXJlIGluIG1lbW9yeSBzcGFjZS4gVGhlcmVmb3JlCisJICogdGhlIEkvTyByZXNvdXJjZXMgYXJlIHJlcXVlc3RlZCBpbiBtZW1vcnkgc3BhY2UgYXMgd2VsbC4KKwkgKi8KKworCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmNvbmZpZ19zcGFjZSkgIT0gMCkKKwl7CisJCWtmcmVlKGJ1cyk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmlvX3NwYWNlKSAhPSAwKQorCXsKKwkJcmVsZWFzZV9yZXNvdXJjZSgmY29uZmlnX3NwYWNlKTsKKwkJa2ZyZWUoYnVzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJYnVzLT5tZW1fc3BhY2Uuc3RhcnQgPSBIQURFU19NRU1fQkFTRTsKKwlidXMtPm1lbV9zcGFjZS5lbmQgPSBIQURFU19NRU1fQkFTRSArIEhBREVTX01FTV9TSVpFIC0gMTsKKwlidXMtPm1lbV9zcGFjZS5uYW1lID0gcGNpX21lbV9uYW1lOworI2lmIDEKKwlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZidXMtPm1lbV9zcGFjZSkgIT0gMCkKKwl7CisJCXJlbGVhc2VfcmVzb3VyY2UoJmlvX3NwYWNlKTsKKwkJcmVsZWFzZV9yZXNvdXJjZSgmY29uZmlnX3NwYWNlKTsKKwkJa2ZyZWUoYnVzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorI2VuZGlmCisJYnVzLT5pb19zcGFjZS5zdGFydCA9IHBjaV9pb19iYXNlX3ZpcnQ7CisJYnVzLT5pb19zcGFjZS5lbmQgPSBwY2lfaW9fYmFzZV92aXJ0ICsgSEFERVNfVklSVF9JT19TSVpFIC0gMTsKKwlidXMtPmlvX3NwYWNlLm5hbWUgPSBwY2lfaW9fbmFtZTsKKyNpZiAxCisJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJmJ1cy0+aW9fc3BhY2UpICE9IDApCisJeworCQlyZWxlYXNlX3Jlc291cmNlKCZidXMtPm1lbV9zcGFjZSk7CisJCXJlbGVhc2VfcmVzb3VyY2UoJmlvX3NwYWNlKTsKKwkJcmVsZWFzZV9yZXNvdXJjZSgmY29uZmlnX3NwYWNlKTsKKwkJa2ZyZWUoYnVzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorI2VuZGlmCisJLyoKKwkgKiBTZXQgaGFyZHdhcmUgZGVwZW5kZW50IGZ1bmN0aW9ucy4KKwkgKi8KKworCWJ1cy0+bTY4a19wY2lfb3BzID0gJmhhZGVzX3BjaV9vcHM7CisJYnVzLT5maXh1cCA9IGhhZGVzX2ZpeHVwOworCWJ1cy0+Y29uZl9kZXZpY2UgPSBoYWRlc19jb25mX2RldmljZTsKKworCS8qCisJICogU2VsZWN0IGhpZ2ggdG8gbG93IGVkZ2UgZm9yIFBDSSBpbnRlcnJ1cHRzLgorCSAqLworCisJdHRfbWZwLmFjdGl2ZV9lZGdlICY9IH4weDI3OworCisJcmV0dXJuIGJ1czsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL3N0ZG1hLmMgYi9hcmNoL202OGsvYXRhcmkvc3RkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODhmNWU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2F0YXJpL3N0ZG1hLmMKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiAgbGludXgvYXJjaC9tNjhrL2F0YXJpL3N0bWRhLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0IFJvbWFuIEhvZGVrCisgKgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisKKy8qIFRoaXMgZmlsZSBjb250YWlucyBzb21lIGZ1bmN0aW9uIGZvciBjb250cm9sbGluZyB0aGUgYWNjZXNzIHRvIHRoZSAgKi8KKy8qIFNULURNQSBjaGlwIHRoYXQgbWF5IGJlIHNoYXJlZCBiZXR3ZWVuIGRldmljZXMuIEN1cnJlbnRseSB3ZSBoYXZlOiAgKi8KKy8qICAgVFQ6ICAgICBGbG9wcHkgYW5kIEFDU0kgYnVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgRmFsY29uOiBGbG9wcHkgYW5kIFNDU0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFRoZSBjb250cm9sbGluZyBmdW5jdGlvbnMgc2V0IHVwIGEgd2FpdCBxdWV1ZSBmb3IgYWNjZXNzIHRvIHRoZSAgICAgKi8KKy8qIFNULURNQSBjaGlwLiBDYWxsZXJzIHRvIHN0ZG1hX2xvY2soKSB0aGF0IGNhbm5vdCBncmFudGVkIGFjY2VzcyBhcmUgKi8KKy8qIHB1dCBvbnRvIGEgcXVldWUgYW5kIHdha2VkIHVwIGxhdGVyIGlmIHRoZSBvd25lciBjYWxscyAgICAgICAgICAgICAgKi8KKy8qIHN0ZG1hX3JlbGVhc2UoKS4gQWRkaXRpb25hbGx5LCB0aGUgY2FsbGVyIGdpdmVzIGhpcyBpbnRlcnJ1cHQgICAgICAgKi8KKy8qIHNlcnZpY2Ugcm91dGluZSB0byBzdGRtYV9sb2NrKCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIE9uIHRoZSBGYWxjb24sIHRoZSBJREUgYnVzIHVzZXMganVzdCB0aGUgQUNTSS9GbG9wcHkgaW50ZXJydXB0LCBidXQgKi8KKy8qIG5vdCB0aGUgU1QtRE1BIGNoaXAgaXRzZWxmLiBTbyBmYWxoZC5jIG5lZWRzIG5vdCB0byBsb2NrIHRoZSAgICAgICAgKi8KKy8qIGNoaXAuIFRoZSBpbnRlcnJ1cHQgaXMgcm91dGVkIHRvIGZhbGhkLmMgaWYgSURFIGlzIGNvbmZpZ3VyZWQsIHRoZSAgKi8KKy8qIG1vZGVsIGlzIGEgRmFsY29uIGFuZCB0aGUgaW50ZXJydXB0IHdhcyBjYXVzZWQgYnkgdGhlIEhEIGNvbnRyb2xsZXIgKi8KKy8qIChjYW4gYmUgZGV0ZXJtaW5lZCBieSBsb29raW5nIGF0IGl0cyBzdGF0dXMgcmVnaXN0ZXIpLiAgICAgICAgICAgICAgKi8KKworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9nZW5oZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI2luY2x1ZGUgPGFzbS9hdGFyaV9zdGRtYS5oPgorI2luY2x1ZGUgPGFzbS9hdGFyaWludHMuaD4KKyNpbmNsdWRlIDxhc20vYXRhcmlody5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworc3RhdGljIGludCBzdGRtYV9sb2NrZWQ7CQkJLyogdGhlIHNlbWFwaG9yZSAqLworCQkJCQkJLyogaW50IGZ1bmMgdG8gYmUgY2FsbGVkICovCitzdGF0aWMgaXJxcmV0dXJuX3QgKCpzdGRtYV9pc3IpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK3N0YXRpYyB2b2lkICpzdGRtYV9pc3JfZGF0YTsJCQkvKiBkYXRhIHBhc3NlZCB0byBpc3IgKi8KK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChzdGRtYV93YWl0KTsJLyogd2FpdCBxdWV1ZSBmb3IgU1QtRE1BICovCisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBQcm90b3R5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3RkbWFfaW50IChpbnQgaXJxLCB2b2lkICpkdW1teSwgc3RydWN0IHB0X3JlZ3MgKmZwKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKiogRW5kIG9mIFByb3RvdHlwZXMgKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworCisvKgorICogRnVuY3Rpb246IHZvaWQgc3RkbWFfbG9jayggaXNyZnVuYyBpc3IsIHZvaWQgKmRhdGEgKQorICoKKyAqIFB1cnBvc2U6IFRyaWVzIHRvIGdldCBhIGxvY2sgb24gdGhlIFNULURNQSBjaGlwIHRoYXQgaXMgdXNlZCBieSBtb3JlCisgKiAgIHRoZW4gb25lIGRldmljZSBkcml2ZXIuIFdhaXRzIG9uIHN0ZG1hX3dhaXQgdW50aWwgbG9jayBpcyBmcmVlLgorICogICBzdGRtYV9sb2NrKCkgbWF5IG5vdCBiZSBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQhIFlvdSBoYXZlIHRvCisgKiAgIGdldCB0aGUgbG9jayBpbiB5b3VyIG1haW4gcm91dGluZSBhbmQgcmVsZWFzZSBpdCB3aGVuIHlvdXIKKyAqICAgcmVxdWVzdCBpcyBmaW5pc2hlZC4KKyAqCisgKiBJbnB1dHM6IEEgaW50ZXJydXB0IGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHVudGlsIHRoZSBsb2NrIGlzCisgKiAgIHJlbGVhc2VkLgorICoKKyAqIFJldHVybnM6IG5vdGhpbmcKKyAqCisgKi8KKwordm9pZCBzdGRtYV9sb2NrKGlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAorCQl2b2lkICpkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CQkvKiBwcm90ZWN0IGxvY2sgKi8KKworCS8qIFNpbmNlIHRoZSBETUEgaXMgdXNlZCBmb3IgZmlsZSBzeXN0ZW0gcHVycG9zZXMsIHdlCisJIGhhdmUgdG8gc2xlZXAgdW5pbnRlcnJ1cHRpYmxlICh0aGVyZSBtYXkgYmUgbG9ja2VkCisJIGJ1ZmZlcnMpICovCisJd2FpdF9ldmVudChzdGRtYV93YWl0LCAhc3RkbWFfbG9ja2VkKTsKKworCXN0ZG1hX2xvY2tlZCAgID0gMTsKKwlzdGRtYV9pc3IgICAgICA9IGhhbmRsZXI7CisJc3RkbWFfaXNyX2RhdGEgPSBkYXRhOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworCisvKgorICogRnVuY3Rpb246IHZvaWQgc3RkbWFfcmVsZWFzZSggdm9pZCApCisgKgorICogUHVycG9zZTogUmVsZWFzZXMgdGhlIGxvY2sgb24gdGhlIFNULURNQSBjaGlwLgorICoKKyAqIElucHV0czogbm9uZQorICoKKyAqIFJldHVybnM6IG5vdGhpbmcKKyAqCisgKi8KKwordm9pZCBzdGRtYV9yZWxlYXNlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXN0ZG1hX2xvY2tlZCAgID0gMDsKKwlzdGRtYV9pc3IgICAgICA9IE5VTEw7CisJc3RkbWFfaXNyX2RhdGEgPSBOVUxMOworCXdha2VfdXAoJnN0ZG1hX3dhaXQpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisKKy8qCisgKiBGdW5jdGlvbjogaW50IHN0ZG1hX290aGVyc193YWl0aW5nKCB2b2lkICkKKyAqCisgKiBQdXJwb3NlOiBDaGVjayBpZiBzb21lb25lIHdhaXRzIGZvciB0aGUgU1QtRE1BIGxvY2suCisgKgorICogSW5wdXRzOiBub25lCisgKgorICogUmV0dXJuczogMCBpZiBubyBvbmUgaXMgd2FpdGluZywgIT0gMCBvdGhlcndpc2UKKyAqCisgKi8KKworaW50IHN0ZG1hX290aGVyc193YWl0aW5nKHZvaWQpCit7CisJcmV0dXJuIHdhaXRxdWV1ZV9hY3RpdmUoJnN0ZG1hX3dhaXQpOworfQorCisKKy8qCisgKiBGdW5jdGlvbjogaW50IHN0ZG1hX2lzbG9ja2VkKCB2b2lkICkKKyAqCisgKiBQdXJwb3NlOiBDaGVjayBpZiB0aGUgU1QtRE1BIGlzIGN1cnJlbnRseSBsb2NrZWQuCisgKiBOb3RlOiBSZXR1cm5lZCBzdGF0dXMgaXMgb25seSB2YWxpZCBpZiBpbnRzIGFyZSBkaXNhYmxlZCB3aGlsZSBjYWxsaW5nIGFuZAorICogICAgICAgYXMgbG9uZyBhcyB0aGV5IHJlbWFpbiBkaXNhYmxlZC4KKyAqICAgICAgIElmIGNhbGxlZCB3aXRoIGludHMgZW5hYmxlZCwgc3RhdHVzIGNhbiBjaGFuZ2Ugb25seSBmcm9tIGxvY2tlZCB0bworICogICAgICAgdW5sb2NrZWQsIGJlY2F1c2UgaW50cyBtYXkgbm90IGxvY2sgdGhlIFNULURNQS4KKyAqCisgKiBJbnB1dHM6IG5vbmUKKyAqCisgKiBSZXR1cm5zOiAhPSAwIGlmIGxvY2tlZCwgMCBvdGhlcndpc2UKKyAqCisgKi8KKworaW50IHN0ZG1hX2lzbG9ja2VkKHZvaWQpCit7CisJcmV0dXJuIHN0ZG1hX2xvY2tlZDsKK30KKworCisvKgorICogRnVuY3Rpb246IHZvaWQgc3RkbWFfaW5pdCggdm9pZCApCisgKgorICogUHVycG9zZTogSW5pdGlhbGl6ZSB0aGUgU1QtRE1BIGNoaXAgYWNjZXNzIGNvbnRyb2xsaW5nLgorICogICBJdCBzZXRzIHVwIHRoZSBpbnRlcnJ1cHQgYW5kIGl0cyBzZXJ2aWNlIHJvdXRpbmUuIFRoZSBpbnQgaXMgcmVnaXN0ZXJlZAorICogICBhcyBzbG93IGludCwgY2xpZW50IGRldmljZXMgaGF2ZSB0byBsaXZlIHdpdGggdGhhdCAobm8gcHJvYmxlbQorICogICBjdXJyZW50bHkpLgorICoKKyAqIElucHV0czogbm9uZQorICoKKyAqIFJldHVybjogbm90aGluZworICoKKyAqLworCit2b2lkIF9faW5pdCBzdGRtYV9pbml0KHZvaWQpCit7CisJc3RkbWFfaXNyID0gTlVMTDsKKwlyZXF1ZXN0X2lycShJUlFfTUZQX0ZEQywgc3RkbWFfaW50LCBJUlFfVFlQRV9TTE9XLAorCSAgICAgICAgICAgICJTVC1ETUE6IGZsb3BweS9BQ1NJL0lERS9GYWxjb24tU0NTSSIsIHN0ZG1hX2ludCk7Cit9CisKKworLyoKKyAqIEZ1bmN0aW9uOiB2b2lkIHN0ZG1hX2ludCgpCisgKgorICogUHVycG9zZTogVGhlIGludGVycnVwdCByb3V0aW5lIGZvciB0aGUgU1QtRE1BLiBJdCBjYWxscyB0aGUgaXNyCisgKiAgIHJlZ2lzdGVyZWQgYnkgc3RkbWFfbG9jaygpLgorICoKKyAqLworCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3RkbWFfaW50KGludCBpcnEsIHZvaWQgKmR1bW15LCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisgIGlmIChzdGRtYV9pc3IpCisgICAgICAoKnN0ZG1hX2lzcikoaXJxLCBzdGRtYV9pc3JfZGF0YSwgZnApOworICByZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvc3RyYW0uYyBiL2FyY2gvbTY4ay9hdGFyaS9zdHJhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhM2MxMDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvYXRhcmkvc3RyYW0uYwpAQCAtMCwwICsxLDEyNDcgQEAKKy8qCisgKiBhcmNoL202OGsvYXRhcmkvc3RyYW0uYzogRnVuY3Rpb25zIGZvciBTVC1SQU0gYWxsb2NhdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgMTk5NC05NyBSb21hbiBIb2RlayA8Um9tYW4uSG9kZWtAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NobS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL2F0YXJpaHcuaD4KKyNpbmNsdWRlIDxhc20vYXRhcmlfc3RyYW0uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zd2Fwb3BzLmg+CisKKyN1bmRlZiBERUJVRworCisjaWZkZWYgREVCVUcKKyNkZWZpbmUJRFBSSU5USyhmbXQsYXJncy4uLikgcHJpbnRrKCBmbXQsICMjYXJncyApCisjZWxzZQorI2RlZmluZSBEUFJJTlRLKGZtdCxhcmdzLi4uKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKSAmJiBkZWZpbmVkKENPTkZJR19TVFJBTV9QUk9DKQorLyogYWJicmV2IGZvciB0aGUgJiYgYWJvdmUuLi4gKi8KKyNkZWZpbmUgRE9fUFJPQworI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNlbmRpZgorCisvKiBQcmUtc3dhcHBpbmcgY29tbWVudHM6CisgKgorICogKytyb21hbjoKKyAqCisgKiBOZXcgdmVyc2lvbiBvZiBTVC1SYW0gYnVmZmVyIGFsbG9jYXRpb24uIEluc3RlYWQgb2YgdXNpbmcgdGhlCisgKiAxIE1CIC0gNCBLQiB0aGF0IHJlbWFpbiB3aGVuIHRoZSBTVC1SYW0gY2h1bmsgc3RhcnRzIGF0ICQxMDAwCisgKiAoMSBNQiBncmFudWxhcml0eSEpLCBzdWNoIGJ1ZmZlcnMgYXJlIHJlc2VydmVkIGxpa2UgdGhpczoKKyAqCisgKiAgLSBJZiB0aGUga2VybmVsIHJlc2lkZXMgaW4gU1QtUmFtIGFueXdheSwgd2UgY2FuIHRha2UgdGhlIGJ1ZmZlcgorICogICAgZnJvbSBiZWhpbmQgdGhlIGN1cnJlbnQga2VybmVsIGRhdGEgc3BhY2UgdGhlIG5vcm1hbCB3YXkKKyAqICAgIChpbmNyZW1lbnRpbmcgc3RhcnRfbWVtKS4KKyAqCisgKiAgLSBJZiB0aGUga2VybmVsIGlzIGluIFRULVJhbSwgc3RyYW1faW5pdCgpIGluaXRpYWxpemVzIHN0YXJ0IGFuZAorICogICAgZW5kIG9mIHRoZSBhdmFpbGFibGUgcmVnaW9uLiBCdWZmZXJzIGFyZSBhbGxvY2F0ZWQgZnJvbSB0aGVyZQorICogICAgYW5kIG1lbV9pbml0KCkgbGF0ZXIgbWFya3MgdGhlIHN1Y2ggdXNlZCBwYWdlcyBhcyByZXNlcnZlZC4KKyAqICAgIFNpbmNlIGVhY2ggVFQtUmFtIGNodW5rIGlzIGF0IGxlYXN0IDQgTUIgaW4gc2l6ZSwgSSBob3BlIHRoZXJlCisgKiAgICB3b24ndCBiZSBhbiBvdmVycnVuIG9mIHRoZSBTVC1SYW0gcmVnaW9uIGJ5IG5vcm1hbCBrZXJuZWwgZGF0YQorICogICAgc3BhY2UuCisgKgorICogRm9yIHRoYXQsIFNULVJhbSBtYXkgb25seSBiZSBhbGxvY2F0ZWQgd2hpbGUga2VybmVsIGluaXRpYWxpemF0aW9uCisgKiBpcyBnb2luZyBvbiwgb3IgZXhhY3RseTogYmVmb3JlIG1lbV9pbml0KCkgaXMgY2FsbGVkLiBUaGVyZSBpcyBhbHNvCisgKiBubyBwcm92aXNpb24gbm93IGZvciBmcmVlaW5nIFNULVJhbSBidWZmZXJzLiBJdCBzZWVtcyB0aGF0IGlzbid0CisgKiByZWFsbHkgbmVlZGVkLgorICoKKyAqLworCisvKgorICogTmV3IE5vdiAxOTk3OiBVc2UgU1QtUkFNIGFzIHN3YXAgc3BhY2UhCisgKgorICogSW4gdGhlIHBhc3QsIHRoZXJlIHdlcmUgb2Z0ZW4gcHJvYmxlbXMgd2l0aCBtb2R1bGVzIHRoYXQgcmVxdWlyZSBTVC1SQU0KKyAqIGJ1ZmZlcnMuIFN1Y2ggZHJpdmVycyBoYXZlIHRvIHVzZSBfX2dldF9kbWFfcGFnZXMoKSwgd2hpY2ggdW5mb3J0dW5hdGVseQorICogb2Z0ZW4gaXNuJ3QgdmVyeSBzdWNjZXNzZnVsIGluIGFsbG9jYXRpbmcgbW9yZSB0aGFuIDEgcGFnZSA6LSggWzFdIFRoZSBuZXQKKyAqIHJlc3VsdCB3YXMgdGhhdCBtb3N0IG9mIHRoZSB0aW1lIHlvdSBjb3VsZG4ndCBpbnNtb2Qgc3VjaCBtb2R1bGVzIChhdGFmbG9wLAorICogQUNTSSwgU0NTSSBvbiBGYWxjb24sIEF0YXJpIGludGVybmFsIGZyYW1lYnVmZmVyLCBub3QgdG8gc3BlYWsgb2YgYWNzaV9zbG0sCisgKiB3aGljaCBuZWVkcyBhIDEgTUIgYnVmZmVyLi4uIDotKS4KKyAqCisgKiBUbyBvdmVyY29tZSB0aGlzIGxpbWl0YXRpb24sIFNULVJBTSBjYW4gbm93IGJlIHR1cm5lZCBpbnRvIGEgdmVyeQorICogaGlnaC1zcGVlZCBzd2FwIHNwYWNlLiBJZiBhIHJlcXVlc3QgZm9yIGFuIFNULVJBTSBidWZmZXIgY29tZXMsIHRoZSBrZXJuZWwKKyAqIG5vdyB0cmllcyB0byB1bnN3YXAgc29tZSBwYWdlcyBvbiB0aGF0IHN3YXAgZGV2aWNlIHRvIG1ha2Ugc29tZSBmcmVlIChhbmQKKyAqIGNvbnRpZ3VvdXMpIHNwYWNlLiBUaGlzIHdvcmtzIG11Y2ggYmV0dGVyIGluIGNvbXBhcmlzb24gdG8KKyAqIF9fZ2V0X2RtYV9wYWdlcygpLCBzaW5jZSB1c2VkIHN3YXAgcGFnZXMgY2FuIGJlIHNlbGVjdGl2ZWx5IGZyZWVkIGJ5IGVpdGhlcgorICogbW92aW5nIHRoZW0gdG8gc29tZXdoZXJlIGVsc2UgaW4gc3dhcCBzcGFjZSwgb3IgYnkgcmVhZGluZyB0aGVtIGJhY2sgaW50bworICogc3lzdGVtIG1lbW9yeS4gT2ssIHRoZXJlIG9wZXJhdGlvbiBvZiB1bnN3YXBwaW5nIGlzbid0IHJlYWxseSBjaGVhcCAoZm9yCisgKiBlYWNoIHBhZ2UsIG9uZSBoYXMgdG8gZ28gdGhyb3VnaCB0aGUgcGFnZSB0YWJsZXMgb2YgYWxsIHByb2Nlc3NlcyksIGJ1dCBpdAorICogZG9lc24ndCBoYXBwZW4gdGhhdCBvZnRlbiAob25seSB3aGVuIGFsbG9jYXRpb24gU1QtUkFNLCBpLmUuIHdoZW4gbG9hZGluZyBhCisgKiBtb2R1bGUgdGhhdCBuZWVkcyBTVC1SQU0pLiBCdXQgaXQgYXQgbGVhc3QgbWFrZXMgaXQgcG9zc2libGUgdG8gbG9hZCBzdWNoCisgKiBtb2R1bGVzIQorICoKKyAqIEl0IGNvdWxkIGFsc28gYmUgdGhhdCBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSBpbmNyZWFzZXMgYSBiaXQgZHVlIHRvCisgKiBTVC1SQU0gc3dhcHBpbmcsIHNpbmNlIHNsb3cgU1QtUkFNIGlzbid0IHVzZWQgYW55bW9yZSBmb3IgaG9sZGluZyBkYXRhIG9yCisgKiBleGVjdXRpbmcgY29kZSBpbi4gSXQncyB0aGVuIGp1c3QgYSAodmVyeSBmYXN0LCBjb21wYXJlZCB0byBkaXNrKSBiYWNrCisgKiBzdG9yYWdlIGZvciBub3Qtc28tb2Z0ZW4gbmVlZGVkIGRhdGEuIChCdXQgdGhpcyBlZmZlY3QgbXVzdCBiZSBjb21wYXJlZAorICogd2l0aCB0aGUgbG9zcyBvZiB0b3RhbCBtZW1vcnkuLi4pIERvbid0IGtub3cgaWYgdGhlIGVmZmVjdCBpcyBhbHJlYWR5CisgKiB2aXNpYmxlIG9uIGEgVFQsIHdoZXJlIHRoZSBzcGVlZCBkaWZmZXJlbmNlIGJldHdlZW4gU1QtIGFuZCBUVC1SQU0gaXNuJ3QKKyAqIHRoYXQgZHJhbWF0aWMsIGJ1dCBpdCBzaG91bGQgb24gbWFjaGluZXMgd2hlcmUgVFQtUkFNIGlzIHJlYWxseSBtdWNoIGZhc3RlcgorICogKGUuZy4gQWZ0ZXJidXJuZXIpLgorICoKKyAqICAgWzFdOiBfX2dldF9mcmVlX3BhZ2VzKCkgZG9lcyBhIGZpbmUgam9iIGlmIHlvdSBvbmx5IHdhbnQgb25lIHBhZ2UsIGJ1dCBpZgorICogeW91IHdhbnQgbW9yZSAoY29udGlndW91cykgcGFnZXMsIGl0IGNhbiBnaXZlIHlvdSBzdWNoIGEgYmxvY2sgb25seSBpZgorICogdGhlcmUncyBhbHJlYWR5IGEgZnJlZSBvbmUuIFRoZSBhbGdvcml0aG0gY2FuJ3QgdHJ5IHRvIGZyZWUgYnVmZmVycyBvciBzd2FwCisgKiBvdXQgc29tZXRoaW5nIGluIG9yZGVyIHRvIG1ha2UgbW9yZSBmcmVlIHNwYWNlLCBzaW5jZSBhbGwgdGhhdCBwYWdlLWZyZWVpbmcKKyAqIG1lY2hhbmlzbXMgd29yayAidGFyZ2V0LWxlc3MiLCBpLmUuIHRoZXkganVzdCBmcmVlIHNvbWV0aGluZywgYnV0IG5vdCBpbiBhCisgKiBzcGVjaWZpYyBwbGFjZS4gSS5lLiwgX19nZXRfZnJlZV9wYWdlcygpIGNhbid0IGRvIGFueXRoaW5nIHRvIGZyZWUKKyAqICphZGphY2VudCogcGFnZXMgOi0oIFRoaXMgc2l0dWF0aW9uIGJlY29tZXMgZXZlbiB3b3JzZSBmb3IgRE1BIG1lbW9yeSwKKyAqIHNpbmNlIHRoZSBmcmVlaW5nIGFsZ29yaXRobXMgYXJlIGFsc28gYmxpbmQgdG8gRE1BIGNhcGFiaWxpdHkgb2YgcGFnZXMuCisgKi8KKworLyogMTk5OC0xMC0yMDogKythbmRyZWFzCisgICB1bnN3YXBfYnlfbW92ZSBkaXNhYmxlZCBiZWNhdXNlIGl0IGRvZXMgbm90IGhhbmRsZSBzd2FwcGVkIHNobSBwYWdlcy4KKyovCisKKy8qIDIwMDAtMDUtMDE6ICsrYW5kcmVhcworICAgSW50ZWdyYXRlZCB3aXRoIGJvb3RtZW0uICBSZW1vdmUgYWxsIHRyYWNlcyBvZiB1bnN3YXBfYnlfbW92ZS4KKyovCisKKyNpZmRlZiBDT05GSUdfU1RSQU1fU1dBUAorI2RlZmluZSBBTElHTl9JRl9TV0FQKHgpCVBBR0VfQUxJR04oeCkKKyNlbHNlCisjZGVmaW5lIEFMSUdOX0lGX1NXQVAoeCkJKHgpCisjZW5kaWYKKworLyogZ2V0IGluZGV4IG9mIHN3YXAgcGFnZSBhdCBhZGRyZXNzICdhZGRyJyAqLworI2RlZmluZSBTV0FQX05SKGFkZHIpCQkoKChhZGRyKSAtIHN3YXBfc3RhcnQpID4+IFBBR0VfU0hJRlQpCisKKy8qIGdldCBhZGRyZXNzIG9mIHN3YXAgcGFnZSAjJ25yJyAqLworI2RlZmluZSBTV0FQX0FERFIobnIpCQkoc3dhcF9zdGFydCArICgobnIpIDw8IFBBR0VfU0hJRlQpKQorCisvKiBnZXQgbnVtYmVyIG9mIHBhZ2VzIGZvciAnbicgYnl0ZXMgKGFscmVhZHkgcGFnZS1hbGlnbmVkKSAqLworI2RlZmluZSBOX1BBR0VTKG4pCQkJKChuKSA+PiBQQUdFX1NISUZUKQorCisvKiBUaGUgZm9sbG93aW5nIHR3byBudW1iZXJzIGRlZmluZSB0aGUgbWF4aW11bSBmcmFjdGlvbiBvZiBTVC1SQU0gaW4gdG90YWwKKyAqIG1lbW9yeSwgYmVsb3cgdGhhdCB0aGUga2VybmVsIHdvdWxkIGF1dG9tYXRpY2FsbHkgdXNlIFNULVJBTSBhcyBzd2FwCisgKiBzcGFjZS4gVGhpcyBkZWNpc2lvbiBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHN0cmFtX3N3YXA9ICovCisjZGVmaW5lIE1BWF9TVFJBTV9GUkFDVElPTl9OT00JCTEKKyNkZWZpbmUgTUFYX1NUUkFNX0ZSQUNUSU9OX0RFTk9NCTMKKworLyogU3RhcnQgYW5kIGVuZCAodmlydHVhbCkgb2YgU1QtUkFNICovCitzdGF0aWMgdm9pZCAqc3RyYW1fc3RhcnQsICpzdHJhbV9lbmQ7CisKKy8qIHNldCBhZnRlciBtZW1vcnlfaW5pdCgpIGV4ZWN1dGVkIGFuZCBhbGxvY2F0aW9ucyB2aWEgc3RhcnRfbWVtIGFyZW4ndAorICogcG9zc2libGUgYW55bW9yZSAqLworc3RhdGljIGludCBtZW1faW5pdF9kb25lOworCisvKiBzZXQgaWYga2VybmVsIGlzIGluIFNULVJBTSAqLworc3RhdGljIGludCBrZXJuZWxfaW5fc3RyYW07CisKK3R5cGVkZWYgc3RydWN0IHN0cmFtX2Jsb2NrIHsKKwlzdHJ1Y3Qgc3RyYW1fYmxvY2sgKm5leHQ7CisJdm9pZCAqc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIGZsYWdzOworCWNvbnN0IGNoYXIgKm93bmVyOworfSBCTE9DSzsKKworLyogdmFsdWVzIGZvciBmbGFncyBmaWVsZCAqLworI2RlZmluZSBCTE9DS19GUkVFCQkweDAxCS8qIGZyZWUgc3RydWN0dXJlIGluIHRoZSBCTE9DS3MgcG9vbCAqLworI2RlZmluZSBCTE9DS19LTUFMTE9DRUQJMHgwMgkvKiBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGJ5IGttYWxsb2MoKSAqLworI2RlZmluZSBCTE9DS19HRlAJCTB4MDgJLyogYmxvY2sgYWxsb2NhdGVkIHdpdGggX19nZXRfZG1hX3BhZ2VzKCkgKi8KKyNkZWZpbmUgQkxPQ0tfSU5TV0FQCTB4MTAJLyogYmxvY2sgYWxsb2NhdGVkIGluIHN3YXAgc3BhY2UgKi8KKworLyogbGlzdCBvZiBhbGxvY2F0ZWQgYmxvY2tzICovCitzdGF0aWMgQkxPQ0sgKmFsbG9jX2xpc3Q7CisKKy8qIFdlIGNhbid0IGFsd2F5cyB1c2Uga21hbGxvYygpIHRvIGFsbG9jYXRlIEJMT0NLIHN0cnVjdHVyZXMsIHNpbmNlCisgKiBzdHJhbV9hbGxvYygpIGNhbiBiZSBjYWxsZWQgcmF0aGVyIGVhcmx5LiBTbyB3ZSBuZWVkIHNvbWUgcG9vbCBvZgorICogc3RhdGljYWxseSBhbGxvY2F0ZWQgc3RydWN0dXJlcy4gMjAgb2YgdGhlbSBpcyBtb3JlIHRoYW4gZW5vdWdoLCBzbyBpbiBtb3N0CisgKiBjYXNlcyB3ZSBuZXZlciBzaG91bGQgbmVlZCB0byBjYWxsIGttYWxsb2MoKS4gKi8KKyNkZWZpbmUgTl9TVEFUSUNfQkxPQ0tTCTIwCitzdGF0aWMgQkxPQ0sgc3RhdGljX2Jsb2Nrc1tOX1NUQVRJQ19CTE9DS1NdOworCisjaWZkZWYgQ09ORklHX1NUUkFNX1NXQVAKKy8qIG1heC4gbnVtYmVyIG9mIGJ5dGVzIHRvIHVzZSBmb3Igc3dhcHBpbmcKKyAqICAwID0gbm8gU1QtUkFNIHN3YXBwaW5nCisgKiAtMSA9IGRvIHN3YXBwaW5nICh0byB3aG9sZSBTVC1SQU0pIGlmIGl0J3MgbGVzcyB0aGFuIE1BWF9TVFJBTV9GUkFDVElPTiBvZgorICogICAgICB0b3RhbCBtZW1vcnkKKyAqLworc3RhdGljIGludCBtYXhfc3dhcF9zaXplID0gLTE7CisKKy8qIHN0YXJ0IGFuZCBlbmQgb2Ygc3dhcHBpbmcgYXJlYSAqLworc3RhdGljIHZvaWQgKnN3YXBfc3RhcnQsICpzd2FwX2VuZDsKKworLyogVGhlIFNULVJBTSdzIHN3YXAgaW5mbyBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc3RyYW1fc3dhcF9pbmZvOworCisvKiBUaGUgU1QtUkFNJ3Mgc3dhcCB0eXBlICovCitzdGF0aWMgaW50IHN0cmFtX3N3YXBfdHlwZTsKKworLyogU2VtYXBob3JlIGZvciBnZXRfc3RyYW1fcmVnaW9uLiAgKi8KK3N0YXRpYyBERUNMQVJFX01VVEVYKHN0cmFtX3N3YXBfc2VtKTsKKworLyogbWFqb3IgYW5kIG1pbm9yIGRldmljZSBudW1iZXIgb2YgdGhlIFNULVJBTSBkZXZpY2U7IGZvciB0aGUgbWFqb3IsIHdlIHVzZQorICogdGhlIHNhbWUgYXMgQW1pZ2EgejJyYW0sIHdoaWNoIGlzIHJlYWxseSBzaW1pbGFyIGFuZCBpbXBvc3NpYmxlIG9uIEF0YXJpLAorICogYW5kIGZvciB0aGUgbWlub3IgYSByZWxhdGl2ZWx5IG9kZCBudW1iZXIgdG8gYXZvaWQgdGhlIHVzZXIgY3JlYXRpbmcgYW5kCisgKiB1c2luZyB0aGF0IGRldmljZS4gKi8KKyNkZWZpbmUJU1RSQU1fTUFKT1IJCVoyUkFNX01BSk9SCisjZGVmaW5lCVNUUkFNX01JTk9SCQkxMworCisvKiBTb21lIGltcG9zc2libGUgcG9pbnRlciB2YWx1ZSAqLworI2RlZmluZSBNQUdJQ19GSUxFX1AJKHN0cnVjdCBmaWxlICopMHhmZmZmZGVhZAorCisjaWZkZWYgRE9fUFJPQworc3RhdGljIHVuc2lnbmVkIHN0YXRfc3dhcF9yZWFkOworc3RhdGljIHVuc2lnbmVkIHN0YXRfc3dhcF93cml0ZTsKK3N0YXRpYyB1bnNpZ25lZCBzdGF0X3N3YXBfZm9yY2U7CisjZW5kaWYgLyogRE9fUFJPQyAqLworCisjZW5kaWYgLyogQ09ORklHX1NUUkFNX1NXQVAgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFByb3RvdHlwZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBDT05GSUdfU1RSQU1fU1dBUAorc3RhdGljIGludCBzd2FwX2luaXQodm9pZCAqc3RhcnRfbWVtLCB2b2lkICpzd2FwX2RhdGEpOworc3RhdGljIHZvaWQgKmdldF9zdHJhbV9yZWdpb24oIHVuc2lnbmVkIGxvbmcgbl9wYWdlcyApOworc3RhdGljIHZvaWQgZnJlZV9zdHJhbV9yZWdpb24oIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIG5fcGFnZXMKKwkJCSAgICAgICApOworc3RhdGljIGludCBpbl9zb21lX3JlZ2lvbih2b2lkICphZGRyKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfZnJlZV9yZWdpb24oIHVuc2lnbmVkIGxvbmcgbl9wYWdlcywgdW5zaWduZWQgbG9uZworCQkJCSAgICAgICAqdG90YWxfZnJlZSwgdW5zaWduZWQgbG9uZworCQkJCSAgICAgICAqcmVnaW9uX2ZyZWUgKTsKK3N0YXRpYyB2b2lkIGRvX3N0cmFtX3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICopOworc3RhdGljIGludCBzdHJhbV9vcGVuKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCApOworc3RhdGljIGludCBzdHJhbV9yZWxlYXNlKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCApOworc3RhdGljIHZvaWQgcmVzZXJ2ZV9yZWdpb24odm9pZCAqc3RhcnQsIHZvaWQgKmVuZCk7CisjZW5kaWYKK3N0YXRpYyBCTE9DSyAqYWRkX3JlZ2lvbiggdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplICk7CitzdGF0aWMgQkxPQ0sgKmZpbmRfcmVnaW9uKCB2b2lkICphZGRyICk7CitzdGF0aWMgaW50IHJlbW92ZV9yZWdpb24oIEJMT0NLICpibG9jayApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKiBFbmQgb2YgUHJvdG90eXBlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworDAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgkJCQkJCQkgICBQdWJsaWMgSW50ZXJmYWNlCQkJCQkJCQkqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBUaGlzIGluaXQgZnVuY3Rpb24gaXMgY2FsbGVkIHZlcnkgZWFybHkgYnkgYXRhcmkvY29uZmlnLmMKKyAqIEl0IGluaXRpYWxpemVzIHNvbWUgaW50ZXJuYWwgdmFyaWFibGVzIG5lZWRlZCBmb3Igc3RyYW1fYWxsb2MoKQorICovCit2b2lkIF9faW5pdCBhdGFyaV9zdHJhbV9pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwkvKiBpbml0aWFsaXplIHN0YXRpYyBibG9ja3MgKi8KKwlmb3IoIGkgPSAwOyBpIDwgTl9TVEFUSUNfQkxPQ0tTOyArK2kgKQorCQlzdGF0aWNfYmxvY2tzW2ldLmZsYWdzID0gQkxPQ0tfRlJFRTsKKworCS8qIGRldGVybWluZSB3aGV0aGVyIGtlcm5lbCBjb2RlIHJlc2lkZXMgaW4gU1QtUkFNICh0aGVuIFNULVJBTSBpcyB0aGUKKwkgKiBmaXJzdCBtZW1vcnkgYmxvY2sgYXQgdmlydHVhbCAweDApICovCisJc3RyYW1fc3RhcnQgPSBwaHlzX3RvX3ZpcnQoMCk7CisJa2VybmVsX2luX3N0cmFtID0gKHN0cmFtX3N0YXJ0ID09IDApOworCisJZm9yKCBpID0gMDsgaSA8IG02OGtfbnVtX21lbW9yeTsgKytpICkgeworCQlpZiAobTY4a19tZW1vcnlbaV0uYWRkciA9PSAwKSB7CisJCQkvKiBza2lwIGZpcnN0IDJrQiBvciBwYWdlIChzdXBlcnZpc29yLW9ubHkhKSAqLworCQkJc3RyYW1fZW5kID0gc3RyYW1fc3RhcnQgKyBtNjhrX21lbW9yeVtpXS5zaXplOworCQkJcmV0dXJuOworCQl9CisJfQorCS8qIFNob3VsZCBuZXZlciBjb21lIGhlcmUhIChUaGVyZSBpcyBhbHdheXMgU1QtUmFtISkgKi8KKwlwYW5pYyggImF0YXJpX3N0cmFtX2luaXQ6IG5vIFNULVJBTSBmb3VuZCEiICk7Cit9CisKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gc2V0dXBfYXJjaCgpIHRvIHJlc2VydmUgdGhlIHBhZ2VzIG5lZWRlZCBmb3IKKyAqIFNULVJBTSBtYW5hZ2VtZW50LgorICovCit2b2lkIF9faW5pdCBhdGFyaV9zdHJhbV9yZXNlcnZlX3BhZ2VzKHZvaWQgKnN0YXJ0X21lbSkKK3sKKyNpZmRlZiBDT05GSUdfU1RSQU1fU1dBUAorCS8qIGlmIG1heF9zd2FwX3NpemUgaXMgbmVnYXRpdmUgKGkuZS4gbm8gc3RyYW1fc3dhcD0gb3B0aW9uIGdpdmVuKSwKKwkgKiBkZXRlcm1pbmUgYXQgcnVuIHRpbWUgd2hldGhlciB0byB1c2UgU1QtUkFNIHN3YXBwaW5nICovCisJaWYgKG1heF9zd2FwX3NpemUgPCAwKQorCQkvKiBVc2Ugc3dhcHBpbmcgaWYgU1QtUkFNIGRvZXNuJ3QgbWFrZSB1cCBtb3JlIHRoYW4gTUFYX1NUUkFNX0ZSQUNUSU9OCisJCSAqIG9mIHRvdGFsIG1lbW9yeS4gSW4gdGhhdCBjYXNlLCB0aGUgbWF4LiBzaXplIGlzIHNldCB0byAxNiBNQiwKKwkJICogYmVjYXVzZSBTVC1SQU0gY2FuIG5ldmVyIGJlIGJpZ2dlciB0aGFuIHRoYXQuCisJCSAqIEFsc28sIG5ldmVyIHVzZSBzd2FwcGluZyBvbiBhIEhhZGVzLCB0aGVyZSdzIG5vIHNlcGFyYXRlIFNULVJBTSBpbgorCQkgKiB0aGF0IG1hY2hpbmUuICovCisJCW1heF9zd2FwX3NpemUgPQorCQkJKCFNQUNIX0lTX0hBREVTICYmCisJCQkgKE5fUEFHRVMoc3RyYW1fZW5kLXN0cmFtX3N0YXJ0KSpNQVhfU1RSQU1fRlJBQ1RJT05fREVOT00gPD0KKwkJCSAgKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5Pj5QQUdFX1NISUZUKSpNQVhfU1RSQU1fRlJBQ1RJT05fTk9NKSkgPyAxNioxMDI0KjEwMjQgOiAwOworCURQUklOVEsoICJhdGFyaV9zdHJhbV9yZXNlcnZlX3BhZ2VzOiBtYXhfc3dhcF9zaXplID0gJWRcbiIsIG1heF9zd2FwX3NpemUgKTsKKyNlbmRpZgorCisJLyogYWx3YXlzIHJlc2VydmUgZmlyc3QgcGFnZSBvZiBTVC1SQU0sIHRoZSBmaXJzdCAyIGtCIGFyZQorCSAqIHN1cGVydmlzb3Itb25seSEgKi8KKwlpZiAoIWtlcm5lbF9pbl9zdHJhbSkKKwkJcmVzZXJ2ZV9ib290bWVtICgwLCBQQUdFX1NJWkUpOworCisjaWZkZWYgQ09ORklHX1NUUkFNX1NXQVAKKwl7CisJCXZvaWQgKnN3YXBfZGF0YTsKKworCQlzdGFydF9tZW0gPSAodm9pZCAqKSBQQUdFX0FMSUdOICgodW5zaWduZWQgbG9uZykgc3RhcnRfbWVtKTsKKwkJLyogZGV0ZXJtaW5lIGZpcnN0IHBhZ2UgdG8gdXNlIGFzIHN3YXA6IGlmIHRoZSBrZXJuZWwgaXMKKwkJICAgaW4gVFQtUkFNLCB0aGlzIGlzIHRoZSBmaXJzdCBwYWdlIG9mICh1c2FibGUpIFNULVJBTTsKKwkJICAgb3RoZXJ3aXNlIGp1c3QgdXNlIHRoZSBlbmQgb2Yga2VybmVsIGRhdGEgKD0gc3RhcnRfbWVtKSAqLworCQlzd2FwX3N0YXJ0ID0gIWtlcm5lbF9pbl9zdHJhbSA/IHN0cmFtX3N0YXJ0ICsgUEFHRV9TSVpFIDogc3RhcnRfbWVtOworCQkvKiBkZWNyZW1lbnQgYnkgb25lIHBhZ2UsIHJlc3Qgb2Yga2VybmVsIGFzc3VtZXMgdGhhdCBmaXJzdCBzd2FwIHBhZ2UKKwkJICogaXMgYWx3YXlzIHJlc2VydmVkIGFuZCBtYXliZSBkb2Vzbid0IGhhbmRsZSBzd3BfZW50cnkgPT0gMAorCQkgKiBjb3JyZWN0bHkgKi8KKwkJc3dhcF9zdGFydCAtPSBQQUdFX1NJWkU7CisJCXN3YXBfZW5kID0gc3RyYW1fZW5kOworCQlpZiAoc3dhcF9lbmQtc3dhcF9zdGFydCA+IG1heF9zd2FwX3NpemUpCisJCQlzd2FwX2VuZCA9ICBzd2FwX3N0YXJ0ICsgbWF4X3N3YXBfc2l6ZTsKKwkJRFBSSU5USyggImF0YXJpX3N0cmFtX3Jlc2VydmVfcGFnZXM6IHN3YXBwaW5nIGVuYWJsZWQ7ICIKKwkJCQkgInN3YXA9JXAtJXBcbiIsIHN3YXBfc3RhcnQsIHN3YXBfZW5kKTsKKworCQkvKiByZXNlcnZlIHNvbWUgYW1vdW50IG9mIG1lbW9yeSBmb3IgbWFpbnRhaW5hbmNlIG9mCisJCSAqIHN3YXBwaW5nIGl0c2VsZjogb25lIHBhZ2UgZm9yIGVhY2ggMjA0OCAoUEFHRV9TSVpFLzIpCisJCSAqIHN3YXAgcGFnZXMuICgyIGJ5dGVzIGZvciBlYWNoIHBhZ2UpICovCisJCXN3YXBfZGF0YSA9IHN0YXJ0X21lbTsKKwkJc3RhcnRfbWVtICs9ICgoU1dBUF9OUihzd2FwX2VuZCkgKyBQQUdFX1NJWkUvMiAtIDEpCisJCQkgICAgICA+PiAoUEFHRV9TSElGVC0xKSkgPDwgUEFHRV9TSElGVDsKKwkJLyogY29ycmVjdCBzd2FwX3N0YXJ0IGlmIG5lY2Vzc2FyeSAqLworCQlpZiAoc3dhcF9zdGFydCArIFBBR0VfU0laRSA9PSBzd2FwX2RhdGEpCisJCQlzd2FwX3N0YXJ0ID0gc3RhcnRfbWVtIC0gUEFHRV9TSVpFOworCisJCWlmICghc3dhcF9pbml0KCBzdGFydF9tZW0sIHN3YXBfZGF0YSApKSB7CisJCQlwcmludGsoIEtFUk5fRVJSICJTVC1SQU0gc3dhcCBzcGFjZSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIgKTsKKwkJCW1heF9zd2FwX3NpemUgPSAwOworCQkJcmV0dXJuOworCQl9CisJCS8qIHJlc2VydmUgcmVnaW9uIGZvciBzd2FwcGluZyBtZXRhLWRhdGEgKi8KKwkJcmVzZXJ2ZV9yZWdpb24oc3dhcF9kYXRhLCBzdGFydF9tZW0pOworCQkvKiByZXNlcnZlIHN3YXBwaW5nIGFyZWEgaXRzZWxmICovCisJCXJlc2VydmVfcmVnaW9uKHN3YXBfc3RhcnQgKyBQQUdFX1NJWkUsIHN3YXBfZW5kKTsKKworCQkvKgorCQkgKiBJZiB0aGUgd2hvbGUgU1QtUkFNIGlzIHVzZWQgZm9yIHN3YXBwaW5nLCB0aGVyZSBhcmUgbm8gYWxsb2NhdGFibGUKKwkJICogZG1hIHBhZ2VzIGxlZnQuIEJ1dCB1bmZvcnR1bmF0ZWx5LCBzb21lIHNoYXJlZCBwYXJ0cyBvZiB0aGUga2VybmVsCisJCSAqIChwYXJ0aWN1bGFybHkgdGhlIFNDU0kgbWlkLWxldmVsKSBjYWxsIF9fZ2V0X2RtYV9wYWdlcygpCisJCSAqIHVuY29uZGl0aW9uYWxseSA6LSggVGhlc2UgY2FsbHMgdGhlbiBmYWlsLCBhbmQgc2NzaS5jIGV2ZW4gZG9lc24ndAorCQkgKiBjaGVjayBmb3IgTlVMTCByZXR1cm4gdmFsdWVzIGFuZCBqdXN0IGNyYXNoZXMuIFRoZSBxdWljayBmaXggZm9yCisJCSAqIHRoaXMgKGluc3RlYWQgb2YgZG9pbmcgbXVjaCBjbGVhbiB1cCB3b3JrIGluIHRoZSBTQ1NJIGNvZGUpIGlzIHRvCisJCSAqIHByZXRlbmQgYWxsIHBhZ2VzIGFyZSBETUEtYWJsZSBieSBzZXR0aW5nIG1hY2hfbWF4X2RtYV9hZGRyZXNzIHRvCisJCSAqIFVMT05HX01BWC4gVGhpcyBkb2Vzbid0IGNoYW5nZSBhbnkgZnVuY3Rpb25hbGl0eSBzbyBmYXIsIHNpbmNlCisJCSAqIGdldF9kbWFfcGFnZXMoKSBzaG91bGRuJ3QgYmUgdXNlZCBvbiBBdGFyaSBhbnl3YXkgYW55bW9yZSAoYmV0dGVyCisJCSAqIHVzZSBhdGFyaV9zdHJhbV9hbGxvYygpKSwgYW5kIHRoZSBBdGFyaSBTQ1NJIGRyaXZlcnMgZG9uJ3QgbmVlZCBETUEKKwkJICogbWVtb3J5LiBCdXQgdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vdyBubyBraW5kIG9mIHdhcm5pbmcgKGV2ZW4gbm90CisJCSAqIGEgTlVMTCByZXR1cm4gdmFsdWUpIGlmIHlvdSB1c2UgZ2V0X2RtYV9wYWdlcygpIG5ldmVydGhlbGVzcyA6LSgKKwkJICogWW91IGp1c3Qgd2lsbCBnZXQgbm9uLURNQS1hYmxlIG1lbW9yeS4uLgorCQkgKi8KKwkJbWFjaF9tYXhfZG1hX2FkZHJlc3MgPSAweGZmZmZmZmZmOworCX0KKyNlbmRpZgorfQorCit2b2lkIGF0YXJpX3N0cmFtX21lbV9pbml0X2hvb2sgKHZvaWQpCit7CisJbWVtX2luaXRfZG9uZSA9IDE7Cit9CisKKworLyoKKyAqIFRoaXMgaXMgbWFpbiBwdWJsaWMgaW50ZXJmYWNlOiBzb21laG93IGFsbG9jYXRlIGEgU1QtUkFNIGJsb2NrCisgKiBUaGVyZSBhcmUgdGhyZWUgc3RyYXRlZ2llczoKKyAqCisgKiAgLSBJZiB3ZSdyZSBiZWZvcmUgbWVtX2luaXQoKSwgd2UgaGF2ZSB0byBtYWtlIGEgc3RhdGljIGFsbG9jYXRpb24uIFRoZQorICogICAgcmVnaW9uIGlzIHRha2VuIGluIHRoZSBrZXJuZWwgZGF0YSBhcmVhIChpZiB0aGUga2VybmVsIGlzIGluIFNULVJBTSkgb3IKKyAqICAgIGZyb20gdGhlIHN0YXJ0IG9mIFNULVJBTSAoaWYgdGhlIGtlcm5lbCBpcyBpbiBUVC1SQU0pIGFuZCBhZGRlZCB0byB0aGUKKyAqICAgIHJzdmRfc3RyYW1fKiByZWdpb24uIFRoZSBTVC1SQU0gaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2Yga2VybmVsCisgKiAgICBhZGRyZXNzIHNwYWNlIGluIHRoZSBsYXR0ZXIgY2FzZS4KKyAqCisgKiAgLSBJZiBtZW1faW5pdCgpIGFscmVhZHkgaGFzIGJlZW4gY2FsbGVkIGFuZCBTVC1SQU0gc3dhcHBpbmcgaXMgZW5hYmxlZCwKKyAqICAgIHRyeSB0byBnZXQgdGhlIG1lbW9yeSBmcm9tIHRoZSAocHNldWRvKSBzd2FwLXNwYWNlLCBlaXRoZXIgZnJlZSBhbHJlYWR5CisgKiAgICBvciBieSBtb3Zpbmcgc29tZSBvdGhlciBwYWdlcyBvdXQgb2YgdGhlIHN3YXAuCisgKgorICogIC0gSWYgbWVtX2luaXQoKSBhbHJlYWR5IGhhcyBiZWVuIGNhbGxlZCwgYW5kIFNULVJBTSBzd2FwcGluZyBpcyBub3QKKyAqICAgIGVuYWJsZWQsIHRoZSBvbmx5IHBvc3NpYmlsaXR5IGlzIHRvIHRyeSB3aXRoIF9fZ2V0X2RtYV9wYWdlcygpLiBUaGlzIGhhcworICogICAgdGhlIGRpc2FkdmFudGFnZSB0aGF0IGl0J3MgdmVyeSBoYXJkIHRvIGdldCBtb3JlIHRoYW4gMSBwYWdlLCBhbmQgaXQgaXMKKyAqICAgIGxpa2VseSB0byBmYWlsIDotKAorICoKKyAqLwordm9pZCAqYXRhcmlfc3RyYW1fYWxsb2MobG9uZyBzaXplLCBjb25zdCBjaGFyICpvd25lcikKK3sKKwl2b2lkICphZGRyID0gTlVMTDsKKwlCTE9DSyAqYmxvY2s7CisJaW50IGZsYWdzOworCisJRFBSSU5USygiYXRhcmlfc3RyYW1fYWxsb2Moc2l6ZT0lMDhseCxvd25lcj0lcylcbiIsIHNpemUsIG93bmVyKTsKKworCXNpemUgPSBBTElHTl9JRl9TV0FQKHNpemUpOworCURQUklOVEsoICJhdGFyaV9zdHJhbV9hbGxvYzogcm91bmRlZCBzaXplID0gJTA4bHhcbiIsIHNpemUgKTsKKyNpZmRlZiBDT05GSUdfU1RSQU1fU1dBUAorCWlmIChtYXhfc3dhcF9zaXplKSB7CisJCS8qIElmIHN3YXBwaW5nIGlzIGFjdGl2ZTogbWFrZSBzb21lIGZyZWUgc3BhY2UgaW4gdGhlIHN3YXAKKwkJICAgImRldmljZSIuICovCisJCURQUklOVEsoICJhdGFyaV9zdHJhbV9hbGxvYzogYWZ0ZXIgbWVtX2luaXQsIHN3YXBwaW5nIG9rLCAiCisJCQkJICJjYWxsaW5nIGdldF9yZWdpb25cbiIgKTsKKwkJYWRkciA9IGdldF9zdHJhbV9yZWdpb24oIE5fUEFHRVMoc2l6ZSkgKTsKKwkJZmxhZ3MgPSBCTE9DS19JTlNXQVA7CisJfQorCWVsc2UKKyNlbmRpZgorCWlmICghbWVtX2luaXRfZG9uZSkKKwkJcmV0dXJuIGFsbG9jX2Jvb3RtZW1fbG93KHNpemUpOworCWVsc2UgeworCQkvKiBBZnRlciBtZW1faW5pdCgpIGFuZCBubyBzd2FwcGluZzogY2FuIG9ubHkgcmVzb3J0IHRvCisJCSAqIF9fZ2V0X2RtYV9wYWdlcygpICovCisJCWFkZHIgPSAodm9pZCAqKV9fZ2V0X2RtYV9wYWdlcyhHRlBfS0VSTkVMLCBnZXRfb3JkZXIoc2l6ZSkpOworCQlmbGFncyA9IEJMT0NLX0dGUDsKKwkJRFBSSU5USyggImF0YXJpX3N0cmFtX2FsbG9jOiBhZnRlciBtZW1faW5pdCwgc3dhcHBpbmcgb2ZmLCAiCisJCQkJICJnZXRfcGFnZXM9JXBcbiIsIGFkZHIgKTsKKwl9CisKKwlpZiAoYWRkcikgeworCQlpZiAoIShibG9jayA9IGFkZF9yZWdpb24oIGFkZHIsIHNpemUgKSkpIHsKKwkJCS8qIG91dCBvZiBtZW1vcnkgZm9yIEJMT0NLIHN0cnVjdHVyZSA6LSggKi8KKwkJCURQUklOVEsoICJhdGFyaV9zdHJhbV9hbGxvYzogb3V0IG9mIG1lbSBmb3IgQkxPQ0sgLS0gIgorCQkJCQkgImZyZWVpbmcgYWdhaW5cbiIgKTsKKyNpZmRlZiBDT05GSUdfU1RSQU1fU1dBUAorCQkJaWYgKGZsYWdzID09IEJMT0NLX0lOU1dBUCkKKwkJCQlmcmVlX3N0cmFtX3JlZ2lvbiggU1dBUF9OUihhZGRyKSwgTl9QQUdFUyhzaXplKSApOworCQkJZWxzZQorI2VuZGlmCisJCQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylhZGRyLCBnZXRfb3JkZXIoc2l6ZSkpOworCQkJcmV0dXJuKCBOVUxMICk7CisJCX0KKwkJYmxvY2stPm93bmVyID0gb3duZXI7CisJCWJsb2NrLT5mbGFncyB8PSBmbGFnczsKKwl9CisJcmV0dXJuKCBhZGRyICk7Cit9CisKK3ZvaWQgYXRhcmlfc3RyYW1fZnJlZSggdm9pZCAqYWRkciApCisKK3sKKwlCTE9DSyAqYmxvY2s7CisKKwlEUFJJTlRLKCAiYXRhcmlfc3RyYW1fZnJlZShhZGRyPSVwKVxuIiwgYWRkciApOworCisJaWYgKCEoYmxvY2sgPSBmaW5kX3JlZ2lvbiggYWRkciApKSkgeworCQlwcmludGsoIEtFUk5fRVJSICJBdHRlbXB0IHRvIGZyZWUgbm9uLWFsbG9jYXRlZCBTVC1SQU0gYmxvY2sgYXQgJXAgIgorCQkJCSJmcm9tICVwXG4iLCBhZGRyLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkgKTsKKwkJcmV0dXJuOworCX0KKwlEUFJJTlRLKCAiYXRhcmlfc3RyYW1fZnJlZTogZm91bmQgYmxvY2sgKCVwKTogc2l6ZT0lMDhseCwgb3duZXI9JXMsICIKKwkJCSAiZmxhZ3M9JTAyeFxuIiwgYmxvY2ssIGJsb2NrLT5zaXplLCBibG9jay0+b3duZXIsIGJsb2NrLT5mbGFncyApOworCisjaWZkZWYgQ09ORklHX1NUUkFNX1NXQVAKKwlpZiAoIW1heF9zd2FwX3NpemUpIHsKKyNlbmRpZgorCQlpZiAoYmxvY2stPmZsYWdzICYgQkxPQ0tfR0ZQKSB7CisJCQlEUFJJTlRLKCJhdGFyaV9zdHJhbV9mcmVlOiBpcyBrbWFsbG9jZWQsIG9yZGVyX3NpemU9JWRcbiIsCisJCQkJZ2V0X29yZGVyKGJsb2NrLT5zaXplKSk7CisJCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWFkZHIsIGdldF9vcmRlcihibG9jay0+c2l6ZSkpOworCQl9CisJCWVsc2UKKwkJCWdvdG8gZmFpbDsKKyNpZmRlZiBDT05GSUdfU1RSQU1fU1dBUAorCX0KKwllbHNlIGlmIChibG9jay0+ZmxhZ3MgJiBCTE9DS19JTlNXQVApIHsKKwkJRFBSSU5USyggImF0YXJpX3N0cmFtX2ZyZWU6IGlzIHN3YXAtYWxsb2NlZFxuIiApOworCQlmcmVlX3N0cmFtX3JlZ2lvbiggU1dBUF9OUihibG9jay0+c3RhcnQpLCBOX1BBR0VTKGJsb2NrLT5zaXplKSApOworCX0KKwllbHNlCisJCWdvdG8gZmFpbDsKKyNlbmRpZgorCXJlbW92ZV9yZWdpb24oIGJsb2NrICk7CisJcmV0dXJuOworCisgIGZhaWw6CisJcHJpbnRrKCBLRVJOX0VSUiAiYXRhcmlfc3RyYW1fZnJlZTogY2Fubm90IGZyZWUgYmxvY2sgYXQgJXAgIgorCQkJIihjYWxsZWQgZnJvbSAlcClcbiIsIGFkZHIsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSApOworfQorCisKKyNpZmRlZiBDT05GSUdfU1RSQU1fU1dBUAorCisMCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCQkJCQkJICAgTWFpbiBTd2FwcGluZyBGdW5jdGlvbnMJCQkJCQkJKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKKy8qCisgKiBJbml0aWFsaXplIFNULVJBTSBzd2FwIGRldmljZQorICogKGxvdHMgY29waWVkIGFuZCBtb2RpZmllZCBmcm9tIHN5c19zd2Fwb24oKSBpbiBtbS9zd2FwZmlsZS5jKQorICovCitzdGF0aWMgaW50IF9faW5pdCBzd2FwX2luaXQodm9pZCAqc3RhcnRfbWVtLCB2b2lkICpzd2FwX2RhdGEpCit7CisJc3RhdGljIHN0cnVjdCBkZW50cnkgZmFrZV9kZW50cnk7CisJc3RhdGljIHN0cnVjdCB2ZnNtb3VudCBmYWtlX3Zmc21udDsKKwlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqcDsKKwlzdHJ1Y3QgaW5vZGUgc3dhcF9pbm9kZTsKKwl1bnNpZ25lZCBpbnQgdHlwZTsKKwl2b2lkICphZGRyOworCWludCBpLCBqLCBrLCBwcmV2OworCisJRFBSSU5USygic3dhcF9pbml0KHN0YXJ0X21lbT0lcCwgc3dhcF9kYXRhPSVwKVxuIiwKKwkJc3RhcnRfbWVtLCBzd2FwX2RhdGEpOworCisJLyogbmVlZCBhdCBsZWFzdCBvbmUgcGFnZSBmb3Igc3dhcHBpbmcgdG8gKGFuZCB0aGlzIGFsc28gaXNuJ3QgdmVyeQorCSAqIG11Y2guLi4gOi0pICovCisJaWYgKHN3YXBfZW5kIC0gc3dhcF9zdGFydCA8IDIqUEFHRV9TSVpFKSB7CisJCXByaW50ayggS0VSTl9XQVJOSU5HICJzdHJhbV9zd2FwX2luaXQ6IHN3YXAgc3BhY2UgdG9vIHNtYWxsXG4iICk7CisJCXJldHVybiggMCApOworCX0KKworCS8qIGZpbmQgZnJlZSBzbG90IGluIHN3YXBfaW5mbyAqLworCWZvciggcCA9IHN3YXBfaW5mbywgdHlwZSA9IDA7IHR5cGUgPCBucl9zd2FwZmlsZXM7IHR5cGUrKywgcCsrICkKKwkJaWYgKCEocC0+ZmxhZ3MgJiBTV1BfVVNFRCkpCisJCQlicmVhazsKKwlpZiAodHlwZSA+PSBNQVhfU1dBUEZJTEVTKSB7CisJCXByaW50ayggS0VSTl9XQVJOSU5HICJzdHJhbV9zd2FwX2luaXQ6IG1heC4gbnVtYmVyIG9mICIKKwkJCQkic3dhcCBkZXZpY2VzIGV4aGF1c3RlZFxuIiApOworCQlyZXR1cm4oIDAgKTsKKwl9CisJaWYgKHR5cGUgPj0gbnJfc3dhcGZpbGVzKQorCQlucl9zd2FwZmlsZXMgPSB0eXBlKzE7CisKKwlzdHJhbV9zd2FwX2luZm8gPSBwOworCXN0cmFtX3N3YXBfdHlwZSA9IHR5cGU7CisKKwkvKiBmYWtlIHNvbWUgZGlyIGNhY2hlIGVudHJpZXMgdG8gZ2l2ZSB1cyBzb21lIG5hbWUgaW4gL2Rldi9zd2FwcyAqLworCWZha2VfZGVudHJ5LmRfcGFyZW50ID0gJmZha2VfZGVudHJ5OworCWZha2VfZGVudHJ5LmRfbmFtZS5uYW1lID0gInN0cmFtIChpbnRlcm5hbCkiOworCWZha2VfZGVudHJ5LmRfbmFtZS5sZW4gPSAxNjsKKwlmYWtlX3Zmc21udC5tbnRfcGFyZW50ID0gJmZha2VfdmZzbW50OworCisJcC0+ZmxhZ3MgICAgICAgID0gU1dQX1VTRUQ7CisJcC0+c3dhcF9maWxlICAgID0gJmZha2VfZGVudHJ5OworCXAtPnN3YXBfdmZzbW50ICA9ICZmYWtlX3Zmc21udDsKKwlwLT5zd2FwX21hcAk9IHN3YXBfZGF0YTsKKwlwLT5jbHVzdGVyX25yICAgPSAwOworCXAtPm5leHQgICAgICAgICA9IC0xOworCXAtPnByaW8gICAgICAgICA9IDB4N2ZmMDsJLyogYSByYXRoZXIgaGlnaCBwcmlvcml0eSwgYnV0IG5vdCB0aGUgaGlnZXN0CisJCQkJCQkJCSAqIHRvIGdpdmUgdGhlIHVzZXIgYSBjaGFuY2UgdG8gb3ZlcnJpZGUgKi8KKworCS8qIGNhbGwgc3RyYW1fb3BlbigpIGRpcmVjdGx5LCBhdm9pZHMgYXQgbGVhc3QgdGhlIG92ZXJoZWFkIGluCisJICogY29uc3RydWN0aW5nIGEgZHVtbXkgZmlsZSBzdHJ1Y3R1cmUuLi4gKi8KKwlzd2FwX2lub2RlLmlfcmRldiA9IE1LREVWKCBTVFJBTV9NQUpPUiwgU1RSQU1fTUlOT1IgKTsKKwlzdHJhbV9vcGVuKCAmc3dhcF9pbm9kZSwgTUFHSUNfRklMRV9QICk7CisJcC0+bWF4ID0gU1dBUF9OUihzd2FwX2VuZCk7CisKKwkvKiBpbml0aWFsaXplIHN3YXBfbWFwOiBzZXQgcmVnaW9ucyB0aGF0IGFyZSBhbHJlYWR5IGFsbG9jYXRlZCBvciBiZWxvbmcKKwkgKiB0byBrZXJuZWwgZGF0YSBzcGFjZSB0byBTV0FQX01BUF9CQUQsIG90aGVyd2lzZSB0byBmcmVlICovCisJaiA9IDA7IC8qICMgb2YgZnJlZSBwYWdlcyAqLworCWsgPSAwOyAvKiAjIG9mIGFscmVhZHkgYWxsb2NhdGVkIHBhZ2VzIChmcm9tIHByZS1tZW1faW5pdCBzdHJhbV9hbGxvYygpKSAqLworCXAtPmxvd2VzdF9iaXQgPSAwOworCXAtPmhpZ2hlc3RfYml0ID0gMDsKKwlmb3IoIGkgPSAxLCBhZGRyID0gU1dBUF9BRERSKDEpOyBpIDwgcC0+bWF4OworCQkgaSsrLCBhZGRyICs9IFBBR0VfU0laRSApIHsKKwkJaWYgKGluX3NvbWVfcmVnaW9uKCBhZGRyICkpIHsKKwkJCXAtPnN3YXBfbWFwW2ldID0gU1dBUF9NQVBfQkFEOworCQkJKytrOworCQl9CisJCWVsc2UgaWYgKGtlcm5lbF9pbl9zdHJhbSAmJiBhZGRyIDwgc3RhcnRfbWVtICkgeworCQkJcC0+c3dhcF9tYXBbaV0gPSBTV0FQX01BUF9CQUQ7CisJCX0KKwkJZWxzZSB7CisJCQlwLT5zd2FwX21hcFtpXSA9IDA7CisJCQkrK2o7CisJCQlpZiAoIXAtPmxvd2VzdF9iaXQpIHAtPmxvd2VzdF9iaXQgPSBpOworCQkJcC0+aGlnaGVzdF9iaXQgPSBpOworCQl9CisJfQorCS8qIGZpcnN0IHBhZ2UgYWx3YXlzIHJlc2VydmVkIChhbmQgZG9lc24ndCByZWFsbHkgYmVsb25nIHRvIHN3YXAgc3BhY2UpICovCisJcC0+c3dhcF9tYXBbMF0gPSBTV0FQX01BUF9CQUQ7CisKKwkvKiBub3cgc3dhcHBpbmcgdG8gdGhpcyBkZXZpY2Ugb2sgKi8KKwlwLT5wYWdlcyA9IGogKyBrOworCXN3YXBfbGlzdF9sb2NrKCk7CisJbnJfc3dhcF9wYWdlcyArPSBqOworCXAtPmZsYWdzID0gU1dQX1dSSVRFT0s7CisKKwkvKiBpbnNlcnQgc3dhcCBzcGFjZSBpbnRvIHN3YXBfbGlzdCAqLworCXByZXYgPSAtMTsKKwlmb3IgKGkgPSBzd2FwX2xpc3QuaGVhZDsgaSA+PSAwOyBpID0gc3dhcF9pbmZvW2ldLm5leHQpIHsKKwkJaWYgKHAtPnByaW8gPj0gc3dhcF9pbmZvW2ldLnByaW8pIHsKKwkJCWJyZWFrOworCQl9CisJCXByZXYgPSBpOworCX0KKwlwLT5uZXh0ID0gaTsKKwlpZiAocHJldiA8IDApIHsKKwkJc3dhcF9saXN0LmhlYWQgPSBzd2FwX2xpc3QubmV4dCA9IHAgLSBzd2FwX2luZm87CisJfSBlbHNlIHsKKwkJc3dhcF9pbmZvW3ByZXZdLm5leHQgPSBwIC0gc3dhcF9pbmZvOworCX0KKwlzd2FwX2xpc3RfdW5sb2NrKCk7CisKKwlwcmludGsoIEtFUk5fSU5GTyAiVXNpbmcgJWRrICglZCBwYWdlcykgb2YgU1QtUkFNIGFzIHN3YXAgc3BhY2UuXG4iLAorCQkJcC0+cGFnZXMgPDwgMiwgcC0+cGFnZXMgKTsKKwlyZXR1cm4oIDEgKTsKK30KKworCisvKgorICogVGhlIHN3YXAgZW50cnkgaGFzIGJlZW4gcmVhZCBpbiBhZHZhbmNlLCBhbmQgd2UgcmV0dXJuIDEgdG8gaW5kaWNhdGUKKyAqIHRoYXQgdGhlIHBhZ2UgaGFzIGJlZW4gdXNlZCBvciBpcyBubyBsb25nZXIgbmVlZGVkLgorICoKKyAqIEFsd2F5cyBzZXQgdGhlIHJlc3VsdGluZyBwdGUgdG8gYmUgbm93cml0ZSAodGhlIHNhbWUgYXMgQ09XIHBhZ2VzCisgKiBhZnRlciBvbmUgcHJvY2VzcyBoYXMgZXhpdGVkKS4gIFdlIGRvbid0IGtub3cganVzdCBob3cgbWFueSBQVEVzIHdpbGwKKyAqIHNoYXJlIHRoaXMgc3dhcCBlbnRyeSwgc28gYmUgY2F1dGlvdXMgYW5kIGxldCBkb193cF9wYWdlIHdvcmsgb3V0CisgKiB3aGF0IHRvIGRvIGlmIGEgd3JpdGUgaXMgcmVxdWVzdGVkIGxhdGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdW5zd2FwX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsIHVuc2lnbmVkIGxvbmcKKwkJCSAgICAgIGFkZHJlc3MsIHB0ZV90ICpkaXIsIHN3cF9lbnRyeV90IGVudHJ5LAorCQkJICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcHRlX3QgcHRlID0gKmRpcjsKKworCWlmIChwdGVfbm9uZShwdGUpKQorCQlyZXR1cm47CisJaWYgKHB0ZV9wcmVzZW50KHB0ZSkpIHsKKwkJLyogSWYgdGhpcyBlbnRyeSBpcyBzd2FwLWNhY2hlZCwgdGhlbiBwYWdlIG11c3QgYWxyZWFkeQorICAgICAgICAgICAgICAgICAgIGhvbGQgdGhlIHJpZ2h0IGFkZHJlc3MgZm9yIGFueSBjb3BpZXMgaW4gcGh5c2ljYWwKKyAgICAgICAgICAgICAgICAgICBtZW1vcnkgKi8KKwkJaWYgKHB0ZV9wYWdlKHB0ZSkgIT0gcGFnZSkKKwkJCXJldHVybjsKKwkJLyogV2Ugd2lsbCBiZSByZW1vdmluZyB0aGUgc3dhcCBjYWNoZSBpbiBhIG1vbWVudCwgc28uLi4gKi8KKwkJc2V0X3B0ZShkaXIsIHB0ZV9ta2RpcnR5KHB0ZSkpOworCQlyZXR1cm47CisJfQorCWlmIChwdGVfdmFsKHB0ZSkgIT0gZW50cnkudmFsKQorCQlyZXR1cm47CisKKwlEUFJJTlRLKCJ1bnN3YXBfcHRlOiByZXBsYWNpbmcgZW50cnkgJTA4bHggYnkgbmV3IHBhZ2UgJXAiLAorCQllbnRyeS52YWwsIHBhZ2UpOworCXNldF9wdGUoZGlyLCBwdGVfbWtkaXJ0eShta19wdGUocGFnZSwgdm1hLT52bV9wYWdlX3Byb3QpKSk7CisJc3dhcF9mcmVlKGVudHJ5KTsKKwlnZXRfcGFnZShwYWdlKTsKKwlpbmNfbW1fY291bnRlcih2bWEtPnZtX21tLCByc3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdW5zd2FwX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsIHBtZF90ICpkaXIsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzd3BfZW50cnlfdCBlbnRyeSwKKwkJCSAgICAgIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXB0ZV90ICogcHRlOworCXVuc2lnbmVkIGxvbmcgZW5kOworCisJaWYgKHBtZF9ub25lKCpkaXIpKQorCQlyZXR1cm47CisJaWYgKHBtZF9iYWQoKmRpcikpIHsKKwkJcG1kX0VSUk9SKCpkaXIpOworCQlwbWRfY2xlYXIoZGlyKTsKKwkJcmV0dXJuOworCX0KKwlwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChkaXIsIGFkZHJlc3MpOworCW9mZnNldCArPSBhZGRyZXNzICYgUE1EX01BU0s7CisJYWRkcmVzcyAmPSB+UE1EX01BU0s7CisJZW5kID0gYWRkcmVzcyArIHNpemU7CisJaWYgKGVuZCA+IFBNRF9TSVpFKQorCQllbmQgPSBQTURfU0laRTsKKwlkbyB7CisJCXVuc3dhcF9wdGUodm1hLCBvZmZzZXQrYWRkcmVzcy12bWEtPnZtX3N0YXJ0LCBwdGUsIGVudHJ5LCBwYWdlKTsKKwkJYWRkcmVzcyArPSBQQUdFX1NJWkU7CisJCXB0ZSsrOworCX0gd2hpbGUgKGFkZHJlc3MgPCBlbmQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdW5zd2FwX3BnZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsIHBnZF90ICpkaXIsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgICAgIHN3cF9lbnRyeV90IGVudHJ5LCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlwbWRfdCAqIHBtZDsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCwgZW5kOworCisJaWYgKHBnZF9ub25lKCpkaXIpKQorCQlyZXR1cm47CisJaWYgKHBnZF9iYWQoKmRpcikpIHsKKwkJcGdkX0VSUk9SKCpkaXIpOworCQlwZ2RfY2xlYXIoZGlyKTsKKwkJcmV0dXJuOworCX0KKwlwbWQgPSBwbWRfb2Zmc2V0KGRpciwgYWRkcmVzcyk7CisJb2Zmc2V0ID0gYWRkcmVzcyAmIFBHRElSX01BU0s7CisJYWRkcmVzcyAmPSB+UEdESVJfTUFTSzsKKwllbmQgPSBhZGRyZXNzICsgc2l6ZTsKKwlpZiAoZW5kID4gUEdESVJfU0laRSkKKwkJZW5kID0gUEdESVJfU0laRTsKKwlkbyB7CisJCXVuc3dhcF9wbWQodm1hLCBwbWQsIGFkZHJlc3MsIGVuZCAtIGFkZHJlc3MsIG9mZnNldCwgZW50cnksCisJCQkgICBwYWdlKTsKKwkJYWRkcmVzcyA9IChhZGRyZXNzICsgUE1EX1NJWkUpICYgUE1EX01BU0s7CisJCXBtZCsrOworCX0gd2hpbGUgKGFkZHJlc3MgPCBlbmQpOworfQorCitzdGF0aWMgdm9pZCB1bnN3YXBfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwgcGdkX3QgKnBnZGlyLAorCQkgICAgICAgc3dwX2VudHJ5X3QgZW50cnksIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSB2bWEtPnZtX3N0YXJ0LCBlbmQgPSB2bWEtPnZtX2VuZDsKKworCWRvIHsKKwkJdW5zd2FwX3BnZCh2bWEsIHBnZGlyLCBzdGFydCwgZW5kIC0gc3RhcnQsIGVudHJ5LCBwYWdlKTsKKwkJc3RhcnQgPSAoc3RhcnQgKyBQR0RJUl9TSVpFKSAmIFBHRElSX01BU0s7CisJCXBnZGlyKys7CisJfSB3aGlsZSAoc3RhcnQgPCBlbmQpOworfQorCitzdGF0aWMgdm9pZCB1bnN3YXBfcHJvY2VzcyhzdHJ1Y3QgbW1fc3RydWN0ICogbW0sIHN3cF9lbnRyeV90IGVudHJ5LAorCQkJICAgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0KiB2bWE7CisKKwkvKgorCSAqIEdvIHRocm91Z2ggcHJvY2VzcycgcGFnZSBkaXJlY3RvcnkuCisJICovCisJaWYgKCFtbSkKKwkJcmV0dXJuOworCWZvciAodm1hID0gbW0tPm1tYXA7IHZtYTsgdm1hID0gdm1hLT52bV9uZXh0KSB7CisJCXBnZF90ICogcGdkID0gcGdkX29mZnNldChtbSwgdm1hLT52bV9zdGFydCk7CisJCXVuc3dhcF92bWEodm1hLCBwZ2QsIGVudHJ5LCBwYWdlKTsKKwl9Cit9CisKKworc3RhdGljIGludCB1bnN3YXBfYnlfcmVhZCh1bnNpZ25lZCBzaG9ydCAqbWFwLCB1bnNpZ25lZCBsb25nIG1heCwKKwkJCSAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBuX3BhZ2VzKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzd3BfZW50cnlfdCBlbnRyeTsKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlEUFJJTlRLKCAidW5zd2FwcGluZyAlbHUuLiVsdSBieSByZWFkaW5nIGluXG4iLAorCQkJIHN0YXJ0LCBzdGFydCtuX3BhZ2VzLTEgKTsKKworCWZvciggaSA9IHN0YXJ0OyBpIDwgc3RhcnQrbl9wYWdlczsgKytpICkgeworCQlpZiAobWFwW2ldID09IFNXQVBfTUFQX0JBRCkgeworCQkJcHJpbnRrKCBLRVJOX0VSUiAiZ2V0X3N0cmFtX3JlZ2lvbjogcGFnZSAlbHUgYWxyZWFkeSAiCisJCQkJCSJyZXNlcnZlZD8/XG4iLCBpICk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChtYXBbaV0pIHsKKwkJCWVudHJ5ID0gc3dwX2VudHJ5KHN0cmFtX3N3YXBfdHlwZSwgaSk7CisJCQlEUFJJTlRLKCJ1bnN3YXA6IG1hcFtpPSVsdV09JXUgbnJfc3dhcD0lbGRcbiIsCisJCQkJaSwgbWFwW2ldLCBucl9zd2FwX3BhZ2VzKTsKKworCQkJc3dhcF9kZXZpY2VfbG9jayhzdHJhbV9zd2FwX2luZm8pOworCQkJbWFwW2ldKys7CisJCQlzd2FwX2RldmljZV91bmxvY2soc3RyYW1fc3dhcF9pbmZvKTsKKwkJCS8qIEdldCBhIHBhZ2UgZm9yIHRoZSBlbnRyeSwgdXNpbmcgdGhlIGV4aXN0aW5nCisJCQkgICBzd2FwIGNhY2hlIHBhZ2UgaWYgdGhlcmUgaXMgb25lLiAgT3RoZXJ3aXNlLAorCQkJICAgZ2V0IGEgY2xlYW4gcGFnZSBhbmQgcmVhZCB0aGUgc3dhcCBpbnRvIGl0LiAqLworCQkJcGFnZSA9IHJlYWRfc3dhcF9jYWNoZV9hc3luYyhlbnRyeSwgTlVMTCwgMCk7CisJCQlpZiAoIXBhZ2UpIHsKKwkJCQlzd2FwX2ZyZWUoZW50cnkpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJCWZvcl9lYWNoX3Byb2Nlc3MocCkKKwkJCQl1bnN3YXBfcHJvY2VzcyhwLT5tbSwgZW50cnksIHBhZ2UpOworCQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQkJc2htZW1fdW51c2UoZW50cnksIHBhZ2UpOworCQkJLyogTm93IGdldCByaWQgb2YgdGhlIGV4dHJhIHJlZmVyZW5jZSB0byB0aGUKKwkJCSAgIHRlbXBvcmFyeSBwYWdlIHdlJ3ZlIGJlZW4gdXNpbmcuICovCisJCQlpZiAoUGFnZVN3YXBDYWNoZShwYWdlKSkKKwkJCQlkZWxldGVfZnJvbV9zd2FwX2NhY2hlKHBhZ2UpOworCQkJX19mcmVlX3BhZ2UocGFnZSk7CisJI2lmZGVmIERPX1BST0MKKwkJCXN0YXRfc3dhcF9mb3JjZSsrOworCSNlbmRpZgorCQl9CisKKwkJRFBSSU5USyggInVuc3dhcDogbWFwW2k9JWx1XT0ldSBucl9zd2FwPSVsZFxuIiwKKwkJCQkgaSwgbWFwW2ldLCBucl9zd2FwX3BhZ2VzICk7CisJCXN3YXBfbGlzdF9sb2NrKCk7CisJCXN3YXBfZGV2aWNlX2xvY2soc3RyYW1fc3dhcF9pbmZvKTsKKwkJbWFwW2ldID0gU1dBUF9NQVBfQkFEOworCQlpZiAoc3RyYW1fc3dhcF9pbmZvLT5sb3dlc3RfYml0ID09IGkpCisJCQlzdHJhbV9zd2FwX2luZm8tPmxvd2VzdF9iaXQrKzsKKwkJaWYgKHN0cmFtX3N3YXBfaW5mby0+aGlnaGVzdF9iaXQgPT0gaSkKKwkJCXN0cmFtX3N3YXBfaW5mby0+aGlnaGVzdF9iaXQtLTsKKwkJLS1ucl9zd2FwX3BhZ2VzOworCQlzd2FwX2RldmljZV91bmxvY2soc3RyYW1fc3dhcF9pbmZvKTsKKwkJc3dhcF9saXN0X3VubG9jaygpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogcmVzZXJ2ZSBhIHJlZ2lvbiBpbiBTVC1SQU0gc3dhcCBzcGFjZSBmb3IgYW4gYWxsb2NhdGlvbgorICovCitzdGF0aWMgdm9pZCAqZ2V0X3N0cmFtX3JlZ2lvbiggdW5zaWduZWQgbG9uZyBuX3BhZ2VzICkKK3sKKwl1bnNpZ25lZCBzaG9ydCAqbWFwID0gc3RyYW1fc3dhcF9pbmZvLT5zd2FwX21hcDsKKwl1bnNpZ25lZCBsb25nIG1heCA9IHN0cmFtX3N3YXBfaW5mby0+bWF4OworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHRvdGFsX2ZyZWUsIHJlZ2lvbl9mcmVlOworCWludCBlcnI7CisJdm9pZCAqcmV0ID0gTlVMTDsKKworCURQUklOVEsoICJnZXRfc3RyYW1fcmVnaW9uKG5fcGFnZXM9JWx1KVxuIiwgbl9wYWdlcyApOworCisJZG93bigmc3RyYW1fc3dhcF9zZW0pOworCisJLyogZGlzYWxsb3cgd3JpdGluZyB0byB0aGUgc3dhcCBkZXZpY2Ugbm93ICovCisJc3RyYW1fc3dhcF9pbmZvLT5mbGFncyA9IFNXUF9VU0VEOworCisJLyogZmluZCBhIHJlZ2lvbiBvZiBuX3BhZ2VzIHBhZ2VzIGluIHRoZSBzd2FwIHNwYWNlIGluY2x1ZGluZyBhcyBtdWNoIGZyZWUKKwkgKiBwYWdlcyBhcyBwb3NzaWJsZSAoYW5kIGV4Y2x1ZGluZyBhbnkgYWxyZWFkeS1yZXNlcnZlZCBwYWdlcykuICovCisJaWYgKCEoc3RhcnQgPSBmaW5kX2ZyZWVfcmVnaW9uKCBuX3BhZ2VzLCAmdG90YWxfZnJlZSwgJnJlZ2lvbl9mcmVlICkpKQorCQlnb3RvIGVuZDsKKwlEUFJJTlRLKCAiZ2V0X3N0cmFtX3JlZ2lvbjogcmVnaW9uIHN0YXJ0cyBhdCAlbHUsIGhhcyAlbHUgZnJlZSBwYWdlc1xuIiwKKwkJCSBzdGFydCwgcmVnaW9uX2ZyZWUgKTsKKworCWVyciA9IHVuc3dhcF9ieV9yZWFkKG1hcCwgbWF4LCBzdGFydCwgbl9wYWdlcyk7CisJaWYgKGVycikKKwkJZ290byBlbmQ7CisKKwlyZXQgPSBTV0FQX0FERFIoc3RhcnQpOworICBlbmQ6CisJLyogYWxsb3cgdXNpbmcgc3dhcCBkZXZpY2UgYWdhaW4gKi8KKwlzdHJhbV9zd2FwX2luZm8tPmZsYWdzID0gU1dQX1dSSVRFT0s7CisJdXAoJnN0cmFtX3N3YXBfc2VtKTsKKwlEUFJJTlRLKCAiZ2V0X3N0cmFtX3JlZ2lvbjogcmV0dXJuaW5nICVwXG4iLCByZXQgKTsKKwlyZXR1cm4oIHJldCApOworfQorCisKKy8qCisgKiBmcmVlIGEgcmVzZXJ2ZWQgcmVnaW9uIGluIFNULVJBTSBzd2FwIHNwYWNlCisgKi8KK3N0YXRpYyB2b2lkIGZyZWVfc3RyYW1fcmVnaW9uKCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBuX3BhZ2VzICkKK3sKKwl1bnNpZ25lZCBzaG9ydCAqbWFwID0gc3RyYW1fc3dhcF9pbmZvLT5zd2FwX21hcDsKKworCURQUklOVEsoICJmcmVlX3N0cmFtX3JlZ2lvbihvZmZzZXQ9JWx1LG5fcGFnZXM9JWx1KVxuIiwgb2Zmc2V0LCBuX3BhZ2VzICk7CisKKwlpZiAob2Zmc2V0IDwgMSB8fCBvZmZzZXQgKyBuX3BhZ2VzID4gc3RyYW1fc3dhcF9pbmZvLT5tYXgpIHsKKwkJcHJpbnRrKCBLRVJOX0VSUiAiZnJlZV9zdHJhbV9yZWdpb246IFRyeWluZyB0byBmcmVlIG5vbi1TVC1SQU1cbiIgKTsKKwkJcmV0dXJuOworCX0KKworCXN3YXBfbGlzdF9sb2NrKCk7CisJc3dhcF9kZXZpY2VfbG9jayhzdHJhbV9zd2FwX2luZm8pOworCS8qIHVuLXJlc2VydmUgdGhlIGZyZWVkIHBhZ2VzICovCisJZm9yKCA7IG5fcGFnZXMgPiAwOyArK29mZnNldCwgLS1uX3BhZ2VzICkgeworCQlpZiAobWFwW29mZnNldF0gIT0gU1dBUF9NQVBfQkFEKQorCQkJcHJpbnRrKCBLRVJOX0VSUiAiZnJlZV9zdHJhbV9yZWdpb246IFN3YXAgcGFnZSAlbHUgd2FzIG5vdCAiCisJCQkJCSJyZXNlcnZlZFxuIiwgb2Zmc2V0ICk7CisJCW1hcFtvZmZzZXRdID0gMDsKKwl9CisKKwkvKiB1cGRhdGUgc3dhcHBpbmcgbWV0YS1kYXRhICovCisJaWYgKG9mZnNldCA8IHN0cmFtX3N3YXBfaW5mby0+bG93ZXN0X2JpdCkKKwkJc3RyYW1fc3dhcF9pbmZvLT5sb3dlc3RfYml0ID0gb2Zmc2V0OworCWlmIChvZmZzZXQrbl9wYWdlcy0xID4gc3RyYW1fc3dhcF9pbmZvLT5oaWdoZXN0X2JpdCkKKwkJc3RyYW1fc3dhcF9pbmZvLT5oaWdoZXN0X2JpdCA9IG9mZnNldCtuX3BhZ2VzLTE7CisJaWYgKHN0cmFtX3N3YXBfaW5mby0+cHJpbyA+IHN3YXBfaW5mb1tzd2FwX2xpc3QubmV4dF0ucHJpbykKKwkJc3dhcF9saXN0Lm5leHQgPSBzd2FwX2xpc3QuaGVhZDsKKwlucl9zd2FwX3BhZ2VzICs9IG5fcGFnZXM7CisJc3dhcF9kZXZpY2VfdW5sb2NrKHN0cmFtX3N3YXBfaW5mbyk7CisJc3dhcF9saXN0X3VubG9jaygpOworfQorCisMCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCQkJCQkJVXRpbGl0eSBGdW5jdGlvbnMgZm9yIFN3YXBwaW5nCQkJCQkJKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKKy8qIGlzIGFkZHIgaW4gc29tZSBvZiB0aGUgYWxsb2NhdGVkIHJlZ2lvbnM/ICovCitzdGF0aWMgaW50IGluX3NvbWVfcmVnaW9uKHZvaWQgKmFkZHIpCit7CisJQkxPQ0sgKnA7CisKKwlmb3IoIHAgPSBhbGxvY19saXN0OyBwOyBwID0gcC0+bmV4dCApIHsKKwkJaWYgKHAtPnN0YXJ0IDw9IGFkZHIgJiYgYWRkciA8IHAtPnN0YXJ0ICsgcC0+c2l6ZSkKKwkJCXJldHVybiggMSApOworCX0KKwlyZXR1cm4oIDAgKTsKK30KKworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX2ZyZWVfcmVnaW9uKHVuc2lnbmVkIGxvbmcgbl9wYWdlcywKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nICp0b3RhbF9mcmVlLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKnJlZ2lvbl9mcmVlKQoreworCXVuc2lnbmVkIHNob3J0ICptYXAgPSBzdHJhbV9zd2FwX2luZm8tPnN3YXBfbWFwOworCXVuc2lnbmVkIGxvbmcgbWF4ID0gc3RyYW1fc3dhcF9pbmZvLT5tYXg7CisJdW5zaWduZWQgbG9uZyBoZWFkLCB0YWlsLCBtYXhfc3RhcnQ7CisJbG9uZyBuZnJlZSwgbWF4X2ZyZWU7CisKKwkvKiBmaXJzdCBzY2FuIHRoZSBzd2FwIHNwYWNlIGZvciBhIHN1aXRhYmxlIHBsYWNlIGZvciB0aGUgYWxsb2NhdGlvbiAqLworCWhlYWQgPSAxOworCW1heF9zdGFydCA9IDA7CisJbWF4X2ZyZWUgPSAtMTsKKwkqdG90YWxfZnJlZSA9IDA7CisKKyAgc3RhcnRfb3ZlcjoKKwkvKiBpbmNyZW1lbnQgdGFpbCB1bnRpbCBmaW5hbCB3aW5kb3cgc2l6ZSByZWFjaGVkLCBhbmQgY291bnQgZnJlZSBwYWdlcyAqLworCW5mcmVlID0gMDsKKwlmb3IoIHRhaWwgPSBoZWFkOyB0YWlsLWhlYWQgPCBuX3BhZ2VzICYmIHRhaWwgPCBtYXg7ICsrdGFpbCApIHsKKwkJaWYgKG1hcFt0YWlsXSA9PSBTV0FQX01BUF9CQUQpIHsKKwkJCWhlYWQgPSB0YWlsKzE7CisJCQlnb3RvIHN0YXJ0X292ZXI7CisJCX0KKwkJaWYgKCFtYXBbdGFpbF0pIHsKKwkJCSsrbmZyZWU7CisJCQkrKyp0b3RhbF9mcmVlOworCQl9CisJfQorCWlmICh0YWlsLWhlYWQgPCBuX3BhZ2VzKQorCQlnb3RvIG91dDsKKwlpZiAobmZyZWUgPiBtYXhfZnJlZSkgeworCQltYXhfc3RhcnQgPSBoZWFkOworCQltYXhfZnJlZSAgPSBuZnJlZTsKKwkJaWYgKG1heF9mcmVlID49IG5fcGFnZXMpCisJCQkvKiBkb24ndCBuZWVkIG1vcmUgZnJlZSBwYWdlcy4uLiA6LSkgKi8KKwkJCWdvdG8gb3V0OworCX0KKworCS8qIG5vdyBzaGlmdCB0aGUgd2luZG93IGFuZCBsb29rIGZvciB0aGUgYXJlYSB3aGVyZSBhcyBtdWNoIHBhZ2VzIGFzCisJICogcG9zc2libGUgYXJlIGZyZWUgKi8KKwl3aGlsZSggdGFpbCA8IG1heCApIHsKKwkJbmZyZWUgLT0gKG1hcFtoZWFkKytdID09IDApOworCQlpZiAobWFwW3RhaWxdID09IFNXQVBfTUFQX0JBRCkgeworCQkJaGVhZCA9IHRhaWwrMTsKKwkJCWdvdG8gc3RhcnRfb3ZlcjsKKwkJfQorCQlpZiAoIW1hcFt0YWlsXSkgeworCQkJKytuZnJlZTsKKwkJCSsrKnRvdGFsX2ZyZWU7CisJCX0KKwkJKyt0YWlsOworCQlpZiAobmZyZWUgPiBtYXhfZnJlZSkgeworCQkJbWF4X3N0YXJ0ID0gaGVhZDsKKwkJCW1heF9mcmVlICA9IG5mcmVlOworCQkJaWYgKG1heF9mcmVlID49IG5fcGFnZXMpCisJCQkJLyogZG9uJ3QgbmVlZCBtb3JlIGZyZWUgcGFnZXMuLi4gOi0pICovCisJCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKyAgb3V0OgorCWlmIChtYXhfZnJlZSA8IDApIHsKKwkJcHJpbnRrKCBLRVJOX05PVElDRSAiZ2V0X3N0cmFtX3JlZ2lvbjogU1QtUkFNIHRvbyBmdWxsIG9yIGZyYWdtZW50ZWQgIgorCQkJCSItLSBjYW4ndCBhbGxvY2F0ZSAlbHUgcGFnZXNcbiIsIG5fcGFnZXMgKTsKKwkJcmV0dXJuKCAwICk7CisJfQorCisJKnJlZ2lvbl9mcmVlID0gbWF4X2ZyZWU7CisJcmV0dXJuKCBtYXhfc3RhcnQgKTsKK30KKworCisvKiBzZXR1cCBwYXJhbWV0ZXJzIGZyb20gY29tbWFuZCBsaW5lICovCit2b2lkIF9faW5pdCBzdHJhbV9zd2FwX3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKQoreworCWlmIChpbnRzWzBdID49IDEpCisJCW1heF9zd2FwX3NpemUgPSAoKGludHNbMV0gPCAwID8gMCA6IGludHNbMV0pICogMTAyNCkgJiBQQUdFX01BU0s7Cit9CisKKwwKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoJCQkJCQkJCVNULVJBTSBkZXZpY2UJCQkJCQkJCSovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCByZWZjbnQ7CisKK3N0YXRpYyB2b2lkIGRvX3N0cmFtX3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICpxKQoreworCXN0cnVjdCByZXF1ZXN0ICpyZXE7CisKKwl3aGlsZSAoKHJlcSA9IGVsdl9uZXh0X3JlcXVlc3QocSkpICE9IE5VTEwpIHsKKwkJdm9pZCAqc3RhcnQgPSBzd2FwX3N0YXJ0ICsgKHJlcS0+c2VjdG9yIDw8IDkpOworCQl1bnNpZ25lZCBsb25nIGxlbiA9IHJlcS0+Y3VycmVudF9ucl9zZWN0b3JzIDw8IDk7CisJCWlmICgoc3RhcnQgKyBsZW4pID4gc3dhcF9lbmQpIHsKKwkJCXByaW50ayggS0VSTl9FUlIgInN0cmFtOiBiYWQgYWNjZXNzIGJleW9uZCBlbmQgb2YgZGV2aWNlOiAiCisJCQkJCSJibG9jaz0lbGQsIGNvdW50PSVkXG4iLAorCQkJCQlyZXEtPnNlY3RvciwKKwkJCQkJcmVxLT5jdXJyZW50X25yX3NlY3RvcnMgKTsKKwkJCWVuZF9yZXF1ZXN0KHJlcSwgMCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChyZXEtPmNtZCA9PSBSRUFEKSB7CisJCQltZW1jcHkocmVxLT5idWZmZXIsIHN0YXJ0LCBsZW4pOworI2lmZGVmIERPX1BST0MKKwkJCXN0YXRfc3dhcF9yZWFkICs9IE5fUEFHRVMobGVuKTsKKyNlbmRpZgorCQl9CisJCWVsc2UgeworCQkJbWVtY3B5KHN0YXJ0LCByZXEtPmJ1ZmZlciwgbGVuKTsKKyNpZmRlZiBET19QUk9DCisJCQlzdGF0X3N3YXBfd3JpdGUgKz0gTl9QQUdFUyhsZW4pOworI2VuZGlmCisJCX0KKwkJZW5kX3JlcXVlc3QocmVxLCAxKTsKKwl9Cit9CisKKworc3RhdGljIGludCBzdHJhbV9vcGVuKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCApCit7CisJaWYgKGZpbHAgIT0gTUFHSUNfRklMRV9QKSB7CisJCXByaW50ayggS0VSTl9OT1RJQ0UgIk9ubHkga2VybmVsIGNhbiBvcGVuIFNULVJBTSBkZXZpY2VcbiIgKTsKKwkJcmV0dXJuKCAtRVBFUk0gKTsKKwl9CisJaWYgKHJlZmNudCkKKwkJcmV0dXJuKCAtRUJVU1kgKTsKKwkrK3JlZmNudDsKKwlyZXR1cm4oIDAgKTsKK30KKworc3RhdGljIGludCBzdHJhbV9yZWxlYXNlKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCApCit7CisJaWYgKGZpbHAgIT0gTUFHSUNfRklMRV9QKSB7CisJCXByaW50ayggS0VSTl9OT1RJQ0UgIk9ubHkga2VybmVsIGNhbiBjbG9zZSBTVC1SQU0gZGV2aWNlXG4iICk7CisJCXJldHVybiggLUVQRVJNICk7CisJfQorCWlmIChyZWZjbnQgPiAwKQorCQktLXJlZmNudDsKKwlyZXR1cm4oIDAgKTsKK30KKworCitzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHN0cmFtX2ZvcHMgPSB7CisJLm9wZW4gPQkJc3RyYW1fb3BlbiwKKwkucmVsZWFzZSA9CXN0cmFtX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IGdlbmRpc2sgKnN0cmFtX2Rpc2s7CitzdGF0aWMgc3RydWN0IHJlcXVlc3RfcXVldWUgKnN0cmFtX3F1ZXVlOworc3RhdGljIERFRklORV9TUElOTE9DSyhzdHJhbV9sb2NrKTsKKworaW50IF9faW5pdCBzdHJhbV9kZXZpY2VfaW5pdCh2b2lkKQoreworCWlmICghTUFDSF9JU19BVEFSSSkKKwkJLyogbm8gcG9pbnQgaW4gaW5pdGlhbGl6aW5nIHRoaXMsIEkgaG9wZSAqLworCQlyZXR1cm4gLUVOWElPOworCisJaWYgKCFtYXhfc3dhcF9zaXplKQorCQkvKiBzd2FwcGluZyBub3QgZW5hYmxlZCAqLworCQlyZXR1cm4gLUVOWElPOworCXN0cmFtX2Rpc2sgPSBhbGxvY19kaXNrKDEpOworCWlmICghc3RyYW1fZGlzaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAocmVnaXN0ZXJfYmxrZGV2KFNUUkFNX01BSk9SLCAic3RyYW0iKSkgeworCQlwdXRfZGlzayhzdHJhbV9kaXNrKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlzdHJhbV9xdWV1ZSA9IGJsa19pbml0X3F1ZXVlKGRvX3N0cmFtX3JlcXVlc3QsICZzdHJhbV9sb2NrKTsKKwlpZiAoIXN0cmFtX3F1ZXVlKSB7CisJCXVucmVnaXN0ZXJfYmxrZGV2KFNUUkFNX01BSk9SLCAic3RyYW0iKTsKKwkJcHV0X2Rpc2soc3RyYW1fZGlzayk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXN0cmFtX2Rpc2stPm1ham9yID0gU1RSQU1fTUFKT1I7CisJc3RyYW1fZGlzay0+Zmlyc3RfbWlub3IgPSBTVFJBTV9NSU5PUjsKKwlzdHJhbV9kaXNrLT5mb3BzID0gJnN0cmFtX2ZvcHM7CisJc3RyYW1fZGlzay0+cXVldWUgPSBzdHJhbV9xdWV1ZTsKKwlzcHJpbnRmKHN0cmFtX2Rpc2stPmRpc2tfbmFtZSwgInN0cmFtIik7CisJc2V0X2NhcGFjaXR5KHN0cmFtX2Rpc2ssIChzd2FwX2VuZCAtIHN3YXBfc3RhcnQpLzUxMik7CisJYWRkX2Rpc2soc3RyYW1fZGlzayk7CisJcmV0dXJuIDA7Cit9CisKKworDAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgkJCQkJCQlNaXNjIFV0aWxpdHkgRnVuY3Rpb25zCQkJCQkJCSovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogcmVzZXJ2ZSBhIHJhbmdlIG9mIHBhZ2VzICovCitzdGF0aWMgdm9pZCByZXNlcnZlX3JlZ2lvbih2b2lkICpzdGFydCwgdm9pZCAqZW5kKQoreworCXJlc2VydmVfYm9vdG1lbSAodmlydF90b19waHlzKHN0YXJ0KSwgZW5kIC0gc3RhcnQpOworfQorCisjZW5kaWYgLyogQ09ORklHX1NUUkFNX1NXQVAgKi8KKworDAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgkJCQkJCQkgIFJlZ2lvbiBNYW5hZ2VtZW50CQkJCQkJCQkqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworLyogaW5zZXJ0IGEgcmVnaW9uIGludG8gdGhlIGFsbG9jZWQgbGlzdCAoc29ydGVkKSAqLworc3RhdGljIEJMT0NLICphZGRfcmVnaW9uKCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUgKQoreworCUJMT0NLICoqcCwgKm4gPSBOVUxMOworCWludCBpOworCisJZm9yKCBpID0gMDsgaSA8IE5fU1RBVElDX0JMT0NLUzsgKytpICkgeworCQlpZiAoc3RhdGljX2Jsb2Nrc1tpXS5mbGFncyAmIEJMT0NLX0ZSRUUpIHsKKwkJCW4gPSAmc3RhdGljX2Jsb2Nrc1tpXTsKKwkJCW4tPmZsYWdzID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghbiAmJiBtZW1faW5pdF9kb25lKSB7CisJCS8qIGlmIHN0YXRpY3MgYmxvY2sgcG9vbCBleGhhdXN0ZWQgYW5kIHdlIGNhbiBjYWxsIGttYWxsb2MoKSBhbHJlYWR5CisJCSAqIChhZnRlciBtZW1faW5pdCgpKSwgdHJ5IHRoYXQgKi8KKwkJbiA9IGttYWxsb2MoIHNpemVvZihCTE9DSyksIEdGUF9LRVJORUwgKTsKKwkJaWYgKG4pCisJCQluLT5mbGFncyA9IEJMT0NLX0tNQUxMT0NFRDsKKwl9CisJaWYgKCFuKSB7CisJCXByaW50ayggS0VSTl9FUlIgIk91dCBvZiBtZW1vcnkgZm9yIFNULVJBTSBkZXNjcmlwdG9yIGJsb2Nrc1xuIiApOworCQlyZXR1cm4oIE5VTEwgKTsKKwl9CisJbi0+c3RhcnQgPSBhZGRyOworCW4tPnNpemUgID0gc2l6ZTsKKworCWZvciggcCA9ICZhbGxvY19saXN0OyAqcDsgcCA9ICYoKCpwKS0+bmV4dCkgKQorCQlpZiAoKCpwKS0+c3RhcnQgPiBhZGRyKSBicmVhazsKKwluLT5uZXh0ID0gKnA7CisJKnAgPSBuOworCisJcmV0dXJuKCBuICk7Cit9CisKKworLyogZmluZCBhIHJlZ2lvbiAoYnkgc3RhcnQgYWRkcikgaW4gdGhlIGFsbG9jZWQgbGlzdCAqLworc3RhdGljIEJMT0NLICpmaW5kX3JlZ2lvbiggdm9pZCAqYWRkciApCit7CisJQkxPQ0sgKnA7CisKKwlmb3IoIHAgPSBhbGxvY19saXN0OyBwOyBwID0gcC0+bmV4dCApIHsKKwkJaWYgKHAtPnN0YXJ0ID09IGFkZHIpCisJCQlyZXR1cm4oIHAgKTsKKwkJaWYgKHAtPnN0YXJ0ID4gYWRkcikKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4oIE5VTEwgKTsKK30KKworCisvKiByZW1vdmUgYSBibG9jayBmcm9tIHRoZSBhbGxvY2VkIGxpc3QgKi8KK3N0YXRpYyBpbnQgcmVtb3ZlX3JlZ2lvbiggQkxPQ0sgKmJsb2NrICkKK3sKKwlCTE9DSyAqKnA7CisKKwlmb3IoIHAgPSAmYWxsb2NfbGlzdDsgKnA7IHAgPSAmKCgqcCktPm5leHQpICkKKwkJaWYgKCpwID09IGJsb2NrKSBicmVhazsKKwlpZiAoISpwKQorCQlyZXR1cm4oIDAgKTsKKworCSpwID0gYmxvY2stPm5leHQ7CisJaWYgKGJsb2NrLT5mbGFncyAmIEJMT0NLX0tNQUxMT0NFRCkKKwkJa2ZyZWUoIGJsb2NrICk7CisJZWxzZQorCQlibG9jay0+ZmxhZ3MgfD0gQkxPQ0tfRlJFRTsKKwlyZXR1cm4oIDEgKTsKK30KKworCisMCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCQkJCQkJIC9wcm9jIHN0YXRpc3RpY3MgZmlsZSBzdHVmZgkJCQkJCSovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmZGVmIERPX1BST0MKKworI2RlZmluZQlQUklOVF9QUk9DKGZtdCxhcmdzLi4uKSBsZW4gKz0gc3ByaW50ZiggYnVmK2xlbiwgZm10LCAjI2FyZ3MgKQorCitpbnQgZ2V0X3N0cmFtX2xpc3QoIGNoYXIgKmJ1ZiApCit7CisJaW50IGxlbiA9IDA7CisJQkxPQ0sgKnA7CisjaWZkZWYgQ09ORklHX1NUUkFNX1NXQVAKKwlpbnQgaTsKKwl1bnNpZ25lZCBzaG9ydCAqbWFwID0gc3RyYW1fc3dhcF9pbmZvLT5zd2FwX21hcDsKKwl1bnNpZ25lZCBsb25nIG1heCA9IHN0cmFtX3N3YXBfaW5mby0+bWF4OworCXVuc2lnbmVkIGZyZWUgPSAwLCB1c2VkID0gMCwgcnN2ZCA9IDA7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TVFJBTV9TV0FQCisJaWYgKG1heF9zd2FwX3NpemUpIHsKKwkJZm9yKCBpID0gMTsgaSA8IG1heDsgKytpICkgeworCQkJaWYgKCFtYXBbaV0pCisJCQkJKytmcmVlOworCQkJZWxzZSBpZiAobWFwW2ldID09IFNXQVBfTUFQX0JBRCkKKwkJCQkrK3JzdmQ7CisJCQllbHNlCisJCQkJKyt1c2VkOworCQl9CisJCVBSSU5UX1BST0MoCisJCQkiVG90YWwgU1QtUkFNOiAgICAgICU4dSBrQlxuIgorCQkJIlRvdGFsIFNULVJBTSBzd2FwOiAlOGx1IGtCXG4iCisJCQkiRnJlZSBzd2FwOiAgICAgICAgICU4dSBrQlxuIgorCQkJIlVzZWQgc3dhcDogICAgICAgICAlOHUga0JcbiIKKwkJCSJBbGxvY2F0ZWQgc3dhcDogICAgJTh1IGtCXG4iCisJCQkiU3dhcCBSZWFkczogICAgICAgICU4dVxuIgorCQkJIlN3YXAgV3JpdGVzOiAgICAgICAlOHVcbiIKKwkJCSJTd2FwIEZvcmNlZCBSZWFkczogJTh1XG4iLAorCQkJKHN0cmFtX2VuZCAtIHN0cmFtX3N0YXJ0KSA+PiAxMCwKKwkJCShtYXgtMSkgPDwgKFBBR0VfU0hJRlQtMTApLAorCQkJZnJlZSA8PCAoUEFHRV9TSElGVC0xMCksCisJCQl1c2VkIDw8IChQQUdFX1NISUZULTEwKSwKKwkJCXJzdmQgPDwgKFBBR0VfU0hJRlQtMTApLAorCQkJc3RhdF9zd2FwX3JlYWQsCisJCQlzdGF0X3N3YXBfd3JpdGUsCisJCQlzdGF0X3N3YXBfZm9yY2UgKTsKKwl9CisJZWxzZSB7CisjZW5kaWYKKwkJUFJJTlRfUFJPQyggIlNULVJBTSBzd2FwcGluZyBkaXNhYmxlZFxuIiApOworCQlQUklOVF9QUk9DKCJUb3RhbCBTVC1SQU06ICAgICAgJTh1IGtCXG4iLAorCQkJICAgKHN0cmFtX2VuZCAtIHN0cmFtX3N0YXJ0KSA+PiAxMCk7CisjaWZkZWYgQ09ORklHX1NUUkFNX1NXQVAKKwl9CisjZW5kaWYKKworCVBSSU5UX1BST0MoICJBbGxvY2F0ZWQgcmVnaW9uczpcbiIgKTsKKwlmb3IoIHAgPSBhbGxvY19saXN0OyBwOyBwID0gcC0+bmV4dCApIHsKKwkJaWYgKGxlbiArIDUwID49IFBBR0VfU0laRSkKKwkJCWJyZWFrOworCQlQUklOVF9QUk9DKCIweCUwOGx4LTB4JTA4bHg6ICVzICgiLAorCQkJICAgdmlydF90b19waHlzKHAtPnN0YXJ0KSwKKwkJCSAgIHZpcnRfdG9fcGh5cyhwLT5zdGFydCtwLT5zaXplLTEpLAorCQkJICAgcC0+b3duZXIpOworCQlpZiAocC0+ZmxhZ3MgJiBCTE9DS19HRlApCisJCQlQUklOVF9QUk9DKCAicGFnZS1hbGxvY2VkKVxuIiApOworCQllbHNlIGlmIChwLT5mbGFncyAmIEJMT0NLX0lOU1dBUCkKKwkJCVBSSU5UX1BST0MoICJpbiBzd2FwKVxuIiApOworCQllbHNlCisJCQlQUklOVF9QUk9DKCAiPz8pXG4iICk7CisJfQorCisJcmV0dXJuKCBsZW4gKTsKK30KKworI2VuZGlmCisKKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqICBjLWluZGVudC1sZXZlbDogNAorICogIHRhYi13aWR0aDogNAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvdGltZS5jIGIvYXJjaC9tNjhrL2F0YXJpL3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGY3ZmI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2F0YXJpL3RpbWUuYwpAQCAtMCwwICsxLDM0OCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvbTY4ay9hdGFyaS90aW1lLmMKKyAqCisgKiBBdGFyaSB0aW1lIGFuZCByZWFsIHRpbWUgY2xvY2sgc3R1ZmYKKyAqCisgKiBBc3NlbWJsZWQgb2YgcGFydHMgb2YgZm9ybWVyIGF0YXJpL2NvbmZpZy5jIDk3LTEyLTE4IGJ5IFJvbWFuIEhvZGVrCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgorCisjaW5jbHVkZSA8YXNtL2F0YXJpaW50cy5oPgorCit2b2lkIF9faW5pdAorYXRhcmlfc2NoZWRfaW5pdChpcnFyZXR1cm5fdCAoKnRpbWVyX3JvdXRpbmUpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSkKK3sKKyAgICAvKiBzZXQgVGltZXIgQyBkYXRhIFJlZ2lzdGVyICovCisgICAgbWZwLnRpbV9kdF9jID0gSU5UX1RJQ0tTOworICAgIC8qIHN0YXJ0IHRpbWVyIEMsIGRpdiA9IDE6MTAwICovCisgICAgbWZwLnRpbV9jdF9jZCA9IChtZnAudGltX2N0X2NkICYgMTUpIHwgMHg2MDsKKyAgICAvKiBpbnN0YWxsIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgZm9yIE1GUCBUaW1lciBDICovCisgICAgcmVxdWVzdF9pcnEoSVJRX01GUF9USU1DLCB0aW1lcl9yb3V0aW5lLCBJUlFfVFlQRV9TTE9XLAorICAgICAgICAgICAgICAgICJ0aW1lciIsIHRpbWVyX3JvdXRpbmUpOworfQorCisvKiArK2FuZHJlYXM6IGdldHRpbWVvZmZzZXQgZml4ZWQgdG8gY2hlY2sgZm9yIHBlbmRpbmcgaW50ZXJydXB0ICovCisKKyNkZWZpbmUgVElDS19TSVpFIDEwMDAwCisKKy8qIFRoaXMgaXMgYWx3YXlzIGV4ZWN1dGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4gICovCit1bnNpZ25lZCBsb25nIGF0YXJpX2dldHRpbWVvZmZzZXQgKHZvaWQpCit7CisgIHVuc2lnbmVkIGxvbmcgdGlja3MsIG9mZnNldCA9IDA7CisKKyAgLyogcmVhZCBNRlAgdGltZXIgQyBjdXJyZW50IHZhbHVlICovCisgIHRpY2tzID0gbWZwLnRpbV9kdF9jOworICAvKiBUaGUgcHJvYmFiaWxpdHkgb2YgdW5kZXJmbG93IGlzIGxlc3MgdGhhbiAyJSAqLworICBpZiAodGlja3MgPiBJTlRfVElDS1MgLSBJTlRfVElDS1MgLyA1MCkKKyAgICAvKiBDaGVjayBmb3IgcGVuZGluZyB0aW1lciBpbnRlcnJ1cHQgKi8KKyAgICBpZiAobWZwLmludF9wbl9iICYgKDEgPDwgNSkpCisgICAgICBvZmZzZXQgPSBUSUNLX1NJWkU7CisKKyAgdGlja3MgPSBJTlRfVElDS1MgLSB0aWNrczsKKyAgdGlja3MgPSB0aWNrcyAqIDEwMDAwTCAvIElOVF9USUNLUzsKKworICByZXR1cm4gdGlja3MgKyBvZmZzZXQ7Cit9CisKKworc3RhdGljIHZvaWQgbXN0ZV9yZWFkKHN0cnVjdCBNU1RFX1JUQyAqdmFsKQoreworI2RlZmluZSBDT1BZKHYpIHZhbC0+dj0obXN0ZV9ydGMudiAmIDB4ZikKKwlkbyB7CisJCUNPUFkoc2VjX29uZXMpIDsgQ09QWShzZWNfdGVucykgOyBDT1BZKG1pbl9vbmVzKSA7CisJCUNPUFkobWluX3RlbnMpIDsgQ09QWShocl9vbmVzKSA7IENPUFkoaHJfdGVucykgOworCQlDT1BZKHdlZWtkYXkpIDsgQ09QWShkYXlfb25lcykgOyBDT1BZKGRheV90ZW5zKSA7CisJCUNPUFkobW9uX29uZXMpIDsgQ09QWShtb25fdGVucykgOyBDT1BZKHllYXJfb25lcykgOworCQlDT1BZKHllYXJfdGVucykgOworCS8qIHByZXZlbnQgZnJvbSByZWFkaW5nIHRoZSBjbG9jayB3aGlsZSBpdCBjaGFuZ2VkICovCisJfSB3aGlsZSAodmFsLT5zZWNfb25lcyAhPSAobXN0ZV9ydGMuc2VjX29uZXMgJiAweGYpKTsKKyN1bmRlZiBDT1BZCit9CisKK3N0YXRpYyB2b2lkIG1zdGVfd3JpdGUoc3RydWN0IE1TVEVfUlRDICp2YWwpCit7CisjZGVmaW5lIENPUFkodikgbXN0ZV9ydGMudj12YWwtPnYKKwlkbyB7CisJCUNPUFkoc2VjX29uZXMpIDsgQ09QWShzZWNfdGVucykgOyBDT1BZKG1pbl9vbmVzKSA7CisJCUNPUFkobWluX3RlbnMpIDsgQ09QWShocl9vbmVzKSA7IENPUFkoaHJfdGVucykgOworCQlDT1BZKHdlZWtkYXkpIDsgQ09QWShkYXlfb25lcykgOyBDT1BZKGRheV90ZW5zKSA7CisJCUNPUFkobW9uX29uZXMpIDsgQ09QWShtb25fdGVucykgOyBDT1BZKHllYXJfb25lcykgOworCQlDT1BZKHllYXJfdGVucykgOworCS8qIHByZXZlbnQgZnJvbSB3cml0aW5nIHRoZSBjbG9jayB3aGlsZSBpdCBjaGFuZ2VkICovCisJfSB3aGlsZSAodmFsLT5zZWNfb25lcyAhPSAobXN0ZV9ydGMuc2VjX29uZXMgJiAweGYpKTsKKyN1bmRlZiBDT1BZCit9CisKKyNkZWZpbmUJUlRDX1JFQUQocmVnKQkJCQlcCisgICAgKHsJdW5zaWduZWQgY2hhcglfX3ZhbDsJCQlcCisJCSh2b2lkKSBhdGFyaV93cml0ZWIocmVnLCZ0dF9ydGMucmVnc2VsKTsJXAorCQlfX3ZhbCA9IHR0X3J0Yy5kYXRhOwkJXAorCQlfX3ZhbDsJCQkJXAorCX0pCisKKyNkZWZpbmUJUlRDX1dSSVRFKHJlZyx2YWwpCQkJXAorICAgIGRvIHsJCQkJCVwKKwkJYXRhcmlfd3JpdGViKHJlZywmdHRfcnRjLnJlZ3NlbCk7CVwKKwkJdHRfcnRjLmRhdGEgPSAodmFsKTsJCVwKKwl9IHdoaWxlKDApCisKKworI2RlZmluZSBIV0NMS19QT0xMX0lOVEVSVkFMCTUKKworaW50IGF0YXJpX21zdGVfaHdjbGsoIGludCBvcCwgc3RydWN0IHJ0Y190aW1lICp0ICkKK3sKKyAgICBpbnQgaG91ciwgeWVhcjsKKyAgICBpbnQgaHIyND0wOworICAgIHN0cnVjdCBNU1RFX1JUQyB2YWw7CisKKyAgICBtc3RlX3J0Yy5tb2RlPShtc3RlX3J0Yy5tb2RlIHwgMSk7CisgICAgaHIyND1tc3RlX3J0Yy5tb25fdGVucyAmIDE7CisgICAgbXN0ZV9ydGMubW9kZT0obXN0ZV9ydGMubW9kZSAmIH4xKTsKKworICAgIGlmIChvcCkgeworICAgICAgICAvKiB3cml0ZTogcHJlcGFyZSB2YWx1ZXMgKi8KKworICAgICAgICB2YWwuc2VjX29uZXMgPSB0LT50bV9zZWMgJSAxMDsKKyAgICAgICAgdmFsLnNlY190ZW5zID0gdC0+dG1fc2VjIC8gMTA7CisgICAgICAgIHZhbC5taW5fb25lcyA9IHQtPnRtX21pbiAlIDEwOworICAgICAgICB2YWwubWluX3RlbnMgPSB0LT50bV9taW4gLyAxMDsKKyAgICAgICAgaG91ciA9IHQtPnRtX2hvdXI7CisgICAgICAgIGlmICghaHIyNCkgeworCSAgICBpZiAoaG91ciA+IDExKQorCQlob3VyICs9IDIwIC0gMTI7CisJICAgIGlmIChob3VyID09IDAgfHwgaG91ciA9PSAyMCkKKwkJaG91ciArPSAxMjsKKyAgICAgICAgfQorICAgICAgICB2YWwuaHJfb25lcyA9IGhvdXIgJSAxMDsKKyAgICAgICAgdmFsLmhyX3RlbnMgPSBob3VyIC8gMTA7CisgICAgICAgIHZhbC5kYXlfb25lcyA9IHQtPnRtX21kYXkgJSAxMDsKKyAgICAgICAgdmFsLmRheV90ZW5zID0gdC0+dG1fbWRheSAvIDEwOworICAgICAgICB2YWwubW9uX29uZXMgPSAodC0+dG1fbW9uKzEpICUgMTA7CisgICAgICAgIHZhbC5tb25fdGVucyA9ICh0LT50bV9tb24rMSkgLyAxMDsKKyAgICAgICAgeWVhciA9IHQtPnRtX3llYXIgLSA4MDsKKyAgICAgICAgdmFsLnllYXJfb25lcyA9IHllYXIgJSAxMDsKKyAgICAgICAgdmFsLnllYXJfdGVucyA9IHllYXIgLyAxMDsKKyAgICAgICAgdmFsLndlZWtkYXkgPSB0LT50bV93ZGF5OworICAgICAgICBtc3RlX3dyaXRlKCZ2YWwpOworICAgICAgICBtc3RlX3J0Yy5tb2RlPShtc3RlX3J0Yy5tb2RlIHwgMSk7CisgICAgICAgIHZhbC55ZWFyX29uZXMgPSAoeWVhciAlIDQpOwkvKiBsZWFwIHllYXIgcmVnaXN0ZXIgKi8KKyAgICAgICAgbXN0ZV9ydGMubW9kZT0obXN0ZV9ydGMubW9kZSAmIH4xKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG1zdGVfcmVhZCgmdmFsKTsKKyAgICAgICAgdC0+dG1fc2VjID0gdmFsLnNlY19vbmVzICsgdmFsLnNlY190ZW5zICogMTA7CisgICAgICAgIHQtPnRtX21pbiA9IHZhbC5taW5fb25lcyArIHZhbC5taW5fdGVucyAqIDEwOworICAgICAgICBob3VyID0gdmFsLmhyX29uZXMgKyB2YWwuaHJfdGVucyAqIDEwOworCWlmICghaHIyNCkgeworCSAgICBpZiAoaG91ciA9PSAxMiB8fCBob3VyID09IDEyICsgMjApCisJCWhvdXIgLT0gMTI7CisJICAgIGlmIChob3VyID49IDIwKQorICAgICAgICAgICAgICAgIGhvdXIgKz0gMTIgLSAyMDsKKyAgICAgICAgfQorCXQtPnRtX2hvdXIgPSBob3VyOworCXQtPnRtX21kYXkgPSB2YWwuZGF5X29uZXMgKyB2YWwuZGF5X3RlbnMgKiAxMDsKKyAgICAgICAgdC0+dG1fbW9uICA9IHZhbC5tb25fb25lcyArIHZhbC5tb25fdGVucyAqIDEwIC0gMTsKKyAgICAgICAgdC0+dG1feWVhciA9IHZhbC55ZWFyX29uZXMgKyB2YWwueWVhcl90ZW5zICogMTAgKyA4MDsKKyAgICAgICAgdC0+dG1fd2RheSA9IHZhbC53ZWVrZGF5OworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworaW50IGF0YXJpX3R0X2h3Y2xrKCBpbnQgb3AsIHN0cnVjdCBydGNfdGltZSAqdCApCit7CisgICAgaW50IHNlYz0wLCBtaW49MCwgaG91cj0wLCBkYXk9MCwgbW9uPTAsIHllYXI9MCwgd2RheT0wOworICAgIHVuc2lnbmVkIGxvbmcJZmxhZ3M7CisgICAgdW5zaWduZWQgY2hhcgljdHJsOworICAgIGludCBwbSA9IDA7CisKKyAgICBjdHJsID0gUlRDX1JFQUQoUlRDX0NPTlRST0wpOyAvKiBjb250cm9sIHJlZ2lzdGVycyBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbmRlcGVuZGVudCBmcm9tIHRoZSBVSVAgKi8KKworICAgIGlmIChvcCkgeworICAgICAgICAvKiB3cml0ZTogcHJlcGFyZSB2YWx1ZXMgKi8KKworICAgICAgICBzZWMgID0gdC0+dG1fc2VjOworICAgICAgICBtaW4gID0gdC0+dG1fbWluOworICAgICAgICBob3VyID0gdC0+dG1faG91cjsKKyAgICAgICAgZGF5ICA9IHQtPnRtX21kYXk7CisgICAgICAgIG1vbiAgPSB0LT50bV9tb24gKyAxOworICAgICAgICB5ZWFyID0gdC0+dG1feWVhciAtIGF0YXJpX3J0Y195ZWFyX29mZnNldDsKKyAgICAgICAgd2RheSA9IHQtPnRtX3dkYXkgKyAodC0+dG1fd2RheSA+PSAwKTsKKworICAgICAgICBpZiAoIShjdHJsICYgUlRDXzI0SCkpIHsKKwkgICAgaWYgKGhvdXIgPiAxMSkgeworCQlwbSA9IDB4ODA7CisJCWlmIChob3VyICE9IDEyKQorCQkgICAgaG91ciAtPSAxMjsKKwkgICAgfQorCSAgICBlbHNlIGlmIChob3VyID09IDApCisJCWhvdXIgPSAxMjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKGN0cmwgJiBSVENfRE1fQklOQVJZKSkgeworICAgICAgICAgICAgQklOX1RPX0JDRChzZWMpOworICAgICAgICAgICAgQklOX1RPX0JDRChtaW4pOworICAgICAgICAgICAgQklOX1RPX0JDRChob3VyKTsKKyAgICAgICAgICAgIEJJTl9UT19CQ0QoZGF5KTsKKyAgICAgICAgICAgIEJJTl9UT19CQ0QobW9uKTsKKyAgICAgICAgICAgIEJJTl9UT19CQ0QoeWVhcik7CisgICAgICAgICAgICBpZiAod2RheSA+PSAwKSBCSU5fVE9fQkNEKHdkYXkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyogUmVhZGluZy93cml0aW5nIHRoZSBjbG9jayByZWdpc3RlcnMgaXMgYSBiaXQgY3JpdGljYWwgZHVlIHRvCisgICAgICogdGhlIHJlZ3VsYXIgdXBkYXRlIGN5Y2xlIG9mIHRoZSBSVEMuIFdoaWxlIGFuIHVwZGF0ZSBpcyBpbgorICAgICAqIHByb2dyZXNzLCByZWdpc3RlcnMgMC4uOSBzaG91bGRuJ3QgYmUgdG91Y2hlZC4KKyAgICAgKiBUaGUgcHJvYmxlbSBpcyBzb2x2ZWQgbGlrZSB0aGF0OiBJZiBhbiB1cGRhdGUgaXMgY3VycmVudGx5IGluCisgICAgICogcHJvZ3Jlc3MgKHRoZSBVSVAgYml0IGlzIHNldCksIHRoZSBwcm9jZXNzIHNsZWVwcyBmb3IgYSB3aGlsZQorICAgICAqICg1MG1zKS4gVGhpcyByZWFsbHkgc2hvdWxkIGJlIGVub3VnaCwgc2luY2UgdGhlIHVwZGF0ZSBjeWNsZQorICAgICAqIG5vcm1hbGx5IG5lZWRzIDIgbXMuCisgICAgICogSWYgdGhlIFVJUCBiaXQgcmVhZHMgYXMgMCwgd2UgaGF2ZSBhdCBsZWFzdCAyNDQgdXNlY3MgdW50aWwgdGhlCisgICAgICogdXBkYXRlIHN0YXJ0cy4gVGhpcyBzaG91bGQgYmUgZW5vdWdoLi4uIEJ1dCB0byBiZSBzdXJlLAorICAgICAqIGFkZGl0aW9uYWxseSB0aGUgUlRDX1NFVCBiaXQgaXMgc2V0IHRvIHByZXZlbnQgYW4gdXBkYXRlIGN5Y2xlLgorICAgICAqLworCisgICAgd2hpbGUoIFJUQ19SRUFEKFJUQ19GUkVRX1NFTEVDVCkgJiBSVENfVUlQICkgeworICAgICAgICBjdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKyAgICAgICAgc2NoZWR1bGVfdGltZW91dChIV0NMS19QT0xMX0lOVEVSVkFMKTsKKyAgICB9CisKKyAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisgICAgUlRDX1dSSVRFKCBSVENfQ09OVFJPTCwgY3RybCB8IFJUQ19TRVQgKTsKKyAgICBpZiAoIW9wKSB7CisgICAgICAgIHNlYyAgPSBSVENfUkVBRCggUlRDX1NFQ09ORFMgKTsKKyAgICAgICAgbWluICA9IFJUQ19SRUFEKCBSVENfTUlOVVRFUyApOworICAgICAgICBob3VyID0gUlRDX1JFQUQoIFJUQ19IT1VSUyApOworICAgICAgICBkYXkgID0gUlRDX1JFQUQoIFJUQ19EQVlfT0ZfTU9OVEggKTsKKyAgICAgICAgbW9uICA9IFJUQ19SRUFEKCBSVENfTU9OVEggKTsKKyAgICAgICAgeWVhciA9IFJUQ19SRUFEKCBSVENfWUVBUiApOworICAgICAgICB3ZGF5ID0gUlRDX1JFQUQoIFJUQ19EQVlfT0ZfV0VFSyApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUlRDX1dSSVRFKCBSVENfU0VDT05EUywgc2VjICk7CisgICAgICAgIFJUQ19XUklURSggUlRDX01JTlVURVMsIG1pbiApOworICAgICAgICBSVENfV1JJVEUoIFJUQ19IT1VSUywgaG91ciArIHBtKTsKKyAgICAgICAgUlRDX1dSSVRFKCBSVENfREFZX09GX01PTlRILCBkYXkgKTsKKyAgICAgICAgUlRDX1dSSVRFKCBSVENfTU9OVEgsIG1vbiApOworICAgICAgICBSVENfV1JJVEUoIFJUQ19ZRUFSLCB5ZWFyICk7CisgICAgICAgIGlmICh3ZGF5ID49IDApIFJUQ19XUklURSggUlRDX0RBWV9PRl9XRUVLLCB3ZGF5ICk7CisgICAgfQorICAgIFJUQ19XUklURSggUlRDX0NPTlRST0wsIGN0cmwgJiB+UlRDX1NFVCApOworICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworICAgIGlmICghb3ApIHsKKyAgICAgICAgLyogcmVhZDogYWRqdXN0IHZhbHVlcyAqLworCisgICAgICAgIGlmIChob3VyICYgMHg4MCkgeworCSAgICBob3VyICY9IH4weDgwOworCSAgICBwbSA9IDE7CisJfQorCisJaWYgKCEoY3RybCAmIFJUQ19ETV9CSU5BUlkpKSB7CisgICAgICAgICAgICBCQ0RfVE9fQklOKHNlYyk7CisgICAgICAgICAgICBCQ0RfVE9fQklOKG1pbik7CisgICAgICAgICAgICBCQ0RfVE9fQklOKGhvdXIpOworICAgICAgICAgICAgQkNEX1RPX0JJTihkYXkpOworICAgICAgICAgICAgQkNEX1RPX0JJTihtb24pOworICAgICAgICAgICAgQkNEX1RPX0JJTih5ZWFyKTsKKyAgICAgICAgICAgIEJDRF9UT19CSU4od2RheSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShjdHJsICYgUlRDXzI0SCkpIHsKKwkgICAgaWYgKCFwbSAmJiBob3VyID09IDEyKQorCQlob3VyID0gMDsKKwkgICAgZWxzZSBpZiAocG0gJiYgaG91ciAhPSAxMikKKwkJaG91ciArPSAxMjsKKyAgICAgICAgfQorCisgICAgICAgIHQtPnRtX3NlYyAgPSBzZWM7CisgICAgICAgIHQtPnRtX21pbiAgPSBtaW47CisgICAgICAgIHQtPnRtX2hvdXIgPSBob3VyOworICAgICAgICB0LT50bV9tZGF5ID0gZGF5OworICAgICAgICB0LT50bV9tb24gID0gbW9uIC0gMTsKKyAgICAgICAgdC0+dG1feWVhciA9IHllYXIgKyBhdGFyaV9ydGNfeWVhcl9vZmZzZXQ7CisgICAgICAgIHQtPnRtX3dkYXkgPSB3ZGF5IC0gMTsKKyAgICB9CisKKyAgICByZXR1cm4oIDAgKTsKK30KKworCitpbnQgYXRhcmlfbXN0ZV9zZXRfY2xvY2tfbW1zcyAodW5zaWduZWQgbG9uZyBub3d0aW1lKQoreworICAgIHNob3J0IHJlYWxfc2Vjb25kcyA9IG5vd3RpbWUgJSA2MCwgcmVhbF9taW51dGVzID0gKG5vd3RpbWUgLyA2MCkgJSA2MDsKKyAgICBzdHJ1Y3QgTVNURV9SVEMgdmFsOworICAgIHVuc2lnbmVkIGNoYXIgcnRjX21pbnV0ZXM7CisKKyAgICBtc3RlX3JlYWQoJnZhbCk7CisgICAgcnRjX21pbnV0ZXM9IHZhbC5taW5fb25lcyArIHZhbC5taW5fdGVucyAqIDEwOworICAgIGlmICgocnRjX21pbnV0ZXMgPCByZWFsX21pbnV0ZXMKKyAgICAgICAgID8gcmVhbF9taW51dGVzIC0gcnRjX21pbnV0ZXMKKyAgICAgICAgIDogcnRjX21pbnV0ZXMgLSByZWFsX21pbnV0ZXMpIDwgMzApCisgICAgeworICAgICAgICB2YWwuc2VjX29uZXMgPSByZWFsX3NlY29uZHMgJSAxMDsKKyAgICAgICAgdmFsLnNlY190ZW5zID0gcmVhbF9zZWNvbmRzIC8gMTA7CisgICAgICAgIHZhbC5taW5fb25lcyA9IHJlYWxfbWludXRlcyAlIDEwOworICAgICAgICB2YWwubWluX3RlbnMgPSByZWFsX21pbnV0ZXMgLyAxMDsKKyAgICAgICAgbXN0ZV93cml0ZSgmdmFsKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBhdGFyaV90dF9zZXRfY2xvY2tfbW1zcyAodW5zaWduZWQgbG9uZyBub3d0aW1lKQoreworICAgIGludCByZXR2YWwgPSAwOworICAgIHNob3J0IHJlYWxfc2Vjb25kcyA9IG5vd3RpbWUgJSA2MCwgcmVhbF9taW51dGVzID0gKG5vd3RpbWUgLyA2MCkgJSA2MDsKKyAgICB1bnNpZ25lZCBjaGFyIHNhdmVfY29udHJvbCwgc2F2ZV9mcmVxX3NlbGVjdCwgcnRjX21pbnV0ZXM7CisKKyAgICBzYXZlX2NvbnRyb2wgPSBSVENfUkVBRCAoUlRDX0NPTlRST0wpOyAvKiB0ZWxsIHRoZSBjbG9jayBpdCdzIGJlaW5nIHNldCAqLworICAgIFJUQ19XUklURSAoUlRDX0NPTlRST0wsIHNhdmVfY29udHJvbCB8IFJUQ19TRVQpOworCisgICAgc2F2ZV9mcmVxX3NlbGVjdCA9IFJUQ19SRUFEIChSVENfRlJFUV9TRUxFQ1QpOyAvKiBzdG9wIGFuZCByZXNldCBwcmVzY2FsZXIgKi8KKyAgICBSVENfV1JJVEUgKFJUQ19GUkVRX1NFTEVDVCwgc2F2ZV9mcmVxX3NlbGVjdCB8IFJUQ19ESVZfUkVTRVQyKTsKKworICAgIHJ0Y19taW51dGVzID0gUlRDX1JFQUQgKFJUQ19NSU5VVEVTKTsKKyAgICBpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSkKKyAgICAgICAgQkNEX1RPX0JJTiAocnRjX21pbnV0ZXMpOworCisgICAgLyogU2luY2Ugd2UncmUgb25seSBhZGp1c3RpbmcgbWludXRlcyBhbmQgc2Vjb25kcywgZG9uJ3QgaW50ZXJmZXJlCisgICAgICAgd2l0aCBob3VyIG92ZXJmbG93LiAgVGhpcyBhdm9pZHMgbWVzc2luZyB3aXRoIHVua25vd24gdGltZSB6b25lcworICAgICAgIGJ1dCByZXF1aXJlcyB5b3VyIFJUQyBub3QgdG8gYmUgb2ZmIGJ5IG1vcmUgdGhhbiAzMCBtaW51dGVzLiAgKi8KKyAgICBpZiAoKHJ0Y19taW51dGVzIDwgcmVhbF9taW51dGVzCisgICAgICAgICA/IHJlYWxfbWludXRlcyAtIHJ0Y19taW51dGVzCisgICAgICAgICA6IHJ0Y19taW51dGVzIC0gcmVhbF9taW51dGVzKSA8IDMwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIShzYXZlX2NvbnRyb2wgJiBSVENfRE1fQklOQVJZKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEJJTl9UT19CQ0QgKHJlYWxfc2Vjb25kcyk7CisgICAgICAgICAgICAgICAgICAgIEJJTl9UT19CQ0QgKHJlYWxfbWludXRlcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgUlRDX1dSSVRFIChSVENfU0VDT05EUywgcmVhbF9zZWNvbmRzKTsKKyAgICAgICAgICAgIFJUQ19XUklURSAoUlRDX01JTlVURVMsIHJlYWxfbWludXRlcyk7CisgICAgICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHZhbCA9IC0xOworCisgICAgUlRDX1dSSVRFIChSVENfRlJFUV9TRUxFQ1QsIHNhdmVfZnJlcV9zZWxlY3QpOworICAgIFJUQ19XUklURSAoUlRDX0NPTlRST0wsIHNhdmVfY29udHJvbCk7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqICBjLWluZGVudC1sZXZlbDogNAorICogIHRhYi13aWR0aDogOAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYnZtZTYwMDAvTWFrZWZpbGUgYi9hcmNoL202OGsvYnZtZTYwMDAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM0OGU2YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9idm1lNjAwMC9NYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIExpbnV4IGFyY2gvbTY4ay9idm1lNjAwMCBzb3VyY2UgZGlyZWN0b3J5CisjCisKK29iai15CQk6PSBjb25maWcubyBidm1laW50cy5vIHJ0Yy5vCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYnZtZTYwMDAvYnZtZWludHMuYyBiL2FyY2gvbTY4ay9idm1lNjAwMC9idm1laW50cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5OGE4ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvYnZtZTYwMDAvYnZtZWludHMuYwpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIGFyY2gvbTY4ay9idm1lNjAwMC9idm1laW50cy5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3IFJpY2hhcmQgSGlyc3QgW3JpY2hhcmRAc2xlZXBpZS5kZW1vbi5jby51a10KKyAqCisgKiBiYXNlZCBvbiBhbWlpbnRzLmMgLS0gQW1pZ2EgTGludXggaW50ZXJydXB0IGhhbmRsaW5nIGNvZGUKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBSRUFETUUubGVnYWwgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBidm1lNjAwMF9kZWZoYW5kIChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCk7CisKKy8qCisgKiBUaGlzIHNob3VsZCBpZGVhbGx5IGJlIDQgZWxlbWVudHMgb25seSwgZm9yIHNwZWVkLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgeworCWlycXJldHVybl90CSgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJdm9pZAkJKmRldl9pZDsKKwljb25zdCBjaGFyCSpkZXZuYW1lOworCXVuc2lnbmVkCWNvdW50OworfSBpcnFfdGFiWzI1Nl07CisKKy8qCisgKiB2b2lkIGJ2bWU2MDAwX2luaXRfSVJRICh2b2lkKQorICoKKyAqIFBhcmFtZXRlcnM6CU5vbmUKKyAqCisgKiBSZXR1cm5zOglOb3RoaW5nCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGtlcm5lbCBzdGFydHVwIHRvIGluaXRpYWxpemUKKyAqIHRoZSBidm1lNjAwMCBJUlEgaGFuZGxpbmcgcm91dGluZXMuCisgKi8KKwordm9pZCBidm1lNjAwMF9pbml0X0lSUSAodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlpcnFfdGFiW2ldLmhhbmRsZXIgPSBidm1lNjAwMF9kZWZoYW5kOworCQlpcnFfdGFiW2ldLmZsYWdzID0gSVJRX0ZMR19TVEQ7CisJCWlycV90YWJbaV0uZGV2X2lkID0gTlVMTDsKKwkJaXJxX3RhYltpXS5kZXZuYW1lID0gTlVMTDsKKwkJaXJxX3RhYltpXS5jb3VudCA9IDA7CisJfQorfQorCitpbnQgYnZtZTYwMDBfcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGlycSwKKwkJaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKQoreworCWlmIChpcnEgPiAyNTUpIHsKKwkJcHJpbnRrKCIlczogSW5jb3JyZWN0IElSUSAlZCBmcm9tICVzXG4iLCBfX0ZVTkNUSU9OX18sIGlycSwgZGV2bmFtZSk7CisJCXJldHVybiAtRU5YSU87CisJfQorI2lmIDAKKwkvKiBOb3RoaW5nIHNwZWNpYWwgYWJvdXQgYXV0by12ZWN0b3JlZCBkZXZpY2VzIGZvciB0aGUgQlZNRTYwMDAsCisJICogYnV0IHRyZWF0IGl0IHNwZWNpYWxseSB0byBhdm9pZCBjaGFuZ2VzIGVsc2V3aGVyZS4KKwkgKi8KKworCWlmIChpcnEgPj0gVkVDX0lOVDEgJiYgaXJxIDw9IFZFQ19JTlQ3KQorCQlyZXR1cm4gY3B1X3JlcXVlc3RfaXJxKGlycSAtIFZFQ19TUFVSLCBoYW5kbGVyLCBmbGFncywKKwkJCQkJCWRldm5hbWUsIGRldl9pZCk7CisjZW5kaWYKKwlpZiAoIShpcnFfdGFiW2lycV0uZmxhZ3MgJiBJUlFfRkxHX1NURCkpIHsKKwkJaWYgKGlycV90YWJbaXJxXS5mbGFncyAmIElSUV9GTEdfTE9DSykgeworCQkJcHJpbnRrKCIlczogSVJRICVkIGZyb20gJXMgaXMgbm90IHJlcGxhY2VhYmxlXG4iLAorCQkJICAgICAgIF9fRlVOQ1RJT05fXywgaXJxLCBpcnFfdGFiW2lycV0uZGV2bmFtZSk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCWlmIChmbGFncyAmIElSUV9GTEdfUkVQTEFDRSkgeworCQkJcHJpbnRrKCIlczogJXMgY2FuJ3QgcmVwbGFjZSBJUlEgJWQgZnJvbSAlc1xuIiwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGRldm5hbWUsIGlycSwgaXJxX3RhYltpcnFdLmRldm5hbWUpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0KKwlpcnFfdGFiW2lycV0uaGFuZGxlciA9IGhhbmRsZXI7CisJaXJxX3RhYltpcnFdLmZsYWdzICAgPSBmbGFnczsKKwlpcnFfdGFiW2lycV0uZGV2X2lkICA9IGRldl9pZDsKKwlpcnFfdGFiW2lycV0uZGV2bmFtZSA9IGRldm5hbWU7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYnZtZTYwMDBfZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCWlmIChpcnEgPiAyNTUpIHsKKwkJcHJpbnRrKCIlczogSW5jb3JyZWN0IElSUSAlZFxuIiwgX19GVU5DVElPTl9fLCBpcnEpOworCQlyZXR1cm47CisJfQorI2lmIDAKKwlpZiAoaXJxID49IFZFQ19JTlQxICYmIGlycSA8PSBWRUNfSU5UNykgeworCQljcHVfZnJlZV9pcnEoaXJxIC0gVkVDX1NQVVIsIGRldl9pZCk7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKwlpZiAoaXJxX3RhYltpcnFdLmRldl9pZCAhPSBkZXZfaWQpCisJCXByaW50aygiJXM6IFJlbW92aW5nIHByb2JhYmx5IHdyb25nIElSUSAlZCBmcm9tICVzXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBpcnEsIGlycV90YWJbaXJxXS5kZXZuYW1lKTsKKworCWlycV90YWJbaXJxXS5oYW5kbGVyID0gYnZtZTYwMDBfZGVmaGFuZDsKKwlpcnFfdGFiW2lycV0uZmxhZ3MgICA9IElSUV9GTEdfU1REOworCWlycV90YWJbaXJxXS5kZXZfaWQgID0gTlVMTDsKKwlpcnFfdGFiW2lycV0uZGV2bmFtZSA9IE5VTEw7Cit9CisKK2lycXJldHVybl90IGJ2bWU2MDAwX3Byb2Nlc3NfaW50ICh1bnNpZ25lZCBsb25nIHZlYywgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCWlmICh2ZWMgPiAyNTUpIHsKKwkJcHJpbnRrICgiYnZtZTYwMDBfcHJvY2Vzc19pbnQ6IElsbGVnYWwgdmVjdG9yICVsZCIsIHZlYyk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9IGVsc2UgeworCQlpcnFfdGFiW3ZlY10uY291bnQrKzsKKwkJaXJxX3RhYlt2ZWNdLmhhbmRsZXIodmVjLCBpcnFfdGFiW3ZlY10uZGV2X2lkLCBmcCk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9Cit9CisKK2ludCBzaG93X2J2bWU2MDAwX2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCWlmIChpcnFfdGFiW2ldLmNvdW50KQorCQkJc2VxX3ByaW50ZihwLCAiVmVjIDB4JTAyeDogJThkICAlc1xuIiwKKwkJCSAgICBpLCBpcnFfdGFiW2ldLmNvdW50LAorCQkJICAgIGlycV90YWJbaV0uZGV2bmFtZSA/IGlycV90YWJbaV0uZGV2bmFtZSA6ICJmcmVlIik7CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBidm1lNjAwMF9kZWZoYW5kIChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwlwcmludGsgKCJVbmtub3duIGludGVycnVwdCAweCUwMnhcbiIsIGlycSk7CisJcmV0dXJuIElSUV9OT05FOworfQorCit2b2lkIGJ2bWU2MDAwX2VuYWJsZV9pcnEgKHVuc2lnbmVkIGludCBpcnEpCit7Cit9CisKKwordm9pZCBidm1lNjAwMF9kaXNhYmxlX2lycSAodW5zaWduZWQgaW50IGlycSkKK3sKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2J2bWU2MDAwL2NvbmZpZy5jIGIvYXJjaC9tNjhrL2J2bWU2MDAwL2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZmM4NGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvYnZtZTYwMDAvY29uZmlnLmMKQEAgLTAsMCArMSwzODAgQEAKKy8qCisgKiAgYXJjaC9tNjhrL2J2bWU2MDAwL2NvbmZpZy5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NyBSaWNoYXJkIEhpcnN0IFtyaWNoYXJkQHNsZWVwaWUuZGVtb24uY28udWtdCisgKgorICogQmFzZWQgb246CisgKgorICogIGxpbnV4L2FtaWdhL2NvbmZpZy5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5MyBIYW1pc2ggTWFjZG9uYWxkCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgUkVBRE1FLmxlZ2FsIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgorI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL3J0Yy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL2J2bWU2MDAwaHcuaD4KKworZXh0ZXJuIGlycXJldHVybl90IGJ2bWU2MDAwX3Byb2Nlc3NfaW50IChpbnQgbGV2ZWwsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIGJ2bWU2MDAwX2luaXRfSVJRICh2b2lkKTsKK2V4dGVybiB2b2lkIGJ2bWU2MDAwX2ZyZWVfaXJxICh1bnNpZ25lZCBpbnQsIHZvaWQgKik7CitleHRlcm4gaW50ICBzaG93X2J2bWU2MDAwX2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICosIHZvaWQgKik7CitleHRlcm4gdm9pZCBidm1lNjAwMF9lbmFibGVfaXJxICh1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgYnZtZTYwMDBfZGlzYWJsZV9pcnEgKHVuc2lnbmVkIGludCk7CitzdGF0aWMgdm9pZCBidm1lNjAwMF9nZXRfbW9kZWwoY2hhciAqbW9kZWwpOworc3RhdGljIGludCAgYnZtZTYwMDBfZ2V0X2hhcmR3YXJlX2xpc3QoY2hhciAqYnVmZmVyKTsKK2V4dGVybiBpbnQgIGJ2bWU2MDAwX3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsIGlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpOworZXh0ZXJuIHZvaWQgYnZtZTYwMDBfc2NoZWRfaW5pdChpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBidm1lNjAwMF9nZXR0aW1lb2Zmc2V0ICh2b2lkKTsKK2V4dGVybiBpbnQgYnZtZTYwMDBfaHdjbGsgKGludCwgc3RydWN0IHJ0Y190aW1lICopOworZXh0ZXJuIGludCBidm1lNjAwMF9zZXRfY2xvY2tfbW1zcyAodW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBidm1lNjAwMF9yZXNldCAodm9pZCk7CitleHRlcm4gdm9pZCBidm1lNjAwMF93YWl0YnV0KHZvaWQpOwordm9pZCBidm1lNjAwMF9zZXRfdmVjdG9ycyAodm9pZCk7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGJjZDJiaW4gKHVuc2lnbmVkIGNoYXIgYik7CitzdGF0aWMgdW5zaWduZWQgY2hhciBiaW4yYmNkICh1bnNpZ25lZCBjaGFyIGIpOworCisvKiBTYXZlIHRpY2sgaGFuZGxlciByb3V0aW5lIHBvaW50ZXIsIHdpbGwgcG9pbnQgdG8gZG9fdGltZXIoKSBpbgorICoga2VybmVsL3NjaGVkLmMsIGNhbGxlZCB2aWEgYnZtZTYwMDBfcHJvY2Vzc19pbnQoKSAqLworCitzdGF0aWMgaXJxcmV0dXJuX3QgKCp0aWNrX2hhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKworCitpbnQgYnZtZTYwMDBfcGFyc2VfYm9vdGluZm8oY29uc3Qgc3RydWN0IGJpX3JlY29yZCAqYmkpCit7CisJaWYgKGJpLT50YWcgPT0gQklfVk1FX1RZUEUpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3ZvaWQgYnZtZTYwMDBfcmVzZXQodm9pZCkKK3sKKwl2b2xhdGlsZSBQaXRSZWdzUHRyIHBpdCA9IChQaXRSZWdzUHRyKUJWTUVfUElUX0JBU0U7CisKKwlwcmludGsgKCJcclxuXG5DYWxsZWQgYnZtZTYwMDBfcmVzZXRcclxuIgorCQkJIlxyXHJcclxyXHJcclxyXHJcclxyXHJcclxyXHJcclxyXHJcciIpOworCS8qIFRoZSBzdHJpbmcgb2YgcmV0dXJucyBpcyB0byBkZWxheSB0aGUgcmVzZXQgdW50aWwgdGhlIHdob2xlCisJICogbWVzc2FnZSBpcyBvdXRwdXQuICovCisJLyogRW5hYmxlIHRoZSB3YXRjaGRvZywgdmlhIFBJVCBwb3J0IEMgYml0IDQgKi8KKworCXBpdC0+cGNkZHIJfD0gMHgxMDsJLyogV0RPRyBlbmFibGUgKi8KKworCXdoaWxlKDEpCisJCTsKK30KKworc3RhdGljIHZvaWQgYnZtZTYwMDBfZ2V0X21vZGVsKGNoYXIgKm1vZGVsKQoreworICAgIHNwcmludGYobW9kZWwsICJCVk1FJWQwMDAiLCBtNjhrX2NwdXR5cGUgPT0gQ1BVXzY4MDYwID8gNiA6IDQpOworfQorCisKKy8qIE5vIGhhcmR3YXJlIG9wdGlvbnMgb24gQlZNRTYwMDA/ICovCisKK3N0YXRpYyBpbnQgYnZtZTYwMDBfZ2V0X2hhcmR3YXJlX2xpc3QoY2hhciAqYnVmZmVyKQoreworICAgICpidWZmZXIgPSAnXDAnOworICAgIHJldHVybiAwOworfQorCisKK3ZvaWQgX19pbml0IGNvbmZpZ19idm1lNjAwMCh2b2lkKQoreworICAgIHZvbGF0aWxlIFBpdFJlZ3NQdHIgcGl0ID0gKFBpdFJlZ3NQdHIpQlZNRV9QSVRfQkFTRTsKKworICAgIC8qIEJvYXJkIHR5cGUgaXMgb25seSBzZXQgYnkgbmV3ZXIgdmVyc2lvbnMgb2Ygdm1lbGlsby90ZnRwbGlsbyAqLworICAgIGlmICghdm1lX2JyZHR5cGUpIHsKKwlpZiAobTY4a19jcHV0eXBlID09IENQVV82ODA2MCkKKwkgICAgdm1lX2JyZHR5cGUgPSBWTUVfVFlQRV9CVk1FNjAwMDsKKwllbHNlCisJICAgIHZtZV9icmR0eXBlID0gVk1FX1RZUEVfQlZNRTQwMDA7CisgICAgfQorI2lmIDAKKyAgICAvKiBDYWxsIGJ2bWU2MDAwX3NldF92ZWN0b3JzKCkgc28gQUJPUlQgd2lsbCB3b3JrLCBhbG9uZyB3aXRoIEJWTUJ1ZworICAgICAqIGRlYnVnZ2VyLiAgTm90ZSB0cmFwX2luaXQoKSB3aWxsIHNwbGF0IHRoZSBhYm9ydCB2ZWN0b3IsIGJ1dAorICAgICAqIGJ2bWU2MDAwX2luaXRfSVJRKCkgd2lsbCBwdXQgaXQgYmFjayBhZ2Fpbi4gIEhvcGVmdWxseS4gKi8KKworICAgIGJ2bWU2MDAwX3NldF92ZWN0b3JzKCk7CisjZW5kaWYKKworICAgIG1hY2hfbWF4X2RtYV9hZGRyZXNzID0gMHhmZmZmZmZmZjsKKyAgICBtYWNoX3NjaGVkX2luaXQgICAgICA9IGJ2bWU2MDAwX3NjaGVkX2luaXQ7CisgICAgbWFjaF9pbml0X0lSUSAgICAgICAgPSBidm1lNjAwMF9pbml0X0lSUTsKKyAgICBtYWNoX2dldHRpbWVvZmZzZXQgICA9IGJ2bWU2MDAwX2dldHRpbWVvZmZzZXQ7CisgICAgbWFjaF9od2NsayAgICAgICAgICAgPSBidm1lNjAwMF9od2NsazsKKyAgICBtYWNoX3NldF9jbG9ja19tbXNzCSA9IGJ2bWU2MDAwX3NldF9jbG9ja19tbXNzOworICAgIG1hY2hfcmVzZXQJCSA9IGJ2bWU2MDAwX3Jlc2V0OworICAgIG1hY2hfZnJlZV9pcnEJID0gYnZtZTYwMDBfZnJlZV9pcnE7CisgICAgbWFjaF9wcm9jZXNzX2ludAkgPSBidm1lNjAwMF9wcm9jZXNzX2ludDsKKyAgICBtYWNoX2dldF9pcnFfbGlzdAkgPSBzaG93X2J2bWU2MDAwX2ludGVycnVwdHM7CisgICAgbWFjaF9yZXF1ZXN0X2lycQkgPSBidm1lNjAwMF9yZXF1ZXN0X2lycTsKKyAgICBlbmFibGVfaXJxCQkgPSBidm1lNjAwMF9lbmFibGVfaXJxOworICAgIGRpc2FibGVfaXJxICAgICAgICAgID0gYnZtZTYwMDBfZGlzYWJsZV9pcnE7CisgICAgbWFjaF9nZXRfbW9kZWwgICAgICAgPSBidm1lNjAwMF9nZXRfbW9kZWw7CisgICAgbWFjaF9nZXRfaGFyZHdhcmVfbGlzdCA9IGJ2bWU2MDAwX2dldF9oYXJkd2FyZV9saXN0OworCisgICAgcHJpbnRrICgiQm9hcmQgaXMgJXNjb25maWd1cmVkIGFzIGEgU3lzdGVtIENvbnRyb2xsZXJcbiIsCisJCSpjb25maWdfcmVnX3B0ciAmIEJWTUVfQ09ORklHX1NXMSA/ICIiIDogIm5vdCAiKTsKKworICAgIC8qIE5vdyBkbyB0aGUgUElUIGNvbmZpZ3VyYXRpb24gKi8KKworICAgIHBpdC0+cGdjcgk9IDB4MDA7CS8qIFVuaWRpcmVjdGlvbmFsIDggYml0LCBubyBoYW5kc2hha2UgZm9yIG5vdyAqLworICAgIHBpdC0+cHNycgk9IDB4MTg7CS8qIFBJQUNLIGFuZCBQSVJRIGZ1Y250aW9ucyBlbmFibGVkICovCisgICAgcGl0LT5wYWNyCT0gMHgwMDsJLyogU3ViIE1vZGUgMDAsIEgyIGkvcCwgbm8gRE1BICovCisgICAgcGl0LT5wYWRyCT0gMHgwMDsJLyogSnVzdCB0byBiZSB0aWR5ISAqLworICAgIHBpdC0+cGFkZHIJPSAweDAwOwkvKiBBbGwgaW5wdXRzIGZvciBub3cgKHNhZmVzdCkgKi8KKyAgICBwaXQtPnBiY3IJPSAweDgwOwkvKiBTdWIgTW9kZSAxeCwgSDQgaS9wLCBubyBETUEgKi8KKyAgICBwaXQtPnBiZHIJPSAweGJjIHwgKCpjb25maWdfcmVnX3B0ciAmIEJWTUVfQ09ORklHX1NXMSA/IDAgOiAweDQwKTsKKwkJCS8qIFBSSSwgU1lTQ09OPywgTGV2ZWwzLCBTQ0MgY2xrcyBmcm9tIHh0YWwgKi8KKyAgICBwaXQtPnBiZGRyCT0gMHhmMzsJLyogTW9zdGx5IG91dHB1dHMgKi8KKyAgICBwaXQtPnBjZHIJPSAweDAxOwkvKiBQQSB0cmFuc2NlaXZlciBkaXNhYmxlZCAqLworICAgIHBpdC0+cGNkZHIJPSAweDAzOwkvKiBXRE9HIGRpc2FibGUgKi8KKworICAgIC8qIERpc2FibGUgc25vb3BpbmcgZm9yIEV0aGVybmV0IGFuZCBWTUUgYWNjZXNzZXMgKi8KKworICAgIGJ2bWVfYWNyX2FkZHJjdGwgPSAwOworfQorCisKK2lycXJldHVybl90IGJ2bWU2MDAwX2Fib3J0X2ludCAoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgKm5ldyA9ICh1bnNpZ25lZCBsb25nICopdmVjdG9yczsKKyAgICAgICAgdW5zaWduZWQgbG9uZyAqb2xkID0gKHVuc2lnbmVkIGxvbmcgKikweGY4MDAwMDAwOworCisgICAgICAgIC8qIFdhaXQgZm9yIGJ1dHRvbiByZWxlYXNlICovCisgICAgICAgIHdoaWxlICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilCVk1FX0xPQ0FMX0lSUV9TVEFUICYgQlZNRV9BQk9SVF9TVEFUVVMpCisgICAgICAgICAgICAgICAgOworCisgICAgICAgICoobmV3KzQpID0gKihvbGQrNCk7ICAgICAgICAgICAgLyogSWxsZWdhbCBpbnN0cnVjdGlvbiAqLworICAgICAgICAqKG5ldys5KSA9ICoob2xkKzkpOyAgICAgICAgICAgIC8qIFRyYWNlICovCisgICAgICAgICoobmV3KzQ3KSA9ICoob2xkKzQ3KTsgICAgICAgICAgLyogVHJhcCAjMTUgKi8KKyAgICAgICAgKihuZXcrMHgxZikgPSAqKG9sZCsweDFmKTsgICAgICAvKiBBQk9SVCBzd2l0Y2ggKi8KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKworc3RhdGljIGlycXJldHVybl90IGJ2bWU2MDAwX3RpbWVyX2ludCAoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisgICAgdm9sYXRpbGUgUnRjUHRyX3QgcnRjID0gKFJ0Y1B0cl90KUJWTUVfUlRDX0JBU0U7CisgICAgdW5zaWduZWQgY2hhciBtc3IgPSBydGMtPm1zciAmIDB4YzA7CisKKyAgICBydGMtPm1zciA9IG1zciB8IDB4MjA7CQkvKiBBY2sgdGhlIGludGVycnVwdCAqLworCisgICAgcmV0dXJuIHRpY2tfaGFuZGxlcihpcnEsIGRldl9pZCwgZnApOworfQorCisvKgorICogU2V0IHVwIHRoZSBSVEMgdGltZXIgMSB0byBtb2RlIDIsIHNvIFQxIG91dHB1dCB0b2dnbGVzIGV2ZXJ5IDVtcworICogKDQwMDAwIHggMTI1bnMpLiAgSXQgd2lsbCBpbnRlcnJ1cHQgZXZlcnkgMTBtcywgd2hlbiBUMSBnb2VzIGxvdy4KKyAqIFNvLCB3aGVuIHJlYWRpbmcgdGhlIGVsYXBzZWQgdGltZSwgeW91IHNob3VsZCByZWFkIHRpbWVyMSwKKyAqIHN1YnRyYWN0IGl0IGZyb20gMzk5OTksIGFuZCB0aGVuIGFkZCA0MDAwMCBpZiBUMSBpcyBoaWdoLgorICogVGhhdCBnaXZlcyB5b3UgdGhlIG51bWJlciBvZiAxMjVucyB0aWNrcyBpbiB0byB0aGUgMTBtcyBwZXJpb2QsCisgKiBzbyBkaXZpZGUgYnkgOCB0byBnZXQgdGhlIG1pY3Jvc2Vjb25kIHJlc3VsdC4KKyAqLworCit2b2lkIGJ2bWU2MDAwX3NjaGVkX2luaXQgKGlycXJldHVybl90ICgqdGltZXJfcm91dGluZSkoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopKQoreworICAgIHZvbGF0aWxlIFJ0Y1B0cl90IHJ0YyA9IChSdGNQdHJfdClCVk1FX1JUQ19CQVNFOworICAgIHVuc2lnbmVkIGNoYXIgbXNyID0gcnRjLT5tc3IgJiAweGMwOworCisgICAgcnRjLT5tc3IgPSAwOwkvKiBFbnN1cmUgdGltZXIgcmVnaXN0ZXJzIGFjY2Vzc2libGUgKi8KKworICAgIHRpY2tfaGFuZGxlciA9IHRpbWVyX3JvdXRpbmU7CisgICAgaWYgKHJlcXVlc3RfaXJxKEJWTUVfSVJRX1JUQywgYnZtZTYwMDBfdGltZXJfaW50LCAwLAorCQkJCSJ0aW1lciIsIGJ2bWU2MDAwX3RpbWVyX2ludCkpCisJcGFuaWMgKCJDb3VsZG4ndCByZWdpc3RlciB0aW1lciBpbnQiKTsKKworICAgIHJ0Yy0+dDFjcl9vbXIgPSAweDA0OwkvKiBNb2RlIDIsIGV4dCBjbGsgKi8KKyAgICBydGMtPnQxbXNiID0gMzk5OTkgPj4gODsKKyAgICBydGMtPnQxbHNiID0gMzk5OTkgJiAweGZmOworICAgIHJ0Yy0+aXJyX2ljcjEgJj0gMHhlZjsJLyogUm91dGUgdGltZXIgMSB0byBJTlRSIHBpbiAqLworICAgIHJ0Yy0+bXNyID0gMHg0MDsJCS8qIEFjY2VzcyBpbnQuY250cmwsIGV0YyAqLworICAgIHJ0Yy0+cGZyX2ljcjAgPSAweDgwOwkvKiBKdXN0IHRpbWVyIDEgaW50cyBlbmFibGVkICovCisgICAgcnRjLT5pcnJfaWNyMSA9IDA7CisgICAgcnRjLT50MWNyX29tciA9IDB4MGE7CS8qIElOVFIrVDEgYWN0aXZlIGxvLCBwdXNoLXB1bGwgKi8KKyAgICBydGMtPnQwY3JfcnRtciAmPSAweGRmOwkvKiBTdG9wIHRpbWVycyBpbiBzdGFuZGJ5ICovCisgICAgcnRjLT5tc3IgPSAwOwkJLyogQWNjZXNzIHRpbWVyIDEgY29udHJvbCAqLworICAgIHJ0Yy0+dDFjcl9vbXIgPSAweDA1OwkvKiBNb2RlIDIsIGV4dCBjbGssIEdPICovCisKKyAgICBydGMtPm1zciA9IG1zcjsKKworICAgIGlmIChyZXF1ZXN0X2lycShCVk1FX0lSUV9BQk9SVCwgYnZtZTYwMDBfYWJvcnRfaW50LCAwLAorCQkJCSJhYm9ydCIsIGJ2bWU2MDAwX2Fib3J0X2ludCkpCisJcGFuaWMgKCJDb3VsZG4ndCByZWdpc3RlciBhYm9ydCBpbnQiKTsKK30KKworCisvKiBUaGlzIGlzIGFsd2F5cyBleGVjdXRlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuICAqLworCisvKgorICogTk9URTogIERvbid0IGFjY2VwdCBhbnkgcmVhZGluZ3Mgd2l0aGluIDV1cyBvZiByb2xsb3ZlciwgYXMKKyAqIHRoZSBUMUlOVCBiaXQgbWF5IGJlIGEgbGl0dGxlIHNsb3cgZ2V0dGluZyBzZXQuICBUaGVyZSBpcyBhbHNvCisgKiBhIGZhdWx0IGluIHRoZSBjaGlwLCBtZWFuaW5nIHRoYXQgcmVhZHMgbWF5IHByb2R1Y2UgaW52YWxpZAorICogcmVzdWx0cy4uLgorICovCisKK3Vuc2lnbmVkIGxvbmcgYnZtZTYwMDBfZ2V0dGltZW9mZnNldCAodm9pZCkKK3sKKyAgICB2b2xhdGlsZSBSdGNQdHJfdCBydGMgPSAoUnRjUHRyX3QpQlZNRV9SVENfQkFTRTsKKyAgICB2b2xhdGlsZSBQaXRSZWdzUHRyIHBpdCA9IChQaXRSZWdzUHRyKUJWTUVfUElUX0JBU0U7CisgICAgdW5zaWduZWQgY2hhciBtc3IgPSBydGMtPm1zciAmIDB4YzA7CisgICAgdW5zaWduZWQgY2hhciB0MWludCwgdDFvcDsKKyAgICB1bnNpZ25lZCBsb25nIHYgPSA4MDAwMDAsIG92OworCisgICAgcnRjLT5tc3IgPSAwOwkvKiBFbnN1cmUgdGltZXIgcmVnaXN0ZXJzIGFjY2Vzc2libGUgKi8KKworICAgIGRvIHsKKwlvdiA9IHY7CisJdDFpbnQgPSBydGMtPm1zciAmIDB4MjA7CisJdDFvcCAgPSBwaXQtPnBjZHIgJiAweDA0OworCXJ0Yy0+dDFjcl9vbXIgfD0gMHg0MDsJCS8qIExhdGNoIHRpbWVyMSAqLworCXYgPSBydGMtPnQxbXNiIDw8IDg7CQkvKiBSZWFkIHRpbWVyMSAqLworCXYgfD0gcnRjLT50MWxzYjsJCS8qIFJlYWQgdGltZXIxICovCisgICAgfSB3aGlsZSAodDFpbnQgIT0gKHJ0Yy0+bXNyICYgMHgyMCkgfHwKKwkJdDFvcCAhPSAocGl0LT5wY2RyICYgMHgwNCkgfHwKKwkJCWFicyhvdi12KSA+IDgwIHx8CisJCQkJdiA+IDM5OTYwKTsKKworICAgIHYgPSAzOTk5OSAtIHY7CisgICAgaWYgKCF0MW9wKQkJCQkvKiBJZiBpbiBzZWNvbmQgaGFsZiBjeWNsZS4uICovCisJdiArPSA0MDAwMDsKKyAgICB2IC89IDg7CQkJCS8qIENvbnZlcnQgdGlja3MgdG8gbWljcm9zZWNvbmRzICovCisgICAgaWYgKHQxaW50KQorCXYgKz0gMTAwMDA7CQkJLyogSW50IHBlbmRpbmcsICsgMTBtcyAqLworICAgIHJ0Yy0+bXNyID0gbXNyOworCisgICAgcmV0dXJuIHY7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGJjZDJiaW4gKHVuc2lnbmVkIGNoYXIgYikKK3sKKwlyZXR1cm4gKChiPj40KSoxMCArIChiJjE1KSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGJpbjJiY2QgKHVuc2lnbmVkIGNoYXIgYikKK3sKKwlyZXR1cm4gKCgoYi8xMCkqMTYpICsgKGIlMTApKTsKK30KKworCisvKgorICogTG9va3MgbGlrZSBvcCBpcyBub24temVybyBmb3Igc2V0dGluZyB0aGUgY2xvY2ssIGFuZCB6ZXJvIGZvcgorICogcmVhZGluZyB0aGUgY2xvY2suCisgKgorICogIHN0cnVjdCBod2Nsa190aW1lIHsKKyAqICAgICAgICAgdW5zaWduZWQgICAgICAgIHNlYzsgICAgICAgMC4uNTkKKyAqICAgICAgICAgdW5zaWduZWQgICAgICAgIG1pbjsgICAgICAgMC4uNTkKKyAqICAgICAgICAgdW5zaWduZWQgICAgICAgIGhvdXI7ICAgICAgMC4uMjMKKyAqICAgICAgICAgdW5zaWduZWQgICAgICAgIGRheTsgICAgICAgMS4uMzEKKyAqICAgICAgICAgdW5zaWduZWQgICAgICAgIG1vbjsgICAgICAgMC4uMTEKKyAqICAgICAgICAgdW5zaWduZWQgICAgICAgIHllYXI7ICAgICAgMDAuLi4KKyAqICAgICAgICAgaW50ICAgICAgICAgICAgIHdkYXk7ICAgICAgMC4uNiwgMCBpcyBTdW5kYXksIC0xIG1lYW5zIHVua25vd24vZG9uJ3Qgc2V0CisgKiB9OworICovCisKK2ludCBidm1lNjAwMF9od2NsayhpbnQgb3AsIHN0cnVjdCBydGNfdGltZSAqdCkKK3sKKwl2b2xhdGlsZSBSdGNQdHJfdCBydGMgPSAoUnRjUHRyX3QpQlZNRV9SVENfQkFTRTsKKwl1bnNpZ25lZCBjaGFyIG1zciA9IHJ0Yy0+bXNyICYgMHhjMDsKKworCXJ0Yy0+bXNyID0gMHg0MDsJLyogRW5zdXJlIGNsb2NrIGFuZCByZWFsLXRpbWUtbW9kZS1yZWdpc3RlcgorCQkJCSAqIGFyZSBhY2Nlc3NpYmxlICovCisJaWYgKG9wKQorCXsJLyogV3JpdGUuLi4uICovCisJCXJ0Yy0+dDBjcl9ydG1yID0gdC0+dG1feWVhciU0OworCQlydGMtPmJjZF90ZW5tcyA9IDA7CisJCXJ0Yy0+YmNkX3NlYyA9IGJpbjJiY2QodC0+dG1fc2VjKTsKKwkJcnRjLT5iY2RfbWluID0gYmluMmJjZCh0LT50bV9taW4pOworCQlydGMtPmJjZF9ociAgPSBiaW4yYmNkKHQtPnRtX2hvdXIpOworCQlydGMtPmJjZF9kb20gPSBiaW4yYmNkKHQtPnRtX21kYXkpOworCQlydGMtPmJjZF9tdGggPSBiaW4yYmNkKHQtPnRtX21vbiArIDEpOworCQlydGMtPmJjZF95ZWFyID0gYmluMmJjZCh0LT50bV95ZWFyJTEwMCk7CisJCWlmICh0LT50bV93ZGF5ID49IDApCisJCQlydGMtPmJjZF9kb3cgPSBiaW4yYmNkKHQtPnRtX3dkYXkrMSk7CisJCXJ0Yy0+dDBjcl9ydG1yID0gdC0+dG1feWVhciU0IHwgMHgwODsKKwl9CisJZWxzZQorCXsJLyogUmVhZC4uLi4gICovCisJCWRvIHsKKwkJCXQtPnRtX3NlYyAgPSBiY2QyYmluKHJ0Yy0+YmNkX3NlYyk7CisJCQl0LT50bV9taW4gID0gYmNkMmJpbihydGMtPmJjZF9taW4pOworCQkJdC0+dG1faG91ciA9IGJjZDJiaW4ocnRjLT5iY2RfaHIpOworCQkJdC0+dG1fbWRheSA9IGJjZDJiaW4ocnRjLT5iY2RfZG9tKTsKKwkJCXQtPnRtX21vbiAgPSBiY2QyYmluKHJ0Yy0+YmNkX210aCktMTsKKwkJCXQtPnRtX3llYXIgPSBiY2QyYmluKHJ0Yy0+YmNkX3llYXIpOworCQkJaWYgKHQtPnRtX3llYXIgPCA3MCkKKwkJCQl0LT50bV95ZWFyICs9IDEwMDsKKwkJCXQtPnRtX3dkYXkgPSBiY2QyYmluKHJ0Yy0+YmNkX2RvdyktMTsKKwkJfSB3aGlsZSAodC0+dG1fc2VjICE9IGJjZDJiaW4ocnRjLT5iY2Rfc2VjKSk7CisJfQorCisJcnRjLT5tc3IgPSBtc3I7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCB0aGUgbWludXRlcyBhbmQgc2Vjb25kcyBmcm9tIHNlY29uZHMgdmFsdWUgJ25vd3RpbWUnLiAgRmFpbCBpZgorICogY2xvY2sgaXMgb3V0IGJ5ID4gMzAgbWludXRlcy4gIExvZ2ljIGxpZnRlZCBmcm9tIGF0YXJpIGNvZGUuCisgKiBBbGdvcml0aG0gaXMgdG8gd2FpdCBmb3IgdGhlIDEwbXMgcmVnaXN0ZXIgdG8gY2hhbmdlLCBhbmQgdGhlbiB0bworICogd2FpdCBhIHNob3J0IHdoaWxlLCBhbmQgdGhlbiBzZXQgaXQuCisgKi8KKworaW50IGJ2bWU2MDAwX3NldF9jbG9ja19tbXNzICh1bnNpZ25lZCBsb25nIG5vd3RpbWUpCit7CisJaW50IHJldHZhbCA9IDA7CisJc2hvcnQgcmVhbF9zZWNvbmRzID0gbm93dGltZSAlIDYwLCByZWFsX21pbnV0ZXMgPSAobm93dGltZSAvIDYwKSAlIDYwOworCXVuc2lnbmVkIGNoYXIgcnRjX21pbnV0ZXMsIHJ0Y190ZW5tczsKKwl2b2xhdGlsZSBSdGNQdHJfdCBydGMgPSAoUnRjUHRyX3QpQlZNRV9SVENfQkFTRTsKKwl1bnNpZ25lZCBjaGFyIG1zciA9IHJ0Yy0+bXNyICYgMHhjMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZvbGF0aWxlIGludCBpOworCisJcnRjLT5tc3IgPSAwOwkJLyogRW5zdXJlIGNsb2NrIGFjY2Vzc2libGUgKi8KKwlydGNfbWludXRlcyA9IGJjZDJiaW4gKHJ0Yy0+YmNkX21pbik7CisKKwlpZiAoKHJ0Y19taW51dGVzIDwgcmVhbF9taW51dGVzCisJCT8gcmVhbF9taW51dGVzIC0gcnRjX21pbnV0ZXMKKwkJCTogcnRjX21pbnV0ZXMgLSByZWFsX21pbnV0ZXMpIDwgMzApCisJeworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCXJ0Y190ZW5tcyA9IHJ0Yy0+YmNkX3Rlbm1zOworCQl3aGlsZSAocnRjX3Rlbm1zID09IHJ0Yy0+YmNkX3Rlbm1zKQorCQkJOworCQlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKQorCQkJOworCQlydGMtPmJjZF9taW4gPSBiaW4yYmNkKHJlYWxfbWludXRlcyk7CisJCXJ0Yy0+YmNkX3NlYyA9IGJpbjJiY2QocmVhbF9zZWNvbmRzKTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KKwllbHNlCisJCXJldHZhbCA9IC0xOworCisJcnRjLT5tc3IgPSBtc3I7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCmRpZmYgLS1naXQgYS9hcmNoL202OGsvYnZtZTYwMDAvcnRjLmMgYi9hcmNoL202OGsvYnZtZTYwMDAvcnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZiMmE0MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9idm1lNjAwMC9ydGMuYwpAQCAtMCwwICsxLDE4MiBAQAorLyoKKyAqCVJlYWwgVGltZSBDbG9jayBpbnRlcmZhY2UgZm9yIExpbnV4IG9uIHRoZSBCVk1FNjAwMAorICoKKyAqIEJhc2VkIG9uIHRoZSBQQyBkcml2ZXIgYnkgUGF1bCBHb3J0bWFrZXIuCisgKi8KKworI2RlZmluZSBSVENfVkVSU0lPTgkJIjEuMDAiCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9mY250bC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4JLyogRm9yIHN0cnVjdCBydGNfdGltZSBhbmQgaW9jdGxzLCBldGMgKi8KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGFzbS9idm1lNjAwMGh3Lmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKworLyoKKyAqCVdlIHNwb25nZSBhIG1pbm9yIG9mZiBvZiB0aGUgbWlzYyBtYWpvci4gTm8gbmVlZCBzbHVycGluZworICoJdXAgYW5vdGhlciB2YWx1YWJsZSBtYWpvciBkZXYgbnVtYmVyIGZvciB0aGlzLiBJZiB5b3UgYWRkCisgKglhbiBpb2N0bCwgbWFrZSBzdXJlIHlvdSBkb24ndCBjb25mbGljdCB3aXRoIFNQQVJDJ3MgUlRDCisgKglpb2N0bHMuCisgKi8KKworI2RlZmluZSBCQ0QyQklOKHZhbCkgKCgodmFsKSYxNSkgKyAoKHZhbCk+PjQpKjEwKQorI2RlZmluZSBCSU4yQkNEKHZhbCkgKCgoKHZhbCkvMTApPDw0KSArICh2YWwpJTEwKQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBkYXlzX2luX21vW10gPQorezAsIDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzF9OworCitzdGF0aWMgY2hhciBydGNfc3RhdHVzOworCitzdGF0aWMgaW50IHJ0Y19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJICAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl2b2xhdGlsZSBSdGNQdHJfdCBydGMgPSAoUnRjUHRyX3QpQlZNRV9SVENfQkFTRTsKKwl1bnNpZ25lZCBjaGFyIG1zcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBydGNfdGltZSB3dGltZTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSVENfUkRfVElNRToJLyogUmVhZCB0aGUgdGltZS9kYXRlIGZyb20gUlRDCSovCisJeworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCS8qIEVuc3VyZSBjbG9jayBhbmQgcmVhbC10aW1lLW1vZGUtcmVnaXN0ZXIgYXJlIGFjY2Vzc2libGUgKi8KKwkJbXNyID0gcnRjLT5tc3IgJiAweGMwOworCQlydGMtPm1zciA9IDB4NDA7CisJCW1lbXNldCgmd3RpbWUsIDAsIHNpemVvZihzdHJ1Y3QgcnRjX3RpbWUpKTsKKwkJZG8geworCQkJd3RpbWUudG1fc2VjID0gIEJDRDJCSU4ocnRjLT5iY2Rfc2VjKTsKKwkJCXd0aW1lLnRtX21pbiA9ICBCQ0QyQklOKHJ0Yy0+YmNkX21pbik7CisJCQl3dGltZS50bV9ob3VyID0gQkNEMkJJTihydGMtPmJjZF9ocik7CisJCQl3dGltZS50bV9tZGF5ID0gIEJDRDJCSU4ocnRjLT5iY2RfZG9tKTsKKwkJCXd0aW1lLnRtX21vbiA9ICBCQ0QyQklOKHJ0Yy0+YmNkX210aCktMTsKKwkJCXd0aW1lLnRtX3llYXIgPSBCQ0QyQklOKHJ0Yy0+YmNkX3llYXIpOworCQkJaWYgKHd0aW1lLnRtX3llYXIgPCA3MCkKKwkJCQl3dGltZS50bV95ZWFyICs9IDEwMDsKKwkJCXd0aW1lLnRtX3dkYXkgPSBCQ0QyQklOKHJ0Yy0+YmNkX2RvdyktMTsKKwkJfSB3aGlsZSAod3RpbWUudG1fc2VjICE9IEJDRDJCSU4ocnRjLT5iY2Rfc2VjKSk7CisJCXJ0Yy0+bXNyID0gbXNyOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXJldHVybiBjb3B5X3RvX3VzZXIoKHZvaWQgKilhcmcsICZ3dGltZSwgc2l6ZW9mIHd0aW1lKSA/CisJCQkJCQkJCS1FRkFVTFQgOiAwOworCX0KKwljYXNlIFJUQ19TRVRfVElNRToJLyogU2V0IHRoZSBSVEMgKi8KKwl7CisJCXN0cnVjdCBydGNfdGltZSBydGNfdG07CisJCXVuc2lnbmVkIGNoYXIgbW9uLCBkYXksIGhycywgbWluLCBzZWMsIGxlYXBfeXI7CisJCXVuc2lnbmVkIGludCB5cnM7CisKKwkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJcmV0dXJuIC1FQUNDRVM7CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZydGNfdG0sIChzdHJ1Y3QgcnRjX3RpbWUqKWFyZywKKwkJCQkgICBzaXplb2Yoc3RydWN0IHJ0Y190aW1lKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQl5cnMgPSBydGNfdG0udG1feWVhcjsKKwkJaWYgKHlycyA8IDE5MDApCisJCQl5cnMgKz0gMTkwMDsKKwkJbW9uID0gcnRjX3RtLnRtX21vbiArIDE7ICAgLyogdG1fbW9uIHN0YXJ0cyBhdCB6ZXJvICovCisJCWRheSA9IHJ0Y190bS50bV9tZGF5OworCQlocnMgPSBydGNfdG0udG1faG91cjsKKwkJbWluID0gcnRjX3RtLnRtX21pbjsKKwkJc2VjID0gcnRjX3RtLnRtX3NlYzsKKworCQlsZWFwX3lyID0gKCghKHlycyAlIDQpICYmICh5cnMgJSAxMDApKSB8fCAhKHlycyAlIDQwMCkpOworCisJCWlmICgobW9uID4gMTIpIHx8IChtb24gPCAxKSB8fCAoZGF5ID09IDApKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGRheSA+IChkYXlzX2luX21vW21vbl0gKyAoKG1vbiA9PSAyKSAmJiBsZWFwX3lyKSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoKGhycyA+PSAyNCkgfHwgKG1pbiA+PSA2MCkgfHwgKHNlYyA+PSA2MCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoeXJzID49IDIwNzApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCS8qIEVuc3VyZSBjbG9jayBhbmQgcmVhbC10aW1lLW1vZGUtcmVnaXN0ZXIgYXJlIGFjY2Vzc2libGUgKi8KKwkJbXNyID0gcnRjLT5tc3IgJiAweGMwOworCQlydGMtPm1zciA9IDB4NDA7CisKKwkJcnRjLT50MGNyX3J0bXIgPSB5cnMlNDsKKwkJcnRjLT5iY2RfdGVubXMgPSAwOworCQlydGMtPmJjZF9zZWMgICA9IEJJTjJCQ0Qoc2VjKTsKKwkJcnRjLT5iY2RfbWluICAgPSBCSU4yQkNEKG1pbik7CisJCXJ0Yy0+YmNkX2hyICAgID0gQklOMkJDRChocnMpOworCQlydGMtPmJjZF9kb20gICA9IEJJTjJCQ0QoZGF5KTsKKwkJcnRjLT5iY2RfbXRoICAgPSBCSU4yQkNEKG1vbik7CisJCXJ0Yy0+YmNkX3llYXIgID0gQklOMkJDRCh5cnMlMTAwKTsKKwkJaWYgKHJ0Y190bS50bV93ZGF5ID49IDApCisJCQlydGMtPmJjZF9kb3cgPSBCSU4yQkNEKHJ0Y190bS50bV93ZGF5KzEpOworCQlydGMtPnQwY3JfcnRtciA9IHlycyU0IHwgMHgwODsKKworCQlydGMtPm1zciA9IG1zcjsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCisvKgorICoJV2UgZW5mb3JjZSBvbmx5IG9uZSB1c2VyIGF0IGEgdGltZSBoZXJlIHdpdGggdGhlIG9wZW4vY2xvc2UuCisgKglBbHNvIGNsZWFyIHRoZSBwcmV2aW91cyBpbnRlcnJ1cHQgZGF0YSBvbiBhbiBvcGVuLCBhbmQgY2xlYW4KKyAqCXVwIHRoaW5ncyBvbiBhIGNsb3NlLgorICovCisKK3N0YXRpYyBpbnQgcnRjX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYocnRjX3N0YXR1cykKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJ0Y19zdGF0dXMgPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0Y19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWxvY2tfa2VybmVsKCk7CisJcnRjX3N0YXR1cyA9IDA7CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiAwOworfQorCisvKgorICoJVGhlIHZhcmlvdXMgZmlsZSBvcGVyYXRpb25zIHdlIHN1cHBvcnQuCisgKi8KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcnRjX2ZvcHMgPSB7CisJLmlvY3RsID0JcnRjX2lvY3RsLAorCS5vcGVuID0JCXJ0Y19vcGVuLAorCS5yZWxlYXNlID0JcnRjX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgcnRjX2RldiA9IHsKKwkubWlub3IgPQlSVENfTUlOT1IsCisJLm5hbWUgPQkJInJ0YyIsCisJLmZvcHMgPQkJJnJ0Y19mb3BzCit9OworCitpbnQgX19pbml0IHJ0Y19EUDg1NzBBX2luaXQodm9pZCkKK3sKKwlpZiAoIU1BQ0hfSVNfQlZNRTYwMDApCisJCXJldHVybiAtRU5PREVWOworCisJcHJpbnRrKEtFUk5fSU5GTyAiRFA4NTcwQSBSZWFsIFRpbWUgQ2xvY2sgRHJpdmVyIHYlc1xuIiwgUlRDX1ZFUlNJT04pOworCXJldHVybiBtaXNjX3JlZ2lzdGVyKCZydGNfZGV2KTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnIGIvYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYjIzMzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWcKQEAgLTAsMCArMSw5NjggQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMC1tNjhrCisjIFN1biBEZWMgMjYgMTE6MjI6NTQgMjAwNAorIworQ09ORklHX002OEs9eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWFtaWdhIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FVRElUPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX01PRFBBUk09eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKKworIworIyBQbGF0Zm9ybSBkZXBlbmRlbnQgc2V0dXAKKyMKKyMgQ09ORklHX1NVTjMgaXMgbm90IHNldAorQ09ORklHX0FNSUdBPXkKKyMgQ09ORklHX0FUQVJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUE9MTE8gaXMgbm90IHNldAorIyBDT05GSUdfVk1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTjNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1E0MCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHR5cGUKKyMKK0NPTkZJR19NNjgwMjA9eQorQ09ORklHX002ODAzMD15CitDT05GSUdfTTY4MDQwPXkKK0NPTkZJR19NNjgwNjA9eQorQ09ORklHX01NVV9NT1RPUk9MQT15CitDT05GSUdfTTY4S0ZQVV9FTVU9eQorQ09ORklHX002OEtGUFVfRU1VX0VYVFJBUFJFQz15CisjIENPTkZJR19NNjhLRlBVX0VNVV9PTkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEVkFOQ0VEIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX0FPVVQ9bQorQ09ORklHX0JJTkZNVF9NSVNDPW0KK0NPTkZJR19aT1JSTz15CitDT05GSUdfQU1JR0FfUENNQ0lBPXkKKyMgQ09ORklHX0hFQVJUQkVBVCBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19IQVJEV0FSRT15CitDT05GSUdfSVNBPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorQ09ORklHX1pPUlJPX05BTUVTPXkKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19QQVJQT1JUPW0KKyMgQ09ORklHX1BBUlBPUlRfUEMgaXMgbm90IHNldAorQ09ORklHX1BBUlBPUlRfQU1JR0E9bQorQ09ORklHX1BBUlBPUlRfTUZDMz1tCisjIENPTkZJR19QQVJQT1JUX09USEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJQT1JUXzEyODQ9eQorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBkZXZpY2VzCisjCitDT05GSUdfQU1JR0FfRkxPUFBZPXkKK0NPTkZJR19BTUlHQV9aMlJBTT15CisjIENPTkZJR19CTEtfREVWX1hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUklERSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorQ09ORklHX0JMS19ERVZfTkJEPW0KK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NEUk9NX1BLVENEVkQ9bQorQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CisjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKK0NPTkZJR19JREU9eQorQ09ORklHX0JMS19ERVZfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz15CisjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ0Q9eQorQ09ORklHX0JMS19ERVZfSURFVEFQRT1tCitDT05GSUdfQkxLX0RFVl9JREVGTE9QUFk9bQorIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCitDT05GSUdfSURFX0dFTkVSSUM9eQorIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9HQVlMRT15CitDT05GSUdfQkxLX0RFVl9JREVET1VCTEVSPXkKK0NPTkZJR19CTEtfREVWX0JVRERIQT15CisjIENPTkZJR19JREVfQ0hJUFNFVFMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAorIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPW0KK0NPTkZJR19DSFJfREVWX09TU1Q9bQorQ09ORklHX0JMS19ERVZfU1I9eQorQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKK0NPTkZJR19DSFJfREVWX1NHPW0KKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorCisjCisjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NDU0lfNzAwMEZBU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUhBMTUyWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FIQTE1NDIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RUQzMyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQV9QSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dFTkVSSUNfTkNSNTM4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dFTkVSSUNfTkNSNTM4MF9NTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUFBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU1NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkNSNTNDNDA2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BBUzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUFNJMjQwSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ19GQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M0MTYgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9UMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfVTE0XzM0RiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19BMzAwMF9TQ1NJPXkKK0NPTkZJR19BMjA5MV9TQ1NJPXkKK0NPTkZJR19HVlAxMV9TQ1NJPXkKK0NPTkZJR19DWUJFUlNUT1JNX1NDU0k9eQorQ09ORklHX0NZQkVSU1RPUk1JSV9TQ1NJPXkKK0NPTkZJR19CTFoyMDYwX1NDU0k9eQorQ09ORklHX0JMWjEyMzBfU0NTST15CitDT05GSUdfRkFTVExBTkVfU0NTST15CitDT05GSUdfT0tUQUdPTl9TQ1NJPXkKKworIworIyBPbGQgQ0QtUk9NIGRyaXZlcnMgKG5vdCBTQ1NJLCBub3QgSURFKQorIworIyBDT05GSUdfQ0RfTk9fSURFU0NTSSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD1tCitDT05GSUdfTURfTElORUFSPW0KK0NPTkZJR19NRF9SQUlEMD1tCitDT05GSUdfTURfUkFJRDE9bQorIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENT1tCitDT05GSUdfTURfUkFJRDY9bQorQ09ORklHX01EX01VTFRJUEFUSD1tCisjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfRE09bQorQ09ORklHX0RNX0NSWVBUPW0KK0NPTkZJR19ETV9TTkFQU0hPVD1tCitDT05GSUdfRE1fTUlSUk9SPW0KK0NPTkZJR19ETV9aRVJPPW0KKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIE5ldHdvcmtpbmcgc3VwcG9ydAorIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRMSU5LX0RFVj15CitDT05GSUdfVU5JWD15CitDT05GSUdfTkVUX0tFWT15CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0lQSVA9bQorQ09ORklHX05FVF9JUEdSRT1tCisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1RVTk5FTD1tCitDT05GSUdfSVBfVENQRElBRz1tCitDT05GSUdfSVBfVENQRElBR19JUFY2PXkKKworIworIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorQ09ORklHX0lQVjY9bQorQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSU5FVDZfQUg9bQorQ09ORklHX0lORVQ2X0VTUD1tCitDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lQVjZfVFVOTkVMPW0KK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQorIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQorIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfRlRQPW0KK0NPTkZJR19JUF9ORl9JUkM9bQorQ09ORklHX0lQX05GX1RGVFA9bQorQ09ORklHX0lQX05GX0FNQU5EQT1tCitDT05GSUdfSVBfTkZfUVVFVUU9bQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX0lQX05GX01BVENIX1RPUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9FQ049bQorQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQorQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX01BVENIX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9TVEFURT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQorQ09ORklHX0lQX05GX01BVENIX1JFQUxNPW0KKyMgQ09ORklHX0lQX05GX01BVENIX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTk1BUks9bQorQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTkFUPW0KK0NPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCitDT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUM9bQorQ09ORklHX0lQX05GX05BVF9JUkM9bQorQ09ORklHX0lQX05GX05BVF9GVFA9bQorQ09ORklHX0lQX05GX05BVF9URlRQPW0KK0NPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQorQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQorQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ09OTk1BUks9bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUkFXPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTk9UUkFDSz1tCitDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9BUlBGSUxURVI9bQorQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQorQ09ORklHX0lQX05GX0NPTVBBVF9JUENIQUlOUz1tCitDT05GSUdfSVBfTkZfQ09NUEFUX0lQRldBRE09bQorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVA2X05GX1FVRVVFPW0KK0NPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVA2X05GX01BVENIX01BQz1tCitDT05GSUdfSVA2X05GX01BVENIX1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCitDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUFSSz1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUD1tCitDT05GSUdfSVA2X05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX01BTkdMRT1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19JUDZfTkZfUkFXPW0KK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9bQorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CitDT05GSUdfSVBYPW0KKyMgQ09ORklHX0lQWF9JTlRFUk4gaXMgbm90IHNldAorQ09ORklHX0FUQUxLPW0KKyMgQ09ORklHX0RFVl9BUFBMRVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CitDT05GSUdfTkVUUE9MTD15CisjIENPTkZJR19ORVRQT0xMX1JYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19FUVVBTElaRVI9bQorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSEVSVEFQIGlzIG5vdCBzZXQKKworIworIyBBUkNuZXQgZGV2aWNlcworIworIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST1tCitDT05GSUdfQVJJQURORT1tCitDT05GSUdfQTIwNjU9bQorQ09ORklHX0hZRFJBPW0KK0NPTkZJR19aT1JSTzgzOTA9bQorQ09ORklHX0FQTkU9bQorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAorIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19QTElQPW0KK0NPTkZJR19QUFA9bQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQT0U9bQorQ09ORklHX1NMSVA9bQorQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CitDT05GSUdfU0xJUF9TTUFSVD15CitDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKK0NPTkZJR19TSEFQRVI9bQorQ09ORklHX05FVENPTlNPTEU9bQorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgSS9PIGRyaXZlcnMKKyMKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CitDT05GSUdfU0VSSU89bQorQ09ORklHX1NFUklPX1NFUlBPUlQ9bQorIyBDT05GSUdfU0VSSU9fQ1Q4MkM3MTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUEFSS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9BTUlHQT15CitDT05GSUdfSU5QVVRfTU9VU0U9eQorIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9JTlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfTE9HSUJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BDMTEwUEFEIGlzIG5vdCBzZXQKK0NPTkZJR19NT1VTRV9BTUlHQT15CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9KT1lTVElDSz15CisjIENPTkZJR19KT1lTVElDS19JRk9SQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19KT1lTVElDS19NQUdFTExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19KT1lTVElDS19TUEFDRU9SQiBpcyBub3Qgc2V0CisjIENPTkZJR19KT1lTVElDS19TUEFDRUJBTEwgaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfU1RJTkdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19KT1lTVElDS19UV0lERExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19KT1lTVElDS19EQjkgaXMgbm90IHNldAorIyBDT05GSUdfSk9ZU1RJQ0tfR0FNRUNPTiBpcyBub3Qgc2V0CisjIENPTkZJR19KT1lTVElDS19UVVJCT0dSQUZYIGlzIG5vdCBzZXQKK0NPTkZJR19KT1lTVElDS19BTUlHQT1tCisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQTIyMzI9bQorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKK0NPTkZJR19QUklOVEVSPW0KKyMgQ09ORklHX0xQX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfUFBERVYgaXMgbm90IHNldAorIyBDT05GSUdfVElQQVIgaXMgbm90IHNldAorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5fUlRDPW0KK0NPTkZJR19HRU5fUlRDX1g9eQorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0lSUlVTPW0KK0NPTkZJR19GQl9BTUlHQT15CitDT05GSUdfRkJfQU1JR0FfT0NTPXkKK0NPTkZJR19GQl9BTUlHQV9FQ1M9eQorQ09ORklHX0ZCX0FNSUdBX0FHQT15CitDT05GSUdfRkJfRk0yPXkKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0ZPTlRfUEVBUkxfOHg4PXkKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CisKKyMKKyMgU291bmQKKyMKK0NPTkZJR19TT1VORD1tCitDT05GSUdfRE1BU09VTkRfUEFVTEE9bQorQ09ORklHX0RNQVNPVU5EPW0KKworIworIyBVU0Igc3VwcG9ydAorIworIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfQU1JR0FfQlVJTFRJTl9TRVJJQUw9eQorIyBDT05GSUdfV0hJUFBFVF9TRVJJQUwgaXMgbm90IHNldAorQ09ORklHX01VTFRJRkFDRV9JSUlfVFRZPW0KKyMgQ09ORklHX1NFUklBTF9DT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUkVJU0VSRlNfRlM9bQorIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRlNfRlM9bQorIyBDT05GSUdfSkZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfWEZTX0ZTPW0KKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQT15CisjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FGTVRfVjIgaXMgbm90IHNldAorQ09ORklHX1FVT1RBQ1RMPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19BVVRPRlNfRlM9bQorQ09ORklHX0FVVE9GUzRfRlM9bQorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPXkKK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfWklTT0ZTX0ZTPXkKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9bQorQ09ORklHX01TRE9TX0ZTPW0KK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQUZGU19GUz15CitDT05GSUdfSEZTX0ZTPW0KK0NPTkZJR19IRlNQTFVTX0ZTPW0KKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPW0KKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0hQRlNfRlM9bQorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWX0ZTPW0KK0NPTkZJR19VRlNfRlM9bQorIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz1tCitDT05GSUdfTkZTX1YzPXkKK0NPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEPW0KK0NPTkZJR19ORlNEX1YzPXkKK0NPTkZJR19ORlNEX1Y0PXkKK0NPTkZJR19ORlNEX1RDUD15CitDT05GSUdfTE9DS0Q9bQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfU1VOUlBDPW0KK0NPTkZJR19TVU5SUENfR1NTPW0KK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9bQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CitDT05GSUdfU01CX0ZTPW0KK0NPTkZJR19TTUJfTkxTX0RFRkFVTFQ9eQorQ09ORklHX1NNQl9OTFNfUkVNT1RFPSJjcDQzNyIKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorQ09ORklHX05DUF9GUz1tCisjIENPTkZJR19OQ1BGU19QQUNLRVRfU0lHTklORyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19JT0NUTF9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX1NUUk9ORyBpcyBub3Qgc2V0CitDT05GSUdfTkNQRlNfTkZTX05TPXkKK0NPTkZJR19OQ1BGU19PUzJfTlM9eQorIyBDT05GSUdfTkNQRlNfU01BTExET1MgaXMgbm90IHNldAorQ09ORklHX05DUEZTX05MUz15CisjIENPTkZJR19OQ1BGU19FWFRSQVMgaXMgbm90IHNldAorQ09ORklHX0NPREFfRlM9bQorIyBDT05GSUdfQ09EQV9GU19PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX0FNSUdBX1BBUlRJVElPTj15CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT15CitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9bQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PW0KK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9bQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQ1JDX0NDSVRUPW0KK0NPTkZJR19DUkMzMj15CitDT05GSUdfTElCQ1JDMzJDPW0KK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT1tCmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29uZmlncy9hcG9sbG9fZGVmY29uZmlnIGIvYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDgzNjFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZwpAQCAtMCwwICsxLDgyNSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEwLW02OGsKKyMgU3VuIERlYyAyNiAxMToyMjo1OCAyMDA0CisjCitDT05GSUdfTTY4Sz15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSItYXBvbGxvIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FVRElUPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX01PRFBBUk09eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKKworIworIyBQbGF0Zm9ybSBkZXBlbmRlbnQgc2V0dXAKKyMKKyMgQ09ORklHX1NVTjMgaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0EgaXMgbm90IHNldAorIyBDT05GSUdfQVRBUkkgaXMgbm90IHNldAorIyBDT05GSUdfTUFDIGlzIG5vdCBzZXQKK0NPTkZJR19BUE9MTE89eQorIyBDT05GSUdfVk1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTjNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1E0MCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHR5cGUKKyMKK0NPTkZJR19NNjgwMjA9eQorQ09ORklHX002ODAzMD15CitDT05GSUdfTTY4MDQwPXkKK0NPTkZJR19NNjgwNjA9eQorQ09ORklHX01NVV9NT1RPUk9MQT15CitDT05GSUdfTTY4S0ZQVV9FTVU9eQorQ09ORklHX002OEtGUFVfRU1VX0VYVFJBUFJFQz15CisjIENPTkZJR19NNjhLRlBVX0VNVV9PTkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEVkFOQ0VEIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX0FPVVQ9bQorQ09ORklHX0JJTkZNVF9NSVNDPW0KK0NPTkZJR19IRUFSVEJFQVQ9eQorQ09ORklHX1BST0NfSEFSRFdBUkU9eQorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCisjIENPTkZJR19NVEQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DRFJPTV9QS1RDRFZEPW0KK0NPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD1tCisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9eQorQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKK0NPTkZJR19DSFJfREVWX1NHPW0KKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorCisjCisjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPW0KK0NPTkZJR19NRF9MSU5FQVI9bQorQ09ORklHX01EX1JBSUQwPW0KK0NPTkZJR19NRF9SQUlEMT1tCisjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ1PW0KK0NPTkZJR19NRF9SQUlENj1tCitDT05GSUdfTURfTVVMVElQQVRIPW0KKyMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9ETT1tCitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX1NOQVBTSE9UPW0KK0NPTkZJR19ETV9NSVJST1I9bQorQ09ORklHX0RNX1pFUk89bQorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX05FVExJTktfREVWPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorQ09ORklHX05FVF9JUElQPW0KK0NPTkZJR19ORVRfSVBHUkU9bQorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9bQorQ09ORklHX0lORVRfRVNQPW0KK0NPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lQX1RDUERJQUc9bQorQ09ORklHX0lQX1RDUERJQUdfSVBWNj15CisKKyMKKyMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PW0KK0NPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lORVQ2X0FIPW0KK0NPTkZJR19JTkVUNl9FU1A9bQorQ09ORklHX0lORVQ2X0lQQ09NUD1tCitDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JUFY2X1RVTk5FTD1tCitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KKyMgQ09ORklHX0lQX05GX0NUX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLPXkKKyMgQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0ZUUD1tCitDT05GSUdfSVBfTkZfSVJDPW0KK0NPTkZJR19JUF9ORl9URlRQPW0KK0NPTkZJR19JUF9ORl9BTUFOREE9bQorQ09ORklHX0lQX05GX1FVRVVFPW0KK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTElNSVQ9bQorQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQorQ09ORklHX0lQX05GX01BVENIX01BQz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTUFSSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQorQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9EU0NQPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSF9FU1A9bQorQ09ORklHX0lQX05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX0lQX05GX01BVENIX0hFTFBFUj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfU1RBVEU9bQorQ09ORklHX0lQX05GX01BVENIX0NPTk5UUkFDSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQorQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9SRUFMTT1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAorQ09ORklHX0lQX05GX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQorQ09ORklHX0lQX05GX05BVD1tCitDT05GSUdfSVBfTkZfTkFUX05FRURFRD15CitDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1NBTUU9bQorQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDPW0KK0NPTkZJR19JUF9ORl9OQVRfSVJDPW0KK0NPTkZJR19JUF9ORl9OQVRfRlRQPW0KK0NPTkZJR19JUF9ORl9OQVRfVEZUUD1tCitDT05GSUdfSVBfTkZfTkFUX0FNQU5EQT1tCitDT05GSUdfSVBfTkZfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRFNDUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX01BUks9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NPTk5NQVJLPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1JBVz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0s9bQorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9DT01QQVRfSVBDSEFJTlM9bQorQ09ORklHX0lQX05GX0NPTVBBVF9JUEZXQURNPW0KKworIworIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQNl9ORl9RVUVVRT1tCitDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTElNSVQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NQUM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUj1tCitDT05GSUdfSVA2X05GX01BVENIX01BUks9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfQUhFU1A9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9MRU5HVEg9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCitDT05GSUdfSVA2X05GX0ZJTFRFUj1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQNl9ORl9NQU5HTEU9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFSSz1tCitDT05GSUdfSVA2X05GX1JBVz1tCitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPW0KKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKK0NPTkZJR19JUF9TQ1RQPW0KKyMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAorQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorQ09ORklHX0lQWD1tCisjIENPTkZJR19JUFhfSU5URVJOIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFMSz1tCisjIENPTkZJR19ERVZfQVBQTEVUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorQ09ORklHX05FVFBPTEw9eQorIyBDT05GSUdfTkVUUE9MTF9SWCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMX1RSQVAgaXMgbm90IHNldAorQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9bQorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CitDT05GSUdfRVFVQUxJWkVSPW0KKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhFUlRBUCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9bQorQ09ORklHX0FQT0xMT19FTFBMVVM9eQorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBPRT1tCitDT05GSUdfU0xJUD1tCitDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKK0NPTkZJR19TTElQX1NNQVJUPXkKK0NPTkZJR19TTElQX01PREVfU0xJUDY9eQorQ09ORklHX1NIQVBFUj1tCitDT05GSUdfTkVUQ09OU09MRT1tCisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIFRlbGVwaG9ueSBTdXBwb3J0CisjCisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBJL08gZHJpdmVycworIworIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKK0NPTkZJR19TRVJJTz1tCitDT05GSUdfU0VSSU9fU0VSUE9SVD1tCisjIENPTkZJR19TRVJJT19DVDgyQzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj1tCitDT05GSUdfTU9VU0VfU0VSSUFMPW0KKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfR0VOX1JUQz15CitDT05GSUdfR0VOX1JUQ19YPXkKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfRE5fU0VSSUFMPXkKK0NPTkZJR19TRVJJQUxfQ09OU09MRT15CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX0ZTPW0KKyMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkZTX0ZTPW0KKyMgQ09ORklHX0pGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1hGU19GUz1tCisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUVVPVEE9eQorIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CisjIENPTkZJR19RRk1UX1YyIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQUNUTD15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfQVVUT0ZTX0ZTPW0KK0NPTkZJR19BVVRPRlM0X0ZTPW0KKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz15CitDT05GSUdfSk9MSUVUPXkKK0NPTkZJR19aSVNPRlM9eQorQ09ORklHX1pJU09GU19GUz15CitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorQ09ORklHX0FGRlNfRlM9bQorQ09ORklHX0hGU19GUz1tCitDT05GSUdfSEZTUExVU19GUz1tCisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz1tCisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19IUEZTX0ZTPW0KKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVl9GUz1tCitDT05GSUdfVUZTX0ZTPW0KKyMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMz15CitDT05GSUdfTkZTRF9WND15CitDT05GSUdfTkZTRF9UQ1A9eQorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKK0NPTkZJR19TTUJfRlM9bQorQ09ORklHX1NNQl9OTFNfREVGQVVMVD15CitDT05GSUdfU01CX05MU19SRU1PVEU9ImNwNDM3IgorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CitDT05GSUdfTkNQX0ZTPW0KKyMgQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdOSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX0lPQ1RMX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfU1RST05HIGlzIG5vdCBzZXQKK0NPTkZJR19OQ1BGU19ORlNfTlM9eQorQ09ORklHX05DUEZTX09TMl9OUz15CisjIENPTkZJR19OQ1BGU19TTUFMTERPUyBpcyBub3Qgc2V0CitDT05GSUdfTkNQRlNfTkxTPXkKKyMgQ09ORklHX05DUEZTX0VYVFJBUyBpcyBub3Qgc2V0CitDT05GSUdfQ09EQV9GUz1tCisjIENPTkZJR19DT0RBX0ZTX09MRF9BUEkgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT15CitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9bQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQ1JDX0NDSVRUPW0KK0NPTkZJR19DUkMzMj15CitDT05GSUdfTElCQ1JDMzJDPW0KK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT1tCmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZiMjVjMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZwpAQCAtMCwwICsxLDg4MCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEwLW02OGsKKyMgU3VuIERlYyAyNiAxMToyMzoxMSAyMDA0CisjCitDT05GSUdfTTY4Sz15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSItYXRhcmkiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQVVESVQ9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorCisjCisjIFBsYXRmb3JtIGRlcGVuZGVudCBzZXR1cAorIworIyBDT05GSUdfU1VOMyBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQSBpcyBub3Qgc2V0CitDT05GSUdfQVRBUkk9eQorIyBDT05GSUdfTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQT0xMTyBpcyBub3Qgc2V0CisjIENPTkZJR19WTUUgaXMgbm90IHNldAorIyBDT05GSUdfSFAzMDAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOM1ggaXMgbm90IHNldAorIyBDT05GSUdfUTQwIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgdHlwZQorIworQ09ORklHX002ODAyMD15CitDT05GSUdfTTY4MDMwPXkKK0NPTkZJR19NNjgwNDA9eQorQ09ORklHX002ODA2MD15CitDT05GSUdfTU1VX01PVE9ST0xBPXkKK0NPTkZJR19NNjhLRlBVX0VNVT15CitDT05GSUdfTTY4S0ZQVV9FTVVfRVhUUkFQUkVDPXkKKyMgQ09ORklHX002OEtGUFVfRU1VX09OTFkgaXMgbm90IHNldAorIyBDT05GSUdfQURWQU5DRUQgaXMgbm90IHNldAorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfQU9VVD1tCitDT05GSUdfQklORk1UX01JU0M9bQorQ09ORklHX1NUUkFNX1BST0M9eQorQ09ORklHX0hFQVJUQkVBVD15CitDT05GSUdfUFJPQ19IQVJEV0FSRT15CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfUEFSUE9SVD1tCisjIENPTkZJR19QQVJQT1JUX1BDIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJQT1JUX0FUQVJJPW0KKyMgQ09ORklHX1BBUlBPUlRfT1RIRVIgaXMgbm90IHNldAorQ09ORklHX1BBUlBPUlRfMTI4ND15CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworQ09ORklHX0FUQVJJX0ZMT1BQWT15CisjIENPTkZJR19QQVJJREUgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DRFJPTV9QS1RDRFZEPW0KK0NPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCitDT05GSUdfSURFPXkKK0NPTkZJR19CTEtfREVWX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURJU0s9eQorIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKK0NPTkZJR19CTEtfREVWX0lERVRBUEU9bQorQ09ORklHX0JMS19ERVZfSURFRkxPUFBZPW0KKyMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworQ09ORklHX0lERV9HRU5FUklDPXkKKyMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfRkFMQ09OX0lERT15CisjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9bQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKK0NPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CitDT05GSUdfQ0hSX0RFVl9TRz1tCisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QUEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTU0gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD1tCitDT05GSUdfTURfTElORUFSPW0KK0NPTkZJR19NRF9SQUlEMD1tCitDT05GSUdfTURfUkFJRDE9bQorIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENT1tCitDT05GSUdfTURfUkFJRDY9bQorQ09ORklHX01EX01VTFRJUEFUSD1tCisjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfRE09bQorQ09ORklHX0RNX0NSWVBUPW0KK0NPTkZJR19ETV9TTkFQU0hPVD1tCitDT05GSUdfRE1fTUlSUk9SPW0KK0NPTkZJR19ETV9aRVJPPW0KKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIE5ldHdvcmtpbmcgc3VwcG9ydAorIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRMSU5LX0RFVj15CitDT05GSUdfVU5JWD15CitDT05GSUdfTkVUX0tFWT15CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0lQSVA9bQorQ09ORklHX05FVF9JUEdSRT1tCisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1RVTk5FTD1tCitDT05GSUdfSVBfVENQRElBRz1tCitDT05GSUdfSVBfVENQRElBR19JUFY2PXkKKworIworIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorQ09ORklHX0lQVjY9bQorQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSU5FVDZfQUg9bQorQ09ORklHX0lORVQ2X0VTUD1tCitDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lQVjZfVFVOTkVMPW0KK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQorIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQorIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfRlRQPW0KK0NPTkZJR19JUF9ORl9JUkM9bQorQ09ORklHX0lQX05GX1RGVFA9bQorQ09ORklHX0lQX05GX0FNQU5EQT1tCitDT05GSUdfSVBfTkZfUVVFVUU9bQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX0lQX05GX01BVENIX1RPUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9FQ049bQorQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQorQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX01BVENIX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9TVEFURT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQorQ09ORklHX0lQX05GX01BVENIX1JFQUxNPW0KKyMgQ09ORklHX0lQX05GX01BVENIX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTk1BUks9bQorQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTkFUPW0KK0NPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCitDT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUM9bQorQ09ORklHX0lQX05GX05BVF9JUkM9bQorQ09ORklHX0lQX05GX05BVF9GVFA9bQorQ09ORklHX0lQX05GX05BVF9URlRQPW0KK0NPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQorQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQorQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ09OTk1BUks9bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUkFXPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTk9UUkFDSz1tCitDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9BUlBGSUxURVI9bQorQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQorQ09ORklHX0lQX05GX0NPTVBBVF9JUENIQUlOUz1tCitDT05GSUdfSVBfTkZfQ09NUEFUX0lQRldBRE09bQorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVA2X05GX1FVRVVFPW0KK0NPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVA2X05GX01BVENIX01BQz1tCitDT05GSUdfSVA2X05GX01BVENIX1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCitDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUFSSz1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUD1tCitDT05GSUdfSVA2X05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX01BTkdMRT1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19JUDZfTkZfUkFXPW0KK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9bQorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CitDT05GSUdfSVBYPW0KKyMgQ09ORklHX0lQWF9JTlRFUk4gaXMgbm90IHNldAorQ09ORklHX0FUQUxLPW0KKyMgQ09ORklHX0RFVl9BUFBMRVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CitDT05GSUdfTkVUUE9MTD15CisjIENPTkZJR19ORVRQT0xMX1JYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19FUVVBTElaRVI9bQorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSEVSVEFQIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST1tCitDT05GSUdfQVRBUklMQU5DRT1tCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QTElQIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQT0U9bQorQ09ORklHX1NMSVA9bQorQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CitDT05GSUdfU0xJUF9TTUFSVD15CitDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKK0NPTkZJR19TSEFQRVI9bQorQ09ORklHX05FVENPTlNPTEU9bQorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgSS9PIGRyaXZlcnMKKyMKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fQ1Q4MkM3MTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUEFSS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTUlTQz15CitDT05GSUdfSU5QVVRfTTY4S19CRUVQPW0KK0NPTkZJR19JTlBVVF9VSU5QVVQ9bQorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CitDT05GSUdfUFJJTlRFUj1tCisjIENPTkZJR19MUF9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEFSIGlzIG5vdCBzZXQKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfTlZSQU09eQorQ09ORklHX0dFTl9SVEM9eQorQ09ORklHX0dFTl9SVENfWD15CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworQ09ORklHX0ZCPXkKK0NPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCitDT05GSUdfU09VTkQ9bQorQ09ORklHX0RNQVNPVU5EX0FUQVJJPW0KK0NPTkZJR19ETUFTT1VORD1tCisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX0FUQVJJX01GUFNFUj1tCitDT05GSUdfQVRBUklfU0NDPXkKK0NPTkZJR19BVEFSSV9TQ0NfRE1BPXkKK0NPTkZJR19BVEFSSV9NSURJPW0KK0NPTkZJR19BVEFSSV9EU1A1Nks9bQorIyBDT05GSUdfU0VSSUFMX0NPTlNPTEUgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUlTRVJGU19GUz1tCisjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRlNfRlM9bQorIyBDT05GSUdfSkZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX1hGU19GUz1tCisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUVVPVEE9eQorIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CisjIENPTkZJR19RRk1UX1YyIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQUNUTD15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfQVVUT0ZTX0ZTPW0KK0NPTkZJR19BVVRPRlM0X0ZTPW0KKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz15CitDT05GSUdfSk9MSUVUPXkKK0NPTkZJR19aSVNPRlM9eQorQ09ORklHX1pJU09GU19GUz15CitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorQ09ORklHX0FGRlNfRlM9bQorQ09ORklHX0hGU19GUz1tCitDT05GSUdfSEZTUExVU19GUz1tCisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz1tCisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19IUEZTX0ZTPW0KKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVl9GUz1tCitDT05GSUdfVUZTX0ZTPW0KKyMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9bQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEPW0KK0NPTkZJR19ORlNEX1YzPXkKKyMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAorQ09ORklHX05GU0RfVENQPXkKK0NPTkZJR19MT0NLRD1tCitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19TVU5SUEM9bQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz1tCitDT05GSUdfU01CX05MU19ERUZBVUxUPXkKK0NPTkZJR19TTUJfTkxTX1JFTU9URT0iY3A0MzciCisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKK0NPTkZJR19OQ1BfRlM9bQorIyBDT05GSUdfTkNQRlNfUEFDS0VUX1NJR05JTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfSU9DVExfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19TVFJPTkcgaXMgbm90IHNldAorQ09ORklHX05DUEZTX05GU19OUz15CitDT05GSUdfTkNQRlNfT1MyX05TPXkKKyMgQ09ORklHX05DUEZTX1NNQUxMRE9TIGlzIG5vdCBzZXQKK0NPTkZJR19OQ1BGU19OTFM9eQorIyBDT05GSUdfTkNQRlNfRVhUUkFTIGlzIG5vdCBzZXQKK0NPTkZJR19DT0RBX0ZTPW0KKyMgQ09ORklHX0NPREFfRlNfT0xEX0FQSSBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFSSV9QQVJUSVRJT049eQorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PW0KKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT1tCitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fREVGTEFURT1tCitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMzI9eQorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9bQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnIGIvYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZjJjZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWcKQEAgLTAsMCArMSw4MjQgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMC1tNjhrCisjIFN1biBEZWMgMjYgMTE6MjM6MTUgMjAwNAorIworQ09ORklHX002OEs9eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWJ2bWU2MDAwIgorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FVRElUPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX09CU09MRVRFX01PRFBBUk09eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LTU9EPXkKKworIworIyBQbGF0Zm9ybSBkZXBlbmRlbnQgc2V0dXAKKyMKKyMgQ09ORklHX1NVTjMgaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0EgaXMgbm90IHNldAorIyBDT05GSUdfQVRBUkkgaXMgbm90IHNldAorIyBDT05GSUdfTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQT0xMTyBpcyBub3Qgc2V0CitDT05GSUdfVk1FPXkKKyMgQ09ORklHX01WTUUxNDcgaXMgbm90IHNldAorIyBDT05GSUdfTVZNRTE2eCBpcyBub3Qgc2V0CitDT05GSUdfQlZNRTYwMDA9eQorIyBDT05GSUdfSFAzMDAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOM1ggaXMgbm90IHNldAorIyBDT05GSUdfUTQwIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgdHlwZQorIworIyBDT05GSUdfTTY4MDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX002ODAzMCBpcyBub3Qgc2V0CitDT05GSUdfTTY4MDQwPXkKK0NPTkZJR19NNjgwNjA9eQorQ09ORklHX01NVV9NT1RPUk9MQT15CisjIENPTkZJR19NNjhLRlBVX0VNVSBpcyBub3Qgc2V0CisjIENPTkZJR19BRFZBTkNFRCBpcyBub3Qgc2V0CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9BT1VUPW0KK0NPTkZJR19CSU5GTVRfTUlTQz1tCitDT05GSUdfUFJPQ19IQVJEV0FSRT15CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCitDT05GSUdfQkxLX0RFVl9MT09QPXkKK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorQ09ORklHX0JMS19ERVZfTkJEPW0KK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NEUk9NX1BLVENEVkQ9bQorQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CisjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPW0KKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TUj15CitDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQorQ09ORklHX0NIUl9ERVZfU0c9bQorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycworIworIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9bQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfUkFJRDA9bQorQ09ORklHX01EX1JBSUQxPW0KKyMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDU9bQorQ09ORklHX01EX1JBSUQ2PW0KK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0RNPW0KK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fWkVSTz1tCisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUTElOS19ERVY9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX05FVF9LRVk9eQorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CitDT05GSUdfTkVUX0lQSVA9bQorQ09ORklHX05FVF9JUEdSRT1tCisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1RVTk5FTD1tCitDT05GSUdfSVBfVENQRElBRz1tCitDT05GSUdfSVBfVENQRElBR19JUFY2PXkKKworIworIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorQ09ORklHX0lQVjY9bQorQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSU5FVDZfQUg9bQorQ09ORklHX0lORVQ2X0VTUD1tCitDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lQVjZfVFVOTkVMPW0KK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQorIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQorIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfRlRQPW0KK0NPTkZJR19JUF9ORl9JUkM9bQorQ09ORklHX0lQX05GX1RGVFA9bQorQ09ORklHX0lQX05GX0FNQU5EQT1tCitDT05GSUdfSVBfTkZfUVVFVUU9bQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX0lQX05GX01BVENIX1RPUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9FQ049bQorQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQorQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX01BVENIX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9TVEFURT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQorQ09ORklHX0lQX05GX01BVENIX1JFQUxNPW0KKyMgQ09ORklHX0lQX05GX01BVENIX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTk1BUks9bQorQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTkFUPW0KK0NPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCitDT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUM9bQorQ09ORklHX0lQX05GX05BVF9JUkM9bQorQ09ORklHX0lQX05GX05BVF9GVFA9bQorQ09ORklHX0lQX05GX05BVF9URlRQPW0KK0NPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQorQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQorQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ09OTk1BUks9bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUkFXPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTk9UUkFDSz1tCitDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9BUlBGSUxURVI9bQorQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQorQ09ORklHX0lQX05GX0NPTVBBVF9JUENIQUlOUz1tCitDT05GSUdfSVBfTkZfQ09NUEFUX0lQRldBRE09bQorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVA2X05GX1FVRVVFPW0KK0NPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVA2X05GX01BVENIX01BQz1tCitDT05GSUdfSVA2X05GX01BVENIX1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCitDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUFSSz1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUD1tCitDT05GSUdfSVA2X05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX01BTkdMRT1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19JUDZfTkZfUkFXPW0KK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9bQorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorQ09ORklHX0FUQUxLPW0KKyMgQ09ORklHX0RFVl9BUFBMRVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CitDT05GSUdfTkVUUE9MTD15CisjIENPTkZJR19ORVRQT0xMX1JYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19FUVVBTElaRVI9bQorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSEVSVEFQIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST1tCitDT05GSUdfQlZNRTYwMDBfTkVUPXkKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBPRT1tCitDT05GSUdfU0xJUD1tCitDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKK0NPTkZJR19TTElQX1NNQVJUPXkKK0NPTkZJR19TTElQX01PREVfU0xJUDY9eQorQ09ORklHX1NIQVBFUj1tCitDT05GSUdfTkVUQ09OU09MRT1tCisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIFRlbGVwaG9ueSBTdXBwb3J0CisjCisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBJL08gZHJpdmVycworIworIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKK0NPTkZJR19TRVJJTz1tCitDT05GSUdfU0VSSU9fU0VSUE9SVD1tCisjIENPTkZJR19TRVJJT19DVDgyQzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj1tCitDT05GSUdfTU9VU0VfU0VSSUFMPW0KKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfR0VOX1JUQz1tCitDT05GSUdfR0VOX1JUQ19YPXkKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfQlZNRTYwMDBfU0NDPXkKK0NPTkZJR19TRVJJQUxfQ09OU09MRT15CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX0ZTPW0KKyMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkZTX0ZTPW0KKyMgQ09ORklHX0pGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1hGU19GUz1tCisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUVVPVEE9eQorIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CisjIENPTkZJR19RRk1UX1YyIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQUNUTD15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfQVVUT0ZTX0ZTPW0KK0NPTkZJR19BVVRPRlM0X0ZTPW0KKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz15CitDT05GSUdfSk9MSUVUPXkKK0NPTkZJR19aSVNPRlM9eQorQ09ORklHX1pJU09GU19GUz15CitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorQ09ORklHX0FGRlNfRlM9bQorQ09ORklHX0hGU19GUz1tCitDT05GSUdfSEZTUExVU19GUz1tCisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz1tCisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19IUEZTX0ZTPW0KKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVl9GUz1tCitDT05GSUdfVUZTX0ZTPW0KKyMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMz15CitDT05GSUdfTkZTRF9WND15CitDT05GSUdfTkZTRF9UQ1A9eQorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKK0NPTkZJR19TTUJfRlM9bQorQ09ORklHX1NNQl9OTFNfREVGQVVMVD15CitDT05GSUdfU01CX05MU19SRU1PVEU9ImNwNDM3IgorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CitDT05GSUdfTkNQX0ZTPW0KKyMgQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdOSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX0lPQ1RMX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfU1RST05HIGlzIG5vdCBzZXQKK0NPTkZJR19OQ1BGU19ORlNfTlM9eQorQ09ORklHX05DUEZTX09TMl9OUz15CisjIENPTkZJR19OQ1BGU19TTUFMTERPUyBpcyBub3Qgc2V0CitDT05GSUdfTkNQRlNfTkxTPXkKKyMgQ09ORklHX05DUEZTX0VYVFJBUyBpcyBub3Qgc2V0CitDT05GSUdfQ09EQV9GUz1tCisjIENPTkZJR19DT0RBX0ZTX09MRF9BUEkgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT15CitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9bQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQ1JDX0NDSVRUPW0KK0NPTkZJR19DUkMzMj1tCitDT05GSUdfTElCQ1JDMzJDPW0KK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT1tCmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNkZGU0MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9jb25maWdzL2hwMzAwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDgyNCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEwLW02OGsKKyMgU3VuIERlYyAyNiAxMToyMzo0MCAyMDA0CisjCitDT05GSUdfTTY4Sz15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSItaHAzMDAiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQVVESVQ9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorCisjCisjIFBsYXRmb3JtIGRlcGVuZGVudCBzZXR1cAorIworIyBDT05GSUdfU1VOMyBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUMgaXMgbm90IHNldAorIyBDT05GSUdfQVBPTExPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNRSBpcyBub3Qgc2V0CitDT05GSUdfSFAzMDA9eQorQ09ORklHX0RJTz15CisjIENPTkZJR19TVU4zWCBpcyBub3Qgc2V0CisjIENPTkZJR19RNDAgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciB0eXBlCisjCitDT05GSUdfTTY4MDIwPXkKK0NPTkZJR19NNjgwMzA9eQorQ09ORklHX002ODA0MD15CitDT05GSUdfTTY4MDYwPXkKK0NPTkZJR19NTVVfTU9UT1JPTEE9eQorQ09ORklHX002OEtGUFVfRU1VPXkKK0NPTkZJR19NNjhLRlBVX0VNVV9FWFRSQVBSRUM9eQorIyBDT05GSUdfTTY4S0ZQVV9FTVVfT05MWSBpcyBub3Qgc2V0CisjIENPTkZJR19BRFZBTkNFRCBpcyBub3Qgc2V0CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9BT1VUPW0KK0NPTkZJR19CSU5GTVRfTUlTQz1tCitDT05GSUdfSEVBUlRCRUFUPXkKK0NPTkZJR19QUk9DX0hBUkRXQVJFPXkKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9OQkQ9bQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0RST01fUEtUQ0RWRD1tCitDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKKyMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9bQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKK0NPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CitDT05GSUdfQ0hSX0RFVl9TRz1tCisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD1tCitDT05GSUdfTURfTElORUFSPW0KK0NPTkZJR19NRF9SQUlEMD1tCitDT05GSUdfTURfUkFJRDE9bQorIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENT1tCitDT05GSUdfTURfUkFJRDY9bQorQ09ORklHX01EX01VTFRJUEFUSD1tCisjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfRE09bQorQ09ORklHX0RNX0NSWVBUPW0KK0NPTkZJR19ETV9TTkFQU0hPVD1tCitDT05GSUdfRE1fTUlSUk9SPW0KK0NPTkZJR19ETV9aRVJPPW0KKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIE5ldHdvcmtpbmcgc3VwcG9ydAorIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRMSU5LX0RFVj15CitDT05GSUdfVU5JWD15CitDT05GSUdfTkVUX0tFWT15CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKK0NPTkZJR19ORVRfSVBJUD1tCitDT05GSUdfTkVUX0lQR1JFPW0KKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19JTkVUX0FIPW0KK0NPTkZJR19JTkVUX0VTUD1tCitDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfVFVOTkVMPW0KK0NPTkZJR19JUF9UQ1BESUFHPW0KK0NPTkZJR19JUF9UQ1BESUFHX0lQVjY9eQorCisjCisjIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj1tCitDT05GSUdfSVBWNl9QUklWQUNZPXkKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSVBWNl9UVU5ORUw9bQorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCisjIENPTkZJR19JUF9ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSz15CisjIENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9GVFA9bQorQ09ORklHX0lQX05GX0lSQz1tCitDT05GSUdfSVBfTkZfVEZUUD1tCitDT05GSUdfSVBfTkZfQU1BTkRBPW0KK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX0xJTUlUPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NQUM9bQorQ09ORklHX0lQX05GX01BVENIX1BLVFRZUEU9bQorQ09ORklHX0lQX05GX01BVENIX01BUks9bQorQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQorQ09ORklHX0lQX05GX01BVENIX0VDTj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9MRU5HVEg9bQorQ09ORklHX0lQX05GX01BVENIX1RUTD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVENQTVNTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9IRUxQRVI9bQorQ09ORklHX0lQX05GX01BVENIX1NUQVRFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9DT05OVFJBQ0s9bQorQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE09bQorIyBDT05GSUdfSVBfTkZfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KK0NPTkZJR19JUF9ORl9GSUxURVI9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19JUF9ORl9OQVQ9bQorQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQorQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPW0KK0NPTkZJR19JUF9ORl9OQVRfU05NUF9CQVNJQz1tCitDT05GSUdfSVBfTkZfTkFUX0lSQz1tCitDT05GSUdfSVBfTkZfTkFUX0ZUUD1tCitDT05GSUdfSVBfTkZfTkFUX1RGVFA9bQorQ09ORklHX0lQX05GX05BVF9BTUFOREE9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0RTQ1A9bQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ0xBU1NJRlk9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DT05OTUFSSz1tCisjIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9SQVc9bQorQ09ORklHX0lQX05GX1RBUkdFVF9OT1RSQUNLPW0KK0NPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQorQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCitDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCitDT05GSUdfSVBfTkZfQ09NUEFUX0lQQ0hBSU5TPW0KK0NPTkZJR19JUF9ORl9DT01QQVRfSVBGV0FETT1tCisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUDZfTkZfUVVFVUU9bQorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVA2X05GX01BVENIX0xJTUlUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUFDPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCitDT05GSUdfSVA2X05GX01BVENIX0hMPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NQVJLPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCitDT05GSUdfSVA2X05GX01BVENIX0FIRVNQPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQorQ09ORklHX0lQNl9ORl9GSUxURVI9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUDZfTkZfTUFOR0xFPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX01BUks9bQorQ09ORklHX0lQNl9ORl9SQVc9bQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj1tCisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCitDT05GSUdfSVBfU0NUUD1tCisjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorQ09ORklHX0xMQz1tCisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKK0NPTkZJR19JUFg9bQorIyBDT05GSUdfSVBYX0lOVEVSTiBpcyBub3Qgc2V0CitDT05GSUdfQVRBTEs9bQorIyBDT05GSUdfREVWX0FQUExFVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19ST1VURT15CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRQT0xMPXkKKyMgQ09ORklHX05FVFBPTExfUlggaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPW0KKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0VRVUFMSVpFUj1tCisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfRVRIRVJUQVAgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPW0KK0NPTkZJR19IUExBTkNFPXkKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQT0U9bQorQ09ORklHX1NMSVA9bQorQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CitDT05GSUdfU0xJUF9TTUFSVD15CitDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKK0NPTkZJR19TSEFQRVI9bQorQ09ORklHX05FVENPTlNPTEU9bQorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgSS9PIGRyaXZlcnMKKyMKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORF9HQU1FUE9SVD15CitDT05GSUdfU0VSSU89bQorQ09ORklHX1NFUklPX1NFUlBPUlQ9bQorIyBDT05GSUdfU0VSSU9fQ1Q4MkM3MTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9bQorQ09ORklHX01PVVNFX1NFUklBTD1tCisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0dFTl9SVEM9eQorQ09ORklHX0dFTl9SVENfWD15CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRkIgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUlTRVJGU19GUz1tCisjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pGU19GUz1tCisjIENPTkZJR19KRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19YRlNfRlM9bQorIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTUlOSVhfRlM9eQorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX1FVT1RBPXkKKyMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAorIyBDT05GSUdfUUZNVF9WMiBpcyBub3Qgc2V0CitDT05GSUdfUVVPVEFDVEw9eQorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0FVVE9GU19GUz1tCitDT05GSUdfQVVUT0ZTNF9GUz1tCisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9eQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19aSVNPRlNfRlM9eQorQ09ORklHX1VERl9GUz1tCitDT05GSUdfVURGX05MUz15CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BRkZTX0ZTPW0KK0NPTkZJR19IRlNfRlM9bQorQ09ORklHX0hGU1BMVVNfRlM9bQorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9bQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSFBGU19GUz1tCisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZfRlM9bQorQ09ORklHX1VGU19GUz1tCisjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCisjCitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX05GU0Q9bQorQ09ORklHX05GU0RfVjM9eQorQ09ORklHX05GU0RfVjQ9eQorQ09ORklHX05GU0RfVENQPXkKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CitDT05GSUdfU01CX0ZTPW0KK0NPTkZJR19TTUJfTkxTX0RFRkFVTFQ9eQorQ09ORklHX1NNQl9OTFNfUkVNT1RFPSJjcDQzNyIKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorQ09ORklHX05DUF9GUz1tCisjIENPTkZJR19OQ1BGU19QQUNLRVRfU0lHTklORyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19JT0NUTF9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX1NUUk9ORyBpcyBub3Qgc2V0CitDT05GSUdfTkNQRlNfTkZTX05TPXkKK0NPTkZJR19OQ1BGU19PUzJfTlM9eQorIyBDT05GSUdfTkNQRlNfU01BTExET1MgaXMgbm90IHNldAorQ09ORklHX05DUEZTX05MUz15CisjIENPTkZJR19OQ1BGU19FWFRSQVMgaXMgbm90IHNldAorQ09ORklHX0NPREFfRlM9bQorIyBDT05GSUdfQ09EQV9GU19PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PW0KKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fREVGTEFURT1tCitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMzI9eQorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9bQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ1MmRhYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWcKQEAgLTAsMCArMSw5MDMgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMC1tNjhrCisjIFN1biBEZWMgMjYgMTE6MjM6NDQgMjAwNAorIworQ09ORklHX002OEs9eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iLW1hYyIKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BVURJVD15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNgorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgUGxhdGZvcm0gZGVwZW5kZW50IHNldHVwCisjCisjIENPTkZJR19TVU4zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM9eQorQ09ORklHX05VQlVTPXkKK0NPTkZJR19NNjhLX0wyX0NBQ0hFPXkKKyMgQ09ORklHX0FQT0xMTyBpcyBub3Qgc2V0CisjIENPTkZJR19WTUUgaXMgbm90IHNldAorIyBDT05GSUdfSFAzMDAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOM1ggaXMgbm90IHNldAorIyBDT05GSUdfUTQwIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgdHlwZQorIworQ09ORklHX002ODAyMD15CitDT05GSUdfTTY4MDMwPXkKK0NPTkZJR19NNjgwNDA9eQorIyBDT05GSUdfTTY4MDYwIGlzIG5vdCBzZXQKK0NPTkZJR19NTVVfTU9UT1JPTEE9eQorQ09ORklHX002OEtGUFVfRU1VPXkKK0NPTkZJR19NNjhLRlBVX0VNVV9FWFRSQVBSRUM9eQorIyBDT05GSUdfTTY4S0ZQVV9FTVVfT05MWSBpcyBub3Qgc2V0CisjIENPTkZJR19BRFZBTkNFRCBpcyBub3Qgc2V0CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9BT1VUPW0KK0NPTkZJR19CSU5GTVRfTUlTQz1tCisjIENPTkZJR19IRUFSVEJFQVQgaXMgbm90IHNldAorQ09ORklHX1BST0NfSEFSRFdBUkU9eQorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCisjIENPTkZJR19NVEQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DRFJPTV9QS1RDRFZEPW0KK0NPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCitDT05GSUdfSURFPXkKK0NPTkZJR19CTEtfREVWX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURJU0s9eQorIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKK0NPTkZJR19CTEtfREVWX0lERVRBUEU9bQorQ09ORklHX0JMS19ERVZfSURFRkxPUFBZPW0KKyMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworQ09ORklHX0lERV9HRU5FUklDPXkKKyMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTUFDX0lERT15CisjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9bQorQ09ORklHX0NIUl9ERVZfT1NTVD1tCitDT05GSUdfQkxLX0RFVl9TUj15CitDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQorQ09ORklHX0NIUl9ERVZfU0c9bQorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycworIworIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01BQ19TQ1NJPXkKK0NPTkZJR19TQ1NJX01BQ19FU1A9eQorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9bQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfUkFJRDA9bQorQ09ORklHX01EX1JBSUQxPW0KKyMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDU9bQorQ09ORklHX01EX1JBSUQ2PW0KK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0RNPW0KK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fWkVSTz1tCisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBNYWNpbnRvc2ggZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19BREI9eQorQ09ORklHX0FEQl9NQUNJST15CitDT05GSUdfQURCX01BQ0lJU0k9eQorQ09ORklHX0FEQl9JT1A9eQorQ09ORklHX0FEQl9QTVU2OEs9eQorQ09ORklHX0FEQl9DVURBPXkKK0NPTkZJR19JTlBVVF9BREJISUQ9eQorQ09ORklHX01BQ19FTVVNT1VTRUJUTj15CisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX05FVExJTktfREVWPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfSVBJUD1tCitDT05GSUdfTkVUX0lQR1JFPW0KKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19JTkVUX0FIPW0KK0NPTkZJR19JTkVUX0VTUD1tCitDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfVFVOTkVMPW0KK0NPTkZJR19JUF9UQ1BESUFHPW0KK0NPTkZJR19JUF9UQ1BESUFHX0lQVjY9eQorCisjCisjIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj1tCitDT05GSUdfSVBWNl9QUklWQUNZPXkKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSVBWNl9UVU5ORUw9bQorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCisjIENPTkZJR19JUF9ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSz15CisjIENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9GVFA9bQorQ09ORklHX0lQX05GX0lSQz1tCitDT05GSUdfSVBfTkZfVEZUUD1tCitDT05GSUdfSVBfTkZfQU1BTkRBPW0KK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX0xJTUlUPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NQUM9bQorQ09ORklHX0lQX05GX01BVENIX1BLVFRZUEU9bQorQ09ORklHX0lQX05GX01BVENIX01BUks9bQorQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQorQ09ORklHX0lQX05GX01BVENIX0VDTj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9MRU5HVEg9bQorQ09ORklHX0lQX05GX01BVENIX1RUTD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVENQTVNTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9IRUxQRVI9bQorQ09ORklHX0lQX05GX01BVENIX1NUQVRFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9DT05OVFJBQ0s9bQorQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE09bQorIyBDT05GSUdfSVBfTkZfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KK0NPTkZJR19JUF9ORl9GSUxURVI9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19JUF9ORl9OQVQ9bQorQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQorQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPW0KK0NPTkZJR19JUF9ORl9OQVRfU05NUF9CQVNJQz1tCitDT05GSUdfSVBfTkZfTkFUX0lSQz1tCitDT05GSUdfSVBfTkZfTkFUX0ZUUD1tCitDT05GSUdfSVBfTkZfTkFUX1RGVFA9bQorQ09ORklHX0lQX05GX05BVF9BTUFOREE9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0RTQ1A9bQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ0xBU1NJRlk9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DT05OTUFSSz1tCisjIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9SQVc9bQorQ09ORklHX0lQX05GX1RBUkdFVF9OT1RSQUNLPW0KK0NPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQorQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCitDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCitDT05GSUdfSVBfTkZfQ09NUEFUX0lQQ0hBSU5TPW0KK0NPTkZJR19JUF9ORl9DT01QQVRfSVBGV0FETT1tCisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUDZfTkZfUVVFVUU9bQorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVA2X05GX01BVENIX0xJTUlUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUFDPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCitDT05GSUdfSVA2X05GX01BVENIX0hMPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NQVJLPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCitDT05GSUdfSVA2X05GX01BVENIX0FIRVNQPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQorQ09ORklHX0lQNl9ORl9GSUxURVI9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUDZfTkZfTUFOR0xFPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX01BUks9bQorQ09ORklHX0lQNl9ORl9SQVc9bQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj1tCisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCitDT05GSUdfSVBfU0NUUD1tCisjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorQ09ORklHX0xMQz1tCisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKK0NPTkZJR19JUFg9bQorIyBDT05GSUdfSVBYX0lOVEVSTiBpcyBub3Qgc2V0CitDT05GSUdfQVRBTEs9bQorQ09ORklHX0RFVl9BUFBMRVRBTEs9eQorQ09ORklHX0lQRERQPW0KK0NPTkZJR19JUEREUF9FTkNBUD15CitDT05GSUdfSVBERFBfREVDQVA9eQorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CitDT05GSUdfTkVUUE9MTD15CisjIENPTkZJR19ORVRQT0xMX1JYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19FUVVBTElaRVI9bQorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSEVSVEFQIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MzkwPXkKK0NPTkZJR19NQUM4OXgwPXkKK0NPTkZJR19NQUNTT05JQz15CitDT05GSUdfTUFDTUFDRT15CisjIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KKyMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAorQ09ORklHX1BQUF9GSUxURVI9eQorIyBDT05GSUdfUFBQX0FTWU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBPRT1tCitDT05GSUdfU0xJUD1tCitDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKK0NPTkZJR19TTElQX1NNQVJUPXkKK0NPTkZJR19TTElQX01PREVfU0xJUDY9eQorQ09ORklHX1NIQVBFUj1tCitDT05GSUdfTkVUQ09OU09MRT1tCisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIFRlbGVwaG9ueSBTdXBwb3J0CisjCisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBJL08gZHJpdmVycworIworIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKK0NPTkZJR19TRVJJTz1tCitDT05GSUdfU0VSSU9fU0VSUE9SVD1tCisjIENPTkZJR19TRVJJT19DVDgyQzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj1tCitDT05GSUdfTU9VU0VfU0VSSUFMPW0KKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfR0VOX1JUQz1tCitDT05GSUdfR0VOX1JUQ19YPXkKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCitDT05GSUdfRkI9eQorQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorQ09ORklHX0ZCX1ZBTEtZUklFPXkKK0NPTkZJR19GQl9NQUM9eQorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfRk9OVF82eDExPXkKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CitDT05GSUdfTE9HT19NQUNfQ0xVVDIyND15CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfTUFDX1NDQz15CitDT05GSUdfTUFDX0hJRD15CitDT05GSUdfTUFDX0FEQktFWUNPREVTPXkKK0NPTkZJR19TRVJJQUxfQ09OU09MRT15CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX0ZTPW0KKyMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkZTX0ZTPW0KKyMgQ09ORklHX0pGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1hGU19GUz1tCisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUVVPVEE9eQorIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CisjIENPTkZJR19RRk1UX1YyIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQUNUTD15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfQVVUT0ZTX0ZTPW0KK0NPTkZJR19BVVRPRlM0X0ZTPW0KKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz15CitDT05GSUdfSk9MSUVUPXkKK0NPTkZJR19aSVNPRlM9eQorQ09ORklHX1pJU09GU19GUz15CitDT05GSUdfVURGX0ZTPW0KK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorQ09ORklHX0FGRlNfRlM9bQorQ09ORklHX0hGU19GUz15CitDT05GSUdfSEZTUExVU19GUz15CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz1tCisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19IUEZTX0ZTPW0KKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVl9GUz1tCitDT05GSUdfVUZTX0ZTPW0KKyMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9bQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMz15CitDT05GSUdfTkZTRF9WND15CitDT05GSUdfTkZTRF9UQ1A9eQorQ09ORklHX0xPQ0tEPW0KK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9bQorQ09ORklHX1NVTlJQQz1tCitDT05GSUdfU1VOUlBDX0dTUz1tCitDT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz1tCitDT05GSUdfU01CX05MU19ERUZBVUxUPXkKK0NPTkZJR19TTUJfTkxTX1JFTU9URT0iY3A0MzciCisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKK0NPTkZJR19OQ1BfRlM9bQorIyBDT05GSUdfTkNQRlNfUEFDS0VUX1NJR05JTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfSU9DVExfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19TVFJPTkcgaXMgbm90IHNldAorQ09ORklHX05DUEZTX05GU19OUz15CitDT05GSUdfTkNQRlNfT1MyX05TPXkKKyMgQ09ORklHX05DUEZTX1NNQUxMRE9TIGlzIG5vdCBzZXQKK0NPTkZJR19OQ1BGU19OTFM9eQorIyBDT05GSUdfTkNQRlNfRVhUUkFTIGlzIG5vdCBzZXQKK0NPTkZJR19DT0RBX0ZTPW0KKyMgQ09ORklHX0NPREFfRlNfT0xEX0FQSSBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfQU1JR0FfUEFSVElUSU9OPXkKK0NPTkZJR19BVEFSSV9QQVJUSVRJT049eQorQ09ORklHX01BQ19QQVJUSVRJT049eQorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfQlNEX0RJU0tMQUJFTD15CitDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OPXkKK0NPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT049eQorQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTD15CitDT05GSUdfTERNX1BBUlRJVElPTj15CitDT05GSUdfTERNX0RFQlVHPXkKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfU1VOX1BBUlRJVElPTj15CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT15CitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9bQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9bQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQ1JDX0NDSVRUPW0KK0NPTkZJR19DUkMzMj15CitDT05GSUdfTElCQ1JDMzJDPW0KK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT1tCmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMzhlODcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZwpAQCAtMCwwICsxLDg0MyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEwLW02OGsKKyMgU3VuIERlYyAyNiAxMToyMzo0OSAyMDA0CisjCitDT05GSUdfTTY4Sz15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSItbXZtZTE0NyIKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BVURJVD15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNgorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgUGxhdGZvcm0gZGVwZW5kZW50IHNldHVwCisjCisjIENPTkZJR19TVU4zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUE9MTE8gaXMgbm90IHNldAorQ09ORklHX1ZNRT15CitDT05GSUdfTVZNRTE0Nz15CisjIENPTkZJR19NVk1FMTZ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JWTUU2MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTjNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1E0MCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHR5cGUKKyMKKyMgQ09ORklHX002ODAyMCBpcyBub3Qgc2V0CitDT05GSUdfTTY4MDMwPXkKKyMgQ09ORklHX002ODA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19NNjgwNjAgaXMgbm90IHNldAorQ09ORklHX01NVV9NT1RPUk9MQT15CisjIENPTkZJR19NNjhLRlBVX0VNVSBpcyBub3Qgc2V0CisjIENPTkZJR19BRFZBTkNFRCBpcyBub3Qgc2V0CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9BT1VUPW0KK0NPTkZJR19CSU5GTVRfTUlTQz1tCitDT05GSUdfUFJPQ19IQVJEV0FSRT15CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCitDT05GSUdfQkxLX0RFVl9MT09QPXkKK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorQ09ORklHX0JMS19ERVZfTkJEPW0KK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NEUk9NX1BLVENEVkQ9bQorQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CisjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPW0KKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TUj15CitDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQorQ09ORklHX0NIUl9ERVZfU0c9bQorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycworIworIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01WTUUxNDdfU0NTST15CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD1tCitDT05GSUdfTURfTElORUFSPW0KK0NPTkZJR19NRF9SQUlEMD1tCitDT05GSUdfTURfUkFJRDE9bQorIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENT1tCitDT05GSUdfTURfUkFJRDY9bQorQ09ORklHX01EX01VTFRJUEFUSD1tCisjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfRE09bQorQ09ORklHX0RNX0NSWVBUPW0KK0NPTkZJR19ETV9TTkFQU0hPVD1tCitDT05GSUdfRE1fTUlSUk9SPW0KK0NPTkZJR19ETV9aRVJPPW0KKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIE5ldHdvcmtpbmcgc3VwcG9ydAorIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRMSU5LX0RFVj15CitDT05GSUdfVU5JWD15CitDT05GSUdfTkVUX0tFWT15CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKK0NPTkZJR19ORVRfSVBJUD1tCitDT05GSUdfTkVUX0lQR1JFPW0KKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19JTkVUX0FIPW0KK0NPTkZJR19JTkVUX0VTUD1tCitDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfVFVOTkVMPW0KK0NPTkZJR19JUF9UQ1BESUFHPW0KK0NPTkZJR19JUF9UQ1BESUFHX0lQVjY9eQorCisjCisjIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj1tCitDT05GSUdfSVBWNl9QUklWQUNZPXkKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSVBWNl9UVU5ORUw9bQorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCisjIENPTkZJR19JUF9ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSz15CisjIENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9GVFA9bQorQ09ORklHX0lQX05GX0lSQz1tCitDT05GSUdfSVBfTkZfVEZUUD1tCitDT05GSUdfSVBfTkZfQU1BTkRBPW0KK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX0xJTUlUPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NQUM9bQorQ09ORklHX0lQX05GX01BVENIX1BLVFRZUEU9bQorQ09ORklHX0lQX05GX01BVENIX01BUks9bQorQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQorQ09ORklHX0lQX05GX01BVENIX0VDTj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9MRU5HVEg9bQorQ09ORklHX0lQX05GX01BVENIX1RUTD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVENQTVNTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9IRUxQRVI9bQorQ09ORklHX0lQX05GX01BVENIX1NUQVRFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9DT05OVFJBQ0s9bQorQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE09bQorIyBDT05GSUdfSVBfTkZfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KK0NPTkZJR19JUF9ORl9GSUxURVI9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19JUF9ORl9OQVQ9bQorQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQorQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPW0KK0NPTkZJR19JUF9ORl9OQVRfU05NUF9CQVNJQz1tCitDT05GSUdfSVBfTkZfTkFUX0lSQz1tCitDT05GSUdfSVBfTkZfTkFUX0ZUUD1tCitDT05GSUdfSVBfTkZfTkFUX1RGVFA9bQorQ09ORklHX0lQX05GX05BVF9BTUFOREE9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0RTQ1A9bQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ0xBU1NJRlk9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DT05OTUFSSz1tCisjIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9SQVc9bQorQ09ORklHX0lQX05GX1RBUkdFVF9OT1RSQUNLPW0KK0NPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQorQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCitDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCitDT05GSUdfSVBfTkZfQ09NUEFUX0lQQ0hBSU5TPW0KK0NPTkZJR19JUF9ORl9DT01QQVRfSVBGV0FETT1tCisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUDZfTkZfUVVFVUU9bQorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVA2X05GX01BVENIX0xJTUlUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUFDPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCitDT05GSUdfSVA2X05GX01BVENIX0hMPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NQVJLPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCitDT05GSUdfSVA2X05GX01BVENIX0FIRVNQPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQorQ09ORklHX0lQNl9ORl9GSUxURVI9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUDZfTkZfTUFOR0xFPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX01BUks9bQorQ09ORklHX0lQNl9ORl9SQVc9bQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj1tCisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCitDT05GSUdfSVBfU0NUUD1tCisjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorQ09ORklHX0xMQz1tCisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKK0NPTkZJR19JUFg9bQorIyBDT05GSUdfSVBYX0lOVEVSTiBpcyBub3Qgc2V0CitDT05GSUdfQVRBTEs9bQorIyBDT05GSUdfREVWX0FQUExFVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19ST1VURT15CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRQT0xMPXkKKyMgQ09ORklHX05FVFBPTExfUlggaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPW0KKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0VRVUFMSVpFUj1tCisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfRVRIRVJUQVAgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPW0KK0NPTkZJR19NVk1FMTQ3X05FVD15CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KKyMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAorQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUE9FPW0KK0NPTkZJR19TTElQPW0KK0NPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQorQ09ORklHX1NMSVBfU01BUlQ9eQorQ09ORklHX1NMSVBfTU9ERV9TTElQNj15CitDT05GSUdfU0hBUEVSPW0KK0NPTkZJR19ORVRDT05TT0xFPW0KKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgVGVsZXBob255IFN1cHBvcnQKKyMKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IEkvTyBkcml2ZXJzCisjCisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorQ09ORklHX1NFUklPPW0KK0NPTkZJR19TRVJJT19TRVJQT1JUPW0KKyMgQ09ORklHX1NFUklPX0NUODJDNzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPW0KK0NPTkZJR19NT1VTRV9TRVJJQUw9bQorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5fUlRDPW0KK0NPTkZJR19HRU5fUlRDX1g9eQorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfTVZNRTE0N19TQ0M9eQorQ09ORklHX1NFUklBTF9DT05TT0xFPXkKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUkVJU0VSRlNfRlM9bQorIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRlNfRlM9bQorIyBDT05GSUdfSkZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfWEZTX0ZTPW0KKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQT15CisjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FGTVRfVjIgaXMgbm90IHNldAorQ09ORklHX1FVT1RBQ1RMPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19BVVRPRlNfRlM9bQorQ09ORklHX0FVVE9GUzRfRlM9bQorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPXkKK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfWklTT0ZTX0ZTPXkKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19ERVZGU19GUz15CisjIENPTkZJR19ERVZGU19NT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorQ09ORklHX0FGRlNfRlM9bQorQ09ORklHX0hGU19GUz1tCitDT05GSUdfSEZTUExVU19GUz1tCisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz1tCisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19IUEZTX0ZTPW0KKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVl9GUz1tCitDT05GSUdfVUZTX0ZTPW0KKyMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMz15CitDT05GSUdfTkZTRF9WND15CitDT05GSUdfTkZTRF9UQ1A9eQorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKK0NPTkZJR19TTUJfRlM9bQorQ09ORklHX1NNQl9OTFNfREVGQVVMVD15CitDT05GSUdfU01CX05MU19SRU1PVEU9ImNwNDM3IgorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CitDT05GSUdfTkNQX0ZTPW0KKyMgQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdOSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX0lPQ1RMX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfU1RST05HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX05GU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19PUzJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfU01BTExET1MgaXMgbm90IHNldAorQ09ORklHX05DUEZTX05MUz15CisjIENPTkZJR19OQ1BGU19FWFRSQVMgaXMgbm90IHNldAorQ09ORklHX0NPREFfRlM9bQorIyBDT05GSUdfQ09EQV9GU19PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PW0KKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fREVGTEFURT1tCitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMzI9eQorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9bQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTMxYTY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWcKQEAgLTAsMCArMSw4NDIgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMC1tNjhrCisjIFN1biBEZWMgMjYgMTE6MjM6NTMgMjAwNAorIworQ09ORklHX002OEs9eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iLW12bWUxNngiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQVVESVQ9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorCisjCisjIFBsYXRmb3JtIGRlcGVuZGVudCBzZXR1cAorIworIyBDT05GSUdfU1VOMyBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUMgaXMgbm90IHNldAorIyBDT05GSUdfQVBPTExPIGlzIG5vdCBzZXQKK0NPTkZJR19WTUU9eQorIyBDT05GSUdfTVZNRTE0NyBpcyBub3Qgc2V0CitDT05GSUdfTVZNRTE2eD15CisjIENPTkZJR19CVk1FNjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU4zWCBpcyBub3Qgc2V0CisjIENPTkZJR19RNDAgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciB0eXBlCisjCisjIENPTkZJR19NNjgwMjAgaXMgbm90IHNldAorIyBDT05GSUdfTTY4MDMwIGlzIG5vdCBzZXQKK0NPTkZJR19NNjgwNDA9eQorQ09ORklHX002ODA2MD15CitDT05GSUdfTU1VX01PVE9ST0xBPXkKKyMgQ09ORklHX002OEtGUFVfRU1VIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEVkFOQ0VEIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX0FPVVQ9bQorQ09ORklHX0JJTkZNVF9NSVNDPW0KK0NPTkZJR19QUk9DX0hBUkRXQVJFPXkKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9OQkQ9bQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0RST01fUEtUQ0RWRD1tCitDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKKyMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9bQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKK0NPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CitDT05GSUdfQ0hSX0RFVl9TRz1tCisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKKyMKK0NPTkZJR19NRD15CitDT05GSUdfQkxLX0RFVl9NRD1tCitDT05GSUdfTURfTElORUFSPW0KK0NPTkZJR19NRF9SQUlEMD1tCitDT05GSUdfTURfUkFJRDE9bQorIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENT1tCitDT05GSUdfTURfUkFJRDY9bQorQ09ORklHX01EX01VTFRJUEFUSD1tCisjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfRE09bQorQ09ORklHX0RNX0NSWVBUPW0KK0NPTkZJR19ETV9TTkFQU0hPVD1tCitDT05GSUdfRE1fTUlSUk9SPW0KK0NPTkZJR19ETV9aRVJPPW0KKworIworIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIE5ldHdvcmtpbmcgc3VwcG9ydAorIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRMSU5LX0RFVj15CitDT05GSUdfVU5JWD15CitDT05GSUdfTkVUX0tFWT15CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKK0NPTkZJR19ORVRfSVBJUD1tCitDT05GSUdfTkVUX0lQR1JFPW0KKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19JTkVUX0FIPW0KK0NPTkZJR19JTkVUX0VTUD1tCitDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfVFVOTkVMPW0KK0NPTkZJR19JUF9UQ1BESUFHPW0KK0NPTkZJR19JUF9UQ1BESUFHX0lQVjY9eQorCisjCisjIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj1tCitDT05GSUdfSVBWNl9QUklWQUNZPXkKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSVBWNl9UVU5ORUw9bQorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCisjIENPTkZJR19JUF9ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSz15CisjIENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9GVFA9bQorQ09ORklHX0lQX05GX0lSQz1tCitDT05GSUdfSVBfTkZfVEZUUD1tCitDT05GSUdfSVBfTkZfQU1BTkRBPW0KK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX0xJTUlUPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NQUM9bQorQ09ORklHX0lQX05GX01BVENIX1BLVFRZUEU9bQorQ09ORklHX0lQX05GX01BVENIX01BUks9bQorQ09ORklHX0lQX05GX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVE9TPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9SRUNFTlQ9bQorQ09ORklHX0lQX05GX01BVENIX0VDTj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRFNDUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUhfRVNQPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9MRU5HVEg9bQorQ09ORklHX0lQX05GX01BVENIX1RUTD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVENQTVNTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9IRUxQRVI9bQorQ09ORklHX0lQX05GX01BVENIX1NUQVRFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9DT05OVFJBQ0s9bQorQ09ORklHX0lQX05GX01BVENIX09XTkVSPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE09bQorIyBDT05GSUdfSVBfTkZfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KK0NPTkZJR19JUF9ORl9GSUxURVI9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19JUF9ORl9OQVQ9bQorQ09ORklHX0lQX05GX05BVF9ORUVERUQ9eQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQorQ09ORklHX0lQX05GX1RBUkdFVF9TQU1FPW0KK0NPTkZJR19JUF9ORl9OQVRfU05NUF9CQVNJQz1tCitDT05GSUdfSVBfTkZfTkFUX0lSQz1tCitDT05GSUdfSVBfTkZfTkFUX0ZUUD1tCitDT05GSUdfSVBfTkZfTkFUX1RGVFA9bQorQ09ORklHX0lQX05GX05BVF9BTUFOREE9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0RTQ1A9bQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ0xBU1NJRlk9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DT05OTUFSSz1tCisjIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9SQVc9bQorQ09ORklHX0lQX05GX1RBUkdFVF9OT1RSQUNLPW0KK0NPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQorQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCitDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCitDT05GSUdfSVBfTkZfQ09NUEFUX0lQQ0hBSU5TPW0KK0NPTkZJR19JUF9ORl9DT01QQVRfSVBGV0FETT1tCisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUDZfTkZfUVVFVUU9bQorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVA2X05GX01BVENIX0xJTUlUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUFDPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCitDT05GSUdfSVA2X05GX01BVENIX0hMPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1dORVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NQVJLPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCitDT05GSUdfSVA2X05GX01BVENIX0FIRVNQPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQorQ09ORklHX0lQNl9ORl9GSUxURVI9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUDZfTkZfTUFOR0xFPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX01BUks9bQorQ09ORklHX0lQNl9ORl9SQVc9bQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj1tCisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCitDT05GSUdfSVBfU0NUUD1tCisjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorQ09ORklHX0xMQz1tCisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKK0NPTkZJR19JUFg9bQorIyBDT05GSUdfSVBYX0lOVEVSTiBpcyBub3Qgc2V0CitDT05GSUdfQVRBTEs9bQorIyBDT05GSUdfREVWX0FQUExFVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19ST1VURT15CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRQT0xMPXkKKyMgQ09ORklHX05FVFBPTExfUlggaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPW0KKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0VRVUFMSVpFUj1tCisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfRVRIRVJUQVAgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPW0KK0NPTkZJR19NVk1FMTZ4X05FVD15CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KKyMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAorQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUE9FPW0KK0NPTkZJR19TTElQPW0KK0NPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQorQ09ORklHX1NMSVBfU01BUlQ9eQorQ09ORklHX1NMSVBfTU9ERV9TTElQNj15CitDT05GSUdfU0hBUEVSPW0KK0NPTkZJR19ORVRDT05TT0xFPW0KKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgVGVsZXBob255IFN1cHBvcnQKKyMKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IEkvTyBkcml2ZXJzCisjCisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorQ09ORklHX1NFUklPPW0KK0NPTkZJR19TRVJJT19TRVJQT1JUPW0KKyMgQ09ORklHX1NFUklPX0NUODJDNzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPW0KK0NPTkZJR19NT1VTRV9TRVJJQUw9bQorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5fUlRDPW0KK0NPTkZJR19HRU5fUlRDX1g9eQorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIE1pc2MgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKworIworIyBVU0Igc3VwcG9ydAorIworIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfTVZNRTE2Ml9TQ0M9eQorQ09ORklHX1NFUklBTF9DT05TT0xFPXkKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUkVJU0VSRlNfRlM9bQorIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRlNfRlM9bQorIyBDT05GSUdfSkZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfWEZTX0ZTPW0KKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQT15CisjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FGTVRfVjIgaXMgbm90IHNldAorQ09ORklHX1FVT1RBQ1RMPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19BVVRPRlNfRlM9bQorQ09ORklHX0FVVE9GUzRfRlM9bQorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPXkKK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfWklTT0ZTX0ZTPXkKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19ERVZGU19GUz15CisjIENPTkZJR19ERVZGU19NT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorQ09ORklHX0FGRlNfRlM9bQorQ09ORklHX0hGU19GUz1tCitDT05GSUdfSEZTUExVU19GUz1tCisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz1tCisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19IUEZTX0ZTPW0KKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVl9GUz1tCitDT05GSUdfVUZTX0ZTPW0KKyMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMz15CitDT05GSUdfTkZTRF9WND15CitDT05GSUdfTkZTRF9UQ1A9eQorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPW0KK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKK0NPTkZJR19TTUJfRlM9bQorQ09ORklHX1NNQl9OTFNfREVGQVVMVD15CitDT05GSUdfU01CX05MU19SRU1PVEU9ImNwNDM3IgorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CitDT05GSUdfTkNQX0ZTPW0KKyMgQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdOSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX0lPQ1RMX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfU1RST05HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX05GU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19PUzJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfU01BTExET1MgaXMgbm90IHNldAorQ09ORklHX05DUEZTX05MUz15CisjIENPTkZJR19OQ1BGU19FWFRSQVMgaXMgbm90IHNldAorQ09ORklHX0NPREFfRlM9bQorIyBDT05GSUdfQ09EQV9GU19PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9eQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PW0KKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fREVGTEFURT1tCitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMzI9eQorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9bQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEzMDIwYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWcKQEAgLTAsMCArMSw5MTUgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMC1tNjhrCisjIFN1biBEZWMgMjYgMTE6MjM6NTcgMjAwNAorIworQ09ORklHX002OEs9eQorQ09ORklHX01NVT15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iLXE0MCIKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BVURJVD15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNgorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgUGxhdGZvcm0gZGVwZW5kZW50IHNldHVwCisjCisjIENPTkZJR19TVU4zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUE9MTE8gaXMgbm90IHNldAorIyBDT05GSUdfVk1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTjNYIGlzIG5vdCBzZXQKK0NPTkZJR19RNDA9eQorCisjCisjIFByb2Nlc3NvciB0eXBlCisjCisjIENPTkZJR19NNjgwMjAgaXMgbm90IHNldAorIyBDT05GSUdfTTY4MDMwIGlzIG5vdCBzZXQKK0NPTkZJR19NNjgwNDA9eQorQ09ORklHX002ODA2MD15CitDT05GSUdfTU1VX01PVE9ST0xBPXkKK0NPTkZJR19NNjhLRlBVX0VNVT15CitDT05GSUdfTTY4S0ZQVV9FTVVfRVhUUkFQUkVDPXkKKyMgQ09ORklHX002OEtGUFVfRU1VX09OTFkgaXMgbm90IHNldAorIyBDT05GSUdfQURWQU5DRUQgaXMgbm90IHNldAorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfQU9VVD1tCitDT05GSUdfQklORk1UX01JU0M9bQorIyBDT05GSUdfSEVBUlRCRUFUIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0hBUkRXQVJFPXkKK0NPTkZJR19JU0E9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BOUCBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1hEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9OQkQ9bQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0RST01fUEtUQ0RWRD1tCitDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKKyMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworQ09ORklHX0lERT15CitDT05GSUdfQkxLX0RFVl9JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVESVNLPXkKKyMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVUQVBFPW0KK0NPTkZJR19CTEtfREVWX0lERUZMT1BQWT1tCisjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz15CisjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1E0MElERT15CisjIENPTkZJR19JREVfQ0hJUFNFVFMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAorIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPW0KKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TUj15CitDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQorQ09ORklHX0NIUl9ERVZfU0c9bQorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycworIworIyBDT05GSUdfU0NTSV83MDAwRkFTU1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSEExNTJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUhBMTU0MiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU4yMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFRDMzI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBX1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OQ1I1M0M0MDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUEFTMTYgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QU0kyNDBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDX0ZBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzQxNiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1QxMjggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9VMTRfMzRGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorCisjCisjIE9sZCBDRC1ST00gZHJpdmVycyAobm90IFNDU0ksIG5vdCBJREUpCisjCisjIENPTkZJR19DRF9OT19JREVTQ1NJIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPW0KK0NPTkZJR19NRF9MSU5FQVI9bQorQ09ORklHX01EX1JBSUQwPW0KK0NPTkZJR19NRF9SQUlEMT1tCisjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ1PW0KK0NPTkZJR19NRF9SQUlENj1tCitDT05GSUdfTURfTVVMVElQQVRIPW0KKyMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9ETT1tCitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX1NOQVBTSE9UPW0KK0NPTkZJR19ETV9NSVJST1I9bQorQ09ORklHX0RNX1pFUk89bQorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29ya2luZyBzdXBwb3J0CisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX05FVExJTktfREVWPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorQ09ORklHX05FVF9JUElQPW0KK0NPTkZJR19ORVRfSVBHUkU9bQorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9bQorQ09ORklHX0lORVRfRVNQPW0KK0NPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lQX1RDUERJQUc9bQorQ09ORklHX0lQX1RDUERJQUdfSVBWNj15CisKKyMKKyMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PW0KK0NPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lORVQ2X0FIPW0KK0NPTkZJR19JTkVUNl9FU1A9bQorQ09ORklHX0lORVQ2X0lQQ09NUD1tCitDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JUFY2X1RVTk5FTD1tCitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KKyMgQ09ORklHX0lQX05GX0NUX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLPXkKKyMgQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0ZUUD1tCitDT05GSUdfSVBfTkZfSVJDPW0KK0NPTkZJR19JUF9ORl9URlRQPW0KK0NPTkZJR19JUF9ORl9BTUFOREE9bQorQ09ORklHX0lQX05GX1FVRVVFPW0KK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTElNSVQ9bQorQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQorQ09ORklHX0lQX05GX01BVENIX01BQz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUEtUVFlQRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTUFSSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTVVMVElQT1JUPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQorQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9EU0NQPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSF9FU1A9bQorQ09ORklHX0lQX05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX0lQX05GX01BVENIX0hFTFBFUj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfU1RBVEU9bQorQ09ORklHX0lQX05GX01BVENIX0NPTk5UUkFDSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQorQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9SRUFMTT1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAorQ09ORklHX0lQX05GX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9UQ1BNU1M9bQorQ09ORklHX0lQX05GX05BVD1tCitDT05GSUdfSVBfTkZfTkFUX05FRURFRD15CitDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1NBTUU9bQorQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDPW0KK0NPTkZJR19JUF9ORl9OQVRfSVJDPW0KK0NPTkZJR19JUF9ORl9OQVRfRlRQPW0KK0NPTkZJR19JUF9ORl9OQVRfVEZUUD1tCitDT05GSUdfSVBfTkZfTkFUX0FNQU5EQT1tCitDT05GSUdfSVBfTkZfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVE9TPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRFNDUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX01BUks9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NPTk5NQVJLPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1JBVz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0s9bQorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9DT01QQVRfSVBDSEFJTlM9bQorQ09ORklHX0lQX05GX0NPTVBBVF9JUEZXQURNPW0KKworIworIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQNl9ORl9RVUVVRT1tCitDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTElNSVQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NQUM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9PV05FUj1tCitDT05GSUdfSVA2X05GX01BVENIX01BUks9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfQUhFU1A9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9MRU5HVEg9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCitDT05GSUdfSVA2X05GX0ZJTFRFUj1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQNl9ORl9NQU5HTEU9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFSSz1tCitDT05GSUdfSVA2X05GX1JBVz1tCitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9bQorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CitDT05GSUdfSVBYPW0KKyMgQ09ORklHX0lQWF9JTlRFUk4gaXMgbm90IHNldAorQ09ORklHX0FUQUxLPW0KKyMgQ09ORklHX0RFVl9BUFBMRVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CitDT05GSUdfTkVUUE9MTD15CisjIENPTkZJR19ORVRQT0xMX1JYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19FUVVBTElaRVI9bQorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSEVSVEFQIGlzIG5vdCBzZXQKKworIworIyBBUkNuZXQgZGV2aWNlcworIworIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST1tCisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTEFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9SQUNBTCBpcyBub3Qgc2V0CisjIENPTkZJR19BVDE3MDAgaXMgbm90IHNldAorIyBDT05GSUdfREVQQ0EgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lTQSBpcyBub3Qgc2V0CitDT05GSUdfTkUyMDAwPW0KKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPQ0tFVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KKyMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAorQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUE9FPW0KK0NPTkZJR19TTElQPW0KK0NPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQorQ09ORklHX1NMSVBfU01BUlQ9eQorQ09ORklHX1NMSVBfTU9ERV9TTElQNj15CitDT05GSUdfU0hBUEVSPW0KK0NPTkZJR19ORVRDT05TT0xFPW0KKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgVGVsZXBob255IFN1cHBvcnQKKyMKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IEkvTyBkcml2ZXJzCisjCisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfU09VTkRfR0FNRVBPUlQ9eQorQ09ORklHX1NFUklPPW0KK0NPTkZJR19TRVJJT19TRVJQT1JUPW0KKyMgQ09ORklHX1NFUklPX0NUODJDNzEwIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19RNDBLQkQ9bQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9bQorQ09ORklHX01PVVNFX1NFUklBTD1tCisjIENPTkZJR19NT1VTRV9JTlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfTE9HSUJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BDMTEwUEFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfR0VOX1JUQz1tCitDT05GSUdfR0VOX1JUQ19YPXkKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCitDT05GSUdfRkI9eQorQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorQ09ORklHX0ZCX1E0MD15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CisKKyMKKyMgU291bmQKKyMKK0NPTkZJR19TT1VORD15CitDT05GSUdfRE1BU09VTkRfUTQwPXkKK0NPTkZJR19ETUFTT1VORD15CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19SRUlTRVJGU19GUz1tCisjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pGU19GUz1tCisjIENPTkZJR19KRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19YRlNfRlM9bQorIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTUlOSVhfRlM9eQorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX1FVT1RBPXkKKyMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAorIyBDT05GSUdfUUZNVF9WMiBpcyBub3Qgc2V0CitDT05GSUdfUVVPVEFDVEw9eQorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0FVVE9GU19GUz1tCitDT05GSUdfQVVUT0ZTNF9GUz1tCisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9eQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19aSVNPRlNfRlM9eQorQ09ORklHX1VERl9GUz1tCitDT05GSUdfVURGX05MUz15CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BRkZTX0ZTPW0KK0NPTkZJR19IRlNfRlM9bQorQ09ORklHX0hGU1BMVVNfRlM9bQorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9bQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSFBGU19GUz1tCisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZfRlM9bQorQ09ORklHX1VGU19GUz1tCitDT05GSUdfVUZTX0ZTX1dSSVRFPXkKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKK0NPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEPW0KK0NPTkZJR19ORlNEX1YzPXkKK0NPTkZJR19ORlNEX1Y0PXkKK0NPTkZJR19ORlNEX1RDUD15CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9bQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz1tCitDT05GSUdfU01CX05MU19ERUZBVUxUPXkKK0NPTkZJR19TTUJfTkxTX1JFTU9URT0iY3A0MzciCisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKK0NPTkZJR19OQ1BfRlM9bQorIyBDT05GSUdfTkNQRlNfUEFDS0VUX1NJR05JTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfSU9DVExfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19TVFJPTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfTkZTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX09TMl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19TTUFMTERPUyBpcyBub3Qgc2V0CitDT05GSUdfTkNQRlNfTkxTPXkKKyMgQ09ORklHX05DUEZTX0VYVFJBUyBpcyBub3Qgc2V0CitDT05GSUdfQ09EQV9GUz1tCisjIENPTkZJR19DT0RBX0ZTX09MRF9BUEkgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT15CitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9bQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQ1JDX0NDSVRUPW0KK0NPTkZJR19DUkMzMj15CitDT05GSUdfTElCQ1JDMzJDPW0KK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT1tCmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYzRkYjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZwpAQCAtMCwwICsxLDgzMSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEwLW02OGsKKyMgU3VuIERlYyAyNiAxMToyNDowMSAyMDA0CisjCitDT05GSUdfTTY4Sz15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSItc3VuMyIKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BVURJVD15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNgorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NITUVNPXkKK0NPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAorQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCitDT05GSUdfQ0NfQUxJR05fTE9PUFM9MAorQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgUGxhdGZvcm0gZGVwZW5kZW50IHNldHVwCisjCitDT05GSUdfU1VOMz15CisKKyMKKyMgUHJvY2Vzc29yIHR5cGUKKyMKK0NPTkZJR19NNjgwMjA9eQorQ09ORklHX01NVV9TVU4zPXkKK0NPTkZJR19NNjhLRlBVX0VNVT15CitDT05GSUdfTTY4S0ZQVV9FTVVfRVhUUkFQUkVDPXkKKyMgQ09ORklHX002OEtGUFVfRU1VX09OTFkgaXMgbm90IHNldAorIyBDT05GSUdfQURWQU5DRUQgaXMgbm90IHNldAorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfQU9VVD1tCitDT05GSUdfQklORk1UX01JU0M9bQorQ09ORklHX1BST0NfSEFSRFdBUkU9eQorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCisjIENPTkZJR19NVEQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DRFJPTV9QS1RDRFZEPW0KK0NPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD1tCisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9eQorQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKK0NPTkZJR19DSFJfREVWX1NHPW0KKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorCisjCisjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TVU4zX1NDU0k9eQorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9bQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfUkFJRDA9bQorQ09ORklHX01EX1JBSUQxPW0KKyMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDU9bQorQ09ORklHX01EX1JBSUQ2PW0KK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0RNPW0KK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fWkVSTz1tCisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUTElOS19ERVY9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX05FVF9LRVk9eQorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CitDT05GSUdfTkVUX0lQSVA9bQorQ09ORklHX05FVF9JUEdSRT1tCisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1RVTk5FTD1tCitDT05GSUdfSVBfVENQRElBRz1tCitDT05GSUdfSVBfVENQRElBR19JUFY2PXkKKworIworIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorQ09ORklHX0lQVjY9bQorQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSU5FVDZfQUg9bQorQ09ORklHX0lORVQ2X0VTUD1tCitDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lQVjZfVFVOTkVMPW0KK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQorIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQorIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfRlRQPW0KK0NPTkZJR19JUF9ORl9JUkM9bQorQ09ORklHX0lQX05GX1RGVFA9bQorQ09ORklHX0lQX05GX0FNQU5EQT1tCitDT05GSUdfSVBfTkZfUVVFVUU9bQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX0lQX05GX01BVENIX1RPUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9FQ049bQorQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQorQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX01BVENIX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9TVEFURT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQorQ09ORklHX0lQX05GX01BVENIX1JFQUxNPW0KKyMgQ09ORklHX0lQX05GX01BVENIX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTk1BUks9bQorQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTkFUPW0KK0NPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCitDT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUM9bQorQ09ORklHX0lQX05GX05BVF9JUkM9bQorQ09ORklHX0lQX05GX05BVF9GVFA9bQorQ09ORklHX0lQX05GX05BVF9URlRQPW0KK0NPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQorQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQorQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ09OTk1BUks9bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUkFXPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTk9UUkFDSz1tCitDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9BUlBGSUxURVI9bQorQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQorQ09ORklHX0lQX05GX0NPTVBBVF9JUENIQUlOUz1tCitDT05GSUdfSVBfTkZfQ09NUEFUX0lQRldBRE09bQorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVA2X05GX1FVRVVFPW0KK0NPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVA2X05GX01BVENIX01BQz1tCitDT05GSUdfSVA2X05GX01BVENIX1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCitDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUFSSz1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUD1tCitDT05GSUdfSVA2X05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX01BTkdMRT1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19JUDZfTkZfUkFXPW0KK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCitDT05GSUdfSVBfU0NUUD1tCisjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorQ09ORklHX0xMQz1tCisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKK0NPTkZJR19JUFg9bQorIyBDT05GSUdfSVBYX0lOVEVSTiBpcyBub3Qgc2V0CitDT05GSUdfQVRBTEs9bQorIyBDT05GSUdfREVWX0FQUExFVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19ST1VURT15CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRQT0xMPXkKKyMgQ09ORklHX05FVFBPTExfUlggaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPW0KKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0VRVUFMSVpFUj1tCisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfRVRIRVJUQVAgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPW0KK0NPTkZJR19TVU4zTEFOQ0U9eQorQ09ORklHX1NVTjNfODI1ODY9eQorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBPRT1tCitDT05GSUdfU0xJUD1tCitDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKK0NPTkZJR19TTElQX1NNQVJUPXkKK0NPTkZJR19TTElQX01PREVfU0xJUDY9eQorQ09ORklHX1NIQVBFUj1tCitDT05GSUdfTkVUQ09OU09MRT1tCisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIFRlbGVwaG9ueSBTdXBwb3J0CisjCisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBJL08gZHJpdmVycworIworIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fU0VSUE9SVD1tCisjIENPTkZJR19TRVJJT19DVDgyQzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX1NVTktCRD15CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9bQorQ09ORklHX01PVVNFX1NFUklBTD1tCisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0dFTl9SVEM9eQorQ09ORklHX0dFTl9SVENfWD15CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworQ09ORklHX0ZCPXkKK0NPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorCisjCisjIExvZ28gY29uZmlndXJhdGlvbgorIworQ09ORklHX0xPR089eQorQ09ORklHX0xPR09fTElOVVhfTU9OTz15CitDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCisjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUkVJU0VSRlNfRlM9bQorIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRlNfRlM9bQorIyBDT05GSUdfSkZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfWEZTX0ZTPW0KKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQT15CisjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FGTVRfVjIgaXMgbm90IHNldAorQ09ORklHX1FVT1RBQ1RMPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19BVVRPRlNfRlM9bQorQ09ORklHX0FVVE9GUzRfRlM9bQorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPXkKK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfWklTT0ZTX0ZTPXkKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19ERVZGU19GUz15CitDT05GSUdfREVWRlNfTU9VTlQ9eQorIyBDT05GSUdfREVWRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BRkZTX0ZTPW0KK0NPTkZJR19IRlNfRlM9bQorQ09ORklHX0hGU1BMVVNfRlM9bQorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9bQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSFBGU19GUz1tCisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZfRlM9bQorQ09ORklHX1VGU19GUz1tCitDT05GSUdfVUZTX0ZTX1dSSVRFPXkKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKK0NPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEPW0KK0NPTkZJR19ORlNEX1YzPXkKK0NPTkZJR19ORlNEX1Y0PXkKK0NPTkZJR19ORlNEX1RDUD15CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9bQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz1tCitDT05GSUdfU01CX05MU19ERUZBVUxUPXkKK0NPTkZJR19TTUJfTkxTX1JFTU9URT0iY3A0MzciCisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKK0NPTkZJR19OQ1BfRlM9bQorIyBDT05GSUdfTkNQRlNfUEFDS0VUX1NJR05JTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfSU9DVExfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19TVFJPTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfTkZTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX09TMl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19TTUFMTERPUyBpcyBub3Qgc2V0CitDT05GSUdfTkNQRlNfTkxTPXkKKyMgQ09ORklHX05DUEZTX0VYVFJBUyBpcyBub3Qgc2V0CitDT05GSUdfQ09EQV9GUz1tCisjIENPTkZJR19DT0RBX0ZTX09MRF9BUEkgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19TVU5fUEFSVElUSU9OPXkKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT15CitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9bQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQ1JDX0NDSVRUPW0KK0NPTkZJR19DUkMzMj15CitDT05GSUdfTElCQ1JDMzJDPW0KK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT1tCmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUwMDhjOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZwpAQCAtMCwwICsxLDg0MSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEwLW02OGsKKyMgU3VuIERlYyAyNiAxMToyNDowNSAyMDA0CisjCitDT05GSUdfTTY4Sz15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSItc3VuM3giCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQVVESVQ9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorCisjCisjIFBsYXRmb3JtIGRlcGVuZGVudCBzZXR1cAorIworIyBDT05GSUdfU1VOMyBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUMgaXMgbm90IHNldAorIyBDT05GSUdfQVBPTExPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNRSBpcyBub3Qgc2V0CisjIENPTkZJR19IUDMwMCBpcyBub3Qgc2V0CitDT05GSUdfU1VOM1g9eQorIyBDT05GSUdfUTQwIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgdHlwZQorIworIyBDT05GSUdfTTY4MDIwIGlzIG5vdCBzZXQKK0NPTkZJR19NNjgwMzA9eQorIyBDT05GSUdfTTY4MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX002ODA2MCBpcyBub3Qgc2V0CitDT05GSUdfTU1VX01PVE9ST0xBPXkKK0NPTkZJR19NNjhLRlBVX0VNVT15CitDT05GSUdfTTY4S0ZQVV9FTVVfRVhUUkFQUkVDPXkKKyMgQ09ORklHX002OEtGUFVfRU1VX09OTFkgaXMgbm90IHNldAorIyBDT05GSUdfQURWQU5DRUQgaXMgbm90IHNldAorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19CSU5GTVRfQU9VVD1tCitDT05GSUdfQklORk1UX01JU0M9bQorQ09ORklHX1BST0NfSEFSRFdBUkU9eQorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCisjIENPTkZJR19NVEQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DRFJPTV9QS1RDRFZEPW0KK0NPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD1tCisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9eQorQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKK0NPTkZJR19DSFJfREVWX1NHPW0KKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorCisjCisjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TVU4zWF9FU1A9eQorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9bQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfUkFJRDA9bQorQ09ORklHX01EX1JBSUQxPW0KKyMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDU9bQorQ09ORklHX01EX1JBSUQ2PW0KK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0RNPW0KK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCitDT05GSUdfRE1fWkVSTz1tCisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUTElOS19ERVY9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX05FVF9LRVk9eQorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CitDT05GSUdfTkVUX0lQSVA9bQorQ09ORklHX05FVF9JUEdSRT1tCisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1RVTk5FTD1tCitDT05GSUdfSVBfVENQRElBRz1tCitDT05GSUdfSVBfVENQRElBR19JUFY2PXkKKworIworIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorQ09ORklHX0lQVjY9bQorQ09ORklHX0lQVjZfUFJJVkFDWT15CitDT05GSUdfSU5FVDZfQUg9bQorQ09ORklHX0lORVQ2X0VTUD1tCitDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lQVjZfVFVOTkVMPW0KK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0s9bQorIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQorIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfRlRQPW0KK0NPTkZJR19JUF9ORl9JUkM9bQorQ09ORklHX0lQX05GX1RGVFA9bQorQ09ORklHX0lQX05GX0FNQU5EQT1tCitDT05GSUdfSVBfTkZfUVVFVUU9bQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX0lQX05GX01BVENIX1RPUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9FQ049bQorQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQorQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX01BVENIX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9TVEFURT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQorQ09ORklHX0lQX05GX01BVENIX1JFQUxNPW0KKyMgQ09ORklHX0lQX05GX01BVENIX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTk1BUks9bQorQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTkFUPW0KK0NPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCitDT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUM9bQorQ09ORklHX0lQX05GX05BVF9JUkM9bQorQ09ORklHX0lQX05GX05BVF9GVFA9bQorQ09ORklHX0lQX05GX05BVF9URlRQPW0KK0NPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQorQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQorQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ09OTk1BUks9bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUkFXPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTk9UUkFDSz1tCitDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9BUlBGSUxURVI9bQorQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQorQ09ORklHX0lQX05GX0NPTVBBVF9JUENIQUlOUz1tCitDT05GSUdfSVBfTkZfQ09NUEFUX0lQRldBRE09bQorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVA2X05GX1FVRVVFPW0KK0NPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVA2X05GX01BVENIX01BQz1tCitDT05GSUdfSVA2X05GX01BVENIX1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCitDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUFSSz1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUD1tCitDT05GSUdfSVA2X05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX01BTkdMRT1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19JUDZfTkZfUkFXPW0KK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCitDT05GSUdfSVBfU0NUUD1tCisjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorQ09ORklHX0xMQz1tCisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKK0NPTkZJR19JUFg9bQorIyBDT05GSUdfSVBYX0lOVEVSTiBpcyBub3Qgc2V0CitDT05GSUdfQVRBTEs9bQorIyBDT05GSUdfREVWX0FQUExFVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19ST1VURT15CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRQT0xMPXkKKyMgQ09ORklHX05FVFBPTExfUlggaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPW0KKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0VRVUFMSVpFUj1tCisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfRVRIRVJUQVAgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPW0KK0NPTkZJR19TVU4zTEFOQ0U9eQorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBPRT1tCitDT05GSUdfU0xJUD1tCitDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKK0NPTkZJR19TTElQX1NNQVJUPXkKK0NPTkZJR19TTElQX01PREVfU0xJUDY9eQorQ09ORklHX1NIQVBFUj1tCitDT05GSUdfTkVUQ09OU09MRT1tCisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIFRlbGVwaG9ueSBTdXBwb3J0CisjCisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBJL08gZHJpdmVycworIworIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fU0VSUE9SVD1tCisjIENPTkZJR19TRVJJT19DVDgyQzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX1NVTktCRD15CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9bQorQ09ORklHX01PVVNFX1NFUklBTD1tCisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0dFTl9SVEM9eQorQ09ORklHX0dFTl9SVENfWD15CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworQ09ORklHX0ZCPXkKK0NPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorCisjCisjIExvZ28gY29uZmlndXJhdGlvbgorIworQ09ORklHX0xPR089eQorQ09ORklHX0xPR09fTElOVVhfTU9OTz15CitDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCisjIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUkVJU0VSRlNfRlM9bQorIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRlNfRlM9bQorIyBDT05GSUdfSkZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfWEZTX0ZTPW0KKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQT15CisjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FGTVRfVjIgaXMgbm90IHNldAorQ09ORklHX1FVT1RBQ1RMPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19BVVRPRlNfRlM9bQorQ09ORklHX0FVVE9GUzRfRlM9bQorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPXkKK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfWklTT0ZTX0ZTPXkKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19ERVZGU19GUz15CitDT05GSUdfREVWRlNfTU9VTlQ9eQorIyBDT05GSUdfREVWRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BRkZTX0ZTPW0KK0NPTkZJR19IRlNfRlM9bQorQ09ORklHX0hGU1BMVVNfRlM9bQorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9bQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSFBGU19GUz1tCisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1NZU1ZfRlM9bQorQ09ORklHX1VGU19GUz1tCitDT05GSUdfVUZTX0ZTX1dSSVRFPXkKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKK0NPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEPW0KK0NPTkZJR19ORlNEX1YzPXkKK0NPTkZJR19ORlNEX1Y0PXkKK0NPTkZJR19ORlNEX1RDUD15CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9bQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz1tCitDT05GSUdfU01CX05MU19ERUZBVUxUPXkKK0NPTkZJR19TTUJfTkxTX1JFTU9URT0iY3A0MzciCisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKK0NPTkZJR19OQ1BfRlM9bQorIyBDT05GSUdfTkNQRlNfUEFDS0VUX1NJR05JTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfSU9DVExfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19TVFJPTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkNQRlNfTkZTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUEZTX09TMl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BGU19TTUFMTERPUyBpcyBub3Qgc2V0CitDT05GSUdfTkNQRlNfTkxTPXkKKyMgQ09ORklHX05DUEZTX0VYVFJBUyBpcyBub3Qgc2V0CitDT05GSUdfQ09EQV9GUz1tCisjIENPTkZJR19DT0RBX0ZTX09MRF9BUEkgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19TVU5fUEFSVElUSU9OPXkKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT15CitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9bQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQ1JDX0NDSVRUPW0KK0NPTkZJR19DUkMzMj15CitDT05GSUdfTElCQ1JDMzJDPW0KK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT1tCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZGVmY29uZmlnIGIvYXJjaC9tNjhrL2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGY1N2QzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2RlZmNvbmZpZwpAQCAtMCwwICsxLDYyOSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEwLW02OGsKKyMgU3VuIERlYyAyNiAxMToyMzozNiAyMDA0CisjCitDT05GSUdfTTY4Sz15CitDT05GSUdfTU1VPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gZGVwZW5kZW50IHNldHVwCisjCisjIENPTkZJR19TVU4zIGlzIG5vdCBzZXQKK0NPTkZJR19BTUlHQT15CisjIENPTkZJR19BVEFSSSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUMgaXMgbm90IHNldAorIyBDT05GSUdfQVBPTExPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNRSBpcyBub3Qgc2V0CisjIENPTkZJR19IUDMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU4zWCBpcyBub3Qgc2V0CisjIENPTkZJR19RNDAgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciB0eXBlCisjCitDT05GSUdfTTY4MDIwPXkKK0NPTkZJR19NNjgwMzA9eQorQ09ORklHX002ODA0MD15CisjIENPTkZJR19NNjgwNjAgaXMgbm90IHNldAorQ09ORklHX01NVV9NT1RPUk9MQT15CisjIENPTkZJR19NNjhLRlBVX0VNVSBpcyBub3Qgc2V0CisjIENPTkZJR19BRFZBTkNFRCBpcyBub3Qgc2V0CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0JJTkZNVF9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19aT1JSTz15CisjIENPTkZJR19BTUlHQV9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfSEVBUlRCRUFUIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0hBUkRXQVJFPXkKKyMgQ09ORklHX1pPUlJPX05BTUVTIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCisjIENPTkZJR19NVEQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworQ09ORklHX0FNSUdBX0ZMT1BQWT15CisjIENPTkZJR19BTUlHQV9aMlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0RST01fUEtUQ0RWRD15CitDT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKKyMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9eQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKKyMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycworIworIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0EzMDAwX1NDU0k9eQorQ09ORklHX0EyMDkxX1NDU0k9eQorQ09ORklHX0dWUDExX1NDU0k9eQorIyBDT05GSUdfQ1lCRVJTVE9STV9TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NZQkVSU1RPUk1JSV9TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMWjIwNjBfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTFoxMjMwX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfRkFTVExBTkVfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19PS1RBR09OX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKworIworIyBOZXR3b3JraW5nIHN1cHBvcnQKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lQX1RDUERJQUc9eQorIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKKyMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKKyMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIFRlbGVwaG9ueSBTdXBwb3J0CisjCisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBJL08gZHJpdmVycworIworIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CisjIENPTkZJR19TRVJJT19DVDgyQzcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfQU1JR0EgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0FNSUdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfQTIyMzIgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorCisjCisjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgorIworIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCitDT05GSUdfRkI9eQorQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9BTUlHQT15CitDT05GSUdfRkJfQU1JR0FfT0NTPXkKK0NPTkZJR19GQl9BTUlHQV9FQ1M9eQorQ09ORklHX0ZCX0FNSUdBX0FHQT15CisjIENPTkZJR19GQl9GTTIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMPXkKKyMgQ09ORklHX01VTFRJRkFDRV9JSUlfVFRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dWUElPRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9DT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KQkQgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlOSVhfRlM9eQorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX1JBTUZTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz15CisjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CisjIENPTkZJR19FWFBPUlRGUyBpcyBub3Qgc2V0CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX0FNSUdBX1BBUlRJVElPTj15CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL01ha2VmaWxlIGIvYXJjaC9tNjhrL2Zwc3AwNDAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIxNGQyZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL01ha2VmaWxlCkBAIC0wLDAgKzEsMTYgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIExpbnV4IGFyY2gvbTY4ay9mcHNwMDQwIHNvdXJjZSBkaXJlY3RvcnkKKyMKKworb2JqLXkgICAgOj0gYmluZGVjLm8gYmluc3RyLm8gZGVjYmluLm8gZG9fZnVuYy5vIGdlbl9leGNlcHQubyBnZXRfb3AubyBcCisJICAgIGtlcm5lbF9leC5vIHJlc19mdW5jLm8gcm91bmQubyBzYWNvcy5vIHNhc2luLm8gc2F0YW4ubyBzYXRhbmgubyBcCisJICAgIHNjb3NoLm8gc2V0b3gubyBzZ2V0ZW0ubyBzaW50Lm8gc2xvZzIubyBzbG9nbi5vIFwKKwkgICAgc21vdmVjci5vIHNyZW1fbW9kLm8gc2NhbGUubyBcCisJICAgIHNzaW4ubyBzc2luaC5vIHN0YW4ubyBzdGFuaC5vIHN0b19yZXMubyBzdHdvdG94Lm8gdGJsZG8ubyB1dGlsLm8gXAorCSAgICB4X2JzdW4ubyB4X2ZsaW5lLm8geF9vcGVyci5vIHhfb3ZmbC5vIHhfc25hbi5vIHhfc3RvcmUubyBcCisJICAgIHhfdW5mbC5vIHhfdW5pbXAubyB4X3Vuc3VwcC5vIGJ1Z2ZpeC5vIHNrZWxldG9uLm8KKworRVhUUkFfQUZMQUdTIDo9IC10cmFkaXRpb25hbAorRVhUUkFfTERGTEFHUyA6PSAteAorCiskKE9TX09CSlMpOiBmcHNwLmgKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL1JFQURNRSBiL2FyY2gvbTY4ay9mcHNwMDQwL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTc0OTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAvUkVBRE1FCkBAIC0wLDAgKzEsMzAgQEAKKworTU9UT1JPTEEgTUlDUk9QUk9DRVNTT1IgJiBNRU1PUlkgVEVDSE5PTE9HWSBHUk9VUAorTTY4MDAwIEhpLVBlcmZvcm1hbmNlIE1pY3JvcHJvY2Vzc29yIERpdmlzaW9uCitNNjgwNDAgU29mdHdhcmUgUGFja2FnZQorCitNNjgwNDAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgKGMpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVEhFIFNPRlRXQVJFIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMgYW5kIHdpdGhvdXQgd2FycmFudHkuCitUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorTU9UT1JPTEEgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFIGFuZCBhbnkgd2FycmFudHkgYWdhaW5zdCBpbmZyaW5nZW1lbnQgd2l0aAorcmVnYXJkIHRvIHRoZSBTT0ZUV0FSRSAoSU5DTFVESU5HIEFOWSBNT0RJRklFRCBWRVJTSU9OUyBUSEVSRU9GKQorYW5kIGFueSBhY2NvbXBhbnlpbmcgd3JpdHRlbiBtYXRlcmlhbHMuCisKK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitJTiBOTyBFVkVOVCBTSEFMTCBNT1RPUk9MQSBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEJVU0lORVNTCitQUk9GSVRTLCBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SCitPVEhFUiBQRUNVTklBUlkgTE9TUykgQVJJU0lORyBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCitTT0ZUV0FSRS4gIE1vdG9yb2xhIGFzc3VtZXMgbm8gcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBtYWludGVuYW5jZQorYW5kIHN1cHBvcnQgb2YgdGhlIFNPRlRXQVJFLgorCitZb3UgYXJlIGhlcmVieSBncmFudGVkIGEgY29weXJpZ2h0IGxpY2Vuc2UgdG8gdXNlLCBtb2RpZnksIGFuZAorZGlzdHJpYnV0ZSB0aGUgU09GVFdBUkUgc28gbG9uZyBhcyB0aGlzIGVudGlyZSBub3RpY2UgaXMgcmV0YWluZWQKK3dpdGhvdXQgYWx0ZXJhdGlvbiBpbiBhbnkgbW9kaWZpZWQgYW5kL29yIHJlZGlzdHJpYnV0ZWQgdmVyc2lvbnMsCithbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KK05vIGxpY2Vuc2VzIGFyZSBncmFudGVkIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UKK3VuZGVyIGFueSBwYXRlbnRzIG9yIHRyYWRlbWFya3Mgb2YgTW90b3JvbGEsIEluYy4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL2JpbmRlYy5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAvYmluZGVjLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhNDQ2YTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC9iaW5kZWMuUwpAQCAtMCwwICsxLDkyMCBAQAorfAorfAliaW5kZWMuc2EgMy40IDEvMy85MQorfAorfAliaW5kZWMKK3wKK3wJRGVzY3JpcHRpb246Cit8CQlDb252ZXJ0cyBhbiBpbnB1dCBpbiBleHRlbmRlZCBwcmVjaXNpb24gZm9ybWF0Cit8CQl0byBiY2QgZm9ybWF0LgorfAorfAlJbnB1dDoKK3wJCWEwIHBvaW50cyB0byB0aGUgaW5wdXQgZXh0ZW5kZWQgcHJlY2lzaW9uIHZhbHVlCit8CQl2YWx1ZSBpbiBtZW1vcnk7IGQwIGNvbnRhaW5zIHRoZSBrLWZhY3RvciBzaWduLWV4dGVuZGVkCit8CQl0byAzMi1iaXRzLiAgVGhlIGlucHV0IG1heSBiZSBlaXRoZXIgbm9ybWFsaXplZCwKK3wJCXVubm9ybWFsaXplZCwgb3IgZGVub3JtYWxpemVkLgorfAorfAlPdXRwdXQ6CXJlc3VsdCBpbiB0aGUgRlBfU0NSMSBzcGFjZSBvbiB0aGUgc3RhY2suCit8Cit8CVNhdmVzIGFuZCBNb2RpZmllczogRDItRDcsQTIsRlAyCit8Cit8CUFsZ29yaXRobToKK3wKK3wJQTEuCVNldCBSTSBhbmQgc2l6ZSBleHQ7ICBTZXQgU0lHTUEgPSBzaWduIG9mIGlucHV0LgorfAkJVGhlIGstZmFjdG9yIGlzIHNhdmVkIGZvciB1c2UgaW4gZDcuIENsZWFyIHRoZQorfAkJQklOREVDX0ZMRyBmb3Igc2VwYXJhdGluZyBub3JtYWxpemVkL2Rlbm9ybWFsaXplZAorfAkJaW5wdXQuICBJZiBpbnB1dCBpcyB1bm5vcm1hbGl6ZWQgb3IgZGVub3JtYWxpemVkLAorfAkJbm9ybWFsaXplIGl0LgorfAorfAlBMi4JU2V0IFggPSBhYnMoaW5wdXQpLgorfAorfAlBMy4JQ29tcHV0ZSBJTE9HLgorfAkJSUxPRyBpcyB0aGUgbG9nIGJhc2UgMTAgb2YgdGhlIGlucHV0IHZhbHVlLiAgSXQgaXMKK3wJCWFwcHJveGltYXRlZCBieSBhZGRpbmcgZSArIDAuZiB3aGVuIHRoZSBvcmlnaW5hbAorfAkJdmFsdWUgaXMgdmlld2VkIGFzIDJeXmUgKiAxLmYgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uLgorfAkJVGhpcyB2YWx1ZSBpcyBzdG9yZWQgaW4gZDYuCit8Cit8CUE0LglDbHIgSU5FWCBiaXQuCit8CQlUaGUgb3BlcmF0aW9uIGluIEEzIGFib3ZlIG1heSBoYXZlIHNldCBJTkVYMi4KK3wKK3wJQTUuCVNldCBJQ1RSID0gMDsKK3wJCUlDVFIgaXMgYSBmbGFnIHVzZWQgaW4gQTEzLiAgSXQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZQorfAkJbG9vcCBlbnRyeSBBNi4KK3wKK3wJQTYuCUNhbGN1bGF0ZSBMRU4uCit8CQlMRU4gaXMgdGhlIG51bWJlciBvZiBkaWdpdHMgdG8gYmUgZGlzcGxheWVkLiAgVGhlCit8CQlrLWZhY3RvciBjYW4gZGljdGF0ZSBlaXRoZXIgdGhlIHRvdGFsIG51bWJlciBvZiBkaWdpdHMsCit8CQlpZiBpdCBpcyBhIHBvc2l0aXZlIG51bWJlciwgb3IgdGhlIG51bWJlciBvZiBkaWdpdHMKK3wJCWFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IHdoaWNoIGFyZSB0byBiZSBpbmNsdWRlZCBhcworfAkJc2lnbmlmaWNhbnQuICBTZWUgdGhlIDY4ODgyIG1hbnVhbCBmb3IgZXhhbXBsZXMuCit8CQlJZiBMRU4gaXMgY29tcHV0ZWQgdG8gYmUgZ3JlYXRlciB0aGFuIDE3LCBzZXQgT1BFUlIgaW4KK3wJCVVTRVJfRlBTUi4gIExFTiBpcyBzdG9yZWQgaW4gZDQuCit8Cit8CUE3LglDYWxjdWxhdGUgU0NBTEUuCit8CQlTQ0FMRSBpcyBlcXVhbCB0byAxMF5JU0NBTEUsIHdoZXJlIElTQ0FMRSBpcyB0aGUgbnVtYmVyCit8CQlvZiBkZWNpbWFsIHBsYWNlcyBuZWVkZWQgdG8gaW5zdXJlIExFTiBpbnRlZ2VyIGRpZ2l0cworfAkJaW4gdGhlIG91dHB1dCBiZWZvcmUgY29udmVyc2lvbiB0byBiY2QuIExBTUJEQSBpcyB0aGUKK3wJCXNpZ24gb2YgSVNDQUxFLCB1c2VkIGluIEE5LiBGcDEgY29udGFpbnMKK3wJCTEwXl4oYWJzKElTQ0FMRSkpIHVzaW5nIGEgcm91bmRpbmcgbW9kZSB3aGljaCBpcyBhCit8CQlmdW5jdGlvbiBvZiB0aGUgb3JpZ2luYWwgcm91bmRpbmcgbW9kZSBhbmQgdGhlIHNpZ25zCit8CQlvZiBJU0NBTEUgYW5kIFguICBBIHRhYmxlIGlzIGdpdmVuIGluIHRoZSBjb2RlLgorfAorfAlBOC4JQ2xyIElORVg7IEZvcmNlIFJaLgorfAkJVGhlIG9wZXJhdGlvbiBpbiBBMyBhYm92ZSBtYXkgaGF2ZSBzZXQgSU5FWDIuCit8CQlSWiBtb2RlIGlzIGZvcmNlZCBmb3IgdGhlIHNjYWxpbmcgb3BlcmF0aW9uIHRvIGluc3VyZQorfAkJb25seSBvbmUgcm91bmRpbmcgZXJyb3IuICBUaGUgZ3JzIGJpdHMgYXJlIGNvbGxlY3RlZCBpbgorfAkJdGhlIElORVggZmxhZyBmb3IgdXNlIGluIEExMC4KK3wKK3wJQTkuCVNjYWxlIFggLT4gWS4KK3wJCVRoZSBtYW50aXNzYSBpcyBzY2FsZWQgdG8gdGhlIGRlc2lyZWQgbnVtYmVyIG9mCit8CQlzaWduaWZpY2FudCBkaWdpdHMuICBUaGUgZXhjZXNzIGRpZ2l0cyBhcmUgY29sbGVjdGVkCit8CQlpbiBJTkVYMi4KK3wKK3wJQTEwLglPciBpbiBJTkVYLgorfAkJSWYgSU5FWCBpcyBzZXQsIHJvdW5kIGVycm9yIG9jY3VycmVkLiAgVGhpcyBpcworfAkJY29tcGVuc2F0ZWQgZm9yIGJ5ICdvci1pbmcnIGluIHRoZSBJTkVYMiBmbGFnIHRvCit8CQl0aGUgbHNiIG9mIFkuCit8Cit8CUExMS4JUmVzdG9yZSBvcmlnaW5hbCBGUENSOyBzZXQgc2l6ZSBleHQuCit8CQlQZXJmb3JtIEZJTlQgb3BlcmF0aW9uIGluIHRoZSB1c2VyJ3Mgcm91bmRpbmcgbW9kZS4KK3wJCUtlZXAgdGhlIHNpemUgdG8gZXh0ZW5kZWQuCit8Cit8CUExMi4JQ2FsY3VsYXRlIFlJTlQgPSBGSU5UKFkpIGFjY29yZGluZyB0byB1c2VyJ3Mgcm91bmRpbmcKK3wJCW1vZGUuICBUaGUgRlBTUCByb3V0aW5lIHNpbnRkMCBpcyB1c2VkLiAgVGhlIG91dHB1dAorfAkJaXMgaW4gZnAwLgorfAorfAlBMTMuCUNoZWNrIGZvciBMRU4gZGlnaXRzLgorfAkJSWYgdGhlIGludCBvcGVyYXRpb24gcmVzdWx0cyBpbiBtb3JlIHRoYW4gTEVOIGRpZ2l0cywKK3wJCW9yIGxlc3MgdGhhbiBMRU4gLTEgZGlnaXRzLCBhZGp1c3QgSUxPRyBhbmQgcmVwZWF0IGZyb20KK3wJCUE2LiAgVGhpcyB0ZXN0IG9jY3VycyBvbmx5IG9uIHRoZSBmaXJzdCBwYXNzLiAgSWYgdGhlCit8CQlyZXN1bHQgaXMgZXhhY3RseSAxMF5MRU4sIGRlY3JlbWVudCBJTE9HIGFuZCBkaXZpZGUKK3wJCXRoZSBtYW50aXNzYSBieSAxMC4KK3wKK3wJQTE0LglDb252ZXJ0IHRoZSBtYW50aXNzYSB0byBiY2QuCit8CQlUaGUgYmluc3RyIHJvdXRpbmUgaXMgdXNlZCB0byBjb252ZXJ0IHRoZSBMRU4gZGlnaXQKK3wJCW1hbnRpc3NhIHRvIGJjZCBpbiBtZW1vcnkuICBUaGUgaW5wdXQgdG8gYmluc3RyIGlzCit8CQl0byBiZSBhIGZyYWN0aW9uOyBpLmUuIChtYW50aXNzYSkvMTBeTEVOIGFuZCBhZGp1c3RlZAorfAkJc3VjaCB0aGF0IHRoZSBkZWNpbWFsIHBvaW50IGlzIHRvIHRoZSBsZWZ0IG9mIGJpdCA2My4KK3wJCVRoZSBiY2QgZGlnaXRzIGFyZSBzdG9yZWQgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb24gaW4KK3wJCXRoZSBmaW5hbCBzdHJpbmcgYXJlYSBpbiBtZW1vcnkuCit8Cit8CUExNS4JQ29udmVydCB0aGUgZXhwb25lbnQgdG8gYmNkLgorfAkJQXMgaW4gQTE0IGFib3ZlLCB0aGUgZXhwIGlzIGNvbnZlcnRlZCB0byBiY2QgYW5kIHRoZQorfAkJZGlnaXRzIGFyZSBzdG9yZWQgaW4gdGhlIGZpbmFsIHN0cmluZy4KK3wJCVRlc3QgdGhlIGxlbmd0aCBvZiB0aGUgZmluYWwgZXhwb25lbnQgc3RyaW5nLiAgSWYgdGhlCit8CQlsZW5ndGggaXMgNCwgc2V0IG9wZXJyLgorfAorfAlBMTYuCVdyaXRlIHNpZ24gYml0cyB0byBmaW5hbCBzdHJpbmcuCit8Cit8CUltcGxlbWVudGF0aW9uIE5vdGVzOgorfAorfAlUaGUgcmVnaXN0ZXJzIGFyZSB1c2VkIGFzIGZvbGxvd3M6Cit8Cit8CQlkMDogc2NyYXRjaDsgTEVOIGlucHV0IHRvIGJpbnN0cgorfAkJZDE6IHNjcmF0Y2gKK3wJCWQyOiB1cHBlciAzMi1iaXRzIG9mIG1hbnRpc3NhIGZvciBiaW5zdHIKK3wJCWQzOiBzY3JhdGNoO2xvd2VyIDMyLWJpdHMgb2YgbWFudGlzc2EgZm9yIGJpbnN0cgorfAkJZDQ6IExFTgorfAkJZDU6IExBTUJEQS9JQ1RSCit8CQlkNjogSUxPRworfAkJZDc6IGstZmFjdG9yCit8CQlhMDogcHRyIGZvciBvcmlnaW5hbCBvcGVyYW5kL2ZpbmFsIHJlc3VsdAorfAkJYTE6IHNjcmF0Y2ggcG9pbnRlcgorfAkJYTI6IHBvaW50ZXIgdG8gRlBfWDsgYWJzKG9yaWdpbmFsIHZhbHVlKSBpbiBleHQKK3wJCWZwMDogc2NyYXRjaAorfAkJZnAxOiBzY3JhdGNoCit8CQlmcDI6IHNjcmF0Y2gKK3wJCUZfU0NSMToKK3wJCUZfU0NSMjoKK3wJCUxfU0NSMToKK3wJCUxfU0NSMjoKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfEJJTkRFQyAgICBpZG50ICAgIDIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKyNpbmNsdWRlICJmcHNwLmgiCisKKwl8c2VjdGlvbgk4CisKK3wgQ29uc3RhbnRzIGluIGV4dGVuZGVkIHByZWNpc2lvbgorTE9HMjoJLmxvbmcJMHgzRkZEMDAwMCwweDlBMjA5QTg0LDB4RkJDRkY3OTgsMHgwMDAwMDAwMAorTE9HMlVQMToJLmxvbmcJMHgzRkZEMDAwMCwweDlBMjA5QTg0LDB4RkJDRkY3OTksMHgwMDAwMDAwMAorCit8IENvbnN0YW50cyBpbiBzaW5nbGUgcHJlY2lzaW9uCitGT05FOgkubG9uZwkweDNGODAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCitGVFdPOgkubG9uZwkweDQwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCitGVEVOOgkubG9uZwkweDQxMjAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCitGNDkzMzoJLmxvbmcJMHg0NTlBMjgwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCitSQkRUQkw6CS5ieXRlCTAsMCwwLDAKKwkuYnl0ZQkzLDMsMiwyCisJLmJ5dGUJMywyLDIsMworCS5ieXRlCTIsMywzLDIKKworCXx4cmVmCWJpbnN0cgorCXx4cmVmCXNpbnRkbworCXx4cmVmCXB0ZW5ybixwdGVucm0scHRlbnJwCisKKwkuZ2xvYmFsCWJpbmRlYworCS5nbG9iYWwJc2NfbXVsCitiaW5kZWM6CisJbW92ZW1sCSVkMi0lZDcvJWEyLC0oJWE3KQorCWZtb3ZlbXggJWZwMC0lZnAyLC0oJWE3KQorCit8IEExLiBTZXQgUk0gYW5kIHNpemUgZXh0LiBTZXQgU0lHTUEgPSBzaWduIGlucHV0OworfCAgICAgVGhlIGstZmFjdG9yIGlzIHNhdmVkIGZvciB1c2UgaW4gZDcuICBDbGVhciBCSU5ERUNfRkxHIGZvcgorfCAgICAgc2VwYXJhdGluZyAgbm9ybWFsaXplZC9kZW5vcm1hbGl6ZWQgaW5wdXQuICBJZiB0aGUgaW5wdXQKK3wgICAgIGlzIGEgZGVub3JtYWxpemVkIG51bWJlciwgc2V0IHRoZSBCSU5ERUNfRkxHIG1lbW9yeSB3b3JkCit8ICAgICB0byBzaWduYWwgZGVub3JtLiAgSWYgdGhlIGlucHV0IGlzIHVubm9ybWFsaXplZCwgbm9ybWFsaXplCit8ICAgICB0aGUgaW5wdXQgYW5kIHRlc3QgZm9yIGRlbm9ybWFsaXplZCByZXN1bHQuCit8CisJZm1vdmVsCSNybV9tb2RlLCVGUENSCXxzZXQgUk0gYW5kIGV4dAorCW1vdmVsCSglYTApLExfU0NSMiglYTYpCXxzYXZlIGV4cG9uZW50IGZvciBzaWduIGNoZWNrCisJbW92ZWwJJWQwLCVkNwkJfG1vdmUgay1mYWN0b3IgdG8gZDcKKwljbHJiCUJJTkRFQ19GTEcoJWE2KQl8Y2xyIG5vcm0vZGVub3JtIGZsYWcKKwltb3ZldwlTVEFHKCVhNiksJWQwCXxnZXQgc3RhZworCWFuZGl3CSMweGUwMDAsJWQwCXxpc29sYXRlIHN0YWcgYml0cworCWJlcQlBMl9zdHIJCXxpZiB6ZXJvLCBpbnB1dCBpcyBub3JtCit8Cit8IE5vcm1hbGl6ZSB0aGUgZGVub3JtCit8Cit1bl9kZV9ub3JtOgorCW1vdmV3CSglYTApLCVkMAorCWFuZGl3CSMweDdmZmYsJWQwCXxzdHJpcCBzaWduIG9mIG5vcm1hbGl6ZWQgZXhwCisJbW92ZWwJNCglYTApLCVkMQorCW1vdmVsCTgoJWEwKSwlZDIKK25vcm1fbG9vcDoKKwlzdWJ3CSMxLCVkMAorCWxzbGwJIzEsJWQyCisJcm94bGwJIzEsJWQxCisJdHN0bAklZDEKKwliZ2VzCW5vcm1fbG9vcAorfAorfCBUZXN0IGlmIHRoZSBub3JtYWxpemVkIGlucHV0IGlzIGRlbm9ybWFsaXplZAorfAorCXRzdHcJJWQwCisJYmd0cwlwb3NfZXhwCQl8aWYgZ3JlYXRlciB0aGFuIHplcm8sIGl0IGlzIGEgbm9ybQorCXN0CUJJTkRFQ19GTEcoJWE2KQl8c2V0IGZsYWcgZm9yIGRlbm9ybQorcG9zX2V4cDoKKwlhbmRpdwkjMHg3ZmZmLCVkMAl8c3RyaXAgc2lnbiBvZiBub3JtYWxpemVkIGV4cAorCW1vdmV3CSVkMCwoJWEwKQorCW1vdmVsCSVkMSw0KCVhMCkKKwltb3ZlbAklZDIsOCglYTApCisKK3wgQTIuIFNldCBYID0gYWJzKGlucHV0KS4KK3wKK0EyX3N0cjoKKwltb3ZlbAkoJWEwKSxGUF9TQ1IyKCVhNikgfCBtb3ZlIGlucHV0IHRvIHdvcmsgc3BhY2UKKwltb3ZlbAk0KCVhMCksRlBfU0NSMis0KCVhNikgfCBtb3ZlIGlucHV0IHRvIHdvcmsgc3BhY2UKKwltb3ZlbAk4KCVhMCksRlBfU0NSMis4KCVhNikgfCBtb3ZlIGlucHV0IHRvIHdvcmsgc3BhY2UKKwlhbmRpbAkjMHg3ZmZmZmZmZixGUF9TQ1IyKCVhNikgfGNyZWF0ZSBhYnMoWCkKKworfCBBMy4gQ29tcHV0ZSBJTE9HLgorfCAgICAgSUxPRyBpcyB0aGUgbG9nIGJhc2UgMTAgb2YgdGhlIGlucHV0IHZhbHVlLiAgSXQgaXMgYXBwcm94LQorfCAgICAgaW1hdGVkIGJ5IGFkZGluZyBlICsgMC5mIHdoZW4gdGhlIG9yaWdpbmFsIHZhbHVlIGlzIHZpZXdlZAorfCAgICAgYXMgMl5eZSAqIDEuZiBpbiBleHRlbmRlZCBwcmVjaXNpb24uICBUaGlzIHZhbHVlIGlzIHN0b3JlZAorfCAgICAgaW4gZDYuCit8Cit8IFJlZ2lzdGVyIHVzYWdlOgorfAlJbnB1dC9PdXRwdXQKK3wJZDA6IGstZmFjdG9yL2V4cG9uZW50Cit8CWQyOiB4L3gKK3wJZDM6IHgveAorfAlkNDogeC94Cit8CWQ1OiB4L3gKK3wJZDY6IHgvSUxPRworfAlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCit8CWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvZmluYWwgcmVzdWx0Cit8CWExOiB4L3gKK3wJYTI6IHgveAorfAlmcDA6IHgvZmxvYXQoSUxPRykKK3wJZnAxOiB4L3gKK3wJZnAyOiB4L3gKK3wJRl9TQ1IxOngveAorfAlGX1NDUjI6QWJzKFgpL0FicyhYKSB3aXRoICQzZmZmIGV4cG9uZW50Cit8CUxfU0NSMTp4L3gKK3wJTF9TQ1IyOmZpcnN0IHdvcmQgb2YgWCBwYWNrZWQvVW5jaGFuZ2VkCisKKwl0c3RiCUJJTkRFQ19GTEcoJWE2KQl8Y2hlY2sgZm9yIGRlbm9ybQorCWJlcXMJQTNfY29udAkJfGlmIGNsciwgY29udGludWUgd2l0aCBub3JtCisJbW92ZWwJIy00OTMzLCVkNgl8Zm9yY2UgSUxPRyA9IC00OTMzCisJYnJhcwlBNF9zdHIKK0EzX2NvbnQ6CisJbW92ZXcJRlBfU0NSMiglYTYpLCVkMAl8bW92ZSBleHAgdG8gZDAKKwltb3ZldwkjMHgzZmZmLEZQX1NDUjIoJWE2KSB8cmVwbGFjZSBleHBvbmVudCB3aXRoIDB4M2ZmZgorCWZtb3ZleAlGUF9TQ1IyKCVhNiksJWZwMAl8bm93IGZwMCBoYXMgMS5mCisJc3VidwkjMHgzZmZmLCVkMAl8c3RyaXAgb2ZmIGJpYXMKKwlmYWRkdwklZDAsJWZwMAkJfGFkZCBpbiBleHAKKwlmc3VicwlGT05FLCVmcDAJfHN1YnRyYWN0IG9mZiAxLjAKKwlmYmdlCXBvc19yZXMJCXxpZiBwb3MsIGJyYW5jaAorCWZtdWx4CUxPRzJVUDEsJWZwMAl8aWYgbmVnLCBtdWwgYnkgTE9HMlVQMQorCWZtb3ZlbAklZnAwLCVkNgkJfHB1dCBJTE9HIGluIGQ2IGFzIGEgbHdvcmQKKwlicmFzCUE0X3N0cgkJfGdvIG1vdmUgb3V0IElMT0cKK3Bvc19yZXM6CisJZm11bHgJTE9HMiwlZnAwCXxpZiBwb3MsIG11bCBieSBMT0cyCisJZm1vdmVsCSVmcDAsJWQ2CQl8cHV0IElMT0cgaW4gZDYgYXMgYSBsd29yZAorCisKK3wgQTQuIENsciBJTkVYIGJpdC4KK3wgICAgIFRoZSBvcGVyYXRpb24gaW4gQTMgYWJvdmUgbWF5IGhhdmUgc2V0IElORVgyLgorCitBNF9zdHI6CisJZm1vdmVsCSMwLCVGUFNSCQl8emVybyBhbGwgb2YgZnBzciAtIG5vdGhpbmcgbmVlZGVkCisKKworfCBBNS4gU2V0IElDVFIgPSAwOworfCAgICAgSUNUUiBpcyBhIGZsYWcgdXNlZCBpbiBBMTMuICBJdCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlCit8ICAgICBsb29wIGVudHJ5IEE2LiBUaGUgbG93ZXIgd29yZCBvZiBkNSBpcyB1c2VkIGZvciBJQ1RSLgorCisJY2xydwklZDUJCXxjbGVhciBJQ1RSCisKKworfCBBNi4gQ2FsY3VsYXRlIExFTi4KK3wgICAgIExFTiBpcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyB0byBiZSBkaXNwbGF5ZWQuICBUaGUgay1mYWN0b3IKK3wgICAgIGNhbiBkaWN0YXRlIGVpdGhlciB0aGUgdG90YWwgbnVtYmVyIG9mIGRpZ2l0cywgaWYgaXQgaXMKK3wgICAgIGEgcG9zaXRpdmUgbnVtYmVyLCBvciB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUKK3wgICAgIG9yaWdpbmFsIGRlY2ltYWwgcG9pbnQgd2hpY2ggYXJlIHRvIGJlIGluY2x1ZGVkIGFzCit8ICAgICBzaWduaWZpY2FudC4gIFNlZSB0aGUgNjg4ODIgbWFudWFsIGZvciBleGFtcGxlcy4KK3wgICAgIElmIExFTiBpcyBjb21wdXRlZCB0byBiZSBncmVhdGVyIHRoYW4gMTcsIHNldCBPUEVSUiBpbgorfCAgICAgVVNFUl9GUFNSLiAgTEVOIGlzIHN0b3JlZCBpbiBkNC4KK3wKK3wgUmVnaXN0ZXIgdXNhZ2U6Cit8CUlucHV0L091dHB1dAorfAlkMDogZXhwb25lbnQvVW5jaGFuZ2VkCit8CWQyOiB4L3gvc2NyYXRjaAorfAlkMzogeC94Cit8CWQ0OiBleGMgcGljdHVyZS9MRU4KK3wJZDU6IElDVFIvVW5jaGFuZ2VkCit8CWQ2OiBJTE9HL1VuY2hhbmdlZAorfAlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCit8CWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvZmluYWwgcmVzdWx0Cit8CWExOiB4L3gKK3wJYTI6IHgveAorfAlmcDA6IGZsb2F0KElMT0cpL1VuY2hhbmdlZAorfAlmcDE6IHgveAorfAlmcDI6IHgveAorfAlGX1NDUjE6eC94Cit8CUZfU0NSMjpBYnMoWCkgd2l0aCAkM2ZmZiBleHBvbmVudC9VbmNoYW5nZWQKK3wJTF9TQ1IxOngveAorfAlMX1NDUjI6Zmlyc3Qgd29yZCBvZiBYIHBhY2tlZC9VbmNoYW5nZWQKKworQTZfc3RyOgorCXRzdGwJJWQ3CQl8YnJhbmNoIG9uIHNpZ24gb2YgaworCWJsZXMJa19uZWcJCXxpZiBrIDw9IDAsIExFTiA9IElMT0cgKyAxIC0gaworCW1vdmVsCSVkNywlZDQJCXxpZiBrID4gMCwgTEVOID0gaworCWJyYXMJbGVuX2NrCQl8c2tpcCB0byBMRU4gY2hlY2sKK2tfbmVnOgorCW1vdmVsCSVkNiwlZDQJCXxmaXJzdCBsb2FkIElMT0cgdG8gZDQKKwlzdWJsCSVkNywlZDQJCXxzdWJ0cmFjdCBvZmYgaworCWFkZHFsCSMxLCVkNAkJfGFkZCBpbiB0aGUgMQorbGVuX2NrOgorCXRzdGwJJWQ0CQl8TEVOIGNoZWNrOiBicmFuY2ggb24gc2lnbiBvZiBMRU4KKwlibGVzCUxFTl9uZwkJfGlmIG5lZywgc2V0IExFTiA9IDEKKwljbXBsCSMxNywlZDQJCXx0ZXN0IGlmIExFTiA+IDE3CisJYmxlcwlBN19zdHIJCXxpZiBub3QsIGZvcmdldCBpdAorCW1vdmVsCSMxNywlZDQJCXxzZXQgbWF4IExFTiA9IDE3CisJdHN0bAklZDcJCXxpZiBuZWdhdGl2ZSwgbmV2ZXIgc2V0IE9QRVJSCisJYmxlcwlBN19zdHIJCXxpZiBwb3NpdGl2ZSwgY29udGludWUKKwlvcmwJI29wYW9wX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBPUEVSUiAmIEFJT1AgaW4gVVNFUl9GUFNSCisJYnJhcwlBN19zdHIJCXxmaW5pc2hlZCBoZXJlCitMRU5fbmc6CisJbW92ZXFsCSMxLCVkNAkJfG1pbiBMRU4gaXMgMQorCisKK3wgQTcuIENhbGN1bGF0ZSBTQ0FMRS4KK3wgICAgIFNDQUxFIGlzIGVxdWFsIHRvIDEwXklTQ0FMRSwgd2hlcmUgSVNDQUxFIGlzIHRoZSBudW1iZXIKK3wgICAgIG9mIGRlY2ltYWwgcGxhY2VzIG5lZWRlZCB0byBpbnN1cmUgTEVOIGludGVnZXIgZGlnaXRzCit8ICAgICBpbiB0aGUgb3V0cHV0IGJlZm9yZSBjb252ZXJzaW9uIHRvIGJjZC4gTEFNQkRBIGlzIHRoZSBzaWduCit8ICAgICBvZiBJU0NBTEUsIHVzZWQgaW4gQTkuICBGcDEgY29udGFpbnMgMTBeXihhYnMoSVNDQUxFKSkgdXNpbmcKK3wgICAgIHRoZSByb3VuZGluZyBtb2RlIGFzIGdpdmVuIGluIHRoZSBmb2xsb3dpbmcgdGFibGUgKHNlZQorfCAgICAgQ29vbmVuLCBwLiA3LjIzIGFzIHJlZi47IGhvd2V2ZXIsIHRoZSBTQ0FMRSB2YXJpYWJsZSBpcworfCAgICAgb2Ygb3Bwb3NpdGUgc2lnbiBpbiBiaW5kZWMuc2EgZnJvbSBDb29uZW4pLgorfAorfAlJbml0aWFsCQkJCQlVU0UKK3wJRlBDUls2OjVdCUxBTUJEQQlTSUdOKFgpCQlGUENSWzY6NV0KK3wJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfAkgUk4JMDAJICAgMAkgICAwCQkwMC8wCVJOCit8CSBSTgkwMAkgICAwCSAgIDEJCTAwLzAJUk4KK3wJIFJOCTAwCSAgIDEJICAgMAkJMDAvMAlSTgorfAkgUk4JMDAJICAgMQkgICAxCQkwMC8wCVJOCit8CSBSWgkwMQkgICAwCSAgIDAJCTExLzMJUlAKK3wJIFJaCTAxCSAgIDAJICAgMQkJMTEvMwlSUAorfAkgUloJMDEJICAgMQkgICAwCQkxMC8yCVJNCit8CSBSWgkwMQkgICAxCSAgIDEJCTEwLzIJUk0KK3wJIFJNCTEwCSAgIDAJICAgMAkJMTEvMwlSUAorfAkgUk0JMTAJICAgMAkgICAxCQkxMC8yCVJNCit8CSBSTQkxMAkgICAxCSAgIDAJCTEwLzIJUk0KK3wJIFJNCTEwCSAgIDEJICAgMQkJMTEvMwlSUAorfAkgUlAJMTEJICAgMAkgICAwCQkxMC8yCVJNCit8CSBSUAkxMQkgICAwCSAgIDEJCTExLzMJUlAKK3wJIFJQCTExCSAgIDEJICAgMAkJMTEvMwlSUAorfAkgUlAJMTEJICAgMQkgICAxCQkxMC8yCVJNCit8Cit8IFJlZ2lzdGVyIHVzYWdlOgorfAlJbnB1dC9PdXRwdXQKK3wJZDA6IGV4cG9uZW50L3NjcmF0Y2ggLSBmaW5hbCBpcyAwCit8CWQyOiB4LzAgb3IgMjQgZm9yIEE5Cit8CWQzOiB4L3NjcmF0Y2ggLSBvZmZzZXQgcHRyIGludG8gUFRFTlJNIGFycmF5Cit8CWQ0OiBMRU4vVW5jaGFuZ2VkCit8CWQ1OiAwL0lDVFI6TEFNQkRBCit8CWQ2OiBJTE9HL0lMT0cgb3IgayBpZiAoKGs8PTApJihJTE9HPGspKQorfAlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCit8CWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvZmluYWwgcmVzdWx0Cit8CWExOiB4L3B0ciB0byBQVEVOUk0gYXJyYXkKK3wJYTI6IHgveAorfAlmcDA6IGZsb2F0KElMT0cpL1VuY2hhbmdlZAorfAlmcDE6IHgvMTBeSVNDQUxFCit8CWZwMjogeC94Cit8CUZfU0NSMTp4L3gKK3wJRl9TQ1IyOkFicyhYKSB3aXRoICQzZmZmIGV4cG9uZW50L1VuY2hhbmdlZAorfAlMX1NDUjE6eC94Cit8CUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBN19zdHI6CisJdHN0bAklZDcJCXx0ZXN0IHNpZ24gb2YgaworCWJndHMJa19wb3MJCXxpZiBwb3MgYW5kID4gMCwgc2tpcCB0aGlzCisJY21wbAklZDYsJWQ3CQl8dGVzdCBrIC0gSUxPRworCWJsdHMJa19wb3MJCXxpZiBJTE9HID49IGssIHNraXAgdGhpcworCW1vdmVsCSVkNywlZDYJCXxpZiAoKGs8MCkgJiAoSUxPRyA8IGspKSBJTE9HID0gawora19wb3M6CisJbW92ZWwJJWQ2LCVkMAkJfGNhbGMgSUxPRyArIDEgLSBMRU4gaW4gZDAKKwlhZGRxbAkjMSwlZDAJCXxhZGQgdGhlIDEKKwlzdWJsCSVkNCwlZDAJCXxzdWIgb2ZmIExFTgorCXN3YXAJJWQ1CQl8dXNlIHVwcGVyIHdvcmQgb2YgZDUgZm9yIExBTUJEQQorCWNscncJJWQ1CQl8c2V0IGl0IHplcm8gaW5pdGlhbGx5CisJY2xydwklZDIJCXxzZXQgdXAgZDIgZm9yIHZlcnkgc21hbGwgY2FzZQorCXRzdGwJJWQwCQl8dGVzdCBzaWduIG9mIElTQ0FMRQorCWJnZXMJaXNjYWxlCQl8aWYgcG9zLCBza2lwIG5leHQgaW5zdAorCWFkZHF3CSMxLCVkNQkJfGlmIG5lZywgc2V0IExBTUJEQSB0cnVlCisJY21wbAkjMHhmZmZmZWNkNCwlZDAJfHRlc3QgaXNjYWxlIDw9IC00OTA4CisJYmd0cwlub19pbmYJCXxpZiBmYWxzZSwgc2tpcCByZXN0CisJYWRkaWwJIzI0LCVkMAkJfGFkZCBpbiAyNCB0byBpc2NhbGUKKwltb3ZlbAkjMjQsJWQyCQl8cHV0IDI0IGluIGQyIGZvciBBOQorbm9faW5mOgorCW5lZ2wJJWQwCQl8YW5kIHRha2UgYWJzIG9mIElTQ0FMRQoraXNjYWxlOgorCWZtb3ZlcwlGT05FLCVmcDEJfGluaXQgZnAxIHRvIDEKKwliZmV4dHUJVVNFUl9GUENSKCVhNil7IzI2OiMyfSwlZDEgfGdldCBpbml0aWFsIHJtb2RlIGJpdHMKKwlsc2x3CSMxLCVkMQkJfHB1dCB0aGVtIGluIGJpdHMgMjoxCisJYWRkdwklZDUsJWQxCQl8YWRkIGluIExBTUJEQQorCWxzbHcJIzEsJWQxCQl8cHV0IHRoZW0gaW4gYml0cyAzOjEKKwl0c3RsCUxfU0NSMiglYTYpCXx0ZXN0IHNpZ24gb2Ygb3JpZ2luYWwgeAorCWJnZXMJeF9wb3MJCXxpZiBwb3MsIGRvbid0IHNldCBiaXQgMAorCWFkZHFsCSMxLCVkMQkJfGlmIG5lZywgc2V0IGJpdCAwCit4X3BvczoKKwlsZWFsCVJCRFRCTCwlYTIJfGxvYWQgcmJkdGJsIGJhc2UKKwltb3ZlYgkoJWEyLCVkMSksJWQzCXxsb2FkIGQzIHdpdGggbmV3IHJtb2RlCisJbHNsbAkjNCwlZDMJCXxwdXQgYml0cyBpbiBwcm9wZXIgcG9zaXRpb24KKwlmbW92ZWwJJWQzLCVmcGNyCQl8bG9hZCBiaXRzIGludG8gZnB1CisJbHNybAkjNCwlZDMJCXxwdXQgYml0cyBpbiBwcm9wZXIgcG9zaXRpb24KKwl0c3RiCSVkMwkJfGRlY29kZSBuZXcgcm1vZGUgZm9yIHB0ZW4gdGFibGUKKwlibmVzCW5vdF9ybgkJfGlmIHplcm8sIGl0IGlzIFJOCisJbGVhbAlQVEVOUk4sJWExCXxsb2FkIGExIHdpdGggUk4gdGFibGUgYmFzZQorCWJyYXMJcm1vZGUJCXxleGl0IGRlY29kZQorbm90X3JuOgorCWxzcmIJIzEsJWQzCQl8Z2V0IGxzYiBpbiBjYXJyeQorCWJjY3MJbm90X3JwCQl8aWYgY2FycnkgY2xlYXIsIGl0IGlzIFJNCisJbGVhbAlQVEVOUlAsJWExCXxsb2FkIGExIHdpdGggUlAgdGFibGUgYmFzZQorCWJyYXMJcm1vZGUJCXxleGl0IGRlY29kZQorbm90X3JwOgorCWxlYWwJUFRFTlJNLCVhMQl8bG9hZCBhMSB3aXRoIFJNIHRhYmxlIGJhc2UKK3Jtb2RlOgorCWNscmwJJWQzCQl8Y2xyIHRhYmxlIGluZGV4CitlX2xvb3A6CisJbHNybAkjMSwlZDAJCXxzaGlmdCBuZXh0IGJpdCBpbnRvIGNhcnJ5CisJYmNjcwllX25leHQJCXxpZiB6ZXJvLCBza2lwIHRoZSBtdWwKKwlmbXVseAkoJWExLCVkMyksJWZwMQl8bXVsIGJ5IDEwKiooZDNfYml0X25vKQorZV9uZXh0OgorCWFkZGwJIzEyLCVkMwkJfGluYyBkMyB0byBuZXh0IHB3cnRlbiB0YWJsZSBlbnRyeQorCXRzdGwJJWQwCQl8dGVzdCBpZiBJU0NBTEUgaXMgemVybworCWJuZXMJZV9sb29wCQl8aWYgbm90LCBsb29wCisKKworfCBBOC4gQ2xyIElORVg7IEZvcmNlIFJaLgorfCAgICAgVGhlIG9wZXJhdGlvbiBpbiBBMyBhYm92ZSBtYXkgaGF2ZSBzZXQgSU5FWDIuCit8ICAgICBSWiBtb2RlIGlzIGZvcmNlZCBmb3IgdGhlIHNjYWxpbmcgb3BlcmF0aW9uIHRvIGluc3VyZQorfCAgICAgb25seSBvbmUgcm91bmRpbmcgZXJyb3IuICBUaGUgZ3JzIGJpdHMgYXJlIGNvbGxlY3RlZCBpbgorfCAgICAgdGhlIElORVggZmxhZyBmb3IgdXNlIGluIEExMC4KK3wKK3wgUmVnaXN0ZXIgdXNhZ2U6Cit8CUlucHV0L091dHB1dAorCisJZm1vdmVsCSMwLCVGUFNSCQl8Y2xyIElORVgKKwlmbW92ZWwJI3J6X21vZGUsJUZQQ1IJfHNldCBSWiByb3VuZGluZyBtb2RlCisKKworfCBBOS4gU2NhbGUgWCAtPiBZLgorfCAgICAgVGhlIG1hbnRpc3NhIGlzIHNjYWxlZCB0byB0aGUgZGVzaXJlZCBudW1iZXIgb2Ygc2lnbmlmaWNhbnQKK3wgICAgIGRpZ2l0cy4gIFRoZSBleGNlc3MgZGlnaXRzIGFyZSBjb2xsZWN0ZWQgaW4gSU5FWDIuIElmIG11bCwKK3wgICAgIENoZWNrIGQyIGZvciBleGNlc3MgMTAgZXhwb25lbnRpYWwgdmFsdWUuICBJZiBub3QgemVybywKK3wgICAgIHRoZSBpc2NhbGUgdmFsdWUgd291bGQgaGF2ZSBjYXVzZWQgdGhlIHB3cnRlbiBjYWxjdWxhdGlvbgorfCAgICAgdG8gb3ZlcmZsb3cuICBPbmx5IGEgbmVnYXRpdmUgaXNjYWxlIGNhbiBjYXVzZSB0aGlzLCBzbworfCAgICAgbXVsdGlwbHkgYnkgMTBeKGQyKSwgd2hpY2ggaXMgbm93IG9ubHkgYWxsb3dlZCB0byBiZSAyNCwKK3wgICAgIHdpdGggYSBtdWx0aXBseSBieSAxMF44IGFuZCAxMF4xNiwgd2hpY2ggaXMgZXhhY3Qgc2luY2UKK3wgICAgIDEwXjI0IGlzIGV4YWN0LiAgSWYgdGhlIGlucHV0IHdhcyBkZW5vcm1hbGl6ZWQsIHdlIG11c3QKK3wgICAgIGNyZWF0ZSBhIGJ1c3kgc3RhY2sgZnJhbWUgd2l0aCB0aGUgbXVsIGNvbW1hbmQgYW5kIHRoZQorfCAgICAgdHdvIG9wZXJhbmRzLCBhbmQgYWxsb3cgdGhlIGZwdSB0byBjb21wbGV0ZSB0aGUgbXVsdGlwbHkuCit8Cit8IFJlZ2lzdGVyIHVzYWdlOgorfAlJbnB1dC9PdXRwdXQKK3wJZDA6IEZQQ1Igd2l0aCBSWiBtb2RlL1VuY2hhbmdlZAorfAlkMjogMCBvciAyNC91bmNoYW5nZWQKK3wJZDM6IHgveAorfAlkNDogTEVOL1VuY2hhbmdlZAorfAlkNTogSUNUUjpMQU1CREEKK3wJZDY6IElMT0cvVW5jaGFuZ2VkCit8CWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKK3wJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9maW5hbCByZXN1bHQKK3wJYTE6IHB0ciB0byBQVEVOUk0gYXJyYXkvVW5jaGFuZ2VkCit8CWEyOiB4L3gKK3wJZnAwOiBmbG9hdChJTE9HKS9YIGFkanVzdGVkIGZvciBTQ0FMRSAoWSkKK3wJZnAxOiAxMF5JU0NBTEUvVW5jaGFuZ2VkCit8CWZwMjogeC94Cit8CUZfU0NSMTp4L3gKK3wJRl9TQ1IyOkFicyhYKSB3aXRoICQzZmZmIGV4cG9uZW50L1VuY2hhbmdlZAorfAlMX1NDUjE6eC94Cit8CUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBOV9zdHI6CisJZm1vdmV4CSglYTApLCVmcDAJfGxvYWQgWCBmcm9tIG1lbW9yeQorCWZhYnN4CSVmcDAJCXx1c2UgYWJzKFgpCisJdHN0dwklZDUJCXxMQU1CREEgaXMgaW4gbG93ZXIgd29yZCBvZiBkNQorCWJuZQlzY19tdWwJCXxpZiBuZWcgKExBTUJEQSA9IDEpLCBzY2FsZSBieSBtdWwKKwlmZGl2eAklZnAxLCVmcDAJCXxjYWxjdWxhdGUgWCAvIFNDQUxFIC0+IFkgdG8gZnAwCisJYnJhcwlBMTBfc3QJCXxicmFuY2ggdG8gQTEwCisKK3NjX211bDoKKwl0c3RiCUJJTkRFQ19GTEcoJWE2KQl8Y2hlY2sgZm9yIGRlbm9ybQorCWJlcXMJQTlfbm9ybQkJfGlmIG5vcm0sIGNvbnRpbnVlIHdpdGggbXVsCisJZm1vdmVteCAlZnAxLSVmcDEsLSglYTcpCXxsb2FkIEVURU1QIHdpdGggMTBeSVNDQUxFCisJbW92ZWwJOCglYTApLC0oJWE3KQl8bG9hZCBGUFRFTVAgd2l0aCBpbnB1dCBhcmcKKwltb3ZlbAk0KCVhMCksLSglYTcpCisJbW92ZWwJKCVhMCksLSglYTcpCisJbW92ZWwJIzE4LCVkMwkJfGxvYWQgY291bnQgZm9yIGJ1c3kgc3RhY2sKK0E5X2xvb3A6CisJY2xybAktKCVhNykJCXxjbGVhciBsd29yZCBvbiBzdGFjaworCWRiZgklZDMsQTlfbG9vcAorCW1vdmViCVZFUl9UTVAoJWE2KSwoJWE3KSB8d3JpdGUgY3VycmVudCB2ZXJzaW9uIG51bWJlcgorCW1vdmViCSNCVVNZX1NJWkUtNCwxKCVhNykgfHdyaXRlIGN1cnJlbnQgYnVzeSBzaXplCisJbW92ZWIJIzB4MTAsMHg0NCglYTcpCXxzZXQgZmNlZnB0ZVsxNV0gYml0CisJbW92ZXcJIzB4MDAyMywweDQwKCVhNykJfGxvYWQgY21kcmVnMWIgd2l0aCBtdWwgY29tbWFuZAorCW1vdmViCSMweGZlLDB4OCglYTcpCXxsb2FkIGFsbCAxcyB0byBjdSBzYXZlcGMKKwlmcmVzdG9yZSAoJWE3KSsJCXxyZXN0b3JlIGZyYW1lIHRvIGZwdSBmb3IgY29tcGxldGlvbgorCWZtdWx4CTM2KCVhMSksJWZwMAl8bXVsdGlwbHkgZnAwIGJ5IDEwXjgKKwlmbXVseAk0OCglYTEpLCVmcDAJfG11bHRpcGx5IGZwMCBieSAxMF4xNgorCWJyYXMJQTEwX3N0CitBOV9ub3JtOgorCXRzdHcJJWQyCQl8dGVzdCBmb3Igc21hbGwgZXhwIGNhc2UKKwliZXFzCUE5X2NvbgkJfGlmIHplcm8sIGNvbnRpbnVlIGFzIG5vcm1hbAorCWZtdWx4CTM2KCVhMSksJWZwMAl8bXVsdGlwbHkgZnAwIGJ5IDEwXjgKKwlmbXVseAk0OCglYTEpLCVmcDAJfG11bHRpcGx5IGZwMCBieSAxMF4xNgorQTlfY29uOgorCWZtdWx4CSVmcDEsJWZwMAkJfGNhbGN1bGF0ZSBYICogU0NBTEUgLT4gWSB0byBmcDAKKworCit8IEExMC4gT3IgaW4gSU5FWC4KK3wgICAgICBJZiBJTkVYIGlzIHNldCwgcm91bmQgZXJyb3Igb2NjdXJyZWQuICBUaGlzIGlzIGNvbXBlbnNhdGVkCit8ICAgICAgZm9yIGJ5ICdvci1pbmcnIGluIHRoZSBJTkVYMiBmbGFnIHRvIHRoZSBsc2Igb2YgWS4KK3wKK3wgUmVnaXN0ZXIgdXNhZ2U6Cit8CUlucHV0L091dHB1dAorfAlkMDogRlBDUiB3aXRoIFJaIG1vZGUvRlBTUiB3aXRoIElORVgyIGlzb2xhdGVkCit8CWQyOiB4L3gKK3wJZDM6IHgveAorfAlkNDogTEVOL1VuY2hhbmdlZAorfAlkNTogSUNUUjpMQU1CREEKK3wJZDY6IElMT0cvVW5jaGFuZ2VkCit8CWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKK3wJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9maW5hbCByZXN1bHQKK3wJYTE6IHB0ciB0byBQVEVOeHggYXJyYXkvVW5jaGFuZ2VkCit8CWEyOiB4L3B0ciB0byBGUF9TQ1IyKGE2KQorfAlmcDA6IFkvWSB3aXRoIGxzYiBhZGp1c3RlZAorfAlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKK3wJZnAyOiB4L3gKKworQTEwX3N0OgorCWZtb3ZlbAklRlBTUiwlZDAJCXxnZXQgRlBTUgorCWZtb3ZleAklZnAwLEZQX1NDUjIoJWE2KQl8bW92ZSBZIHRvIG1lbW9yeQorCWxlYWwJRlBfU0NSMiglYTYpLCVhMgl8bG9hZCBhMiB3aXRoIHB0ciB0byBGUF9TQ1IyCisJYnRzdGwJIzksJWQwCQl8Y2hlY2sgaWYgSU5FWDIgc2V0CisJYmVxcwlBMTFfc3QJCXxpZiBjbGVhciwgc2tpcCByZXN0CisJb3JpbAkjMSw4KCVhMikJfG9yIGluIDEgdG8gbHNiIG9mIG1hbnRpc3NhCisJZm1vdmV4CUZQX1NDUjIoJWE2KSwlZnAwCXx3cml0ZSBhZGp1c3RlZCBZIGJhY2sgdG8gZnB1CisKKworfCBBMTEuIFJlc3RvcmUgb3JpZ2luYWwgRlBDUjsgc2V0IHNpemUgZXh0LgorfCAgICAgIFBlcmZvcm0gRklOVCBvcGVyYXRpb24gaW4gdGhlIHVzZXIncyByb3VuZGluZyBtb2RlLiAgS2VlcAorfCAgICAgIHRoZSBzaXplIHRvIGV4dGVuZGVkLiAgVGhlIHNpbnRkbyBlbnRyeSBwb2ludCBpbiB0aGUgc2ludAorfCAgICAgIHJvdXRpbmUgZXhwZWN0cyB0aGUgRlBDUiB2YWx1ZSB0byBiZSBpbiBVU0VSX0ZQQ1IgZm9yCit8ICAgICAgbW9kZSBhbmQgcHJlY2lzaW9uLiAgVGhlIG9yaWdpbmFsIEZQQ1IgaXMgc2F2ZWQgaW4gTF9TQ1IxLgorCitBMTFfc3Q6CisJbW92ZWwJVVNFUl9GUENSKCVhNiksTF9TQ1IxKCVhNikgfHNhdmUgaXQgZm9yIGxhdGVyCisJYW5kaWwJIzB4MDAwMDAwMzAsVVNFUl9GUENSKCVhNikgfHNldCBzaXplIHRvIGV4dCwKK3wJCQkJCTtibG9jayBleGNlcHRpb25zCisKKworfCBBMTIuIENhbGN1bGF0ZSBZSU5UID0gRklOVChZKSBhY2NvcmRpbmcgdG8gdXNlcidzIHJvdW5kaW5nIG1vZGUuCit8ICAgICAgVGhlIEZQU1Agcm91dGluZSBzaW50ZDAgaXMgdXNlZC4gIFRoZSBvdXRwdXQgaXMgaW4gZnAwLgorfAorfCBSZWdpc3RlciB1c2FnZToKK3wJSW5wdXQvT3V0cHV0Cit8CWQwOiBGUFNSIHdpdGggQUlORVggY2xlYXJlZC9GUENSIHdpdGggc2l6ZSBzZXQgdG8gZXh0Cit8CWQyOiB4L3gvc2NyYXRjaAorfAlkMzogeC94Cit8CWQ0OiBMRU4vVW5jaGFuZ2VkCit8CWQ1OiBJQ1RSOkxBTUJEQS9VbmNoYW5nZWQKK3wJZDY6IElMT0cvVW5jaGFuZ2VkCit8CWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKK3wJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9zcmMgcHRyIGZvciBzaW50ZG8KK3wJYTE6IHB0ciB0byBQVEVOeHggYXJyYXkvVW5jaGFuZ2VkCit8CWEyOiBwdHIgdG8gRlBfU0NSMihhNikvVW5jaGFuZ2VkCit8CWE2OiB0ZW1wIHBvaW50ZXIgdG8gRlBfU0NSMihhNikgLSBvcmlnIHZhbHVlIHNhdmVkIGFuZCByZXN0b3JlZAorfAlmcDA6IFkvWUlOVAorfAlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKK3wJZnAyOiB4L3gKK3wJRl9TQ1IxOngveAorfAlGX1NDUjI6WSBhZGp1c3RlZCBmb3IgaW5leC9ZIHdpdGggb3JpZ2luYWwgZXhwb25lbnQKK3wJTF9TQ1IxOngvb3JpZ2luYWwgVVNFUl9GUENSCit8CUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBMTJfc3Q6CisJbW92ZW1sCSVkMC0lZDEvJWEwLSVhMSwtKCVhNykJfHNhdmUgcmVncyB1c2VkIGJ5IHNpbnRkMAorCW1vdmVsCUxfU0NSMSglYTYpLC0oJWE3KQorCW1vdmVsCUxfU0NSMiglYTYpLC0oJWE3KQorCWxlYWwJRlBfU0NSMiglYTYpLCVhMAkJfGEwIGlzIHB0ciB0byBGX1NDUjIoYTYpCisJZm1vdmV4CSVmcDAsKCVhMCkJCXxtb3ZlIFkgdG8gbWVtb3J5IGF0IEZQX1NDUjIoYTYpCisJdHN0bAlMX1NDUjIoJWE2KQkJfHRlc3Qgc2lnbiBvZiBvcmlnaW5hbCBvcGVyYW5kCisJYmdlcwlkb19maW50CQkJfGlmIHBvcywgdXNlIFkKKwlvcmwJIzB4ODAwMDAwMDAsKCVhMCkJCXxpZiBuZWcsIHVzZSAtWQorZG9fZmludDoKKwltb3ZlbAlVU0VSX0ZQU1IoJWE2KSwtKCVhNykKKwlic3IJc2ludGRvCQkJfHNpbnQgcm91dGluZSByZXR1cm5zIGludCBpbiBmcDAKKwltb3ZlYgkoJWE3KSxVU0VSX0ZQU1IoJWE2KQorCWFkZGwJIzQsJWE3CisJbW92ZWwJKCVhNykrLExfU0NSMiglYTYpCisJbW92ZWwJKCVhNykrLExfU0NSMSglYTYpCisJbW92ZW1sCSglYTcpKywlZDAtJWQxLyVhMC0lYTEJfHJlc3RvcmUgcmVncyB1c2VkIGJ5IHNpbnQKKwltb3ZlbAlMX1NDUjIoJWE2KSxGUF9TQ1IyKCVhNikJfHJlc3RvcmUgb3JpZ2luYWwgZXhwb25lbnQKKwltb3ZlbAlMX1NDUjEoJWE2KSxVU0VSX0ZQQ1IoJWE2KSB8cmVzdG9yZSB1c2VyJ3MgRlBDUgorCisKK3wgQTEzLiBDaGVjayBmb3IgTEVOIGRpZ2l0cy4KK3wgICAgICBJZiB0aGUgaW50IG9wZXJhdGlvbiByZXN1bHRzIGluIG1vcmUgdGhhbiBMRU4gZGlnaXRzLAorfCAgICAgIG9yIGxlc3MgdGhhbiBMRU4gLTEgZGlnaXRzLCBhZGp1c3QgSUxPRyBhbmQgcmVwZWF0IGZyb20KK3wgICAgICBBNi4gIFRoaXMgdGVzdCBvY2N1cnMgb25seSBvbiB0aGUgZmlyc3QgcGFzcy4gIElmIHRoZQorfCAgICAgIHJlc3VsdCBpcyBleGFjdGx5IDEwXkxFTiwgZGVjcmVtZW50IElMT0cgYW5kIGRpdmlkZQorfCAgICAgIHRoZSBtYW50aXNzYSBieSAxMC4gIFRoZSBjYWxjdWxhdGlvbiBvZiAxMF5MRU4gY2Fubm90Cit8ICAgICAgYmUgaW5leGFjdCwgc2luY2UgYWxsIHBvd2VycyBvZiB0ZW4gdXB0byAxMF4yNyBhcmUgZXhhY3QKK3wgICAgICBpbiBleHRlbmRlZCBwcmVjaXNpb24sIHNvIHRoZSB1c2Ugb2YgYSBwcmV2aW91cyBwb3dlci1vZi10ZW4KK3wgICAgICB0YWJsZSB3aWxsIGludHJvZHVjZSBubyBlcnJvci4KK3wKK3wKK3wgUmVnaXN0ZXIgdXNhZ2U6Cit8CUlucHV0L091dHB1dAorfAlkMDogRlBDUiB3aXRoIHNpemUgc2V0IHRvIGV4dC9zY3JhdGNoIGZpbmFsID0gMAorfAlkMjogeC94Cit8CWQzOiB4L3NjcmF0Y2ggZmluYWwgPSB4Cit8CWQ0OiBMRU4vTEVOIGFkanVzdGVkCit8CWQ1OiBJQ1RSOkxBTUJEQS9MQU1CREE6SUNUUgorfAlkNjogSUxPRy9JTE9HIGFkanVzdGVkCit8CWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKK3wJYTA6IHBvaW50ZXIgaW50byBtZW1vcnkgZm9yIHBhY2tlZCBiY2Qgc3RyaW5nIGZvcm1hdGlvbgorfAlhMTogcHRyIHRvIFBURU54eCBhcnJheS9VbmNoYW5nZWQKK3wJYTI6IHB0ciB0byBGUF9TQ1IyKGE2KS9VbmNoYW5nZWQKK3wJZnAwOiBpbnQgcG9ydGlvbiBvZiBZL2FicyhZSU5UKSBhZGp1c3RlZAorfAlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKK3wJZnAyOiB4LzEwXkxFTgorfAlGX1NDUjE6eC94Cit8CUZfU0NSMjpZIHdpdGggb3JpZ2luYWwgZXhwb25lbnQvVW5jaGFuZ2VkCit8CUxfU0NSMTpvcmlnaW5hbCBVU0VSX0ZQQ1IvVW5jaGFuZ2VkCit8CUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBMTNfc3Q6CisJc3dhcAklZDUJCXxwdXQgSUNUUiBpbiBsb3dlciB3b3JkIG9mIGQ1CisJdHN0dwklZDUJCXxjaGVjayBpZiBJQ1RSID0gMAorCWJuZQlub3RfenIJCXxpZiBub24temVybywgZ28gdG8gc2Vjb25kIHRlc3QKK3wKK3wgQ29tcHV0ZSAxMF4oTEVOLTEpCit8CisJZm1vdmVzCUZPTkUsJWZwMgl8aW5pdCBmcDIgdG8gMS4wCisJbW92ZWwJJWQ0LCVkMAkJfHB1dCBMRU4gaW4gZDAKKwlzdWJxbAkjMSwlZDAJCXxkMCA9IExFTiAtMQorCWNscmwJJWQzCQl8Y2xyIHRhYmxlIGluZGV4CitsX2xvb3A6CisJbHNybAkjMSwlZDAJCXxzaGlmdCBuZXh0IGJpdCBpbnRvIGNhcnJ5CisJYmNjcwlsX25leHQJCXxpZiB6ZXJvLCBza2lwIHRoZSBtdWwKKwlmbXVseAkoJWExLCVkMyksJWZwMgl8bXVsIGJ5IDEwKiooZDNfYml0X25vKQorbF9uZXh0OgorCWFkZGwJIzEyLCVkMwkJfGluYyBkMyB0byBuZXh0IHB3cnRlbiB0YWJsZSBlbnRyeQorCXRzdGwJJWQwCQl8dGVzdCBpZiBMRU4gaXMgemVybworCWJuZXMJbF9sb29wCQl8aWYgbm90LCBsb29wCit8Cit8IDEwXkxFTi0xIGlzIGNvbXB1dGVkIGZvciB0aGlzIHRlc3QgYW5kIEExNC4gIElmIHRoZSBpbnB1dCB3YXMKK3wgZGVub3JtYWxpemVkLCBjaGVjayBvbmx5IHRoZSBjYXNlIGluIHdoaWNoIFlJTlQgPiAxMF5MRU4uCit8CisJdHN0YglCSU5ERUNfRkxHKCVhNikJfGNoZWNrIGlmIGlucHV0IHdhcyBub3JtCisJYmVxcwlBMTNfY29uCQl8aWYgbm9ybSwgY29udGludWUgd2l0aCBjaGVja2luZworCWZhYnN4CSVmcDAJCXx0YWtlIGFicyBvZiBZSU5UCisJYnJhCXRlc3RfMgorfAorfCBDb21wYXJlIGFicyhZSU5UKSB0byAxMF4oTEVOLTEpIGFuZCAxMF5MRU4KK3wKK0ExM19jb246CisJZmFic3gJJWZwMAkJfHRha2UgYWJzIG9mIFlJTlQKKwlmY21weAklZnAyLCVmcDAJCXxjb21wYXJlIGFicyhZSU5UKSB3aXRoIDEwXihMRU4tMSkKKwlmYmdlCXRlc3RfMgkJfGlmIGdyZWF0ZXIsIGRvIG5leHQgdGVzdAorCXN1YnFsCSMxLCVkNgkJfHN1YnRyYWN0IDEgZnJvbSBJTE9HCisJbW92ZXcJIzEsJWQ1CQl8c2V0IElDVFIKKwlmbW92ZWwJI3JtX21vZGUsJUZQQ1IJfHNldCBybW9kZSB0byBSTQorCWZtdWxzCUZURU4sJWZwMgl8Y29tcHV0ZSAxMF5MRU4KKwlicmEJQTZfc3RyCQl8cmV0dXJuIHRvIEE2IGFuZCByZWNvbXB1dGUgWUlOVAordGVzdF8yOgorCWZtdWxzCUZURU4sJWZwMgl8Y29tcHV0ZSAxMF5MRU4KKwlmY21weAklZnAyLCVmcDAJCXxjb21wYXJlIGFicyhZSU5UKSB3aXRoIDEwXkxFTgorCWZibHQJQTE0X3N0CQl8aWYgbGVzcywgYWxsIGlzIG9rLCBnbyB0byBBMTQKKwlmYmd0CWZpeF9leAkJfGlmIGdyZWF0ZXIsIGZpeCBhbmQgcmVkbworCWZkaXZzCUZURU4sJWZwMAl8aWYgZXF1YWwsIGRpdmlkZSBieSAxMAorCWFkZHFsCSMxLCVkNgkJfCBhbmQgaW5jIElMT0cKKwlicmFzCUExNF9zdAkJfCBhbmQgY29udGludWUgZWxzZXdoZXJlCitmaXhfZXg6CisJYWRkcWwJIzEsJWQ2CQl8aW5jcmVtZW50IElMT0cgYnkgMQorCW1vdmV3CSMxLCVkNQkJfHNldCBJQ1RSCisJZm1vdmVsCSNybV9tb2RlLCVGUENSCXxzZXQgcm1vZGUgdG8gUk0KKwlicmEJQTZfc3RyCQl8cmV0dXJuIHRvIEE2IGFuZCByZWNvbXB1dGUgWUlOVAorfAorfCBTaW5jZSBJQ1RSIDw+IDAsIHdlIGhhdmUgYWxyZWFkeSBiZWVuIHRocm91Z2ggb25lIGFkanVzdG1lbnQsCit8IGFuZCBzaG91bGRuJ3QgaGF2ZSBhbm90aGVyOyB0aGlzIGlzIHRvIGNoZWNrIGlmIGFicyhZSU5UKSA9IDEwXkxFTgorfCAxMF5MRU4gaXMgYWdhaW4gY29tcHV0ZWQgdXNpbmcgd2hhdGV2ZXIgdGFibGUgaXMgaW4gYTEgc2luY2UgdGhlCit8IHZhbHVlIGNhbGN1bGF0ZWQgY2Fubm90IGJlIGluZXhhY3QuCit8Citub3RfenI6CisJZm1vdmVzCUZPTkUsJWZwMgl8aW5pdCBmcDIgdG8gMS4wCisJbW92ZWwJJWQ0LCVkMAkJfHB1dCBMRU4gaW4gZDAKKwljbHJsCSVkMwkJfGNsciB0YWJsZSBpbmRleAorel9sb29wOgorCWxzcmwJIzEsJWQwCQl8c2hpZnQgbmV4dCBiaXQgaW50byBjYXJyeQorCWJjY3MJel9uZXh0CQl8aWYgemVybywgc2tpcCB0aGUgbXVsCisJZm11bHgJKCVhMSwlZDMpLCVmcDIJfG11bCBieSAxMCoqKGQzX2JpdF9ubykKK3pfbmV4dDoKKwlhZGRsCSMxMiwlZDMJCXxpbmMgZDMgdG8gbmV4dCBwd3J0ZW4gdGFibGUgZW50cnkKKwl0c3RsCSVkMAkJfHRlc3QgaWYgTEVOIGlzIHplcm8KKwlibmVzCXpfbG9vcAkJfGlmIG5vdCwgbG9vcAorCWZhYnN4CSVmcDAJCXxnZXQgYWJzKFlJTlQpCisJZmNtcHgJJWZwMiwlZnAwCQl8Y2hlY2sgaWYgYWJzKFlJTlQpID0gMTBeTEVOCisJZmJuZQlBMTRfc3QJCXxpZiBub3QsIHNraXAgdGhpcworCWZkaXZzCUZURU4sJWZwMAl8ZGl2aWRlIGFicyhZSU5UKSBieSAxMAorCWFkZHFsCSMxLCVkNgkJfGFuZCBpbmMgSUxPRyBieSAxCisJYWRkcWwJIzEsJWQ0CQl8IGFuZCBpbmMgTEVOCisJZm11bHMJRlRFTiwlZnAyCXwgaWYgTEVOKyssIHRoZSBnZXQgMTBeXkxFTgorCisKK3wgQTE0LiBDb252ZXJ0IHRoZSBtYW50aXNzYSB0byBiY2QuCit8ICAgICAgVGhlIGJpbnN0ciByb3V0aW5lIGlzIHVzZWQgdG8gY29udmVydCB0aGUgTEVOIGRpZ2l0Cit8ICAgICAgbWFudGlzc2EgdG8gYmNkIGluIG1lbW9yeS4gIFRoZSBpbnB1dCB0byBiaW5zdHIgaXMKK3wgICAgICB0byBiZSBhIGZyYWN0aW9uOyBpLmUuIChtYW50aXNzYSkvMTBeTEVOIGFuZCBhZGp1c3RlZAorfCAgICAgIHN1Y2ggdGhhdCB0aGUgZGVjaW1hbCBwb2ludCBpcyB0byB0aGUgbGVmdCBvZiBiaXQgNjMuCit8ICAgICAgVGhlIGJjZCBkaWdpdHMgYXJlIHN0b3JlZCBpbiB0aGUgY29ycmVjdCBwb3NpdGlvbiBpbgorfCAgICAgIHRoZSBmaW5hbCBzdHJpbmcgYXJlYSBpbiBtZW1vcnkuCit8Cit8Cit8IFJlZ2lzdGVyIHVzYWdlOgorfAlJbnB1dC9PdXRwdXQKK3wJZDA6IHgvTEVOIGNhbGwgdG8gYmluc3RyIC0gZmluYWwgaXMgMAorfAlkMTogeC8wCit8CWQyOiB4L21zIDMyLWJpdHMgb2YgbWFudCBvZiBhYnMoWUlOVCkKK3wJZDM6IHgvbHMgMzItYml0cyBvZiBtYW50IG9mIGFicyhZSU5UKQorfAlkNDogTEVOL1VuY2hhbmdlZAorfAlkNTogSUNUUjpMQU1CREEvTEFNQkRBOklDVFIKK3wJZDY6IElMT0cKK3wJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAorfAlhMDogcG9pbnRlciBpbnRvIG1lbW9yeSBmb3IgcGFja2VkIGJjZCBzdHJpbmcgZm9ybWF0aW9uCit8CSAgICAvcHRyIHRvIGZpcnN0IG1hbnRpc3NhIGJ5dGUgaW4gcmVzdWx0IHN0cmluZworfAlhMTogcHRyIHRvIFBURU54eCBhcnJheS9VbmNoYW5nZWQKK3wJYTI6IHB0ciB0byBGUF9TQ1IyKGE2KS9VbmNoYW5nZWQKK3wJZnAwOiBpbnQgcG9ydGlvbiBvZiBZL2FicyhZSU5UKSBhZGp1c3RlZAorfAlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKK3wJZnAyOiAxMF5MRU4vVW5jaGFuZ2VkCit8CUZfU0NSMTp4L1dvcmsgYXJlYSBmb3IgZmluYWwgcmVzdWx0Cit8CUZfU0NSMjpZIHdpdGggb3JpZ2luYWwgZXhwb25lbnQvVW5jaGFuZ2VkCit8CUxfU0NSMTpvcmlnaW5hbCBVU0VSX0ZQQ1IvVW5jaGFuZ2VkCit8CUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBMTRfc3Q6CisJZm1vdmVsCSNyel9tb2RlLCVGUENSCXxmb3JjZSByeiBmb3IgY29udmVyc2lvbgorCWZkaXZ4CSVmcDIsJWZwMAkJfGRpdmlkZSBhYnMoWUlOVCkgYnkgMTBeTEVOCisJbGVhbAlGUF9TQ1IxKCVhNiksJWEwCisJZm1vdmV4CSVmcDAsKCVhMCkJfG1vdmUgYWJzKFlJTlQpLzEwXkxFTiB0byBtZW1vcnkKKwltb3ZlbAk0KCVhMCksJWQyCXxtb3ZlIDJuZCB3b3JkIG9mIEZQX1JFUyB0byBkMgorCW1vdmVsCTgoJWEwKSwlZDMJfG1vdmUgM3JkIHdvcmQgb2YgRlBfUkVTIHRvIGQzCisJY2xybAk0KCVhMCkJCXx6ZXJvIHdvcmQgMiBvZiBGUF9SRVMKKwljbHJsCTgoJWEwKQkJfHplcm8gd29yZCAzIG9mIEZQX1JFUworCW1vdmVsCSglYTApLCVkMAkJfG1vdmUgZXhwb25lbnQgdG8gZDAKKwlzd2FwCSVkMAkJfHB1dCBleHBvbmVudCBpbiBsb3dlciB3b3JkCisJYmVxcwlub19zZnQJCXxpZiB6ZXJvLCBkb24ndCBzaGlmdAorCXN1YmlsCSMweDNmZmQsJWQwCXxzdWIgYmlhcyBsZXNzIDIgdG8gbWFrZSBmcmFjdAorCXRzdGwJJWQwCQl8Y2hlY2sgaWYgPiAxCisJYmd0cwlub19zZnQJCXxpZiBzbywgZG9uJ3Qgc2hpZnQKKwluZWdsCSVkMAkJfG1ha2UgZXhwIHBvc2l0aXZlCittX2xvb3A6CisJbHNybAkjMSwlZDIJCXxzaGlmdCBkMjpkMyByaWdodCwgYWRkIDBzCisJcm94cmwJIzEsJWQzCQl8dGhlIG51bWJlciBvZiBwbGFjZXMKKwlkYmYJJWQwLG1fbG9vcAl8Z2l2ZW4gaW4gZDAKK25vX3NmdDoKKwl0c3RsCSVkMgkJfGNoZWNrIGZvciBtYW50aXNzYSBvZiB6ZXJvCisJYm5lcwlub196cgkJfGlmIG5vdCwgZ28gb24KKwl0c3RsCSVkMwkJfGNvbnRpbnVlIHplcm8gY2hlY2sKKwliZXFzCXplcl9tCQl8aWYgemVybywgZ28gZGlyZWN0bHkgdG8gYmluc3RyCitub196cjoKKwljbHJsCSVkMQkJfHB1dCB6ZXJvIGluIGQxIGZvciBhZGR4CisJYWRkaWwJIzB4MDAwMDAwODAsJWQzCXxpbmMgYXQgYml0IDcKKwlhZGR4bAklZDEsJWQyCQl8Y29udGludWUgaW5jCisJYW5kaWwJIzB4ZmZmZmZmODAsJWQzCXxzdHJpcCBvZmYgbHNiIG5vdCB1c2VkIGJ5IDg4MgoremVyX206CisJbW92ZWwJJWQ0LCVkMAkJfHB1dCBMRU4gaW4gZDAgZm9yIGJpbnN0ciBjYWxsCisJYWRkcWwJIzMsJWEwCQl8YTAgcG9pbnRzIHRvIE0xNiBieXRlIGluIHJlc3VsdAorCWJzcgliaW5zdHIJCXxjYWxsIGJpbnN0ciB0byBjb252ZXJ0IG1hbnQKKworCit8IEExNS4gQ29udmVydCB0aGUgZXhwb25lbnQgdG8gYmNkLgorfCAgICAgIEFzIGluIEExNCBhYm92ZSwgdGhlIGV4cCBpcyBjb252ZXJ0ZWQgdG8gYmNkIGFuZCB0aGUKK3wgICAgICBkaWdpdHMgYXJlIHN0b3JlZCBpbiB0aGUgZmluYWwgc3RyaW5nLgorfAorfCAgICAgIERpZ2l0cyBhcmUgc3RvcmVkIGluIExfU0NSMShhNikgb24gcmV0dXJuIGZyb20gQklOREVDIGFzOgorfAorfAkgMzIgICAgICAgICAgICAgICAxNiAxNSAgICAgICAgICAgICAgICAwCit8CS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8CXwgIDAgfCBlMyB8IGUyIHwgZTEgfCBlNCB8ICBYIHwgIFggfCAgWCB8Cit8CS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8Cit8IEFuZCBhcmUgbW92ZWQgaW50byB0aGVpciBwcm9wZXIgcGxhY2VzIGluIEZQX1NDUjEuICBJZiBkaWdpdCBlNAorfCBpcyBub24temVybywgT1BFUlIgaXMgc2lnbmFsZWQuICBJbiBhbGwgY2FzZXMsIGFsbCA0IGRpZ2l0cyBhcmUKK3wgd3JpdHRlbiBhcyBzcGVjaWZpZWQgaW4gdGhlIDg4MS84ODIgbWFudWFsIGZvciBwYWNrZWQgZGVjaW1hbC4KK3wKK3wgUmVnaXN0ZXIgdXNhZ2U6Cit8CUlucHV0L091dHB1dAorfAlkMDogeC9MRU4gY2FsbCB0byBiaW5zdHIgLSBmaW5hbCBpcyAwCit8CWQxOiB4L3NjcmF0Y2ggKDApO3NoaWZ0IGNvdW50IGZvciBmaW5hbCBleHBvbmVudCBwYWNraW5nCit8CWQyOiB4L21zIDMyLWJpdHMgb2YgZXhwIGZyYWN0aW9uL3NjcmF0Y2gKK3wJZDM6IHgvbHMgMzItYml0cyBvZiBleHAgZnJhY3Rpb24KK3wJZDQ6IExFTi9VbmNoYW5nZWQKK3wJZDU6IElDVFI6TEFNQkRBL0xBTUJEQTpJQ1RSCit8CWQ2OiBJTE9HCit8CWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKK3wJYTA6IHB0ciB0byByZXN1bHQgc3RyaW5nL3B0ciB0byBMX1NDUjEoYTYpCit8CWExOiBwdHIgdG8gUFRFTnh4IGFycmF5L1VuY2hhbmdlZAorfAlhMjogcHRyIHRvIEZQX1NDUjIoYTYpL1VuY2hhbmdlZAorfAlmcDA6IGFicyhZSU5UKSBhZGp1c3RlZC9mbG9hdChJTE9HKQorfAlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKK3wJZnAyOiAxMF5MRU4vVW5jaGFuZ2VkCit8CUZfU0NSMTpXb3JrIGFyZWEgZm9yIGZpbmFsIHJlc3VsdC9CQ0QgcmVzdWx0Cit8CUZfU0NSMjpZIHdpdGggb3JpZ2luYWwgZXhwb25lbnQvSUxPRy8xMF40Cit8CUxfU0NSMTpvcmlnaW5hbCBVU0VSX0ZQQ1IvRXhwb25lbnQgZGlnaXRzIG9uIHJldHVybiBmcm9tIGJpbnN0cgorfAlMX1NDUjI6Zmlyc3Qgd29yZCBvZiBYIHBhY2tlZC9VbmNoYW5nZWQKKworQTE1X3N0OgorCXRzdGIJQklOREVDX0ZMRyglYTYpCXxjaGVjayBmb3IgZGVub3JtCisJYmVxcwlub3RfZGVub3JtCisJZnRzdHgJJWZwMAkJfHRlc3QgZm9yIHplcm8KKwlmYmVxCWRlbl96ZXJvCXxpZiB6ZXJvLCB1c2Ugay1mYWN0b3Igb3IgNDkzMworCWZtb3ZlbAklZDYsJWZwMAkJfGZsb2F0IElMT0cKKwlmYWJzeAklZnAwCQl8Z2V0IGFicyBvZiBJTE9HCisJYnJhcwljb252cnQKK2Rlbl96ZXJvOgorCXRzdGwJJWQ3CQl8Y2hlY2sgc2lnbiBvZiB0aGUgay1mYWN0b3IKKwlibHRzCXVzZV9pbG9nCXxpZiBuZWdhdGl2ZSwgdXNlIElMT0cKKwlmbW92ZXMJRjQ5MzMsJWZwMAl8Zm9yY2UgZXhwb25lbnQgdG8gNDkzMworCWJyYXMJY29udnJ0CQl8ZG8gaXQKK3VzZV9pbG9nOgorCWZtb3ZlbAklZDYsJWZwMAkJfGZsb2F0IElMT0cKKwlmYWJzeAklZnAwCQl8Z2V0IGFicyBvZiBJTE9HCisJYnJhcwljb252cnQKK25vdF9kZW5vcm06CisJZnRzdHgJJWZwMAkJfHRlc3QgZm9yIHplcm8KKwlmYm5lCW5vdF96ZXJvCXxpZiB6ZXJvLCBmb3JjZSBleHBvbmVudAorCWZtb3ZlcwlGT05FLCVmcDAJfGZvcmNlIGV4cG9uZW50IHRvIDEKKwlicmFzCWNvbnZydAkJfGRvIGl0Citub3RfemVybzoKKwlmbW92ZWwJJWQ2LCVmcDAJCXxmbG9hdCBJTE9HCisJZmFic3gJJWZwMAkJfGdldCBhYnMgb2YgSUxPRworY29udnJ0OgorCWZkaXZ4CTI0KCVhMSksJWZwMAl8Y29tcHV0ZSBJTE9HLzEwXjQKKwlmbW92ZXgJJWZwMCxGUF9TQ1IyKCVhNikJfHN0b3JlIGZwMCBpbiBtZW1vcnkKKwltb3ZlbAk0KCVhMiksJWQyCXxtb3ZlIHdvcmQgMiB0byBkMgorCW1vdmVsCTgoJWEyKSwlZDMJfG1vdmUgd29yZCAzIHRvIGQzCisJbW92ZXcJKCVhMiksJWQwCQl8bW92ZSBleHAgdG8gZDAKKwliZXFzCXhfbG9vcF9maW4JfGlmIHplcm8sIHNraXAgdGhlIHNoaWZ0CisJc3ViaXcJIzB4M2ZmZCwlZDAJfHN1YnRyYWN0IG9mZiBiaWFzCisJbmVndwklZDAJCXxtYWtlIGV4cCBwb3NpdGl2ZQoreF9sb29wOgorCWxzcmwJIzEsJWQyCQl8c2hpZnQgZDI6ZDMgcmlnaHQKKwlyb3hybAkjMSwlZDMJCXx0aGUgbnVtYmVyIG9mIHBsYWNlcworCWRiZgklZDAseF9sb29wCXxnaXZlbiBpbiBkMAoreF9sb29wX2ZpbjoKKwljbHJsCSVkMQkJfHB1dCB6ZXJvIGluIGQxIGZvciBhZGR4CisJYWRkaWwJIzB4MDAwMDAwODAsJWQzCXxpbmMgYXQgYml0IDYKKwlhZGR4bAklZDEsJWQyCQl8Y29udGludWUgaW5jCisJYW5kaWwJIzB4ZmZmZmZmODAsJWQzCXxzdHJpcCBvZmYgbHNiIG5vdCB1c2VkIGJ5IDg4MgorCW1vdmVsCSM0LCVkMAkJfHB1dCA0IGluIGQwIGZvciBiaW5zdHIgY2FsbAorCWxlYWwJTF9TQ1IxKCVhNiksJWEwCXxhMCBpcyBwdHIgdG8gTF9TQ1IxIGZvciBleHAgZGlnaXRzCisJYnNyCWJpbnN0cgkJfGNhbGwgYmluc3RyIHRvIGNvbnZlcnQgZXhwCisJbW92ZWwJTF9TQ1IxKCVhNiksJWQwCXxsb2FkIExfU0NSMSBsd29yZCB0byBkMAorCW1vdmVsCSMxMiwlZDEJCXx1c2UgZDEgZm9yIHNoaWZ0IGNvdW50CisJbHNybAklZDEsJWQwCQl8c2hpZnQgZDAgcmlnaHQgYnkgMTIKKwliZmlucwklZDAsRlBfU0NSMSglYTYpeyM0OiMxMn0gfHB1dCBlMzplMjplMSBpbiBGUF9TQ1IxCisJbHNybAklZDEsJWQwCQl8c2hpZnQgZDAgcmlnaHQgYnkgMTIKKwliZmlucwklZDAsRlBfU0NSMSglYTYpeyMxNjojNH0gfHB1dCBlNCBpbiBGUF9TQ1IxCisJdHN0YgklZDAJCXxjaGVjayBpZiBlNCBpcyB6ZXJvCisJYmVxcwlBMTZfc3QJCXxpZiB6ZXJvLCBza2lwIHJlc3QKKwlvcmwJI29wYW9wX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBPUEVSUiAmIEFJT1AgaW4gVVNFUl9GUFNSCisKKworfCBBMTYuIFdyaXRlIHNpZ24gYml0cyB0byBmaW5hbCBzdHJpbmcuCit8CSAgIFNpZ21hIGlzIGJpdCAzMSBvZiBpbml0aWFsIHZhbHVlOyBSSE8gaXMgYml0IDMxIG9mIGQ2IChJTE9HKS4KK3wKK3wgUmVnaXN0ZXIgdXNhZ2U6Cit8CUlucHV0L091dHB1dAorfAlkMDogeC9zY3JhdGNoIC0gZmluYWwgaXMgeAorfAlkMjogeC94Cit8CWQzOiB4L3gKK3wJZDQ6IExFTi9VbmNoYW5nZWQKK3wJZDU6IElDVFI6TEFNQkRBL0xBTUJEQTpJQ1RSCit8CWQ2OiBJTE9HL0lMT0cgYWRqdXN0ZWQKK3wJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAorfAlhMDogcHRyIHRvIExfU0NSMShhNikvVW5jaGFuZ2VkCit8CWExOiBwdHIgdG8gUFRFTnh4IGFycmF5L1VuY2hhbmdlZAorfAlhMjogcHRyIHRvIEZQX1NDUjIoYTYpL1VuY2hhbmdlZAorfAlmcDA6IGZsb2F0KElMT0cpL1VuY2hhbmdlZAorfAlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKK3wJZnAyOiAxMF5MRU4vVW5jaGFuZ2VkCit8CUZfU0NSMTpCQ0QgcmVzdWx0IHdpdGggY29ycmVjdCBzaWducworfAlGX1NDUjI6SUxPRy8xMF40Cit8CUxfU0NSMTpFeHBvbmVudCBkaWdpdHMgb24gcmV0dXJuIGZyb20gYmluc3RyCit8CUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBMTZfc3Q6CisJY2xybAklZDAJCXxjbHIgZDAgZm9yIGNvbGxlY3Rpb24gb2Ygc2lnbnMKKwlhbmRpYgkjMHgwZixGUF9TQ1IxKCVhNikgfGNsZWFyIGZpcnN0IG5pYmJsZSBvZiBGUF9TQ1IxCisJdHN0bAlMX1NDUjIoJWE2KQl8Y2hlY2sgc2lnbiBvZiBvcmlnaW5hbCBtYW50aXNzYQorCWJnZXMJbWFudF9wCQl8aWYgcG9zLCBkb24ndCBzZXQgU00KKwltb3ZlcWwJIzIsJWQwCQl8bW92ZSAyIGluIHRvIGQwIGZvciBTTQorbWFudF9wOgorCXRzdGwJJWQ2CQl8Y2hlY2sgc2lnbiBvZiBJTE9HCisJYmdlcwl3cl9zZ24JCXxpZiBwb3MsIGRvbid0IHNldCBTRQorCWFkZHFsCSMxLCVkMAkJfHNldCBiaXQgMCBpbiBkMCBmb3IgU0UKK3dyX3NnbjoKKwliZmlucwklZDAsRlBfU0NSMSglYTYpeyMwOiMyfSB8aW5zZXJ0IFNNIGFuZCBTRSBpbnRvIEZQX1NDUjEKKworfCBDbGVhbiB1cCBhbmQgcmVzdG9yZSBhbGwgcmVnaXN0ZXJzIHVzZWQuCisKKwlmbW92ZWwJIzAsJUZQU1IJCXxjbGVhciBwb3NzaWJsZSBpbmV4Mi9haW5leCBiaXRzCisJZm1vdmVteCAoJWE3KSssJWZwMC0lZnAyCisJbW92ZW1sCSglYTcpKywlZDItJWQ3LyVhMgorCXJ0cworCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvYmluc3RyLlMgYi9hcmNoL202OGsvZnBzcDA0MC9iaW5zdHIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTM1NTVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAvYmluc3RyLlMKQEAgLTAsMCArMSwxNDAgQEAKK3wKK3wJYmluc3RyLnNhIDMuMyAxMi8xOS85MAorfAorfAorfAlEZXNjcmlwdGlvbjogQ29udmVydHMgYSA2NC1iaXQgYmluYXJ5IGludGVnZXIgdG8gYmNkLgorfAorfAlJbnB1dDogNjQtYml0IGJpbmFyeSBpbnRlZ2VyIGluIGQyOmQzLCBkZXNpcmVkIGxlbmd0aCAoTEVOKSBpbgorfCAgICAgICAgICBkMCwgYW5kIGEgIHBvaW50ZXIgdG8gc3RhcnQgaW4gbWVtb3J5IGZvciBiY2QgY2hhcmFjdGVycworfCAgICAgICAgICBpbiBkMC4gKFRoaXMgcG9pbnRlciBtdXN0IHBvaW50IHRvIGJ5dGUgNCBvZiB0aGUgZmlyc3QKK3wgICAgICAgICAgbHdvcmQgb2YgdGhlIHBhY2tlZCBkZWNpbWFsIG1lbW9yeSBzdHJpbmcuKQorfAorfAlPdXRwdXQ6CUxFTiBiY2QgZGlnaXRzIHJlcHJlc2VudGluZyB0aGUgNjQtYml0IGludGVnZXIuCit8Cit8CUFsZ29yaXRobToKK3wJCVRoZSA2NC1iaXQgYmluYXJ5IGlzIGFzc3VtZWQgdG8gaGF2ZSBhIGRlY2ltYWwgcG9pbnQgYmVmb3JlCit8CQliaXQgNjMuICBUaGUgZnJhY3Rpb24gaXMgbXVsdGlwbGllZCBieSAxMCB1c2luZyBhIG11bCBieSAyCit8CQlzaGlmdCBhbmQgYSBtdWwgYnkgOCBzaGlmdC4gIFRoZSBiaXRzIHNoaWZ0ZWQgb3V0IG9mIHRoZQorfAkJbXNiIGZvcm0gYSBkZWNpbWFsIGRpZ2l0LiAgVGhpcyBwcm9jZXNzIGlzIGl0ZXJhdGVkIHVudGlsCit8CQlMRU4gZGlnaXRzIGFyZSBmb3JtZWQuCit8Cit8CUExLiBJbml0IGQ3IHRvIDEuICBENyBpcyB0aGUgYnl0ZSBkaWdpdCBjb3VudGVyLCBhbmQgaWYgMSwgdGhlCit8CQlkaWdpdCBmb3JtZWQgd2lsbCBiZSBhc3N1bWVkIHRoZSBsZWFzdCBzaWduaWZpY2FudC4gIFRoaXMgaXMKK3wJCXRvIGZvcmNlIHRoZSBmaXJzdCBieXRlIGZvcm1lZCB0byBoYXZlIGEgMCBpbiB0aGUgdXBwZXIgNCBiaXRzLgorfAorfAlBMi4gQmVnaW5uaW5nIG9mIHRoZSBsb29wOgorfAkJQ29weSB0aGUgZnJhY3Rpb24gaW4gZDI6ZDMgdG8gZDQ6ZDUuCit8Cit8CUEzLiBNdWx0aXBseSB0aGUgZnJhY3Rpb24gaW4gZDI6ZDMgYnkgOCB1c2luZyBiaXQtZmllbGQKK3wJCWV4dHJhY3RzIGFuZCBzaGlmdHMuICBUaGUgdGhyZWUgbXNicyBmcm9tIGQyIHdpbGwgZ28gaW50bworfAkJZDEuCit8Cit8CUE0LiBNdWx0aXBseSB0aGUgZnJhY3Rpb24gaW4gZDQ6ZDUgYnkgMiB1c2luZyBzaGlmdHMuICBUaGUgbXNiCit8CQl3aWxsIGJlIGNvbGxlY3RlZCBieSB0aGUgY2FycnkuCit8Cit8CUE1LiBBZGQgdXNpbmcgdGhlIGNhcnJ5IHRoZSA2NC1iaXQgcXVhbnRpdGllcyBpbiBkMjpkMyBhbmQgZDQ6ZDUKK3wJCWludG8gZDI6ZDMuICBEMSB3aWxsIGNvbnRhaW4gdGhlIGJjZCBkaWdpdCBmb3JtZWQuCit8Cit8CUE2LiBUZXN0IGQ3LiAgSWYgemVybywgdGhlIGRpZ2l0IGZvcm1lZCBpcyB0aGUgbXMgZGlnaXQuICBJZiBub24tCit8CQl6ZXJvLCBpdCBpcyB0aGUgbHMgZGlnaXQuICBQdXQgdGhlIGRpZ2l0IGluIGl0cyBwbGFjZSBpbiB0aGUKK3wJCXVwcGVyIHdvcmQgb2YgZDAuICBJZiBpdCBpcyB0aGUgbHMgZGlnaXQsIHdyaXRlIHRoZSB3b3JkCit8CQlmcm9tIGQwIHRvIG1lbW9yeS4KK3wKK3wJQTcuIERlY3JlbWVudCBkNiAoTEVOIGNvdW50ZXIpIGFuZCByZXBlYXQgdGhlIGxvb3AgdW50aWwgemVyby4KK3wKK3wJSW1wbGVtZW50YXRpb24gTm90ZXM6Cit8Cit8CVRoZSByZWdpc3RlcnMgYXJlIHVzZWQgYXMgZm9sbG93czoKK3wKK3wJCWQwOiBMRU4gY291bnRlcgorfAkJZDE6IHRlbXAgdXNlZCB0byBmb3JtIHRoZSBkaWdpdAorfAkJZDI6IHVwcGVyIDMyLWJpdHMgb2YgZnJhY3Rpb24gZm9yIG11bCBieSA4Cit8CQlkMzogbG93ZXIgMzItYml0cyBvZiBmcmFjdGlvbiBmb3IgbXVsIGJ5IDgKK3wJCWQ0OiB1cHBlciAzMi1iaXRzIG9mIGZyYWN0aW9uIGZvciBtdWwgYnkgMgorfAkJZDU6IGxvd2VyIDMyLWJpdHMgb2YgZnJhY3Rpb24gZm9yIG11bCBieSAyCit8CQlkNjogdGVtcCBmb3IgYml0LWZpZWxkIGV4dHJhY3RzCit8CQlkNzogYnl0ZSBkaWdpdCBmb3JtYXRpb24gd29yZDtkaWdpdCBjb3VudCB7MCwxfQorfAkJYTA6IHBvaW50ZXIgaW50byBtZW1vcnkgZm9yIHBhY2tlZCBiY2Qgc3RyaW5nIGZvcm1hdGlvbgorfAorCit8CQlDb3B5cmlnaHQgKEMpIE1vdG9yb2xhLCBJbmMuIDE5OTAKK3wJCQlBbGwgUmlnaHRzIFJlc2VydmVkCit8Cit8CVRISVMgSVMgVU5QVUJMSVNIRUQgUFJPUFJJRVRBUlkgU09VUkNFIENPREUgT0YgTU9UT1JPTEEKK3wJVGhlIGNvcHlyaWdodCBub3RpY2UgYWJvdmUgZG9lcyBub3QgZXZpZGVuY2UgYW55Cit8CWFjdHVhbCBvciBpbnRlbmRlZCBwdWJsaWNhdGlvbiBvZiBzdWNoIHNvdXJjZSBjb2RlLgorCit8QklOU1RSICAgIGlkbnQgICAgMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworI2luY2x1ZGUgImZwc3AuaCIKKworCS5nbG9iYWwJYmluc3RyCitiaW5zdHI6CisJbW92ZW1sCSVkMC0lZDcsLSglYTcpCit8Cit8IEExOiBJbml0IGQ3Cit8CisJbW92ZXFsCSMxLCVkNwkJCXxpbml0IGQ3IGZvciBzZWNvbmQgZGlnaXQKKwlzdWJxbAkjMSwlZDAJCQl8Zm9yIGRiZiBkMCB3b3VsZCBoYXZlIExFTisxIHBhc3NlcworfAorfCBBMi4gQ29weSBkMjpkMyB0byBkNDpkNS4gIFN0YXJ0IGxvb3AuCit8Citsb29wOgorCW1vdmVsCSVkMiwlZDQJCQl8Y29weSB0aGUgZnJhY3Rpb24gYmVmb3JlIG11bHMKKwltb3ZlbAklZDMsJWQ1CQkJfHRvIGQ0OmQ1Cit8Cit8IEEzLiBNdWx0aXBseSBkMjpkMyBieSA4OyBleHRyYWN0IG1zYnMgaW50byBkMS4KK3wKKwliZmV4dHUJJWQyeyMwOiMzfSwlZDEJCXxjb3B5IDMgbXNicyBvZiBkMiBpbnRvIGQxCisJYXNsbAkjMywlZDIJCQl8c2hpZnQgZDIgbGVmdCBieSAzIHBsYWNlcworCWJmZXh0dQklZDN7IzA6IzN9LCVkNgkJfGNvcHkgMyBtc2JzIG9mIGQzIGludG8gZDYKKwlhc2xsCSMzLCVkMwkJCXxzaGlmdCBkMyBsZWZ0IGJ5IDMgcGxhY2VzCisJb3JsCSVkNiwlZDIJCQl8b3IgaW4gbXNicyBmcm9tIGQzIGludG8gZDIKK3wKK3wgQTQuIE11bHRpcGx5IGQ0OmQ1IGJ5IDI7IGFkZCBjYXJyeSBvdXQgdG8gZDEuCit8CisJYXNsbAkjMSwlZDUJCQl8bXVsIGQ1IGJ5IDIKKwlyb3hsbAkjMSwlZDQJCQl8bXVsIGQ0IGJ5IDIKKwlzd2FwCSVkNgkJCXxwdXQgMCBpbiBkNiBsb3dlciB3b3JkCisJYWRkeHcJJWQ2LCVkMQkJCXxhZGQgaW4gZXh0ZW5kIGZyb20gbXVsIGJ5IDIKK3wKK3wgQTUuIEFkZCBtdWwgYnkgOCB0byBtdWwgYnkgMi4gIEQxIGNvbnRhaW5zIHRoZSBkaWdpdCBmb3JtZWQuCit8CisJYWRkbAklZDUsJWQzCQkJfGFkZCBsb3dlciAzMiBiaXRzCisJbm9wCQkJCXxFUlJBVEEgOyBGSVggIzEzIChSZXYuIDEuMiA2LzYvOTApCisJYWRkeGwJJWQ0LCVkMgkJCXxhZGQgd2l0aCBleHRlbmQgdXBwZXIgMzIgYml0cworCW5vcAkJCQl8RVJSQVRBIDsgRklYICMxMyAoUmV2LiAxLjIgNi82LzkwKQorCWFkZHh3CSVkNiwlZDEJCQl8YWRkIGluIGV4dGVuZCBmcm9tIGFkZCB0byBkMQorCXN3YXAJJWQ2CQkJfHdpdGggZDYgPSAwOyBwdXQgMCBpbiB1cHBlciB3b3JkCit8Cit8IEE2LiBUZXN0IGQ3IGFuZCBicmFuY2guCit8CisJdHN0dwklZDcJCQl8aWYgemVybywgc3RvcmUgZGlnaXQgJiB0byBsb29wCisJYmVxcwlmaXJzdF9kCQkJfGlmIG5vbi16ZXJvLCBmb3JtIGJ5dGUgJiB3cml0ZQorc2VjX2Q6CisJc3dhcAklZDcJCQl8YnJpbmcgZmlyc3QgZGlnaXQgdG8gd29yZCBkN2IKKwlhc2x3CSM0LCVkNwkJCXxmaXJzdCBkaWdpdCBpbiB1cHBlciA0IGJpdHMgZDdiCisJYWRkdwklZDEsJWQ3CQkJfGFkZCBpbiBscyBkaWdpdCB0byBkN2IKKwltb3ZlYgklZDcsKCVhMCkrCQl8c3RvcmUgZDdiIGJ5dGUgaW4gbWVtb3J5CisJc3dhcAklZDcJCQl8cHV0IExFTiBjb3VudGVyIGluIHdvcmQgZDdhCisJY2xydwklZDcJCQl8c2V0IGQ3YSB0byBzaWduYWwgbm8gZGlnaXRzIGRvbmUKKwlkYmYJJWQwLGxvb3AJCXxkbyBsb29wIHNvbWUgbW9yZSEKKwlicmFzCWVuZF9ic3RyCQl8ZmluaXNoZWQsIHNvIGV4aXQKK2ZpcnN0X2Q6CisJc3dhcAklZDcJCQl8cHV0IGRpZ2l0IHdvcmQgaW4gZDdiCisJbW92ZXcJJWQxLCVkNwkJCXxwdXQgbmV3IGRpZ2l0IGluIGQ3YgorCXN3YXAJJWQ3CQkJfHB1dCBMRU4gY291bnRlciBpbiB3b3JkIGQ3YQorCWFkZHF3CSMxLCVkNwkJCXxzZXQgZDdhIHRvIHNpZ25hbCBmaXJzdCBkaWdpdCBkb25lCisJZGJmCSVkMCxsb29wCQl8ZG8gbG9vcCBzb21lIG1vcmUhCisJc3dhcAklZDcJCQl8cHV0IGxhc3QgZGlnaXQgaW4gc3RyaW5nCisJbHNsdwkjNCwlZDcJCQl8bW92ZSBpdCB0byB1cHBlciA0IGJpdHMKKwltb3ZlYgklZDcsKCVhMCkrCQl8c3RvcmUgaXQgaW4gbWVtb3J5IHN0cmluZworfAorfCBDbGVhbiB1cCBhbmQgcmV0dXJuIHdpdGggcmVzdWx0IGluIGZwMC4KK3wKK2VuZF9ic3RyOgorCW1vdmVtbAkoJWE3KSssJWQwLSVkNworCXJ0cworCXxlbmQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL2J1Z2ZpeC5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAvYnVnZml4LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQyYzRmNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL2J1Z2ZpeC5TCkBAIC0wLDAgKzEsNDk2IEBACit8Cit8CWJ1Z2ZpeC5zYSAzLjIgMS8zMS85MQorfAorfAorfAlUaGlzIGZpbGUgY29udGFpbnMgd29ya2Fyb3VuZHMgZm9yIGJ1Z3MgaW4gdGhlIDA0MAorfAlyZWxhdGluZyB0byB0aGUgRmxvYXRpbmctUG9pbnQgU29mdHdhcmUgUGFja2FnZSAoRlBTUCkKK3wKK3wJRml4ZXMgZm9yIGJ1Z3M6IDEyMzgKK3wKK3wJQnVnOiAxMjM4Cit8Cit8Cit8ICAgIC8qIFRoZSBmb2xsb3dpbmcgZGlydHlfYml0IGNsZWFyIHNob3VsZCBiZSBsZWZ0IGluCit8ICAgICAqIHRoZSBoYW5kbGVyIHBlcm1hbmVudGx5IHRvIGltcHJvdmUgdGhyb3VnaHB1dC4KK3wgICAgICogVGhlIGRpcnR5X2JpdHMgYXJlIGxvY2F0ZWQgYXQgYml0cyBbMjM6MTZdIGluCit8ICAgICAqIGxvbmd3b3JkICQwOCBpbiB0aGUgYnVzeSBmcmFtZSAkNHg2MC4gIEJpdCAxNgorfCAgICAgKiBjb3JyZXNwb25kcyB0byBGUDAsIGJpdCAxNyBjb3JyZXNwb25kcyB0byBGUDEsCit8ICAgICAqIGFuZCBzbyBvbi4KK3wgICAgICovCit8ICAgIGlmICAoRTNfZXhjZXB0aW9uX2p1c3Rfc2VydmljZWQpICAgeworfCAgICAgICAgIGRpcnR5X2JpdFtjbWRyZWczYls5OjddXSA9IDA7Cit8ICAgICAgICAgfQorfAorfCAgICBpZiAgKGZzYXZlX2Zvcm1hdF92ZXJzaW9uICE9ICQ0MCkgIHtnb3RvIE5PRklYfQorfAorfCAgICBpZiAhKEUzX2V4Y2VwdGlvbl9qdXN0X3NlcnZpY2VkKSAgIHtnb3RvIE5PRklYfQorfCAgICBpZiAgKGN1cGMgPT0gMDAwMDAwMCkgICAgICAgICAgICAgIHtnb3RvIE5PRklYfQorfCAgICBpZiAgKChjbWRyZWcxYlsxNToxM10gIT0gMDAwKSAmJgorfCAgICAgICAgIChjbWRyZWcxYlsxNToxMF0gIT0gMDEwMDAxKSkgIHtnb3RvIE5PRklYfQorfCAgICBpZiAoKChjbWRyZWcxYlsxNToxM10gIT0gMDAwKSB8fCAoKGNtZHJlZzFiWzEyOjEwXSAhPSBjbWRyZWcyYls5OjddKSAmJgorfAkJCQkgICAgICAoY21kcmVnMWJbMTI6MTBdICE9IGNtZHJlZzNiWzk6N10pKSAgKSAmJgorfAkgKChjbWRyZWcxYlsgOTogN10gIT0gY21kcmVnMmJbOTo3XSkgJiYKK3wJICAoY21kcmVnMWJbIDk6IDddICE9IGNtZHJlZzNiWzk6N10pKSApICB7Z290byBOT0ZJWH0KK3wKK3wgICAgLyogTm90ZTogZm9yIDZkNDNiIG9yIDhkNDNiLCB5b3UgbWF5IHdhbnQgdG8gYWRkIHRoZSBmb2xsb3dpbmcgY29kZQorfCAgICAgKiB0byBnZXQgYmV0dGVyIGNvdmVyYWdlLiAgKElmIHlvdSBkbyBub3QgaW5zZXJ0IHRoaXMgY29kZSwgdGhlIHBhcnQKK3wgICAgICogd29uJ3QgbG9jayB1cDsgaXQgd2lsbCBzaW1wbHkgZ2V0IHRoZSB3cm9uZyBhbnN3ZXIuKQorfCAgICAgKiBEbyBOT1QgaW5zZXJ0IHRoaXMgY29kZSBmb3IgMTBkNDNiIG9yIGxhdGVyIHBhcnRzLgorfCAgICAgKgorfCAgICAgKiAgaWYgKGZwaWFyY3UgPT0gaW50ZWdlciBzdGFjayByZXR1cm4gYWRkcmVzcykgeworfCAgICAgKiAgICAgICBjdXBjID0gMDAwMDAwMDsKK3wgICAgICogICAgICAgZ290byBOT0ZJWDsKK3wgICAgICogICAgICAgfQorfCAgICAgKi8KK3wKK3wgICAgaWYgKGNtZHJlZzFiWzE1OjEzXSAhPSAwMDApICAge2dvdG8gRklYX09QQ0xBU1MyfQorfCAgICBGSVhfT1BDTEFTUzA6Cit8ICAgIGlmICgoKGNtZHJlZzFiWzEyOjEwXSA9PSBjbWRyZWcyYls5OjddKSB8fAorfAkgKGNtZHJlZzFiWyA5OiA3XSA9PSBjbWRyZWcyYls5OjddKSkgJiYKK3wJKGNtZHJlZzFiWzEyOjEwXSAhPSBjbWRyZWczYls5OjddKSAmJgorfAkoY21kcmVnMWJbIDk6IDddICE9IGNtZHJlZzNiWzk6N10pKSAgeyAgLyogeHUgY29uZmxpY3Qgb25seSAqLworfAkvKiBXZSBleGVjdXRlIHRoZSBmb2xsb3dpbmcgY29kZSBpZiB0aGVyZSBpcyBhbgorfAkgICB4dSBjb25mbGljdCBhbmQgTk9UIGFuIG51IGNvbmZsaWN0ICovCit8Cit8CS8qIGZpcnN0IHNhdmUgc29tZSB2YWx1ZXMgb24gdGhlIGZzYXZlIGZyYW1lICovCit8CXN0YWdfdGVtcCAgICAgPSBTVEFHW2ZzYXZlX2ZyYW1lXTsKK3wJY21kcmVnMWJfdGVtcCA9IENNRFJFRzFCW2ZzYXZlX2ZyYW1lXTsKK3wJZHRhZ190ZW1wICAgICA9IERUQUdbZnNhdmVfZnJhbWVdOworfAlldGUxNV90ZW1wICAgID0gRVRFMTVbZnNhdmVfZnJhbWVdOworfAorfAlDVVBDW2ZzYXZlX2ZyYW1lXSA9IDAwMDAwMDA7Cit8CUZSRVNUT1JFCit8CUZTQVZFCit8Cit8CS8qIElmIHRoZSB4dSBpbnN0cnVjdGlvbiBpcyBleGNlcHRpb25hbCwgd2UgcHVudC4KK3wJICogT3RoZXJ3aXNlLCB3ZSB3b3VsZCBoYXZlIHRvIGluY2x1ZGUgT1ZGTC9VTkZMIGhhbmRsZXIKK3wJICogY29kZSBoZXJlIHRvIGdldCB0aGUgY29ycmVjdCBhbnN3ZXIuCit8CSAqLworfAlpZiAoZnNhdmVfZnJhbWVfZm9ybWF0ID09ICQ0MDYwKSB7Z290byBLSUxMX1BST0NFU1N9Cit8Cit8CWZzYXZlX2ZyYW1lID0gLyogYnVpbGQgYSBsb25nIGZyYW1lIG9mIGFsbCB6ZXJvcyAqLworfAlmc2F2ZV9mcmFtZV9mb3JtYXQgPSAkNDA2MDsgIC8qIGxhYmVsIGl0IGFzIGxvbmcgZnJhbWUgKi8KK3wKK3wJLyogbG9hZCBpdCB3aXRoIHRoZSB0ZW1wcyB3ZSBzYXZlZCAqLworfAlTVEFHW2ZzYXZlX2ZyYW1lXSAgICAgPSAgc3RhZ190ZW1wOworfAlDTURSRUcxQltmc2F2ZV9mcmFtZV0gPSAgY21kcmVnMWJfdGVtcDsKK3wJRFRBR1tmc2F2ZV9mcmFtZV0gICAgID0gIGR0YWdfdGVtcDsKK3wJRVRFMTVbZnNhdmVfZnJhbWVdICAgID0gIGV0ZTE1X3RlbXA7Cit8Cit8CS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBjbWRyZWczYiBkZXN0IHJlZyBpcyBub3QgZ29pbmcgdG8KK3wJICogYmUgZGVzdHJveWVkIGJ5IGEgRk1PVkVNIGF0IHRoZSBlbmQgb2YgYWxsIHRoaXMgY29kZS4KK3wJICogSWYgaXQgaXMsIHlvdSBzaG91bGQgbW92ZSB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcmVnCit8CSAqIG9udG8gdGhlIHN0YWNrIHNvIHRoYXQgdGhlIHJlZyB3aWxsIGxvYWRlZCB3aXRoIHRoYXQgdmFsdWUuCit8CSAqLworfAorfAkvKiBBbGwgZG9uZS4gIFByb2NlZWQgd2l0aCB0aGUgY29kZSBiZWxvdyAqLworfCAgICB9Cit8Cit8ICAgIGV0ZW1wICA9IEZQX3JlZ19bY21kcmVnMWJbMTI6MTBdXTsKK3wgICAgZXRlMTUgID0gfmV0ZTE0OworfCAgICBjbWRyZWcxYlsxNToxMF0gPSAwMTAwMTA7Cit8ICAgIGNsZWFyKGJ1Z19mbGFnX3Byb2NJRHh4eHgpOworfCAgICBGUkVTVE9SRSBhbmQgcmV0dXJuOworfAorfAorfCAgICBGSVhfT1BDTEFTUzI6Cit8ICAgIGlmICgoY21kcmVnMWJbOTo3XSA9PSBjbWRyZWcyYls5OjddKSAmJgorfAkoY21kcmVnMWJbOTo3XSAhPSBjbWRyZWczYls5OjddKSkgIHsgIC8qIHh1IGNvbmZsaWN0IG9ubHkgKi8KK3wJLyogV2UgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIGNvZGUgaWYgdGhlcmUgaXMgYW4KK3wJICAgeHUgY29uZmxpY3QgYW5kIE5PVCBhbiBudSBjb25mbGljdCAqLworfAorfAkvKiBmaXJzdCBzYXZlIHNvbWUgdmFsdWVzIG9uIHRoZSBmc2F2ZSBmcmFtZSAqLworfAlzdGFnX3RlbXAgICAgID0gU1RBR1tmc2F2ZV9mcmFtZV07Cit8CWNtZHJlZzFiX3RlbXAgPSBDTURSRUcxQltmc2F2ZV9mcmFtZV07Cit8CWR0YWdfdGVtcCAgICAgPSBEVEFHW2ZzYXZlX2ZyYW1lXTsKK3wJZXRlMTVfdGVtcCAgICA9IEVURTE1W2ZzYXZlX2ZyYW1lXTsKK3wJZXRlbXBfdGVtcCAgICA9IEVURU1QW2ZzYXZlX2ZyYW1lXTsKK3wKK3wJQ1VQQ1tmc2F2ZV9mcmFtZV0gPSAwMDAwMDAwOworfAlGUkVTVE9SRQorfAlGU0FWRQorfAorfAorfAkvKiBJZiB0aGUgeHUgaW5zdHJ1Y3Rpb24gaXMgZXhjZXB0aW9uYWwsIHdlIHB1bnQuCit8CSAqIE90aGVyd2lzZSwgd2Ugd291bGQgaGF2ZSB0byBpbmNsdWRlIE9WRkwvVU5GTCBoYW5kbGVyCit8CSAqIGNvZGUgaGVyZSB0byBnZXQgdGhlIGNvcnJlY3QgYW5zd2VyLgorfAkgKi8KK3wJaWYgKGZzYXZlX2ZyYW1lX2Zvcm1hdCA9PSAkNDA2MCkge2dvdG8gS0lMTF9QUk9DRVNTfQorfAorfAlmc2F2ZV9mcmFtZSA9IC8qIGJ1aWxkIGEgbG9uZyBmcmFtZSBvZiBhbGwgemVyb3MgKi8KK3wJZnNhdmVfZnJhbWVfZm9ybWF0ID0gJDQwNjA7ICAvKiBsYWJlbCBpdCBhcyBsb25nIGZyYW1lICovCit8Cit8CS8qIGxvYWQgaXQgd2l0aCB0aGUgdGVtcHMgd2Ugc2F2ZWQgKi8KK3wJU1RBR1tmc2F2ZV9mcmFtZV0gICAgID0gIHN0YWdfdGVtcDsKK3wJQ01EUkVHMUJbZnNhdmVfZnJhbWVdID0gIGNtZHJlZzFiX3RlbXA7Cit8CURUQUdbZnNhdmVfZnJhbWVdICAgICA9ICBkdGFnX3RlbXA7Cit8CUVURTE1W2ZzYXZlX2ZyYW1lXSAgICA9ICBldGUxNV90ZW1wOworfAlFVEVNUFtmc2F2ZV9mcmFtZV0gICAgPSAgZXRlbXBfdGVtcDsKK3wKK3wJLyogTWFrZSBzdXJlIHRoYXQgdGhlIGNtZHJlZzNiIGRlc3QgcmVnIGlzIG5vdCBnb2luZyB0bworfAkgKiBiZSBkZXN0cm95ZWQgYnkgYSBGTU9WRU0gYXQgdGhlIGVuZCBvZiBhbGwgdGhpcyBjb2RlLgorfAkgKiBJZiBpdCBpcywgeW91IHNob3VsZCBtb3ZlIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSByZWcKK3wJICogb250byB0aGUgc3RhY2sgc28gdGhhdCB0aGUgcmVnIHdpbGwgbG9hZGVkIHdpdGggdGhhdCB2YWx1ZS4KK3wJICovCit8Cit8CS8qIEFsbCBkb25lLiAgUHJvY2VlZCB3aXRoIHRoZSBjb2RlIGJlbG93ICovCit8ICAgIH0KK3wKK3wgICAgaWYgKGV0ZW1wX2V4cG9uZW50ID09IG1pbl9zZ2wpICAgZXRlbXBfZXhwb25lbnQgPSBtaW5fZGJsOworfCAgICBpZiAoZXRlbXBfZXhwb25lbnQgPT0gbWF4X3NnbCkgICBldGVtcF9leHBvbmVudCA9IG1heF9kYmw7Cit8ICAgIGNtZHJlZzFiWzE1OjEwXSA9IDAxMDEwMTsKK3wgICAgY2xlYXIoYnVnX2ZsYWdfcHJvY0lEeHh4eCk7Cit8ICAgIEZSRVNUT1JFIGFuZCByZXR1cm47Cit8Cit8Cit8ICAgIE5PRklYOgorfCAgICBjbGVhcihidWdfZmxhZ19wcm9jSUR4eHh4KTsKK3wgICAgRlJFU1RPUkUgYW5kIHJldHVybjsKK3wKKworCit8CQlDb3B5cmlnaHQgKEMpIE1vdG9yb2xhLCBJbmMuIDE5OTAKK3wJCQlBbGwgUmlnaHRzIFJlc2VydmVkCit8Cit8CVRISVMgSVMgVU5QVUJMSVNIRUQgUFJPUFJJRVRBUlkgU09VUkNFIENPREUgT0YgTU9UT1JPTEEKK3wJVGhlIGNvcHlyaWdodCBub3RpY2UgYWJvdmUgZG9lcyBub3QgZXZpZGVuY2UgYW55Cit8CWFjdHVhbCBvciBpbnRlbmRlZCBwdWJsaWNhdGlvbiBvZiBzdWNoIHNvdXJjZSBjb2RlLgorCit8QlVHRklYICAgIGlkbnQgICAgMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworI2luY2x1ZGUgImZwc3AuaCIKKworCXx4cmVmCWZwc3BfZm10X2Vycm9yCisKKwkuZ2xvYmFsCWIxMjM4X2ZpeAorYjEyMzhfZml4OgorfAorfCBUaGlzIGNvZGUgaXMgZW50ZXJlZCBvbmx5IG9uIGNvbXBsZXRpb24gb2YgdGhlIGhhbmRsaW5nIG9mIGFuCit8IG51LWdlbmVyYXRlZCBvdmZsLCB1bmZsLCBvciBpbmV4IGV4Y2VwdGlvbi4gIElmIHRoZSB2ZXJzaW9uCit8IG51bWJlciBvZiB0aGUgZnNhdmUgaXMgbm90ICQ0MCwgdGhpcyBoYW5kbGVyIGlzIG5vdCBuZWNlc3NhcnkuCit8IFNpbXBseSBicmFuY2ggdG8gZml4X2RvbmUgYW5kIGV4aXQgbm9ybWFsbHkuCit8CisJY21waWIJI1ZFUl80MCw0KCVhNykKKwlibmUJZml4X2RvbmUKK3wKK3wgVGVzdCBmb3IgY3Vfc2F2ZXBjIGVxdWFsIHRvIHplcm8uICBJZiBub3QsIHRoaXMgaXMgbm90IGEgYnVnCit8ICMxMjM4IGNhc2UuCit8CisJbW92ZWIJQ1VfU0FWRVBDKCVhNiksJWQwCisJYW5kaWIJIzB4RkUsJWQwCisJYmVxCWZpeF9kb25lCXxpZiB6ZXJvLCB0aGlzIGlzIG5vdCBidWcgIzEyMzgKKworfAorfCBUZXN0IHRoZSByZWdpc3RlciBjb25mbGljdCBhc3BlY3QuICBJZiBvcGNsYXNzMCwgY2hlY2sgZm9yCit8IGN1IHNyYyBlcXVhbCB0byB4dSBkZXN0IG9yIGVxdWFsIHRvIG51IGRlc3QuICBJZiBzbywgZ28gdG8KK3wgb3AwLiAgRWxzZSwgb3IgaWYgb3BjbGFzczIsIGNoZWNrIGZvciBjdSBkZXN0IGVxdWFsIHRvCit8IHh1IGRlc3Qgb3IgZXF1YWwgdG8gbnUgZGVzdC4gIElmIHNvLCBnbyB0byB0c3Rfb3BjbC4gIEVsc2UsCit8IGV4aXQsIGl0IGlzIG5vdCB0aGUgYnVnIGNhc2UuCit8Cit8IENoZWNrIGZvciBvcGNsYXNzIDAuICBJZiBub3QsIGdvIGFuZCBjaGVjayBmb3Igb3BjbGFzcyAyIGFuZCBzZ2wuCit8CisJbW92ZXcJQ01EUkVHMUIoJWE2KSwlZDAKKwlhbmRpdwkjMHhFMDAwLCVkMAkJfHN0cmlwIGFsbCBidXQgb3BjbGFzcworCWJuZQlvcDJzZ2wJCQl8bm90IG9wY2xhc3MgMCwgY2hlY2sgb3AyCit8Cit8IENoZWNrIGZvciBjdSBhbmQgbnUgcmVnaXN0ZXIgY29uZmxpY3QuICBJZiBvbmUgZXhpc3RzLCB0aGlzIHRha2VzCit8IHByaW9yaXR5IG92ZXIgYSBjdSBhbmQgeHUgY29uZmxpY3QuCit8CisJYmZleHR1CUNNRFJFRzFCKCVhNil7IzM6IzN9LCVkMAl8Z2V0IDFzdCBzcmMKKwliZmV4dHUJQ01EUkVHM0IoJWE2KXsjNjojM30sJWQxCXxnZXQgM3JkIGRlc3QKKwljbXBiCSVkMCwlZDEKKwliZXFzCW9wMAkJCXxpZiBlcXVhbCwgY29udGludWUgYnVnZml4Cit8Cit8IENoZWNrIGZvciBjdSBkZXN0IGVxdWFsIHRvIG51IGRlc3QuICBJZiBzbywgZ28gYW5kIGZpeCB0aGUKK3wgYnVnIGNvbmRpdGlvbi4gIE90aGVyd2lzZSwgZXhpdC4KK3wKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjNjojM30sJWQwCXxnZXQgMXN0IGRlc3QKKwljbXBiCSVkMCwlZDEJCQl8Y21wIDFzdCBkZXN0IHdpdGggM3JkIGRlc3QKKwliZXFzCW9wMAkJCXxpZiBlcXVhbCwgY29udGludWUgYnVnZml4Cit8Cit8IENoZWNrIGZvciBjdSBhbmQgeHUgcmVnaXN0ZXIgY29uZmxpY3QuCit8CisJYmZleHR1CUNNRFJFRzJCKCVhNil7IzY6IzN9LCVkMQl8Z2V0IDJuZCBkZXN0CisJY21wYgklZDAsJWQxCQkJfGNtcCAxc3QgZGVzdCB3aXRoIDJuZCBkZXN0CisJYmVxcwlvcDBfeHUJCQl8aWYgZXF1YWwsIGNvbnRpbnVlIGJ1Z2ZpeAorCWJmZXh0dQlDTURSRUcxQiglYTYpeyMzOiMzfSwlZDAJfGdldCAxc3Qgc3JjCisJY21wYgklZDAsJWQxCQkJfGNtcCAxc3Qgc3JjIHdpdGggMm5kIGRlc3QKKwliZXEJb3AwX3h1CisJYm5lCWZpeF9kb25lCQl8aWYgdGhlIHJlZyBjaGVja3MgZmFpbCwgZXhpdAorfAorfCBXZSBoYXZlIHRoZSBvcGNsYXNzIDAgc2l0dWF0aW9uLgorfAorb3AwOgorCWJmZXh0dQlDTURSRUcxQiglYTYpeyMzOiMzfSwlZDAJfGdldCBzb3VyY2UgcmVnaXN0ZXIgbm8KKwltb3ZlbAkjNywlZDEKKwlzdWJsCSVkMCwlZDEKKwljbHJsCSVkMAorCWJzZXRsCSVkMSwlZDAKKwlmbW92ZW14ICVkMCxFVEVNUCglYTYpCQl8bG9hZCBzb3VyY2UgdG8gRVRFTVAKKworCW1vdmViCSMweDEyLCVkMAorCWJmaW5zCSVkMCxDTURSRUcxQiglYTYpeyMwOiM2fQl8b3BjbGFzcyAyLCBleHRlbmRlZAorfAorfAlTZXQgRVRFTVAgZXhwb25lbnQgYml0IDE1IGFzIHRoZSBvcHBvc2l0ZSBvZiBldGUxNAorfAorCWJ0c3QJIzYsRVRFTVBfRVgoJWE2KQkJfGNoZWNrIGV0ZW1wIGV4cG9uZW50IGJpdCAxNAorCWJlcQlzZXRldGUxNQorCWJjbHIJI2V0ZW1wMTVfYml0LFNUQUcoJWE2KQorCWJyYQlmaW5pc2gKK3NldGV0ZTE1OgorCWJzZXQJI2V0ZW1wMTVfYml0LFNUQUcoJWE2KQorCWJyYQlmaW5pc2gKKworfAorfCBXZSBoYXZlIHRoZSBjYXNlIGluIHdoaWNoIGEgY29uZmxpY3QgZXhpc3RzIGJldHdlZW4gdGhlIGN1IHNyYyBvcgorfCBkZXN0IGFuZCB0aGUgZGVzdCBvZiB0aGUgeHUuICBXZSBtdXN0IGNsZWFyIHRoZSBpbnN0cnVjdGlvbiBpbgorfCB0aGUgY3UgYW5kIHJlc3RvcmUgdGhlIHN0YXRlLCBhbGxvd2luZyB0aGUgaW5zdHJ1Y3Rpb24gaW4gdGhlCit8IHh1IHRvIGNvbXBsZXRlLiAgUmVtZW1iZXIsIHRoZSBpbnN0cnVjdGlvbiBpbiB0aGUgbnUKK3wgd2FzIGV4Y2VwdGlvbmFsLCBhbmQgd2FzIGNvbXBsZXRlZCBieSB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlci4KK3wgSWYgdGhlIHJlc3VsdCBvZiB0aGUgeHUgaW5zdHJ1Y3Rpb24gaXMgbm90IGV4Y2VwdGlvbmFsLCB3ZSBjYW4KK3wgcmVzdG9yZSB0aGUgaW5zdHJ1Y3Rpb24gZnJvbSB0aGUgY3UgdG8gdGhlIGZyYW1lIGFuZCBjb250aW51ZQorfCBwcm9jZXNzaW5nIHRoZSBvcmlnaW5hbCBleGNlcHRpb24uICBJZiB0aGUgcmVzdWx0IGlzIGFsc28KK3wgZXhjZXB0aW9uYWwsIHdlIGNob29zZSB0byBraWxsIHRoZSBwcm9jZXNzLgorfAorfAlJdGVtcyBzYXZlZCBmcm9tIHRoZSBzdGFjazoKK3wKK3wJCSQzYyBzdGFnICAgICAtIExfU0NSMQorfAkJJDQwIGNtZHJlZzFiIC0gTF9TQ1IyCit8CQkkNDQgZHRhZyAgICAgLSBMX1NDUjMKK3wKK3wgVGhlIGN1IHNhdmVwYyBpcyBzZXQgdG8gemVybywgYW5kIHRoZSBmcmFtZSBpcyByZXN0b3JlZCB0byB0aGUKK3wgZnB1LgorfAorb3AwX3h1OgorCW1vdmVsCVNUQUcoJWE2KSxMX1NDUjEoJWE2KQorCW1vdmVsCUNNRFJFRzFCKCVhNiksTF9TQ1IyKCVhNikKKwltb3ZlbAlEVEFHKCVhNiksTF9TQ1IzKCVhNikKKwlhbmRpbAkjMHhlMDAwMDAwMCxMX1NDUjMoJWE2KQorCW1vdmViCSMwLENVX1NBVkVQQyglYTYpCisJbW92ZWwJKCVhNykrLCVkMQkJfHNhdmUgcmV0dXJuIGFkZHJlc3MgZnJvbSBic3IKKwlmcmVzdG9yZSAoJWE3KSsKKwlmc2F2ZQktKCVhNykKK3wKK3wgQ2hlY2sgaWYgdGhlIGluc3RydWN0aW9uIHdoaWNoIGp1c3QgY29tcGxldGVkIHdhcyBleGNlcHRpb25hbC4KK3wKKwljbXB3CSMweDQwNjAsKCVhNykKKwliZXEJb3AwX3hiCit8Cit8IEl0IGlzIG5lY2Vzc2FyeSB0byBpc29sYXRlIHRoZSByZXN1bHQgb2YgdGhlIGluc3RydWN0aW9uIGluIHRoZQorfCB4dSBpZiBpdCBpcyB0byBmcDAgLSBmcDMgYW5kIHdyaXRlIHRoYXQgdmFsdWUgdG8gdGhlIFVTRVJfRlBuCit8IGxvY2F0aW9ucyBvbiB0aGUgc3RhY2suICBUaGUgY29ycmVjdCBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBpbgorfCBjbWRyZWcyYi4KK3wKKwliZmV4dHUJQ01EUkVHMkIoJWE2KXsjNjojM30sJWQwCXxnZXQgZGVzdCByZWdpc3RlciBubworCWNtcGlsCSMzLCVkMAorCWJndHMJb3AwX3hpCisJYmVxcwlvcDBfZnAzCisJY21waWwJIzEsJWQwCisJYmx0cwlvcDBfZnAwCisJYmVxcwlvcDBfZnAxCitvcDBfZnAyOgorCWZtb3ZlbXggJWZwMi0lZnAyLFVTRVJfRlAyKCVhNikKKwlicmFzCW9wMF94aQorb3AwX2ZwMToKKwlmbW92ZW14ICVmcDEtJWZwMSxVU0VSX0ZQMSglYTYpCisJYnJhcwlvcDBfeGkKK29wMF9mcDA6CisJZm1vdmVteCAlZnAwLSVmcDAsVVNFUl9GUDAoJWE2KQorCWJyYXMJb3AwX3hpCitvcDBfZnAzOgorCWZtb3ZlbXggJWZwMy0lZnAzLFVTRVJfRlAzKCVhNikKK3wKK3wgVGhlIGZyYW1lIHJldHVybmVkIGlzIGlkbGUuICBXZSBtdXN0IGJ1aWxkIGEgYnVzeSBmcmFtZSB0byBob2xkCit8IHRoZSBjdSBzdGF0ZSBpbmZvcm1hdGlvbiBhbmQgc2V0dXAgZXRlbXAuCit8CitvcDBfeGk6CisJbW92ZWwJIzIyLCVkMAkJfGNsZWFyIDIzIGx3b3JkcworCWNscmwJKCVhNykKK29wMF9sb29wOgorCWNscmwJLSglYTcpCisJZGJmCSVkMCxvcDBfbG9vcAorCW1vdmVsCSMweDQwNjAwMDAwLC0oJWE3KQorCW1vdmVsCUxfU0NSMSglYTYpLFNUQUcoJWE2KQorCW1vdmVsCUxfU0NSMiglYTYpLENNRFJFRzFCKCVhNikKKwltb3ZlbAlMX1NDUjMoJWE2KSxEVEFHKCVhNikKKwltb3ZlYgkjMHg2LENVX1NBVkVQQyglYTYpCisJbW92ZWwJJWQxLC0oJWE3KQkJfHJldHVybiBic3IgcmV0dXJuIGFkZHJlc3MKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjMzojM30sJWQwCXxnZXQgc291cmNlIHJlZ2lzdGVyIG5vCisJbW92ZWwJIzcsJWQxCisJc3VibAklZDAsJWQxCisJY2xybAklZDAKKwlic2V0bAklZDEsJWQwCisJZm1vdmVteCAlZDAsRVRFTVAoJWE2KQkJfGxvYWQgc291cmNlIHRvIEVURU1QCisKKwltb3ZlYgkjMHgxMiwlZDAKKwliZmlucwklZDAsQ01EUkVHMUIoJWE2KXsjMDojNn0JfG9wY2xhc3MgMiwgZXh0ZW5kZWQKK3wKK3wJU2V0IEVURU1QIGV4cG9uZW50IGJpdCAxNSBhcyB0aGUgb3Bwb3NpdGUgb2YgZXRlMTQKK3wKKwlidHN0CSM2LEVURU1QX0VYKCVhNikJCXxjaGVjayBldGVtcCBleHBvbmVudCBiaXQgMTQKKwliZXEJb3AwX3NldGUxNQorCWJjbHIJI2V0ZW1wMTVfYml0LFNUQUcoJWE2KQorCWJyYQlmaW5pc2gKK29wMF9zZXRlMTU6CisJYnNldAkjZXRlbXAxNV9iaXQsU1RBRyglYTYpCisJYnJhCWZpbmlzaAorCit8Cit8IFRoZSBmcmFtZSByZXR1cm5lZCBpcyBidXN5LiAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlY29uc3RydWN0Cit8IHRoZSBjb2RlIHNlcXVlbmNlIHRvIGFsbG93IGNvbXBsZXRpb24uICBXZSB3aWxsIGp1bXAgdG8KK3wgZnBzcF9mbXRfZXJyb3IgYW5kIGFsbG93IHRoZSBrZXJuZWwgdG8ga2lsbCB0aGUgcHJvY2Vzcy4KK3wKK29wMF94YjoKKwlqbXAJZnBzcF9mbXRfZXJyb3IKKworfAorfCBDaGVjayBmb3Igb3BjbGFzcyAyIGFuZCBzaW5nbGUgc2l6ZS4gIElmIG5vdCBib3RoLCBleGl0LgorfAorb3Ayc2dsOgorCW1vdmV3CUNNRFJFRzFCKCVhNiksJWQwCisJYW5kaXcJIzB4RkMwMCwlZDAJCXxzdHJpcCBhbGwgYnV0IG9wY2xhc3MgYW5kIHNpemUKKwljbXBpdwkjMHg0NDAwLCVkMAkJfHRlc3QgZm9yIG9wY2xhc3MgMiBhbmQgc2l6ZT1zZ2wKKwlibmUJZml4X2RvbmUJCXxpZiBub3QsIGl0IGlzIG5vdCBidWcgMTIzOAorfAorfCBDaGVjayBmb3IgY3UgZGVzdCBlcXVhbCB0byBudSBkZXN0IG9yIGVxdWFsIHRvIHh1IGRlc3QsIHdpdGgKK3wgYSBjdSBhbmQgbnUgY29uZmxpY3QgdGFraW5nIHByaW9yaXR5IGFuIG51IGNvbmZsaWN0LiAgSWYgZWl0aGVyLAorfCBnbyBhbmQgZml4IHRoZSBidWcgY29uZGl0aW9uLiAgT3RoZXJ3aXNlLCBleGl0LgorfAorCWJmZXh0dQlDTURSRUcxQiglYTYpeyM2OiMzfSwlZDAJfGdldCAxc3QgZGVzdAorCWJmZXh0dQlDTURSRUczQiglYTYpeyM2OiMzfSwlZDEJfGdldCAzcmQgZGVzdAorCWNtcGIJJWQwLCVkMQkJCXxjbXAgMXN0IGRlc3Qgd2l0aCAzcmQgZGVzdAorCWJlcQlvcDJfY29tCQkJfGlmIGVxdWFsLCBjb250aW51ZSBidWdmaXgKKwliZmV4dHUJQ01EUkVHMkIoJWE2KXsjNjojM30sJWQxCXxnZXQgMm5kIGRlc3QKKwljbXBiCSVkMCwlZDEJCQl8Y21wIDFzdCBkZXN0IHdpdGggMm5kIGRlc3QKKwlibmUJZml4X2RvbmUJCXxpZiB0aGUgcmVnIGNoZWNrcyBmYWlsLCBleGl0Cit8Cit8IFdlIGhhdmUgdGhlIGNhc2UgaW4gd2hpY2ggYSBjb25mbGljdCBleGlzdHMgYmV0d2VlbiB0aGUgY3Ugc3JjIG9yCit8IGRlc3QgYW5kIHRoZSBkZXN0IG9mIHRoZSB4dS4gIFdlIG11c3QgY2xlYXIgdGhlIGluc3RydWN0aW9uIGluCit8IHRoZSBjdSBhbmQgcmVzdG9yZSB0aGUgc3RhdGUsIGFsbG93aW5nIHRoZSBpbnN0cnVjdGlvbiBpbiB0aGUKK3wgeHUgdG8gY29tcGxldGUuICBSZW1lbWJlciwgdGhlIGluc3RydWN0aW9uIGluIHRoZSBudQorfCB3YXMgZXhjZXB0aW9uYWwsIGFuZCB3YXMgY29tcGxldGVkIGJ5IHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyLgorfCBJZiB0aGUgcmVzdWx0IG9mIHRoZSB4dSBpbnN0cnVjdGlvbiBpcyBub3QgZXhjZXB0aW9uYWwsIHdlIGNhbgorfCByZXN0b3JlIHRoZSBpbnN0cnVjdGlvbiBmcm9tIHRoZSBjdSB0byB0aGUgZnJhbWUgYW5kIGNvbnRpbnVlCit8IHByb2Nlc3NpbmcgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbi4gIElmIHRoZSByZXN1bHQgaXMgYWxzbworfCBleGNlcHRpb25hbCwgd2UgY2hvb3NlIHRvIGtpbGwgdGhlIHByb2Nlc3MuCit8Cit8CUl0ZW1zIHNhdmVkIGZyb20gdGhlIHN0YWNrOgorfAorfAkJJDNjIHN0YWcgICAgIC0gTF9TQ1IxCit8CQkkNDAgY21kcmVnMWIgLSBMX1NDUjIKK3wJCSQ0NCBkdGFnICAgICAtIExfU0NSMworfAkJZXRlbXAgICAgICAgIC0gRlBfU0NSMgorfAorfCBUaGUgY3Ugc2F2ZXBjIGlzIHNldCB0byB6ZXJvLCBhbmQgdGhlIGZyYW1lIGlzIHJlc3RvcmVkIHRvIHRoZQorfCBmcHUuCit8CitvcDJfeHU6CisJbW92ZWwJU1RBRyglYTYpLExfU0NSMSglYTYpCisJbW92ZWwJQ01EUkVHMUIoJWE2KSxMX1NDUjIoJWE2KQorCW1vdmVsCURUQUcoJWE2KSxMX1NDUjMoJWE2KQorCWFuZGlsCSMweGUwMDAwMDAwLExfU0NSMyglYTYpCisJbW92ZWIJIzAsQ1VfU0FWRVBDKCVhNikKKwltb3ZlbAlFVEVNUCglYTYpLEZQX1NDUjIoJWE2KQorCW1vdmVsCUVURU1QX0hJKCVhNiksRlBfU0NSMis0KCVhNikKKwltb3ZlbAlFVEVNUF9MTyglYTYpLEZQX1NDUjIrOCglYTYpCisJbW92ZWwJKCVhNykrLCVkMQkJfHNhdmUgcmV0dXJuIGFkZHJlc3MgZnJvbSBic3IKKwlmcmVzdG9yZSAoJWE3KSsKKwlmc2F2ZQktKCVhNykKK3wKK3wgQ2hlY2sgaWYgdGhlIGluc3RydWN0aW9uIHdoaWNoIGp1c3QgY29tcGxldGVkIHdhcyBleGNlcHRpb25hbC4KK3wKKwljbXB3CSMweDQwNjAsKCVhNykKKwliZXEJb3AyX3hiCit8Cit8IEl0IGlzIG5lY2Vzc2FyeSB0byBpc29sYXRlIHRoZSByZXN1bHQgb2YgdGhlIGluc3RydWN0aW9uIGluIHRoZQorfCB4dSBpZiBpdCBpcyB0byBmcDAgLSBmcDMgYW5kIHdyaXRlIHRoYXQgdmFsdWUgdG8gdGhlIFVTRVJfRlBuCit8IGxvY2F0aW9ucyBvbiB0aGUgc3RhY2suICBUaGUgY29ycmVjdCBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBpbgorfCBjbWRyZWcyYi4KK3wKKwliZmV4dHUJQ01EUkVHMkIoJWE2KXsjNjojM30sJWQwCXxnZXQgZGVzdCByZWdpc3RlciBubworCWNtcGlsCSMzLCVkMAorCWJndHMJb3AyX3hpCisJYmVxcwlvcDJfZnAzCisJY21waWwJIzEsJWQwCisJYmx0cwlvcDJfZnAwCisJYmVxcwlvcDJfZnAxCitvcDJfZnAyOgorCWZtb3ZlbXggJWZwMi0lZnAyLFVTRVJfRlAyKCVhNikKKwlicmFzCW9wMl94aQorb3AyX2ZwMToKKwlmbW92ZW14ICVmcDEtJWZwMSxVU0VSX0ZQMSglYTYpCisJYnJhcwlvcDJfeGkKK29wMl9mcDA6CisJZm1vdmVteCAlZnAwLSVmcDAsVVNFUl9GUDAoJWE2KQorCWJyYXMJb3AyX3hpCitvcDJfZnAzOgorCWZtb3ZlbXggJWZwMy0lZnAzLFVTRVJfRlAzKCVhNikKK3wKK3wgVGhlIGZyYW1lIHJldHVybmVkIGlzIGlkbGUuICBXZSBtdXN0IGJ1aWxkIGEgYnVzeSBmcmFtZSB0byBob2xkCit8IHRoZSBjdSBzdGF0ZSBpbmZvcm1hdGlvbiBhbmQgZml4IHVwIGV0ZW1wLgorfAorb3AyX3hpOgorCW1vdmVsCSMyMiwlZDAJCXxjbGVhciAyMyBsd29yZHMKKwljbHJsCSglYTcpCitvcDJfbG9vcDoKKwljbHJsCS0oJWE3KQorCWRiZgklZDAsb3AyX2xvb3AKKwltb3ZlbAkjMHg0MDYwMDAwMCwtKCVhNykKKwltb3ZlbAlMX1NDUjEoJWE2KSxTVEFHKCVhNikKKwltb3ZlbAlMX1NDUjIoJWE2KSxDTURSRUcxQiglYTYpCisJbW92ZWwJTF9TQ1IzKCVhNiksRFRBRyglYTYpCisJbW92ZWIJIzB4NixDVV9TQVZFUEMoJWE2KQorCW1vdmVsCUZQX1NDUjIoJWE2KSxFVEVNUCglYTYpCisJbW92ZWwJRlBfU0NSMis0KCVhNiksRVRFTVBfSEkoJWE2KQorCW1vdmVsCUZQX1NDUjIrOCglYTYpLEVURU1QX0xPKCVhNikKKwltb3ZlbAklZDEsLSglYTcpCisJYnJhCW9wMl9jb20KKworfAorfCBXZSBoYXZlIHRoZSBvcGNsYXNzIDIgc2luZ2xlIHNvdXJjZSBzaXR1YXRpb24uCit8CitvcDJfY29tOgorCW1vdmViCSMweDE1LCVkMAorCWJmaW5zCSVkMCxDTURSRUcxQiglYTYpeyMwOiM2fQl8b3BjbGFzcyAyLCBkb3VibGUKKworCWNtcHcJIzB4NDA3RixFVEVNUF9FWCglYTYpCXxzaW5nbGUgK21heAorCWJuZXMJY2FzZTIKKwltb3ZldwkjMHg0M0ZGLEVURU1QX0VYKCVhNikJfHRvIGRvdWJsZSArbWF4CisJYnJhCWZpbmlzaAorY2FzZTI6CisJY21wdwkjMHhDMDdGLEVURU1QX0VYKCVhNikJfHNpbmdsZSAtbWF4CisJYm5lcwljYXNlMworCW1vdmV3CSMweEMzRkYsRVRFTVBfRVgoJWE2KQl8dG8gZG91YmxlIC1tYXgKKwlicmEJZmluaXNoCitjYXNlMzoKKwljbXB3CSMweDNGODAsRVRFTVBfRVgoJWE2KQl8c2luZ2xlICttaW4KKwlibmVzCWNhc2U0CisJbW92ZXcJIzB4M0MwMCxFVEVNUF9FWCglYTYpCXx0byBkb3VibGUgK21pbgorCWJyYQlmaW5pc2gKK2Nhc2U0OgorCWNtcHcJIzB4QkY4MCxFVEVNUF9FWCglYTYpCXxzaW5nbGUgLW1pbgorCWJuZQlmaXhfZG9uZQorCW1vdmV3CSMweEJDMDAsRVRFTVBfRVgoJWE2KQl8dG8gZG91YmxlIC1taW4KKwlicmEJZmluaXNoCit8Cit8IFRoZSBmcmFtZSByZXR1cm5lZCBpcyBidXN5LiAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlY29uc3RydWN0Cit8IHRoZSBjb2RlIHNlcXVlbmNlIHRvIGFsbG93IGNvbXBsZXRpb24uICBmcHNwX2ZtdF9lcnJvciBjYXVzZXMKK3wgYW4gZmxpbmUgaWxsZWdhbCBpbnN0cnVjdGlvbiB0byBiZSBleGVjdXRlZC4KK3wKK3wgWW91IHNob3VsZCByZXBsYWNlIHRoZSBqdW1wIHRvIGZwc3BfZm10X2Vycm9yIHdpdGggYSBqdW1wCit8IHRvIHRoZSBlbnRyeSBwb2ludCB1c2VkIHRvIGtpbGwgYSBwcm9jZXNzLgorfAorb3AyX3hiOgorCWptcAlmcHNwX2ZtdF9lcnJvcgorCit8Cit8IEVudGVyIGhlcmUgaWYgdGhlIGNhc2UgaXMgbm90IG9mIHRoZSBzaXR1YXRpb25zIGFmZmVjdGVkIGJ5Cit8IGJ1ZyAjMTIzOCwgb3IgaWYgdGhlIGZpeCBpcyBjb21wbGV0ZWQsIGFuZCBleGl0LgorfAorZmluaXNoOgorZml4X2RvbmU6CisJcnRzCisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9kZWNiaW4uUyBiL2FyY2gvbTY4ay9mcHNwMDQwL2RlY2Jpbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNjA2MDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC9kZWNiaW4uUwpAQCAtMCwwICsxLDUwNiBAQAorfAorfAlkZWNiaW4uc2EgMy4zIDEyLzE5LzkwCit8Cit8CURlc2NyaXB0aW9uOiBDb252ZXJ0cyBub3JtYWxpemVkIHBhY2tlZCBiY2QgdmFsdWUgcG9pbnRlZCB0byBieQorfAlyZWdpc3RlciBBNiB0byBleHRlbmRlZC1wcmVjaXNpb24gdmFsdWUgaW4gRlAwLgorfAorfAlJbnB1dDogTm9ybWFsaXplZCBwYWNrZWQgYmNkIHZhbHVlIGluIEVURU1QKGE2KS4KK3wKK3wJT3V0cHV0OglFeGFjdCBmbG9hdGluZy1wb2ludCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGFja2VkIGJjZCB2YWx1ZS4KK3wKK3wJU2F2ZXMgYW5kIE1vZGlmaWVzOiBEMi1ENQorfAorfAlTcGVlZDogVGhlIHByb2dyYW0gZGVjYmluIHRha2VzID8/PyBjeWNsZXMgdG8gZXhlY3V0ZS4KK3wKK3wJT2JqZWN0IFNpemU6Cit8Cit8CUV4dGVybmFsIFJlZmVyZW5jZShzKTogTm9uZS4KK3wKK3wJQWxnb3JpdGhtOgorfAlFeHBlY3RlZCBpcyBhIG5vcm1hbCBiY2QgKGkuZS4gbm9uLWV4Y2VwdGlvbmFsOyBhbGwgaW5mLCB6ZXJvLAorfAlhbmQgTmFOIG9wZXJhbmRzIGFyZSBkaXNwYXRjaGVkIHdpdGhvdXQgZW50ZXJpbmcgdGhpcyByb3V0aW5lKQorfAl2YWx1ZSBpbiA2ODg4MS84ODIgZm9ybWF0IGF0IGxvY2F0aW9uIEVURU1QKEE2KS4KK3wKK3wJQTEuCUNvbnZlcnQgdGhlIGJjZCBleHBvbmVudCB0byBiaW5hcnkgYnkgc3VjY2Vzc2l2ZSBhZGRzIGFuZCBtdWxzLgorfAlTZXQgdGhlIHNpZ24gYWNjb3JkaW5nIHRvIFNFLiBTdWJ0cmFjdCAxNiB0byBjb21wZW5zYXRlCit8CWZvciB0aGUgbWFudGlzc2Egd2hpY2ggaXMgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgMTcgaW50ZWdlcgorfAlkaWdpdHMsIHJhdGhlciB0aGFuIDEgaW50ZWdlciBhbmQgMTYgZnJhY3Rpb24gZGlnaXRzLgorfAlOb3RlOiB0aGlzIG9wZXJhdGlvbiBjYW4gbmV2ZXIgb3ZlcmZsb3cuCit8Cit8CUEyLiBDb252ZXJ0IHRoZSBiY2QgbWFudGlzc2EgdG8gYmluYXJ5IGJ5IHN1Y2Nlc3NpdmUKK3wJYWRkcyBhbmQgbXVscyBpbiBGUDAuIFNldCB0aGUgc2lnbiBhY2NvcmRpbmcgdG8gU00uCit8CVRoZSBtYW50aXNzYSBkaWdpdHMgd2lsbCBiZSBjb252ZXJ0ZWQgd2l0aCB0aGUgZGVjaW1hbCBwb2ludAorfAlhc3N1bWVkIGZvbGxvd2luZyB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgZGlnaXQuCit8CU5vdGU6IHRoaXMgb3BlcmF0aW9uIGNhbiBuZXZlciBvdmVyZmxvdy4KK3wKK3wJQTMuIENvdW50IHRoZSBudW1iZXIgb2YgbGVhZGluZy90cmFpbGluZyB6ZXJvcyBpbiB0aGUKK3wJYmNkIHN0cmluZy4gIElmIFNFIGlzIHBvc2l0aXZlLCBjb3VudCB0aGUgbGVhZGluZyB6ZXJvczsKK3wJaWYgbmVnYXRpdmUsIGNvdW50IHRoZSB0cmFpbGluZyB6ZXJvcy4gIFNldCB0aGUgYWRqdXN0ZWQKK3wJZXhwb25lbnQgZXF1YWwgdG8gdGhlIGV4cG9uZW50IGZyb20gQTEgYW5kIHRoZSB6ZXJvIGNvdW50Cit8CWFkZGVkIGlmIFNNID0gMSBhbmQgc3VidHJhY3RlZCBpZiBTTSA9IDAuICBTY2FsZSB0aGUKK3wJbWFudGlzc2EgdGhlIGVxdWl2YWxlbnQgb2YgZm9yY2luZyBpbiB0aGUgYmNkIHZhbHVlOgorfAorfAlTTSA9IDAJYSBub24temVybyBkaWdpdCBpbiB0aGUgaW50ZWdlciBwb3NpdGlvbgorfAlTTSA9IDEJYSBub24temVybyBkaWdpdCBpbiBNYW50MCwgbHNkIG9mIHRoZSBmcmFjdGlvbgorfAorfAl0aGlzIHdpbGwgaW5zdXJlIHRoYXQgYW55IHZhbHVlLCByZWdhcmRsZXNzIG9mIGl0cworfAlyZXByZXNlbnRhdGlvbiAoZXguIDAuMUUyLCAxRTEsIDEwRTAsIDEwMEUtMSksIGlzIGNvbnZlcnRlZAorfAljb25zaXN0ZW50bHkuCit8Cit8CUE0LiBDYWxjdWxhdGUgdGhlIGZhY3RvciAxMF5leHAgaW4gRlAxIHVzaW5nIGEgdGFibGUgb2YKK3wJMTBeKDJebikgdmFsdWVzLiAgVG8gcmVkdWNlIHRoZSBlcnJvciBpbiBmb3JtaW5nIGZhY3RvcnMKK3wJZ3JlYXRlciB0aGFuIDEwXjI3LCBhIGRpcmVjdGVkIHJvdW5kaW5nIHNjaGVtZSBpcyB1c2VkIHdpdGgKK3wJdGFibGVzIHJvdW5kZWQgdG8gUk4sIFJNLCBhbmQgUlAsIGFjY29yZGluZyB0byB0aGUgdGFibGUKK3wJaW4gdGhlIGNvbW1lbnRzIG9mIHRoZSBwd3J0ZW4gc2VjdGlvbi4KK3wKK3wJQTUuIEZvcm0gdGhlIGZpbmFsIGJpbmFyeSBudW1iZXIgYnkgc2NhbGluZyB0aGUgbWFudGlzc2EgYnkKK3wJdGhlIGV4cG9uZW50IGZhY3Rvci4gIFRoaXMgaXMgZG9uZSBieSBtdWx0aXBseWluZyB0aGUKK3wJbWFudGlzc2EgaW4gRlAwIGJ5IHRoZSBmYWN0b3IgaW4gRlAxIGlmIHRoZSBhZGp1c3RlZAorfAlleHBvbmVudCBzaWduIGlzIHBvc2l0aXZlLCBhbmQgZGl2aWRpbmcgRlAwIGJ5IEZQMSBpZgorfAlpdCBpcyBuZWdhdGl2ZS4KK3wKK3wJQ2xlYW4gdXAgYW5kIHJldHVybi4gIENoZWNrIGlmIHRoZSBmaW5hbCBtdWwgb3IgZGl2IHJlc3VsdGVkCit8CWluIGFuIGluZXgyIGV4Y2VwdGlvbi4gIElmIHNvLCBzZXQgaW5leDEgaW4gdGhlIGZwc3IgYW5kCit8CWNoZWNrIGlmIHRoZSBpbmV4MSBleGNlcHRpb24gaXMgZW5hYmxlZC4gIElmIHNvLCBzZXQgZDcgdXBwZXIKK3wJd29yZCB0byAkMDEwMC4gIFRoaXMgd2lsbCBzaWduYWwgdW5pbXAuc2EgdGhhdCBhbiBlbmFibGVkIGluZXgxCit8CWV4Y2VwdGlvbiBvY2N1cnJlZC4gIFVuaW1wIHdpbGwgZml4IHRoZSBzdGFjay4KK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfERFQ0JJTiAgICBpZG50ICAgIDIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKwl8c2VjdGlvbgk4CisKKyNpbmNsdWRlICJmcHNwLmgiCisKK3wKK3wJUFRFTlJOLCBQVEVOUk0sIGFuZCBQVEVOUlAgYXJlIGFycmF5cyBvZiBwb3dlcnMgb2YgMTAgcm91bmRlZAorfAl0byBuZWFyZXN0LCBtaW51cywgYW5kIHBsdXMsIHJlc3BlY3RpdmVseS4gIFRoZSB0YWJsZXMgaW5jbHVkZQorfAkxMCoqezEsMiw0LDgsMTYsMzIsNjQsMTI4LDI1Niw1MTIsMTAyNCwyMDQ4LDQwOTZ9LiAgTm8gcm91bmRpbmcKK3wJaXMgcmVxdWlyZWQgdW50aWwgdGhlIHBvd2VyIGlzIGdyZWF0ZXIgdGhhbiAyNywgaG93ZXZlciwgYWxsCit8CXRhYmxlcyBpbmNsdWRlIHRoZSBmaXJzdCA1IGZvciBlYXNlIG9mIGluZGV4aW5nLgorfAorCXx4cmVmCVBURU5STgorCXx4cmVmCVBURU5STQorCXx4cmVmCVBURU5SUAorCitSVEFCTEU6CS5ieXRlCTAsMCwwLDAKKwkuYnl0ZQkyLDMsMiwzCisJLmJ5dGUJMiwzLDMsMgorCS5ieXRlCTMsMiwyLDMKKworCS5nbG9iYWwJZGVjYmluCisJLmdsb2JhbAljYWxjX2UKKwkuZ2xvYmFsCXB3cnRlbgorCS5nbG9iYWwJY2FsY19tCisJLmdsb2JhbAlub3JtCisJLmdsb2JhbAlhcF9zdF96CisJLmdsb2JhbAlhcF9zdF9uCit8CisJLnNldAlGTklCUyw3CisJLnNldAlGU1RSVCwwCit8CisJLnNldAlFU1RSVCw0CisJLnNldAlFRElHSVRTLDIJfAorfAorfCBDb25zdGFudHMgaW4gc2luZ2xlIHByZWNpc2lvbgorRlpFUk86CS5sb25nCTB4MDAwMDAwMDAKK0ZPTkU6CS5sb25nCTB4M0Y4MDAwMDAKK0ZURU46CS5sb25nCTB4NDEyMDAwMDAKKworCS5zZXQJVEVOLDEwCisKK3wKK2RlY2JpbjoKKwl8IGZtb3ZlbAkjMCxGUENSCQk7Y2xyIHJlYWwgZnBjcgorCW1vdmVtbAklZDItJWQ1LC0oJWE3KQorfAorfCBDYWxjdWxhdGUgZXhwb25lbnQ6Cit8ICAxLiBDb3B5IGJjZCB2YWx1ZSBpbiBtZW1vcnkgZm9yIHVzZSBhcyBhIHdvcmtpbmcgY29weS4KK3wgIDIuIENhbGN1bGF0ZSBhYnNvbHV0ZSB2YWx1ZSBvZiBleHBvbmVudCBpbiBkMSBieSBtdWwgYW5kIGFkZC4KK3wgIDMuIENvcnJlY3QgZm9yIGV4cG9uZW50IHNpZ24uCit8ICA0LiBTdWJ0cmFjdCAxNiB0byBjb21wZW5zYXRlIGZvciBpbnRlcnByZXRpbmcgdGhlIG1hbnQgYXMgYWxsIGludGVnZXIgZGlnaXRzLgorfCAgICAgKGkuZS4sIGFsbCBkaWdpdHMgYXNzdW1lZCBsZWZ0IG9mIHRoZSBkZWNpbWFsIHBvaW50LikKK3wKK3wgUmVnaXN0ZXIgdXNhZ2U6Cit8Cit8ICBjYWxjX2U6Cit8CSgqKSAgZDA6IHRlbXAgZGlnaXQgc3RvcmFnZQorfAkoKikgIGQxOiBhY2N1bXVsYXRvciBmb3IgYmluYXJ5IGV4cG9uZW50Cit8CSgqKSAgZDI6IGRpZ2l0IGNvdW50Cit8CSgqKSAgZDM6IG9mZnNldCBwb2ludGVyCit8CSggKSAgZDQ6IGZpcnN0IHdvcmQgb2YgYmNkCit8CSggKSAgYTA6IHBvaW50ZXIgdG8gd29ya2luZyBiY2QgdmFsdWUKK3wJKCApICBhNjogcG9pbnRlciB0byBvcmlnaW5hbCBiY2QgdmFsdWUKK3wJKCopICBGUF9TQ1IxOiB3b3JraW5nIGNvcHkgb2Ygb3JpZ2luYWwgYmNkIHZhbHVlCit8CSgqKSAgTF9TQ1IxOiBjb3B5IG9mIG9yaWdpbmFsIGV4cG9uZW50IHdvcmQKK3wKK2NhbGNfZToKKwltb3ZlbAkjRURJR0lUUywlZDIJfCMgb2YgbmliYmxlcyAoZGlnaXRzKSBpbiBmcmFjdGlvbiBwYXJ0CisJbW92ZXFsCSNFU1RSVCwlZDMJfGNvdW50ZXIgdG8gcGljayB1cCBkaWdpdHMKKwlsZWFsCUZQX1NDUjEoJWE2KSwlYTAJfGxvYWQgdG1wIGJjZCBzdG9yYWdlIGFkZHJlc3MKKwltb3ZlbAlFVEVNUCglYTYpLCglYTApCXxzYXZlIGlucHV0IGJjZCB2YWx1ZQorCW1vdmVsCUVURU1QX0hJKCVhNiksNCglYTApIHxzYXZlIHdvcmRzIDIgYW5kIDMKKwltb3ZlbAlFVEVNUF9MTyglYTYpLDgoJWEwKSB8YW5kIHdvcmsgd2l0aCB0aGVzZQorCW1vdmVsCSglYTApLCVkNAl8Z2V0IGZpcnN0IHdvcmQgb2YgYmNkCisJY2xybAklZDEJCXx6ZXJvIGQxIGZvciBhY2N1bXVsYXRvcgorZV9nZDoKKwltdWx1bAkjVEVOLCVkMQl8bXVsIHBhcnRpYWwgcHJvZHVjdCBieSBvbmUgZGlnaXQgcGxhY2UKKwliZmV4dHUJJWQ0eyVkMzojNH0sJWQwCXxnZXQgdGhlIGRpZ2l0IGFuZCB6ZXJvIGV4dGVuZCBpbnRvIGQwCisJYWRkbAklZDAsJWQxCQl8ZDEgPSBkMSArIGQwCisJYWRkcWIJIzQsJWQzCQl8YWR2YW5jZSBkMyB0byB0aGUgbmV4dCBkaWdpdAorCWRiZgklZDIsZV9nZAl8aWYgd2UgaGF2ZSB1c2VkIGFsbCAzIGRpZ2l0cywgZXhpdCBsb29wCisJYnRzdAkjMzAsJWQ0CQl8Z2V0IFNFCisJYmVxcwllX3BvcwkJfGRvbid0IG5lZ2F0ZSBpZiBwb3MKKwluZWdsCSVkMQkJfG5lZ2F0ZSBiZWZvcmUgc3VidHJhY3RpbmcKK2VfcG9zOgorCXN1YmwJIzE2LCVkMQkJfHN1YiB0byBjb21wZW5zYXRlIGZvciBzaGlmdCBvZiBtYW50CisJYmdlcwllX3NhdmUJCXxpZiBzdGlsbCBwb3MsIGRvIG5vdCBuZWcKKwluZWdsCSVkMQkJfG5vdyBuZWdhdGl2ZSwgbWFrZSBwb3MgYW5kIHNldCBTRQorCW9ybAkjMHg0MDAwMDAwMCwlZDQJfHNldCBTRSBpbiBkNCwKKwlvcmwJIzB4NDAwMDAwMDAsKCVhMCkJfGFuZCBpbiB3b3JraW5nIGJjZAorZV9zYXZlOgorCW1vdmVsCSVkMSxMX1NDUjEoJWE2KQl8c2F2ZSBleHAgaW4gbWVtb3J5Cit8Cit8Cit8IENhbGN1bGF0ZSBtYW50aXNzYToKK3wgIDEuIENhbGN1bGF0ZSBhYnNvbHV0ZSB2YWx1ZSBvZiBtYW50aXNzYSBpbiBmcDAgYnkgbXVsIGFuZCBhZGQuCit8ICAyLiBDb3JyZWN0IGZvciBtYW50aXNzYSBzaWduLgorfCAgICAgKGkuZS4sIGFsbCBkaWdpdHMgYXNzdW1lZCBsZWZ0IG9mIHRoZSBkZWNpbWFsIHBvaW50LikKK3wKK3wgUmVnaXN0ZXIgdXNhZ2U6Cit8Cit8ICBjYWxjX206Cit8CSgqKSAgZDA6IHRlbXAgZGlnaXQgc3RvcmFnZQorfAkoKikgIGQxOiBsd29yZCBjb3VudGVyCit8CSgqKSAgZDI6IGRpZ2l0IGNvdW50Cit8CSgqKSAgZDM6IG9mZnNldCBwb2ludGVyCit8CSggKSAgZDQ6IHdvcmRzIDIgYW5kIDMgb2YgYmNkCit8CSggKSAgYTA6IHBvaW50ZXIgdG8gd29ya2luZyBiY2QgdmFsdWUKK3wJKCApICBhNjogcG9pbnRlciB0byBvcmlnaW5hbCBiY2QgdmFsdWUKK3wJKCopIGZwMDogbWFudGlzc2EgYWNjdW11bGF0b3IKK3wJKCApICBGUF9TQ1IxOiB3b3JraW5nIGNvcHkgb2Ygb3JpZ2luYWwgYmNkIHZhbHVlCit8CSggKSAgTF9TQ1IxOiBjb3B5IG9mIG9yaWdpbmFsIGV4cG9uZW50IHdvcmQKK3wKK2NhbGNfbToKKwltb3ZlcWwJIzEsJWQxCQl8d29yZCBjb3VudGVyLCBpbml0IHRvIDEKKwlmbW92ZXMJRlpFUk8sJWZwMAl8YWNjdW11bGF0b3IKK3wKK3wKK3wgIFNpbmNlIHRoZSBwYWNrZWQgbnVtYmVyIGhhcyBhIGxvbmcgd29yZCBiZXR3ZWVuIHRoZSBmaXJzdCAmIHNlY29uZCBwYXJ0cywKK3wgIGdldCB0aGUgaW50ZWdlciBkaWdpdCB0aGVuIHNraXAgZG93biAmIGdldCB0aGUgcmVzdCBvZiB0aGUKK3wgIG1hbnRpc3NhLiAgV2Ugd2lsbCB1bnJvbGwgdGhlIGxvb3Agb25jZS4KK3wKKwliZmV4dHUJKCVhMCl7IzI4OiM0fSwlZDAJfGludGVnZXIgcGFydCBpcyBscyBkaWdpdCBpbiBsb25nIHdvcmQKKwlmYWRkYgklZDAsJWZwMAkJfGFkZCBkaWdpdCB0byBzdW0gaW4gZnAwCit8Cit8Cit8ICBHZXQgdGhlIHJlc3Qgb2YgdGhlIG1hbnRpc3NhLgorfAorbG9hZGx3OgorCW1vdmVsCSglYTAsJWQxLkwqNCksJWQ0CXxsb2FkIG1hbnRpc3NhIGxvbmd3b3JkIGludG8gZDQKKwltb3ZlcWwJI0ZTVFJULCVkMwl8Y291bnRlciB0byBwaWNrIHVwIGRpZ2l0cworCW1vdmVxbAkjRk5JQlMsJWQyCXxyZXNldCBudW1iZXIgb2YgZGlnaXRzIHBlciBhMCBwdHIKK21kMmI6CisJZm11bHMJRlRFTiwlZnAwCXxmcDAgPSBmcDAgKiAxMAorCWJmZXh0dQklZDR7JWQzOiM0fSwlZDAJfGdldCB0aGUgZGlnaXQgYW5kIHplcm8gZXh0ZW5kCisJZmFkZGIJJWQwLCVmcDAJfGZwMCA9IGZwMCArIGRpZ2l0Cit8Cit8Cit8ICBJZiBhbGwgdGhlIGRpZ2l0cyAoOCkgaW4gdGhhdCBsb25nIHdvcmQgaGF2ZSBiZWVuIGNvbnZlcnRlZCAoZDI9MCksCit8ICB0aGVuIGluYyBkMSAoPTIpIHRvIHBvaW50IHRvIHRoZSBuZXh0IGxvbmcgd29yZCBhbmQgcmVzZXQgZDMgdG8gMAorfCAgdG8gaW5pdGlhbGl6ZSB0aGUgZGlnaXQgb2Zmc2V0LCBhbmQgc2V0IGQyIHRvIDcgZm9yIHRoZSBkaWdpdCBjb3VudDsKK3wgIGVsc2UgY29udGludWUgd2l0aCB0aGlzIGxvbmcgd29yZC4KK3wKKwlhZGRxYgkjNCwlZDMJCXxhZHZhbmNlIGQzIHRvIHRoZSBuZXh0IGRpZ2l0CisJZGJmCSVkMixtZDJiCQl8Y2hlY2sgZm9yIGxhc3QgZGlnaXQgaW4gdGhpcyBsdworbmV4dGx3OgorCWFkZHFsCSMxLCVkMQkJfGluYyBsdyBwb2ludGVyIGluIG1hbnRpc3NhCisJY21wbAkjMiwlZDEJCXx0ZXN0IGZvciBsYXN0IGx3CisJYmxlCWxvYWRsdwkJfGlmIG5vdCwgZ2V0IGxhc3Qgb25lCisKK3wKK3wgIENoZWNrIHRoZSBzaWduIG9mIHRoZSBtYW50IGFuZCBtYWtlIHRoZSB2YWx1ZSBpbiBmcDAgdGhlIHNhbWUgc2lnbi4KK3wKK21fc2lnbjoKKwlidHN0CSMzMSwoJWEwKQl8dGVzdCBzaWduIG9mIHRoZSBtYW50aXNzYQorCWJlcQlhcF9zdF96CQl8aWYgY2xlYXIsIGdvIHRvIGFwcGVuZC9zdHJpcCB6ZXJvcworCWZuZWd4CSVmcDAJCXxpZiBzZXQsIG5lZ2F0ZSBmcDAKKworfAorfCBBcHBlbmQvc3RyaXAgemVyb3M6Cit8Cit8ICBGb3IgYWRqdXN0ZWQgZXhwb25lbnRzIHdoaWNoIGhhdmUgYW4gYWJzb2x1dGUgdmFsdWUgZ3JlYXRlciB0aGFuIDI3KiwKK3wgIHRoaXMgcm91dGluZSBjYWxjdWxhdGVzIHRoZSBhbW91bnQgbmVlZGVkIHRvIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EKK3wgIGZvciB0aGUgYWRqdXN0ZWQgZXhwb25lbnQuICBUaGF0IG51bWJlciBpcyBzdWJ0cmFjdGVkIGZyb20gdGhlIGV4cAorfCAgaWYgdGhlIGV4cCB3YXMgcG9zaXRpdmUsIGFuZCBhZGRlZCBpZiBpdCB3YXMgbmVnYXRpdmUuICBUaGUgcHVycG9zZQorfCAgb2YgdGhpcyBpcyB0byByZWR1Y2UgdGhlIHZhbHVlIG9mIHRoZSBleHBvbmVudCBhbmQgdGhlIHBvc3NpYmlsaXR5Cit8ICBvZiBlcnJvciBpbiBjYWxjdWxhdGlvbiBvZiBwd3J0ZW4uCit8Cit8ICAxLiBCcmFuY2ggb24gdGhlIHNpZ24gb2YgdGhlIGFkanVzdGVkIGV4cG9uZW50LgorfCAgMnAuKHBvc2l0aXZlIGV4cCkKK3wgICAyLiBDaGVjayBNMTYgYW5kIHRoZSBkaWdpdHMgaW4gbHdvcmRzIDIgYW5kIDMgaW4gZGVzY2VuZGluZyBvcmRlci4KK3wgICAzLiBBZGQgb25lIGZvciBlYWNoIHplcm8gZW5jb3VudGVyZWQgdW50aWwgYSBub24temVybyBkaWdpdC4KK3wgICA0LiBTdWJ0cmFjdCB0aGUgY291bnQgZnJvbSB0aGUgZXhwLgorfCAgIDUuIENoZWNrIGlmIHRoZSBleHAgaGFzIGNyb3NzZWQgemVybyBpbiAjMyBhYm92ZTsgbWFrZSB0aGUgZXhwIGFicworfAkgICBhbmQgc2V0IFNFLgorfAk2LiBNdWx0aXBseSB0aGUgbWFudGlzc2EgYnkgMTAqKmNvdW50LgorfCAgMm4uKG5lZ2F0aXZlIGV4cCkKK3wgICAyLiBDaGVjayB0aGUgZGlnaXRzIGluIGx3b3JkcyAzIGFuZCAyIGluIGRlc2NlbmRpbmcgb3JkZXIuCit8ICAgMy4gQWRkIG9uZSBmb3IgZWFjaCB6ZXJvIGVuY291bnRlcmVkIHVudGlsIGEgbm9uLXplcm8gZGlnaXQuCit8ICAgNC4gQWRkIHRoZSBjb3VudCB0byB0aGUgZXhwLgorfCAgIDUuIENoZWNrIGlmIHRoZSBleHAgaGFzIGNyb3NzZWQgemVybyBpbiAjMyBhYm92ZTsgY2xlYXIgU0UuCit8ICAgNi4gRGl2aWRlIHRoZSBtYW50aXNzYSBieSAxMCoqY291bnQuCit8Cit8ICAqV2h5IDI3PyAgSWYgdGhlIGFkanVzdGVkIGV4cG9uZW50IGlzIHdpdGhpbiAtMjggPCBleHBBIDwgMjgsIHRoYW4KK3wgICBhbnkgYWRqdXN0bWVudCBkdWUgdG8gYXBwZW5kL3N0cmlwIHplcm9zIHdpbGwgZHJpdmUgdGhlIHJlc3VsdGFudAorfCAgIGV4cG9uZW50IHRvd2FyZHMgemVyby4gIFNpbmNlIGFsbCBwd3J0ZW4gY29uc3RhbnRzIHdpdGggYSBwb3dlcgorfCAgIG9mIDI3IG9yIGxlc3MgYXJlIGV4YWN0LCB0aGVyZSBpcyBubyBuZWVkIHRvIHVzZSB0aGlzIHJvdXRpbmUgdG8KK3wgICBhdHRlbXB0IHRvIGxlc3NlbiB0aGUgcmVzdWx0YW50IGV4cG9uZW50LgorfAorfCBSZWdpc3RlciB1c2FnZToKK3wKK3wgIGFwX3N0X3o6Cit8CSgqKSAgZDA6IHRlbXAgZGlnaXQgc3RvcmFnZQorfAkoKikgIGQxOiB6ZXJvIGNvdW50Cit8CSgqKSAgZDI6IGRpZ2l0IGNvdW50Cit8CSgqKSAgZDM6IG9mZnNldCBwb2ludGVyCit8CSggKSAgZDQ6IGZpcnN0IHdvcmQgb2YgYmNkCit8CSgqKSAgZDU6IGx3b3JkIGNvdW50ZXIKK3wJKCApICBhMDogcG9pbnRlciB0byB3b3JraW5nIGJjZCB2YWx1ZQorfAkoICkgIEZQX1NDUjE6IHdvcmtpbmcgY29weSBvZiBvcmlnaW5hbCBiY2QgdmFsdWUKK3wJKCApICBMX1NDUjE6IGNvcHkgb2Ygb3JpZ2luYWwgZXhwb25lbnQgd29yZAorfAorfAorfCBGaXJzdCBjaGVjayB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIGV4cG9uZW50IHRvIHNlZSBpZiB0aGlzCit8IHJvdXRpbmUgaXMgbmVjZXNzYXJ5LiAgSWYgc28sIHRoZW4gY2hlY2sgdGhlIHNpZ24gb2YgdGhlIGV4cG9uZW50Cit8IGFuZCBkbyBhcHBlbmQgKCspIG9yIHN0cmlwICgtKSB6ZXJvcyBhY2NvcmRpbmdseS4KK3wgVGhpcyBzZWN0aW9uIGhhbmRsZXMgYSBwb3NpdGl2ZSBhZGp1c3RlZCBleHBvbmVudC4KK3wKK2FwX3N0X3o6CisJbW92ZWwJTF9TQ1IxKCVhNiksJWQxCXxsb2FkIGV4cEEgZm9yIHJhbmdlIHRlc3QKKwljbXBsCSMyNywlZDEJCXx0ZXN0IGlzIHdpdGggMjcKKwlibGUJcHdydGVuCQl8aWYgYWJzKGV4cEEpIDwyOCwgc2tpcCBhcC9zdCB6ZXJvcworCWJ0c3QJIzMwLCglYTApCXxjaGVjayBzaWduIG9mIGV4cAorCWJuZQlhcF9zdF9uCQl8aWYgbmVnLCBnbyB0byBuZWcgc2lkZQorCWNscmwJJWQxCQl8emVybyBjb3VudCByZWcKKwltb3ZlbAkoJWEwKSwlZDQJCXxsb2FkIGx3b3JkIDEgdG8gZDQKKwliZmV4dHUJJWQ0eyMyODojNH0sJWQwCXxnZXQgTTE2IGluIGQwCisJYm5lcwlhcF9wX2Z4CQl8aWYgTTE2IGlzIG5vbi16ZXJvLCBnbyBmaXggZXhwCisJYWRkcWwJIzEsJWQxCQl8aW5jIHplcm8gY291bnQKKwltb3ZlcWwJIzEsJWQ1CQl8aW5pdCBsd29yZCBjb3VudGVyCisJbW92ZWwJKCVhMCwlZDUuTCo0KSwlZDQJfGdldCBsd29yZCAyIHRvIGQ0CisJYm5lcwlhcF9wX2NsCQl8aWYgbHcgMiBpcyB6ZXJvLCBza2lwIGl0CisJYWRkcWwJIzgsJWQxCQl8YW5kIGluYyBjb3VudCBieSA4CisJYWRkcWwJIzEsJWQ1CQl8aW5jIGx3b3JkIGNvdW50ZXIKKwltb3ZlbAkoJWEwLCVkNS5MKjQpLCVkNAl8Z2V0IGx3b3JkIDMgdG8gZDQKK2FwX3BfY2w6CisJY2xybAklZDMJCXxpbml0IG9mZnNldCByZWcKKwltb3ZlcWwJIzcsJWQyCQl8aW5pdCBkaWdpdCBjb3VudGVyCithcF9wX2dkOgorCWJmZXh0dQklZDR7JWQzOiM0fSwlZDAJfGdldCBkaWdpdAorCWJuZXMJYXBfcF9meAkJfGlmIG5vbi16ZXJvLCBnbyB0byBmaXggZXhwCisJYWRkcWwJIzQsJWQzCQl8cG9pbnQgdG8gbmV4dCBkaWdpdAorCWFkZHFsCSMxLCVkMQkJfGluYyBkaWdpdCBjb3VudGVyCisJZGJmCSVkMixhcF9wX2dkCXxnZXQgbmV4dCBkaWdpdAorYXBfcF9meDoKKwltb3ZlbAklZDEsJWQwCQl8Y29weSBjb3VudGVyIHRvIGQyCisJbW92ZWwJTF9TQ1IxKCVhNiksJWQxCXxnZXQgYWRqdXN0ZWQgZXhwIGZyb20gbWVtb3J5CisJc3VibAklZDAsJWQxCQl8c3VidHJhY3QgY291bnQgZnJvbSBleHAKKwliZ2VzCWFwX3BfZm0JCXxpZiBzdGlsbCBwb3MsIGdvIHRvIHB3cnRlbgorCW5lZ2wJJWQxCQl8bm93IGl0cyBuZWc7IGdldCBhYnMKKwltb3ZlbAkoJWEwKSwlZDQJCXxsb2FkIGx3b3JkIDEgdG8gZDQKKwlvcmwJIzB4NDAwMDAwMDAsJWQ0CXwgYW5kIHNldCBTRSBpbiBkNAorCW9ybAkjMHg0MDAwMDAwMCwoJWEwKQl8IGFuZCBpbiBtZW1vcnkKK3wKK3wgQ2FsY3VsYXRlIHRoZSBtYW50aXNzYSBtdWx0aXBsaWVyIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBzdHJpcGluZyBvZgorfCB6ZXJvcyBmcm9tIHRoZSBtYW50aXNzYS4KK3wKK2FwX3BfZm06CisJbW92ZWwJI1BURU5STiwlYTEJfGdldCBhZGRyZXNzIG9mIHBvd2VyLW9mLXRlbiB0YWJsZQorCWNscmwJJWQzCQl8aW5pdCB0YWJsZSBpbmRleAorCWZtb3ZlcwlGT05FLCVmcDEJfGluaXQgZnAxIHRvIDEKKwltb3ZlcWwJIzMsJWQyCQl8aW5pdCBkMiB0byBjb3VudCBiaXRzIGluIGNvdW50ZXIKK2FwX3BfZWw6CisJYXNybAkjMSwlZDAJCXxzaGlmdCBsc2IgaW50byBjYXJyeQorCWJjY3MJYXBfcF9lbgkJfGlmIDEsIG11bCBmcDEgYnkgcHdydGVuIGZhY3RvcgorCWZtdWx4CSglYTEsJWQzKSwlZnAxCXxtdWwgYnkgMTAqKihkM19iaXRfbm8pCithcF9wX2VuOgorCWFkZGwJIzEyLCVkMwkJfGluYyBkMyB0byBuZXh0IHJ0YWJsZSBlbnRyeQorCXRzdGwJJWQwCQl8Y2hlY2sgaWYgZDAgaXMgemVybworCWJuZXMJYXBfcF9lbAkJfGlmIG5vdCwgZ2V0IG5leHQgYml0CisJZm11bHgJJWZwMSwlZnAwCQl8bXVsIG1hbnRpc3NhIGJ5IDEwKioobm9fYml0c19zaGlmdGVkKQorCWJyYQlwd3J0ZW4JCXxnbyBjYWxjIHB3cnRlbgorfAorfCBUaGlzIHNlY3Rpb24gaGFuZGxlcyBhIG5lZ2F0aXZlIGFkanVzdGVkIGV4cG9uZW50LgorfAorYXBfc3RfbjoKKwljbHJsCSVkMQkJfGNsciBjb3VudGVyCisJbW92ZXFsCSMyLCVkNQkJfHNldCB1cCBkNSB0byBwb2ludCB0byBsd29yZCAzCisJbW92ZWwJKCVhMCwlZDUuTCo0KSwlZDQJfGdldCBsd29yZCAzCisJYm5lcwlhcF9uX2NsCQl8aWYgbm90IHplcm8sIGNoZWNrIGRpZ2l0cworCXN1YmwJIzEsJWQ1CQl8ZGVjIGQ1IHRvIHBvaW50IHRvIGx3b3JkIDIKKwlhZGRxbAkjOCwlZDEJCXxpbmMgY291bnRlciBieSA4CisJbW92ZWwJKCVhMCwlZDUuTCo0KSwlZDQJfGdldCBsd29yZCAyCithcF9uX2NsOgorCW1vdmVsCSMyOCwlZDMJCXxwb2ludCB0byBsYXN0IGRpZ2l0CisJbW92ZXFsCSM3LCVkMgkJfGluaXQgZGlnaXQgY291bnRlcgorYXBfbl9nZDoKKwliZmV4dHUJJWQ0eyVkMzojNH0sJWQwCXxnZXQgZGlnaXQKKwlibmVzCWFwX25fZngJCXxpZiBub24temVybywgZ28gdG8gZXhwIGZpeAorCXN1YnFsCSM0LCVkMwkJfHBvaW50IHRvIHByZXZpb3VzIGRpZ2l0CisJYWRkcWwJIzEsJWQxCQl8aW5jIGRpZ2l0IGNvdW50ZXIKKwlkYmYJJWQyLGFwX25fZ2QJfGdldCBuZXh0IGRpZ2l0CithcF9uX2Z4OgorCW1vdmVsCSVkMSwlZDAJCXxjb3B5IGNvdW50ZXIgdG8gZDAKKwltb3ZlbAlMX1NDUjEoJWE2KSwlZDEJfGdldCBhZGp1c3RlZCBleHAgZnJvbSBtZW1vcnkKKwlzdWJsCSVkMCwlZDEJCXxzdWJ0cmFjdCBjb3VudCBmcm9tIGV4cAorCWJndHMJYXBfbl9mbQkJfGlmIHN0aWxsIHBvcywgZ28gZml4IG1hbnRpc3NhCisJbmVnbAklZDEJCXx0YWtlIGFicyBvZiBleHAgYW5kIGNsciBTRQorCW1vdmVsCSglYTApLCVkNAkJfGxvYWQgbHdvcmQgMSB0byBkNAorCWFuZGwJIzB4YmZmZmZmZmYsJWQ0CXwgYW5kIGNsciBTRSBpbiBkNAorCWFuZGwJIzB4YmZmZmZmZmYsKCVhMCkJfCBhbmQgaW4gbWVtb3J5Cit8Cit8IENhbGN1bGF0ZSB0aGUgbWFudGlzc2EgbXVsdGlwbGllciB0byBjb21wZW5zYXRlIGZvciB0aGUgYXBwZW5kaW5nIG9mCit8IHplcm9zIHRvIHRoZSBtYW50aXNzYS4KK3wKK2FwX25fZm06CisJbW92ZWwJI1BURU5STiwlYTEJfGdldCBhZGRyZXNzIG9mIHBvd2VyLW9mLXRlbiB0YWJsZQorCWNscmwJJWQzCQl8aW5pdCB0YWJsZSBpbmRleAorCWZtb3ZlcwlGT05FLCVmcDEJfGluaXQgZnAxIHRvIDEKKwltb3ZlcWwJIzMsJWQyCQl8aW5pdCBkMiB0byBjb3VudCBiaXRzIGluIGNvdW50ZXIKK2FwX25fZWw6CisJYXNybAkjMSwlZDAJCXxzaGlmdCBsc2IgaW50byBjYXJyeQorCWJjY3MJYXBfbl9lbgkJfGlmIDEsIG11bCBmcDEgYnkgcHdydGVuIGZhY3RvcgorCWZtdWx4CSglYTEsJWQzKSwlZnAxCXxtdWwgYnkgMTAqKihkM19iaXRfbm8pCithcF9uX2VuOgorCWFkZGwJIzEyLCVkMwkJfGluYyBkMyB0byBuZXh0IHJ0YWJsZSBlbnRyeQorCXRzdGwJJWQwCQl8Y2hlY2sgaWYgZDAgaXMgemVybworCWJuZXMJYXBfbl9lbAkJfGlmIG5vdCwgZ2V0IG5leHQgYml0CisJZmRpdngJJWZwMSwlZnAwCQl8ZGl2IG1hbnRpc3NhIGJ5IDEwKioobm9fYml0c19zaGlmdGVkKQorfAorfAorfCBDYWxjdWxhdGUgcG93ZXItb2YtdGVuIGZhY3RvciBmcm9tIGFkanVzdGVkIGFuZCBzaGlmdGVkIGV4cG9uZW50LgorfAorfCBSZWdpc3RlciB1c2FnZToKK3wKK3wgIHB3cnRlbjoKK3wJKCopICBkMDogdGVtcAorfAkoICkgIGQxOiBleHBvbmVudAorfAkoKikgIGQyOiB7RlBDUls2OjVdLFNNLFNFfSBhcyBpbmRleCBpbiBSVEFCTEU7IHRlbXAKK3wJKCopICBkMzogRlBDUiB3b3JrIGNvcHkKK3wJKCApICBkNDogZmlyc3Qgd29yZCBvZiBiY2QKK3wJKCopICBhMTogUlRBQkxFIHBvaW50ZXIKK3wgIGNhbGNfcDoKK3wJKCopICBkMDogdGVtcAorfAkoICkgIGQxOiBleHBvbmVudAorfAkoKikgIGQzOiBQV1JUeHggdGFibGUgaW5kZXgKK3wJKCApICBhMDogcG9pbnRlciB0byB3b3JraW5nIGNvcHkgb2YgYmNkCit8CSgqKSAgYTE6IFBXUlR4eCBwb2ludGVyCit8CSgqKSBmcDE6IHBvd2VyLW9mLXRlbiBhY2N1bXVsYXRvcgorfAorfCBQd3J0ZW4gY2FsY3VsYXRlcyB0aGUgZXhwb25lbnQgZmFjdG9yIGluIHRoZSBzZWxlY3RlZCByb3VuZGluZyBtb2RlCit8IGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlOgorfAorfAlTaWduIG9mIE1hbnQgIFNpZ24gb2YgRXhwICBSb3VuZGluZyBNb2RlICBQV1JURU4gUm91bmRpbmcgTW9kZQorfAorfAlBTlkJICBBTlkJUk4JUk4KK3wKK3wJICsJICAgKwlSUAlSUAorfAkgLQkgICArCVJQCVJNCit8CSArCSAgIC0JUlAJUk0KK3wJIC0JICAgLQlSUAlSUAorfAorfAkgKwkgICArCVJNCVJNCit8CSAtCSAgICsJUk0JUlAKK3wJICsJICAgLQlSTQlSUAorfAkgLQkgICAtCVJNCVJNCit8Cit8CSArCSAgICsJUloJUk0KK3wJIC0JICAgKwlSWglSTQorfAkgKwkgICAtCVJaCVJQCit8CSAtCSAgIC0JUloJUlAKK3wKK3wKK3B3cnRlbjoKKwltb3ZlbAlVU0VSX0ZQQ1IoJWE2KSwlZDMgfGdldCB1c2VyJ3MgRlBDUgorCWJmZXh0dQklZDN7IzI2OiMyfSwlZDIJfGlzb2xhdGUgcm91bmRpbmcgbW9kZSBiaXRzCisJbW92ZWwJKCVhMCksJWQ0CQl8cmVsb2FkIDFzdCBiY2Qgd29yZCB0byBkNAorCWFzbGwJIzIsJWQyCQl8Zm9ybWF0IGQyIHRvIGJlCisJYmZleHR1CSVkNHsjMDojMn0sJWQwCXwge0ZQQ1JbNl0sRlBDUls1XSxTTSxTRX0KKwlhZGRsCSVkMCwlZDIJCXxpbiBkMiBhcyBpbmRleCBpbnRvIFJUQUJMRQorCWxlYWwJUlRBQkxFLCVhMQl8bG9hZCBydGFibGUgYmFzZQorCW1vdmViCSglYTEsJWQyKSwlZDAJfGxvYWQgbmV3IHJvdW5kaW5nIGJpdHMgZnJvbSB0YWJsZQorCWNscmwJJWQzCQkJfGNsZWFyIGQzIHRvIGZvcmNlIG5vIGV4YyBhbmQgZXh0ZW5kZWQKKwliZmlucwklZDAsJWQzeyMyNjojMn0JfHN0dWZmIG5ldyByb3VuZGluZyBiaXRzIGluIEZQQ1IKKwlmbW92ZWwJJWQzLCVGUENSCQl8d3JpdGUgbmV3IEZQQ1IKKwlhc3JsCSMxLCVkMAkJfHdyaXRlIGNvcnJlY3QgUFRFTnh4IHRhYmxlCisJYmNjcwlub3RfcnAJCXx0byBhMQorCWxlYWwJUFRFTlJQLCVhMQl8aXQgaXMgUlAKKwlicmFzCWNhbGNfcAkJfGdvIHRvIGluaXQgc2VjdGlvbgorbm90X3JwOgorCWFzcmwJIzEsJWQwCQl8a2VlcCBjaGVja2luZworCWJjY3MJbm90X3JtCisJbGVhbAlQVEVOUk0sJWExCXxpdCBpcyBSTQorCWJyYXMJY2FsY19wCQl8Z28gdG8gaW5pdCBzZWN0aW9uCitub3Rfcm06CisJbGVhbAlQVEVOUk4sJWExCXxpdCBpcyBSTgorY2FsY19wOgorCW1vdmVsCSVkMSwlZDAJCXxjb3B5IGV4cCB0byBkMDt1c2UgZDAKKwlicGxzCW5vX25lZwkJfGlmIGV4cCBpcyBuZWdhdGl2ZSwKKwluZWdsCSVkMAkJfGludmVydCBpdAorCW9ybAkjMHg0MDAwMDAwMCwoJWEwKQl8YW5kIHNldCBTRSBiaXQKK25vX25lZzoKKwljbHJsCSVkMwkJfHRhYmxlIGluZGV4CisJZm1vdmVzCUZPTkUsJWZwMQl8aW5pdCBmcDEgdG8gMQorZV9sb29wOgorCWFzcmwJIzEsJWQwCQl8c2hpZnQgbmV4dCBiaXQgaW50byBjYXJyeQorCWJjY3MJZV9uZXh0CQl8aWYgemVybywgc2tpcCB0aGUgbXVsCisJZm11bHgJKCVhMSwlZDMpLCVmcDEJfG11bCBieSAxMCoqKGQzX2JpdF9ubykKK2VfbmV4dDoKKwlhZGRsCSMxMiwlZDMJCXxpbmMgZDMgdG8gbmV4dCBydGFibGUgZW50cnkKKwl0c3RsCSVkMAkJfGNoZWNrIGlmIGQwIGlzIHplcm8KKwlibmVzCWVfbG9vcAkJfG5vdCB6ZXJvLCBjb250aW51ZSBzaGlmdGluZworfAorfAorfCAgQ2hlY2sgdGhlIHNpZ24gb2YgdGhlIGFkanVzdGVkIGV4cCBhbmQgbWFrZSB0aGUgdmFsdWUgaW4gZnAwIHRoZQorfCAgc2FtZSBzaWduLiBJZiB0aGUgZXhwIHdhcyBwb3MgdGhlbiBtdWx0aXBseSBmcDEqZnAwOworfCAgZWxzZSBkaXZpZGUgZnAwL2ZwMS4KK3wKK3wgUmVnaXN0ZXIgVXNhZ2U6Cit8ICBub3JtOgorfAkoICkgIGEwOiBwb2ludGVyIHRvIHdvcmtpbmcgYmNkIHZhbHVlCit8CSgqKSBmcDA6IG1hbnRpc3NhIGFjY3VtdWxhdG9yCit8CSggKSBmcDE6IHNjYWxpbmcgZmFjdG9yIC0gMTAqKihhYnMoZXhwKSkKK3wKK25vcm06CisJYnRzdAkjMzAsKCVhMCkJfHRlc3QgdGhlIHNpZ24gb2YgdGhlIGV4cG9uZW50CisJYmVxcwltdWwJCXxpZiBjbGVhciwgZ28gdG8gbXVsdGlwbHkKK2RpdjoKKwlmZGl2eAklZnAxLCVmcDAJCXxleHAgaXMgbmVnYXRpdmUsIHNvIGRpdmlkZSBtYW50IGJ5IGV4cAorCWJyYXMJZW5kX2RlYworbXVsOgorCWZtdWx4CSVmcDEsJWZwMAkJfGV4cCBpcyBwb3NpdGl2ZSwgc28gbXVsdGlwbHkgYnkgZXhwCit8Cit8Cit8IENsZWFuIHVwIGFuZCByZXR1cm4gd2l0aCByZXN1bHQgaW4gZnAwLgorfAorfCBJZiB0aGUgZmluYWwgbXVsL2RpdiBpbiBkZWNiaW4gaW5jdXJyZWQgYW4gaW5leCBleGNlcHRpb24sCit8IGl0IHdpbGwgYmUgaW5leDIsIGJ1dCB3aWxsIGJlIHJlcG9ydGVkIGFzIGluZXgxIGJ5IGdldF9vcC4KK3wKK2VuZF9kZWM6CisJZm1vdmVsCSVGUFNSLCVkMAkJfGdldCBzdGF0dXMgcmVnaXN0ZXIKKwliY2xybAkjaW5leDJfYml0KzgsJWQwCXx0ZXN0IGZvciBpbmV4MiBhbmQgY2xlYXIgaXQKKwlmbW92ZWwJJWQwLCVGUFNSCQl8cmV0dXJuIHN0YXR1cyByZWcgdy9vIGluZXgyCisJYmVxcwlub19leGMJCXxza2lwIHRoaXMgaWYgbm8gZXhjCisJb3JsCSNpbngxYV9tYXNrLFVTRVJfRlBTUiglYTYpIHxzZXQgaW5leDEvYWluZXgKK25vX2V4YzoKKwltb3ZlbWwJKCVhNykrLCVkMi0lZDUKKwlydHMKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9kb19mdW5jLlMgYi9hcmNoL202OGsvZnBzcDA0MC9kb19mdW5jLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFmNmE5OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL2RvX2Z1bmMuUwpAQCAtMCwwICsxLDU1OSBAQAorfAorfAlkb19mdW5jLnNhIDMuNCAyLzE4LzkxCit8Cit8IERvX2Z1bmMgcGVyZm9ybXMgdGhlIHVuaW1wbGVtZW50ZWQgb3BlcmF0aW9uLiAgVGhlIG9wZXJhdGlvbgorfCB0byBiZSBwZXJmb3JtZWQgaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSBsb3dlciA3IGJpdHMgb2YgdGhlCit8IGV4dGVuc2lvbiB3b3JkIChleGNlcHQgaW4gdGhlIGNhc2Ugb2YgZm1vdmVjciBhbmQgZnNpbmNvcykuCit8IFRoZSBvcGNvZGUgYW5kIHRhZyBiaXRzIGZvcm0gYW4gaW5kZXggaW50byBhIGp1bXAgdGFibGUgaW4KK3wgdGJsZG8uc2EuICBDYXNlcyBvZiB6ZXJvLCBpbmZpbml0eSBhbmQgTmFOIGFyZSBoYW5kbGVkIGluCit8IGRvX2Z1bmMgYnkgZm9yY2luZyB0aGUgZGVmYXVsdCByZXN1bHQuICBOb3JtYWxpemVkIGFuZAorfCBkZW5vcm1hbGl6ZWQgKHRoZXJlIGFyZSBubyB1bm5vcm1hbGl6ZWQgbnVtYmVycyBhdCB0aGlzCit8IHBvaW50KSBhcmUgcGFzc2VkIG9udG8gdGhlIGVtdWxhdGlvbiBjb2RlLgorfAorfCBDTURSRUcxQiBhbmQgU1RBRyBhcmUgZXh0cmFjdGVkIGZyb20gdGhlIGZzYXZlIGZyYW1lCit8IGFuZCBjb21iaW5lZCB0byBmb3JtIHRoZSB0YWJsZSBpbmRleC4gIFRoZSBmdW5jdGlvbiBjYWxsZWQKK3wgd2lsbCBzdGFydCB3aXRoIGEwIHBvaW50aW5nIHRvIHRoZSBFVEVNUCBvcGVyYW5kLiAgRHlhZGljCit8IGZ1bmN0aW9ucyBjYW4gZmluZCBGUFRFTVAgYXQgLTEyKGEwKS4KK3wKK3wgQ2FsbGVkIGZ1bmN0aW9ucyByZXR1cm4gdGhlaXIgcmVzdWx0IGluIGZwMC4gIFNpbmNvcyByZXR1cm5zCit8IHNpbih4KSBpbiBmcDAgYW5kIGNvcyh4KSBpbiBmcDEuCit8CisKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK0RPX0ZVTkM6CXxpZG50ICAgIDIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKwl8c2VjdGlvbgk4CisKKyNpbmNsdWRlICJmcHNwLmgiCisKKwl8eHJlZgl0X2R6MgorCXx4cmVmCXRfb3BlcnIKKwl8eHJlZgl0X2lueDIKKwl8eHJlZgl0X3Jlc2Rucm0KKwl8eHJlZglkc3RfbmFuCisJfHhyZWYJc3JjX25hbgorCXx4cmVmCW5ybV9zZXQKKwl8eHJlZglzdG9fY29zCisKKwl8eHJlZgl0YmxwcmUKKwl8eHJlZglzbG9nbnAxLHNsb2duLHNsb2cxMCxzbG9nMgorCXx4cmVmCXNsb2duZCxzbG9nMTBkLHNsb2cyZAorCXx4cmVmCXNtb2Qsc3JlbQorCXx4cmVmCXNzY2FsZQorCXx4cmVmCXNtb3ZjcgorCitQT05FOgkubG9uZwkweDNmZmYwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMAl8KzEKK01PTkU6CS5sb25nCTB4YmZmZjAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwCXwtMQorUFpFUk86CS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCXwrMAorTVpFUk86CS5sb25nCTB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCXwtMAorUElORjoJLmxvbmcJMHg3ZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAJfCtpbmYKK01JTkY6CS5sb25nCTB4ZmZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCXwtaW5mCitRTkFOOgkubG9uZwkweDdmZmYwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZmZmZgl8bm9uLXNpZ25hbGluZyBuYW4KK1BQSUJZMjogIC5sb25nCTB4M0ZGRjAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1CXwrUEkvMgorTVBJQlkyOiAgLmxvbmcJMHhiRkZGMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUJfC1QSS8yCisKKwkuZ2xvYmFsCWRvX2Z1bmMKK2RvX2Z1bmM6CisJY2xyYglDVV9PTkxZKCVhNikKK3wKK3wgQ2hlY2sgZm9yIGZtb3ZlY3IuICBJdCBkb2VzIG5vdCBmb2xsb3cgdGhlIGZvcm1hdCBvZiBmcCBnZW4KK3wgdW5pbXBsZW1lbnRlZCBpbnN0cnVjdGlvbnMuICBUaGUgdGVzdCBpcyBvbiB0aGUgdXBwZXIgNiBiaXRzOworfCBpZiB0aGV5IGFyZSAkMTcsIHRoZSBpbnN0IGlzIGZtb3ZlY3IuICBDYWxsIGVudHJ5IHNtb3ZjcgorfCBkaXJlY3RseS4KK3wKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjMDojNn0sJWQwIHxnZXQgb3BjbGFzcyBhbmQgc3JjIGZpZWxkcworCWNtcGlsCSMweDE3LCVkMAkJfGlmIG9wIGNsYXNzIGFuZCBzaXplIGZpZWxkcyBhcmUgJDE3LAorfAkJCQk7aXQgaXMgRk1PVkVDUjsgaWYgbm90LCBjb250aW51ZQorCWJuZXMJbm90X2Ztb3ZlY3IKKwlqbXAJc21vdmNyCQl8Zm1vdmVjcjsgam1wIGRpcmVjdGx5IHRvIGVtdWxhdGlvbgorCitub3RfZm1vdmVjcjoKKwltb3ZldwlDTURSRUcxQiglYTYpLCVkMAorCWFuZGwJIzB4N0YsJWQwCisJY21waWwJIzB4MzgsJWQwCQl8aWYgdGhlIGV4dGVuc2lvbiBpcyA+PSAkMzgsCisJYmdlCXNlcnJvcgkJfGl0IGlzIGlsbGVnYWwKKwliZmV4dHUJU1RBRyglYTYpeyMwOiMzfSwlZDEKKwlsc2xsCSMzLCVkMAkJfG1ha2Ugcm9vbSBmb3IgU1RBRworCWFkZGwJJWQxLCVkMAkJfGNvbWJpbmUgZm9yIGZpbmFsIGluZGV4IGludG8gdGFibGUKKwlsZWFsCXRibHByZSwlYTEJfHN0YXJ0IG9mIG1vbnN0ZXIganVtcCB0YWJsZQorCW1vdmVsCSglYTEsJWQwLncqNCksJWExCXxyZWFsIHRhcmdldCBhZGRyZXNzCisJbGVhbAlFVEVNUCglYTYpLCVhMAl8YTAgaXMgcG9pbnRlciB0byBzcmMgb3AKKwltb3ZlbAlVU0VSX0ZQQ1IoJWE2KSwlZDEKKwlhbmRsCSMweEZGLCVkMQkJfCBkaXNjYXJkIGFsbCBidXQgcm91bmRpbmcgbW9kZS9wcmVjCisJZm1vdmVsCSMwLCVmcGNyCisJam1wCSglYTEpCit8Cit8CUVSUk9SCit8CisJLmdsb2JhbAlzZXJyb3IKK3NlcnJvcjoKKwlzdAlTVE9SRV9GTEcoJWE2KQorCXJ0cworfAorfCBUaGVzZSByb3V0aW5lcyBsb2FkIGZvcmNlZCB2YWx1ZXMgaW50byBmcDAuICBUaGV5IGFyZSBjYWxsZWQKK3wgYnkgaW5kZXggaW50byB0Ymxkby4KK3wKK3wgTG9hZCBhIHNpZ25lZCB6ZXJvIHRvIGZwMCBhbmQgc2V0IGluZXgyL2FpbmV4Cit8CisJLmdsb2JhbAlzbnpyaW54CitzbnpyaW54OgorCWJ0c3RiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCXxnZXQgc2lnbiBvZiBzb3VyY2Ugb3BlcmFuZAorCWJuZXMJbGRfbXppbngJfGlmIG5lZ2F0aXZlLCBicmFuY2gKKwlic3IJbGRfcHplcm8JfGJzciBzbyB3ZSBjYW4gcmV0dXJuIGFuZCBzZXQgaW54CisJYnJhCXRfaW54MgkJfG5vdywgc2V0IHRoZSBpbnggZm9yIHRoZSBuZXh0IGluc3QKK2xkX216aW54OgorCWJzcglsZF9temVybwl8aWYgbmVnLCBsb2FkIG5lZyB6ZXJvLCByZXR1cm4gaGVyZQorCWJyYQl0X2lueDIJCXxub3csIHNldCB0aGUgaW54IGZvciB0aGUgbmV4dCBpbnN0Cit8Cit8IExvYWQgYSBzaWduZWQgemVybyB0byBmcDA7IGRvIG5vdCBzZXQgaW5leDIvYWluZXgKK3wKKwkuZ2xvYmFsCXN6ZXJvCitzemVybzoKKwlidHN0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKSB8Z2V0IHNpZ24gb2Ygc291cmNlIG9wZXJhbmQKKwlibmUJbGRfbXplcm8JfGlmIG5lZywgbG9hZCBuZWcgemVybworCWJyYQlsZF9wemVybwl8bG9hZCBwb3NpdGl2ZSB6ZXJvCit8Cit8IExvYWQgYSBzaWduZWQgaW5maW5pdHkgdG8gZnAwOyBkbyBub3Qgc2V0IGluZXgyL2FpbmV4Cit8CisJLmdsb2JhbAlzaW5mCitzaW5mOgorCWJ0c3RiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCXxnZXQgc2lnbiBvZiBzb3VyY2Ugb3BlcmFuZAorCWJuZQlsZF9taW5mCQkJfGlmIG5lZ2F0aXZlIGJyYW5jaAorCWJyYQlsZF9waW5mCit8Cit8IExvYWQgYSBzaWduZWQgb25lIHRvIGZwMDsgZG8gbm90IHNldCBpbmV4Mi9haW5leAorfAorCS5nbG9iYWwJc29uZQorc29uZToKKwlidHN0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQl8Y2hlY2sgc2lnbiBvZiBzb3VyY2UKKwlibmUJbGRfbW9uZQorCWJyYQlsZF9wb25lCit8Cit8IExvYWQgYSBzaWduZWQgcGkvMiB0byBmcDA7IGRvIG5vdCBzZXQgaW5leDIvYWluZXgKK3wKKwkuZ2xvYmFsCXNwaV8yCitzcGlfMjoKKwlidHN0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQl8Y2hlY2sgc2lnbiBvZiBzb3VyY2UKKwlibmUJbGRfbXBpMgorCWJyYQlsZF9wcGkyCit8Cit8IExvYWQgZWl0aGVyIGEgKzAgb3IgK2luZiBmb3IgcGx1cy9taW51cyBvcGVyYW5kCit8CisJLmdsb2JhbAlzenJfaW5mCitzenJfaW5mOgorCWJ0c3RiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCXxjaGVjayBzaWduIG9mIHNvdXJjZQorCWJuZQlsZF9wemVybworCWJyYQlsZF9waW5mCit8Cit8IFJlc3VsdCBpcyBlaXRoZXIgYW4gb3BlcnIgb3IgK2luZiBmb3IgcGx1cy9taW51cyBvcGVyYW5kCit8IFtVc2VkIGJ5IHNsb2duLCBzbG9nbnAxLCBzbG9nMTAsIGFuZCBzbG9nMl0KK3wKKwkuZ2xvYmFsCXNvcHJfaW5mCitzb3ByX2luZjoKKwlidHN0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQl8Y2hlY2sgc2lnbiBvZiBzb3VyY2UKKwlibmUJdF9vcGVycgorCWJyYQlsZF9waW5mCit8Cit8CUZMT0dOUDEKK3wKKwkuZ2xvYmFsCXNzbG9nbnAxCitzc2xvZ25wMToKKwlmbW92ZW14ICglYTApLCVmcDAtJWZwMAorCWZjbXBiCSMtMSwlZnAwCisJZmJndAlzbG9nbnAxCisJZmJlcQl0X2R6MgkJfGlmID0gLTEsIGRpdmlkZSBieSB6ZXJvIGV4Y2VwdGlvbgorCWZtb3ZlbAkjMCwlRlBTUgkJfGNsciBOIGZsYWcKKwlicmEJdF9vcGVycgkJfHRha2UgY2FyZSBvZiBvcGVyYW5kcyA8IC0xCit8Cit8CUZFVE9YTTEKK3wKKwkuZ2xvYmFsCXNldG94bTFpCitzZXRveG0xaToKKwlidHN0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQl8Y2hlY2sgc2lnbiBvZiBzb3VyY2UKKwlibmUJbGRfbW9uZQorCWJyYQlsZF9waW5mCit8Cit8CUZMT0dOCit8Cit8IFRlc3QgZm9yIDEuMCBhcyBhbiBpbnB1dCBhcmd1bWVudCwgcmV0dXJuaW5nICt6ZXJvLiAgQWxzbyBjaGVjaworfCB0aGUgc2lnbiBhbmQgcmV0dXJuIG9wZXJyIGlmIG5lZ2F0aXZlLgorfAorCS5nbG9iYWwJc3Nsb2duCitzc2xvZ246CisJYnRzdGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKKwlibmUJdF9vcGVycgkJfHRha2UgY2FyZSBvZiBvcGVyYW5kcyA8IDAKKwljbXBpdwkjMHgzZmZmLExPQ0FMX0VYKCVhMCkgfHRlc3QgZm9yIDEuMCBpbnB1dAorCWJuZQlzbG9nbgorCWNtcGlsCSMweDgwMDAwMDAwLExPQ0FMX0hJKCVhMCkKKwlibmUJc2xvZ24KKwl0c3RsCUxPQ0FMX0xPKCVhMCkKKwlibmUJc2xvZ24KKwlmbW92ZXgJUFpFUk8sJWZwMAorCXJ0cworCisJLmdsb2JhbAlzc2xvZ25kCitzc2xvZ25kOgorCWJ0c3RiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCisJYmVxCXNsb2duZAorCWJyYQl0X29wZXJyCQl8dGFrZSBjYXJlIG9mIG9wZXJhbmRzIDwgMAorCit8Cit8CUZMT0cxMAorfAorCS5nbG9iYWwJc3Nsb2cxMAorc3Nsb2cxMDoKKwlidHN0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCWJuZQl0X29wZXJyCQl8dGFrZSBjYXJlIG9mIG9wZXJhbmRzIDwgMAorCWNtcGl3CSMweDNmZmYsTE9DQUxfRVgoJWEwKSB8dGVzdCBmb3IgMS4wIGlucHV0CisJYm5lCXNsb2cxMAorCWNtcGlsCSMweDgwMDAwMDAwLExPQ0FMX0hJKCVhMCkKKwlibmUJc2xvZzEwCisJdHN0bAlMT0NBTF9MTyglYTApCisJYm5lCXNsb2cxMAorCWZtb3ZleAlQWkVSTywlZnAwCisJcnRzCisKKwkuZ2xvYmFsCXNzbG9nMTBkCitzc2xvZzEwZDoKKwlidHN0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCWJlcQlzbG9nMTBkCisJYnJhCXRfb3BlcnIJCXx0YWtlIGNhcmUgb2Ygb3BlcmFuZHMgPCAwCisKK3wKK3wJRkxPRzIKK3wKKwkuZ2xvYmFsCXNzbG9nMgorc3Nsb2cyOgorCWJ0c3RiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCisJYm5lCXRfb3BlcnIJCXx0YWtlIGNhcmUgb2Ygb3BlcmFuZHMgPCAwCisJY21waXcJIzB4M2ZmZixMT0NBTF9FWCglYTApIHx0ZXN0IGZvciAxLjAgaW5wdXQKKwlibmUJc2xvZzIKKwljbXBpbAkjMHg4MDAwMDAwMCxMT0NBTF9ISSglYTApCisJYm5lCXNsb2cyCisJdHN0bAlMT0NBTF9MTyglYTApCisJYm5lCXNsb2cyCisJZm1vdmV4CVBaRVJPLCVmcDAKKwlydHMKKworCS5nbG9iYWwJc3Nsb2cyZAorc3Nsb2cyZDoKKwlidHN0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCWJlcQlzbG9nMmQKKwlicmEJdF9vcGVycgkJfHRha2UgY2FyZSBvZiBvcGVyYW5kcyA8IDAKKworfAorfAlGTU9ECit8CitwbW9kdDoKK3wJCQkJOyQyMSBmbW9kCit8CQkJCTtkdGFnLHN0YWcKKwkubG9uZwlzbW9kCQl8ICAwMCwwMCAgbm9ybSxub3JtID0gbm9ybWFsCisJLmxvbmcJc21vZF9vcGVyCXwgIDAwLDAxICBub3JtLHplcm8gPSBuYW4gd2l0aCBvcGVycgorCS5sb25nCXNtb2RfZnBuCXwgIDAwLDEwICBub3JtLGluZiAgPSBmcG4KKwkubG9uZwlzbW9kX3NuYW4JfCAgMDAsMTEgIG5vcm0sbmFuICA9IG5hbgorCS5sb25nCXNtb2RfenJvCXwgIDAxLDAwICB6ZXJvLG5vcm0gPSArLXplcm8KKwkubG9uZwlzbW9kX29wZXIJfCAgMDEsMDEgIHplcm8semVybyA9IG5hbiB3aXRoIG9wZXJyCisJLmxvbmcJc21vZF96cm8JfCAgMDEsMTAgIHplcm8saW5mICA9ICstemVybworCS5sb25nCXNtb2Rfc25hbgl8ICAwMSwxMSAgemVybyxuYW4gID0gbmFuCisJLmxvbmcJc21vZF9vcGVyCXwgIDEwLDAwICBpbmYsbm9ybSAgPSBuYW4gd2l0aCBvcGVycgorCS5sb25nCXNtb2Rfb3Blcgl8ICAxMCwwMSAgaW5mLHplcm8gID0gbmFuIHdpdGggb3BlcnIKKwkubG9uZwlzbW9kX29wZXIJfCAgMTAsMTAgIGluZixpbmYgICA9IG5hbiB3aXRoIG9wZXJyCisJLmxvbmcJc21vZF9zbmFuCXwgIDEwLDExICBpbmYsbmFuICAgPSBuYW4KKwkubG9uZwlzbW9kX2RuYW4JfCAgMTEsMDAgIG5hbixub3JtICA9IG5hbgorCS5sb25nCXNtb2RfZG5hbgl8ICAxMSwwMSAgbmFuLHplcm8gID0gbmFuCisJLmxvbmcJc21vZF9kbmFuCXwgIDExLDEwICBuYW4saW5mICAgPSBuYW4KKwkubG9uZwlzbW9kX2RuYW4JfCAgMTEsMTEgIG5hbixuYW4gICA9IG5hbgorCisJLmdsb2JhbAlwbW9kCitwbW9kOgorCWNscmIJRlBTUl9RQllURSglYTYpIHwgY2xlYXIgcXVvdGllbnQgZmllbGQKKwliZmV4dHUJU1RBRyglYTYpeyMwOiMzfSwlZDAgfHN0YWcgPSBkMAorCWJmZXh0dQlEVEFHKCVhNil7IzA6IzN9LCVkMSB8ZHRhZyA9IGQxCisKK3wKK3wgQWxpYXMgZXh0ZW5kZWQgZGVub3JtcyB0byBub3JtcyBmb3IgdGhlIGp1bXAgdGFibGUuCit8CisJYmNscmwJIzIsJWQwCisJYmNscmwJIzIsJWQxCisKKwlsc2xiCSMyLCVkMQorCW9yYgklZDAsJWQxCQl8ZDF7MzoyfSA9IGR0YWcsIGQxezE6MH0gPSBzdGFnCit8CQkJCTtUYWcgdmFsdWVzOgorfAkJCQk7MDAgPSBub3JtIG9yIGRlbm9ybQorfAkJCQk7MDEgPSB6ZXJvCit8CQkJCTsxMCA9IGluZgorfAkJCQk7MTEgPSBuYW4KKwlsZWEJcG1vZHQsJWExCisJbW92ZWwJKCVhMSwlZDEudyo0KSwlYTEKKwlqbXAJKCVhMSkKKworc21vZF9zbmFuOgorCWJyYQlzcmNfbmFuCitzbW9kX2RuYW46CisJYnJhCWRzdF9uYW4KK3Ntb2Rfb3BlcjoKKwlicmEJdF9vcGVycgorc21vZF96cm86CisJbW92ZWIJRVRFTVAoJWE2KSwlZDEJfGdldCBzaWduIG9mIHNyYyBvcAorCW1vdmViCUZQVEVNUCglYTYpLCVkMAl8Z2V0IHNpZ24gb2YgZHN0IG9wCisJZW9yYgklZDAsJWQxCQl8Z2V0IGV4b3Igb2Ygc2lnbiBiaXRzCisJYnRzdGwJIzcsJWQxCQl8dGVzdCBmb3Igc2lnbgorCWJlcXMJc21vZF96c24JfGlmIGNsciwgZG8gbm90IHNldCBzaWduIGJpZworCWJzZXRiCSNxX3NuX2JpdCxGUFNSX1FCWVRFKCVhNikgfHNldCBxLWJ5dGUgc2lnbiBiaXQKK3Ntb2RfenNuOgorCWJ0c3RsCSM3LCVkMAkJfHRlc3QgaWYgKyBvciAtCisJYmVxCWxkX3B6ZXJvCXxpZiBwb3MgdGhlbiBsb2FkICswCisJYnJhCWxkX216ZXJvCXxlbHNlIG5lZyBsb2FkIC0wCisKK3Ntb2RfZnBuOgorCW1vdmViCUVURU1QKCVhNiksJWQxCXxnZXQgc2lnbiBvZiBzcmMgb3AKKwltb3ZlYglGUFRFTVAoJWE2KSwlZDAJfGdldCBzaWduIG9mIGRzdCBvcAorCWVvcmIJJWQwLCVkMQkJfGdldCBleG9yIG9mIHNpZ24gYml0cworCWJ0c3RsCSM3LCVkMQkJfHRlc3QgZm9yIHNpZ24KKwliZXFzCXNtb2RfZnNuCXxpZiBjbHIsIGRvIG5vdCBzZXQgc2lnbiBiaWcKKwlic2V0YgkjcV9zbl9iaXQsRlBTUl9RQllURSglYTYpIHxzZXQgcS1ieXRlIHNpZ24gYml0CitzbW9kX2ZzbjoKKwl0c3RiCURUQUcoJWE2KQl8ZmlsdGVyIG91dCBkZW5vcm1hbCBkZXN0aW5hdGlvbiBjYXNlCisJYnBscwlzbW9kX25ybQl8CisJbGVhbAlGUFRFTVAoJWE2KSwlYTAJfGEwPC0gYWRkcihGUFRFTVApCisJYnJhCXRfcmVzZG5ybQl8Zm9yY2UgVU5GTChidXQgZXhhY3QpIHJlc3VsdAorc21vZF9ucm06CisJZm1vdmVsIFVTRVJfRlBDUiglYTYpLCVmcGNyIHx1c2UgdXNlcidzIHJtb2RlIGFuZCBwcmVjaXNpb24KKwlmbW92ZXggRlBURU1QKCVhNiksJWZwMAl8cmV0dXJuIGRlc3QgdG8gZnAwCisJcnRzCisKK3wKK3wJRlJFTQorfAorcHJlbXQ6Cit8CQkJCTskMjUgZnJlbQorfAkJCQk7ZHRhZyxzdGFnCisJLmxvbmcJc3JlbQkJfCAgMDAsMDAgIG5vcm0sbm9ybSA9IG5vcm1hbAorCS5sb25nCXNyZW1fb3Blcgl8ICAwMCwwMSAgbm9ybSx6ZXJvID0gbmFuIHdpdGggb3BlcnIKKwkubG9uZwlzcmVtX2Zwbgl8ICAwMCwxMCAgbm9ybSxpbmYgID0gZnBuCisJLmxvbmcJc3JlbV9zbmFuCXwgIDAwLDExICBub3JtLG5hbiAgPSBuYW4KKwkubG9uZwlzcmVtX3pybwl8ICAwMSwwMCAgemVybyxub3JtID0gKy16ZXJvCisJLmxvbmcJc3JlbV9vcGVyCXwgIDAxLDAxICB6ZXJvLHplcm8gPSBuYW4gd2l0aCBvcGVycgorCS5sb25nCXNyZW1fenJvCXwgIDAxLDEwICB6ZXJvLGluZiAgPSArLXplcm8KKwkubG9uZwlzcmVtX3NuYW4JfCAgMDEsMTEgIHplcm8sbmFuICA9IG5hbgorCS5sb25nCXNyZW1fb3Blcgl8ICAxMCwwMCAgaW5mLG5vcm0gID0gbmFuIHdpdGggb3BlcnIKKwkubG9uZwlzcmVtX29wZXIJfCAgMTAsMDEgIGluZix6ZXJvICA9IG5hbiB3aXRoIG9wZXJyCisJLmxvbmcJc3JlbV9vcGVyCXwgIDEwLDEwICBpbmYsaW5mICAgPSBuYW4gd2l0aCBvcGVycgorCS5sb25nCXNyZW1fc25hbgl8ICAxMCwxMSAgaW5mLG5hbiAgID0gbmFuCisJLmxvbmcJc3JlbV9kbmFuCXwgIDExLDAwICBuYW4sbm9ybSAgPSBuYW4KKwkubG9uZwlzcmVtX2RuYW4JfCAgMTEsMDEgIG5hbix6ZXJvICA9IG5hbgorCS5sb25nCXNyZW1fZG5hbgl8ICAxMSwxMCAgbmFuLGluZiAgID0gbmFuCisJLmxvbmcJc3JlbV9kbmFuCXwgIDExLDExICBuYW4sbmFuICAgPSBuYW4KKworCS5nbG9iYWwJcHJlbQorcHJlbToKKwljbHJiCUZQU1JfUUJZVEUoJWE2KSAgIHxjbGVhciBxdW90aWVudCBmaWVsZAorCWJmZXh0dQlTVEFHKCVhNil7IzA6IzN9LCVkMCB8c3RhZyA9IGQwCisJYmZleHR1CURUQUcoJWE2KXsjMDojM30sJWQxIHxkdGFnID0gZDEKK3wKK3wgQWxpYXMgZXh0ZW5kZWQgZGVub3JtcyB0byBub3JtcyBmb3IgdGhlIGp1bXAgdGFibGUuCit8CisJYmNscgkjMiwlZDAKKwliY2xyCSMyLCVkMQorCisJbHNsYgkjMiwlZDEKKwlvcmIJJWQwLCVkMQkJfGQxezM6Mn0gPSBkdGFnLCBkMXsxOjB9ID0gc3RhZworfAkJCQk7VGFnIHZhbHVlczoKK3wJCQkJOzAwID0gbm9ybSBvciBkZW5vcm0KK3wJCQkJOzAxID0gemVybworfAkJCQk7MTAgPSBpbmYKK3wJCQkJOzExID0gbmFuCisJbGVhCXByZW10LCVhMQorCW1vdmVsCSglYTEsJWQxLncqNCksJWExCisJam1wCSglYTEpCisKK3NyZW1fc25hbjoKKwlicmEJc3JjX25hbgorc3JlbV9kbmFuOgorCWJyYQlkc3RfbmFuCitzcmVtX29wZXI6CisJYnJhCXRfb3BlcnIKK3NyZW1fenJvOgorCW1vdmViCUVURU1QKCVhNiksJWQxCXxnZXQgc2lnbiBvZiBzcmMgb3AKKwltb3ZlYglGUFRFTVAoJWE2KSwlZDAJfGdldCBzaWduIG9mIGRzdCBvcAorCWVvcmIJJWQwLCVkMQkJfGdldCBleG9yIG9mIHNpZ24gYml0cworCWJ0c3RsCSM3LCVkMQkJfHRlc3QgZm9yIHNpZ24KKwliZXFzCXNyZW1fenNuCXxpZiBjbHIsIGRvIG5vdCBzZXQgc2lnbiBiaWcKKwlic2V0YgkjcV9zbl9iaXQsRlBTUl9RQllURSglYTYpIHxzZXQgcS1ieXRlIHNpZ24gYml0CitzcmVtX3pzbjoKKwlidHN0bAkjNywlZDAJCXx0ZXN0IGlmICsgb3IgLQorCWJlcQlsZF9wemVybwl8aWYgcG9zIHRoZW4gbG9hZCArMAorCWJyYQlsZF9temVybwl8ZWxzZSBuZWcgbG9hZCAtMAorCitzcmVtX2ZwbjoKKwltb3ZlYglFVEVNUCglYTYpLCVkMQl8Z2V0IHNpZ24gb2Ygc3JjIG9wCisJbW92ZWIJRlBURU1QKCVhNiksJWQwCXxnZXQgc2lnbiBvZiBkc3Qgb3AKKwllb3JiCSVkMCwlZDEJCXxnZXQgZXhvciBvZiBzaWduIGJpdHMKKwlidHN0bAkjNywlZDEJCXx0ZXN0IGZvciBzaWduCisJYmVxcwlzcmVtX2Zzbgl8aWYgY2xyLCBkbyBub3Qgc2V0IHNpZ24gYmlnCisJYnNldGIJI3Ffc25fYml0LEZQU1JfUUJZVEUoJWE2KSB8c2V0IHEtYnl0ZSBzaWduIGJpdAorc3JlbV9mc246CisJdHN0YglEVEFHKCVhNikJfGZpbHRlciBvdXQgZGVub3JtYWwgZGVzdGluYXRpb24gY2FzZQorCWJwbHMJc3JlbV9ucm0JfAorCWxlYWwJRlBURU1QKCVhNiksJWEwCXxhMDwtIGFkZHIoRlBURU1QKQorCWJyYQl0X3Jlc2Rucm0JfGZvcmNlIFVORkwoYnV0IGV4YWN0KSByZXN1bHQKK3NyZW1fbnJtOgorCWZtb3ZlbCBVU0VSX0ZQQ1IoJWE2KSwlZnBjciB8dXNlIHVzZXIncyBybW9kZSBhbmQgcHJlY2lzaW9uCisJZm1vdmV4IEZQVEVNUCglYTYpLCVmcDAJfHJldHVybiBkZXN0IHRvIGZwMAorCXJ0cworfAorfAlGU0NBTEUKK3wKK3BzY2FsZXQ6Cit8CQkJCTskMjYgZnNjYWxlCit8CQkJCTtkdGFnLHN0YWcKKwkubG9uZwlzc2NhbGUJCXwgIDAwLDAwICBub3JtLG5vcm0gPSByZXN1bHQKKwkubG9uZwlzc2NhbGUJCXwgIDAwLDAxICBub3JtLHplcm8gPSBmcG4KKwkubG9uZwlzY2xfb3ByCQl8ICAwMCwxMCAgbm9ybSxpbmYgID0gbmFuIHdpdGggb3BlcnIKKwkubG9uZwlzY2xfc25hbgl8ICAwMCwxMSAgbm9ybSxuYW4gID0gbmFuCisJLmxvbmcJc2NsX3pybwkJfCAgMDEsMDAgIHplcm8sbm9ybSA9ICstemVybworCS5sb25nCXNjbF96cm8JCXwgIDAxLDAxICB6ZXJvLHplcm8gPSArLXplcm8KKwkubG9uZwlzY2xfb3ByCQl8ICAwMSwxMCAgemVybyxpbmYgID0gbmFuIHdpdGggb3BlcnIKKwkubG9uZwlzY2xfc25hbgl8ICAwMSwxMSAgemVybyxuYW4gID0gbmFuCisJLmxvbmcJc2NsX2luZgkJfCAgMTAsMDAgIGluZixub3JtICA9ICstaW5mCisJLmxvbmcJc2NsX2luZgkJfCAgMTAsMDEgIGluZix6ZXJvICA9ICstaW5mCisJLmxvbmcJc2NsX29wcgkJfCAgMTAsMTAgIGluZixpbmYgICA9IG5hbiB3aXRoIG9wZXJyCisJLmxvbmcJc2NsX3NuYW4JfCAgMTAsMTEgIGluZixuYW4gICA9IG5hbgorCS5sb25nCXNjbF9kbmFuCXwgIDExLDAwICBuYW4sbm9ybSAgPSBuYW4KKwkubG9uZwlzY2xfZG5hbgl8ICAxMSwwMSAgbmFuLHplcm8gID0gbmFuCisJLmxvbmcJc2NsX2RuYW4JfCAgMTEsMTAgIG5hbixpbmYgICA9IG5hbgorCS5sb25nCXNjbF9kbmFuCXwgIDExLDExICBuYW4sbmFuICAgPSBuYW4KKworCS5nbG9iYWwJcHNjYWxlCitwc2NhbGU6CisJYmZleHR1CVNUQUcoJWE2KXsjMDojM30sJWQwIHxzdGFnIGluIGQwCisJYmZleHR1CURUQUcoJWE2KXsjMDojM30sJWQxIHxkdGFnIGluIGQxCisJYmNscmwJIzIsJWQwCQl8YWxpYXMgIGRlbm9ybSBpbnRvIG5vcm0KKwliY2xybAkjMiwlZDEJCXxhbGlhcyAgZGVub3JtIGludG8gbm9ybQorCWxzbGIJIzIsJWQxCisJb3JiCSVkMCwlZDEJCXxkMXs0OjJ9ID0gZHRhZywgZDF7MTowfSA9IHN0YWcKK3wJCQkJO2R0YWcgdmFsdWVzICAgICBzdGFnIHZhbHVlczoKK3wJCQkJOzAwMCA9IG5vcm0gICAgICAwMCA9IG5vcm0KK3wJCQkJOzAwMSA9IHplcm8JIDAxID0gemVybworfAkJCQk7MDEwID0gaW5mCSAxMCA9IGluZgorfAkJCQk7MDExID0gbmFuCSAxMSA9IG5hbgorfAkJCQk7MTAwID0gZG5ybQorfAorfAorCWxlYWwJcHNjYWxldCwlYTEJfGxvYWQgc3RhcnQgb2YganVtcCB0YWJsZQorCW1vdmVsCSglYTEsJWQxLncqNCksJWExCXxsb2FkIGExIHdpdGggbGFiZWwgZGVwZW5kaW5nIG9uIHRhZworCWptcAkoJWExKQkJfGdvIHRvIHRoZSByb3V0aW5lCisKK3NjbF9vcHI6CisJYnJhCXRfb3BlcnIKKworc2NsX2RuYW46CisJYnJhCWRzdF9uYW4KKworc2NsX3pybzoKKwlidHN0Ygkjc2lnbl9iaXQsRlBURU1QX0VYKCVhNikJfHRlc3QgaWYgKyBvciAtCisJYmVxCWxkX3B6ZXJvCQl8aWYgcG9zIHRoZW4gbG9hZCArMAorCWJyYQlsZF9temVybwkJfGlmIG5lZyB0aGVuIGxvYWQgLTAKK3NjbF9pbmY6CisJYnRzdGIJI3NpZ25fYml0LEZQVEVNUF9FWCglYTYpCXx0ZXN0IGlmICsgb3IgLQorCWJlcQlsZF9waW5mCQkJfGlmIHBvcyB0aGVuIGxvYWQgK2luZgorCWJyYQlsZF9taW5mCQkJfGVsc2UgbmVnIGxvYWQgLWluZgorc2NsX3NuYW46CisJYnJhCXNyY19uYW4KK3wKK3wJRlNJTkNPUworfAorCS5nbG9iYWwJc3NpbmNvc3oKK3NzaW5jb3N6OgorCWJ0c3RiCSNzaWduX2JpdCxFVEVNUCglYTYpCXxnZXQgc2lnbgorCWJlcXMJc2luY29zcAorCWZtb3ZleAlNWkVSTywlZnAwCisJYnJhcwlzaW5jb3Njb20KK3NpbmNvc3A6CisJZm1vdmV4IFBaRVJPLCVmcDAKK3NpbmNvc2NvbToKKwlmbW92ZW14IFBPTkUsJWZwMS0lZnAxCXxkbyBub3QgYWxsb3cgRlBTUiB0byBiZSBhZmZlY3RlZAorCWJyYQlzdG9fY29zCQl8c3RvcmUgY29zaW5lIHJlc3VsdAorCisJLmdsb2JhbAlzc2luY29zaQorc3NpbmNvc2k6CisJZm1vdmV4IFFOQU4sJWZwMQl8bG9hZCBOQU4KKwlic3IJc3RvX2NvcwkJfHN0b3JlIGNvc2luZSByZXN1bHQKKwlmbW92ZXggUU5BTiwlZnAwCXxsb2FkIE5BTgorCWJyYQl0X29wZXJyCisKKwkuZ2xvYmFsCXNzaW5jb3NuYW4KK3NzaW5jb3NuYW46CisJbW92ZWwJRVRFTVBfRVgoJWE2KSxGUF9TQ1IxKCVhNikKKwltb3ZlbAlFVEVNUF9ISSglYTYpLEZQX1NDUjErNCglYTYpCisJbW92ZWwJRVRFTVBfTE8oJWE2KSxGUF9TQ1IxKzgoJWE2KQorCWJzZXRiCSNzaWduYW5fYml0LEZQX1NDUjErNCglYTYpCisJZm1vdmVteCBGUF9TQ1IxKCVhNiksJWZwMS0lZnAxCisJYnNyCXN0b19jb3MKKwlicmEJc3JjX25hbgorfAorfCBUaGlzIGNvZGUgZm9yY2VzIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgemVybywgaW5mLCBhbmQgbmFuIGNhc2VzCit8IGluIHRoZSB0cmFuc2NlbmRlbnRhbHMgY29kZS4gIFRoZSBDQyBiaXRzIG11c3QgYmUgc2V0IGluIHRoZQorfCBzdGFja2VkIEZQU1IgdG8gYmUgY29ycmVjdGx5IHJlcG9ydGVkLgorfAorfCoqUmV0dXJucyArUEkvMgorCS5nbG9iYWwJbGRfcHBpMgorbGRfcHBpMjoKKwlmbW92ZXggUFBJQlkyLCVmcDAJCXxsb2FkICtwaS8yCisJYnJhCXRfaW54MgkJCXxzZXQgaW5leDIgZXhjCisKK3wqKlJldHVybnMgLVBJLzIKKwkuZ2xvYmFsCWxkX21waTIKK2xkX21waTI6CisJZm1vdmV4IE1QSUJZMiwlZnAwCQl8bG9hZCAtcGkvMgorCW9ybAkjbmVnX21hc2ssVVNFUl9GUFNSKCVhNikJfHNldCBOIGJpdAorCWJyYQl0X2lueDIJCQl8c2V0IGluZXgyIGV4YworCit8KipSZXR1cm5zICtpbmYKKwkuZ2xvYmFsCWxkX3BpbmYKK2xkX3BpbmY6CisJZm1vdmV4IFBJTkYsJWZwMAkJfGxvYWQgK2luZgorCW9ybAkjaW5mX21hc2ssVVNFUl9GUFNSKCVhNikJfHNldCBJIGJpdAorCXJ0cworCit8KipSZXR1cm5zIC1pbmYKKwkuZ2xvYmFsCWxkX21pbmYKK2xkX21pbmY6CisJZm1vdmV4IE1JTkYsJWZwMAkJfGxvYWQgLWluZgorCW9ybAkjbmVnX21hc2sraW5mX21hc2ssVVNFUl9GUFNSKCVhNikJfHNldCBOIGFuZCBJIGJpdHMKKwlydHMKKworfCoqUmV0dXJucyArMQorCS5nbG9iYWwJbGRfcG9uZQorbGRfcG9uZToKKwlmbW92ZXggUE9ORSwlZnAwCQl8bG9hZCArMQorCXJ0cworCit8KipSZXR1cm5zIC0xCisJLmdsb2JhbAlsZF9tb25lCitsZF9tb25lOgorCWZtb3ZleCBNT05FLCVmcDAJCXxsb2FkIC0xCisJb3JsCSNuZWdfbWFzayxVU0VSX0ZQU1IoJWE2KQl8c2V0IE4gYml0CisJcnRzCisKK3wqKlJldHVybnMgKzAKKwkuZ2xvYmFsCWxkX3B6ZXJvCitsZF9wemVybzoKKwlmbW92ZXggUFpFUk8sJWZwMAkJfGxvYWQgKzAKKwlvcmwJI3pfbWFzayxVU0VSX0ZQU1IoJWE2KQl8c2V0IFogYml0CisJcnRzCisKK3wqKlJldHVybnMgLTAKKwkuZ2xvYmFsCWxkX216ZXJvCitsZF9temVybzoKKwlmbW92ZXggTVpFUk8sJWZwMAkJfGxvYWQgLTAKKwlvcmwJI25lZ19tYXNrK3pfbWFzayxVU0VSX0ZQU1IoJWE2KQl8c2V0IE4gYW5kIFogYml0cworCXJ0cworCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvZnBzcC5oIGIvYXJjaC9tNjhrL2Zwc3AwNDAvZnBzcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NGE0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC9mcHNwLmgKQEAgLTAsMCArMSwzNDggQEAKK3wKK3wJZnBzcC5oIDMuMyAzLjMKK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfAlmcHNwLmggLS0tIHN0YWNrIGZyYW1lIG9mZnNldHMgZHVyaW5nIEZQU1AgZXhjZXB0aW9uIGhhbmRsaW5nCit8Cit8CVRoZXNlIGVxdWF0ZXMgYXJlIHVzZWQgdG8gYWNjZXNzIHRoZSBleGNlcHRpb24gZnJhbWUsIHRoZSBmc2F2ZQorfAlmcmFtZSBhbmQgYW55IGxvY2FsIHZhcmlhYmxlcyBuZWVkZWQgYnkgdGhlIEZQU1AgcGFja2FnZS4KK3wKK3wJQWxsIEZQU1AgaGFuZGxlcnMgYmVnaW4gYnkgZXhlY3V0aW5nOgorfAorfAkJbGluawlhNiwjLUxPQ0FMX1NJWkUKK3wJCWZzYXZlCS0oYTcpCit8CQltb3ZlbS5sCWQwLWQxL2EwLWExLFVTRVJfREEoYTYpCit8CQlmbW92ZW0ueCBmcDAtZnAzLFVTRVJfRlAwKGE2KQorfAkJZm1vdmUubAlmcHNyL2ZwY3IvZnBpYXIsVVNFUl9GUFNSKGE2KQorfAorfAlBZnRlciBpbml0aWFsaXphdGlvbiwgdGhlIHN0YWNrIGxvb2tzIGxpa2UgdGhpczoKK3wKK3wJQTcgLS0tPgkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wJCXwJCQkJfAorfAkJfAlGUFUgZnNhdmUgYXJlYQkJfAorfAkJfAkJCQl8Cit8CQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wJCXwJCQkJfAorfAkJfAlGUFNQIExvY2FsIFZhcmlhYmxlcwl8Cit8CQl8CSAgICAgaW5jbHVkaW5nCQl8Cit8CQl8CSAgc2F2ZWQgcmVnaXN0ZXJzCXwKK3wJCXwJCQkJfAorfAkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8CUE2IC0tLT4JfAlTYXZlZCBBNgkJfAorfAkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8CQl8CQkJCXwKK3wJCXwJRXhjZXB0aW9uIEZyYW1lCQl8Cit8CQl8CQkJCXwKK3wJCXwJCQkJfAorfAorfAlQb3NpdGl2ZSBvZmZzZXRzIGZyb20gQTYgcmVmZXIgdG8gdGhlIGV4Y2VwdGlvbiBmcmFtZS4gIE5lZ2F0aXZlCit8CW9mZnNldHMgcmVmZXIgdG8gdGhlIExvY2FsIFZhcmlhYmxlIGFyZWEgYW5kIHRoZSBmc2F2ZSBhcmVhLgorfAlUaGUgZnNhdmUgZnJhbWUgaXMgYWxzbyBhY2Nlc3NpYmxlIGZyb20gdGhlIHRvcCB2aWEgQTcuCit8Cit8CU9uIGV4aXQsIHRoZSBoYW5kbGVycyBleGVjdXRlOgorfAorfAkJbW92ZW0ubAlVU0VSX0RBKGE2KSxkMC1kMS9hMC1hMQorfAkJZm1vdmVtLnggVVNFUl9GUDAoYTYpLGZwMC1mcDMKK3wJCWZtb3ZlLmwJVVNFUl9GUFNSKGE2KSxmcHNyL2ZwY3IvZnBpYXIKK3wJCWZyZXN0b3JlIChhNykrCit8CQl1bmxrCWE2Cit8Cit8CWFuZCB0aGVuIGVpdGhlciAiYnJhIGZwc3BfZG9uZSIgaWYgdGhlIGV4Y2VwdGlvbiB3YXMgY29tcGxldGVseQorfAloYW5kbGVkCWJ5IHRoZSBwYWNrYWdlLCBvciAiYnJhIHJlYWxfeHh4eCIgd2hpY2ggaXMgYW4gZXh0ZXJuYWwKK3wJbGFiZWwgdG8gYSByb3V0aW5lIHRoYXQgd2lsbCBwcm9jZXNzIGEgcmVhbCBleGNlcHRpb24gb2YgdGhlCit8CXR5cGUgdGhhdCB3YXMgZ2VuZXJhdGVkLiAgU29tZSBoYW5kbGVycyBtYXkgb21pdCB0aGUgImZyZXN0b3JlIgorfAlpZiB0aGUgRlBVIHN0YXRlIGFmdGVyIHRoZSBleGNlcHRpb24gaXMgaWRsZS4KK3wKK3wJU29tZXRpbWVzIHRoZSBleGNlcHRpb24gaGFuZGxlciB3aWxsIHRyYW5zZm9ybSB0aGUgZnNhdmUgYXJlYQorfAliZWNhdXNlIGl0IG5lZWRzIHRvIHJlcG9ydCBhbiBleGNlcHRpb24gYmFjayB0byB0aGUgdXNlci4gIFRoaXMKK3wJY2FuIGhhcHBlbiBpZiB0aGUgcGFja2FnZSBpcyBlbnRlcmVkIGZvciBhbiB1bmltcGxlbWVudGVkIGZsb2F0Cit8CWluc3RydWN0aW9uIHRoYXQgZ2VuZXJhdGVzIChzYXkpIGFuIHVuZGVyZmxvdy4gIEFsdGVybmF0aXZlbHksCit8CWEgc2Vjb25kIGZzYXZlIGZyYW1lIGNhbiBiZSBwdXNoZWQgb250byB0aGUgc3RhY2sgYW5kIHRoZQorfAloYW5kbGVyCWV4aXQgY29kZSB3aWxsIHJlbG9hZCB0aGUgbmV3IGZyYW1lIGFuZCBkaXNjYXJkIHRoZSBvbGQuCit8Cit8CVRoZSByZWdpc3RlcnMgZDAsIGQxLCBhMCwgYTEgYW5kIGZwMC1mcDMgYXJlIGFsd2F5cyBzYXZlZCBhbmQKK3wJcmVzdG9yZWQgZnJvbSB0aGUgImxvY2FsIHZhcmlhYmxlIiBhcmVhIGFuZCBjYW4gYmUgdXNlZCBhcworfAl0ZW1wb3Jhcmllcy4gIElmIGEgcm91dGluZSBuZWVkcyB0byBjaGFuZ2UgYW55Cit8CW9mIHRoZXNlIHJlZ2lzdGVycywgaXQgc2hvdWxkIG1vZGlmeSB0aGUgc2F2ZWQgY29weSBhbmQgbGV0Cit8CXRoZSBoYW5kbGVyIGV4aXQgY29kZSByZXN0b3JlIHRoZSB2YWx1ZS4KK3wKK3wtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8Cit8CUxvY2FsIFZhcmlhYmxlcyBvbiB0aGUgc3RhY2sKK3wKKwkuc2V0CUxPQ0FMX1NJWkUsMTkyCQl8IGJ5dGVzIG5lZWRlZCBmb3IgbG9jYWwgdmFyaWFibGVzCisJLnNldAlMViwtTE9DQUxfU0laRQl8IGNvbnZlbmllbnQgYmFzZSB2YWx1ZQorfAorCS5zZXQJVVNFUl9EQSxMViswCQl8IHNhdmUgc3BhY2UgZm9yIEQwLUQxLEEwLUExCisJLnNldAlVU0VSX0QwLExWKzAJCXwgc2F2ZWQgdXNlciBEMAorCS5zZXQJVVNFUl9EMSxMVis0CQl8IHNhdmVkIHVzZXIgRDEKKwkuc2V0CVVTRVJfQTAsTFYrOAkJfCBzYXZlZCB1c2VyIEEwCisJLnNldAlVU0VSX0ExLExWKzEyCQl8IHNhdmVkIHVzZXIgQTEKKwkuc2V0CVVTRVJfRlAwLExWKzE2CQl8IHNhdmVkIHVzZXIgRlAwCisJLnNldAlVU0VSX0ZQMSxMVisyOAkJfCBzYXZlZCB1c2VyIEZQMQorCS5zZXQJVVNFUl9GUDIsTFYrNDAJCXwgc2F2ZWQgdXNlciBGUDIKKwkuc2V0CVVTRVJfRlAzLExWKzUyCQl8IHNhdmVkIHVzZXIgRlAzCisJLnNldAlVU0VSX0ZQQ1IsTFYrNjQJCXwgc2F2ZWQgdXNlciBGUENSCisJLnNldAlGUENSX0VOQUJMRSxVU0VSX0ZQQ1IrMgl8CUZQQ1IgZXhjZXB0aW9uIGVuYWJsZQorCS5zZXQJRlBDUl9NT0RFLFVTRVJfRlBDUiszCXwJRlBDUiByb3VuZGluZyBtb2RlIGNvbnRyb2wKKwkuc2V0CVVTRVJfRlBTUixMVis2OAkJfCBzYXZlZCB1c2VyIEZQU1IKKwkuc2V0CUZQU1JfQ0MsVVNFUl9GUFNSKzAJfAlGUFNSIGNvbmRpdGlvbiBjb2RlCisJLnNldAlGUFNSX1FCWVRFLFVTRVJfRlBTUisxCXwJRlBTUiBxdW90aWVudAorCS5zZXQJRlBTUl9FWENFUFQsVVNFUl9GUFNSKzIJfAlGUFNSIGV4Y2VwdGlvbgorCS5zZXQJRlBTUl9BRVhDRVBULFVTRVJfRlBTUiszCXwJRlBTUiBhY2NydWVkIGV4Y2VwdGlvbgorCS5zZXQJVVNFUl9GUElBUixMVis3MgkJfCBzYXZlZCB1c2VyIEZQSUFSCisJLnNldAlGUF9TQ1IxLExWKzc2CQl8IHJvb20gZm9yIGEgdGVtcG9yYXJ5IGZsb2F0IHZhbHVlCisJLnNldAlGUF9TQ1IyLExWKzkyCQl8IHJvb20gZm9yIGEgdGVtcG9yYXJ5IGZsb2F0IHZhbHVlCisJLnNldAlMX1NDUjEsTFYrMTA4CQl8IHJvb20gZm9yIGEgdGVtcG9yYXJ5IGxvbmcgdmFsdWUKKwkuc2V0CUxfU0NSMixMVisxMTIJCXwgcm9vbSBmb3IgYSB0ZW1wb3JhcnkgbG9uZyB2YWx1ZQorCS5zZXQJU1RPUkVfRkxHLExWKzExNgorCS5zZXQJQklOREVDX0ZMRyxMVisxMTcJCXwgdXNlZCBpbiBiaW5kZWMKKwkuc2V0CUROUk1fRkxHLExWKzExOAkJfCB1c2VkIGluIHJlc19mdW5jCisJLnNldAlSRVNfRkxHLExWKzExOQkJfCB1c2VkIGluIHJlc19mdW5jCisJLnNldAlEWV9NT19GTEcsTFYrMTIwCQl8IGR5YWRpYy9tb25hZGljIGZsYWcKKwkuc2V0CVVGTEdfVE1QLExWKzEyMQkJfCB0ZW1wb3JhcnkgZm9yIHVmbGFnIGVycmF0YQorCS5zZXQJQ1VfT05MWSxMVisxMjIJCXwgY3Utb25seSBmbGFnCisJLnNldAlWRVJfVE1QLExWKzEyMwkJfCB0ZW1wIGhvbGRpbmcgZm9yIHZlcnNpb24gbnVtYmVyCisJLnNldAlMX1NDUjMsTFYrMTI0CQl8IHJvb20gZm9yIGEgdGVtcG9yYXJ5IGxvbmcgdmFsdWUKKwkuc2V0CUZQX1NDUjMsTFYrMTI4CQl8IHJvb20gZm9yIGEgdGVtcG9yYXJ5IGZsb2F0IHZhbHVlCisJLnNldAlGUF9TQ1I0LExWKzE0NAkJfCByb29tIGZvciBhIHRlbXBvcmFyeSBmbG9hdCB2YWx1ZQorCS5zZXQJRlBfU0NSNSxMVisxNjAJCXwgcm9vbSBmb3IgYSB0ZW1wb3JhcnkgZmxvYXQgdmFsdWUKKwkuc2V0CUZQX1NDUjYsTFYrMTc2Cit8Cit8TkVYVAkJZXF1CUxWKzE5MgkJO25lZWQgdG8gaW5jcmVhc2UgTE9DQUxfU0laRQorfAorfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8Cit8CWZzYXZlIG9mZnNldHMgYW5kIGJpdCBkZWZpbml0aW9ucworfAorfAlPZmZzZXRzIGFyZSBkZWZpbmVkIGZyb20gdGhlIGVuZCBvZiBhbiBmc2F2ZSBiZWNhdXNlIHRoZSBsYXN0IDEwCit8CXdvcmRzIG9mIGEgYnVzeSBmcmFtZSBhcmUgdGhlIHNhbWUgYXMgdGhlIHVuaW1wbGVtZW50ZWQgZnJhbWUuCit8CisJLnNldAlDVV9TQVZFUEMsTFYtOTIJCXwgbWljcm8tcGMgZm9yIENVICgxIGJ5dGUpCisJLnNldAlGUFJfRElSVFlfQklUUyxMVi05MQkJfCBmcHIgZGlydHkgYml0cworfAorCS5zZXQJV0JURU1QLExWLTc2CQl8IHdyaXRlIGJhY2sgdGVtcCAoMTIgYnl0ZXMpCisJLnNldAlXQlRFTVBfRVgsV0JURU1QCQl8IHdidGVtcCBzaWduIGFuZCBleHBvbmVudCAoMiBieXRlcykKKwkuc2V0CVdCVEVNUF9ISSxXQlRFTVArNAl8IHdidGVtcCBtYW50aXNzYSBbNjM6MzJdICg0IGJ5dGVzKQorCS5zZXQJV0JURU1QX0xPLFdCVEVNUCs4CXwgd2J0ZW1wIG1hbnRpc3NhIFszMTowMF0gKDQgYnl0ZXMpCit8CisJLnNldAlXQlRFTVBfU0dOLFdCVEVNUCsyCXwgdXNlZCB0byBzdG9yZSBzaWduCit8CisJLnNldAlGUFNSX1NIQURPVyxMVi02NAkJfCBmcHNyIHNoYWRvdyByZWcKK3wKKwkuc2V0CUZQSUFSQ1UsTFYtNjAJCXwgSW5zdHIuIGFkZHIuIHJlZy4gZm9yIENVICg0IGJ5dGVzKQorfAorCS5zZXQJQ01EUkVHMkIsTFYtNTIJCXwgY21kIHJlZyBmb3IgbWFjaGluZSAyCisJLnNldAlDTURSRUczQixMVi00OAkJfCBjbWQgcmVnIGZvciBFMyBleGNlcHRpb25zICgyIGJ5dGVzKQorfAorCS5zZXQJTk1ORVhDLExWLTQ0CQl8IE5NTkVYQyAodW5zdXAsc25hbiBiaXRzIG9ubHkpCisJLnNldAlubW5fdW5zdXBfYml0LDEJfAorCS5zZXQJbm1uX3NuYW5fYml0LDAJfAorfAorCS5zZXQJTk1DRVhDLExWLTQzCQl8IE5NTkVYQyAmIE5NQ0VYQworCS5zZXQJbm1uX29wZXJyX2JpdCw3CisJLnNldAlubW5fb3ZmbF9iaXQsNgorCS5zZXQJbm1uX3VuZmxfYml0LDUKKwkuc2V0CW5tY191bnN1cF9iaXQsNAorCS5zZXQJbm1jX3NuYW5fYml0LDMKKwkuc2V0CW5tY19vcGVycl9iaXQsMgorCS5zZXQJbm1jX292ZmxfYml0LDEKKwkuc2V0CW5tY191bmZsX2JpdCwwCit8CisJLnNldAlTVEFHLExWLTQwCQl8IHNvdXJjZSB0YWcgKDEgYnl0ZSkKKwkuc2V0CVdCVEVNUF9HUlMsTFYtNDAJCXwgYWxpYXMgd2J0ZW1wIGd1YXJkLCByb3VuZCwgc3RpY2t5CisJLnNldAlndWFyZF9iaXQsMQkJfCBndWFyZCBiaXQgaXMgYml0IG51bWJlciAxCisJLnNldAlyb3VuZF9iaXQsMAkJfCByb3VuZCBiaXQgaXMgYml0IG51bWJlciAwCisJLnNldAlzdGFnX21hc2ssMHhFMAkJfCB1cHBlciAzIGJpdHMgYXJlIHNvdXJjZSB0YWcgdHlwZQorCS5zZXQJZGVub3JtX2JpdCw3CQl8IGJpdCBkZXRlcm1pbmVzIGlmIGRlbm9ybSBvciB1bm5vcm0KKwkuc2V0CWV0ZW1wMTVfYml0LDQJCXwgZXRlbXAgZXhwb25lbnQgYml0ICMxNQorCS5zZXQJd2J0ZW1wNjZfYml0LDIJCXwgd2J0ZW1wIG1hbnRpc3NhIGJpdCAjNjYKKwkuc2V0CXdidGVtcDFfYml0LDEJCXwgd2J0ZW1wIG1hbnRpc3NhIGJpdCAjMQorCS5zZXQJd2J0ZW1wMF9iaXQsMAkJfCB3YnRlbXAgbWFudGlzc2EgYml0ICMwCit8CisJLnNldAlTVElDS1ksTFYtMzkJCXwgaG9sZHMgc3RpY2t5IGJpdAorCS5zZXQJc3RpY2t5X2JpdCw3Cit8CisJLnNldAlDTURSRUcxQixMVi0zNgkJfCBjbWQgcmVnIGZvciBFMSBleGNlcHRpb25zICgyIGJ5dGVzKQorCS5zZXQJa2ZhY3RfYml0LDEyCQl8IGRpc3Rpbmd1aXNoZXMgc3RhdGljL2R5bmFtaWMgay1mYWN0b3IKK3wJCQkJCTtvbiBwYWNrZWQgbW92ZSBvdXRzLiAgTk9URTogdGhpcworfAkJCQkJO2VxdWF0ZSBvbmx5IHdvcmtzIHdoZW4gQ01EUkVHMUIgaXMgaW4KK3wJCQkJCTthIHJlZ2lzdGVyLgorfAorCS5zZXQJQ01EV09SRCxMVi0zNQkJfCBjb21tYW5kIHdvcmQgaW4gY21kMWIKKwkuc2V0CWRpcmVjdGlvbl9iaXQsNQkJfCBiaXQgMCBpbiBvcGNsYXNzCisJLnNldAlzaXplX2JpdDIsMTIJCXwgYml0IDIgaW4gc2l6ZSBmaWVsZAorfAorCS5zZXQJRFRBRyxMVi0zMgkJfCBkZXN0IHRhZyAoMSBieXRlKQorCS5zZXQJZHRhZ19tYXNrLDB4RTAJCXwgdXBwZXIgMyBiaXRzIGFyZSBkZXN0IHR5cGUgdGFnCisJLnNldAlmcHRlbXAxNV9iaXQsNAkJfCBmcHRlbXAgZXhwb25lbnQgYml0ICMxNQorfAorCS5zZXQJV0JfQllURSxMVi0zMQkJfCBob2xkcyBXQlRFMTUgYml0ICgxIGJ5dGUpCisJLnNldAl3YnRlbXAxNV9iaXQsNAkJfCB3YnRlbXAgZXhwb25lbnQgYml0ICMxNQorfAorCS5zZXQJRV9CWVRFLExWLTI4CQl8IGhvbGRzIEUxIGFuZCBFMyBiaXRzICgxIGJ5dGUpCisJLnNldAlFMSwyCQl8IHdoaWNoIGJpdCBpcyBFMSBmbGFnCisJLnNldAlFMywxCQl8IHdoaWNoIGJpdCBpcyBFMyBmbGFnCisJLnNldAlTRkxBRywwCQl8IHdoaWNoIGJpdCBpcyBTIGZsYWcKK3wKKwkuc2V0CVRfQllURSxMVi0yNwkJfCBob2xkcyBUIGFuZCBVIGJpdHMgKDEgYnl0ZSkKKwkuc2V0CVhGTEFHLDcJCXwgd2hpY2ggYml0IGlzIFggZmxhZworCS5zZXQJVUZMQUcsNQkJfCB3aGljaCBiaXQgaXMgVSBmbGFnCisJLnNldAlURkxBRyw0CQl8IHdoaWNoIGJpdCBpcyBUIGZsYWcKK3wKKwkuc2V0CUZQVEVNUCxMVi0yNAkJfCBmcHRlbXAgKDEyIGJ5dGVzKQorCS5zZXQJRlBURU1QX0VYLEZQVEVNUAkJfCBmcHRlbXAgc2lnbiBhbmQgZXhwb25lbnQgKDIgYnl0ZXMpCisJLnNldAlGUFRFTVBfSEksRlBURU1QKzQJfCBmcHRlbXAgbWFudGlzc2EgWzYzOjMyXSAoNCBieXRlcykKKwkuc2V0CUZQVEVNUF9MTyxGUFRFTVArOAl8IGZwdGVtcCBtYW50aXNzYSBbMzE6MDBdICg0IGJ5dGVzKQorfAorCS5zZXQJRlBURU1QX1NHTixGUFRFTVArMgl8IHVzZWQgdG8gc3RvcmUgc2lnbgorfAorCS5zZXQJRVRFTVAsTFYtMTIJCXwgZXRlbXAgKDEyIGJ5dGVzKQorCS5zZXQJRVRFTVBfRVgsRVRFTVAJCXwgZXRlbXAgc2lnbiBhbmQgZXhwb25lbnQgKDIgYnl0ZXMpCisJLnNldAlFVEVNUF9ISSxFVEVNUCs0CQl8IGV0ZW1wIG1hbnRpc3NhIFs2MzozMl0gKDQgYnl0ZXMpCisJLnNldAlFVEVNUF9MTyxFVEVNUCs4CQl8IGV0ZW1wIG1hbnRpc3NhIFszMTowMF0gKDQgYnl0ZXMpCit8CisJLnNldAlFVEVNUF9TR04sRVRFTVArMgkJfCB1c2VkIHRvIHN0b3JlIHNpZ24KK3wKKwkuc2V0CUVYQ19TUiw0CQl8IGV4Y2VwdGlvbiBmcmFtZSBzdGF0dXMgcmVnaXN0ZXIKKwkuc2V0CUVYQ19QQyw2CQl8IGV4Y2VwdGlvbiBmcmFtZSBwcm9ncmFtIGNvdW50ZXIKKwkuc2V0CUVYQ19WRUMsMTAJCXwgZXhjZXB0aW9uIGZyYW1lIHZlY3RvciAoZm9ybWF0K3ZlY3RvciMpCisJLnNldAlFWENfRUEsMTIJCXwgZXhjZXB0aW9uIGZyYW1lIGVmZmVjdGl2ZSBhZGRyZXNzCit8Cit8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wKK3wJRlBTUi9GUENSIGJpdHMKK3wKKwkuc2V0CW5lZ19iaXQsMwl8ICBuZWdhdGl2ZSByZXN1bHQKKwkuc2V0CXpfYml0LDIJfCAgemVybyByZXN1bHQKKwkuc2V0CWluZl9iaXQsMQl8ICBpbmZpbml0eSByZXN1bHQKKwkuc2V0CW5hbl9iaXQsMAl8ICBub3QtYS1udW1iZXIgcmVzdWx0Cit8CisJLnNldAlxX3NuX2JpdCw3CXwgIHNpZ24gYml0IG9mIHF1b3RpZW50IGJ5dGUKK3wKKwkuc2V0CWJzdW5fYml0LDcJfCAgYnJhbmNoIG9uIHVub3JkZXJlZAorCS5zZXQJc25hbl9iaXQsNgl8ICBzaWduYWxsaW5nIG5hbgorCS5zZXQJb3BlcnJfYml0LDUJfCAgb3BlcmFuZCBlcnJvcgorCS5zZXQJb3ZmbF9iaXQsNAl8ICBvdmVyZmxvdworCS5zZXQJdW5mbF9iaXQsMwl8ICB1bmRlcmZsb3cKKwkuc2V0CWR6X2JpdCwyCXwgIGRpdmlkZSBieSB6ZXJvCisJLnNldAlpbmV4Ml9iaXQsMQl8ICBpbmV4YWN0IHJlc3VsdCAyCisJLnNldAlpbmV4MV9iaXQsMAl8ICBpbmV4YWN0IHJlc3VsdCAxCit8CisJLnNldAlhaW9wX2JpdCw3CXwgIGFjY3J1ZWQgaWxsZWdhbCBvcGVyYXRpb24KKwkuc2V0CWFvdmZsX2JpdCw2CXwgIGFjY3J1ZWQgb3ZlcmZsb3cKKwkuc2V0CWF1bmZsX2JpdCw1CXwgIGFjY3J1ZWQgdW5kZXJmbG93CisJLnNldAlhZHpfYml0LDQJfCAgYWNjcnVlZCBkaXZpZGUgYnkgemVybworCS5zZXQJYWluZXhfYml0LDMJfCAgYWNjcnVlZCBpbmV4YWN0Cit8Cit8CUZQU1IgaW5kaXZpZHVhbCBiaXQgbWFza3MKK3wKKwkuc2V0CW5lZ19tYXNrLDB4MDgwMDAwMDAKKwkuc2V0CXpfbWFzaywweDA0MDAwMDAwCisJLnNldAlpbmZfbWFzaywweDAyMDAwMDAwCisJLnNldAluYW5fbWFzaywweDAxMDAwMDAwCit8CisJLnNldAlic3VuX21hc2ssMHgwMDAwODAwMAl8CisJLnNldAlzbmFuX21hc2ssMHgwMDAwNDAwMAorCS5zZXQJb3BlcnJfbWFzaywweDAwMDAyMDAwCisJLnNldAlvdmZsX21hc2ssMHgwMDAwMTAwMAorCS5zZXQJdW5mbF9tYXNrLDB4MDAwMDA4MDAKKwkuc2V0CWR6X21hc2ssMHgwMDAwMDQwMAorCS5zZXQJaW5leDJfbWFzaywweDAwMDAwMjAwCisJLnNldAlpbmV4MV9tYXNrLDB4MDAwMDAxMDAKK3wKKwkuc2V0CWFpb3BfbWFzaywweDAwMDAwMDgwCXwgIGFjY3J1ZWQgaWxsZWdhbCBvcGVyYXRpb24KKwkuc2V0CWFvdmZsX21hc2ssMHgwMDAwMDA0MAl8ICBhY2NydWVkIG92ZXJmbG93CisJLnNldAlhdW5mbF9tYXNrLDB4MDAwMDAwMjAJfCAgYWNjcnVlZCB1bmRlcmZsb3cKKwkuc2V0CWFkel9tYXNrLDB4MDAwMDAwMTAJfCAgYWNjcnVlZCBkaXZpZGUgYnkgemVybworCS5zZXQJYWluZXhfbWFzaywweDAwMDAwMDA4CXwgIGFjY3J1ZWQgaW5leGFjdAorfAorfAlGUFNSIGNvbWJpbmF0aW9ucyB1c2VkIGluIHRoZSBGUFNQCit8CisJLnNldAlkemluZl9tYXNrLGluZl9tYXNrK2R6X21hc2srYWR6X21hc2sKKwkuc2V0CW9wbmFuX21hc2ssbmFuX21hc2srb3BlcnJfbWFzaythaW9wX21hc2sKKwkuc2V0CW56aV9tYXNrLDB4MDFmZmZmZmYJfCAgY2xlYXJzIE4sIFosIGFuZCBJCisJLnNldAl1bmZpbnhfbWFzayx1bmZsX21hc2sraW5leDJfbWFzaythdW5mbF9tYXNrK2FpbmV4X21hc2sKKwkuc2V0CXVuZjJpbnhfbWFzayx1bmZsX21hc2sraW5leDJfbWFzaythaW5leF9tYXNrCisJLnNldAlvdmZpbnhfbWFzayxvdmZsX21hc2sraW5leDJfbWFzaythb3ZmbF9tYXNrK2FpbmV4X21hc2sKKwkuc2V0CWlueDFhX21hc2ssaW5leDFfbWFzaythaW5leF9tYXNrCisJLnNldAlpbngyYV9tYXNrLGluZXgyX21hc2srYWluZXhfbWFzaworCS5zZXQJc25hbmlvcF9tYXNrLG5hbl9tYXNrK3NuYW5fbWFzaythaW9wX21hc2sKKwkuc2V0CW5hbmlvcF9tYXNrLG5hbl9tYXNrK2Fpb3BfbWFzaworCS5zZXQJbmVnaW5mX21hc2ssbmVnX21hc2sraW5mX21hc2sKKwkuc2V0CWluZmFpb3BfbWFzayxpbmZfbWFzaythaW9wX21hc2sKKwkuc2V0CW5lZ3pfbWFzayxuZWdfbWFzayt6X21hc2sKKwkuc2V0CW9wYW9wX21hc2ssb3BlcnJfbWFzaythaW9wX21hc2sKKwkuc2V0CXVuZmxfaW54X21hc2ssdW5mbF9tYXNrK2F1bmZsX21hc2srYWluZXhfbWFzaworCS5zZXQJb3ZmbF9pbnhfbWFzayxvdmZsX21hc2srYW92ZmxfbWFzaythaW5leF9tYXNrCit8Cit8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wKK3wJRlBDUiByb3VuZGluZyBtb2RlcworfAorCS5zZXQJeF9tb2RlLDB4MDAJfCAgcm91bmQgdG8gZXh0ZW5kZWQKKwkuc2V0CXNfbW9kZSwweDQwCXwgIHJvdW5kIHRvIHNpbmdsZQorCS5zZXQJZF9tb2RlLDB4ODAJfCAgcm91bmQgdG8gZG91YmxlCit8CisJLnNldAlybl9tb2RlLDB4MDAJfCAgcm91bmQgbmVhcmVzdAorCS5zZXQJcnpfbW9kZSwweDEwCXwgIHJvdW5kIHRvIHplcm8KKwkuc2V0CXJtX21vZGUsMHgyMAl8ICByb3VuZCB0byBtaW51cyBpbmZpbml0eQorCS5zZXQJcnBfbW9kZSwweDMwCXwgIHJvdW5kIHRvIHBsdXMgaW5maW5pdHkKK3wKK3wtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorfAorfAlNaXNjZWxsYW5lb3VzIGVxdWF0ZXMKK3wKKwkuc2V0CXNpZ25hbl9iaXQsNgl8ICBzaWduYWxsaW5nIG5hbiBiaXQgaW4gbWFudGlzc2EKKwkuc2V0CXNpZ25fYml0LDcKK3wKKwkuc2V0CXJuZF9zdGt5X2JpdCwyOQl8ICByb3VuZC9zdGlja3kgYml0IG9mIG1hbnRpc3NhCit8CQkJCXRoaXMgY2FuIG9ubHkgYmUgdXNlZCBpZiBpbiBhIGRhdGEgcmVnaXN0ZXIKKwkuc2V0CXN4X21hc2ssMHgwMTgwMDAwMCB8ICBzZXQgcyBhbmQgeCBiaXRzIGluIHdvcmQgJDQ4Cit8CisJLnNldAlMT0NBTF9FWCwwCisJLnNldAlMT0NBTF9TR04sMgorCS5zZXQJTE9DQUxfSEksNAorCS5zZXQJTE9DQUxfTE8sOAorCS5zZXQJTE9DQUxfR1JTLDEyCXwgIHZhbGlkIE9OTFkgZm9yIEZQX1NDUjEsIEZQX1NDUjIKK3wKK3wKKwkuc2V0CW5vcm1fdGFnLDB4MDAJfCAgdGFnIGJpdHMgaW4gezc6NX0gcG9zaXRpb24KKwkuc2V0CXplcm9fdGFnLDB4MjAKKwkuc2V0CWluZl90YWcsMHg0MAorCS5zZXQJbmFuX3RhZywweDYwCisJLnNldAlkbnJtX3RhZywweDgwCit8Cit8CWZzYXZlIHNpemVzIGFuZCBmb3JtYXRzCit8CisJLnNldAlWRVJfNCwweDQwCQl8ICBmcHNwIGNvbXBhdGlibGUgdmVyc2lvbiBudW1iZXJzCit8CQkJCQlhcmUgaW4gdGhlICQ0MHMgeyQ0MC0kNGZ9CisJLnNldAlWRVJfNDAsMHg0MAkJfCAgb3JpZ2luYWwgdmVyc2lvbiBudW1iZXIKKwkuc2V0CVZFUl80MSwweDQxCQl8ICByZXZpc2lvbiB2ZXJzaW9uIG51bWJlcgorfAorCS5zZXQJQlVTWV9TSVpFLDEwMAkJfCAgc2l6ZSBvZiBidXN5IGZyYW1lCisJLnNldAlCVVNZX0ZSQU1FLExWLUJVU1lfU0laRQl8ICBzdGFydCBvZiBidXN5IGZyYW1lCit8CisJLnNldAlVTklNUF80MF9TSVpFLDQ0CQl8ICBzaXplIG9mIG9yaWcgdW5pbXAgZnJhbWUKKwkuc2V0CVVOSU1QXzQxX1NJWkUsNTIJCXwgIHNpemUgb2YgcmV2IHVuaW1wIGZyYW1lCit8CisJLnNldAlJRExFX1NJWkUsNAkJfCAgc2l6ZSBvZiBpZGxlIGZyYW1lCisJLnNldAlJRExFX0ZSQU1FLExWLUlETEVfU0laRQl8ICBzdGFydCBvZiBpZGxlIGZyYW1lCit8Cit8CWV4Y2VwdGlvbiB2ZWN0b3JzCit8CisJLnNldAlUUkFDRV9WRUMsMHgyMDI0CQl8ICB0cmFjZSB0cmFwCisJLnNldAlGTElORV9WRUMsMHgwMDJDCQl8ICByZWFsIEYtbGluZQorCS5zZXQJVU5JTVBfVkVDLDB4MjAyQwkJfCAgdW5pbXBsZW1lbnRlZAorCS5zZXQJSU5FWF9WRUMsMHgwMEM0Cit8CisJLnNldAlkYmxfdGhyZXNoLDB4M0MwMQorCS5zZXQJc2dsX3RocmVzaCwweDNGODEKK3wKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL2dlbl9leGNlcHQuUyBiL2FyY2gvbTY4ay9mcHNwMDQwL2dlbl9leGNlcHQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDFkMDZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAvZ2VuX2V4Y2VwdC5TCkBAIC0wLDAgKzEsNDY4IEBACit8Cit8CWdlbl9leGNlcHQuc2EgMy43IDEvMTYvOTIKK3wKK3wJZ2VuX2V4Y2VwdCAtLS0gRlBTUCByb3V0aW5lIHRvIGRldGVjdCByZXBvcnRhYmxlIGV4Y2VwdGlvbnMKK3wKK3wJVGhpcyByb3V0aW5lIGNvbXBhcmVzIHRoZSBleGNlcHRpb24gZW5hYmxlIGJ5dGUgb2YgdGhlCit8CXVzZXJfZnBjciBvbiB0aGUgc3RhY2sgd2l0aCB0aGUgZXhjZXB0aW9uIHN0YXR1cyBieXRlCit8CW9mIHRoZSB1c2VyX2Zwc3IuCit8Cit8CUFueSByb3V0aW5lIHdoaWNoIG1heSByZXBvcnQgYW4gZXhjZXB0aW9ucyBtdXN0IGxvYWQKK3wJdGhlIHN0YWNrIGZyYW1lIGluIG1lbW9yeSB3aXRoIHRoZSBleGNlcHRpb25hbCBvcGVyYW5kKHMpLgorfAorfAlQcmlvcml0eSBmb3IgZXhjZXB0aW9ucyBpczoKK3wKK3wJSGlnaGVzdDoJYnN1bgorfAkJCXNuYW4KK3wJCQlvcGVycgorfAkJCW92ZmwKK3wJCQl1bmZsCit8CQkJZHoKK3wJCQlpbmV4MgorfAlMb3dlc3Q6CQlpbmV4MQorfAorfAlOb3RlOiBUaGUgSUVFRSBzdGFuZGFyZCBzcGVjaWZpZXMgdGhhdCBpbmV4MiBpcyB0byBiZQorfAlyZXBvcnRlZCBpZiBvdmZsIG9jY3VycyBhbmQgdGhlIG92ZmwgZW5hYmxlIGJpdCBpcyBub3QKK3wJc2V0IGJ1dCB0aGUgaW5leDIgZW5hYmxlIGJpdCBpcy4KK3wKK3wKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK0dFTl9FWENFUFQ6ICAgIHxpZG50ICAgIDIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKwl8c2VjdGlvbiA4CisKKyNpbmNsdWRlICJmcHNwLmgiCisKKwl8eHJlZglyZWFsX3RyYWNlCisJfHhyZWYJZnBzcF9kb25lCisJfHhyZWYJZnBzcF9mbXRfZXJyb3IKKworZXhjX3RibDoKKwkubG9uZwlic3VuX2V4YworCS5sb25nCWNvbW1vbkUxCisJLmxvbmcJY29tbW9uRTEKKwkubG9uZwlvdmZsX3VuZmwKKwkubG9uZwlvdmZsX3VuZmwKKwkubG9uZwljb21tb25FMQorCS5sb25nCWNvbW1vbkUzCisJLmxvbmcJY29tbW9uRTMKKwkubG9uZwlub19tYXRjaAorCisJLmdsb2JhbAlnZW5fZXhjZXB0CitnZW5fZXhjZXB0OgorCWNtcGliCSNJRExFX1NJWkUtNCwxKCVhNykJfHRlc3QgZm9yIGlkbGUgZnJhbWUKKwliZXEJZG9fY2hlY2sJCXxnbyBoYW5kbGUgaWRsZSBmcmFtZQorCWNtcGliCSNVTklNUF80MF9TSVpFLTQsMSglYTcpCXx0ZXN0IGZvciBvcmlnIHVuaW1wIGZyYW1lCisJYmVxcwl1bmltcF94CQkJfGdvIGhhbmRsZSB1bmltcCBmcmFtZQorCWNtcGliCSNVTklNUF80MV9TSVpFLTQsMSglYTcpCXx0ZXN0IGZvciByZXYgdW5pbXAgZnJhbWUKKwliZXFzCXVuaW1wX3gJCQl8Z28gaGFuZGxlIHVuaW1wIGZyYW1lCisJY21waWIJI0JVU1lfU0laRS00LDEoJWE3KQl8aWYgc2l6ZSA8PiAkNjAsIGZtdCBlcnJvcgorCWJuZWwJZnBzcF9mbXRfZXJyb3IKKwlsZWFsCUJVU1lfU0laRStMT0NBTF9TSVpFKCVhNyksJWExIHxpbml0IGExIHNvIGZwc3AuaAorfAkJCQkJO2VxdWF0ZXMgd2lsbCB3b3JrCit8IEZpeCB1cCB0aGUgbmV3IGJ1c3kgZnJhbWUgd2l0aCBlbnRyaWVzIGZyb20gdGhlIHVuaW1wIGZyYW1lCit8CisJbW92ZWwJRVRFTVBfRVgoJWE2KSxFVEVNUF9FWCglYTEpIHxjb3B5IGV0ZW1wIGZyb20gdW5pbXAKKwltb3ZlbAlFVEVNUF9ISSglYTYpLEVURU1QX0hJKCVhMSkgfGZyYW1lIHRvIGJ1c3kgZnJhbWUKKwltb3ZlbAlFVEVNUF9MTyglYTYpLEVURU1QX0xPKCVhMSkKKwltb3ZlbAlDTURSRUcxQiglYTYpLENNRFJFRzFCKCVhMSkgfHNldCBpbnN0IGluIGZyYW1lIHRvIHVuaW1wCisJbW92ZWwJQ01EUkVHMUIoJWE2KSwlZDAJCXxmaXggY21kMWIgdG8gbWFrZSBpdAorCWFuZGwJIzB4MDNjMzAwMDAsJWQwCQl8d29yayBmb3IgY21kM2IKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjMTM6IzF9LCVkMQl8ZXh0cmFjdCBiaXQgMgorCWxzbGwJIzUsJWQxCisJc3dhcAklZDEKKwlvcmwJJWQxLCVkMAkJCXxwdXQgaXQgaW4gdGhlIHJpZ2h0IHBsYWNlCisJYmZleHR1CUNNRFJFRzFCKCVhNil7IzEwOiMzfSwlZDEJfGV4dHJhY3QgYml0IDMsNCw1CisJbHNsbAkjMiwlZDEKKwlzd2FwCSVkMQorCW9ybAklZDEsJWQwCQkJfHB1dCB0aGVtIGluIHRoZSByaWdodCBwbGFjZQorCW1vdmVsCSVkMCxDTURSRUczQiglYTEpCQl8aW4gdGhlIGJ1c3kgZnJhbWUKK3wKK3wgT3IgaW4gdGhlIEZQU1IgZnJvbSB0aGUgZW11bGF0aW9uIHdpdGggdGhlIFVTRVJfRlBTUiBvbiB0aGUgc3RhY2suCit8CisJZm1vdmVsCSVGUFNSLCVkMAorCW9ybAklZDAsVVNFUl9GUFNSKCVhNikKKwltb3ZlbAlVU0VSX0ZQU1IoJWE2KSxGUFNSX1NIQURPVyglYTEpIHxzZXQgZXhjIGJpdHMKKwlvcmwJI3N4X21hc2ssRV9CWVRFKCVhMSkKKwlicmEJZG9fY2xlYW4KKworfAorfCBGcmFtZSBpcyBhbiB1bmltcCBmcmFtZSBwb3NzaWJsZSByZXN1bHRpbmcgZnJvbSBhbiBmbW92ZSA8ZWE+LGZwMAorfCB0aGF0IGNhdXNlZCBhbiBleGNlcHRpb24KK3wKK3wgYTEgaXMgbW9kaWZpZWQgdG8gcG9pbnQgaW50byB0aGUgbmV3IGZyYW1lIGFsbG93aW5nIGZwc3AgZXF1YXRlcworfCB0byBiZSB2YWxpZC4KK3wKK3VuaW1wX3g6CisJY21waWIJI1VOSU1QXzQwX1NJWkUtNCwxKCVhNykJfHRlc3QgZm9yIG9yaWcgdW5pbXAgZnJhbWUKKwlibmVzCXRlc3RfcmV2CisJbGVhbAlVTklNUF80MF9TSVpFK0xPQ0FMX1NJWkUoJWE3KSwlYTEKKwlicmFzCXVuaW1wX2NvbgordGVzdF9yZXY6CisJY21waWIJI1VOSU1QXzQxX1NJWkUtNCwxKCVhNykJfHRlc3QgZm9yIHJldiB1bmltcCBmcmFtZQorCWJuZWwJZnBzcF9mbXRfZXJyb3IJCXxpZiBub3QgJDI4IG9yICQzMAorCWxlYWwJVU5JTVBfNDFfU0laRStMT0NBTF9TSVpFKCVhNyksJWExCisKK3VuaW1wX2NvbjoKK3wKK3wgRml4IHVwIHRoZSBuZXcgdW5pbXAgZnJhbWUgd2l0aCBlbnRyaWVzIGZyb20gdGhlIG9sZCB1bmltcCBmcmFtZQorfAorCW1vdmVsCUNNRFJFRzFCKCVhNiksQ01EUkVHMUIoJWExKSB8c2V0IGluc3QgaW4gZnJhbWUgdG8gdW5pbXAKK3wKK3wgT3IgaW4gdGhlIEZQU1IgZnJvbSB0aGUgZW11bGF0aW9uIHdpdGggdGhlIFVTRVJfRlBTUiBvbiB0aGUgc3RhY2suCit8CisJZm1vdmVsCSVGUFNSLCVkMAorCW9ybAklZDAsVVNFUl9GUFNSKCVhNikKKwlicmEJZG9fY2xlYW4KKworfAorfCBGcmFtZSBpcyBpZGxlLCBzbyBjaGVjayBmb3IgZXhjZXB0aW9ucyByZXBvcnRlZCB0aHJvdWdoCit8IFVTRVJfRlBTUiBhbmQgc2V0IHRoZSB1bmltcCBmcmFtZSBhY2NvcmRpbmdseS4KK3wgQTcgbXVzdCBiZSBpbmNyZW1lbnRlZCB0byB0aGUgcG9pbnQgYmVmb3JlIHRoZQorfCBpZGxlIGZzYXZlIHZlY3RvciB0byB0aGUgdW5pbXAgdmVjdG9yLgorfAorCitkb19jaGVjazoKKwlhZGRsCSM0LCVhNwkJCXxwb2ludCBBNyBiYWNrIHRvIHVuaW1wIGZyYW1lCit8Cit8IE9yIGluIHRoZSBGUFNSIGZyb20gdGhlIGVtdWxhdGlvbiB3aXRoIHRoZSBVU0VSX0ZQU1Igb24gdGhlIHN0YWNrLgorfAorCWZtb3ZlbAklRlBTUiwlZDAKKwlvcmwJJWQwLFVTRVJfRlBTUiglYTYpCit8Cit8IE9uIGEgYnVzeSBmcmFtZSwgd2UgbXVzdCBjbGVhciB0aGUgbm1uZXhjIGJpdHMuCit8CisJY21waWIJI0JVU1lfU0laRS00LDEoJWE3KQl8Y2hlY2sgZnJhbWUgdHlwZQorCWJuZXMJY2hlY2tfZnIJCXxpZiBidXN5LCBjbHIgbm1uZXhjCisJY2xydwlOTU5FWEMoJWE2KQkJfGNsciBubW5leGMgJiBubWNleGMKKwlidHN0YgkjNSxDTURSRUcxQiglYTYpCQl8dGVzdCBmb3IgZm1vdmUgb3V0CisJYm5lcwlmcmFtZV9jb20KKwltb3ZlbAlVU0VSX0ZQU1IoJWE2KSxGUFNSX1NIQURPVyglYTYpIHxzZXQgZXhjIGJpdHMKKwlvcmwJI3N4X21hc2ssRV9CWVRFKCVhNikKKwlicmFzCWZyYW1lX2NvbQorY2hlY2tfZnI6CisJY21wYgkjVU5JTVBfNDBfU0laRS00LDEoJWE3KQorCWJlcXMJZnJhbWVfY29tCisJY2xydwlOTU5FWEMoJWE2KQorZnJhbWVfY29tOgorCW1vdmViCUZQQ1JfRU5BQkxFKCVhNiksJWQwCXxnZXQgZnBjciBlbmFibGUgYnl0ZQorCWFuZGIJRlBTUl9FWENFUFQoJWE2KSwlZDAJfGFuZCBpbiB0aGUgZnBzciBleGMgYnl0ZQorCWJmZmZvCSVkMHsjMjQ6Izh9LCVkMQkJfHRlc3QgZm9yIGZpcnN0IHNldCBiaXQKKwlsZWFsCWV4Y190YmwsJWEwCQl8bG9hZCBqbXAgdGFibGUgYWRkcmVzcworCXN1YmliCSMyNCwlZDEJCQl8bm9ybWFsaXplIGJpdCBvZmZzZXQgdG8gMC04CisJbW92ZWwJKCVhMCwlZDEudyo0KSwlYTAJCXxsb2FkIHJvdXRpbmUgYWRkcmVzcyBiYXNlZAorfAkJCQkJO2Jhc2VkIG9uIGZpcnN0IGVuYWJsZWQgZXhjCisJam1wCSglYTApCQkJfGp1bXAgdG8gcm91dGluZQorfAorfCBCc3VuIGlzIG5vdCBwb3NzaWJsZSBpbiB1bmltcCBvciB1bnN1cHAKK3wKK2JzdW5fZXhjOgorCWJyYQlkb19jbGVhbgorfAorfCBUaGUgdHlwaWNhbCB3b3JrIHRvIGJlIGRvbmUgdG8gdGhlIHVuaW1wIGZyYW1lIHRvIHJlcG9ydCBhbgorfCBleGNlcHRpb24gaXMgdG8gc2V0IHRoZSBFMS9FMyBieXRlIGFuZCBjbHIgdGhlIFUgZmxhZy4KK3wgY29tbW9uRTEgZG9lcyB0aGlzIGZvciBFMSBleGNlcHRpb25zLCB3aGljaCBhcmUgc25hbiwKK3wgb3BlcnIsIGFuZCBkei4gIGNvbW1vbkUzIGRvZXMgdGhpcyBmb3IgRTMgZXhjZXB0aW9ucywgd2hpY2gKK3wgYXJlIGluZXgyIGFuZCBpbmV4MSwgYW5kIGFsc28gY2xlYXJzIHRoZSBFMSBleGNlcHRpb24gYml0Cit8IGxlZnQgb3ZlciBmcm9tIHRoZSB1bmltcCBleGNlcHRpb24uCit8Citjb21tb25FMToKKwlic2V0YgkjRTEsRV9CWVRFKCVhNikJCXxzZXQgRTEgZmxhZworCWJyYQljb21tb25FCQkJfGdvIGNsZWFuIGFuZCBleGl0CisKK2NvbW1vbkUzOgorCXRzdGIJVUZMR19UTVAoJWE2KQkJfHRlc3QgZmxhZyBmb3IgdW5zdXAvdW5pbXAgc3RhdGUKKwlibmVzCXVuc0UzCit1bmlFMzoKKwlic2V0YgkjRTMsRV9CWVRFKCVhNikJCXxzZXQgRTMgZmxhZworCWJjbHJiCSNFMSxFX0JZVEUoJWE2KQkJfGNsciBFMSBmcm9tIHVuaW1wCisJYnJhCWNvbW1vbkUKKwordW5zRTM6CisJdHN0YglSRVNfRkxHKCVhNikKKwlibmVzCXVuc0UzXzAKK3Vuc0UzXzE6CisJYnNldGIJI0UzLEVfQllURSglYTYpCQl8c2V0IEUzIGZsYWcKK3Vuc0UzXzA6CisJYmNscmIJI0UxLEVfQllURSglYTYpCQl8Y2xyIEUxIGZsYWcKKwltb3ZlbAlDTURSRUcxQiglYTYpLCVkMAorCWFuZGwJIzB4MDNjMzAwMDAsJWQwCQl8d29yayBmb3IgY21kM2IKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjMTM6IzF9LCVkMQl8ZXh0cmFjdCBiaXQgMgorCWxzbGwJIzUsJWQxCisJc3dhcAklZDEKKwlvcmwJJWQxLCVkMAkJCXxwdXQgaXQgaW4gdGhlIHJpZ2h0IHBsYWNlCisJYmZleHR1CUNNRFJFRzFCKCVhNil7IzEwOiMzfSwlZDEJfGV4dHJhY3QgYml0IDMsNCw1CisJbHNsbAkjMiwlZDEKKwlzd2FwCSVkMQorCW9ybAklZDEsJWQwCQkJfHB1dCB0aGVtIGluIHRoZSByaWdodCBwbGFjZQorCW1vdmVsCSVkMCxDTURSRUczQiglYTYpCQl8aW4gdGhlIGJ1c3kgZnJhbWUKKworY29tbW9uRToKKwliY2xyYgkjVUZMQUcsVF9CWVRFKCVhNikJfGNsciBVIGZsYWcgZnJvbSB1bmltcAorCWJyYQlkb19jbGVhbgkJfGdvIGNsZWFuIGFuZCBleGl0Cit8Cit8IE5vIGJpdHMgaW4gdGhlIGVuYWJsZSBieXRlIG1hdGNoIGV4aXN0aW5nIGV4Y2VwdGlvbnMuICBDaGVjayBmb3IKK3wgdGhlIGNhc2Ugb2YgdGhlIG92ZmwgZXhjIHdpdGhvdXQgdGhlIG92ZmwgZW5hYmxlZCwgYnV0IHdpdGgKK3wgaW5leDIgZW5hYmxlZC4KK3wKK25vX21hdGNoOgorCWJ0c3RiCSNpbmV4Ml9iaXQsRlBDUl9FTkFCTEUoJWE2KSB8Y2hlY2sgZm9yIG92ZmwvaW5leDIgY2FzZQorCWJlcXMJbm9fZXhjCQkJfGlmIGNsZWFyLCBleGl0CisJYnRzdGIJI292ZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgfG5vdyBjaGVjayBvdmZsCisJYmVxcwlub19leGMJCQl8aWYgY2xlYXIsIGV4aXQKKwlicmFzCW92ZmxfdW5mbAkJfGdvIHRvIHVuZmxfb3ZmbCB0byBkZXRlcm1pbmUgaWYKK3wJCQkJCTtpdCBpcyBhbiB1bnN1cHAgb3IgdW5pbXAgZXhjCisKK3wgTm8gZXhjZXB0aW9ucyBhcmUgdG8gYmUgcmVwb3J0ZWQuICBJZiB0aGUgaW5zdHJ1Y3Rpb24gd2FzCit8IHVuaW1wbGVtZW50ZWQsIG5vIEZQVSByZXN0b3JlIGlzIG5lY2Vzc2FyeS4gIElmIGl0IHdhcworfCB1bnN1cHBvcnRlZCwgd2UgbXVzdCBwZXJmb3JtIHRoZSByZXN0b3JlLgorbm9fZXhjOgorCXRzdGIJVUZMR19UTVAoJWE2KQl8dGVzdCBmbGFnIGZvciB1bnN1cHAvdW5pbXAgc3RhdGUKKwliZXFzCXVuaV9ub19leGMKK3Vuc19ub19leGM6CisJdHN0YglSRVNfRkxHKCVhNikJfGNoZWNrIGlmIGZyZXN0b3JlIGlzIG5lZWRlZAorCWJuZQlkb19jbGVhbgl8aWYgY2xlYXIsIG5vIGZyZXN0b3JlIG5lZWRlZAordW5pX25vX2V4YzoKKwltb3ZlbWwJVVNFUl9EQSglYTYpLCVkMC0lZDEvJWEwLSVhMQorCWZtb3ZlbXggVVNFUl9GUDAoJWE2KSwlZnAwLSVmcDMKKwlmbW92ZW1sIFVTRVJfRlBDUiglYTYpLCVmcGNyLyVmcHNyLyVmcGlhcgorCXVubGsJJWE2CisJYnJhCWZpbmlzaF91cAorfAorfCBVbnN1cHBvcnRlZCBEYXRhIFR5cGUgSGFuZGxlcjoKK3wgT3ZmbDoKK3wgICBBbiBmbW92ZW91dCB0aGF0IHJlc3VsdHMgaW4gYW4gb3ZlcmZsb3cgaXMgcmVwb3J0ZWQgdGhpcyB3YXkuCit8IFVuZmw6Cit8ICAgQW4gZm1vdmVvdXQgdGhhdCByZXN1bHRzIGluIGFuIHVuZGVyZmxvdyBpcyByZXBvcnRlZCB0aGlzIHdheS4KK3wKK3wgVW5pbXBsZW1lbnRlZCBJbnN0cnVjdGlvbiBIYW5kbGVyOgorfCBPdmZsOgorfCAgIE9ubHkgc2Nvc2gsIHNldG94LCBzc2luaCwgc3R3b3RveCwgYW5kIHNjYWxlIGNhbiBzZXQgb3ZlcmZsb3cgaW4KK3wgICB0aGlzIG1hbm5lci4KK3wgVW5mbDoKK3wgICBTdHdvdG94LCBzZXRveCwgYW5kIHNjYWxlIGNhbiBzZXQgdW5kZXJmbG93IGluIHRoaXMgbWFubmVyLgorfCAgIEFueSBvZiB0aGUgb3RoZXIgTGlicmFyeSBSb3V0aW5lcyBzdWNoIHRoYXQgZih4KT14IGluIHdoaWNoCit8ICAgeCBpcyBhbiBleHRlbmRlZCBkZW5vcm0gY2FuIHJlcG9ydCBhbiB1bmRlcmZsb3cgZXhjZXB0aW9uLgorfCAgIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgZXhjZXB0aW9uLWNhdXNpbmcgZXhjZXB0aW9uCit8ICAgdG8gbWFrZSBzdXJlIHRoYXQgV0JURU1QIGlzIGNvcnJlY3QuCit8Cit8ICAgVGhlIGV4Y2VwdGlvbmFsIG9wZXJhbmQgaXMgaW4gRlBfU0NSMS4KK3wKK292ZmxfdW5mbDoKKwl0c3RiCVVGTEdfVE1QKCVhNikJfHRlc3QgZmxhZyBmb3IgdW5zdXBwL3VuaW1wIHN0YXRlCisJYmVxcwlvZnVmX2NvbgorfAorfCBUaGUgY2FsbGVyIHdhcyBmcm9tIGFuIHVuc3VwcG9ydGVkIGRhdGEgdHlwZSB0cmFwLiAgVGVzdCBpZiB0aGUKK3wgY2FsbGVyIHNldCBDVV9PTkxZLiAgSWYgc28sIHRoZSBleGNlcHRpb25hbCBvcGVyYW5kIGlzIGV4cGVjdGVkIGluCit8IEZQVEVNUCwgcmF0aGVyIHRoYW4gV0JURU1QLgorfAorCXRzdGIJQ1VfT05MWSglYTYpCQl8dGVzdCBpZiBpbnN0IGlzIGN1LW9ubHkKKwliZXEJdW5zRTMKK3wJbW92ZS53CSMkZmUsQ1VfU0FWRVBDKCVhNikKKwljbHJiCUNVX1NBVkVQQyglYTYpCisJYnNldGIJI0UxLEVfQllURSglYTYpCQl8c2V0IEUxIGV4Y2VwdGlvbiBmbGFnCisJbW92ZXcJRVRFTVBfRVgoJWE2KSxGUFRFTVBfRVgoJWE2KQorCW1vdmVsCUVURU1QX0hJKCVhNiksRlBURU1QX0hJKCVhNikKKwltb3ZlbAlFVEVNUF9MTyglYTYpLEZQVEVNUF9MTyglYTYpCisJYnNldGIJI2ZwdGVtcDE1X2JpdCxEVEFHKCVhNikJfHNldCBmcHRlMTUKKwliY2xyYgkjVUZMQUcsVF9CWVRFKCVhNikJfGNsciBVIGZsYWcgZnJvbSB1bmltcAorCWJyYQlkb19jbGVhbgkJfGdvIGNsZWFuIGFuZCBleGl0CisKK29mdWZfY29uOgorCW1vdmViCSglYTcpLFZFUl9UTVAoJWE2KQl8c2F2ZSB2ZXJzaW9uIG51bWJlcgorCWNtcGliCSNCVVNZX1NJWkUtNCwxKCVhNykJfGNoZWNrIGZvciBidXN5IGZyYW1lCisJYmVxcwlidXN5X2ZyCQkJfGlmIHVuaW1wLCBncm93IHRvIGJ1c3kKKwljbXBpYgkjVkVSXzQwLCglYTcpCQl8dGVzdCBmb3Igb3JpZyB1bmltcCBmcmFtZQorCWJuZXMJdHJ5XzQxCQkJfGlmIG5vdCwgdGVzdCBmb3IgcmV2IGZyYW1lCisJbW92ZXFsCSMxMywlZDAJCQl8bmVlZCB0byB6ZXJvIDE0IGx3b3JkcworCWJyYXMJb2Z1Zl9maW4KK3RyeV80MToKKwljbXBpYgkjVkVSXzQxLCglYTcpCQl8dGVzdCBmb3IgcmV2IHVuaW1wIGZyYW1lCisJYm5lbAlmcHNwX2ZtdF9lcnJvcgkJfGlmIG5laXRoZXIsIGV4aXQgd2l0aCBlcnJvcgorCW1vdmVxbAkjMTEsJWQwCQkJfG5lZWQgdG8gemVybyAxMiBsd29yZHMKKworb2Z1Zl9maW46CisJY2xybAkoJWE3KQorbG9vcDE6CisJY2xybAktKCVhNykJCQl8Y2xlYXIgYW5kIGRlYyBhNworCWRicmEJJWQwLGxvb3AxCisJbW92ZWIJVkVSX1RNUCglYTYpLCglYTcpCisJbW92ZWIJI0JVU1lfU0laRS00LDEoJWE3KQkJfHdyaXRlIGJ1c3kgZm10IHdvcmQuCitidXN5X2ZyOgorCW1vdmVsCUZQX1NDUjEoJWE2KSxXQlRFTVBfRVgoJWE2KQl8d3JpdGUKKwltb3ZlbAlGUF9TQ1IxKzQoJWE2KSxXQlRFTVBfSEkoJWE2KQl8ZXhjZXB0aW9uYWwgb3AgdG8KKwltb3ZlbAlGUF9TQ1IxKzgoJWE2KSxXQlRFTVBfTE8oJWE2KQl8d2J0ZW1wCisJYnNldGIJI0UzLEVfQllURSglYTYpCQkJfHNldCBFMyBmbGFnCisJYmNscmIJI0UxLEVfQllURSglYTYpCQkJfG1ha2Ugc3VyZSBFMSBpcyBjbGVhcgorCWJjbHJiCSNVRkxBRyxUX0JZVEUoJWE2KQkJfGNsciBVIGZsYWcKKwltb3ZlbAlVU0VSX0ZQU1IoJWE2KSxGUFNSX1NIQURPVyglYTYpCisJb3JsCSNzeF9tYXNrLEVfQllURSglYTYpCisJbW92ZWwJQ01EUkVHMUIoJWE2KSwlZDAJCXxmaXggY21kMWIgdG8gbWFrZSBpdAorCWFuZGwJIzB4MDNjMzAwMDAsJWQwCQl8d29yayBmb3IgY21kM2IKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjMTM6IzF9LCVkMQl8ZXh0cmFjdCBiaXQgMgorCWxzbGwJIzUsJWQxCisJc3dhcAklZDEKKwlvcmwJJWQxLCVkMAkJCXxwdXQgaXQgaW4gdGhlIHJpZ2h0IHBsYWNlCisJYmZleHR1CUNNRFJFRzFCKCVhNil7IzEwOiMzfSwlZDEJfGV4dHJhY3QgYml0IDMsNCw1CisJbHNsbAkjMiwlZDEKKwlzd2FwCSVkMQorCW9ybAklZDEsJWQwCQkJfHB1dCB0aGVtIGluIHRoZSByaWdodCBwbGFjZQorCW1vdmVsCSVkMCxDTURSRUczQiglYTYpCQl8aW4gdGhlIGJ1c3kgZnJhbWUKKworfAorfCBDaGVjayBpZiB0aGUgZnJhbWUgdG8gYmUgcmVzdG9yZWQgaXMgYnVzeSBvciB1bmltcC4KK3wqKiBOT1RFICoqKiBCdWcgZml4IGZvciBlcnJhdGEgKDBkNDNiICMzKQorfCBJZiB0aGUgZnJhbWUgaXMgdW5pbXAsIHdlIG11c3QgY3JlYXRlIGEgYnVzeSBmcmFtZSB0bworfCBmaXggdGhlIGJ1ZyB3aXRoIHRoZSBubW5leGMgYml0cyBpbiBjYXNlcyBpbiB3aGljaCB0aGV5Cit8IGFyZSBzZXQgYnkgYSBwcmV2aW91cyBpbnN0cnVjdGlvbiBhbmQgbm90IGNsZWFyZWQgYnkKK3wgdGhlIHNhdmUuIFRoZSBmcmFtZSB3aWxsIGJlIHVuaW1wIG9ubHkgaWYgdGhlIGZpbmFsCit8IGluc3RydWN0aW9uIGluIGFuIGVtdWxhdGlvbiByb3V0aW5lIGNhdXNlZCB0aGUgZXhjZXB0aW9uCit8IGJ5IGRvaW5nIGFuIGZtb3ZlIDxlYT4sZnAwLiAgVGhlIGV4Y2VwdGlvbiBvcGVyYW5kLCBpbgorfCBpbnRlcm5hbCBmb3JtYXQsIGlzIGluIGZwdGVtcC4KK3wKK2RvX2NsZWFuOgorCWNtcGliCSNVTklNUF80MF9TSVpFLTQsMSglYTcpCisJYm5lcwlkb19jb24KKwltb3ZlcWwJIzEzLCVkMAkJCXxpbiBvcmlnLCBuZWVkIHRvIHplcm8gMTQgbHdvcmRzCisJYnJhcwlkb19idWlsZAorZG9fY29uOgorCWNtcGliCSNVTklNUF80MV9TSVpFLTQsMSglYTcpCisJYm5lcwlkb19yZXN0b3JlCQl8ZnJhbWUgbXVzdCBiZSBidXN5CisJbW92ZXFsCSMxMSwlZDAJCQl8aW4gcmV2LCBuZWVkIHRvIHplcm8gMTIgbHdvcmRzCisKK2RvX2J1aWxkOgorCW1vdmViCSglYTcpLFZFUl9UTVAoJWE2KQorCWNscmwJKCVhNykKK2xvb3AyOgorCWNscmwJLSglYTcpCQkJfGNsZWFyIGFuZCBkZWMgYTcKKwlkYnJhCSVkMCxsb29wMgorfAorfCBVc2UgYTEgYXMgcG9pbnRlciBpbnRvIG5ldyBmcmFtZS4gIGE2IGlzIG5vdCBjb3JyZWN0IGlmIGFuIHVuaW1wIG9yCit8IGJ1c3kgZnJhbWUgd2FzIGNyZWF0ZWQgYXMgdGhlIHJlc3VsdCBvZiBhbiBleGNlcHRpb24gb24gdGhlIGZpbmFsCit8IGluc3RydWN0aW9uIG9mIGFuIGVtdWxhdGlvbiByb3V0aW5lLgorfAorfCBXZSBuZWVkIHRvIHNldCB0aGUgbm1jZXhjIGJpdHMgaWYgdGhlIGV4Y2VwdGlvbiBpcyBFMS4gT3RoZXJ3aXNlLAorfCB0aGUgZXhjIHRha2VuIHdpbGwgYmUgaW5leDIuCit8CisJbGVhbAlCVVNZX1NJWkUrTE9DQUxfU0laRSglYTcpLCVhMQl8aW5pdCBhMSBmb3IgbmV3IGZyYW1lCisJbW92ZWIJVkVSX1RNUCglYTYpLCglYTcpCXx3cml0ZSBidXN5IGZtdCB3b3JkCisJbW92ZWIJI0JVU1lfU0laRS00LDEoJWE3KQorCW1vdmVsCUZQX1NDUjEoJWE2KSxXQlRFTVBfRVgoJWExKQl8d3JpdGUKKwltb3ZlbAlGUF9TQ1IxKzQoJWE2KSxXQlRFTVBfSEkoJWExKQl8ZXhjZXB0aW9uYWwgb3AgdG8KKwltb3ZlbAlGUF9TQ1IxKzgoJWE2KSxXQlRFTVBfTE8oJWExKQl8d2J0ZW1wCit8CWJ0c3QuYgkjRTEsRV9CWVRFKCVhMSkKK3wJYmVxLmIJZG9fcmVzdG9yZQorCWJmZXh0dQlVU0VSX0ZQU1IoJWE2KXsjMTc6IzR9LCVkMAl8Z2V0IHNuYW4vb3BlcnIvb3ZmbC91bmZsIGJpdHMKKwliZmlucwklZDAsTk1DRVhDKCVhMSl7IzQ6IzR9CXxhbmQgaW5zZXJ0IHRoZW0gaW4gbm1jZXhjCisJbW92ZWwJVVNFUl9GUFNSKCVhNiksRlBTUl9TSEFET1coJWExKSB8c2V0IGV4YyBiaXRzCisJb3JsCSNzeF9tYXNrLEVfQllURSglYTEpCisKK2RvX3Jlc3RvcmU6CisJbW92ZW1sCVVTRVJfREEoJWE2KSwlZDAtJWQxLyVhMC0lYTEKKwlmbW92ZW14IFVTRVJfRlAwKCVhNiksJWZwMC0lZnAzCisJZm1vdmVtbCBVU0VSX0ZQQ1IoJWE2KSwlZnBjci8lZnBzci8lZnBpYXIKKwlmcmVzdG9yZSAoJWE3KSsKKwl0c3RiCVJFU19GTEcoJWE2KQl8UkVTX0ZMRyBpbmRpY2F0ZXMgYSAiY29udGludWF0aW9uIiBmcmFtZQorCWJlcQljb250CisJYnNyCWJ1ZzEzODQKK2NvbnQ6CisJdW5sawklYTYKK3wKK3wgSWYgdHJhY2UgbW9kZSBlbmFibGVkLCB0aGVuIGdvIHRvIHRyYWNlIGhhbmRsZXIuICBUaGlzIGhhbmRsZXIKK3wgY2Fubm90IGhhdmUgYW55IGZwIGluc3RydWN0aW9ucy4gIElmIHRoZXJlIGFyZSBmcCBpbnN0J3MgYW5kIGFuCit8IGV4Y2VwdGlvbiBoYXMgYmVlbiByZXN0b3JlZCBpbnRvIHRoZSBtYWNoaW5lIHRoZW4gdGhlIGV4Y2VwdGlvbgorfCB3aWxsIG9jY3VyIHVwb24gZXhlY3V0aW9uIG9mIHRoZSBmcCBpbnN0LiAgVGhpcyBpcyBub3QgZGVzaXJhYmxlCit8IGluIHRoZSBrZXJuZWwgKHN1cGVydmlzb3IgbW9kZSkuICBTZWUgTUM2ODA0MCBtYW51YWwgU2VjdGlvbiA5LjMuOC4KK3wKK2ZpbmlzaF91cDoKKwlidHN0YgkjNywoJWE3KQkJfHRlc3QgVDEgaW4gU1IKKwlibmVzCWdfdHJhY2UKKwlidHN0YgkjNiwoJWE3KQkJfHRlc3QgVDAgaW4gU1IKKwlibmVzCWdfdHJhY2UKKwlicmFsCWZwc3BfZG9uZQorfAorfCBDaGFuZ2UgaW50ZWdlciBzdGFjayB0byBsb29rIGxpa2UgdHJhY2Ugc3RhY2sKK3wgVGhlIGFkZHJlc3Mgb2YgdGhlIGluc3RydWN0aW9uIHRoYXQgY2F1c2VkIHRoZQorfCBleGNlcHRpb24gaXMgYWxyZWFkeSBpbiB0aGUgaW50ZWdlciBzdGFjayAoaXMKK3wgdGhlIHNhbWUgYXMgdGhlIHNhdmVkIGZyaWFyKQorfAorfCBJZiB0aGUgY3VycmVudCBmcmFtZSBpcyBhbHJlYWR5IGEgNi13b3JkIHN0YWNrIHRoZW4gYWxsCit8IHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBpcyB0byBjaGFuZ2UgdGhlIHZlY3RvciMgdG8gVFJBQ0UuCit8IElmIHRoZSBmcmFtZSBpcyBvbmx5IGEgNC13b3JkIHN0YWNrIChtZWFuaW5nIHdlIGdvdCBoZXJlCit8IG9uIGFuIFVuc3VwcG9ydGVkIGRhdGEgdHlwZSBleGNlcHRpb24pLCB0aGVuIHdlIG5lZWQgdG8gZ3JvdworfCB0aGUgc3RhY2sgYW4gZXh0cmEgMiB3b3JkcyBhbmQgZ2V0IHRoZSBGUElBUiBmcm9tIHRoZSBGUFUuCit8CitnX3RyYWNlOgorCWJmdHN0CUVYQ19WRUMtNCglc3ApeyMwOiM0fQorCWJuZQlnX2Vhc3kKKworCXN1YncJIzQsJXNwCQl8IG1ha2Ugcm9vbQorCW1vdmVsCTQoJXNwKSwoJXNwKQorCW1vdmVsCTgoJXNwKSw0KCVzcCkKKwlzdWJ3CSNCVVNZX1NJWkUsJXNwCisJZnNhdmUJKCVzcCkKKwlmbW92ZWwJJWZwaWFyLEJVU1lfU0laRStFWENfRUEtNCglc3ApCisJZnJlc3RvcmUgKCVzcCkKKwlhZGR3CSNCVVNZX1NJWkUsJXNwCisKK2dfZWFzeToKKwltb3ZldwkjVFJBQ0VfVkVDLEVYQ19WRUMtNCglYTcpCisJYnJhbAlyZWFsX3RyYWNlCit8Cit8ICBUaGlzIGlzIGEgd29yay1hcm91bmQgZm9yIGhhcmR3YXJlIGJ1ZyAxMzg0LgorfAorYnVnMTM4NDoKKwlsaW5rCSVhNSwjMAorCWZzYXZlCS0oJXNwKQorCWNtcGliCSMweDQxLCglc3ApCXwgY2hlY2sgZm9yIGNvcnJlY3QgZnJhbWUKKwliZXEJZnJhbWVfNDEKKwliZ3QJbm9maXgJCXwgaWYgbW9yZSBhZHZhbmNlZCBtYXNrLCBkbyBuYWRhCisKK2ZyYW1lXzQwOgorCXRzdGIJMSglc3ApCQl8IGNoZWNrIHRvIHNlZSBpZiBpZGxlCisJYm5lCW5vdGlkbGUKK2lkbGU0MDoKKwljbHJsCSglc3ApCQl8IGdldCByaWQgb2Ygb2xkIGZzYXZlIGZyYW1lCisgICAgICAgIG1vdmVsICAlZDEsVVNFUl9EMSglYTYpICB8IHNhdmUgZDEKKwltb3ZldwkjOCwlZDEJCXwgcGxhY2UgdW5pbXAgZnJhbWUgaW5zdGVhZAorbG9vcDQwOgljbHJsCS0oJXNwKQorCWRicmEJJWQxLGxvb3A0MAorICAgICAgICBtb3ZlbCAgVVNFUl9EMSglYTYpLCVkMSAgfCByZXN0b3JlIGQxCisJbW92ZWwJIzB4NDAyODAwMDAsLSglc3ApCisJZnJlc3RvcmUgKCVzcCkrCisJdW5sawklYTUKKwlydHMKKworZnJhbWVfNDE6CisJdHN0YgkxKCVzcCkJCXwgY2hlY2sgdG8gc2VlIGlmIGlkbGUKKwlibmUJbm90aWRsZQoraWRsZTQxOgorCWNscmwJKCVzcCkJCXwgZ2V0IHJpZCBvZiBvbGQgZnNhdmUgZnJhbWUKKyAgICAgICAgbW92ZWwgICVkMSxVU0VSX0QxKCVhNikgIHwgc2F2ZSBkMQorCW1vdmV3CSMxMCwlZDEJCXwgcGxhY2UgdW5pbXAgZnJhbWUgaW5zdGVhZAorbG9vcDQxOgljbHJsCS0oJXNwKQorCWRicmEJJWQxLGxvb3A0MQorICAgICAgICBtb3ZlbCAgVVNFUl9EMSglYTYpLCVkMSAgfCByZXN0b3JlIGQxCisJbW92ZWwJIzB4NDEzMDAwMDAsLSglc3ApCisJZnJlc3RvcmUgKCVzcCkrCisJdW5sawklYTUKKwlydHMKKworbm90aWRsZToKKwliY2xyYgkjZXRlbXAxNV9iaXQsLTQwKCVhNSkKKwlmcmVzdG9yZSAoJXNwKSsKKwl1bmxrCSVhNQorCXJ0cworCitub2ZpeDoKKwlmcmVzdG9yZSAoJXNwKSsKKwl1bmxrCSVhNQorCXJ0cworCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvZ2V0X29wLlMgYi9hcmNoL202OGsvZnBzcDA0MC9nZXRfb3AuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2MyZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAvZ2V0X29wLlMKQEAgLTAsMCArMSw2NzYgQEAKK3wKK3wJZ2V0X29wLnNhIDMuNiA1LzE5LzkyCit8Cit8CWdldF9vcC5zYSAzLjUgNC8yNi85MQorfAorfCAgRGVzY3JpcHRpb246IFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIHVuc3VwcG9ydGVkIGZvcm1hdC9kYXRhCit8IHR5cGUgZXhjZXB0aW9uIGhhbmRsZXIgKCd1bnN1cHAnIC0gdmVjdG9yIDU1KSBhbmQgdGhlIHVuaW1wbGVtZW50ZWQKK3wgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9uIGhhbmRsZXIgKCd1bmltcCcgLSB2ZWN0b3IgMTEpLiAgJ2dldF9vcCcKK3wgZGV0ZXJtaW5lcyB0aGUgb3BjbGFzcyAoMCwgMiwgb3IgMykgYW5kIGJyYW5jaGVzIHRvIHRoZQorfCBvcGNsYXNzIGhhbmRsZXIgcm91dGluZS4gIFNlZSA2ODg4MS8yIFVzZXIncyBNYW51YWwgdGFibGUgNC0xMQorfCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgb3BjbGFzc2VzLgorfAorfCBGb3IgVU5TVVBQT1JURUQgZGF0YS9mb3JtYXQgKGV4Y2VwdGlvbiB2ZWN0b3IgNTUpIGFuZCBmb3IKK3wgVU5JTVBMRU1FTlRFRCBpbnN0cnVjdGlvbnMgKGV4Y2VwdGlvbiB2ZWN0b3IgMTEpIHRoZSBmb2xsb3dpbmcKK3wgYXBwbGllczoKK3wKK3wgLSBGb3IgdW5ub3JtYWxpemVkIG51bWJlcnMgKG9wY2xhc3MgMCwgMiwgb3IgMykgdGhlCit8IG51bWJlcihzKSBpcyBub3JtYWxpemVkIGFuZCB0aGUgb3BlcmFuZCB0eXBlIHRhZyBpcyB1cGRhdGVkLgorfAorfCAtIEZvciBhIHBhY2tlZCBudW1iZXIgKG9wY2xhc3MgMikgdGhlIG51bWJlciBpcyB1bnBhY2tlZCBhbmQgdGhlCit8IG9wZXJhbmQgdHlwZSB0YWcgaXMgdXBkYXRlZC4KK3wKK3wgLSBGb3IgZGVub3JtYWxpemVkIG51bWJlcnMgKG9wY2xhc3MgMCBvciAyKSB0aGUgbnVtYmVyKHMpIGlzIG5vdAorfCBjaGFuZ2VkIGJ1dCBwYXNzZWQgdG8gdGhlIG5leHQgbW9kdWxlLiAgVGhlIG5leHQgbW9kdWxlIGZvcgorfCB1bmltcCBpcyBkb19mdW5jLCB0aGUgbmV4dCBtb2R1bGUgZm9yIHVuc3VwcCBpcyByZXNfZnVuYy4KK3wKK3wgRm9yIFVOU1VQUE9SVEVEIGRhdGEvZm9ybWF0IChleGNlcHRpb24gdmVjdG9yIDU1KSBvbmx5IHRoZQorfCBmb2xsb3dpbmcgYXBwbGllczoKK3wKK3wgLSBJZiB0aGVyZSBpcyBhIG1vdmUgb3V0IHdpdGggYSBwYWNrZWQgbnVtYmVyIChvcGNsYXNzIDMpIHRoZQorfCBudW1iZXIgaXMgcGFja2VkIGFuZCB3cml0dGVuIHRvIHVzZXIgbWVtb3J5LiAgRm9yIHRoZSBvdGhlcgorfCBvcGNsYXNzZXMgdGhlIG51bWJlcihzKSBhcmUgd3JpdHRlbiBiYWNrIHRvIHRoZSBmc2F2ZSBzdGFjaworfCBhbmQgdGhlIGluc3RydWN0aW9uIGlzIHRoZW4gcmVzdG9yZWQgYmFjayBpbnRvIHRoZSAnMDQwLiAgVGhlCit8ICcwNDAgaXMgdGhlbiBhYmxlIHRvIGNvbXBsZXRlIHRoZSBpbnN0cnVjdGlvbi4KK3wKK3wgRm9yIGV4YW1wbGU6Cit8IGZhZGQueCBmcG0sZnBuIHdoZXJlIHRoZSBmcG0gY29udGFpbnMgYW4gdW5ub3JtYWxpemVkIG51bWJlci4KK3wgVGhlICcwNDAgdGFrZXMgYW4gdW5zdXBwb3J0ZWQgZGF0YSB0cmFwIGFuZCBnZXRzIHRvIHRoaXMKK3wgcm91dGluZS4gIFRoZSBudW1iZXIgaXMgbm9ybWFsaXplZCwgcHV0IGJhY2sgb24gdGhlIHN0YWNrIGFuZAorfCB0aGVuIGFuIGZyZXN0b3JlIGlzIGRvbmUgdG8gcmVzdG9yZSB0aGUgaW5zdHJ1Y3Rpb24gYmFjayBpbnRvCit8IHRoZSAnMDQwLiAgVGhlICcwNDAgdGhlbiByZS1leGVjdXRlcyB0aGUgZmFkZC54IGZwbSxmcG4gd2l0aAorfCBhIG5vcm1hbGl6ZWQgbnVtYmVyIGluIHRoZSBzb3VyY2UgYW5kIHRoZSBpbnN0cnVjdGlvbiBpcworfCBzdWNjZXNzZnVsLgorfAorfCBOZXh0IGNvbnNpZGVyIGlmIGluIHRoZSBwcm9jZXNzIG9mIG5vcm1hbGl6aW5nIHRoZSB1bi0KK3wgbm9ybWFsaXplZCBudW1iZXIgaXQgYmVjb21lcyBhIGRlbm9ybWFsaXplZCBudW1iZXIuICBUaGUKK3wgcm91dGluZSB3aGljaCBjb252ZXJ0cyB0aGUgdW5ub3JtIHRvIGEgbm9ybSAoY2FsbGVkIG1rX25vcm0pCit8IGRldGVjdHMgdGhpcyBhbmQgdGFncyB0aGUgbnVtYmVyIGFzIGEgZGVub3JtLiAgVGhlIHJvdXRpbmUKK3wgcmVzX2Z1bmMgc2VlcyB0aGUgZGVub3JtIHRhZyBhbmQgY29udmVydHMgdGhlIGRlbm9ybSB0byBhCit8IG5vcm0uICBUaGUgaW5zdHJ1Y3Rpb24gaXMgdGhlbiByZXN0b3JlZCBiYWNrIGludG8gdGhlICcwNDAKK3wgd2hpY2ggcmVfZXhlY3V0ZXMgdGhlIGluc3RydWN0aW9uLgorfAorfAorfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworR0VUX09QOiAgICB8aWRudCAgICAyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCisJLmdsb2JhbAlQSVJOLFBJUlpSTSxQSVJQCisJLmdsb2JhbAlTTUFMUk4sU01BTFJaUk0sU01BTFJQCisJLmdsb2JhbAlCSUdSTixCSUdSWlJNLEJJR1JQCisKK1BJUk46CisJLmxvbmcgMHg0MDAwMDAwMCwweGM5MGZkYWEyLDB4MjE2OGMyMzUgICAgfHBpCitQSVJaUk06CisJLmxvbmcgMHg0MDAwMDAwMCwweGM5MGZkYWEyLDB4MjE2OGMyMzQgICAgfHBpCitQSVJQOgorCS5sb25nIDB4NDAwMDAwMDAsMHhjOTBmZGFhMiwweDIxNjhjMjM1ICAgIHxwaQorCit8cm91bmQgdG8gbmVhcmVzdAorU01BTFJOOgorCS5sb25nIDB4M2ZmZDAwMDAsMHg5YTIwOWE4NCwweGZiY2ZmNzk4ICAgIHxsb2cxMCgyKQorCS5sb25nIDB4NDAwMDAwMDAsMHhhZGY4NTQ1OCwweGEyYmI0YTlhICAgIHxlCisJLmxvbmcgMHgzZmZmMDAwMCwweGI4YWEzYjI5LDB4NWMxN2YwYmMgICAgfGxvZzIoZSkKKwkubG9uZyAweDNmZmQwMDAwLDB4ZGU1YmQ4YTksMHgzNzI4NzE5NSAgICB8bG9nMTAoZSkKKwkubG9uZyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAgICB8MC4wCit8IHJvdW5kIHRvIHplcm87cm91bmQgdG8gbmVnYXRpdmUgaW5maW5pdHkKK1NNQUxSWlJNOgorCS5sb25nIDB4M2ZmZDAwMDAsMHg5YTIwOWE4NCwweGZiY2ZmNzk4ICAgIHxsb2cxMCgyKQorCS5sb25nIDB4NDAwMDAwMDAsMHhhZGY4NTQ1OCwweGEyYmI0YTlhICAgIHxlCisJLmxvbmcgMHgzZmZmMDAwMCwweGI4YWEzYjI5LDB4NWMxN2YwYmIgICAgfGxvZzIoZSkKKwkubG9uZyAweDNmZmQwMDAwLDB4ZGU1YmQ4YTksMHgzNzI4NzE5NSAgICB8bG9nMTAoZSkKKwkubG9uZyAweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAgICB8MC4wCit8IHJvdW5kIHRvIHBvc2l0aXZlIGluZmluaXR5CitTTUFMUlA6CisJLmxvbmcgMHgzZmZkMDAwMCwweDlhMjA5YTg0LDB4ZmJjZmY3OTkgICAgfGxvZzEwKDIpCisJLmxvbmcgMHg0MDAwMDAwMCwweGFkZjg1NDU4LDB4YTJiYjRhOWIgICAgfGUKKwkubG9uZyAweDNmZmYwMDAwLDB4YjhhYTNiMjksMHg1YzE3ZjBiYyAgICB8bG9nMihlKQorCS5sb25nIDB4M2ZmZDAwMDAsMHhkZTViZDhhOSwweDM3Mjg3MTk1ICAgIHxsb2cxMChlKQorCS5sb25nIDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICAgIHwwLjAKKworfHJvdW5kIHRvIG5lYXJlc3QKK0JJR1JOOgorCS5sb25nIDB4M2ZmZTAwMDAsMHhiMTcyMTdmNywweGQxY2Y3OWFjICAgIHxsbigyKQorCS5sb25nIDB4NDAwMDAwMDAsMHg5MzVkOGRkZCwweGFhYThhYzE3ICAgIHxsbigxMCkKKwkubG9uZyAweDNmZmYwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCAgICB8MTAgXiAwCisKKwkuZ2xvYmFsCVBURU5STgorUFRFTlJOOgorCS5sb25nIDB4NDAwMjAwMDAsMHhBMDAwMDAwMCwweDAwMDAwMDAwICAgIHwxMCBeIDEKKwkubG9uZyAweDQwMDUwMDAwLDB4QzgwMDAwMDAsMHgwMDAwMDAwMCAgICB8MTAgXiAyCisJLmxvbmcgMHg0MDBDMDAwMCwweDlDNDAwMDAwLDB4MDAwMDAwMDAgICAgfDEwIF4gNAorCS5sb25nIDB4NDAxOTAwMDAsMHhCRUJDMjAwMCwweDAwMDAwMDAwICAgIHwxMCBeIDgKKwkubG9uZyAweDQwMzQwMDAwLDB4OEUxQkM5QkYsMHgwNDAwMDAwMCAgICB8MTAgXiAxNgorCS5sb25nIDB4NDA2OTAwMDAsMHg5REM1QURBOCwweDJCNzBCNTlFICAgIHwxMCBeIDMyCisJLmxvbmcgMHg0MEQzMDAwMCwweEMyNzgxRjQ5LDB4RkZDRkE2RDUgICAgfDEwIF4gNjQKKwkubG9uZyAweDQxQTgwMDAwLDB4OTNCQTQ3QzksMHg4MEU5OENFMCAgICB8MTAgXiAxMjgKKwkubG9uZyAweDQzNTEwMDAwLDB4QUE3RUVCRkIsMHg5REY5REU4RSAgICB8MTAgXiAyNTYKKwkubG9uZyAweDQ2QTMwMDAwLDB4RTMxOUEwQUUsMHhBNjBFOTFDNyAgICB8MTAgXiA1MTIKKwkubG9uZyAweDRENDgwMDAwLDB4Qzk3Njc1ODYsMHg4MTc1MEMxNyAgICB8MTAgXiAxMDI0CisJLmxvbmcgMHg1QTkyMDAwMCwweDlFOEIzQjVELDB4QzUzRDVERTUgICAgfDEwIF4gMjA0OAorCS5sb25nIDB4NzUyNTAwMDAsMHhDNDYwNTIwMiwweDhBMjA5NzlCICAgIHwxMCBeIDQwOTYKK3xyb3VuZCB0byBtaW51cyBpbmZpbml0eQorQklHUlpSTToKKwkubG9uZyAweDNmZmUwMDAwLDB4YjE3MjE3ZjcsMHhkMWNmNzlhYiAgICB8bG4oMikKKwkubG9uZyAweDQwMDAwMDAwLDB4OTM1ZDhkZGQsMHhhYWE4YWMxNiAgICB8bG4oMTApCisJLmxvbmcgMHgzZmZmMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAgICAgfDEwIF4gMAorCisJLmdsb2JhbAlQVEVOUk0KK1BURU5STToKKwkubG9uZyAweDQwMDIwMDAwLDB4QTAwMDAwMDAsMHgwMDAwMDAwMCAgICB8MTAgXiAxCisJLmxvbmcgMHg0MDA1MDAwMCwweEM4MDAwMDAwLDB4MDAwMDAwMDAgICAgfDEwIF4gMgorCS5sb25nIDB4NDAwQzAwMDAsMHg5QzQwMDAwMCwweDAwMDAwMDAwICAgIHwxMCBeIDQKKwkubG9uZyAweDQwMTkwMDAwLDB4QkVCQzIwMDAsMHgwMDAwMDAwMCAgICB8MTAgXiA4CisJLmxvbmcgMHg0MDM0MDAwMCwweDhFMUJDOUJGLDB4MDQwMDAwMDAgICAgfDEwIF4gMTYKKwkubG9uZyAweDQwNjkwMDAwLDB4OURDNUFEQTgsMHgyQjcwQjU5RCAgICB8MTAgXiAzMgorCS5sb25nIDB4NDBEMzAwMDAsMHhDMjc4MUY0OSwweEZGQ0ZBNkQ1ICAgIHwxMCBeIDY0CisJLmxvbmcgMHg0MUE4MDAwMCwweDkzQkE0N0M5LDB4ODBFOThDREYgICAgfDEwIF4gMTI4CisJLmxvbmcgMHg0MzUxMDAwMCwweEFBN0VFQkZCLDB4OURGOURFOEQgICAgfDEwIF4gMjU2CisJLmxvbmcgMHg0NkEzMDAwMCwweEUzMTlBMEFFLDB4QTYwRTkxQzYgICAgfDEwIF4gNTEyCisJLmxvbmcgMHg0RDQ4MDAwMCwweEM5NzY3NTg2LDB4ODE3NTBDMTcgICAgfDEwIF4gMTAyNAorCS5sb25nIDB4NUE5MjAwMDAsMHg5RThCM0I1RCwweEM1M0Q1REU1ICAgIHwxMCBeIDIwNDgKKwkubG9uZyAweDc1MjUwMDAwLDB4QzQ2MDUyMDIsMHg4QTIwOTc5QSAgICB8MTAgXiA0MDk2Cit8cm91bmQgdG8gcG9zaXRpdmUgaW5maW5pdHkKK0JJR1JQOgorCS5sb25nIDB4M2ZmZTAwMDAsMHhiMTcyMTdmNywweGQxY2Y3OWFjICAgIHxsbigyKQorCS5sb25nIDB4NDAwMDAwMDAsMHg5MzVkOGRkZCwweGFhYThhYzE3ICAgIHxsbigxMCkKKwkubG9uZyAweDNmZmYwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCAgICB8MTAgXiAwCisKKwkuZ2xvYmFsCVBURU5SUAorUFRFTlJQOgorCS5sb25nIDB4NDAwMjAwMDAsMHhBMDAwMDAwMCwweDAwMDAwMDAwICAgIHwxMCBeIDEKKwkubG9uZyAweDQwMDUwMDAwLDB4QzgwMDAwMDAsMHgwMDAwMDAwMCAgICB8MTAgXiAyCisJLmxvbmcgMHg0MDBDMDAwMCwweDlDNDAwMDAwLDB4MDAwMDAwMDAgICAgfDEwIF4gNAorCS5sb25nIDB4NDAxOTAwMDAsMHhCRUJDMjAwMCwweDAwMDAwMDAwICAgIHwxMCBeIDgKKwkubG9uZyAweDQwMzQwMDAwLDB4OEUxQkM5QkYsMHgwNDAwMDAwMCAgICB8MTAgXiAxNgorCS5sb25nIDB4NDA2OTAwMDAsMHg5REM1QURBOCwweDJCNzBCNTlFICAgIHwxMCBeIDMyCisJLmxvbmcgMHg0MEQzMDAwMCwweEMyNzgxRjQ5LDB4RkZDRkE2RDYgICAgfDEwIF4gNjQKKwkubG9uZyAweDQxQTgwMDAwLDB4OTNCQTQ3QzksMHg4MEU5OENFMCAgICB8MTAgXiAxMjgKKwkubG9uZyAweDQzNTEwMDAwLDB4QUE3RUVCRkIsMHg5REY5REU4RSAgICB8MTAgXiAyNTYKKwkubG9uZyAweDQ2QTMwMDAwLDB4RTMxOUEwQUUsMHhBNjBFOTFDNyAgICB8MTAgXiA1MTIKKwkubG9uZyAweDRENDgwMDAwLDB4Qzk3Njc1ODYsMHg4MTc1MEMxOCAgICB8MTAgXiAxMDI0CisJLmxvbmcgMHg1QTkyMDAwMCwweDlFOEIzQjVELDB4QzUzRDVERTYgICAgfDEwIF4gMjA0OAorCS5sb25nIDB4NzUyNTAwMDAsMHhDNDYwNTIwMiwweDhBMjA5NzlCICAgIHwxMCBeIDQwOTYKKworCXx4cmVmCW5ybV96ZXJvCisJfHhyZWYJZGVjYmluCisJfHhyZWYJcm91bmQKKworCS5nbG9iYWwgICAgZ2V0X29wCisJLmdsb2JhbCAgICB1bnNfZ2V0b3AKKwkuZ2xvYmFsICAgIHVuaV9nZXRvcAorZ2V0X29wOgorCWNscmIJRFlfTU9fRkxHKCVhNikKKwl0c3RiCVVGTEdfVE1QKCVhNikJfHRlc3QgZmxhZyBmb3IgdW5zdXBwL3VuaW1wIHN0YXRlCisJYmVxCXVuaV9nZXRvcAorCit1bnNfZ2V0b3A6CisJYnRzdGIJI2RpcmVjdGlvbl9iaXQsQ01EUkVHMUIoJWE2KQorCWJuZQlvcGNsYXNzMwl8YnJhbmNoIGlmIGEgZm1vdmUgb3V0IChhbnkga2luZCkKKwlidHN0YgkjNixDTURSRUcxQiglYTYpCisJYmVxcwl1bnNfbm90cGFja2VkCisKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjMzojM30sJWQwCisJY21wYgkjMywlZDAKKwliZXEJcGFja19zb3VyY2UJfGNoZWNrIGZvciBhIHBhY2tlZCBzcmMgb3AsIGJyYW5jaCBpZiBzbwordW5zX25vdHBhY2tlZDoKKwlic3IJY2hrX2R5X21vCXxzZXQgdGhlIGR5YWRpYy9tb25hZGljIGZsYWcKKwl0c3RiCURZX01PX0ZMRyglYTYpCisJYmVxcwlzcmNfb3BfY2sJfGlmIG1vbmFkaWMsIGdvIGNoZWNrIHNyYyBvcAorfAkJCQk7ZWxzZSwgY2hlY2sgZHN0IG9wIChmYWxsIHRocm91Z2gpCisKKwlidHN0YgkjNyxEVEFHKCVhNikKKwliZXFzCXNyY19vcF9jawl8aWYgZHN0IG9wIGlzIG5vcm0sIGNoZWNrIHNyYyBvcAorCWJyYXMJZHN0X2V4X2Rucm0JfGVsc2UsIGhhbmRsZSBkZXN0aW5hdGlvbiB1bm5vcm0vZG5ybQorCit1bmlfZ2V0b3A6CisJYmZleHR1CUNNRFJFRzFCKCVhNil7IzA6IzZ9LCVkMCB8Z2V0IG9wY2xhc3MgYW5kIHNyYyBmaWVsZHMKKwljbXBpbAkjMHgxNywlZDAJCXxpZiBvcCBjbGFzcyBhbmQgc2l6ZSBmaWVsZHMgYXJlICQxNywKK3wJCQkJO2l0IGlzIEZNT1ZFQ1I7IGlmIG5vdCwgY29udGludWUKK3wKK3wgSWYgdGhlIGluc3RydWN0aW9uIGlzIGZtb3ZlY3IsIGV4aXQgZ2V0X29wLiAgSXQgaXMgaGFuZGxlZAorfCBpbiBkb19mdW5jIGFuZCBzbW92ZWNyLnNhLgorfAorCWJuZQlub3RfZm1vdmVjcgl8aGFuZGxlIGZtb3ZlY3IgYXMgYW4gdW5pbXBsZW1lbnRlZCBpbnN0CisJcnRzCisKK25vdF9mbW92ZWNyOgorCWJ0c3RiCSNFMSxFX0JZVEUoJWE2KQl8aWYgc2V0LCB0aGVyZSBpcyBhIHBhY2tlZCBvcGVyYW5kCisJYm5lCXBhY2tfc291cmNlCXxjaGVjayBmb3IgcGFja2VkIHNyYyBvcCwgYnJhbmNoIGlmIHNvCisKK3wgVGhlIGZvbGxvd2luZyBsaW5lcyBvZiBhcmUgY29kZWQgdG8gb3B0aW1pemUgb24gbm9ybWFsaXplZCBvcGVyYW5kcworCW1vdmViCVNUQUcoJWE2KSwlZDAKKwlvcmIJRFRBRyglYTYpLCVkMAl8Y2hlY2sgaWYgZWl0aGVyIG9mIFNUQUcvRFRBRyBtc2Igc2V0CisJYm1pcwlkZXN0X29wX2NrCXxpZiBzbywgc29tZSBvcCBuZWVkcyB0byBiZSBmaXhlZAorCXJ0cworCitkZXN0X29wX2NrOgorCWJ0c3RiCSM3LERUQUcoJWE2KQl8Y2hlY2sgZm9yIHVuc3VwcG9ydGVkIGRhdGEgdHlwZXMgaW4KKwliZXFzCXNyY19vcF9jawl8dGhlIGRlc3RpbmF0aW9uLCBpZiBub3QsIGNoZWNrIHNyYyBvcAorCWJzcgljaGtfZHlfbW8JfHNldCBkeWFkaWMvbW9uYWRpYyBmbGFnCisJdHN0YglEWV9NT19GTEcoJWE2KQl8CisJYmVxcwlzcmNfb3BfY2sJfGlmIG1vbmFkaWMsIGNoZWNrIHNyYyBvcAorfAorfCBBdCB0aGlzIHBvaW50LCBkZXN0aW5hdGlvbiBoYXMgYW4gZXh0ZW5kZWQgZGVub3JtIG9yIHVubm9ybS4KK3wKK2RzdF9leF9kbnJtOgorCW1vdmV3CUZQVEVNUF9FWCglYTYpLCVkMCB8Z2V0IGRlc3RpbmF0aW9uIGV4cG9uZW50CisJYW5kaXcJIzB4N2ZmZiwlZDAJfG1hc2sgc2lnbiwgY2hlY2sgaWYgZXhwID0gMDAwMAorCWJlcXMJc3JjX29wX2NrCXxpZiBkZW5vcm0gdGhlbiBjaGVjayBzb3VyY2Ugb3AuCit8CQkJCTtkZW5vcm1zIGFyZSB0YWtlbiBjYXJlIG9mIGluIHJlc19mdW5jCit8CQkJCTsodW5zdXBwKSBvciBkb19mdW5jICh1bmltcCkKK3wJCQkJO2Vsc2UgdW5ub3JtIGZhbGwgdGhyb3VnaAorCWxlYWwJRlBURU1QKCVhNiksJWEwCXxwb2ludCBhMCB0byBkb3AgLSB1c2VkIGluIG1rX25vcm0KKwlic3IJbWtfbm9ybQkJfGdvIG5vcm1hbGl6ZSAtIG1rX25vcm0gcmV0dXJuczoKK3wJCQkJO0xfU0NSMXs3OjV9ID0gb3BlcmFuZCB0YWcKK3wJCQkJOwkoMDAwID0gbm9ybSwgMTAwID0gZGVub3JtKQorfAkJCQk7TF9TQ1IxezR9ID0gZnB0ZTE1IG9yIGV0ZTE1Cit8CQkJCTsJMCA9IGV4cCA+ICAkM2ZmZgorfAkJCQk7CTEgPSBleHAgPD0gJDNmZmYKK3wJCQkJO2FuZCBwdXRzIHRoZSBub3JtYWxpemVkIG51bSBiYWNrCit8CQkJCTtvbiB0aGUgZnNhdmUgc3RhY2sKK3wKKwltb3ZlYiBMX1NDUjEoJWE2KSxEVEFHKCVhNikgfHdyaXRlIHRoZSBuZXcgdGFnICYgZnB0ZTE1Cit8CQkJCTt0byB0aGUgZnNhdmUgc3RhY2sgYW5kIGZhbGwKK3wJCQkJO3Rocm91Z2ggdG8gY2hlY2sgc291cmNlIG9wZXJhbmQKK3wKK3NyY19vcF9jazoKKwlidHN0YgkjNyxTVEFHKCVhNikKKwliZXEJZW5kX2dldG9wCXxjaGVjayBmb3IgdW5zdXBwb3J0ZWQgZGF0YSB0eXBlcyBvbiB0aGUKK3wJCQkJO3NvdXJjZSBvcGVyYW5kCisJYnRzdGIJIzUsU1RBRyglYTYpCisJYm5lcwlzcmNfc2RfZG5ybQl8aWYgYml0IDUgc2V0LCBoYW5kbGUgc2dsL2RibCBkZW5vcm1zCit8Cit8IEF0IHRoaXMgcG9pbnQgb25seSB1bm5vcm1zIG9yIGV4dGVuZGVkIGRlbm9ybXMgYXJlIHBvc3NpYmxlLgorfAorc3JjX2V4X2Rucm06CisJbW92ZXcJRVRFTVBfRVgoJWE2KSwlZDAgfGdldCBzb3VyY2UgZXhwb25lbnQKKwlhbmRpdwkjMHg3ZmZmLCVkMAl8bWFzayBzaWduLCBjaGVjayBpZiBleHAgPSAwMDAwCisJYmVxCWVuZF9nZXRvcAl8aWYgZGVub3JtIHRoZW4gZXhpdCwgZGVub3JtcyBhcmUKK3wJCQkJO2hhbmRsZWQgaW4gZG9fZnVuYworCWxlYWwJRVRFTVAoJWE2KSwlYTAJfHBvaW50IGEwIHRvIHNvcCAtIHVzZWQgaW4gbWtfbm9ybQorCWJzcglta19ub3JtCQl8Z28gbm9ybWFsaXplIC0gbWtfbm9ybSByZXR1cm5zOgorfAkJCQk7TF9TQ1Ixezc6NX0gPSBvcGVyYW5kIHRhZworfAkJCQk7CSgwMDAgPSBub3JtLCAxMDAgPSBkZW5vcm0pCit8CQkJCTtMX1NDUjF7NH0gPSBmcHRlMTUgb3IgZXRlMTUKK3wJCQkJOwkwID0gZXhwID4gICQzZmZmCit8CQkJCTsJMSA9IGV4cCA8PSAkM2ZmZgorfAkJCQk7YW5kIHB1dHMgdGhlIG5vcm1hbGl6ZWQgbnVtIGJhY2sKK3wJCQkJO29uIHRoZSBmc2F2ZSBzdGFjaworfAorCW1vdmViCUxfU0NSMSglYTYpLFNUQUcoJWE2KSB8d3JpdGUgdGhlIG5ldyB0YWcgJiBldGUxNQorCXJ0cwkJCXxlbmRfZ2V0b3AKKworfAorfCBBdCB0aGlzIHBvaW50LCBvbmx5IHNpbmdsZSBvciBkb3VibGUgZGVub3JtcyBhcmUgcG9zc2libGUuCit8IElmIHRoZSBpbnN0IGlzIG5vdCBmbW92ZSwgbm9ybWFsaXplIHRoZSBzb3VyY2UuICBJZiBpdCBpcywKK3wgZG8gbm90aGluZyB0byB0aGUgaW5wdXQuCit8CitzcmNfc2RfZG5ybToKKwlidHN0YgkjNCxDTURSRUcxQiglYTYpCXxkaWZmZXJlbnRpYXRlIGJldHdlZW4gc2dsL2RibCBkZW5vcm0KKwlibmVzCWlzX2RvdWJsZQoraXNfc2luZ2xlOgorCW1vdmV3CSMweDNmODEsJWQxCXx3cml0ZSBiaWFzIGZvciBzZ2wgZGVub3JtCisJYnJhcwljb21tb24JCXxnb3RvIHRoZSBjb21tb24gY29kZQoraXNfZG91YmxlOgorCW1vdmV3CSMweDNjMDEsJWQxCXx3cml0ZSB0aGUgYmlhcyBmb3IgYSBkYmwgZGVub3JtCitjb21tb246CisJYnRzdGIJI3NpZ25fYml0LEVURU1QX0VYKCVhNikgfGdyYWIgc2lnbiBiaXQgb2YgbWFudGlzc2EKKwliZXFzCXBvcworCWJzZXQJIzE1LCVkMQkJfHNldCBzaWduIGJpdCBiZWNhdXNlIGl0IGlzIG5lZ2F0aXZlCitwb3M6CisJbW92ZXcJJWQxLEVURU1QX0VYKCVhNikKK3wJCQkJO3B1dCBleHBvbmVudCBvbiBzdGFjaworCisJbW92ZXcJQ01EUkVHMUIoJWE2KSwlZDEKKwlhbmR3CSMweGUzZmYsJWQxCXxjbGVhciBvdXQgc291cmNlIHNwZWNpZmllcgorCW9ydwkjMHgwODAwLCVkMQl8c2V0IHNvdXJjZSBzcGVjaWZpZXIgdG8gZXh0ZW5kZWQgcHJlYworCW1vdmV3CSVkMSxDTURSRUcxQiglYTYpCXx3cml0ZSBiYWNrIHRvIHRoZSBjb21tYW5kIHdvcmQgaW4gc3RhY2sKK3wJCQkJO3RoaXMgaXMgbmVlZGVkIHRvIGZpeCB1bnN1cHAgZGF0YSBzdGFjaworCWxlYWwJRVRFTVAoJWE2KSwlYTAJfHBvaW50IGEwIHRvIHNvcAorCisJYnNyCW1rX25vcm0JCXxjb252ZXJ0IHNnbC9kYmwgZGVub3JtIHRvIG5vcm0KKwltb3ZlYglMX1NDUjEoJWE2KSxTVEFHKCVhNikgfHB1dCB0YWcgaW50byBzb3VyY2UgdGFnIHJlZyAtIGQwCisJcnRzCQkJfGVuZF9nZXRvcAorfAorfCBBdCB0aGlzIHBvaW50LCB0aGUgc291cmNlIGlzIGRlZmluaXRlbHkgcGFja2VkLCB3aGV0aGVyCit8IGluc3RydWN0aW9uIGlzIGR5YWRpYyBvciBtb25hZGljIGlzIHN0aWxsIHVua25vd24KK3wKK3BhY2tfc291cmNlOgorCW1vdmVsCUZQVEVNUF9MTyglYTYpLEVURU1QKCVhNikJfHdyaXRlIG1zIHBhcnQgb2YgcGFja2VkCit8CQkJCTtudW1iZXIgdG8gZXRlbXAgc2xvdAorCWJzcgljaGtfZHlfbW8JfHNldCBkeWFkaWMvbW9uYWRpYyBmbGFnCisJYnNyCXVucGFjaworCisJdHN0YglEWV9NT19GTEcoJWE2KQorCWJlcXMJZW5kX2dldG9wCXxpZiBtb25hZGljLCBleGl0Cit8CQkJCTtlbHNlLCBmaXggRlBURU1QCitwYWNrX2R5YToKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjNjojM30sJWQwIHxleHRyYWN0IGRlc3QgZnAgcmVnCisJbW92ZWwJIzcsJWQxCisJc3VibAklZDAsJWQxCisJY2xybAklZDAKKwlic2V0bAklZDEsJWQwCQl8c2V0IHVwIGQwIGFzIGEgZHluYW1pYyByZWdpc3RlciBtYXNrCisJZm1vdmVteCAlZDAsRlBURU1QKCVhNikJfHdyaXRlIHRvIEZQVEVNUAorCisJYnRzdGIJIzcsRFRBRyglYTYpCXxjaGVjayBkZXN0IHRhZyBmb3IgdW5ub3JtIG9yIGRlbm9ybQorCWJuZQlkc3RfZXhfZG5ybQl8ZWxzZSwgaGFuZGxlIHRoZSB1bm5vcm0gb3IgZXh0IGRlbm9ybQorfAorfCBEZXN0IGlzIG5vdCBkZW5vcm1hbGl6ZWQuICBDaGVjayBmb3Igbm9ybSwgYW5kIHNldCBmcHRlMTUKK3wgYWNjb3JkaW5nbHkuCit8CisJbW92ZWIJRFRBRyglYTYpLCVkMAorCWFuZGliCSMweGYwLCVkMAkJfHN0cmlwIHRvIG9ubHkgZHRhZzpmcHRlMTUKKwl0c3RiCSVkMAkJfGNoZWNrIGZvciBub3JtYWxpemVkIHZhbHVlCisJYm5lcwllbmRfZ2V0b3AJfGlmIGluZi9uYW4vemVybyBsZWF2ZSBnZXRfb3AKKwltb3ZldwlGUFRFTVBfRVgoJWE2KSwlZDAKKwlhbmRpdwkjMHg3ZmZmLCVkMAorCWNtcGl3CSMweDNmZmYsJWQwCXxjaGVjayBpZiBmcHRlMTUgbmVlZHMgc2V0dGluZworCWJnZXMJZW5kX2dldG9wCXxpZiA+PSAkM2ZmZiwgbGVhdmUgZnB0ZTE1PTAKKwlvcmIJIzB4MTAsRFRBRyglYTYpCisJYnJhcwllbmRfZ2V0b3AKKworfAorfCBBdCB0aGlzIHBvaW50LCBpdCBpcyBlaXRoZXIgYW4gZm1vdmVvdXQgcGFja2VkLCB1bm5vcm0gb3IgZGVub3JtCit8CitvcGNsYXNzMzoKKwljbHJiCURZX01PX0ZMRyglYTYpCXxzZXQgZHlhZGljL21vbmFkaWMgZmxhZyB0byBtb25hZGljCisJYmZleHR1CUNNRFJFRzFCKCVhNil7IzQ6IzJ9LCVkMAorCWNtcGliCSMzLCVkMAorCWJuZQlzcmNfZXhfZG5ybQl8aWYgbm90IGVxdWFsLCBtdXN0IGJlIHVubm9ybSBvciBkZW5vcm0KK3wJCQkJO2Vsc2UgaXQgaXMgYSBwYWNrZWQgbW92ZSBvdXQKK3wJCQkJO2V4aXQKK2VuZF9nZXRvcDoKKwlydHMKKworfAorfCBTZXRzIHRoZSBEWV9NT19GTEcgY29ycmVjdGx5LiBUaGlzIGlzIHVzZWQgb25seSBvbiBpZiBpdCBpcyBhbgorfCB1bnN1cHBvcnRlZCBkYXRhIHR5cGUgZXhjZXB0aW9uLiAgU2V0IGlmIGR5YWRpYy4KK3wKK2Noa19keV9tbzoKKwltb3ZldwlDTURSRUcxQiglYTYpLCVkMAorCWJ0c3RsCSM1LCVkMAkJfHRlc3RpbmcgZXh0ZW5zaW9uIGNvbW1hbmQgd29yZAorCWJlcXMJc2V0X21vbgkJfGlmIGJpdCA1ID0gMCB0aGVuIG1vbmFkaWMKKwlidHN0bAkjNCwlZDAJCXxrbm93IHRoYXQgYml0IDUgPSAxCisJYmVxcwlzZXRfZHlhCQl8aWYgYml0IDQgPSAwIHRoZW4gZHlhZGljCisJYW5kaXcJIzB4MDA3ZiwlZDAJfGdldCByaWQgb2YgYWxsIGJ1dCBleHRlbnNpb24gYml0cyB7NjowfQorCWNtcGl3CSMweDAwMzgsJWQwCXxpZiBleHRlbnNpb24gPSAkMzggdGhlbiBmY21wIChkeWFkaWMpCisJYm5lcwlzZXRfbW9uCitzZXRfZHlhOgorCXN0CURZX01PX0ZMRyglYTYpCXxzZXQgdGhlIGluc3QgZmxhZyB0eXBlIHRvIGR5YWRpYworCXJ0cworc2V0X21vbjoKKwljbHJiCURZX01PX0ZMRyglYTYpCXxzZXQgdGhlIGluc3QgZmxhZyB0eXBlIHRvIG1vbmFkaWMKKwlydHMKK3wKK3wJTUtfTk9STQorfAorfCBOb3JtYWxpemVzIHVubm9ybWFsaXplZCBudW1iZXJzLCBzZXRzIHRhZyB0byBub3JtIG9yIGRlbm9ybSwgc2V0cyB1bmZsCit8IGV4Y2VwdGlvbiBpZiBkZW5vcm0uCit8Cit8IENBU0Ugb3BjbGFzcyAweDAgdW5zdXBwCit8CW1rX25vcm0gdGlsbCBtc2Igc2V0Cit8CXNldCB0YWcgPSBub3JtCit8Cit8IENBU0Ugb3BjbGFzcyAweDAgdW5pbXAKK3wJbWtfbm9ybSB0aWxsIG1zYiBzZXQgb3IgZXhwID0gMAorfAlpZiBpbnRlZ2VyIGJpdCA9IDAKK3wJICAgdGFnID0gZGVub3JtCit8CWVsc2UKK3wJICAgdGFnID0gbm9ybQorfAorfCBDQVNFIG9wY2xhc3MgMDExIHVuc3VwcAorfAlta19ub3JtIHRpbGwgbXNiIHNldCBvciBleHAgPSAwCit8CWlmIGludGVnZXIgYml0ID0gMAorfAkgICB0YWcgPSBkZW5vcm0KK3wJICAgc2V0IHVuZmxfbm1jZXhlID0gMQorfAllbHNlCit8CSAgIHRhZyA9IG5vcm0KK3wKK3wgaWYgZXhwIDw9ICQzZmZmCit8ICAgc2V0IGV0ZTE1IG9yIGZwdGUxNSA9IDEKK3wgZWxzZSBzZXQgZXRlMTUgb3IgZnB0ZTE1ID0gMAorCit8IGlucHV0OgorfAlhMCA9IHBvaW50cyB0byBvcGVyYW5kIHRvIGJlIG5vcm1hbGl6ZWQKK3wgb3V0cHV0OgorfAlMX1NDUjF7Nzo1fSA9IG9wZXJhbmQgdGFnICgwMDAgPSBub3JtLCAxMDAgPSBkZW5vcm0pCit8CUxfU0NSMXs0fSAgID0gZnB0ZTE1IG9yIGV0ZTE1ICgwID0gZXhwID4gJDNmZmYsIDEgPSBleHAgPD0kM2ZmZikKK3wJdGhlIG5vcm1hbGl6ZWQgb3BlcmFuZCBpcyBwbGFjZWQgYmFjayBvbiB0aGUgZnNhdmUgc3RhY2sKK21rX25vcm06CisJY2xybAlMX1NDUjEoJWE2KQorCWJjbHJiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCisJc25lCUxPQ0FMX1NHTiglYTApCXx0cmFuc2Zvcm0gaW50byBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQKKworCWNtcGliCSMweDJjLDErRVhDX1ZFQyglYTYpIHxjaGVjayBpZiB1bmltcAorCWJuZXMJdW5zX2RhdGEJfGJyYW5jaCBpZiB1bnN1cHAKKwlic3IJdW5pX2luc3QJfGNhbGwgaWYgdW5pbXAgKG9wY2xhc3MgMHgwKQorCWJyYXMJcmVsb2FkCit1bnNfZGF0YToKKwlidHN0YgkjZGlyZWN0aW9uX2JpdCxDTURSRUcxQiglYTYpIHxjaGVjayB0cmFuc2ZlciBkaXJlY3Rpb24KKwlibmVzCWJpdF9zZXQJCXxicmFuY2ggaWYgc2V0IChvcGNsYXNzIDAxMSkKKwlic3IJdW5zX29weAkJfGNhbGwgaWYgb3BjbGFzcyAweDAKKwlicmFzCXJlbG9hZAorYml0X3NldDoKKwlic3IJdW5zX29wMwkJfG9wY2xhc3MgMDExCityZWxvYWQ6CisJY21wdwkjMHgzZmZmLExPQ0FMX0VYKCVhMCkgfGlmIGV4cCA+ICQzZmZmCisJYmd0cwllbmRfbWsJCXwgICBmcHRlMTUvZXRlMTUgYWxyZWFkeSBzZXQgdG8gMAorCWJzZXRiCSM0LExfU0NSMSglYTYpCXxlbHNlIHNldCBmcHRlMTUvZXRlMTUgdG8gMQorfAkJCQk7Y2FsbGluZyByb3V0aW5lIGFjdHVhbGx5IHNldHMgdGhlCit8CQkJCTt2YWx1ZSBvbiB0aGUgc3RhY2sgKGFsb25nIHdpdGggdGhlCit8CQkJCTt0YWcpLCBzaW5jZSB0aGlzIHJvdXRpbmUgZG9lc24ndAorfAkJCQk7a25vdyBpZiBpdCBzaG91bGQgc2V0IGV0ZTE1IG9yIGZwdGUxNQorfAkJCQk7aWUsIGl0IGRvZXNuJ3Qga25vdyBpZiB0aGlzIGlzIHRoZQorfAkJCQk7c3JjIG9wIG9yIGRlc3Qgb3AuCitlbmRfbWs6CisJYmZjbHIJTE9DQUxfU0dOKCVhMCl7IzA6Izh9CisJYmVxcwllbmRfbWtfcG9zCisJYnNldGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkgfGNvbnZlcnQgYmFjayB0byBJRUVFIGZvcm1hdAorZW5kX21rX3BvczoKKwlydHMKK3wKK3wgICAgIENBU0Ugb3BjbGFzcyAwMTEgdW5zdXBwCit8Cit1bnNfb3AzOgorCWJzcglucm1femVybwl8bm9ybWFsaXplIHRpbGwgbXNiID0gMSBvciBleHAgPSB6ZXJvCisJYnRzdGIJIzcsTE9DQUxfSEkoJWEwKQl8aWYgbXNiID0gMQorCWJuZXMJbm9fdW5mbAkJfHRoZW4gYnJhbmNoCitzZXRfdW5mbDoKKwlvcncJI2Rucm1fdGFnLExfU0NSMSglYTYpIHxzZXQgZGVub3JtIHRhZworCWJzZXRiCSN1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpIHxzZXQgdW5mbCBleGNlcHRpb24gYml0Citub191bmZsOgorCXJ0cworfAorfCAgICAgQ0FTRSBvcGNsYXNzIDB4MCB1bnN1cHAKK3wKK3Vuc19vcHg6CisJYnNyCW5ybV96ZXJvCXxub3JtYWxpemUgdGhlIG51bWJlcgorCWJ0c3RiCSM3LExPQ0FMX0hJKCVhMCkJfGNoZWNrIGlmIGludGVnZXIgYml0IChqLWJpdCkgaXMgc2V0CisJYmVxcwl1bnNfZGVuCQl8aWYgY2xlYXIgdGhlbiBub3cgaGF2ZSBhIGRlbm9ybQordW5zX25ybToKKwlvcmIJI25vcm1fdGFnLExfU0NSMSglYTYpIHxzZXQgdGFnIHRvIG5vcm0KKwlydHMKK3Vuc19kZW46CisJb3JiCSNkbnJtX3RhZyxMX1NDUjEoJWE2KSB8c2V0IHRhZyB0byBkZW5vcm0KKwlydHMKK3wKK3wgICAgIENBU0Ugb3BjbGFzcyAweDAgdW5pbXAKK3wKK3VuaV9pbnN0OgorCWJzcglucm1femVybworCWJ0c3RiCSM3LExPQ0FMX0hJKCVhMCkJfGNoZWNrIGlmIGludGVnZXIgYml0IChqLWJpdCkgaXMgc2V0CisJYmVxcwl1bmlfZGVuCQl8aWYgY2xlYXIgdGhlbiBub3cgaGF2ZSBhIGRlbm9ybQordW5pX25ybToKKwlvcmIJI25vcm1fdGFnLExfU0NSMSglYTYpIHxzZXQgdGFnIHRvIG5vcm0KKwlydHMKK3VuaV9kZW46CisJb3JiCSNkbnJtX3RhZyxMX1NDUjEoJWE2KSB8c2V0IHRhZyB0byBkZW5vcm0KKwlydHMKKworfAorfAlEZWNpbWFsIHRvIGJpbmFyeSBjb252ZXJzaW9uCit8Cit8IFNwZWNpYWwgY2FzZXMgb2YgaW5mIGFuZCBOYU5zIGFyZSBjb21wbGV0ZWQgb3V0c2lkZSBvZiBkZWNiaW4uCit8IElmIHRoZSBpbnB1dCBpcyBhbiBzbmFuLCB0aGUgc25hbiBiaXQgaXMgbm90IHNldC4KK3wKK3wgaW5wdXQ6Cit8CUVURU1QKGE2KQktIHBvaW50cyB0byBwYWNrZWQgZGVjaW1hbCBzdHJpbmcgaW4gbWVtb3J5Cit8IG91dHB1dDoKK3wJZnAwCS0gY29udGFpbnMgcGFja2VkIHN0cmluZyBjb252ZXJ0ZWQgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uCit8CUVURU1QCS0gc2FtZSBhcyBmcDAKK3VucGFjazoKKwltb3ZldwlDTURSRUcxQiglYTYpLCVkMAl8ZXhhbWluZSBjb21tYW5kIHdvcmQsIGxvb2tpbmcgZm9yIGZtb3ZlJ3MKKwlhbmR3CSMweDNiLCVkMAorCWJlcQltb3ZlX3VucGFjawl8c3BlY2lhbCBoYW5kbGluZyBmb3IgZm1vdmU6IG11c3Qgc2V0IEZQU1JfQ0MKKworCW1vdmV3CUVURU1QKCVhNiksJWQwCXxnZXQgd29yZCB3aXRoIGluZiBpbmZvcm1hdGlvbgorCWJmZXh0dQklZDB7IzIwOiMxMn0sJWQxCXxnZXQgZXhwb25lbnQgaW50byBkMQorCWNtcGl3CSMweDBmZmYsJWQxCXx0ZXN0IGZvciBpbmYgb3IgTmFOCisJYm5lcwl0cnlfemVybwl8aWYgbm90IGVxdWFsLCBpdCBpcyBub3Qgc3BlY2lhbAorCWJmZXh0dQklZDB7IzE3OiMzfSwlZDEJfGdldCBTRSBhbmQgeSBiaXRzIGludG8gZDEKKwljbXBpdwkjNywlZDEJCXxTRSBhbmQgeSBiaXRzIG11c3QgYmUgb24gZm9yIHNwZWNpYWwKKwlibmVzCXRyeV96ZXJvCXxpZiBub3Qgb24sIGl0IGlzIG5vdCBzcGVjaWFsCit8aW5wdXQgaXMgb2YgdGhlIHNwZWNpYWwgY2FzZXMgb2YgaW5mIGFuZCBOYU4KKwl0c3RsCUVURU1QX0hJKCVhNikJfGNoZWNrIG1zIG1hbnRpc3NhCisJYm5lcwlmaXhfbmFuCQl8aWYgbm9uLXplcm8sIGl0IGlzIGEgTmFOCisJdHN0bAlFVEVNUF9MTyglYTYpCXxjaGVjayBscyBtYW50aXNzYQorCWJuZXMJZml4X25hbgkJfGlmIG5vbi16ZXJvLCBpdCBpcyBhIE5hTgorCWJyYQlmaW5pc2gJCXxzcGVjaWFsIGFscmVhZHkgb24gc3RhY2sKK2ZpeF9uYW46CisJYnRzdGIJI3NpZ25hbl9iaXQsRVRFTVBfSEkoJWE2KSB8dGVzdCBmb3Igc25hbgorCWJuZQlmaW5pc2gKKwlvcmwJI3NuYW5pb3BfbWFzayxVU0VSX0ZQU1IoJWE2KSB8YWx3YXlzIHNldCBzbmFuIGlmIGl0IGlzIHNvCisJYnJhCWZpbmlzaAordHJ5X3plcm86CisJbW92ZXcJRVRFTVBfRVgrMiglYTYpLCVkMCB8Z2V0IHdvcmQgNAorCWFuZGl3CSMweDAwMGYsJWQwCXxjbGVhciBhbGwgYnV0IGxhc3QgbmkoeSliYmxlCisJdHN0dwklZDAJCXxjaGVjayBmb3IgemVyby4KKwlibmUJbm90X3NwZWMKKwl0c3RsCUVURU1QX0hJKCVhNikJfGNoZWNrIHdvcmRzIDMgYW5kIDIKKwlibmUJbm90X3NwZWMKKwl0c3RsCUVURU1QX0xPKCVhNikJfGNoZWNrIHdvcmRzIDEgYW5kIDAKKwlibmUJbm90X3NwZWMKKwl0c3RsCUVURU1QKCVhNikJfHRlc3Qgc2lnbiBvZiB0aGUgemVybworCWJnZXMJcG9zX3plcm8KKwltb3ZlbAkjMHg4MDAwMDAwMCxFVEVNUCglYTYpIHx3cml0ZSBuZWcgemVybyB0byBldGVtcAorCWNscmwJRVRFTVBfSEkoJWE2KQorCWNscmwJRVRFTVBfTE8oJWE2KQorCWJyYQlmaW5pc2gKK3Bvc196ZXJvOgorCWNscmwJRVRFTVAoJWE2KQorCWNscmwJRVRFTVBfSEkoJWE2KQorCWNscmwJRVRFTVBfTE8oJWE2KQorCWJyYQlmaW5pc2gKKworbm90X3NwZWM6CisJZm1vdmVteCAlZnAwLSVmcDEsLSglYTcpCXxzYXZlIGZwMCAtIGRlY2JpbiByZXR1cm5zIGluIGl0CisJYnNyCWRlY2JpbgorCWZtb3ZleCAlZnAwLEVURU1QKCVhNikJfHB1dCB0aGUgdW5wYWNrZWQgc29wIGluIHRoZSBmc2F2ZSBzdGFjaworCWZtb3ZlbXggKCVhNykrLCVmcDAtJWZwMQorCWZtb3ZlbAkjMCwlRlBTUgkJfGNsciBmcHNyIGZyb20gZGVjYmluCisJYnJhCWZpbmlzaAorCit8Cit8IFNwZWNpYWwgaGFuZGxpbmcgZm9yIHBhY2tlZCBtb3ZlIGluOiAgU2FtZSByZXN1bHRzIGFzIGFsbCBvdGhlcgorfCBwYWNrZWQgY2FzZXMsIGJ1dCB3ZSBtdXN0IHNldCB0aGUgRlBTUiBjb25kaXRpb24gY29kZXMgcHJvcGVybHkuCit8Cittb3ZlX3VucGFjazoKKwltb3ZldwlFVEVNUCglYTYpLCVkMAl8Z2V0IHdvcmQgd2l0aCBpbmYgaW5mb3JtYXRpb24KKwliZmV4dHUJJWQweyMyMDojMTJ9LCVkMQl8Z2V0IGV4cG9uZW50IGludG8gZDEKKwljbXBpdwkjMHgwZmZmLCVkMQl8dGVzdCBmb3IgaW5mIG9yIE5hTgorCWJuZXMJbXRyeV96ZXJvCXxpZiBub3QgZXF1YWwsIGl0IGlzIG5vdCBzcGVjaWFsCisJYmZleHR1CSVkMHsjMTc6IzN9LCVkMQl8Z2V0IFNFIGFuZCB5IGJpdHMgaW50byBkMQorCWNtcGl3CSM3LCVkMQkJfFNFIGFuZCB5IGJpdHMgbXVzdCBiZSBvbiBmb3Igc3BlY2lhbAorCWJuZXMJbXRyeV96ZXJvCXxpZiBub3Qgb24sIGl0IGlzIG5vdCBzcGVjaWFsCit8aW5wdXQgaXMgb2YgdGhlIHNwZWNpYWwgY2FzZXMgb2YgaW5mIGFuZCBOYU4KKwl0c3RsCUVURU1QX0hJKCVhNikJfGNoZWNrIG1zIG1hbnRpc3NhCisJYm5lcwltZml4X25hbgkJfGlmIG5vbi16ZXJvLCBpdCBpcyBhIE5hTgorCXRzdGwJRVRFTVBfTE8oJWE2KQl8Y2hlY2sgbHMgbWFudGlzc2EKKwlibmVzCW1maXhfbmFuCQl8aWYgbm9uLXplcm8sIGl0IGlzIGEgTmFOCit8aW5wdXQgaXMgaW5mCisJb3JsCSNpbmZfbWFzayxVU0VSX0ZQU1IoJWE2KSB8c2V0IEkgYml0CisJdHN0bAlFVEVNUCglYTYpCXxjaGVjayBzaWduCisJYmdlCWZpbmlzaAorCW9ybAkjbmVnX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBOIGJpdAorCWJyYQlmaW5pc2gJCXxzcGVjaWFsIGFscmVhZHkgb24gc3RhY2sKK21maXhfbmFuOgorCW9ybAkjbmFuX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBOYU4gYml0CisJbW92ZWIJI25hbl90YWcsU1RBRyglYTYpCXxzZXQgc3RhZyB0byBOYU4KKwlidHN0Ygkjc2lnbmFuX2JpdCxFVEVNUF9ISSglYTYpIHx0ZXN0IGZvciBzbmFuCisJYm5lcwltbl9zbmFuCisJb3JsCSNzbmFuaW9wX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBzbmFuIGJpdAorCWJ0c3RiCSNzbmFuX2JpdCxGUENSX0VOQUJMRSglYTYpIHx0ZXN0IGZvciBzbmFuIGVuYWJsZWQKKwlibmVzCW1uX3NuYW4KKwlic2V0Ygkjc2lnbmFuX2JpdCxFVEVNUF9ISSglYTYpIHxmb3JjZSBzbmFucyB0byBxbmFucworbW5fc25hbjoKKwl0c3RsCUVURU1QKCVhNikJfGNoZWNrIGZvciBzaWduCisJYmdlCWZpbmlzaAkJfGlmIGNsciwgZ28gb24KKwlvcmwJI25lZ19tYXNrLFVTRVJfRlBTUiglYTYpIHxzZXQgTiBiaXQKKwlicmEJZmluaXNoCisKK210cnlfemVybzoKKwltb3ZldwlFVEVNUF9FWCsyKCVhNiksJWQwIHxnZXQgd29yZCA0CisJYW5kaXcJIzB4MDAwZiwlZDAJfGNsZWFyIGFsbCBidXQgbGFzdCBuaSh5KWJibGUKKwl0c3R3CSVkMAkJfGNoZWNrIGZvciB6ZXJvLgorCWJuZXMJbW5vdF9zcGVjCisJdHN0bAlFVEVNUF9ISSglYTYpCXxjaGVjayB3b3JkcyAzIGFuZCAyCisJYm5lcwltbm90X3NwZWMKKwl0c3RsCUVURU1QX0xPKCVhNikJfGNoZWNrIHdvcmRzIDEgYW5kIDAKKwlibmVzCW1ub3Rfc3BlYworCXRzdGwJRVRFTVAoJWE2KQl8dGVzdCBzaWduIG9mIHRoZSB6ZXJvCisJYmdlcwltcG9zX3plcm8KKwlvcmwJI25lZ19tYXNrK3pfbWFzayxVU0VSX0ZQU1IoJWE2KSB8c2V0IE4gYW5kIFoKKwltb3ZlbAkjMHg4MDAwMDAwMCxFVEVNUCglYTYpIHx3cml0ZSBuZWcgemVybyB0byBldGVtcAorCWNscmwJRVRFTVBfSEkoJWE2KQorCWNscmwJRVRFTVBfTE8oJWE2KQorCWJyYXMJZmluaXNoCittcG9zX3plcm86CisJb3JsCSN6X21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBaCisJY2xybAlFVEVNUCglYTYpCisJY2xybAlFVEVNUF9ISSglYTYpCisJY2xybAlFVEVNUF9MTyglYTYpCisJYnJhcwlmaW5pc2gKKworbW5vdF9zcGVjOgorCWZtb3ZlbXggJWZwMC0lZnAxLC0oJWE3KQl8c2F2ZSBmcDAgLGZwMSAtIGRlY2JpbiByZXR1cm5zIGluIGZwMAorCWJzcglkZWNiaW4KKwlmbW92ZXggJWZwMCxFVEVNUCglYTYpCit8CQkJCTtwdXQgdGhlIHVucGFja2VkIHNvcCBpbiB0aGUgZnNhdmUgc3RhY2sKKwlmbW92ZW14ICglYTcpKywlZnAwLSVmcDEKKworZmluaXNoOgorCW1vdmV3CUNNRFJFRzFCKCVhNiksJWQwCXxnZXQgdGhlIGNvbW1hbmQgd29yZAorCWFuZHcJIzB4ZmJmZiwlZDAJfGNoYW5nZSB0aGUgc291cmNlIHNwZWNpZmllciBmaWVsZCB0bworfAkJCQk7ZXh0ZW5kZWQgKHdhcyBwYWNrZWQpLgorCW1vdmV3CSVkMCxDTURSRUcxQiglYTYpCXx3cml0ZSBjb21tYW5kIHdvcmQgYmFjayB0byBmc2F2ZSBzdGFjaworfAkJCQk7d2UgbmVlZCB0byBkbyB0aGlzIHNvIHRoZSAwNDAgd2lsbAorfAkJCQk7cmUtZXhlY3V0ZSB0aGUgaW5zdC4gd2l0aG91dCB0YWtpbmcKK3wJCQkJO2Fub3RoZXIgcGFja2VkIHRyYXAuCisKK2ZpeF9zdGFnOgorfENvbnZlcnRlZCByZXN1bHQgaXMgbm93IGluIGV0ZW1wIG9uIGZzYXZlIHN0YWNrLCBub3cgc2V0IHRoZSBzb3VyY2UKK3x0YWcgKHN0YWcpCit8CWlmIChldGUgPSQ3ZmZmKSB0aGVuIElORiBvciBOQU4KK3wJCWlmIChldGVtcCA9ICR4LjAtLS0tMCkgdGhlbgorfAkJCXN0YWcgPSBJTkYKK3wJCWVsc2UKK3wJCQlzdGFnID0gTkFOCit8CWVsc2UKK3wJCWlmIChldGUgPSAkMDAwMCkgdGhlbgorfAkJCXN0YWcgPSBaRVJPCit8CQllbHNlCit8CQkJc3RhZyA9IE5PUk0KK3wKK3wgTm90ZSBhbHNvIHRoYXQgdGhlIGV0ZW1wXzE1IGJpdCAoanVzdCByaWdodCBvZiB0aGUgc3RhZykgbXVzdAorfCBiZSBzZXQgYWNjb3JkaW5nbHkuCit8CisJbW92ZXcJCUVURU1QX0VYKCVhNiksJWQxCisJYW5kaXcJCSMweDdmZmYsJWQxICAgfHN0cmlwIHNpZ24KKwljbXB3CQkjMHg3ZmZmLCVkMQorCWJuZXMJCXpfb3JfbnJtCisJbW92ZWwJCUVURU1QX0hJKCVhNiksJWQxCisJYm5lcwkJaXNfbmFuCisJbW92ZWwJCUVURU1QX0xPKCVhNiksJWQxCisJYm5lcwkJaXNfbmFuCitpc19pbmY6CisJbW92ZWIJCSMweDQwLFNUQUcoJWE2KQorCW1vdmVsCQkjMHg0MCwlZDAKKwlydHMKK2lzX25hbjoKKwltb3ZlYgkJIzB4NjAsU1RBRyglYTYpCisJbW92ZWwJCSMweDYwLCVkMAorCXJ0cworel9vcl9ucm06CisJdHN0dwkJJWQxCisJYm5lcwkJaXNfbnJtCitpc196cm86Cit8IEZvciBhIHplcm8sIHNldCBldGVtcF8xNQorCW1vdmViCQkjMHgzMCxTVEFHKCVhNikKKwltb3ZlbAkJIzB4MjAsJWQwCisJcnRzCitpc19ucm06Cit8IEZvciBhIG5vcm0sIGNoZWNrIGlmIHRoZSBleHAgPD0gJDNmZmY7IGlmIHNvLCBzZXQgZXRlbXBfMTUKKwljbXBpdwkJIzB4M2ZmZiwlZDEKKwlibGVzCQlzZXRfYml0MTUKKwltb3ZlYgkJIzAsU1RBRyglYTYpCisJYnJhcwkJZW5kX2lzX25ybQorc2V0X2JpdDE1OgorCW1vdmViCQkjMHgxMCxTVEFHKCVhNikKK2VuZF9pc19ucm06CisJbW92ZWwJCSMwLCVkMAorZW5kX2ZpeDoKKwlydHMKKworZW5kX2dldDoKKwlydHMKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9rZXJuZWxfZXguUyBiL2FyY2gvbTY4ay9mcHNwMDQwL2tlcm5lbF9leC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NmI3MTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC9rZXJuZWxfZXguUwpAQCAtMCwwICsxLDQ5NCBAQAorfAorfAlrZXJuZWxfZXguc2EgMy4zIDEyLzE5LzkwCit8Cit8IFRoaXMgZmlsZSBjb250YWlucyByb3V0aW5lcyB0byBmb3JjZSBleGNlcHRpb24gc3RhdHVzIGluIHRoZQorfCBmcHUgZm9yIGV4Y2VwdGlvbmFsIGNhc2VzIGRldGVjdGVkIG9yIHJlcG9ydGVkIHdpdGhpbiB0aGUKK3wgdHJhbnNjZW5kZW50YWwgZnVuY3Rpb25zLiAgVHlwaWNhbGx5LCB0aGUgdF94eCByb3V0aW5lIHdpbGwKK3wgc2V0IHRoZSBhcHByb3ByaWF0ZSBiaXRzIGluIHRoZSBVU0VSX0ZQU1Igd29yZCBvbiB0aGUgc3RhY2suCit8IFRoZSBiaXRzIGFyZSB0ZXN0ZWQgaW4gZ2VuX2V4Y2VwdC5zYSB0byBkZXRlcm1pbmUgaWYgYW4gZXhjZXB0aW9uYWwKK3wgc2l0dWF0aW9uIG5lZWRzIHRvIGJlIGNyZWF0ZWQgb24gcmV0dXJuIGZyb20gdGhlIEZQU1AuCit8CisKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK0tFUk5FTF9FWDogICAgfGlkbnQgICAgMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uICAgIDgKKworI2luY2x1ZGUgImZwc3AuaCIKKworbW5zX2luZjogIC5sb25nIDB4ZmZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCitwbHNfaW5mOiAgLmxvbmcgMHg3ZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK25hbjogICAgICAubG9uZyAweDdmZmYwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZmZmZgoraHVnZTogICAgIC5sb25nIDB4N2ZmZTAwMDAsMHhmZmZmZmZmZiwweGZmZmZmZmZmCisKKwl8eHJlZgkgIG92Zl9yX2sKKwl8eHJlZgkgIHVuZl9zdWIKKwl8eHJlZgkgIG5ybV9zZXQKKworCS5nbG9iYWwJICB0X2R6CisJLmdsb2JhbCAgICAgIHRfZHoyCisJLmdsb2JhbCAgICAgIHRfb3BlcnIKKwkuZ2xvYmFsICAgICAgdF91bmZsCisJLmdsb2JhbCAgICAgIHRfb3ZmbAorCS5nbG9iYWwgICAgICB0X292ZmwyCisJLmdsb2JhbCAgICAgIHRfaW54MgorCS5nbG9iYWwJICB0X2ZyY2lueAorCS5nbG9iYWwJICB0X2V4dGRucm0KKwkuZ2xvYmFsCSAgdF9yZXNkbnJtCisJLmdsb2JhbAkgIGRzdF9uYW4KKwkuZ2xvYmFsCSAgc3JjX25hbgorfAorfAlEWiBleGNlcHRpb24KK3wKK3wKK3wJaWYgZHogdHJhcCBkaXNhYmxlZAorfAkJc3RvcmUgcHJvcGVybHkgc2lnbmVkIGluZiAodXNlIHNpZ24gb2YgZXRlbXApIGludG8gZnAwCit8CQlzZXQgRlBTUiBleGNlcHRpb24gc3RhdHVzIGR6IGJpdCwgY29uZGl0aW9uIGNvZGUKK3wJCWluZiBiaXQsIGFuZCBhY2NydWVkIGR6IGJpdAorfAkJcmV0dXJuCit8CQlmcmVzdG9yZSB0aGUgZnJhbWUgaW50byB0aGUgbWFjaGluZSAoZG9uZSBieSB1bmltcF9oZCkKK3wKK3wJZWxzZSBkeiB0cmFwIGVuYWJsZWQKK3wJCXNldCBleGNlcHRpb24gc3RhdHVzIGJpdCAmIGFjY3J1ZWQgYml0cyBpbiBGUFNSCit8CQlzZXQgZmxhZyB0byBkaXNhYmxlIHN0b19yZXMgZnJvbSBjb3JydXB0aW5nIGZwIHJlZ2lzdGVyCit8CQlyZXR1cm4KK3wJCWZyZXN0b3JlIHRoZSBmcmFtZSBpbnRvIHRoZSBtYWNoaW5lIChkb25lIGJ5IHVuaW1wX2hkKQorfAorfCB0X2R6MiBpcyB1c2VkIGJ5IG1vbmFkaWMgZnVuY3Rpb25zIHN1Y2ggYXMgZmxvZ24gKGZyb20gZG9fZnVuYykuCit8IHRfZHogaXMgdXNlZCBieSBtb25hZGljIGZ1bmN0aW9ucyBzdWNoIGFzIHNhdGFuaCAoZnJvbSB0aGUKK3wgdHJhbnNjZW5kZW50YWwgZnVuY3Rpb24pLgorfAordF9kejI6CisJYnNldGIJI25lZ19iaXQsRlBTUl9DQyglYTYpCXxzZXQgbmVnIGJpdCBpbiBGUFNSCisJZm1vdmVsCSMwLCVGUFNSCQkJfGNsciBzdGF0dXMgYml0cyAoWiBzZXQpCisJYnRzdGIJI2R6X2JpdCxGUENSX0VOQUJMRSglYTYpCXx0ZXN0IEZQQ1IgZm9yIGR6IGV4YyBlbmFibGVkCisJYm5lcwlkel9lbmFfZW5kCisJYnJhcwltX2luZgkJCXxmbG9neCBhbHdheXMgcmV0dXJucyAtaW5mCit0X2R6OgorCWZtb3ZlbAkjMCwlRlBTUgkJCXxjbHIgc3RhdHVzIGJpdHMgKFogc2V0KQorCWJ0c3RiCSNkel9iaXQsRlBDUl9FTkFCTEUoJWE2KQl8dGVzdCBGUENSIGZvciBkeiBleGMgZW5hYmxlZAorCWJuZXMJZHpfZW5hCit8Cit8CWR6IGRpc2FibGVkCit8CisJYnRzdGIJI3NpZ25fYml0LEVURU1QX0VYKCVhNikJfGNoZWNrIHNpZ24gZm9yIG5lZyBvciBwb3MKKwliZXFzCXBfaW5mCQkJfGJyYW5jaCBpZiBwb3Mgc2lnbgorCittX2luZjoKKwlmbW92ZW14IG1uc19pbmYsJWZwMC0lZnAwCQl8bG9hZCAtaW5mCisJYnNldGIJI25lZ19iaXQsRlBTUl9DQyglYTYpCXxzZXQgbmVnIGJpdCBpbiBGUFNSCisJYnJhcwlzZXRfZnBzcgorcF9pbmY6CisJZm1vdmVteCBwbHNfaW5mLCVmcDAtJWZwMAkJfGxvYWQgK2luZgorc2V0X2Zwc3I6CisJb3JsCSNkemluZl9tYXNrLFVTRVJfRlBTUiglYTYpIHxzZXQgSSxEWixBRFoKKwlydHMKK3wKK3wJZHogZW5hYmxlZAorfAorZHpfZW5hOgorCWJ0c3RiCSNzaWduX2JpdCxFVEVNUF9FWCglYTYpCXxjaGVjayBzaWduIGZvciBuZWcgb3IgcG9zCisJYmVxcwlkel9lbmFfZW5kCisJYnNldGIJI25lZ19iaXQsRlBTUl9DQyglYTYpCXxzZXQgbmVnIGJpdCBpbiBGUFNSCitkel9lbmFfZW5kOgorCW9ybAkjZHppbmZfbWFzayxVU0VSX0ZQU1IoJWE2KSB8c2V0IEksRFosQURaCisJc3QJU1RPUkVfRkxHKCVhNikKKwlydHMKK3wKK3wJT1BFUlIgZXhjZXB0aW9uCit8Cit8CWlmIChvcGVyciB0cmFwIGRpc2FibGVkKQorfAkJc2V0IEZQU1IgZXhjZXB0aW9uIHN0YXR1cyBvcGVyciBiaXQsIGNvbmRpdGlvbiBjb2RlCit8CQluYW4gYml0OyBTdG9yZSBkZWZhdWx0IE5BTiBpbnRvIGZwMAorfAkJZnJlc3RvcmUgdGhlIGZyYW1lIGludG8gdGhlIG1hY2hpbmUgKGRvbmUgYnkgdW5pbXBfaGQpCit8Cit8CWVsc2UgKG9wZXJyIHRyYXAgZW5hYmxlZCkKK3wJCXNldCBGUFNSIGV4Y2VwdGlvbiBzdGF0dXMgb3BlcnIgYml0LCBhY2NydWVkIG9wZXJyIGJpdAorfAkJc2V0IGZsYWcgdG8gZGlzYWJsZSBzdG9fcmVzIGZyb20gY29ycnVwdGluZyBmcCByZWdpc3RlcgorfAkJZnJlc3RvcmUgdGhlIGZyYW1lIGludG8gdGhlIG1hY2hpbmUgKGRvbmUgYnkgdW5pbXBfaGQpCit8Cit0X29wZXJyOgorCW9ybAkjb3BuYW5fbWFzayxVU0VSX0ZQU1IoJWE2KSB8c2V0IE5hTiwgT1BFUlIsIEFJT1AKKworCWJ0c3RiCSNvcGVycl9iaXQsRlBDUl9FTkFCTEUoJWE2KSB8dGVzdCBGUENSIGZvciBvcGVyciBlbmFibGVkCisJYm5lcwlvcF9lbmEKKworCWZtb3ZlbXggbmFuLCVmcDAtJWZwMAkJfGxvYWQgZGVmYXVsdCBuYW4KKwlydHMKK29wX2VuYToKKwlzdAlTVE9SRV9GTEcoJWE2KQkJfGRvIG5vdCBjb3JydXB0IGRlc3RpbmF0aW9uCisJcnRzCisKK3wKK3wJdF91bmZsIC0tLSBVTkZMIGV4Y2VwdGlvbgorfAorfCBUaGlzIGVudHJ5IHBvaW50IGlzIHVzZWQgYnkgYWxsIHJvdXRpbmVzIHJlcXVpcmluZyB1bmZsLCBpbmV4MiwKK3wgYXVuZmwsIGFuZCBhaW5leCB0byBiZSBzZXQgb24gZXhpdC4KK3wKK3wgT24gZW50cnksIGEwIHBvaW50cyB0byB0aGUgZXhjZXB0aW9uYWwgb3BlcmFuZC4gIFRoZSBmaW5hbCBleGNlcHRpb25hbAorfCBvcGVyYW5kIGlzIGJ1aWx0IGluIEZQX1NDUjEgYW5kIG9ubHkgdGhlIHNpZ24gZnJvbSB0aGUgb3JpZ2luYWwgb3BlcmFuZAorfCBpcyB1c2VkLgorfAordF91bmZsOgorCWNscmwJRlBfU0NSMSglYTYpCQl8c2V0IGV4Y2VwdGlvbmFsIG9wZXJhbmQgdG8gemVybworCWNscmwJRlBfU0NSMSs0KCVhNikKKwljbHJsCUZQX1NDUjErOCglYTYpCisJdHN0YgkoJWEwKQkJCXxleHRyYWN0IHNpZ24gZnJvbSBjYWxsZXIncyBleG9wCisJYnBscwl1bmZsX3NpZ25vaworCWJzZXQJI3NpZ25fYml0LEZQX1NDUjEoJWE2KQordW5mbF9zaWdub2s6CisJbGVhbAlGUF9TQ1IxKCVhNiksJWEwCisJb3JsCSN1bmZpbnhfbWFzayxVU0VSX0ZQU1IoJWE2KQorfAkJCQkJO3NldCBVTkZMLCBJTkVYMiwgQVVORkwsIEFJTkVYCit1bmZsX2NvbjoKKwlidHN0YgkjdW5mbF9iaXQsRlBDUl9FTkFCTEUoJWE2KQorCWJlcXMJdW5mbF9kaXMKKwordW5mbF9lbmE6CisJYmZjbHIJU1RBRyglYTYpeyM1OiMzfQkJfGNsZWFyIHdidG02Nix3YnRtMSx3YnRtMAorCWJzZXRiCSN3YnRlbXAxNV9iaXQsV0JfQllURSglYTYpIHxzZXQgd2J0ZW1wMTUKKwlic2V0Ygkjc3RpY2t5X2JpdCxTVElDS1koJWE2KQl8c2V0IHN0aWNreSBiaXQKKworCWJjbHJiCSNFMSxFX0JZVEUoJWE2KQorCit1bmZsX2RpczoKKwliZmV4dHUJRlBDUl9NT0RFKCVhNil7IzA6IzJ9LCVkMAl8Z2V0IHJvdW5kIHByZWNpc2lvbgorCisJYmNscmIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKKwlzbmUJTE9DQUxfU0dOKCVhMCkJCXxjb252ZXJ0IHRvIGludGVybmFsIGV4dCBmb3JtYXQKKworCWJzcgl1bmZfc3ViCQkJfHJldHVybnMgSUVFRSByZXN1bHQgYXQgYTAKK3wJCQkJCTthbmQgc2V0cyBGUFNSX0NDIGFjY29yZGluZ2x5CisKKwliZmNscglMT0NBTF9TR04oJWEwKXsjMDojOH0JfGNvbnZlcnQgYmFjayB0byBJRUVFIGV4dCBmb3JtYXQKKwliZXFzCXVuZmxfZmluCisKKwlic2V0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCWJzZXRiCSNzaWduX2JpdCxGUF9TQ1IxKCVhNikJfHNldCBzaWduIGJpdCBvZiBleGMgb3BlcmFuZAorCit1bmZsX2ZpbjoKKwlmbW92ZW14ICglYTApLCVmcDAtJWZwMAkJfHN0b3JlIHJlc3VsdCBpbiBmcDAKKwlydHMKKworCit8Cit8CXRfb3ZmbDIgLS0tIE9WRkwgZXhjZXB0aW9uICh3aXRob3V0IGluZXgyIHJldHVybmVkKQorfAorfCBUaGlzIGVudHJ5IGlzIHVzZWQgYnkgc2NhbGUgdG8gZm9yY2UgY2F0YXN0cm9waGljIG92ZXJmbG93LiAgVGhlCit8IG92ZmwsIGFvdmZsLCBhbmQgYWluZXggYml0cyBhcmUgc2V0LCBidXQgbm90IHRoZSBpbmV4MiBiaXQuCit8Cit0X292ZmwyOgorCW9ybAkjb3ZmbF9pbnhfbWFzayxVU0VSX0ZQU1IoJWE2KQorCW1vdmVsCUVURU1QKCVhNiksRlBfU0NSMSglYTYpCisJbW92ZWwJRVRFTVBfSEkoJWE2KSxGUF9TQ1IxKzQoJWE2KQorCW1vdmVsCUVURU1QX0xPKCVhNiksRlBfU0NSMSs4KCVhNikKK3wKK3wgQ2hlY2sgZm9yIHNpbmdsZSBvciBkb3VibGUgcm91bmQgcHJlY2lzaW9uLiAgSWYgc2luZ2xlLCBjaGVjayBpZgorfCB0aGUgbG93ZXIgNDAgYml0cyBvZiBFVEVNUCBhcmUgemVybzsgaWYgbm90LCBzZXQgaW5leDIuICBJZiBkb3VibGUsCit8IGNoZWNrIGlmIHRoZSBsb3dlciAyMSBiaXRzIGFyZSB6ZXJvOyBpZiBub3QsIHNldCBpbmV4Mi4KK3wKKwltb3ZlYglGUENSX01PREUoJWE2KSwlZDAKKwlhbmRpYgkjMHhjMCwlZDAKKwliZXEJdF93b3JrCQl8aWYgZXh0ZW5kZWQsIGZpbmlzaCBvdmZsIHByb2Nlc3NpbmcKKwljbXBpYgkjMHg0MCwlZDAJCXx0ZXN0IGZvciBzaW5nbGUKKwlibmVzCXRfZGJsCit0X3NnbDoKKwl0c3RiCUVURU1QX0xPKCVhNikKKwlibmVzCXRfc2V0aW54MgorCW1vdmVsCUVURU1QX0hJKCVhNiksJWQwCisJYW5kaWwJIzB4ZmYsJWQwCQl8bG9vayBhdCBvbmx5IGxvd2VyIDggYml0cworCWJuZXMJdF9zZXRpbngyCisJYnJhCXRfd29yawordF9kYmw6CisJbW92ZWwJRVRFTVBfTE8oJWE2KSwlZDAKKwlhbmRpbAkjMHg3ZmYsJWQwCXxsb29rIGF0IG9ubHkgbG93ZXIgMTEgYml0cworCWJlcQl0X3dvcmsKK3Rfc2V0aW54MjoKKwlvcmwJI2luZXgyX21hc2ssVVNFUl9GUFNSKCVhNikKKwlicmFzCXRfd29yaworfAorfAl0X292ZmwgLS0tIE9WRkwgZXhjZXB0aW9uCit8Cit8KiogTm90ZTogdGhlIGV4YyBvcGVyYW5kIGlzIHJldHVybmVkIGluIEVURU1QLgorfAordF9vdmZsOgorCW9ybAkjb3ZmaW54X21hc2ssVVNFUl9GUFNSKCVhNikKK3Rfd29yazoKKwlidHN0Ygkjb3ZmbF9iaXQsRlBDUl9FTkFCTEUoJWE2KSB8dGVzdCBGUENSIGZvciBvdmZsIGVuYWJsZWQKKwliZXFzCW92Zl9kaXMKKworb3ZmX2VuYToKKwljbHJsCUZQX1NDUjEoJWE2KQkJfHNldCBleGNlcHRpb25hbCBvcGVyYW5kCisJY2xybAlGUF9TQ1IxKzQoJWE2KQorCWNscmwJRlBfU0NSMSs4KCVhNikKKworCWJmY2xyCVNUQUcoJWE2KXsjNTojM30JCXxjbGVhciB3YnRtNjYsd2J0bTEsd2J0bTAKKwliY2xyYgkjd2J0ZW1wMTVfYml0LFdCX0JZVEUoJWE2KSB8Y2xlYXIgd2J0ZW1wMTUKKwlic2V0Ygkjc3RpY2t5X2JpdCxTVElDS1koJWE2KQl8c2V0IHN0aWNreSBiaXQKKworCWJjbHJiCSNFMSxFX0JZVEUoJWE2KQorfAkJCQkJO2ZhbGwgdGhyb3VnaCB0byBkaXNhYmxlZCBjYXNlCisKK3wgRm9yIGRpc2FibGVkIG92ZXJmbG93IGNhbGwgJ292Zl9yX2snLiAgVGhpcyByb3V0aW5lIGxvYWRzIHRoZQorfCBjb3JyZWN0IHJlc3VsdCBiYXNlZCBvbiB0aGUgcm91bmRpbmcgcHJlY2lzaW9uLCBkZXN0aW5hdGlvbgorfCBmb3JtYXQsIHJvdW5kaW5nIG1vZGUgYW5kIHNpZ24uCit8CitvdmZfZGlzOgorCWJzcglvdmZfcl9rCQkJfHJldHVybnMgdW5zaWduZWQgRVRFTVBfRVgKK3wJCQkJCTthbmQgc2V0cyBGUFNSX0NDIGFjY29yZGluZ2x5LgorCWJmY2xyCUVURU1QX1NHTiglYTYpeyMwOiM4fQl8Zml4IHNpZ24KKwliZXFzCW92Zl9wb3MKKwlic2V0Ygkjc2lnbl9iaXQsRVRFTVBfRVgoJWE2KQorCWJzZXRiCSNzaWduX2JpdCxGUF9TQ1IxKCVhNikJfHNldCBleGNlcHRpb25hbCBvcGVyYW5kIHNpZ24KK292Zl9wb3M6CisJZm1vdmVteCBFVEVNUCglYTYpLCVmcDAtJWZwMAkJfG1vdmUgdGhlIHJlc3VsdCB0byBmcDAKKwlydHMKKworCit8Cit8CUlORVgyIGV4Y2VwdGlvbgorfAorfCBUaGUgaW5leDIgYW5kIGFpbmV4IGJpdHMgYXJlIHNldC4KK3wKK3RfaW54MjoKKwlvcmwJI2lueDJhX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBJTkVYMiwgQUlORVgKKwlydHMKKworfAorfAlGb3JjZSBJbmV4MgorfAorfCBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSB0cmFuc2NlbmRlbnRhbCByb3V0aW5lcyB0byBmb3JjZQorfCB0aGUgaW5leDIgZXhjZXB0aW9uIGJpdHMgc2V0IGluIHRoZSBGUFNSLiAgSWYgdGhlIHVuZGVyZmxvdyBiaXQKK3wgaXMgc2V0LCBidXQgdGhlIHVuZGVyZmxvdyB0cmFwIHdhcyBub3QgdGFrZW4sIHRoZSBhdW5mbCBiaXQgaW4KK3wgdGhlIEZQU1IgbXVzdCBiZSBzZXQuCit8Cit0X2ZyY2lueDoKKwlvcmwJI2lueDJhX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBJTkVYMiwgQUlORVgKKwlidHN0YgkjdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSB8dGVzdCBmb3IgdW5mbCBiaXQgc2V0CisJYmVxcwlub191YWNjMQkJfGlmIGNsZWFyLCBkbyBub3Qgc2V0IGF1bmZsCisJYnNldGIJI2F1bmZsX2JpdCxGUFNSX0FFWENFUFQoJWE2KQorbm9fdWFjYzE6CisJcnRzCisKK3wKK3wJRFNUX05BTgorfAorfCBEZXRlcm1pbmUgaWYgdGhlIGRlc3RpbmF0aW9uIG5hbiBpcyBzaWduYWxsaW5nIG9yIG5vbi1zaWduYWxsaW5nLAorfCBhbmQgc2V0IHRoZSBGUFNSIGJpdHMgYWNjb3JkaW5nbHkuICBTZWUgdGhlIE1DNjgwNDAgVXNlcidzIE1hbnVhbAorfCBzZWN0aW9uIDMuMi4yLjUgTk9ULUEtTlVNQkVSUy4KK3wKK2RzdF9uYW46CisJYnRzdGIJI3NpZ25fYml0LEZQVEVNUF9FWCglYTYpIHx0ZXN0IHNpZ24gb2YgbmFuCisJYmVxcwlkc3RfcG9zCQkJfGlmIGNsciwgaXQgd2FzIHBvc2l0aXZlCisJYnNldGIJI25lZ19iaXQsRlBTUl9DQyglYTYpCXxzZXQgTiBiaXQKK2RzdF9wb3M6CisJYnRzdGIJI3NpZ25hbl9iaXQsRlBURU1QX0hJKCVhNikgfGNoZWNrIGlmIHNpZ25hbGxpbmcKKwliZXFzCWRzdF9zbmFuCQl8YnJhbmNoIGlmIHNpZ25hbGxpbmcKKworCWZtb3ZlbAklZDEsJWZwY3IJCQl8cmVzdG9yZSB1c2VyJ3Mgcm1vZGUvcHJlYworCWZtb3ZleCBGUFRFTVAoJWE2KSwlZnAwCQl8cmV0dXJuIHRoZSBub24tc2lnbmFsbGluZyBuYW4KK3wKK3wgQ2hlY2sgdGhlIHNvdXJjZSBuYW4uICBJZiBpdCBpcyBzaWduYWxsaW5nLCBzbmFuIHdpbGwgYmUgcmVwb3J0ZWQuCit8CisJbW92ZWIJU1RBRyglYTYpLCVkMAorCWFuZGliCSMweGUwLCVkMAorCWNtcGliCSMweDYwLCVkMAorCWJuZXMJbm9fc25hbgorCWJ0c3RiCSNzaWduYW5fYml0LEVURU1QX0hJKCVhNikgfGNoZWNrIGlmIHNpZ25hbGxpbmcKKwlibmVzCW5vX3NuYW4KKwlvcmwJI3NuYW5pb3BfbWFzayxVU0VSX0ZQU1IoJWE2KSB8c2V0IE5BTiwgU05BTiwgQUlPUAorbm9fc25hbjoKKwlydHMKKworZHN0X3NuYW46CisJYnRzdGIJI3NuYW5fYml0LEZQQ1JfRU5BQkxFKCVhNikgfGNoZWNrIGlmIHRyYXAgZW5hYmxlZAorCWJlcXMJZHN0X2RpcwkJCXxicmFuY2ggaWYgZGlzYWJsZWQKKworCW9yYgkjbmFuX3RhZyxEVEFHKCVhNikJfHNldCB1cCBkdGFnIGZvciBuYW4KKwlzdAlTVE9SRV9GTEcoJWE2KQkJfGRvIG5vdCBzdG9yZSBhIHJlc3VsdAorCW9ybAkjc25hbmlvcF9tYXNrLFVTRVJfRlBTUiglYTYpIHxzZXQgTkFOLCBTTkFOLCBBSU9QCisJcnRzCisKK2RzdF9kaXM6CisJYnNldGIJI3NpZ25hbl9iaXQsRlBURU1QX0hJKCVhNikgfHNldCBTTkFOIGJpdCBpbiBzb3AKKwlmbW92ZWwJJWQxLCVmcGNyCQkJfHJlc3RvcmUgdXNlcidzIHJtb2RlL3ByZWMKKwlmbW92ZXggRlBURU1QKCVhNiksJWZwMAkJfGxvYWQgbm9uLXNpZ24uIG5hbgorCW9ybAkjc25hbmlvcF9tYXNrLFVTRVJfRlBTUiglYTYpIHxzZXQgTkFOLCBTTkFOLCBBSU9QCisJcnRzCisKK3wKK3wJU1JDX05BTgorfAorfCBEZXRlcm1pbmUgaWYgdGhlIHNvdXJjZSBuYW4gaXMgc2lnbmFsbGluZyBvciBub24tc2lnbmFsbGluZywKK3wgYW5kIHNldCB0aGUgRlBTUiBiaXRzIGFjY29yZGluZ2x5LiAgU2VlIHRoZSBNQzY4MDQwIFVzZXIncyBNYW51YWwKK3wgc2VjdGlvbiAzLjIuMi41IE5PVC1BLU5VTUJFUlMuCit8CitzcmNfbmFuOgorCWJ0c3RiCSNzaWduX2JpdCxFVEVNUF9FWCglYTYpIHx0ZXN0IHNpZ24gb2YgbmFuCisJYmVxcwlzcmNfcG9zCQkJfGlmIGNsciwgaXQgd2FzIHBvc2l0aXZlCisJYnNldGIJI25lZ19iaXQsRlBTUl9DQyglYTYpCXxzZXQgTiBiaXQKK3NyY19wb3M6CisJYnRzdGIJI3NpZ25hbl9iaXQsRVRFTVBfSEkoJWE2KSB8Y2hlY2sgaWYgc2lnbmFsbGluZworCWJlcXMJc3JjX3NuYW4JCXxicmFuY2ggaWYgc2lnbmFsbGluZworCWZtb3ZlbAklZDEsJWZwY3IJCQl8cmVzdG9yZSB1c2VyJ3Mgcm1vZGUvcHJlYworCWZtb3ZleCBFVEVNUCglYTYpLCVmcDAJCXxyZXR1cm4gdGhlIG5vbi1zaWduYWxsaW5nIG5hbgorCXJ0cworCitzcmNfc25hbjoKKwlidHN0Ygkjc25hbl9iaXQsRlBDUl9FTkFCTEUoJWE2KSB8Y2hlY2sgaWYgdHJhcCBlbmFibGVkCisJYmVxcwlzcmNfZGlzCQkJfGJyYW5jaCBpZiBkaXNhYmxlZAorCWJzZXRiCSNzaWduYW5fYml0LEVURU1QX0hJKCVhNikgfHNldCBTTkFOIGJpdCBpbiBzb3AKKwlvcmIJI25vcm1fdGFnLERUQUcoJWE2KQl8c2V0IHVwIGR0YWcgZm9yIG5vcm0KKwlvcmIJI25hbl90YWcsU1RBRyglYTYpCXxzZXQgdXAgc3RhZyBmb3IgbmFuCisJc3QJU1RPUkVfRkxHKCVhNikJCXxkbyBub3Qgc3RvcmUgYSByZXN1bHQKKwlvcmwJI3NuYW5pb3BfbWFzayxVU0VSX0ZQU1IoJWE2KSB8c2V0IE5BTiwgU05BTiwgQUlPUAorCXJ0cworCitzcmNfZGlzOgorCWJzZXRiCSNzaWduYW5fYml0LEVURU1QX0hJKCVhNikgfHNldCBTTkFOIGJpdCBpbiBzb3AKKwlmbW92ZWwJJWQxLCVmcGNyCQkJfHJlc3RvcmUgdXNlcidzIHJtb2RlL3ByZWMKKwlmbW92ZXggRVRFTVAoJWE2KSwlZnAwCQl8bG9hZCBub24tc2lnbi4gbmFuCisJb3JsCSNzbmFuaW9wX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBOQU4sIFNOQU4sIEFJT1AKKwlydHMKKworfAorfCBGb3IgYWxsIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYSBkZW5vcm1hbGl6ZWQgaW5wdXQgYW5kIHRoYXQgZih4KT14LAorfCB0aGlzIGlzIHRoZSBlbnRyeSBwb2ludAorfAordF9leHRkbnJtOgorCW9ybAkjdW5maW54X21hc2ssVVNFUl9GUFNSKCVhNikKK3wJCQkJCTtzZXQgVU5GTCwgSU5FWDIsIEFVTkZMLCBBSU5FWAorCWJyYXMJeGRucm1fY29uCit8Cit8IEVudHJ5IHBvaW50IGZvciBzY2FsZSB3aXRoIGV4dGVuZGVkIGRlbm9ybS4gIFRoZSBmdW5jdGlvbiBkb2VzCit8IG5vdCBzZXQgaW5leDIsIGF1bmZsLCBvciBhaW5leC4KK3wKK3RfcmVzZG5ybToKKwlvcmwJI3VuZmxfbWFzayxVU0VSX0ZQU1IoJWE2KQorCit4ZG5ybV9jb246CisJYnRzdGIJI3VuZmxfYml0LEZQQ1JfRU5BQkxFKCVhNikKKwliZXFzCXhkbnJtX2RpcworCit8Cit8IElmIGV4Y2VwdGlvbnMgYXJlIGVuYWJsZWQsIHRoZSBhZGRpdGlvbmFsIHRhc2sgb2Ygc2V0dGluZyB1cCBXQlRFTVAKK3wgaXMgbmVlZGVkIHNvIHRoYXQgd2hlbiB0aGUgdW5kZXJmbG93IGV4Y2VwdGlvbiBoYW5kbGVyIGlzIGVudGVyZWQsCit8IHRoZSB1c2VyIHBlcmNlaXZlcyBubyBkaWZmZXJlbmNlIGJldHdlZW4gd2hhdCB0aGUgMDQwIHByb3ZpZGVzIHZzLgorfCB3aGF0IHRoZSBGUFNQIHByb3ZpZGVzLgorfAoreGRucm1fZW5hOgorCW1vdmVsCSVhMCwtKCVhNykKKworCW1vdmVsCUxPQ0FMX0VYKCVhMCksRlBfU0NSMSglYTYpCisJbW92ZWwJTE9DQUxfSEkoJWEwKSxGUF9TQ1IxKzQoJWE2KQorCW1vdmVsCUxPQ0FMX0xPKCVhMCksRlBfU0NSMSs4KCVhNikKKworCWxlYQlGUF9TQ1IxKCVhNiksJWEwCisKKwliY2xyYgkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCXNuZQlMT0NBTF9TR04oJWEwKQkJfGNvbnZlcnQgdG8gaW50ZXJuYWwgZXh0IGZvcm1hdAorCXRzdHcJTE9DQUxfRVgoJWEwKQkJfGNoZWNrIGlmIGlucHV0IGlzIGRlbm9ybQorCWJlcXMJeGRucm1fZG4JCXxpZiBzbywgc2tpcCBucm1fc2V0CisJYnNyCW5ybV9zZXQJCQl8bm9ybWFsaXplIHRoZSByZXN1bHQgKGV4cG9uZW50Cit8CQkJCQk7d2lsbCBiZSBuZWdhdGl2ZQoreGRucm1fZG46CisJYmNscmIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkJfHRha2Ugb2ZmIGZhbHNlIHNpZ24KKwliZmNscglMT0NBTF9TR04oJWEwKXsjMDojOH0JfGNoYW5nZSBiYWNrIHRvIElFRUUgZXh0IGZvcm1hdAorCWJlcXMJeGRlcAorCWJzZXRiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCit4ZGVwOgorCWJmY2xyCVNUQUcoJWE2KXsjNTojM30JCXxjbGVhciB3YnRtNjYsd2J0bTEsd2J0bTAKKwlic2V0Ygkjd2J0ZW1wMTVfYml0LFdCX0JZVEUoJWE2KSB8c2V0IHdidGVtcDE1CisJYmNscmIJI3N0aWNreV9iaXQsU1RJQ0tZKCVhNikJfGNsZWFyIHN0aWNreSBiaXQKKwliY2xyYgkjRTEsRV9CWVRFKCVhNikKKwltb3ZlbAkoJWE3KSssJWEwCit4ZG5ybV9kaXM6CisJYmZleHR1CUZQQ1JfTU9ERSglYTYpeyMwOiMyfSwlZDAJfGdldCByb3VuZCBwcmVjaXNpb24KKwlibmVzCW5vdF9leHQJCQl8aWYgbm90IHJvdW5kIGV4dGVuZGVkLCBzdG9yZQorfAkJCQkJO0lFRUUgZGVmYXVsdHMKK2lzX2V4dDoKKwlidHN0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCWJlcXMJeGRucm1fc3RvcmUKKworCWJzZXRiCSNuZWdfYml0LEZQU1JfQ0MoJWE2KQl8c2V0IE4gYml0IGluIEZQU1JfQ0MKKworCWJyYXMJeGRucm1fc3RvcmUKKworbm90X2V4dDoKKwliY2xyYgkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCXNuZQlMT0NBTF9TR04oJWEwKQkJfGNvbnZlcnQgdG8gaW50ZXJuYWwgZXh0IGZvcm1hdAorCWJzcgl1bmZfc3ViCQkJfHJldHVybnMgSUVFRSByZXN1bHQgcG9pbnRlZCBieQorfAkJCQkJO2EwOyBzZXRzIEZQU1JfQ0MgYWNjb3JkaW5nbHkKKwliZmNscglMT0NBTF9TR04oJWEwKXsjMDojOH0JfGNvbnZlcnQgYmFjayB0byBJRUVFIGV4dCBmb3JtYXQKKwliZXFzCXhkbnJtX3N0b3JlCisJYnNldGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKK3hkbnJtX3N0b3JlOgorCWZtb3ZlbXggKCVhMCksJWZwMC0lZnAwCQl8c3RvcmUgcmVzdWx0IGluIGZwMAorCXJ0cworCit8Cit8IFRoaXMgc3Vicm91dGluZSBpcyB1c2VkIGZvciBkeWFkaWMgb3BlcmF0aW9ucyB0aGF0IHVzZSBhbiBleHRlbmRlZAorfCBkZW5vcm0gd2l0aGluIHRoZSBrZXJuZWwuIFRoZSBhcHByb2FjaCB1c2VkIGlzIHRvIGNhcHR1cmUgdGhlIGZyYW1lLAorfCBmaXgvcmVzdG9yZS4KK3wKKwkuZ2xvYmFsCXRfYXZvaWRfdW5zdXBwCit0X2F2b2lkX3Vuc3VwcDoKKwlsaW5rCSVhMiwjLUxPQ0FMX1NJWkUJCXxzbyB0aGF0IGEyIGZwc3AuaCBuZWdhdGl2ZQorfAkJCQkJO29mZnNldHMgbWF5IGJlIHVzZWQKKwlmc2F2ZQktKCVhNykKKwl0c3RiCTEoJWE3KQkJCXxjaGVjayBpZiBpZGxlLCBleGl0IGlmIHNvCisJYmVxCWlkbGVfZW5kCisJYnRzdGIJI0UxLEVfQllURSglYTIpCQl8Y2hlY2sgZm9yIGFuIEUxIGV4Y2VwdGlvbiBpZgorfAkJCQkJO2VuYWJsZWQsIHRoZXJlIGlzIGFuIHVuc3VwcAorCWJlcQllbmRfYXZ1bgkJfGVsc2UsIGV4aXQKKwlidHN0YgkjNyxEVEFHKCVhMikJCXxjaGVjayBmb3IgZGVub3JtIGRlc3RpbmF0aW9uCisJYmVxcwlzcmNfZGVuCQkJfGVsc2UsIG11c3QgYmUgYSBzb3VyY2UgZGVub3JtCit8Cit8IGhhbmRsZSBkZXN0aW5hdGlvbiBkZW5vcm0KK3wKKwlsZWEJRlBURU1QKCVhMiksJWEwCisJYnRzdGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKKwlzbmUJTE9DQUxfU0dOKCVhMCkJCXxjb252ZXJ0IHRvIGludGVybmFsIGV4dCBmb3JtYXQKKwliY2xyYgkjNyxEVEFHKCVhMikJCXxzZXQgRFRBRyB0byBub3JtCisJYnNyCW5ybV9zZXQJCQl8bm9ybWFsaXplIHJlc3VsdCwgZXhwb25lbnQKK3wJCQkJCTt3aWxsIGJlY29tZSBuZWdhdGl2ZQorCWJjbHJiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCXxnZXQgcmlkIG9mIGZha2Ugc2lnbgorCWJmY2xyCUxPQ0FMX1NHTiglYTApeyMwOiM4fQl8Y29udmVydCBiYWNrIHRvIElFRUUgZXh0IGZvcm1hdAorCWJlcXMJY2tfc3JjX2RlbgkJfGNoZWNrIGlmIHNvdXJjZSBpcyBhbHNvIGRlbm9ybQorCWJzZXRiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCitja19zcmNfZGVuOgorCWJ0c3RiCSM3LFNUQUcoJWEyKQorCWJlcXMJZW5kX2F2dW4KK3NyY19kZW46CisJbGVhCUVURU1QKCVhMiksJWEwCisJYnRzdGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKKwlzbmUJTE9DQUxfU0dOKCVhMCkJCXxjb252ZXJ0IHRvIGludGVybmFsIGV4dCBmb3JtYXQKKwliY2xyYgkjNyxTVEFHKCVhMikJCXxzZXQgU1RBRyB0byBub3JtCisJYnNyCW5ybV9zZXQJCQl8bm9ybWFsaXplIHJlc3VsdCwgZXhwb25lbnQKK3wJCQkJCTt3aWxsIGJlY29tZSBuZWdhdGl2ZQorCWJjbHJiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCXxnZXQgcmlkIG9mIGZha2Ugc2lnbgorCWJmY2xyCUxPQ0FMX1NHTiglYTApeyMwOiM4fQl8Y29udmVydCBiYWNrIHRvIElFRUUgZXh0IGZvcm1hdAorCWJlcXMJZGVuX2NvbQorCWJzZXRiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCitkZW5fY29tOgorCW1vdmViCSMweGZlLENVX1NBVkVQQyglYTIpCXxzZXQgY29udGludWUgZnJhbWUKKwljbHJ3CU5NTkVYQyglYTIpCQl8Y2xlYXIgTk1ORVhDCisJYmNscmIJI0UxLEVfQllURSglYTIpCit8CWZtb3ZlLmwJJUZQU1IsRlBTUl9TSEFET1coJWEyKQorfAlic2V0LmIJI1NGTEFHLEVfQllURSglYTIpCit8CWJzZXQuYgkjWEZMQUcsVF9CWVRFKCVhMikKK2VuZF9hdnVuOgorCWZyZXN0b3JlICglYTcpKworCXVubGsJJWEyCisJcnRzCitpZGxlX2VuZDoKKwlhZGRsCSM0LCVhNworCXVubGsJJWEyCisJcnRzCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvcmVzX2Z1bmMuUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3Jlc19mdW5jLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY2Yjk1MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3Jlc19mdW5jLlMKQEAgLTAsMCArMSwyMDQwIEBACit8Cit8CXJlc19mdW5jLnNhIDMuOSA3LzI5LzkxCit8Cit8IE5vcm1hbGl6ZXMgZGVub3JtYWxpemVkIG51bWJlcnMgaWYgbmVjZXNzYXJ5IGFuZCB1cGRhdGVzIHRoZQorfCBzdGFjayBmcmFtZS4gIFRoZSBmdW5jdGlvbiBpcyB0aGVuIHJlc3RvcmVkIGJhY2sgaW50byB0aGUKK3wgbWFjaGluZSBhbmQgdGhlIDA0MCBjb21wbGV0ZXMgdGhlIG9wZXJhdGlvbi4gIFRoaXMgcm91dGluZQorfCBpcyBvbmx5IHVzZWQgYnkgdGhlIHVuc3VwcG9ydGVkIGRhdGEgdHlwZS9mb3JtYXQgaGFuZGxlci4KK3wgKEV4Y2VwdGlvbiB2ZWN0b3IgNTUpLgorfAorfCBGb3IgcGFja2VkIG1vdmUgb3V0IChmbW92ZS5wIGZwbSw8ZWE+KSB0aGUgb3BlcmF0aW9uIGlzCit8IGNvbXBsZXRlZCBoZXJlOyBkYXRhIGlzIHBhY2tlZCBhbmQgbW92ZWQgdG8gdXNlciBtZW1vcnkuCit8IFRoZSBzdGFjayBpcyByZXN0b3JlZCB0byB0aGUgMDQwIG9ubHkgaW4gdGhlIGNhc2Ugb2YgYQorfCByZXBvcnRhYmxlIGV4Y2VwdGlvbiBpbiB0aGUgY29udmVyc2lvbi4KK3wKK3wKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK1JFU19GVU5DOiAgICB8aWRudCAgICAyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCitzcF9ibmRzOgkuc2hvcnQJMHgzZjgxLDB4NDA3ZQorCQkuc2hvcnQJMHgzZjZhLDB4MDAwMAorZHBfYm5kczoJLnNob3J0CTB4M2MwMSwweDQzZmUKKwkJLnNob3J0CTB4M2JjZCwweDAwMDAKKworCXx4cmVmCW1lbV93cml0ZQorCXx4cmVmCWJpbmRlYworCXx4cmVmCWdldF9mbGluZQorCXx4cmVmCXJvdW5kCisJfHhyZWYJZGVub3JtCisJfHhyZWYJZGVzdF9leHQKKwl8eHJlZglkZXN0X2RibAorCXx4cmVmCWRlc3Rfc2dsCisJfHhyZWYJdW5mX3N1YgorCXx4cmVmCW5ybV9zZXQKKwl8eHJlZglkbnJtX2xwCisJfHhyZWYJb3ZmX3JlcworCXx4cmVmCXJlZ19kZXN0CisJfHhyZWYJdF9vdmZsCisJfHhyZWYJdF91bmZsCisKKwkuZ2xvYmFsCXJlc19mdW5jCisJLmdsb2JhbAlwX21vdmUKKworcmVzX2Z1bmM6CisJY2xyYglETlJNX0ZMRyglYTYpCisJY2xyYglSRVNfRkxHKCVhNikKKwljbHJiCUNVX09OTFkoJWE2KQorCXRzdGIJRFlfTU9fRkxHKCVhNikKKwliZXFzCW1vbmFkaWMKK2R5YWRpYzoKKwlidHN0YgkjNyxEVEFHKCVhNikJfGlmIGRvcCA9IG5vcm09MDAwLCB6ZXJvPTAwMSwKK3wJCQkJO2luZj0wMTAgb3IgbmFuPTAxMQorCWJlcXMJbW9uYWRpYwkJfHRoZW4gYnJhbmNoCit8CQkJCTtlbHNlIGRlbm9ybQorfCBIQU5ETEUgREVTVElOQVRJT04gREVOT1JNIEhFUkUKK3wJCQkJO3NldCBkdGFnIHRvIG5vcm0KK3wJCQkJO3dyaXRlIHRoZSB0YWcgJiBmcHRlMTUgdG8gdGhlIGZzdGFjaworCWxlYWwJRlBURU1QKCVhNiksJWEwCisKKwliY2xyYgkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCXNuZQlMT0NBTF9TR04oJWEwKQorCisJYnNyCW5ybV9zZXQJCXxub3JtYWxpemUgbnVtYmVyIChleHAgd2lsbCBnbyBuZWdhdGl2ZSkKKwliY2xyYgkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKSB8Z2V0IHJpZCBvZiBmYWxzZSBzaWduCisJYmZjbHIJTE9DQUxfU0dOKCVhMCl7IzA6Izh9CXxjaGFuZ2UgYmFjayB0byBJRUVFIGV4dCBmb3JtYXQKKwliZXFzCWRwb3MKKwlic2V0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorZHBvczoKKwliZmNscglEVEFHKCVhNil7IzA6IzR9CXxzZXQgdGFnIHRvIG5vcm1hbGl6ZWQsIEZQVEUxNSA9IDAKKwlic2V0YgkjNCxEVEFHKCVhNikJfHNldCBGUFRFMTUKKwlvcmIJIzB4MGYsRE5STV9GTEcoJWE2KQorbW9uYWRpYzoKKwlsZWFsCUVURU1QKCVhNiksJWEwCisJYnRzdGIJI2RpcmVjdGlvbl9iaXQsQ01EUkVHMUIoJWE2KQl8Y2hlY2sgZGlyZWN0aW9uCisJYm5lCW9wY2xhc3MzCQkJfGl0IGlzIGEgbXYgb3V0Cit8Cit8IEF0IHRoaXMgcG9pbnQsIG9ubHkgb3BjbGFzcyAwIGFuZCAyIHBvc3NpYmxlCit8CisJYnRzdGIJIzcsU1RBRyglYTYpCXxpZiBzb3AgPSBub3JtPTAwMCwgemVybz0wMDEsCit8CQkJCTtpbmY9MDEwIG9yIG5hbj0wMTEKKwlibmUJbW9uX2Rucm0JfGVsc2UgZGVub3JtCisJdHN0YglEWV9NT19GTEcoJWE2KQl8YWxsIGNhc2VzIG9mIGR5YWRpYyBpbnN0cnVjdGlvbnMgd291bGQKKwlibmUJbm9ybWFsCQl8cmVxdWlyZSBub3JtYWxpemF0aW9uIG9mIGRlbm9ybQorCit8IEF0IHRoaXMgcG9pbnQ6Cit8CW1vbmFkaWMgaW5zdHJ1Y3Rpb25zOglmYWJzICA9ICQxOCAgZm5lZyAgID0gJDFhICBmdHN0ICAgPSAkM2EKK3wJCQkJZm1vdmUgPSAkMDAgIGZzbW92ZSA9ICQ0MCAgZmRtb3ZlID0gJDQ0Cit8CQkJCWZzcXJ0ID0gJDA1KiBmc3NxcnQgPSAkNDEgIGZkc3FydCA9ICQ0NQorfAkJCQkoKmZzcXJ0IHJlZW5jb2RlZCB0byAkMDUpCit8CisJbW92ZXcJQ01EUkVHMUIoJWE2KSwlZDAJfGdldCBjb21tYW5kIHJlZ2lzdGVyCisJYW5kaWwJIzB4N2YsJWQwCQkJfHN0cmlwIHRvIG9ubHkgY29tbWFuZCB3b3JkCit8Cit8IEF0IHRoaXMgcG9pbnQsIGZhYnMsIGZuZWcsIGZzbW92ZSwgZmRtb3ZlLCBmdHN0LCBmc3FydCwgZnNzcXJ0LCBhbmQKK3wgZmRzcXJ0IGFyZSBwb3NzaWJsZS4KK3wgRm9yIGNhc2VzIGZhYnMsIGZuZWcsIGZzbW92ZSwgYW5kIGZkbW92ZSBnb3RvIHNwb3MgKGRvIG5vdCBub3JtYWxpemUpCit8IEZvciBjYXNlcyBmc3FydCwgZnNzcXJ0LCBhbmQgZmRzcXJ0IGdvdG8gbnJtX3NyYyAoZG8gbm9ybWFsaXplKQorfAorCWJ0c3RsCSMwLCVkMAorCWJuZQlub3JtYWwJCQl8d2VlZCBvdXQgZnNxcnQgaW5zdHJ1Y3Rpb25zCit8Cit8IGN1X25vcm0gaGFuZGxlcyBmbW92ZSBpbiBpbnN0cnVjdGlvbnMgd2l0aCBub3JtYWxpemVkIGlucHV0cy4KK3wgVGhlIHJvdXRpbmUgcm91bmQgaXMgdXNlZCB0byBjb3JyZWN0bHkgcm91bmQgdGhlIGlucHV0IGZvciB0aGUKK3wgZGVzdGluYXRpb24gcHJlY2lzaW9uIGFuZCBtb2RlLgorfAorY3Vfbm9ybToKKwlzdAlDVV9PTkxZKCVhNikJCXxzZXQgY3Utb25seSBpbnN0IGZsYWcKKwltb3ZldwlDTURSRUcxQiglYTYpLCVkMAorCWFuZGliCSMweDNiLCVkMAkJfGlzb2xhdGUgYml0cyB0byBzZWxlY3QgaW5zdAorCXRzdGIJJWQwCisJYmVxbAljdV9ubW92ZQl8aWYgemVybywgaXQgaXMgYW4gZm1vdmUKKwljbXBpYgkjMHgxOCwlZDAKKwliZXFsCWN1X25hYnMJCXxpZiAkMTgsIGl0IGlzIGZhYnMKKwljbXBpYgkjMHgxYSwlZDAKKwliZXFsCWN1X25uZWcJCXxpZiAkMWEsIGl0IGlzIGZuZWcKK3wKK3wgSW5zdCBpcyBmdHN0LiAgQ2hlY2sgdGhlIHNvdXJjZSBvcGVyYW5kIGFuZCBzZXQgdGhlIGNjJ3MgYWNjb3JkaW5nbHkuCit8IE5vIHdyaXRlIGlzIGRvbmUsIHNvIHNpbXBseSBydHMuCit8CitjdV9udHN0OgorCW1vdmV3CUxPQ0FMX0VYKCVhMCksJWQwCisJYmNscmwJIzE1LCVkMAorCXNuZQlMT0NBTF9TR04oJWEwKQorCWJlcXMJY3VfbnRwbworCW9ybAkjbmVnX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBOCitjdV9udHBvOgorCWNtcGl3CSMweDdmZmYsJWQwCXx0ZXN0IGZvciBpbmYvbmFuCisJYm5lcwljdV9udGN6CisJdHN0bAlMT0NBTF9ISSglYTApCisJYm5lcwljdV9udG4KKwl0c3RsCUxPQ0FMX0xPKCVhMCkKKwlibmVzCWN1X250bgorCW9ybAkjaW5mX21hc2ssVVNFUl9GUFNSKCVhNikKKwlydHMKK2N1X250bjoKKwlvcmwJI25hbl9tYXNrLFVTRVJfRlBTUiglYTYpCisJbW92ZWwJRVRFTVBfRVgoJWE2KSxGUFRFTVBfRVgoJWE2KQl8c2V0IHVwIGZwdGVtcCBzaWduIGZvcgorfAkJCQkJCTtzbmFuIGhhbmRsZXIKKworCXJ0cworY3VfbnRjejoKKwl0c3RsCUxPQ0FMX0hJKCVhMCkKKwlibmVsCWN1X250c3gKKwl0c3RsCUxPQ0FMX0xPKCVhMCkKKwlibmVsCWN1X250c3gKKwlvcmwJI3pfbWFzayxVU0VSX0ZQU1IoJWE2KQorY3VfbnRzeDoKKwlydHMKK3wKK3wgSW5zdCBpcyBmYWJzLiAgRXhlY3V0ZSB0aGUgYWJzb2x1dGUgdmFsdWUgZnVuY3Rpb24gb24gdGhlIGlucHV0LgorfCBCcmFuY2ggdG8gdGhlIGZtb3ZlIGNvZGUuICBJZiB0aGUgb3BlcmFuZCBpcyBOYU4sIGRvIG5vdGhpbmcuCit8CitjdV9uYWJzOgorCW1vdmViCVNUQUcoJWE2KSwlZDAKKwlidHN0bAkjNSwlZDAJCQl8dGVzdCBmb3IgTmFOIG9yIHplcm8KKwlibmUJd3JfZXRlbXAJCXxpZiBlaXRoZXIsIHNpbXBseSB3cml0ZSBpdAorCWJjbHJiCSM3LExPQ0FMX0VYKCVhMCkJCXxkbyBhYnMKKwlicmFzCWN1X25tb3ZlCQl8Zm1vdmUgY29kZSB3aWxsIGZpbmlzaAorfAorfCBJbnN0IGlzIGZuZWcuICBFeGVjdXRlIHRoZSBuZWdhdGUgdmFsdWUgZnVuY3Rpb24gb24gdGhlIGlucHV0LgorfCBGYWxsIHRob3VnaCB0byB0aGUgZm1vdmUgY29kZS4gIElmIHRoZSBvcGVyYW5kIGlzIE5hTiwgZG8gbm90aGluZy4KK3wKK2N1X25uZWc6CisJbW92ZWIJU1RBRyglYTYpLCVkMAorCWJ0c3RsCSM1LCVkMAkJCXx0ZXN0IGZvciBOYU4gb3IgemVybworCWJuZQl3cl9ldGVtcAkJfGlmIGVpdGhlciwgc2ltcGx5IHdyaXRlIGl0CisJYmNoZ2IJIzcsTE9DQUxfRVgoJWEwKQkJfGRvIG5lZworfAorfCBJbnN0IGlzIGZtb3ZlLiAgVGhpcyBjb2RlIGFsc28gaGFuZGxlcyBhbGwgcmVzdWx0IHdyaXRlcy4KK3wgSWYgYml0IDIgaXMgc2V0LCByb3VuZCBpcyBmb3JjZWQgdG8gZG91YmxlLiAgSWYgaXQgaXMgY2xlYXIsCit8IGFuZCBiaXQgNiBpcyBzZXQsIHJvdW5kIGlzIGZvcmNlZCB0byBzaW5nbGUuICBJZiBib3RoIGFyZSBjbGVhciwKK3wgdGhlIHJvdW5kIHByZWNpc2lvbiBpcyBmb3VuZCBpbiB0aGUgZnBjci4gIElmIHRoZSByb3VuZGluZyBwcmVjaXNpb24KK3wgaXMgZG91YmxlIG9yIHNpbmdsZSwgcm91bmQgdGhlIHJlc3VsdCBiZWZvcmUgdGhlIHdyaXRlLgorfAorY3Vfbm1vdmU6CisJbW92ZWIJU1RBRyglYTYpLCVkMAorCWFuZGliCSMweGUwLCVkMAkJCXxpc29sYXRlIHN0YWcgYml0cworCWJuZQl3cl9ldGVtcAkJfGlmIG5vdCBub3JtLCBzaW1wbHkgd3JpdGUgaXQKKwlidHN0YgkjMixDTURSRUcxQisxKCVhNikJfGNoZWNrIGZvciByZAorCWJuZQljdV9ubXJkCisJYnRzdGIJIzYsQ01EUkVHMUIrMSglYTYpCXxjaGVjayBmb3IgcnMKKwlibmUJY3Vfbm1ycworfAorfCBUaGUgbW92ZSBvciBvcGVyYXRpb24gaXMgbm90IHdpdGggZm9yY2VkIHByZWNpc2lvbi4gIFRlc3QgZm9yCit8IG5hbiBvciBpbmYgYXMgdGhlIGlucHV0OyBpZiBzbywgc2ltcGx5IHdyaXRlIGl0IHRvIEZQbi4gIFVzZSB0aGUKK3wgRlBDUl9NT0RFIGJ5dGUgdG8gZ2V0IHJvdW5kaW5nIG9uIG5vcm1zIGFuZCB6ZXJvcy4KK3wKK2N1X25tbnI6CisJYmZleHR1CUZQQ1JfTU9ERSglYTYpeyMwOiMyfSwlZDAKKwl0c3RiCSVkMAkJCXxjaGVjayBmb3IgZXh0ZW5kZWQKKwliZXEJY3Vfd3JleG4JCXxpZiBzbywganVzdCB3cml0ZSByZXN1bHQKKwljbXBpYgkjMSwlZDAJCQl8Y2hlY2sgZm9yIHNpbmdsZQorCWJlcQljdV9ubXJzCQkJfGZhbGwgdGhyb3VnaCB0byBkb3VibGUKK3wKK3wgVGhlIG1vdmUgaXMgZmRtb3ZlIG9yIHJvdW5kIHByZWNpc2lvbiBpcyBkb3VibGUuCit8CitjdV9ubXJkOgorCW1vdmVsCSMyLCVkMAkJCXxzZXQgdXAgdGhlIHNpemUgZm9yIGRlbm9ybQorCW1vdmV3CUxPQ0FMX0VYKCVhMCksJWQxCQl8Y29tcGFyZSBleHBvbmVudCB0byBkb3VibGUgdGhyZXNob2xkCisJYW5kdwkjMHg3ZmZmLCVkMQorCWNtcHcJIzB4M2MwMSwlZDEKKwlibHMJY3VfbnVuZmwKKwliZmV4dHUJRlBDUl9NT0RFKCVhNil7IzI6IzJ9LCVkMQl8Z2V0IHJtb2RlCisJb3JsCSMweDAwMDIwMDAwLCVkMQkJfG9yIGluIHJwcmVjIChkb3VibGUpCisJY2xybAklZDAJCQl8Y2xlYXIgZyxyLHMgZm9yIHJvdW5kCisJYmNscmIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkJfGNvbnZlcnQgdG8gaW50ZXJuYWwgZm9ybWF0CisJc25lCUxPQ0FMX1NHTiglYTApCisJYnNybAlyb3VuZAorCWJmY2xyCUxPQ0FMX1NHTiglYTApeyMwOiM4fQorCWJlcXMJY3Vfbm1yZGMKKwlic2V0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorY3Vfbm1yZGM6CisJbW92ZXcJTE9DQUxfRVgoJWEwKSwlZDEJCXxjaGVjayBmb3Igb3ZlcmZsb3cKKwlhbmR3CSMweDdmZmYsJWQxCisJY21wdwkjMHg0M2ZmLCVkMQorCWJnZQljdV9ub3ZmbAkJfHRha2UgY2FyZSBvZiBvdmVyZmxvdyBjYXNlCisJYnJhCWN1X3dyZXhuCit8Cit8IFRoZSBtb3ZlIGlzIGZzbW92ZSBvciByb3VuZCBwcmVjaXNpb24gaXMgc2luZ2xlLgorfAorY3Vfbm1yczoKKwltb3ZlbAkjMSwlZDAKKwltb3ZldwlMT0NBTF9FWCglYTApLCVkMQorCWFuZHcJIzB4N2ZmZiwlZDEKKwljbXB3CSMweDNmODEsJWQxCisJYmxzCWN1X251bmZsCisJYmZleHR1CUZQQ1JfTU9ERSglYTYpeyMyOiMyfSwlZDEKKwlvcmwJIzB4MDAwMTAwMDAsJWQxCisJY2xybAklZDAKKwliY2xyYgkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCXNuZQlMT0NBTF9TR04oJWEwKQorCWJzcmwJcm91bmQKKwliZmNscglMT0NBTF9TR04oJWEwKXsjMDojOH0KKwliZXFzCWN1X25tcnNjCisJYnNldGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKK2N1X25tcnNjOgorCW1vdmV3CUxPQ0FMX0VYKCVhMCksJWQxCisJYW5kdwkjMHg3RkZGLCVkMQorCWNtcHcJIzB4NDA3ZiwlZDEKKwlibHQJY3Vfd3JleG4KK3wKK3wgVGhlIG9wZXJhbmQgaXMgYWJvdmUgcHJlY2lzaW9uIGJvdW5kYXJpZXMuICBVc2UgdF9vdmZsIHRvCit8IGdlbmVyYXRlIHRoZSBjb3JyZWN0IHZhbHVlLgorfAorY3Vfbm92Zmw6CisJYnNyCXRfb3ZmbAorCWJyYQljdV93cmV4bgorfAorfCBUaGUgb3BlcmFuZCBpcyBiZWxvdyBwcmVjaXNpb24gYm91bmRhcmllcy4gIFVzZSBkZW5vcm0gdG8KK3wgZ2VuZXJhdGUgdGhlIGNvcnJlY3QgdmFsdWUuCit8CitjdV9udW5mbDoKKwliY2xyYgkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCXNuZQlMT0NBTF9TR04oJWEwKQorCWJzcglkZW5vcm0KKwliZmNscglMT0NBTF9TR04oJWEwKXsjMDojOH0JfGNoYW5nZSBiYWNrIHRvIElFRUUgZXh0IGZvcm1hdAorCWJlcXMJY3VfbnVjb250CisJYnNldGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKK2N1X251Y29udDoKKwliZmV4dHUJRlBDUl9NT0RFKCVhNil7IzI6IzJ9LCVkMQorCWJ0c3RiCSMyLENNRFJFRzFCKzEoJWE2KQl8Y2hlY2sgZm9yIHJkCisJYm5lCWluc3RfZAorCWJ0c3RiCSM2LENNRFJFRzFCKzEoJWE2KQl8Y2hlY2sgZm9yIHJzCisJYm5lCWluc3RfcworCXN3YXAJJWQxCisJbW92ZWIJRlBDUl9NT0RFKCVhNiksJWQxCisJbHNyYgkjNiwlZDEKKwlzd2FwCSVkMQorCWJyYQlpbnN0X3NkCitpbnN0X2Q6CisJb3JsCSMweDAwMDIwMDAwLCVkMQorCWJyYQlpbnN0X3NkCitpbnN0X3M6CisJb3JsCSMweDAwMDEwMDAwLCVkMQoraW5zdF9zZDoKKwliY2xyYgkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCXNuZQlMT0NBTF9TR04oJWEwKQorCWJzcmwJcm91bmQKKwliZmNscglMT0NBTF9TR04oJWEwKXsjMDojOH0KKwliZXFzCWN1X251ZmxwCisJYnNldGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKK2N1X251ZmxwOgorCWJ0c3RiCSNpbmV4Ml9iaXQsRlBTUl9FWENFUFQoJWE2KQorCWJlcXMJY3VfbnVuaW54CisJb3JsCSNhdW5mbF9tYXNrLFVTRVJfRlBTUiglYTYpIHxpZiB0aGUgcm91bmQgd2FzIGluZXgsIHNldCBBVU5GTAorY3VfbnVuaW54OgorCXRzdGwJTE9DQUxfSEkoJWEwKQkJfHRlc3QgZm9yIHplcm8KKwlibmVzCWN1X251bnpybworCXRzdGwJTE9DQUxfTE8oJWEwKQorCWJuZXMJY3VfbnVuenJvCit8Cit8IFRoZSBtYW50aXNzYSBpcyB6ZXJvIGZyb20gdGhlIGRlbm9ybSBsb29wLiAgQ2hlY2sgc2lnbiBhbmQgcm1vZGUKK3wgdG8gc2VlIGlmIHJvdW5kaW5nIHNob3VsZCBoYXZlIG9jY3VycmVkIHdoaWNoIHdvdWxkIGxlYXZlIHRoZSBsc2IuCit8CisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQwCisJYW5kaWwJIzB4MzAsJWQwCQl8aXNvbGF0ZSBybW9kZQorCWNtcGlsCSMweDIwLCVkMAorCWJsdHMJY3VfbnpybworCWJuZXMJY3VfbnJwCitjdV9ucm06CisJdHN0dwlMT0NBTF9FWCglYTApCXxpZiBwb3NpdGl2ZSwgc2V0IGxzYgorCWJnZXMJY3VfbnpybworCWJ0c3RiCSM3LEZQQ1JfTU9ERSglYTYpIHxjaGVjayBmb3IgZG91YmxlCisJYmVxcwljdV9uaW5jcworCWJyYXMJY3VfbmluY2QKK2N1X25ycDoKKwl0c3R3CUxPQ0FMX0VYKCVhMCkJfGlmIHBvc2l0aXZlLCBzZXQgbHNiCisJYmx0cwljdV9uenJvCisJYnRzdGIJIzcsRlBDUl9NT0RFKCVhNikgfGNoZWNrIGZvciBkb3VibGUKKwliZXFzCWN1X25pbmNzCitjdV9uaW5jZDoKKwlvcmwJIzB4ODAwLExPQ0FMX0xPKCVhMCkgfGluYyBmb3IgZG91YmxlCisJYnJhCWN1X251bnpybworY3VfbmluY3M6CisJb3JsCSMweDEwMCxMT0NBTF9ISSglYTApIHxpbmMgZm9yIHNpbmdsZQorCWJyYQljdV9udW56cm8KK2N1X256cm86CisJb3JsCSN6X21hc2ssVVNFUl9GUFNSKCVhNikKKwltb3ZlYglTVEFHKCVhNiksJWQwCisJYW5kaWIJIzB4ZTAsJWQwCisJY21waWIJIzB4NDAsJWQwCQl8Y2hlY2sgaWYgaW5wdXQgd2FzIHRhZ2dlZCB6ZXJvCisJYmVxcwljdV9udW12CitjdV9udW56cm86CisJb3JsCSN1bmZsX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCB1bmZsCitjdV9udW12OgorCW1vdmVsCSglYTApLEVURU1QKCVhNikKKwltb3ZlbAk0KCVhMCksRVRFTVBfSEkoJWE2KQorCW1vdmVsCTgoJWEwKSxFVEVNUF9MTyglYTYpCit8Cit8IFdyaXRlIHRoZSByZXN1bHQgdG8gbWVtb3J5LCBzZXR0aW5nIHRoZSBmcHNyIGNjIGJpdHMuICBOYU4gYW5kIEluZgorfCBieXBhc3MgY3Vfd3JleG4uCit8CitjdV93cmV4bjoKKwl0c3R3CUxPQ0FMX0VYKCVhMCkJCXx0ZXN0IGZvciB6ZXJvCisJYmVxcwljdV93cnplcm8KKwljbXB3CSMweDgwMDAsTE9DQUxfRVgoJWEwKQl8dGVzdCBmb3IgemVybworCWJuZXMJY3Vfd3Jlb24KK2N1X3dyemVybzoKKwlvcmwJI3pfbWFzayxVU0VSX0ZQU1IoJWE2KQl8c2V0IFogYml0CitjdV93cmVvbjoKKwl0c3R3CUxPQ0FMX0VYKCVhMCkKKwlicGwJd3JfZXRlbXAKKwlvcmwJI25lZ19tYXNrLFVTRVJfRlBTUiglYTYpCisJYnJhCXdyX2V0ZW1wCisKK3wKK3wgSEFORExFIFNPVVJDRSBERU5PUk0gSEVSRQorfAorfAkJCQk7Y2xlYXIgZGVub3JtIHN0YWcgdG8gbm9ybQorfAkJCQk7d3JpdGUgdGhlIG5ldyB0YWcgJiBldGUxNSB0byB0aGUgZnN0YWNrCittb25fZG5ybToKK3wKK3wgQXQgdGhpcyBwb2ludCwgY2hlY2sgZm9yIHRoZSBjYXNlcyBpbiB3aGljaCBub3JtYWxpemluZyB0aGUKK3wgZGVub3JtIHByb2R1Y2VzIGluY29ycmVjdCByZXN1bHRzLgorfAorCXRzdGIJRFlfTU9fRkxHKCVhNikJfGFsbCBjYXNlcyBvZiBkeWFkaWMgaW5zdHJ1Y3Rpb25zIHdvdWxkCisJYm5lcwlucm1fc3JjCQl8cmVxdWlyZSBub3JtYWxpemF0aW9uIG9mIGRlbm9ybQorCit8IEF0IHRoaXMgcG9pbnQ6Cit8CW1vbmFkaWMgaW5zdHJ1Y3Rpb25zOglmYWJzICA9ICQxOCAgZm5lZyAgID0gJDFhICBmdHN0ICAgPSAkM2EKK3wJCQkJZm1vdmUgPSAkMDAgIGZzbW92ZSA9ICQ0MCAgZmRtb3ZlID0gJDQ0Cit8CQkJCWZzcXJ0ID0gJDA1KiBmc3NxcnQgPSAkNDEgIGZkc3FydCA9ICQ0NQorfAkJCQkoKmZzcXJ0IHJlZW5jb2RlZCB0byAkMDUpCit8CisJbW92ZXcJQ01EUkVHMUIoJWE2KSwlZDAJfGdldCBjb21tYW5kIHJlZ2lzdGVyCisJYW5kaWwJIzB4N2YsJWQwCQkJfHN0cmlwIHRvIG9ubHkgY29tbWFuZCB3b3JkCit8Cit8IEF0IHRoaXMgcG9pbnQsIGZhYnMsIGZuZWcsIGZzbW92ZSwgZmRtb3ZlLCBmdHN0LCBmc3FydCwgZnNzcXJ0LCBhbmQKK3wgZmRzcXJ0IGFyZSBwb3NzaWJsZS4KK3wgRm9yIGNhc2VzIGZhYnMsIGZuZWcsIGZzbW92ZSwgYW5kIGZkbW92ZSBnb3RvIHNwb3MgKGRvIG5vdCBub3JtYWxpemUpCit8IEZvciBjYXNlcyBmc3FydCwgZnNzcXJ0LCBhbmQgZmRzcXJ0IGdvdG8gbnJtX3NyYyAoZG8gbm9ybWFsaXplKQorfAorCWJ0c3RsCSMwLCVkMAorCWJuZXMJbnJtX3NyYwkJfHdlZWQgb3V0IGZzcXJ0IGluc3RydWN0aW9ucworCXN0CUNVX09OTFkoJWE2KQl8c2V0IGN1LW9ubHkgaW5zdCBmbGFnCisJYnJhCWN1X2Rucm0JCXxmbW92ZSwgZmFicywgZm5lZywgZnRzdAorfAkJCQk7Y2FzZXMgZ28gdG8gY3VfZG5ybQorbnJtX3NyYzoKKwliY2xyYgkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCXNuZQlMT0NBTF9TR04oJWEwKQorCWJzcglucm1fc2V0CQl8bm9ybWFsaXplIG51bWJlciAoZXhwb25lbnQgd2lsbCBnbworfAkJCQk7IG5lZ2F0aXZlKQorCWJjbHJiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApIHxnZXQgcmlkIG9mIGZhbHNlIHNpZ24KKworCWJmY2xyCUxPQ0FMX1NHTiglYTApeyMwOiM4fQl8Y2hhbmdlIGJhY2sgdG8gSUVFRSBleHQgZm9ybWF0CisJYmVxcwlzcG9zCisJYnNldGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKK3Nwb3M6CisJYmZjbHIJU1RBRyglYTYpeyMwOiM0fQl8c2V0IHRhZyB0byBub3JtYWxpemVkLCBGUFRFMTUgPSAwCisJYnNldGIJIzQsU1RBRyglYTYpCXxzZXQgRVRFMTUKKwlvcmIJIzB4ZjAsRE5STV9GTEcoJWE2KQorbm9ybWFsOgorCXRzdGIJRE5STV9GTEcoJWE2KQl8Y2hlY2sgaWYgYW55IG9mIHRoZSBvcHMgd2VyZSBkZW5vcm1zCisJYm5lCWNrX3dyYXAJCXxpZiBzbywgY2hlY2sgaWYgaXQgaXMgYSBwb3RlbnRpYWwKK3wJCQkJO3dyYXAtYXJvdW5kIGNhc2UKK2ZpeF9zdGs6CisJbW92ZWIJIzB4ZmUsQ1VfU0FWRVBDKCVhNikKKwliY2xyYgkjRTEsRV9CWVRFKCVhNikKKworCWNscncJTk1ORVhDKCVhNikKKworCXN0CVJFU19GTEcoJWE2KQl8aW5kaWNhdGUgdGhhdCBhIHJlc3RvcmUgaXMgbmVlZGVkCisJcnRzCisKK3wKK3wgY3VfZG5ybSBoYW5kbGVzIGFsbCBjdS1vbmx5IGluc3RydWN0aW9ucyAoZm1vdmUsIGZhYnMsIGZuZWcsIGFuZAorfCBmdHN0KSBjb21wbGV0ZWx5IGluIHNvZnR3YXJlIHdpdGhvdXQgYW4gZnJlc3RvcmUgdG8gdGhlIDA0MC4KK3wKK2N1X2Rucm06CisJc3QJQ1VfT05MWSglYTYpCisJbW92ZXcJQ01EUkVHMUIoJWE2KSwlZDAKKwlhbmRpYgkjMHgzYiwlZDAJCXxpc29sYXRlIGJpdHMgdG8gc2VsZWN0IGluc3QKKwl0c3RiCSVkMAorCWJlcWwJY3VfZG1vdmUJfGlmIHplcm8sIGl0IGlzIGFuIGZtb3ZlCisJY21waWIJIzB4MTgsJWQwCisJYmVxbAljdV9kYWJzCQl8aWYgJDE4LCBpdCBpcyBmYWJzCisJY21waWIJIzB4MWEsJWQwCisJYmVxbAljdV9kbmVnCQl8aWYgJDFhLCBpdCBpcyBmbmVnCit8Cit8IEluc3QgaXMgZnRzdC4gIENoZWNrIHRoZSBzb3VyY2Ugb3BlcmFuZCBhbmQgc2V0IHRoZSBjYydzIGFjY29yZGluZ2x5LgorfCBObyB3cml0ZSBpcyBkb25lLCBzbyBzaW1wbHkgcnRzLgorfAorY3VfZHRzdDoKKwltb3ZldwlMT0NBTF9FWCglYTApLCVkMAorCWJjbHJsCSMxNSwlZDAKKwlzbmUJTE9DQUxfU0dOKCVhMCkKKwliZXFzCWN1X2R0cG8KKwlvcmwJI25lZ19tYXNrLFVTRVJfRlBTUiglYTYpIHxzZXQgTgorY3VfZHRwbzoKKwljbXBpdwkjMHg3ZmZmLCVkMAl8dGVzdCBmb3IgaW5mL25hbgorCWJuZXMJY3VfZHRjegorCXRzdGwJTE9DQUxfSEkoJWEwKQorCWJuZXMJY3VfZHRuCisJdHN0bAlMT0NBTF9MTyglYTApCisJYm5lcwljdV9kdG4KKwlvcmwJI2luZl9tYXNrLFVTRVJfRlBTUiglYTYpCisJcnRzCitjdV9kdG46CisJb3JsCSNuYW5fbWFzayxVU0VSX0ZQU1IoJWE2KQorCW1vdmVsCUVURU1QX0VYKCVhNiksRlBURU1QX0VYKCVhNikJfHNldCB1cCBmcHRlbXAgc2lnbiBmb3IKK3wJCQkJCQk7c25hbiBoYW5kbGVyCisJcnRzCitjdV9kdGN6OgorCXRzdGwJTE9DQUxfSEkoJWEwKQorCWJuZWwJY3VfZHRzeAorCXRzdGwJTE9DQUxfTE8oJWEwKQorCWJuZWwJY3VfZHRzeAorCW9ybAkjel9tYXNrLFVTRVJfRlBTUiglYTYpCitjdV9kdHN4OgorCXJ0cworfAorfCBJbnN0IGlzIGZhYnMuICBFeGVjdXRlIHRoZSBhYnNvbHV0ZSB2YWx1ZSBmdW5jdGlvbiBvbiB0aGUgaW5wdXQuCit8IEJyYW5jaCB0byB0aGUgZm1vdmUgY29kZS4KK3wKK2N1X2RhYnM6CisJYmNscmIJIzcsTE9DQUxfRVgoJWEwKQkJfGRvIGFicworCWJyYXMJY3VfZG1vdmUJCXxmbW92ZSBjb2RlIHdpbGwgZmluaXNoCit8Cit8IEluc3QgaXMgZm5lZy4gIEV4ZWN1dGUgdGhlIG5lZ2F0ZSB2YWx1ZSBmdW5jdGlvbiBvbiB0aGUgaW5wdXQuCit8IEZhbGwgdGhvdWdoIHRvIHRoZSBmbW92ZSBjb2RlLgorfAorY3VfZG5lZzoKKwliY2hnYgkjNyxMT0NBTF9FWCglYTApCQl8ZG8gbmVnCit8Cit8IEluc3QgaXMgZm1vdmUuICBUaGlzIGNvZGUgYWxzbyBoYW5kbGVzIGFsbCByZXN1bHQgd3JpdGVzLgorfCBJZiBiaXQgMiBpcyBzZXQsIHJvdW5kIGlzIGZvcmNlZCB0byBkb3VibGUuICBJZiBpdCBpcyBjbGVhciwKK3wgYW5kIGJpdCA2IGlzIHNldCwgcm91bmQgaXMgZm9yY2VkIHRvIHNpbmdsZS4gIElmIGJvdGggYXJlIGNsZWFyLAorfCB0aGUgcm91bmQgcHJlY2lzaW9uIGlzIGZvdW5kIGluIHRoZSBmcGNyLiAgSWYgdGhlIHJvdW5kaW5nIHByZWNpc2lvbgorfCBpcyBkb3VibGUgb3Igc2luZ2xlLCB0aGUgcmVzdWx0IGlzIHplcm8sIGFuZCB0aGUgbW9kZSBpcyBjaGVja2VkCit8IHRvIGRldGVybWluZSBpZiB0aGUgbHNiIG9mIHRoZSByZXN1bHQgc2hvdWxkIGJlIHNldC4KK3wKK2N1X2Rtb3ZlOgorCWJ0c3RiCSMyLENNRFJFRzFCKzEoJWE2KQl8Y2hlY2sgZm9yIHJkCisJYm5lCWN1X2RtcmQKKwlidHN0YgkjNixDTURSRUcxQisxKCVhNikJfGNoZWNrIGZvciBycworCWJuZQljdV9kbXJzCit8Cit8IFRoZSBtb3ZlIG9yIG9wZXJhdGlvbiBpcyBub3Qgd2l0aCBmb3JjZWQgcHJlY2lzaW9uLiAgVXNlIHRoZQorfCBGUENSX01PREUgYnl0ZSB0byBnZXQgcm91bmRpbmcuCit8CitjdV9kbW5yOgorCWJmZXh0dQlGUENSX01PREUoJWE2KXsjMDojMn0sJWQwCisJdHN0YgklZDAJCQl8Y2hlY2sgZm9yIGV4dGVuZGVkCisJYmVxCWN1X3dyZXhkCQl8aWYgc28sIGp1c3Qgd3JpdGUgcmVzdWx0CisJY21waWIJIzEsJWQwCQkJfGNoZWNrIGZvciBzaW5nbGUKKwliZXEJY3VfZG1ycwkJCXxmYWxsIHRocm91Z2ggdG8gZG91YmxlCit8Cit8IFRoZSBtb3ZlIGlzIGZkbW92ZSBvciByb3VuZCBwcmVjaXNpb24gaXMgZG91YmxlLiAgUmVzdWx0IGlzIHplcm8uCit8IENoZWNrIHJtb2RlIGZvciBycCBvciBybSBhbmQgc2V0IGxzYiBhY2NvcmRpbmdseS4KK3wKK2N1X2RtcmQ6CisJYmZleHR1CUZQQ1JfTU9ERSglYTYpeyMyOiMyfSwlZDEJfGdldCBybW9kZQorCXRzdHcJTE9DQUxfRVgoJWEwKQkJfGNoZWNrIHNpZ24KKwlibHRzCWN1X2RtZG4KKwljbXBpYgkjMywlZDEJCQl8Y2hlY2sgZm9yIHJwCisJYm5lCWN1X2RwZAkJCXxsb2FkIGRvdWJsZSBwb3MgemVybworCWJyYQljdV9kcGRyCQkJfGxvYWQgZG91YmxlIHBvcyB6ZXJvIHcvbHNiCitjdV9kbWRuOgorCWNtcGliCSMyLCVkMQkJCXxjaGVjayBmb3Igcm0KKwlibmUJY3VfZG5kCQkJfGxvYWQgZG91YmxlIG5lZyB6ZXJvCisJYnJhCWN1X2RuZHIJCQl8bG9hZCBkb3VibGUgbmVnIHplcm8gdy9sc2IKK3wKK3wgVGhlIG1vdmUgaXMgZnNtb3ZlIG9yIHJvdW5kIHByZWNpc2lvbiBpcyBzaW5nbGUuICBSZXN1bHQgaXMgemVyby4KK3wgQ2hlY2sgZm9yIHJwIG9yIHJtIGFuZCBzZXQgbHNiIGFjY29yZGluZ2x5LgorfAorY3VfZG1yczoKKwliZmV4dHUJRlBDUl9NT0RFKCVhNil7IzI6IzJ9LCVkMQl8Z2V0IHJtb2RlCisJdHN0dwlMT0NBTF9FWCglYTApCQl8Y2hlY2sgc2lnbgorCWJsdHMJY3VfZG1zbgorCWNtcGliCSMzLCVkMQkJCXxjaGVjayBmb3IgcnAKKwlibmUJY3Vfc3BkCQkJfGxvYWQgc2luZ2xlIHBvcyB6ZXJvCisJYnJhCWN1X3NwZHIJCQl8bG9hZCBzaW5nbGUgcG9zIHplcm8gdy9sc2IKK2N1X2Rtc246CisJY21waWIJIzIsJWQxCQkJfGNoZWNrIGZvciBybQorCWJuZQljdV9zbmQJCQl8bG9hZCBzaW5nbGUgbmVnIHplcm8KKwlicmEJY3Vfc25kcgkJCXxsb2FkIHNpbmdsZSBuZWcgemVybyB3L2xzYgorfAorfCBUaGUgcHJlY2lzaW9uIGlzIGV4dGVuZGVkLCBzbyB0aGUgcmVzdWx0IGluIGV0ZW1wIGlzIGNvcnJlY3QuCit8IFNpbXBseSBzZXQgdW5mbCAobm90IGluZXgyIG9yIGF1bmZsKSBhbmQgd3JpdGUgdGhlIHJlc3VsdCB0bworfCB0aGUgY29ycmVjdCBmcCByZWdpc3Rlci4KK2N1X3dyZXhkOgorCW9ybAkjdW5mbF9tYXNrLFVTRVJfRlBTUiglYTYpCisJdHN0dwlMT0NBTF9FWCglYTApCisJYmVxCXdyX2V0ZW1wCisJb3JsCSNuZWdfbWFzayxVU0VSX0ZQU1IoJWE2KQorCWJyYQl3cl9ldGVtcAorfAorfCBUaGVzZSByb3V0aW5lcyB3cml0ZSArLy0gemVybyBpbiBkb3VibGUgZm9ybWF0LiAgVGhlIHJvdXRpbmVzCit8IGN1X2RwZHIgYW5kIGN1X2RuZHIgc2V0IHRoZSBkb3VibGUgbHNiLgorfAorY3VfZHBkOgorCW1vdmVsCSMweDNjMDEwMDAwLExPQ0FMX0VYKCVhMCkJfGZvcmNlIHBvcyBkb3VibGUgemVybworCWNscmwJTE9DQUxfSEkoJWEwKQorCWNscmwJTE9DQUxfTE8oJWEwKQorCW9ybAkjel9tYXNrLFVTRVJfRlBTUiglYTYpCisJb3JsCSN1bmZpbnhfbWFzayxVU0VSX0ZQU1IoJWE2KQorCWJyYQl3cl9ldGVtcAorY3VfZHBkcjoKKwltb3ZlbAkjMHgzYzAxMDAwMCxMT0NBTF9FWCglYTApCXxmb3JjZSBwb3MgZG91YmxlIHplcm8KKwljbHJsCUxPQ0FMX0hJKCVhMCkKKwltb3ZlbAkjMHg4MDAsTE9DQUxfTE8oJWEwKQl8d2l0aCBsc2Igc2V0CisJb3JsCSN1bmZpbnhfbWFzayxVU0VSX0ZQU1IoJWE2KQorCWJyYQl3cl9ldGVtcAorY3VfZG5kOgorCW1vdmVsCSMweGJjMDEwMDAwLExPQ0FMX0VYKCVhMCkJfGZvcmNlIHBvcyBkb3VibGUgemVybworCWNscmwJTE9DQUxfSEkoJWEwKQorCWNscmwJTE9DQUxfTE8oJWEwKQorCW9ybAkjel9tYXNrLFVTRVJfRlBTUiglYTYpCisJb3JsCSNuZWdfbWFzayxVU0VSX0ZQU1IoJWE2KQorCW9ybAkjdW5maW54X21hc2ssVVNFUl9GUFNSKCVhNikKKwlicmEJd3JfZXRlbXAKK2N1X2RuZHI6CisJbW92ZWwJIzB4YmMwMTAwMDAsTE9DQUxfRVgoJWEwKQl8Zm9yY2UgcG9zIGRvdWJsZSB6ZXJvCisJY2xybAlMT0NBTF9ISSglYTApCisJbW92ZWwJIzB4ODAwLExPQ0FMX0xPKCVhMCkJfHdpdGggbHNiIHNldAorCW9ybAkjbmVnX21hc2ssVVNFUl9GUFNSKCVhNikKKwlvcmwJI3VuZmlueF9tYXNrLFVTRVJfRlBTUiglYTYpCisJYnJhCXdyX2V0ZW1wCit8Cit8IFRoZXNlIHJvdXRpbmVzIHdyaXRlICsvLSB6ZXJvIGluIHNpbmdsZSBmb3JtYXQuICBUaGUgcm91dGluZXMKK3wgY3VfZHBkciBhbmQgY3VfZG5kciBzZXQgdGhlIHNpbmdsZSBsc2IuCit8CitjdV9zcGQ6CisJbW92ZWwJIzB4M2Y4MTAwMDAsTE9DQUxfRVgoJWEwKQl8Zm9yY2UgcG9zIHNpbmdsZSB6ZXJvCisJY2xybAlMT0NBTF9ISSglYTApCisJY2xybAlMT0NBTF9MTyglYTApCisJb3JsCSN6X21hc2ssVVNFUl9GUFNSKCVhNikKKwlvcmwJI3VuZmlueF9tYXNrLFVTRVJfRlBTUiglYTYpCisJYnJhCXdyX2V0ZW1wCitjdV9zcGRyOgorCW1vdmVsCSMweDNmODEwMDAwLExPQ0FMX0VYKCVhMCkJfGZvcmNlIHBvcyBzaW5nbGUgemVybworCW1vdmVsCSMweDEwMCxMT0NBTF9ISSglYTApCXx3aXRoIGxzYiBzZXQKKwljbHJsCUxPQ0FMX0xPKCVhMCkKKwlvcmwJI3VuZmlueF9tYXNrLFVTRVJfRlBTUiglYTYpCisJYnJhCXdyX2V0ZW1wCitjdV9zbmQ6CisJbW92ZWwJIzB4YmY4MTAwMDAsTE9DQUxfRVgoJWEwKQl8Zm9yY2UgcG9zIHNpbmdsZSB6ZXJvCisJY2xybAlMT0NBTF9ISSglYTApCisJY2xybAlMT0NBTF9MTyglYTApCisJb3JsCSN6X21hc2ssVVNFUl9GUFNSKCVhNikKKwlvcmwJI25lZ19tYXNrLFVTRVJfRlBTUiglYTYpCisJb3JsCSN1bmZpbnhfbWFzayxVU0VSX0ZQU1IoJWE2KQorCWJyYQl3cl9ldGVtcAorY3Vfc25kcjoKKwltb3ZlbAkjMHhiZjgxMDAwMCxMT0NBTF9FWCglYTApCXxmb3JjZSBwb3Mgc2luZ2xlIHplcm8KKwltb3ZlbAkjMHgxMDAsTE9DQUxfSEkoJWEwKQl8d2l0aCBsc2Igc2V0CisJY2xybAlMT0NBTF9MTyglYTApCisJb3JsCSNuZWdfbWFzayxVU0VSX0ZQU1IoJWE2KQorCW9ybAkjdW5maW54X21hc2ssVVNFUl9GUFNSKCVhNikKKwlicmEJd3JfZXRlbXAKKworfAorfCBUaGlzIGNvZGUgY2hlY2tzIGZvciAxNi1iaXQgb3ZlcmZsb3cgY29uZGl0aW9ucyBvbiBkeWFkaWMKK3wgb3BlcmF0aW9ucyB3aGljaCBhcmUgbm90IHJlc3RvcmFibGUgaW50byB0aGUgZmxvYXRpbmctcG9pbnQKK3wgdW5pdCBhbmQgbXVzdCBiZSBjb21wbGV0ZWQgaW4gc29mdHdhcmUuICBCYXNpY2FsbHksIHRoaXMKK3wgY29uZGl0aW9uIGV4aXN0cyB3aXRoIGEgdmVyeSBsYXJnZSBub3JtIGFuZCBhIGRlbm9ybS4gIE9uZQorfCBvZiB0aGUgb3BlcmFuZHMgbXVzdCBiZSBkZW5vcm1hbGl6ZWQgdG8gZW50ZXIgdGhpcyBjb2RlLgorfAorfCBGbGFncyB1c2VkOgorfAlEWV9NT19GTEcgY29udGFpbnMgMCBmb3IgbW9uYWRpYyBvcCwgJGZmIGZvciBkeWFkaWMKK3wJRE5STV9GTEcgY29udGFpbnMgJDAwIGZvciBuZWl0aGVyIG9wIGRlbm9ybWFsaXplZAorfAkgICAgICAgICAgICAgICAgICAkMGYgZm9yIHRoZSBkZXN0aW5hdGlvbiBvcCBkZW5vcm1hbGl6ZWQKK3wJICAgICAgICAgICAgICAgICAgJGYwIGZvciB0aGUgc291cmNlIG9wIGRlbm9ybWFsaXplZAorfAkgICAgICAgICAgICAgICAgICAkZmYgZm9yIGJvdGggb3BzIGRlbm9ybWFsaXplZAorfAorfCBUaGUgd3JhcC1hcm91bmQgY29uZGl0aW9uIG9jY3VycyBmb3IgYWRkLCBzdWIsIGRpdiwgYW5kIGNtcAorfCB3aGVuCit8Cit8CWFicyhkZXN0X2V4cCAtIHNyY19leHApID49ICQ4MDAwCit8Cit8IGFuZCBmb3IgbXVsIHdoZW4KK3wKK3wJKGRlc3RfZXhwICsgc3JjX2V4cCkgPCAkMAorfAorfCB3ZSBtdXN0IHByb2Nlc3MgdGhlIG9wZXJhdGlvbiBoZXJlIGlmIHRoaXMgY2FzZSBpcyB0cnVlLgorfAorfCBUaGUgcnRzIGZvbGxvd2luZyB0aGUgZnJjZnBuIHJvdXRpbmUgaXMgdGhlIGV4aXQgZnJvbSByZXNfZnVuYworfCBmb3IgdGhpcyBjb25kaXRpb24uICBUaGUgcmVzdG9yZSBmbGFnIChSRVNfRkxHKSBpcyBsZWZ0IGNsZWFyLgorfCBObyBmcmVzdG9yZSBpcyBkb25lIHVubGVzcyBhbiBleGNlcHRpb24gaXMgdG8gYmUgcmVwb3J0ZWQuCit8Cit8IEZvciBmYWRkOgorfAlpZihzaWduX29mKGRlc3QpICE9IHNpZ25fb2Yoc3JjKSkKK3wJCXJlcGxhY2UgZXhwb25lbnQgb2Ygc3JjIHdpdGggJDNmZmYgKGtlZXAgc2lnbikKK3wJCXVzZSBmcHUgdG8gcGVyZm9ybSBkZXN0K25ld19zcmMgKHVzZXIncyBybW9kZSBhbmQgWCkKK3wJCWNsciBzdGlja3kKK3wJZWxzZQorfAkJc2V0IHN0aWNreQorfAljYWxsIHJvdW5kIHdpdGggdXNlcidzIHByZWNpc2lvbiBhbmQgbW9kZQorfAltb3ZlIHJlc3VsdCB0byBmcG4gYW5kIHdidGVtcAorfAorfCBGb3IgZnN1YjoKK3wJaWYoc2lnbl9vZihkZXN0KSA9PSBzaWduX29mKHNyYykpCit8CQlyZXBsYWNlIGV4cG9uZW50IG9mIHNyYyB3aXRoICQzZmZmIChrZWVwIHNpZ24pCit8CQl1c2UgZnB1IHRvIHBlcmZvcm0gZGVzdCtuZXdfc3JjICh1c2VyJ3Mgcm1vZGUgYW5kIFgpCit8CQljbHIgc3RpY2t5Cit8CWVsc2UKK3wJCXNldCBzdGlja3kKK3wJY2FsbCByb3VuZCB3aXRoIHVzZXIncyBwcmVjaXNpb24gYW5kIG1vZGUKK3wJbW92ZSByZXN1bHQgdG8gZnBuIGFuZCB3YnRlbXAKK3wKK3wgRm9yIGZkaXYvZnNnbGRpdjoKK3wJaWYoYm90aCBvcGVyYW5kcyBhcmUgZGVub3JtKQorfAkJcmVzdG9yZV90b19mcHU7Cit8CWlmKGRlc3QgaXMgbm9ybSkKK3wJCWZvcmNlX292ZjsKK3wJZWxzZShkZXN0IGlzIGRlbm9ybSkKK3wJCWZvcmNlX3VuZjoKK3wKK3wgRm9yIGZjbXA6Cit8CWlmKGRlc3QgaXMgbm9ybSkKK3wJCU4gPSBzaWduX29mKGRlc3QpOworfAllbHNlKGRlc3QgaXMgZGVub3JtKQorfAkJTiA9IHNpZ25fb2Yoc3JjKTsKK3wKK3wgRm9yIGZtdWw6Cit8CWlmKGJvdGggb3BlcmFuZHMgYXJlIGRlbm9ybSkKK3wJCWZvcmNlX3VuZjsKK3wJaWYoKGRlc3RfZXhwICsgc3JjX2V4cCkgPCAwKQorfAkJZm9yY2VfdW5mOgorfAllbHNlCit8CQlyZXN0b3JlX3RvX2ZwdTsKK3wKK3wgbG9jYWwgZXF1YXRlczoKKwkuc2V0CWFkZGNvZGUsMHgyMgorCS5zZXQJc3ViY29kZSwweDI4CisJLnNldAltdWxjb2RlLDB4MjMKKwkuc2V0CWRpdmNvZGUsMHgyMAorCS5zZXQJY21wY29kZSwweDM4Citja193cmFwOgorCXwgdHN0YglEWV9NT19GTEcoJWE2KQk7Y2hlY2sgZm9yIGZzcXJ0CisJYmVxCWZpeF9zdGsJCXxpZiB6ZXJvLCBpdCBpcyBmc3FydAorCW1vdmV3CUNNRFJFRzFCKCVhNiksJWQwCisJYW5kaXcJIzB4M2IsJWQwCQl8c3RyaXAgdG8gY29tbWFuZCBiaXRzCisJY21waXcJI2FkZGNvZGUsJWQwCisJYmVxCXdyYXBfYWRkCisJY21waXcJI3N1YmNvZGUsJWQwCisJYmVxCXdyYXBfc3ViCisJY21waXcJI211bGNvZGUsJWQwCisJYmVxCXdyYXBfbXVsCisJY21waXcJI2NtcGNvZGUsJWQwCisJYmVxCXdyYXBfY21wCit8Cit8IEluc3QgaXMgZmRpdi4KK3wKK3dyYXBfZGl2OgorCWNtcGIJIzB4ZmYsRE5STV9GTEcoJWE2KSB8aWYgYm90aCBvcHMgZGVub3JtLAorCWJlcQlmaXhfc3RrCQkgfHJlc3RvcmUgdG8gZnB1Cit8Cit8IE9uZSBvZiB0aGUgb3BzIGlzIGRlbm9ybWFsaXplZC4gIFRlc3QgZm9yIHdyYXAgY29uZGl0aW9uCit8IGFuZCBmb3JjZSB0aGUgcmVzdWx0LgorfAorCWNtcGIJIzB4MGYsRE5STV9GTEcoJWE2KSB8Y2hlY2sgZm9yIGRlc3QgZGVub3JtCisJYm5lcwlkaXZfc3JjZAorZGl2X2Rlc3RkOgorCWJzcmwJY2tpbmZfbnMKKwlibmUJZml4X3N0aworCWJmZXh0dQlFVEVNUF9FWCglYTYpeyMxOiMxNX0sJWQwCXxnZXQgc3JjIGV4cCAoYWx3YXlzIHBvcykKKwliZmV4dHMJRlBURU1QX0VYKCVhNil7IzE6IzE1fSwlZDEJfGdldCBkZXN0IGV4cCAoYWx3YXlzIG5lZykKKwlzdWJsCSVkMSwlZDAJCQl8c3VidHJhY3QgZGVzdCBmcm9tIHNyYworCWNtcGwJIzB4N2ZmZiwlZDAKKwlibHQJZml4X3N0awkJCXxpZiBsZXNzLCBub3Qgd3JhcCBjYXNlCisJY2xyYglXQlRFTVBfU0dOKCVhNikKKwltb3ZldwlFVEVNUF9FWCglYTYpLCVkMAkJfGZpbmQgdGhlIHNpZ24gb2YgdGhlIHJlc3VsdAorCW1vdmV3CUZQVEVNUF9FWCglYTYpLCVkMQorCWVvcncJJWQxLCVkMAorCWFuZGl3CSMweDgwMDAsJWQwCisJYmVxCWZvcmNlX3VuZgorCXN0CVdCVEVNUF9TR04oJWE2KQorCWJyYQlmb3JjZV91bmYKKworY2tpbmZfbnM6CisJbW92ZWIJU1RBRyglYTYpLCVkMAkJfGNoZWNrIHNvdXJjZSB0YWcgZm9yIGluZiBvciBuYW4KKwlicmEJY2tfaW5fY29tCitja2luZl9uZDoKKwltb3ZlYglEVEFHKCVhNiksJWQwCQl8Y2hlY2sgZGVzdGluYXRpb24gdGFnIGZvciBpbmYgb3IgbmFuCitja19pbl9jb206CisJYW5kaWIJIzB4NjAsJWQwCQkJfGlzb2xhdGUgdGFnIGJpdHMKKwljbXBiCSMweDQwLCVkMAkJCXxpcyBpdCBpbmY/CisJYmVxCW5hbl9vcl9pbmYJCXxub3Qgd3JhcCBjYXNlCisJY21wYgkjMHg2MCwlZDAJCQl8aXMgaXQgbmFuPworCWJlcQluYW5fb3JfaW5mCQl8eWVzLCBub3Qgd3JhcCBjYXNlPworCWNtcGIJIzB4MjAsJWQwCQkJfGlzIGl0IGEgemVybz8KKwliZXEJbmFuX29yX2luZgkJfHllcworCWNscmwJJWQwCisJcnRzCQkJCXx0aGVuIDsgaXQgaXMgZWl0aGVyIGEgemVybyBvZiBub3JtLAorfAkJCQkJO2NoZWNrIHdyYXAgY2FzZQorbmFuX29yX2luZjoKKwltb3ZlcWwJIy0xLCVkMAorCXJ0cworCisKKworZGl2X3NyY2Q6CisJYnNybAlja2luZl9uZAorCWJuZQlmaXhfc3RrCisJYmZleHR1CUZQVEVNUF9FWCglYTYpeyMxOiMxNX0sJWQwCXxnZXQgZGVzdCBleHAgKGFsd2F5cyBwb3MpCisJYmZleHRzCUVURU1QX0VYKCVhNil7IzE6IzE1fSwlZDEJfGdldCBzcmMgZXhwIChhbHdheXMgbmVnKQorCXN1YmwJJWQxLCVkMAkJCXxzdWJ0cmFjdCBzcmMgZnJvbSBkZXN0CisJY21wbAkjMHg4MDAwLCVkMAorCWJsdAlmaXhfc3RrCQkJfGlmIGxlc3MsIG5vdCB3cmFwIGNhc2UKKwljbHJiCVdCVEVNUF9TR04oJWE2KQorCW1vdmV3CUVURU1QX0VYKCVhNiksJWQwCQl8ZmluZCB0aGUgc2lnbiBvZiB0aGUgcmVzdWx0CisJbW92ZXcJRlBURU1QX0VYKCVhNiksJWQxCisJZW9ydwklZDEsJWQwCisJYW5kaXcJIzB4ODAwMCwlZDAKKwliZXFzCWZvcmNlX292ZgorCXN0CVdCVEVNUF9TR04oJWE2KQorfAorfCBUaGlzIGNvZGUgaGFuZGxlcyB0aGUgY2FzZSBvZiB0aGUgaW5zdHJ1Y3Rpb24gcmVzdWx0aW5nIGluCit8IGFuIG92ZXJmbG93IGNvbmRpdGlvbi4KK3wKK2ZvcmNlX292ZjoKKwliY2xyYgkjRTEsRV9CWVRFKCVhNikKKwlvcmwJI292ZmxfaW54X21hc2ssVVNFUl9GUFNSKCVhNikKKwljbHJ3CU5NTkVYQyglYTYpCisJbGVhbAlXQlRFTVAoJWE2KSwlYTAJCXxwb2ludCBhMCB0byBtZW1vcnkgbG9jYXRpb24KKwltb3ZldwlDTURSRUcxQiglYTYpLCVkMAorCWJ0c3RsCSM2LCVkMAkJCXx0ZXN0IGZvciBmb3JjZWQgcHJlY2lzaW9uCisJYmVxcwlmcmNvdmZfZnBjcgorCWJ0c3RsCSMyLCVkMAkJCXxjaGVjayBmb3IgZG91YmxlCisJYm5lcwlmcmNvdmZfZGJsCisJbW92ZWwJIzB4MSwlZDAJCQl8aW5zdCBpcyBmb3JjZWQgc2luZ2xlCisJYnJhcwlmcmNvdmZfcm5kCitmcmNvdmZfZGJsOgorCW1vdmVsCSMweDIsJWQwCQkJfGluc3QgaXMgZm9yY2VkIGRvdWJsZQorCWJyYXMJZnJjb3ZmX3JuZAorZnJjb3ZmX2ZwY3I6CisJYmZleHR1CUZQQ1JfTU9ERSglYTYpeyMwOiMyfSwlZDAJfGluc3Qgbm90IGZvcmNlZCAtIHVzZSBmcGNyIHByZWMKK2ZyY292Zl9ybmQ6CisKK3wgVGhlIDg4MS84ODIgZG9lcyBub3Qgc2V0IGluZXgyIGZvciB0aGUgZm9sbG93aW5nIGNhc2UsIHNvIHRoZQorfCBsaW5lIGlzIGNvbW1lbnRlZCBvdXQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIDg4MS84ODIKK3wJdHN0LmIJJWQwCit8CWJlcS5iCWZyY292Zl94Cit8CW9yLmwJI2luZXgyX21hc2ssVVNFUl9GUFNSKCVhNikgO2lmIHByZWMgaXMgcyBvciBkLCBzZXQgaW5leDIKKworfGZyY292Zl94OgorCWJzcmwJb3ZmX3JlcwkJCXxnZXQgY29ycmVjdCByZXN1bHQgYmFzZWQgb24KK3wJCQkJCTtyb3VuZCBwcmVjaXNpb24vbW9kZS4gIFRoaXMKK3wJCQkJCTtzZXRzIEZQU1JfQ0MgY29ycmVjdGx5Cit8CQkJCQk7cmV0dXJucyBpbiBleHRlcm5hbCBmb3JtYXQKKwliZmNscglXQlRFTVBfU0dOKCVhNil7IzA6Izh9CisJYmVxCWZyY2ZwbgorCWJzZXRiCSNzaWduX2JpdCxXQlRFTVBfRVgoJWE2KQorCWJyYQlmcmNmcG4KK3wKK3wgSW5zdCBpcyBmYWRkLgorfAord3JhcF9hZGQ6CisJY21wYgkjMHhmZixETlJNX0ZMRyglYTYpIHxpZiBib3RoIG9wcyBkZW5vcm0sCisJYmVxCWZpeF9zdGsJCSB8cmVzdG9yZSB0byBmcHUKK3wKK3wgT25lIG9mIHRoZSBvcHMgaXMgZGVub3JtYWxpemVkLiAgVGVzdCBmb3Igd3JhcCBjb25kaXRpb24KK3wgYW5kIGNvbXBsZXRlIHRoZSBpbnN0cnVjdGlvbi4KK3wKKwljbXBiCSMweDBmLEROUk1fRkxHKCVhNikgfGNoZWNrIGZvciBkZXN0IGRlbm9ybQorCWJuZXMJYWRkX3NyY2QKK2FkZF9kZXN0ZDoKKwlic3JsCWNraW5mX25zCisJYm5lCWZpeF9zdGsKKwliZmV4dHUJRVRFTVBfRVgoJWE2KXsjMTojMTV9LCVkMAl8Z2V0IHNyYyBleHAgKGFsd2F5cyBwb3MpCisJYmZleHRzCUZQVEVNUF9FWCglYTYpeyMxOiMxNX0sJWQxCXxnZXQgZGVzdCBleHAgKGFsd2F5cyBuZWcpCisJc3VibAklZDEsJWQwCQkJfHN1YnRyYWN0IGRlc3QgZnJvbSBzcmMKKwljbXBsCSMweDgwMDAsJWQwCisJYmx0CWZpeF9zdGsJCQl8aWYgbGVzcywgbm90IHdyYXAgY2FzZQorCWJyYQlhZGRfd3JhcAorYWRkX3NyY2Q6CisJYnNybAlja2luZl9uZAorCWJuZQlmaXhfc3RrCisJYmZleHR1CUZQVEVNUF9FWCglYTYpeyMxOiMxNX0sJWQwCXxnZXQgZGVzdCBleHAgKGFsd2F5cyBwb3MpCisJYmZleHRzCUVURU1QX0VYKCVhNil7IzE6IzE1fSwlZDEJfGdldCBzcmMgZXhwIChhbHdheXMgbmVnKQorCXN1YmwJJWQxLCVkMAkJCXxzdWJ0cmFjdCBzcmMgZnJvbSBkZXN0CisJY21wbAkjMHg4MDAwLCVkMAorCWJsdAlmaXhfc3RrCQkJfGlmIGxlc3MsIG5vdCB3cmFwIGNhc2UKK3wKK3wgQ2hlY2sgdGhlIHNpZ25zIG9mIHRoZSBvcGVyYW5kcy4gIElmIHRoZXkgYXJlIHVubGlrZSwgdGhlIGZwdQorfCBjYW4gYmUgdXNlZCB0byBhZGQgdGhlIG5vcm0gYW5kIDEuMCB3aXRoIHRoZSBzaWduIG9mIHRoZQorfCBkZW5vcm0gYW5kIGl0IHdpbGwgY29ycmVjdGx5IGdlbmVyYXRlIHRoZSByZXN1bHQgaW4gZXh0ZW5kZWQKK3wgcHJlY2lzaW9uLiAgV2UgY2FuIHRoZW4gY2FsbCByb3VuZCB3aXRoIG5vIHN0aWNreSBhbmQgdGhlIHJlc3VsdAorfCB3aWxsIGJlIGNvcnJlY3QgZm9yIHRoZSB1c2VyJ3Mgcm91bmRpbmcgbW9kZSBhbmQgcHJlY2lzaW9uLiAgSWYKK3wgdGhlIHNpZ25zIGFyZSB0aGUgc2FtZSwgd2UgY2FsbCByb3VuZCB3aXRoIHRoZSBzdGlja3kgYml0IHNldAorfCBhbmQgdGhlIHJlc3VsdCB3aWxsIGJlIGNvcnJlY3QgZm9yIHRoZSB1c2VyJ3Mgcm91bmRpbmcgbW9kZSBhbmQKK3wgcHJlY2lzaW9uLgorfAorYWRkX3dyYXA6CisJbW92ZXcJRVRFTVBfRVgoJWE2KSwlZDAKKwltb3ZldwlGUFRFTVBfRVgoJWE2KSwlZDEKKwllb3J3CSVkMSwlZDAKKwlhbmRpdwkjMHg4MDAwLCVkMAorCWJlcQlhZGRfc2FtZQorfAorfCBUaGUgc2lnbnMgYXJlIHVubGlrZS4KK3wKKwljbXBiCSMweDBmLEROUk1fRkxHKCVhNikgfGlzIGRlc3QgdGhlIGRlbm9ybT8KKwlibmVzCWFkZF91X3NyY2QKKwltb3ZldwlGUFRFTVBfRVgoJWE2KSwlZDAKKwlhbmRpdwkjMHg4MDAwLCVkMAorCW9ydwkjMHgzZmZmLCVkMAl8Zm9yY2UgdGhlIGV4cG9uZW50IHRvICsvLSAxCisJbW92ZXcJJWQwLEZQVEVNUF9FWCglYTYpIHxpbiB0aGUgZGVub3JtCisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQwCisJYW5kaWwJIzB4MzAsJWQwCisJZm1vdmVsCSVkMCwlZnBjcgkJfHNldCB1cCB1c2VycyBybW9kZSBhbmQgWAorCWZtb3ZleAlFVEVNUCglYTYpLCVmcDAKKwlmYWRkeAlGUFRFTVAoJWE2KSwlZnAwCisJbGVhbAlXQlRFTVAoJWE2KSwlYTAJfHBvaW50IGEwIHRvIHdidGVtcCBpbiBmcmFtZQorCWZtb3ZlbAklZnBzciwlZDEKKwlvcmwJJWQxLFVTRVJfRlBTUiglYTYpIHxjYXB0dXJlIGNjJ3MgYW5kIGluZXggZnJvbSBmYWRkCisJZm1vdmV4CSVmcDAsV0JURU1QKCVhNikJfHdyaXRlIHJlc3VsdCB0byBtZW1vcnkKKwlsc3JsCSM0LCVkMAkJfHB1dCBybW9kZSBpbiBsb3dlciAyIGJpdHMKKwltb3ZlbAlVU0VSX0ZQQ1IoJWE2KSwlZDEKKwlhbmRpbAkjMHhjMCwlZDEKKwlsc3JsCSM2LCVkMQkJfHB1dCBwcmVjaXNpb24gaW4gdXBwZXIgd29yZAorCXN3YXAJJWQxCisJb3JsCSVkMCwlZDEJCXxzZXQgdXAgZm9yIHJvdW5kIGNhbGwKKwljbHJsCSVkMAkJfGZvcmNlIHN0aWNreSB0byB6ZXJvCisJYmNscmIJI3NpZ25fYml0LFdCVEVNUF9FWCglYTYpCisJc25lCVdCVEVNUF9TR04oJWE2KQorCWJzcmwJcm91bmQJCXxyb3VuZCByZXN1bHQgdG8gdXNlcnMgcm1vZGUgJiBwcmVjCisJYmZjbHIJV0JURU1QX1NHTiglYTYpeyMwOiM4fQl8Y29udmVydCBiYWNrIHRvIElFRUUgZXh0IGZvcm1hdAorCWJlcQlmcmNmcG5yCisJYnNldGIJI3NpZ25fYml0LFdCVEVNUF9FWCglYTYpCisJYnJhCWZyY2ZwbnIKK2FkZF91X3NyY2Q6CisJbW92ZXcJRVRFTVBfRVgoJWE2KSwlZDAKKwlhbmRpdwkjMHg4MDAwLCVkMAorCW9ydwkjMHgzZmZmLCVkMAl8Zm9yY2UgdGhlIGV4cG9uZW50IHRvICsvLSAxCisJbW92ZXcJJWQwLEVURU1QX0VYKCVhNikgfGluIHRoZSBkZW5vcm0KKwltb3ZlbAlVU0VSX0ZQQ1IoJWE2KSwlZDAKKwlhbmRpbAkjMHgzMCwlZDAKKwlmbW92ZWwJJWQwLCVmcGNyCQl8c2V0IHVwIHVzZXJzIHJtb2RlIGFuZCBYCisJZm1vdmV4CUVURU1QKCVhNiksJWZwMAorCWZhZGR4CUZQVEVNUCglYTYpLCVmcDAKKwlmbW92ZWwJJWZwc3IsJWQxCisJb3JsCSVkMSxVU0VSX0ZQU1IoJWE2KSB8Y2FwdHVyZSBjYydzIGFuZCBpbmV4IGZyb20gZmFkZAorCWxlYWwJV0JURU1QKCVhNiksJWEwCXxwb2ludCBhMCB0byB3YnRlbXAgaW4gZnJhbWUKKwlmbW92ZXgJJWZwMCxXQlRFTVAoJWE2KQl8d3JpdGUgcmVzdWx0IHRvIG1lbW9yeQorCWxzcmwJIzQsJWQwCQl8cHV0IHJtb2RlIGluIGxvd2VyIDIgYml0cworCW1vdmVsCVVTRVJfRlBDUiglYTYpLCVkMQorCWFuZGlsCSMweGMwLCVkMQorCWxzcmwJIzYsJWQxCQl8cHV0IHByZWNpc2lvbiBpbiB1cHBlciB3b3JkCisJc3dhcAklZDEKKwlvcmwJJWQwLCVkMQkJfHNldCB1cCBmb3Igcm91bmQgY2FsbAorCWNscmwJJWQwCQl8Zm9yY2Ugc3RpY2t5IHRvIHplcm8KKwliY2xyYgkjc2lnbl9iaXQsV0JURU1QX0VYKCVhNikKKwlzbmUJV0JURU1QX1NHTiglYTYpCXx1c2UgaW50ZXJuYWwgZm9ybWF0IGZvciByb3VuZAorCWJzcmwJcm91bmQJCXxyb3VuZCByZXN1bHQgdG8gdXNlcnMgcm1vZGUgJiBwcmVjCisJYmZjbHIJV0JURU1QX1NHTiglYTYpeyMwOiM4fQl8Y29udmVydCBiYWNrIHRvIElFRUUgZXh0IGZvcm1hdAorCWJlcQlmcmNmcG5yCisJYnNldGIJI3NpZ25fYml0LFdCVEVNUF9FWCglYTYpCisJYnJhCWZyY2ZwbnIKK3wKK3wgU2lnbnMgYXJlIGFsaWtlOgorfAorYWRkX3NhbWU6CisJY21wYgkjMHgwZixETlJNX0ZMRyglYTYpIHxpcyBkZXN0IHRoZSBkZW5vcm0/CisJYm5lcwlhZGRfc19zcmNkCithZGRfc19kZXN0ZDoKKwlsZWFsCUVURU1QKCVhNiksJWEwCisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQwCisJYW5kaWwJIzB4MzAsJWQwCisJbHNybAkjNCwlZDAJCXxwdXQgcm1vZGUgaW4gbG93ZXIgMiBiaXRzCisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQxCisJYW5kaWwJIzB4YzAsJWQxCisJbHNybAkjNiwlZDEJCXxwdXQgcHJlY2lzaW9uIGluIHVwcGVyIHdvcmQKKwlzd2FwCSVkMQorCW9ybAklZDAsJWQxCQl8c2V0IHVwIGZvciByb3VuZCBjYWxsCisJbW92ZWwJIzB4MjAwMDAwMDAsJWQwCXxzZXQgc3RpY2t5IGZvciByb3VuZAorCWJjbHJiCSNzaWduX2JpdCxFVEVNUF9FWCglYTYpCisJc25lCUVURU1QX1NHTiglYTYpCisJYnNybAlyb3VuZAkJfHJvdW5kIHJlc3VsdCB0byB1c2VycyBybW9kZSAmIHByZWMKKwliZmNscglFVEVNUF9TR04oJWE2KXsjMDojOH0JfGNvbnZlcnQgYmFjayB0byBJRUVFIGV4dCBmb3JtYXQKKwliZXFzCWFkZF9zX2RjbHIKKwlic2V0Ygkjc2lnbl9iaXQsRVRFTVBfRVgoJWE2KQorYWRkX3NfZGNscjoKKwlsZWFsCVdCVEVNUCglYTYpLCVhMAorCW1vdmVsCUVURU1QKCVhNiksKCVhMCkJfHdyaXRlIHJlc3VsdCB0byB3YnRlbXAKKwltb3ZlbAlFVEVNUF9ISSglYTYpLDQoJWEwKQorCW1vdmVsCUVURU1QX0xPKCVhNiksOCglYTApCisJdHN0dwlFVEVNUF9FWCglYTYpCisJYmd0CWFkZF9ja292ZgorCW9ybAkjbmVnX21hc2ssVVNFUl9GUFNSKCVhNikKKwlicmEJYWRkX2Nrb3ZmCithZGRfc19zcmNkOgorCWxlYWwJRlBURU1QKCVhNiksJWEwCisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQwCisJYW5kaWwJIzB4MzAsJWQwCisJbHNybAkjNCwlZDAJCXxwdXQgcm1vZGUgaW4gbG93ZXIgMiBiaXRzCisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQxCisJYW5kaWwJIzB4YzAsJWQxCisJbHNybAkjNiwlZDEJCXxwdXQgcHJlY2lzaW9uIGluIHVwcGVyIHdvcmQKKwlzd2FwCSVkMQorCW9ybAklZDAsJWQxCQl8c2V0IHVwIGZvciByb3VuZCBjYWxsCisJbW92ZWwJIzB4MjAwMDAwMDAsJWQwCXxzZXQgc3RpY2t5IGZvciByb3VuZAorCWJjbHJiCSNzaWduX2JpdCxGUFRFTVBfRVgoJWE2KQorCXNuZQlGUFRFTVBfU0dOKCVhNikKKwlic3JsCXJvdW5kCQl8cm91bmQgcmVzdWx0IHRvIHVzZXJzIHJtb2RlICYgcHJlYworCWJmY2xyCUZQVEVNUF9TR04oJWE2KXsjMDojOH0JfGNvbnZlcnQgYmFjayB0byBJRUVFIGV4dCBmb3JtYXQKKwliZXFzCWFkZF9zX3NjbHIKKwlic2V0Ygkjc2lnbl9iaXQsRlBURU1QX0VYKCVhNikKK2FkZF9zX3NjbHI6CisJbGVhbAlXQlRFTVAoJWE2KSwlYTAKKwltb3ZlbAlGUFRFTVAoJWE2KSwoJWEwKQl8d3JpdGUgcmVzdWx0IHRvIHdidGVtcAorCW1vdmVsCUZQVEVNUF9ISSglYTYpLDQoJWEwKQorCW1vdmVsCUZQVEVNUF9MTyglYTYpLDgoJWEwKQorCXRzdHcJRlBURU1QX0VYKCVhNikKKwliZ3QJYWRkX2Nrb3ZmCisJb3JsCSNuZWdfbWFzayxVU0VSX0ZQU1IoJWE2KQorYWRkX2Nrb3ZmOgorCW1vdmV3CVdCVEVNUF9FWCglYTYpLCVkMAorCWFuZGl3CSMweDdmZmYsJWQwCisJY21waXcJIzB4N2ZmZiwlZDAKKwlibmUJZnJjZnBucgorfAorfCBUaGUgcmVzdWx0IGhhcyBvdmVyZmxvd2VkIHRvICQ3ZmZmIGV4cG9uZW50LiAgU2V0IEksIG92ZmwsCit8IGFuZCBhb3ZmbCwgYW5kIGNsciB0aGUgbWFudGlzc2EgKGluY29ycmVjdGx5IHNldCBieSB0aGUKK3wgcm91bmQgcm91dGluZS4pCit8CisJb3JsCSNpbmZfbWFzaytvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpCisJY2xybAk0KCVhMCkKKwlicmEJZnJjZnBucgorfAorfCBJbnN0IGlzIGZzdWIuCit8Cit3cmFwX3N1YjoKKwljbXBiCSMweGZmLEROUk1fRkxHKCVhNikgfGlmIGJvdGggb3BzIGRlbm9ybSwKKwliZXEJZml4X3N0awkJIHxyZXN0b3JlIHRvIGZwdQorfAorfCBPbmUgb2YgdGhlIG9wcyBpcyBkZW5vcm1hbGl6ZWQuICBUZXN0IGZvciB3cmFwIGNvbmRpdGlvbgorfCBhbmQgY29tcGxldGUgdGhlIGluc3RydWN0aW9uLgorfAorCWNtcGIJIzB4MGYsRE5STV9GTEcoJWE2KSB8Y2hlY2sgZm9yIGRlc3QgZGVub3JtCisJYm5lcwlzdWJfc3JjZAorc3ViX2Rlc3RkOgorCWJzcmwJY2tpbmZfbnMKKwlibmUJZml4X3N0aworCWJmZXh0dQlFVEVNUF9FWCglYTYpeyMxOiMxNX0sJWQwCXxnZXQgc3JjIGV4cCAoYWx3YXlzIHBvcykKKwliZmV4dHMJRlBURU1QX0VYKCVhNil7IzE6IzE1fSwlZDEJfGdldCBkZXN0IGV4cCAoYWx3YXlzIG5lZykKKwlzdWJsCSVkMSwlZDAJCQl8c3VidHJhY3Qgc3JjIGZyb20gZGVzdAorCWNtcGwJIzB4ODAwMCwlZDAKKwlibHQJZml4X3N0awkJCXxpZiBsZXNzLCBub3Qgd3JhcCBjYXNlCisJYnJhCXN1Yl93cmFwCitzdWJfc3JjZDoKKwlic3JsCWNraW5mX25kCisJYm5lCWZpeF9zdGsKKwliZmV4dHUJRlBURU1QX0VYKCVhNil7IzE6IzE1fSwlZDAJfGdldCBkZXN0IGV4cCAoYWx3YXlzIHBvcykKKwliZmV4dHMJRVRFTVBfRVgoJWE2KXsjMTojMTV9LCVkMQl8Z2V0IHNyYyBleHAgKGFsd2F5cyBuZWcpCisJc3VibAklZDEsJWQwCQkJfHN1YnRyYWN0IGRlc3QgZnJvbSBzcmMKKwljbXBsCSMweDgwMDAsJWQwCisJYmx0CWZpeF9zdGsJCQl8aWYgbGVzcywgbm90IHdyYXAgY2FzZQorfAorfCBDaGVjayB0aGUgc2lnbnMgb2YgdGhlIG9wZXJhbmRzLiAgSWYgdGhleSBhcmUgYWxpa2UsIHRoZSBmcHUKK3wgY2FuIGJlIHVzZWQgdG8gc3VidHJhY3QgZnJvbSB0aGUgbm9ybSAxLjAgd2l0aCB0aGUgc2lnbiBvZiB0aGUKK3wgZGVub3JtIGFuZCBpdCB3aWxsIGNvcnJlY3RseSBnZW5lcmF0ZSB0aGUgcmVzdWx0IGluIGV4dGVuZGVkCit8IHByZWNpc2lvbi4gIFdlIGNhbiB0aGVuIGNhbGwgcm91bmQgd2l0aCBubyBzdGlja3kgYW5kIHRoZSByZXN1bHQKK3wgd2lsbCBiZSBjb3JyZWN0IGZvciB0aGUgdXNlcidzIHJvdW5kaW5nIG1vZGUgYW5kIHByZWNpc2lvbi4gIElmCit8IHRoZSBzaWducyBhcmUgdW5saWtlLCB3ZSBjYWxsIHJvdW5kIHdpdGggdGhlIHN0aWNreSBiaXQgc2V0Cit8IGFuZCB0aGUgcmVzdWx0IHdpbGwgYmUgY29ycmVjdCBmb3IgdGhlIHVzZXIncyByb3VuZGluZyBtb2RlIGFuZAorfCBwcmVjaXNpb24uCit8CitzdWJfd3JhcDoKKwltb3ZldwlFVEVNUF9FWCglYTYpLCVkMAorCW1vdmV3CUZQVEVNUF9FWCglYTYpLCVkMQorCWVvcncJJWQxLCVkMAorCWFuZGl3CSMweDgwMDAsJWQwCisJYm5lCXN1Yl9kaWZmCit8Cit8IFRoZSBzaWducyBhcmUgYWxpa2UuCit8CisJY21wYgkjMHgwZixETlJNX0ZMRyglYTYpIHxpcyBkZXN0IHRoZSBkZW5vcm0/CisJYm5lcwlzdWJfdV9zcmNkCisJbW92ZXcJRlBURU1QX0VYKCVhNiksJWQwCisJYW5kaXcJIzB4ODAwMCwlZDAKKwlvcncJIzB4M2ZmZiwlZDAJfGZvcmNlIHRoZSBleHBvbmVudCB0byArLy0gMQorCW1vdmV3CSVkMCxGUFRFTVBfRVgoJWE2KSB8aW4gdGhlIGRlbm9ybQorCW1vdmVsCVVTRVJfRlBDUiglYTYpLCVkMAorCWFuZGlsCSMweDMwLCVkMAorCWZtb3ZlbAklZDAsJWZwY3IJCXxzZXQgdXAgdXNlcnMgcm1vZGUgYW5kIFgKKwlmbW92ZXgJRlBURU1QKCVhNiksJWZwMAorCWZzdWJ4CUVURU1QKCVhNiksJWZwMAorCWZtb3ZlbAklZnBzciwlZDEKKwlvcmwJJWQxLFVTRVJfRlBTUiglYTYpIHxjYXB0dXJlIGNjJ3MgYW5kIGluZXggZnJvbSBmYWRkCisJbGVhbAlXQlRFTVAoJWE2KSwlYTAJfHBvaW50IGEwIHRvIHdidGVtcCBpbiBmcmFtZQorCWZtb3ZleAklZnAwLFdCVEVNUCglYTYpCXx3cml0ZSByZXN1bHQgdG8gbWVtb3J5CisJbHNybAkjNCwlZDAJCXxwdXQgcm1vZGUgaW4gbG93ZXIgMiBiaXRzCisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQxCisJYW5kaWwJIzB4YzAsJWQxCisJbHNybAkjNiwlZDEJCXxwdXQgcHJlY2lzaW9uIGluIHVwcGVyIHdvcmQKKwlzd2FwCSVkMQorCW9ybAklZDAsJWQxCQl8c2V0IHVwIGZvciByb3VuZCBjYWxsCisJY2xybAklZDAJCXxmb3JjZSBzdGlja3kgdG8gemVybworCWJjbHJiCSNzaWduX2JpdCxXQlRFTVBfRVgoJWE2KQorCXNuZQlXQlRFTVBfU0dOKCVhNikKKwlic3JsCXJvdW5kCQl8cm91bmQgcmVzdWx0IHRvIHVzZXJzIHJtb2RlICYgcHJlYworCWJmY2xyCVdCVEVNUF9TR04oJWE2KXsjMDojOH0JfGNvbnZlcnQgYmFjayB0byBJRUVFIGV4dCBmb3JtYXQKKwliZXEJZnJjZnBucgorCWJzZXRiCSNzaWduX2JpdCxXQlRFTVBfRVgoJWE2KQorCWJyYQlmcmNmcG5yCitzdWJfdV9zcmNkOgorCW1vdmV3CUVURU1QX0VYKCVhNiksJWQwCisJYW5kaXcJIzB4ODAwMCwlZDAKKwlvcncJIzB4M2ZmZiwlZDAJfGZvcmNlIHRoZSBleHBvbmVudCB0byArLy0gMQorCW1vdmV3CSVkMCxFVEVNUF9FWCglYTYpIHxpbiB0aGUgZGVub3JtCisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQwCisJYW5kaWwJIzB4MzAsJWQwCisJZm1vdmVsCSVkMCwlZnBjcgkJfHNldCB1cCB1c2VycyBybW9kZSBhbmQgWAorCWZtb3ZleAlGUFRFTVAoJWE2KSwlZnAwCisJZnN1YngJRVRFTVAoJWE2KSwlZnAwCisJZm1vdmVsCSVmcHNyLCVkMQorCW9ybAklZDEsVVNFUl9GUFNSKCVhNikgfGNhcHR1cmUgY2MncyBhbmQgaW5leCBmcm9tIGZhZGQKKwlsZWFsCVdCVEVNUCglYTYpLCVhMAl8cG9pbnQgYTAgdG8gd2J0ZW1wIGluIGZyYW1lCisJZm1vdmV4CSVmcDAsV0JURU1QKCVhNikJfHdyaXRlIHJlc3VsdCB0byBtZW1vcnkKKwlsc3JsCSM0LCVkMAkJfHB1dCBybW9kZSBpbiBsb3dlciAyIGJpdHMKKwltb3ZlbAlVU0VSX0ZQQ1IoJWE2KSwlZDEKKwlhbmRpbAkjMHhjMCwlZDEKKwlsc3JsCSM2LCVkMQkJfHB1dCBwcmVjaXNpb24gaW4gdXBwZXIgd29yZAorCXN3YXAJJWQxCisJb3JsCSVkMCwlZDEJCXxzZXQgdXAgZm9yIHJvdW5kIGNhbGwKKwljbHJsCSVkMAkJfGZvcmNlIHN0aWNreSB0byB6ZXJvCisJYmNscmIJI3NpZ25fYml0LFdCVEVNUF9FWCglYTYpCisJc25lCVdCVEVNUF9TR04oJWE2KQorCWJzcmwJcm91bmQJCXxyb3VuZCByZXN1bHQgdG8gdXNlcnMgcm1vZGUgJiBwcmVjCisJYmZjbHIJV0JURU1QX1NHTiglYTYpeyMwOiM4fQl8Y29udmVydCBiYWNrIHRvIElFRUUgZXh0IGZvcm1hdAorCWJlcQlmcmNmcG5yCisJYnNldGIJI3NpZ25fYml0LFdCVEVNUF9FWCglYTYpCisJYnJhCWZyY2ZwbnIKK3wKK3wgU2lnbnMgYXJlIHVubGlrZToKK3wKK3N1Yl9kaWZmOgorCWNtcGIJIzB4MGYsRE5STV9GTEcoJWE2KSB8aXMgZGVzdCB0aGUgZGVub3JtPworCWJuZXMJc3ViX3Nfc3JjZAorc3ViX3NfZGVzdGQ6CisJbGVhbAlFVEVNUCglYTYpLCVhMAorCW1vdmVsCVVTRVJfRlBDUiglYTYpLCVkMAorCWFuZGlsCSMweDMwLCVkMAorCWxzcmwJIzQsJWQwCQl8cHV0IHJtb2RlIGluIGxvd2VyIDIgYml0cworCW1vdmVsCVVTRVJfRlBDUiglYTYpLCVkMQorCWFuZGlsCSMweGMwLCVkMQorCWxzcmwJIzYsJWQxCQl8cHV0IHByZWNpc2lvbiBpbiB1cHBlciB3b3JkCisJc3dhcAklZDEKKwlvcmwJJWQwLCVkMQkJfHNldCB1cCBmb3Igcm91bmQgY2FsbAorCW1vdmVsCSMweDIwMDAwMDAwLCVkMAl8c2V0IHN0aWNreSBmb3Igcm91bmQKK3wKK3wgU2luY2UgdGhlIGRlc3QgaXMgdGhlIGRlbm9ybSwgdGhlIHNpZ24gaXMgdGhlIG9wcG9zaXRlIG9mIHRoZQorfCBub3JtIHNpZ24uCit8CisJZW9yaXcJIzB4ODAwMCxFVEVNUF9FWCglYTYpCXxmbGlwIHNpZ24gb24gcmVzdWx0CisJdHN0dwlFVEVNUF9FWCglYTYpCisJYmd0cwlzdWJfc19kd3IKKwlvcmwJI25lZ19tYXNrLFVTRVJfRlBTUiglYTYpCitzdWJfc19kd3I6CisJYmNscmIJI3NpZ25fYml0LEVURU1QX0VYKCVhNikKKwlzbmUJRVRFTVBfU0dOKCVhNikKKwlic3JsCXJvdW5kCQl8cm91bmQgcmVzdWx0IHRvIHVzZXJzIHJtb2RlICYgcHJlYworCWJmY2xyCUVURU1QX1NHTiglYTYpeyMwOiM4fQl8Y29udmVydCBiYWNrIHRvIElFRUUgZXh0IGZvcm1hdAorCWJlcXMJc3ViX3NfZGNscgorCWJzZXRiCSNzaWduX2JpdCxFVEVNUF9FWCglYTYpCitzdWJfc19kY2xyOgorCWxlYWwJV0JURU1QKCVhNiksJWEwCisJbW92ZWwJRVRFTVAoJWE2KSwoJWEwKQl8d3JpdGUgcmVzdWx0IHRvIHdidGVtcAorCW1vdmVsCUVURU1QX0hJKCVhNiksNCglYTApCisJbW92ZWwJRVRFTVBfTE8oJWE2KSw4KCVhMCkKKwlicmEJc3ViX2Nrb3ZmCitzdWJfc19zcmNkOgorCWxlYWwJRlBURU1QKCVhNiksJWEwCisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQwCisJYW5kaWwJIzB4MzAsJWQwCisJbHNybAkjNCwlZDAJCXxwdXQgcm1vZGUgaW4gbG93ZXIgMiBiaXRzCisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQxCisJYW5kaWwJIzB4YzAsJWQxCisJbHNybAkjNiwlZDEJCXxwdXQgcHJlY2lzaW9uIGluIHVwcGVyIHdvcmQKKwlzd2FwCSVkMQorCW9ybAklZDAsJWQxCQl8c2V0IHVwIGZvciByb3VuZCBjYWxsCisJbW92ZWwJIzB4MjAwMDAwMDAsJWQwCXxzZXQgc3RpY2t5IGZvciByb3VuZAorCWJjbHJiCSNzaWduX2JpdCxGUFRFTVBfRVgoJWE2KQorCXNuZQlGUFRFTVBfU0dOKCVhNikKKwlic3JsCXJvdW5kCQl8cm91bmQgcmVzdWx0IHRvIHVzZXJzIHJtb2RlICYgcHJlYworCWJmY2xyCUZQVEVNUF9TR04oJWE2KXsjMDojOH0JfGNvbnZlcnQgYmFjayB0byBJRUVFIGV4dCBmb3JtYXQKKwliZXFzCXN1Yl9zX3NjbHIKKwlic2V0Ygkjc2lnbl9iaXQsRlBURU1QX0VYKCVhNikKK3N1Yl9zX3NjbHI6CisJbGVhbAlXQlRFTVAoJWE2KSwlYTAKKwltb3ZlbAlGUFRFTVAoJWE2KSwoJWEwKQl8d3JpdGUgcmVzdWx0IHRvIHdidGVtcAorCW1vdmVsCUZQVEVNUF9ISSglYTYpLDQoJWEwKQorCW1vdmVsCUZQVEVNUF9MTyglYTYpLDgoJWEwKQorCXRzdHcJRlBURU1QX0VYKCVhNikKKwliZ3QJc3ViX2Nrb3ZmCisJb3JsCSNuZWdfbWFzayxVU0VSX0ZQU1IoJWE2KQorc3ViX2Nrb3ZmOgorCW1vdmV3CVdCVEVNUF9FWCglYTYpLCVkMAorCWFuZGl3CSMweDdmZmYsJWQwCisJY21waXcJIzB4N2ZmZiwlZDAKKwlibmUJZnJjZnBucgorfAorfCBUaGUgcmVzdWx0IGhhcyBvdmVyZmxvd2VkIHRvICQ3ZmZmIGV4cG9uZW50LiAgU2V0IEksIG92ZmwsCit8IGFuZCBhb3ZmbCwgYW5kIGNsciB0aGUgbWFudGlzc2EgKGluY29ycmVjdGx5IHNldCBieSB0aGUKK3wgcm91bmQgcm91dGluZS4pCit8CisJb3JsCSNpbmZfbWFzaytvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpCisJY2xybAk0KCVhMCkKKwlicmEJZnJjZnBucgorfAorfCBJbnN0IGlzIGZjbXAuCit8Cit3cmFwX2NtcDoKKwljbXBiCSMweGZmLEROUk1fRkxHKCVhNikgfGlmIGJvdGggb3BzIGRlbm9ybSwKKwliZXEJZml4X3N0awkJIHxyZXN0b3JlIHRvIGZwdQorfAorfCBPbmUgb2YgdGhlIG9wcyBpcyBkZW5vcm1hbGl6ZWQuICBUZXN0IGZvciB3cmFwIGNvbmRpdGlvbgorfCBhbmQgY29tcGxldGUgdGhlIGluc3RydWN0aW9uLgorfAorCWNtcGIJIzB4MGYsRE5STV9GTEcoJWE2KSB8Y2hlY2sgZm9yIGRlc3QgZGVub3JtCisJYm5lcwljbXBfc3JjZAorY21wX2Rlc3RkOgorCWJzcmwJY2tpbmZfbnMKKwlibmUJZml4X3N0aworCWJmZXh0dQlFVEVNUF9FWCglYTYpeyMxOiMxNX0sJWQwCXxnZXQgc3JjIGV4cCAoYWx3YXlzIHBvcykKKwliZmV4dHMJRlBURU1QX0VYKCVhNil7IzE6IzE1fSwlZDEJfGdldCBkZXN0IGV4cCAoYWx3YXlzIG5lZykKKwlzdWJsCSVkMSwlZDAJCQl8c3VidHJhY3QgZGVzdCBmcm9tIHNyYworCWNtcGwJIzB4ODAwMCwlZDAKKwlibHQJZml4X3N0awkJCXxpZiBsZXNzLCBub3Qgd3JhcCBjYXNlCisJdHN0dwlFVEVNUF9FWCglYTYpCQl8c2V0IE4gdG8gfnNpZ25fb2Yoc3JjKQorCWJnZQljbXBfc2V0bgorCXJ0cworY21wX3NyY2Q6CisJYnNybAlja2luZl9uZAorCWJuZQlmaXhfc3RrCisJYmZleHR1CUZQVEVNUF9FWCglYTYpeyMxOiMxNX0sJWQwCXxnZXQgZGVzdCBleHAgKGFsd2F5cyBwb3MpCisJYmZleHRzCUVURU1QX0VYKCVhNil7IzE6IzE1fSwlZDEJfGdldCBzcmMgZXhwIChhbHdheXMgbmVnKQorCXN1YmwJJWQxLCVkMAkJCXxzdWJ0cmFjdCBzcmMgZnJvbSBkZXN0CisJY21wbAkjMHg4MDAwLCVkMAorCWJsdAlmaXhfc3RrCQkJfGlmIGxlc3MsIG5vdCB3cmFwIGNhc2UKKwl0c3R3CUZQVEVNUF9FWCglYTYpCQl8c2V0IE4gdG8gc2lnbl9vZihkZXN0KQorCWJsdAljbXBfc2V0bgorCXJ0cworY21wX3NldG46CisJb3JsCSNuZWdfbWFzayxVU0VSX0ZQU1IoJWE2KQorCXJ0cworCit8Cit8IEluc3QgaXMgZm11bC4KK3wKK3dyYXBfbXVsOgorCWNtcGIJIzB4ZmYsRE5STV9GTEcoJWE2KSB8aWYgYm90aCBvcHMgZGVub3JtLAorCWJlcQlmb3JjZV91bmYJfGZvcmNlIGFuIHVuZGVyZmxvdyAocmVhbGx5ISkKK3wKK3wgT25lIG9mIHRoZSBvcHMgaXMgZGVub3JtYWxpemVkLiAgVGVzdCBmb3Igd3JhcCBjb25kaXRpb24KK3wgYW5kIGNvbXBsZXRlIHRoZSBpbnN0cnVjdGlvbi4KK3wKKwljbXBiCSMweDBmLEROUk1fRkxHKCVhNikgfGNoZWNrIGZvciBkZXN0IGRlbm9ybQorCWJuZXMJbXVsX3NyY2QKK211bF9kZXN0ZDoKKwlic3JsCWNraW5mX25zCisJYm5lCWZpeF9zdGsKKwliZmV4dHUJRVRFTVBfRVgoJWE2KXsjMTojMTV9LCVkMAl8Z2V0IHNyYyBleHAgKGFsd2F5cyBwb3MpCisJYmZleHRzCUZQVEVNUF9FWCglYTYpeyMxOiMxNX0sJWQxCXxnZXQgZGVzdCBleHAgKGFsd2F5cyBuZWcpCisJYWRkbAklZDEsJWQwCQkJfHN1YnRyYWN0IGRlc3QgZnJvbSBzcmMKKwliZ3QJZml4X3N0aworCWJyYQlmb3JjZV91bmYKK211bF9zcmNkOgorCWJzcmwJY2tpbmZfbmQKKwlibmUJZml4X3N0aworCWJmZXh0dQlGUFRFTVBfRVgoJWE2KXsjMTojMTV9LCVkMAl8Z2V0IGRlc3QgZXhwIChhbHdheXMgcG9zKQorCWJmZXh0cwlFVEVNUF9FWCglYTYpeyMxOiMxNX0sJWQxCXxnZXQgc3JjIGV4cCAoYWx3YXlzIG5lZykKKwlhZGRsCSVkMSwlZDAJCQl8c3VidHJhY3Qgc3JjIGZyb20gZGVzdAorCWJndAlmaXhfc3RrCisKK3wKK3wgVGhpcyBjb2RlIGhhbmRsZXMgdGhlIGNhc2Ugb2YgdGhlIGluc3RydWN0aW9uIHJlc3VsdGluZyBpbgorfCBhbiB1bmRlcmZsb3cgY29uZGl0aW9uLgorfAorZm9yY2VfdW5mOgorCWJjbHJiCSNFMSxFX0JZVEUoJWE2KQorCW9ybAkjdW5maW54X21hc2ssVVNFUl9GUFNSKCVhNikKKwljbHJ3CU5NTkVYQyglYTYpCisJY2xyYglXQlRFTVBfU0dOKCVhNikKKwltb3ZldwlFVEVNUF9FWCglYTYpLCVkMAkJfGZpbmQgdGhlIHNpZ24gb2YgdGhlIHJlc3VsdAorCW1vdmV3CUZQVEVNUF9FWCglYTYpLCVkMQorCWVvcncJJWQxLCVkMAorCWFuZGl3CSMweDgwMDAsJWQwCisJYmVxcwlmcmN1bmZjb250CisJc3QJV0JURU1QX1NHTiglYTYpCitmcmN1bmZjb250OgorCWxlYQlXQlRFTVAoJWE2KSwlYTAJCXxwb2ludCBhMCB0byBtZW1vcnkgbG9jYXRpb24KKwltb3ZldwlDTURSRUcxQiglYTYpLCVkMAorCWJ0c3RsCSM2LCVkMAkJCXx0ZXN0IGZvciBmb3JjZWQgcHJlY2lzaW9uCisJYmVxcwlmcmN1bmZfZnBjcgorCWJ0c3RsCSMyLCVkMAkJCXxjaGVjayBmb3IgZG91YmxlCisJYm5lcwlmcmN1bmZfZGJsCisJbW92ZWwJIzB4MSwlZDAJCQl8aW5zdCBpcyBmb3JjZWQgc2luZ2xlCisJYnJhcwlmcmN1bmZfcm5kCitmcmN1bmZfZGJsOgorCW1vdmVsCSMweDIsJWQwCQkJfGluc3QgaXMgZm9yY2VkIGRvdWJsZQorCWJyYXMJZnJjdW5mX3JuZAorZnJjdW5mX2ZwY3I6CisJYmZleHR1CUZQQ1JfTU9ERSglYTYpeyMwOiMyfSwlZDAJfGluc3Qgbm90IGZvcmNlZCAtIHVzZSBmcGNyIHByZWMKK2ZyY3VuZl9ybmQ6CisJYnNybAl1bmZfc3ViCQkJfGdldCBjb3JyZWN0IHJlc3VsdCBiYXNlZCBvbgorfAkJCQkJO3JvdW5kIHByZWNpc2lvbi9tb2RlLiAgVGhpcworfAkJCQkJO3NldHMgRlBTUl9DQyBjb3JyZWN0bHkKKwliZmNscglXQlRFTVBfU0dOKCVhNil7IzA6Izh9CXxjb252ZXJ0IGJhY2sgdG8gSUVFRSBleHQgZm9ybWF0CisJYmVxcwlmcmNmcG4KKwlic2V0Ygkjc2lnbl9iaXQsV0JURU1QX0VYKCVhNikKKwlicmEJZnJjZnBuCisKK3wKK3wgV3JpdGUgdGhlIHJlc3VsdCB0byB0aGUgdXNlcidzIGZwbi4gIEFsbCByZXN1bHRzIG11c3QgYmUgSFVHRSB0byBiZQorfCB3cml0dGVuOyBvdGhlcndpc2UgdGhlIHJlc3VsdHMgd291bGQgaGF2ZSBvdmVyZmxvd2VkIG9yIHVuZGVyZmxvd2VkLgorfCBJZiB0aGUgcm91bmRpbmcgcHJlY2lzaW9uIGlzIHNpbmdsZSBvciBkb3VibGUsIHRoZSBvdmZfcmVzIHJvdXRpbmUKK3wgaXMgbmVlZGVkIHRvIGNvcnJlY3RseSBzdXBwbHkgdGhlIG1heCB2YWx1ZS4KK3wKK2ZyY2ZwbnI6CisJbW92ZXcJQ01EUkVHMUIoJWE2KSwlZDAKKwlidHN0bAkjNiwlZDAJCQl8dGVzdCBmb3IgZm9yY2VkIHByZWNpc2lvbgorCWJlcXMJZnJjZnBuX2ZwY3IKKwlidHN0bAkjMiwlZDAJCQl8Y2hlY2sgZm9yIGRvdWJsZQorCWJuZXMJZnJjZnBuX2RibAorCW1vdmVsCSMweDEsJWQwCQkJfGluc3QgaXMgZm9yY2VkIHNpbmdsZQorCWJyYXMJZnJjZnBuX3JuZAorZnJjZnBuX2RibDoKKwltb3ZlbAkjMHgyLCVkMAkJCXxpbnN0IGlzIGZvcmNlZCBkb3VibGUKKwlicmFzCWZyY2Zwbl9ybmQKK2ZyY2Zwbl9mcGNyOgorCWJmZXh0dQlGUENSX01PREUoJWE2KXsjMDojMn0sJWQwCXxpbnN0IG5vdCBmb3JjZWQgLSB1c2UgZnBjciBwcmVjCisJdHN0YgklZDAKKwliZXFzCWZyY2ZwbgkJCXxpZiBleHRlbmRlZCwgd3JpdGUgd2hhdCB5b3UgZ290CitmcmNmcG5fcm5kOgorCWJjbHJiCSNzaWduX2JpdCxXQlRFTVBfRVgoJWE2KQorCXNuZQlXQlRFTVBfU0dOKCVhNikKKwlic3JsCW92Zl9yZXMJCQl8Z2V0IGNvcnJlY3QgcmVzdWx0IGJhc2VkIG9uCit8CQkJCQk7cm91bmQgcHJlY2lzaW9uL21vZGUuICBUaGlzCit8CQkJCQk7c2V0cyBGUFNSX0NDIGNvcnJlY3RseQorCWJmY2xyCVdCVEVNUF9TR04oJWE2KXsjMDojOH0JfGNvbnZlcnQgYmFjayB0byBJRUVFIGV4dCBmb3JtYXQKKwliZXFzCWZyY2Zwbl9jbHIKKwlic2V0Ygkjc2lnbl9iaXQsV0JURU1QX0VYKCVhNikKK2ZyY2Zwbl9jbHI6CisJb3JsCSNvdmZpbnhfbWFzayxVU0VSX0ZQU1IoJWE2KQorfAorfCBQZXJmb3JtIHRoZSB3cml0ZS4KK3wKK2ZyY2ZwbjoKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjNjojM30sJWQwCXxleHRyYWN0IGZwIGRlc3RpbmF0aW9uIHJlZ2lzdGVyCisJY21waWIJIzMsJWQwCisJYmxlcwlmcmMwMTIzCQkJfGNoZWNrIGlmIGRlc3QgaXMgZnAwLWZwMworCW1vdmVsCSM3LCVkMQorCXN1YmwJJWQwLCVkMQorCWNscmwJJWQwCisJYnNldGwJJWQxLCVkMAorCWZtb3ZlbXggV0JURU1QKCVhNiksJWQwCisJcnRzCitmcmMwMTIzOgorCWNtcGliCSMwLCVkMAorCWJlcXMJZnJjMF9kc3QKKwljbXBpYgkjMSwlZDAKKwliZXFzCWZyYzFfZHN0CisJY21waWIJIzIsJWQwCisJYmVxcwlmcmMyX2RzdAorZnJjM19kc3Q6CisJbW92ZWwJV0JURU1QX0VYKCVhNiksVVNFUl9GUDMoJWE2KQorCW1vdmVsCVdCVEVNUF9ISSglYTYpLFVTRVJfRlAzKzQoJWE2KQorCW1vdmVsCVdCVEVNUF9MTyglYTYpLFVTRVJfRlAzKzgoJWE2KQorCXJ0cworZnJjMl9kc3Q6CisJbW92ZWwJV0JURU1QX0VYKCVhNiksVVNFUl9GUDIoJWE2KQorCW1vdmVsCVdCVEVNUF9ISSglYTYpLFVTRVJfRlAyKzQoJWE2KQorCW1vdmVsCVdCVEVNUF9MTyglYTYpLFVTRVJfRlAyKzgoJWE2KQorCXJ0cworZnJjMV9kc3Q6CisJbW92ZWwJV0JURU1QX0VYKCVhNiksVVNFUl9GUDEoJWE2KQorCW1vdmVsCVdCVEVNUF9ISSglYTYpLFVTRVJfRlAxKzQoJWE2KQorCW1vdmVsCVdCVEVNUF9MTyglYTYpLFVTRVJfRlAxKzgoJWE2KQorCXJ0cworZnJjMF9kc3Q6CisJbW92ZWwJV0JURU1QX0VYKCVhNiksVVNFUl9GUDAoJWE2KQorCW1vdmVsCVdCVEVNUF9ISSglYTYpLFVTRVJfRlAwKzQoJWE2KQorCW1vdmVsCVdCVEVNUF9MTyglYTYpLFVTRVJfRlAwKzgoJWE2KQorCXJ0cworCit8Cit8IFdyaXRlIGV0ZW1wIHRvIGZwbi4KK3wgQSBjaGVjayBpcyBtYWRlIG9uIGVuYWJsZWQgYW5kIHNpZ25hbGxlZCBzbmFuIGV4Y2VwdGlvbnMsCit8IGFuZCB0aGUgZGVzdGluYXRpb24gaXMgbm90IG92ZXJ3cml0dGVuIGlmIHRoaXMgY29uZGl0aW9uIGV4aXN0cy4KK3wgVGhpcyBjb2RlIGlzIGRlc2lnbmVkIHRvIG1ha2UgZm1vdmVpbnMgb2YgdW5zdXBwb3J0ZWQgZGF0YSB0eXBlcworfCBmYXN0ZXIuCit8Cit3cl9ldGVtcDoKKwlidHN0Ygkjc25hbl9iaXQsRlBTUl9FWENFUFQoJWE2KQl8aWYgc25hbiBpcyBzZXQsIGFuZAorCWJlcXMJZm1vdmVpbmMJCXxlbmFibGVkLCBmb3JjZSByZXN0b3JlCisJYnRzdGIJI3NuYW5fYml0LEZQQ1JfRU5BQkxFKCVhNikgfGFuZCBkb24ndCBvdmVyd3JpdGUKKwliZXFzCWZtb3ZlaW5jCQl8dGhlIGRlc3QKKwltb3ZlbAlFVEVNUF9FWCglYTYpLEZQVEVNUF9FWCglYTYpCXxzZXQgdXAgZnB0ZW1wIHNpZ24gZm9yCit8CQkJCQkJO3NuYW4gaGFuZGxlcgorCXRzdGIJRVRFTVAoJWE2KQkJfGNoZWNrIGZvciBuZWdhdGl2ZQorCWJsdHMJc25hbl9uZWcKKwlydHMKK3NuYW5fbmVnOgorCW9ybAkjbmVnX2JpdCxVU0VSX0ZQU1IoJWE2KQl8c25hbiBpcyBuZWdhdGl2ZTsgc2V0IE4KKwlydHMKK2Ztb3ZlaW5jOgorCWNscncJTk1ORVhDKCVhNikKKwliY2xyYgkjRTEsRV9CWVRFKCVhNikKKwltb3ZlYglTVEFHKCVhNiksJWQwCQl8Y2hlY2sgaWYgc3RhZyBpcyBpbmYKKwlhbmRpYgkjMHhlMCwlZDAKKwljbXBpYgkjMHg0MCwlZDAKKwlibmVzCWZtaW5jX2NuYW4KKwlvcmwJI2luZl9tYXNrLFVTRVJfRlBTUiglYTYpIHxpZiBpbmYsIG5vdGhpbmcgeWV0IGhhcyBzZXQgSQorCXRzdHcJTE9DQUxfRVgoJWEwKQkJfGNoZWNrIHNpZ24KKwliZ2VzCWZtaW5jX2NvbgorCW9ybAkjbmVnX21hc2ssVVNFUl9GUFNSKCVhNikKKwlicmEJZm1pbmNfY29uCitmbWluY19jbmFuOgorCWNtcGliCSMweDYwLCVkMAkJCXxjaGVjayBpZiBzdGFnIGlzIE5hTgorCWJuZXMJZm1pbmNfY3plcm8KKwlvcmwJI25hbl9tYXNrLFVTRVJfRlBTUiglYTYpIHxpZiBuYW4sIG5vdGhpbmcgeWV0IGhhcyBzZXQgTmFOCisJbW92ZWwJRVRFTVBfRVgoJWE2KSxGUFRFTVBfRVgoJWE2KQl8c2V0IHVwIGZwdGVtcCBzaWduIGZvcgorfAkJCQkJCTtzbmFuIGhhbmRsZXIKKwl0c3R3CUxPQ0FMX0VYKCVhMCkJCXxjaGVjayBzaWduCisJYmdlcwlmbWluY19jb24KKwlvcmwJI25lZ19tYXNrLFVTRVJfRlBTUiglYTYpCisJYnJhCWZtaW5jX2NvbgorZm1pbmNfY3plcm86CisJY21waWIJIzB4MjAsJWQwCQkJfGNoZWNrIGlmIHplcm8KKwlibmVzCWZtaW5jX2NvbgorCW9ybAkjel9tYXNrLFVTRVJfRlBTUiglYTYpCXxpZiB6ZXJvLCBzZXQgWgorCXRzdHcJTE9DQUxfRVgoJWEwKQkJfGNoZWNrIHNpZ24KKwliZ2VzCWZtaW5jX2NvbgorCW9ybAkjbmVnX21hc2ssVVNFUl9GUFNSKCVhNikKK2ZtaW5jX2NvbjoKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjNjojM30sJWQwCXxleHRyYWN0IGZwIGRlc3RpbmF0aW9uIHJlZ2lzdGVyCisJY21waWIJIzMsJWQwCisJYmxlcwlmcDAxMjMJCQl8Y2hlY2sgaWYgZGVzdCBpcyBmcDAtZnAzCisJbW92ZWwJIzcsJWQxCisJc3VibAklZDAsJWQxCisJY2xybAklZDAKKwlic2V0bAklZDEsJWQwCisJZm1vdmVteCBFVEVNUCglYTYpLCVkMAorCXJ0cworCitmcDAxMjM6CisJY21waWIJIzAsJWQwCisJYmVxcwlmcDBfZHN0CisJY21waWIJIzEsJWQwCisJYmVxcwlmcDFfZHN0CisJY21waWIJIzIsJWQwCisJYmVxcwlmcDJfZHN0CitmcDNfZHN0OgorCW1vdmVsCUVURU1QX0VYKCVhNiksVVNFUl9GUDMoJWE2KQorCW1vdmVsCUVURU1QX0hJKCVhNiksVVNFUl9GUDMrNCglYTYpCisJbW92ZWwJRVRFTVBfTE8oJWE2KSxVU0VSX0ZQMys4KCVhNikKKwlydHMKK2ZwMl9kc3Q6CisJbW92ZWwJRVRFTVBfRVgoJWE2KSxVU0VSX0ZQMiglYTYpCisJbW92ZWwJRVRFTVBfSEkoJWE2KSxVU0VSX0ZQMis0KCVhNikKKwltb3ZlbAlFVEVNUF9MTyglYTYpLFVTRVJfRlAyKzgoJWE2KQorCXJ0cworZnAxX2RzdDoKKwltb3ZlbAlFVEVNUF9FWCglYTYpLFVTRVJfRlAxKCVhNikKKwltb3ZlbAlFVEVNUF9ISSglYTYpLFVTRVJfRlAxKzQoJWE2KQorCW1vdmVsCUVURU1QX0xPKCVhNiksVVNFUl9GUDErOCglYTYpCisJcnRzCitmcDBfZHN0OgorCW1vdmVsCUVURU1QX0VYKCVhNiksVVNFUl9GUDAoJWE2KQorCW1vdmVsCUVURU1QX0hJKCVhNiksVVNFUl9GUDArNCglYTYpCisJbW92ZWwJRVRFTVBfTE8oJWE2KSxVU0VSX0ZQMCs4KCVhNikKKwlydHMKKworb3BjbGFzczM6CisJc3QJQ1VfT05MWSglYTYpCisJbW92ZXcJQ01EUkVHMUIoJWE2KSwlZDAJfGNoZWNrIGlmIHBhY2tlZCBtb3Zlb3V0CisJYW5kaXcJIzB4MGMwMCwlZDAJfGlzb2xhdGUgbGFzdCAyIGJpdHMgb2Ygc2l6ZSBmaWVsZAorCWNtcGl3CSMweDBjMDAsJWQwCXxpZiBzaXplIGlzIDAxMSBvciAxMTEsIGl0IGlzIHBhY2tlZAorCWJlcQlwYWNrX291dAl8ZWxzZSBpdCBpcyBub3JtIG9yIGRlbm9ybQorCWJyYQltdl9vdXQKKworCit8Cit8CU1PVkUgT1VUCit8CisKK212X3RibDoKKwkubG9uZwlsaQorCS5sb25nCXNncAorCS5sb25nCXhwCisJLmxvbmcJbXZvdXRfZW5kCXxzaG91bGQgbmV2ZXIgYmUgdGFrZW4KKwkubG9uZwl3aQorCS5sb25nCWRwCisJLmxvbmcJYmkKKwkubG9uZwltdm91dF9lbmQJfHNob3VsZCBuZXZlciBiZSB0YWtlbgorbXZfb3V0OgorCWJmZXh0dQlDTURSRUcxQiglYTYpeyMzOiMzfSwlZDEJfHB1dCBzb3VyY2Ugc3BlY2lmaWVyIGluIGQxCisJbGVhbAltdl90YmwsJWEwCisJbW92ZWwJJWEwQCglZDE6bDo0KSwlYTAKKwlqbXAJKCVhMCkKKworfAorfCBUaGlzIGV4aXQgaXMgZm9yIG1vdmUtb3V0IHRvIG1lbW9yeS4gIFRoZSBhdW5mbCBiaXQgaXMKK3wgc2V0IGlmIHRoZSByZXN1bHQgaXMgaW5leCBhbmQgdW5mbCBpcyBzaWduYWxsZWQuCit8Cittdm91dF9lbmQ6CisJYnRzdGIJI2luZXgyX2JpdCxGUFNSX0VYQ0VQVCglYTYpCisJYmVxcwlub19hdWZsCisJYnRzdGIJI3VuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikKKwliZXFzCW5vX2F1ZmwKKwlic2V0YgkjYXVuZmxfYml0LEZQU1JfQUVYQ0VQVCglYTYpCitub19hdWZsOgorCWNscncJTk1ORVhDKCVhNikKKwliY2xyYgkjRTEsRV9CWVRFKCVhNikKKwlmbW92ZWwJIzAsJUZQU1IJCQl8Y2xlYXIgYW55IGNjIGJpdHMgZnJvbSByZXNfZnVuYworfAorfCBSZXR1cm4gRVRFTVAgdG8gZXh0ZW5kZWQgZm9ybWF0IGZyb20gaW50ZXJuYWwgZXh0ZW5kZWQgZm9ybWF0IHNvCit8IHRoYXQgZ2VuX2V4Y2VwdCB3aWxsIGhhdmUgYSBjb3JyZWN0bHkgc2lnbmVkIHZhbHVlIGZvciBvdmZsL3VuZmwKK3wgaGFuZGxlcnMuCit8CisJYmZjbHIJRVRFTVBfU0dOKCVhNil7IzA6Izh9CisJYmVxcwltdm91dF9jb24KKwlic2V0Ygkjc2lnbl9iaXQsRVRFTVBfRVgoJWE2KQorbXZvdXRfY29uOgorCXJ0cworfAorfCBUaGlzIGV4aXQgaXMgZm9yIG1vdmUtb3V0IHRvIGludCByZWdpc3Rlci4gIFRoZSBhdW5mbCBiaXQgaXMKK3wgbm90IHNldCBpbiBhbnkgY2FzZSBmb3IgdGhpcyBtb3ZlLgorfAorbXZvdXRpX2VuZDoKKwljbHJ3CU5NTkVYQyglYTYpCisJYmNscmIJI0UxLEVfQllURSglYTYpCisJZm1vdmVsCSMwLCVGUFNSCQkJfGNsZWFyIGFueSBjYyBiaXRzIGZyb20gcmVzX2Z1bmMKK3wKK3wgUmV0dXJuIEVURU1QIHRvIGV4dGVuZGVkIGZvcm1hdCBmcm9tIGludGVybmFsIGV4dGVuZGVkIGZvcm1hdCBzbworfCB0aGF0IGdlbl9leGNlcHQgd2lsbCBoYXZlIGEgY29ycmVjdGx5IHNpZ25lZCB2YWx1ZSBmb3Igb3ZmbC91bmZsCit8IGhhbmRsZXJzLgorfAorCWJmY2xyCUVURU1QX1NHTiglYTYpeyMwOiM4fQorCWJlcXMJbXZvdXRpX2NvbgorCWJzZXRiCSNzaWduX2JpdCxFVEVNUF9FWCglYTYpCittdm91dGlfY29uOgorCXJ0cworfAorfCBsaSBpcyB1c2VkIHRvIGhhbmRsZSBhIGxvbmcgaW50ZWdlciBzb3VyY2Ugc3BlY2lmaWVyCit8CisKK2xpOgorCW1vdmVxbAkjNCwlZDAJCXxzZXQgYnl0ZSBjb3VudAorCisJYnRzdGIJIzcsU1RBRyglYTYpCXxjaGVjayBmb3IgZXh0ZW5kZWQgZGVub3JtCisJYm5lCWludF9kbnJtCXxpZiBzbywgYnJhbmNoCisKKwlmbW92ZW14IEVURU1QKCVhNiksJWZwMC0lZnAwCisJZmNtcGQJIzB4NDFkZmZmZmZmZmMwMDAwMCwlZnAwCit8IDQxZGZmZmZmZmZjMDAwMDAgaW4gZGJsIHByZWMgPSA0MDFkMDAwMGZmZmZmZmZlMDAwMDAwMDAgaW4gZXh0IHByZWMKKwlmYmdlCWxvX3BscmcKKwlmY21wZAkjMHhjMWUwMDAwMDAwMDAwMDAwLCVmcDAKK3wgYzFlMDAwMDAwMDAwMDAwMCBpbiBkYmwgcHJlYyA9IGMwMWUwMDAwODAwMDAwMDAwMDAwMDAwMCBpbiBleHQgcHJlYworCWZibGUJbG9fbmxyZworfAorfCBhdCB0aGlzIHBvaW50LCB0aGUgYW5zd2VyIGlzIGJldHdlZW4gdGhlIGxhcmdlc3QgcG9zIGFuZCBuZWcgdmFsdWVzCit8CisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQxCXx1c2UgdXNlcidzIHJvdW5kaW5nIG1vZGUKKwlhbmRpbAkjMHgzMCwlZDEKKwlmbW92ZWwJJWQxLCVmcGNyCisJZm1vdmVsCSVmcDAsTF9TQ1IxKCVhNikJfGxldCB0aGUgMDQwIHBlcmZvcm0gY29udmVyc2lvbgorCWZtb3ZlbCAlZnBzciwlZDEKKwlvcmwJJWQxLFVTRVJfRlBTUiglYTYpCXxjYXB0dXJlIGluZXgyL2FpbmV4IGlmIHNldAorCWJyYQlpbnRfd3J0CisKKworbG9fcGxyZzoKKwltb3ZlbAkjMHg3ZmZmZmZmZixMX1NDUjEoJWE2KQl8YW5zd2VyIGlzIGxhcmdlc3QgcG9zaXRpdmUgaW50CisJZmJlcQlpbnRfd3J0CQkJfGV4YWN0IGFuc3dlcgorCWZjbXBkCSMweDQxZGZmZmZmZmZlMDAwMDAsJWZwMAorfCA0MWRmZmZmZmZmZTAwMDAwIGluIGRibCBwcmVjID0gNDAxZDAwMDBmZmZmZmZmZjAwMDAwMDAwIGluIGV4dCBwcmVjCisJZmJnZQlpbnRfb3BlcnIJCXxzZXQgb3BlcnIKKwlicmEJaW50X2lueAkJCXxzZXQgaW5leGFjdAorCitsb19ubHJnOgorCW1vdmVsCSMweDgwMDAwMDAwLExfU0NSMSglYTYpCisJZmJlcQlpbnRfd3J0CQkJfGV4YWN0IGFuc3dlcgorCWZjbXBkCSMweGMxZTAwMDAwMDAxMDAwMDAsJWZwMAorfCBjMWUwMDAwMDAwMTAwMDAwIGluIGRibCBwcmVjID0gYzAxZTAwMDA4MDAwMDAwMDgwMDAwMDAwIGluIGV4dCBwcmVjCisJZmJsdAlpbnRfb3BlcnIJCXxzZXQgb3BlcnIKKwlicmEJaW50X2lueAkJCXxzZXQgaW5leGFjdAorCit8Cit8IHdpIGlzIHVzZWQgdG8gaGFuZGxlIGEgd29yZCBpbnRlZ2VyIHNvdXJjZSBzcGVjaWZpZXIKK3wKKword2k6CisJbW92ZXFsCSMyLCVkMAkJfHNldCBieXRlIGNvdW50CisKKwlidHN0YgkjNyxTVEFHKCVhNikJfGNoZWNrIGZvciBleHRlbmRlZCBkZW5vcm0KKwlibmUJaW50X2Rucm0JfGJyYW5jaCBpZiBzbworCisJZm1vdmVteCBFVEVNUCglYTYpLCVmcDAtJWZwMAorCWZjbXBzCSMweDQ2ZmZmZTAwLCVmcDAKK3wgNDZmZmZlMDAgaW4gc2dsIHByZWMgPSA0MDBkMDAwMGZmZmUwMDAwMDAwMDAwMDAgaW4gZXh0IHByZWMKKwlmYmdlCXdvX3BscmcKKwlmY21wcwkjMHhjNzAwMDAwMCwlZnAwCit8IGM3MDAwMDAwIGluIHNnbCBwcmVjID0gYzAwZTAwMDA4MDAwMDAwMDAwMDAwMDAwIGluIGV4dCBwcmVjCisJZmJsZQl3b19ubHJnCisKK3wKK3wgYXQgdGhpcyBwb2ludCwgdGhlIGFuc3dlciBpcyBiZXR3ZWVuIHRoZSBsYXJnZXN0IHBvcyBhbmQgbmVnIHZhbHVlcworfAorCW1vdmVsCVVTRVJfRlBDUiglYTYpLCVkMQl8dXNlIHVzZXIncyByb3VuZGluZyBtb2RlCisJYW5kaWwJIzB4MzAsJWQxCisJZm1vdmVsCSVkMSwlZnBjcgorCWZtb3ZldwklZnAwLExfU0NSMSglYTYpCXxsZXQgdGhlIDA0MCBwZXJmb3JtIGNvbnZlcnNpb24KKwlmbW92ZWwgJWZwc3IsJWQxCisJb3JsCSVkMSxVU0VSX0ZQU1IoJWE2KQl8Y2FwdHVyZSBpbmV4Mi9haW5leCBpZiBzZXQKKwlicmEJaW50X3dydAorCit3b19wbHJnOgorCW1vdmV3CSMweDdmZmYsTF9TQ1IxKCVhNikJfGFuc3dlciBpcyBsYXJnZXN0IHBvc2l0aXZlIGludAorCWZiZXEJaW50X3dydAkJCXxleGFjdCBhbnN3ZXIKKwlmY21wcwkjMHg0NmZmZmYwMCwlZnAwCit8IDQ2ZmZmZjAwIGluIHNnbCBwcmVjID0gNDAwZDAwMDBmZmZmMDAwMDAwMDAwMDAwIGluIGV4dCBwcmVjCisJZmJnZQlpbnRfb3BlcnIJCXxzZXQgb3BlcnIKKwlicmEJaW50X2lueAkJCXxzZXQgaW5leGFjdAorCit3b19ubHJnOgorCW1vdmV3CSMweDgwMDAsTF9TQ1IxKCVhNikKKwlmYmVxCWludF93cnQJCQl8ZXhhY3QgYW5zd2VyCisJZmNtcHMJIzB4YzcwMDAwODAsJWZwMAorfCBjNzAwMDA4MCBpbiBzZ2wgcHJlYyA9IGMwMGUwMDAwODAwMDgwMDAwMDAwMDAwMCBpbiBleHQgcHJlYworCWZibHQJaW50X29wZXJyCQl8c2V0IG9wZXJyCisJYnJhCWludF9pbngJCQl8c2V0IGluZXhhY3QKKworfAorfCBiaSBpcyB1c2VkIHRvIGhhbmRsZSBhIGJ5dGUgaW50ZWdlciBzb3VyY2Ugc3BlY2lmaWVyCit8CisKK2JpOgorCW1vdmVxbAkjMSwlZDAJCXxzZXQgYnl0ZSBjb3VudAorCisJYnRzdGIJIzcsU1RBRyglYTYpCXxjaGVjayBmb3IgZXh0ZW5kZWQgZGVub3JtCisJYm5lCWludF9kbnJtCXxicmFuY2ggaWYgc28KKworCWZtb3ZlbXggRVRFTVAoJWE2KSwlZnAwLSVmcDAKKwlmY21wcwkjMHg0MmZlMDAwMCwlZnAwCit8IDQyZmUwMDAwIGluIHNnbCBwcmVjID0gNDAwNTAwMDBmZTAwMDAwMDAwMDAwMDAwIGluIGV4dCBwcmVjCisJZmJnZQlieV9wbHJnCisJZmNtcHMJIzB4YzMwMDAwMDAsJWZwMAorfCBjMzAwMDAwMCBpbiBzZ2wgcHJlYyA9IGMwMDYwMDAwODAwMDAwMDAwMDAwMDAwMCBpbiBleHQgcHJlYworCWZibGUJYnlfbmxyZworCit8Cit8IGF0IHRoaXMgcG9pbnQsIHRoZSBhbnN3ZXIgaXMgYmV0d2VlbiB0aGUgbGFyZ2VzdCBwb3MgYW5kIG5lZyB2YWx1ZXMKK3wKKwltb3ZlbAlVU0VSX0ZQQ1IoJWE2KSwlZDEJfHVzZSB1c2VyJ3Mgcm91bmRpbmcgbW9kZQorCWFuZGlsCSMweDMwLCVkMQorCWZtb3ZlbAklZDEsJWZwY3IKKwlmbW92ZWIJJWZwMCxMX1NDUjEoJWE2KQl8bGV0IHRoZSAwNDAgcGVyZm9ybSBjb252ZXJzaW9uCisJZm1vdmVsICVmcHNyLCVkMQorCW9ybAklZDEsVVNFUl9GUFNSKCVhNikJfGNhcHR1cmUgaW5leDIvYWluZXggaWYgc2V0CisJYnJhCWludF93cnQKKworYnlfcGxyZzoKKwltb3ZlYgkjMHg3ZixMX1NDUjEoJWE2KQkJfGFuc3dlciBpcyBsYXJnZXN0IHBvc2l0aXZlIGludAorCWZiZXEJaW50X3dydAkJCXxleGFjdCBhbnN3ZXIKKwlmY21wcwkjMHg0MmZmMDAwMCwlZnAwCit8IDQyZmYwMDAwIGluIHNnbCBwcmVjID0gNDAwNTAwMDBmZjAwMDAwMDAwMDAwMDAwIGluIGV4dCBwcmVjCisJZmJnZQlpbnRfb3BlcnIJCXxzZXQgb3BlcnIKKwlicmEJaW50X2lueAkJCXxzZXQgaW5leGFjdAorCitieV9ubHJnOgorCW1vdmViCSMweDgwLExfU0NSMSglYTYpCisJZmJlcQlpbnRfd3J0CQkJfGV4YWN0IGFuc3dlcgorCWZjbXBzCSMweGMzMDA4MDAwLCVmcDAKK3wgYzMwMDgwMDAgaW4gc2dsIHByZWMgPSBjMDA2MDAwMDgwODAwMDAwMDAwMDAwMDAgaW4gZXh0IHByZWMKKwlmYmx0CWludF9vcGVycgkJfHNldCBvcGVycgorCWJyYQlpbnRfaW54CQkJfHNldCBpbmV4YWN0CisKK3wKK3wgQ29tbW9uIGludGVnZXIgcm91dGluZXMKK3wKK3wgaW50X2RybnJtLS0tYWNjb3VudCBmb3IgcG9zc2libGUgbm9uemVybyByZXN1bHQgZm9yIHJvdW5kIHVwIHdpdGggcG9zaXRpdmUKK3wgb3BlcmFuZCBhbmQgcm91bmQgZG93biBmb3IgbmVnYXRpdmUgYW5zd2VyLiAgSW4gdGhlIGZpcnN0IGNhc2UgKHJlc3VsdCA9IDEpCit8IGJ5dGUtd2lkdGggKHN0b3JlIGluIGQwKSBvZiByZXN1bHQgbXVzdCBiZSBob25vcmVkLiAgSW4gdGhlIHNlY29uZCBjYXNlLAorfCAtMSBpbiBMX1NDUjEoYTYpIHdpbGwgY292ZXIgYWxsIGNvbnRpbmdlbmNpZXMgKEZNT1ZFLkIvVy9MIG91dCkuCisKK2ludF9kbnJtOgorCW1vdmVsCSMwLExfU0NSMSglYTYpCXwgaW5pdGlhbGl6ZSByZXN1bHQgdG8gMAorCWJmZXh0dQlGUENSX01PREUoJWE2KXsjMjojMn0sJWQxCXwgZDEgaXMgdGhlIHJvdW5kaW5nIG1vZGUKKwljbXBiCSMyLCVkMQorCWJtaXMJaW50X2lueAkJfCBpZiBSTiBvciBSWiwgZG9uZQorCWJuZXMJaW50X3JwCQl8IGlmIFJQLCBjb250aW51ZSBiZWxvdworCXRzdHcJRVRFTVAoJWE2KQl8IFJNOiBzdG9yZSAtMSBpbiBMX1NDUjEgaWYgc3JjIGlzIG5lZ2F0aXZlCisJYnBscwlpbnRfaW54CQl8IG90aGVyd2lzZSByZXN1bHQgaXMgMAorCW1vdmVsCSMtMSxMX1NDUjEoJWE2KQorCWJyYXMJaW50X2lueAoraW50X3JwOgorCXRzdHcJRVRFTVAoJWE2KQl8IFJQOiBzdG9yZSArMSBvZiBwcm9wZXIgd2lkdGggaW4gTF9TQ1IxIGlmCit8CQkJCTsgc291cmNlIGlzIGdyZWF0ZXIgdGhhbiAwCisJYm1pcwlpbnRfaW54CQl8IG90aGVyd2lzZSwgcmVzdWx0IGlzIDAKKwlsZWEJTF9TQ1IxKCVhNiksJWExCXwgYTEgaXMgYWRkcmVzcyBvZiBMX1NDUjEKKwlhZGRhbAklZDAsJWExCQl8IG9mZnNldCBieSBkZXN0aW5hdGlvbiB3aWR0aCAtMQorCXN1YmFsCSMxLCVhMQorCWJzZXRiCSMwLCglYTEpCQl8IHNldCBsb3cgYml0IGF0IGExIGFkZHJlc3MKK2ludF9pbng6CisJb3JpbAkjaW54MmFfbWFzayxVU0VSX0ZQU1IoJWE2KQorCWJyYXMJaW50X3dydAoraW50X29wZXJyOgorCWZtb3ZlbXggJWZwMC0lZnAwLEZQVEVNUCglYTYpCXxGUFRFTVAgbXVzdCBjb250YWluIHRoZSBleHRlbmRlZAorfAkJCQk7cHJlY2lzaW9uIHNvdXJjZSB0aGF0IG5lZWRzIHRvIGJlCit8CQkJCTtjb252ZXJ0ZWQgdG8gaW50ZWdlciB0aGlzIGlzIHJlcXVpcmVkCit8CQkJCTtpZiB0aGUgb3BlcnIgZXhjZXB0aW9uIGlzIGVuYWJsZWQuCit8CQkJCTtzZXQgb3BlcnIvYWlvcCAobm8gaW5leDIgb24gaW50IG92ZmwpCisKKwlvcmlsCSNvcGFvcF9tYXNrLFVTRVJfRlBTUiglYTYpCit8CQkJCTtmYWxsIHRocm91Z2ggdG8gcGVyZm9ybSBpbnRfd3J0CitpbnRfd3J0OgorCW1vdmVsCUVYQ19FQSglYTYpLCVhMQl8bG9hZCBkZXN0aW5hdGlvbiBhZGRyZXNzCisJdHN0bAklYTEJCXxjaGVjayB0byBzZWUgaWYgaXQgaXMgYSBkZXN0IHJlZ2lzdGVyCisJYmVxcwl3cnRfZG4JCXx3cml0ZSBkYXRhIHJlZ2lzdGVyCisJbGVhCUxfU0NSMSglYTYpLCVhMAl8cG9pbnQgdG8gc3VwZXJ2aXNvciBzb3VyY2UgYWRkcmVzcworCWJzcmwJbWVtX3dyaXRlCisJYnJhCW12b3V0aV9lbmQKKword3J0X2RuOgorCW1vdmVsCSVkMCwtKCVzcCkJfGQwIGN1cnJlbnRseSBjb250YWlucyB0aGUgc2l6ZSB0byB3cml0ZQorCWJzcmwJZ2V0X2ZsaW5lCXxnZXRfZmxpbmUgcmV0dXJucyBEbiBpbiBkMAorCWFuZGl3CSMweDcsJWQwCQl8aXNvbGF0ZSByZWdpc3RlcgorCW1vdmVsCSglc3ApKywlZDEJfGdldCBzaXplCisJY21waWwJIzQsJWQxCQl8bW9zdCBmcmVxdWVudCBjYXNlCisJYmVxcwlzel9sb25nCisJY21waWwJIzIsJWQxCisJYm5lcwlzel9jb24KKwlvcmwJIzgsJWQwCQl8YWRkICd3b3JkJyBzaXplIHRvIHJlZ2lzdGVyIworCWJyYXMJc3pfY29uCitzel9sb25nOgorCW9ybAkjMHgxMCwlZDAJCXxhZGQgJ2xvbmcnIHNpemUgdG8gcmVnaXN0ZXIjCitzel9jb246CisJbW92ZWwJJWQwLCVkMQkJfHJlZ19kZXN0IGV4cGVjdHMgc2l6ZTpyZWcgaW4gZDEKKwlic3JsCXJlZ19kZXN0CXxsb2FkIHByb3BlciBkYXRhIHJlZ2lzdGVyCisJYnJhCW12b3V0aV9lbmQKK3hwOgorCWxlYQlFVEVNUCglYTYpLCVhMAorCWJjbHJiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCisJc25lCUxPQ0FMX1NHTiglYTApCisJYnRzdGIJIzcsU1RBRyglYTYpCXxjaGVjayBmb3IgZXh0ZW5kZWQgZGVub3JtCisJYm5lCXhkbnJtCisJY2xybAklZDAKKwlicmFzCWRvX2ZwCQl8ZG8gbm9ybWFsIGNhc2UKK3NncDoKKwlsZWEJRVRFTVAoJWE2KSwlYTAKKwliY2xyYgkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCXNuZQlMT0NBTF9TR04oJWEwKQorCWJ0c3RiCSM3LFNUQUcoJWE2KQl8Y2hlY2sgZm9yIGV4dGVuZGVkIGRlbm9ybQorCWJuZQlzcF9jYXRhcwl8YnJhbmNoIGlmIHNvCisJbW92ZXcJTE9DQUxfRVgoJWEwKSwlZDAKKwlsZWEJc3BfYm5kcywlYTEKKwljbXB3CSglYTEpLCVkMAorCWJsdAlzcF91bmRlcgorCWNtcHcJMiglYTEpLCVkMAorCWJndAlzcF9vdmVyCisJbW92ZWwJIzEsJWQwCQl8c2V0IGRlc3RpbmF0aW9uIGZvcm1hdCB0byBzaW5nbGUKKwlicmFzCWRvX2ZwCQl8ZG8gbm9ybWFsIGNhc2UKK2RwOgorCWxlYQlFVEVNUCglYTYpLCVhMAorCWJjbHJiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCisJc25lCUxPQ0FMX1NHTiglYTApCisKKwlidHN0YgkjNyxTVEFHKCVhNikJfGNoZWNrIGZvciBleHRlbmRlZCBkZW5vcm0KKwlibmUJZHBfY2F0YXMJfGJyYW5jaCBpZiBzbworCisJbW92ZXcJTE9DQUxfRVgoJWEwKSwlZDAKKwlsZWEJZHBfYm5kcywlYTEKKworCWNtcHcJKCVhMSksJWQwCisJYmx0CWRwX3VuZGVyCisJY21wdwkyKCVhMSksJWQwCisJYmd0CWRwX292ZXIKKworCW1vdmVsCSMyLCVkMAkJfHNldCBkZXN0aW5hdGlvbiBmb3JtYXQgdG8gZG91YmxlCit8CQkJCTtmYWxsIHRocm91Z2ggdG8gZG9fZnAKK3wKK2RvX2ZwOgorCWJmZXh0dQlGUENSX01PREUoJWE2KXsjMjojMn0sJWQxCXxybmQgbW9kZSBpbiBkMQorCXN3YXAJJWQwCQkJfHJuZCBwcmVjIGluIHVwcGVyIHdvcmQKKwlhZGRsCSVkMCwlZDEJCQl8ZDEgaGFzIFBSRUMvTU9ERSBpbmZvCisKKwljbHJsCSVkMAkJCXxjbGVhciBnLHIscworCisJYnNybAlyb3VuZAkJCXxyb3VuZAorCisJbW92ZWwJJWEwLCVhMQorCW1vdmVsCUVYQ19FQSglYTYpLCVhMAorCisJYmZleHR1CUNNRFJFRzFCKCVhNil7IzM6IzN9LCVkMQl8ZXh0cmFjdCBkZXN0aW5hdGlvbiBmb3JtYXQKK3wJCQkJCTthdCB0aGlzIHBvaW50IG9ubHkgdGhlIGRlc3QKK3wJCQkJCTtmb3JtYXRzIHNnbCwgZGJsLCBleHQgYXJlCit8CQkJCQk7cG9zc2libGUKKwljbXBiCSMyLCVkMQorCWJndHMJZGRibAkJCXxkb3VibGU9NSwgZXh0ZW5kZWQ9Miwgc2luZ2xlPTEKKwlibmVzCWRzZ2wKK3wJCQkJCTtmYWxsIHRocm91Z2ggdG8gZGV4dAorZGV4dDoKKwlic3JsCWRlc3RfZXh0CisJYnJhCW12b3V0X2VuZAorZHNnbDoKKwlic3JsCWRlc3Rfc2dsCisJYnJhCW12b3V0X2VuZAorZGRibDoKKwlic3JsCWRlc3RfZGJsCisJYnJhCW12b3V0X2VuZAorCit8Cit8IEhhbmRsZSBwb3NzaWJsZSBkZW5vcm0gb3IgY2F0YXN0cm9waGljIHVuZGVyZmxvdyBjYXNlcyBoZXJlCit8Cit4ZG5ybToKKwlic3IJc2V0X3hvcAkJfGluaXRpYWxpemUgV0JURU1QCisJYnNldGIJI3didGVtcDE1X2JpdCxXQl9CWVRFKCVhNikgfHNldCB3YnRlbXAxNQorCisJbW92ZWwJJWEwLCVhMQorCW1vdmVsCUVYQ19FQSglYTYpLCVhMAl8YTAgaGFzIHRoZSBkZXN0aW5hdGlvbiBwb2ludGVyCisJYnNybAlkZXN0X2V4dAl8c3RvcmUgdG8gbWVtb3J5CisJYnNldGIJI3VuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikKKwlicmEJbXZvdXRfZW5kCisKK3NwX3VuZGVyOgorCWJzZXRiCSNldGVtcDE1X2JpdCxTVEFHKCVhNikKKworCWNtcHcJNCglYTEpLCVkMAorCWJsdHMJc3BfY2F0YXMJfGNhdGFzdHJvcGhpYyB1bmRlcmZsb3cgY2FzZQorCisJbW92ZWwJIzEsJWQwCQl8bG9hZCBpbiByb3VuZCBwcmVjaXNpb24KKwltb3ZlbAkjc2dsX3RocmVzaCwlZDEJfGxvYWQgaW4gc2luZ2xlIGRlbm9ybSB0aHJlc2hvbGQKKwlic3JsCWRwc3BkbnJtCXxleHBlY3RzIGQxIHRvIGhhdmUgdGhlIHByb3BlcgorfAkJCQk7ZGVub3JtIHRocmVzaG9sZAorCWJzcmwJZGVzdF9zZ2wJfHN0b3JlcyB2YWx1ZSB0byBkZXN0aW5hdGlvbgorCWJzZXRiCSN1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpCisJYnJhCW12b3V0X2VuZAl8ZXhpdAorCitkcF91bmRlcjoKKwlic2V0YgkjZXRlbXAxNV9iaXQsU1RBRyglYTYpCisKKwljbXB3CTQoJWExKSwlZDAKKwlibHRzCWRwX2NhdGFzCXxjYXRhc3Ryb3BoaWMgdW5kZXJmbG93IGNhc2UKKworCW1vdmVsCSNkYmxfdGhyZXNoLCVkMQl8bG9hZCBpbiBkb3VibGUgcHJlY2lzaW9uIHRocmVzaG9sZAorCW1vdmVsCSMyLCVkMAorCWJzcmwJZHBzcGRucm0JfGV4cGVjdHMgZDEgdG8gaGF2ZSBwcm9wZXIKK3wJCQkJO2Rlbm9ybSB0aHJlc2hvbGQKK3wJCQkJO2V4cGVjdHMgZDAgdG8gaGF2ZSByb3VuZCBwcmVjaXNpb24KKwlic3JsCWRlc3RfZGJsCXxzdG9yZSB2YWx1ZSB0byBkZXN0aW5hdGlvbgorCWJzZXRiCSN1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpCisJYnJhCW12b3V0X2VuZAl8ZXhpdAorCit8Cit8IEhhbmRsZSBjYXRhc3Ryb3BoaWMgdW5kZXJmbG93IGNhc2VzIGhlcmUKK3wKK3NwX2NhdGFzOgorfCBUZW1wIGZpeCBmb3IgeiBiaXQgc2V0IGluIHVuZl9zdWIKKwltb3ZlbAlVU0VSX0ZQU1IoJWE2KSwtKCVhNykKKworCW1vdmVsCSMxLCVkMAkJfHNldCByb3VuZCBwcmVjaXNpb24gdG8gc2dsCisKKwlic3JsCXVuZl9zdWIJCXxhMCBwb2ludHMgdG8gcmVzdWx0CisKKwltb3ZlbAkoJWE3KSssVVNFUl9GUFNSKCVhNikKKworCW1vdmVsCSMxLCVkMAorCXN1YncJJWQwLExPQ0FMX0VYKCVhMCkgfGFjY291bnQgZm9yIGRpZmZlcmVuY2UgYmV0d2VlbgorfAkJCQk7ZGVub3JtL25vcm0gYmlhcworCisJbW92ZWwJJWEwLCVhMQkJfGExIGhhcyB0aGUgb3BlcmFuZCBpbnB1dAorCW1vdmVsCUVYQ19FQSglYTYpLCVhMAl8YTAgaGFzIHRoZSBkZXN0aW5hdGlvbiBwb2ludGVyCisKKwlic3JsCWRlc3Rfc2dsCXxzdG9yZSB0aGUgcmVzdWx0CisJb3JpbAkjdW5maW54X21hc2ssVVNFUl9GUFNSKCVhNikKKwlicmEJbXZvdXRfZW5kCisKK2RwX2NhdGFzOgorfCBUZW1wIGZpeCBmb3IgeiBiaXQgc2V0IGluIHVuZl9zdWIKKwltb3ZlbAlVU0VSX0ZQU1IoJWE2KSwtKCVhNykKKworCW1vdmVsCSMyLCVkMAkJfHNldCByb3VuZCBwcmVjaXNpb24gdG8gZGJsCisJYnNybAl1bmZfc3ViCQl8YTAgcG9pbnRzIHRvIHJlc3VsdAorCisJbW92ZWwJKCVhNykrLFVTRVJfRlBTUiglYTYpCisKKwltb3ZlbAkjMSwlZDAKKwlzdWJ3CSVkMCxMT0NBTF9FWCglYTApIHxhY2NvdW50IGZvciBkaWZmZXJlbmNlIGJldHdlZW4KK3wJCQkJO2Rlbm9ybS9ub3JtIGJpYXMKKworCW1vdmVsCSVhMCwlYTEJCXxhMSBoYXMgdGhlIG9wZXJhbmQgaW5wdXQKKwltb3ZlbAlFWENfRUEoJWE2KSwlYTAJfGEwIGhhcyB0aGUgZGVzdGluYXRpb24gcG9pbnRlcgorCisJYnNybAlkZXN0X2RibAl8c3RvcmUgdGhlIHJlc3VsdAorCW9yaWwJI3VuZmlueF9tYXNrLFVTRVJfRlBTUiglYTYpCisJYnJhCW12b3V0X2VuZAorCit8Cit8IEhhbmRsZSBjYXRhc3Ryb3BoaWMgb3ZlcmZsb3cgY2FzZXMgaGVyZQorfAorc3Bfb3ZlcjoKK3wgVGVtcCBmaXggZm9yIHogYml0IHNldCBpbiB1bmZfc3ViCisJbW92ZWwJVVNFUl9GUFNSKCVhNiksLSglYTcpCisKKwltb3ZlbAkjMSwlZDAKKwlsZWFsCUZQX1NDUjEoJWE2KSwlYTAJfHVzZSBGUF9TQ1IxIGZvciBjcmVhdGluZyByZXN1bHQKKwltb3ZlbAlFVEVNUF9FWCglYTYpLCglYTApCisJbW92ZWwJRVRFTVBfSEkoJWE2KSw0KCVhMCkKKwltb3ZlbAlFVEVNUF9MTyglYTYpLDgoJWEwKQorCWJzcmwJb3ZmX3JlcworCisJbW92ZWwJKCVhNykrLFVTRVJfRlBTUiglYTYpCisKKwltb3ZlbAklYTAsJWExCisJbW92ZWwJRVhDX0VBKCVhNiksJWEwCisJYnNybAlkZXN0X3NnbAorCW9ybAkjb3ZmaW54X21hc2ssVVNFUl9GUFNSKCVhNikKKwlicmEJbXZvdXRfZW5kCisKK2RwX292ZXI6Cit8IFRlbXAgZml4IGZvciB6IGJpdCBzZXQgaW4gb3ZmX3JlcworCW1vdmVsCVVTRVJfRlBTUiglYTYpLC0oJWE3KQorCisJbW92ZWwJIzIsJWQwCisJbGVhbAlGUF9TQ1IxKCVhNiksJWEwCXx1c2UgRlBfU0NSMSBmb3IgY3JlYXRpbmcgcmVzdWx0CisJbW92ZWwJRVRFTVBfRVgoJWE2KSwoJWEwKQorCW1vdmVsCUVURU1QX0hJKCVhNiksNCglYTApCisJbW92ZWwJRVRFTVBfTE8oJWE2KSw4KCVhMCkKKwlic3JsCW92Zl9yZXMKKworCW1vdmVsCSglYTcpKyxVU0VSX0ZQU1IoJWE2KQorCisJbW92ZWwJJWEwLCVhMQorCW1vdmVsCUVYQ19FQSglYTYpLCVhMAorCWJzcmwJZGVzdF9kYmwKKwlvcmwJI292ZmlueF9tYXNrLFVTRVJfRlBTUiglYTYpCisJYnJhCW12b3V0X2VuZAorCit8Cit8CURQU1BETlJNCit8Cit8IFRoaXMgc3Vicm91dGluZSB0YWtlcyBhbiBleHRlbmRlZCBub3JtYWxpemVkIG51bWJlciBhbmQgZGVub3JtYWxpemVzCit8IGl0IHRvIHRoZSBnaXZlbiByb3VuZCBwcmVjaXNpb24uIFRoaXMgc3Vicm91dGluZSBhbHNvIGRlY3JlbWVudHMKK3wgdGhlIGlucHV0IG9wZXJhbmQncyBleHBvbmVudCBieSAxIHRvIGFjY291bnQgZm9yIHRoZSBmYWN0IHRoYXQKK3wgZGVzdF9zZ2wgb3IgZGVzdF9kYmwgZXhwZWN0cyBhIG5vcm1hbGl6ZWQgbnVtYmVyJ3MgYmlhcy4KK3wKK3wgSW5wdXQ6IGEwICBwb2ludHMgdG8gYSBub3JtYWxpemVkIG51bWJlciBpbiBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQKK3wJIGQwICBpcyB0aGUgcm91bmQgcHJlY2lzaW9uICg9MSBmb3Igc2dsOyA9MiBmb3IgZGJsKQorfAkgZDEgIGlzIHRoZSBzaW5nbGUgcHJlY2lzaW9uIG9yIGRvdWJsZSBwcmVjaXNpb24KK3wJICAgICBkZW5vcm0gdGhyZXNob2xkCit8Cit8IE91dHB1dDogKEluIHRoZSBmb3JtYXQgZm9yIGRlc3Rfc2dsIG9yIGRlc3RfZGJsKQorfAkgYTAgICBwb2ludHMgdG8gdGhlIGRlc3RpbmF0aW9uCit8CSBhMSAgIHBvaW50cyB0byB0aGUgb3BlcmFuZAorfAorfCBFeGNlcHRpb25zOiBSZXBvcnRzIGluZXhhY3QgMiBleGNlcHRpb24gYnkgc2V0dGluZyBVU0VSX0ZQU1IgYml0cworfAorZHBzcGRucm06CisJbW92ZWwJJWQwLC0oJWE3KQl8c2F2ZSByb3VuZCBwcmVjaXNpb24KKwljbHJsCSVkMAkJfGNsZWFyIGluaXRpYWwgZyxyLHMKKwlic3JsCWRucm1fbHAJCXxjYXJlZnVsIHdpdGggZDAsIGl0J3MgbmVlZGVkIGJ5IHJvdW5kCisKKwliZmV4dHUJRlBDUl9NT0RFKCVhNil7IzI6IzJ9LCVkMSB8Z2V0IHJvdW5kaW5nIG1vZGUKKwlzd2FwCSVkMQorCW1vdmV3CTIoJWE3KSwlZDEJfHNldCByb3VuZGluZyBwcmVjaXNpb24KKwlzd2FwCSVkMQkJfGF0IHRoaXMgcG9pbnQgZDEgaGFzIFBSRUMvTU9ERSBpbmZvCisJYnNybAlyb3VuZAkJfHJvdW5kIHJlc3VsdCwgc2V0cyB0aGUgaW5leCBiaXQgaW4KK3wJCQkJO1VTRVJfRlBTUiBpZiBuZWVkZWQKKworCW1vdmV3CSMxLCVkMAorCXN1YncJJWQwLExPQ0FMX0VYKCVhMCkgfGFjY291bnQgZm9yIGRpZmZlcmVuY2UgaW4gZGVub3JtCit8CQkJCTt2cyBub3JtIGJpYXMKKworCW1vdmVsCSVhMCwlYTEJCXxhMSBoYXMgdGhlIG9wZXJhbmQgaW5wdXQKKwltb3ZlbAlFWENfRUEoJWE2KSwlYTAJfGEwIGhhcyB0aGUgZGVzdGluYXRpb24gcG9pbnRlcgorCWFkZHcJIzQsJWE3CQl8cG9wIHN0YWNrCisJcnRzCit8Cit8IFNFVF9YT1AgaW5pdGlhbGl6ZWQgV0JURU1QIHdpdGggdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkgYTAKK3wgaW5wdXQ6IGEwIHBvaW50cyB0byBpbnB1dCBvcGVyYW5kIGluIHRoZSBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQKK3wKK3NldF94b3A6CisJbW92ZWwJTE9DQUxfRVgoJWEwKSxXQlRFTVBfRVgoJWE2KQorCW1vdmVsCUxPQ0FMX0hJKCVhMCksV0JURU1QX0hJKCVhNikKKwltb3ZlbAlMT0NBTF9MTyglYTApLFdCVEVNUF9MTyglYTYpCisJYmZjbHIJV0JURU1QX1NHTiglYTYpeyMwOiM4fQorCWJlcXMJc3hvcAorCWJzZXRiCSNzaWduX2JpdCxXQlRFTVBfRVgoJWE2KQorc3hvcDoKKwliZmNscglTVEFHKCVhNil7IzU6IzR9CXxjbGVhciB3YnRtNjYsd2J0bTEsd2J0bTAsc2JpdAorCXJ0cworfAorfAlQX01PVkUKK3wKK3BfbW92ZXQ6CisJLmxvbmcJcF9tb3ZlCisJLmxvbmcJcF9tb3ZlegorCS5sb25nCXBfbW92ZWkKKwkubG9uZwlwX21vdmVuCisJLmxvbmcJcF9tb3ZlCitwX3JlZ2Q6CisJLmxvbmcJcF9keWQwCisJLmxvbmcJcF9keWQxCisJLmxvbmcJcF9keWQyCisJLmxvbmcJcF9keWQzCisJLmxvbmcJcF9keWQ0CisJLmxvbmcJcF9keWQ1CisJLmxvbmcJcF9keWQ2CisJLmxvbmcJcF9keWQ3CisKK3BhY2tfb3V0OgorCWxlYWwJcF9tb3ZldCwlYTAJfGxvYWQgam1wIHRhYmxlIGFkZHJlc3MKKwltb3ZldwlTVEFHKCVhNiksJWQwCXxnZXQgc291cmNlIHRhZworCWJmZXh0dQklZDB7IzE2OiMzfSwlZDAJfGlzb2xhdGUgc291cmNlIGJpdHMKKwltb3ZlbAkoJWEwLCVkMC53KjQpLCVhMAl8bG9hZCBhMCB3aXRoIHJvdXRpbmUgbGFiZWwgZm9yIHRhZworCWptcAkoJWEwKQkJfGdvIHRvIHRoZSByb3V0aW5lCisKK3Bfd3JpdGU6CisJbW92ZWwJIzB4MGMsJWQwCXxnZXQgYnl0ZSBjb3VudAorCW1vdmVsCUVYQ19FQSglYTYpLCVhMQl8Z2V0IHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzCisJYnNyCW1lbV93cml0ZQl8d3JpdGUgdGhlIHVzZXIncyBkZXN0aW5hdGlvbgorCW1vdmViCSMwLENVX1NBVkVQQyglYTYpIHxzZXQgdGhlIGN1IHNhdmUgcGMgdG8gYWxsIDAncworCit8Cit8IEFsc28gbm90ZSB0aGF0IHRoZSBkdGFnIG11c3QgYmUgc2V0IHRvIG5vcm0gaGVyZSAtIHRoaXMgaXMgYmVjYXVzZQorfCB0aGUgMDQwIHVzZXMgdGhlIGR0YWcgdG8gZXhlY3V0ZSB0aGUgY29ycmVjdCBtaWNyb2NvZGUuCit8CisgICAgICAgIGJmY2xyICAgIERUQUcoJWE2KXsjMDojM30gIHxzZXQgZHRhZyB0byBub3JtCisKKwlydHMKKworfCBOb3RlcyBvbiBoYW5kbGluZyBvZiBzcGVjaWFsIGNhc2UgKHplcm8sIGluZiwgYW5kIG5hbikgaW5wdXRzOgorfAkxLiBPcGVyciBpcyBub3Qgc2lnbmFsbGVkIGlmIHRoZSBrLWZhY3RvciBpcyBncmVhdGVyIHRoYW4gMTguCit8CTIuIFBlciB0aGUgbWFudWFsLCBzdGF0dXMgYml0cyBhcmUgbm90IHNldC4KK3wKKworcF9tb3ZlOgorCW1vdmV3CUNNRFJFRzFCKCVhNiksJWQwCisJYnRzdGwJI2tmYWN0X2JpdCwlZDAJfHRlc3QgZm9yIGR5bmFtaWMgay1mYWN0b3IKKwliZXFzCXN0YXRpY2sJCXxpZiBjbGVhciwgay1mYWN0b3IgaXMgc3RhdGljCitkeW5hbWljazoKKwliZmV4dHUJJWQweyMyNTojM30sJWQwCXxpc29sYXRlIHJlZ2lzdGVyIGZvciBkeW5hbWljIGstZmFjdG9yCisJbGVhCXBfcmVnZCwlYTAKKwltb3ZlbAklYTBAKCVkMDpsOjQpLCVhMAorCWptcAkoJWEwKQorc3RhdGljazoKKwlhbmRpdwkjMHgwMDdmLCVkMAl8Z2V0IGstZmFjdG9yCisJYmZleHRzCSVkMHsjMjU6Izd9LCVkMAl8c2lnbiBleHRlbmQgZDAgZm9yIGJpbmRlYworCWxlYWwJRVRFTVAoJWE2KSwlYTAJfGEwIHdpbGwgcG9pbnQgdG8gdGhlIHBhY2tlZCBkZWNpbWFsCisJYnNybAliaW5kZWMJCXxwZXJmb3JtIHRoZSBjb252ZXJ0OyBkYXRhIGF0IGE2CisJbGVhbAlGUF9TQ1IxKCVhNiksJWEwCXxsb2FkIGEwIHdpdGggcmVzdWx0IGFkZHJlc3MKKwlicmFsCXBfd3JpdGUKK3BfbW92ZXo6CisJbGVhbAlFVEVNUCglYTYpLCVhMAl8YTAgd2lsbCBwb2ludCB0byB0aGUgcGFja2VkIGRlY2ltYWwKKwljbHJ3CTIoJWEwKQkJfGNsZWFyIGxvd2VyIHdvcmQgb2YgZXhwCisJY2xybAk0KCVhMCkJCXxsb2FkIHNlY29uZCBsd29yZCBvZiBaRVJPCisJY2xybAk4KCVhMCkJCXxsb2FkIHRoaXJkIGx3b3JkIG9mIFpFUk8KKwlicmEJcF93cml0ZQkJfGdvIHdyaXRlIHJlc3VsdHMKK3BfbW92ZWk6CisJZm1vdmVsCSMwLCVGUFNSCQl8Y2xlYXIgYWlvcAorCWxlYWwJRVRFTVAoJWE2KSwlYTAJfGEwIHdpbGwgcG9pbnQgdG8gdGhlIHBhY2tlZCBkZWNpbWFsCisJY2xydwkyKCVhMCkJCXxjbGVhciBsb3dlciB3b3JkIG9mIGV4cAorCWJyYQlwX3dyaXRlCQl8Z28gd3JpdGUgdGhlIHJlc3VsdAorcF9tb3ZlbjoKKwlsZWFsCUVURU1QKCVhNiksJWEwCXxhMCB3aWxsIHBvaW50IHRvIHRoZSBwYWNrZWQgZGVjaW1hbAorCWNscncJMiglYTApCQl8Y2xlYXIgbG93ZXIgd29yZCBvZiBleHAKKwlicmEJcF93cml0ZQkJfGdvIHdyaXRlIHRoZSByZXN1bHQKKworfAorfCBSb3V0aW5lcyB0byByZWFkIHRoZSBkeW5hbWljIGstZmFjdG9yIGZyb20gRG4uCit8CitwX2R5ZDA6CisJbW92ZWwJVVNFUl9EMCglYTYpLCVkMAorCWJyYXMJc3RhdGljaworcF9keWQxOgorCW1vdmVsCVVTRVJfRDEoJWE2KSwlZDAKKwlicmFzCXN0YXRpY2sKK3BfZHlkMjoKKwltb3ZlbAklZDIsJWQwCisJYnJhcwlzdGF0aWNrCitwX2R5ZDM6CisJbW92ZWwJJWQzLCVkMAorCWJyYXMJc3RhdGljaworcF9keWQ0OgorCW1vdmVsCSVkNCwlZDAKKwlicmFzCXN0YXRpY2sKK3BfZHlkNToKKwltb3ZlbAklZDUsJWQwCisJYnJhcwlzdGF0aWNrCitwX2R5ZDY6CisJbW92ZWwJJWQ2LCVkMAorCWJyYQlzdGF0aWNrCitwX2R5ZDc6CisJbW92ZWwJJWQ3LCVkMAorCWJyYQlzdGF0aWNrCisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9yb3VuZC5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAvcm91bmQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGY5ODA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAvcm91bmQuUwpAQCAtMCwwICsxLDY0OSBAQAorfAorfAlyb3VuZC5zYSAzLjQgNy8yOS85MQorfAorfAloYW5kbGUgcm91bmRpbmcgYW5kIG5vcm1hbGl6YXRpb24gdGFza3MKK3wKK3wKK3wKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK3xST1VORAlpZG50ICAgIDIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKwl8c2VjdGlvbgk4CisKKyNpbmNsdWRlICJmcHNwLmgiCisKK3wKK3wJcm91bmQgLS0tIHJvdW5kIHJlc3VsdCBhY2NvcmRpbmcgdG8gcHJlY2lzaW9uL21vZGUKK3wKK3wJYTAgcG9pbnRzIHRvIHRoZSBpbnB1dCBvcGVyYW5kIGluIHRoZSBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQKK3wJZDEoaGlnaCB3b3JkKSBjb250YWlucyByb3VuZGluZyBwcmVjaXNpb246Cit8CQlleHQgPSAkMDAwMHh4eHgKK3wJCXNnbCA9ICQwMDAxeHh4eAorfAkJZGJsID0gJDAwMDJ4eHh4Cit8CWQxKGxvdyB3b3JkKSBjb250YWlucyByb3VuZGluZyBtb2RlOgorfAkJUk4gID0gJHh4eHgwMDAwCit8CQlSWiAgPSAkeHh4eDAwMDEKK3wJCVJNICA9ICR4eHh4MDAxMAorfAkJUlAgID0gJHh4eHgwMDExCit8CWQwezMxOjI5fSBjb250YWlucyB0aGUgZyxyLHMgYml0cyAoZXh0ZW5kZWQpCit8Cit8CU9uIHJldHVybiB0aGUgdmFsdWUgcG9pbnRlZCB0byBieSBhMCBpcyBjb3JyZWN0bHkgcm91bmRlZCwKK3wJYTAgaXMgcHJlc2VydmVkIGFuZCB0aGUgZy1yLXMgYml0cyBpbiBkMCBhcmUgY2xlYXJlZC4KK3wJVGhlIHJlc3VsdCBpcyBub3QgdHlwZWQgLSB0aGUgdGFnIGZpZWxkIGlzIGludmFsaWQuICBUaGUKK3wJcmVzdWx0IGlzIHN0aWxsIGluIHRoZSBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQuCit8Cit8CVRoZSBJTkVYIGJpdCBvZiBVU0VSX0ZQU1Igd2lsbCBiZSBzZXQgaWYgdGhlIHJvdW5kZWQgcmVzdWx0IHdhcworfAlpbmV4YWN0IChpLmUuIGlmIGFueSBvZiB0aGUgZy1yLXMgYml0cyB3ZXJlIHNldCkuCit8CisKKwkuZ2xvYmFsCXJvdW5kCityb3VuZDoKK3wgSWYgZz1yPXM9MCB0aGVuIHJlc3VsdCBpcyBleGFjdCBhbmQgcm91bmQgaXMgZG9uZSwgZWxzZSBzZXQKK3wgdGhlIGluZXggZmxhZyBpbiBzdGF0dXMgcmVnIGFuZCBjb250aW51ZS4KK3wKKwlic3JzCWV4dF9ncnMJCQl8dGhpcyBzdWJyb3V0aW5lIGxvb2tzIGF0IHRoZQorfAkJCQkJOnJvdW5kaW5nIHByZWNpc2lvbiBhbmQgc2V0cworfAkJCQkJO3RoZSBhcHByb3ByaWF0ZSBnLXItcyBiaXRzLgorCXRzdGwJJWQwCQkJfGlmIGdycyBhcmUgemVybywgZ28gZm9yY2UKKwlibmUJcm5kX2NvbnQJCXxsb3dlciBiaXRzIHRvIHplcm8gZm9yIHNpemUKKworCXN3YXAJJWQxCQkJfHNldCB1cCBkMS53IGZvciByb3VuZCBwcmVjLgorCWJyYQl0cnVuY2F0ZQorCitybmRfY29udDoKK3wKK3wgVXNlIHJvdW5kaW5nIG1vZGUgYXMgYW4gaW5kZXggaW50byBhIGp1bXAgdGFibGUgZm9yIHRoZXNlIG1vZGVzLgorfAorCW9ybAkjaW54MmFfbWFzayxVU0VSX0ZQU1IoJWE2KSB8c2V0IGluZXgyL2FpbmV4CisJbGVhCW1vZGVfdGFiLCVhMQorCW1vdmVsCSglYTEsJWQxLncqNCksJWExCisJam1wCSglYTEpCit8Cit8IEp1bXAgdGFibGUgaW5kZXhlZCBieSByb3VuZGluZyBtb2RlIGluIGQxLncuICBBbGwgZm9sbG93aW5nIGFzc3VtZXMKK3wgZ3JzICE9IDAuCit8Cittb2RlX3RhYjoKKwkubG9uZwlybmRfbmVhcgorCS5sb25nCXJuZF96ZXJvCisJLmxvbmcJcm5kX21udXMKKwkubG9uZwlybmRfcGx1cworfAorfAlST1VORCBQTFVTIElORklOSVRZCit8Cit8CUlmIHNpZ24gb2YgZnAgbnVtYmVyID0gMCAocG9zaXRpdmUpLCB0aGVuIGFkZCAxIHRvIGwuCit8CitybmRfcGx1czoKKwlzd2FwCSVkMQkJCXxzZXQgdXAgZDEgZm9yIHJvdW5kIHByZWMuCisJdHN0YglMT0NBTF9TR04oJWEwKQkJfGNoZWNrIGZvciBzaWduCisJYm1pCXRydW5jYXRlCQl8aWYgcG9zaXRpdmUgdGhlbiB0cnVuY2F0ZQorCW1vdmVsCSMweGZmZmZmZmZmLCVkMAkJfGZvcmNlIGcscixzIHRvIGJlIGFsbCBmJ3MKKwlsZWEJYWRkX3RvX2wsJWExCisJbW92ZWwJKCVhMSwlZDEudyo0KSwlYTEKKwlqbXAJKCVhMSkKK3wKK3wJUk9VTkQgTUlOVVMgSU5GSU5JVFkKK3wKK3wJSWYgc2lnbiBvZiBmcCBudW1iZXIgPSAxIChuZWdhdGl2ZSksIHRoZW4gYWRkIDEgdG8gbC4KK3wKK3JuZF9tbnVzOgorCXN3YXAJJWQxCQkJfHNldCB1cCBkMSBmb3Igcm91bmQgcHJlYy4KKwl0c3RiCUxPQ0FMX1NHTiglYTApCQl8Y2hlY2sgZm9yIHNpZ24KKwlicGwJdHJ1bmNhdGUJCXxpZiBuZWdhdGl2ZSB0aGVuIHRydW5jYXRlCisJbW92ZWwJIzB4ZmZmZmZmZmYsJWQwCQl8Zm9yY2UgZyxyLHMgdG8gYmUgYWxsIGYncworCWxlYQlhZGRfdG9fbCwlYTEKKwltb3ZlbAkoJWExLCVkMS53KjQpLCVhMQorCWptcAkoJWExKQorfAorfAlST1VORCBaRVJPCit8Cit8CUFsd2F5cyB0cnVuY2F0ZS4KK3JuZF96ZXJvOgorCXN3YXAJJWQxCQkJfHNldCB1cCBkMSBmb3Igcm91bmQgcHJlYy4KKwlicmEJdHJ1bmNhdGUKK3wKK3wKK3wJUk9VTkQgTkVBUkVTVAorfAorfAlJZiAoZz0xKSwgdGhlbiBhZGQgMSB0byBsIGFuZCBpZiAocj1zPTApLCB0aGVuIGNsZWFyIGwKK3wJTm90ZSB0aGF0IHRoaXMgd2lsbCByb3VuZCB0byBldmVuIGluIGNhc2Ugb2YgYSB0aWUuCit8CitybmRfbmVhcjoKKwlzd2FwCSVkMQkJCXxzZXQgdXAgZDEgZm9yIHJvdW5kIHByZWMuCisJYXNsbAkjMSwlZDAJCQl8c2hpZnQgZy1iaXQgdG8gYy1iaXQKKwliY2MJdHJ1bmNhdGUJCXxpZiAoZz0xKSB0aGVuCisJbGVhCWFkZF90b19sLCVhMQorCW1vdmVsCSglYTEsJWQxLncqNCksJWExCisJam1wCSglYTEpCisKK3wKK3wJZXh0X2dycyAtLS0gZXh0cmFjdCBndWFyZCwgcm91bmQgYW5kIHN0aWNreSBiaXRzCit8Cit8IElucHV0OglkMSA9CQlQUkVDOlJPVU5ECit8IE91dHB1dDoJZDB7MzE6Mjl9PQlndWFyZCwgcm91bmQsIHN0aWNreQorfAorfCBUaGUgZXh0X2dycyBleHRyYWN0IHRoZSBndWFyZC9yb3VuZC9zdGlja3kgYml0cyBhY2NvcmRpbmcgdG8gdGhlCit8IHNlbGVjdGVkIHJvdW5kaW5nIHByZWNpc2lvbi4gSXQgaXMgY2FsbGVkIGJ5IHRoZSByb3VuZCBzdWJyb3V0aW5lCit8IG9ubHkuICBBbGwgcmVnaXN0ZXJzIGV4Y2VwdCBkMCBhcmUga2VwdCBpbnRhY3QuIGQwIGJlY29tZXMgYW4KK3wgdXBkYXRlZCBndWFyZCxyb3VuZCxzdGlja3kgaW4gZDB7MzE6Mjl9Cit8Cit8IE5vdGVzOiB0aGUgZXh0X2dycyB1c2VzIHRoZSByb3VuZCBQUkVDLCBhbmQgdGhlcmVmb3JlIGhhcyB0byBzd2FwIGQxCit8CSBwcmlvciB0byB1c2FnZSwgYW5kIG5lZWRzIHRvIHJlc3RvcmUgZDEgdG8gb3JpZ2luYWwuCit8CitleHRfZ3JzOgorCXN3YXAJJWQxCQkJfGhhdmUgZDEudyBwb2ludCB0byByb3VuZCBwcmVjaXNpb24KKwljbXBpdwkjMCwlZDEKKwlibmVzCXNnbF9vcl9kYmwKKwlicmFzCWVuZF9leHRfZ3JzCisKK3NnbF9vcl9kYmw6CisJbW92ZW1sCSVkMi8lZDMsLSglYTcpCQl8bWFrZSBzb21lIHRlbXAgcmVnaXN0ZXJzCisJY21waXcJIzEsJWQxCisJYm5lcwlncnNfZGJsCitncnNfc2dsOgorCWJmZXh0dQlMT0NBTF9ISSglYTApeyMyNDojMn0sJWQzCXxzZ2wgcHJlYy4gZy1yIGFyZSAyIGJpdHMgcmlnaHQKKwltb3ZlbAkjMzAsJWQyCQkJfG9mIHRoZSBzZ2wgcHJlYy4gbGltaXRzCisJbHNsbAklZDIsJWQzCQkJfHNoaWZ0IGctciBiaXRzIHRvIE1TQiBvZiBkMworCW1vdmVsCUxPQ0FMX0hJKCVhMCksJWQyCQl8Z2V0IHdvcmQgMiBmb3Igcy1iaXQgdGVzdAorCWFuZGlsCSMweDAwMDAwMDNmLCVkMgkJfHMgYml0IGlzIHRoZSBvciBvZiBhbGwgb3RoZXIKKwlibmVzCXN0X3N0a3kJCQl8Yml0cyB0byB0aGUgcmlnaHQgb2YgZy1yCisJdHN0bAlMT0NBTF9MTyglYTApCQl8dGVzdCBsb3dlciBtYW50aXNzYQorCWJuZXMJc3Rfc3RreQkJCXxpZiBhbnkgYXJlIHNldCwgc2V0IHN0aWNreQorCXRzdGwJJWQwCQkJfHRlc3Qgb3JpZ2luYWwgZyxyLHMKKwlibmVzCXN0X3N0a3kJCQl8aWYgYW55IGFyZSBzZXQsIHNldCBzdGlja3kKKwlicmFzCWVuZF9zZAkJCXxpZiB3b3JkcyAzIGFuZCA0IGFyZSBjbHIsIGV4aXQKK2dyc19kYmw6CisJYmZleHR1CUxPQ0FMX0xPKCVhMCl7IzIxOiMyfSwlZDMJfGRibC1wcmVjLiBnLXIgYXJlIDIgYml0cyByaWdodAorCW1vdmVsCSMzMCwlZDIJCQl8b2YgdGhlIGRibCBwcmVjLiBsaW1pdHMKKwlsc2xsCSVkMiwlZDMJCQl8c2hpZnQgZy1yIGJpdHMgdG8gdGhlIE1TQiBvZiBkMworCW1vdmVsCUxPQ0FMX0xPKCVhMCksJWQyCQl8Z2V0IGxvd2VyIG1hbnRpc3NhICBmb3Igcy1iaXQgdGVzdAorCWFuZGlsCSMweDAwMDAwMWZmLCVkMgkJfHMgYml0IGlzIHRoZSBvci1pbmcgb2YgYWxsCisJYm5lcwlzdF9zdGt5CQkJfG90aGVyIGJpdHMgdG8gdGhlIHJpZ2h0IG9mIGctcgorCXRzdGwJJWQwCQkJfHRlc3Qgd29yZCBvcmlnaW5hbCBnLHIscworCWJuZXMJc3Rfc3RreQkJCXxpZiBhbnkgYXJlIHNldCwgc2V0IHN0aWNreQorCWJyYXMJZW5kX3NkCQkJfGlmIGNsZWFyLCBleGl0CitzdF9zdGt5OgorCWJzZXQJI3JuZF9zdGt5X2JpdCwlZDMKK2VuZF9zZDoKKwltb3ZlbAklZDMsJWQwCQkJfHJldHVybiBncnMgdG8gZDAKKwltb3ZlbWwJKCVhNykrLCVkMi8lZDMJCXxyZXN0b3JlIHNjcmF0Y2ggcmVnaXN0ZXJzCitlbmRfZXh0X2dyczoKKwlzd2FwCSVkMQkJCXxyZXN0b3JlIGQxIHRvIG9yaWdpbmFsCisJcnRzCisKK3wqKioqKioqKioqKioqKioqKioqICBMb2NhbCBFcXVhdGVzCisJLnNldAlhZF8xX3NnbCwweDAwMDAwMTAwCXwgIGNvbnN0YW50IHRvIGFkZCAxIHRvIGwtYml0IGluIHNnbCBwcmVjCisJLnNldAlhZF8xX2RibCwweDAwMDAwODAwCXwgIGNvbnN0YW50IHRvIGFkZCAxIHRvIGwtYml0IGluIGRibCBwcmVjCisKKworfEp1bXAgdGFibGUgZm9yIGFkZGluZyAxIHRvIHRoZSBsLWJpdCBpbmRleGVkIGJ5IHJuZCBwcmVjCisKK2FkZF90b19sOgorCS5sb25nCWFkZF9leHQKKwkubG9uZwlhZGRfc2dsCisJLmxvbmcJYWRkX2RibAorCS5sb25nCWFkZF9kYmwKK3wKK3wJQUREIFNJTkdMRQorfAorYWRkX3NnbDoKKwlhZGRsCSNhZF8xX3NnbCxMT0NBTF9ISSglYTApCisJYmNjcwlzY2NfY2xyCQkJfG5vIG1hbnRpc3NhIG92ZXJmbG93CisJcm94cncgIExPQ0FMX0hJKCVhMCkJCXxzaGlmdCB2LWJpdCBiYWNrIGluCisJcm94cncgIExPQ0FMX0hJKzIoJWEwKQkJfHNoaWZ0IHYtYml0IGJhY2sgaW4KKwlhZGR3CSMweDEsTE9DQUxfRVgoJWEwKQl8YW5kIGluY3IgZXhwb25lbnQKK3NjY19jbHI6CisJdHN0bAklZDAJCQl8dGVzdCBmb3IgcnMgPSAwCisJYm5lcwlzZ2xfZG9uZQorCWFuZGl3ICAjMHhmZTAwLExPQ0FMX0hJKzIoJWEwKQl8Y2xlYXIgdGhlIGwtYml0CitzZ2xfZG9uZToKKwlhbmRpbAkjMHhmZmZmZmYwMCxMT0NBTF9ISSglYTApIHx0cnVuY2F0ZSBiaXRzIGJleW9uZCBzZ2wgbGltaXQKKwljbHJsCUxPQ0FMX0xPKCVhMCkJCXxjbGVhciBkMgorCXJ0cworCit8Cit8CUFERCBFWFRFTkRFRAorfAorYWRkX2V4dDoKKwlhZGRxbCAgIzEsTE9DQUxfTE8oJWEwKQkJfGFkZCAxIHRvIGwtYml0CisJYmNjcwl4Y2NfY2xyCQkJfHRlc3QgZm9yIGNhcnJ5IG91dAorCWFkZHFsICAjMSxMT0NBTF9ISSglYTApCQl8cHJvcGFnYXRlIGNhcnJ5CisJYmNjcwl4Y2NfY2xyCisJcm94cncgIExPQ0FMX0hJKCVhMCkJCXxtYW50IGlzIDAgc28gcmVzdG9yZSB2LWJpdAorCXJveHJ3ICBMT0NBTF9ISSsyKCVhMCkJCXxtYW50IGlzIDAgc28gcmVzdG9yZSB2LWJpdAorCXJveHJ3CUxPQ0FMX0xPKCVhMCkKKwlyb3hydwlMT0NBTF9MTysyKCVhMCkKKwlhZGR3CSMweDEsTE9DQUxfRVgoJWEwKQl8YW5kIGluYyBleHAKK3hjY19jbHI6CisJdHN0bAklZDAJCQl8dGVzdCBycyA9IDAKKwlibmVzCWFkZF9leHRfZG9uZQorCWFuZGliCSMweGZlLExPQ0FMX0xPKzMoJWEwKQl8Y2xlYXIgdGhlIGwgYml0CithZGRfZXh0X2RvbmU6CisJcnRzCit8Cit8CUFERCBET1VCTEUKK3wKK2FkZF9kYmw6CisJYWRkbAkjYWRfMV9kYmwsTE9DQUxfTE8oJWEwKQorCWJjY3MJZGNjX2NscgorCWFkZHFsCSMxLExPQ0FMX0hJKCVhMCkJCXxwcm9wYWdhdGUgY2FycnkKKwliY2NzCWRjY19jbHIKKwlyb3hydwlMT0NBTF9ISSglYTApCQl8bWFudCBpcyAwIHNvIHJlc3RvcmUgdi1iaXQKKwlyb3hydwlMT0NBTF9ISSsyKCVhMCkJCXxtYW50IGlzIDAgc28gcmVzdG9yZSB2LWJpdAorCXJveHJ3CUxPQ0FMX0xPKCVhMCkKKwlyb3hydwlMT0NBTF9MTysyKCVhMCkKKwlhZGR3CSMweDEsTE9DQUxfRVgoJWEwKQl8aW5jciBleHBvbmVudAorZGNjX2NscjoKKwl0c3RsCSVkMAkJCXx0ZXN0IGZvciBycyA9IDAKKwlibmVzCWRibF9kb25lCisJYW5kaXcJIzB4ZjAwMCxMT0NBTF9MTysyKCVhMCkJfGNsZWFyIHRoZSBsLWJpdAorCitkYmxfZG9uZToKKwlhbmRpbAkjMHhmZmZmZjgwMCxMT0NBTF9MTyglYTApIHx0cnVuY2F0ZSBiaXRzIGJleW9uZCBkYmwgbGltaXQKKwlydHMKKworZXJyb3I6CisJcnRzCit8Cit8IFRydW5jYXRlIGFsbCBvdGhlciBiaXRzCit8Cit0cnVuY3Q6CisJLmxvbmcJZW5kX3JuZAorCS5sb25nCXNnbF9kb25lCisJLmxvbmcJZGJsX2RvbmUKKwkubG9uZwlkYmxfZG9uZQorCit0cnVuY2F0ZToKKwlsZWEJdHJ1bmN0LCVhMQorCW1vdmVsCSglYTEsJWQxLncqNCksJWExCisJam1wCSglYTEpCisKK2VuZF9ybmQ6CisJcnRzCisKK3wKK3wJTk9STUFMSVpFCit8Cit8IFRoZXNlIHJvdXRpbmVzIChucm1femVybyAmIG5ybV9zZXQpIG5vcm1hbGl6ZSB0aGUgdW5ub3JtLiAgVGhpcworfCBpcyBkb25lIGJ5IHNoaWZ0aW5nIHRoZSBtYW50aXNzYSBsZWZ0IHdoaWxlIGRlY3JlbWVudGluZyB0aGUKK3wgZXhwb25lbnQuCit8Cit8IE5STV9TRVQgc2hpZnRzIGFuZCBkZWNyZW1lbnRzIHVudGlsIHRoZXJlIGlzIGEgMSBzZXQgaW4gdGhlIGludGVnZXIKK3wgYml0IG9mIHRoZSBtYW50aXNzYSAobXNiIGluIGQxKS4KK3wKK3wgTlJNX1pFUk8gc2hpZnRzIGFuZCBkZWNyZW1lbnRzIHVudGlsIHRoZXJlIGlzIGEgMSBzZXQgaW4gdGhlIGludGVnZXIKK3wgYml0IG9mIHRoZSBtYW50aXNzYSAobXNiIGluIGQxKSB1bmxlc3MgdGhpcyB3b3VsZCBtZWFuIHRoZSBleHBvbmVudAorfCB3b3VsZCBnbyBsZXNzIHRoYW4gMC4gIEluIHRoYXQgY2FzZSB0aGUgbnVtYmVyIGJlY29tZXMgYSBkZW5vcm0gLSB0aGUKK3wgZXhwb25lbnQgKGQwKSBpcyBzZXQgdG8gMCBhbmQgdGhlIG1hbnRpc3NhIChkMSAmIGQyKSBpcyBub3QKK3wgbm9ybWFsaXplZC4KK3wKK3wgTm90ZSB0aGF0IGJvdGggcm91dGluZXMgaGF2ZSBiZWVuIG9wdGltaXplZCAoZm9yIHRoZSB3b3JzdCBjYXNlKSBhbmQKK3wgdGhlcmVmb3JlIGRvIG5vdCBoYXZlIHRoZSBlYXN5IHRvIGZvbGxvdyBkZWNyZW1lbnQvc2hpZnQgbG9vcC4KK3wKK3wJTlJNX1pFUk8KK3wKK3wJRGlzdGFuY2UgdG8gZmlyc3QgMSBiaXQgaW4gbWFudGlzc2EgPSBYCit8CURpc3RhbmNlIHRvIDAgZnJvbSBleHBvbmVudCA9IFkKK3wJSWYgWCA8IFkKK3wJVGhlbgorfAkgIG5ybV9zZXQKK3wJRWxzZQorfAkgIHNoaWZ0IG1hbnRpc3NhIGJ5IFkKK3wJICBzZXQgZXhwb25lbnQgPSAwCit8Cit8aW5wdXQ6Cit8CUZQX1NDUjEgPSBleHBvbmVudCwgbXMgbWFudGlzc2EgcGFydCwgbHMgbWFudGlzc2EgcGFydAorfG91dHB1dDoKK3wJTF9TQ1IxezR9ID0gZnB0ZTE1IG9yIGV0ZTE1IGJpdAorfAorCS5nbG9iYWwJbnJtX3plcm8KK25ybV96ZXJvOgorCW1vdmV3CUxPQ0FMX0VYKCVhMCksJWQwCisJY21wdyAgICM2NCwlZDAgICAgICAgICAgfHNlZSBpZiBleHAgPiA2NAorCWJtaXMJZDBfbGVzcworCWJzcglucm1fc2V0CQl8ZXhwID4gNjQgc28gZXhwIHdvbid0IGV4Y2VlZCAwCisJcnRzCitkMF9sZXNzOgorCW1vdmVtbAklZDIvJWQzLyVkNS8lZDYsLSglYTcpCisJbW92ZWwJTE9DQUxfSEkoJWEwKSwlZDEKKwltb3ZlbAlMT0NBTF9MTyglYTApLCVkMgorCisJYmZmZm8JJWQxeyMwOiMzMn0sJWQzCXxnZXQgdGhlIGRpc3RhbmNlIHRvIHRoZSBmaXJzdCAxCit8CQkJCTtpbiBtcyBtYW50CisJYmVxcwltc19jbHIJCXxicmFuY2ggaWYgbm8gYml0cyB3ZXJlIHNldAorCWNtcHcJJWQzLCVkMAkJfG9mIFg+WQorCWJtaXMJZ3JlYXRlcgkJfHRoZW4gZXhwIHdpbGwgZ28gcGFzdCAwIChuZWcpIGlmCit8CQkJCTtpdCBpcyBqdXN0IHNoaWZ0ZWQKKwlic3IJbnJtX3NldAkJfGVsc2UgZXhwIHdvbid0IGdvIHBhc3QgMAorCW1vdmVtbAkoJWE3KSssJWQyLyVkMy8lZDUvJWQ2CisJcnRzCitncmVhdGVyOgorCW1vdmVsCSVkMiwlZDYJCXxzYXZlIGxzIG1hbnQgaW4gZDYKKwlsc2xsCSVkMCwlZDIJCXxzaGlmdCBscyBtYW50IGJ5IGNvdW50CisJbHNsbAklZDAsJWQxCQl8c2hpZnQgbXMgbWFudCBieSBjb3VudAorCW1vdmVsCSMzMiwlZDUKKwlzdWJsCSVkMCwlZDUJCXxtYWtlIG9wIGEgZGVub3JtIGJ5IHNoaWZ0aW5nIGJpdHMKKwlsc3JsCSVkNSwlZDYJCXxieSB0aGUgbnVtYmVyIGluIHRoZSBleHAsIHRoZW4KK3wJCQkJO3NldCBleHAgPSAwLgorCW9ybAklZDYsJWQxCQl8c2hpZnQgdGhlIGxzIG1hbnQgYml0cyBpbnRvIHRoZSBtcyBtYW50CisJbW92ZWwJIzAsJWQwCQl8c2FtZSBhcyBpZiBkZWNyZW1lbnRlZCBleHAgdG8gMAorfAkJCQk7d2hpbGUgc2hpZnRpbmcKKwltb3ZldwklZDAsTE9DQUxfRVgoJWEwKQorCW1vdmVsCSVkMSxMT0NBTF9ISSglYTApCisJbW92ZWwJJWQyLExPQ0FMX0xPKCVhMCkKKwltb3ZlbWwJKCVhNykrLCVkMi8lZDMvJWQ1LyVkNgorCXJ0cworbXNfY2xyOgorCWJmZmZvCSVkMnsjMDojMzJ9LCVkMwl8Y2hlY2sgaWYgYW55IGJpdHMgc2V0IGluIGxzIG1hbnQKKwliZXFzCWFsbF9jbHIJCXxicmFuY2ggaWYgbm9uZSBzZXQKKwlhZGR3CSMzMiwlZDMKKwljbXB3CSVkMywlZDAJCXxpZiBYPlkKKwlibWlzCWdyZWF0ZXIJCXx0aGVuIGJyYW5jaAorCWJzcglucm1fc2V0CQl8ZWxzZSBleHAgd29uJ3QgZ28gcGFzdCAwCisJbW92ZW1sCSglYTcpKywlZDIvJWQzLyVkNS8lZDYKKwlydHMKK2FsbF9jbHI6CisJbW92ZXcJIzAsTE9DQUxfRVgoJWEwKQl8bm8gbWFudGlzc2EgYml0cyBzZXQuIFNldCBleHAgPSAwLgorCW1vdmVtbAkoJWE3KSssJWQyLyVkMy8lZDUvJWQ2CisJcnRzCit8Cit8CU5STV9TRVQKK3wKKwkuZ2xvYmFsCW5ybV9zZXQKK25ybV9zZXQ6CisJbW92ZWwJJWQ3LC0oJWE3KQorCWJmZmZvCUxPQ0FMX0hJKCVhMCl7IzA6IzMyfSwlZDcgfGZpbmQgZmlyc3QgMSBpbiBtcyBtYW50IHRvIGQ3KQorCWJlcXMJbG93ZXIJCXxicmFuY2ggaWYgbXMgbWFudCBpcyBhbGwgMCdzCisKKwltb3ZlbAklZDYsLSglYTcpCisKKwlzdWJ3CSVkNyxMT0NBTF9FWCglYTApCXxzdWIgZXhwb25lbnQgYnkgY291bnQKKwltb3ZlbAlMT0NBTF9ISSglYTApLCVkMAl8ZDAgaGFzIG1zIG1hbnQKKwltb3ZlbAlMT0NBTF9MTyglYTApLCVkMSB8ZDEgaGFzIGxzIG1hbnQKKworCWxzbGwJJWQ3LCVkMAkJfHNoaWZ0IGZpcnN0IDEgdG8gaiBiaXQgcG9zaXRpb24KKwltb3ZlbAklZDEsJWQ2CQl8Y29weSBscyBtYW50IGludG8gZDYKKwlsc2xsCSVkNywlZDYJCXxzaGlmdCBscyBtYW50IGJ5IGNvdW50CisJbW92ZWwJJWQ2LExPQ0FMX0xPKCVhMCkJfHN0b3JlIGxzIG1hbnQgaW50byBtZW1vcnkKKwltb3ZlcWwJIzMyLCVkNgorCXN1YmwJJWQ3LCVkNgkJfGNvbnRpbnVlIHNoaWZ0CisJbHNybAklZDYsJWQxCQl8c2hpZnQgb2ZmIGFsbCBiaXRzIGJ1dCB0aG9zZSB0aGF0IHdpbGwKK3wJCQkJO2JlIHNoaWZ0ZWQgaW50byBtcyBtYW50CisJb3JsCSVkMSwlZDAJCXxzaGlmdCB0aGUgbHMgbWFudCBiaXRzIGludG8gdGhlIG1zIG1hbnQKKwltb3ZlbAklZDAsTE9DQUxfSEkoJWEwKQl8c3RvcmUgbXMgbWFudCBpbnRvIG1lbW9yeQorCW1vdmVtbAkoJWE3KSssJWQ3LyVkNgl8cmVzdG9yZSByZWdpc3RlcnMKKwlydHMKKworfAorfCBXZSBnZXQgaGVyZSBpZiBtcyBtYW50IHdhcyA9IDAsIGFuZCB3ZSBhc3N1bWUgbHMgbWFudCBoYXMgYml0cworfCBzZXQgKG90aGVyd2lzZSB0aGlzIHdvdWxkIGhhdmUgYmVlbiB0YWdnZWQgYSB6ZXJvIG5vdCBhIGRlbm9ybSkuCit8Citsb3dlcjoKKwltb3ZldwlMT0NBTF9FWCglYTApLCVkMAl8ZDAgaGFzIGV4cG9uZW50CisJbW92ZWwJTE9DQUxfTE8oJWEwKSwlZDEJfGQxIGhhcyBscyBtYW50CisJc3VidwkjMzIsJWQwCQl8YWNjb3VudCBmb3IgbXMgbWFudCBiZWluZyBhbGwgemVyb3MKKwliZmZmbwklZDF7IzA6IzMyfSwlZDcJfGZpbmQgZmlyc3QgMSBpbiBscyBtYW50IHRvIGQ3KQorCXN1YncJJWQ3LCVkMAkJfHN1YnRyYWN0IHNoaWZ0IGNvdW50IGZyb20gZXhwCisJbHNsbAklZDcsJWQxCQl8c2hpZnQgZmlyc3QgMSB0byBpbnRlZ2VyIGJpdCBpbiBtcyBtYW50CisJbW92ZXcJJWQwLExPQ0FMX0VYKCVhMCkJfHN0b3JlIG1zIG1hbnQKKwltb3ZlbAklZDEsTE9DQUxfSEkoJWEwKQl8c3RvcmUgZXhwCisJY2xybAlMT0NBTF9MTyglYTApCXxjbGVhciBscyBtYW50CisJbW92ZWwJKCVhNykrLCVkNworCXJ0cworfAorfAlkZW5vcm0gLS0tIGRlbm9ybWFsaXplIGFuIGludGVybWVkaWF0ZSByZXN1bHQKK3wKK3wJVXNlZCBieSB1bmRlcmZsb3cuCit8Cit8IElucHV0OgorfAlhMAkgcG9pbnRzIHRvIHRoZSBvcGVyYW5kIHRvIGJlIGRlbm9ybWFsaXplZAorfAkJIChpbiB0aGUgaW50ZXJuYWwgZXh0ZW5kZWQgZm9ybWF0KQorfAorfAlkMDoJIHJvdW5kaW5nIHByZWNpc2lvbgorfCBPdXRwdXQ6Cit8CWEwCSBwb2ludHMgdG8gdGhlIGRlbm9ybWFsaXplZCByZXN1bHQKK3wJCSAoaW4gdGhlIGludGVybmFsIGV4dGVuZGVkIGZvcm1hdCkKK3wKK3wJZDAJaXMgZ3VhcmQscm91bmQsc3RpY2t5Cit8Cit8IGQwIGNvbWVzIGludG8gdGhpcyByb3V0aW5lIHdpdGggdGhlIHJvdW5kaW5nIHByZWNpc2lvbi4gSXQKK3wgaXMgdGhlbiBsb2FkZWQgd2l0aCB0aGUgZGVub3JtYWxpemVkIGV4cG9uZW50IHRocmVzaG9sZCBmb3IgdGhlCit8IHJvdW5kaW5nIHByZWNpc2lvbi4KK3wKKworCS5nbG9iYWwJZGVub3JtCitkZW5vcm06CisJYnRzdGIJIzYsTE9DQUxfRVgoJWEwKQl8Y2hlY2sgZm9yIGV4cG9uZW50cyBiZXR3ZWVuICQ3ZmZmLSQ0MDAwCisJYmVxcwlub19zZ25fZXh0CisJYnNldGIJIzcsTE9DQUxfRVgoJWEwKQl8c2lnbiBleHRlbmQgaWYgaXQgaXMgc28KK25vX3Nnbl9leHQ6CisKKwljbXBpYgkjMCwlZDAJCXxpZiAwIHRoZW4gZXh0ZW5kZWQgcHJlY2lzaW9uCisJYm5lcwlub3RfZXh0CQl8ZWxzZSBicmFuY2gKKworCWNscmwJJWQxCQl8bG9hZCBkMSB3aXRoIGV4dCB0aHJlc2hvbGQKKwljbHJsCSVkMAkJfGNsZWFyIHRoZSBzdGlja3kgZmxhZworCWJzcglkbnJtX2xwCQl8ZGVub3JtYWxpemUgdGhlIG51bWJlcgorCXRzdGIJJWQxCQl8Y2hlY2sgZm9yIGluZXgKKwliZXEJbm9faW5leAkJfGlmIGNsciwgbm8gaW5leAorCWJyYXMJZG5ybV9pbmV4CXxpZiBzZXQsIHNldCBpbmV4CisKK25vdF9leHQ6CisJY21waWwJIzEsJWQwCQl8aWYgMSB0aGVuIHNpbmdsZSBwcmVjaXNpb24KKwliZXFzCWxvYWRfc2dsCXxlbHNlIG11c3QgYmUgMiwgZG91YmxlIHByZWMKKworbG9hZF9kYmw6CisJbW92ZXcJI2RibF90aHJlc2gsJWQxCXxwdXQgY29weSBvZiB0aHJlc2hvbGQgaW4gZDEKKwltb3ZlbAklZDEsJWQwCQl8Y29weSBkMSBpbnRvIGQwCisJc3VidwlMT0NBTF9FWCglYTApLCVkMAl8ZGlmZiA9IHRocmVzaG9sZCAtIGV4cAorCWNtcHcJIzY3LCVkMAkJfGlmIGRpZmYgPiA2NyAobWFudCArIGdycyBiaXRzKQorCWJwbHMJY2hrX3N0a3kJfHRoZW4gYnJhbmNoIChhbGwgYml0cyB3b3VsZCBiZQorfAkJCQk7IHNoaWZ0ZWQgb2ZmIGluIGRlbm9ybSByb3V0aW5lKQorCWNscmwJJWQwCQl8ZWxzZSBjbGVhciB0aGUgc3RpY2t5IGZsYWcKKwlic3IJZG5ybV9scAkJfGRlbm9ybWFsaXplIHRoZSBudW1iZXIKKwl0c3RiCSVkMQkJfGNoZWNrIGZsYWcKKwliZXFzCW5vX2luZXgJCXxpZiBjbHIsIG5vIGluZXgKKwlicmFzCWRucm1faW5leAl8aWYgc2V0LCBzZXQgaW5leAorCitsb2FkX3NnbDoKKwltb3Zldwkjc2dsX3RocmVzaCwlZDEJfHB1dCBjb3B5IG9mIHRocmVzaG9sZCBpbiBkMQorCW1vdmVsCSVkMSwlZDAJCXxjb3B5IGQxIGludG8gZDAKKwlzdWJ3CUxPQ0FMX0VYKCVhMCksJWQwCXxkaWZmID0gdGhyZXNob2xkIC0gZXhwCisJY21wdwkjNjcsJWQwCQl8aWYgZGlmZiA+IDY3IChtYW50ICsgZ3JzIGJpdHMpCisJYnBscwljaGtfc3RreQl8dGhlbiBicmFuY2ggKGFsbCBiaXRzIHdvdWxkIGJlCit8CQkJCTsgc2hpZnRlZCBvZmYgaW4gZGVub3JtIHJvdXRpbmUpCisJY2xybAklZDAJCXxlbHNlIGNsZWFyIHRoZSBzdGlja3kgZmxhZworCWJzcglkbnJtX2xwCQl8ZGVub3JtYWxpemUgdGhlIG51bWJlcgorCXRzdGIJJWQxCQl8Y2hlY2sgZmxhZworCWJlcXMJbm9faW5leAkJfGlmIGNsciwgbm8gaW5leAorCWJyYXMJZG5ybV9pbmV4CXxpZiBzZXQsIHNldCBpbmV4CisKK2Noa19zdGt5OgorCXRzdGwJTE9DQUxfSEkoJWEwKQl8Y2hlY2sgZm9yIGFueSBiaXRzIHNldAorCWJuZXMJc2V0X3N0a3kKKwl0c3RsCUxPQ0FMX0xPKCVhMCkJfGNoZWNrIGZvciBhbnkgYml0cyBzZXQKKwlibmVzCXNldF9zdGt5CisJYnJhcwljbHJfbWFudAorc2V0X3N0a3k6CisJb3JsCSNpbngyYV9tYXNrLFVTRVJfRlBTUiglYTYpIHxzZXQgaW5leDIvYWluZXgKKwltb3ZlbAkjMHgyMDAwMDAwMCwlZDAJfHNldCBzdGlja3kgYml0IGluIHJldHVybiB2YWx1ZQorY2xyX21hbnQ6CisJbW92ZXcJJWQxLExPQ0FMX0VYKCVhMCkJCXxsb2FkIGV4cCB3aXRoIHRocmVzaG9sZAorCW1vdmVsCSMwLExPQ0FMX0hJKCVhMCkJfHNldCBkMSA9IDAgKG1zIG1hbnRpc3NhKQorCW1vdmVsCSMwLExPQ0FMX0xPKCVhMCkJCXxzZXQgZDIgPSAwIChtcyBtYW50aXNzYSkKKwlydHMKK2Rucm1faW5leDoKKwlvcmwJI2lueDJhX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBpbmV4Mi9haW5leAorbm9faW5leDoKKwlydHMKKworfAorfAlkbnJtX2xwIC0tLSBub3JtYWxpemUgZXhwb25lbnQvbWFudGlzc2EgdG8gc3BlY2lmaWVkIHRocmVzaG9sZAorfAorfCBJbnB1dDoKK3wJYTAJCXBvaW50cyB0byB0aGUgb3BlcmFuZCB0byBiZSBkZW5vcm1hbGl6ZWQKK3wJZDB7MzE6Mjl9CWluaXRpYWwgZ3VhcmQscm91bmQsc3RpY2t5Cit8CWQxezE1OjB9CWRlbm9ybWFsaXphdGlvbiB0aHJlc2hvbGQKK3wgT3V0cHV0OgorfAlhMAkJcG9pbnRzIHRvIHRoZSBkZW5vcm1hbGl6ZWQgb3BlcmFuZAorfAlkMHszMToyOX0JZmluYWwgZ3VhcmQscm91bmQsc3RpY2t5Cit8CWQxLmIJCWluZXhhY3QgZmxhZzogIGFsbCBvbmVzIG1lYW5zIGluZXhhY3QgcmVzdWx0Cit8Cit8IFRoZSBMT0NBTF9MTyBhbmQgTE9DQUxfR1JTIHBhcnRzIG9mIHRoZSB2YWx1ZSBhcmUgY29waWVkIHRvIEZQX1NDUjIKK3wgc28gdGhhdCBiZmV4dCBjYW4gYmUgdXNlZCB0byBleHRyYWN0IHRoZSBuZXcgbG93IHBhcnQgb2YgdGhlIG1hbnRpc3NhLgorfCBEbnJtX2xwIGNhbiBiZSBjYWxsZWQgd2l0aCBhMCBwb2ludGluZyB0byBFVEVNUCBvciBXQlRFTVAgYW5kIHRoZXJlCit8IGlzIG5vIExPQ0FMX0dSUyBzY3JhdGNoIHdvcmQgZm9sbG93aW5nIGl0IG9uIHRoZSBmc2F2ZSBmcmFtZS4KK3wKKwkuZ2xvYmFsCWRucm1fbHAKK2Rucm1fbHA6CisJbW92ZWwJJWQyLC0oJXNwKQkJfHNhdmUgZDIgZm9yIHRlbXAgdXNlCisJYnRzdGIJI0UzLEVfQllURSglYTYpCQl8dGVzdCBmb3IgdHlwZSBFMyBleGNlcHRpb24KKwliZXFzCW5vdF9FMwkJCXxub3QgdHlwZSBFMyBleGNlcHRpb24KKwliZmV4dHUJV0JURU1QX0dSUyglYTYpeyM2OiMzfSwlZDIJfGV4dHJhY3QgZ3VhcmQscm91bmQsIHN0aWNreSAgYml0CisJbW92ZWwJIzI5LCVkMAorCWxzbGwJJWQwLCVkMgkJCXxzaGlmdCBnLHIscyB0byB0aGVpciBwb3NpdGlvbnMKKwltb3ZlbAklZDIsJWQwCitub3RfRTM6CisJbW92ZWwJKCVzcCkrLCVkMgkJfHJlc3RvcmUgZDIKKwltb3ZlbAlMT0NBTF9MTyglYTApLEZQX1NDUjIrTE9DQUxfTE8oJWE2KQorCW1vdmVsCSVkMCxGUF9TQ1IyK0xPQ0FMX0dSUyglYTYpCisJbW92ZWwJJWQxLCVkMAkJCXxjb3B5IHRoZSBkZW5vcm0gdGhyZXNob2xkCisJc3VidwlMT0NBTF9FWCglYTApLCVkMQkJfGQxID0gdGhyZXNob2xkIC0gdW5zIGV4cG9uZW50CisJYmxlcwlub19scAkJCXxkMSA8PSAwCisJY21wdwkjMzIsJWQxCisJYmx0cwljYXNlXzEJCQl8MCA9IGQxIDwgMzIKKwljbXB3CSM2NCwlZDEKKwlibHRzCWNhc2VfMgkJCXwzMiA8PSBkMSA8IDY0CisJYnJhCWNhc2VfMwkJCXxkMSA+PSA2NAorfAorfCBObyBub3JtYWxpemF0aW9uIG5lY2Vzc2FyeQorfAorbm9fbHA6CisJY2xyYgklZDEJCQl8c2V0IG5vIGluZXgyIHJlcG9ydGVkCisJbW92ZWwJRlBfU0NSMitMT0NBTF9HUlMoJWE2KSwlZDAJfHJlc3RvcmUgb3JpZ2luYWwgZyxyLHMKKwlydHMKK3wKK3wgY2FzZSAoMDxkMTwzMikKK3wKK2Nhc2VfMToKKwltb3ZlbAklZDIsLSglc3ApCisJbW92ZXcJJWQwLExPQ0FMX0VYKCVhMCkJCXxleHBvbmVudCA9IGRlbm9ybSB0aHJlc2hvbGQKKwltb3ZlbAkjMzIsJWQwCisJc3VidwklZDEsJWQwCQkJfGQwID0gMzIgLSBkMQorCWJmZXh0dQlMT0NBTF9FWCglYTApeyVkMDojMzJ9LCVkMgorCWJmZXh0dQklZDJ7JWQxOiVkMH0sJWQyCQl8ZDIgPSBuZXcgTE9DQUxfSEkKKwliZmV4dHUJTE9DQUxfSEkoJWEwKXslZDA6IzMyfSwlZDEJfGQxID0gbmV3IExPQ0FMX0xPCisJYmZleHR1CUZQX1NDUjIrTE9DQUxfTE8oJWE2KXslZDA6IzMyfSwlZDAJfGQwID0gbmV3IEcsUixTCisJbW92ZWwJJWQyLExPQ0FMX0hJKCVhMCkJCXxzdG9yZSBuZXcgTE9DQUxfSEkKKwltb3ZlbAklZDEsTE9DQUxfTE8oJWEwKQkJfHN0b3JlIG5ldyBMT0NBTF9MTworCWNscmIJJWQxCisJYmZ0c3QJJWQweyMyOiMzMH0KKwliZXFzCWMxbnN0a3kKKwlic2V0bAkjcm5kX3N0a3lfYml0LCVkMAorCXN0CSVkMQorYzFuc3RreToKKwltb3ZlbAlGUF9TQ1IyK0xPQ0FMX0dSUyglYTYpLCVkMgl8cmVzdG9yZSBvcmlnaW5hbCBnLHIscworCWFuZGlsCSMweGUwMDAwMDAwLCVkMgkJfGNsZWFyIGFsbCBidXQgRyxSLFMKKwl0c3RsCSVkMgkJCXx0ZXN0IGlmIG9yaWdpbmFsIEcsUixTIGFyZSBjbGVhcgorCWJlcXMJZ3JzX2NsZWFyCisJb3JsCSMweDIwMDAwMDAwLCVkMAkJfHNldCBzdGlja3kgYml0IGluIGQwCitncnNfY2xlYXI6CisJYW5kaWwJIzB4ZTAwMDAwMDAsJWQwCQl8Y2xlYXIgYWxsIGJ1dCBHLFIsUworCW1vdmVsCSglc3ApKywlZDIKKwlydHMKK3wKK3wgY2FzZSAoMzI8PWQxPDY0KQorfAorY2FzZV8yOgorCW1vdmVsCSVkMiwtKCVzcCkKKwltb3ZldwklZDAsTE9DQUxfRVgoJWEwKQkJfHVuc2lnbmVkIGV4cG9uZW50ID0gdGhyZXNob2xkCisJc3VidwkjMzIsJWQxCQkJfGQxIG5vdyBiZXR3ZWVuIDAgYW5kIDMyCisJbW92ZWwJIzMyLCVkMAorCXN1YncJJWQxLCVkMAkJCXxkMCA9IDMyIC0gZDEKKwliZmV4dHUJTE9DQUxfRVgoJWEwKXslZDA6IzMyfSwlZDIKKwliZmV4dHUJJWQyeyVkMTolZDB9LCVkMgkJfGQyID0gbmV3IExPQ0FMX0xPCisJYmZleHR1CUxPQ0FMX0hJKCVhMCl7JWQwOiMzMn0sJWQxCXxkMSA9IG5ldyBHLFIsUworCWJmdHN0CSVkMXsjMjojMzB9CisJYm5lcwljMl9zc3RreQkJfGJyYSBpZiBzdGlja3kgYml0IHRvIGJlIHNldAorCWJmdHN0CUZQX1NDUjIrTE9DQUxfTE8oJWE2KXslZDA6IzMyfQorCWJuZXMJYzJfc3N0a3kJCXxicmEgaWYgc3RpY2t5IGJpdCB0byBiZSBzZXQKKwltb3ZlbAklZDEsJWQwCisJY2xyYgklZDEKKwlicmFzCWVuZF9jMgorYzJfc3N0a3k6CisJbW92ZWwJJWQxLCVkMAorCWJzZXRsCSNybmRfc3RreV9iaXQsJWQwCisJc3QJJWQxCitlbmRfYzI6CisJY2xybAlMT0NBTF9ISSglYTApCQl8c3RvcmUgTE9DQUxfSEkgPSAwCisJbW92ZWwJJWQyLExPQ0FMX0xPKCVhMCkJCXxzdG9yZSBMT0NBTF9MTworCW1vdmVsCUZQX1NDUjIrTE9DQUxfR1JTKCVhNiksJWQyCXxyZXN0b3JlIG9yaWdpbmFsIGcscixzCisJYW5kaWwJIzB4ZTAwMDAwMDAsJWQyCQl8Y2xlYXIgYWxsIGJ1dCBHLFIsUworCXRzdGwJJWQyCQkJfHRlc3QgaWYgb3JpZ2luYWwgRyxSLFMgYXJlIGNsZWFyCisJYmVxcwljbGVhcl9ncnMKKwlvcmwJIzB4MjAwMDAwMDAsJWQwCQl8c2V0IHN0aWNreSBiaXQgaW4gZDAKK2NsZWFyX2dyczoKKwlhbmRpbAkjMHhlMDAwMDAwMCwlZDAJCXxnZXQgcmlkIG9mIGFsbCBidXQgRyxSLFMKKwltb3ZlbAkoJXNwKSssJWQyCisJcnRzCit8Cit8IGQxID49IDY0IEZvcmNlIHRoZSBleHBvbmVudCB0byBiZSB0aGUgZGVub3JtIHRocmVzaG9sZCB3aXRoIHRoZQorfCBjb3JyZWN0IHNpZ24uCit8CitjYXNlXzM6CisJbW92ZXcJJWQwLExPQ0FMX0VYKCVhMCkKKwl0c3R3CUxPQ0FMX1NHTiglYTApCisJYmdlcwljM2NvbgorYzNuZWc6CisJb3JsCSMweDgwMDAwMDAwLExPQ0FMX0VYKCVhMCkKK2MzY29uOgorCWNtcHcJIzY0LCVkMQorCWJlcXMJc2l4dHlfZm91cgorCWNtcHcJIzY1LCVkMQorCWJlcXMJc2l4dHlfZml2ZQorfAorfCBTaGlmdCB2YWx1ZSBpcyBvdXQgb2YgcmFuZ2UuICBTZXQgZDEgZm9yIGluZXgyIGZsYWcgYW5kCit8IHJldHVybiBhIHplcm8gd2l0aCB0aGUgZ2l2ZW4gdGhyZXNob2xkLgorfAorCWNscmwJTE9DQUxfSEkoJWEwKQorCWNscmwJTE9DQUxfTE8oJWEwKQorCW1vdmVsCSMweDIwMDAwMDAwLCVkMAorCXN0CSVkMQorCXJ0cworCitzaXh0eV9mb3VyOgorCW1vdmVsCUxPQ0FMX0hJKCVhMCksJWQwCisJYmZleHR1CSVkMHsjMjojMzB9LCVkMQorCWFuZGlsCSMweGMwMDAwMDAwLCVkMAorCWJyYXMJYzNjb20KKworc2l4dHlfZml2ZToKKwltb3ZlbAlMT0NBTF9ISSglYTApLCVkMAorCWJmZXh0dQklZDB7IzE6IzMxfSwlZDEKKwlhbmRpbAkjMHg4MDAwMDAwMCwlZDAKKwlsc3JsCSMxLCVkMAkJCXxzaGlmdCBoaWdoIGJpdCBpbnRvIFIgYml0CisKK2MzY29tOgorCXRzdGwJJWQxCisJYm5lcwljM3NzdGlja3kKKwl0c3RsCUxPQ0FMX0xPKCVhMCkKKwlibmVzCWMzc3N0aWNreQorCXRzdGIJRlBfU0NSMitMT0NBTF9HUlMoJWE2KQorCWJuZXMJYzNzc3RpY2t5CisJY2xyYgklZDEKKwlicmFzCWMzZW5kCisKK2Mzc3N0aWNreToKKwlic2V0bAkjcm5kX3N0a3lfYml0LCVkMAorCXN0CSVkMQorYzNlbmQ6CisJY2xybAlMT0NBTF9ISSglYTApCisJY2xybAlMT0NBTF9MTyglYTApCisJcnRzCisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9zYWNvcy5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc2Fjb3MuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2IwMGFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc2Fjb3MuUwpAQCAtMCwwICsxLDExNSBAQAorfAorfAlzYWNvcy5zYSAzLjMgMTIvMTkvOTAKK3wKK3wJRGVzY3JpcHRpb246IFRoZSBlbnRyeSBwb2ludCBzQWNvcyBjb21wdXRlcyB0aGUgaW52ZXJzZSBjb3NpbmUgb2YKK3wJCWFuIGlucHV0IGFyZ3VtZW50OyBzQWNvc2QgZG9lcyB0aGUgc2FtZSBleGNlcHQgZm9yIGRlbm9ybWFsaXplZAorfAkJaW5wdXQuCit8Cit8CUlucHV0OiBEb3VibGUtZXh0ZW5kZWQgbnVtYmVyIFggaW4gbG9jYXRpb24gcG9pbnRlZCB0bworfAkJYnkgYWRkcmVzcyByZWdpc3RlciBhMC4KK3wKK3wJT3V0cHV0OiBUaGUgdmFsdWUgYXJjY29zKFgpIHJldHVybmVkIGluIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIEZwMC4KK3wKK3wJQWNjdXJhY3kgYW5kIE1vbm90b25pY2l0eTogVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMyB1bHBzIGluCit8CQk2NCBzaWduaWZpY2FudCBiaXQsIGkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUKK3wJCXJlc3VsdCBpcyBzdWJzZXF1ZW50bHkgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUKK3wJCXJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMgaW4gZG91YmxlIHByZWNpc2lvbi4KK3wKK3wJU3BlZWQ6IFRoZSBwcm9ncmFtIHNDT1MgdGFrZXMgYXBwcm94aW1hdGVseSAzMTAgY3ljbGVzLgorfAorfAlBbGdvcml0aG06Cit8Cit8CUFDT1MKK3wJMS4gSWYgfFh8ID49IDEsIGdvIHRvIDMuCit8Cit8CTIuICh8WHwgPCAxKSBDYWxjdWxhdGUgYWNvcyhYKSBieQorfAkJeiA6PSAoMS1YKSAvICgxK1gpCit8CQlhY29zKFgpID0gMiAqIGF0YW4oIHNxcnQoeikgKS4KK3wJCUV4aXQuCit8Cit8CTMuIElmIHxYfCA+IDEsIGdvIHRvIDUuCit8Cit8CTQuICh8WHwgPSAxKSBJZiBYID4gMCwgcmV0dXJuIDAuIE90aGVyd2lzZSwgcmV0dXJuIFBpLiBFeGl0LgorfAorfAk1LiAofFh8ID4gMSkgR2VuZXJhdGUgYW4gaW52YWxpZCBvcGVyYXRpb24gYnkgMCAqIGluZmluaXR5LgorfAkJRXhpdC4KK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfFNBQ09TCWlkbnQJMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworUEk6CS5sb25nIDB4NDAwMDAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4MDAwMDAwMDAKK1BJQlkyOgkubG9uZyAweDNGRkYwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDAwMDAwMDAwCisKKwl8eHJlZgl0X29wZXJyCisJfHhyZWYJdF9mcmNpbngKKwl8eHJlZglzYXRhbgorCisJLmdsb2JhbAlzYWNvc2QKK3NhY29zZDoKK3wtLUFDT1MoWCkgPSBQSS8yIEZPUiBERU5PUk1BTElaRUQgWAorCWZtb3ZlbAkJJWQxLCVmcGNyCQl8IC4uLmxvYWQgdXNlcidzIHJvdW5kaW5nIG1vZGUvcHJlY2lzaW9uCisJZm1vdmV4CQlQSUJZMiwlZnAwCisJYnJhCQl0X2ZyY2lueAorCisJLmdsb2JhbAlzYWNvcworc2Fjb3M6CisJZm1vdmV4CQkoJWEwKSwlZnAwCXwgLi4uTE9BRCBJTlBVVAorCisJbW92ZWwJCSglYTApLCVkMAkJfCAuLi5wYWNrIGV4cG9uZW50IHdpdGggdXBwZXIgMTYgZnJhY3Rpb24KKwltb3ZldwkJNCglYTApLCVkMAorCWFuZGlsCQkjMHg3RkZGRkZGRiwlZDAKKwljbXBpbAkJIzB4M0ZGRjgwMDAsJWQwCisJYmdlcwkJQUNPU0JJRworCit8LS1USElTIElTIFRIRSBVU1VBTCBDQVNFLCB8WHwgPCAxCit8LS1BQ09TKFgpID0gMiAqIEFUQU4oCVNRUlQoICgxLVgpLygxK1gpICkJKQorCisJZm1vdmVzCQkjMHgzRjgwMDAwMCwlZnAxCisJZmFkZHgJCSVmcDAsJWZwMQkJfCAuLi4xK1gKKwlmbmVneAkJJWZwMAkJfCAuLi4gLVgKKwlmYWRkcwkJIzB4M0Y4MDAwMDAsJWZwMAl8IC4uLjEtWAorCWZkaXZ4CQklZnAxLCVmcDAJCXwgLi4uKDEtWCkvKDErWCkKKwlmc3FydHgJCSVmcDAJCXwgLi4uU1FSVCgoMS1YKS8oMStYKSkKKwlmbW92ZW14CSVmcDAtJWZwMCwoJWEwKQl8IC4uLm92ZXJ3cml0ZSBpbnB1dAorCW1vdmVsCQklZDEsLSglc3ApCXxzYXZlIG9yaWdpbmFsIHVzZXJzIGZwY3IKKwljbHJsCQklZDEKKwlic3IJCXNhdGFuCQl8IC4uLkFUQU4oU1FSVChbMS1YXS9bMStYXSkpCisJZm1vdmVsCQkoJXNwKSssJWZwY3IJfHJlc3RvcmUgdXNlcnMgZXhjZXB0aW9ucworCWZhZGR4CQklZnAwLCVmcDAJCXwgLi4uMiAqIEFUQU4oIFNUVUZGICkKKwlicmEJCXRfZnJjaW54CisKK0FDT1NCSUc6CisJZmFic3gJCSVmcDAKKwlmY21wcwkJIzB4M0Y4MDAwMDAsJWZwMAorCWZiZ3QJCXRfb3BlcnIJCXxjYXVzZSBhbiBvcGVyciBleGNlcHRpb24KKworfC0tfFh8ID0gMSwgQUNPUyhYKSA9IDAgT1IgUEkKKwltb3ZlbAkJKCVhMCksJWQwCQl8IC4uLnBhY2sgZXhwb25lbnQgd2l0aCB1cHBlciAxNiBmcmFjdGlvbgorCW1vdmV3CQk0KCVhMCksJWQwCisJY21wbAkJIzAsJWQwCQl8RDAgaGFzIG9yaWdpbmFsIGV4cG9uZW50K2ZyYWN0aW9uCisJYmd0cwkJQUNPU1AxCisKK3wtLVggPSAtMQorfFJldHVybnMgUEkgYW5kIGluZXhhY3QgZXhjZXB0aW9uCisJZm1vdmV4CQlQSSwlZnAwCisJZm1vdmVsCQklZDEsJUZQQ1IKKwlmYWRkcwkJIzB4MDA4MDAwMDAsJWZwMAl8Y2F1c2UgYW4gaW5leGFjdCBleGNlcHRpb24gdG8gYmUgcHV0Cit8CQkJCQk7aW50byB0aGUgMDQwIC0gd2lsbCBub3QgdHJhcCB1bnRpbCBuZXh0Cit8CQkJCQk7ZnAgaW5zdC4KKwlicmEJCXRfZnJjaW54CisKK0FDT1NQMToKKwlmbW92ZWwJCSVkMSwlRlBDUgorCWZtb3ZlcwkJIzB4MDAwMDAwMDAsJWZwMAorCXJ0cwkJCQl8RmFjb3MgOyBvZiArMSBpcyBleGFjdAorCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvc2FzaW4uUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3Nhc2luLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY0N2E2MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3Nhc2luLlMKQEAgLTAsMCArMSwxMDQgQEAKK3wKK3wJc2FzaW4uc2EgMy4zIDEyLzE5LzkwCit8Cit8CURlc2NyaXB0aW9uOiBUaGUgZW50cnkgcG9pbnQgc0FzaW4gY29tcHV0ZXMgdGhlIGludmVyc2Ugc2luZSBvZgorfAkJYW4gaW5wdXQgYXJndW1lbnQ7IHNBc2luZCBkb2VzIHRoZSBzYW1lIGV4Y2VwdCBmb3IgZGVub3JtYWxpemVkCit8CQlpbnB1dC4KK3wKK3wJSW5wdXQ6IERvdWJsZS1leHRlbmRlZCBudW1iZXIgWCBpbiBsb2NhdGlvbiBwb2ludGVkIHRvCit8CQlieSBhZGRyZXNzIHJlZ2lzdGVyIGEwLgorfAorfAlPdXRwdXQ6IFRoZSB2YWx1ZSBhcmNzaW4oWCkgcmV0dXJuZWQgaW4gZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgRnAwLgorfAorfAlBY2N1cmFjeSBhbmQgTW9ub3RvbmljaXR5OiBUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAzIHVscHMgaW4KK3wJCTY0IHNpZ25pZmljYW50IGJpdCwgaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZQorfAkJcmVzdWx0IGlzIHN1YnNlcXVlbnRseSByb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZQorfAkJcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYyBpbiBkb3VibGUgcHJlY2lzaW9uLgorfAorfAlTcGVlZDogVGhlIHByb2dyYW0gc0FTSU4gdGFrZXMgYXBwcm94aW1hdGVseSAzMTAgY3ljbGVzLgorfAorfAlBbGdvcml0aG06Cit8Cit8CUFTSU4KK3wJMS4gSWYgfFh8ID49IDEsIGdvIHRvIDMuCit8Cit8CTIuICh8WHwgPCAxKSBDYWxjdWxhdGUgYXNpbihYKSBieQorfAkJeiA6PSBzcXJ0KCBbMS1YXVsxK1hdICkKK3wJCWFzaW4oWCkgPSBhdGFuKCB4IC8geiApLgorfAkJRXhpdC4KK3wKK3wJMy4gSWYgfFh8ID4gMSwgZ28gdG8gNS4KK3wKK3wJNC4gKHxYfCA9IDEpIHNnbiA6PSBzaWduKFgpLCByZXR1cm4gYXNpbihYKSA6PSBzZ24gKiBQaS8yLiBFeGl0LgorfAorfAk1LiAofFh8ID4gMSkgR2VuZXJhdGUgYW4gaW52YWxpZCBvcGVyYXRpb24gYnkgMCAqIGluZmluaXR5LgorfAkJRXhpdC4KK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfFNBU0lOCWlkbnQJMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworUElCWTI6CS5sb25nIDB4M0ZGRjAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4MDAwMDAwMDAKKworCXx4cmVmCXRfb3BlcnIKKwl8eHJlZgl0X2ZyY2lueAorCXx4cmVmCXRfZXh0ZG5ybQorCXx4cmVmCXNhdGFuCisKKwkuZ2xvYmFsCXNhc2luZAorc2FzaW5kOgorfC0tQVNJTihYKSA9IFggRk9SIERFTk9STUFMSVpFRCBYCisKKwlicmEJCXRfZXh0ZG5ybQorCisJLmdsb2JhbAlzYXNpbgorc2FzaW46CisJZm1vdmV4CQkoJWEwKSwlZnAwCXwgLi4uTE9BRCBJTlBVVAorCisJbW92ZWwJCSglYTApLCVkMAorCW1vdmV3CQk0KCVhMCksJWQwCisJYW5kaWwJCSMweDdGRkZGRkZGLCVkMAorCWNtcGlsCQkjMHgzRkZGODAwMCwlZDAKKwliZ2VzCQlhc2luYmlnCisKK3wtLVRISVMgSVMgVEhFIFVTVUFMIENBU0UsIHxYfCA8IDEKK3wtLUFTSU4oWCkgPSBBVEFOKCBYIC8gU1FSVCggKDEtWCkoMStYKSApICkKKworCWZtb3ZlcwkJIzB4M0Y4MDAwMDAsJWZwMQorCWZzdWJ4CQklZnAwLCVmcDEJCXwgLi4uMS1YCisJZm1vdmVteAklZnAyLSVmcDIsLSglYTcpCisJZm1vdmVzCQkjMHgzRjgwMDAwMCwlZnAyCisJZmFkZHgJCSVmcDAsJWZwMgkJfCAuLi4xK1gKKwlmbXVseAkJJWZwMiwlZnAxCQl8IC4uLigxK1gpKDEtWCkKKwlmbW92ZW14CSglYTcpKywlZnAyLSVmcDIKKwlmc3FydHgJCSVmcDEJCXwgLi4uU1FSVChbMS1YXVsxK1hdKQorCWZkaXZ4CQklZnAxLCVmcDAJCXwgLi4uWC9TUVJUKFsxLVhdWzErWF0pCisJZm1vdmVteAklZnAwLSVmcDAsKCVhMCkKKwlic3IJCXNhdGFuCisJYnJhCQl0X2ZyY2lueAorCithc2luYmlnOgorCWZhYnN4CQklZnAwCSB8IC4uLnxYfAorCWZjbXBzCQkjMHgzRjgwMDAwMCwlZnAwCisJZmJndAkJdF9vcGVycgkJfGNhdXNlIGFuIG9wZXJyIGV4Y2VwdGlvbgorCit8LS18WHwgPSAxLCBBU0lOKFgpID0gKy0gUEkvMi4KKworCWZtb3ZleAkJUElCWTIsJWZwMAorCW1vdmVsCQkoJWEwKSwlZDAKKwlhbmRpbAkJIzB4ODAwMDAwMDAsJWQwCXwgLi4uU0lHTiBCSVQgT0YgWAorCW9yaWwJCSMweDNGODAwMDAwLCVkMAl8IC4uListMSBJTiBTR0wgRk9STUFUCisJbW92ZWwJCSVkMCwtKCVzcCkJfCAuLi5wdXNoIFNJR04oWCkgSU4gU0dMLUZNVAorCWZtb3ZlbAkJJWQxLCVGUENSCisJZm11bHMJCSglc3ApKywlZnAwCisJYnJhCQl0X2ZyY2lueAorCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvc2F0YW4uUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NhdGFuLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBkYWUyMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NhdGFuLlMKQEAgLTAsMCArMSw0NzggQEAKK3wKK3wJc2F0YW4uc2EgMy4zIDEyLzE5LzkwCit8Cit8CVRoZSBlbnRyeSBwb2ludCBzYXRhbiBjb21wdXRlcyB0aGUgYXJjdGFuZ2VudCBvZiBhbgorfAlpbnB1dCB2YWx1ZS4gc2F0YW5kIGRvZXMgdGhlIHNhbWUgZXhjZXB0IHRoZSBpbnB1dCB2YWx1ZSBpcyBhCit8CWRlbm9ybWFsaXplZCBudW1iZXIuCit8Cit8CUlucHV0OiBEb3VibGUtZXh0ZW5kZWQgdmFsdWUgaW4gbWVtb3J5IGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkgYWRkcmVzcworfAkJcmVnaXN0ZXIgYTAuCit8Cit8CU91dHB1dDoJQXJjdGFuKFgpIHJldHVybmVkIGluIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIEZwMC4KK3wKK3wJQWNjdXJhY3kgYW5kIE1vbm90b25pY2l0eTogVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMiB1bHBzIGluCit8CQk2NCBzaWduaWZpY2FudCBiaXQsIGkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUKK3wJCXJlc3VsdCBpcyBzdWJzZXF1ZW50bHkgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUKK3wJCXJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMgaW4gZG91YmxlIHByZWNpc2lvbi4KK3wKK3wJU3BlZWQ6IFRoZSBwcm9ncmFtIHNhdGFuIHRha2VzIGFwcHJveGltYXRlbHkgMTYwIGN5Y2xlcyBmb3IgaW5wdXQKK3wJCWFyZ3VtZW50IFggc3VjaCB0aGF0IDEvMTYgPCB8WHwgPCAxNi4gRm9yIHRoZSBvdGhlciBhcmd1bWVudHMsCit8CQl0aGUgcHJvZ3JhbSB3aWxsIHJ1biBubyB3b3JzZSB0aGFuIDEwJSBzbG93ZXIuCit8Cit8CUFsZ29yaXRobToKK3wJU3RlcCAxLiBJZiB8WHwgPj0gMTYgb3IgfFh8IDwgMS8xNiwgZ28gdG8gU3RlcCA1LgorfAorfAlTdGVwIDIuIExldCBYID0gc2duICogMioqayAqIDEueHh4eHh4eHguLi54LiBOb3RlIHRoYXQgayA9IC00LCAtMywuLi4sIG9yIDMuCit8CQlEZWZpbmUgRiA9IHNnbiAqIDIqKmsgKiAxLnh4eHgxLCBpLmUuIHRoZSBmaXJzdCA1IHNpZ25pZmljYW50IGJpdHMKK3wJCW9mIFggd2l0aCBhIGJpdC0xIGF0dGFjaGVkIGF0IHRoZSA2LXRoIGJpdCBwb3NpdGlvbi4gRGVmaW5lIHUKK3wJCXRvIGJlIHUgPSAoWC1GKSAvICgxICsgWCpGKS4KK3wKK3wJU3RlcCAzLiBBcHByb3hpbWF0ZSBhcmN0YW4odSkgYnkgYSBwb2x5bm9taWFsIHBvbHkuCit8Cit8CVN0ZXAgNC4gUmV0dXJuIGFyY3RhbihGKSArIHBvbHksIGFyY3RhbihGKSBpcyBmZXRjaGVkIGZyb20gYSB0YWJsZSBvZiB2YWx1ZXMKK3wJCWNhbGN1bGF0ZWQgYmVmb3JlaGFuZC4gRXhpdC4KK3wKK3wJU3RlcCA1LiBJZiB8WHwgPj0gMTYsIGdvIHRvIFN0ZXAgNy4KK3wKK3wJU3RlcCA2LiBBcHByb3hpbWF0ZSBhcmN0YW4oWCkgYnkgYW4gb2RkIHBvbHlub21pYWwgaW4gWC4gRXhpdC4KK3wKK3wJU3RlcCA3LiBEZWZpbmUgWCcgPSAtMS9YLiBBcHByb3hpbWF0ZSBhcmN0YW4oWCcpIGJ5IGFuIG9kZCBwb2x5bm9taWFsIGluIFgnLgorfAkJQXJjdGFuKFgpID0gc2lnbihYKSpQaS8yICsgYXJjdGFuKFgnKS4gRXhpdC4KK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfHNhdGFuCWlkbnQJMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworI2luY2x1ZGUgImZwc3AuaCIKKworQk9VTkRTMToJLmxvbmcgMHgzRkZCODAwMCwweDQwMDJGRkZGCisKK09ORToJLmxvbmcgMHgzRjgwMDAwMAorCisJLmxvbmcgMHgwMDAwMDAwMAorCitBVEFOQTM6CS5sb25nIDB4QkZGNjY4N0UsMHgzMTQ5ODdEOAorQVRBTkEyOgkubG9uZyAweDQwMDJBQzY5LDB4MzRBMjZEQjMKKworQVRBTkExOgkubG9uZyAweEJGQzI0NzZGLDB4NEUxREEyOEUKK0FUQU5CNjoJLmxvbmcgMHgzRkIzNDQ0NCwweDdGODc2OTg5CisKK0FUQU5CNToJLmxvbmcgMHhCRkI3NDRFRSwweDdGQUY0NURCCitBVEFOQjQ6CS5sb25nIDB4M0ZCQzcxQzYsMHg0Njk0MDIyMAorCitBVEFOQjM6CS5sb25nIDB4QkZDMjQ5MjQsMHg5MjE4NzJGOQorQVRBTkIyOgkubG9uZyAweDNGQzk5OTk5LDB4OTk5OThGQTkKKworQVRBTkIxOgkubG9uZyAweEJGRDU1NTU1LDB4NTU1NTU1NTUKK0FUQU5DNToJLmxvbmcgMHhCRkI3MEJGMywweDk4NTM5RTZBCisKK0FUQU5DNDoJLmxvbmcgMHgzRkJDNzE4NywweDk2MkQxRDdECitBVEFOQzM6CS5sb25nIDB4QkZDMjQ5MjQsMHg4MjcxMDdCOAorCitBVEFOQzI6CS5sb25nIDB4M0ZDOTk5OTksMHg5OTk2MjYzRQorQVRBTkMxOgkubG9uZyAweEJGRDU1NTU1LDB4NTU1NTU1MzYKKworUFBJQlkyOgkubG9uZyAweDNGRkYwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDAwMDAwMDAwCitOUElCWTI6CS5sb25nIDB4QkZGRjAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4MDAwMDAwMDAKK1BUSU5ZOgkubG9uZyAweDAwMDEwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCitOVElOWToJLmxvbmcgMHg4MDAxMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCitBVEFOVEJMOgorCS5sb25nCTB4M0ZGQjAwMDAsMHg4M0QxNTJDNSwweDA2MEI3QTUxLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkIwMDAwLDB4OEJDODU0NDUsMHg2NTQ5OEI4QiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZCMDAwMCwweDkzQkU0MDYwLDB4MTc2MjZCMEQsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGQjAwMDAsMHg5QkIzMDc4RCwweDM1QUVDMjAyLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkIwMDAwLDB4QTNBNjlBNTIsMHg1RERDRTdERSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZCMDAwMCwweEFCOThFOTQzLDB4NjI3NjU2MTksMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGQjAwMDAsMHhCMzg5RTUwMiwweEY5QzU5ODYyLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkIwMDAwLDB4QkI3OTdFNDMsMHg2QjA5RTZGQiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZCMDAwMCwweEMzNjdBNUM3LDB4MzlFNUY0NDYsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGQjAwMDAsMHhDQjU0NEM2MSwweENGRjdENUM2LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkIwMDAwLDB4RDMzRjYyRjgsMHgyNDg4NTMzRSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZCMDAwMCwweERCMjhEQTgxLDB4NjI0MDRDNzcsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGQjAwMDAsMHhFMzEwQTQwNywweDhBRDM0RjE4LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkIwMDAwLDB4RUFGNkIwQTgsMHgxODhFRTFFQiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZCMDAwMCwweEYyREFGMTk0LDB4OURCRTc5RDUsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGQjAwMDAsMHhGQUJENTgxMywweDYxRDQ3RTNFLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkMwMDAwLDB4ODM0NkFDMjEsMHgwOTU5RUNDNCwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZDMDAwMCwweDhCMjMyQTA4LDB4MzA0MjgyRDgsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGQzAwMDAsMHg5MkZCNzBCOCwweEQyOUFFMkY5LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkMwMDAwLDB4OUFDRjQ3NkYsMHg1Q0NEMUNCNCwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZDMDAwMCwweEEyOUU3NjMwLDB4NDk1NEYyM0YsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGQzAwMDAsMHhBQTY4QzVEMCwweDhBQjg1MjMwLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkMwMDAwLDB4QjIyREZGRkQsMHg5RDUzOUY4MywweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZDMDAwMCwweEI5RURFRjQ1LDB4M0U5MDBFQTUsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGQzAwMDAsMHhDMUE4NUYxQywweEM3NUUzRUE1LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkMwMDAwLDB4Qzk1RDFCRTgsMHgyODEzOERFNiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZDMDAwMCwweEQxMEJGMzAwLDB4ODQwRDJERTQsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGQzAwMDAsMHhEOEI0QjJCQSwweDZCQzA1RTdBLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkMwMDAwLDB4RTA1NzJBNkIsMHhCNDIzMzVGNiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZDMDAwMCwweEU3RjMyQTcwLDB4RUE5Q0FBOEYsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGQzAwMDAsMHhFRjg4ODQzMiwweDY0RUNFRkFBLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkMwMDAwLDB4RjcxNzBBMjgsMHhFQ0MwNjY2NiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZEMDAwMCwweDgxMkZEMjg4LDB4MzMyREFEMzIsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRDAwMDAsMHg4OEE4RDFCMSwweDIxOEU0RDY0LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkQwMDAwLDB4OTAxMkFCM0YsMHgyM0U0QUVFOCwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZEMDAwMCwweDk3NkNDM0Q0LDB4MTFFN0YxQjksMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRDAwMDAsMHg5RUI2ODk0OSwweDM4ODlBMjI3LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkQwMDAwLDB4QTVFRjcyQzMsMHg0NDg3MzYxQiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZEMDAwMCwweEFEMTcwMEJBLDB4RjA3QTcyMjcsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRDAwMDAsMHhCNDJDQkNGQSwweEZEMzdFRkI3LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkQwMDAwLDB4QkIzMDNBOTQsMHgwQkE4MEY4OSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZEMDAwMCwweEMyMjExNUM2LDB4RkNBRUJCQUYsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRDAwMDAsMHhDOEZFRjNFNiwweDg2MzMxMjIxLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkQwMDAwLDB4Q0ZDOTgzMzAsMHhCNDAwMEM3MCwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZEMDAwMCwweEQ2ODA3QUExLDB4MTAyQzVCRjksMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRDAwMDAsMHhERDIzOTlCQywweDMxMjUyQUEzLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkQwMDAwLDB4RTNCMkE4NTUsMHg2QjhGQzUxNywweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZEMDAwMCwweEVBMkQ3NjRGLDB4NjQzMTU5ODksMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRDAwMDAsMHhGM0JGNUJGOCwweEJBRDFBMjFELDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkUwMDAwLDB4ODAxQ0UzOUUsMHgwRDIwNUM5QSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZFMDAwMCwweDg2MzBBMkRBLDB4REExRUQwNjYsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRTAwMDAsMHg4QzFBRDQ0NSwweEYzRTA5QjhDLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkUwMDAwLDB4OTFEQjhGMTYsMHg2NEYzNTBFMiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZFMDAwMCwweDk3NzMxNDIwLDB4MzY1RTUzOEMsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRTAwMDAsMHg5Q0UxQzhFNiwweEEwQjhDREJBLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkUwMDAwLDB4QTIyODMyREIsMHhDQURBQUUwOSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZFMDAwMCwweEE3NDZGMkRELDB4Qjc2MDIyOTQsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRTAwMDAsMHhBQzNFQzBGQiwweDk5N0RENkEyLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkUwMDAwLDB4QjExMDY4OEEsMHhFQkRDNkY2QSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZFMDAwMCwweEI1QkNDNDkwLDB4NTlFQ0M0QjAsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRTAwMDAsMHhCQTQ0QkM3RCwweEQ0NzA3ODJGLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkUwMDAwLDB4QkVBOTQxNDQsMHhGRDA0OUFBQywweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZFMDAwMCwweEMyRUI0QUJCLDB4NjYxNjI4QjYsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRTAwMDAsMHhDNzBCRDU0QywweEU2MDJFRTE0LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkUwMDAwLDB4Q0QwMDA1NDksMHhBREVDNzE1OSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZFMDAwMCwweEQ0ODQ1N0QyLDB4RDhFQTRFQTMsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRTAwMDAsMHhEQjk0OERBNywweDEyREVDRTNCLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkUwMDAwLDB4RTIzODU1RjksMHg2OUU4MDk2QSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZFMDAwMCwweEU4NzcxMTI5LDB4QzQzNTMyNTksMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRTAwMDAsMHhFRTU3QzE2RSwweDBEMzc5QzBELDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkUwMDAwLDB4RjNFMTAyMTEsMHhBODdDMzc3OSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZFMDAwMCwweEY5MTkwMzlELDB4NzU4QjhENDEsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRTAwMDAsMHhGRTA1OEI4RiwweDY0OTM1RkIzLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4ODE1NUZCNDksMHg3QjY4NUQwNCwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweDgzODg5RTM1LDB4NDlEMTA4RTEsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHg4NTlDRkE3NiwweDUxMUQ3MjRCLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4ODc5NTJFQ0YsMHhGRjgxMzFFNywweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweDg5NzMyRkQxLDB4OTU1NzY0MUIsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHg4QjM4Q0FEMSwweDAxOTMyQTM1LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4OENFN0E4RDgsMHgzMDFFRTZCNSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweDhGNDZBMzlFLDB4MkVBRTUyODEsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHg5MjJEQTdENywweDkxODg4NDg3LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4OTREMTlGQ0IsMHhERURGNTI0MSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweDk3M0FCOTQ0LDB4MTlEMkEwOEIsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHg5OTZGRjAwRSwweDA4RTEwQjk2LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4OUI3NzNGOTUsMHgxMjMyMURBNywweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweDlENTVDQzMyLDB4MEY5MzU2MjQsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHg5RjEwMDU3NSwweDAwNkNDNTcxLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QTBBOUMyOTAsMHhEOTdDQzA2QywweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEEyMjY1OUVCLDB4RUJDMDYzMEEsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhBMzg4QjRBRiwweEY2RUYwRUM5LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QTREMzVGMTAsMHg2MUQyOTJDNCwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEE2MDg5NURDLDB4RkJFMzE4N0UsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhBNzJBNTFEQywweDczNjdCRUFDLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QTgzQTUxNTMsMHgwOTU2MTY4RiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEE5M0EyMDA3LDB4NzUzOTU0NkUsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhBQTlFNzI0NSwweDAyM0IyNjA1LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QUM0Qzg0QkEsMHg2RkU0RDU4RiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEFEQ0U0QTRBLDB4NjA2Qjk3MTIsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhBRjJBMkRDRCwweDhEMjYzQzlDLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QjA2NTZGODEsMHhGMjIyNjVDNywweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEIxODQ2NTE1LDB4MEY3MTQ5NkEsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCMjhBQUExNSwweDZGOUFEQTM1LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QjM3QjQ0RkYsMHgzNzY2Qjg5NSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEI0NThDM0RDLDB4RTk2MzA0MzMsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCNTI1NTI5RCwweDU2MjI0NkJELDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QjVFMkNDQTksMHg1RjlEODhDQywweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEI2OTJDQURBLDB4N0FDQTFBREEsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCNzM2QUVBNywweEE2OTI1ODM4LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QjdDRkFCMjgsMHg3RTlGN0IzNiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEI4NUVDQzY2LDB4Q0IyMTk4MzUsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCOEU0RkQ1QSwweDIwQTU5M0RBLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4Qjk5RjQxRjYsMHg0QUZGOUJCNSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEJBN0YxRTE3LDB4ODQyQkJFN0IsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCQjQ3MTI4NSwweDc2MzdFMTdELDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QkJGQUJFOEEsMHg0Nzg4REY2RiwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEJDOUQwRkFELDB4MkI2ODlENzksMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCRDMwNkEzOSwweDQ3MUVDRDg2LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QkRCNkM3MzEsMHg4NTZBRjE4QSwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEJFMzFDQUM1LDB4MDJFODBENzAsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCRUEyRDU1QywweEUzMzE5NEUyLDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QkYwQjEwQjcsMHhDMDMxMjhGMCwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEJGNkI3QTE4LDB4REFDQjc3OEQsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCRkM0RUE0NiwweDYzRkExOEY2LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QzAxODFCREUsMHg4Qjg5QTQ1NCwweDAwMDAwMDAwCisJLmxvbmcJMHgzRkZGMDAwMCwweEMwNjVCMDY2LDB4Q0ZCRjY0MzksMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhDMEFFMzQ1RiwweDU2MzQwQUU2LDB4MDAwMDAwMDAKKwkubG9uZwkweDNGRkYwMDAwLDB4QzBGMjIyOTEsMHg5Q0I5RTZBNywweDAwMDAwMDAwCisKKwkuc2V0CVgsRlBfU0NSMQorCS5zZXQJWERDQVJFLFgrMgorCS5zZXQJWEZSQUMsWCs0CisJLnNldAlYRlJBQ0xPLFgrOAorCisJLnNldAlBVEFORixGUF9TQ1IyCisJLnNldAlBVEFORkhJLEFUQU5GKzQKKwkuc2V0CUFUQU5GTE8sQVRBTkYrOAorCisKKwl8IHhyZWYJdF9mcmNpbngKKwl8eHJlZgl0X2V4dGRucm0KKworCS5nbG9iYWwJc2F0YW5kCitzYXRhbmQ6Cit8LS1FTlRSWSBQT0lOVCBGT1IgQVRBTihYKSBGT1IgREVOT1JNQUxJWkVEIEFSR1VNRU5UCisKKwlicmEJCXRfZXh0ZG5ybQorCisJLmdsb2JhbAlzYXRhbgorc2F0YW46Cit8LS1FTlRSWSBQT0lOVCBGT1IgQVRBTihYKSwgSEVSRSBYIElTIEZJTklURSwgTk9OLVpFUk8sIEFORCBOT1QgTkFOJ1MKKworCWZtb3ZleAkJKCVhMCksJWZwMAl8IC4uLkxPQUQgSU5QVVQKKworCW1vdmVsCQkoJWEwKSwlZDAKKwltb3ZldwkJNCglYTApLCVkMAorCWZtb3ZleAkJJWZwMCxYKCVhNikKKwlhbmRpbAkJIzB4N0ZGRkZGRkYsJWQwCisKKwljbXBpbAkJIzB4M0ZGQjgwMDAsJWQwCQl8IC4uLnxYfCA+PSAxLzE2PworCWJnZXMJCUFUQU5PSzEKKwlicmEJCUFUQU5TTQorCitBVEFOT0sxOgorCWNtcGlsCQkjMHg0MDAyRkZGRiwlZDAJCXwgLi4ufFh8IDwgMTYgPworCWJsZXMJCUFUQU5NQUlOCisJYnJhCQlBVEFOQklHCisKKworfC0tVEhFIE1PU1QgTElLRUxZIENBU0UsIHxYfCBJTiBbMS8xNiwgMTYpLiBXRSBVU0UgVEFCTEUgVEVDSE5JUVVFCit8LS1USEUgSURFQSBJUyBBVEFOKFgpID0gQVRBTihGKSArIEFUQU4oIFtYLUZdIC8gWzErWEZdICkuCit8LS1TTyBJRiBGIElTIENIT1NFTiBUTyBCRSBDTE9TRSBUTyBYIEFORCBBVEFOKEYpIElTIFNUT1JFRCBJTgorfC0tQSBUQUJMRSwgQUxMIFdFIE5FRUQgSVMgVE8gQVBQUk9YSU1BVEUgQVRBTihVKSBXSEVSRQorfC0tVSA9IChYLUYpLygxK1hGKSBJUyBTTUFMTCAoUkVNRU1CRVIgRiBJUyBDTE9TRSBUTyBYKS4gSVQgSVMKK3wtLVRSVUUgVEhBVCBBIERJVklERSBJUyBOT1cgTkVFREVELCBCVVQgVEhFIEFQUFJPWElNQVRJT04gRk9SCit8LS1BVEFOKFUpIElTIEEgVkVSWSBTSE9SVCBQT0xZTk9NSUFMIEFORCBUSEUgSU5ERVhJTkcgVE8KK3wtLUZFVENIIEYgQU5EIFNBVklORyBPRiBSRUdJU1RFUlMgQ0FOIEJFIEFMTCBISURFRCBVTkRFUiBUSEUKK3wtLURJVklERS4gSU4gVEhFIEVORCBUSElTIE1FVEhPRCBJUyBNVUNIIEZBU1RFUiBUSEFOIEEgVFJBRElUSU9OQUwKK3wtLU9ORS4gTk9URSBBTFNPIFRIQVQgVEhFIFRSQURJVElPTkFMIFNDSEVNRSBUSEFUIEFQUFJPWElNQVRFCit8LS1BVEFOKFgpIERJUkVDVExZIFdJTEwgTkVFRCBUTyBVU0UgQSBSQVRJT05BTCBBUFBST1hJTUFUSU9OCit8LS0oRElWSVNJT04gTkVFREVEKSBBTllXQVkgQkVDQVVTRSBBIFBPTFlOT01JQUwgQVBQUk9YSU1BVElPTgorfC0tV0lMTCBJTlZPTFZFIEEgVkVSWSBMT05HIFBPTFlOT01JQUwuCisKK3wtLU5PVyBXRSBTRUUgWCBBUyArLTJeSyAqIDEuQkJCQkJCQi4uLi5CIDwtIDEuICsgNjMgQklUUworfC0tV0UgQ0hPU0UgRiBUTyBCRSArLTJeSyAqIDEuQkJCQjEKK3wtLVRIQVQgSVMgSVQgTUFUQ0hFUyBUSEUgRVhQT05FTlQgQU5EIEZJUlNUIDUgQklUUyBPRiBYLCBUSEUKK3wtLVNJWFRIIEJJVFMgSVMgU0VUIFRPIEJFIDEuIFNJTkNFIEsgPSAtNCwgLTMsIC4uLiwgMywgVEhFUkUKK3wtLUFSRSBPTkxZIDggVElNRVMgMTYgPSAyXjcgPSAxMjggfEZ8J1MuIFNJTkNFIEFUQU4oLXxGfCkgSVMKK3wtLSAtQVRBTih8RnwpLCBXRSBORUVEIFRPIFNUT1JFIE9OTFkgQVRBTih8RnwpLgorCitBVEFOTUFJTjoKKworCW1vdmV3CQkjMHgwMDAwLFhEQ0FSRSglYTYpCXwgLi4uQ0xFQU4gVVAgWCBKVVNUIElOIENBU0UKKwlhbmRpbAkJIzB4RjgwMDAwMDAsWEZSQUMoJWE2KQl8IC4uLkZJUlNUIDUgQklUUworCW9yaWwJCSMweDA0MDAwMDAwLFhGUkFDKCVhNikJfCAuLi5TRVQgNi1USCBCSVQgVE8gMQorCW1vdmVsCQkjMHgwMDAwMDAwMCxYRlJBQ0xPKCVhNikJfCAuLi5MT0NBVElPTiBPRiBYIElTIE5PVyBGCisKKwlmbW92ZXgJCSVmcDAsJWZwMQkJCXwgLi4uRlAxIElTIFgKKwlmbXVseAkJWCglYTYpLCVmcDEJCXwgLi4uRlAxIElTIFgqRiwgTk9URSBUSEFUIFgqRiA+IDAKKwlmc3VieAkJWCglYTYpLCVmcDAJCXwgLi4uRlAwIElTIFgtRgorCWZhZGRzCQkjMHgzRjgwMDAwMCwlZnAxCQl8IC4uLkZQMSBJUyAxICsgWCpGCisJZmRpdngJCSVmcDEsJWZwMAkJCXwgLi4uRlAwIElTIFUgPSAoWC1GKS8oMStYKkYpCisKK3wtLVdISUxFIFRIRSBESVZJU0lPTiBJUyBUQUtJTkcgSVRTIFRJTUUsIFdFIEZFVENIIEFUQU4ofEZ8KQorfC0tQ1JFQVRFIEFUQU4oRikgQU5EIFNUT1JFIElUIElOIEFUQU5GLCBBTkQKK3wtLVNBVkUgUkVHSVNURVJTIEZQMi4KKworCW1vdmVsCQklZDIsLSglYTcpCXwgLi4uU0FWRSBkMiBURU1QT1JBUklMWQorCW1vdmVsCQklZDAsJWQyCQl8IC4uLlRIRSBFWFBPIEFORCAxNiBCSVRTIE9GIFgKKwlhbmRpbAkJIzB4MDAwMDc4MDAsJWQwCXwgLi4uNCBWQVJZSU5HIEJJVFMgT0YgRidTIEZSQUNUSU9OCisJYW5kaWwJCSMweDdGRkYwMDAwLCVkMgl8IC4uLkVYUE9ORU5UIE9GIEYKKwlzdWJpbAkJIzB4M0ZGQjAwMDAsJWQyCXwgLi4uSys0CisJYXNybAkJIzEsJWQyCisJYWRkbAkJJWQyLCVkMAkJfCAuLi5USEUgNyBCSVRTIElERU5USUZZSU5HIEYKKwlhc3JsCQkjNywlZDAJCXwgLi4uSU5ERVggSU5UTyBUQkwgT0YgQVRBTih8RnwpCisJbGVhCQlBVEFOVEJMLCVhMQorCWFkZGFsCQklZDAsJWExCQl8IC4uLkFERFJFU1MgT0YgQVRBTih8RnwpCisJbW92ZWwJCSglYTEpKyxBVEFORiglYTYpCisJbW92ZWwJCSglYTEpKyxBVEFORkhJKCVhNikKKwltb3ZlbAkJKCVhMSkrLEFUQU5GTE8oJWE2KQl8IC4uLkFUQU5GIElTIE5PVyBBVEFOKHxGfCkKKwltb3ZlbAkJWCglYTYpLCVkMAkJfCAuLi5MT0FEIFNJR04gQU5EIEVYUE8uIEFHQUlOCisJYW5kaWwJCSMweDgwMDAwMDAwLCVkMAl8IC4uLlNJR04oRikKKwlvcmwJCSVkMCxBVEFORiglYTYpCXwgLi4uQVRBTkYgSVMgTk9XIFNJR04oRikqQVRBTih8RnwpCisJbW92ZWwJCSglYTcpKywlZDIJfCAuLi5SRVNUT1JFIGQyCisKK3wtLVRIQVQnUyBBTEwgSSBIQVZFIFRPIERPIEZPUiBOT1csCit8LS1CVVQgQUxBUywgVEhFIERJVklERSBJUyBTVElMTCBDUkFOS0lORyEKKworfC0tVSBJTiBGUDAsIFdFIEFSRSBOT1cgUkVBRFkgVE8gQ09NUFVURSBBVEFOKFUpIEFTCit8LS1VICsgQTEqVSpWKihBMiArIFYqKEEzICsgVikpLCBWID0gVSpVCit8LS1USEUgUE9MWU5PTUlBTCBNQVkgTE9PSyBTVFJBTkdFLCBCVVQgSVMgTkVWRVJUSEVMRVNTIENPUlJFQ1QuCit8LS1USEUgTkFUVVJBTCBGT1JNIElTIFUgKyBVKlYqKEExICsgViooQTIgKyBWKkEzKSkKK3wtLVdIQVQgV0UgSEFWRSBIRVJFIElTIE1FUkVMWQlBMSA9IEEzLCBBMiA9IEExL0EzLCBBMyA9IEEyL0EzLgorfC0tVEhFIFJFQVNPTiBGT1IgVEhJUyBSRUFSUkFOR0VNRU5UIElTIFRPIE1BS0UgVEhFIElOREVQRU5ERU5UCit8LS1QQVJUUyBBMSpVKlYgQU5EIChBMiArIC4uLiBTVFVGRikgTU9SRSBMT0FELUJBTEFOQ0VECisKKworCWZtb3ZleAkJJWZwMCwlZnAxCisJZm11bHgJCSVmcDEsJWZwMQorCWZtb3ZlZAkJQVRBTkEzLCVmcDIKKwlmYWRkeAkJJWZwMSwlZnAyCQl8IC4uLkEzK1YKKwlmbXVseAkJJWZwMSwlZnAyCQl8IC4uLlYqKEEzK1YpCisJZm11bHgJCSVmcDAsJWZwMQkJfCAuLi5VKlYKKwlmYWRkZAkJQVRBTkEyLCVmcDIJfCAuLi5BMitWKihBMytWKQorCWZtdWxkCQlBVEFOQTEsJWZwMQl8IC4uLkExKlUqVgorCWZtdWx4CQklZnAyLCVmcDEJCXwgLi4uQTEqVSpWKihBMitWKihBMytWKSkKKworCWZhZGR4CQklZnAxLCVmcDAJCXwgLi4uQVRBTihVKSwgRlAxIFJFTEVBU0VECisJZm1vdmVsCQklZDEsJUZQQ1IJCXxyZXN0b3JlIHVzZXJzIGV4Y2VwdGlvbnMKKwlmYWRkeAkJQVRBTkYoJWE2KSwlZnAwCXwgLi4uQVRBTihYKQorCWJyYQkJdF9mcmNpbngKKworQVRBTkJPUlM6Cit8LS18WHwgSVMgSU4gZDAgSU4gQ09NUEFDVCBGT1JNLiBGUDEsIGQwIFNBVkVELgorfC0tRlAwIElTIFggQU5EIHxYfCA8PSAxLzE2IE9SIHxYfCA+PSAxNi4KKwljbXBpbAkJIzB4M0ZGRjgwMDAsJWQwCisJYmd0CQlBVEFOQklHCXwgLi4uSS5FLiB8WHwgPj0gMTYKKworQVRBTlNNOgorfC0tfFh8IDw9IDEvMTYKK3wtLUlGIHxYfCA8IDJeKC00MCksIFJFVFVSTiBYIEFTIEFOU1dFUi4gT1RIRVJXSVNFLCBBUFBST1hJTUFURQorfC0tQVRBTihYKSBCWSBYICsgWCpZKihCMStZKihCMitZKihCMytZKihCNCtZKihCNStZKkI2KSkpKSkKK3wtLVdISUNIIElTIFggKyBYKlkqKCBbQjErWiooQjMrWipCNSldICsgW1kqKEIyK1oqKEI0K1oqQjYpXSApCit8LS1XSEVSRSBZID0gWCpYLCBBTkQgWiA9IFkqWS4KKworCWNtcGlsCQkjMHgzRkQ3ODAwMCwlZDAKKwlibHQJCUFUQU5USU5ZCit8LS1DT01QVVRFIFBPTFlOT01JQUwKKwlmbXVseAkJJWZwMCwlZnAwCXwgLi4uRlAwIElTIFkgPSBYKlgKKworCisJbW92ZXcJCSMweDAwMDAsWERDQVJFKCVhNikKKworCWZtb3ZleAkJJWZwMCwlZnAxCisJZm11bHgJCSVmcDEsJWZwMQkJfCAuLi5GUDEgSVMgWiA9IFkqWQorCisJZm1vdmVkCQlBVEFOQjYsJWZwMgorCWZtb3ZlZAkJQVRBTkI1LCVmcDMKKworCWZtdWx4CQklZnAxLCVmcDIJCXwgLi4uWipCNgorCWZtdWx4CQklZnAxLCVmcDMJCXwgLi4uWipCNQorCisJZmFkZGQJCUFUQU5CNCwlZnAyCXwgLi4uQjQrWipCNgorCWZhZGRkCQlBVEFOQjMsJWZwMwl8IC4uLkIzK1oqQjUKKworCWZtdWx4CQklZnAxLCVmcDIJCXwgLi4uWiooQjQrWipCNikKKwlmbXVseAkJJWZwMywlZnAxCQl8IC4uLloqKEIzK1oqQjUpCisKKwlmYWRkZAkJQVRBTkIyLCVmcDIJfCAuLi5CMitaKihCNCtaKkI2KQorCWZhZGRkCQlBVEFOQjEsJWZwMQl8IC4uLkIxK1oqKEIzK1oqQjUpCisKKwlmbXVseAkJJWZwMCwlZnAyCQl8IC4uLlkqKEIyK1oqKEI0K1oqQjYpKQorCWZtdWx4CQlYKCVhNiksJWZwMAkJfCAuLi5YKlkKKworCWZhZGR4CQklZnAyLCVmcDEJCXwgLi4uW0IxK1oqKEIzK1oqQjUpXStbWSooQjIrWiooQjQrWipCNikpXQorCisKKwlmbXVseAkJJWZwMSwlZnAwCXwgLi4uWCpZKihbQjErWiooQjMrWipCNSldK1tZKihCMitaKihCNCtaKkI2KSldKQorCisJZm1vdmVsCQklZDEsJUZQQ1IJCXxyZXN0b3JlIHVzZXJzIGV4Y2VwdGlvbnMKKwlmYWRkeAkJWCglYTYpLCVmcDAKKworCWJyYQkJdF9mcmNpbngKKworQVRBTlRJTlk6Cit8LS18WHwgPCAyXigtNDApLCBBVEFOKFgpID0gWAorCW1vdmV3CQkjMHgwMDAwLFhEQ0FSRSglYTYpCisKKwlmbW92ZWwJCSVkMSwlRlBDUgkJfHJlc3RvcmUgdXNlcnMgZXhjZXB0aW9ucworCWZtb3ZleAkJWCglYTYpLCVmcDAJfGxhc3QgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbiBzZXQKKworCWJyYQkJdF9mcmNpbngKKworQVRBTkJJRzoKK3wtLUlGIHxYfCA+IDJeKDEwMCksIFJFVFVSTglTSUdOKFgpKihQSS8yIC0gVElOWSkuIE9USEVSV0lTRSwKK3wtLVJFVFVSTiBTSUdOKFgpKlBJLzIgKyBBVEFOKC0xL1gpLgorCWNtcGlsCQkjMHg0MDYzODAwMCwlZDAKKwliZ3QJCUFUQU5IVUdFCisKK3wtLUFQUFJPWElNQVRFIEFUQU4oLTEvWCkgQlkKK3wtLVgnK1gnKlkqKEMxK1kqKEMyK1kqKEMzK1kqKEM0K1kqQzUpKSkpLCBYJyA9IC0xL1gsIFkgPSBYJypYJworfC0tVEhJUyBDQU4gQkUgUkUtV1JJVFRFTiBBUworfC0tWCcrWCcqWSooIFtDMStaKihDMytaKkM1KV0gKyBbWSooQzIrWipDNCldICksIFogPSBZKlkuCisKKwlmbW92ZXMJCSMweEJGODAwMDAwLCVmcDEJfCAuLi5MT0FEIC0xCisJZmRpdngJCSVmcDAsJWZwMQkJfCAuLi5GUDEgSVMgLTEvWAorCisKK3wtLURJVklERSBJUyBTVElMTCBDUkFOS0lORworCisJZm1vdmV4CQklZnAxLCVmcDAJCXwgLi4uRlAwIElTIFgnCisJZm11bHgJCSVmcDAsJWZwMAkJfCAuLi5GUDAgSVMgWSA9IFgnKlgnCisJZm1vdmV4CQklZnAxLFgoJWE2KQkJfCAuLi5YIElTIFJFQUxMWSBYJworCisJZm1vdmV4CQklZnAwLCVmcDEKKwlmbXVseAkJJWZwMSwlZnAxCQl8IC4uLkZQMSBJUyBaID0gWSpZCisKKwlmbW92ZWQJCUFUQU5DNSwlZnAzCisJZm1vdmVkCQlBVEFOQzQsJWZwMgorCisJZm11bHgJCSVmcDEsJWZwMwkJfCAuLi5aKkM1CisJZm11bHgJCSVmcDEsJWZwMgkJfCAuLi5aKkI0CisKKwlmYWRkZAkJQVRBTkMzLCVmcDMJfCAuLi5DMytaKkM1CisJZmFkZGQJCUFUQU5DMiwlZnAyCXwgLi4uQzIrWipDNAorCisJZm11bHgJCSVmcDMsJWZwMQkJfCAuLi5aKihDMytaKkM1KSwgRlAzIFJFTEVBU0VECisJZm11bHgJCSVmcDAsJWZwMgkJfCAuLi5ZKihDMitaKkM0KQorCisJZmFkZGQJCUFUQU5DMSwlZnAxCXwgLi4uQzErWiooQzMrWipDNSkKKwlmbXVseAkJWCglYTYpLCVmcDAJCXwgLi4uWCcqWQorCisJZmFkZHgJCSVmcDIsJWZwMQkJfCAuLi5bWSooQzIrWipDNCldK1tDMStaKihDMytaKkM1KV0KKworCisJZm11bHgJCSVmcDEsJWZwMAkJfCAuLi5YJypZKihbQjErWiooQjMrWipCNSldCit8CQkJCQkuLi4JK1tZKihCMitaKihCNCtaKkI2KSldKQorCWZhZGR4CQlYKCVhNiksJWZwMAorCisJZm1vdmVsCQklZDEsJUZQQ1IJCXxyZXN0b3JlIHVzZXJzIGV4Y2VwdGlvbnMKKworCWJ0c3RiCQkjNywoJWEwKQorCWJlcXMJCXBvc19iaWcKKworbmVnX2JpZzoKKwlmYWRkeAkJTlBJQlkyLCVmcDAKKwlicmEJCXRfZnJjaW54CisKK3Bvc19iaWc6CisJZmFkZHgJCVBQSUJZMiwlZnAwCisJYnJhCQl0X2ZyY2lueAorCitBVEFOSFVHRToKK3wtLVJFVFVSTiBTSUdOKFgpKihQSUJZMiAtIFRJTlkpID0gU0lHTihYKSpQSUJZMiAtIFNJR04oWCkqVElOWQorCWJ0c3RiCQkjNywoJWEwKQorCWJlcXMJCXBvc19odWdlCisKK25lZ19odWdlOgorCWZtb3ZleAkJTlBJQlkyLCVmcDAKKwlmbW92ZWwJCSVkMSwlZnBjcgorCWZzdWJ4CQlOVElOWSwlZnAwCisJYnJhCQl0X2ZyY2lueAorCitwb3NfaHVnZToKKwlmbW92ZXgJCVBQSUJZMiwlZnAwCisJZm1vdmVsCQklZDEsJWZwY3IKKwlmc3VieAkJUFRJTlksJWZwMAorCWJyYQkJdF9mcmNpbngKKworCXxlbmQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL3NhdGFuaC5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc2F0YW5oLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmMDc4MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NhdGFuaC5TCkBAIC0wLDAgKzEsMTA0IEBACit8Cit8CXNhdGFuaC5zYSAzLjMgMTIvMTkvOTAKK3wKK3wJVGhlIGVudHJ5IHBvaW50IHNhdGFuaCBjb21wdXRlcyB0aGUgaW52ZXJzZQorfAloeXBlcmJvbGljIHRhbmdlbnQgb2YKK3wJYW4gaW5wdXQgYXJndW1lbnQ7IHNhdGFuaGQgZG9lcyB0aGUgc2FtZSBleGNlcHQgZm9yIGRlbm9ybWFsaXplZAorfAlpbnB1dC4KK3wKK3wJSW5wdXQ6IERvdWJsZS1leHRlbmRlZCBudW1iZXIgWCBpbiBsb2NhdGlvbiBwb2ludGVkIHRvCit8CQlieSBhZGRyZXNzIHJlZ2lzdGVyIGEwLgorfAorfAlPdXRwdXQ6IFRoZSB2YWx1ZSBhcmN0YW5oKFgpIHJldHVybmVkIGluIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIEZwMC4KK3wKK3wJQWNjdXJhY3kgYW5kIE1vbm90b25pY2l0eTogVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMyB1bHBzIGluCit8CQk2NCBzaWduaWZpY2FudCBiaXQsIGkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUKK3wJCXJlc3VsdCBpcyBzdWJzZXF1ZW50bHkgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUKK3wJCXJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMgaW4gZG91YmxlIHByZWNpc2lvbi4KK3wKK3wJU3BlZWQ6IFRoZSBwcm9ncmFtIHNhdGFuaCB0YWtlcyBhcHByb3hpbWF0ZWx5IDI3MCBjeWNsZXMuCit8Cit8CUFsZ29yaXRobToKK3wKK3wJQVRBTkgKK3wJMS4gSWYgfFh8ID49IDEsIGdvIHRvIDMuCit8Cit8CTIuICh8WHwgPCAxKSBDYWxjdWxhdGUgYXRhbmgoWCkgYnkKK3wJCXNnbiA6PSBzaWduKFgpCit8CQl5IDo9IHxYfAorfAkJeiA6PSAyeS8oMS15KQorfAkJYXRhbmgoWCkgOj0gc2duICogKDEvMikgKiBsb2dwMSh6KQorfAkJRXhpdC4KK3wKK3wJMy4gSWYgfFh8ID4gMSwgZ28gdG8gNS4KK3wKK3wJNC4gKHxYfCA9IDEpIEdlbmVyYXRlIGluZmluaXR5IHdpdGggYW4gYXBwcm9wcmlhdGUgc2lnbiBhbmQKK3wJCWRpdmlkZS1ieS16ZXJvIGJ5Cit8CQlzZ24gOj0gc2lnbihYKQorfAkJYXRhbihYKSA6PSBzZ24gLyAoKzApLgorfAkJRXhpdC4KK3wKK3wJNS4gKHxYfCA+IDEpIEdlbmVyYXRlIGFuIGludmFsaWQgb3BlcmF0aW9uIGJ5IDAgKiBpbmZpbml0eS4KK3wJCUV4aXQuCit8CisKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK3xzYXRhbmgJaWRudAkyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisJfHhyZWYJdF9kegorCXx4cmVmCXRfb3BlcnIKKwl8eHJlZgl0X2ZyY2lueAorCXx4cmVmCXRfZXh0ZG5ybQorCXx4cmVmCXNsb2ducDEKKworCS5nbG9iYWwJc2F0YW5oZAorc2F0YW5oZDoKK3wtLUFUQU5IKFgpID0gWCBGT1IgREVOT1JNQUxJWkVEIFgKKworCWJyYQkJdF9leHRkbnJtCisKKwkuZ2xvYmFsCXNhdGFuaAorc2F0YW5oOgorCW1vdmVsCQkoJWEwKSwlZDAKKwltb3ZldwkJNCglYTApLCVkMAorCWFuZGlsCQkjMHg3RkZGRkZGRiwlZDAKKwljbXBpbAkJIzB4M0ZGRjgwMDAsJWQwCisJYmdlcwkJQVRBTkhCSUcKKworfC0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDwgMQorfC0tWSA9IHxYfCwgWiA9IDJZLygxLVkpLCBBVEFOSChYKSA9IFNJR04oWCkgKiAoMS8yKSAqIExPRzFQKFopLgorCisJZmFic3gJCSglYTApLCVmcDAJfCAuLi5ZID0gfFh8CisJZm1vdmV4CQklZnAwLCVmcDEKKwlmbmVneAkJJWZwMQkJfCAuLi4tWQorCWZhZGR4CQklZnAwLCVmcDAJCXwgLi4uMlkKKwlmYWRkcwkJIzB4M0Y4MDAwMDAsJWZwMQl8IC4uLjEtWQorCWZkaXZ4CQklZnAxLCVmcDAJCXwgLi4uMlkvKDEtWSkKKwltb3ZlbAkJKCVhMCksJWQwCisJYW5kaWwJCSMweDgwMDAwMDAwLCVkMAorCW9yaWwJCSMweDNGMDAwMDAwLCVkMAl8IC4uLlNJR04oWCkqSEFMRgorCW1vdmVsCQklZDAsLSglc3ApCisKKwlmbW92ZW14CSVmcDAtJWZwMCwoJWEwKQl8IC4uLm92ZXJ3cml0ZSBpbnB1dAorCW1vdmVsCQklZDEsLSglc3ApCisJY2xybAkJJWQxCisJYnNyCQlzbG9nbnAxCQl8IC4uLkxPRzFQKFopCisJZm1vdmVsCQkoJXNwKSssJWZwY3IKKwlmbXVscwkJKCVzcCkrLCVmcDAKKwlicmEJCXRfZnJjaW54CisKK0FUQU5IQklHOgorCWZhYnN4CQkoJWEwKSwlZnAwCXwgLi4ufFh8CisJZmNtcHMJCSMweDNGODAwMDAwLCVmcDAKKwlmYmd0CQl0X29wZXJyCisJYnJhCQl0X2R6CisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9zY2FsZS5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc2NhbGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzliODA1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc2NhbGUuUwpAQCAtMCwwICsxLDM3MSBAQAorfAorfAlzY2FsZS5zYSAzLjMgNy8zMC85MQorfAorfAlUaGUgZW50cnkgcG9pbnQgc1NDQUxFIGNvbXB1dGVzIHRoZSBkZXN0aW5hdGlvbiBvcGVyYW5kCit8CXNjYWxlZCBieSB0aGUgc291cmNlIG9wZXJhbmQuICBJZiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YKK3wJdGhlIHNvdXJjZSBvcGVyYW5kIGlzICg+PSAyXjE0KSBhbiBvdmVyZmxvdyBvciB1bmRlcmZsb3cKK3wJaXMgcmV0dXJuZWQuCit8Cit8CVRoZSBlbnRyeSBwb2ludCBzc2NhbGUgaXMgY2FsbGVkIGZyb20gZG9fZnVuYyB0byBlbXVsYXRlCit8CXRoZSBmc2NhbGUgdW5pbXBsZW1lbnRlZCBpbnN0cnVjdGlvbi4KK3wKK3wJSW5wdXQ6IERvdWJsZS1leHRlbmRlZCBkZXN0aW5hdGlvbiBvcGVyYW5kIGluIEZQVEVNUCwKK3wJCWRvdWJsZS1leHRlbmRlZCBzb3VyY2Ugb3BlcmFuZCBpbiBFVEVNUC4KK3wKK3wJT3V0cHV0OiBUaGUgZnVuY3Rpb24gcmV0dXJucyBzY2FsZShYLFkpIHRvIGZwMC4KK3wKK3wJTW9kaWZpZXM6IGZwMC4KK3wKK3wJQWxnb3JpdGhtOgorfAorfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfFNDQUxFICAgIGlkbnQgICAgMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworI2luY2x1ZGUgImZwc3AuaCIKKworCXx4cmVmCXRfb3ZmbDIKKwl8eHJlZgl0X3VuZmwKKwl8eHJlZglyb3VuZAorCXx4cmVmCXRfcmVzZG5ybQorCitTUkNfQk5EUzogLnNob3J0CTB4M2ZmZiwweDQwMGMKKworfAorfCBUaGlzIGVudHJ5IHBvaW50IGlzIHVzZWQgYnkgdGhlIHVuaW1wbGVtZW50ZWQgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9uCit8IGhhbmRsZXIuCit8Cit8Cit8Cit8CUZTQ0FMRQorfAorCS5nbG9iYWwJc3NjYWxlCitzc2NhbGU6CisJZm1vdmVsCQkjMCwlZnBjcgkJfGNsciB1c2VyIGVuYWJsZWQgZXhjCisJY2xybAkJJWQxCisJbW92ZXcJCUZQVEVNUCglYTYpLCVkMQl8Z2V0IGRlc3QgZXhwb25lbnQKKwlzbWkJCUxfU0NSMSglYTYpCXx1c2UgTF9TQ1IxIHRvIGhvbGQgc2lnbgorCWFuZGlsCQkjMHg3ZmZmLCVkMQl8c3RyaXAgc2lnbgorCW1vdmV3CQlFVEVNUCglYTYpLCVkMAl8Y2hlY2sgc3JjIGJvdW5kcworCWFuZGl3CQkjMHg3ZmZmLCVkMAl8Y2xyIHNpZ24gYml0CisJY21wMncJCVNSQ19CTkRTLCVkMAorCWJjY3MJCXNyY19pbgorCWNtcGl3CQkjMHg0MDBjLCVkMAl8dGVzdCBmb3IgdG9vIGxhcmdlCisJYmdlCQlzcmNfb3V0Cit8Cit8IFRoZSBzb3VyY2UgaW5wdXQgaXMgYmVsb3cgMSwgc28gd2UgY2hlY2sgZm9yIGRlbm9ybWFsaXplZCBudW1iZXJzCit8IGFuZCBzZXQgdW5mbC4KK3wKK3NyY19zbWFsbDoKKwltb3ZlYgkJRFRBRyglYTYpLCVkMAorCWFuZGliCQkjMHhlMCwlZDAKKwl0c3RiCQklZDAKKwliZXFzCQlub19kZW5vcm0KKwlzdAkJU1RPUkVfRkxHKCVhNikJfGRlc3QgYWxyZWFkeSBjb250YWlucyByZXN1bHQKKwlvcmwJCSN1bmZsX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBVTkZMCitkZW5fZG9uZToKKwlsZWFsCQlGUFRFTVAoJWE2KSwlYTAKKwlicmEJCXRfcmVzZG5ybQorbm9fZGVub3JtOgorCWZtb3ZlbAkJVVNFUl9GUENSKCVhNiksJUZQQ1IKKwlmbW92ZXgJCUZQVEVNUCglYTYpLCVmcDAJfHNpbXBseSByZXR1cm4gZGVzdAorCXJ0cworCisKK3wKK3wgU291cmNlIGlzIHdpdGhpbiAyXjE0IHJhbmdlLiAgVG8gcGVyZm9ybSB0aGUgaW50IG9wZXJhdGlvbiwKK3wgbW92ZSBpdCB0byBkMC4KK3wKK3NyY19pbjoKKwlmbW92ZXgJCUVURU1QKCVhNiksJWZwMAl8bW92ZSBpbiBzcmMgZm9yIGludAorCWZtb3ZlbAkJI3J6X21vZGUsJWZwY3IJfGZvcmNlIHJ6IGZvciBzcmMgY29udmVyc2lvbgorCWZtb3ZlbAkJJWZwMCwlZDAJCXxpbnQgc3JjIHRvIGQwCisJZm1vdmVsCQkjMCwlRlBTUgkJfGNsciBzdGF0dXMgZnJvbSBhYm92ZQorCXRzdHcJCUVURU1QKCVhNikJfGNoZWNrIHNyYyBzaWduCisJYmx0CQlzcmNfbmVnCit8Cit8IFNvdXJjZSBpcyBwb3NpdGl2ZS4gIEFkZCB0aGUgc3JjIHRvIHRoZSBkZXN0IGV4cG9uZW50LgorfCBUaGUgcmVzdWx0IGNhbiBiZSBkZW5vcm1hbGl6ZWQsIGlmIHNyYyA9IDAsIG9yIG92ZXJmbG93LAorfCBpZiB0aGUgcmVzdWx0IG9mIHRoZSBhZGQgc2V0cyBhIGJpdCBpbiB0aGUgdXBwZXIgd29yZC4KK3wKK3NyY19wb3M6CisJdHN0dwkJJWQxCQl8Y2hlY2sgZm9yIGRlbm9ybQorCWJlcQkJZHN0X2Rucm0KKwlhZGRsCQklZDAsJWQxCQl8YWRkIHNyYyB0byBkZXN0IGV4cAorCWJlcXMJCWRlbm9ybQkJfGlmIHplcm8sIHJlc3VsdCBpcyBkZW5vcm0KKwljbXBpbAkJIzB4N2ZmZiwlZDEJfHRlc3QgZm9yIG92ZXJmbG93CisJYmdlcwkJb3ZmbAorCXRzdGIJCUxfU0NSMSglYTYpCisJYmVxcwkJc3Bvc19wb3MKKwlvcncJCSMweDgwMDAsJWQxCitzcG9zX3BvczoKKwltb3ZldwkJJWQxLEZQVEVNUCglYTYpCXxyZXN1bHQgaW4gRlBURU1QCisJZm1vdmVsCQlVU0VSX0ZQQ1IoJWE2KSwlRlBDUgorCWZtb3ZleAkJRlBURU1QKCVhNiksJWZwMAl8d3JpdGUgcmVzdWx0IHRvIGZwMAorCXJ0cworb3ZmbDoKKwl0c3RiCQlMX1NDUjEoJWE2KQorCWJlcXMJCXNvdmxfcG9zCisJb3J3CQkjMHg4MDAwLCVkMQorc292bF9wb3M6CisJbW92ZXcJCUZQVEVNUCglYTYpLEVURU1QKCVhNikJfHJlc3VsdCBpbiBFVEVNUAorCW1vdmVsCQlGUFRFTVBfSEkoJWE2KSxFVEVNUF9ISSglYTYpCisJbW92ZWwJCUZQVEVNUF9MTyglYTYpLEVURU1QX0xPKCVhNikKKwlicmEJCXRfb3ZmbDIKKworZGVub3JtOgorCXRzdGIJCUxfU0NSMSglYTYpCisJYmVxcwkJZGVuX3BvcworCW9ydwkJIzB4ODAwMCwlZDEKK2Rlbl9wb3M6CisJdHN0bAkJRlBURU1QX0hJKCVhNikJfGNoZWNrIGogYml0CisJYmx0cwkJbmRlbl9leGl0CXxpZiBzZXQsIG5vdCBkZW5vcm0KKwltb3ZldwkJJWQxLEVURU1QKCVhNikJfGlucHV0IGV4cGVjdGVkIGluIEVURU1QCisJbW92ZWwJCUZQVEVNUF9ISSglYTYpLEVURU1QX0hJKCVhNikKKwltb3ZlbAkJRlBURU1QX0xPKCVhNiksRVRFTVBfTE8oJWE2KQorCW9ybAkJI3VuZmxfYml0LFVTRVJfRlBTUiglYTYpCXxzZXQgdW5mbAorCWxlYWwJCUVURU1QKCVhNiksJWEwCisJYnJhCQl0X3Jlc2Rucm0KK25kZW5fZXhpdDoKKwltb3ZldwkJJWQxLEZQVEVNUCglYTYpCXxyZXN1bHQgaW4gRlBURU1QCisJZm1vdmVsCQlVU0VSX0ZQQ1IoJWE2KSwlRlBDUgorCWZtb3ZleAkJRlBURU1QKCVhNiksJWZwMAl8d3JpdGUgcmVzdWx0IHRvIGZwMAorCXJ0cworCit8Cit8IFNvdXJjZSBpcyBuZWdhdGl2ZS4gIEFkZCB0aGUgc3JjIHRvIHRoZSBkZXN0IGV4cG9uZW50LgorfCAoVGhlIHJlc3VsdCBleHBvbmVudCB3aWxsIGJlIHJlZHVjZWQpLiAgVGhlIHJlc3VsdCBjYW4gYmUKK3wgZGVub3JtYWxpemVkLgorfAorc3JjX25lZzoKKwlhZGRsCQklZDAsJWQxCQl8YWRkIHNyYyB0byBkZXN0CisJYmVxcwkJZGVub3JtCQl8aWYgemVybywgcmVzdWx0IGlzIGRlbm9ybQorCWJsdHMJCWZpeF9kbnJtCXxpZiBuZWdhdGl2ZSwgcmVzdWx0IGlzCit8CQkJCQk7bmVlZGluZyBkZW5vcm1hbGl6YXRpb24KKwl0c3RiCQlMX1NDUjEoJWE2KQorCWJlcXMJCXNuZWdfcG9zCisJb3J3CQkjMHg4MDAwLCVkMQorc25lZ19wb3M6CisJbW92ZXcJCSVkMSxGUFRFTVAoJWE2KQl8cmVzdWx0IGluIEZQVEVNUAorCWZtb3ZlbAkJVVNFUl9GUENSKCVhNiksJUZQQ1IKKwlmbW92ZXgJCUZQVEVNUCglYTYpLCVmcDAJfHdyaXRlIHJlc3VsdCB0byBmcDAKKwlydHMKKworCit8Cit8IFRoZSByZXN1bHQgZXhwb25lbnQgaXMgYmVsb3cgZGVub3JtIHZhbHVlLiAgVGVzdCBmb3IgY2F0YXN0cm9waGljCit8IHVuZGVyZmxvdyBhbmQgZm9yY2UgemVybyBpZiB0cnVlLiAgSWYgbm90LCB0cnkgdG8gc2hpZnQgdGhlCit8IG1hbnRpc3NhIHJpZ2h0IHVudGlsIGEgemVybyBleHBvbmVudCBleGlzdHMuCit8CitmaXhfZG5ybToKKwljbXBpdwkJIzB4ZmZjMCwlZDEJfGxvd2VyIGJvdW5kIGZvciBub3JtYWxpemF0aW9uCisJYmx0CQlmaXhfdW5mbAl8aWYgbG93ZXIsIGNhdGFzdHJvcGhpYyB1bmZsCisJbW92ZXcJCSVkMSwlZDAJCXx1c2UgZDAgZm9yIGV4cAorCW1vdmVsCQklZDIsLSglYTcpCXxmcmVlIGQyIGZvciBub3JtCisJbW92ZWwJCUZQVEVNUF9ISSglYTYpLCVkMQorCW1vdmVsCQlGUFRFTVBfTE8oJWE2KSwlZDIKKwljbHJsCQlMX1NDUjIoJWE2KQorZml4X2xvb3A6CisJYWRkdwkJIzEsJWQwCQl8ZHJpdmUgZDAgdG8gMAorCWxzcmwJCSMxLCVkMQkJfHdoaWxlIHNoaWZ0aW5nIHRoZQorCXJveHJsCQkjMSwlZDIJCXxtYW50aXNzYSB0byB0aGUgcmlnaHQKKwliY2NzCQlub19jYXJyeQorCXN0CQlMX1NDUjIoJWE2KQl8dXNlIExfU0NSMiB0byBjYXB0dXJlIGluZXgKK25vX2NhcnJ5OgorCXRzdHcJCSVkMAkJfGl0IGlzIGZpbmlzaGVkIHdoZW4KKwlibHRzCQlmaXhfbG9vcAl8ZDAgaXMgemVybyBvciB0aGUgbWFudGlzc2EKKwl0c3RiCQlMX1NDUjIoJWE2KQorCWJlcXMJCXRzdF96ZXJvCisJb3JsCQkjdW5mbF9pbnhfbWFzayxVU0VSX0ZQU1IoJWE2KQorfAkJCQkJO3NldCB1bmZsLCBhdW5mbCwgYWluZXgKK3wKK3wgVGVzdCBmb3IgemVyby4gSWYgemVybywgc2ltcGx5IHVzZSBmbW92ZSB0byByZXR1cm4gKy8tIHplcm8KK3wgdG8gdGhlIGZwdS4KK3wKK3RzdF96ZXJvOgorCWNscncJCUZQVEVNUF9FWCglYTYpCisJdHN0YgkJTF9TQ1IxKCVhNikJfHRlc3QgZm9yIHNpZ24KKwliZXFzCQl0c3RfY29uCisJb3J3CQkjMHg4MDAwLEZQVEVNUF9FWCglYTYpIHxzZXQgc2lnbiBiaXQKK3RzdF9jb246CisJbW92ZWwJCSVkMSxGUFRFTVBfSEkoJWE2KQorCW1vdmVsCQklZDIsRlBURU1QX0xPKCVhNikKKwltb3ZlbAkJKCVhNykrLCVkMgorCXRzdGwJCSVkMQorCWJuZXMJCW5vdF96ZXJvCisJdHN0bAkJRlBURU1QX0xPKCVhNikKKwlibmVzCQlub3RfemVybworfAorfCBSZXN1bHQgaXMgemVyby4gIENoZWNrIGZvciByb3VuZGluZyBtb2RlIHRvIHNldCBsc2IuICBJZiB0aGUKK3wgbW9kZSBpcyBycCwgYW5kIHRoZSB6ZXJvIGlzIHBvc2l0aXZlLCByZXR1cm4gc21hbGxlc3QgZGVub3JtLgorfCBJZiB0aGUgbW9kZSBpcyBybSwgYW5kIHRoZSB6ZXJvIGlzIG5lZ2F0aXZlLCByZXR1cm4gc21hbGxlc3QKK3wgbmVnYXRpdmUgZGVub3JtLgorfAorCWJ0c3RiCQkjNSxGUENSX01PREUoJWE2KSB8dGVzdCBpZiBybSBvciBycAorCWJlcXMJCW5vX2RpcgorCWJ0c3RiCQkjNCxGUENSX01PREUoJWE2KSB8Y2hlY2sgd2hpY2ggb25lCisJYmVxcwkJemVyX3JtCit6ZXJfcnA6CisJdHN0YgkJTF9TQ1IxKCVhNikJfGNoZWNrIHNpZ24KKwlibmVzCQlub19kaXIJCXxpZiBzZXQsIG5lZyBvcCwgbm8gaW5jCisJbW92ZWwJCSMxLEZQVEVNUF9MTyglYTYpIHxzZXQgbHNiCisJYnJhcwkJc21fZG5ybQoremVyX3JtOgorCXRzdGIJCUxfU0NSMSglYTYpCXxjaGVjayBzaWduCisJYmVxcwkJbm9fZGlyCQl8aWYgY2xyLCBuZWcgb3AsIG5vIGluYworCW1vdmVsCQkjMSxGUFRFTVBfTE8oJWE2KSB8c2V0IGxzYgorCW9ybAkJI25lZ19tYXNrLFVTRVJfRlBTUiglYTYpIHxzZXQgTgorCWJyYXMJCXNtX2Rucm0KK25vX2RpcjoKKwlmbW92ZWwJCVVTRVJfRlBDUiglYTYpLCVGUENSCisJZm1vdmV4CQlGUFRFTVAoJWE2KSwlZnAwCXx1c2UgZm1vdmUgdG8gc2V0IGNjJ3MKKwlydHMKKworfAorfCBUaGUgcm91bmRpbmcgbW9kZSBjaGFuZ2VkIHRoZSB6ZXJvIHRvIGEgc21hbGxlc3QgZGVub3JtLiBDYWxsCit8IHRfcmVzZG5ybSB3aXRoIGV4Y2VwdGlvbmFsIG9wZXJhbmQgaW4gRVRFTVAuCit8CitzbV9kbnJtOgorCW1vdmVsCQlGUFRFTVBfRVgoJWE2KSxFVEVNUF9FWCglYTYpCisJbW92ZWwJCUZQVEVNUF9ISSglYTYpLEVURU1QX0hJKCVhNikKKwltb3ZlbAkJRlBURU1QX0xPKCVhNiksRVRFTVBfTE8oJWE2KQorCWxlYWwJCUVURU1QKCVhNiksJWEwCisJYnJhCQl0X3Jlc2Rucm0KKworfAorfCBSZXN1bHQgaXMgc3RpbGwgZGVub3JtYWxpemVkLgorfAorbm90X3plcm86CisJb3JsCQkjdW5mbF9tYXNrLFVTRVJfRlBTUiglYTYpIHxzZXQgdW5mbAorCXRzdGIJCUxfU0NSMSglYTYpCXxjaGVjayBmb3Igc2lnbgorCWJlcXMJCWZpeF9leGl0CisJb3JsCQkjbmVnX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBOCitmaXhfZXhpdDoKKwlicmFzCQlzbV9kbnJtCisKKworfAorfCBUaGUgcmVzdWx0IGhhcyB1bmRlcmZsb3dlZCB0byB6ZXJvLiBSZXR1cm4gemVybyBhbmQgc2V0Cit8IHVuZmwsIGF1bmZsLCBhbmQgYWluZXguCit8CitmaXhfdW5mbDoKKwlvcmwJCSN1bmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpCisJYnRzdGIJCSM1LEZQQ1JfTU9ERSglYTYpIHx0ZXN0IGlmIHJtIG9yIHJwCisJYmVxcwkJbm9fZGlyMgorCWJ0c3RiCQkjNCxGUENSX01PREUoJWE2KSB8Y2hlY2sgd2hpY2ggb25lCisJYmVxcwkJemVyX3JtMgoremVyX3JwMjoKKwl0c3RiCQlMX1NDUjEoJWE2KQl8Y2hlY2sgc2lnbgorCWJuZXMJCW5vX2RpcjIJCXxpZiBzZXQsIG5lZyBvcCwgbm8gaW5jCisJY2xybAkJRlBURU1QX0VYKCVhNikKKwljbHJsCQlGUFRFTVBfSEkoJWE2KQorCW1vdmVsCQkjMSxGUFRFTVBfTE8oJWE2KSB8c2V0IGxzYgorCWJyYXMJCXNtX2Rucm0JCXxyZXR1cm4gc21hbGxlc3QgZGVub3JtCit6ZXJfcm0yOgorCXRzdGIJCUxfU0NSMSglYTYpCXxjaGVjayBzaWduCisJYmVxcwkJbm9fZGlyMgkJfGlmIGNsciwgbmVnIG9wLCBubyBpbmMKKwltb3ZldwkJIzB4ODAwMCxGUFRFTVBfRVgoJWE2KQorCWNscmwJCUZQVEVNUF9ISSglYTYpCisJbW92ZWwJCSMxLEZQVEVNUF9MTyglYTYpIHxzZXQgbHNiCisJb3JsCQkjbmVnX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBOCisJYnJhCQlzbV9kbnJtCQl8cmV0dXJuIHNtYWxsZXN0IGRlbm9ybQorCitub19kaXIyOgorCXRzdGIJCUxfU0NSMSglYTYpCisJYmdlcwkJcG9zX3plcm8KK25lZ196ZXJvOgorCWNscmwJCUZQX1NDUjEoJWE2KQl8Y2xlYXIgdGhlIGV4Y2VwdGlvbmFsIG9wZXJhbmQKKwljbHJsCQlGUF9TQ1IxKzQoJWE2KQl8Zm9yIGdlbl9leGNlcHQuCisJY2xybAkJRlBfU0NSMSs4KCVhNikKKwlmbW92ZXMJCSMweDgwMDAwMDAwLCVmcDAKKwlydHMKK3Bvc196ZXJvOgorCWNscmwJCUZQX1NDUjEoJWE2KQl8Y2xlYXIgdGhlIGV4Y2VwdGlvbmFsIG9wZXJhbmQKKwljbHJsCQlGUF9TQ1IxKzQoJWE2KQl8Zm9yIGdlbl9leGNlcHQuCisJY2xybAkJRlBfU0NSMSs4KCVhNikKKwlmbW92ZXMJCSMweDAwMDAwMDAwLCVmcDAKKwlydHMKKworfAorfCBUaGUgZGVzdGluYXRpb24gaXMgYSBkZW5vcm1hbGl6ZWQgbnVtYmVyLiAgSXQgbXVzdCBiZSBoYW5kbGVkCit8IGJ5IGZpcnN0IHNoaWZ0aW5nIHRoZSBiaXRzIGluIHRoZSBtYW50aXNzYSB1bnRpbCBpdCBpcyBub3JtYWxpemVkLAorfCB0aGVuIGFkZGluZyB0aGUgcmVtYWluZGVyIG9mIHRoZSBzb3VyY2UgdG8gdGhlIGV4cG9uZW50LgorfAorZHN0X2Rucm06CisJbW92ZW1sCQklZDIvJWQzLC0oJWE3KQorCW1vdmV3CQlGUFRFTVBfRVgoJWE2KSwlZDEKKwltb3ZlbAkJRlBURU1QX0hJKCVhNiksJWQyCisJbW92ZWwJCUZQVEVNUF9MTyglYTYpLCVkMworZHN0X2xvb3A6CisJdHN0bAkJJWQyCQl8dGVzdCBmb3Igbm9ybWFsaXplZCByZXN1bHQKKwlibHRzCQlkc3Rfbm9ybQl8ZXhpdCBsb29wIGlmIHNvCisJdHN0bAkJJWQwCQl8b3RoZXJ3aXNlLCB0ZXN0IHNoaWZ0IGNvdW50CisJYmVxcwkJZHN0X2ZpbgkJfGlmIHplcm8sIHNoaWZ0aW5nIGlzIGRvbmUKKwlzdWJpbAkJIzEsJWQwCQl8ZGVjIHNyYworCWxzbGwJCSMxLCVkMworCXJveGxsCQkjMSwlZDIKKwlicmFzCQlkc3RfbG9vcAorfAorfCBEZXN0aW5hdGlvbiBiZWNhbWUgbm9ybWFsaXplZC4gIFNpbXBseSBhZGQgdGhlIHJlbWFpbmluZworfCBwb3J0aW9uIG9mIHRoZSBzcmMgdG8gdGhlIGV4cG9uZW50LgorfAorZHN0X25vcm06CisJYWRkdwkJJWQwLCVkMQkJfGRzdCBpcyBub3JtYWxpemVkOyBhZGQgc3JjCisJdHN0YgkJTF9TQ1IxKCVhNikKKwliZXFzCQlkbnJtX3BvcworCW9ybAkJIzB4ODAwMCwlZDEKK2Rucm1fcG9zOgorCW1vdmVtdwkJJWQxLEZQVEVNUF9FWCglYTYpCisJbW92ZW1sCQklZDIsRlBURU1QX0hJKCVhNikKKwltb3ZlbWwJCSVkMyxGUFRFTVBfTE8oJWE2KQorCWZtb3ZlbAkJVVNFUl9GUENSKCVhNiksJUZQQ1IKKwlmbW92ZXgJCUZQVEVNUCglYTYpLCVmcDAKKwltb3ZlbWwJCSglYTcpKywlZDIvJWQzCisJcnRzCisKK3wKK3wgRGVzdGluYXRpb24gcmVtYWluZWQgZGVub3JtYWxpemVkLiAgQ2FsbCB0X2V4Y2Rucm0gd2l0aAorfCBleGNlcHRpb25hbCBvcGVyYW5kIGluIEVURU1QLgorfAorZHN0X2ZpbjoKKwl0c3RiCQlMX1NDUjEoJWE2KQl8Y2hlY2sgZm9yIHNpZ24KKwliZXFzCQlkc3RfZXhpdAorCW9ybAkJI25lZ19tYXNrLFVTRVJfRlBTUiglYTYpIHxzZXQgTgorCW9ybAkJIzB4ODAwMCwlZDEKK2RzdF9leGl0OgorCW1vdmVtdwkJJWQxLEVURU1QX0VYKCVhNikKKwltb3ZlbWwJCSVkMixFVEVNUF9ISSglYTYpCisJbW92ZW1sCQklZDMsRVRFTVBfTE8oJWE2KQorCW9ybAkJI3VuZmxfbWFzayxVU0VSX0ZQU1IoJWE2KSB8c2V0IHVuZmwKKwltb3ZlbWwJCSglYTcpKywlZDIvJWQzCisJbGVhbAkJRVRFTVAoJWE2KSwlYTAKKwlicmEJCXRfcmVzZG5ybQorCit8Cit8IFNvdXJjZSBpcyBvdXRzaWRlIG9mIDJeMTQgcmFuZ2UuICBUZXN0IHRoZSBzaWduIGFuZCBicmFuY2gKK3wgdG8gdGhlIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbiBoYW5kbGVyLgorfAorc3JjX291dDoKKwl0c3RiCQlMX1NDUjEoJWE2KQorCWJlcXMJCXNjcm9fcG9zCisJb3JsCQkjMHg4MDAwLCVkMQorc2Nyb19wb3M6CisJbW92ZWwJCUZQVEVNUF9ISSglYTYpLEVURU1QX0hJKCVhNikKKwltb3ZlbAkJRlBURU1QX0xPKCVhNiksRVRFTVBfTE8oJWE2KQorCXRzdHcJCUVURU1QKCVhNikKKwlibHRzCQlyZXNfbmVnCityZXNfcG9zOgorCW1vdmV3CQklZDEsRVRFTVAoJWE2KQl8cmVzdWx0IGluIEVURU1QCisJYnJhCQl0X292ZmwyCityZXNfbmVnOgorCW1vdmV3CQklZDEsRVRFTVAoJWE2KQl8cmVzdWx0IGluIEVURU1QCisJbGVhbAkJRVRFTVAoJWE2KSwlYTAKKwlicmEJCXRfdW5mbAorCXxlbmQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL3Njb3NoLlMgYi9hcmNoL202OGsvZnBzcDA0MC9zY29zaC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MWVkYmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC9zY29zaC5TCkBAIC0wLDAgKzEsMTMyIEBACit8Cit8CXNjb3NoLnNhIDMuMSAxMi8xMC85MAorfAorfAlUaGUgZW50cnkgcG9pbnQgc0Nvc2ggY29tcHV0ZXMgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mCit8CWFuIGlucHV0IGFyZ3VtZW50OyBzQ29zaGQgZG9lcyB0aGUgc2FtZSBleGNlcHQgZm9yIGRlbm9ybWFsaXplZAorfAlpbnB1dC4KK3wKK3wJSW5wdXQ6IERvdWJsZS1leHRlbmRlZCBudW1iZXIgWCBpbiBsb2NhdGlvbiBwb2ludGVkIHRvCit8CQlieSBhZGRyZXNzIHJlZ2lzdGVyIGEwLgorfAorfAlPdXRwdXQ6IFRoZSB2YWx1ZSBjb3NoKFgpIHJldHVybmVkIGluIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIEZwMC4KK3wKK3wJQWNjdXJhY3kgYW5kIE1vbm90b25pY2l0eTogVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMyB1bHBzIGluCit8CQk2NCBzaWduaWZpY2FudCBiaXQsIGkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUKK3wJCXJlc3VsdCBpcyBzdWJzZXF1ZW50bHkgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUKK3wJCXJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMgaW4gZG91YmxlIHByZWNpc2lvbi4KK3wKK3wJU3BlZWQ6IFRoZSBwcm9ncmFtIHNDT1NIIHRha2VzIGFwcHJveGltYXRlbHkgMjUwIGN5Y2xlcy4KK3wKK3wJQWxnb3JpdGhtOgorfAorfAlDT1NICit8CTEuIElmIHxYfCA+IDE2MzgwIGxvZzIsIGdvIHRvIDMuCit8Cit8CTIuICh8WHwgPD0gMTYzODAgbG9nMikgQ29zaChYKSBpcyBvYnRhaW5lZCBieSB0aGUgZm9ybXVsYWUKK3wJCXkgPSB8WHwsIHogPSBleHAoWSksIGFuZAorfAkJY29zaChYKSA9ICgxLzIpKiggeiArIDEveiApLgorfAkJRXhpdC4KK3wKK3wJMy4gKHxYfCA+IDE2MzgwIGxvZzIpLiBJZiB8WHwgPiAxNjQ4MCBsb2cyLCBnbyB0byA1LgorfAorfAk0LiAoMTYzODAgbG9nMiA8IHxYfCA8PSAxNjQ4MCBsb2cyKQorfAkJY29zaChYKSA9IHNpZ24oWCkgKiBleHAofFh8KS8yLgorfAkJSG93ZXZlciwgaW52b2tpbmcgZXhwKHxYfCkgbWF5IGNhdXNlIHByZW1hdHVyZSBvdmVyZmxvdy4KK3wJCVRodXMsIHdlIGNhbGN1bGF0ZSBzaW5oKFgpIGFzIGZvbGxvd3M6Cit8CQlZCTo9IHxYfAorfAkJRmFjdAk6PQkyKiooMTYzODApCit8CQlZJwk6PSBZIC0gMTYzODEgbG9nMgorfAkJY29zaChYKSA6PSBGYWN0ICogZXhwKFknKS4KK3wJCUV4aXQuCit8Cit8CTUuICh8WHwgPiAxNjQ4MCBsb2cyKSBzaW5oKFgpIG11c3Qgb3ZlcmZsb3cuIFJldHVybgorfAkJSHVnZSpIdWdlIHRvIGdlbmVyYXRlIG92ZXJmbG93IGFuZCBhbiBpbmZpbml0eSB3aXRoCit8CQl0aGUgYXBwcm9wcmlhdGUgc2lnbi4gSHVnZSBpcyB0aGUgbGFyZ2VzdCBmaW5pdGUgbnVtYmVyIGluCit8CQlleHRlbmRlZCBmb3JtYXQuIEV4aXQuCit8Cit8CisKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK3xTQ09TSAlpZG50CTIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKwl8c2VjdGlvbgk4CisKKwl8eHJlZgl0X292ZmwKKwl8eHJlZgl0X2ZyY2lueAorCXx4cmVmCXNldG94CisKK1QxOgkubG9uZyAweDQwQzYyRDM4LDB4RDNENjQ2MzQgfCAuLi4gMTYzODEgTE9HMiBMRUFECitUMjoJLmxvbmcgMHgzRDZGOTBBRSwweEIxRTc1Q0M3IHwgLi4uIDE2MzgxIExPRzIgVFJBSUwKKworVFdPMTYzODA6IC5sb25nIDB4N0ZGQjAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworCS5nbG9iYWwJc2Nvc2hkCitzY29zaGQ6Cit8LS1DT1NIKFgpID0gMSBGT1IgREVOT1JNQUxJWkVEIFgKKworCWZtb3ZlcwkJIzB4M0Y4MDAwMDAsJWZwMAorCisJZm1vdmVsCQklZDEsJUZQQ1IKKwlmYWRkcwkJIzB4MDA4MDAwMDAsJWZwMAorCWJyYQkJdF9mcmNpbngKKworCS5nbG9iYWwJc2Nvc2gKK3Njb3NoOgorCWZtb3ZleAkJKCVhMCksJWZwMAl8IC4uLkxPQUQgSU5QVVQKKworCW1vdmVsCQkoJWEwKSwlZDAKKwltb3ZldwkJNCglYTApLCVkMAorCWFuZGlsCQkjMHg3RkZGRkZGRiwlZDAKKwljbXBpbAkJIzB4NDAwQ0IxNjcsJWQwCisJYmd0cwkJQ09TSEJJRworCit8LS1USElTIElTIFRIRSBVU1VBTCBDQVNFLCB8WHwgPCAxNjM4MCBMT0cyCit8LS1DT1NIKFgpID0gKDEvMikgKiAoIEVYUChYKSArIDEvRVhQKFgpICkKKworCWZhYnN4CQklZnAwCQl8IC4uLnxYfAorCisJbW92ZWwJCSVkMSwtKCVzcCkKKwljbHJsCQklZDEKKwlmbW92ZW14CSVmcDAtJWZwMCwoJWEwKQl8cGFzcyBwYXJhbWV0ZXIgdG8gc2V0b3gKKwlic3IJCXNldG94CQl8IC4uLkZQMCBJUyBFWFAofFh8KQorCWZtdWxzCQkjMHgzRjAwMDAwMCwlZnAwCXwgLi4uKDEvMilFWFAofFh8KQorCW1vdmVsCQkoJXNwKSssJWQxCisKKwlmbW92ZXMJCSMweDNFODAwMDAwLCVmcDEJfCAuLi4oMS80KQorCWZkaXZ4CQklZnAwLCVmcDEJCXwgLi4uMS8oMiBFWFAofFh8KSkKKworCWZtb3ZlbAkJJWQxLCVGUENSCisJZmFkZHgJCSVmcDEsJWZwMAorCisJYnJhCQl0X2ZyY2lueAorCitDT1NIQklHOgorCWNtcGlsCQkjMHg0MDBDQjJCMywlZDAKKwliZ3RzCQlDT1NISFVHRQorCisJZmFic3gJCSVmcDAKKwlmc3ViZAkJVDEoJXBjKSwlZnAwCQl8IC4uLih8WHwtMTYzODFMT0cyX0xFQUQpCisJZnN1YmQJCVQyKCVwYyksJWZwMAkJfCAuLi58WHwgLSAxNjM4MSBMT0cyLCBBQ0NVUkFURQorCisJbW92ZWwJCSVkMSwtKCVzcCkKKwljbHJsCQklZDEKKwlmbW92ZW14CSVmcDAtJWZwMCwoJWEwKQorCWJzcgkJc2V0b3gKKwlmbW92ZWwJCSglc3ApKywlZnBjcgorCisJZm11bHgJCVRXTzE2MzgwKCVwYyksJWZwMAorCWJyYQkJdF9mcmNpbngKKworQ09TSEhVR0U6CisJZm1vdmVsCQkjMCwlZnBzcgkJfGNsciBOIGJpdCBpZiBzZXQgYnkgc291cmNlCisJYmNscmIJCSM3LCglYTApCQl8YWx3YXlzIHJldHVybiBwb3NpdGl2ZSB2YWx1ZQorCWZtb3ZlbXgJKCVhMCksJWZwMC0lZnAwCisJYnJhCQl0X292ZmwKKworCXxlbmQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL3NldG94LlMgYi9hcmNoL202OGsvZnBzcDA0MC9zZXRveC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYTc1ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC9zZXRveC5TCkBAIC0wLDAgKzEsODY1IEBACit8Cit8CXNldG94LnNhIDMuMSAxMi8xMC85MAorfAorfAlUaGUgZW50cnkgcG9pbnQgc2V0b3ggY29tcHV0ZXMgdGhlIGV4cG9uZW50aWFsIG9mIGEgdmFsdWUuCit8CXNldG94ZCBkb2VzIHRoZSBzYW1lIGV4Y2VwdCB0aGUgaW5wdXQgdmFsdWUgaXMgYSBkZW5vcm1hbGl6ZWQKK3wJbnVtYmVyLglzZXRveG0xIGNvbXB1dGVzIGV4cChYKS0xLCBhbmQgc2V0b3htMWQgY29tcHV0ZXMKK3wJZXhwKFgpLTEgZm9yIGRlbm9ybWFsaXplZCBYLgorfAorfAlJTlBVVAorfAktLS0tLQorfAlEb3VibGUtZXh0ZW5kZWQgdmFsdWUgaW4gbWVtb3J5IGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkgYWRkcmVzcworfAlyZWdpc3RlciBhMC4KK3wKK3wJT1VUUFVUCit8CS0tLS0tLQorfAlleHAoWCkgb3IgZXhwKFgpLTEgcmV0dXJuZWQgaW4gZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgZnAwLgorfAorfAlBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZCit8CS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMC44NSB1bHBzIGluIDY0IHNpZ25pZmljYW50IGJpdCwgaS5lLgorfAl3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5IHJvdW5kZWQKK3wJdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMgaW4gZG91YmxlCit8CXByZWNpc2lvbi4KK3wKK3wJU1BFRUQKK3wJLS0tLS0KK3wJVHdvIHRpbWluZ3MgYXJlIG1lYXN1cmVkLCBib3RoIGluIHRoZSBjb3B5LWJhY2sgbW9kZS4gVGhlCit8CWZpcnN0IG9uZSBpcyBtZWFzdXJlZCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBpbnZva2VkIHRoZSBmaXJzdCB0aW1lCit8CShzbyB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCBkYXRhIGFyZSBub3QgaW4gY2FjaGUpLCBhbmQgdGhlCit8CXNlY29uZCBvbmUgaXMgbWVhc3VyZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgcmVpbnZva2VkIGF0IHRoZSBzYW1lCit8CWlucHV0IGFyZ3VtZW50LgorfAorfAlUaGUgcHJvZ3JhbSBzZXRveCB0YWtlcyBhcHByb3hpbWF0ZWx5IDIxMC8xOTAgY3ljbGVzIGZvciBpbnB1dAorfAlhcmd1bWVudCBYIHdob3NlIG1hZ25pdHVkZSBpcyBsZXNzIHRoYW4gMTYzODAgbG9nMiwgd2hpY2gKK3wJaXMgdGhlIHVzdWFsIHNpdHVhdGlvbi4JRm9yIHRoZSBsZXNzIGNvbW1vbiBhcmd1bWVudHMsCit8CWRlcGVuZGluZyBvbiB0aGVpciB2YWx1ZXMsIHRoZSBwcm9ncmFtIG1heSBydW4gZmFzdGVyIG9yIHNsb3dlciAtLQorfAlidXQgbm8gd29yc2UgdGhhbiAxMCUgc2xvd2VyIGV2ZW4gaW4gdGhlIGV4dHJlbWUgY2FzZXMuCit8Cit8CVRoZSBwcm9ncmFtIHNldG94bTEgdGFrZXMgYXBwcm94aW1hdGVseSA/Pz8vPz8/IGN5Y2xlcyBmb3IgaW5wdXQKK3wJYXJndW1lbnQgWCwgMC4yNSA8PSB8WHwgPCA3MGxvZzIuIEZvciB8WHwgPCAwLjI1LCBpdCB0YWtlcworfAlhcHByb3hpbWF0ZWx5ID8/Py8/Pz8gY3ljbGVzLiBGb3IgdGhlIGxlc3MgY29tbW9uIGFyZ3VtZW50cywKK3wJZGVwZW5kaW5nIG9uIHRoZWlyIHZhbHVlcywgdGhlIHByb2dyYW0gbWF5IHJ1biBmYXN0ZXIgb3Igc2xvd2VyIC0tCit8CWJ1dCBubyB3b3JzZSB0aGFuIDEwJSBzbG93ZXIgZXZlbiBpbiB0aGUgZXh0cmVtZSBjYXNlcy4KK3wKK3wJQUxHT1JJVEhNIGFuZCBJTVBMRU1FTlRBVElPTiBOT1RFUworfAktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit8Cit8CXNldG94ZAorfAktLS0tLS0KK3wJU3RlcCAxLglTZXQgYW5zIDo9IDEuMAorfAorfAlTdGVwIDIuCVJldHVybglhbnMgOj0gYW5zICsgc2lnbihYKSoyXigtMTI2KS4gRXhpdC4KK3wJTm90ZXM6CVRoaXMgd2lsbCBhbHdheXMgZ2VuZXJhdGUgb25lIGV4Y2VwdGlvbiAtLSBpbmV4YWN0LgorfAorfAorfAlzZXRveAorfAktLS0tLQorfAorfAlTdGVwIDEuCUZpbHRlciBvdXQgZXh0cmVtZSBjYXNlcyBvZiBpbnB1dCBhcmd1bWVudC4KK3wJCTEuMQlJZiB8WHwgPj0gMl4oLTY1KSwgZ28gdG8gU3RlcCAxLjMuCit8CQkxLjIJR28gdG8gU3RlcCA3LgorfAkJMS4zCUlmIHxYfCA8IDE2MzgwIGxvZygyKSwgZ28gdG8gU3RlcCAyLgorfAkJMS40CUdvIHRvIFN0ZXAgOC4KK3wJTm90ZXM6CVRoZSB1c3VhbCBjYXNlIHNob3VsZCB0YWtlIHRoZSBicmFuY2hlcyAxLjEgLT4gMS4zIC0+IDIuCit8CQkgVG8gYXZvaWQgdGhlIHVzZSBvZiBmbG9hdGluZy1wb2ludCBjb21wYXJpc29ucywgYQorfAkJIGNvbXBhY3QgcmVwcmVzZW50YXRpb24gb2YgfFh8IGlzIHVzZWQuIFRoaXMgZm9ybWF0IGlzIGEKK3wJCSAzMi1iaXQgaW50ZWdlciwgdGhlIHVwcGVyIChtb3JlIHNpZ25pZmljYW50KSAxNiBiaXRzIGFyZQorfAkJIHRoZSBzaWduIGFuZCBiaWFzZWQgZXhwb25lbnQgZmllbGQgb2YgfFh8OyB0aGUgbG93ZXIgMTYKK3wJCSBiaXRzIGFyZSB0aGUgMTYgbW9zdCBzaWduaWZpY2FudCBmcmFjdGlvbiAoaW5jbHVkaW5nIHRoZQorfAkJIGV4cGxpY2l0IGJpdCkgYml0cyBvZiB8WHwuIENvbnNlcXVlbnRseSwgdGhlIGNvbXBhcmlzb25zCit8CQkgaW4gU3RlcHMgMS4xIGFuZCAxLjMgY2FuIGJlIHBlcmZvcm1lZCBieSBpbnRlZ2VyIGNvbXBhcmlzb24uCit8CQkgTm90ZSBhbHNvIHRoYXQgdGhlIGNvbnN0YW50IDE2MzgwIGxvZygyKSB1c2VkIGluIFN0ZXAgMS4zCit8CQkgaXMgYWxzbyBpbiB0aGUgY29tcGFjdCBmb3JtLiBUaHVzIHRha2luZyB0aGUgYnJhbmNoCit8CQkgdG8gU3RlcCAyIGd1YXJhbnRlZXMgfFh8IDwgMTYzODAgbG9nKDIpLiBUaGVyZSBpcyBubyBoYXJtCit8CQkgdG8gaGF2ZSBhIHNtYWxsIG51bWJlciBvZiBjYXNlcyB3aGVyZSB8WHwgaXMgbGVzcyB0aGFuLAorfAkJIGJ1dCBjbG9zZSB0bywgMTYzODAgbG9nKDIpIGFuZCB0aGUgYnJhbmNoIHRvIFN0ZXAgOSBpcworfAkJIHRha2VuLgorfAorfAlTdGVwIDIuCUNhbGN1bGF0ZSBOID0gcm91bmQtdG8tbmVhcmVzdC1pbnQoIFggKiA2NC9sb2cyICkuCit8CQkyLjEJU2V0IEFkakZsYWcgOj0gMCAoaW5kaWNhdGVzIHRoZSBicmFuY2ggMS4zIC0+IDIgd2FzIHRha2VuKQorfAkJMi4yCU4gOj0gcm91bmQtdG8tbmVhcmVzdC1pbnRlZ2VyKCBYICogNjQvbG9nMiApLgorfAkJMi4zCUNhbGN1bGF0ZQlKID0gTiBtb2QgNjQ7IHNvIEogPSAwLDEsMiwuLi4sIG9yIDYzLgorfAkJMi40CUNhbGN1bGF0ZQlNID0gKE4gLSBKKS82NDsgc28gTiA9IDY0TSArIEouCit8CQkyLjUJQ2FsY3VsYXRlIHRoZSBhZGRyZXNzIG9mIHRoZSBzdG9yZWQgdmFsdWUgb2YgMl4oSi82NCkuCit8CQkyLjYJQ3JlYXRlIHRoZSB2YWx1ZSBTY2FsZSA9IDJeTS4KK3wJTm90ZXM6CVRoZSBjYWxjdWxhdGlvbiBpbiAyLjIgaXMgcmVhbGx5IHBlcmZvcm1lZCBieQorfAorfAkJCVogOj0gWCAqIGNvbnN0YW50Cit8CQkJTiA6PSByb3VuZC10by1uZWFyZXN0LWludGVnZXIoWikKK3wKK3wJCSB3aGVyZQorfAorfAkJCWNvbnN0YW50IDo9IHNpbmdsZS1wcmVjaXNpb24oIDY0L2xvZyAyICkuCit8Cit8CQkgVXNpbmcgYSBzaW5nbGUtcHJlY2lzaW9uIGNvbnN0YW50IGF2b2lkcyBtZW1vcnkgYWNjZXNzLgorfAkJIEFub3RoZXIgZWZmZWN0IG9mIHVzaW5nIGEgc2luZ2xlLXByZWNpc2lvbiAiY29uc3RhbnQiIGlzCit8CQkgdGhhdCB0aGUgY2FsY3VsYXRlZCB2YWx1ZSBaIGlzCit8Cit8CQkJWiA9IFgqKDY0L2xvZzIpKigxK2VwcyksIHxlcHN8IDw9IDJeKC0yNCkuCit8Cit8CQkgVGhpcyBlcnJvciBoYXMgdG8gYmUgY29uc2lkZXJlZCBsYXRlciBpbiBTdGVwcyAzIGFuZCA0LgorfAorfAlTdGVwIDMuCUNhbGN1bGF0ZSBYIC0gTipsb2cyLzY0LgorfAkJMy4xCVIgOj0gWCArIE4qTDEsIHdoZXJlIEwxIDo9IHNpbmdsZS1wcmVjaXNpb24oLWxvZzIvNjQpLgorfAkJMy4yCVIgOj0gUiArIE4qTDIsIEwyIDo9IGV4dGVuZGVkLXByZWNpc2lvbigtbG9nMi82NCAtIEwxKS4KK3wJTm90ZXM6CWEpIFRoZSB3YXkgTDEgYW5kIEwyIGFyZSBjaG9zZW4gZW5zdXJlcyBMMStMMiBhcHByb3hpbWF0ZQorfAkJIHRoZSB2YWx1ZQktbG9nMi82NAl0byA4OCBiaXRzIG9mIGFjY3VyYWN5LgorfAkJIGIpIE4qTDEgaXMgZXhhY3QgYmVjYXVzZSBOIGlzIG5vIGxvbmdlciB0aGFuIDIyIGJpdHMgYW5kCit8CQkgTDEgaXMgbm8gbG9uZ2VyIHRoYW4gMjQgYml0cy4KK3wJCSBjKSBUaGUgY2FsY3VsYXRpb24gWCtOKkwxIGlzIGFsc28gZXhhY3QgZHVlIHRvIGNhbmNlbGxhdGlvbi4KK3wJCSBUaHVzLCBSIGlzIHByYWN0aWNhbGx5IFgrTihMMStMMikgdG8gZnVsbCA2NCBiaXRzLgorfAkJIGQpIEl0IGlzIGltcG9ydGFudCB0byBlc3RpbWF0ZSBob3cgbGFyZ2UgY2FuIHxSfCBiZSBhZnRlcgorfAkJIFN0ZXAgMy4yLgorfAorfAkJCU4gPSBybmQtdG8taW50KCBYKjY0L2xvZzIgKDErZXBzKSApLCB8ZXBzfDw9Ml4oLTI0KQorfAkJCVgqNjQvbG9nMiAoMStlcHMpCT0JTiArIGYsCXxmfCA8PSAwLjUKK3wJCQlYKjY0L2xvZzIgLSBOCT0JZiAtIGVwcypYIDY0L2xvZzIKK3wJCQlYIC0gTipsb2cyLzY0CT0JZipsb2cyLzY0IC0gZXBzKlgKK3wKK3wKK3wJCSBOb3cgfFh8IDw9IDE2NDQ2IGxvZzIsIHRodXMKK3wKK3wJCQl8WCAtIE4qbG9nMi82NHwgPD0gKDAuNSArIDE2NDQ2LzJeKDE4KSkqbG9nMi82NAorfAkJCQkJPD0gMC41NyBsb2cyLzY0LgorfAkJIFRoaXMgYm91bmQgd2lsbCBiZSB1c2VkIGluIFN0ZXAgNC4KK3wKK3wJU3RlcCA0LglBcHByb3hpbWF0ZSBleHAoUiktMSBieSBhIHBvbHlub21pYWwKK3wJCQlwID0gUiArIFIqUiooQTEgKyBSKihBMiArIFIqKEEzICsgUiooQTQgKyBSKkE1KSkpKQorfAlOb3RlczoJYSkgSW4gb3JkZXIgdG8gcmVkdWNlIG1lbW9yeSBhY2Nlc3MsIHRoZSBjb2VmZmljaWVudHMgYXJlCit8CQkgbWFkZSBhcyAic2hvcnQiIGFzIHBvc3NpYmxlOiBBMSAod2hpY2ggaXMgMS8yKSwgQTQgYW5kIEE1Cit8CQkgYXJlIHNpbmdsZSBwcmVjaXNpb247IEEyIGFuZCBBMyBhcmUgZG91YmxlIHByZWNpc2lvbi4KK3wJCSBiKSBFdmVuIHdpdGggdGhlIHJlc3RyaWN0aW9ucyBhYm92ZSwKK3wJCQl8cCAtIChleHAoUiktMSl8IDwgMl4oLTY4LjgpIGZvciBhbGwgfFJ8IDw9IDAuMDA2Mi4KK3wJCSBOb3RlIHRoYXQgMC4wMDYyIGlzIHNsaWdodGx5IGJpZ2dlciB0aGFuIDAuNTcgbG9nMi82NC4KK3wJCSBjKSBUbyBmdWxseSB1dGlsaXplIHRoZSBwaXBlbGluZSwgcCBpcyBzZXBhcmF0ZWQgaW50bworfAkJIHR3byBpbmRlcGVuZGVudCBwaWVjZXMgb2Ygcm91Z2hseSBlcXVhbCBjb21wbGV4aXRpZXMKK3wJCQlwID0gWyBSICsgUipTKihBMiArIFMqQTQpIF0JKworfAkJCQlbIFMqKEExICsgUyooQTMgKyBTKkE1KSkgXQorfAkJIHdoZXJlIFMgPSBSKlIuCit8Cit8CVN0ZXAgNS4JQ29tcHV0ZSAyXihKLzY0KSpleHAoUikgPSAyXihKLzY0KSooMStwKSBieQorfAkJCQlhbnMgOj0gVCArICggVCpwICsgdCkKK3wJCSB3aGVyZSBUIGFuZCB0IGFyZSB0aGUgc3RvcmVkIHZhbHVlcyBmb3IgMl4oSi82NCkuCit8CU5vdGVzOgkyXihKLzY0KSBpcyBzdG9yZWQgYXMgVCBhbmQgdCB3aGVyZSBUK3QgYXBwcm94aW1hdGVzCit8CQkgMl4oSi82NCkgdG8gcm91Z2hseSA4NSBiaXRzOyBUIGlzIGluIGV4dGVuZGVkIHByZWNpc2lvbgorfAkJIGFuZCB0IGlzIGluIHNpbmdsZSBwcmVjaXNpb24uIE5vdGUgYWxzbyB0aGF0IFQgaXMgcm91bmRlZAorfAkJIHRvIDYyIGJpdHMgc28gdGhhdCB0aGUgbGFzdCB0d28gYml0cyBvZiBUIGFyZSB6ZXJvLiBUaGUKK3wJCSByZWFzb24gZm9yIHN1Y2ggYSBzcGVjaWFsIGZvcm0gaXMgdGhhdCBULTEsIFQtMiwgYW5kIFQtOAorfAkJIHdpbGwgYWxsIGJlIGV4YWN0IC0tLSBhIHByb3BlcnR5IHRoYXQgd2lsbCBnaXZlIG11Y2gKK3wJCSBtb3JlIGFjY3VyYXRlIGNvbXB1dGF0aW9uIG9mIHRoZSBmdW5jdGlvbiBFWFBNMS4KK3wKK3wJU3RlcCA2LglSZWNvbnN0cnVjdGlvbiBvZiBleHAoWCkKK3wJCQlleHAoWCkgPSAyXk0gKiAyXihKLzY0KSAqIGV4cChSKS4KK3wJCTYuMQlJZiBBZGpGbGFnID0gMCwgZ28gdG8gNi4zCit8CQk2LjIJYW5zIDo9IGFucyAqIEFkalNjYWxlCit8CQk2LjMJUmVzdG9yZSB0aGUgdXNlciBGUENSCit8CQk2LjQJUmV0dXJuIGFucyA6PSBhbnMgKiBTY2FsZS4gRXhpdC4KK3wJTm90ZXM6CUlmIEFkakZsYWcgPSAwLCB3ZSBoYXZlIFggPSBNbG9nMiArIEpsb2cyLzY0ICsgUiwKK3wJCSB8TXwgPD0gMTYzODAsIGFuZCBTY2FsZSA9IDJeTS4gTW9yZW92ZXIsIGV4cChYKSB3aWxsCit8CQkgbmVpdGhlciBvdmVyZmxvdyBub3IgdW5kZXJmbG93LiBJZiBBZGpGbGFnID0gMSwgdGhhdAorfAkJIG1lYW5zIHRoYXQKK3wJCQlYID0gKE0xK00pbG9nMiArIEpsb2cyLzY0ICsgUiwgfE0xK018ID49IDE2MzgwLgorfAkJIEhlbmNlLCBleHAoWCkgbWF5IG92ZXJmbG93IG9yIHVuZGVyZmxvdyBvciBuZWl0aGVyLgorfAkJIFdoZW4gdGhhdCBpcyB0aGUgY2FzZSwgQWRqU2NhbGUgPSAyXihNMSkgd2hlcmUgTTEgaXMKK3wJCSBhcHByb3hpbWF0ZWx5IE0uIFRodXMgNi4yIHdpbGwgbmV2ZXIgY2F1c2Ugb3Zlci91bmRlcmZsb3cuCit8CQkgUG9zc2libGUgZXhjZXB0aW9uIGluIDYuNCBpcyBvdmVyZmxvdyBvciB1bmRlcmZsb3cuCit8CQkgVGhlIGluZXhhY3QgZXhjZXB0aW9uIGlzIG5vdCBnZW5lcmF0ZWQgaW4gNi40LiBBbHRob3VnaAorfAkJIG9uZSBjYW4gYXJndWUgdGhhdCB0aGUgaW5leGFjdCBmbGFnIHNob3VsZCBhbHdheXMgYmUKK3wJCSByYWlzZWQsIHRvIHNpbXVsYXRlIHRoYXQgZXhjZXB0aW9uIGNvc3QgdG8gbXVjaCB0aGFuIHRoZQorfAkJIGZsYWcgaXMgd29ydGggaW4gcHJhY3RpY2FsIHVzZXMuCit8Cit8CVN0ZXAgNy4JUmV0dXJuIDEgKyBYLgorfAkJNy4xCWFucyA6PSBYCit8CQk3LjIJUmVzdG9yZSB1c2VyIEZQQ1IuCit8CQk3LjMJUmV0dXJuIGFucyA6PSAxICsgYW5zLiBFeGl0Cit8CU5vdGVzOglGb3Igbm9uLXplcm8gWCwgdGhlIGluZXhhY3QgZXhjZXB0aW9uIHdpbGwgYWx3YXlzIGJlCit8CQkgcmFpc2VkIGJ5IDcuMy4gVGhhdCBpcyB0aGUgb25seSBleGNlcHRpb24gcmFpc2VkIGJ5IDcuMy4KK3wJCSBOb3RlIGFsc28gdGhhdCB3ZSB1c2UgdGhlIEZNT1ZFTSBpbnN0cnVjdGlvbiB0byBtb3ZlIFgKK3wJCSBpbiBTdGVwIDcuMSB0byBhdm9pZCB1bm5lY2Vzc2FyeSB0cmFwcGluZy4gKEFsdGhvdWdoCit8CQkgdGhlIEZNT1ZFTSBtYXkgbm90IHNlZW0gcmVsZXZhbnQgc2luY2UgWCBpcyBub3JtYWxpemVkLAorfAkJIHRoZSBwcmVjYXV0aW9uIHdpbGwgYmUgdXNlZnVsIGluIHRoZSBsaWJyYXJ5IHZlcnNpb24gb2YKK3wJCSB0aGlzIGNvZGUgd2hlcmUgdGhlIHNlcGFyYXRlIGVudHJ5IGZvciBkZW5vcm1hbGl6ZWQgaW5wdXRzCit8CQkgd2lsbCBiZSBkb25lIGF3YXkgd2l0aC4pCit8Cit8CVN0ZXAgOC4JSGFuZGxlIGV4cChYKSB3aGVyZSB8WHwgPj0gMTYzODBsb2cyLgorfAkJOC4xCUlmIHxYfCA+IDE2NDgwIGxvZzIsIGdvIHRvIFN0ZXAgOS4KK3wJCShtaW1pYyAyLjIgLSAyLjYpCit8CQk4LjIJTiA6PSByb3VuZC10by1pbnRlZ2VyKCBYICogNjQvbG9nMiApCit8CQk4LjMJQ2FsY3VsYXRlIEogPSBOIG1vZCA2NCwgSiA9IDAsMSwuLi4sNjMKK3wJCTguNAlLIDo9IChOLUopLzY0LCBNMSA6PSB0cnVuY2F0ZShLLzIpLCBNID0gSy1NMSwgQWRqRmxhZyA6PSAxLgorfAkJOC41CUNhbGN1bGF0ZSB0aGUgYWRkcmVzcyBvZiB0aGUgc3RvcmVkIHZhbHVlIDJeKEovNjQpLgorfAkJOC42CUNyZWF0ZSB0aGUgdmFsdWVzIFNjYWxlID0gMl5NLCBBZGpTY2FsZSA9IDJeTTEuCit8CQk4LjcJR28gdG8gU3RlcCAzLgorfAlOb3RlczoJUmVmZXIgdG8gbm90ZXMgZm9yIDIuMiAtIDIuNi4KK3wKK3wJU3RlcCA5LglIYW5kbGUgZXhwKFgpLCB8WHwgPiAxNjQ4MCBsb2cyLgorfAkJOS4xCUlmIFggPCAwLCBnbyB0byA5LjMKK3wJCTkuMglhbnMgOj0gSHVnZSwgZ28gdG8gOS40Cit8CQk5LjMJYW5zIDo9IFRpbnkuCit8CQk5LjQJUmVzdG9yZSB1c2VyIEZQQ1IuCit8CQk5LjUJUmV0dXJuIGFucyA6PSBhbnMgKiBhbnMuIEV4aXQuCit8CU5vdGVzOglFeHAoWCkgd2lsbCBzdXJlbHkgb3ZlcmZsb3cgb3IgdW5kZXJmbG93LCBkZXBlbmRpbmcgb24KK3wJCSBYJ3Mgc2lnbi4gIkh1Z2UiIGFuZCAiVGlueSIgYXJlIHJlc3BlY3RpdmVseSBsYXJnZS90aW55Cit8CQkgZXh0ZW5kZWQtcHJlY2lzaW9uIG51bWJlcnMgd2hvc2Ugc3F1YXJlIG92ZXIvdW5kZXJmbG93Cit8CQkgd2l0aCBhbiBpbmV4YWN0IHJlc3VsdC4gVGh1cywgOS41IGFsd2F5cyByYWlzZXMgdGhlCit8CQkgaW5leGFjdCB0b2dldGhlciB3aXRoIGVpdGhlciBvdmVyZmxvdyBvciB1bmRlcmZsb3cuCit8Cit8Cit8CXNldG94bTFkCit8CS0tLS0tLS0tCit8Cit8CVN0ZXAgMS4JU2V0IGFucyA6PSAwCit8Cit8CVN0ZXAgMi4JUmV0dXJuCWFucyA6PSBYICsgYW5zLiBFeGl0LgorfAlOb3RlczoJVGhpcyB3aWxsIHJldHVybiBYIHdpdGggdGhlIGFwcHJvcHJpYXRlIHJvdW5kaW5nCit8CQkgcHJlY2lzaW9uIHByZXNjcmliZWQgYnkgdGhlIHVzZXIgRlBDUi4KK3wKK3wJc2V0b3htMQorfAktLS0tLS0tCit8Cit8CVN0ZXAgMS4JQ2hlY2sgfFh8Cit8CQkxLjEJSWYgfFh8ID49IDEvNCwgZ28gdG8gU3RlcCAxLjMuCit8CQkxLjIJR28gdG8gU3RlcCA3LgorfAkJMS4zCUlmIHxYfCA8IDcwIGxvZygyKSwgZ28gdG8gU3RlcCAyLgorfAkJMS40CUdvIHRvIFN0ZXAgMTAuCit8CU5vdGVzOglUaGUgdXN1YWwgY2FzZSBzaG91bGQgdGFrZSB0aGUgYnJhbmNoZXMgMS4xIC0+IDEuMyAtPiAyLgorfAkJIEhvd2V2ZXIsIGl0IGlzIGNvbmNlaXZhYmxlIHxYfCBjYW4gYmUgc21hbGwgdmVyeSBvZnRlbgorfAkJIGJlY2F1c2UgRVhQTTEgaXMgaW50ZW5kZWQgdG8gZXZhbHVhdGUgZXhwKFgpLTEgYWNjdXJhdGVseQorfAkJIHdoZW4gfFh8IGlzIHNtYWxsLiBGb3IgZnVydGhlciBkZXRhaWxzIG9uIHRoZSBjb21wYXJpc29ucywKK3wJCSBzZWUgdGhlIG5vdGVzIG9uIFN0ZXAgMSBvZiBzZXRveC4KK3wKK3wJU3RlcCAyLglDYWxjdWxhdGUgTiA9IHJvdW5kLXRvLW5lYXJlc3QtaW50KCBYICogNjQvbG9nMiApLgorfAkJMi4xCU4gOj0gcm91bmQtdG8tbmVhcmVzdC1pbnRlZ2VyKCBYICogNjQvbG9nMiApLgorfAkJMi4yCUNhbGN1bGF0ZQlKID0gTiBtb2QgNjQ7IHNvIEogPSAwLDEsMiwuLi4sIG9yIDYzLgorfAkJMi4zCUNhbGN1bGF0ZQlNID0gKE4gLSBKKS82NDsgc28gTiA9IDY0TSArIEouCit8CQkyLjQJQ2FsY3VsYXRlIHRoZSBhZGRyZXNzIG9mIHRoZSBzdG9yZWQgdmFsdWUgb2YgMl4oSi82NCkuCit8CQkyLjUJQ3JlYXRlIHRoZSB2YWx1ZXMgU2MgPSAyXk0gYW5kIE9uZWJ5U2MgOj0gLTJeKC1NKS4KK3wJTm90ZXM6CVNlZSB0aGUgbm90ZXMgb24gU3RlcCAyIG9mIHNldG94LgorfAorfAlTdGVwIDMuCUNhbGN1bGF0ZSBYIC0gTipsb2cyLzY0LgorfAkJMy4xCVIgOj0gWCArIE4qTDEsIHdoZXJlIEwxIDo9IHNpbmdsZS1wcmVjaXNpb24oLWxvZzIvNjQpLgorfAkJMy4yCVIgOj0gUiArIE4qTDIsIEwyIDo9IGV4dGVuZGVkLXByZWNpc2lvbigtbG9nMi82NCAtIEwxKS4KK3wJTm90ZXM6CUFwcGx5aW5nIHRoZSBhbmFseXNpcyBvZiBTdGVwIDMgb2Ygc2V0b3ggaW4gdGhpcyBjYXNlCit8CQkgc2hvd3MgdGhhdCB8UnwgPD0gMC4wMDU1IChub3RlIHRoYXQgfFh8IDw9IDcwIGxvZzIgaW4KK3wJCSB0aGlzIGNhc2UpLgorfAorfAlTdGVwIDQuCUFwcHJveGltYXRlIGV4cChSKS0xIGJ5IGEgcG9seW5vbWlhbAorfAkJCXAgPSBSK1IqUiooQTErUiooQTIrUiooQTMrUiooQTQrUiooQTUrUipBNikpKSkpCit8CU5vdGVzOglhKSBJbiBvcmRlciB0byByZWR1Y2UgbWVtb3J5IGFjY2VzcywgdGhlIGNvZWZmaWNpZW50cyBhcmUKK3wJCSBtYWRlIGFzICJzaG9ydCIgYXMgcG9zc2libGU6IEExICh3aGljaCBpcyAxLzIpLCBBNSBhbmQgQTYKK3wJCSBhcmUgc2luZ2xlIHByZWNpc2lvbjsgQTIsIEEzIGFuZCBBNCBhcmUgZG91YmxlIHByZWNpc2lvbi4KK3wJCSBiKSBFdmVuIHdpdGggdGhlIHJlc3RyaWN0aW9uIGFib3ZlLAorfAkJCXxwIC0gKGV4cChSKS0xKXwgPAl8UnwgKiAyXigtNzIuNykKK3wJCSBmb3IgYWxsIHxSfCA8PSAwLjAwNTUuCit8CQkgYykgVG8gZnVsbHkgdXRpbGl6ZSB0aGUgcGlwZWxpbmUsIHAgaXMgc2VwYXJhdGVkIGludG8KK3wJCSB0d28gaW5kZXBlbmRlbnQgcGllY2VzIG9mIHJvdWdobHkgZXF1YWwgY29tcGxleGl0eQorfAkJCXAgPSBbIFIqUyooQTIgKyBTKihBNCArIFMqQTYpKSBdCSsKK3wJCQkJWyBSICsgUyooQTEgKyBTKihBMyArIFMqQTUpKSBdCit8CQkgd2hlcmUgUyA9IFIqUi4KK3wKK3wJU3RlcCA1LglDb21wdXRlIDJeKEovNjQpKnAgYnkKK3wJCQkJcCA6PSBUKnAKK3wJCSB3aGVyZSBUIGFuZCB0IGFyZSB0aGUgc3RvcmVkIHZhbHVlcyBmb3IgMl4oSi82NCkuCit8CU5vdGVzOgkyXihKLzY0KSBpcyBzdG9yZWQgYXMgVCBhbmQgdCB3aGVyZSBUK3QgYXBwcm94aW1hdGVzCit8CQkgMl4oSi82NCkgdG8gcm91Z2hseSA4NSBiaXRzOyBUIGlzIGluIGV4dGVuZGVkIHByZWNpc2lvbgorfAkJIGFuZCB0IGlzIGluIHNpbmdsZSBwcmVjaXNpb24uIE5vdGUgYWxzbyB0aGF0IFQgaXMgcm91bmRlZAorfAkJIHRvIDYyIGJpdHMgc28gdGhhdCB0aGUgbGFzdCB0d28gYml0cyBvZiBUIGFyZSB6ZXJvLiBUaGUKK3wJCSByZWFzb24gZm9yIHN1Y2ggYSBzcGVjaWFsIGZvcm0gaXMgdGhhdCBULTEsIFQtMiwgYW5kIFQtOAorfAkJIHdpbGwgYWxsIGJlIGV4YWN0IC0tLSBhIHByb3BlcnR5IHRoYXQgd2lsbCBiZSBleHBsb2l0ZWQKK3wJCSBpbiBTdGVwIDYgYmVsb3cuIFRoZSB0b3RhbCByZWxhdGl2ZSBlcnJvciBpbiBwIGlzIG5vCit8CQkgYmlnZ2VyIHRoYW4gMl4oLTY3LjcpIGNvbXBhcmVkIHRvIHRoZSBmaW5hbCByZXN1bHQuCit8Cit8CVN0ZXAgNi4JUmVjb25zdHJ1Y3Rpb24gb2YgZXhwKFgpLTEKK3wJCQlleHAoWCktMSA9IDJeTSAqICggMl4oSi82NCkgKyBwIC0gMl4oLU0pICkuCit8CQk2LjEJSWYgTSA8PSA2MywgZ28gdG8gU3RlcCA2LjMuCit8CQk2LjIJYW5zIDo9IFQgKyAocCArICh0ICsgT25lYnlTYykpLiBHbyB0byA2LjYKK3wJCTYuMwlJZiBNID49IC0zLCBnbyB0byA2LjUuCit8CQk2LjQJYW5zIDo9IChUICsgKHAgKyB0KSkgKyBPbmVieVNjLiBHbyB0byA2LjYKK3wJCTYuNQlhbnMgOj0gKFQgKyBPbmVieVNjKSArIChwICsgdCkuCit8CQk2LjYJUmVzdG9yZSB1c2VyIEZQQ1IuCit8CQk2LjcJUmV0dXJuIGFucyA6PSBTYyAqIGFucy4gRXhpdC4KK3wJTm90ZXM6CVRoZSB2YXJpb3VzIGFycmFuZ2VtZW50cyBvZiB0aGUgZXhwcmVzc2lvbnMgZ2l2ZSBhY2N1cmF0ZQorfAkJIGV2YWx1YXRpb25zLgorfAorfAlTdGVwIDcuCWV4cChYKS0xIGZvciB8WHwgPCAxLzQuCit8CQk3LjEJSWYgfFh8ID49IDJeKC02NSksIGdvIHRvIFN0ZXAgOS4KK3wJCTcuMglHbyB0byBTdGVwIDguCit8Cit8CVN0ZXAgOC4JQ2FsY3VsYXRlIGV4cChYKS0xLCB8WHwgPCAyXigtNjUpLgorfAkJOC4xCUlmIHxYfCA8IDJeKC0xNjMxMiksIGdvdG8gOC4zCit8CQk4LjIJUmVzdG9yZSBGUENSOyByZXR1cm4gYW5zIDo9IFggLSAyXigtMTYzODIpLiBFeGl0LgorfAkJOC4zCVggOj0gWCAqIDJeKDE0MCkuCit8CQk4LjQJUmVzdG9yZSBGUENSOyBhbnMgOj0gYW5zIC0gMl4oLTE2MzgyKS4KK3wJCSBSZXR1cm4gYW5zIDo9IGFucyoyXigxNDApLiBFeGl0Cit8CU5vdGVzOglUaGUgaWRlYSBpcyB0byByZXR1cm4gIlggLSB0aW55IiB1bmRlciB0aGUgdXNlcgorfAkJIHByZWNpc2lvbiBhbmQgcm91bmRpbmcgbW9kZXMuIFRvIGF2b2lkIHVubmVjZXNzYXJ5Cit8CQkgaW5lZmZpY2llbmN5LCB3ZSBzdGF5IGF3YXkgZnJvbSBkZW5vcm1hbGl6ZWQgbnVtYmVycyB0aGUKK3wJCSBiZXN0IHdlIGNhbi4gRm9yIHxYfCA+PSAyXigtMTYzMTIpLCB0aGUgc3RyYWlnaHRmb3J3YXJkCit8CQkgOC4yIGdlbmVyYXRlcyB0aGUgaW5leGFjdCBleGNlcHRpb24gYXMgdGhlIGNhc2Ugd2FycmFudHMuCit8Cit8CVN0ZXAgOS4JQ2FsY3VsYXRlIGV4cChYKS0xLCB8WHwgPCAxLzQsIGJ5IGEgcG9seW5vbWlhbAorfAkJCXAgPSBYICsgWCpYKihCMSArIFgqKEIyICsgLi4uICsgWCpCMTIpKQorfAlOb3RlczoJYSkgSW4gb3JkZXIgdG8gcmVkdWNlIG1lbW9yeSBhY2Nlc3MsIHRoZSBjb2VmZmljaWVudHMgYXJlCit8CQkgbWFkZSBhcyAic2hvcnQiIGFzIHBvc3NpYmxlOiBCMSAod2hpY2ggaXMgMS8yKSwgQjkgdG8gQjEyCit8CQkgYXJlIHNpbmdsZSBwcmVjaXNpb247IEIzIHRvIEI4IGFyZSBkb3VibGUgcHJlY2lzaW9uOyBhbmQKK3wJCSBCMiBpcyBkb3VibGUgZXh0ZW5kZWQuCit8CQkgYikgRXZlbiB3aXRoIHRoZSByZXN0cmljdGlvbiBhYm92ZSwKK3wJCQl8cCAtIChleHAoWCktMSl8IDwgfFh8IDJeKC03MC42KQorfAkJIGZvciBhbGwgfFh8IDw9IDAuMjUxLgorfAkJIE5vdGUgdGhhdCAwLjI1MSBpcyBzbGlnaHRseSBiaWdnZXIgdGhhbiAxLzQuCit8CQkgYykgVG8gZnVsbHkgcHJlc2VydmUgYWNjdXJhY3ksIHRoZSBwb2x5bm9taWFsIGlzIGNvbXB1dGVkCit8CQkgYXMJWCArICggUypCMSArCVEgKSB3aGVyZSBTID0gWCpYIGFuZAorfAkJCVEJPQlYKlMqKEIyICsgWCooQjMgKyAuLi4gKyBYKkIxMikpCit8CQkgZCkgVG8gZnVsbHkgdXRpbGl6ZSB0aGUgcGlwZWxpbmUsIFEgaXMgc2VwYXJhdGVkIGludG8KK3wJCSB0d28gaW5kZXBlbmRlbnQgcGllY2VzIG9mIHJvdWdobHkgZXF1YWwgY29tcGxleGl0eQorfAkJCVEgPSBbIFgqUyooQjIgKyBTKihCNCArIC4uLiArIFMqQjEyKSkgXSArCit8CQkJCVsgUypTKihCMyArIFMqKEI1ICsgLi4uICsgUypCMTEpKSBdCit8Cit8CVN0ZXAgMTAuCUNhbGN1bGF0ZSBleHAoWCktMSBmb3IgfFh8ID49IDcwIGxvZyAyLgorfAkJMTAuMSBJZiBYID49IDcwbG9nMiAsIGV4cChYKSAtIDEgPSBleHAoWCkgZm9yIGFsbCBwcmFjdGljYWwKK3wJCSBwdXJwb3Nlcy4gVGhlcmVmb3JlLCBnbyB0byBTdGVwIDEgb2Ygc2V0b3guCit8CQkxMC4yIElmIFggPD0gLTcwbG9nMiwgZXhwKFgpIC0gMSA9IC0xIGZvciBhbGwgcHJhY3RpY2FsIHB1cnBvc2VzLgorfAkJIGFucyA6PSAtMQorfAkJIFJlc3RvcmUgdXNlciBGUENSCit8CQkgUmV0dXJuIGFucyA6PSBhbnMgKyAyXigtMTI2KS4gRXhpdC4KK3wJTm90ZXM6CTEwLjIgd2lsbCBhbHdheXMgY3JlYXRlIGFuIGluZXhhY3QgYW5kIHJldHVybiAtMSArIHRpbnkKK3wJCSBpbiB0aGUgdXNlciByb3VuZGluZyBwcmVjaXNpb24gYW5kIG1vZGUuCit8Cit8CisKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK3xzZXRveAlpZG50CTIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKwl8c2VjdGlvbgk4CisKKyNpbmNsdWRlICJmcHNwLmgiCisKK0wyOgkubG9uZwkweDNGREMwMDAwLDB4ODJFMzA4NjUsMHg0MzYxQzRDNiwweDAwMDAwMDAwCisKK0VYUEEzOgkubG9uZwkweDNGQTU1NTU1LDB4NTU1NTQ0MzEKK0VYUEEyOgkubG9uZwkweDNGQzU1NTU1LDB4NTU1NTQwMTgKKworSFVHRToJLmxvbmcJMHg3RkZFMDAwMCwweEZGRkZGRkZGLDB4RkZGRkZGRkYsMHgwMDAwMDAwMAorVElOWToJLmxvbmcJMHgwMDAxMDAwMCwweEZGRkZGRkZGLDB4RkZGRkZGRkYsMHgwMDAwMDAwMAorCitFTTFBNDoJLmxvbmcJMHgzRjgxMTExMSwweDExMTc0Mzg1CitFTTFBMzoJLmxvbmcJMHgzRkE1NTU1NSwweDU1NTU0RjVBCisKK0VNMUEyOgkubG9uZwkweDNGQzU1NTU1LDB4NTU1NTU1NTUsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisKK0VNMUI4OgkubG9uZwkweDNFQzcxREUzLDB4QTU3NzQ2ODIKK0VNMUI3OgkubG9uZwkweDNFRkEwMUEwLDB4MTlEN0NCNjgKKworRU0xQjY6CS5sb25nCTB4M0YyQTAxQTAsMHgxQTAxOURGMworRU0xQjU6CS5sb25nCTB4M0Y1NkMxNkMsMHgxNkMxNzBFMgorCitFTTFCNDoJLmxvbmcJMHgzRjgxMTExMSwweDExMTExMTExCitFTTFCMzoJLmxvbmcJMHgzRkE1NTU1NSwweDU1NTU1NTU1CisKK0VNMUIyOgkubG9uZwkweDNGRkMwMDAwLDB4QUFBQUFBQUEsMHhBQUFBQUFBQgorCS5sb25nCTB4MDAwMDAwMDAKKworVFdPMTQwOgkubG9uZwkweDQ4QjAwMDAwLDB4MDAwMDAwMDAKK1RXT04xNDA6CS5sb25nCTB4MzczMDAwMDAsMHgwMDAwMDAwMAorCitFWFBUQkw6CisJLmxvbmcJMHgzRkZGMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4M0ZGRjAwMDAsMHg4MTY0RDFGMywweEJDMDMwNzc0LDB4OUY4NDFBOUIKKwkubG9uZwkweDNGRkYwMDAwLDB4ODJDRDg2OTgsMHhBQzJCQTFEOCwweDlGQzFENUI5CisJLmxvbmcJMHgzRkZGMDAwMCwweDg0M0EyOEMzLDB4QUNERTQwNDgsMHhBMDcyODM2OQorCS5sb25nCTB4M0ZGRjAwMDAsMHg4NUFBQzM2NywweENDNDg3QjE0LDB4MUZDNUM5NUMKKwkubG9uZwkweDNGRkYwMDAwLDB4ODcxRjYxOTYsMHg5RThEMTAxMCwweDFFRTg1QzlGCisJLmxvbmcJMHgzRkZGMDAwMCwweDg4OTgwRTgwLDB4OTJEQTg1MjgsMHg5RkEyMDcyOQorCS5sb25nCTB4M0ZGRjAwMDAsMHg4QTE0RDU3NSwweDQ5NkVGRDlDLDB4QTA3QkY5QUYKKwkubG9uZwkweDNGRkYwMDAwLDB4OEI5NUMxRTMsMHhFQThCRDZFOCwweEEwMDIwRENGCisJLmxvbmcJMHgzRkZGMDAwMCwweDhEMUFERjVCLDB4N0U1QkE5RTQsMHgyMDVBNjNEQQorCS5sb25nCTB4M0ZGRjAwMDAsMHg4RUE0Mzk4QiwweDQ1Q0Q1M0MwLDB4MUVCNzAwNTEKKwkubG9uZwkweDNGRkYwMDAwLDB4OTAzMURDNDMsMHgxNDY2QjFEQywweDFGNkVCMDI5CisJLmxvbmcJMHgzRkZGMDAwMCwweDkxQzNEMzczLDB4QUIxMUMzMzgsMHhBMDc4MTQ5NAorCS5sb25nCTB4M0ZGRjAwMDAsMHg5MzVBMkIyRiwweDEzRTZFOTJDLDB4OUVCMzE5QjAKKwkubG9uZwkweDNGRkYwMDAwLDB4OTRGNEVGQTgsMHhGRUY3MDk2MCwweDIwMTc0NTdECisJLmxvbmcJMHgzRkZGMDAwMCwweDk2OTQyRDM3LDB4MjAxODVBMDAsMHgxRjExRDUzNworCS5sb25nCTB4M0ZGRjAwMDAsMHg5ODM3RjA1MSwweDhEQjhBOTcwLDB4OUZCOTUyREQKKwkubG9uZwkweDNGRkYwMDAwLDB4OTlFMDQ1OTMsMHgyMEI3RkE2NCwweDFGRTQzMDg3CisJLmxvbmcJMHgzRkZGMDAwMCwweDlCOEQzOUI5LDB4RDU0RTU1MzgsMHgxRkEyQTgxOAorCS5sb25nCTB4M0ZGRjAwMDAsMHg5RDNFRDlBNywweDJDRkZCNzUwLDB4MUZERTQ5NEQKKwkubG9uZwkweDNGRkYwMDAwLDB4OUVGNTMyNjAsMHg5MUExMTFBQywweDIwNTA0ODkwCisJLmxvbmcJMHgzRkZGMDAwMCwweEEwQjA1MTBGLDB4Qjk3MTRGQzQsMHhBMDczNjkxQworCS5sb25nCTB4M0ZGRjAwMDAsMHhBMjcwNDMwMywweDBDNDk2ODE4LDB4MUY5QjdBMDUKKwkubG9uZwkweDNGRkYwMDAwLDB4QTQzNTE1QUUsMHgwOUU2ODBBMCwweEEwNzk3MTI2CisJLmxvbmcJMHgzRkZGMDAwMCwweEE1RkVENkE5LDB4QjE1MTM4RUMsMHhBMDcxQTE0MAorCS5sb25nCTB4M0ZGRjAwMDAsMHhBN0NEOTNCNCwweEU5NjUzNTY4LDB4MjA0RjYyREEKKwkubG9uZwkweDNGRkYwMDAwLDB4QTlBMTVBQjQsMHhFQTdDMEVGOCwweDFGMjgzQzRBCisJLmxvbmcJMHgzRkZGMDAwMCwweEFCN0EzOUI1LDB4QTkzRUQzMzgsMHg5RjlBN0ZEQworCS5sb25nCTB4M0ZGRjAwMDAsMHhBRDU4M0VFQSwweDQyQTE0QUM4LDB4QTA1QjNGQUMKKwkubG9uZwkweDNGRkYwMDAwLDB4QUYzQjc4QUQsMHg2OTBBNDM3NCwweDFGREYyNjEwCisJLmxvbmcJMHgzRkZGMDAwMCwweEIxMjNGNTgxLDB4RDJBQzI1OTAsMHg5RjcwNUY5MAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCMzExQzQxMiwweEE5MTEyNDg4LDB4MjAxRjY3OEEKKwkubG9uZwkweDNGRkYwMDAwLDB4QjUwNEYzMzMsMHhGOURFNjQ4NCwweDFGMzJGQjEzCisJLmxvbmcJMHgzRkZGMDAwMCwweEI2RkQ5MUUzLDB4MjhEMTc3OTAsMHgyMDAzOEIzMAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCOEZCQUY0NywweDYyRkI5RUU4LDB4MjAwREMzQ0MKKwkubG9uZwkweDNGRkYwMDAwLDB4QkFGRjVBQjIsMHgxMzNFNDVGQywweDlGOEIyQUU2CisJLmxvbmcJMHgzRkZGMDAwMCwweEJEMDhBMzlGLDB4NTgwQzM2QzAsMHhBMDJCQkY3MAorCS5sb25nCTB4M0ZGRjAwMDAsMHhCRjE3OTlCNiwweDdBNzMxMDg0LDB4QTAwQkY1MTgKKwkubG9uZwkweDNGRkYwMDAwLDB4QzEyQzRDQ0EsMHg2NjcwOTQ1OCwweEEwNDFERDQxCisJLmxvbmcJMHgzRkZGMDAwMCwweEMzNDZDQ0RBLDB4MjQ5NzY0MDgsMHg5RkRGMTM3QgorCS5sb25nCTB4M0ZGRjAwMDAsMHhDNTY3MkExMSwweDU1MDZEQURDLDB4MjAxRjE1NjgKKwkubG9uZwkweDNGRkYwMDAwLDB4Qzc4RDc0QzgsMHhBQkI5QjE1QywweDFGQzEzQTJFCisJLmxvbmcJMHgzRkZGMDAwMCwweEM5QjlCRDg2LDB4NkUyRjI3QTQsMHhBMDNGOEYwMworCS5sb25nCTB4M0ZGRjAwMDAsMHhDQkVDMTRGRSwweEYyNzI3QzVDLDB4MUZGNDkwN0QKKwkubG9uZwkweDNGRkYwMDAwLDB4Q0UyNDhDMTUsMHgxRjg0ODBFNCwweDlFNkU1M0U0CisJLmxvbmcJMHgzRkZGMDAwMCwweEQwNjMzM0RBLDB4RUYyQjI1OTQsMHgxRkQ2RDQ1QworCS5sb25nCTB4M0ZGRjAwMDAsMHhEMkE4MUQ5MSwweEYxMkFFNDVDLDB4QTA3NkVEQjkKKwkubG9uZwkweDNGRkYwMDAwLDB4RDRGMzVBQUIsMHhDRkVERkEyMCwweDlGQTZERTIxCisJLmxvbmcJMHgzRkZGMDAwMCwweEQ3NDRGQ0NBLDB4RDY5RDZBRjQsMHgxRUU2OUEyRgorCS5sb25nCTB4M0ZGRjAwMDAsMHhEOTlEMTVDMiwweDc4QUZEN0I0LDB4MjA3RjQzOUYKKwkubG9uZwkweDNGRkYwMDAwLDB4REJGQkI3OTcsMHhEQUYyMzc1NCwweDIwMUVDMjA3CisJLmxvbmcJMHgzRkZGMDAwMCwweERFNjBGNDgyLDB4NUUwRTkxMjQsMHg5RThCRTE3NQorCS5sb25nCTB4M0ZGRjAwMDAsMHhFMENDREVFQywweDJBOTRFMTEwLDB4MjAwMzJDNEIKKwkubG9uZwkweDNGRkYwMDAwLDB4RTMzRjg5NzIsMHhCRThBNUE1MCwweDIwMDRERkY1CisJLmxvbmcJMHgzRkZGMDAwMCwweEU1QjkwNkU3LDB4N0M4MzQ4QTgsMHgxRTcyRjQ3QQorCS5sb25nCTB4M0ZGRjAwMDAsMHhFODM5NkE1MCwweDNDNEJEQzY4LDB4MUY3MjJGMjIKKwkubG9uZwkweDNGRkYwMDAwLDB4RUFDMEM2RTcsMHhERDI0MzkzMCwweEEwMTdFOTQ1CisJLmxvbmcJMHgzRkZGMDAwMCwweEVENEYzMDFFLDB4RDk5NDJCODQsMHgxRjQwMUE1QgorCS5sb25nCTB4M0ZGRjAwMDAsMHhFRkU0Qjk5QiwweERDREFGNUNDLDB4OUZCOUE5RTMKKwkubG9uZwkweDNGRkYwMDAwLDB4RjI4MTc3M0MsMHg1OUZGQjEzOCwweDIwNzQ0QzA1CisJLmxvbmcJMHgzRkZGMDAwMCwweEY1MjU3RDE1LDB4MjQ4NkNDMkMsMHgxRjc3M0ExOQorCS5sb25nCTB4M0ZGRjAwMDAsMHhGN0QwREY3MywweDBBRDEzQkI4LDB4MUZGRTkwRDUKKwkubG9uZwkweDNGRkYwMDAwLDB4RkE4M0IyREIsMHg3MjJBMDMzQywweEEwNDFFRDIyCisJLmxvbmcJMHgzRkZGMDAwMCwweEZEM0UwQzBDLDB4RjQ4NkMxNzQsMHgxRjg1M0YzQQorCisJLnNldAlBREpGTEFHLExfU0NSMgorCS5zZXQJU0NBTEUsRlBfU0NSMQorCS5zZXQJQURKU0NBTEUsRlBfU0NSMgorCS5zZXQJU0MsRlBfU0NSMworCS5zZXQJT05FQllTQyxGUF9TQ1I0CisKKwl8IHhyZWYJdF9mcmNpbngKKwl8eHJlZgl0X2V4dGRucm0KKwl8eHJlZgl0X3VuZmwKKwl8eHJlZgl0X292ZmwKKworCS5nbG9iYWwJc2V0b3hkCitzZXRveGQ6Cit8LS1lbnRyeSBwb2ludCBmb3IgRVhQKFgpLCBYIGlzIGRlbm9ybWFsaXplZAorCW1vdmVsCQkoJWEwKSwlZDAKKwlhbmRpbAkJIzB4ODAwMDAwMDAsJWQwCisJb3JpbAkJIzB4MDA4MDAwMDAsJWQwCQl8IC4uLnNpZ24oWCkqMl4oLTEyNikKKwltb3ZlbAkJJWQwLC0oJXNwKQorCWZtb3ZlcwkJIzB4M0Y4MDAwMDAsJWZwMAorCWZtb3ZlbAkJJWQxLCVmcGNyCisJZmFkZHMJCSglc3ApKywlZnAwCisJYnJhCQl0X2ZyY2lueAorCisJLmdsb2JhbAlzZXRveAorc2V0b3g6Cit8LS1lbnRyeSBwb2ludCBmb3IgRVhQKFgpLCBoZXJlIFggaXMgZmluaXRlLCBub24temVybywgYW5kIG5vdCBOYU4ncworCit8LS1TdGVwIDEuCisJbW92ZWwJCSglYTApLCVkMAkgfCAuLi5sb2FkIHBhcnQgb2YgaW5wdXQgWAorCWFuZGlsCQkjMHg3RkZGMDAwMCwlZDAJfCAuLi5iaWFzZWQgZXhwby4gb2YgWAorCWNtcGlsCQkjMHgzRkJFMDAwMCwlZDAJfCAuLi4yXigtNjUpCisJYmdlcwkJRVhQQzEJCXwgLi4ubm9ybWFsIGNhc2UKKwlicmEJCUVYUFNNCisKK0VYUEMxOgorfC0tVGhlIGNhc2UgfFh8ID49IDJeKC02NSkKKwltb3ZldwkJNCglYTApLCVkMAl8IC4uLmV4cG8uIGFuZCBwYXJ0aWFsIHNpZy4gb2YgfFh8CisJY21waWwJCSMweDQwMENCMTY3LCVkMAl8IC4uLjE2MzgwIGxvZzIgdHJ1bmMuIDE2IGJpdHMKKwlibHRzCQlFWFBNQUlOCSB8IC4uLm5vcm1hbCBjYXNlCisJYnJhCQlFWFBCSUcKKworRVhQTUFJTjoKK3wtLVN0ZXAgMi4KK3wtLVRoaXMgaXMgdGhlIG5vcm1hbCBicmFuY2g6CTJeKC02NSkgPD0gfFh8IDwgMTYzODAgbG9nMi4KKwlmbW92ZXgJCSglYTApLCVmcDAJfCAuLi5sb2FkIGlucHV0IGZyb20gKGEwKQorCisJZm1vdmV4CQklZnAwLCVmcDEKKwlmbXVscwkJIzB4NDJCOEFBM0IsJWZwMAl8IC4uLjY0L2xvZzIgKiBYCisJZm1vdmVteAklZnAyLSVmcDIvJWZwMywtKCVhNykJCXwgLi4uc2F2ZSBmcDIKKwltb3ZlbAkJIzAsQURKRkxBRyglYTYpCisJZm1vdmVsCQklZnAwLCVkMAkJfCAuLi5OID0gaW50KCBYICogNjQvbG9nMiApCisJbGVhCQlFWFBUQkwsJWExCisJZm1vdmVsCQklZDAsJWZwMAkJfCAuLi5jb252ZXJ0IHRvIGZsb2F0aW5nLWZvcm1hdAorCisJbW92ZWwJCSVkMCxMX1NDUjEoJWE2KQl8IC4uLnNhdmUgTiB0ZW1wb3JhcmlseQorCWFuZGlsCQkjMHgzRiwlZDAJCXwgLi4uRDAgaXMgSiA9IE4gbW9kIDY0CisJbHNsbAkJIzQsJWQwCisJYWRkYWwJCSVkMCwlYTEJCXwgLi4uYWRkcmVzcyBvZiAyXihKLzY0KQorCW1vdmVsCQlMX1NDUjEoJWE2KSwlZDAKKwlhc3JsCQkjNiwlZDAJCXwgLi4uRDAgaXMgTQorCWFkZGl3CQkjMHgzRkZGLCVkMAl8IC4uLmJpYXNlZCBleHBvLiBvZiAyXihNKQorCW1vdmV3CQlMMixMX1NDUjEoJWE2KQl8IC4uLnByZWZldGNoIEwyLCBubyBuZWVkIGluIENCCisKK0VYUENPTlQxOgorfC0tU3RlcCAzLgorfC0tZnAxLGZwMiBzYXZlZCBvbiB0aGUgc3RhY2suIGZwMCBpcyBOLCBmcDEgaXMgWCwKK3wtLWEwIHBvaW50cyB0byAyXihKLzY0KSwgRDAgaXMgYmlhc2VkIGV4cG8uIG9mIDJeKE0pCisJZm1vdmV4CQklZnAwLCVmcDIKKwlmbXVscwkJIzB4QkMzMTcyMTgsJWZwMAl8IC4uLk4gKiBMMSwgTDEgPSBsZWFkKC1sb2cyLzY0KQorCWZtdWx4CQlMMiwlZnAyCQl8IC4uLk4gKiBMMiwgTDErTDIgPSAtbG9nMi82NAorCWZhZGR4CQklZnAxLCVmcDAJCXwgLi4uWCArIE4qTDEKKwlmYWRkeAkJJWZwMiwlZnAwCQl8IC4uLmZwMCBpcyBSLCByZWR1Y2VkIGFyZy4KK3wJTU9WRS5XCQkjJDNGQTUsRVhQQTMJLi4ubG9hZCBFWFBBMyBpbiBjYWNoZQorCit8LS1TdGVwIDQuCit8LS1XRSBOT1cgQ09NUFVURSBFWFAoUiktMSBCWSBBIFBPTFlOT01JQUwKK3wtLSBSICsgUipSKihBMSArIFIqKEEyICsgUiooQTMgKyBSKihBNCArIFIqQTUpKSkpCit8LS1UTyBGVUxMWSBVVElMSVpFIFRIRSBQSVBFTElORSwgV0UgQ09NUFVURSBTID0gUipSCit8LS1bUitSKlMqKEEyK1MqQTQpXSArIFtTKihBMStTKihBMytTKkE1KSldCisKKwlmbW92ZXgJCSVmcDAsJWZwMQorCWZtdWx4CQklZnAxLCVmcDEJCXwgLi4uZnAxIElTIFMgPSBSKlIKKworCWZtb3ZlcwkJIzB4M0FCNjBCNzAsJWZwMgl8IC4uLmZwMiBJUyBBNQorfAlNT1ZFLlcJCSMwLDIoJWExKQkuLi5sb2FkIDJeKEovNjQpIGluIGNhY2hlCisKKwlmbXVseAkJJWZwMSwlZnAyCQl8IC4uLmZwMiBJUyBTKkE1CisJZm1vdmV4CQklZnAxLCVmcDMKKwlmbXVscwkJIzB4M0MwODg4OTUsJWZwMwl8IC4uLmZwMyBJUyBTKkE0CisKKwlmYWRkZAkJRVhQQTMsJWZwMgl8IC4uLmZwMiBJUyBBMytTKkE1CisJZmFkZGQJCUVYUEEyLCVmcDMJfCAuLi5mcDMgSVMgQTIrUypBNAorCisJZm11bHgJCSVmcDEsJWZwMgkJfCAuLi5mcDIgSVMgUyooQTMrUypBNSkKKwltb3ZldwkJJWQwLFNDQUxFKCVhNikJfCAuLi5TQ0FMRSBpcyAyXihNKSBpbiBleHRlbmRlZAorCWNscncJCVNDQUxFKzIoJWE2KQorCW1vdmVsCQkjMHg4MDAwMDAwMCxTQ0FMRSs0KCVhNikKKwljbHJsCQlTQ0FMRSs4KCVhNikKKworCWZtdWx4CQklZnAxLCVmcDMJCXwgLi4uZnAzIElTIFMqKEEyK1MqQTQpCisKKwlmYWRkcwkJIzB4M0YwMDAwMDAsJWZwMgl8IC4uLmZwMiBJUyBBMStTKihBMytTKkE1KQorCWZtdWx4CQklZnAwLCVmcDMJCXwgLi4uZnAzIElTIFIqUyooQTIrUypBNCkKKworCWZtdWx4CQklZnAxLCVmcDIJCXwgLi4uZnAyIElTIFMqKEExK1MqKEEzK1MqQTUpKQorCWZhZGR4CQklZnAzLCVmcDAJCXwgLi4uZnAwIElTIFIrUipTKihBMitTKkE0KSwKK3wJCQkJCS4uLmZwMyByZWxlYXNlZAorCisJZm1vdmV4CQkoJWExKSssJWZwMQl8IC4uLmZwMSBpcyBsZWFkLiBwdC4gb2YgMl4oSi82NCkKKwlmYWRkeAkJJWZwMiwlZnAwCQl8IC4uLmZwMCBpcyBFWFAoUikgLSAxCit8CQkJCQkuLi5mcDIgcmVsZWFzZWQKKworfC0tU3RlcCA1Cit8LS1maW5hbCByZWNvbnN0cnVjdGlvbiBwcm9jZXNzCit8LS1FWFAoWCkgPSAyXk0gKiAoIDJeKEovNjQpICsgMl4oSi82NCkqKEVYUChSKS0xKSApCisKKwlmbXVseAkJJWZwMSwlZnAwCQl8IC4uLjJeKEovNjQpKihFeHAoUiktMSkKKwlmbW92ZW14CSglYTcpKywlZnAyLSVmcDIvJWZwMwl8IC4uLmZwMiByZXN0b3JlZAorCWZhZGRzCQkoJWExKSwlZnAwCXwgLi4uYWNjdXJhdGUgMl4oSi82NCkKKworCWZhZGR4CQklZnAxLCVmcDAJCXwgLi4uMl4oSi82NCkgKyAyXihKLzY0KSouLi4KKwltb3ZlbAkJQURKRkxBRyglYTYpLCVkMAorCit8LS1TdGVwIDYKKwl0c3RsCQklZDAKKwliZXFzCQlOT1JNQUwKK0FESlVTVDoKKwlmbXVseAkJQURKU0NBTEUoJWE2KSwlZnAwCitOT1JNQUw6CisJZm1vdmVsCQklZDEsJUZQQ1IJCXwgLi4ucmVzdG9yZSB1c2VyIEZQQ1IKKwlmbXVseAkJU0NBTEUoJWE2KSwlZnAwCXwgLi4ubXVsdGlwbHkgMl4oTSkKKwlicmEJCXRfZnJjaW54CisKK0VYUFNNOgorfC0tU3RlcCA3CisJZm1vdmVteAkoJWEwKSwlZnAwLSVmcDAJfCAuLi5pbiBjYXNlIFggaXMgZGVub3JtYWxpemVkCisJZm1vdmVsCQklZDEsJUZQQ1IKKwlmYWRkcwkJIzB4M0Y4MDAwMDAsJWZwMAl8IC4uLjErWCBpbiB1c2VyIG1vZGUKKwlicmEJCXRfZnJjaW54CisKK0VYUEJJRzoKK3wtLVN0ZXAgOAorCWNtcGlsCQkjMHg0MDBDQjI3QywlZDAJfCAuLi4xNjQ4MCBsb2cyCisJYmd0cwkJRVhQMkJJRworfC0tU3RlcHMgOC4yIC0tIDguNgorCWZtb3ZleAkJKCVhMCksJWZwMAl8IC4uLmxvYWQgaW5wdXQgZnJvbSAoYTApCisKKwlmbW92ZXgJCSVmcDAsJWZwMQorCWZtdWxzCQkjMHg0MkI4QUEzQiwlZnAwCXwgLi4uNjQvbG9nMiAqIFgKKwlmbW92ZW14CSAlZnAyLSVmcDIvJWZwMywtKCVhNykJCXwgLi4uc2F2ZSBmcDIKKwltb3ZlbAkJIzEsQURKRkxBRyglYTYpCisJZm1vdmVsCQklZnAwLCVkMAkJfCAuLi5OID0gaW50KCBYICogNjQvbG9nMiApCisJbGVhCQlFWFBUQkwsJWExCisJZm1vdmVsCQklZDAsJWZwMAkJfCAuLi5jb252ZXJ0IHRvIGZsb2F0aW5nLWZvcm1hdAorCW1vdmVsCQklZDAsTF9TQ1IxKCVhNikJCQl8IC4uLnNhdmUgTiB0ZW1wb3JhcmlseQorCWFuZGlsCQkjMHgzRiwlZDAJCSB8IC4uLkQwIGlzIEogPSBOIG1vZCA2NAorCWxzbGwJCSM0LCVkMAorCWFkZGFsCQklZDAsJWExCQkJfCAuLi5hZGRyZXNzIG9mIDJeKEovNjQpCisJbW92ZWwJCUxfU0NSMSglYTYpLCVkMAorCWFzcmwJCSM2LCVkMAkJCXwgLi4uRDAgaXMgSworCW1vdmVsCQklZDAsTF9TQ1IxKCVhNikJCQl8IC4uLnNhdmUgSyB0ZW1wb3JhcmlseQorCWFzcmwJCSMxLCVkMAkJCXwgLi4uRDAgaXMgTTEKKwlzdWJsCQklZDAsTF9TQ1IxKCVhNikJCQl8IC4uLmExIGlzIE0KKwlhZGRpdwkJIzB4M0ZGRiwlZDAJCXwgLi4uYmlhc2VkIGV4cG8uIG9mIDJeKE0xKQorCW1vdmV3CQklZDAsQURKU0NBTEUoJWE2KQkJfCAuLi5BREpTQ0FMRSA6PSAyXihNMSkKKwljbHJ3CQlBREpTQ0FMRSsyKCVhNikKKwltb3ZlbAkJIzB4ODAwMDAwMDAsQURKU0NBTEUrNCglYTYpCisJY2xybAkJQURKU0NBTEUrOCglYTYpCisJbW92ZWwJCUxfU0NSMSglYTYpLCVkMAkJCXwgLi4uRDAgaXMgTQorCWFkZGl3CQkjMHgzRkZGLCVkMAkJfCAuLi5iaWFzZWQgZXhwby4gb2YgMl4oTSkKKwlicmEJCUVYUENPTlQxCQl8IC4uLmdvIGJhY2sgdG8gU3RlcCAzCisKK0VYUDJCSUc6Cit8LS1TdGVwIDkKKwlmbW92ZWwJCSVkMSwlRlBDUgorCW1vdmVsCQkoJWEwKSwlZDAKKwliY2xyYgkJI3NpZ25fYml0LCglYTApCQl8IC4uLnNldG94IGFsd2F5cyByZXR1cm5zIHBvc2l0aXZlCisJY21waWwJCSMwLCVkMAorCWJsdAkJdF91bmZsCisJYnJhCQl0X292ZmwKKworCS5nbG9iYWwJc2V0b3htMWQKK3NldG94bTFkOgorfC0tZW50cnkgcG9pbnQgZm9yIEVYUE0xKFgpLCBoZXJlIFggaXMgZGVub3JtYWxpemVkCit8LS1TdGVwIDAuCisJYnJhCQl0X2V4dGRucm0KKworCisJLmdsb2JhbAlzZXRveG0xCitzZXRveG0xOgorfC0tZW50cnkgcG9pbnQgZm9yIEVYUE0xKFgpLCBoZXJlIFggaXMgZmluaXRlLCBub24temVybywgbm9uLU5hTgorCit8LS1TdGVwIDEuCit8LS1TdGVwIDEuMQorCW1vdmVsCQkoJWEwKSwlZDAJIHwgLi4ubG9hZCBwYXJ0IG9mIGlucHV0IFgKKwlhbmRpbAkJIzB4N0ZGRjAwMDAsJWQwCXwgLi4uYmlhc2VkIGV4cG8uIG9mIFgKKwljbXBpbAkJIzB4M0ZGRDAwMDAsJWQwCXwgLi4uMS80CisJYmdlcwkJRU0xQ09OMQkgfCAuLi58WHwgPj0gMS80CisJYnJhCQlFTTFTTQorCitFTTFDT04xOgorfC0tU3RlcCAxLjMKK3wtLVRoZSBjYXNlIHxYfCA+PSAxLzQKKwltb3ZldwkJNCglYTApLCVkMAl8IC4uLmV4cG8uIGFuZCBwYXJ0aWFsIHNpZy4gb2YgfFh8CisJY21waWwJCSMweDQwMDRDMjE1LCVkMAl8IC4uLjcwbG9nMiByb3VuZGVkIHVwIHRvIDE2IGJpdHMKKwlibGVzCQlFTTFNQUlOCSB8IC4uLjEvNCA8PSB8WHwgPD0gNzBsb2cyCisJYnJhCQlFTTFCSUcKKworRU0xTUFJTjoKK3wtLVN0ZXAgMi4KK3wtLVRoaXMgaXMgdGhlIGNhc2U6CTEvNCA8PSB8WHwgPD0gNzAgbG9nMi4KKwlmbW92ZXgJCSglYTApLCVmcDAJfCAuLi5sb2FkIGlucHV0IGZyb20gKGEwKQorCisJZm1vdmV4CQklZnAwLCVmcDEKKwlmbXVscwkJIzB4NDJCOEFBM0IsJWZwMAl8IC4uLjY0L2xvZzIgKiBYCisJZm1vdmVteAklZnAyLSVmcDIvJWZwMywtKCVhNykJCXwgLi4uc2F2ZSBmcDIKK3wJTU9WRS5XCQkjJDNGODEsRU0xQTQJCS4uLnByZWZldGNoIGluIENCIG1vZGUKKwlmbW92ZWwJCSVmcDAsJWQwCQl8IC4uLk4gPSBpbnQoIFggKiA2NC9sb2cyICkKKwlsZWEJCUVYUFRCTCwlYTEKKwlmbW92ZWwJCSVkMCwlZnAwCQl8IC4uLmNvbnZlcnQgdG8gZmxvYXRpbmctZm9ybWF0CisKKwltb3ZlbAkJJWQwLExfU0NSMSglYTYpCQkJfCAuLi5zYXZlIE4gdGVtcG9yYXJpbHkKKwlhbmRpbAkJIzB4M0YsJWQwCQkgfCAuLi5EMCBpcyBKID0gTiBtb2QgNjQKKwlsc2xsCQkjNCwlZDAKKwlhZGRhbAkJJWQwLCVhMQkJCXwgLi4uYWRkcmVzcyBvZiAyXihKLzY0KQorCW1vdmVsCQlMX1NDUjEoJWE2KSwlZDAKKwlhc3JsCQkjNiwlZDAJCQl8IC4uLkQwIGlzIE0KKwltb3ZlbAkJJWQwLExfU0NSMSglYTYpCQkJfCAuLi5zYXZlIGEgY29weSBvZiBNCit8CU1PVkUuVwkJIyQzRkRDLEwyCQkuLi5wcmVmZXRjaCBMMiBpbiBDQiBtb2RlCisKK3wtLVN0ZXAgMy4KK3wtLWZwMSxmcDIgc2F2ZWQgb24gdGhlIHN0YWNrLiBmcDAgaXMgTiwgZnAxIGlzIFgsCit8LS1hMCBwb2ludHMgdG8gMl4oSi82NCksIEQwIGFuZCBhMSBib3RoIGNvbnRhaW4gTQorCWZtb3ZleAkJJWZwMCwlZnAyCisJZm11bHMJCSMweEJDMzE3MjE4LCVmcDAJfCAuLi5OICogTDEsIEwxID0gbGVhZCgtbG9nMi82NCkKKwlmbXVseAkJTDIsJWZwMgkJfCAuLi5OICogTDIsIEwxK0wyID0gLWxvZzIvNjQKKwlmYWRkeAkJJWZwMSwlZnAwCSB8IC4uLlggKyBOKkwxCisJZmFkZHgJCSVmcDIsJWZwMAkgfCAuLi5mcDAgaXMgUiwgcmVkdWNlZCBhcmcuCit8CU1PVkUuVwkJIyQzRkM1LEVNMUEyCQkuLi5sb2FkIEVNMUEyIGluIGNhY2hlCisJYWRkaXcJCSMweDNGRkYsJWQwCQl8IC4uLkQwIGlzIGJpYXNlZCBleHBvLiBvZiAyXk0KKworfC0tU3RlcCA0LgorfC0tV0UgTk9XIENPTVBVVEUgRVhQKFIpLTEgQlkgQSBQT0xZTk9NSUFMCit8LS0gUiArIFIqUiooQTEgKyBSKihBMiArIFIqKEEzICsgUiooQTQgKyBSKihBNSArIFIqQTYpKSkpKQorfC0tVE8gRlVMTFkgVVRJTElaRSBUSEUgUElQRUxJTkUsIFdFIENPTVBVVEUgUyA9IFIqUgorfC0tW1IqUyooQTIrUyooQTQrUypBNikpXSArIFtSK1MqKEExK1MqKEEzK1MqQTUpKV0KKworCWZtb3ZleAkJJWZwMCwlZnAxCisJZm11bHgJCSVmcDEsJWZwMQkJfCAuLi5mcDEgSVMgUyA9IFIqUgorCisJZm1vdmVzCQkjMHgzOTUwMDk3QiwlZnAyCXwgLi4uZnAyIElTIGE2Cit8CU1PVkUuVwkJIzAsMiglYTEpCS4uLmxvYWQgMl4oSi82NCkgaW4gY2FjaGUKKworCWZtdWx4CQklZnAxLCVmcDIJCXwgLi4uZnAyIElTIFMqQTYKKwlmbW92ZXgJCSVmcDEsJWZwMworCWZtdWxzCQkjMHgzQUI2MEI2QSwlZnAzCXwgLi4uZnAzIElTIFMqQTUKKworCWZhZGRkCQlFTTFBNCwlZnAyCXwgLi4uZnAyIElTIEE0K1MqQTYKKwlmYWRkZAkJRU0xQTMsJWZwMwl8IC4uLmZwMyBJUyBBMytTKkE1CisJbW92ZXcJCSVkMCxTQyglYTYpCQl8IC4uLlNDIGlzIDJeKE0pIGluIGV4dGVuZGVkCisJY2xydwkJU0MrMiglYTYpCisJbW92ZWwJCSMweDgwMDAwMDAwLFNDKzQoJWE2KQorCWNscmwJCVNDKzgoJWE2KQorCisJZm11bHgJCSVmcDEsJWZwMgkJfCAuLi5mcDIgSVMgUyooQTQrUypBNikKKwltb3ZlbAkJTF9TQ1IxKCVhNiksJWQwCQl8IC4uLkQwIGlzCU0KKwluZWd3CQklZDAJCXwgLi4uRDAgaXMgLU0KKwlmbXVseAkJJWZwMSwlZnAzCQl8IC4uLmZwMyBJUyBTKihBMytTKkE1KQorCWFkZGl3CQkjMHgzRkZGLCVkMAl8IC4uLmJpYXNlZCBleHBvLiBvZiAyXigtTSkKKwlmYWRkZAkJRU0xQTIsJWZwMgl8IC4uLmZwMiBJUyBBMitTKihBNCtTKkE2KQorCWZhZGRzCQkjMHgzRjAwMDAwMCwlZnAzCXwgLi4uZnAzIElTIEExK1MqKEEzK1MqQTUpCisKKwlmbXVseAkJJWZwMSwlZnAyCQl8IC4uLmZwMiBJUyBTKihBMitTKihBNCtTKkE2KSkKKwlvcml3CQkjMHg4MDAwLCVkMAl8IC4uLnNpZ25lZC9leHBvLiBvZiAtMl4oLU0pCisJbW92ZXcJCSVkMCxPTkVCWVNDKCVhNikJfCAuLi5PbmVieVNjIGlzIC0yXigtTSkKKwljbHJ3CQlPTkVCWVNDKzIoJWE2KQorCW1vdmVsCQkjMHg4MDAwMDAwMCxPTkVCWVNDKzQoJWE2KQorCWNscmwJCU9ORUJZU0MrOCglYTYpCisJZm11bHgJCSVmcDMsJWZwMQkJfCAuLi5mcDEgSVMgUyooQTErUyooQTMrUypBNSkpCit8CQkJCQkuLi5mcDMgcmVsZWFzZWQKKworCWZtdWx4CQklZnAwLCVmcDIJCXwgLi4uZnAyIElTIFIqUyooQTIrUyooQTQrUypBNikpCisJZmFkZHgJCSVmcDEsJWZwMAkJfCAuLi5mcDAgSVMgUitTKihBMStTKihBMytTKkE1KSkKK3wJCQkJCS4uLmZwMSByZWxlYXNlZAorCisJZmFkZHgJCSVmcDIsJWZwMAkJfCAuLi5mcDAgSVMgRVhQKFIpLTEKK3wJCQkJCS4uLmZwMiByZWxlYXNlZAorCWZtb3ZlbXgJKCVhNykrLCVmcDItJWZwMi8lZnAzCXwgLi4uZnAyIHJlc3RvcmVkCisKK3wtLVN0ZXAgNQorfC0tQ29tcHV0ZSAyXihKLzY0KSpwCisKKwlmbXVseAkJKCVhMSksJWZwMAl8IC4uLjJeKEovNjQpKihFeHAoUiktMSkKKworfC0tU3RlcCA2Cit8LS1TdGVwIDYuMQorCW1vdmVsCQlMX1NDUjEoJWE2KSwlZDAJCXwgLi4ucmV0cmlldmUgTQorCWNtcGlsCQkjNjMsJWQwCisJYmxlcwkJTUxFNjMKK3wtLVN0ZXAgNi4yCU0gPj0gNjQKKwlmbW92ZXMJCTEyKCVhMSksJWZwMQl8IC4uLmZwMSBpcyB0CisJZmFkZHgJCU9ORUJZU0MoJWE2KSwlZnAxCXwgLi4uZnAxIGlzIHQrT25lYnlTYworCWZhZGR4CQklZnAxLCVmcDAJCXwgLi4ucCsodCtPbmVieVNjKSwgZnAxIHJlbGVhc2VkCisJZmFkZHgJCSglYTEpLCVmcDAJfCAuLi5UKyhwKyh0K09uZWJ5U2MpKQorCWJyYXMJCUVNMVNDQUxFCitNTEU2MzoKK3wtLVN0ZXAgNi4zCU0gPD0gNjMKKwljbXBpbAkJIy0zLCVkMAorCWJnZXMJCU1HRU4zCitNTFROMzoKK3wtLVN0ZXAgNi40CU0gPD0gLTQKKwlmYWRkcwkJMTIoJWExKSwlZnAwCXwgLi4ucCt0CisJZmFkZHgJCSglYTEpLCVmcDAJfCAuLi5UKyhwK3QpCisJZmFkZHgJCU9ORUJZU0MoJWE2KSwlZnAwCXwgLi4uT25lYnlTYyArIChUKyhwK3QpKQorCWJyYXMJCUVNMVNDQUxFCitNR0VOMzoKK3wtLVN0ZXAgNi41CS0zIDw9IE0gPD0gNjMKKwlmbW92ZXgJCSglYTEpKywlZnAxCXwgLi4uZnAxIGlzIFQKKwlmYWRkcwkJKCVhMSksJWZwMAl8IC4uLmZwMCBpcyBwK3QKKwlmYWRkeAkJT05FQllTQyglYTYpLCVmcDEJfCAuLi5mcDEgaXMgVCtPbmVieVNjCisJZmFkZHgJCSVmcDEsJWZwMAkJfCAuLi4oVCtPbmVieVNjKSsocCt0KQorCitFTTFTQ0FMRToKK3wtLVN0ZXAgNi42CisJZm1vdmVsCQklZDEsJUZQQ1IKKwlmbXVseAkJU0MoJWE2KSwlZnAwCisKKwlicmEJCXRfZnJjaW54CisKK0VNMVNNOgorfC0tU3RlcCA3CXxYfCA8IDEvNC4KKwljbXBpbAkJIzB4M0ZCRTAwMDAsJWQwCXwgLi4uMl4oLTY1KQorCWJnZXMJCUVNMVBPTFkKKworRU0xVElOWToKK3wtLVN0ZXAgOAl8WHwgPCAyXigtNjUpCisJY21waWwJCSMweDAwMzMwMDAwLCVkMAl8IC4uLjJeKC0xNjMxMikKKwlibHRzCQlFTTEyVElOWQorfC0tU3RlcCA4LjIKKwltb3ZlbAkJIzB4ODAwMTAwMDAsU0MoJWE2KQl8IC4uLlNDIGlzIC0yXigtMTYzODIpCisJbW92ZWwJCSMweDgwMDAwMDAwLFNDKzQoJWE2KQorCWNscmwJCVNDKzgoJWE2KQorCWZtb3ZleAkJKCVhMCksJWZwMAorCWZtb3ZlbAkJJWQxLCVGUENSCisJZmFkZHgJCVNDKCVhNiksJWZwMAorCisJYnJhCQl0X2ZyY2lueAorCitFTTEyVElOWToKK3wtLVN0ZXAgOC4zCisJZm1vdmV4CQkoJWEwKSwlZnAwCisJZm11bGQJCVRXTzE0MCwlZnAwCisJbW92ZWwJCSMweDgwMDEwMDAwLFNDKCVhNikKKwltb3ZlbAkJIzB4ODAwMDAwMDAsU0MrNCglYTYpCisJY2xybAkJU0MrOCglYTYpCisJZmFkZHgJCVNDKCVhNiksJWZwMAorCWZtb3ZlbAkJJWQxLCVGUENSCisJZm11bGQJCVRXT04xNDAsJWZwMAorCisJYnJhCQl0X2ZyY2lueAorCitFTTFQT0xZOgorfC0tU3RlcCA5CWV4cChYKS0xIGJ5IGEgc2ltcGxlIHBvbHlub21pYWwKKwlmbW92ZXgJCSglYTApLCVmcDAJfCAuLi5mcDAgaXMgWAorCWZtdWx4CQklZnAwLCVmcDAJCXwgLi4uZnAwIGlzIFMgOj0gWCpYCisJZm1vdmVteAklZnAyLSVmcDIvJWZwMywtKCVhNykJfCAuLi5zYXZlIGZwMgorCWZtb3ZlcwkJIzB4MkYzMENBQTgsJWZwMQl8IC4uLmZwMSBpcyBCMTIKKwlmbXVseAkJJWZwMCwlZnAxCQl8IC4uLmZwMSBpcyBTKkIxMgorCWZtb3ZlcwkJIzB4MzEwRjgyOTAsJWZwMgl8IC4uLmZwMiBpcyBCMTEKKwlmYWRkcwkJIzB4MzJENzMyMjAsJWZwMQl8IC4uLmZwMSBpcyBCMTArUypCMTIKKworCWZtdWx4CQklZnAwLCVmcDIJCXwgLi4uZnAyIGlzIFMqQjExCisJZm11bHgJCSVmcDAsJWZwMQkJfCAuLi5mcDEgaXMgUyooQjEwICsgLi4uCisKKwlmYWRkcwkJIzB4MzQ5M0YyODEsJWZwMgl8IC4uLmZwMiBpcyBCOStTKi4uLgorCWZhZGRkCQlFTTFCOCwlZnAxCXwgLi4uZnAxIGlzIEI4K1MqLi4uCisKKwlmbXVseAkJJWZwMCwlZnAyCQl8IC4uLmZwMiBpcyBTKihCOSsuLi4KKwlmbXVseAkJJWZwMCwlZnAxCQl8IC4uLmZwMSBpcyBTKihCOCsuLi4KKworCWZhZGRkCQlFTTFCNywlZnAyCXwgLi4uZnAyIGlzIEI3K1MqLi4uCisJZmFkZGQJCUVNMUI2LCVmcDEJfCAuLi5mcDEgaXMgQjYrUyouLi4KKworCWZtdWx4CQklZnAwLCVmcDIJCXwgLi4uZnAyIGlzIFMqKEI3Ky4uLgorCWZtdWx4CQklZnAwLCVmcDEJCXwgLi4uZnAxIGlzIFMqKEI2Ky4uLgorCisJZmFkZGQJCUVNMUI1LCVmcDIJfCAuLi5mcDIgaXMgQjUrUyouLi4KKwlmYWRkZAkJRU0xQjQsJWZwMQl8IC4uLmZwMSBpcyBCNCtTKi4uLgorCisJZm11bHgJCSVmcDAsJWZwMgkJfCAuLi5mcDIgaXMgUyooQjUrLi4uCisJZm11bHgJCSVmcDAsJWZwMQkJfCAuLi5mcDEgaXMgUyooQjQrLi4uCisKKwlmYWRkZAkJRU0xQjMsJWZwMgl8IC4uLmZwMiBpcyBCMytTKi4uLgorCWZhZGR4CQlFTTFCMiwlZnAxCXwgLi4uZnAxIGlzIEIyK1MqLi4uCisKKwlmbXVseAkJJWZwMCwlZnAyCQl8IC4uLmZwMiBpcyBTKihCMysuLi4KKwlmbXVseAkJJWZwMCwlZnAxCQl8IC4uLmZwMSBpcyBTKihCMisuLi4KKworCWZtdWx4CQklZnAwLCVmcDIJCXwgLi4uZnAyIGlzIFMqUyooQjMrLi4uKQorCWZtdWx4CQkoJWEwKSwlZnAxCXwgLi4uZnAxIGlzIFgqUyooQjIuLi4KKworCWZtdWxzCQkjMHgzRjAwMDAwMCwlZnAwCXwgLi4uZnAwIGlzIFMqQjEKKwlmYWRkeAkJJWZwMiwlZnAxCQl8IC4uLmZwMSBpcyBRCit8CQkJCQkuLi5mcDIgcmVsZWFzZWQKKworCWZtb3ZlbXgJKCVhNykrLCVmcDItJWZwMi8lZnAzCXwgLi4uZnAyIHJlc3RvcmVkCisKKwlmYWRkeAkJJWZwMSwlZnAwCQl8IC4uLmZwMCBpcyBTKkIxK1EKK3wJCQkJCS4uLmZwMSByZWxlYXNlZAorCisJZm1vdmVsCQklZDEsJUZQQ1IKKwlmYWRkeAkJKCVhMCksJWZwMAorCisJYnJhCQl0X2ZyY2lueAorCitFTTFCSUc6Cit8LS1TdGVwIDEwCXxYfCA+IDcwIGxvZzIKKwltb3ZlbAkJKCVhMCksJWQwCisJY21waWwJCSMwLCVkMAorCWJndAkJRVhQQzEKK3wtLVN0ZXAgMTAuMgorCWZtb3ZlcwkJIzB4QkY4MDAwMDAsJWZwMAl8IC4uLmZwMCBpcyAtMQorCWZtb3ZlbAkJJWQxLCVGUENSCisJZmFkZHMJCSMweDAwODAwMDAwLCVmcDAJfCAuLi4tMSArIDJeKC0xMjYpCisKKwlicmEJCXRfZnJjaW54CisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9zZ2V0ZW0uUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NnZXRlbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmY2JkMDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC9zZ2V0ZW0uUwpAQCAtMCwwICsxLDE0MSBAQAorfAorfAlzZ2V0ZW0uc2EgMy4xIDEyLzEwLzkwCit8Cit8CVRoZSBlbnRyeSBwb2ludCBzR0VURVhQIHJldHVybnMgdGhlIGV4cG9uZW50IHBvcnRpb24KK3wJb2YgdGhlIGlucHV0IGFyZ3VtZW50LiAgVGhlIGV4cG9uZW50IGJpYXMgaXMgcmVtb3ZlZAorfAlhbmQgdGhlIGV4cG9uZW50IHZhbHVlIGlzIHJldHVybmVkIGFzIGFuIGV4dGVuZGVkCit8CXByZWNpc2lvbiBudW1iZXIgaW4gZnAwLiAgc0dFVEVYUEQgaGFuZGxlcyBkZW5vcm1hbGl6ZWQKK3wJbnVtYmVycy4KK3wKK3wJVGhlIGVudHJ5IHBvaW50IHNHRVRNQU4gZXh0cmFjdHMgdGhlIG1hbnRpc3NhIG9mIHRoZQorfAlpbnB1dCBhcmd1bWVudC4gIFRoZSBtYW50aXNzYSBpcyBjb252ZXJ0ZWQgdG8gYW4KK3wJZXh0ZW5kZWQgcHJlY2lzaW9uIG51bWJlciBhbmQgcmV0dXJuZWQgaW4gZnAwLiAgVGhlCit8CXJhbmdlIG9mIHRoZSByZXN1bHQgaXMgWzEuMCAtIDIuMCkuCit8Cit8Cit8CUlucHV0OiAgRG91YmxlLWV4dGVuZGVkIG51bWJlciBYIGluIHRoZSBFVEVNUCBzcGFjZSBpbgorfAkJdGhlIGZsb2F0aW5nLXBvaW50IHNhdmUgc3RhY2suCit8Cit8CU91dHB1dDoJVGhlIGZ1bmN0aW9ucyByZXR1cm4gZXhwKFgpIG9yIG1hbihYKSBpbiBmcDAuCit8Cit8CU1vZGlmaWVkOiBmcDAuCit8Cit8Cit8CQlDb3B5cmlnaHQgKEMpIE1vdG9yb2xhLCBJbmMuIDE5OTAKK3wJCQlBbGwgUmlnaHRzIFJlc2VydmVkCit8Cit8CVRISVMgSVMgVU5QVUJMSVNIRUQgUFJPUFJJRVRBUlkgU09VUkNFIENPREUgT0YgTU9UT1JPTEEKK3wJVGhlIGNvcHlyaWdodCBub3RpY2UgYWJvdmUgZG9lcyBub3QgZXZpZGVuY2UgYW55Cit8CWFjdHVhbCBvciBpbnRlbmRlZCBwdWJsaWNhdGlvbiBvZiBzdWNoIHNvdXJjZSBjb2RlLgorCit8U0dFVEVNCWlkbnQJMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uIDgKKworI2luY2x1ZGUgImZwc3AuaCIKKworCXx4cmVmCW5ybV9zZXQKKworfAorfCBUaGlzIGVudHJ5IHBvaW50IGlzIHVzZWQgYnkgdGhlIHVuaW1wbGVtZW50ZWQgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9uCit8IGhhbmRsZXIuICBJdCBwb2ludHMgYTAgdG8gdGhlIGlucHV0IG9wZXJhbmQuCit8Cit8Cit8Cit8CVNHRVRFWFAKK3wKKworCS5nbG9iYWwJc2dldGV4cAorc2dldGV4cDoKKwltb3ZldwlMT0NBTF9FWCglYTApLCVkMAl8Z2V0IHRoZSBleHBvbmVudAorCWJjbHJsCSMxNSwlZDAJCXxjbGVhciB0aGUgc2lnbiBiaXQKKwlzdWJ3CSMweDNmZmYsJWQwCXxzdWJ0cmFjdCBvZmYgdGhlIGJpYXMKKwlmbW92ZXcgICVkMCwlZnAwCQl8bW92ZSB0aGUgZXhwIHRvIGZwMAorCXJ0cworCisJLmdsb2JhbAlzZ2V0ZXhwZAorc2dldGV4cGQ6CisJYmNscmIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKKwlic3IJbnJtX3NldAkJfG5vcm1hbGl6ZSAoZXhwIHdpbGwgZ28gbmVnYXRpdmUpCisJbW92ZXcJTE9DQUxfRVgoJWEwKSwlZDAJfGxvYWQgcmVzdWx0aW5nIGV4cG9uZW50IGludG8gZDAKKwlzdWJ3CSMweDNmZmYsJWQwCXxzdWJ0cmFjdCBvZmYgdGhlIGJpYXMKKwlmbW92ZXcJJWQwLCVmcDAJCXxtb3ZlIHRoZSBleHAgdG8gZnAwCisJcnRzCit8Cit8Cit8IFRoaXMgZW50cnkgcG9pbnQgaXMgdXNlZCBieSB0aGUgdW5pbXBsZW1lbnRlZCBpbnN0cnVjdGlvbiBleGNlcHRpb24KK3wgaGFuZGxlci4gIEl0IHBvaW50cyBhMCB0byB0aGUgaW5wdXQgb3BlcmFuZC4KK3wKK3wKK3wKK3wJU0dFVE1BTgorfAorfAorfCBGb3Igbm9ybWFsaXplZCBudW1iZXJzLCBsZWF2ZSB0aGUgbWFudGlzc2EgYWxvbmUsIHNpbXBseSBsb2FkCit8IHdpdGggYW4gZXhwb25lbnQgb2YgKy8tICQzZmZmLgorfAorCS5nbG9iYWwJc2dldG1hbgorc2dldG1hbjoKKwltb3ZlbAlVU0VSX0ZQQ1IoJWE2KSwlZDAKKwlhbmRpbAkjMHhmZmZmZmYwMCwlZDAJfGNsZWFyIHJvdW5kaW5nIHByZWNpc2lvbiBhbmQgbW9kZQorCWZtb3ZlbAklZDAsJWZwY3IJCXx0aGlzIGZwY3Igc2V0dGluZyBpcyB1c2VkIGJ5IHRoZSA4ODIKKwltb3ZldwlMT0NBTF9FWCglYTApLCVkMAl8Z2V0IHRoZSBleHAgKHJlYWxseSBqdXN0IHdhbnQgc2lnbiBiaXQpCisJb3J3CSMweDdmZmYsJWQwCXxjbGVhciBvbGQgZXhwCisJYmNscmwJIzE0LCVkMAkJfG1ha2UgaXQgdGhlIG5ldyBleHAgKy0zZmZmCisJbW92ZXcJJWQwLExPQ0FMX0VYKCVhMCkJfG1vdmUgdGhlIHNpZ24gJiBleHAgYmFjayB0byBmc2F2ZSBzdGFjaworCWZtb3ZleAkoJWEwKSwlZnAwCXxwdXQgbmV3IHZhbHVlIGJhY2sgaW4gZnAwCisJcnRzCisKK3wKK3wgRm9yIGRlbm9ybWFsaXplZCBudW1iZXJzLCBzaGlmdCB0aGUgbWFudGlzc2EgdW50aWwgdGhlIGotYml0ID0gMSwKK3wgdGhlbiBsb2FkIHRoZSBleHBvbmVudCB3aXRoICsvMSAkM2ZmZi4KK3wKKwkuZ2xvYmFsCXNnZXRtYW5kCitzZ2V0bWFuZDoKKwltb3ZlbAlMT0NBTF9ISSglYTApLCVkMAl8bG9hZCBtcyBtYW50IGluIGQwCisJbW92ZWwJTE9DQUxfTE8oJWEwKSwlZDEJfGxvYWQgbHMgbWFudCBpbiBkMQorCWJzcglzaGZ0CQl8c2hpZnQgbWFudGlzc2EgYml0cyB0aWxsIG1zYml0IGlzIHNldAorCW1vdmVsCSVkMCxMT0NBTF9ISSglYTApCXxwdXQgbXMgbWFudCBiYWNrIG9uIHN0YWNrCisJbW92ZWwJJWQxLExPQ0FMX0xPKCVhMCkJfHB1dCBscyBtYW50IGJhY2sgb24gc3RhY2sKKwlicmFzCXNnZXRtYW4KKworfAorfAlTSEZUCit8Cit8CVNoaWZ0cyB0aGUgbWFudGlzc2EgYml0cyB1bnRpbCBtc2JpdCBpcyBzZXQuCit8CWlucHV0OgorfAkJbXMgbWFudGlzc2EgcGFydCBpbiBkMAorfAkJbHMgbWFudGlzc2EgcGFydCBpbiBkMQorfAlvdXRwdXQ6Cit8CQlzaGlmdGVkIGJpdHMgaW4gZDAgYW5kIGQxCitzaGZ0OgorCXRzdGwJJWQwCQl8aWYgYW55IGJpdHMgc2V0IGluIG1zIG1hbnQKKwlibmVzCXVwcGVyCQl8dGhlbiBicmFuY2gKK3wJCQkJO2Vsc2Ugbm8gYml0cyBzZXQgaW4gbXMgbWFudAorCXRzdGwJJWQxCQl8dGVzdCBpZiBhbnkgYml0cyBzZXQgaW4gbHMgbWFudAorCWJuZXMJY29udAkJfGlmIHNldCB0aGVuIGNvbnRpbnVlCisJYnJhcwlzaGZ0X2VuZAl8ZWxzZSByZXR1cm4KK2NvbnQ6CisJbW92ZWwJJWQzLC0oJWE3KQl8c2F2ZSBkMworCWV4ZwklZDAsJWQxCQl8c2hpZnQgbHMgbWFudCB0byBtcyBtYW50CisJYmZmZm8JJWQweyMwOiMzMn0sJWQzCXxmaW5kIGZpcnN0IDEgaW4gbHMgbWFudCB0byBkMAorCWxzbGwJJWQzLCVkMAkJfHNoaWZ0IGZpcnN0IDEgdG8gaW50ZWdlciBiaXQgaW4gbXMgbWFudAorCW1vdmVsCSglYTcpKywlZDMJfHJlc3RvcmUgZDMKKwlicmFzCXNoZnRfZW5kCit1cHBlcjoKKworCW1vdmVtbAklZDMvJWQ1LyVkNiwtKCVhNykJfHNhdmUgcmVnaXN0ZXJzCisJYmZmZm8JJWQweyMwOiMzMn0sJWQzCXxmaW5kIGZpcnN0IDEgaW4gbHMgbWFudCB0byBkMAorCWxzbGwJJWQzLCVkMAkJfHNoaWZ0IG1zIG1hbnQgdW50aWwgai1iaXQgaXMgc2V0CisJbW92ZWwJJWQxLCVkNgkJfHNhdmUgbHMgbWFudCBpbiBkNgorCWxzbGwJJWQzLCVkMQkJfHNoaWZ0IGxzIG1hbnQgYnkgY291bnQKKwltb3ZlbAkjMzIsJWQ1CisJc3VibAklZDMsJWQ1CQl8c3ViIDMyIGZyb20gc2hpZnQgZm9yIGxzIG1hbnQKKwlsc3JsCSVkNSwlZDYJCXxzaGlmdCBvZmYgYWxsIGJpdHMgYnV0IHRob3NlIHRoYXQgd2lsbAorfAkJCQk7YmUgc2hpZnRlZCBpbnRvIG1zIG1hbnQKKwlvcmwJJWQ2LCVkMAkJfHNoaWZ0IHRoZSBscyBtYW50IGJpdHMgaW50byB0aGUgbXMgbWFudAorCW1vdmVtbAkoJWE3KSssJWQzLyVkNS8lZDYJfHJlc3RvcmUgcmVnaXN0ZXJzCitzaGZ0X2VuZDoKKwlydHMKKworCXxlbmQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL3NpbnQuUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NpbnQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjliZDI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc2ludC5TCkBAIC0wLDAgKzEsMjQ3IEBACit8Cit8CXNpbnQuc2EgMy4xIDEyLzEwLzkwCit8Cit8CVRoZSBlbnRyeSBwb2ludCBzSU5UIGNvbXB1dGVzIHRoZSByb3VuZGVkIGludGVnZXIKK3wJZXF1aXZhbGVudCBvZiB0aGUgaW5wdXQgYXJndW1lbnQsIHNJTlRSWiBjb21wdXRlcworfAl0aGUgaW50ZWdlciByb3VuZGVkIHRvIHplcm8gb2YgdGhlIGlucHV0IGFyZ3VtZW50LgorfAorfAlFbnRyeSBwb2ludHMgc2ludCBhbmQgc2ludHJ6IGFyZSBjYWxsZWQgZnJvbSBkb19mdW5jCit8CXRvIGVtdWxhdGUgdGhlIGZpbnQgYW5kIGZpbnRyeiB1bmltcGxlbWVudGVkIGluc3RydWN0aW9ucywKK3wJcmVzcGVjdGl2ZWx5LiAgRW50cnkgcG9pbnQgc2ludGRvIGlzIHVzZWQgYnkgYmluZGVjLgorfAorfAlJbnB1dDogKEVudHJ5IHBvaW50cyBzaW50IGFuZCBzaW50cnopIERvdWJsZS1leHRlbmRlZAorfAkJbnVtYmVyIFggaW4gdGhlIEVURU1QIHNwYWNlIGluIHRoZSBmbG9hdGluZy1wb2ludAorfAkJc2F2ZSBzdGFjay4KK3wJICAgICAgIChFbnRyeSBwb2ludCBzaW50ZG8pIERvdWJsZS1leHRlbmRlZCBudW1iZXIgWCBpbgorfAkJbG9jYXRpb24gcG9pbnRlZCB0byBieSB0aGUgYWRkcmVzcyByZWdpc3RlciBhMC4KK3wJICAgICAgIChFbnRyeSBwb2ludCBzaW50ZCkgRG91YmxlLWV4dGVuZGVkIGRlbm9ybWFsaXplZAorfAkJbnVtYmVyIFggaW4gdGhlIEVURU1QIHNwYWNlIGluIHRoZSBmbG9hdGluZy1wb2ludAorfAkJc2F2ZSBzdGFjay4KK3wKK3wJT3V0cHV0OiBUaGUgZnVuY3Rpb24gcmV0dXJucyBpbnQoWCkgb3IgaW50cnooWCkgaW4gZnAwLgorfAorfAlNb2RpZmllczogZnAwLgorfAorfAlBbGdvcml0aG06IChzaW50IGFuZCBzaW50cnopCit8Cit8CTEuIElmIGV4cChYKSA+PSA2MywgcmV0dXJuIFguCit8CSAgIElmIGV4cChYKSA8IDAsIHJldHVybiArLy0gMCBvciArLy0gMSwgYWNjb3JkaW5nIHRvCit8CSAgIHRoZSByb3VuZGluZyBtb2RlLgorfAorfAkyLiAoWCBpcyBpbiByYW5nZSkgc2V0IHJzYyA9IDYzIC0gZXhwKFgpLiBVbm5vcm1hbGl6ZSB0aGUKK3wJICAgcmVzdWx0IHRvIHRoZSBleHBvbmVudCAkNDAzZS4KK3wKK3wJMy4gUm91bmQgdGhlIHJlc3VsdCBpbiB0aGUgbW9kZSBnaXZlbiBpbiBVU0VSX0ZQQ1IuIEZvcgorfAkgICBzaW50cnosIGZvcmNlIHJvdW5kLXRvLXplcm8gbW9kZS4KK3wKK3wJNC4gTm9ybWFsaXplIHRoZSByb3VuZGVkIHJlc3VsdDsgc3RvcmUgaW4gZnAwLgorfAorfAlGb3IgdGhlIGRlbm9ybWFsaXplZCBjYXNlcywgZm9yY2UgdGhlIGNvcnJlY3QgcmVzdWx0Cit8CWZvciB0aGUgZ2l2ZW4gc2lnbiBhbmQgcm91bmRpbmcgbW9kZS4KK3wKK3wJCSAgICAgICAgU2lnbihYKQorfAkJUk1PREUgICArICAgIC0KK3wJCS0tLS0tICAtLS0tLS0tLQorfAkJIFJOICAgICswICAgLTAKK3wJCSBSWiAgICArMCAgIC0wCit8CQkgUk0gICAgKzAgICAtMQorfAkJIFJQICAgICsxICAgLTAKK3wKK3wKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK3xTSU5UICAgIGlkbnQgICAgMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworI2luY2x1ZGUgImZwc3AuaCIKKworCXx4cmVmCWRucm1fbHAKKwl8eHJlZglucm1fc2V0CisJfHhyZWYJcm91bmQKKwl8eHJlZgl0X2lueDIKKwl8eHJlZglsZF9wb25lCisJfHhyZWYJbGRfbW9uZQorCXx4cmVmCWxkX3B6ZXJvCisJfHhyZWYJbGRfbXplcm8KKwl8eHJlZglzbnpyaW54CisKK3wKK3wJRklOVAorfAorCS5nbG9iYWwJc2ludAorc2ludDoKKwliZmV4dHUJRlBDUl9NT0RFKCVhNil7IzI6IzJ9LCVkMQl8dXNlIHVzZXIncyBtb2RlIGZvciByb3VuZGluZworfAkJCQkJO2ltcGxpY2l0bHkgaGFzIGV4dGVuZCBwcmVjaXNpb24KK3wJCQkJCTtpbiB1cHBlciB3b3JkLgorCW1vdmVsCSVkMSxMX1NDUjEoJWE2KQkJfHNhdmUgbW9kZSBiaXRzCisJYnJhcwlzaW50ZXhjCisKK3wKK3wJRklOVCB3aXRoIGV4dGVuZGVkIGRlbm9ybSBpbnB1dHMuCit8CisJLmdsb2JhbAlzaW50ZAorc2ludGQ6CisJYnRzdGIJIzUsRlBDUl9NT0RFKCVhNikKKwliZXEJc256cmlueAkJfGlmIHJvdW5kIG5lYXJlc3Qgb3Igcm91bmQgemVybywgKy8tIDAKKwlidHN0YgkjNCxGUENSX01PREUoJWE2KQorCWJlcXMJcm5kX21ucworcm5kX3BsczoKKwlidHN0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorCWJuZXMJc2ludG16CisJYnNyCWxkX3BvbmUJCXxpZiByb3VuZCBwbHVzIGluZiBhbmQgcG9zLCBhbnN3ZXIgaXMgKzEKKwlicmEJdF9pbngyCitybmRfbW5zOgorCWJ0c3RiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCisJYmVxcwlzaW50cHoKKwlic3IJbGRfbW9uZQkJfGlmIHJvdW5kIG1ucyBpbmYgYW5kIG5lZywgYW5zd2VyIGlzIC0xCisJYnJhCXRfaW54Mgorc2ludHB6OgorCWJzcglsZF9wemVybworCWJyYQl0X2lueDIKK3NpbnRtejoKKwlic3IJbGRfbXplcm8KKwlicmEJdF9pbngyCisKK3wKK3wJRklOVFJaCit8CisJLmdsb2JhbAlzaW50cnoKK3NpbnRyejoKKwltb3ZlbAkjMSxMX1NDUjEoJWE2KQkJfHVzZSByeiBtb2RlIGZvciByb3VuZGluZworfAkJCQkJO2ltcGxpY2l0bHkgaGFzIGV4dGVuZCBwcmVjaXNpb24KK3wJCQkJCTtpbiB1cHBlciB3b3JkLgorCWJyYXMJc2ludGV4YworfAorfAlTSU5URE8KK3wKK3wJSW5wdXQ6CWEwIHBvaW50cyB0byBhbiBJRUVFIGV4dGVuZGVkIGZvcm1hdCBvcGVyYW5kCit8CU91dHB1dDoJZnAwIGhhcyB0aGUgcmVzdWx0Cit8Cit8IEV4Y2VwdGlvbnM6Cit8Cit8IElmIHRoZSBzdWJyb3V0aW5lIHJlc3VsdHMgaW4gYW4gaW5leGFjdCBvcGVyYXRpb24sIHRoZSBpbngyIGFuZAorfCBhaW54IGJpdHMgaW4gdGhlIFVTRVJfRlBTUiBhcmUgc2V0LgorfAorfAorCS5nbG9iYWwJc2ludGRvCitzaW50ZG86CisJYmZleHR1CUZQQ1JfTU9ERSglYTYpeyMyOiMyfSwlZDEJfHVzZSB1c2VyJ3MgbW9kZSBmb3Igcm91bmRpbmcKK3wJCQkJCTtpbXBsaWNpdGx5IGhhcyBleHQgcHJlY2lzaW9uCit8CQkJCQk7aW4gdXBwZXIgd29yZC4KKwltb3ZlbAklZDEsTF9TQ1IxKCVhNikJCXxzYXZlIG1vZGUgYml0cworfAorfCBSZWFsIHdvcmsgb2Ygc2ludCBpcyBpbiBzaW50ZXhjCit8CitzaW50ZXhjOgorCWJjbHJiCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCXxjb252ZXJ0IHRvIGludGVybmFsIGV4dGVuZGVkCit8CQkJCQk7Zm9ybWF0CisJc25lCUxPQ0FMX1NHTiglYTApCisJY21wdwkjMHg0MDNlLExPQ0FMX0VYKCVhMCkJfGNoZWNrIGlmICh1bmJpYXNlZCkgZXhwID4gNjMKKwliZ3RzCW91dF9ybmdlCQkJfGJyYW5jaCBpZiBleHAgPCA2MworCWNtcHcJIzB4M2ZmZCxMT0NBTF9FWCglYTApCXxjaGVjayBpZiAodW5iaWFzZWQpIGV4cCA8IDAKKwliZ3QJaW5fcm5nZQkJCXxpZiA2MyA+PSBleHAgPiAwLCBkbyBjYWxjCit8Cit8IElucHV0IGlzIGxlc3MgdGhhbiB6ZXJvLiAgUmVzdG9yZSBzaWduLCBhbmQgY2hlY2sgZm9yIGRpcmVjdGVkCit8IHJvdW5kaW5nIG1vZGVzLiAgTF9TQ1IxIGNvbnRhaW5zIHRoZSBybW9kZSBpbiB0aGUgbG93ZXIgYnl0ZS4KK3wKK3VuX3JuZ2U6CisJYnRzdGIJIzEsTF9TQ1IxKzMoJWE2KQkJfGNoZWNrIGZvciBybiBhbmQgcnoKKwliZXFzCXVuX3JucnoKKwl0c3RiCUxPQ0FMX1NHTiglYTApCQl8Y2hlY2sgZm9yIHNpZ24KKwlibmVzCXVuX3JtcnBfbmVnCit8Cit8IFNpZ24gaXMgKy4gIElmIHJwLCBsb2FkICsxLjAsIGlmIHJtLCBsb2FkICswLjAKK3wKKwljbXBpYgkjMyxMX1NDUjErMyglYTYpCQl8Y2hlY2sgZm9yIHJwCisJYmVxcwl1bl9sZHBvbmUJCXxpZiBycCwgbG9hZCArMS4wCisJYnNyCWxkX3B6ZXJvCQl8aWYgcm0sIGxvYWQgKzAuMAorCWJyYQl0X2lueDIKK3VuX2xkcG9uZToKKwlic3IJbGRfcG9uZQorCWJyYQl0X2lueDIKK3wKK3wgU2lnbiBpcyAtLiAgSWYgcm0sIGxvYWQgLTEuMCwgaWYgcnAsIGxvYWQgLTAuMAorfAordW5fcm1ycF9uZWc6CisJY21waWIJIzIsTF9TQ1IxKzMoJWE2KQkJfGNoZWNrIGZvciBybQorCWJlcXMJdW5fbGRtb25lCQl8aWYgcm0sIGxvYWQgLTEuMAorCWJzcglsZF9temVybwkJfGlmIHJwLCBsb2FkIC0wLjAKKwlicmEJdF9pbngyCit1bl9sZG1vbmU6CisJYnNyCWxkX21vbmUKKwlicmEJdF9pbngyCit8Cit8IFJtb2RlIGlzIHJuIG9yIHJ6OyByZXR1cm4gc2lnbmVkIHplcm8KK3wKK3VuX3Jucno6CisJdHN0YglMT0NBTF9TR04oJWEwKQkJfGNoZWNrIGZvciBzaWduCisJYm5lcwl1bl9ybnJ6X25lZworCWJzcglsZF9wemVybworCWJyYQl0X2lueDIKK3VuX3JucnpfbmVnOgorCWJzcglsZF9temVybworCWJyYQl0X2lueDIKKworfAorfCBJbnB1dCBpcyBncmVhdGVyIHRoYW4gMl42My4gIEFsbCBiaXRzIGFyZSBzaWduaWZpY2FudC4gIFJldHVybgorfCB0aGUgaW5wdXQuCit8CitvdXRfcm5nZToKKwliZmNscglMT0NBTF9TR04oJWEwKXsjMDojOH0JfGNoYW5nZSBiYWNrIHRvIElFRUUgZXh0IGZvcm1hdAorCWJlcXMJaW50cHMKKwlic2V0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQoraW50cHM6CisJZm1vdmVsCSVmcGNyLC0oJXNwKQorCWZtb3ZlbAkjMCwlZnBjcgorCWZtb3ZleCBMT0NBTF9FWCglYTApLCVmcDAJfGlmIGV4cCA+IDYzCit8CQkJCQk7dGhlbiByZXR1cm4gWCB0byB0aGUgdXNlcgorfAkJCQkJO3RoZXJlIGFyZSBubyBmcmFjdGlvbiBiaXRzCisJZm1vdmVsCSglc3ApKywlZnBjcgorCXJ0cworCitpbl9ybmdlOgorfAkJCQkJO3NoaWZ0IG9mZiBmcmFjdGlvbiBiaXRzCisJY2xybAklZDAJCQl8Y2xlYXIgZDAgLSBpbml0aWFsIGcscixzIGZvcgorfAkJCQkJO2Rucm1fbHAKKwltb3ZlbAkjMHg0MDNlLCVkMQkJfHNldCB0aHJlc2hvbGQgZm9yIGRucm1fbHAKK3wJCQkJCTthc3N1bWVzIGEwIHBvaW50cyB0byBvcGVyYW5kCisJYnNyCWRucm1fbHAKK3wJCQkJCTtyZXR1cm5zIHVubm9ybWFsaXplZCBudW1iZXIKK3wJCQkJCTtwb2ludGVkIGJ5IGEwCit8CQkJCQk7b3V0cHV0IGQwIHN1cHBsaWVzIGcscixzCit8CQkJCQk7dXNlZCBieSByb3VuZAorCW1vdmVsCUxfU0NSMSglYTYpLCVkMQkJfHVzZSBzZWxlY3RlZCByb3VuZGluZyBtb2RlCit8Cit8CisJYnNyCXJvdW5kCQkJfHJvdW5kIHRoZSB1bm5vcm0gYmFzZWQgb24gdXNlcnMKK3wJCQkJCTtpbnB1dAlhMCBwdHIgdG8gZXh0IFgKK3wJCQkJCTsJZDAgZyxyLHMgYml0cworfAkJCQkJOwlkMSBQUkVDL01PREUgaW5mbworfAkJCQkJO291dHB1dCBhMCBwdHIgdG8gcm91bmRlZCByZXN1bHQKK3wJCQkJCTtpbmV4YWN0IGZsYWcgc2V0IGluIFVTRVJfRlBTUgorfAkJCQkJO2lmIGluaXRpYWwgZ3JzIHNldAorfAorfCBub3JtYWxpemUgdGhlIHJvdW5kZWQgcmVzdWx0IGFuZCBzdG9yZSB2YWx1ZSBpbiBmcDAKK3wKKwlic3IJbnJtX3NldAkJCXxub3JtYWxpemUgdGhlIHVubm9ybQorfAkJCQkJO0lucHV0OiBhMCBwb2ludHMgdG8gb3BlcmFuZCB0bworfAkJCQkJO2JlIG5vcm1hbGl6ZWQKK3wJCQkJCTtPdXRwdXQ6IGEwIHBvaW50cyB0byBub3JtYWxpemVkCit8CQkJCQk7cmVzdWx0CisJYmZjbHIJTE9DQUxfU0dOKCVhMCl7IzA6Izh9CisJYmVxcwlucm1ybmRwCisJYnNldGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkJfHJldHVybiB0byBJRUVFIGV4dGVuZGVkIGZvcm1hdAorbnJtcm5kcDoKKwlmbW92ZWwJJWZwY3IsLSglc3ApCisJZm1vdmVsCSMwLCVmcGNyCisJZm1vdmV4IExPQ0FMX0VYKCVhMCksJWZwMAl8bW92ZSByZXN1bHQgdG8gZnAwCisJZm1vdmVsCSglc3ApKywlZnBjcgorCXJ0cworCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvc2tlbGV0b24uUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NrZWxldG9uLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJjMTI1NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NrZWxldG9uLlMKQEAgLTAsMCArMSw1MTYgQEAKK3wKK3wJc2tlbGV0b24uc2EgMy4yIDQvMjYvOTEKK3wKK3wJVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgdGhhdCBpcyBzeXN0ZW0gZGVwZW5kZW50IGFuZCB3aWxsCit8CW5lZWQgdG8gYmUgbW9kaWZpZWQgdG8gaW5zdGFsbCB0aGUgRlBTUC4KK3wKK3wJRWFjaCBlbnRyeSBwb2ludCBmb3IgZXhjZXB0aW9uICd4eHh4JyBiZWdpbnMgd2l0aCBhICdqbXAgZnBzcF94eHh4Jy4KK3wJUHV0IGFueSB0YXJnZXQgc3lzdGVtIHNwZWNpZmljIGhhbmRsaW5nIHRoYXQgbXVzdCBiZSBkb25lIGltbWVkaWF0ZWx5Cit8CWJlZm9yZSB0aGUganVtcCBpbnN0cnVjdGlvbi4gIElmIHRoZXJlIG5vIGhhbmRsaW5nIG5lY2Vzc2FyeSwgdGhlbgorfAl0aGUgJ2Zwc3BfeHh4eCcgaGFuZGxlciBlbnRyeSBwb2ludCBzaG91bGQgYmUgcGxhY2VkIGluIHRoZSBleGNlcHRpb24KK3wJdGFibGUgc28gdGhhdCB0aGUgJ2ptcCcgY2FuIGJlIGVsaW1pbmF0ZWQuIElmIHRoZSBGUFNQIGRldGVybWluZXMgdGhhdCB0aGUKK3wJZXhjZXB0aW9uIGlzIG9uZSB0aGF0IG11c3QgYmUgcmVwb3J0ZWQgdGhlbiB0aGVyZSB3aWxsIGJlIGEKK3wJcmV0dXJuIGZyb20gdGhlIHBhY2thZ2UgYnkgYSAnam1wIHJlYWxfeHh4eCcuICBBdCB0aGF0IHBvaW50Cit8CXRoZSBtYWNoaW5lIHN0YXRlIHdpbGwgYmUgaWRlbnRpY2FsIHRvIHRoZSBzdGF0ZSBiZWZvcmUKK3wJdGhlIEZQU1Agd2FzIGVudGVyZWQuICBJbiBwYXJ0aWN1bGFyLCB3aGF0ZXZlciBjb25kaXRpb24KK3wJdGhhdCBjYXVzZWQgdGhlIGV4Y2VwdGlvbiB3aWxsIHN0aWxsIGJlIHBlbmRpbmcgd2hlbiB0aGUgRlBTUAorfAlwYWNrYWdlIHJldHVybnMuICBUaHVzLCB0aGVyZSB3aWxsIGJlIHN5c3RlbSBzcGVjaWZpYyBjb2RlCit8CXRvIGhhbmRsZSB0aGUgZXhjZXB0aW9uLgorfAorfAlJZiB0aGUgZXhjZXB0aW9uIHdhcyBjb21wbGV0ZWx5IGhhbmRsZWQgYnkgdGhlIHBhY2thZ2UsIHRoZW4KK3wJdGhlIHJldHVybiB3aWxsIGJlIHZpYSBhICdqbXAgZnBzcF9kb25lJy4gIFVubGVzcyB0aGVyZSBpcworfAlPUyBzcGVjaWZpYyB3b3JrIHRvIGJlIGRvbmUgKHN1Y2ggYXMgaGFuZGxpbmcgYSBjb250ZXh0IHN3aXRjaCBvcgorfAlpbnRlcnJ1cHQpIHRoZSB1c2VyIHByb2dyYW0gY2FuIGJlIHJlc3VtZWQgdmlhICdydGUnLgorfAorfAlJbiB0aGUgZm9sbG93aW5nIHNrZWxldG9uIGNvZGUsIHNvbWUgdHlwaWNhbCAncmVhbF94eHh4JyBoYW5kbGluZworfAljb2RlIGlzIHNob3duLiAgVGhpcyBjb2RlIG1heSBuZWVkIHRvIGJlIG1vdmVkIHRvIGFuIGFwcHJvcHJpYXRlCit8CXBsYWNlIGluIHRoZSB0YXJnZXQgc3lzdGVtLCBvciByZXdyaXR0ZW4uCit8CisKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK3wKK3wJTW9kaWZpZWQgZm9yIExpbnV4LTEuMy54IGJ5IEplcyBTb3JlbnNlbiAoamRzQGtvbS5hdWMuZGspCit8CisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2VudHJ5Lmg+CisjaW5jbHVkZSA8YXNtL29mZnNldHMuaD4KKworfFNLRUxFVE9OCWlkbnQgICAgMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uIDE1Cit8Cit8CVRoZSBmb2xsb3dpbmcgY291bnRlcnMgYXJlIHVzZWQgZm9yIHN0YW5kYWxvbmUgdGVzdGluZworfAorCisJfHNlY3Rpb24gOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCisJfHhyZWYJYjEyMzhfZml4CisKK3wKK3wJRGl2aWRlIGJ5IFplcm8gZXhjZXB0aW9uCit8Cit8CUFsbCBkeiBleGNlcHRpb25zIGFyZSAncmVhbCcsIGhlbmNlIG5vIGZwc3BfZHogZW50cnkgcG9pbnQuCit8CisJLmdsb2JhbAlkegorCS5nbG9iYWwJcmVhbF9kegorZHo6CityZWFsX2R6OgorCWxpbmsJCSVhNiwjLUxPQ0FMX1NJWkUKKwlmc2F2ZQkJLSglc3ApCisJYmNscmIJCSNFMSxFX0JZVEUoJWE2KQorCWZyZXN0b3JlCSglc3ApKworCXVubGsJCSVhNgorCisJU0FWRV9BTExfSU5UCisJR0VUX0NVUlJFTlQoJWQwKQorCW1vdmVsCSVzcCwlc3BALQkJfCBzdGFjayBmcmFtZSBwb2ludGVyIGFyZ3VtZW50CisJYnNybAl0cmFwX2MKKwlhZGRxbAkjNCwlc3AKKwlicmFsCXJldF9mcm9tX2V4Y2VwdGlvbgorCit8Cit8CUluZXhhY3QgZXhjZXB0aW9uCit8Cit8CUFsbCBpbmV4YWN0IGV4Y2VwdGlvbnMgYXJlIHJlYWwsIGJ1dCB0aGUgJ3JlYWwnIGhhbmRsZXIKK3wJd2lsbCBwcm9iYWJseSB3YW50IHRvIGNsZWFyIHRoZSBwZW5kaW5nIGV4Y2VwdGlvbi4KK3wJVGhlIHByb3ZpZGVkIGNvZGUgd2lsbCBjbGVhciB0aGUgRTMgZXhjZXB0aW9uIChpZiBwZW5kaW5nKSwKK3wJb3RoZXJ3aXNlIGNsZWFyIHRoZSBFMSBleGNlcHRpb24uICBUaGUgZnJlc3RvcmUgaXMgbm90IHJlYWxseQorfAluZWNlc3NhcnkgZm9yIEUxIGV4Y2VwdGlvbnMuCit8Cit8IENvZGUgZm9sbG93aW5nIHRoZSAnaW5leCcgbGFiZWwgaXMgdG8gaGFuZGxlIGJ1ZyAjMTIzMi4gIEluIHRoaXMKK3wgYnVnLCBpZiBhbiBFMSBzbmFuLCBvdmZsLCBvciB1bmZsIG9jY3VycmVkLCBhbmQgdGhlIHByb2Nlc3Mgd2FzCit8IHN3YXBwZWQgb3V0IGJlZm9yZSB0YWtpbmcgdGhlIGV4Y2VwdGlvbiwgdGhlIGV4Y2VwdGlvbiB0YWtlbiBvbgorfCByZXR1cm4gd2FzIGluZXgsIHJhdGhlciB0aGFuIHRoZSBjb3JyZWN0IGV4Y2VwdGlvbi4gIFRoZSBzbmFuLCBvdmZsLAorfCBhbmQgdW5mbCBleGNlcHRpb24gdG8gYmUgdGFrZW4gbXVzdCBub3QgaGF2ZSBiZWVuIGVuYWJsZWQuICBUaGUKK3wgZml4IGlzIHRvIGNoZWNrIGZvciBFMSwgYW5kIHRoZSBleGlzdGVuY2Ugb2Ygb25lIG9mIHNuYW4sIG92ZmwsCit8IG9yIHVuZmwgYml0cyBzZXQgaW4gdGhlIGZwc3IuICBJZiBhbnkgb2YgdGhlc2UgYXJlIHNldCwgYnJhbmNoCit8IHRvIHRoZSBhcHByb3ByaWF0ZSAgaGFuZGxlciBmb3IgdGhlIGV4Y2VwdGlvbiBpbiB0aGUgZnBzci4gIE5vdGUKK3wgdGhhdCB0aGlzIGZpeCBpcyBvbmx5IGZvciBkNDNiIHBhcnRzLCBhbmQgaXMgc2tpcHBlZCBpZiB0aGUKK3wgdmVyc2lvbiBudW1iZXIgaXMgbm90ICQ0MC4KK3wKK3wKKwkuZ2xvYmFsCXJlYWxfaW5leAorCS5nbG9iYWwJaW5leAoraW5leDoKKwlsaW5rCQklYTYsIy1MT0NBTF9TSVpFCisJZnNhdmUJCS0oJXNwKQorCWNtcGliCQkjVkVSXzQwLCglc3ApCQl8dGVzdCB2ZXJzaW9uIG51bWJlcgorCWJuZXMJCW5vdF9mbXQ0MAorCWZtb3ZlbAkJJWZwc3IsLSglc3ApCisJYnRzdGIJCSNFMSxFX0JZVEUoJWE2KQkJfHRlc3QgZm9yIEUxIHNldAorCWJlcXMJCW5vdF9iMTIzMgorCWJ0c3RiCQkjc25hbl9iaXQsMiglc3ApIHx0ZXN0IGZvciBzbmFuCisJYmVxCQlpbmV4X2Nrb2ZsCisJYWRkbAkJIzQsJXNwCisJZnJlc3RvcmUJKCVzcCkrCisJdW5sawkJJWE2CisJYnJhCQlzbmFuCitpbmV4X2Nrb2ZsOgorCWJ0c3RiCQkjb3ZmbF9iaXQsMiglc3ApIHx0ZXN0IGZvciBvdmZsCisJYmVxCQlpbmV4X2NrdWZsCisJYWRkbAkJIzQsJXNwCisJZnJlc3RvcmUJKCVzcCkrCisJdW5sawkJJWE2CisJYnJhCQlvdmZsCitpbmV4X2NrdWZsOgorCWJ0c3RiCQkjdW5mbF9iaXQsMiglc3ApIHx0ZXN0IGZvciB1bmZsCisJYmVxCQlub3RfYjEyMzIKKwlhZGRsCQkjNCwlc3AKKwlmcmVzdG9yZQkoJXNwKSsKKwl1bmxrCQklYTYKKwlicmEJCXVuZmwKKworfAorfCBXZSBkbyBub3QgaGF2ZSB0aGUgYnVnIDEyMzIgY2FzZS4gIENsZWFuIHVwIHRoZSBzdGFjayBhbmQgY2FsbAorfCByZWFsX2luZXguCit8Citub3RfYjEyMzI6CisJYWRkbAkJIzQsJXNwCisJZnJlc3RvcmUJKCVzcCkrCisJdW5sawkJJWE2CisKK3JlYWxfaW5leDoKKworCWxpbmsJCSVhNiwjLUxPQ0FMX1NJWkUKKwlmc2F2ZQkJLSglc3ApCitub3RfZm10NDA6CisJYmNscmIJCSNFMyxFX0JZVEUoJWE2KQkJfGNsZWFyIGFuZCB0ZXN0IEUzIGZsYWcKKwliZXFzCQlpbmV4X2NrZTEKK3wKK3wgQ2xlYXIgZGlydHkgYml0IG9uIGRlc3QgcmVzaXN0ZXIgaW4gdGhlIGZyYW1lIGJlZm9yZSBicmFuY2hpbmcKK3wgdG8gYjEyMzhfZml4LgorfAorCW1vdmVtbAkJJWQwLyVkMSxVU0VSX0RBKCVhNikKKwliZmV4dHUJCUNNRFJFRzFCKCVhNil7IzY6IzN9LCVkMAkJfGdldCBkZXN0IHJlZyBubworCWJjbHJiCQklZDAsRlBSX0RJUlRZX0JJVFMoJWE2KQl8Y2xyIGRlc3QgZGlydHkgYml0CisJYnNybAkJYjEyMzhfZml4CQl8dGVzdCBmb3IgYnVnMTIzOCBjYXNlCisJbW92ZW1sCQlVU0VSX0RBKCVhNiksJWQwLyVkMQorCWJyYXMJCWluZXhfZG9uZQoraW5leF9ja2UxOgorCWJjbHJiCQkjRTEsRV9CWVRFKCVhNikKK2luZXhfZG9uZToKKwlmcmVzdG9yZQkoJXNwKSsKKwl1bmxrCQklYTYKKworCVNBVkVfQUxMX0lOVAorCUdFVF9DVVJSRU5UKCVkMCkKKwltb3ZlbAklc3AsJXNwQC0JCXwgc3RhY2sgZnJhbWUgcG9pbnRlciBhcmd1bWVudAorCWJzcmwJdHJhcF9jCisJYWRkcWwJIzQsJXNwCisJYnJhbAlyZXRfZnJvbV9leGNlcHRpb24KKworfAorfAlPdmVyZmxvdyBleGNlcHRpb24KK3wKKwl8eHJlZglmcHNwX292ZmwKKwkuZ2xvYmFsCXJlYWxfb3ZmbAorCS5nbG9iYWwJb3ZmbAorb3ZmbDoKKwlqbXAJZnBzcF9vdmZsCityZWFsX292Zmw6CisKKwlsaW5rCQklYTYsIy1MT0NBTF9TSVpFCisJZnNhdmUJCS0oJXNwKQorCWJjbHJiCQkjRTMsRV9CWVRFKCVhNikJCXxjbGVhciBhbmQgdGVzdCBFMyBmbGFnCisJYm5lcwkJb3ZmbF9kb25lCisJYmNscmIJCSNFMSxFX0JZVEUoJWE2KQorb3ZmbF9kb25lOgorCWZyZXN0b3JlCSglc3ApKworCXVubGsJCSVhNgorCisJU0FWRV9BTExfSU5UCisJR0VUX0NVUlJFTlQoJWQwKQorCW1vdmVsCSVzcCwlc3BALQkJfCBzdGFjayBmcmFtZSBwb2ludGVyIGFyZ3VtZW50CisJYnNybAl0cmFwX2MKKwlhZGRxbAkjNCwlc3AKKwlicmFsCXJldF9mcm9tX2V4Y2VwdGlvbgorCit8Cit8CVVuZGVyZmxvdyBleGNlcHRpb24KK3wKKwl8eHJlZglmcHNwX3VuZmwKKwkuZ2xvYmFsCXJlYWxfdW5mbAorCS5nbG9iYWwJdW5mbAordW5mbDoKKwlqbXAJZnBzcF91bmZsCityZWFsX3VuZmw6CisKKwlsaW5rCQklYTYsIy1MT0NBTF9TSVpFCisJZnNhdmUJCS0oJXNwKQorCWJjbHJiCQkjRTMsRV9CWVRFKCVhNikJCXxjbGVhciBhbmQgdGVzdCBFMyBmbGFnCisJYm5lcwkJdW5mbF9kb25lCisJYmNscmIJCSNFMSxFX0JZVEUoJWE2KQordW5mbF9kb25lOgorCWZyZXN0b3JlCSglc3ApKworCXVubGsJCSVhNgorCisJU0FWRV9BTExfSU5UCisJR0VUX0NVUlJFTlQoJWQwKQorCW1vdmVsCSVzcCwlc3BALQkJfCBzdGFjayBmcmFtZSBwb2ludGVyIGFyZ3VtZW50CisJYnNybAl0cmFwX2MKKwlhZGRxbAkjNCwlc3AKKwlicmFsCXJldF9mcm9tX2V4Y2VwdGlvbgorCit8Cit8CVNpZ25hbGxpbmcgTkFOIGV4Y2VwdGlvbgorfAorCXx4cmVmCWZwc3Bfc25hbgorCS5nbG9iYWwJcmVhbF9zbmFuCisJLmdsb2JhbAlzbmFuCitzbmFuOgorCWptcAlmcHNwX3NuYW4KK3JlYWxfc25hbjoKKwlsaW5rCQklYTYsIy1MT0NBTF9TSVpFCisJZnNhdmUJCS0oJXNwKQorCWJjbHJiCQkjRTEsRV9CWVRFKCVhNikJfHNuYW4gaXMgYWx3YXlzIGFuIEUxIGV4Y2VwdGlvbgorCWZyZXN0b3JlCSglc3ApKworCXVubGsJCSVhNgorCisJU0FWRV9BTExfSU5UCisJR0VUX0NVUlJFTlQoJWQwKQorCW1vdmVsCSVzcCwlc3BALQkJfCBzdGFjayBmcmFtZSBwb2ludGVyIGFyZ3VtZW50CisJYnNybAl0cmFwX2MKKwlhZGRxbAkjNCwlc3AKKwlicmFsCXJldF9mcm9tX2V4Y2VwdGlvbgorCit8Cit8CU9wZXJhbmQgRXJyb3IgZXhjZXB0aW9uCit8CisJfHhyZWYJZnBzcF9vcGVycgorCS5nbG9iYWwJcmVhbF9vcGVycgorCS5nbG9iYWwJb3BlcnIKK29wZXJyOgorCWptcAlmcHNwX29wZXJyCityZWFsX29wZXJyOgorCWxpbmsJCSVhNiwjLUxPQ0FMX1NJWkUKKwlmc2F2ZQkJLSglc3ApCisJYmNscmIJCSNFMSxFX0JZVEUoJWE2KQl8b3BlcnIgaXMgYWx3YXlzIGFuIEUxIGV4Y2VwdGlvbgorCWZyZXN0b3JlCSglc3ApKworCXVubGsJCSVhNgorCisJU0FWRV9BTExfSU5UCisJR0VUX0NVUlJFTlQoJWQwKQorCW1vdmVsCSVzcCwlc3BALQkJfCBzdGFjayBmcmFtZSBwb2ludGVyIGFyZ3VtZW50CisJYnNybAl0cmFwX2MKKwlhZGRxbAkjNCwlc3AKKwlicmFsCXJldF9mcm9tX2V4Y2VwdGlvbgorCisKK3wKK3wJQlNVTiBleGNlcHRpb24KK3wKK3wJVGhpcyBzYW1wbGUgaGFuZGxlciBzaW1wbHkgY2xlYXJzIHRoZSBuYW4gYml0IGluIHRoZSBGUFNSLgorfAorCXx4cmVmCWZwc3BfYnN1bgorCS5nbG9iYWwJcmVhbF9ic3VuCisJLmdsb2JhbAlic3VuCitic3VuOgorCWptcAlmcHNwX2JzdW4KK3JlYWxfYnN1bjoKKwlsaW5rCQklYTYsIy1MT0NBTF9TSVpFCisJZnNhdmUJCS0oJXNwKQorCWJjbHJiCQkjRTEsRV9CWVRFKCVhNikJfGJzdW4gaXMgYWx3YXlzIGFuIEUxIGV4Y2VwdGlvbgorCWZtb3ZlbAkJJUZQU1IsLSglc3ApCisJYmNscmIJCSNuYW5fYml0LCglc3ApCisJZm1vdmVsCQkoJXNwKSssJUZQU1IKKwlmcmVzdG9yZQkoJXNwKSsKKwl1bmxrCQklYTYKKworCVNBVkVfQUxMX0lOVAorCUdFVF9DVVJSRU5UKCVkMCkKKwltb3ZlbAklc3AsJXNwQC0JCXwgc3RhY2sgZnJhbWUgcG9pbnRlciBhcmd1bWVudAorCWJzcmwJdHJhcF9jCisJYWRkcWwJIzQsJXNwCisJYnJhbAlyZXRfZnJvbV9leGNlcHRpb24KKworfAorfAlGLWxpbmUgZXhjZXB0aW9uCit8Cit8CUEgJ3JlYWwnIEYtbGluZSBleGNlcHRpb24gaXMgb25lIHRoYXQgdGhlIEZQU1AgaXNuJ3Qgc3VwcG9zZWQgdG8KK3wJaGFuZGxlLiBFLmcuIGFuIGluc3RydWN0aW9uIHdpdGggYSBjby1wcm9jZXNzb3IgSUQgdGhhdCBpcyBub3QgMS4KK3wKK3wKKwl8eHJlZglmcHNwX2ZsaW5lCisJLmdsb2JhbAlyZWFsX2ZsaW5lCisJLmdsb2JhbAlmbGluZQorZmxpbmU6CisJam1wCWZwc3BfZmxpbmUKK3JlYWxfZmxpbmU6CisKKwlTQVZFX0FMTF9JTlQKKwlHRVRfQ1VSUkVOVCglZDApCisJbW92ZWwJJXNwLCVzcEAtCQl8IHN0YWNrIGZyYW1lIHBvaW50ZXIgYXJndW1lbnQKKwlic3JsCXRyYXBfYworCWFkZHFsCSM0LCVzcAorCWJyYWwJcmV0X2Zyb21fZXhjZXB0aW9uCisKK3wKK3wJVW5zdXBwb3J0ZWQgZGF0YSB0eXBlIGV4Y2VwdGlvbgorfAorCXx4cmVmCWZwc3BfdW5zdXBwCisJLmdsb2JhbAlyZWFsX3Vuc3VwcAorCS5nbG9iYWwJdW5zdXBwCit1bnN1cHA6CisJam1wCWZwc3BfdW5zdXBwCityZWFsX3Vuc3VwcDoKKwlsaW5rCQklYTYsIy1MT0NBTF9TSVpFCisJZnNhdmUJCS0oJXNwKQorCWJjbHJiCQkjRTEsRV9CWVRFKCVhNikJfHVuc3VwcCBpcyBhbHdheXMgYW4gRTEgZXhjZXB0aW9uCisJZnJlc3RvcmUJKCVzcCkrCisJdW5sawkJJWE2CisKKwlTQVZFX0FMTF9JTlQKKwlHRVRfQ1VSUkVOVCglZDApCisJbW92ZWwJJXNwLCVzcEAtCQl8IHN0YWNrIGZyYW1lIHBvaW50ZXIgYXJndW1lbnQKKwlic3JsCXRyYXBfYworCWFkZHFsCSM0LCVzcAorCWJyYWwJcmV0X2Zyb21fZXhjZXB0aW9uCisKK3wKK3wJVHJhY2UgZXhjZXB0aW9uCit8CisJLmdsb2JhbAlyZWFsX3RyYWNlCityZWFsX3RyYWNlOgorCXwKKwlicmFsCXRyYXAKKworfAorfAlmcHNwX2ZtdF9lcnJvciAtLS0gZXhpdCBwb2ludCBmb3IgZnJhbWUgZm9ybWF0IGVycm9yCit8Cit8CVRoZSBmcHUgc3RhY2sgZnJhbWUgZG9lcyBub3QgbWF0Y2ggdGhlIGZyYW1lcyBleGlzdGluZworfAlvciBwbGFubmVkIGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZy4gIFRoZSBmcHNwIGlzCit8CXVuYWJsZSB0byBoYW5kbGUgZnJhbWUgc2l6ZXMgbm90IGluIHRoZSBmb2xsb3dpbmcKK3wJdmVyc2lvbjpzaXplIHBhaXJzOgorfAorfAl7NDA2MCwgNDE2MH0gLSBidXN5IGZyYW1lCit8CXs0MDI4LCA0MTMwfSAtIHVuaW1wIGZyYW1lCit8CXs0MDAwLCA0MTAwfSAtIGlkbGUgZnJhbWUKK3wKK3wJVGhpcyBlbnRyeSBwb2ludCBzaW1wbHkgaG9sZHMgYW4gZi1saW5lIGlsbGVnYWwgdmFsdWUuCit8CVJlcGxhY2UgdGhpcyB3aXRoIGEgY2FsbCB0byB5b3VyIGtlcm5lbCBwYW5pYyBjb2RlIG9yCit8CWNvZGUgdG8gaGFuZGxlIGZ1dHVyZSByZXZpc2lvbnMgb2YgdGhlIGZwdS4KK3wKKwkuZ2xvYmFsCWZwc3BfZm10X2Vycm9yCitmcHNwX2ZtdF9lcnJvcjoKKworCS5sb25nCTB4ZjI3ZjAwMDAJfGYtbGluZSBpbGxlZ2FsCisKK3wKK3wJZnBzcF9kb25lIC0tLSBGUFNQIGV4aXQgcG9pbnQKK3wKK3wJVGhlIGV4Y2VwdGlvbiBoYXMgYmVlbiBoYW5kbGVkIGJ5IHRoZSBwYWNrYWdlIGFuZCB3ZSBhcmUgcmVhZHkKK3wJdG8gcmV0dXJuIHRvIHVzZXIgbW9kZSwgYnV0IHRoZXJlIG1heSBiZSBPUyBzcGVjaWZpYyBjb2RlCit8CXRvIGV4ZWN1dGUgYmVmb3JlIHdlIGRvLiAgSWYgdGhlcmUgaXMsIGRvIGl0IG5vdy4KK3wKK3wKKworCS5nbG9iYWwJZnBzcF9kb25lCitmcHNwX2RvbmU6CisJYnRzdAkjMHg1LCVzcEAJCXwgc3VwZXJ2aXNvciBiaXQgc2V0IGluIHNhdmVkIFNSPworCWJlcQkuTG5vdGtlcm4KKwlydGUKKy5Mbm90a2VybjoKKwlTQVZFX0FMTF9JTlQKKwlHRVRfQ1VSUkVOVCglZDApCisJdHN0YgklY3VycHRyQChUQVNLX05FRURSRVNDSEVEKQorCWpuZQlyZXRfZnJvbV9leGNlcHRpb24JfCBkZWxpdmVyIHNpZ25hbHMsCisJCQkJCXwgcmVzY2hlZHVsZSBldGMuLgorCVJFU1RPUkVfQUxMCisKK3wKK3wJbWVtX3dyaXRlIC0tLSB3cml0ZSB0byB1c2VyIG9yIHN1cGVydmlzb3IgYWRkcmVzcyBzcGFjZQorfAorfCBXcml0ZXMgdG8gbWVtb3J5IHdoaWxlIGluIHN1cGVydmlzb3IgbW9kZS4gIGNvcHlvdXQgYWNjb21wbGlzaGVzCit8IHRoaXMgdmlhIGEgJ21vdmVzJyBpbnN0cnVjdGlvbi4gIGNvcHlvdXQgaXMgYSBVTklYIFNWUjMgKGFuZCBsYXRlcikgZnVuY3Rpb24uCit8IElmIHlvdSBkb24ndCBoYXZlIGNvcHlvdXQsIHVzZSB0aGUgbG9jYWwgY29weSBvZiB0aGUgZnVuY3Rpb24gYmVsb3cuCit8Cit8CWEwIC0gc3VwZXJ2aXNvciBzb3VyY2UgYWRkcmVzcworfAlhMSAtIHVzZXIgZGVzdGluYXRpb24gYWRkcmVzcworfAlkMCAtIG51bWJlciBvZiBieXRlcyB0byB3cml0ZSAobWF4aW11bSBjb3VudCBpcyAxMikKK3wKK3wgVGhlIHN1cGVydmlzb3Igc291cmNlIGFkZHJlc3MgaXMgZ3VhcmFudGVlZCB0byBwb2ludCBpbnRvIHRoZSBzdXBlcnZpc29yCit8IHN0YWNrLiAgVGhlIHJlc3VsdCBpcyB0aGF0IGEgVU5JWAorfCBwcm9jZXNzIGlzIGFsbG93ZWQgdG8gc2xlZXAgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIHBhZ2UgZmF1bHQgZHVyaW5nCit8IGNvcHlvdXQuICBUaGUgcHJvYmFiaWxpdHkgb2YgYSBwYWdlIGZhdWx0IGlzIGV4Y2VlZGluZ2x5IHNtYWxsIGJlY2F1c2UKK3wgdGhlIDY4MDQwIGFsd2F5cyByZWFkcyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBhbmQgdGh1cyB0aGUgcGFnZQorfCBmYXVsdHMgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGhhbmRsZWQuCit8Cit8IElmIHRoZSBFWENfU1Igc2hvd3MgdGhhdCB0aGUgZXhjZXB0aW9uIHdhcyBmcm9tIHN1cGVydmlzb3Igc3BhY2UsCit8IHRoZW4ganVzdCBkbyBhIGR1bWIgKGFuZCBzbG93KSBtZW1vcnkgbW92ZS4gIEluIGEgVU5JWCBlbnZpcm9ubWVudAorfCB0aGVyZSBzaG91bGRuJ3QgYmUgYW55IHN1cGVydmlzb3IgbW9kZSBmbG9hdGluZyBwb2ludCBleGNlcHRpb25zLgorfAorCS5nbG9iYWwJbWVtX3dyaXRlCittZW1fd3JpdGU6CisJYnRzdGIJIzUsRVhDX1NSKCVhNikJfGNoZWNrIGZvciBzdXBlcnZpc29yIHN0YXRlCisJYmVxcwl1c2VyX3dyaXRlCitzdXBlcl93cml0ZToKKwltb3ZlYgkoJWEwKSssKCVhMSkrCisJc3VicWwJIzEsJWQwCisJYm5lcwlzdXBlcl93cml0ZQorCXJ0cwordXNlcl93cml0ZToKKwltb3ZlbAklZDEsLSglc3ApCXxwcmVzZXJ2ZSBkMSBqdXN0IGluIGNhc2UKKwltb3ZlbAklZDAsLSglc3ApCisJbW92ZWwJJWExLC0oJXNwKQorCW1vdmVsCSVhMCwtKCVzcCkKKwlqc3IJCWNvcHlvdXQKKwlhZGR3CSMxMiwlc3AKKwltb3ZlbAkoJXNwKSssJWQxCisJcnRzCit8Cit8CW1lbV9yZWFkIC0tLSByZWFkIGZyb20gdXNlciBvciBzdXBlcnZpc29yIGFkZHJlc3Mgc3BhY2UKK3wKK3wgUmVhZHMgZnJvbSBtZW1vcnkgd2hpbGUgaW4gc3VwZXJ2aXNvciBtb2RlLiAgY29weWluIGFjY29tcGxpc2hlcworfCB0aGlzIHZpYSBhICdtb3ZlcycgaW5zdHJ1Y3Rpb24uICBjb3B5aW4gaXMgYSBVTklYIFNWUjMgKGFuZCBsYXRlcikgZnVuY3Rpb24uCit8IElmIHlvdSBkb24ndCBoYXZlIGNvcHlpbiwgdXNlIHRoZSBsb2NhbCBjb3B5IG9mIHRoZSBmdW5jdGlvbiBiZWxvdy4KK3wKK3wgVGhlIEZQU1AgY2FsbHMgbWVtX3JlYWQgdG8gcmVhZCB0aGUgb3JpZ2luYWwgRi1saW5lIGluc3RydWN0aW9uIGluIG9yZGVyCit8IHRvIGV4dHJhY3QgdGhlIGRhdGEgcmVnaXN0ZXIgbnVtYmVyIHdoZW4gdGhlICdEbicgYWRkcmVzc2luZyBtb2RlIGlzCit8IHVzZWQuCit8Cit8SW5wdXQ6Cit8CWEwIC0gdXNlciBzb3VyY2UgYWRkcmVzcworfAlhMSAtIHN1cGVydmlzb3IgZGVzdGluYXRpb24gYWRkcmVzcworfAlkMCAtIG51bWJlciBvZiBieXRlcyB0byByZWFkIChtYXhpbXVtIGNvdW50IGlzIDEyKQorfAorfCBMaWtlIG1lbV93cml0ZSwgbWVtX3JlYWQgYWx3YXlzIHJlYWRzIHdpdGggYSBzdXBlcnZpc29yCit8IGRlc3RpbmF0aW9uIGFkZHJlc3Mgb24gdGhlIHN1cGVydmlzb3Igc3RhY2suICBBbHNvIGxpa2UgbWVtX3dyaXRlLAorfCB0aGUgRVhDX1NSIGlzIGNoZWNrZWQgYW5kIGEgc2ltcGxlIG1lbW9yeSBjb3B5IGlzIGRvbmUgaWYgcmVhZGluZworfCBmcm9tIHN1cGVydmlzb3Igc3BhY2UgaXMgaW5kaWNhdGVkLgorfAorCS5nbG9iYWwJbWVtX3JlYWQKK21lbV9yZWFkOgorCWJ0c3RiCSM1LEVYQ19TUiglYTYpCXxjaGVjayBmb3Igc3VwZXJ2aXNvciBzdGF0ZQorCWJlcXMJdXNlcl9yZWFkCitzdXBlcl9yZWFkOgorCW1vdmViCSglYTApKywoJWExKSsKKwlzdWJxbAkjMSwlZDAKKwlibmVzCXN1cGVyX3JlYWQKKwlydHMKK3VzZXJfcmVhZDoKKwltb3ZlbAklZDEsLSglc3ApCXxwcmVzZXJ2ZSBkMSBqdXN0IGluIGNhc2UKKwltb3ZlbAklZDAsLSglc3ApCisJbW92ZWwJJWExLC0oJXNwKQorCW1vdmVsCSVhMCwtKCVzcCkKKwlqc3IJY29weWluCisJYWRkdwkjMTIsJXNwCisJbW92ZWwJKCVzcCkrLCVkMQorCXJ0cworCit8Cit8IFVzZSB0aGVzZSByb3V0aW5lcyBpZiB5b3VyIGtlcm5lbCBkb2Vzbid0IGhhdmUgY29weW91dC9jb3B5aW4gZXF1aXZhbGVudHMuCit8IEFzc3VtZXMgdGhhdCBEMC9EMS9BMC9BMSBhcmUgc2NyYXRjaCByZWdpc3RlcnMuIGNvcHlvdXQgb3ZlcndyaXRlcyBERkMsCit8IGFuZCBjb3B5aW4gb3ZlcndyaXRlcyBTRkMuCit8Citjb3B5b3V0OgorCW1vdmVsCTQoJXNwKSwlYTAJfCBzb3VyY2UKKwltb3ZlbAk4KCVzcCksJWExCXwgZGVzdGluYXRpb24KKwltb3ZlbAkxMiglc3ApLCVkMAl8IGNvdW50CisJc3VibAkjMSwlZDAJCXwgZGVjIGNvdW50IGJ5IDEgZm9yIGRicmEKKwltb3ZlbAkjMSwlZDEKKworfAlERkMgaXMgYWxyZWFkeSBzZXQKK3wJbW92ZWMJJWQxLCVERkMJCXwgc2V0IGRmYyBmb3IgdXNlciBkYXRhIHNwYWNlCittb3Jlb3V0OgorCW1vdmViCSglYTApKywlZDEJfCBmZXRjaCBzdXBlcnZpc29yIGJ5dGUKK291dF9lYToKKwltb3Zlc2IJJWQxLCglYTEpKwl8IHdyaXRlIHVzZXIgYnl0ZQorCWRiZgklZDAsbW9yZW91dAorCXJ0cworCitjb3B5aW46CisJbW92ZWwJNCglc3ApLCVhMAl8IHNvdXJjZQorCW1vdmVsCTgoJXNwKSwlYTEJfCBkZXN0aW5hdGlvbgorCW1vdmVsCTEyKCVzcCksJWQwCXwgY291bnQKKwlzdWJsCSMxLCVkMAkJfCBkZWMgY291bnQgYnkgMSBmb3IgZGJyYQorCW1vdmVsCSMxLCVkMQorfAlTRkMgaXMgYWxyZWFkeSBzZXQKK3wJbW92ZWMJJWQxLCVTRkMJCXwgc2V0IHNmYyBmb3IgdXNlciBzcGFjZQorbW9yZWluOgoraW5fZWE6CisJbW92ZXNiCSglYTApKywlZDEJfCBmZXRjaCB1c2VyIGJ5dGUKKwltb3ZlYgklZDEsKCVhMSkrCXwgd3JpdGUgc3VwZXJ2aXNvciBieXRlCisJZGJmCSVkMCxtb3JlaW4KKwlydHMKKworCS5zZWN0aW9uIC5maXh1cCwjYWxsb2MsI2V4ZWNpbnN0cgorCS5ldmVuCisxOgorCWpicmEJZnBzcDA0MF9kaWUKKworCS5zZWN0aW9uIF9fZXhfdGFibGUsI2FsbG9jCisJLmFsaWduCTQKKworCS5sb25nCWluX2VhLDFiCisJLmxvbmcJb3V0X2VhLDFiCisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9zbG9nMi5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc2xvZzIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTdmYTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc2xvZzIuUwpAQCAtMCwwICsxLDE4OCBAQAorfAorfAlzbG9nMi5zYSAzLjEgMTIvMTAvOTAKK3wKK3wgICAgICAgVGhlIGVudHJ5IHBvaW50IHNsb2cxMCBjb21wdXRlcyB0aGUgYmFzZS0xMAorfAlsb2dhcml0aG0gb2YgYW4gaW5wdXQgYXJndW1lbnQgWC4KK3wJc2xvZzEwZCBkb2VzIHRoZSBzYW1lIGV4Y2VwdCB0aGUgaW5wdXQgdmFsdWUgaXMgYQorfAlkZW5vcm1hbGl6ZWQgbnVtYmVyLgorfAlzTG9nMiBhbmQgc0xvZzJkIGFyZSB0aGUgYmFzZS0yIGFuYWxvZ3Vlcy4KK3wKK3wgICAgICAgSU5QVVQ6CURvdWJsZS1leHRlbmRlZCB2YWx1ZSBpbiBtZW1vcnkgbG9jYXRpb24gcG9pbnRlZCB0bworfAkJYnkgYWRkcmVzcyByZWdpc3RlciBhMC4KK3wKK3wgICAgICAgT1VUUFVUOiBsb2dfMTAoWCkgb3IgbG9nXzIoWCkgcmV0dXJuZWQgaW4gZmxvYXRpbmctcG9pbnQKK3wJCXJlZ2lzdGVyIGZwMC4KK3wKK3wgICAgICAgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWTogVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMS43Cit8CQl1bHBzIGluIDY0IHNpZ25pZmljYW50IGJpdCwgaS5lLiB3aXRoaW4gMC41MDAzIHVscAorfAkJdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseSByb3VuZGVkCit8CQl0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYworfAkJaW4gZG91YmxlIHByZWNpc2lvbi4KK3wKK3wgICAgICAgU1BFRUQ6CVR3byB0aW1pbmdzIGFyZSBtZWFzdXJlZCwgYm90aCBpbiB0aGUgY29weS1iYWNrIG1vZGUuCit8CQlUaGUgZmlyc3Qgb25lIGlzIG1lYXN1cmVkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGludm9rZWQKK3wJCXRoZSBmaXJzdCB0aW1lIChzbyB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCBkYXRhIGFyZSBub3QKK3wJCWluIGNhY2hlKSwgYW5kIHRoZSBzZWNvbmQgb25lIGlzIG1lYXN1cmVkIHdoZW4gdGhlCit8CQlmdW5jdGlvbiBpcyByZWludm9rZWQgYXQgdGhlIHNhbWUgaW5wdXQgYXJndW1lbnQuCit8Cit8ICAgICAgIEFMR09SSVRITSBhbmQgSU1QTEVNRU5UQVRJT04gTk9URVM6Cit8Cit8ICAgICAgIHNsb2cxMGQ6Cit8Cit8ICAgICAgIFN0ZXAgMC4gICBJZiBYIDwgMCwgY3JlYXRlIGEgTmFOIGFuZCByYWlzZSB0aGUgaW52YWxpZCBvcGVyYXRpb24KK3wgICAgICAgICAgICAgICAgIGZsYWcuIE90aGVyd2lzZSwgc2F2ZSBGUENSIGluIEQxOyBzZXQgRnBDUiB0byBkZWZhdWx0LgorfCAgICAgICBOb3RlczogICAgRGVmYXVsdCBtZWFucyByb3VuZC10by1uZWFyZXN0IG1vZGUsIG5vIGZsb2F0aW5nLXBvaW50Cit8ICAgICAgICAgICAgICAgICB0cmFwcywgYW5kIHByZWNpc2lvbiBjb250cm9sID0gZG91YmxlIGV4dGVuZGVkLgorfAorfCAgICAgICBTdGVwIDEuICAgQ2FsbCBzbG9nbmQgdG8gb2J0YWluIFkgPSBsb2coWCksIHRoZSBuYXR1cmFsIGxvZyBvZiBYLgorfCAgICAgICBOb3RlczogICAgRXZlbiBpZiBYIGlzIGRlbm9ybWFsaXplZCwgbG9nKFgpIGlzIGFsd2F5cyBub3JtYWxpemVkLgorfAorfCAgICAgICBTdGVwIDIuICAgQ29tcHV0ZSBsb2dfMTAoWCkgPSBsb2coWCkgKiAoMS9sb2coMTApKS4KK3wgICAgICAgICAgICAyLjEgIFJlc3RvcmUgdGhlIHVzZXIgRlBDUgorfCAgICAgICAgICAgIDIuMiAgUmV0dXJuIGFucyA6PSBZICogSU5WX0wxMC4KK3wKK3wKK3wgICAgICAgc2xvZzEwOgorfAorfCAgICAgICBTdGVwIDAuICAgSWYgWCA8IDAsIGNyZWF0ZSBhIE5hTiBhbmQgcmFpc2UgdGhlIGludmFsaWQgb3BlcmF0aW9uCit8ICAgICAgICAgICAgICAgICBmbGFnLiBPdGhlcndpc2UsIHNhdmUgRlBDUiBpbiBEMTsgc2V0IEZwQ1IgdG8gZGVmYXVsdC4KK3wgICAgICAgTm90ZXM6ICAgIERlZmF1bHQgbWVhbnMgcm91bmQtdG8tbmVhcmVzdCBtb2RlLCBubyBmbG9hdGluZy1wb2ludAorfCAgICAgICAgICAgICAgICAgdHJhcHMsIGFuZCBwcmVjaXNpb24gY29udHJvbCA9IGRvdWJsZSBleHRlbmRlZC4KK3wKK3wgICAgICAgU3RlcCAxLiAgIENhbGwgc0xvZ04gdG8gb2J0YWluIFkgPSBsb2coWCksIHRoZSBuYXR1cmFsIGxvZyBvZiBYLgorfAorfCAgICAgICBTdGVwIDIuICAgQ29tcHV0ZSBsb2dfMTAoWCkgPSBsb2coWCkgKiAoMS9sb2coMTApKS4KK3wgICAgICAgICAgICAyLjEgIFJlc3RvcmUgdGhlIHVzZXIgRlBDUgorfCAgICAgICAgICAgIDIuMiAgUmV0dXJuIGFucyA6PSBZICogSU5WX0wxMC4KK3wKK3wKK3wgICAgICAgc0xvZzJkOgorfAorfCAgICAgICBTdGVwIDAuICAgSWYgWCA8IDAsIGNyZWF0ZSBhIE5hTiBhbmQgcmFpc2UgdGhlIGludmFsaWQgb3BlcmF0aW9uCit8ICAgICAgICAgICAgICAgICBmbGFnLiBPdGhlcndpc2UsIHNhdmUgRlBDUiBpbiBEMTsgc2V0IEZwQ1IgdG8gZGVmYXVsdC4KK3wgICAgICAgTm90ZXM6ICAgIERlZmF1bHQgbWVhbnMgcm91bmQtdG8tbmVhcmVzdCBtb2RlLCBubyBmbG9hdGluZy1wb2ludAorfCAgICAgICAgICAgICAgICAgdHJhcHMsIGFuZCBwcmVjaXNpb24gY29udHJvbCA9IGRvdWJsZSBleHRlbmRlZC4KK3wKK3wgICAgICAgU3RlcCAxLiAgIENhbGwgc2xvZ25kIHRvIG9idGFpbiBZID0gbG9nKFgpLCB0aGUgbmF0dXJhbCBsb2cgb2YgWC4KK3wgICAgICAgTm90ZXM6ICAgIEV2ZW4gaWYgWCBpcyBkZW5vcm1hbGl6ZWQsIGxvZyhYKSBpcyBhbHdheXMgbm9ybWFsaXplZC4KK3wKK3wgICAgICAgU3RlcCAyLiAgIENvbXB1dGUgbG9nXzEwKFgpID0gbG9nKFgpICogKDEvbG9nKDIpKS4KK3wgICAgICAgICAgICAyLjEgIFJlc3RvcmUgdGhlIHVzZXIgRlBDUgorfCAgICAgICAgICAgIDIuMiAgUmV0dXJuIGFucyA6PSBZICogSU5WX0wyLgorfAorfAorfCAgICAgICBzTG9nMjoKK3wKK3wgICAgICAgU3RlcCAwLiAgIElmIFggPCAwLCBjcmVhdGUgYSBOYU4gYW5kIHJhaXNlIHRoZSBpbnZhbGlkIG9wZXJhdGlvbgorfCAgICAgICAgICAgICAgICAgZmxhZy4gT3RoZXJ3aXNlLCBzYXZlIEZQQ1IgaW4gRDE7IHNldCBGcENSIHRvIGRlZmF1bHQuCit8ICAgICAgIE5vdGVzOiAgICBEZWZhdWx0IG1lYW5zIHJvdW5kLXRvLW5lYXJlc3QgbW9kZSwgbm8gZmxvYXRpbmctcG9pbnQKK3wgICAgICAgICAgICAgICAgIHRyYXBzLCBhbmQgcHJlY2lzaW9uIGNvbnRyb2wgPSBkb3VibGUgZXh0ZW5kZWQuCit8Cit8ICAgICAgIFN0ZXAgMS4gICBJZiBYIGlzIG5vdCBhbiBpbnRlZ2VyIHBvd2VyIG9mIHR3bywgaS5lLiwgWCAhPSAyXmssCit8ICAgICAgICAgICAgICAgICBnbyB0byBTdGVwIDMuCit8Cit8ICAgICAgIFN0ZXAgMi4gICBSZXR1cm4gay4KK3wgICAgICAgICAgICAyLjEgIEdldCBpbnRlZ2VyIGssIFggPSAyXmsuCit8ICAgICAgICAgICAgMi4yICBSZXN0b3JlIHRoZSB1c2VyIEZQQ1IuCit8ICAgICAgICAgICAgMi4zICBSZXR1cm4gYW5zIDo9IGNvbnZlcnQtdG8tZG91YmxlLWV4dGVuZGVkKGspLgorfAorfCAgICAgICBTdGVwIDMuICAgQ2FsbCBzTG9nTiB0byBvYnRhaW4gWSA9IGxvZyhYKSwgdGhlIG5hdHVyYWwgbG9nIG9mIFguCit8Cit8ICAgICAgIFN0ZXAgNC4gICBDb21wdXRlIGxvZ18yKFgpID0gbG9nKFgpICogKDEvbG9nKDIpKS4KK3wgICAgICAgICAgICA0LjEgIFJlc3RvcmUgdGhlIHVzZXIgRlBDUgorfCAgICAgICAgICAgIDQuMiAgUmV0dXJuIGFucyA6PSBZICogSU5WX0wyLgorfAorCit8CQlDb3B5cmlnaHQgKEMpIE1vdG9yb2xhLCBJbmMuIDE5OTAKK3wJCQlBbGwgUmlnaHRzIFJlc2VydmVkCit8Cit8CVRISVMgSVMgVU5QVUJMSVNIRUQgUFJPUFJJRVRBUlkgU09VUkNFIENPREUgT0YgTU9UT1JPTEEKK3wJVGhlIGNvcHlyaWdodCBub3RpY2UgYWJvdmUgZG9lcyBub3QgZXZpZGVuY2UgYW55Cit8CWFjdHVhbCBvciBpbnRlbmRlZCBwdWJsaWNhdGlvbiBvZiBzdWNoIHNvdXJjZSBjb2RlLgorCit8U0xPRzIgICAgaWRudCAgICAyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisJfHhyZWYJdF9mcmNpbngKKwl8eHJlZgl0X29wZXJyCisJfHhyZWYJc2xvZ24KKwl8eHJlZglzbG9nbmQKKworSU5WX0wxMDogIC5sb25nIDB4M0ZGRDAwMDAsMHhERTVCRDhBOSwweDM3Mjg3MTk1LDB4MDAwMDAwMDAKKworSU5WX0wyOiAgIC5sb25nIDB4M0ZGRjAwMDAsMHhCOEFBM0IyOSwweDVDMTdGMEJDLDB4MDAwMDAwMDAKKworCS5nbG9iYWwJc2xvZzEwZAorc2xvZzEwZDoKK3wtLWVudHJ5IHBvaW50IGZvciBMb2cxMChYKSwgWCBpcyBkZW5vcm1hbGl6ZWQKKwltb3ZlbAkJKCVhMCksJWQwCisJYmx0CQlpbnZhbGlkCisJbW92ZWwJCSVkMSwtKCVzcCkKKwljbHJsCQklZDEKKwlic3IJCXNsb2duZAkJCXwgLi4ubG9nKFgpLCBYIGRlbm9ybS4KKwlmbW92ZWwJCSglc3ApKywlZnBjcgorCWZtdWx4CQlJTlZfTDEwLCVmcDAKKwlicmEJCXRfZnJjaW54CisKKwkuZ2xvYmFsCXNsb2cxMAorc2xvZzEwOgorfC0tZW50cnkgcG9pbnQgZm9yIExvZzEwKFgpLCBYIGlzIG5vcm1hbGl6ZWQKKworCW1vdmVsCQkoJWEwKSwlZDAKKwlibHQJCWludmFsaWQKKwltb3ZlbAkJJWQxLC0oJXNwKQorCWNscmwJCSVkMQorCWJzcgkJc2xvZ24JCQl8IC4uLmxvZyhYKSwgWCBub3JtYWwuCisJZm1vdmVsCQkoJXNwKSssJWZwY3IKKwlmbXVseAkJSU5WX0wxMCwlZnAwCisJYnJhCQl0X2ZyY2lueAorCisKKwkuZ2xvYmFsCXNsb2cyZAorc2xvZzJkOgorfC0tZW50cnkgcG9pbnQgZm9yIExvZzIoWCksIFggaXMgZGVub3JtYWxpemVkCisKKwltb3ZlbAkJKCVhMCksJWQwCisJYmx0CQlpbnZhbGlkCisJbW92ZWwJCSVkMSwtKCVzcCkKKwljbHJsCQklZDEKKwlic3IJCXNsb2duZAkJCXwgLi4ubG9nKFgpLCBYIGRlbm9ybS4KKwlmbW92ZWwJCSglc3ApKywlZnBjcgorCWZtdWx4CQlJTlZfTDIsJWZwMAorCWJyYQkJdF9mcmNpbngKKworCS5nbG9iYWwJc2xvZzIKK3Nsb2cyOgorfC0tZW50cnkgcG9pbnQgZm9yIExvZzIoWCksIFggaXMgbm9ybWFsaXplZAorCW1vdmVsCQkoJWEwKSwlZDAKKwlibHQJCWludmFsaWQKKworCW1vdmVsCQk4KCVhMCksJWQwCisJYm5lcwkJY29udGludWUJCXwgLi4uWCBpcyBub3QgMl5rCisKKwltb3ZlbAkJNCglYTApLCVkMAorCWFuZGwJCSMweDdGRkZGRkZGLCVkMAorCXRzdGwJCSVkMAorCWJuZXMJCWNvbnRpbnVlCisKK3wtLVggPSAyXmsuCisJbW92ZXcJCSglYTApLCVkMAorCWFuZGwJCSMweDAwMDA3RkZGLCVkMAorCXN1YmwJCSMweDNGRkYsJWQwCisJZm1vdmVsCQklZDEsJWZwY3IKKwlmbW92ZWwJCSVkMCwlZnAwCisJYnJhCQl0X2ZyY2lueAorCitjb250aW51ZToKKwltb3ZlbAkJJWQxLC0oJXNwKQorCWNscmwJCSVkMQorCWJzcgkJc2xvZ24JCQl8IC4uLmxvZyhYKSwgWCBub3JtYWwuCisJZm1vdmVsCQkoJXNwKSssJWZwY3IKKwlmbXVseAkJSU5WX0wyLCVmcDAKKwlicmEJCXRfZnJjaW54CisKK2ludmFsaWQ6CisJYnJhCQl0X29wZXJyCisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9zbG9nbi5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc2xvZ24uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWFhMDcyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc2xvZ24uUwpAQCAtMCwwICsxLDU5MiBAQAorfAorfAlzbG9nbi5zYSAzLjEgMTIvMTAvOTAKK3wKK3wJc2xvZ24gY29tcHV0ZXMgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIGFuCit8CWlucHV0IHZhbHVlLiBzbG9nbmQgZG9lcyB0aGUgc2FtZSBleGNlcHQgdGhlIGlucHV0IHZhbHVlIGlzIGEKK3wJZGVub3JtYWxpemVkIG51bWJlci4gc2xvZ25wMSBjb21wdXRlcyBsb2coMStYKSwgYW5kIHNsb2ducDFkCit8CWNvbXB1dGVzIGxvZygxK1gpIGZvciBkZW5vcm1hbGl6ZWQgWC4KK3wKK3wJSW5wdXQ6IERvdWJsZS1leHRlbmRlZCB2YWx1ZSBpbiBtZW1vcnkgbG9jYXRpb24gcG9pbnRlZCB0byBieSBhZGRyZXNzCit8CQlyZWdpc3RlciBhMC4KK3wKK3wJT3V0cHV0Oglsb2coWCkgb3IgbG9nKDErWCkgcmV0dXJuZWQgaW4gZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgRnAwLgorfAorfAlBY2N1cmFjeSBhbmQgTW9ub3RvbmljaXR5OiBUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAyIHVscHMgaW4KK3wJCTY0IHNpZ25pZmljYW50IGJpdCwgaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZQorfAkJcmVzdWx0IGlzIHN1YnNlcXVlbnRseSByb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZQorfAkJcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYyBpbiBkb3VibGUgcHJlY2lzaW9uLgorfAorfAlTcGVlZDogVGhlIHByb2dyYW0gc2xvZ24gdGFrZXMgYXBwcm94aW1hdGVseSAxOTAgY3ljbGVzIGZvciBpbnB1dAorfAkJYXJndW1lbnQgWCBzdWNoIHRoYXQgfFgtMXwgPj0gMS8xNiwgd2hpY2ggaXMgdGhlIHVzdWFsCit8CQlzaXR1YXRpb24uIEZvciB0aG9zZSBhcmd1bWVudHMsIHNsb2ducDEgdGFrZXMgYXBwcm94aW1hdGVseQorfAkJIDIxMCBjeWNsZXMuIEZvciB0aGUgbGVzcyBjb21tb24gYXJndW1lbnRzLCB0aGUgcHJvZ3JhbSB3aWxsCit8CQkgcnVuIG5vIHdvcnNlIHRoYW4gMTAlIHNsb3dlci4KK3wKK3wJQWxnb3JpdGhtOgorfAlMT0dOOgorfAlTdGVwIDEuIElmIHxYLTF8IDwgMS8xNiwgYXBwcm94aW1hdGUgbG9nKFgpIGJ5IGFuIG9kZCBwb2x5bm9taWFsIGluCit8CQl1LCB3aGVyZSB1ID0gMihYLTEpLyhYKzEpLiBPdGhlcndpc2UsIG1vdmUgb24gdG8gU3RlcCAyLgorfAorfAlTdGVwIDIuIFggPSAyKiprICogWSB3aGVyZSAxIDw9IFkgPCAyLiBEZWZpbmUgRiB0byBiZSB0aGUgZmlyc3Qgc2V2ZW4KK3wJCXNpZ25pZmljYW50IGJpdHMgb2YgWSBwbHVzIDIqKigtNyksIGkuZS4gRiA9IDEueHh4eHh4MSBpbiBiYXNlCit8CQkyIHdoZXJlIHRoZSBzaXggIngiIG1hdGNoIHRob3NlIG9mIFkuIE5vdGUgdGhhdCB8WS1GfCA8PSAyKiooLTcpLgorfAorfAlTdGVwIDMuIERlZmluZSB1ID0gKFktRikvRi4gQXBwcm94aW1hdGUgbG9nKDErdSkgYnkgYSBwb2x5bm9taWFsIGluIHUsCit8CQlsb2coMSt1KSA9IHBvbHkuCit8Cit8CVN0ZXAgNC4gUmVjb25zdHJ1Y3QgbG9nKFgpID0gbG9nKCAyKiprICogWSApID0gaypsb2coMikgKyBsb2coRikgKyBsb2coMSt1KQorfAkJYnkgaypsb2coMikgKyAobG9nKEYpICsgcG9seSkuIFRoZSB2YWx1ZXMgb2YgbG9nKEYpIGFyZSBjYWxjdWxhdGVkCit8CQliZWZvcmVoYW5kIGFuZCBzdG9yZWQgaW4gdGhlIHByb2dyYW0uCit8Cit8CWxvZ25wMToKK3wJU3RlcCAxOiBJZiB8WHwgPCAxLzE2LCBhcHByb3hpbWF0ZSBsb2coMStYKSBieSBhbiBvZGQgcG9seW5vbWlhbCBpbgorfAkJdSB3aGVyZSB1ID0gMlgvKDIrWCkuIE90aGVyd2lzZSwgbW92ZSBvbiB0byBTdGVwIDIuCit8Cit8CVN0ZXAgMjogTGV0IDErWCA9IDIqKmsgKiBZLCB3aGVyZSAxIDw9IFkgPCAyLiBEZWZpbmUgRiBhcyBkb25lIGluIFN0ZXAgMgorfAkJb2YgdGhlIGFsZ29yaXRobSBmb3IgTE9HTiBhbmQgY29tcHV0ZSBsb2coMStYKSBhcworfAkJaypsb2coMikgKyBsb2coRikgKyBwb2x5IHdoZXJlIHBvbHkgYXBwcm94aW1hdGVzIGxvZygxK3UpLAorfAkJdSA9IChZLUYpL0YuCit8Cit8CUltcGxlbWVudGF0aW9uIE5vdGVzOgorfAlOb3RlIDEuIFRoZXJlIGFyZSA2NCBkaWZmZXJlbnQgcG9zc2libGUgdmFsdWVzIGZvciBGLCB0aHVzIDY0IGxvZyhGKSdzCit8CQluZWVkIHRvIGJlIHRhYnVsYXRlZC4gTW9yZW92ZXIsIHRoZSB2YWx1ZXMgb2YgMS9GIGFyZSBhbHNvCit8CQl0YWJ1bGF0ZWQgc28gdGhhdCB0aGUgZGl2aXNpb24gaW4gKFktRikvRiBjYW4gYmUgcGVyZm9ybWVkIGJ5IGEKK3wJCW11bHRpcGxpY2F0aW9uLgorfAorfAlOb3RlIDIuIEluIFN0ZXAgMiBvZiBsb2ducDEsIGluIG9yZGVyIHRvIHByZXNlcnZlZCBhY2N1cmFjeSwgdGhlIHZhbHVlCit8CQlZLUYgaGFzIHRvIGJlIGNhbGN1bGF0ZWQgY2FyZWZ1bGx5IHdoZW4gMS8yIDw9IFggPCAzLzIuCit8Cit8CU5vdGUgMy4gVG8gZnVsbHkgZXhwbG9pdCB0aGUgcGlwZWxpbmUsIHBvbHlub21pYWxzIGFyZSB1c3VhbGx5IHNlcGFyYXRlZAorfAkJaW50byB0d28gcGFydHMgZXZhbHVhdGVkIGluZGVwZW5kZW50bHkgYmVmb3JlIGJlaW5nIGFkZGVkIHVwLgorfAorCit8CQlDb3B5cmlnaHQgKEMpIE1vdG9yb2xhLCBJbmMuIDE5OTAKK3wJCQlBbGwgUmlnaHRzIFJlc2VydmVkCit8Cit8CVRISVMgSVMgVU5QVUJMSVNIRUQgUFJPUFJJRVRBUlkgU09VUkNFIENPREUgT0YgTU9UT1JPTEEKK3wJVGhlIGNvcHlyaWdodCBub3RpY2UgYWJvdmUgZG9lcyBub3QgZXZpZGVuY2UgYW55Cit8CWFjdHVhbCBvciBpbnRlbmRlZCBwdWJsaWNhdGlvbiBvZiBzdWNoIHNvdXJjZSBjb2RlLgorCit8c2xvZ24JaWRudAkyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCitCT1VORFMxOiAgLmxvbmcgMHgzRkZFRjA3RCwweDNGRkY4ODQxCitCT1VORFMyOiAgLmxvbmcgMHgzRkZFODAwMCwweDNGRkZDMDAwCisKK0xPR09GMjoJLmxvbmcgMHgzRkZFMDAwMCwweEIxNzIxN0Y3LDB4RDFDRjc5QUMsMHgwMDAwMDAwMAorCitvbmU6CS5sb25nIDB4M0Y4MDAwMDAKK3plcm86CS5sb25nIDB4MDAwMDAwMDAKK2luZnR5OgkubG9uZyAweDdGODAwMDAwCituZWdvbmU6CS5sb25nIDB4QkY4MDAwMDAKKworTE9HQTY6CS5sb25nIDB4M0ZDMjQ5OUEsMHhCNUU0MDQwQgorTE9HQTU6CS5sb25nIDB4QkZDNTU1QjUsMHg4NDhDQjdEQgorCitMT0dBNDoJLmxvbmcgMHgzRkM5OTk5OSwweDk4N0Q4NzMwCitMT0dBMzoJLmxvbmcgMHhCRkNGRkZGRiwweEZGNkY3RTk3CisKK0xPR0EyOgkubG9uZyAweDNGRDU1NTU1LDB4NTU1NTU1YTQKK0xPR0ExOgkubG9uZyAweEJGRTAwMDAwLDB4MDAwMDAwMDgKKworTE9HQjU6CS5sb25nIDB4M0YxNzU0OTYsMHhBREQ3REFENgorTE9HQjQ6CS5sb25nIDB4M0YzQzcxQzIsMHhGRTgwQzdFMAorCitMT0dCMzoJLmxvbmcgMHgzRjYyNDkyNCwweDkyOEJDQ0ZGCitMT0dCMjoJLmxvbmcgMHgzRjg5OTk5OSwweDk5OTk5NUVDCisKK0xPR0IxOgkubG9uZyAweDNGQjU1NTU1LDB4NTU1NTU1NTUKK1RXTzoJLmxvbmcgMHg0MDAwMDAwMCwweDAwMDAwMDAwCisKK0xUSE9MRDoJLmxvbmcgMHgzZjk5MDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCitMT0dUQkw6CisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhGRTAzRjgwRiwweEUwM0Y4MEZFLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkY3MDAwMCwweEZGMDE1MzU4LDB4ODMzQzQ3RTIsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4RkEyMzJDRjIsMHg1MjEzOEFDMCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGOTAwMDAsMHhCREM4RDgzRSwweEFEODhENTQ5LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEY2NjAzRDk4LDB4MEY2NjAzREEsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkEwMDAwLDB4OUNGNDNEQ0YsMHhGNUVBRkQ0OCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhGMkI5RDY0OCwweDBGMkI5RDY1LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZBMDAwMCwweERBMTZFQjg4LDB4Q0I4REY2MTQsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4RUYyRUI3MUYsMHhDNDM0NTIzOCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGQjAwMDAsMHg4QjI5Qjc3NSwweDFCRDcwNzQzLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEVCQkRCMkE1LDB4QzE2MTlDOEMsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkIwMDAwLDB4QThEODM5RjgsMHgzMEMxRkI0OSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhFODY1QUM3QiwweDc2MDNBMTk3LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZCMDAwMCwweEM2MUEyRUIxLDB4OENEOTA3QUQsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4RTUyNTk4MkEsMHhGNzBDODgwRSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGQjAwMDAsMHhFMkYyQTQ3QSwweERFM0ExOEFGLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEUxRkM3ODBFLDB4MUZDNzgwRTIsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkIwMDAwLDB4RkY2NDg5OEUsMHhERjU1RDU1MSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhERUU5NUM0QywweEEwMzdCQTU3LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZDMDAwMCwweDhEQjk1NkE5LDB4N0IzRDAxNDgsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4REJFQjYxRUUsMHhEMTlDNTk1OCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGQzAwMDAsMHg5QjhGRTEwMCwweEY0N0JBMURFLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEQ5MDFCMjAzLDB4NjQwNkM4MEUsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkMwMDAwLDB4QTkzNzJGMUQsMHgwREExQkQxNywweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhENjJCODBENiwweDJCODBENjJDLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZDMDAwMCwweEI2QjA3RjM4LDB4Q0U5MEU0NkIsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4RDM2ODBEMzYsMHg4MEQzNjgwRCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGQzAwMDAsMHhDM0ZEMDMyOSwweDA2NDg4NDgxLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEQwQjY5RkNCLDB4RDI1ODBEMEIsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkMwMDAwLDB4RDExREUwRkYsMHgxNUFCMThDQSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhDRTE2OEE3NywweDI1MDgwQ0UxLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZDMDAwMCwweERFMTQzM0ExLDB4NkM2NkIxNTAsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4Q0I4NzI3QzAsMHg2NUMzOTNFMCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGQzAwMDAsMHhFQUUxMEI1QSwweDdEREM4QURELDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEM5MDdEQTRFLDB4ODcxMTQ2QUQsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkMwMDAwLDB4Rjc4NTZFNUUsMHhFMkM5QjI5MSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhDNjk4MEM2OSwweDgwQzY5ODBDLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZEMDAwMCwweDgyMDEyQ0E1LDB4QTY4MjA2RDcsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4QzQzNzJGODUsMHg1RDgyNENBNiwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRDAwMDAsMHg4ODJDNUZDRCwweDcyNTZBOEM1LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEMxRTRCQkQ1LDB4OTVGNkU5NDcsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkQwMDAwLDB4OEU0NEM2MEIsMHg0Q0NGRDdERSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhCRkEwMkZFOCwweDBCRkEwMkZGLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZEMDAwMCwweDk0NEFEMDlFLDB4RjQzNTFBRjYsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4QkQ2OTEwNDcsMHgwNzY2MUFBMywweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRDAwMDAsMHg5QTNFRUNENCwweEMzRUFBNkIyLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEJCM0VFNzIxLDB4QTU0RDg4MEMsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkQwMDAwLDB4QTAyMTg0MzQsMHgzNTNGMURFOCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhCOTIxNDNGQSwweDM2RjVFMDJFLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZEMDAwMCwweEE1RjJGQ0FCLDB4QkJDNTA2REEsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4QjcwRkJCNUEsMHgxOUJFMzY1OSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRDAwMDAsMHhBQkIzQjhCQSwweDJBRDM2MkE1LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEI1MDlFNjhBLDB4OUI5NDgyMUYsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkQwMDAwLDB4QjE2NDE3OTUsMHhDRTNDQTk3QiwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhCMzBGNjM1MiwweDg5MTdDODBCLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZEMDAwMCwweEI3MDQ3NTUxLDB4NUQwRjFDNjEsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4QjExRkQzQjgsMHgwQjExRkQzQywweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRDAwMDAsMHhCQzk1MkFGRSwweEVBM0QxM0UxLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEFGM0FEREM2LDB4ODBBRjNBREUsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkQwMDAwLDB4QzIxNjhFRDAsMHhGNDU4QkE0QSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhBRDYwMkI1OCwweDBBRDYwMkI2LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZEMDAwMCwweEM3ODhGNDM5LDB4QjMxNjNCRjEsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4QUI4RjY5RTIsMHg4MzU5Q0QxMSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRDAwMDAsMHhDQ0VDQUMwOCwweEJGMDQ1NjVELDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEE5Qzg0QTQ3LDB4QTA3RjU2MzgsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkQwMDAwLDB4RDI0MjA0ODcsMHgyREQ4NTE2MCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhBODBBODBBOCwweDBBODBBODBCLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZEMDAwMCwweEQ3ODk0OTkyLDB4M0JDMzU4OEEsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4QTY1NUM0MzksMHgyRDdCNzNBOCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRDAwMDAsMHhEQ0MyQzRCNCwweDk4ODdEQUNDLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEE0QTlDRjFELDB4OTY4MzM3NTEsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkQwMDAwLDB4RTFFRUJEM0UsMHg2RDZBNkI5RSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhBMzA2NUUzRiwweEFFN0NEMEUwLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZEMDAwMCwweEU3MEQ3ODVDLDB4MkY5RjVCREMsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4QTE2QjMxMkUsMHhBOEZDMzc3RCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRDAwMDAsMHhFQzFGMzkyQywweDUxNzlGMjgzLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDlGRDgwOUZELDB4ODA5RkQ4MEEsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkQwMDAwLDB4RjEyNDQwRDMsMHhFMzYxMzBFNiwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg5RTRDQUQyMywweERENUYzQTIwLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZEMDAwMCwweEY2MUNDRTkyLDB4MzQ2NjAwQkIsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4OUNDOEUxNjAsMHhDM0ZCMTlCOSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRDAwMDAsMHhGQjA5MUZEMywweDgxNDU2MzBBLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDlCNEM2RjlFLDB4RjAzQTNDQUEsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkQwMDAwLDB4RkZFOTcwNDIsMHhCRkE0QzJBRCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg5OUQ3MjJEQSwweEJERTU4RjA2LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDgyNUVGQ0VELDB4NDkzNjkzMzAsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4OTg2OEM4MDksMHg4NjhDODA5OCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg4NEMzN0E3QSwweEI5QTkwNUM5LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDk3MDEyRTAyLDB4NUMwNEI4MDksMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4ODcyMjRDMkUsMHg4RTY0NUZCNywweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg5NUEwMjU2OCwweDA5NUEwMjU3LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDg5N0I4Q0FDLDB4OUY3REUyOTgsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4OTQ0NTgwOTQsMHg0NTgwOTQ0NiwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg4QkNGNTVERSwweEM0Q0QwNUZFLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDkyRjExMzg0LDB4MDQ5Nzg4OUMsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4OEUxREMwRkIsMHg4OUUxMjVFNSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg5MUEyQjNDNCwweEQ1RTZGODA5LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDkwNjZFNjhDLDB4OTU1QjZDOUIsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4OTA1QTM4NjMsMHgzRTA2QzQzQiwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg5MkFBREU3NCwweEM3QkU1OUUwLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDhGMTc3OUQ5LDB4RkRDM0EyMTksMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4OTRFOUJGRjYsMHgxNTg0NTY0MywweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg4RERBNTIwMiwweDM3Njk0ODA5LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDk3MjNBMUI3LDB4MjAxMzQyMDMsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4OENBMjlDMDQsMHg2NTE0RTAyMywweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg5OTU4OTlDOCwweDkwRUI4OTkwLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDhCNzAzNDRBLDB4MTM5QkM3NUEsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4OUI4OEJEQUEsMHgzQTNEQUUyRiwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg4QTQyRjg3MCwweDU2NjlEQjQ2LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDlEQjQyMjRGLDB4RkZFMTE1N0MsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4ODkxQUM3M0EsMHhFOTgxOUI1MCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg5RkRBREMyNiwweDhCN0ExMkRBLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDg3Rjc4MDg3LDB4Rjc4MDg3RjgsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4QTFGQ0ZGMTcsMHhDRTczM0JENCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg4NkQ5MDU0NCwweDdBMzRBQ0M2LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEE0MUE5RThGLDB4NTQ0NkZCOUYsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4ODVCRjM3NjEsMHgyQ0VFM0M5QiwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhBNjMzQ0Q3RSwweDY3NzFDRDhCLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDg0QTlGOUM4LDB4MDg0QTlGOUQsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4QTg0ODlFNjAsMHgwQjQzNUE1RSwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg4Mzk5MzA1MiwweDNGQkUzMzY4LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEFBNTkyMzNDLDB4Q0NBNEJENDksMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4ODI4Q0JGQkUsMHhCOUEwMjBBMywweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHhBQzY1NkRBRSwweDZCQ0M0OTg1LDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweDgxODQ4REE4LDB4RkFGMEQyNzcsMHgwMDAwMDAwMAorCS5sb25nICAweDNGRkUwMDAwLDB4QUU2RDhFRTMsMHg2MEJCMjQ2OCwweDAwMDAwMDAwCisJLmxvbmcgIDB4M0ZGRTAwMDAsMHg4MDgwODA4MCwweDgwODA4MDgxLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgzRkZFMDAwMCwweEIwNzE5N0EyLDB4M0M0NkM2NTQsMHgwMDAwMDAwMAorCisJLnNldAlBREpLLExfU0NSMQorCisJLnNldAlYLEZQX1NDUjEKKwkuc2V0CVhEQ0FSRSxYKzIKKwkuc2V0CVhGUkFDLFgrNAorCisJLnNldAlGLEZQX1NDUjIKKwkuc2V0CUZGUkFDLEYrNAorCisJLnNldAlLTE9HMixGUF9TQ1IzCisKKwkuc2V0CVNBVkVVLEZQX1NDUjQKKworCXwgeHJlZgl0X2ZyY2lueAorCXx4cmVmCXRfZXh0ZG5ybQorCXx4cmVmCXRfb3BlcnIKKwl8eHJlZgl0X2R6CisKKwkuZ2xvYmFsCXNsb2duZAorc2xvZ25kOgorfC0tRU5UUlkgUE9JTlQgRk9SIExPRyhYKSBGT1IgREVOT1JNQUxJWkVEIElOUFVUCisKKwltb3ZlbAkJIy0xMDAsQURKSyglYTYpCXwgLi4uSU5QVVQgPSAyXihBREpLKSAqIEZQMAorCit8LS0tLW5vcm1hbGl6ZSB0aGUgaW5wdXQgdmFsdWUgYnkgbGVmdCBzaGlmdGluZyBrIGJpdHMgKGsgdG8gYmUgZGV0ZXJtaW5lZAorfC0tLS1iZWxvdyksIGFkanVzdGluZyBleHBvbmVudCBhbmQgc3RvcmluZyAtayB0byAgQURKSworfC0tLS10aGUgdmFsdWUgVFdPVE8xMDAgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KK3wtLS0tTm90ZSB0aGF0IHRoaXMgY29kZSBhc3N1bWVzIHRoZSBkZW5vcm1hbGl6ZWQgaW5wdXQgaXMgTk9OLVpFUk8uCisKKyAgICAgbW92ZW1sCSVkMi0lZDcsLSglYTcpCQl8IC4uLnNhdmUgc29tZSByZWdpc3RlcnMKKyAgICAgbW92ZWwJIzB4MDAwMDAwMDAsJWQzCQl8IC4uLkQzIGlzIGV4cG9uZW50IG9mIHNtYWxsZXN0IG5vcm0uICMKKyAgICAgbW92ZWwJNCglYTApLCVkNAorICAgICBtb3ZlbAk4KCVhMCksJWQ1CQl8IC4uLihENCxENSkgaXMgKEhpX1gsTG9fWCkKKyAgICAgY2xybAklZDIJCQl8IC4uLkQyIHVzZWQgZm9yIGhvbGRpbmcgSworCisgICAgIHRzdGwJJWQ0CisgICAgIGJuZXMJSGlYX25vdDAKKworSGlYXzA6CisgICAgIG1vdmVsCSVkNSwlZDQKKyAgICAgY2xybAklZDUKKyAgICAgbW92ZWwJIzMyLCVkMgorICAgICBjbHJsCSVkNgorICAgICBiZmZmbyAgICAgICVkNHsjMDojMzJ9LCVkNgorICAgICBsc2xsICAgICAgJWQ2LCVkNAorICAgICBhZGRsCSVkNiwlZDIJCQl8IC4uLihEMyxENCxENSkgaXMgbm9ybWFsaXplZAorCisgICAgIG1vdmVsCSVkMyxYKCVhNikKKyAgICAgbW92ZWwJJWQ0LFhGUkFDKCVhNikKKyAgICAgbW92ZWwJJWQ1LFhGUkFDKzQoJWE2KQorICAgICBuZWdsCSVkMgorICAgICBtb3ZlbAklZDIsQURKSyglYTYpCisgICAgIGZtb3ZleAlYKCVhNiksJWZwMAorICAgICBtb3ZlbWwJKCVhNykrLCVkMi0lZDcJCXwgLi4ucmVzdG9yZSByZWdpc3RlcnMKKyAgICAgbGVhCVgoJWE2KSwlYTAKKyAgICAgYnJhcwlMT0dCR04JCQl8IC4uLmJlZ2luIHJlZ3VsYXIgbG9nKFgpCisKKworSGlYX25vdDA6CisgICAgIGNscmwJJWQ2CisgICAgIGJmZmZvCSVkNHsjMDojMzJ9LCVkNgkJfCAuLi5maW5kIGZpcnN0IDEKKyAgICAgbW92ZWwJJWQ2LCVkMgkJCXwgLi4uZ2V0IGsKKyAgICAgbHNsbAklZDYsJWQ0CisgICAgIG1vdmVsCSVkNSwlZDcJCQl8IC4uLmEgY29weSBvZiBENQorICAgICBsc2xsCSVkNiwlZDUKKyAgICAgbmVnbAklZDYKKyAgICAgYWRkaWwJIzMyLCVkNgorICAgICBsc3JsCSVkNiwlZDcKKyAgICAgb3JsCSVkNywlZDQJCQl8IC4uLihEMyxENCxENSkgbm9ybWFsaXplZAorCisgICAgIG1vdmVsCSVkMyxYKCVhNikKKyAgICAgbW92ZWwJJWQ0LFhGUkFDKCVhNikKKyAgICAgbW92ZWwJJWQ1LFhGUkFDKzQoJWE2KQorICAgICBuZWdsCSVkMgorICAgICBtb3ZlbAklZDIsQURKSyglYTYpCisgICAgIGZtb3ZleAlYKCVhNiksJWZwMAorICAgICBtb3ZlbWwJKCVhNykrLCVkMi0lZDcJCXwgLi4ucmVzdG9yZSByZWdpc3RlcnMKKyAgICAgbGVhCVgoJWE2KSwlYTAKKyAgICAgYnJhcwlMT0dCR04JCQl8IC4uLmJlZ2luIHJlZ3VsYXIgbG9nKFgpCisKKworCS5nbG9iYWwJc2xvZ24KK3Nsb2duOgorfC0tRU5UUlkgUE9JTlQgRk9SIExPRyhYKSBGT1IgWCBGSU5JVEUsIE5PTi1aRVJPLCBOT1QgTkFOJ1MKKworCWZtb3ZleAkJKCVhMCksJWZwMAl8IC4uLkxPQUQgSU5QVVQKKwltb3ZlbAkJIzB4MDAwMDAwMDAsQURKSyglYTYpCisKK0xPR0JHTjoKK3wtLUZQQ1IgU0FWRUQgQU5EIENMRUFSRUQsIElOUFVUIElTIDJeKEFESkspKkZQMCwgRlAwIENPTlRBSU5TCit8LS1BIEZJTklURSwgTk9OLVpFUk8sIE5PUk1BTElaRUQgTlVNQkVSLgorCisJbW92ZWwJKCVhMCksJWQwCisJbW92ZXcJNCglYTApLCVkMAorCisJbW92ZWwJKCVhMCksWCglYTYpCisJbW92ZWwJNCglYTApLFgrNCglYTYpCisJbW92ZWwJOCglYTApLFgrOCglYTYpCisKKwljbXBpbAkjMCwlZDAJCXwgLi4uQ0hFQ0sgSUYgWCBJUyBORUdBVElWRQorCWJsdAlMT0dORUcJCXwgLi4uTE9HIE9GIE5FR0FUSVZFIEFSR1VNRU5UIElTIElOVkFMSUQKKwljbXAybAlCT1VORFMxLCVkMAl8IC4uLlggSVMgUE9TSVRJVkUsIENIRUNLIElGIFggSVMgTkVBUiAxCisJYmNjCUxPR05FQVIxCXwgLi4uQk9VTkRTIElTIFJPVUdITFkgWzE1LzE2LCAxNy8xNl0KKworTE9HTUFJTjoKK3wtLVRISVMgU0hPVUxEIEJFIFRIRSBVU1VBTCBDQVNFLCBYIE5PVCBWRVJZIENMT1NFIFRPIDEKKworfC0tWCA9IDJeKEspICogWSwgMSA8PSBZIDwgMi4gVEhVUywgWSA9IDEuWFhYWFhYWFguLi4uWFggSU4gQklOQVJZLgorfC0tV0UgREVGSU5FIEYgPSAxLlhYWFhYWDEsIEkuRS4gRklSU1QgNyBCSVRTIE9GIFkgQU5EIEFUVEFDSCBBIDEuCit8LS1USEUgSURFQSBJUyBUSEFUIExPRyhYKSA9IEsqTE9HMiArIExPRyhZKQorfC0tCQkJID0gSypMT0cyICsgTE9HKEYpICsgTE9HKDEgKyAoWS1GKS9GKS4KK3wtLU5PVEUgVEhBVCBVID0gKFktRikvRiBJUyBWRVJZIFNNQUxMIEFORCBUSFVTIEFQUFJPWElNQVRJTkcKK3wtLUxPRygxK1UpIENBTiBCRSBWRVJZIEVGRklDSUVOVC4KK3wtLUFMU08gTk9URSBUSEFUIFRIRSBWQUxVRSAxL0YgSVMgU1RPUkVEIElOIEEgVEFCTEUgU08gVEhBVCBOTworfC0tRElWSVNJT04gSVMgTkVFREVEIFRPIENBTENVTEFURSAoWS1GKS9GLgorCit8LS1HRVQgSywgWSwgRiwgQU5EIEFERFJFU1MgT0YgMS9GLgorCWFzcmwJIzgsJWQwCisJYXNybAkjOCwlZDAJCXwgLi4uU0hJRlRFRCAxNiBCSVRTLCBCSUFTRUQgRVhQTy4gT0YgWAorCXN1YmlsCSMweDNGRkYsJWQwCXwgLi4uVEhJUyBJUyBLCisJYWRkbAlBREpLKCVhNiksJWQwCXwgLi4uQURKVVNUIEssIE9SSUdJTkFMIElOUFVUIE1BWSBCRSAgREVOT1JNLgorCWxlYQlMT0dUQkwsJWEwCXwgLi4uQkFTRSBBRERSRVNTIE9GIDEvRiBBTkQgTE9HKEYpCisJZm1vdmVsCSVkMCwlZnAxCQl8IC4uLkNPTlZFUlQgSyBUTyBGTE9BVElORy1QT0lOVCBGT1JNQVQKKworfC0tV0hJTEUgVEhFIENPTlZFUlNJT04gSVMgR09JTkcgT04sIFdFIEdFVCBGIEFORCBBRERSRVNTIE9GIDEvRgorCW1vdmVsCSMweDNGRkYwMDAwLFgoJWE2KQl8IC4uLlggSVMgTk9XIFksIEkuRS4gMl4oLUspKlgKKwltb3ZlbAlYRlJBQyglYTYpLEZGUkFDKCVhNikKKwlhbmRpbAkjMHhGRTAwMDAwMCxGRlJBQyglYTYpIHwgLi4uRklSU1QgNyBCSVRTIE9GIFkKKwlvcmlsCSMweDAxMDAwMDAwLEZGUkFDKCVhNikgfCAuLi5HRVQgRjogQVRUQUNIIEEgMSBBVCBUSEUgRUlHSFRIIEJJVAorCW1vdmVsCUZGUkFDKCVhNiksJWQwCXwgLi4uUkVBRFkgVE8gR0VUIEFERFJFU1MgT0YgMS9GCisJYW5kaWwJIzB4N0UwMDAwMDAsJWQwCisJYXNybAkjOCwlZDAKKwlhc3JsCSM4LCVkMAorCWFzcmwJIzQsJWQwCQl8IC4uLlNISUZURUQgMjAsIEQwIElTIFRIRSBESVNQTEFDRU1FTlQKKwlhZGRhbAklZDAsJWEwCQl8IC4uLkEwIElTIFRIRSBBRERSRVNTIEZPUiAxL0YKKworCWZtb3ZleAlYKCVhNiksJWZwMAorCW1vdmVsCSMweDNmZmYwMDAwLEYoJWE2KQorCWNscmwJRis4KCVhNikKKwlmc3VieAlGKCVhNiksJWZwMAkJfCAuLi5ZLUYKKwlmbW92ZW14ICVmcDItJWZwMi8lZnAzLC0oJXNwKQl8IC4uLlNBVkUgRlAyIFdISUxFIEZQMCBJUyBOT1QgUkVBRFkKK3wtLVNVTU1BUlk6IEZQMCBJUyBZLUYsIEEwIElTIEFERFJFU1MgT0YgMS9GLCBGUDEgSVMgSworfC0tUkVHSVNURVJTIFNBVkVEOiBGUENSLCBGUDEsIEZQMgorCitMUDFDT05UMToKK3wtLUFOIFJFLUVOVFJZIFBPSU5UIEZPUiBMT0dOUDEKKwlmbXVseAkoJWEwKSwlZnAwCXwgLi4uRlAwIElTIFUgPSAoWS1GKS9GCisJZm11bHgJTE9HT0YyLCVmcDEJfCAuLi5HRVQgSypMT0cyIFdISUxFIEZQMCBJUyBOT1QgUkVBRFkKKwlmbW92ZXgJJWZwMCwlZnAyCisJZm11bHgJJWZwMiwlZnAyCQl8IC4uLkZQMiBJUyBWPVUqVQorCWZtb3ZleAklZnAxLEtMT0cyKCVhNikJfCAuLi5QVVQgSypMT0cyIElOIE1FTU9SWSwgRlJFRSBGUDEKKworfC0tTE9HKDErVSkgSVMgQVBQUk9YSU1BVEVEIEJZCit8LS1VICsgViooQTErVSooQTIrVSooQTMrVSooQTQrVSooQTUrVSpBNikpKSkpIFdISUNIIElTCit8LS1bVSArIFYqKEExK1YqKEEzK1YqQTUpKV0gICsgIFtVKlYqKEEyK1YqKEE0K1YqQTYpKV0KKworCWZtb3ZleAklZnAyLCVmcDMKKwlmbW92ZXgJJWZwMiwlZnAxCisKKwlmbXVsZAlMT0dBNiwlZnAxCXwgLi4uVipBNgorCWZtdWxkCUxPR0E1LCVmcDIJfCAuLi5WKkE1CisKKwlmYWRkZAlMT0dBNCwlZnAxCXwgLi4uQTQrVipBNgorCWZhZGRkCUxPR0EzLCVmcDIJfCAuLi5BMytWKkE1CisKKwlmbXVseAklZnAzLCVmcDEJCXwgLi4uViooQTQrVipBNikKKwlmbXVseAklZnAzLCVmcDIJCXwgLi4uViooQTMrVipBNSkKKworCWZhZGRkCUxPR0EyLCVmcDEJfCAuLi5BMitWKihBNCtWKkE2KQorCWZhZGRkCUxPR0ExLCVmcDIJfCAuLi5BMStWKihBMytWKkE1KQorCisJZm11bHgJJWZwMywlZnAxCQl8IC4uLlYqKEEyK1YqKEE0K1YqQTYpKQorCWFkZGFsCSMxNiwlYTAJCXwgLi4uQUREUkVTUyBPRiBMT0coRikKKwlmbXVseAklZnAzLCVmcDIJCXwgLi4uViooQTErViooQTMrVipBNSkpLCBGUDMgUkVMRUFTRUQKKworCWZtdWx4CSVmcDAsJWZwMQkJfCAuLi5VKlYqKEEyK1YqKEE0K1YqQTYpKQorCWZhZGR4CSVmcDIsJWZwMAkJfCAuLi5VK1YqKEExK1YqKEEzK1YqQTUpKSwgRlAyIFJFTEVBU0VECisKKwlmYWRkeAkoJWEwKSwlZnAxCXwgLi4uTE9HKEYpK1UqViooQTIrViooQTQrVipBNikpCisJZm1vdmVteCAgKCVzcCkrLCVmcDItJWZwMi8lZnAzCXwgLi4uUkVTVE9SRSBGUDIKKwlmYWRkeAklZnAxLCVmcDAJCXwgLi4uRlAwIElTIExPRyhGKSArIExPRygxK1UpCisKKwlmbW92ZWwJJWQxLCVmcGNyCisJZmFkZHgJS0xPRzIoJWE2KSwlZnAwCXwgLi4uRklOQUwgQURECisJYnJhCXRfZnJjaW54CisKKworTE9HTkVBUjE6Cit8LS1SRUdJU1RFUlMgU0FWRUQ6IEZQQ1IsIEZQMS4gRlAwIENPTlRBSU5TIFRIRSBJTlBVVC4KKwlmbW92ZXgJJWZwMCwlZnAxCisJZnN1YnMJb25lLCVmcDEJCXwgLi4uRlAxIElTIFgtMQorCWZhZGRzCW9uZSwlZnAwCQl8IC4uLkZQMCBJUyBYKzEKKwlmYWRkeAklZnAxLCVmcDEJCXwgLi4uRlAxIElTIDIoWC0xKQorfC0tTE9HKFgpID0gTE9HKDErVS8yKS1MT0coMS1VLzIpIFdISUNIIElTIEFOIE9ERCBQT0xZTk9NSUFMCit8LS1JTiBVLCBVID0gMihYLTEpLyhYKzEpID0gRlAxL0ZQMAorCitMUDFDT05UMjoKK3wtLVRISVMgSVMgQU4gUkUtRU5UUlkgUE9JTlQgRk9SIExPR05QMQorCWZkaXZ4CSVmcDAsJWZwMQkJfCAuLi5GUDEgSVMgVQorCWZtb3ZlbXggJWZwMi0lZnAyLyVmcDMsLSglc3ApCSB8IC4uLlNBVkUgRlAyCit8LS1SRUdJU1RFUlMgU0FWRUQgQVJFIE5PVyBGUENSLEZQMSxGUDIsRlAzCit8LS1MRVQgVj1VKlUsIFc9VipWLCBDQUxDVUxBVEUKK3wtLVUgKyBVKlYqKEIxICsgViooQjIgKyBWKihCMyArIFYqKEI0ICsgVipCNSkpKSkgQlkKK3wtLVUgKyBVKlYqKCAgW0IxICsgVyooQjMgKyBXKkI1KV0gICsgIFtWKihCMiArIFcqQjQpXSAgKQorCWZtb3ZleAklZnAxLCVmcDAKKwlmbXVseAklZnAwLCVmcDAJfCAuLi5GUDAgSVMgVgorCWZtb3ZleAklZnAxLFNBVkVVKCVhNikgfCAuLi5TVE9SRSBVIElOIE1FTU9SWSwgRlJFRSBGUDEKKwlmbW92ZXgJJWZwMCwlZnAxCisJZm11bHgJJWZwMSwlZnAxCXwgLi4uRlAxIElTIFcKKworCWZtb3ZlZAlMT0dCNSwlZnAzCisJZm1vdmVkCUxPR0I0LCVmcDIKKworCWZtdWx4CSVmcDEsJWZwMwl8IC4uLlcqQjUKKwlmbXVseAklZnAxLCVmcDIJfCAuLi5XKkI0CisKKwlmYWRkZAlMT0dCMywlZnAzIHwgLi4uQjMrVypCNQorCWZhZGRkCUxPR0IyLCVmcDIgfCAuLi5CMitXKkI0CisKKwlmbXVseAklZnAzLCVmcDEJfCAuLi5XKihCMytXKkI1KSwgRlAzIFJFTEVBU0VECisKKwlmbXVseAklZnAwLCVmcDIJfCAuLi5WKihCMitXKkI0KQorCisJZmFkZGQJTE9HQjEsJWZwMSB8IC4uLkIxK1cqKEIzK1cqQjUpCisJZm11bHgJU0FWRVUoJWE2KSwlZnAwIHwgLi4uRlAwIElTIFUqVgorCisJZmFkZHgJJWZwMiwlZnAxCXwgLi4uQjErVyooQjMrVypCNSkgKyBWKihCMitXKkI0KSwgRlAyIFJFTEVBU0VECisJZm1vdmVteCAoJXNwKSssJWZwMi0lZnAyLyVmcDMgfCAuLi5GUDIgUkVTVE9SRUQKKworCWZtdWx4CSVmcDEsJWZwMAl8IC4uLlUqViooIFtCMStXKihCMytXKkI1KV0gKyBbViooQjIrVypCNCldICkKKworCWZtb3ZlbAklZDEsJWZwY3IKKwlmYWRkeAlTQVZFVSglYTYpLCVmcDAKKwlicmEJdF9mcmNpbngKKwlydHMKKworTE9HTkVHOgorfC0tUkVHSVNURVJTIFNBVkVEIEZQQ1IuIExPRygtVkUpIElTIElOVkFMSUQKKwlicmEJdF9vcGVycgorCisJLmdsb2JhbAlzbG9nbnAxZAorc2xvZ25wMWQ6Cit8LS1FTlRSWSBQT0lOVCBGT1IgTE9HKDErWikgRk9SIERFTk9STUFMSVpFRCBJTlBVVAorfCBTaW1wbHkgcmV0dXJuIHRoZSBkZW5vcm0KKworCWJyYQl0X2V4dGRucm0KKworCS5nbG9iYWwJc2xvZ25wMQorc2xvZ25wMToKK3wtLUVOVFJZIFBPSU5UIEZPUiBMT0coMStYKSBGT1IgWCBGSU5JVEUsIE5PTi1aRVJPLCBOT1QgTkFOJ1MKKworCWZtb3ZleAkoJWEwKSwlZnAwCXwgLi4uTE9BRCBJTlBVVAorCWZhYnN4CSVmcDAJCXx0ZXN0IG1hZ25pdHVkZQorCWZjbXB4CUxUSE9MRCwlZnAwCXxjb21wYXJlIHdpdGggbWluIHRocmVzaG9sZAorCWZiZ3QJTFAxUkVBTAkJfGlmIGdyZWF0ZXIsIGNvbnRpbnVlCisJZm1vdmVsCSMwLCVmcHNyCQl8Y2xyIE4gZmxhZyBmcm9tIGNvbXBhcmUKKwlmbW92ZWwJJWQxLCVmcGNyCisJZm1vdmV4CSglYTApLCVmcDAJfHJldHVybiBzaWduZWQgYXJndW1lbnQKKwlicmEJdF9mcmNpbngKKworTFAxUkVBTDoKKwlmbW92ZXgJKCVhMCksJWZwMAl8IC4uLkxPQUQgSU5QVVQKKwltb3ZlbAkjMHgwMDAwMDAwMCxBREpLKCVhNikKKwlmbW92ZXgJJWZwMCwlZnAxCXwgLi4uRlAxIElTIElOUFVUIFoKKwlmYWRkcwlvbmUsJWZwMAl8IC4uLlggOj0gUk9VTkQoMStaKQorCWZtb3ZleAklZnAwLFgoJWE2KQorCW1vdmV3CVhGUkFDKCVhNiksWERDQVJFKCVhNikKKwltb3ZlbAlYKCVhNiksJWQwCisJY21waWwJIzAsJWQwCisJYmxlCUxQMU5FRzAJfCAuLi5MT0cgT0YgWkVSTyBPUiAtVkUKKwljbXAybAlCT1VORFMyLCVkMAorCWJjcwlMT0dNQUlOCXwgLi4uQk9VTkRTMiBJUyBbMS8yLDMvMl0KK3wtLUlGIDErWiA+IDMvMiBPUiAxK1ogPCAxLzIsIFRIRU4gWCwgV0hJQ0ggSVMgUk9VTkRJTkcgMStaLAorfC0tQ09OVEFJTlMgQVQgTEVBU1QgNjMgQklUUyBPRiBJTkZPUk1BVElPTiBPRiBaLiBJTiBUSEFUIENBU0UsCit8LS1TSU1QTFkgSU5WT0tFIExPRyhYKSBGT1IgTE9HKDErWikuCisKK0xQMU5FQVIxOgorfC0tTkVYVCBTRUUgSUYgRVhQKC0xLzE2KSA8IFggPCBFWFAoMS8xNikKKwljbXAybAlCT1VORFMxLCVkMAorCWJjc3MJTFAxQ0FSRQorCitMUDFPTkUxNjoKK3wtLUVYUCgtMS8xNikgPCBYIDwgRVhQKDEvMTYpLiBMT0coMStaKSA9IExPRygxK1UvMikgLSBMT0coMS1VLzIpCit8LS1XSEVSRSBVID0gMlovKDIrWikgPSAyWi8oMStYKS4KKwlmYWRkeAklZnAxLCVmcDEJfCAuLi5GUDEgSVMgMloKKwlmYWRkcwlvbmUsJWZwMAl8IC4uLkZQMCBJUyAxK1gKK3wtLVUgPSBGUDEvRlAwCisJYnJhCUxQMUNPTlQyCisKK0xQMUNBUkU6Cit8LS1IRVJFIFdFIFVTRSBUSEUgVVNVQUwgVEFCTEUgRFJJVkVOIEFQUFJPQUNILiBDQVJFIEhBUyBUTyBCRQorfC0tVEFLRU4gQkVDQVVTRSAxK1ogQ0FOIEhBVkUgNjcgQklUUyBPRiBJTkZPUk1BVElPTiBBTkQgV0UgTVVTVAorfC0tUFJFU0VSVkUgQUxMIFRIRSBJTkZPUk1BVElPTi4gQkVDQVVTRSAxK1ogSVMgSU4gWzEvMiwzLzJdLAorfC0tVEhFUkUgQVJFIE9OTFkgVFdPIENBU0VTLgorfC0tQ0FTRSAxOiAxK1ogPCAxLCBUSEVOIEsgPSAtMSBBTkQgWS1GID0gKDItRikgKyAyWgorfC0tQ0FTRSAyOiAxK1ogPiAxLCBUSEVOIEsgPSAwICBBTkQgWS1GID0gKDEtRikgKyBaCit8LS1PTiBSRVRVUk5JTkcgVE8gTFAxQ09OVDEsIFdFIE1VU1QgSEFWRSBLIElOIEZQMSwgQUREUkVTUyBPRgorfC0tKDEvRikgSU4gQTAsIFktRiBJTiBGUDAsIEFORCBGUDIgU0FWRUQuCisKKwltb3ZlbAlYRlJBQyglYTYpLEZGUkFDKCVhNikKKwlhbmRpbAkjMHhGRTAwMDAwMCxGRlJBQyglYTYpCisJb3JpbAkjMHgwMTAwMDAwMCxGRlJBQyglYTYpCXwgLi4uRiBPQlRBSU5FRAorCWNtcGlsCSMweDNGRkY4MDAwLCVkMAl8IC4uLlNFRSBJRiAxK1ogPiAxCisJYmdlcwlLSVNaRVJPCisKK0tJU05FRzE6CisJZm1vdmVzCVRXTywlZnAwCisJbW92ZWwJIzB4M2ZmZjAwMDAsRiglYTYpCisJY2xybAlGKzgoJWE2KQorCWZzdWJ4CUYoJWE2KSwlZnAwCXwgLi4uMi1GCisJbW92ZWwJRkZSQUMoJWE2KSwlZDAKKwlhbmRpbAkjMHg3RTAwMDAwMCwlZDAKKwlhc3JsCSM4LCVkMAorCWFzcmwJIzgsJWQwCisJYXNybAkjNCwlZDAJCXwgLi4uRDAgQ09OVEFJTlMgRElTUExBQ0VNRU5UIEZPUiAxL0YKKwlmYWRkeAklZnAxLCVmcDEJCXwgLi4uR0VUIDJaCisJZm1vdmVteCAlZnAyLSVmcDIvJWZwMywtKCVzcCkJfCAuLi5TQVZFIEZQMgorCWZhZGR4CSVmcDEsJWZwMAkJfCAuLi5GUDAgSVMgWS1GID0gKDItRikrMloKKwlsZWEJTE9HVEJMLCVhMAl8IC4uLkEwIElTIEFERFJFU1MgT0YgMS9GCisJYWRkYWwJJWQwLCVhMAorCWZtb3ZlcwluZWdvbmUsJWZwMQl8IC4uLkZQMSBJUyBLID0gLTEKKwlicmEJTFAxQ09OVDEKKworS0lTWkVSTzoKKwlmbW92ZXMJb25lLCVmcDAKKwltb3ZlbAkjMHgzZmZmMDAwMCxGKCVhNikKKwljbHJsCUYrOCglYTYpCisJZnN1YngJRiglYTYpLCVmcDAJCXwgLi4uMS1GCisJbW92ZWwJRkZSQUMoJWE2KSwlZDAKKwlhbmRpbAkjMHg3RTAwMDAwMCwlZDAKKwlhc3JsCSM4LCVkMAorCWFzcmwJIzgsJWQwCisJYXNybAkjNCwlZDAKKwlmYWRkeAklZnAxLCVmcDAJCXwgLi4uRlAwIElTIFktRgorCWZtb3ZlbXggJWZwMi0lZnAyLyVmcDMsLSglc3ApCXwgLi4uRlAyIFNBVkVECisJbGVhCUxPR1RCTCwlYTAKKwlhZGRhbAklZDAsJWEwCQl8IC4uLkEwIElTIEFERFJFU1MgT0YgMS9GCisJZm1vdmVzCXplcm8sJWZwMQl8IC4uLkZQMSBJUyBLID0gMAorCWJyYQlMUDFDT05UMQorCitMUDFORUcwOgorfC0tRlBDUiBTQVZFRC4gRDAgSVMgWCBJTiBDT01QQUNUIEZPUk0uCisJY21waWwJIzAsJWQwCisJYmx0cwlMUDFORUcKK0xQMVpFUk86CisJZm1vdmVzCW5lZ29uZSwlZnAwCisKKwlmbW92ZWwJJWQxLCVmcGNyCisJYnJhIHRfZHoKKworTFAxTkVHOgorCWZtb3Zlcwl6ZXJvLCVmcDAKKworCWZtb3ZlbAklZDEsJWZwY3IKKwlicmEJdF9vcGVycgorCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvc21vdmVjci5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc21vdmVjci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMTI3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC9zbW92ZWNyLlMKQEAgLTAsMCArMSwxNjIgQEAKK3wKK3wJc21vdmVjci5zYSAzLjEgMTIvMTAvOTAKK3wKK3wJVGhlIGVudHJ5IHBvaW50IHNNT1ZFQ1IgcmV0dXJucyB0aGUgY29uc3RhbnQgYXQgdGhlCit8CW9mZnNldCBnaXZlbiBpbiB0aGUgaW5zdHJ1Y3Rpb24gZmllbGQuCit8Cit8CUlucHV0OiBBbiBvZmZzZXQgaW4gdGhlIGluc3RydWN0aW9uIHdvcmQuCit8Cit8CU91dHB1dDoJVGhlIGNvbnN0YW50IHJvdW5kZWQgdG8gdGhlIHVzZXIncyByb3VuZGluZworfAkJbW9kZSB1bmNoZWNrZWQgZm9yIG92ZXJmbG93LgorfAorfAlNb2RpZmllZDogZnAwLgorfAorfAorfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfFNNT1ZFQ1IJaWRudAkyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24gOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCisJfHhyZWYJbnJtX3NldAorCXx4cmVmCXJvdW5kCisJfHhyZWYJUElSTgorCXx4cmVmCVBJUlpSTQorCXx4cmVmCVBJUlAKKwl8eHJlZglTTUFMUk4KKwl8eHJlZglTTUFMUlpSTQorCXx4cmVmCVNNQUxSUAorCXx4cmVmCUJJR1JOCisJfHhyZWYJQklHUlpSTQorCXx4cmVmCUJJR1JQCisKK0ZaRVJPOgkubG9uZwkwMDAwMDAwMAorfAorfAlGTU9WRUNSCit8CisJLmdsb2JhbAlzbW92Y3IKK3Ntb3ZjcjoKKwliZmV4dHUJQ01EUkVHMUIoJWE2KXsjOTojN30sJWQwIHxnZXQgb2Zmc2V0CisJYmZleHR1CVVTRVJfRlBDUiglYTYpeyMyNjojMn0sJWQxIHxnZXQgcm1vZGUKK3wKK3wgY2hlY2sgcmFuZ2Ugb2Ygb2Zmc2V0Cit8CisJdHN0YgklZDAJCXxpZiB6ZXJvLCBvZmZzZXQgaXMgdG8gcGkKKwliZXFzCVBJX1RCTAkJfGl0IGlzIHBpCisJY21waWIJIzB4MGEsJWQwCQl8Y2hlY2sgcmFuZ2UgJDAxIC0gJDBhCisJYmxlcwlaX1ZBTAkJfGlmIGluIHRoaXMgcmFuZ2UsIHJldHVybiB6ZXJvCisJY21waWIJIzB4MGUsJWQwCQl8Y2hlY2sgcmFuZ2UgJDBiIC0gJDBlCisJYmxlcwlTTV9UQkwJCXx2YWxpZCBjb25zdGFudHMgaW4gdGhpcyByYW5nZQorCWNtcGliCSMweDJmLCVkMAkJfGNoZWNrIHJhbmdlICQxMCAtICQyZgorCWJsZXMJWl9WQUwJCXxpZiBpbiB0aGlzIHJhbmdlLCByZXR1cm4gemVybworCWNtcGliCSMweDNmLCVkMAkJfGNoZWNrIHJhbmdlICQzMCAtICQzZgorCWJsZQlCR19UQkwJCXx2YWxpZCBjb25zdGFudHMgaW4gdGhpcyByYW5nZQorWl9WQUw6CisJZm1vdmVzCUZaRVJPLCVmcDAKKwlydHMKK1BJX1RCTDoKKwl0c3RiCSVkMQkJfG9mZnNldCBpcyB6ZXJvLCBjaGVjayBmb3Igcm1vZGUKKwliZXFzCVBJX1JOCQl8aWYgemVybywgcm4gbW9kZQorCWNtcGliCSMweDMsJWQxCQl8Y2hlY2sgZm9yIHJwCisJYmVxcwlQSV9SUAkJfGlmIDMsIHJwIG1vZGUKK1BJX1JaUk06CisJbGVhbAlQSVJaUk0sJWEwCXxybW9kZSBpcyByeiBvciBybSwgbG9hZCBQSVJaUk0gaW4gYTAKKwlicmEJc2V0X2ZpbngKK1BJX1JOOgorCWxlYWwJUElSTiwlYTAJCXxybW9kZSBpcyBybiwgbG9hZCBQSVJOIGluIGEwCisJYnJhCXNldF9maW54CitQSV9SUDoKKwlsZWFsCVBJUlAsJWEwCQl8cm1vZGUgaXMgcnAsIGxvYWQgUElSUCBpbiBhMAorCWJyYQlzZXRfZmlueAorU01fVEJMOgorCXN1YmlsCSMweGIsJWQwCQl8bWFrZSBvZmZzZXQgaW4gMCAtIDQgcmFuZ2UKKwl0c3RiCSVkMQkJfGNoZWNrIGZvciBybW9kZQorCWJlcXMJU01fUk4JCXxpZiB6ZXJvLCBybiBtb2RlCisJY21waWIJIzB4MywlZDEJCXxjaGVjayBmb3IgcnAKKwliZXFzCVNNX1JQCQl8aWYgMywgcnAgbW9kZQorU01fUlpSTToKKwlsZWFsCVNNQUxSWlJNLCVhMAl8cm1vZGUgaXMgcnogb3Igcm0sIGxvYWQgU01SWlJNIGluIGEwCisJY21waWIJIzB4MiwlZDAJCXxjaGVjayBpZiByZXN1bHQgaXMgaW5leAorCWJsZQlzZXRfZmlueAl8aWYgMCAtIDIsIGl0IGlzIGluZXhhY3QKKwlicmEJbm9fZmlueAkJfGlmIDMsIGl0IGlzIGV4YWN0CitTTV9STjoKKwlsZWFsCVNNQUxSTiwlYTAJfHJtb2RlIGlzIHJuLCBsb2FkIFNNUk4gaW4gYTAKKwljbXBpYgkjMHgyLCVkMAkJfGNoZWNrIGlmIHJlc3VsdCBpcyBpbmV4CisJYmxlCXNldF9maW54CXxpZiAwIC0gMiwgaXQgaXMgaW5leGFjdAorCWJyYQlub19maW54CQl8aWYgMywgaXQgaXMgZXhhY3QKK1NNX1JQOgorCWxlYWwJU01BTFJQLCVhMAl8cm1vZGUgaXMgcnAsIGxvYWQgU01SUCBpbiBhMAorCWNtcGliCSMweDIsJWQwCQl8Y2hlY2sgaWYgcmVzdWx0IGlzIGluZXgKKwlibGUJc2V0X2ZpbngJfGlmIDAgLSAyLCBpdCBpcyBpbmV4YWN0CisJYnJhCW5vX2ZpbngJCXxpZiAzLCBpdCBpcyBleGFjdAorQkdfVEJMOgorCXN1YmlsCSMweDMwLCVkMAkJfG1ha2Ugb2Zmc2V0IGluIDAgLSBmIHJhbmdlCisJdHN0YgklZDEJCXxjaGVjayBmb3Igcm1vZGUKKwliZXFzCUJHX1JOCQl8aWYgemVybywgcm4gbW9kZQorCWNtcGliCSMweDMsJWQxCQl8Y2hlY2sgZm9yIHJwCisJYmVxcwlCR19SUAkJfGlmIDMsIHJwIG1vZGUKK0JHX1JaUk06CisJbGVhbAlCSUdSWlJNLCVhMAl8cm1vZGUgaXMgcnogb3Igcm0sIGxvYWQgQkdSWlJNIGluIGEwCisJY21waWIJIzB4MSwlZDAJCXxjaGVjayBpZiByZXN1bHQgaXMgaW5leAorCWJsZQlzZXRfZmlueAl8aWYgMCAtIDEsIGl0IGlzIGluZXhhY3QKKwljbXBpYgkjMHg3LCVkMAkJfHNlY29uZCBjaGVjaworCWJsZQlub19maW54CQl8aWYgMCAtIDcsIGl0IGlzIGV4YWN0CisJYnJhCXNldF9maW54CXxpZiA4IC0gZiwgaXQgaXMgaW5leGFjdAorQkdfUk46CisJbGVhbAlCSUdSTiwlYTAJfHJtb2RlIGlzIHJuLCBsb2FkIEJHUk4gaW4gYTAKKwljbXBpYgkjMHgxLCVkMAkJfGNoZWNrIGlmIHJlc3VsdCBpcyBpbmV4CisJYmxlCXNldF9maW54CXxpZiAwIC0gMSwgaXQgaXMgaW5leGFjdAorCWNtcGliCSMweDcsJWQwCQl8c2Vjb25kIGNoZWNrCisJYmxlCW5vX2ZpbngJCXxpZiAwIC0gNywgaXQgaXMgZXhhY3QKKwlicmEJc2V0X2ZpbngJfGlmIDggLSBmLCBpdCBpcyBpbmV4YWN0CitCR19SUDoKKwlsZWFsCUJJR1JQLCVhMAl8cm1vZGUgaXMgcnAsIGxvYWQgU01SUCBpbiBhMAorCWNtcGliCSMweDEsJWQwCQl8Y2hlY2sgaWYgcmVzdWx0IGlzIGluZXgKKwlibGUJc2V0X2ZpbngJfGlmIDAgLSAxLCBpdCBpcyBpbmV4YWN0CisJY21waWIJIzB4NywlZDAJCXxzZWNvbmQgY2hlY2sKKwlibGUJbm9fZmlueAkJfGlmIDAgLSA3LCBpdCBpcyBleGFjdAorfAlicmEJc2V0X2ZpbngJO2lmIDggLSBmLCBpdCBpcyBpbmV4YWN0CitzZXRfZmlueDoKKwlvcmwJI2lueDJhX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBpbmV4Mi9haW5leAorbm9fZmlueDoKKwltdWx1bAkjMTIsJWQwCQkJfHVzZSBvZmZzZXQgdG8gcG9pbnQgaW50byB0YWJsZXMKKwltb3ZlbAklZDEsTF9TQ1IxKCVhNikJCXxsb2FkIG1vZGUgZm9yIHJvdW5kIGNhbGwKKwliZmV4dHUJVVNFUl9GUENSKCVhNil7IzI0OiMyfSwlZDEJfGdldCBwcmVjaXNpb24KKwl0c3RsCSVkMQkJCXxjaGVjayBpZiBleHRlbmRlZCBwcmVjaXNpb24KK3wKK3wgUHJlY2lzaW9uIGlzIGV4dGVuZGVkCit8CisJYm5lcwlub3RfZXh0CQkJfGlmIGV4dGVuZGVkLCBkbyBub3QgY2FsbCByb3VuZAorCWZtb3ZlbXggKCVhMCwlZDApLCVmcDAtJWZwMAkJfHJldHVybiByZXN1bHQgaW4gZnAwCisJcnRzCit8Cit8IFByZWNpc2lvbiBpcyBzaW5nbGUgb3IgZG91YmxlCit8Citub3RfZXh0OgorCXN3YXAJJWQxCQkJfHJuZCBwcmVjIGluIHVwcGVyIHdvcmQgb2YgZDEKKwlhZGRsCUxfU0NSMSglYTYpLCVkMQkJfG1lcmdlIHJtb2RlIGluIGxvdyB3b3JkIG9mIGQxCisJbW92ZWwJKCVhMCwlZDApLEZQX1NDUjEoJWE2KQl8bG9hZCBmaXJzdCB3b3JkIHRvIHRlbXAgc3RvcmFnZQorCW1vdmVsCTQoJWEwLCVkMCksRlBfU0NSMSs0KCVhNikJfGxvYWQgc2Vjb25kIHdvcmQKKwltb3ZlbAk4KCVhMCwlZDApLEZQX1NDUjErOCglYTYpCXxsb2FkIHRoaXJkIHdvcmQKKwljbHJsCSVkMAkJCXxjbGVhciBnLHIscworCWxlYQlGUF9TQ1IxKCVhNiksJWEwCisJYnRzdGIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKKwlzbmUJTE9DQUxfU0dOKCVhMCkJCXxjb252ZXJ0IHRvIGludGVybmFsIGV4dC4gZm9ybWF0CisKKwlic3IJcm91bmQJCQl8Z28gcm91bmQgdGhlIG1hbnRpc3NhCisKKwliZmNscglMT0NBTF9TR04oJWEwKXsjMDojOH0JfGNvbnZlcnQgYmFjayB0byBJRUVFIGV4dCBmb3JtYXQKKwliZXFzCWZpbl9mY3IKKwlic2V0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQorZmluX2ZjcjoKKwlmbW92ZW14ICglYTApLCVmcDAtJWZwMAorCXJ0cworCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvc3JlbV9tb2QuUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NyZW1fbW9kLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM4ZDdmNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NyZW1fbW9kLlMKQEAgLTAsMCArMSw0MjIgQEAKK3wKK3wJc3JlbV9tb2Quc2EgMy4xIDEyLzEwLzkwCit8Cit8ICAgICAgVGhlIGVudHJ5IHBvaW50IHNNT0QgY29tcHV0ZXMgdGhlIGZsb2F0aW5nIHBvaW50IE1PRCBvZiB0aGUKK3wgICAgICBpbnB1dCB2YWx1ZXMgWCBhbmQgWS4gVGhlIGVudHJ5IHBvaW50IHNSRU0gY29tcHV0ZXMgdGhlIGZsb2F0aW5nCit8ICAgICAgcG9pbnQgKElFRUUpIFJFTSBvZiB0aGUgaW5wdXQgdmFsdWVzIFggYW5kIFkuCit8Cit8ICAgICAgSU5QVVQKK3wgICAgICAtLS0tLQorfCAgICAgIERvdWJsZS1leHRlbmRlZCB2YWx1ZSBZIGlzIHBvaW50ZWQgdG8gYnkgYWRkcmVzcyBpbiByZWdpc3RlcgorfCAgICAgIEEwLiBEb3VibGUtZXh0ZW5kZWQgdmFsdWUgWCBpcyBsb2NhdGVkIGluIC0xMihBMCkuIFRoZSB2YWx1ZXMKK3wgICAgICBvZiBYIGFuZCBZIGFyZSBib3RoIG5vbnplcm8gYW5kIGZpbml0ZTsgYWx0aG91Z2ggZWl0aGVyIG9yIGJvdGgKK3wgICAgICBvZiB0aGVtIGNhbiBiZSBkZW5vcm1hbGl6ZWQuIFRoZSBzcGVjaWFsIGNhc2VzIG9mIHplcm9zLCBOYU5zLAorfCAgICAgIGFuZCBpbmZpbml0aWVzIGFyZSBoYW5kbGVkIGVsc2V3aGVyZS4KK3wKK3wgICAgICBPVVRQVVQKK3wgICAgICAtLS0tLS0KK3wgICAgICBGUkVNKFgsWSkgb3IgRk1PRChYLFkpLCBkZXBlbmRpbmcgb24gZW50cnkgcG9pbnQuCit8Cit8ICAgICAgIEFMR09SSVRITQorfCAgICAgICAtLS0tLS0tLS0KK3wKK3wgICAgICAgU3RlcCAxLiAgU2F2ZSBhbmQgc3RyaXAgc2lnbnMgb2YgWCBhbmQgWTogc2lnblggOj0gc2lnbihYKSwKK3wgICAgICAgICAgICAgICAgc2lnblkgOj0gc2lnbihZKSwgWCA6PSB8WHwsIFkgOj0gfFl8LAorfCAgICAgICAgICAgICAgICBzaWduUSA6PSBzaWduWCBFT1Igc2lnblkuIFJlY29yZCB3aGV0aGVyIE1PRCBvciBSRU0KK3wgICAgICAgICAgICAgICAgaXMgcmVxdWVzdGVkLgorfAorfCAgICAgICBTdGVwIDIuICBTZXQgTCA6PSBleHBvKFgpLWV4cG8oWSksIGsgOj0gMCwgUSA6PSAwLgorfCAgICAgICAgICAgICAgICBJZiAoTCA8IDApIHRoZW4KK3wgICAgICAgICAgICAgICAgICAgUiA6PSBYLCBnbyB0byBTdGVwIDQuCit8ICAgICAgICAgICAgICAgIGVsc2UKK3wgICAgICAgICAgICAgICAgICAgUiA6PSAyXigtTClYLCBqIDo9IEwuCit8ICAgICAgICAgICAgICAgIGVuZGlmCit8Cit8ICAgICAgIFN0ZXAgMy4gIFBlcmZvcm0gTU9EKFgsWSkKK3wgICAgICAgICAgICAzLjEgSWYgUiA9IFksIGdvIHRvIFN0ZXAgOS4KK3wgICAgICAgICAgICAzLjIgSWYgUiA+IFksIHRoZW4geyBSIDo9IFIgLSBZLCBRIDo9IFEgKyAxfQorfCAgICAgICAgICAgIDMuMyBJZiBqID0gMCwgZ28gdG8gU3RlcCA0LgorfCAgICAgICAgICAgIDMuNCBrIDo9IGsgKyAxLCBqIDo9IGogLSAxLCBRIDo9IDJRLCBSIDo9IDJSLiBHbyB0bworfCAgICAgICAgICAgICAgICBTdGVwIDMuMS4KK3wKK3wgICAgICAgU3RlcCA0LiAgQXQgdGhpcyBwb2ludCwgUiA9IFggLSBRWSA9IE1PRChYLFkpLiBTZXQKK3wgICAgICAgICAgICAgICAgTGFzdF9TdWJ0cmFjdCA6PSBmYWxzZSAodXNlZCBpbiBTdGVwIDcgYmVsb3cpLiBJZgorfCAgICAgICAgICAgICAgICBNT0QgaXMgcmVxdWVzdGVkLCBnbyB0byBTdGVwIDYuCit8Cit8ICAgICAgIFN0ZXAgNS4gIFIgPSBNT0QoWCxZKSwgYnV0IFJFTShYLFkpIGlzIHJlcXVlc3RlZC4KK3wgICAgICAgICAgICA1LjEgSWYgUiA8IFkvMiwgdGhlbiBSID0gTU9EKFgsWSkgPSBSRU0oWCxZKS4gR28gdG8KK3wgICAgICAgICAgICAgICAgU3RlcCA2LgorfCAgICAgICAgICAgIDUuMiBJZiBSID4gWS8yLCB0aGVuIHsgc2V0IExhc3RfU3VidHJhY3QgOj0gdHJ1ZSwKK3wgICAgICAgICAgICAgICAgUSA6PSBRICsgMSwgWSA6PSBzaWduWSpZIH0uIEdvIHRvIFN0ZXAgNi4KK3wgICAgICAgICAgICA1LjMgVGhpcyBpcyB0aGUgdHJpY2t5IGNhc2Ugb2YgUiA9IFkvMi4gSWYgUSBpcyBvZGQsCit8ICAgICAgICAgICAgICAgIHRoZW4geyBRIDo9IFEgKyAxLCBzaWduWCA6PSAtc2lnblggfS4KK3wKK3wgICAgICAgU3RlcCA2LiAgUiA6PSBzaWduWCpSLgorfAorfCAgICAgICBTdGVwIDcuICBJZiBMYXN0X1N1YnRyYWN0ID0gdHJ1ZSwgUiA6PSBSIC0gWS4KK3wKK3wgICAgICAgU3RlcCA4LiAgUmV0dXJuIHNpZ25RLCBsYXN0IDcgYml0cyBvZiBRLCBhbmQgUiBhcyByZXF1aXJlZC4KK3wKK3wgICAgICAgU3RlcCA5LiAgQXQgdGhpcyBwb2ludCwgUiA9IDJeKC1qKSpYIC0gUSBZID0gWS4gVGh1cywKK3wgICAgICAgICAgICAgICAgWCA9IDJeKGopKihRKzEpWS4gc2V0IFEgOj0gMl4oaikqKFErMSksCit8ICAgICAgICAgICAgICAgIFIgOj0gMC4gUmV0dXJuIHNpZ25RLCBsYXN0IDcgYml0cyBvZiBRLCBhbmQgUi4KK3wKK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworU1JFTV9NT0Q6ICAgIHxpZG50ICAgIDIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKwl8c2VjdGlvbiAgICA4CisKKyNpbmNsdWRlICJmcHNwLmgiCisKKwkuc2V0CU1vZF9GbGFnLExfU0NSMworCS5zZXQJU2lnblksRlBfU0NSMys0CisJLnNldAlTaWduWCxGUF9TQ1IzKzgKKwkuc2V0CVNpZ25RLEZQX1NDUjMrMTIKKwkuc2V0CVNjX0ZsYWcsRlBfU0NSNAorCisJLnNldAlZLEZQX1NDUjEKKwkuc2V0CVlfSGksWSs0CisJLnNldAlZX0xvLFkrOAorCisJLnNldAlSLEZQX1NDUjIKKwkuc2V0CVJfSGksUis0CisJLnNldAlSX0xvLFIrOAorCisKK1NjYWxlOiAgICAgLmxvbmcJMHgwMDAxMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCisJfHhyZWYJdF9hdm9pZF91bnN1cHAKKworICAgICAgICAuZ2xvYmFsICAgICAgICBzbW9kCitzbW9kOgorCisgICBtb3ZlbCAgICAgICAgICAgICAgICMwLE1vZF9GbGFnKCVhNikKKyAgIGJyYXMgICAgICAgICAgICAgICAgTW9kX1JlbQorCisgICAgICAgIC5nbG9iYWwgICAgICAgIHNyZW0KK3NyZW06CisKKyAgIG1vdmVsICAgICAgICAgICAgICAgIzEsTW9kX0ZsYWcoJWE2KQorCitNb2RfUmVtOgorfC4uU2F2ZSBzaWduIG9mIFggYW5kIFkKKyAgIG1vdmVtbCAgICAgICAgICAgICAgJWQyLSVkNywtKCVhNykgICAgIHwgLi4uc2F2ZSBkYXRhIHJlZ2lzdGVycworICAgbW92ZXcgICAgICAgICAgICAgICAoJWEwKSwlZDMKKyAgIG1vdmV3ICAgICAgICAgICAgICAgJWQzLFNpZ25ZKCVhNikKKyAgIGFuZGlsICAgICAgICAgICAgICAgIzB4MDAwMDdGRkYsJWQzICAgfCAuLi5ZIDo9IHxZfAorCit8CisgICBtb3ZlbCAgICAgICAgICAgICAgIDQoJWEwKSwlZDQKKyAgIG1vdmVsICAgICAgICAgICAgICAgOCglYTApLCVkNSAgICAgICAgfCAuLi4oRDMsRDQsRDUpIGlzIHxZfAorCisgICB0c3RsICAgICAgICAgICAgICAgICVkMworICAgYm5lcyAgICAgICAgICAgICAgICBZX05vcm1hbAorCisgICBtb3ZlbCAgICAgICAgICAgICAgICMweDAwMDAzRkZFLCVkMwl8IC4uLiQzRkZEICsgMQorICAgdHN0bCAgICAgICAgICAgICAgICAlZDQKKyAgIGJuZXMgICAgICAgICAgICAgICAgSGlZX25vdDAKKworSGlZXzA6CisgICBtb3ZlbCAgICAgICAgICAgICAgICVkNSwlZDQKKyAgIGNscmwgICAgICAgICAgICAgICAgJWQ1CisgICBzdWJpbCAgICAgICAgICAgICAgICMzMiwlZDMKKyAgIGNscmwgICAgICAgICAgICAgICAgJWQ2CisgICBiZmZmbyAgICAgICAgICAgICAgICAlZDR7IzA6IzMyfSwlZDYKKyAgIGxzbGwgICAgICAgICAgICAgICAgJWQ2LCVkNAorICAgc3VibCAgICAgICAgICAgICAgICAlZDYsJWQzICAgICAgICAgICB8IC4uLihEMyxENCxENSkgaXMgbm9ybWFsaXplZAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLndpdGggYmlhcyAkN0ZGRAorICAgYnJhcyAgICAgICAgICAgICAgICBDaGtfWAorCitIaVlfbm90MDoKKyAgIGNscmwgICAgICAgICAgICAgICAgJWQ2CisgICBiZmZmbyAgICAgICAgICAgICAgICAlZDR7IzA6IzMyfSwlZDYKKyAgIHN1YmwgICAgICAgICAgICAgICAgJWQ2LCVkMworICAgbHNsbCAgICAgICAgICAgICAgICAlZDYsJWQ0CisgICBtb3ZlbCAgICAgICAgICAgICAgICVkNSwlZDcgICAgICAgICAgIHwgLi4uYSBjb3B5IG9mIEQ1CisgICBsc2xsICAgICAgICAgICAgICAgICVkNiwlZDUKKyAgIG5lZ2wgICAgICAgICAgICAgICAgJWQ2CisgICBhZGRpbCAgICAgICAgICAgICAgICMzMiwlZDYKKyAgIGxzcmwgICAgICAgICAgICAgICAgJWQ2LCVkNworICAgb3JsICAgICAgICAgICAgICAgICAlZDcsJWQ0ICAgICAgICAgICB8IC4uLihEMyxENCxENSkgbm9ybWFsaXplZAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLndpdGggYmlhcyAkN0ZGRAorICAgYnJhcyAgICAgICAgICAgICAgICBDaGtfWAorCitZX05vcm1hbDoKKyAgIGFkZGlsICAgICAgICAgICAgICAgIzB4MDAwMDNGRkUsJWQzICAgfCAuLi4oRDMsRDQsRDUpIG5vcm1hbGl6ZWQKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi53aXRoIGJpYXMgJDdGRkQKKworQ2hrX1g6CisgICBtb3ZldyAgICAgICAgICAgICAgIC0xMiglYTApLCVkMAorICAgbW92ZXcgICAgICAgICAgICAgICAlZDAsU2lnblgoJWE2KQorICAgbW92ZXcgICAgICAgICAgICAgICBTaWduWSglYTYpLCVkMQorICAgZW9ybCAgICAgICAgICAgICAgICAlZDAsJWQxCisgICBhbmRpbCAgICAgICAgICAgICAgICMweDAwMDA4MDAwLCVkMQorICAgbW92ZXcgICAgICAgICAgICAgICAlZDEsU2lnblEoJWE2KQl8IC4uLnNpZ24oUSkgb2J0YWluZWQKKyAgIGFuZGlsICAgICAgICAgICAgICAgIzB4MDAwMDdGRkYsJWQwCisgICBtb3ZlbCAgICAgICAgICAgICAgIC04KCVhMCksJWQxCisgICBtb3ZlbCAgICAgICAgICAgICAgIC00KCVhMCksJWQyICAgICAgIHwgLi4uKEQwLEQxLEQyKSBpcyB8WHwKKyAgIHRzdGwgICAgICAgICAgICAgICAgJWQwCisgICBibmVzICAgICAgICAgICAgICAgIFhfTm9ybWFsCisgICBtb3ZlbCAgICAgICAgICAgICAgICMweDAwMDAzRkZFLCVkMAorICAgdHN0bCAgICAgICAgICAgICAgICAlZDEKKyAgIGJuZXMgICAgICAgICAgICAgICAgSGlYX25vdDAKKworSGlYXzA6CisgICBtb3ZlbCAgICAgICAgICAgICAgICVkMiwlZDEKKyAgIGNscmwgICAgICAgICAgICAgICAgJWQyCisgICBzdWJpbCAgICAgICAgICAgICAgICMzMiwlZDAKKyAgIGNscmwgICAgICAgICAgICAgICAgJWQ2CisgICBiZmZmbyAgICAgICAgICAgICAgICAlZDF7IzA6IzMyfSwlZDYKKyAgIGxzbGwgICAgICAgICAgICAgICAgJWQ2LCVkMQorICAgc3VibCAgICAgICAgICAgICAgICAlZDYsJWQwICAgICAgICAgICB8IC4uLihEMCxEMSxEMikgaXMgbm9ybWFsaXplZAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLndpdGggYmlhcyAkN0ZGRAorICAgYnJhcyAgICAgICAgICAgICAgICBJbml0CisKK0hpWF9ub3QwOgorICAgY2xybCAgICAgICAgICAgICAgICAlZDYKKyAgIGJmZmZvICAgICAgICAgICAgICAgICVkMXsjMDojMzJ9LCVkNgorICAgc3VibCAgICAgICAgICAgICAgICAlZDYsJWQwCisgICBsc2xsICAgICAgICAgICAgICAgICVkNiwlZDEKKyAgIG1vdmVsICAgICAgICAgICAgICAgJWQyLCVkNyAgICAgICAgICAgfCAuLi5hIGNvcHkgb2YgRDIKKyAgIGxzbGwgICAgICAgICAgICAgICAgJWQ2LCVkMgorICAgbmVnbCAgICAgICAgICAgICAgICAlZDYKKyAgIGFkZGlsICAgICAgICAgICAgICAgIzMyLCVkNgorICAgbHNybCAgICAgICAgICAgICAgICAlZDYsJWQ3CisgICBvcmwgICAgICAgICAgICAgICAgICVkNywlZDEgICAgICAgICAgIHwgLi4uKEQwLEQxLEQyKSBub3JtYWxpemVkCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ud2l0aCBiaWFzICQ3RkZECisgICBicmFzICAgICAgICAgICAgICAgIEluaXQKKworWF9Ob3JtYWw6CisgICBhZGRpbCAgICAgICAgICAgICAgICMweDAwMDAzRkZFLCVkMCAgIHwgLi4uKEQwLEQxLEQyKSBub3JtYWxpemVkCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ud2l0aCBiaWFzICQ3RkZECisKK0luaXQ6Cit8CisgICBtb3ZlbCAgICAgICAgICAgICAgICVkMyxMX1NDUjEoJWE2KSAgIHwgLi4uc2F2ZSBiaWFzZWQgZXhwbyhZKQorICAgbW92ZWwJCSVkMCxMX1NDUjIoJWE2KQl8c2F2ZSBkMAorICAgc3VibCAgICAgICAgICAgICAgICAlZDMsJWQwICAgICAgICAgICB8IC4uLkwgOj0gZXhwbyhYKS1leHBvKFkpCit8ICAgTW92ZS5MICAgICAgICAgICAgICAgRDAsTCAgICAgICAgICAgIC4uLkQwIGlzIGoKKyAgIGNscmwgICAgICAgICAgICAgICAgJWQ2ICAgICAgICAgICAgICB8IC4uLkQ2IDo9IGNhcnJ5IDwtIDAKKyAgIGNscmwgICAgICAgICAgICAgICAgJWQzICAgICAgICAgICAgICB8IC4uLkQzIGlzIFEKKyAgIG1vdmVhbCAgICAgICAgICAgICAgIzAsJWExICAgICAgICAgICB8IC4uLkExIGlzIGs7IGoraz1MLCBRPTAKKworfC4uKENhcnJ5LEQxLEQyKSBpcyBSCisgICB0c3RsICAgICAgICAgICAgICAgICVkMAorICAgYmdlcyAgICAgICAgICAgICAgICBNb2RfTG9vcAorCit8Li5leHBvKFgpIDwgZXhwbyhZKS4gVGh1cyBYID0gbW9kKFgsWSkKK3wKKyAgIG1vdmVsCQlMX1NDUjIoJWE2KSwlZDAJfHJlc3RvcmUgZDAKKyAgIGJyYSAgICAgICAgICAgICAgICBHZXRfTW9kCisKK3wuLkF0IHRoaXMgcG9pbnQgIFIgPSAyXigtTClYOyBRID0gMDsgayA9IDA7IGFuZCAgaytqID0gTAorCisKK01vZF9Mb29wOgorICAgdHN0bCAgICAgICAgICAgICAgICAlZDYgICAgICAgICAgICAgIHwgLi4udGVzdCBjYXJyeSBiaXQKKyAgIGJndHMgICAgICAgICAgICAgICAgUl9HVF9ZCisKK3wuLkF0IHRoaXMgcG9pbnQgY2FycnkgPSAwLCBSID0gKEQxLEQyKSwgWSA9IChENCxENSkKKyAgIGNtcGwgICAgICAgICAgICAgICAgJWQ0LCVkMSAgICAgICAgICAgfCAuLi5jb21wYXJlIGhpKFIpIGFuZCBoaShZKQorICAgYm5lcyAgICAgICAgICAgICAgICBSX05FX1kKKyAgIGNtcGwgICAgICAgICAgICAgICAgJWQ1LCVkMiAgICAgICAgICAgfCAuLi5jb21wYXJlIGxvKFIpIGFuZCBsbyhZKQorICAgYm5lcyAgICAgICAgICAgICAgICBSX05FX1kKKworfC4uQXQgdGhpcyBwb2ludCwgUiA9IFkKKyAgIGJyYSAgICAgICAgICAgICAgICBSZW1faXNfMAorCitSX05FX1k6Cit8Li51c2UgdGhlIGJvcnJvdyBvZiB0aGUgcHJldmlvdXMgY29tcGFyZQorICAgYmNzcyAgICAgICAgICAgICAgICBSX0xUX1kgICAgICAgICAgfCAuLi5ib3Jyb3cgaXMgc2V0IGlmZiBSIDwgWQorCitSX0dUX1k6Cit8Li5JZiBDYXJyeSBpcyBzZXQsIHRoZW4gWSA8IChDYXJyeSxEMSxEMikgPCAyWS4gT3RoZXJ3aXNlLCBDYXJyeSA9IDAKK3wuLmFuZCBZIDwgKEQxLEQyKSA8IDJZLiBFaXRoZXIgd2F5LCBwZXJmb3JtIFIgLSBZCisgICBzdWJsICAgICAgICAgICAgICAgICVkNSwlZDIgICAgICAgICAgIHwgLi4ubG8oUikgLSBsbyhZKQorICAgc3VieGwgICAgICAgICAgICAgICAlZDQsJWQxICAgICAgICAgICB8IC4uLmhpKFIpIC0gaGkoWSkKKyAgIGNscmwgICAgICAgICAgICAgICAgJWQ2ICAgICAgICAgICAgICB8IC4uLmNsZWFyIGNhcnJ5CisgICBhZGRxbCAgICAgICAgICAgICAgICMxLCVkMyAgICAgICAgICAgfCAuLi5RIDo9IFEgKyAxCisKK1JfTFRfWToKK3wuLkF0IHRoaXMgcG9pbnQsIENhcnJ5PTAsIFIgPCBZLiBSID0gMl4oay1MKVggLSBRWTsgaytqID0gTDsgaiA+PSAwLgorICAgdHN0bCAgICAgICAgICAgICAgICAlZDAgICAgICAgICAgICAgIHwgLi4uc2VlIGlmIGogPSAwLgorICAgYmVxcyAgICAgICAgICAgICAgICBQb3N0TG9vcAorCisgICBhZGRsICAgICAgICAgICAgICAgICVkMywlZDMgICAgICAgICAgIHwgLi4uUSA6PSAyUQorICAgYWRkbCAgICAgICAgICAgICAgICAlZDIsJWQyICAgICAgICAgICB8IC4uLmxvKFIpID0gMmxvKFIpCisgICByb3hsbCAgICAgICAgICAgICAgICMxLCVkMSAgICAgICAgICAgfCAuLi5oaShSKSA9IDJoaShSKSArIGNhcnJ5CisgICBzY3MgICAgICAgICAgICAgICAgICAlZDYgICAgICAgICAgICAgIHwgLi4uc2V0IENhcnJ5IGlmIDIoUikgb3ZlcmZsb3dzCisgICBhZGRxbCAgICAgICAgICAgICAgICMxLCVhMSAgICAgICAgICAgfCAuLi5rIDo9IGsrMQorICAgc3VicWwgICAgICAgICAgICAgICAjMSwlZDAgICAgICAgICAgIHwgLi4uaiA6PSBqIC0gMQorfC4uQXQgdGhpcyBwb2ludCwgUj0oQ2FycnksRDEsRDIpID0gMl4oay1MKVggLSBRWSwgaitrPUwsIGogPj0gMCwgUiA8IDJZLgorCisgICBicmFzICAgICAgICAgICAgICAgIE1vZF9Mb29wCisKK1Bvc3RMb29wOgorfC4uayA9IEwsIGogPSAwLCBDYXJyeSA9IDAsIFIgPSAoRDEsRDIpID0gWCAtIFFZLCBSIDwgWS4KKworfC4ubm9ybWFsaXplIFIuCisgICBtb3ZlbCAgICAgICAgICAgICAgIExfU0NSMSglYTYpLCVkMCAgICAgICAgICAgfCAuLi5uZXcgYmlhc2VkIGV4cG8gb2YgUgorICAgdHN0bCAgICAgICAgICAgICAgICAlZDEKKyAgIGJuZXMgICAgICAgICAgICAgICAgSGlSX25vdDAKKworSGlSXzA6CisgICBtb3ZlbCAgICAgICAgICAgICAgICVkMiwlZDEKKyAgIGNscmwgICAgICAgICAgICAgICAgJWQyCisgICBzdWJpbCAgICAgICAgICAgICAgICMzMiwlZDAKKyAgIGNscmwgICAgICAgICAgICAgICAgJWQ2CisgICBiZmZmbyAgICAgICAgICAgICAgICAlZDF7IzA6IzMyfSwlZDYKKyAgIGxzbGwgICAgICAgICAgICAgICAgJWQ2LCVkMQorICAgc3VibCAgICAgICAgICAgICAgICAlZDYsJWQwICAgICAgICAgICB8IC4uLihEMCxEMSxEMikgaXMgbm9ybWFsaXplZAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLndpdGggYmlhcyAkN0ZGRAorICAgYnJhcyAgICAgICAgICAgICAgICBHZXRfTW9kCisKK0hpUl9ub3QwOgorICAgY2xybCAgICAgICAgICAgICAgICAlZDYKKyAgIGJmZmZvICAgICAgICAgICAgICAgICVkMXsjMDojMzJ9LCVkNgorICAgYm1pcyAgICAgICAgICAgICAgICBHZXRfTW9kICAgICAgICAgfCAuLi5hbHJlYWR5IG5vcm1hbGl6ZWQKKyAgIHN1YmwgICAgICAgICAgICAgICAgJWQ2LCVkMAorICAgbHNsbCAgICAgICAgICAgICAgICAlZDYsJWQxCisgICBtb3ZlbCAgICAgICAgICAgICAgICVkMiwlZDcgICAgICAgICAgIHwgLi4uYSBjb3B5IG9mIEQyCisgICBsc2xsICAgICAgICAgICAgICAgICVkNiwlZDIKKyAgIG5lZ2wgICAgICAgICAgICAgICAgJWQ2CisgICBhZGRpbCAgICAgICAgICAgICAgICMzMiwlZDYKKyAgIGxzcmwgICAgICAgICAgICAgICAgJWQ2LCVkNworICAgb3JsICAgICAgICAgICAgICAgICAlZDcsJWQxICAgICAgICAgICB8IC4uLihEMCxEMSxEMikgbm9ybWFsaXplZAorCit8CitHZXRfTW9kOgorICAgY21waWwJCSMweDAwMDA0MUZFLCVkMAorICAgYmdlcwkJTm9fU2NhbGUKK0RvX1NjYWxlOgorICAgbW92ZXcJCSVkMCxSKCVhNikKKyAgIGNscncJCVIrMiglYTYpCisgICBtb3ZlbAkJJWQxLFJfSGkoJWE2KQorICAgbW92ZWwJCSVkMixSX0xvKCVhNikKKyAgIG1vdmVsCQlMX1NDUjEoJWE2KSwlZDYKKyAgIG1vdmV3CQklZDYsWSglYTYpCisgICBjbHJ3CQlZKzIoJWE2KQorICAgbW92ZWwJCSVkNCxZX0hpKCVhNikKKyAgIG1vdmVsCQklZDUsWV9MbyglYTYpCisgICBmbW92ZXgJCVIoJWE2KSwlZnAwCQl8IC4uLm5vIGV4Y2VwdGlvbgorICAgbW92ZWwJCSMxLFNjX0ZsYWcoJWE2KQorICAgYnJhcwkJTW9kT3JSZW0KK05vX1NjYWxlOgorICAgbW92ZWwJCSVkMSxSX0hpKCVhNikKKyAgIG1vdmVsCQklZDIsUl9MbyglYTYpCisgICBzdWJpbAkJIzB4M0ZGRSwlZDAKKyAgIG1vdmV3CQklZDAsUiglYTYpCisgICBjbHJ3CQlSKzIoJWE2KQorICAgbW92ZWwJCUxfU0NSMSglYTYpLCVkNgorICAgc3ViaWwJCSMweDNGRkUsJWQ2CisgICBtb3ZlbAkJJWQ2LExfU0NSMSglYTYpCisgICBmbW92ZXgJCVIoJWE2KSwlZnAwCisgICBtb3ZldwkJJWQ2LFkoJWE2KQorICAgbW92ZWwJCSVkNCxZX0hpKCVhNikKKyAgIG1vdmVsCQklZDUsWV9MbyglYTYpCisgICBtb3ZlbAkJIzAsU2NfRmxhZyglYTYpCisKK3wKKworCitNb2RPclJlbToKKyAgIG1vdmVsICAgICAgICAgICAgICAgTW9kX0ZsYWcoJWE2KSwlZDYKKyAgIGJlcXMgICAgICAgICAgICAgICAgRml4X1NpZ24KKworICAgbW92ZWwgICAgICAgICAgICAgICBMX1NDUjEoJWE2KSwlZDYgICAgICAgICAgIHwgLi4ubmV3IGJpYXNlZCBleHBvKFkpCisgICBzdWJxbCAgICAgICAgICAgICAgICMxLCVkNiAgICAgICAgICAgfCAuLi5iaWFzZWQgZXhwbyhZLzIpCisgICBjbXBsICAgICAgICAgICAgICAgICVkNiwlZDAKKyAgIGJsdHMgICAgICAgICAgICAgICAgRml4X1NpZ24KKyAgIGJndHMgICAgICAgICAgICAgICAgTGFzdF9TdWIKKworICAgY21wbCAgICAgICAgICAgICAgICAlZDQsJWQxCisgICBibmVzICAgICAgICAgICAgICAgIE5vdF9FUQorICAgY21wbCAgICAgICAgICAgICAgICAlZDUsJWQyCisgICBibmVzICAgICAgICAgICAgICAgIE5vdF9FUQorICAgYnJhICAgICAgICAgICAgICAgIFRpZV9DYXNlCisKK05vdF9FUToKKyAgIGJjc3MgICAgICAgICAgICAgICAgRml4X1NpZ24KKworTGFzdF9TdWI6Cit8CisgICBmc3VieAkJWSglYTYpLCVmcDAJCXwgLi4ubm8gZXhjZXB0aW9ucworICAgYWRkcWwgICAgICAgICAgICAgICAjMSwlZDMgICAgICAgICAgIHwgLi4uUSA6PSBRICsgMQorCit8CisKK0ZpeF9TaWduOgorfC4uR2V0IHNpZ24gb2YgWAorICAgbW92ZXcgICAgICAgICAgICAgICBTaWduWCglYTYpLCVkNgorICAgYmdlcwkJR2V0X1EKKyAgIGZuZWd4CQklZnAwCisKK3wuLkdldCBRCit8CitHZXRfUToKKyAgIGNscmwJCSVkNgorICAgbW92ZXcgICAgICAgICAgICAgICBTaWduUSglYTYpLCVkNiAgICAgICAgfCAuLi5ENiBpcyBzaWduKFEpCisgICBtb3ZlbCAgICAgICAgICAgICAgICM4LCVkNworICAgbHNybCAgICAgICAgICAgICAgICAlZDcsJWQ2CisgICBhbmRpbCAgICAgICAgICAgICAgICMweDAwMDAwMDdGLCVkMyAgIHwgLi4uNyBiaXRzIG9mIFEKKyAgIG9ybCAgICAgICAgICAgICAgICAgJWQ2LCVkMyAgICAgICAgICAgfCAuLi5zaWduIGFuZCBiaXRzIG9mIFEKKyAgIHN3YXAgICAgICAgICAgICAgICAgICVkMworICAgZm1vdmVsICAgICAgICAgICAgICAlZnBzciwlZDYKKyAgIGFuZGlsICAgICAgICAgICAgICAgIzB4RkYwMEZGRkYsJWQ2CisgICBvcmwgICAgICAgICAgICAgICAgICVkMywlZDYKKyAgIGZtb3ZlbCAgICAgICAgICAgICAgJWQ2LCVmcHNyICAgICAgICAgfCAuLi5wdXQgUSBpbiBmcHNyCisKK3wKK1Jlc3RvcmU6CisgICBtb3ZlbWwgICAgICAgICAgICAgICglYTcpKywlZDItJWQ3CisgICBmbW92ZWwgICAgICAgICAgICAgIFVTRVJfRlBDUiglYTYpLCVmcGNyCisgICBtb3ZlbCAgICAgICAgICAgICAgIFNjX0ZsYWcoJWE2KSwlZDAKKyAgIGJlcXMgICAgICAgICAgICAgICAgRmluaXNoCisgICBmbXVseAkJU2NhbGUoJXBjKSwlZnAwCXwgLi4ubWF5IGNhdXNlIHVuZGVyZmxvdworICAgYnJhCQkJdF9hdm9pZF91bnN1cHAJfGNoZWNrIGZvciBkZW5vcm0gYXMgYQorfAkJCQkJO3Jlc3VsdCBvZiB0aGUgc2NhbGluZworCitGaW5pc2g6CisJZm1vdmV4CQklZnAwLCVmcDAJCXxjYXB0dXJlIGV4Y2VwdGlvbnMgJiByb3VuZAorCXJ0cworCitSZW1faXNfMDoKK3wuLlIgPSAyXigtailYIC0gUSBZID0gWSwgdGh1cyBSID0gMCBhbmQgcXVvdGllbnQgPSAyXmogKFErMSkKKyAgIGFkZHFsICAgICAgICAgICAgICAgIzEsJWQzCisgICBjbXBpbCAgICAgICAgICAgICAgICM4LCVkMCAgICAgICAgICAgfCAuLi5EMCBpcyBqCisgICBiZ2VzICAgICAgICAgICAgICAgIFFfQmlnCisKKyAgIGxzbGwgICAgICAgICAgICAgICAgJWQwLCVkMworICAgYnJhcyAgICAgICAgICAgICAgICBTZXRfUl8wCisKK1FfQmlnOgorICAgY2xybCAgICAgICAgICAgICAgICAlZDMKKworU2V0X1JfMDoKKyAgIGZtb3ZlcwkJIzB4MDAwMDAwMDAsJWZwMAorICAgbW92ZWwJCSMwLFNjX0ZsYWcoJWE2KQorICAgYnJhICAgICAgICAgICAgICAgIEZpeF9TaWduCisKK1RpZV9DYXNlOgorfC4uQ2hlY2sgcGFyaXR5IG9mIFEKKyAgIG1vdmVsICAgICAgICAgICAgICAgJWQzLCVkNgorICAgYW5kaWwgICAgICAgICAgICAgICAjMHgwMDAwMDAwMSwlZDYKKyAgIHRzdGwgICAgICAgICAgICAgICAgJWQ2CisgICBiZXEgICAgICAgICAgICAgICAgRml4X1NpZ24JfCAuLi5RIGlzIGV2ZW4KKworfC4uUSBpcyBvZGQsIFEgOj0gUSArIDEsIHNpZ25YIDo9IC1zaWduWAorICAgYWRkcWwgICAgICAgICAgICAgICAjMSwlZDMKKyAgIG1vdmV3ICAgICAgICAgICAgICAgU2lnblgoJWE2KSwlZDYKKyAgIGVvcmlsICAgICAgICAgICAgICAgIzB4MDAwMDgwMDAsJWQ2CisgICBtb3ZldyAgICAgICAgICAgICAgICVkNixTaWduWCglYTYpCisgICBicmEgICAgICAgICAgICAgICAgRml4X1NpZ24KKworICAgfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvc3Npbi5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc3Npbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0M2M5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC9zc2luLlMKQEAgLTAsMCArMSw3NDYgQEAKK3wKK3wJc3Npbi5zYSAzLjMgNy8yOS85MQorfAorfAlUaGUgZW50cnkgcG9pbnQgc1NJTiBjb21wdXRlcyB0aGUgc2luZSBvZiBhbiBpbnB1dCBhcmd1bWVudAorfAlzQ09TIGNvbXB1dGVzIHRoZSBjb3NpbmUsIGFuZCBzU0lOQ09TIGNvbXB1dGVzIGJvdGguIFRoZQorfAljb3JyZXNwb25kaW5nIGVudHJ5IHBvaW50cyB3aXRoIGEgImQiIGNvbXB1dGVzIHRoZSBzYW1lCit8CWNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gdmFsdWVzIGZvciBkZW5vcm1hbGl6ZWQgaW5wdXRzLgorfAorfAlJbnB1dDogRG91YmxlLWV4dGVuZGVkIG51bWJlciBYIGluIGxvY2F0aW9uIHBvaW50ZWQgdG8KK3wJCWJ5IGFkZHJlc3MgcmVnaXN0ZXIgYTAuCit8Cit8CU91dHB1dDogVGhlIGZ1bmN0aW9uIHZhbHVlIHNpbihYKSBvciBjb3MoWCkgcmV0dXJuZWQgaW4gRnAwIGlmIFNJTiBvcgorfAkJQ09TIGlzIHJlcXVlc3RlZC4gT3RoZXJ3aXNlLCBmb3IgU0lOQ09TLCBzaW4oWCkgaXMgcmV0dXJuZWQKK3wJCWluIEZwMCwgYW5kIGNvcyhYKSBpcyByZXR1cm5lZCBpbiBGcDEuCit8Cit8CU1vZGlmaWVzOiBGcDAgZm9yIFNJTiBvciBDT1M7IGJvdGggRnAwIGFuZCBGcDEgZm9yIFNJTkNPUy4KK3wKK3wJQWNjdXJhY3kgYW5kIE1vbm90b25pY2l0eTogVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMSB1bHAgaW4KK3wJCTY0IHNpZ25pZmljYW50IGJpdCwgaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZQorfAkJcmVzdWx0IGlzIHN1YnNlcXVlbnRseSByb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZQorfAkJcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYyBpbiBkb3VibGUgcHJlY2lzaW9uLgorfAorfAlTcGVlZDogVGhlIHByb2dyYW1zIHNTSU4gYW5kIHNDT1MgdGFrZSBhcHByb3hpbWF0ZWx5IDE1MCBjeWNsZXMgZm9yCit8CQlpbnB1dCBhcmd1bWVudCBYIHN1Y2ggdGhhdCB8WHwgPCAxNVBpLCB3aGljaCBpcyB0aGUgdXN1YWwKK3wJCXNpdHVhdGlvbi4gVGhlIHNwZWVkIGZvciBzU0lOQ09TIGlzIGFwcHJveGltYXRlbHkgMTkwIGN5Y2xlcy4KK3wKK3wJQWxnb3JpdGhtOgorfAorfAlTSU4gYW5kIENPUzoKK3wJMS4gSWYgU0lOIGlzIGludm9rZWQsIHNldCBBZGpOIDo9IDA7IG90aGVyd2lzZSwgc2V0IEFkak4gOj0gMS4KK3wKK3wJMi4gSWYgfFh8ID49IDE1UGkgb3IgfFh8IDwgMioqKC00MCksIGdvIHRvIDcuCit8Cit8CTMuIERlY29tcG9zZSBYIGFzIFggPSBOKFBpLzIpICsgciB3aGVyZSB8cnwgPD0gUGkvNC4gTGV0Cit8CQlrID0gTiBtb2QgNCwgc28gaW4gcGFydGljdWxhciwgayA9IDAsMSwyLG9yIDMuIE92ZXJ3cml0ZQorfAkJayBieSBrIDo9IGsgKyBBZGpOLgorfAorfAk0LiBJZiBrIGlzIGV2ZW4sIGdvIHRvIDYuCit8Cit8CTUuIChrIGlzIG9kZCkgU2V0IGogOj0gKGstMSkvMiwgc2duIDo9ICgtMSkqKmouIFJldHVybiBzZ24qY29zKHIpCit8CQl3aGVyZSBjb3MocikgaXMgYXBwcm94aW1hdGVkIGJ5IGFuIGV2ZW4gcG9seW5vbWlhbCBpbiByLAorfAkJMSArIHIqciooQjErcyooQjIrIC4uLiArIHMqQjgpKSwJcyA9IHIqci4KK3wJCUV4aXQuCit8Cit8CTYuIChrIGlzIGV2ZW4pIFNldCBqIDo9IGsvMiwgc2duIDo9ICgtMSkqKmouIFJldHVybiBzZ24qc2luKHIpCit8CQl3aGVyZSBzaW4ocikgaXMgYXBwcm94aW1hdGVkIGJ5IGFuIG9kZCBwb2x5bm9taWFsIGluIHIKK3wJCXIgKyByKnMqKEExK3MqKEEyKyAuLi4gKyBzKkE3KSksCXMgPSByKnIuCit8CQlFeGl0LgorfAorfAk3LiBJZiB8WHwgPiAxLCBnbyB0byA5LgorfAorfAk4LiAofFh8PDIqKigtNDApKSBJZiBTSU4gaXMgaW52b2tlZCwgcmV0dXJuIFg7IG90aGVyd2lzZSByZXR1cm4gMS4KK3wKK3wJOS4gT3ZlcndyaXRlIFggYnkgWCA6PSBYIHJlbSAyUGkuIE5vdyB0aGF0IHxYfCA8PSBQaSwgZ28gYmFjayB0byAzLgorfAorfAlTSU5DT1M6Cit8CTEuIElmIHxYfCA+PSAxNVBpIG9yIHxYfCA8IDIqKigtNDApLCBnbyB0byA2LgorfAorfAkyLiBEZWNvbXBvc2UgWCBhcyBYID0gTihQaS8yKSArIHIgd2hlcmUgfHJ8IDw9IFBpLzQuIExldAorfAkJayA9IE4gbW9kIDQsIHNvIGluIHBhcnRpY3VsYXIsIGsgPSAwLDEsMixvciAzLgorfAorfAkzLiBJZiBrIGlzIGV2ZW4sIGdvIHRvIDUuCit8Cit8CTQuIChrIGlzIG9kZCkgU2V0IGoxIDo9IChrLTEpLzIsIGoyIDo9IGoxIChFT1IpIChrIG1vZCAyKSwgaS5lLgorfAkJajEgZXhjbHVzaXZlIG9yIHdpdGggdGhlIGwucy5iLiBvZiBrLgorfAkJc2duMSA6PSAoLTEpKipqMSwgc2duMiA6PSAoLTEpKipqMi4KK3wJCVNJTihYKSA9IHNnbjEgKiBjb3MocikgYW5kIENPUyhYKSA9IHNnbjIqc2luKHIpIHdoZXJlCit8CQlzaW4ocikgYW5kIGNvcyhyKSBhcmUgY29tcHV0ZWQgYXMgb2RkIGFuZCBldmVuIHBvbHlub21pYWxzCit8CQlpbiByLCByZXNwZWN0aXZlbHkuIEV4aXQKK3wKK3wJNS4gKGsgaXMgZXZlbikgU2V0IGoxIDo9IGsvMiwgc2duMSA6PSAoLTEpKipqMS4KK3wJCVNJTihYKSA9IHNnbjEgKiBzaW4ocikgYW5kIENPUyhYKSA9IHNnbjEqY29zKHIpIHdoZXJlCit8CQlzaW4ocikgYW5kIGNvcyhyKSBhcmUgY29tcHV0ZWQgYXMgb2RkIGFuZCBldmVuIHBvbHlub21pYWxzCit8CQlpbiByLCByZXNwZWN0aXZlbHkuIEV4aXQKK3wKK3wJNi4gSWYgfFh8ID4gMSwgZ28gdG8gOC4KK3wKK3wJNy4gKHxYfDwyKiooLTQwKSkgU0lOKFgpID0gWCBhbmQgQ09TKFgpID0gMS4gRXhpdC4KK3wKK3wJOC4gT3ZlcndyaXRlIFggYnkgWCA6PSBYIHJlbSAyUGkuIE5vdyB0aGF0IHxYfCA8PSBQaSwgZ28gYmFjayB0byAyLgorfAorCit8CQlDb3B5cmlnaHQgKEMpIE1vdG9yb2xhLCBJbmMuIDE5OTAKK3wJCQlBbGwgUmlnaHRzIFJlc2VydmVkCit8Cit8CVRISVMgSVMgVU5QVUJMSVNIRUQgUFJPUFJJRVRBUlkgU09VUkNFIENPREUgT0YgTU9UT1JPTEEKK3wJVGhlIGNvcHlyaWdodCBub3RpY2UgYWJvdmUgZG9lcyBub3QgZXZpZGVuY2UgYW55Cit8CWFjdHVhbCBvciBpbnRlbmRlZCBwdWJsaWNhdGlvbiBvZiBzdWNoIHNvdXJjZSBjb2RlLgorCit8U1NJTglpZG50CTIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKwl8c2VjdGlvbgk4CisKKyNpbmNsdWRlICJmcHNwLmgiCisKK0JPVU5EUzE6CS5sb25nIDB4M0ZENzgwMDAsMHg0MDA0QkM3RQorVFdPQllQSToJLmxvbmcgMHgzRkU0NUYzMCwweDZEQzlDODgzCisKK1NJTkE3OgkubG9uZyAweEJENkFBQTc3LDB4Q0NDOTk0RjUKK1NJTkE2OgkubG9uZyAweDNERTYxMjA5LDB4N0FBRThEQTEKKworU0lOQTU6CS5sb25nIDB4QkU1QUU2NDUsMHgyQTExOEFFNAorU0lOQTQ6CS5sb25nIDB4M0VDNzFERTMsMHhBNTM0MTUzMQorCitTSU5BMzoJLmxvbmcgMHhCRjJBMDFBMCwweDFBMDE4QjU5LDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCitTSU5BMjoJLmxvbmcgMHgzRkY4MDAwMCwweDg4ODg4ODg4LDB4ODg4ODU5QUYsMHgwMDAwMDAwMAorCitTSU5BMToJLmxvbmcgMHhCRkZDMDAwMCwweEFBQUFBQUFBLDB4QUFBQUFBOTksMHgwMDAwMDAwMAorCitDT1NCODoJLmxvbmcgMHgzRDJBQzREMCwweEQ2MDExRUUzCitDT1NCNzoJLmxvbmcgMHhCREE5Mzk2RiwweDlGNDVBQzE5CisKK0NPU0I2OgkubG9uZyAweDNFMjFFRUQ5LDB4MDYxMkM5NzIKK0NPU0I1OgkubG9uZyAweEJFOTI3RTRGLDB4Qjc5RDlGQ0YKKworQ09TQjQ6CS5sb25nIDB4M0VGQTAxQTAsMHgxQTAxRDQyMywweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworQ09TQjM6CS5sb25nIDB4QkZGNTAwMDAsMHhCNjBCNjBCNiwweDBCNjFENDM4LDB4MDAwMDAwMDAKKworQ09TQjI6CS5sb25nIDB4M0ZGQTAwMDAsMHhBQUFBQUFBQSwweEFBQUFBQjVFCitDT1NCMToJLmxvbmcgMHhCRjAwMDAwMAorCitJTlZUV09QSTogLmxvbmcgMHgzRkZDMDAwMCwweEEyRjk4MzZFLDB4NEU0NDE1MkEKKworVFdPUEkxOgkubG9uZyAweDQwMDEwMDAwLDB4QzkwRkRBQTIsMHgwMDAwMDAwMCwweDAwMDAwMDAwCitUV09QSTI6CS5sb25nIDB4M0ZERjAwMDAsMHg4NUEzMDhENCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworCXx4cmVmCVBJVEJMCisKKwkuc2V0CUlOQVJHLEZQX1NDUjQKKworCS5zZXQJWCxGUF9TQ1I1CisJLnNldAlYRENBUkUsWCsyCisJLnNldAlYRlJBQyxYKzQKKworCS5zZXQJUlBSSU1FLEZQX1NDUjEKKwkuc2V0CVNQUklNRSxGUF9TQ1IyCisKKwkuc2V0CVBPU05FRzEsTF9TQ1IxCisJLnNldAlUV09UTzYzLExfU0NSMQorCisJLnNldAlFTkRGTEFHLExfU0NSMgorCS5zZXQJTixMX1NDUjIKKworCS5zZXQJQURKTixMX1NDUjMKKworCXwgeHJlZgl0X2ZyY2lueAorCXx4cmVmCXRfZXh0ZG5ybQorCXx4cmVmCXN0b19jb3MKKworCS5nbG9iYWwJc3NpbmQKK3NzaW5kOgorfC0tU0lOKFgpID0gWCBGT1IgREVOT1JNQUxJWkVEIFgKKwlicmEJCXRfZXh0ZG5ybQorCisJLmdsb2JhbAlzY29zZAorc2Nvc2Q6Cit8LS1DT1MoWCkgPSAxIEZPUiBERU5PUk1BTElaRUQgWAorCisJZm1vdmVzCQkjMHgzRjgwMDAwMCwlZnAwCit8Cit8CTlEMjVCIEZpeDogU29tZXRpbWVzIHRoZSBwcmV2aW91cyBmbW92ZS5zIHNldHMgZnBzciBiaXRzCit8CisJZm1vdmVsCQkjMCwlZnBzcgorfAorCWJyYQkJdF9mcmNpbngKKworCS5nbG9iYWwJc3Npbgorc3NpbjoKK3wtLVNFVCBBREpOIFRPIDAKKwltb3ZlbAkJIzAsQURKTiglYTYpCisJYnJhcwkJU0lOQkdOCisKKwkuZ2xvYmFsCXNjb3MKK3Njb3M6Cit8LS1TRVQgQURKTiBUTyAxCisJbW92ZWwJCSMxLEFESk4oJWE2KQorCitTSU5CR046Cit8LS1TQVZFIEZQQ1IsIEZQMS4gQ0hFQ0sgSUYgfFh8IElTIFRPTyBTTUFMTCBPUiBMQVJHRQorCisJZm1vdmV4CQkoJWEwKSwlZnAwCXwgLi4uTE9BRCBJTlBVVAorCisJbW92ZWwJCSglYTApLCVkMAorCW1vdmV3CQk0KCVhMCksJWQwCisJZm1vdmV4CQklZnAwLFgoJWE2KQorCWFuZGlsCQkjMHg3RkZGRkZGRiwlZDAJCXwgLi4uQ09NUEFDVElGWSBYCisKKwljbXBpbAkJIzB4M0ZENzgwMDAsJWQwCQl8IC4uLnxYfCA+PSAyKiooLTQwKT8KKwliZ2VzCQlTT0sxCisJYnJhCQlTSU5TTQorCitTT0sxOgorCWNtcGlsCQkjMHg0MDA0QkM3RSwlZDAJCXwgLi4ufFh8IDwgMTUgUEk/CisJYmx0cwkJU0lOTUFJTgorCWJyYQkJUkVEVUNFWAorCitTSU5NQUlOOgorfC0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDw9IDE1IFBJLgorfC0tVEhFIEFSR1VNRU5UIFJFRFVDVElPTiBJUyBET05FIEJZIFRBQkxFIExPT0sgVVAuCisJZm1vdmV4CQklZnAwLCVmcDEKKwlmbXVsZAkJVFdPQllQSSwlZnAxCXwgLi4uWCoyL1BJCisKK3wtLUhJREUgVEhFIE5FWFQgVEhSRUUgSU5TVFJVQ1RJT05TCisJbGVhCQlQSVRCTCsweDIwMCwlYTEgfCAuLi5UQUJMRSBPRiBOKlBJLzIsIE4gPSAtMzIsLi4uLDMyCisKKworfC0tRlAxIElTIE5PVyBSRUFEWQorCWZtb3ZlbAkJJWZwMSxOKCVhNikJCXwgLi4uQ09OVkVSVCBUTyBJTlRFR0VSCisKKwltb3ZlbAkJTiglYTYpLCVkMAorCWFzbGwJCSM0LCVkMAorCWFkZGFsCQklZDAsJWExCXwgLi4uQTEgSVMgVEhFIEFERFJFU1MgT0YgTipQSUJZMgorfAkJCQkuLi5XSElDSCBJUyBJTiBUV08gUElFQ0VTIFkxICYgWTIKKworCWZzdWJ4CQkoJWExKSssJWZwMAl8IC4uLlgtWTEKK3wtLUhJREUgVEhFIE5FWFQgT05FCisJZnN1YnMJCSglYTEpLCVmcDAJfCAuLi5GUDAgSVMgUiA9IChYLVkxKS1ZMgorCitTSU5DT05UOgorfC0tY29udGludWF0aW9uIGZyb20gUkVEVUNFWAorCit8LS1HRVQgTitBREpOIEFORCBTRUUgSUYgU0lOKFIpIE9SIENPUyhSKSBJUyBORUVERUQKKwltb3ZlbAkJTiglYTYpLCVkMAorCWFkZGwJCUFESk4oJWE2KSwlZDAJfCAuLi5TRUUgSUYgRDAgSVMgT0REIE9SIEVWRU4KKwlyb3JsCQkjMSwlZDAJfCAuLi5EMCBXQVMgT0REIElGRiBEMCBJUyBORUdBVElWRQorCWNtcGlsCQkjMCwlZDAKKwlibHQJCUNPU1BPTFkKKworU0lOUE9MWToKK3wtLUxFVCBKIEJFIFRIRSBMRUFTVCBTSUcuIEJJVCBPRiBEMCwgTEVUIFNHTiA6PSAoLTEpKipKLgorfC0tVEhFTiBXRSBSRVRVUk4JU0dOKlNJTihSKS4gU0dOKlNJTihSKSBJUyBDT01QVVRFRCBCWQorfC0tUicgKyBSJypTKihBMSArIFMoQTIgKyBTKEEzICsgUyhBNCArIC4uLiArIFNBNykpKSksIFdIRVJFCit8LS1SJyA9IFNHTipSLCBTPVIqUi4gVEhJUyBDQU4gQkUgUkVXUklUVEVOIEFTCit8LS1SJyArIFInKlMqKCBbQTErVChBMytUKEE1K1RBNykpXSArIFtTKEEyK1QoQTQrVEE2KSldKQorfC0tV0hFUkUgVD1TKlMuCit8LS1OT1RFIFRIQVQgQTMgVEhST1VHSCBBNyBBUkUgU1RPUkVEIElOIERPVUJMRSBQUkVDSVNJT04KK3wtLVdISUxFIEExIEFORCBBMiBBUkUgSU4gRE9VQkxFLUVYVEVOREVEIEZPUk1BVC4KKwlmbW92ZXgJCSVmcDAsWCglYTYpCXwgLi4uWCBJUyBSCisJZm11bHgJCSVmcDAsJWZwMAl8IC4uLkZQMCBJUyBTCit8LS0tSElERSBUSEUgTkVYVCBUV08gV0hJTEUgV0FJVElORyBGT1IgRlAwCisJZm1vdmVkCQlTSU5BNywlZnAzCisJZm1vdmVkCQlTSU5BNiwlZnAyCit8LS1GUDAgSVMgTk9XIFJFQURZCisJZm1vdmV4CQklZnAwLCVmcDEKKwlmbXVseAkJJWZwMSwlZnAxCXwgLi4uRlAxIElTIFQKK3wtLUhJREUgVEhFIE5FWFQgVFdPIFdISUxFIFdBSVRJTkcgRk9SIEZQMQorCisJcm9ybAkJIzEsJWQwCisJYW5kaWwJCSMweDgwMDAwMDAwLCVkMAorfAkJCQkuLi5MRUFTVCBTSUcuIEJJVCBPRiBEMCBJTiBTSUdOIFBPU0lUSU9OCisJZW9ybAkJJWQwLFgoJWE2KQl8IC4uLlggSVMgTk9XIFInPSBTR04qUgorCisJZm11bHgJCSVmcDEsJWZwMwl8IC4uLlRBNworCWZtdWx4CQklZnAxLCVmcDIJfCAuLi5UQTYKKworCWZhZGRkCQlTSU5BNSwlZnAzIHwgLi4uQTUrVEE3CisJZmFkZGQJCVNJTkE0LCVmcDIgfCAuLi5BNCtUQTYKKworCWZtdWx4CQklZnAxLCVmcDMJfCAuLi5UKEE1K1RBNykKKwlmbXVseAkJJWZwMSwlZnAyCXwgLi4uVChBNCtUQTYpCisKKwlmYWRkZAkJU0lOQTMsJWZwMyB8IC4uLkEzK1QoQTUrVEE3KQorCWZhZGR4CQlTSU5BMiwlZnAyIHwgLi4uQTIrVChBNCtUQTYpCisKKwlmbXVseAkJJWZwMywlZnAxCXwgLi4uVChBMytUKEE1K1RBNykpCisKKwlmbXVseAkJJWZwMCwlZnAyCXwgLi4uUyhBMitUKEE0K1RBNikpCisJZmFkZHgJCVNJTkExLCVmcDEgfCAuLi5BMStUKEEzK1QoQTUrVEE3KSkKKwlmbXVseAkJWCglYTYpLCVmcDAJfCAuLi5SJypTCisKKwlmYWRkeAkJJWZwMiwlZnAxCXwgLi4uW0ExK1QoQTMrVChBNStUQTcpKV0rW1MoQTIrVChBNCtUQTYpKV0KK3wtLUZQMyBSRUxFQVNFRCwgUkVTVE9SRSBOT1cgQU5EIFRBS0UgU09NRSBBRFZBTlRBR0UgT0YgSElESU5HCit8LS1GUDIgUkVMRUFTRUQsIFJFU1RPUkUgTk9XIEFORCBUQUtFIEZVTEwgQURWQU5UQUdFIE9GIEhJRElORworCisKKwlmbXVseAkJJWZwMSwlZnAwCQl8IC4uLlNJTihSJyktUicKK3wtLUZQMSBSRUxFQVNFRC4KKworCWZtb3ZlbAkJJWQxLCVGUENSCQl8cmVzdG9yZSB1c2VycyBleGNlcHRpb25zCisJZmFkZHgJCVgoJWE2KSwlZnAwCQl8bGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uIHNldAorCWJyYQkJdF9mcmNpbngKKworCitDT1NQT0xZOgorfC0tTEVUIEogQkUgVEhFIExFQVNUIFNJRy4gQklUIE9GIEQwLCBMRVQgU0dOIDo9ICgtMSkqKkouCit8LS1USEVOIFdFIFJFVFVSTglTR04qQ09TKFIpLiBTR04qQ09TKFIpIElTIENPTVBVVEVEIEJZCit8LS1TR04gKyBTJyooQjEgKyBTKEIyICsgUyhCMyArIFMoQjQgKyAuLi4gKyBTQjgpKSkpLCBXSEVSRQorfC0tUz1SKlIgQU5EIFMnPVNHTipTLiBUSElTIENBTiBCRSBSRVdSSVRURU4gQVMKK3wtLVNHTiArIFMnKihbQjErVChCMytUKEI1K1RCNykpXSArIFtTKEIyK1QoQjQrVChCNitUQjgpKSldKQorfC0tV0hFUkUgVD1TKlMuCit8LS1OT1RFIFRIQVQgQjQgVEhST1VHSCBCOCBBUkUgU1RPUkVEIElOIERPVUJMRSBQUkVDSVNJT04KK3wtLVdISUxFIEIyIEFORCBCMyBBUkUgSU4gRE9VQkxFLUVYVEVOREVEIEZPUk1BVCwgQjEgSVMgLTEvMgorfC0tQU5EIElTIFRIRVJFRk9SRSBTVE9SRUQgQVMgU0lOR0xFIFBSRUNJU0lPTi4KKworCWZtdWx4CQklZnAwLCVmcDAJfCAuLi5GUDAgSVMgUworfC0tLUhJREUgVEhFIE5FWFQgVFdPIFdISUxFIFdBSVRJTkcgRk9SIEZQMAorCWZtb3ZlZAkJQ09TQjgsJWZwMgorCWZtb3ZlZAkJQ09TQjcsJWZwMworfC0tRlAwIElTIE5PVyBSRUFEWQorCWZtb3ZleAkJJWZwMCwlZnAxCisJZm11bHgJCSVmcDEsJWZwMQl8IC4uLkZQMSBJUyBUCit8LS1ISURFIFRIRSBORVhUIFRXTyBXSElMRSBXQUlUSU5HIEZPUiBGUDEKKwlmbW92ZXgJCSVmcDAsWCglYTYpCXwgLi4uWCBJUyBTCisJcm9ybAkJIzEsJWQwCisJYW5kaWwJCSMweDgwMDAwMDAwLCVkMAorfAkJCS4uLkxFQVNUIFNJRy4gQklUIE9GIEQwIElOIFNJR04gUE9TSVRJT04KKworCWZtdWx4CQklZnAxLCVmcDIJfCAuLi5UQjgKK3wtLUhJREUgVEhFIE5FWFQgVFdPIFdISUxFIFdBSVRJTkcgRk9SIFRIRSBYVQorCWVvcmwJCSVkMCxYKCVhNikJfCAuLi5YIElTIE5PVyBTJz0gU0dOKlMKKwlhbmRpbAkJIzB4ODAwMDAwMDAsJWQwCisKKwlmbXVseAkJJWZwMSwlZnAzCXwgLi4uVEI3Cit8LS1ISURFIFRIRSBORVhUIFRXTyBXSElMRSBXQUlUSU5HIEZPUiBUSEUgWFUKKwlvcmlsCQkjMHgzRjgwMDAwMCwlZDAJfCAuLi5EMCBJUyBTR04gSU4gU0lOR0xFCisJbW92ZWwJCSVkMCxQT1NORUcxKCVhNikKKworCWZhZGRkCQlDT1NCNiwlZnAyIHwgLi4uQjYrVEI4CisJZmFkZGQJCUNPU0I1LCVmcDMgfCAuLi5CNStUQjcKKworCWZtdWx4CQklZnAxLCVmcDIJfCAuLi5UKEI2K1RCOCkKKwlmbXVseAkJJWZwMSwlZnAzCXwgLi4uVChCNStUQjcpCisKKwlmYWRkZAkJQ09TQjQsJWZwMiB8IC4uLkI0K1QoQjYrVEI4KQorCWZhZGR4CQlDT1NCMywlZnAzIHwgLi4uQjMrVChCNStUQjcpCisKKwlmbXVseAkJJWZwMSwlZnAyCXwgLi4uVChCNCtUKEI2K1RCOCkpCisJZm11bHgJCSVmcDMsJWZwMQl8IC4uLlQoQjMrVChCNStUQjcpKQorCisJZmFkZHgJCUNPU0IyLCVmcDIgfCAuLi5CMitUKEI0K1QoQjYrVEI4KSkKKwlmYWRkcwkJQ09TQjEsJWZwMSB8IC4uLkIxK1QoQjMrVChCNStUQjcpKQorCisJZm11bHgJCSVmcDIsJWZwMAl8IC4uLlMoQjIrVChCNCtUKEI2K1RCOCkpKQorfC0tRlAzIFJFTEVBU0VELCBSRVNUT1JFIE5PVyBBTkQgVEFLRSBTT01FIEFEVkFOVEFHRSBPRiBISURJTkcKK3wtLUZQMiBSRUxFQVNFRC4KKworCisJZmFkZHgJCSVmcDEsJWZwMAorfC0tRlAxIFJFTEVBU0VECisKKwlmbXVseAkJWCglYTYpLCVmcDAKKworCWZtb3ZlbAkJJWQxLCVGUENSCQl8cmVzdG9yZSB1c2VycyBleGNlcHRpb25zCisJZmFkZHMJCVBPU05FRzEoJWE2KSwlZnAwCXxsYXN0IGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb24gc2V0CisJYnJhCQl0X2ZyY2lueAorCisKK1NJTkJPUlM6Cit8LS1JRiB8WHwgPiAxNVBJLCBXRSBVU0UgVEhFIEdFTkVSQUwgQVJHVU1FTlQgUkVEVUNUSU9OLgorfC0tSUYgfFh8IDwgMioqKC00MCksIFJFVFVSTiBYIE9SIDEuCisJY21waWwJCSMweDNGRkY4MDAwLCVkMAorCWJndHMJCVJFRFVDRVgKKworCitTSU5TTToKKwltb3ZlbAkJQURKTiglYTYpLCVkMAorCWNtcGlsCQkjMCwlZDAKKwliZ3RzCQlDT1NUSU5ZCisKK1NJTlRJTlk6CisJbW92ZXcJCSMweDAwMDAsWERDQVJFKCVhNikJfCAuLi5KVVNUIElOIENBU0UKKwlmbW92ZWwJCSVkMSwlRlBDUgkJfHJlc3RvcmUgdXNlcnMgZXhjZXB0aW9ucworCWZtb3ZleAkJWCglYTYpLCVmcDAJCXxsYXN0IGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb24gc2V0CisJYnJhCQl0X2ZyY2lueAorCisKK0NPU1RJTlk6CisJZm1vdmVzCQkjMHgzRjgwMDAwMCwlZnAwCisKKwlmbW92ZWwJCSVkMSwlRlBDUgkJfHJlc3RvcmUgdXNlcnMgZXhjZXB0aW9ucworCWZzdWJzCQkjMHgwMDgwMDAwMCwlZnAwCXxsYXN0IGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb24gc2V0CisJYnJhCQl0X2ZyY2lueAorCisKK1JFRFVDRVg6Cit8LS1XSEVOIFJFRFVDRVggSVMgVVNFRCwgVEhFIENPREUgV0lMTCBJTkVWSVRBQkxZIEJFIFNMT1cuCit8LS1USElTIFJFRFVDVElPTiBNRVRIT0QsIEhPV0VWRVIsIElTIE1VQ0ggRkFTVEVSIFRIQU4gVVNJTkcKK3wtLVRIRSBSRU1BSU5ERVIgSU5TVFJVQ1RJT04gV0hJQ0ggSVMgTk9XIElOIFNPRlRXQVJFLgorCisJZm1vdmVteAklZnAyLSVmcDUsLSglYTcpCXwgLi4uc2F2ZSBGUDIgdGhyb3VnaCBGUDUKKwltb3ZlbAkJJWQyLC0oJWE3KQorICAgICAgICBmbW92ZXMgICAgICAgICAjMHgwMDAwMDAwMCwlZnAxCit8LS1JZiBjb21wYWN0IGZvcm0gb2YgYWJzKGFyZykgaW4gZDA9JDdmZmVmZmZmLCBhcmd1bWVudCBpcyBzbyBsYXJnZSB0aGF0Cit8LS10aGVyZSBpcyBhIGRhbmdlciBvZiB1bndhbnRlZCBvdmVyZmxvdyBpbiBmaXJzdCBMT09QIGl0ZXJhdGlvbi4gIEluIHRoaXMKK3wtLWNhc2UsIHJlZHVjZSBhcmd1bWVudCBieSBvbmUgcmVtYWluZGVyIHN0ZXAgdG8gbWFrZSBzdWJzZXF1ZW50IHJlZHVjdGlvbgorfC0tc2FmZS4KKwljbXBpbAkjMHg3ZmZlZmZmZiwlZDAJCXxpcyBhcmd1bWVudCBkYW5nZXJvdXNseSBsYXJnZT8KKwlibmVzCUxPT1AKKwltb3ZlbAkjMHg3ZmZlMDAwMCxGUF9TQ1IyKCVhNikJfHllcworfAkJCQkJO2NyZWF0ZSAyKioxNjM4MypQSS8yCisJbW92ZWwJIzB4YzkwZmRhYTIsRlBfU0NSMis0KCVhNikKKwljbHJsCUZQX1NDUjIrOCglYTYpCisJZnRzdHgJJWZwMAkJCXx0ZXN0IHNpZ24gb2YgYXJndW1lbnQKKwltb3ZlbAkjMHg3ZmRjMDAwMCxGUF9TQ1IzKCVhNikJfGNyZWF0ZSBsb3cgaGFsZiBvZiAyKioxNjM4MyoKK3wJCQkJCTtQSS8yIGF0IEZQX1NDUjMKKwltb3ZlbAkjMHg4NWEzMDhkMyxGUF9TQ1IzKzQoJWE2KQorCWNscmwgICBGUF9TQ1IzKzgoJWE2KQorCWZibHQJcmVkX25lZworCW9ydwkjMHg4MDAwLEZQX1NDUjIoJWE2KQl8cG9zaXRpdmUgYXJnCisJb3J3CSMweDgwMDAsRlBfU0NSMyglYTYpCityZWRfbmVnOgorCWZhZGR4ICBGUF9TQ1IyKCVhNiksJWZwMAkJfGhpZ2ggcGFydCBvZiByZWR1Y3Rpb24gaXMgZXhhY3QKKwlmbW92ZXggICVmcDAsJWZwMQkJfHNhdmUgaGlnaCByZXN1bHQgaW4gZnAxCisJZmFkZHggIEZQX1NDUjMoJWE2KSwlZnAwCQl8bG93IHBhcnQgb2YgcmVkdWN0aW9uCisJZnN1YnggICVmcDAsJWZwMQkJCXxkZXRlcm1pbmUgbG93IGNvbXBvbmVudCBvZiByZXN1bHQKKwlmYWRkeCAgRlBfU0NSMyglYTYpLCVmcDEJCXxmcDAvZnAxIGFyZSByZWR1Y2VkIGFyZ3VtZW50LgorCit8LS1PTiBFTlRSWSwgRlAwIElTIFgsIE9OIFJFVFVSTiwgRlAwIElTIFggUkVNIFBJLzIsIHxYfCA8PSBQSS80LgorfC0taW50ZWdlciBxdW90aWVudCB3aWxsIGJlIHN0b3JlZCBpbiBOCit8LS1JbnRlcm1lZGlhdGUgcmVtYWluZGVyIGlzIDY2LWJpdCBsb25nOyAoUixyKSBpbiAoRlAwLEZQMSkKKworTE9PUDoKKwlmbW92ZXgJCSVmcDAsSU5BUkcoJWE2KQl8IC4uListMioqSyAqIEYsIDEgPD0gRiA8IDIKKwltb3ZldwkJSU5BUkcoJWE2KSwlZDAKKyAgICAgICAgbW92ZWwgICAgICAgICAgJWQwLCVhMQkJfCAuLi5zYXZlIGEgY29weSBvZiBEMAorCWFuZGlsCQkjMHgwMDAwN0ZGRiwlZDAKKwlzdWJpbAkJIzB4MDAwMDNGRkYsJWQwCXwgLi4uRDAgSVMgSworCWNtcGlsCQkjMjgsJWQwCisJYmxlcwkJTEFTVExPT1AKK0NPTlRMT09QOgorCXN1YmlsCQkjMjcsJWQwCSB8IC4uLkQwIElTIEwgOj0gSy0yNworCW1vdmVsCQkjMCxFTkRGTEFHKCVhNikKKwlicmFzCQlXT1JLCitMQVNUTE9PUDoKKwljbHJsCQklZDAJCXwgLi4uRDAgSVMgTCA6PSAwCisJbW92ZWwJCSMxLEVOREZMQUcoJWE2KQorCitXT1JLOgorfC0tRklORCBUSEUgUkVNQUlOREVSIE9GIChSLHIpIFcuUi5ULgkyKipMICogKFBJLzIpLiBMIElTIFNPIENIT1NFTgorfC0tVEhBVAlJTlQoIFggKiAoMi9QSSkgLyAyKiooTCkgKSA8IDIqKjI5LgorCit8LS1DUkVBVEUgMioqKC1MKSAqICgyL1BJKSwgU0lHTihJTkFSRykqMioqKDYzKSwKK3wtLTIqKkwgKiAoUElieTJfMSksIDIqKkwgKiAoUElieTJfMikKKworCW1vdmVsCQkjMHgwMDAwM0ZGRSwlZDIJfCAuLi5CSUFTRUQgRVhQTyBPRiAyL1BJCisJc3VibAkJJWQwLCVkMgkJfCAuLi5CSUFTRUQgRVhQTyBPRiAyKiooLUwpKigyL1BJKQorCisJbW92ZWwJCSMweEEyRjk4MzZFLEZQX1NDUjErNCglYTYpCisJbW92ZWwJCSMweDRFNDQxNTJBLEZQX1NDUjErOCglYTYpCisJbW92ZXcJCSVkMixGUF9TQ1IxKCVhNikJfCAuLi5GUF9TQ1IxIGlzIDIqKigtTCkqKDIvUEkpCisKKwlmbW92ZXgJCSVmcDAsJWZwMgorCWZtdWx4CQlGUF9TQ1IxKCVhNiksJWZwMgorfC0tV0UgTVVTVCBOT1cgRklORCBJTlQoRlAyKS4gU0lOQ0UgV0UgTkVFRCBUSElTIFZBTFVFIElOCit8LS1GTE9BVElORyBQT0lOVCBGT1JNQVQsIFRIRSBUV08gRk1PVkUnUwlGTU9WRS5MIEZQIDwtLT4gTgorfC0tV0lMTCBCRSBUT08gSU5FRkZJQ0lFTlQuIFRIRSBXQVkgQVJPVU5EIElUIElTIFRIQVQKK3wtLShTSUdOKElOQVJHKSoyKio2MwkrCUZQMikgLSBTSUdOKElOQVJHKSoyKio2MyBXSUxMIEdJVkUKK3wtLVVTIFRIRSBERVNJUkVEIFZBTFVFIElOIEZMT0FUSU5HIFBPSU5ULgorCit8LS1ISURFIFNJWCBDWUNMRVMgT0YgSU5TVFJVQ1RJT04KKyAgICAgICAgbW92ZWwJCSVhMSwlZDIKKyAgICAgICAgc3dhcAkJJWQyCisJYW5kaWwJCSMweDgwMDAwMDAwLCVkMgorCW9yaWwJCSMweDVGMDAwMDAwLCVkMgl8IC4uLkQyIElTIFNJR04oSU5BUkcpKjIqKjYzIElOIFNHTAorCW1vdmVsCQklZDIsVFdPVE82MyglYTYpCisKKwltb3ZlbAkJJWQwLCVkMgorCWFkZGlsCQkjMHgwMDAwM0ZGRiwlZDIJfCAuLi5CSUFTRUQgRVhQTyBPRiAyKipMICogKFBJLzIpCisKK3wtLUZQMiBJUyBSRUFEWQorCWZhZGRzCQlUV09UTzYzKCVhNiksJWZwMgl8IC4uLlRIRSBGUkFDVElPTkFMIFBBUlQgT0YgRlAxIElTIFJPVU5ERUQKKworfC0tSElERSA0IENZQ0xFUyBPRiBJTlNUUlVDVElPTjsgY3JlYXRpbmcgMioqKEwpKlBpYnkyXzEgIGFuZCAgMioqKEwpKlBpYnkyXzIKKyAgICAgICAgbW92ZXcJCSVkMixGUF9TQ1IyKCVhNikKKwljbHJ3ICAgICAgICAgICBGUF9TQ1IyKzIoJWE2KQorCW1vdmVsCQkjMHhDOTBGREFBMixGUF9TQ1IyKzQoJWE2KQorCWNscmwJCUZQX1NDUjIrOCglYTYpCQl8IC4uLkZQX1NDUjIgaXMgIDIqKihMKSAqIFBpYnkyXzEKKworfC0tRlAyIElTIFJFQURZCisJZnN1YnMJCVRXT1RPNjMoJWE2KSwlZnAyCQl8IC4uLkZQMiBpcyBOCisKKwlhZGRpbAkJIzB4MDAwMDNGREQsJWQwCisgICAgICAgIG1vdmV3CQklZDAsRlBfU0NSMyglYTYpCisJY2xydyAgICAgICAgICAgRlBfU0NSMysyKCVhNikKKwltb3ZlbAkJIzB4ODVBMzA4RDMsRlBfU0NSMys0KCVhNikKKwljbHJsCQlGUF9TQ1IzKzgoJWE2KQkJfCAuLi5GUF9TQ1IzIGlzIDIqKihMKSAqIFBpYnkyXzIKKworCW1vdmVsCQlFTkRGTEFHKCVhNiksJWQwCisKK3wtLVdlIGFyZSBub3cgcmVhZHkgdG8gcGVyZm9ybSAoUityKSAtIE4qUDEgLSBOKlAyLCBQMSA9IDIqKihMKSAqIFBpYnkyXzEgYW5kCit8LS1QMiA9IDIqKihMKSAqIFBpYnkyXzIKKwlmbW92ZXgJCSVmcDIsJWZwNAorCWZtdWx4CQlGUF9TQ1IyKCVhNiksJWZwNAkJfCAuLi5XID0gTipQMQorCWZtb3ZleAkJJWZwMiwlZnA1CisJZm11bHgJCUZQX1NDUjMoJWE2KSwlZnA1CQl8IC4uLncgPSBOKlAyCisJZm1vdmV4CQklZnA0LCVmcDMKK3wtLXdlIHdhbnQgUCtwID0gVyt3ICBidXQgIHxwfCA8PSBoYWxmIHVscCBvZiBQCit8LS1UaGVuLCB3ZSBuZWVkIHRvIGNvbXB1dGUgIEEgOj0gUi1QICAgYW5kICBhIDo9IHItcAorCWZhZGR4CQklZnA1LCVmcDMJCQl8IC4uLkZQMyBpcyBQCisJZnN1YngJCSVmcDMsJWZwNAkJCXwgLi4uVy1QCisKKwlmc3VieAkJJWZwMywlZnAwCQkJfCAuLi5GUDAgaXMgQSA6PSBSIC0gUAorICAgICAgICBmYWRkeAkJJWZwNSwlZnA0CQkJfCAuLi5GUDQgaXMgcCA9IChXLVApK3cKKworCWZtb3ZleAkJJWZwMCwlZnAzCQkJfCAuLi5GUDMgQQorCWZzdWJ4CQklZnA0LCVmcDEJCQl8IC4uLkZQMSBpcyBhIDo9IHIgLSBwCisKK3wtLU5vdyB3ZSBuZWVkIHRvIG5vcm1hbGl6ZSAoQSxhKSB0byAgIm5ldyAoUixyKSIgd2hlcmUgUityID0gQSthIGJ1dAorfC0tfHJ8IDw9IGhhbGYgdWxwIG9mIFIuCisJZmFkZHgJCSVmcDEsJWZwMAkJCXwgLi4uRlAwIGlzIFIgOj0gQSthCit8LS1ObyBuZWVkIHRvIGNhbGN1bGF0ZSByIGlmIHRoaXMgaXMgdGhlIGxhc3QgbG9vcAorCWNtcGlsCQkjMCwlZDAKKwliZ3QJCVJFU1RPUkUKKworfC0tTmVlZCB0byBjYWxjdWxhdGUgcgorCWZzdWJ4CQklZnAwLCVmcDMJCQl8IC4uLkEtUgorCWZhZGR4CQklZnAzLCVmcDEJCQl8IC4uLkZQMSBpcyByIDo9IChBLVIpK2EKKwlicmEJCUxPT1AKKworUkVTVE9SRToKKyAgICAgICAgZm1vdmVsCQklZnAyLE4oJWE2KQorCW1vdmVsCQkoJWE3KSssJWQyCisJZm1vdmVteAkoJWE3KSssJWZwMi0lZnA1CisKKworCW1vdmVsCQlBREpOKCVhNiksJWQwCisJY21waWwJCSM0LCVkMAorCisJYmx0CQlTSU5DT05UCisJYnJhcwkJU0NDT05UCisKKwkuZ2xvYmFsCXNzaW5jb3NkCitzc2luY29zZDoKK3wtLVNJTiBBTkQgQ09TIE9GIFggRk9SIERFTk9STUFMSVpFRCBYCisKKwlmbW92ZXMJCSMweDNGODAwMDAwLCVmcDEKKwlic3IJCXN0b19jb3MJCXxzdG9yZSBjb3NpbmUgcmVzdWx0CisJYnJhCQl0X2V4dGRucm0KKworCS5nbG9iYWwJc3NpbmNvcworc3NpbmNvczoKK3wtLVNFVCBBREpOIFRPIDQKKwltb3ZlbAkJIzQsQURKTiglYTYpCisKKwlmbW92ZXgJCSglYTApLCVmcDAJfCAuLi5MT0FEIElOUFVUCisKKwltb3ZlbAkJKCVhMCksJWQwCisJbW92ZXcJCTQoJWEwKSwlZDAKKwlmbW92ZXgJCSVmcDAsWCglYTYpCisJYW5kaWwJCSMweDdGRkZGRkZGLCVkMAkJfCAuLi5DT01QQUNUSUZZIFgKKworCWNtcGlsCQkjMHgzRkQ3ODAwMCwlZDAJCXwgLi4ufFh8ID49IDIqKigtNDApPworCWJnZXMJCVNDT0sxCisJYnJhCQlTQ1NNCisKK1NDT0sxOgorCWNtcGlsCQkjMHg0MDA0QkM3RSwlZDAJCXwgLi4ufFh8IDwgMTUgUEk/CisJYmx0cwkJU0NNQUlOCisJYnJhCQlSRURVQ0VYCisKKworU0NNQUlOOgorfC0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDw9IDE1IFBJLgorfC0tVEhFIEFSR1VNRU5UIFJFRFVDVElPTiBJUyBET05FIEJZIFRBQkxFIExPT0sgVVAuCisJZm1vdmV4CQklZnAwLCVmcDEKKwlmbXVsZAkJVFdPQllQSSwlZnAxCXwgLi4uWCoyL1BJCisKK3wtLUhJREUgVEhFIE5FWFQgVEhSRUUgSU5TVFJVQ1RJT05TCisJbGVhCQlQSVRCTCsweDIwMCwlYTEgfCAuLi5UQUJMRSBPRiBOKlBJLzIsIE4gPSAtMzIsLi4uLDMyCisKKworfC0tRlAxIElTIE5PVyBSRUFEWQorCWZtb3ZlbAkJJWZwMSxOKCVhNikJCXwgLi4uQ09OVkVSVCBUTyBJTlRFR0VSCisKKwltb3ZlbAkJTiglYTYpLCVkMAorCWFzbGwJCSM0LCVkMAorCWFkZGFsCQklZDAsJWExCQl8IC4uLkFERFJFU1MgT0YgTipQSUJZMiwgSU4gWTEsIFkyCisKKwlmc3VieAkJKCVhMSkrLCVmcDAJfCAuLi5YLVkxCisgICAgICAgIGZzdWJzCQkoJWExKSwlZnAwCXwgLi4uRlAwIElTIFIgPSAoWC1ZMSktWTIKKworU0NDT05UOgorfC0tY29udGludWF0aW9uIHBvaW50IGZyb20gUkVEVUNFWAorCit8LS1ISURFIFRIRSBORVhUIFRXTworCW1vdmVsCQlOKCVhNiksJWQwCisJcm9ybAkJIzEsJWQwCisKKwljbXBpbAkJIzAsJWQwCQl8IC4uLkQwIDwgMCBJRkYgTiBJUyBPREQKKwliZ2UJCU5FVkVOCisKK05PREQ6Cit8LS1SRUdJU1RFUlMgU0FWRUQgU08gRkFSOiBEMCwgQTAsIEZQMi4KKworCWZtb3ZleAkJJWZwMCxSUFJJTUUoJWE2KQorCWZtdWx4CQklZnAwLCVmcDAJIHwgLi4uRlAwIElTIFMgPSBSKlIKKwlmbW92ZWQJCVNJTkE3LCVmcDEJfCAuLi5BNworCWZtb3ZlZAkJQ09TQjgsJWZwMgl8IC4uLkI4CisJZm11bHgJCSVmcDAsJWZwMQkgfCAuLi5TQTcKKwltb3ZlbAkJJWQyLC0oJWE3KQorCW1vdmVsCQklZDAsJWQyCisJZm11bHgJCSVmcDAsJWZwMgkgfCAuLi5TQjgKKwlyb3JsCQkjMSwlZDIKKwlhbmRpbAkJIzB4ODAwMDAwMDAsJWQyCisKKwlmYWRkZAkJU0lOQTYsJWZwMQl8IC4uLkE2K1NBNworCWVvcmwJCSVkMCwlZDIKKwlhbmRpbAkJIzB4ODAwMDAwMDAsJWQyCisJZmFkZGQJCUNPU0I3LCVmcDIJfCAuLi5CNytTQjgKKworCWZtdWx4CQklZnAwLCVmcDEJIHwgLi4uUyhBNitTQTcpCisJZW9ybAkJJWQyLFJQUklNRSglYTYpCisJbW92ZWwJCSglYTcpKywlZDIKKwlmbXVseAkJJWZwMCwlZnAyCSB8IC4uLlMoQjcrU0I4KQorCXJvcmwJCSMxLCVkMAorCWFuZGlsCQkjMHg4MDAwMDAwMCwlZDAKKworCWZhZGRkCQlTSU5BNSwlZnAxCXwgLi4uQTUrUyhBNitTQTcpCisJbW92ZWwJCSMweDNGODAwMDAwLFBPU05FRzEoJWE2KQorCWVvcmwJCSVkMCxQT1NORUcxKCVhNikKKwlmYWRkZAkJQ09TQjYsJWZwMgl8IC4uLkI2K1MoQjcrU0I4KQorCisJZm11bHgJCSVmcDAsJWZwMQkgfCAuLi5TKEE1K1MoQTYrU0E3KSkKKwlmbXVseAkJJWZwMCwlZnAyCSB8IC4uLlMoQjYrUyhCNytTQjgpKQorCWZtb3ZleAkJJWZwMCxTUFJJTUUoJWE2KQorCisJZmFkZGQJCVNJTkE0LCVmcDEJfCAuLi5BNCtTKEE1K1MoQTYrU0E3KSkKKwllb3JsCQklZDAsU1BSSU1FKCVhNikKKwlmYWRkZAkJQ09TQjUsJWZwMgl8IC4uLkI1K1MoQjYrUyhCNytTQjgpKQorCisJZm11bHgJCSVmcDAsJWZwMQkgfCAuLi5TKEE0Ky4uLikKKwlmbXVseAkJJWZwMCwlZnAyCSB8IC4uLlMoQjUrLi4uKQorCisJZmFkZGQJCVNJTkEzLCVmcDEJfCAuLi5BMytTKEE0Ky4uLikKKwlmYWRkZAkJQ09TQjQsJWZwMgl8IC4uLkI0K1MoQjUrLi4uKQorCisJZm11bHgJCSVmcDAsJWZwMQkgfCAuLi5TKEEzKy4uLikKKwlmbXVseAkJJWZwMCwlZnAyCSB8IC4uLlMoQjQrLi4uKQorCisJZmFkZHgJCVNJTkEyLCVmcDEJfCAuLi5BMitTKEEzKy4uLikKKwlmYWRkeAkJQ09TQjMsJWZwMgl8IC4uLkIzK1MoQjQrLi4uKQorCisJZm11bHgJCSVmcDAsJWZwMQkgfCAuLi5TKEEyKy4uLikKKwlmbXVseAkJJWZwMCwlZnAyCSB8IC4uLlMoQjMrLi4uKQorCisJZmFkZHgJCVNJTkExLCVmcDEJfCAuLi5BMStTKEEyKy4uLikKKwlmYWRkeAkJQ09TQjIsJWZwMgl8IC4uLkIyK1MoQjMrLi4uKQorCisJZm11bHgJCSVmcDAsJWZwMQkgfCAuLi5TKEExKy4uLikKKwlmbXVseAkJJWZwMiwlZnAwCSB8IC4uLlMoQjIrLi4uKQorCisKKworCWZtdWx4CQlSUFJJTUUoJWE2KSwlZnAxCXwgLi4uUidTKEExKy4uLikKKwlmYWRkcwkJQ09TQjEsJWZwMAl8IC4uLkIxK1MoQjIuLi4pCisJZm11bHgJCVNQUklNRSglYTYpLCVmcDAJfCAuLi5TJyhCMStTKEIyKy4uLikpCisKKwltb3ZlbAkJJWQxLC0oJXNwKQl8cmVzdG9yZSB1c2VycyBtb2RlICYgcHJlY2lzaW9uCisJYW5kaWwJCSMweGZmLCVkMQkJfG1hc2sgb2ZmIGFsbCBleGNlcHRpb25zCisJZm1vdmVsCQklZDEsJUZQQ1IKKwlmYWRkeAkJUlBSSU1FKCVhNiksJWZwMQl8IC4uLkNPUyhYKQorCWJzcgkJc3RvX2NvcwkJfHN0b3JlIGNvc2luZSByZXN1bHQKKwlmbW92ZWwJCSglc3ApKywlRlBDUgl8cmVzdG9yZSB1c2VycyBleGNlcHRpb25zCisJZmFkZHMJCVBPU05FRzEoJWE2KSwlZnAwCXwgLi4uU0lOKFgpCisKKwlicmEJCXRfZnJjaW54CisKKworTkVWRU46Cit8LS1SRUdJU1RFUlMgU0FWRUQgU08gRkFSOiBGUDIuCisKKwlmbW92ZXgJCSVmcDAsUlBSSU1FKCVhNikKKwlmbXVseAkJJWZwMCwlZnAwCSB8IC4uLkZQMCBJUyBTID0gUipSCisJZm1vdmVkCQlDT1NCOCwlZnAxCQkJfCAuLi5COAorCWZtb3ZlZAkJU0lOQTcsJWZwMgkJCXwgLi4uQTcKKwlmbXVseAkJJWZwMCwlZnAxCSB8IC4uLlNCOAorCWZtb3ZleAkJJWZwMCxTUFJJTUUoJWE2KQorCWZtdWx4CQklZnAwLCVmcDIJIHwgLi4uU0E3CisJcm9ybAkJIzEsJWQwCisJYW5kaWwJCSMweDgwMDAwMDAwLCVkMAorCWZhZGRkCQlDT1NCNywlZnAxCXwgLi4uQjcrU0I4CisJZmFkZGQJCVNJTkE2LCVmcDIJfCAuLi5BNitTQTcKKwllb3JsCQklZDAsUlBSSU1FKCVhNikKKwllb3JsCQklZDAsU1BSSU1FKCVhNikKKwlmbXVseAkJJWZwMCwlZnAxCSB8IC4uLlMoQjcrU0I4KQorCW9yaWwJCSMweDNGODAwMDAwLCVkMAorCW1vdmVsCQklZDAsUE9TTkVHMSglYTYpCisJZm11bHgJCSVmcDAsJWZwMgkgfCAuLi5TKEE2K1NBNykKKworCWZhZGRkCQlDT1NCNiwlZnAxCXwgLi4uQjYrUyhCNytTQjgpCisJZmFkZGQJCVNJTkE1LCVmcDIJfCAuLi5BNStTKEE2K1NBNykKKworCWZtdWx4CQklZnAwLCVmcDEJIHwgLi4uUyhCNitTKEI3K1NCOCkpCisJZm11bHgJCSVmcDAsJWZwMgkgfCAuLi5TKEE1K1MoQTYrU0E3KSkKKworCWZhZGRkCQlDT1NCNSwlZnAxCXwgLi4uQjUrUyhCNitTKEI3K1NCOCkpCisJZmFkZGQJCVNJTkE0LCVmcDIJfCAuLi5BNCtTKEE1K1MoQTYrU0E3KSkKKworCWZtdWx4CQklZnAwLCVmcDEJIHwgLi4uUyhCNSsuLi4pCisJZm11bHgJCSVmcDAsJWZwMgkgfCAuLi5TKEE0Ky4uLikKKworCWZhZGRkCQlDT1NCNCwlZnAxCXwgLi4uQjQrUyhCNSsuLi4pCisJZmFkZGQJCVNJTkEzLCVmcDIJfCAuLi5BMytTKEE0Ky4uLikKKworCWZtdWx4CQklZnAwLCVmcDEJIHwgLi4uUyhCNCsuLi4pCisJZm11bHgJCSVmcDAsJWZwMgkgfCAuLi5TKEEzKy4uLikKKworCWZhZGR4CQlDT1NCMywlZnAxCXwgLi4uQjMrUyhCNCsuLi4pCisJZmFkZHgJCVNJTkEyLCVmcDIJfCAuLi5BMitTKEEzKy4uLikKKworCWZtdWx4CQklZnAwLCVmcDEJIHwgLi4uUyhCMysuLi4pCisJZm11bHgJCSVmcDAsJWZwMgkgfCAuLi5TKEEyKy4uLikKKworCWZhZGR4CQlDT1NCMiwlZnAxCXwgLi4uQjIrUyhCMysuLi4pCisJZmFkZHgJCVNJTkExLCVmcDIJfCAuLi5BMStTKEEyKy4uLikKKworCWZtdWx4CQklZnAwLCVmcDEJIHwgLi4uUyhCMisuLi4pCisJZm11bHgJCSVmcDIsJWZwMAkgfCAuLi5zKGExKy4uLikKKworCisKKwlmYWRkcwkJQ09TQjEsJWZwMQl8IC4uLkIxK1MoQjIuLi4pCisJZm11bHgJCVJQUklNRSglYTYpLCVmcDAJfCAuLi5SJ1MoQTErLi4uKQorCWZtdWx4CQlTUFJJTUUoJWE2KSwlZnAxCXwgLi4uUycoQjErUyhCMisuLi4pKQorCisJbW92ZWwJCSVkMSwtKCVzcCkJfHNhdmUgdXNlcnMgbW9kZSAmIHByZWNpc2lvbgorCWFuZGlsCQkjMHhmZiwlZDEJCXxtYXNrIG9mZiBhbGwgZXhjZXB0aW9ucworCWZtb3ZlbAkJJWQxLCVGUENSCisJZmFkZHMJCVBPU05FRzEoJWE2KSwlZnAxCXwgLi4uQ09TKFgpCisJYnNyCQlzdG9fY29zCQl8c3RvcmUgY29zaW5lIHJlc3VsdAorCWZtb3ZlbAkJKCVzcCkrLCVGUENSCXxyZXN0b3JlIHVzZXJzIGV4Y2VwdGlvbnMKKwlmYWRkeAkJUlBSSU1FKCVhNiksJWZwMAl8IC4uLlNJTihYKQorCisJYnJhCQl0X2ZyY2lueAorCitTQ0JPUlM6CisJY21waWwJCSMweDNGRkY4MDAwLCVkMAorCWJndAkJUkVEVUNFWAorCisKK1NDU006CisJbW92ZXcJCSMweDAwMDAsWERDQVJFKCVhNikKKwlmbW92ZXMJCSMweDNGODAwMDAwLCVmcDEKKworCW1vdmVsCQklZDEsLSglc3ApCXxzYXZlIHVzZXJzIG1vZGUgJiBwcmVjaXNpb24KKwlhbmRpbAkJIzB4ZmYsJWQxCQl8bWFzayBvZmYgYWxsIGV4Y2VwdGlvbnMKKwlmbW92ZWwJCSVkMSwlRlBDUgorCWZzdWJzCQkjMHgwMDgwMDAwMCwlZnAxCisJYnNyCQlzdG9fY29zCQl8c3RvcmUgY29zaW5lIHJlc3VsdAorCWZtb3ZlbAkJKCVzcCkrLCVGUENSCXxyZXN0b3JlIHVzZXJzIGV4Y2VwdGlvbnMKKwlmbW92ZXgJCVgoJWE2KSwlZnAwCisJYnJhCQl0X2ZyY2lueAorCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvc3NpbmguUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NzaW5oLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhiMzMwOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3NzaW5oLlMKQEAgLTAsMCArMSwxMzUgQEAKK3wKK3wJc3Npbmguc2EgMy4xIDEyLzEwLzkwCit8Cit8ICAgICAgIFRoZSBlbnRyeSBwb2ludCBzU2luaCBjb21wdXRlcyB0aGUgaHlwZXJib2xpYyBzaW5lIG9mCit8ICAgICAgIGFuIGlucHV0IGFyZ3VtZW50OyBzU2luaGQgZG9lcyB0aGUgc2FtZSBleGNlcHQgZm9yIGRlbm9ybWFsaXplZAorfCAgICAgICBpbnB1dC4KK3wKK3wgICAgICAgSW5wdXQ6IERvdWJsZS1leHRlbmRlZCBudW1iZXIgWCBpbiBsb2NhdGlvbiBwb2ludGVkIHRvCit8CQlieSBhZGRyZXNzIHJlZ2lzdGVyIGEwLgorfAorfCAgICAgICBPdXRwdXQ6IFRoZSB2YWx1ZSBzaW5oKFgpIHJldHVybmVkIGluIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIEZwMC4KK3wKK3wgICAgICAgQWNjdXJhY3kgYW5kIE1vbm90b25pY2l0eTogVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMyB1bHBzIGluCit8ICAgICAgICAgICAgICAgNjQgc2lnbmlmaWNhbnQgYml0LCBpLmUuIHdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlCit8ICAgICAgICAgICAgICAgcmVzdWx0IGlzIHN1YnNlcXVlbnRseSByb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZQorfCAgICAgICAgICAgICAgIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMgaW4gZG91YmxlIHByZWNpc2lvbi4KK3wKK3wgICAgICAgU3BlZWQ6IFRoZSBwcm9ncmFtIHNTSU5IIHRha2VzIGFwcHJveGltYXRlbHkgMjgwIGN5Y2xlcy4KK3wKK3wgICAgICAgQWxnb3JpdGhtOgorfAorfCAgICAgICBTSU5ICit8ICAgICAgIDEuIElmIHxYfCA+IDE2MzgwIGxvZzIsIGdvIHRvIDMuCit8Cit8ICAgICAgIDIuICh8WHwgPD0gMTYzODAgbG9nMikgU2luaChYKSBpcyBvYnRhaW5lZCBieSB0aGUgZm9ybXVsYWUKK3wgICAgICAgICAgICAgICB5ID0gfFh8LCBzZ24gPSBzaWduKFgpLCBhbmQgeiA9IGV4cG0xKFkpLAorfCAgICAgICAgICAgICAgIHNpbmgoWCkgPSBzZ24qKDEvMikqKCB6ICsgei8oMSt6KSApLgorfCAgICAgICAgICBFeGl0LgorfAorfCAgICAgICAzLiBJZiB8WHwgPiAxNjQ4MCBsb2cyLCBnbyB0byA1LgorfAorfCAgICAgICA0LiAoMTYzODAgbG9nMiA8IHxYfCA8PSAxNjQ4MCBsb2cyKQorfCAgICAgICAgICAgICAgIHNpbmgoWCkgPSBzaWduKFgpICogZXhwKHxYfCkvMi4KK3wgICAgICAgICAgSG93ZXZlciwgaW52b2tpbmcgZXhwKHxYfCkgbWF5IGNhdXNlIHByZW1hdHVyZSBvdmVyZmxvdy4KK3wgICAgICAgICAgVGh1cywgd2UgY2FsY3VsYXRlIHNpbmgoWCkgYXMgZm9sbG93czoKK3wgICAgICAgICAgICAgWSAgICAgICA6PSB8WHwKK3wgICAgICAgICAgICAgc2duICAgICA6PSBzaWduKFgpCit8ICAgICAgICAgICAgIHNnbkZhY3QgOj0gc2duICogMioqKDE2MzgwKQorfCAgICAgICAgICAgICBZJyAgICAgIDo9IFkgLSAxNjM4MSBsb2cyCit8ICAgICAgICAgICAgIHNpbmgoWCkgOj0gc2duRmFjdCAqIGV4cChZJykuCit8ICAgICAgICAgIEV4aXQuCit8Cit8ICAgICAgIDUuICh8WHwgPiAxNjQ4MCBsb2cyKSBzaW5oKFgpIG11c3Qgb3ZlcmZsb3cuIFJldHVybgorfCAgICAgICAgICBzaWduKFgpKkh1Z2UqSHVnZSB0byBnZW5lcmF0ZSBvdmVyZmxvdyBhbmQgYW4gaW5maW5pdHkgd2l0aAorfCAgICAgICAgICB0aGUgYXBwcm9wcmlhdGUgc2lnbi4gSHVnZSBpcyB0aGUgbGFyZ2VzdCBmaW5pdGUgbnVtYmVyIGluCit8ICAgICAgICAgIGV4dGVuZGVkIGZvcm1hdC4gRXhpdC4KK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfFNTSU5ICWlkbnQJMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworVDE6CS5sb25nIDB4NDBDNjJEMzgsMHhEM0Q2NDYzNCB8IC4uLiAxNjM4MSBMT0cyIExFQUQKK1QyOgkubG9uZyAweDNENkY5MEFFLDB4QjFFNzVDQzcgfCAuLi4gMTYzODEgTE9HMiBUUkFJTAorCisJfHhyZWYJdF9mcmNpbngKKwl8eHJlZgl0X292ZmwKKwl8eHJlZgl0X2V4dGRucm0KKwl8eHJlZglzZXRveAorCXx4cmVmCXNldG94bTEKKworCS5nbG9iYWwJc3NpbmhkCitzc2luaGQ6Cit8LS1TSU5IKFgpID0gWCBGT1IgREVOT1JNQUxJWkVEIFgKKworCWJyYQl0X2V4dGRucm0KKworCS5nbG9iYWwJc3NpbmgKK3NzaW5oOgorCWZtb3ZleAkoJWEwKSwlZnAwCXwgLi4uTE9BRCBJTlBVVAorCisJbW92ZWwJKCVhMCksJWQwCisJbW92ZXcJNCglYTApLCVkMAorCW1vdmVsCSVkMCwlYTEJCXwgc2F2ZSBhIGNvcHkgb2Ygb3JpZ2luYWwgKGNvbXBhY3RlZCkgb3BlcmFuZAorCWFuZGwJIzB4N0ZGRkZGRkYsJWQwCisJY21wbAkjMHg0MDBDQjE2NywlZDAKKwliZ3RzCVNJTkhCSUcKKworfC0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDwgMTYzODAgTE9HMgorfC0tWSA9IHxYfCwgWiA9IEVYUE0xKFkpLCBTSU5IKFgpID0gU0lHTihYKSooMS8yKSooIFogKyBaLygxK1opICkKKworCWZhYnN4CSVmcDAJCXwgLi4uWSA9IHxYfAorCisJbW92ZW1sCSVhMS8lZDEsLSglc3ApCisJZm1vdmVteCAlZnAwLSVmcDAsKCVhMCkKKwljbHJsCSVkMQorCWJzcglzZXRveG0xCQl8IC4uLkZQMCBJUyBaID0gRVhQTTEoWSkKKwlmbW92ZWwJIzAsJWZwY3IKKwltb3ZlbWwJKCVzcCkrLCVhMS8lZDEKKworCWZtb3ZleAklZnAwLCVmcDEKKwlmYWRkcwkjMHgzRjgwMDAwMCwlZnAxCXwgLi4uMStaCisJZm1vdmV4CSVmcDAsLSglc3ApCisJZmRpdngJJWZwMSwlZnAwCQl8IC4uLlovKDErWikKKwltb3ZlbAklYTEsJWQwCisJYW5kbAkjMHg4MDAwMDAwMCwlZDAKKwlvcmwJIzB4M0YwMDAwMDAsJWQwCisJZmFkZHgJKCVzcCkrLCVmcDAKKwltb3ZlbAklZDAsLSglc3ApCisKKwlmbW92ZWwJJWQxLCVmcGNyCisJZm11bHMJKCVzcCkrLCVmcDAJfGxhc3QgZnAgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbnMgc2V0CisKKwlicmEJdF9mcmNpbngKKworU0lOSEJJRzoKKwljbXBsCSMweDQwMENCMkIzLCVkMAorCWJndAl0X292ZmwKKwlmYWJzeAklZnAwCisJZnN1YmQJVDEoJXBjKSwlZnAwCXwgLi4uKHxYfC0xNjM4MUxPRzJfTEVBRCkKKwltb3ZlbAkjMCwtKCVzcCkKKwltb3ZlbAkjMHg4MDAwMDAwMCwtKCVzcCkKKwltb3ZlbAklYTEsJWQwCisJYW5kbAkjMHg4MDAwMDAwMCwlZDAKKwlvcmwJIzB4N0ZGQjAwMDAsJWQwCisJbW92ZWwJJWQwLC0oJXNwKQl8IC4uLkVYVEVOREVEIEZNVAorCWZzdWJkCVQyKCVwYyksJWZwMAl8IC4uLnxYfCAtIDE2MzgxIExPRzIsIEFDQ1VSQVRFCisKKwltb3ZlbAklZDEsLSglc3ApCisJY2xybAklZDEKKwlmbW92ZW14ICVmcDAtJWZwMCwoJWEwKQorCWJzcglzZXRveAorCWZtb3ZlbAkoJXNwKSssJWZwY3IKKworCWZtdWx4CSglc3ApKywlZnAwCXxwb3NzaWJsZSBleGNlcHRpb24KKwlicmEJdF9mcmNpbngKKworCXxlbmQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL3N0YW4uUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3N0YW4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWMyYTE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAvc3Rhbi5TCkBAIC0wLDAgKzEsNDU1IEBACit8Cit8CXN0YW4uc2EgMy4zIDcvMjkvOTEKK3wKK3wJVGhlIGVudHJ5IHBvaW50IHN0YW4gY29tcHV0ZXMgdGhlIHRhbmdlbnQgb2YKK3wJYW4gaW5wdXQgYXJndW1lbnQ7Cit8CXN0YW5kIGRvZXMgdGhlIHNhbWUgZXhjZXB0IGZvciBkZW5vcm1hbGl6ZWQgaW5wdXQuCit8Cit8CUlucHV0OiBEb3VibGUtZXh0ZW5kZWQgbnVtYmVyIFggaW4gbG9jYXRpb24gcG9pbnRlZCB0bworfAkJYnkgYWRkcmVzcyByZWdpc3RlciBhMC4KK3wKK3wJT3V0cHV0OiBUaGUgdmFsdWUgdGFuKFgpIHJldHVybmVkIGluIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIEZwMC4KK3wKK3wJQWNjdXJhY3kgYW5kIE1vbm90b25pY2l0eTogVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMyB1bHAgaW4KK3wJCTY0IHNpZ25pZmljYW50IGJpdCwgaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZQorfAkJcmVzdWx0IGlzIHN1YnNlcXVlbnRseSByb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZQorfAkJcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYyBpbiBkb3VibGUgcHJlY2lzaW9uLgorfAorfAlTcGVlZDogVGhlIHByb2dyYW0gc1RBTiB0YWtlcyBhcHByb3hpbWF0ZWx5IDE3MCBjeWNsZXMgZm9yCit8CQlpbnB1dCBhcmd1bWVudCBYIHN1Y2ggdGhhdCB8WHwgPCAxNVBpLCB3aGljaCBpcyB0aGUgdXN1YWwKK3wJCXNpdHVhdGlvbi4KK3wKK3wJQWxnb3JpdGhtOgorfAorfAkxLiBJZiB8WHwgPj0gMTVQaSBvciB8WHwgPCAyKiooLTQwKSwgZ28gdG8gNi4KK3wKK3wJMi4gRGVjb21wb3NlIFggYXMgWCA9IE4oUGkvMikgKyByIHdoZXJlIHxyfCA8PSBQaS80LiBMZXQKK3wJCWsgPSBOIG1vZCAyLCBzbyBpbiBwYXJ0aWN1bGFyLCBrID0gMCBvciAxLgorfAorfAkzLiBJZiBrIGlzIG9kZCwgZ28gdG8gNS4KK3wKK3wJNC4gKGsgaXMgZXZlbikgVGFuKFgpID0gdGFuKHIpIGFuZCB0YW4ocikgaXMgYXBwcm94aW1hdGVkIGJ5IGEKK3wJCXJhdGlvbmFsIGZ1bmN0aW9uIFUvViB3aGVyZQorfAkJVSA9IHIgKyByKnMqKFAxICsgcyooUDIgKyBzKlAzKSksIGFuZAorfAkJViA9IDEgKyBzKihRMSArIHMqKFEyICsgcyooUTMgKyBzKlE0KSkpLCAgcyA9IHIqci4KK3wJCUV4aXQuCit8Cit8CTQuIChrIGlzIG9kZCkgVGFuKFgpID0gLWNvdChyKS4gU2luY2UgdGFuKHIpIGlzIGFwcHJveGltYXRlZCBieSBhCit8CQlyYXRpb25hbCBmdW5jdGlvbiBVL1Ygd2hlcmUKK3wJCVUgPSByICsgcipzKihQMSArIHMqKFAyICsgcypQMykpLCBhbmQKK3wJCVYgPSAxICsgcyooUTEgKyBzKihRMiArIHMqKFEzICsgcypRNCkpKSwgcyA9IHIqciwKK3wJCS1Db3QocikgPSAtVi9VLiBFeGl0LgorfAorfAk2LiBJZiB8WHwgPiAxLCBnbyB0byA4LgorfAorfAk3LiAofFh8PDIqKigtNDApKSBUYW4oWCkgPSBYLiBFeGl0LgorfAorfAk4LiBPdmVyd3JpdGUgWCBieSBYIDo9IFggcmVtIDJQaS4gTm93IHRoYXQgfFh8IDw9IFBpLCBnbyBiYWNrIHRvIDIuCit8CisKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK3xTVEFOCWlkbnQJMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworI2luY2x1ZGUgImZwc3AuaCIKKworQk9VTkRTMToJLmxvbmcgMHgzRkQ3ODAwMCwweDQwMDRCQzdFCitUV09CWVBJOgkubG9uZyAweDNGRTQ1RjMwLDB4NkRDOUM4ODMKKworVEFOUTQ6CS5sb25nIDB4M0VBMEI3NTksMHhGNTBGODY4OAorVEFOUDM6CS5sb25nIDB4QkVGMkJBQTUsMHhBODkyNEYwNAorCitUQU5RMzoJLmxvbmcgMHhCRjM0NkY1OSwweEIzOUJBNjVGLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCitUQU5QMjoJLmxvbmcgMHgzRkY2MDAwMCwweEUwNzNEM0ZDLDB4MTk5QzRBMDAsMHgwMDAwMDAwMAorCitUQU5RMjoJLmxvbmcgMHgzRkY5MDAwMCwweEQyM0NENjg0LDB4MTVEOTVGQTEsMHgwMDAwMDAwMAorCitUQU5QMToJLmxvbmcgMHhCRkZDMDAwMCwweDg4OTVBNkM1LDB4RkI0MjNCQ0EsMHgwMDAwMDAwMAorCitUQU5RMToJLmxvbmcgMHhCRkZEMDAwMCwweEVFRjU3RTBELDB4QTg0QkM4Q0UsMHgwMDAwMDAwMAorCitJTlZUV09QSTogLmxvbmcgMHgzRkZDMDAwMCwweEEyRjk4MzZFLDB4NEU0NDE1MkEsMHgwMDAwMDAwMAorCitUV09QSTE6CS5sb25nIDB4NDAwMTAwMDAsMHhDOTBGREFBMiwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK1RXT1BJMjoJLmxvbmcgMHgzRkRGMDAwMCwweDg1QTMwOEQ0LDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCit8LS1OKlBJLzIsIC0zMiA8PSBOIDw9IDMyLCBJTiBBIExFQURJTkcgVEVSTSBJTiBFWFQuIEFORCBUUkFJTElORworfC0tVEVSTSBJTiBTR0wuIE5PVEUgVEhBVCBQSSBJUyA2NC1CSVQgTE9ORywgVEhVUyBOKlBJLzIgSVMgQVQKK3wtLU1PU1QgNjkgQklUUyBMT05HLgorCS5nbG9iYWwJUElUQkwKK1BJVEJMOgorICAubG9uZyAgMHhDMDA0MDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgyMTgwMDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweEMyQzc1QkNELDB4MTA1RDdDMjMsMHhBMEQwMDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweEJDN0VEQ0Y3LDB4RkY1MjM2MTEsMHhBMUU4MDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweEI2MzY1RTIyLDB4RUU0NkYwMDAsMHgyMTQ4MDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHhBMTIwMDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweEE5QTU2MDc4LDB4Q0MzMDYzREQsMHgyMUZDMDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweEEzNUNFMUEzLDB4QkIyNTFEQ0IsMHgyMTEwMDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweDlEMTQ2MkNFLDB4QUExOUQ3QjksMHhBMTU4MDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHgyMUUwMDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweDkwODM2NTI0LDB4ODgwMzRCOTYsMHgyMEIwMDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweDhBM0FFNjRGLDB4NzZGODA1ODQsMHhBMTg4MDAwMAorICAubG9uZyAgMHhDMDA0MDAwMCwweDgzRjI2NzdBLDB4NjVFQ0JGNzMsMHgyMUM0MDAwMAorICAubG9uZyAgMHhDMDAzMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHgyMDAwMDAwMAorICAubG9uZyAgMHhDMDAzMDAwMCwweEVFQzJEM0EwLDB4ODdBQzY2OUYsMHgyMTM4MDAwMAorICAubG9uZyAgMHhDMDAzMDAwMCwweEUyMzFENUY2LDB4NjU5NURBN0IsMHhBMTMwMDAwMAorICAubG9uZyAgMHhDMDAzMDAwMCwweEQ1QTBEODRDLDB4NDM3RjRFNTgsMHg5RkMwMDAwMAorICAubG9uZyAgMHhDMDAzMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgyMTAwMDAwMAorICAubG9uZyAgMHhDMDAzMDAwMCwweEJDN0VEQ0Y3LDB4RkY1MjM2MTEsMHhBMTY4MDAwMAorICAubG9uZyAgMHhDMDAzMDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHhBMEEwMDAwMAorICAubG9uZyAgMHhDMDAzMDAwMCwweEEzNUNFMUEzLDB4QkIyNTFEQ0IsMHgyMDkwMDAwMAorICAubG9uZyAgMHhDMDAzMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHgyMTYwMDAwMAorICAubG9uZyAgMHhDMDAzMDAwMCwweDhBM0FFNjRGLDB4NzZGODA1ODQsMHhBMTA4MDAwMAorICAubG9uZyAgMHhDMDAyMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHgxRjgwMDAwMAorICAubG9uZyAgMHhDMDAyMDAwMCwweEUyMzFENUY2LDB4NjU5NURBN0IsMHhBMEIwMDAwMAorICAubG9uZyAgMHhDMDAyMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgyMDgwMDAwMAorICAubG9uZyAgMHhDMDAyMDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHhBMDIwMDAwMAorICAubG9uZyAgMHhDMDAyMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHgyMEUwMDAwMAorICAubG9uZyAgMHhDMDAxMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHgxRjAwMDAwMAorICAubG9uZyAgMHhDMDAxMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgyMDAwMDAwMAorICAubG9uZyAgMHhDMDAxMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHgyMDYwMDAwMAorICAubG9uZyAgMHhDMDAwMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgxRjgwMDAwMAorICAubG9uZyAgMHhCRkZGMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgxRjAwMDAwMAorICAubG9uZyAgMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorICAubG9uZyAgMHgzRkZGMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHg5RjAwMDAwMAorICAubG9uZyAgMHg0MDAwMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHg5RjgwMDAwMAorICAubG9uZyAgMHg0MDAxMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHhBMDYwMDAwMAorICAubG9uZyAgMHg0MDAxMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHhBMDAwMDAwMAorICAubG9uZyAgMHg0MDAxMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHg5RjAwMDAwMAorICAubG9uZyAgMHg0MDAyMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHhBMEUwMDAwMAorICAubG9uZyAgMHg0MDAyMDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHgyMDIwMDAwMAorICAubG9uZyAgMHg0MDAyMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHhBMDgwMDAwMAorICAubG9uZyAgMHg0MDAyMDAwMCwweEUyMzFENUY2LDB4NjU5NURBN0IsMHgyMEIwMDAwMAorICAubG9uZyAgMHg0MDAyMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHg5RjgwMDAwMAorICAubG9uZyAgMHg0MDAzMDAwMCwweDhBM0FFNjRGLDB4NzZGODA1ODQsMHgyMTA4MDAwMAorICAubG9uZyAgMHg0MDAzMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHhBMTYwMDAwMAorICAubG9uZyAgMHg0MDAzMDAwMCwweEEzNUNFMUEzLDB4QkIyNTFEQ0IsMHhBMDkwMDAwMAorICAubG9uZyAgMHg0MDAzMDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHgyMEEwMDAwMAorICAubG9uZyAgMHg0MDAzMDAwMCwweEJDN0VEQ0Y3LDB4RkY1MjM2MTEsMHgyMTY4MDAwMAorICAubG9uZyAgMHg0MDAzMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHhBMTAwMDAwMAorICAubG9uZyAgMHg0MDAzMDAwMCwweEQ1QTBEODRDLDB4NDM3RjRFNTgsMHgxRkMwMDAwMAorICAubG9uZyAgMHg0MDAzMDAwMCwweEUyMzFENUY2LDB4NjU5NURBN0IsMHgyMTMwMDAwMAorICAubG9uZyAgMHg0MDAzMDAwMCwweEVFQzJEM0EwLDB4ODdBQzY2OUYsMHhBMTM4MDAwMAorICAubG9uZyAgMHg0MDAzMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHhBMDAwMDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweDgzRjI2NzdBLDB4NjVFQ0JGNzMsMHhBMUM0MDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweDhBM0FFNjRGLDB4NzZGODA1ODQsMHgyMTg4MDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweDkwODM2NTI0LDB4ODgwMzRCOTYsMHhBMEIwMDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHhBMUUwMDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweDlEMTQ2MkNFLDB4QUExOUQ3QjksMHgyMTU4MDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweEEzNUNFMUEzLDB4QkIyNTFEQ0IsMHhBMTEwMDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweEE5QTU2MDc4LDB4Q0MzMDYzREQsMHhBMUZDMDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHgyMTIwMDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweEI2MzY1RTIyLDB4RUU0NkYwMDAsMHhBMTQ4MDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweEJDN0VEQ0Y3LDB4RkY1MjM2MTEsMHgyMUU4MDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweEMyQzc1QkNELDB4MTA1RDdDMjMsMHgyMEQwMDAwMAorICAubG9uZyAgMHg0MDA0MDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHhBMTgwMDAwMAorCisJLnNldAlJTkFSRyxGUF9TQ1I0CisKKwkuc2V0CVRXT1RPNjMsTF9TQ1IxCisJLnNldAlFTkRGTEFHLExfU0NSMgorCS5zZXQJTixMX1NDUjMKKworCXwgeHJlZgl0X2ZyY2lueAorCXx4cmVmCXRfZXh0ZG5ybQorCisJLmdsb2JhbAlzdGFuZAorc3RhbmQ6Cit8LS1UQU4oWCkgPSBYIEZPUiBERU5PUk1BTElaRUQgWAorCisJYnJhCQl0X2V4dGRucm0KKworCS5nbG9iYWwJc3Rhbgorc3RhbjoKKwlmbW92ZXgJCSglYTApLCVmcDAJfCAuLi5MT0FEIElOUFVUCisKKwltb3ZlbAkJKCVhMCksJWQwCisJbW92ZXcJCTQoJWEwKSwlZDAKKwlhbmRpbAkJIzB4N0ZGRkZGRkYsJWQwCisKKwljbXBpbAkJIzB4M0ZENzgwMDAsJWQwCQl8IC4uLnxYfCA+PSAyKiooLTQwKT8KKwliZ2VzCQlUQU5PSzEKKwlicmEJCVRBTlNNCitUQU5PSzE6CisJY21waWwJCSMweDQwMDRCQzdFLCVkMAkJfCAuLi58WHwgPCAxNSBQST8KKwlibHRzCQlUQU5NQUlOCisJYnJhCQlSRURVQ0VYCisKKworVEFOTUFJTjoKK3wtLVRISVMgSVMgVEhFIFVTVUFMIENBU0UsIHxYfCA8PSAxNSBQSS4KK3wtLVRIRSBBUkdVTUVOVCBSRURVQ1RJT04gSVMgRE9ORSBCWSBUQUJMRSBMT09LIFVQLgorCWZtb3ZleAkJJWZwMCwlZnAxCisJZm11bGQJCVRXT0JZUEksJWZwMQl8IC4uLlgqMi9QSQorCit8LS1ISURFIFRIRSBORVhUIFRXTyBJTlNUUlVDVElPTlMKKwlsZWFsCQlQSVRCTCsweDIwMCwlYTEgfCAuLi5UQUJMRSBPRiBOKlBJLzIsIE4gPSAtMzIsLi4uLDMyCisKK3wtLUZQMSBJUyBOT1cgUkVBRFkKKwlmbW92ZWwJCSVmcDEsJWQwCQl8IC4uLkNPTlZFUlQgVE8gSU5URUdFUgorCisJYXNsbAkJIzQsJWQwCisJYWRkYWwJCSVkMCwlYTEJCXwgLi4uQUREUkVTUyBOKlBJQlkyIElOIFkxLCBZMgorCisJZnN1YngJCSglYTEpKywlZnAwCXwgLi4uWC1ZMQorfC0tSElERSBUSEUgTkVYVCBPTkUKKworCWZzdWJzCQkoJWExKSwlZnAwCXwgLi4uRlAwIElTIFIgPSAoWC1ZMSktWTIKKworCXJvcmwJCSM1LCVkMAorCWFuZGlsCQkjMHg4MDAwMDAwMCwlZDAJfCAuLi5EMCBXQVMgT0REIElGRiBEMCA8IDAKKworVEFOQ09OVDoKKworCWNtcGlsCQkjMCwlZDAKKwlibHQJCU5PREQKKworCWZtb3ZleAkJJWZwMCwlZnAxCisJZm11bHgJCSVmcDEsJWZwMQkJfCAuLi5TID0gUipSCisKKwlmbW92ZWQJCVRBTlE0LCVmcDMKKwlmbW92ZWQJCVRBTlAzLCVmcDIKKworCWZtdWx4CQklZnAxLCVmcDMJCXwgLi4uU1E0CisJZm11bHgJCSVmcDEsJWZwMgkJfCAuLi5TUDMKKworCWZhZGRkCQlUQU5RMywlZnAzCXwgLi4uUTMrU1E0CisJZmFkZHgJCVRBTlAyLCVmcDIJfCAuLi5QMitTUDMKKworCWZtdWx4CQklZnAxLCVmcDMJCXwgLi4uUyhRMytTUTQpCisJZm11bHgJCSVmcDEsJWZwMgkJfCAuLi5TKFAyK1NQMykKKworCWZhZGR4CQlUQU5RMiwlZnAzCXwgLi4uUTIrUyhRMytTUTQpCisJZmFkZHgJCVRBTlAxLCVmcDIJfCAuLi5QMStTKFAyK1NQMykKKworCWZtdWx4CQklZnAxLCVmcDMJCXwgLi4uUyhRMitTKFEzK1NRNCkpCisJZm11bHgJCSVmcDEsJWZwMgkJfCAuLi5TKFAxK1MoUDIrU1AzKSkKKworCWZhZGR4CQlUQU5RMSwlZnAzCXwgLi4uUTErUyhRMitTKFEzK1NRNCkpCisJZm11bHgJCSVmcDAsJWZwMgkJfCAuLi5SUyhQMStTKFAyK1NQMykpCisKKwlmbXVseAkJJWZwMywlZnAxCQl8IC4uLlMoUTErUyhRMitTKFEzK1NRNCkpKQorCisKKwlmYWRkeAkJJWZwMiwlZnAwCQl8IC4uLlIrUlMoUDErUyhQMitTUDMpKQorCisKKwlmYWRkcwkJIzB4M0Y4MDAwMDAsJWZwMQl8IC4uLjErUyhRMSsuLi4pCisKKwlmbW92ZWwJCSVkMSwlZnBjcgkJfHJlc3RvcmUgdXNlcnMgZXhjZXB0aW9ucworCWZkaXZ4CQklZnAxLCVmcDAJCXxsYXN0IGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb24gc2V0CisKKwlicmEJCXRfZnJjaW54CisKK05PREQ6CisJZm1vdmV4CQklZnAwLCVmcDEKKwlmbXVseAkJJWZwMCwlZnAwCQl8IC4uLlMgPSBSKlIKKworCWZtb3ZlZAkJVEFOUTQsJWZwMworCWZtb3ZlZAkJVEFOUDMsJWZwMgorCisJZm11bHgJCSVmcDAsJWZwMwkJfCAuLi5TUTQKKwlmbXVseAkJJWZwMCwlZnAyCQl8IC4uLlNQMworCisJZmFkZGQJCVRBTlEzLCVmcDMJfCAuLi5RMytTUTQKKwlmYWRkeAkJVEFOUDIsJWZwMgl8IC4uLlAyK1NQMworCisJZm11bHgJCSVmcDAsJWZwMwkJfCAuLi5TKFEzK1NRNCkKKwlmbXVseAkJJWZwMCwlZnAyCQl8IC4uLlMoUDIrU1AzKQorCisJZmFkZHgJCVRBTlEyLCVmcDMJfCAuLi5RMitTKFEzK1NRNCkKKwlmYWRkeAkJVEFOUDEsJWZwMgl8IC4uLlAxK1MoUDIrU1AzKQorCisJZm11bHgJCSVmcDAsJWZwMwkJfCAuLi5TKFEyK1MoUTMrU1E0KSkKKwlmbXVseAkJJWZwMCwlZnAyCQl8IC4uLlMoUDErUyhQMitTUDMpKQorCisJZmFkZHgJCVRBTlExLCVmcDMJfCAuLi5RMStTKFEyK1MoUTMrU1E0KSkKKwlmbXVseAkJJWZwMSwlZnAyCQl8IC4uLlJTKFAxK1MoUDIrU1AzKSkKKworCWZtdWx4CQklZnAzLCVmcDAJCXwgLi4uUyhRMStTKFEyK1MoUTMrU1E0KSkpCisKKworCWZhZGR4CQklZnAyLCVmcDEJCXwgLi4uUitSUyhQMStTKFAyK1NQMykpCisJZmFkZHMJCSMweDNGODAwMDAwLCVmcDAJfCAuLi4xK1MoUTErLi4uKQorCisKKwlmbW92ZXgJCSVmcDEsLSglc3ApCisJZW9yaWwJCSMweDgwMDAwMDAwLCglc3ApCisKKwlmbW92ZWwJCSVkMSwlZnBjcgkJfHJlc3RvcmUgdXNlcnMgZXhjZXB0aW9ucworCWZkaXZ4CQkoJXNwKSssJWZwMAl8bGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uIHNldAorCisJYnJhCQl0X2ZyY2lueAorCitUQU5CT1JTOgorfC0tSUYgfFh8ID4gMTVQSSwgV0UgVVNFIFRIRSBHRU5FUkFMIEFSR1VNRU5UIFJFRFVDVElPTi4KK3wtLUlGIHxYfCA8IDIqKigtNDApLCBSRVRVUk4gWCBPUiAxLgorCWNtcGlsCQkjMHgzRkZGODAwMCwlZDAKKwliZ3RzCQlSRURVQ0VYCisKK1RBTlNNOgorCisJZm1vdmV4CQklZnAwLC0oJXNwKQorCWZtb3ZlbAkJJWQxLCVmcGNyCQkgfHJlc3RvcmUgdXNlcnMgZXhjZXB0aW9ucworCWZtb3ZleAkJKCVzcCkrLCVmcDAJfGxhc3QgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbiBzZXQKKworCWJyYQkJdF9mcmNpbngKKworCitSRURVQ0VYOgorfC0tV0hFTiBSRURVQ0VYIElTIFVTRUQsIFRIRSBDT0RFIFdJTEwgSU5FVklUQUJMWSBCRSBTTE9XLgorfC0tVEhJUyBSRURVQ1RJT04gTUVUSE9ELCBIT1dFVkVSLCBJUyBNVUNIIEZBU1RFUiBUSEFOIFVTSU5HCit8LS1USEUgUkVNQUlOREVSIElOU1RSVUNUSU9OIFdISUNIIElTIE5PVyBJTiBTT0ZUV0FSRS4KKworCWZtb3ZlbXgJJWZwMi0lZnA1LC0oJWE3KQl8IC4uLnNhdmUgRlAyIHRocm91Z2ggRlA1CisJbW92ZWwJCSVkMiwtKCVhNykKKyAgICAgICAgZm1vdmVzICAgICAgICAgIzB4MDAwMDAwMDAsJWZwMQorCit8LS1JZiBjb21wYWN0IGZvcm0gb2YgYWJzKGFyZykgaW4gZDA9JDdmZmVmZmZmLCBhcmd1bWVudCBpcyBzbyBsYXJnZSB0aGF0Cit8LS10aGVyZSBpcyBhIGRhbmdlciBvZiB1bndhbnRlZCBvdmVyZmxvdyBpbiBmaXJzdCBMT09QIGl0ZXJhdGlvbi4gIEluIHRoaXMKK3wtLWNhc2UsIHJlZHVjZSBhcmd1bWVudCBieSBvbmUgcmVtYWluZGVyIHN0ZXAgdG8gbWFrZSBzdWJzZXF1ZW50IHJlZHVjdGlvbgorfC0tc2FmZS4KKwljbXBpbAkjMHg3ZmZlZmZmZiwlZDAJCXxpcyBhcmd1bWVudCBkYW5nZXJvdXNseSBsYXJnZT8KKwlibmVzCUxPT1AKKwltb3ZlbAkjMHg3ZmZlMDAwMCxGUF9TQ1IyKCVhNikJfHllcworfAkJCQkJO2NyZWF0ZSAyKioxNjM4MypQSS8yCisJbW92ZWwJIzB4YzkwZmRhYTIsRlBfU0NSMis0KCVhNikKKwljbHJsCUZQX1NDUjIrOCglYTYpCisJZnRzdHgJJWZwMAkJCXx0ZXN0IHNpZ24gb2YgYXJndW1lbnQKKwltb3ZlbAkjMHg3ZmRjMDAwMCxGUF9TQ1IzKCVhNikJfGNyZWF0ZSBsb3cgaGFsZiBvZiAyKioxNjM4MyoKK3wJCQkJCTtQSS8yIGF0IEZQX1NDUjMKKwltb3ZlbAkjMHg4NWEzMDhkMyxGUF9TQ1IzKzQoJWE2KQorCWNscmwgICBGUF9TQ1IzKzgoJWE2KQorCWZibHQJcmVkX25lZworCW9ydwkjMHg4MDAwLEZQX1NDUjIoJWE2KQl8cG9zaXRpdmUgYXJnCisJb3J3CSMweDgwMDAsRlBfU0NSMyglYTYpCityZWRfbmVnOgorCWZhZGR4ICBGUF9TQ1IyKCVhNiksJWZwMAkJfGhpZ2ggcGFydCBvZiByZWR1Y3Rpb24gaXMgZXhhY3QKKwlmbW92ZXggICVmcDAsJWZwMQkJfHNhdmUgaGlnaCByZXN1bHQgaW4gZnAxCisJZmFkZHggIEZQX1NDUjMoJWE2KSwlZnAwCQl8bG93IHBhcnQgb2YgcmVkdWN0aW9uCisJZnN1YnggICVmcDAsJWZwMQkJCXxkZXRlcm1pbmUgbG93IGNvbXBvbmVudCBvZiByZXN1bHQKKwlmYWRkeCAgRlBfU0NSMyglYTYpLCVmcDEJCXxmcDAvZnAxIGFyZSByZWR1Y2VkIGFyZ3VtZW50LgorCit8LS1PTiBFTlRSWSwgRlAwIElTIFgsIE9OIFJFVFVSTiwgRlAwIElTIFggUkVNIFBJLzIsIHxYfCA8PSBQSS80LgorfC0taW50ZWdlciBxdW90aWVudCB3aWxsIGJlIHN0b3JlZCBpbiBOCit8LS1JbnRlcm1lZGlhdGUgcmVtYWluZGVyIGlzIDY2LWJpdCBsb25nOyAoUixyKSBpbiAoRlAwLEZQMSkKKworTE9PUDoKKwlmbW92ZXgJCSVmcDAsSU5BUkcoJWE2KQl8IC4uListMioqSyAqIEYsIDEgPD0gRiA8IDIKKwltb3ZldwkJSU5BUkcoJWE2KSwlZDAKKyAgICAgICAgbW92ZWwgICAgICAgICAgJWQwLCVhMQkJfCAuLi5zYXZlIGEgY29weSBvZiBEMAorCWFuZGlsCQkjMHgwMDAwN0ZGRiwlZDAKKwlzdWJpbAkJIzB4MDAwMDNGRkYsJWQwCXwgLi4uRDAgSVMgSworCWNtcGlsCQkjMjgsJWQwCisJYmxlcwkJTEFTVExPT1AKK0NPTlRMT09QOgorCXN1YmlsCQkjMjcsJWQwCSB8IC4uLkQwIElTIEwgOj0gSy0yNworCW1vdmVsCQkjMCxFTkRGTEFHKCVhNikKKwlicmFzCQlXT1JLCitMQVNUTE9PUDoKKwljbHJsCQklZDAJCXwgLi4uRDAgSVMgTCA6PSAwCisJbW92ZWwJCSMxLEVOREZMQUcoJWE2KQorCitXT1JLOgorfC0tRklORCBUSEUgUkVNQUlOREVSIE9GIChSLHIpIFcuUi5ULgkyKipMICogKFBJLzIpLiBMIElTIFNPIENIT1NFTgorfC0tVEhBVAlJTlQoIFggKiAoMi9QSSkgLyAyKiooTCkgKSA8IDIqKjI5LgorCit8LS1DUkVBVEUgMioqKC1MKSAqICgyL1BJKSwgU0lHTihJTkFSRykqMioqKDYzKSwKK3wtLTIqKkwgKiAoUElieTJfMSksIDIqKkwgKiAoUElieTJfMikKKworCW1vdmVsCQkjMHgwMDAwM0ZGRSwlZDIJfCAuLi5CSUFTRUQgRVhQTyBPRiAyL1BJCisJc3VibAkJJWQwLCVkMgkJfCAuLi5CSUFTRUQgRVhQTyBPRiAyKiooLUwpKigyL1BJKQorCisJbW92ZWwJCSMweEEyRjk4MzZFLEZQX1NDUjErNCglYTYpCisJbW92ZWwJCSMweDRFNDQxNTJBLEZQX1NDUjErOCglYTYpCisJbW92ZXcJCSVkMixGUF9TQ1IxKCVhNikJfCAuLi5GUF9TQ1IxIGlzIDIqKigtTCkqKDIvUEkpCisKKwlmbW92ZXgJCSVmcDAsJWZwMgorCWZtdWx4CQlGUF9TQ1IxKCVhNiksJWZwMgorfC0tV0UgTVVTVCBOT1cgRklORCBJTlQoRlAyKS4gU0lOQ0UgV0UgTkVFRCBUSElTIFZBTFVFIElOCit8LS1GTE9BVElORyBQT0lOVCBGT1JNQVQsIFRIRSBUV08gRk1PVkUnUwlGTU9WRS5MIEZQIDwtLT4gTgorfC0tV0lMTCBCRSBUT08gSU5FRkZJQ0lFTlQuIFRIRSBXQVkgQVJPVU5EIElUIElTIFRIQVQKK3wtLShTSUdOKElOQVJHKSoyKio2MwkrCUZQMikgLSBTSUdOKElOQVJHKSoyKio2MyBXSUxMIEdJVkUKK3wtLVVTIFRIRSBERVNJUkVEIFZBTFVFIElOIEZMT0FUSU5HIFBPSU5ULgorCit8LS1ISURFIFNJWCBDWUNMRVMgT0YgSU5TVFJVQ1RJT04KKyAgICAgICAgbW92ZWwJCSVhMSwlZDIKKyAgICAgICAgc3dhcAkJJWQyCisJYW5kaWwJCSMweDgwMDAwMDAwLCVkMgorCW9yaWwJCSMweDVGMDAwMDAwLCVkMgl8IC4uLkQyIElTIFNJR04oSU5BUkcpKjIqKjYzIElOIFNHTAorCW1vdmVsCQklZDIsVFdPVE82MyglYTYpCisKKwltb3ZlbAkJJWQwLCVkMgorCWFkZGlsCQkjMHgwMDAwM0ZGRiwlZDIJfCAuLi5CSUFTRUQgRVhQTyBPRiAyKipMICogKFBJLzIpCisKK3wtLUZQMiBJUyBSRUFEWQorCWZhZGRzCQlUV09UTzYzKCVhNiksJWZwMgl8IC4uLlRIRSBGUkFDVElPTkFMIFBBUlQgT0YgRlAxIElTIFJPVU5ERUQKKworfC0tSElERSA0IENZQ0xFUyBPRiBJTlNUUlVDVElPTjsgY3JlYXRpbmcgMioqKEwpKlBpYnkyXzEgIGFuZCAgMioqKEwpKlBpYnkyXzIKKyAgICAgICAgbW92ZXcJCSVkMixGUF9TQ1IyKCVhNikKKwljbHJ3ICAgICAgICAgICBGUF9TQ1IyKzIoJWE2KQorCW1vdmVsCQkjMHhDOTBGREFBMixGUF9TQ1IyKzQoJWE2KQorCWNscmwJCUZQX1NDUjIrOCglYTYpCQl8IC4uLkZQX1NDUjIgaXMgIDIqKihMKSAqIFBpYnkyXzEKKworfC0tRlAyIElTIFJFQURZCisJZnN1YnMJCVRXT1RPNjMoJWE2KSwlZnAyCQl8IC4uLkZQMiBpcyBOCisKKwlhZGRpbAkJIzB4MDAwMDNGREQsJWQwCisgICAgICAgIG1vdmV3CQklZDAsRlBfU0NSMyglYTYpCisJY2xydyAgICAgICAgICAgRlBfU0NSMysyKCVhNikKKwltb3ZlbAkJIzB4ODVBMzA4RDMsRlBfU0NSMys0KCVhNikKKwljbHJsCQlGUF9TQ1IzKzgoJWE2KQkJfCAuLi5GUF9TQ1IzIGlzIDIqKihMKSAqIFBpYnkyXzIKKworCW1vdmVsCQlFTkRGTEFHKCVhNiksJWQwCisKK3wtLVdlIGFyZSBub3cgcmVhZHkgdG8gcGVyZm9ybSAoUityKSAtIE4qUDEgLSBOKlAyLCBQMSA9IDIqKihMKSAqIFBpYnkyXzEgYW5kCit8LS1QMiA9IDIqKihMKSAqIFBpYnkyXzIKKwlmbW92ZXgJCSVmcDIsJWZwNAorCWZtdWx4CQlGUF9TQ1IyKCVhNiksJWZwNAkJfCAuLi5XID0gTipQMQorCWZtb3ZleAkJJWZwMiwlZnA1CisJZm11bHgJCUZQX1NDUjMoJWE2KSwlZnA1CQl8IC4uLncgPSBOKlAyCisJZm1vdmV4CQklZnA0LCVmcDMKK3wtLXdlIHdhbnQgUCtwID0gVyt3ICBidXQgIHxwfCA8PSBoYWxmIHVscCBvZiBQCit8LS1UaGVuLCB3ZSBuZWVkIHRvIGNvbXB1dGUgIEEgOj0gUi1QICAgYW5kICBhIDo9IHItcAorCWZhZGR4CQklZnA1LCVmcDMJCQl8IC4uLkZQMyBpcyBQCisJZnN1YngJCSVmcDMsJWZwNAkJCXwgLi4uVy1QCisKKwlmc3VieAkJJWZwMywlZnAwCQkJfCAuLi5GUDAgaXMgQSA6PSBSIC0gUAorICAgICAgICBmYWRkeAkJJWZwNSwlZnA0CQkJfCAuLi5GUDQgaXMgcCA9IChXLVApK3cKKworCWZtb3ZleAkJJWZwMCwlZnAzCQkJfCAuLi5GUDMgQQorCWZzdWJ4CQklZnA0LCVmcDEJCQl8IC4uLkZQMSBpcyBhIDo9IHIgLSBwCisKK3wtLU5vdyB3ZSBuZWVkIHRvIG5vcm1hbGl6ZSAoQSxhKSB0byAgIm5ldyAoUixyKSIgd2hlcmUgUityID0gQSthIGJ1dAorfC0tfHJ8IDw9IGhhbGYgdWxwIG9mIFIuCisJZmFkZHgJCSVmcDEsJWZwMAkJCXwgLi4uRlAwIGlzIFIgOj0gQSthCit8LS1ObyBuZWVkIHRvIGNhbGN1bGF0ZSByIGlmIHRoaXMgaXMgdGhlIGxhc3QgbG9vcAorCWNtcGlsCQkjMCwlZDAKKwliZ3QJCVJFU1RPUkUKKworfC0tTmVlZCB0byBjYWxjdWxhdGUgcgorCWZzdWJ4CQklZnAwLCVmcDMJCQl8IC4uLkEtUgorCWZhZGR4CQklZnAzLCVmcDEJCQl8IC4uLkZQMSBpcyByIDo9IChBLVIpK2EKKwlicmEJCUxPT1AKKworUkVTVE9SRToKKyAgICAgICAgZm1vdmVsCQklZnAyLE4oJWE2KQorCW1vdmVsCQkoJWE3KSssJWQyCisJZm1vdmVteAkoJWE3KSssJWZwMi0lZnA1CisKKworCW1vdmVsCQlOKCVhNiksJWQwCisgICAgICAgIHJvcmwJCSMxLCVkMAorCisKKwlicmEJCVRBTkNPTlQKKworCXxlbmQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL3N0YW5oLlMgYi9hcmNoL202OGsvZnBzcDA0MC9zdGFuaC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYjAwOTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC9zdGFuaC5TCkBAIC0wLDAgKzEsMTg1IEBACit8Cit8CXN0YW5oLnNhIDMuMSAxMi8xMC85MAorfAorfAlUaGUgZW50cnkgcG9pbnQgc1RhbmggY29tcHV0ZXMgdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBvZgorfAlhbiBpbnB1dCBhcmd1bWVudDsgc1RhbmhkIGRvZXMgdGhlIHNhbWUgZXhjZXB0IGZvciBkZW5vcm1hbGl6ZWQKK3wJaW5wdXQuCit8Cit8CUlucHV0OiBEb3VibGUtZXh0ZW5kZWQgbnVtYmVyIFggaW4gbG9jYXRpb24gcG9pbnRlZCB0bworfAkJYnkgYWRkcmVzcyByZWdpc3RlciBhMC4KK3wKK3wJT3V0cHV0OiBUaGUgdmFsdWUgdGFuaChYKSByZXR1cm5lZCBpbiBmbG9hdGluZy1wb2ludCByZWdpc3RlciBGcDAuCit8Cit8CUFjY3VyYWN5IGFuZCBNb25vdG9uaWNpdHk6IFRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDMgdWxwcyBpbgorfAkJNjQgc2lnbmlmaWNhbnQgYml0LCBpLmUuIHdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlCit8CQlyZXN1bHQgaXMgc3Vic2VxdWVudGx5IHJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlCit8CQlyZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljIGluIGRvdWJsZSBwcmVjaXNpb24uCit8Cit8CVNwZWVkOiBUaGUgcHJvZ3JhbSBzdGFuaCB0YWtlcyBhcHByb3hpbWF0ZWx5IDI3MCBjeWNsZXMuCit8Cit8CUFsZ29yaXRobToKK3wKK3wJVEFOSAorfAkxLiBJZiB8WHwgPj0gKDUvMikgbG9nMiBvciB8WHwgPD0gMioqKC00MCksIGdvIHRvIDMuCit8Cit8CTIuICgyKiooLTQwKSA8IHxYfCA8ICg1LzIpIGxvZzIpIENhbGN1bGF0ZSB0YW5oKFgpIGJ5Cit8CQlzZ24gOj0gc2lnbihYKSwgeSA6PSAyfFh8LCB6IDo9IGV4cG0xKFkpLCBhbmQKK3wJCXRhbmgoWCkgPSBzZ24qKCB6LygyK3opICkuCit8CQlFeGl0LgorfAorfAkzLiAofFh8IDw9IDIqKigtNDApIG9yIHxYfCA+PSAoNS8yKSBsb2cyKS4gSWYgfFh8IDwgMSwKK3wJCWdvIHRvIDcuCit8Cit8CTQuICh8WHwgPj0gKDUvMikgbG9nMikgSWYgfFh8ID49IDUwIGxvZzIsIGdvIHRvIDYuCit8Cit8CTUuICgoNS8yKSBsb2cyIDw9IHxYfCA8IDUwIGxvZzIpIENhbGN1bGF0ZSB0YW5oKFgpIGJ5Cit8CQlzZ24gOj0gc2lnbihYKSwgeSA6PSAyfFh8LCB6IDo9IGV4cChZKSwKK3wJCXRhbmgoWCkgPSBzZ24gLSBbIHNnbioyLygxK3opIF0uCit8CQlFeGl0LgorfAorfAk2LiAofFh8ID49IDUwIGxvZzIpIFRhbmgoWCkgPSArLTEgKHJvdW5kIHRvIG5lYXJlc3QpLiBUaHVzLCB3ZQorfAkJY2FsY3VsYXRlIFRhbmgoWCkgYnkKK3wJCXNnbiA6PSBzaWduKFgpLCBUaW55IDo9IDIqKigtMTI2KSwKK3wJCXRhbmgoWCkgOj0gc2duIC0gc2duKlRpbnkuCit8CQlFeGl0LgorfAorfAk3LiAofFh8IDwgMioqKC00MCkpLiBUYW5oKFgpID0gWC4JRXhpdC4KK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfFNUQU5ICWlkbnQJMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworI2luY2x1ZGUgImZwc3AuaCIKKworCS5zZXQJWCxGUF9TQ1I1CisJLnNldAlYRENBUkUsWCsyCisJLnNldAlYRlJBQyxYKzQKKworCS5zZXQJU0dOLExfU0NSMworCisJLnNldAlWLEZQX1NDUjYKKworQk9VTkRTMToJLmxvbmcgMHgzRkQ3ODAwMCwweDNGRkZERENFIHwgLi4uIDJeKC00MCksICg1LzIpTE9HMgorCisJfHhyZWYJdF9mcmNpbngKKwl8eHJlZgl0X2V4dGRucm0KKwl8eHJlZglzZXRveAorCXx4cmVmCXNldG94bTEKKworCS5nbG9iYWwJc3RhbmhkCitzdGFuaGQ6Cit8LS1UQU5IKFgpID0gWCBGT1IgREVOT1JNQUxJWkVEIFgKKworCWJyYQkJdF9leHRkbnJtCisKKwkuZ2xvYmFsCXN0YW5oCitzdGFuaDoKKwlmbW92ZXgJCSglYTApLCVmcDAJfCAuLi5MT0FEIElOUFVUCisKKwlmbW92ZXgJCSVmcDAsWCglYTYpCisJbW92ZWwJCSglYTApLCVkMAorCW1vdmV3CQk0KCVhMCksJWQwCisJbW92ZWwJCSVkMCxYKCVhNikKKwlhbmRsCQkjMHg3RkZGRkZGRiwlZDAKKwljbXAybAkJQk9VTkRTMSglcGMpLCVkMAl8IC4uLjIqKigtNDApIDwgfFh8IDwgKDUvMilMT0cyID8KKwliY3NzCQlUQU5IQk9SUworCit8LS1USElTIElTIFRIRSBVU1VBTCBDQVNFCit8LS1ZID0gMnxYfCwgWiA9IEVYUE0xKFkpLCBUQU5IKFgpID0gU0lHTihYKSAqIFogLyAoWisyKS4KKworCW1vdmVsCQlYKCVhNiksJWQwCisJbW92ZWwJCSVkMCxTR04oJWE2KQorCWFuZGwJCSMweDdGRkYwMDAwLCVkMAorCWFkZGwJCSMweDAwMDEwMDAwLCVkMAl8IC4uLkVYUE9ORU5UIE9GIDJ8WHwKKwltb3ZlbAkJJWQwLFgoJWE2KQorCWFuZGwJCSMweDgwMDAwMDAwLFNHTiglYTYpCisJZm1vdmV4CQlYKCVhNiksJWZwMAkJfCAuLi5GUDAgSVMgWSA9IDJ8WHwKKworCW1vdmVsCQklZDEsLSglYTcpCisJY2xybAkJJWQxCisJZm1vdmVteAklZnAwLSVmcDAsKCVhMCkKKwlic3IJCXNldG94bTEJCXwgLi4uRlAwIElTIFogPSBFWFBNMShZKQorCW1vdmVsCQkoJWE3KSssJWQxCisKKwlmbW92ZXgJCSVmcDAsJWZwMQorCWZhZGRzCQkjMHg0MDAwMDAwMCwlZnAxCXwgLi4uWisyCisJbW92ZWwJCVNHTiglYTYpLCVkMAorCWZtb3ZleAkJJWZwMSxWKCVhNikKKwllb3JsCQklZDAsViglYTYpCisKKwlmbW92ZWwJCSVkMSwlRlBDUgkJfHJlc3RvcmUgdXNlcnMgZXhjZXB0aW9ucworCWZkaXZ4CQlWKCVhNiksJWZwMAorCWJyYQkJdF9mcmNpbngKKworVEFOSEJPUlM6CisJY21wbAkJIzB4M0ZGRjgwMDAsJWQwCisJYmx0CQlUQU5IU00KKworCWNtcGwJCSMweDQwMDQ4QUExLCVkMAorCWJndAkJVEFOSEhVR0UKKworfC0tICg1LzIpIExPRzIgPCB8WHwgPCA1MCBMT0cyLAorfC0tVEFOSChYKSA9IDEgLSAoMi9bRVhQKDJYKSsxXSkuIExFVCBZID0gMnxYfCwgU0dOID0gU0lHTihYKSwKK3wtLVRBTkgoWCkgPSBTR04gLQlTR04qMi9bRVhQKFkpKzFdLgorCisJbW92ZWwJCVgoJWE2KSwlZDAKKwltb3ZlbAkJJWQwLFNHTiglYTYpCisJYW5kbAkJIzB4N0ZGRjAwMDAsJWQwCisJYWRkbAkJIzB4MDAwMTAwMDAsJWQwCXwgLi4uRVhQTyBPRiAyfFh8CisJbW92ZWwJCSVkMCxYKCVhNikJCXwgLi4uWSA9IDJ8WHwKKwlhbmRsCQkjMHg4MDAwMDAwMCxTR04oJWE2KQorCW1vdmVsCQlTR04oJWE2KSwlZDAKKwlmbW92ZXgJCVgoJWE2KSwlZnAwCQl8IC4uLlkgPSAyfFh8CisKKwltb3ZlbAkJJWQxLC0oJWE3KQorCWNscmwJCSVkMQorCWZtb3ZlbXgJJWZwMC0lZnAwLCglYTApCisJYnNyCQlzZXRveAkJfCAuLi5GUDAgSVMgRVhQKFkpCisJbW92ZWwJCSglYTcpKywlZDEKKwltb3ZlbAkJU0dOKCVhNiksJWQwCisJZmFkZHMJCSMweDNGODAwMDAwLCVmcDAJfCAuLi5FWFAoWSkrMQorCisJZW9ybAkJIzB4QzAwMDAwMDAsJWQwCXwgLi4uLVNJR04oWCkqMgorCWZtb3ZlcwkJJWQwLCVmcDEJCXwgLi4uLVNJR04oWCkqMiBJTiBTR0wgRk1UCisJZmRpdngJCSVmcDAsJWZwMQkJfCAuLi4tU0lHTihYKTIgLyBbRVhQKFkpKzEgXQorCisJbW92ZWwJCVNHTiglYTYpLCVkMAorCW9ybAkJIzB4M0Y4MDAwMDAsJWQwCXwgLi4uU0dOCisJZm1vdmVzCQklZDAsJWZwMAkJfCAuLi5TR04gSU4gU0dMIEZNVAorCisJZm1vdmVsCQklZDEsJUZQQ1IJCXxyZXN0b3JlIHVzZXJzIGV4Y2VwdGlvbnMKKwlmYWRkeAkJJWZwMSwlZnAwCisKKwlicmEJCXRfZnJjaW54CisKK1RBTkhTTToKKwltb3ZldwkJIzB4MDAwMCxYRENBUkUoJWE2KQorCisJZm1vdmVsCQklZDEsJUZQQ1IJCXxyZXN0b3JlIHVzZXJzIGV4Y2VwdGlvbnMKKwlmbW92ZXgJCVgoJWE2KSwlZnAwCQl8bGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uIHNldAorCisJYnJhCQl0X2ZyY2lueAorCitUQU5ISFVHRToKK3wtLS1SRVRVUk4gU0dOKFgpIC0gU0dOKFgpRVBTCisJbW92ZWwJCVgoJWE2KSwlZDAKKwlhbmRsCQkjMHg4MDAwMDAwMCwlZDAKKwlvcmwJCSMweDNGODAwMDAwLCVkMAorCWZtb3ZlcwkJJWQwLCVmcDAKKwlhbmRsCQkjMHg4MDAwMDAwMCwlZDAKKwllb3JsCQkjMHg4MDgwMDAwMCwlZDAJfCAuLi4tU0lHTihYKSpFUFMKKworCWZtb3ZlbAkJJWQxLCVGUENSCQl8cmVzdG9yZSB1c2VycyBleGNlcHRpb25zCisJZmFkZHMJCSVkMCwlZnAwCisKKwlicmEJCXRfZnJjaW54CisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9zdG9fcmVzLlMgYi9hcmNoL202OGsvZnBzcDA0MC9zdG9fcmVzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNkY2EzYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3N0b19yZXMuUwpAQCAtMCwwICsxLDk4IEBACit8Cit8CXN0b19yZXMuc2EgMy4xIDEyLzEwLzkwCit8Cit8CVRha2VzIHRoZSByZXN1bHQgYW5kIHB1dHMgaXQgaW4gd2hlcmUgdGhlIHVzZXIgZXhwZWN0cyBpdC4KK3wJTGlicmFyeSBmdW5jdGlvbnMgcmV0dXJuIHJlc3VsdCBpbiBmcDAuCUlmIGZwMCBpcyBub3QgdGhlCit8CXVzZXJzIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIHRoZW4gZnAwIGlzIG1vdmVkIHRvIHRoZQorfAljb3JyZWN0IGZsb2F0aW5nLXBvaW50IGRlc3RpbmF0aW9uIHJlZ2lzdGVyLiAgZnAwIGFuZCBmcDEKK3wJYXJlIHRoZW4gcmVzdG9yZWQgdG8gdGhlIG9yaWdpbmFsIGNvbnRlbnRzLgorfAorfAlJbnB1dDoJcmVzdWx0IGluIGZwMCxmcDEKK3wKK3wJCWQyICYgYTAgc2hvdWxkIGJlIGtlcHQgdW5tb2RpZmllZAorfAorfAlPdXRwdXQ6CW1vdmVzIHRoZSByZXN1bHQgdG8gdGhlIHRydWUgZGVzdGluYXRpb24gcmVnIG9yIG1lbQorfAorfAlNb2RpZmllczogZGVzdGluYXRpb24gZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXIKK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworU1RPX1JFUzoJfGlkbnQJMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCisJLmdsb2JhbAlzdG9fY29zCitzdG9fY29zOgorCWJmZXh0dQkJQ01EUkVHMUIoJWE2KXsjMTM6IzN9LCVkMAl8ZXh0cmFjdCBjb3MgZGVzdGluYXRpb24KKwljbXBpYgkJIzMsJWQwCQl8Y2hlY2sgZm9yIGZwMC9mcDEgY2FzZXMKKwlibGVzCQljX2ZwMDEyMworCWZtb3ZlbXgJJWZwMS0lZnAxLC0oJWE3KQorCW1vdmVxbAkJIzcsJWQxCisJc3VibAkJJWQwLCVkMQkJfGQxID0gNy0gKGRlc3QuIHJlZy4gbm8uKQorCWNscmwJCSVkMAorCWJzZXRsCQklZDEsJWQwCQl8ZDAgaXMgZHluYW1pYyByZWdpc3RlciBtYXNrCisJZm1vdmVteAkoJWE3KSssJWQwCisJcnRzCitjX2ZwMDEyMzoKKwljbXBpYgkJIzAsJWQwCisJYmVxcwkJY19pc19mcDAKKwljbXBpYgkJIzEsJWQwCisJYmVxcwkJY19pc19mcDEKKwljbXBpYgkJIzIsJWQwCisJYmVxcwkJY19pc19mcDIKK2NfaXNfZnAzOgorCWZtb3ZlbXgJJWZwMS0lZnAxLFVTRVJfRlAzKCVhNikKKwlydHMKK2NfaXNfZnAyOgorCWZtb3ZlbXgJJWZwMS0lZnAxLFVTRVJfRlAyKCVhNikKKwlydHMKK2NfaXNfZnAxOgorCWZtb3ZlbXgJJWZwMS0lZnAxLFVTRVJfRlAxKCVhNikKKwlydHMKK2NfaXNfZnAwOgorCWZtb3ZlbXgJJWZwMS0lZnAxLFVTRVJfRlAwKCVhNikKKwlydHMKKworCisJLmdsb2JhbAlzdG9fcmVzCitzdG9fcmVzOgorCWJmZXh0dQkJQ01EUkVHMUIoJWE2KXsjNjojM30sJWQwCXxleHRyYWN0IGRlc3RpbmF0aW9uIHJlZ2lzdGVyCisJY21waWIJCSMzLCVkMAkJfGNoZWNrIGZvciBmcDAvZnAxIGNhc2VzCisJYmxlcwkJZnAwMTIzCisJZm1vdmVteAklZnAwLSVmcDAsLSglYTcpCisJbW92ZXFsCQkjNywlZDEKKwlzdWJsCQklZDAsJWQxCQl8ZDEgPSA3LSAoZGVzdC4gcmVnLiBuby4pCisJY2xybAkJJWQwCisJYnNldGwJCSVkMSwlZDAJCXxkMCBpcyBkeW5hbWljIHJlZ2lzdGVyIG1hc2sKKwlmbW92ZW14CSglYTcpKywlZDAKKwlydHMKK2ZwMDEyMzoKKwljbXBpYgkJIzAsJWQwCisJYmVxcwkJaXNfZnAwCisJY21waWIJCSMxLCVkMAorCWJlcXMJCWlzX2ZwMQorCWNtcGliCQkjMiwlZDAKKwliZXFzCQlpc19mcDIKK2lzX2ZwMzoKKwlmbW92ZW14CSVmcDAtJWZwMCxVU0VSX0ZQMyglYTYpCisJcnRzCitpc19mcDI6CisJZm1vdmVteAklZnAwLSVmcDAsVVNFUl9GUDIoJWE2KQorCXJ0cworaXNfZnAxOgorCWZtb3ZlbXgJJWZwMC0lZnAwLFVTRVJfRlAxKCVhNikKKwlydHMKK2lzX2ZwMDoKKwlmbW92ZW14CSVmcDAtJWZwMCxVU0VSX0ZQMCglYTYpCisJcnRzCisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC9zdHdvdG94LlMgYi9hcmNoL202OGsvZnBzcDA0MC9zdHdvdG94LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzYzE0MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3N0d290b3guUwpAQCAtMCwwICsxLDQyNyBAQAorfAorfAlzdHdvdG94LnNhIDMuMSAxMi8xMC85MAorfAorfAlzdHdvdG94ICAtLS0gMioqWAorfAlzdHdvdG94ZCAtLS0gMioqWCBmb3IgZGVub3JtYWxpemVkIFgKK3wJc3RlbnRveCAgLS0tIDEwKipYCit8CXN0ZW50b3hkIC0tLSAxMCoqWCBmb3IgZGVub3JtYWxpemVkIFgKK3wKK3wJSW5wdXQ6IERvdWJsZS1leHRlbmRlZCBudW1iZXIgWCBpbiBsb2NhdGlvbiBwb2ludGVkIHRvCit8CQlieSBhZGRyZXNzIHJlZ2lzdGVyIGEwLgorfAorfAlPdXRwdXQ6IFRoZSBmdW5jdGlvbiB2YWx1ZXMgYXJlIHJldHVybmVkIGluIEZwMC4KK3wKK3wJQWNjdXJhY3kgYW5kIE1vbm90b25pY2l0eTogVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMiB1bHBzIGluCit8CQk2NCBzaWduaWZpY2FudCBiaXQsIGkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUKK3wJCXJlc3VsdCBpcyBzdWJzZXF1ZW50bHkgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUKK3wJCXJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMgaW4gZG91YmxlIHByZWNpc2lvbi4KK3wKK3wJU3BlZWQ6IFRoZSBwcm9ncmFtIHN0d290b3ggdGFrZXMgYXBwcm94aW1hdGVseSAxOTAgY3ljbGVzIGFuZCB0aGUKK3wJCXByb2dyYW0gc3RlbnRveCB0YWtlcyBhcHByb3hpbWF0ZWx5IDIwMCBjeWNsZXMuCit8Cit8CUFsZ29yaXRobToKK3wKK3wJdHdvdG94Cit8CTEuIElmIHxYfCA+IDE2NDgwLCBnbyB0byBFeHBCaWcuCit8Cit8CTIuIElmIHxYfCA8IDIqKigtNzApLCBnbyB0byBFeHBTbS4KK3wKK3wJMy4gRGVjb21wb3NlIFggYXMgWCA9IE4vNjQgKyByIHdoZXJlIHxyfCA8PSAxLzEyOC4gRnVydGhlcm1vcmUKK3wJCWRlY29tcG9zZSBOIGFzCit8CQkgTiA9IDY0KE0gKyBNJykgKyBqLCAgaiA9IDAsMSwyLC4uLiw2My4KK3wKK3wJNC4gT3ZlcndyaXRlIHIgOj0gciAqIGxvZzIuIFRoZW4KK3wJCTIqKlggPSAyKiooTScpICogMioqKE0pICogMioqKGovNjQpICogZXhwKHIpLgorfAkJR28gdG8gZXhwciB0byBjb21wdXRlIHRoYXQgZXhwcmVzc2lvbi4KK3wKK3wJdGVudG94Cit8CTEuIElmIHxYfCA+IDE2NDgwKmxvZ18xMCgyKSAoYmFzZSAxMCBsb2cgb2YgMiksIGdvIHRvIEV4cEJpZy4KK3wKK3wJMi4gSWYgfFh8IDwgMioqKC03MCksIGdvIHRvIEV4cFNtLgorfAorfAkzLiBTZXQgeSA6PSBYKmxvZ18yKDEwKSo2NCAoYmFzZSAyIGxvZyBvZiAxMCkuIFNldAorfAkJTiA6PSByb3VuZC10by1pbnQoeSkuIERlY29tcG9zZSBOIGFzCit8CQkgTiA9IDY0KE0gKyBNJykgKyBqLCAgaiA9IDAsMSwyLC4uLiw2My4KK3wKK3wJNC4gRGVmaW5lIHIgYXMKK3wJCXIgOj0gKChYIC0gTipMMSktTipMMikgKiBMMTAKK3wJCXdoZXJlIEwxLCBMMiBhcmUgdGhlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhcnRzIG9mIGxvZ18xMCgyKS82NAorfAkJYW5kIEwxMCBpcyB0aGUgbmF0dXJhbCBsb2cgb2YgMTAuIFRoZW4KK3wJCTEwKipYID0gMioqKE0nKSAqIDIqKihNKSAqIDIqKihqLzY0KSAqIGV4cChyKS4KK3wJCUdvIHRvIGV4cHIgdG8gY29tcHV0ZSB0aGF0IGV4cHJlc3Npb24uCit8Cit8CWV4cHIKK3wJMS4gRmV0Y2ggMioqKGovNjQpIGZyb20gdGFibGUgYXMgRmFjdDEgYW5kIEZhY3QyLgorfAorfAkyLiBPdmVyd3JpdGUgRmFjdDEgYW5kIEZhY3QyIGJ5Cit8CQlGYWN0MSA6PSAyKiooTSkgKiBGYWN0MQorfAkJRmFjdDIgOj0gMioqKE0pICogRmFjdDIKK3wJCVRodXMgRmFjdDEgKyBGYWN0MiA9IDIqKihNKSAqIDIqKihqLzY0KS4KK3wKK3wJMy4gQ2FsY3VsYXRlIFAgd2hlcmUgMSArIFAgYXBwcm94aW1hdGVzIGV4cChyKToKK3wJCVAgPSByICsgcipyKihBMStyKihBMisuLi4rcipBNSkpLgorfAorfAk0LiBMZXQgQWRqRmFjdCA6PSAyKiooTScpLiBSZXR1cm4KK3wJCUFkakZhY3QgKiAoIEZhY3QxICsgKChGYWN0MSpQKSArIEZhY3QyKSApLgorfAkJRXhpdC4KK3wKK3wJRXhwQmlnCit8CTEuIEdlbmVyYXRlIG92ZXJmbG93IGJ5IEh1Z2UgKiBIdWdlIGlmIFggPiAwOyBvdGhlcndpc2UsIGdlbmVyYXRlCit8CQl1bmRlcmZsb3cgYnkgVGlueSAqIFRpbnkuCit8Cit8CUV4cFNtCit8CTEuIFJldHVybiAxICsgWC4KK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfFNUV09UT1gJaWRudAkyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCitCT1VORFMxOgkubG9uZyAweDNGQjk4MDAwLDB4NDAwRDgwQzAgfCAuLi4gMl4oLTcwKSwxNjQ4MAorQk9VTkRTMjoJLmxvbmcgMHgzRkI5ODAwMCwweDQwMEI5QjA3IHwgLi4uIDJeKC03MCksMTY0ODAgTE9HMi9MT0cxMAorCitMMlRFTjY0OgkubG9uZyAweDQwNkE5MzRGLDB4MDk3OUEzNzEgfCAuLi4gNjRMT0cxMC9MT0cyCitMMTBUV08xOgkubG9uZyAweDNGNzM0NDEzLDB4NTA5RjgwMDAgfCAuLi4gTE9HMi82NExPRzEwCisKK0wxMFRXTzI6CS5sb25nIDB4QkZDRDAwMDAsMHhDMDIxOURDMSwweERBOTk0RkQyLDB4MDAwMDAwMDAKKworTE9HMTA6CS5sb25nIDB4NDAwMDAwMDAsMHg5MzVEOERERCwweEFBQThBQzE3LDB4MDAwMDAwMDAKKworTE9HMjoJLmxvbmcgMHgzRkZFMDAwMCwweEIxNzIxN0Y3LDB4RDFDRjc5QUMsMHgwMDAwMDAwMAorCitFWFBBNToJLmxvbmcgMHgzRjU2QzE2RCwweDZGN0JEMEIyCitFWFBBNDoJLmxvbmcgMHgzRjgxMTExMiwweDMwMkM3MTJDCitFWFBBMzoJLmxvbmcgMHgzRkE1NTU1NSwweDU1NTU0Q0MxCitFWFBBMjoJLmxvbmcgMHgzRkM1NTU1NSwweDU1NTU0QTU0CitFWFBBMToJLmxvbmcgMHgzRkUwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCitIVUdFOgkubG9uZyAweDdGRkUwMDAwLDB4RkZGRkZGRkYsMHhGRkZGRkZGRiwweDAwMDAwMDAwCitUSU5ZOgkubG9uZyAweDAwMDEwMDAwLDB4RkZGRkZGRkYsMHhGRkZGRkZGRiwweDAwMDAwMDAwCisKK0VYUFRCTDoKKwkubG9uZyAgMHgzRkZGMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgzRjczODAwMAorCS5sb25nICAweDNGRkYwMDAwLDB4ODE2NEQxRjMsMHhCQzAzMDc3MywweDNGQkVGN0NBCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHg4MkNEODY5OCwweEFDMkJBMUQ3LDB4M0ZCREY4QTkKKwkubG9uZyAgMHgzRkZGMDAwMCwweDg0M0EyOEMzLDB4QUNERTQwNDYsMHgzRkJDRDdDOQorCS5sb25nICAweDNGRkYwMDAwLDB4ODVBQUMzNjcsMHhDQzQ4N0IxNSwweEJGQkRFOERBCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHg4NzFGNjE5NiwweDlFOEQxMDEwLDB4M0ZCREU4NUMKKwkubG9uZyAgMHgzRkZGMDAwMCwweDg4OTgwRTgwLDB4OTJEQTg1MjcsMHgzRkJFQkJGMQorCS5sb25nICAweDNGRkYwMDAwLDB4OEExNEQ1NzUsMHg0OTZFRkQ5QSwweDNGQkI4MENBCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHg4Qjk1QzFFMywweEVBOEJENkU3LDB4QkZCQTgzNzMKKwkubG9uZyAgMHgzRkZGMDAwMCwweDhEMUFERjVCLDB4N0U1QkE5RTYsMHhCRkJFOTY3MAorCS5sb25nICAweDNGRkYwMDAwLDB4OEVBNDM5OEIsMHg0NUNENTNDMCwweDNGQkRCNzAwCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHg5MDMxREM0MywweDE0NjZCMURDLDB4M0ZCRUVFQjAKKwkubG9uZyAgMHgzRkZGMDAwMCwweDkxQzNEMzczLDB4QUIxMUMzMzYsMHgzRkJCRkQ2RAorCS5sb25nICAweDNGRkYwMDAwLDB4OTM1QTJCMkYsMHgxM0U2RTkyQywweEJGQkRCMzE5CisJLmxvbmcgIDB4M0ZGRjAwMDAsMHg5NEY0RUZBOCwweEZFRjcwOTYxLDB4M0ZCREJBMkIKKwkubG9uZyAgMHgzRkZGMDAwMCwweDk2OTQyRDM3LDB4MjAxODVBMDAsMHgzRkJFOTFENQorCS5sb25nICAweDNGRkYwMDAwLDB4OTgzN0YwNTEsMHg4REI4QTk2RiwweDNGQkU4RDVBCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHg5OUUwNDU5MywweDIwQjdGQTY1LDB4QkZCQ0RFN0IKKwkubG9uZyAgMHgzRkZGMDAwMCwweDlCOEQzOUI5LDB4RDU0RTU1MzksMHhCRkJFQkFBRgorCS5sb25nICAweDNGRkYwMDAwLDB4OUQzRUQ5QTcsMHgyQ0ZGQjc1MSwweEJGQkQ4NkRBCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHg5RUY1MzI2MCwweDkxQTExMUFFLDB4QkZCRUJFREQKKwkubG9uZyAgMHgzRkZGMDAwMCwweEEwQjA1MTBGLDB4Qjk3MTRGQzIsMHgzRkJDQzk2RQorCS5sb25nICAweDNGRkYwMDAwLDB4QTI3MDQzMDMsMHgwQzQ5NjgxOSwweEJGQkVDOTBCCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhBNDM1MTVBRSwweDA5RTY4MDlFLDB4M0ZCQkQxREIKKwkubG9uZyAgMHgzRkZGMDAwMCwweEE1RkVENkE5LDB4QjE1MTM4RUEsMHgzRkJDRTVFQgorCS5sb25nICAweDNGRkYwMDAwLDB4QTdDRDkzQjQsMHhFOTY1MzU2QSwweEJGQkVDMjc0CisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhBOUExNUFCNCwweEVBN0MwRUY4LDB4M0ZCRUE4M0MKKwkubG9uZyAgMHgzRkZGMDAwMCwweEFCN0EzOUI1LDB4QTkzRUQzMzcsMHgzRkJFQ0IwMAorCS5sb25nICAweDNGRkYwMDAwLDB4QUQ1ODNFRUEsMHg0MkExNEFDNiwweDNGQkU5MzAxCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhBRjNCNzhBRCwweDY5MEE0Mzc1LDB4QkZCRDgzNjcKKwkubG9uZyAgMHgzRkZGMDAwMCwweEIxMjNGNTgxLDB4RDJBQzI1OTAsMHhCRkJFRjA1RgorCS5sb25nICAweDNGRkYwMDAwLDB4QjMxMUM0MTIsMHhBOTExMjQ4OSwweDNGQkRGQjNDCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhCNTA0RjMzMywweEY5REU2NDg0LDB4M0ZCRUIyRkIKKwkubG9uZyAgMHgzRkZGMDAwMCwweEI2RkQ5MUUzLDB4MjhEMTc3OTEsMHgzRkJBRTJDQgorCS5sb25nICAweDNGRkYwMDAwLDB4QjhGQkFGNDcsMHg2MkZCOUVFOSwweDNGQkNEQzNDCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhCQUZGNUFCMiwweDEzM0U0NUZCLDB4M0ZCRUU5QUEKKwkubG9uZyAgMHgzRkZGMDAwMCwweEJEMDhBMzlGLDB4NTgwQzM2QkYsMHhCRkJFQUVGRAorCS5sb25nICAweDNGRkYwMDAwLDB4QkYxNzk5QjYsMHg3QTczMTA4MywweEJGQkNCRjUxCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhDMTJDNENDQSwweDY2NzA5NDU2LDB4M0ZCRUY4OEEKKwkubG9uZyAgMHgzRkZGMDAwMCwweEMzNDZDQ0RBLDB4MjQ5NzY0MDcsMHgzRkJEODNCMgorCS5sb25nICAweDNGRkYwMDAwLDB4QzU2NzJBMTEsMHg1NTA2REFERCwweDNGQkRGOEFCCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhDNzhENzRDOCwweEFCQjlCMTVELDB4QkZCREZCMTcKKwkubG9uZyAgMHgzRkZGMDAwMCwweEM5QjlCRDg2LDB4NkUyRjI3QTMsMHhCRkJFRkUzQworCS5sb25nICAweDNGRkYwMDAwLDB4Q0JFQzE0RkUsMHhGMjcyN0M1RCwweEJGQkJCNkY4CisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhDRTI0OEMxNSwweDFGODQ4MEU0LDB4QkZCQ0VFNTMKKwkubG9uZyAgMHgzRkZGMDAwMCwweEQwNjMzM0RBLDB4RUYyQjI1OTUsMHhCRkJEQTRBRQorCS5sb25nICAweDNGRkYwMDAwLDB4RDJBODFEOTEsMHhGMTJBRTQ1QSwweDNGQkM5MTI0CisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhENEYzNUFBQiwweENGRURGQTFGLDB4M0ZCRUIyNDMKKwkubG9uZyAgMHgzRkZGMDAwMCwweEQ3NDRGQ0NBLDB4RDY5RDZBRjQsMHgzRkJERTY5QQorCS5sb25nICAweDNGRkYwMDAwLDB4RDk5RDE1QzIsMHg3OEFGRDdCNiwweEJGQjhCQzYxCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhEQkZCQjc5NywweERBRjIzNzU1LDB4M0ZCREY2MTAKKwkubG9uZyAgMHgzRkZGMDAwMCwweERFNjBGNDgyLDB4NUUwRTkxMjQsMHhCRkJEOEJFMQorCS5sb25nICAweDNGRkYwMDAwLDB4RTBDQ0RFRUMsMHgyQTk0RTExMSwweDNGQkFDQjEyCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhFMzNGODk3MiwweEJFOEE1QTUxLDB4M0ZCQjlCRkUKKwkubG9uZyAgMHgzRkZGMDAwMCwweEU1QjkwNkU3LDB4N0M4MzQ4QTgsMHgzRkJDRjJGNAorCS5sb25nICAweDNGRkYwMDAwLDB4RTgzOTZBNTAsMHgzQzRCREM2OCwweDNGQkVGMjJGCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhFQUMwQzZFNywweEREMjQzOTJGLDB4QkZCREJGNEEKKwkubG9uZyAgMHgzRkZGMDAwMCwweEVENEYzMDFFLDB4RDk5NDJCODQsMHgzRkJFQzAxQQorCS5sb25nICAweDNGRkYwMDAwLDB4RUZFNEI5OUIsMHhEQ0RBRjVDQiwweDNGQkU4Q0FDCisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhGMjgxNzczQywweDU5RkZCMTNBLDB4QkZCQ0JCM0YKKwkubG9uZyAgMHgzRkZGMDAwMCwweEY1MjU3RDE1LDB4MjQ4NkNDMkMsMHgzRkJFRjczQQorCS5sb25nICAweDNGRkYwMDAwLDB4RjdEMERGNzMsMHgwQUQxM0JCOSwweEJGQjhCNzk1CisJLmxvbmcgIDB4M0ZGRjAwMDAsMHhGQTgzQjJEQiwweDcyMkEwMzNBLDB4M0ZCRUY4NEIKKwkubG9uZyAgMHgzRkZGMDAwMCwweEZEM0UwQzBDLDB4RjQ4NkMxNzUsMHhCRkJFRjU4MQorCisJLnNldAlOLExfU0NSMQorCisJLnNldAlYLEZQX1NDUjEKKwkuc2V0CVhEQ0FSRSxYKzIKKwkuc2V0CVhGUkFDLFgrNAorCisJLnNldAlBREpGQUNULEZQX1NDUjIKKworCS5zZXQJRkFDVDEsRlBfU0NSMworCS5zZXQJRkFDVDFISSxGQUNUMSs0CisJLnNldAlGQUNUMUxPVyxGQUNUMSs4CisKKwkuc2V0CUZBQ1QyLEZQX1NDUjQKKwkuc2V0CUZBQ1QySEksRkFDVDIrNAorCS5zZXQJRkFDVDJMT1csRkFDVDIrOAorCisJfCB4cmVmCXRfdW5mbAorCXx4cmVmCXRfb3ZmbAorCXx4cmVmCXRfZnJjaW54CisKKwkuZ2xvYmFsCXN0d290b3hkCitzdHdvdG94ZDoKK3wtLUVOVFJZIFBPSU5UIEZPUiAyKiooWCkgRk9SIERFTk9STUFMSVpFRCBBUkdVTUVOVAorCisJZm1vdmVsCQklZDEsJWZwY3IJCXwgLi4uc2V0IHVzZXIncyByb3VuZGluZyBtb2RlL3ByZWNpc2lvbgorCWZtb3ZlcwkJIzB4M0Y4MDAwMDAsJWZwMCAgfCAuLi5SRVRVUk4gMSArIFgKKwltb3ZlbAkJKCVhMCksJWQwCisJb3JsCQkjMHgwMDgwMDAwMSwlZDAKKwlmYWRkcwkJJWQwLCVmcDAKKwlicmEJCXRfZnJjaW54CisKKwkuZ2xvYmFsCXN0d290b3gKK3N0d290b3g6Cit8LS1FTlRSWSBQT0lOVCBGT1IgMioqKFgpLCBIRVJFIFggSVMgRklOSVRFLCBOT04tWkVSTywgQU5EIE5PVCBOQU4nUworCWZtb3ZlbXgJKCVhMCksJWZwMC0lZnAwCXwgLi4uTE9BRCBJTlBVVCwgZG8gbm90IHNldCBjYydzCisKKwltb3ZlbAkJKCVhMCksJWQwCisJbW92ZXcJCTQoJWEwKSwlZDAKKwlmbW92ZXgJCSVmcDAsWCglYTYpCisJYW5kaWwJCSMweDdGRkZGRkZGLCVkMAorCisJY21waWwJCSMweDNGQjk4MDAwLCVkMAkJfCAuLi58WHwgPj0gMioqKC03MCk/CisJYmdlcwkJVFdPT0sxCisJYnJhCQlFWFBCT1JTCisKK1RXT09LMToKKwljbXBpbAkJIzB4NDAwRDgwQzAsJWQwCQl8IC4uLnxYfCA+IDE2NDgwPworCWJsZXMJCVRXT01BSU4KKwlicmEJCUVYUEJPUlMKKworCitUV09NQUlOOgorfC0tVVNVQUwgQ0FTRSwgMl4oLTcwKSA8PSB8WHwgPD0gMTY0ODAKKworCWZtb3ZleAkJJWZwMCwlZnAxCisJZm11bHMJCSMweDQyODAwMDAwLCVmcDEgIHwgLi4uNjQgKiBYCisKKwlmbW92ZWwJCSVmcDEsTiglYTYpCQl8IC4uLk4gPSBST1VORC1UTy1JTlQoNjQgWCkKKwltb3ZlbAkJJWQyLC0oJXNwKQorCWxlYQkJRVhQVEJMLCVhMQl8IC4uLkxPQUQgQUREUkVTUyBPRiBUQUJMRSBPRiAyXihKLzY0KQorCWZtb3ZlbAkJTiglYTYpLCVmcDEJCXwgLi4uTiAtLT4gRkxPQVRJTkcgRk1UCisJbW92ZWwJCU4oJWE2KSwlZDAKKwltb3ZlbAkJJWQwLCVkMgorCWFuZGlsCQkjMHgzRiwlZDAJCXwgLi4uRDAgSVMgSgorCWFzbGwJCSM0LCVkMAkJfCAuLi5ESVNQTEFDRU1FTlQgRk9SIDJeKEovNjQpCisJYWRkYWwJCSVkMCwlYTEJCXwgLi4uQUREUkVTUyBGT1IgMl4oSi82NCkKKwlhc3JsCQkjNiwlZDIJCXwgLi4uZDIgSVMgTCwgTiA9IDY0TCArIEoKKwltb3ZlbAkJJWQyLCVkMAorCWFzcmwJCSMxLCVkMAkJfCAuLi5EMCBJUyBNCisJc3VibAkJJWQwLCVkMgkJfCAuLi5kMiBJUyBNJywgTiA9IDY0KE0rTScpICsgSgorCWFkZGlsCQkjMHgzRkZGLCVkMgorCW1vdmV3CQklZDIsQURKRkFDVCglYTYpCXwgLi4uQURKRkFDVCBJUyAyXihNJykKKwltb3ZlbAkJKCVzcCkrLCVkMgorfC0tU1VNTUFSWTogYTEgSVMgQUREUkVTUyBGT1IgVEhFIExFQURJTkcgUE9SVElPTiBPRiAyXihKLzY0KSwKK3wtLUQwIElTIE0gV0hFUkUgTiA9IDY0KE0rTScpICsgSi4gTk9URSBUSEFUIHxNfCA8PSAxNjE0MCBCWSBERVNJR04uCit8LS1BREpGQUNUID0gMl4oTScpLgorfC0tUkVHSVNURVJTIFNBVkVEIFNPIEZBUiBBUkUgKElOIE9SREVSKSBGUENSLCBEMCwgRlAxLCBhMSwgQU5EIEZQMi4KKworCWZtdWxzCQkjMHgzQzgwMDAwMCwlZnAxICB8IC4uLigxLzY0KSpOCisJbW92ZWwJCSglYTEpKyxGQUNUMSglYTYpCisJbW92ZWwJCSglYTEpKyxGQUNUMUhJKCVhNikKKwltb3ZlbAkJKCVhMSkrLEZBQ1QxTE9XKCVhNikKKwltb3ZldwkJKCVhMSkrLEZBQ1QyKCVhNikKKwljbHJ3CQlGQUNUMisyKCVhNikKKworCWZzdWJ4CQklZnAxLCVmcDAJCXwgLi4uWCAtICgxLzY0KSpJTlQoNjQgWCkKKworCW1vdmV3CQkoJWExKSssRkFDVDJISSglYTYpCisJY2xydwkJRkFDVDJISSsyKCVhNikKKwljbHJsCQlGQUNUMkxPVyglYTYpCisJYWRkdwkJJWQwLEZBQ1QxKCVhNikKKworCWZtdWx4CQlMT0cyLCVmcDAJfCAuLi5GUDAgSVMgUgorCWFkZHcJCSVkMCxGQUNUMiglYTYpCisKKwlicmEJCWV4cHIKKworRVhQQk9SUzoKK3wtLUZQQ1IsIEQwIFNBVkVECisJY21waWwJCSMweDNGRkY4MDAwLCVkMAorCWJndHMJCUVYUEJJRworCitFWFBTTToKK3wtLXxYfCBJUyBTTUFMTCwgUkVUVVJOIDEgKyBYCisKKwlmbW92ZWwJCSVkMSwlRlBDUgkJfHJlc3RvcmUgdXNlcnMgZXhjZXB0aW9ucworCWZhZGRzCQkjMHgzRjgwMDAwMCwlZnAwICB8IC4uLlJFVFVSTiAxICsgWAorCisJYnJhCQl0X2ZyY2lueAorCitFWFBCSUc6Cit8LS18WHwgSVMgTEFSR0UsIEdFTkVSQVRFIE9WRVJGTE9XIElGIFggPiAwOyBFTFNFIEdFTkVSQVRFIFVOREVSRkxPVworfC0tUkVHSVNURVJTIFNBVkUgU08gRkFSIEFSRSBGUENSIEFORCAgRDAKKwltb3ZlbAkJWCglYTYpLCVkMAorCWNtcGlsCQkjMCwlZDAKKwlibHRzCQlFWFBORUcKKworCWJjbHJiCQkjNywoJWEwKQkJfHRfb3ZmbCBleHBlY3RzIHBvc2l0aXZlIHZhbHVlCisJYnJhCQl0X292ZmwKKworRVhQTkVHOgorCWJjbHJiCQkjNywoJWEwKQkJfHRfdW5mbCBleHBlY3RzIHBvc2l0aXZlIHZhbHVlCisJYnJhCQl0X3VuZmwKKworCS5nbG9iYWwJc3RlbnRveGQKK3N0ZW50b3hkOgorfC0tRU5UUlkgUE9JTlQgRk9SIDEwKiooWCkgRk9SIERFTk9STUFMSVpFRCBBUkdVTUVOVAorCisJZm1vdmVsCQklZDEsJWZwY3IJCXwgLi4uc2V0IHVzZXIncyByb3VuZGluZyBtb2RlL3ByZWNpc2lvbgorCWZtb3ZlcwkJIzB4M0Y4MDAwMDAsJWZwMCAgfCAuLi5SRVRVUk4gMSArIFgKKwltb3ZlbAkJKCVhMCksJWQwCisJb3JsCQkjMHgwMDgwMDAwMSwlZDAKKwlmYWRkcwkJJWQwLCVmcDAKKwlicmEJCXRfZnJjaW54CisKKwkuZ2xvYmFsCXN0ZW50b3gKK3N0ZW50b3g6Cit8LS1FTlRSWSBQT0lOVCBGT1IgMTAqKihYKSwgSEVSRSBYIElTIEZJTklURSwgTk9OLVpFUk8sIEFORCBOT1QgTkFOJ1MKKwlmbW92ZW14CSglYTApLCVmcDAtJWZwMAl8IC4uLkxPQUQgSU5QVVQsIGRvIG5vdCBzZXQgY2MncworCisJbW92ZWwJCSglYTApLCVkMAorCW1vdmV3CQk0KCVhMCksJWQwCisJZm1vdmV4CQklZnAwLFgoJWE2KQorCWFuZGlsCQkjMHg3RkZGRkZGRiwlZDAKKworCWNtcGlsCQkjMHgzRkI5ODAwMCwlZDAJCXwgLi4ufFh8ID49IDIqKigtNzApPworCWJnZXMJCVRFTk9LMQorCWJyYQkJRVhQQk9SUworCitURU5PSzE6CisJY21waWwJCSMweDQwMEI5QjA3LCVkMAkJfCAuLi58WHwgPD0gMTY0ODAqbG9nMi9sb2cxMCA/CisJYmxlcwkJVEVOTUFJTgorCWJyYQkJRVhQQk9SUworCitURU5NQUlOOgorfC0tVVNVQUwgQ0FTRSwgMl4oLTcwKSA8PSB8WHwgPD0gMTY0ODAgTE9HIDIgLyBMT0cgMTAKKworCWZtb3ZleAkJJWZwMCwlZnAxCisJZm11bGQJCUwyVEVONjQsJWZwMQl8IC4uLlgqNjQqTE9HMTAvTE9HMgorCisJZm1vdmVsCQklZnAxLE4oJWE2KQkJfCAuLi5OPUlOVChYKjY0KkxPRzEwL0xPRzIpCisJbW92ZWwJCSVkMiwtKCVzcCkKKwlsZWEJCUVYUFRCTCwlYTEJfCAuLi5MT0FEIEFERFJFU1MgT0YgVEFCTEUgT0YgMl4oSi82NCkKKwlmbW92ZWwJCU4oJWE2KSwlZnAxCQl8IC4uLk4gLS0+IEZMT0FUSU5HIEZNVAorCW1vdmVsCQlOKCVhNiksJWQwCisJbW92ZWwJCSVkMCwlZDIKKwlhbmRpbAkJIzB4M0YsJWQwCQl8IC4uLkQwIElTIEoKKwlhc2xsCQkjNCwlZDAJCXwgLi4uRElTUExBQ0VNRU5UIEZPUiAyXihKLzY0KQorCWFkZGFsCQklZDAsJWExCQl8IC4uLkFERFJFU1MgRk9SIDJeKEovNjQpCisJYXNybAkJIzYsJWQyCQl8IC4uLmQyIElTIEwsIE4gPSA2NEwgKyBKCisJbW92ZWwJCSVkMiwlZDAKKwlhc3JsCQkjMSwlZDAJCXwgLi4uRDAgSVMgTQorCXN1YmwJCSVkMCwlZDIJCXwgLi4uZDIgSVMgTScsIE4gPSA2NChNK00nKSArIEoKKwlhZGRpbAkJIzB4M0ZGRiwlZDIKKwltb3ZldwkJJWQyLEFESkZBQ1QoJWE2KQl8IC4uLkFESkZBQ1QgSVMgMl4oTScpCisJbW92ZWwJCSglc3ApKywlZDIKKworfC0tU1VNTUFSWTogYTEgSVMgQUREUkVTUyBGT1IgVEhFIExFQURJTkcgUE9SVElPTiBPRiAyXihKLzY0KSwKK3wtLUQwIElTIE0gV0hFUkUgTiA9IDY0KE0rTScpICsgSi4gTk9URSBUSEFUIHxNfCA8PSAxNjE0MCBCWSBERVNJR04uCit8LS1BREpGQUNUID0gMl4oTScpLgorfC0tUkVHSVNURVJTIFNBVkVEIFNPIEZBUiBBUkUgKElOIE9SREVSKSBGUENSLCBEMCwgRlAxLCBhMSwgQU5EIEZQMi4KKworCWZtb3ZleAkJJWZwMSwlZnAyCisKKwlmbXVsZAkJTDEwVFdPMSwlZnAxCXwgLi4uTiooTE9HMi82NExPRzEwKV9MRUFECisJbW92ZWwJCSglYTEpKyxGQUNUMSglYTYpCisKKwlmbXVseAkJTDEwVFdPMiwlZnAyCXwgLi4uTiooTE9HMi82NExPRzEwKV9UUkFJTAorCisJbW92ZWwJCSglYTEpKyxGQUNUMUhJKCVhNikKKwltb3ZlbAkJKCVhMSkrLEZBQ1QxTE9XKCVhNikKKwlmc3VieAkJJWZwMSwlZnAwCQl8IC4uLlggLSBOIExfTEVBRAorCW1vdmV3CQkoJWExKSssRkFDVDIoJWE2KQorCisJZnN1YngJCSVmcDIsJWZwMAkJfCAuLi5YIC0gTiBMX1RSQUlMCisKKwljbHJ3CQlGQUNUMisyKCVhNikKKwltb3ZldwkJKCVhMSkrLEZBQ1QySEkoJWE2KQorCWNscncJCUZBQ1QySEkrMiglYTYpCisJY2xybAkJRkFDVDJMT1coJWE2KQorCisJZm11bHgJCUxPRzEwLCVmcDAJfCAuLi5GUDAgSVMgUgorCisJYWRkdwkJJWQwLEZBQ1QxKCVhNikKKwlhZGR3CQklZDAsRkFDVDIoJWE2KQorCitleHByOgorfC0tRlBDUiwgRlAyLCBGUDMgQVJFIFNBVkVEIElOIE9SREVSIEFTIFNIT1dOLgorfC0tQURKRkFDVCBDT05UQUlOUyAyKiooTScpLCBGQUNUMSArIEZBQ1QyID0gMioqKE0pICogMioqKEovNjQpLgorfC0tRlAwIElTIFIuIFRIRSBGT0xMT1dJTkcgQ09ERSBDT01QVVRFUworfC0tCTIqKihNJytNKSAqIDIqKihKLzY0KSAqIEVYUChSKQorCisJZm1vdmV4CQklZnAwLCVmcDEKKwlmbXVseAkJJWZwMSwlZnAxCQl8IC4uLkZQMSBJUyBTID0gUipSCisKKwlmbW92ZWQJCUVYUEE1LCVmcDIJfCAuLi5GUDIgSVMgQTUKKwlmbW92ZWQJCUVYUEE0LCVmcDMJfCAuLi5GUDMgSVMgQTQKKworCWZtdWx4CQklZnAxLCVmcDIJCXwgLi4uRlAyIElTIFMqQTUKKwlmbXVseAkJJWZwMSwlZnAzCQl8IC4uLkZQMyBJUyBTKkE0CisKKwlmYWRkZAkJRVhQQTMsJWZwMgl8IC4uLkZQMiBJUyBBMytTKkE1CisJZmFkZGQJCUVYUEEyLCVmcDMJfCAuLi5GUDMgSVMgQTIrUypBNAorCisJZm11bHgJCSVmcDEsJWZwMgkJfCAuLi5GUDIgSVMgUyooQTMrUypBNSkKKwlmbXVseAkJJWZwMSwlZnAzCQl8IC4uLkZQMyBJUyBTKihBMitTKkE0KQorCisJZmFkZGQJCUVYUEExLCVmcDIJfCAuLi5GUDIgSVMgQTErUyooQTMrUypBNSkKKwlmbXVseAkJJWZwMCwlZnAzCQl8IC4uLkZQMyBJUyBSKlMqKEEyK1MqQTQpCisKKwlmbXVseAkJJWZwMSwlZnAyCQl8IC4uLkZQMiBJUyBTKihBMStTKihBMytTKkE1KSkKKwlmYWRkeAkJJWZwMywlZnAwCQl8IC4uLkZQMCBJUyBSK1IqUyooQTIrUypBNCkKKworCWZhZGR4CQklZnAyLCVmcDAJCXwgLi4uRlAwIElTIEVYUChSKSAtIDEKKworCit8LS1GSU5BTCBSRUNPTlNUUlVDVElPTiBQUk9DRVNTCit8LS1FWFAoWCkgPSAyXk0qMl4oSi82NCkgKyAyXk0qMl4oSi82NCkqKEVYUChSKS0xKSAgLSAgKDEgT1IgMCkKKworCWZtdWx4CQlGQUNUMSglYTYpLCVmcDAKKwlmYWRkeAkJRkFDVDIoJWE2KSwlZnAwCisJZmFkZHgJCUZBQ1QxKCVhNiksJWZwMAorCisJZm1vdmVsCQklZDEsJUZQQ1IJCXxyZXN0b3JlIHVzZXJzIGV4Y2VwdGlvbnMKKwljbHJ3CQlBREpGQUNUKzIoJWE2KQorCW1vdmVsCQkjMHg4MDAwMDAwMCxBREpGQUNUKzQoJWE2KQorCWNscmwJCUFESkZBQ1QrOCglYTYpCisJZm11bHgJCUFESkZBQ1QoJWE2KSwlZnAwCXwgLi4uRklOQUwgQURKVVNUTUVOVAorCisJYnJhCQl0X2ZyY2lueAorCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAvdGJsZG8uUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3RibGRvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU2MGNmNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3RibGRvLlMKQEAgLTAsMCArMSw1NTQgQEAKK3wKK3wJdGJsZG8uc2EgMy4xIDEyLzEwLzkwCit8Cit8IE1vZGlmaWVkOgorfAk4LzE2LzkwCWNoaW5kcwlUaGUgdGFibGUgd2FzIGNvbnN0cnVjdGVkIHRvIHVzZSBvbmx5IG9uZSBsZXZlbAorfAkJCW9mIGluZGlyZWN0aW9uIGluIGRvX2Z1bmMgZm9yIG1vbmFkaWMKK3wJCQlmdW5jdGlvbnMuICBEeWFkaWMgZnVuY3Rpb25zIHJlcXVpcmUgdHdvCit8CQkJbGV2ZWxzLCBhbmQgdGhlIHRhYmxlcyBhcmUgc3RpbGwgY29udGFpbmVkCit8CQkJaW4gZG9fZnVuYy4gIFRoZSB0YWJsZSBpcyBhcnJhbmdlZCBmb3IKK3wJCQlpbmRleCB3aXRoIGEgMTAtYml0IGluZGV4LCB3aXRoIHRoZSBmaXJzdAorfAkJCTcgYml0cyB0aGUgb3Bjb2RlLCBhbmQgdGhlIHJlbWFpbmluZyAzCit8CQkJdGhlIHN0YWcuICBGb3IgZHlhZGljIGZ1bmN0aW9ucywgYWxsCit8CQkJdmFsaWQgYWRkcmVzc2VzIGFyZSB0byB0aGUgZ2VuZXJpYyBlbnRyeQorfAkJCXBvaW50LgorfAorCit8CQlDb3B5cmlnaHQgKEMpIE1vdG9yb2xhLCBJbmMuIDE5OTAKK3wJCQlBbGwgUmlnaHRzIFJlc2VydmVkCit8Cit8CVRISVMgSVMgVU5QVUJMSVNIRUQgUFJPUFJJRVRBUlkgU09VUkNFIENPREUgT0YgTU9UT1JPTEEKK3wJVGhlIGNvcHlyaWdodCBub3RpY2UgYWJvdmUgZG9lcyBub3QgZXZpZGVuY2UgYW55Cit8CWFjdHVhbCBvciBpbnRlbmRlZCBwdWJsaWNhdGlvbiBvZiBzdWNoIHNvdXJjZSBjb2RlLgorCit8VEJMRE8JaWRudCAgICAyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisJfHhyZWYJbGRfcGluZixsZF9wb25lLGxkX3BwaTIKKwl8eHJlZgl0X2R6Mix0X29wZXJyCisJfHhyZWYJc2Vycm9yLHNvbmUsc3plcm8sc2luZixzbnpyaW54CisJfHhyZWYJc29wcl9pbmYsc3BpXzIsc3JjX25hbixzenJfaW5mCisKKwl8eHJlZglzbW92Y3IKKwl8eHJlZglwbW9kLHByZW0scHNjYWxlCisJfHhyZWYJc2F0YW5oLHNhdGFuaGQKKwl8eHJlZglzYWNvcyxzYWNvc2Qsc2FzaW4sc2FzaW5kLHNhdGFuLHNhdGFuZAorCXx4cmVmCXNldG94LHNldG94ZCxzZXRveG0xLHNldG94bTFkLHNldG94bTFpCisJfHhyZWYJc2dldGV4cCxzZ2V0ZXhwZCxzZ2V0bWFuLHNnZXRtYW5kCisJfHhyZWYJc2ludCxzaW50ZCxzaW50cnoKKwl8eHJlZglzc2luY29zLHNzaW5jb3NkLHNzaW5jb3NpLHNzaW5jb3NuYW4sc3NpbmNvc3oKKwl8eHJlZglzY29zLHNjb3NkLHNzaW4sc3NpbmQsc3RhbixzdGFuZAorCXx4cmVmCXNjb3NoLHNjb3NoZCxzc2luaCxzc2luaGQsc3Rhbmgsc3RhbmhkCisJfHhyZWYJc3Nsb2cxMCxzc2xvZzIsc3Nsb2duLHNzbG9nbnAxCisJfHhyZWYJc3Nsb2cxMGQsc3Nsb2cyZCxzc2xvZ25kLHNsb2ducDFkCisJfHhyZWYJc3RlbnRveCxzdGVudG94ZCxzdHdvdG94LHN0d290b3hkCisKK3wJaW5zdHJ1Y3Rpb24JCTtvcGNvZGUtc3RhZyBOb3RlcworCS5nbG9iYWwJdGJscHJlCit0YmxwcmU6CisJLmxvbmcJc21vdmNyCQl8JDAwLTAgZm1vdmVjciBhbGwKKwkubG9uZwlzbW92Y3IJCXwkMDAtMSBmbW92ZWNyIGFsbAorCS5sb25nCXNtb3ZjcgkJfCQwMC0yIGZtb3ZlY3IgYWxsCisJLmxvbmcJc21vdmNyCQl8JDAwLTMgZm1vdmVjciBhbGwKKwkubG9uZwlzbW92Y3IJCXwkMDAtNCBmbW92ZWNyIGFsbAorCS5sb25nCXNtb3ZjcgkJfCQwMC01IGZtb3ZlY3IgYWxsCisJLmxvbmcJc21vdmNyCQl8JDAwLTYgZm1vdmVjciBhbGwKKwkubG9uZwlzbW92Y3IJCXwkMDAtNyBmbW92ZWNyIGFsbAorCisJLmxvbmcJc2ludAkJfCQwMS0wIGZpbnQgbm9ybQorCS5sb25nCXN6ZXJvCQl8JDAxLTEgZmludCB6ZXJvCisJLmxvbmcJc2luZgkJfCQwMS0yIGZpbnQgaW5mCisJLmxvbmcJc3JjX25hbgkJfCQwMS0zIGZpbnQgbmFuCisJLmxvbmcJc2ludGQJCXwkMDEtNCBmaW50IGRlbm9ybSBpbngKKwkubG9uZwlzZXJyb3IJCXwkMDEtNSBmaW50IEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDAxLTYgZmludCBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQwMS03IGZpbnQgRVJST1IKKworCS5sb25nCXNzaW5oCQl8JDAyLTAgZnNpbmggbm9ybQorCS5sb25nCXN6ZXJvCQl8JDAyLTEgZnNpbmggemVybworCS5sb25nCXNpbmYJCXwkMDItMiBmc2luaCBpbmYKKwkubG9uZwlzcmNfbmFuCQl8JDAyLTMgZnNpbmggbmFuCisJLmxvbmcJc3NpbmhkCQl8JDAyLTQgZnNpbmggZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDAyLTUgZnNpbmggRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMDItNiBmc2luaCBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQwMi03IGZzaW5oIEVSUk9SCisKKwkubG9uZwlzaW50cnoJCXwkMDMtMCBmaW50cnogbm9ybQorCS5sb25nCXN6ZXJvCQl8JDAzLTEgZmludHJ6IHplcm8KKwkubG9uZwlzaW5mCQl8JDAzLTIgZmludHJ6IGluZgorCS5sb25nCXNyY19uYW4JCXwkMDMtMyBmaW50cnogbmFuCisJLmxvbmcJc256cmlueAkJfCQwMy00IGZpbnRyeiBkZW5vcm0gaW54CisJLmxvbmcJc2Vycm9yCQl8JDAzLTUgZmludHJ6IEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDAzLTYgZmludHJ6IEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDAzLTcgZmludHJ6IEVSUk9SCisKKwkubG9uZwlzZXJyb3IJCXwkMDQtMCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDA0LTEgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwNC0yIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMDQtMyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDA0LTQgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwNC01IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMDQtNiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDA0LTcgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCisJLmxvbmcJc2Vycm9yCQl8JDA1LTAgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwNS0xIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMDUtMiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDA1LTMgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwNS00IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMDUtNSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDA1LTYgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwNS03IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKworCS5sb25nCXNzbG9nbnAxCXwkMDYtMCBmbG9nbnAxIG5vcm0KKwkubG9uZwlzemVybwkJfCQwNi0xIGZsb2ducDEgemVybworCS5sb25nCXNvcHJfaW5mCXwkMDYtMiBmbG9nbnAxIGluZgorCS5sb25nCXNyY19uYW4JCXwkMDYtMyBmbG9nbnAxIG5hbgorCS5sb25nCXNsb2ducDFkCXwkMDYtNCBmbG9nbnAxIGRlbm9ybQorCS5sb25nCXNlcnJvcgkJfCQwNi01IGZsb2ducDEgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMDYtNiBmbG9nbnAxIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDA2LTcgZmxvZ25wMSBFUlJPUgorCisJLmxvbmcJc2Vycm9yCQl8JDA3LTAgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwNy0xIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMDctMiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDA3LTMgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwNy00IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMDctNSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDA3LTYgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwNy03IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKworCS5sb25nCXNldG94bTEJCXwkMDgtMCBmZXRveG0xIG5vcm0KKwkubG9uZwlzemVybwkJfCQwOC0xIGZldG94bTEgemVybworCS5sb25nCXNldG94bTFpCXwkMDgtMiBmZXRveG0xIGluZgorCS5sb25nCXNyY19uYW4JCXwkMDgtMyBmZXRveG0xIG5hbgorCS5sb25nCXNldG94bTFkCXwkMDgtNCBmZXRveG0xIGRlbm9ybQorCS5sb25nCXNlcnJvcgkJfCQwOC01IGZldG94bTEgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMDgtNiBmZXRveG0xIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDA4LTcgZmV0b3htMSBFUlJPUgorCisJLmxvbmcJc3RhbmgJCXwkMDktMCBmdGFuaCBub3JtCisJLmxvbmcJc3plcm8JCXwkMDktMSBmdGFuaCB6ZXJvCisJLmxvbmcJc29uZQkJfCQwOS0yIGZ0YW5oIGluZgorCS5sb25nCXNyY19uYW4JCXwkMDktMyBmdGFuaCBuYW4KKwkubG9uZwlzdGFuaGQJCXwkMDktNCBmdGFuaCBkZW5vcm0KKwkubG9uZwlzZXJyb3IJCXwkMDktNSBmdGFuaCBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQwOS02IGZ0YW5oIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDA5LTcgZnRhbmggRVJST1IKKworCS5sb25nCXNhdGFuCQl8JDBhLTAgZmF0YW4gbm9ybQorCS5sb25nCXN6ZXJvCQl8JDBhLTEgZmF0YW4gemVybworCS5sb25nCXNwaV8yCQl8JDBhLTIgZmF0YW4gaW5mCisJLmxvbmcJc3JjX25hbgkJfCQwYS0zIGZhdGFuIG5hbgorCS5sb25nCXNhdGFuZAkJfCQwYS00IGZhdGFuIGRlbm9ybQorCS5sb25nCXNlcnJvcgkJfCQwYS01IGZhdGFuIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDBhLTYgZmF0YW4gRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMGEtNyBmYXRhbiBFUlJPUgorCisJLmxvbmcJc2Vycm9yCQl8JDBiLTAgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwYi0xIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMGItMiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDBiLTMgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwYi00IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMGItNSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDBiLTYgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQwYi03IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKworCS5sb25nCXNhc2luCQl8JDBjLTAgZmFzaW4gbm9ybQorCS5sb25nCXN6ZXJvCQl8JDBjLTEgZmFzaW4gemVybworCS5sb25nCXRfb3BlcnIJCXwkMGMtMiBmYXNpbiBpbmYKKwkubG9uZwlzcmNfbmFuCQl8JDBjLTMgZmFzaW4gbmFuCisJLmxvbmcJc2FzaW5kCQl8JDBjLTQgZmFzaW4gZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDBjLTUgZmFzaW4gRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMGMtNiBmYXNpbiBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQwYy03IGZhc2luIEVSUk9SCisKKwkubG9uZwlzYXRhbmgJCXwkMGQtMCBmYXRhbmggbm9ybQorCS5sb25nCXN6ZXJvCQl8JDBkLTEgZmF0YW5oIHplcm8KKwkubG9uZwl0X29wZXJyCQl8JDBkLTIgZmF0YW5oIGluZgorCS5sb25nCXNyY19uYW4JCXwkMGQtMyBmYXRhbmggbmFuCisJLmxvbmcJc2F0YW5oZAkJfCQwZC00IGZhdGFuaCBkZW5vcm0KKwkubG9uZwlzZXJyb3IJCXwkMGQtNSBmYXRhbmggRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMGQtNiBmYXRhbmggRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMGQtNyBmYXRhbmggRVJST1IKKworCS5sb25nCXNzaW4JCXwkMGUtMCBmc2luIG5vcm0KKwkubG9uZwlzemVybwkJfCQwZS0xIGZzaW4gemVybworCS5sb25nCXRfb3BlcnIJCXwkMGUtMiBmc2luIGluZgorCS5sb25nCXNyY19uYW4JCXwkMGUtMyBmc2luIG5hbgorCS5sb25nCXNzaW5kCQl8JDBlLTQgZnNpbiBkZW5vcm0KKwkubG9uZwlzZXJyb3IJCXwkMGUtNSBmc2luIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDBlLTYgZnNpbiBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQwZS03IGZzaW4gRVJST1IKKworCS5sb25nCXN0YW4JCXwkMGYtMCBmdGFuIG5vcm0KKwkubG9uZwlzemVybwkJfCQwZi0xIGZ0YW4gemVybworCS5sb25nCXRfb3BlcnIJCXwkMGYtMiBmdGFuIGluZgorCS5sb25nCXNyY19uYW4JCXwkMGYtMyBmdGFuIG5hbgorCS5sb25nCXN0YW5kCQl8JDBmLTQgZnRhbiBkZW5vcm0KKwkubG9uZwlzZXJyb3IJCXwkMGYtNSBmdGFuIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDBmLTYgZnRhbiBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQwZi03IGZ0YW4gRVJST1IKKworCS5sb25nCXNldG94CQl8JDEwLTAgZmV0b3ggbm9ybQorCS5sb25nCWxkX3BvbmUJCXwkMTAtMSBmZXRveCB6ZXJvCisJLmxvbmcJc3pyX2luZgkJfCQxMC0yIGZldG94IGluZgorCS5sb25nCXNyY19uYW4JCXwkMTAtMyBmZXRveCBuYW4KKwkubG9uZwlzZXRveGQJCXwkMTAtNCBmZXRveCBkZW5vcm0KKwkubG9uZwlzZXJyb3IJCXwkMTAtNSBmZXRveCBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQxMC02IGZldG94IEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDEwLTcgZmV0b3ggRVJST1IKKworCS5sb25nCXN0d290b3gJCXwkMTEtMCBmdHdvdG94IG5vcm0KKwkubG9uZwlsZF9wb25lCQl8JDExLTEgZnR3b3RveCB6ZXJvCisJLmxvbmcJc3pyX2luZgkJfCQxMS0yIGZ0d290b3ggaW5mCisJLmxvbmcJc3JjX25hbgkJfCQxMS0zIGZ0d290b3ggbmFuCisJLmxvbmcJc3R3b3RveGQJfCQxMS00IGZ0d290b3ggZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDExLTUgZnR3b3RveCBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQxMS02IGZ0d290b3ggRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMTEtNyBmdHdvdG94IEVSUk9SCisKKwkubG9uZwlzdGVudG94CQl8JDEyLTAgZnRlbnRveCBub3JtCisJLmxvbmcJbGRfcG9uZQkJfCQxMi0xIGZ0ZW50b3ggemVybworCS5sb25nCXN6cl9pbmYJCXwkMTItMiBmdGVudG94IGluZgorCS5sb25nCXNyY19uYW4JCXwkMTItMyBmdGVudG94IG5hbgorCS5sb25nCXN0ZW50b3hkCXwkMTItNCBmdGVudG94IGRlbm9ybQorCS5sb25nCXNlcnJvcgkJfCQxMi01IGZ0ZW50b3ggRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMTItNiBmdGVudG94IEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDEyLTcgZnRlbnRveCBFUlJPUgorCisJLmxvbmcJc2Vycm9yCQl8JDEzLTAgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxMy0xIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMTMtMiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDEzLTMgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxMy00IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMTMtNSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDEzLTYgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxMy03IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKworCS5sb25nCXNzbG9nbgkJfCQxNC0wIGZsb2duIG5vcm0KKwkubG9uZwl0X2R6MgkJfCQxNC0xIGZsb2duIHplcm8KKwkubG9uZwlzb3ByX2luZgl8JDE0LTIgZmxvZ24gaW5mCisJLmxvbmcJc3JjX25hbgkJfCQxNC0zIGZsb2duIG5hbgorCS5sb25nCXNzbG9nbmQJCXwkMTQtNCBmbG9nbiBkZW5vcm0KKwkubG9uZwlzZXJyb3IJCXwkMTQtNSBmbG9nbiBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQxNC02IGZsb2duIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDE0LTcgZmxvZ24gRVJST1IKKworCS5sb25nCXNzbG9nMTAJCXwkMTUtMCBmbG9nMTAgbm9ybQorCS5sb25nCXRfZHoyCQl8JDE1LTEgZmxvZzEwIHplcm8KKwkubG9uZwlzb3ByX2luZgl8JDE1LTIgZmxvZzEwIGluZgorCS5sb25nCXNyY19uYW4JCXwkMTUtMyBmbG9nMTAgbmFuCisJLmxvbmcJc3Nsb2cxMGQJfCQxNS00IGZsb2cxMCBkZW5vcm0KKwkubG9uZwlzZXJyb3IJCXwkMTUtNSBmbG9nMTAgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMTUtNiBmbG9nMTAgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMTUtNyBmbG9nMTAgRVJST1IKKworCS5sb25nCXNzbG9nMgkJfCQxNi0wIGZsb2cyIG5vcm0KKwkubG9uZwl0X2R6MgkJfCQxNi0xIGZsb2cyIHplcm8KKwkubG9uZwlzb3ByX2luZgl8JDE2LTIgZmxvZzIgaW5mCisJLmxvbmcJc3JjX25hbgkJfCQxNi0zIGZsb2cyIG5hbgorCS5sb25nCXNzbG9nMmQJCXwkMTYtNCBmbG9nMiBkZW5vcm0KKwkubG9uZwlzZXJyb3IJCXwkMTYtNSBmbG9nMiBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQxNi02IGZsb2cyIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDE2LTcgZmxvZzIgRVJST1IKKworCS5sb25nCXNlcnJvcgkJfCQxNy0wIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMTctMSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDE3LTIgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxNy0zIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMTctNCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDE3LTUgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxNy02IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMTctNyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisKKwkubG9uZwlzZXJyb3IJCXwkMTgtMCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDE4LTEgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxOC0yIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMTgtMyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDE4LTQgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxOC01IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMTgtNiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDE4LTcgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCisJLmxvbmcJc2Nvc2gJCXwkMTktMCBmY29zaCBub3JtCisJLmxvbmcJbGRfcG9uZQkJfCQxOS0xIGZjb3NoIHplcm8KKwkubG9uZwlsZF9waW5mCQl8JDE5LTIgZmNvc2ggaW5mCisJLmxvbmcJc3JjX25hbgkJfCQxOS0zIGZjb3NoIG5hbgorCS5sb25nCXNjb3NoZAkJfCQxOS00IGZjb3NoIGRlbm9ybQorCS5sb25nCXNlcnJvcgkJfCQxOS01IGZjb3NoIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDE5LTYgZmNvc2ggRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMTktNyBmY29zaCBFUlJPUgorCisJLmxvbmcJc2Vycm9yCQl8JDFhLTAgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxYS0xIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMWEtMiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDFhLTMgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxYS00IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMWEtNSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDFhLTYgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxYS03IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKworCS5sb25nCXNlcnJvcgkJfCQxYi0wIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMWItMSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDFiLTIgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxYi0zIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMWItNCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDFiLTUgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQxYi02IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMWItNyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisKKwkubG9uZwlzYWNvcwkJfCQxYy0wIGZhY29zIG5vcm0KKwkubG9uZwlsZF9wcGkyCQl8JDFjLTEgZmFjb3MgemVybworCS5sb25nCXRfb3BlcnIJCXwkMWMtMiBmYWNvcyBpbmYKKwkubG9uZwlzcmNfbmFuCQl8JDFjLTMgZmFjb3MgbmFuCisJLmxvbmcJc2Fjb3NkCQl8JDFjLTQgZmFjb3MgZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDFjLTUgZmFjb3MgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMWMtNiBmYWNvcyBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQxYy03IGZhY29zIEVSUk9SCisKKwkubG9uZwlzY29zCQl8JDFkLTAgZmNvcyBub3JtCisJLmxvbmcJbGRfcG9uZQkJfCQxZC0xIGZjb3MgemVybworCS5sb25nCXRfb3BlcnIJCXwkMWQtMiBmY29zIGluZgorCS5sb25nCXNyY19uYW4JCXwkMWQtMyBmY29zIG5hbgorCS5sb25nCXNjb3NkCQl8JDFkLTQgZmNvcyBkZW5vcm0KKwkubG9uZwlzZXJyb3IJCXwkMWQtNSBmY29zIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDFkLTYgZmNvcyBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQxZC03IGZjb3MgRVJST1IKKworCS5sb25nCXNnZXRleHAJCXwkMWUtMCBmZ2V0ZXhwIG5vcm0KKwkubG9uZwlzemVybwkJfCQxZS0xIGZnZXRleHAgemVybworCS5sb25nCXRfb3BlcnIJCXwkMWUtMiBmZ2V0ZXhwIGluZgorCS5sb25nCXNyY19uYW4JCXwkMWUtMyBmZ2V0ZXhwIG5hbgorCS5sb25nCXNnZXRleHBkCXwkMWUtNCBmZ2V0ZXhwIGRlbm9ybQorCS5sb25nCXNlcnJvcgkJfCQxZS01IGZnZXRleHAgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMWUtNiBmZ2V0ZXhwIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDFlLTcgZmdldGV4cCBFUlJPUgorCisJLmxvbmcJc2dldG1hbgkJfCQxZi0wIGZnZXRtYW4gbm9ybQorCS5sb25nCXN6ZXJvCQl8JDFmLTEgZmdldG1hbiB6ZXJvCisJLmxvbmcJdF9vcGVycgkJfCQxZi0yIGZnZXRtYW4gaW5mCisJLmxvbmcJc3JjX25hbgkJfCQxZi0zIGZnZXRtYW4gbmFuCisJLmxvbmcJc2dldG1hbmQJfCQxZi00IGZnZXRtYW4gZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDFmLTUgZmdldG1hbiBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQxZi02IGZnZXRtYW4gRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMWYtNyBmZ2V0bWFuIEVSUk9SCisKKwkubG9uZwlzZXJyb3IJCXwkMjAtMCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDIwLTEgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyMC0yIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjAtMyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDIwLTQgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyMC01IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjAtNiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDIwLTcgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCisJLmxvbmcJcG1vZAkJfCQyMS0wIGZtb2QgYWxsCisJLmxvbmcJcG1vZAkJfCQyMS0xIGZtb2QgYWxsCisJLmxvbmcJcG1vZAkJfCQyMS0yIGZtb2QgYWxsCisJLmxvbmcJcG1vZAkJfCQyMS0zIGZtb2QgYWxsCisJLmxvbmcJcG1vZAkJfCQyMS00IGZtb2QgYWxsCisJLmxvbmcJc2Vycm9yCQl8JDIxLTUgZm1vZCBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQyMS02IGZtb2QgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMjEtNyBmbW9kIEVSUk9SCisKKwkubG9uZwlzZXJyb3IJCXwkMjItMCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDIyLTEgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyMi0yIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjItMyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDIyLTQgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyMi01IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjItNiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDIyLTcgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCisJLmxvbmcJc2Vycm9yCQl8JDIzLTAgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyMy0xIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjMtMiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDIzLTMgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyMy00IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjMtNSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDIzLTYgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyMy03IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKworCS5sb25nCXNlcnJvcgkJfCQyNC0wIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjQtMSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDI0LTIgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyNC0zIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjQtNCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDI0LTUgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyNC02IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjQtNyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisKKwkubG9uZwlwcmVtCQl8JDI1LTAgZnJlbSBhbGwKKwkubG9uZwlwcmVtCQl8JDI1LTEgZnJlbSBhbGwKKwkubG9uZwlwcmVtCQl8JDI1LTIgZnJlbSBhbGwKKwkubG9uZwlwcmVtCQl8JDI1LTMgZnJlbSBhbGwKKwkubG9uZwlwcmVtCQl8JDI1LTQgZnJlbSBhbGwKKwkubG9uZwlzZXJyb3IJCXwkMjUtNSBmcmVtIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDI1LTYgZnJlbSBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQyNS03IGZyZW0gRVJST1IKKworCS5sb25nCXBzY2FsZQkJfCQyNi0wIGZzY2FsZSBhbGwKKwkubG9uZwlwc2NhbGUJCXwkMjYtMSBmc2NhbGUgYWxsCisJLmxvbmcJcHNjYWxlCQl8JDI2LTIgZnNjYWxlIGFsbAorCS5sb25nCXBzY2FsZQkJfCQyNi0zIGZzY2FsZSBhbGwKKwkubG9uZwlwc2NhbGUJCXwkMjYtNCBmc2NhbGUgYWxsCisJLmxvbmcJc2Vycm9yCQl8JDI2LTUgZnNjYWxlIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDI2LTYgZnNjYWxlIEVSUk9SCisJLmxvbmcJc2Vycm9yCQl8JDI2LTcgZnNjYWxlIEVSUk9SCisKKwkubG9uZwlzZXJyb3IJCXwkMjctMCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDI3LTEgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyNy0yIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjctMyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDI3LTQgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyNy01IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjctNiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDI3LTcgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCisJLmxvbmcJc2Vycm9yCQl8JDI4LTAgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyOC0xIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjgtMiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDI4LTMgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyOC00IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjgtNSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDI4LTYgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyOC03IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKworCS5sb25nCXNlcnJvcgkJfCQyOS0wIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjktMSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDI5LTIgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyOS0zIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjktNCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDI5LTUgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyOS02IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMjktNyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisKKwkubG9uZwlzZXJyb3IJCXwkMmEtMCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJhLTEgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyYS0yIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmEtMyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJhLTQgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyYS01IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmEtNiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJhLTcgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCisJLmxvbmcJc2Vycm9yCQl8JDJiLTAgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyYi0xIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmItMiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJiLTMgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyYi00IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmItNSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJiLTYgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyYi03IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKworCS5sb25nCXNlcnJvcgkJfCQyYy0wIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmMtMSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJjLTIgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyYy0zIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmMtNCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJjLTUgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyYy02IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmMtNyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisKKwkubG9uZwlzZXJyb3IJCXwkMmQtMCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJkLTEgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyZC0yIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmQtMyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJkLTQgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyZC01IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmQtNiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJkLTcgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCisJLmxvbmcJc2Vycm9yCQl8JDJlLTAgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyZS0xIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmUtMiBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJlLTMgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyZS00IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmUtNSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJlLTYgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyZS03IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKworCS5sb25nCXNlcnJvcgkJfCQyZi0wIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmYtMSBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJmLTIgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyZi0zIEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmYtNCBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisJLmxvbmcJc2Vycm9yCQl8JDJmLTUgRVJST1IgLSBpbGxlZ2FsIGV4dGVuc2lvbgorCS5sb25nCXNlcnJvcgkJfCQyZi02IEVSUk9SIC0gaWxsZWdhbCBleHRlbnNpb24KKwkubG9uZwlzZXJyb3IJCXwkMmYtNyBFUlJPUiAtIGlsbGVnYWwgZXh0ZW5zaW9uCisKKwkubG9uZwlzc2luY29zCQl8JDMwLTAgZnNpbmNvcyBub3JtCisJLmxvbmcJc3NpbmNvc3oJfCQzMC0xIGZzaW5jb3MgemVybworCS5sb25nCXNzaW5jb3NpCXwkMzAtMiBmc2luY29zIGluZgorCS5sb25nCXNzaW5jb3NuYW4JfCQzMC0zIGZzaW5jb3MgbmFuCisJLmxvbmcJc3NpbmNvc2QJfCQzMC00IGZzaW5jb3MgZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDMwLTUgZnNpbmNvcyBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQzMC02IGZzaW5jb3MgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMzAtNyBmc2luY29zIEVSUk9SCisKKwkubG9uZwlzc2luY29zCQl8JDMxLTAgZnNpbmNvcyBub3JtCisJLmxvbmcJc3NpbmNvc3oJfCQzMS0xIGZzaW5jb3MgemVybworCS5sb25nCXNzaW5jb3NpCXwkMzEtMiBmc2luY29zIGluZgorCS5sb25nCXNzaW5jb3NuYW4JfCQzMS0zIGZzaW5jb3MgbmFuCisJLmxvbmcJc3NpbmNvc2QJfCQzMS00IGZzaW5jb3MgZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDMxLTUgZnNpbmNvcyBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQzMS02IGZzaW5jb3MgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMzEtNyBmc2luY29zIEVSUk9SCisKKwkubG9uZwlzc2luY29zCQl8JDMyLTAgZnNpbmNvcyBub3JtCisJLmxvbmcJc3NpbmNvc3oJfCQzMi0xIGZzaW5jb3MgemVybworCS5sb25nCXNzaW5jb3NpCXwkMzItMiBmc2luY29zIGluZgorCS5sb25nCXNzaW5jb3NuYW4JfCQzMi0zIGZzaW5jb3MgbmFuCisJLmxvbmcJc3NpbmNvc2QJfCQzMi00IGZzaW5jb3MgZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDMyLTUgZnNpbmNvcyBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQzMi02IGZzaW5jb3MgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMzItNyBmc2luY29zIEVSUk9SCisKKwkubG9uZwlzc2luY29zCQl8JDMzLTAgZnNpbmNvcyBub3JtCisJLmxvbmcJc3NpbmNvc3oJfCQzMy0xIGZzaW5jb3MgemVybworCS5sb25nCXNzaW5jb3NpCXwkMzMtMiBmc2luY29zIGluZgorCS5sb25nCXNzaW5jb3NuYW4JfCQzMy0zIGZzaW5jb3MgbmFuCisJLmxvbmcJc3NpbmNvc2QJfCQzMy00IGZzaW5jb3MgZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDMzLTUgZnNpbmNvcyBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQzMy02IGZzaW5jb3MgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMzMtNyBmc2luY29zIEVSUk9SCisKKwkubG9uZwlzc2luY29zCQl8JDM0LTAgZnNpbmNvcyBub3JtCisJLmxvbmcJc3NpbmNvc3oJfCQzNC0xIGZzaW5jb3MgemVybworCS5sb25nCXNzaW5jb3NpCXwkMzQtMiBmc2luY29zIGluZgorCS5sb25nCXNzaW5jb3NuYW4JfCQzNC0zIGZzaW5jb3MgbmFuCisJLmxvbmcJc3NpbmNvc2QJfCQzNC00IGZzaW5jb3MgZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDM0LTUgZnNpbmNvcyBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQzNC02IGZzaW5jb3MgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMzQtNyBmc2luY29zIEVSUk9SCisKKwkubG9uZwlzc2luY29zCQl8JDM1LTAgZnNpbmNvcyBub3JtCisJLmxvbmcJc3NpbmNvc3oJfCQzNS0xIGZzaW5jb3MgemVybworCS5sb25nCXNzaW5jb3NpCXwkMzUtMiBmc2luY29zIGluZgorCS5sb25nCXNzaW5jb3NuYW4JfCQzNS0zIGZzaW5jb3MgbmFuCisJLmxvbmcJc3NpbmNvc2QJfCQzNS00IGZzaW5jb3MgZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDM1LTUgZnNpbmNvcyBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQzNS02IGZzaW5jb3MgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMzUtNyBmc2luY29zIEVSUk9SCisKKwkubG9uZwlzc2luY29zCQl8JDM2LTAgZnNpbmNvcyBub3JtCisJLmxvbmcJc3NpbmNvc3oJfCQzNi0xIGZzaW5jb3MgemVybworCS5sb25nCXNzaW5jb3NpCXwkMzYtMiBmc2luY29zIGluZgorCS5sb25nCXNzaW5jb3NuYW4JfCQzNi0zIGZzaW5jb3MgbmFuCisJLmxvbmcJc3NpbmNvc2QJfCQzNi00IGZzaW5jb3MgZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDM2LTUgZnNpbmNvcyBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQzNi02IGZzaW5jb3MgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMzYtNyBmc2luY29zIEVSUk9SCisKKwkubG9uZwlzc2luY29zCQl8JDM3LTAgZnNpbmNvcyBub3JtCisJLmxvbmcJc3NpbmNvc3oJfCQzNy0xIGZzaW5jb3MgemVybworCS5sb25nCXNzaW5jb3NpCXwkMzctMiBmc2luY29zIGluZgorCS5sb25nCXNzaW5jb3NuYW4JfCQzNy0zIGZzaW5jb3MgbmFuCisJLmxvbmcJc3NpbmNvc2QJfCQzNy00IGZzaW5jb3MgZGVub3JtCisJLmxvbmcJc2Vycm9yCQl8JDM3LTUgZnNpbmNvcyBFUlJPUgorCS5sb25nCXNlcnJvcgkJfCQzNy02IGZzaW5jb3MgRVJST1IKKwkubG9uZwlzZXJyb3IJCXwkMzctNyBmc2luY29zIEVSUk9SCisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC91dGlsLlMgYi9hcmNoL202OGsvZnBzcDA0MC91dGlsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUyZjNkNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3V0aWwuUwpAQCAtMCwwICsxLDc0OCBAQAorfAorfAl1dGlsLnNhIDMuNyA3LzI5LzkxCit8Cit8CVRoaXMgZmlsZSBjb250YWlucyByb3V0aW5lcyB1c2VkIGJ5IG90aGVyIHByb2dyYW1zLgorfAorfAlvdmZfcmVzOiB1c2VkIGJ5IG92ZXJmbG93IHRvIGZvcmNlIHRoZSBjb3JyZWN0Cit8CQkgcmVzdWx0LiBvdmZfcl9rLCBvdmZfcl94Miwgb3ZmX3JfeDMgYXJlCit8CQkgZGVyaXZhdGl2ZXMgb2YgdGhpcyByb3V0aW5lLgorfAlnZXRfZmxpbmU6IGdldCB1c2VyJ3Mgb3Bjb2RlIHdvcmQKK3wJZ19kZm10b3U6IHJldHVybnMgdGhlIGRlc3RpbmF0aW9uIGZvcm1hdC4KK3wJZ19vcGNsczogcmV0dXJucyB0aGUgb3BjbGFzcyBvZiB0aGUgZmxvYXQgaW5zdHJ1Y3Rpb24uCit8CWdfcm5kcHI6IHJldHVybnMgdGhlIHJvdW5kaW5nIHByZWNpc2lvbi4KK3wJcmVnX2Rlc3Q6IHdyaXRlIGJ5dGUsIHdvcmQsIG9yIGxvbmcgZGF0YSB0byBEbgorfAorfAorfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworfFVUSUwJaWRudCAgICAyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCisJfHhyZWYJbWVtX3JlYWQKKworCS5nbG9iYWwJZ19kZm10b3UKKwkuZ2xvYmFsCWdfb3BjbHMKKwkuZ2xvYmFsCWdfcm5kcHIKKwkuZ2xvYmFsCWdldF9mbGluZQorCS5nbG9iYWwJcmVnX2Rlc3QKKworfAorfCBGaW5hbCByZXN1bHQgdGFibGUgZm9yIG92Zl9yZXMuIE5vdGUgdGhhdCB0aGUgbmVnYXRpdmUgY291bnRlcnBhcnRzCit8IGFyZSB1bm5lY2Vzc2FyeSBhcyBvdmZfcmVzIGFsd2F5cyByZXR1cm5zIHRoZSBzaWduIHNlcGFyYXRlbHkgZnJvbQorfCB0aGUgZXhwb25lbnQuCit8CQkJCQk7K2luZgorRVhUX1BJTkY6CS5sb25nCTB4N2ZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK3wJCQkJCTtsYXJnZXN0ICtleHQKK0VYVF9QTFJHOgkubG9uZwkweDdmZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZmZmZiwweDAwMDAwMDAwCit8CQkJCQk7bGFyZ2VzdCBtYWduaXR1ZGUgK3NnbCBpbiBleHQKK1NHTF9QTFJHOgkubG9uZwkweDQwN2UwMDAwLDB4ZmZmZmZmMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCit8CQkJCQk7bGFyZ2VzdCBtYWduaXR1ZGUgK2RibCBpbiBleHQKK0RCTF9QTFJHOgkubG9uZwkweDQzZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZjgwMCwweDAwMDAwMDAwCit8CQkJCQk7bGFyZ2VzdCAtZXh0CisKK3RibG92Zmw6CisJLmxvbmcJRVhUX1JOCisJLmxvbmcJRVhUX1JaCisJLmxvbmcJRVhUX1JNCisJLmxvbmcJRVhUX1JQCisJLmxvbmcJU0dMX1JOCisJLmxvbmcJU0dMX1JaCisJLmxvbmcJU0dMX1JNCisJLmxvbmcJU0dMX1JQCisJLmxvbmcJREJMX1JOCisJLmxvbmcJREJMX1JaCisJLmxvbmcJREJMX1JNCisJLmxvbmcJREJMX1JQCisJLmxvbmcJZXJyb3IKKwkubG9uZwllcnJvcgorCS5sb25nCWVycm9yCisJLmxvbmcJZXJyb3IKKworCit8Cit8CW92Zl9yX2sgLS0tIG92ZXJmbG93IHJlc3VsdCBjYWxjdWxhdGlvbgorfAorfCBUaGlzIGVudHJ5IHBvaW50IGlzIHVzZWQgYnkga2VybmVsX2V4LgorfAorfCBUaGlzIGZvcmNlcyB0aGUgZGVzdGluYXRpb24gcHJlY2lzaW9uIHRvIGJlIGV4dGVuZGVkCit8Cit8IElucHV0OglvcGVyYW5kIGluIEVURU1QCit8IE91dHB1dDoJYSByZXN1bHQgaXMgaW4gRVRFTVAgKGludGVybmFsIGV4dGVuZGVkIGZvcm1hdCkKK3wKKwkuZ2xvYmFsCW92Zl9yX2sKK292Zl9yX2s6CisJbGVhCUVURU1QKCVhNiksJWEwCXxhMCBwb2ludHMgdG8gc291cmNlIG9wZXJhbmQKKwliY2xyYgkjc2lnbl9iaXQsRVRFTVBfRVgoJWE2KQorCXNuZQlFVEVNUF9TR04oJWE2KQl8Y29udmVydCB0byBpbnRlcm5hbCBJRUVFIGZvcm1hdAorCit8Cit8CW92Zl9yX3gyIC0tLSBvdmVyZmxvdyByZXN1bHQgY2FsY3VsYXRpb24KK3wKK3wgVGhpcyBlbnRyeSBwb2ludCB1c2VkIGJ5IHhfb3ZmbC4gIChvcGNsYXNzIDAgYW5kIDIpCit8Cit8IElucHV0CQlhMCAgcG9pbnRzIHRvIGFuIG9wZXJhbmQgaW4gdGhlIGludGVybmFsIGV4dGVuZGVkIGZvcm1hdAorfCBPdXRwdXQJYTAgIHBvaW50cyB0byB0aGUgcmVzdWx0IGluIHRoZSBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQKK3wKK3wgVGhpcyBzZXRzIHRoZSByb3VuZCBwcmVjaXNpb24gYWNjb3JkaW5nIHRvIHRoZSB1c2VyJ3MgRlBDUiB1bmxlc3MgdGhlCit8IGluc3RydWN0aW9uIGlzIGZzZ2xkaXYgb3IgZnNnbG11bCBvciBmc2FkZCwgZmRhZGQsIGZzdWIsIGZkc3ViLCBmc211bCwKK3wgZmRtdWwsIGZzZGl2LCBmZGRpdiwgZnNzcXJ0LCBmc21vdmUsIGZkbW92ZSwgZnNhYnMsIGZkYWJzLCBmc25lZywgZmRuZWcuCit8IElmIHRoZSBpbnN0cnVjdGlvbiBpcyBmc2dsZGl2IG9mIGZzZ2xtdWwsIHRoZSByb3VuZGluZyBwcmVjaXNpb24gbXVzdCBiZQorfCBleHRlbmRlZC4gIElmIHRoZSBpbnN0cnVjdGlvbiBpcyBub3QgZnNnbGRpdiBvciBmc2dsbXVsIGJ1dCBhIGZvcmNlLQorfCBwcmVjaXNpb24gaW5zdHJ1Y3Rpb24sIHRoZSByb3VuZGluZyBwcmVjaXNpb24gaXMgdGhlbiBzZXQgdG8gdGhlIGZvcmNlCit8IHByZWNpc2lvbi4KKworCS5nbG9iYWwJb3ZmX3JfeDIKK292Zl9yX3gyOgorCWJ0c3RiCSNFMyxFX0JZVEUoJWE2KQkJfGNoZWNrIGZvciBudSBleGNlcHRpb24KKwliZXFsCW92Zl9lMV9leGMJCXxpdCBpcyBjdSBleGNlcHRpb24KK292Zl9lM19leGM6CisJbW92ZXcJQ01EUkVHM0IoJWE2KSwlZDAJCXxnZXQgdGhlIGNvbW1hbmQgd29yZAorCWFuZGl3CSMweDAwMDAwMDYwLCVkMAkJfGNsZWFyIGFsbCBiaXRzIGV4Y2VwdCA2IGFuZCA1CisJY21waWwJIzB4MDAwMDAwNDAsJWQwCisJYmVxbAlvdmZmX3NnbAkJfGZvcmNlIHByZWNpc2lvbiBpcyBzaW5nbGUKKwljbXBpbAkjMHgwMDAwMDA2MCwlZDAKKwliZXFsCW92ZmZfZGJsCQl8Zm9yY2UgcHJlY2lzaW9uIGlzIGRvdWJsZQorCW1vdmV3CUNNRFJFRzNCKCVhNiksJWQwCQl8Z2V0IHRoZSBjb21tYW5kIHdvcmQgYWdhaW4KKwlhbmRpbAkjMHg3ZiwlZDAJCQl8Y2xlYXIgYWxsIGV4Y2VwdCBvcGVyYXRpb24KKwljbXBpbAkjMHgzMywlZDAKKwliZXFsCW92Zl9mc2dsCQl8ZnNnbG11bCBvciBmc2dsZGl2CisJY21waWwJIzB4MzAsJWQwCisJYmVxbAlvdmZfZnNnbAorCWJyYQlvdmZfZnBjcgkJfGluc3RydWN0aW9uIGlzIG5vbmUgb2YgdGhlIGFib3ZlCit8CQkJCQk7dXNlIEZQQ1IKK292Zl9lMV9leGM6CisJbW92ZXcJQ01EUkVHMUIoJWE2KSwlZDAJCXxnZXQgY29tbWFuZCB3b3JkCisJYW5kaWwJIzB4MDAwMDAwNDQsJWQwCQl8Y2xlYXIgYWxsIGJpdHMgZXhjZXB0IDYgYW5kIDIKKwljbXBpbAkjMHgwMDAwMDA0MCwlZDAKKwliZXFsCW92ZmZfc2dsCQl8dGhlIGluc3RydWN0aW9uIGlzIGZvcmNlIHNpbmdsZQorCWNtcGlsCSMweDAwMDAwMDQ0LCVkMAorCWJlcWwJb3ZmZl9kYmwJCXx0aGUgaW5zdHJ1Y3Rpb24gaXMgZm9yY2UgZG91YmxlCisJbW92ZXcJQ01EUkVHMUIoJWE2KSwlZDAJCXxhZ2FpbiBnZXQgdGhlIGNvbW1hbmQgd29yZAorCWFuZGlsCSMweDAwMDAwMDdmLCVkMAkJfGNsZWFyIGFsbCBleGNlcHQgdGhlIG9wIGNvZGUKKwljbXBpbAkjMHgwMDAwMDAyNywlZDAKKwliZXFsCW92Zl9mc2dsCQl8ZnNnbG11bAorCWNtcGlsCSMweDAwMDAwMDI0LCVkMAorCWJlcWwJb3ZmX2ZzZ2wJCXxmc2dsZGl2CisJYnJhCW92Zl9mcGNyCQl8bm9uZSBvZiB0aGUgYWJvdmUsIHVzZSBGUENSCit8Cit8Cit8IEluc3QgaXMgZWl0aGVyIGZzZ2xkaXYgb3IgZnNnbG11bC4gIEZvcmNlIGV4dGVuZGVkIHByZWNpc2lvbi4KK3wKK292Zl9mc2dsOgorCWNscmwJJWQwCisJYnJhCW92Zl9yZXMKKworb3ZmZl9zZ2w6CisJbW92ZWwJIzB4MDAwMDAwMDEsJWQwCQl8c2V0IHNpbmdsZQorCWJyYQlvdmZfcmVzCitvdmZmX2RibDoKKwltb3ZlbAkjMHgwMDAwMDAwMiwlZDAJCXxzZXQgZG91YmxlCisJYnJhCW92Zl9yZXMKK3wKK3wgVGhlIHByZWNpc2lvbiBpcyBpbiB0aGUgZnBjci4KK3wKK292Zl9mcGNyOgorCWJmZXh0dQlGUENSX01PREUoJWE2KXsjMDojMn0sJWQwIHxzZXQgcm91bmQgcHJlY2lzaW9uCisJYnJhCW92Zl9yZXMKKworfAorfAorfAlvdmZfcl94MyAtLS0gb3ZlcmZsb3cgcmVzdWx0IGNhbGN1bGF0aW9uCit8Cit8IFRoaXMgZW50cnkgcG9pbnQgdXNlZCBieSB4X292ZmwuIChvcGNsYXNzIDMgb25seSkKK3wKK3wgSW5wdXQJCWEwICBwb2ludHMgdG8gYW4gb3BlcmFuZCBpbiB0aGUgaW50ZXJuYWwgZXh0ZW5kZWQgZm9ybWF0Cit8IE91dHB1dAlhMCAgcG9pbnRzIHRvIHRoZSByZXN1bHQgaW4gdGhlIGludGVybmFsIGV4dGVuZGVkIGZvcm1hdAorfAorfCBUaGlzIHNldHMgdGhlIHJvdW5kIHByZWNpc2lvbiBhY2NvcmRpbmcgdG8gdGhlIGRlc3RpbmF0aW9uIHNpemUuCit8CisJLmdsb2JhbAlvdmZfcl94Mworb3ZmX3JfeDM6CisJYnNyCWdfZGZtdG91CXxnZXQgZGVzdCBmbXQgaW4gZDB7MTowfQorfAkJCQk7Zm9yIGZtb3ZvdXQsIHRoZSBkZXN0aW5hdGlvbiBmb3JtYXQKK3wJCQkJO2lzIHRoZSByb3VuZGluZyBwcmVjaXNpb24KKworfAorfAlvdmZfcmVzIC0tLSBvdmVyZmxvdyByZXN1bHQgY2FsY3VsYXRpb24KK3wKK3wgSW5wdXQ6Cit8CWEwCXBvaW50cyB0byBvcGVyYW5kIGluIGludGVybmFsIGV4dGVuZGVkIGZvcm1hdAorfCBPdXRwdXQ6Cit8CWEwCXBvaW50cyB0byByZXN1bHQgaW4gaW50ZXJuYWwgZXh0ZW5kZWQgZm9ybWF0Cit8CisJLmdsb2JhbAlvdmZfcmVzCitvdmZfcmVzOgorCWxzbGwJIzIsJWQwCQl8bW92ZSByb3VuZCBwcmVjaXNpb24gdG8gZDB7MzoyfQorCWJmZXh0dQlGUENSX01PREUoJWE2KXsjMjojMn0sJWQxIHxzZXQgcm91bmQgbW9kZQorCW9ybAklZDEsJWQwCQl8aW5kZXggaXMgZm10Om1vZGUgaW4gZDB7MzowfQorCWxlYWwJdGJsb3ZmbCwlYTEJfGxvYWQgYTEgd2l0aCB0YWJsZSBhZGRyZXNzCisJbW92ZWwJJWExQCglZDA6bDo0KSwlYTEJfHVzZSBkMCBhcyBpbmRleCB0byB0aGUgdGFibGUKKwlqbXAJKCVhMSkJCXxnbyB0byB0aGUgY29ycmVjdCByb3V0aW5lCit8Cit8Y2FzZSBERVNUX0ZNVCA9IEVYVAorfAorRVhUX1JOOgorCWxlYWwJRVhUX1BJTkYsJWExCXxhbnN3ZXIgaXMgKy8tIGluZmluaXR5CisJYnNldGIJI2luZl9iaXQsRlBTUl9DQyglYTYpCisJYnJhCXNldF9zaWduCXxub3cgZ28gc2V0IHRoZSBzaWduCitFWFRfUlo6CisJbGVhbAlFWFRfUExSRywlYTEJfGFuc3dlciBpcyArLy0gbGFyZ2UgbnVtYmVyCisJYnJhCXNldF9zaWduCXxub3cgZ28gc2V0IHRoZSBzaWduCitFWFRfUk06CisJdHN0YglMT0NBTF9TR04oJWEwKQl8aWYgbmVnYXRpdmUgb3ZlcmZsb3cKKwliZXFzCWVfcm1fcG9zCitlX3JtX25lZzoKKwlsZWFsCUVYVF9QSU5GLCVhMQl8YW5zd2VyIGlzIG5lZ2F0aXZlIGluZmluaXR5CisJb3JsCSNuZWdpbmZfbWFzayxVU0VSX0ZQU1IoJWE2KQorCWJyYQllbmRfb3ZmcgorZV9ybV9wb3M6CisJbGVhbAlFWFRfUExSRywlYTEJfGFuc3dlciBpcyBsYXJnZSBwb3NpdGl2ZSBudW1iZXIKKwlicmEJZW5kX292ZnIKK0VYVF9SUDoKKwl0c3RiCUxPQ0FMX1NHTiglYTApCXxpZiBuZWdhdGl2ZSBvdmVyZmxvdworCWJlcXMJZV9ycF9wb3MKK2VfcnBfbmVnOgorCWxlYWwJRVhUX1BMUkcsJWExCXxhbnN3ZXIgaXMgbGFyZ2UgbmVnYXRpdmUgbnVtYmVyCisJYnNldGIJI25lZ19iaXQsRlBTUl9DQyglYTYpCisJYnJhCWVuZF9vdmZyCitlX3JwX3BvczoKKwlsZWFsCUVYVF9QSU5GLCVhMQl8YW5zd2VyIGlzIHBvc2l0aXZlIGluZmluaXR5CisJYnNldGIJI2luZl9iaXQsRlBTUl9DQyglYTYpCisJYnJhCWVuZF9vdmZyCit8Cit8Y2FzZSBERVNUX0ZNVCA9IERCTAorfAorREJMX1JOOgorCWxlYWwJRVhUX1BJTkYsJWExCXxhbnN3ZXIgaXMgKy8tIGluZmluaXR5CisJYnNldGIJI2luZl9iaXQsRlBTUl9DQyglYTYpCisJYnJhCXNldF9zaWduCitEQkxfUlo6CisJbGVhbAlEQkxfUExSRywlYTEJfGFuc3dlciBpcyArLy0gbGFyZ2UgbnVtYmVyCisJYnJhCXNldF9zaWduCXxub3cgZ28gc2V0IHRoZSBzaWduCitEQkxfUk06CisJdHN0YglMT0NBTF9TR04oJWEwKQl8aWYgbmVnYXRpdmUgb3ZlcmZsb3cKKwliZXFzCWRfcm1fcG9zCitkX3JtX25lZzoKKwlsZWFsCUVYVF9QSU5GLCVhMQl8YW5zd2VyIGlzIG5lZ2F0aXZlIGluZmluaXR5CisJb3JsCSNuZWdpbmZfbWFzayxVU0VSX0ZQU1IoJWE2KQorCWJyYQllbmRfb3Zmcgl8aW5mIGlzIHNhbWUgZm9yIGFsbCBwcmVjaXNpb25zIChleHQsZGJsLHNnbCkKK2Rfcm1fcG9zOgorCWxlYWwJREJMX1BMUkcsJWExCXxhbnN3ZXIgaXMgbGFyZ2UgcG9zaXRpdmUgbnVtYmVyCisJYnJhCWVuZF9vdmZyCitEQkxfUlA6CisJdHN0YglMT0NBTF9TR04oJWEwKQl8aWYgbmVnYXRpdmUgb3ZlcmZsb3cKKwliZXFzCWRfcnBfcG9zCitkX3JwX25lZzoKKwlsZWFsCURCTF9QTFJHLCVhMQl8YW5zd2VyIGlzIGxhcmdlIG5lZ2F0aXZlIG51bWJlcgorCWJzZXRiCSNuZWdfYml0LEZQU1JfQ0MoJWE2KQorCWJyYQllbmRfb3ZmcgorZF9ycF9wb3M6CisJbGVhbAlFWFRfUElORiwlYTEJfGFuc3dlciBpcyBwb3NpdGl2ZSBpbmZpbml0eQorCWJzZXRiCSNpbmZfYml0LEZQU1JfQ0MoJWE2KQorCWJyYQllbmRfb3ZmcgorfAorfGNhc2UgREVTVF9GTVQgPSBTR0wKK3wKK1NHTF9STjoKKwlsZWFsCUVYVF9QSU5GLCVhMQl8YW5zd2VyIGlzICsvLSAgaW5maW5pdHkKKwlic2V0YgkjaW5mX2JpdCxGUFNSX0NDKCVhNikKKwlicmFzCXNldF9zaWduCitTR0xfUlo6CisJbGVhbAlTR0xfUExSRywlYTEJfGFuc3dlciBpcyArLy0gbGFyZ2UgbnVtYmVyCisJYnJhcwlzZXRfc2lnbgorU0dMX1JNOgorCXRzdGIJTE9DQUxfU0dOKCVhMCkJfGlmIG5lZ2F0aXZlIG92ZXJmbG93CisJYmVxcwlzX3JtX3Bvcworc19ybV9uZWc6CisJbGVhbAlFWFRfUElORiwlYTEJfGFuc3dlciBpcyBuZWdhdGl2ZSBpbmZpbml0eQorCW9ybAkjbmVnaW5mX21hc2ssVVNFUl9GUFNSKCVhNikKKwlicmFzCWVuZF9vdmZyCitzX3JtX3BvczoKKwlsZWFsCVNHTF9QTFJHLCVhMQl8YW5zd2VyIGlzIGxhcmdlIHBvc2l0aXZlIG51bWJlcgorCWJyYXMJZW5kX292ZnIKK1NHTF9SUDoKKwl0c3RiCUxPQ0FMX1NHTiglYTApCXxpZiBuZWdhdGl2ZSBvdmVyZmxvdworCWJlcXMJc19ycF9wb3MKK3NfcnBfbmVnOgorCWxlYWwJU0dMX1BMUkcsJWExCXxhbnN3ZXIgaXMgbGFyZ2UgbmVnYXRpdmUgbnVtYmVyCisJYnNldGIJI25lZ19iaXQsRlBTUl9DQyglYTYpCisJYnJhcwllbmRfb3Zmcgorc19ycF9wb3M6CisJbGVhbAlFWFRfUElORiwlYTEJfGFuc3dlciBpcyBwb3NpdGl2ZSBpbmZpbml0eQorCWJzZXRiCSNpbmZfYml0LEZQU1JfQ0MoJWE2KQorCWJyYXMJZW5kX292ZnIKKworc2V0X3NpZ246CisJdHN0YglMT0NBTF9TR04oJWEwKQl8aWYgbmVnYXRpdmUgb3ZlcmZsb3cKKwliZXFzCWVuZF9vdmZyCituZWdfc2lnbjoKKwlic2V0YgkjbmVnX2JpdCxGUFNSX0NDKCVhNikKKworZW5kX292ZnI6CisJbW92ZXcJTE9DQUxfRVgoJWExKSxMT0NBTF9FWCglYTApIHxkbyBub3Qgb3ZlcndyaXRlIHNpZ24KKwltb3ZlbAlMT0NBTF9ISSglYTEpLExPQ0FMX0hJKCVhMCkKKwltb3ZlbAlMT0NBTF9MTyglYTEpLExPQ0FMX0xPKCVhMCkKKwlydHMKKworCit8Cit8CUVSUk9SCit8CitlcnJvcjoKKwlydHMKK3wKK3wJZ2V0X2ZsaW5lIC0tLSBnZXQgZi1saW5lIG9wY29kZSBvZiBpbnRlcnJ1cHRlZCBpbnN0cnVjdGlvbgorfAorfAlSZXR1cm5zIG9wY29kZSBpbiB0aGUgbG93IHdvcmQgb2YgZDAuCit8CitnZXRfZmxpbmU6CisJbW92ZWwJVVNFUl9GUElBUiglYTYpLCVhMAl8b3Bjb2RlIGFkZHJlc3MKKwltb3ZlbAkjMCwtKCVhNykJfHJlc2VydmUgYSB3b3JkIG9uIHRoZSBzdGFjaworCWxlYWwJMiglYTcpLCVhMQl8cG9pbnQgdG8gbG93IHdvcmQgb2YgdGVtcG9yYXJ5CisJbW92ZWwJIzIsJWQwCQl8Y291bnQKKwlic3JsCW1lbV9yZWFkCisJbW92ZWwJKCVhNykrLCVkMAorCXJ0cworfAorfAlnX3JuZHByIC0tLSBwdXQgcm91bmRpbmcgcHJlY2lzaW9uIGluIGQwezE6MH0KK3wKK3wJdmFsaWQgcmV0dXJuIGNvZGVzIGFyZToKK3wJCTAwIC0gZXh0ZW5kZWQKK3wJCTAxIC0gc2luZ2xlCit8CQkxMCAtIGRvdWJsZQorfAorfCBiZWdpbgorfCBnZXQgcm91bmRpbmcgcHJlY2lzaW9uIChjbWRyZWczYns2OjV9KQorfCBiZWdpbgorfCAgY2FzZQlvcGNsYXNzID0gMDExIChtb3ZlIG91dCkKK3wJZ2V0IGRlc3RpbmF0aW9uIGZvcm1hdCAtIHRoaXMgaXMgdGhlIGFsc28gdGhlIHJvdW5kaW5nIHByZWNpc2lvbgorfAorfCAgY2FzZQlvcGNsYXNzID0gMHgwCit8CWlmIEUzCit8CSAgICAqY2FzZSBSbmRQcihmcm9tIGNtZHJlZzNiezY6NX0gPSAxMSAgdGhlbiBSTkRfUFJFQyA9IERCTAorfAkgICAgKmNhc2UgUm5kUHIoZnJvbSBjbWRyZWczYns2OjV9ID0gMTAgIHRoZW4gUk5EX1BSRUMgPSBTR0wKK3wJICAgICBjYXNlIFJuZFByKGZyb20gY21kcmVnM2J7Njo1fSA9IDAwIHwgMDEKK3wJCXVzZSBwcmVjaXNpb24gZnJvbSBGUENSezc6Nn0KK3wJCQljYXNlIDAwIHRoZW4gUk5EX1BSRUMgPSBFWFQKK3wJCQljYXNlIDAxIHRoZW4gUk5EX1BSRUMgPSBTR0wKK3wJCQljYXNlIDEwIHRoZW4gUk5EX1BSRUMgPSBEQkwKK3wJZWxzZSBFMQorfAkgICAgIHVzZSBwcmVjaXNpb24gaW4gRlBDUns3OjZ9Cit8CSAgICAgY2FzZSAwMCB0aGVuIFJORF9QUkVDID0gRVhUCit8CSAgICAgY2FzZSAwMSB0aGVuIFJORF9QUkVDID0gU0dMCit8CSAgICAgY2FzZSAxMCB0aGVuIFJORF9QUkVDID0gREJMCit8IGVuZAorfAorZ19ybmRwcjoKKwlic3IJZ19vcGNscwkJfGdldCBvcGNsYXNzIGluIGQwezI6MH0KKwljbXB3CSMweDAwMDMsJWQwCXxjaGVjayBmb3Igb3BjbGFzcyAwMTEKKwlibmVzCW9wXzB4MAorCit8Cit8IEZvciBtb3ZlIG91dCBpbnN0cnVjdGlvbnMgKG9wY2xhc3MgMDExKSB0aGUgZGVzdGluYXRpb24gZm9ybWF0Cit8IGlzIHRoZSBzYW1lIGFzIHRoZSByb3VuZGluZyBwcmVjaXNpb24uICBQYXNzIHJlc3VsdHMgZnJvbSBnX2RmbXRvdS4KK3wKKwlic3IJZ19kZm10b3UKKwlydHMKK29wXzB4MDoKKwlidHN0YgkjRTMsRV9CWVRFKCVhNikKKwliZXFsCXVuZl9lMV9leGMJfGJyYW5jaCB0byBlMSB1bmRlcmZsb3cKK3VuZl9lM19leGM6CisJbW92ZWwJQ01EUkVHM0IoJWE2KSwlZDAJfHJvdW5kaW5nIHByZWNpc2lvbiBpbiBkMHsxMDo5fQorCWJmZXh0dQklZDB7Izk6IzJ9LCVkMAl8bW92ZSB0aGUgcm91bmRpbmcgcHJlYyBiaXRzIHRvIGQwezE6MH0KKwljbXBpbAkjMHgyLCVkMAorCWJlcWwJdW5mZl9zZ2wJfGZvcmNlIHByZWNpc2lvbiBpcyBzaW5nbGUKKwljbXBpbAkjMHgzLCVkMAkJfGZvcmNlIHByZWNpc2lvbiBpcyBkb3VibGUKKwliZXFsCXVuZmZfZGJsCisJbW92ZXcJQ01EUkVHM0IoJWE2KSwlZDAJfGdldCB0aGUgY29tbWFuZCB3b3JkIGFnYWluCisJYW5kaWwJIzB4N2YsJWQwCQl8Y2xlYXIgYWxsIGV4Y2VwdCBvcGVyYXRpb24KKwljbXBpbAkjMHgzMywlZDAKKwliZXFsCXVuZl9mc2dsCXxmc2dsbXVsIG9yIGZzZ2xkaXYKKwljbXBpbAkjMHgzMCwlZDAKKwliZXFsCXVuZl9mc2dsCXxmc2dsZGl2IG9yIGZzZ2xtdWwKKwlicmEJdW5mX2ZwY3IKK3VuZl9lMV9leGM6CisJbW92ZWwJQ01EUkVHMUIoJWE2KSwlZDAJfGdldCAzMiBiaXRzIG9mZiB0aGUgc3RhY2ssIDFzdCAxNiBiaXRzCit8CQkJCTthcmUgdGhlIGNvbW1hbmQgd29yZAorCWFuZGlsCSMweDAwNDQwMDAwLCVkMAl8Y2xlYXIgYWxsIGJpdHMgZXhjZXB0IGJpdHMgNiBhbmQgMgorCWNtcGlsCSMweDAwNDAwMDAwLCVkMAorCWJlcWwJdW5mZl9zZ2wJfGZvcmNlIHNpbmdsZQorCWNtcGlsCSMweDAwNDQwMDAwLCVkMAl8Zm9yY2UgZG91YmxlCisJYmVxbAl1bmZmX2RibAorCW1vdmVsCUNNRFJFRzFCKCVhNiksJWQwCXxnZXQgdGhlIGNvbW1hbmQgd29yZCBhZ2FpbgorCWFuZGlsCSMweDAwN2YwMDAwLCVkMAl8Y2xlYXIgYWxsIGJpdHMgZXhjZXB0IHRoZSBvcGVyYXRpb24KKwljbXBpbAkjMHgwMDI3MDAwMCwlZDAKKwliZXFsCXVuZl9mc2dsCXxmc2dsbXVsCisJY21waWwJIzB4MDAyNDAwMDAsJWQwCisJYmVxbAl1bmZfZnNnbAl8ZnNnbGRpdgorCWJyYQl1bmZfZnBjcgorCit8Cit8IENvbnZlcnQgdG8gcmV0dXJuIGZvcm1hdC4gIFRoZSB2YWx1ZXMgZnJvbSBjbWRyZWczYiBhbmQgdGhlIHJldHVybgorfCB2YWx1ZXMgYXJlOgorfAljbWRyZWczYglyZXR1cm4JICAgICBwcmVjaXNpb24KK3wJLS0tLS0tLS0JLS0tLS0tCSAgICAgLS0tLS0tLS0tCit8CSAgMDAsMDEJCSAgMAkJZXh0Cit8CSAgIDEwCQkgIDEJCXNnbAorfAkgICAxMQkJICAyCQlkYmwKK3wgRm9yY2Ugc2luZ2xlCit8Cit1bmZmX3NnbDoKKwltb3ZlbAkjMSwlZDAJCXxyZXR1cm4gMQorCXJ0cworfAorfCBGb3JjZSBkb3VibGUKK3wKK3VuZmZfZGJsOgorCW1vdmVsCSMyLCVkMAkJfHJldHVybiAyCisJcnRzCit8Cit8IEZvcmNlIGV4dGVuZGVkCit8Cit1bmZfZnNnbDoKKwltb3ZlbAkjMCwlZDAKKwlydHMKK3wKK3wgR2V0IHJvdW5kaW5nIHByZWNpc2lvbiBzZXQgaW4gRlBDUns3OjZ9LgorfAordW5mX2ZwY3I6CisJbW92ZWwJVVNFUl9GUENSKCVhNiksJWQwIHxyb3VuZGluZyBwcmVjaXNpb24gYml0cyBpbiBkMHs3OjZ9CisJYmZleHR1CSVkMHsjMjQ6IzJ9LCVkMAl8bW92ZSB0aGUgcm91bmRpbmcgcHJlYyBiaXRzIHRvIGQwezE6MH0KKwlydHMKK3wKK3wJZ19vcGNscyAtLS0gcHV0IG9wY2xhc3MgaW4gZDB7MjowfQorfAorZ19vcGNsczoKKwlidHN0YgkjRTMsRV9CWVRFKCVhNikKKwliZXFzCW9wY18xYgkJfGlmIHNldCwgZ28gdG8gY21kcmVnMWIKK29wY18zYjoKKwljbHJsCSVkMAkJfGlmIEUzLCBvbmx5IG9wY2xhc3MgMHgwIGlzIHBvc3NpYmxlCisJcnRzCitvcGNfMWI6CisJbW92ZWwJQ01EUkVHMUIoJWE2KSwlZDAKKwliZmV4dHUJJWQweyMwOiMzfSwlZDAJfHNoaWZ0IG9wY2xhc3MgYml0cyBkMHszMToyOX0gdG8gZDB7MjowfQorCXJ0cworfAorfAlnX2RmbXRvdSAtLS0gcHV0IGRlc3RpbmF0aW9uIGZvcm1hdCBpbiBkMHsxOjB9Cit8Cit8CUlmIEUxLCB0aGUgZm9ybWF0IGlzIGZyb20gY21kcmVnMWJ7MTI6MTB9Cit8CUlmIEUzLCB0aGUgZm9ybWF0IGlzIGV4dGVuZGVkLgorfAorfAlEZXN0LiBGbXQuCit8CQlleHRlbmRlZCAgMDEwIC0+IDAwCit8CQlzaW5nbGUgICAgMDAxIC0+IDAxCit8CQlkb3VibGUgICAgMTAxIC0+IDEwCit8CitnX2RmbXRvdToKKwlidHN0YgkjRTMsRV9CWVRFKCVhNikKKwliZXFzCW9wMDExCisJY2xybAklZDAJCXxpZiBFMSwgc2l6ZSBpcyBhbHdheXMgZXh0CisJcnRzCitvcDAxMToKKwltb3ZlbAlDTURSRUcxQiglYTYpLCVkMAorCWJmZXh0dQklZDB7IzM6IzN9LCVkMAl8ZGVzdCBmbXQgZnJvbSBjbWRyZWcxYnsxMjoxMH0KKwljbXBiCSMxLCVkMAkJfGNoZWNrIGZvciBzaW5nbGUKKwlibmVzCW5vdF9zZ2wKKwltb3ZlbAkjMSwlZDAKKwlydHMKK25vdF9zZ2w6CisJY21wYgkjNSwlZDAJCXxjaGVjayBmb3IgZG91YmxlCisJYm5lcwlub3RfZGJsCisJbW92ZWwJIzIsJWQwCisJcnRzCitub3RfZGJsOgorCWNscmwJJWQwCQl8bXVzdCBiZSBleHRlbmRlZAorCXJ0cworCit8Cit8Cit8IEZpbmFsIHJlc3VsdCB0YWJsZSBmb3IgdW5mX3N1Yi4gTm90ZSB0aGF0IHRoZSBuZWdhdGl2ZSBjb3VudGVycGFydHMKK3wgYXJlIHVubmVjZXNzYXJ5IGFzIHVuZl9zdWIgYWx3YXlzIHJldHVybnMgdGhlIHNpZ24gc2VwYXJhdGVseSBmcm9tCit8IHRoZSBleHBvbmVudC4KK3wJCQkJCTsremVybworRVhUX1BaUk86CS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK3wJCQkJCTsremVybworU0dMX1BaUk86CS5sb25nCTB4M2Y4MTAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK3wJCQkJCTsremVybworREJMX1BaUk86CS5sb25nCTB4M2MwMTAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK3wJCQkJCTtzbWFsbGVzdCArZXh0IGRlbm9ybQorRVhUX1BTTUw6CS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAxLDB4MDAwMDAwMDAKK3wJCQkJCTtzbWFsbGVzdCArc2dsIGRlbm9ybQorU0dMX1BTTUw6CS5sb25nCTB4M2Y4MTAwMDAsMHgwMDAwMDEwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK3wJCQkJCTtzbWFsbGVzdCArZGJsIGRlbm9ybQorREJMX1BTTUw6CS5sb25nCTB4M2MwMTAwMDAsMHgwMDAwMDAwMCwweDAwMDAwODAwLDB4MDAwMDAwMDAKK3wKK3wJVU5GX1NVQiAtLS0gdW5kZXJmbG93IHJlc3VsdCBjYWxjdWxhdGlvbgorfAorfCBJbnB1dDoKK3wJZDAJY29udGFpbnMgcm91bmQgcHJlY2lzaW9uCit8CWEwCXBvaW50cyB0byBpbnB1dCBvcGVyYW5kIGluIHRoZSBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQKK3wKK3wgT3V0cHV0OgorfAlhMAlwb2ludHMgdG8gY29ycmVjdCBpbnRlcm5hbCBleHRlbmRlZCBwcmVjaXNpb24gcmVzdWx0LgorfAorCit0Ymx1bmY6CisJLmxvbmcJdUVYVF9STgorCS5sb25nCXVFWFRfUloKKwkubG9uZwl1RVhUX1JNCisJLmxvbmcJdUVYVF9SUAorCS5sb25nCXVTR0xfUk4KKwkubG9uZwl1U0dMX1JaCisJLmxvbmcJdVNHTF9STQorCS5sb25nCXVTR0xfUlAKKwkubG9uZwl1REJMX1JOCisJLmxvbmcJdURCTF9SWgorCS5sb25nCXVEQkxfUk0KKwkubG9uZwl1REJMX1JQCisJLmxvbmcJdURCTF9STgorCS5sb25nCXVEQkxfUloKKwkubG9uZwl1REJMX1JNCisJLmxvbmcJdURCTF9SUAorCisJLmdsb2JhbAl1bmZfc3ViCit1bmZfc3ViOgorCWxzbGwJIzIsJWQwCQl8bW92ZSByb3VuZCBwcmVjaXNpb24gdG8gZDB7MzoyfQorCWJmZXh0dQlGUENSX01PREUoJWE2KXsjMjojMn0sJWQxIHxzZXQgcm91bmQgbW9kZQorCW9ybAklZDEsJWQwCQl8aW5kZXggaXMgZm10Om1vZGUgaW4gZDB7MzowfQorCWxlYWwJdGJsdW5mLCVhMQl8bG9hZCBhMSB3aXRoIHRhYmxlIGFkZHJlc3MKKwltb3ZlbAklYTFAKCVkMDpsOjQpLCVhMQl8dXNlIGQwIGFzIGluZGV4IHRvIHRoZSB0YWJsZQorCWptcAkoJWExKQkJfGdvIHRvIHRoZSBjb3JyZWN0IHJvdXRpbmUKK3wKK3xjYXNlIERFU1RfRk1UID0gRVhUCit8Cit1RVhUX1JOOgorCWxlYWwJRVhUX1BaUk8sJWExCXxhbnN3ZXIgaXMgKy8tIHplcm8KKwlic2V0Ygkjel9iaXQsRlBTUl9DQyglYTYpCisJYnJhCXVzZXRfc2lnbgl8bm93IGdvIHNldCB0aGUgc2lnbgordUVYVF9SWjoKKwlsZWFsCUVYVF9QWlJPLCVhMQl8YW5zd2VyIGlzICsvLSB6ZXJvCisJYnNldGIJI3pfYml0LEZQU1JfQ0MoJWE2KQorCWJyYQl1c2V0X3NpZ24JfG5vdyBnbyBzZXQgdGhlIHNpZ24KK3VFWFRfUk06CisJdHN0YglMT0NBTF9TR04oJWEwKQl8aWYgbmVnYXRpdmUgdW5kZXJmbG93CisJYmVxcwl1ZV9ybV9wb3MKK3VlX3JtX25lZzoKKwlsZWFsCUVYVF9QU01MLCVhMQl8YW5zd2VyIGlzIG5lZ2F0aXZlIHNtYWxsZXN0IGRlbm9ybQorCWJzZXRiCSNuZWdfYml0LEZQU1JfQ0MoJWE2KQorCWJyYQllbmRfdW5mcgordWVfcm1fcG9zOgorCWxlYWwJRVhUX1BaUk8sJWExCXxhbnN3ZXIgaXMgcG9zaXRpdmUgemVybworCWJzZXRiCSN6X2JpdCxGUFNSX0NDKCVhNikKKwlicmEJZW5kX3VuZnIKK3VFWFRfUlA6CisJdHN0YglMT0NBTF9TR04oJWEwKQl8aWYgbmVnYXRpdmUgdW5kZXJmbG93CisJYmVxcwl1ZV9ycF9wb3MKK3VlX3JwX25lZzoKKwlsZWFsCUVYVF9QWlJPLCVhMQl8YW5zd2VyIGlzIG5lZ2F0aXZlIHplcm8KKwlvcmlsCSNuZWd6X21hc2ssVVNFUl9GUFNSKCVhNikKKwlicmEJZW5kX3VuZnIKK3VlX3JwX3BvczoKKwlsZWFsCUVYVF9QU01MLCVhMQl8YW5zd2VyIGlzIHBvc2l0aXZlIHNtYWxsZXN0IGRlbm9ybQorCWJyYQllbmRfdW5mcgorfAorfGNhc2UgREVTVF9GTVQgPSBEQkwKK3wKK3VEQkxfUk46CisJbGVhbAlEQkxfUFpSTywlYTEJfGFuc3dlciBpcyArLy0gemVybworCWJzZXRiCSN6X2JpdCxGUFNSX0NDKCVhNikKKwlicmEJdXNldF9zaWduCit1REJMX1JaOgorCWxlYWwJREJMX1BaUk8sJWExCXxhbnN3ZXIgaXMgKy8tIHplcm8KKwlic2V0Ygkjel9iaXQsRlBTUl9DQyglYTYpCisJYnJhCXVzZXRfc2lnbgl8bm93IGdvIHNldCB0aGUgc2lnbgordURCTF9STToKKwl0c3RiCUxPQ0FMX1NHTiglYTApCXxpZiBuZWdhdGl2ZSBvdmVyZmxvdworCWJlcXMJdWRfcm1fcG9zCit1ZF9ybV9uZWc6CisJbGVhbAlEQkxfUFNNTCwlYTEJfGFuc3dlciBpcyBzbWFsbGVzdCBkZW5vcm1hbGl6ZWQgbmVnYXRpdmUKKwlic2V0YgkjbmVnX2JpdCxGUFNSX0NDKCVhNikKKwlicmEJZW5kX3VuZnIKK3VkX3JtX3BvczoKKwlsZWFsCURCTF9QWlJPLCVhMQl8YW5zd2VyIGlzIHBvc2l0aXZlIHplcm8KKwlic2V0Ygkjel9iaXQsRlBTUl9DQyglYTYpCisJYnJhCWVuZF91bmZyCit1REJMX1JQOgorCXRzdGIJTE9DQUxfU0dOKCVhMCkJfGlmIG5lZ2F0aXZlIG92ZXJmbG93CisJYmVxcwl1ZF9ycF9wb3MKK3VkX3JwX25lZzoKKwlsZWFsCURCTF9QWlJPLCVhMQl8YW5zd2VyIGlzIG5lZ2F0aXZlIHplcm8KKwlvcmlsCSNuZWd6X21hc2ssVVNFUl9GUFNSKCVhNikKKwlicmEJZW5kX3VuZnIKK3VkX3JwX3BvczoKKwlsZWFsCURCTF9QU01MLCVhMQl8YW5zd2VyIGlzIHNtYWxsZXN0IGRlbm9ybWFsaXplZCBuZWdhdGl2ZQorCWJyYQllbmRfdW5mcgorfAorfGNhc2UgREVTVF9GTVQgPSBTR0wKK3wKK3VTR0xfUk46CisJbGVhbAlTR0xfUFpSTywlYTEJfGFuc3dlciBpcyArLy0gemVybworCWJzZXRiCSN6X2JpdCxGUFNSX0NDKCVhNikKKwlicmFzCXVzZXRfc2lnbgordVNHTF9SWjoKKwlsZWFsCVNHTF9QWlJPLCVhMQl8YW5zd2VyIGlzICsvLSB6ZXJvCisJYnNldGIJI3pfYml0LEZQU1JfQ0MoJWE2KQorCWJyYXMJdXNldF9zaWduCit1U0dMX1JNOgorCXRzdGIJTE9DQUxfU0dOKCVhMCkJfGlmIG5lZ2F0aXZlIG92ZXJmbG93CisJYmVxcwl1c19ybV9wb3MKK3VzX3JtX25lZzoKKwlsZWFsCVNHTF9QU01MLCVhMQl8YW5zd2VyIGlzIHNtYWxsZXN0IGRlbm9ybWFsaXplZCBuZWdhdGl2ZQorCWJzZXRiCSNuZWdfYml0LEZQU1JfQ0MoJWE2KQorCWJyYXMJZW5kX3VuZnIKK3VzX3JtX3BvczoKKwlsZWFsCVNHTF9QWlJPLCVhMQl8YW5zd2VyIGlzIHBvc2l0aXZlIHplcm8KKwlic2V0Ygkjel9iaXQsRlBTUl9DQyglYTYpCisJYnJhcwllbmRfdW5mcgordVNHTF9SUDoKKwl0c3RiCUxPQ0FMX1NHTiglYTApCXxpZiBuZWdhdGl2ZSBvdmVyZmxvdworCWJlcXMJdXNfcnBfcG9zCit1c19ycF9uZWc6CisJbGVhbAlTR0xfUFpSTywlYTEJfGFuc3dlciBpcyBuZWdhdGl2ZSB6ZXJvCisJb3JpbAkjbmVnel9tYXNrLFVTRVJfRlBTUiglYTYpCisJYnJhcwllbmRfdW5mcgordXNfcnBfcG9zOgorCWxlYWwJU0dMX1BTTUwsJWExCXxhbnN3ZXIgaXMgc21hbGxlc3QgZGVub3JtYWxpemVkIHBvc2l0aXZlCisJYnJhcwllbmRfdW5mcgorCit1c2V0X3NpZ246CisJdHN0YglMT0NBTF9TR04oJWEwKQl8aWYgbmVnYXRpdmUgb3ZlcmZsb3cKKwliZXFzCWVuZF91bmZyCit1bmVnX3NpZ246CisJYnNldGIJI25lZ19iaXQsRlBTUl9DQyglYTYpCisKK2VuZF91bmZyOgorCW1vdmV3CUxPQ0FMX0VYKCVhMSksTE9DQUxfRVgoJWEwKSB8YmUgY2FyZWZ1bCBub3QgdG8gb3ZlcndyaXRlIHNpZ24KKwltb3ZlbAlMT0NBTF9ISSglYTEpLExPQ0FMX0hJKCVhMCkKKwltb3ZlbAlMT0NBTF9MTyglYTEpLExPQ0FMX0xPKCVhMCkKKwlydHMKK3wKK3wJcmVnX2Rlc3QgLS0tIHdyaXRlIGJ5dGUsIHdvcmQsIG9yIGxvbmcgZGF0YSB0byBEbgorfAorfAorfCBJbnB1dDoKK3wJTF9TQ1IxOiBEYXRhCit8CWQxOiAgICAgZGF0YSBzaXplIGFuZCBkZXN0IHJlZ2lzdGVyIG51bWJlciBmb3JtYXR0ZWQgYXM6Cit8Cit8CTMyCQk1ICAgIDQgICAgIDMgICAgIDIgICAgIDEgICAgIDAKK3wgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wgICAgICAgfCAgICAgICAgMCAgICAgICAgfCAgICBTaXplICAgfCAgRGVzdCBSZWcgIyAgIHwKK3wgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3wKK3wJU2l6ZSBpczoKK3wJCTAgLSBCeXRlCit8CQkxIC0gV29yZAorfAkJMiAtIExvbmcvU2luZ2xlCit8CitwcmVnZHN0OgorCS5sb25nCWJ5dGVfZDAKKwkubG9uZwlieXRlX2QxCisJLmxvbmcJYnl0ZV9kMgorCS5sb25nCWJ5dGVfZDMKKwkubG9uZwlieXRlX2Q0CisJLmxvbmcJYnl0ZV9kNQorCS5sb25nCWJ5dGVfZDYKKwkubG9uZwlieXRlX2Q3CisJLmxvbmcJd29yZF9kMAorCS5sb25nCXdvcmRfZDEKKwkubG9uZwl3b3JkX2QyCisJLmxvbmcJd29yZF9kMworCS5sb25nCXdvcmRfZDQKKwkubG9uZwl3b3JkX2Q1CisJLmxvbmcJd29yZF9kNgorCS5sb25nCXdvcmRfZDcKKwkubG9uZwlsb25nX2QwCisJLmxvbmcJbG9uZ19kMQorCS5sb25nCWxvbmdfZDIKKwkubG9uZwlsb25nX2QzCisJLmxvbmcJbG9uZ19kNAorCS5sb25nCWxvbmdfZDUKKwkubG9uZwlsb25nX2Q2CisJLmxvbmcJbG9uZ19kNworCityZWdfZGVzdDoKKwlsZWFsCXByZWdkc3QsJWEwCisJbW92ZWwJJWEwQCglZDE6bDo0KSwlYTAKKwlqbXAJKCVhMCkKKworYnl0ZV9kMDoKKwltb3ZlYglMX1NDUjEoJWE2KSxVU0VSX0QwKzMoJWE2KQorCXJ0cworYnl0ZV9kMToKKwltb3ZlYglMX1NDUjEoJWE2KSxVU0VSX0QxKzMoJWE2KQorCXJ0cworYnl0ZV9kMjoKKwltb3ZlYglMX1NDUjEoJWE2KSwlZDIKKwlydHMKK2J5dGVfZDM6CisJbW92ZWIJTF9TQ1IxKCVhNiksJWQzCisJcnRzCitieXRlX2Q0OgorCW1vdmViCUxfU0NSMSglYTYpLCVkNAorCXJ0cworYnl0ZV9kNToKKwltb3ZlYglMX1NDUjEoJWE2KSwlZDUKKwlydHMKK2J5dGVfZDY6CisJbW92ZWIJTF9TQ1IxKCVhNiksJWQ2CisJcnRzCitieXRlX2Q3OgorCW1vdmViCUxfU0NSMSglYTYpLCVkNworCXJ0cword29yZF9kMDoKKwltb3ZldwlMX1NDUjEoJWE2KSxVU0VSX0QwKzIoJWE2KQorCXJ0cword29yZF9kMToKKwltb3ZldwlMX1NDUjEoJWE2KSxVU0VSX0QxKzIoJWE2KQorCXJ0cword29yZF9kMjoKKwltb3ZldwlMX1NDUjEoJWE2KSwlZDIKKwlydHMKK3dvcmRfZDM6CisJbW92ZXcJTF9TQ1IxKCVhNiksJWQzCisJcnRzCit3b3JkX2Q0OgorCW1vdmV3CUxfU0NSMSglYTYpLCVkNAorCXJ0cword29yZF9kNToKKwltb3ZldwlMX1NDUjEoJWE2KSwlZDUKKwlydHMKK3dvcmRfZDY6CisJbW92ZXcJTF9TQ1IxKCVhNiksJWQ2CisJcnRzCit3b3JkX2Q3OgorCW1vdmV3CUxfU0NSMSglYTYpLCVkNworCXJ0cworbG9uZ19kMDoKKwltb3ZlbAlMX1NDUjEoJWE2KSxVU0VSX0QwKCVhNikKKwlydHMKK2xvbmdfZDE6CisJbW92ZWwJTF9TQ1IxKCVhNiksVVNFUl9EMSglYTYpCisJcnRzCitsb25nX2QyOgorCW1vdmVsCUxfU0NSMSglYTYpLCVkMgorCXJ0cworbG9uZ19kMzoKKwltb3ZlbAlMX1NDUjEoJWE2KSwlZDMKKwlydHMKK2xvbmdfZDQ6CisJbW92ZWwJTF9TQ1IxKCVhNiksJWQ0CisJcnRzCitsb25nX2Q1OgorCW1vdmVsCUxfU0NSMSglYTYpLCVkNQorCXJ0cworbG9uZ19kNjoKKwltb3ZlbAlMX1NDUjEoJWE2KSwlZDYKKwlydHMKK2xvbmdfZDc6CisJbW92ZWwJTF9TQ1IxKCVhNiksJWQ3CisJcnRzCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAveF9ic3VuLlMgYi9hcmNoL202OGsvZnBzcDA0MC94X2JzdW4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzkyNDdiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAveF9ic3VuLlMKQEAgLTAsMCArMSw0NyBAQAorfAorfAl4X2JzdW4uc2EgMy4zIDcvMS85MQorfAorfAlmcHNwX2JzdW4gLS0tIEZQU1AgaGFuZGxlciBmb3IgYnJhbmNoL3NldCBvbiB1bm9yZGVyZWQgZXhjZXB0aW9uCit8Cit8CUNvcHkgdGhlIFBDIHRvIEZQSUFSIHRvIG1haW50YWluIDg4MS84ODIgY29tcGF0aWJpbGl0eQorfAorfAlUaGUgcmVhbF9ic3VuIGhhbmRsZXIgd2lsbCBuZWVkIHRvIHBlcmZvcm0gZnVydGhlciBjb3JyZWN0aXZlCit8CW1lYXN1cmVzIGFzIG91dGxpbmVkIGluIHRoZSAwNDAgVXNlcidzIE1hbnVhbCBvbiBwYWdlcworfAk5LTQxZiwgc2VjdGlvbiA5LjguMy4KK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworWF9CU1VOOgl8aWRudCAgICAyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCisJfHhyZWYJcmVhbF9ic3VuCisKKwkuZ2xvYmFsCWZwc3BfYnN1bgorZnBzcF9ic3VuOgorfAorCWxpbmsJCSVhNiwjLUxPQ0FMX1NJWkUKKwlmc2F2ZQkJLSglYTcpCisJbW92ZW1sCQklZDAtJWQxLyVhMC0lYTEsVVNFUl9EQSglYTYpCisJZm1vdmVteAklZnAwLSVmcDMsVVNFUl9GUDAoJWE2KQorCWZtb3ZlbWwJJWZwY3IvJWZwc3IvJWZwaWFyLFVTRVJfRlBDUiglYTYpCisKK3wKKwltb3ZlbAkJRVhDX1BDKCVhNiksVVNFUl9GUElBUiglYTYpCit8CisJbW92ZW1sCQlVU0VSX0RBKCVhNiksJWQwLSVkMS8lYTAtJWExCisJZm1vdmVteAlVU0VSX0ZQMCglYTYpLCVmcDAtJWZwMworCWZtb3ZlbWwJVVNFUl9GUENSKCVhNiksJWZwY3IvJWZwc3IvJWZwaWFyCisJZnJlc3RvcmUJKCVhNykrCisJdW5sawkJJWE2CisJYnJhbAkJcmVhbF9ic3VuCit8CisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAveF9mbGluZS5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAveF9mbGluZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MTc3MTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC94X2ZsaW5lLlMKQEAgLTAsMCArMSwxMDQgQEAKK3wKK3wJeF9mbGluZS5zYSAzLjMgMS8xMC85MQorfAorfAlmcHNwX2ZsaW5lIC0tLSBGUFNQIGhhbmRsZXIgZm9yIGZsaW5lIGV4Y2VwdGlvbgorfAorfAlGaXJzdCBkZXRlcm1pbmUgaWYgdGhlIGV4Y2VwdGlvbiBpcyBvbmUgb2YgdGhlIHVuaW1wbGVtZW50ZWQKK3wJZmxvYXRpbmcgcG9pbnQgaW5zdHJ1Y3Rpb25zLiAgSWYgc28sIGxldCBmcHNwX3VuaW1wIGhhbmRsZSBpdC4KK3wJTmV4dCwgZGV0ZXJtaW5lIGlmIHRoZSBpbnN0cnVjdGlvbiBpcyBhbiBmbW92ZWNyIHdpdGggYSBub24temVybworfAk8ZWE+IGZpZWxkLiAgSWYgc28sIGhhbmRsZSBoZXJlIGFuZCByZXR1cm4uICBPdGhlcndpc2UsIGl0Cit8CW11c3QgYmUgYSByZWFsIEYtbGluZSBleGNlcHRpb24uCit8CisKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK1hfRkxJTkU6CXxpZG50ICAgIDIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKwl8c2VjdGlvbgk4CisKKyNpbmNsdWRlICJmcHNwLmgiCisKKwl8eHJlZglyZWFsX2ZsaW5lCisJfHhyZWYJZnBzcF91bmltcAorCXx4cmVmCXVuaV8yCisJfHhyZWYJbWVtX3JlYWQKKwl8eHJlZglmcHNwX2ZtdF9lcnJvcgorCisJLmdsb2JhbAlmcHNwX2ZsaW5lCitmcHNwX2ZsaW5lOgorfAorfAljaGVjayBmb3IgdW5pbXBsZW1lbnRlZCB2ZWN0b3IgZmlyc3QuICBVc2UgRVhDX1ZFQy00IGJlY2F1c2UKK3wJdGhlIGVxdWF0ZSBpcyB2YWxpZCBvbmx5IGFmdGVyIGEgJ2xpbmsgYTYnIGhhcyBwdXNoZWQgb25lIG1vcmUKK3wJbG9uZyBvbnRvIHRoZSBzdGFjay4KK3wKKwljbXB3CSNVTklNUF9WRUMsRVhDX1ZFQy00KCVhNykKKwliZXFsCWZwc3BfdW5pbXAKKworfAorfAlmbW92ZWNyIHdpdGggbm9uLXplcm8gPGVhPiBoYW5kbGluZyBoZXJlCit8CisJc3VibAkjNCwlYTcJCXw0IGFjY291bnRzIGZvciAyLXdvcmQgZGlmZmVyZW5jZQorfAkJCQk7YmV0d2VlbiBzaXggd29yZCBmcmFtZSAodW5pbXApIGFuZAorfAkJCQk7Zm91ciB3b3JkIGZyYW1lCisJbGluawklYTYsIy1MT0NBTF9TSVpFCisJZnNhdmUJLSglYTcpCisJbW92ZW1sCSVkMC0lZDEvJWEwLSVhMSxVU0VSX0RBKCVhNikKKwltb3ZlYWwJRVhDX1BDKzQoJWE2KSwlYTAJfGdldCBhZGRyZXNzIG9mIGZsaW5lIGluc3RydWN0aW9uCisJbGVhbAlMX1NDUjEoJWE2KSwlYTEJfHVzZSBMX1NDUjEgYXMgc2NyYXRjaAorCW1vdmVsCSM0LCVkMAorCWFkZGwJIzQsJWE2CQl8dG8gb2Zmc2V0IHRoZSBzdWIubCAjNCxhNyBhYm92ZSBzbyB0aGF0Cit8CQkJCTthNiBjYW4gcG9pbnQgY29ycmVjdGx5IHRvIHRoZSBzdGFjayBmcmFtZQorfAkJCQk7YmVmb3JlIGJyYW5jaGluZyB0byBtZW1fcmVhZAorCWJzcmwJbWVtX3JlYWQKKwlzdWJsCSM0LCVhNgorCW1vdmVsCUxfU0NSMSglYTYpLCVkMAl8ZDAgY29udGFpbnMgdGhlIGZsaW5lIGFuZCBjb21tYW5kIHdvcmQKKwliZmV4dHUJJWQweyM0OiMzfSwlZDEJfGV4dHJhY3QgY29wcm9jZXNzb3IgaWQKKwljbXBpYgkjMSwlZDEJCXxjaGVjayBpZiBjcGlkPTEKKwlibmUJbm90X212Y3IJfGV4aXQgaWYgbm90CisJYmZleHR1CSVkMHsjMTY6IzZ9LCVkMQorCWNtcGliCSMweDE3LCVkMQkJfGNoZWNrIGlmIGl0IGlzIGFuIEZNT1ZFQ1IgZW5jb2RpbmcKKwlibmUJbm90X212Y3IKK3wJCQkJO2lmIGFuIEZNT1ZFQ1IgaW5zdHJ1Y3Rpb24sIGZpeCBzdGFjaworfAkJCQk7YW5kIGdvIHRvIEZQU1BfVU5JTVAKK2ZpeF9zdGFjazoKKwljbXBpYgkjVkVSXzQwLCglYTcpCXx0ZXN0IGZvciBvcmlnIHVuaW1wIGZyYW1lCisJYm5lcwlja19yZXYKKwlzdWJsCSNVTklNUF80MF9TSVpFLTQsJWE3IHxlbXVsYXRlIGFuIG9yaWcgZnNhdmUKKwltb3ZlYgkjVkVSXzQwLCglYTcpCisJbW92ZWIJI1VOSU1QXzQwX1NJWkUtNCwxKCVhNykKKwljbHJ3CTIoJWE3KQorCWJyYXMJZml4X2NvbgorY2tfcmV2OgorCWNtcGliCSNWRVJfNDEsKCVhNykJfHRlc3QgZm9yIHJldiB1bmltcCBmcmFtZQorCWJuZWwJZnBzcF9mbXRfZXJyb3IJfGlmIG5vdCAkNDAgb3IgJDQxLCBleGl0IHdpdGggZXJyb3IKKwlzdWJsCSNVTklNUF80MV9TSVpFLTQsJWE3IHxlbXVsYXRlIGEgcmV2IGZzYXZlCisJbW92ZWIJI1ZFUl80MSwoJWE3KQorCW1vdmViCSNVTklNUF80MV9TSVpFLTQsMSglYTcpCisJY2xydwkyKCVhNykKK2ZpeF9jb246CisJbW92ZXcJRVhDX1NSKzQoJWE2KSxFWENfU1IoJWE2KSB8bW92ZSBzdGFja2VkIHNyIHRvIG5ldyBwb3NpdGlvbgorCW1vdmVsCUVYQ19QQys0KCVhNiksRVhDX1BDKCVhNikgfG1vdmUgc3RhY2tlZCBwYyB0byBuZXcgcG9zaXRpb24KKwlmbW92ZWwJRVhDX1BDKCVhNiksJUZQSUFSIHxwb2ludCBGUElBUiB0byBmbGluZSBpbnN0CisJbW92ZWwJIzQsJWQxCisJYWRkbAklZDEsRVhDX1BDKCVhNikJfGluY3JlbWVudCBzdGFja2VkIHBjIHZhbHVlIHRvIG5leHQgaW5zdAorCW1vdmV3CSMweDIwMmMsRVhDX1ZFQyglYTYpIHxyZWZvcm1hdCB2ZWN0b3IgdG8gdW5pbXAKKwljbHJsCUVYQ19FQSglYTYpCXxjbGVhciB0aGUgRVhDX0VBIGZpZWxkCisJbW92ZXcJJWQwLENNRFJFRzFCKCVhNikgfG1vdmUgdGhlIGxvd2VyIHdvcmQgaW50byBDTURSRUcxQgorCWNscmwJRV9CWVRFKCVhNikKKwlic2V0YgkjVUZMQUcsVF9CWVRFKCVhNikKKwltb3ZlbWwJVVNFUl9EQSglYTYpLCVkMC0lZDEvJWEwLSVhMSB8cmVzdG9yZSBkYXRhIHJlZ2lzdGVycworCWJyYWwJdW5pXzIKKworbm90X212Y3I6CisJbW92ZW1sCVVTRVJfREEoJWE2KSwlZDAtJWQxLyVhMC0lYTEgfHJlc3RvcmUgZGF0YSByZWdpc3RlcnMKKwlmcmVzdG9yZSAoJWE3KSsKKwl1bmxrCSVhNgorCWFkZGwJIzQsJWE3CisJYnJhbAlyZWFsX2ZsaW5lCisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC94X29wZXJyLlMgYi9hcmNoL202OGsvZnBzcDA0MC94X29wZXJyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBmNTRiYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9mcHNwMDQwL3hfb3BlcnIuUwpAQCAtMCwwICsxLDM1NiBAQAorfAorfAl4X29wZXJyLnNhIDMuNSA3LzEvOTEKK3wKK3wJZnBzcF9vcGVyciAtLS0gRlBTUCBoYW5kbGVyIGZvciBvcGVyYW5kIGVycm9yIGV4Y2VwdGlvbgorfAorfAlTZWUgNjgwNDAgVXNlcidzIE1hbnVhbCBwcC4gOS00NGYKK3wKK3wgTm90ZSAxOiBGb3IgdHJhcCBkaXNhYmxlZCAwNDAgZG9lcyB0aGUgZm9sbG93aW5nOgorfCBJZiB0aGUgZGVzdCBpcyBhIGZwIHJlZywgdGhlbiBhbiBleHRlbmRlZCBwcmVjaXNpb24gbm9uX3NpZ25hbGluZworfCBOQU4gaXMgc3RvcmVkIGluIHRoZSBkZXN0IHJlZy4gIElmIHRoZSBkZXN0IGZvcm1hdCBpcyBiLCB3LCBvciBsIGFuZAorfCB0aGUgc291cmNlIG9wIGlzIGEgTkFOLCB0aGVuIGdhcmJhZ2UgaXMgc3RvcmVkIGFzIHRoZSByZXN1bHQgKGFjdHVhbGx5Cit8IHRoZSB1cHBlciAzMiBiaXRzIG9mIHRoZSBtYW50aXNzYSBhcmUgc2VudCB0byB0aGUgaW50ZWdlciB1bml0KS4gSWYKK3wgdGhlIGRlc3QgZm9ybWF0IGlzIGludGVnZXIgKGIsIHcsIGwpIGFuZCB0aGUgb3BlcnIgaXMgY2F1c2VkIGJ5Cit8IGludGVnZXIgb3ZlcmZsb3csIG9yIHRoZSBzb3VyY2Ugb3AgaXMgaW5mLCB0aGVuIHRoZSByZXN1bHQgc3RvcmVkIGlzCit8IGdhcmJhZ2UuCit8IFRoZXJlIGFyZSB0aHJlZSBjYXNlcyBpbiB3aGljaCBvcGVyciBpcyBpbmNvcnJlY3RseSBzaWduYWxlZCBvbiB0aGUKK3wgMDQwLiAgVGhpcyBvY2N1cnMgZm9yIG1vdmVfb3V0IG9mIGZvcm1hdCBiLCB3LCBvciBsIGZvciB0aGUgbGFyZ2VzdAorfCBuZWdhdGl2ZSBpbnRlZ2VyICgtMl43IGZvciBiLCAtMl4xNSBmb3IgdywgLTJeMzEgZm9yIGwpLgorfAorfAkgIE9uIG9wY2xhc3MgPSAwMTEgZm1vdmUuKGIsdyxsKSB0aGF0IGNhdXNlcyBhIGNvbnZlcnNpb24KK3wJICBvdmVyZmxvdyAtPiBPUEVSUiwgdGhlIGV4cG9uZW50IGluIHdidGUgKGFuZCBmcHRlKSBpczoKK3wJCWJ5dGUgICAgNTYgLSAoNjIgLSBleHApCit8CQl3b3JkICAgIDQ4IC0gKDYyIC0gZXhwKQorfAkJbG9uZyAgICAzMiAtICg2MiAtIGV4cCkKK3wKK3wJCQl3aGVyZSBleHAgPSAodHJ1ZSBleHApIC0gMQorfAorfCAgU28sIHdidGVtcCBhbmQgZnB0ZW1wIHdpbGwgY29udGFpbiB0aGUgZm9sbG93aW5nIG9uIGVycm9uZW91c2x5Cit8CSAgc2lnbmFsbGVkIG9wZXJyOgorfAkJCWZwdHMgPSAxCit8CQkJZnB0ZSA9ICQ0MDAwICAoMTUgYml0IGV4dGVybmFsbHkpCit8CQlieXRlCWZwdG0gPSAkZmZmZmZmZmYgZmZmZmZmODAKK3wJCXdvcmQJZnB0bSA9ICRmZmZmZmZmZiBmZmZmODAwMAorfAkJbG9uZwlmcHRtID0gJGZmZmZmZmZmIDgwMDAwMDAwCit8Cit8IE5vdGUgMjogRm9yIHRyYXAgZW5hYmxlZCAwNDAgZG9lcyB0aGUgZm9sbG93aW5nOgorfCBJZiB0aGUgaW5zdCBpcyBtb3ZlX291dCwgdGhlbiBzYW1lIGFzIE5vdGUgMS4KK3wgSWYgdGhlIGluc3QgaXMgbm90IG1vdmVfb3V0LCB0aGUgZGVzdCBpcyBub3QgbW9kaWZpZWQuCit8IFRoZSBleGNlcHRpb25hbCBvcGVyYW5kIGlzIG5vdCBkZWZpbmVkIGZvciBpbnRlZ2VyIG92ZXJmbG93Cit8IGR1cmluZyBhIG1vdmVfb3V0LgorfAorCit8CQlDb3B5cmlnaHQgKEMpIE1vdG9yb2xhLCBJbmMuIDE5OTAKK3wJCQlBbGwgUmlnaHRzIFJlc2VydmVkCit8Cit8CVRISVMgSVMgVU5QVUJMSVNIRUQgUFJPUFJJRVRBUlkgU09VUkNFIENPREUgT0YgTU9UT1JPTEEKK3wJVGhlIGNvcHlyaWdodCBub3RpY2UgYWJvdmUgZG9lcyBub3QgZXZpZGVuY2UgYW55Cit8CWFjdHVhbCBvciBpbnRlbmRlZCBwdWJsaWNhdGlvbiBvZiBzdWNoIHNvdXJjZSBjb2RlLgorCitYX09QRVJSOgl8aWRudCAgICAyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCisJfHhyZWYJbWVtX3dyaXRlCisJfHhyZWYJcmVhbF9vcGVycgorCXx4cmVmCXJlYWxfaW5leAorCXx4cmVmCWdldF9mbGluZQorCXx4cmVmCWZwc3BfZG9uZQorCXx4cmVmCXJlZ19kZXN0CisKKwkuZ2xvYmFsCWZwc3Bfb3BlcnIKK2Zwc3Bfb3BlcnI6Cit8CisJbGluawkJJWE2LCMtTE9DQUxfU0laRQorCWZzYXZlCQktKCVhNykKKwltb3ZlbWwJCSVkMC0lZDEvJWEwLSVhMSxVU0VSX0RBKCVhNikKKwlmbW92ZW14CSVmcDAtJWZwMyxVU0VSX0ZQMCglYTYpCisJZm1vdmVtbAklZnBjci8lZnBzci8lZnBpYXIsVVNFUl9GUENSKCVhNikKKworfAorfCBDaGVjayBpZiB0aGlzIGlzIGFuIG9wY2xhc3MgMyBpbnN0cnVjdGlvbi4KK3wgIElmIHNvLCBmYWxsIHRocm91Z2gsIGVsc2UgYnJhbmNoIHRvIG9wZXJyX2VuZAorfAorCWJ0c3RiCSNURkxBRyxUX0JZVEUoJWE2KQorCWJlcXMJb3BlcnJfZW5kCisKK3wKK3wgSWYgdGhlIGRlc3RpbmF0aW9uIHNpemUgaXMgQixXLG9yIEwsIHRoZSBvcGVyciBtdXN0IGJlCit8IGhhbmRsZWQgaGVyZS4KK3wKKwltb3ZlbAlDTURSRUcxQiglYTYpLCVkMAorCWJmZXh0dQklZDB7IzM6IzN9LCVkMAl8MD1sb25nLCA0PXdvcmQsIDY9Ynl0ZQorCWNtcGliCSMwLCVkMAkJfGRldGVybWluZSBzaXplOyBjaGVjayBsb25nCisJYmVxCW9wZXJyX2xvbmcKKwljbXBpYgkjNCwlZDAJCXxjaGVjayB3b3JkCisJYmVxCW9wZXJyX3dvcmQKKwljbXBpYgkjNiwlZDAJCXxjaGVjayBieXRlCisJYmVxCW9wZXJyX2J5dGUKKworfAorfCBUaGUgc2l6ZSBpcyBub3QgQixXLG9yIEwsIHNvIHRoZSBvcGVyciBpcyBoYW5kbGVkIGJ5IHRoZQorfCBrZXJuZWwgaGFuZGxlci4gIFNldCB0aGUgb3BlcnIgYml0cyBhbmQgY2xlYW4gdXAsIGxlYXZpbmcKK3wgb25seSB0aGUgaW50ZWdlciBleGNlcHRpb24gZnJhbWUgb24gdGhlIHN0YWNrLCBhbmQgdGhlCit8IGZwdSBpbiB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uYWwgc3RhdGUuCit8CitvcGVycl9lbmQ6CisJYnNldGIJCSNvcGVycl9iaXQsRlBTUl9FWENFUFQoJWE2KQorCWJzZXRiCQkjYWlvcF9iaXQsRlBTUl9BRVhDRVBUKCVhNikKKworCW1vdmVtbAkJVVNFUl9EQSglYTYpLCVkMC0lZDEvJWEwLSVhMQorCWZtb3ZlbXgJVVNFUl9GUDAoJWE2KSwlZnAwLSVmcDMKKwlmbW92ZW1sCVVTRVJfRlBDUiglYTYpLCVmcGNyLyVmcHNyLyVmcGlhcgorCWZyZXN0b3JlCSglYTcpKworCXVubGsJCSVhNgorCWJyYWwJCXJlYWxfb3BlcnIKKworb3BlcnJfbG9uZzoKKwltb3ZlcWwJIzQsJWQxCQl8d3JpdGUgc2l6ZSB0byBkMQorCW1vdmViCVNUQUcoJWE2KSwlZDAJfHRlc3Qgc3RhZyBmb3IgbmFuCisJYW5kaWIJIzB4ZTAsJWQwCQl8Y2xyIGFsbCBidXQgdGFnCisJY21waWIJIzB4NjAsJWQwCQl8Y2hlY2sgZm9yIG5hbgorCWJlcQlvcGVycl9uYW4KKwljbXBpbAkjMHg4MDAwMDAwMCxGUFRFTVBfTE8oJWE2KSB8dGVzdCBpZiBscyBsd29yZCBpcyBzcGVjaWFsCisJYm5lcwljaGtsZXJyCQl8aWYgbm90IGVxdWFsLCBjaGVjayBmb3IgaW5jb3JyZWN0IG9wZXJyCisJYnNyCWNoZWNrX3VwcGVyCXxjaGVjayBpZiBleHAgYW5kIG1zIG1hbnQgYXJlIHNwZWNpYWwKKwl0c3RsCSVkMAorCWJuZXMJY2hrbGVycgkJfGlmIGQwIGlzIHRydWUsIGNoZWNrIGZvciBpbmNvcnJlY3Qgb3BlcnIKKwltb3ZlbAkjMHg4MDAwMDAwMCwlZDAJfHN0b3JlIHNwZWNpYWwgY2FzZSByZXN1bHQKKwlic3IJb3BlcnJfc3RvcmUKKwlicmEJbm90X2VuYWJsZWQJfGNsZWFuIGFuZCBleGl0Cit8Cit8CUNIRUNLIEZPUiBJTkNPUlJFQ1RMWSBHRU5FUkFURUQgT1BFUlIgRVhDRVBUSU9OIEhFUkUKK3wKK2Noa2xlcnI6CisJbW92ZXcJRlBURU1QX0VYKCVhNiksJWQwCisJYW5kdwkjMHg3RkZGLCVkMAl8aWdub3JlIHNpZ24gYml0CisJY21wdwkjMHgzRkZFLCVkMAl8dGhpcyBpcyB0aGUgb25seSBwb3NzaWJsZSBleHBvbmVudCB2YWx1ZQorCWJuZXMJY2hrbGVycjIKK2ZpeGxvbmc6CisJbW92ZWwJRlBURU1QX0xPKCVhNiksJWQwCisJYnNyCW9wZXJyX3N0b3JlCisJYnJhCW5vdF9lbmFibGVkCitjaGtsZXJyMjoKKwltb3ZldwlGUFRFTVBfRVgoJWE2KSwlZDAKKwlhbmR3CSMweDdGRkYsJWQwCXxpZ25vcmUgc2lnbiBiaXQKKwljbXB3CSMweDQwMDAsJWQwCisJYmNjCXN0b3JlX21heAl8ZXhwb25lbnQgb3V0IG9mIHJhbmdlCisKKwltb3ZlbAlGUFRFTVBfTE8oJWE2KSwlZDAKKwlhbmRsCSMweDdGRkYwMDAwLCVkMAl8bG9vayBmb3IgYWxsIDEncyBvbiBiaXRzIDMwLTE2CisJY21wbAkjMHg3RkZGMDAwMCwlZDAKKwliZXFzCWZpeGxvbmcKKworCXRzdGwJRlBURU1QX0xPKCVhNikKKwlicGxzCWNoa2xlcG9zCisJY21wbAkjMHhGRkZGRkZGRixGUFRFTVBfSEkoJWE2KQorCWJlcXMJZml4bG9uZworCWJyYQlzdG9yZV9tYXgKK2Noa2xlcG9zOgorCXRzdGwJRlBURU1QX0hJKCVhNikKKwliZXFzCWZpeGxvbmcKKwlicmEJc3RvcmVfbWF4CisKK29wZXJyX3dvcmQ6CisJbW92ZXFsCSMyLCVkMQkJfHdyaXRlIHNpemUgdG8gZDEKKwltb3ZlYglTVEFHKCVhNiksJWQwCXx0ZXN0IHN0YWcgZm9yIG5hbgorCWFuZGliCSMweGUwLCVkMAkJfGNsciBhbGwgYnV0IHRhZworCWNtcGliCSMweDYwLCVkMAkJfGNoZWNrIGZvciBuYW4KKwliZXEJb3BlcnJfbmFuCisJY21waWwJIzB4ZmZmZjgwMDAsRlBURU1QX0xPKCVhNikgfHRlc3QgaWYgbHMgbHdvcmQgaXMgc3BlY2lhbAorCWJuZXMJY2hrd2VycgkJfGlmIG5vdCBlcXVhbCwgY2hlY2sgZm9yIGluY29ycmVjdCBvcGVycgorCWJzcgljaGVja191cHBlcgl8Y2hlY2sgaWYgZXhwIGFuZCBtcyBtYW50IGFyZSBzcGVjaWFsCisJdHN0bAklZDAKKwlibmVzCWNoa3dlcnIJCXxpZiBkMCBpcyB0cnVlLCBjaGVjayBmb3IgaW5jb3JyZWN0IG9wZXJyCisJbW92ZWwJIzB4ODAwMDAwMDAsJWQwCXxzdG9yZSBzcGVjaWFsIGNhc2UgcmVzdWx0CisJYnNyCW9wZXJyX3N0b3JlCisJYnJhCW5vdF9lbmFibGVkCXxjbGVhbiBhbmQgZXhpdAorfAorfAlDSEVDSyBGT1IgSU5DT1JSRUNUTFkgR0VORVJBVEVEIE9QRVJSIEVYQ0VQVElPTiBIRVJFCit8CitjaGt3ZXJyOgorCW1vdmV3CUZQVEVNUF9FWCglYTYpLCVkMAorCWFuZHcJIzB4N0ZGRiwlZDAJfGlnbm9yZSBzaWduIGJpdAorCWNtcHcJIzB4M0ZGRSwlZDAJfHRoaXMgaXMgdGhlIG9ubHkgcG9zc2libGUgZXhwb25lbnQgdmFsdWUKKwlibmVzCXN0b3JlX21heAorCW1vdmVsCUZQVEVNUF9MTyglYTYpLCVkMAorCXN3YXAJJWQwCisJYnNyCW9wZXJyX3N0b3JlCisJYnJhCW5vdF9lbmFibGVkCisKK29wZXJyX2J5dGU6CisJbW92ZXFsCSMxLCVkMQkJfHdyaXRlIHNpemUgdG8gZDEKKwltb3ZlYglTVEFHKCVhNiksJWQwCXx0ZXN0IHN0YWcgZm9yIG5hbgorCWFuZGliCSMweGUwLCVkMAkJfGNsciBhbGwgYnV0IHRhZworCWNtcGliCSMweDYwLCVkMAkJfGNoZWNrIGZvciBuYW4KKwliZXFzCW9wZXJyX25hbgorCWNtcGlsCSMweGZmZmZmZjgwLEZQVEVNUF9MTyglYTYpIHx0ZXN0IGlmIGxzIGx3b3JkIGlzIHNwZWNpYWwKKwlibmVzCWNoa2JlcnIJCXxpZiBub3QgZXF1YWwsIGNoZWNrIGZvciBpbmNvcnJlY3Qgb3BlcnIKKwlic3IJY2hlY2tfdXBwZXIJfGNoZWNrIGlmIGV4cCBhbmQgbXMgbWFudCBhcmUgc3BlY2lhbAorCXRzdGwJJWQwCisJYm5lcwljaGtiZXJyCQl8aWYgZDAgaXMgdHJ1ZSwgY2hlY2sgZm9yIGluY29ycmVjdCBvcGVycgorCW1vdmVsCSMweDgwMDAwMDAwLCVkMAl8c3RvcmUgc3BlY2lhbCBjYXNlIHJlc3VsdAorCWJzcglvcGVycl9zdG9yZQorCWJyYQlub3RfZW5hYmxlZAl8Y2xlYW4gYW5kIGV4aXQKK3wKK3wJQ0hFQ0sgRk9SIElOQ09SUkVDVExZIEdFTkVSQVRFRCBPUEVSUiBFWENFUFRJT04gSEVSRQorfAorY2hrYmVycjoKKwltb3ZldwlGUFRFTVBfRVgoJWE2KSwlZDAKKwlhbmR3CSMweDdGRkYsJWQwCXxpZ25vcmUgc2lnbiBiaXQKKwljbXB3CSMweDNGRkUsJWQwCXx0aGlzIGlzIHRoZSBvbmx5IHBvc3NpYmxlIGV4cG9uZW50IHZhbHVlCisJYm5lcwlzdG9yZV9tYXgKKwltb3ZlbAlGUFRFTVBfTE8oJWE2KSwlZDAKKwlhc2xsCSM4LCVkMAorCXN3YXAJJWQwCisJYnNyCW9wZXJyX3N0b3JlCisJYnJhCW5vdF9lbmFibGVkCisKK3wKK3wgVGhpcyBvcGVyciBjb25kaXRpb24gaXMgbm90IG9mIHRoZSBzcGVjaWFsIGNhc2UuICBTZXQgb3BlcnIKK3wgYW5kIGFpb3AgYW5kIHdyaXRlIHRoZSBwb3J0aW9uIG9mIHRoZSBuYW4gdG8gbWVtb3J5IGZvciB0aGUKK3wgZ2l2ZW4gc2l6ZS4KK3wKK29wZXJyX25hbjoKKwlvcmwJI29wYW9wX21hc2ssVVNFUl9GUFNSKCVhNikgfHNldCBvcGVyciAmIGFpb3AKKworCW1vdmVsCUVURU1QX0hJKCVhNiksJWQwCXxvdXRwdXQgd2lsbCBiZSBmcm9tIHVwcGVyIDMyIGJpdHMKKwlic3IJb3BlcnJfc3RvcmUKKwlicmEJZW5kX29wZXJyCit8Cit8IFN0b3JlX21heCBsb2FkcyB0aGUgbWF4IHBvcyBvciBuZWdhdGl2ZSBmb3IgdGhlIHNpemUsIHNldHMKK3wgdGhlIG9wZXJyIGFuZCBhaW9wIGJpdHMsIGFuZCBjbGVhcnMgaW5leCBhbmQgYWluZXgsIGluY29ycmVjdGx5Cit8IHNldCBieSB0aGUgMDQwLgorfAorc3RvcmVfbWF4OgorCW9ybAkjb3Bhb3BfbWFzayxVU0VSX0ZQU1IoJWE2KSB8c2V0IG9wZXJyICYgYWlvcAorCWJjbHJiCSNpbmV4Ml9iaXQsRlBTUl9FWENFUFQoJWE2KQorCWJjbHJiCSNhaW5leF9iaXQsRlBTUl9BRVhDRVBUKCVhNikKKwlmbW92ZWwJIzAsJUZQU1IKKworCXRzdHcJRlBURU1QX0VYKCVhNikJfGNoZWNrIHNpZ24KKwlibHRzCWxvYWRfbmVnCisJbW92ZWwJIzB4N2ZmZmZmZmYsJWQwCisJYnNyCW9wZXJyX3N0b3JlCisJYnJhCWVuZF9vcGVycgorbG9hZF9uZWc6CisJbW92ZWwJIzB4ODAwMDAwMDAsJWQwCisJYnNyCW9wZXJyX3N0b3JlCisJYnJhCWVuZF9vcGVycgorCit8Cit8IFRoaXMgcm91dGluZSBzdG9yZXMgdGhlIGRhdGEgaW4gZDAsIGZvciB0aGUgZ2l2ZW4gc2l6ZSBpbiBkMSwKK3wgdG8gbWVtb3J5IG9yIGRhdGEgcmVnaXN0ZXIgYXMgcmVxdWlyZWQuICBBIHJlYWQgb2YgdGhlIGZsaW5lCit8IGlzIHJlcXVpcmVkIHRvIGRldGVybWluZSB0aGUgZGVzdGluYXRpb24uCit8CitvcGVycl9zdG9yZToKKwltb3ZlbAklZDAsTF9TQ1IxKCVhNikJfG1vdmUgd3JpdGUgZGF0YSB0byBMX1NDUjEKKwltb3ZlbAklZDEsLSglYTcpCXxzYXZlIHJlZ2lzdGVyIHNpemUKKwlic3JsCWdldF9mbGluZQl8ZmxpbmUgcmV0dXJuZWQgaW4gZDAKKwltb3ZlbAkoJWE3KSssJWQxCisJYmZ0c3QJJWQweyMyNjojM30JCXxpZiBtb2RlIGlzIHplcm8sIGRlc3QgaXMgRG4KKwlibmVzCWRlc3RfbWVtCit8Cit8IERlc3RpbmF0aW9uIGlzIERuLiAgR2V0IHJlZ2lzdGVyIG51bWJlciBmcm9tIGQwLiBEYXRhIGlzIG9uCit8IHRoZSBzdGFjayBhdCAoYTcpLiBEMSBoYXMgc2l6ZTogMT1ieXRlLDI9d29yZCw0PWxvbmcvc2luZ2xlCit8CisJYW5kaWwJIzcsJWQwCQl8aXNvbGF0ZSByZWdpc3RlciBudW1iZXIKKwljbXBpbAkjNCwlZDEKKwliZXFzCW9wX2xvbmcJCXx0aGUgbW9zdCBmcmVxdWVudCBjYXNlCisJY21waWwJIzIsJWQxCisJYm5lcwlvcF9jb24KKwlvcmwJIzgsJWQwCisJYnJhcwlvcF9jb24KK29wX2xvbmc6CisJb3JsCSMweDEwLCVkMAorb3BfY29uOgorCW1vdmVsCSVkMCwlZDEJCXxmb3JtYXQgc2l6ZTpyZWcgZm9yIHJlZ19kZXN0CisJYnJhbAlyZWdfZGVzdAl8Y2FsbCB0byByZWdfZGVzdCByZXR1cm5zIHRvIGNhbGxlcgorfAkJCQk7b2Ygb3BlcnJfc3RvcmUKK3wKK3wgRGVzdGluYXRpb24gaXMgbWVtb3J5LiAgR2V0IDxlYT4gZnJvbSBpbnRlZ2VyIGV4Y2VwdGlvbiBmcmFtZQorfCBhbmQgY2FsbCBtZW1fd3JpdGUuCit8CitkZXN0X21lbToKKwlsZWFsCUxfU0NSMSglYTYpLCVhMAl8cHV0IHB0ciB0byB3cml0ZSBkYXRhIGluIGEwCisJbW92ZWwJRVhDX0VBKCVhNiksJWExCXxwdXQgdXNlciBkZXN0aW5hdGlvbiBhZGRyZXNzIGluIGExCisJbW92ZWwJJWQxLCVkMAkJfHB1dCBzaXplIGluIGQwCisJYnNybAltZW1fd3JpdGUKKwlydHMKK3wKK3wgQ2hlY2sgdGhlIGV4cG9uZW50IGZvciAkYzAwMCBhbmQgdGhlIHVwcGVyIDMyIGJpdHMgb2YgdGhlCit8IG1hbnRpc3NhIGZvciAkZmZmZmZmZmYuICBJZiBib3RoIGFyZSB0cnVlLCByZXR1cm4gZDAgY2xyCit8IGFuZCBzdG9yZSB0aGUgbG93ZXIgbiBiaXRzIG9mIHRoZSBsZWFzdCBsd29yZCBvZiBGUFRFTVAKK3wgdG8gZDAgZm9yIHdyaXRlIG91dC4gIElmIG5vdCwgaXQgaXMgYSByZWFsIG9wZXJyLCBhbmQgc2V0IGQwLgorfAorY2hlY2tfdXBwZXI6CisJY21waWwJIzB4ZmZmZmZmZmYsRlBURU1QX0hJKCVhNikgfGNoZWNrIGlmIGZpcnN0IGJ5dGUgaXMgYWxsIDEncworCWJuZXMJdHJ1ZV9vcGVycgl8aWYgbm90IGFsbCAxJ3MgdGhlbiB3YXMgdHJ1ZSBvcGVycgorCWNtcGl3CSMweGMwMDAsRlBURU1QX0VYKCVhNikgfGNoZWNrIGlmIGluY29ycmVjdGx5IHNpZ25hbGxlZAorCWJlcXMJbm90X3RydWVfb3BlcnIJfGJyYW5jaCBpZiBub3QgdHJ1ZSBvcGVycgorCWNtcGl3CSMweGJmZmYsRlBURU1QX0VYKCVhNikgfGNoZWNrIGlmIGluY29ycmVjdGx5IHNpZ25hbGxlZAorCWJlcXMJbm90X3RydWVfb3BlcnIJfGJyYW5jaCBpZiBub3QgdHJ1ZSBvcGVycgordHJ1ZV9vcGVycjoKKwltb3ZlbAkjMSwlZDAJCXxzaWduYWwgcmVhbCBvcGVycgorCXJ0cworbm90X3RydWVfb3BlcnI6CisJY2xybAklZDAJCXxzaWduYWwgbm8gcmVhbCBvcGVycgorCXJ0cworCit8Cit8IEVuZF9vcGVyciB0ZXN0cyBmb3Igb3BlcnIgZW5hYmxlZC4gIElmIG5vdCwgaXQgY2xlYW5zIHVwIHRoZSBzdGFjaworfCBhbmQgZG9lcyBhbiBydGUuICBJZiBlbmFibGVkLCBpdCBjbGVhbnMgdXAgdGhlIHN0YWNrIGFuZCBicmFuY2hlcworfCB0byB0aGUga2VybmVsIG9wZXJyIGhhbmRsZXIgd2l0aCBvbmx5IHRoZSBpbnRlZ2VyIGV4Y2VwdGlvbgorfCBmcmFtZSBvbiB0aGUgc3RhY2sgYW5kIHRoZSBmcHUgaW4gdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbmFsIHN0YXRlCit8IHdpdGggY29ycmVjdCBkYXRhIHdyaXR0ZW4gdG8gdGhlIGRlc3RpbmF0aW9uLgorfAorZW5kX29wZXJyOgorCWJ0c3RiCQkjb3BlcnJfYml0LEZQQ1JfRU5BQkxFKCVhNikKKwliZXFzCQlub3RfZW5hYmxlZAorZW5hYmxlZDoKKwltb3ZlbWwJCVVTRVJfREEoJWE2KSwlZDAtJWQxLyVhMC0lYTEKKwlmbW92ZW14CVVTRVJfRlAwKCVhNiksJWZwMC0lZnAzCisJZm1vdmVtbAlVU0VSX0ZQQ1IoJWE2KSwlZnBjci8lZnBzci8lZnBpYXIKKwlmcmVzdG9yZQkoJWE3KSsKKwl1bmxrCQklYTYKKwlicmFsCQlyZWFsX29wZXJyCisKK25vdF9lbmFibGVkOgorfAorfCBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIGVpdGhlciBpbmV4MiBvciBpbmV4MSBleGNlcHRpb25zIHdpdGggdGhlCit8IG9wZXJyLiAgSWYgdGhlIGluZXggZW5hYmxlIGJpdCBpcyBzZXQgaW4gdGhlIEZQQ1IsIGFuZCBlaXRoZXIKK3wgaW5leDIgb3IgaW5leDEgb2NjdXJyZWQsIHdlIG11c3QgY2xlYW4gdXAgYW5kIGJyYW5jaCB0byB0aGUKK3wgcmVhbCBpbmV4IGhhbmRsZXIuCit8Citja19pbmV4OgorCW1vdmViCUZQQ1JfRU5BQkxFKCVhNiksJWQwCisJYW5kYglGUFNSX0VYQ0VQVCglYTYpLCVkMAorCWFuZGliCSMweDMsJWQwCisJYmVxCW9wZXJyX2V4aXQKK3wKK3wgSW5leGFjdCBlbmFibGVkIGFuZCByZXBvcnRlZCwgYW5kIHdlIG11c3QgdGFrZSBhbiBpbmV4YWN0IGV4Y2VwdGlvbi4KK3wKK3Rha2VfaW5leDoKKwltb3ZlYgkJI0lORVhfVkVDLEVYQ19WRUMrMSglYTYpCisJbW92ZWwJCVVTRVJfRlBTUiglYTYpLEZQU1JfU0hBRE9XKCVhNikKKwlvcmwJCSNzeF9tYXNrLEVfQllURSglYTYpCisJbW92ZW1sCQlVU0VSX0RBKCVhNiksJWQwLSVkMS8lYTAtJWExCisJZm1vdmVteAlVU0VSX0ZQMCglYTYpLCVmcDAtJWZwMworCWZtb3ZlbWwJVVNFUl9GUENSKCVhNiksJWZwY3IvJWZwc3IvJWZwaWFyCisJZnJlc3RvcmUJKCVhNykrCisJdW5sawkJJWE2CisJYnJhbAkJcmVhbF9pbmV4Cit8Cit8IFNpbmNlIG9wZXJyIGlzIG9ubHkgYW4gRTEgZXhjZXB0aW9uLCB0aGVyZSBpcyBubyBuZWVkIHRvIGZyZXN0b3JlCit8IGFueSBzdGF0ZSBiYWNrIHRvIHRoZSBmcHUuCit8CitvcGVycl9leGl0OgorCW1vdmVtbAkJVVNFUl9EQSglYTYpLCVkMC0lZDEvJWEwLSVhMQorCWZtb3ZlbXgJVVNFUl9GUDAoJWE2KSwlZnAwLSVmcDMKKwlmbW92ZW1sCVVTRVJfRlBDUiglYTYpLCVmcGNyLyVmcHNyLyVmcGlhcgorCXVubGsJCSVhNgorCWJyYWwJCWZwc3BfZG9uZQorCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAveF9vdmZsLlMgYi9hcmNoL202OGsvZnBzcDA0MC94X292ZmwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmNiOGI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAveF9vdmZsLlMKQEAgLTAsMCArMSwxODYgQEAKK3wKK3wJeF9vdmZsLnNhIDMuNSA3LzEvOTEKK3wKK3wJZnBzcF9vdmZsIC0tLSBGUFNQIGhhbmRsZXIgZm9yIG92ZXJmbG93IGV4Y2VwdGlvbgorfAorfAlPdmVyZmxvdyBvY2N1cnMgd2hlbiBhIGZsb2F0aW5nLXBvaW50IGludGVybWVkaWF0ZSByZXN1bHQgaXMKK3wJdG9vIGxhcmdlIHRvIGJlIHJlcHJlc2VudGVkIGluIGEgZmxvYXRpbmctcG9pbnQgZGF0YSByZWdpc3RlciwKK3wJb3Igd2hlbiBzdG9yaW5nIHRvIG1lbW9yeSwgdGhlIGNvbnRlbnRzIG9mIGEgZmxvYXRpbmctcG9pbnQKK3wJZGF0YSByZWdpc3RlciBhcmUgdG9vIGxhcmdlIHRvIGJlIHJlcHJlc2VudGVkIGluIHRoZQorfAlkZXN0aW5hdGlvbiBmb3JtYXQuCit8Cit8IFRyYXAgZGlzYWJsZWQgcmVzdWx0cworfAorfCBJZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgbW92ZV9vdXQsIHRoZW4gZ2FyYmFnZSBpcyBzdG9yZWQgaW4gdGhlCit8IGRlc3RpbmF0aW9uLiAgSWYgdGhlIGluc3RydWN0aW9uIGlzIG5vdCBtb3ZlX291dCwgdGhlbiB0aGUKK3wgZGVzdGluYXRpb24gaXMgbm90IGFmZmVjdGVkLiAgRm9yIDY4ODgxIGNvbXBhdGliaWxpdHksIHRoZQorfCBmb2xsb3dpbmcgdmFsdWVzIHNob3VsZCBiZSBzdG9yZWQgYXQgdGhlIGRlc3RpbmF0aW9uLCBiYXNlZAorfCBvbiB0aGUgY3VycmVudCByb3VuZGluZyBtb2RlOgorfAorfCAgUk4JSW5maW5pdHkgd2l0aCB0aGUgc2lnbiBvZiB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdC4KK3wgIFJaCUxhcmdlc3QgbWFnbml0dWRlIG51bWJlciwgd2l0aCB0aGUgc2lnbiBvZiB0aGUKK3wJaW50ZXJtZWRpYXRlIHJlc3VsdC4KK3wgIFJNICAgRm9yIHBvcyBvdmVyZmxvdywgdGhlIGxhcmdlc3QgcG9zIG51bWJlci4gRm9yIG5lZyBvdmVyZmxvdywKK3wJLWluZmluaXR5Cit8ICBSUCAgIEZvciBwb3Mgb3ZlcmZsb3csICtpbmZpbml0eS4gRm9yIG5lZyBvdmVyZmxvdywgdGhlIGxhcmdlc3QKK3wJbmVnIG51bWJlcgorfAorfCBUcmFwIGVuYWJsZWQgcmVzdWx0cworfCBBbGwgdHJhcCBkaXNhYmxlZCBjb2RlIGFwcGxpZXMuICBJbiBhZGRpdGlvbiB0aGUgZXhjZXB0aW9uYWwKK3wgb3BlcmFuZCBuZWVkcyB0byBiZSBtYWRlIGF2YWlsYWJsZSB0byB0aGUgdXNlcnMgZXhjZXB0aW9uIGhhbmRsZXIKK3wgd2l0aCBhIGJpYXMgb2YgJDYwMDAgc3VidHJhY3RlZCBmcm9tIHRoZSBleHBvbmVudC4KK3wKK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworWF9PVkZMOgl8aWRudCAgICAyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCisJfHhyZWYJb3ZmX3JfeDIKKwl8eHJlZglvdmZfcl94MworCXx4cmVmCXN0b3JlCisJfHhyZWYJcmVhbF9vdmZsCisJfHhyZWYJcmVhbF9pbmV4CisJfHhyZWYJZnBzcF9kb25lCisJfHhyZWYJZ19vcGNscworCXx4cmVmCWIxMjM4X2ZpeAorCisJLmdsb2JhbAlmcHNwX292ZmwKK2Zwc3Bfb3ZmbDoKKwlsaW5rCQklYTYsIy1MT0NBTF9TSVpFCisJZnNhdmUJCS0oJWE3KQorCW1vdmVtbAkJJWQwLSVkMS8lYTAtJWExLFVTRVJfREEoJWE2KQorCWZtb3ZlbXgJJWZwMC0lZnAzLFVTRVJfRlAwKCVhNikKKwlmbW92ZW1sCSVmcGNyLyVmcHNyLyVmcGlhcixVU0VSX0ZQQ1IoJWE2KQorCit8Cit8CVRoZSAwNDAgZG9lc24ndCBzZXQgdGhlIEFJTkVYIGJpdCBpbiB0aGUgRlBTUiwgdGhlIGZvbGxvd2luZworfAlsaW5lIHRlbXBvcmFyaWx5IHJlY3RpZmllcyB0aGlzIGVycm9yLgorfAorCWJzZXRiCSNhaW5leF9iaXQsRlBTUl9BRVhDRVBUKCVhNikKK3wKKwlic3JsCW92Zl9hZGoJCXxkZW5vcm1hbGl6ZSwgcm91bmQgJiBzdG9yZSBpbnRlcm0gb3AKK3wKK3wJaWYgb3ZlcmZsb3cgdHJhcHMgbm90IGVuYWJsZWQgY2hlY2sgZm9yIGluZXhhY3QgZXhjZXB0aW9uCit8CisJYnRzdGIJI292ZmxfYml0LEZQQ1JfRU5BQkxFKCVhNikKKwliZXFzCWNrX2luZXgKK3wKKwlidHN0YgkJI0UzLEVfQllURSglYTYpCisJYmVxcwkJbm9fZTNfMQorCWJmZXh0dQkJQ01EUkVHM0IoJWE2KXsjNjojM30sJWQwCXxnZXQgZGVzdCByZWcgbm8KKwliY2xyYgkJJWQwLEZQUl9ESVJUWV9CSVRTKCVhNikJfGNsciBkZXN0IGRpcnR5IGJpdAorCWJzcmwJCWIxMjM4X2ZpeAorCW1vdmVsCQlVU0VSX0ZQU1IoJWE2KSxGUFNSX1NIQURPVyglYTYpCisJb3JsCQkjc3hfbWFzayxFX0JZVEUoJWE2KQorbm9fZTNfMToKKwltb3ZlbWwJCVVTRVJfREEoJWE2KSwlZDAtJWQxLyVhMC0lYTEKKwlmbW92ZW14CVVTRVJfRlAwKCVhNiksJWZwMC0lZnAzCisJZm1vdmVtbAlVU0VSX0ZQQ1IoJWE2KSwlZnBjci8lZnBzci8lZnBpYXIKKwlmcmVzdG9yZQkoJWE3KSsKKwl1bmxrCQklYTYKKwlicmFsCQlyZWFsX292ZmwKK3wKK3wgSXQgaXMgcG9zc2libGUgdG8gaGF2ZSBlaXRoZXIgaW5leDIgb3IgaW5leDEgZXhjZXB0aW9ucyB3aXRoIHRoZQorfCBvdmZsLiAgSWYgdGhlIGluZXggZW5hYmxlIGJpdCBpcyBzZXQgaW4gdGhlIEZQQ1IsIGFuZCBlaXRoZXIKK3wgaW5leDIgb3IgaW5leDEgb2NjdXJyZWQsIHdlIG11c3QgY2xlYW4gdXAgYW5kIGJyYW5jaCB0byB0aGUKK3wgcmVhbCBpbmV4IGhhbmRsZXIuCit8Citja19pbmV4OgorfAltb3ZlLmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQwCit8CWFuZC5iCQlGUFNSX0VYQ0VQVCglYTYpLCVkMAorfAlhbmRpLmIJCSMkMywlZDAKKwlidHN0YgkJI2luZXgyX2JpdCxGUENSX0VOQUJMRSglYTYpCisJYmVxcwkJb3ZmbF9leGl0Cit8Cit8IEluZXhhY3QgZW5hYmxlZCBhbmQgcmVwb3J0ZWQsIGFuZCB3ZSBtdXN0IHRha2UgYW4gaW5leGFjdCBleGNlcHRpb24uCit8Cit0YWtlX2luZXg6CisJYnRzdGIJCSNFMyxFX0JZVEUoJWE2KQorCWJlcXMJCW5vX2UzXzIKKwliZmV4dHUJCUNNRFJFRzNCKCVhNil7IzY6IzN9LCVkMAl8Z2V0IGRlc3QgcmVnIG5vCisJYmNscmIJCSVkMCxGUFJfRElSVFlfQklUUyglYTYpCXxjbHIgZGVzdCBkaXJ0eSBiaXQKKwlic3JsCQliMTIzOF9maXgKKwltb3ZlbAkJVVNFUl9GUFNSKCVhNiksRlBTUl9TSEFET1coJWE2KQorCW9ybAkJI3N4X21hc2ssRV9CWVRFKCVhNikKK25vX2UzXzI6CisJbW92ZWIJCSNJTkVYX1ZFQyxFWENfVkVDKzEoJWE2KQorCW1vdmVtbAkJVVNFUl9EQSglYTYpLCVkMC0lZDEvJWEwLSVhMQorCWZtb3ZlbXgJVVNFUl9GUDAoJWE2KSwlZnAwLSVmcDMKKwlmbW92ZW1sCVVTRVJfRlBDUiglYTYpLCVmcGNyLyVmcHNyLyVmcGlhcgorCWZyZXN0b3JlCSglYTcpKworCXVubGsJCSVhNgorCWJyYWwJCXJlYWxfaW5leAorCitvdmZsX2V4aXQ6CisJYmNscmIJI0UzLEVfQllURSglYTYpCXx0ZXN0IGFuZCBjbGVhciBFMyBiaXQKKwliZXFzCWUxX3NldAorfAorfCBDbGVhciBkaXJ0eSBiaXQgb24gZGVzdCByZXNpc3RlciBpbiB0aGUgZnJhbWUgYmVmb3JlIGJyYW5jaGluZworfCB0byBiMTIzOF9maXguCit8CisJYmZleHR1CQlDTURSRUczQiglYTYpeyM2OiMzfSwlZDAJfGdldCBkZXN0IHJlZyBubworCWJjbHJiCQklZDAsRlBSX0RJUlRZX0JJVFMoJWE2KQl8Y2xyIGRlc3QgZGlydHkgYml0CisJYnNybAkJYjEyMzhfZml4CQl8dGVzdCBmb3IgYnVnMTIzOCBjYXNlCisKKwltb3ZlbAkJVVNFUl9GUFNSKCVhNiksRlBTUl9TSEFET1coJWE2KQorCW9ybAkJI3N4X21hc2ssRV9CWVRFKCVhNikKKwltb3ZlbWwJCVVTRVJfREEoJWE2KSwlZDAtJWQxLyVhMC0lYTEKKwlmbW92ZW14CVVTRVJfRlAwKCVhNiksJWZwMC0lZnAzCisJZm1vdmVtbAlVU0VSX0ZQQ1IoJWE2KSwlZnBjci8lZnBzci8lZnBpYXIKKwlmcmVzdG9yZQkoJWE3KSsKKwl1bmxrCQklYTYKKwlicmFsCQlmcHNwX2RvbmUKK2UxX3NldDoKKwltb3ZlbWwJCVVTRVJfREEoJWE2KSwlZDAtJWQxLyVhMC0lYTEKKwlmbW92ZW14CVVTRVJfRlAwKCVhNiksJWZwMC0lZnAzCisJZm1vdmVtbAlVU0VSX0ZQQ1IoJWE2KSwlZnBjci8lZnBzci8lZnBpYXIKKwl1bmxrCQklYTYKKwlicmFsCQlmcHNwX2RvbmUKKworfAorfAlvdmZfYWRqCit8CitvdmZfYWRqOgorfAorfCBIYXZlIGEwIHBvaW50IHRvIHRoZSBjb3JyZWN0IG9wZXJhbmQuCit8CisJYnRzdGIJI0UzLEVfQllURSglYTYpCXx0ZXN0IEUzIGJpdAorCWJlcXMJb3ZmX2UxCisKKwlsZWEJV0JURU1QKCVhNiksJWEwCisJYnJhcwlvdmZfY29tCitvdmZfZTE6CisJbGVhCUVURU1QKCVhNiksJWEwCisKK292Zl9jb206CisJYmNscmIJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkKKwlzbmUJTE9DQUxfU0dOKCVhMCkKKworCWJzcmwJZ19vcGNscwkJfHJldHVybnMgb3BjbGFzcyBpbiBkMAorCWNtcGl3CSMzLCVkMAkJfGNoZWNrIGZvciBvcGNsYXNzMworCWJuZXMJbm90X29wYzAxMQorCit8Cit8IEZQU1JfQ0MgaXMgc2F2ZWQgYW5kIHJlc3RvcmVkIGJlY2F1c2Ugb3ZmX3JfeDMgYWZmZWN0cyBpdC4gVGhlCit8IENDcyBhcmUgZGVmaW5lZCB0byBiZSAnbm90IGFmZmVjdGVkJyBmb3IgdGhlIG9wY2xhc3MzIGluc3RydWN0aW9uLgorfAorCW1vdmViCUZQU1JfQ0MoJWE2KSxMX1NDUjEoJWE2KQorCWJzcmwJb3ZmX3JfeDMJfHJldHVybnMgYTAgcG9pbnRpbmcgdG8gcmVzdWx0CisJbW92ZWIJTF9TQ1IxKCVhNiksRlBTUl9DQyglYTYpCisJYnJhbAlzdG9yZQkJfHN0b3JlcyB0byBtZW1vcnkgb3IgcmVnaXN0ZXIKKworbm90X29wYzAxMToKKwlic3JsCW92Zl9yX3gyCXxyZXR1cm5zIGEwIHBvaW50aW5nIHRvIHJlc3VsdAorCWJyYWwJc3RvcmUJCXxzdG9yZXMgdG8gbWVtb3J5IG9yIHJlZ2lzdGVyCisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC94X3NuYW4uUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3hfc25hbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOWFmNTczCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAveF9zbmFuLlMKQEAgLTAsMCArMSwyNzcgQEAKK3wKK3wJeF9zbmFuLnNhIDMuMyA3LzEvOTEKK3wKK3wgZnBzcF9zbmFuIC0tLSBGUFNQIGhhbmRsZXIgZm9yIHNpZ25hbGxpbmcgTkFOIGV4Y2VwdGlvbgorfAorfCBTTkFOIGZvciBmbG9hdCAtPiBpbnRlZ2VyIGNvbnZlcnNpb25zIChpbnRlZ2VyIGNvbnZlcnNpb24gb2YKK3wgYW4gU05BTikgaXMgYSBub24tbWFza2FibGUgcnVuLXRpbWUgZXhjZXB0aW9uLgorfAorfCBGb3IgdHJhcCBkaXNhYmxlZCB0aGUgMDQwIGRvZXMgdGhlIGZvbGxvd2luZzoKK3wgSWYgdGhlIGRlc3QgZGF0YSBmb3JtYXQgaXMgcywgZCwgb3IgeCwgdGhlbiB0aGUgU05BTiBiaXQgaW4gdGhlIE5BTgorfCBpcyBzZXQgdG8gb25lIGFuZCB0aGUgcmVzdWx0aW5nIG5vbi1zaWduYWxpbmcgTkFOICh0cnVuY2F0ZWQgaWYKK3wgbmVjZXNzYXJ5KSBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgZGVzdC4gIElmIHRoZSBkZXN0IGZvcm1hdCBpcyBiLCB3LAorfCBvciBsLCB0aGVuIGdhcmJhZ2UgaXMgd3JpdHRlbiB0byB0aGUgZGVzdCAoYWN0dWFsbHkgdGhlIHVwcGVyIDMyIGJpdHMKK3wgb2YgdGhlIG1hbnRpc3NhIGFyZSBzZW50IHRvIHRoZSBpbnRlZ2VyIHVuaXQpLgorfAorfCBGb3IgdHJhcCBlbmFibGVkIHRoZSAwNDAgZG9lcyB0aGUgZm9sbG93aW5nOgorfCBJZiB0aGUgaW5zdCBpcyBtb3ZlX291dCwgdGhlbiB0aGUgcmVzdWx0cyBhcmUgdGhlIHNhbWUgYXMgZm9yIHRyYXAKK3wgZGlzYWJsZWQgd2l0aCB0aGUgZXhjZXB0aW9uIHBvc3RlZC4gIElmIHRoZSBpbnN0cnVjdGlvbiBpcyBub3QgbW92ZV8KK3wgb3V0LCB0aGUgZGVzdC4gaXMgbm90IG1vZGlmaWVkLCBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBwb3N0ZWQuCit8CisKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK1hfU05BTjoJfGlkbnQgICAgMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworI2luY2x1ZGUgImZwc3AuaCIKKworCXx4cmVmCWdldF9mbGluZQorCXx4cmVmCW1lbV93cml0ZQorCXx4cmVmCXJlYWxfc25hbgorCXx4cmVmCXJlYWxfaW5leAorCXx4cmVmCWZwc3BfZG9uZQorCXx4cmVmCXJlZ19kZXN0CisKKwkuZ2xvYmFsCWZwc3Bfc25hbgorZnBzcF9zbmFuOgorCWxpbmsJCSVhNiwjLUxPQ0FMX1NJWkUKKwlmc2F2ZQkJLSglYTcpCisJbW92ZW1sCQklZDAtJWQxLyVhMC0lYTEsVVNFUl9EQSglYTYpCisJZm1vdmVteAklZnAwLSVmcDMsVVNFUl9GUDAoJWE2KQorCWZtb3ZlbWwJJWZwY3IvJWZwc3IvJWZwaWFyLFVTRVJfRlBDUiglYTYpCisKK3wKK3wgQ2hlY2sgaWYgdHJhcCBlbmFibGVkCit8CisJYnRzdGIJCSNzbmFuX2JpdCxGUENSX0VOQUJMRSglYTYpCisJYm5lcwkJZW5hCQl8SWYgZW5hYmxlZCwgdGhlbiBicmFuY2gKKworCWJzcmwJCW1vdmVfb3V0CXxlbHNlIFNOQU4gZGlzYWJsZWQKK3wKK3wgSXQgaXMgcG9zc2libGUgdG8gaGF2ZSBhbiBpbmV4MSBleGNlcHRpb24gd2l0aCB0aGUKK3wgc25hbi4gIElmIHRoZSBpbmV4IGVuYWJsZSBiaXQgaXMgc2V0IGluIHRoZSBGUENSLCBhbmQgZWl0aGVyCit8IGluZXgyIG9yIGluZXgxIG9jY3VycmVkLCB3ZSBtdXN0IGNsZWFuIHVwIGFuZCBicmFuY2ggdG8gdGhlCit8IHJlYWwgaW5leCBoYW5kbGVyLgorfAorY2tfaW5leDoKKwltb3ZlYglGUENSX0VOQUJMRSglYTYpLCVkMAorCWFuZGIJRlBTUl9FWENFUFQoJWE2KSwlZDAKKwlhbmRpYgkjMHgzLCVkMAorCWJlcQllbmRfc25hbgorfAorfCBJbmV4YWN0IGVuYWJsZWQgYW5kIHJlcG9ydGVkLCBhbmQgd2UgbXVzdCB0YWtlIGFuIGluZXhhY3QgZXhjZXB0aW9uLgorfAordGFrZV9pbmV4OgorCW1vdmViCQkjSU5FWF9WRUMsRVhDX1ZFQysxKCVhNikKKwltb3ZlbWwJCVVTRVJfREEoJWE2KSwlZDAtJWQxLyVhMC0lYTEKKwlmbW92ZW14CVVTRVJfRlAwKCVhNiksJWZwMC0lZnAzCisJZm1vdmVtbAlVU0VSX0ZQQ1IoJWE2KSwlZnBjci8lZnBzci8lZnBpYXIKKwlmcmVzdG9yZQkoJWE3KSsKKwl1bmxrCQklYTYKKwlicmFsCQlyZWFsX2luZXgKK3wKK3wgU05BTiBpcyBlbmFibGVkLiAgQ2hlY2sgaWYgaW5zdCBpcyBtb3ZlX291dC4KK3wgTWFrZSBhbnkgY29ycmVjdGlvbnMgdG8gdGhlIDA0MCBvdXRwdXQgYXMgbmVjZXNzYXJ5LgorfAorZW5hOgorCWJ0c3RiCQkjNSxDTURSRUcxQiglYTYpIHxpZiBzZXQsIGluc3QgaXMgbW92ZSBvdXQKKwliZXEJCW5vdF9vdXQKKworCWJzcmwJCW1vdmVfb3V0CisKK3JlcG9ydF9zbmFuOgorCW1vdmViCQkoJWE3KSxWRVJfVE1QKCVhNikKKwljbXBpYgkJI1ZFUl80MCwoJWE3KQl8dGVzdCBmb3Igb3JpZyB1bmltcCBmcmFtZQorCWJuZXMJCWNrX3JldgorCW1vdmVxbAkJIzEzLCVkMAkJfG5lZWQgdG8gemVybyAxNCBsd29yZHMKKwlicmFzCQlyZXBfY29uCitja19yZXY6CisJbW92ZXFsCQkjMTEsJWQwCQl8bmVlZCB0byB6ZXJvIDEyIGx3b3JkcworcmVwX2NvbjoKKwljbHJsCQkoJWE3KQorbG9vcDE6CisJY2xybAkJLSglYTcpCQl8Y2xlYXIgYW5kIGRlYyBhNworCWRicmEJCSVkMCxsb29wMQorCW1vdmViCQlWRVJfVE1QKCVhNiksKCVhNykgfGZvcm1hdCBhIGJ1c3kgZnJhbWUKKwltb3ZlYgkJI0JVU1lfU0laRS00LDEoJWE3KQorCW1vdmVsCQlVU0VSX0ZQU1IoJWE2KSxGUFNSX1NIQURPVyglYTYpCisJb3JsCQkjc3hfbWFzayxFX0JZVEUoJWE2KQorCW1vdmVtbAkJVVNFUl9EQSglYTYpLCVkMC0lZDEvJWEwLSVhMQorCWZtb3ZlbXgJVVNFUl9GUDAoJWE2KSwlZnAwLSVmcDMKKwlmbW92ZW1sCVVTRVJfRlBDUiglYTYpLCVmcGNyLyVmcHNyLyVmcGlhcgorCWZyZXN0b3JlCSglYTcpKworCXVubGsJCSVhNgorCWJyYWwJCXJlYWxfc25hbgorfAorfCBFeGl0IHNuYW4gaGFuZGxlciBieSBleHBhbmRpbmcgdGhlIHVuaW1wIGZyYW1lIGludG8gYSBidXN5IGZyYW1lCit8CitlbmRfc25hbjoKKwliY2xyYgkJI0UxLEVfQllURSglYTYpCisKKwltb3ZlYgkJKCVhNyksVkVSX1RNUCglYTYpCisJY21waWIJCSNWRVJfNDAsKCVhNykJfHRlc3QgZm9yIG9yaWcgdW5pbXAgZnJhbWUKKwlibmVzCQlja19yZXYyCisJbW92ZXFsCQkjMTMsJWQwCQl8bmVlZCB0byB6ZXJvIDE0IGx3b3JkcworCWJyYXMJCXJlcF9jb24yCitja19yZXYyOgorCW1vdmVxbAkJIzExLCVkMAkJfG5lZWQgdG8gemVybyAxMiBsd29yZHMKK3JlcF9jb24yOgorCWNscmwJCSglYTcpCitsb29wMjoKKwljbHJsCQktKCVhNykJCXxjbGVhciBhbmQgZGVjIGE3CisJZGJyYQkJJWQwLGxvb3AyCisJbW92ZWIJCVZFUl9UTVAoJWE2KSwoJWE3KSB8Zm9ybWF0IGEgYnVzeSBmcmFtZQorCW1vdmViCQkjQlVTWV9TSVpFLTQsMSglYTcpIHx3cml0ZSBidXN5IHNpemUKKwltb3ZlbAkJVVNFUl9GUFNSKCVhNiksRlBTUl9TSEFET1coJWE2KQorCW9ybAkJI3N4X21hc2ssRV9CWVRFKCVhNikKKwltb3ZlbWwJCVVTRVJfREEoJWE2KSwlZDAtJWQxLyVhMC0lYTEKKwlmbW92ZW14CVVTRVJfRlAwKCVhNiksJWZwMC0lZnAzCisJZm1vdmVtbAlVU0VSX0ZQQ1IoJWE2KSwlZnBjci8lZnBzci8lZnBpYXIKKwlmcmVzdG9yZQkoJWE3KSsKKwl1bmxrCQklYTYKKwlicmFsCQlmcHNwX2RvbmUKKworfAorfCBNb3ZlX291dAorfAorbW92ZV9vdXQ6CisJbW92ZWwJCUVYQ19FQSglYTYpLCVhMAl8Z2V0IDxlYT4gZnJvbSBleGMgZnJhbWUKKworCWJmZXh0dQkJQ01EUkVHMUIoJWE2KXsjMzojM30sJWQwIHxtb3ZlIHJ4IGZpZWxkIHRvIGQwezI6MH0KKwljbXBpbAkJIzAsJWQwCQl8Y2hlY2sgZm9yIGxvbmcKKwliZXFzCQlzdG9fbG9uZwl8YnJhbmNoIGlmIG1vdmVfb3V0IGxvbmcKKworCWNtcGlsCQkjNCwlZDAJCXxjaGVjayBmb3Igd29yZAorCWJlcXMJCXN0b193b3JkCXxicmFuY2ggaWYgbW92ZV9vdXQgd29yZAorCisJY21waWwJCSM2LCVkMAkJfGNoZWNrIGZvciBieXRlCisJYmVxcwkJc3RvX2J5dGUJfGJyYW5jaCBpZiBtb3ZlX291dCBieXRlCisKK3wKK3wgTm90IGJ5dGUsIHdvcmQgb3IgbG9uZworfAorCXJ0cworfAorfCBHZXQgdGhlIDMyIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiBldGVtcCBtYW50aXNzYQorfAorc3RvX2xvbmc6CisJbW92ZWwJCUVURU1QX0hJKCVhNiksJWQxCisJbW92ZWwJCSM0LCVkMAkJfGxvYWQgYnl0ZSBjb3VudAorfAorfCBTZXQgc2lnbmFsbGluZyBuYW4gYml0Cit8CisJYnNldGwJCSMzMCwlZDEKK3wKK3wgU3RvcmUgdG8gdGhlIHVzZXJzIGRlc3RpbmF0aW9uIGFkZHJlc3MKK3wKKwl0c3RsCQklYTAJCXxjaGVjayBpZiA8ZWE+IGlzIDAKKwliZXFzCQl3cnRfZG4JCXxkZXN0aW5hdGlvbiBpcyBhIGRhdGEgcmVnaXN0ZXIKKworCW1vdmVsCQklZDEsLSglYTcpCXxtb3ZlIHRoZSBzbmFuIG9udG8gdGhlIHN0YWNrCisJbW92ZWwJCSVhMCwlYTEJCXxsb2FkIGRlc3QgYWRkciBpbnRvIGExCisJbW92ZWwJCSVhNywlYTAJCXxsb2FkIHNyYyBhZGRyIG9mIHNuYW4gaW50byBhMAorCWJzcmwJCW1lbV93cml0ZQl8d3JpdGUgc25hbiB0byB1c2VyIG1lbW9yeQorCW1vdmVsCQkoJWE3KSssJWQxCXxjbGVhciBvZmYgc3RhY2sKKwlydHMKK3wKK3wgR2V0IHRoZSAxNiBtb3N0IHNpZ25pZmljYW50IGJpdHMgb2YgZXRlbXAgbWFudGlzc2EKK3wKK3N0b193b3JkOgorCW1vdmVsCQlFVEVNUF9ISSglYTYpLCVkMQorCW1vdmVsCQkjMiwlZDAJCXxsb2FkIGJ5dGUgY291bnQKK3wKK3wgU2V0IHNpZ25hbGxpbmcgbmFuIGJpdAorfAorCWJzZXRsCQkjMzAsJWQxCit8Cit8IFN0b3JlIHRvIHRoZSB1c2VycyBkZXN0aW5hdGlvbiBhZGRyZXNzCit8CisJdHN0bAkJJWEwCQl8Y2hlY2sgaWYgPGVhPiBpcyAwCisJYmVxcwkJd3J0X2RuCQl8ZGVzdGluYXRpb24gaXMgYSBkYXRhIHJlZ2lzdGVyCisKKwltb3ZlbAkJJWQxLC0oJWE3KQl8bW92ZSB0aGUgc25hbiBvbnRvIHRoZSBzdGFjaworCW1vdmVsCQklYTAsJWExCQl8bG9hZCBkZXN0IGFkZHIgaW50byBhMQorCW1vdmVsCQklYTcsJWEwCQl8cG9pbnQgdG8gbG93IHdvcmQKKwlic3JsCQltZW1fd3JpdGUJfHdyaXRlIHNuYW4gdG8gdXNlciBtZW1vcnkKKwltb3ZlbAkJKCVhNykrLCVkMQl8Y2xlYXIgb2ZmIHN0YWNrCisJcnRzCit8Cit8IEdldCB0aGUgOCBtb3N0IHNpZ25pZmljYW50IGJpdHMgb2YgZXRlbXAgbWFudGlzc2EKK3wKK3N0b19ieXRlOgorCW1vdmVsCQlFVEVNUF9ISSglYTYpLCVkMQorCW1vdmVsCQkjMSwlZDAJCXxsb2FkIGJ5dGUgY291bnQKK3wKK3wgU2V0IHNpZ25hbGxpbmcgbmFuIGJpdAorfAorCWJzZXRsCQkjMzAsJWQxCit8Cit8IFN0b3JlIHRvIHRoZSB1c2VycyBkZXN0aW5hdGlvbiBhZGRyZXNzCit8CisJdHN0bAkJJWEwCQl8Y2hlY2sgaWYgPGVhPiBpcyAwCisJYmVxcwkJd3J0X2RuCQl8ZGVzdGluYXRpb24gaXMgYSBkYXRhIHJlZ2lzdGVyCisJbW92ZWwJCSVkMSwtKCVhNykJfG1vdmUgdGhlIHNuYW4gb250byB0aGUgc3RhY2sKKwltb3ZlbAkJJWEwLCVhMQkJfGxvYWQgZGVzdCBhZGRyIGludG8gYTEKKwltb3ZlbAkJJWE3LCVhMAkJfHBvaW50IHRvIHNvdXJjZSBieXRlCisJYnNybAkJbWVtX3dyaXRlCXx3cml0ZSBzbmFuIHRvIHVzZXIgbWVtb3J5CisJbW92ZWwJCSglYTcpKywlZDEJfGNsZWFyIG9mZiBzdGFjaworCXJ0cworCit8Cit8CXdydF9kbiAtLS0gd3JpdGUgdG8gYSBkYXRhIHJlZ2lzdGVyCit8Cit8CVdlIGdldCBoZXJlIHdpdGggRDEgY29udGFpbmluZyB0aGUgZGF0YSB0byB3cml0ZSBhbmQgRDAgdGhlCit8CW51bWJlciBvZiBieXRlcyB0byB3cml0ZTogMT1ieXRlLDI9d29yZCw0PWxvbmcuCit8Cit3cnRfZG46CisJbW92ZWwJCSVkMSxMX1NDUjEoJWE2KQl8ZGF0YQorCW1vdmVsCQklZDAsLSglYTcpCXxzaXplCisJYnNybAkJZ2V0X2ZsaW5lCXxyZXR1cm5zIGZsaW5lIHdvcmQgaW4gZDAKKwltb3ZlbAkJJWQwLCVkMQorCWFuZGlsCQkjMHg3LCVkMQkJfGQxIG5vdyBob2xkcyByZWdpc3RlciBudW1iZXIKKwltb3ZlbAkJKCVzcCkrLCVkMAl8Z2V0IG9yaWdpbmFsIHNpemUKKwljbXBpbAkJIzQsJWQwCisJYmVxcwkJd3J0X2xvbmcKKwljbXBpbAkJIzIsJWQwCisJYm5lcwkJd3J0X2J5dGUKK3dydF93b3JkOgorCW9ybAkJIzB4OCwlZDEKKwlicmFsCQlyZWdfZGVzdAord3J0X2xvbmc6CisJb3JsCQkjMHgxMCwlZDEKKwlicmFsCQlyZWdfZGVzdAord3J0X2J5dGU6CisJYnJhbAkJcmVnX2Rlc3QKK3wKK3wgQ2hlY2sgaWYgaXQgaXMgYSBzcmMgbmFuIG9yIGRzdCBuYW4KK3wKK25vdF9vdXQ6CisJbW92ZWwJCURUQUcoJWE2KSwlZDAKKwliZmV4dHUJCSVkMHsjMDojM30sJWQwCXxpc29sYXRlIGR0YWcgaW4gbHNicworCisJY21waWIJCSMzLCVkMAkJfGNoZWNrIGZvciBuYW4gaW4gZGVzdGluYXRpb24KKwlibmVzCQlpc3NyYwkJfGRlc3RpbmF0aW9uIG5hbiBoYXMgcHJpb3JpdHkKK2RzdF9uYW46CisJYnRzdGIJCSM2LEZQVEVNUF9ISSglYTYpIHxjaGVjayBpZiBkZXN0IG5hbiBpcyBhbiBzbmFuCisJYm5lcwkJaXNzcmMJCXxubywgc28gY2hlY2sgc291cmNlIGZvciBzbmFuCisJbW92ZXcJCUZQVEVNUF9FWCglYTYpLCVkMAorCWJyYXMJCWNvbnQKK2lzc3JjOgorCW1vdmV3CQlFVEVNUF9FWCglYTYpLCVkMAorY29udDoKKwlidHN0bAkJIzE1LCVkMAkJfHRlc3QgZm9yIHNpZ24gb2Ygc25hbgorCWJlcXMJCWNscl9uZWcKKwlic2V0YgkJI25lZ19iaXQsRlBTUl9DQyglYTYpCisJYnJhCQlyZXBvcnRfc25hbgorY2xyX25lZzoKKwliY2xyYgkJI25lZ19iaXQsRlBTUl9DQyglYTYpCisJYnJhCQlyZXBvcnRfc25hbgorCisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2Zwc3AwNDAveF9zdG9yZS5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAveF9zdG9yZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyODJmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC94X3N0b3JlLlMKQEAgLTAsMCArMSwyNTYgQEAKK3wKK3wJeF9zdG9yZS5zYSAzLjIgMS8yNC85MQorfAorfAlzdG9yZSAtLS0gc3RvcmUgb3BlcmFuZCB0byBtZW1vcnkgb3IgcmVnaXN0ZXIKK3wKK3wJVXNlZCBieSB1bmRlcmZsb3cgYW5kIG92ZXJmbG93IGhhbmRsZXJzLgorfAorfAlhNiA9IHBvaW50cyB0byBmcCB2YWx1ZSB0byBiZSBzdG9yZWQuCit8CisKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK1hfU1RPUkU6CXxpZG50ICAgIDIsMSB8IE1vdG9yb2xhIDA0MCBGbG9hdGluZyBQb2ludCBTb2Z0d2FyZSBQYWNrYWdlCisKKwl8c2VjdGlvbgk4CisKK2ZwcmVnX21hc2s6CisJLmJ5dGUJMHg4MCwweDQwLDB4MjAsMHgxMCwweDA4LDB4MDQsMHgwMiwweDAxCisKKyNpbmNsdWRlICJmcHNwLmgiCisKKwl8eHJlZgltZW1fd3JpdGUKKwl8eHJlZglnZXRfZmxpbmUKKwl8eHJlZglnX29wY2xzCisJfHhyZWYJZ19kZm10b3UKKwl8eHJlZglyZWdfZGVzdAorCisJLmdsb2JhbAlkZXN0X2V4dAorCS5nbG9iYWwJZGVzdF9kYmwKKwkuZ2xvYmFsCWRlc3Rfc2dsCisKKwkuZ2xvYmFsCXN0b3JlCitzdG9yZToKKwlidHN0YgkjRTMsRV9CWVRFKCVhNikKKwliZXFzCUUxX3N0bworRTNfc3RvOgorCW1vdmVsCUNNRFJFRzNCKCVhNiksJWQwCisJYmZleHR1CSVkMHsjNjojM30sJWQwCQl8aXNvbGF0ZSBkZXN0LiByZWcgZnJvbSBjbWRyZWczYgorc3RvX2ZwOgorCWxlYQlmcHJlZ19tYXNrLCVhMQorCW1vdmViCSglYTEsJWQwLncpLCVkMAkJfGNvbnZlcnQgcmVnIyB0byBkeW5hbWljIHJlZ2lzdGVyIG1hc2sKKwl0c3RiCUxPQ0FMX1NHTiglYTApCisJYmVxcwlpc19wb3MKKwlic2V0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWEwKQoraXNfcG9zOgorCWZtb3ZlbXggKCVhMCksJWQwCQl8bW92ZSB0byBjb3JyZWN0IHJlZ2lzdGVyCit8Cit8CWlmIGZwMC1mcDMgaXMgYmVpbmcgbW9kaWZpZWQsIHdlIG11c3QgcHV0IGEgY29weQorfAlpbiB0aGUgVVNFUl9GUG4gdmFyaWFibGUgb24gdGhlIHN0YWNrIGJlY2F1c2UgYWxsIGV4Y2VwdGlvbgorfAloYW5kbGVycyByZXN0b3JlIGZwMC1mcDMgZnJvbSB0aGVyZS4KK3wKKwljbXBiCSMweDgwLCVkMAorCWJuZXMJbm90X2ZwMAorCWZtb3ZlbXggJWZwMC0lZnAwLFVTRVJfRlAwKCVhNikKKwlydHMKK25vdF9mcDA6CisJY21wYgkjMHg0MCwlZDAKKwlibmVzCW5vdF9mcDEKKwlmbW92ZW14ICVmcDEtJWZwMSxVU0VSX0ZQMSglYTYpCisJcnRzCitub3RfZnAxOgorCWNtcGIJIzB4MjAsJWQwCisJYm5lcwlub3RfZnAyCisJZm1vdmVteCAlZnAyLSVmcDIsVVNFUl9GUDIoJWE2KQorCXJ0cworbm90X2ZwMjoKKwljbXBiCSMweDEwLCVkMAorCWJuZXMJbm90X2ZwMworCWZtb3ZlbXggJWZwMy0lZnAzLFVTRVJfRlAzKCVhNikKKwlydHMKK25vdF9mcDM6CisJcnRzCisKK0UxX3N0bzoKKwlic3JsCWdfb3BjbHMJCXxyZXR1cm5zIG9wY2xhc3MgaW4gZDAKKwljbXBpYgkjMywlZDAKKwliZXEJb3BjMDExCQl8YnJhbmNoIGlmIG9wY2xhc3MgMworCW1vdmVsCUNNRFJFRzFCKCVhNiksJWQwCisJYmZleHR1CSVkMHsjNjojM30sJWQwCXxleHRyYWN0IGRlc3RpbmF0aW9uIHJlZ2lzdGVyCisJYnJhcwlzdG9fZnAKKworb3BjMDExOgorCWJzcmwJZ19kZm10b3UJfHJldHVybnMgZGVzdCBmb3JtYXQgaW4gZDAKK3wJCQkJO2V4dD0wMCwgc2dsPTAxLCBkYmw9MTAKKwltb3ZlbAklYTAsJWExCQl8c2F2ZSBzb3VyY2UgYWRkciBpbiBhMQorCW1vdmVsCUVYQ19FQSglYTYpLCVhMAl8Z2V0IHRoZSBhZGRyZXNzCisJY21waWwJIzAsJWQwCQl8aWYgZGVzdCBmb3JtYXQgaXMgZXh0ZW5kZWQKKwliZXEJZGVzdF9leHQJfHRoZW4gYnJhbmNoCisJY21waWwJIzEsJWQwCQl8aWYgZGVzdCBmb3JtYXQgaXMgc2luZ2xlCisJYmVxCWRlc3Rfc2dsCXx0aGVuIGJyYW5jaAorfAorfAlmYWxsIHRocm91Z2ggdG8gZGVzdF9kYmwKK3wKKworfAorfAlkZXN0X2RibCAtLS0gd3JpdGUgZG91YmxlIHByZWNpc2lvbiB2YWx1ZSB0byB1c2VyIHNwYWNlCit8Cit8SW5wdXQKK3wJYTAgLT4gZGVzdGluYXRpb24gYWRkcmVzcworfAlhMSAtPiBzb3VyY2UgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uCit8T3V0cHV0Cit8CWEwIC0+IGRlc3Ryb3llZAorfAlhMSAtPiBkZXN0cm95ZWQKK3wJZDAgLT4gMAorfAorfENoYW5nZXMgZXh0ZW5kZWQgcHJlY2lzaW9uIHRvIGRvdWJsZSBwcmVjaXNpb24uCit8IE5vdGU6IG5vIGF0dGVtcHQgaXMgbWFkZSB0byByb3VuZCB0aGUgZXh0ZW5kZWQgdmFsdWUgdG8gZG91YmxlLgorfAlkYmxfc2lnbiA9IGV4dF9zaWduCit8CWRibF9leHAgPSBleHRfZXhwIC0gJDNmZmYoZXh0IGJpYXMpICsgJDdmZihkYmwgYmlhcykKK3wJZ2V0IHJpZCBvZiBleHQgaW50ZWdlciBiaXQKK3wJZGJsX21hbnQgPSBleHRfbWFudHs2MjoxMn0KK3wKK3wJCS0tLS0tLS0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0KK3wgIGV4dGVuZGVkIC0+ICB8c3wgICAgZXhwICAgIHwgICB8MXwgbXMgbWFudCAgIHwgICAgfCBscyBtYW50ICAgICB8Cit8CQktLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tCit8CQkgOTUJICAgIDY0ICAgIDYzIDYyCSAgICAgIDMyICAgICAgMzEgICAgIDExCSAgMAorfAkJCQkgICAgIHwJCQkgICAgIHwKK3wJCQkJICAgICB8CQkJICAgICB8Cit8CQkJCSAgICAgfAkJCSAgICAgfAorfAkJCSAgICAgICAgICAgICB2CQkJICAgICB2Cit8CQkJICAgICAgLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tCit8ICBkb3VibGUgICAtPgkJICAgICAgfHN8ZXhwfCBtYW50ICB8ICAgfCAgbWFudCAgICAgICB8Cit8CQkJICAgICAgLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tCit8CQkJICAgICAgNjMgICAgIDUxICAgMzIgICAzMQkgICAgICAgMAorfAorZGVzdF9kYmw6CisJY2xybAklZDAJCXxjbGVhciBkMAorCW1vdmV3CUxPQ0FMX0VYKCVhMSksJWQwCXxnZXQgZXhwb25lbnQKKwlzdWJ3CSMweDNmZmYsJWQwCXxzdWJ0cmFjdCBleHRlbmRlZCBwcmVjaXNpb24gYmlhcworCWNtcHcJIzB4NDAwMCwlZDAJfGNoZWNrIGlmIGluZgorCWJlcXMJaW5mCQl8aWYgc28sIHNwZWNpYWwgY2FzZQorCWFkZHcJIzB4M2ZmLCVkMAl8YWRkIGRvdWJsZSBwcmVjaXNpb24gYmlhcworCXN3YXAJJWQwCQl8ZDAgbm93IGluIHVwcGVyIHdvcmQKKwlsc2xsCSM0LCVkMAkJfGQwIG5vdyBpbiBwcm9wZXIgcGxhY2UgZm9yIGRibCBwcmVjIGV4cAorCXRzdGIJTE9DQUxfU0dOKCVhMSkKKwliZXFzCWdldF9tYW50CXxpZiBwb3NpdGl2ZSwgZ28gcHJvY2VzcyBtYW50aXNzYQorCWJzZXRsCSMzMSwlZDAJCXxpZiBuZWdhdGl2ZSwgcHV0IGluIHNpZ24gaW5mb3JtYXRpb24KK3wJCQkJOyBiZWZvcmUgY29udGludWluZworCWJyYXMJZ2V0X21hbnQJfGdvIHByb2Nlc3MgbWFudGlzc2EKK2luZjoKKwltb3ZlbAkjMHg3ZmYwMDAwMCwlZDAJfGxvYWQgZGJsIGluZiBleHBvbmVudAorCWNscmwJTE9DQUxfSEkoJWExKQl8Y2xlYXIgbXNiCisJdHN0YglMT0NBTF9TR04oJWExKQorCWJlcXMJZGJsX2luZgkJfGlmIHBvc2l0aXZlLCBnbyBhaGVhZCBhbmQgd3JpdGUgaXQKKwlic2V0bAkjMzEsJWQwCQl8aWYgbmVnYXRpdmUgcHV0IGluIHNpZ24gaW5mb3JtYXRpb24KK2RibF9pbmY6CisJbW92ZWwJJWQwLExPQ0FMX0VYKCVhMSkJfHB1dCB0aGUgbmV3IGV4cCBiYWNrIG9uIHRoZSBzdGFjaworCWJyYXMJZGJsX3dydAorZ2V0X21hbnQ6CisJbW92ZWwJTE9DQUxfSEkoJWExKSwlZDEJfGdldCBtcyBtYW50aXNzYQorCWJmZXh0dQklZDF7IzE6IzIwfSwlZDEJfGdldCB1cHBlciAyMCBiaXRzIG9mIG1zCisJb3JsCSVkMSwlZDAJCXxwdXQgdGhlc2UgYml0cyBpbiBtcyB3b3JkIG9mIGRvdWJsZQorCW1vdmVsCSVkMCxMT0NBTF9FWCglYTEpCXxwdXQgdGhlIG5ldyBleHAgYmFjayBvbiB0aGUgc3RhY2sKKwltb3ZlbAlMT0NBTF9ISSglYTEpLCVkMQl8Z2V0IG1zIG1hbnRpc3NhCisJbW92ZWwJIzIxLCVkMAkJfGxvYWQgc2hpZnQgY291bnQKKwlsc2xsCSVkMCwlZDEJCXxwdXQgbG93ZXIgMTEgYml0cyBpbiB1cHBlciBiaXRzCisJbW92ZWwJJWQxLExPQ0FMX0hJKCVhMSkJfGJ1aWxkIGxvd2VyIGx3b3JkIGluIG1lbW9yeQorCW1vdmVsCUxPQ0FMX0xPKCVhMSksJWQxCXxnZXQgbHMgbWFudGlzc2EKKwliZmV4dHUJJWQxeyMwOiMyMX0sJWQwCXxnZXQgbHMgMjEgYml0cyBvZiBkb3VibGUKKwlvcmwJJWQwLExPQ0FMX0hJKCVhMSkJfHB1dCB0aGVtIGluIGRvdWJsZSByZXN1bHQKK2RibF93cnQ6CisJbW92ZWwJIzB4OCwlZDAJCXxieXRlIGNvdW50IGZvciBkb3VibGUgcHJlY2lzaW9uIG51bWJlcgorCWV4ZwklYTAsJWExCQl8YTA9c3VwZXJ2aXNvciBzb3VyY2UsIGExPXVzZXIgZGVzdAorCWJzcmwJbWVtX3dyaXRlCXxtb3ZlIHRoZSBudW1iZXIgdG8gdGhlIHVzZXIncyBtZW1vcnkKKwlydHMKK3wKK3wJZGVzdF9zZ2wgLS0tIHdyaXRlIHNpbmdsZSBwcmVjaXNpb24gdmFsdWUgdG8gdXNlciBzcGFjZQorfAorfElucHV0Cit8CWEwIC0+IGRlc3RpbmF0aW9uIGFkZHJlc3MKK3wJYTEgLT4gc291cmNlIGluIGV4dGVuZGVkIHByZWNpc2lvbgorfAorfE91dHB1dAorfAlhMCAtPiBkZXN0cm95ZWQKK3wJYTEgLT4gZGVzdHJveWVkCit8CWQwIC0+IDAKK3wKK3xDaGFuZ2VzIGV4dGVuZGVkIHByZWNpc2lvbiB0byBzaW5nbGUgcHJlY2lzaW9uLgorfAlzZ2xfc2lnbiA9IGV4dF9zaWduCit8CXNnbF9leHAgPSBleHRfZXhwIC0gJDNmZmYoZXh0IGJpYXMpICsgJDdmKHNnbCBiaWFzKQorfAlnZXQgcmlkIG9mIGV4dCBpbnRlZ2VyIGJpdAorfAlzZ2xfbWFudCA9IGV4dF9tYW50ezYyOjEyfQorfAorfAkJLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLQorfCAgZXh0ZW5kZWQgLT4gIHxzfCAgICBleHAgICAgfCAgIHwxfCBtcyBtYW50ICAgfCAgICB8IGxzIG1hbnQgICAgIHwKK3wJCS0tLS0tLS0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0KK3wJCSA5NQkgICAgNjQgICAgNjMgNjIJICAgNDAgMzIgICAgICAzMSAgICAgMTIJICAwCit8CQkJCSAgICAgfAkgICB8Cit8CQkJCSAgICAgfAkgICB8Cit8CQkJCSAgICAgfAkgICB8Cit8CQkJICAgICAgICAgICAgIHYgICAgIHYKK3wJCQkgICAgICAtLS0tLS0tLS0tLS0tLS0KK3wgIHNpbmdsZSAgIC0+CQkgICAgICB8c3xleHB8IG1hbnQgIHwKK3wJCQkgICAgICAtLS0tLS0tLS0tLS0tLS0KK3wJCQkgICAgICAzMSAgICAgMjIgICAgIDAKK3wKK2Rlc3Rfc2dsOgorCWNscmwJJWQwCisJbW92ZXcJTE9DQUxfRVgoJWExKSwlZDAJfGdldCBleHBvbmVudAorCXN1YncJIzB4M2ZmZiwlZDAJfHN1YnRyYWN0IGV4dGVuZGVkIHByZWNpc2lvbiBiaWFzCisJY21wdwkjMHg0MDAwLCVkMAl8Y2hlY2sgaWYgaW5mCisJYmVxcwlzaW5mCQl8aWYgc28sIHNwZWNpYWwgY2FzZQorCWFkZHcJIzB4N2YsJWQwCQl8YWRkIHNpbmdsZSBwcmVjaXNpb24gYmlhcworCXN3YXAJJWQwCQl8cHV0IGV4cCBpbiB1cHBlciB3b3JkIG9mIGQwCisJbHNsbAkjNywlZDAJCXxzaGlmdCBpdCBpbnRvIHNpbmdsZSBleHAgYml0cworCXRzdGIJTE9DQUxfU0dOKCVhMSkKKwliZXFzCWdldF9zbWFuCXxpZiBwb3NpdGl2ZSwgY29udGludWUKKwlic2V0bAkjMzEsJWQwCQl8aWYgbmVnYXRpdmUsIHB1dCBpbiBzaWduIGZpcnN0CisJYnJhcwlnZXRfc21hbgl8Z2V0IG1hbnRpc3NhCitzaW5mOgorCW1vdmVsCSMweDdmODAwMDAwLCVkMAl8bG9hZCBzaW5nbGUgaW5mIGV4cCB0byBkMAorCXRzdGIJTE9DQUxfU0dOKCVhMSkKKwliZXFzCXNnbF93cnQJCXxpZiBwb3NpdGl2ZSwgY29udGludWUKKwlic2V0bAkjMzEsJWQwCQl8aWYgbmVnYXRpdmUsIHB1dCBpbiBzaWduIGluZm8KKwlicmFzCXNnbF93cnQKKworZ2V0X3NtYW46CisJbW92ZWwJTE9DQUxfSEkoJWExKSwlZDEJfGdldCBtcyBtYW50aXNzYQorCWJmZXh0dQklZDF7IzE6IzIzfSwlZDEJfGdldCB1cHBlciAyMyBiaXRzIG9mIG1zCisJb3JsCSVkMSwlZDAJCXxwdXQgdGhlc2UgYml0cyBpbiBtcyB3b3JkIG9mIHNpbmdsZQorCitzZ2xfd3J0OgorCW1vdmVsCSVkMCxMX1NDUjEoJWE2KQl8cHV0IHRoZSBuZXcgZXhwIGJhY2sgb24gdGhlIHN0YWNrCisJbW92ZWwJIzB4NCwlZDAJCXxieXRlIGNvdW50IGZvciBzaW5nbGUgcHJlY2lzaW9uIG51bWJlcgorCXRzdGwJJWEwCQl8dXNlcnMgZGVzdGluYXRpb24gYWRkcmVzcworCWJlcXMJc2dsX0RuCQl8ZGVzdGluYXRpb24gaXMgYSBkYXRhIHJlZ2lzdGVyCisJZXhnCSVhMCwlYTEJCXxhMD1zdXBlcnZpc29yIHNvdXJjZSwgYTE9dXNlciBkZXN0CisJbGVhbAlMX1NDUjEoJWE2KSwlYTAJfHBvaW50IGEwIHRvIGRhdGEKKwlic3JsCW1lbV93cml0ZQl8bW92ZSB0aGUgbnVtYmVyIHRvIHRoZSB1c2VyJ3MgbWVtb3J5CisJcnRzCitzZ2xfRG46CisJYnNybAlnZXRfZmxpbmUJfHJldHVybnMgZmxpbmUgd29yZCBpbiBkMAorCWFuZHcJIzB4NywlZDAJCXxpc29sYXRlIHJlZ2lzdGVyIG51bWJlcgorCW1vdmVsCSVkMCwlZDEJCXxkMSBoYXMgc2l6ZTpyZWcgZm9ybWF0dGVkIGZvciByZWdfZGVzdAorCW9ybAkjMHgxMCwlZDEJCXxyZWdfZGVzdCB3YW50cyBzaXplIGFkZGVkIHRvIHJlZyMKKwlicmFsCXJlZ19kZXN0CXxzaXplIGlzIFgsIHJ0cyBpbiByZWdfZGVzdCB3aWxsCit8CQkJCTtyZXR1cm4gdG8gY2FsbGVyIG9mIGRlc3Rfc2dsCisKK2Rlc3RfZXh0OgorCXRzdGIJTE9DQUxfU0dOKCVhMSkJfHB1dCBiYWNrIHNpZ24gaW50byBleHBvbmVudCB3b3JkCisJYmVxcwlkc3R4X2NvbnQKKwlic2V0Ygkjc2lnbl9iaXQsTE9DQUxfRVgoJWExKQorZHN0eF9jb250OgorCWNscmIJTE9DQUxfU0dOKCVhMSkJfGNsZWFyIG91dCB0aGUgc2lnbiBieXRlCisKKwltb3ZlbAkjMHgwYywlZDAJCXxieXRlIGNvdW50IGZvciBleHRlbmRlZCBudW1iZXIKKwlleGcJJWEwLCVhMQkJfGEwPXN1cGVydmlzb3Igc291cmNlLCBhMT11c2VyIGRlc3QKKwlic3JsCW1lbV93cml0ZQl8bW92ZSB0aGUgbnVtYmVyIHRvIHRoZSB1c2VyJ3MgbWVtb3J5CisJcnRzCisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC94X3VuZmwuUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3hfdW5mbC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3N2ZjYzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvZnBzcDA0MC94X3VuZmwuUwpAQCAtMCwwICsxLDI2OSBAQAorfAorfAl4X3VuZmwuc2EgMy40IDcvMS85MQorfAorfAlmcHNwX3VuZmwgLS0tIEZQU1AgaGFuZGxlciBmb3IgdW5kZXJmbG93IGV4Y2VwdGlvbgorfAorfCBUcmFwIGRpc2FibGVkIHJlc3VsdHMKK3wJRm9yIDg4MS8yIGNvbXBhdGliaWxpdHksIHN3IG11c3QgZGVub3JtYWxpemUgdGhlIGludGVybWVkaWF0ZQorfCByZXN1bHQsIHRoZW4gc3RvcmUgdGhlIHJlc3VsdC4gIERlbm9ybWFsaXphdGlvbiBpcyBhY2NvbXBsaXNoZWQKK3wgYnkgdGFraW5nIHRoZSBpbnRlcm1lZGlhdGUgcmVzdWx0ICh3aGljaCBpcyBhbHdheXMgbm9ybWFsaXplZCkgYW5kCit8IHNoaWZ0aW5nIHRoZSBtYW50aXNzYSByaWdodCB3aGlsZSBpbmNyZW1lbnRpbmcgdGhlIGV4cG9uZW50IHVudGlsCit8IGl0IGlzIGVxdWFsIHRvIHRoZSBkZW5vcm1hbGl6ZWQgZXhwb25lbnQgZm9yIHRoZSBkZXN0aW5hdGlvbgorfCBmb3JtYXQuICBBZnRlciBkZW5vcm1hbGl6YXRpb24sIHRoZSByZXN1bHQgaXMgcm91bmRlZCB0byB0aGUKK3wgZGVzdGluYXRpb24gZm9ybWF0LgorfAorfCBUcmFwIGVuYWJsZWQgcmVzdWx0cworfAlBbGwgdHJhcCBkaXNhYmxlZCBjb2RlIGFwcGxpZXMuCUluIGFkZGl0aW9uIHRoZSBleGNlcHRpb25hbAorfCBvcGVyYW5kIG5lZWRzIHRvIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSB1c2VyIHdpdGggYSBiaWFzIG9mICQ2MDAwCit8IGFkZGVkIHRvIHRoZSBleHBvbmVudC4KK3wKKworfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworWF9VTkZMOgl8aWRudCAgICAyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCisJfHhyZWYJZGVub3JtCisJfHhyZWYJcm91bmQKKwl8eHJlZglzdG9yZQorCXx4cmVmCWdfcm5kcHIKKwl8eHJlZglnX29wY2xzCisJfHhyZWYJZ19kZm10b3UKKwl8eHJlZglyZWFsX3VuZmwKKwl8eHJlZglyZWFsX2luZXgKKwl8eHJlZglmcHNwX2RvbmUKKwl8eHJlZgliMTIzOF9maXgKKworCS5nbG9iYWwJZnBzcF91bmZsCitmcHNwX3VuZmw6CisJbGluawkJJWE2LCMtTE9DQUxfU0laRQorCWZzYXZlCQktKCVhNykKKwltb3ZlbWwJCSVkMC0lZDEvJWEwLSVhMSxVU0VSX0RBKCVhNikKKwlmbW92ZW14CSVmcDAtJWZwMyxVU0VSX0ZQMCglYTYpCisJZm1vdmVtbAklZnBjci8lZnBzci8lZnBpYXIsVVNFUl9GUENSKCVhNikKKworfAorCWJzcmwJCXVuZl9yZXMJfGRlbm9ybWFsaXplLCByb3VuZCAmIHN0b3JlIGludGVybSBvcAorfAorfCBJZiB1bmRlcmZsb3cgZXhjZXB0aW9ucyBhcmUgbm90IGVuYWJsZWQsIGNoZWNrIGZvciBpbmV4YWN0Cit8IGV4Y2VwdGlvbgorfAorCWJ0c3RiCQkjdW5mbF9iaXQsRlBDUl9FTkFCTEUoJWE2KQorCWJlcXMJCWNrX2luZXgKKworCWJ0c3RiCQkjRTMsRV9CWVRFKCVhNikKKwliZXFzCQlub19lM18xCit8Cit8IENsZWFyIGRpcnR5IGJpdCBvbiBkZXN0IHJlc2lzdGVyIGluIHRoZSBmcmFtZSBiZWZvcmUgYnJhbmNoaW5nCit8IHRvIGIxMjM4X2ZpeC4KK3wKKwliZmV4dHUJCUNNRFJFRzNCKCVhNil7IzY6IzN9LCVkMAl8Z2V0IGRlc3QgcmVnIG5vCisJYmNscmIJCSVkMCxGUFJfRElSVFlfQklUUyglYTYpCXxjbHIgZGVzdCBkaXJ0eSBiaXQKKwlic3JsCQliMTIzOF9maXgJCXx0ZXN0IGZvciBidWcxMjM4IGNhc2UKKwltb3ZlbAkJVVNFUl9GUFNSKCVhNiksRlBTUl9TSEFET1coJWE2KQorCW9ybAkJI3N4X21hc2ssRV9CWVRFKCVhNikKK25vX2UzXzE6CisJbW92ZW1sCQlVU0VSX0RBKCVhNiksJWQwLSVkMS8lYTAtJWExCisJZm1vdmVteAlVU0VSX0ZQMCglYTYpLCVmcDAtJWZwMworCWZtb3ZlbWwJVVNFUl9GUENSKCVhNiksJWZwY3IvJWZwc3IvJWZwaWFyCisJZnJlc3RvcmUJKCVhNykrCisJdW5sawkJJWE2CisJYnJhbAkJcmVhbF91bmZsCit8Cit8IEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgZWl0aGVyIGluZXgyIG9yIGluZXgxIGV4Y2VwdGlvbnMgd2l0aCB0aGUKK3wgdW5mbC4gIElmIHRoZSBpbmV4IGVuYWJsZSBiaXQgaXMgc2V0IGluIHRoZSBGUENSLCBhbmQgZWl0aGVyCit8IGluZXgyIG9yIGluZXgxIG9jY3VycmVkLCB3ZSBtdXN0IGNsZWFuIHVwIGFuZCBicmFuY2ggdG8gdGhlCit8IHJlYWwgaW5leCBoYW5kbGVyLgorfAorY2tfaW5leDoKKwltb3ZlYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDAKKwlhbmRiCQlGUFNSX0VYQ0VQVCglYTYpLCVkMAorCWFuZGliCQkjMHgzLCVkMAorCWJlcXMJCXVuZmxfZG9uZQorCit8Cit8IEluZXhhY3QgZW5hYmxlZCBhbmQgcmVwb3J0ZWQsIGFuZCB3ZSBtdXN0IHRha2UgYW4gaW5leGFjdCBleGNlcHRpb24KK3wKK3Rha2VfaW5leDoKKwlidHN0YgkJI0UzLEVfQllURSglYTYpCisJYmVxcwkJbm9fZTNfMgorfAorfCBDbGVhciBkaXJ0eSBiaXQgb24gZGVzdCByZXNpc3RlciBpbiB0aGUgZnJhbWUgYmVmb3JlIGJyYW5jaGluZworfCB0byBiMTIzOF9maXguCit8CisJYmZleHR1CQlDTURSRUczQiglYTYpeyM2OiMzfSwlZDAJfGdldCBkZXN0IHJlZyBubworCWJjbHJiCQklZDAsRlBSX0RJUlRZX0JJVFMoJWE2KQl8Y2xyIGRlc3QgZGlydHkgYml0CisJYnNybAkJYjEyMzhfZml4CQl8dGVzdCBmb3IgYnVnMTIzOCBjYXNlCisJbW92ZWwJCVVTRVJfRlBTUiglYTYpLEZQU1JfU0hBRE9XKCVhNikKKwlvcmwJCSNzeF9tYXNrLEVfQllURSglYTYpCitub19lM18yOgorCW1vdmViCQkjSU5FWF9WRUMsRVhDX1ZFQysxKCVhNikKKwltb3ZlbWwgICAgICAgICBVU0VSX0RBKCVhNiksJWQwLSVkMS8lYTAtJWExCisJZm1vdmVteCAgICAgICAgVVNFUl9GUDAoJWE2KSwlZnAwLSVmcDMKKwlmbW92ZW1sICAgICAgICBVU0VSX0ZQQ1IoJWE2KSwlZnBjci8lZnBzci8lZnBpYXIKKwlmcmVzdG9yZSAgICAgICAgKCVhNykrCisJdW5sayAgICAgICAgICAgICVhNgorCWJyYWwJCXJlYWxfaW5leAorCit1bmZsX2RvbmU6CisJYmNscmIJCSNFMyxFX0JZVEUoJWE2KQorCWJlcXMJCWUxX3NldAkJfGlmIHNldCB0aGVuIGJyYW5jaAorfAorfCBDbGVhciBkaXJ0eSBiaXQgb24gZGVzdCByZXNpc3RlciBpbiB0aGUgZnJhbWUgYmVmb3JlIGJyYW5jaGluZworfCB0byBiMTIzOF9maXguCit8CisJYmZleHR1CQlDTURSRUczQiglYTYpeyM2OiMzfSwlZDAJCXxnZXQgZGVzdCByZWcgbm8KKwliY2xyYgkJJWQwLEZQUl9ESVJUWV9CSVRTKCVhNikJfGNsciBkZXN0IGRpcnR5IGJpdAorCWJzcmwJCWIxMjM4X2ZpeAkJfHRlc3QgZm9yIGJ1ZzEyMzggY2FzZQorCW1vdmVsCQlVU0VSX0ZQU1IoJWE2KSxGUFNSX1NIQURPVyglYTYpCisJb3JsCQkjc3hfbWFzayxFX0JZVEUoJWE2KQorCW1vdmVtbAkJVVNFUl9EQSglYTYpLCVkMC0lZDEvJWEwLSVhMQorCWZtb3ZlbXgJVVNFUl9GUDAoJWE2KSwlZnAwLSVmcDMKKwlmbW92ZW1sCVVTRVJfRlBDUiglYTYpLCVmcGNyLyVmcHNyLyVmcGlhcgorCWZyZXN0b3JlCSglYTcpKworCXVubGsJCSVhNgorCWJyYWwJCWZwc3BfZG9uZQorZTFfc2V0OgorCW1vdmVtbAkJVVNFUl9EQSglYTYpLCVkMC0lZDEvJWEwLSVhMQorCWZtb3ZlbXgJVVNFUl9GUDAoJWE2KSwlZnAwLSVmcDMKKwlmbW92ZW1sCVVTRVJfRlBDUiglYTYpLCVmcGNyLyVmcHNyLyVmcGlhcgorCXVubGsJCSVhNgorCWJyYWwJCWZwc3BfZG9uZQorfAorfAl1bmZfcmVzIC0tLSB1bmRlcmZsb3cgcmVzdWx0IGNhbGN1bGF0aW9uCit8Cit1bmZfcmVzOgorCWJzcmwJCWdfcm5kcHIJCXxyZXR1cm5zIFJORF9QUkVDIGluIGQwIDA9ZXh0LAorfAkJCQkJOzE9c2dsLCAyPWRibAorfAkJCQkJO3dlIG5lZWQgdGhlIFJORF9QUkVDIGluIHRoZQorfAkJCQkJO3VwcGVyIHdvcmQgZm9yIHJvdW5kCisJbW92ZXcJCSMwLC0oJWE3KQorCW1vdmV3CQklZDAsLSglYTcpCXxjb3B5IFJORF9QUkVDIHRvIHN0YWNrCit8Cit8Cit8IElmIHRoZSBleGNlcHRpb24gYml0IHNldCBpcyBFMywgdGhlIGV4Y2VwdGlvbmFsIG9wZXJhbmQgZnJvbSB0aGUKK3wgZnB1IGlzIGluIFdCVEVNUDsgZWxzZSBpdCBpcyBpbiBGUFRFTVAuCit8CisJYnRzdGIJCSNFMyxFX0JZVEUoJWE2KQorCWJlcXMJCXVuZl9FMQordW5mX0UzOgorCWxlYQkJV0JURU1QKCVhNiksJWEwCXxhMCBub3cgcG9pbnRzIHRvIG9wZXJhbmQKK3wKK3wgVGVzdCBmb3IgZnNnbGRpdiBhbmQgZnNnbG11bC4gIElmIHRoZSBpbnN0IHdhcyBvbmUgb2YgdGhlc2UsIHRoZW4KK3wgZm9yY2UgdGhlIHByZWNpc2lvbiB0byBleHRlbmRlZCBmb3IgdGhlIGRlbm9ybSByb3V0aW5lLiAgVXNlCit8IHRoZSB1c2VyJ3MgcHJlY2lzaW9uIGZvciB0aGUgcm91bmQgcm91dGluZS4KK3wKKwltb3ZldwkJQ01EUkVHM0IoJWE2KSwlZDEJfGNoZWNrIGZvciBmc2dsZGl2IG9yIGZzZ2xtdWwKKwlhbmRpdwkJIzB4N2YsJWQxCisJY21waXcJCSMweDMwLCVkMQkJfGNoZWNrIGZvciBzZ2xkaXYKKwliZXFzCQl1bmZfc2dsCisJY21waXcJCSMweDMzLCVkMQkJfGNoZWNrIGZvciBzZ2xtdWwKKwlibmVzCQl1bmZfY29udAl8aWYgbm90LCB1c2UgZnBjciBwcmVjIGluIHJvdW5kCit1bmZfc2dsOgorCWNscmwJCSVkMAorCW1vdmV3CQkjMHgxLCglYTcpCXxvdmVycmlkZSBnX3JuZHByIHByZWNpc2lvbgorfAkJCQkJO2ZvcmNlIHNpbmdsZQorCWJyYXMJCXVuZl9jb250Cit1bmZfRTE6CisJbGVhCQlGUFRFTVAoJWE2KSwlYTAJfGEwIG5vdyBwb2ludHMgdG8gb3BlcmFuZAordW5mX2NvbnQ6CisJYmNscmIJCSNzaWduX2JpdCxMT0NBTF9FWCglYTApCXxjbGVhciBzaWduIGJpdAorCXNuZQkJTE9DQUxfU0dOKCVhMCkJCXxzdG9yZSBzaWduCisKKwlic3JsCQlkZW5vcm0JCXxyZXR1cm5zIGRlbm9ybSwgYTAgcG9pbnRzIHRvIGl0Cit8Cit8IFdBUk5JTkc6Cit8CQkJCTtkMCBoYXMgZ3VhcmQscm91bmQgc3RpY2t5IGJpdAorfAkJCQk7bWFrZSBzdXJlIHRoYXQgaXQgaXMgbm90IGNvcnJ1cHRlZAorfAkJCQk7YmVmb3JlIGl0IHJlYWNoZXMgdGhlIHJvdW5kIHN1YnJvdXRpbmUKK3wJCQkJO2Fsc28gZW5zdXJlIHRoYXQgYTAgaXNuJ3QgY29ycnVwdGVkCisKK3wKK3wgU2V0IHVwIGQxIGZvciByb3VuZCBzdWJyb3V0aW5lIGQxIGNvbnRhaW5zIHRoZSBQUkVDL01PREUKK3wgaW5mb3JtYXRpb24gcmVzcGVjdGl2ZWx5IG9uIHVwcGVyL2xvd2VyIHJlZ2lzdGVyIGhhbHZlcy4KK3wKKwliZmV4dHUJCUZQQ1JfTU9ERSglYTYpeyMyOiMyfSwlZDEJfGdldCBtb2RlIGZyb20gRlBDUgorfAkJCQkJCTttb2RlIGluIGxvd2VyIGQxCisJYWRkbAkJKCVhNykrLCVkMQkJfG1lcmdlIFBSRUMvTU9ERQorfAorfCBXQVJOSU5HOiBhMCBhbmQgZDAgYXJlIGFzc3VtZWQgdG8gYmUgaW50YWN0IGJldHdlZW4gdGhlIGRlbm9ybSBhbmQKK3wgcm91bmQgc3Vicm91dGluZXMuIEFsbCBjb2RlIGJldHdlZW4gdGhlc2UgdHdvIHN1YnJvdXRpbmVzCit8IG11c3Qgbm90IGNvcnJ1cHQgYTAgYW5kIGQwLgorfAorfAorfCBQZXJmb3JtIFJvdW5kCit8CUlucHV0OgkJYTAgcG9pbnRzIHRvIGlucHV0IG9wZXJhbmQKK3wJCQlkMHszMToyOX0gaGFzIGd1YXJkLCByb3VuZCwgc3RpY2t5Cit8CQkJZDF7MDE6MDB9IGhhcyByb3VuZGluZyBtb2RlCit8CQkJZDF7MTc6MTZ9IGhhcyByb3VuZGluZyBwcmVjaXNpb24KK3wJT3V0cHV0OgkJYTAgcG9pbnRzIHRvIHJvdW5kZWQgb3BlcmFuZAorfAorCisJYnNybAkJcm91bmQJCXxyZXR1cm5zIHJvdW5kZWQgZGVub3JtIGF0IChhMCkKK3wKK3wgRGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHN0b3JlIHRvIG1lbW9yeSB2cy4gc3RvcmUgdG8gcmVnaXN0ZXIKK3wKK3VuZl9zdG9yZToKKwlic3JsCQlnX29wY2xzCQl8cmV0dXJucyBvcGNsYXNzIGluIGQwezI6MH0KKwljbXBpYgkJIzB4MywlZDAKKwlibmVzCQlub3Rfb3BjMDExCit8Cit8IEF0IHRoaXMgcG9pbnQsIGEgc3RvcmUgdG8gbWVtb3J5IGlzIHBlbmRpbmcKK3wKK29wYzAxMToKKwlic3JsCQlnX2RmbXRvdQorCXRzdGIJCSVkMAorCWJlcXMJCWV4dF9vcGMwMTEJfElmIGV4dGVuZGVkLCBkbyBub3Qgc3VidHJhY3QKK3wJCQkJO0lmIGRlc3RpbmF0aW9uIGZvcm1hdCBpcyBzZ2wvZGJsLAorCXRzdGIJCUxPQ0FMX0hJKCVhMCkJfElmIHJvdW5kZWQgcmVzdWx0IGlzIG5vcm1hbCxkb24ndAorfAkJCQkJO3N1YnRyYWN0CisJYm1pcwkJZXh0X29wYzAxMQorCXN1YnF3CQkjMSxMT0NBTF9FWCglYTApCXxhY2NvdW50IGZvciBkZW5vcm0gYmlhcyB2cy4KK3wJCQkJO25vcm1hbGl6ZWQgYmlhcworfAkJCQk7ICAgICAgICAgIG5vcm1hbGl6ZWQgICBkZW5vcm1hbGl6ZWQKK3wJCQkJO3NpbmdsZSAgICAgICAkN2YgICAgICAgICAgICQ3ZQorfAkJCQk7ZG91YmxlICAgICAgICQzZmYgICAgICAgICAgJDNmZQorfAorZXh0X29wYzAxMToKKwlic3JsCQlzdG9yZQkJfHN0b3JlcyB0byBtZW1vcnkKKwlicmFzCQl1bmZfZG9uZQl8ZmluaXNoIHVwCisKK3wKK3wgQXQgdGhpcyBwb2ludCwgYSBzdG9yZSB0byBhIGZsb2F0IHJlZ2lzdGVyIGlzIHBlbmRpbmcKK3wKK25vdF9vcGMwMTE6CisJYnNybAkJc3RvcmUJfHN0b3JlcyB0byBmbG9hdCByZWdpc3RlcgorfAkJCQk7YTAgaXMgbm90IGNvcnJ1cHRlZCBvbiBhIHN0b3JlIHRvIGEKK3wJCQkJO2Zsb2F0IHJlZ2lzdGVyLgorfAorfCBTZXQgdGhlIGNvbmRpdGlvbiBjb2RlcyBhY2NvcmRpbmcgdG8gcmVzdWx0Cit8CisJdHN0bAkJTE9DQUxfSEkoJWEwKQl8Y2hlY2sgdXBwZXIgbWFudGlzc2EKKwlibmVzCQlja19zZ24KKwl0c3RsCQlMT0NBTF9MTyglYTApCXxjaGVjayBsb3dlciBtYW50aXNzYQorCWJuZXMJCWNrX3NnbgorCWJzZXRiCQkjel9iaXQsRlBTUl9DQyglYTYpIHxzZXQgY29uZGl0aW9uIGNvZGVzIGlmIHplcm8KK2NrX3NnbjoKKwlidHN0YgkJI3NpZ25fYml0LExPQ0FMX0VYKCVhMCkJfGNoZWNrIHRoZSBzaWduIGJpdAorCWJlcXMJCXVuZl9kb25lCisJYnNldGIJCSNuZWdfYml0LEZQU1JfQ0MoJWE2KQorCit8Cit8IEZpbmlzaC4KK3wKK3VuZl9kb25lOgorCWJ0c3RiCQkjaW5leDJfYml0LEZQU1JfRVhDRVBUKCVhNikKKwliZXFzCQlub19hdW5mbAorCWJzZXRiCQkjYXVuZmxfYml0LEZQU1JfQUVYQ0VQVCglYTYpCitub19hdW5mbDoKKwlydHMKKworCXxlbmQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9mcHNwMDQwL3hfdW5pbXAuUyBiL2FyY2gvbTY4ay9mcHNwMDQwL3hfdW5pbXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjBjYjk0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAveF91bmltcC5TCkBAIC0wLDAgKzEsNzcgQEAKK3wKK3wJeF91bmltcC5zYSAzLjMgNy8xLzkxCit8Cit8CWZwc3BfdW5pbXAgLS0tIEZQU1AgaGFuZGxlciBmb3IgdW5pbXBsZW1lbnRlZCBpbnN0cnVjdGlvbgorfAlleGNlcHRpb24uCit8Cit8IEludm9rZWQgd2hlbiB0aGUgdXNlciBwcm9ncmFtIGVuY291bnRlcnMgYSBmbG9hdGluZy1wb2ludAorfCBvcC1jb2RlIHRoYXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydC4gIFRyYXAgdmVjdG9yIyAxMQorfCAoU2VlIHRhYmxlIDgtMSBNQzY4MDMwIFVzZXIncyBNYW51YWwpLgorfAorfAorfCBOb3RlOiBBbiBmc2F2ZSBmb3IgYW4gdW5pbXBsZW1lbnRlZCBpbnN0LiB3aWxsIGNyZWF0ZSBhIHNob3J0Cit8IGZzYXZlIHN0YWNrLgorfAorfCAgSW5wdXQ6IDEuIFNpeCB3b3JkIHN0YWNrIGZyYW1lIGZvciB1bmltcGxlbWVudGVkIGluc3QsIGZvdXIgd29yZAorfCAgICAgICAgICAgIGZvciBpbGxlZ2FsCit8ICAgICAgICAgICAgKFNlZSB0YWJsZSA4LTcgTUM2ODAzMCBVc2VyJ3MgTWFudWFsKS4KK3wgICAgICAgICAyLiBVbmltcCAoc2hvcnQpIGZzYXZlIHN0YXRlIGZyYW1lIGNyZWF0ZWQgaGVyZSBieSBmc2F2ZQorfCAgICAgICAgICAgIGluc3RydWN0aW9uLgorfAorfAorfAkJQ29weXJpZ2h0IChDKSBNb3Rvcm9sYSwgSW5jLiAxOTkwCit8CQkJQWxsIFJpZ2h0cyBSZXNlcnZlZAorfAorfAlUSElTIElTIFVOUFVCTElTSEVEIFBST1BSSUVUQVJZIFNPVVJDRSBDT0RFIE9GIE1PVE9ST0xBCit8CVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90IGV2aWRlbmNlIGFueQorfAlhY3R1YWwgb3IgaW50ZW5kZWQgcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4KKworWF9VTklNUDoJfGlkbnQgICAgMiwxIHwgTW90b3JvbGEgMDQwIEZsb2F0aW5nIFBvaW50IFNvZnR3YXJlIFBhY2thZ2UKKworCXxzZWN0aW9uCTgKKworI2luY2x1ZGUgImZwc3AuaCIKKworCXx4cmVmCWdldF9vcAorCXx4cmVmCWRvX2Z1bmMKKwl8eHJlZglzdG9fcmVzCisJfHhyZWYJZ2VuX2V4Y2VwdAorCXx4cmVmCWZwc3BfZm10X2Vycm9yCisKKwkuZ2xvYmFsCWZwc3BfdW5pbXAKKwkuZ2xvYmFsCXVuaV8yCitmcHNwX3VuaW1wOgorCWxpbmsJCSVhNiwjLUxPQ0FMX1NJWkUKKwlmc2F2ZQkJLSglYTcpCit1bmlfMjoKKwltb3ZlbWwJCSVkMC0lZDEvJWEwLSVhMSxVU0VSX0RBKCVhNikKKwlmbW92ZW14CSVmcDAtJWZwMyxVU0VSX0ZQMCglYTYpCisJZm1vdmVtbAklZnBjci8lZnBzci8lZnBpYXIsVVNFUl9GUENSKCVhNikKKwltb3ZlYgkJKCVhNyksJWQwCQl8dGVzdCBmb3IgdmFsaWQgdmVyc2lvbiBudW0KKwlhbmRpYgkJIzB4ZjAsJWQwCQl8dGVzdCBmb3IgJDR4CisJY21waWIJCSNWRVJfNCwlZDAJfG11c3QgYmUgJDR4IG9yIGV4aXQKKwlibmVsCQlmcHNwX2ZtdF9lcnJvcgorfAorfAlUZW1wb3JhcnkgRDI1QiBGaXgKK3wJVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgdXNlZCB0byBlbnN1cmUgdGhhdCB0aGUgRlBTUgorfAlleGNlcHRpb24gYnl0ZSBhbmQgY29uZGl0aW9uIGNvZGVzIGFyZSBjbGVhciBiZWZvcmUgcHJvY2VlZGluZworfAorCW1vdmVsCQlVU0VSX0ZQU1IoJWE2KSwlZDAKKwlhbmRsCQkjMHhGRjAwRkYsJWQwCXxjbGVhciBhbGwgYnV0IGFjY3J1ZWQgZXhjZXB0aW9ucworCW1vdmVsCQklZDAsVVNFUl9GUFNSKCVhNikKKwlmbW92ZWwJCSMwLCVGUFNSIHxjbGVhciBhbGwgdXNlciBiaXRzCisJZm1vdmVsCQkjMCwlRlBDUgl8Y2xlYXIgYWxsIHVzZXIgZXhjZXB0aW9ucyBmb3IgRlBTUAorCisJY2xyYgkJVUZMR19UTVAoJWE2KQl8Y2xyIGZsYWcgZm9yIHVuc3VwcCBkYXRhCisKKwlic3JsCQlnZXRfb3AJCXxnbyBnZXQgb3BlcmFuZChzKQorCWNscmIJCVNUT1JFX0ZMRyglYTYpCisJYnNybAkJZG9fZnVuYwkJfGRvIHRoZSBmdW5jdGlvbgorCWZzYXZlCQktKCVhNykJCXxjYXB0dXJlIHBvc3NpYmxlIGV4YyBzdGF0ZQorCXRzdGIJCVNUT1JFX0ZMRyglYTYpCisJYm5lcwkJbm9fc3RvcmUJfGlmIFNUT1JFX0ZMRyBpcyBzZXQsIG5vIHN0b3JlCisJYnNybAkJc3RvX3JlcwkJfHN0b3JlIHRoZSByZXN1bHQgaW4gdXNlciBzcGFjZQorbm9fc3RvcmU6CisJYnJhbAkJZ2VuX2V4Y2VwdAl8cG9zdCBhbnkgZXhjZXB0aW9ucyBhbmQgcmV0dXJuCisKKwl8ZW5kCmRpZmYgLS1naXQgYS9hcmNoL202OGsvZnBzcDA0MC94X3Vuc3VwcC5TIGIvYXJjaC9tNjhrL2Zwc3AwNDAveF91bnN1cHAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWM1NzI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2Zwc3AwNDAveF91bnN1cHAuUwpAQCAtMCwwICsxLDgzIEBACit8Cit8CXhfdW5zdXBwLnNhIDMuMyA3LzEvOTEKK3wKK3wJZnBzcF91bnN1cHAgLS0tIEZQU1AgaGFuZGxlciBmb3IgdW5zdXBwb3J0ZWQgZGF0YSB0eXBlIGV4Y2VwdGlvbgorfAorfCBUcmFwIHZlY3RvciAjNTUJKFNlZSB0YWJsZSA4LTEgTWM2ODAzMCBVc2VyJ3MgbWFudWFsKS4KK3wgSW52b2tlZCB3aGVuIHRoZSB1c2VyIHByb2dyYW0gZW5jb3VudGVycyBhIGRhdGEgZm9ybWF0IChwYWNrZWQpIHRoYXQKK3wgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBvciBhIGRhdGEgdHlwZSAoZGVub3JtYWxpemVkIG51bWJlcnMgb3IgdW4tCit8IG5vcm1hbGl6ZWQgbnVtYmVycykuCit8IE5vcm1hbGl6ZXMgZGVub3JtcyBhbmQgdW5ub3JtcywgdW5wYWNrcyBwYWNrZWQgbnVtYmVycyB0aGVuIHN0b3JlcworfCB0aGVtIGJhY2sgaW50byB0aGUgbWFjaGluZSB0byBsZXQgdGhlIDA0MCBmaW5pc2ggdGhlIG9wZXJhdGlvbi4KK3wKK3wgVW5zdXBwIGNhbGxzIHR3byByb3V0aW5lczoKK3wJMS4gZ2V0X29wIC0gIGdldHMgdGhlIG9wZXJhbmQocykKK3wJMi4gcmVzX2Z1bmMgLSByZXN0b3JlIHRoZSBmdW5jdGlvbiBiYWNrIGludG8gdGhlIDA0MCBvcgorfAkJCWlmIGZtb3ZlLnAgZnBtLDxlYT4gdGhlbiBwYWNrIHNvdXJjZSAoZnBtKQorfAkJCWFuZCBzdG9yZSBpbiB1c2VycyBtZW1vcnkgPGVhPi4KK3wKK3wgIElucHV0OiBMb25nIGZzYXZlIHN0YWNrIGZyYW1lCit8Cit8CisKK3wJCUNvcHlyaWdodCAoQykgTW90b3JvbGEsIEluYy4gMTk5MAorfAkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQKK3wKK3wJVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSBTT1VSQ0UgQ09ERSBPRiBNT1RPUk9MQQorfAlUaGUgY29weXJpZ2h0IG5vdGljZSBhYm92ZSBkb2VzIG5vdCBldmlkZW5jZSBhbnkKK3wJYWN0dWFsIG9yIGludGVuZGVkIHB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuCisKK1hfVU5TVVBQOgl8aWRudCAgICAyLDEgfCBNb3Rvcm9sYSAwNDAgRmxvYXRpbmcgUG9pbnQgU29mdHdhcmUgUGFja2FnZQorCisJfHNlY3Rpb24JOAorCisjaW5jbHVkZSAiZnBzcC5oIgorCisJfHhyZWYJZ2V0X29wCisJfHhyZWYJcmVzX2Z1bmMKKwl8eHJlZglnZW5fZXhjZXB0CisJfHhyZWYJZnBzcF9mbXRfZXJyb3IKKworCS5nbG9iYWwJZnBzcF91bnN1cHAKK2Zwc3BfdW5zdXBwOgorfAorCWxpbmsJCSVhNiwjLUxPQ0FMX1NJWkUKKwlmc2F2ZQkJLSglYTcpCisJbW92ZW1sCQklZDAtJWQxLyVhMC0lYTEsVVNFUl9EQSglYTYpCisJZm1vdmVteAklZnAwLSVmcDMsVVNFUl9GUDAoJWE2KQorCWZtb3ZlbWwJJWZwY3IvJWZwc3IvJWZwaWFyLFVTRVJfRlBDUiglYTYpCisKKworCW1vdmViCQkoJWE3KSxWRVJfVE1QKCVhNikgfHNhdmUgdmVyc2lvbiBudW1iZXIKKwltb3ZlYgkJKCVhNyksJWQwCQl8dGVzdCBmb3IgdmFsaWQgdmVyc2lvbiBudW0KKwlhbmRpYgkJIzB4ZjAsJWQwCQl8dGVzdCBmb3IgJDR4CisJY21waWIJCSNWRVJfNCwlZDAJfG11c3QgYmUgJDR4IG9yIGV4aXQKKwlibmVsCQlmcHNwX2ZtdF9lcnJvcgorCisJZm1vdmVsCQkjMCwlRlBTUgkJfGNsZWFyIGFsbCB1c2VyIHN0YXR1cyBiaXRzCisJZm1vdmVsCQkjMCwlRlBDUgkJfGNsZWFyIGFsbCB1c2VyIGNvbnRyb2wgYml0cworfAorfAlUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSB1c2VkIHRvIGVuc3VyZSB0aGF0IHRoZSBGUFNSCit8CWV4Y2VwdGlvbiBieXRlIGFuZCBjb25kaXRpb24gY29kZXMgYXJlIGNsZWFyIGJlZm9yZSBwcm9jZWVkaW5nLAorfAlleGNlcHQgaW4gdGhlIGNhc2Ugb2YgZm1vdmUsIHdoaWNoIGxlYXZlcyB0aGUgY2MncyBpbnRhY3QuCit8Cit1bnN1cHBfY29uOgorCW1vdmVsCQlVU0VSX0ZQU1IoJWE2KSwlZDEKKwlidHN0CQkjNSxDTURSRUcxQiglYTYpCXxsb29raW5nIGZvciBmbW92ZSBvdXQKKwlibmUJCWZtb3ZlX2NvbgorCWFuZGwJCSMweEZGMDBGRiwlZDEJfGNsZWFyIGFsbCBidXQgYWV4Y3MgYW5kIHFieXRlCisJYnJhcwkJZW5kX2ZpeAorZm1vdmVfY29uOgorCWFuZGwJCSMweDBGRkY0MEZGLCVkMQl8Y2xlYXIgYWxsIGJ1dCBjYydzLCBzbmFuIGJpdCwgYWV4Y3MsIGFuZCBxYnl0ZQorZW5kX2ZpeDoKKwltb3ZlbAkJJWQxLFVTRVJfRlBTUiglYTYpCisKKwlzdAkJVUZMR19UTVAoJWE2KQl8c2V0IGZsYWcgZm9yIHVuc3VwcCBkYXRhCisKKwlic3JsCQlnZXRfb3AJCXxldmVyeXRoaW5nIG9rYXksIGdvIGdldCBvcGVyYW5kKHMpCisJYnNybAkJcmVzX2Z1bmMJfGZpeCB1cCBzdGFjayBmcmFtZSBzbyBjYW4gcmVzdG9yZSBpdAorCWNscmwJCS0oJWE3KQorCW1vdmViCQlWRVJfVE1QKCVhNiksKCVhNykgfG1vdmUgaWRsZSBmbXQgd29yZCB0byB0b3Agb2Ygc3RhY2sKKwlicmFsCQlnZW5fZXhjZXB0Cit8CisJfGVuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2hwMzAwL01ha2VmaWxlIGIvYXJjaC9tNjhrL2hwMzAwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YjYzMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaHAzMDAvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACisjCisjIE1ha2VmaWxlIGZvciBMaW51eCBhcmNoL202OGsvaHAzMDAgc291cmNlIGRpcmVjdG9yeQorIworCitvYmoteQkJOj0ga3N5bXMubyBjb25maWcubyBpbnRzLm8gdGltZS5vIHJlYm9vdC5vCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaHAzMDAvUkVBRE1FLmhwMzAwIGIvYXJjaC9tNjhrL2hwMzAwL1JFQURNRS5ocDMwMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzA3M2ZiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2hwMzAwL1JFQURNRS5ocDMwMApAQCAtMCwwICsxLDE0IEBACitIUDMwMCBub3RlcworLS0tLS0tLS0tLS0KKworVGhlIExpbnV4L0hQIHdlYiBwYWdlIGlzIGF0IDxodHRwOi8vd3d3LnRhemVuZGEuZGVtb24uY28udWsvcGhpbC9saW51eC1ocC8+CisKK0N1cnJlbnRseSBvbmx5IDkwMDAvMzQwIG1hY2hpbmVzIGhhdmUgYmVlbiB0ZXN0ZWQuICBBbnkgYW1vdW50IG9mIFJBTSBzaG91bGQKK3dvcmsgbm93IGJ1dCBJJ3ZlIG9ubHkgdHJpZWQgMTZNQiBhbmQgMTJNQi4KKworVGhlIHNlcmlhbCBjb25zb2xlIGlzIHByb2JhYmx5IGJyb2tlbiBhdCB0aGUgbW9tZW50IGJ1dCB0aGUgVG9wY2F0L0hJTCBrZXlib2FyZAorY29tYmluYXRpb24gc2VlbXMgdG8gd29yayBmb3IgbWUuICBZb3VyIG1pbGVhZ2UgbWF5IHZhcnkuCisKK1RoZSBMQU5DRSBkcml2ZXIgd29ya3MgYWZ0ZXIgYSBmYXNoaW9uIGJ1dCBvbmx5IGlmIHlvdSByZXNldCB0aGUgY2hpcCBiZWZvcmUKK2V2ZXJ5IHBhY2tldC4gIFRoaXMgZG9lc24ndCBtYWtlIGZvciB2ZXJ5IHNwZWVkeSBvcGVyYXRpb24uCisKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9ocDMwMC9jb25maWcuYyBiL2FyY2gvbTY4ay9ocDMwMC9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGI4NTRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2hwMzAwL2NvbmZpZy5jCkBAIC0wLDAgKzEsMjc5IEBACisvKgorICogIGxpbnV4L2FyY2gvbTY4ay9ocDMwMC9jb25maWcuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTggUGhpbGlwIEJsdW5kZWxsIDxwaGlsYkBnbnUub3JnPgorICoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIEhQMzAwLXNwZWNpZmljIGluaXRpYWxpc2F0aW9uIGNvZGUuICBJdCBnZXRzCisgKiAgY2FsbGVkIGJ5IHNldHVwLmMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisKKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9ibGlua2VuLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWRiKCkgYW5kIHdyaXRlYigpICovCisjaW5jbHVkZSA8YXNtL2hwMzAwaHcuaD4KKyNpbmNsdWRlIDxhc20vcnRjLmg+CisKKyNpbmNsdWRlICJpbnRzLmgiCisjaW5jbHVkZSAidGltZS5oIgorCit1bnNpZ25lZCBsb25nIGhwMzAwX21vZGVsOwordW5zaWduZWQgbG9uZyBocDMwMF91YXJ0X3Njb2RlID0gLTE7Cit1bnNpZ25lZCBjaGFyIGxlZHN0YXRlOworCitzdGF0aWMgY2hhciBzX2hwMzMwW10gX19pbml0ZGF0YSA9ICIzMzAiOworc3RhdGljIGNoYXIgc19ocDM0MFtdIF9faW5pdGRhdGEgPSAiMzQwIjsKK3N0YXRpYyBjaGFyIHNfaHAzNDVbXSBfX2luaXRkYXRhID0gIjM0NSI7CitzdGF0aWMgY2hhciBzX2hwMzYwW10gX19pbml0ZGF0YSA9ICIzNjAiOworc3RhdGljIGNoYXIgc19ocDM3MFtdIF9faW5pdGRhdGEgPSAiMzcwIjsKK3N0YXRpYyBjaGFyIHNfaHAzNzVbXSBfX2luaXRkYXRhID0gIjM3NSI7CitzdGF0aWMgY2hhciBzX2hwMzgwW10gX19pbml0ZGF0YSA9ICIzODAiOworc3RhdGljIGNoYXIgc19ocDM4NVtdIF9faW5pdGRhdGEgPSAiMzg1IjsKK3N0YXRpYyBjaGFyIHNfaHA0MDBbXSBfX2luaXRkYXRhID0gIjQwMCI7CitzdGF0aWMgY2hhciBzX2hwNDI1dFtdIF9faW5pdGRhdGEgPSAiNDI1dCI7CitzdGF0aWMgY2hhciBzX2hwNDI1c1tdIF9faW5pdGRhdGEgPSAiNDI1cyI7CitzdGF0aWMgY2hhciBzX2hwNDI1ZVtdIF9faW5pdGRhdGEgPSAiNDI1ZSI7CitzdGF0aWMgY2hhciBzX2hwNDMzdFtdIF9faW5pdGRhdGEgPSAiNDMzdCI7CitzdGF0aWMgY2hhciBzX2hwNDMzc1tdIF9faW5pdGRhdGEgPSAiNDMzcyI7CitzdGF0aWMgY2hhciAqaHAzMDBfbW9kZWxzW10gX19pbml0ZGF0YSA9IHsKKwlbSFBfMzIwXQk9IE5VTEwsCisJW0hQXzMzMF0JPSBzX2hwMzMwLAorCVtIUF8zNDBdCT0gc19ocDM0MCwKKwlbSFBfMzQ1XQk9IHNfaHAzNDUsCisJW0hQXzM1MF0JPSBOVUxMLAorCVtIUF8zNjBdCT0gc19ocDM2MCwKKwlbSFBfMzcwXQk9IHNfaHAzNzAsCisJW0hQXzM3NV0JPSBzX2hwMzc1LAorCVtIUF8zODBdCT0gc19ocDM4MCwKKwlbSFBfMzg1XQk9IHNfaHAzODUsCisJW0hQXzQwMF0JPSBzX2hwNDAwLAorCVtIUF80MjVUXQk9IHNfaHA0MjV0LAorCVtIUF80MjVTXQk9IHNfaHA0MjVzLAorCVtIUF80MjVFXQk9IHNfaHA0MjVlLAorCVtIUF80MzNUXQk9IHNfaHA0MzN0LAorCVtIUF80MzNTXQk9IHNfaHA0MzNzLAorfTsKKworc3RhdGljIGNoYXIgaHAzMDBfbW9kZWxfbmFtZVsxM10gPSAiSFA5MDAwLyI7CisKK2V4dGVybiB2b2lkIGhwMzAwX3Jlc2V0KHZvaWQpOworZXh0ZXJuIGlycXJldHVybl90ICgqaHAzMDBfZGVmYXVsdF9oYW5kbGVyW10pKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiBpbnQgc2hvd19ocDMwMF9pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqLCB2b2lkICopOworI2lmZGVmIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFCitleHRlcm4gaW50IGhwMzAwX3NldHVwX3NlcmlhbF9jb25zb2xlKHZvaWQpIF9faW5pdDsKKyNlbmRpZgorCitpbnQgX19pbml0IGhwMzAwX3BhcnNlX2Jvb3RpbmZvKGNvbnN0IHN0cnVjdCBiaV9yZWNvcmQgKnJlY29yZCkKK3sKKwlpbnQgdW5rbm93biA9IDA7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqZGF0YSA9IHJlY29yZC0+ZGF0YTsKKworCXN3aXRjaCAocmVjb3JkLT50YWcpIHsKKwljYXNlIEJJX0hQMzAwX01PREVMOgorCQlocDMwMF9tb2RlbCA9ICpkYXRhOworCQlicmVhazsKKworCWNhc2UgQklfSFAzMDBfVUFSVF9TQ09ERToKKwkJaHAzMDBfdWFydF9zY29kZSA9ICpkYXRhOworCQlicmVhazsKKworCWNhc2UgQklfSFAzMDBfVUFSVF9BRERSOgorCQkvKiBzZXJpYWwgcG9ydCBhZGRyZXNzOiBpZ25vcmVkIGhlcmUgKi8KKwkJYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKwkJdW5rbm93biA9IDE7CisJfQorCisJcmV0dXJuIHVua25vd247Cit9CisKKyNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCitzdGF0aWMgdm9pZCBocDMwMF9wdWxzZShpbnQgeCkKK3sKKwlpZiAoeCkKKwkJYmxpbmtlbl9sZWRzKDB4MTAsIDApOworCWVsc2UKKwkJYmxpbmtlbl9sZWRzKDAsIDB4MTApOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGhwMzAwX2dldF9tb2RlbChjaGFyICptb2RlbCkKK3sKKwlzdHJjcHkobW9kZWwsIGhwMzAwX21vZGVsX25hbWUpOworfQorCisjZGVmaW5lIFJUQ0JBU0UJCQkweGYwNDIwMDAwCisjZGVmaW5lIFJUQ19EQVRBCQkweDEKKyNkZWZpbmUgUlRDX0NNRAkJCTB4MworCisjZGVmaW5lCVJUQ19CVVNZCQkweDAyCisjZGVmaW5lCVJUQ19EQVRBX1JEWQkJMHgwMQorCisjZGVmaW5lIHJ0Y19idXN5KCkJCShpbl84KFJUQ0JBU0UgKyBSVENfQ01EKSAmIFJUQ19CVVNZKQorI2RlZmluZSBydGNfZGF0YV9hdmFpbGFibGUoKQkoaW5fOChSVENCQVNFICsgUlRDX0NNRCkgJiBSVENfREFUQV9SRFkpCisjZGVmaW5lIHJ0Y19zdGF0dXMoKQkJKGluXzgoUlRDQkFTRSArIFJUQ19DTUQpKQorI2RlZmluZSBydGNfY29tbWFuZCh4KQkJb3V0XzgoUlRDQkFTRSArIFJUQ19DTUQsICh4KSkKKyNkZWZpbmUgcnRjX3JlYWRfZGF0YSgpCQkoaW5fOChSVENCQVNFICsgUlRDX0RBVEEpKQorI2RlZmluZSBydGNfd3JpdGVfZGF0YSh4KQlvdXRfOChSVENCQVNFICsgUlRDX0RBVEEsICh4KSkKKworI2RlZmluZSBSVENfU0VUUkVHCTB4ZTAKKyNkZWZpbmUgUlRDX1dSSVRFUkVHCTB4YzIKKyNkZWZpbmUgUlRDX1JFQURSRUcJMHhjMworCisjZGVmaW5lIFJUQ19SRUdfU0VDMgkwCisjZGVmaW5lIFJUQ19SRUdfU0VDMQkxCisjZGVmaW5lIFJUQ19SRUdfTUlOMgkyCisjZGVmaW5lIFJUQ19SRUdfTUlOMQkzCisjZGVmaW5lIFJUQ19SRUdfSE9VUjIJNAorI2RlZmluZSBSVENfUkVHX0hPVVIxCTUKKyNkZWZpbmUgUlRDX1JFR19XREFZCTYKKyNkZWZpbmUgUlRDX1JFR19EQVkyCTcKKyNkZWZpbmUgUlRDX1JFR19EQVkxCTgKKyNkZWZpbmUgUlRDX1JFR19NT04yCTkKKyNkZWZpbmUgUlRDX1JFR19NT04xCTEwCisjZGVmaW5lIFJUQ19SRUdfWUVBUjIJMTEKKyNkZWZpbmUgUlRDX1JFR19ZRUFSMQkxMgorCisjZGVmaW5lIFJUQ19IT1VSMV8yNEhNT0RFIDB4OAorCisjZGVmaW5lIFJUQ19TVEFUX01BU0sJMHhmMAorI2RlZmluZSBSVENfU1RBVF9SRFkJMHg0MAorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgaHAzMDBfcnRjX3JlYWQodW5zaWduZWQgY2hhciByZWcpCit7CisJdW5zaWduZWQgY2hhciBzLCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXdoaWxlIChydGNfYnVzeSgpKTsKKwlydGNfY29tbWFuZChSVENfU0VUUkVHKTsKKwl3aGlsZSAocnRjX2J1c3koKSk7CisJcnRjX3dyaXRlX2RhdGEocmVnKTsKKwl3aGlsZSAocnRjX2J1c3koKSk7CisJcnRjX2NvbW1hbmQoUlRDX1JFQURSRUcpOworCisJZG8geworCQl3aGlsZSAoIXJ0Y19kYXRhX2F2YWlsYWJsZSgpKTsKKwkJcyA9IHJ0Y19zdGF0dXMoKTsKKwkJcmV0ID0gcnRjX3JlYWRfZGF0YSgpOworCX0gd2hpbGUgKChzICYgUlRDX1NUQVRfTUFTSykgIT0gUlRDX1NUQVRfUkRZKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBocDMwMF9ydGNfd3JpdGUodW5zaWduZWQgY2hhciByZWcsCisJCQkJCSAgICB1bnNpZ25lZCBjaGFyIHZhbCkKK3sKKwl1bnNpZ25lZCBjaGFyIHMsIHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJd2hpbGUgKHJ0Y19idXN5KCkpOworCXJ0Y19jb21tYW5kKFJUQ19TRVRSRUcpOworCXdoaWxlIChydGNfYnVzeSgpKTsKKwlydGNfd3JpdGVfZGF0YSgodmFsIDw8IDQpIHwgcmVnKTsKKwl3aGlsZSAocnRjX2J1c3koKSk7CisJcnRjX2NvbW1hbmQoUlRDX1dSSVRFUkVHKTsKKwl3aGlsZSAocnRjX2J1c3koKSk7CisJcnRjX2NvbW1hbmQoUlRDX1JFQURSRUcpOworCisJZG8geworCQl3aGlsZSAoIXJ0Y19kYXRhX2F2YWlsYWJsZSgpKTsKKwkJcyA9IHJ0Y19zdGF0dXMoKTsKKwkJcmV0ID0gcnRjX3JlYWRfZGF0YSgpOworCX0gd2hpbGUgKChzICYgUlRDX1NUQVRfTUFTSykgIT0gUlRDX1NUQVRfUkRZKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaHAzMDBfaHdjbGsoaW50IG9wLCBzdHJ1Y3QgcnRjX3RpbWUgKnQpCit7CisJaWYgKCFvcCkgeyAvKiByZWFkICovCisJCXQtPnRtX3NlYyAgPSBocDMwMF9ydGNfcmVhZChSVENfUkVHX1NFQzEpICogMTAgKworCQkJaHAzMDBfcnRjX3JlYWQoUlRDX1JFR19TRUMyKTsKKwkJdC0+dG1fbWluICA9IGhwMzAwX3J0Y19yZWFkKFJUQ19SRUdfTUlOMSkgKiAxMCArCisJCQlocDMwMF9ydGNfcmVhZChSVENfUkVHX01JTjIpOworCQl0LT50bV9ob3VyID0gKGhwMzAwX3J0Y19yZWFkKFJUQ19SRUdfSE9VUjEpICYgMykgKiAxMCArCisJCQlocDMwMF9ydGNfcmVhZChSVENfUkVHX0hPVVIyKTsKKwkJdC0+dG1fd2RheSA9IC0xOworCQl0LT50bV9tZGF5ID0gaHAzMDBfcnRjX3JlYWQoUlRDX1JFR19EQVkxKSAqIDEwICsKKwkJCWhwMzAwX3J0Y19yZWFkKFJUQ19SRUdfREFZMik7CisJCXQtPnRtX21vbiAgPSBocDMwMF9ydGNfcmVhZChSVENfUkVHX01PTjEpICogMTAgKworCQkJaHAzMDBfcnRjX3JlYWQoUlRDX1JFR19NT04yKSAtIDE7CisJCXQtPnRtX3llYXIgPSBocDMwMF9ydGNfcmVhZChSVENfUkVHX1lFQVIxKSAqIDEwICsKKwkJCWhwMzAwX3J0Y19yZWFkKFJUQ19SRUdfWUVBUjIpOworCQlpZiAodC0+dG1feWVhciA8PSA2OSkKKwkJCXQtPnRtX3llYXIgKz0gMTAwOworCX0gZWxzZSB7CisJCWhwMzAwX3J0Y193cml0ZShSVENfUkVHX1NFQzEsIHQtPnRtX3NlYyAvIDEwKTsKKwkJaHAzMDBfcnRjX3dyaXRlKFJUQ19SRUdfU0VDMiwgdC0+dG1fc2VjICUgMTApOworCQlocDMwMF9ydGNfd3JpdGUoUlRDX1JFR19NSU4xLCB0LT50bV9taW4gLyAxMCk7CisJCWhwMzAwX3J0Y193cml0ZShSVENfUkVHX01JTjIsIHQtPnRtX21pbiAlIDEwKTsKKwkJaHAzMDBfcnRjX3dyaXRlKFJUQ19SRUdfSE9VUjEsCisJCQkJKCh0LT50bV9ob3VyIC8gMTApICYgMykgfCBSVENfSE9VUjFfMjRITU9ERSk7CisJCWhwMzAwX3J0Y193cml0ZShSVENfUkVHX0hPVVIyLCB0LT50bV9ob3VyICUgMTApOworCQlocDMwMF9ydGNfd3JpdGUoUlRDX1JFR19EQVkxLCB0LT50bV9tZGF5IC8gMTApOworCQlocDMwMF9ydGNfd3JpdGUoUlRDX1JFR19EQVkyLCB0LT50bV9tZGF5ICUgMTApOworCQlocDMwMF9ydGNfd3JpdGUoUlRDX1JFR19NT04xLCAodC0+dG1fbW9uICsgMSkgLyAxMCk7CisJCWhwMzAwX3J0Y193cml0ZShSVENfUkVHX01PTjIsICh0LT50bV9tb24gKyAxKSAlIDEwKTsKKwkJaWYgKHQtPnRtX3llYXIgPj0gMTAwKQorCQkJdC0+dG1feWVhciAtPSAxMDA7CisJCWhwMzAwX3J0Y193cml0ZShSVENfUkVHX1lFQVIxLCB0LT50bV95ZWFyIC8gMTApOworCQlocDMwMF9ydGNfd3JpdGUoUlRDX1JFR19ZRUFSMiwgdC0+dG1feWVhciAlIDEwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBocDMwMF9nZXRfc3Modm9pZCkKK3sKKwlyZXR1cm4gaHAzMDBfcnRjX3JlYWQoUlRDX1JFR19TRUMxKSAqIDEwICsKKwkJaHAzMDBfcnRjX3JlYWQoUlRDX1JFR19TRUMyKTsKK30KKwordm9pZCBfX2luaXQgY29uZmlnX2hwMzAwKHZvaWQpCit7CisJbWFjaF9zY2hlZF9pbml0ICAgICAgPSBocDMwMF9zY2hlZF9pbml0OworCW1hY2hfaW5pdF9JUlEgICAgICAgID0gaHAzMDBfaW5pdF9JUlE7CisJbWFjaF9yZXF1ZXN0X2lycSAgICAgPSBocDMwMF9yZXF1ZXN0X2lycTsKKwltYWNoX2ZyZWVfaXJxICAgICAgICA9IGhwMzAwX2ZyZWVfaXJxOworCW1hY2hfZ2V0X21vZGVsICAgICAgID0gaHAzMDBfZ2V0X21vZGVsOworCW1hY2hfZ2V0X2lycV9saXN0ICAgID0gc2hvd19ocDMwMF9pbnRlcnJ1cHRzOworCW1hY2hfZ2V0dGltZW9mZnNldCAgID0gaHAzMDBfZ2V0dGltZW9mZnNldDsKKwltYWNoX2RlZmF1bHRfaGFuZGxlciA9ICZocDMwMF9kZWZhdWx0X2hhbmRsZXI7CisJbWFjaF9od2NsawkgICAgID0gaHAzMDBfaHdjbGs7CisJbWFjaF9nZXRfc3MJICAgICA9IGhwMzAwX2dldF9zczsKKwltYWNoX3Jlc2V0ICAgICAgICAgICA9IGhwMzAwX3Jlc2V0OworI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKKwltYWNoX2hlYXJ0YmVhdCAgICAgICA9IGhwMzAwX3B1bHNlOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0RVTU1ZX0NPTlNPTEUKKwljb25zd2l0Y2hwCSAgICAgPSAmZHVtbXlfY29uOworI2VuZGlmCisJbWFjaF9tYXhfZG1hX2FkZHJlc3MgPSAweGZmZmZmZmZmOworCisJaWYgKGhwMzAwX21vZGVsID49IEhQXzMzMCAmJiBocDMwMF9tb2RlbCA8PSBIUF80MzNTICYmIGhwMzAwX21vZGVsICE9IEhQXzM1MCkgeworCQlwcmludGsoS0VSTl9JTkZPICJEZXRlY3RlZCBIUDkwMDAgbW9kZWwgJXNcbiIsIGhwMzAwX21vZGVsc1tocDMwMF9tb2RlbC1IUF8zMjBdKTsKKwkJc3RyY2F0KGhwMzAwX21vZGVsX25hbWUsIGhwMzAwX21vZGVsc1tocDMwMF9tb2RlbC1IUF8zMjBdKTsKKwl9CisJZWxzZSB7CisJCXBhbmljKCJVbmtub3duIEhQOTAwMCBNb2RlbCIpOworCX0KKyNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRQorCWhwMzAwX3NldHVwX3NlcmlhbF9jb25zb2xlKCk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9ocDMwMC9ocDMwMG1hcC5tYXAgYi9hcmNoL202OGsvaHAzMDAvaHAzMDBtYXAubWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNDVmMGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaHAzMDAvaHAzMDBtYXAubWFwCkBAIC0wLDAgKzEsMjUyIEBACisjIEhQMzAwIGtlcm5lbCBrZXltYXAuIFRoaXMgdXNlcyA3IG1vZGlmaWVyIGNvbWJpbmF0aW9ucy4KK2tleW1hcHMgMC0yLDQtNSw4LDEyCisjIENoYW5nZSB0aGUgYWJvdmUgbGluZSBpbnRvCisjCWtleW1hcHMgMC0yLDQtNiw4LDEyCisjIGluIGNhc2UgeW91IHdhbnQgdGhlIGVudHJpZXMKKyMJYWx0Z3IgICBjb250cm9sIGtleWNvZGUgIDgzID0gQm9vdAorIwlhbHRnciAgIGNvbnRyb2wga2V5Y29kZSAxMTEgPSBCb290CisjIGJlbG93LgorIworIyBJbiBmYWN0IEFsdEdyIGlzIHVzZWQgdmVyeSBsaXR0bGUsIGFuZCBvbmUgbW9yZSBrZXltYXAgY2FuCisjIGJlIHNhdmVkIGJ5IG1hcHBpbmcgQWx0R3IgdG8gQWx0IChhbmQgYWRhcHRpbmcgYSBmZXcgZW50cmllcyk6CisjIGtleWNvZGUgMTAwID0gQWx0CisjCitrZXljb2RlICAgMSA9CitrZXljb2RlICAgMiA9IEFsdAora2V5Y29kZSAgIDMgPSBBbHQKK2tleWNvZGUgICA0ID0gU2hpZnQKK2tleWNvZGUgICA1ID0gU2hpZnQKK2tleWNvZGUgICA2ID0gQ29udHJvbAora2V5Y29kZSAgIDcgPQora2V5Y29kZSAgIDggPQora2V5Y29kZSAgIDkgPQora2V5Y29kZSAgMTAgPQora2V5Y29kZSAgMTEgPQora2V5Y29kZSAgMTIgPQora2V5Y29kZSAgMTMgPQora2V5Y29kZSAgMTQgPQora2V5Y29kZSAgMTUgPQora2V5Y29kZSAgMTYgPQora2V5Y29kZSAgMTcgPQora2V5Y29kZSAgMTggPQora2V5Y29kZSAgMTkgPQora2V5Y29kZSAgMjAgPQora2V5Y29kZSAgMjEgPQora2V5Y29kZSAgMjIgPQora2V5Y29kZSAgMjMgPQora2V5Y29kZSAgMjQgPSBiCitrZXljb2RlICAyNSA9IHYKK2tleWNvZGUgIDI2ID0gYwora2V5Y29kZSAgMjcgPSB4CitrZXljb2RlICAyOCA9IHoKK2tleWNvZGUgIDI5ID0KK2tleWNvZGUgIDMwID0KK2tleWNvZGUgIDMxID0gRXNjYXBlCQlEZWxldGUKK2tleWNvZGUgIDMyID0KK2tleWNvZGUgIDMzID0KK2tleWNvZGUgIDM0ID0KK2tleWNvZGUgIDM1ID0KK2tleWNvZGUgIDM2ID0KK2tleWNvZGUgIDM3ID0KK2tleWNvZGUgIDM4ID0KK2tleWNvZGUgIDM5ID0KK2tleWNvZGUgIDQwID0gaAora2V5Y29kZSAgNDEgPSBnCitrZXljb2RlICA0MiA9IGYKK2tleWNvZGUgIDQzID0gZAora2V5Y29kZSAgNDQgPSBzCitrZXljb2RlICA0NSA9IGEKK2tleWNvZGUgIDQ2ID0KK2tleWNvZGUgIDQ3ID0gQ2Fwc19Mb2NrCitrZXljb2RlICA0OCA9IHUKK2tleWNvZGUgIDQ5ID0geQora2V5Y29kZSAgNTAgPSB0CitrZXljb2RlICA1MSA9IHIKK2tleWNvZGUgIDUyID0gZQora2V5Y29kZSAgNTMgPSB3CitrZXljb2RlICA1NCA9IHEKK2tleWNvZGUgIDU1ID0gVGFiCQlUYWIKKwlhbHQgICAgIGtleWNvZGUgICAgNTUgPSBNZXRhX1RhYgora2V5Y29kZSAgNTYgPSBzZXZlbgkJYW1wZXJzYW5kCitrZXljb2RlICA1NyA9IHNpeAkJYXNjaWljaXJjdW0KK2tleWNvZGUgIDU4ID0gZml2ZQkJcGVyY2VudAora2V5Y29kZSAgNTkgPSBmb3VyCQlkb2xsYXIKK2tleWNvZGUgIDYwID0gdGhyZWUJCW51bWJlcnNpZ24KK2tleWNvZGUgIDYxID0gdHdvCQlhdAkJYXQKK2tleWNvZGUgIDYyID0gb25lCQlleGNsYW0JCWV4Y2xhbQora2V5Y29kZSAgNjMgPSBncmF2ZQkJYXNjaWl0aWxkZQorCWNvbnRyb2wga2V5Y29kZSAgICA2MyA9IG51bAorCWFsdCAgICAga2V5Y29kZSAgICA2MyA9IE1ldGFfZ3JhdmUKK2tleWNvZGUgIDY0ID0KK2tleWNvZGUgIDY1ID0KK2tleWNvZGUgIDY2ID0KK2tleWNvZGUgIDY3ID0KK2tleWNvZGUgIDY4ID0KK2tleWNvZGUgIDY5ID0KK2tleWNvZGUgIDcwID0KK2tleWNvZGUgIDcxID0KK2tleWNvZGUgIDcyID0KK2tleWNvZGUgIDczID0gRjQKKwljb250cm9sIGtleWNvZGUJICAgNzMgPSBDb25zb2xlXzQKK2tleWNvZGUgIDc0ID0gRjMKKwljb250cm9sIGtleWNvZGUJICAgNzQgPSBDb25zb2xlXzMKK2tleWNvZGUgIDc1ID0gRjIKKwljb250cm9sIGtleWNvZGUJICAgNzUgPSBDb25zb2xlXzIKK2tleWNvZGUgIDc2ID0gRjEKKwljb250cm9sIGtleWNvZGUJICAgNzYgPSBDb25zb2xlXzEKK2tleWNvZGUgIDc3ID0KK2tleWNvZGUgIDc4ID0KK2tleWNvZGUgIDc5ID0KK2tleWNvZGUgIDgwID0KK2tleWNvZGUgIDgxID0gRjUKKwljb250cm9sIGtleWNvZGUJICAgODEgPSBDb25zb2xlXzUKK2tleWNvZGUgIDgyID0gRjYKKwljb250cm9sIGtleWNvZGUJICAgODIgPSBDb25zb2xlXzYKK2tleWNvZGUgIDgzID0gRjcKKwljb250cm9sIGtleWNvZGUJICAgODMgPSBDb25zb2xlXzcKK2tleWNvZGUgIDg0ID0gRjgKKwljb250cm9sIGtleWNvZGUJICAgODQgPSBDb25zb2xlXzgKK2tleWNvZGUgIDg1ID0KK2tleWNvZGUgIDg2ID0KK2tleWNvZGUgIDg3ID0KK2tleWNvZGUgIDg4ID0gZWlnaHQJCWFzdGVyaXNrCWFzdGVyaXNrCitrZXljb2RlICA4OSA9IG5pbmUJCXBhcmVubGVmdAlicmFja2V0bGVmdAora2V5Y29kZSAgOTAgPSB6ZXJvCQlwYXJlbnJpZ2h0CWJyYWNrZXRyaWdodAora2V5Y29kZSAgOTEgPSBtaW51cwkJdW5kZXJzY29yZQora2V5Y29kZSAgOTIgPSBlcXVhbAkJcGx1cwora2V5Y29kZSAgOTMgPSBCYWNrU3BhY2UKK2tleWNvZGUgIDk0ID0KK2tleWNvZGUgIDk1ID0KK2tleWNvZGUgIDk2ID0gaQora2V5Y29kZSAgOTcgPSBvCitrZXljb2RlICA5OCA9IHAKK2tleWNvZGUgIDk5ID0gYnJhY2tldGxlZnQJYnJhY2VsZWZ0CitrZXljb2RlIDEwMCA9IGJyYWNrZXRyaWdodAlicmFjZXJpZ2h0CitrZXljb2RlIDEwMSA9IGJhY2tzbGFzaAkJYmFyCisJY29udHJvbCBrZXljb2RlICAgMTAxID0gQ29udHJvbF9iYWNrc2xhc2gKKwlhbHQgICAgIGtleWNvZGUgICAxMDEgPSBNZXRhX2JhY2tzbGFzaAora2V5Y29kZSAxMDIgPQora2V5Y29kZSAxMDMgPQora2V5Y29kZSAxMDQgPSBqCitrZXljb2RlIDEwNSA9IGsKK2tleWNvZGUgMTA2ID0gbAora2V5Y29kZSAxMDcgPSBzZW1pY29sb24JCWNvbG9uCisJYWx0ICAgICBrZXljb2RlICAgMTA3ID0gTWV0YV9zZW1pY29sb24KK2tleWNvZGUgMTA4ID0gYXBvc3Ryb3BoZQlxdW90ZWRibAorCWNvbnRyb2wga2V5Y29kZSAgIDEwOCA9IENvbnRyb2xfZworCWFsdCAgICAga2V5Y29kZSAgIDEwOCA9IE1ldGFfYXBvc3Ryb3BoZQora2V5Y29kZSAxMDkgPSBSZXR1cm4KK2tleWNvZGUgMTEwID0KK2tleWNvZGUgMTExID0KK2tleWNvZGUgMTEyID0gbQora2V5Y29kZSAxMTMgPSBjb21tYQkJbGVzcwora2V5Y29kZSAxMTQgPSBwZXJpb2QJCWdyZWF0ZXIKK2tleWNvZGUgMTE1ID0gc2xhc2gJCXF1ZXN0aW9uCitrZXljb2RlIDExNiA9CitrZXljb2RlIDExNyA9CitrZXljb2RlIDExOCA9CitrZXljb2RlIDExOSA9CitrZXljb2RlIDEyMCA9IG4KK2tleWNvZGUgMTIxID0gc3BhY2UJCXNwYWNlCitrZXljb2RlIDEyMiA9CitrZXljb2RlIDEyMyA9CitrZXljb2RlIDEyNCA9IExlZnQKK2tleWNvZGUgMTI1ID0gRG93bgora2V5Y29kZSAxMjYgPSBVcAora2V5Y29kZSAxMjcgPSBSaWdodAorc3RyaW5nIEYxID0gIlwwMzNbW0EiCitzdHJpbmcgRjIgPSAiXDAzM1tbQiIKK3N0cmluZyBGMyA9ICJcMDMzW1tDIgorc3RyaW5nIEY0ID0gIlwwMzNbW0QiCitzdHJpbmcgRjUgPSAiXDAzM1tbRSIKK3N0cmluZyBGNiA9ICJcMDMzWzE3fiIKK3N0cmluZyBGNyA9ICJcMDMzWzE4fiIKK3N0cmluZyBGOCA9ICJcMDMzWzE5fiIKK3N0cmluZyBGOSA9ICJcMDMzWzIwfiIKK3N0cmluZyBGMTAgPSAiXDAzM1syMX4iCitzdHJpbmcgRjExID0gIlwwMzNbMjN+Igorc3RyaW5nIEYxMiA9ICJcMDMzWzI0fiIKK3N0cmluZyBGMTMgPSAiXDAzM1syNX4iCitzdHJpbmcgRjE0ID0gIlwwMzNbMjZ+Igorc3RyaW5nIEYxNSA9ICJcMDMzWzI4fiIKK3N0cmluZyBGMTYgPSAiXDAzM1syOX4iCitzdHJpbmcgRjE3ID0gIlwwMzNbMzF+Igorc3RyaW5nIEYxOCA9ICJcMDMzWzMyfiIKK3N0cmluZyBGMTkgPSAiXDAzM1szM34iCitzdHJpbmcgRjIwID0gIlwwMzNbMzR+Igorc3RyaW5nIEZpbmQgPSAiXDAzM1sxfiIKK3N0cmluZyBJbnNlcnQgPSAiXDAzM1syfiIKK3N0cmluZyBSZW1vdmUgPSAiXDAzM1szfiIKK3N0cmluZyBTZWxlY3QgPSAiXDAzM1s0fiIKK3N0cmluZyBQcmlvciA9ICJcMDMzWzV+Igorc3RyaW5nIE5leHQgPSAiXDAzM1s2fiIKK3N0cmluZyBNYWNybyA9ICJcMDMzW00iCitzdHJpbmcgUGF1c2UgPSAiXDAzM1tQIgorY29tcG9zZSAnYCcgJ0EnIHRvICfAJworY29tcG9zZSAnYCcgJ2EnIHRvICfgJworY29tcG9zZSAnXCcnICdBJyB0byAnwScKK2NvbXBvc2UgJ1wnJyAnYScgdG8gJ+EnCitjb21wb3NlICdeJyAnQScgdG8gJ8InCitjb21wb3NlICdeJyAnYScgdG8gJ+InCitjb21wb3NlICd+JyAnQScgdG8gJ8MnCitjb21wb3NlICd+JyAnYScgdG8gJ+MnCitjb21wb3NlICciJyAnQScgdG8gJ8QnCitjb21wb3NlICciJyAnYScgdG8gJ+QnCitjb21wb3NlICdPJyAnQScgdG8gJ8UnCitjb21wb3NlICdvJyAnYScgdG8gJ+UnCitjb21wb3NlICcwJyAnQScgdG8gJ8UnCitjb21wb3NlICcwJyAnYScgdG8gJ+UnCitjb21wb3NlICdBJyAnQScgdG8gJ8UnCitjb21wb3NlICdhJyAnYScgdG8gJ+UnCitjb21wb3NlICdBJyAnRScgdG8gJ8YnCitjb21wb3NlICdhJyAnZScgdG8gJ+YnCitjb21wb3NlICcsJyAnQycgdG8gJ8cnCitjb21wb3NlICcsJyAnYycgdG8gJ+cnCitjb21wb3NlICdgJyAnRScgdG8gJ8gnCitjb21wb3NlICdgJyAnZScgdG8gJ+gnCitjb21wb3NlICdcJycgJ0UnIHRvICfJJworY29tcG9zZSAnXCcnICdlJyB0byAn6ScKK2NvbXBvc2UgJ14nICdFJyB0byAnyicKK2NvbXBvc2UgJ14nICdlJyB0byAn6icKK2NvbXBvc2UgJyInICdFJyB0byAnyycKK2NvbXBvc2UgJyInICdlJyB0byAn6ycKK2NvbXBvc2UgJ2AnICdJJyB0byAnzCcKK2NvbXBvc2UgJ2AnICdpJyB0byAn7CcKK2NvbXBvc2UgJ1wnJyAnSScgdG8gJ80nCitjb21wb3NlICdcJycgJ2knIHRvICftJworY29tcG9zZSAnXicgJ0knIHRvICfOJworY29tcG9zZSAnXicgJ2knIHRvICfuJworY29tcG9zZSAnIicgJ0knIHRvICfPJworY29tcG9zZSAnIicgJ2knIHRvICfvJworY29tcG9zZSAnLScgJ0QnIHRvICfQJworY29tcG9zZSAnLScgJ2QnIHRvICfwJworY29tcG9zZSAnficgJ04nIHRvICfRJworY29tcG9zZSAnficgJ24nIHRvICfxJworY29tcG9zZSAnYCcgJ08nIHRvICfSJworY29tcG9zZSAnYCcgJ28nIHRvICfyJworY29tcG9zZSAnXCcnICdPJyB0byAn0ycKK2NvbXBvc2UgJ1wnJyAnbycgdG8gJ/MnCitjb21wb3NlICdeJyAnTycgdG8gJ9QnCitjb21wb3NlICdeJyAnbycgdG8gJ/QnCitjb21wb3NlICd+JyAnTycgdG8gJ9UnCitjb21wb3NlICd+JyAnbycgdG8gJ/UnCitjb21wb3NlICciJyAnTycgdG8gJ9YnCitjb21wb3NlICciJyAnbycgdG8gJ/YnCitjb21wb3NlICcvJyAnTycgdG8gJ9gnCitjb21wb3NlICcvJyAnbycgdG8gJ/gnCitjb21wb3NlICdgJyAnVScgdG8gJ9knCitjb21wb3NlICdgJyAndScgdG8gJ/knCitjb21wb3NlICdcJycgJ1UnIHRvICfaJworY29tcG9zZSAnXCcnICd1JyB0byAn+icKK2NvbXBvc2UgJ14nICdVJyB0byAn2ycKK2NvbXBvc2UgJ14nICd1JyB0byAn+ycKK2NvbXBvc2UgJyInICdVJyB0byAn3CcKK2NvbXBvc2UgJyInICd1JyB0byAn/CcKK2NvbXBvc2UgJ1wnJyAnWScgdG8gJ90nCitjb21wb3NlICdcJycgJ3knIHRvICf9JworY29tcG9zZSAnVCcgJ0gnIHRvICfeJworY29tcG9zZSAndCcgJ2gnIHRvICf+JworY29tcG9zZSAncycgJ3MnIHRvICffJworY29tcG9zZSAnIicgJ3knIHRvICf/JworY29tcG9zZSAncycgJ3onIHRvICffJworY29tcG9zZSAnaScgJ2onIHRvICf/JwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2hwMzAwL2ludHMuYyBiL2FyY2gvbTY4ay9ocDMwMC9pbnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM1YmI0MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9ocDMwMC9pbnRzLmMKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiAgbGludXgvYXJjaC9tNjhrL2hwMzAwL2ludHMuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTggUGhpbGlwIEJsdW5kZWxsIDxwaGlsYkBnbnUub3JnPgorICoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIEhQMzAwLXNwZWNpZmljIGludGVycnVwdCBoYW5kbGluZy4KKyAqICBXZSBvbmx5IHVzZSB0aGUgYXV0b3ZlY3RvciBpbnRlcnJ1cHRzLCBhbmQgdGhlcmVmb3JlIHdlIG5lZWQgdG8KKyAqICBtYWludGFpbiBsaXN0cyBvZiBkZXZpY2VzIHNoYXJpbmcgZWFjaCBpcGwuCisgKiAgW2lwbCBsaXN0IGNvZGUgYWRkZWQgYnkgUGV0ZXIgTWF5ZGVsbCA8cG1heWRlbGxAY2hpYXJrLmdyZWVuZW5kLm9yZy51az4gMDYvMTk5OF0KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlICJpbnRzLmgiCisKKy8qIEVhY2ggaXBsIGhhcyBhIGxpbmtlZCBsaXN0IG9mIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzLgorICogU2VydmljZSByb3V0aW5lcyBhcmUgYWRkZWQgdmlhIGhwMzAwX3JlcXVlc3RfaXJxKCkgYW5kIHJlbW92ZWQKKyAqIHZpYSBocDMwMF9mcmVlX2lycSgpLiBUaGUgZGV2aWNlIGRyaXZlciBzaG91bGQgc2V0IElSUV9GTEdfRkFTVAorICogaWYgaXQgbmVlZHMgdG8gYmUgc2VydmljZWQgZWFybHkgKGVnIEZJRk9sZXNzIFVBUlRzKTsgdGhpcyB3aWxsCisgKiBjYXVzZSBpdCB0byBiZSBhZGRlZCBhdCB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlIHJhdGhlciB0aGFuCisgKiB0aGUgYmFjay4KKyAqIEN1cnJlbnRseSBJUlFfRkxHX1NMT1cgYW5kIGZsYWdzPTAgYXJlIHRyZWF0ZWQgaWRlbnRpY2FsbHk7IGlmCisgKiB3ZSBuZWVkZWQgdGhyZWUgbGV2ZWxzIG9mIHByaW9yaXR5IHdlIGNvdWxkIGRpc3Rpbmd1aXNoIHRoZW0KKyAqIGJ1dCB0aGlzIHN0cmlrZXMgbWUgYXMgbWlsZGx5IHVnbHkuLi4KKyAqLworCisvKiB3ZSBzdGFydCB3aXRoIG5vIGVudHJpZXMgaW4gYW55IGxpc3QgKi8KK3N0YXRpYyBpcnFfbm9kZV90ICpocDMwMF9pcnFfbGlzdFtIUDMwMF9OVU1fSVJRU107CisKK3N0YXRpYyBzcGlubG9ja190IGlycWxpc3RfbG9jazsKKworLyogVGhpcyBoYW5kbGVyIHJlY2VpdmVzIGFsbCBpbnRlcnJ1cHRzLCBkaXNwYXRjaGluZyB0aGVtIHRvIHRoZSByZWdpc3RlcmVkIGhhbmRsZXJzICovCitzdGF0aWMgaXJxcmV0dXJuX3QgaHAzMDBfaW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisgICAgICAgIGlycV9ub2RlX3QgKnQ7CisgICAgICAgIC8qIFdlIGp1c3QgZ2l2ZSBldmVyeSBoYW5kbGVyIG9uIHRoZSBjaGFpbiBhbiBvcHBvcnR1bml0eSB0byBoYW5kbGUKKyAgICAgICAgICogdGhlIGludGVycnVwdCwgaW4gcHJpb3JpdHkgb3JkZXIuCisgICAgICAgICAqLworICAgICAgICBmb3IodCA9IGhwMzAwX2lycV9saXN0W2lycV07IHQ7IHQ9dC0+bmV4dCkKKyAgICAgICAgICAgICAgICB0LT5oYW5kbGVyKGlycSwgdC0+ZGV2X2lkLCBmcCk7CisgICAgICAgIC8qIFdlIGNvdWxkIHB1dCBpbiBzb21lIGFjY291bnRpbmcgcm91dGluZXMsIGNoZWNrcyBmb3Igc3RyYXkgaW50ZXJydXB0cywKKyAgICAgICAgICogZXRjLCBpbiBoZXJlLiBOb3RlIHRoYXQgY3VycmVudGx5IHdlIGNhbid0IHRlbGwgd2hldGhlciBvciBub3QKKyAgICAgICAgICogYSBoYW5kbGVyIGhhbmRsZXMgdGhlIGludGVycnVwdCwgdGhvdWdoLgorICAgICAgICAgKi8KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBocDMwMF9iYWRpbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJbnVtX3NwdXJpb3VzICs9IDE7CisJcmV0dXJuIElSUV9OT05FOworfQorCitpcnFyZXR1cm5fdCAoKmhwMzAwX2RlZmF1bHRfaGFuZGxlcltTWVNfSVJRU10pKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSA9IHsKKwlbMF0gPSBocDMwMF9iYWRpbnQsCisJWzFdID0gaHAzMDBfaW50X2hhbmRsZXIsCisJWzJdID0gaHAzMDBfaW50X2hhbmRsZXIsCisJWzNdID0gaHAzMDBfaW50X2hhbmRsZXIsCisJWzRdID0gaHAzMDBfaW50X2hhbmRsZXIsCisJWzVdID0gaHAzMDBfaW50X2hhbmRsZXIsCisJWzZdID0gaHAzMDBfaW50X2hhbmRsZXIsCisJWzddID0gaHAzMDBfaW50X2hhbmRsZXIKK307CisKKy8qIGRldl9pZCBoYWQgYmV0dGVyIGJlIHVuaXF1ZSB0byBlYWNoIGhhbmRsZXIgYmVjYXVzZSBpdCdzIHRoZSBvbmx5IHdheSB3ZSBoYXZlCisgKiB0byBkaXN0aW5ndWlzaCBoYW5kbGVycyB3aGVuIHJlbW92aW5nIHRoZW0uLi4KKyAqCisgKiBJdCB3b3VsZCBiZSBwcmV0dHkgZWFzeSB0byBzdXBwb3J0IElSUV9GTEdfTE9DSyAoaGFuZGxlciBpcyBub3QgcmVwbGFjYWJsZSkKKyAqIGFuZCBJUlFfRkxHX1JFUExBQ0UgKGhhbmRsZXIgcmVwbGFjZXMgZXhpc3Rpbmcgb25lIHdpdGggdGhpcyBkZXZfaWQpCisgKiBpZiB3ZSB3YW50ZWQgdG8uIElSUV9GTEdfRkFTVCBpcyBuZWVkZWQgZm9yIGRldmljZXMgd2hlcmUgaW50ZXJydXB0IGxhdGVuY3kKKyAqIG1hdHRlcnMgKGVnIHRoZSBkcmVhZGVkIEZJRk9sZXNzIFVBUlQuLi4pCisgKi8KK2ludCBocDMwMF9yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLAorICAgICAgICAgICAgICAgICAgICAgIGlycXJldHVybl90ICgqaGFuZGxlcikgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpCit7CisgICAgICAgIGlycV9ub2RlX3QgKnQsICpuID0gbmV3X2lycV9ub2RlKCk7CisKKyAgICAgICAgaWYgKCFuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb29wcywgbm8gZnJlZSBub2RlcyAqLworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlycWxpc3RfbG9jaywgZmxhZ3MpOworCisgICAgICAgIGlmICghaHAzMDBfaXJxX2xpc3RbaXJxXSkgeworICAgICAgICAgICAgICAgIC8qIG5vIGxpc3QgeWV0ICovCisgICAgICAgICAgICAgICAgaHAzMDBfaXJxX2xpc3RbaXJxXSA9IG47CisgICAgICAgICAgICAgICAgbi0+bmV4dCA9IE5VTEw7CisgICAgICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiBJUlFfRkxHX0ZBU1QpIHsKKyAgICAgICAgICAgICAgICAvKiBpbnNlcnQgYXQgaGVhZCBvZiBsaXN0ICovCisgICAgICAgICAgICAgICAgbi0+bmV4dCA9IGhwMzAwX2lycV9saXN0W2lycV07CisgICAgICAgICAgICAgICAgaHAzMDBfaXJxX2xpc3RbaXJxXSA9IG47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogaW5zZXJ0IGF0IGVuZCBvZiBsaXN0ICovCisgICAgICAgICAgICAgICAgZm9yKHQgPSBocDMwMF9pcnFfbGlzdFtpcnFdOyB0LT5uZXh0OyB0ID0gdC0+bmV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi87CisgICAgICAgICAgICAgICAgbi0+bmV4dCA9IE5VTEw7CisgICAgICAgICAgICAgICAgdC0+bmV4dCA9IG47CisgICAgICAgIH0KKworICAgICAgICAvKiBGaWxsIGluIG4gYXBwcm9wcmlhdGVseSAqLworICAgICAgICBuLT5oYW5kbGVyID0gaGFuZGxlcjsKKyAgICAgICAgbi0+ZmxhZ3MgPSBmbGFnczsKKyAgICAgICAgbi0+ZGV2X2lkID0gZGV2X2lkOworICAgICAgICBuLT5kZXZuYW1lID0gZGV2bmFtZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFsaXN0X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBocDMwMF9mcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisgICAgICAgIGlycV9ub2RlX3QgKnQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmlycWxpc3RfbG9jaywgZmxhZ3MpOworCisgICAgICAgIHQgPSBocDMwMF9pcnFfbGlzdFtpcnFdOworICAgICAgICBpZiAoIXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBoYW5kbGVycyBhdCBhbGwgZm9yIHRoYXQgSVJRICovCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImhwMzAwX2ZyZWVfaXJxOiBhdHRlbXB0IHRvIHJlbW92ZSBub25leGlzdGVudCBoYW5kbGVyIGZvciBJUlEgJWRcbiIsIGlycSk7CisgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxbGlzdF9sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0LT5kZXZfaWQgPT0gZGV2X2lkKQorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZW1vdmluZyBmaXJzdCBoYW5kbGVyIG9uIGNoYWluICovCisgICAgICAgICAgICAgICAgdC0+ZmxhZ3MgPSBJUlFfRkxHX1NURDsgICAgICAgICAgIC8qIHdlIHByb2JhYmx5IGRvbid0IHJlYWxseSBuZWVkIHRoZXNlICovCisgICAgICAgICAgICAgICAgdC0+ZGV2X2lkID0gTlVMTDsKKyAgICAgICAgICAgICAgICB0LT5kZXZuYW1lID0gTlVMTDsKKyAgICAgICAgICAgICAgICB0LT5oYW5kbGVyID0gTlVMTDsgICAgICAgICAgICAgICAgLyogZnJlZXMgdGhpcyBpcnFfbm9kZV90ICovCisgICAgICAgICAgICAgICAgaHAzMDBfaXJxX2xpc3RbaXJxXSA9IHQtPm5leHQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycWxpc3RfbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvKiBPSywgbXVzdCBiZSByZW1vdmluZyBmcm9tIG1pZGRsZSBvZiB0aGUgY2hhaW4gKi8KKworICAgICAgICBmb3IgKHQgPSBocDMwMF9pcnFfbGlzdFtpcnFdOyB0LT5uZXh0ICYmIHQtPm5leHQtPmRldl9pZCAhPSBkZXZfaWQ7IHQgPSB0LT5uZXh0KQorICAgICAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi87CisgICAgICAgIGlmICghdC0+bmV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiaHAzMDBfZnJlZV9pcnE6IGF0dGVtcHQgdG8gcmVtb3ZlIG5vbmV4aXN0ZW50IGhhbmRsZXIgZm9yIElSUSAlZFxuIiwgaXJxKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxbGlzdF9sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvKiByZW1vdmUgdGhlIGVudHJ5IGFmdGVyIHQ6ICovCisgICAgICAgIHQtPm5leHQtPmZsYWdzID0gSVJRX0ZMR19TVEQ7CisgICAgICAgIHQtPm5leHQtPmRldl9pZCA9IE5VTEw7CisJdC0+bmV4dC0+ZGV2bmFtZSA9IE5VTEw7CisJdC0+bmV4dC0+aGFuZGxlciA9IE5VTEw7CisgICAgICAgIHQtPm5leHQgPSB0LT5uZXh0LT5uZXh0OworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxbGlzdF9sb2NrLCBmbGFncyk7Cit9CisKK2ludCBzaG93X2hwMzAwX2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQoreworCXJldHVybiAwOworfQorCit2b2lkIF9faW5pdCBocDMwMF9pbml0X0lSUSh2b2lkKQoreworCXNwaW5fbG9ja19pbml0KCZpcnFsaXN0X2xvY2spOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2hwMzAwL2ludHMuaCBiL2FyY2gvbTY4ay9ocDMwMC9pbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNmYWJlMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9ocDMwMC9pbnRzLmgKQEAgLTAsMCArMSw5IEBACitleHRlcm4gdm9pZCBocDMwMF9pbml0X0lSUSh2b2lkKTsKK2V4dGVybiB2b2lkICgqaHAzMDBfaGFuZGxlcnNbOF0pKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiB2b2lkIGhwMzAwX2ZyZWVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCk7CitleHRlcm4gaW50IGhwMzAwX3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsCisJCWlycXJldHVybl90ICgqaGFuZGxlcikgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKwkJdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKTsKKworLyogbnVtYmVyIG9mIGludGVycnVwdHMsIGluY2x1ZGVzIDAgKHdoYXQncyB0aGF0PykgKi8KKyNkZWZpbmUgSFAzMDBfTlVNX0lSUVMgOApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2hwMzAwL2tzeW1zLmMgYi9hcmNoL202OGsvaHAzMDAva3N5bXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjAyODMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2hwMzAwL2tzeW1zLmMKQEAgLTAsMCArMSw5IEBACisvKgorICogIGxpbnV4L2FyY2gvbTY4ay9ocDMwMC9rc3ltcy5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OCBQaGlsaXAgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+CisgKgorICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgSFAzMDAtc3BlY2lmaWMga2VybmVsIHN5bWJvbHMuICBOb25lIHlldC4gOi0pCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2hwMzAwL3JlYm9vdC5TIGIvYXJjaC9tNjhrL2hwMzAwL3JlYm9vdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZWI4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaHAzMDAvcmVib290LlMKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqICBsaW51eC9hcmNoL202OGsvaHAzMDAvcmVib290LlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk4IFBoaWxpcCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4KKyAqCisgKiAgRG8gdGhlIGRpcnR5IHdvcmsgb2YgcmVib290aW5nIHRoZSBtYWNoaW5lLiAgQmFzaWNhbGx5IHdlIG5lZWQgdG8gdW5kbyBhbGwgdGhlCisgKiAgZ29vZCBzdHVmZiB0aGF0IGhlYWQuUyBkaWQgd2hlbiB3ZSBzdGFydGVkIHVwLiAgVGhlIGNhY2hlcyBhbmQgTU1VIG11c3QgYmUKKyAqICBkaXNhYmxlZCBhbmQgdGhlbiB3ZSBqdW1wIGJhY2sgdG8gdGhlIFBST00uICBUaGlzIGlzIGEgYml0IGdydWVzb21lIGJ1dCB3ZSBwdXQKKyAqICBhIGJyYXZlIGZhY2Ugb24gaXQuCisgKi8KKworLyogWFhYIERvZXNuJ3Qgd29yayB5ZXQuICBOb3Qgc3VyZSB3aHkgYW5kIGNhbid0IGJlIGJvdGhlcmVkIHRvIGZpeCBpdCBhdCB0aGUgbW9tZW50LiAqLworCisJLmdsb2JsCWhwMzAwX3Jlc2V0CitocDMwMF9yZXNldDoKKwlqbXAJaHAzMDBfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9ocDMwMC90aW1lLmMgYi9hcmNoL202OGsvaHAzMDAvdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYTViMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaHAzMDAvdGltZS5jCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiAgbGludXgvYXJjaC9tNjhrL2hwMzAwL3RpbWUuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTggUGhpbGlwIEJsdW5kZWxsIDxwaGlsYkBnbnUub3JnPgorICoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIEhQMzAwLXNwZWNpZmljIHRpbWUgaGFuZGxpbmcgY29kZS4KKyAqLworCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL2JsaW5rZW4uaD4KKyNpbmNsdWRlICJpbnRzLmgiCisKKy8qIENsb2NrIGhhcmR3YXJlIGRlZmluaXRpb25zICovCisKKyNkZWZpbmUgQ0xPQ0tCQVNFCTB4ZjA1ZjgwMDAKKworI2RlZmluZQlDTEtDUjEJCTB4MQorI2RlZmluZQlDTEtDUjIJCTB4MworI2RlZmluZQlDTEtDUjMJCUNMS0NSMQorI2RlZmluZQlDTEtTUgkJQ0xLQ1IyCisjZGVmaW5lCUNMS01TQjEJCTB4NQorI2RlZmluZQlDTEtNU0IyCQkweDkKKyNkZWZpbmUJQ0xLTVNCMwkJMHhECisKKy8qIFRoaXMgaXMgZm9yIG1hY2hpbmVzIHdoaWNoIGdlbmVyYXRlIHRoZSBleGFjdCBjbG9jay4gKi8KKyNkZWZpbmUgVVNFQ1NfUEVSX0pJRkZZICgxMDAwMDAwL0haKQorCisjZGVmaW5lIElOVFZBTCAoKDEwMDAwIC8gNCkgLSAxKQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaHAzMDBfdGljayhpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCWlycXJldHVybl90ICgqdmVjdG9yKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikgPSBkZXZfaWQ7CisJaW5fOChDTE9DS0JBU0UgKyBDTEtTUik7CisJYXNtIHZvbGF0aWxlICgibW92cHcgJTFAKDUpLCUwIiA6ICI9ZCIgKHRtcCkgOiAiYSIgKENMT0NLQkFTRSkpOworCS8qIFR1cm4gb2ZmIHRoZSBuZXR3b3JrIGFuZCBTQ1NJIGxlZHMgKi8KKwlibGlua2VuX2xlZHMoMCwgMHhlMCk7CisJcmV0dXJuIHZlY3RvcihpcnEsIE5VTEwsIHJlZ3MpOworfQorCit1bnNpZ25lZCBsb25nIGhwMzAwX2dldHRpbWVvZmZzZXQodm9pZCkKK3sKKyAgLyogUmVhZCBjdXJyZW50IHRpbWVyIDEgdmFsdWUgKi8KKyAgdW5zaWduZWQgY2hhciBsc2IsIG1zYjEsIG1zYjI7CisgIHVuc2lnbmVkIHNob3J0IHRpY2tzOworCisgIG1zYjEgPSBpbl84KENMT0NLQkFTRSArIDUpOworICBsc2IgPSBpbl84KENMT0NLQkFTRSArIDcpOworICBtc2IyID0gaW5fOChDTE9DS0JBU0UgKyA1KTsKKyAgaWYgKG1zYjEgIT0gbXNiMikKKyAgICAvKiBBIGNhcnJ5IGhhcHBlbmVkIHdoaWxlIHdlIHdlcmUgcmVhZGluZy4gIFJlYWQgaXQgYWdhaW4gKi8KKyAgICBsc2IgPSBpbl84KENMT0NLQkFTRSArIDcpOworICB0aWNrcyA9IElOVFZBTCAtICgobXNiMiA8PCA4KSB8IGxzYik7CisgIHJldHVybiAoVVNFQ1NfUEVSX0pJRkZZICogdGlja3MpIC8gSU5UVkFMOworfQorCit2b2lkIF9faW5pdCBocDMwMF9zY2hlZF9pbml0KGlycXJldHVybl90ICgqdmVjdG9yKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikpCit7CisgIG91dF84KENMT0NLQkFTRSArIENMS0NSMiwgMHgxKTsJCS8qIHNlbGVjdCBDUjEgKi8KKyAgb3V0XzgoQ0xPQ0tCQVNFICsgQ0xLQ1IxLCAweDEpOwkJLyogcmVzZXQgKi8KKworICBhc20gdm9sYXRpbGUoIiBtb3ZwdyAlMCwlMUAoNSkiIDogOiAiZCIgKElOVFZBTCksICJhIiAoQ0xPQ0tCQVNFKSk7CisKKyAgY3B1X3JlcXVlc3RfaXJxKDYsIGhwMzAwX3RpY2ssIElSUV9GTEdfU1RELCAidGltZXIgdGljayIsIHZlY3Rvcik7CisKKyAgb3V0XzgoQ0xPQ0tCQVNFICsgQ0xLQ1IyLCAweDEpOwkJLyogc2VsZWN0IENSMSAqLworICBvdXRfOChDTE9DS0JBU0UgKyBDTEtDUjEsIDB4NDApOwkJLyogZW5hYmxlIGlycSAqLworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2hwMzAwL3RpbWUuaCBiL2FyY2gvbTY4ay9ocDMwMC90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVmOTk4NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9ocDMwMC90aW1lLmgKQEAgLTAsMCArMSw0IEBACitleHRlcm4gdm9pZCBocDMwMF9zY2hlZF9pbml0KGlycXJldHVybl90ICgqdmVjdG9yKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaHAzMDBfZ2V0dGltZW9mZnNldCAodm9pZCk7CisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL0NIQU5HRVMgYi9hcmNoL202OGsvaWZwc3AwNjAvQ0hBTkdFUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWU3MTJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL0NIQU5HRVMKQEAgLTAsMCArMSwxMjAgQEAKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorTU9UT1JPTEEgTUlDUk9QUk9DRVNTT1IgJiBNRU1PUlkgVEVDSE5PTE9HWSBHUk9VUAorTTY4MDAwIEhpLVBlcmZvcm1hbmNlIE1pY3JvcHJvY2Vzc29yIERpdmlzaW9uCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZQorUHJvZHVjdGlvbiBSZWxlYXNlIFAxLjAwIC0tIE9jdG9iZXIgMTAsIDE5OTQKKworTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IKkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUSEUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitNT1RPUk9MQSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0hFVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorYW5kIGFueSB3YXJyYW50eSBhZ2FpbnN0IGluZnJpbmdlbWVudCB3aXRoIHJlZ2FyZCB0byB0aGUgU09GVFdBUkUKKyhJTkNMVURJTkcgQU5ZIE1PRElGSUVEIFZFUlNJT05TIFRIRVJFT0YpIGFuZCBhbnkgYWNjb21wYW55aW5nIHdyaXR0ZW4gbWF0ZXJpYWxzLgorCitUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorSU4gTk8gRVZFTlQgU0hBTEwgTU9UT1JPTEEgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUyBQUk9GSVRTLAorQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIEJVU0lORVNTIElORk9STUFUSU9OLCBPUiBPVEhFUiBQRUNVTklBUlkgTE9TUykKK0FSSVNJTkcgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTT0ZUV0FSRS4KK01vdG9yb2xhIGFzc3VtZXMgbm8gcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBtYWludGVuYW5jZSBhbmQgc3VwcG9ydCBvZiB0aGUgU09GVFdBUkUuCisKK1lvdSBhcmUgaGVyZWJ5IGdyYW50ZWQgYSBjb3B5cmlnaHQgbGljZW5zZSB0byB1c2UsIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNPRlRXQVJFCitzbyBsb25nIGFzIHRoaXMgZW50aXJlIG5vdGljZSBpcyByZXRhaW5lZCB3aXRob3V0IGFsdGVyYXRpb24gaW4gYW55IG1vZGlmaWVkIGFuZC9vcgorcmVkaXN0cmlidXRlZCB2ZXJzaW9ucywgYW5kIHRoYXQgc3VjaCBtb2RpZmllZCB2ZXJzaW9ucyBhcmUgY2xlYXJseSBpZGVudGlmaWVkIGFzIHN1Y2guCitObyBsaWNlbnNlcyBhcmUgZ3JhbnRlZCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlIHVuZGVyIGFueSBwYXRlbnRzCitvciB0cmFkZW1hcmtzIG9mIE1vdG9yb2xhLCBJbmMuCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQ0hBTkdFUyBTSU5DRSBMQVNUIFJFTEVBU0U6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMSkgIm1vdmVwIiBlbXVsYXRpb24gd2hlcmUgZGF0YSB3YXMgYmVpbmcgcmVhZCBmcm9tIG1lbW9yeQord2FzIHJlYWRpbmcgdGhlIGludGVybWVkaWF0ZSBieXRlcy4gRW11bGF0aW9uIG5vdyBvbmx5CityZWFkcyB0aGUgcmVxdWlyZWQgYnl0ZXMuCisKKzIpICJmbG9nbiIsICJmbG9nMiIsIGFuZCAiZmxvZzEwIiBvZiAiMSIgd2FzIHNldHRpbmcgdGhlCitJbmV4YWN0IEZQU1IgYml0LiBFbXVsYXRpb24gbm93IGRvZXMgbm90IHNldCBJbmV4YWN0IGZvcgordGhpcyBjYXNlLgorCiszKSBGb3IgYW4gb3BjbGFzcyB0aHJlZSBGUCBpbnN0cnVjdGlvbiB3aGVyZSB0aGUgZWZmZWN0aXZlIGFkZHJlc3NpbmcKK21vZGUgd2FzIHByZS1kZWNyZW1lbnQgb3IgcG9zdC1pbmNyZW1lbnQgYW5kIHRoZSBhZGRyZXNzIHJlZ2lzdGVyCit3YXMgQTAgb3IgQTEsIHRoZSBhZGRyZXNzIHJlZ2lzdGVyIHdhcyBub3QgYmVpbmcgdXBkYXRlZCBhcyBhIHJlc3VsdAorb2YgdGhlIG9wZXJhdGlvbi4gVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKzQpIEJldGEgQi4yIHZlcnNpb24gaGFkIHRoZSBmb2xsb3dpbmcgZXJyYXR1bToKKworCVNjZW5hcmlvOgorCS0tLS0tLS0tLQorCUlmIHtpLGR9bWVtX3tyZWFkLHdyaXRlfV97Ynl0ZSx3b3JkLGxvbmd9KCkgcmV0dXJucworCWEgZmFpbGluZyB2YWx1ZSB0byB0aGUgNjgwNjBTUCwgdGhlIHBhY2thZ2UgaWdub3JlcworCXRoaXMgcmV0dXJuIHZhbHVlIGFuZCBjb250aW51ZXMgd2l0aCBwcm9ncmFtIGV4ZWN1dGlvbgorCWFzIGlmIGl0IG5ldmVyIHJlY2VpdmVkIGEgZmFpbGluZyB2YWx1ZS4KKworCUVmZmVjdDoKKwktLS0tLS0tCisJRm9yIGV4YW1wbGUsIGlmIGEgdXNlciBleGVjdXRlZCAiZnNpbi54IEFERFIsZnAwIiB3aGVyZQorCUFERFIgc2hvdWxkIGNhdXNlIGEgInNlZ21lbnRhdGlvbiB2aW9sYXRpb24iLCB0aGUgbWVtb3J5IHJlYWQKKwlyZXF1ZXN0ZWQgYnkgdGhlIHBhY2thZ2Ugc2hvdWxkIHJldHVybiBhIGZhaWxpbmcgdmFsdWUKKwl0byB0aGUgcGFja2FnZS4gU2luY2UgdGhlIHBhY2thZ2UgY3VycmVudGx5IGlnbm9yZXMgdGhpcworCXJldHVybiB2YWx1ZSwgdGhlIHVzZXIgcHJvZ3JhbSB3aWxsIGNvbnRpbnVlIHRvIHRoZQorCW5leHQgaW5zdHJ1Y3Rpb24sIGFuZCB0aGUgcmVzdWx0IGNyZWF0ZWQgaW4gZnAwIHdpbGwgYmUKKwl1bmRlZmluZWQuCisKKwlGaXg6CisJLS0tLQorCVRoaXMgaGFzIGJlZW4gZml4ZWQgaW4gdGhlIGN1cnJlbnQgcmVsZWFzZS4KKworCU5vdGVzOgorCS0tLS0tLQorCVVwb24gcmVjZWl2aW5nIGEgbm9uLXplcm8gKGZhaWxpbmcpIHJldHVybiB2YWx1ZSBmcm9tCisJYSB7aSxkfW1lbV97cmVhZCx3cml0ZX1fe2J5dGUsd29yZCxsb25nfSgpICJjYWxsLW91dCIsCisJdGhlIHBhY2thZ2UgY3JlYXRlcyBhIDE2LWJ5dGUgYWNjZXNzIGVycm9yIHN0YWNrIGZyYW1lCisJZnJvbSB0aGUgY3VycmVudCBleGNlcHRpb24gc3RhY2sgZnJhbWUgYW5kIGV4aXRzCisJdGhyb3VnaCB0aGUgImNhbGwtb3V0IiBfcmVhbF9hY2Nlc3MoKS4gVGhpcyBpcyB0aGUgcHJvY2VzcworCWFzIGRlc2NyaWJlZCBpbiB0aGUgTUM2ODA2MCBVc2VyJ3MgTWFudWFsLgorCisJRm9yIGluc3RydWN0aW9uIHJlYWQgYWNjZXNzIGVycm9ycywgdGhlIGluZm8gc3RhY2tlZCBpczoKKwkJU1IJPSBTUiBhdCB0aW1lIG9mIGV4Y2VwdGlvbgorCQlQQwk9IFBDIG9mIGluc3RydWN0aW9uIGJlaW5nIGVtdWxhdGVkCisJCVZPRkYJPSAkNDAwOCAoc3RhY2sgZnJhbWUgZm9ybWF0IHR5cGUpCisJCUFERFJFU1MJPSBQQyBvZiBpbnN0cnVjdGlvbiBiZWluZyBlbXVsYXRlZAorCQlGU0xXCT0gRkFVTFQgU1RBVFVTIExPTkdXT1JECisKKwlUaGUgdmFsaWQgRlNMVyBiaXRzIGFyZToKKwkJYml0IDI3CQk9IDEJKG1pc2FsaWduZWQgYml0KQorCQliaXQgMjQJCT0gMQkocmVhZCkKKwkJYml0IDIzCQk9IDAJKHdyaXRlKQorCQliaXQgMjI6MjEJPSAxMAkoU0laRSA9IHdvcmQpCisJCWJpdCAyMDoxOQk9IDAwCShUVCkKKwkJYml0IDE4OjE2CT0geDEwCShUTTsgeCA9IDEgZm9yIHN1cGVydmlzb3IgbW9kZSkKKwkJYml0IDE1CQk9IDEJKElPKQorCQliaXQgMAkJPSAxCShTb2Z0d2FyZSBFbXVsYXRpb24gRXJyb3IpCisKKwlhbGwgb3RoZXIgYml0cyBhcmUgRVFVQUwgVE8gWkVSTyBhbmQgY2FuIGJlIHNldCBieSB0aGUgX3JlYWxfYWNjZXNzKCkKKwkiY2FsbC1vdXQiIHN0dWIgYnkgdGhlIHVzZXIgYXMgYXBwcm9wcmlhdGUuIFRoZSBNQzY4MDYwIFVzZXIncyBNYW51YWwKKwlzdGF0ZWQgdGhhdCBPTkxZICJiaXQgMCIgd291bGQgYmUgc2V0LiBUaGUgMDYwU1AgYXR0ZW1wdHMgdG8gc2V0IGEgZmV3CisJb3RoZXIgYml0cy4KKworCUZvciBkYXRhIHJlYWQvd3JpdGUgYWNjZXNzIGVycm9ycywgdGhlIGluZm8gc3RhY2tlZCBpczoKKwkJU1IJPSBTUiBhdCB0aW1lIG9mIGV4Y2VwdGlvbgorCQlQQwk9IFBDIG9mIGluc3RydWN0aW9uIGJlaW5nIGVtdWxhdGVkCisJCVZPRkYJPSAkNDAwOCAoc3RhY2sgZnJhbWUgZm9ybWF0IHR5cGUpCisJCUFERFJFU1MJPSBBZGRyZXNzIG9mIHNvdXJjZSBvciBkZXN0aW5hdGlvbiBvcGVyYW5kCisJCUZTTFcJPSBGQVVMVCBTVEFUVVMgTE9OR1dPUkQKKworCVRoZSB2YWxpZCBGU0xXIGJpdHMgYXJlOgorCQliaXQgMjcJCT0gMAkobWlzYWxpZ25lZCBiaXQpCisJCWJpdCAyNAkJPSB4CShyZWFkOyAxIGlmIHJlYWQsIDAgaWYgd3JpdGUpCisJCWJpdCAyMwkJPSB4CSh3cml0ZTsgMSBpZiB3cml0ZSwgMCBpZiByZWFkKQorCQliaXQgMjI6MjEJPSB4eAkoU0laRTsgc2VlIE1DNjgwNjAgVXNlcidzIE1hbnVhbCkKKwkJYml0IDIwOjE5CT0gMDAJKFRUKQorCQliaXQgMTg6MTYJPSB4MDEJKFRNOyB4ID0gMSBmb3Igc3VwZXJ2aXNvciBtb2RlKQorCQliaXQgMTUJCT0gMAkoSU8pCisJCWJpdCAwCQk9IDEJKFNvZnR3YXJlIEVtdWxhdGlvbiBFcnJvcikKKworCWFsbCBvdGhlciBiaXRzIGFyZSBFUVVBTCBUTyBaRVJPIGFuZCBjYW4gYmUgc2V0IGJ5IHRoZSBfcmVhbF9hY2Nlc3MoKQorCSJjYWxsLW91dCIgc3R1YiBieSB0aGUgdXNlciBhcyBhcHByb3ByaWF0ZS4gVGhlIE1DNjgwNjAgVXNlcidzIE1hbnVhbAorCXN0YXRlZCB0aGF0IE9OTFkgImJpdCAwIiB3b3VsZCBiZSBzZXQuIFRoZSAwNjBTUCBhdHRlbXB0cyB0byBzZXQgYSBmZXcKKwlvdGhlciBiaXRzLgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL01JU0MgYi9hcmNoL202OGsvaWZwc3AwNjAvTUlTQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2U2NDRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL01JU0MKQEAgLTAsMCArMSwyMDEgQEAKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorTU9UT1JPTEEgTUlDUk9QUk9DRVNTT1IgJiBNRU1PUlkgVEVDSE5PTE9HWSBHUk9VUAorTTY4MDAwIEhpLVBlcmZvcm1hbmNlIE1pY3JvcHJvY2Vzc29yIERpdmlzaW9uCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZQorUHJvZHVjdGlvbiBSZWxlYXNlIFAxLjAwIC0tIE9jdG9iZXIgMTAsIDE5OTQKKworTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IKkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUSEUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitNT1RPUk9MQSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0hFVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorYW5kIGFueSB3YXJyYW50eSBhZ2FpbnN0IGluZnJpbmdlbWVudCB3aXRoIHJlZ2FyZCB0byB0aGUgU09GVFdBUkUKKyhJTkNMVURJTkcgQU5ZIE1PRElGSUVEIFZFUlNJT05TIFRIRVJFT0YpIGFuZCBhbnkgYWNjb21wYW55aW5nIHdyaXR0ZW4gbWF0ZXJpYWxzLgorCitUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorSU4gTk8gRVZFTlQgU0hBTEwgTU9UT1JPTEEgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUyBQUk9GSVRTLAorQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIEJVU0lORVNTIElORk9STUFUSU9OLCBPUiBPVEhFUiBQRUNVTklBUlkgTE9TUykKK0FSSVNJTkcgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTT0ZUV0FSRS4KK01vdG9yb2xhIGFzc3VtZXMgbm8gcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBtYWludGVuYW5jZSBhbmQgc3VwcG9ydCBvZiB0aGUgU09GVFdBUkUuCisKK1lvdSBhcmUgaGVyZWJ5IGdyYW50ZWQgYSBjb3B5cmlnaHQgbGljZW5zZSB0byB1c2UsIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNPRlRXQVJFCitzbyBsb25nIGFzIHRoaXMgZW50aXJlIG5vdGljZSBpcyByZXRhaW5lZCB3aXRob3V0IGFsdGVyYXRpb24gaW4gYW55IG1vZGlmaWVkIGFuZC9vcgorcmVkaXN0cmlidXRlZCB2ZXJzaW9ucywgYW5kIHRoYXQgc3VjaCBtb2RpZmllZCB2ZXJzaW9ucyBhcmUgY2xlYXJseSBpZGVudGlmaWVkIGFzIHN1Y2guCitObyBsaWNlbnNlcyBhcmUgZ3JhbnRlZCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlIHVuZGVyIGFueSBwYXRlbnRzCitvciB0cmFkZW1hcmtzIG9mIE1vdG9yb2xhLCBJbmMuCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1JFTEVBU0UgRklMRSBWRVJTSU9OUzoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Zwc3Auc2EKKy0tLS0tLS0tLS0KK2ZyZWFsLnMgICAgIDogMi40CitoZHIuZnB1ICAgICA6IDIuNAoreF9mb3ZmbC5zICAgOiAyLjE2Cit4X2Z1bmZsLnMgICA6IDIuMTkKK3hfZnVuc3VwcC5zIDogMi4yNworeF9lZmZhZGQucyAgOiAyLjIxCit4X2ZvcGVyci5zICA6IDIuOQoreF9mc25hbi5zICAgOiAyLjEyCit4X2ZpbmV4LnMgICA6IDIuMTQKK3hfZmR6LnMgICAgIDogMi41Cit4X2ZsaW5lLnMgICA6IDIuNQoreF9mdW5pbXAucyAgOiAyLjI3Citmc2luLnMgICAgICA6IDIuNgorZnRhbi5zICAgICAgOiAyLjYKK2ZhdGFuLnMgICAgIDogMi4zCitmYXNpbi5zICAgICA6IDIuMworZmFjb3MucyAgICAgOiAyLjUKK2ZldG94LnMgICAgIDogMi40CitmZ2V0ZW0ucyAgICA6IDIuNQorZmNvc2gucyAgICAgOiAyLjQKK2ZzaW5oLnMgICAgIDogMi41CitmdGFuaC5zICAgICA6IDIuMworZmxvZ24ucyAgICAgOiAyLjYKK2ZhdGFuaC5zICAgIDogMi40CitmbG9nMi5zICAgICA6IDIuNAorZnR3b3RveC5zICAgOiAyLjQKK2Ztb3ZlY3IucyAgIDogMi41Citmc2NhbGUucyAgICA6IDIuNQorZnJlbV9tb2QucyAgOiAyLjYKK2ZrZXJuLnMgICAgIDogMi42Citma2VybjIucyAgICA6IDIuNQorZmdlbl9leGNlcHQuczogMi43Citmb3B0YmwucyAgICA6IDIuMworZm11bC5zICAgICAgOiAyLjUKK2Zpbi5zICAgICAgIDogMi40CitmZGl2LnMgICAgICA6IDIuNQorZm5lZy5zICAgICAgOiAyLjQKK2Z0c3QucyAgICAgIDogMi4zCitmaW50LnMgICAgICA6IDIuMworZmludHJ6LnMgICAgOiAyLjMKK2ZhYnMucyAgICAgIDogMi40CitmY21wLnMgICAgICA6IDIuNAorZnNnbG11bC5zICAgOiAyLjUKK2ZzZ2xkaXYucyAgIDogMi44CitmYWRkLnMgICAgICA6IDIuNgorZnN1Yi5zICAgICAgOiAyLjYKK2ZzcXJ0LnMgICAgIDogMi40CitmbWlzYy5zICAgICA6IDIuMworZmRiY2MucyAgICAgOiAyLjgKK2Z0cmFwY2MucyAgIDogMi41Citmc2NjLnMgICAgICA6IDIuNgorZm1vdm0ucyAgICAgOiAyLjE1CitmY3RybC5zICAgICA6IDIuNgorZmNhbGNfZWEucyAgOiAyLjcKK2ZtZW0ucyAgICAgIDogMi45Citmb3V0LnMgICAgICA6IDIuOQoraXJlZy5zICAgICAgOiAyLjYKK2ZkZW5vcm0ucyAgIDogMi4zCitmcm91bmQucyAgICA6IDIuNAorZm5vcm0ucyAgICAgOiAyLjMKK2ZvcHRhZ19zZXQuczogMi40CitmcmVzdWx0LnMgICA6IDIuMworZnBhY2sucyAgICAgOiAyLjYKK2ZkZWNiaW4ucyAgIDogMi40CitmYmluZGVjLnMgICA6IDIuNQorZmJpbnN0ci5zICAgOiAyLjMKK2ZhY2Nlc3MucyAgIDogMi4zCisKK3BmcHNwLnNhCistLS0tLS0tLS0tCitmcmVhbC5zICAgICA6IDIuNAoraGRyLmZwdSAgICAgOiAyLjQKK3hfZm92ZmwucyAgIDogMi4xNgoreF9mdW5mbC5zICAgOiAyLjE5Cit4X2Z1bnN1cHAucyA6IDIuMjcKK3hfZWZmYWRkLnMgIDogMi4yMQoreF9mb3BlcnIucyAgOiAyLjkKK3hfZnNuYW4ucyAgIDogMi4xMgoreF9maW5leC5zICAgOiAyLjE0Cit4X2Zkei5zICAgICA6IDIuNQoreF9mbGluZTIucyAgOiAyLjMKK2ZjYWxjX2VhLnMgIDogMi43Citmb3B0YmwyLnMgICA6IDIuNAorZm1vdm0ucyAgICAgOiAyLjE1CitmY3RybC5zICAgICA6IDIuNgorZm1pc2MucyAgICAgOiAyLjMKK2ZkZW5vcm0ucyAgIDogMi4zCitmcm91bmQucyAgICA6IDIuNAorZm5vcm0ucyAgICAgOiAyLjMKK2ZvcHRhZ19zZXQuczogMi40CitmcmVzdWx0LnMgICA6IDIuMworZm91dC5zICAgICAgOiAyLjkKK2ZtdWwucyAgICAgIDogMi41CitmaW4ucyAgICAgICA6IDIuNAorZmRpdi5zICAgICAgOiAyLjUKK2ZuZWcucyAgICAgIDogMi40CitmdHN0LnMgICAgICA6IDIuMworZmludC5zICAgICAgOiAyLjMKK2ZpbnRyei5zICAgIDogMi4zCitmYWJzLnMgICAgICA6IDIuNAorZmNtcC5zICAgICAgOiAyLjQKK2ZzZ2xtdWwucyAgIDogMi41Citmc2dsZGl2LnMgICA6IDIuOAorZmFkZC5zICAgICAgOiAyLjYKK2ZzdWIucyAgICAgIDogMi42Citmc3FydC5zICAgICA6IDIuNAoraXJlZy5zICAgICAgOiAyLjYKK2ZwYWNrLnMgICAgIDogMi42CitmZGVjYmluLnMgICA6IDIuNAorZmJpbmRlYy5zICAgOiAyLjUKK2ZiaW5zdHIucyAgIDogMi4zCitmYWNjZXNzLnMgICA6IDIuMworCitmcGxzcC5zYQorLS0tLS0tLS0tLQorbGZwdG9wLnMgICAgOiAyLjMKK2hkci5mcHUgICAgIDogMi40Citmc2luLnMgICAgICA6IDIuNgorZnRhbi5zICAgICAgOiAyLjYKK2ZhdGFuLnMgICAgIDogMi4zCitmYXNpbi5zICAgICA6IDIuMworZmFjb3MucyAgICAgOiAyLjUKK2ZldG94LnMgICAgIDogMi40CitmZ2V0ZW0ucyAgICA6IDIuNQorZmNvc2gucyAgICAgOiAyLjQKK2ZzaW5oLnMgICAgIDogMi41CitmdGFuaC5zICAgICA6IDIuMworZmxvZ24ucyAgICAgOiAyLjYKK2ZhdGFuaC5zICAgIDogMi40CitmbG9nMi5zICAgICA6IDIuNAorZnR3b3RveC5zICAgOiAyLjQKK2ZzY2FsZS5zICAgIDogMi41CitmcmVtX21vZC5zICA6IDIuNgorbF9zdXBwb3J0LnMgOiAyLjE1Citmbm9ybS5zICAgICA6IDIuMworCitpc3Auc2EKKy0tLS0tLS0tLS0KK2lyZWFsLnMgICAgIDogMi40CitoZHIuaW50ICAgICA6IDIuNAoreF91aWVoLnMgICAgOiAyLjEzCitpY2FsY19lYS5zICA6IDIuMTEKK2ltb3ZlcC5zICAgIDogMi44CitpY2hrMmNtcDIucyA6IDIuNgoraWRpdjY0LnMgICAgOiAyLjEwCitpbXVsNjQucyAgICA6CitpY2FzMi5zICAgICA6IDIuMTEKK2ljYXMucyAgICAgIDogMi4xMgoraWNhczJfY29yZS5zOiAyLjYKK2ljYXNfY29yZS5zIDogMi42CisKK2lsc3Auc2EKKy0tLS0tLS0tLS0KK2xpdG9wLnMgICAgIDogMi4yCitsX2lkaXY2NC5zICA6IDIuOAorbF9pbXVsNjQucyAgOiAyLjYKK2xfaWNoazJjbXAyLnM6IDIuNQorCitleC4gZmlsZXMKKy0tLS0tLS0tLS0KK3dyay9mc2tlbGV0b24uczogMi4yCit3cmsvaXNrZWxldG9uLnM6IDIuMgord3JrL29zLnMgICAgOiAyLjEKKwordGVzdHMKKy0tLS0tLS0tLS0KK2l0ZXN0LnMgICAgIDogMi4yCitmdGVzdC5zICAgICA6IDIuMQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL01ha2VmaWxlIGIvYXJjaC9tNjhrL2lmcHNwMDYwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZTg0NzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaWZwc3AwNjAvTWFrZWZpbGUKQEAgLTAsMCArMSwxMCBAQAorIyBNYWtlZmlsZSBmb3IgNjgweDAgTGludXggNjgwNjAgaW50ZWdlci9mbG9hdGluZyBwb2ludCBzdXBwb3J0IHBhY2thZ2UKKyMKKyMgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiUkVBRE1FLmxlZ2FsIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisjIGZvciBtb3JlIGRldGFpbHMuCisKK29iai15IDo9IGZza2VsZXRvbi5vIGlza2VsZXRvbi5vIG9zLm8KKworRVhUUkFfQUZMQUdTIDo9IC10cmFkaXRpb25hbAorRVhUUkFfTERGTEFHUyA6PSAteApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL1JFQURNRSBiL2FyY2gvbTY4ay9pZnBzcDA2MC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNiY2VkNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9SRUFETUUKQEAgLTAsMCArMSw3MSBAQAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitNT1RPUk9MQSBNSUNST1BST0NFU1NPUiAmIE1FTU9SWSBURUNITk9MT0dZIEdST1VQCitNNjgwMDAgSGktUGVyZm9ybWFuY2UgTWljcm9wcm9jZXNzb3IgRGl2aXNpb24KK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlCitQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAorCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RIRSBTT0ZUV0FSRSBpcyBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzIGFuZCB3aXRob3V0IHdhcnJhbnR5LgorVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK01PVE9ST0xBIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCithbmQgYW55IHdhcnJhbnR5IGFnYWluc3QgaW5mcmluZ2VtZW50IHdpdGggcmVnYXJkIHRvIHRoZSBTT0ZUV0FSRQorKElOQ0xVRElORyBBTlkgTU9ESUZJRUQgVkVSU0lPTlMgVEhFUkVPRikgYW5kIGFueSBhY2NvbXBhbnlpbmcgd3JpdHRlbiBtYXRlcmlhbHMuCisKK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitJTiBOTyBFVkVOVCBTSEFMTCBNT1RPUk9MQSBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEJVU0lORVNTIFBST0ZJVFMsCitCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIE9USEVSIFBFQ1VOSUFSWSBMT1NTKQorQVJJU0lORyBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLgorTW90b3JvbGEgYXNzdW1lcyBubyByZXNwb25zaWJpbGl0eSBmb3IgdGhlIG1haW50ZW5hbmNlIGFuZCBzdXBwb3J0IG9mIHRoZSBTT0ZUV0FSRS4KKworWW91IGFyZSBoZXJlYnkgZ3JhbnRlZCBhIGNvcHlyaWdodCBsaWNlbnNlIHRvIHVzZSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGUgU09GVFdBUkUKK3NvIGxvbmcgYXMgdGhpcyBlbnRpcmUgbm90aWNlIGlzIHJldGFpbmVkIHdpdGhvdXQgYWx0ZXJhdGlvbiBpbiBhbnkgbW9kaWZpZWQgYW5kL29yCityZWRpc3RyaWJ1dGVkIHZlcnNpb25zLCBhbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KK05vIGxpY2Vuc2VzIGFyZSBncmFudGVkIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UgdW5kZXIgYW55IHBhdGVudHMKK29yIHRyYWRlbWFya3Mgb2YgTW90b3JvbGEsIEluYy4KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorRmlsZXMgaW4gdGhpcyBkaXJlY3Rvcnk6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Zwc3Auc2EJCUZ1bGwgRlAgS2VybmVsIE1vZHVsZSAtIGhleCBpbWFnZQorZnBzcC5zCQlGdWxsIEZQIEtlcm5lbCBNb2R1bGUgLSBzb3VyY2UgY29kZQorZnBzcC5kb2MJRnVsbCBGUCBLZXJuZWwgTW9kdWxlIC0gb24tbGluZSBkb2N1bWVudGF0aW9uCisKK3BmcHNwLnNhCVBhcnRpYWwgRlAgS2VybmVsIE1vZHVsZSAtIGhleCBpbWFnZQorcGZwc3AucwkJUGFydGlhbCBGUCBLZXJuZWwgTW9kdWxlIC0gc291cmNlIGNvZGUKKworZnBsc3Auc2EJRlAgTGlicmFyeSBNb2R1bGUgLSBoZXggaW1hZ2UKK2ZwbHNwLnMJCUZQIExpYnJhcnkgTW9kdWxlIC0gc291cmNlIGNvZGUKK2ZwbHNwLmRvYwlGUCBMaWJyYXJ5IE1vZHVsZSAtIG9uLWxpbmUgZG9jdW1lbnRhdGlvbgorCitpc3Auc2EJCUludGVnZXIgVW5pbXBsZW1lbnRlZCBLZXJuZWwgTW9kdWxlIC0gaGV4IGltYWdlCitpc3AucwkJSW50ZWdlciBVbmltcGxlbWVudGVkIEtlcm5lbCBNb2R1bGUgLSBzb3VyY2UgY29kZQoraXNwLmRvYwkJSW50ZWdlciBVbmltcGxlbWVudGVkIEtlcm5lbCBNb2R1bGUgLSBvbi1saW5lIGRvYworCitpbHNwLnNhCQlJbnRlZ2VyIFVuaW1wbGVtZW50ZWQgTGlicmFyeSBNb2R1bGUgLSBoZXggaW1hZ2UKK2lsc3AucwkJSW50ZWdlciBVbmltcGxlbWVudGVkIExpYnJhcnkgTW9kdWxlIC0gc291cmNlIGNvZGUKK2lsc3AuZG9jCUludGVnZXIgVW5pbXBsZW1lbnRlZCBMaWJyYXJ5IE1vZHVsZSAtIG9uLWxpbmUgZG9jCisKK2Zza2VsZXRvbi5zCVNhbXBsZSBDYWxsLW91dHMgbmVlZGVkIGJ5IGZwc3Auc2EgYW5kIHBmcHNwLnNhCisKK2lza2VsZXRvbi5zCVNhbXBsZSBDYWxsLW91dHMgbmVlZGVkIGJ5IGlzcC5zYQorCitvcy5zCQlTYW1wbGUgQ2FsbC1vdXRzIG5lZWRlZCBieSBmcHNwLnNhLCBwZnBzcC5zYSwgYW5kIGlzcC5zYQorCitmdGVzdC5zYQlTaW1wbGUgdGVzdCBwcm9ncmFtIHRvIHRlc3QgdGhhdCB7cH1mcHNwLnNhCisJCXdhcyBjb25uZWN0ZWQgcHJvcGVybHk7IGhleCBpbWFnZQorZnRlc3QucwkJYWJvdmUgdGVzdDsgc291cmNlIGNvZGUKKworaXRlc3Quc2EJU2ltcGxlIHRlc3QgcHJvZ3JhbSB0byB0ZXN0IHRoYXQgaXNwLnNhIHdhcworCQljb25uZWN0ZWQgcHJvcGVybHk7IGhleCBpbWFnZQoraXRlc3QucwkJYWJvdmUgdGVzdDsgc291cmNlIGNvZGUKKwordGVzdC5kb2MJb24tbGluZSBkb2N1bWVudGF0aW9uIGZvciB7aSxmfXRlc3Quc2EKKworUkVBRE1FCQlUaGlzIGZpbGUKKworRVJSQVRBCQlLbm93biBlcnJhdGEgZm9yIHRoaXMgcmVsZWFzZQorCitNSVNDCQlSZWxlYXNlIGZpbGUgdmVyc2lvbiBudW1iZXJzCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvVEVTVC5ET0MgYi9hcmNoL202OGsvaWZwc3AwNjAvVEVTVC5ET0MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU1OTAwYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9URVNULkRPQwpAQCAtMCwwICsxLDIwOCBAQAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitNT1RPUk9MQSBNSUNST1BST0NFU1NPUiAmIE1FTU9SWSBURUNITk9MT0dZIEdST1VQCitNNjgwMDAgSGktUGVyZm9ybWFuY2UgTWljcm9wcm9jZXNzb3IgRGl2aXNpb24KK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlCitQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAorCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RIRSBTT0ZUV0FSRSBpcyBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzIGFuZCB3aXRob3V0IHdhcnJhbnR5LgorVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK01PVE9ST0xBIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCithbmQgYW55IHdhcnJhbnR5IGFnYWluc3QgaW5mcmluZ2VtZW50IHdpdGggcmVnYXJkIHRvIHRoZSBTT0ZUV0FSRQorKElOQ0xVRElORyBBTlkgTU9ESUZJRUQgVkVSU0lPTlMgVEhFUkVPRikgYW5kIGFueSBhY2NvbXBhbnlpbmcgd3JpdHRlbiBtYXRlcmlhbHMuCisKK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitJTiBOTyBFVkVOVCBTSEFMTCBNT1RPUk9MQSBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEJVU0lORVNTIFBST0ZJVFMsCitCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIE9USEVSIFBFQ1VOSUFSWSBMT1NTKQorQVJJU0lORyBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLgorTW90b3JvbGEgYXNzdW1lcyBubyByZXNwb25zaWJpbGl0eSBmb3IgdGhlIG1haW50ZW5hbmNlIGFuZCBzdXBwb3J0IG9mIHRoZSBTT0ZUV0FSRS4KKworWW91IGFyZSBoZXJlYnkgZ3JhbnRlZCBhIGNvcHlyaWdodCBsaWNlbnNlIHRvIHVzZSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGUgU09GVFdBUkUKK3NvIGxvbmcgYXMgdGhpcyBlbnRpcmUgbm90aWNlIGlzIHJldGFpbmVkIHdpdGhvdXQgYWx0ZXJhdGlvbiBpbiBhbnkgbW9kaWZpZWQgYW5kL29yCityZWRpc3RyaWJ1dGVkIHZlcnNpb25zLCBhbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KK05vIGxpY2Vuc2VzIGFyZSBncmFudGVkIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UgdW5kZXIgYW55IHBhdGVudHMKK29yIHRyYWRlbWFya3Mgb2YgTW90b3JvbGEsIEluYy4KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorNjgwNjAgU09GVFdBUkUgUEFDS0FHRSAoS2VybmVsIHZlcnNpb24pIFNJTVBMRSBURVNUUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpbGVzIGl0ZXN0LnNhIGFuZCBmdGVzdC5zYSBjb250YWluIHNpbXBsZSB0ZXN0cyB0byBjaGVjawordGhlIHN0YXRlIG9mIHRoZSA2ODA2MElTUCBhbmQgNjgwNjBGUFNQIG9uY2UgdGhleSBoYXZlIGJlZW4gaW5zdGFsbGVkLgorCitSZWxlYXNlIGZpbGUgZm9ybWF0OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSByZWxlYXNlIGZpbGVzIGl0ZXN0LnNhIGFuZCBmdGVzdC5zYSBhcmUgZXNzZW50aWFsbHkKK2hleGFkZWNpbWFsIGltYWdlcyBvZiB0aGUgYWN0dWFsIHRlc3RzLiBUaGlzIGZvcm1hdCBpcyB0aGUKK09OTFkgZm9ybWF0IHRoYXQgd2lsbCBiZSBzdXBwb3J0ZWQuIFRoZSBoZXggaW1hZ2VzIHdlcmUgY3JlYXRlZAorYnkgYXNzZW1ibGluZyB0aGUgc291cmNlIGNvZGUgYW5kIHRoZW4gY29udmVydGluZyB0aGUgcmVzdWx0aW5nCitiaW5hcnkgb3V0cHV0IGltYWdlcyBpbnRvIEFTQ0lJIHRleHQgZmlsZXMuIFRoZSBoZXhhZGVjaW1hbAorbnVtYmVycyBhcmUgbGlzdGVkIHVzaW5nIHRoZSBNb3Rvcm9sYSBBc3NlbWJseSBzeW50YXggYXNzZW1ibGVyCitkaXJlY3RpdmUgImRjLmwiIChkZWZpbmUgY29uc3RhbnQgbG9uZ3dvcmQpLiBUaGUgZmlsZXMgY2FuIGJlCitjb252ZXJ0ZWQgdG8gb3RoZXIgYXNzZW1ibHkgc3ludGF4ZXMgYnkgdXNpbmcgYW55IHdvcmQgcHJvY2Vzc29yCit3aXRoIGEgZ2xvYmFsIHNlYXJjaCBhbmQgcmVwbGFjZSBmdW5jdGlvbi4KKworVG8gYXNzaXN0IGluIGFzc2VtYmxpbmcgYW5kIGxpbmtpbmcgdGhlc2UgbW9kdWxlcyB3aXRoIG90aGVyIG1vZHVsZXMsCit0aGUgaW5zdGFsbGVyIHNob3VsZCBhZGQgc3ltYm9saWMgbGFiZWxzIHRvIHRoZSB0b3Agb2YgdGhlIGZpbGVzLgorVGhpcyB3aWxsIGFsbG93IHRoZSBjYWxsaW5nIHJvdXRpbmVzIHRvIGFjY2VzcyB0aGUgZW50cnkgcG9pbnRzCitvZiB0aGVzZSBwYWNrYWdlcy4KKworVGhlIHNvdXJjZSBjb2RlIGl0ZXN0LnMgYW5kIGZ0ZXN0LnMgaGF2ZSBiZWVuIGluY2x1ZGVkIGJ1dCBvbmx5Citmb3IgZG9jdW1lbnRhdGlvbiBwdXJwb3Nlcy4KKworUmVsZWFzZSBmaWxlIHN0cnVjdHVyZToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyh0b3Agb2YgbW9kdWxlKQorCS0tLS0tLS0tLS0tLS0tLS0tCisJfAkJfCAtIDEyOCBieXRlLXNpemVkIHNlY3Rpb24KKyAgICgxKSAgfCAgIENhbGwtT3V0CXwgLSA0IGJ5dGVzIHBlciBlbnRyeSAodXNlciBmaWxscyB0aGVzZSBpbikKKwl8CQl8CisJLS0tLS0tLS0tLS0tLS0tLS0KKwl8CQl8IC0gOCBieXRlcyBwZXIgZW50cnkKKyAgICgyKSAgfCBFbnRyeSBQb2ludAl8IC0gdXNlciBkb2VzICJic3IiIG9yICJqc3IiIHRvIHRoaXMgYWRkcmVzcworCXwJCXwKKwktLS0tLS0tLS0tLS0tLS0tLQorCXwJCXwgLSBjb2RlIHNlY3Rpb24KKyAgICgzKSAgfgkJfgorCXwJCXwKKwktLS0tLS0tLS0tLS0tLS0tLQorKGJvdHRvbSBvZiBtb2R1bGUpCisKK1RoZSBmaXJzdCBzZWN0aW9uIG9mIHRoaXMgbW9kdWxlIGlzIHRoZSAiQ2FsbC1vdXQiIHNlY3Rpb24uIFRoaXMgc2VjdGlvbgoraXMgTk9UIElOQ0xVREVEIGluIHtpLGZ9dGVzdC5zYSAoYW4gZXhhbXBsZSAiQ2FsbC1vdXQiIHNlY3Rpb24gaXMgcHJvdmlkZWQgYXQKK3RoZSBlbmQgb2YgdGhpcyBmaWxlKS4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIGlzIHRvIGFsbG93IHRoZSB0ZXN0Cityb3V0aW5lcyB0byByZWZlcmVuY2UgZXh0ZXJuYWwgcHJpbnRpbmcgZnVuY3Rpb25zIHRoYXQgbXVzdCBiZSBwcm92aWRlZAorYnkgdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbS4gVGhpcyBzZWN0aW9uIE1VU1QgYmUgZXhhY3RseSAxMjggYnl0ZXMgaW4KK3NpemUuIFRoZXJlIGFyZSAzMiBmaWVsZHMsIGVhY2ggNCBieXRlcyBpbiBzaXplLiBFYWNoIGZpZWxkIGNvcnJlc3BvbmRzCit0byBhIGZ1bmN0aW9uIHJlcXVpcmVkIGJ5IHRoZSB0ZXN0IHBhY2thZ2VzICh0aGVzZSBmdW5jdGlvbnMgYW5kIHRoZWlyCitsb2NhdGlvbiBhcmUgbGlzdGVkIGluICI2ODA2MHtJU1AsRlBTUH0tVEVTVCBjYWxsLW91dHMiIGJlbG93KS4gRWFjaCBmaWVsZAorZW50cnkgc2hvdWxkIGNvbnRhaW4gdGhlIGFkZHJlc3Mgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gUkVMQVRJVkUgdG8KK3RoZSBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSAiY2FsbC1vdXQiIHNlY3Rpb24uIFRoZSAiQ2FsbC1vdXQiIHNlY3Rpb24gbXVzdAorc2l0IGFkamFjZW50IHRvIHRoZSB7aSxmfXRlc3Quc2EgaW1hZ2UgaW4gbWVtb3J5LiBTaW5jZSBpdGVzdC5zYSBhbmQgZnRlc3Quc2EKK2FyZSBpbmRpdmlkdWFsIHRlc3RzLCB0aGV5IGVhY2ggcmVxdWlyZSB0aGVpciBvd24gIkNhbGwtb3V0IiBzZWN0aW9ucy4KKworVGhlIHNlY29uZCBzZWN0aW9uLCB0aGUgIkVudHJ5LXBvaW50IiBzZWN0aW9uLCBpcyB1c2VkIGJ5IGV4dGVybmFsIHJvdXRpbmVzCit0byBhY2Nlc3MgdGhlIHRlc3Qgcm91dGluZXMuIFNpbmNlIHRoZSB7aSxmfXRlc3Quc2EgaGV4IGZpbGVzIGNvbnRhaW4KK25vIHN5bWJvbCBuYW1lcywgdGhpcyBzZWN0aW9uIGNvbnRhaW5zIGZ1bmN0aW9uIGVudHJ5IHBvaW50cyB0aGF0IGFyZSBmaXhlZAord2l0aCByZXNwZWN0IHRvIHRoZSB0b3Agb2YgdGhlIHBhY2thZ2UuIFRoZSBjdXJyZW50bHkgZGVmaW5lZCBlbnRyeS1wb2ludHMKK2FyZSBsaXN0ZWQgaW4gc2VjdGlvbiAiNjgwNjB7SVNQLEZQU1B9LVRFU1QgZW50cnkgcG9pbnRzIiBiZWxvdy4gQSBjYWxsaW5nCityb3V0aW5lIHdvdWxkIHNpbXBseSBleGVjdXRlIGEgImJzciIgb3IgImpzciIgdGhhdCBqdW1wZWQgdG8gdGhlIHNlbGVjdGVkCitmdW5jdGlvbiBlbnRyeS1wb2ludC4KKworRm9yIGV4YW1wbGUsIHRvIHJ1biB0aGUgMDYwSVNQIHRlc3QsIHdyaXRlIGEgcHJvZ3JhbSB0aGF0IGluY2x1ZGVzIHRoZQoraXRlc3Quc2EgZGF0YSBhbmQgZXhlY3V0ZSBzb21ldGhpbmcgc2ltaWxhciB0bzoKKworCWJzcglfMDYwSVNQX1RFU1QrMTI4KzAKKworKF8wNjBJU1BfVEVTVCBpcyB0aGUgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgIkNhbGwtb3V0IiBzZWN0aW9uOyB0aGUgIkNhbGwtb3V0Igorc2VjdGlvbiBpcyAxMjggYnl0ZXMgbG9uZzsgYW5kIHRoZSA2ODA2MElTUCB0ZXN0IGVudHJ5IHBvaW50IGlzIGxvY2F0ZWQKKzAgYnl0ZXMgZnJvbSB0aGUgdG9wIG9mIHRoZSAiRW50cnktcG9pbnQiIHNlY3Rpb24uKQorCitUaGUgdGhpcmQgc2VjdGlvbiBpcyB0aGUgY29kZSBzZWN0aW9uLiBBZnRlciBlbnRlcmluZyB0aHJvdWdoIGFuICJFbnRyeS1wb2ludCIsCit0aGUgZW50cnkgY29kZSBqdW1wcyB0byB0aGUgYXBwcm9wcmlhdGUgdGVzdCBjb2RlIHdpdGhpbiB0aGUgY29kZSBzZWN0aW9uLgorCis2ODA2MElTUC1URVNUIENhbGwtb3V0czoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMHgwOiBfcHJpbnRfc3RyaW5nKCkKKzB4NDogX3ByaW50X251bWJlcigpCisKKzY4MDYwRlBTUC1URVNUIENhbGwtb3V0czoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzB4MDogX3ByaW50X3N0cmluZygpCisweDQ6IF9wcmludF9udW1iZXIoKQorCitUaGUgdGVzdCBwYWNrYWdlcyBjYWxsIF9wcmludF9zdHJpbmcoKSBhbmQgX3ByaW50X251bWJlcigpCithcyBzdWJyb3V0aW5lcyBhbmQgZXhwZWN0IHRoZSBtYWluIHByb2dyYW0gdG8gcHJpbnQgYSBzdHJpbmcKK29yIGEgbnVtYmVyIHRvIGEgZmlsZSBvciB0byB0aGUgc2NyZWVuLgorSW4gIkMiLWxpa2UgZmFzaGlvbiwgdGhlIHRlc3QgcHJvZ3JhbSBjYWxsczoKKworCXByaW50X3N0cmluZygiVGVzdCBwYXNzZWQiKTsKKworCQlvcgorCisJcHJpbnRfbnVtYmVyKDIwKTsKKworRm9yIF9wcmludF9zdHJpbmcoKSwgdGhlIHRlc3QgcHJvZ3JhbXMgcGFzcyBhIGxvbmd3b3JkIGFkZHJlc3MKK29mIHRoZSBzdHJpbmcgb24gdGhlIHN0YWNrLiBGb3IgX3ByaW50X251bWJlcigpLCB0aGUgdGVzdCBwcm9ncmFtcyBwYXNzCithIGxvbmd3b3JkIG51bWJlciB0byBiZSBwcmludGVkLgorCitGb3IgZGVidWdnaW5nIHB1cnBvc2VzLCBhZnRlciB0aGUgbWFpbiBwcm9ncmFtIHBlcmZvcm1zIGEgInByaW50IgorZm9yIGEgdGVzdCBwYWNrYWdlLCBpdCBzaG91bGQgZmx1c2ggdGhlIG91dHB1dCBzbyB0aGF0IGl0J3Mgbm90CitidWZmZXJlZC4gSW4gdGhpcyB3YXksIGlmIHRoZSB0ZXN0IHByb2dyYW0gY3Jhc2hlcywgYXQgbGVhc3QgdGhlIHByZXZpb3VzCitzdGF0ZW1lbnRzIHByaW50ZWQgd2lsbCBiZSBzZWVuLgorCis2ODA2MElTUC1URVNUIEVudHJ5LXBvaW50czoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMHgwOiBpbnRlZ2VyIHRlc3QKKworNjgwNjBGUFNQLVRFU1QgRW50cnktcG9pbnRzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMHgwMDogbWFpbiBmcCB0ZXN0CisweDA4OiBGUCB1bmltcGxlbWVudGVkIHRlc3QKKzB4MTA6IEZQIGVuYWJsZWQgc25hbi9vcGVyci9vdmZsL3VuZmwvZHovaW5leAorCitUaGUgZmxvYXRpbmctcG9pbnQgdW5pdCB0ZXN0IGhhcyAzIGVudHJ5IHBvaW50cyB3aGljaCB3aWxsIHJlcXVpcmUKKzMgZGlmZmVyZW50IGNhbGxzIHRvIHRoZSBwYWNrYWdlIGlmIGVhY2ggb2YgdGhlIHRocmVlIGZvbGxvd2luZyB0ZXN0cworaXMgZGVzaXJlZDoKKworbWFpbiBmcCB0ZXN0OiB0ZXN0cyAoMSkgdW5pbXAgZWZmZWN0aXZlIGFkZHJlc3MgZXhjZXB0aW9uCisJCSAgICAoMikgdW5zdXBwb3J0ZWQgZGF0YSB0eXBlIGV4Y2VwdGlvbnMKKwkJICAgICgzKSBub24tbWFza2FibGUgb3ZlcmZsb3cvdW5kZXJmbG93IGV4Y2VwdGlvbnMKKworRlAgdW5pbXBsZW1lbnRlZDogdGVzdHMgRlAgdW5pbXBsZW1lbnRlZCBleGNlcHRpb24uIHRoaXMgb25lIGlzCisJCSAgc2VwYXJhdGUgZnJvbSB0aGUgcHJldmlvdXMgdGVzdHMgZm9yIHN5c3RlbXMgdGhhdCBkb24ndAorCQkgIHdhbnQgRlAgdW5pbXBsZW1lbnRlZCBpbnN0cnVjdGlvbnMuCisKK0ZQIGVuYWJsZWQ6IHRlc3RzIGVuYWJsZWQgc25hbi9vcGVyci9vdmZsL3VuZmwvZHovaW5leC4KKwkgICAgYmFzaWNhbGx5LCBpdCBlbmFibGVzIGVhY2ggb2YgdGhlc2UgZXhjZXB0aW9ucyBhbmQgZm9yY2VzCisJICAgIGVhY2ggdXNpbmcgYW4gaW1wbGVtZW50ZWQgRlAgaW5zdHJ1Y3Rpb24uIHRoaXMgcHJvY2VzcworCSAgICBleGVyY2lzZXMgX2Zwc3Bfe3NuYW4sb3BlcnIsb3ZmbCx1bmZsLGR6LGluZXh9KCkgYW5kCisJICAgIF9yZWFsX3tzbmFuLG9wZXJyLG92ZmwsdW5mbCxkeixpbmV4fSgpLiB0aGUgdGVzdCBleHBlY3RzCisJICAgIF9yZWFsX1hYWFgoKSB0byBkbyBub3RoaW5nIGV4Y2VwdCBjbGVhciB0aGUgZXhjZXB0aW9uCisJICAgIGFuZCAicnRlIi4gaWYgYSBzeXN0ZW0ncyBfcmVhbF9YWFhYKCkgaGFuZGxlciBjcmVhdGVzIGFuCisJICAgIGFsdGVybmF0ZSByZXN1bHQsIHRoZSB0ZXN0IHdpbGwgcHJpbnQgImZhaWxlZCIgYnV0IHRoaXMKKwkgICAgaXMgYWNjZXB0YWJsZS4KKworTWlzY2VsbGFuZW91czoKKy0tLS0tLS0tLS0tLS0tCitBZ2FpbiwgaXRlc3Quc2EgYW5kIGZ0ZXN0LnNhIGFyZSBzaW1wbGUgdGVzdHMgYW5kIGRvIG5vdCB0aG9yb3VnaGx5Cit0ZXN0IGFsbCA2ODA2MFNQIGNvbm5lY3Rpb25zLiBGb3IgZXhhbXBsZSwgdGhleSBkbyBub3QgdGVzdCBjb25uZWN0aW9ucwordG8gX3JlYWxfYWNjZXNzKCksIF9yZWFsX3RyYWNlKCksIF9yZWFsX3RyYXAoKSwgZXRjLiBiZWNhdXNlIHRoZXNlCit3aWxsIGJlIHN5c3RlbS1pbXBsZW1lbnRlZCBzZXZlcmFsIGRpZmZlcmVudCB3YXlzIGFuZCB0aGUgdGVzdCBwYWNrYWdlcworbXVzdCByZW1haW4gc3lzdGVtIGluZGVwZW5kZW50LgorCitFeGFtcGxlIHRlc3QgcGFja2FnZSBzZXQtdXA6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitfcHJpbnRfc3RyOgorCS4JCQkjIHByb3ZpZGVkIGJ5IHN5c3RlbQorCXJ0cworCitfcHJpbnRfbnVtOgorCS4JCQkjIHByb3ZpZGVkIGJ5IHN5c3RlbQorCXJ0cworCisJLgorCS4KKwlic3IJXzA2MEZQU1BfVEVTVCsxMjgrMAorCS4KKwkuCisJcnRzCisKKyMgYmVnaW5uaW5nIG9mICJDYWxsLW91dCIgc2VjdGlvbjsgcHJvdmlkZWQgYnkgaW50ZWdyYXRvci4KKyMgTVVTVCBiZSAxMjggYnl0ZXMgbG9uZy4KK18wNjBGUFNQX1RFU1Q6CisJbG9uZwlfcHJpbnRfc3RyIC0gXzA2MEZQU1BfVEVTVAorCWxvbmcJX3ByaW50X251bSAtIF8wNjBGUFNQX1RFU1QKKwlzcGFjZQkxMjAKKworIyBmdGVzdC5zYSBzdGFydHMgaGVyZTsgc3RhcnQgb2YgIkVudHJ5LXBvaW50IiBzZWN0aW9uLgorCWxvbmcJMHg2MGZmMDAwMCwgMHgwMDAwMjM0NgorCWxvbmcJMHg2MGZmMDAwMCwgMHgwMDAxODc2NgorCWxvbmcJMHg2MGZmMDAwMCwgMHgwMDAyMzMzOAorCWxvbmcJMHgyNDM3NzI5OSwgMHhhYjI2NDNlYQorCQkuCisJCS4KKwkJLgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL2ZwbHNwLmRvYyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9mcGxzcC5kb2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI2MzdjNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9mcGxzcC5kb2MKQEAgLTAsMCArMSwyMzEgQEAKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorTU9UT1JPTEEgTUlDUk9QUk9DRVNTT1IgJiBNRU1PUlkgVEVDSE5PTE9HWSBHUk9VUAorTTY4MDAwIEhpLVBlcmZvcm1hbmNlIE1pY3JvcHJvY2Vzc29yIERpdmlzaW9uCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZQorUHJvZHVjdGlvbiBSZWxlYXNlIFAxLjAwIC0tIE9jdG9iZXIgMTAsIDE5OTQKKworTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IKkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUSEUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitNT1RPUk9MQSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0hFVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorYW5kIGFueSB3YXJyYW50eSBhZ2FpbnN0IGluZnJpbmdlbWVudCB3aXRoIHJlZ2FyZCB0byB0aGUgU09GVFdBUkUKKyhJTkNMVURJTkcgQU5ZIE1PRElGSUVEIFZFUlNJT05TIFRIRVJFT0YpIGFuZCBhbnkgYWNjb21wYW55aW5nIHdyaXR0ZW4gbWF0ZXJpYWxzLgorCitUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorSU4gTk8gRVZFTlQgU0hBTEwgTU9UT1JPTEEgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUyBQUk9GSVRTLAorQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIEJVU0lORVNTIElORk9STUFUSU9OLCBPUiBPVEhFUiBQRUNVTklBUlkgTE9TUykKK0FSSVNJTkcgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTT0ZUV0FSRS4KK01vdG9yb2xhIGFzc3VtZXMgbm8gcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBtYWludGVuYW5jZSBhbmQgc3VwcG9ydCBvZiB0aGUgU09GVFdBUkUuCisKK1lvdSBhcmUgaGVyZWJ5IGdyYW50ZWQgYSBjb3B5cmlnaHQgbGljZW5zZSB0byB1c2UsIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNPRlRXQVJFCitzbyBsb25nIGFzIHRoaXMgZW50aXJlIG5vdGljZSBpcyByZXRhaW5lZCB3aXRob3V0IGFsdGVyYXRpb24gaW4gYW55IG1vZGlmaWVkIGFuZC9vcgorcmVkaXN0cmlidXRlZCB2ZXJzaW9ucywgYW5kIHRoYXQgc3VjaCBtb2RpZmllZCB2ZXJzaW9ucyBhcmUgY2xlYXJseSBpZGVudGlmaWVkIGFzIHN1Y2guCitObyBsaWNlbnNlcyBhcmUgZ3JhbnRlZCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlIHVuZGVyIGFueSBwYXRlbnRzCitvciB0cmFkZW1hcmtzIG9mIE1vdG9yb2xhLCBJbmMuCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworNjgwNjAgRkxPQVRJTkctUE9JTlQgU09GVFdBUkUgUEFDS0FHRSAoTGlicmFyeSB2ZXJzaW9uKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpbGUgZnBsc3Auc2EgY29udGFpbnMgdGhlICJMaWJyYXJ5IHZlcnNpb24iIG9mIHRoZQorNjgwNjBTUCBGbG9hdGluZy1Qb2ludCBTb2Z0d2FyZSBQYWNrYWdlLiBUaGUgcm91dGluZXMKK2luY2x1ZGVkIGluIHRoaXMgbW9kdWxlIGNhbiBiZSB1c2VkIHRvIGVtdWxhdGUgdGhlCitGUCBpbnN0cnVjdGlvbnMgbm90IGltcGxlbWVudGVkIGluIDY4MDYwIGhhcmR3YXJlLiBUaGVzZQoraW5zdHJ1Y3Rpb25zIG5vcm1hbGx5IHRha2UgZXhjZXB0aW9uIHZlY3RvciAjMTEKKyJGUCBVbmltcGxlbWVudGVkIEluc3RydWN0aW9uIi4KKworQnkgcmUtY29tcGlsaW5nIGEgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlc2UgaW5zdHJ1Y3Rpb25zLCBhbmQKK21ha2luZyBzdWJyb3V0aW5lIGNhbGxzIGluIHBsYWNlIG9mIHRoZSB1bmltcGxlbWVudGVkCitpbnN0cnVjdGlvbnMsIGEgcHJvZ3JhbSBjYW4gYXZvaWQgdGhlIG92ZXJoZWFkIGFzc29jaWF0ZWQKK3dpdGggdGFraW5nIHRoZSBleGNlcHRpb24uCisKK1JlbGVhc2UgZmlsZSBmb3JtYXQ6CistLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGZpbGUgZnBsc3Auc2EgaXMgZXNzZW50aWFsbHkgYSBoZXhhZGVjaW1hbCBpbWFnZSBvZiB0aGUKK3JlbGVhc2UgcGFja2FnZS4gVGhpcyBpcyB0aGUgT05MWSBmb3JtYXQgd2hpY2ggd2lsbCBiZSBzdXBwb3J0ZWQuCitUaGUgaGV4IGltYWdlIHdhcyBjcmVhdGVkIGJ5IGFzc2VtYmxpbmcgdGhlIHNvdXJjZSBjb2RlIGFuZAordGhlbiBjb252ZXJ0aW5nIHRoZSByZXN1bHRpbmcgYmluYXJ5IG91dHB1dCBpbWFnZSBpbnRvIGFuCitBU0NJSSB0ZXh0IGZpbGUuIFRoZSBoZXhhZGVjaW1hbCBudW1iZXJzIGFyZSBsaXN0ZWQKK3VzaW5nIHRoZSBNb3Rvcm9sYSBBc3NlbWJseSBTeW50YXggYXNzZW1ibGVyIGRpcmVjdGl2ZSAiZGMubCIKKyhkZWZpbmUgY29uc3RhbnQgbG9uZ3dvcmQpLiBUaGUgZmlsZSBjYW4gYmUgY29udmVydGVkIHRvIG90aGVyCithc3NlbWJseSBzeW50YXhlcyBieSB1c2luZyBhbnkgd29yZCBwcm9jZXNzb3Igd2l0aCBhIGdsb2JhbAorc2VhcmNoIGFuZCByZXBsYWNlIGZ1bmN0aW9uLgorCitUbyBhc3Npc3QgaW4gYXNzZW1ibGluZyBhbmQgbGlua2luZyB0aGlzIG1vZHVsZSB3aXRoIG90aGVyIG1vZHVsZXMsCit0aGUgaW5zdGFsbGVyIHNob3VsZCBhZGQgYSBzeW1ib2xpYyBsYWJlbCB0byB0aGUgdG9wIG9mIHRoZSBmaWxlLgorVGhpcyB3aWxsIGFsbG93IGNhbGxpbmcgcm91dGluZXMgdG8gYWNjZXNzIHRoZSBlbnRyeSBwb2ludHMKK29mIHRoaXMgcGFja2FnZS4KKworVGhlIHNvdXJjZSBjb2RlIGZwbHNwLnMgaGFzIGFsc28gYmVlbiBpbmNsdWRlZCBidXQgb25seSBmb3IKK2RvY3VtZW50YXRpb24gcHVycG9zZXMuCisKK1JlbGVhc2UgZmlsZSBzdHJ1Y3R1cmU6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGZpbGUgZnBsc3Auc2EgY29udGFpbnMgYW4gIkVudHJ5LVBvaW50IiBzZWN0aW9uIGFuZCBhCitjb2RlIHNlY3Rpb24uIFRoZSBGUExTUCBoYXMgbm8gIkNhbGwtT3V0IiBzZWN0aW9uLiBUaGUgZmlyc3Qgc2VjdGlvbgoraXMgdGhlICJFbnRyeS1Qb2ludCIgc2VjdGlvbi4gSW4gb3JkZXIgdG8gYWNjZXNzIGEgZnVuY3Rpb24gaW4gdGhlCitwYWNrYWdlLCBhIHByb2dyYW0gbXVzdCAiYnNyIiBvciAianNyIiB0byB0aGUgbG9jYXRpb24gbGlzdGVkCitiZWxvdyBpbiAiNjgwNjBGUExTUCBlbnRyeSBwb2ludHMiIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGRlc2lyZWQKK2Z1bmN0aW9uLiBBIGJyYW5jaCBpbnN0cnVjdGlvbiBsb2NhdGVkIGF0IHRoZSBzZWxlY3RlZCBlbnRyeSBwb2ludAord2l0aGluIHRoZSBwYWNrYWdlIHdpbGwgdGhlbiBlbnRlciB0aGUgY29ycmVjdCBlbXVsYXRpb24gY29kZSByb3V0aW5lLgorCitUaGUgZW50cnkgcG9pbnQgYWRkcmVzc2VzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhY2thZ2Ugd2lsbCByZW1haW4KK2ZpeGVkIHNvIHRoYXQgYSBwcm9ncmFtIGNhbGxpbmcgdGhlIHJvdXRpbmVzIHdpbGwgbm90IGhhdmUgdG8gYmUKK3JlLWNvbXBpbGVkIHdpdGggZXZlcnkgbmV3IDY4MDYwRlBMU1AgcmVsZWFzZS4KKworVGhlcmUgYXJlIDMgZW50cnktcG9pbnRzIGZvciBlYWNoIGluc3RydWN0aW9uIHR5cGU6IHNpbmdsZSBwcmVjaXNpb24sCitkb3VibGUgcHJlY2lzaW9uLCBhbmQgZXh0ZW5kZWQgcHJlY2lzaW9uLgorCitBcyBhbiBleGFtcGxlLCB0aGUgImZzaW4iIGxpYnJhcnkgaW5zdHJ1Y3Rpb24gY2FuIGJlIHBhc3NlZCBhbgorZXh0ZW5kZWQgcHJlY2lzaW9uIG9wZXJhbmQgaWYgcHJvZ3JhbSBleGVjdXRlczoKKworIyBmc2luLnggZnAwCisKKwlmbW92bS54CSYweDAxLC0oJXNwKQkjIHBhc3Mgb3BlcmFuZCBvbiBzdGFjaworCWJzci5sCV8wNjBGUExTUF9UT1ArMHgxYTggIyBicmFuY2ggdG8gZnNpbiByb3V0aW5lCisJYWRkLmwJJjB4Yywlc3AJIyBjbGVhciBvcGVyYW5kIGZyb20gc3RhY2sKKworVXBvbiByZXR1cm4sIGZwMCBob2xkcyB0aGUgY29ycmVjdCByZXN1bHQuIFRoZSBGUFNSIGlzCitzZXQgY29ycmVjdGx5LiBUaGUgRlBDUiBpcyB1bmNoYW5nZWQuIFRoZSBGUElBUiBpcyB1bmRlZmluZWQuCisKK0Fub3RoZXIgZXhhbXBsZS4gVGhpcyB0aW1lLCBhIGR5YWRpYyBvcGVyYXRpb246CisKKyMgZnJlbS5zICVmcDEsJWZwMAorCisJZm1vdi5zCSVmcDEsLSglc3ApCSMgcGFzcyBzcmMgb3BlcmFuZAorCWZtb3YucwklZnAwLC0oJXNwKQkjIHBhc3MgZHN0IG9wZXJhbmQKKwlic3IubAlfMDYwRlBMU1BfVE9QKzB4MTY4ICMgYnJhbmNoIHRvIGZyZW0gcm91dGluZQorCWFkZHEubAkmMHg4LCVzcAkjIGNsZWFyIG9wZXJhbmRzIGZyb20gc3RhY2sKKworQWdhaW4sIHRoZSByZXN1bHQgaXMgcmV0dXJuZWQgaW4gZnAwLiBOb3RlIHRoYXQgQk9USCBvcGVyYW5kcworYXJlIHBhc3NlZCBpbiBzaW5nbGUgcHJlY2lzaW9uIGZvcm1hdC4KKworRXhjZXB0aW9uIHJlcG9ydGluZzoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgcGFja2FnZSB0YWtlcyBleGNlcHRpb25zIGFjY29yZGluZyB0byB0aGUgRlBDUiB2YWx1ZSB1cG9uIHN1YnJvdXRpbmUKK2VudHJ5LiBJZiBhbiBleGNlcHRpb24gc2hvdWxkIGJlIHJlcG9ydGVkLCB0aGVuIHRoZSBwYWNrYWdlIGZvcmNlcwordGhpcyBleGNlcHRpb24gdXNpbmcgaW1wbGVtZW50ZWQgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zLgorRm9yIGV4YW1wbGUsIGlmIHRoZSBpbnN0cnVjdGlvbiBiZWluZyBlbXVsYXRlZCBzaG91bGQgY2F1c2UgYQorZmxvYXRpbmctcG9pbnQgT3BlcmFuZCBFcnJvciBleGNlcHRpb24sIHRoZW4gdGhlIGxpYnJhcnkgcm91dGluZQorZXhlY3V0ZXMgYW4gRk1VTCBvZiBhIHplcm8gYW5kIGFuIGluZmluaXR5IHRvIGZvcmNlIHRoZSBPUEVSUgorZXhjZXB0aW9uLiBBbHRob3VnaCB0aGUgRlBJQVIgd2lsbCBiZSB1bmRlZmluZWQgZm9yIHRoZSBlbmFibGVkCitPcGVyYW5kIEVycm9yIGV4Y2VwdGlvbiBoYW5kbGVyLCB0aGUgdXNlciB3aWxsIGF0IGxlYXN0IGJlIGFibGUKK3RvIHJlY29yZCB0aGF0IHRoZSBldmVudCBvY2N1cnJlZC4KKworTWlzY2VsbGFuZW91czoKKy0tLS0tLS0tLS0tLS0tCitUaGUgcGFja2FnZSBkb2VzIG5vdCBhdHRlbXB0IHRvIGNvcnJlY3RseSBlbXVsYXRlIGluc3RydWN0aW9ucword2l0aCBTaWduYWxsaW5nIE5BTiBpbnB1dHMuIFVzZSBvZiBTTkFOcyBzaG91bGQgYmUgYXZvaWRlZCB3aXRoCit0aGlzIHBhY2thZ2UuCisKK1RoZSBmYWJzL2ZhZGQvZmRpdi9maW50L2ZpbnRyei9mbXVsL2ZuZWcvZnNxcnQvZnN1YiBlbnRyeSBwb2ludHMKK2FyZSBwcm92aWRlZCBmb3IgdGhlIGNvbnZlbmllbmNlIG9mIG9sZGVyIGNvbXBpbGVycyB0aGF0IG1ha2UKK3N1YnJvdXRpbmUgY2FsbHMgZm9yIGFsbCBmcCBpbnN0cnVjdGlvbnMuIFRoZSBjb2RlIGRvZXMgTk9UIGVtdWxhdGUKK3RoZSBpbnN0cnVjdGlvbiBidXQgcmF0aGVyIHNpbXBseSBleGVjdXRlcyBpdC4KKworNjgwNjBGUExTUCBlbnRyeSBwb2ludHM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK18wNjBGUExTUF9UT1A6CisweDAwMDoJXzA2MExTUF9fZmFjb3NzXworMHgwMDg6CV8wNjBMU1BfX2ZhY29zZF8KKzB4MDEwOglfMDYwTFNQX19mYWNvc3hfCisweDAxODoJXzA2MExTUF9fZmFzaW5zXworMHgwMjA6CV8wNjBMU1BfX2Zhc2luZF8KKzB4MDI4OglfMDYwTFNQX19mYXNpbnhfCisweDAzMDoJXzA2MExTUF9fZmF0YW5zXworMHgwMzg6CV8wNjBMU1BfX2ZhdGFuZF8KKzB4MDQwOglfMDYwTFNQX19mYXRhbnhfCisweDA0ODoJXzA2MExTUF9fZmF0YW5oc18KKzB4MDUwOglfMDYwTFNQX19mYXRhbmhkXworMHgwNTg6CV8wNjBMU1BfX2ZhdGFuaHhfCisweDA2MDoJXzA2MExTUF9fZmNvc3NfCisweDA2ODoJXzA2MExTUF9fZmNvc2RfCisweDA3MDoJXzA2MExTUF9fZmNvc3hfCisweDA3ODoJXzA2MExTUF9fZmNvc2hzXworMHgwODA6CV8wNjBMU1BfX2Zjb3NoZF8KKzB4MDg4OglfMDYwTFNQX19mY29zaHhfCisweDA5MDoJXzA2MExTUF9fZmV0b3hzXworMHgwOTg6CV8wNjBMU1BfX2ZldG94ZF8KKzB4MGEwOglfMDYwTFNQX19mZXRveHhfCisweDBhODoJXzA2MExTUF9fZmV0b3htMXNfCisweDBiMDoJXzA2MExTUF9fZmV0b3htMWRfCisweDBiODoJXzA2MExTUF9fZmV0b3htMXhfCisweDBjMDoJXzA2MExTUF9fZmdldGV4cHNfCisweDBjODoJXzA2MExTUF9fZmdldGV4cGRfCisweDBkMDoJXzA2MExTUF9fZmdldGV4cHhfCisweDBkODoJXzA2MExTUF9fZmdldG1hbnNfCisweDBlMDoJXzA2MExTUF9fZmdldG1hbmRfCisweDBlODoJXzA2MExTUF9fZmdldG1hbnhfCisweDBmMDoJXzA2MExTUF9fZmxvZzEwc18KKzB4MGY4OglfMDYwTFNQX19mbG9nMTBkXworMHgxMDA6CV8wNjBMU1BfX2Zsb2cxMHhfCisweDEwODoJXzA2MExTUF9fZmxvZzJzXworMHgxMTA6CV8wNjBMU1BfX2Zsb2cyZF8KKzB4MTE4OglfMDYwTFNQX19mbG9nMnhfCisweDEyMDoJXzA2MExTUF9fZmxvZ25zXworMHgxMjg6CV8wNjBMU1BfX2Zsb2duZF8KKzB4MTMwOglfMDYwTFNQX19mbG9nbnhfCisweDEzODoJXzA2MExTUF9fZmxvZ25wMXNfCisweDE0MDoJXzA2MExTUF9fZmxvZ25wMWRfCisweDE0ODoJXzA2MExTUF9fZmxvZ25wMXhfCisweDE1MDoJXzA2MExTUF9fZm1vZHNfCisweDE1ODoJXzA2MExTUF9fZm1vZGRfCisweDE2MDoJXzA2MExTUF9fZm1vZHhfCisweDE2ODoJXzA2MExTUF9fZnJlbXNfCisweDE3MDoJXzA2MExTUF9fZnJlbWRfCisweDE3ODoJXzA2MExTUF9fZnJlbXhfCisweDE4MDoJXzA2MExTUF9fZnNjYWxlc18KKzB4MTg4OglfMDYwTFNQX19mc2NhbGVkXworMHgxOTA6CV8wNjBMU1BfX2ZzY2FsZXhfCisweDE5ODoJXzA2MExTUF9fZnNpbnNfCisweDFhMDoJXzA2MExTUF9fZnNpbmRfCisweDFhODoJXzA2MExTUF9fZnNpbnhfCisweDFiMDoJXzA2MExTUF9fZnNpbmNvc3NfCisweDFiODoJXzA2MExTUF9fZnNpbmNvc2RfCisweDFjMDoJXzA2MExTUF9fZnNpbmNvc3hfCisweDFjODoJXzA2MExTUF9fZnNpbmhzXworMHgxZDA6CV8wNjBMU1BfX2ZzaW5oZF8KKzB4MWQ4OglfMDYwTFNQX19mc2luaHhfCisweDFlMDoJXzA2MExTUF9fZnRhbnNfCisweDFlODoJXzA2MExTUF9fZnRhbmRfCisweDFmMDoJXzA2MExTUF9fZnRhbnhfCisweDFmODoJXzA2MExTUF9fZnRhbmhzXworMHgyMDA6CV8wNjBMU1BfX2Z0YW5oZF8KKzB4MjA4OglfMDYwTFNQX19mdGFuaHhfCisweDIxMDoJXzA2MExTUF9fZnRlbnRveHNfCisweDIxODoJXzA2MExTUF9fZnRlbnRveGRfCisweDIyMDoJXzA2MExTUF9fZnRlbnRveHhfCisweDIyODoJXzA2MExTUF9fZnR3b3RveHNfCisweDIzMDoJXzA2MExTUF9fZnR3b3RveGRfCisweDIzODoJXzA2MExTUF9fZnR3b3RveHhfCisKKzB4MjQwOglfMDYwTFNQX19mYWJzc18KKzB4MjQ4OglfMDYwTFNQX19mYWJzZF8KKzB4MjUwOglfMDYwTFNQX19mYWJzeF8KKzB4MjU4OglfMDYwTFNQX19mYWRkc18KKzB4MjYwOglfMDYwTFNQX19mYWRkZF8KKzB4MjY4OglfMDYwTFNQX19mYWRkeF8KKzB4MjcwOglfMDYwTFNQX19mZGl2c18KKzB4Mjc4OglfMDYwTFNQX19mZGl2ZF8KKzB4MjgwOglfMDYwTFNQX19mZGl2eF8KKzB4Mjg4OglfMDYwTFNQX19maW50c18KKzB4MjkwOglfMDYwTFNQX19maW50ZF8KKzB4Mjk4OglfMDYwTFNQX19maW50eF8KKzB4MmEwOglfMDYwTFNQX19maW50cnpzXworMHgyYTg6CV8wNjBMU1BfX2ZpbnRyemRfCisweDJiMDoJXzA2MExTUF9fZmludHJ6eF8KKzB4MmI4OglfMDYwTFNQX19mbXVsc18KKzB4MmMwOglfMDYwTFNQX19mbXVsZF8KKzB4MmM4OglfMDYwTFNQX19mbXVseF8KKzB4MmQwOglfMDYwTFNQX19mbmVnc18KKzB4MmQ4OglfMDYwTFNQX19mbmVnZF8KKzB4MmUwOglfMDYwTFNQX19mbmVneF8KKzB4MmU4OglfMDYwTFNQX19mc3FydHNfCisweDJmMDoJXzA2MExTUF9fZnNxcnRkXworMHgyZjg6CV8wNjBMU1BfX2ZzcXJ0eF8KKzB4MzAwOglfMDYwTFNQX19mc3Vic18KKzB4MzA4OglfMDYwTFNQX19mc3ViZF8KKzB4MzEwOglfMDYwTFNQX19mc3VieF8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9mcGxzcC5zYSBiL2FyY2gvbTY4ay9pZnBzcDA2MC9mcGxzcC5zYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODI2ZGYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2ZwbHNwLnNhCkBAIC0wLDAgKzEsMTk0NiBAQAorCWRjLmwJJDYwZmYwMDAwLCQyMzhlMDAwMCwkNjBmZjAwMDAsJDI0MjAwMDAwCisJZGMubAkkNjBmZjAwMDAsJDI0YjYwMDAwLCQ2MGZmMDAwMCwkMTEwNjAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMTE5ODAwMDAsJDYwZmYwMDAwLCQxMjJlMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQwZjE2MDAwMCwkNjBmZjAwMDAsJDBmYTgwMDAwCisJZGMubAkkNjBmZjAwMDAsJDEwM2UwMDAwLCQ2MGZmMDAwMCwkMTJhZTAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMTM0MDAwMDAsJDYwZmYwMDAwLCQxM2Q2MDAwMAorCWRjLmwJJDYwZmYwMDAwLCQwNWFlMDAwMCwkNjBmZjAwMDAsJDA2NDAwMDAwCisJZGMubAkkNjBmZjAwMDAsJDA2ZDYwMDAwLCQ2MGZmMDAwMCwkMjEzZTAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMjFkMDAwMDAsJDYwZmYwMDAwLCQyMjY2MDAwMAorCWRjLmwJJDYwZmYwMDAwLCQxNjE2MDAwMCwkNjBmZjAwMDAsJDE2YTgwMDAwCisJZGMubAkkNjBmZjAwMDAsJDE3M2UwMDAwLCQ2MGZmMDAwMCwkMGFlZTAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMGI4MDAwMDAsJDYwZmYwMDAwLCQwYzE2MDAwMAorCWRjLmwJJDYwZmYwMDAwLCQyNGE2MDAwMCwkNjBmZjAwMDAsJDI1MzgwMDAwCisJZGMubAkkNjBmZjAwMDAsJDI1Y2UwMDAwLCQ2MGZmMDAwMCwkMjY2NjAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMjZmODAwMDAsJDYwZmYwMDAwLCQyNzhlMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQxZDE2MDAwMCwkNjBmZjAwMDAsJDFkYTgwMDAwCisJZGMubAkkNjBmZjAwMDAsJDFlM2UwMDAwLCQ2MGZmMDAwMCwkMWVkNjAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMWY2ODAwMDAsJDYwZmYwMDAwLCQxZmZlMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQxYjBlMDAwMCwkNjBmZjAwMDAsJDFiYTAwMDAwCisJZGMubAkkNjBmZjAwMDAsJDFjMzYwMDAwLCQ2MGZmMDAwMCwkMDg4NjAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMDkxODAwMDAsJDYwZmYwMDAwLCQwOWFlMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQyYmYwMDAwMCwkNjBmZjAwMDAsJDJjYTQwMDAwCisJZGMubAkkNjBmZjAwMDAsJDJkNTgwMDAwLCQ2MGZmMDAwMCwkMjk5ODAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMmE0YzAwMDAsJDYwZmYwMDAwLCQyYjAwMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQyZTAwMDAwMCwkNjBmZjAwMDAsJDJlYjQwMDAwCisJZGMubAkkNjBmZjAwMDAsJDJmNjgwMDAwLCQ2MGZmMDAwMCwkMDI5ZTAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMDMzMDAwMDAsJDYwZmYwMDAwLCQwM2M2MDAwMAorCWRjLmwJJDYwZmYwMDAwLCQyNzY2MDAwMCwkNjBmZjAwMDAsJDI3ZmUwMDAwCisJZGMubAkkNjBmZjAwMDAsJDI4OWEwMDAwLCQ2MGZmMDAwMCwkMDYxZTAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMDZiMDAwMDAsJDYwZmYwMDAwLCQwNzQ2MDAwMAorCWRjLmwJJDYwZmYwMDAwLCQxMmVlMDAwMCwkNjBmZjAwMDAsJDEzODAwMDAwCisJZGMubAkkNjBmZjAwMDAsJDE0MTYwMDAwLCQ2MGZmMDAwMCwkMGI3NjAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMGMwODAwMDAsJDYwZmYwMDAwLCQwYzllMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQxODQ2MDAwMCwkNjBmZjAwMDAsJDE4ZDgwMDAwCisJZGMubAkkNjBmZjAwMDAsJDE5NmUwMDAwLCQ2MGZmMDAwMCwkMTY1NjAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMTZlODAwMDAsJDYwZmYwMDAwLCQxNzdlMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQ3MmZlMDAwMCwkNjBmZjAwMDAsJDcyZmUwMDAwCisJZGMubAkkNjBmZjAwMDAsJDcyZmUwMDAwLCQ2MGZmMDAwMCwkNzFiZTAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkNzFkNDAwMDAsJDYwZmYwMDAwLCQ3MWVhMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQ3Mjg0MDAwMCwkNjBmZjAwMDAsJDcyOWEwMDAwCisJZGMubAkkNjBmZjAwMDAsJDcyYjAwMDAwLCQ2MGZmMDAwMCwkNzJmZTAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkNzJmZTAwMDAsJDYwZmYwMDAwLCQ3MmZlMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQ3MmZlMDAwMCwkNjBmZjAwMDAsJDcyZmUwMDAwCisJZGMubAkkNjBmZjAwMDAsJDcyZmUwMDAwLCQ2MGZmMDAwMCwkNzFmMjAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkNzIwODAwMDAsJDYwZmYwMDAwLCQ3MjFlMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQ3Mjg2MDAwMCwkNjBmZjAwMDAsJDcyODYwMDAwCisJZGMubAkkNjBmZjAwMDAsJDcyODYwMDAwLCQ2MGZmMDAwMCwkNzI4NjAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkNzI4NjAwMDAsJDYwZmYwMDAwLCQ3Mjg2MDAwMAorCWRjLmwJJDYwZmYwMDAwLCQ3MTYwMDAwMCwkNjBmZjAwMDAsJDcxNzYwMDAwCisJZGMubAkkNjBmZjAwMDAsJDcxOGMwMDAwLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNDBjNjJkMzgsJGQzZDY0NjM0LCQzZDZmOTBhZSwkYjFlNzVjYzcKKwlkYy5sCSQ0MDAwMDAwMCwkYzkwZmRhYTIsJDIxNjhjMjM1LCQwMDAwMDAwMAorCWRjLmwJJDNmZmYwMDAwLCRjOTBmZGFhMiwkMjE2OGMyMzUsJDAwMDAwMDAwCisJZGMubAkkM2ZlNDVmMzAsJDZkYzljODgzLCQ0ZTU2ZmY0MCwkNDhlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkYjgwMGZmNjAsJGYyMmVmMGMwLCRmZmRjZjIzYworCWRjLmwJJDkwMDAwMDAwLCQwMDAwZjIyZSwkNDQwMDAwMDgsJGYyMmU2ODAwCisJZGMubAkkZmY2YzQxZWUsJGZmNmM2MWZmLCQwMDAwNmM3NiwkMWQ0MGZmNGUKKwlkYy5sCSQxMjAwMDJhZSwkMDBmZjAwZmYsJGZmNjQ0MjgwLCQxMDJlZmY2MworCWRjLmwJJDRhMDE2NjA4LCQ2MWZmMDAwMCwkMmRkYzYwMzAsJDBjMDEwMDAxCisJZGMubAkkNjYwODYxZmYsJDAwMDA3MTI0LCQ2MDIyMGMwMSwkMDAwMjY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNmQyMjYwMTQsJDBjMDEwMDAzLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA2ZjRjLCQ2MDA2NjFmZiwkMDAwMDJmOGUsJDRjZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJDk4MDBmZjYwLCRmMjJlZDA0MCwkZmZlODRlNWUKKwlkYy5sCSQ0ZTc1NGU1NiwkZmY0MDQ4ZWUsJDAzMDNmZjljLCRmMjJlYjgwMAorCWRjLmwJJGZmNjBmMjJlLCRmMGMwZmZkYywkZjIzYzkwMDAsJDAwMDAwMDAwCisJZGMubAkkZjIyZTU0MDAsJDAwMDhmMjJlLCQ2ODAwZmY2YywkNDFlZWZmNmMKKwlkYy5sCSQ2MWZmMDAwMCwkNmJkYzFkNDAsJGZmNGUxMjAwLCQwMmFlMDBmZgorCWRjLmwJJDAwZmZmZjY0LCQ0MjgwMTAyZSwkZmY2MzFkNDEsJGZmNGU0YTAxCisJZGMubAkkNjYwODYxZmYsJDAwMDAyZDNlLCQ2MDMwMGMwMSwkMDAwMTY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNzA4NjYwMjIsJDBjMDEwMDAyLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA2Yzg0LCQ2MDE0MGMwMSwkMDAwMzY2MDgsJDYxZmYwMDAwCisJZGMubAkkNmVhZTYwMDYsJDYxZmYwMDAwLCQyZWYwNGNlZSwkMDMwM2ZmOWMKKwlkYy5sCSRmMjJlOTgwMCwkZmY2MGYyMmUsJGQwNDBmZmU4LCQ0ZTVlNGU3NQorCWRjLmwJJDRlNTZmZjQwLCQ0OGVlMDMwMywkZmY5Y2YyMmUsJGI4MDBmZjYwCisJZGMubAkkZjIyZWYwYzAsJGZmZGNmMjNjLCQ5MDAwMDAwMCwkMDAwMDQxZWUKKwlkYy5sCSRmZjZjMjE2ZSwkMDAwODAwMDAsJDIxNmUwMDBjLCQwMDA0MjE2ZQorCWRjLmwJJDAwMTAwMDA4LCQ2MWZmMDAwMCwkNmIzODFkNDAsJGZmNGUxMjAwCisJZGMubAkkMDJhZTAwZmYsJDAwZmZmZjY0LCQ0MjgwMTAyZSwkZmY2MzRhMDEKKwlkYy5sCSQ2NjA4NjFmZiwkMDAwMDJjOWUsJDYwMzAwYzAxLCQwMDAxNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ2ZmU2NjAyMiwkMGMwMTAwMDIsJDY2MDg2MWZmCisJZGMubAkkMDAwMDZiZTQsJDYwMTQwYzAxLCQwMDAzNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ2ZTBlNjAwNiwkNjFmZjAwMDAsJDJlNTA0Y2VlLCQwMzAzZmY5YworCWRjLmwJJGYyMmU5ODAwLCRmZjYwZjIyZSwkZDA0MGZmZTgsJDRlNWU0ZTc1CisJZGMubAkkNGU1NmZmNDAsJDQ4ZWUwMzAzLCRmZjljZjIyZSwkYjgwMGZmNjAKKwlkYy5sCSRmMjJlZjBjMCwkZmZkY2YyM2MsJDkwMDAwMDAwLCQwMDAwZjIyZQorCWRjLmwJJDQ0MDAwMDA4LCRmMjJlNjgwMCwkZmY2YzQxZWUsJGZmNmM2MWZmCisJZGMubAkkMDAwMDZhOWUsJDFkNDBmZjRlLCQxMjAwMDJhZSwkMDBmZjAwZmYKKwlkYy5sCSRmZjY0NDI4MCwkMTAyZWZmNjMsJDRhMDE2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDJjMGU2MDMwLCQwYzAxMDAwMSwkNjYwODYxZmYsJDAwMDA2ZmM4CisJZGMubAkkNjAyMjBjMDEsJDAwMDI2NjA4LCQ2MWZmMDAwMCwkNmI0YTYwMTQKKwlkYy5sCSQwYzAxMDAwMywkNjYwODYxZmYsJDAwMDA2ZDc0LCQ2MDA2NjFmZgorCWRjLmwJJDAwMDAyZGJjLCQ0Y2VlMDMwMywkZmY5Y2YyMmUsJDk4MDBmZjYwCisJZGMubAkkZjIyZWQwNDAsJGZmZTg0ZTVlLCQ0ZTc1NGU1NiwkZmY0MDQ4ZWUKKwlkYy5sCSQwMzAzZmY5YywkZjIyZWI4MDAsJGZmNjBmMjJlLCRmMGMwZmZkYworCWRjLmwJJGYyM2M5MDAwLCQwMDAwMDAwMCwkZjIyZTU0MDAsJDAwMDhmMjJlCisJZGMubAkkNjgwMGZmNmMsJDQxZWVmZjZjLCQ2MWZmMDAwMCwkNmEwNDFkNDAKKwlkYy5sCSRmZjRlMTIwMCwkMDJhZTAwZmYsJDAwZmZmZjY0LCQ0MjgwMTAyZQorCWRjLmwJJGZmNjMxZDQxLCRmZjRlNGEwMSwkNjYwODYxZmYsJDAwMDAyYjcwCisJZGMubAkkNjAzMDBjMDEsJDAwMDE2NjA4LCQ2MWZmMDAwMCwkNmYyYTYwMjIKKwlkYy5sCSQwYzAxMDAwMiwkNjYwODYxZmYsJDAwMDA2YWFjLCQ2MDE0MGMwMQorCWRjLmwJJDAwMDM2NjA4LCQ2MWZmMDAwMCwkNmNkNjYwMDYsJDYxZmYwMDAwCisJZGMubAkkMmQxZTRjZWUsJDAzMDNmZjljLCRmMjJlOTgwMCwkZmY2MGYyMmUKKwlkYy5sCSRkMDQwZmZlOCwkNGU1ZTRlNzUsJDRlNTZmZjQwLCQ0OGVlMDMwMworCWRjLmwJJGZmOWNmMjJlLCRiODAwZmY2MCwkZjIyZWYwYzAsJGZmZGNmMjNjCisJZGMubAkkOTAwMDAwMDAsJDAwMDA0MWVlLCRmZjZjMjE2ZSwkMDAwODAwMDAKKwlkYy5sCSQyMTZlMDAwYywkMDAwNDIxNmUsJDAwMTAwMDA4LCQ2MWZmMDAwMAorCWRjLmwJJDY5NjAxZDQwLCRmZjRlMTIwMCwkMDJhZTAwZmYsJDAwZmZmZjY0CisJZGMubAkkNDI4MDEwMmUsJGZmNjM0YTAxLCQ2NjA4NjFmZiwkMDAwMDJhZDAKKwlkYy5sCSQ2MDMwMGMwMSwkMDAwMTY2MDgsJDYxZmYwMDAwLCQ2ZThhNjAyMgorCWRjLmwJJDBjMDEwMDAyLCQ2NjA4NjFmZiwkMDAwMDZhMGMsJDYwMTQwYzAxCisJZGMubAkkMDAwMzY2MDgsJDYxZmYwMDAwLCQ2YzM2NjAwNiwkNjFmZjAwMDAKKwlkYy5sCSQyYzdlNGNlZSwkMDMwM2ZmOWMsJGYyMmU5ODAwLCRmZjYwZjIyZQorCWRjLmwJJGQwNDBmZmU4LCQ0ZTVlNGU3NSwkNGU1NmZmNDAsJDQ4ZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJGI4MDBmZjYwLCRmMjJlZjBjMCwkZmZkY2YyM2MKKwlkYy5sCSQ5MDAwMDAwMCwkMDAwMGYyMmUsJDQ0MDAwMDA4LCRmMjJlNjgwMAorCWRjLmwJJGZmNmM0MWVlLCRmZjZjNjFmZiwkMDAwMDY4YzYsJDFkNDBmZjRlCisJZGMubAkkMTIwMDAyYWUsJDAwZmYwMGZmLCRmZjY0NDI4MCwkMTAyZWZmNjMKKwlkYy5sCSQ0YTAxNjYwOCwkNjFmZjAwMDAsJDRlNjg2MDMwLCQwYzAxMDAwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwNmQ3NCwkNjAyMjBjMDEsJDAwMDI2NjA4CisJZGMubAkkNjFmZjAwMDAsJDZkOTQ2MDE0LCQwYzAxMDAwMywkNjYwODYxZmYKKwlkYy5sCSQwMDAwNmI5YywkNjAwNjYxZmYsJDAwMDA0ZjE0LCQ0Y2VlMDMwMworCWRjLmwJJGZmOWNmMjJlLCQ5ODAwZmY2MCwkZjIyZWQwNDAsJGZmZTg0ZTVlCisJZGMubAkkNGU3NTRlNTYsJGZmNDA0OGVlLCQwMzAzZmY5YywkZjIyZWI4MDAKKwlkYy5sCSRmZjYwZjIyZSwkZjBjMGZmZGMsJGYyM2M5MDAwLCQwMDAwMDAwMAorCWRjLmwJJGYyMmU1NDAwLCQwMDA4ZjIyZSwkNjgwMGZmNmMsJDQxZWVmZjZjCisJZGMubAkkNjFmZjAwMDAsJDY4MmMxZDQwLCRmZjRlMTIwMCwkMDJhZTAwZmYKKwlkYy5sCSQwMGZmZmY2NCwkNDI4MDEwMmUsJGZmNjMxZDQxLCRmZjRlNGEwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwNGRjYSwkNjAzMDBjMDEsJDAwMDE2NjA4CisJZGMubAkkNjFmZjAwMDAsJDZjZDY2MDIyLCQwYzAxMDAwMiwkNjYwODYxZmYKKwlkYy5sCSQwMDAwNmNmNiwkNjAxNDBjMDEsJDAwMDM2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDZhZmU2MDA2LCQ2MWZmMDAwMCwkNGU3NjRjZWUsJDAzMDNmZjljCisJZGMubAkkZjIyZTk4MDAsJGZmNjBmMjJlLCRkMDQwZmZlOCwkNGU1ZTRlNzUKKwlkYy5sCSQ0ZTU2ZmY0MCwkNDhlZTAzMDMsJGZmOWNmMjJlLCRiODAwZmY2MAorCWRjLmwJJGYyMmVmMGMwLCRmZmRjZjIzYywkOTAwMDAwMDAsJDAwMDA0MWVlCisJZGMubAkkZmY2YzIxNmUsJDAwMDgwMDAwLCQyMTZlMDAwYywkMDAwNDIxNmUKKwlkYy5sCSQwMDEwMDAwOCwkNjFmZjAwMDAsJDY3ODgxZDQwLCRmZjRlMTIwMAorCWRjLmwJJDAyYWUwMGZmLCQwMGZmZmY2NCwkNDI4MDEwMmUsJGZmNjM0YTAxCisJZGMubAkkNjYwODYxZmYsJDAwMDA0ZDJhLCQ2MDMwMGMwMSwkMDAwMTY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNmMzNjYwMjIsJDBjMDEwMDAyLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA2YzU2LCQ2MDE0MGMwMSwkMDAwMzY2MDgsJDYxZmYwMDAwCisJZGMubAkkNmE1ZTYwMDYsJDYxZmYwMDAwLCQ0ZGQ2NGNlZSwkMDMwM2ZmOWMKKwlkYy5sCSRmMjJlOTgwMCwkZmY2MGYyMmUsJGQwNDBmZmU4LCQ0ZTVlNGU3NQorCWRjLmwJJDRlNTZmZjQwLCQ0OGVlMDMwMywkZmY5Y2YyMmUsJGI4MDBmZjYwCisJZGMubAkkZjIyZWYwYzAsJGZmZGNmMjNjLCQ5MDAwMDAwMCwkMDAwMGYyMmUKKwlkYy5sCSQ0NDAwMDAwOCwkZjIyZTY4MDAsJGZmNmM0MWVlLCRmZjZjNjFmZgorCWRjLmwJJDAwMDA2NmVlLCQxZDQwZmY0ZSwkMTIwMDAyYWUsJDAwZmYwMGZmCisJZGMubAkkZmY2NDQyODAsJDEwMmVmZjYzLCQ0YTAxNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ1OWIyNjAzMCwkMGMwMTAwMDEsJDY2MDg2MWZmLCQwMDAwNmI5YworCWRjLmwJJDYwMjIwYzAxLCQwMDAyNjYwOCwkNjFmZjAwMDAsJDZiZjI2MDE0CisJZGMubAkkMGMwMTAwMDMsJDY2MDg2MWZmLCQwMDAwNjljNCwkNjAwNjYxZmYKKwlkYy5sCSQwMDAwNWFkNCwkNGNlZTAzMDMsJGZmOWNmMjJlLCQ5ODAwZmY2MAorCWRjLmwJJGYyMmVkMDQwLCRmZmU4NGU1ZSwkNGU3NTRlNTYsJGZmNDA0OGVlCisJZGMubAkkMDMwM2ZmOWMsJGYyMmViODAwLCRmZjYwZjIyZSwkZjBjMGZmZGMKKwlkYy5sCSRmMjNjOTAwMCwkMDAwMDAwMDAsJGYyMmU1NDAwLCQwMDA4ZjIyZQorCWRjLmwJJDY4MDBmZjZjLCQ0MWVlZmY2YywkNjFmZjAwMDAsJDY2NTQxZDQwCisJZGMubAkkZmY0ZTEyMDAsJDAyYWUwMGZmLCQwMGZmZmY2NCwkNDI4MDEwMmUKKwlkYy5sCSRmZjYzMWQ0MSwkZmY0ZTRhMDEsJDY2MDg2MWZmLCQwMDAwNTkxNAorCWRjLmwJJDYwMzAwYzAxLCQwMDAxNjYwOCwkNjFmZjAwMDAsJDZhZmU2MDIyCisJZGMubAkkMGMwMTAwMDIsJDY2MDg2MWZmLCQwMDAwNmI1NCwkNjAxNDBjMDEKKwlkYy5sCSQwMDAzNjYwOCwkNjFmZjAwMDAsJDY5MjY2MDA2LCQ2MWZmMDAwMAorCWRjLmwJJDVhMzY0Y2VlLCQwMzAzZmY5YywkZjIyZTk4MDAsJGZmNjBmMjJlCisJZGMubAkkZDA0MGZmZTgsJDRlNWU0ZTc1LCQ0ZTU2ZmY0MCwkNDhlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkYjgwMGZmNjAsJGYyMmVmMGMwLCRmZmRjZjIzYworCWRjLmwJJDkwMDAwMDAwLCQwMDAwNDFlZSwkZmY2YzIxNmUsJDAwMDgwMDAwCisJZGMubAkkMjE2ZTAwMGMsJDAwMDQyMTZlLCQwMDEwMDAwOCwkNjFmZjAwMDAKKwlkYy5sCSQ2NWIwMWQ0MCwkZmY0ZTEyMDAsJDAyYWUwMGZmLCQwMGZmZmY2NAorCWRjLmwJJDQyODAxMDJlLCRmZjYzNGEwMSwkNjYwODYxZmYsJDAwMDA1ODc0CisJZGMubAkkNjAzMDBjMDEsJDAwMDE2NjA4LCQ2MWZmMDAwMCwkNmE1ZTYwMjIKKwlkYy5sCSQwYzAxMDAwMiwkNjYwODYxZmYsJDAwMDA2YWI0LCQ2MDE0MGMwMQorCWRjLmwJJDAwMDM2NjA4LCQ2MWZmMDAwMCwkNjg4NjYwMDYsJDYxZmYwMDAwCisJZGMubAkkNTk5NjRjZWUsJDAzMDNmZjljLCRmMjJlOTgwMCwkZmY2MGYyMmUKKwlkYy5sCSRkMDQwZmZlOCwkNGU1ZTRlNzUsJDRlNTZmZjQwLCQ0OGVlMDMwMworCWRjLmwJJGZmOWNmMjJlLCRiODAwZmY2MCwkZjIyZWYwYzAsJGZmZGNmMjNjCisJZGMubAkkOTAwMDAwMDAsJDAwMDBmMjJlLCQ0NDAwMDAwOCwkZjIyZTY4MDAKKwlkYy5sCSRmZjZjNDFlZSwkZmY2YzYxZmYsJDAwMDA2NTE2LCQxZDQwZmY0ZQorCWRjLmwJJDEyMDAwMmFlLCQwMGZmMDBmZiwkZmY2NDQyODAsJDEwMmVmZjYzCisJZGMubAkkNGEwMTY2MDgsJDYxZmYwMDAwLCQ0NmM0NjAzMCwkMGMwMTAwMDEKKwlkYy5sCSQ2NjA4NjFmZiwkMDAwMDY5YzQsJDYwMjIwYzAxLCQwMDAyNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ2YTI0NjAxNCwkMGMwMTAwMDMsJDY2MDg2MWZmCisJZGMubAkkMDAwMDY3ZWMsJDYwMDY2MWZmLCQwMDAwNDk0OCwkNGNlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkOTgwMGZmNjAsJGYyMmVkMDQwLCRmZmU4NGU1ZQorCWRjLmwJJDRlNzU0ZTU2LCRmZjQwNDhlZSwkMDMwM2ZmOWMsJGYyMmViODAwCisJZGMubAkkZmY2MGYyMmUsJGYwYzBmZmRjLCRmMjNjOTAwMCwkMDAwMDAwMDAKKwlkYy5sCSRmMjJlNTQwMCwkMDAwOGYyMmUsJDY4MDBmZjZjLCQ0MWVlZmY2YworCWRjLmwJJDYxZmYwMDAwLCQ2NDdjMWQ0MCwkZmY0ZTEyMDAsJDAyYWUwMGZmCisJZGMubAkkMDBmZmZmNjQsJDQyODAxMDJlLCRmZjYzMWQ0MSwkZmY0ZTRhMDEKKwlkYy5sCSQ2NjA4NjFmZiwkMDAwMDQ2MjYsJDYwMzAwYzAxLCQwMDAxNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ2OTI2NjAyMiwkMGMwMTAwMDIsJDY2MDg2MWZmCisJZGMubAkkMDAwMDY5ODYsJDYwMTQwYzAxLCQwMDAzNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ2NzRlNjAwNiwkNjFmZjAwMDAsJDQ4YWE0Y2VlLCQwMzAzZmY5YworCWRjLmwJJGYyMmU5ODAwLCRmZjYwZjIyZSwkZDA0MGZmZTgsJDRlNWU0ZTc1CisJZGMubAkkNGU1NmZmNDAsJDQ4ZWUwMzAzLCRmZjljZjIyZSwkYjgwMGZmNjAKKwlkYy5sCSRmMjJlZjBjMCwkZmZkY2YyM2MsJDkwMDAwMDAwLCQwMDAwNDFlZQorCWRjLmwJJGZmNmMyMTZlLCQwMDA4MDAwMCwkMjE2ZTAwMGMsJDAwMDQyMTZlCisJZGMubAkkMDAxMDAwMDgsJDYxZmYwMDAwLCQ2M2Q4MWQ0MCwkZmY0ZTEyMDAKKwlkYy5sCSQwMmFlMDBmZiwkMDBmZmZmNjQsJDQyODAxMDJlLCRmZjYzNGEwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwNDU4NiwkNjAzMDBjMDEsJDAwMDE2NjA4CisJZGMubAkkNjFmZjAwMDAsJDY4ODY2MDIyLCQwYzAxMDAwMiwkNjYwODYxZmYKKwlkYy5sCSQwMDAwNjhlNiwkNjAxNDBjMDEsJDAwMDM2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDY2YWU2MDA2LCQ2MWZmMDAwMCwkNDgwYTRjZWUsJDAzMDNmZjljCisJZGMubAkkZjIyZTk4MDAsJGZmNjBmMjJlLCRkMDQwZmZlOCwkNGU1ZTRlNzUKKwlkYy5sCSQ0ZTU2ZmY0MCwkNDhlZTAzMDMsJGZmOWNmMjJlLCRiODAwZmY2MAorCWRjLmwJJGYyMmVmMGMwLCRmZmRjZjIzYywkOTAwMDAwMDAsJDAwMDBmMjJlCisJZGMubAkkNDQwMDAwMDgsJGYyMmU2ODAwLCRmZjZjNDFlZSwkZmY2YzYxZmYKKwlkYy5sCSQwMDAwNjMzZSwkMWQ0MGZmNGUsJDEyMDAwMmFlLCQwMGZmMDBmZgorCWRjLmwJJGZmNjQ0MjgwLCQxMDJlZmY2MywkNGEwMTY2MDgsJDYxZmYwMDAwCisJZGMubAkkNDljNDYwMzAsJDBjMDEwMDAxLCQ2NjA4NjFmZiwkMDAwMDY3ZWMKKwlkYy5sCSQ2MDIyMGMwMSwkMDAwMjY2MDgsJDYxZmYwMDAwLCQ2ODU0NjAxNAorCWRjLmwJJDBjMDEwMDAzLCQ2NjA4NjFmZiwkMDAwMDY2MTQsJDYwMDY2MWZmCisJZGMubAkkMDAwMDRhZmEsJDRjZWUwMzAzLCRmZjljZjIyZSwkOTgwMGZmNjAKKwlkYy5sCSRmMjJlZDA0MCwkZmZlODRlNWUsJDRlNzU0ZTU2LCRmZjQwNDhlZQorCWRjLmwJJDAzMDNmZjljLCRmMjJlYjgwMCwkZmY2MGYyMmUsJGYwYzBmZmRjCisJZGMubAkkZjIzYzkwMDAsJDAwMDAwMDAwLCRmMjJlNTQwMCwkMDAwOGYyMmUKKwlkYy5sCSQ2ODAwZmY2YywkNDFlZWZmNmMsJDYxZmYwMDAwLCQ2MmE0MWQ0MAorCWRjLmwJJGZmNGUxMjAwLCQwMmFlMDBmZiwkMDBmZmZmNjQsJDQyODAxMDJlCisJZGMubAkkZmY2MzFkNDEsJGZmNGU0YTAxLCQ2NjA4NjFmZiwkMDAwMDQ5MjYKKwlkYy5sCSQ2MDMwMGMwMSwkMDAwMTY2MDgsJDYxZmYwMDAwLCQ2NzRlNjAyMgorCWRjLmwJJDBjMDEwMDAyLCQ2NjA4NjFmZiwkMDAwMDY3YjYsJDYwMTQwYzAxCisJZGMubAkkMDAwMzY2MDgsJDYxZmYwMDAwLCQ2NTc2NjAwNiwkNjFmZjAwMDAKKwlkYy5sCSQ0YTVjNGNlZSwkMDMwM2ZmOWMsJGYyMmU5ODAwLCRmZjYwZjIyZQorCWRjLmwJJGQwNDBmZmU4LCQ0ZTVlNGU3NSwkNGU1NmZmNDAsJDQ4ZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJGI4MDBmZjYwLCRmMjJlZjBjMCwkZmZkY2YyM2MKKwlkYy5sCSQ5MDAwMDAwMCwkMDAwMDQxZWUsJGZmNmMyMTZlLCQwMDA4MDAwMAorCWRjLmwJJDIxNmUwMDBjLCQwMDA0MjE2ZSwkMDAxMDAwMDgsJDYxZmYwMDAwCisJZGMubAkkNjIwMDFkNDAsJGZmNGUxMjAwLCQwMmFlMDBmZiwkMDBmZmZmNjQKKwlkYy5sCSQ0MjgwMTAyZSwkZmY2MzRhMDEsJDY2MDg2MWZmLCQwMDAwNDg4NgorCWRjLmwJJDYwMzAwYzAxLCQwMDAxNjYwOCwkNjFmZjAwMDAsJDY2YWU2MDIyCisJZGMubAkkMGMwMTAwMDIsJDY2MDg2MWZmLCQwMDAwNjcxNiwkNjAxNDBjMDEKKwlkYy5sCSQwMDAzNjYwOCwkNjFmZjAwMDAsJDY0ZDY2MDA2LCQ2MWZmMDAwMAorCWRjLmwJJDQ5YmM0Y2VlLCQwMzAzZmY5YywkZjIyZTk4MDAsJGZmNjBmMjJlCisJZGMubAkkZDA0MGZmZTgsJDRlNWU0ZTc1LCQ0ZTU2ZmY0MCwkNDhlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkYjgwMGZmNjAsJGYyMmVmMGMwLCRmZmRjZjIzYworCWRjLmwJJDkwMDAwMDAwLCQwMDAwZjIyZSwkNDQwMDAwMDgsJGYyMmU2ODAwCisJZGMubAkkZmY2YzQxZWUsJGZmNmM2MWZmLCQwMDAwNjE2NiwkMWQ0MGZmNGUKKwlkYy5sCSQxMjAwMDJhZSwkMDBmZjAwZmYsJGZmNjQ0MjgwLCQxMDJlZmY2MworCWRjLmwJJDRhMDE2NjA4LCQ2MWZmMDAwMCwkMzkxYzYwMzAsJDBjMDEwMDAxCisJZGMubAkkNjYwODYxZmYsJDAwMDA2NjE0LCQ2MDIyMGMwMSwkMDAwMjY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNjZiODYwMTQsJDBjMDEwMDAzLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA2NDNjLCQ2MDA2NjFmZiwkMDAwMDNiMjgsJDRjZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJDk4MDBmZjYwLCRmMjJlZDA0MCwkZmZlODRlNWUKKwlkYy5sCSQ0ZTc1NGU1NiwkZmY0MDQ4ZWUsJDAzMDNmZjljLCRmMjJlYjgwMAorCWRjLmwJJGZmNjBmMjJlLCRmMGMwZmZkYywkZjIzYzkwMDAsJDAwMDAwMDAwCisJZGMubAkkZjIyZTU0MDAsJDAwMDhmMjJlLCQ2ODAwZmY2YywkNDFlZWZmNmMKKwlkYy5sCSQ2MWZmMDAwMCwkNjBjYzFkNDAsJGZmNGUxMjAwLCQwMmFlMDBmZgorCWRjLmwJJDAwZmZmZjY0LCQ0MjgwMTAyZSwkZmY2MzFkNDEsJGZmNGU0YTAxCisJZGMubAkkNjYwODYxZmYsJDAwMDAzODdlLCQ2MDMwMGMwMSwkMDAwMTY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNjU3NjYwMjIsJDBjMDEwMDAyLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA2NjFhLCQ2MDE0MGMwMSwkMDAwMzY2MDgsJDYxZmYwMDAwCisJZGMubAkkNjM5ZTYwMDYsJDYxZmYwMDAwLCQzYThhNGNlZSwkMDMwM2ZmOWMKKwlkYy5sCSRmMjJlOTgwMCwkZmY2MGYyMmUsJGQwNDBmZmU4LCQ0ZTVlNGU3NQorCWRjLmwJJDRlNTZmZjQwLCQ0OGVlMDMwMywkZmY5Y2YyMmUsJGI4MDBmZjYwCisJZGMubAkkZjIyZWYwYzAsJGZmZGNmMjNjLCQ5MDAwMDAwMCwkMDAwMDQxZWUKKwlkYy5sCSRmZjZjMjE2ZSwkMDAwODAwMDAsJDIxNmUwMDBjLCQwMDA0MjE2ZQorCWRjLmwJJDAwMTAwMDA4LCQ2MWZmMDAwMCwkNjAyODFkNDAsJGZmNGUxMjAwCisJZGMubAkkMDJhZTAwZmYsJDAwZmZmZjY0LCQ0MjgwMTAyZSwkZmY2MzRhMDEKKwlkYy5sCSQ2NjA4NjFmZiwkMDAwMDM3ZGUsJDYwMzAwYzAxLCQwMDAxNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ2NGQ2NjAyMiwkMGMwMTAwMDIsJDY2MDg2MWZmCisJZGMubAkkMDAwMDY1N2EsJDYwMTQwYzAxLCQwMDAzNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ2MmZlNjAwNiwkNjFmZjAwMDAsJDM5ZWE0Y2VlLCQwMzAzZmY5YworCWRjLmwJJGYyMmU5ODAwLCRmZjYwZjIyZSwkZDA0MGZmZTgsJDRlNWU0ZTc1CisJZGMubAkkNGU1NmZmNDAsJDQ4ZWUwMzAzLCRmZjljZjIyZSwkYjgwMGZmNjAKKwlkYy5sCSRmMjJlZjBjMCwkZmZkY2YyM2MsJDkwMDAwMDAwLCQwMDAwZjIyZQorCWRjLmwJJDQ0MDAwMDA4LCRmMjJlNjgwMCwkZmY2YzQxZWUsJGZmNmM2MWZmCisJZGMubAkkMDAwMDVmOGUsJDFkNDBmZjRlLCQxMjAwMDJhZSwkMDBmZjAwZmYKKwlkYy5sCSRmZjY0NDI4MCwkMTAyZWZmNjMsJDRhMDE2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDM5ODg2MDMwLCQwYzAxMDAwMSwkNjYwODYxZmYsJDAwMDA2NDNjCisJZGMubAkkNjAyMjBjMDEsJDAwMDI2NjA4LCQ2MWZmMDAwMCwkNjAzYTYwMTQKKwlkYy5sCSQwYzAxMDAwMywkNjYwODYxZmYsJDAwMDA2MjY0LCQ2MDA2NjFmZgorCWRjLmwJJDAwMDAzYTA0LCQ0Y2VlMDMwMywkZmY5Y2YyMmUsJDk4MDBmZjYwCisJZGMubAkkZjIyZWQwNDAsJGZmZTg0ZTVlLCQ0ZTc1NGU1NiwkZmY0MDQ4ZWUKKwlkYy5sCSQwMzAzZmY5YywkZjIyZWI4MDAsJGZmNjBmMjJlLCRmMGMwZmZkYworCWRjLmwJJGYyM2M5MDAwLCQwMDAwMDAwMCwkZjIyZTU0MDAsJDAwMDhmMjJlCisJZGMubAkkNjgwMGZmNmMsJDQxZWVmZjZjLCQ2MWZmMDAwMCwkNWVmNDFkNDAKKwlkYy5sCSRmZjRlMTIwMCwkMDJhZTAwZmYsJDAwZmZmZjY0LCQ0MjgwMTAyZQorCWRjLmwJJGZmNjMxZDQxLCRmZjRlNGEwMSwkNjYwODYxZmYsJDAwMDAzOGVhCisJZGMubAkkNjAzMDBjMDEsJDAwMDE2NjA4LCQ2MWZmMDAwMCwkNjM5ZTYwMjIKKwlkYy5sCSQwYzAxMDAwMiwkNjYwODYxZmYsJDAwMDA1ZjljLCQ2MDE0MGMwMQorCWRjLmwJJDAwMDM2NjA4LCQ2MWZmMDAwMCwkNjFjNjYwMDYsJDYxZmYwMDAwCisJZGMubAkkMzk2NjRjZWUsJDAzMDNmZjljLCRmMjJlOTgwMCwkZmY2MGYyMmUKKwlkYy5sCSRkMDQwZmZlOCwkNGU1ZTRlNzUsJDRlNTZmZjQwLCQ0OGVlMDMwMworCWRjLmwJJGZmOWNmMjJlLCRiODAwZmY2MCwkZjIyZWYwYzAsJGZmZGNmMjNjCisJZGMubAkkOTAwMDAwMDAsJDAwMDA0MWVlLCRmZjZjMjE2ZSwkMDAwODAwMDAKKwlkYy5sCSQyMTZlMDAwYywkMDAwNDIxNmUsJDAwMTAwMDA4LCQ2MWZmMDAwMAorCWRjLmwJJDVlNTAxZDQwLCRmZjRlMTIwMCwkMDJhZTAwZmYsJDAwZmZmZjY0CisJZGMubAkkNDI4MDEwMmUsJGZmNjM0YTAxLCQ2NjA4NjFmZiwkMDAwMDM4NGEKKwlkYy5sCSQ2MDMwMGMwMSwkMDAwMTY2MDgsJDYxZmYwMDAwLCQ2MmZlNjAyMgorCWRjLmwJJDBjMDEwMDAyLCQ2NjA4NjFmZiwkMDAwMDVlZmMsJDYwMTQwYzAxCisJZGMubAkkMDAwMzY2MDgsJDYxZmYwMDAwLCQ2MTI2NjAwNiwkNjFmZjAwMDAKKwlkYy5sCSQzOGM2NGNlZSwkMDMwM2ZmOWMsJGYyMmU5ODAwLCRmZjYwZjIyZQorCWRjLmwJJGQwNDBmZmU4LCQ0ZTVlNGU3NSwkNGU1NmZmNDAsJDQ4ZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJGI4MDBmZjYwLCRmMjJlZjBjMCwkZmZkY2YyM2MKKwlkYy5sCSQ5MDAwMDAwMCwkMDAwMGYyMmUsJDQ0MDAwMDA4LCRmMjJlNjgwMAorCWRjLmwJJGZmNmM0MWVlLCRmZjZjNjFmZiwkMDAwMDVkYjYsJDFkNDBmZjRlCisJZGMubAkkMTIwMDAyYWUsJDAwZmYwMGZmLCRmZjY0NDI4MCwkMTAyZWZmNjMKKwlkYy5sCSQ0YTAxNjYwOCwkNjFmZjAwMDAsJDUxZDQ2MDMwLCQwYzAxMDAwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwNjI2NCwkNjAyMjBjMDEsJDAwMDI2NjA4CisJZGMubAkkNjFmZjAwMDAsJDVlNjI2MDE0LCQwYzAxMDAwMywkNjYwODYxZmYKKwlkYy5sCSQwMDAwNjA4YywkNjAwNjYxZmYsJDAwMDA1MjI0LCQ0Y2VlMDMwMworCWRjLmwJJGZmOWNmMjJlLCQ5ODAwZmY2MCwkZjIyZWQwNDAsJGZmZTg0ZTVlCisJZGMubAkkNGU3NTRlNTYsJGZmNDA0OGVlLCQwMzAzZmY5YywkZjIyZWI4MDAKKwlkYy5sCSRmZjYwZjIyZSwkZjBjMGZmZGMsJGYyM2M5MDAwLCQwMDAwMDAwMAorCWRjLmwJJGYyMmU1NDAwLCQwMDA4ZjIyZSwkNjgwMGZmNmMsJDQxZWVmZjZjCisJZGMubAkkNjFmZjAwMDAsJDVkMWMxZDQwLCRmZjRlMTIwMCwkMDJhZTAwZmYKKwlkYy5sCSQwMGZmZmY2NCwkNDI4MDEwMmUsJGZmNjMxZDQxLCRmZjRlNGEwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwNTEzNiwkNjAzMDBjMDEsJDAwMDE2NjA4CisJZGMubAkkNjFmZjAwMDAsJDYxYzY2MDIyLCQwYzAxMDAwMiwkNjYwODYxZmYKKwlkYy5sCSQwMDAwNWRjNCwkNjAxNDBjMDEsJDAwMDM2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDVmZWU2MDA2LCQ2MWZmMDAwMCwkNTE4NjRjZWUsJDAzMDNmZjljCisJZGMubAkkZjIyZTk4MDAsJGZmNjBmMjJlLCRkMDQwZmZlOCwkNGU1ZTRlNzUKKwlkYy5sCSQ0ZTU2ZmY0MCwkNDhlZTAzMDMsJGZmOWNmMjJlLCRiODAwZmY2MAorCWRjLmwJJGYyMmVmMGMwLCRmZmRjZjIzYywkOTAwMDAwMDAsJDAwMDA0MWVlCisJZGMubAkkZmY2YzIxNmUsJDAwMDgwMDAwLCQyMTZlMDAwYywkMDAwNDIxNmUKKwlkYy5sCSQwMDEwMDAwOCwkNjFmZjAwMDAsJDVjNzgxZDQwLCRmZjRlMTIwMAorCWRjLmwJJDAyYWUwMGZmLCQwMGZmZmY2NCwkNDI4MDEwMmUsJGZmNjM0YTAxCisJZGMubAkkNjYwODYxZmYsJDAwMDA1MDk2LCQ2MDMwMGMwMSwkMDAwMTY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNjEyNjYwMjIsJDBjMDEwMDAyLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA1ZDI0LCQ2MDE0MGMwMSwkMDAwMzY2MDgsJDYxZmYwMDAwCisJZGMubAkkNWY0ZTYwMDYsJDYxZmYwMDAwLCQ1MGU2NGNlZSwkMDMwM2ZmOWMKKwlkYy5sCSRmMjJlOTgwMCwkZmY2MGYyMmUsJGQwNDBmZmU4LCQ0ZTVlNGU3NQorCWRjLmwJJDRlNTZmZjQwLCQ0OGVlMDMwMywkZmY5Y2YyMmUsJGI4MDBmZjYwCisJZGMubAkkZjIyZWYwYzAsJGZmZGNmMjNjLCQ5MDAwMDAwMCwkMDAwMGYyMmUKKwlkYy5sCSQ0NDAwMDAwOCwkZjIyZTY4MDAsJGZmNmM0MWVlLCRmZjZjNjFmZgorCWRjLmwJJDAwMDA1YmRlLCQxZDQwZmY0ZSwkMTIwMDAyYWUsJDAwZmYwMGZmCisJZGMubAkkZmY2NDQyODAsJDEwMmVmZjYzLCQ0YTAxNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQyODA2NjAzMCwkMGMwMTAwMDEsJDY2MDg2MWZmLCQwMDAwNjA4YworCWRjLmwJJDYwMjIwYzAxLCQwMDAyNjYwOCwkNjFmZjAwMDAsJDVjOGE2MDE0CisJZGMubAkkMGMwMTAwMDMsJDY2MDg2MWZmLCQwMDAwNWViNCwkNjAwNjYxZmYKKwlkYy5sCSQwMDAwMjkzOCwkNGNlZTAzMDMsJGZmOWNmMjJlLCQ5ODAwZmY2MAorCWRjLmwJJGYyMmVkMDQwLCRmZmU4NGU1ZSwkNGU3NTRlNTYsJGZmNDA0OGVlCisJZGMubAkkMDMwM2ZmOWMsJGYyMmViODAwLCRmZjYwZjIyZSwkZjBjMGZmZGMKKwlkYy5sCSRmMjNjOTAwMCwkMDAwMDAwMDAsJGYyMmU1NDAwLCQwMDA4ZjIyZQorCWRjLmwJJDY4MDBmZjZjLCQ0MWVlZmY2YywkNjFmZjAwMDAsJDViNDQxZDQwCisJZGMubAkkZmY0ZTEyMDAsJDAyYWUwMGZmLCQwMGZmZmY2NCwkNDI4MDEwMmUKKwlkYy5sCSRmZjYzMWQ0MSwkZmY0ZTRhMDEsJDY2MDg2MWZmLCQwMDAwMjc2OAorCWRjLmwJJDYwMzAwYzAxLCQwMDAxNjYwOCwkNjFmZjAwMDAsJDVmZWU2MDIyCisJZGMubAkkMGMwMTAwMDIsJDY2MDg2MWZmLCQwMDAwNWJlYywkNjAxNDBjMDEKKwlkYy5sCSQwMDAzNjYwOCwkNjFmZjAwMDAsJDVlMTY2MDA2LCQ2MWZmMDAwMAorCWRjLmwJJDI4OWE0Y2VlLCQwMzAzZmY5YywkZjIyZTk4MDAsJGZmNjBmMjJlCisJZGMubAkkZDA0MGZmZTgsJDRlNWU0ZTc1LCQ0ZTU2ZmY0MCwkNDhlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkYjgwMGZmNjAsJGYyMmVmMGMwLCRmZmRjZjIzYworCWRjLmwJJDkwMDAwMDAwLCQwMDAwNDFlZSwkZmY2YzIxNmUsJDAwMDgwMDAwCisJZGMubAkkMjE2ZTAwMGMsJDAwMDQyMTZlLCQwMDEwMDAwOCwkNjFmZjAwMDAKKwlkYy5sCSQ1YWEwMWQ0MCwkZmY0ZTEyMDAsJDAyYWUwMGZmLCQwMGZmZmY2NAorCWRjLmwJJDQyODAxMDJlLCRmZjYzNGEwMSwkNjYwODYxZmYsJDAwMDAyNmM4CisJZGMubAkkNjAzMDBjMDEsJDAwMDE2NjA4LCQ2MWZmMDAwMCwkNWY0ZTYwMjIKKwlkYy5sCSQwYzAxMDAwMiwkNjYwODYxZmYsJDAwMDA1YjRjLCQ2MDE0MGMwMQorCWRjLmwJJDAwMDM2NjA4LCQ2MWZmMDAwMCwkNWQ3NjYwMDYsJDYxZmYwMDAwCisJZGMubAkkMjdmYTRjZWUsJDAzMDNmZjljLCRmMjJlOTgwMCwkZmY2MGYyMmUKKwlkYy5sCSRkMDQwZmZlOCwkNGU1ZTRlNzUsJDRlNTZmZjQwLCQ0OGVlMDMwMworCWRjLmwJJGZmOWNmMjJlLCRiODAwZmY2MCwkZjIyZWYwYzAsJGZmZGNmMjNjCisJZGMubAkkOTAwMDAwMDAsJDAwMDBmMjJlLCQ0NDAwMDAwOCwkZjIyZTY4MDAKKwlkYy5sCSRmZjZjNDFlZSwkZmY2YzYxZmYsJDAwMDA1YTA2LCQxZDQwZmY0ZQorCWRjLmwJJDEyMDAwMmFlLCQwMGZmMDBmZiwkZmY2NDQyODAsJDEwMmVmZjYzCisJZGMubAkkNGEwMTY2MDgsJDYxZmYwMDAwLCQzOWU0NjAzMCwkMGMwMTAwMDEKKwlkYy5sCSQ2NjA4NjFmZiwkMDAwMDVmMzAsJDYwMjIwYzAxLCQwMDAyNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ1ZjAyNjAxNCwkMGMwMTAwMDMsJDY2MDg2MWZmCisJZGMubAkkMDAwMDVjZGMsJDYwMDY2MWZmLCQwMDAwM2I1ZSwkNGNlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkOTgwMGZmNjAsJGYyMmVkMDQwLCRmZmU4NGU1ZQorCWRjLmwJJDRlNzU0ZTU2LCRmZjQwNDhlZSwkMDMwM2ZmOWMsJGYyMmViODAwCisJZGMubAkkZmY2MGYyMmUsJGYwYzBmZmRjLCRmMjNjOTAwMCwkMDAwMDAwMDAKKwlkYy5sCSRmMjJlNTQwMCwkMDAwOGYyMmUsJDY4MDBmZjZjLCQ0MWVlZmY2YworCWRjLmwJJDYxZmYwMDAwLCQ1OTZjMWQ0MCwkZmY0ZTEyMDAsJDAyYWUwMGZmCisJZGMubAkkMDBmZmZmNjQsJDQyODAxMDJlLCRmZjYzMWQ0MSwkZmY0ZTRhMDEKKwlkYy5sCSQ2NjA4NjFmZiwkMDAwMDM5NDYsJDYwMzAwYzAxLCQwMDAxNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ1ZTkyNjAyMiwkMGMwMTAwMDIsJDY2MDg2MWZmCisJZGMubAkkMDAwMDVlNjQsJDYwMTQwYzAxLCQwMDAzNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ1YzNlNjAwNiwkNjFmZjAwMDAsJDNhYzA0Y2VlLCQwMzAzZmY5YworCWRjLmwJJGYyMmU5ODAwLCRmZjYwZjIyZSwkZDA0MGZmZTgsJDRlNWU0ZTc1CisJZGMubAkkNGU1NmZmNDAsJDQ4ZWUwMzAzLCRmZjljZjIyZSwkYjgwMGZmNjAKKwlkYy5sCSRmMjJlZjBjMCwkZmZkY2YyM2MsJDkwMDAwMDAwLCQwMDAwNDFlZQorCWRjLmwJJGZmNmMyMTZlLCQwMDA4MDAwMCwkMjE2ZTAwMGMsJDAwMDQyMTZlCisJZGMubAkkMDAxMDAwMDgsJDYxZmYwMDAwLCQ1OGM4MWQ0MCwkZmY0ZTEyMDAKKwlkYy5sCSQwMmFlMDBmZiwkMDBmZmZmNjQsJDQyODAxMDJlLCRmZjYzNGEwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwMzhhNiwkNjAzMDBjMDEsJDAwMDE2NjA4CisJZGMubAkkNjFmZjAwMDAsJDVkZjI2MDIyLCQwYzAxMDAwMiwkNjYwODYxZmYKKwlkYy5sCSQwMDAwNWRjNCwkNjAxNDBjMDEsJDAwMDM2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDViOWU2MDA2LCQ2MWZmMDAwMCwkM2EyMDRjZWUsJDAzMDNmZjljCisJZGMubAkkZjIyZTk4MDAsJGZmNjBmMjJlLCRkMDQwZmZlOCwkNGU1ZTRlNzUKKwlkYy5sCSQ0ZTU2ZmY0MCwkNDhlZTAzMDMsJGZmOWNmMjJlLCRiODAwZmY2MAorCWRjLmwJJGYyMmVmMGMwLCRmZmRjZjIzYywkOTAwMDAwMDAsJDAwMDBmMjJlCisJZGMubAkkNDQwMDAwMDgsJGYyMmU2ODAwLCRmZjZjNDFlZSwkZmY2YzYxZmYKKwlkYy5sCSQwMDAwNTgyZSwkMWQ0MGZmNGUsJDEyMDAwMmFlLCQwMGZmMDBmZgorCWRjLmwJJGZmNjQ0MjgwLCQxMDJlZmY2MywkNGEwMTY2MDgsJDYxZmYwMDAwCisJZGMubAkkNTIyZTYwMzAsJDBjMDEwMDAxLCQ2NjA4NjFmZiwkMDAwMDVkNTgKKwlkYy5sCSQ2MDIyMGMwMSwkMDAwMjY2MDgsJDYxZmYwMDAwLCQ1ZDJhNjAxNAorCWRjLmwJJDBjMDEwMDAzLCQ2NjA4NjFmZiwkMDAwMDViMDQsJDYwMDY2MWZmCisJZGMubAkkMDAwMDUyZDYsJDRjZWUwMzAzLCRmZjljZjIyZSwkOTgwMGZmNjAKKwlkYy5sCSRmMjJlZDA0MCwkZmZlODRlNWUsJDRlNzU0ZTU2LCRmZjQwNDhlZQorCWRjLmwJJDAzMDNmZjljLCRmMjJlYjgwMCwkZmY2MGYyMmUsJGYwYzBmZmRjCisJZGMubAkkZjIzYzkwMDAsJDAwMDAwMDAwLCRmMjJlNTQwMCwkMDAwOGYyMmUKKwlkYy5sCSQ2ODAwZmY2YywkNDFlZWZmNmMsJDYxZmYwMDAwLCQ1Nzk0MWQ0MAorCWRjLmwJJGZmNGUxMjAwLCQwMmFlMDBmZiwkMDBmZmZmNjQsJDQyODAxMDJlCisJZGMubAkkZmY2MzFkNDEsJGZmNGU0YTAxLCQ2NjA4NjFmZiwkMDAwMDUxOTAKKwlkYy5sCSQ2MDMwMGMwMSwkMDAwMTY2MDgsJDYxZmYwMDAwLCQ1Y2JhNjAyMgorCWRjLmwJJDBjMDEwMDAyLCQ2NjA4NjFmZiwkMDAwMDVjOGMsJDYwMTQwYzAxCisJZGMubAkkMDAwMzY2MDgsJDYxZmYwMDAwLCQ1YTY2NjAwNiwkNjFmZjAwMDAKKwlkYy5sCSQ1MjM4NGNlZSwkMDMwM2ZmOWMsJGYyMmU5ODAwLCRmZjYwZjIyZQorCWRjLmwJJGQwNDBmZmU4LCQ0ZTVlNGU3NSwkNGU1NmZmNDAsJDQ4ZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJGI4MDBmZjYwLCRmMjJlZjBjMCwkZmZkY2YyM2MKKwlkYy5sCSQ5MDAwMDAwMCwkMDAwMDQxZWUsJGZmNmMyMTZlLCQwMDA4MDAwMAorCWRjLmwJJDIxNmUwMDBjLCQwMDA0MjE2ZSwkMDAxMDAwMDgsJDYxZmYwMDAwCisJZGMubAkkNTZmMDFkNDAsJGZmNGUxMjAwLCQwMmFlMDBmZiwkMDBmZmZmNjQKKwlkYy5sCSQ0MjgwMTAyZSwkZmY2MzRhMDEsJDY2MDg2MWZmLCQwMDAwNTBmMAorCWRjLmwJJDYwMzAwYzAxLCQwMDAxNjYwOCwkNjFmZjAwMDAsJDVjMWE2MDIyCisJZGMubAkkMGMwMTAwMDIsJDY2MDg2MWZmLCQwMDAwNWJlYywkNjAxNDBjMDEKKwlkYy5sCSQwMDAzNjYwOCwkNjFmZjAwMDAsJDU5YzY2MDA2LCQ2MWZmMDAwMAorCWRjLmwJJDUxOTg0Y2VlLCQwMzAzZmY5YywkZjIyZTk4MDAsJGZmNjBmMjJlCisJZGMubAkkZDA0MGZmZTgsJDRlNWU0ZTc1LCQ0ZTU2ZmY0MCwkNDhlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkYjgwMGZmNjAsJGYyMmVmMGMwLCRmZmRjZjIzYworCWRjLmwJJDkwMDAwMDAwLCQwMDAwZjIyZSwkNDQwMDAwMDgsJGYyMmU2ODAwCisJZGMubAkkZmY2YzQxZWUsJGZmNmM2MWZmLCQwMDAwNTY1NiwkMWQ0MGZmNGUKKwlkYy5sCSQxMjAwMDJhZSwkMDBmZjAwZmYsJGZmNjQ0MjgwLCQxMDJlZmY2MworCWRjLmwJJDRhMDE2NjA4LCQ2MWZmMDAwMCwkNTE0ZTYwMzAsJDBjMDEwMDAxCisJZGMubAkkNjYwODYxZmYsJDAwMDA1YjgwLCQ2MDIyMGMwMSwkMDAwMjY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNWI1MjYwMTQsJDBjMDEwMDAzLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA1OTJjLCQ2MDA2NjFmZiwkMDAwMDUyNGMsJDRjZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJDk4MDBmZjYwLCRmMjJlZDA0MCwkZmZlODRlNWUKKwlkYy5sCSQ0ZTc1NGU1NiwkZmY0MDQ4ZWUsJDAzMDNmZjljLCRmMjJlYjgwMAorCWRjLmwJJGZmNjBmMjJlLCRmMGMwZmZkYywkZjIzYzkwMDAsJDAwMDAwMDAwCisJZGMubAkkZjIyZTU0MDAsJDAwMDhmMjJlLCQ2ODAwZmY2YywkNDFlZWZmNmMKKwlkYy5sCSQ2MWZmMDAwMCwkNTViYzFkNDAsJGZmNGUxMjAwLCQwMmFlMDBmZgorCWRjLmwJJDAwZmZmZjY0LCQ0MjgwMTAyZSwkZmY2MzFkNDEsJGZmNGU0YTAxCisJZGMubAkkNjYwODYxZmYsJDAwMDA1MGIwLCQ2MDMwMGMwMSwkMDAwMTY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNWFlMjYwMjIsJDBjMDEwMDAyLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA1YWI0LCQ2MDE0MGMwMSwkMDAwMzY2MDgsJDYxZmYwMDAwCisJZGMubAkkNTg4ZTYwMDYsJDYxZmYwMDAwLCQ1MWFlNGNlZSwkMDMwM2ZmOWMKKwlkYy5sCSRmMjJlOTgwMCwkZmY2MGYyMmUsJGQwNDBmZmU4LCQ0ZTVlNGU3NQorCWRjLmwJJDRlNTZmZjQwLCQ0OGVlMDMwMywkZmY5Y2YyMmUsJGI4MDBmZjYwCisJZGMubAkkZjIyZWYwYzAsJGZmZGNmMjNjLCQ5MDAwMDAwMCwkMDAwMDQxZWUKKwlkYy5sCSRmZjZjMjE2ZSwkMDAwODAwMDAsJDIxNmUwMDBjLCQwMDA0MjE2ZQorCWRjLmwJJDAwMTAwMDA4LCQ2MWZmMDAwMCwkNTUxODFkNDAsJGZmNGUxMjAwCisJZGMubAkkMDJhZTAwZmYsJDAwZmZmZjY0LCQ0MjgwMTAyZSwkZmY2MzRhMDEKKwlkYy5sCSQ2NjA4NjFmZiwkMDAwMDUwMTAsJDYwMzAwYzAxLCQwMDAxNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ1YTQyNjAyMiwkMGMwMTAwMDIsJDY2MDg2MWZmCisJZGMubAkkMDAwMDVhMTQsJDYwMTQwYzAxLCQwMDAzNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ1N2VlNjAwNiwkNjFmZjAwMDAsJDUxMGU0Y2VlLCQwMzAzZmY5YworCWRjLmwJJGYyMmU5ODAwLCRmZjYwZjIyZSwkZDA0MGZmZTgsJDRlNWU0ZTc1CisJZGMubAkkNGU1NmZmNDAsJDQ4ZWUwMzAzLCRmZjljZjIyZSwkYjgwMGZmNjAKKwlkYy5sCSRmMjJlZjBjMCwkZmZkY2YyM2MsJDkwMDAwMDAwLCQwMDAwZjIyZQorCWRjLmwJJDQ0MDAwMDA4LCRmMjJlNjgwMCwkZmY2YzQxZWUsJGZmNmM2MWZmCisJZGMubAkkMDAwMDU0N2UsJDFkNDBmZjRlLCQxMjAwMDJhZSwkMDBmZjAwZmYKKwlkYy5sCSRmZjY0NDI4MCwkMTAyZWZmNjMsJDRhMDE2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDQ1MDI2MDMwLCQwYzAxMDAwMSwkNjYwODYxZmYsJDAwMDA1NGM4CisJZGMubAkkNjAyMjBjMDEsJDAwMDI2NjA4LCQ2MWZmMDAwMCwkNTk4MjYwMTQKKwlkYy5sCSQwYzAxMDAwMywkNjYwODYxZmYsJDAwMDA1NzU0LCQ2MDA2NjFmZgorCWRjLmwJJDAwMDA0NjgyLCQ0Y2VlMDMwMywkZmY5Y2YyMmUsJDk4MDBmZjYwCisJZGMubAkkZjIyZWQwNDAsJGZmZTg0ZTVlLCQ0ZTc1NGU1NiwkZmY0MDQ4ZWUKKwlkYy5sCSQwMzAzZmY5YywkZjIyZWI4MDAsJGZmNjBmMjJlLCRmMGMwZmZkYworCWRjLmwJJGYyM2M5MDAwLCQwMDAwMDAwMCwkZjIyZTU0MDAsJDAwMDhmMjJlCisJZGMubAkkNjgwMGZmNmMsJDQxZWVmZjZjLCQ2MWZmMDAwMCwkNTNlNDFkNDAKKwlkYy5sCSRmZjRlMTIwMCwkMDJhZTAwZmYsJDAwZmZmZjY0LCQ0MjgwMTAyZQorCWRjLmwJJGZmNjMxZDQxLCRmZjRlNGEwMSwkNjYwODYxZmYsJDAwMDA0NDY0CisJZGMubAkkNjAzMDBjMDEsJDAwMDE2NjA4LCQ2MWZmMDAwMCwkNTQyYTYwMjIKKwlkYy5sCSQwYzAxMDAwMiwkNjYwODYxZmYsJDAwMDA1OGU0LCQ2MDE0MGMwMQorCWRjLmwJJDAwMDM2NjA4LCQ2MWZmMDAwMCwkNTZiNjYwMDYsJDYxZmYwMDAwCisJZGMubAkkNDVlNDRjZWUsJDAzMDNmZjljLCRmMjJlOTgwMCwkZmY2MGYyMmUKKwlkYy5sCSRkMDQwZmZlOCwkNGU1ZTRlNzUsJDRlNTZmZjQwLCQ0OGVlMDMwMworCWRjLmwJJGZmOWNmMjJlLCRiODAwZmY2MCwkZjIyZWYwYzAsJGZmZGNmMjNjCisJZGMubAkkOTAwMDAwMDAsJDAwMDA0MWVlLCRmZjZjMjE2ZSwkMDAwODAwMDAKKwlkYy5sCSQyMTZlMDAwYywkMDAwNDIxNmUsJDAwMTAwMDA4LCQ2MWZmMDAwMAorCWRjLmwJJDUzNDAxZDQwLCRmZjRlMTIwMCwkMDJhZTAwZmYsJDAwZmZmZjY0CisJZGMubAkkNDI4MDEwMmUsJGZmNjM0YTAxLCQ2NjA4NjFmZiwkMDAwMDQzYzQKKwlkYy5sCSQ2MDMwMGMwMSwkMDAwMTY2MDgsJDYxZmYwMDAwLCQ1MzhhNjAyMgorCWRjLmwJJDBjMDEwMDAyLCQ2NjA4NjFmZiwkMDAwMDU4NDQsJDYwMTQwYzAxCisJZGMubAkkMDAwMzY2MDgsJDYxZmYwMDAwLCQ1NjE2NjAwNiwkNjFmZjAwMDAKKwlkYy5sCSQ0NTQ0NGNlZSwkMDMwM2ZmOWMsJGYyMmU5ODAwLCRmZjYwZjIyZQorCWRjLmwJJGQwNDBmZmU4LCQ0ZTVlNGU3NSwkNGU1NmZmNDAsJDQ4ZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJGI4MDBmZjYwLCRmMjJlZjBjMCwkZmZkY2YyM2MKKwlkYy5sCSQ5MDAwMDAwMCwkMDAwMGYyMmUsJDQ0MDAwMDA4LCRmMjJlNjgwMAorCWRjLmwJJGZmNmM0MWVlLCRmZjZjNjFmZiwkMDAwMDUyYTYsJDFkNDBmZjRlCisJZGMubAkkMTIwMDAyYWUsJDAwZmYwMGZmLCRmZjY0NDI4MCwkMTAyZWZmNjMKKwlkYy5sCSQ0YTAxNjYwOCwkNjFmZjAwMDAsJDQ3NmM2MDMwLCQwYzAxMDAwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwNTJmMCwkNjAyMjBjMDEsJDAwMDI2NjA4CisJZGMubAkkNjFmZjAwMDAsJDU3YWE2MDE0LCQwYzAxMDAwMywkNjYwODYxZmYKKwlkYy5sCSQwMDAwNTU3YywkNjAwNjYxZmYsJDAwMDA0NzZhLCQ0Y2VlMDMwMworCWRjLmwJJGZmOWNmMjJlLCQ5ODAwZmY2MCwkZjIyZWQwNDAsJGZmZTg0ZTVlCisJZGMubAkkNGU3NTRlNTYsJGZmNDA0OGVlLCQwMzAzZmY5YywkZjIyZWI4MDAKKwlkYy5sCSRmZjYwZjIyZSwkZjBjMGZmZGMsJGYyM2M5MDAwLCQwMDAwMDAwMAorCWRjLmwJJGYyMmU1NDAwLCQwMDA4ZjIyZSwkNjgwMGZmNmMsJDQxZWVmZjZjCisJZGMubAkkNjFmZjAwMDAsJDUyMGMxZDQwLCRmZjRlMTIwMCwkMDJhZTAwZmYKKwlkYy5sCSQwMGZmZmY2NCwkNDI4MDEwMmUsJGZmNjMxZDQxLCRmZjRlNGEwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwNDZjZSwkNjAzMDBjMDEsJDAwMDE2NjA4CisJZGMubAkkNjFmZjAwMDAsJDUyNTI2MDIyLCQwYzAxMDAwMiwkNjYwODYxZmYKKwlkYy5sCSQwMDAwNTcwYywkNjAxNDBjMDEsJDAwMDM2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDU0ZGU2MDA2LCQ2MWZmMDAwMCwkNDZjYzRjZWUsJDAzMDNmZjljCisJZGMubAkkZjIyZTk4MDAsJGZmNjBmMjJlLCRkMDQwZmZlOCwkNGU1ZTRlNzUKKwlkYy5sCSQ0ZTU2ZmY0MCwkNDhlZTAzMDMsJGZmOWNmMjJlLCRiODAwZmY2MAorCWRjLmwJJGYyMmVmMGMwLCRmZmRjZjIzYywkOTAwMDAwMDAsJDAwMDA0MWVlCisJZGMubAkkZmY2YzIxNmUsJDAwMDgwMDAwLCQyMTZlMDAwYywkMDAwNDIxNmUKKwlkYy5sCSQwMDEwMDAwOCwkNjFmZjAwMDAsJDUxNjgxZDQwLCRmZjRlMTIwMAorCWRjLmwJJDAyYWUwMGZmLCQwMGZmZmY2NCwkNDI4MDEwMmUsJGZmNjM0YTAxCisJZGMubAkkNjYwODYxZmYsJDAwMDA0NjJlLCQ2MDMwMGMwMSwkMDAwMTY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNTFiMjYwMjIsJDBjMDEwMDAyLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA1NjZjLCQ2MDE0MGMwMSwkMDAwMzY2MDgsJDYxZmYwMDAwCisJZGMubAkkNTQzZTYwMDYsJDYxZmYwMDAwLCQ0NjJjNGNlZSwkMDMwM2ZmOWMKKwlkYy5sCSRmMjJlOTgwMCwkZmY2MGYyMmUsJGQwNDBmZmU4LCQ0ZTVlNGU3NQorCWRjLmwJJDRlNTZmZjQwLCQ0OGVlMDMwMywkZmY5Y2YyMmUsJGI4MDBmZjYwCisJZGMubAkkZjIyZWYwYzAsJGZmZGNmMjNjLCQ5MDAwMDAwMCwkMDAwMGYyMmUKKwlkYy5sCSQ0NDAwMDAwOCwkZjIyZTY4MDAsJGZmNmM0MWVlLCRmZjZjNjFmZgorCWRjLmwJJDAwMDA1MGNlLCQxZDQwZmY0ZSwkMTIwMDAyYWUsJDAwZmYwMGZmCisJZGMubAkkZmY2NDQyODAsJDEwMmVmZjYzLCQ0YTAxNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ0NWU0NjAzMCwkMGMwMTAwMDEsJDY2MDg2MWZmLCQwMDAwNTExOAorCWRjLmwJJDYwMjIwYzAxLCQwMDAyNjYwOCwkNjFmZjAwMDAsJDU1ZDI2MDE0CisJZGMubAkkMGMwMTAwMDMsJDY2MDg2MWZmLCQwMDAwNTNhNCwkNjAwNjYxZmYKKwlkYy5sCSQwMDAwNDYwYywkNGNlZTAzMDMsJGZmOWNmMjJlLCQ5ODAwZmY2MAorCWRjLmwJJGYyMmVkMDQwLCRmZmU4NGU1ZSwkNGU3NTRlNTYsJGZmNDA0OGVlCisJZGMubAkkMDMwM2ZmOWMsJGYyMmViODAwLCRmZjYwZjIyZSwkZjBjMGZmZGMKKwlkYy5sCSRmMjNjOTAwMCwkMDAwMDAwMDAsJGYyMmU1NDAwLCQwMDA4ZjIyZQorCWRjLmwJJDY4MDBmZjZjLCQ0MWVlZmY2YywkNjFmZjAwMDAsJDUwMzQxZDQwCisJZGMubAkkZmY0ZTEyMDAsJDAyYWUwMGZmLCQwMGZmZmY2NCwkNDI4MDEwMmUKKwlkYy5sCSRmZjYzMWQ0MSwkZmY0ZTRhMDEsJDY2MDg2MWZmLCQwMDAwNDU0NgorCWRjLmwJJDYwMzAwYzAxLCQwMDAxNjYwOCwkNjFmZjAwMDAsJDUwN2E2MDIyCisJZGMubAkkMGMwMTAwMDIsJDY2MDg2MWZmLCQwMDAwNTUzNCwkNjAxNDBjMDEKKwlkYy5sCSQwMDAzNjYwOCwkNjFmZjAwMDAsJDUzMDY2MDA2LCQ2MWZmMDAwMAorCWRjLmwJJDQ1NmU0Y2VlLCQwMzAzZmY5YywkZjIyZTk4MDAsJGZmNjBmMjJlCisJZGMubAkkZDA0MGZmZTgsJDRlNWU0ZTc1LCQ0ZTU2ZmY0MCwkNDhlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkYjgwMGZmNjAsJGYyMmVmMGMwLCRmZmRjZjIzYworCWRjLmwJJDkwMDAwMDAwLCQwMDAwNDFlZSwkZmY2YzIxNmUsJDAwMDgwMDAwCisJZGMubAkkMjE2ZTAwMGMsJDAwMDQyMTZlLCQwMDEwMDAwOCwkNjFmZjAwMDAKKwlkYy5sCSQ0ZjkwMWQ0MCwkZmY0ZTEyMDAsJDAyYWUwMGZmLCQwMGZmZmY2NAorCWRjLmwJJDQyODAxMDJlLCRmZjYzNGEwMSwkNjYwODYxZmYsJDAwMDA0NGE2CisJZGMubAkkNjAzMDBjMDEsJDAwMDE2NjA4LCQ2MWZmMDAwMCwkNGZkYTYwMjIKKwlkYy5sCSQwYzAxMDAwMiwkNjYwODYxZmYsJDAwMDA1NDk0LCQ2MDE0MGMwMQorCWRjLmwJJDAwMDM2NjA4LCQ2MWZmMDAwMCwkNTI2NjYwMDYsJDYxZmYwMDAwCisJZGMubAkkNDRjZTRjZWUsJDAzMDNmZjljLCRmMjJlOTgwMCwkZmY2MGYyMmUKKwlkYy5sCSRkMDQwZmZlOCwkNGU1ZTRlNzUsJDRlNTZmZjQwLCQ0OGVlMDMwMworCWRjLmwJJGZmOWNmMjJlLCRiODAwZmY2MCwkZjIyZWYwYzAsJGZmZGNmMjNjCisJZGMubAkkOTAwMDAwMDAsJDAwMDBmMjJlLCQ0NDAwMDAwOCwkZjIyZTY4MDAKKwlkYy5sCSRmZjZjNDFlZSwkZmY2YzYxZmYsJDAwMDA0ZWY2LCQxZDQwZmY0ZQorCWRjLmwJJDEyMDAwMmFlLCQwMGZmMDBmZiwkZmY2NDQyODAsJDEwMmVmZjYzCisJZGMubAkkNGEwMTY2MDgsJDYxZmYwMDAwLCQzM2RhNjAzMCwkMGMwMTAwMDEKKwlkYy5sCSQ2NjA4NjFmZiwkMDAwMDU0MjAsJDYwMjIwYzAxLCQwMDAyNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ1M2NhNjAxNCwkMGMwMTAwMDMsJDY2MDg2MWZmCisJZGMubAkkMDAwMDUxY2MsJDYwMDY2MWZmLCQwMDAwMzQ0YywkNGNlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkOTgwMGZmNjAsJGYyMmVkMDQwLCRmZmU4NGU1ZQorCWRjLmwJJDRlNzU0ZTU2LCRmZjQwNDhlZSwkMDMwM2ZmOWMsJGYyMmViODAwCisJZGMubAkkZmY2MGYyMmUsJGYwYzBmZmRjLCRmMjNjOTAwMCwkMDAwMDAwMDAKKwlkYy5sCSRmMjJlNTQwMCwkMDAwOGYyMmUsJDY4MDBmZjZjLCQ0MWVlZmY2YworCWRjLmwJJDYxZmYwMDAwLCQ0ZTVjMWQ0MCwkZmY0ZTEyMDAsJDAyYWUwMGZmCisJZGMubAkkMDBmZmZmNjQsJDQyODAxMDJlLCRmZjYzMWQ0MSwkZmY0ZTRhMDEKKwlkYy5sCSQ2NjA4NjFmZiwkMDAwMDMzM2MsJDYwMzAwYzAxLCQwMDAxNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ1MzgyNjAyMiwkMGMwMTAwMDIsJDY2MDg2MWZmCisJZGMubAkkMDAwMDUzMmMsJDYwMTQwYzAxLCQwMDAzNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ1MTJlNjAwNiwkNjFmZjAwMDAsJDMzYWU0Y2VlLCQwMzAzZmY5YworCWRjLmwJJGYyMmU5ODAwLCRmZjYwZjIyZSwkZDA0MGZmZTgsJDRlNWU0ZTc1CisJZGMubAkkNGU1NmZmNDAsJDQ4ZWUwMzAzLCRmZjljZjIyZSwkYjgwMGZmNjAKKwlkYy5sCSRmMjJlZjBjMCwkZmZkY2YyM2MsJDkwMDAwMDAwLCQwMDAwNDFlZQorCWRjLmwJJGZmNmMyMTZlLCQwMDA4MDAwMCwkMjE2ZTAwMGMsJDAwMDQyMTZlCisJZGMubAkkMDAxMDAwMDgsJDYxZmYwMDAwLCQ0ZGI4MWQ0MCwkZmY0ZTEyMDAKKwlkYy5sCSQwMmFlMDBmZiwkMDBmZmZmNjQsJDQyODAxMDJlLCRmZjYzNGEwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwMzI5YywkNjAzMDBjMDEsJDAwMDE2NjA4CisJZGMubAkkNjFmZjAwMDAsJDUyZTI2MDIyLCQwYzAxMDAwMiwkNjYwODYxZmYKKwlkYy5sCSQwMDAwNTI4YywkNjAxNDBjMDEsJDAwMDM2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDUwOGU2MDA2LCQ2MWZmMDAwMCwkMzMwZTRjZWUsJDAzMDNmZjljCisJZGMubAkkZjIyZTk4MDAsJGZmNjBmMjJlLCRkMDQwZmZlOCwkNGU1ZTRlNzUKKwlkYy5sCSQ0ZTU2ZmY0MCwkNDhlZTAzMDMsJGZmOWNmMjJlLCRiODAwZmY2MAorCWRjLmwJJGYyMmVmMGMwLCRmZmRjZjIzYywkOTAwMDAwMDAsJDAwMDBmMjJlCisJZGMubAkkNDQwMDAwMDgsJGYyMmU2ODAwLCRmZjZjNDFlZSwkZmY2YzYxZmYKKwlkYy5sCSQwMDAwNGQxZSwkMWQ0MGZmNGUsJDEyMDAwMmFlLCQwMGZmMDBmZgorCWRjLmwJJGZmNjQ0MjgwLCQxMDJlZmY2MywkNGEwMTY2MDgsJDYxZmYwMDAwCisJZGMubAkkMjdjYzYwMzAsJDBjMDEwMDAxLCQ2NjA4NjFmZiwkMDAwMDUyODQKKwlkYy5sCSQ2MDIyMGMwMSwkMDAwMjY2MDgsJDYxZmYwMDAwLCQ0ZGNhNjAxNAorCWRjLmwJJDBjMDEwMDAzLCQ2NjA4NjFmZiwkMDAwMDRmZjQsJDYwMDY2MWZmCisJZGMubAkkMDAwMDI4MmEsJDRjZWUwMzAzLCRmZjljZjIyZSwkOTgwMGZmNjAKKwlkYy5sCSRmMjJlZDA0MCwkZmZlODRlNWUsJDRlNzU0ZTU2LCRmZjQwNDhlZQorCWRjLmwJJDAzMDNmZjljLCRmMjJlYjgwMCwkZmY2MGYyMmUsJGYwYzBmZmRjCisJZGMubAkkZjIzYzkwMDAsJDAwMDAwMDAwLCRmMjJlNTQwMCwkMDAwOGYyMmUKKwlkYy5sCSQ2ODAwZmY2YywkNDFlZWZmNmMsJDYxZmYwMDAwLCQ0Yzg0MWQ0MAorCWRjLmwJJGZmNGUxMjAwLCQwMmFlMDBmZiwkMDBmZmZmNjQsJDQyODAxMDJlCisJZGMubAkkZmY2MzFkNDEsJGZmNGU0YTAxLCQ2NjA4NjFmZiwkMDAwMDI3MmUKKwlkYy5sCSQ2MDMwMGMwMSwkMDAwMTY2MDgsJDYxZmYwMDAwLCQ1MWU2NjAyMgorCWRjLmwJJDBjMDEwMDAyLCQ2NjA4NjFmZiwkMDAwMDRkMmMsJDYwMTQwYzAxCisJZGMubAkkMDAwMzY2MDgsJDYxZmYwMDAwLCQ0ZjU2NjAwNiwkNjFmZjAwMDAKKwlkYy5sCSQyNzhjNGNlZSwkMDMwM2ZmOWMsJGYyMmU5ODAwLCRmZjYwZjIyZQorCWRjLmwJJGQwNDBmZmU4LCQ0ZTVlNGU3NSwkNGU1NmZmNDAsJDQ4ZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJGI4MDBmZjYwLCRmMjJlZjBjMCwkZmZkY2YyM2MKKwlkYy5sCSQ5MDAwMDAwMCwkMDAwMDQxZWUsJGZmNmMyMTZlLCQwMDA4MDAwMAorCWRjLmwJJDIxNmUwMDBjLCQwMDA0MjE2ZSwkMDAxMDAwMDgsJDYxZmYwMDAwCisJZGMubAkkNGJlMDFkNDAsJGZmNGUxMjAwLCQwMmFlMDBmZiwkMDBmZmZmNjQKKwlkYy5sCSQ0MjgwMTAyZSwkZmY2MzRhMDEsJDY2MDg2MWZmLCQwMDAwMjY4ZQorCWRjLmwJJDYwMzAwYzAxLCQwMDAxNjYwOCwkNjFmZjAwMDAsJDUxNDY2MDIyCisJZGMubAkkMGMwMTAwMDIsJDY2MDg2MWZmLCQwMDAwNGM4YywkNjAxNDBjMDEKKwlkYy5sCSQwMDAzNjYwOCwkNjFmZjAwMDAsJDRlYjY2MDA2LCQ2MWZmMDAwMAorCWRjLmwJJDI2ZWM0Y2VlLCQwMzAzZmY5YywkZjIyZTk4MDAsJGZmNjBmMjJlCisJZGMubAkkZDA0MGZmZTgsJDRlNWU0ZTc1LCQ0ZTU2ZmY0MCwkNDhlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkYjgwMGZmNjAsJGYyMmVmMGMwLCRmZmRjZjIzYworCWRjLmwJJDkwMDAwMDAwLCQwMDAwZjIyZSwkNDQwMDAwMDgsJGYyMmU2ODAwCisJZGMubAkkZmY2YzQxZWUsJGZmNmM2MWZmLCQwMDAwNGI0NiwkMWQ0MGZmNGUKKwlkYy5sCSQxMjAwMDJhZSwkMDBmZjAwZmYsJGZmNjQ0MjgwLCQxMDJlZmY2MworCWRjLmwJJDRhMDE2NjA4LCQ2MWZmMDAwMCwkMmZiMDYwMzAsJDBjMDEwMDAxCisJZGMubAkkNjYwODYxZmYsJDAwMDA0ZmY0LCQ2MDIyMGMwMSwkMDAwMjY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNGJmMjYwMTQsJDBjMDEwMDAzLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA0ZTFjLCQ2MDA2NjFmZiwkMDAwMDJmOWEsJDRjZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJDk4MDBmZjYwLCRmMjJlZDA0MCwkZmZlODRlNWUKKwlkYy5sCSQ0ZTc1NGU1NiwkZmY0MDQ4ZWUsJDAzMDNmZjljLCRmMjJlYjgwMAorCWRjLmwJJGZmNjBmMjJlLCRmMGMwZmZkYywkZjIzYzkwMDAsJDAwMDAwMDAwCisJZGMubAkkZjIyZTU0MDAsJDAwMDhmMjJlLCQ2ODAwZmY2YywkNDFlZWZmNmMKKwlkYy5sCSQ2MWZmMDAwMCwkNGFhYzFkNDAsJGZmNGUxMjAwLCQwMmFlMDBmZgorCWRjLmwJJDAwZmZmZjY0LCQ0MjgwMTAyZSwkZmY2MzFkNDEsJGZmNGU0YTAxCisJZGMubAkkNjYwODYxZmYsJDAwMDAyZjEyLCQ2MDMwMGMwMSwkMDAwMTY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNGY1NjYwMjIsJDBjMDEwMDAyLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA0YjU0LCQ2MDE0MGMwMSwkMDAwMzY2MDgsJDYxZmYwMDAwCisJZGMubAkkNGQ3ZTYwMDYsJDYxZmYwMDAwLCQyZWZjNGNlZSwkMDMwM2ZmOWMKKwlkYy5sCSRmMjJlOTgwMCwkZmY2MGYyMmUsJGQwNDBmZmU4LCQ0ZTVlNGU3NQorCWRjLmwJJDRlNTZmZjQwLCQ0OGVlMDMwMywkZmY5Y2YyMmUsJGI4MDBmZjYwCisJZGMubAkkZjIyZWYwYzAsJGZmZGNmMjNjLCQ5MDAwMDAwMCwkMDAwMDQxZWUKKwlkYy5sCSRmZjZjMjE2ZSwkMDAwODAwMDAsJDIxNmUwMDBjLCQwMDA0MjE2ZQorCWRjLmwJJDAwMTAwMDA4LCQ2MWZmMDAwMCwkNGEwODFkNDAsJGZmNGUxMjAwCisJZGMubAkkMDJhZTAwZmYsJDAwZmZmZjY0LCQ0MjgwMTAyZSwkZmY2MzRhMDEKKwlkYy5sCSQ2NjA4NjFmZiwkMDAwMDJlNzIsJDYwMzAwYzAxLCQwMDAxNjYwOAorCWRjLmwJJDYxZmYwMDAwLCQ0ZWI2NjAyMiwkMGMwMTAwMDIsJDY2MDg2MWZmCisJZGMubAkkMDAwMDRhYjQsJDYwMTQwYzAxLCQwMDAzNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ0Y2RlNjAwNiwkNjFmZjAwMDAsJDJlNWM0Y2VlLCQwMzAzZmY5YworCWRjLmwJJGYyMmU5ODAwLCRmZjYwZjIyZSwkZDA0MGZmZTgsJDRlNWU0ZTc1CisJZGMubAkkNGU1NmZmNDAsJDQ4ZWUwMzAzLCRmZjljZjIyZSwkYjgwMGZmNjAKKwlkYy5sCSRmMjJlZjBjMCwkZmZkY2YyM2MsJDkwMDAwMDAwLCQwMDAwZjIyZQorCWRjLmwJJDQ0MDAwMDA4LCRmMjJlNjgwMCwkZmY2YzQxZWUsJGZmNmM2MWZmCisJZGMubAkkMDAwMDQ5NmUsJDFkNDBmZjRlLCQxMjAwMDJhZSwkMDBmZjAwZmYKKwlkYy5sCSRmZjY0NDI4MCwkMTAyZWZmNjMsJDRhMDE2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDJlMGM2MDMwLCQwYzAxMDAwMSwkNjYwODYxZmYsJDAwMDA0ZTFjCisJZGMubAkkNjAyMjBjMDEsJDAwMDI2NjA4LCQ2MWZmMDAwMCwkNGExYTYwMTQKKwlkYy5sCSQwYzAxMDAwMywkNjYwODYxZmYsJDAwMDA0YzQ0LCQ2MDA2NjFmZgorCWRjLmwJJDAwMDAyZTA4LCQ0Y2VlMDMwMywkZmY5Y2YyMmUsJDk4MDBmZjYwCisJZGMubAkkZjIyZWQwNDAsJGZmZTg0ZTVlLCQ0ZTc1NGU1NiwkZmY0MDQ4ZWUKKwlkYy5sCSQwMzAzZmY5YywkZjIyZWI4MDAsJGZmNjBmMjJlLCRmMGMwZmZkYworCWRjLmwJJGYyM2M5MDAwLCQwMDAwMDAwMCwkZjIyZTU0MDAsJDAwMDhmMjJlCisJZGMubAkkNjgwMGZmNmMsJDQxZWVmZjZjLCQ2MWZmMDAwMCwkNDhkNDFkNDAKKwlkYy5sCSRmZjRlMTIwMCwkMDJhZTAwZmYsJDAwZmZmZjY0LCQ0MjgwMTAyZQorCWRjLmwJJGZmNjMxZDQxLCRmZjRlNGEwMSwkNjYwODYxZmYsJDAwMDAyZDZlCisJZGMubAkkNjAzMDBjMDEsJDAwMDE2NjA4LCQ2MWZmMDAwMCwkNGQ3ZTYwMjIKKwlkYy5sCSQwYzAxMDAwMiwkNjYwODYxZmYsJDAwMDA0OTdjLCQ2MDE0MGMwMQorCWRjLmwJJDAwMDM2NjA4LCQ2MWZmMDAwMCwkNGJhNjYwMDYsJDYxZmYwMDAwCisJZGMubAkkMmQ2YTRjZWUsJDAzMDNmZjljLCRmMjJlOTgwMCwkZmY2MGYyMmUKKwlkYy5sCSRkMDQwZmZlOCwkNGU1ZTRlNzUsJDRlNTZmZjQwLCQ0OGVlMDMwMworCWRjLmwJJGZmOWNmMjJlLCRiODAwZmY2MCwkZjIyZWYwYzAsJGZmZGNmMjNjCisJZGMubAkkOTAwMDAwMDAsJDAwMDA0MWVlLCRmZjZjMjE2ZSwkMDAwODAwMDAKKwlkYy5sCSQyMTZlMDAwYywkMDAwNDIxNmUsJDAwMTAwMDA4LCQ2MWZmMDAwMAorCWRjLmwJJDQ4MzAxZDQwLCRmZjRlMTIwMCwkMDJhZTAwZmYsJDAwZmZmZjY0CisJZGMubAkkNDI4MDEwMmUsJGZmNjM0YTAxLCQ2NjA4NjFmZiwkMDAwMDJjY2UKKwlkYy5sCSQ2MDMwMGMwMSwkMDAwMTY2MDgsJDYxZmYwMDAwLCQ0Y2RlNjAyMgorCWRjLmwJJDBjMDEwMDAyLCQ2NjA4NjFmZiwkMDAwMDQ4ZGMsJDYwMTQwYzAxCisJZGMubAkkMDAwMzY2MDgsJDYxZmYwMDAwLCQ0YjA2NjAwNiwkNjFmZjAwMDAKKwlkYy5sCSQyY2NhNGNlZSwkMDMwM2ZmOWMsJGYyMmU5ODAwLCRmZjYwZjIyZQorCWRjLmwJJGQwNDBmZmU4LCQ0ZTVlNGU3NSwkNGU1NmZmNDAsJDQ4ZWUwMzAzCisJZGMubAkkZmY5Y2YyMmUsJGI4MDBmZjYwLCRmMjJlZjBjMCwkZmZkY2YyM2MKKwlkYy5sCSQ5MDAwMDAwMCwkMDAwMGYyMmUsJDQ0MDAwMDA4LCRmMjJlNjgwMAorCWRjLmwJJGZmNmM0MWVlLCRmZjZjNjFmZiwkMDAwMDQ3OTYsJDFkNDBmZjRlCisJZGMubAkkMTIwMDAyYWUsJDAwZmYwMGZmLCRmZjY0NDI4MCwkMTAyZWZmNjMKKwlkYy5sCSQ0YTAxNjYwOCwkNjFmZjAwMDAsJDBhZjQ2MDMwLCQwYzAxMDAwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwNGQxOCwkNjAyMjBjMDEsJDAwMDI2NjA4CisJZGMubAkkNjFmZjAwMDAsJDRkMzg2MDE0LCQwYzAxMDAwMywkNjYwODYxZmYKKwlkYy5sCSQwMDAwNGQzNCwkNjAwNjYxZmYsJDAwMDAwZDU4LCQ0Y2VlMDMwMworCWRjLmwJJGZmOWNmMjJlLCQ5ODAwZmY2MCwkZjIyN2UwMDMsJGYyMWZkMDQwCisJZGMubAkkZjIxZmQwODAsJDRlNWU0ZTc1LCQ0ZTU2ZmY0MCwkNDhlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkYjgwMGZmNjAsJGYyMmVmMGMwLCRmZmRjZjIzYworCWRjLmwJJDkwMDAwMDAwLCQwMDAwZjIyZSwkNTQwMDAwMDgsJGYyMmU2ODAwCisJZGMubAkkZmY2YzQxZWUsJGZmNmM2MWZmLCQwMDAwNDZmNiwkMWQ0MGZmNGUKKwlkYy5sCSQxMjAwMDJhZSwkMDBmZjAwZmYsJGZmNjQ0MjgwLCQxMDJlZmY2MworCWRjLmwJJDFkNDFmZjRlLCQ0YTAxNjYwOCwkNjFmZjAwMDAsJDBhNTA2MDMwCisJZGMubAkkMGMwMTAwMDEsJDY2MDg2MWZmLCQwMDAwNGM3NCwkNjAyMjBjMDEKKwlkYy5sCSQwMDAyNjYwOCwkNjFmZjAwMDAsJDRjOTQ2MDE0LCQwYzAxMDAwMworCWRjLmwJJDY2MDg2MWZmLCQwMDAwNGM5MCwkNjAwNjYxZmYsJDAwMDAwY2I0CisJZGMubAkkNGNlZTAzMDMsJGZmOWNmMjJlLCQ5ODAwZmY2MCwkZjIyN2UwMDMKKwlkYy5sCSRmMjFmZDA0MCwkZjIxZmQwODAsJDRlNWU0ZTc1LCQ0ZTU2ZmY0MAorCWRjLmwJJDQ4ZWUwMzAzLCRmZjljZjIyZSwkYjgwMGZmNjAsJGYyMmVmMGMwCisJZGMubAkkZmZkY2YyM2MsJDkwMDAwMDAwLCQwMDAwNDFlZSwkZmY2YzIxNmUKKwlkYy5sCSQwMDA4MDAwMCwkMjE2ZTAwMGMsJDAwMDQyMTZlLCQwMDEwMDAwOAorCWRjLmwJJDYxZmYwMDAwLCQ0NjRjMWQ0MCwkZmY0ZTEyMDAsJDAyYWUwMGZmCisJZGMubAkkMDBmZmZmNjQsJDQyODAxMDJlLCRmZjYzNGEwMSwkNjYwODYxZmYKKwlkYy5sCSQwMDAwMDlhYSwkNjAzMDBjMDEsJDAwMDE2NjA4LCQ2MWZmMDAwMAorCWRjLmwJJDRiY2U2MDIyLCQwYzAxMDAwMiwkNjYwODYxZmYsJDAwMDA0YmVlCisJZGMubAkkNjAxNDBjMDEsJDAwMDM2NjA4LCQ2MWZmMDAwMCwkNGJlYTYwMDYKKwlkYy5sCSQ2MWZmMDAwMCwkMGMwZTRjZWUsJDAzMDNmZjljLCRmMjJlOTgwMAorCWRjLmwJJGZmNjBmMjI3LCRlMDAzZjIxZiwkZDA0MGYyMWYsJGQwODA0ZTVlCisJZGMubAkkNGU3NTRlNTYsJGZmNDA0OGVlLCQwMzAzZmY5YywkZjIyZWI4MDAKKwlkYy5sCSRmZjYwZjIyZSwkZjBjMGZmZGMsJGYyM2M5MDAwLCQwMDAwMDAwMAorCWRjLmwJJGYyMmU0NDAwLCQwMDA4ZjIyZSwkNjgwMGZmNzgsJDQxZWVmZjc4CisJZGMubAkkNjFmZjAwMDAsJDQ1YWMxZDQwLCRmZjRmZjIyZSwkNDQwMDAwMGMKKwlkYy5sCSRmMjJlNjgwMCwkZmY2YzQxZWUsJGZmNmM2MWZmLCQwMDAwNDU5MgorCWRjLmwJJDFkNDBmZjRlLCQyMjAwMDJhZSwkMDBmZjAwZmYsJGZmNjQ0MjgwCisJZGMubAkkMTAyZWZmNjMsJDQxZWVmZjZjLCQ0M2VlZmY3OCwkNGEwMTY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNGM0NjYwMzAsJDBjMDEwMDAxLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA0YzY0LCQ2MDIyMGMwMSwkMDAwMjY2MDgsJDYxZmYwMDAwCisJZGMubAkkNGM4NDYwMTQsJDBjMDEwMDAzLCQ2NjA4NjFmZiwkMDAwMDRkMTYKKwlkYy5sCSQ2MDA2NjFmZiwkMDAwMDRjMTQsJDRjZWUwMzAzLCRmZjljZjIyZQorCWRjLmwJJDk4MDBmZjYwLCRmMjJlZDA0MCwkZmZlODRlNWUsJDRlNzU0ZTU2CisJZGMubAkkZmY0MDQ4ZWUsJDAzMDNmZjljLCRmMjJlYjgwMCwkZmY2MGYyMmUKKwlkYy5sCSRmMGMwZmZkYywkZjIzYzkwMDAsJDAwMDAwMDAwLCRmMjJlNTQwMAorCWRjLmwJJDAwMDhmMjJlLCQ2ODAwZmY3OCwkNDFlZWZmNzgsJDYxZmYwMDAwCisJZGMubAkkNDRmMDFkNDAsJGZmNGZmMjJlLCQ1NDAwMDAxMCwkZjIyZTY4MDAKKwlkYy5sCSRmZjZjNDFlZSwkZmY2YzYxZmYsJDAwMDA0NGQ2LCQxZDQwZmY0ZQorCWRjLmwJJDIyMDAwMmFlLCQwMGZmMDBmZiwkZmY2NDQyODAsJDEwMmVmZjYzCisJZGMubAkkNDFlZWZmNmMsJDQzZWVmZjc4LCQ0YTAxNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ0YjhhNjAzMCwkMGMwMTAwMDEsJDY2MDg2MWZmLCQwMDAwNGJhOAorCWRjLmwJJDYwMjIwYzAxLCQwMDAyNjYwOCwkNjFmZjAwMDAsJDRiYzg2MDE0CisJZGMubAkkMGMwMTAwMDMsJDY2MDg2MWZmLCQwMDAwNGM1YSwkNjAwNjYxZmYKKwlkYy5sCSQwMDAwNGI1OCwkNGNlZTAzMDMsJGZmOWNmMjJlLCQ5ODAwZmY2MAorCWRjLmwJJGYyMmVkMDQwLCRmZmU4NGU1ZSwkNGU3NTRlNTYsJGZmNDA0OGVlCisJZGMubAkkMDMwM2ZmOWMsJGYyMmViODAwLCRmZjYwZjIyZSwkZjBjMGZmZGMKKwlkYy5sCSRmMjNjOTAwMCwkMDAwMDAwMDAsJDQxZWVmZjc4LCQyMTZlMDAwOAorCWRjLmwJJDAwMDAyMTZlLCQwMDBjMDAwNCwkMjE2ZTAwMTAsJDAwMDg2MWZmCisJZGMubAkkMDAwMDQ0MmUsJDFkNDBmZjRmLCQ0MWVlZmY2YywkMjE2ZTAwMTQKKwlkYy5sCSQwMDAwMjE2ZSwkMDAxODAwMDQsJDIxNmUwMDFjLCQwMDA4NjFmZgorCWRjLmwJJDAwMDA0NDBlLCQxZDQwZmY0ZSwkMjIwMDAyYWUsJDAwZmYwMGZmCisJZGMubAkkZmY2NDQyODAsJDEwMmVmZjYzLCQ0MWVlZmY2YywkNDNlZWZmNzgKKwlkYy5sCSQ0YTAxNjYwOCwkNjFmZjAwMDAsJDRhYzI2MDMwLCQwYzAxMDAwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwNGFlMCwkNjAyMjBjMDEsJDAwMDI2NjA4CisJZGMubAkkNjFmZjAwMDAsJDRiMDA2MDE0LCQwYzAxMDAwMywkNjYwODYxZmYKKwlkYy5sCSQwMDAwNGI5MiwkNjAwNjYxZmYsJDAwMDA0YTkwLCQ0Y2VlMDMwMworCWRjLmwJJGZmOWNmMjJlLCQ5ODAwZmY2MCwkZjIyZWQwNDAsJGZmZTg0ZTVlCisJZGMubAkkNGU3NTRlNTYsJGZmNDA0OGVlLCQwMzAzZmY5YywkZjIyZWI4MDAKKwlkYy5sCSRmZjYwZjIyZSwkZjBjMGZmZGMsJGYyM2M5MDAwLCQwMDAwMDAwMAorCWRjLmwJJGYyMmU0NDAwLCQwMDA4ZjIyZSwkNjgwMGZmNzgsJDQxZWVmZjc4CisJZGMubAkkNjFmZjAwMDAsJDQzNmMxZDQwLCRmZjRmZjIyZSwkNDQwMDAwMGMKKwlkYy5sCSRmMjJlNjgwMCwkZmY2YzQxZWUsJGZmNmM2MWZmLCQwMDAwNDM1MgorCWRjLmwJJDFkNDBmZjRlLCQyMjAwMDJhZSwkMDBmZjAwZmYsJGZmNjQ0MjgwCisJZGMubAkkMTAyZWZmNjMsJDQxZWVmZjZjLCQ0M2VlZmY3OCwkNGEwMTY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNDkxYzYwMzAsJDBjMDEwMDAxLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA0OTNhLCQ2MDIyMGMwMSwkMDAwMjY2MDgsJDYxZmYwMDAwCisJZGMubAkkNDk1YTYwMTQsJDBjMDEwMDAzLCQ2NjA4NjFmZiwkMDAwMDRhZDYKKwlkYy5sCSQ2MDA2NjFmZiwkMDAwMDQ4ZWEsJDRjZWUwMzAzLCRmZjljZjIyZQorCWRjLmwJJDk4MDBmZjYwLCRmMjJlZDA0MCwkZmZlODRlNWUsJDRlNzU0ZTU2CisJZGMubAkkZmY0MDQ4ZWUsJDAzMDNmZjljLCRmMjJlYjgwMCwkZmY2MGYyMmUKKwlkYy5sCSRmMGMwZmZkYywkZjIzYzkwMDAsJDAwMDAwMDAwLCRmMjJlNTQwMAorCWRjLmwJJDAwMDhmMjJlLCQ2ODAwZmY3OCwkNDFlZWZmNzgsJDYxZmYwMDAwCisJZGMubAkkNDJiMDFkNDAsJGZmNGZmMjJlLCQ1NDAwMDAxMCwkZjIyZTY4MDAKKwlkYy5sCSRmZjZjNDFlZSwkZmY2YzYxZmYsJDAwMDA0Mjk2LCQxZDQwZmY0ZQorCWRjLmwJJDIyMDAwMmFlLCQwMGZmMDBmZiwkZmY2NDQyODAsJDEwMmVmZjYzCisJZGMubAkkNDFlZWZmNmMsJDQzZWVmZjc4LCQ0YTAxNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ0ODYwNjAzMCwkMGMwMTAwMDEsJDY2MDg2MWZmLCQwMDAwNDg3ZQorCWRjLmwJJDYwMjIwYzAxLCQwMDAyNjYwOCwkNjFmZjAwMDAsJDQ4OWU2MDE0CisJZGMubAkkMGMwMTAwMDMsJDY2MDg2MWZmLCQwMDAwNGExYSwkNjAwNjYxZmYKKwlkYy5sCSQwMDAwNDgyZSwkNGNlZTAzMDMsJGZmOWNmMjJlLCQ5ODAwZmY2MAorCWRjLmwJJGYyMmVkMDQwLCRmZmU4NGU1ZSwkNGU3NTRlNTYsJGZmNDA0OGVlCisJZGMubAkkMDMwM2ZmOWMsJGYyMmViODAwLCRmZjYwZjIyZSwkZjBjMGZmZGMKKwlkYy5sCSRmMjNjOTAwMCwkMDAwMDAwMDAsJDQxZWVmZjc4LCQyMTZlMDAwOAorCWRjLmwJJDAwMDAyMTZlLCQwMDBjMDAwNCwkMjE2ZTAwMTAsJDAwMDg2MWZmCisJZGMubAkkMDAwMDQxZWUsJDFkNDBmZjRmLCQ0MWVlZmY2YywkMjE2ZTAwMTQKKwlkYy5sCSQwMDAwMjE2ZSwkMDAxODAwMDQsJDIxNmUwMDFjLCQwMDA4NjFmZgorCWRjLmwJJDAwMDA0MWNlLCQxZDQwZmY0ZSwkMjIwMDAyYWUsJDAwZmYwMGZmCisJZGMubAkkZmY2NDQyODAsJDEwMmVmZjYzLCQ0MWVlZmY2YywkNDNlZWZmNzgKKwlkYy5sCSQ0YTAxNjYwOCwkNjFmZjAwMDAsJDQ3OTg2MDMwLCQwYzAxMDAwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwNDdiNiwkNjAyMjBjMDEsJDAwMDI2NjA4CisJZGMubAkkNjFmZjAwMDAsJDQ3ZDY2MDE0LCQwYzAxMDAwMywkNjYwODYxZmYKKwlkYy5sCSQwMDAwNDk1MiwkNjAwNjYxZmYsJDAwMDA0NzY2LCQ0Y2VlMDMwMworCWRjLmwJJGZmOWNmMjJlLCQ5ODAwZmY2MCwkZjIyZWQwNDAsJGZmZTg0ZTVlCisJZGMubAkkNGU3NTRlNTYsJGZmNDA0OGVlLCQwMzAzZmY5YywkZjIyZWI4MDAKKwlkYy5sCSRmZjYwZjIyZSwkZjBjMGZmZGMsJGYyM2M5MDAwLCQwMDAwMDAwMAorCWRjLmwJJGYyMmU0NDAwLCQwMDA4ZjIyZSwkNjgwMGZmNzgsJDQxZWVmZjc4CisJZGMubAkkNjFmZjAwMDAsJDQxMmMxZDQwLCRmZjRmZjIyZSwkNDQwMDAwMGMKKwlkYy5sCSRmMjJlNjgwMCwkZmY2YzQxZWUsJGZmNmM2MWZmLCQwMDAwNDExMgorCWRjLmwJJDFkNDBmZjRlLCQyMjAwMDJhZSwkMDBmZjAwZmYsJGZmNjQ0MjgwCisJZGMubAkkMTAyZWZmNjMsJDQxZWVmZjZjLCQ0M2VlZmY3OCwkNGEwMTY2MDgKKwlkYy5sCSQ2MWZmMDAwMCwkNDg0YTYwMzAsJDBjMDEwMDAxLCQ2NjA4NjFmZgorCWRjLmwJJDAwMDA0ODZhLCQ2MDIyMGMwMSwkMDAwMjY2MDgsJDYxZmYwMDAwCisJZGMubAkkNDg4YTYwMTQsJDBjMDEwMDAzLCQ2NjA4NjFmZiwkMDAwMDQ4OTYKKwlkYy5sCSQ2MDA2NjFmZiwkMDAwMDQ4MTgsJDRjZWUwMzAzLCRmZjljZjIyZQorCWRjLmwJJDk4MDBmZjYwLCRmMjJlZDA0MCwkZmZlODRlNWUsJDRlNzU0ZTU2CisJZGMubAkkZmY0MDQ4ZWUsJDAzMDNmZjljLCRmMjJlYjgwMCwkZmY2MGYyMmUKKwlkYy5sCSRmMGMwZmZkYywkZjIzYzkwMDAsJDAwMDAwMDAwLCRmMjJlNTQwMAorCWRjLmwJJDAwMDhmMjJlLCQ2ODAwZmY3OCwkNDFlZWZmNzgsJDYxZmYwMDAwCisJZGMubAkkNDA3MDFkNDAsJGZmNGZmMjJlLCQ1NDAwMDAxMCwkZjIyZTY4MDAKKwlkYy5sCSRmZjZjNDFlZSwkZmY2YzYxZmYsJDAwMDA0MDU2LCQxZDQwZmY0ZQorCWRjLmwJJDIyMDAwMmFlLCQwMGZmMDBmZiwkZmY2NDQyODAsJDEwMmVmZjYzCisJZGMubAkkNDFlZWZmNmMsJDQzZWVmZjc4LCQ0YTAxNjYwOCwkNjFmZjAwMDAKKwlkYy5sCSQ0NzhlNjAzMCwkMGMwMTAwMDEsJDY2MDg2MWZmLCQwMDAwNDdhZQorCWRjLmwJJDYwMjIwYzAxLCQwMDAyNjYwOCwkNjFmZjAwMDAsJDQ3Y2U2MDE0CisJZGMubAkkMGMwMTAwMDMsJDY2MDg2MWZmLCQwMDAwNDdkYSwkNjAwNjYxZmYKKwlkYy5sCSQwMDAwNDc1YywkNGNlZTAzMDMsJGZmOWNmMjJlLCQ5ODAwZmY2MAorCWRjLmwJJGYyMmVkMDQwLCRmZmU4NGU1ZSwkNGU3NTRlNTYsJGZmNDA0OGVlCisJZGMubAkkMDMwM2ZmOWMsJGYyMmViODAwLCRmZjYwZjIyZSwkZjBjMGZmZGMKKwlkYy5sCSRmMjNjOTAwMCwkMDAwMDAwMDAsJDQxZWVmZjc4LCQyMTZlMDAwOAorCWRjLmwJJDAwMDAyMTZlLCQwMDBjMDAwNCwkMjE2ZTAwMTAsJDAwMDg2MWZmCisJZGMubAkkMDAwMDNmYWUsJDFkNDBmZjRmLCQ0MWVlZmY2YywkMjE2ZTAwMTQKKwlkYy5sCSQwMDAwMjE2ZSwkMDAxODAwMDQsJDIxNmUwMDFjLCQwMDA4NjFmZgorCWRjLmwJJDAwMDAzZjhlLCQxZDQwZmY0ZSwkMjIwMDAyYWUsJDAwZmYwMGZmCisJZGMubAkkZmY2NDQyODAsJDEwMmVmZjYzLCQ0MWVlZmY2YywkNDNlZWZmNzgKKwlkYy5sCSQ0YTAxNjYwOCwkNjFmZjAwMDAsJDQ2YzY2MDMwLCQwYzAxMDAwMQorCWRjLmwJJDY2MDg2MWZmLCQwMDAwNDZlNiwkNjAyMjBjMDEsJDAwMDI2NjA4CisJZGMubAkkNjFmZjAwMDAsJDQ3MDY2MDE0LCQwYzAxMDAwMywkNjYwODYxZmYKKwlkYy5sCSQwMDAwNDcxMiwkNjAwNjYxZmYsJDAwMDA0Njk0LCQ0Y2VlMDMwMworCWRjLmwJJGZmOWNmMjJlLCQ5ODAwZmY2MCwkZjIyZWQwNDAsJGZmZTg0ZTVlCisJZGMubAkkNGU3NWJkNmEsJGFhNzdjY2M5LCQ5NGY1M2RlNiwkMTIwOTdhYWUKKwlkYy5sCSQ4ZGExYmU1YSwkZTY0NTJhMTEsJDhhZTQzZWM3LCQxZGUzYTUzNAorCWRjLmwJJDE1MzFiZjJhLCQwMWEwMWEwMSwkOGI1OTAwMDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDNmZjgsJDAwMDA4ODg4LCQ4ODg4ODg4OCwkNTlhZjAwMDAKKwlkYy5sCSQwMDAwYmZmYywkMDAwMGFhYWEsJGFhYWFhYWFhLCRhYTk5MDAwMAorCWRjLmwJJDAwMDAzZDJhLCRjNGQwZDYwMSwkMWVlM2JkYTksJDM5NmY5ZjQ1CisJZGMubAkkYWMxOTNlMjEsJGVlZDkwNjEyLCRjOTcyYmU5MiwkN2U0ZmI3OWQKKwlkYy5sCSQ5ZmNmM2VmYSwkMDFhMDFhMDEsJGQ0MjMwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDBiZmY1LCQwMDAwYjYwYiwkNjBiNjBiNjEsJGQ0MzgwMDAwCisJZGMubAkkMDAwMDNmZmEsJDAwMDBhYWFhLCRhYWFhYWFhYSwkYWI1ZWJmMDAKKwlkYy5sCSQwMDAwMmQ3YywkMDAwMDAwMDAsJGZmNWM2MDA4LCQyZDdjMDAwMAorCWRjLmwJJDAwMDFmZjVjLCRmMjEwNDgwMCwkZjIyZTY4MDAsJGZmODQyMjEwCisJZGMubAkkMzIyODAwMDQsJDAyODE3ZmZmLCRmZmZmMGM4MSwkM2ZkNzgwMDAKKwlkYy5sCSQ2YzA0NjAwMCwkMDE3ODBjODEsJDQwMDRiYzdlLCQ2ZDA0NjAwMAorCWRjLmwJJDA0NjhmMjAwLCQwMDgwZjIzYSwkNTRhM2QxODYsJDQzZmIwMTcwCisJZGMubAkkMDAwMDA4NjYsJGYyMmU2MDgwLCRmZjU4MjIyZSwkZmY1OGU5ODEKKwlkYy5sCSRkM2MxZjIxOSwkNDgyOGYyMTEsJDQ0MjgyMjJlLCRmZjU4ZDJhZQorCWRjLmwJJGZmNWNlMjk5LCQwYzgxMDAwMCwkMDAwMDZkMDAsJDAwODhmMjI3CisJZGMubAkkZTAwY2YyMmUsJDY4MDBmZjg0LCRmMjAwMDAyMywkZjIzYTU1ODAKKwlkYy5sCSRmZWQyZjIzYSwkNTUwMGZlZDQsJGYyMDAwMDgwLCRmMjAwMDRhMworCWRjLmwJJGUyOTkwMjgxLCQ4MDAwMDAwMCwkYjNhZWZmODQsJGYyMDAwNWEzCisJZGMubAkkZjIwMDA1MjMsJGYyM2E1NWEyLCRmZWJhZjIzYSwkNTUyMmZlYmMKKwlkYy5sCSRmMjAwMDVhMywkZjIwMDA1MjMsJGYyM2E1NWEyLCRmZWI2ZjIzYQorCWRjLmwJJDQ5MjJmZWMwLCRmMjAwMGNhMywkZjIwMDAxMjMsJGYyM2E0OGEyCisJZGMubAkkZmVjMmYyMmUsJDQ4MjNmZjg0LCRmMjAwMDhhMiwkZjIwMDA0MjMKKwlkYy5sCSRmMjFmZDAzMCwkZjIwMDkwMDAsJGYyMmU0ODIyLCRmZjg0NjBmZgorCWRjLmwJJDAwMDA0MDA2LCRmMjI3ZTAwYywkZjIwMDAwMjMsJGYyM2E1NTAwCisJZGMubAkkZmVhMmYyM2EsJDU1ODBmZWE0LCRmMjAwMDA4MCwkZjIwMDA0YTMKKwlkYy5sCSRmMjJlNjgwMCwkZmY4NGUyOTksJDAyODE4MDAwLCQwMDAwZjIwMAorCWRjLmwJJDA1MjNiM2FlLCRmZjg0MDI4MSwkODAwMDAwMDAsJGYyMDAwNWEzCisJZGMubAkkMDA4MTNmODAsJDAwMDAyZDQxLCRmZjU0ZjIzYSwkNTUyMmZlNzQKKwlkYy5sCSRmMjNhNTVhMiwkZmU3NmYyMDAsJDA1MjNmMjAwLCQwNWEzZjIzYQorCWRjLmwJJDU1MjJmZTcwLCRmMjNhNDlhMiwkZmU3YWYyMDAsJDA1MjNmMjAwCisJZGMubAkkMGNhM2YyM2EsJDQ5MjJmZTdjLCRmMjNhNDRhMiwkZmU4MmYyMDAKKwlkYy5sCSQwODIzZjIwMCwkMDQyMmYyMmUsJDQ4MjNmZjg0LCRmMjFmZDAzMAorCWRjLmwJJGYyMDA5MDAwLCRmMjJlNDQyMiwkZmY1NDYwZmYsJDAwMDAzZjZhCisJZGMubAkkMGM4MTNmZmYsJDgwMDA2ZWZmLCQwMDAwMDMwMCwkMjIyZWZmNWMKKwlkYy5sCSQwYzgxMDAwMCwkMDAwMDZlMTQsJGYyMDA5MDAwLCQxMjNjMDAwMworCWRjLmwJJGYyMmU0ODAwLCRmZjg0NjBmZiwkMDAwMDNmMzYsJGYyM2M0NDAwCisJZGMubAkkM2Y4MDAwMDAsJGYyMDA5MDAwLCRmMjNjNDQyMiwkODA4MDAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkM2YyYzYwZmYsJDAwMDAzZjY0LCRmMjNjNDQwMAorCWRjLmwJJDNmODAwMDAwLCQ2MGZmMDAwMCwkM2YxODJkN2MsJDAwMDAwMDA0CisJZGMubAkkZmY1Y2YyMTAsJDQ4MDBmMjJlLCQ2ODAwZmY4NCwkMjIxMDMyMjgKKwlkYy5sCSQwMDA0MDI4MSwkN2ZmZmZmZmYsJDBjODEzZmQ3LCQ4MDAwNmMwNAorCWRjLmwJJDYwMDAwMjQwLCQwYzgxNDAwNCwkYmM3ZTZkMDQsJDYwMDAwMjdhCisJZGMubAkkZjIwMDAwODAsJGYyM2E1NGEzLCRjZjk4NDNmYiwkMDE3MDAwMDAKKwlkYy5sCSQwNjc4ZjIyZSwkNjA4MGZmNTgsJDIyMmVmZjU4LCRlOTgxZDNjMQorCWRjLmwJJGYyMTk0ODI4LCRmMjExNDQyOCwkMjIyZWZmNTgsJGUyOTkwYzgxCisJZGMubAkkMDAwMDAwMDAsJDZjMDAwMTA2LCRmMjI3ZTAwNCwkZjIyZTY4MDAKKwlkYy5sCSRmZjg0ZjIwMCwkMDAyM2YyM2EsJDU0ODBmY2U4LCRmMjNhNTUwMAorCWRjLmwJJGZkMzJmMjAwLCQwMGEzZjIwMCwkMDEyMzJmMDIsJDI0MDFlMjlhCisJZGMubAkkMDI4MjgwMDAsJDAwMDBiMzgyLCQwMjgyODAwMCwkMDAwMGYyM2EKKwlkYy5sCSQ1NGEyZmNjOCwkZjIzYTU1MjIsJGZkMTJmMjAwLCQwMGEzYjVhZQorCWRjLmwJJGZmODQyNDFmLCRmMjAwMDEyMywkZTI5OTAyODEsJDgwMDAwMDAwCisJZGMubAkkMmQ3YzNmODAsJDAwMDBmZjU0LCRiM2FlZmY1NCwkZjIzYTU0YTIKKwlkYy5sCSRmY2EyZjIzYSwkNTUyMmZjZWMsJGYyMDAwMGEzLCRmMjAwMDEyMworCWRjLmwJJGYyMmU2ODAwLCRmZjkwZjIzYSwkNTRhMmZjOTAsJGIzYWVmZjkwCisJZGMubAkkZjIzYTU1MjIsJGZjZDZmMjAwLCQwMGEzZjIwMCwkMDEyM2YyM2EKKwlkYy5sCSQ1NGEyZmM4MCwkZjIzYTU1MjIsJGZjY2FmMjAwLCQwMGEzZjIwMAorCWRjLmwJJDAxMjNmMjNhLCQ0OGEyZmM3YywkZjIzYTQ5MjIsJGZjYzZmMjAwCisJZGMubAkkMDBhM2YyMDAsJDAxMjNmMjNhLCQ0OGEyZmM3OCwkZjIzYTQ5MjIKKwlkYy5sCSRmY2MyZjIwMCwkMDBhM2YyMDAsJDA4MjNmMjJlLCQ0OGEzZmY4NAorCWRjLmwJJGYyM2E0NDIyLCRmY2JhZjIyZSwkNDgyM2ZmOTAsJGYyMWZkMDIwCisJZGMubAkkZjIwMDkwMDAsJGYyMmU0OGEyLCRmZjg0NjFmZiwkMDAwMDNlMjIKKwlkYy5sCSRmMjJlNDQyMiwkZmY1NDYwZmYsJDAwMDAzZDllLCRmMjI3ZTAwNAorCWRjLmwJJGYyMmU2ODAwLCRmZjg0ZjIwMCwkMDAyM2YyM2EsJDU0ODBmYzM0CisJZGMubAkkZjIzYTU1MDAsJGZiZGVmMjAwLCQwMGEzZjIyZSwkNjgwMGZmOTAKKwlkYy5sCSRmMjAwMDEyMywkZTI5OTAyODEsJDgwMDAwMDAwLCRmMjNhNTRhMgorCWRjLmwJJGZjMWFmMjNhLCQ1NTIyZmJjNCwkYjNhZWZmODQsJGIzYWVmZjkwCisJZGMubAkkZjIwMDAwYTMsJDAwODEzZjgwLCQwMDAwMmQ0MSwkZmY1NGYyMDAKKwlkYy5sCSQwMTIzZjIzYSwkNTRhMmZiZmMsJGYyM2E1NTIyLCRmYmE2ZjIwMAorCWRjLmwJJDAwYTNmMjAwLCQwMTIzZjIzYSwkNTRhMmZiZjAsJGYyM2E1NTIyCisJZGMubAkkZmI5YWYyMDAsJDAwYTNmMjAwLCQwMTIzZjIzYSwkNTRhMmZiZTQKKwlkYy5sCSRmMjNhNTUyMiwkZmI4ZWYyMDAsJDAwYTNmMjAwLCQwMTIzZjIzYQorCWRjLmwJJDQ4YTJmYmUwLCRmMjNhNDkyMiwkZmI4YWYyMDAsJDAwYTNmMjAwCisJZGMubAkkMDEyM2YyM2EsJDQ4YTJmYmRjLCRmMjNhNDkyMiwkZmI4NmYyMDAKKwlkYy5sCSQwMGEzZjIwMCwkMDgyM2YyM2EsJDQ0YTJmYmQ0LCRmMjJlNDgyMworCWRjLmwJJGZmODRmMjJlLCQ0OGEzZmY5MCwkZjIxZmQwMjAsJGYyMDA5MDAwCisJZGMubAkkZjIyZTQ0YTIsJGZmNTQ2MWZmLCQwMDAwM2QzNiwkZjIyZTQ4MjIKKwlkYy5sCSRmZjg0NjBmZiwkMDAwMDNjYjIsJDBjODEzZmZmLCQ4MDAwNmUwMAorCWRjLmwJJDAwNDhmMjNjLCQ0NDgwM2Y4MCwkMDAwMGYyMDAsJDkwMDBmMjNjCisJZGMubAkkNDRhODAwODAsJDAwMDA2MWZmLCQwMDAwM2QwNiwkZjIwMGIwMDAKKwlkYy5sCSQxMjNjMDAwMywkZjIyZTQ4MDAsJGZmODQ2MGZmLCQwMDAwM2M3MgorCWRjLmwJJDJmMDBmMjNjLCQ0NDgwM2Y4MCwkMDAwMDYxZmYsJDAwMDAzY2UyCisJZGMubAkkMjAxZjYwZmYsJDAwMDAzY2E4LCRmMjI3ZTAzYywkMmYwMmYyM2MKKwlkYy5sCSQ0NDgwMDAwMCwkMDAwMDBjODEsJDdmZmVmZmZmLCQ2NjUyM2Q3YworCWRjLmwJJDdmZmVmZjg0LCQyZDdjYzkwZiwkZGFhMmZmODgsJDQyYWVmZjhjCisJZGMubAkkM2Q3YzdmZGMsJGZmOTAyZDdjLCQ4NWEzMDhkMywkZmY5NDQyYWUKKwlkYy5sCSRmZjk4ZjIwMCwkMDAzYWYyOTQsJDAwMGUwMDJlLCQwMDgwZmY4NAorCWRjLmwJJDAwMmUwMDgwLCRmZjkwZjIyZSwkNDgyMmZmODQsJGYyMDAwMDgwCisJZGMubAkkZjIyZTQ4MjIsJGZmOTBmMjAwLCQwMGE4ZjIyZSwkNDhhMmZmOTAKKwlkYy5sCSRmMjJlNjgwMCwkZmY4NDMyMmUsJGZmODQyMjQxLCQwMjgxMDAwMAorCWRjLmwJJDdmZmYwNDgxLCQwMDAwM2ZmZiwkMGM4MTAwMDAsJDAwMWM2ZjBlCisJZGMubAkkMDQ4MTAwMDAsJDAwMWIxZDdjLCQwMDAwZmY1OCwkNjAwODQyODEKKwlkYy5sCSQxZDdjMDAwMSwkZmY1ODI0M2MsJDAwMDAzZmZlLCQ5NDgxMmQ3YworCWRjLmwJJGEyZjk4MzZlLCRmZjg4MmQ3YywkNGU0NDE1MmEsJGZmOGMzZDQyCisJZGMubAkkZmY4NGYyMDAsJDAxMDBmMjJlLCQ0OTIzZmY4NCwkMjQwOTQ4NDIKKwlkYy5sCSQwMjgyODAwMCwkMDAwMDAwODIsJDVmMDAwMDAwLCQyZDQyZmY1NAorCWRjLmwJJGYyMmU0NTIyLCRmZjU0ZjIyZSwkNDUyOGZmNTQsJDI0MDEwNjgyCisJZGMubAkkMDAwMDNmZmYsJDNkNDJmZjg0LCQyZDdjYzkwZiwkZGFhMmZmODgKKwlkYy5sCSQ0MmFlZmY4YywkMDY4MTAwMDAsJDNmZGQzZDQxLCRmZjkwMmQ3YworCWRjLmwJJDg1YTMwOGQzLCRmZjk0NDJhZSwkZmY5ODEyMmUsJGZmNThmMjAwCisJZGMubAkkMGEwMGYyMmUsJDRhMjNmZjg0LCRmMjAwMGE4MCwkZjIyZTRhYTMKKwlkYy5sCSRmZjkwZjIwMCwkMTE4MGYyMDAsJDE1YTJmMjAwLCQwZTI4ZjIwMAorCWRjLmwJJDBjMjhmMjAwLCQxNjIyZjIwMCwkMDE4MGYyMDAsJDEwYThmMjAwCisJZGMubAkkMDQyMjBjMDEsJDAwMDA2ZTAwLCQwMDBlZjIwMCwkMDFhOGYyMDAKKwlkYy5sCSQwY2EyNjAwMCwkZmYwY2YyMmUsJDYxMDBmZjU4LCQyNDFmZjIxZgorCWRjLmwJJGQwM2MyMjJlLCRmZjVjMGM4MSwkMDAwMDAwMDQsJDZkMDBmYTRjCisJZGMubAkkNjAwMGZjMzYsJDNlYTBiNzU5LCRmNTBmODY4OCwkYmVmMmJhYTUKKwlkYy5sCSRhODkyNGYwNCwkYmYzNDZmNTksJGIzOWJhNjVmLCQwMDAwMDAwMAorCWRjLmwJJDAwMDAwMDAwLCQzZmY2MDAwMCwkZTA3M2QzZmMsJDE5OWM0YTAwCisJZGMubAkkMDAwMDAwMDAsJDNmZjkwMDAwLCRkMjNjZDY4NCwkMTVkOTVmYTEKKwlkYy5sCSQwMDAwMDAwMCwkYmZmYzAwMDAsJDg4OTVhNmM1LCRmYjQyM2JjYQorCWRjLmwJJDAwMDAwMDAwLCRiZmZkMDAwMCwkZWVmNTdlMGQsJGE4NGJjOGNlCisJZGMubAkkMDAwMDAwMDAsJDNmZmMwMDAwLCRhMmY5ODM2ZSwkNGU0NDE1MmEKKwlkYy5sCSQwMDAwMDAwMCwkNDAwMTAwMDAsJGM5MGZkYWEyLCQwMDAwMDAwMAorCWRjLmwJJDAwMDAwMDAwLCQzZmRmMDAwMCwkODVhMzA4ZDQsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJGMwMDQwMDAwLCRjOTBmZGFhMiwkMjE2OGMyMzUKKwlkYy5sCSQyMTgwMDAwMCwkYzAwNDAwMDAsJGMyYzc1YmNkLCQxMDVkN2MyMworCWRjLmwJJGEwZDAwMDAwLCRjMDA0MDAwMCwkYmM3ZWRjZjcsJGZmNTIzNjExCisJZGMubAkkYTFlODAwMDAsJGMwMDQwMDAwLCRiNjM2NWUyMiwkZWU0NmYwMDAKKwlkYy5sCSQyMTQ4MDAwMCwkYzAwNDAwMDAsJGFmZWRkZjRkLCRkZDNiYTllZQorCWRjLmwJJGExMjAwMDAwLCRjMDA0MDAwMCwkYTlhNTYwNzgsJGNjMzA2M2RkCisJZGMubAkkMjFmYzAwMDAsJGMwMDQwMDAwLCRhMzVjZTFhMywkYmIyNTFkY2IKKwlkYy5sCSQyMTEwMDAwMCwkYzAwNDAwMDAsJDlkMTQ2MmNlLCRhYTE5ZDdiOQorCWRjLmwJJGExNTgwMDAwLCRjMDA0MDAwMCwkOTZjYmUzZjksJDk5MGU5MWE4CisJZGMubAkkMjFlMDAwMDAsJGMwMDQwMDAwLCQ5MDgzNjUyNCwkODgwMzRiOTYKKwlkYy5sCSQyMGIwMDAwMCwkYzAwNDAwMDAsJDhhM2FlNjRmLCQ3NmY4MDU4NAorCWRjLmwJJGExODgwMDAwLCRjMDA0MDAwMCwkODNmMjY3N2EsJDY1ZWNiZjczCisJZGMubAkkMjFjNDAwMDAsJGMwMDMwMDAwLCRmYjUzZDE0YSwkYTljMmYyYzIKKwlkYy5sCSQyMDAwMDAwMCwkYzAwMzAwMDAsJGVlYzJkM2EwLCQ4N2FjNjY5ZgorCWRjLmwJJDIxMzgwMDAwLCRjMDAzMDAwMCwkZTIzMWQ1ZjYsJDY1OTVkYTdiCisJZGMubAkkYTEzMDAwMDAsJGMwMDMwMDAwLCRkNWEwZDg0YywkNDM3ZjRlNTgKKwlkYy5sCSQ5ZmMwMDAwMCwkYzAwMzAwMDAsJGM5MGZkYWEyLCQyMTY4YzIzNQorCWRjLmwJJDIxMDAwMDAwLCRjMDAzMDAwMCwkYmM3ZWRjZjcsJGZmNTIzNjExCisJZGMubAkkYTE2ODAwMDAsJGMwMDMwMDAwLCRhZmVkZGY0ZCwkZGQzYmE5ZWUKKwlkYy5sCSRhMGEwMDAwMCwkYzAwMzAwMDAsJGEzNWNlMWEzLCRiYjI1MWRjYgorCWRjLmwJJDIwOTAwMDAwLCRjMDAzMDAwMCwkOTZjYmUzZjksJDk5MGU5MWE4CisJZGMubAkkMjE2MDAwMDAsJGMwMDMwMDAwLCQ4YTNhZTY0ZiwkNzZmODA1ODQKKwlkYy5sCSRhMTA4MDAwMCwkYzAwMjAwMDAsJGZiNTNkMTRhLCRhOWMyZjJjMgorCWRjLmwJJDFmODAwMDAwLCRjMDAyMDAwMCwkZTIzMWQ1ZjYsJDY1OTVkYTdiCisJZGMubAkkYTBiMDAwMDAsJGMwMDIwMDAwLCRjOTBmZGFhMiwkMjE2OGMyMzUKKwlkYy5sCSQyMDgwMDAwMCwkYzAwMjAwMDAsJGFmZWRkZjRkLCRkZDNiYTllZQorCWRjLmwJJGEwMjAwMDAwLCRjMDAyMDAwMCwkOTZjYmUzZjksJDk5MGU5MWE4CisJZGMubAkkMjBlMDAwMDAsJGMwMDEwMDAwLCRmYjUzZDE0YSwkYTljMmYyYzIKKwlkYy5sCSQxZjAwMDAwMCwkYzAwMTAwMDAsJGM5MGZkYWEyLCQyMTY4YzIzNQorCWRjLmwJJDIwMDAwMDAwLCRjMDAxMDAwMCwkOTZjYmUzZjksJDk5MGU5MWE4CisJZGMubAkkMjA2MDAwMDAsJGMwMDAwMDAwLCRjOTBmZGFhMiwkMjE2OGMyMzUKKwlkYy5sCSQxZjgwMDAwMCwkYmZmZjAwMDAsJGM5MGZkYWEyLCQyMTY4YzIzNQorCWRjLmwJJDFmMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDNmZmYwMDAwLCRjOTBmZGFhMiwkMjE2OGMyMzUKKwlkYy5sCSQ5ZjAwMDAwMCwkNDAwMDAwMDAsJGM5MGZkYWEyLCQyMTY4YzIzNQorCWRjLmwJJDlmODAwMDAwLCQ0MDAxMDAwMCwkOTZjYmUzZjksJDk5MGU5MWE4CisJZGMubAkkYTA2MDAwMDAsJDQwMDEwMDAwLCRjOTBmZGFhMiwkMjE2OGMyMzUKKwlkYy5sCSRhMDAwMDAwMCwkNDAwMTAwMDAsJGZiNTNkMTRhLCRhOWMyZjJjMgorCWRjLmwJJDlmMDAwMDAwLCQ0MDAyMDAwMCwkOTZjYmUzZjksJDk5MGU5MWE4CisJZGMubAkkYTBlMDAwMDAsJDQwMDIwMDAwLCRhZmVkZGY0ZCwkZGQzYmE5ZWUKKwlkYy5sCSQyMDIwMDAwMCwkNDAwMjAwMDAsJGM5MGZkYWEyLCQyMTY4YzIzNQorCWRjLmwJJGEwODAwMDAwLCQ0MDAyMDAwMCwkZTIzMWQ1ZjYsJDY1OTVkYTdiCisJZGMubAkkMjBiMDAwMDAsJDQwMDIwMDAwLCRmYjUzZDE0YSwkYTljMmYyYzIKKwlkYy5sCSQ5ZjgwMDAwMCwkNDAwMzAwMDAsJDhhM2FlNjRmLCQ3NmY4MDU4NAorCWRjLmwJJDIxMDgwMDAwLCQ0MDAzMDAwMCwkOTZjYmUzZjksJDk5MGU5MWE4CisJZGMubAkkYTE2MDAwMDAsJDQwMDMwMDAwLCRhMzVjZTFhMywkYmIyNTFkY2IKKwlkYy5sCSRhMDkwMDAwMCwkNDAwMzAwMDAsJGFmZWRkZjRkLCRkZDNiYTllZQorCWRjLmwJJDIwYTAwMDAwLCQ0MDAzMDAwMCwkYmM3ZWRjZjcsJGZmNTIzNjExCisJZGMubAkkMjE2ODAwMDAsJDQwMDMwMDAwLCRjOTBmZGFhMiwkMjE2OGMyMzUKKwlkYy5sCSRhMTAwMDAwMCwkNDAwMzAwMDAsJGQ1YTBkODRjLCQ0MzdmNGU1OAorCWRjLmwJJDFmYzAwMDAwLCQ0MDAzMDAwMCwkZTIzMWQ1ZjYsJDY1OTVkYTdiCisJZGMubAkkMjEzMDAwMDAsJDQwMDMwMDAwLCRlZWMyZDNhMCwkODdhYzY2OWYKKwlkYy5sCSRhMTM4MDAwMCwkNDAwMzAwMDAsJGZiNTNkMTRhLCRhOWMyZjJjMgorCWRjLmwJJGEwMDAwMDAwLCQ0MDA0MDAwMCwkODNmMjY3N2EsJDY1ZWNiZjczCisJZGMubAkkYTFjNDAwMDAsJDQwMDQwMDAwLCQ4YTNhZTY0ZiwkNzZmODA1ODQKKwlkYy5sCSQyMTg4MDAwMCwkNDAwNDAwMDAsJDkwODM2NTI0LCQ4ODAzNGI5NgorCWRjLmwJJGEwYjAwMDAwLCQ0MDA0MDAwMCwkOTZjYmUzZjksJDk5MGU5MWE4CisJZGMubAkkYTFlMDAwMDAsJDQwMDQwMDAwLCQ5ZDE0NjJjZSwkYWExOWQ3YjkKKwlkYy5sCSQyMTU4MDAwMCwkNDAwNDAwMDAsJGEzNWNlMWEzLCRiYjI1MWRjYgorCWRjLmwJJGExMTAwMDAwLCQ0MDA0MDAwMCwkYTlhNTYwNzgsJGNjMzA2M2RkCisJZGMubAkkYTFmYzAwMDAsJDQwMDQwMDAwLCRhZmVkZGY0ZCwkZGQzYmE5ZWUKKwlkYy5sCSQyMTIwMDAwMCwkNDAwNDAwMDAsJGI2MzY1ZTIyLCRlZTQ2ZjAwMAorCWRjLmwJJGExNDgwMDAwLCQ0MDA0MDAwMCwkYmM3ZWRjZjcsJGZmNTIzNjExCisJZGMubAkkMjFlODAwMDAsJDQwMDQwMDAwLCRjMmM3NWJjZCwkMTA1ZDdjMjMKKwlkYy5sCSQyMGQwMDAwMCwkNDAwNDAwMDAsJGM5MGZkYWEyLCQyMTY4YzIzNQorCWRjLmwJJGExODAwMDAwLCRmMjEwNDgwMCwkMjIxMDMyMjgsJDAwMDQwMjgxCisJZGMubAkkN2ZmZmZmZmYsJDBjODEzZmQ3LCQ4MDAwNmMwNCwkNjAwMDAxMzQKKwlkYy5sCSQwYzgxNDAwNCwkYmM3ZTZkMDQsJDYwMDAwMTQ0LCRmMjAwMDA4MAorCWRjLmwJJGYyM2E1NGEzLCRjNmRjNDNmYSwkZmRiY2YyMDEsJDYwODBlOTgxCisJZGMubAkkZDNjMWYyMTksJDQ4MjhmMjExLCQ0NDI4ZWE5OSwkMDI4MTgwMDAKKwlkYy5sCSQwMDAwZjIyNywkZTAwYzBjODEsJDAwMDAwMDAwLCQ2ZDAwMDA3MgorCWRjLmwJJGYyMDAwMDgwLCRmMjAwMDRhMywkZjIzYTU1ODAsJGZhZjhmMjNhCisJZGMubAkkNTUwMGZhZmEsJGYyMDAwNWEzLCRmMjAwMDUyMywkZjIzYTU1YTIKKwlkYy5sCSRmYWY0ZjIzYSwkNDkyMmZhZmUsJGYyMDAwNWEzLCRmMjAwMDUyMworCWRjLmwJJGYyM2E0OWEyLCRmYjAwZjIzYSwkNDkyMmZiMGEsJGYyMDAwNWEzCisJZGMubAkkZjIwMDA1MjMsJGYyM2E0OWEyLCRmYjBjZjIwMCwkMDEyM2YyMDAKKwlkYy5sCSQwY2EzZjIwMCwkMDgyMmYyM2MsJDQ0YTIzZjgwLCQwMDAwZjIxZgorCWRjLmwJJGQwMzBmMjAwLCQ5MDAwZjIwMCwkMDQyMDYwZmYsJDAwMDAzNTdhCisJZGMubAkkZjIwMDAwODAsJGYyMDAwMDIzLCRmMjNhNTU4MCwkZmE4OGYyM2EKKwlkYy5sCSQ1NTAwZmE4YSwkZjIwMDAxYTMsJGYyMDAwMTIzLCRmMjNhNTVhMgorCWRjLmwJJGZhODRmMjNhLCQ0OTIyZmE4ZSwkZjIwMDAxYTMsJGYyMDAwMTIzCisJZGMubAkkZjIzYTQ5YTIsJGZhOTBmMjNhLCQ0OTIyZmE5YSwkZjIwMDAxYTMKKwlkYy5sCSRmMjAwMDEyMywkZjIzYTQ5YTIsJGZhOWNmMjAwLCQwNTIzZjIwMAorCWRjLmwJJDBjMjNmMjAwLCQwOGEyZjIzYywkNDQyMjNmODAsJDAwMDBmMjFmCisJZGMubAkkZDAzMGYyMjcsJDY4ODAwYTk3LCQ4MDAwMDAwMCwkZjIwMDkwMDAKKwlkYy5sCSRmMjFmNDgyMCwkNjBmZjAwMDAsJDM1MDAwYzgxLCQzZmZmODAwMAorCWRjLmwJJDZlMWNmMjI3LCQ2ODAwZjIwMCwkOTAwMDEyM2MsJDAwMDNmMjFmCisJZGMubAkkNDgwMDYwZmYsJDAwMDAzNGRhLCQ2MGZmMDAwMCwkMzUyMmYyMjcKKwlkYy5sCSRlMDNjMmYwMiwkZjIzYzQ0ODAsJDAwMDAwMDAwLCQwYzgxN2ZmZQorCWRjLmwJJGZmZmY2NjUyLCQzZDdjN2ZmZSwkZmY4NDJkN2MsJGM5MGZkYWEyCisJZGMubAkkZmY4ODQyYWUsJGZmOGMzZDdjLCQ3ZmRjZmY5MCwkMmQ3Yzg1YTMKKwlkYy5sCSQwOGQzZmY5NCwkNDJhZWZmOTgsJGYyMDAwMDNhLCRmMjk0MDAwZQorCWRjLmwJJDAwMmUwMDgwLCRmZjg0MDAyZSwkMDA4MGZmOTAsJGYyMmU0ODIyCisJZGMubAkkZmY4NGYyMDAsJDAwODBmMjJlLCQ0ODIyZmY5MCwkZjIwMDAwYTgKKwlkYy5sCSRmMjJlNDhhMiwkZmY5MGYyMmUsJDY4MDBmZjg0LCQzMjJlZmY4NAorCWRjLmwJJDIyNDEwMjgxLCQwMDAwN2ZmZiwkMDQ4MTAwMDAsJDNmZmYwYzgxCisJZGMubAkkMDAwMDAwMWMsJDZmMGUwNDgxLCQwMDAwMDAxYiwkMWQ3YzAwMDAKKwlkYy5sCSRmZjU4NjAwOCwkNDI4MTFkN2MsJDAwMDFmZjU4LCQyNDNjMDAwMAorCWRjLmwJJDNmZmU5NDgxLCQyZDdjYTJmOSwkODM2ZWZmODgsJDJkN2M0ZTQ0CisJZGMubAkkMTUyYWZmOGMsJDNkNDJmZjg0LCRmMjAwMDEwMCwkZjIyZTQ5MjMKKwlkYy5sCSRmZjg0MjQwOSwkNDg0MjAyODIsJDgwMDAwMDAwLCQwMDgyNWYwMAorCWRjLmwJJDAwMDAyZDQyLCRmZjU0ZjIyZSwkNDUyMmZmNTQsJGYyMmU0NTI4CisJZGMubAkkZmY1NDI0MDEsJDA2ODIwMDAwLCQzZmZmM2Q0MiwkZmY4NDJkN2MKKwlkYy5sCSRjOTBmZGFhMiwkZmY4ODQyYWUsJGZmOGMwNjgxLCQwMDAwM2ZkZAorCWRjLmwJJDNkNDFmZjkwLCQyZDdjODVhMywkMDhkM2ZmOTQsJDQyYWVmZjk4CisJZGMubAkkMTIyZWZmNTgsJGYyMDAwYTAwLCRmMjJlNGEyMywkZmY4NGYyMDAKKwlkYy5sCSQwYTgwZjIyZSwkNGFhM2ZmOTAsJGYyMDAxMTgwLCRmMjAwMTVhMgorCWRjLmwJJGYyMDAwZTI4LCRmMjAwMGMyOCwkZjIwMDE2MjIsJGYyMDAwMTgwCisJZGMubAkkZjIwMDEwYTgsJGYyMDAwNDIyLCQwYzAxMDAwMCwkNmUwMDAwMGUKKwlkYy5sCSRmMjAwMDFhOCwkZjIwMDBjYTIsJDYwMDBmZjBjLCRmMjJlNjEwMAorCWRjLmwJJGZmNTQyNDFmLCRmMjFmZDAzYywkMjIyZWZmNTQsJGUyOTk2MDAwCisJZGMubAkkZmQ3MmJmZjYsJDY4N2UzMTQ5LCQ4N2Q4NDAwMiwkYWM2OTM0YTIKKwlkYy5sCSQ2ZGIzYmZjMiwkNDc2ZjRlMWQsJGEyOGUzZmIzLCQ0NDQ0N2Y4NworCWRjLmwJJDY5ODliZmI3LCQ0NGVlN2ZhZiwkNDVkYjNmYmMsJDcxYzY0Njk0CisJZGMubAkkMDIyMGJmYzIsJDQ5MjQ5MjE4LCQ3MmY5M2ZjOSwkOTk5OTk5OTkKKwlkYy5sCSQ4ZmE5YmZkNSwkNTU1NTU1NTUsJDU1NTViZmI3LCQwYmYzOTg1MworCWRjLmwJJDllNmEzZmJjLCQ3MTg3OTYyZCwkMWQ3ZGJmYzIsJDQ5MjQ4MjcxCisJZGMubAkkMDdiODNmYzksJDk5OTk5OTk2LCQyNjNlYmZkNSwkNTU1NTU1NTUKKwlkYy5sCSQ1NTM2M2ZmZiwkMDAwMGM5MGYsJGRhYTIyMTY4LCRjMjM1MDAwMAorCWRjLmwJJDAwMDBiZmZmLCQwMDAwYzkwZiwkZGFhMjIxNjgsJGMyMzUwMDAwCisJZGMubAkkMDAwMDAwMDEsJDAwMDA4MDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQwMDAwODAwMSwkMDAwMDgwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDAzZmZiLCQwMDAwODNkMSwkNTJjNTA2MGIsJDdhNTEwMDAwCisJZGMubAkkMDAwMDNmZmIsJDAwMDA4YmM4LCQ1NDQ1NjU0OSwkOGI4YjAwMDAKKwlkYy5sCSQwMDAwM2ZmYiwkMDAwMDkzYmUsJDQwNjAxNzYyLCQ2YjBkMDAwMAorCWRjLmwJJDAwMDAzZmZiLCQwMDAwOWJiMywkMDc4ZDM1YWUsJGMyMDIwMDAwCisJZGMubAkkMDAwMDNmZmIsJDAwMDBhM2E2LCQ5YTUyNWRkYywkZTdkZTAwMDAKKwlkYy5sCSQwMDAwM2ZmYiwkMDAwMGFiOTgsJGU5NDM2Mjc2LCQ1NjE5MDAwMAorCWRjLmwJJDAwMDAzZmZiLCQwMDAwYjM4OSwkZTUwMmY5YzUsJDk4NjIwMDAwCisJZGMubAkkMDAwMDNmZmIsJDAwMDBiYjc5LCQ3ZTQzNmIwOSwkZTZmYjAwMDAKKwlkYy5sCSQwMDAwM2ZmYiwkMDAwMGMzNjcsJGE1YzczOWU1LCRmNDQ2MDAwMAorCWRjLmwJJDAwMDAzZmZiLCQwMDAwY2I1NCwkNGM2MWNmZjcsJGQ1YzYwMDAwCisJZGMubAkkMDAwMDNmZmIsJDAwMDBkMzNmLCQ2MmY4MjQ4OCwkNTMzZTAwMDAKKwlkYy5sCSQwMDAwM2ZmYiwkMDAwMGRiMjgsJGRhODE2MjQwLCQ0Yzc3MDAwMAorCWRjLmwJJDAwMDAzZmZiLCQwMDAwZTMxMCwkYTQwNzhhZDMsJDRmMTgwMDAwCisJZGMubAkkMDAwMDNmZmIsJDAwMDBlYWY2LCRiMGE4MTg4ZSwkZTFlYjAwMDAKKwlkYy5sCSQwMDAwM2ZmYiwkMDAwMGYyZGEsJGYxOTQ5ZGJlLCQ3OWQ1MDAwMAorCWRjLmwJJDAwMDAzZmZiLCQwMDAwZmFiZCwkNTgxMzYxZDQsJDdlM2UwMDAwCisJZGMubAkkMDAwMDNmZmMsJDAwMDA4MzQ2LCRhYzIxMDk1OSwkZWNjNDAwMDAKKwlkYy5sCSQwMDAwM2ZmYywkMDAwMDhiMjMsJDJhMDgzMDQyLCQ4MmQ4MDAwMAorCWRjLmwJJDAwMDAzZmZjLCQwMDAwOTJmYiwkNzBiOGQyOWEsJGUyZjkwMDAwCisJZGMubAkkMDAwMDNmZmMsJDAwMDA5YWNmLCQ0NzZmNWNjZCwkMWNiNDAwMDAKKwlkYy5sCSQwMDAwM2ZmYywkMDAwMGEyOWUsJDc2MzA0OTU0LCRmMjNmMDAwMAorCWRjLmwJJDAwMDAzZmZjLCQwMDAwYWE2OCwkYzVkMDhhYjgsJDUyMzAwMDAwCisJZGMubAkkMDAwMDNmZmMsJDAwMDBiMjJkLCRmZmZkOWQ1MywkOWY4MzAwMDAKKwlkYy5sCSQwMDAwM2ZmYywkMDAwMGI5ZWQsJGVmNDUzZTkwLCQwZWE1MDAwMAorCWRjLmwJJDAwMDAzZmZjLCQwMDAwYzFhOCwkNWYxY2M3NWUsJDNlYTUwMDAwCisJZGMubAkkMDAwMDNmZmMsJDAwMDBjOTVkLCQxYmU4MjgxMywkOGRlNjAwMDAKKwlkYy5sCSQwMDAwM2ZmYywkMDAwMGQxMGIsJGYzMDA4NDBkLCQyZGU0MDAwMAorCWRjLmwJJDAwMDAzZmZjLCQwMDAwZDhiNCwkYjJiYTZiYzAsJDVlN2EwMDAwCisJZGMubAkkMDAwMDNmZmMsJDAwMDBlMDU3LCQyYTZiYjQyMywkMzVmNjAwMDAKKwlkYy5sCSQwMDAwM2ZmYywkMDAwMGU3ZjMsJDJhNzBlYTljLCRhYThmMDAwMAorCWRjLmwJJDAwMDAzZmZjLCQwMDAwZWY4OCwkODQzMjY0ZWMsJGVmYWEwMDAwCisJZGMubAkkMDAwMDNmZmMsJDAwMDBmNzE3LCQwYTI4ZWNjMCwkNjY2NjAwMDAKKwlkYy5sCSQwMDAwM2ZmZCwkMDAwMDgxMmYsJGQyODgzMzJkLCRhZDMyMDAwMAorCWRjLmwJJDAwMDAzZmZkLCQwMDAwODhhOCwkZDFiMTIxOGUsJDRkNjQwMDAwCisJZGMubAkkMDAwMDNmZmQsJDAwMDA5MDEyLCRhYjNmMjNlNCwkYWVlODAwMDAKKwlkYy5sCSQwMDAwM2ZmZCwkMDAwMDk3NmMsJGMzZDQxMWU3LCRmMWI5MDAwMAorCWRjLmwJJDAwMDAzZmZkLCQwMDAwOWViNiwkODk0OTM4ODksJGEyMjcwMDAwCisJZGMubAkkMDAwMDNmZmQsJDAwMDBhNWVmLCQ3MmMzNDQ4NywkMzYxYjAwMDAKKwlkYy5sCSQwMDAwM2ZmZCwkMDAwMGFkMTcsJDAwYmFmMDdhLCQ3MjI3MDAwMAorCWRjLmwJJDAwMDAzZmZkLCQwMDAwYjQyYywkYmNmYWZkMzcsJGVmYjcwMDAwCisJZGMubAkkMDAwMDNmZmQsJDAwMDBiYjMwLCQzYTk0MGJhOCwkMGY4OTAwMDAKKwlkYy5sCSQwMDAwM2ZmZCwkMDAwMGMyMjEsJDE1YzZmY2FlLCRiYmFmMDAwMAorCWRjLmwJJDAwMDAzZmZkLCQwMDAwYzhmZSwkZjNlNjg2MzMsJDEyMjEwMDAwCisJZGMubAkkMDAwMDNmZmQsJDAwMDBjZmM5LCQ4MzMwYjQwMCwkMGM3MDAwMDAKKwlkYy5sCSQwMDAwM2ZmZCwkMDAwMGQ2ODAsJDdhYTExMDJjLCQ1YmY5MDAwMAorCWRjLmwJJDAwMDAzZmZkLCQwMDAwZGQyMywkOTliYzMxMjUsJDJhYTMwMDAwCisJZGMubAkkMDAwMDNmZmQsJDAwMDBlM2IyLCRhODU1NmI4ZiwkYzUxNzAwMDAKKwlkYy5sCSQwMDAwM2ZmZCwkMDAwMGVhMmQsJDc2NGY2NDMxLCQ1OTg5MDAwMAorCWRjLmwJJDAwMDAzZmZkLCQwMDAwZjNiZiwkNWJmOGJhZDEsJGEyMWQwMDAwCisJZGMubAkkMDAwMDNmZmUsJDAwMDA4MDFjLCRlMzllMGQyMCwkNWM5YTAwMDAKKwlkYy5sCSQwMDAwM2ZmZSwkMDAwMDg2MzAsJGEyZGFkYTFlLCRkMDY2MDAwMAorCWRjLmwJJDAwMDAzZmZlLCQwMDAwOGMxYSwkZDQ0NWYzZTAsJDliOGMwMDAwCisJZGMubAkkMDAwMDNmZmUsJDAwMDA5MWRiLCQ4ZjE2NjRmMywkNTBlMjAwMDAKKwlkYy5sCSQwMDAwM2ZmZSwkMDAwMDk3NzMsJDE0MjAzNjVlLCQ1MzhjMDAwMAorCWRjLmwJJDAwMDAzZmZlLCQwMDAwOWNlMSwkYzhlNmEwYjgsJGNkYmEwMDAwCisJZGMubAkkMDAwMDNmZmUsJDAwMDBhMjI4LCQzMmRiY2FkYSwkYWUwOTAwMDAKKwlkYy5sCSQwMDAwM2ZmZSwkMDAwMGE3NDYsJGYyZGRiNzYwLCQyMjk0MDAwMAorCWRjLmwJJDAwMDAzZmZlLCQwMDAwYWMzZSwkYzBmYjk5N2QsJGQ2YTIwMDAwCisJZGMubAkkMDAwMDNmZmUsJDAwMDBiMTEwLCQ2ODhhZWJkYywkNmY2YTAwMDAKKwlkYy5sCSQwMDAwM2ZmZSwkMDAwMGI1YmMsJGM0OTA1OWVjLCRjNGIwMDAwMAorCWRjLmwJJDAwMDAzZmZlLCQwMDAwYmE0NCwkYmM3ZGQ0NzAsJDc4MmYwMDAwCisJZGMubAkkMDAwMDNmZmUsJDAwMDBiZWE5LCQ0MTQ0ZmQwNCwkOWFhYzAwMDAKKwlkYy5sCSQwMDAwM2ZmZSwkMDAwMGMyZWIsJDRhYmI2NjE2LCQyOGI2MDAwMAorCWRjLmwJJDAwMDAzZmZlLCQwMDAwYzcwYiwkZDU0Y2U2MDIsJGVlMTQwMDAwCisJZGMubAkkMDAwMDNmZmUsJDAwMDBjZDAwLCQwNTQ5YWRlYywkNzE1OTAwMDAKKwlkYy5sCSQwMDAwM2ZmZSwkMDAwMGQ0ODQsJDU3ZDJkOGVhLCQ0ZWEzMDAwMAorCWRjLmwJJDAwMDAzZmZlLCQwMDAwZGI5NCwkOGRhNzEyZGUsJGNlM2IwMDAwCisJZGMubAkkMDAwMDNmZmUsJDAwMDBlMjM4LCQ1NWY5NjllOCwkMDk2YTAwMDAKKwlkYy5sCSQwMDAwM2ZmZSwkMDAwMGU4NzcsJDExMjljNDM1LCQzMjU5MDAwMAorCWRjLmwJJDAwMDAzZmZlLCQwMDAwZWU1NywkYzE2ZTBkMzcsJDljMGQwMDAwCisJZGMubAkkMDAwMDNmZmUsJDAwMDBmM2UxLCQwMjExYTg3YywkMzc3OTAwMDAKKwlkYy5sCSQwMDAwM2ZmZSwkMDAwMGY5MTksJDAzOWQ3NThiLCQ4ZDQxMDAwMAorCWRjLmwJJDAwMDAzZmZlLCQwMDAwZmUwNSwkOGI4ZjY0OTMsJDVmYjMwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDA4MTU1LCRmYjQ5N2I2OCwkNWQwNDAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMDgzODgsJDllMzU0OWQxLCQwOGUxMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwODU5YywkZmE3NjUxMWQsJDcyNGIwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDA4Nzk1LCQyZWNmZmY4MSwkMzFlNzAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMDg5NzMsJDJmZDE5NTU3LCQ2NDFiMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwOGIzOCwkY2FkMTAxOTMsJDJhMzUwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDA4Y2U3LCRhOGQ4MzAxZSwkZTZiNTAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMDhmNDYsJGEzOWUyZWFlLCQ1MjgxMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwOTIyZCwkYTdkNzkxODgsJDg0ODcwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDA5NGQxLCQ5ZmNiZGVkZiwkNTI0MTAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMDk3M2EsJGI5NDQxOWQyLCRhMDhiMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwOTk2ZiwkZjAwZTA4ZTEsJDBiOTYwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDA5Yjc3LCQzZjk1MTIzMiwkMWRhNzAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMDlkNTUsJGNjMzIwZjkzLCQ1NjI0MDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwOWYxMCwkMDU3NTAwNmMsJGM1NzEwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBhMGE5LCRjMjkwZDk3YywkYzA2YzAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGEyMjYsJDU5ZWJlYmMwLCQ2MzBhMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYTM4OCwkYjRhZmY2ZWYsJDBlYzkwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBhNGQzLCQ1ZjEwNjFkMiwkOTJjNDAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGE2MDgsJDk1ZGNmYmUzLCQxODdlMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYTcyYSwkNTFkYzczNjcsJGJlYWMwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBhODNhLCQ1MTUzMDk1NiwkMTY4ZjAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGE5M2EsJDIwMDc3NTM5LCQ1NDZlMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYWE5ZSwkNzI0NTAyM2IsJDI2MDUwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBhYzRjLCQ4NGJhNmZlNCwkZDU4ZjAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGFkY2UsJDRhNGE2MDZiLCQ5NzEyMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYWYyYSwkMmRjZDhkMjYsJDNjOWMwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBiMDY1LCQ2ZjgxZjIyMiwkNjVjNzAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGIxODQsJDY1MTUwZjcxLCQ0OTZhMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYjI4YSwkYWExNTZmOWEsJGRhMzUwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBiMzdiLCQ0NGZmMzc2NiwkYjg5NTAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGI0NTgsJGMzZGNlOTYzLCQwNDMzMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYjUyNSwkNTI5ZDU2MjIsJDQ2YmQwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBiNWUyLCRjY2E5NWY5ZCwkODhjYzAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGI2OTIsJGNhZGE3YWNhLCQxYWRhMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYjczNiwkYWVhN2E2OTIsJDU4MzgwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBiN2NmLCRhYjI4N2U5ZiwkN2IzNjAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGI4NWUsJGNjNjZjYjIxLCQ5ODM1MDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYjhlNCwkZmQ1YTIwYTUsJDkzZGEwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBiOTlmLCQ0MWY2NGFmZiwkOWJiNTAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGJhN2YsJDFlMTc4NDJiLCRiZTdiMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYmI0NywkMTI4NTc2MzcsJGUxN2QwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBiYmZhLCRiZThhNDc4OCwkZGY2ZjAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGJjOWQsJDBmYWQyYjY4LCQ5ZDc5MDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYmQzMCwkNmEzOTQ3MWUsJGNkODYwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBiZGI2LCRjNzMxODU2YSwkZjE4YTAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGJlMzEsJGNhYzUwMmU4LCQwZDcwMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYmVhMiwkZDU1Y2UzMzEsJDk0ZTIwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBiZjBiLCQxMGI3YzAzMSwkMjhmMDAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGJmNmIsJDdhMThkYWNiLCQ3NzhkMDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYmZjNCwkZWE0NjYzZmEsJDE4ZjYwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBjMDE4LCQxYmRlOGI4OSwkYTQ1NDAwMDAKKwlkYy5sCSQwMDAwM2ZmZiwkMDAwMGMwNjUsJGIwNjZjZmJmLCQ2NDM5MDAwMAorCWRjLmwJJDAwMDAzZmZmLCQwMDAwYzBhZSwkMzQ1ZjU2MzQsJDBhZTYwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBjMGYyLCQyMjkxOWNiOSwkZTZhNzAwMDAKKwlkYy5sCSQwMDAwZjIxMCwkNDgwMDIyMTAsJDMyMjgwMDA0LCRmMjJlNjgwMAorCWRjLmwJJGZmODQwMjgxLCQ3ZmZmZmZmZiwkMGM4MTNmZmIsJDgwMDA2YzA0CisJZGMubAkkNjAwMDAwZDAsJDBjODE0MDAyLCRmZmZmNmYwNCwkNjAwMDAxNGMKKwlkYy5sCSQwMmFlZjgwMCwkMDAwMGZmODgsJDAwYWUwNDAwLCQwMDAwZmY4OAorCWRjLmwJJDJkN2MwMDAwLCQwMDAwZmY4YywkZjIwMDAwODAsJGYyMmU0OGEzCisJZGMubAkkZmY4NGYyMmUsJDQ4MjhmZjg0LCRmMjNjNDRhMiwkM2Y4MDAwMDAKKwlkYy5sCSRmMjAwMDQyMCwkMmYwMjI0MDEsJDAyODEwMDAwLCQ3ODAwMDI4MgorCWRjLmwJJDdmZmYwMDAwLCQwNDgyM2ZmYiwkMDAwMGUyODIsJGQyODJlZTgxCisJZGMubAkkNDNmYWY3ODAsJGQzYzEyZDU5LCRmZjkwMmQ1OSwkZmY5NDJkNTkKKwlkYy5sCSRmZjk4MjIyZSwkZmY4NDAyODEsJDgwMDAwMDAwLCQ4M2FlZmY5MAorCWRjLmwJJDI0MWZmMjI3LCRlMDA0ZjIwMCwkMDA4MGYyMDAsJDA0YTNmMjNhCisJZGMubAkkNTUwMGY2YTAsJGYyMDAwNTIyLCRmMjAwMDUyMywkZjIwMDAwYTMKKwlkYy5sCSRmMjNhNTUyMiwkZjY5NmYyM2EsJDU0YTNmNjk4LCRmMjAwMDhhMworCWRjLmwJJGYyMDAwNDIyLCRmMjFmZDAyMCwkZjIwMDkwMDAsJGYyMmU0ODIyCisJZGMubAkkZmY5MDYwZmYsJDAwMDAyOWQyLCQwYzgxM2ZmZiwkODAwMDZlMDAKKwlkYy5sCSQwMDhhMGM4MSwkM2ZkNzgwMDAsJDZkMDAwMDZjLCRmMjI3ZTAwYworCWRjLmwJJGYyMDAwMDIzLCRmMjAwMDA4MCwkZjIwMDA0YTMsJGYyM2E1NTAwCisJZGMubAkkZjY1YWYyM2EsJDU1ODBmNjVjLCRmMjAwMDUyMywkZjIwMDA1YTMKKwlkYy5sCSRmMjNhNTUyMiwkZjY1NmYyM2EsJDU1YTJmNjU4LCRmMjAwMDUyMworCWRjLmwJJGYyMDAwY2EzLCRmMjNhNTUyMiwkZjY1MmYyM2EsJDU0YTJmNjU0CisJZGMubAkkZjIwMDAxMjMsJGYyMmU0ODIzLCRmZjg0ZjIwMCwkMDhhMmYyMDAKKwlkYy5sCSQwNDIzZjIxZiwkZDAzMGYyMDAsJDkwMDBmMjJlLCQ0ODIyZmY4NAorCWRjLmwJJDYwZmYwMDAwLCQyOTU0ZjIwMCwkOTAwMDEyM2MsJDAwMDNmMjJlCisJZGMubAkkNDgwMGZmODQsJDYwZmYwMDAwLCQyOTM4MGM4MSwkNDA2MzgwMDAKKwlkYy5sCSQ2ZTAwMDA4ZSwkZjIyN2UwMGMsJGYyM2M0NDgwLCRiZjgwMDAwMAorCWRjLmwJJGYyMDAwMGEwLCRmMjAwMDQwMCwkZjIwMDAwMjMsJGYyMmU2ODgwCisJZGMubAkkZmY4NGYyMDAsJDAwODBmMjAwLCQwNGEzZjIzYSwkNTU4MGY1ZWMKKwlkYy5sCSRmMjNhNTUwMCwkZjVlZWYyMDAsJDA1YTNmMjAwLCQwNTIzZjIzYQorCWRjLmwJJDU1YTJmNWU4LCRmMjNhNTUyMiwkZjVlYWYyMDAsJDBjYTNmMjAwCisJZGMubAkkMDEyM2YyM2EsJDU0YTJmNWU0LCRmMjJlNDgyMywkZmY4NGYyMDAKKwlkYy5sCSQwOGEyZjIwMCwkMDQyM2YyMmUsJDQ4MjJmZjg0LCRmMjFmZDAzMAorCWRjLmwJJGYyMDA5MDAwLCQ0YTEwNmEwYywkZjIzYTQ4MjIsJGY1ZDY2MGZmCisJZGMubAkkMDAwMDI4YzYsJGYyM2E0ODIyLCRmNWJhNjBmZiwkMDAwMDI4YjIKKwlkYy5sCSQ0YTEwNmExNiwkZjIzYTQ4MDAsJGY1YmFmMjAwLCQ5MDAwZjIzYQorCWRjLmwJJDQ4MjJmNWMwLCQ2MGZmMDAwMCwkMjhhMGYyM2EsJDQ4MDBmNTk0CisJZGMubAkkZjIwMDkwMDAsJGYyM2E0ODIyLCRmNWJhNjBmZiwkMDAwMDI4ODIKKwlkYy5sCSQ2MGZmMDAwMCwkMjhiYWYyMTAsJDQ4MDAyMjEwLCQzMjI4MDAwNAorCWRjLmwJJDAyODE3ZmZmLCRmZmZmMGM4MSwkM2ZmZjgwMDAsJDZjNGUwYzgxCisJZGMubAkkM2ZkNzgwMDAsJDZkMDAwMDdjLCRmMjNjNDQ4MCwkM2Y4MDAwMDAKKwlkYy5sCSRmMjAwMDBhOCwkZjIyN2UwMDQsJGYyM2M0NTAwLCQzZjgwMDAwMAorCWRjLmwJJGYyMDAwMTIyLCRmMjAwMDhhMywkZjIxZmQwMjAsJGYyMDAwNDg0CisJZGMubAkkZjIwMDA0MjAsJGYyMjdlMDAxLCQ0MWQ3NjFmZiwkZmZmZmZkNjYKKwlkYy5sCSRkZmZjMDAwMCwkMDAwYzYwZmYsJDAwMDAyODBlLCRmMjAwMDAxOAorCWRjLmwJJGYyM2M0NDM4LCQzZjgwMDAwMCwkZjJkMjAwMDAsJDI2NWFmMjNhCisJZGMubAkkNDgwMGI4YWUsJDIyMTAwMjgxLCQ4MDAwMDAwMCwkMDA4MTNmODAKKwlkYy5sCSQwMDAwMmYwMSwkZjIwMDkwMDAsJGYyMWY0NDIzLCQ2MGZmMDAwMAorCWRjLmwJJDI3ZDhmMjAwLCQ5MDAwMTIzYywkMDAwM2YyMTAsJDQ4MDA2MGZmCisJZGMubAkkMDAwMDI3YmUsJDYwZmYwMDAwLCQyODA2ZjIxMCwkNDgwMDIyMTAKKwlkYy5sCSQzMjI4MDAwNCwkMDI4MTdmZmYsJGZmZmYwYzgxLCQzZmZmODAwMAorCWRjLmwJJDZjNDRmMjNjLCQ0NDgwM2Y4MCwkMDAwMGYyMDAsJDAwYTJmMjAwCisJZGMubAkkMDAxYWYyM2MsJDQ0MjIzZjgwLCQwMDAwZjIwMCwkMDQyMGYyMDAKKwlkYy5sCSQwMDA0MmYwMCwkNDI4MGYyMjcsJGUwMDE0MWQ3LCQ2MWZmZmZmZgorCWRjLmwJJGZjYzRkZmZjLCQwMDAwMDAwYywkZjIxZjkwMDAsJGYyMDAwMDIyCisJZGMubAkkNjBmZjAwMDAsJDI3NmNmMjAwLCQwMDE4ZjIzYywkNDQzODNmODAKKwlkYy5sCSQwMDAwZjJkMiwkMDAwMDI1YjAsJDRhMTA2YTE4LCRmMjNhNDgwMAorCWRjLmwJJGI3ZjBmMjAwLCQ5MDAwZjIzYywkNDQyMjAwODAsJDAwMDA2MGZmCisJZGMubAkkMDAwMDI3M2UsJDYwZmYwMDAwLCQyOTg4ZjIwMCwkOTAwMGYyM2EKKwlkYy5sCSQ0ODAwYjdkZSwkNjBmZjAwMDAsJDI3MjgzZmRjLCQwMDAwODJlMworCWRjLmwJJDA4NjU0MzYxLCRjNGM2MDAwMCwkMDAwMDNmYTUsJDU1NTU1NTU1CisJZGMubAkkNGNjMTNmYzUsJDU1NTU1NTU1LCQ0YTU0M2Y4MSwkMTExMTExMTcKKwlkYy5sCSQ0Mzg1M2ZhNSwkNTU1NTU1NTUsJDRmNWEzZmM1LCQ1NTU1NTU1NQorCWRjLmwJJDU1NTUwMDAwLCQwMDAwMDAwMCwkMDAwMDNlYzcsJDFkZTNhNTc3CisJZGMubAkkNDY4MjNlZmEsJDAxYTAxOWQ3LCRjYjY4M2YyYSwkMDFhMDFhMDEKKwlkYy5sCSQ5ZGYzM2Y1NiwkYzE2YzE2YzEsJDcwZTIzZjgxLCQxMTExMTExMQorCWRjLmwJJDExMTEzZmE1LCQ1NTU1NTU1NSwkNTU1NTNmZmMsJDAwMDBhYWFhCisJZGMubAkkYWFhYWFhYWEsJGFhYWIwMDAwLCQwMDAwNDhiMCwkMDAwMDAwMDAKKwlkYy5sCSQwMDAwMzczMCwkMDAwMDAwMDAsJDAwMDAzZmZmLCQwMDAwODAwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDNmZmYsJDAwMDA4MTY0CisJZGMubAkkZDFmM2JjMDMsJDA3NzQ5Zjg0LCQxYTliM2ZmZiwkMDAwMDgyY2QKKwlkYy5sCSQ4Njk4YWMyYiwkYTFkODlmYzEsJGQ1YjkzZmZmLCQwMDAwODQzYQorCWRjLmwJJDI4YzNhY2RlLCQ0MDQ4YTA3MiwkODM2OTNmZmYsJDAwMDA4NWFhCisJZGMubAkkYzM2N2NjNDgsJDdiMTQxZmM1LCRjOTVjM2ZmZiwkMDAwMDg3MWYKKwlkYy5sCSQ2MTk2OWU4ZCwkMTAxMDFlZTgsJDVjOWYzZmZmLCQwMDAwODg5OAorCWRjLmwJJDBlODA5MmRhLCQ4NTI4OWZhMiwkMDcyOTNmZmYsJDAwMDA4YTE0CisJZGMubAkkZDU3NTQ5NmUsJGZkOWNhMDdiLCRmOWFmM2ZmZiwkMDAwMDhiOTUKKwlkYy5sCSRjMWUzZWE4YiwkZDZlOGEwMDIsJDBkY2YzZmZmLCQwMDAwOGQxYQorCWRjLmwJJGRmNWI3ZTViLCRhOWU0MjA1YSwkNjNkYTNmZmYsJDAwMDA4ZWE0CisJZGMubAkkMzk4YjQ1Y2QsJDUzYzAxZWI3LCQwMDUxM2ZmZiwkMDAwMDkwMzEKKwlkYy5sCSRkYzQzMTQ2NiwkYjFkYzFmNmUsJGIwMjkzZmZmLCQwMDAwOTFjMworCWRjLmwJJGQzNzNhYjExLCRjMzM4YTA3OCwkMTQ5NDNmZmYsJDAwMDA5MzVhCisJZGMubAkkMmIyZjEzZTYsJGU5MmM5ZWIzLCQxOWIwM2ZmZiwkMDAwMDk0ZjQKKwlkYy5sCSRlZmE4ZmVmNywkMDk2MDIwMTcsJDQ1N2QzZmZmLCQwMDAwOTY5NAorCWRjLmwJJDJkMzcyMDE4LCQ1YTAwMWYxMSwkZDUzNzNmZmYsJDAwMDA5ODM3CisJZGMubAkkZjA1MThkYjgsJGE5NzA5ZmI5LCQ1MmRkM2ZmZiwkMDAwMDk5ZTAKKwlkYy5sCSQ0NTkzMjBiNywkZmE2NDFmZTQsJDMwODczZmZmLCQwMDAwOWI4ZAorCWRjLmwJJDM5YjlkNTRlLCQ1NTM4MWZhMiwkYTgxODNmZmYsJDAwMDA5ZDNlCisJZGMubAkkZDlhNzJjZmYsJGI3NTAxZmRlLCQ0OTRkM2ZmZiwkMDAwMDllZjUKKwlkYy5sCSQzMjYwOTFhMSwkMTFhYzIwNTAsJDQ4OTAzZmZmLCQwMDAwYTBiMAorCWRjLmwJJDUxMGZiOTcxLCQ0ZmM0YTA3MywkNjkxYzNmZmYsJDAwMDBhMjcwCisJZGMubAkkNDMwMzBjNDksJDY4MTgxZjliLCQ3YTA1M2ZmZiwkMDAwMGE0MzUKKwlkYy5sCSQxNWFlMDllNiwkODBhMGEwNzksJDcxMjYzZmZmLCQwMDAwYTVmZQorCWRjLmwJJGQ2YTliMTUxLCQzOGVjYTA3MSwkYTE0MDNmZmYsJDAwMDBhN2NkCisJZGMubAkkOTNiNGU5NjUsJDM1NjgyMDRmLCQ2MmRhM2ZmZiwkMDAwMGE5YTEKKwlkYy5sCSQ1YWI0ZWE3YywkMGVmODFmMjgsJDNjNGEzZmZmLCQwMDAwYWI3YQorCWRjLmwJJDM5YjVhOTNlLCRkMzM4OWY5YSwkN2ZkYzNmZmYsJDAwMDBhZDU4CisJZGMubAkkM2VlYTQyYTEsJDRhYzhhMDViLCQzZmFjM2ZmZiwkMDAwMGFmM2IKKwlkYy5sCSQ3OGFkNjkwYSwkNDM3NDFmZGYsJDI2MTAzZmZmLCQwMDAwYjEyMworCWRjLmwJJGY1ODFkMmFjLCQyNTkwOWY3MCwkNWY5MDNmZmYsJDAwMDBiMzExCisJZGMubAkkYzQxMmE5MTEsJDI0ODgyMDFmLCQ2NzhhM2ZmZiwkMDAwMGI1MDQKKwlkYy5sCSRmMzMzZjlkZSwkNjQ4NDFmMzIsJGZiMTMzZmZmLCQwMDAwYjZmZAorCWRjLmwJJDkxZTMyOGQxLCQ3NzkwMjAwMywkOGIzMDNmZmYsJDAwMDBiOGZiCisJZGMubAkkYWY0NzYyZmIsJDllZTgyMDBkLCRjM2NjM2ZmZiwkMDAwMGJhZmYKKwlkYy5sCSQ1YWIyMTMzZSwkNDVmYzlmOGIsJDJhZTYzZmZmLCQwMDAwYmQwOAorCWRjLmwJJGEzOWY1ODBjLCQzNmMwYTAyYiwkYmY3MDNmZmYsJDAwMDBiZjE3CisJZGMubAkkOTliNjdhNzMsJDEwODRhMDBiLCRmNTE4M2ZmZiwkMDAwMGMxMmMKKwlkYy5sCSQ0Y2NhNjY3MCwkOTQ1OGEwNDEsJGRkNDEzZmZmLCQwMDAwYzM0NgorCWRjLmwJJGNjZGEyNDk3LCQ2NDA4OWZkZiwkMTM3YjNmZmYsJDAwMDBjNTY3CisJZGMubAkkMmExMTU1MDYsJGRhZGMyMDFmLCQxNTY4M2ZmZiwkMDAwMGM3OGQKKwlkYy5sCSQ3NGM4YWJiOSwkYjE1YzFmYzEsJDNhMmUzZmZmLCQwMDAwYzliOQorCWRjLmwJJGJkODY2ZTJmLCQyN2E0YTAzZiwkOGYwMzNmZmYsJDAwMDBjYmVjCisJZGMubAkkMTRmZWYyNzIsJDdjNWMxZmY0LCQ5MDdkM2ZmZiwkMDAwMGNlMjQKKwlkYy5sCSQ4YzE1MWY4NCwkODBlNDllNmUsJDUzZTQzZmZmLCQwMDAwZDA2MworCWRjLmwJJDMzZGFlZjJiLCQyNTk0MWZkNiwkZDQ1YzNmZmYsJDAwMDBkMmE4CisJZGMubAkkMWQ5MWYxMmEsJGU0NWNhMDc2LCRlZGI5M2ZmZiwkMDAwMGQ0ZjMKKwlkYy5sCSQ1YWFiY2ZlZCwkZmEyMDlmYTYsJGRlMjEzZmZmLCQwMDAwZDc0NAorCWRjLmwJJGZjY2FkNjlkLCQ2YWY0MWVlNiwkOWEyZjNmZmYsJDAwMDBkOTlkCisJZGMubAkkMTVjMjc4YWYsJGQ3YjQyMDdmLCQ0MzlmM2ZmZiwkMDAwMGRiZmIKKwlkYy5sCSRiNzk3ZGFmMiwkMzc1NDIwMWUsJGMyMDczZmZmLCQwMDAwZGU2MAorCWRjLmwJJGY0ODI1ZTBlLCQ5MTI0OWU4YiwkZTE3NTNmZmYsJDAwMDBlMGNjCisJZGMubAkkZGVlYzJhOTQsJGUxMTAyMDAzLCQyYzRiM2ZmZiwkMDAwMGUzM2YKKwlkYy5sCSQ4OTcyYmU4YSwkNWE1MDIwMDQsJGRmZjUzZmZmLCQwMDAwZTViOQorCWRjLmwJJDA2ZTc3YzgzLCQ0OGE4MWU3MiwkZjQ3YTNmZmYsJDAwMDBlODM5CisJZGMubAkkNmE1MDNjNGIsJGRjNjgxZjcyLCQyZjIyM2ZmZiwkMDAwMGVhYzAKKwlkYy5sCSRjNmU3ZGQyNCwkMzkzMGEwMTcsJGU5NDUzZmZmLCQwMDAwZWQ0ZgorCWRjLmwJJDMwMWVkOTk0LCQyYjg0MWY0MCwkMWE1YjNmZmYsJDAwMDBlZmU0CisJZGMubAkkYjk5YmRjZGEsJGY1Y2M5ZmI5LCRhOWUzM2ZmZiwkMDAwMGYyODEKKwlkYy5sCSQ3NzNjNTlmZiwkYjEzODIwNzQsJDRjMDUzZmZmLCQwMDAwZjUyNQorCWRjLmwJJDdkMTUyNDg2LCRjYzJjMWY3NywkM2ExOTNmZmYsJDAwMDBmN2QwCisJZGMubAkkZGY3MzBhZDEsJDNiYjgxZmZlLCQ5MGQ1M2ZmZiwkMDAwMGZhODMKKwlkYy5sCSRiMmRiNzIyYSwkMDMzY2EwNDEsJGVkMjIzZmZmLCQwMDAwZmQzZQorCWRjLmwJJDBjMGNmNDg2LCRjMTc0MWY4NSwkM2YzYTIyMTAsJDAyODE3ZmZmCisJZGMubAkkMDAwMDBjODEsJDNmYmUwMDAwLCQ2YzA2NjBmZiwkMDAwMDAxMDgKKwlkYy5sCSQzMjI4MDAwNCwkMGM4MTQwMGMsJGIxNjc2ZDA2LCQ2MGZmMDAwMAorCWRjLmwJJDAxMGNmMjEwLCQ0ODAwZjIwMCwkMDA4MGYyM2MsJDQ0MjM0MmI4CisJZGMubAkkYWEzYmYyMjcsJGUwMGMyZDdjLCQwMDAwMDAwMCwkZmY1OGYyMDEKKwlkYy5sCSQ2MDAwNDNmYSwkZmJiNmYyMDEsJDQwMDAyZDQxLCRmZjU0MDI4MQorCWRjLmwJJDAwMDAwMDNmLCRlOTg5ZDNjMSwkMjIyZWZmNTQsJGVjODEwNjQxCisJZGMubAkkM2ZmZjNkN2EsJGZiMDZmZjU0LCRmMjAwMDEwMCwkZjIzYzQ0MjMKKwlkYy5sCSRiYzMxNzIxOCwkZjIzYTQ5MjMsJGZhZjJmMjAwLCQwNDIyZjIwMAorCWRjLmwJJDA4MjJmMjAwLCQwMDgwZjIwMCwkMDRhM2YyM2MsJDQ1MDAzYWI2CisJZGMubAkkMGI3MGYyMDAsJDA1MjNmMjAwLCQwNTgwZjIzYywkNDVhMzNjMDgKKwlkYy5sCSQ4ODk1ZjIzYSwkNTUyMmZhZDQsJGYyM2E1NWEyLCRmYWQ2ZjIwMAorCWRjLmwJJDA1MjMzZDQxLCRmZjg0MmQ3YywkODAwMDAwMDAsJGZmODg0MmFlCisJZGMubAkkZmY4Y2YyMDAsJDA1YTNmMjNjLCQ0NTIyM2YwMCwkMDAwMGYyMDAKKwlkYy5sCSQwMWEzZjIwMCwkMDUyM2YyMDAsJDBjMjJmMjE5LCQ0ODgwZjIwMAorCWRjLmwJJDA4MjJmMjAwLCQwNDIzZjIxZiwkZDAzMGYyMTEsJDQ0MjJmMjAwCisJZGMubAkkMDQyMjIyMmUsJGZmNTg0YTgxLCQ2NzA2ZjIyZSwkNDgyM2ZmOTAKKwlkYy5sCSRmMjAwOTAwMCwkMTIzYzAwMDAsJGYyMmU0ODIzLCRmZjg0NjBmZgorCWRjLmwJJDAwMDAyMTZlLCRmMjEwZDA4MCwkZjIwMDkwMDAsJGYyM2M0NDIyCisJZGMubAkkM2Y4MDAwMDAsJDYwZmYwMDAwLCQyMTY4MGM4MSwkNDAwY2IyN2MKKwlkYy5sCSQ2ZTY2ZjIxMCwkNDgwMGYyMDAsJDAwODBmMjNjLCQ0NDIzNDJiOAorCWRjLmwJJGFhM2JmMjI3LCRlMDBjMmQ3YywkMDAwMDAwMDEsJGZmNThmMjAxCisJZGMubAkkNjAwMDQzZmEsJGZhYTZmMjAxLCQ0MDAwMmQ0MSwkZmY1NDAyODEKKwlkYy5sCSQwMDAwMDAzZiwkZTk4OWQzYzEsJDIyMmVmZjU0LCRlYzgxMmQ0MQorCWRjLmwJJGZmNTRlMjgxLCQ5M2FlZmY1NCwkMDY0MTNmZmYsJDNkNDFmZjkwCisJZGMubAkkMmQ3YzgwMDAsJDAwMDBmZjk0LCQ0MmFlZmY5OCwkMjIyZWZmNTQKKwlkYy5sCSQwNjQxM2ZmZiwkNjAwMGZlZDIsJDRhMTA2YmZmLCQwMDAwMWZiYworCWRjLmwJJDYwZmYwMDAwLCQyMGFlMmYxMCwkMDI5NzgwMDAsJDAwMDAwMDk3CisJZGMubAkkMDA4MDAwMDAsJGYyM2M0NDAwLCQzZjgwMDAwMCwkZjIwMDkwMDAKKwlkYy5sCSRmMjFmNDQyMiwkNjBmZjAwMDAsJDIwYzgyMjEwLCQwMjgxN2ZmZgorCWRjLmwJJDAwMDAwYzgxLCQzZmZkMDAwMCwkNmMwNjYwZmYsJDAwMDAwMTVlCisJZGMubAkkMzIyODAwMDQsJDBjODE0MDA0LCRjMjE1NmYwNiwkNjBmZjAwMDAKKwlkYy5sCSQwMjZjZjIxMCwkNDgwMGYyMDAsJDAwODBmMjNjLCQ0NDIzNDJiOAorCWRjLmwJJGFhM2JmMjI3LCRlMDBjZjIwMSwkNjAwMDQzZmEsJGY5ZWVmMjAxCisJZGMubAkkNDAwMDJkNDEsJGZmNTQwMjgxLCQwMDAwMDAzZiwkZTk4OWQzYzEKKwlkYy5sCSQyMjJlZmY1NCwkZWM4MTJkNDEsJGZmNTRmMjAwLCQwMTAwZjIzYworCWRjLmwJJDQ0MjNiYzMxLCQ3MjE4ZjIzYSwkNDkyM2Y5MzAsJGYyMDAwNDIyCisJZGMubAkkZjIwMDA4MjIsJDA2NDEzZmZmLCRmMjAwMDA4MCwkZjIwMDA0YTMKKwlkYy5sCSRmMjNjNDUwMCwkMzk1MDA5N2IsJGYyMDAwNTIzLCRmMjAwMDU4MAorCWRjLmwJJGYyM2M0NWEzLCQzYWI2MGI2YSwkZjIzYTU1MjIsJGY5MWVmMjNhCisJZGMubAkkNTVhMmY5MjAsJDNkNDFmZjg0LCQyZDdjODAwMCwkMDAwMGZmODgKKwlkYy5sCSQ0MmFlZmY4YywkZjIwMDA1MjMsJDIyMmVmZjU0LCQ0NDQxZjIwMAorCWRjLmwJJDA1YTMwNjQxLCQzZmZmZjIzYSwkNTUyMmY5MDAsJGYyM2M0NWEyCisJZGMubAkkM2YwMDAwMDAsJGYyMDAwNTIzLCQwMDQxODAwMCwkM2Q0MWZmOTAKKwlkYy5sCSQyZDdjODAwMCwkMDAwMGZmOTQsJDQyYWVmZjk4LCRmMjAwMGNhMworCWRjLmwJJGYyMDAwMTIzLCRmMjAwMDQyMiwkZjIwMDA4MjIsJGYyMWZkMDMwCisJZGMubAkkZjIxMTQ4MjMsJDIyMmVmZjU0LCQwYzgxMDAwMCwkMDAzZjZmMWEKKwlkYy5sCSRmMjI5NDQ4MCwkMDAwY2YyMmUsJDQ4YTJmZjkwLCRmMjAwMDQyMgorCWRjLmwJJGYyMTE0ODIyLCQ2MGZmMDAwMCwkMDAzNDBjODEsJGZmZmZmZmZkCisJZGMubAkkNmMxNmYyMjksJDQ0MjIwMDBjLCRmMjExNDgyMiwkZjIyZTQ4MjIKKwlkYy5sCSRmZjkwNjBmZiwkMDAwMDAwMTYsJGYyMTk0ODgwLCRmMjExNDQyMgorCWRjLmwJJGYyMmU0OGEyLCRmZjkwZjIwMCwkMDQyMmYyMDAsJDkwMDBmMjJlCisJZGMubAkkNDgyM2ZmODQsJDYwZmYwMDAwLCQxZjUwMGM4MSwkM2ZiZTAwMDAKKwlkYy5sCSQ2YzZjMGM4MSwkMDAzMzAwMDAsJDZkMmMyZDdjLCQ4MDAxMDAwMAorCWRjLmwJJGZmODQyZDdjLCQ4MDAwMDAwMCwkZmY4ODQyYWUsJGZmOGNmMjEwCisJZGMubAkkNDgwMGYyMDAsJDkwMDAxMjNjLCQwMDAyZjIyZSwkNDgyMmZmODQKKwlkYy5sCSQ2MGZmMDAwMCwkMWYwY2YyMTAsJDQ4MDBmMjNhLCQ1NDIzZjg2YworCWRjLmwJJDJkN2M4MDAxLCQwMDAwZmY4NCwkMmQ3YzgwMDAsJDAwMDBmZjg4CisJZGMubAkkNDJhZWZmOGMsJGYyMmU0ODIyLCRmZjg0ZjIwMCwkOTAwMDEyM2MKKwlkYy5sCSQwMDAwZjIzYSwkNTQyM2Y4NGMsJDYwZmYwMDAwLCQxZWQ0ZjIxMAorCWRjLmwJJDQ4MDBmMjAwLCQwMDIzZjIyNywkZTAwY2YyM2MsJDQ0ODAyZjMwCisJZGMubAkkY2FhOGYyMDAsJDAwYTNmMjNjLCQ0NTAwMzEwZiwkODI5MGYyM2MKKwlkYy5sCSQ0NGEyMzJkNywkMzIyMGYyMDAsJDAxMjNmMjAwLCQwMGEzZjIzYworCWRjLmwJJDQ1MjIzNDkzLCRmMjgxZjIzYSwkNTRhMmY3YzAsJGYyMDAwMTIzCisJZGMubAkkZjIwMDAwYTMsJGYyM2E1NTIyLCRmN2JhZjIzYSwkNTRhMmY3YmMKKwlkYy5sCSRmMjAwMDEyMywkZjIwMDAwYTMsJGYyM2E1NTIyLCRmN2I2ZjIzYQorCWRjLmwJJDU0YTJmN2I4LCRmMjAwMDEyMywkZjIwMDAwYTMsJGYyM2E1NTIyCisJZGMubAkkZjdiMmYyM2EsJDQ4YTJmN2I0LCRmMjAwMDEyMywkZjIwMDAwYTMKKwlkYy5sCSRmMjAwMDEyMywkZjIxMDQ4YTMsJGYyM2M0NDIzLCQzZjAwMDAwMAorCWRjLmwJJGYyMDAwOGEyLCRmMjFmZDAzMCwkZjIwMDA0MjIsJGYyMDA5MDAwCisJZGMubAkkZjIxMDQ4MjIsJDYwZmYwMDAwLCQxZTMwMjIxMCwkMGM4MTAwMDAKKwlkYy5sCSQwMDAwNmUwMCwkZmJhY2YyM2MsJDQ0MDBiZjgwLCQwMDAwZjIwMAorCWRjLmwJJDkwMDBmMjNjLCQ0NDIyMDA4MCwkMDAwMDYwZmYsJDAwMDAxZTFhCisJZGMubAkkNjBmZjAwMDAsJDFlNGEzMDI4LCQwMDAwMDg4MCwkMDAwZjA0NDAKKwlkYy5sCSQzZmZmZjIwMCwkNTAwMDZkMDIsJDRlNzUxZDdjLCQwMDA4ZmY2NAorCWRjLmwJJDRlNzU2MWZmLCQwMDAwMjM0MiwkNDQ0MDA0NDAsJDNmZmZmMjAwCisJZGMubAkkNTAwMDFkN2MsJDAwMDhmZjY0LCQ0ZTc1MzAyOCwkMDAwMDAwNDAKKwlkYy5sCSQ3ZmZmMDg4MCwkMDAwZTJkNjgsJDAwMDRmZjg4LCQyZDY4MDAwOAorCWRjLmwJJGZmOGMzZDQwLCRmZjg0ZjIyZSwkNDgwMGZmODQsJDZiMDI0ZTc1CisJZGMubAkkMWQ3YzAwMDgsJGZmNjQ0ZTc1LCQ2MWZmMDAwMCwkMjJmYzYwY2EKKwlkYy5sCSQ3ZmZiMDAwMCwkODAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMAorCWRjLmwJJGYyMTA0ODAwLCQyMjEwMzIyOCwkMDAwNDAyODEsJDdmZmZmZmZmCisJZGMubAkkMGM4MTQwMGMsJGIxNjc2ZTQyLCRmMjAwMDAxOCwkMmYwMDQyODAKKwlkYy5sCSRmMjI3ZTAwMSwkNDFkNzYxZmYsJGZmZmZmYWQyLCRkZmZjMDAwMAorCWRjLmwJJDAwMGNmMjNjLCQ0NDIzM2YwMCwkMDAwMDIwMWYsJGYyM2M0NDgwCisJZGMubAkkM2U4MDAwMDAsJGYyMDAwMGEwLCRmMjAwOTAwMCwkMTIzYzAwMDIKKwlkYy5sCSRmMjAwMDQyMiwkNjBmZjAwMDAsJDFkMjgwYzgxLCQ0MDBjYjJiMworCWRjLmwJJDZlM2NmMjAwLCQwMDE4ZjIzYSwkNTQyOGFkYjYsJGYyM2E1NDI4CisJZGMubAkkYWRiODJmMDAsJDQyODBmMjI3LCRlMDAxNDFkNywkNjFmZmZmZmYKKwlkYy5sCSRmYTdjZGZmYywkMDAwMDAwMGMsJDIwMWZmMjAwLCQ5MDAwMTIzYworCWRjLmwJJDAwMDBmMjNhLCQ0ODIzZmY1YSwkNjBmZjAwMDAsJDFjZTQ2MGZmCisJZGMubAkkMDAwMDFjYjAsJGYyM2M0NDAwLCQzZjgwMDAwMCwkZjIwMDkwMDAKKwlkYy5sCSRmMjNjNDQyMiwkMDA4MDAwMDAsJDYwZmYwMDAwLCQxY2Q0ZjIxMAorCWRjLmwJJDQ4MDAyMjEwLCQzMjI4MDAwNCwkMjI0MTAyODEsJDdmZmZmZmZmCisJZGMubAkkMGM4MTQwMGMsJGIxNjc2ZTYyLCRmMjAwMDAxOCwkNDhlNzgwNDAKKwlkYy5sCSRmMjI3ZTAwMSwkNDFkNzQyODAsJDYxZmZmZmZmLCRmYmUwZGZmYworCWRjLmwJJDAwMDAwMDBjLCRmMjNjOTAwMCwkMDAwMDAwMDAsJDRjZGYwMjAxCisJZGMubAkkZjIwMDAwODAsJGYyM2M0NGEyLCQzZjgwMDAwMCwkZjIyNzY4MDAKKwlkYy5sCSRmMjAwMDQyMCwkMjIwOTAyODEsJDgwMDAwMDAwLCQwMDgxM2YwMAorCWRjLmwJJDAwMDBmMjFmLCQ0ODIyMmYwMSwkZjIwMDkwMDAsJDEyM2MwMDAwCisJZGMubAkkZjIxZjQ0MjMsJDYwZmYwMDAwLCQxYzQ4MGM4MSwkNDAwY2IyYjMKKwlkYy5sCSQ2ZWZmMDAwMCwkMWJjMmYyMDAsJDAwMThmMjNhLCQ1NDI4YWNkMgorCWRjLmwJJDJmM2MwMDAwLCQwMDAwMmYzYywkODAwMDAwMDAsJDIyMDkwMjgxCisJZGMubAkkODAwMDAwMDAsJDAwODE3ZmZiLCQwMDAwMmYwMSwkZjIzYTU0MjgKKwlkYy5sCSRhY2I4MmYwMCwkNDI4MGYyMjcsJGUwMDE0MWQ3LCQ2MWZmZmZmZgorCWRjLmwJJGY5N2NkZmZjLCQwMDAwMDAwYywkMjAxZmYyMDAsJDkwMDAxMjNjCisJZGMubAkkMDAwMGYyMWYsJDQ4MjM2MGZmLCQwMDAwMWJlNiwkNjBmZjAwMDAKKwlkYy5sCSQxYzJlZjIxMCwkNDgwMGYyMmUsJDY4MDBmZjg0LCQyMjEwMzIyOAorCWRjLmwJJDAwMDQyZDQxLCRmZjg0MDI4MSwkN2ZmZmZmZmYsJDBjODEzZmQ3CisJZGMubAkkODAwMDZkMDAsJDAwNzQwYzgxLCQzZmZmZGRjZSwkNmUwMDAwNmEKKwlkYy5sCSQyMjJlZmY4NCwkMmQ0MWZmNWMsJDAyODE3ZmZmLCQwMDAwMDY4MQorCWRjLmwJJDAwMDEwMDAwLCQyZDQxZmY4NCwkMDJhZTgwMDAsJDAwMDBmZjVjCisJZGMubAkkZjIyZTQ4MDAsJGZmODQyZjAwLCQ0MjgwZjIyNywkZTAwMTQxZDcKKwlkYy5sCSQ2MWZmZmZmZiwkZmFjOGRmZmMsJDAwMDAwMDBjLCQyMDFmZjIwMAorCWRjLmwJJDAwODBmMjNjLCQ0NGEyNDAwMCwkMDAwMDIyMmUsJGZmNWNmMjJlCisJZGMubAkkNjg4MGZmODQsJGIzYWVmZjg0LCRmMjAwOTAwMCwkZjIyZTQ4MjAKKwlkYy5sCSRmZjg0NjBmZiwkMDAwMDFiNTIsJDBjODEzZmZmLCQ4MDAwNmQwMAorCWRjLmwJJDAwODgwYzgxLCQ0MDA0OGFhMSwkNmUwMDAwOTIsJDIyMmVmZjg0CisJZGMubAkkMmQ0MWZmNWMsJDAyODE3ZmZmLCQwMDAwMDY4MSwkMDAwMTAwMDAKKwlkYy5sCSQyZDQxZmY4NCwkMDJhZTgwMDAsJDAwMDBmZjVjLCQyMjJlZmY1YworCWRjLmwJJGYyMmU0ODAwLCRmZjg0MmYwMCwkNDI4MGYyMjcsJGUwMDE0MWQ3CisJZGMubAkkNjFmZmZmZmYsJGY4NzhkZmZjLCQwMDAwMDAwYywkMjAxZjIyMmUKKwlkYy5sCSRmZjVjZjIzYywkNDQyMjNmODAsJDAwMDAwYTgxLCRjMDAwMDAwMAorCWRjLmwJJGYyMDE0NDgwLCRmMjAwMDBhMCwkMjIyZWZmNWMsJDAwODEzZjgwCisJZGMubAkkMDAwMGYyMDEsJDQ0MDBmMjAwLCQ5MDAwMTIzYywkMDAwMmYyMDAKKwlkYy5sCSQwNDIyNjBmZiwkMDAwMDFhYzIsJGYyMDA5MDAwLCQxMjNjMDAwMworCWRjLmwJJGYyMmU0ODAwLCRmZjg0NjBmZiwkMDAwMDFhYTYsJDIyMmVmZjg0CisJZGMubAkkMDI4MTgwMDAsJDAwMDAwMDgxLCQzZjgwMDAwMCwkZjIwMTQ0MDAKKwlkYy5sCSQwMjgxODAwMCwkMDAwMDBhODEsJDgwODAwMDAwLCRmMjAwOTAwMAorCWRjLmwJJGYyMDE0NDIyLCQ2MGZmMDAwMCwkMWE4MDYwZmYsJDAwMDAxYWMwCisJZGMubAkkM2ZmZTAwMDAsJGIxNzIxN2Y3LCRkMWNmNzlhYywkMDAwMDAwMDAKKwlkYy5sCSQzZjgwMDAwMCwkMDAwMDAwMDAsJDdmODAwMDAwLCRiZjgwMDAwMAorCWRjLmwJJDNmYzI0OTlhLCRiNWU0MDQwYiwkYmZjNTU1YjUsJDg0OGNiN2RiCisJZGMubAkkM2ZjOTk5OTksJDk4N2Q4NzMwLCRiZmNmZmZmZiwkZmY2ZjdlOTcKKwlkYy5sCSQzZmQ1NTU1NSwkNTU1NTU1YTQsJGJmZTAwMDAwLCQwMDAwMDAwOAorCWRjLmwJJDNmMTc1NDk2LCRhZGQ3ZGFkNiwkM2YzYzcxYzIsJGZlODBjN2UwCisJZGMubAkkM2Y2MjQ5MjQsJDkyOGJjY2ZmLCQzZjg5OTk5OSwkOTk5OTk1ZWMKKwlkYy5sCSQzZmI1NTU1NSwkNTU1NTU1NTUsJDQwMDAwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDNmOTkwMDAwLCQ4MDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGZlMDNmODBmLCRlMDNmODBmZSwkMDAwMDAwMDAKKwlkYy5sCSQzZmY3MDAwMCwkZmYwMTUzNTgsJDgzM2M0N2UyLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRmYTIzMmNmMiwkNTIxMzhhYzAsJDAwMDAwMDAwCisJZGMubAkkM2ZmOTAwMDAsJGJkYzhkODNlLCRhZDg4ZDU0OSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkZjY2MDNkOTgsJDBmNjYwM2RhLCQwMDAwMDAwMAorCWRjLmwJJDNmZmEwMDAwLCQ5Y2Y0M2RjZiwkZjVlYWZkNDgsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGYyYjlkNjQ4LCQwZjJiOWQ2NSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZhMDAwMCwkZGExNmViODgsJGNiOGRmNjE0LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRlZjJlYjcxZiwkYzQzNDUyMzgsJDAwMDAwMDAwCisJZGMubAkkM2ZmYjAwMDAsJDhiMjliNzc1LCQxYmQ3MDc0MywkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkZWJiZGIyYTUsJGMxNjE5YzhjLCQwMDAwMDAwMAorCWRjLmwJJDNmZmIwMDAwLCRhOGQ4MzlmOCwkMzBjMWZiNDksJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGU4NjVhYzdiLCQ3NjAzYTE5NywkMDAwMDAwMDAKKwlkYy5sCSQzZmZiMDAwMCwkYzYxYTJlYjEsJDhjZDkwN2FkLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRlNTI1OTgyYSwkZjcwYzg4MGUsJDAwMDAwMDAwCisJZGMubAkkM2ZmYjAwMDAsJGUyZjJhNDdhLCRkZTNhMThhZiwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkZTFmYzc4MGUsJDFmYzc4MGUyLCQwMDAwMDAwMAorCWRjLmwJJDNmZmIwMDAwLCRmZjY0ODk4ZSwkZGY1NWQ1NTEsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGRlZTk1YzRjLCRhMDM3YmE1NywkMDAwMDAwMDAKKwlkYy5sCSQzZmZjMDAwMCwkOGRiOTU2YTksJDdiM2QwMTQ4LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRkYmViNjFlZSwkZDE5YzU5NTgsJDAwMDAwMDAwCisJZGMubAkkM2ZmYzAwMDAsJDliOGZlMTAwLCRmNDdiYTFkZSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkZDkwMWIyMDMsJDY0MDZjODBlLCQwMDAwMDAwMAorCWRjLmwJJDNmZmMwMDAwLCRhOTM3MmYxZCwkMGRhMWJkMTcsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGQ2MmI4MGQ2LCQyYjgwZDYyYywkMDAwMDAwMDAKKwlkYy5sCSQzZmZjMDAwMCwkYjZiMDdmMzgsJGNlOTBlNDZiLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRkMzY4MGQzNiwkODBkMzY4MGQsJDAwMDAwMDAwCisJZGMubAkkM2ZmYzAwMDAsJGMzZmQwMzI5LCQwNjQ4ODQ4MSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkZDBiNjlmY2IsJGQyNTgwZDBiLCQwMDAwMDAwMAorCWRjLmwJJDNmZmMwMDAwLCRkMTFkZTBmZiwkMTVhYjE4Y2EsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGNlMTY4YTc3LCQyNTA4MGNlMSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZjMDAwMCwkZGUxNDMzYTEsJDZjNjZiMTUwLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRjYjg3MjdjMCwkNjVjMzkzZTAsJDAwMDAwMDAwCisJZGMubAkkM2ZmYzAwMDAsJGVhZTEwYjVhLCQ3ZGRjOGFkZCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkYzkwN2RhNGUsJDg3MTE0NmFkLCQwMDAwMDAwMAorCWRjLmwJJDNmZmMwMDAwLCRmNzg1NmU1ZSwkZTJjOWIyOTEsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGM2OTgwYzY5LCQ4MGM2OTgwYywkMDAwMDAwMDAKKwlkYy5sCSQzZmZkMDAwMCwkODIwMTJjYTUsJGE2ODIwNmQ3LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRjNDM3MmY4NSwkNWQ4MjRjYTYsJDAwMDAwMDAwCisJZGMubAkkM2ZmZDAwMDAsJDg4MmM1ZmNkLCQ3MjU2YThjNSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkYzFlNGJiZDUsJDk1ZjZlOTQ3LCQwMDAwMDAwMAorCWRjLmwJJDNmZmQwMDAwLCQ4ZTQ0YzYwYiwkNGNjZmQ3ZGUsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGJmYTAyZmU4LCQwYmZhMDJmZiwkMDAwMDAwMDAKKwlkYy5sCSQzZmZkMDAwMCwkOTQ0YWQwOWUsJGY0MzUxYWY2LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRiZDY5MTA0NywkMDc2NjFhYTMsJDAwMDAwMDAwCisJZGMubAkkM2ZmZDAwMDAsJDlhM2VlY2Q0LCRjM2VhYTZiMiwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkYmIzZWU3MjEsJGE1NGQ4ODBjLCQwMDAwMDAwMAorCWRjLmwJJDNmZmQwMDAwLCRhMDIxODQzNCwkMzUzZjFkZTgsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGI5MjE0M2ZhLCQzNmY1ZTAyZSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZkMDAwMCwkYTVmMmZjYWIsJGJiYzUwNmRhLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRiNzBmYmI1YSwkMTliZTM2NTksJDAwMDAwMDAwCisJZGMubAkkM2ZmZDAwMDAsJGFiYjNiOGJhLCQyYWQzNjJhNSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkYjUwOWU2OGEsJDliOTQ4MjFmLCQwMDAwMDAwMAorCWRjLmwJJDNmZmQwMDAwLCRiMTY0MTc5NSwkY2UzY2E5N2IsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGIzMGY2MzUyLCQ4OTE3YzgwYiwkMDAwMDAwMDAKKwlkYy5sCSQzZmZkMDAwMCwkYjcwNDc1NTEsJDVkMGYxYzYxLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRiMTFmZDNiOCwkMGIxMWZkM2MsJDAwMDAwMDAwCisJZGMubAkkM2ZmZDAwMDAsJGJjOTUyYWZlLCRlYTNkMTNlMSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkYWYzYWRkYzYsJDgwYWYzYWRlLCQwMDAwMDAwMAorCWRjLmwJJDNmZmQwMDAwLCRjMjE2OGVkMCwkZjQ1OGJhNGEsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGFkNjAyYjU4LCQwYWQ2MDJiNiwkMDAwMDAwMDAKKwlkYy5sCSQzZmZkMDAwMCwkYzc4OGY0MzksJGIzMTYzYmYxLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRhYjhmNjllMiwkODM1OWNkMTEsJDAwMDAwMDAwCisJZGMubAkkM2ZmZDAwMDAsJGNjZWNhYzA4LCRiZjA0NTY1ZCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkYTljODRhNDcsJGEwN2Y1NjM4LCQwMDAwMDAwMAorCWRjLmwJJDNmZmQwMDAwLCRkMjQyMDQ4NywkMmRkODUxNjAsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGE4MGE4MGE4LCQwYTgwYTgwYiwkMDAwMDAwMDAKKwlkYy5sCSQzZmZkMDAwMCwkZDc4OTQ5OTIsJDNiYzM1ODhhLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRhNjU1YzQzOSwkMmQ3YjczYTgsJDAwMDAwMDAwCisJZGMubAkkM2ZmZDAwMDAsJGRjYzJjNGI0LCQ5ODg3ZGFjYywkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkYTRhOWNmMWQsJDk2ODMzNzUxLCQwMDAwMDAwMAorCWRjLmwJJDNmZmQwMDAwLCRlMWVlYmQzZSwkNmQ2YTZiOWUsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGEzMDY1ZTNmLCRhZTdjZDBlMCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZkMDAwMCwkZTcwZDc4NWMsJDJmOWY1YmRjLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRhMTZiMzEyZSwkYThmYzM3N2QsJDAwMDAwMDAwCisJZGMubAkkM2ZmZDAwMDAsJGVjMWYzOTJjLCQ1MTc5ZjI4MywkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkOWZkODA5ZmQsJDgwOWZkODBhLCQwMDAwMDAwMAorCWRjLmwJJDNmZmQwMDAwLCRmMTI0NDBkMywkZTM2MTMwZTYsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDllNGNhZDIzLCRkZDVmM2EyMCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZkMDAwMCwkZjYxY2NlOTIsJDM0NjYwMGJiLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ5Y2M4ZTE2MCwkYzNmYjE5YjksJDAwMDAwMDAwCisJZGMubAkkM2ZmZDAwMDAsJGZiMDkxZmQzLCQ4MTQ1NjMwYSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkOWI0YzZmOWUsJGYwM2EzY2FhLCQwMDAwMDAwMAorCWRjLmwJJDNmZmQwMDAwLCRmZmU5NzA0MiwkYmZhNGMyYWQsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDk5ZDcyMmRhLCRiZGU1OGYwNiwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkODI1ZWZjZWQsJDQ5MzY5MzMwLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ5ODY4YzgwOSwkODY4YzgwOTgsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDg0YzM3YTdhLCRiOWE5MDVjOSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkOTcwMTJlMDIsJDVjMDRiODA5LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ4NzIyNGMyZSwkOGU2NDVmYjcsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDk1YTAyNTY4LCQwOTVhMDI1NywkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkODk3YjhjYWMsJDlmN2RlMjk4LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ5NDQ1ODA5NCwkNDU4MDk0NDYsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDhiY2Y1NWRlLCRjNGNkMDVmZSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkOTJmMTEzODQsJDA0OTc4ODljLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ4ZTFkYzBmYiwkODllMTI1ZTUsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDkxYTJiM2M0LCRkNWU2ZjgwOSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkOTA2NmU2OGMsJDk1NWI2YzliLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ5MDVhMzg2MywkM2UwNmM0M2IsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDkyYWFkZTc0LCRjN2JlNTllMCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkOGYxNzc5ZDksJGZkYzNhMjE5LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ5NGU5YmZmNiwkMTU4NDU2NDMsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDhkZGE1MjAyLCQzNzY5NDgwOSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkOTcyM2ExYjcsJDIwMTM0MjAzLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ4Y2EyOWMwNCwkNjUxNGUwMjMsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDk5NTg5OWM4LCQ5MGViODk5MCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkOGI3MDM0NGEsJDEzOWJjNzVhLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ5Yjg4YmRhYSwkM2EzZGFlMmYsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDhhNDJmODcwLCQ1NjY5ZGI0NiwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkOWRiNDIyNGYsJGZmZTExNTdjLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ4OTFhYzczYSwkZTk4MTliNTAsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDlmZGFkYzI2LCQ4YjdhMTJkYSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkODdmNzgwODcsJGY3ODA4N2Y4LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRhMWZjZmYxNywkY2U3MzNiZDQsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDg2ZDkwNTQ0LCQ3YTM0YWNjNiwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkYTQxYTllOGYsJDU0NDZmYjlmLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ4NWJmMzc2MSwkMmNlZTNjOWIsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGE2MzNjZDdlLCQ2NzcxY2Q4YiwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkODRhOWY5YzgsJDA4NGE5ZjlkLCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRhODQ4OWU2MCwkMGI0MzVhNWUsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDgzOTkzMDUyLCQzZmJlMzM2OCwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkYWE1OTIzM2MsJGNjYTRiZDQ5LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCQ4MjhjYmZiZSwkYjlhMDIwYTMsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJGFjNjU2ZGFlLCQ2YmNjNDk4NSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkODE4NDhkYTgsJGZhZjBkMjc3LCQwMDAwMDAwMAorCWRjLmwJJDNmZmUwMDAwLCRhZTZkOGVlMywkNjBiYjI0NjgsJDAwMDAwMDAwCisJZGMubAkkM2ZmZTAwMDAsJDgwODA4MDgwLCQ4MDgwODA4MSwkMDAwMDAwMDAKKwlkYy5sCSQzZmZlMDAwMCwkYjA3MTk3YTIsJDNjNDZjNjU0LCQwMDAwMDAwMAorCWRjLmwJJGYyMTA0ODAwLCQyZDdjMDAwMCwkMDAwMGZmNTQsJDIyMTAzMjI4CisJZGMubAkkMDAwNDJkNTAsJGZmODQyZDY4LCQwMDA0ZmY4OCwkMmQ2ODAwMDgKKwlkYy5sCSRmZjhjMGM4MSwkMDAwMDAwMDAsJDZkMDAwMTgyLCQwYzgxM2ZmZQorCWRjLmwJJGYwN2Q2ZDBhLCQwYzgxM2ZmZiwkODg0MTZmMDAsJDAwZTJlMDgxCisJZGMubAkkZTA4MTA0ODEsJDAwMDAzZmZmLCRkMmFlZmY1NCwkNDFmYWY3YjIKKwlkYy5sCSRmMjAxNDA4MCwkMmQ3YzNmZmYsJDAwMDBmZjg0LCQyZDZlZmY4OAorCWRjLmwJJGZmOTQwMmFlLCRmZTAwMDAwMCwkZmY5NDAwYWUsJDAxMDAwMDAwCisJZGMubAkkZmY5NDIyMmUsJGZmOTQwMjgxLCQ3ZTAwMDAwMCwkZTA4MWUwODEKKwlkYy5sCSRlODgxZDFjMSwkZjIyZTQ4MDAsJGZmODQyZDdjLCQzZmZmMDAwMAorCWRjLmwJJGZmOTA0MmFlLCRmZjk4ZjIyZSwkNDgyOGZmOTAsJGYyMjdlMDBjCisJZGMubAkkZjIxMDQ4MjMsJGYyM2E0OGEzLCRmNmM4ZjIwMCwkMDEwMGYyMDAKKwlkYy5sCSQwOTIzZjIyZSwkNjg4MGZmODQsJGYyMDAwOTgwLCRmMjAwMDg4MAorCWRjLmwJJGYyM2E1NGEzLCRmNmNjZjIzYSwkNTUyM2Y2Y2UsJGYyM2E1NGEyCisJZGMubAkkZjZkMGYyM2EsJDU1MjJmNmQyLCRmMjAwMGNhMywkZjIwMDBkMjMKKwlkYy5sCSRmMjNhNTRhMiwkZjZjY2YyM2EsJDU1MjJmNmNlLCRmMjAwMGNhMworCWRjLmwJJGQxZmMwMDAwLCQwMDEwZjIwMCwkMGQyM2YyMDAsJDAwYTNmMjAwCisJZGMubAkkMDgyMmYyMTAsJDQ4YTJmMjFmLCRkMDMwZjIwMCwkMDQyMmYyMDAKKwlkYy5sCSQ5MDAwZjIyZSwkNDgyMmZmODQsJDYwZmYwMDAwLCQxMGNjZjIzYworCWRjLmwJJDU4MzgwMDAxLCRmMmMxMDAwMCwkMTMxOGYyMDAsJDAwODBmMjNhCisJZGMubAkkNDRhOGY2NGUsJGYyM2E0NDIyLCRmNjQ4ZjIwMCwkMDRhMmYyMDAKKwlkYy5sCSQwMGEwZjIyNywkZTAwY2YyMDAsJDA0MDBmMjAwLCQwMDIzZjIyZQorCWRjLmwJJDY4ODBmZjg0LCRmMjAwMDA4MCwkZjIwMDA0YTMsJGYyM2E1NTgwCisJZGMubAkkZjY2MGYyM2EsJDU1MDBmNjYyLCRmMjAwMDVhMywkZjIwMDA1MjMKKwlkYy5sCSRmMjNhNTVhMiwkZjY1Y2YyM2EsJDU1MjJmNjVlLCRmMjAwMGNhMworCWRjLmwJJGYyMDAwMTIzLCRmMjNhNTRhMiwkZjY1OGYyMmUsJDQ4MjNmZjg0CisJZGMubAkkZjIwMDA4YTIsJGYyMWZkMDMwLCRmMjAwMDQyMywkZjIwMDkwMDAKKwlkYy5sCSRmMjJlNDgyMiwkZmY4NDYwZmYsJDAwMDAxMDNlLCQ2MGZmMDAwMAorCWRjLmwJJDBlOTYyZDdjLCRmZmZmZmY5YywkZmY1NDQ4ZTcsJDNmMDAyNjEwCisJZGMubAkkMjgyODAwMDQsJDJhMjgwMDA4LCQ0MjgyNGE4NCwkNjYzNDI4MDUKKwlkYy5sCSQ0Mjg1NzQyMCwkNDI4NmVkYzQsJDYwMDBlZGFjLCRkNDg2MmQ0MworCWRjLmwJJGZmODQyZDQ0LCRmZjg4MmQ0NSwkZmY4YzQ0ODIsJDJkNDJmZjU0CisJZGMubAkkZjIyZTQ4MDAsJGZmODQ0Y2RmLCQwMGZjNDFlZSwkZmY4NDYwMDAKKwlkYy5sCSRmZTBjNDI4NiwkZWRjNDYwMDAsJDI0MDZlZGFjLCQyZTA1ZWRhZAorCWRjLmwJJDQ0ODYwNjg2LCQwMDAwMDAyMCwkZWNhZjg4ODcsJDJkNDNmZjg0CisJZGMubAkkMmQ0NGZmODgsJDJkNDVmZjhjLCQ0NDgyMmQ0MiwkZmY1NGYyMmUKKwlkYy5sCSQ0ODAwZmY4NCwkNGNkZjAwZmMsJDQxZWVmZjg0LCQ2MDAwZmRjZQorCWRjLmwJJGYyMTA0ODAwLCRmMjAwMDAxOCwkZjIzYTQ4MzgsJGY1YTRmMjkyCisJZGMubAkkMDAxNGYyMDAsJDkwMDAxMjNjLCQwMDAzZjIxMCwkNDgwMDYwZmYKKwlkYy5sCSQwMDAwMGY3ZSwkZjIxMDQ4MDAsJDJkN2MwMDAwLCQwMDAwZmY1NAorCWRjLmwJJGYyMDAwMDgwLCRmMjNhNDQyMiwkZjUwOGYyMmUsJDY4MDBmZjg0CisJZGMubAkkM2Q2ZWZmODgsJGZmODYyMjJlLCRmZjg0MGM4MSwkMDAwMDAwMDAKKwlkYy5sCSQ2ZjAwMDBkYSwkMGM4MTNmZmUsJDgwMDA2ZDAwLCRmZGEyMGM4MQorCWRjLmwJJDNmZmZjMDAwLCQ2ZTAwZmQ5OCwkMGM4MTNmZmUsJGYwN2Q2ZDAwCisJZGMubAkkMDAxYTBjODEsJDNmZmY4ODQxLCQ2ZTAwMDAxMCwkZjIwMDA0YTIKKwlkYy5sCSRmMjNhNDQyMiwkZjRiYzYwMDAsJGZlNzYyZDZlLCRmZjg4ZmY5NAorCWRjLmwJJDAyYWVmZTAwLCQwMDAwZmY5NCwkMDBhZTAxMDAsJDAwMDBmZjk0CisJZGMubAkkMGM4MTNmZmYsJDgwMDA2YzQ0LCRmMjNhNDQwMCwkZjRmYzJkN2MKKwlkYy5sCSQzZmZmMDAwMCwkZmY5MDQyYWUsJGZmOThmMjJlLCQ0ODI4ZmY5MAorCWRjLmwJJDIyMmVmZjk0LCQwMjgxN2UwMCwkMDAwMGUwODEsJGUwODFlODgxCisJZGMubAkkZjIwMDA0YTIsJGYyMjdlMDBjLCRmMjAwMDQyMiwkNDFmYWY0ZTIKKwlkYy5sCSRkMWMxZjIzYSwkNDQ4MGY0NjYsJDYwMDBmZDc2LCRmMjNhNDQwMAorCWRjLmwJJGY0NTAyZDdjLCQzZmZmMDAwMCwkZmY5MDQyYWUsJGZmOThmMjJlCisJZGMubAkkNDgyOGZmOTAsJDIyMmVmZjk0LCQwMjgxN2UwMCwkMDAwMGUwODEKKwlkYy5sCSRlMDgxZTg4MSwkZjIwMDA0MjIsJGYyMjdlMDBjLCQ0MWZhZjRhMgorCWRjLmwJJGQxYzFmMjNhLCQ0NDgwZjQxZSwkNjAwMGZkMzYsJDBjODEwMDAwCisJZGMubAkkMDAwMDZkMTAsJGYyM2E0NDAwLCRmNDE0ZjIwMCwkOTAwMDYwZmYKKwlkYy5sCSQwMDAwMGM0ZSwkZjIzYTQ0MDAsJGYzZmNmMjAwLCQ5MDAwNjBmZgorCWRjLmwJJDAwMDAwY2I0LCQ2MGZmMDAwMCwkMGU5NjIyMTAsJDMyMjgwMDA0CisJZGMubAkkMDI4MTdmZmYsJGZmZmYwYzgxLCQzZmZmODAwMCwkNmM1NmYyMTAKKwlkYy5sCSQ0ODE4ZjIwMCwkMDA4MGYyMDAsJDA0OWFmMjAwLCQwMDIyZjIzYworCWRjLmwJJDQ0YTIzZjgwLCQwMDAwZjIwMCwkMDQyMDIyMTAsJDAyODE4MDAwCisJZGMubAkkMDAwMDAwODEsJDNmMDAwMDAwLCQyZjAxMmYwMCwkNDI4MGYyMjcKKwlkYy5sCSRlMDAxNDFkNywkNjFmZmZmZmYsJGZlNWFkZmZjLCQwMDAwMDAwYworCWRjLmwJJDIwMWZmMjAwLCQ5MDAwMTIzYywkMDAwMGYyMWYsJDQ0MjM2MGZmCisJZGMubAkkMDAwMDBkZGUsJGYyMTA0ODE4LCRmMjNjNDQzOCwkM2Y4MDAwMDAKKwlkYy5sCSRmMmQyMDAwMCwkMGMzMjYwZmYsJDAwMDAwYmI2LCQ2MGZmMDAwMAorCWRjLmwJJDBlMGUzZmZkLCQwMDAwZGU1YiwkZDhhOTM3MjgsJDcxOTUwMDAwCisJZGMubAkkMDAwMDNmZmYsJDAwMDBiOGFhLCQzYjI5NWMxNywkZjBiYzAwMDAKKwlkYy5sCSQwMDAwZjIzYywkNTgwMDAwMDEsJGYyMTA0ODM4LCRmMmMxMDAwMAorCWRjLmwJJDBmZjAyMjEwLCQ2ZDAwMDA5MCwkMmYwMDQyODAsJDYxZmZmZmZmCisJZGMubAkkZmJhMmYyMWYsJDkwMDBmMjNhLCQ0ODIzZmZiOCwkNjBmZjAwMDAKKwlkYy5sCSQwZDc4MjIxMCwkNmQwMDAwNzAsJDJmMDA0MjgwLCQ2MWZmZmZmZgorCWRjLmwJJGZkMzRmMjFmLCQ5MDAwZjIzYSwkNDgyM2ZmOTgsJDYwZmYwMDAwCisJZGMubAkkMGQ2ODIyMTAsJDZkMDAwMDUwLCQyMjI4MDAwOCwkNjYyZTIyMjgKKwlkYy5sCSQwMDA0MDI4MSwkN2ZmZmZmZmYsJDY2MjIzMjEwLCQwMjgxMDAwMAorCWRjLmwJJDdmZmYwNDgxLCQwMDAwM2ZmZiwkNjdmZjAwMDAsJDBmODRmMjAwCisJZGMubAkkOTAwMGYyMDEsJDQwMDA2MGZmLCQwMDAwMGQxZSwkMmYwMDQyODAKKwlkYy5sCSQ2MWZmZmZmZiwkZmIyZWYyMWYsJDkwMDBmMjNhLCQ0ODIzZmY1NAorCWRjLmwJJDYwZmYwMDAwLCQwZDA0NjBmZiwkMDAwMDBiNWMsJDIyMTA2ZDAwCisJZGMubAkkZmZmNjJmMDAsJDQyODA2MWZmLCRmZmZmZmNiYSwkZjIxZjkwMDAKKwlkYy5sCSRmMjNhNDgyMywkZmYyZTYwZmYsJDAwMDAwY2VlLCQ0MDZhOTM0ZgorCWRjLmwJJDA5NzlhMzcxLCQzZjczNDQxMywkNTA5ZjgwMDAsJGJmY2QwMDAwCisJZGMubAkkYzAyMTlkYzEsJGRhOTk0ZmQyLCQwMDAwMDAwMCwkNDAwMDAwMDAKKwlkYy5sCSQ5MzVkOGRkZCwkYWFhOGFjMTcsJDAwMDAwMDAwLCQzZmZlMDAwMAorCWRjLmwJJGIxNzIxN2Y3LCRkMWNmNzlhYywkMDAwMDAwMDAsJDNmNTZjMTZkCisJZGMubAkkNmY3YmQwYjIsJDNmODExMTEyLCQzMDJjNzEyYywkM2ZhNTU1NTUKKwlkYy5sCSQ1NTU1NGNjMSwkM2ZjNTU1NTUsJDU1NTU0YTU0LCQzZmUwMDAwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDNmZmYwMDAwCisJZGMubAkkODAwMDAwMDAsJDAwMDAwMDAwLCQzZjczODAwMCwkM2ZmZjAwMDAKKwlkYy5sCSQ4MTY0ZDFmMywkYmMwMzA3NzMsJDNmYmVmN2NhLCQzZmZmMDAwMAorCWRjLmwJJDgyY2Q4Njk4LCRhYzJiYTFkNywkM2ZiZGY4YTksJDNmZmYwMDAwCisJZGMubAkkODQzYTI4YzMsJGFjZGU0MDQ2LCQzZmJjZDdjOSwkM2ZmZjAwMDAKKwlkYy5sCSQ4NWFhYzM2NywkY2M0ODdiMTUsJGJmYmRlOGRhLCQzZmZmMDAwMAorCWRjLmwJJDg3MWY2MTk2LCQ5ZThkMTAxMCwkM2ZiZGU4NWMsJDNmZmYwMDAwCisJZGMubAkkODg5ODBlODAsJDkyZGE4NTI3LCQzZmJlYmJmMSwkM2ZmZjAwMDAKKwlkYy5sCSQ4YTE0ZDU3NSwkNDk2ZWZkOWEsJDNmYmI4MGNhLCQzZmZmMDAwMAorCWRjLmwJJDhiOTVjMWUzLCRlYThiZDZlNywkYmZiYTgzNzMsJDNmZmYwMDAwCisJZGMubAkkOGQxYWRmNWIsJDdlNWJhOWU2LCRiZmJlOTY3MCwkM2ZmZjAwMDAKKwlkYy5sCSQ4ZWE0Mzk4YiwkNDVjZDUzYzAsJDNmYmRiNzAwLCQzZmZmMDAwMAorCWRjLmwJJDkwMzFkYzQzLCQxNDY2YjFkYywkM2ZiZWVlYjAsJDNmZmYwMDAwCisJZGMubAkkOTFjM2QzNzMsJGFiMTFjMzM2LCQzZmJiZmQ2ZCwkM2ZmZjAwMDAKKwlkYy5sCSQ5MzVhMmIyZiwkMTNlNmU5MmMsJGJmYmRiMzE5LCQzZmZmMDAwMAorCWRjLmwJJDk0ZjRlZmE4LCRmZWY3MDk2MSwkM2ZiZGJhMmIsJDNmZmYwMDAwCisJZGMubAkkOTY5NDJkMzcsJDIwMTg1YTAwLCQzZmJlOTFkNSwkM2ZmZjAwMDAKKwlkYy5sCSQ5ODM3ZjA1MSwkOGRiOGE5NmYsJDNmYmU4ZDVhLCQzZmZmMDAwMAorCWRjLmwJJDk5ZTA0NTkzLCQyMGI3ZmE2NSwkYmZiY2RlN2IsJDNmZmYwMDAwCisJZGMubAkkOWI4ZDM5YjksJGQ1NGU1NTM5LCRiZmJlYmFhZiwkM2ZmZjAwMDAKKwlkYy5sCSQ5ZDNlZDlhNywkMmNmZmI3NTEsJGJmYmQ4NmRhLCQzZmZmMDAwMAorCWRjLmwJJDllZjUzMjYwLCQ5MWExMTFhZSwkYmZiZWJlZGQsJDNmZmYwMDAwCisJZGMubAkkYTBiMDUxMGYsJGI5NzE0ZmMyLCQzZmJjYzk2ZSwkM2ZmZjAwMDAKKwlkYy5sCSRhMjcwNDMwMywkMGM0OTY4MTksJGJmYmVjOTBiLCQzZmZmMDAwMAorCWRjLmwJJGE0MzUxNWFlLCQwOWU2ODA5ZSwkM2ZiYmQxZGIsJDNmZmYwMDAwCisJZGMubAkkYTVmZWQ2YTksJGIxNTEzOGVhLCQzZmJjZTVlYiwkM2ZmZjAwMDAKKwlkYy5sCSRhN2NkOTNiNCwkZTk2NTM1NmEsJGJmYmVjMjc0LCQzZmZmMDAwMAorCWRjLmwJJGE5YTE1YWI0LCRlYTdjMGVmOCwkM2ZiZWE4M2MsJDNmZmYwMDAwCisJZGMubAkkYWI3YTM5YjUsJGE5M2VkMzM3LCQzZmJlY2IwMCwkM2ZmZjAwMDAKKwlkYy5sCSRhZDU4M2VlYSwkNDJhMTRhYzYsJDNmYmU5MzAxLCQzZmZmMDAwMAorCWRjLmwJJGFmM2I3OGFkLCQ2OTBhNDM3NSwkYmZiZDgzNjcsJDNmZmYwMDAwCisJZGMubAkkYjEyM2Y1ODEsJGQyYWMyNTkwLCRiZmJlZjA1ZiwkM2ZmZjAwMDAKKwlkYy5sCSRiMzExYzQxMiwkYTkxMTI0ODksJDNmYmRmYjNjLCQzZmZmMDAwMAorCWRjLmwJJGI1MDRmMzMzLCRmOWRlNjQ4NCwkM2ZiZWIyZmIsJDNmZmYwMDAwCisJZGMubAkkYjZmZDkxZTMsJDI4ZDE3NzkxLCQzZmJhZTJjYiwkM2ZmZjAwMDAKKwlkYy5sCSRiOGZiYWY0NywkNjJmYjllZTksJDNmYmNkYzNjLCQzZmZmMDAwMAorCWRjLmwJJGJhZmY1YWIyLCQxMzNlNDVmYiwkM2ZiZWU5YWEsJDNmZmYwMDAwCisJZGMubAkkYmQwOGEzOWYsJDU4MGMzNmJmLCRiZmJlYWVmZCwkM2ZmZjAwMDAKKwlkYy5sCSRiZjE3OTliNiwkN2E3MzEwODMsJGJmYmNiZjUxLCQzZmZmMDAwMAorCWRjLmwJJGMxMmM0Y2NhLCQ2NjcwOTQ1NiwkM2ZiZWY4OGEsJDNmZmYwMDAwCisJZGMubAkkYzM0NmNjZGEsJDI0OTc2NDA3LCQzZmJkODNiMiwkM2ZmZjAwMDAKKwlkYy5sCSRjNTY3MmExMSwkNTUwNmRhZGQsJDNmYmRmOGFiLCQzZmZmMDAwMAorCWRjLmwJJGM3OGQ3NGM4LCRhYmI5YjE1ZCwkYmZiZGZiMTcsJDNmZmYwMDAwCisJZGMubAkkYzliOWJkODYsJDZlMmYyN2EzLCRiZmJlZmUzYywkM2ZmZjAwMDAKKwlkYy5sCSRjYmVjMTRmZSwkZjI3MjdjNWQsJGJmYmJiNmY4LCQzZmZmMDAwMAorCWRjLmwJJGNlMjQ4YzE1LCQxZjg0ODBlNCwkYmZiY2VlNTMsJDNmZmYwMDAwCisJZGMubAkkZDA2MzMzZGEsJGVmMmIyNTk1LCRiZmJkYTRhZSwkM2ZmZjAwMDAKKwlkYy5sCSRkMmE4MWQ5MSwkZjEyYWU0NWEsJDNmYmM5MTI0LCQzZmZmMDAwMAorCWRjLmwJJGQ0ZjM1YWFiLCRjZmVkZmExZiwkM2ZiZWIyNDMsJDNmZmYwMDAwCisJZGMubAkkZDc0NGZjY2EsJGQ2OWQ2YWY0LCQzZmJkZTY5YSwkM2ZmZjAwMDAKKwlkYy5sCSRkOTlkMTVjMiwkNzhhZmQ3YjYsJGJmYjhiYzYxLCQzZmZmMDAwMAorCWRjLmwJJGRiZmJiNzk3LCRkYWYyMzc1NSwkM2ZiZGY2MTAsJDNmZmYwMDAwCisJZGMubAkkZGU2MGY0ODIsJDVlMGU5MTI0LCRiZmJkOGJlMSwkM2ZmZjAwMDAKKwlkYy5sCSRlMGNjZGVlYywkMmE5NGUxMTEsJDNmYmFjYjEyLCQzZmZmMDAwMAorCWRjLmwJJGUzM2Y4OTcyLCRiZThhNWE1MSwkM2ZiYjliZmUsJDNmZmYwMDAwCisJZGMubAkkZTViOTA2ZTcsJDdjODM0OGE4LCQzZmJjZjJmNCwkM2ZmZjAwMDAKKwlkYy5sCSRlODM5NmE1MCwkM2M0YmRjNjgsJDNmYmVmMjJmLCQzZmZmMDAwMAorCWRjLmwJJGVhYzBjNmU3LCRkZDI0MzkyZiwkYmZiZGJmNGEsJDNmZmYwMDAwCisJZGMubAkkZWQ0ZjMwMWUsJGQ5OTQyYjg0LCQzZmJlYzAxYSwkM2ZmZjAwMDAKKwlkYy5sCSRlZmU0Yjk5YiwkZGNkYWY1Y2IsJDNmYmU4Y2FjLCQzZmZmMDAwMAorCWRjLmwJJGYyODE3NzNjLCQ1OWZmYjEzYSwkYmZiY2JiM2YsJDNmZmYwMDAwCisJZGMubAkkZjUyNTdkMTUsJDI0ODZjYzJjLCQzZmJlZjczYSwkM2ZmZjAwMDAKKwlkYy5sCSRmN2QwZGY3MywkMGFkMTNiYjksJGJmYjhiNzk1LCQzZmZmMDAwMAorCWRjLmwJJGZhODNiMmRiLCQ3MjJhMDMzYSwkM2ZiZWY4NGIsJDNmZmYwMDAwCisJZGMubAkkZmQzZTBjMGMsJGY0ODZjMTc1LCRiZmJlZjU4MSwkZjIxMGQwODAKKwlkYy5sCSQyMjEwMzIyOCwkMDAwNGYyMmUsJDY4MDBmZjg0LCQwMjgxN2ZmZgorCWRjLmwJJGZmZmYwYzgxLCQzZmI5ODAwMCwkNmMwNDYwMDAsJDAwODgwYzgxCisJZGMubAkkNDAwZDgwYzAsJDZmMDQ2MDAwLCQwMDdjZjIwMCwkMDA4MGYyM2MKKwlkYy5sCSQ0NGEzNDI4MCwkMDAwMGYyMmUsJDYwODBmZjU0LCQyZjAyNDNmYQorCWRjLmwJJGZiYmNmMjJlLCQ0MDgwZmY1NCwkMjIyZWZmNTQsJDI0MDEwMjgxCisJZGMubAkkMDAwMDAwM2YsJGU5ODFkM2MxLCRlYzgyMjIwMiwkZTI4MTk0ODEKKwlkYy5sCSQwNjgyMDAwMCwkM2ZmZmYyMjcsJGUwMGNmMjNjLCQ0NGEzM2M4MAorCWRjLmwJJDAwMDAyZDU5LCRmZjg0MmQ1OSwkZmY4ODJkNTksJGZmOGMzZDU5CisJZGMubAkkZmY5MGYyMDAsJDA0MjgzZDU5LCRmZjk0NDI2ZSwkZmY5NjQyYWUKKwlkYy5sCSRmZjk4ZDM2ZSwkZmY4NGYyM2EsJDQ4MjNmYjIyLCRkMzZlZmY5MAorCWRjLmwJJDYwMDAwMTAwLCQwYzgxM2ZmZiwkODAwMDZlMTIsJGYyMDA5MDAwCisJZGMubAkkZjIzYzQ0MjIsJDNmODAwMDAwLCQ2MGZmMDAwMCwkMDdiNDIyMmUKKwlkYy5sCSRmZjg0MGM4MSwkMDAwMDAwMDAsJDZkMDY2MGZmLCQwMDAwMDc2NAorCWRjLmwJJDYwZmYwMDAwLCQwNjY2ZjIwMCwkOTAwMGYyM2MsJDQ0MDAzZjgwCisJZGMubAkkMDAwMDIyMTAsJDAwODEwMDgwLCQwMDAxZjIwMSwkNDQyMjYwZmYKKwlkYy5sCSQwMDAwMDc3ZSwkZjIxMGQwODAsJDIyMTAzMjI4LCQwMDA0ZjIyZQorCWRjLmwJJDY4MDBmZjg0LCQwMjgxN2ZmZiwkZmZmZjBjODEsJDNmYjk4MDAwCisJZGMubAkkNmMwNDYwMDAsJGZmOTAwYzgxLCQ0MDBiOWIwNywkNmYwNDYwMDAKKwlkYy5sCSRmZjg0ZjIwMCwkMDA4MGYyM2EsJDU0YTNmYTYyLCRmMjJlNjA4MAorCWRjLmwJJGZmNTQyZjAyLCQ0M2ZhZmFjNiwkZjIyZTQwODAsJGZmNTQyMjJlCisJZGMubAkkZmY1NDI0MDEsJDAyODEwMDAwLCQwMDNmZTk4MSwkZDNjMWVjODIKKwlkYy5sCSQyMjAyZTI4MSwkOTQ4MTA2ODIsJDAwMDAzZmZmLCRmMjI3ZTAwYworCWRjLmwJJGYyMDAwNTAwLCRmMjNhNTRhMywkZmEyYzJkNTksJGZmODRmMjNhCisJZGMubAkkNDkyM2ZhMmEsJDJkNTlmZjg4LCQyZDU5ZmY4YywkZjIwMDA0MjgKKwlkYy5sCSQzZDU5ZmY5MCwkZjIwMDA4MjgsJDNkNTlmZjk0LCQ0MjZlZmY5NgorCWRjLmwJJDQyYWVmZjk4LCRmMjNhNDgyMywkZmExNGQzNmUsJGZmODRkMzZlCisJZGMubAkkZmY5MGYyMDAsJDAwODBmMjAwLCQwNGEzZjIzYSwkNTUwMGZhMWUKKwlkYy5sCSRmMjNhNTU4MCwkZmEyMGYyMDAsJDA1MjNmMjAwLCQwNWEzZjIzYQorCWRjLmwJJDU1MjJmYTFhLCRmMjNhNTVhMiwkZmExY2YyMDAsJDA1MjNmMjAwCisJZGMubAkkMDVhM2YyM2EsJDU1MjJmYTE2LCRmMjAwMDFhMywkZjIwMDA1MjMKKwlkYy5sCSRmMjAwMGMyMiwkZjIwMDA4MjIsJGYyMWZkMDMwLCRmMjJlNDgyMworCWRjLmwJJGZmODRmMjJlLCQ0ODIyZmY5MCwkZjIyZTQ4MjIsJGZmODRmMjAwCisJZGMubAkkOTAwMDNkNDIsJGZmODQyNDFmLCQyZDdjODAwMCwkMDAwMGZmODgKKwlkYy5sCSQ0MmFlZmY4YywkMTIzYzAwMDAsJGYyMmU0ODIzLCRmZjg0NjBmZgorCWRjLmwJJDAwMDAwNjNlLCRmMjAwOTAwMCwkZjIzYzQ0MDAsJDNmODAwMDAwCisJZGMubAkkMjIxMDAwODEsJDAwODAwMDAxLCRmMjAxNDQyMiwkNjBmZjAwMDAKKwlkYy5sCSQwNjMwMmYwMCwkMzIyOTAwMDAsJDViZWVmZjU0LCQwMjgxMDAwMAorCWRjLmwJJDdmZmYzMDI4LCQwMDAwMDI0MCwkN2ZmZjBjNDAsJDNmZmY2ZDAwCisJZGMubAkkMDBjMDBjNDAsJDQwMGM2ZTAwLCQwMGE0ZjIyOCwkNDgwMzAwMDAKKwlkYy5sCSRmMjAwNjAwMCwkZjIzYzg4MDAsJDAwMDAwMDAwLCQ0YTI5MDAwNAorCWRjLmwJJDZiNWUyZjAwLCQzZDY5MDAwMCwkZmY4NDJkNjksJDAwMDRmZjg4CisJZGMubAkkMmQ2OTAwMDgsJGZmOGM0MWVlLCRmZjg0NjFmZiwkMDAwMDBiMmEKKwlkYy5sCSQ0NDgwZDA5ZiwkZjIyZWQwODAsJGZmODQwYzQwLCRjMDAxNmMzNgorCWRjLmwJJGYyMWY5MDAwLCQyMjNjODAwMCwkMDAwMDA0ODAsJGZmZmZjMDAxCisJZGMubAkkNDQ4MDBjMDAsJDAwMjA2YzBhLCRlMGE5NDJhNywkMmYwMTQyYTcKKwlkYy5sCSQ2MDI4MDQwMCwkMDAyMGUwYTksJDJmMDE0MmE3LCQ0MmE3NjAxYQorCWRjLmwJJGYyMjlkMDgwLCQwMDAwZjIxZiwkOTAwMDA2NDAsJDNmZmY0ODQwCisJZGMubAkkNDJhNzJmM2MsJDgwMDAwMDAwLCQyZjAwZjIwMCwkYjAwMDEyM2MKKwlkYy5sCSQwMDAwZjIxZiwkNDgyMzYwZmYsJDAwMDAwNTRjLCQyMDFmYzE0OQorCWRjLmwJJDRhMjkwMDAwLCQ2YmZmMDAwMCwkMDQxYzYwZmYsJDAwMDAwNDY0CisJZGMubAkkNGEyOTAwMDQsJDZhMTYyMDFmLCRmMjAwOTAwMCwkMTIzYzAwMDMKKwlkYy5sCSRmMjI5NDgwMCwkMDAwMDYwZmYsJDAwMDAwNTFjLCQyMDFmMjA0OQorCWRjLmwJJDYwZmYwMDAwLCQwNTg2MDAwMSwkMDAwMDgwMDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDAwMDA0MjJlLCRmZjY1MmYwMCwkNDIyZWZmNWMKKwlkYy5sCSQ2MDBjNDIyZSwkZmY2NTJmMDAsJDFkN2MwMDAxLCRmZjVjNDhlNworCWRjLmwJJDNmMDAzNjI4LCQwMDAwM2Q0MywkZmY1ODAyODMsJDAwMDA3ZmZmCisJZGMubAkkMjgyODAwMDQsJDJhMjgwMDA4LCQ0YTgzNjYzYywkMjYzYzAwMDAKKwlkYy5sCSQzZmZlNGE4NCwkNjYxNjI4MDUsJDQyODUwNDgzLCQwMDAwMDAyMAorCWRjLmwJJDQyODZlZGM0LCQ2MDAwZWRhYywkOTY4NjYwMjIsJDQyODZlZGM0CisJZGMubAkkNjAwMDk2ODYsJGVkYWMyZTA1LCRlZGFkNDQ4NiwkMDY4NjAwMDAKKwlkYy5sCSQwMDIwZWNhZiwkODg4NzYwMDYsJDA2ODMwMDAwLCQzZmZlMzAyOQorCWRjLmwJJDAwMDAzZDQwLCRmZjVhMzIyZSwkZmY1OGIxODEsJDAyODEwMDAwCisJZGMubAkkODAwMDNkNDEsJGZmNWUwMjgwLCQwMDAwN2ZmZiwkMjIyOTAwMDQKKwlkYy5sCSQyNDI5MDAwOCwkNGE4MDY2M2MsJDIwM2MwMDAwLCQzZmZlNGE4MQorCWRjLmwJJDY2MTYyMjAyLCQ0MjgyMDQ4MCwkMDAwMDAwMjAsJDQyODZlZGMxCisJZGMubAkkNjAwMGVkYTksJDkwODY2MDIyLCQ0Mjg2ZWRjMSwkNjAwMDkwODYKKwlkYy5sCSRlZGE5MmUwMiwkZWRhYTQ0ODYsJDA2ODYwMDAwLCQwMDIwZWNhZgorCWRjLmwJJDgyODc2MDA2LCQwNjgwMDAwMCwkM2ZmZTJkNDMsJGZmNTQyZjAwCisJZGMubAkkOTA4MzQyODYsJDQyODMyMjdjLCQwMDAwMDAwMCwkNGE4MDZjMDYKKwlkYy5sCSQyMDFmNjAwMCwkMDA2YTU4OGYsJDRhODY2ZTBlLCRiMjg0NjYwOAorCWRjLmwJJGI0ODU2NjA0LCQ2MDAwMDEzNiwkNjUwODk0ODUsJDkzODQ0Mjg2CisJZGMubAkkNTI4MzRhODAsJDY3MGVkNjgzLCRkNDgyZTM5MSwkNTVjNjUyODkKKwlkYy5sCSQ1MzgwNjBkNCwkMjAyZWZmNTQsJDRhODE2NjE2LCQyMjAyNDI4MgorCWRjLmwJJDA0ODAwMDAwLCQwMDIwNDI4NiwkZWRjMTYwMDAsJGVkYTk5MDg2CisJZGMubAkkNjAxYzQyODYsJGVkYzE2MDAwLCQ2YjE0OTA4NiwkZWRhOTJlMDIKKwlkYy5sCSRlZGFhNDQ4NiwkMDY4NjAwMDAsJDAwMjBlY2FmLCQ4Mjg3MGM4MAorCWRjLmwJJDAwMDA0MWZlLCQ2YzJhM2Q0MCwkZmY5MDJkNDEsJGZmOTQyZDQyCisJZGMubAkkZmY5ODJjMmUsJGZmNTQzZDQ2LCRmZjg0MmQ0NCwkZmY4ODJkNDUKKwlkYy5sCSRmZjhjZjIyZSwkNDgwMGZmOTAsJDFkN2MwMDAxLCRmZjVkNjAzNgorCWRjLmwJJDJkNDFmZjk0LCQyZDQyZmY5OCwkMDQ4MDAwMDAsJDNmZmUzZDQwCisJZGMubAkkZmY5MDJjMmUsJGZmNTQwNDg2LCQwMDAwM2ZmZSwkMmQ0NmZmNTQKKwlkYy5sCSRmMjJlNDgwMCwkZmY5MDNkNDYsJGZmODQyZDQ0LCRmZjg4MmQ0NQorCWRjLmwJJGZmOGM0MjJlLCRmZjVkNGEyZSwkZmY1YzY3MjIsJDJjMmVmZjU0CisJZGMubAkkNTM4NmIwODYsJDZkMTg2ZTBlLCRiMjg0NjYwOCwkYjQ4NTY2MDQKKwlkYy5sCSQ2MDAwMDA3YSwkNjUwOGYyMmUsJDQ4MjhmZjg0LCQ1MjgzM2MyZQorCWRjLmwJJGZmNWE2YzA0LCRmMjAwMDAxYSwkNDI4NjNjMmUsJGZmNWU3ZTA4CisJZGMubAkkZWVhZTAyODMsJDAwMDAwMDdmLCQ4Njg2MWQ0MywkZmY2NTRjZGYKKwlkYy5sCSQwMGZjMjAxZiwkZjIwMDkwMDAsJDRhMmVmZjVkLCQ2NzEwMTIzYworCWRjLmwJJDAwMDBmMjNhLCQ0ODIzZmRjMCwkNjBmZjAwMDAsJDAyY2ExMjNjCisJZGMubAkkMDAwM2YyMDAsJDAwMDA2MGZmLCQwMDAwMDJiYywkNTI4MzBjODAKKwlkYy5sCSQwMDAwMDAwOCwkNmMwNGUxYWIsJDYwMDI0MjgzLCRmMjNjNDQwMAorCWRjLmwJJDAwMDAwMDAwLCQ0MjJlZmY1ZCwkNjAwMGZmOTQsJDJjMDMwMjg2CisJZGMubAkkMDAwMDAwMDEsJDRhODY2NzAwLCRmZjg2NTI4MywkM2MyZWZmNWEKKwlkYy5sCSQwYTg2MDAwMCwkODAwMDNkNDYsJGZmNWE2MDAwLCRmZjcyMzAyOAorCWRjLmwJJDAwMDAwMjQwLCQ3ZmZmMGM0MCwkN2ZmZjY3MzgsJDA4MjgwMDA3CisJZGMubAkkMDAwNDY3MDYsJDEwM2MwMDAwLCQ0ZTc1NGE0MCwkNjYxODRhYTgKKwlkYy5sCSQwMDA0NjYwYywkNGFhODAwMDgsJDY2MDYxMDNjLCQwMDAxNGU3NQorCWRjLmwJJDEwM2MwMDA0LCQ0ZTc1NjFmZiwkMDAwMDA3ZjYsJDRlNzUxMDNjCisJZGMubAkkMDAwNjRlNzUsJDRhYTgwMDA4LCQ2NjEyMjAyOCwkMDAwNDAyODAKKwlkYy5sCSQ3ZmZmZmZmZiwkNjYwNjEwM2MsJDAwMDI0ZTc1LCQxMDNjMDAwMworCWRjLmwJJDRlNzU3ZmZmLCQwMDAwZmZmZiwkZmZmZmZmZmYsJGZmZmY0YTI4CisJZGMubAkkMDAwMDZhMzgsJDAwYWUwYTAwLCQwNDEwZmY2NCwkMDgyZTAwMDIKKwlkYy5sCSRmZjYyNjYwYSwkZjIzYzQ0MDAsJGZmODAwMDAwLCQ0ZTc1ZjIyZQorCWRjLmwJJGQwODBmZmRjLCRmMjJlOTAwMCwkZmY2MGYyM2MsJDQ0ODBiZjgwCisJZGMubAkkMDAwMGYyM2MsJDQ0YTAwMDAwLCQwMDAwNGU3NSwkMDBhZTAyMDAKKwlkYy5sCSQwNDEwZmY2NCwkMDgyZTAwMDIsJGZmNjI2NjBhLCRmMjNjNDQwMAorCWRjLmwJJDdmODAwMDAwLCQ0ZTc1ZjIyZSwkZDA4MGZmZGMsJGYyMmU5MDAwCisJZGMubAkkZmY2MGYyM2MsJDQ0ODAzZjgwLCQwMDAwZjIzYywkNDRhMDAwMDAKKwlkYy5sCSQwMDAwNGU3NSwkMDBhZTAxMDAsJDIwODBmZjY0LCQwODJlMDAwNQorCWRjLmwJJGZmNjI2NjA4LCRmMjNhZDA4MCwkZmY2YTRlNzUsJGYyMmVkMDgwCisJZGMubAkkZmZkY2YyMmUsJDkwMDBmZjYwLCRmMjI3ZTAwNCwkZjIzYzQ1MDAKKwlkYy5sCSQ3ZjgwMDAwMCwkZjIzYzQ1MjMsJDAwMDAwMDAwLCRmMjFmZDAyMAorCWRjLmwJJDRlNzU3ZmZlLCQwMDAwZmZmZiwkZmZmZmZmZmYsJGZmZmZmZmZlCisJZGMubAkkMDAwMGZmZmYsJGZmZmZmZmZmLCRmZmZmMDAwMCwkMDAwMDgwMDAKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDgwMDAsJDAwMDA4MDAwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDA0YTI4LCQwMDAwNmEyNiwkMDBhZTA4MDAsJDBhMjhmZjY0CisJZGMubAkkZjIyZTkwMDAsJGZmNjBmMjNhLCRkMDgwZmZkYywkZjIzYTQ4MjMKKwlkYy5sCSRmZmNhZjIwMCwkYTgwMGUxOTgsJDFkNDBmZjY0LCQ0ZTc1MDA2ZQorCWRjLmwJJDBhMjhmZjY2LCRmMjJlOTAwMCwkZmY2MGYyM2EsJGQwODBmZmFjCisJZGMubAkkZjIwMDAwMjMsJGYyMDBhODAwLCRlMTk4MWQ0MCwkZmY2NDRlNzUKKwlkYy5sCSQwMGFlMDAwMCwkMTA0OGZmNjQsJDEyMDAwMjAxLCQwMGMwNjcwMAorCWRjLmwJJDAwNWEzZDY4LCQwMDAwZmY4NCwkMmQ2ODAwMDQsJGZmODgyZDY4CisJZGMubAkkMDAwOGZmOGMsJDQxZWVmZjg0LCQ0OGU3YzA4MCwkNjFmZjAwMDAKKwlkYy5sCSQwNjE4NGNkZiwkMDEwMzBjMDEsJDAwNDA2NjEwLCQ0YWE4MDAwOAorCWRjLmwJJDY2MTg0YTI4LCQwMDA3NjYxMiwkNjAwMDAwMjAsJDIyMjgwMDA4CisJZGMubAkkMDI4MTAwMDAsJDA3ZmY2NzAwLCQwMDEyMDBhZSwkMDAwMDAyMDAKKwlkYy5sCSRmZjY0NjAwNiwkMDA2ZTEyNDgsJGZmNjY0YTI4LCQwMDAwNmEyMgorCWRjLmwJJGYyMmU5MDAwLCRmZjYwZjIzYSwkZDA4MGZmMTQsJGYyM2E0ODIzCisJZGMubAkkZmYwMmYyMDAsJGE4MDBlMTk4LCQwMDAwMDAwMCwkMWQ0MGZmNjQKKwlkYy5sCSQ0ZTc1ZjIyZSwkOTAwMGZmNjAsJGYyM2FkMDgwLCRmZWU2ZjIzYQorCWRjLmwJJDQ4MjNmZWUwLCRmMjAwYTgwMCwkZTE5ODFkNDAsJGZmNjQ0ZTc1CisJZGMubAkkMDA2ZTEyNDgsJGZmNjZmMjJlLCQ5MDAwZmY2MCwkZjIzYWQwODAKKwlkYy5sCSRmZWMyZjIzYSwkNDgyM2ZlYmMsJGYyMDBhODAwLCRlMTk4MWQ0MAorCWRjLmwJJGZmNjQ0ZTc1LCRmMjAwYTgwMCwkODFhZWZmNjQsJDYwMjBmMjAwCisJZGMubAkkYTgwMDgxYWUsJGZmNjRmMjk0LCQwMDBlZjI4MSwkMDAzMjAwNmUKKwlkYy5sCSQwMjA4ZmY2NiwkNjAwODAwYWUsJDA4MDAwMjA4LCRmZjY0MDgyZQorCWRjLmwJJDAwMDFmZjYyLCQ2NjAyNGU3NSwkZjIyZTkwMDAsJGZmNjBmMjNjCisJZGMubAkkNDQ4MDNmODAsJDAwMDBmMjNhLCQ0OGEyZmU4MCwkNGU3NTFkN2MKKwlkYy5sCSQwMDA0ZmY2NCwkMDA2ZTAyMDgsJGZmNjY0ZTc1LCRmMjJlOTAwMAorCWRjLmwJJGZmNjBmMjI4LCQ0ODAwMDAwMCwkZjIwMGE4MDAsJDAwODAwMDAwCisJZGMubAkkMGEyODgxYWUsJGZmNjQ0ZTc1LCRmMjJlOTAwMCwkZmY2MGYyMjgKKwlkYy5sCSQ0ODAwMDAwMCwkZjIwMGE4MDAsJDgxYWVmZjY0LCQ0ZTc1NGU3NQorCWRjLmwJJGYyMjk0ODAwLCQwMDAwNGEyOSwkMDAwMDZiMDgsJDFkN2MwMDAxCisJZGMubAkkZmY2NDRlNzUsJDFkN2MwMDA5LCRmZjY0NGU3NSwkZjIyODQ4MDAKKwlkYy5sCSQwMDAwNGEyOCwkMDAwMDZiMDgsJDFkN2MwMDAxLCRmZjY0NGU3NQorCWRjLmwJJDFkN2MwMDA5LCRmZjY0NGU3NSwkZjIyN2IwMDAsJGYyM2M5MDAwCisJZGMubAkkMDAwMDAwMDAsJGYyMmY0NDAwLCQwMDA4ZjIxZiwkOTAwMGYyMmYKKwlkYy5sCSQ0NDIyMDAwOCwkNGU3NWYyMjcsJGIwMDBmMjNjLCQ5MDAwMDAwMAorCWRjLmwJJDAwMDBmMjJmLCQ1NDAwMDAwOCwkZjIxZjkwMDAsJGYyMmY1NDIyCisJZGMubAkkMDAwYzRlNzUsJGYyMmZkMDgwLCQwMDA0ZjIyZiwkNDgyMjAwMTAKKwlkYy5sCSQ0ZTc1ZjIyNywkYjAwMGYyM2MsJDkwMDAwMDAwLCQwMDAwZjIyZgorCWRjLmwJJDQ0MDAwMDA4LCRmMjFmOTAwMCwkZjIyZjQ0MjgsJDAwMDg0ZTc1CisJZGMubAkkZjIyN2IwMDAsJGYyM2M5MDAwLCQwMDAwMDAwMCwkZjIyZjU0MDAKKwlkYy5sCSQwMDA4ZjIxZiwkOTAwMGYyMmYsJDU0MjgwMDBjLCQ0ZTc1ZjIyZgorCWRjLmwJJGQwODAwMDA0LCRmMjJmNDgyOCwkMDAxMDRlNzUsJGYyMjdiMDAwCisJZGMubAkkZjIzYzkwMDAsJDAwMDAwMDAwLCRmMjJmNDQwMCwkMDAwOGYyMWYKKwlkYy5sCSQ5MDAwZjIyZiwkNDQyMzAwMDgsJDRlNzVmMjI3LCRiMDAwZjIzYworCWRjLmwJJDkwMDAwMDAwLCQwMDAwZjIyZiwkNTQwMDAwMDgsJGYyMWY5MDAwCisJZGMubAkkZjIyZjU0MjMsJDAwMGM0ZTc1LCRmMjJmZDA4MCwkMDAwNGYyMmYKKwlkYy5sCSQ0ODIzMDAxMCwkNGU3NWYyMjcsJGIwMDBmMjNjLCQ5MDAwMDAwMAorCWRjLmwJJDAwMDBmMjJmLCQ0NDAwMDAwOCwkZjIxZjkwMDAsJGYyMmY0NDIwCisJZGMubAkkMDAwODRlNzUsJGYyMjdiMDAwLCRmMjNjOTAwMCwkMDAwMDAwMDAKKwlkYy5sCSRmMjJmNTQwMCwkMDAwOGYyMWYsJDkwMDBmMjJmLCQ1NDIwMDAwYworCWRjLmwJJDRlNzVmMjJmLCRkMDgwMDAwNCwkZjIyZjQ4MjAsJDAwMTA0ZTc1CisJZGMubAkkZjIyZjQ0MTgsJDAwMDQ0ZTc1LCRmMjJmNTQxOCwkMDAwNDRlNzUKKwlkYy5sCSRmMjJmNDgxOCwkMDAwNDRlNzUsJGYyMmY0NDFhLCQwMDA0NGU3NQorCWRjLmwJJGYyMmY1NDFhLCQwMDA0NGU3NSwkZjIyZjQ4MWEsJDAwMDQ0ZTc1CisJZGMubAkkZjIyZjQ0MDQsJDAwMDQ0ZTc1LCRmMjJmNTQwNCwkMDAwNDRlNzUKKwlkYy5sCSRmMjJmNDgwNCwkMDAwNDRlNzUsJGYyMmY0NDAxLCQwMDA0NGU3NQorCWRjLmwJJGYyMmY1NDAxLCQwMDA0NGU3NSwkZjIyZjQ4MDEsJDAwMDQ0ZTc1CisJZGMubAkkZjIyZjQ0MDMsJDAwMDQ0ZTc1LCRmMjJmNTQwMywkMDAwNDRlNzUKKwlkYy5sCSRmMjJmNDgwMywkMDAwNDRlNzUsJDRhMjgwMDAwLCQ2YjEwZjIzYworCWRjLmwJJDQ0MDAwMDAwLCQwMDAwMWQ3YywkMDAwNGZmNjQsJDRlNzVmMjNjCisJZGMubAkkNDQwMDgwMDAsJDAwMDAxZDdjLCQwMDBjZmY2NCwkNGU3NTRhMjkKKwlkYy5sCSQwMDAwNmJlYSwkNjBkODRhMjgsJDAwMDA2YjEwLCRmMjNjNDQwMAorCWRjLmwJJDdmODAwMDAwLCQxZDdjMDAwMiwkZmY2NDRlNzUsJGYyM2M0NDAwCisJZGMubAkkZmY4MDAwMDAsJDFkN2MwMDBhLCRmZjY0NGU3NSwkNGEyOTAwMDAKKwlkYy5sCSQ2YmVhNjBkOCwkNGEyODAwMDAsJDZiYTQ2MGQwLCQ0YTI4MDAwMAorCWRjLmwJJDZiMDBmYmEyLCQ2MGM2NGEyOCwkMDAwMDZiMTYsJDYwYmU0YTI4CisJZGMubAkkMDAwMDZiMGUsJGYyM2M0NDAwLCQzZjgwMDAwMCwkNDIyZWZmNjQKKwlkYy5sCSQ0ZTc1ZjIzYywkNDQwMGJmODAsJDAwMDAxZDdjLCQwMDA4ZmY2NAorCWRjLmwJJDRlNzUzZmZmLCQwMDAwYzkwZiwkZGFhMjIxNjgsJGMyMzViZmZmCisJZGMubAkkMDAwMGM5MGYsJGRhYTIyMTY4LCRjMjM1NGEyOCwkMDAwMDZiMGUKKwlkYy5sCSRmMjAwOTAwMCwkZjIzYTQ4MDAsJGZmZGE2MDAwLCRmY2YyZjIwMAorCWRjLmwJJDkwMDBmMjNhLCQ0ODAwZmZkOCwkNjAwMGZjZWMsJGYyM2M0NDgwCisJZGMubAkkM2Y4MDAwMDAsJDRhMjgwMDAwLCQ2YTEwZjIzYywkNDQwMDgwMDAKKwlkYy5sCSQwMDAwMWQ3YywkMDAwY2ZmNjQsJDRlNzVmMjNjLCQ0NDAwMDAwMAorCWRjLmwJJDAwMDAxZDdjLCQwMDA0ZmY2NCwkNGU3NWYyM2EsJDQ4ODBmYTg0CisJZGMubAkkNjAwMGZiMDIsJGYyMjg0ODgwLCQwMDAwNjAwMCwkZmQzMDEyMmUKKwlkYy5sCSRmZjRmNjdmZiwkZmZmZmY3ODIsJDBjMDEwMDAxLCQ2NzAwMDA3OAorCWRjLmwJJDBjMDEwMDAyLCQ2N2ZmZmZmZiwkZmFkZTBjMDEsJDAwMDQ2N2ZmCisJZGMubAkkZmZmZmY3NjYsJDYwZmZmZmZmLCRmY2VhMTIyZSwkZmY0ZjY3ZmYKKwlkYy5sCSRmZmZmZmFjNCwkMGMwMTAwMDEsJDY3ZmZmZmZmLCRmYWJhMGMwMQorCWRjLmwJJDAwMDI2N2ZmLCRmZmZmZmFiMCwkMGMwMTAwMDQsJDY3ZmZmZmZmCisJZGMubAkkZmFhNjYwZmYsJGZmZmZmY2JjLCQxMjJlZmY0ZiwkNjdmZjAwMDAKKwlkYy5sCSQwMDQ0MGMwMSwkMDAwMTY3ZmYsJDAwMDAwMDFlLCQwYzAxMDAwMgorCWRjLmwJJDY3ZmZmZmZmLCRmYTgyMGMwMSwkMDAwNDY3ZmYsJDAwMDAwMDI2CisJZGMubAkkNjBmZmZmZmYsJGZjOGUxMjI4LCQwMDAwMTAyOSwkMDAwMGIxMDEKKwlkYy5sCSQwMjAxMDA4MCwkMWQ0MWZmNjUsJDRhMDA2YTAwLCRmZTUyNjAwMAorCWRjLmwJJGZlNWU0MjJlLCRmZjY1MmYwMCwkMTIyODAwMDAsJDEwMjkwMDAwCisJZGMubAkkYjEwMTAyMDEsJDAwODAxZDQxLCRmZjY1MGMyZSwkMDAwNGZmNGYKKwlkYy5sCSQ2NjBjNDFlOSwkMDAwMDIwMWYsJDYwZmZmZmZmLCRmYzJlZjIxZgorCWRjLmwJJDkwMDBmMjI5LCQ0ODAwMDAwMCwkNGEyOTAwMDAsJDZiMDI0ZTc1CisJZGMubAkkMWQ3YzAwMDgsJGZmNjQ0ZTc1LCQxMjJlZmY0ZiwkNjdmZmZmZmYKKwlkYy5sCSRmNmE0MGMwMSwkMDAwMTY3MDAsJGZmOGUwYzAxLCQwMDAyNjdmZgorCWRjLmwJJGZmZmZmOWY0LCQwYzAxMDAwNCwkNjdmZmZmZmYsJGY2ODg2MGZmCisJZGMubAkkZmZmZmZjMDAsJDEyMmVmZjRmLCQ2N2ZmZmZmZiwkZjlkYTBjMDEKKwlkYy5sCSQwMDAxNjdmZiwkZmZmZmY5ZDAsJDBjMDEwMDAyLCQ2N2ZmZmZmZgorCWRjLmwJJGY5YzYwYzAxLCQwMDA0NjdmZiwkZmZmZmY5YmMsJDYwZmZmZmZmCisJZGMubAkkZmJkMjEyMmUsJGZmNGY2NzAwLCRmZjVhMGMwMSwkMDAwMTY3MDAKKwlkYy5sCSRmZjM2MGMwMSwkMDAwMjY3ZmYsJGZmZmZmOTljLCQwYzAxMDAwNAorCWRjLmwJJDY3ZmZmZmZmLCRmZjQwNjBmZiwkZmZmZmZiYTgsJDEyMmVmZjRmCisJZGMubAkkNjdmZmZmZmYsJGY1MDAwYzAxLCQwMDAxNjdmZiwkZmZmZmZkOTIKKwlkYy5sCSQwYzAxMDAwMiwkNjdmZmZmZmYsJGZkYjYwYzAxLCQwMDA0NjdmZgorCWRjLmwJJGZmZmZmNGUyLCQ2MGZmZmZmZiwkZmI3YTEyMmUsJGZmNGY2N2ZmCisJZGMubAkkZmZmZmY0ZDIsJDBjMDEwMDAxLCQ2N2ZmZmZmZiwkZmQ2NDBjMDEKKwlkYy5sCSQwMDAyNjdmZiwkZmZmZmZkODgsJDBjMDEwMDA0LCQ2N2ZmZmZmZgorCWRjLmwJJGY0YjQ2MGZmLCRmZmZmZmI0YywkMTIyZWZmNGYsJDY3ZmZmZmZmCisJZGMubAkkZjkyNjBjMDEsJDAwMDM2N2ZmLCRmZmZmZmIzOCwkNjBmZmZmZmYKKwlkYy5sCSRmOTE2MTIyZSwkZmY0ZjBjMDEsJDAwMDM2N2ZmLCRmZmZmZmIyNAorCWRjLmwJJDYwZmZmZmZmLCRmYjNhMmYwMiwkMmYwMzIwMjgsJDAwMDQyMjI4CisJZGMubAkkMDAwOGVkYzAsJDIwMDA2NzFhLCRlNWE4ZTljMSwkMzAyMjgwODMKKwlkYy5sCSRlNWE5MjE0MCwkMDAwNDIxNDEsJDAwMDgyMDAyLCQyNjFmMjQxZgorCWRjLmwJJDRlNzVlZGMxLCQyMDAwZTVhOSwkMDY4MjAwMDAsJDAwMjAyMTQxCisJZGMubAkkMDAwNDQyYTgsJDAwMDgyMDAyLCQyNjFmMjQxZiwkNGU3NWVkZTgKKwlkYy5sCSQwMDAwMDAwNCwkNjYwZWVkZTgsJDAwMDAwMDA4LCQ2NzAwMDA3NAorCWRjLmwJJDA2NDAwMDIwLCQ0MjgxMzIyOCwkMDAwMDAyNDEsJDdmZmZiMDQxCisJZGMubAkkNmUxYzkyNDAsJDMwMjgwMDAwLCQwMjQwODAwMCwkODI0MDMxNDEKKwlkYy5sCSQwMDAwNjFmZiwkZmZmZmZmODIsJDEwM2MwMDAwLCQ0ZTc1MGMwMQorCWRjLmwJJDAwMjA2ZTIwLCRlOWU4MDg0MCwkMDAwNDIxNDAsJDAwMDQyMDI4CisJZGMubAkkMDAwOGUzYTgsJDIxNDAwMDA4LCQwMjY4ODAwMCwkMDAwMDEwM2MKKwlkYy5sCSQwMDA0NGU3NSwkMDQ0MTAwMjAsJDIwMjgwMDA4LCRlM2E4MjE0MAorCWRjLmwJJDAwMDQ0MmE4LCQwMDA4MDI2OCwkODAwMDAwMDAsJDEwM2MwMDA0CisJZGMubAkkNGU3NTAyNjgsJDgwMDAwMDAwLCQxMDNjMDAwMSwkNGU3NTUxZmMKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9mcHNwLmRvYyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9mcHNwLmRvYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDgzMTUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2Zwc3AuZG9jCkBAIC0wLDAgKzEsMjk1IEBACit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK01PVE9ST0xBIE1JQ1JPUFJPQ0VTU09SICYgTUVNT1JZIFRFQ0hOT0xPR1kgR1JPVVAKK002ODAwMCBIaS1QZXJmb3JtYW5jZSBNaWNyb3Byb2Nlc3NvciBEaXZpc2lvbgorTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UKK1Byb2R1Y3Rpb24gUmVsZWFzZSBQMS4wMCAtLSBPY3RvYmVyIDEwLCAxOTk0CisKK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlIENvcHlyaWdodCCpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVEhFIFNPRlRXQVJFIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMgYW5kIHdpdGhvdXQgd2FycmFudHkuCitUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorTU9UT1JPTEEgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK2FuZCBhbnkgd2FycmFudHkgYWdhaW5zdCBpbmZyaW5nZW1lbnQgd2l0aCByZWdhcmQgdG8gdGhlIFNPRlRXQVJFCisoSU5DTFVESU5HIEFOWSBNT0RJRklFRCBWRVJTSU9OUyBUSEVSRU9GKSBhbmQgYW55IGFjY29tcGFueWluZyB3cml0dGVuIG1hdGVyaWFscy4KKworVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK0lOIE5PIEVWRU5UIFNIQUxMIE1PVE9ST0xBIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgorKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgQlVTSU5FU1MgUFJPRklUUywKK0JVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBCVVNJTkVTUyBJTkZPUk1BVElPTiwgT1IgT1RIRVIgUEVDVU5JQVJZIExPU1MpCitBUklTSU5HIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU09GVFdBUkUuCitNb3Rvcm9sYSBhc3N1bWVzIG5vIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgbWFpbnRlbmFuY2UgYW5kIHN1cHBvcnQgb2YgdGhlIFNPRlRXQVJFLgorCitZb3UgYXJlIGhlcmVieSBncmFudGVkIGEgY29weXJpZ2h0IGxpY2Vuc2UgdG8gdXNlLCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoZSBTT0ZUV0FSRQorc28gbG9uZyBhcyB0aGlzIGVudGlyZSBub3RpY2UgaXMgcmV0YWluZWQgd2l0aG91dCBhbHRlcmF0aW9uIGluIGFueSBtb2RpZmllZCBhbmQvb3IKK3JlZGlzdHJpYnV0ZWQgdmVyc2lvbnMsIGFuZCB0aGF0IHN1Y2ggbW9kaWZpZWQgdmVyc2lvbnMgYXJlIGNsZWFybHkgaWRlbnRpZmllZCBhcyBzdWNoLgorTm8gbGljZW5zZXMgYXJlIGdyYW50ZWQgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZSB1bmRlciBhbnkgcGF0ZW50cworb3IgdHJhZGVtYXJrcyBvZiBNb3Rvcm9sYSwgSW5jLgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Cis2ODA2MCBGTE9BVElORy1QT0lOVCBTT0ZUV0FSRSBQQUNLQUdFIChLZXJuZWwgdmVyc2lvbikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpbGUgZnBzcC5zYSBjb250YWlucyB0aGUgNjgwNjAgRmxvYXRpbmctUG9pbnQgU29mdHdhcmUKK1BhY2thZ2UuIFRoaXMgcGFja2FnZSBpcyBlc3NlbnRpYWxseSBhIHNldCBvZiBleGNlcHRpb24gaGFuZGxlcnMKK3RoYXQgY2FuIGJlIGludGVncmF0ZWQgaW50byBhbiBvcGVyYXRpbmcgc3lzdGVtLgorVGhlc2UgZXhjZXB0aW9uIGhhbmRsZXJzIGVtdWxhdGUgVW5pbXBsZW1lbnRlZCBGUCBpbnN0cnVjdGlvbnMsCitpbnN0cnVjdGlvbnMgdXNpbmcgdW5pbXBsZW1lbnRlZCBkYXRhIHR5cGVzLCBhbmQgaW5zdHJ1Y3Rpb25zCit1c2luZyB1bmltcGxlbWVudGVkIGFkZHJlc3NpbmcgbW9kZXMuIEluIGFkZGl0aW9uLCB0aGlzIHBhY2thZ2UKK2luY2x1ZGVzIGV4Y2VwdGlvbiBoYW5kbGVycyB0byBwcm92aWRlIGZ1bGwgSUVFRS03NTQgY29tcGxpYW50CitleGNlcHRpb24gaGFuZGxpbmcuCisKK1JlbGVhc2UgZmlsZSBmb3JtYXQ6CistLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGZpbGUgZnBzcC5zYSBpcyBlc3NlbnRpYWxseSBhIGhleGFkZWNpbWFsIGltYWdlIG9mIHRoZQorcmVsZWFzZSBwYWNrYWdlLiBUaGlzIGlzIHRoZSBPTkxZIGZvcm1hdCB3aGljaCB3aWxsIGJlIHN1cHBvcnRlZC4KK1RoZSBoZXggaW1hZ2Ugd2FzIGNyZWF0ZWQgYnkgYXNzZW1ibGluZyB0aGUgc291cmNlIGNvZGUgYW5kCit0aGVuIGNvbnZlcnRpbmcgdGhlIHJlc3VsdGluZyBiaW5hcnkgb3V0cHV0IGltYWdlIGludG8gYW4KK0FTQ0lJIHRleHQgZmlsZS4gVGhlIGhleGFkZWNpbWFsIG51bWJlcnMgYXJlIGxpc3RlZAordXNpbmcgdGhlIE1vdG9yb2xhIEFzc2VtYmx5IFN5bnRheCBhc3NlbWJsZXIgZGlyZWN0aXZlICJkYy5sIgorKGRlZmluZSBjb25zdGFudCBsb25nd29yZCkuIFRoZSBmaWxlIGNhbiBiZSBjb252ZXJ0ZWQgdG8gb3RoZXIKK2Fzc2VtYmx5IHN5bnRheGVzIGJ5IHVzaW5nIGFueSB3b3JkIHByb2Nlc3NvciB3aXRoIGEgZ2xvYmFsCitzZWFyY2ggYW5kIHJlcGxhY2UgZnVuY3Rpb24uCisKK1RvIGFzc2lzdCBpbiBhc3NlbWJsaW5nIGFuZCBsaW5raW5nIHRoaXMgbW9kdWxlIHdpdGggb3RoZXIgbW9kdWxlcywKK3RoZSBpbnN0YWxsZXIgc2hvdWxkIGFkZCBhIHN5bWJvbGljIGxhYmVsIHRvIHRoZSB0b3Agb2YgdGhlIGZpbGUuCitUaGlzIHdpbGwgYWxsb3cgY2FsbGluZyByb3V0aW5lcyB0byBhY2Nlc3MgdGhlIGVudHJ5IHBvaW50cworb2YgdGhpcyBwYWNrYWdlLgorCitUaGUgc291cmNlIGNvZGUgZnBzcC5zIGhhcyBhbHNvIGJlZW4gaW5jbHVkZWQgYnV0IG9ubHkgZm9yCitkb2N1bWVudGF0aW9uIHB1cnBvc2VzLgorCitSZWxlYXNlIGZpbGUgc3RydWN0dXJlOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKHRvcCBvZiBtb2R1bGUpCisJLS0tLS0tLS0tLS0tLS0tLS0KKwl8CQl8IC0gMTI4IGJ5dGUtc2l6ZWQgc2VjdGlvbgorICAgKDEpICB8ICAgQ2FsbC1PdXQJfCAtIDQgYnl0ZXMgcGVyIGVudHJ5ICh1c2VyIGZpbGxzIHRoZXNlIGluKQorCXwJCXwgLSBleGFtcGxlIHJvdXRpbmVzIGluIGZza2VsZXRvbi5zCisJLS0tLS0tLS0tLS0tLS0tLS0KKwl8CQl8IC0gOCBieXRlcyBwZXIgZW50cnkKKyAgICgyKSAgfCBFbnRyeSBQb2ludAl8IC0gdXNlciBkb2VzICJicmEiIG9yICJqbXAiIHRvIHRoaXMgYWRkcmVzcworCXwJCXwKKwktLS0tLS0tLS0tLS0tLS0tLQorCXwJCXwgLSBjb2RlIHNlY3Rpb24KKyAgICgzKSAgfgkJfgorCXwJCXwKKwktLS0tLS0tLS0tLS0tLS0tLQorKGJvdHRvbSBvZiBtb2R1bGUpCisKK1RoZSBmaXJzdCBzZWN0aW9uIG9mIHRoaXMgbW9kdWxlIGlzIHRoZSAiQ2FsbC1vdXQiIHNlY3Rpb24uIFRoaXMgc2VjdGlvbgoraXMgTk9UIElOQ0xVREVEIGluIGZwc3Auc2EgKGFuIGV4YW1wbGUgIkNhbGwtb3V0IiBzZWN0aW9uIGlzIHByb3ZpZGVkIGF0Cit0aGUgZW5kIG9mIHRoZSBmaWxlIGZza2VsZXRvbi5zKS4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIGlzIHRvIGFsbG93Cit0aGUgRlBTUCByb3V0aW5lcyB0byByZWZlcmVuY2UgZXh0ZXJuYWwgZnVuY3Rpb25zIHRoYXQgbXVzdCBiZSBwcm92aWRlZAorYnkgdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbS4gVGhpcyBzZWN0aW9uIE1VU1QgYmUgZXhhY3RseSAxMjggYnl0ZXMgaW4KK3NpemUuIFRoZXJlIGFyZSAzMiBmaWVsZHMsIGVhY2ggNCBieXRlcyBpbiBzaXplLiBFYWNoIGZpZWxkIGNvcnJlc3BvbmRzCit0byBhIGZ1bmN0aW9uIHJlcXVpcmVkIGJ5IHRoZSBGUFNQICh0aGVzZSBmdW5jdGlvbnMgYW5kIHRoZWlyIGxvY2F0aW9uIGFyZQorbGlzdGVkIGluICI2ODA2MEZQU1AgY2FsbC1vdXRzIiBiZWxvdykuIEVhY2ggZmllbGQgZW50cnkgc2hvdWxkIGNvbnRhaW4KK3RoZSBhZGRyZXNzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIFJFTEFUSVZFIHRvIHRoZSBzdGFydGluZyBhZGRyZXNzCitvZiB0aGUgImNhbGwtb3V0IiBzZWN0aW9uLiBUaGUgIkNhbGwtb3V0IiBzZWN0aW9uIG11c3Qgc2l0IGFkamFjZW50IHRvIHRoZQorZnBzcC5zYSBpbWFnZSBpbiBtZW1vcnkuCisKK1RoZSBzZWNvbmQgc2VjdGlvbiwgdGhlICJFbnRyeS1wb2ludCIgc2VjdGlvbiwgaXMgdXNlZCBieSBleHRlcm5hbCByb3V0aW5lcwordG8gYWNjZXNzIHRoZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBGUFNQLiBTaW5jZSB0aGUgZnBzcC5zYSBoZXggZmlsZSBjb250YWlucworbm8gc3ltYm9sIG5hbWVzLCB0aGlzIHNlY3Rpb24gY29udGFpbnMgZnVuY3Rpb24gZW50cnkgcG9pbnRzIHRoYXQgYXJlIGZpeGVkCit3aXRoIHJlc3BlY3QgdG8gdGhlIHRvcCBvZiB0aGUgcGFja2FnZS4gVGhlIGN1cnJlbnRseSBkZWZpbmVkIGVudHJ5LXBvaW50cworYXJlIGxpc3RlZCBpbiBzZWN0aW9uICI2ODA2MCBGUFNQIGVudHJ5IHBvaW50cyIgYmVsb3cuIEEgY2FsbGluZyByb3V0aW5lCit3b3VsZCBzaW1wbHkgZXhlY3V0ZSBhICJicmEiIG9yICJqbXAiIHRoYXQganVtcGVkIHRvIHRoZSBzZWxlY3RlZCBmdW5jdGlvbgorZW50cnktcG9pbnQuCisKK0ZvciBleGFtcGxlLCBpZiB0aGUgNjgwNjAgaGFyZHdhcmUgdG9vayBhICJMaW5lLUYgRW11bGF0b3IiIGV4Y2VwdGlvbgorKHZlY3RvciAjMTEpLCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBzaG91bGQgZXhlY3V0ZSBzb21ldGhpbmcgc2ltaWxhciB0bzoKKworCWJyYQlfMDYwRlBTUF9UT1ArMTI4KzQ4CisKKyhfMDYwRlBTUF9UT1AgaXMgdGhlIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlICJDYWxsLW91dCIgc2VjdGlvbjsgdGhlICJDYWxsLW91dCIKK3NlY3Rpb24gaXMgMTI4IGJ5dGVzIGxvbmc7IGFuZCB0aGUgRi1MaW5lIEZQU1AgaGFuZGxlciBlbnRyeSBwb2ludCBpcyBsb2NhdGVkCis0OCBieXRlcyBmcm9tIHRoZSB0b3Agb2YgdGhlICJFbnRyeS1wb2ludCIgc2VjdGlvbi4pCisKK1RoZSB0aGlyZCBzZWN0aW9uIGlzIHRoZSBjb2RlIHNlY3Rpb24uIEFmdGVyIGVudGVyaW5nIHRocm91Z2ggYW4gIkVudHJ5LXBvaW50IiwKK3RoZSBlbnRyeSBjb2RlIGp1bXBzIHRvIHRoZSBhcHByb3ByaWF0ZSBlbXVsYXRpb24gY29kZSB3aXRoaW4gdGhlIGNvZGUgc2VjdGlvbi4KKworNjgwNjBGUFNQIGNhbGwtb3V0czogKGRldGFpbHMgaW4gZnNrZWxldG9uLnMpCistLS0tLS0tLS0tLS0tLS0tLS0tLQorMHgwMDA6CV8wNjBfcmVhbF9ic3VuCisweDAwNDoJXzA2MF9yZWFsX3NuYW4KKzB4MDA4OglfMDYwX3JlYWxfb3BlcnIKKzB4MDBjOglfMDYwX3JlYWxfb3ZmbAorMHgwMTA6CV8wNjBfcmVhbF91bmZsCisweDAxNDoJXzA2MF9yZWFsX2R6CisweDAxODoJXzA2MF9yZWFsX2luZXgKKzB4MDFjOglfMDYwX3JlYWxfZmxpbmUKKzB4MDIwOglfMDYwX3JlYWxfZnB1X2Rpc2FibGVkCisweDAyNDoJXzA2MF9yZWFsX3RyYXAKKzB4MDI4OglfMDYwX3JlYWxfdHJhY2UKKzB4MDJjOglfMDYwX3JlYWxfYWNjZXNzCisweDAzMDoJXzA2MF9mcHNwX2RvbmUKKworMHgwMzQ6CShNb3Rvcm9sYSByZXNlcnZlZCkKKzB4MDM4OgkoTW90b3JvbGEgcmVzZXJ2ZWQpCisweDAzYzoJKE1vdG9yb2xhIHJlc2VydmVkKQorCisweDA0MDoJXzA2MF9pbWVtX3JlYWQKKzB4MDQ0OglfMDYwX2RtZW1fcmVhZAorMHgwNDg6CV8wNjBfZG1lbV93cml0ZQorMHgwNGM6CV8wNjBfaW1lbV9yZWFkX3dvcmQKKzB4MDUwOglfMDYwX2ltZW1fcmVhZF9sb25nCisweDA1NDoJXzA2MF9kbWVtX3JlYWRfYnl0ZQorMHgwNTg6CV8wNjBfZG1lbV9yZWFkX3dvcmQKKzB4MDVjOglfMDYwX2RtZW1fcmVhZF9sb25nCisweDA2MDoJXzA2MF9kbWVtX3dyaXRlX2J5dGUKKzB4MDY0OglfMDYwX2RtZW1fd3JpdGVfd29yZAorMHgwNjg6CV8wNjBfZG1lbV93cml0ZV9sb25nCisKKzB4MDZjOgkoTW90b3JvbGEgcmVzZXJ2ZWQpCisweDA3MDoJKE1vdG9yb2xhIHJlc2VydmVkKQorMHgwNzQ6CShNb3Rvcm9sYSByZXNlcnZlZCkKKzB4MDc4OgkoTW90b3JvbGEgcmVzZXJ2ZWQpCisweDA3YzoJKE1vdG9yb2xhIHJlc2VydmVkKQorCis2ODA2MEZQU1AgZW50cnkgcG9pbnRzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzB4MDAwOglfMDYwX2Zwc3Bfc25hbgorMHgwMDg6CV8wNjBfZnBzcF9vcGVycgorMHgwMTA6CV8wNjBfZnBzcF9vdmZsCisweDAxODoJXzA2MF9mcHNwX3VuZmwKKzB4MDIwOglfMDYwX2Zwc3BfZHoKKzB4MDI4OglfMDYwX2Zwc3BfaW5leAorMHgwMzA6CV8wNjBfZnBzcF9mbGluZQorMHgwMzg6CV8wNjBfZnBzcF91bnN1cHAKKzB4MDQwOglfMDYwX2Zwc3BfZWZmYWRkCisKKworCitNaXNjZWxsYW5lb3VzOgorLS0tLS0tLS0tLS0tLS0KKworXzA2MF9mcHNwX3NuYW46CistLS0tLS0tLS0tLS0tLS0tCistIGRvY3VtZW50ZWQgaW4gMy41IG9mIDA2MFNQIHNwZWMuCistIEJhc2ljIGZsb3c6CisJZXhjZXB0aW9uIHRha2VuIC0tLT4gZW50ZXIgXzA2MF9mcHNwX3NuYW4gLS18CisJCQkJCQkgICAgfAorICAgICAgICAgICAgYWx3YXlzIGV4aXRzIHRocm91Z2ggXzA2MF9yZWFsX3NuYW4gPC0tLS0KKworXzA2MF9mcHNwX29wZXJyOgorLS0tLS0tLS0tLS0tLS0tLQorLSBkb2N1bWVudGVkIGluIDMuNSBvZiAwNjBTUCBzcGVjLgorLSBCYXNpYyBmbG93OgorCWV4Y2VwdGlvbiB0YWtlbiAtLS0+IGVudGVyIF8wNjBfZnBzcF9vcGVyciAtLXwKKwkJCQkJCSAgICAgfAorICAgICAgICAgICBhbHdheXMgZXhpdHMgdGhyb3VnaCBfMDYwX3JlYWxfb3BlcnIgPC0tLS0tCisKK18wNjBfZnBzcF9kejoKKy0tLS0tLS0tLS0tLS0tLS0KKy0gZG9jdW1lbnRlZCBpbiAzLjcgb2YgMDYwU1Agc3BlYy4KKy0gQmFzaWMgZmxvdzoKKwlleGNlcHRpb24gdGFrZW4gLS0tPiBlbnRlciBfMDYwX2Zwc3BfZHogICAtLXwKKwkJCQkJCSAgICB8CisgICAgICAgICAgICBhbHdheXMgZXhpdHMgdGhyb3VnaCBfMDYwX3JlYWxfZHogICA8LS0tLQorCitfMDYwX2Zwc3BfaW5leDoKKy0tLS0tLS0tLS0tLS0tLS0KKy0gZG9jdW1lbnRlZCBpbiAzLjYgb2YgMDYwU1Agc3BlYy4KKy0gQmFzaWMgZmxvdzoKKwlleGNlcHRpb24gdGFrZW4gLS0tPiBlbnRlciBfMDYwX2Zwc3BfaW5leCAtLXwKKwkJCQkJCSAgICB8CisgICAgICAgICAgICBhbHdheXMgZXhpdHMgdGhyb3VnaCBfMDYwX3JlYWxfaW5leCA8LS0tLQorCisKK18wNjBfZnBzcF9vdmZsOgorLS0tLS0tLS0tLS0tLS0tLQorLSBkb2N1bWVudGVkIGluIDMuNCBvZiAwNjBTUCBzcGVjLgorLSBCYXNpYyBmbG93OgorCWV4Y2VwdGlvbiB0YWtlbiAtLS0+IGVudGVyIF8wNjBfZnBzcF9vdmZsIC0tfAorCQkJCQkJICAgIHwKKyAgICAgICAgICAgIG1heSBleGl0IHRocm91Z2ggXzA2MF9yZWFsX2luZXggICAgIDwtLS18CisJCQkJCQkgb3IgfAorICAgICAgICAgICAgbWF5IGV4aXQgdGhyb3VnaCBfMDYwX3JlYWxfb3ZmbCAgICAgPC0tLXwKKwkJCQkJCSBvciB8CisgICAgICAgICAgICBtYXkgZXhpdCB0aHJvdWdoIF8wNjBfZnBzcF9kb25lICAgICA8LS0tfAorCitfMDYwX2Zwc3BfdW5mbDoKKy0tLS0tLS0tLS0tLS0tLS0KKy0gZG9jdW1lbnRlZCBpbiAzLjQgb2YgMDYwU1Agc3BlYy4KKy0gQmFzaWMgZmxvdzoKKwlleGNlcHRpb24gdGFrZW4gLS0tPiBlbnRlciBfMDYwX2Zwc3BfdW5mbCAtLXwKKwkJCQkJCSAgICB8CisgICAgICAgICAgICBtYXkgZXhpdCB0aHJvdWdoIF8wNjBfcmVhbF9pbmV4ICAgICA8LS0tfAorCQkJCQkJIG9yIHwKKyAgICAgICAgICAgIG1heSBleGl0IHRocm91Z2ggXzA2MF9yZWFsX3VuZmwgICAgIDwtLS18CisJCQkJCQkgb3IgfAorICAgICAgICAgICAgbWF5IGV4aXQgdGhyb3VnaCBfMDYwX2Zwc3BfZG9uZSAgICAgPC0tLXwKKworCitfMDYwX2Zwc3BfZmxpbmU6CistLS0tLS0tLS0tLS0tLS0tLQorLSBub3QgZnVsbHkgZG9jdW1lbnRlZCBpbiAwNjBTUCBzcGVjLgorLSBCYXNpYyBmbG93OgorCWV4Y2VwdGlvbiB0YWtlbiAtLS0+IGVudGVyIF8wNjBfZnBzcF9mbGluZSAtLXwKKwkJCQkJCSAgICAgfAorICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICB2ICAgICAgICAgICAgICAgdiAgICAgICAgICAgICAgICAgICAgIHYKKyAgICh1bmltcGxlbWVudGVkICAgKGZwdSBkaXNhYmxlZCkgICAgICAgKHBvc3NpYmxlIEYtbGluZSBpbGxlZ2FsKQorICAgICBzdGFjayBmcmFtZSkgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB2CisgICAgICAgICAgICB8ICAgICAgICAgICAgICAgdiAgICAgICAgICAgICAgIHNwZWNpYWwgY2FzZSAiZm1vdmVjciI/CisgICAgICAgICAgICB8ICAgICAgICAgZXhpdCB0aHJvdWdoICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICB8ICAgICBfMDYwX3JlYWxfZnB1X2Rpc2FibGVkICAgICAgICAtLS0tLS0tLS0tLS0tCisgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8CisgICAgICAgICAgICB8ICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICB2ICAgICAgICAgICB2CisgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgKHllcykgICAgICAgIChubykKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHYgICAgICAgICAgIHYKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIGZwdSBkaXNhYmxlZD8gICBleGl0IHRocm91Z2gKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICBfMDYwX3JlYWxfZmxpbmUKKyAgICAgICAgICAgIHYgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHYgICAgICAgICAgIHYKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0oeWVzKSAgICAgICAgKG5vKQorICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgfC0tLS08LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgICAgICAgICAgfAorICAgICAgICAgICAgfAorICAgICAgICAgICAgfC0tLS0+IG1heSBleGl0IHRocm91Z2ggXzA2MF9yZWFsX3RyYWNlCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8LS0tLT4gbWF5IGV4aXQgdGhyb3VnaCBfMDYwX3JlYWxfdHJhcAorICAgICAgICAgICAgfAorICAgICAgICAgICAgfC0tLS0+IG1heSBleGl0IHRocm91Z2ggXzA2MF9yZWFsX2JzdW4KKyAgICAgICAgICAgIHwKKyAgICAgICAgICAgIHwtLS0tPiBtYXkgZXhpdCB0aHJvdWdoIF8wNjBfZnBzcF9kb25lCisKKworXzA2MF9mcHNwX3Vuc3VwcDoKKy0tLS0tLS0tLS0tLS0tLS0tLQorLSBkb2N1bWVudGVkIGluIDMuMSBvZiAwNjBTUCBzcGVjLgorLSBCYXNpYyBmbG93OgorCWV4Y2VwdGlvbiB0YWtlbiAtLS0+IGVudGVyIF8wNjBfZnBzcF91bnN1cHAgLS18CisJCQkJCQkgICAgICB8CisJCQkJCQkgICAgICB8CisgICAgICAgICAgICBtYXkgZXhpdCB0aHJvdWdoIF8wNjBfcmVhbF9zbmFuICAgICAgPC0tLS18CisJCQkJCQkgIG9yICB8CisgICAgICAgICAgICBtYXkgZXhpdCB0aHJvdWdoIF8wNjBfcmVhbF9vcGVyciAgICAgPC0tLS18CisJCQkJCQkgIG9yICB8CisgICAgICAgICAgICBtYXkgZXhpdCB0aHJvdWdoIF8wNjBfcmVhbF9vdmZsICAgICAgPC0tLS18CisJCQkJCQkgIG9yICB8CisgICAgICAgICAgICBtYXkgZXhpdCB0aHJvdWdoIF8wNjBfcmVhbF91bmZsICAgICAgPC0tLS18CisJCQkJCQkgIG9yICB8CisgICAgICAgICAgICBtYXkgZXhpdCB0aHJvdWdoIF8wNjBfcmVhbF9pbmV4ICAgICAgPC0tLS18CisJCQkJCQkgIG9yICB8CisgICAgICAgICAgICBtYXkgZXhpdCB0aHJvdWdoIF8wNjBfcmVhbF90cmFjZSAgICAgPC0tLS18CisJCQkJCQkgIG9yICB8CisgICAgICAgICAgICBtYXkgZXhpdCB0aHJvdWdoIF8wNjBfZnBzcF9kb25lICAgICAgPC0tLS18CisKKworXzA2MF9mcHNwX2VmZmFkZDoKKy0tLS0tLS0tLS0tLS0tLS0tLQorLSBkb2N1bWVudGVkIGluIDMuMyBvZiAwNjAgc3BlYy4KKy0gQmFzaWMgZmxvdzoKKwlleGNlcHRpb24gdGFrZW4gLS0tPiBlbnRlciBfMDYwX2Zwc3BfZWZmYWRkIC0tfAorCQkJCQkJICAgICAgfAorCQkJCQkJICAgICAgfAorICAgICAgICAgICAgbWF5IGV4aXQgdGhyb3VnaCBfMDYwX3JlYWxfdHJhY2UgICAgIDwtLS0tfAorCQkJCQkJICBvciAgfAorICAgICBtYXkgZXhpdCB0aHJvdWdoIF8wNjBfcmVhbF9mcHVfZGlzYWJsZWQgICAgIDwtLS0tfAorCQkJCQkJICBvciAgfAorICAgICAgICAgICAgbWF5IGV4aXQgdGhyb3VnaCBfMDYwX2Zwc3BfZG9uZSAgICAgIDwtLS0tfApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL2Zwc3Auc2EgYi9hcmNoL202OGsvaWZwc3AwNjAvZnBzcC5zYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjk0ODZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2Zwc3Auc2EKQEAgLTAsMCArMSwzNDAxIEBACisJLmxvbmcJMHg2MGZmMDAwMCwweDE3NDAwMDAwLDB4NjBmZjAwMDAsMHgxNWY0MDAwMAorCS5sb25nCTB4NjBmZjAwMDAsMHgwMmI2MDAwMCwweDYwZmYwMDAwLDB4MDQ3MDAwMDAKKwkubG9uZwkweDYwZmYwMDAwLDB4MWIxMDAwMDAsMHg2MGZmMDAwMCwweDE5YWEwMDAwCisJLmxvbmcJMHg2MGZmMDAwMCwweDFiNWEwMDAwLDB4NjBmZjAwMDAsMHgwNjJlMDAwMAorCS5sb25nCTB4NjBmZjAwMDAsMHgxMDJjMDAwMCwweDUxZmM1MWZjLDB4NTFmYzUxZmMKKwkubG9uZwkweDUxZmM1MWZjLDB4NTFmYzUxZmMsMHg1MWZjNTFmYywweDUxZmM1MWZjCisJLmxvbmcJMHg1MWZjNTFmYywweDUxZmM1MWZjLDB4NTFmYzUxZmMsMHg1MWZjNTFmYworCS5sb25nCTB4NTFmYzUxZmMsMHg1MWZjNTFmYywweDUxZmM1MWZjLDB4NTFmYzUxZmMKKwkubG9uZwkweDJmMDAyMDNhLDB4ZmYyYzQ4N2IsMHgwOTMwZmZmZiwweGZlZjgyMDJmCisJLmxvbmcJMHgwMDA0NGU3NCwweDAwMDQyZjAwLDB4MjAzYWZlZjIsMHg0ODdiMDkzMAorCS5sb25nCTB4ZmZmZmZlZTIsMHgyMDJmMDAwNCwweDRlNzQwMDA0LDB4MmYwMDIwM2EKKwkubG9uZwkweGZlZTA0ODdiLDB4MDkzMGZmZmYsMHhmZWNjMjAyZiwweDAwMDQ0ZTc0CisJLmxvbmcJMHgwMDA0MmYwMCwweDIwM2FmZWQyLDB4NDg3YjA5MzAsMHhmZmZmZmViNgorCS5sb25nCTB4MjAyZjAwMDQsMHg0ZTc0MDAwNCwweDJmMDAyMDNhLDB4ZmVhNDQ4N2IKKwkubG9uZwkweDA5MzBmZmZmLDB4ZmVhMDIwMmYsMHgwMDA0NGU3NCwweDAwMDQyZjAwCisJLmxvbmcJMHgyMDNhZmU5NiwweDQ4N2IwOTMwLDB4ZmZmZmZlOGEsMHgyMDJmMDAwNAorCS5sb25nCTB4NGU3NDAwMDQsMHgyZjAwMjAzYSwweGZlN2M0ODdiLDB4MDkzMGZmZmYKKwkubG9uZwkweGZlNzQyMDJmLDB4MDAwNDRlNzQsMHgwMDA0MmYwMCwweDIwM2FmZTc2CisJLmxvbmcJMHg0ODdiMDkzMCwweGZmZmZmZTVlLDB4MjAyZjAwMDQsMHg0ZTc0MDAwNAorCS5sb25nCTB4MmYwMDIwM2EsMHhmZTY4NDg3YiwweDA5MzBmZmZmLDB4ZmU0ODIwMmYKKwkubG9uZwkweDAwMDQ0ZTc0LDB4MDAwNDJmMDAsMHgyMDNhZmU1NiwweDQ4N2IwOTMwCisJLmxvbmcJMHhmZmZmZmUzMiwweDIwMmYwMDA0LDB4NGU3NDAwMDQsMHgyZjAwMjAzYQorCS5sb25nCTB4ZmU0NDQ4N2IsMHgwOTMwZmZmZiwweGZlMWMyMDJmLDB4MDAwNDRlNzQKKwkubG9uZwkweDAwMDQyZjAwLDB4MjAzYWZlMzIsMHg0ODdiMDkzMCwweGZmZmZmZTA2CisJLmxvbmcJMHgyMDJmMDAwNCwweDRlNzQwMDA0LDB4MmYwMDIwM2EsMHhmZTIwNDg3YgorCS5sb25nCTB4MDkzMGZmZmYsMHhmZGYwMjAyZiwweDAwMDQ0ZTc0LDB4MDAwNDJmMDAKKwkubG9uZwkweDIwM2FmZTFlLDB4NDg3YjA5MzAsMHhmZmZmZmRkYSwweDIwMmYwMDA0CisJLmxvbmcJMHg0ZTc0MDAwNCwweDJmMDAyMDNhLDB4ZmUwYzQ4N2IsMHgwOTMwZmZmZgorCS5sb25nCTB4ZmRjNDIwMmYsMHgwMDA0NGU3NCwweDAwMDQyZjAwLDB4MjAzYWZkZmEKKwkubG9uZwkweDQ4N2IwOTMwLDB4ZmZmZmZkYWUsMHgyMDJmMDAwNCwweDRlNzQwMDA0CisJLmxvbmcJMHgyZjAwMjAzYSwweGZkZTg0ODdiLDB4MDkzMGZmZmYsMHhmZDk4MjAyZgorCS5sb25nCTB4MDAwNDRlNzQsMHgwMDA0MmYwMCwweDIwM2FmZGQ2LDB4NDg3YjA5MzAKKwkubG9uZwkweGZmZmZmZDgyLDB4MjAyZjAwMDQsMHg0ZTc0MDAwNCwweDJmMDAyMDNhCisJLmxvbmcJMHhmZGM0NDg3YiwweDA5MzBmZmZmLDB4ZmQ2YzIwMmYsMHgwMDA0NGU3NAorCS5sb25nCTB4MDAwNDJmMDAsMHgyMDNhZmRiMiwweDQ4N2IwOTMwLDB4ZmZmZmZkNTYKKwkubG9uZwkweDIwMmYwMDA0LDB4NGU3NDAwMDQsMHgyZjAwMjAzYSwweGZkYTA0ODdiCisJLmxvbmcJMHgwOTMwZmZmZiwweGZkNDAyMDJmLDB4MDAwNDRlNzQsMHgwMDA0MmYwMAorCS5sb25nCTB4MjAzYWZkOGUsMHg0ODdiMDkzMCwweGZmZmZmZDJhLDB4MjAyZjAwMDQKKwkubG9uZwkweDRlNzQwMDA0LDB4MmYwMDIwM2EsMHhmZDdjNDg3YiwweDA5MzBmZmZmCisJLmxvbmcJMHhmZDE0MjAyZiwweDAwMDQ0ZTc0LDB4MDAwNDJmMDAsMHgyMDNhZmQ2YQorCS5sb25nCTB4NDg3YjA5MzAsMHhmZmZmZmNmZSwweDIwMmYwMDA0LDB4NGU3NDAwMDQKKwkubG9uZwkweDQwYzYyZDM4LDB4ZDNkNjQ2MzQsMHgzZDZmOTBhZSwweGIxZTc1Y2M3CisJLmxvbmcJMHg0MDAwMDAwMCwweGM5MGZkYWEyLDB4MjE2OGMyMzUsMHgwMDAwMDAwMAorCS5sb25nCTB4M2ZmZjAwMDAsMHhjOTBmZGFhMiwweDIxNjhjMjM1LDB4MDAwMDAwMDAKKwkubG9uZwkweDNmZTQ1ZjMwLDB4NmRjOWM4ODMsMHg0ZTU2ZmY0MCwweGYzMmVmZjZjCisJLmxvbmcJMHg0OGVlMDMwMywweGZmOWNmMjJlLDB4YmMwMGZmNjAsMHhmMjJlZjBjMAorCS5sb25nCTB4ZmZkYzJkNmUsMHhmZjY4ZmY0NCwweDIwNmVmZjQ0LDB4NThhZWZmNDQKKwkubG9uZwkweDYxZmZmZmZmLDB4ZmYwNDJkNDAsMHhmZjQwMDgyZSwweDAwMDVmZjQyCisJLmxvbmcJMHg2NjAwMDExNiwweDQxZWVmZjZjLDB4NjFmZjAwMDAsMHgwNTFjNDFlZQorCS5sb25nCTB4ZmY2YzYxZmYsMHgwMDAwYzFkYywweDFkNDBmZjRlLDB4MDgyZTAwMDUKKwkubG9uZwkweGZmNDM2NzI2LDB4ZTllZTAxODMsMHhmZjQyNjFmZiwweDAwMDBiZDIyCisJLmxvbmcJMHg0MWVlZmY3OCwweDYxZmYwMDAwLDB4YzFiYTBjMDAsMHgwMDA2NjYwNgorCS5sb25nCTB4NjFmZjAwMDAsMHhjMTFlMWQ0MCwweGZmNGY0MjgwLDB4MTAyZWZmNjMKKwkubG9uZwkweDEyMmVmZjQzLDB4MDI0MTAwN2YsMHgwMmFlMDBmZiwweDAxZmZmZjY0CisJLmxvbmcJMHhmMjNjOTAwMCwweDAwMDAwMDAwLDB4ZjIzYzg4MDAsMHgwMDAwMDAwMAorCS5sb25nCTB4NDFlZWZmNmMsMHg0M2VlZmY3OCwweDIyM2IxNTMwLDB4MDAwMDcxMTIKKwkubG9uZwkweDRlYmIxOTMwLDB4MDAwMDcxMGEsMHhlOWVlMDE4MywweGZmNDI2MWZmCisJLmxvbmcJMHgwMDAwYmQ0ZSwweDA4MmUwMDA0LDB4ZmY2MjY2MjIsMHgwODJlMDAwMQorCS5sb25nCTB4ZmY2MjY2NDQsMHhmMjJlZDBjMCwweGZmZGNmMjJlLDB4OWMwMGZmNjAKKwkubG9uZwkweDRjZWUwMzAzLDB4ZmY5YzRlNWUsMHg2MGZmZmZmZiwweGZjYzZmMjJlCisJLmxvbmcJMHhmMDQwZmY2YywweDNkN2NlMDA1LDB4ZmY2ZWYyMmUsMHhkMGMwZmZkYworCS5sb25nCTB4ZjIyZTljMDAsMHhmZjYwNGNlZSwweDAzMDNmZjljLDB4ZjM2ZWZmNmMKKwkubG9uZwkweDRlNWU2MGZmLDB4ZmZmZmZjYjIsMHhmMjJlZjA0MCwweGZmNmMxZDdjCisJLmxvbmcJMHgwMGM0MDAwYiwweDNkN2NlMDAxLDB4ZmY2ZWYyMmUsMHhkMGMwZmZkYworCS5sb25nCTB4ZjIyZTljMDAsMHhmZjYwNGNlZSwweDAzMDNmZjljLDB4ZjM2ZWZmNmMKKwkubG9uZwkweDRlNWU2MGZmLDB4ZmZmZmZjYWUsMHgxZDdjMDAwMCwweGZmNGU0MjgwCisJLmxvbmcJMHgxMDJlZmY2MywweDAyYWVmZmZmLDB4MDBmZmZmNjQsMHhmMjNjOTAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHhmMjNjODgwMCwweDAwMDAwMDAwLDB4NDFlZWZmNmMKKwkubG9uZwkweDYxZmYwMDAwLDB4YjJjZTA4MmUsMHgwMDA0ZmY2MiwweDY2MDBmZjcwCisJLmxvbmcJMHgwODJlMDAwMSwweGZmNjI2NjAwLDB4ZmY5MGYyMmUsMHhkMGMwZmZkYworCS5sb25nCTB4ZjIyZTljMDAsMHhmZjYwNGNlZSwweDAzMDNmZjljLDB4NGU1ZTA4MTcKKwkubG9uZwkweDAwMDc2N2ZmLDB4ZmZmZmZjMGMsMHhmMjJmYTQwMCwweDAwMDgzZjdjCisJLmxvbmcJMHgyMDI0MDAwNiwweDYwZmZmZmZmLDB4ZmNlYzRlNTYsMHhmZjQwZjMyZQorCS5sb25nCTB4ZmY2YzQ4ZWUsMHgwMzAzZmY5YywweGYyMmViYzAwLDB4ZmY2MGYyMmUKKwkubG9uZwkweGYwYzBmZmRjLDB4MmQ2ZWZmNjgsMHhmZjQ0MjA2ZSwweGZmNDQ1OGFlCisJLmxvbmcJMHhmZjQ0NjFmZiwweGZmZmZmZDQyLDB4MmQ0MGZmNDAsMHgwODJlMDAwNQorCS5sb25nCTB4ZmY0MjY2MDAsMHgwMTMyNDFlZSwweGZmNmM2MWZmLDB4MDAwMDAzNWEKKwkubG9uZwkweDQxZWVmZjZjLDB4NjFmZjAwMDAsMHhjMDFhMWQ0MCwweGZmNGUwODJlCisJLmxvbmcJMHgwMDA1ZmY0MywweDY3MmUwODJlLDB4MDAwNGZmNDMsMHg2NjI2ZTllZQorCS5sb25nCTB4MDE4M2ZmNDIsMHg2MWZmMDAwMCwweGJiNTg0MWVlLDB4ZmY3ODYxZmYKKwkubG9uZwkweDAwMDBiZmYwLDB4MGMwMDAwMDYsMHg2NjA2NjFmZiwweDAwMDBiZjU0CisJLmxvbmcJMHgxZDQwZmY0ZiwweDQyODAxMDJlLDB4ZmY2MzEyMmUsMHhmZjQzMDI0MQorCS5sb25nCTB4MDA3ZjAyYWUsMHgwMGZmMDFmZiwweGZmNjRmMjNjLDB4OTAwMDAwMDAKKwkubG9uZwkweDAwMDBmMjNjLDB4ODgwMDAwMDAsMHgwMDAwNDFlZSwweGZmNmM0M2VlCisJLmxvbmcJMHhmZjc4MjIzYiwweDE1MzAwMDAwLDB4NmY0ODRlYmIsMHgxOTMwMDAwMAorCS5sb25nCTB4NmY0MGU5ZWUsMHgwMTgzZmY0MiwweDYxZmYwMDAwLDB4YmI4NDA4MmUKKwkubG9uZwkweDAwMDNmZjYyLDB4NjYyMjA4MmUsMHgwMDAxZmY2MiwweDY2NGVmMjJlCisJLmxvbmcJMHhkMGMwZmZkYywweGYyMmU5YzAwLDB4ZmY2MDRjZWUsMHgwMzAzZmY5YworCS5sb25nCTB4NGU1ZTYwZmYsMHhmZmZmZmFmYywweDA4MmUwMDAzLDB4ZmY2NjY3MDAKKwkubG9uZwkweGZmZDZmMjJlLDB4ZjA0MGZmNmMsMHgzZDdjZTAwMywweGZmNmVmMjJlCisJLmxvbmcJMHhkMGMwZmZkYywweGYyMmU5YzAwLDB4ZmY2MDRjZWUsMHgwMzAzZmY5YworCS5sb25nCTB4ZjM2ZWZmNmMsMHg0ZTVlNjBmZiwweGZmZmZmYWY0LDB4MDgyZTAwMDEKKwkubG9uZwkweGZmNjY2NzAwLDB4ZmZhYWYyMmUsMHhmMDQwZmY2YywweDFkN2MwMGM0CisJLmxvbmcJMHgwMDBiM2Q3YywweGUwMDFmZjZlLDB4ZjIyZWQwYzAsMHhmZmRjZjIyZQorCS5sb25nCTB4OWMwMGZmNjAsMHg0Y2VlMDMwMywweGZmOWNmMzZlLDB4ZmY2YzRlNWUKKwkubG9uZwkweDYwZmZmZmZmLDB4ZmFkMDFkN2MsMHgwMDAwZmY0ZSwweDQyODAxMDJlCisJLmxvbmcJMHhmZjYzMDJhZSwweGZmZmYwMGZmLDB4ZmY2NGYyM2MsMHg5MDAwMDAwMAorCS5sb25nCTB4MDAwMGYyM2MsMHg4ODAwMDAwMCwweDAwMDA0MWVlLDB4ZmY2YzYxZmYKKwkubG9uZwkweDAwMDBiMGYwLDB4MDgyZTAwMDMsMHhmZjYyNjYwMCwweGZmNjYwODJlCisJLmxvbmcJMHgwMDAxZmY2MiwweDY2MDBmZjkwLDB4ZjIyZWQwYzAsMHhmZmRjZjIyZQorCS5sb25nCTB4OWMwMGZmNjAsMHg0Y2VlMDMwMywweGZmOWM0ZTVlLDB4MDgxNzAwMDcKKwkubG9uZwkweDY3ZmZmZmZmLDB4ZmEyZWYyMmYsMHhhNDAwMDAwOCwweDNmN2MyMDI0CisJLmxvbmcJMHgwMDA2NjBmZiwweGZmZmZmYjBlLDB4NGU1NmZmNDAsMHhmMzJlZmY2YworCS5sb25nCTB4NDhlZTAzMDMsMHhmZjljZjIyZSwweGJjMDBmZjYwLDB4ZjIyZWYwYzAKKwkubG9uZwkweGZmZGMwODJlLDB4MDAwNTAwMDQsMHg2NjA4NGU2OCwweDJkNDhmZmQ4CisJLmxvbmcJMHg2MDA4NDFlZSwweDAwMTAyZDQ4LDB4ZmZkODJkNmUsMHhmZjY4ZmY0NAorCS5sb25nCTB4MjA2ZWZmNDQsMHg1OGFlZmY0NCwweDYxZmZmZmZmLDB4ZmI0YzJkNDAKKwkubG9uZwkweGZmNDA0MjJlLDB4ZmY0YTA4MmUsMHgwMDA1ZmY0MiwweDY2MDAwMjA4CisJLmxvbmcJMHhlOWVlMDAwNiwweGZmNDIwYzAwLDB4MDAxMzY3MDAsMHgwNDllMDJhZQorCS5sb25nCTB4MDBmZjAwZmYsMHhmZjY0ZjIzYywweDkwMDAwMDAwLDB4MDAwMGYyM2MKKwkubG9uZwkweDg4MDAwMDAwLDB4MDAwMDQxZWUsMHhmZjZjNjFmZiwweDAwMDAwMTNhCisJLmxvbmcJMHg0MWVlZmY2YywweDYxZmYwMDAwLDB4YmRmYTBjMDAsMHgwMDA2NjYwNgorCS5sb25nCTB4NjFmZjAwMDAsMHhiZDVlMWQ0MCwweGZmNGVlOWVlLDB4MDE4M2ZmNDIKKwkubG9uZwkweDA4MmUwMDA1LDB4ZmY0MzY3MjgsMHgwYzJlMDAzYSwweGZmNDM2NzIwCisJLmxvbmcJMHg2MWZmMDAwMCwweGI5MmM0MWVlLDB4ZmY3ODYxZmYsMHgwMDAwYmRjNAorCS5sb25nCTB4MGMwMDAwMDYsMHg2NjA2NjFmZiwweDAwMDBiZDI4LDB4MWQ0MGZmNGYKKwkubG9uZwkweDQyODAxMDJlLDB4ZmY2M2U5ZWUsMHgxMDQ3ZmY0MywweDQxZWVmZjZjCisJLmxvbmcJMHg0M2VlZmY3OCwweDIyM2IxZDMwLDB4MDAwMDZkMzYsMHg0ZWJiMTkzMAorCS5sb25nCTB4MDAwMDZkMmUsMHgxMDJlZmY2MiwweDY2MzQxMDJlLDB4ZmY0MzAyMDAKKwkubG9uZwkweDAwMzgwYzAwLDB4MDAzODY3MGMsMHhlOWVlMDE4MywweGZmNDI2MWZmCisJLmxvbmcJMHgwMDAwYjk1ZSwweGYyMmVkMGMwLDB4ZmZkY2YyMmUsMHg5YzAwZmY2MAorCS5sb25nCTB4NGNlZTAzMDMsMHhmZjljNGU1ZSwweDYwZmZmZmZmLDB4ZjhlNmMwMmUKKwkubG9uZwkweGZmNjZlZGMwLDB4MDYwODY2MTQsMHgwODJlMDAwNCwweGZmNjY2N2JhCisJLmxvbmcJMHgwODJlMDAwMSwweGZmNjI2N2IyLDB4NjAwMDAwNjYsMHgwNDgwMDAwMAorCS5sb25nCTB4MDAxODBjMDAsMHgwMDA2NjYxNCwweDA4MmUwMDAzLDB4ZmY2NjY2MDAKKwkubG9uZwkweDAwNGEwODJlLDB4MDAwNGZmNjYsMHg2NjAwMDA0NiwweDJmMDA2MWZmCisJLmxvbmcJMHgwMDAwMDdlMCwweDIwMWYzZDdiLDB4MDIyMmZmNmUsMHhmMjJlZDBjMAorCS5sb25nCTB4ZmZkY2YyMmUsMHg5YzAwZmY2MCwweDRjZWUwMzAzLDB4ZmY5Y2YzNmUKKwkubG9uZwkweGZmNmM0ZTVlLDB4NjBmZmZmZmYsMHhmODdhZTAwMCwweGUwMDZlMDA0CisJLmxvbmcJMHhlMDA1ZTAwMywweGUwMDJlMDAxLDB4ZTAwMTMwM2MsMHgwMDA0NjBiYworCS5sb25nCTB4MzAzYzAwMDMsMHg2MGI2ZTllZSwweDAwMDZmZjQyLDB4MGMwMDAwMTEKKwkubG9uZwkweDY3MDgwYzAwLDB4MDAxNTY3NTAsMHg0ZTc1MzAyOCwweDAwMDAwMjQwCisJLmxvbmcJMHg3ZmZmMGM0MCwweDNmODA2NzA4LDB4MGM0MDQwN2YsMHg2NzJjNGU3NQorCS5sb25nCTB4MDJhODdmZmYsMHhmZmZmMDAwNCwweDY3MTg2MWZmLDB4MDAwMGJiYmMKKwkubG9uZwkweDQ0NDAwNjQwLDB4M2Y4MTAyNjgsMHg4MDAwMDAwMCwweDgxNjgwMDAwCisJLmxvbmcJMHg0ZTc1MDI2OCwweDgwMDAwMDAwLDB4NGU3NTAyMjgsMHgwMDdmMDAwNAorCS5sb25nCTB4MDA2ODdmZmYsMHgwMDAwNGU3NSwweDMwMjgwMDAwLDB4MDI0MDdmZmYKKwkubG9uZwkweDBjNDAzYzAwLDB4NjcwODBjNDAsMHg0M2ZmNjdkZSwweDRlNzUwMmE4CisJLmxvbmcJMHg3ZmZmZmZmZiwweDAwMDQ2NjA2LDB4NGFhODAwMDgsMHg2N2M0NjFmZgorCS5sb25nCTB4MDAwMGJiNjgsMHg0NDQwMDY0MCwweDNjMDEwMjY4LDB4ODAwMDAwMDAKKwkubG9uZwkweDgxNjgwMDAwLDB4NGU3NWU5ZWUsMHgwMGMzZmY0MiwweDBjMDAwMDAzCisJLmxvbmcJMHg2NzAwMDRhMiwweDBjMDAwMDA3LDB4NjcwMDA0OWEsMHgwMmFlZmZmZgorCS5sb25nCTB4MDBmZmZmNjQsMHhmMjNjOTAwMCwweDAwMDAwMDAwLDB4ZjIzYzg4MDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MzAyZWZmNmMsMHgwMjQwN2ZmZiwweDY3MTA0MWVlCisJLmxvbmcJMHhmZjZjNjFmZiwweDAwMDBiYjVjLDB4MWQ0MGZmNGUsMHg2MDA2MWQ3YworCS5sb25nCTB4MDAwNGZmNGUsMHg0MjgwMTAyZSwweGZmNjM0MWVlLDB4ZmY2YzJkNTYKKwkubG9uZwkweGZmZDQ2MWZmLDB4MDAwMGFkZWMsMHgxMDJlZmY2MiwweDY2MDAwMDg2CisJLmxvbmcJMHgyY2FlZmZkNCwweDA4MmUwMDA1LDB4MDAwNDY2MjYsMHgyMDZlZmZkOAorCS5sb25nCTB4NGU2MGYyMmUsMHhkMGMwZmZkYywweGYyMmU5YzAwLDB4ZmY2MDRjZWUKKwkubG9uZwkweDAzMDNmZjljLDB4NGU1ZTA4MTcsMHgwMDA3NjY3YSwweDYwZmZmZmZmCisJLmxvbmcJMHhmNzIyMGMyZSwweDAwMDhmZjRhLDB4NjZkOGYyMmUsMHhmMDgwZmY2YworCS5sb25nCTB4ZjIyZWQwYzAsMHhmZmRjZjIyZSwweDljMDBmZjYwLDB4NGNlZTAzMDMKKwkubG9uZwkweGZmOWMyYzU2LDB4MmY2ZjAwYzQsMHgwMGI4MmY2ZiwweDAwYzgwMGJjCisJLmxvbmcJMHgyZjZmMDAyYywweDAwYzQyZjZmLDB4MDAzMDAwYzgsMHgyZjZmMDAzNAorCS5sb25nCTB4MDBjY2RmZmMsMHgwMDAwMDBiOCwweDA4MTcwMDA3LDB4NjYyODYwZmYKKwkubG9uZwkweGZmZmZmNmQwLDB4YzAyZWZmNjYsMHhlZGMwMDYwOCwweDY2MmEwODJlCisJLmxvbmcJMHgwMDA0ZmY2NiwweDY3MDBmZjZhLDB4MDgyZTAwMDEsMHhmZjYyNjcwMAorCS5sb25nCTB4ZmY2MDYwMDAsMHgwMTY2M2Y3YywweDIwMjQwMDA2LDB4ZjIyZmE0MDAKKwkubG9uZwkweDAwMDg2MGZmLDB4ZmZmZmY3OGUsMHgwNDgwMDAwMCwweDAwMTgzMDNiCisJLmxvbmcJMHgwMjBhNGVmYiwweDAwMDY0YWZjLDB4MDAwODAwMDAsMHgwMDAwMDAzYQorCS5sb25nCTB4MDA2NDAwOTQsMHgwMDAwMDE0MCwweDAwMDBmMjJlLDB4ZDBjMGZmZGMKKwkubG9uZwkweGYyMmU5YzAwLDB4ZmY2MDRjZWUsMHgwMzAzZmY5YywweDNkN2MzMGQ4CisJLmxvbmcJMHgwMDBhM2Q3YywweGUwMDZmZjZlLDB4ZjM2ZWZmNmMsMHg0ZTVlNjBmZgorCS5sb25nCTB4ZmZmZmY2ZDQsMHhmMjJlZDBjMCwweGZmZGNmMjJlLDB4OWMwMGZmNjAKKwkubG9uZwkweDRjZWUwMzAzLDB4ZmY5YzNkN2MsMHgzMGQwMDAwYSwweDNkN2NlMDA0CisJLmxvbmcJMHhmZjZlZjM2ZSwweGZmNmM0ZTVlLDB4NjBmZmZmZmYsMHhmNjk0ZjIyZQorCS5sb25nCTB4ZjA0MGZmNmMsMHhmMjJlZDBjMCwweGZmZGNmMjJlLDB4OWMwMGZmNjAKKwkubG9uZwkweDRjZWUwMzAzLDB4ZmY5YzNkN2MsMHgzMGQ0MDAwYSwweDNkN2NlMDA1CisJLmxvbmcJMHhmZjZlZjM2ZSwweGZmNmM0ZTVlLDB4NjBmZmZmZmYsMHhmNjBjMmNhZQorCS5sb25nCTB4ZmZkNDA4MmUsMHgwMDA1MDAwNCwweDY2MDAwMDM4LDB4MjA2ZWZmZDgKKwkubG9uZwkweDRlNjBmMjJlLDB4ZjA0MGZmNmMsMHhmMjJlZDBjMCwweGZmZGNmMjJlCisJLmxvbmcJMHg5YzAwZmY2MCwweDRjZWUwMzAzLDB4ZmY5YzNkN2MsMHgzMGNjMDAwYQorCS5sb25nCTB4M2Q3Y2UwMDMsMHhmZjZlZjM2ZSwweGZmNmM0ZTVlLDB4NjBmZmZmZmYKKwkubG9uZwkweGY1ZGUwYzJlLDB4MDAwOGZmNGEsMHg2NmM4ZjIyZSwweGYwODBmZjZjCisJLmxvbmcJMHhmMjJlZjA0MCwweGZmNzhmMjJlLDB4ZDBjMGZmZGMsMHhmMjJlOWMwMAorCS5sb25nCTB4ZmY2MDRjZWUsMHgwMzAzZmY5YywweDNkN2MzMGNjLDB4MDAwYTNkN2MKKwkubG9uZwkweGUwMDNmZjdhLDB4ZjM2ZWZmNzgsMHgyYzU2MmY2ZiwweDAwYzQwMGI4CisJLmxvbmcJMHgyZjZmMDBjOCwweDAwYmMyZjZmLDB4MDBjYzAwYzAsMHgyZjZmMDAyYworCS5sb25nCTB4MDBjNDJmNmYsMHgwMDMwMDBjOCwweDJmNmYwMDM0LDB4MDBjY2RmZmMKKwkubG9uZwkweDAwMDAwMGI4LDB4NjBmZmZmZmYsMHhmNTc2ZjIyZSwweGYwNDBmZjZjCisJLmxvbmcJMHhmMjJlZDBjMCwweGZmZGNmMjJlLDB4OWMwMGZmNjAsMHg0Y2VlMDMwMworCS5sb25nCTB4ZmY5YzNkN2MsMHgzMGM0MDAwYSwweDNkN2NlMDAxLDB4ZmY2ZWYzNmUKKwkubG9uZwkweGZmNmM0ZTVlLDB4NjBmZmZmZmYsMHhmNTVjMDJhZSwweDAwZmYwMGZmCisJLmxvbmcJMHhmZjY0ZjIzYywweDkwMDAwMDAwLDB4MDAwMGYyM2MsMHg4ODAwMDAwMAorCS5sb25nCTB4MDAwMDYxZmYsMHgwMDAwYmRiYSwweDQxZWVmZjZjLDB4NjFmZjAwMDAKKwkubG9uZwkweGI5NjIxZDQwLDB4ZmY0ZWU5ZWUsMHgwMTgzZmY0MiwweDA4MmUwMDA1CisJLmxvbmcJMHhmZjQzNjcyOCwweDBjMmUwMDNhLDB4ZmY0MzY3MjAsMHg2MWZmMDAwMAorCS5sb25nCTB4YjRhMDQxZWUsMHhmZjc4NjFmZiwweDAwMDBiOTM4LDB4MGMwMDAwMDYKKwkubG9uZwkweDY2MDY2MWZmLDB4MDAwMGI4OWMsMHgxZDQwZmY0ZiwweDQyODAxMDJlCisJLmxvbmcJMHhmZjYzZTllZSwweDEwNDdmZjQzLDB4NDFlZWZmNmMsMHg0M2VlZmY3OAorCS5sb25nCTB4MjIzYjFkMzAsMHgwMDAwNjhhYSwweDRlYmIxOTMwLDB4MDAwMDY4YTIKKwkubG9uZwkweDEwMmVmZjYyLDB4NjYwMDAwOGEsMHgxMDJlZmY0MywweDAyMDAwMDM4CisJLmxvbmcJMHgwYzAwMDAzOCwweDY3MGNlOWVlLDB4MDE4M2ZmNDIsMHg2MWZmMDAwMAorCS5sb25nCTB4YjRkMDA4MmUsMHgwMDA1MDAwNCwweDY2MDAwMDJhLDB4MjA2ZWZmZDgKKwkubG9uZwkweDRlNjBmMjJlLDB4ZDBjMGZmZGMsMHhmMjJlOWMwMCwweGZmNjA0Y2VlCisJLmxvbmcJMHgwMzAzZmY5YywweDRlNWUwODE3LDB4MDAwNzY2MDAsMHgwMTI2NjBmZgorCS5sb25nCTB4ZmZmZmY0NDAsMHgwODJlMDAwMiwweGZmNGE2N2Q2LDB4ZjIyZWQwYzAKKwkubG9uZwkweGZmZGNmMjJlLDB4OWMwMGZmNjAsMHg0Y2VlMDMwMywweGZmOWM0ZTVlCisJLmxvbmcJMHgyZjZmMDAwNCwweDAwMTAyZjZmLDB4MDAwMDAwMGMsMHhkZmZjMDAwMAorCS5sb25nCTB4MDAwYzA4MTcsMHgwMDA3NjYwMCwweDAwZWE2MGZmLDB4ZmZmZmY0MDQKKwkubG9uZwkweGMwMmVmZjY2LDB4ZWRjMDA2MDgsMHg2NjE4MDgyZSwweDAwMDRmZjY2CisJLmxvbmcJMHg2NzAwZmY2NiwweDA4MmUwMDAxLDB4ZmY2MjY3MDAsMHhmZjVjNjAwMAorCS5sb25nCTB4MDA2ZTA0ODAsMHgwMDAwMDAxOCwweDBjMDAwMDA2LDB4NmQxNDA4MmUKKwkubG9uZwkweDAwMDNmZjY2LDB4NjYwMDAwNjAsMHgwODJlMDAwNCwweGZmNjY2NjAwCisJLmxvbmcJMHgwMDRlMDgyZSwweDAwMDUwMDA0LDB4NjYwMDAwNTQsMHgyMDZlZmZkOAorCS5sb25nCTB4NGU2MDNkN2IsMHgwMjJhZmY2ZSwweGYyMmVkMGMwLDB4ZmZkY2YyMmUKKwkubG9uZwkweDljMDBmZjYwLDB4NGNlZTAzMDMsMHhmZjljZjM2ZSwweGZmNmM0ZTVlCisJLmxvbmcJMHgwODE3MDAwNywweDY2MDAwMDZjLDB4NjBmZmZmZmYsMHhmMzg2ZTAwMAorCS5sb25nCTB4ZTAwNmUwMDQsMHhlMDA1ZTAwMywweGUwMDJlMDAxLDB4ZTAwMTMwM2MKKwkubG9uZwkweDAwMDM2MDAwLDB4ZmZhZTMwM2MsMHgwMDA0NjAwMCwweGZmYTYwODJlCisJLmxvbmcJMHgwMDAyZmY0YSwweDY3YWMzZDdiLDB4MDJkNmZmNmUsMHhmMjJlZDBjMAorCS5sb25nCTB4ZmZkY2YyMmUsMHg5YzAwZmY2MCwweDRjZWUwMzAzLDB4ZmY5Y2YzNmUKKwkubG9uZwkweGZmNmM0ZTVlLDB4MmY2ZjAwMDQsMHgwMDEwMmY2ZiwweDAwMDAwMDBjCisJLmxvbmcJMHhkZmZjMDAwMCwweDAwMGMwODE3LDB4MDAwNzY2MDYsMHg2MGZmZmZmZgorCS5sb25nCTB4ZjMyMjNmN2MsMHgyMDI0MDAwNiwweGYyMmZhNDAwLDB4MDAwODYwZmYKKwkubG9uZwkweGZmZmZmNDAyLDB4MDJhZWZmZmYsMHgwMGZmZmY2NCwweGYyM2M5MDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweGYyM2M4ODAwLDB4MDAwMDAwMDAsMHhlOWVlMDE4MworCS5sb25nCTB4ZmY0MjYxZmYsMHgwMDAwYjIyYSwweDQxZWVmZjZjLDB4NjFmZjAwMDAKKwkubG9uZwkweGI3NTIwYzAwLDB4MDAwNjY2MDYsMHg2MWZmMDAwMCwweGI2YjYxZDQwCisJLmxvbmcJMHhmZjRlNDI4MCwweDEwMmVmZjYzLDB4NDFlZWZmNmMsMHgyZDU2ZmZkNAorCS5sb25nCTB4NjFmZjAwMDAsMHhhOTRlMTAyZSwweGZmNjI2NjAwLDB4MDA4NDJjYWUKKwkubG9uZwkweGZmZDQwODJlLDB4MDAwNTAwMDQsMHg2NjI4MjA2ZSwweGZmZDg0ZTYwCisJLmxvbmcJMHhmMjJlZDBjMCwweGZmZGNmMjJlLDB4OWMwMGZmNjAsMHg0Y2VlMDMwMworCS5sb25nCTB4ZmY5YzRlNWUsMHgwODE3MDAwNywweDY2MDBmZjY4LDB4NjBmZmZmZmYKKwkubG9uZwkweGYyODIwODJlLDB4MDAwM2ZmNGEsMHg2N2Q2ZjIyZSwweGQwYzBmZmRjCisJLmxvbmcJMHhmMjJlOWMwMCwweGZmNjA0Y2VlLDB4MDMwM2ZmOWMsMHgyYzU2MmY2ZgorCS5sb25nCTB4MDBjNDAwYjgsMHgyZjZmMDBjOCwweDAwYmMyZjZmLDB4MDAzODAwYzQKKwkubG9uZwkweDJmNmYwMDNjLDB4MDBjODJmNmYsMHgwMDQwMDBjYywweGRmZmMwMDAwCisJLmxvbmcJMHgwMGI4MDgxNywweDAwMDc2NjAwLDB4ZmYxYTYwZmYsMHhmZmZmZjIzNAorCS5sb25nCTB4YzAyZWZmNjYsMHhlZGMwMDYwOCwweDY3MDBmZjc0LDB4MmNhZWZmZDQKKwkubG9uZwkweDBjMDAwMDFhLDB4NmUwMDAwZTgsMHg2NzAwMDA3MiwweDA4MmUwMDA1CisJLmxvbmcJMHgwMDA0NjYwYSwweDIwNmVmZmQ4LDB4NGU2MDYwMDAsMHhmYjhlMGMyZQorCS5sb25nCTB4MDAwOGZmNGEsMHg2NjAwZmI4NCwweGYyMmVkMGMwLDB4ZmZkY2YyMmUKKwkubG9uZwkweDljMDBmZjYwLDB4NGNlZTAzMDMsMHhmZjljM2Q3YywweDMwZDgwMDBhCisJLmxvbmcJMHgzZDdjZTAwNiwweGZmNmVmMzZlLDB4ZmY2YzJjNTYsMHgyZjZmMDBjNAorCS5sb25nCTB4MDBiODJmNmYsMHgwMGM4MDBiYywweDJmNmYwMGNjLDB4MDBjMDJmNmYKKwkubG9uZwkweDAwMzgwMGM0LDB4MmY2ZjAwM2MsMHgwMGM4MmY2ZiwweDAwNDAwMGNjCisJLmxvbmcJMHhkZmZjMDAwMCwweDAwYjg2MGZmLDB4ZmZmZmYyMmMsMHgwODJlMDAwNQorCS5sb25nCTB4MDAwNDY2MDAsMHgwMDBjMjA2ZSwweGZmZDg0ZTYwLDB4NjAwMGZiNDYKKwkubG9uZwkweDBjMmUwMDA4LDB4ZmY0YTY2MDAsMHhmYjNjZjIyZSwweGQwYzBmZmRjCisJLmxvbmcJMHhmMjJlOWMwMCwweGZmNjA0Y2VlLDB4MDMwM2ZmOWMsMHgzZDdjMzBkMAorCS5sb25nCTB4MDAwYTNkN2MsMHhlMDA0ZmY2ZSwweGYzNmVmZjZjLDB4MmM1NjJmNmYKKwkubG9uZwkweDAwYzQwMGI4LDB4MmY2ZjAwYzgsMHgwMGJjMmY2ZiwweDAwY2MwMGMwCisJLmxvbmcJMHgyZjZmMDAzOCwweDAwYzQyZjZmLDB4MDAzYzAwYzgsMHgyZjZmMDA0MAorCS5sb25nCTB4MDBjY2RmZmMsMHgwMDAwMDBiOCwweDYwZmZmZmZmLDB4ZjFhNDA4MmUKKwkubG9uZwkweDAwMDUwMDA0LDB4NjYwMDAwMGMsMHgyMDZlZmZkOCwweDRlNjA2MDAwCisJLmxvbmcJMHhmYmRhMGMyZSwweDAwMDhmZjRhLDB4NjYwMGZiZDAsMHhmMjJlZDBjMAorCS5sb25nCTB4ZmZkY2YyMmUsMHg5YzAwZmY2MCwweDRjZWUwMzAzLDB4ZmY5YzNkN2MKKwkubG9uZwkweDMwYzQwMDBhLDB4M2Q3Y2UwMDEsMHhmZjZlZjM2ZSwweGZmNmMyYzU2CisJLmxvbmcJMHgyZjZmMDBjNCwweDAwYjgyZjZmLDB4MDBjODAwYmMsMHgyZjZmMDBjYworCS5sb25nCTB4MDBjMDJmNmYsMHgwMDM4MDBjNCwweDJmNmYwMDNjLDB4MDBjODJmNmYKKwkubG9uZwkweDAwNDAwMGNjLDB4ZGZmYzAwMDAsMHgwMGI4NjBmZiwweGZmZmZmMTA2CisJLmxvbmcJMHhlOWVlMDBjMywweGZmNDIwYzAwLDB4MDAwMTY3MDgsMHgwYzAwMDAwNQorCS5sb25nCTB4NjczNDRlNzUsMHgzMDJlZmY2YywweDAyNDA3ZmZmLDB4NjcyNjBjNDAKKwkubG9uZwkweDNmODA2ZTIwLDB4NDQ0MDA2NDAsMHgzZjgxMjIyZSwweGZmNzBlMGE5CisJLmxvbmcJMHgwOGMxMDAxZiwweDJkNDFmZjcwLDB4MDI2ZTgwMDAsMHhmZjZjMDA2ZQorCS5sb25nCTB4M2Y4MGZmNmMsMHg0ZTc1MzAyZSwweGZmNmMwMjQwLDB4N2ZmZjY3M2EKKwkubG9uZwkweDBjNDAzYzAwLDB4NmUzNDRhMmUsMHhmZjZjNWJlZSwweGZmNmUzZDQwCisJLmxvbmcJMHhmZjZjNDI4MCwweDQxZWVmZjZjLDB4MzIzYzNjMDEsMHg2MWZmMDAwMAorCS5sb25nCTB4YjE1NjMwM2MsMHgzYzAwNGEyZSwweGZmNmU2NzA0LDB4MDhjMDAwMGYKKwkubG9uZwkweDA4ZWUwMDA3LDB4ZmY3MDNkNDAsMHhmZjZjNGU3NSwweDA4MmUwMDA1CisJLmxvbmcJMHgwMDA0NjdmZiwweGZmZmZmMTc2LDB4MmQ2ODAwMDAsMHhmZjc4MmQ2OAorCS5sb25nCTB4MDAwNGZmN2MsMHgyZDY4MDAwOCwweGZmODA0MjgxLDB4NGU3NTJmMDAKKwkubG9uZwkweDRlN2EwODA4LDB4MDgwMDAwMDEsMHg2NjAwMDQ2MCwweDIwMWY0ZTU2CisJLmxvbmcJMHhmZjQwNDhlZSwweDAzMDNmZjljLDB4ZjIyZWJjMDAsMHhmZjYwZjIyZQorCS5sb25nCTB4ZjBjMGZmZGMsMHgyZDZlMDAwNiwweGZmNDQyMDZlLDB4ZmY0NDU4YWUKKwkubG9uZwkweGZmNDQ2MWZmLDB4ZmZmZmYxNTIsMHgyZDQwZmY0MCwweDRhNDA2YjAwCisJLmxvbmcJMHgwMjBlMDJhZSwweDAwZmYwMGZmLDB4ZmY2NDA4MDAsMHgwMDBhNjYxOAorCS5sb25nCTB4MjA2ZWZmNDQsMHg0M2VlZmY2YywweDcwMGM2MWZmLDB4ZmZmZmYwZDIKKwkubG9uZwkweDRhODE2NjAwLDB4MDQ5MjYwNDgsMHgyMDZlZmY0NCwweDQzZWVmZjZjCisJLmxvbmcJMHg3MDBjNjFmZiwweGZmZmZmMGJhLDB4NGE4MTY2MDAsMHgwNDdhZTllZQorCS5sb25nCTB4MDA0ZmZmNmMsMHgwYzQwN2ZmZiwweDY3MjYxMDJlLDB4ZmY2ZjAyMDAKKwkubG9uZwkweDAwMGY2NjBjLDB4NGFhZWZmNzAsMHg2NjA2NGFhZSwweGZmNzQ2NzEwCisJLmxvbmcJMHg0MWVlZmY2YywweDYxZmYwMDAwLDB4Yjg4Y2YyMmUsMHhmMDgwZmY2YworCS5sb25nCTB4MDZhZTAwMDAsMHgwMDBjZmY0NCwweDQxZWVmZjZjLDB4NjFmZjAwMDAKKwkubG9uZwkweGIzYzIxZDQwLDB4ZmY0ZTBjMDAsMHgwMDA2NjYwYSwweDYxZmYwMDAwCisJLmxvbmcJMHhiMzIyMWQ0MCwweGZmNGU0MjJlLDB4ZmY1MzA4MmUsMHgwMDA1ZmY0MworCS5sb25nCTB4Njc0ODA4MmUsMHgwMDA0ZmY0MywweDY2MmNlOWVlLDB4MDE4M2ZmNDIKKwkubG9uZwkweDYxZmYwMDAwLDB4YWVlYzQxZWUsMHhmZjc4NjFmZiwweDAwMDBiMzg0CisJLmxvbmcJMHgxZDQwZmY0ZiwweDBjMDAwMDA2LDB4NjYyMDYxZmYsMHgwMDAwYjJlNAorCS5sb25nCTB4MWQ0MGZmNGYsMHg2MDE0MDgyZSwweDAwMDNmZjQzLDB4NjcwYzUwZWUKKwkubG9uZwkweGZmNTMwODJlLDB4MDAwMWZmNDMsMHg2N2MwNDI4MCwweDEwMmVmZjYzCisJLmxvbmcJMHgxMjJlZmY0MywweDAyNDEwMDdmLDB4ZjIzYzkwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4ZjIzYzg4MDAsMHgwMDAwMDAwMCwweDQxZWVmZjZjLDB4NDNlZWZmNzgKKwkubG9uZwkweDIyM2IxNTMwLDB4MDAwMDYyY2EsMHg0ZWJiMTkzMCwweDAwMDA2MmMyCisJLmxvbmcJMHgxMDJlZmY2MiwweDY2NDA0YTJlLDB4ZmY1MzY2MGMsMHhlOWVlMDE4MworCS5sb25nCTB4ZmY0MjYxZmYsMHgwMDAwYWVmYSwweDJkNmUwMDA2LDB4ZmY2ODJkNmUKKwkubG9uZwkweGZmNDQwMDA2LDB4ZjIyZWQwYzAsMHhmZmRjZjIyZSwweDljMDBmZjYwCisJLmxvbmcJMHg0Y2VlMDMwMywweGZmOWM0ZTVlLDB4MDgxNzAwMDcsMHg2NjAwMDA5NgorCS5sb25nCTB4NjBmZmZmZmYsMHhlZTZlYzAyZSwweGZmNjZlZGMwLDB4MDYwODY2MTIKKwkubG9uZwkweDA4MmUwMDA0LDB4ZmY2NjY3YWUsMHgwODJlMDAwMSwweGZmNjI2N2FjCisJLmxvbmcJMHg2MDM0MDQ4MCwweDAwMDAwMDE4LDB4MGMwMDAwMDYsMHg2NjEwMDgyZQorCS5sb25nCTB4MDAwNGZmNjYsMHg2NjIwMDgyZSwweDAwMDNmZjY2LDB4NjYyMDNkN2IKKwkubG9uZwkweDAyMDZmZjZlLDB4NjAxZWUwMDIsMHhlMDA2ZTAwNCwweGUwMDVlMDAzCisJLmxvbmcJMHhlMDAyZTAwMSwweGUwMDEzZDdjLDB4ZTAwNWZmNmUsMHg2MDA2M2Q3YworCS5sb25nCTB4ZTAwM2ZmNmUsMHgyZDZlMDAwNiwweGZmNjgyZDZlLDB4ZmY0NDAwMDYKKwkubG9uZwkweGYyMmVkMGMwLDB4ZmZkY2YyMmUsMHg5YzAwZmY2MCwweDRjZWUwMzAzCisJLmxvbmcJMHhmZjljZjM2ZSwweGZmNmM0ZTVlLDB4MDgxNzAwMDcsMHg2NjA2NjBmZgorCS5sb25nCTB4ZmZmZmVkZTAsMHgyZjE3M2Y2ZiwweDAwMDgwMDA0LDB4M2Y3YzIwMjQKKwkubG9uZwkweDAwMDZmMjJmLDB4YTQwMDAwMDgsMHg2MGZmZmZmZiwweGVlYjgwODAwCisJLmxvbmcJMHgwMDBlNjcwMCwweDAxYzIwODJlLDB4MDAwNTAwMDQsMHg2NjE2NGU2OAorCS5sb25nCTB4MmQ0OGZmZDgsMHg2MWZmMDAwMCwweDk1NjQyMDZlLDB4ZmZkODRlNjAKKwkubG9uZwkweDYwMDAwMWFhLDB4NDIyZWZmNGEsMHg0MWVlMDAwYywweDJkNDhmZmQ4CisJLmxvbmcJMHg2MWZmMDAwMCwweDk1NDgwYzJlLDB4MDAwOGZmNGEsMHg2NzAwMDA4NgorCS5sb25nCTB4MGMyZTAwMDQsMHhmZjRhNjYwMCwweDAxODQwODJlLDB4MDAwNzAwMDQKKwkubG9uZwkweDY2MzYzZGFlLDB4MDAwNDA4MDQsMHgyZGFlZmY0NCwweDA4MDYzZGJjCisJLmxvbmcJMHgwMGYwMDgwYSwweDQxZjYwODA0LDB4MmQ0ODAwMDQsMHhmMjJlZDBjMAorCS5sb25nCTB4ZmZkY2YyMmUsMHg5YzAwZmY2MCwweDRjZWUwMzAzLDB4ZmY5YzRlNWUKKwkubG9uZwkweDJlNWY2MGZmLDB4ZmZmZmVkM2MsMHgzZGFlMDAwNCwweDA4MDAyZGFlCisJLmxvbmcJMHhmZjQ0MDgwMiwweDNkYmMyMDI0LDB4MDgwNjJkYWUsMHgwMDA2MDgwOAorCS5sb25nCTB4NDFmNjA4MDAsMHgyZDQ4MDAwNCwweGYyMmVkMGMwLDB4ZmZkY2YyMmUKKwkubG9uZwkweDljMDBmZjYwLDB4NGNlZTAzMDMsMHhmZjljNGU1ZSwweDJlNWY2MGZmCisJLmxvbmcJMHhmZmZmZWRmMiwweDFkNDEwMDBhLDB4MWQ0MDAwMGIsMHhmMjJlZDBjMAorCS5sb25nCTB4ZmZkY2YyMmUsMHg5YzAwZmY2MCwweDRjZWUwMzAzLDB4ZmY5YzJmMTYKKwkubG9uZwkweDJmMDAyZjAxLDB4MmYyZWZmNDQsMHg0MjgwMTAyZSwweDAwMGI0NDgwCisJLmxvbmcJMHgwODJlMDAwNywweDAwMDQ2NzFjLDB4M2RhZTAwMDQsMHgwODAwMmRhZQorCS5sb25nCTB4MDAwNjA4MDgsMHgyZDlmMDgwMiwweDNkYmMyMDI0LDB4MDgwNjQ4NzYKKwkubG9uZwkweDA4MDA2MDE0LDB4M2RhZTAwMDQsMHgwODA0MmQ5ZiwweDA4MDYzZGJjCisJLmxvbmcJMHgwMGYwMDgwYSwweDQ4NzYwODA0LDB4NDI4MTEyMmUsMHgwMDBhNGEwMQorCS5sb25nCTB4NmEwY2YyMzYsMHhmMDgwMDgwYywweDA2ODAwMDAwLDB4MDAwY2UzMDkKKwkubG9uZwkweDZhMGNmMjM2LDB4ZjA0MDA4MGMsMHgwNjgwMDAwMCwweDAwMGNlMzA5CisJLmxvbmcJMHg2YTBjZjIzNiwweGYwMjAwODBjLDB4MDY4MDAwMDAsMHgwMDBjZTMwOQorCS5sb25nCTB4NmEwY2YyMzYsMHhmMDEwMDgwYywweDA2ODAwMDAwLDB4MDAwY2UzMDkKKwkubG9uZwkweDZhMGNmMjM2LDB4ZjAwODA4MGMsMHgwNjgwMDAwMCwweDAwMGNlMzA5CisJLmxvbmcJMHg2YTBjZjIzNiwweGYwMDQwODBjLDB4MDY4MDAwMDAsMHgwMDBjZTMwOQorCS5sb25nCTB4NmEwY2YyMzYsMHhmMDAyMDgwYywweDA2ODAwMDAwLDB4MDAwY2UzMDkKKwkubG9uZwkweDZhMDZmMjM2LDB4ZjAwMTA4MGMsMHgyMjJmMDAwNCwweDIwMmYwMDA4CisJLmxvbmcJMHgyYzZmMDAwYywweDJlNWYwODE3LDB4MDAwNzY3ZmYsMHhmZmZmZWMwNAorCS5sb25nCTB4NjBmZmZmZmYsMHhlY2YwNjFmZiwweDAwMDA5YmRhLDB4ZjIyZWQwYzAKKwkubG9uZwkweGZmZGNmMjJlLDB4OWMwMGZmNjAsMHg0Y2VlMDMwMywweGZmOWMwODJlCisJLmxvbmcJMHgwMDA3MDAwNCwweDY2MGUyZDZlLDB4ZmY0NDAwMDYsMHg0ZTVlNjBmZgorCS5sb25nCTB4ZmZmZmViZDAsMHgyYzU2M2Y2ZiwweDAwYzQwMGMwLDB4MmY2ZjAwYzYKKwkubG9uZwkweDAwYzgyZjZmLDB4MDAwNDAwYzIsMHgzZjdjMjAyNCwweDAwYzZkZmZjCisJLmxvbmcJMHgwMDAwMDBjMCwweDYwZmZmZmZmLDB4ZWM5YzIwMWYsMHg0ZTU2ZmY0MAorCS5sb25nCTB4NDhlZTAzMDMsMHhmZjljMmQ2ZSwweDAwMDZmZjQ0LDB4MjA2ZWZmNDQKKwkubG9uZwkweDU4YWVmZjQ0LDB4NjFmZmZmZmYsMHhlZDAwMmQ0MCwweGZmNDA0YTQwCisJLmxvbmcJMHg2YjA0NzAxMCwweDYwMjYwODAwLDB4MDAwZTY2MTAsMHhlOWMwMTRjMworCS5sb25nCTB4NzAwYzBjMDEsMHgwMDA3NjYxNCwweDU4ODA2MDEwLDB4NDI4MDYxZmYKKwkubG9uZwkweDAwMDA5NjdjLDB4MjAyZWZmNDQsMHg5MGFlMDAwNiwweDNkNDAwMDBhCisJLmxvbmcJMHg0Y2VlMDMwMywweGZmOWM0ZTVlLDB4NTE4ZjJmMDAsMHgzZjZmMDAwYworCS5sb25nCTB4MDAwNDJmNmYsMHgwMDBlMDAwNiwweDQyODAzMDJmLDB4MDAxMjJmNmYKKwkubG9uZwkweDAwMDYwMDEwLDB4ZDFhZjAwMDYsMHgzZjdjNDAyYywweDAwMGEyMDFmCisJLmxvbmcJMHg2MGZmZmZmZiwweGViZTQ0ZTdhLDB4MDgwODA4MDAsMHgwMDAxNjYwYworCS5sb25nCTB4ZjIyZTljMDAsMHhmZjYwZjIyZSwweGQwYzBmZmRjLDB4NGNlZTAzMDMKKwkubG9uZwkweGZmOWM0ZTVlLDB4NTE0ZjJlYWYsMHgwMDA4M2Y2ZiwweDAwMGMwMDA0CisJLmxvbmcJMHgzZjdjNDAwOCwweDAwMDYyZjZmLDB4MDAwMjAwMDgsMHgyZjdjMDk0MgorCS5sb25nCTB4ODAwMTAwMGMsMHgwODE3MDAwNSwweDY3MDYwOGVmLDB4MDAwMjAwMGQKKwkubG9uZwkweDYwZmZmZmZmLDB4ZWJkNjRmZWUsMHhmZjQwNGU3YSwweDE4MDgwODAxCisJLmxvbmcJMHgwMDAxNjYwYywweGYyMmVkMGMwLDB4ZmZkY2YyMmYsMHg5YzAwMDAyMAorCS5sb25nCTB4MmM1NjJmNmYsMHgwMGM0MDBiYywweDNmNmYwMGM4LDB4MDBjMDNmN2MKKwkubG9uZwkweDQwMDgwMGMyLDB4MmY0ODAwYzQsMHgzZjQwMDBjOCwweDNmN2MwMDAxCisJLmxvbmcJMHgwMGNhNGNlZiwweDAzMDMwMDVjLDB4ZGVmYzAwYmMsMHg2MGE2NGU1NgorCS5sb25nCTB4ZmY0MGYzMmUsMHhmZjZjNDhlZSwweDAzMDNmZjljLDB4ZjIyZWJjMDAKKwkubG9uZwkweGZmNjBmMjJlLDB4ZjBjMGZmZGMsMHgyZDZlZmY2OCwweGZmNDQyMDZlCisJLmxvbmcJMHhmZjQ0NThhZSwweGZmNDQ2MWZmLDB4ZmZmZmViY2UsMHgyZDQwZmY0MAorCS5sb25nCTB4MDgwMDAwMGQsMHg2NjI4NDFlZSwweGZmNmM2MWZmLDB4ZmZmZmYxZWEKKwkubG9uZwkweGYyMmVkMGMwLDB4ZmZkY2YyMmUsMHg5YzAwZmY2MCwweDRjZWUwMzAzCisJLmxvbmcJMHhmZjljZjM2ZSwweGZmNmM0ZTVlLDB4NjBmZmZmZmYsMHhlYTk0MzIyZQorCS5sb25nCTB4ZmY2YzAyNDEsMHg3ZmZmMGM0MSwweDdmZmY2NjFhLDB4NGFhZWZmNzQKKwkubG9uZwkweDY2MGMyMjJlLDB4ZmY3MDAyODEsMHg3ZmZmZmZmZiwweDY3MDgyZDZlCisJLmxvbmcJMHhmZjcwZmY1NCwweDYwMTIyMjNjLDB4N2ZmZmZmZmYsMHg0YTJlZmY2YworCS5sb25nCTB4NmEwMjUyODEsMHgyZDQxZmY1NCwweGU5YzAwNGMzLDB4MTIyZWZmNDEKKwkubG9uZwkweDMwN2IwMjA2LDB4NGVmYjg4MDIsMHgwMDZjMDAwMCwweDAwMDBmZjk4CisJLmxvbmcJMHgwMDNlMDAwMCwweDAwMTAwMDAwLDB4MTAyZWZmNTQsMHgwYzAxMDAwNworCS5sb25nCTB4NmYxNjIwNmUsMHgwMDBjNjFmZiwweGZmZmZlYjg2LDB4NGE4MTY2ZmYKKwkubG9uZwkweDAwMDBiY2E4LDB4NjAwMGZmNmEsMHgwMjQxMDAwNywweDYxZmYwMDAwCisJLmxvbmcJMHhhODA0NjAwMCwweGZmNWMzMDJlLDB4ZmY1NDBjMDEsMHgwMDA3NmYxNgorCS5sb25nCTB4MjA2ZTAwMGMsMHg2MWZmZmZmZiwweGViNmU0YTgxLDB4NjZmZjAwMDAKKwkubG9uZwkweGJjODg2MDAwLDB4ZmYzYzAyNDEsMHgwMDA3NjFmZiwweDAwMDBhNzlhCisJLmxvbmcJMHg2MDAwZmYyZSwweDIwMmVmZjU0LDB4MGMwMTAwMDcsMHg2ZjE2MjA2ZQorCS5sb25nCTB4MDAwYzYxZmYsMHhmZmZmZWI1NiwweDRhODE2NmZmLDB4MDAwMGJjNjgKKwkubG9uZwkweDYwMDBmZjBlLDB4MDI0MTAwMDcsMHg2MWZmMDAwMCwweGE3MzA2MDAwCisJLmxvbmcJMHhmZjAwNGU1NiwweGZmNDBmMzJlLDB4ZmY2YzQ4ZWUsMHgwMzAzZmY5YworCS5sb25nCTB4ZjIyZWJjMDAsMHhmZjYwZjIyZSwweGYwYzBmZmRjLDB4MmQ2ZWZmNjgKKwkubG9uZwkweGZmNDQyMDZlLDB4ZmY0NDU4YWUsMHhmZjQ0NjFmZiwweGZmZmZlYThhCisJLmxvbmcJMHgyZDQwZmY0MCwweDA4MDAwMDBkLDB4NjYwMDAwMmEsMHg0MWVlZmY2YworCS5sb25nCTB4NjFmZmZmZmYsMHhmMGE0ZjIyZSwweGQwYzBmZmRjLDB4ZjIyZTljMDAKKwkubG9uZwkweGZmNjA0Y2VlLDB4MDMwM2ZmOWMsMHhmMzZlZmY2YywweDRlNWU2MGZmCisJLmxvbmcJMHhmZmZmZTk2NCwweGU5YzAwNGMzLDB4MTIyZWZmNDEsMHgzMDdiMDIwNgorCS5sb25nCTB4NGVmYjg4MDIsMHgwMDc0MDBhNiwweDAxNWEwMDAwLDB4MDA0MjAxMDQKKwkubG9uZwkweDAwMTAwMDAwLDB4MTAyZWZmNzAsMHgwOGMwMDAwNiwweDBjMDEwMDA3CisJLmxvbmcJMHg2ZjE2MjA2ZSwweDAwMGM2MWZmLDB4ZmZmZmVhNzYsMHg0YTgxNjZmZgorCS5sb25nCTB4MDAwMGJiOTgsMHg2MDAwZmZhMCwweDAyNDEwMDA3LDB4NjFmZjAwMDAKKwkubG9uZwkweGE2ZjQ2MDAwLDB4ZmY5MjMwMmUsMHhmZjcwMDhjMCwweDAwMGUwYzAxCisJLmxvbmcJMHgwMDA3NmYxNiwweDIwNmUwMDBjLDB4NjFmZmZmZmYsMHhlYTVhNGE4MQorCS5sb25nCTB4NjZmZjAwMDAsMHhiYjc0NjAwMCwweGZmNmUwMjQxLDB4MDAwNzYxZmYKKwkubG9uZwkweDAwMDBhNjg2LDB4NjAwMGZmNjAsMHgyMDJlZmY3MCwweDA4YzAwMDFlCisJLmxvbmcJMHgwYzAxMDAwNywweDZmMTYyMDZlLDB4MDAwYzYxZmYsMHhmZmZmZWEzZQorCS5sb25nCTB4NGE4MTY2ZmYsMHgwMDAwYmI1MCwweDYwMDBmZjNjLDB4MDI0MTAwMDcKKwkubG9uZwkweDYxZmYwMDAwLDB4YTYxODYwMDAsMHhmZjJlMGMwMSwweDAwMDc2ZjJlCisJLmxvbmcJMHgyMDJlZmY2YywweDAyODA4MDAwLDB4MDAwMDAwODAsMHg3ZmMwMDAwMAorCS5sb25nCTB4MjIyZWZmNzAsMHhlMDg5ODA4MSwweDIwNmUwMDBjLDB4NjFmZmZmZmYKKwkubG9uZwkweGU5ZmM0YTgxLDB4NjZmZjAwMDAsMHhiYjBlNjAwMCwweGZlZmEyMDJlCisJLmxvbmcJMHhmZjZjMDI4MCwweDgwMDAwMDAwLDB4MDA4MDdmYzAsMHgwMDAwMmYwMQorCS5sb25nCTB4MjIyZWZmNzAsMHhlMDg5ODA4MSwweDIyMWYwMjQxLDB4MDAwNzYxZmYKKwkubG9uZwkweDAwMDBhNWJhLDB4NjAwMGZlZDAsMHgyMDJlZmY2YywweDAyODA4MDAwCisJLmxvbmcJMHgwMDAwMDA4MCwweDdmZjgwMDAwLDB4MjIyZWZmNzAsMHgyZDQwZmY4NAorCS5sb25nCTB4NzAwYmUwYTksMHg4M2FlZmY4NCwweDIyMmVmZjcwLDB4MDI4MTAwMDAKKwkubG9uZwkweDA3ZmZlMGI5LDB4MmQ0MWZmODgsMHgyMjJlZmY3NCwweGUwYTk4M2FlCisJLmxvbmcJMHhmZjg4NDFlZSwweGZmODQyMjZlLDB4MDAwYzcwMDgsMHg2MWZmZmZmZgorCS5sb25nCTB4ZThjYzRhODEsMHg2NmZmMDAwMCwweGJhOWM2MDAwLDB4ZmU3YTQyMmUKKwkubG9uZwkweGZmNGEzZDZlLDB4ZmY2Y2ZmODQsMHg0MjZlZmY4NiwweDIwMmVmZjcwCisJLmxvbmcJMHgwOGMwMDAxZSwweDJkNDBmZjg4LDB4MmQ2ZWZmNzQsMHhmZjhjMDgyZQorCS5sb25nCTB4MDAwNTAwMDQsMHg2NjM4NGU2OCwweDJkNDhmZmQ4LDB4MmQ1NmZmZDQKKwkubG9uZwkweDYxZmYwMDAwLDB4OTg5MjIyNDgsMHgyZDQ4MDAwYywweDIwNmVmZmQ4CisJLmxvbmcJMHg0ZTYwMmNhZSwweGZmZDQ0MWVlLDB4ZmY4NDcwMGMsMHg2MWZmZmZmZgorCS5sb25nCTB4ZTg2YzRhODEsMHg2NmZmMDAwMCwweGJhNGE2MDAwLDB4ZmUxYTJkNTYKKwkubG9uZwkweGZmZDQ2MWZmLDB4MDAwMDk4NjAsMHgyMjQ4MmQ0OCwweDAwMGMyY2FlCisJLmxvbmcJMHhmZmQ0MGMyZSwweDAwMDhmZjRhLDB4NjZjY2YyMmUsMHhkMGMwZmZkYworCS5sb25nCTB4ZjIyZTljMDAsMHhmZjYwNGNlZSwweDAzMDNmZjljLDB4ZjM2ZWZmNmMKKwkubG9uZwkweDJjNmVmZmQ0LDB4MmY2ZjAwYzQsMHgwMGI4MmY2ZiwweDAwYzgwMGJjCisJLmxvbmcJMHgyZjZmMDBjYywweDAwYzAyZjZmLDB4MDA0NDAwYzQsMHgyZjZmMDA0OAorCS5sb25nCTB4MDBjODJmNmYsMHgwMDRjMDBjYywweGRmZmMwMDAwLDB4MDBiODYwZmYKKwkubG9uZwkweGZmZmZlNzM0LDB4NGU1NmZmNDAsMHhmMzJlZmY2YywweDQ4ZWUwMzAzCisJLmxvbmcJMHhmZjljZjIyZSwweGJjMDBmZjYwLDB4ZjIyZWYwYzAsMHhmZmRjMmQ2ZQorCS5sb25nCTB4ZmY2OGZmNDQsMHgyMDZlZmY0NCwweDU4YWVmZjQ0LDB4NjFmZmZmZmYKKwkubG9uZwkweGU3ZjgyZDQwLDB4ZmY0MDA4MDAsMHgwMDBkNjYwMCwweDAxMDZlOWMwCisJLmxvbmcJMHgwNGMzNjYyMiwweDBjNmU0MDFlLDB4ZmY2YzY2MWEsMHhmMjNjOTAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHhmMjJlNDAwMCwweGZmNzBmMjJlLDB4NjgwMGZmNmMKKwkubG9uZwkweDNkN2NlMDAxLDB4ZmY2ZTQxZWUsMHhmZjZjNjFmZiwweGZmZmZlZGVhCisJLmxvbmcJMHgwMmFlMDBmZiwweDAxZmZmZjY0LDB4ZjIzYzkwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4ZjIzYzg4MDAsMHgwMDAwMDAwMCwweGU5ZWUxMDA2LDB4ZmY0MjBjMDEKKwkubG9uZwkweDAwMTc2NzAwLDB4MDA5NjQxZWUsMHhmZjZjNjFmZiwweDAwMDBhYTg0CisJLmxvbmcJMHgxZDQwZmY0ZSwweDA4MmUwMDA1LDB4ZmY0MzY3MmUsMHgwODJlMDAwNAorCS5sb25nCTB4ZmY0MzY2MjYsMHhlOWVlMDE4MywweGZmNDI2MWZmLDB4MDAwMGE1YzIKKwkubG9uZwkweDQxZWVmZjc4LDB4NjFmZjAwMDAsMHhhYTVhMGMwMCwweDAwMDY2NjA2CisJLmxvbmcJMHg2MWZmMDAwMCwweGE5YmUxZDQwLDB4ZmY0ZjQyODAsMHgxMDJlZmY2MworCS5sb25nCTB4MTIyZWZmNDMsMHgwMjQxMDA3ZiwweDQxZWVmZjZjLDB4NDNlZWZmNzgKKwkubG9uZwkweDIyM2IxNTMwLDB4MDAwMDU5Y2EsMHg0ZWJiMTkzMCwweDAwMDA1OWMyCisJLmxvbmcJMHhlOWVlMDE4MywweGZmNDI2MWZmLDB4MDAwMGE2MDYsMHhmMjJlZDBjMAorCS5sb25nCTB4ZmZkY2YyMmUsMHg5YzAwZmY2MCwweDRjZWUwMzAzLDB4ZmY5Y2YzNmUKKwkubG9uZwkweGZmNmM0ZTVlLDB4NjBmZmZmZmYsMHhlNWNjNDI4MCwweDEwMmVmZjYzCisJLmxvbmcJMHgxMjJlZmY0MywweDAyODEwMDAwLDB4MDA3ZjYxZmYsMHgwMDAwNDNjZQorCS5sb25nCTB4NjBiZTFkN2MsMHgwMDAwZmY0ZSwweDQyODAxMDJlLDB4ZmY2MzAyYWUKKwkubG9uZwkweGZmZmYwMGZmLDB4ZmY2NDQxZWUsMHhmZjZjNjFmZiwweDAwMDA5YmU0CisJLmxvbmcJMHg2MGFhNGU1NiwweGZmNDBmMzJlLDB4ZmY2YzQ4ZWUsMHgwMzAzZmY5YworCS5sb25nCTB4ZjIyZWJjMDAsMHhmZjYwZjIyZSwweGYwYzBmZmRjLDB4MmQ2ZWZmNjgKKwkubG9uZwkweGZmNDQyMDZlLDB4ZmY0NDU4YWUsMHhmZjQ0NjFmZiwweGZmZmZlNjlhCisJLmxvbmcJMHgyZDQwZmY0MCwweDQxZWVmZjZjLDB4NjFmZmZmZmYsMHhlY2JjZjIyZQorCS5sb25nCTB4ZDBjMGZmZGMsMHhmMjJlOWMwMCwweGZmNjA0Y2VlLDB4MDMwM2ZmOWMKKwkubG9uZwkweGYzNmVmZjZjLDB4NGU1ZTYwZmYsMHhmZmZmZTU5MiwweDBjNmYyMDJjCisJLmxvbmcJMHgwMDA2NjdmZiwweDAwMDAwMGFhLDB4MGM2ZjQwMmMsMHgwMDA2NjdmZgorCS5sb25nCTB4ZmZmZmU1YTYsMHg0ZTU2ZmY0MCwweDQ4ZWUwMzAzLDB4ZmY5YzJkNmUKKwkubG9uZwkweDAwMDZmZjQ0LDB4MjA2ZWZmNDQsMHg1OGFlZmY0NCwweDYxZmZmZmZmCisJLmxvbmcJMHhlNjM4ZTljMCwweDEwMGEwYzQxLDB4MDNjODY2NjQsMHhlOWMwMTQwNgorCS5sb25nCTB4MGMwMTAwMTcsMHg2NjVhNGU3YSwweDA4MDgwODAwLDB4MDAwMTY3MmEKKwkubG9uZwkweDRjZWUwMzAzLDB4ZmY5YzRlNWUsMHg1MThmM2VhZiwweDAwMDgyZjZmCisJLmxvbmcJMHgwMDBhMDAwMiwweDNmN2M0MDJjLDB4MDAwNjJmNmYsMHgwMDAyMDAwYworCS5sb25nCTB4NThhZjAwMDIsMHg2MGZmZmZmZiwweGU1NDA0Y2VlLDB4MDMwM2ZmOWMKKwkubG9uZwkweDRlNWVmMjJmLDB4ODQwMDAwMDIsMHg1OGFmMDAwMiwweDJmMTcyZjZmCisJLmxvbmcJMHgwMDA4MDAwNCwweDFmN2MwMDIwLDB4MDAwNjYwZmYsMHgwMDAwMDAxMgorCS5sb25nCTB4NGNlZTAzMDMsMHhmZjljNGU1ZSwweDYwZmZmZmZmLDB4ZTRmNjRlNTYKKwkubG9uZwkweGZmNDA0OGVlLDB4MDMwM2ZmOWMsMHhmMjJlYmMwMCwweGZmNjBmMjJlCisJLmxvbmcJMHhmMGMwZmZkYywweDA4MmUwMDA1LDB4MDAwNDY2MDgsMHg0ZTY4MmQ0OAorCS5sb25nCTB4ZmZkODYwMGMsMHg0MWVlMDAxMCwweDJkNDhmZmQ4LDB4MmQ0OGZmZDQKKwkubG9uZwkweDJkNmVmZjY4LDB4ZmY0NDIwNmUsMHhmZjQ0NThhZSwweGZmNDQ2MWZmCisJLmxvbmcJMHhmZmZmZTU3NiwweDJkNDBmZjQwLDB4ZjIzYzkwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4ZjIzYzg4MDAsMHgwMDAwMDAwMCwweDQyMmVmZjRhLDB4MDgwMDAwMTYKKwkubG9uZwkweDY2MDAwMTgyLDB4NDIyZWZmNTMsMHgwMmFlMDBmZiwweDAwZmZmZjY0CisJLmxvbmcJMHhlOWMwMTQwNiwweDBjMDEwMDE3LDB4NjcwMDAwYmUsMHg2MWZmMDAwMAorCS5sb25nCTB4OTVmYzQyODAsMHgxMDJlZmY2MywweDEyMmVmZjQzLDB4MDI0MTAwM2YKKwkubG9uZwkweGU3NDk4MjJlLDB4ZmY0ZTQzZWUsMHhmZjc4NDFlZSwweGZmNmMzMjNiCisJLmxvbmcJMHgxMzIwMDJiMiwweDRlYmIxMTIwLDB4MDJhYzEwMmUsMHhmZjYyNjYwMAorCS5sb25nCTB4MDBhMmU5ZWUsMHgwMTgzZmY0MiwweDYxZmYwMDAwLDB4YTNlNGYyMmUKKwkubG9uZwkweGQwYzBmZmRjLDB4ZjIyZTljMDAsMHhmZjYwNGNlZSwweDAzMDNmZjljCisJLmxvbmcJMHgwYzJlMDAwNCwweGZmNGE2NzJhLDB4MGMyZTAwMDgsMHhmZjRhNjcyMgorCS5sb25nCTB4NGU1ZTA4MTcsMHgwMDA3NjdmZiwweGZmZmZlMzU4LDB4ZjMyN2YyMmYKKwkubG9uZwkweGE0MDAwMDE0LDB4ZjM1ZjNmN2MsMHgyMDI0MDAwNiwweDYwZmZmZmZmCisJLmxvbmcJMHhlNDM0MDgyZSwweDAwMDUwMDA0LDB4NjYwYzJmMDgsMHgyMDZlZmZkOAorCS5sb25nCTB4NGU2MDIwNWYsMHg2MGNhMmYwMCwweDIwMmVmZmQ4LDB4OTBhZWZmZDQKKwkubG9uZwkweDJkYWUwMDA4LDB4MDgwODJkYWUsMHgwMDA0MDgwNCwweDNkNDAwMDA0CisJLmxvbmcJMHgyMDFmNGU1ZSwweGRlZDc2MGFhLDB4NDI4MDEwMmUsMHhmZjYzMTIyZQorCS5sb25nCTB4ZmY0MzAyODEsMHgwMDAwMDA3ZiwweDYxZmYwMDAwLDB4NDE1MDYwMDAKKwkubG9uZwkweGZmNWFjMDJlLDB4ZmY2NmVkYzAsMHgwNjA4NjYxNiwweDA4MmUwMDA0CisJLmxvbmcJMHhmZjY2NjcwMCwweGZmNGUwODJlLDB4MDAwMWZmNjIsMHg2NzAwZmY0NAorCS5sb25nCTB4NjAzZTA0ODAsMHgwMDAwMDAxOCwweDBjMDAwMDA2LDB4NjYxMDA4MmUKKwkubG9uZwkweDAwMDRmZjY2LDB4NjYyYTA4MmUsMHgwMDAzZmY2NiwweDY2MzAyZjAwCisJLmxvbmcJMHg2MWZmZmZmZiwweGYxZWUyMDFmLDB4M2Q3YjAyMDYsMHhmZjZlNjAyYQorCS5sb25nCTB4ZTAwMmUwMDYsMHhlMDA0ZTAwNSwweGUwMDNlMDAyLDB4ZTAwMWUwMDEKKwkubG9uZwkweDYxZmZmZmZmLDB4ZjFjZTNkN2MsMHhlMDA1ZmY2ZSwweDYwMGM2MWZmCisJLmxvbmcJMHhmZmZmZjFjMCwweDNkN2NlMDAzLDB4ZmY2ZWYyMmUsMHhkMGMwZmZkYworCS5sb25nCTB4ZjIyZTljMDAsMHhmZjYwNGNlZSwweDAzMDNmZjljLDB4ZjM2ZWZmNmMKKwkubG9uZwkweDYwMDBmZWVlLDB4ZTljMDEyODMsMHgwYzAxMDAwMSwweDY3MDAwMDU2CisJLmxvbmcJMHgwYzAxMDAwNywweDY2MDAwMDc4LDB4ZTljMDEzNDMsMHgwYzAxMDAwMgorCS5sb25nCTB4NmQwMDAwNmMsMHg2MWZmMDAwMCwweDgyNzgwYzJlLDB4MDAwMmZmNGEKKwkubG9uZwkweDY3MDAwMGQyLDB4MGMyZTAwMDEsMHhmZjRhNjYwMCwweDAxMDAyZDZlCisJLmxvbmcJMHhmZjY4MDAwYywweDNkN2MyMDFjLDB4MDAwYWYyMmUsMHhkMGMwZmZkYworCS5sb25nCTB4ZjIyZTljMDAsMHhmZjYwNGNlZSwweDAzMDNmZjljLDB4NGU1ZTYwZmYKKwkubG9uZwkweGZmZmZlMmRjLDB4MjA2ZWZmNDQsMHg1NGFlZmY0NCwweDYxZmZmZmZmCisJLmxvbmcJMHhlMzUyNGE4MSwweDY2MDAwNDdjLDB4NDhjMDYxZmYsMHgwMDAwN2U2MAorCS5sb25nCTB4MGMyZTAwMDIsMHhmZjRhNjcwMCwweDAwN2M2MDAwLDB4MDBiMDYxZmYKKwkubG9uZwkweDAwMDA4NTYyLDB4MGMyZTAwMDIsMHhmZjRhNjcwMCwweDAwNjgwODJlCisJLmxvbmcJMHgwMDA1MDAwNCwweDY2MGEyMDZlLDB4ZmZkODRlNjAsMHg2MDAwMDA4ZQorCS5sb25nCTB4MGMyZTAwMDgsMHhmZjRhNjYwMCwweDAwODRmMjJlLDB4ZDBjMGZmZGMKKwkubG9uZwkweGYyMmU5YzAwLDB4ZmY2MDRjZWUsMHgwMzAzZmY5YywweDRlNWUwODE3CisJLmxvbmcJMHgwMDA3NjYxMiwweDU1OGYyZWFmLDB4MDAwMjJmNmYsMHgwMDA2MDAwNAorCS5sb25nCTB4NjBmZmZmZmYsMHhlMTdlNTU4ZiwweDJlYWYwMDAyLDB4M2Y2ZjAwMDYKKwkubG9uZwkweDAwMDQzZjdjLDB4MjAyNDAwMDYsMHhmMjJmYTQwMCwweDAwMDg2MGZmCisJLmxvbmcJMHhmZmZmZTI1MiwweDNkN2MwMGMwLDB4MDAwZTJkNmUsMHhmZjY4MDAwYQorCS5sb25nCTB4M2Q2ZTAwMDQsMHgwMDA4M2Q3YywweGUwMDBmZjZlLDB4ZjIyZWQwYzAKKwkubG9uZwkweGZmZGNmMjJlLDB4OWMwMGZmNjAsMHg0Y2VlMDMwMywweGZmOWNmMzZlCisJLmxvbmcJMHhmZjZjNGU1ZSwweDU4OGY2MGZmLDB4ZmZmZmUxODAsMHhmMjJlZDBjMAorCS5sb25nCTB4ZmZkY2YyMmUsMHg5YzAwZmY2MCwweDRjZWUwMzAzLDB4ZmY5YzRlNWUKKwkubG9uZwkweDA4MTcwMDA3LDB4NjYwNjYwZmYsMHhmZmZmZTEwOCwweGYyMmZhNDAwCisJLmxvbmcJMHgwMDA4MWY3YywweDAwMjQwMDA3LDB4NjBmZmZmZmYsMHhlMWU4NGFmYworCS5sb25nCTB4MDFjMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMjhhNCwweDRiMWU0YjRjLDB4NGY0YzI5ODIsMHg0ZjNjMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDM1YzYsMHg0YjFlNGI4MiwweDRmNGMzNzFhLDB4NGYzYzAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMjRiMCwweDRiMWU0YjhjLDB4NGY0YzI3NjYsMHg0ZjNjMDAwMAorCS5sb25nCTB4MDAwMDI5ODgsMHg0YjFlNGI5NCwweDRmNGMyYWYwLDB4NGYzYzAwMDAKKwkubG9uZwkweDAwMDAxYWI4LDB4NGIxZTRiZDAsMHg0ZjRjMWNmNiwweDRmM2MwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDFjZmMsMHg0YjFlNDc0NCwweDRmNGMxZGFhLDB4NGYzYzAwMDAKKwkubG9uZwkweDAwMDAzNzIwLDB4NGIxZTQ3NDQsMHg0ZjRjMzdhMiwweDRmM2MwMDAwCisJLmxvbmcJMHgwMDAwMDQ2OCwweDRiMWU0NzQ0LDB4NGY0YzA2NGMsMHg0ZjNjMDAwMAorCS5sb25nCTB4MDAwMDBmMmEsMHg0YjFlNDc0NCwweDRmNGMxMDhlLDB4NGYzYzAwMDAKKwkubG9uZwkweDAwMDAyMmUwLDB4NGI5YTRiN2EsMHg0ZjRjMjQ4YywweDRmM2MwMDAwCisJLmxvbmcJMHgwMDAwM2QwMiwweDRiOWE0YjdhLDB4NGY0YzNkZGMsMHg0ZjNjMDAwMAorCS5sb25nCTB4MDAwMDNkZmEsMHg0YjlhNGI3YSwweDRmNGMzZjJhLDB4NGYzYzAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMzM4NiwweDQ3MzI0YjgyLDB4NGY0YzM1MzgsMHg0ZjNjMDAwMAorCS5sb25nCTB4MDAwMDM3YzgsMHg0NzMyNGI4MiwweDRmNGMzN2Y4LDB4NGYzYzAwMDAKKwkubG9uZwkweDAwMDAzODE4LDB4NDczMjRiODIsMHg0ZjRjMzg3MiwweDRmM2MwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAyN2U2LDB4NGI5YTRiNTIsMHg0ZjRjMjg4YSwweDRmM2MwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAxZGIwLDB4NGJkNjQ3NDQsMHg0ZjRjMWU0MCwweDRmM2MwMDAwCisJLmxvbmcJMHgwMDAwMDQ3MiwweDRiOWE0NzQ0LDB4NGY0YzA2NTIsMHg0ZjNjMDAwMAorCS5sb25nCTB4MDAwMDI3NmMsMHg0YjFlNDc0NCwweDRmNGMyNzg4LDB4NGYzYzAwMDAKKwkubG9uZwkweDAwMDAyN2EwLDB4NGIxZTQ3NDQsMHg0ZjRjMjdjZSwweDRmM2MwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDRjYTQsMHg0Y2RhNGQxMiwweDRlZTI0Y2E0LDB4NGVmNDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDA0ZGFjLDB4NGRlMjRlMWEsMHg0ZWUyNGRhYywweDRlZjQwMDAwCisJLmxvbmcJMHgwMDAwNGU0ZSwweDRlODY0ZWJlLDB4NGVlMjRlNGUsMHg0ZWY0MDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDA2NjAsMHg0YmYyNGMyMCwweDRjMzAwOGY2LDB4NGM0MDAwMDAKKwkubG9uZwkweDAwMDAwNjYwLDB4NGJmMjRjMjAsMHg0YzMwMDhmNiwweDRjNDAwMDAwCisJLmxvbmcJMHgwMDAwMDY2MCwweDRiZjI0YzIwLDB4NGMzMDA4ZjYsMHg0YzQwMDAwMAorCS5sb25nCTB4MDAwMDA2NjAsMHg0YmYyNGMyMCwweDRjMzAwOGY2LDB4NGM0MDAwMDAKKwkubG9uZwkweDAwMDAwNjYwLDB4NGJmMjRjMjAsMHg0YzMwMDhmNiwweDRjNDAwMDAwCisJLmxvbmcJMHgwMDAwMDY2MCwweDRiZjI0YzIwLDB4NGMzMDA4ZjYsMHg0YzQwMDAwMAorCS5sb25nCTB4MDAwMDA2NjAsMHg0YmYyNGMyMCwweDRjMzAwOGY2LDB4NGM0MDAwMDAKKwkubG9uZwkweDAwMDAwNjYwLDB4NGJmMjRjMjAsMHg0YzMwMDhmNiwweDRjNDAwMDAwCisJLmxvbmcJMHgwMDAwNGNlZSwweDAzMDNmZjljLDB4ZjIyZTljMDAsMHhmZjYwZjIyZQorCS5sb25nCTB4ZDBjMGZmZGMsMHgyZDZlZmY2OCwweDAwMDY0ZTVlLDB4MmYxNzNmNmYKKwkubG9uZwkweDAwMDgwMDA0LDB4M2Y3YzQwMDgsMHgwMDA2MmY2ZiwweDAwMDIwMDA4CisJLmxvbmcJMHgyZjdjMDk0MiwweDgwMDEwMDBjLDB4MDgxNzAwMDUsMHg2NzA2MDhlZgorCS5sb25nCTB4MDAwMjAwMGQsMHg2MGZmZmZmZiwweGRlMzJiZDZhLDB4YWE3N2NjYzkKKwkubG9uZwkweDk0ZjUzZGU2LDB4MTIwOTdhYWUsMHg4ZGExYmU1YSwweGU2NDUyYTExCisJLmxvbmcJMHg4YWU0M2VjNywweDFkZTNhNTM0LDB4MTUzMWJmMmEsMHgwMWEwMWEwMQorCS5sb25nCTB4OGI1OTAwMDAsMHgwMDAwMDAwMCwweDAwMDAzZmY4LDB4MDAwMDg4ODgKKwkubG9uZwkweDg4ODg4ODg4LDB4NTlhZjAwMDAsMHgwMDAwYmZmYywweDAwMDBhYWFhCisJLmxvbmcJMHhhYWFhYWFhYSwweGFhOTkwMDAwLDB4MDAwMDNkMmEsMHhjNGQwZDYwMQorCS5sb25nCTB4MWVlM2JkYTksMHgzOTZmOWY0NSwweGFjMTkzZTIxLDB4ZWVkOTA2MTIKKwkubG9uZwkweGM5NzJiZTkyLDB4N2U0ZmI3OWQsMHg5ZmNmM2VmYSwweDAxYTAxYTAxCisJLmxvbmcJMHhkNDIzMDAwMCwweDAwMDAwMDAwLDB4MDAwMGJmZjUsMHgwMDAwYjYwYgorCS5sb25nCTB4NjBiNjBiNjEsMHhkNDM4MDAwMCwweDAwMDAzZmZhLDB4MDAwMGFhYWEKKwkubG9uZwkweGFhYWFhYWFhLDB4YWI1ZWJmMDAsMHgwMDAwMmQ3YywweDAwMDAwMDAwCisJLmxvbmcJMHhmZjVjNjAwOCwweDJkN2MwMDAwLDB4MDAwMWZmNWMsMHhmMjEwNDgwMAorCS5sb25nCTB4ZjIyZTY4MDAsMHhmZjg0MjIxMCwweDMyMjgwMDA0LDB4MDI4MTdmZmYKKwkubG9uZwkweGZmZmYwYzgxLDB4M2ZkNzgwMDAsMHg2YzA0NjAwMCwweDAxNzgwYzgxCisJLmxvbmcJMHg0MDA0YmM3ZSwweDZkMDQ2MDAwLDB4MDQ2OGYyMDAsMHgwMDgwZjIzYQorCS5sb25nCTB4NTRhM2RlN2UsMHg0M2ZiMDE3MCwweDAwMDAwODY2LDB4ZjIyZTYwODAKKwkubG9uZwkweGZmNTgyMjJlLDB4ZmY1OGU5ODEsMHhkM2MxZjIxOSwweDQ4MjhmMjExCisJLmxvbmcJMHg0NDI4MjIyZSwweGZmNThkMmFlLDB4ZmY1Y2UyOTksMHgwYzgxMDAwMAorCS5sb25nCTB4MDAwMDZkMDAsMHgwMDg4ZjIyNywweGUwMGNmMjJlLDB4NjgwMGZmODQKKwkubG9uZwkweGYyMDAwMDIzLDB4ZjIzYTU1ODAsMHhmZWQyZjIzYSwweDU1MDBmZWQ0CisJLmxvbmcJMHhmMjAwMDA4MCwweGYyMDAwNGEzLDB4ZTI5OTAyODEsMHg4MDAwMDAwMAorCS5sb25nCTB4YjNhZWZmODQsMHhmMjAwMDVhMywweGYyMDAwNTIzLDB4ZjIzYTU1YTIKKwkubG9uZwkweGZlYmFmMjNhLDB4NTUyMmZlYmMsMHhmMjAwMDVhMywweGYyMDAwNTIzCisJLmxvbmcJMHhmMjNhNTVhMiwweGZlYjZmMjNhLDB4NDkyMmZlYzAsMHhmMjAwMGNhMworCS5sb25nCTB4ZjIwMDAxMjMsMHhmMjNhNDhhMiwweGZlYzJmMjJlLDB4NDgyM2ZmODQKKwkubG9uZwkweGYyMDAwOGEyLDB4ZjIwMDA0MjMsMHhmMjFmZDAzMCwweGYyMDA5MDAwCisJLmxvbmcJMHhmMjJlNDgyMiwweGZmODQ2MGZmLDB4MDAwMDQzNjQsMHhmMjI3ZTAwYworCS5sb25nCTB4ZjIwMDAwMjMsMHhmMjNhNTUwMCwweGZlYTJmMjNhLDB4NTU4MGZlYTQKKwkubG9uZwkweGYyMDAwMDgwLDB4ZjIwMDA0YTMsMHhmMjJlNjgwMCwweGZmODRlMjk5CisJLmxvbmcJMHgwMjgxODAwMCwweDAwMDBmMjAwLDB4MDUyM2IzYWUsMHhmZjg0MDI4MQorCS5sb25nCTB4ODAwMDAwMDAsMHhmMjAwMDVhMywweDAwODEzZjgwLDB4MDAwMDJkNDEKKwkubG9uZwkweGZmNTRmMjNhLDB4NTUyMmZlNzQsMHhmMjNhNTVhMiwweGZlNzZmMjAwCisJLmxvbmcJMHgwNTIzZjIwMCwweDA1YTNmMjNhLDB4NTUyMmZlNzAsMHhmMjNhNDlhMgorCS5sb25nCTB4ZmU3YWYyMDAsMHgwNTIzZjIwMCwweDBjYTNmMjNhLDB4NDkyMmZlN2MKKwkubG9uZwkweGYyM2E0NGEyLDB4ZmU4MmYyMDAsMHgwODIzZjIwMCwweDA0MjJmMjJlCisJLmxvbmcJMHg0ODIzZmY4NCwweGYyMWZkMDMwLDB4ZjIwMDkwMDAsMHhmMjJlNDQyMgorCS5sb25nCTB4ZmY1NDYwZmYsMHgwMDAwNDJjOCwweDBjODEzZmZmLDB4ODAwMDZlZmYKKwkubG9uZwkweDAwMDAwMzAwLDB4MjIyZWZmNWMsMHgwYzgxMDAwMCwweDAwMDA2ZTE0CisJLmxvbmcJMHhmMjAwOTAwMCwweDEyM2MwMDAzLDB4ZjIyZTQ4MDAsMHhmZjg0NjBmZgorCS5sb25nCTB4MDAwMDQyOGUsMHhmMjNjNDQwMCwweDNmODAwMDAwLDB4ZjIwMDkwMDAKKwkubG9uZwkweGYyM2M0NDIyLDB4ODA4MDAwMDAsMHg2MGZmMDAwMCwweDQyOGE2MGZmCisJLmxvbmcJMHgwMDAwNDExMCwweGYyM2M0NDAwLDB4M2Y4MDAwMDAsMHg2MGZmMDAwMAorCS5sb25nCTB4NDI3NjJkN2MsMHgwMDAwMDAwNCwweGZmNWNmMjEwLDB4NDgwMGYyMmUKKwkubG9uZwkweDY4MDBmZjg0LDB4MjIxMDMyMjgsMHgwMDA0MDI4MSwweDdmZmZmZmZmCisJLmxvbmcJMHgwYzgxM2ZkNywweDgwMDA2YzA0LDB4NjAwMDAyNDAsMHgwYzgxNDAwNAorCS5sb25nCTB4YmM3ZTZkMDQsMHg2MDAwMDI3YSwweGYyMDAwMDgwLDB4ZjIzYTU0YTMKKwkubG9uZwkweGRjOTA0M2ZiLDB4MDE3MDAwMDAsMHgwNjc4ZjIyZSwweDYwODBmZjU4CisJLmxvbmcJMHgyMjJlZmY1OCwweGU5ODFkM2MxLDB4ZjIxOTQ4MjgsMHhmMjExNDQyOAorCS5sb25nCTB4MjIyZWZmNTgsMHhlMjk5MGM4MSwweDAwMDAwMDAwLDB4NmMwMDAxMDYKKwkubG9uZwkweGYyMjdlMDA0LDB4ZjIyZTY4MDAsMHhmZjg0ZjIwMCwweDAwMjNmMjNhCisJLmxvbmcJMHg1NDgwZmNlOCwweGYyM2E1NTAwLDB4ZmQzMmYyMDAsMHgwMGEzZjIwMAorCS5sb25nCTB4MDEyMzJmMDIsMHgyNDAxZTI5YSwweDAyODI4MDAwLDB4MDAwMGIzODIKKwkubG9uZwkweDAyODI4MDAwLDB4MDAwMGYyM2EsMHg1NGEyZmNjOCwweGYyM2E1NTIyCisJLmxvbmcJMHhmZDEyZjIwMCwweDAwYTNiNWFlLDB4ZmY4NDI0MWYsMHhmMjAwMDEyMworCS5sb25nCTB4ZTI5OTAyODEsMHg4MDAwMDAwMCwweDJkN2MzZjgwLDB4MDAwMGZmNTQKKwkubG9uZwkweGIzYWVmZjU0LDB4ZjIzYTU0YTIsMHhmY2EyZjIzYSwweDU1MjJmY2VjCisJLmxvbmcJMHhmMjAwMDBhMywweGYyMDAwMTIzLDB4ZjIyZTY4MDAsMHhmZjkwZjIzYQorCS5sb25nCTB4NTRhMmZjOTAsMHhiM2FlZmY5MCwweGYyM2E1NTIyLDB4ZmNkNmYyMDAKKwkubG9uZwkweDAwYTNmMjAwLDB4MDEyM2YyM2EsMHg1NGEyZmM4MCwweGYyM2E1NTIyCisJLmxvbmcJMHhmY2NhZjIwMCwweDAwYTNmMjAwLDB4MDEyM2YyM2EsMHg0OGEyZmM3YworCS5sb25nCTB4ZjIzYTQ5MjIsMHhmY2M2ZjIwMCwweDAwYTNmMjAwLDB4MDEyM2YyM2EKKwkubG9uZwkweDQ4YTJmYzc4LDB4ZjIzYTQ5MjIsMHhmY2MyZjIwMCwweDAwYTNmMjAwCisJLmxvbmcJMHgwODIzZjIyZSwweDQ4YTNmZjg0LDB4ZjIzYTQ0MjIsMHhmY2JhZjIyZQorCS5sb25nCTB4NDgyM2ZmOTAsMHhmMjFmZDAyMCwweGYyMDA5MDAwLDB4ZjIyZTQ4YTIKKwkubG9uZwkweGZmODQ2MWZmLDB4MDAwMDQ0OGUsMHhmMjJlNDQyMiwweGZmNTQ2MGZmCisJLmxvbmcJMHgwMDAwNDBmYywweGYyMjdlMDA0LDB4ZjIyZTY4MDAsMHhmZjg0ZjIwMAorCS5sb25nCTB4MDAyM2YyM2EsMHg1NDgwZmMzNCwweGYyM2E1NTAwLDB4ZmJkZWYyMDAKKwkubG9uZwkweDAwYTNmMjJlLDB4NjgwMGZmOTAsMHhmMjAwMDEyMywweGUyOTkwMjgxCisJLmxvbmcJMHg4MDAwMDAwMCwweGYyM2E1NGEyLDB4ZmMxYWYyM2EsMHg1NTIyZmJjNAorCS5sb25nCTB4YjNhZWZmODQsMHhiM2FlZmY5MCwweGYyMDAwMGEzLDB4MDA4MTNmODAKKwkubG9uZwkweDAwMDAyZDQxLDB4ZmY1NGYyMDAsMHgwMTIzZjIzYSwweDU0YTJmYmZjCisJLmxvbmcJMHhmMjNhNTUyMiwweGZiYTZmMjAwLDB4MDBhM2YyMDAsMHgwMTIzZjIzYQorCS5sb25nCTB4NTRhMmZiZjAsMHhmMjNhNTUyMiwweGZiOWFmMjAwLDB4MDBhM2YyMDAKKwkubG9uZwkweDAxMjNmMjNhLDB4NTRhMmZiZTQsMHhmMjNhNTUyMiwweGZiOGVmMjAwCisJLmxvbmcJMHgwMGEzZjIwMCwweDAxMjNmMjNhLDB4NDhhMmZiZTAsMHhmMjNhNDkyMgorCS5sb25nCTB4ZmI4YWYyMDAsMHgwMGEzZjIwMCwweDAxMjNmMjNhLDB4NDhhMmZiZGMKKwkubG9uZwkweGYyM2E0OTIyLDB4ZmI4NmYyMDAsMHgwMGEzZjIwMCwweDA4MjNmMjNhCisJLmxvbmcJMHg0NGEyZmJkNCwweGYyMmU0ODIzLDB4ZmY4NGYyMmUsMHg0OGEzZmY5MAorCS5sb25nCTB4ZjIxZmQwMjAsMHhmMjAwOTAwMCwweGYyMmU0NGEyLDB4ZmY1NDYxZmYKKwkubG9uZwkweDAwMDA0M2EyLDB4ZjIyZTQ4MjIsMHhmZjg0NjBmZiwweDAwMDA0MDEwCisJLmxvbmcJMHgwYzgxM2ZmZiwweDgwMDA2ZTAwLDB4MDA0OGYyM2MsMHg0NDgwM2Y4MAorCS5sb25nCTB4MDAwMGYyMDAsMHg5MDAwZjIzYywweDQ0YTgwMDgwLDB4MDAwMDYxZmYKKwkubG9uZwkweDAwMDA0MzcyLDB4ZjIwMGIwMDAsMHgxMjNjMDAwMywweGYyMmU0ODAwCisJLmxvbmcJMHhmZjg0NjBmZiwweDAwMDAzZmNhLDB4MmYwMGYyM2MsMHg0NDgwM2Y4MAorCS5sb25nCTB4MDAwMDYxZmYsMHgwMDAwNDM0ZSwweDIwMWY2MGZmLDB4MDAwMDNlNTQKKwkubG9uZwkweGYyMjdlMDNjLDB4MmYwMmYyM2MsMHg0NDgwMDAwMCwweDAwMDAwYzgxCisJLmxvbmcJMHg3ZmZlZmZmZiwweDY2NTIzZDdjLDB4N2ZmZWZmODQsMHgyZDdjYzkwZgorCS5sb25nCTB4ZGFhMmZmODgsMHg0MmFlZmY4YywweDNkN2M3ZmRjLDB4ZmY5MDJkN2MKKwkubG9uZwkweDg1YTMwOGQzLDB4ZmY5NDQyYWUsMHhmZjk4ZjIwMCwweDAwM2FmMjk0CisJLmxvbmcJMHgwMDBlMDAyZSwweDAwODBmZjg0LDB4MDAyZTAwODAsMHhmZjkwZjIyZQorCS5sb25nCTB4NDgyMmZmODQsMHhmMjAwMDA4MCwweGYyMmU0ODIyLDB4ZmY5MGYyMDAKKwkubG9uZwkweDAwYThmMjJlLDB4NDhhMmZmOTAsMHhmMjJlNjgwMCwweGZmODQzMjJlCisJLmxvbmcJMHhmZjg0MjI0MSwweDAyODEwMDAwLDB4N2ZmZjA0ODEsMHgwMDAwM2ZmZgorCS5sb25nCTB4MGM4MTAwMDAsMHgwMDFjNmYwZSwweDA0ODEwMDAwLDB4MDAxYjFkN2MKKwkubG9uZwkweDAwMDBmZjU4LDB4NjAwODQyODEsMHgxZDdjMDAwMSwweGZmNTgyNDNjCisJLmxvbmcJMHgwMDAwM2ZmZSwweDk0ODEyZDdjLDB4YTJmOTgzNmUsMHhmZjg4MmQ3YworCS5sb25nCTB4NGU0NDE1MmEsMHhmZjhjM2Q0MiwweGZmODRmMjAwLDB4MDEwMGYyMmUKKwkubG9uZwkweDQ5MjNmZjg0LDB4MjQwOTQ4NDIsMHgwMjgyODAwMCwweDAwMDAwMDgyCisJLmxvbmcJMHg1ZjAwMDAwMCwweDJkNDJmZjU0LDB4ZjIyZTQ1MjIsMHhmZjU0ZjIyZQorCS5sb25nCTB4NDUyOGZmNTQsMHgyNDAxMDY4MiwweDAwMDAzZmZmLDB4M2Q0MmZmODQKKwkubG9uZwkweDJkN2NjOTBmLDB4ZGFhMmZmODgsMHg0MmFlZmY4YywweDA2ODEwMDAwCisJLmxvbmcJMHgzZmRkM2Q0MSwweGZmOTAyZDdjLDB4ODVhMzA4ZDMsMHhmZjk0NDJhZQorCS5sb25nCTB4ZmY5ODEyMmUsMHhmZjU4ZjIwMCwweDBhMDBmMjJlLDB4NGEyM2ZmODQKKwkubG9uZwkweGYyMDAwYTgwLDB4ZjIyZTRhYTMsMHhmZjkwZjIwMCwweDExODBmMjAwCisJLmxvbmcJMHgxNWEyZjIwMCwweDBlMjhmMjAwLDB4MGMyOGYyMDAsMHgxNjIyZjIwMAorCS5sb25nCTB4MDE4MGYyMDAsMHgxMGE4ZjIwMCwweDA0MjIwYzAxLDB4MDAwMDZlMDAKKwkubG9uZwkweDAwMGVmMjAwLDB4MDFhOGYyMDAsMHgwY2EyNjAwMCwweGZmMGNmMjJlCisJLmxvbmcJMHg2MTAwZmY1OCwweDI0MWZmMjFmLDB4ZDAzYzIyMmUsMHhmZjVjMGM4MQorCS5sb25nCTB4MDAwMDAwMDQsMHg2ZDAwZmE0YywweDYwMDBmYzM2LDB4M2VhMGI3NTkKKwkubG9uZwkweGY1MGY4Njg4LDB4YmVmMmJhYTUsMHhhODkyNGYwNCwweGJmMzQ2ZjU5CisJLmxvbmcJMHhiMzliYTY1ZiwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgzZmY2MDAwMAorCS5sb25nCTB4ZTA3M2QzZmMsMHgxOTljNGEwMCwweDAwMDAwMDAwLDB4M2ZmOTAwMDAKKwkubG9uZwkweGQyM2NkNjg0LDB4MTVkOTVmYTEsMHgwMDAwMDAwMCwweGJmZmMwMDAwCisJLmxvbmcJMHg4ODk1YTZjNSwweGZiNDIzYmNhLDB4MDAwMDAwMDAsMHhiZmZkMDAwMAorCS5sb25nCTB4ZWVmNTdlMGQsMHhhODRiYzhjZSwweDAwMDAwMDAwLDB4M2ZmYzAwMDAKKwkubG9uZwkweGEyZjk4MzZlLDB4NGU0NDE1MmEsMHgwMDAwMDAwMCwweDQwMDEwMDAwCisJLmxvbmcJMHhjOTBmZGFhMiwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgzZmRmMDAwMAorCS5sb25nCTB4ODVhMzA4ZDQsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4YzAwNDAwMDAKKwkubG9uZwkweGM5MGZkYWEyLDB4MjE2OGMyMzUsMHgyMTgwMDAwMCwweGMwMDQwMDAwCisJLmxvbmcJMHhjMmM3NWJjZCwweDEwNWQ3YzIzLDB4YTBkMDAwMDAsMHhjMDA0MDAwMAorCS5sb25nCTB4YmM3ZWRjZjcsMHhmZjUyMzYxMSwweGExZTgwMDAwLDB4YzAwNDAwMDAKKwkubG9uZwkweGI2MzY1ZTIyLDB4ZWU0NmYwMDAsMHgyMTQ4MDAwMCwweGMwMDQwMDAwCisJLmxvbmcJMHhhZmVkZGY0ZCwweGRkM2JhOWVlLDB4YTEyMDAwMDAsMHhjMDA0MDAwMAorCS5sb25nCTB4YTlhNTYwNzgsMHhjYzMwNjNkZCwweDIxZmMwMDAwLDB4YzAwNDAwMDAKKwkubG9uZwkweGEzNWNlMWEzLDB4YmIyNTFkY2IsMHgyMTEwMDAwMCwweGMwMDQwMDAwCisJLmxvbmcJMHg5ZDE0NjJjZSwweGFhMTlkN2I5LDB4YTE1ODAwMDAsMHhjMDA0MDAwMAorCS5sb25nCTB4OTZjYmUzZjksMHg5OTBlOTFhOCwweDIxZTAwMDAwLDB4YzAwNDAwMDAKKwkubG9uZwkweDkwODM2NTI0LDB4ODgwMzRiOTYsMHgyMGIwMDAwMCwweGMwMDQwMDAwCisJLmxvbmcJMHg4YTNhZTY0ZiwweDc2ZjgwNTg0LDB4YTE4ODAwMDAsMHhjMDA0MDAwMAorCS5sb25nCTB4ODNmMjY3N2EsMHg2NWVjYmY3MywweDIxYzQwMDAwLDB4YzAwMzAwMDAKKwkubG9uZwkweGZiNTNkMTRhLDB4YTljMmYyYzIsMHgyMDAwMDAwMCwweGMwMDMwMDAwCisJLmxvbmcJMHhlZWMyZDNhMCwweDg3YWM2NjlmLDB4MjEzODAwMDAsMHhjMDAzMDAwMAorCS5sb25nCTB4ZTIzMWQ1ZjYsMHg2NTk1ZGE3YiwweGExMzAwMDAwLDB4YzAwMzAwMDAKKwkubG9uZwkweGQ1YTBkODRjLDB4NDM3ZjRlNTgsMHg5ZmMwMDAwMCwweGMwMDMwMDAwCisJLmxvbmcJMHhjOTBmZGFhMiwweDIxNjhjMjM1LDB4MjEwMDAwMDAsMHhjMDAzMDAwMAorCS5sb25nCTB4YmM3ZWRjZjcsMHhmZjUyMzYxMSwweGExNjgwMDAwLDB4YzAwMzAwMDAKKwkubG9uZwkweGFmZWRkZjRkLDB4ZGQzYmE5ZWUsMHhhMGEwMDAwMCwweGMwMDMwMDAwCisJLmxvbmcJMHhhMzVjZTFhMywweGJiMjUxZGNiLDB4MjA5MDAwMDAsMHhjMDAzMDAwMAorCS5sb25nCTB4OTZjYmUzZjksMHg5OTBlOTFhOCwweDIxNjAwMDAwLDB4YzAwMzAwMDAKKwkubG9uZwkweDhhM2FlNjRmLDB4NzZmODA1ODQsMHhhMTA4MDAwMCwweGMwMDIwMDAwCisJLmxvbmcJMHhmYjUzZDE0YSwweGE5YzJmMmMyLDB4MWY4MDAwMDAsMHhjMDAyMDAwMAorCS5sb25nCTB4ZTIzMWQ1ZjYsMHg2NTk1ZGE3YiwweGEwYjAwMDAwLDB4YzAwMjAwMDAKKwkubG9uZwkweGM5MGZkYWEyLDB4MjE2OGMyMzUsMHgyMDgwMDAwMCwweGMwMDIwMDAwCisJLmxvbmcJMHhhZmVkZGY0ZCwweGRkM2JhOWVlLDB4YTAyMDAwMDAsMHhjMDAyMDAwMAorCS5sb25nCTB4OTZjYmUzZjksMHg5OTBlOTFhOCwweDIwZTAwMDAwLDB4YzAwMTAwMDAKKwkubG9uZwkweGZiNTNkMTRhLDB4YTljMmYyYzIsMHgxZjAwMDAwMCwweGMwMDEwMDAwCisJLmxvbmcJMHhjOTBmZGFhMiwweDIxNjhjMjM1LDB4MjAwMDAwMDAsMHhjMDAxMDAwMAorCS5sb25nCTB4OTZjYmUzZjksMHg5OTBlOTFhOCwweDIwNjAwMDAwLDB4YzAwMDAwMDAKKwkubG9uZwkweGM5MGZkYWEyLDB4MjE2OGMyMzUsMHgxZjgwMDAwMCwweGJmZmYwMDAwCisJLmxvbmcJMHhjOTBmZGFhMiwweDIxNjhjMjM1LDB4MWYwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4M2ZmZjAwMDAKKwkubG9uZwkweGM5MGZkYWEyLDB4MjE2OGMyMzUsMHg5ZjAwMDAwMCwweDQwMDAwMDAwCisJLmxvbmcJMHhjOTBmZGFhMiwweDIxNjhjMjM1LDB4OWY4MDAwMDAsMHg0MDAxMDAwMAorCS5sb25nCTB4OTZjYmUzZjksMHg5OTBlOTFhOCwweGEwNjAwMDAwLDB4NDAwMTAwMDAKKwkubG9uZwkweGM5MGZkYWEyLDB4MjE2OGMyMzUsMHhhMDAwMDAwMCwweDQwMDEwMDAwCisJLmxvbmcJMHhmYjUzZDE0YSwweGE5YzJmMmMyLDB4OWYwMDAwMDAsMHg0MDAyMDAwMAorCS5sb25nCTB4OTZjYmUzZjksMHg5OTBlOTFhOCwweGEwZTAwMDAwLDB4NDAwMjAwMDAKKwkubG9uZwkweGFmZWRkZjRkLDB4ZGQzYmE5ZWUsMHgyMDIwMDAwMCwweDQwMDIwMDAwCisJLmxvbmcJMHhjOTBmZGFhMiwweDIxNjhjMjM1LDB4YTA4MDAwMDAsMHg0MDAyMDAwMAorCS5sb25nCTB4ZTIzMWQ1ZjYsMHg2NTk1ZGE3YiwweDIwYjAwMDAwLDB4NDAwMjAwMDAKKwkubG9uZwkweGZiNTNkMTRhLDB4YTljMmYyYzIsMHg5ZjgwMDAwMCwweDQwMDMwMDAwCisJLmxvbmcJMHg4YTNhZTY0ZiwweDc2ZjgwNTg0LDB4MjEwODAwMDAsMHg0MDAzMDAwMAorCS5sb25nCTB4OTZjYmUzZjksMHg5OTBlOTFhOCwweGExNjAwMDAwLDB4NDAwMzAwMDAKKwkubG9uZwkweGEzNWNlMWEzLDB4YmIyNTFkY2IsMHhhMDkwMDAwMCwweDQwMDMwMDAwCisJLmxvbmcJMHhhZmVkZGY0ZCwweGRkM2JhOWVlLDB4MjBhMDAwMDAsMHg0MDAzMDAwMAorCS5sb25nCTB4YmM3ZWRjZjcsMHhmZjUyMzYxMSwweDIxNjgwMDAwLDB4NDAwMzAwMDAKKwkubG9uZwkweGM5MGZkYWEyLDB4MjE2OGMyMzUsMHhhMTAwMDAwMCwweDQwMDMwMDAwCisJLmxvbmcJMHhkNWEwZDg0YywweDQzN2Y0ZTU4LDB4MWZjMDAwMDAsMHg0MDAzMDAwMAorCS5sb25nCTB4ZTIzMWQ1ZjYsMHg2NTk1ZGE3YiwweDIxMzAwMDAwLDB4NDAwMzAwMDAKKwkubG9uZwkweGVlYzJkM2EwLDB4ODdhYzY2OWYsMHhhMTM4MDAwMCwweDQwMDMwMDAwCisJLmxvbmcJMHhmYjUzZDE0YSwweGE5YzJmMmMyLDB4YTAwMDAwMDAsMHg0MDA0MDAwMAorCS5sb25nCTB4ODNmMjY3N2EsMHg2NWVjYmY3MywweGExYzQwMDAwLDB4NDAwNDAwMDAKKwkubG9uZwkweDhhM2FlNjRmLDB4NzZmODA1ODQsMHgyMTg4MDAwMCwweDQwMDQwMDAwCisJLmxvbmcJMHg5MDgzNjUyNCwweDg4MDM0Yjk2LDB4YTBiMDAwMDAsMHg0MDA0MDAwMAorCS5sb25nCTB4OTZjYmUzZjksMHg5OTBlOTFhOCwweGExZTAwMDAwLDB4NDAwNDAwMDAKKwkubG9uZwkweDlkMTQ2MmNlLDB4YWExOWQ3YjksMHgyMTU4MDAwMCwweDQwMDQwMDAwCisJLmxvbmcJMHhhMzVjZTFhMywweGJiMjUxZGNiLDB4YTExMDAwMDAsMHg0MDA0MDAwMAorCS5sb25nCTB4YTlhNTYwNzgsMHhjYzMwNjNkZCwweGExZmMwMDAwLDB4NDAwNDAwMDAKKwkubG9uZwkweGFmZWRkZjRkLDB4ZGQzYmE5ZWUsMHgyMTIwMDAwMCwweDQwMDQwMDAwCisJLmxvbmcJMHhiNjM2NWUyMiwweGVlNDZmMDAwLDB4YTE0ODAwMDAsMHg0MDA0MDAwMAorCS5sb25nCTB4YmM3ZWRjZjcsMHhmZjUyMzYxMSwweDIxZTgwMDAwLDB4NDAwNDAwMDAKKwkubG9uZwkweGMyYzc1YmNkLDB4MTA1ZDdjMjMsMHgyMGQwMDAwMCwweDQwMDQwMDAwCisJLmxvbmcJMHhjOTBmZGFhMiwweDIxNjhjMjM1LDB4YTE4MDAwMDAsMHhmMjEwNDgwMAorCS5sb25nCTB4MjIxMDMyMjgsMHgwMDA0MDI4MSwweDdmZmZmZmZmLDB4MGM4MTNmZDcKKwkubG9uZwkweDgwMDA2YzA0LDB4NjAwMDAxMzQsMHgwYzgxNDAwNCwweGJjN2U2ZDA0CisJLmxvbmcJMHg2MDAwMDE0NCwweGYyMDAwMDgwLDB4ZjIzYTU0YTMsMHhkM2Q0NDNmYQorCS5sb25nCTB4ZmRiY2YyMDEsMHg2MDgwZTk4MSwweGQzYzFmMjE5LDB4NDgyOGYyMTEKKwkubG9uZwkweDQ0MjhlYTk5LDB4MDI4MTgwMDAsMHgwMDAwZjIyNywweGUwMGMwYzgxCisJLmxvbmcJMHgwMDAwMDAwMCwweDZkMDAwMDcyLDB4ZjIwMDAwODAsMHhmMjAwMDRhMworCS5sb25nCTB4ZjIzYTU1ODAsMHhmYWY4ZjIzYSwweDU1MDBmYWZhLDB4ZjIwMDA1YTMKKwkubG9uZwkweGYyMDAwNTIzLDB4ZjIzYTU1YTIsMHhmYWY0ZjIzYSwweDQ5MjJmYWZlCisJLmxvbmcJMHhmMjAwMDVhMywweGYyMDAwNTIzLDB4ZjIzYTQ5YTIsMHhmYjAwZjIzYQorCS5sb25nCTB4NDkyMmZiMGEsMHhmMjAwMDVhMywweGYyMDAwNTIzLDB4ZjIzYTQ5YTIKKwkubG9uZwkweGZiMGNmMjAwLDB4MDEyM2YyMDAsMHgwY2EzZjIwMCwweDA4MjJmMjNjCisJLmxvbmcJMHg0NGEyM2Y4MCwweDAwMDBmMjFmLDB4ZDAzMGYyMDAsMHg5MDAwZjIwMAorCS5sb25nCTB4MDQyMDYwZmYsMHgwMDAwMzhkOCwweGYyMDAwMDgwLDB4ZjIwMDAwMjMKKwkubG9uZwkweGYyM2E1NTgwLDB4ZmE4OGYyM2EsMHg1NTAwZmE4YSwweGYyMDAwMWEzCisJLmxvbmcJMHhmMjAwMDEyMywweGYyM2E1NWEyLDB4ZmE4NGYyM2EsMHg0OTIyZmE4ZQorCS5sb25nCTB4ZjIwMDAxYTMsMHhmMjAwMDEyMywweGYyM2E0OWEyLDB4ZmE5MGYyM2EKKwkubG9uZwkweDQ5MjJmYTlhLDB4ZjIwMDAxYTMsMHhmMjAwMDEyMywweGYyM2E0OWEyCisJLmxvbmcJMHhmYTljZjIwMCwweDA1MjNmMjAwLDB4MGMyM2YyMDAsMHgwOGEyZjIzYworCS5sb25nCTB4NDQyMjNmODAsMHgwMDAwZjIxZiwweGQwMzBmMjI3LDB4Njg4MDBhOTcKKwkubG9uZwkweDgwMDAwMDAwLDB4ZjIwMDkwMDAsMHhmMjFmNDgyMCwweDYwZmYwMDAwCisJLmxvbmcJMHgzODVlMGM4MSwweDNmZmY4MDAwLDB4NmUxY2YyMjcsMHg2ODAwZjIwMAorCS5sb25nCTB4OTAwMDEyM2MsMHgwMDAzZjIxZiwweDQ4MDA2MGZmLDB4MDAwMDM4MzIKKwkubG9uZwkweDYwZmYwMDAwLDB4MzZjZWYyMjcsMHhlMDNjMmYwMiwweGYyM2M0NDgwCisJLmxvbmcJMHgwMDAwMDAwMCwweDBjODE3ZmZlLDB4ZmZmZjY2NTIsMHgzZDdjN2ZmZQorCS5sb25nCTB4ZmY4NDJkN2MsMHhjOTBmZGFhMiwweGZmODg0MmFlLDB4ZmY4YzNkN2MKKwkubG9uZwkweDdmZGNmZjkwLDB4MmQ3Yzg1YTMsMHgwOGQzZmY5NCwweDQyYWVmZjk4CisJLmxvbmcJMHhmMjAwMDAzYSwweGYyOTQwMDBlLDB4MDAyZTAwODAsMHhmZjg0MDAyZQorCS5sb25nCTB4MDA4MGZmOTAsMHhmMjJlNDgyMiwweGZmODRmMjAwLDB4MDA4MGYyMmUKKwkubG9uZwkweDQ4MjJmZjkwLDB4ZjIwMDAwYTgsMHhmMjJlNDhhMiwweGZmOTBmMjJlCisJLmxvbmcJMHg2ODAwZmY4NCwweDMyMmVmZjg0LDB4MjI0MTAyODEsMHgwMDAwN2ZmZgorCS5sb25nCTB4MDQ4MTAwMDAsMHgzZmZmMGM4MSwweDAwMDAwMDFjLDB4NmYwZTA0ODEKKwkubG9uZwkweDAwMDAwMDFiLDB4MWQ3YzAwMDAsMHhmZjU4NjAwOCwweDQyODExZDdjCisJLmxvbmcJMHgwMDAxZmY1OCwweDI0M2MwMDAwLDB4M2ZmZTk0ODEsMHgyZDdjYTJmOQorCS5sb25nCTB4ODM2ZWZmODgsMHgyZDdjNGU0NCwweDE1MmFmZjhjLDB4M2Q0MmZmODQKKwkubG9uZwkweGYyMDAwMTAwLDB4ZjIyZTQ5MjMsMHhmZjg0MjQwOSwweDQ4NDIwMjgyCisJLmxvbmcJMHg4MDAwMDAwMCwweDAwODI1ZjAwLDB4MDAwMDJkNDIsMHhmZjU0ZjIyZQorCS5sb25nCTB4NDUyMmZmNTQsMHhmMjJlNDUyOCwweGZmNTQyNDAxLDB4MDY4MjAwMDAKKwkubG9uZwkweDNmZmYzZDQyLDB4ZmY4NDJkN2MsMHhjOTBmZGFhMiwweGZmODg0MmFlCisJLmxvbmcJMHhmZjhjMDY4MSwweDAwMDAzZmRkLDB4M2Q0MWZmOTAsMHgyZDdjODVhMworCS5sb25nCTB4MDhkM2ZmOTQsMHg0MmFlZmY5OCwweDEyMmVmZjU4LDB4ZjIwMDBhMDAKKwkubG9uZwkweGYyMmU0YTIzLDB4ZmY4NGYyMDAsMHgwYTgwZjIyZSwweDRhYTNmZjkwCisJLmxvbmcJMHhmMjAwMTE4MCwweGYyMDAxNWEyLDB4ZjIwMDBlMjgsMHhmMjAwMGMyOAorCS5sb25nCTB4ZjIwMDE2MjIsMHhmMjAwMDE4MCwweGYyMDAxMGE4LDB4ZjIwMDA0MjIKKwkubG9uZwkweDBjMDEwMDAwLDB4NmUwMDAwMGUsMHhmMjAwMDFhOCwweGYyMDAwY2EyCisJLmxvbmcJMHg2MDAwZmYwYywweGYyMmU2MTAwLDB4ZmY1NDI0MWYsMHhmMjFmZDAzYworCS5sb25nCTB4MjIyZWZmNTQsMHhlMjk5NjAwMCwweGZkNzJiZmY2LDB4Njg3ZTMxNDkKKwkubG9uZwkweDg3ZDg0MDAyLDB4YWM2OTM0YTIsMHg2ZGIzYmZjMiwweDQ3NmY0ZTFkCisJLmxvbmcJMHhhMjhlM2ZiMywweDQ0NDQ3Zjg3LDB4Njk4OWJmYjcsMHg0NGVlN2ZhZgorCS5sb25nCTB4NDVkYjNmYmMsMHg3MWM2NDY5NCwweDAyMjBiZmMyLDB4NDkyNDkyMTgKKwkubG9uZwkweDcyZjkzZmM5LDB4OTk5OTk5OTksMHg4ZmE5YmZkNSwweDU1NTU1NTU1CisJLmxvbmcJMHg1NTU1YmZiNywweDBiZjM5ODUzLDB4OWU2YTNmYmMsMHg3MTg3OTYyZAorCS5sb25nCTB4MWQ3ZGJmYzIsMHg0OTI0ODI3MSwweDA3YjgzZmM5LDB4OTk5OTk5OTYKKwkubG9uZwkweDI2M2ViZmQ1LDB4NTU1NTU1NTUsMHg1NTM2M2ZmZiwweDAwMDBjOTBmCisJLmxvbmcJMHhkYWEyMjE2OCwweGMyMzUwMDAwLDB4MDAwMGJmZmYsMHgwMDAwYzkwZgorCS5sb25nCTB4ZGFhMjIxNjgsMHhjMjM1MDAwMCwweDAwMDAwMDAxLDB4MDAwMDgwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwODAwMSwweDAwMDA4MDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDNmZmIsMHgwMDAwODNkMQorCS5sb25nCTB4NTJjNTA2MGIsMHg3YTUxMDAwMCwweDAwMDAzZmZiLDB4MDAwMDhiYzgKKwkubG9uZwkweDU0NDU2NTQ5LDB4OGI4YjAwMDAsMHgwMDAwM2ZmYiwweDAwMDA5M2JlCisJLmxvbmcJMHg0MDYwMTc2MiwweDZiMGQwMDAwLDB4MDAwMDNmZmIsMHgwMDAwOWJiMworCS5sb25nCTB4MDc4ZDM1YWUsMHhjMjAyMDAwMCwweDAwMDAzZmZiLDB4MDAwMGEzYTYKKwkubG9uZwkweDlhNTI1ZGRjLDB4ZTdkZTAwMDAsMHgwMDAwM2ZmYiwweDAwMDBhYjk4CisJLmxvbmcJMHhlOTQzNjI3NiwweDU2MTkwMDAwLDB4MDAwMDNmZmIsMHgwMDAwYjM4OQorCS5sb25nCTB4ZTUwMmY5YzUsMHg5ODYyMDAwMCwweDAwMDAzZmZiLDB4MDAwMGJiNzkKKwkubG9uZwkweDdlNDM2YjA5LDB4ZTZmYjAwMDAsMHgwMDAwM2ZmYiwweDAwMDBjMzY3CisJLmxvbmcJMHhhNWM3MzllNSwweGY0NDYwMDAwLDB4MDAwMDNmZmIsMHgwMDAwY2I1NAorCS5sb25nCTB4NGM2MWNmZjcsMHhkNWM2MDAwMCwweDAwMDAzZmZiLDB4MDAwMGQzM2YKKwkubG9uZwkweDYyZjgyNDg4LDB4NTMzZTAwMDAsMHgwMDAwM2ZmYiwweDAwMDBkYjI4CisJLmxvbmcJMHhkYTgxNjI0MCwweDRjNzcwMDAwLDB4MDAwMDNmZmIsMHgwMDAwZTMxMAorCS5sb25nCTB4YTQwNzhhZDMsMHg0ZjE4MDAwMCwweDAwMDAzZmZiLDB4MDAwMGVhZjYKKwkubG9uZwkweGIwYTgxODhlLDB4ZTFlYjAwMDAsMHgwMDAwM2ZmYiwweDAwMDBmMmRhCisJLmxvbmcJMHhmMTk0OWRiZSwweDc5ZDUwMDAwLDB4MDAwMDNmZmIsMHgwMDAwZmFiZAorCS5sb25nCTB4NTgxMzYxZDQsMHg3ZTNlMDAwMCwweDAwMDAzZmZjLDB4MDAwMDgzNDYKKwkubG9uZwkweGFjMjEwOTU5LDB4ZWNjNDAwMDAsMHgwMDAwM2ZmYywweDAwMDA4YjIzCisJLmxvbmcJMHgyYTA4MzA0MiwweDgyZDgwMDAwLDB4MDAwMDNmZmMsMHgwMDAwOTJmYgorCS5sb25nCTB4NzBiOGQyOWEsMHhlMmY5MDAwMCwweDAwMDAzZmZjLDB4MDAwMDlhY2YKKwkubG9uZwkweDQ3NmY1Y2NkLDB4MWNiNDAwMDAsMHgwMDAwM2ZmYywweDAwMDBhMjllCisJLmxvbmcJMHg3NjMwNDk1NCwweGYyM2YwMDAwLDB4MDAwMDNmZmMsMHgwMDAwYWE2OAorCS5sb25nCTB4YzVkMDhhYjgsMHg1MjMwMDAwMCwweDAwMDAzZmZjLDB4MDAwMGIyMmQKKwkubG9uZwkweGZmZmQ5ZDUzLDB4OWY4MzAwMDAsMHgwMDAwM2ZmYywweDAwMDBiOWVkCisJLmxvbmcJMHhlZjQ1M2U5MCwweDBlYTUwMDAwLDB4MDAwMDNmZmMsMHgwMDAwYzFhOAorCS5sb25nCTB4NWYxY2M3NWUsMHgzZWE1MDAwMCwweDAwMDAzZmZjLDB4MDAwMGM5NWQKKwkubG9uZwkweDFiZTgyODEzLDB4OGRlNjAwMDAsMHgwMDAwM2ZmYywweDAwMDBkMTBiCisJLmxvbmcJMHhmMzAwODQwZCwweDJkZTQwMDAwLDB4MDAwMDNmZmMsMHgwMDAwZDhiNAorCS5sb25nCTB4YjJiYTZiYzAsMHg1ZTdhMDAwMCwweDAwMDAzZmZjLDB4MDAwMGUwNTcKKwkubG9uZwkweDJhNmJiNDIzLDB4MzVmNjAwMDAsMHgwMDAwM2ZmYywweDAwMDBlN2YzCisJLmxvbmcJMHgyYTcwZWE5YywweGFhOGYwMDAwLDB4MDAwMDNmZmMsMHgwMDAwZWY4OAorCS5sb25nCTB4ODQzMjY0ZWMsMHhlZmFhMDAwMCwweDAwMDAzZmZjLDB4MDAwMGY3MTcKKwkubG9uZwkweDBhMjhlY2MwLDB4NjY2NjAwMDAsMHgwMDAwM2ZmZCwweDAwMDA4MTJmCisJLmxvbmcJMHhkMjg4MzMyZCwweGFkMzIwMDAwLDB4MDAwMDNmZmQsMHgwMDAwODhhOAorCS5sb25nCTB4ZDFiMTIxOGUsMHg0ZDY0MDAwMCwweDAwMDAzZmZkLDB4MDAwMDkwMTIKKwkubG9uZwkweGFiM2YyM2U0LDB4YWVlODAwMDAsMHgwMDAwM2ZmZCwweDAwMDA5NzZjCisJLmxvbmcJMHhjM2Q0MTFlNywweGYxYjkwMDAwLDB4MDAwMDNmZmQsMHgwMDAwOWViNgorCS5sb25nCTB4ODk0OTM4ODksMHhhMjI3MDAwMCwweDAwMDAzZmZkLDB4MDAwMGE1ZWYKKwkubG9uZwkweDcyYzM0NDg3LDB4MzYxYjAwMDAsMHgwMDAwM2ZmZCwweDAwMDBhZDE3CisJLmxvbmcJMHgwMGJhZjA3YSwweDcyMjcwMDAwLDB4MDAwMDNmZmQsMHgwMDAwYjQyYworCS5sb25nCTB4YmNmYWZkMzcsMHhlZmI3MDAwMCwweDAwMDAzZmZkLDB4MDAwMGJiMzAKKwkubG9uZwkweDNhOTQwYmE4LDB4MGY4OTAwMDAsMHgwMDAwM2ZmZCwweDAwMDBjMjIxCisJLmxvbmcJMHgxNWM2ZmNhZSwweGJiYWYwMDAwLDB4MDAwMDNmZmQsMHgwMDAwYzhmZQorCS5sb25nCTB4ZjNlNjg2MzMsMHgxMjIxMDAwMCwweDAwMDAzZmZkLDB4MDAwMGNmYzkKKwkubG9uZwkweDgzMzBiNDAwLDB4MGM3MDAwMDAsMHgwMDAwM2ZmZCwweDAwMDBkNjgwCisJLmxvbmcJMHg3YWExMTAyYywweDViZjkwMDAwLDB4MDAwMDNmZmQsMHgwMDAwZGQyMworCS5sb25nCTB4OTliYzMxMjUsMHgyYWEzMDAwMCwweDAwMDAzZmZkLDB4MDAwMGUzYjIKKwkubG9uZwkweGE4NTU2YjhmLDB4YzUxNzAwMDAsMHgwMDAwM2ZmZCwweDAwMDBlYTJkCisJLmxvbmcJMHg3NjRmNjQzMSwweDU5ODkwMDAwLDB4MDAwMDNmZmQsMHgwMDAwZjNiZgorCS5sb25nCTB4NWJmOGJhZDEsMHhhMjFkMDAwMCwweDAwMDAzZmZlLDB4MDAwMDgwMWMKKwkubG9uZwkweGUzOWUwZDIwLDB4NWM5YTAwMDAsMHgwMDAwM2ZmZSwweDAwMDA4NjMwCisJLmxvbmcJMHhhMmRhZGExZSwweGQwNjYwMDAwLDB4MDAwMDNmZmUsMHgwMDAwOGMxYQorCS5sb25nCTB4ZDQ0NWYzZTAsMHg5YjhjMDAwMCwweDAwMDAzZmZlLDB4MDAwMDkxZGIKKwkubG9uZwkweDhmMTY2NGYzLDB4NTBlMjAwMDAsMHgwMDAwM2ZmZSwweDAwMDA5NzczCisJLmxvbmcJMHgxNDIwMzY1ZSwweDUzOGMwMDAwLDB4MDAwMDNmZmUsMHgwMDAwOWNlMQorCS5sb25nCTB4YzhlNmEwYjgsMHhjZGJhMDAwMCwweDAwMDAzZmZlLDB4MDAwMGEyMjgKKwkubG9uZwkweDMyZGJjYWRhLDB4YWUwOTAwMDAsMHgwMDAwM2ZmZSwweDAwMDBhNzQ2CisJLmxvbmcJMHhmMmRkYjc2MCwweDIyOTQwMDAwLDB4MDAwMDNmZmUsMHgwMDAwYWMzZQorCS5sb25nCTB4YzBmYjk5N2QsMHhkNmEyMDAwMCwweDAwMDAzZmZlLDB4MDAwMGIxMTAKKwkubG9uZwkweDY4OGFlYmRjLDB4NmY2YTAwMDAsMHgwMDAwM2ZmZSwweDAwMDBiNWJjCisJLmxvbmcJMHhjNDkwNTllYywweGM0YjAwMDAwLDB4MDAwMDNmZmUsMHgwMDAwYmE0NAorCS5sb25nCTB4YmM3ZGQ0NzAsMHg3ODJmMDAwMCwweDAwMDAzZmZlLDB4MDAwMGJlYTkKKwkubG9uZwkweDQxNDRmZDA0LDB4OWFhYzAwMDAsMHgwMDAwM2ZmZSwweDAwMDBjMmViCisJLmxvbmcJMHg0YWJiNjYxNiwweDI4YjYwMDAwLDB4MDAwMDNmZmUsMHgwMDAwYzcwYgorCS5sb25nCTB4ZDU0Y2U2MDIsMHhlZTE0MDAwMCwweDAwMDAzZmZlLDB4MDAwMGNkMDAKKwkubG9uZwkweDA1NDlhZGVjLDB4NzE1OTAwMDAsMHgwMDAwM2ZmZSwweDAwMDBkNDg0CisJLmxvbmcJMHg1N2QyZDhlYSwweDRlYTMwMDAwLDB4MDAwMDNmZmUsMHgwMDAwZGI5NAorCS5sb25nCTB4OGRhNzEyZGUsMHhjZTNiMDAwMCwweDAwMDAzZmZlLDB4MDAwMGUyMzgKKwkubG9uZwkweDU1Zjk2OWU4LDB4MDk2YTAwMDAsMHgwMDAwM2ZmZSwweDAwMDBlODc3CisJLmxvbmcJMHgxMTI5YzQzNSwweDMyNTkwMDAwLDB4MDAwMDNmZmUsMHgwMDAwZWU1NworCS5sb25nCTB4YzE2ZTBkMzcsMHg5YzBkMDAwMCwweDAwMDAzZmZlLDB4MDAwMGYzZTEKKwkubG9uZwkweDAyMTFhODdjLDB4Mzc3OTAwMDAsMHgwMDAwM2ZmZSwweDAwMDBmOTE5CisJLmxvbmcJMHgwMzlkNzU4YiwweDhkNDEwMDAwLDB4MDAwMDNmZmUsMHgwMDAwZmUwNQorCS5sb25nCTB4OGI4ZjY0OTMsMHg1ZmIzMDAwMCwweDAwMDAzZmZmLDB4MDAwMDgxNTUKKwkubG9uZwkweGZiNDk3YjY4LDB4NWQwNDAwMDAsMHgwMDAwM2ZmZiwweDAwMDA4Mzg4CisJLmxvbmcJMHg5ZTM1NDlkMSwweDA4ZTEwMDAwLDB4MDAwMDNmZmYsMHgwMDAwODU5YworCS5sb25nCTB4ZmE3NjUxMWQsMHg3MjRiMDAwMCwweDAwMDAzZmZmLDB4MDAwMDg3OTUKKwkubG9uZwkweDJlY2ZmZjgxLDB4MzFlNzAwMDAsMHgwMDAwM2ZmZiwweDAwMDA4OTczCisJLmxvbmcJMHgyZmQxOTU1NywweDY0MWIwMDAwLDB4MDAwMDNmZmYsMHgwMDAwOGIzOAorCS5sb25nCTB4Y2FkMTAxOTMsMHgyYTM1MDAwMCwweDAwMDAzZmZmLDB4MDAwMDhjZTcKKwkubG9uZwkweGE4ZDgzMDFlLDB4ZTZiNTAwMDAsMHgwMDAwM2ZmZiwweDAwMDA4ZjQ2CisJLmxvbmcJMHhhMzllMmVhZSwweDUyODEwMDAwLDB4MDAwMDNmZmYsMHgwMDAwOTIyZAorCS5sb25nCTB4YTdkNzkxODgsMHg4NDg3MDAwMCwweDAwMDAzZmZmLDB4MDAwMDk0ZDEKKwkubG9uZwkweDlmY2JkZWRmLDB4NTI0MTAwMDAsMHgwMDAwM2ZmZiwweDAwMDA5NzNhCisJLmxvbmcJMHhiOTQ0MTlkMiwweGEwOGIwMDAwLDB4MDAwMDNmZmYsMHgwMDAwOTk2ZgorCS5sb25nCTB4ZjAwZTA4ZTEsMHgwYjk2MDAwMCwweDAwMDAzZmZmLDB4MDAwMDliNzcKKwkubG9uZwkweDNmOTUxMjMyLDB4MWRhNzAwMDAsMHgwMDAwM2ZmZiwweDAwMDA5ZDU1CisJLmxvbmcJMHhjYzMyMGY5MywweDU2MjQwMDAwLDB4MDAwMDNmZmYsMHgwMDAwOWYxMAorCS5sb25nCTB4MDU3NTAwNmMsMHhjNTcxMDAwMCwweDAwMDAzZmZmLDB4MDAwMGEwYTkKKwkubG9uZwkweGMyOTBkOTdjLDB4YzA2YzAwMDAsMHgwMDAwM2ZmZiwweDAwMDBhMjI2CisJLmxvbmcJMHg1OWViZWJjMCwweDYzMGEwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYTM4OAorCS5sb25nCTB4YjRhZmY2ZWYsMHgwZWM5MDAwMCwweDAwMDAzZmZmLDB4MDAwMGE0ZDMKKwkubG9uZwkweDVmMTA2MWQyLDB4OTJjNDAwMDAsMHgwMDAwM2ZmZiwweDAwMDBhNjA4CisJLmxvbmcJMHg5NWRjZmJlMywweDE4N2UwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYTcyYQorCS5sb25nCTB4NTFkYzczNjcsMHhiZWFjMDAwMCwweDAwMDAzZmZmLDB4MDAwMGE4M2EKKwkubG9uZwkweDUxNTMwOTU2LDB4MTY4ZjAwMDAsMHgwMDAwM2ZmZiwweDAwMDBhOTNhCisJLmxvbmcJMHgyMDA3NzUzOSwweDU0NmUwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYWE5ZQorCS5sb25nCTB4NzI0NTAyM2IsMHgyNjA1MDAwMCwweDAwMDAzZmZmLDB4MDAwMGFjNGMKKwkubG9uZwkweDg0YmE2ZmU0LDB4ZDU4ZjAwMDAsMHgwMDAwM2ZmZiwweDAwMDBhZGNlCisJLmxvbmcJMHg0YTRhNjA2YiwweDk3MTIwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYWYyYQorCS5sb25nCTB4MmRjZDhkMjYsMHgzYzljMDAwMCwweDAwMDAzZmZmLDB4MDAwMGIwNjUKKwkubG9uZwkweDZmODFmMjIyLDB4NjVjNzAwMDAsMHgwMDAwM2ZmZiwweDAwMDBiMTg0CisJLmxvbmcJMHg2NTE1MGY3MSwweDQ5NmEwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYjI4YQorCS5sb25nCTB4YWExNTZmOWEsMHhkYTM1MDAwMCwweDAwMDAzZmZmLDB4MDAwMGIzN2IKKwkubG9uZwkweDQ0ZmYzNzY2LDB4Yjg5NTAwMDAsMHgwMDAwM2ZmZiwweDAwMDBiNDU4CisJLmxvbmcJMHhjM2RjZTk2MywweDA0MzMwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYjUyNQorCS5sb25nCTB4NTI5ZDU2MjIsMHg0NmJkMDAwMCwweDAwMDAzZmZmLDB4MDAwMGI1ZTIKKwkubG9uZwkweGNjYTk1ZjlkLDB4ODhjYzAwMDAsMHgwMDAwM2ZmZiwweDAwMDBiNjkyCisJLmxvbmcJMHhjYWRhN2FjYSwweDFhZGEwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYjczNgorCS5sb25nCTB4YWVhN2E2OTIsMHg1ODM4MDAwMCwweDAwMDAzZmZmLDB4MDAwMGI3Y2YKKwkubG9uZwkweGFiMjg3ZTlmLDB4N2IzNjAwMDAsMHgwMDAwM2ZmZiwweDAwMDBiODVlCisJLmxvbmcJMHhjYzY2Y2IyMSwweDk4MzUwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYjhlNAorCS5sb25nCTB4ZmQ1YTIwYTUsMHg5M2RhMDAwMCwweDAwMDAzZmZmLDB4MDAwMGI5OWYKKwkubG9uZwkweDQxZjY0YWZmLDB4OWJiNTAwMDAsMHgwMDAwM2ZmZiwweDAwMDBiYTdmCisJLmxvbmcJMHgxZTE3ODQyYiwweGJlN2IwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYmI0NworCS5sb25nCTB4MTI4NTc2MzcsMHhlMTdkMDAwMCwweDAwMDAzZmZmLDB4MDAwMGJiZmEKKwkubG9uZwkweGJlOGE0Nzg4LDB4ZGY2ZjAwMDAsMHgwMDAwM2ZmZiwweDAwMDBiYzlkCisJLmxvbmcJMHgwZmFkMmI2OCwweDlkNzkwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYmQzMAorCS5sb25nCTB4NmEzOTQ3MWUsMHhjZDg2MDAwMCwweDAwMDAzZmZmLDB4MDAwMGJkYjYKKwkubG9uZwkweGM3MzE4NTZhLDB4ZjE4YTAwMDAsMHgwMDAwM2ZmZiwweDAwMDBiZTMxCisJLmxvbmcJMHhjYWM1MDJlOCwweDBkNzAwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYmVhMgorCS5sb25nCTB4ZDU1Y2UzMzEsMHg5NGUyMDAwMCwweDAwMDAzZmZmLDB4MDAwMGJmMGIKKwkubG9uZwkweDEwYjdjMDMxLDB4MjhmMDAwMDAsMHgwMDAwM2ZmZiwweDAwMDBiZjZiCisJLmxvbmcJMHg3YTE4ZGFjYiwweDc3OGQwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYmZjNAorCS5sb25nCTB4ZWE0NjYzZmEsMHgxOGY2MDAwMCwweDAwMDAzZmZmLDB4MDAwMGMwMTgKKwkubG9uZwkweDFiZGU4Yjg5LDB4YTQ1NDAwMDAsMHgwMDAwM2ZmZiwweDAwMDBjMDY1CisJLmxvbmcJMHhiMDY2Y2ZiZiwweDY0MzkwMDAwLDB4MDAwMDNmZmYsMHgwMDAwYzBhZQorCS5sb25nCTB4MzQ1ZjU2MzQsMHgwYWU2MDAwMCwweDAwMDAzZmZmLDB4MDAwMGMwZjIKKwkubG9uZwkweDIyOTE5Y2I5LDB4ZTZhNzAwMDAsMHgwMDAwZjIxMCwweDQ4MDAyMjEwCisJLmxvbmcJMHgzMjI4MDAwNCwweGYyMmU2ODAwLDB4ZmY4NDAyODEsMHg3ZmZmZmZmZgorCS5sb25nCTB4MGM4MTNmZmIsMHg4MDAwNmMwNCwweDYwMDAwMGQwLDB4MGM4MTQwMDIKKwkubG9uZwkweGZmZmY2ZjA0LDB4NjAwMDAxNGMsMHgwMmFlZjgwMCwweDAwMDBmZjg4CisJLmxvbmcJMHgwMGFlMDQwMCwweDAwMDBmZjg4LDB4MmQ3YzAwMDAsMHgwMDAwZmY4YworCS5sb25nCTB4ZjIwMDAwODAsMHhmMjJlNDhhMywweGZmODRmMjJlLDB4NDgyOGZmODQKKwkubG9uZwkweGYyM2M0NGEyLDB4M2Y4MDAwMDAsMHhmMjAwMDQyMCwweDJmMDIyNDAxCisJLmxvbmcJMHgwMjgxMDAwMCwweDc4MDAwMjgyLDB4N2ZmZjAwMDAsMHgwNDgyM2ZmYgorCS5sb25nCTB4MDAwMGUyODIsMHhkMjgyZWU4MSwweDQzZmFmNzgwLDB4ZDNjMTJkNTkKKwkubG9uZwkweGZmOTAyZDU5LDB4ZmY5NDJkNTksMHhmZjk4MjIyZSwweGZmODQwMjgxCisJLmxvbmcJMHg4MDAwMDAwMCwweDgzYWVmZjkwLDB4MjQxZmYyMjcsMHhlMDA0ZjIwMAorCS5sb25nCTB4MDA4MGYyMDAsMHgwNGEzZjIzYSwweDU1MDBmNmEwLDB4ZjIwMDA1MjIKKwkubG9uZwkweGYyMDAwNTIzLDB4ZjIwMDAwYTMsMHhmMjNhNTUyMiwweGY2OTZmMjNhCisJLmxvbmcJMHg1NGEzZjY5OCwweGYyMDAwOGEzLDB4ZjIwMDA0MjIsMHhmMjFmZDAyMAorCS5sb25nCTB4ZjIwMDkwMDAsMHhmMjJlNDgyMiwweGZmOTA2MGZmLDB4MDAwMDJkMzAKKwkubG9uZwkweDBjODEzZmZmLDB4ODAwMDZlMDAsMHgwMDhhMGM4MSwweDNmZDc4MDAwCisJLmxvbmcJMHg2ZDAwMDA2YywweGYyMjdlMDBjLDB4ZjIwMDAwMjMsMHhmMjAwMDA4MAorCS5sb25nCTB4ZjIwMDA0YTMsMHhmMjNhNTUwMCwweGY2NWFmMjNhLDB4NTU4MGY2NWMKKwkubG9uZwkweGYyMDAwNTIzLDB4ZjIwMDA1YTMsMHhmMjNhNTUyMiwweGY2NTZmMjNhCisJLmxvbmcJMHg1NWEyZjY1OCwweGYyMDAwNTIzLDB4ZjIwMDBjYTMsMHhmMjNhNTUyMgorCS5sb25nCTB4ZjY1MmYyM2EsMHg1NGEyZjY1NCwweGYyMDAwMTIzLDB4ZjIyZTQ4MjMKKwkubG9uZwkweGZmODRmMjAwLDB4MDhhMmYyMDAsMHgwNDIzZjIxZiwweGQwMzBmMjAwCisJLmxvbmcJMHg5MDAwZjIyZSwweDQ4MjJmZjg0LDB4NjBmZjAwMDAsMHgyY2IyZjIwMAorCS5sb25nCTB4OTAwMDEyM2MsMHgwMDAzZjIyZSwweDQ4MDBmZjg0LDB4NjBmZjAwMDAKKwkubG9uZwkweDJjOTAwYzgxLDB4NDA2MzgwMDAsMHg2ZTAwMDA4ZSwweGYyMjdlMDBjCisJLmxvbmcJMHhmMjNjNDQ4MCwweGJmODAwMDAwLDB4ZjIwMDAwYTAsMHhmMjAwMDQwMAorCS5sb25nCTB4ZjIwMDAwMjMsMHhmMjJlNjg4MCwweGZmODRmMjAwLDB4MDA4MGYyMDAKKwkubG9uZwkweDA0YTNmMjNhLDB4NTU4MGY1ZWMsMHhmMjNhNTUwMCwweGY1ZWVmMjAwCisJLmxvbmcJMHgwNWEzZjIwMCwweDA1MjNmMjNhLDB4NTVhMmY1ZTgsMHhmMjNhNTUyMgorCS5sb25nCTB4ZjVlYWYyMDAsMHgwY2EzZjIwMCwweDAxMjNmMjNhLDB4NTRhMmY1ZTQKKwkubG9uZwkweGYyMmU0ODIzLDB4ZmY4NGYyMDAsMHgwOGEyZjIwMCwweDA0MjNmMjJlCisJLmxvbmcJMHg0ODIyZmY4NCwweGYyMWZkMDMwLDB4ZjIwMDkwMDAsMHg0YTEwNmEwYworCS5sb25nCTB4ZjIzYTQ4MjIsMHhmNWQ2NjBmZiwweDAwMDAyYzI0LDB4ZjIzYTQ4MjIKKwkubG9uZwkweGY1YmE2MGZmLDB4MDAwMDJjMTAsMHg0YTEwNmExNiwweGYyM2E0ODAwCisJLmxvbmcJMHhmNWJhZjIwMCwweDkwMDBmMjNhLDB4NDgyMmY1YzAsMHg2MGZmMDAwMAorCS5sb25nCTB4MmJmZWYyM2EsMHg0ODAwZjU5NCwweGYyMDA5MDAwLDB4ZjIzYTQ4MjIKKwkubG9uZwkweGY1YmE2MGZmLDB4MDAwMDJiZTAsMHg2MGZmMDAwMCwweDJhNjZmMjEwCisJLmxvbmcJMHg0ODAwMjIxMCwweDMyMjgwMDA0LDB4MDI4MTdmZmYsMHhmZmZmMGM4MQorCS5sb25nCTB4M2ZmZjgwMDAsMHg2YzRlMGM4MSwweDNmZDc4MDAwLDB4NmQwMDAwN2MKKwkubG9uZwkweGYyM2M0NDgwLDB4M2Y4MDAwMDAsMHhmMjAwMDBhOCwweGYyMjdlMDA0CisJLmxvbmcJMHhmMjNjNDUwMCwweDNmODAwMDAwLDB4ZjIwMDAxMjIsMHhmMjAwMDhhMworCS5sb25nCTB4ZjIxZmQwMjAsMHhmMjAwMDQ4NCwweGYyMDAwNDIwLDB4ZjIyN2UwMDEKKwkubG9uZwkweDQxZDc2MWZmLDB4ZmZmZmZkNjYsMHhkZmZjMDAwMCwweDAwMGM2MGZmCisJLmxvbmcJMHgwMDAwMmI2YywweGYyMDAwMDE4LDB4ZjIzYzQ0MzgsMHgzZjgwMDAwMAorCS5sb25nCTB4ZjJkMjAwMDAsMHgyOWQ0ZjIzYSwweDQ4MDBjNWE2LDB4MjIxMDAyODEKKwkubG9uZwkweDgwMDAwMDAwLDB4MDA4MTNmODAsMHgwMDAwMmYwMSwweGYyMDA5MDAwCisJLmxvbmcJMHhmMjFmNDQyMywweDYwZmYwMDAwLDB4MmIzNmYyMDAsMHg5MDAwMTIzYworCS5sb25nCTB4MDAwM2YyMTAsMHg0ODAwNjBmZiwweDAwMDAyYjE2LDB4NjBmZjAwMDAKKwkubG9uZwkweDI5YjJmMjEwLDB4NDgwMDIyMTAsMHgzMjI4MDAwNCwweDAyODE3ZmZmCisJLmxvbmcJMHhmZmZmMGM4MSwweDNmZmY4MDAwLDB4NmM0NGYyM2MsMHg0NDgwM2Y4MAorCS5sb25nCTB4MDAwMGYyMDAsMHgwMGEyZjIwMCwweDAwMWFmMjNjLDB4NDQyMjNmODAKKwkubG9uZwkweDAwMDBmMjAwLDB4MDQyMGYyMDAsMHgwMDA0MmYwMCwweDQyODBmMjI3CisJLmxvbmcJMHhlMDAxNDFkNywweDYxZmZmZmZmLDB4ZmNjNGRmZmMsMHgwMDAwMDAwYworCS5sb25nCTB4ZjIxZjkwMDAsMHhmMjAwMDAyMiwweDYwZmYwMDAwLDB4MmFjYWYyMDAKKwkubG9uZwkweDAwMThmMjNjLDB4NDQzODNmODAsMHgwMDAwZjJkMiwweDAwMDAyOTJhCisJLmxvbmcJMHg0YTEwNmExOCwweGYyM2E0ODAwLDB4YzRlOGYyMDAsMHg5MDAwZjIzYworCS5sb25nCTB4NDQyMjAwODAsMHgwMDAwNjBmZiwweDAwMDAyYTljLDB4NjBmZjAwMDAKKwkubG9uZwkweDJjZThmMjAwLDB4OTAwMGYyM2EsMHg0ODAwYzRkNiwweDYwZmYwMDAwCisJLmxvbmcJMHgyYTg2M2ZkYywweDAwMDA4MmUzLDB4MDg2NTQzNjEsMHhjNGM2MDAwMAorCS5sb25nCTB4MDAwMDNmYTUsMHg1NTU1NTU1NSwweDRjYzEzZmM1LDB4NTU1NTU1NTUKKwkubG9uZwkweDRhNTQzZjgxLDB4MTExMTExMTcsMHg0Mzg1M2ZhNSwweDU1NTU1NTU1CisJLmxvbmcJMHg0ZjVhM2ZjNSwweDU1NTU1NTU1LDB4NTU1NTAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDNlYzcsMHgxZGUzYTU3NywweDQ2ODIzZWZhLDB4MDFhMDE5ZDcKKwkubG9uZwkweGNiNjgzZjJhLDB4MDFhMDFhMDEsMHg5ZGYzM2Y1NiwweGMxNmMxNmMxCisJLmxvbmcJMHg3MGUyM2Y4MSwweDExMTExMTExLDB4MTExMTNmYTUsMHg1NTU1NTU1NQorCS5sb25nCTB4NTU1NTNmZmMsMHgwMDAwYWFhYSwweGFhYWFhYWFhLDB4YWFhYjAwMDAKKwkubG9uZwkweDAwMDA0OGIwLDB4MDAwMDAwMDAsMHgwMDAwMzczMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwM2ZmZiwweDAwMDA4MDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDNmZmYsMHgwMDAwODE2NCwweGQxZjNiYzAzLDB4MDc3NDlmODQKKwkubG9uZwkweDFhOWIzZmZmLDB4MDAwMDgyY2QsMHg4Njk4YWMyYiwweGExZDg5ZmMxCisJLmxvbmcJMHhkNWI5M2ZmZiwweDAwMDA4NDNhLDB4MjhjM2FjZGUsMHg0MDQ4YTA3MgorCS5sb25nCTB4ODM2OTNmZmYsMHgwMDAwODVhYSwweGMzNjdjYzQ4LDB4N2IxNDFmYzUKKwkubG9uZwkweGM5NWMzZmZmLDB4MDAwMDg3MWYsMHg2MTk2OWU4ZCwweDEwMTAxZWU4CisJLmxvbmcJMHg1YzlmM2ZmZiwweDAwMDA4ODk4LDB4MGU4MDkyZGEsMHg4NTI4OWZhMgorCS5sb25nCTB4MDcyOTNmZmYsMHgwMDAwOGExNCwweGQ1NzU0OTZlLDB4ZmQ5Y2EwN2IKKwkubG9uZwkweGY5YWYzZmZmLDB4MDAwMDhiOTUsMHhjMWUzZWE4YiwweGQ2ZThhMDAyCisJLmxvbmcJMHgwZGNmM2ZmZiwweDAwMDA4ZDFhLDB4ZGY1YjdlNWIsMHhhOWU0MjA1YQorCS5sb25nCTB4NjNkYTNmZmYsMHgwMDAwOGVhNCwweDM5OGI0NWNkLDB4NTNjMDFlYjcKKwkubG9uZwkweDAwNTEzZmZmLDB4MDAwMDkwMzEsMHhkYzQzMTQ2NiwweGIxZGMxZjZlCisJLmxvbmcJMHhiMDI5M2ZmZiwweDAwMDA5MWMzLDB4ZDM3M2FiMTEsMHhjMzM4YTA3OAorCS5sb25nCTB4MTQ5NDNmZmYsMHgwMDAwOTM1YSwweDJiMmYxM2U2LDB4ZTkyYzllYjMKKwkubG9uZwkweDE5YjAzZmZmLDB4MDAwMDk0ZjQsMHhlZmE4ZmVmNywweDA5NjAyMDE3CisJLmxvbmcJMHg0NTdkM2ZmZiwweDAwMDA5Njk0LDB4MmQzNzIwMTgsMHg1YTAwMWYxMQorCS5sb25nCTB4ZDUzNzNmZmYsMHgwMDAwOTgzNywweGYwNTE4ZGI4LDB4YTk3MDlmYjkKKwkubG9uZwkweDUyZGQzZmZmLDB4MDAwMDk5ZTAsMHg0NTkzMjBiNywweGZhNjQxZmU0CisJLmxvbmcJMHgzMDg3M2ZmZiwweDAwMDA5YjhkLDB4MzliOWQ1NGUsMHg1NTM4MWZhMgorCS5sb25nCTB4YTgxODNmZmYsMHgwMDAwOWQzZSwweGQ5YTcyY2ZmLDB4Yjc1MDFmZGUKKwkubG9uZwkweDQ5NGQzZmZmLDB4MDAwMDllZjUsMHgzMjYwOTFhMSwweDExYWMyMDUwCisJLmxvbmcJMHg0ODkwM2ZmZiwweDAwMDBhMGIwLDB4NTEwZmI5NzEsMHg0ZmM0YTA3MworCS5sb25nCTB4NjkxYzNmZmYsMHgwMDAwYTI3MCwweDQzMDMwYzQ5LDB4NjgxODFmOWIKKwkubG9uZwkweDdhMDUzZmZmLDB4MDAwMGE0MzUsMHgxNWFlMDllNiwweDgwYTBhMDc5CisJLmxvbmcJMHg3MTI2M2ZmZiwweDAwMDBhNWZlLDB4ZDZhOWIxNTEsMHgzOGVjYTA3MQorCS5sb25nCTB4YTE0MDNmZmYsMHgwMDAwYTdjZCwweDkzYjRlOTY1LDB4MzU2ODIwNGYKKwkubG9uZwkweDYyZGEzZmZmLDB4MDAwMGE5YTEsMHg1YWI0ZWE3YywweDBlZjgxZjI4CisJLmxvbmcJMHgzYzRhM2ZmZiwweDAwMDBhYjdhLDB4MzliNWE5M2UsMHhkMzM4OWY5YQorCS5sb25nCTB4N2ZkYzNmZmYsMHgwMDAwYWQ1OCwweDNlZWE0MmExLDB4NGFjOGEwNWIKKwkubG9uZwkweDNmYWMzZmZmLDB4MDAwMGFmM2IsMHg3OGFkNjkwYSwweDQzNzQxZmRmCisJLmxvbmcJMHgyNjEwM2ZmZiwweDAwMDBiMTIzLDB4ZjU4MWQyYWMsMHgyNTkwOWY3MAorCS5sb25nCTB4NWY5MDNmZmYsMHgwMDAwYjMxMSwweGM0MTJhOTExLDB4MjQ4ODIwMWYKKwkubG9uZwkweDY3OGEzZmZmLDB4MDAwMGI1MDQsMHhmMzMzZjlkZSwweDY0ODQxZjMyCisJLmxvbmcJMHhmYjEzM2ZmZiwweDAwMDBiNmZkLDB4OTFlMzI4ZDEsMHg3NzkwMjAwMworCS5sb25nCTB4OGIzMDNmZmYsMHgwMDAwYjhmYiwweGFmNDc2MmZiLDB4OWVlODIwMGQKKwkubG9uZwkweGMzY2MzZmZmLDB4MDAwMGJhZmYsMHg1YWIyMTMzZSwweDQ1ZmM5ZjhiCisJLmxvbmcJMHgyYWU2M2ZmZiwweDAwMDBiZDA4LDB4YTM5ZjU4MGMsMHgzNmMwYTAyYgorCS5sb25nCTB4YmY3MDNmZmYsMHgwMDAwYmYxNywweDk5YjY3YTczLDB4MTA4NGEwMGIKKwkubG9uZwkweGY1MTgzZmZmLDB4MDAwMGMxMmMsMHg0Y2NhNjY3MCwweDk0NThhMDQxCisJLmxvbmcJMHhkZDQxM2ZmZiwweDAwMDBjMzQ2LDB4Y2NkYTI0OTcsMHg2NDA4OWZkZgorCS5sb25nCTB4MTM3YjNmZmYsMHgwMDAwYzU2NywweDJhMTE1NTA2LDB4ZGFkYzIwMWYKKwkubG9uZwkweDE1NjgzZmZmLDB4MDAwMGM3OGQsMHg3NGM4YWJiOSwweGIxNWMxZmMxCisJLmxvbmcJMHgzYTJlM2ZmZiwweDAwMDBjOWI5LDB4YmQ4NjZlMmYsMHgyN2E0YTAzZgorCS5sb25nCTB4OGYwMzNmZmYsMHgwMDAwY2JlYywweDE0ZmVmMjcyLDB4N2M1YzFmZjQKKwkubG9uZwkweDkwN2QzZmZmLDB4MDAwMGNlMjQsMHg4YzE1MWY4NCwweDgwZTQ5ZTZlCisJLmxvbmcJMHg1M2U0M2ZmZiwweDAwMDBkMDYzLDB4MzNkYWVmMmIsMHgyNTk0MWZkNgorCS5sb25nCTB4ZDQ1YzNmZmYsMHgwMDAwZDJhOCwweDFkOTFmMTJhLDB4ZTQ1Y2EwNzYKKwkubG9uZwkweGVkYjkzZmZmLDB4MDAwMGQ0ZjMsMHg1YWFiY2ZlZCwweGZhMjA5ZmE2CisJLmxvbmcJMHhkZTIxM2ZmZiwweDAwMDBkNzQ0LDB4ZmNjYWQ2OWQsMHg2YWY0MWVlNgorCS5sb25nCTB4OWEyZjNmZmYsMHgwMDAwZDk5ZCwweDE1YzI3OGFmLDB4ZDdiNDIwN2YKKwkubG9uZwkweDQzOWYzZmZmLDB4MDAwMGRiZmIsMHhiNzk3ZGFmMiwweDM3NTQyMDFlCisJLmxvbmcJMHhjMjA3M2ZmZiwweDAwMDBkZTYwLDB4ZjQ4MjVlMGUsMHg5MTI0OWU4YgorCS5sb25nCTB4ZTE3NTNmZmYsMHgwMDAwZTBjYywweGRlZWMyYTk0LDB4ZTExMDIwMDMKKwkubG9uZwkweDJjNGIzZmZmLDB4MDAwMGUzM2YsMHg4OTcyYmU4YSwweDVhNTAyMDA0CisJLmxvbmcJMHhkZmY1M2ZmZiwweDAwMDBlNWI5LDB4MDZlNzdjODMsMHg0OGE4MWU3MgorCS5sb25nCTB4ZjQ3YTNmZmYsMHgwMDAwZTgzOSwweDZhNTAzYzRiLDB4ZGM2ODFmNzIKKwkubG9uZwkweDJmMjIzZmZmLDB4MDAwMGVhYzAsMHhjNmU3ZGQyNCwweDM5MzBhMDE3CisJLmxvbmcJMHhlOTQ1M2ZmZiwweDAwMDBlZDRmLDB4MzAxZWQ5OTQsMHgyYjg0MWY0MAorCS5sb25nCTB4MWE1YjNmZmYsMHgwMDAwZWZlNCwweGI5OWJkY2RhLDB4ZjVjYzlmYjkKKwkubG9uZwkweGE5ZTMzZmZmLDB4MDAwMGYyODEsMHg3NzNjNTlmZiwweGIxMzgyMDc0CisJLmxvbmcJMHg0YzA1M2ZmZiwweDAwMDBmNTI1LDB4N2QxNTI0ODYsMHhjYzJjMWY3NworCS5sb25nCTB4M2ExOTNmZmYsMHgwMDAwZjdkMCwweGRmNzMwYWQxLDB4M2JiODFmZmUKKwkubG9uZwkweDkwZDUzZmZmLDB4MDAwMGZhODMsMHhiMmRiNzIyYSwweDAzM2NhMDQxCisJLmxvbmcJMHhlZDIyM2ZmZiwweDAwMDBmZDNlLDB4MGMwY2Y0ODYsMHhjMTc0MWY4NQorCS5sb25nCTB4M2YzYTIyMTAsMHgwMjgxN2ZmZiwweDAwMDAwYzgxLDB4M2ZiZTAwMDAKKwkubG9uZwkweDZjMDY2MGZmLDB4MDAwMDAxMDgsMHgzMjI4MDAwNCwweDBjODE0MDBjCisJLmxvbmcJMHhiMTY3NmQwNiwweDYwZmYwMDAwLDB4MDEwY2YyMTAsMHg0ODAwZjIwMAorCS5sb25nCTB4MDA4MGYyM2MsMHg0NDIzNDJiOCwweGFhM2JmMjI3LDB4ZTAwYzJkN2MKKwkubG9uZwkweDAwMDAwMDAwLDB4ZmY1OGYyMDEsMHg2MDAwNDNmYSwweGZiYjZmMjAxCisJLmxvbmcJMHg0MDAwMmQ0MSwweGZmNTQwMjgxLDB4MDAwMDAwM2YsMHhlOTg5ZDNjMQorCS5sb25nCTB4MjIyZWZmNTQsMHhlYzgxMDY0MSwweDNmZmYzZDdhLDB4ZmIwNmZmNTQKKwkubG9uZwkweGYyMDAwMTAwLDB4ZjIzYzQ0MjMsMHhiYzMxNzIxOCwweGYyM2E0OTIzCisJLmxvbmcJMHhmYWYyZjIwMCwweDA0MjJmMjAwLDB4MDgyMmYyMDAsMHgwMDgwZjIwMAorCS5sb25nCTB4MDRhM2YyM2MsMHg0NTAwM2FiNiwweDBiNzBmMjAwLDB4MDUyM2YyMDAKKwkubG9uZwkweDA1ODBmMjNjLDB4NDVhMzNjMDgsMHg4ODk1ZjIzYSwweDU1MjJmYWQ0CisJLmxvbmcJMHhmMjNhNTVhMiwweGZhZDZmMjAwLDB4MDUyMzNkNDEsMHhmZjg0MmQ3YworCS5sb25nCTB4ODAwMDAwMDAsMHhmZjg4NDJhZSwweGZmOGNmMjAwLDB4MDVhM2YyM2MKKwkubG9uZwkweDQ1MjIzZjAwLDB4MDAwMGYyMDAsMHgwMWEzZjIwMCwweDA1MjNmMjAwCisJLmxvbmcJMHgwYzIyZjIxOSwweDQ4ODBmMjAwLDB4MDgyMmYyMDAsMHgwNDIzZjIxZgorCS5sb25nCTB4ZDAzMGYyMTEsMHg0NDIyZjIwMCwweDA0MjIyMjJlLDB4ZmY1ODRhODEKKwkubG9uZwkweDY3MDZmMjJlLDB4NDgyM2ZmOTAsMHhmMjAwOTAwMCwweDEyM2MwMDAwCisJLmxvbmcJMHhmMjJlNDgyMywweGZmODQ2MGZmLDB4MDAwMDI0YzYsMHhmMjEwZDA4MAorCS5sb25nCTB4ZjIwMDkwMDAsMHhmMjNjNDQyMiwweDNmODAwMDAwLDB4NjBmZjAwMDAKKwkubG9uZwkweDI0YzYwYzgxLDB4NDAwY2IyN2MsMHg2ZTY2ZjIxMCwweDQ4MDBmMjAwCisJLmxvbmcJMHgwMDgwZjIzYywweDQ0MjM0MmI4LDB4YWEzYmYyMjcsMHhlMDBjMmQ3YworCS5sb25nCTB4MDAwMDAwMDEsMHhmZjU4ZjIwMSwweDYwMDA0M2ZhLDB4ZmFhNmYyMDEKKwkubG9uZwkweDQwMDAyZDQxLDB4ZmY1NDAyODEsMHgwMDAwMDAzZiwweGU5ODlkM2MxCisJLmxvbmcJMHgyMjJlZmY1NCwweGVjODEyZDQxLDB4ZmY1NGUyODEsMHg5M2FlZmY1NAorCS5sb25nCTB4MDY0MTNmZmYsMHgzZDQxZmY5MCwweDJkN2M4MDAwLDB4MDAwMGZmOTQKKwkubG9uZwkweDQyYWVmZjk4LDB4MjIyZWZmNTQsMHgwNjQxM2ZmZiwweDYwMDBmZWQyCisJLmxvbmcJMHg0YTEwNmJmZiwweDAwMDAyMzcwLDB4NjBmZjAwMDAsMHgyNDEyMmYxMAorCS5sb25nCTB4MDI5NzgwMDAsMHgwMDAwMDA5NywweDAwODAwMDAwLDB4ZjIzYzQ0MDAKKwkubG9uZwkweDNmODAwMDAwLDB4ZjIwMDkwMDAsMHhmMjFmNDQyMiwweDYwZmYwMDAwCisJLmxvbmcJMHgyNDI2MjIxMCwweDAyODE3ZmZmLDB4MDAwMDBjODEsMHgzZmZkMDAwMAorCS5sb25nCTB4NmMwNjYwZmYsMHgwMDAwMDE1ZSwweDMyMjgwMDA0LDB4MGM4MTQwMDQKKwkubG9uZwkweGMyMTU2ZjA2LDB4NjBmZjAwMDAsMHgwMjZjZjIxMCwweDQ4MDBmMjAwCisJLmxvbmcJMHgwMDgwZjIzYywweDQ0MjM0MmI4LDB4YWEzYmYyMjcsMHhlMDBjZjIwMQorCS5sb25nCTB4NjAwMDQzZmEsMHhmOWVlZjIwMSwweDQwMDAyZDQxLDB4ZmY1NDAyODEKKwkubG9uZwkweDAwMDAwMDNmLDB4ZTk4OWQzYzEsMHgyMjJlZmY1NCwweGVjODEyZDQxCisJLmxvbmcJMHhmZjU0ZjIwMCwweDAxMDBmMjNjLDB4NDQyM2JjMzEsMHg3MjE4ZjIzYQorCS5sb25nCTB4NDkyM2Y5MzAsMHhmMjAwMDQyMiwweGYyMDAwODIyLDB4MDY0MTNmZmYKKwkubG9uZwkweGYyMDAwMDgwLDB4ZjIwMDA0YTMsMHhmMjNjNDUwMCwweDM5NTAwOTdiCisJLmxvbmcJMHhmMjAwMDUyMywweGYyMDAwNTgwLDB4ZjIzYzQ1YTMsMHgzYWI2MGI2YQorCS5sb25nCTB4ZjIzYTU1MjIsMHhmOTFlZjIzYSwweDU1YTJmOTIwLDB4M2Q0MWZmODQKKwkubG9uZwkweDJkN2M4MDAwLDB4MDAwMGZmODgsMHg0MmFlZmY4YywweGYyMDAwNTIzCisJLmxvbmcJMHgyMjJlZmY1NCwweDQ0NDFmMjAwLDB4MDVhMzA2NDEsMHgzZmZmZjIzYQorCS5sb25nCTB4NTUyMmY5MDAsMHhmMjNjNDVhMiwweDNmMDAwMDAwLDB4ZjIwMDA1MjMKKwkubG9uZwkweDAwNDE4MDAwLDB4M2Q0MWZmOTAsMHgyZDdjODAwMCwweDAwMDBmZjk0CisJLmxvbmcJMHg0MmFlZmY5OCwweGYyMDAwY2EzLDB4ZjIwMDAxMjMsMHhmMjAwMDQyMgorCS5sb25nCTB4ZjIwMDA4MjIsMHhmMjFmZDAzMCwweGYyMTE0ODIzLDB4MjIyZWZmNTQKKwkubG9uZwkweDBjODEwMDAwLDB4MDAzZjZmMWEsMHhmMjI5NDQ4MCwweDAwMGNmMjJlCisJLmxvbmcJMHg0OGEyZmY5MCwweGYyMDAwNDIyLDB4ZjIxMTQ4MjIsMHg2MGZmMDAwMAorCS5sb25nCTB4MDAzNDBjODEsMHhmZmZmZmZmZCwweDZjMTZmMjI5LDB4NDQyMjAwMGMKKwkubG9uZwkweGYyMTE0ODIyLDB4ZjIyZTQ4MjIsMHhmZjkwNjBmZiwweDAwMDAwMDE2CisJLmxvbmcJMHhmMjE5NDg4MCwweGYyMTE0NDIyLDB4ZjIyZTQ4YTIsMHhmZjkwZjIwMAorCS5sb25nCTB4MDQyMmYyMDAsMHg5MDAwZjIyZSwweDQ4MjNmZjg0LDB4NjBmZjAwMDAKKwkubG9uZwkweDIyYWUwYzgxLDB4M2ZiZTAwMDAsMHg2YzZjMGM4MSwweDAwMzMwMDAwCisJLmxvbmcJMHg2ZDJjMmQ3YywweDgwMDEwMDAwLDB4ZmY4NDJkN2MsMHg4MDAwMDAwMAorCS5sb25nCTB4ZmY4ODQyYWUsMHhmZjhjZjIxMCwweDQ4MDBmMjAwLDB4OTAwMDEyM2MKKwkubG9uZwkweDAwMDJmMjJlLDB4NDgyMmZmODQsMHg2MGZmMDAwMCwweDIyNjRmMjEwCisJLmxvbmcJMHg0ODAwZjIzYSwweDU0MjNmODZjLDB4MmQ3YzgwMDEsMHgwMDAwZmY4NAorCS5sb25nCTB4MmQ3YzgwMDAsMHgwMDAwZmY4OCwweDQyYWVmZjhjLDB4ZjIyZTQ4MjIKKwkubG9uZwkweGZmODRmMjAwLDB4OTAwMDEyM2MsMHgwMDAwZjIzYSwweDU0MjNmODRjCisJLmxvbmcJMHg2MGZmMDAwMCwweDIyMmNmMjEwLDB4NDgwMGYyMDAsMHgwMDIzZjIyNworCS5sb25nCTB4ZTAwY2YyM2MsMHg0NDgwMmYzMCwweGNhYThmMjAwLDB4MDBhM2YyM2MKKwkubG9uZwkweDQ1MDAzMTBmLDB4ODI5MGYyM2MsMHg0NGEyMzJkNywweDMyMjBmMjAwCisJLmxvbmcJMHgwMTIzZjIwMCwweDAwYTNmMjNjLDB4NDUyMjM0OTMsMHhmMjgxZjIzYQorCS5sb25nCTB4NTRhMmY3YzAsMHhmMjAwMDEyMywweGYyMDAwMGEzLDB4ZjIzYTU1MjIKKwkubG9uZwkweGY3YmFmMjNhLDB4NTRhMmY3YmMsMHhmMjAwMDEyMywweGYyMDAwMGEzCisJLmxvbmcJMHhmMjNhNTUyMiwweGY3YjZmMjNhLDB4NTRhMmY3YjgsMHhmMjAwMDEyMworCS5sb25nCTB4ZjIwMDAwYTMsMHhmMjNhNTUyMiwweGY3YjJmMjNhLDB4NDhhMmY3YjQKKwkubG9uZwkweGYyMDAwMTIzLDB4ZjIwMDAwYTMsMHhmMjAwMDEyMywweGYyMTA0OGEzCisJLmxvbmcJMHhmMjNjNDQyMywweDNmMDAwMDAwLDB4ZjIwMDA4YTIsMHhmMjFmZDAzMAorCS5sb25nCTB4ZjIwMDA0MjIsMHhmMjAwOTAwMCwweGYyMTA0ODIyLDB4NjBmZjAwMDAKKwkubG9uZwkweDIxOGUyMjEwLDB4MGM4MTAwMDAsMHgwMDAwNmUwMCwweGZiYWNmMjNjCisJLmxvbmcJMHg0NDAwYmY4MCwweDAwMDBmMjAwLDB4OTAwMGYyM2MsMHg0NDIyMDA4MAorCS5sb25nCTB4MDAwMDYwZmYsMHgwMDAwMjE3OCwweDYwZmYwMDAwLDB4MWZmNjMwMjgKKwkubG9uZwkweDAwMDAwODgwLDB4MDAwZjA0NDAsMHgzZmZmZjIwMCwweDUwMDA2ZDAyCisJLmxvbmcJMHg0ZTc1MWQ3YywweDAwMDhmZjY0LDB4NGU3NTYxZmYsMHgwMDAwN2NmYworCS5sb25nCTB4NDQ0MDA0NDAsMHgzZmZmZjIwMCwweDUwMDAxZDdjLDB4MDAwOGZmNjQKKwkubG9uZwkweDRlNzUzMDI4LDB4MDAwMDAwNDAsMHg3ZmZmMDg4MCwweDAwMGUyZDY4CisJLmxvbmcJMHgwMDA0ZmY4OCwweDJkNjgwMDA4LDB4ZmY4YzNkNDAsMHhmZjg0ZjIyZQorCS5sb25nCTB4NDgwMGZmODQsMHg2YjAyNGU3NSwweDFkN2MwMDA4LDB4ZmY2NDRlNzUKKwkubG9uZwkweDYxZmYwMDAwLDB4N2NiNjYwY2EsMHg3ZmZiMDAwMCwweDgwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4ZjIxMDQ4MDAsMHgyMjEwMzIyOAorCS5sb25nCTB4MDAwNDAyODEsMHg3ZmZmZmZmZiwweDBjODE0MDBjLDB4YjE2NzZlNDIKKwkubG9uZwkweGYyMDAwMDE4LDB4MmYwMDQyODAsMHhmMjI3ZTAwMSwweDQxZDc2MWZmCisJLmxvbmcJMHhmZmZmZmFkMiwweGRmZmMwMDAwLDB4MDAwY2YyM2MsMHg0NDIzM2YwMAorCS5sb25nCTB4MDAwMDIwMWYsMHhmMjNjNDQ4MCwweDNlODAwMDAwLDB4ZjIwMDAwYTAKKwkubG9uZwkweGYyMDA5MDAwLDB4MTIzYzAwMDIsMHhmMjAwMDQyMiwweDYwZmYwMDAwCisJLmxvbmcJMHgyMDgwMGM4MSwweDQwMGNiMmIzLDB4NmUzY2YyMDAsMHgwMDE4ZjIzYQorCS5sb25nCTB4NTQyOGJhYWUsMHhmMjNhNTQyOCwweGJhYjAyZjAwLDB4NDI4MGYyMjcKKwkubG9uZwkweGUwMDE0MWQ3LDB4NjFmZmZmZmYsMHhmYTdjZGZmYywweDAwMDAwMDBjCisJLmxvbmcJMHgyMDFmZjIwMCwweDkwMDAxMjNjLDB4MDAwMGYyM2EsMHg0ODIzZmY1YQorCS5sb25nCTB4NjBmZjAwMDAsMHgyMDNjNjBmZiwweDAwMDAyMDE0LDB4ZjIzYzQ0MDAKKwkubG9uZwkweDNmODAwMDAwLDB4ZjIwMDkwMDAsMHhmMjNjNDQyMiwweDAwODAwMDAwCisJLmxvbmcJMHg2MGZmMDAwMCwweDIwMzJmMjEwLDB4NDgwMDIyMTAsMHgzMjI4MDAwNAorCS5sb25nCTB4MjI0MTAyODEsMHg3ZmZmZmZmZiwweDBjODE0MDBjLDB4YjE2NzZlNjIKKwkubG9uZwkweGYyMDAwMDE4LDB4NDhlNzgwNDAsMHhmMjI3ZTAwMSwweDQxZDc0MjgwCisJLmxvbmcJMHg2MWZmZmZmZiwweGZiZTBkZmZjLDB4MDAwMDAwMGMsMHhmMjNjOTAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHg0Y2RmMDIwMSwweGYyMDAwMDgwLDB4ZjIzYzQ0YTIKKwkubG9uZwkweDNmODAwMDAwLDB4ZjIyNzY4MDAsMHhmMjAwMDQyMCwweDIyMDkwMjgxCisJLmxvbmcJMHg4MDAwMDAwMCwweDAwODEzZjAwLDB4MDAwMGYyMWYsMHg0ODIyMmYwMQorCS5sb25nCTB4ZjIwMDkwMDAsMHgxMjNjMDAwMCwweGYyMWY0NDIzLDB4NjBmZjAwMDAKKwkubG9uZwkweDFmYTAwYzgxLDB4NDAwY2IyYjMsMHg2ZWZmMDAwMCwweDFmNGNmMjAwCisJLmxvbmcJMHgwMDE4ZjIzYSwweDU0MjhiOWNhLDB4MmYzYzAwMDAsMHgwMDAwMmYzYworCS5sb25nCTB4ODAwMDAwMDAsMHgyMjA5MDI4MSwweDgwMDAwMDAwLDB4MDA4MTdmZmIKKwkubG9uZwkweDAwMDAyZjAxLDB4ZjIzYTU0MjgsMHhiOWIwMmYwMCwweDQyODBmMjI3CisJLmxvbmcJMHhlMDAxNDFkNywweDYxZmZmZmZmLDB4Zjk3Y2RmZmMsMHgwMDAwMDAwYworCS5sb25nCTB4MjAxZmYyMDAsMHg5MDAwMTIzYywweDAwMDBmMjFmLDB4NDgyMzYwZmYKKwkubG9uZwkweDAwMDAxZjNlLDB4NjBmZjAwMDAsMHgxZGRhZjIxMCwweDQ4MDBmMjJlCisJLmxvbmcJMHg2ODAwZmY4NCwweDIyMTAzMjI4LDB4MDAwNDJkNDEsMHhmZjg0MDI4MQorCS5sb25nCTB4N2ZmZmZmZmYsMHgwYzgxM2ZkNywweDgwMDA2ZDAwLDB4MDA3NDBjODEKKwkubG9uZwkweDNmZmZkZGNlLDB4NmUwMDAwNmEsMHgyMjJlZmY4NCwweDJkNDFmZjVjCisJLmxvbmcJMHgwMjgxN2ZmZiwweDAwMDAwNjgxLDB4MDAwMTAwMDAsMHgyZDQxZmY4NAorCS5sb25nCTB4MDJhZTgwMDAsMHgwMDAwZmY1YywweGYyMmU0ODAwLDB4ZmY4NDJmMDAKKwkubG9uZwkweDQyODBmMjI3LDB4ZTAwMTQxZDcsMHg2MWZmZmZmZiwweGZhYzhkZmZjCisJLmxvbmcJMHgwMDAwMDAwYywweDIwMWZmMjAwLDB4MDA4MGYyM2MsMHg0NGEyNDAwMAorCS5sb25nCTB4MDAwMDIyMmUsMHhmZjVjZjIyZSwweDY4ODBmZjg0LDB4YjNhZWZmODQKKwkubG9uZwkweGYyMDA5MDAwLDB4ZjIyZTQ4MjAsMHhmZjg0NjBmZiwweDAwMDAxZWIwCisJLmxvbmcJMHgwYzgxM2ZmZiwweDgwMDA2ZDAwLDB4MDA4ODBjODEsMHg0MDA0OGFhMQorCS5sb25nCTB4NmUwMDAwOTIsMHgyMjJlZmY4NCwweDJkNDFmZjVjLDB4MDI4MTdmZmYKKwkubG9uZwkweDAwMDAwNjgxLDB4MDAwMTAwMDAsMHgyZDQxZmY4NCwweDAyYWU4MDAwCisJLmxvbmcJMHgwMDAwZmY1YywweDIyMmVmZjVjLDB4ZjIyZTQ4MDAsMHhmZjg0MmYwMAorCS5sb25nCTB4NDI4MGYyMjcsMHhlMDAxNDFkNywweDYxZmZmZmZmLDB4Zjg3OGRmZmMKKwkubG9uZwkweDAwMDAwMDBjLDB4MjAxZjIyMmUsMHhmZjVjZjIzYywweDQ0MjIzZjgwCisJLmxvbmcJMHgwMDAwMGE4MSwweGMwMDAwMDAwLDB4ZjIwMTQ0ODAsMHhmMjAwMDBhMAorCS5sb25nCTB4MjIyZWZmNWMsMHgwMDgxM2Y4MCwweDAwMDBmMjAxLDB4NDQwMGYyMDAKKwkubG9uZwkweDkwMDAxMjNjLDB4MDAwMmYyMDAsMHgwNDIyNjBmZiwweDAwMDAxZTIwCisJLmxvbmcJMHhmMjAwOTAwMCwweDEyM2MwMDAzLDB4ZjIyZTQ4MDAsMHhmZjg0NjBmZgorCS5sb25nCTB4MDAwMDFkZmUsMHgyMjJlZmY4NCwweDAyODE4MDAwLDB4MDAwMDAwODEKKwkubG9uZwkweDNmODAwMDAwLDB4ZjIwMTQ0MDAsMHgwMjgxODAwMCwweDAwMDAwYTgxCisJLmxvbmcJMHg4MDgwMDAwMCwweGYyMDA5MDAwLDB4ZjIwMTQ0MjIsMHg2MGZmMDAwMAorCS5sb25nCTB4MWRkZTYwZmYsMHgwMDAwMWM2YywweDNmZmUwMDAwLDB4YjE3MjE3ZjcKKwkubG9uZwkweGQxY2Y3OWFjLDB4MDAwMDAwMDAsMHgzZjgwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHg3ZjgwMDAwMCwweGJmODAwMDAwLDB4M2ZjMjQ5OWEsMHhiNWU0MDQwYgorCS5sb25nCTB4YmZjNTU1YjUsMHg4NDhjYjdkYiwweDNmYzk5OTk5LDB4OTg3ZDg3MzAKKwkubG9uZwkweGJmY2ZmZmZmLDB4ZmY2ZjdlOTcsMHgzZmQ1NTU1NSwweDU1NTU1NWE0CisJLmxvbmcJMHhiZmUwMDAwMCwweDAwMDAwMDA4LDB4M2YxNzU0OTYsMHhhZGQ3ZGFkNgorCS5sb25nCTB4M2YzYzcxYzIsMHhmZTgwYzdlMCwweDNmNjI0OTI0LDB4OTI4YmNjZmYKKwkubG9uZwkweDNmODk5OTk5LDB4OTk5OTk1ZWMsMHgzZmI1NTU1NSwweDU1NTU1NTU1CisJLmxvbmcJMHg0MDAwMDAwMCwweDAwMDAwMDAwLDB4M2Y5OTAwMDAsMHg4MDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4ZmUwM2Y4MGYKKwkubG9uZwkweGUwM2Y4MGZlLDB4MDAwMDAwMDAsMHgzZmY3MDAwMCwweGZmMDE1MzU4CisJLmxvbmcJMHg4MzNjNDdlMiwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhmYTIzMmNmMgorCS5sb25nCTB4NTIxMzhhYzAsMHgwMDAwMDAwMCwweDNmZjkwMDAwLDB4YmRjOGQ4M2UKKwkubG9uZwkweGFkODhkNTQ5LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGY2NjAzZDk4CisJLmxvbmcJMHgwZjY2MDNkYSwweDAwMDAwMDAwLDB4M2ZmYTAwMDAsMHg5Y2Y0M2RjZgorCS5sb25nCTB4ZjVlYWZkNDgsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4ZjJiOWQ2NDgKKwkubG9uZwkweDBmMmI5ZDY1LDB4MDAwMDAwMDAsMHgzZmZhMDAwMCwweGRhMTZlYjg4CisJLmxvbmcJMHhjYjhkZjYxNCwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhlZjJlYjcxZgorCS5sb25nCTB4YzQzNDUyMzgsMHgwMDAwMDAwMCwweDNmZmIwMDAwLDB4OGIyOWI3NzUKKwkubG9uZwkweDFiZDcwNzQzLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGViYmRiMmE1CisJLmxvbmcJMHhjMTYxOWM4YywweDAwMDAwMDAwLDB4M2ZmYjAwMDAsMHhhOGQ4MzlmOAorCS5sb25nCTB4MzBjMWZiNDksMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4ZTg2NWFjN2IKKwkubG9uZwkweDc2MDNhMTk3LDB4MDAwMDAwMDAsMHgzZmZiMDAwMCwweGM2MWEyZWIxCisJLmxvbmcJMHg4Y2Q5MDdhZCwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhlNTI1OTgyYQorCS5sb25nCTB4ZjcwYzg4MGUsMHgwMDAwMDAwMCwweDNmZmIwMDAwLDB4ZTJmMmE0N2EKKwkubG9uZwkweGRlM2ExOGFmLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGUxZmM3ODBlCisJLmxvbmcJMHgxZmM3ODBlMiwweDAwMDAwMDAwLDB4M2ZmYjAwMDAsMHhmZjY0ODk4ZQorCS5sb25nCTB4ZGY1NWQ1NTEsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4ZGVlOTVjNGMKKwkubG9uZwkweGEwMzdiYTU3LDB4MDAwMDAwMDAsMHgzZmZjMDAwMCwweDhkYjk1NmE5CisJLmxvbmcJMHg3YjNkMDE0OCwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhkYmViNjFlZQorCS5sb25nCTB4ZDE5YzU5NTgsMHgwMDAwMDAwMCwweDNmZmMwMDAwLDB4OWI4ZmUxMDAKKwkubG9uZwkweGY0N2JhMWRlLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGQ5MDFiMjAzCisJLmxvbmcJMHg2NDA2YzgwZSwweDAwMDAwMDAwLDB4M2ZmYzAwMDAsMHhhOTM3MmYxZAorCS5sb25nCTB4MGRhMWJkMTcsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4ZDYyYjgwZDYKKwkubG9uZwkweDJiODBkNjJjLDB4MDAwMDAwMDAsMHgzZmZjMDAwMCwweGI2YjA3ZjM4CisJLmxvbmcJMHhjZTkwZTQ2YiwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhkMzY4MGQzNgorCS5sb25nCTB4ODBkMzY4MGQsMHgwMDAwMDAwMCwweDNmZmMwMDAwLDB4YzNmZDAzMjkKKwkubG9uZwkweDA2NDg4NDgxLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGQwYjY5ZmNiCisJLmxvbmcJMHhkMjU4MGQwYiwweDAwMDAwMDAwLDB4M2ZmYzAwMDAsMHhkMTFkZTBmZgorCS5sb25nCTB4MTVhYjE4Y2EsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4Y2UxNjhhNzcKKwkubG9uZwkweDI1MDgwY2UxLDB4MDAwMDAwMDAsMHgzZmZjMDAwMCwweGRlMTQzM2ExCisJLmxvbmcJMHg2YzY2YjE1MCwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhjYjg3MjdjMAorCS5sb25nCTB4NjVjMzkzZTAsMHgwMDAwMDAwMCwweDNmZmMwMDAwLDB4ZWFlMTBiNWEKKwkubG9uZwkweDdkZGM4YWRkLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGM5MDdkYTRlCisJLmxvbmcJMHg4NzExNDZhZCwweDAwMDAwMDAwLDB4M2ZmYzAwMDAsMHhmNzg1NmU1ZQorCS5sb25nCTB4ZTJjOWIyOTEsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4YzY5ODBjNjkKKwkubG9uZwkweDgwYzY5ODBjLDB4MDAwMDAwMDAsMHgzZmZkMDAwMCwweDgyMDEyY2E1CisJLmxvbmcJMHhhNjgyMDZkNywweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhjNDM3MmY4NQorCS5sb25nCTB4NWQ4MjRjYTYsMHgwMDAwMDAwMCwweDNmZmQwMDAwLDB4ODgyYzVmY2QKKwkubG9uZwkweDcyNTZhOGM1LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGMxZTRiYmQ1CisJLmxvbmcJMHg5NWY2ZTk0NywweDAwMDAwMDAwLDB4M2ZmZDAwMDAsMHg4ZTQ0YzYwYgorCS5sb25nCTB4NGNjZmQ3ZGUsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4YmZhMDJmZTgKKwkubG9uZwkweDBiZmEwMmZmLDB4MDAwMDAwMDAsMHgzZmZkMDAwMCwweDk0NGFkMDllCisJLmxvbmcJMHhmNDM1MWFmNiwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhiZDY5MTA0NworCS5sb25nCTB4MDc2NjFhYTMsMHgwMDAwMDAwMCwweDNmZmQwMDAwLDB4OWEzZWVjZDQKKwkubG9uZwkweGMzZWFhNmIyLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGJiM2VlNzIxCisJLmxvbmcJMHhhNTRkODgwYywweDAwMDAwMDAwLDB4M2ZmZDAwMDAsMHhhMDIxODQzNAorCS5sb25nCTB4MzUzZjFkZTgsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4YjkyMTQzZmEKKwkubG9uZwkweDM2ZjVlMDJlLDB4MDAwMDAwMDAsMHgzZmZkMDAwMCwweGE1ZjJmY2FiCisJLmxvbmcJMHhiYmM1MDZkYSwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhiNzBmYmI1YQorCS5sb25nCTB4MTliZTM2NTksMHgwMDAwMDAwMCwweDNmZmQwMDAwLDB4YWJiM2I4YmEKKwkubG9uZwkweDJhZDM2MmE1LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGI1MDllNjhhCisJLmxvbmcJMHg5Yjk0ODIxZiwweDAwMDAwMDAwLDB4M2ZmZDAwMDAsMHhiMTY0MTc5NQorCS5sb25nCTB4Y2UzY2E5N2IsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4YjMwZjYzNTIKKwkubG9uZwkweDg5MTdjODBiLDB4MDAwMDAwMDAsMHgzZmZkMDAwMCwweGI3MDQ3NTUxCisJLmxvbmcJMHg1ZDBmMWM2MSwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhiMTFmZDNiOAorCS5sb25nCTB4MGIxMWZkM2MsMHgwMDAwMDAwMCwweDNmZmQwMDAwLDB4YmM5NTJhZmUKKwkubG9uZwkweGVhM2QxM2UxLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGFmM2FkZGM2CisJLmxvbmcJMHg4MGFmM2FkZSwweDAwMDAwMDAwLDB4M2ZmZDAwMDAsMHhjMjE2OGVkMAorCS5sb25nCTB4ZjQ1OGJhNGEsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4YWQ2MDJiNTgKKwkubG9uZwkweDBhZDYwMmI2LDB4MDAwMDAwMDAsMHgzZmZkMDAwMCwweGM3ODhmNDM5CisJLmxvbmcJMHhiMzE2M2JmMSwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhhYjhmNjllMgorCS5sb25nCTB4ODM1OWNkMTEsMHgwMDAwMDAwMCwweDNmZmQwMDAwLDB4Y2NlY2FjMDgKKwkubG9uZwkweGJmMDQ1NjVkLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGE5Yzg0YTQ3CisJLmxvbmcJMHhhMDdmNTYzOCwweDAwMDAwMDAwLDB4M2ZmZDAwMDAsMHhkMjQyMDQ4NworCS5sb25nCTB4MmRkODUxNjAsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4YTgwYTgwYTgKKwkubG9uZwkweDBhODBhODBiLDB4MDAwMDAwMDAsMHgzZmZkMDAwMCwweGQ3ODk0OTkyCisJLmxvbmcJMHgzYmMzNTg4YSwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhhNjU1YzQzOQorCS5sb25nCTB4MmQ3YjczYTgsMHgwMDAwMDAwMCwweDNmZmQwMDAwLDB4ZGNjMmM0YjQKKwkubG9uZwkweDk4ODdkYWNjLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGE0YTljZjFkCisJLmxvbmcJMHg5NjgzMzc1MSwweDAwMDAwMDAwLDB4M2ZmZDAwMDAsMHhlMWVlYmQzZQorCS5sb25nCTB4NmQ2YTZiOWUsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4YTMwNjVlM2YKKwkubG9uZwkweGFlN2NkMGUwLDB4MDAwMDAwMDAsMHgzZmZkMDAwMCwweGU3MGQ3ODVjCisJLmxvbmcJMHgyZjlmNWJkYywweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhhMTZiMzEyZQorCS5sb25nCTB4YThmYzM3N2QsMHgwMDAwMDAwMCwweDNmZmQwMDAwLDB4ZWMxZjM5MmMKKwkubG9uZwkweDUxNzlmMjgzLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDlmZDgwOWZkCisJLmxvbmcJMHg4MDlmZDgwYSwweDAwMDAwMDAwLDB4M2ZmZDAwMDAsMHhmMTI0NDBkMworCS5sb25nCTB4ZTM2MTMwZTYsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4OWU0Y2FkMjMKKwkubG9uZwkweGRkNWYzYTIwLDB4MDAwMDAwMDAsMHgzZmZkMDAwMCwweGY2MWNjZTkyCisJLmxvbmcJMHgzNDY2MDBiYiwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg5Y2M4ZTE2MAorCS5sb25nCTB4YzNmYjE5YjksMHgwMDAwMDAwMCwweDNmZmQwMDAwLDB4ZmIwOTFmZDMKKwkubG9uZwkweDgxNDU2MzBhLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDliNGM2ZjllCisJLmxvbmcJMHhmMDNhM2NhYSwweDAwMDAwMDAwLDB4M2ZmZDAwMDAsMHhmZmU5NzA0MgorCS5sb25nCTB4YmZhNGMyYWQsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4OTlkNzIyZGEKKwkubG9uZwkweGJkZTU4ZjA2LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDgyNWVmY2VkCisJLmxvbmcJMHg0OTM2OTMzMCwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg5ODY4YzgwOQorCS5sb25nCTB4ODY4YzgwOTgsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4ODRjMzdhN2EKKwkubG9uZwkweGI5YTkwNWM5LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDk3MDEyZTAyCisJLmxvbmcJMHg1YzA0YjgwOSwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg4NzIyNGMyZQorCS5sb25nCTB4OGU2NDVmYjcsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4OTVhMDI1NjgKKwkubG9uZwkweDA5NWEwMjU3LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDg5N2I4Y2FjCisJLmxvbmcJMHg5ZjdkZTI5OCwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg5NDQ1ODA5NAorCS5sb25nCTB4NDU4MDk0NDYsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4OGJjZjU1ZGUKKwkubG9uZwkweGM0Y2QwNWZlLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDkyZjExMzg0CisJLmxvbmcJMHgwNDk3ODg5YywweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg4ZTFkYzBmYgorCS5sb25nCTB4ODllMTI1ZTUsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4OTFhMmIzYzQKKwkubG9uZwkweGQ1ZTZmODA5LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDkwNjZlNjhjCisJLmxvbmcJMHg5NTViNmM5YiwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg5MDVhMzg2MworCS5sb25nCTB4M2UwNmM0M2IsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4OTJhYWRlNzQKKwkubG9uZwkweGM3YmU1OWUwLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDhmMTc3OWQ5CisJLmxvbmcJMHhmZGMzYTIxOSwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg5NGU5YmZmNgorCS5sb25nCTB4MTU4NDU2NDMsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4OGRkYTUyMDIKKwkubG9uZwkweDM3Njk0ODA5LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDk3MjNhMWI3CisJLmxvbmcJMHgyMDEzNDIwMywweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg4Y2EyOWMwNAorCS5sb25nCTB4NjUxNGUwMjMsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4OTk1ODk5YzgKKwkubG9uZwkweDkwZWI4OTkwLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDhiNzAzNDRhCisJLmxvbmcJMHgxMzliYzc1YSwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg5Yjg4YmRhYQorCS5sb25nCTB4M2EzZGFlMmYsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4OGE0MmY4NzAKKwkubG9uZwkweDU2NjlkYjQ2LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDlkYjQyMjRmCisJLmxvbmcJMHhmZmUxMTU3YywweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg4OTFhYzczYQorCS5sb25nCTB4ZTk4MTliNTAsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4OWZkYWRjMjYKKwkubG9uZwkweDhiN2ExMmRhLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDg3Zjc4MDg3CisJLmxvbmcJMHhmNzgwODdmOCwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhhMWZjZmYxNworCS5sb25nCTB4Y2U3MzNiZDQsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4ODZkOTA1NDQKKwkubG9uZwkweDdhMzRhY2M2LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGE0MWE5ZThmCisJLmxvbmcJMHg1NDQ2ZmI5ZiwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg4NWJmMzc2MQorCS5sb25nCTB4MmNlZTNjOWIsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4YTYzM2NkN2UKKwkubG9uZwkweDY3NzFjZDhiLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDg0YTlmOWM4CisJLmxvbmcJMHgwODRhOWY5ZCwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhhODQ4OWU2MAorCS5sb25nCTB4MGI0MzVhNWUsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4ODM5OTMwNTIKKwkubG9uZwkweDNmYmUzMzY4LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGFhNTkyMzNjCisJLmxvbmcJMHhjY2E0YmQ0OSwweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHg4MjhjYmZiZQorCS5sb25nCTB4YjlhMDIwYTMsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4YWM2NTZkYWUKKwkubG9uZwkweDZiY2M0OTg1LDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweDgxODQ4ZGE4CisJLmxvbmcJMHhmYWYwZDI3NywweDAwMDAwMDAwLDB4M2ZmZTAwMDAsMHhhZTZkOGVlMworCS5sb25nCTB4NjBiYjI0NjgsMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4ODA4MDgwODAKKwkubG9uZwkweDgwODA4MDgxLDB4MDAwMDAwMDAsMHgzZmZlMDAwMCwweGIwNzE5N2EyCisJLmxvbmcJMHgzYzQ2YzY1NCwweDAwMDAwMDAwLDB4ZjIxMDQ4MDAsMHgyZDdjMDAwMAorCS5sb25nCTB4MDAwMGZmNTQsMHgyMjEwMzIyOCwweDAwMDQyZDUwLDB4ZmY4NDJkNjgKKwkubG9uZwkweDAwMDRmZjg4LDB4MmQ2ODAwMDgsMHhmZjhjMGM4MSwweDAwMDAwMDAwCisJLmxvbmcJMHg2ZDAwMDE4MiwweDBjODEzZmZlLDB4ZjA3ZDZkMGEsMHgwYzgxM2ZmZgorCS5sb25nCTB4ODg0MTZmMDAsMHgwMGUyZTA4MSwweGUwODEwNDgxLDB4MDAwMDNmZmYKKwkubG9uZwkweGQyYWVmZjU0LDB4NDFmYWY3YjIsMHhmMjAxNDA4MCwweDJkN2MzZmZmCisJLmxvbmcJMHgwMDAwZmY4NCwweDJkNmVmZjg4LDB4ZmY5NDAyYWUsMHhmZTAwMDAwMAorCS5sb25nCTB4ZmY5NDAwYWUsMHgwMTAwMDAwMCwweGZmOTQyMjJlLDB4ZmY5NDAyODEKKwkubG9uZwkweDdlMDAwMDAwLDB4ZTA4MWUwODEsMHhlODgxZDFjMSwweGYyMmU0ODAwCisJLmxvbmcJMHhmZjg0MmQ3YywweDNmZmYwMDAwLDB4ZmY5MDQyYWUsMHhmZjk4ZjIyZQorCS5sb25nCTB4NDgyOGZmOTAsMHhmMjI3ZTAwYywweGYyMTA0ODIzLDB4ZjIzYTQ4YTMKKwkubG9uZwkweGY2YzhmMjAwLDB4MDEwMGYyMDAsMHgwOTIzZjIyZSwweDY4ODBmZjg0CisJLmxvbmcJMHhmMjAwMDk4MCwweGYyMDAwODgwLDB4ZjIzYTU0YTMsMHhmNmNjZjIzYQorCS5sb25nCTB4NTUyM2Y2Y2UsMHhmMjNhNTRhMiwweGY2ZDBmMjNhLDB4NTUyMmY2ZDIKKwkubG9uZwkweGYyMDAwY2EzLDB4ZjIwMDBkMjMsMHhmMjNhNTRhMiwweGY2Y2NmMjNhCisJLmxvbmcJMHg1NTIyZjZjZSwweGYyMDAwY2EzLDB4ZDFmYzAwMDAsMHgwMDEwZjIwMAorCS5sb25nCTB4MGQyM2YyMDAsMHgwMGEzZjIwMCwweDA4MjJmMjEwLDB4NDhhMmYyMWYKKwkubG9uZwkweGQwMzBmMjAwLDB4MDQyMmYyMDAsMHg5MDAwZjIyZSwweDQ4MjJmZjg0CisJLmxvbmcJMHg2MGZmMDAwMCwweDE0MmFmMjNjLDB4NTgzODAwMDEsMHhmMmMxMDAwMAorCS5sb25nCTB4MTY3OGYyMDAsMHgwMDgwZjIzYSwweDQ0YThmNjRlLDB4ZjIzYTQ0MjIKKwkubG9uZwkweGY2NDhmMjAwLDB4MDRhMmYyMDAsMHgwMGEwZjIyNywweGUwMGNmMjAwCisJLmxvbmcJMHgwNDAwZjIwMCwweDAwMjNmMjJlLDB4Njg4MGZmODQsMHhmMjAwMDA4MAorCS5sb25nCTB4ZjIwMDA0YTMsMHhmMjNhNTU4MCwweGY2NjBmMjNhLDB4NTUwMGY2NjIKKwkubG9uZwkweGYyMDAwNWEzLDB4ZjIwMDA1MjMsMHhmMjNhNTVhMiwweGY2NWNmMjNhCisJLmxvbmcJMHg1NTIyZjY1ZSwweGYyMDAwY2EzLDB4ZjIwMDAxMjMsMHhmMjNhNTRhMgorCS5sb25nCTB4ZjY1OGYyMmUsMHg0ODIzZmY4NCwweGYyMDAwOGEyLDB4ZjIxZmQwMzAKKwkubG9uZwkweGYyMDAwNDIzLDB4ZjIwMDkwMDAsMHhmMjJlNDgyMiwweGZmODQ2MGZmCisJLmxvbmcJMHgwMDAwMTM5YywweDYwZmYwMDAwLDB4MTIxMDJkN2MsMHhmZmZmZmY5YworCS5sb25nCTB4ZmY1NDQ4ZTcsMHgzZjAwMjYxMCwweDI4MjgwMDA0LDB4MmEyODAwMDgKKwkubG9uZwkweDQyODI0YTg0LDB4NjYzNDI4MDUsMHg0Mjg1NzQyMCwweDQyODZlZGM0CisJLmxvbmcJMHg2MDAwZWRhYywweGQ0ODYyZDQzLDB4ZmY4NDJkNDQsMHhmZjg4MmQ0NQorCS5sb25nCTB4ZmY4YzQ0ODIsMHgyZDQyZmY1NCwweGYyMmU0ODAwLDB4ZmY4NDRjZGYKKwkubG9uZwkweDAwZmM0MWVlLDB4ZmY4NDYwMDAsMHhmZTBjNDI4NiwweGVkYzQ2MDAwCisJLmxvbmcJMHgyNDA2ZWRhYywweDJlMDVlZGFkLDB4NDQ4NjA2ODYsMHgwMDAwMDAyMAorCS5sb25nCTB4ZWNhZjg4ODcsMHgyZDQzZmY4NCwweDJkNDRmZjg4LDB4MmQ0NWZmOGMKKwkubG9uZwkweDQ0ODIyZDQyLDB4ZmY1NGYyMmUsMHg0ODAwZmY4NCwweDRjZGYwMGZjCisJLmxvbmcJMHg0MWVlZmY4NCwweDYwMDBmZGNlLDB4ZjIxMDQ4MDAsMHhmMjAwMDAxOAorCS5sb25nCTB4ZjIzYTQ4MzgsMHhmNWE0ZjI5MiwweDAwMTRmMjAwLDB4OTAwMDEyM2MKKwkubG9uZwkweDAwMDNmMjEwLDB4NDgwMDYwZmYsMHgwMDAwMTJkNiwweGYyMTA0ODAwCisJLmxvbmcJMHgyZDdjMDAwMCwweDAwMDBmZjU0LDB4ZjIwMDAwODAsMHhmMjNhNDQyMgorCS5sb25nCTB4ZjUwOGYyMmUsMHg2ODAwZmY4NCwweDNkNmVmZjg4LDB4ZmY4NjIyMmUKKwkubG9uZwkweGZmODQwYzgxLDB4MDAwMDAwMDAsMHg2ZjAwMDBkYSwweDBjODEzZmZlCisJLmxvbmcJMHg4MDAwNmQwMCwweGZkYTIwYzgxLDB4M2ZmZmMwMDAsMHg2ZTAwZmQ5OAorCS5sb25nCTB4MGM4MTNmZmUsMHhmMDdkNmQwMCwweDAwMWEwYzgxLDB4M2ZmZjg4NDEKKwkubG9uZwkweDZlMDAwMDEwLDB4ZjIwMDA0YTIsMHhmMjNhNDQyMiwweGY0YmM2MDAwCisJLmxvbmcJMHhmZTc2MmQ2ZSwweGZmODhmZjk0LDB4MDJhZWZlMDAsMHgwMDAwZmY5NAorCS5sb25nCTB4MDBhZTAxMDAsMHgwMDAwZmY5NCwweDBjODEzZmZmLDB4ODAwMDZjNDQKKwkubG9uZwkweGYyM2E0NDAwLDB4ZjRmYzJkN2MsMHgzZmZmMDAwMCwweGZmOTA0MmFlCisJLmxvbmcJMHhmZjk4ZjIyZSwweDQ4MjhmZjkwLDB4MjIyZWZmOTQsMHgwMjgxN2UwMAorCS5sb25nCTB4MDAwMGUwODEsMHhlMDgxZTg4MSwweGYyMDAwNGEyLDB4ZjIyN2UwMGMKKwkubG9uZwkweGYyMDAwNDIyLDB4NDFmYWY0ZTIsMHhkMWMxZjIzYSwweDQ0ODBmNDY2CisJLmxvbmcJMHg2MDAwZmQ3NiwweGYyM2E0NDAwLDB4ZjQ1MDJkN2MsMHgzZmZmMDAwMAorCS5sb25nCTB4ZmY5MDQyYWUsMHhmZjk4ZjIyZSwweDQ4MjhmZjkwLDB4MjIyZWZmOTQKKwkubG9uZwkweDAyODE3ZTAwLDB4MDAwMGUwODEsMHhlMDgxZTg4MSwweGYyMDAwNDIyCisJLmxvbmcJMHhmMjI3ZTAwYywweDQxZmFmNGEyLDB4ZDFjMWYyM2EsMHg0NDgwZjQxZQorCS5sb25nCTB4NjAwMGZkMzYsMHgwYzgxMDAwMCwweDAwMDA2ZDEwLDB4ZjIzYTQ0MDAKKwkubG9uZwkweGY0MTRmMjAwLDB4OTAwMDYwZmYsMHgwMDAwMTAxNCwweGYyM2E0NDAwCisJLmxvbmcJMHhmM2ZjZjIwMCwweDkwMDA2MGZmLDB4MDAwMDEwMmUsMHg2MGZmMDAwMAorCS5sb25nCTB4MTA0MjIyMTAsMHgzMjI4MDAwNCwweDAyODE3ZmZmLDB4ZmZmZjBjODEKKwkubG9uZwkweDNmZmY4MDAwLDB4NmM1NmYyMTAsMHg0ODE4ZjIwMCwweDAwODBmMjAwCisJLmxvbmcJMHgwNDlhZjIwMCwweDAwMjJmMjNjLDB4NDRhMjNmODAsMHgwMDAwZjIwMAorCS5sb25nCTB4MDQyMDIyMTAsMHgwMjgxODAwMCwweDAwMDAwMDgxLDB4M2YwMDAwMDAKKwkubG9uZwkweDJmMDEyZjAwLDB4NDI4MGYyMjcsMHhlMDAxNDFkNywweDYxZmZmZmZmCisJLmxvbmcJMHhmZTVhZGZmYywweDAwMDAwMDBjLDB4MjAxZmYyMDAsMHg5MDAwMTIzYworCS5sb25nCTB4MDAwMGYyMWYsMHg0NDIzNjBmZiwweDAwMDAxMTM2LDB4ZjIxMDQ4MTgKKwkubG9uZwkweGYyM2M0NDM4LDB4M2Y4MDAwMDAsMHhmMmQyMDAwMCwweDBmYWM2MGZmCisJLmxvbmcJMHgwMDAwMGY3YywweDYwZmYwMDAwLDB4MGZiYTNmZmQsMHgwMDAwZGU1YgorCS5sb25nCTB4ZDhhOTM3MjgsMHg3MTk1MDAwMCwweDAwMDAzZmZmLDB4MDAwMGI4YWEKKwkubG9uZwkweDNiMjk1YzE3LDB4ZjBiYzAwMDAsMHgwMDAwZjIzYywweDU4MDAwMDAxCisJLmxvbmcJMHhmMjEwNDgzOCwweGYyYzEwMDAwLDB4MTM1MDIyMTAsMHg2ZDAwMDA5MAorCS5sb25nCTB4MmYwMDQyODAsMHg2MWZmZmZmZiwweGZiYTJmMjFmLDB4OTAwMGYyM2EKKwkubG9uZwkweDQ4MjNmZmI4LDB4NjBmZjAwMDAsMHgxMGQ2MjIxMCwweDZkMDAwMDcwCisJLmxvbmcJMHgyZjAwNDI4MCwweDYxZmZmZmZmLDB4ZmQzNGYyMWYsMHg5MDAwZjIzYQorCS5sb25nCTB4NDgyM2ZmOTgsMHg2MGZmMDAwMCwweDEwYzYyMjEwLDB4NmQwMDAwNTAKKwkubG9uZwkweDIyMjgwMDA4LDB4NjYyZTIyMjgsMHgwMDA0MDI4MSwweDdmZmZmZmZmCisJLmxvbmcJMHg2NjIyMzIxMCwweDAyODEwMDAwLDB4N2ZmZjA0ODEsMHgwMDAwM2ZmZgorCS5sb25nCTB4NjdmZjAwMDAsMHgxMmU0ZjIwMCwweDkwMDBmMjAxLDB4NDAwMDYwZmYKKwkubG9uZwkweDAwMDAxMDdjLDB4MmYwMDQyODAsMHg2MWZmZmZmZiwweGZiMmVmMjFmCisJLmxvbmcJMHg5MDAwZjIzYSwweDQ4MjNmZjU0LDB4NjBmZjAwMDAsMHgxMDYyNjBmZgorCS5sb25nCTB4MDAwMDBlZDYsMHgyMjEwNmQwMCwweGZmZjYyZjAwLDB4NDI4MDYxZmYKKwkubG9uZwkweGZmZmZmY2JhLDB4ZjIxZjkwMDAsMHhmMjNhNDgyMywweGZmMmU2MGZmCisJLmxvbmcJMHgwMDAwMTA0YywweDQwNmE5MzRmLDB4MDk3OWEzNzEsMHgzZjczNDQxMworCS5sb25nCTB4NTA5ZjgwMDAsMHhiZmNkMDAwMCwweGMwMjE5ZGMxLDB4ZGE5OTRmZDIKKwkubG9uZwkweDAwMDAwMDAwLDB4NDAwMDAwMDAsMHg5MzVkOGRkZCwweGFhYThhYzE3CisJLmxvbmcJMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4YjE3MjE3ZjcsMHhkMWNmNzlhYworCS5sb25nCTB4MDAwMDAwMDAsMHgzZjU2YzE2ZCwweDZmN2JkMGIyLDB4M2Y4MTExMTIKKwkubG9uZwkweDMwMmM3MTJjLDB4M2ZhNTU1NTUsMHg1NTU1NGNjMSwweDNmYzU1NTU1CisJLmxvbmcJMHg1NTU1NGE1NCwweDNmZTAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgzZmZmMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDNmNzM4MDAwLDB4M2ZmZjAwMDAsMHg4MTY0ZDFmMywweGJjMDMwNzczCisJLmxvbmcJMHgzZmJlZjdjYSwweDNmZmYwMDAwLDB4ODJjZDg2OTgsMHhhYzJiYTFkNworCS5sb25nCTB4M2ZiZGY4YTksMHgzZmZmMDAwMCwweDg0M2EyOGMzLDB4YWNkZTQwNDYKKwkubG9uZwkweDNmYmNkN2M5LDB4M2ZmZjAwMDAsMHg4NWFhYzM2NywweGNjNDg3YjE1CisJLmxvbmcJMHhiZmJkZThkYSwweDNmZmYwMDAwLDB4ODcxZjYxOTYsMHg5ZThkMTAxMAorCS5sb25nCTB4M2ZiZGU4NWMsMHgzZmZmMDAwMCwweDg4OTgwZTgwLDB4OTJkYTg1MjcKKwkubG9uZwkweDNmYmViYmYxLDB4M2ZmZjAwMDAsMHg4YTE0ZDU3NSwweDQ5NmVmZDlhCisJLmxvbmcJMHgzZmJiODBjYSwweDNmZmYwMDAwLDB4OGI5NWMxZTMsMHhlYThiZDZlNworCS5sb25nCTB4YmZiYTgzNzMsMHgzZmZmMDAwMCwweDhkMWFkZjViLDB4N2U1YmE5ZTYKKwkubG9uZwkweGJmYmU5NjcwLDB4M2ZmZjAwMDAsMHg4ZWE0Mzk4YiwweDQ1Y2Q1M2MwCisJLmxvbmcJMHgzZmJkYjcwMCwweDNmZmYwMDAwLDB4OTAzMWRjNDMsMHgxNDY2YjFkYworCS5sb25nCTB4M2ZiZWVlYjAsMHgzZmZmMDAwMCwweDkxYzNkMzczLDB4YWIxMWMzMzYKKwkubG9uZwkweDNmYmJmZDZkLDB4M2ZmZjAwMDAsMHg5MzVhMmIyZiwweDEzZTZlOTJjCisJLmxvbmcJMHhiZmJkYjMxOSwweDNmZmYwMDAwLDB4OTRmNGVmYTgsMHhmZWY3MDk2MQorCS5sb25nCTB4M2ZiZGJhMmIsMHgzZmZmMDAwMCwweDk2OTQyZDM3LDB4MjAxODVhMDAKKwkubG9uZwkweDNmYmU5MWQ1LDB4M2ZmZjAwMDAsMHg5ODM3ZjA1MSwweDhkYjhhOTZmCisJLmxvbmcJMHgzZmJlOGQ1YSwweDNmZmYwMDAwLDB4OTllMDQ1OTMsMHgyMGI3ZmE2NQorCS5sb25nCTB4YmZiY2RlN2IsMHgzZmZmMDAwMCwweDliOGQzOWI5LDB4ZDU0ZTU1MzkKKwkubG9uZwkweGJmYmViYWFmLDB4M2ZmZjAwMDAsMHg5ZDNlZDlhNywweDJjZmZiNzUxCisJLmxvbmcJMHhiZmJkODZkYSwweDNmZmYwMDAwLDB4OWVmNTMyNjAsMHg5MWExMTFhZQorCS5sb25nCTB4YmZiZWJlZGQsMHgzZmZmMDAwMCwweGEwYjA1MTBmLDB4Yjk3MTRmYzIKKwkubG9uZwkweDNmYmNjOTZlLDB4M2ZmZjAwMDAsMHhhMjcwNDMwMywweDBjNDk2ODE5CisJLmxvbmcJMHhiZmJlYzkwYiwweDNmZmYwMDAwLDB4YTQzNTE1YWUsMHgwOWU2ODA5ZQorCS5sb25nCTB4M2ZiYmQxZGIsMHgzZmZmMDAwMCwweGE1ZmVkNmE5LDB4YjE1MTM4ZWEKKwkubG9uZwkweDNmYmNlNWViLDB4M2ZmZjAwMDAsMHhhN2NkOTNiNCwweGU5NjUzNTZhCisJLmxvbmcJMHhiZmJlYzI3NCwweDNmZmYwMDAwLDB4YTlhMTVhYjQsMHhlYTdjMGVmOAorCS5sb25nCTB4M2ZiZWE4M2MsMHgzZmZmMDAwMCwweGFiN2EzOWI1LDB4YTkzZWQzMzcKKwkubG9uZwkweDNmYmVjYjAwLDB4M2ZmZjAwMDAsMHhhZDU4M2VlYSwweDQyYTE0YWM2CisJLmxvbmcJMHgzZmJlOTMwMSwweDNmZmYwMDAwLDB4YWYzYjc4YWQsMHg2OTBhNDM3NQorCS5sb25nCTB4YmZiZDgzNjcsMHgzZmZmMDAwMCwweGIxMjNmNTgxLDB4ZDJhYzI1OTAKKwkubG9uZwkweGJmYmVmMDVmLDB4M2ZmZjAwMDAsMHhiMzExYzQxMiwweGE5MTEyNDg5CisJLmxvbmcJMHgzZmJkZmIzYywweDNmZmYwMDAwLDB4YjUwNGYzMzMsMHhmOWRlNjQ4NAorCS5sb25nCTB4M2ZiZWIyZmIsMHgzZmZmMDAwMCwweGI2ZmQ5MWUzLDB4MjhkMTc3OTEKKwkubG9uZwkweDNmYmFlMmNiLDB4M2ZmZjAwMDAsMHhiOGZiYWY0NywweDYyZmI5ZWU5CisJLmxvbmcJMHgzZmJjZGMzYywweDNmZmYwMDAwLDB4YmFmZjVhYjIsMHgxMzNlNDVmYgorCS5sb25nCTB4M2ZiZWU5YWEsMHgzZmZmMDAwMCwweGJkMDhhMzlmLDB4NTgwYzM2YmYKKwkubG9uZwkweGJmYmVhZWZkLDB4M2ZmZjAwMDAsMHhiZjE3OTliNiwweDdhNzMxMDgzCisJLmxvbmcJMHhiZmJjYmY1MSwweDNmZmYwMDAwLDB4YzEyYzRjY2EsMHg2NjcwOTQ1NgorCS5sb25nCTB4M2ZiZWY4OGEsMHgzZmZmMDAwMCwweGMzNDZjY2RhLDB4MjQ5NzY0MDcKKwkubG9uZwkweDNmYmQ4M2IyLDB4M2ZmZjAwMDAsMHhjNTY3MmExMSwweDU1MDZkYWRkCisJLmxvbmcJMHgzZmJkZjhhYiwweDNmZmYwMDAwLDB4Yzc4ZDc0YzgsMHhhYmI5YjE1ZAorCS5sb25nCTB4YmZiZGZiMTcsMHgzZmZmMDAwMCwweGM5YjliZDg2LDB4NmUyZjI3YTMKKwkubG9uZwkweGJmYmVmZTNjLDB4M2ZmZjAwMDAsMHhjYmVjMTRmZSwweGYyNzI3YzVkCisJLmxvbmcJMHhiZmJiYjZmOCwweDNmZmYwMDAwLDB4Y2UyNDhjMTUsMHgxZjg0ODBlNAorCS5sb25nCTB4YmZiY2VlNTMsMHgzZmZmMDAwMCwweGQwNjMzM2RhLDB4ZWYyYjI1OTUKKwkubG9uZwkweGJmYmRhNGFlLDB4M2ZmZjAwMDAsMHhkMmE4MWQ5MSwweGYxMmFlNDVhCisJLmxvbmcJMHgzZmJjOTEyNCwweDNmZmYwMDAwLDB4ZDRmMzVhYWIsMHhjZmVkZmExZgorCS5sb25nCTB4M2ZiZWIyNDMsMHgzZmZmMDAwMCwweGQ3NDRmY2NhLDB4ZDY5ZDZhZjQKKwkubG9uZwkweDNmYmRlNjlhLDB4M2ZmZjAwMDAsMHhkOTlkMTVjMiwweDc4YWZkN2I2CisJLmxvbmcJMHhiZmI4YmM2MSwweDNmZmYwMDAwLDB4ZGJmYmI3OTcsMHhkYWYyMzc1NQorCS5sb25nCTB4M2ZiZGY2MTAsMHgzZmZmMDAwMCwweGRlNjBmNDgyLDB4NWUwZTkxMjQKKwkubG9uZwkweGJmYmQ4YmUxLDB4M2ZmZjAwMDAsMHhlMGNjZGVlYywweDJhOTRlMTExCisJLmxvbmcJMHgzZmJhY2IxMiwweDNmZmYwMDAwLDB4ZTMzZjg5NzIsMHhiZThhNWE1MQorCS5sb25nCTB4M2ZiYjliZmUsMHgzZmZmMDAwMCwweGU1YjkwNmU3LDB4N2M4MzQ4YTgKKwkubG9uZwkweDNmYmNmMmY0LDB4M2ZmZjAwMDAsMHhlODM5NmE1MCwweDNjNGJkYzY4CisJLmxvbmcJMHgzZmJlZjIyZiwweDNmZmYwMDAwLDB4ZWFjMGM2ZTcsMHhkZDI0MzkyZgorCS5sb25nCTB4YmZiZGJmNGEsMHgzZmZmMDAwMCwweGVkNGYzMDFlLDB4ZDk5NDJiODQKKwkubG9uZwkweDNmYmVjMDFhLDB4M2ZmZjAwMDAsMHhlZmU0Yjk5YiwweGRjZGFmNWNiCisJLmxvbmcJMHgzZmJlOGNhYywweDNmZmYwMDAwLDB4ZjI4MTc3M2MsMHg1OWZmYjEzYQorCS5sb25nCTB4YmZiY2JiM2YsMHgzZmZmMDAwMCwweGY1MjU3ZDE1LDB4MjQ4NmNjMmMKKwkubG9uZwkweDNmYmVmNzNhLDB4M2ZmZjAwMDAsMHhmN2QwZGY3MywweDBhZDEzYmI5CisJLmxvbmcJMHhiZmI4Yjc5NSwweDNmZmYwMDAwLDB4ZmE4M2IyZGIsMHg3MjJhMDMzYQorCS5sb25nCTB4M2ZiZWY4NGIsMHgzZmZmMDAwMCwweGZkM2UwYzBjLDB4ZjQ4NmMxNzUKKwkubG9uZwkweGJmYmVmNTgxLDB4ZjIxMGQwODAsMHgyMjEwMzIyOCwweDAwMDRmMjJlCisJLmxvbmcJMHg2ODAwZmY4NCwweDAyODE3ZmZmLDB4ZmZmZjBjODEsMHgzZmI5ODAwMAorCS5sb25nCTB4NmMwNDYwMDAsMHgwMDg4MGM4MSwweDQwMGQ4MGMwLDB4NmYwNDYwMDAKKwkubG9uZwkweDAwN2NmMjAwLDB4MDA4MGYyM2MsMHg0NGEzNDI4MCwweDAwMDBmMjJlCisJLmxvbmcJMHg2MDgwZmY1NCwweDJmMDI0M2ZhLDB4ZmJiY2YyMmUsMHg0MDgwZmY1NAorCS5sb25nCTB4MjIyZWZmNTQsMHgyNDAxMDI4MSwweDAwMDAwMDNmLDB4ZTk4MWQzYzEKKwkubG9uZwkweGVjODIyMjAyLDB4ZTI4MTk0ODEsMHgwNjgyMDAwMCwweDNmZmZmMjI3CisJLmxvbmcJMHhlMDBjZjIzYywweDQ0YTMzYzgwLDB4MDAwMDJkNTksMHhmZjg0MmQ1OQorCS5sb25nCTB4ZmY4ODJkNTksMHhmZjhjM2Q1OSwweGZmOTBmMjAwLDB4MDQyODNkNTkKKwkubG9uZwkweGZmOTQ0MjZlLDB4ZmY5NjQyYWUsMHhmZjk4ZDM2ZSwweGZmODRmMjNhCisJLmxvbmcJMHg0ODIzZmIyMiwweGQzNmVmZjkwLDB4NjAwMDAxMDAsMHgwYzgxM2ZmZgorCS5sb25nCTB4ODAwMDZlMTIsMHhmMjAwOTAwMCwweGYyM2M0NDIyLDB4M2Y4MDAwMDAKKwkubG9uZwkweDYwZmYwMDAwLDB4MGIxMjIyMmUsMHhmZjg0MGM4MSwweDAwMDAwMDAwCisJLmxvbmcJMHg2ZDA2NjBmZiwweDAwMDAwYWM4LDB4NjBmZjAwMDAsMHgwYTFhZjIwMAorCS5sb25nCTB4OTAwMGYyM2MsMHg0NDAwM2Y4MCwweDAwMDAyMjEwLDB4MDA4MTAwODAKKwkubG9uZwkweDAwMDFmMjAxLDB4NDQyMjYwZmYsMHgwMDAwMGFkYywweGYyMTBkMDgwCisJLmxvbmcJMHgyMjEwMzIyOCwweDAwMDRmMjJlLDB4NjgwMGZmODQsMHgwMjgxN2ZmZgorCS5sb25nCTB4ZmZmZjBjODEsMHgzZmI5ODAwMCwweDZjMDQ2MDAwLDB4ZmY5MDBjODEKKwkubG9uZwkweDQwMGI5YjA3LDB4NmYwNDYwMDAsMHhmZjg0ZjIwMCwweDAwODBmMjNhCisJLmxvbmcJMHg1NGEzZmE2MiwweGYyMmU2MDgwLDB4ZmY1NDJmMDIsMHg0M2ZhZmFjNgorCS5sb25nCTB4ZjIyZTQwODAsMHhmZjU0MjIyZSwweGZmNTQyNDAxLDB4MDI4MTAwMDAKKwkubG9uZwkweDAwM2ZlOTgxLDB4ZDNjMWVjODIsMHgyMjAyZTI4MSwweDk0ODEwNjgyCisJLmxvbmcJMHgwMDAwM2ZmZiwweGYyMjdlMDBjLDB4ZjIwMDA1MDAsMHhmMjNhNTRhMworCS5sb25nCTB4ZmEyYzJkNTksMHhmZjg0ZjIzYSwweDQ5MjNmYTJhLDB4MmQ1OWZmODgKKwkubG9uZwkweDJkNTlmZjhjLDB4ZjIwMDA0MjgsMHgzZDU5ZmY5MCwweGYyMDAwODI4CisJLmxvbmcJMHgzZDU5ZmY5NCwweDQyNmVmZjk2LDB4NDJhZWZmOTgsMHhmMjNhNDgyMworCS5sb25nCTB4ZmExNGQzNmUsMHhmZjg0ZDM2ZSwweGZmOTBmMjAwLDB4MDA4MGYyMDAKKwkubG9uZwkweDA0YTNmMjNhLDB4NTUwMGZhMWUsMHhmMjNhNTU4MCwweGZhMjBmMjAwCisJLmxvbmcJMHgwNTIzZjIwMCwweDA1YTNmMjNhLDB4NTUyMmZhMWEsMHhmMjNhNTVhMgorCS5sb25nCTB4ZmExY2YyMDAsMHgwNTIzZjIwMCwweDA1YTNmMjNhLDB4NTUyMmZhMTYKKwkubG9uZwkweGYyMDAwMWEzLDB4ZjIwMDA1MjMsMHhmMjAwMGMyMiwweGYyMDAwODIyCisJLmxvbmcJMHhmMjFmZDAzMCwweGYyMmU0ODIzLDB4ZmY4NGYyMmUsMHg0ODIyZmY5MAorCS5sb25nCTB4ZjIyZTQ4MjIsMHhmZjg0ZjIwMCwweDkwMDAzZDQyLDB4ZmY4NDI0MWYKKwkubG9uZwkweDJkN2M4MDAwLDB4MDAwMGZmODgsMHg0MmFlZmY4YywweDEyM2MwMDAwCisJLmxvbmcJMHhmMjJlNDgyMywweGZmODQ2MGZmLDB4MDAwMDA5OTYsMHhmMjAwOTAwMAorCS5sb25nCTB4ZjIzYzQ0MDAsMHgzZjgwMDAwMCwweDIyMTAwMDgxLDB4MDA4MDAwMDEKKwkubG9uZwkweGYyMDE0NDIyLDB4NjBmZjAwMDAsMHgwOThlMmYwMSwweGU4MDgyMjAwCisJLmxvbmcJMHgwMjQxMDAwMywweDAyNDAwMDBjLDB4NDg0MDMwMDEsMHgyMjFmNGEwMQorCS5sb25nCTB4NjcxZTBjMDEsMHgwMDBhNmYxMiwweDBjMDEwMDBlLDB4NmYzYzBjMDEKKwkubG9uZwkweDAwMmY2ZjA2LDB4MGMwMTAwM2YsMHg2ZjYyNjBmZiwweDAwMDAwYmFhCisJLmxvbmcJMHg0YTAwNjYwYywweDQxZmIwMTcwLDB4MDAwMDAwZDYsMHg2MDAwMDA4NgorCS5sb25nCTB4MGMwMDAwMDMsMHg2NzBhNDFmYiwweDAxNzAwMDAwLDB4MDBkMDYwNzQKKwkubG9uZwkweDQxZmIwMTcwLDB4MDAwMDAwZDIsMHg2MDZhMDQwMSwweDAwMGI0YTAwCisJLmxvbmcJMHg2NjEwNDFmYiwweDAxNzAwMDAwLDB4MDBjYzBjMDEsMHgwMDAyNmY1NAorCS5sb25nCTB4NjA1YTBjMDAsMHgwMDAzNjcwYSwweDQxZmIwMTcwLDB4MDAwMDAwZjIKKwkubG9uZwkweDYwZTg0MWZiLDB4MDE3MDAwMDAsMHgwMTI0NjBkZSwweDA0MDEwMDMwCisJLmxvbmcJMHg0YTAwNjYxNiwweDQxZmIwMTcwLDB4MDAwMDAxNGUsMHgwYzAxMDAwMQorCS5sb25nCTB4NmYyMjBjMDEsMHgwMDA3NmYyNCwweDYwMWEwYzAwLDB4MDAwMzY3MGEKKwkubG9uZwkweDQxZmIwMTcwLDB4MDAwMDAxZjIsMHg2MGUyNDFmYiwweDAxNzAwMDAwCisJLmxvbmcJMHgwMmE4NjBkOCwweDAwYWUwMDAwLDB4MDIwOGZmNjQsMHhjMmZjMDAwYworCS5sb25nCTB4NDg0MDRhMDAsMHg2NjA4ZjIzMCwweGQwODAxMDAwLDB4NGU3NTQ4NDAKKwkubG9uZwkweDNkNzAxMDAwLDB4ZmY5MDJkNzAsMHgxMDA0ZmY5NCwweDJkNzAxMDA4CisJLmxvbmcJMHhmZjk4MjIwMCwweDQyODA0MWVlLDB4ZmY5MDQyNjgsMHgwMDAyNjFmZgorCS5sb25nCTB4MDAwMDYyYzYsMHhmMjEwZDA4MCwweDRlNzU1MWZjLDB4NDAwMDAwMDAKKwkubG9uZwkweGM5MGZkYWEyLDB4MjE2OGMyMzUsMHg0MDAwMDAwMCwweGM5MGZkYWEyCisJLmxvbmcJMHgyMTY4YzIzNCwweDQwMDAwMDAwLDB4YzkwZmRhYTIsMHgyMTY4YzIzNQorCS5sb25nCTB4M2ZmZDAwMDAsMHg5YTIwOWE4NCwweGZiY2ZmNzk4LDB4NDAwMDAwMDAKKwkubG9uZwkweGFkZjg1NDU4LDB4YTJiYjRhOWEsMHgzZmZmMDAwMCwweGI4YWEzYjI5CisJLmxvbmcJMHg1YzE3ZjBiYywweDNmZmQwMDAwLDB4ZGU1YmQ4YTksMHgzNzI4NzE5NQorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4M2ZmZDAwMDAKKwkubG9uZwkweDlhMjA5YTg0LDB4ZmJjZmY3OTgsMHg0MDAwMDAwMCwweGFkZjg1NDU4CisJLmxvbmcJMHhhMmJiNGE5YSwweDNmZmYwMDAwLDB4YjhhYTNiMjksMHg1YzE3ZjBiYgorCS5sb25nCTB4M2ZmZDAwMDAsMHhkZTViZDhhOSwweDM3Mjg3MTk1LDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgzZmZkMDAwMCwweDlhMjA5YTg0CisJLmxvbmcJMHhmYmNmZjc5OSwweDQwMDAwMDAwLDB4YWRmODU0NTgsMHhhMmJiNGE5YgorCS5sb25nCTB4M2ZmZjAwMDAsMHhiOGFhM2IyOSwweDVjMTdmMGJjLDB4M2ZmZDAwMDAKKwkubG9uZwkweGRlNWJkOGE5LDB4MzcyODcxOTUsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDNmZmUwMDAwLDB4YjE3MjE3ZjcsMHhkMWNmNzlhYworCS5sb25nCTB4NDAwMDAwMDAsMHg5MzVkOGRkZCwweGFhYThhYzE3LDB4M2ZmZjAwMDAKKwkubG9uZwkweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHg0MDAyMDAwMCwweGEwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDQwMDUwMDAwLDB4YzgwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4NDAwYzAwMDAsMHg5YzQwMDAwMCwweDAwMDAwMDAwLDB4NDAxOTAwMDAKKwkubG9uZwkweGJlYmMyMDAwLDB4MDAwMDAwMDAsMHg0MDM0MDAwMCwweDhlMWJjOWJmCisJLmxvbmcJMHgwNDAwMDAwMCwweDQwNjkwMDAwLDB4OWRjNWFkYTgsMHgyYjcwYjU5ZQorCS5sb25nCTB4NDBkMzAwMDAsMHhjMjc4MWY0OSwweGZmY2ZhNmQ1LDB4NDFhODAwMDAKKwkubG9uZwkweDkzYmE0N2M5LDB4ODBlOThjZTAsMHg0MzUxMDAwMCwweGFhN2VlYmZiCisJLmxvbmcJMHg5ZGY5ZGU4ZSwweDQ2YTMwMDAwLDB4ZTMxOWEwYWUsMHhhNjBlOTFjNworCS5sb25nCTB4NGQ0ODAwMDAsMHhjOTc2NzU4NiwweDgxNzUwYzE3LDB4NWE5MjAwMDAKKwkubG9uZwkweDllOGIzYjVkLDB4YzUzZDVkZTUsMHg3NTI1MDAwMCwweGM0NjA1MjAyCisJLmxvbmcJMHg4YTIwOTc5YiwweDNmZmUwMDAwLDB4YjE3MjE3ZjcsMHhkMWNmNzlhYgorCS5sb25nCTB4NDAwMDAwMDAsMHg5MzVkOGRkZCwweGFhYThhYzE2LDB4M2ZmZjAwMDAKKwkubG9uZwkweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHg0MDAyMDAwMCwweGEwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDQwMDUwMDAwLDB4YzgwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4NDAwYzAwMDAsMHg5YzQwMDAwMCwweDAwMDAwMDAwLDB4NDAxOTAwMDAKKwkubG9uZwkweGJlYmMyMDAwLDB4MDAwMDAwMDAsMHg0MDM0MDAwMCwweDhlMWJjOWJmCisJLmxvbmcJMHgwNDAwMDAwMCwweDQwNjkwMDAwLDB4OWRjNWFkYTgsMHgyYjcwYjU5ZAorCS5sb25nCTB4NDBkMzAwMDAsMHhjMjc4MWY0OSwweGZmY2ZhNmQ1LDB4NDFhODAwMDAKKwkubG9uZwkweDkzYmE0N2M5LDB4ODBlOThjZGYsMHg0MzUxMDAwMCwweGFhN2VlYmZiCisJLmxvbmcJMHg5ZGY5ZGU4ZCwweDQ2YTMwMDAwLDB4ZTMxOWEwYWUsMHhhNjBlOTFjNgorCS5sb25nCTB4NGQ0ODAwMDAsMHhjOTc2NzU4NiwweDgxNzUwYzE3LDB4NWE5MjAwMDAKKwkubG9uZwkweDllOGIzYjVkLDB4YzUzZDVkZTQsMHg3NTI1MDAwMCwweGM0NjA1MjAyCisJLmxvbmcJMHg4YTIwOTc5YSwweDNmZmUwMDAwLDB4YjE3MjE3ZjcsMHhkMWNmNzlhYworCS5sb25nCTB4NDAwMDAwMDAsMHg5MzVkOGRkZCwweGFhYThhYzE3LDB4M2ZmZjAwMDAKKwkubG9uZwkweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHg0MDAyMDAwMCwweGEwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDQwMDUwMDAwLDB4YzgwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4NDAwYzAwMDAsMHg5YzQwMDAwMCwweDAwMDAwMDAwLDB4NDAxOTAwMDAKKwkubG9uZwkweGJlYmMyMDAwLDB4MDAwMDAwMDAsMHg0MDM0MDAwMCwweDhlMWJjOWJmCisJLmxvbmcJMHgwNDAwMDAwMCwweDQwNjkwMDAwLDB4OWRjNWFkYTgsMHgyYjcwYjU5ZQorCS5sb25nCTB4NDBkMzAwMDAsMHhjMjc4MWY0OSwweGZmY2ZhNmQ2LDB4NDFhODAwMDAKKwkubG9uZwkweDkzYmE0N2M5LDB4ODBlOThjZTAsMHg0MzUxMDAwMCwweGFhN2VlYmZiCisJLmxvbmcJMHg5ZGY5ZGU4ZSwweDQ2YTMwMDAwLDB4ZTMxOWEwYWUsMHhhNjBlOTFjNworCS5sb25nCTB4NGQ0ODAwMDAsMHhjOTc2NzU4NiwweDgxNzUwYzE4LDB4NWE5MjAwMDAKKwkubG9uZwkweDllOGIzYjVkLDB4YzUzZDVkZTUsMHg3NTI1MDAwMCwweGM0NjA1MjAyCisJLmxvbmcJMHg4YTIwOTc5YiwweDJmMDAzMjI5LDB4MDAwMDViZWUsMHhmZjU0MDI4MQorCS5sb25nCTB4MDAwMDdmZmYsMHgzMDI4MDAwMCwweDAyNDA3ZmZmLDB4MGM0MDNmZmYKKwkubG9uZwkweDZkMDAwMGMwLDB4MGM0MDQwMGMsMHg2ZTAwMDBhNCwweGYyMjg0ODAzCisJLmxvbmcJMHgwMDAwZjIwMCwweDYwMDBmMjNjLDB4ODgwMDAwMDAsMHgwMDAwNGEyOQorCS5sb25nCTB4MDAwNDZiNWUsMHgyZjAwM2Q2OSwweDAwMDBmZjg0LDB4MmQ2OTAwMDQKKwkubG9uZwkweGZmODgyZDY5LDB4MDAwOGZmOGMsMHg0MWVlZmY4NCwweDYxZmYwMDAwCisJLmxvbmcJMHg2MGJhNDQ4MCwweGQwOWZmMjJlLDB4ZDA4MGZmODQsMHgwYzQwYzAwMQorCS5sb25nCTB4NmMzNmYyMWYsMHg5MDAwMjIzYywweDgwMDAwMDAwLDB4MDQ4MGZmZmYKKwkubG9uZwkweGMwMDE0NDgwLDB4MGMwMDAwMjAsMHg2YzBhZTBhOSwweDQyYTcyZjAxCisJLmxvbmcJMHg0MmE3NjAyOCwweDA0MDAwMDIwLDB4ZTBhOTJmMDEsMHg0MmE3NDJhNworCS5sb25nCTB4NjAxYWYyMjksMHhkMDgwMDAwMCwweGYyMWY5MDAwLDB4MDY0MDNmZmYKKwkubG9uZwkweDQ4NDA0MmE3LDB4MmYzYzgwMDAsMHgwMDAwMmYwMCwweGYyMDBiMDAwCisJLmxvbmcJMHgxMjNjMDAwMCwweGYyMWY0ODIzLDB4NjBmZjAwMDAsMHgwNGNlMjAxZgorCS5sb25nCTB4YzE0OTRhMjksMHgwMDAwNmJmZiwweDAwMDAwMzhjLDB4NjBmZjAwMDAKKwkubG9uZwkweDAzYzQ0YTI5LDB4MDAwNDZhMTYsMHgyMDFmZjIwMCwweDkwMDAxMjNjCisJLmxvbmcJMHgwMDAzZjIyOSwweDQ4MDAwMDAwLDB4NjBmZjAwMDAsMHgwNDllMjAxZgorCS5sb25nCTB4MjA0OTYwZmYsMHgwMDAwMDJlMiwweDAwMDEwMDAwLDB4ODAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHg0MjJlZmY2NSwweDJmMDA0MjJlCisJLmxvbmcJMHhmZjVjNjAwYywweDQyMmVmZjY1LDB4MmYwMDFkN2MsMHgwMDAxZmY1YworCS5sb25nCTB4NDhlNzNmMDAsMHgzNjI4MDAwMCwweDNkNDNmZjU4LDB4MDI4MzAwMDAKKwkubG9uZwkweDdmZmYyODI4LDB4MDAwNDJhMjgsMHgwMDA4NGE4MywweDY2M2MyNjNjCisJLmxvbmcJMHgwMDAwM2ZmZSwweDRhODQ2NjE2LDB4MjgwNTQyODUsMHgwNDgzMDAwMAorCS5sb25nCTB4MDAyMDQyODYsMHhlZGM0NjAwMCwweGVkYWM5Njg2LDB4NjAyMjQyODYKKwkubG9uZwkweGVkYzQ2MDAwLDB4OTY4NmVkYWMsMHgyZTA1ZWRhZCwweDQ0ODYwNjg2CisJLmxvbmcJMHgwMDAwMDAyMCwweGVjYWY4ODg3LDB4NjAwNjA2ODMsMHgwMDAwM2ZmZQorCS5sb25nCTB4MzAyOTAwMDAsMHgzZDQwZmY1YSwweDMyMmVmZjU4LDB4YjE4MTAyODEKKwkubG9uZwkweDAwMDA4MDAwLDB4M2Q0MWZmNWUsMHgwMjgwMDAwMCwweDdmZmYyMjI5CisJLmxvbmcJMHgwMDA0MjQyOSwweDAwMDg0YTgwLDB4NjYzYzIwM2MsMHgwMDAwM2ZmZQorCS5sb25nCTB4NGE4MTY2MTYsMHgyMjAyNDI4MiwweDA0ODAwMDAwLDB4MDAyMDQyODYKKwkubG9uZwkweGVkYzE2MDAwLDB4ZWRhOTkwODYsMHg2MDIyNDI4NiwweGVkYzE2MDAwCisJLmxvbmcJMHg5MDg2ZWRhOSwweDJlMDJlZGFhLDB4NDQ4NjA2ODYsMHgwMDAwMDAyMAorCS5sb25nCTB4ZWNhZjgyODcsMHg2MDA2MDY4MCwweDAwMDAzZmZlLDB4MmQ0M2ZmNTQKKwkubG9uZwkweDJmMDA5MDgzLDB4NDI4NjQyODMsMHgyMjdjMDAwMCwweDAwMDA0YTgwCisJLmxvbmcJMHg2YzA2MjAxZiwweDYwMDAwMDZhLDB4NTg4ZjRhODYsMHg2ZTBlYjI4NAorCS5sb25nCTB4NjYwOGI0ODUsMHg2NjA0NjAwMCwweDAxMzY2NTA4LDB4OTQ4NTkzODQKKwkubG9uZwkweDQyODY1MjgzLDB4NGE4MDY3MGUsMHhkNjgzZDQ4MiwweGUzOTE1NWM2CisJLmxvbmcJMHg1Mjg5NTM4MCwweDYwZDQyMDJlLDB4ZmY1NDRhODEsMHg2NjE2MjIwMgorCS5sb25nCTB4NDI4MjA0ODAsMHgwMDAwMDAyMCwweDQyODZlZGMxLDB4NjAwMGVkYTkKKwkubG9uZwkweDkwODY2MDFjLDB4NDI4NmVkYzEsMHg2MDAwNmIxNCwweDkwODZlZGE5CisJLmxvbmcJMHgyZTAyZWRhYSwweDQ0ODYwNjg2LDB4MDAwMDAwMjAsMHhlY2FmODI4NworCS5sb25nCTB4MGM4MDAwMDAsMHg0MWZlNmMyYSwweDNkNDBmZjkwLDB4MmQ0MWZmOTQKKwkubG9uZwkweDJkNDJmZjk4LDB4MmMyZWZmNTQsMHgzZDQ2ZmY4NCwweDJkNDRmZjg4CisJLmxvbmcJMHgyZDQ1ZmY4YywweGYyMmU0ODAwLDB4ZmY5MDFkN2MsMHgwMDAxZmY1ZAorCS5sb25nCTB4NjAzNjJkNDEsMHhmZjk0MmQ0MiwweGZmOTgwNDgwLDB4MDAwMDNmZmUKKwkubG9uZwkweDNkNDBmZjkwLDB4MmMyZWZmNTQsMHgwNDg2MDAwMCwweDNmZmUyZDQ2CisJLmxvbmcJMHhmZjU0ZjIyZSwweDQ4MDBmZjkwLDB4M2Q0NmZmODQsMHgyZDQ0ZmY4OAorCS5sb25nCTB4MmQ0NWZmOGMsMHg0MjJlZmY1ZCwweDRhMmVmZjVjLDB4NjcyMjJjMmUKKwkubG9uZwkweGZmNTQ1Mzg2LDB4YjA4NjZkMTgsMHg2ZTBlYjI4NCwweDY2MDhiNDg1CisJLmxvbmcJMHg2NjA0NjAwMCwweDAwN2E2NTA4LDB4ZjIyZTQ4MjgsMHhmZjg0NTI4MworCS5sb25nCTB4M2MyZWZmNWEsMHg2YzA0ZjIwMCwweDAwMWE0Mjg2LDB4M2MyZWZmNWUKKwkubG9uZwkweDdlMDhlZWFlLDB4MDI4MzAwMDAsMHgwMDdmODY4NiwweDFkNDNmZjY1CisJLmxvbmcJMHg0Y2RmMDBmYywweDIwMWZmMjAwLDB4OTAwMDRhMmUsMHhmZjVkNjcxMAorCS5sb25nCTB4MTIzYzAwMDAsMHhmMjNhNDgyMywweGZkYzA2MGZmLDB4MDAwMDAyNGMKKwkubG9uZwkweDEyM2MwMDAzLDB4ZjIwMDAwMDAsMHg2MGZmMDAwMCwweDAyM2U1MjgzCisJLmxvbmcJMHgwYzgwMDAwMCwweDAwMDg2YzA0LDB4ZTFhYjYwMDIsMHg0MjgzZjIzYworCS5sb25nCTB4NDQwMDAwMDAsMHgwMDAwNDIyZSwweGZmNWQ2MDAwLDB4ZmY5NDJjMDMKKwkubG9uZwkweDAyODYwMDAwLDB4MDAwMTRhODYsMHg2NzAwZmY4NiwweDUyODMzYzJlCisJLmxvbmcJMHhmZjVhMGE4NiwweDAwMDA4MDAwLDB4M2Q0NmZmNWEsMHg2MDAwZmY3MgorCS5sb25nCTB4N2ZmZjAwMDAsMHhmZmZmZmZmZiwweGZmZmZmZmZmLDB4NGEyODAwMDAKKwkubG9uZwkweDZiMTJmMjNjLDB4NDQwMDdmODAsMHgwMDAwMDBhZSwweDAyMDAwNDEwCisJLmxvbmcJMHhmZjY0NGU3NSwweGYyM2M0NDAwLDB4ZmY4MDAwMDAsMHgwMGFlMGEwMAorCS5sb25nCTB4MDQxMGZmNjQsMHg0ZTc1MDBhZSwweDAxMDAyMDgwLDB4ZmY2NGYyM2EKKwkubG9uZwkweGQwODBmZmJlLDB4NGU3NTAwYWUsMHgwMDAwMDgwMCwweGZmNjQ2MDA4CisJLmxvbmcJMHgwMGFlMDAwMCwweDBhMjhmZjY0LDB4MjI0ODIyMDAsMHgwMjAxMDBjMAorCS5sb25nCTB4NjYwZTRhMjgsMHgwMDAwNmExOCwweDA4ZWUwMDAzLDB4ZmY2NDYwMTAKKwkubG9uZwkweDJmMDk0YTI4LDB4MDAwMDViYzEsMHg2MWZmMDAwMCwweDAxOTYyMjVmCisJLmxvbmcJMHhmMjEwZDA4MCwweDEwMmVmZjYyLDB4MDIwMDAwMGEsMHg2NjAyNGU3NQorCS5sb25nCTB4M2Q2OTAwMDAsMHhmZjg0MmQ2OSwweDAwMDRmZjg4LDB4MmQ2OTAwMDgKKwkubG9uZwkweGZmOGM0MWVlLDB4ZmY4NDYxZmYsMHgwMDAwNWNkMCwweDA2ODAwMDAwCisJLmxvbmcJMHg2MDAwMDI2ZSwweDgwMDBmZjg0LDB4ODE2ZWZmODQsMHhmMjJlZDA0MAorCS5sb25nCTB4ZmY4NDRlNzUsMHgwMGFlMDAwMCwweDBhMjhmZjY0LDB4NGExMDViYzEKKwkubG9uZwkweDYxZmYwMDAwLDB4MDEzZWYyMTAsMHhkMDgwZjIzYywweDQ0ODAwMDAwCisJLmxvbmcJMHgwMDAwNGU3NSwweDAwYWUwMDAwLDB4MGEyOGZmNjQsMHg1MWMxNjFmZgorCS5sb25nCTB4MDAwMDAxMjAsMHhmMjEwZDA4MCwweGYyM2M0NDgwLDB4MDAwMDAwMDAKKwkubG9uZwkweDRlNzUwMGFlLDB4MDAwMDEwNDgsMHhmZjY0MTIwMCwweDAyMDEwMGMwCisJLmxvbmcJMHg2NzVjNGEyOCwweDAwMDQ2YjI0LDB4M2Q2ODAwMDAsMHhmZjg0MmQ2OAorCS5sb25nCTB4MDAwNGZmODgsMHgyZDY4MDAwOCwweGZmOGM0MWVlLDB4ZmY4NDQ4ZTcKKwkubG9uZwkweGMwODA2MWZmLDB4MDAwMDVjNDQsMHg0Y2RmMDEwMywweDBjMDEwMDQwCisJLmxvbmcJMHg2NjBlNGFhOCwweDAwMDg2NjE0LDB4NGEyODAwMDcsMHg2NjBlNjAxZQorCS5sb25nCTB4MjIyODAwMDgsMHgwMjgxMDAwMCwweDA3ZmY2NzEyLDB4MDBhZTAwMDAKKwkubG9uZwkweDAyMDBmZjY0LDB4NjAwODAwYWUsMHgwMDAwMTI0OCwweGZmNjQ0YTI4CisJLmxvbmcJMHgwMDAwNWJjMSwweDYxZmYwMDAwLDB4NWYyNjFkNDAsMHhmZjY0ZjIxMAorCS5sb25nCTB4ZDA4MGYyM2MsMHg0NDgwMDAwMCwweDAwMDA0ZTc1LDB4MDBhZTAwMDAKKwkubG9uZwkweDEyNDhmZjY0LDB4NTFjMTYxZmYsMHgwMDAwNWYwNCwweDFkNDBmZjY0CisJLmxvbmcJMHhmMjEwZDA4MCwweGYyM2M0NDgwLDB4MDAwMDAwMDAsMHg0ZTc1ZjMyNworCS5sb25nCTB4NGEyZjAwMDIsMHg2YjJlZGZmYywweDAwMDAwMDBjLDB4ZjI5NDAwMGUKKwkubG9uZwkweGYyODEwMDE0LDB4MDA2ZTAyMDgsMHhmZjY2NGU3NSwweDAwYWUwODAwCisJLmxvbmcJMHgwMjA4ZmY2NCwweDRlNzUxZDdjLDB4MDAwNGZmNjQsMHgwMDZlMDIwOAorCS5sb25nCTB4ZmY2NjRlNzUsMHgwMDZlMDIwOCwweGZmNjY2MWZmLDB4MDAwMDBiYWUKKwkubG9uZwkweGRmZmMwMDAwLDB4MDAwYzRlNzUsMHhmMzI3NGEyZiwweDAwMDI2YmVhCisJLmxvbmcJMHhkZmZjMDAwMCwweDAwMGNmMjAwLDB4YTgwMDgxYWUsMHhmZjY0NGU3NQorCS5sb25nCTB4MDBhZTAwMDAsMHgwYTI4ZmY2NCwweDAyNDEwMDEwLDB4ZTgwODAyMDAKKwkubG9uZwkweDAwMGY4MDAxLDB4MjIwMGUzMDksMHgxZDdiMDAwYSwweGZmNjQ0MWZiCisJLmxvbmcJMHgxNjIwNGU3NSwweDA0MDQwNDAwLDB4MDQwNDA0MDAsMHgwNDA0MDQwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwYzBjMDgwYywweDBjMGMwODBjLDB4MGMwYzA4MGMKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDAwCisJLmxvbmcJMHgzZjgxMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4M2Y4MTAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDNmODEwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgzZjgxMDAwMCwweDAwMDAwMTAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4M2MwMTAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDNjMDEwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgzYzAxMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4M2MwMTAwMDAsMHgwMDAwMDAwMCwweDAwMDAwODAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMSwweDAwMDAwMDAwCisJLmxvbmcJMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4YmY4MTAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweGJmODEwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHhiZjgxMDAwMCwweDAwMDAwMTAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4YmY4MTAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweGJjMDEwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHhiYzAxMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4YmMwMTAwMDAsMHgwMDAwMDAwMCwweDAwMDAwODAwLDB4MDAwMDAwMDAKKwkubG9uZwkweGJjMDEwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHg0YTI4MDAwMCwweDZiMTBmMjNjLDB4NDQwMDAwMDAsMHgwMDAwMWQ3YworCS5sb25nCTB4MDAwNGZmNjQsMHg0ZTc1ZjIzYywweDQ0MDA4MDAwLDB4MDAwMDFkN2MKKwkubG9uZwkweDAwMGNmZjY0LDB4NGU3NTRhMjksMHgwMDAwNmJlYSwweDYwZDg0YTI4CisJLmxvbmcJMHgwMDAwNmIxMCwweGYyM2M0NDAwLDB4N2Y4MDAwMDAsMHgxZDdjMDAwMgorCS5sb25nCTB4ZmY2NDRlNzUsMHhmMjNjNDQwMCwweGZmODAwMDAwLDB4MWQ3YzAwMGEKKwkubG9uZwkweGZmNjQ0ZTc1LDB4NGEyOTAwMDAsMHg2YmVhNjBkOCwweDRhMjgwMDAwCisJLmxvbmcJMHg2YmE0NjBkMCwweDRhMjgwMDAwLDB4NmIwMGZiYmMsMHg2MGM2NGEyOAorCS5sb25nCTB4MDAwMDZiMTYsMHg2MGJlNGEyOCwweDAwMDA2YjBlLDB4ZjIzYzQ0MDAKKwkubG9uZwkweDNmODAwMDAwLDB4NDIyZWZmNjQsMHg0ZTc1ZjIzYywweDQ0MDBiZjgwCisJLmxvbmcJMHgwMDAwMWQ3YywweDAwMDhmZjY0LDB4NGU3NTNmZmYsMHgwMDAwYzkwZgorCS5sb25nCTB4ZGFhMjIxNjgsMHhjMjM1YmZmZiwweDAwMDBjOTBmLDB4ZGFhMjIxNjgKKwkubG9uZwkweGMyMzU0YTI4LDB4MDAwMDZiMGUsMHhmMjAwOTAwMCwweGYyM2E0ODAwCisJLmxvbmcJMHhmZmRhNjAwMCwweGZjZjBmMjAwLDB4OTAwMGYyM2EsMHg0ODAwZmZkOAorCS5sb25nCTB4NjAwMGZjZWEsMHhmMjNjNDQ4MCwweDNmODAwMDAwLDB4NGEyODAwMDAKKwkubG9uZwkweDZhMTBmMjNjLDB4NDQwMDgwMDAsMHgwMDAwMWQ3YywweDAwMGNmZjY0CisJLmxvbmcJMHg2MDQwZjIzYywweDQ0MDAwMDAwLDB4MDAwMDFkN2MsMHgwMDA0ZmY2NAorCS5sb25nCTB4NjAzMGYyM2EsMHg0ODgwZmFlYSwweDYxZmYwMDAwLDB4MDAyODYwMDAKKwkubG9uZwkweGZiMTZmMjI4LDB4NDg4MDAwMDAsMHg2MWZmMDAwMCwweDAwMTg2MDAwCisJLmxvbmcJMHgwMzBlZjIyOCwweDQ4ODAwMDAwLDB4NjFmZjAwMDAsMHgwMDA4NjAwMAorCS5sb25nCTB4MDJlZTEwMmUsMHhmZjQzMDI0MCwweDAwMDczMDNiLDB4MDIwNjRlZmIKKwkubG9uZwkweDAwMDIwMDEwLDB4MDAxODAwMjAsMHgwMDI2MDAyYywweDAwMzIwMDM4CisJLmxvbmcJMHgwMDNlZjIyZSwweGYwNDBmZmRjLDB4NGU3NWYyMmUsMHhmMDQwZmZlOAorCS5sb25nCTB4NGU3NWYyMDAsMHgwNTAwNGU3NSwweGYyMDAwNTgwLDB4NGU3NWYyMDAKKwkubG9uZwkweDA2MDA0ZTc1LDB4ZjIwMDA2ODAsMHg0ZTc1ZjIwMCwweDA3MDA0ZTc1CisJLmxvbmcJMHhmMjAwMDc4MCwweDRlNzUxMjJlLDB4ZmY0ZjY3ZmYsMHhmZmZmZjdkYworCS5sb25nCTB4MGMwMTAwMDEsMHg2NzAwMDA5NiwweDBjMDEwMDAyLDB4NjdmZmZmZmYKKwkubG9uZwkweGZhODgwYzAxLDB4MDAwNDY3ZmYsMHhmZmZmZjdjMCwweDBjMDEwMDA1CisJLmxvbmcJMHg2N2ZmMDAwMCwweDAyNDA2MGZmLDB4MDAwMDAyNGEsMHgxMjJlZmY0ZgorCS5sb25nCTB4NjdmZmZmZmYsMHhmYTY0MGMwMSwweDAwMDE2N2ZmLDB4ZmZmZmZhNWEKKwkubG9uZwkweDBjMDEwMDAyLDB4NjdmZmZmZmYsMHhmYTUwMGMwMSwweDAwMDQ2N2ZmCisJLmxvbmcJMHhmZmZmZmE0NiwweDBjMDEwMDAzLDB4NjdmZjAwMDAsMHgwMjE4NjBmZgorCS5sb25nCTB4MDAwMDAyMDIsMHgxMjJlZmY0ZiwweDY3ZmYwMDAwLDB4MDA0ZTBjMDEKKwkubG9uZwkweDAwMDE2N2ZmLDB4MDAwMDAwMjgsMHgwYzAxMDAwMiwweDY3ZmZmZmZmCisJLmxvbmcJMHhmYTE4MGMwMSwweDAwMDQ2N2ZmLDB4MDAwMDAwMzAsMHgwYzAxMDAwMworCS5sb25nCTB4NjdmZjAwMDAsMHgwMWUwNjBmZiwweDAwMDAwMWNhLDB4MTIyODAwMDAKKwkubG9uZwkweDEwMjkwMDAwLDB4YjEwMTAyMDEsMHgwMDgwMWQ0MSwweGZmNjU0YTAwCisJLmxvbmcJMHg2YTAwZmRjNCwweDYwMDBmZGQwLDB4NDIyZWZmNjUsMHgyZjAwMTIyOAorCS5sb25nCTB4MDAwMDEwMjksMHgwMDAwYjEwMSwweDAyMDEwMDgwLDB4MWQ0MWZmNjUKKwkubG9uZwkweDBjMmUwMDA0LDB4ZmY0ZjY2MGMsMHg0MWU5MDAwMCwweDIwMWY2MGZmCisJLmxvbmcJMHhmZmZmZjljNiwweGYyMWY5MDAwLDB4ZjIyOTQ4MDAsMHgwMDAwNGEyOQorCS5sb25nCTB4MDAwMDZiMDIsMHg0ZTc1MWQ3YywweDAwMDhmZjY0LDB4NGU3NTEyMmUKKwkubG9uZwkweGZmNGY2N2ZmLDB4ZmZmZmY2ZTAsMHgwYzAxMDAwMSwweDY3MDBmZjhlCisJLmxvbmcJMHgwYzAxMDAwMiwweDY3ZmZmZmZmLDB4Zjk4MDBjMDEsMHgwMDA0NjdmZgorCS5sb25nCTB4ZmZmZmY2YzQsMHgwYzAxMDAwMywweDY3ZmYwMDAwLDB4MDE0ODYwZmYKKwkubG9uZwkweDAwMDAwMTMyLDB4MTIyZWZmNGYsMHg2N2ZmZmZmZiwweGY5NWMwYzAxCisJLmxvbmcJMHgwMDAxNjdmZiwweGZmZmZmOTUyLDB4MGMwMTAwMDIsMHg2N2ZmZmZmZgorCS5sb25nCTB4Zjk0ODBjMDEsMHgwMDA0NjdmZiwweGZmZmZmOTNlLDB4MGMwMTAwMDMKKwkubG9uZwkweDY3ZmYwMDAwLDB4MDExMDYwZmYsMHgwMDAwMDBmYSwweDEyMmVmZjRmCisJLmxvbmcJMHg2NzAwZmY0NiwweDBjMDEwMDAxLDB4NjcwMGZmMjIsMHgwYzAxMDAwMgorCS5sb25nCTB4NjdmZmZmZmYsMHhmOTE0MGMwMSwweDAwMDQ2N2ZmLDB4ZmZmZmZmMmMKKwkubG9uZwkweDBjMDEwMDAzLDB4NjdmZjAwMDAsMHgwMGRjNjBmZiwweDAwMDAwMGM2CisJLmxvbmcJMHgxMjJlZmY0ZiwweDY3ZmZmZmZmLDB4ZjUxZTBjMDEsMHgwMDAxNjdmZgorCS5sb25nCTB4ZmZmZmZjZTYsMHgwYzAxMDAwMiwweDY3ZmZmZmZmLDB4ZmQwYTBjMDEKKwkubG9uZwkweDAwMDQ2N2ZmLDB4ZmZmZmY1MDAsMHgwYzAxMDAwMywweDY3ZmYwMDAwCisJLmxvbmcJMHgwMGE0NjBmZiwweDAwMDAwMDhlLDB4MTIyZWZmNGYsMHg2N2ZmZmZmZgorCS5sb25nCTB4ZjRlNjBjMDEsMHgwMDAxNjdmZiwweGZmZmZmY2FlLDB4MGMwMTAwMDIKKwkubG9uZwkweDY3ZmZmZmZmLDB4ZmNkMjBjMDEsMHgwMDA0NjdmZiwweGZmZmZmNGM4CisJLmxvbmcJMHgwYzAxMDAwMywweDY3ZmYwMDAwLDB4MDA2YzYwZmYsMHgwMDAwMDA1NgorCS5sb25nCTB4MTIyZWZmNGYsMHg2N2ZmZmZmZiwweGY4ODAwYzAxLDB4MDAwMzY3ZmYKKwkubG9uZwkweDAwMDAwMDUyLDB4MGMwMTAwMDUsMHg2N2ZmMDAwMCwweDAwMzg2MGZmCisJLmxvbmcJMHhmZmZmZjg2NiwweDEyMmVmZjRmLDB4MGMwMTAwMDMsMHg2NzM0MGMwMQorCS5sb25nCTB4MDAwNTY3MWUsMHg2MDU4MTIyZSwweGZmNGYwYzAxLDB4MDAwMzY3MDgKKwkubG9uZwkweDBjMDEwMDA1LDB4NjcwYzYwMzYsMHgwMGFlMDEwMCwweDQwODBmZjY0CisJLmxvbmcJMHg2MDEwZjIyOSwweDQ4MDAwMDAwLDB4ZjIwMGE4MDAsMHg4MWFlZmY2NAorCS5sb25nCTB4NGU3NWYyMjksMHg0ODAwMDAwMCwweDRhMjkwMDAwLDB4NmIwODFkN2MKKwkubG9uZwkweDAwMDFmZjY0LDB4NGU3NTFkN2MsMHgwMDA5ZmY2NCwweDRlNzVmMjI4CisJLmxvbmcJMHg0ODAwMDAwMCwweGYyMDBhODAwLDB4ODFhZWZmNjQsMHg0ZTc1ZjIyOAorCS5sb25nCTB4NDgwMDAwMDAsMHg0YTI4MDAwMCwweDZiZGMxZDdjLDB4MDAwMWZmNjQKKwkubG9uZwkweDRlNzUxZDdjLDB4MDAwOWZmNjQsMHg0ZTc1MTIyZSwweGZmNGU2N2ZmCisJLmxvbmcJMHhmZmZmZDkzNiwweDBjMDEwMDAxLDB4NjdmZmZmZmYsMHhmYmE2MGMwMQorCS5sb25nCTB4MDAwMjY3ZmYsMHhmZmZmZmJjYSwweDBjMDEwMDA0LDB4NjdmZmZmZmYKKwkubG9uZwkweGQ5ZjYwYzAxLDB4MDAwMzY3ZmYsMHhmZmZmZmZiNiwweDYwZmZmZmZmCisJLmxvbmcJMHhmZmEwMTIyZSwweGZmNGU2N2ZmLDB4ZmZmZmU2MjAsMHgwYzAxMDAwMQorCS5sb25nCTB4NjdmZmZmZmYsMHhmYjZlMGMwMSwweDAwMDI2N2ZmLDB4ZmZmZmZiYzgKKwkubG9uZwkweDBjMDEwMDA0LDB4NjdmZmZmZmYsMHhlNzU2MGMwMSwweDAwMDM2N2ZmCisJLmxvbmcJMHhmZmZmZmY3ZSwweDYwZmZmZmZmLDB4ZmY2ODEyMmUsMHhmZjRlNjdmZgorCS5sb25nCTB4ZmZmZmQ0ZDIsMHgwYzAxMDAwMSwweDY3ZmZmZmZmLDB4ZmIzNjBjMDEKKwkubG9uZwkweDAwMDI2N2ZmLDB4ZmZmZmZiOWEsMHgwYzAxMDAwNCwweDY3ZmZmZmZmCisJLmxvbmcJMHhkNzZhMGMwMSwweDAwMDM2N2ZmLDB4ZmZmZmZmNDYsMHg2MGZmZmZmZgorCS5sb25nCTB4ZmYzMDEyMmUsMHhmZjRlNjdmZiwweGZmZmZkOTcyLDB4MGMwMTAwMDEKKwkubG9uZwkweDY3ZmZmZmZmLDB4ZmFmZTBjMDEsMHgwMDAyNjdmZiwweGZmZmZmYjZhCisJLmxvbmcJMHgwYzAxMDAwNCwweDY3ZmZmZmZmLDB4ZGFiYzBjMDEsMHgwMDAzNjdmZgorCS5sb25nCTB4ZmZmZmZmMGUsMHg2MGZmZmZmZiwweGZlZjgxMjJlLDB4ZmY0ZTY3ZmYKKwkubG9uZwkweGZmZmZjYTZhLDB4MGMwMTAwMDEsMHg2N2ZmZmZmZiwweGZhYzYwYzAxCisJLmxvbmcJMHgwMDAyNjdmZiwweGZmZmZmYjZlLDB4MGMwMTAwMDQsMHg2N2ZmZmZmZgorCS5sb25nCTB4Y2M4YTBjMDEsMHgwMDAzNjdmZiwweGZmZmZmZWQ2LDB4NjBmZmZmZmYKKwkubG9uZwkweGZlYzAxMjJlLDB4ZmY0ZTY3ZmYsMHhmZmZmY2M3NiwweDBjMDEwMDAxCisJLmxvbmcJMHg2N2ZmZmZmZiwweGZhOGUwYzAxLDB4MDAwMjY3ZmYsMHhmZmZmZjZhYQorCS5sb25nCTB4MGMwMTAwMDQsMHg2N2ZmZmZmZiwweGNkMDYwYzAxLDB4MDAwMzY3ZmYKKwkubG9uZwkweGZmZmZmZTllLDB4NjBmZmZmZmYsMHhmZTg4MTIyZSwweGZmNGU2N2ZmCisJLmxvbmcJMHhmZmZmZTY2MiwweDBjMDEwMDAxLDB4NjdmZmZmZmYsMHhmYTU2MGMwMQorCS5sb25nCTB4MDAwMjY3ZmYsMHhmZmZmZjY3MiwweDBjMDEwMDA0LDB4NjdmZmZmZmYKKwkubG9uZwkweGU2YzYwYzAxLDB4MDAwMzY3ZmYsMHhmZmZmZmU2NiwweDYwZmZmZmZmCisJLmxvbmcJMHhmZTUwMTIyZSwweGZmNGU2N2ZmLDB4ZmZmZmIzNzIsMHgwYzAxMDAwMQorCS5sb25nCTB4NjdmZmZmZmYsMHhmYTFlMGMwMSwweDAwMDI2N2ZmLDB4ZmZmZmY2M2EKKwkubG9uZwkweDBjMDEwMDA0LDB4NjdmZmZmZmYsMHhiNTM4MGMwMSwweDAwMDM2N2ZmCisJLmxvbmcJMHhmZmZmZmUyZSwweDYwZmZmZmZmLDB4ZmUxODEyMmUsMHhmZjRlNjdmZgorCS5sb25nCTB4ZmZmZmJkZmMsMHgwYzAxMDAwMSwweDY3ZmZmZmZmLDB4ZjllNjBjMDEKKwkubG9uZwkweDAwMDI2N2ZmLDB4ZmZmZmY2MDIsMHgwYzAxMDAwNCwweDY3ZmZmZmZmCisJLmxvbmcJMHhiZjQyMGMwMSwweDAwMDM2N2ZmLDB4ZmZmZmZkZjYsMHg2MGZmZmZmZgorCS5sb25nCTB4ZmRlMDEyMmUsMHhmZjRlNjdmZiwweGZmZmZkMTdhLDB4MGMwMTAwMDEKKwkubG9uZwkweDY3ZmZmZmZmLDB4ZmEyYTBjMDEsMHgwMDAyNjdmZiwweGZmZmZmYTAwCisJLmxvbmcJMHgwYzAxMDAwNCwweDY3ZmZmZmZmLDB4ZDMwODBjMDEsMHgwMDAzNjdmZgorCS5sb25nCTB4ZmZmZmZkYmUsMHg2MGZmZmZmZiwweGZkYTgxMjJlLDB4ZmY0ZTY3ZmYKKwkubG9uZwkweGZmZmZlYjY0LDB4MGMwMTAwMDEsMHg2N2ZmZmZmZiwweGY5ZjIwYzAxCisJLmxvbmcJMHgwMDAyNjdmZiwweGZmZmZmOWM4LDB4MGMwMTAwMDQsMHg2N2ZmZmZmZgorCS5sb25nCTB4ZWMyMDBjMDEsMHgwMDAzNjdmZiwweGZmZmZmZDg2LDB4NjBmZmZmZmYKKwkubG9uZwkweGZkNzAxMjJlLDB4ZmY0ZTY3ZmYsMHhmZmZmZWMyNCwweDBjMDEwMDAxCisJLmxvbmcJMHg2N2ZmZmZmZiwweGY5YmEwYzAxLDB4MDAwMjY3ZmYsMHhmZmZmZjk5MAorCS5sb25nCTB4MGMwMTAwMDQsMHg2N2ZmZmZmZiwweGVkMzYwYzAxLDB4MDAwMzY3ZmYKKwkubG9uZwkweGZmZmZmZDRlLDB4NjBmZmZmZmYsMHhmZDM4MTIyZSwweGZmNGU2N2ZmCisJLmxvbmcJMHhmZmZmZTE3OCwweDBjMDEwMDAxLDB4NjdmZmZmZmYsMHhmNTFhMGMwMQorCS5sb25nCTB4MDAwMjY3ZmYsMHhmZmZmZjk2MCwweDBjMDEwMDA0LDB4NjdmZmZmZmYKKwkubG9uZwkweGUzMGMwYzAxLDB4MDAwMzY3ZmYsMHhmZmZmZmQxNiwweDYwZmZmZmZmCisJLmxvbmcJMHhmZDAwMTIyZSwweGZmNGU2N2ZmLDB4ZmZmZmU1ODIsMHgwYzAxMDAwMQorCS5sb25nCTB4NjdmZmZmZmYsMHhmNGUyMGMwMSwweDAwMDI2N2ZmLDB4ZmZmZmY5MjgKKwkubG9uZwkweDBjMDEwMDA0LDB4NjdmZmZmZmYsMHhlNTk0MGMwMSwweDAwMDM2N2ZmCisJLmxvbmcJMHhmZmZmZmNkZSwweDYwZmZmZmZmLDB4ZmNjODEyMmUsMHhmZjRlNjdmZgorCS5sb25nCTB4ZmZmZmU1OWEsMHgwYzAxMDAwMSwweDY3ZmZmZmZmLDB4ZjRhYTBjMDEKKwkubG9uZwkweDAwMDI2N2ZmLDB4ZmZmZmY4ZjAsMHgwYzAxMDAwNCwweDY3ZmZmZmZmCisJLmxvbmcJMHhlNWQ2MGMwMSwweDAwMDM2N2ZmLDB4ZmZmZmZjYTYsMHg2MGZmZmZmZgorCS5sb25nCTB4ZmM5MDEyMmUsMHhmZjRlNjdmZiwweGZmZmZkNTMwLDB4MGMwMTAwMDEKKwkubG9uZwkweDY3ZmZmZmZmLDB4ZjhkYTBjMDEsMHgwMDAyNjdmZiwweGZmZmZmODg4CisJLmxvbmcJMHgwYzAxMDAwNCwweDY3ZmZmZmZmLDB4ZDViNjBjMDEsMHgwMDAzNjdmZgorCS5sb25nCTB4ZmZmZmZjNmUsMHg2MGZmZmZmZiwweGZjNTgxMjJlLDB4ZmY0ZTY3ZmYKKwkubG9uZwkweGZmZmZjYWMyLDB4MGMwMTAwMDEsMHg2N2ZmZmZmZiwweGY4ZGUwYzAxCisJLmxvbmcJMHgwMDAyNjdmZiwweGZmZmZmNDQyLDB4MGMwMTAwMDQsMHg2N2ZmZmZmZgorCS5sb25nCTB4Y2IzNDBjMDEsMHgwMDAzNjdmZiwweGZmZmZmYzM2LDB4NjBmZmZmZmYKKwkubG9uZwkweGZjMjAxMjJlLDB4ZmY0ZTY3ZmYsMHhmZmZmYjE0YywweDBjMDEwMDAxCisJLmxvbmcJMHg2N2ZmZmZmZiwweGY4NmEwYzAxLDB4MDAwMjY3ZmYsMHhmZmZmZjQwYQorCS5sb25nCTB4MGMwMTAwMDQsMHg2N2ZmZmZmZiwweGIzMGUwYzAxLDB4MDAwMzY3ZmYKKwkubG9uZwkweGZmZmZmYmZlLDB4NjBmZmZmZmYsMHhmYmU4MTIyZSwweGZmNGU2N2ZmCisJLmxvbmcJMHhmZmZmZDQwZSwweDBjMDEwMDAxLDB4NjdmZmZmZmYsMHhmN2I2MGMwMQorCS5sb25nCTB4MDAwMjY3ZmYsMHhmZmZmZjNkMiwweDBjMDEwMDA0LDB4NjdmZmZmZmYKKwkubG9uZwkweGQ0MGMwYzAxLDB4MDAwMzY3ZmYsMHhmZmZmZmJjNiwweDYwZmZmZmZmCisJLmxvbmcJMHhmYmIwMTIyZSwweGZmNGU2N2ZmLDB4ZmZmZmQ0MGEsMHgwYzAxMDAwMQorCS5sb25nCTB4NjdmZmZmZmYsMHhmNzdlMGMwMSwweDAwMDI2N2ZmLDB4ZmZmZmYzOWEKKwkubG9uZwkweDBjMDEwMDA0LDB4NjdmZmZmZmYsMHhkNDFhMGMwMSwweDAwMDM2N2ZmCisJLmxvbmcJMHhmZmZmZmI4ZSwweDYwZmZmZmZmLDB4ZmI3ODEyMmUsMHhmZjRlNjdmZgorCS5sb25nCTB4ZmZmZmIyOTIsMHgwYzAxMDAwMSwweDY3ZmZmZmZmLDB4ZjgxYTBjMDEKKwkubG9uZwkweDAwMDI2N2ZmLDB4ZmZmZmY4M2UsMHgwYzAxMDAwNCwweDY3ZmZmZmZmCisJLmxvbmcJMHhiNTBhMGMwMSwweDAwMDM2N2ZmLDB4ZmZmZmY4M2EsMHg2MGZmZmZmZgorCS5sb25nCTB4Zjg0NDEyMmUsMHhmZjRlNjdmZiwweGZmZmZmODllLDB4MGMwMTAwMDEKKwkubG9uZwkweDY3ZmZmZmZmLDB4ZjhjYTBjMDEsMHgwMDAyNjdmZiwweGZmZmZmOGY4CisJLmxvbmcJMHgwYzAxMDAwNCwweDY3ZmZmZmZmLDB4Zjg4MDBjMDEsMHgwMDAzNjdmZgorCS5sb25nCTB4ZmZmZmZhYjQsMHg2MGZmZmZmZiwweGZhYzAxMjJlLDB4ZmY0ZTY3ZmYKKwkubG9uZwkweGZmZmZmOTZlLDB4MGMwMTAwMDEsMHg2N2ZmZmZmZiwweGY5OWEwYzAxCisJLmxvbmcJMHgwMDAyNjdmZiwweGZmZmZmOWM4LDB4MGMwMTAwMDQsMHg2N2ZmZmZmZgorCS5sb25nCTB4Zjk1MDBjMDEsMHgwMDAzNjdmZiwweGZmZmZmYTdjLDB4NjBmZmZmZmYKKwkubG9uZwkweGZhODgxMjJlLDB4ZmY0ZTY3ZmYsMHhmZmZmZjlkOCwweDBjMDEwMDAxCisJLmxvbmcJMHg2N2ZmZmZmZiwweGZhMDYwYzAxLDB4MDAwMjY3ZmYsMHhmZmZmZmEzNAorCS5sb25nCTB4MGMwMTAwMDQsMHg2N2ZmZmZmZiwweGY5YmEwYzAxLDB4MDAwMzY3ZmYKKwkubG9uZwkweGZmZmZmYTQ0LDB4NjBmZmZmZmYsMHhmYTUwMGMyZiwweDAwMDcwMDAzCisJLmxvbmcJMHg2NzNlMWQ3YywweDAwMDBmZjRlLDB4MWQ3YzAwMDAsMHhmZjRmZjIyZQorCS5sb25nCTB4ZjA4MGZmNzgsMHg0MWVmMDAwNCwweDQzZWVmZjc4LDB4MGMwMTAwMDMKKwkubG9uZwkweDY3MTYwYzAxLDB4MDAwMjY3MDgsMHg2MWZmMDAwMCwweDAyMDA0ZTc1CisJLmxvbmcJMHg2MWZmMDAwMCwweDFiOWU0ZTc1LDB4NjFmZjAwMDAsMHgwNWU0NGU3NQorCS5sb25nCTB4MWQ3YzAwMDQsMHhmZjRlNjBjMCwweDRhZmMwMDZkLDB4MDAwMDA1ZDIKKwkubG9uZwkweDAwMDAwZmM4LDB4ZmZmZmZhNmUsMHgwMDAwMTA2YywweDAwMDAyMzE0CisJLmxvbmcJMHgwMDAwMDAwMCwweGZmZmZmYWE2LDB4MDAwMDAwMDAsMHhmZmZmZmFkZQorCS5sb25nCTB4ZmZmZmZiMTYsMHhmZmZmZmI0ZSwweDAwMDAwMDAwLDB4ZmZmZmZiODYKKwkubG9uZwkweGZmZmZmYmJlLDB4ZmZmZmZiZjYsMHhmZmZmZmMyZSwweGZmZmZmYzY2CisJLmxvbmcJMHhmZmZmZmM5ZSwweGZmZmZmY2Q2LDB4MDAwMDAwMDAsMHhmZmZmZmQwZQorCS5sb25nCTB4ZmZmZmZkNDYsMHhmZmZmZmQ3ZSwweDAwMDAwMDAwLDB4MDAwMDExMTIKKwkubG9uZwkweGZmZmZmZGI2LDB4MDAwMDBjYTgsMHgwMDAwMDAwMCwweGZmZmZmZGVlCisJLmxvbmcJMHhmZmZmZmUyNiwweGZmZmZmZTVlLDB4ZmZmZmZlOTYsMHgwMDAwMDg5ZQorCS5sb25nCTB4ZmZmZmZmMDYsMHgwMDAwMWI4NCwweDAwMDAwMWRlLDB4MDAwMDE4NTQKKwkubG9uZwkweGZmZmZmZjNlLDB4ZmZmZmZmNzYsMHgwMDAwMTUxMiwweDAwMDAxZjRjCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4ZmZmZmZlY2UKKwkubG9uZwkweGZmZmZmZWNlLDB4ZmZmZmZlY2UsMHhmZmZmZmVjZSwweGZmZmZmZWNlCisJLmxvbmcJMHhmZmZmZmVjZSwweGZmZmZmZWNlLDB4ZmZmZmZlY2UsMHgwMDAwMTNiMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMGY1NiwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwNWMwCisJLmxvbmcJMHgwMDAwMjMwMiwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDVjYQorCS5sb25nCTB4MDAwMDIzMGMsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAxMTAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwYzk2LDB4MDAwMDAwMDAsMHgwMDAwMTEwYQorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMGNhMCwweDAwMDAwMDAwLDB4MDAwMDA4OGMKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDFiNzIsMHgwMDAwMDFjYywweDAwMDAwODk2CisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAxYjdjLDB4MDAwMDAxZDYsMHgwMDAwMWYzYQorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDFmNDQKKwkubG9uZwkweGZmZmZjMDAxLDB4ZmZmZmZmODEsMHhmZmZmZmMwMSwweDAwMDA0MDAwCisJLmxvbmcJMHgwMDAwMDA3ZiwweDAwMDAwM2ZmLDB4MDIwMDAwMzAsMHgwMDAwMDA0MAorCS5sb25nCTB4NjAwODAyMDAsMHgwMDMwMDAwMCwweDAwODAyZDQwLDB4ZmY1YzQyNDEKKwkubG9uZwkweDEyMmVmZjRmLDB4ZTcwOTgyMmUsMHhmZjRlNjYwMCwweDAyZTQzZDY5CisJLmxvbmcJMHgwMDAwZmY5MCwweDJkNjkwMDA0LDB4ZmY5NDJkNjksMHgwMDA4ZmY5OAorCS5sb25nCTB4M2Q2ODAwMDAsMHhmZjg0MmQ2OCwweDAwMDRmZjg4LDB4MmQ2ODAwMDgKKwkubG9uZwkweGZmOGM2MWZmLDB4MDAwMDI0Y2UsMHgyZjAwNjFmZiwweDAwMDAyNTcyCisJLmxvbmcJMHhkMTk3MzIyZSwweGZmNWVlYzA5LDB4MjAxZmIwYmIsMHgxNDg0NjcwMAorCS5sb25nCTB4MDExZTZkMDAsMHgwMDYyYjBiYiwweDE0ODQ2NzAwLDB4MDIxYTZlMDAKKwkubG9uZwkweDAxNGFmMjJlLDB4ZDA4MGZmOTAsMHhmMjJlOTAwMCwweGZmNWNmMjNjCisJLmxvbmcJMHg4ODAwMDAwMCwweDAwMDBmMjJlLDB4NDgyM2ZmODQsMHhmMjAxYTgwMAorCS5sb25nCTB4ZjIzYzkwMDAsMHgwMDAwMDAwMCwweDgzYWVmZjY0LDB4ZjIyZWYwODAKKwkubG9uZwkweGZmODQyZjAyLDB4MzIyZWZmODQsMHgyNDAxMDI4MSwweDAwMDA3ZmZmCisJLmxvbmcJMHgwMjQyODAwMCwweDkyODA4MjQyLDB4M2Q0MWZmODQsMHgyNDFmZjIyZQorCS5sb25nCTB4ZDA4MGZmODQsMHg0ZTc1ZjIyZSwweGQwODBmZjkwLDB4ZjIyZTkwMDAKKwkubG9uZwkweGZmNWNmMjNjLDB4ODgwMDAwMDAsMHgwMDAwZjIyZSwweDQ4MjNmZjg0CisJLmxvbmcJMHhmMjAxYTgwMCwweGYyM2M5MDAwLDB4MDAwMDAwMDAsMHg4M2FlZmY2NAorCS5sb25nCTB4MDBhZTAwMDAsMHgxMDQ4ZmY2NCwweDEyMmVmZjYyLDB4MDIwMTAwMTMKKwkubG9uZwkweDY2MWMwODJlLDB4MDAwM2ZmNjQsMHg1NmMxMjAyZSwweGZmNWM2MWZmCisJLmxvbmcJMHgwMDAwNGZjYywweDgxMmVmZjY0LDB4ZjIxMGQwODAsMHg0ZTc1MjIyZQorCS5sb25nCTB4ZmY1YzAyMDEsMHgwMGMwNjYzNCwweGYyMmVmMDgwLDB4ZmY4NDJmMDIKKwkubG9uZwkweDMyMmVmZjg0LDB4MzQwMTAyODEsMHgwMDAwN2ZmZiwweDkyODAwNDgxCisJLmxvbmcJMHgwMDAwNjAwMCwweDAyNDE3ZmZmLDB4MDI0MjgwMDAsMHg4MjQyM2Q0MQorCS5sb25nCTB4ZmY4NDI0MWYsMHhmMjJlZDA0MCwweGZmODQ2MGE2LDB4ZjIyZWQwODAKKwkubG9uZwkweGZmOTAyMjJlLDB4ZmY1YzAyMDEsMHgwMDMwZjIwMSwweDkwMDBmMjJlCisJLmxvbmcJMHg0ODIzZmY4NCwweGYyM2M5MDAwLDB4MDAwMDAwMDAsMHg2MGFhZjIyZQorCS5sb25nCTB4ZDA4MGZmOTAsMHhmMjJlOTAwMCwweGZmNWNmMjNjLDB4ODgwMDAwMDAKKwkubG9uZwkweDAwMDBmMjJlLDB4NDgyM2ZmODQsMHhmMjAxYTgwMCwweGYyM2M5MDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDgzYWVmZjY0LDB4ZjIwMDAwOTgsMHhmMjNjNThiOAorCS5sb25nCTB4MDAwMmYyOTMsMHhmZjNjNjAwMCwweGZlZTQwOGVlLDB4MDAwM2ZmNjYKKwkubG9uZwkweGYyMmVkMDgwLDB4ZmY5MGYyM2MsMHg5MDAwMDAwMCwweDAwMTBmMjNjCisJLmxvbmcJMHg4ODAwMDAwMCwweDAwMDBmMjJlLDB4NDgyM2ZmODQsMHhmMjAxYTgwMAorCS5sb25nCTB4ZjIzYzkwMDAsMHgwMDAwMDAwMCwweDgzYWVmZjY0LDB4MTIyZWZmNjIKKwkubG9uZwkweDAyMDEwMDBiLDB4NjYyMGYyMmUsMHhmMDgwZmY4NCwweDQxZWVmZjg0CisJLmxvbmcJMHgyMjJlZmY1YywweDYxZmYwMDAwLDB4NGRkODgxMmUsMHhmZjY0ZjIyZQorCS5sb25nCTB4ZDA4MGZmODQsMHg0ZTc1ZjIyZSwweGQwNDBmZjkwLDB4MjIyZWZmNWMKKwkubG9uZwkweDAyMDEwMGMwLDB4NjY1MmYyMmUsMHg5MDAwZmY1YywweGYyM2M4ODAwCisJLmxvbmcJMHgwMDAwMDAwMCwweGYyMmU0OGEzLDB4ZmY4NGYyM2MsMHg5MDAwMDAwMAorCS5sb25nCTB4MDAwMGYyMmUsMHhmMDQwZmY4NCwweDJmMDIzMjJlLDB4ZmY4NDI0MDEKKwkubG9uZwkweDAyODEwMDAwLDB4N2ZmZjAyNDIsMHg4MDAwOTI4MCwweDA2ODEwMDAwCisJLmxvbmcJMHg2MDAwMDI0MSwweDdmZmY4MjQyLDB4M2Q0MWZmODQsMHgyNDFmZjIyZQorCS5sb25nCTB4ZDA0MGZmODQsMHg2MDAwZmY4MCwweDIyMmVmZjVjLDB4MDIwMTAwMzAKKwkubG9uZwkweGYyMDE5MDAwLDB4NjBhNmYyMmUsMHhkMDgwZmY5MCwweGYyMmU5MDAwCisJLmxvbmcJMHhmZjVjZjIzYywweDg4MDAwMDAwLDB4MDAwMGYyMmUsMHg0ODIzZmY4NAorCS5sb25nCTB4ZjIwMWE4MDAsMHhmMjNjOTAwMCwweDAwMDAwMDAwLDB4ODNhZWZmNjQKKwkubG9uZwkweGYyMDAwMDk4LDB4ZjIzYzU4YjgsMHgwMDAyZjI5MiwweGZkZTBmMjk0CisJLmxvbmcJMHhmZWZhZjIyZSwweGQwNDBmZjkwLDB4MjIyZWZmNWMsMHgwMjAxMDBjMAorCS5sb25nCTB4MDAwMTAwMTAsMHhmMjAxOTAwMCwweGYyM2M4ODAwLDB4MDAwMDAwMDAKKwkubG9uZwkweGYyMmU0OGEzLDB4ZmY4NGYyM2MsMHg5MDAwMDAwMCwweDAwMDBmMjAwCisJLmxvbmcJMHgwNDk4ZjIzYywweDU4YjgwMDAyLDB4ZjI5M2ZkYTIsMHg2MDAwZmViYworCS5sb25nCTB4MzIzYjEyMGEsMHg0ZWZiMTAwNiwweDRhZmMwMDMwLDB4ZmQxMjAwNzIKKwkubG9uZwkweDAwY2MwMDZjLDB4ZmQxMjAwNjYsMHgwMDAwMDAwMCwweDAwNzIwMDcyCisJLmxvbmcJMHgwMDYwMDA2YywweDAwNzIwMDY2LDB4MDAwMDAwMDAsMHgwMDllMDA2MAorCS5sb25nCTB4MDA5ZTAwNmMsMHgwMDllMDA2NiwweDAwMDAwMDAwLDB4MDA2YzAwNmMKKwkubG9uZwkweDAwNmMwMDZjLDB4MDA2YzAwNjYsMHgwMDAwMDAwMCwweGZkMTIwMDcyCisJLmxvbmcJMHgwMGNjMDA2YywweGZkMTIwMDY2LDB4MDAwMDAwMDAsMHgwMDY2MDA2NgorCS5sb25nCTB4MDA2NjAwNjYsMHgwMDY2MDA2NiwweDAwMDAwMDAwLDB4NjBmZjAwMDAKKwkubG9uZwkweDIzMGU2MGZmLDB4MDAwMDIyODQsMHg2MGZmMDAwMCwweDIyN2UxMDI4CisJLmxvbmcJMHgwMDAwMTIyOSwweDAwMDBiMTAxLDB4NmExMGYyM2MsMHg0NDAwODAwMAorCS5sb25nCTB4MDAwMDFkN2MsMHgwMDBjZmY2NCwweDRlNzVmMjNjLDB4NDQwMDAwMDAKKwkubG9uZwkweDAwMDAxZDdjLDB4MDAwNGZmNjQsMHg0ZTc1ZjIyOSwweGQwODAwMDAwCisJLmxvbmcJMHgxMDI4MDAwMCwweDEyMjkwMDAwLDB4YjEwMTZhMTAsMHhmMjAwMDAxOAorCS5sb25nCTB4ZjIwMDAwMWEsMHgxZDdjMDAwYSwweGZmNjQ0ZTc1LDB4ZjIwMDAwMTgKKwkubG9uZwkweDFkN2MwMDAyLDB4ZmY2NDRlNzUsMHhmMjI4ZDA4MCwweDAwMDAxMDI4CisJLmxvbmcJMHgwMDAwMTIyOSwweDAwMDBiMTAxLDB4NmFlMjYwZDAsMHgwMjAwMDAzMAorCS5sb25nCTB4MDAwMDAwNDAsMHg2MDA4MDIwMCwweDAwMzAwMDAwLDB4MDA4MDJkNDAKKwkubG9uZwkweGZmNWMxMjJlLDB4ZmY0ZTY2MDAsMHgwMjYyMDIwMCwweDAwYzA2NjAwCisJLmxvbmcJMHgwMDdjNGEyOCwweDAwMDA2YTA2LDB4MDhlZTAwMDMsMHhmZjY0ZjIyOAorCS5sb25nCTB4ZDA4MDAwMDAsMHg0ZTc1MDIwMCwweDAwYzA2NjAwLDB4MDA2MDA4ZWUKKwkubG9uZwkweDAwMDNmZjY2LDB4NGEyODAwMDAsMHg2YTA2MDhlZSwweDAwMDNmZjY0CisJLmxvbmcJMHhmMjI4ZDA4MCwweDAwMDAwODJlLDB4MDAwM2ZmNjIsMHg2NjAyNGU3NQorCS5sb25nCTB4M2Q2ODAwMDAsMHhmZjg0MmQ2OCwweDAwMDRmZjg4LDB4MmQ2ODAwMDgKKwkubG9uZwkweGZmOGM0MWVlLDB4ZmY4NDYxZmYsMHgwMDAwNDk1MCwweDQ0NDAwNjQwCisJLmxvbmcJMHg2MDAwMzIyZSwweGZmODQwMjQxLDB4ODAwMDAyNDAsMHg3ZmZmODA0MQorCS5sb25nCTB4M2Q0MGZmODQsMHhmMjJlZDA0MCwweGZmODQ0ZTc1LDB4MGMwMDAwNDAKKwkubG9uZwkweDY2N2UzZDY4LDB4MDAwMGZmODQsMHgyZDY4MDAwNCwweGZmODgyZDY4CisJLmxvbmcJMHgwMDA4ZmY4YywweDYxZmYwMDAwLDB4MjA2YzBjODAsMHgwMDAwMDA3ZgorCS5sb25nCTB4NmMwMDAwOTIsMHgwYzgwZmZmZiwweGZmODE2NzAwLDB4MDE3ODZkMDAKKwkubG9uZwkweDAwZjRmMjNjLDB4ODgwMDAwMDAsMHgwMDAwZjIyZSwweDkwMDBmZjVjCisJLmxvbmcJMHhmMjJlNDgwMCwweGZmODRmMjAxLDB4YTgwMGYyM2MsMHg5MDAwMDAwMAorCS5sb25nCTB4MDAwMDgzYWUsMHhmZjY0MmYwMiwweGYyMmVmMDgwLDB4ZmY4NDMyMmUKKwkubG9uZwkweGZmODQzNDAxLDB4MDI4MTAwMDAsMHg3ZmZmOTI4MCwweDAyNDI4MDAwCisJLmxvbmcJMHg4NDQxM2Q0MiwweGZmODQyNDFmLDB4ZjIyZWQwODAsMHhmZjg0NGU3NQorCS5sb25nCTB4M2Q2ODAwMDAsMHhmZjg0MmQ2OCwweDAwMDRmZjg4LDB4MmQ2ODAwMDgKKwkubG9uZwkweGZmOGM2MWZmLDB4MDAwMDFmZWUsMHgwYzgwMDAwMCwweDAzZmY2YzAwCisJLmxvbmcJMHgwMDE0MGM4MCwweGZmZmZmYzAxLDB4NjcwMDAwZmEsMHg2ZDAwMDA3NgorCS5sb25nCTB4NjAwMGZmODAsMHgwOGVlMDAwMywweGZmNjY0YTJlLDB4ZmY4NDZhMDYKKwkubG9uZwkweDA4ZWUwMDAzLDB4ZmY2NDEyMmUsMHhmZjYyMDIwMSwweDAwMGI2NjFhCisJLmxvbmcJMHg0MWVlZmY4NCwweDIyMmVmZjVjLDB4NjFmZjAwMDAsMHg0YTc0ODEyZQorCS5sb25nCTB4ZmY2NGYyMmUsMHhkMDgwZmY4NCwweDRlNzUyZDZlLDB4ZmY4OGZmOTQKKwkubG9uZwkweDJkNmVmZjhjLDB4ZmY5ODMyMmUsMHhmZjg0MmYwMiwweDM0MDEwMjgxCisJLmxvbmcJMHgwMDAwN2ZmZiwweDkyODAwMjQyLDB4ODAwMDA2ODEsMHgwMDAwNjAwMAorCS5sb25nCTB4MDI0MTdmZmYsMHg4NDQxM2Q0MiwweGZmOTBmMjJlLDB4ZDA0MGZmOTAKKwkubG9uZwkweDI0MWY2MGFjLDB4ZjIzYzg4MDAsMHgwMDAwMDAwMCwweGYyMmU5MDAwCisJLmxvbmcJMHhmZjVjZjIyZSwweDQ4MDBmZjg0LDB4ZjIzYzkwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4ZjIwMWE4MDAsMHg4M2FlZmY2NCwweDAwYWUwMDAwLDB4MTA0OGZmNjQKKwkubG9uZwkweDEyMmVmZjYyLDB4MDIwMTAwMTMsMHg2NjFjMDgyZSwweDAwMDNmZjY0CisJLmxvbmcJMHg1NmMxMjAyZSwweGZmNWM2MWZmLDB4MDAwMDRhZTQsMHg4MTJlZmY2NAorCS5sb25nCTB4ZjIxMGQwODAsMHg0ZTc1MmYwMiwweDMyMmVmZjg0LDB4MjQwMTAyODEKKwkubG9uZwkweDAwMDA3ZmZmLDB4MDI0MjgwMDAsMHg5MjgwMDQ4MSwweDAwMDA2MDAwCisJLmxvbmcJMHgwMjQxN2ZmZiwweDgyNDIzZDQxLDB4ZmY4NDI0MWYsMHhmMjJlZDA0MAorCS5sb25nCTB4ZmY4NDYwYjYsMHhmMjNjODgwMCwweDAwMDAwMDAwLDB4ZjIyZTkwMDAKKwkubG9uZwkweGZmNWNmMjJlLDB4NDgwMGZmODQsMHhmMjAxYTgwMCwweGYyM2M5MDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDgzYWVmZjY0LDB4ZjIwMDAwOTgsMHhmMjNjNThiOAorCS5sb25nCTB4MDAwMmYyOTMsMHhmZjc0NjAwMCwweGZlN2UwYzAxLDB4MDAwNDY3MDAKKwkubG9uZwkweGZkYjYwYzAxLDB4MDAwNTY3ZmYsMHgwMDAwMWY5OCwweDBjMDEwMDAzCisJLmxvbmcJMHg2N2ZmMDAwMCwweDFmYTJmMjI4LDB4NDgwMDAwMDAsMHhmMjAwYTgwMAorCS5sb25nCTB4ZTE5ODFkNDAsMHhmZjY0NGU3NSwweDUxZmM1MWZjLDB4NTFmYzUxZmMKKwkubG9uZwkweDAwMDAzZmZmLDB4MDAwMDAwN2UsMHgwMDAwMDNmZSwweGZmZmZjMDAxCisJLmxvbmcJMHhmZmZmZmY4MSwweGZmZmZmYzAxLDB4MDIwMDAwMzAsMHgwMDAwMDA0MAorCS5sb25nCTB4NjAwODAyMDAsMHgwMDMwMDAwMCwweDAwODAyZDQwLDB4ZmY1YzQyNDEKKwkubG9uZwkweDEyMmVmZjRmLDB4ZTcwOTgyMmUsMHhmZjRlNjYwMCwweDAyZDYzZDY5CisJLmxvbmcJMHgwMDAwZmY5MCwweDJkNjkwMDA0LDB4ZmY5NDJkNjksMHgwMDA4ZmY5OAorCS5sb25nCTB4M2Q2ODAwMDAsMHhmZjg0MmQ2OCwweDAwMDRmZjg4LDB4MmQ2ODAwMDgKKwkubG9uZwkweGZmOGM2MWZmLDB4MDAwMDFlMGUsMHgyZjAwNjFmZiwweDAwMDAxZWIyCisJLmxvbmcJMHg0NDk3ZDE5NywweDMyMmVmZjVlLDB4ZWMwOTIwMWYsMHhiMGJiMTQ4ZQorCS5sb25nCTB4NmYwMDAwNzQsMHhiMGJiMTUyMCwweGZmN2E2NzAwLDB4MDIwYzZlMDAKKwkubG9uZwkweDAxM2NmMjJlLDB4ZDA4MGZmOTAsMHhmMjJlOTAwMCwweGZmNWNmMjNjCisJLmxvbmcJMHg4ODAwMDAwMCwweDAwMDBmMjJlLDB4NDgyMGZmODQsMHhmMjAxYTgwMAorCS5sb25nCTB4ZjIzYzkwMDAsMHgwMDAwMDAwMCwweDgzYWVmZjY0LDB4ZjIyZWYwODAKKwkubG9uZwkweGZmODQyZjAyLDB4MzIyZWZmODQsMHgyNDAxMDI4MSwweDAwMDA3ZmZmCisJLmxvbmcJMHgwMjQyODAwMCwweDkyODA4MjQyLDB4M2Q0MWZmODQsMHgyNDFmZjIyZQorCS5sb25nCTB4ZDA4MGZmODQsMHg0ZTc1MDAwMCwweDdmZmYwMDAwLDB4NDA3ZjAwMDAKKwkubG9uZwkweDQzZmYyMDFmLDB4NjBjNjJmMDAsMHhmMjJlZDA4MCwweGZmOTBmMjJlCisJLmxvbmcJMHg5MDAwZmY1YywweGYyM2M4ODAwLDB4MDAwMDAwMDAsMHhmMjJlNDgyMAorCS5sb25nCTB4ZmY4NGYyMDAsMHhhODAwZjIzYywweDkwMDAwMDAwLDB4MDAwMDgxYWUKKwkubG9uZwkweGZmNjRmMjI3LDB4ZTAwMTMwMTcsMHhkZmZjMDAwMCwweDAwMGMwMjgwCisJLmxvbmcJMHgwMDAwN2ZmZiwweDkwOTdiMGJiLDB4MTRhZTZkYjYsMHgyMDFmMDBhZQorCS5sb25nCTB4MDAwMDEwNDgsMHhmZjY0MTIyZSwweGZmNjIwMjAxLDB4MDAxMzY2MWMKKwkubG9uZwkweDA4MmUwMDAzLDB4ZmY2NDU2YzEsMHgyMDJlZmY1YywweDYxZmYwMDAwCisJLmxvbmcJMHg0OGRlODEyZSwweGZmNjRmMjEwLDB4ZDA4MDRlNzUsMHgyMjJlZmY1YworCS5sb25nCTB4MDIwMTAwYzAsMHg2NjM0ZjIyZSwweGYwODBmZjg0LDB4MmYwMjMyMmUKKwkubG9uZwkweGZmODQzNDAxLDB4MDI4MTAwMDAsMHg3ZmZmOTI4MCwweDA0ODEwMDAwCisJLmxvbmcJMHg2MDAwMDI0MSwweDdmZmYwMjQyLDB4ODAwMDgyNDIsMHgzZDQxZmY4NAorCS5sb25nCTB4MjQxZmYyMmUsMHhkMDQwZmY4NCwweDYwYTZmMjJlLDB4ZDA4MGZmOTAKKwkubG9uZwkweDIyMmVmZjVjLDB4MDIwMTAwMzAsMHhmMjAxOTAwMCwweGYyMmU0ODIwCisJLmxvbmcJMHhmZjg0ZjIzYywweDkwMDAwMDAwLDB4MDAwMDYwYWEsMHgwOGVlMDAwMworCS5sb25nCTB4ZmY2NmYyMmUsMHhkMDgwZmY5MCwweGYyM2M5MDAwLDB4MDAwMDAwMTAKKwkubG9uZwkweGYyM2M4ODAwLDB4MDAwMDAwMDAsMHhmMjJlNDgyMCwweGZmODRmMjAxCisJLmxvbmcJMHhhODAwZjIzYywweDkwMDAwMDAwLDB4MDAwMDgzYWUsMHhmZjY0MTIyZQorCS5sb25nCTB4ZmY2MjAyMDEsMHgwMDBiNjYyMCwweGYyMmVmMDgwLDB4ZmY4NDQxZWUKKwkubG9uZwkweGZmODQyMjJlLDB4ZmY1YzYxZmYsMHgwMDAwNDcyNiwweDgxMmVmZjY0CisJLmxvbmcJMHhmMjJlZDA4MCwweGZmODQ0ZTc1LDB4ZjIyZWQwNDAsMHhmZjkwMjIyZQorCS5sb25nCTB4ZmY1YzAyMDEsMHgwMGMwNjY1MiwweGYyMmU5MDAwLDB4ZmY1Y2YyM2MKKwkubG9uZwkweDg4MDAwMDAwLDB4MDAwMGYyMmUsMHg0OGEwZmY4NCwweGYyM2M5MDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweGYyMmVmMDQwLDB4ZmY4NDJmMDIsMHgzMjJlZmY4NAorCS5sb25nCTB4MjQwMTAyODEsMHgwMDAwN2ZmZiwweDAyNDI4MDAwLDB4OTI4MDA2ODEKKwkubG9uZwkweDAwMDA2MDAwLDB4MDI0MTdmZmYsMHg4MjQyM2Q0MSwweGZmODQyNDFmCisJLmxvbmcJMHhmMjJlZDA0MCwweGZmODQ2MDAwLDB4ZmY4MDIyMmUsMHhmZjVjMDIwMQorCS5sb25nCTB4MDAzMGYyMDEsMHg5MDAwNjBhNiwweGYyMmVkMDgwLDB4ZmY5MGYyMmUKKwkubG9uZwkweDkwMDBmZjVjLDB4ZjIzYzg4MDAsMHgwMDAwMDAwMCwweGYyMmU0ODIwCisJLmxvbmcJMHhmZjg0ZjIwMSwweGE4MDBmMjNjLDB4OTAwMDAwMDAsMHgwMDAwODNhZQorCS5sb25nCTB4ZmY2NGYyMDAsMHgwMDk4ZjIzYywweDU4YjgwMDAxLDB4ZjI5MmZkZWUKKwkubG9uZwkweGYyOTRmZWZhLDB4ZjIyZWQwNDAsMHhmZjkwMjIyZSwweGZmNWMwMjAxCisJLmxvbmcJMHgwMGMwMDAwMSwweDAwMTBmMjAxLDB4OTAwMGYyM2MsMHg4ODAwMDAwMAorCS5sb25nCTB4MDAwMGYyMmUsMHg0OGEwZmY4NCwweGYyM2M5MDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweGYyMDAwNDk4LDB4ZjIzYzU4YjgsMHgwMDAxZjI5MywweGZkYjA2MDAwCisJLmxvbmcJMHhmZWJjMzIzYiwweDEyMGE0ZWZiLDB4MTAwNjRhZmMsMHgwMDMwZmQyMAorCS5sb25nCTB4MDA5ZTAwNzIsMHgwMDYwZmQyMCwweDAwNjYwMDAwLDB4MDAwMDAwNzIKKwkubG9uZwkweDAwNmMwMDcyLDB4MDA2MDAwNzIsMHgwMDY2MDAwMCwweDAwMDAwMGQwCisJLmxvbmcJMHgwMGQwMDA2YywweDAwNjAwMGQwLDB4MDA2NjAwMDAsMHgwMDAwMDA2MAorCS5sb25nCTB4MDA2MDAwNjAsMHgwMDYwMDA2MCwweDAwNjYwMDAwLDB4MDAwMGZkMjAKKwkubG9uZwkweDAwOWUwMDcyLDB4MDA2MGZkMjAsMHgwMDY2MDAwMCwweDAwMDAwMDY2CisJLmxvbmcJMHgwMDY2MDA2NiwweDAwNjYwMDY2LDB4MDA2NjAwMDAsMHgwMDAwNjBmZgorCS5sb25nCTB4MDAwMDFiZDgsMHg2MGZmMDAwMCwweDFiZDI2MGZmLDB4MDAwMDFjNTAKKwkubG9uZwkweDEwMjgwMDAwLDB4MTIyOTAwMDAsMHhiMTAxNmExMCwweGYyM2M0NDAwCisJLmxvbmcJMHg4MDAwMDAwMCwweDFkN2MwMDBjLDB4ZmY2NDRlNzUsMHhmMjNjNDQwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgxZDdjMDAwNCwweGZmNjQ0ZTc1LDB4MDA2ZTA0MTAKKwkubG9uZwkweGZmNjYxMDI4LDB4MDAwMDEyMjksMHgwMDAwYjEwMSwweDZhMTBmMjNjCisJLmxvbmcJMHg0NDAwZmY4MCwweDAwMDAxZDdjLDB4MDAwYWZmNjQsMHg0ZTc1ZjIzYworCS5sb25nCTB4NDQwMDdmODAsMHgwMDAwMWQ3YywweDAwMDJmZjY0LDB4NGU3NTEwMjkKKwkubG9uZwkweDAwMDAxMjI4LDB4MDAwMGIxMDEsMHg2YTE2ZjIyOSwweGQwODAwMDAwCisJLmxvbmcJMHhmMjAwMDAxOCwweGYyMDAwMDFhLDB4MWQ3YzAwMGEsMHhmZjY0NGU3NQorCS5sb25nCTB4ZjIyOWQwODAsMHgwMDAwZjIwMCwweDAwMTgxZDdjLDB4MDAwMmZmNjQKKwkubG9uZwkweDRlNzUwMjAwLDB4MDAzMDAwMDAsMHgwMDQwNjAwOCwweDAyMDAwMDMwCisJLmxvbmcJMHgwMDAwMDA4MCwweDJkNDBmZjVjLDB4MTIyZWZmNGUsMHg2NjAwMDI3NgorCS5sb25nCTB4MDIwMDAwYzAsMHg2NjAwMDA5MCwweDJkNjgwMDA0LDB4ZmY4ODJkNjgKKwkubG9uZwkweDAwMDhmZjhjLDB4MzAyODAwMDAsMHgwYTQwODAwMCwweDZhMDYxZDdjCisJLmxvbmcJMHgwMDA4ZmY2NCwweDNkNDBmZjg0LDB4ZjIyZWQwODAsMHhmZjg0NGU3NQorCS5sb25nCTB4MDIwMDAwYzAsMHg2NjYwMDhlZSwweDAwMDNmZjY2LDB4MmQ2ODAwMDQKKwkubG9uZwkweGZmODgyZDY4LDB4MDAwOGZmOGMsMHgzMDI4MDAwMCwweDBhNDA4MDAwCisJLmxvbmcJMHg2YTA2MWQ3YywweDAwMDhmZjY0LDB4M2Q0MGZmODQsMHhmMjJlZDA4MAorCS5sb25nCTB4ZmY4NDA4MmUsMHgwMDAzZmY2MiwweDY2MDI0ZTc1LDB4NDFlZWZmODQKKwkubG9uZwkweDYxZmYwMDAwLDB4NDI2NjQ0NDAsMHgwNjQwNjAwMCwweDMyMmVmZjg0CisJLmxvbmcJMHgwMjQxODAwMCwweDAyNDA3ZmZmLDB4ODA0MTNkNDAsMHhmZjg0ZjIyZQorCS5sb25nCTB4ZDA0MGZmODQsMHg0ZTc1MGMwMCwweDAwNDA2NjdlLDB4M2Q2ODAwMDAKKwkubG9uZwkweGZmODQyZDY4LDB4MDAwNGZmODgsMHgyZDY4MDAwOCwweGZmOGM2MWZmCisJLmxvbmcJMHgwMDAwMTk4MiwweDBjODAwMDAwLDB4MDA3ZjZjMDAsMHgwMDkwMGM4MAorCS5sb25nCTB4ZmZmZmZmODEsMHg2NzAwMDE3OCwweDZkMDAwMGY0LDB4ZjIzYzg4MDAKKwkubG9uZwkweDAwMDAwMDAwLDB4ZjIyZTkwMDAsMHhmZjVjZjIyZSwweDQ4MWFmZjg0CisJLmxvbmcJMHhmMjAxYTgwMCwweGYyM2M5MDAwLDB4MDAwMDAwMDAsMHg4M2FlZmY2NAorCS5sb25nCTB4MmYwMmYyMmUsMHhmMDgwZmY4NCwweDMyMmVmZjg0LDB4MzQwMTAyODEKKwkubG9uZwkweDAwMDA3ZmZmLDB4OTI4MDAyNDIsMHg4MDAwODQ0MSwweDNkNDJmZjg0CisJLmxvbmcJMHgyNDFmZjIyZSwweGQwODBmZjg0LDB4NGU3NTNkNjgsMHgwMDAwZmY4NAorCS5sb25nCTB4MmQ2ODAwMDQsMHhmZjg4MmQ2OCwweDAwMDhmZjhjLDB4NjFmZjAwMDAKKwkubG9uZwkweDE5MDQwYzgwLDB4MDAwMDAzZmYsMHg2YzEyMGM4MCwweGZmZmZmYzAxCisJLmxvbmcJMHg2NzAwMDBmYywweDZkMDAwMDc4LDB4NjAwMGZmODIsMHgwOGVlMDAwMworCS5sb25nCTB4ZmY2NjBhMmUsMHgwMDgwZmY4NCwweDZhMDYwOGVlLDB4MDAwM2ZmNjQKKwkubG9uZwkweDEyMmVmZjYyLDB4MDIwMTAwMGIsMHg2NjFhNDFlZSwweGZmODQyMjJlCisJLmxvbmcJMHhmZjVjNjFmZiwweDAwMDA0MzhhLDB4ODEyZWZmNjQsMHhmMjJlZDA4MAorCS5sb25nCTB4ZmY4NDRlNzUsMHgyZDZlZmY4OCwweGZmOTQyZDZlLDB4ZmY4Y2ZmOTgKKwkubG9uZwkweDMyMmVmZjg0LDB4MmYwMjI0MDEsMHgwMjgxMDAwMCwweDdmZmYwMjQyCisJLmxvbmcJMHg4MDAwOTI4MCwweDA2ODEwMDAwLDB4NjAwMDAyNDEsMHg3ZmZmODI0MgorCS5sb25nCTB4M2Q0MWZmOTAsMHhmMjJlZDA0MCwweGZmOTAyNDFmLDB4NjBhY2YyM2MKKwkubG9uZwkweDg4MDAwMDAwLDB4MDAwMGYyMmUsMHg5MDAwZmY1YywweGYyMmU0ODFhCisJLmxvbmcJMHhmZjg0ZjIzYywweDkwMDAwMDAwLDB4MDAwMGYyMDEsMHhhODAwODNhZQorCS5sb25nCTB4ZmY2NDAwYWUsMHgwMDAwMTA0OCwweGZmNjQxMjJlLDB4ZmY2MjAyMDEKKwkubG9uZwkweDAwMTM2NjFjLDB4MDgyZTAwMDMsMHhmZjY0NTZjMSwweDIwMmVmZjVjCisJLmxvbmcJMHg2MWZmMDAwMCwweDQzZmE4MTJlLDB4ZmY2NGYyMTAsMHhkMDgwNGU3NQorCS5sb25nCTB4MmYwMjMyMmUsMHhmZjg0MjQwMSwweDAyODEwMDAwLDB4N2ZmZjAyNDIKKwkubG9uZwkweDgwMDA5MjgwLDB4MDQ4MTAwMDAsMHg2MDAwMDI0MSwweDdmZmY4MjQyCisJLmxvbmcJMHgzZDQxZmY4NCwweGYyMmVkMDQwLDB4ZmY4NDI0MWYsMHg2MGI2ZjIzYworCS5sb25nCTB4ODgwMDAwMDAsMHgwMDAwZjIyZSwweDkwMDBmZjVjLDB4ZjIyZTQ4MWEKKwkubG9uZwkweGZmODRmMjAxLDB4YTgwMGYyM2MsMHg5MDAwMDAwMCwweDAwMDA4M2FlCisJLmxvbmcJMHhmZjY0ZjIwMCwweDAwOThmMjNjLDB4NThiODAwMDIsMHhmMjkzZmY3NAorCS5sb25nCTB4NjAwMGZlN2UsMHgwYzAxMDAwNCwweDY3MDBmZGI2LDB4MGMwMTAwMDUKKwkubG9uZwkweDY3ZmYwMDAwLDB4MThhZTBjMDEsMHgwMDAzNjdmZiwweDAwMDAxOGI4CisJLmxvbmcJMHhmMjI4NDgxYSwweDAwMDBmMjAwLDB4YTgwMGUxOTgsMHgxZDQwZmY2NAorCS5sb25nCTB4NGU3NTEyMmUsMHhmZjRlNjYxMCwweDRhMjgwMDAwLDB4NmIwMjRlNzUKKwkubG9uZwkweDFkN2MwMDA4LDB4ZmY2NDRlNzUsMHgwYzAxMDAwMSwweDY3NDAwYzAxCisJLmxvbmcJMHgwMDAyNjcyNCwweDBjMDEwMDA1LDB4NjdmZjAwMDAsMHgxODY2MGMwMQorCS5sb25nCTB4MDAwMzY3ZmYsMHgwMDAwMTg3MCwweDRhMjgwMDAwLDB4NmIwMjRlNzUKKwkubG9uZwkweDFkN2MwMDA4LDB4ZmY2NDRlNzUsMHg0YTI4MDAwMCwweDZiMDgxZDdjCisJLmxvbmcJMHgwMDAyZmY2NCwweDRlNzUxZDdjLDB4MDAwYWZmNjQsMHg0ZTc1NGEyOAorCS5sb25nCTB4MDAwMDZiMDgsMHgxZDdjMDAwNCwweGZmNjQ0ZTc1LDB4MWQ3YzAwMGMKKwkubG9uZwkweGZmNjQ0ZTc1LDB4MTIyZWZmNGUsMHg2NjI4MDIwMCwweDAwMzBmMjAwCisJLmxvbmcJMHg5MDAwZjIzYywweDg4MDAwMDAwLDB4MDAwMGYyMjgsMHg0ODAxMDAwMAorCS5sb25nCTB4ZjIzYzkwMDAsMHgwMDAwMDAwMCwweGYyMDBhODAwLDB4ODFhZWZmNjQKKwkubG9uZwkweDRlNzUwYzAxLDB4MDAwMTY3MmUsMHgwYzAxMDAwMiwweDY3NGUwYzAxCisJLmxvbmcJMHgwMDA0NjcxMCwweDBjMDEwMDA1LDB4NjdmZjAwMDAsMHgxN2Q2NjBmZgorCS5sb25nCTB4MDAwMDE3ZTQsMHgzZDY4MDAwMCwweGZmODQxZDdjLDB4MDA4MGZmODgKKwkubG9uZwkweDQxZWVmZjg0LDB4NjBhNDRhMjgsMHgwMDAwNmIxMCwweGYyM2M0NDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDFkN2MwMDA0LDB4ZmY2NDRlNzUsMHhmMjNjNDQwMAorCS5sb25nCTB4ODAwMDAwMDAsMHgxZDdjMDAwYywweGZmNjQ0ZTc1LDB4ZjIyOGQwODAKKwkubG9uZwkweDAwMDA0YTI4LDB4MDAwMDZiMDgsMHgxZDdjMDAwMiwweGZmNjQ0ZTc1CisJLmxvbmcJMHgxZDdjMDAwYSwweGZmNjQ0ZTc1LDB4MTIyZWZmNGUsMHg2NjE4ZjIzYworCS5sb25nCTB4ODgwMDAwMDAsMHgwMDAwZjIyOCwweDQ4MDMwMDAwLDB4ZjIwMGE4MDAKKwkubG9uZwkweDgxYWVmZjY0LDB4NGU3NTBjMDEsMHgwMDAxNjcyZSwweDBjMDEwMDAyCisJLmxvbmcJMHg2NzRlMGMwMSwweDAwMDQ2NzEwLDB4MGMwMTAwMDUsMHg2N2ZmMDAwMAorCS5sb25nCTB4MTc0MjYwZmYsMHgwMDAwMTc1MCwweDNkNjgwMDAwLDB4ZmY4NDFkN2MKKwkubG9uZwkweDAwODBmZjg4LDB4NDFlZWZmODQsMHg2MGI0NGEyOCwweDAwMDA2YjEwCisJLmxvbmcJMHhmMjNjNDQwMCwweDAwMDAwMDAwLDB4MWQ3YzAwMDQsMHhmZjY0NGU3NQorCS5sb25nCTB4ZjIzYzQ0MDAsMHg4MDAwMDAwMCwweDFkN2MwMDBjLDB4ZmY2NDRlNzUKKwkubG9uZwkweGYyMjhkMDgwLDB4MDAwMDRhMjgsMHgwMDAwNmIwOCwweDFkN2MwMDAyCisJLmxvbmcJMHhmZjY0NGU3NSwweDFkN2MwMDBhLDB4ZmY2NDRlNzUsMHgwMjAwMDAzMAorCS5sb25nCTB4MDAwMDAwNDAsMHg2MDA4MDIwMCwweDAwMzAwMDAwLDB4MDA4MDJkNDAKKwkubG9uZwkweGZmNWMxMjJlLDB4ZmY0ZTY2MDAsMHgwMjVjMDIwMCwweDAwYzA2NjdlCisJLmxvbmcJMHgyZDY4MDAwNCwweGZmODgyZDY4LDB4MDAwOGZmOGMsMHgzMjI4MDAwMAorCS5sb25nCTB4MDg4MTAwMGYsMHgzZDQxZmY4NCwweGYyMmVkMDgwLDB4ZmY4NDRlNzUKKwkubG9uZwkweDAyMDAwMGMwLDB4NjY1ODA4ZWUsMHgwMDAzZmY2NiwweDJkNjgwMDA0CisJLmxvbmcJMHhmZjg4MmQ2OCwweDAwMDhmZjhjLDB4MzAyODAwMDAsMHgwODgwMDAwZgorCS5sb25nCTB4M2Q0MGZmODQsMHhmMjJlZDA4MCwweGZmODQwODJlLDB4MDAwM2ZmNjIKKwkubG9uZwkweDY2MDI0ZTc1LDB4NDFlZWZmODQsMHg2MWZmMDAwMCwweDNlMGU0NDQwCisJLmxvbmcJMHgwNjQwNjAwMCwweDMyMmVmZjg0LDB4MDI0MTgwMDAsMHgwMjQwN2ZmZgorCS5sb25nCTB4ODA0MTNkNDAsMHhmZjg0ZjIyZSwweGQwNDBmZjg0LDB4NGU3NTBjMDAKKwkubG9uZwkweDAwNDA2NjdlLDB4M2Q2ODAwMDAsMHhmZjg0MmQ2OCwweDAwMDRmZjg4CisJLmxvbmcJMHgyZDY4MDAwOCwweGZmOGM2MWZmLDB4MDAwMDE1MmEsMHgwYzgwMDAwMAorCS5sb25nCTB4MDA3ZjZjMDAsMHgwMDkwMGM4MCwweGZmZmZmZjgxLDB4NjcwMDAxNzAKKwkubG9uZwkweDZkMDAwMGVjLDB4ZjIzYzg4MDAsMHgwMDAwMDAwMCwweGYyMmU5MDAwCisJLmxvbmcJMHhmZjVjZjIyZSwweDQ4MThmZjg0LDB4ZjIwMWE4MDAsMHhmMjNjOTAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHg4M2FlZmY2NCwweDJmMDJmMjJlLDB4ZjA4MGZmODQKKwkubG9uZwkweDMyMmVmZjg0LDB4MjQwMTAyODEsMHgwMDAwN2ZmZiwweDkyODAwMjQyCisJLmxvbmcJMHg4MDAwODQ0MSwweDNkNDJmZjg0LDB4MjQxZmYyMmUsMHhkMDgwZmY4NAorCS5sb25nCTB4NGU3NTNkNjgsMHgwMDAwZmY4NCwweDJkNjgwMDA0LDB4ZmY4ODJkNjgKKwkubG9uZwkweDAwMDhmZjhjLDB4NjFmZjAwMDAsMHgxNGFjMGM4MCwweDAwMDAwM2ZmCisJLmxvbmcJMHg2YzEyMGM4MCwweGZmZmZmYzAxLDB4NjcwMDAwZjQsMHg2ZDAwMDA3MAorCS5sb25nCTB4NjAwMGZmODIsMHgwOGVlMDAwMywweGZmNjYwOGFlLDB4MDAwN2ZmODQKKwkubG9uZwkweDEyMmVmZjYyLDB4MDIwMTAwMGIsMHg2NjFhNDFlZSwweGZmODQyMjJlCisJLmxvbmcJMHhmZjVjNjFmZiwweDAwMDAzZjNhLDB4ODEyZWZmNjQsMHhmMjJlZDA4MAorCS5sb25nCTB4ZmY4NDRlNzUsMHgyZDZlZmY4OCwweGZmOTQyZDZlLDB4ZmY4Y2ZmOTgKKwkubG9uZwkweDMyMmVmZjg0LDB4MmYwMjI0MDEsMHgwMjgxMDAwMCwweDdmZmYwMjQyCisJLmxvbmcJMHg4MDAwOTI4MCwweDA2ODEwMDAwLDB4NjAwMDAyNDEsMHg3ZmZmODI0MgorCS5sb25nCTB4M2Q0MWZmOTAsMHhmMjJlZDA0MCwweGZmOTAyNDFmLDB4NjBhY2YyM2MKKwkubG9uZwkweDg4MDAwMDAwLDB4MDAwMGYyMmUsMHg5MDAwZmY1YywweGYyMmU0ODE4CisJLmxvbmcJMHhmZjg0ZjIzYywweDkwMDAwMDAwLDB4MDAwMGYyMDEsMHhhODAwODNhZQorCS5sb25nCTB4ZmY2NDAwYWUsMHgwMDAwMTA0OCwweGZmNjQxMjJlLDB4ZmY2MjAyMDEKKwkubG9uZwkweDAwMTM2NjFjLDB4MDgyZTAwMDMsMHhmZjY0NTZjMSwweDIwMmVmZjVjCisJLmxvbmcJMHg2MWZmMDAwMCwweDNmYWE4MTJlLDB4ZmY2NGYyMTAsMHhkMDgwNGU3NQorCS5sb25nCTB4MmYwMjMyMmUsMHhmZjg0MjQwMSwweDAyODEwMDAwLDB4N2ZmZjAyNDIKKwkubG9uZwkweDgwMDA5MjgwLDB4MDQ4MTAwMDAsMHg2MDAwMDI0MSwweDdmZmY4MjQyCisJLmxvbmcJMHgzZDQxZmY4NCwweGYyMmVkMDQwLDB4ZmY4NDI0MWYsMHg2MGI2ZjIzYworCS5sb25nCTB4ODgwMDAwMDAsMHgwMDAwZjIyZSwweDkwMDBmZjVjLDB4ZjIyZTQ4MTgKKwkubG9uZwkweGZmODRmMjAxLDB4YTgwMGYyM2MsMHg5MDAwMDAwMCwweDAwMDA4M2FlCisJLmxvbmcJMHhmZjY0ZjIwMCwweDAwOThmMjNjLDB4NThiODAwMDIsMHhmMjkzZmY3NAorCS5sb25nCTB4NjAwMGZlODYsMHgwYzAxMDAwNCwweDY3MDBmZGM2LDB4MGMwMTAwMDUKKwkubG9uZwkweDY3ZmYwMDAwLDB4MTQ1ZTBjMDEsMHgwMDAzNjdmZiwweDAwMDAxNDY4CisJLmxvbmcJMHhmMjI4NDgxOCwweDAwMDAwYzAxLDB4MDAwMjY3MDgsMHgxZDdjMDAwNAorCS5sb25nCTB4ZmY2NDRlNzUsMHgxZDdjMDAwMiwweGZmNjQ0ZTc1LDB4NDI0MTEyMmUKKwkubG9uZwkweGZmNGZlNzA5LDB4ODIyZWZmNGUsMHg2NjE4ZjIyOSwweGQwODAwMDAwCisJLmxvbmcJMHhmMjI4NDgzOCwweDAwMDBmMjAwLDB4YTgwMGUxOTgsMHgxZDQwZmY2NAorCS5sb25nCTB4NGU3NTMyM2IsMHgxMjBhNGVmYiwweDEwMDY0YWZjLDB4MDAzMGZmZGMKKwkubG9uZwkweGZmZGNmZmRjLDB4MDA2MDAwZjgsMHgwMDZlMDAwMCwweDAwMDBmZmRjCisJLmxvbmcJMHhmZmRjZmZkYywweDAwNjAwMDdjLDB4MDA2ZTAwMDAsMHgwMDAwZmZkYworCS5sb25nCTB4ZmZkY2ZmZGMsMHgwMDYwMDA3YywweDAwNmUwMDAwLDB4MDAwMDAwNjAKKwkubG9uZwkweDAwNjAwMDYwLDB4MDA2MDAwNjAsMHgwMDZlMDAwMCwweDAwMDAwMTE0CisJLmxvbmcJMHgwMDljMDA5YywweDAwNjAwMGJjLDB4MDA2ZTAwMDAsMHgwMDAwMDA2ZQorCS5sb25nCTB4MDA2ZTAwNmUsMHgwMDZlMDA2ZSwweDAwNmUwMDAwLDB4MDAwMDYxZmYKKwkubG9uZwkweDAwMDAxMzg4LDB4MDIyZTAwZjcsMHhmZjY0NGU3NSwweDYxZmYwMDAwCisJLmxvbmcJMHgxMzdhMDIyZSwweDAwZjdmZjY0LDB4NGU3NTNkNjgsMHgwMDAwZmY4NAorCS5sb25nCTB4MjAyODAwMDQsMHgwOGMwMDAxZiwweDJkNDBmZjg4LDB4MmQ2ODAwMDgKKwkubG9uZwkweGZmOGM0MWVlLDB4ZmY4NDYwMDAsMHhmZjQyMmQ2OSwweDAwMDBmZjg0CisJLmxvbmcJMHgyMDI5MDAwNCwweDA4YzAwMDFmLDB4MmQ0MGZmODgsMHgyZDY5MDAwOAorCS5sb25nCTB4ZmY4YzQzZWUsMHhmZjg0NjAwMCwweGZmMjIzZDY5LDB4MDAwMGZmOTAKKwkubG9uZwkweDNkNjgwMDAwLDB4ZmY4NDIwMjksMHgwMDA0MDhjMCwweDAwMWYyZDQwCisJLmxvbmcJMHhmZjk0MjAyOCwweDAwMDQwOGMwLDB4MDAxZjJkNDAsMHhmZjg4MmQ2OQorCS5sb25nCTB4MDAwOGZmOTgsMHgyZDY4MDAwOCwweGZmOGM0M2VlLDB4ZmY5MDQxZWUKKwkubG9uZwkweGZmODQ2MDAwLDB4ZmVlNjEwMjgsMHgwMDAwMTIyOSwweDAwMDBiMTAxCisJLmxvbmcJMHg2YjAwZmY3OCwweDRhMDA2YjAyLDB4NGU3NTFkN2MsMHgwMDA4ZmY2NAorCS5sb25nCTB4NGU3NTEwMjgsMHgwMDAwMTIyOSwweDAwMDBiMTAxLDB4NmIwMGZmN2MKKwkubG9uZwkweDRhMDA2YTAyLDB4NGU3NTFkN2MsMHgwMDA4ZmY2NCwweDRlNzUyZDQwCisJLmxvbmcJMHhmZjVjNDI0MSwweDEyMmVmZjRmLDB4ZTcwOTgyMmUsMHhmZjRlNjYwMAorCS5sb25nCTB4MDJhMDNkNjksMHgwMDAwZmY5MCwweDJkNjkwMDA0LDB4ZmY5NDJkNjkKKwkubG9uZwkweDAwMDhmZjk4LDB4M2Q2ODAwMDAsMHhmZjg0MmQ2OCwweDAwMDRmZjg4CisJLmxvbmcJMHgyZDY4MDAwOCwweGZmOGM2MWZmLDB4MDAwMDExOWEsMHgyZjAwNjFmZgorCS5sb25nCTB4MDAwMDEyM2UsMHhkMDlmMGM4MCwweGZmZmZjMDAxLDB4NjcwMDAwZjgKKwkubG9uZwkweDZkMDAwMDY0LDB4MGM4MDAwMDAsMHg0MDAwNjcwMCwweDAxZGE2ZTAwCisJLmxvbmcJMHgwMTIyZjIyZSwweGQwODBmZjkwLDB4ZjIyZTkwMDAsMHhmZjVjZjIzYworCS5sb25nCTB4ODgwMDAwMDAsMHgwMDAwZjIyZSwweDQ4MjdmZjg0LDB4ZjIwMWE4MDAKKwkubG9uZwkweGYyM2M5MDAwLDB4MDAwMDAwMDAsMHg4M2FlZmY2NCwweGYyMmVmMDgwCisJLmxvbmcJMHhmZjg0MmYwMiwweDMyMmVmZjg0LDB4MjQwMTAyODEsMHgwMDAwN2ZmZgorCS5sb25nCTB4MDI0MjgwMDAsMHg5MjgwODI0MiwweDNkNDFmZjg0LDB4MjQxZmYyMmUKKwkubG9uZwkweGQwODBmZjg0LDB4NGU3NWYyMmUsMHhkMDgwZmY5MCwweGYyMmU5MDAwCisJLmxvbmcJMHhmZjVjZjIzYywweDg4MDAwMDAwLDB4MDAwMGYyMmUsMHg0ODI3ZmY4NAorCS5sb25nCTB4ZjIwMWE4MDAsMHhmMjNjOTAwMCwweDAwMDAwMDAwLDB4ODNhZWZmNjQKKwkubG9uZwkweDAwYWUwMDAwLDB4MTA0OGZmNjQsMHgxMjJlZmY2MiwweDAyMDEwMDEzCisJLmxvbmcJMHg2NjIwMDgyZSwweDAwMDNmZjY0LDB4NTZjMTIwMmUsMHhmZjVjMDIwMAorCS5sb25nCTB4MDAzMDYxZmYsMHgwMDAwM2M5OCwweDgxMmVmZjY0LDB4ZjIxMGQwODAKKwkubG9uZwkweDRlNzVmMjJlLDB4ZjA4MGZmODQsMHgyZjAyMzIyZSwweGZmODQyNDAxCisJLmxvbmcJMHgwMjgxMDAwMCwweDdmZmY5MjgwLDB4MDQ4MTAwMDAsMHg2MDAwMDI0MQorCS5sb25nCTB4N2ZmZjAyNDIsMHg4MDAwODI0MiwweDNkNDFmZjg0LDB4MjQxZmYyMmUKKwkubG9uZwkweGQwNDBmZjg0LDB4NjBhY2YyMmUsMHhkMDgwZmY5MCwweGYyMmU5MDAwCisJLmxvbmcJMHhmZjVjZjIzYywweDg4MDAwMDAwLDB4MDAwMGYyMmUsMHg0ODI3ZmY4NAorCS5sb25nCTB4ZjIwMWE4MDAsMHhmMjNjOTAwMCwweDAwMDAwMDAwLDB4ODNhZWZmNjQKKwkubG9uZwkweGYyMDAwMDk4LDB4ZjIzYzU4YjgsMHgwMDAyZjI5MywweGZmNjQ2MDAwCisJLmxvbmcJMHhmZjBjMDhlZSwweDAwMDNmZjY2LDB4ZjIyZWQwODAsMHhmZjkwZjIzYworCS5sb25nCTB4OTAwMDAwMDAsMHgwMDEwZjIzYywweDg4MDAwMDAwLDB4MDAwMGYyMmUKKwkubG9uZwkweDQ4MjdmZjg0LDB4ZjIwMWE4MDAsMHhmMjNjOTAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHg4M2FlZmY2NCwweDEyMmVmZjYyLDB4MDIwMTAwMGIsMHg2NjIwZjIyZQorCS5sb25nCTB4ZjA4MGZmODQsMHg0MWVlZmY4NCwweDIyMmVmZjVjLDB4NjFmZjAwMDAKKwkubG9uZwkweDNiNTY4MTJlLDB4ZmY2NGYyMmUsMHhkMDgwZmY4NCwweDRlNzVmMjJlCisJLmxvbmcJMHhkMDQwZmY5MCwweGYyMmU5MDAwLDB4ZmY1Y2YyM2MsMHg4ODAwMDAwMAorCS5sb25nCTB4MDAwMGYyMmUsMHg0OGE3ZmY4NCwweGYyM2M5MDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweGYyMmVmMDQwLDB4ZmY4NDJmMDIsMHgzMjJlZmY4NCwweDI0MDEwMjgxCisJLmxvbmcJMHgwMDAwN2ZmZiwweDAyNDI4MDAwLDB4OTI4MDA2ODEsMHgwMDAwNjAwMAorCS5sb25nCTB4MDI0MTdmZmYsMHg4MjQyM2Q0MSwweGZmODQyNDFmLDB4ZjIyZWQwNDAKKwkubG9uZwkweGZmODQ2MDAwLDB4ZmY4YWYyMmUsMHhkMDgwZmY5MCwweGYyMmU5MDAwCisJLmxvbmcJMHhmZjVjZjIzYywweDg4MDAwMDAwLDB4MDAwMGYyMmUsMHg0ODI3ZmY4NAorCS5sb25nCTB4ZjIwMWE4MDAsMHhmMjNjOTAwMCwweDAwMDAwMDAwLDB4ODNhZWZmNjQKKwkubG9uZwkweGYyMDAwMDk4LDB4ZjIzYzU4YjgsMHgwMDAyZjI5MiwweGZlMjBmMjk0CisJLmxvbmcJMHhmZjEyZjIyZSwweGQwNDBmZjkwLDB4MjIyZWZmNWMsMHgwMjAxMDBjMAorCS5sb25nCTB4MDAwMTAwMTAsMHhmMjAxOTAwMCwweGYyM2M4ODAwLDB4MDAwMDAwMDAKKwkubG9uZwkweGYyMmU0OGE3LDB4ZmY4NGYyM2MsMHg5MDAwMDAwMCwweDAwMDBmMjAwCisJLmxvbmcJMHgwNDk4ZjIzYywweDU4YjgwMDAyLDB4ZjI5M2ZkZTIsMHg2MDAwZmVkNAorCS5sb25nCTB4MzIzYjEyMGEsMHg0ZWZiMTAwNiwweDRhZmMwMDMwLDB4ZmQ1NjAwNzIKKwkubG9uZwkweDAwNzgwMDZjLDB4ZmQ1NjAwNjYsMHgwMDAwMDAwMCwweDAwNzIwMDcyCisJLmxvbmcJMHgwMDYwMDA2YywweDAwNzIwMDY2LDB4MDAwMDAwMDAsMHgwMDdlMDA2MAorCS5sb25nCTB4MDA3ZTAwNmMsMHgwMDdlMDA2NiwweDAwMDAwMDAwLDB4MDA2YzAwNmMKKwkubG9uZwkweDAwNmMwMDZjLDB4MDA2YzAwNjYsMHgwMDAwMDAwMCwweGZkNTYwMDcyCisJLmxvbmcJMHgwMDc4MDA2YywweGZkNTYwMDY2LDB4MDAwMDAwMDAsMHgwMDY2MDA2NgorCS5sb25nCTB4MDA2NjAwNjYsMHgwMDY2MDA2NiwweDAwMDAwMDAwLDB4NjBmZjAwMDAKKwkubG9uZwkweDEwMWU2MGZmLDB4MDAwMDBmOTQsMHg2MGZmMDAwMCwweDBmOGU2MGZmCisJLmxvbmcJMHhmZmZmZWQwZSwweDYwZmZmZmZmLDB4ZWQ2MjYwZmYsMHhmZmZmZWQyZQorCS5sb25nCTB4MmQ0MGZmNWMsMHg0MjQxMTIyZSwweGZmNGZlNzA5LDB4ODIyZWZmNGUKKwkubG9uZwkweDY2MDAwMjdjLDB4M2Q2OTAwMDAsMHhmZjkwMmQ2OSwweDAwMDRmZjk0CisJLmxvbmcJMHgyZDY5MDAwOCwweGZmOTgzZDY4LDB4MDAwMGZmODQsMHgyZDY4MDAwNAorCS5sb25nCTB4ZmY4ODJkNjgsMHgwMDA4ZmY4YywweDYxZmYwMDAwLDB4MGU1ODJmMDAKKwkubG9uZwkweDYxZmYwMDAwLDB4MGVmYzQ0OTcsMHhkMTk3MzIyZSwweGZmNWVlYzA5CisJLmxvbmcJMHgyMDFmMGM4MCwweGZmZmZjMDAxLDB4NmYwMDAwNjQsMHgwYzgwMDAwMAorCS5sb25nCTB4M2ZmZjY3MDAsMHgwMWI2NmUwMCwweDAxMDBmMjJlLDB4ZDA4MGZmOTAKKwkubG9uZwkweGYyMmU5MDAwLDB4ZmY1Y2YyM2MsMHg4ODAwMDAwMCwweDAwMDBmMjJlCisJLmxvbmcJMHg0ODI0ZmY4NCwweGYyMDFhODAwLDB4ZjIzYzkwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4ODNhZWZmNjQsMHhmMjJlZjA4MCwweGZmODQyZjAyLDB4MzIyZWZmODQKKwkubG9uZwkweDI0MDEwMjgxLDB4MDAwMDdmZmYsMHgwMjQyODAwMCwweDkyODA4MjQyCisJLmxvbmcJMHgzZDQxZmY4NCwweDI0MWZmMjJlLDB4ZDA4MGZmODQsMHg0ZTc1ZjIyZQorCS5sb25nCTB4ZDA4MGZmOTAsMHhmMjJlOTAwMCwweGZmNWNmMjNjLDB4ODgwMDAwMDAKKwkubG9uZwkweDAwMDBmMjJlLDB4NDgyNGZmODQsMHhmMjAxYTgwMCwweGYyM2M5MDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDgzYWVmZjY0LDB4ZjIyN2UwMDEsMHgzMjE3ZGZmYworCS5sb25nCTB4MDAwMDAwMGMsMHgwMjgxMDAwMCwweDdmZmY5MjgwLDB4MGM4MTAwMDAKKwkubG9uZwkweDdmZmY2ZDkwLDB4MDA2ZTEwNDgsMHhmZjY2MTIyZSwweGZmNjIwMjAxCisJLmxvbmcJMHgwMDEzNjYyMCwweDA4MmUwMDAzLDB4ZmY2NDU2YzEsMHgyMDJlZmY1YworCS5sb25nCTB4MDIwMDAwMzAsMHg2MWZmMDAwMCwweDM5MzY4MTJlLDB4ZmY2NGYyMTAKKwkubG9uZwkweGQwODA0ZTc1LDB4ZjIyZWYwODAsMHhmZjg0MmYwMiwweDMyMmVmZjg0CisJLmxvbmcJMHgyNDAxMDI4MSwweDAwMDA3ZmZmLDB4MDI0MjgwMDAsMHg5MjgwMDQ4MQorCS5sb25nCTB4MDAwMDYwMDAsMHgwMjQxN2ZmZiwweDgyNDIzZDQxLDB4ZmY4NDI0MWYKKwkubG9uZwkweGYyMmVkMDQwLDB4ZmY4NDYwYWMsMHgwOGVlMDAwMywweGZmNjZmMjJlCisJLmxvbmcJMHhkMDgwZmY5MCwweGYyM2M5MDAwLDB4MDAwMDAwMTAsMHhmMjNjODgwMAorCS5sb25nCTB4MDAwMDAwMDAsMHhmMjJlNDgyNCwweGZmODRmMjAxLDB4YTgwMGYyM2MKKwkubG9uZwkweDkwMDAwMDAwLDB4MDAwMDgzYWUsMHhmZjY0MTIyZSwweGZmNjIwMjAxCisJLmxvbmcJMHgwMDBiNjYyMCwweGYyMmVmMDgwLDB4ZmY4NDQxZWUsMHhmZjg0MjIyZQorCS5sb25nCTB4ZmY1YzYxZmYsMHgwMDAwMzgzMCwweDgxMmVmZjY0LDB4ZjIyZWQwODAKKwkubG9uZwkweGZmODQ0ZTc1LDB4ZjIyZWQwNDAsMHhmZjkwZjIyZSwweDkwMDBmZjVjCisJLmxvbmcJMHhmMjNjODgwMCwweDAwMDAwMDAwLDB4ZjIyZTQ4YTQsMHhmZjg0ZjIzYworCS5sb25nCTB4OTAwMDAwMDAsMHgwMDAwZjIyZSwweGYwNDBmZjg0LDB4MmYwMjMyMmUKKwkubG9uZwkweGZmODQyNDAxLDB4MDI4MTAwMDAsMHg3ZmZmMDI0MiwweDgwMDA5MjgwCisJLmxvbmcJMHgwNjgxMDAwMCwweDYwMDAwMjQxLDB4N2ZmZjgyNDIsMHgzZDQxZmY4NAorCS5sb25nCTB4MjQxZmYyMmUsMHhkMDQwZmY4NCwweDYwOGFmMjJlLDB4ZDA4MGZmOTAKKwkubG9uZwkweGYyMmU5MDAwLDB4ZmY1Y2YyM2MsMHg4ODAwMDAwMCwweDAwMDBmMjJlCisJLmxvbmcJMHg0ODI0ZmY4NCwweGYyMDFhODAwLDB4ZjIzYzkwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4ODNhZWZmNjQsMHhmMjAwMDA5OCwweGYyM2M1OGI4LDB4MDAwMWYyOTIKKwkubG9uZwkweGZlNDRmMjk0LDB4ZmYxNGYyMmUsMHhkMDQwZmY5MCwweDQyODEwMDAxCisJLmxvbmcJMHgwMDEwZjIwMSwweDkwMDBmMjNjLDB4ODgwMDAwMDAsMHgwMDAwZjIyZQorCS5sb25nCTB4NDhhNGZmODQsMHhmMjNjOTAwMCwweDAwMDAwMDAwLDB4ZjIwMDA0OTgKKwkubG9uZwkweGYyM2M1OGI4LDB4MDAwMWYyOTMsMHhmZTBjNjAwMCwweGZlZGMzMjNiCisJLmxvbmcJMHgxMjBhNGVmYiwweDEwMDY0YWZjLDB4MDAzMGZkN2EsMHgwMDcyMDA3OAorCS5sb25nCTB4MDA2MGZkN2EsMHgwMDY2MDAwMCwweDAwMDAwMDc4LDB4MDA2YzAwNzgKKwkubG9uZwkweDAwNjAwMDc4LDB4MDA2NjAwMDAsMHgwMDAwMDA3ZSwweDAwN2UwMDZjCisJLmxvbmcJMHgwMDYwMDA3ZSwweDAwNjYwMDAwLDB4MDAwMDAwNjAsMHgwMDYwMDA2MAorCS5sb25nCTB4MDA2MDAwNjAsMHgwMDY2MDAwMCwweDAwMDBmZDdhLDB4MDA3MjAwNzgKKwkubG9uZwkweDAwNjBmZDdhLDB4MDA2NjAwMDAsMHgwMDAwMDA2NiwweDAwNjYwMDY2CisJLmxvbmcJMHgwMDY2MDA2NiwweDAwNjYwMDAwLDB4MDAwMDYwZmYsMHgwMDAwMGM3YworCS5sb25nCTB4NjBmZjAwMDAsMHgwYzc2NjBmZiwweDAwMDAwY2Y0LDB4NjBmZmZmZmYKKwkubG9uZwkweGYwY2U2MGZmLDB4ZmZmZmYwOWMsMHg2MGZmZmZmZiwweGYwZjQwMjAwCisJLmxvbmcJMHgwMDMwMDAwMCwweDAwNDA2MDA4LDB4MDIwMDAwMzAsMHgwMDAwMDA4MAorCS5sb25nCTB4MmQ0MGZmNWMsMHg0MjQxMTIyZSwweGZmNGZlNzA5LDB4ODIyZWZmNGUKKwkubG9uZwkweDY2MDAwMjRjLDB4NjFmZjAwMDAsMHgwYTVjZjIyZSwweGQwODBmZjkwCisJLmxvbmcJMHhmMjNjODgwMCwweDAwMDAwMDAwLDB4ZjIyZTkwMDAsMHhmZjVjZjIyZQorCS5sb25nCTB4NDgyMmZmODQsMHhmMjNjOTAwMCwweDAwMDAwMDAwLDB4ZjIwMWE4MDAKKwkubG9uZwkweDgzYWVmZjY0LDB4ZjI4MTAwM2MsMHgyZjAyZjIyNywweGUwMDEzMjJlCisJLmxvbmcJMHhmZjVlZWMwOSwweDM0MTcwMjgyLDB4MDAwMDdmZmYsMHg5NDgwYjRiYgorCS5sb25nCTB4MTQyNDZjMzgsMHhiNGJiMTQyYSwweDZkMDAwMGI4LDB4NjcwMDAxODQKKwkubG9uZwkweDMyMTcwMjQxLDB4ODAwMDgyNDIsMHgzZTgxZjIxZiwweGQwODAyNDFmCisJLmxvbmcJMHg0ZTc1NGU3NSwweDAwMDA3ZmZmLDB4MDAwMDQwN2YsMHgwMDAwNDNmZgorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwM2Y4MSwweDAwMDAzYzAxLDB4MDBhZTAwMDAKKwkubG9uZwkweDEwNDhmZjY0LDB4MTIyZWZmNjIsMHgwMjAxMDAxMywweDY2MjRkZmZjCisJLmxvbmcJMHgwMDAwMDAwYywweDA4MmUwMDAzLDB4ZmY2NDU2YzEsMHgyMDJlZmY1YworCS5sb25nCTB4NjFmZjAwMDAsMHgzNjZhODEyZSwweGZmNjRmMjEwLDB4ZDA4MDI0MWYKKwkubG9uZwkweDRlNzUxMjJlLDB4ZmY1YzAyMDEsMHgwMGMwNjYxYSwweDMyMTcwMjQxCisJLmxvbmcJMHg4MDAwMDQ4MiwweDAwMDA2MDAwLDB4MDI0MjdmZmYsMHg4MjQyM2U4MQorCS5sb25nCTB4ZjIxZmQwNDAsMHg2MGJlZjIyZSwweGQwODBmZjkwLDB4MjIyZWZmNWMKKwkubG9uZwkweDAyMDEwMDMwLDB4ZjIwMTkwMDAsMHhmMjJlNDgyMiwweGZmODRmMjNjCisJLmxvbmcJMHg5MDAwMDAwMCwweDAwMDBkZmZjLDB4MDAwMDAwMGMsMHhmMjI3ZTAwMQorCS5sb25nCTB4NjBiYTA4ZWUsMHgwMDAzZmY2NiwweGRmZmMwMDAwLDB4MDAwY2YyMmUKKwkubG9uZwkweGQwODBmZjkwLDB4ZjIzYzkwMDAsMHgwMDAwMDAxMCwweGYyM2M4ODAwCisJLmxvbmcJMHgwMDAwMDAwMCwweGYyMmU0ODIyLDB4ZmY4NGYyM2MsMHg5MDAwMDAwMAorCS5sb25nCTB4MDAwMGYyMDEsMHhhODAwODNhZSwweGZmNjQxMjJlLDB4ZmY2MjAyMDEKKwkubG9uZwkweDAwMGI2NjIyLDB4ZjIyZWYwODAsMHhmZjg0NDFlZSwweGZmODQyMjJlCisJLmxvbmcJMHhmZjVjNjFmZiwweDAwMDAzNGJhLDB4ODEyZWZmNjQsMHhmMjJlZDA4MAorCS5sb25nCTB4ZmY4NDI0MWYsMHg0ZTc1ZjIyZSwweGQwNDBmZjkwLDB4MjIyZWZmNWMKKwkubG9uZwkweDAyMDEwMGMwLDB4NjY0ZWYyMmUsMHg5MDAwZmY1YywweGYyM2M4ODAwCisJLmxvbmcJMHgwMDAwMDAwMCwweGYyMmU0OGEyLDB4ZmY4NGYyM2MsMHg5MDAwMDAwMAorCS5sb25nCTB4MDAwMGYyMmUsMHhmMDQwZmY4NCwweDMyMmVmZjg0LDB4MjQwMTAyODEKKwkubG9uZwkweDAwMDA3ZmZmLDB4MDI0MjgwMDAsMHg5MjgwMDY4MSwweDAwMDA2MDAwCisJLmxvbmcJMHgwMjQxN2ZmZiwweDgyNDIzZDQxLDB4ZmY4NGYyMmUsMHhkMDQwZmY4NAorCS5sb25nCTB4NjAwMGZmODIsMHgyMjJlZmY1YywweDAyMDEwMDMwLDB4ZjIwMTkwMDAKKwkubG9uZwkweDYwYWEyMjJlLDB4ZmY1YzAyMDEsMHgwMGMwNjcwMCwweGZlNzQyMjJmCisJLmxvbmcJMHgwMDA0MGM4MSwweDgwMDAwMDAwLDB4NjYwMGZlNjYsMHg0YWFmMDAwOAorCS5sb25nCTB4NjYwMGZlNWUsMHgwODJlMDAwMSwweGZmNjY2NzAwLDB4ZmU1NGYyMmUKKwkubG9uZwkweGQwNDBmZjkwLDB4MjIyZWZmNWMsMHgwMjAxMDBjMCwweDAwMDEwMDEwCisJLmxvbmcJMHhmMjAxOTAwMCwweGYyM2M4ODAwLDB4MDAwMDAwMDAsMHhmMjJlNDhhMgorCS5sb25nCTB4ZmY4NGYyM2MsMHg5MDAwMDAwMCwweDAwMDBmMjAwLDB4MDAxOGYyMDAKKwkubG9uZwkweDA0OThmMjAwLDB4MDQzOGYyOTIsMHhmZWNhNjAwMCwweGZlMTQzMjNiCisJLmxvbmcJMHgxMjBhNGVmYiwweDEwMDY0YWZjLDB4MDAzMGZkYWEsMHgwMGU0MDExYworCS5sb25nCTB4MDA2MGZkYWEsMHgwMDY2MDAwMCwweDAwMDAwMGJjLDB4MDA2YzAxMWMKKwkubG9uZwkweDAwNjAwMGJjLDB4MDA2NjAwMDAsMHgwMDAwMDEzMCwweDAxMzAwMTBjCisJLmxvbmcJMHgwMDYwMDEzMCwweDAwNjYwMDAwLDB4MDAwMDAwNjAsMHgwMDYwMDA2MAorCS5sb25nCTB4MDA2MDAwNjAsMHgwMDY2MDAwMCwweDAwMDBmZGFhLDB4MDBlNDAxMWMKKwkubG9uZwkweDAwNjBmZGFhLDB4MDA2NjAwMDAsMHgwMDAwMDA2NiwweDAwNjYwMDY2CisJLmxvbmcJMHgwMDY2MDA2NiwweDAwNjYwMDAwLDB4MDAwMDYwZmYsMHgwMDAwMDk3YworCS5sb25nCTB4NjBmZjAwMDAsMHgwOTc2MTAyOCwweDAwMDAxMjI5LDB4MDAwMGIxMDEKKwkubG9uZwkweDZiMDAwMDE2LDB4NGEwMDZiMmUsMHhmMjNjNDQwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgxZDdjMDAwNCwweGZmNjQ0ZTc1LDB4MTIyZWZmNWYsMHgwMjAxMDAzMAorCS5sb25nCTB4MGMwMTAwMjAsMHg2NzEwZjIzYywweDQ0MDAwMDAwLDB4MDAwMDFkN2MKKwkubG9uZwkweDAwMDRmZjY0LDB4NGU3NWYyM2MsMHg0NDAwODAwMCwweDAwMDAxZDdjCisJLmxvbmcJMHgwMDBjZmY2NCwweDRlNzUzZDY4LDB4MDAwMGZmODQsMHgyZDY4MDAwNAorCS5sb25nCTB4ZmY4ODJkNjgsMHgwMDA4ZmY4YywweDYxZmYwMDAwLDB4MDgyODQyNmUKKwkubG9uZwkweGZmOTA0MmFlLDB4ZmY5NDQyYWUsMHhmZjk4NjAwMCwweGZjY2UzZDY5CisJLmxvbmcJMHgwMDAwZmY5MCwweDJkNjkwMDA0LDB4ZmY5NDJkNjksMHgwMDA4ZmY5OAorCS5sb25nCTB4NjFmZjAwMDAsMHgwOGFjNDI2ZSwweGZmODQ0MmFlLDB4ZmY4ODQyYWUKKwkubG9uZwkweGZmOGM2MDAwLDB4ZmNhNjEwMjgsMHgwMDAwMTIyOSwweDAwMDBiMzAwCisJLmxvbmcJMHg2YmZmMDAwMCwweDA5NGFmMjI4LDB4ZDA4MDAwMDAsMHg0YTI4MDAwMAorCS5sb25nCTB4NmExYzFkN2MsMHgwMDBhZmY2NCwweDRlNzVmMjI5LDB4ZDA4MDAwMDAKKwkubG9uZwkweDRhMjkwMDAwLDB4NmEwODFkN2MsMHgwMDBhZmY2NCwweDRlNzUxZDdjCisJLmxvbmcJMHgwMDAyZmY2NCwweDRlNzUwMjAwLDB4MDAzMDAwMDAsMHgwMDQwNjAwOAorCS5sb25nCTB4MDIwMDAwMzAsMHgwMDAwMDA4MCwweDJkNDBmZjVjLDB4NDI0MTEyMmUKKwkubG9uZwkweGZmNGZlNzA5LDB4ODIyZWZmNGUsMHg2NjAwMDI0YywweDYxZmYwMDAwCisJLmxvbmcJMHgwNjk0ZjIyZSwweGQwODBmZjkwLDB4ZjIzYzg4MDAsMHgwMDAwMDAwMAorCS5sb25nCTB4ZjIyZTkwMDAsMHhmZjVjZjIyZSwweDQ4MjhmZjg0LDB4ZjIzYzkwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4ZjIwMWE4MDAsMHg4M2FlZmY2NCwweGYyODEwMDNjCisJLmxvbmcJMHgyZjAyZjIyNywweGUwMDEzMjJlLDB4ZmY1ZWVjMDksMHgzNDE3MDI4MgorCS5sb25nCTB4MDAwMDdmZmYsMHg5NDgwYjRiYiwweDE0MjQ2YzM4LDB4YjRiYjE0MmEKKwkubG9uZwkweDZkMDAwMGI4LDB4NjcwMDAxODQsMHgzMjE3MDI0MSwweDgwMDA4MjQyCisJLmxvbmcJMHgzZTgxZjIxZiwweGQwODAyNDFmLDB4NGU3NTRlNzUsMHgwMDAwN2ZmZgorCS5sb25nCTB4MDAwMDQwN2YsMHgwMDAwNDNmZiwweDAwMDAwMDAwLDB4MDAwMDNmODEKKwkubG9uZwkweDAwMDAzYzAxLDB4MDBhZTAwMDAsMHgxMDQ4ZmY2NCwweDEyMmVmZjYyCisJLmxvbmcJMHgwMjAxMDAxMywweDY2MjRkZmZjLDB4MDAwMDAwMGMsMHgwODJlMDAwMworCS5sb25nCTB4ZmY2NDU2YzEsMHgyMDJlZmY1YywweDYxZmYwMDAwLDB4MzJhMjgxMmUKKwkubG9uZwkweGZmNjRmMjEwLDB4ZDA4MDI0MWYsMHg0ZTc1MTIyZSwweGZmNWMwMjAxCisJLmxvbmcJMHgwMGMwNjYxYSwweDMyMTcwMjQxLDB4ODAwMDA0ODIsMHgwMDAwNjAwMAorCS5sb25nCTB4MDI0MjdmZmYsMHg4MjQyM2U4MSwweGYyMWZkMDQwLDB4NjBiZWYyMmUKKwkubG9uZwkweGQwODBmZjkwLDB4MjIyZWZmNWMsMHgwMjAxMDAzMCwweGYyMDE5MDAwCisJLmxvbmcJMHhmMjJlNDgyOCwweGZmODRmMjNjLDB4OTAwMDAwMDAsMHgwMDAwZGZmYworCS5sb25nCTB4MDAwMDAwMGMsMHhmMjI3ZTAwMSwweDYwYmEwOGVlLDB4MDAwM2ZmNjYKKwkubG9uZwkweGRmZmMwMDAwLDB4MDAwY2YyMmUsMHhkMDgwZmY5MCwweGYyM2M5MDAwCisJLmxvbmcJMHgwMDAwMDAxMCwweGYyM2M4ODAwLDB4MDAwMDAwMDAsMHhmMjJlNDgyOAorCS5sb25nCTB4ZmY4NGYyM2MsMHg5MDAwMDAwMCwweDAwMDBmMjAxLDB4YTgwMDgzYWUKKwkubG9uZwkweGZmNjQxMjJlLDB4ZmY2MjAyMDEsMHgwMDBiNjYyMiwweGYyMmVmMDgwCisJLmxvbmcJMHhmZjg0NDFlZSwweGZmODQyMjJlLDB4ZmY1YzYxZmYsMHgwMDAwMzBmMgorCS5sb25nCTB4ODEyZWZmNjQsMHhmMjJlZDA4MCwweGZmODQyNDFmLDB4NGU3NWYyMmUKKwkubG9uZwkweGQwNDBmZjkwLDB4MjIyZWZmNWMsMHgwMjAxMDBjMCwweDY2NGVmMjJlCisJLmxvbmcJMHg5MDAwZmY1YywweGYyM2M4ODAwLDB4MDAwMDAwMDAsMHhmMjJlNDhhOAorCS5sb25nCTB4ZmY4NGYyM2MsMHg5MDAwMDAwMCwweDAwMDBmMjJlLDB4ZjA0MGZmODQKKwkubG9uZwkweDMyMmVmZjg0LDB4MjQwMTAyODEsMHgwMDAwN2ZmZiwweDAyNDI4MDAwCisJLmxvbmcJMHg5MjgwMDY4MSwweDAwMDA2MDAwLDB4MDI0MTdmZmYsMHg4MjQyM2Q0MQorCS5sb25nCTB4ZmY4NGYyMmUsMHhkMDQwZmY4NCwweDYwMDBmZjgyLDB4MjIyZWZmNWMKKwkubG9uZwkweDAyMDEwMDMwLDB4ZjIwMTkwMDAsMHg2MGFhMjIyZSwweGZmNWMwMjAxCisJLmxvbmcJMHgwMGMwNjcwMCwweGZlNzQyMjJmLDB4MDAwNDBjODEsMHg4MDAwMDAwMAorCS5sb25nCTB4NjYwMGZlNjYsMHg0YWFmMDAwOCwweDY2MDBmZTVlLDB4MDgyZTAwMDEKKwkubG9uZwkweGZmNjY2NzAwLDB4ZmU1NGYyMmUsMHhkMDQwZmY5MCwweDIyMmVmZjVjCisJLmxvbmcJMHgwMjAxMDBjMCwweDAwMDEwMDEwLDB4ZjIwMTkwMDAsMHhmMjNjODgwMAorCS5sb25nCTB4MDAwMDAwMDAsMHhmMjJlNDhhOCwweGZmODRmMjNjLDB4OTAwMDAwMDAKKwkubG9uZwkweDAwMDBmMjAwLDB4MDAxOGYyMDAsMHgwNDk4ZjIwMCwweDA0MzhmMjkyCisJLmxvbmcJMHhmZWNhNjAwMCwweGZlMTQzMjNiLDB4MTIwYTRlZmIsMHgxMDA2NGFmYworCS5sb25nCTB4MDAzMGZkYWEsMHgwMGUyMDExYSwweDAwNjBmZGFhLDB4MDA2NjAwMDAKKwkubG9uZwkweDAwMDAwMGJhLDB4MDA2YzAxMWEsMHgwMDYwMDBiYSwweDAwNjYwMDAwCisJLmxvbmcJMHgwMDAwMDEzMCwweDAxMzAwMTBhLDB4MDA2MDAxMzAsMHgwMDY2MDAwMAorCS5sb25nCTB4MDAwMDAwNjAsMHgwMDYwMDA2MCwweDAwNjAwMDYwLDB4MDA2NjAwMDAKKwkubG9uZwkweDAwMDBmZGFhLDB4MDBlMjAxMWEsMHgwMDYwZmRhYSwweDAwNjYwMDAwCisJLmxvbmcJMHgwMDAwMDA2NiwweDAwNjYwMDY2LDB4MDA2NjAwNjYsMHgwMDY2MDAwMAorCS5sb25nCTB4MDAwMDYwZmYsMHgwMDAwMDViNCwweDYwZmYwMDAwLDB4MDVhZTEwMjgKKwkubG9uZwkweDAwMDAxMjI5LDB4MDAwMGIzMDAsMHg2YTE0NGEwMCwweDZiMmVmMjNjCisJLmxvbmcJMHg0NDAwMDAwMCwweDAwMDAxZDdjLDB4MDAwNGZmNjQsMHg0ZTc1MTIyZQorCS5sb25nCTB4ZmY1ZjAyMDEsMHgwMDMwMGMwMSwweDAwMjA2NzEwLDB4ZjIzYzQ0MDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MWQ3YzAwMDQsMHhmZjY0NGU3NSwweGYyM2M0NDAwCisJLmxvbmcJMHg4MDAwMDAwMCwweDFkN2MwMDBjLDB4ZmY2NDRlNzUsMHgzZDY4MDAwMAorCS5sb25nCTB4ZmY4NDJkNjgsMHgwMDA0ZmY4OCwweDJkNjgwMDA4LDB4ZmY4YzYxZmYKKwkubG9uZwkweDAwMDAwNDYyLDB4NDI2ZWZmOTAsMHg0MmFlZmY5NCwweDQyYWVmZjk4CisJLmxvbmcJMHg2MDAwZmNkMCwweDNkNjkwMDAwLDB4ZmY5MDJkNjksMHgwMDA0ZmY5NAorCS5sb25nCTB4MmQ2OTAwMDgsMHhmZjk4NjFmZiwweDAwMDAwNGU2LDB4NDI2ZWZmODQKKwkubG9uZwkweDQyYWVmZjg4LDB4NDJhZWZmOGMsMHg2MDAwZmNhOCwweDEwMjgwMDAwCisJLmxvbmcJMHgxMjI5MDAwMCwweGIzMDA2YWZmLDB4MDAwMDA1ODQsMHhmMjI4ZDA4MAorCS5sb25nCTB4MDAwMGYyMDAsMHgwMDFhZjI5MywweDAwMWUxZDdjLDB4MDAwYWZmNjQKKwkubG9uZwkweDRlNzVmMjI5LDB4ZDA4MDAwMDAsMHg0YTI5MDAwMCwweDZhMDgxZDdjCisJLmxvbmcJMHgwMDBhZmY2NCwweDRlNzUxZDdjLDB4MDAwMmZmNjQsMHg0ZTc1MDIwMAorCS5sb25nCTB4MDAzMDAwMDAsMHgwMDQwNjAwOCwweDAyMDAwMDMwLDB4MDAwMDAwODAKKwkubG9uZwkweDJkNDBmZjVjLDB4NDI0MTEyMmUsMHhmZjRlNjYwMCwweDAyNzQ0YTI4CisJLmxvbmcJMHgwMDAwNmJmZiwweDAwMDAwNTI4LDB4MDIwMDAwYzAsMHg2NjQ4ZjIyZQorCS5sb25nCTB4OTAwMGZmNWMsMHhmMjNjODgwMCwweDAwMDAwMDAwLDB4ZjIxMDQ4MDQKKwkubG9uZwkweGYyMDFhODAwLDB4ODNhZWZmNjQsMHg0ZTc1NGEyOCwweDAwMDA2YmZmCisJLmxvbmcJMHgwMDAwMDRmYywweDAyMDAwMGMwLDB4NjYxYzNkNjgsMHgwMDAwZmY4NAorCS5sb25nCTB4MmQ2ODAwMDQsMHhmZjg4MmQ2OCwweDAwMDhmZjhjLDB4NjFmZjAwMDAKKwkubG9uZwkweDAzYWU2MDAwLDB4MDAzZTBjMDAsMHgwMDQwNjYwMCwweDAwODQzZDY4CisJLmxvbmcJMHgwMDAwZmY4NCwweDJkNjgwMDA0LDB4ZmY4ODJkNjgsMHgwMDA4ZmY4YworCS5sb25nCTB4NjFmZjAwMDAsMHgwMzhhMGM4MCwweDAwMDAwMDdlLDB4NjcwMDAwOTgKKwkubG9uZwkweDZlMDAwMDllLDB4MGM4MGZmZmYsMHhmZjgwNjcwMCwweDAxYTQ2ZDAwCisJLmxvbmcJMHgwMTIwZjIzYywweDg4MDAwMDAwLDB4MDAwMGYyMmUsMHg5MDAwZmY1YworCS5sb25nCTB4ZjIyZTQ4MDQsMHhmZjg0ZjIwMSwweGE4MDBmMjNjLDB4OTAwMDAwMDAKKwkubG9uZwkweDAwMDA4M2FlLDB4ZmY2NDJmMDIsMHhmMjJlZjA4MCwweGZmODQzMjJlCisJLmxvbmcJMHhmZjg0MjQwMSwweDAyODEwMDAwLDB4N2ZmZjkyODAsMHgwMjQyODAwMAorCS5sb25nCTB4ODQ0MTNkNDIsMHhmZjg0MjQxZiwweGYyMmVkMDgwLDB4ZmY4NDRlNzUKKwkubG9uZwkweDNkNjgwMDAwLDB4ZmY4NDJkNjgsMHgwMDA0ZmY4OCwweDJkNjgwMDA4CisJLmxvbmcJMHhmZjhjNjFmZiwweDAwMDAwMzA4LDB4MGM4MDAwMDAsMHgwM2ZlNjcwMAorCS5sb25nCTB4MDAxNjZlMWMsMHgwYzgwZmZmZiwweGZjMDA2NzAwLDB4MDEyNDZkMDAKKwkubG9uZwkweDAwYTA2MDAwLDB4ZmY3ZTA4MmUsMHgwMDAwZmY4NSwweDY2MDBmZjc0CisJLmxvbmcJMHgwOGVlMDAwMywweGZmNjZmMjNjLDB4OTAwMDAwMDAsMHgwMDEwZjIzYworCS5sb25nCTB4ODgwMDAwMDAsMHgwMDAwZjIyZSwweDQ4MDRmZjg0LDB4ZjIwMWE4MDAKKwkubG9uZwkweGYyM2M5MDAwLDB4MDAwMDAwMDAsMHg4M2FlZmY2NCwweDEyMmVmZjYyCisJLmxvbmcJMHgwMjAxMDAwYiwweDY2MjBmMjJlLDB4ZjA4MGZmODQsMHg0MWVlZmY4NAorCS5sb25nCTB4MjIyZWZmNWMsMHg2MWZmMDAwMCwweDJkMjg4MTJlLDB4ZmY2NGYyMmUKKwkubG9uZwkweGQwODBmZjg0LDB4NGU3NTJkNmUsMHhmZjg4ZmY5NCwweDJkNmVmZjhjCisJLmxvbmcJMHhmZjk4MzIyZSwweGZmODQyZjAyLDB4MjQwMTAyODEsMHgwMDAwN2ZmZgorCS5sb25nCTB4MDI0MjgwMDAsMHg5MjgwMDY4MSwweDAwMDA2MDAwLDB4MDI0MTdmZmYKKwkubG9uZwkweDgyNDIzZDQxLDB4ZmY5MGYyMmUsMHhkMDQwZmY5MCwweDI0MWY2MGE2CisJLmxvbmcJMHhmMjNjODgwMCwweDAwMDAwMDAwLDB4ZjIyZTkwMDAsMHhmZjVjZjIyZQorCS5sb25nCTB4NDgwNGZmODQsMHhmMjNjOTAwMCwweDAwMDAwMDAwLDB4ZjIwMWE4MDAKKwkubG9uZwkweDgzYWVmZjY0LDB4MDBhZTAwMDAsMHgxMDQ4ZmY2NCwweDEyMmVmZjYyCisJLmxvbmcJMHgwMjAxMDAxMywweDY2MWMwODJlLDB4MDAwM2ZmNjQsMHg1NmMxMjAyZQorCS5sb25nCTB4ZmY1YzYxZmYsMHgwMDAwMmQ5OCwweDgxMmVmZjY0LDB4ZjIxMGQwODAKKwkubG9uZwkweDRlNzUyZjAyLDB4MzIyZWZmODQsMHgyNDAxMDI4MSwweDAwMDA3ZmZmCisJLmxvbmcJMHgwMjQyODAwMCwweDkyODAwNDgxLDB4MDAwMDYwMDAsMHgwMjQxN2ZmZgorCS5sb25nCTB4ODI0MjNkNDEsMHhmZjg0ZjIyZSwweGQwNDBmZjg0LDB4MjQxZjYwYjYKKwkubG9uZwkweDA4MmUwMDAwLDB4ZmY4NTY2MDAsMHhmZjc4ZjIzYywweDg4MDAwMDAwCisJLmxvbmcJMHgwMDAwZjIyZSwweDkwMDBmZjVjLDB4ZjIyZTQ4MDQsMHhmZjg0ZjIwMQorCS5sb25nCTB4YTgwMGYyM2MsMHg5MDAwMDAwMCwweDAwMDA4M2FlLDB4ZmY2NGYyMDAKKwkubG9uZwkweDAwODBmMjNjLDB4NThiODAwMDEsMHhmMjkzZmY2YSwweDYwMDBmZTQ4CisJLmxvbmcJMHgwYzAxMDAwNCwweDY3MDBmZGI0LDB4MGMwMTAwMDEsMHg2NzE2MGMwMQorCS5sb25nCTB4MDAwMjY3MzYsMHgwYzAxMDAwNSwweDY3ZmYwMDAwLDB4MDIzNjYwZmYKKwkubG9uZwkweDAwMDAwMjQ0LDB4NGEyODAwMDAsMHg2YjEwZjIzYywweDQ0MDAwMDAwCisJLmxvbmcJMHgwMDAwMWQ3YywweDAwMDRmZjY0LDB4NGU3NWYyM2MsMHg0NDAwODAwMAorCS5sb25nCTB4MDAwMDFkN2MsMHgwMDBjZmY2NCwweDRlNzU0YTI4LDB4MDAwMDZiZmYKKwkubG9uZwkweDAwMDAwMjZjLDB4ZjIyOGQwODAsMHgwMDAwMWQ3YywweDAwMDJmZjY0CisJLmxvbmcJMHg0ZTc1MmQ2OCwweDAwMDRmZjg4LDB4MmQ2OTAwMDQsMHhmZjk0MmQ2OAorCS5sb25nCTB4MDAwOGZmOGMsMHgyZDY5MDAwOCwweGZmOTgzMDI4LDB4MDAwMDMyMjkKKwkubG9uZwkweDAwMDAzZDQwLDB4ZmY4NDNkNDEsMHhmZjkwMDI0MCwweDdmZmYwMjQxCisJLmxvbmcJMHg3ZmZmM2Q0MCwweGZmNTQzZDQxLDB4ZmY1NmIwNDEsMHg2Y2ZmMDAwMAorCS5sb25nCTB4MDA1YzYxZmYsMHgwMDAwMDE1YSwweDJmMDAwYzJlLDB4MDAwNGZmNGUKKwkubG9uZwkweDY2MTA0MWVlLDB4ZmY4NDYxZmYsMHgwMDAwMjk0MCwweDQ0NDAzZDQwCisJLmxvbmcJMHhmZjU0MzAyZSwweGZmNTYwNDQwLDB4MDA0MmIwNmUsMHhmZjU0NmMxYQorCS5sb25nCTB4MzAyZWZmNTQsMHhkMDZmMDAwMiwweDMyMmVmZjg0LDB4MDI0MTgwMDAKKwkubG9uZwkweDgwNDEzZDQwLDB4ZmY4NDIwMWYsMHg0ZTc1MDI2ZSwweDgwMDBmZjg0CisJLmxvbmcJMHgwOGVlMDAwMCwweGZmODUyMDFmLDB4NGU3NTYxZmYsMHgwMDAwMDA1NgorCS5sb25nCTB4MmYwMDBjMmUsMHgwMDA0ZmY0ZiwweDY2MTA0MWVlLDB4ZmY5MDYxZmYKKwkubG9uZwkweDAwMDAyOGU4LDB4NDQ0MDNkNDAsMHhmZjU2MzAyZSwweGZmNTQwNDQwCisJLmxvbmcJMHgwMDQyYjA2ZSwweGZmNTY2YzFhLDB4MzAyZWZmNTYsMHhkMDZmMDAwMgorCS5sb25nCTB4MzIyZWZmOTAsMHgwMjQxODAwMCwweDgwNDEzZDQwLDB4ZmY5MDIwMWYKKwkubG9uZwkweDRlNzUwMjZlLDB4ODAwMGZmOTAsMHgwOGVlMDAwMCwweGZmOTEyMDFmCisJLmxvbmcJMHg0ZTc1MzIyZSwweGZmODQzMDAxLDB4MDI4MTAwMDAsMHg3ZmZmMDI0MAorCS5sb25nCTB4ODAwMDAwNDAsMHgzZmZmM2Q0MCwweGZmODQwYzJlLDB4MDAwNGZmNGUKKwkubG9uZwkweDY3MGEyMDNjLDB4MDAwMDNmZmYsMHg5MDgxNGU3NSwweDQxZWVmZjg0CisJLmxvbmcJMHg2MWZmMDAwMCwweDI4NzY0NDgwLDB4MjIwMDYwZTYsMHgwYzJlMDAwNAorCS5sb25nCTB4ZmY0ZTY3M2EsMHgzMjJlZmY4NCwweDAyODEwMDAwLDB4N2ZmZjAyNmUKKwkubG9uZwkweDgwMDBmZjg0LDB4MDgwMTAwMDAsMHg2NzEyMDA2ZSwweDNmZmZmZjg0CisJLmxvbmcJMHgyMDNjMDAwMCwweDNmZmY5MDgxLDB4ZTI4MDRlNzUsMHgwMDZlM2ZmZQorCS5sb25nCTB4ZmY4NDIwM2MsMHgwMDAwM2ZmZSwweDkwODFlMjgwLDB4NGU3NTQxZWUKKwkubG9uZwkweGZmODQ2MWZmLDB4MDAwMDI4MjQsMHgwODAwMDAwMCwweDY3MTAwMDZlCisJLmxvbmcJMHgzZmZmZmY4NCwweDA2ODAwMDAwLDB4M2ZmZmUyODAsMHg0ZTc1MDA2ZQorCS5sb25nCTB4M2ZmZWZmODQsMHgwNjgwMDAwMCwweDNmZmVlMjgwLDB4NGU3NTMyMmUKKwkubG9uZwkweGZmOTAzMDAxLDB4MDI4MTAwMDAsMHg3ZmZmMDI0MCwweDgwMDAwMDQwCisJLmxvbmcJMHgzZmZmM2Q0MCwweGZmOTAwYzJlLDB4MDAwNGZmNGYsMHg2NzBhMjAzYworCS5sb25nCTB4MDAwMDNmZmYsMHg5MDgxNGU3NSwweDQxZWVmZjkwLDB4NjFmZjAwMDAKKwkubG9uZwkweDI3Y2E0NDgwLDB4MjIwMDYwZTYsMHgwYzJlMDAwNSwweGZmNGY2NzMyCisJLmxvbmcJMHgwYzJlMDAwMywweGZmNGY2NzNlLDB4MGMyZTAwMDMsMHhmZjRlNjcxNAorCS5sb25nCTB4MDhlZTAwMDYsMHhmZjcwMDBhZSwweDAxMDA0MDgwLDB4ZmY2NDQxZWUKKwkubG9uZwkweGZmNmM2MDQyLDB4MDBhZTAxMDAsMHgwMDAwZmY2NCwweDQxZWVmZjZjCisJLmxvbmcJMHg2MDM0MDBhZSwweDAxMDA0MDgwLDB4ZmY2NDA4ZWUsMHgwMDA2ZmY3YworCS5sb25nCTB4NDFlZWZmNzgsMHg2MDIwNDFlZSwweGZmNzgwYzJlLDB4MDAwNWZmNGUKKwkubG9uZwkweDY2ZmYwMDAwLDB4MDAwYzAwYWUsMHgwMDAwNDA4MCwweGZmNjQwMGFlCisJLmxvbmcJMHgwMTAwMDAwMCwweGZmNjQwODI4LDB4MDAwNzAwMDAsMHg2NzA4MDBhZQorCS5sb25nCTB4MDgwMDAwMDAsMHhmZjY0ZjIxMCwweGQwODA0ZTc1LDB4MDBhZTAxMDAKKwkubG9uZwkweDIwODBmZjY0LDB4ZjIzYmQwODAsMHgwMTcwMDAwMCwweDAwMDg0ZTc1CisJLmxvbmcJMHg3ZmZmMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmZmZmYsMHgyZDQwZmY1NAorCS5sb25nCTB4MzAyZWZmNDIsMHg0MjgxMTIyZSwweGZmNjRlMDk5LDB4ZjIwMTg4MDAKKwkubG9uZwkweDMyM2IwMjA2LDB4NGVmYjEwMDIsMHgwMjM0MDA0MCwweDAyZjgwMzBjCisJLmxvbmcJMHgwMzIwMDMzNCwweDAzNDgwMzVjLDB4MDM2NjAzNTIsMHgwMzNlMDMyYQorCS5sb25nCTB4MDMxNjAzMDIsMHgwMDRhMDIzOCwweDAyM2EwMjc2LDB4MDA1NDAwOWUKKwkubG9uZwkweDAxMDIwMTRjLDB4MDFiMjAxZmMsMHgwMjE4MDFkOCwweDAxOGMwMTI4CisJLmxvbmcJMHgwMGRlMDA3YSwweDAyYjYwMjVhLDB4ZjI4MTAwMDYsMHg2MDAwMDMyYQorCS5sb25nCTB4NGU3NWYyOGUsMHgwMDA2NjAwMCwweDAzMjA0ZTc1LDB4ZjI5MjAwMjIKKwkubG9uZwkweDA4MmUwMDAwLDB4ZmY2NDY3MDAsMHgwMzEwMDBhZSwweDAwMDA4MDgwCisJLmxvbmcJMHhmZjY0MDgyZSwweDAwMDdmZjYyLDB4NjYwMDAzMmMsMHg2MDAwMDJmYQorCS5sb25nCTB4NGU3NWYyOWQsMHgwMDA2NjAwMCwweDAyZjAwODJlLDB4MDAwMGZmNjQKKwkubG9uZwkweDY3MTIwMGFlLDB4MDAwMDgwODAsMHhmZjY0MDgyZSwweDAwMDdmZjYyCisJLmxvbmcJMHg2NjAwMDMwNCwweDRlNzVmMjkzLDB4MDAyMjA4MmUsMHgwMDAwZmY2NAorCS5sb25nCTB4NjcwMDAyYzYsMHgwMGFlMDAwMCwweDgwODBmZjY0LDB4MDgyZTAwMDcKKwkubG9uZwkweGZmNjI2NjAwLDB4MDJlMjYwMDAsMHgwMmIwMDgyZSwweDAwMDBmZjY0CisJLmxvbmcJMHg2NzEyMDBhZSwweDAwMDA4MDgwLDB4ZmY2NDA4MmUsMHgwMDA3ZmY2MgorCS5sb25nCTB4NjYwMDAyYzQsMHg0ZTc1ZjI5YywweDAwMDY2MDAwLDB4MDI4YzA4MmUKKwkubG9uZwkweDAwMDBmZjY0LDB4NjcxMjAwYWUsMHgwMDAwODA4MCwweGZmNjQwODJlCisJLmxvbmcJMHgwMDA3ZmY2MiwweDY2MDAwMmEwLDB4NGU3NWYyOTQsMHgwMDIyMDgyZQorCS5sb25nCTB4MDAwMGZmNjQsMHg2NzAwMDI2MiwweDAwYWUwMDAwLDB4ODA4MGZmNjQKKwkubG9uZwkweDA4MmUwMDA3LDB4ZmY2MjY2MDAsMHgwMjdlNjAwMCwweDAyNGM0ZTc1CisJLmxvbmcJMHhmMjliMDAwNiwweDYwMDAwMjQyLDB4MDgyZTAwMDAsMHhmZjY0NjcxMgorCS5sb25nCTB4MDBhZTAwMDAsMHg4MDgwZmY2NCwweDA4MmUwMDA3LDB4ZmY2MjY2MDAKKwkubG9uZwkweDAyNTY0ZTc1LDB4ZjI5NTAwMjIsMHgwODJlMDAwMCwweGZmNjQ2NzAwCisJLmxvbmcJMHgwMjE4MDBhZSwweDAwMDA4MDgwLDB4ZmY2NDA4MmUsMHgwMDA3ZmY2MgorCS5sb25nCTB4NjYwMDAyMzQsMHg2MDAwMDIwMiwweDA4MmUwMDAwLDB4ZmY2NDY3MTIKKwkubG9uZwkweDAwYWUwMDAwLDB4ODA4MGZmNjQsMHgwODJlMDAwNywweGZmNjI2NjAwCisJLmxvbmcJMHgwMjE2NGU3NSwweGYyOWEwMDA2LDB4NjAwMDAxZGUsMHgwODJlMDAwMAorCS5sb25nCTB4ZmY2NDY3MDAsMHgwMDE0MDBhZSwweDAwMDA4MDgwLDB4ZmY2NDA4MmUKKwkubG9uZwkweDAwMDdmZjYyLDB4NjYwMDAxZjAsMHg0ZTc1ZjI5NiwweDAwMjIwODJlCisJLmxvbmcJMHgwMDAwZmY2NCwweDY3MDAwMWIyLDB4MDBhZTAwMDAsMHg4MDgwZmY2NAorCS5sb25nCTB4MDgyZTAwMDcsMHhmZjYyNjYwMCwweDAxY2U2MDAwLDB4MDE5YzRlNzUKKwkubG9uZwkweGYyOTkwMDA2LDB4NjAwMDAxOTIsMHgwODJlMDAwMCwweGZmNjQ2NzEyCisJLmxvbmcJMHgwMGFlMDAwMCwweDgwODBmZjY0LDB4MDgyZTAwMDcsMHhmZjYyNjYwMAorCS5sb25nCTB4MDFhNjRlNzUsMHhmMjk3MDAxOCwweDAwYWUwMDAwLDB4ODA4MGZmNjQKKwkubG9uZwkweDA4MmUwMDA3LDB4ZmY2MjY2MDAsMHgwMThlNjAwMCwweDAxNWM0ZTc1CisJLmxvbmcJMHhmMjk4MDAwNiwweDYwMDAwMTUyLDB4MDBhZTAwMDAsMHg4MDgwZmY2NAorCS5sb25nCTB4MDgyZTAwMDcsMHhmZjYyNjYwMCwweDAxNmU0ZTc1LDB4NjAwMDAxM2EKKwkubG9uZwkweDRlNzUwODJlLDB4MDAwMGZmNjQsMHg2NzAwMDEyZSwweDAwYWUwMDAwCisJLmxvbmcJMHg4MDgwZmY2NCwweDA4MmUwMDA3LDB4ZmY2MjY2MDAsMHgwMTRhNjAwMAorCS5sb25nCTB4MDExODA4MmUsMHgwMDAwZmY2NCwweDY3MTIwMGFlLDB4MDAwMDgwODAKKwkubG9uZwkweGZmNjQwODJlLDB4MDAwN2ZmNjIsMHg2NjAwMDEyYywweDRlNzVmMjkxCisJLmxvbmcJMHgwMDIyMDgyZSwweDAwMDBmZjY0LDB4NjcwMDAwZWUsMHgwMGFlMDAwMAorCS5sb25nCTB4ODA4MGZmNjQsMHgwODJlMDAwNywweGZmNjI2NjAwLDB4MDEwYTYwMDAKKwkubG9uZwkweDAwZDgwODJlLDB4MDAwMGZmNjQsMHg2NzEyMDBhZSwweDAwMDA4MDgwCisJLmxvbmcJMHhmZjY0MDgyZSwweDAwMDdmZjYyLDB4NjYwMDAwZWMsMHg0ZTc1ZjI5ZQorCS5sb25nCTB4MDAyMjA4MmUsMHgwMDAwZmY2NCwweDY3MDAwMGFlLDB4MDBhZTAwMDAKKwkubG9uZwkweDgwODBmZjY0LDB4MDgyZTAwMDcsMHhmZjYyNjYwMCwweDAwY2E2MDAwCisJLmxvbmcJMHgwMDk4MDgyZSwweDAwMDBmZjY0LDB4NjcwMDAwMTQsMHgwMGFlMDAwMAorCS5sb25nCTB4ODA4MGZmNjQsMHgwODJlMDAwNywweGZmNjI2NjAwLDB4MDBhYTRlNzUKKwkubG9uZwkweGYyODIwMDA2LDB4NjAwMDAwNzIsMHg0ZTc1ZjI4ZCwweDAwMDY2MDAwCisJLmxvbmcJMHgwMDY4NGU3NSwweGYyODMwMDA2LDB4NjAwMDAwNWUsMHg0ZTc1ZjI4YworCS5sb25nCTB4MDAwNjYwMDAsMHgwMDU0NGU3NSwweGYyODQwMDA2LDB4NjAwMDAwNGEKKwkubG9uZwkweDRlNzVmMjhiLDB4MDAwNjYwMDAsMHgwMDQwNGU3NSwweGYyODUwMDA2CisJLmxvbmcJMHg2MDAwMDAzNiwweDRlNzVmMjhhLDB4MDAwNjYwMDAsMHgwMDJjNGU3NQorCS5sb25nCTB4ZjI4NjAwMDYsMHg2MDAwMDAyMiwweDRlNzVmMjg5LDB4MDAwNjYwMDAKKwkubG9uZwkweDAwMTg0ZTc1LDB4ZjI4NzAwMDYsMHg2MDAwMDAwZSwweDRlNzVmMjg4CisJLmxvbmcJMHgwMDA2NjAwMCwweDAwMDQ0ZTc1LDB4MTIyZWZmNDEsMHgwMjQxMDAwNworCS5sb25nCTB4NjFmZjAwMDAsMHgxZDY2NTM0MCwweDYxZmYwMDAwLDB4MWRkMDBjNDAKKwkubG9uZwkweGZmZmY2NjAyLDB4NGU3NTIwMmUsMHhmZjU0ZDBhZSwweGZmNjg1ODgwCisJLmxvbmcJMHgyZDQwMDAwNiwweDRlNzUxZDdjLDB4MDAwMmZmNGEsMHg0ZTc1MzAyZQorCS5sb25nCTB4ZmY0MjQyODEsMHgxMjJlZmY2NCwweGUwOTlmMjAxLDB4ODgwMDMyM2IKKwkubG9uZwkweDAyMDY0ZWZiLDB4MTAwMjAyMWUsMHgwMDQwMDJlNCwweDAyZjAwMmZjCisJLmxvbmcJMHgwMzA4MDMxNCwweDAzMjAwMzI2LDB4MDMxYTAzMGUsMHgwMzAyMDJmNgorCS5sb25nCTB4MDJlYTAwNDYsMHgwMjIwMDIyNCwweDAyNjAwMDRjLDB4MDA5MjAwZjgKKwkubG9uZwkweDAxM2UwMWE0LDB4MDFlYTAyMDIsMHgwMWM0MDE3ZSwweDAxMTgwMGQyCisJLmxvbmcJMHgwMDZjMDJhMiwweDAyNDBmMjgxLDB4MDJlYTRlNzUsMHhmMjhlMDJlNAorCS5sb25nCTB4NGU3NWYyOTIsMHgwMmRlMDgyZSwweDAwMDBmZjY0LDB4NjcxMjAwYWUKKwkubG9uZwkweDAwMDA4MDgwLDB4ZmY2NDA4MmUsMHgwMDA3ZmY2MiwweDY2MDAwMmNjCisJLmxvbmcJMHg0ZTc1ZjI5ZCwweDAwMDQ0ZTc1LDB4MDgyZTAwMDAsMHhmZjY0NjcwMAorCS5sb25nCTB4MDJiMjAwYWUsMHgwMDAwODA4MCwweGZmNjQwODJlLDB4MDAwN2ZmNjIKKwkubG9uZwkweDY2MDAwMmE4LDB4NjAwMDAyOWMsMHhmMjkzMDAxZSwweDA4MmUwMDAwCisJLmxvbmcJMHhmZjY0NjcxMiwweDAwYWUwMDAwLDB4ODA4MGZmNjQsMHgwODJlMDAwNworCS5sb25nCTB4ZmY2MjY2MDAsMHgwMjg2NGU3NSwweDA4MmUwMDAwLDB4ZmY2NDY3MDAKKwkubG9uZwkweDAyNzIwMGFlLDB4MDAwMDgwODAsMHhmZjY0MDgyZSwweDAwMDdmZjYyCisJLmxvbmcJMHg2NjAwMDI2OCwweDYwMDAwMjVjLDB4ZjI5YzAwMDQsMHg0ZTc1MDgyZQorCS5sb25nCTB4MDAwMGZmNjQsMHg2NzAwMDI0YywweDAwYWUwMDAwLDB4ODA4MGZmNjQKKwkubG9uZwkweDA4MmUwMDA3LDB4ZmY2MjY2MDAsMHgwMjQyNjAwMCwweDAyMzZmMjk0CisJLmxvbmcJMHgwMjMyMDgyZSwweDAwMDBmZjY0LDB4NjcxMjAwYWUsMHgwMDAwODA4MAorCS5sb25nCTB4ZmY2NDA4MmUsMHgwMDA3ZmY2MiwweDY2MDAwMjIwLDB4NGU3NWYyOWIKKwkubG9uZwkweDAwMDQ0ZTc1LDB4MDgyZTAwMDAsMHhmZjY0NjcwMCwweDAyMDYwMGFlCisJLmxvbmcJMHgwMDAwODA4MCwweGZmNjQwODJlLDB4MDAwN2ZmNjIsMHg2NjAwMDFmYworCS5sb25nCTB4NjAwMDAxZjAsMHhmMjk1MDAxZSwweDA4MmUwMDAwLDB4ZmY2NDY3MTIKKwkubG9uZwkweDAwYWUwMDAwLDB4ODA4MGZmNjQsMHgwODJlMDAwNywweGZmNjI2NjAwCisJLmxvbmcJMHgwMWRhNGU3NSwweDA4MmUwMDAwLDB4ZmY2NDY3MDAsMHgwMWM2MDBhZQorCS5sb25nCTB4MDAwMDgwODAsMHhmZjY0MDgyZSwweDAwMDdmZjYyLDB4NjYwMDAxYmMKKwkubG9uZwkweDYwMDAwMWIwLDB4ZjI5YTAwMDQsMHg0ZTc1MDgyZSwweDAwMDBmZjY0CisJLmxvbmcJMHg2NzAwMDFhMCwweDAwYWUwMDAwLDB4ODA4MGZmNjQsMHgwODJlMDAwNworCS5sb25nCTB4ZmY2MjY2MDAsMHgwMTk2NjAwMCwweDAxOGFmMjk2LDB4MDE4NjA4MmUKKwkubG9uZwkweDAwMDBmZjY0LDB4NjcxMjAwYWUsMHgwMDAwODA4MCwweGZmNjQwODJlCisJLmxvbmcJMHgwMDA3ZmY2MiwweDY2MDAwMTc0LDB4NGU3NWYyOTksMHgwMDA0NGU3NQorCS5sb25nCTB4MDgyZTAwMDAsMHhmZjY0NjcwMCwweDAxNWEwMGFlLDB4MDAwMDgwODAKKwkubG9uZwkweGZmNjQwODJlLDB4MDAwN2ZmNjIsMHg2NjAwMDE1MCwweDYwMDAwMTQ0CisJLmxvbmcJMHhmMjk3MDE0MCwweDAwYWUwMDAwLDB4ODA4MGZmNjQsMHgwODJlMDAwNworCS5sb25nCTB4ZmY2MjY2MDAsMHgwMTM2NGU3NSwweGYyOTgwMDA0LDB4NGU3NTAwYWUKKwkubG9uZwkweDAwMDA4MDgwLDB4ZmY2NDA4MmUsMHgwMDA3ZmY2MiwweDY2MDAwMTFjCisJLmxvbmcJMHg2MDAwMDExMCwweDRlNzU2MDAwLDB4MDEwYTA4MmUsMHgwMDAwZmY2NAorCS5sb25nCTB4NjcxMjAwYWUsMHgwMDAwODA4MCwweGZmNjQwODJlLDB4MDAwN2ZmNjIKKwkubG9uZwkweDY2MDAwMGY4LDB4NGU3NTA4MmUsMHgwMDAwZmY2NCwweDY3MDAwMGU0CisJLmxvbmcJMHgwMGFlMDAwMCwweDgwODBmZjY0LDB4MDgyZTAwMDcsMHhmZjYyNjYwMAorCS5sb25nCTB4MDBkYTYwMDAsMHgwMGNlZjI5MSwweDAwMjAwODJlLDB4MDAwMGZmNjQKKwkubG9uZwkweDY3MDAwMDE0LDB4MDBhZTAwMDAsMHg4MDgwZmY2NCwweDA4MmUwMDA3CisJLmxvbmcJMHhmZjYyNjYwMCwweDAwYjY0ZTc1LDB4MDgyZTAwMDAsMHhmZjY0NjcwMAorCS5sb25nCTB4MDBhMjAwYWUsMHgwMDAwODA4MCwweGZmNjQwODJlLDB4MDAwN2ZmNjIKKwkubG9uZwkweDY2MDAwMDk4LDB4NjAwMDAwOGMsMHhmMjllMDAyMCwweDA4MmUwMDAwCisJLmxvbmcJMHhmZjY0NjcwMCwweDAwMTQwMGFlLDB4MDAwMDgwODAsMHhmZjY0MDgyZQorCS5sb25nCTB4MDAwN2ZmNjIsMHg2NjAwMDA3NCwweDRlNzUwODJlLDB4MDAwMGZmNjQKKwkubG9uZwkweDY3MDAwMDYwLDB4MDBhZTAwMDAsMHg4MDgwZmY2NCwweDA4MmUwMDA3CisJLmxvbmcJMHhmZjYyNjYwMCwweDAwNTY2MDAwLDB4MDA0YWYyODIsMHgwMDQ2NGU3NQorCS5sb25nCTB4ZjI4ZDAwNDAsMHg0ZTc1ZjI4MywweDAwM2E0ZTc1LDB4ZjI4YzAwMzQKKwkubG9uZwkweDRlNzVmMjg0LDB4MDAyZTRlNzUsMHhmMjhiMDAyOCwweDRlNzVmMjg1CisJLmxvbmcJMHgwMDIyNGU3NSwweGYyOGEwMDFjLDB4NGU3NWYyODYsMHgwMDE2NGU3NQorCS5sb25nCTB4ZjI4OTAwMTAsMHg0ZTc1ZjI4NywweDAwMGE0ZTc1LDB4ZjI4ODAwMDQKKwkubG9uZwkweDRlNzUxZDdjLDB4MDAwMWZmNGEsMHg0ZTc1MWQ3YywweDAwMDJmZjRhCisJLmxvbmcJMHg0ZTc1MzAyZSwweGZmNDI0MjgxLDB4MTIyZWZmNjQsMHhlMDk5ZjIwMQorCS5sb25nCTB4ODgwMDMyM2IsMHgwMjA2NGVmYiwweDEwMDIwMjA4LDB4MDA0MDAyYWMKKwkubG9uZwkweDAyY2MwMmVjLDB4MDMwYzAzMmMsMHgwMzRjMDM1YywweDAzM2MwMzFjCisJLmxvbmcJMHgwMmZjMDJkYywweDAyYmMwMDUwLDB4MDIwZTAyMTQsMHgwMjQ0MDA2MAorCS5sb25nCTB4MDBhNDAwZmEsMHgwMTNlMDE5NCwweDAxZDgwMWYwLDB4MDFiNjAxNzIKKwkubG9uZwkweDAxMWMwMGQ4LDB4MDA4MjAyNzgsMHgwMjJjZjI4MSwweDAwMDg0MjAwCisJLmxvbmcJMHg2MDAwMDMyZSwweDUwYzA2MDAwLDB4MDMyOGYyOGUsMHgwMDA4NDIwMAorCS5sb25nCTB4NjAwMDAzMWUsMHg1MGMwNjAwMCwweDAzMThmMjkyLDB4MDAxYTQyMDAKKwkubG9uZwkweDA4MmUwMDAwLDB4ZmY2NDY3MDAsMHgwMzA4MDBhZSwweDAwMDA4MDgwCisJLmxvbmcJMHhmZjY0NjAwMCwweDAyZjI1MGMwLDB4NjAwMDAyZjYsMHhmMjlkMDAwOAorCS5sb25nCTB4NDIwMDYwMDAsMHgwMmVjNTBjMCwweDA4MmUwMDAwLDB4ZmY2NDY3MDAKKwkubG9uZwkweDAyZTAwMGFlLDB4MDAwMDgwODAsMHhmZjY0NjAwMCwweDAyY2FmMjkzCisJLmxvbmcJMHgwMDFhNDIwMCwweDA4MmUwMDAwLDB4ZmY2NDY3MDAsMHgwMmM0MDBhZQorCS5sb25nCTB4MDAwMDgwODAsMHhmZjY0NjAwMCwweDAyYWU1MGMwLDB4MDgyZTAwMDAKKwkubG9uZwkweGZmNjQ2NzAwLDB4MDJhYzAwYWUsMHgwMDAwODA4MCwweGZmNjQ2MDAwCisJLmxvbmcJMHgwMjk2ZjI5YywweDAwMDg0MjAwLDB4NjAwMDAyOTYsMHg1MGMwMDgyZQorCS5sb25nCTB4MDAwMGZmNjQsMHg2NzAwMDI4YSwweDAwYWUwMDAwLDB4ODA4MGZmNjQKKwkubG9uZwkweDYwMDAwMjc0LDB4ZjI5NDAwMWEsMHg0MjAwMDgyZSwweDAwMDBmZjY0CisJLmxvbmcJMHg2NzAwMDI2ZSwweDAwYWUwMDAwLDB4ODA4MGZmNjQsMHg2MDAwMDI1OAorCS5sb25nCTB4NTBjMDYwMDAsMHgwMjVjZjI5YiwweDAwMDg0MjAwLDB4NjAwMDAyNTIKKwkubG9uZwkweDUwYzAwODJlLDB4MDAwMGZmNjQsMHg2NzAwMDI0NiwweDAwYWUwMDAwCisJLmxvbmcJMHg4MDgwZmY2NCwweDYwMDAwMjMwLDB4ZjI5NTAwMWEsMHg0MjAwMDgyZQorCS5sb25nCTB4MDAwMGZmNjQsMHg2NzAwMDIyYSwweDAwYWUwMDAwLDB4ODA4MGZmNjQKKwkubG9uZwkweDYwMDAwMjE0LDB4NTBjMDA4MmUsMHgwMDAwZmY2NCwweDY3MDAwMjEyCisJLmxvbmcJMHgwMGFlMDAwMCwweDgwODBmZjY0LDB4NjAwMDAxZmMsMHhmMjlhMDAwOAorCS5sb25nCTB4NDIwMDYwMDAsMHgwMWZjNTBjMCwweDA4MmUwMDAwLDB4ZmY2NDY3MDAKKwkubG9uZwkweDAxZjAwMGFlLDB4MDAwMDgwODAsMHhmZjY0NjAwMCwweDAxZGFmMjk2CisJLmxvbmcJMHgwMDFhNDIwMCwweDA4MmUwMDAwLDB4ZmY2NDY3MDAsMHgwMWQ0MDBhZQorCS5sb25nCTB4MDAwMDgwODAsMHhmZjY0NjAwMCwweDAxYmU1MGMwLDB4NjAwMDAxYzIKKwkubG9uZwkweGYyOTkwMDA4LDB4NDIwMDYwMDAsMHgwMWI4NTBjMCwweDA4MmUwMDAwCisJLmxvbmcJMHhmZjY0NjcwMCwweDAxYWMwMGFlLDB4MDAwMDgwODAsMHhmZjY0NjAwMAorCS5sb25nCTB4MDE5NmYyOTcsMHgwMDEwNDIwMCwweDAwYWUwMDAwLDB4ODA4MGZmNjQKKwkubG9uZwkweDYwMDAwMTg0LDB4NTBjMDYwMDAsMHgwMTg4ZjI5OCwweDAwMDg0MjAwCisJLmxvbmcJMHg2MDAwMDE3ZSwweDUwYzAwMGFlLDB4MDAwMDgwODAsMHhmZjY0NjAwMAorCS5sb25nCTB4MDE2NjQyMDAsMHg2MDAwMDE2YSwweDUwYzA2MDAwLDB4MDE2NDQyMDAKKwkubG9uZwkweDA4MmUwMDAwLDB4ZmY2NDY3MDAsMHgwMTU4MDBhZSwweDAwMDA4MDgwCisJLmxvbmcJMHhmZjY0NjAwMCwweDAxNDI1MGMwLDB4MDgyZTAwMDAsMHhmZjY0NjcwMAorCS5sb25nCTB4MDE0MDAwYWUsMHgwMDAwODA4MCwweGZmNjQ2MDAwLDB4MDEyYWYyOTEKKwkubG9uZwkweDAwMWE0MjAwLDB4MDgyZTAwMDAsMHhmZjY0NjcwMCwweDAxMjQwMGFlCisJLmxvbmcJMHgwMDAwODA4MCwweGZmNjQ2MDAwLDB4MDEwZTUwYzAsMHgwODJlMDAwMAorCS5sb25nCTB4ZmY2NDY3MDAsMHgwMTBjMDBhZSwweDAwMDA4MDgwLDB4ZmY2NDYwMDAKKwkubG9uZwkweDAwZjZmMjllLDB4MDAxYTQyMDAsMHgwODJlMDAwMCwweGZmNjQ2NzAwCisJLmxvbmcJMHgwMGYwMDBhZSwweDAwMDA4MDgwLDB4ZmY2NDYwMDAsMHgwMGRhNTBjMAorCS5sb25nCTB4MDgyZTAwMDAsMHhmZjY0NjcwMCwweDAwZDgwMGFlLDB4MDAwMDgwODAKKwkubG9uZwkweGZmNjQ2MDAwLDB4MDBjMmYyODIsMHgwMDA4NDIwMCwweDYwMDAwMGMyCisJLmxvbmcJMHg1MGMwNjAwMCwweDAwYmNmMjhkLDB4MDAwODQyMDAsMHg2MDAwMDBiMgorCS5sb25nCTB4NTBjMDYwMDAsMHgwMGFjZjI4MywweDAwMDg0MjAwLDB4NjAwMDAwYTIKKwkubG9uZwkweDUwYzA2MDAwLDB4MDA5Y2YyOGMsMHgwMDA4NDIwMCwweDYwMDAwMDkyCisJLmxvbmcJMHg1MGMwNjAwMCwweDAwOGNmMjg0LDB4MDAwODQyMDAsMHg2MDAwMDA4MgorCS5sb25nCTB4NTBjMDYwMDAsMHgwMDdjZjI4YiwweDAwMDg0MjAwLDB4NjAwMDAwNzIKKwkubG9uZwkweDUwYzA2MDAwLDB4MDA2Y2YyODUsMHgwMDA4NDIwMCwweDYwMDAwMDYyCisJLmxvbmcJMHg1MGMwNjAwMCwweDAwNWNmMjhhLDB4MDAwODQyMDAsMHg2MDAwMDA1MgorCS5sb25nCTB4NTBjMDYwMDAsMHgwMDRjZjI4NiwweDAwMDg0MjAwLDB4NjAwMDAwNDIKKwkubG9uZwkweDUwYzA2MDAwLDB4MDAzY2YyODksMHgwMDA4NDIwMCwweDYwMDAwMDMyCisJLmxvbmcJMHg1MGMwNjAwMCwweDAwMmNmMjg3LDB4MDAwODQyMDAsMHg2MDAwMDAyMgorCS5sb25nCTB4NTBjMDYwMDAsMHgwMDFjZjI4OCwweDAwMDg0MjAwLDB4NjAwMDAwMTIKKwkubG9uZwkweDUwYzA2MDAwLDB4MDAwYzA4MmUsMHgwMDA3ZmY2MiwweDY2MDAwMDg4CisJLmxvbmcJMHgyMDQwMTIyZSwweGZmNDEyMDAxLDB4MDIwMTAwMzgsMHg2NjEwMjIwMAorCS5sb25nCTB4MDI0MTAwMDcsMHgyMDA4NjFmZiwweDAwMDAxNzJhLDB4NGU3NTBjMDEKKwkubG9uZwkweDAwMTg2NzFhLDB4MGMwMTAwMjAsMHg2NzM4MjAwOCwweDIwNmUwMDBjCisJLmxvbmcJMHg2MWZmZmZmZiwweDVhN2M0YTgxLDB4NjYwMDAwNTQsMHg0ZTc1MjAwOAorCS5sb25nCTB4MjA2ZTAwMGMsMHg2MWZmZmZmZiwweDVhNjg0YTgxLDB4NjYwMDAwNDAKKwkubG9uZwkweDEyMmVmZjQxLDB4MDI0MTAwMDcsMHg3MDAxNjFmZiwweDAwMDAxNzIyCisJLmxvbmcJMHg0ZTc1MjAwOCwweDIwNmUwMDBjLDB4NjFmZmZmZmYsMHg1YTQ0NGE4MQorCS5sb25nCTB4NjYwMDAwMWMsMHgxMjJlZmY0MSwweDAyNDEwMDA3LDB4NzAwMTYxZmYKKwkubG9uZwkweDAwMDAxNzRlLDB4NGU3NTFkN2MsMHgwMDAyZmY0YSwweDRlNzUzZDdjCisJLmxvbmcJMHgwMGExMDAwYSwweDYwZmYwMDAwLDB4MmI4NjEyMmUsMHhmZjQzMDI0MQorCS5sb25nCTB4MDA3MGU4MDksMHg2MWZmMDAwMCwweDE1YjIwMjgwLDB4MDAwMDAwZmYKKwkubG9uZwkweDJmMDAxMDNiLDB4MDkyMDAxNDgsMHgyZjAwNjFmZiwweDAwMDAwMzQwCisJLmxvbmcJMHgyMDFmMjIxZiwweDY3MDAwMTM0LDB4MDgyZTAwMDUsMHhmZjQyNjcwMAorCS5sb25nCTB4MDBiODA4MmUsMHgwMDA0ZmY0MiwweDY2MDAwMDFhLDB4MTIzYjExMjAKKwkubG9uZwkweDAyMWUwODJlLDB4MDAwNTAwMDQsMHg2NzBhMGMyZSwweDAwMDhmZjRhCisJLmxvbmcJMHg2NjAyNGU3NSwweDIyNDg5ZmMwLDB4NDFkNzRhMDEsMHg2YTBjMjBlZQorCS5sb25nCTB4ZmZkYzIwZWUsMHhmZmUwMjBlZSwweGZmZTRlMzA5LDB4NmEwYzIwZWUKKwkubG9uZwkweGZmZTgyMGVlLDB4ZmZlYzIwZWUsMHhmZmYwZTMwOSwweDZhMGFmMjEwCisJLmxvbmcJMHhmMDIwZDFmYywweDAwMDAwMDBjLDB4ZTMwOTZhMGEsMHhmMjEwZjAxMAorCS5sb25nCTB4ZDFmYzAwMDAsMHgwMDBjZTMwOSwweDZhMGFmMjEwLDB4ZjAwOGQxZmMKKwkubG9uZwkweDAwMDAwMDBjLDB4ZTMwOTZhMGEsMHhmMjEwZjAwNCwweGQxZmMwMDAwCisJLmxvbmcJMHgwMDBjZTMwOSwweDZhMGFmMjEwLDB4ZjAwMmQxZmMsMHgwMDAwMDAwYworCS5sb25nCTB4ZTMwOTZhMGEsMHhmMjEwZjAwMSwweGQxZmMwMDAwLDB4MDAwYzJkNDkKKwkubG9uZwkweGZmNTQ0MWQ3LDB4MmYwMDYxZmYsMHhmZmZmNThiMiwweDIwMWZkZmMwCisJLmxvbmcJMHg0YTgxNjYwMCwweDA3MWU0ZTc1LDB4MmQ0OGZmNTQsMHg5ZmMwNDNkNworCS5sb25nCTB4MmYwMTJmMDAsMHg2MWZmZmZmZiwweDU4N2UyMDFmLDB4NGE4MTY2MDAKKwkubG9uZwkweDA3MGUyMjFmLDB4NDFkNzRhMDEsMHg2YTBjMmQ1OCwweGZmZGMyZDU4CisJLmxvbmcJMHhmZmUwMmQ1OCwweGZmZTRlMzA5LDB4NmEwYzJkNTgsMHhmZmU4MmQ1OAorCS5sb25nCTB4ZmZlYzJkNTgsMHhmZmYwZTMwOSwweDZhMDRmMjE4LDB4ZDAyMGUzMDkKKwkubG9uZwkweDZhMDRmMjE4LDB4ZDAxMGUzMDksMHg2YTA0ZjIxOCwweGQwMDhlMzA5CisJLmxvbmcJMHg2YTA0ZjIxOCwweGQwMDRlMzA5LDB4NmEwNGYyMTgsMHhkMDAyZTMwOQorCS5sb25nCTB4NmEwNGYyMTgsMHhkMDAxZGZjMCwweDRlNzU0ZTc1LDB4MDAwYzBjMTgKKwkubG9uZwkweDBjMTgxODI0LDB4MGMxODE4MjQsMHgxODI0MjQzMCwweDBjMTgxODI0CisJLmxvbmcJMHgxODI0MjQzMCwweDE4MjQyNDMwLDB4MjQzMDMwM2MsMHgwYzE4MTgyNAorCS5sb25nCTB4MTgyNDI0MzAsMHgxODI0MjQzMCwweDI0MzAzMDNjLDB4MTgyNDI0MzAKKwkubG9uZwkweDI0MzAzMDNjLDB4MjQzMDMwM2MsMHgzMDNjM2M0OCwweDBjMTgxODI0CisJLmxvbmcJMHgxODI0MjQzMCwweDE4MjQyNDMwLDB4MjQzMDMwM2MsMHgxODI0MjQzMAorCS5sb25nCTB4MjQzMDMwM2MsMHgyNDMwMzAzYywweDMwM2MzYzQ4LDB4MTgyNDI0MzAKKwkubG9uZwkweDI0MzAzMDNjLDB4MjQzMDMwM2MsMHgzMDNjM2M0OCwweDI0MzAzMDNjCisJLmxvbmcJMHgzMDNjM2M0OCwweDMwM2MzYzQ4LDB4M2M0ODQ4NTQsMHgwYzE4MTgyNAorCS5sb25nCTB4MTgyNDI0MzAsMHgxODI0MjQzMCwweDI0MzAzMDNjLDB4MTgyNDI0MzAKKwkubG9uZwkweDI0MzAzMDNjLDB4MjQzMDMwM2MsMHgzMDNjM2M0OCwweDE4MjQyNDMwCisJLmxvbmcJMHgyNDMwMzAzYywweDI0MzAzMDNjLDB4MzAzYzNjNDgsMHgyNDMwMzAzYworCS5sb25nCTB4MzAzYzNjNDgsMHgzMDNjM2M0OCwweDNjNDg0ODU0LDB4MTgyNDI0MzAKKwkubG9uZwkweDI0MzAzMDNjLDB4MjQzMDMwM2MsMHgzMDNjM2M0OCwweDI0MzAzMDNjCisJLmxvbmcJMHgzMDNjM2M0OCwweDMwM2MzYzQ4LDB4M2M0ODQ4NTQsMHgyNDMwMzAzYworCS5sb25nCTB4MzAzYzNjNDgsMHgzMDNjM2M0OCwweDNjNDg0ODU0LDB4MzAzYzNjNDgKKwkubG9uZwkweDNjNDg0ODU0LDB4M2M0ODQ4NTQsMHg0ODU0NTQ2MCwweDAwODA0MGMwCisJLmxvbmcJMHgyMGEwNjBlMCwweDEwOTA1MGQwLDB4MzBiMDcwZjAsMHgwODg4NDhjOAorCS5sb25nCTB4MjhhODY4ZTgsMHgxODk4NThkOCwweDM4Yjg3OGY4LDB4MDQ4NDQ0YzQKKwkubG9uZwkweDI0YTQ2NGU0LDB4MTQ5NDU0ZDQsMHgzNGI0NzRmNCwweDBjOGM0Y2NjCisJLmxvbmcJMHgyY2FjNmNlYywweDFjOWM1Y2RjLDB4M2NiYzdjZmMsMHgwMjgyNDJjMgorCS5sb25nCTB4MjJhMjYyZTIsMHgxMjkyNTJkMiwweDMyYjI3MmYyLDB4MGE4YTRhY2EKKwkubG9uZwkweDJhYWE2YWVhLDB4MWE5YTVhZGEsMHgzYWJhN2FmYSwweDA2ODY0NmM2CisJLmxvbmcJMHgyNmE2NjZlNiwweDE2OTY1NmQ2LDB4MzZiNjc2ZjYsMHgwZThlNGVjZQorCS5sb25nCTB4MmVhZTZlZWUsMHgxZTllNWVkZSwweDNlYmU3ZWZlLDB4MDE4MTQxYzEKKwkubG9uZwkweDIxYTE2MWUxLDB4MTE5MTUxZDEsMHgzMWIxNzFmMSwweDA5ODk0OWM5CisJLmxvbmcJMHgyOWE5NjllOSwweDE5OTk1OWQ5LDB4MzliOTc5ZjksMHgwNTg1NDVjNQorCS5sb25nCTB4MjVhNTY1ZTUsMHgxNTk1NTVkNSwweDM1YjU3NWY1LDB4MGQ4ZDRkY2QKKwkubG9uZwkweDJkYWQ2ZGVkLDB4MWQ5ZDVkZGQsMHgzZGJkN2RmZCwweDAzODM0M2MzCisJLmxvbmcJMHgyM2EzNjNlMywweDEzOTM1M2QzLDB4MzNiMzczZjMsMHgwYjhiNGJjYgorCS5sb25nCTB4MmJhYjZiZWIsMHgxYjliNWJkYiwweDNiYmI3YmZiLDB4MDc4NzQ3YzcKKwkubG9uZwkweDI3YTc2N2U3LDB4MTc5NzU3ZDcsMHgzN2I3NzdmNywweDBmOGY0ZmNmCisJLmxvbmcJMHgyZmFmNmZlZiwweDFmOWY1ZmRmLDB4M2ZiZjdmZmYsMHgyMDQwMzAyZQorCS5sb25nCTB4ZmY0MDMyMDAsMHgwMjQwMDAzZiwweDAyODEwMDAwLDB4MDAwNzMwM2IKKwkubG9uZwkweDAyMGE0ZWZiLDB4MDAwNjRhZmMsMHgwMDQwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDgwLDB4MDA4NjAwOGMKKwkubG9uZwkweDAwOTAwMDk0LDB4MDA5ODAwOWMsMHgwMGEwMDBhNiwweDAwYjYwMGM2CisJLmxvbmcJMHgwMGQyMDBkZSwweDAwZWEwMGY2LDB4MDEwMjAxMTgsMHgwMTI2MDEzNAorCS5sb25nCTB4MDEzZTAxNDgsMHgwMTUyMDE1YywweDAxNjYwMTdhLDB4MDE5ODAxYjYKKwkubG9uZwkweDAxZDIwMWVlLDB4MDIwYTAyMjYsMHgwMjQyMDI2MCwweDAyNjAwMjYwCisJLmxvbmcJMHgwMjYwMDI2MCwweDAyNjAwMjYwLDB4MDI2MDAyYzAsMHgwMmRhMDJmNAorCS5sb25nCTB4MDMxNDAwMDAsMHgwMDAwMDAwMCwweDAwMDAyMDZlLDB4ZmZhNDRlNzUKKwkubG9uZwkweDIwNmVmZmE4LDB4NGU3NTIwNGEsMHg0ZTc1MjA0YiwweDRlNzUyMDRjCisJLmxvbmcJMHg0ZTc1MjA0ZCwweDRlNzUyMDU2LDB4NGU3NTIwNmUsMHhmZmQ4NGU3NQorCS5sb25nCTB4MjAyZWZmYTQsMHgyMjAwZDI4OCwweDJkNDFmZmE0LDB4MjA0MDRlNzUKKwkubG9uZwkweDIwMmVmZmE4LDB4MjIwMGQyODgsMHgyZDQxZmZhOCwweDIwNDA0ZTc1CisJLmxvbmcJMHgyMDBhMjIwMCwweGQyODgyNDQxLDB4MjA0MDRlNzUsMHgyMDBiMjIwMAorCS5sb25nCTB4ZDI4ODI2NDEsMHgyMDQwNGU3NSwweDIwMGMyMjAwLDB4ZDI4ODI4NDEKKwkubG9uZwkweDIwNDA0ZTc1LDB4MjAwZDIyMDAsMHhkMjg4MmE0MSwweDIwNDA0ZTc1CisJLmxvbmcJMHgyMDE2MjIwMCwweGQyODgyYzgxLDB4MjA0MDRlNzUsMHgxZDdjMDAwNAorCS5sb25nCTB4ZmY0YTIwMmUsMHhmZmQ4MjIwMCwweGQyODgyZDQxLDB4ZmZkODIwNDAKKwkubG9uZwkweDRlNzUyMDJlLDB4ZmZhNDkwODgsMHgyZDQwZmZhNCwweDIwNDA0ZTc1CisJLmxvbmcJMHgyMDJlZmZhOCwweDkwODgyZDQwLDB4ZmZhODIwNDAsMHg0ZTc1MjAwYQorCS5sb25nCTB4OTA4ODI0NDAsMHgyMDQwNGU3NSwweDIwMGI5MDg4LDB4MjY0MDIwNDAKKwkubG9uZwkweDRlNzUyMDBjLDB4OTA4ODI4NDAsMHgyMDQwNGU3NSwweDIwMGQ5MDg4CisJLmxvbmcJMHgyYTQwMjA0MCwweDRlNzUyMDE2LDB4OTA4ODJjODAsMHgyMDQwNGU3NQorCS5sb25nCTB4MWQ3YzAwMDgsMHhmZjRhMjAyZSwweGZmZDg5MDg4LDB4MmQ0MGZmZDgKKwkubG9uZwkweDIwNDA0ZTc1LDB4MjA2ZWZmNDQsMHg1NGFlZmY0NCwweDYxZmZmZmZmCisJLmxvbmcJMHg1NGEyNGE4MSwweDY2ZmZmZmZmLDB4NjgyMDMwNDAsMHhkMWVlZmZhNAorCS5sb25nCTB4NGU3NTIwNmUsMHhmZjQ0NTRhZSwweGZmNDQ2MWZmLDB4ZmZmZjU0ODQKKwkubG9uZwkweDRhODE2NmZmLDB4ZmZmZjY4MDIsMHgzMDQwZDFlZSwweGZmYTg0ZTc1CisJLmxvbmcJMHgyMDZlZmY0NCwweDU0YWVmZjQ0LDB4NjFmZmZmZmYsMHg1NDY2NGE4MQorCS5sb25nCTB4NjZmZmZmZmYsMHg2N2U0MzA0MCwweGQxY2E0ZTc1LDB4MjA2ZWZmNDQKKwkubG9uZwkweDU0YWVmZjQ0LDB4NjFmZmZmZmYsMHg1NDRhNGE4MSwweDY2ZmZmZmZmCisJLmxvbmcJMHg2N2M4MzA0MCwweGQxY2I0ZTc1LDB4MjA2ZWZmNDQsMHg1NGFlZmY0NAorCS5sb25nCTB4NjFmZmZmZmYsMHg1NDJlNGE4MSwweDY2ZmZmZmZmLDB4NjdhYzMwNDAKKwkubG9uZwkweGQxY2M0ZTc1LDB4MjA2ZWZmNDQsMHg1NGFlZmY0NCwweDYxZmZmZmZmCisJLmxvbmcJMHg1NDEyNGE4MSwweDY2ZmZmZmZmLDB4Njc5MDMwNDAsMHhkMWNkNGU3NQorCS5sb25nCTB4MjA2ZWZmNDQsMHg1NGFlZmY0NCwweDYxZmZmZmZmLDB4NTNmNjRhODEKKwkubG9uZwkweDY2ZmZmZmZmLDB4Njc3NDMwNDAsMHhkMWQ2NGU3NSwweDIwNmVmZjQ0CisJLmxvbmcJMHg1NGFlZmY0NCwweDYxZmZmZmZmLDB4NTNkYTRhODEsMHg2NmZmZmZmZgorCS5sb25nCTB4Njc1ODMwNDAsMHhkMWVlZmZkOCwweDRlNzU1MDgxLDB4NjFmZjAwMDAKKwkubG9uZwkweDBmZGEyZjAwLDB4MjA2ZWZmNDQsMHg1NGFlZmY0NCwweDYxZmZmZmZmCisJLmxvbmcJMHg1M2IyNGE4MSwweDY2ZmZmZmZmLDB4NjczMDIwNWYsMHgwODAwMDAwOAorCS5sb25nCTB4NjYwMDAwZTYsMHgyZDQwZmY1NCwweDIyMDBlOTU5LDB4MDI0MTAwMGYKKwkubG9uZwkweDYxZmYwMDAwLDB4MGZhNjJmMDIsMHgyNDJlZmY1NCwweDA4MDIwMDBiCisJLmxvbmcJMHg2NjAyNDhjMCwweDIyMDJlZjU5LDB4MDI4MTAwMDAsMHgwMDAzZTNhOAorCS5sb25nCTB4NDljMmQwODIsMHhkMWMwMjQxZiwweDRlNzUyMDZlLDB4ZmY0NDU0YWUKKwkubG9uZwkweGZmNDQ2MWZmLDB4ZmZmZjUzNWMsMHg0YTgxNjZmZiwweGZmZmY2NmRhCisJLmxvbmcJMHgzMDQwNGU3NSwweDIwNmVmZjQ0LDB4NThhZWZmNDQsMHg2MWZmZmZmZgorCS5sb25nCTB4NTM1ODRhODEsMHg2NmZmZmZmZiwweDY2YzAyMDQwLDB4NGU3NTIwNmUKKwkubG9uZwkweGZmNDQ1NGFlLDB4ZmY0NDYxZmYsMHhmZmZmNTMyOCwweDRhODE2NmZmCisJLmxvbmcJMHhmZmZmNjZhNiwweDMwNDBkMWVlLDB4ZmY0NDU1ODgsMHg0ZTc1MjA2ZQorCS5sb25nCTB4ZmY0NDU0YWUsMHhmZjQ0NjFmZiwweGZmZmY1MzA4LDB4NGE4MTY2ZmYKKwkubG9uZwkweGZmZmY2Njg2LDB4MjA2ZWZmNDQsMHg1NTg4MDgwMCwweDAwMDg2NjAwCisJLmxvbmcJMHgwMDM4MmQ0MCwweGZmNTQyMjAwLDB4ZTk1OTAyNDEsMHgwMDBmNjFmZgorCS5sb25nCTB4MDAwMDBlZjgsMHgyZjAyMjQyZSwweGZmNTQwODAyLDB4MDAwYjY2MDIKKwkubG9uZwkweDQ4YzAyMjAyLDB4ZWY1OTAyODEsMHgwMDAwMDAwMywweGUzYTg0OWMyCisJLmxvbmcJMHhkMDgyZDFjMCwweDI0MWY0ZTc1LDB4MDgwMDAwMDYsMHg2NzBjNDhlNworCS5sb25nCTB4M2MwMDJhMDAsMHgyNjA4NDI4MiwweDYwMjgyZDQwLDB4ZmY1NGU5YzAKKwkubG9uZwkweDE0MDQ2MWZmLDB4MDAwMDBlYjQsMHg0OGU3M2MwMCwweDI0MDAyYTJlCisJLmxvbmcJMHhmZjU0MjYwOCwweDA4MDUwMDBiLDB4NjYwMjQ4YzIsMHhlOWM1MDU0MgorCS5sb25nCTB4ZTFhYTA4MDUsMHgwMDA3NjcwMiwweDQyODNlOWM1LDB4MDY4MjBjMDAKKwkubG9uZwkweDAwMDI2ZDM0LDB4NjcxODIwNmUsMHhmZjQ0NThhZSwweGZmNDQ2MWZmCisJLmxvbmcJMHhmZmZmNTI3NiwweDRhODE2NmZmLDB4MDAwMDAwYjAsMHg2MDE4MjA2ZQorCS5sb25nCTB4ZmY0NDU0YWUsMHhmZjQ0NjFmZiwweGZmZmY1MjQ4LDB4NGE4MTY2ZmYKKwkubG9uZwkweDAwMDAwMDk4LDB4NDhjMGQ2ODAsMHhlOWM1MDc4MiwweDY3MDAwMDZlCisJLmxvbmcJMHgwYzAwMDAwMiwweDZkMzQ2NzE4LDB4MjA2ZWZmNDQsMHg1OGFlZmY0NAorCS5sb25nCTB4NjFmZmZmZmYsMHg1MjM0NGE4MSwweDY2ZmYwMDAwLDB4MDA2ZTYwMWMKKwkubG9uZwkweDIwNmVmZjQ0LDB4NTRhZWZmNDQsMHg2MWZmZmZmZiwweDUyMDY0YTgxCisJLmxvbmcJMHg2NmZmMDAwMCwweDAwNTY0OGMwLDB4NjAwMjQyODAsMHgyODAwMDgwNQorCS5sb25nCTB4MDAwMjY3MTQsMHgyMDQzNjFmZiwweGZmZmY1MjQwLDB4NGE4MTY2MDAKKwkubG9uZwkweDAwMjhkMDgyLDB4ZDA4NDYwMTgsMHhkNjgyMjA0MywweDYxZmZmZmZmCisJLmxvbmcJMHg1MjJhNGE4MSwweDY2MDAwMDEyLDB4ZDA4NDYwMDQsMHhkNjgyMjAwMworCS5sb25nCTB4MjA0MDRjZGYsMHgwMDNjNGU3NSwweDIwNDM0Y2RmLDB4MDAzYzMwM2MKKwkubG9uZwkweDAxMDE2MGZmLDB4ZmZmZjY1ODIsMHg0Y2RmMDAzYywweDYwZmZmZmZmCisJLmxvbmcJMHg2NTI4NjFmZiwweDAwMDAyM2M2LDB4MzAzYzAwZTEsMHg2MDBhNjFmZgorCS5sb25nCTB4MDAwMDIzYmEsMHgzMDNjMDE2MSwweDIwNmVmZjU0LDB4NjBmZmZmZmYKKwkubG9uZwkweDY1NTgxMDJlLDB4ZmY0MjBjMDAsMHgwMDljNjcwMCwweDAwYjIwYzAwCisJLmxvbmcJMHgwMDk4NjcwMCwweDAwNzQwYzAwLDB4MDA5NDY3MzYsMHgyMDZlZmY0NAorCS5sb25nCTB4NThhZWZmNDQsMHg2MWZmZmZmZiwweDUxNzA0YTgxLDB4NjZmZmZmZmYKKwkubG9uZwkweDY0ZDgyZDQwLDB4ZmY2NDIwNmUsMHhmZjQ0NThhZSwweGZmNDQ2MWZmCisJLmxvbmcJMHhmZmZmNTE1NiwweDRhODE2NmZmLDB4ZmZmZjY0YmUsMHgyZDQwZmY2OAorCS5sb25nCTB4NGU3NTIwNmUsMHhmZjQ0NThhZSwweGZmNDQ2MWZmLDB4ZmZmZjUxM2EKKwkubG9uZwkweDRhODE2NmZmLDB4ZmZmZjY0YTIsMHgyZDQwZmY2MCwweDIwNmVmZjQ0CisJLmxvbmcJMHg1OGFlZmY0NCwweDYxZmZmZmZmLDB4NTEyMDRhODEsMHg2NmZmZmZmZgorCS5sb25nCTB4NjQ4ODJkNDAsMHhmZjY4NGU3NSwweDIwNmVmZjQ0LDB4NThhZWZmNDQKKwkubG9uZwkweDYxZmZmZmZmLDB4NTEwNDRhODEsMHg2NmZmZmZmZiwweDY0NmMyZDQwCisJLmxvbmcJMHhmZjYwMjA2ZSwweGZmNDQ1OGFlLDB4ZmY0NDYxZmYsMHhmZmZmNTBlYQorCS5sb25nCTB4NGE4MTY2ZmYsMHhmZmZmNjQ1MiwweDJkNDBmZjY0LDB4NGU3NTIwNmUKKwkubG9uZwkweGZmNDQ1OGFlLDB4ZmY0NDYxZmYsMHhmZmZmNTBjZSwweDRhODE2NmZmCisJLmxvbmcJMHhmZmZmNjQzNiwweDJkNDBmZjYwLDB4MjA2ZWZmNDQsMHg1OGFlZmY0NAorCS5sb25nCTB4NjFmZmZmZmYsMHg1MGI0NGE4MSwweDY2ZmZmZmZmLDB4NjQxYzJkNDAKKwkubG9uZwkweGZmNjQyMDZlLDB4ZmY0NDU4YWUsMHhmZjQ0NjFmZiwweGZmZmY1MDlhCisJLmxvbmcJMHg0YTgxNjZmZiwweGZmZmY2NDAyLDB4MmQ0MGZmNjgsMHg0ZTc1MjA0MAorCS5sb25nCTB4MTAyZWZmNDEsMHgyMjAwMDI0MCwweDAwMzgwMjgxLDB4MDAwMDAwMDcKKwkubG9uZwkweDBjMDAwMDE4LDB4NjcyNDBjMDAsMHgwMDIwNjcyYywweDgwNDEwYzAwCisJLmxvbmcJMHgwMDNjNjcwNiwweDIwNmUwMDBjLDB4NGU3NTFkN2MsMHgwMDgwZmY0YQorCS5sb25nCTB4NDFmNjAxNjIsMHhmZjY4MDAwNCwweDRlNzUyMDA4LDB4NjFmZjAwMDAKKwkubG9uZwkweDBkNzAyMDZlLDB4MDAwYzRlNzUsMHgyMDA4NjFmZiwweDAwMDAwZGIyCisJLmxvbmcJMHgyMDZlMDAwYywweDBjMDAwMDBjLDB4NjcwMjRlNzUsMHg1MTg4MmQ0OAorCS5sb25nCTB4MDAwYzRlNzUsMHgxMDJlZmY0MSwweDIyMDAwMjQwLDB4MDAzODAyODEKKwkubG9uZwkweDAwMDAwMDA3LDB4MGMwMDAwMTgsMHg2NzBlMGMwMCwweDAwMjA2NzAwCisJLmxvbmcJMHgwMDc2MjA2ZSwweDAwMGM0ZTc1LDB4MzIzYjEyMGUsMHgyMDZlMDAwYworCS5sb25nCTB4NGVmYjEwMDYsMHg0YWZjMDAwOCwweDAwMTAwMDFhLDB4MDAyNDAwMmMKKwkubG9uZwkweDAwMzQwMDNjLDB4MDA0NDAwNGUsMHgwNmFlMDAwMCwweDAwMGNmZmE0CisJLmxvbmcJMHg0ZTc1MDZhZSwweDAwMDAwMDBjLDB4ZmZhODRlNzUsMHhkNWZjMDAwMAorCS5sb25nCTB4MDAwYzRlNzUsMHhkN2ZjMDAwMCwweDAwMGM0ZTc1LDB4ZDlmYzAwMDAKKwkubG9uZwkweDAwMGM0ZTc1LDB4ZGJmYzAwMDAsMHgwMDBjNGU3NSwweDA2YWUwMDAwCisJLmxvbmcJMHgwMDBjZmZkNCwweDRlNzUxZDdjLDB4MDAwNGZmNGEsMHgwNmFlMDAwMAorCS5sb25nCTB4MDAwY2ZmZDgsMHg0ZTc1MzIzYiwweDEyMTQyMDZlLDB4MDAwYzUxODgKKwkubG9uZwkweDUxYWUwMDBjLDB4NGVmYjEwMDYsMHg0YWZjMDAwOCwweDAwMTAwMDE2CisJLmxvbmcJMHgwMDFjMDAyMCwweDAwMjQwMDI4LDB4MDAyYzAwMzIsMHgyZDQ4ZmZhNAorCS5sb25nCTB4NGU3NTJkNDgsMHhmZmE4NGU3NSwweDI0NDg0ZTc1LDB4MjY0ODRlNzUKKwkubG9uZwkweDI4NDg0ZTc1LDB4MmE0ODRlNzUsMHgyZDQ4ZmZkNCwweDRlNzUyZDQ4CisJLmxvbmcJMHhmZmQ4MWQ3YywweDAwMDhmZjRhLDB4NGU3NTA4MmUsMHgwMDA2ZmY0MgorCS5sb25nCTB4NjY2NDEwMmUsMHhmZjQzMDgwMCwweDAwMDU2NzJjLDB4MDgwMDAwMDQKKwkubG9uZwkweDY3MGEwMjQwLDB4MDA3ZjBjNDAsMHgwMDM4NjYxYywweGU5ZWUwMTgzCisJLmxvbmcJMHhmZjQyNjFmZiwweDAwMDAwZDZhLDB4NjFmZjAwMDAsMHgxMjA2MGMwMAorCS5sb25nCTB4MDAwNjY3MjIsMHgxZDQwZmY0ZiwweGU5ZWUwMGMzLDB4ZmY0MjYxZmYKKwkubG9uZwkweDAwMDAwY2JlLDB4NjFmZjAwMDAsMHgxMWVhMGMwMCwweDAwMDY2NzBlCisJLmxvbmcJMHgxZDQwZmY0ZSwweDRlNzU2MWZmLDB4MDAwMDExNDgsMHg2MGQ2NjFmZgorCS5sb25nCTB4MDAwMDExNDAsMHg2MGVhMzAyZSwweGZmNDIwODAwLDB4MDAwNTY3MmMKKwkubG9uZwkweDA4MDAwMDA0LDB4NjcwYTAyNDAsMHgwMDdmMGM0MCwweDAwMzg2NjFjCisJLmxvbmcJMHhlOWVlMDE4MywweGZmNDI2MWZmLDB4MDAwMDBkMDYsMHg2MWZmMDAwMAorCS5sb25nCTB4MTFhMjBjMDAsMHgwMDA2NjcyNiwweDFkNDBmZjRmLDB4ZTllZTAwYzMKKwkubG9uZwkweGZmNDJlOWVlLDB4MTI4M2ZmNDAsMHg2NjAwMDBiZSwweDQyMmVmZjRlCisJLmxvbmcJMHhlOWVlMTM0MywweGZmNDAzMDNiLDB4MDIxMjRlZmIsMHgwMDBlNjFmZgorCS5sb25nCTB4MDAwMDEwZTAsMHg2MGQyNGFmYywweDAwMDgwMDEwLDB4MDA2YTAwMDAKKwkubG9uZwkweDAwMDAwMDJlLDB4MDAwMDAwNGMsMHgwMDAwNjFmZiwweDAwMDAwYTVjCisJLmxvbmcJMHhmMjAwNDAwMCwweGYyMmVmMDgwLDB4ZmY2Y2YyODEsMHgwMDA0NGU3NQorCS5sb25nCTB4MWQ3YzAwMDEsMHhmZjRlNGU3NSwweDYxZmYwMDAwLDB4MGEzZWYyMDAKKwkubG9uZwkweDUwMDBmMjJlLDB4ZjA4MGZmNmMsMHhmMjgxMDAwNCwweDRlNzUxZDdjCisJLmxvbmcJMHgwMDAxZmY0ZSwweDRlNzU2MWZmLDB4MDAwMDBhMjAsMHhmMjAwNTgwMAorCS5sb25nCTB4ZjIyZWYwODAsMHhmZjZjZjI4MSwweDAwMDQ0ZTc1LDB4MWQ3YzAwMDEKKwkubG9uZwkweGZmNGU0ZTc1LDB4NjFmZjAwMDAsMHgwYTAyMmQ0MCwweGZmNTQ0MWVlCisJLmxvbmcJMHhmZjU0NjFmZiwweDAwMDAxMWRlLDB4MWQ0MGZmNGUsMHgwYzAwMDAwNQorCS5sb25nCTB4NjcwMDAxYTQsMHgwYzAwMDAwNCwweDY3MDAwMTVlLDB4ZjIxMDQ0MDAKKwkubG9uZwkweGYyMmVmMDgwLDB4ZmY2YzRlNzUsMHg0MjJlZmY0ZSwweDMwM2IwMjBhCisJLmxvbmcJMHg0ZWZiMDAwNiwweDRhZmMwMDA4LDB4MDAxMDAwZTIsMHgwMjcyMDJiMAorCS5sb25nCTB4MDA1NjAxYTAsMHgwMDljMDAwMCwweDcwMDQ2MWZmLDB4ZmZmZmZkMjIKKwkubG9uZwkweDBjMmUwMDgwLDB4ZmY0YTY3MjYsMHg2MWZmZmZmZiwweDRkZGU0YTgxCisJLmxvbmcJMHg2NmZmMDAwMCwweDFlZWNmMjAwLDB4NDAwMGYyMmUsMHhmMDgwZmY2YworCS5sb25nCTB4ZjI4MTAwMDQsMHg0ZTc1MWQ3YywweDAwMDFmZjRlLDB4NGU3NTYxZmYKKwkubG9uZwkweGZmZmY0ZDc2LDB4NGE4MTY2ZmYsMHhmZmZmNmU4YSwweDYwZDg3MDAyCisJLmxvbmcJMHg2MWZmZmZmZiwweGZjZGMwYzJlLDB4MDA4MGZmNGEsMHg2NzI2NjFmZgorCS5sb25nCTB4ZmZmZjRkODIsMHg0YTgxNjZmZiwweDAwMDAxZTk4LDB4ZjIwMDUwMDAKKwkubG9uZwkweGYyMmVmMDgwLDB4ZmY2Y2YyODEsMHgwMDA0NGU3NSwweDFkN2MwMDAxCisJLmxvbmcJMHhmZjRlNGU3NSwweDYxZmZmZmZmLDB4NGQxYTRhODEsMHg2NmZmZmZmZgorCS5sb25nCTB4NmU0NDYwZDgsMHg3MDAxNjFmZiwweGZmZmZmYzk2LDB4MGMyZTAwODAKKwkubG9uZwkweGZmNGE2NzI2LDB4NjFmZmZmZmYsMHg0ZDI2NGE4MSwweDY2ZmYwMDAwCisJLmxvbmcJMHgxZTQyZjIwMCwweDU4MDBmMjJlLDB4ZjA4MGZmNmMsMHhmMjgxMDAwNAorCS5sb25nCTB4NGU3NTFkN2MsMHgwMDAxZmY0ZSwweDRlNzU2MWZmLDB4ZmZmZjRjZDQKKwkubG9uZwkweDRhODE2NmZmLDB4ZmZmZjZkZmUsMHg2MGQ4NzAwNCwweDYxZmZmZmZmCisJLmxvbmcJMHhmYzUwMGMyZSwweDAwODBmZjRhLDB4NjczZTYxZmYsMHhmZmZmNGQwYworCS5sb25nCTB4MmQ0MGZmNTQsMHg0YTgxNjZmZiwweDAwMDAxZTE2LDB4NDFlZWZmNTQKKwkubG9uZwkweDYxZmYwMDAwLDB4MTBhMDFkNDAsMHhmZjRlMGMwMCwweDAwMDQ2NzAwCisJLmxvbmcJMHgwMDI4MGMwMCwweDAwMDU2NzAwLDB4MDA1ZWYyMmUsMHg0NDAwZmY1NAorCS5sb25nCTB4ZjIyZWYwODAsMHhmZjZjNGU3NSwweDYxZmZmZmZmLDB4NGM4YzRhODEKKwkubG9uZwkweDY2ZmZmZmZmLDB4NmRhMDYwYzQsMHg0MjZlZmY2YywweGU5ZDAwMjU3CisJLmxvbmcJMHhlMTg4MmQ0MCwweGZmNzA0MmFlLDB4ZmY3NDQyNmUsMHhmZjZjMDgxMAorCS5sb25nCTB4MDAwNzY3MDYsMHgwOGVlMDAwNywweGZmNmM0MWVlLDB4ZmY2YzYxZmYKKwkubG9uZwkweDAwMDAwZTc4LDB4MzIzYzNmODEsMHg5MjQwODM2ZSwweGZmNmMxZDdjCisJLmxvbmcJMHgwMDAwZmY0ZSwweDRlNzUzZDdjLDB4N2ZmZmZmNmMsMHhlOWQwMDI1NworCS5sb25nCTB4ZTE4ODJkNDAsMHhmZjcwNDJhZSwweGZmNzQwODEwLDB4MDAwNzY3MDYKKwkubG9uZwkweDA4ZWUwMDA3LDB4ZmY2YzRlNzUsMHg3MDA4NjFmZiwweGZmZmZmYjkyCisJLmxvbmcJMHgwYzJlMDA4MCwweGZmNGE2NzQwLDB4NDNlZWZmNTQsMHg3MDA4NjFmZgorCS5sb25nCTB4ZmZmZjRiYzQsMHg0YTgxNjZmZiwweDAwMDAxZDY0LDB4NDFlZWZmNTQKKwkubG9uZwkweDYxZmYwMDAwLDB4MGY3MDFkNDAsMHhmZjRlMGMwMCwweDAwMDQ2NzAwCisJLmxvbmcJMHgwMDJlMGMwMCwweDAwMDU2NzAwLDB4MDA2OGYyMmUsMHg1NDAwZmY1NAorCS5sb25nCTB4ZjIyZWYwODAsMHhmZjZjNGU3NSwweDQzZWVmZjU0LDB4NzAwODYxZmYKKwkubG9uZwkweGZmZmY0YjZlLDB4NGE4MTY2ZmYsMHhmZmZmNmNkYSwweDYwYmU0MjZlCisJLmxvbmcJMHhmZjZjZTlkMCwweDAzMWYyZDQwLDB4ZmY3MGU5ZTgsMHgwMmQ1MDAwNAorCS5sb25nCTB4NzIwYmUzYTgsMHgyZDQwZmY3NCwweDA4MTAwMDA3LDB4NjcwNjA4ZWUKKwkubG9uZwkweDAwMDdmZjZjLDB4NDFlZWZmNmMsMHg2MWZmMDAwMCwweDBkYWUzMjNjCisJLmxvbmcJMHgzYzAxOTI0MCwweDgzNmVmZjZjLDB4MWQ3YzAwMDAsMHhmZjRlNGU3NQorCS5sb25nCTB4M2Q3YzdmZmYsMHhmZjZjZTlkMCwweDAzMWYyZDQwLDB4ZmY3MGU5ZTgKKwkubG9uZwkweDAyZDUwMDA0LDB4NzIwYmUzYTgsMHgyZDQwZmY3NCwweDA4MTAwMDA3CisJLmxvbmcJMHg2NzA2MDhlZSwweDAwMDdmZjZjLDB4NGU3NTcwMGMsMHg2MWZmZmZmZgorCS5sb25nCTB4ZmFjMDQzZWUsMHhmZjZjNzAwYywweDYxZmZmZmZmLDB4NGFmYTRhODEKKwkubG9uZwkweDY2ZmYwMDAwLDB4MWNhODQxZWUsMHhmZjZjNjFmZiwweDAwMDAwZTI0CisJLmxvbmcJMHgwYzAwMDAwNiwweDY3MDYxZDQwLDB4ZmY0ZTRlNzUsMHg2MWZmMDAwMAorCS5sb25nCTB4MGQ4MjFkNDAsMHhmZjRlNGU3NSwweDYxZmYwMDAwLDB4MTI1NDQxZWUKKwkubG9uZwkweGZmNmM2MWZmLDB4MDAwMDBkZmMsMHgwYzAwMDAwNiwweDY3MDYxZDQwCisJLmxvbmcJMHhmZjRlNGU3NSwweDYxZmYwMDAwLDB4MGQ1YTFkNDAsMHhmZjRlNGU3NQorCS5sb25nCTB4ZTllZTEwYzMsMHhmZjQyMzI3YiwweDEyMGE0ZWZiLDB4OTgwNjRhZmMKKwkubG9uZwkweDAwMDgwMGUwLDB4MDFlMDAxNDgsMHgwNjIwMDA3OCwweDA0MWEwMDEwCisJLmxvbmcJMHgwNjIwNGEyZSwweGZmNGU2NjRjLDB4ZjIyOGQwODAsMHgwMDAwZjIwMAorCS5sb25nCTB4OTAwMGYyMDAsMHg3ODAwZjIzYywweDkwMDAwMDAwLDB4MDAwMGYyMDEKKwkubG9uZwkweGE4MDA4MzZlLDB4ZmY2NjEyMmUsMHhmZjQxMDIwMSwweDAwMzg2NzE0CisJLmxvbmcJMHgyMDZlMDAwYywweDYxZmZmZmZmLDB4NGFlODRhODEsMHg2NmZmMDAwMAorCS5sb25nCTB4MWMwYTRlNzUsMHgxMjJlZmY0MSwweDAyNDEwMDA3LDB4NjFmZjAwMDAKKwkubG9uZwkweDA3NjQ0ZTc1LDB4MjIyODAwMDAsMHgwMjgxODAwMCwweDAwMDAwMDgxCisJLmxvbmcJMHgwMDgwMDAwMCwweGYyMDE0NDAwLDB4NjBhNDRhMmUsMHhmZjRlNjY0YworCS5sb25nCTB4ZjIyOGQwODAsMHgwMDAwZjIwMCwweDkwMDBmMjAwLDB4NzAwMGYyM2MKKwkubG9uZwkweDkwMDAwMDAwLDB4MDAwMGYyMDEsMHhhODAwODM2ZSwweGZmNjYxMjJlCisJLmxvbmcJMHhmZjQxMDIwMSwweDAwMzg2NzE0LDB4MjA2ZTAwMGMsMHg2MWZmZmZmZgorCS5sb25nCTB4NGE5NjRhODEsMHg2NmZmMDAwMCwweDFiYjA0ZTc1LDB4MTIyZWZmNDEKKwkubG9uZwkweDAyNDEwMDA3LDB4NjFmZjAwMDAsMHgwNmMwNGU3NSwweDIyMjgwMDAwCisJLmxvbmcJMHgwMjgxODAwMCwweDAwMDAwMDgxLDB4MDA4MDAwMDAsMHhmMjAxNDQwMAorCS5sb25nCTB4NjBhNDRhMmUsMHhmZjRlNjY0YywweGYyMjhkMDgwLDB4MDAwMGYyMDAKKwkubG9uZwkweDkwMDBmMjAwLDB4NjAwMGYyM2MsMHg5MDAwMDAwMCwweDAwMDBmMjAxCisJLmxvbmcJMHhhODAwODM2ZSwweGZmNjYxMjJlLDB4ZmY0MTAyMDEsMHgwMDM4NjcxNAorCS5sb25nCTB4MjA2ZTAwMGMsMHg2MWZmZmZmZiwweDRhNDQ0YTgxLDB4NjZmZjAwMDAKKwkubG9uZwkweDFiNTY0ZTc1LDB4MTIyZWZmNDEsMHgwMjQxMDAwNywweDYxZmYwMDAwCisJLmxvbmcJMHgwNjFjNGU3NSwweDIyMjgwMDAwLDB4MDI4MTgwMDAsMHgwMDAwMDA4MQorCS5sb25nCTB4MDA4MDAwMDAsMHhmMjAxNDQwMCwweDYwYTQzZDY4LDB4MDAwMGZmODQKKwkubG9uZwkweDQyNmVmZjg2LDB4MmQ2ODAwMDQsMHhmZjg4MmQ2OCwweDAwMDhmZjhjCisJLmxvbmcJMHhmMjI4ZDA4MCwweDAwMDA2MWZmLDB4ZmZmZmY5NGMsMHgyMjQ4NDFlZQorCS5sb25nCTB4ZmY4NDcwMGMsMHgwYzJlMDAwOCwweGZmNGE2NzI2LDB4NjFmZmZmZmYKKwkubG9uZwkweDQ5MmM0YTgxLDB4NjYwMDAwNTIsMHg0YTJlZmY0ZSwweDY2MDI0ZTc1CisJLmxvbmcJMHgwOGVlMDAwMywweGZmNjYxMDJlLDB4ZmY2MjAyMDAsMHgwMDBhNjYxNgorCS5sb25nCTB4NGU3NTYxZmYsMHhmZmZmNTc4OCwweDRhODE2NjAwLDB4MDAyYzRhMmUKKwkubG9uZwkweGZmNGU2NmRjLDB4NGU3NTQxZWUsMHhmZjg0NjFmZiwweDAwMDAwYjNjCisJLmxvbmcJMHg0NDQwMDI0MCwweDdmZmYwMjZlLDB4ODAwMGZmODQsMHg4MTZlZmY4NAorCS5sb25nCTB4ZjIyZWQwNDAsMHhmZjg0NGU3NSwweDJjYWVmZmQ0LDB4NjBmZjAwMDAKKwkubG9uZwkweDFhYjIwMjAwLDB4MDAzMDAwMDAsMHgwMDQwMmQ0MCwweGZmNWMzMDI4CisJLmxvbmcJMHgwMDAwMDI0MCwweDdmZmYwYzQwLDB4NDA3ZTZlMDAsMHgwMGU2NjcwMAorCS5sb25nCTB4MDE1MjBjNDAsMHgzZjgxNmQwMCwweDAwNThmMjI4LDB4ZDA4MDAwMDAKKwkubG9uZwkweGYyMmU5MDAwLDB4ZmY1Y2YyM2MsMHg4ODAwMDAwMCwweDAwMDBmMjAwCisJLmxvbmcJMHg2NDAwZjIzYywweDkwMDAwMDAwLDB4MDAwMGYyMDEsMHhhODAwODM2ZQorCS5sb25nCTB4ZmY2NjEyMmUsMHhmZjQxMDIwMSwweDAwMzg2NzE0LDB4MjA2ZTAwMGMKKwkubG9uZwkweDYxZmZmZmZmLDB4NDkxODRhODEsMHg2NmZmMDAwMCwweDFhMmE0ZTc1CisJLmxvbmcJMHgxMjJlZmY0MSwweDAyNDEwMDA3LDB4NjFmZjAwMDAsMHgwNGYwNGU3NQorCS5sb25nCTB4MDhlZTAwMDMsMHhmZjY2M2Q2OCwweDAwMDBmZjg0LDB4MmQ2ODAwMDQKKwkubG9uZwkweGZmODgyZDY4LDB4MDAwOGZmOGMsMHgyZjA4NDI4MCwweDBjMmUwMDA0CisJLmxvbmcJMHhmZjRlNjYwYSwweDQxZWVmZjg0LDB4NjFmZjAwMDAsMHgwYTZlNDFlZQorCS5sb25nCTB4ZmY4NDIyMmUsMHhmZjVjNjFmZiwweDAwMDAwYzg2LDB4NDFlZWZmODQKKwkubG9uZwkweDYxZmYwMDAwLDB4MDM0YzEyMmUsMHhmZjQxMDIwMSwweDAwMzg2NzE0CisJLmxvbmcJMHgyMDZlMDAwYywweDYxZmZmZmZmLDB4NDhhNDRhODEsMHg2NmZmMDAwMAorCS5sb25nCTB4MTliNjYwMGUsMHgxMjJlZmY0MSwweDAyNDEwMDA3LDB4NjFmZjAwMDAKKwkubG9uZwkweDA0N2MxMjJlLDB4ZmY2MjAyMDEsMHgwMDBhNjYwMCwweDAwYjg1ODhmCisJLmxvbmcJMHg0ZTc1NGEyOCwweDAwMDc2NjBlLDB4NGFhODAwMDgsMHg2NjA4MDA2ZQorCS5sb25nCTB4MTA0OGZmNjYsMHg2MDA2MDA2ZSwweDEyNDhmZjY2LDB4MmYwODRhMjgKKwkubG9uZwkweDAwMDA1YmMxLDB4MjAyZWZmNWMsMHg2MWZmMDAwMCwweDBkMTJmMjEwCisJLmxvbmcJMHhkMDgwZjIwMCwweDY0MDAxMjJlLDB4ZmY0MTAyMDEsMHgwMDM4NjcxNAorCS5sb25nCTB4MjA2ZTAwMGMsMHg2MWZmZmZmZiwweDQ4MzQ0YTgxLDB4NjZmZjAwMDAKKwkubG9uZwkweDE5NDY2MDBlLDB4MTIyZWZmNDEsMHgwMjQxMDAwNywweDYxZmYwMDAwCisJLmxvbmcJMHgwNDBjMTIyZSwweGZmNjIwMjAxLDB4MDAwYTY2MDAsMHgwMDdjNTg4ZgorCS5sb25nCTB4NGU3NTMyMjgsMHgwMDAwMDI0MSwweDgwMDAwMDQxLDB4M2ZmZjNkNDEKKwkubG9uZwkweGZmODQyZDY4LDB4MDAwNGZmODgsMHgyZDY4MDAwOCwweGZmOGNmMjJlCisJLmxvbmcJMHg5MDAwZmY1YywweGYyMmU0ODAwLDB4ZmY4NGYyM2MsMHg5MDAwMDAwMAorCS5sb25nCTB4MDAwMGYyMDAsMHgwMDE4ZjIzYywweDU4MzgwMDAyLDB4ZjI5NGZlN2MKKwkubG9uZwkweDYwMDBmZjUwLDB4MjA1ZjNkNjgsMHgwMDAwZmY4NCwweDJkNjgwMDA0CisJLmxvbmcJMHhmZjg4MmQ2OCwweDAwMDhmZjhjLDB4MGMyZTAwMDQsMHhmZjRlNjYyYworCS5sb25nCTB4NDFlZWZmODQsMHg2MWZmMDAwMCwweDA5NDI0NDgwLDB4MDI0MDdmZmYKKwkubG9uZwkweGVmZWUwMDRmLDB4ZmY4NDYwMTQsMHgyMDVmM2Q2OCwweDAwMDBmZjg0CisJLmxvbmcJMHgyZDY4MDAwNCwweGZmODgyZDY4LDB4MDAwOGZmOGMsMHgwOGFlMDAwNworCS5sb25nCTB4ZmY4NDU2ZWUsMHhmZjg2NDFlZSwweGZmODQxMjJlLDB4ZmY1ZmU4MDkKKwkubG9uZwkweDAyNDEwMDBjLDB4NDg0MTEyMmUsMHhmZjVmZTgwOSwweDAyNDEwMDAzCisJLmxvbmcJMHg0MjgwNjFmZiwweDAwMDAwNzgyLDB4NGEyZWZmODYsMHg2NzA2MDhlZQorCS5sb25nCTB4MDAwN2ZmODQsMHhmMjJlZDA0MCwweGZmODQ0ZTc1LDB4MDIwMDAwMzAKKwkubG9uZwkweDAwMDAwMDgwLDB4MmQ0MGZmNWMsMHgzMDI4MDAwMCwweDAyNDA3ZmZmCisJLmxvbmcJMHgwYzQwNDNmZSwweDZlMDAwMGM4LDB4NjcwMDAxMjAsMHgwYzQwM2MwMQorCS5sb25nCTB4NmQwMDAwNDYsMHhmMjI4ZDA4MCwweDAwMDBmMjJlLDB4OTAwMGZmNWMKKwkubG9uZwkweGYyM2M4ODAwLDB4MDAwMDAwMDAsMHhmMjJlNzQwMCwweGZmNTRmMjNjCisJLmxvbmcJMHg5MDAwMDAwMCwweDAwMDBmMjAwLDB4YTgwMDgxNmUsMHhmZjY2MjI2ZQorCS5sb25nCTB4MDAwYzQxZWUsMHhmZjU0NzAwOCwweDYxZmZmZmZmLDB4NDYzMDRhODEKKwkubG9uZwkweDY2ZmYwMDAwLDB4MTgwMDRlNzUsMHgwOGVlMDAwMywweGZmNjYzZDY4CisJLmxvbmcJMHgwMDAwZmY4NCwweDJkNjgwMDA0LDB4ZmY4ODJkNjgsMHgwMDA4ZmY4YworCS5sb25nCTB4MmYwODQyODAsMHgwYzJlMDAwNCwweGZmNGU2NjBhLDB4NDFlZWZmODQKKwkubG9uZwkweDYxZmYwMDAwLDB4MDg0NjQxZWUsMHhmZjg0MjIyZSwweGZmNWM2MWZmCisJLmxvbmcJMHgwMDAwMGE1ZSwweDQxZWVmZjg0LDB4NjFmZjAwMDAsMHgwMGQyMmQ0MAorCS5sb25nCTB4ZmY1NDJkNDEsMHhmZjU4MjI2ZSwweDAwMGM0MWVlLDB4ZmY1NDcwMDgKKwkubG9uZwkweDYxZmZmZmZmLDB4NDVjODRhODEsMHg2NmZmMDAwMCwweDE3OTgxMjJlCisJLmxvbmcJMHhmZjYyMDIwMSwweDAwMGE2NjAwLDB4ZmU5YzU4OGYsMHg0ZTc1MzAyOAorCS5sb25nCTB4MDAwYTAyNDAsMHgwN2ZmNjYwOCwweDAwNmUxMDQ4LDB4ZmY2NjYwMDYKKwkubG9uZwkweDAwNmUxMjQ4LDB4ZmY2NjJmMDgsMHg0YTI4MDAwMCwweDViYzEyMDJlCisJLmxvbmcJMHhmZjVjNjFmZiwweDAwMDAwYWY4LDB4ZjIxMGQwODAsMHhmMjJlNzQwMAorCS5sb25nCTB4ZmY1NDIyNmUsMHgwMDBjNDFlZSwweGZmNTQ3MDA4LDB4NjFmZmZmZmYKKwkubG9uZwkweDQ1NmM0YTgxLDB4NjZmZjAwMDAsMHgxNzNjMTIyZSwweGZmNjIwMjAxCisJLmxvbmcJMHgwMDBhNjYwMCwweGZlNzQ1ODhmLDB4NGU3NTMyMjgsMHgwMDAwMDI0MQorCS5sb25nCTB4ODAwMDAwNDEsMHgzZmZmM2Q0MSwweGZmODQyZDY4LDB4MDAwNGZmODgKKwkubG9uZwkweDJkNjgwMDA4LDB4ZmY4Y2YyMmUsMHg5MDAwZmY1YywweGYyMmU0ODAwCisJLmxvbmcJMHhmZjg0ZjIzYywweDkwMDAwMDAwLDB4MDAwMGYyMDAsMHgwMDE4ZjIzYworCS5sb25nCTB4NTgzODAwMDIsMHhmMjk0ZmVhZSwweDYwMDBmZjY0LDB4NDI4MDMwMjgKKwkubG9uZwkweDAwMDAwNDQwLDB4M2ZmZjA2NDAsMHgwM2ZmNGEyOCwweDAwMDQ2YjAyCisJLmxvbmcJMHg1MzQwNDg0MCwweGU5ODg0YTI4LDB4MDAwMDZhMDQsMHgwOGMwMDAxZgorCS5sb25nCTB4MjIyODAwMDQsMHhlOWMxMTA1NCwweDgwODEyZDQwLDB4ZmY1NDIyMjgKKwkubG9uZwkweDAwMDQ3MDE1LDB4ZTFhOTJkNDEsMHhmZjU4MjIyOCwweDAwMDhlOWMxCisJLmxvbmcJMHgwMDE1MjIyZSwweGZmNTg4MjgwLDB4MjAyZWZmNTQsMHg0ZTc1NDI4MAorCS5sb25nCTB4MzAyODAwMDAsMHgwNDQwM2ZmZiwweDA2NDAwMDdmLDB4NGEyODAwMDQKKwkubG9uZwkweDZiMDI1MzQwLDB4NDg0MGVmODgsMHg0YTI4MDAwMCwweDZhMDQwOGMwCisJLmxvbmcJMHgwMDFmMjIyOCwweDAwMDQwMjgxLDB4N2ZmZmZmMDAsMHhlMDg5ODA4MQorCS5sb25nCTB4NGU3NTYxZmYsMHhmZmZmZjQ5MCwweDJmMDgxMDJlLDB4ZmY0ZTY2MDAKKwkubG9uZwkweDAwODIwODJlLDB4MDAwNGZmNDIsMHg2NzEyMTIyZSwweGZmNDNlODA5CisJLmxvbmcJMHgwMjQxMDAwNywweDYxZmYwMDAwLDB4MDA5MjYwMDQsMHgxMDJlZmY0MworCS5sb25nCTB4ZWJjMDA2NDcsMHgyZjAwNDFlZSwweGZmNmM2MWZmLDB4MDAwMDBlZDAKKwkubG9uZwkweDAyYWVjZmZmLDB4ZjAwZmZmODQsMHgyMDFmNGEyZSwweGZmODc2NjE2CisJLmxvbmcJMHg0YWFlZmY4OCwweDY2MTA0YWFlLDB4ZmY4YzY2MGEsMHg0YTgwNjYwNgorCS5sb25nCTB4MDI2ZWYwMDAsMHhmZjg0NDFlZSwweGZmODQyMjVmLDB4NzAwYzBjMmUKKwkubG9uZwkweDAwMDhmZjRhLDB4NjcwZTYxZmYsMHhmZmZmNDQxMiwweDRhODE2NjAwCisJLmxvbmcJMHhmYjM4NGU3NSwweDYxZmZmZmZmLDB4NTI4NjRhODEsMHg2NjAwZmIyYQorCS5sb25nCTB4NGU3NTBjMDAsMHgwMDA0NjcwMCwweGZmN2E0MWVlLDB4ZmY2YzQyNmUKKwkubG9uZwkweGZmNmUwYzAwLDB4MDAwNTY3MDIsMHg2MGMwMDA2ZSwweDQwODBmZjY2CisJLmxvbmcJMHgwOGVlMDAwNiwweGZmNzA2MGIyLDB4MzAzYjEyMDYsMHg0ZWZiMDAwMgorCS5sb25nCTB4MDAyMDAwMjYsMHgwMDJjMDAzMCwweDAwMzQwMDM4LDB4MDAzYzAwNDAKKwkubG9uZwkweDAwNDQwMDRhLDB4MDA1MDAwNTQsMHgwMDU4MDA1YywweDAwNjAwMDY0CisJLmxvbmcJMHgyMDJlZmY5YywweDRlNzUyMDJlLDB4ZmZhMDRlNzUsMHgyMDAyNGU3NQorCS5sb25nCTB4MjAwMzRlNzUsMHgyMDA0NGU3NSwweDIwMDU0ZTc1LDB4MjAwNjRlNzUKKwkubG9uZwkweDIwMDc0ZTc1LDB4MjAyZWZmYTQsMHg0ZTc1MjAyZSwweGZmYTg0ZTc1CisJLmxvbmcJMHgyMDBhNGU3NSwweDIwMGI0ZTc1LDB4MjAwYzRlNzUsMHgyMDBkNGU3NQorCS5sb25nCTB4MjAxNjRlNzUsMHgyMDJlZmZkOCwweDRlNzUzMjNiLDB4MTIwNjRlZmIKKwkubG9uZwkweDEwMDIwMDEwLDB4MDAxNjAwMWMsMHgwMDIwMDAyNCwweDAwMjgwMDJjCisJLmxvbmcJMHgwMDMwMmQ0MCwweGZmOWM0ZTc1LDB4MmQ0MGZmYTAsMHg0ZTc1MjQwMAorCS5sb25nCTB4NGU3NTI2MDAsMHg0ZTc1MjgwMCwweDRlNzUyYTAwLDB4NGU3NTJjMDAKKwkubG9uZwkweDRlNzUyZTAwLDB4NGU3NTMyM2IsMHgxMjA2NGVmYiwweDEwMDIwMDEwCisJLmxvbmcJMHgwMDE2MDAxYywweDAwMjAwMDI0LDB4MDAyODAwMmMsMHgwMDMwM2Q0MAorCS5sb25nCTB4ZmY5ZTRlNzUsMHgzZDQwZmZhMiwweDRlNzUzNDAwLDB4NGU3NTM2MDAKKwkubG9uZwkweDRlNzUzODAwLDB4NGU3NTNhMDAsMHg0ZTc1M2MwMCwweDRlNzUzZTAwCisJLmxvbmcJMHg0ZTc1MzIzYiwweDEyMDY0ZWZiLDB4MTAwMjAwMTAsMHgwMDE2MDAxYworCS5sb25nCTB4MDAyMDAwMjQsMHgwMDI4MDAyYywweDAwMzAxZDQwLDB4ZmY5ZjRlNzUKKwkubG9uZwkweDFkNDBmZmEzLDB4NGU3NTE0MDAsMHg0ZTc1MTYwMCwweDRlNzUxODAwCisJLmxvbmcJMHg0ZTc1MWEwMCwweDRlNzUxYzAwLDB4NGU3NTFlMDAsMHg0ZTc1MzIzYgorCS5sb25nCTB4MTIwNjRlZmIsMHgxMDAyMDAxMCwweDAwMTYwMDFjLDB4MDAyMDAwMjQKKwkubG9uZwkweDAwMjgwMDJjLDB4MDAzMGQxYWUsMHhmZmE0NGU3NSwweGQxYWVmZmE4CisJLmxvbmcJMHg0ZTc1ZDVjMCwweDRlNzVkN2MwLDB4NGU3NWQ5YzAsMHg0ZTc1ZGJjMAorCS5sb25nCTB4NGU3NWQxOTYsMHg0ZTc1MWQ3YywweDAwMDRmZjRhLDB4MGMwMDAwMDEKKwkubG9uZwkweDY3MDZkMWFlLDB4ZmZkODRlNzUsMHg1NGFlZmZkOCwweDRlNzUzMjNiCisJLmxvbmcJMHgxMjA2NGVmYiwweDEwMDIwMDEwLDB4MDAxNjAwMWMsMHgwMDIwMDAyNAorCS5sb25nCTB4MDAyODAwMmMsMHgwMDMwOTFhZSwweGZmYTQ0ZTc1LDB4OTFhZWZmYTgKKwkubG9uZwkweDRlNzU5NWMwLDB4NGU3NTk3YzAsMHg0ZTc1OTljMCwweDRlNzU5YmMwCisJLmxvbmcJMHg0ZTc1OTE5NiwweDRlNzUxZDdjLDB4MDAwOGZmNGEsMHgwYzAwMDAwMQorCS5sb25nCTB4NjcwNjkxYWUsMHhmZmQ4NGU3NSwweDU1YWVmZmQ4LDB4NGU3NTMwM2IKKwkubG9uZwkweDAyMDY0ZWZiLDB4MDAwMjAwMTAsMHgwMDI4MDA0MCwweDAwNGMwMDU4CisJLmxvbmcJMHgwMDY0MDA3MCwweDAwN2MyZDZlLDB4ZmZkY2ZmNmMsMHgyZDZlZmZlMAorCS5sb25nCTB4ZmY3MDJkNmUsMHhmZmU0ZmY3NCwweDQxZWVmZjZjLDB4NGU3NTJkNmUKKwkubG9uZwkweGZmZThmZjZjLDB4MmQ2ZWZmZWMsMHhmZjcwMmQ2ZSwweGZmZjBmZjc0CisJLmxvbmcJMHg0MWVlZmY2YywweDRlNzVmMjJlLDB4ZjAyMGZmNmMsMHg0MWVlZmY2YworCS5sb25nCTB4NGU3NWYyMmUsMHhmMDEwZmY2YywweDQxZWVmZjZjLDB4NGU3NWYyMmUKKwkubG9uZwkweGYwMDhmZjZjLDB4NDFlZWZmNmMsMHg0ZTc1ZjIyZSwweGYwMDRmZjZjCisJLmxvbmcJMHg0MWVlZmY2YywweDRlNzVmMjJlLDB4ZjAwMmZmNmMsMHg0MWVlZmY2YworCS5sb25nCTB4NGU3NWYyMmUsMHhmMDAxZmY2YywweDQxZWVmZjZjLDB4NGU3NTMwM2IKKwkubG9uZwkweDAyMDY0ZWZiLDB4MDAwMjAwMTAsMHgwMDI4MDA0MCwweDAwNGMwMDU4CisJLmxvbmcJMHgwMDY0MDA3MCwweDAwN2MyZDZlLDB4ZmZkY2ZmNzgsMHgyZDZlZmZlMAorCS5sb25nCTB4ZmY3YzJkNmUsMHhmZmU0ZmY4MCwweDQxZWVmZjc4LDB4NGU3NTJkNmUKKwkubG9uZwkweGZmZThmZjc4LDB4MmQ2ZWZmZWMsMHhmZjdjMmQ2ZSwweGZmZjBmZjgwCisJLmxvbmcJMHg0MWVlZmY3OCwweDRlNzVmMjJlLDB4ZjAyMGZmNzgsMHg0MWVlZmY3OAorCS5sb25nCTB4NGU3NWYyMmUsMHhmMDEwZmY3OCwweDQxZWVmZjc4LDB4NGU3NWYyMmUKKwkubG9uZwkweGYwMDhmZjc4LDB4NDFlZWZmNzgsMHg0ZTc1ZjIyZSwweGYwMDRmZjc4CisJLmxvbmcJMHg0MWVlZmY3OCwweDRlNzVmMjJlLDB4ZjAwMmZmNzgsMHg0MWVlZmY3OAorCS5sb25nCTB4NGU3NWYyMmUsMHhmMDAxZmY3OCwweDQxZWVmZjc4LDB4NGU3NTMwM2IKKwkubG9uZwkweDAyMDY0ZWZiLDB4MDAwMjAwMTAsMHgwMDE4MDAyMCwweDAwMmEwMDM0CisJLmxvbmcJMHgwMDNlMDA0OCwweDAwNTJmMjJlLDB4ZjA4MGZmZGMsMHg0ZTc1ZjIyZQorCS5sb25nCTB4ZjA4MGZmZTgsMHg0ZTc1ZjIyNywweGUwMDFmMjFmLDB4ZDAyMDRlNzUKKwkubG9uZwkweGYyMjdlMDAxLDB4ZjIxZmQwMTAsMHg0ZTc1ZjIyNywweGUwMDFmMjFmCisJLmxvbmcJMHhkMDA4NGU3NSwweGYyMjdlMDAxLDB4ZjIxZmQwMDQsMHg0ZTc1ZjIyNworCS5sb25nCTB4ZTAwMWYyMWYsMHhkMDAyNGU3NSwweGYyMjdlMDAxLDB4ZjIxZmQwMDEKKwkubG9uZwkweDRlNzUwMDAwLDB4M2Y4MTNjMDEsMHhlNDA4MzIzYiwweDAyZjYzMDAxCisJLmxvbmcJMHg5MDY4MDAwMCwweDBjNDAwMDQyLDB4NmExNjQyODAsMHgwODJlMDAwMQorCS5sb25nCTB4ZmY2NjY3MDQsMHgwOGMwMDAxZCwweDYxZmYwMDAwLDB4MDAxYTRlNzUKKwkubG9uZwkweDIwM2MyMDAwLDB4MDAwMDMxNDEsMHgwMDAwNDJhOCwweDAwMDQ0MmE4CisJLmxvbmcJMHgwMDA4NGU3NSwweDJkNjgwMDA4LDB4ZmY1NDJkNDAsMHhmZjU4MjAwMQorCS5sb25nCTB4OTI2ODAwMDAsMHg2ZjEwMGM0MSwweDAwMjA2ZDEwLDB4MGM0MTAwNDAKKwkubG9uZwkweDZkNTA2MDAwLDB4MDA5YTIwMmUsMHhmZjU4NGU3NSwweDJmMDIzMTQwCisJLmxvbmcJMHgwMDAwNzAyMCwweDkwNDEwYzQxLDB4MDAxZDZkMDgsMHgxNDJlZmY1OAorCS5sb25nCTB4ODUyZWZmNTcsMHhlOWU4MjAyMCwweDAwMDRlOWU4LDB4MTgwMDAwMDQKKwkubG9uZwkweGU5ZWUwODAwLDB4ZmY1NDIxNDIsMHgwMDA0MjE0MSwweDAwMDhlOGMwCisJLmxvbmcJMHgwMDllNjcwNCwweDA4YzAwMDFkLDB4MDI4MGUwMDAsMHgwMDAwMjQxZgorCS5sb25nCTB4NGU3NTJmMDIsMHgzMTQwMDAwMCwweDA0NDEwMDIwLDB4NzAyMDkwNDEKKwkubG9uZwkweDE0MmVmZjU4LDB4ODUyZWZmNTcsMHhlOWU4MjAyMCwweDAwMDRlOWU4CisJLmxvbmcJMHgxODAwMDAwNCwweGU4YzEwMDllLDB4NjYwY2U4ZWUsMHgwODFmZmY1NAorCS5sb25nCTB4NjYwNDIwMDEsMHg2MDA2MjAwMSwweDA4YzAwMDFkLDB4NDJhODAwMDQKKwkubG9uZwkweDIxNDIwMDA4LDB4MDI4MGUwMDAsMHgwMDAwMjQxZiwweDRlNzUzMTQwCisJLmxvbmcJMHgwMDAwMGM0MSwweDAwNDE2ZDEyLDB4NjcyNDQyYTgsMHgwMDA0NDJhOAorCS5sb25nCTB4MDAwODIwM2MsMHgyMDAwMDAwMCwweDRlNzUyMDI4LDB4MDAwNDIyMDAKKwkubG9uZwkweDAyODBjMDAwLDB4MDAwMDAyODEsMHgzZmZmZmZmZiwweDYwMTIyMDI4CisJLmxvbmcJMHgwMDA0MDI4MCwweDgwMDAwMDAwLDB4ZTI4ODAyODEsMHg3ZmZmZmZmZgorCS5sb25nCTB4NjYxNjRhYTgsMHgwMDA4NjYxMCwweDRhMmVmZjU4LDB4NjYwYTQyYTgKKwkubG9uZwkweDAwMDQ0MmE4LDB4MDAwODRlNzUsMHgwOGMwMDAxZCwweDQyYTgwMDA0CisJLmxvbmcJMHg0MmE4MDAwOCwweDRlNzU2MWZmLDB4MDAwMDAxMTAsMHg0YTgwNjcwMAorCS5sb25nCTB4MDBmYTAwNmUsMHgwMjA4ZmY2NiwweDMyN2IxMjA2LDB4NGVmYjk4MDIKKwkubG9uZwkweDAwNDAwMGVhLDB4MDAyNDAwMDgsMHg0YTI4MDAwMiwweDZiMDAwMGRjCisJLmxvbmcJMHg3MGZmNDg0MSwweDBjMDEwMDA0LDB4NjcwMDAwM2UsMHg2ZTAwMDA5NAorCS5sb25nCTB4NjAwMDAwNjQsMHg0YTI4MDAwMiwweDZhMDAwMGMwLDB4NzBmZjQ4NDEKKwkubG9uZwkweDBjMDEwMDA0LDB4NjcwMDAwMjIsMHg2ZTAwMDA3OCwweDYwMDAwMDQ4CisJLmxvbmcJMHhlMzgwNjQwMCwweDAwYTY0ODQxLDB4MGMwMTAwMDQsMHg2NzAwMDAwYQorCS5sb25nCTB4NmUwMDAwNjAsMHg2MDAwMDAzMCwweDA2YTgwMDAwLDB4MDEwMDAwMDQKKwkubG9uZwkweDY0MGNlNGU4LDB4MDAwNGU0ZTgsMHgwMDA2NTI2OCwweDAwMDA0YTgwCisJLmxvbmcJMHg2NjA2MDI2OCwweGZlMDAwMDA2LDB4MDJhOGZmZmYsMHhmZjAwMDAwNAorCS5sb25nCTB4NDJhODAwMDgsMHg0ZTc1NTJhOCwweDAwMDg2NDFhLDB4NTJhODAwMDQKKwkubG9uZwkweDY0MTRlNGU4LDB4MDAwNGU0ZTgsMHgwMDA2ZTRlOCwweDAwMDhlNGU4CisJLmxvbmcJMHgwMDBhNTI2OCwweDAwMDA0YTgwLDB4NjYwNjAyMjgsMHgwMGZlMDAwYgorCS5sb25nCTB4NGU3NTA2YTgsMHgwMDAwMDgwMCwweDAwMDg2NDFhLDB4NTJhODAwMDQKKwkubG9uZwkweDY0MTRlNGU4LDB4MDAwNGU0ZTgsMHgwMDA2ZTRlOCwweDAwMDhlNGU4CisJLmxvbmcJMHgwMDBhNTI2OCwweDAwMDA0YTgwLDB4NjYwNjAyNjgsMHhmMDAwMDAwYQorCS5sb25nCTB4MDJhOGZmZmYsMHhmODAwMDAwOCwweDRlNzU0ODQxLDB4MGMwMTAwMDQKKwkubG9uZwkweDY3MDBmZjg2LDB4NmVlYTRlNzUsMHg0ODQxNGEwMSwweDY2MDQ0ODQxCisJLmxvbmcJMHg0ZTc1NDhlNywweDMwMDAwYzAxLDB4MDAwNDY2MjIsMHhlOWU4MzYwMgorCS5sb25nCTB4MDAwNDc0MWUsMHhlNWFiMjQyOCwweDAwMDQwMjgyLDB4MDAwMDAwM2YKKwkubG9uZwkweDY2Mjg0YWE4LDB4MDAwODY2MjIsMHg0YTgwNjYxZSwweDYwMjBlOWU4CisJLmxvbmcJMHgzNTQyMDAwOCwweDc0MWVlNWFiLDB4MjQyODAwMDgsMHgwMjgyMDAwMAorCS5sb25nCTB4MDFmZjY2MDYsMHg0YTgwNjYwMiwweDYwMDQwOGMzLDB4MDAxZDIwMDMKKwkubG9uZwkweDRjZGYwMDBjLDB4NDg0MTRlNzUsMHgyZjAyMmYwMywweDIwMjgwMDA0CisJLmxvbmcJMHgyMjI4MDAwOCwweGVkYzAyMDAwLDB4NjcxYWU1YTgsMHhlOWMxMzAyMgorCS5sb25nCTB4ODA4M2U1YTksMHgyMTQwMDAwNCwweDIxNDEwMDA4LDB4MjAwMjI2MWYKKwkubG9uZwkweDI0MWY0ZTc1LDB4ZWRjMTIwMDAsMHhlNWE5MDY4MiwweDAwMDAwMDIwCisJLmxvbmcJMHgyMTQxMDAwNCwweDQyYTgwMDA4LDB4MjAwMjI2MWYsMHgyNDFmNGU3NQorCS5sb25nCTB4ZWRlODAwMDAsMHgwMDA0NjYwZSwweGVkZTgwMDAwLDB4MDAwODY3MDAKKwkubG9uZwkweDAwNzQwNjQwLDB4MDAyMDQyODEsMHgzMjI4MDAwMCwweDAyNDE3ZmZmCisJLmxvbmcJMHhiMDQxNmUxYywweDkyNDAzMDI4LDB4MDAwMDAyNDAsMHg4MDAwODI0MAorCS5sb25nCTB4MzE0MTAwMDAsMHg2MWZmZmZmZiwweGZmODIxMDNjLDB4MDAwMDRlNzUKKwkubG9uZwkweDBjMDEwMDIwLDB4NmUyMGU5ZTgsMHgwODQwMDAwNCwweDIxNDAwMDA0CisJLmxvbmcJMHgyMDI4MDAwOCwweGUzYTgyMTQwLDB4MDAwODAyNjgsMHg4MDAwMDAwMAorCS5sb25nCTB4MTAzYzAwMDQsMHg0ZTc1MDQ0MSwweDAwMjAyMDI4LDB4MDAwOGUzYTgKKwkubG9uZwkweDIxNDAwMDA0LDB4NDJhODAwMDgsMHgwMjY4ODAwMCwweDAwMDAxMDNjCisJLmxvbmcJMHgwMDA0NGU3NSwweDAyNjg4MDAwLDB4MDAwMDEwM2MsMHgwMDAxNGU3NQorCS5sb25nCTB4MzAyODAwMDAsMHgwMjQwN2ZmZiwweDBjNDA3ZmZmLDB4Njc0ODA4MjgKKwkubG9uZwkweDAwMDcwMDA0LDB4NjcwNjEwM2MsMHgwMDAwNGU3NSwweDRhNDA2NjE4CisJLmxvbmcJMHg0YWE4MDAwNCwweDY2MGM0YWE4LDB4MDAwODY2MDYsMHgxMDNjMDAwMQorCS5sb25nCTB4NGU3NTEwM2MsMHgwMDA0NGU3NSwweDRhYTgwMDA0LDB4NjYxMjRhYTgKKwkubG9uZwkweDAwMDg2NjBjLDB4MDI2ODgwMDAsMHgwMDAwMTAzYywweDAwMDE0ZTc1CisJLmxvbmcJMHgxMDNjMDAwNiwweDRlNzU0YWE4LDB4MDAwODY2MTIsMHgyMDI4MDAwNAorCS5sb25nCTB4MDI4MDdmZmYsMHhmZmZmNjYwNiwweDEwM2MwMDAyLDB4NGU3NTA4MjgKKwkubG9uZwkweDAwMDYwMDA0LDB4NjcwNjEwM2MsMHgwMDAzNGU3NSwweDEwM2MwMDA1CisJLmxvbmcJMHg0ZTc1MjAyOCwweDAwMDAyMjAwLDB4MDI4MDdmZjAsMHgwMDAwNjcwZQorCS5sb25nCTB4MGM4MDdmZjAsMHgwMDAwNjcyOCwweDEwM2MwMDAwLDB4NGU3NTAyODEKKwkubG9uZwkweDAwMGZmZmZmLDB4NjZmZjAwMDAsMHgwMDE0NGFhOCwweDAwMDQ2NmZmCisJLmxvbmcJMHgwMDAwMDAwYSwweDEwM2MwMDAxLDB4NGU3NTEwM2MsMHgwMDA0NGU3NQorCS5sb25nCTB4MDI4MTAwMGYsMHhmZmZmNjZmZiwweDAwMDAwMDE0LDB4NGFhODAwMDQKKwkubG9uZwkweDY2ZmYwMDAwLDB4MDAwYTEwM2MsMHgwMDAyNGU3NSwweDA4MDEwMDEzCisJLmxvbmcJMHg2NmZmMDAwMCwweDAwMGExMDNjLDB4MDAwNTRlNzUsMHgxMDNjMDAwMworCS5sb25nCTB4NGU3NTIwMjgsMHgwMDAwMjIwMCwweDAyODA3ZjgwLDB4MDAwMDY3MGUKKwkubG9uZwkweDBjODA3ZjgwLDB4MDAwMDY3MWUsMHgxMDNjMDAwMCwweDRlNzUwMjgxCisJLmxvbmcJMHgwMDdmZmZmZiwweDY2ZmYwMDAwLDB4MDAwYTEwM2MsMHgwMDAxNGU3NQorCS5sb25nCTB4MTAzYzAwMDQsMHg0ZTc1MDI4MSwweDAwN2ZmZmZmLDB4NjZmZjAwMDAKKwkubG9uZwkweDAwMGExMDNjLDB4MDAwMjRlNzUsMHgwODAxMDAxNiwweDY2ZmYwMDAwCisJLmxvbmcJMHgwMDBhMTAzYywweDAwMDU0ZTc1LDB4MTAzYzAwMDMsMHg0ZTc1MmYwMQorCS5sb25nCTB4MDgyODAwMDcsMHgwMDAwNTZlOCwweDAwMDIzMjI4LDB4MDAwMDAyNDEKKwkubG9uZwkweDdmZmY5MjQwLDB4MzE0MTAwMDAsMHgyZjA4MjAyZiwweDAwMDQwMjQwCisJLmxvbmcJMHgwMGMwZTg0OCwweDYxZmZmZmZmLDB4ZmFlMjIwNTcsMHgzMjJmMDAwNgorCS5sb25nCTB4MDI0MTAwYzAsMHhlODQ5NDg0MSwweDMyMmYwMDA2LDB4MDI0MTAwMzAKKwkubG9uZwkweGU4NDk2MWZmLDB4ZmZmZmZjMjIsMHgyMDVmMDhhOCwweDAwMDcwMDAwCisJLmxvbmcJMHg0YTI4MDAwMiwweDY3MGEwOGU4LDB4MDAwNzAwMDAsMHg0MjI4MDAwMgorCS5sb25nCTB4NDI4MDRhYTgsMHgwMDA0NjYwYSwweDRhYTgwMDA4LDB4NjYwNDA4YzAKKwkubG9uZwkweDAwMDIwODJlLDB4MDAwMWZmNjYsMHg2NzA2MDhlZSwweDAwMDVmZjY3CisJLmxvbmcJMHg1ODhmNGU3NSwweDJmMDEwODI4LDB4MDAwNzAwMDAsMHg1NmU4MDAwMgorCS5sb25nCTB4MzIyODAwMDAsMHgwMjQxN2ZmZiwweDkyNDAzMTQxLDB4MDAwMDJmMDgKKwkubG9uZwkweDQyODA2MWZmLDB4ZmZmZmZhNjQsMHgyMDU3MzIzYywweDAwMDQ0ODQxCisJLmxvbmcJMHgzMjJmMDAwNiwweDAyNDEwMDMwLDB4ZTg0OTYxZmYsMHhmZmZmZmJhYQorCS5sb25nCTB4MjA1ZjA4YTgsMHgwMDA3MDAwMCwweDRhMjgwMDAyLDB4NjcwYTA4ZTgKKwkubG9uZwkweDAwMDcwMDAwLDB4NDIyODAwMDIsMHg0MjgwNGFhOCwweDAwMDQ2NjBhCisJLmxvbmcJMHg0YWE4MDAwOCwweDY2MDQwOGMwLDB4MDAwMjA4MmUsMHgwMDAxZmY2NgorCS5sb25nCTB4NjcwNjA4ZWUsMHgwMDA1ZmY2NywweDU4OGY0ZTc1LDB4MDI0MTAwMTAKKwkubG9uZwkweGU4MDg4MjAwLDB4MzAwMWUzMDksMHg2MDBlMDI0MSwweDAwMTA4MjAwCisJLmxvbmcJMHg0ODQwODIwMCwweDMwMDFlMzA5LDB4MTAzYjAwMDgsMHg0MWZiMTYyMAorCS5sb25nCTB4NGU3NTAyMDAsMHgwMDAyMDIwMCwweDAwMDIwMjAwLDB4MDAwMjAwMDAKKwkubG9uZwkweDAwMDAwYTA4LDB4MGEwODBhMDgsMHgwYTA4MGEwOCwweDBhMDg3ZmZmCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwN2ZmZQorCS5sb25nCTB4MDAwMGZmZmYsMHhmZmZmZmZmZiwweGZmZmYwMDAwLDB4MDAwMDdmZmUKKwkubG9uZwkweDAwMDBmZmZmLDB4ZmZmZmZmZmYsMHhmZmZmMDAwMCwweDAwMDA3ZmZmCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwN2ZmZgorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDQwN2UKKwkubG9uZwkweDAwMDBmZmZmLDB4ZmYwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA0MDdlCisJLmxvbmcJMHgwMDAwZmZmZiwweGZmMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwN2ZmZgorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDdmZmYKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDA0M2ZlCisJLmxvbmcJMHgwMDAwZmZmZiwweGZmZmZmZmZmLDB4ZjgwMDAwMDAsMHgwMDAwNDNmZQorCS5sb25nCTB4MDAwMGZmZmYsMHhmZmZmZmZmZiwweGY4MDAwMDAwLDB4MDAwMDdmZmYKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwZmZmZgorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGZmZmUKKwkubG9uZwkweDAwMDBmZmZmLDB4ZmZmZmZmZmYsMHhmZmZmMDAwMCwweDAwMDBmZmZmCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwZmZmZQorCS5sb25nCTB4MDAwMGZmZmYsMHhmZmZmZmZmZiwweGZmZmYwMDAwLDB4MDAwMGZmZmYKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBjMDdlCisJLmxvbmcJMHgwMDAwZmZmZiwweGZmMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwZmZmZgorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMGMwN2UKKwkubG9uZwkweDAwMDBmZmZmLDB4ZmYwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBmZmZmCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwYzNmZQorCS5sb25nCTB4MDAwMGZmZmYsMHhmZmZmZmZmZiwweGY4MDAwMDAwLDB4MDAwMGZmZmYKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDBjM2ZlCisJLmxvbmcJMHgwMDAwZmZmZiwweGZmZmZmZmZmLDB4ZjgwMDAwMDAsMHgwMDAwNzAwYworCS5sb25nCTB4NjFmZmZmZmYsMHhlODJjNDNlZSwweGZmNmM3MDBjLDB4NjFmZmZmZmYKKwkubG9uZwkweDM4NjY0YTgxLDB4NjZmZjAwMDAsMHgwYTE0ZTllZSwweDAwNGZmZjZjCisJLmxvbmcJMHgwYzQwN2ZmZiwweDY2MDI0ZTc1LDB4MTAyZWZmNmYsMHgwMjAwMDAwZgorCS5sb25nCTB4NjYwZTRhYWUsMHhmZjcwNjYwOCwweDRhYWVmZjc0LDB4NjYwMjRlNzUKKwkubG9uZwkweDQxZWVmZjZjLDB4NjFmZjAwMDAsMHgwMDFjZjIyZSwweGYwODBmZjZjCisJLmxvbmcJMHg0ZTc1MDAwMCwweDAwMDAwMjAzLDB4MDIwMzAyMDMsMHgwMzAyMDMwMgorCS5sb25nCTB4MDIwMzJkNjgsMHgwMDAwZmY4NCwweDJkNjgwMDA0LDB4ZmY4ODJkNjgKKwkubG9uZwkweDAwMDhmZjhjLDB4NDFlZWZmODQsMHg0OGU3M2MwMCwweGYyMjdlMDAxCisJLmxvbmcJMHg3NDAyNzYwNCwweDI4MTA0MjgxLDB4NGMzYzEwMDEsMHgwMDAwMDAwYQorCS5sb25nCTB4ZTljNDA4YzQsMHhkMjgwNTgwMywweDUxY2FmZmVlLDB4MDgwNDAwMWUKKwkubG9uZwkweDY3MDI0NDgxLDB4MDQ4MTAwMDAsMHgwMDEwNmMwZSwweDQ0ODEwMDg0CisJLmxvbmcJMHg0MDAwMDAwMCwweDAwOTA0MDAwLDB4MDAwMDJmMDEsMHg3MjAxZjIzYworCS5sb25nCTB4NDQwMDAwMDAsMHgwMDAwZTlkMCwweDA3MDRmMjAwLDB4NTgyMjI4MzAKKwkubG9uZwkweDFjMDA3NjAwLDB4NzQwN2YyM2MsMHg0NDIzNDEyMCwweDAwMDBlOWM0CisJLmxvbmcJMHgwOGM0ZjIwMCwweDU4MjI1ODAzLDB4NTFjYWZmZWMsMHg1MjgxMGM4MQorCS5sb25nCTB4MDAwMDAwMDIsMHg2ZmQ4MDgxMCwweDAwMWY2NzA0LDB4ZjIwMDAwMWEKKwkubG9uZwkweDIyMTcwYzgxLDB4MDAwMDAwMWIsMHg2ZjAwMDBlNCwweDA4MTAwMDFlCisJLmxvbmcJMHg2Njc0NDI4MSwweDI4MTBlOWM0LDB4MDcwNDY2MjQsMHg1MjgxN2EwMQorCS5sb25nCTB4MjgzMDVjMDAsMHg2NjA4NTA4MSwweDUyODUyODMwLDB4NWMwMDQyODMKKwkubG9uZwkweDc0MDdlOWM0LDB4MDhjNDY2MDgsMHg1ODgzNTI4MSwweDUxY2FmZmY0CisJLmxvbmcJMHgyMDAxMjIxNywweDkyODA2YzEwLDB4NDQ4MTI4MTAsMHgwMDg0NDAwMAorCS5sb25nCTB4MDAwMDAwOTAsMHg0MDAwMDAwMCwweDQzZmIwMTcwLDB4MDAwMDA2NjYKKwkubG9uZwkweDQyODNmMjNjLDB4NDQ4MDNmODAsMHgwMDAwNzQwMywweGUyODA2NDA2CisJLmxvbmcJMHhmMjMxNDhhMywweDM4MDAwNjgzLDB4MDAwMDAwMGMsMHg0YTgwNjZlYworCS5sb25nCTB4ZjIwMDA0MjMsMHg2MDY4NDI4MSwweDdhMDIyODMwLDB4NWMwMDY2MDgKKwkubG9uZwkweDUzODU1MDgxLDB4MjgzMDVjMDAsMHg3NjFjNzQwNywweGU5YzQwOGM0CisJLmxvbmcJMHg2NjA4NTk4MywweDUyODE1MWNhLDB4ZmZmNDIwMDEsMHgyMjE3OTI4MAorCS5sb25nCTB4NmUxMDQ0ODEsMHgyODEwMDI4NCwweGJmZmZmZmZmLDB4MDI5MGJmZmYKKwkubG9uZwkweGZmZmY0M2ZiLDB4MDE3MDAwMDAsMHgwNWZjNDI4MywweGYyM2M0NDgwCisJLmxvbmcJMHgzZjgwMDAwMCwweDc0MDNlMjgwLDB4NjQwNmYyMzEsMHg0OGEzMzgwMAorCS5sb25nCTB4MDY4MzAwMDAsMHgwMDBjNGE4MCwweDY2ZWNmMjAwLDB4MDQyMDI2MmUKKwkubG9uZwkweGZmNjBlOWMzLDB4MjY4MjI4MTAsMHhlNTgyZTljNCwweDAwMDJkNDgwCisJLmxvbmcJMHg0M2ZhZmU1MCwweDEwMzEyODAwLDB4NDI4M2VmYzMsMHgwNjgyZjIwMworCS5sb25nCTB4OTAwMGUyODAsMHg2NDBhNDNmYiwweDAxNzAwMDAwLDB4MDY0NDYwMTYKKwkubG9uZwkweGUyODA2NDBhLDB4NDNmYjAxNzAsMHgwMDAwMDZkMiwweDYwMDg0M2ZiCisJLmxvbmcJMHgwMTcwMDAwMCwweDA1OTAyMDAxLDB4NmEwODQ0ODAsMHgwMDkwNDAwMAorCS5sb25nCTB4MDAwMDQyODMsMHhmMjNjNDQ4MCwweDNmODAwMDAwLDB4ZTI4MDY0MDYKKwkubG9uZwkweGYyMzE0OGEzLDB4MzgwMDA2ODMsMHgwMDAwMDAwYywweDRhODA2NmVjCisJLmxvbmcJMHgwODEwMDAxZSwweDY3MDZmMjAwLDB4MDQyMDYwMDQsMHhmMjAwMDQyMworCS5sb25nCTB4ZjIwMGE4MDAsMHgwODgwMDAwOSwweDY3MDYwMDZlLDB4MDEwOGZmNjYKKwkubG9uZwkweDU4OGZmMjFmLDB4ZDA0MDRjZGYsMHgwMDNjZjIzYywweDkwMDAwMDAwCisJLmxvbmcJMHgwMDAwZjIzYywweDg4MDAwMDAwLDB4MDAwMDRlNzUsMHgzZmZkMDAwMAorCS5sb25nCTB4OWEyMDlhODQsMHhmYmNmZjc5OCwweDAwMDAwMDAwLDB4M2ZmZDAwMDAKKwkubG9uZwkweDlhMjA5YTg0LDB4ZmJjZmY3OTksMHgwMDAwMDAwMCwweDNmODAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHg0MDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4NDEyMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDQ1OWEyODAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDMwMzAyMDIsMHgwMzAyMDIwMywweDAyMDMwMzAyLDB4NDhlNzNmMjAKKwkubG9uZwkweGYyMjdlMDA3LDB4ZjIzYzkwMDAsMHgwMDAwMDAyMCwweDJkNTBmZjU4CisJLmxvbmcJMHgyZTAwNDIyZSwweGZmNTAwYzJlLDB4MDAwNGZmNGUsMHg2NjAwMDAzMAorCS5sb25nCTB4MzAxMDAyNDAsMHg3ZmZmMjIyOCwweDAwMDQyNDI4LDB4MDAwODUzNDAKKwkubG9uZwkweGUzOGFlMzkxLDB4NGE4MTZjZjYsMHg0YTQwNmUwNCwweDUwZWVmZjUwCisJLmxvbmcJMHgwMjQwN2ZmZiwweDMwODAyMTQxLDB4MDAwNDIxNDIsMHgwMDA4MmQ1MAorCS5sb25nCTB4ZmY5MDJkNjgsMHgwMDA0ZmY5NCwweDJkNjgwMDA4LDB4ZmY5ODAyYWUKKwkubG9uZwkweDdmZmZmZmZmLDB4ZmY5MDRhMmUsMHhmZjUwNjcwOCwweDJjM2NmZmZmCisJLmxvbmcJMHhlY2JiNjAzOCwweDMwMmVmZjkwLDB4M2Q3YzNmZmYsMHhmZjkwZjIyZQorCS5sb25nCTB4NDgwMGZmOTAsMHgwNDQwM2ZmZiwweGYyMDA1MDIyLDB4ZjIzYTQ0MjgKKwkubG9uZwkweGZmMWNmMjkzLDB4MDAwZWYyM2EsMHg0ODIzZmYwMiwweGYyMDY2MDAwCisJLmxvbmcJMHg2MDBhZjIzYSwweDQ4MjNmZWU2LDB4ZjIwNjYwMDAsMHhmMjNjODgwMAorCS5sb25nCTB4MDAwMDAwMDAsMHg0MjQ1NGE4NywweDZmMDQyODA3LDB4NjAwNjI4MDYKKwkubG9uZwkweDk4ODc1Mjg0LDB4NGE4NDZmMTgsMHgwYzg0MDAwMCwweDAwMTE2ZjEyCisJLmxvbmcJMHg3ODExNGE4NywweDZmMGMwMGFlLDB4MDAwMDIwODAsMHhmZjY0NjAwMgorCS5sb25nCTB4NzgwMTRhODcsMHg2ZTA2YmU4NiwweDZkMDIyYzA3LDB4MjAwNjUyODAKKwkubG9uZwkweDkwODQ0ODQ1LDB4NDI0NTQyNDIsMHg0YTgwNmMxNCwweDUyNDUwYzgwCisJLmxvbmcJMHhmZmZmZWNkNCwweDZlMDgwNjgwLDB4MDAwMDAwMTgsMHg3NDE4NDQ4MAorCS5sb25nCTB4ZjIzYTQ0ODAsMHhmZTk4ZTllZSwweDE2ODJmZjYwLDB4ZTM0OWQyNDUKKwkubG9uZwkweGUzNDk0YWFlLDB4ZmY1ODZjMDIsMHg1MjgxNDVmYSwweGZlYzAxNjMyCisJLmxvbmcJMHgxODAwZTk4YiwweGYyMDM5MDAwLDB4ZTg4YjRhMDMsMHg2NjBhNDNmYgorCS5sb25nCTB4MDE3MDAwMDAsMHgwMzcwNjAxNiwweGUyMGI2NDBhLDB4NDNmYjAxNzAKKwkubG9uZwkweDAwMDAwM2ZlLDB4NjAwODQzZmIsMHgwMTcwMDAwMCwweDA0OTA0MjgzCisJLmxvbmcJMHhlMjg4NjQwNiwweGYyMzE0OGEzLDB4MzgwMDA2ODMsMHgwMDAwMDAwYworCS5sb25nCTB4NGE4MDY2ZWMsMHhmMjNjODgwMCwweDAwMDAwMDAwLDB4ZjIzYzkwMDAKKwkubG9uZwkweDAwMDAwMDEwLDB4ZjIxMDQ4MDAsMHhmMjAwMDAxOCwweDRhNDU2NjA4CisJLmxvbmcJMHhmMjAwMDQyMCwweDYwMDAwMDhlLDB4NGEyZWZmNTAsMHg2NzAwMDA3MgorCS5sb25nCTB4ZjIyN2UwMDIsMHgzNjE3MDI0MywweDdmZmYwMDUwLDB4ODAwMGQ2NTAKKwkubG9uZwkweDA0NDMzZmZmLDB4ZDY2OTAwMjQsMHgwNDQzM2ZmZiwweGQ2NjkwMDMwCisJLmxvbmcJMHgwNDQzM2ZmZiwweDZiMDAwMDQ4LDB4MDI1NzgwMDAsMHg4NzU3MDI1MAorCS5sb25nCTB4N2ZmZjJmMjgsMHgwMDA4MmYyOCwweDAwMDQyZjNjLDB4M2ZmZjAwMDAKKwkubG9uZwkweGYyMWZkMDgwLDB4ZjIxZjQ4MjMsMHgyZjI5MDAyYywweDJmMjkwMDI4CisJLmxvbmcJMHgyZjNjM2ZmZiwweDAwMDAyZjI5LDB4MDAzODJmMjksMHgwMDM0MmYzYworCS5sb25nCTB4M2ZmZjAwMDAsMHhmMjFmNDgyMywweGYyMWY0ODIzLDB4NjAxNjYwZmUKKwkubG9uZwkweDRhNDI2NzBjLDB4ZjIyOTQ4MjMsMHgwMDI0ZjIyOSwweDQ4MjMwMDMwCisJLmxvbmcJMHhmMjAwMDQyMywweGYyMDBhODAwLDB4ZjIyZTY4MDAsMHhmZjkwNDVlZQorCS5sb25nCTB4ZmY5MDA4MDAsMHgwMDA5NjcwZSwweDAwYWEwMDAwLDB4MDAwMTAwMDgKKwkubG9uZwkweGYyMmU0ODAwLDB4ZmY5MDJkNmUsMHhmZjYwZmY1NCwweDAyYWUwMDAwCisJLmxvbmcJMHgwMDMwZmY2MCwweDQ4ZTdjMGMwLDB4MmYyZWZmNTQsMHgyZjJlZmY1OAorCS5sb25nCTB4NDFlZWZmOTAsMHhmMjEwNjgwMCwweDRhYWVmZjU4LDB4NmMwNjAwOTAKKwkubG9uZwkweDgwMDAwMDAwLDB4MmYyZWZmNjQsMHhmMjJlOTAwMCwweGZmNjBmMjNjCisJLmxvbmcJMHg4ODAwMDAwMCwweDAwMDBmMjJlLDB4NDgwMWZmOTAsMHhmMjAwYTgwMAorCS5sb25nCTB4ODE2ZWZmNjYsMHgxZDU3ZmY2NCwweDU4OGYyZDVmLDB4ZmY1ODJkNWYKKwkubG9uZwkweGZmNTQ0Y2RmLDB4MDMwMzJkNmUsMHhmZjU4ZmY5MCwweDJkNmVmZjU0CisJLmxvbmcJMHhmZjYwNDg0NSwweDRhNDU2NmZmLDB4MDAwMDAwODYsMHhmMjNhNDUwMAorCS5sb25nCTB4ZmNlYzIwMDQsMHg1MzgwNDI4MywweGUyODg2NDA2LDB4ZjIzMTQ5MjMKKwkubG9uZwkweDM4MDAwNjgzLDB4MDAwMDAwMGMsMHg0YTgwNjZlYywweDRhMmVmZjUwCisJLmxvbmcJMHg2NzBhZjIwMCwweDAwMTg2MGZmLDB4MDAwMDAwMjgsMHhmMjAwMDAxOAorCS5sb25nCTB4ZjIwMDA4MzgsMHhmMjkzMDAxYSwweDUzODYzYTNjLDB4MDAwMWYyM2MKKwkubG9uZwkweDkwMDAwMDAwLDB4MDAyMGYyM2EsMHg0NTIzZmNjMiwweDYwMDBmZGE4CisJLmxvbmcJMHhmMjNhNDUyMywweGZjYjhmMjAwLDB4MDgzOGYyOTQsMHgwMDVjZjI5MgorCS5sb25nCTB4MDAwY2YyM2EsMHg0NDIwZmNhNiwweDUyODY2MDRjLDB4NTI4NjNhM2MKKwkubG9uZwkweDAwMDFmMjNjLDB4OTAwMDAwMDAsMHgwMDIwNjAwMCwweGZkN2FmMjNhCisJLmxvbmcJMHg0NTAwZmM2YSwweDIwMDQ0MjgzLDB4ZTI4ODY0MDYsMHhmMjMxNDkyMworCS5sb25nCTB4MzgwMDA2ODMsMHgwMDAwMDAwYywweDRhODA2NmVjLDB4ZjIwMDAwMTgKKwkubG9uZwkweGYyMDAwODM4LDB4ZjI4ZTAwMTIsMHhmMjNhNDQyMCwweGZjNjA1Mjg2CisJLmxvbmcJMHg1Mjg0ZjIzYSwweDQ1MjNmYzU2LDB4ZjIzYzkwMDAsMHgwMDAwMDAxMAorCS5sb25nCTB4ZjIwMDA4MjAsMHg0MWVlZmY4NCwweGYyMTA2ODAwLDB4MjQyODAwMDQKKwkubG9uZwkweDI2MjgwMDA4LDB4NDJhODAwMDQsMHg0MmE4MDAwOCwweDIwMTA0ODQwCisJLmxvbmcJMHg2NzE0MDQ4MCwweDAwMDAzZmZkLDB4NGE4MDZlMGEsMHg0NDgwZTI4YQorCS5sb25nCTB4ZTI5MzUxYzgsMHhmZmZhNGE4MiwweDY2MDQ0YTgzLDB4NjcxMDQyODEKKwkubG9uZwkweDA2ODMwMDAwLDB4MDA4MGQ1ODEsMHgwMjgzZmZmZiwweGZmODAyMDA0CisJLmxvbmcJMHg1Njg4NjFmZiwweDAwMDAwMmIwLDB4NGEyZWZmNTAsMHg2NzI4ZjIwMAorCS5sb25nCTB4MDAzYWYyODEsMHgwMDBjZjIwNiwweDQwMDBmMjAwLDB4MDAxODYwMmUKKwkubG9uZwkweDRhODc2ZDA4LDB4ZjIzYTQ0MDAsMHhmYmU0NjAyMiwweGYyMDY0MDAwCisJLmxvbmcJMHhmMjAwMDAxOCwweDYwMThmMjAwLDB4MDAzYWYyOGUsMHgwMDBhZjIzYQorCS5sb25nCTB4NDQwMGZiOWEsMHg2MDA4ZjIwNiwweDQwMDBmMjAwLDB4MDAxOGYyMjkKKwkubG9uZwkweDQ4MjAwMDE4LDB4ZjIyZTY4MDAsMHhmZjkwMjQyYSwweDAwMDQyNjJhCisJLmxvbmcJMHgwMDA4MzAxMiwweDY3MGUwNDQwLDB4M2ZmZDQ0NDAsMHhlMjhhZTI5MworCS5sb25nCTB4NTFjOGZmZmEsMHg0MjgxMDY4MywweDAwMDAwMDgwLDB4ZDU4MTAyODMKKwkubG9uZwkweGZmZmZmZjgwLDB4NzAwNDQxZWUsMHhmZjU0NjFmZiwweDAwMDAwMjI4CisJLmxvbmcJMHgyMDJlZmY1NCwweDcyMGNlMmE4LDB4ZWZlZTAxMGMsMHhmZjg0ZTJhOAorCS5sb25nCTB4ZWZlZTA0MDQsMHhmZjg0NGEwMCwweDY3MDgwMGFlLDB4MDAwMDIwODAKKwkubG9uZwkweGZmNjQ0MjgwLDB4MDIyZTAwMGYsMHhmZjg0NGFhZSwweGZmNTg2YzAyCisJLmxvbmcJMHg3MDAyNGE4NiwweDZjMDI1MjgwLDB4ZWZlZTAwMDIsMHhmZjg0ZjIzYworCS5sb25nCTB4ODgwMDAwMDAsMHgwMDAwZjIxZiwweGQwZTA0Y2RmLDB4MDRmYzRlNzUKKwkubG9uZwkweDQwMDIwMDAwLDB4YTAwMDAwMDAsMHgwMDAwMDAwMCwweDQwMDUwMDAwCisJLmxvbmcJMHhjODAwMDAwMCwweDAwMDAwMDAwLDB4NDAwYzAwMDAsMHg5YzQwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHg0MDE5MDAwMCwweGJlYmMyMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDQwMzQwMDAwLDB4OGUxYmM5YmYsMHgwNDAwMDAwMCwweDQwNjkwMDAwCisJLmxvbmcJMHg5ZGM1YWRhOCwweDJiNzBiNTllLDB4NDBkMzAwMDAsMHhjMjc4MWY0OQorCS5sb25nCTB4ZmZjZmE2ZDUsMHg0MWE4MDAwMCwweDkzYmE0N2M5LDB4ODBlOThjZTAKKwkubG9uZwkweDQzNTEwMDAwLDB4YWE3ZWViZmIsMHg5ZGY5ZGU4ZSwweDQ2YTMwMDAwCisJLmxvbmcJMHhlMzE5YTBhZSwweGE2MGU5MWM3LDB4NGQ0ODAwMDAsMHhjOTc2NzU4NgorCS5sb25nCTB4ODE3NTBjMTcsMHg1YTkyMDAwMCwweDllOGIzYjVkLDB4YzUzZDVkZTUKKwkubG9uZwkweDc1MjUwMDAwLDB4YzQ2MDUyMDIsMHg4YTIwOTc5YiwweDQwMDIwMDAwCisJLmxvbmcJMHhhMDAwMDAwMCwweDAwMDAwMDAwLDB4NDAwNTAwMDAsMHhjODAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHg0MDBjMDAwMCwweDljNDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDQwMTkwMDAwLDB4YmViYzIwMDAsMHgwMDAwMDAwMCwweDQwMzQwMDAwCisJLmxvbmcJMHg4ZTFiYzliZiwweDA0MDAwMDAwLDB4NDA2OTAwMDAsMHg5ZGM1YWRhOAorCS5sb25nCTB4MmI3MGI1OWUsMHg0MGQzMDAwMCwweGMyNzgxZjQ5LDB4ZmZjZmE2ZDYKKwkubG9uZwkweDQxYTgwMDAwLDB4OTNiYTQ3YzksMHg4MGU5OGNlMCwweDQzNTEwMDAwCisJLmxvbmcJMHhhYTdlZWJmYiwweDlkZjlkZThlLDB4NDZhMzAwMDAsMHhlMzE5YTBhZQorCS5sb25nCTB4YTYwZTkxYzcsMHg0ZDQ4MDAwMCwweGM5NzY3NTg2LDB4ODE3NTBjMTgKKwkubG9uZwkweDVhOTIwMDAwLDB4OWU4YjNiNWQsMHhjNTNkNWRlNSwweDc1MjUwMDAwCisJLmxvbmcJMHhjNDYwNTIwMiwweDhhMjA5NzliLDB4NDAwMjAwMDAsMHhhMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHg0MDA1MDAwMCwweGM4MDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDQwMGMwMDAwLDB4OWM0MDAwMDAsMHgwMDAwMDAwMCwweDQwMTkwMDAwCisJLmxvbmcJMHhiZWJjMjAwMCwweDAwMDAwMDAwLDB4NDAzNDAwMDAsMHg4ZTFiYzliZgorCS5sb25nCTB4MDQwMDAwMDAsMHg0MDY5MDAwMCwweDlkYzVhZGE4LDB4MmI3MGI1OWQKKwkubG9uZwkweDQwZDMwMDAwLDB4YzI3ODFmNDksMHhmZmNmYTZkNSwweDQxYTgwMDAwCisJLmxvbmcJMHg5M2JhNDdjOSwweDgwZTk4Y2RmLDB4NDM1MTAwMDAsMHhhYTdlZWJmYgorCS5sb25nCTB4OWRmOWRlOGQsMHg0NmEzMDAwMCwweGUzMTlhMGFlLDB4YTYwZTkxYzYKKwkubG9uZwkweDRkNDgwMDAwLDB4Yzk3Njc1ODYsMHg4MTc1MGMxNywweDVhOTIwMDAwCisJLmxvbmcJMHg5ZThiM2I1ZCwweGM1M2Q1ZGU0LDB4NzUyNTAwMDAsMHhjNDYwNTIwMgorCS5sb25nCTB4OGEyMDk3OWEsMHg0OGU3ZmYwMCwweDdlMDE1MzgwLDB4MjgwMjJhMDMKKwkubG9uZwkweGU5YzIxMDAzLDB4ZTc4MmU5YzMsMHg2MDAzZTc4MywweDg0ODZlMzg1CisJLmxvbmcJMHhlMzk0NDg0NiwweGQzNDZkNjg1LDB4NGU3MWQ1ODQsMHg0ZTcxZDM0NgorCS5sb25nCTB4NDg0NjRhNDcsMHg2NzEyNDg0NywweGU5NDdkZTQxLDB4MTBjNzQ4NDcKKwkubG9uZwkweDQyNDc1MWM4LDB4ZmZjODYwMTIsMHg0ODQ3M2UwMSwweDQ4NDc1MjQ3CisJLmxvbmcJMHg1MWM4ZmZiYSwweDQ4NDdlOTRmLDB4MTBjNzRjZGYsMHgwMGZmNGU3NQorCS5sb25nCTB4NzAwMTYxMDAsMHgwMGQ2M2Q3YywweDAxMjEwMDBhLDB4NjAwMDAwN2UKKwkubG9uZwkweDcwMDI2MTAwLDB4MDBjNjNkN2MsMHgwMTQxMDAwYSwweDYwNmU3MDA0CisJLmxvbmcJMHg2MTAwMDBiOCwweDNkN2MwMTAxLDB4MDAwYTYwNjAsMHg3MDA4NjEwMAorCS5sb25nCTB4MDBhYTNkN2MsMHgwMTYxMDAwYSwweDYwNTI3MDBjLDB4NjEwMDAwOWMKKwkubG9uZwkweDNkN2MwMTYxLDB4MDAwYTYwNDQsMHg3MDAxNjEwMCwweDAwOGUzZDdjCisJLmxvbmcJMHgwMGExMDAwYSwweDYwMzY3MDAyLDB4NjEwMDAwODAsMHgzZDdjMDBjMQorCS5sb25nCTB4MDAwYTYwMjgsMHg3MDA0NjEwMCwweDAwNzIzZDdjLDB4MDA4MTAwMGEKKwkubG9uZwkweDYwMWE3MDA4LDB4NjEwMDAwNjQsMHgzZDdjMDBlMSwweDAwMGE2MDBjCisJLmxvbmcJMHg3MDBjNjEwMCwweDAwNTYzZDdjLDB4MDBlMTAwMGEsMHgyZDZlZmY2OAorCS5sb25nCTB4MDAwNmYyMmUsMHhkMGMwZmZkYywweGYyMmU5YzAwLDB4ZmY2MDRjZWUKKwkubG9uZwkweDAzMDNmZjljLDB4NGU1ZTJmMTcsMHgyZjZmMDAwOCwweDAwMDQyZjZmCisJLmxvbmcJMHgwMDBjMDAwOCwweDJmN2MwMDAwLDB4MDAwMTAwMGMsMHgzZjZmMDAwNgorCS5sb25nCTB4MDAwYzNmN2MsMHg0MDA4MDAwNiwweDA4MTcwMDA1LDB4NjcwNjA4ZWYKKwkubG9uZwkweDAwMDIwMDBkLDB4NjBmZmZmZmYsMHgyZDgyMTIyZSwweGZmNDEwMjAxCisJLmxvbmcJMHgwMDM4MGMwMSwweDAwMTg2NzAwLDB4MDAwYzBjMDEsMHgwMDIwNjcwMAorCS5sb25nCTB4MDA2MDRlNzUsMHgxMjJlZmY0MSwweDAyNDEwMDA3LDB4MzIzYjEyMDYKKwkubG9uZwkweDRlZmIxMDAyLDB4MDAxMDAwMTYsMHgwMDFjMDAyMCwweDAwMjQwMDI4CisJLmxvbmcJMHgwMDJjMDAzMCwweDkxYWVmZmE0LDB4NGU3NTkxYWUsMHhmZmE4NGU3NQorCS5sb25nCTB4OTVjMDRlNzUsMHg5N2MwNGU3NSwweDk5YzA0ZTc1LDB4OWJjMDRlNzUKKwkubG9uZwkweDkxOTY0ZTc1LDB4MGMyZTAwMzAsMHgwMDBhNjYxMiwweDA4MmUwMDA1CisJLmxvbmcJMHgwMDA0NjYwYSwweDRlN2E4ODAwLDB4OTFjMDRlN2IsMHg4ODAwNGU3NQorCS5sb25nCTB4NDQ4MDYwYTAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9mc2tlbGV0b24uUyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9mc2tlbGV0b24uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDVhNGZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2Zza2VsZXRvbi5TCkBAIC0wLDAgKzEsMzQyIEBACit8fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Cit8TU9UT1JPTEEgTUlDUk9QUk9DRVNTT1IgJiBNRU1PUlkgVEVDSE5PTE9HWSBHUk9VUAorfE02ODAwMCBIaS1QZXJmb3JtYW5jZSBNaWNyb3Byb2Nlc3NvciBEaXZpc2lvbgorfE02ODA2MCBTb2Z0d2FyZSBQYWNrYWdlCit8UHJvZHVjdGlvbiBSZWxlYXNlIFAxLjAwIC0tIE9jdG9iZXIgMTAsIDE5OTQKK3wKK3xNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCit8Cit8VEhFIFNPRlRXQVJFIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMgYW5kIHdpdGhvdXQgd2FycmFudHkuCit8VG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK3xNT1RPUk9MQSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0hFVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCit8SU5DTFVESU5HIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK3xhbmQgYW55IHdhcnJhbnR5IGFnYWluc3QgaW5mcmluZ2VtZW50IHdpdGggcmVnYXJkIHRvIHRoZSBTT0ZUV0FSRQorfChJTkNMVURJTkcgQU5ZIE1PRElGSUVEIFZFUlNJT05TIFRIRVJFT0YpIGFuZCBhbnkgYWNjb21wYW55aW5nIHdyaXR0ZW4gbWF0ZXJpYWxzLgorfAorfFRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCit8SU4gTk8gRVZFTlQgU0hBTEwgTU9UT1JPTEEgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCit8KElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgQlVTSU5FU1MgUFJPRklUUywKK3xCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIE9USEVSIFBFQ1VOSUFSWSBMT1NTKQorfEFSSVNJTkcgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTT0ZUV0FSRS4KK3xNb3Rvcm9sYSBhc3N1bWVzIG5vIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgbWFpbnRlbmFuY2UgYW5kIHN1cHBvcnQgb2YgdGhlIFNPRlRXQVJFLgorfAorfFlvdSBhcmUgaGVyZWJ5IGdyYW50ZWQgYSBjb3B5cmlnaHQgbGljZW5zZSB0byB1c2UsIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNPRlRXQVJFCit8c28gbG9uZyBhcyB0aGlzIGVudGlyZSBub3RpY2UgaXMgcmV0YWluZWQgd2l0aG91dCBhbHRlcmF0aW9uIGluIGFueSBtb2RpZmllZCBhbmQvb3IKK3xyZWRpc3RyaWJ1dGVkIHZlcnNpb25zLCBhbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KK3xObyBsaWNlbnNlcyBhcmUgZ3JhbnRlZCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlIHVuZGVyIGFueSBwYXRlbnRzCit8b3IgdHJhZGVtYXJrcyBvZiBNb3Rvcm9sYSwgSW5jLgorfH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorfCBmc2tlbGV0b24ucworfAorfCBUaGlzIGZpbGUgY29udGFpbnM6Cit8CSgxKSBleGFtcGxlICJDYWxsLW91dCJzCit8CSgyKSBleGFtcGxlIHBhY2thZ2UgZW50cnkgY29kZQorfAkoMykgZXhhbXBsZSAiQ2FsbC1vdXQiIHRhYmxlCit8CisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisKK3wjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworfCAoMSkgRVhBTVBMRSBDQUxMLU9VVFMJCSMKK3wJCQkJIworfCBfMDYwX2Zwc3BfZG9uZSgpCQkjCit8IF8wNjBfcmVhbF9vdmZsKCkJCSMKK3wgXzA2MF9yZWFsX3VuZmwoKQkJIworfCBfMDYwX3JlYWxfb3BlcnIoKQkJIworfCBfMDYwX3JlYWxfc25hbigpCQkjCit8IF8wNjBfcmVhbF9keigpCQkjCit8IF8wNjBfcmVhbF9pbmV4KCkJCSMKK3wgXzA2MF9yZWFsX2JzdW4oKQkJIworfCBfMDYwX3JlYWxfZmxpbmUoKQkJIworfCBfMDYwX3JlYWxfZnB1X2Rpc2FibGVkKCkJIworfCBfMDYwX3JlYWxfdHJhcCgpCQkjCit8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworfAorfCBfMDYwX2Zwc3BfZG9uZSgpOgorfAorfCBUaGlzIGlzIHRoZSBtYWluIGV4aXQgcG9pbnQgZm9yIHRoZSA2ODA2MCBGbG9hdGluZy1Qb2ludAorfCBTb2Z0d2FyZSBQYWNrYWdlLiBGb3IgYSBub3JtYWwgZXhpdCwgYWxsIDA2MEZQU1Agcm91dGluZXMgY2FsbCB0aGlzCit8IHJvdXRpbmUuIFRoZSBvcGVyYXRpbmcgc3lzdGVtIGNhbiBkbyBzeXN0ZW0gZGVwZW5kZW50IGNsZWFuLXVwIG9yCit8IHNpbXBseSBleGVjdXRlIGFuICJydGUiIGFzIHdpdGggdGhlIHNhbXBsZSBjb2RlIGJlbG93LgorfAorCS5nbG9iYWwJCV8wNjBfZnBzcF9kb25lCitfMDYwX2Zwc3BfZG9uZToKKwlicmFsCSBfMDYwX2lzcF9kb25lCXwgZG8gdGhlIHNhbWUgYXMgaXNwX2RvbmUKKworfAorfCBfMDYwX3JlYWxfb3ZmbCgpOgorfAorfCBUaGlzIGlzIHRoZSBleGl0IHBvaW50IGZvciB0aGUgMDYwRlBTUCB3aGVuIGFuIGVuYWJsZWQgb3ZlcmZsb3cgZXhjZXB0aW9uCit8IGlzIHByZXNlbnQuIFRoZSByb3V0aW5lIGJlbG93IHNob3VsZCBwb2ludCB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSBoYW5kbGVyCit8IGZvciBlbmFibGVkIG92ZXJmbG93IGNvbmRpdGlvbnMuIFRoZSBleGNlcHRpb24gc3RhY2sgZnJhbWUgaXMgYW4gb3ZlcmZsb3cKK3wgc3RhY2sgZnJhbWUuIFRoZSBGUCBzdGF0ZSBmcmFtZSBob2xkcyB0aGUgRVhDRVBUSU9OQUwgT1BFUkFORC4KK3wKK3wgVGhlIHNhbXBsZSByb3V0aW5lIGJlbG93IHNpbXBseSBjbGVhcnMgdGhlIGV4Y2VwdGlvbiBzdGF0dXMgYml0IGFuZAorfCBkb2VzIGFuICJydGUiLgorfAorCS5nbG9iYWwJCV8wNjBfcmVhbF9vdmZsCitfMDYwX3JlYWxfb3ZmbDoKKwlmc2F2ZQkJLSglc3ApCisJbW92ZS53CQkjMHg2MDAwLDB4Miglc3ApCisJZnJlc3RvcmUJKCVzcCkrCisJYnJhbAkJdHJhcAl8IGp1bXAgdG8gdHJhcCBoYW5kbGVyCisKKworfAorfCBfMDYwX3JlYWxfdW5mbCgpOgorfAorfCBUaGlzIGlzIHRoZSBleGl0IHBvaW50IGZvciB0aGUgMDYwRlBTUCB3aGVuIGFuIGVuYWJsZWQgdW5kZXJmbG93IGV4Y2VwdGlvbgorfCBpcyBwcmVzZW50LiBUaGUgcm91dGluZSBiZWxvdyBzaG91bGQgcG9pbnQgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gaGFuZGxlcgorfCBmb3IgZW5hYmxlZCB1bmRlcmZsb3cgY29uZGl0aW9ucy4gVGhlIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSBpcyBhbiB1bmRlcmZsb3cKK3wgc3RhY2sgZnJhbWUuIFRoZSBGUCBzdGF0ZSBmcmFtZSBob2xkcyB0aGUgRVhDRVBUSU9OQUwgT1BFUkFORC4KK3wKK3wgVGhlIHNhbXBsZSByb3V0aW5lIGJlbG93IHNpbXBseSBjbGVhcnMgdGhlIGV4Y2VwdGlvbiBzdGF0dXMgYml0IGFuZAorfCBkb2VzIGFuICJydGUiLgorfAorCS5nbG9iYWwJCV8wNjBfcmVhbF91bmZsCitfMDYwX3JlYWxfdW5mbDoKKwlmc2F2ZQkJLSglc3ApCisJbW92ZS53CQkjMHg2MDAwLDB4Miglc3ApCisJZnJlc3RvcmUJKCVzcCkrCisJYnJhbAkJdHJhcAl8IGp1bXAgdG8gdHJhcCBoYW5kbGVyCisKK3wKK3wgXzA2MF9yZWFsX29wZXJyKCk6Cit8Cit8IFRoaXMgaXMgdGhlIGV4aXQgcG9pbnQgZm9yIHRoZSAwNjBGUFNQIHdoZW4gYW4gZW5hYmxlZCBvcGVyYW5kIGVycm9yIGV4Y2VwdGlvbgorfCBpcyBwcmVzZW50LiBUaGUgcm91dGluZSBiZWxvdyBzaG91bGQgcG9pbnQgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gaGFuZGxlcgorfCBmb3IgZW5hYmxlZCBvcGVyYW5kIGVycm9yIGV4Y2VwdGlvbnMuIFRoZSBleGNlcHRpb24gc3RhY2sgZnJhbWUgaXMgYW4gb3BlcmFuZCBlcnJvcgorfCBzdGFjayBmcmFtZS4gVGhlIEZQIHN0YXRlIGZyYW1lIGhvbGRzIHRoZSBzb3VyY2Ugb3BlcmFuZCBvZiB0aGUgZmF1bHRpbmcKK3wgaW5zdHJ1Y3Rpb24uCit8Cit8IFRoZSBzYW1wbGUgcm91dGluZSBiZWxvdyBzaW1wbHkgY2xlYXJzIHRoZSBleGNlcHRpb24gc3RhdHVzIGJpdCBhbmQKK3wgZG9lcyBhbiAicnRlIi4KK3wKKwkuZ2xvYmFsCQlfMDYwX3JlYWxfb3BlcnIKK18wNjBfcmVhbF9vcGVycjoKKwlmc2F2ZQkJLSglc3ApCisJbW92ZS53CQkjMHg2MDAwLDB4Miglc3ApCisJZnJlc3RvcmUJKCVzcCkrCisJYnJhbAkJdHJhcAl8IGp1bXAgdG8gdHJhcCBoYW5kbGVyCisKK3wKK3wgXzA2MF9yZWFsX3NuYW4oKToKK3wKK3wgVGhpcyBpcyB0aGUgZXhpdCBwb2ludCBmb3IgdGhlIDA2MEZQU1Agd2hlbiBhbiBlbmFibGVkIHNpZ25hbGxpbmcgTmFOIGV4Y2VwdGlvbgorfCBpcyBwcmVzZW50LiBUaGUgcm91dGluZSBiZWxvdyBzaG91bGQgcG9pbnQgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gaGFuZGxlcgorfCBmb3IgZW5hYmxlZCBzaWduYWxsaW5nIE5hTiBleGNlcHRpb25zLiBUaGUgZXhjZXB0aW9uIHN0YWNrIGZyYW1lIGlzIGEgc2lnbmFsbGluZyBOYU4KK3wgc3RhY2sgZnJhbWUuIFRoZSBGUCBzdGF0ZSBmcmFtZSBob2xkcyB0aGUgc291cmNlIG9wZXJhbmQgb2YgdGhlIGZhdWx0aW5nCit8IGluc3RydWN0aW9uLgorfAorfCBUaGUgc2FtcGxlIHJvdXRpbmUgYmVsb3cgc2ltcGx5IGNsZWFycyB0aGUgZXhjZXB0aW9uIHN0YXR1cyBiaXQgYW5kCit8IGRvZXMgYW4gInJ0ZSIuCit8CisJLmdsb2JhbAkJXzA2MF9yZWFsX3NuYW4KK18wNjBfcmVhbF9zbmFuOgorCWZzYXZlCQktKCVzcCkKKwltb3ZlLncJCSMweDYwMDAsMHgyKCVzcCkKKwlmcmVzdG9yZQkoJXNwKSsKKwlicmFsCQl0cmFwCXwganVtcCB0byB0cmFwIGhhbmRsZXIKKworfAorfCBfMDYwX3JlYWxfZHooKToKK3wKK3wgVGhpcyBpcyB0aGUgZXhpdCBwb2ludCBmb3IgdGhlIDA2MEZQU1Agd2hlbiBhbiBlbmFibGVkIGRpdmlkZS1ieS16ZXJvIGV4Y2VwdGlvbgorfCBpcyBwcmVzZW50LiBUaGUgcm91dGluZSBiZWxvdyBzaG91bGQgcG9pbnQgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gaGFuZGxlcgorfCBmb3IgZW5hYmxlZCBkaXZpZGUtYnktemVybyBleGNlcHRpb25zLiBUaGUgZXhjZXB0aW9uIHN0YWNrIGZyYW1lIGlzIGEgZGl2aWRlLWJ5LXplcm8KK3wgc3RhY2sgZnJhbWUuIFRoZSBGUCBzdGF0ZSBmcmFtZSBob2xkcyB0aGUgc291cmNlIG9wZXJhbmQgb2YgdGhlIGZhdWx0aW5nCit8IGluc3RydWN0aW9uLgorfAorfCBUaGUgc2FtcGxlIHJvdXRpbmUgYmVsb3cgc2ltcGx5IGNsZWFycyB0aGUgZXhjZXB0aW9uIHN0YXR1cyBiaXQgYW5kCit8IGRvZXMgYW4gInJ0ZSIuCit8CisJLmdsb2JhbAkJXzA2MF9yZWFsX2R6CitfMDYwX3JlYWxfZHo6CisJZnNhdmUJCS0oJXNwKQorCW1vdmUudwkJIzB4NjAwMCwweDIoJXNwKQorCWZyZXN0b3JlCSglc3ApKworCWJyYWwJCXRyYXAJfCBqdW1wIHRvIHRyYXAgaGFuZGxlcgorCit8Cit8IF8wNjBfcmVhbF9pbmV4KCk6Cit8Cit8IFRoaXMgaXMgdGhlIGV4aXQgcG9pbnQgZm9yIHRoZSAwNjBGUFNQIHdoZW4gYW4gZW5hYmxlZCBpbmV4YWN0IGV4Y2VwdGlvbgorfCBpcyBwcmVzZW50LiBUaGUgcm91dGluZSBiZWxvdyBzaG91bGQgcG9pbnQgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gaGFuZGxlcgorfCBmb3IgZW5hYmxlZCBpbmV4YWN0IGV4Y2VwdGlvbnMuIFRoZSBleGNlcHRpb24gc3RhY2sgZnJhbWUgaXMgYW4gaW5leGFjdAorfCBzdGFjayBmcmFtZS4gVGhlIEZQIHN0YXRlIGZyYW1lIGhvbGRzIHRoZSBzb3VyY2Ugb3BlcmFuZCBvZiB0aGUgZmF1bHRpbmcKK3wgaW5zdHJ1Y3Rpb24uCit8Cit8IFRoZSBzYW1wbGUgcm91dGluZSBiZWxvdyBzaW1wbHkgY2xlYXJzIHRoZSBleGNlcHRpb24gc3RhdHVzIGJpdCBhbmQKK3wgZG9lcyBhbiAicnRlIi4KK3wKKwkuZ2xvYmFsCQlfMDYwX3JlYWxfaW5leAorXzA2MF9yZWFsX2luZXg6CisJZnNhdmUJCS0oJXNwKQorCW1vdmUudwkJIzB4NjAwMCwweDIoJXNwKQorCWZyZXN0b3JlCSglc3ApKworCWJyYWwJCXRyYXAJfCBqdW1wIHRvIHRyYXAgaGFuZGxlcgorCit8Cit8IF8wNjBfcmVhbF9ic3VuKCk6Cit8Cit8IFRoaXMgaXMgdGhlIGV4aXQgcG9pbnQgZm9yIHRoZSAwNjBGUFNQIHdoZW4gYW4gZW5hYmxlZCBic3VuIGV4Y2VwdGlvbgorfCBpcyBwcmVzZW50LiBUaGUgcm91dGluZSBiZWxvdyBzaG91bGQgcG9pbnQgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gaGFuZGxlcgorfCBmb3IgZW5hYmxlZCBic3VuIGV4Y2VwdGlvbnMuIFRoZSBleGNlcHRpb24gc3RhY2sgZnJhbWUgaXMgYSBic3VuCit8IHN0YWNrIGZyYW1lLgorfAorfCBUaGUgc2FtcGxlIHJvdXRpbmUgYmVsb3cgY2xlYXJzIHRoZSBleGNlcHRpb24gc3RhdHVzIGJpdCwgY2xlYXJzIHRoZSBOYU4KK3wgYml0IGluIHRoZSBGUFNSLCBhbmQgZG9lcyBhbiAicnRlIi4gVGhlIGluc3RydWN0aW9uIHRoYXQgY2F1c2VkIHRoZQorfCBic3VuIHdpbGwgbm93IGJlIHJlLWV4ZWN1dGVkIGJ1dCB3aXRoIHRoZSBOYU4gRlBTUiBiaXQgY2xlYXJlZC4KK3wKKwkuZ2xvYmFsCQlfMDYwX3JlYWxfYnN1bgorXzA2MF9yZWFsX2JzdW46Cit8CWZzYXZlCQktKCVzcCkKKworCWZtb3ZlLmwJCSVmcHNyLC0oJXNwKQorCWFuZGkuYgkJIzB4ZmUsKCVzcCkKKwlmbW92ZS5sCQkoJXNwKSssJWZwc3IKKworCWJyYWwJCXRyYXAJfCBqdW1wIHRvIHRyYXAgaGFuZGxlcgorCit8Cit8IF8wNjBfcmVhbF9mbGluZSgpOgorfAorfCBUaGlzIGlzIHRoZSBleGl0IHBvaW50IGZvciB0aGUgMDYwRlBTUCB3aGVuIGFuIEYtTGluZSBJbGxlZ2FsIGV4Y2VwdGlvbiBpcworfCBlbmNvdW50ZXJlZC4gVGhyZWUgZGlmZmVyZW50IHR5cGVzIG9mIGV4Y2VwdGlvbnMgY2FuIGVudGVyIHRoZSBGLUxpbmUgZXhjZXB0aW9uCit8IHZlY3RvciBudW1iZXIgMTE6IEZQIFVuaW1wbGVtZW50ZWQgSW5zdHJ1Y3Rpb25zLCBGUCBpbXBsZW1lbnRlZCBpbnN0cnVjdGlvbnMgd2hlbgorfCB0aGUgRlBVIGlzIGRpc2FibGVkLCBhbmQgRi1MaW5lIElsbGVnYWwgaW5zdHJ1Y3Rpb25zLiBUaGUgMDYwRlBTUCBtb2R1bGUKK3wgX2Zwc3BfZmxpbmUoKSBkaXN0aW5ndWlzaGVzIGJldHdlZW4gdGhlIHRocmVlIGFuZCBhY3RzIGFwcHJvcHJpYXRlbHkuIEYtTGluZQorfCBJbGxlZ2FscyBicmFuY2ggaGVyZS4KK3wKKwkuZ2xvYmFsCQlfMDYwX3JlYWxfZmxpbmUKK18wNjBfcmVhbF9mbGluZToKKwlicmFsCQl0cmFwCXwganVtcCB0byB0cmFwIGhhbmRsZXIKKworfAorfCBfMDYwX3JlYWxfZnB1X2Rpc2FibGVkKCk6Cit8Cit8IFRoaXMgaXMgdGhlIGV4aXQgcG9pbnQgZm9yIHRoZSAwNjBGUFNQIHdoZW4gYW4gRlBVIGRpc2FibGVkIGV4Y2VwdGlvbiBpcworfCBlbmNvdW50ZXJlZC4gVGhyZWUgZGlmZmVyZW50IHR5cGVzIG9mIGV4Y2VwdGlvbnMgY2FuIGVudGVyIHRoZSBGLUxpbmUgZXhjZXB0aW9uCit8IHZlY3RvciBudW1iZXIgMTE6IEZQIFVuaW1wbGVtZW50ZWQgSW5zdHJ1Y3Rpb25zLCBGUCBpbXBsZW1lbnRlZCBpbnN0cnVjdGlvbnMgd2hlbgorfCB0aGUgRlBVIGlzIGRpc2FibGVkLCBhbmQgRi1MaW5lIElsbGVnYWwgaW5zdHJ1Y3Rpb25zLiBUaGUgMDYwRlBTUCBtb2R1bGUKK3wgX2Zwc3BfZmxpbmUoKSBkaXN0aW5ndWlzaGVzIGJldHdlZW4gdGhlIHRocmVlIGFuZCBhY3RzIGFwcHJvcHJpYXRlbHkuIEZQVSBkaXNhYmxlZAorfCBleGNlcHRpb25zIGJyYW5jaCBoZXJlLgorfAorfCBUaGUgc2FtcGxlIGNvZGUgYmVsb3cgZW5hYmxlcyB0aGUgRlBVLCBzZXRzIHRoZSBQQyBmaWVsZCBpbiB0aGUgZXhjZXB0aW9uIHN0YWNrCit8IGZyYW1lIHRvIHRoZSBQQyBvZiB0aGUgaW5zdHJ1Y3Rpb24gY2F1c2luZyB0aGUgZXhjZXB0aW9uLCBhbmQgZG9lcyBhbiAicnRlIi4KK3wgVGhlIGV4ZWN1dGlvbiBvZiB0aGUgaW5zdHJ1Y3Rpb24gdGhlbiBwcm9jZWVkcyB3aXRoIGFuIGVuYWJsZWQgZmxvYXRpbmctcG9pbnQKK3wgdW5pdC4KK3wKKwkuZ2xvYmFsCQlfMDYwX3JlYWxfZnB1X2Rpc2FibGVkCitfMDYwX3JlYWxfZnB1X2Rpc2FibGVkOgorCW1vdmUubAkJJWQwLC0oJXNwKQkJfCBlbmFibGVkIHRoZSBmcHUKKwkubG9uZwkweDRFN0EwODA4CQkJfG1vdmVjCQlwY3IsJWQwCisJYmNscgkJIzB4MSwlZDAKKwkubG9uZwkweDRFN0IwODA4CQkJfG1vdmVjCQklZDAscGNyCisJbW92ZS5sCQkoJXNwKSssJWQwCisKKwltb3ZlLmwJCTB4Yyglc3ApLDB4Miglc3ApCXwgc2V0ICJDdXJyZW50IFBDIgorCXJ0ZQorCit8Cit8IF8wNjBfcmVhbF90cmFwKCk6Cit8Cit8IFRoaXMgaXMgdGhlIGV4aXQgcG9pbnQgZm9yIHRoZSAwNjBGUFNQIHdoZW4gYW4gZW11bGF0ZWQgImZ0cmFwY2MiIGluc3RydWN0aW9uCit8IGRpc2NvdmVycyB0aGF0IHRoZSB0cmFwIGNvbmRpdGlvbiBpcyB0cnVlIGFuZCBpdCBzaG91bGQgYnJhbmNoIHRvIHRoZSBvcGVyYXRpbmcKK3wgc3lzdGVtIGhhbmRsZXIgZm9yIHRoZSB0cmFwIGV4Y2VwdGlvbiB2ZWN0b3IgbnVtYmVyIDcuCit8Cit8IFRoZSBzYW1wbGUgY29kZSBiZWxvdyBzaW1wbHkgZXhlY3V0ZXMgYW4gInJ0ZSIuCit8CisJLmdsb2JhbAkJXzA2MF9yZWFsX3RyYXAKK18wNjBfcmVhbF90cmFwOgorCWJyYWwJCXRyYXAJfCBqdW1wIHRvIHRyYXAgaGFuZGxlcgorCit8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit8ICgyKSBFWEFNUExFIFBBQ0tBR0UgRU5UUlkgQ09ERSAjCit8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwkuZ2xvYmFsCQlfMDYwX2Zwc3Bfc25hbgorXzA2MF9mcHNwX3NuYW46CisJYnJhLmwJCV9GUF9DQUxMX1RPUCsweDgwKzB4MDAKKworCS5nbG9iYWwJCV8wNjBfZnBzcF9vcGVycgorXzA2MF9mcHNwX29wZXJyOgorCWJyYS5sCQlfRlBfQ0FMTF9UT1ArMHg4MCsweDA4CisKKwkuZ2xvYmFsCQlfMDYwX2Zwc3Bfb3ZmbAorXzA2MF9mcHNwX292Zmw6CisJYnJhLmwJCV9GUF9DQUxMX1RPUCsweDgwKzB4MTAKKworCS5nbG9iYWwJCV8wNjBfZnBzcF91bmZsCitfMDYwX2Zwc3BfdW5mbDoKKwlicmEubAkJX0ZQX0NBTExfVE9QKzB4ODArMHgxOAorCisJLmdsb2JhbAkJXzA2MF9mcHNwX2R6CitfMDYwX2Zwc3BfZHo6CisJYnJhLmwJCV9GUF9DQUxMX1RPUCsweDgwKzB4MjAKKworCS5nbG9iYWwJCV8wNjBfZnBzcF9pbmV4CitfMDYwX2Zwc3BfaW5leDoKKwlicmEubAkJX0ZQX0NBTExfVE9QKzB4ODArMHgyOAorCisJLmdsb2JhbAkJXzA2MF9mcHNwX2ZsaW5lCitfMDYwX2Zwc3BfZmxpbmU6CisJYnJhLmwJCV9GUF9DQUxMX1RPUCsweDgwKzB4MzAKKworCS5nbG9iYWwJCV8wNjBfZnBzcF91bnN1cHAKK18wNjBfZnBzcF91bnN1cHA6CisJYnJhLmwJCV9GUF9DQUxMX1RPUCsweDgwKzB4MzgKKworCS5nbG9iYWwJCV8wNjBfZnBzcF9lZmZhZGQKK18wNjBfZnBzcF9lZmZhZGQ6CisJYnJhLmwJCV9GUF9DQUxMX1RPUCsweDgwKzB4NDAKKworfCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworfCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3wgKDMpIEVYQU1QTEUgQ0FMTC1PVVQgU0VDVElPTiAjCit8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit8IFRoZSBzaXplIG9mIHRoaXMgc2VjdGlvbiBNVVNUIGJlIDEyOCBieXRlcyEhIQorCitfRlBfQ0FMTF9UT1A6CisJLmxvbmcJXzA2MF9yZWFsX2JzdW4JCS0gX0ZQX0NBTExfVE9QCisJLmxvbmcJXzA2MF9yZWFsX3NuYW4JCS0gX0ZQX0NBTExfVE9QCisJLmxvbmcJXzA2MF9yZWFsX29wZXJyCQktIF9GUF9DQUxMX1RPUAorCS5sb25nCV8wNjBfcmVhbF9vdmZsCQktIF9GUF9DQUxMX1RPUAorCS5sb25nCV8wNjBfcmVhbF91bmZsCQktIF9GUF9DQUxMX1RPUAorCS5sb25nCV8wNjBfcmVhbF9kegkJLSBfRlBfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX3JlYWxfaW5leAkJLSBfRlBfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX3JlYWxfZmxpbmUJCS0gX0ZQX0NBTExfVE9QCisJLmxvbmcJXzA2MF9yZWFsX2ZwdV9kaXNhYmxlZAktIF9GUF9DQUxMX1RPUAorCS5sb25nCV8wNjBfcmVhbF90cmFwCQktIF9GUF9DQUxMX1RPUAorCS5sb25nCV8wNjBfcmVhbF90cmFjZQkJLSBfRlBfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX3JlYWxfYWNjZXNzCS0gX0ZQX0NBTExfVE9QCisJLmxvbmcJXzA2MF9mcHNwX2RvbmUJCS0gX0ZQX0NBTExfVE9QCisKKwkubG9uZwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwCisKKwkubG9uZwlfMDYwX2ltZW1fcmVhZAkJLSBfRlBfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX2RtZW1fcmVhZAkJLSBfRlBfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX2RtZW1fd3JpdGUJCS0gX0ZQX0NBTExfVE9QCisJLmxvbmcJXzA2MF9pbWVtX3JlYWRfd29yZAktIF9GUF9DQUxMX1RPUAorCS5sb25nCV8wNjBfaW1lbV9yZWFkX2xvbmcJLSBfRlBfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX2RtZW1fcmVhZF9ieXRlCS0gX0ZQX0NBTExfVE9QCisJLmxvbmcJXzA2MF9kbWVtX3JlYWRfd29yZAktIF9GUF9DQUxMX1RPUAorCS5sb25nCV8wNjBfZG1lbV9yZWFkX2xvbmcJLSBfRlBfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX2RtZW1fd3JpdGVfYnl0ZQktIF9GUF9DQUxMX1RPUAorCS5sb25nCV8wNjBfZG1lbV93cml0ZV93b3JkCS0gX0ZQX0NBTExfVE9QCisJLmxvbmcJXzA2MF9kbWVtX3dyaXRlX2xvbmcJLSBfRlBfQ0FMTF9UT1AKKworCS5sb25nCTB4MDAwMDAwMDAKKworCS5sb25nCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAKKworfCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworfCAwNjAgRlBTUCBLRVJORUwgUEFDS0FHRSBORUVEUyBUTyBHTyBIRVJFISEhCisKKyNpbmNsdWRlICJmcHNwLnNhIgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL2Z0ZXN0LnNhIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2Z0ZXN0LnNhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNjViYzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaWZwc3AwNjAvZnRlc3Quc2EKQEAgLTAsMCArMSwzNzEgQEAKKwlkYy5sCSQ2MGZmMDAwMCwkMDBkNDAwMDAsJDYwZmYwMDAwLCQwMTZjMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQwMWE4MDAwMCwkNTQ2NTczNzQsJDY5NmU2NzIwCisJZGMubAkkMzYzODMwMzYsJDMwMjA0NjUwLCQ1MzUwMjA3MywkNzQ2MTcyNzQKKwlkYy5sCSQ2NTY0M2EwYSwkMDA1NDY1NzMsJDc0Njk2ZTY3LCQyMDM2MzgzMAorCWRjLmwJJDM2MzAyMDQ2LCQ1MDUzNTAyMCwkNzU2ZTY5NmQsJDcwNmM2NTZkCisJZGMubAkkNjU2ZTc0NjUsJDY0MjA2OTZlLCQ3Mzc0NzI3NSwkNjM3NDY5NmYKKwlkYy5sCSQ2ZTIwNzM3NCwkNjE3Mjc0NjUsJDY0M2EwYTAwLCQ1NDY1NzM3NAorCWRjLmwJJDY5NmU2NzIwLCQzNjM4MzAzNiwkMzAyMDQ2NTAsJDUzNTAyMDY1CisJZGMubAkkNzg2MzY1NzAsJDc0Njk2ZjZlLCQyMDY1NmU2MSwkNjI2YzY1NjQKKwlkYy5sCSQyMDczNzQ2MSwkNzI3NDY1NjQsJDNhMGEwMDcwLCQ2MTczNzM2NQorCWRjLmwJJDY0MGEwMDIwLCQ2NjYxNjk2YywkNjU2NDBhMDAsJDRhODA2NjBlCisJZGMubAkkNDg3YWZmZTksJDYxZmYwMDAwLCQxNjQyNTg4ZiwkNGU3NTJmMDEKKwlkYy5sCSQ2MWZmMDAwMCwkMTY0YzU4OGYsJDQ4N2FmZmQ5LCQ2MWZmMDAwMAorCWRjLmwJJDE2MmE1ODhmLCQ0ZTc1NGU1NiwkZmU4MDQ4ZTcsJDNmM2NmMjI3CisJZGMubAkkZTBmZjQ4N2EsJGZmMzQ2MWZmLCQwMDAwMTYxMCwkNTg4ZjQyYWUKKwlkYy5sCSRmZWEwNDg3YiwkMDE3MDAwMDAsJDA1ODA2MWZmLCQwMDAwMTVmYworCWRjLmwJJDU4OGY2MWZmLCQwMDAwMDU4OCwkNjFmZmZmZmYsJGZmYTI0MmFlCisJZGMubAkkZmVhMDQ4N2IsJDAxNzAwMDAwLCQxMjZjNjFmZiwkMDAwMDE1ZGMKKwlkYy5sCSQ1ODhmNjFmZiwkMDAwMDEyODAsJDYxZmZmZmZmLCRmZjgyNDJhZQorCWRjLmwJJGZlYTA0ODdiLCQwMTcwMDAwMCwkMGI2NDYxZmYsJDAwMDAxNWJjCisJZGMubAkkNjFmZjAwMDAsJDBiNzI2MWZmLCRmZmZmZmY2NCwkNDJhZWZlYTAKKwlkYy5sCSQ0ODdiMDE3MCwkMDAwMDBkZTIsJDYxZmYwMDAwLCQxNTllNjFmZgorCWRjLmwJJDAwMDAwZGYwLCQ2MWZmZmZmZiwkZmY0NjRjZGYsJDNjZmNmMjFmCisJZGMubAkkZDBmZjRlNWUsJDRlNzU0ZTU2LCRmZTgwNDhlNywkM2YzY2YyMjcKKwlkYy5sCSRlMGZmNDg3YSwkZmViMTYxZmYsJDAwMDAxNTcwLCQ1ODhmNDJhZQorCWRjLmwJJGZlYTA0ODdiLCQwMTcwMDAwMCwkMDBmZTYxZmYsJDAwMDAxNTVjCisJZGMubAkkNTg4ZjYxZmYsJDAwMDAwMTEwLCQ2MWZmZmZmZiwkZmYwMjRjZGYKKwlkYy5sCSQzY2ZjZjIxZiwkZDBmZjRlNWUsJDRlNzU0ZTU2LCRmZTgwNDhlNworCWRjLmwJJDNmM2NmMjI3LCRlMGZmNDg3YSwkZmVhNDYxZmYsJDAwMDAxNTJjCisJZGMubAkkNTg4ZjQyYWUsJGZlYTA0ODdiLCQwMTcwMDAwMCwkMGYxNDYxZmYKKwlkYy5sCSQwMDAwMTUxOCwkNjFmZjAwMDAsJDBmMWE2MWZmLCRmZmZmZmVjMAorCWRjLmwJJDQyYWVmZWEwLCQ0ODdiMDE3MCwkMDAwMDBmZDIsJDYxZmYwMDAwCisJZGMubAkkMTRmYTYxZmYsJDAwMDAwZmQ4LCQ2MWZmZmZmZiwkZmVhMjQyYWUKKwlkYy5sCSRmZWEwNDg3YiwkMDE3MDAwMDAsJDBiNjA2MWZmLCQwMDAwMTRkYworCWRjLmwJJDYxZmYwMDAwLCQwYjZhNjFmZiwkZmZmZmZlODQsJDQyYWVmZWEwCisJZGMubAkkNDg3YjAxNzAsJDAwMDAwYzIyLCQ2MWZmMDAwMCwkMTRiZTYxZmYKKwlkYy5sCSQwMDAwMGMyYywkNjFmZmZmZmYsJGZlNjY0MmFlLCRmZWEwNDg3YgorCWRjLmwJJDAxNzAwMDAwLCQxMDU2NjFmZiwkMDAwMDE0YTAsJDYxZmYwMDAwCisJZGMubAkkMTA1YTYxZmYsJGZmZmZmZTQ4LCQ0MmFlZmVhMCwkNDg3YjAxNzAKKwlkYy5sCSQwMDAwMGRhMiwkNjFmZjAwMDAsJDE0ODI2MWZmLCQwMDAwMGRhOAorCWRjLmwJJDYxZmZmZmZmLCRmZTJhNGNkZiwkM2NmY2YyMWYsJGQwZmY0ZTVlCisJZGMubAkkNGU3NTA5NTUsJDZlNjk2ZDcwLCQ2YzY1NmQ2NSwkNmU3NDY1NjQKKwlkYy5sCSQyMDQ2NTAyMCwkNjk2ZTczNzQsJDcyNzU2Mzc0LCQ2OTZmNmU3MworCWRjLmwJJDJlMmUyZTAwLCQ1MmFlZmVhMCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMTM5MGYyM2IsJGQwZmYwMTcwLCQwMDAwMTNjNiwkZjIzYjljMDAKKwlkYy5sCSQwMTcwMDAwMCwkMTQxYzNkN2MsJDAwMDBmZWE2LCQ0OGVlN2ZmZgorCWRjLmwJJGZmODBmMjJlLCRmMGZmZmYyMCwkZjIyZWJjMDAsJGZlYjQyZDdjCisJZGMubAkkNDAwMDAwMDAsJGZlODAyZDdjLCRjOTBmZGFhMiwkZmU4NDJkN2MKKwlkYy5sCSQyMTY4YzIzNSwkZmU4ODQ0ZmMsJDAwMDBmMjJlLCQ0ODBlZmU4MAorCWRjLmwJJDQyZWVmZWE0LCQ0OGVlN2ZmZiwkZmZjMGYyMmUsJGYwZmZmZWMwCisJZGMubAkkZjIyZWJjMDAsJGZlYTgyZDdjLCRiZmJmMDAwMCwkZmYyMDJkN2MKKwlkYy5sCSQ4MDAwMDAwMCwkZmYyNDJkN2MsJDAwMDAwMDAwLCRmZjI4MmQ3YworCWRjLmwJJDA4MDAwMjA4LCRmZWI4NDFmYSwkZmZjMjJkNDgsJGZlYmM2MWZmCisJZGMubAkkMDAwMDEyODgsJDRhMDA2NmZmLCQwMDAwMTJhZSwkNjFmZjAwMDAKKwlkYy5sCSQxMmIwNGEwMCwkNjZmZjAwMDAsJDEyYTA1MmFlLCRmZWEwNGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwMTJkYSwkZjIzYmQwZmYsJDAxNzAwMDAwCisJZGMubAkkMTMxMGYyM2IsJDljMDAwMTcwLCQwMDAwMTM2NiwkM2Q3YzAwMDAKKwlkYy5sCSRmZWE2NDhlZSwkN2ZmZmZmODAsJGYyMmVmMGZmLCRmZjIwZjIyZQorCWRjLmwJJGJjMDBmZWI0LCQyZDdjM2ZmZSwkMDAwMGZlODAsJDJkN2NjOTBmCisJZGMubAkkZGFhMmZlODQsJDJkN2MyMTY4LCRjMjM1ZmU4OCwkNDRmYzAwMDAKKwlkYy5sCSRmMjJlNDgwZiwkZmU4MDQyZWUsJGZlYTQ0OGVlLCQ3ZmZmZmZjMAorCWRjLmwJJGYyMmVmMGZmLCRmZWMwZjIyZSwkYmMwMGZlYTgsJDJkN2MzZmZmCisJZGMubAkkMDAwMGZmMjAsJDJkN2M4MDAwLCQwMDAwZmYyNCwkMmQ3YzAwMDAKKwlkYy5sCSQwMDAwZmYyOCwkMmQ3YzAwMDAsJDAyMDhmZWI4LCQ0MWZhZmZjMgorCWRjLmwJJDJkNDhmZWJjLCQ2MWZmMDAwMCwkMTFkMjRhMDAsJDY2ZmYwMDAwCisJZGMubAkkMTFmODYxZmYsJDAwMDAxMWZhLCQ0YTAwNjZmZiwkMDAwMDExZWEKKwlkYy5sCSQ1MmFlZmVhMCwkNGNmYjNmZmYsJDAxNzAwMDAwLCQxMjI0ZjIzYgorCWRjLmwJJGQwZmYwMTcwLCQwMDAwMTI1YSwkZjIzYjljMDAsJDAxNzAwMDAwCisJZGMubAkkMTJiMDNkN2MsJDAwMDBmZWE2LCQ0OGVlN2ZmZiwkZmY4MGYyMmUKKwlkYy5sCSRmMGZmZmYyMCwkZjIyZWJjMDAsJGZlYjQ0NGZjLCQwMDAwZjIwMAorCWRjLmwJJDVjMzE0MmVlLCRmZWE0NDhlZSwkN2ZmZmZmYzAsJGYyMmVmMGZmCisJZGMubAkkZmVjMGYyMmUsJGJjMDBmZWE4LCQyZDdjNDAwMCwkMDAwMGZmMjAKKwlkYy5sCSQyZDdjOTM1ZCwkOGRkZGZmMjQsJDJkN2NhYWE4LCRhYzE3ZmYyOAorCWRjLmwJJDJkN2MwMDAwLCQwMjA4ZmViOCwkNDFmYWZmYzQsJDJkNDhmZWJjCisJZGMubAkkNjFmZjAwMDAsJDExMzY0YTAwLCQ2NmZmMDAwMCwkMTE1YzYxZmYKKwlkYy5sCSQwMDAwMTE1ZSwkNGEwMDY2ZmYsJDAwMDAxMTRlLCQ1MmFlZmVhMAorCWRjLmwJJDRjZmIzZmZmLCQwMTcwMDAwMCwkMTE4OGYyM2IsJGQwZmYwMTcwCisJZGMubAkkMDAwMDExYmUsJGYyM2I5YzAwLCQwMTcwMDAwMCwkMTIxNGYyM2MKKwlkYy5sCSQ4ODAwMGYwMCwkMDAwMDdlMDAsJDNkN2MwMDAwLCRmZWE2NDhlZQorCWRjLmwJJDdmZmZmZjgwLCRmMjJlZjBmZiwkZmYyMGYyMmUsJGJjMDBmZWI0CisJZGMubAkkNDRmYzAwMDAsJGYyNDcwMDEyLCQ0MmVlZmVhNCwkNDhlZTdmZmYKKwlkYy5sCSRmZmMwZjIyZSwkZjBmZmZlYzAsJGYyMmViYzAwLCRmZWE4MmQ3YworCWRjLmwJJDBmMDA4MDgwLCRmZWI4NDFmYSwkZmZkYzJkNDgsJGZlYmM2MWZmCisJZGMubAkkMDAwMDEwYTgsJDRhMDA2NmZmLCQwMDAwMTBjZSwkNjFmZjAwMDAKKwlkYy5sCSQxMGQwNGEwMCwkNjZmZjAwMDAsJDEwYzA1MmFlLCRmZWEwNGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwMTBmYSwkZjIzYmQwZmYsJDAxNzAwMDAwCisJZGMubAkkMTEzMGYyM2IsJDljMDAwMTcwLCQwMDAwMTE4NiwkZjIzYzg4MDAKKwlkYy5sCSQwZjAwMDAwMCwkN2UwMjNkN2MsJDAwMDBmZWE2LCQ0OGVlN2ZmZgorCWRjLmwJJGZmODBmMjJlLCRmMGZmZmYyMCwkZjIyZWJjMDAsJGZlYjQ0NGZjCisJZGMubAkkMDAwMGYyNGYsJDAwMTJmZmZjLCQ0MmVlZmVhNCwkNDhlZTdmZmYKKwlkYy5sCSRmZmMwZjIyZSwkZjBmZmZlYzAsJGYyMmViYzAwLCRmZWE4M2Q3YworCWRjLmwJJGZmZmZmZjllLCQyZDdjMGYwMCwkODA4MGZlYjgsJDQxZmFmZmQ0CisJZGMubAkkMmQ0OGZlYmMsJDYxZmYwMDAwLCQxMDEyNGEwMCwkNjZmZjAwMDAKKwlkYy5sCSQxMDM4NjFmZiwkMDAwMDEwM2EsJDRhMDA2NmZmLCQwMDAwMTAyYQorCWRjLmwJJDUyYWVmZWEwLCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDEwNjRmMjNiCisJZGMubAkkZDBmZjAxNzAsJDAwMDAxMDlhLCRmMjNiOWMwMCwkMDE3MDAwMDAKKwlkYy5sCSQxMGYwZjIzYywkODgwMDBmMDAsJDAwMDAzZDdjLCQwMDAwZmVhNgorCWRjLmwJJDQ4ZWU3ZmZmLCRmZjgwZjIyZSwkZjBmZmZmMjAsJGYyMmViYzAwCisJZGMubAkkZmViNDQ0ZmMsJDAwMDBmMjdiLCQwMDEyYWJjZCwkZWYwMTQyZWUKKwlkYy5sCSRmZWE0NDhlZSwkN2ZmZmZmYzAsJGYyMmVmMGZmLCRmZWMwZjIyZQorCWRjLmwJJGJjMDBmZWE4LCQyZDdjMGYwMCwkODA4MGZlYjgsJDQxZmFmZmQ4CisJZGMubAkkMmQ0OGZlYmMsJDYxZmYwMDAwLCQwZjgyNGEwMCwkNjZmZjAwMDAKKwlkYy5sCSQwZmE4NjFmZiwkMDAwMDBmYWEsJDRhMDA2NmZmLCQwMDAwMGY5YQorCWRjLmwJJDQyODA0ZTc1LCQwOTU1NmU2OSwkNmQ3MDZjNjUsJDZkNjU2ZTc0CisJZGMubAkkNjU2NDIwM2MsJDY1NjEzZTJlLCQyZTJlMDAwMCwkNTJhZWZlYTAKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDBmYjhmMjNiLCRkMGZmMDE3MAorCWRjLmwJJDAwMDAwZmVlLCRmMjNiOWMwMCwkMDE3MDAwMDAsJDEwNDQzZDdjCisJZGMubAkkMDAwMGZlYTYsJDQ4ZWU3ZmZmLCRmZjgwZjIyZSwkZjBmZmZmMjAKKwlkYy5sCSRmMjJlYmMwMCwkZmViNGYyM2MsJDU4MDAwMDAyLCQ0NGZjMDAwMAorCWRjLmwJJGYyM2M0ODIzLCRjMDAwMDAwMCwkODAwMDAwMDAsJDAwMDAwMDAwCisJZGMubAkkNDJlZWZlYTQsJDQ4ZWU3ZmZmLCRmZmMwZjIyZSwkZjBmZmZlYzAKKwlkYy5sCSRmMjJlYmMwMCwkZmVhODJkN2MsJGMwMDEwMDAwLCRmZjIwMmQ3YworCWRjLmwJJDgwMDAwMDAwLCRmZjI0MmQ3YywkMDAwMDAwMDAsJGZmMjgyZDdjCisJZGMubAkkMDgwMDAwMDAsJGZlYjg0MWZhLCRmZmI4MmQ0OCwkZmViYzYxZmYKKwlkYy5sCSQwMDAwMGViOCwkNGEwMDY2ZmYsJDAwMDAwZWRlLCQ2MWZmMDAwMAorCWRjLmwJJDBlZTA0YTAwLCQ2NmZmMDAwMCwkMGVkMDUyYWUsJGZlYTA0Y2ZiCisJZGMubAkkM2ZmZjAxNzAsJDAwMDAwZjBhLCRmMjNiZDBmZiwkMDE3MDAwMDAKKwlkYy5sCSQwZjQwZjIzYiwkOWMwMDAxNzAsJDAwMDAwZjk2LCQzZDdjMDAwMAorCWRjLmwJJGZlYTY0OGVlLCQ3ZmZmZmY4MCwkZjIyZWYwZmYsJGZmMjBmMjJlCisJZGMubAkkYmMwMGZlYjQsJDQ0ZmMwMDAwLCRmMjNjNGMxOCwkYzEyMzAwMDEKKwlkYy5sCSQyMzQ1Njc4OSwkMTIzNDU2NzgsJDQyZWVmZWE0LCQ0OGVlN2ZmZgorCWRjLmwJJGZmYzBmMjJlLCRmMGZmZmVjMCwkZjIyZWJjMDAsJGZlYTgyZDdjCisJZGMubAkkM2U2NjAwMDAsJGZmMjAyZDdjLCRkMGVkMjNlOCwkZmYyNDJkN2MKKwlkYy5sCSRkMTQwMzViYywkZmYyODJkN2MsJDAwMDAwMTA4LCRmZWI4NDFmYQorCWRjLmwJJGZmYjgyZDQ4LCRmZWJjNjFmZiwkMDAwMDBlMTAsJDRhMDA2NmZmCisJZGMubAkkMDAwMDBlMzYsJDYxZmYwMDAwLCQwZTM4NGEwMCwkNjZmZjAwMDAKKwlkYy5sCSQwZTI4NTJhZSwkZmVhMDRjZmIsJDNmZmYwMTcwLCQwMDAwMGU2MgorCWRjLmwJJGYyM2JkMGZmLCQwMTcwMDAwMCwkMGU5OGYyM2IsJDljMDAwMTcwCisJZGMubAkkMDAwMDBlZWUsJDNkN2MwMDAwLCRmZWE2NDRmYywkMDAwMDQ4ZWUKKwlkYy5sCSQ3ZmZmZmY4MCwkZjIyZWYwZmYsJGZmMjBmMjJlLCRiYzAwZmViNAorCWRjLmwJJGYyM2M5ODAwLCRmZmZmZmZmZiwkZmZmZmZmZmYsJDQyZWVmZWE0CisJZGMubAkkNDhlZTdmZmYsJGZmYzBmMjJlLCRmMGZmZmVjMCwkZjIyZWJjMDAKKwlkYy5sCSRmZWE4MmQ3YywkMDAwMGZmZjAsJGZlYjQyZDdjLCQwZmZmZmZmOAorCWRjLmwJJGZlYjg2MWZmLCQwMDAwMGQ4NCwkNGEwMDY2ZmYsJDAwMDAwZGFhCisJZGMubAkkNjFmZjAwMDAsJDBkYWM0YTAwLCQ2NmZmMDAwMCwkMGQ5YzUyYWUKKwlkYy5sCSRmZWEwNGNmYiwkM2ZmZjAxNzAsJDAwMDAwZGQ2LCRmMjNiZDBmZgorCWRjLmwJJDAxNzAwMDAwLCQwZTBjZjIzYiwkOWMwMDAxNzAsJDAwMDAwZTYyCisJZGMubAkkM2Q3YzAwMDAsJGZlYTY0NGZjLCQwMDAwNDhlZSwkN2ZmZmZmODAKKwlkYy5sCSRmMjJlZjBmZiwkZmYyMGYyMmUsJGJjMDBmZWI0LCRmMjNjOTQwMAorCWRjLmwJJGZmZmZmZmZmLCRmZmZmZmZmZiwkNDJlZWZlYTQsJDQ4ZWU3ZmZmCisJZGMubAkkZmZjMGYyMmUsJGYwZmZmZWMwLCRmMjJlYmMwMCwkZmVhODJkN2MKKwlkYy5sCSQwMDAwZmZmMCwkZmViNDJkN2MsJGZmZmZmZmZmLCRmZWJjNjFmZgorCWRjLmwJJDAwMDAwY2Y4LCQ0YTAwNjZmZiwkMDAwMDBkMWUsJDYxZmYwMDAwCisJZGMubAkkMGQyMDRhMDAsJDY2ZmYwMDAwLCQwZDEwNTJhZSwkZmVhMDRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDBkNGEsJGYyM2JkMGZmLCQwMTcwMDAwMAorCWRjLmwJJDBkODBmMjNiLCQ5YzAwMDE3MCwkMDAwMDBkZDYsJDNkN2MwMDAwCisJZGMubAkkZmVhNjQ0ZmMsJDAwMDA0OGVlLCQ3ZmZmZmY4MCwkZjIyZWYwZmYKKwlkYy5sCSRmZjIwZjIyZSwkYmMwMGZlYjQsJGYyM2M4YzAwLCRmZmZmZmZmZgorCWRjLmwJJGZmZmZmZmZmLCQ0MmVlZmVhNCwkNDhlZTdmZmYsJGZmYzBmMjJlCisJZGMubAkkZjBmZmZlYzAsJGYyMmViYzAwLCRmZWE4MmQ3YywkMGZmZmZmZjgKKwlkYy5sCSRmZWI4MmQ3YywkZmZmZmZmZmYsJGZlYmM2MWZmLCQwMDAwMGM2YworCWRjLmwJJDRhMDA2NmZmLCQwMDAwMGM5MiwkNjFmZjAwMDAsJDBjOTQ0YTAwCisJZGMubAkkNjZmZjAwMDAsJDBjODQ1MmFlLCRmZWEwNGNmYiwkM2ZmZjAxNzAKKwlkYy5sCSQwMDAwMGNiZSwkZjIzYmQwZmYsJDAxNzAwMDAwLCQwY2Y0ZjIzYgorCWRjLmwJJDljMDAwMTcwLCQwMDAwMGQ0YSwkM2Q3YzAwMDAsJGZlYTY0NGZjCisJZGMubAkkMDAwMDQ4ZWUsJDdmZmZmZjgwLCRmMjJlZjBmZiwkZmYyMGYyMmUKKwlkYy5sCSRiYzAwZmViNCwkZjIzYzljMDAsJGZmZmZmZmZmLCRmZmZmZmZmZgorCWRjLmwJJGZmZmZmZmZmLCQ0MmVlZmVhNCwkNDhlZTdmZmYsJGZmYzBmMjJlCisJZGMubAkkZjBmZmZlYzAsJGYyMmViYzAwLCRmZWE4MmQ3YywkMDAwMGZmZjAKKwlkYy5sCSRmZWI0MmQ3YywkMGZmZmZmZjgsJGZlYjgyZDdjLCRmZmZmZmZmZgorCWRjLmwJJGZlYmM2MWZmLCQwMDAwMGJkNCwkNGEwMDY2ZmYsJDAwMDAwYmZhCisJZGMubAkkNjFmZjAwMDAsJDBiZmM0YTAwLCQ2NmZmMDAwMCwkMGJlYzUyYWUKKwlkYy5sCSRmZWEwNGNmYiwkM2ZmZjAxNzAsJDAwMDAwYzI2LCRmMjNiZDBmZgorCWRjLmwJJDAxNzAwMDAwLCQwYzVjZjIzYiwkOWMwMDAxNzAsJDAwMDAwY2IyCisJZGMubAkkZjIzYzU4MDAsJDAwMDFmMjNjLCQ1ODgwMDAwMiwkZjIzYzU5MDAKKwlkYy5sCSQwMDAzZjIzYywkNTk4MDAwMDQsJGYyM2M1YTAwLCQwMDA1ZjIzYworCWRjLmwJJDVhODAwMDA2LCRmMjNjNWIwMCwkMDAwN2YyM2MsJDViODAwMDA4CisJZGMubAkkZjIzYzg0MDAsJDAwMDAwMDAwLCQ3MGFhM2Q3YywkMDAwMGZlYTYKKwlkYy5sCSQ0OGVlZmZmZiwkZmY4MGYyMmUsJGJjMDBmZWI0LCRmMjJlZjBmZgorCWRjLmwJJGZmMjA0NGZjLCQwMDAwZjIyNywkZTgwMDQyZWUsJGZlYTRmMjJlCisJZGMubAkkYmMwMGZlYTgsJGYyM2M0NDgwLCQ3ZjgwMDAwMCwkZjIzYzQ1ODAKKwlkYy5sCSQ3ZjgwMDAwMCwkZjIzYzQ2ODAsJDdmODAwMDAwLCRmMjNjNDc4MAorCWRjLmwJJDdmODAwMDAwLCRmMjFmNDg4MCwkZjIxZjQ5ODAsJGYyMWY0YTgwCisJZGMubAkkZjIxZjRiODAsJDQ4ZWVmZmZmLCRmZmMwZjIyZSwkZjBmZmZlYzAKKwlkYy5sCSQ2MWZmMDAwMCwkMGFmNjRhMDAsJDY2ZmYwMDAwLCQwYjFjNjFmZgorCWRjLmwJJDAwMDAwYjFlLCQ0YTAwNjZmZiwkMDAwMDBiMGUsJDUyYWVmZWEwCisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQwYjQ4ZjIzYiwkZDBmZjAxNzAKKwlkYy5sCSQwMDAwMGI3ZSwkZjIzYjljMDAsJDAxNzAwMDAwLCQwYmQ0ZjIzYworCWRjLmwJJDU4MDAwMDAxLCRmMjNjNTg4MCwkMDAwMmYyM2MsJDU5MDAwMDAzCisJZGMubAkkZjIzYzU5ODAsJDAwMDRmMjNjLCQ1YTAwMDAwNSwkZjIzYzVhODAKKwlkYy5sCSQwMDA2ZjIzYywkNWIwMDAwMDcsJGYyM2M1YjgwLCQwMDA4ZjIyNworCWRjLmwJJDZiMDBmMjI3LCQ2YTAwZjIyNywkNjkwMGYyMjcsJDY4MDBmMjJlCisJZGMubAkkZjBmZmZmMjAsJGYyM2M0NzAwLCQ3ZjgwMDAwMCwkZjIzYzQ2MDAKKwlkYy5sCSQ3ZjgwMDAwMCwkZjIzYzQ1MDAsJDdmODAwMDAwLCRmMjNjNDQwMAorCWRjLmwJJDdmODAwMDAwLCRmMjNjODQwMCwkMDAwMDAwMDAsJGYyM2M4ODAwCisJZGMubAkkMDAwMDAwMDAsJDcwYWEzZDdjLCQwMDAwZmVhNiwkNDhlZWZmZmYKKwlkYy5sCSRmZjgwZjIyZSwkYmMwMGZlYjQsJDQ0ZmMwMDAwLCRmMjFmZDgwMAorCWRjLmwJJDQyZWVmZWE0LCRmMjJlYmMwMCwkZmVhODQ4ZWUsJGZmZmZmZmMwCisJZGMubAkkZjIyZWYwZmYsJGZlYzA2MWZmLCQwMDAwMGExMCwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMGEzNiwkNjFmZjAwMDAsJDBhMzg0YTAwLCQ2NmZmMDAwMAorCWRjLmwJJDBhMjg1MmFlLCRmZWEwNGNmYiwkM2ZmZjAxNzAsJDAwMDAwYTYyCisJZGMubAkkZjIzYmQwZmYsJDAxNzAwMDAwLCQwYTk4ZjIzYiwkOWMwMDAxNzAKKwlkYy5sCSQwMDAwMGFlZSwkZjIzYzU4MDAsJDAwMDFmMjNjLCQ1ODgwMDAwMgorCWRjLmwJJGYyM2M1OTAwLCQwMDAzZjIzYywkNTk4MDAwMDQsJGYyM2M1YTAwCisJZGMubAkkMDAwNWYyM2MsJDVhODAwMDA2LCRmMjNjNWIwMCwkMDAwN2YyM2MKKwlkYy5sCSQ1YjgwMDAwOCwkZjIzYzg0MDAsJDAwMDAwMDAwLCQyMDNjZmZmZgorCWRjLmwJJGZmMDAzZDdjLCQwMDAwZmVhNiwkNDhlZWZmZmYsJGZmODBmMjJlCisJZGMubAkkYmMwMGZlYjQsJGYyMmVmMGZmLCRmZjIwNDRmYywkMDAwMGYyMjcKKwlkYy5sCSRlODAwNDJlZSwkZmVhNGYyMmUsJGJjMDBmZWE4LCQ0OGVlZmZmZgorCWRjLmwJJGZmYzBmMjJlLCRmMGZmZmVjMCwkNjFmZjAwMDAsJDA5NWU0YTAwCisJZGMubAkkNjZmZjAwMDAsJDA5ODQ2MWZmLCQwMDAwMDk4NiwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMDk3NiwkNDI4MDRlNzUsJDA5NGU2ZjZlLCQyZDZkNjE3MworCWRjLmwJJDZiNjE2MjZjLCQ2NTIwNmY3NiwkNjU3MjY2NmMsJDZmNzcyZTJlCisJZGMubAkkMmUwMDUxZmMsJDUyYWVmZWEwLCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQwOTkwZjIzYiwkZDBmZjAxNzAsJDAwMDAwOWM2LCRmMjNiOWMwMAorCWRjLmwJJDAxNzAwMDAwLCQwYTFjM2Q3YywkMDAwMGZlYTYsJDQ4ZWU3ZmZmCisJZGMubAkkZmY4MGYyMmUsJGYwZmZmZjIwLCRmMjJlYmMwMCwkZmViNGYyM2MKKwlkYy5sCSQ1ODAwMDAwMiwkMmQ3YzdmZmUsJDAwMDBmZTgwLCQyZDdjODAwMAorCWRjLmwJJDAwMDBmZTg0LCQyZDdjMDAwMCwkMDAwMGZlODgsJDQ0ZmMwMDAwCisJZGMubAkkZjIyZTQ4MjMsJGZlODA0MmVlLCRmZWE0NDhlZSwkN2ZmZmZmYzAKKwlkYy5sCSRmMjJlZjBmZiwkZmVjMGYyMmUsJGJjMDBmZWE4LCQyZDdjN2ZmZgorCWRjLmwJJDAwMDBmZjIwLCQyZDdjMDAwMCwkMDAwMGZmMjQsJDJkN2MwMDAwCisJZGMubAkkMDAwMGZmMjgsJDJkN2MwMjAwLCQxMDQ4ZmViOCwkNDFmYWZmYzIKKwlkYy5sCSQyZDQ4ZmViYywkNjFmZjAwMDAsJDA4ODI0YTAwLCQ2NmZmMDAwMAorCWRjLmwJJDA4YTg2MWZmLCQwMDAwMDhhYSwkNGEwMDY2ZmYsJDAwMDAwODlhCisJZGMubAkkNDI4MDRlNzUsJDA5NDU2ZTYxLCQ2MjZjNjU2NCwkMjA2Zjc2NjUKKwlkYy5sCSQ3MjY2NmM2ZiwkNzcyZTJlMmUsJDAwMDA1MWZjLCQ1MmFlZmVhMAorCWRjLmwJJDRjZmIzZmZmLCQwMTcwMDAwMCwkMDhiOGYyM2IsJGQwZmYwMTcwCisJZGMubAkkMDAwMDA4ZWUsJGYyM2I5YzAwLCQwMTcwMDAwMCwkMDk0NDNkN2MKKwlkYy5sCSQwMDAwZmVhNiwkNDhlZTdmZmYsJGZmODBmMjJlLCRmMGZmZmYyMAorCWRjLmwJJGYyM2M5MDAwLCQwMDAwMTAwMCwkZjIyZWJjMDAsJGZlYjRmMjNjCisJZGMubAkkNTgwMDAwMDIsJDJkN2M3ZmZlLCQwMDAwZmU4MCwkMmQ3YzgwMDAKKwlkYy5sCSQwMDAwZmU4NCwkMmQ3YzAwMDAsJDAwMDBmZTg4LCQ0NGZjMDAwMAorCWRjLmwJJGYyMmU0ODIzLCRmZTgwNDJlZSwkZmVhNDQ4ZWUsJDdmZmZmZmMwCisJZGMubAkkZjIyZWYwZmYsJGZlYzBmMjJlLCRiYzAwZmVhOCwkMmQ3YzdmZmYKKwlkYy5sCSQwMDAwZmYyMCwkMmQ3YzAwMDAsJDAwMDBmZjI0LCQyZDdjMDAwMAorCWRjLmwJJDAwMDBmZjI4LCQyZDdjMDIwMCwkMTA0OGZlYjgsJDQxZmFmZmMyCisJZGMubAkkMmQ0OGZlYmMsJDYxZmYwMDAwLCQwN2EyNGEwMCwkNjZmZjAwMDAKKwlkYy5sCSQwN2M4NjFmZiwkMDAwMDA3Y2EsJDRhMDA2NmZmLCQwMDAwMDdiYQorCWRjLmwJJDQyODA0ZTc1LCQwOTQ1NmU2MSwkNjI2YzY1NjQsJDIwNzU2ZTY0CisJZGMubAkkNjU3MjY2NmMsJDZmNzcyZTJlLCQyZTAwNTFmYywkNTJhZWZlYTAKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDA3ZDhmMjNiLCRkMGZmMDE3MAorCWRjLmwJJDAwMDAwODBlLCRmMjNiOWMwMCwkMDE3MDAwMDAsJDA4NjQzZDdjCisJZGMubAkkMDAwMGZlYTYsJDQ4ZWU3ZmZmLCRmZjgwZjIyZSwkZjBmZmZmMjAKKwlkYy5sCSRmMjNjOTAwMCwkMDAwMDA4MDAsJGYyMmViYzAwLCRmZWI0MmQ3YworCWRjLmwJJDAwMDAwMDAwLCRmZTgwMmQ3YywkODAwMDAwMDAsJGZlODQyZDdjCisJZGMubAkkMDAwMDAwMDAsJGZlODhmMjJlLCRkMDgwZmU4MCwkNDRmYzAwMDAKKwlkYy5sCSRmMjNjNTgyMCwkMDAwMjQyZWUsJGZlYTQ0OGVlLCQ3ZmZmZmZjMAorCWRjLmwJJGYyMmVmMGZmLCRmZWMwZjIyZSwkYmMwMGZlYTgsJDJkN2MwMDAwCisJZGMubAkkMDAwMGZmMjAsJDJkN2M0MDAwLCQwMDAwZmYyNCwkMmQ3YzAwMDAKKwlkYy5sCSQwMDAwZmYyOCwkMmQ3YzAwMDAsJDA4MDBmZWI4LCQ0MWZhZmZjMgorCWRjLmwJJDJkNDhmZWJjLCQ2MWZmMDAwMCwkMDZjMjRhMDAsJDY2ZmYwMDAwCisJZGMubAkkMDZlODYxZmYsJDAwMDAwNmVhLCQ0YTAwNjZmZiwkMDAwMDA2ZGEKKwlkYy5sCSQ0MjgwNGU3NSwkMDk0ZTZmNmUsJDJkNmQ2MTczLCQ2YjYxNjI2YworCWRjLmwJJDY1MjA3NTZlLCQ2NDY1NzI2NiwkNmM2Zjc3MmUsJDJlMmUwMDAwCisJZGMubAkkNTJhZWZlYTAsJDRjZmIzZmZmLCQwMTcwMDAwMCwkMDZmNGYyM2IKKwlkYy5sCSRkMGZmMDE3MCwkMDAwMDA3MmEsJGYyM2I5YzAwLCQwMTcwMDAwMAorCWRjLmwJJDA3ODAzZDdjLCQwMDAwZmVhNiwkNDhlZTdmZmYsJGZmODBmMjJlCisJZGMubAkkZjBmZmZmMjAsJGYyMmViYzAwLCRmZWI0MmQ3YywkMDAwMDAwMDAKKwlkYy5sCSRmZTgwMmQ3YywkODAwMDAwMDAsJGZlODQyZDdjLCQwMDAwMDAwMAorCWRjLmwJJGZlODhmMjJlLCRkMDgwZmU4MCwkNDRmYzAwMDAsJGYyM2M1ODIwCisJZGMubAkkMDAwMjQyZWUsJGZlYTQ0OGVlLCQ3ZmZmZmZjMCwkZjIyZWYwZmYKKwlkYy5sCSRmZWMwZjIyZSwkYmMwMGZlYTgsJDJkN2MwMDAwLCQwMDAwZmYyMAorCWRjLmwJJDJkN2M0MDAwLCQwMDAwZmYyNCwkMmQ3YzAwMDAsJDAwMDBmZjI4CisJZGMubAkkMmQ3YzAwMDAsJDA4MDBmZWI4LCQ0MWZhZmZjMiwkMmQ0OGZlYmMKKwlkYy5sCSQ2MWZmMDAwMCwkMDVlNjRhMDAsJDY2ZmYwMDAwLCQwNjBjNjFmZgorCWRjLmwJJDAwMDAwNjBlLCQ0YTAwNjZmZiwkMDAwMDA1ZmUsJDQyODA0ZTc1CisJZGMubAkkMDk0NTZlNjEsJDYyNmM2NTY0LCQyMDY5NmU2NSwkNzg2MTYzNzQKKwlkYy5sCSQyZTJlMmUwMCwkNTJhZWZlYTAsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDA2MjBmMjNiLCRkMGZmMDE3MCwkMDAwMDA2NTYsJGYyM2I5YzAwCisJZGMubAkkMDE3MDAwMDAsJDA2YWMzZDdjLCQwMDAwZmVhNiwkNDhlZTdmZmYKKwlkYy5sCSRmZjgwZjIyZSwkZjBmZmZmMjAsJGYyM2M5MDAwLCQwMDAwMDIwMAorCWRjLmwJJGYyMmViYzAwLCRmZWI0MmQ3YywkNTAwMDAwMDAsJGZlODAyZDdjCisJZGMubAkkODAwMDAwMDAsJGZlODQyZDdjLCQwMDAwMDAwMCwkZmU4OGYyMmUKKwlkYy5sCSRkMDgwZmU4MCwkNDRmYzAwMDAsJGYyM2M1ODIyLCQwMDAyNDJlZQorCWRjLmwJJGZlYTQ0OGVlLCQ3ZmZmZmZjMCwkZjIyZWYwZmYsJGZlYzBmMjJlCisJZGMubAkkYmMwMGZlYTgsJDJkN2M1MDAwLCQwMDAwZmYyMCwkMmQ3YzgwMDAKKwlkYy5sCSQwMDAwZmYyNCwkMmQ3YzAwMDAsJDAwMDBmZjI4LCQyZDdjMDAwMAorCWRjLmwJJDAyMDhmZWI4LCQ0MWZhZmZjMiwkMmQ0OGZlYmMsJDYxZmYwMDAwCisJZGMubAkkMDUwYTRhMDAsJDY2ZmYwMDAwLCQwNTMwNjFmZiwkMDAwMDA1MzIKKwlkYy5sCSQ0YTAwNjZmZiwkMDAwMDA1MjIsJDQyODA0ZTc1LCQwOTQ1NmU2MQorCWRjLmwJJDYyNmM2NTY0LCQyMDUzNGU0MSwkNGUyZTJlMmUsJDAwMDA1MWZjCisJZGMubAkkNTJhZWZlYTAsJDRjZmIzZmZmLCQwMTcwMDAwMCwkMDU0NGYyM2IKKwlkYy5sCSRkMGZmMDE3MCwkMDAwMDA1N2EsJGYyM2I5YzAwLCQwMTcwMDAwMAorCWRjLmwJJDA1ZDAzZDdjLCQwMDAwZmVhNiwkNDhlZTdmZmYsJGZmODBmMjJlCisJZGMubAkkZjBmZmZmMjAsJGYyM2M5MDAwLCQwMDAwNDAwMCwkZjIyZWJjMDAKKwlkYy5sCSRmZWI0MmQ3YywkZmZmZjAwMDAsJGZlODAyZDdjLCQwMDAwMDAwMAorCWRjLmwJJGZlODQyZDdjLCQwMDAwMDAwMSwkZmU4OGYyMmUsJGQwODBmZTgwCisJZGMubAkkNDRmYzAwMDAsJGYyM2M1ODIyLCQwMDAyNDJlZSwkZmVhNDQ4ZWUKKwlkYy5sCSQ3ZmZmZmZjMCwkZjIyZWYwZmYsJGZlYzBmMjJlLCRiYzAwZmVhOAorCWRjLmwJJDJkN2NmZmZmLCQwMDAwZmYyMCwkMmQ3YzAwMDAsJDAwMDBmZjI0CisJZGMubAkkMmQ3YzAwMDAsJDAwMDFmZjI4LCQyZDdjMDkwMCwkNDA4MGZlYjgKKwlkYy5sCSQ0MWZhZmZjMiwkMmQ0OGZlYmMsJDYxZmYwMDAwLCQwNDJlNGEwMAorCWRjLmwJJDY2ZmYwMDAwLCQwNDU0NjFmZiwkMDAwMDA0NTYsJDRhMDA2NmZmCisJZGMubAkkMDAwMDA0NDYsJDQyODA0ZTc1LCQwOTQ1NmU2MSwkNjI2YzY1NjQKKwlkYy5sCSQyMDRmNTA0NSwkNTI1MjJlMmUsJDJlMDA1MWZjLCQ1MmFlZmVhMAorCWRjLmwJJDRjZmIzZmZmLCQwMTcwMDAwMCwkMDQ2OGYyM2IsJGQwZmYwMTcwCisJZGMubAkkMDAwMDA0OWUsJGYyM2I5YzAwLCQwMTcwMDAwMCwkMDRmNDNkN2MKKwlkYy5sCSQwMDAwZmVhNiwkNDhlZTdmZmYsJGZmODBmMjJlLCRmMGZmZmYyMAorCWRjLmwJJGYyM2M5MDAwLCQwMDAwMjAwMCwkZjIyZWJjMDAsJGZlYjQyZDdjCisJZGMubAkkZmZmZjAwMDAsJGZlODAyZDdjLCQwMDAwMDAwMCwkZmU4NDJkN2MKKwlkYy5sCSQwMDAwMDAwMCwkZmU4OGYyMmUsJGQwODBmZTgwLCQ0NGZjMDAwMAorCWRjLmwJJGYyM2M0NDIyLCQ3ZjgwMDAwMCwkNDJlZWZlYTQsJDQ4ZWU3ZmZmCisJZGMubAkkZmZjMGYyMmUsJGYwZmZmZWMwLCRmMjJlYmMwMCwkZmVhODJkN2MKKwlkYy5sCSRmZmZmMDAwMCwkZmYyMDJkN2MsJDAwMDAwMDAwLCRmZjI0MmQ3YworCWRjLmwJJDAwMDAwMDAwLCRmZjI4MmQ3YywkMDEwMDIwODAsJGZlYjg0MWZhCisJZGMubAkkZmZjMDJkNDgsJGZlYmM2MWZmLCQwMDAwMDM1MCwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMDM3NiwkNjFmZjAwMDAsJDAzNzg0YTAwLCQ2NmZmMDAwMAorCWRjLmwJJDAzNjg0MjgwLCQ0ZTc1MDk0NSwkNmU2MTYyNmMsJDY1NjQyMDQ0CisJZGMubAkkNWEyZTJlMmUsJDAwMDA1MWZjLCQ1MmFlZmVhMCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkMDM4Y2YyM2IsJGQwZmYwMTcwLCQwMDAwMDNjMgorCWRjLmwJJGYyM2I5YzAwLCQwMTcwMDAwMCwkMDQxODNkN2MsJDAwMDBmZWE2CisJZGMubAkkNDhlZTdmZmYsJGZmODBmMjJlLCRmMGZmZmYyMCwkZjIzYzkwMDAKKwlkYy5sCSQwMDAwMDQwMCwkZjIyZWJjMDAsJGZlYjQyZDdjLCQ0MDAwMDAwMAorCWRjLmwJJGZlODAyZDdjLCQ4MDAwMDAwMCwkZmU4NDJkN2MsJDAwMDAwMDAwCisJZGMubAkkZmU4OGYyMmUsJGQwODBmZTgwLCQ0NGZjMDAwMCwkZjIzYzU4MjAKKwlkYy5sCSQwMDAwNDJlZSwkZmVhNDQ4ZWUsJDdmZmZmZmMwLCRmMjJlZjBmZgorCWRjLmwJJGZlYzBmMjJlLCRiYzAwZmVhOCwkMmQ3YzQwMDAsJDAwMDBmZjIwCisJZGMubAkkMmQ3YzgwMDAsJDAwMDBmZjI0LCQyZDdjMDAwMCwkMDAwMGZmMjgKKwlkYy5sCSQyZDdjMDIwMCwkMDQxMGZlYjgsJDQxZmFmZmMyLCQyZDQ4ZmViYworCWRjLmwJJDYxZmYwMDAwLCQwMjc2NGEwMCwkNjZmZjAwMDAsJDAyOWM2MWZmCisJZGMubAkkMDAwMDAyOWUsJDRhMDA2NmZmLCQwMDAwMDI4ZSwkNDI4MDRlNzUKKwlkYy5sCSQwOTU1NmU2OSwkNmQ3MDZjNjUsJDZkNjU2ZTc0LCQ2NTY0MjA2NAorCWRjLmwJJDYxNzQ2MTIwLCQ3NDc5NzA2NSwkMmY2NjZmNzIsJDZkNjE3NDJlCisJZGMubAkkMmUyZTAwMDAsJDUyYWVmZWEwLCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQwMmEwZjIzYiwkZDBmZjAxNzAsJDAwMDAwMmQ2LCRmMjNiOWMwMAorCWRjLmwJJDAxNzAwMDAwLCQwMzJjM2Q3YywkMDAwMGZlYTYsJDQ4ZWU3ZmZmCisJZGMubAkkZmY4MGYyMmUsJGYwZmZmZjIwLCRmMjJlYmMwMCwkZmViNDJkN2MKKwlkYy5sCSRjMDNmMDAwMCwkZmU4MDJkN2MsJDAwMDAwMDAwLCRmZTg0MmQ3YworCWRjLmwJJDAwMDAwMDAxLCRmZTg4ZjIzYywkNTgwMDAwMDIsJDQ0ZmMwMDAwCisJZGMubAkkZjIyZTQ4MjMsJGZlODA0MmVlLCRmZWE0NDhlZSwkN2ZmZmZmYzAKKwlkYy5sCSRmMjJlZjBmZiwkZmVjMGYyMmUsJGJjMDBmZWE4LCQyZDdjYzAwMQorCWRjLmwJJDAwMDBmZjIwLCQyZDdjODAwMCwkMDAwMGZmMjQsJDJkN2MwMDAwCisJZGMubAkkMDAwMGZmMjgsJDJkN2MwODAwLCQwMDAwZmViOCwkNDFmYWZmYzIKKwlkYy5sCSQyZDQ4ZmViYywkNjFmZjAwMDAsJDAxOTI0YTAwLCQ2NmZmMDAwMAorCWRjLmwJJDAxYjg2MWZmLCQwMDAwMDFiYSwkNGEwMDY2ZmYsJDAwMDAwMWFhCisJZGMubAkkNTJhZWZlYTAsJDRjZmIzZmZmLCQwMTcwMDAwMCwkMDFlNGYyM2IKKwlkYy5sCSRkMGZmMDE3MCwkMDAwMDAyMWEsJGYyM2I5YzAwLCQwMTcwMDAwMAorCWRjLmwJJDAyNzAzZDdjLCQwMDAwZmVhNiwkNDhlZTdmZmYsJGZmODBmMjJlCisJZGMubAkkZjBmZmZmMjAsJGYyMmViYzAwLCRmZWI0MmQ3YywkODAwMDAwMDAKKwlkYy5sCSRmZTgwMmQ3YywkMDEwMDAwMDAsJGZlODQyZDdjLCQwMDAwMDAwMAorCWRjLmwJJGZlODhmMjNjLCQ0MDAwN2ZmZiwkZmZmZjQ0ZmMsJDAwMDBmMjJlCisJZGMubAkkNDgyM2ZlODAsJDQyZWVmZWE0LCQ0OGVlN2ZmZiwkZmZjMGYyMmUKKwlkYy5sCSRmMGZmZmVjMCwkZjIyZWJjMDAsJGZlYTgyZDdjLCQ4MDE3MDAwMAorCWRjLmwJJGZmMjAyZDdjLCRmZmZmZmZmZSwkZmYyNDJkN2MsJDAwMDAwMDAwCisJZGMubAkkZmYyODJkN2MsJDA4MDAwMDAwLCRmZWI4NDFmYSwkZmZjMjJkNDgKKwlkYy5sCSRmZWJjNjFmZiwkMDAwMDAwZDQsJDRhMDA2NmZmLCQwMDAwMDBmYQorCWRjLmwJJDYxZmYwMDAwLCQwMGZjNGEwMCwkNjZmZjAwMDAsJDAwZWM1MmFlCisJZGMubAkkZmVhMDRjZmIsJDNmZmYwMTcwLCQwMDAwMDEyNiwkZjIzYmQwZmYKKwlkYy5sCSQwMTcwMDAwMCwkMDE1Y2YyM2IsJDljMDAwMTcwLCQwMDAwMDFiMgorCWRjLmwJJDNkN2MwMDAwLCRmZWE2NDhlZSwkN2ZmZmZmODAsJGYyMmVmMGZmCisJZGMubAkkZmYyMGYyMmUsJGJjMDBmZWI0LCQyZDdjYzEyMywkMDAwMWZlODAKKwlkYy5sCSQyZDdjMjM0NSwkNjc4OWZlODQsJDJkN2MxMjM0LCQ1Njc4ZmU4OAorCWRjLmwJJDQ0ZmMwMDAwLCRmMjJlNGMxOCwkZmU4MDQyZWUsJGZlYTQ0OGVlCisJZGMubAkkN2ZmZmZmYzAsJGYyMmVmMGZmLCRmZWMwZjIyZSwkYmMwMGZlYTgKKwlkYy5sCSQyZDdjM2U2NiwkMDAwMGZmMjAsJDJkN2NkMGVkLCQyM2U4ZmYyNAorCWRjLmwJJDJkN2NkMTQwLCQzNWJjZmYyOCwkMmQ3YzAwMDAsJDAxMDhmZWI4CisJZGMubAkkNDFmYWZmYzIsJDJkNDhmZWJjLCQ2MWZmMDAwMCwkMDAxZTRhMDAKKwlkYy5sCSQ2NmZmMDAwMCwkMDA0NDYxZmYsJDAwMDAwMDQ2LCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAwMDM2LCQ0MjgwNGU3NSwkNDFlZWZmODAsJDQzZWVmZmMwCisJZGMubAkkNzAwZWIxODksJDY2ZmYwMDAwLCQwMDFjNTFjOCwkZmZmNjMwMmUKKwlkYy5sCSRmZWE2MzIyZSwkZmVhNGIwNDEsJDY2ZmYwMDAwLCQwMDA4NDI4MAorCWRjLmwJJDRlNzU3MDAxLCQ0ZTc1MjIyZSwkZmVhMDcwMDEsJDRlNzU0MWVlCisJZGMubAkkZmYyMDQzZWUsJGZlYzA3MDE3LCRiMTg5NjZmZiwkMDAwMDAwMmMKKwlkYy5sCSQ1MWM4ZmZmNiwkNDFlZWZlYjQsJDQzZWVmZWE4LCRiMTg5NjZmZgorCWRjLmwJJDAwMDAwMDE4LCRiMTg5NjZmZiwkMDAwMDAwMTAsJGIxODk2NmZmCisJZGMubAkkMDAwMDAwMDgsJDQyODA0ZTc1LCQ3MDAxNGU3NSwkYWNhY2FjYWMKKwlkYy5sCSRhY2FjYWNhYywkYWNhY2FjYWMsJGFjYWNhY2FjLCRhY2FjYWNhYworCWRjLmwJJGFjYWNhY2FjLCRhY2FjYWNhYywkYWNhY2FjYWMsJGFjYWNhY2FjCisJZGMubAkkYWNhY2FjYWMsJGFjYWNhY2FjLCRhY2FjYWNhYywkYWNhY2FjYWMKKwlkYy5sCSRhY2FjYWNhYywkYWNhY2FjYWMsJGFjYWNhY2FjLCQ3ZmZmMDAwMAorCWRjLmwJJGZmZmZmZmZmLCRmZmZmZmZmZiwkN2ZmZjAwMDAsJGZmZmZmZmZmCisJZGMubAkkZmZmZmZmZmYsJDdmZmYwMDAwLCRmZmZmZmZmZiwkZmZmZmZmZmYKKwlkYy5sCSQ3ZmZmMDAwMCwkZmZmZmZmZmYsJGZmZmZmZmZmLCQ3ZmZmMDAwMAorCWRjLmwJJGZmZmZmZmZmLCRmZmZmZmZmZiwkN2ZmZjAwMDAsJGZmZmZmZmZmCisJZGMubAkkZmZmZmZmZmYsJDdmZmYwMDAwLCRmZmZmZmZmZiwkZmZmZmZmZmYKKwlkYy5sCSQ3ZmZmMDAwMCwkZmZmZmZmZmYsJGZmZmZmZmZmLCQwMDAwMDAwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMmYwMDIwM2EsJGU4ODQ0ODdiCisJZGMubAkkMDkzMGZmZmYsJGU4ODAyMDJmLCQwMDA0NGU3NCwkMDAwNDJmMDAKKwlkYy5sCSQyMDNhZTg3MiwkNDg3YjA5MzAsJGZmZmZlODZhLCQyMDJmMDAwNAorCWRjLmwJJDRlNzQwMDA0LCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvaWxzcC5kb2MgYi9hcmNoL202OGsvaWZwc3AwNjAvaWxzcC5kb2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZmYWU2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9pbHNwLmRvYwpAQCAtMCwwICsxLDE1MCBAQAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitNT1RPUk9MQSBNSUNST1BST0NFU1NPUiAmIE1FTU9SWSBURUNITk9MT0dZIEdST1VQCitNNjgwMDAgSGktUGVyZm9ybWFuY2UgTWljcm9wcm9jZXNzb3IgRGl2aXNpb24KK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlCitQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAorCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RIRSBTT0ZUV0FSRSBpcyBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzIGFuZCB3aXRob3V0IHdhcnJhbnR5LgorVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK01PVE9ST0xBIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCithbmQgYW55IHdhcnJhbnR5IGFnYWluc3QgaW5mcmluZ2VtZW50IHdpdGggcmVnYXJkIHRvIHRoZSBTT0ZUV0FSRQorKElOQ0xVRElORyBBTlkgTU9ESUZJRUQgVkVSU0lPTlMgVEhFUkVPRikgYW5kIGFueSBhY2NvbXBhbnlpbmcgd3JpdHRlbiBtYXRlcmlhbHMuCisKK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitJTiBOTyBFVkVOVCBTSEFMTCBNT1RPUk9MQSBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEJVU0lORVNTIFBST0ZJVFMsCitCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIE9USEVSIFBFQ1VOSUFSWSBMT1NTKQorQVJJU0lORyBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLgorTW90b3JvbGEgYXNzdW1lcyBubyByZXNwb25zaWJpbGl0eSBmb3IgdGhlIG1haW50ZW5hbmNlIGFuZCBzdXBwb3J0IG9mIHRoZSBTT0ZUV0FSRS4KKworWW91IGFyZSBoZXJlYnkgZ3JhbnRlZCBhIGNvcHlyaWdodCBsaWNlbnNlIHRvIHVzZSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGUgU09GVFdBUkUKK3NvIGxvbmcgYXMgdGhpcyBlbnRpcmUgbm90aWNlIGlzIHJldGFpbmVkIHdpdGhvdXQgYWx0ZXJhdGlvbiBpbiBhbnkgbW9kaWZpZWQgYW5kL29yCityZWRpc3RyaWJ1dGVkIHZlcnNpb25zLCBhbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KK05vIGxpY2Vuc2VzIGFyZSBncmFudGVkIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UgdW5kZXIgYW55IHBhdGVudHMKK29yIHRyYWRlbWFya3Mgb2YgTW90b3JvbGEsIEluYy4KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorNjgwNjAgSU5URUdFUiBTT0ZUV0FSRSBQQUNLQUdFIChMaWJyYXJ5IHZlcnNpb24pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmaWxlIGlsc3AucyBjb250YWlucyB0aGUgIkxpYnJhcnkgdmVyc2lvbiIgb2YgdGhlCis2ODA2MCBJbnRlZ2VyIFNvZnR3YXJlIFBhY2thZ2UuIFJvdXRpbmVzIGluY2x1ZGVkIGluIHRoaXMKK21vZHVsZSBjYW4gYmUgdXNlZCB0byBlbXVsYXRlIDY0LWJpdCBkaXZpZGUgYW5kIG11bHRpcGx5LAorYW5kIHRoZSAiY21wMiIgaW5zdHJ1Y3Rpb24uIFRoZXNlIGluc3RydWN0aW9ucyBhcmUgbm90CitpbXBsZW1lbnRlZCBpbiBoYXJkd2FyZSBvbiB0aGUgNjgwNjAgYW5kIG5vcm1hbGx5IHRha2UKK2V4Y2VwdGlvbiB2ZWN0b3IgIzYxICJVbmltcGxlbWVudGVkIEludGVnZXIgSW5zdHJ1Y3Rpb24iLgorCitCeSByZS1jb21waWxpbmcgYSBwcm9ncmFtIHRoYXQgdXNlcyB0aGVzZSBpbnN0cnVjdGlvbnMsIGFuZAorbWFraW5nIHN1YnJvdXRpbmUgY2FsbHMgaW4gcGxhY2Ugb2YgdGhlIHVuaW1wbGVtZW50ZWQKK2luc3RydWN0aW9ucywgYSBwcm9ncmFtIGNhbiBhdm9pZCB0aGUgb3ZlcmhlYWQgYXNzb2NpYXRlZCB3aXRoCit0YWtpbmcgdGhlIGV4Y2VwdGlvbi4KKworUmVsZWFzZSBmaWxlIGZvcm1hdDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgZmlsZSBpbHNwLnNhIGlzIGVzc2VudGlhbGx5IGEgaGV4YWRlY2ltYWwgaW1hZ2Ugb2YgdGhlCityZWxlYXNlIHBhY2thZ2UuIFRoaXMgaXMgdGhlIE9OTFkgZm9ybWF0IHdoaWNoIHdpbGwgYmUgc3VwcG9ydGVkLgorVGhlIGhleCBpbWFnZSB3YXMgY3JlYXRlZCBieSBhc3NlbWJsaW5nIHRoZSBzb3VyY2UgY29kZSBhbmQKK3RoZW4gY29udmVydGluZyB0aGUgcmVzdWx0aW5nIGJpbmFyeSBvdXRwdXQgaW1hZ2UgaW50byBhbgorQVNDSUkgdGV4dCBmaWxlLiBUaGUgaGV4YWRlY2ltYWwgbnVtYmVycyBhcmUgbGlzdGVkCit1c2luZyB0aGUgTW90b3JvbGEgQXNzZW1ibHkgU3ludGF4IGFzc2VtYmxlciBkaXJlY3RpdmUgImRjLmwiCisoZGVmaW5lIGNvbnN0YW50IGxvbmd3b3JkKS4gVGhlIGZpbGUgY2FuIGJlIGNvbnZlcnRlZCB0byBvdGhlcgorYXNzZW1ibHkgc3ludGF4ZXMgYnkgdXNpbmcgYW55IHdvcmQgcHJvY2Vzc29yIHdpdGggYSBnbG9iYWwKK3NlYXJjaCBhbmQgcmVwbGFjZSBmdW5jdGlvbi4KKworVG8gYXNzaXN0IGluIGFzc2VtYmxpbmcgYW5kIGxpbmtpbmcgdGhpcyBtb2R1bGUgd2l0aCBvdGhlciBtb2R1bGVzLAordGhlIGluc3RhbGxlciBzaG91bGQgYWRkIGEgc3ltYm9saWMgbGFiZWwgdG8gdGhlIHRvcCBvZiB0aGUgZmlsZS4KK1RoaXMgd2lsbCBhbGxvdyBjYWxsaW5nIHJvdXRpbmVzIHRvIGFjY2VzcyB0aGUgZW50cnkgcG9pbnRzCitvZiB0aGlzIHBhY2thZ2UuCisKK1RoZSBzb3VyY2UgY29kZSBpbHNwLnMgaGFzIGFsc28gYmVlbiBpbmNsdWRlZCBidXQgb25seSBmb3IKK2RvY3VtZW50YXRpb24gcHVycG9zZXMuCisKK1JlbGVhc2UgZmlsZSBzdHJ1Y3R1cmU6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGZpbGUgaWxzcC5zYSBjb250YWlucyBhbiAiRW50cnktUG9pbnQiIHNlY3Rpb24gYW5kIGEKK2NvZGUgc2VjdGlvbi4gVGhlIElMU1AgaGFzIG5vICJDYWxsLU91dCIgc2VjdGlvbi4gVGhlIGZpcnN0IHNlY3Rpb24KK2lzIHRoZSAiRW50cnktUG9pbnQiIHNlY3Rpb24uIEluIG9yZGVyIHRvIGFjY2VzcyBhIGZ1bmN0aW9uIGluIHRoZQorcGFja2FnZSwgYSBwcm9ncmFtIG11c3QgImJzciIgb3IgImpzciIgdG8gdGhlIGxvY2F0aW9uIGxpc3RlZAorYmVsb3cgaW4gIjY4MDYwSUxTUCBFbnRyeSBQb2ludHMiIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGRlc2lyZWQKK2Z1bmN0aW9uLiBBIGJyYW5jaCBpbnN0cnVjdGlvbiBsb2NhdGVkIGF0IHRoZSBzZWxlY3RlZCBlbnRyeSBwb2ludAord2l0aGluIHRoZSBwYWNrYWdlIHdpbGwgdGhlbiBlbnRlciB0aGUgY29ycmVjdCBlbXVsYXRpb24gY29kZSByb3V0aW5lLgorCitUaGUgZW50cnkgcG9pbnQgYWRkcmVzc2VzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhY2thZ2Ugd2lsbCByZW1haW4KK2ZpeGVkIHNvIHRoYXQgYSBwcm9ncmFtIGNhbGxpbmcgdGhlIHJvdXRpbmVzIHdpbGwgbm90IGhhdmUgdG8gYmUKK3JlLWNvbXBpbGVkIHdpdGggZXZlcnkgbmV3IDY4MDYwSUxTUCByZWxlYXNlLgorCitGb3IgZXhhbXBsZSwgdG8gdXNlIGEgNjQtYml0IG11bHRpcGx5IGluc3RydWN0aW9uLAorZG8gYSAiYnNyIiBvciAianNyIiB0byB0aGUgZW50cnkgcG9pbnQgZGVmaW5lZCBieQordGhlIDA2MElMU1AgZW50cnkgdGFibGUuIEEgY29tcGlsZXIgZ2VuZXJhdGVkIGNvZGUgc2VxdWVuY2UKK2ZvciB1bnNpZ25lZCBtdWx0aXBseSBjb3VsZCBsb29rIGxpa2U6CisKKyMgbXVsdS5sIDxlYT4sRGg6RGwKKyMgbXVsdS5sIF9tdWx0aXBsaWVyLCVkMTolZDAKKworCXN1YnEubAkmMHg4LCVzcAkjIG1ha2Ugcm9vbSBmb3IgcmVzdWx0IG9uIHN0YWNrCisJcGVhCSglc3ApCQkjIHBhc3M6IHJlc3VsdCBhZGRyIG9uIHN0YWNrCisJbW92LmwJJWQwLC0oJXNwKQkjIHBhc3M6IG11bHRpcGxpY2FuZCBvbiBzdGFjaworCW1vdi5sCV9tdWx0aXBsaWVyLC0oJXNwKSAjIHBhc3M6IG11bHRpcGxpZXIgb24gc3RhY2sKKwlic3IubAlfMDYwTElTUF9UT1ArMHgxOCAjIGJyYW5jaCB0byBtdWx0aXBseSByb3V0aW5lCisJYWRkLmwJJjB4Yywlc3AJIyBjbGVhciBhcmd1bWVudHMgZnJvbSBzdGFjaworCW1vdi5sCSglc3ApKywlZDEJIyBsb2FkIHJlc3VsdFs2MzozMl0KKwltb3YubAkoJXNwKSssJWQwCSMgbG9hZCByZXN1bHRbMzE6MF0KKworRm9yIGEgZGl2aWRlOgorCisjIGRpdnUubCA8ZWE+LERyOkRxCisjIGRpdnUubCBfZGl2aXNvciwlZDE6JWQwCisKKwlzdWJxLmwJJjB4OCwlc3AJIyBtYWtlIHJvb20gZm9yIHJlc3VsdCBvbiBzdGFjaworCXBlYQkoJXNwKQkJIyBwYXNzOiByZXN1bHQgYWRkciBvbiBzdGFjaworCW1vdi5sCSVkMCwtKCVzcCkJIyBwYXNzOiBkaXZpZGVuZCBoaSBvbiBzdGFjaworCW1vdi5sCSVkMSwtKCVzcCkJIyBwYXNzOiBkaXZpZGVuZCBoaSBvbiBzdGFjaworCW1vdi5sCV9kaXZpc29yLC0oJXNwKSAjIHBhc3M6IGRpdmlzb3Igb24gc3RhY2sKKwlic3IubAlfMDYwTElTUF9UT1ArMHgwOCAjIGJyYW5jaCB0byBkaXZpZGUgcm91dGluZQorCWFkZC5sCSYweGMsJXNwCSMgY2xlYXIgYXJndW1lbnRzIGZyb20gc3RhY2sKKwltb3YubAkoJXNwKSssJWQxCSMgbG9hZCByZW1haW5kZXIKKwltb3YubAkoJXNwKSssJWQwCSMgbG9hZCBxdW90aWVudAorCitUaGUgbGlicmFyeSByb3V0aW5lcyBhbHNvIHJldHVybiB0aGUgY29ycmVjdCBjb25kaXRpb24gY29kZQorcmVnaXN0ZXIgdmFsdWUuIElmIHRoaXMgaXMgaW1wb3J0YW50LCB0aGVuIHRoZSBjYWxsZXIgb2YgdGhlIGxpYnJhcnkKK3JvdXRpbmUgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGUgdmFsdWUgaXNuJ3QgbG9zdCB3aGlsZSBwb3BwaW5nCitvdGhlciBpdGVtcyBvZmYgb2YgdGhlIHN0YWNrLgorCitBbiBleGFtcGxlIG9mIHVzaW5nIHRoZSAiY21wMiIgaW5zdHJ1Y3Rpb24gaXMgYXMgZm9sbG93czoKKworIyBjbXAyLmwgPGVhPixSbgorIyBjbXAyLmwgX2JvdW5kcywlZDAKKworCXBlYQlfYm91bmRzCQkjIHBhc3MgcHRyIHRvIGJvdW5kcworCW1vdi5sCSVkMCwtKCVzcCkJIyBwYXNzIFJuCisJYnNyLmwJXzA2MExTUF9UT1BfKzB4NDggIyBicmFuY2ggdG8gImNtcDIiIHJvdXRpbmUKKwltb3YudwklY2MsX3RtcAkjIHNhdmUgb2ZmIGNvbmRpdGlvbiBjb2RlcworCWFkZHEubAkmMHg4LCVzcAkjIGNsZWFyIGFyZ3VtZW50cyBmcm9tIHN0YWNrCisKK0V4Y2VwdGlvbiByZXBvcnRpbmc6CistLS0tLS0tLS0tLS0tLS0tLS0tLQorSWYgdGhlIGluc3RydWN0aW9uIGJlaW5nIGVtdWxhdGVkIGlzIGEgZGl2aWRlIGFuZCB0aGUgc291cmNlCitvcGVyYW5kIGlzIGEgemVybywgdGhlbiB0aGUgbGlicmFyeSByb3V0aW5lLCBhcyBpdHMgbGFzdAoraW5zdHJ1Y3Rpb24sIGV4ZWN1dGVzIGFuIGltcGxlbWVudGVkIGRpdmlkZSB1c2luZyBhIHplcm8KK3NvdXJjZSBvcGVyYW5kIHNvIHRoYXQgYW4gIkludGVnZXIgRGl2aWRlLWJ5LVplcm8iIGV4Y2VwdGlvbgord2lsbCBiZSB0YWtlbi4gQWx0aG91Z2ggdGhlIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSB3aWxsIG5vdAorcG9pbnQgdG8gdGhlIGNvcnJlY3QgaW5zdHJ1Y3Rpb24sIHRoZSB1c2VyIHdpbGwgYXQgbGVhc3QgYmUgYWJsZQordG8gcmVjb3JkIHRoYXQgc3VjaCBhbiBldmVudCBvY2N1cnJlZCBpZiBkZXNpcmVkLgorCis2ODA2MElMU1AgZW50cnkgcG9pbnRzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK18wNjBJTFNQX1RPUDoKKzB4MDAwOglfMDYwTFNQX19pZGl2czY0XworMHgwMDg6CV8wNjBMU1BfX2lkaXZ1NjRfCisKKzB4MDEwOglfMDYwTFNQX19pbXVsczY0XworMHgwMTg6CV8wNjBMU1BfX2ltdWx1NjRfCisKKzB4MDIwOglfMDYwTFNQX19jbXAyX0FiXworMHgwMjg6CV8wNjBMU1BfX2NtcDJfQXdfCisweDAzMDoJXzA2MExTUF9fY21wMl9BbF8KKzB4MDM4OglfMDYwTFNQX19jbXAyX0RiXworMHgwNDA6CV8wNjBMU1BfX2NtcDJfRHdfCisweDA0ODoJXzA2MExTUF9fY21wMl9EbF8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9pbHNwLnNhIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2lsc3Auc2EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc1N2Q1MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9pbHNwLnNhCkBAIC0wLDAgKzEsMTAxIEBACisJZGMubAkkNjBmZjAwMDAsJDAxZmUwMDAwLCQ2MGZmMDAwMCwkMDIwODAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMDQ5MDAwMDAsJDYwZmYwMDAwLCQwNDA4MDAwMAorCWRjLmwJJDYwZmYwMDAwLCQwNTFlMDAwMCwkNjBmZjAwMDAsJDA1M2MwMDAwCisJZGMubAkkNjBmZjAwMDAsJDA1NWEwMDAwLCQ2MGZmMDAwMCwkMDU3NDAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMDU5NDAwMDAsJDYwZmYwMDAwLCQwNWI0MDAwMAorCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDRlNTZmZmYwLCQ0OGU3M2YwMCwkNDJlZWZmZjAsJDUwZWVmZmZmCisJZGMubAkkNjAxMDRlNTYsJGZmZjA0OGU3LCQzZjAwNDJlZSwkZmZmMDUxZWUKKwlkYy5sCSRmZmZmMmUyZSwkMDAwODY3MDAsJDAwYWUyYTJlLCQwMDBjMmMyZQorCWRjLmwJJDAwMTA0YTJlLCRmZmZmNjcxYSwkNGE4NzVkZWUsJGZmZmU2YTAyCisJZGMubAkkNDQ4NzRhODUsJDVkZWVmZmZkLCQ2YTA4NDRmYywkMDAwMDQwODYKKwlkYy5sCSQ0MDg1NGE4NSwkNjYxNjRhODYsJDY3MDAwMDQ2LCRiZTg2NjMwNgorCWRjLmwJJGNiNDY2MDAwLCQwMDEyNGM0NywkNjAwNTYwMGEsJGJlODU2MzRjCisJZGMubAkkNjFmZjAwMDAsJDAwODY0YTJlLCRmZmZmNjcyNCwkNGEyZWZmZmQKKwlkYy5sCSQ2NzAyNDQ4NSwkMTAyZWZmZmUsJGIxMmVmZmZkLCQ2NzBjMGM4NgorCWRjLmwJJDgwMDAwMDAwLCQ2MjI2NDQ4NiwkNjAwNjA4MDYsJDAwMWY2NjFjCisJZGMubAkkMDI2ZTAwMTAsJGZmZjA0NGVlLCRmZmYwNGE4NiwkNDhmNjAwNjAKKwlkYy5sCSQwMTYxMDAxNCwkNGNkZjAwZmMsJDRlNWU0ZTc1LCQyYTJlMDAwYworCWRjLmwJJDJjMmUwMDEwLCQwMjZlMDAxYywkZmZmMDAwNmUsJDAwMDJmZmYwCisJZGMubAkkNDRlZWZmZjAsJDYwZDYyZGFlLCQwMDBjMDE2MSwkMDAxNDJkYWUKKwlkYy5sCSQwMDEwMDE2MiwkMDAxNDAwMDQsJDQ0ZWVmZmYwLCQ0Y2RmMDBmYworCWRjLmwJJDRlNWU4MGZjLCQwMDAwNGU3NSwkMGM4NzAwMDAsJGZmZmY2MjFlCisJZGMubAkkNDI4MTQ4NDUsJDQ4NDYzYTA2LCQ4YWM3MzIwNSwkNDg0NjNhMDYKKwlkYy5sCSQ4YWM3NDg0MSwkMzIwNTQyNDUsJDQ4NDUyYzAxLCQ0ZTc1NDJhZQorCWRjLmwJJGZmZjg0MjJlLCRmZmZjNDI4MSwkMDgwNzAwMWYsJDY2MGU1MmFlCisJZGMubAkkZmZmOGUzOGYsJGUzOGVlMzk1LCQ2MDAwZmZlZSwkMjYwNzI0MDUKKwlkYy5sCSQ0ODQyNDg0MywkYjQ0MzY2MDYsJDMyM2NmZmZmLCQ2MDBhMjIwNQorCWRjLmwJJDgyYzMwMjgxLCQwMDAwZmZmZiwkMmYwNjQyNDYsJDQ4NDYyNjA3CisJZGMubAkkMjQwMWM0YzcsJDQ4NDNjNmMxLCQyODA1OTg4MywkNDg0NDMwMDQKKwlkYy5sCSQzODA2NGE0MCwkNjYwMDAwMGEsJGI0ODQ2MzA0LCQ1MzgxNjBkZQorCWRjLmwJJDJmMDUyYzAxLCQ0ODQ2MmEwNywkNjFmZjAwMDAsJDAwNmEyNDA1CisJZGMubAkkMjYwNjJhMWYsJDJjMWY5YzgzLCQ5YjgyNjRmZiwkMDAwMDAwMWEKKwlkYy5sCSQ1MzgxNDI4MiwkMjYwNzQ4NDMsJDQyNDNkYzgzLCRkYjgyMjYwNworCWRjLmwJJDQyNDM0ODQzLCRkYTgzNGEyZSwkZmZmYzY2MTYsJDNkNDFmZmY0CisJZGMubAkkNDI4MTQ4NDUsJDQ4NDYzYTA2LCQ0MjQ2NTBlZSwkZmZmYzYwMDAKKwlkYy5sCSRmZjZjM2Q0MSwkZmZmNjNjMDUsJDQ4NDY0ODQ1LCQyZTJlZmZmOAorCWRjLmwJJDY3MGE1Mzg3LCRlMjhkZTI5NiwkNTFjZmZmZmEsJDJhMDYyYzJlCisJZGMubAkkZmZmNDRlNzUsJDI0MDYyNjA2LCQyODA1NDg0MywkNDg0NGNjYzUKKwlkYy5sCSRjYWMzYzRjNCwkYzZjNDQyODQsJDQ4NDZkYzQ1LCRkNzQ0ZGM0MgorCWRjLmwJJGQ3NDQ0ODQ2LCQ0MjQ1NDI0MiwkNDg0NTQ4NDIsJGRhODJkYTgzCisJZGMubAkkNGU3NTRlNTYsJGZmZmM0OGU3LCQzODAwNDJlZSwkZmZmYzIwMmUKKwlkYy5sCSQwMDA4NjcwMCwkMDA1YTIyMmUsJDAwMGM2NzAwLCQwMDUyMjQwMAorCWRjLmwJJDI2MDAyODAxLCQ0ODQzNDg0NCwkYzBjMWMyYzMsJGM0YzRjNmM0CisJZGMubAkkNDI4NDQ4NDAsJGQwNDFkNzg0LCRkMDQyZDc4NCwkNDg0MDQyNDEKKwlkYy5sCSQ0MjQyNDg0MSwkNDg0MmQyODIsJGQyODMzODJlLCRmZmZjMDIwNAorCWRjLmwJJDAwMTA0YTgxLCQ2YTA0MDAwNCwkMDAwODQ0YzQsJGMzNDA0OGY2CisJZGMubAkkMDAwMzAxNjEsJDAwMTA0Y2RmLCQwMDFjNGU1ZSwkNGU3NTQyODAKKwlkYy5sCSQ0MjgxMzgyZSwkZmZmYzAyMDQsJDAwMTAwMDA0LCQwMDA0NDRjNAorCWRjLmwJJDYwZGE0ZTU2LCRmZmZjNDhlNywkM2MwMDQyZWUsJGZmZmMyMDJlCisJZGMubAkkMDAwODY3ZGEsJDIyMmUwMDBjLCQ2N2Q0NDIwNSwkNGE4MDZjMDYKKwlkYy5sCSQ0NDgwMDAwNSwkMDAwMTRhODEsJDZjMDY0NDgxLCQwYTA1MDAwMQorCWRjLmwJJDI0MDAyNjAwLCQyODAxNDg0MywkNDg0NGMwYzEsJGMyYzNjNGM0CisJZGMubAkkYzZjNDQyODQsJDQ4NDBkMDQxLCRkNzg0ZDA0MiwkZDc4NDQ4NDAKKwlkYy5sCSQ0MjQxNDI0MiwkNDg0MTQ4NDIsJGQyODJkMjgzLCQ0YTA1NjcwOAorCWRjLmwJJDQ2ODA0NjgxLCQ1MjgwZDM4NCwkMzgyZWZmZmMsJDAyMDQwMDEwCisJZGMubAkkNGE4MTZhMDQsJDAwMDQwMDA4LCQ0NGM0YzM0MCwkNDhmNjAwMDMKKwlkYy5sCSQwMTYxMDAxMCwkNGNkZjAwM2MsJDRlNWU0ZTc1LCQ0MjgwNDI4MQorCWRjLmwJJDM4MmVmZmZjLCQwMjA0MDAxMCwkMDAwNDAwMDQsJDQ0YzQ2MGRhCisJZGMubAkkNGU1NmZmZmMsJDQ4ZTczODAwLCQ0MmVlZmZmYywkMjQyZTAwMDgKKwlkYy5sCSQxMDM2MDE2MSwkMDAwYzEyMzYsJDAxNjIwMDBjLCQwMDAxNDljMAorCWRjLmwJJDQ5YzE2MDAwLCQwMGI4NGU1NiwkZmZmYzQ4ZTcsJDM4MDA0MmVlCisJZGMubAkkZmZmYzI0MmUsJDAwMDgzMDM2LCQwMTYxMDAwYywkMzIzNjAxNjIKKwlkYy5sCSQwMDBjMDAwMiwkNDhjMDQ4YzEsJDYwMDAwMDkyLCQ0ZTU2ZmZmYworCWRjLmwJJDQ4ZTczODAwLCQ0MmVlZmZmYywkMjQyZTAwMDgsJDIwMzYwMTYxCisJZGMubAkkMDAwYzIyMzYsJDAxNjIwMDBjLCQwMDA0NjAwMCwkMDA3MDRlNTYKKwlkYy5sCSRmZmZjNDhlNywkMzgwMDQyZWUsJGZmZmMyNDJlLCQwMDA4MTAzNgorCWRjLmwJJDAxNjEwMDBjLCQxMjM2MDE2MiwkMDAwYzAwMDEsJDQ5YzA0OWMxCisJZGMubAkkNDljMjYwMDAsJDAwNDg0ZTU2LCRmZmZjNDhlNywkMzgwMDQyZWUKKwlkYy5sCSRmZmZjMjQyZSwkMDAwODMwMzYsJDAxNjEwMDBjLCQzMjM2MDE2MgorCWRjLmwJJDAwMGMwMDAyLCQ0OGMwNDhjMSwkNDhjMjYwMDAsJDAwMjA0ZTU2CisJZGMubAkkZmZmYzQ4ZTcsJDM4MDA0MmVlLCRmZmZjMjQyZSwkMDAwODIwMzYKKwlkYy5sCSQwMTYxMDAwYywkMjIzNjAxNjIsJDAwMGMwMDA0LCQ5NDgwNDJjMworCWRjLmwJJDAyMDMwMDA0LCQ5MjgwYjI4MiwkNDJjNDg2MDQsJDAyMDMwMDA1CisJZGMubAkkMzgyZWZmZmMsJDAyMDQwMDFhLCQ4ODAzNDRjNCwkNGNkZjAwMWMKKwlkYy5sCSQ0ZTVlNGU3NSwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL2lza2VsZXRvbi5TIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2lza2VsZXRvbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwM2E2ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaWZwc3AwNjAvaXNrZWxldG9uLlMKQEAgLTAsMCArMSwzNDkgQEAKK3x+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK3xNT1RPUk9MQSBNSUNST1BST0NFU1NPUiAmIE1FTU9SWSBURUNITk9MT0dZIEdST1VQCit8TTY4MDAwIEhpLVBlcmZvcm1hbmNlIE1pY3JvcHJvY2Vzc29yIERpdmlzaW9uCit8TTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UKK3xQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAorfAorfE02ODA2MCBTb2Z0d2FyZSBQYWNrYWdlIENvcHlyaWdodCCpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KK3wKK3xUSEUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KK3xUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorfE1PVE9ST0xBIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK3xJTkNMVURJTkcgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorfGFuZCBhbnkgd2FycmFudHkgYWdhaW5zdCBpbmZyaW5nZW1lbnQgd2l0aCByZWdhcmQgdG8gdGhlIFNPRlRXQVJFCit8KElOQ0xVRElORyBBTlkgTU9ESUZJRUQgVkVSU0lPTlMgVEhFUkVPRikgYW5kIGFueSBhY2NvbXBhbnlpbmcgd3JpdHRlbiBtYXRlcmlhbHMuCit8Cit8VG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK3xJTiBOTyBFVkVOVCBTSEFMTCBNT1RPUk9MQSBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKK3woSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUyBQUk9GSVRTLAorfEJVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBCVVNJTkVTUyBJTkZPUk1BVElPTiwgT1IgT1RIRVIgUEVDVU5JQVJZIExPU1MpCit8QVJJU0lORyBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLgorfE1vdG9yb2xhIGFzc3VtZXMgbm8gcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBtYWludGVuYW5jZSBhbmQgc3VwcG9ydCBvZiB0aGUgU09GVFdBUkUuCit8Cit8WW91IGFyZSBoZXJlYnkgZ3JhbnRlZCBhIGNvcHlyaWdodCBsaWNlbnNlIHRvIHVzZSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGUgU09GVFdBUkUKK3xzbyBsb25nIGFzIHRoaXMgZW50aXJlIG5vdGljZSBpcyByZXRhaW5lZCB3aXRob3V0IGFsdGVyYXRpb24gaW4gYW55IG1vZGlmaWVkIGFuZC9vcgorfHJlZGlzdHJpYnV0ZWQgdmVyc2lvbnMsIGFuZCB0aGF0IHN1Y2ggbW9kaWZpZWQgdmVyc2lvbnMgYXJlIGNsZWFybHkgaWRlbnRpZmllZCBhcyBzdWNoLgorfE5vIGxpY2Vuc2VzIGFyZSBncmFudGVkIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UgdW5kZXIgYW55IHBhdGVudHMKK3xvciB0cmFkZW1hcmtzIG9mIE1vdG9yb2xhLCBJbmMuCit8fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Cit8IGlza2VsZXRvbi5zCit8Cit8IFRoaXMgZmlsZSBjb250YWluczoKK3wJKDEpIGV4YW1wbGUgIkNhbGwtb3V0InMKK3wJKDIpIGV4YW1wbGUgcGFja2FnZSBlbnRyeSBjb2RlCit8CSgzKSBleGFtcGxlICJDYWxsLW91dCIgdGFibGUKK3wKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vZW50cnkuaD4KKyNpbmNsdWRlIDxhc20vb2Zmc2V0cy5oPgorCisKK3wjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworfCAoMSkgRVhBTVBMRSBDQUxMLU9VVFMJCSMKK3wJCQkJIworfCBfMDYwX2lzcF9kb25lKCkJCSMKK3wgXzA2MF9yZWFsX2NoaygpCQkjCit8IF8wNjBfcmVhbF9kaXZieXplcm8oKQkJIworfAkJCQkjCit8IF8wNjBfcmVhbF9jYXMoKQkJIworfCBfMDYwX3JlYWxfY2FzMigpCQkjCit8IF8wNjBfcmVhbF9sb2NrX3BhZ2UoKQkJIworfCBfMDYwX3JlYWxfdW5sb2NrX3BhZ2UoKQkjCit8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworfAorfCBfMDYwX2lzcF9kb25lKCk6Cit8Cit8IFRoaXMgaXMgYW5kIGV4YW1wbGUgbWFpbiBleGl0IHBvaW50IGZvciB0aGUgVW5pbXBsZW1lbnRlZCBJbnRlZ2VyCit8IEluc3RydWN0aW9uIGV4Y2VwdGlvbiBoYW5kbGVyLiBGb3IgYSBub3JtYWwgZXhpdCwgdGhlCit8IF9pc3BfdW5pbXAoKSBicmFuY2hlcyB0byBoZXJlIHNvIHRoYXQgdGhlIG9wZXJhdGluZyBzeXN0ZW0KK3wgY2FuIGRvIGFueSBjbGVhbi11cCBkZXNpcmVkLiBUaGUgc3RhY2sgZnJhbWUgaXMgdGhlCit8IFVuaW1wbGVtZW50ZWQgSW50ZWdlciBJbnN0cnVjdGlvbiBzdGFjayBmcmFtZSB3aXRoCit8IHRoZSBQQyBwb2ludGluZyB0byB0aGUgaW5zdHJ1Y3Rpb24gZm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbgorfCBqdXN0IGVtdWxhdGVkLgorfCBUbyBzaW1wbHkgY29udGludWUgZXhlY3V0aW9uIGF0IHRoZSBuZXh0IGluc3RydWN0aW9uLCBqdXN0Cit8IGRvIGFuICJydGUiLgorfAorfCBMaW51eC82OGs6IElmIHJldHVybmluZyB0byB1c2VyIHNwYWNlLCBjaGVjayBmb3IgbmVlZGVkIHJlc2VsZWN0aW9ucy4KKworCS5nbG9iYWwJCV8wNjBfaXNwX2RvbmUKK18wNjBfaXNwX2RvbmU6CisJYnRzdAkjMHg1LCVzcEAJCXwgc3VwZXJ2aXNvciBiaXQgc2V0IGluIHNhdmVkIFNSPworCWJlcQkuTG5vdGtlcm4KKwlydGUKKy5Mbm90a2VybjoKKwlTQVZFX0FMTF9JTlQKKwlHRVRfQ1VSUkVOVCglZDApCisJdHN0YgklY3VycHRyQChUQVNLX05FRURSRVNDSEVEKQorCWpuZQlyZXRfZnJvbV9leGNlcHRpb24JfCBkZWxpdmVyIHNpZ25hbHMsCisJCQkJCXwgcmVzY2hlZHVsZSBldGMuLgorCVJFU1RPUkVfQUxMCisKK3wKK3wgXzA2MF9yZWFsX2NoaygpOgorfAorfCBUaGlzIGlzIGFuIGFsdGVybmF0ZSBleGl0IHBvaW50IGZvciB0aGUgVW5pbXBsZW1lbnRlZCBJbnRlZ2VyCit8IEluc3RydWN0aW9uIGV4Y2VwdGlvbiBoYW5kbGVyLiBJZiB0aGUgaW5zdHJ1Y3Rpb24gd2FzIGEgImNoazIiCit8IGFuZCB0aGUgb3BlcmFuZCB3YXMgb3V0IG9mIGJvdW5kcywgdGhlbiBfaXNwX3VuaW1wKCkgY3JlYXRlcworfCBhIENISyBleGNlcHRpb24gc3RhY2sgZnJhbWUgZnJvbSB0aGUgVW5pbXBsZW1lbnRlZCBJbnRlZ2VyIEluc3RyY3V0aW9uCit8IHN0YWNrIGZyYW1lIGFuZCBicmFuY2hlcyB0byB0aGlzIHJvdXRpbmUuCit8Cit8IExpbnV4LzY4azogY29tbWVudGVkIG91dCB0ZXN0IGZvciB0cmFjaW5nCisKKwkuZ2xvYmFsCQlfMDYwX3JlYWxfY2hrCitfMDYwX3JlYWxfY2hrOgorfAl0c3QuYgkJKCVzcCkJCQl8IGlzIHRyYWNpbmcgZW5hYmxlZD8KK3wJYnBscwkJcmVhbF9jaGtfZW5kCQl8IG5vCisKK3wKK3wJICAgIENISyBGUkFNRQkJICAgVFJBQ0UgRlJBTUUKK3wJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKK3wJKiAgIEN1cnJlbnQgUEMJKgkqICAgQ3VycmVudCBQQwkqCit8CSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCit8CSogMHgyICogIDB4MDE4CSoJKiAweDIgKiAgMHgwMjQJKgorfAkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorfAkqICAgICBOZXh0CSoJKiAgICAgTmV4dAkqCit8CSogICAgICBQQwkqCSogICAgICBQQwkqCit8CSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCit8CSogICAgICBTUgkqCSogICAgICBTUgkqCit8CSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCit8Cit8CW1vdmUuYgkJIzB4MjQsMHg3KCVzcCkJCXwgc2V0IHRyYWNlIHZlY25vCit8CWJyYWwJCV8wNjBfcmVhbF90cmFjZQorCityZWFsX2Noa19lbmQ6CisJYnJhbAkJdHJhcAkJCXwganVtcCB0byB0cmFwIGhhbmRsZXIKKworfAorfCBfMDYwX3JlYWxfZGl2Ynl6ZXJvOgorfAorfCBUaGlzIGlzIGFuIGFsdGVybmF0ZSBleGl0IHBvaW50IGZvciB0aGUgVW5pbXBsZW1lbnRlZCBJbnRlZ2VyCit8IEluc3RydWN0aW9uIGV4Y2VwdGlvbiBoYW5kbGVyIGlzcF91bmltcCgpLiBJZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgYSA2NC1iaXQKK3wgaW50ZWdlciBkaXZpZGUgd2hlcmUgdGhlIHNvdXJjZSBvcGVyYW5kIGlzIGEgemVybywgdGhlbiB0aGUgX2lzcF91bmltcCgpCit8IGNyZWF0ZXMgYSBEaXZpZGUtYnktemVybyBleGNlcHRpb24gc3RhY2sgZnJhbWUgZnJvbSB0aGUgVW5pbXBsZW1lbnRlZAorfCBJbnRlZ2VyIEluc3RydWN0aW9uIHN0YWNrIGZyYW1lIGFuZCBicmFuY2hlcyB0byB0aGlzIHJvdXRpbmUuCit8Cit8IFJlbWVtYmVyIHRoYXQgYSB0cmFjZSBleGNlcHRpb24gbWF5IGJlIHBlbmRpbmcuIFRoZSBjb2RlIGJlbG93IHBlcmZvcm1zCit8IG5vIGFjdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlICJjaGsiIGV4Y2VwdGlvbi4gSWYgdHJhY2luZyBpcyBlbmFibGVkLAorfCB0aGVuIGl0IGNyZWF0ZSBhIFRyYWNlIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSBmcm9tIHRoZSAiY2hrIiBleGNlcHRpb24KK3wgc3RhY2sgZnJhbWUgYW5kIGJyYW5jaGVzIHRvIHRoZSBfcmVhbF90cmFjZSgpIGVudHJ5IHBvaW50LgorfAorfCBMaW51eC82OGs6IGNvbW1lbnRlZCBvdXQgdGVzdCBmb3IgdHJhY2luZworCisJLmdsb2JhbAkJXzA2MF9yZWFsX2RpdmJ5emVybworXzA2MF9yZWFsX2RpdmJ5emVybzoKK3wJdHN0LmIJCSglc3ApCQkJfCBpcyB0cmFjaW5nIGVuYWJsZWQ/Cit8CWJwbHMJCXJlYWxfZGl2Ynl6ZXJvX2VuZAl8IG5vCisKK3wKK3wJIERJVkJZWkVSTyBGUkFNRQkgICBUUkFDRSBGUkFNRQorfAkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorfAkqICAgQ3VycmVudCBQQwkqCSogICBDdXJyZW50IFBDCSoKK3wJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKK3wJKiAweDIgKiAgMHgwMTQJKgkqIDB4MiAqICAweDAyNAkqCit8CSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCit8CSogICAgIE5leHQJKgkqICAgICBOZXh0CSoKK3wJKiAgICAgIFBDCSoJKiAgICAgIFBDCSoKK3wJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKK3wJKiAgICAgIFNSCSoJKiAgICAgIFNSCSoKK3wJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKK3wKK3wJbW92ZS5iCQkjMHgyNCwweDcoJXNwKQkJfCBzZXQgdHJhY2UgdmVjbm8KK3wJYnJhbAkJXzA2MF9yZWFsX3RyYWNlCisKK3JlYWxfZGl2Ynl6ZXJvX2VuZDoKKwlicmFsCQl0cmFwCQkJfCBqdW1wIHRvIHRyYXAgaGFuZGxlcgorCit8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworfAorfCBfMDYwX3JlYWxfY2FzKCk6Cit8Cit8IEVudHJ5IHBvaW50IGZvciB0aGUgc2VsZWN0ZWQgY2FzIGVtdWxhdGlvbiBjb2RlIGltcGxlbWVudGF0aW9uLgorfCBJZiB0aGUgaW1wbGVtZW50YXRpb24gcHJvdmlkZWQgYnkgdGhlIDY4MDYwSVNQIGlzIHN1ZmZpY2llbnQsCit8IHRoZW4gdGhpcyByb3V0aW5lIHNpbXBseSByZS1lbnRlcnMgdGhlIHBhY2thZ2UgdGhyb3VnaCBfaXNwX2Nhcy4KK3wKKwkuZ2xvYmFsCQlfMDYwX3JlYWxfY2FzCitfMDYwX3JlYWxfY2FzOgorCWJyYWwJCV9JX0NBTExfVE9QKzB4ODArMHgwOAorCit8Cit8IF8wNjBfcmVhbF9jYXMyKCk6Cit8Cit8IEVudHJ5IHBvaW50IGZvciB0aGUgc2VsZWN0ZWQgY2FzMiBlbXVsYXRpb24gY29kZSBpbXBsZW1lbnRhdGlvbi4KK3wgSWYgdGhlIGltcGxlbWVudGF0aW9uIHByb3ZpZGVkIGJ5IHRoZSA2ODA2MElTUCBpcyBzdWZmaWNpZW50LAorfCB0aGVuIHRoaXMgcm91dGluZSBzaW1wbHkgcmUtZW50ZXJzIHRoZSBwYWNrYWdlIHRocm91Z2ggX2lzcF9jYXMyLgorfAorCS5nbG9iYWwJCV8wNjBfcmVhbF9jYXMyCitfMDYwX3JlYWxfY2FzMjoKKwlicmFsCQlfSV9DQUxMX1RPUCsweDgwKzB4MTAKKworfAorfCBfMDYwX2xvY2tfcGFnZSgpOgorfAorfCBFbnRyeSBwb2ludCBmb3IgdGhlIG9wZXJhdGluZyBzeXN0ZW1gcyByb3V0aW5lIHRvICJsb2NrIiBhIHBhZ2UKK3wgZnJvbSBiZWluZyBwYWdlZCBvdXQuIFRoaXMgcm91dGluZSBpcyBuZWVkZWQgYnkgdGhlIGNhcy9jYXMyCit8IGFsZ29yaXRobXMgc28gdGhhdCBubyBwYWdlIGZhdWx0cyBvY2N1ciB3aXRoaW4gdGhlICJjb3JlIiBjb2RlCit8IHJlZ2lvbi4gTm90ZTogdGhlIHJvdXRpbmUgbXVzdCBsb2NrIHR3byBwYWdlcyBpZiB0aGUgb3BlcmFuZAorfCBzcGFucyB0d28gcGFnZXMuCit8IE5PVEU6IFRIRSBST1VUSU5FIFNIT1VMRCBSRVRVUk4gQU4gRlNMVyBWQUxVRSBJTiBEMCBPTiBGQUlMVVJFCit8IFNPIFRIQVQgVEhFIDA2MFNQIENBTiBDUkVBVEUgQSBQUk9QRVIgQUNDRVNTIEVSUk9SIEZSQU1FLgorfCBBcmd1bWVudHM6Cit8CWEwID0gb3BlcmFuZCBhZGRyZXNzCit8CWQwID0gYHh4eHh4eGZmIC0+IHN1cGVydmlzb3I7IGB4eHh4eHgwMCAtPiB1c2VyCit8CWQxID0gYHh4eHh4eGZmIC0+IGxvbmd3b3JkOyBgeHh4eHh4MDAgLT4gd29yZAorfCBFeHBlY3RlZCBvdXRwdXRzOgorfAlkMCA9IDAgLT4gc3VjY2Vzczsgbm9uLXplcm8gLT4gZmFpbHVyZQorfAorfCBMaW51eC9tNjhrOiBNYWtlIHN1cmUgdGhlIHBhZ2UgaXMgcHJvcGVybHkgcGFnZWQgaW4sIHNvIHdlIHVzZQorfCBwbHBhdyBhbmQgaGFuZGxlIGFueSBleGNlcHRpb24gaGVyZS4gVGhlIGtlcm5lbCBtdXN0IG5vdCBiZQorfCBwcmVlbXB0ZWQgdW50aWwgXzA2MF91bmxvY2tfcGFnZSgpLCBzbyB0aGF0IHRoZSBwYWdlIHN0YXlzIG1hcHBlZC4KK3wKKwkuZ2xvYmFsCQlfMDYwX3JlYWxfbG9ja19wYWdlCitfMDYwX3JlYWxfbG9ja19wYWdlOgorCW1vdmUubAklZDIsLSglc3ApCisJfCBsb2FkIHNmYy9kZmMKKwl0c3QuYgklZDAKKwlqbmUJMWYKKwltb3ZlcQkjMSwlZDAKKwlqcmEJMmYKKzE6CW1vdmVxCSM1LCVkMAorMjoJbW92ZWMubAklZGZjLCVkMgorCW1vdmVjLmwJJWQwLCVkZmMKKwltb3ZlYy5sCSVkMCwlc2ZjCisKKwljbHIubAklZDAKKwl8IHByZWZldGNoIGFkZHJlc3MKKwkuY2hpcAk2ODA2MAorCW1vdmUubAklYTAsJWExCisxOglwbHBhdwkoJWExKQorCWFkZHEudwkjMSwlYTAKKwl0c3QuYgklZDEKKwlqZXEJMmYKKwlhZGRxLncJIzIsJWEwCisyOglwbHBhdwkoJWEwKQorMzoJLmNoaXAJNjhrCisKKwl8IHJlc3RvcmUgc2ZjL2RmYworCW1vdmVjLmwJJWQyLCVkZmMKKwltb3ZlYy5sCSVkMiwlc2ZjCisJbW92ZS5sCSglc3ApKywlZDIKKwlydHMKKworLnNlY3Rpb24gX19leF90YWJsZSwiYSIKKwkuYWxpZ24JNAorCS5sb25nCTFiLDExZgorCS5sb25nCTJiLDIxZgorLnByZXZpb3VzCisuc2VjdGlvbiAuZml4dXAsImF4IgorCS5ldmVuCisxMToJbW92ZS5sCSMweDAyMDAwM2MwLCVkMAorCW9yLmwJJWQyLCVkMAorCXN3YXAJJWQwCisJanJhCTNiCisyMToJbW92ZS5sCSMweDAyMDAwYmMwLCVkMAorCW9yLmwJJWQyLCVkMAorCXN3YXAJJWQwCisJanJhCTNiCisucHJldmlvdXMKKworfAorfCBfMDYwX3VubG9ja19wYWdlKCk6Cit8Cit8IEVudHJ5IHBvaW50IGZvciB0aGUgb3BlcmF0aW5nIHN5c3RlbWBzIHJvdXRpbmUgdG8gInVubG9jayIgYQorfCBwYWdlIHRoYXQgaGFzIGJlZW4gImxvY2tlZCIgcHJldmlvdXNseSB3aXRoIF9yZWFsX2xvY2tfcGFnZS4KK3wgTm90ZTogdGhlIHJvdXRpbmUgbXVzdCB1bmxvY2sgdHdvIHBhZ2VzIGlmIHRoZSBvcGVyYW5kIHNwYW5zCit8IHR3byBwYWdlcy4KK3wgQXJndW1lbnRzOgorfAlhMCA9IG9wZXJhbmQgYWRkcmVzcworfAlkMCA9IGB4eHh4eHhmZiAtPiBzdXBlcnZpc29yOyBgeHh4eHh4MDAgLT4gdXNlcgorfAlkMSA9IGB4eHh4eHhmZiAtPiBsb25nd29yZDsgYHh4eHh4eDAwIC0+IHdvcmQKK3wKK3wgTGludXgvbTY4azogcGVyaGFwcyByZWVuYWJsZSBwcmVlbXB0aW9uIGhlcmUuLi4KKworCS5nbG9iYWwJCV8wNjBfcmVhbF91bmxvY2tfcGFnZQorXzA2MF9yZWFsX3VubG9ja19wYWdlOgorCWNsci5sCQklZDAKKwlydHMKKworfCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit8ICgyKSBFWEFNUExFIFBBQ0tBR0UgRU5UUlkgQ09ERSAjCit8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwkuZ2xvYmFsCQlfMDYwX2lzcF91bmltcAorXzA2MF9pc3BfdW5pbXA6CisJYnJhbAkJX0lfQ0FMTF9UT1ArMHg4MCsweDAwCisKKwkuZ2xvYmFsCQlfMDYwX2lzcF9jYXMKK18wNjBfaXNwX2NhczoKKwlicmFsCQlfSV9DQUxMX1RPUCsweDgwKzB4MDgKKworCS5nbG9iYWwJCV8wNjBfaXNwX2NhczIKK18wNjBfaXNwX2NhczI6CisJYnJhbAkJX0lfQ0FMTF9UT1ArMHg4MCsweDEwCisKKwkuZ2xvYmFsCQlfMDYwX2lzcF9jYXNfZmluaXNoCitfMDYwX2lzcF9jYXNfZmluaXNoOgorCWJyYS5sCQlfSV9DQUxMX1RPUCsweDgwKzB4MTgKKworCS5nbG9iYWwJCV8wNjBfaXNwX2NhczJfZmluaXNoCitfMDYwX2lzcF9jYXMyX2ZpbmlzaDoKKwlicmFsCQlfSV9DQUxMX1RPUCsweDgwKzB4MjAKKworCS5nbG9iYWwJCV8wNjBfaXNwX2Nhc19pbnJhbmdlCitfMDYwX2lzcF9jYXNfaW5yYW5nZToKKwlicmFsCQlfSV9DQUxMX1RPUCsweDgwKzB4MjgKKworCS5nbG9iYWwJCV8wNjBfaXNwX2Nhc190ZXJtaW5hdGUKK18wNjBfaXNwX2Nhc190ZXJtaW5hdGU6CisJYnJhbAkJX0lfQ0FMTF9UT1ArMHg4MCsweDMwCisKKwkuZ2xvYmFsCQlfMDYwX2lzcF9jYXNfcmVzdGFydAorXzA2MF9pc3BfY2FzX3Jlc3RhcnQ6CisJYnJhbAkJX0lfQ0FMTF9UT1ArMHg4MCsweDM4CisKK3wjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworfCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3wgKDMpIEVYQU1QTEUgQ0FMTC1PVVQgU0VDVElPTiAjCit8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit8IFRoZSBzaXplIG9mIHRoaXMgc2VjdGlvbiBNVVNUIGJlIDEyOCBieXRlcyEhIQorCitfSV9DQUxMX1RPUDoKKwkubG9uZwlfMDYwX3JlYWxfY2hrCQktIF9JX0NBTExfVE9QCisJLmxvbmcJXzA2MF9yZWFsX2RpdmJ5emVybwktIF9JX0NBTExfVE9QCisJLmxvbmcJXzA2MF9yZWFsX3RyYWNlCQktIF9JX0NBTExfVE9QCisJLmxvbmcJXzA2MF9yZWFsX2FjY2VzcwktIF9JX0NBTExfVE9QCisJLmxvbmcJXzA2MF9pc3BfZG9uZQkJLSBfSV9DQUxMX1RPUAorCisJLmxvbmcJXzA2MF9yZWFsX2NhcwkJLSBfSV9DQUxMX1RPUAorCS5sb25nCV8wNjBfcmVhbF9jYXMyCQktIF9JX0NBTExfVE9QCisJLmxvbmcJXzA2MF9yZWFsX2xvY2tfcGFnZQktIF9JX0NBTExfVE9QCisJLmxvbmcJXzA2MF9yZWFsX3VubG9ja19wYWdlCS0gX0lfQ0FMTF9UT1AKKworCS5sb25nCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwCisKKwkubG9uZwlfMDYwX2ltZW1fcmVhZAkJLSBfSV9DQUxMX1RPUAorCS5sb25nCV8wNjBfZG1lbV9yZWFkCQktIF9JX0NBTExfVE9QCisJLmxvbmcJXzA2MF9kbWVtX3dyaXRlCQktIF9JX0NBTExfVE9QCisJLmxvbmcJXzA2MF9pbWVtX3JlYWRfd29yZAktIF9JX0NBTExfVE9QCisJLmxvbmcJXzA2MF9pbWVtX3JlYWRfbG9uZwktIF9JX0NBTExfVE9QCisJLmxvbmcJXzA2MF9kbWVtX3JlYWRfYnl0ZQktIF9JX0NBTExfVE9QCisJLmxvbmcJXzA2MF9kbWVtX3JlYWRfd29yZAktIF9JX0NBTExfVE9QCisJLmxvbmcJXzA2MF9kbWVtX3JlYWRfbG9uZwktIF9JX0NBTExfVE9QCisJLmxvbmcJXzA2MF9kbWVtX3dyaXRlX2J5dGUJLSBfSV9DQUxMX1RPUAorCS5sb25nCV8wNjBfZG1lbV93cml0ZV93b3JkCS0gX0lfQ0FMTF9UT1AKKwkubG9uZwlfMDYwX2RtZW1fd3JpdGVfbG9uZwktIF9JX0NBTExfVE9QCisKKwkubG9uZwkweDAwMDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMAorCit8IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3wgMDYwIElOVEVHRVIgS0VSTkVMIFBBQ0tBR0UgTVVTVCBHTyBIRVJFISEhCisjaW5jbHVkZSAiaXNwLnNhIgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL2lzcC5kb2MgYi9hcmNoL202OGsvaWZwc3AwNjAvaXNwLmRvYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTkwZmRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2lzcC5kb2MKQEAgLTAsMCArMSwyMTggQEAKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorTU9UT1JPTEEgTUlDUk9QUk9DRVNTT1IgJiBNRU1PUlkgVEVDSE5PTE9HWSBHUk9VUAorTTY4MDAwIEhpLVBlcmZvcm1hbmNlIE1pY3JvcHJvY2Vzc29yIERpdmlzaW9uCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZQorUHJvZHVjdGlvbiBSZWxlYXNlIFAxLjAwIC0tIE9jdG9iZXIgMTAsIDE5OTQKKworTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IKkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUSEUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitNT1RPUk9MQSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0hFVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorYW5kIGFueSB3YXJyYW50eSBhZ2FpbnN0IGluZnJpbmdlbWVudCB3aXRoIHJlZ2FyZCB0byB0aGUgU09GVFdBUkUKKyhJTkNMVURJTkcgQU5ZIE1PRElGSUVEIFZFUlNJT05TIFRIRVJFT0YpIGFuZCBhbnkgYWNjb21wYW55aW5nIHdyaXR0ZW4gbWF0ZXJpYWxzLgorCitUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorSU4gTk8gRVZFTlQgU0hBTEwgTU9UT1JPTEEgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUyBQUk9GSVRTLAorQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIEJVU0lORVNTIElORk9STUFUSU9OLCBPUiBPVEhFUiBQRUNVTklBUlkgTE9TUykKK0FSSVNJTkcgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTT0ZUV0FSRS4KK01vdG9yb2xhIGFzc3VtZXMgbm8gcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBtYWludGVuYW5jZSBhbmQgc3VwcG9ydCBvZiB0aGUgU09GVFdBUkUuCisKK1lvdSBhcmUgaGVyZWJ5IGdyYW50ZWQgYSBjb3B5cmlnaHQgbGljZW5zZSB0byB1c2UsIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNPRlRXQVJFCitzbyBsb25nIGFzIHRoaXMgZW50aXJlIG5vdGljZSBpcyByZXRhaW5lZCB3aXRob3V0IGFsdGVyYXRpb24gaW4gYW55IG1vZGlmaWVkIGFuZC9vcgorcmVkaXN0cmlidXRlZCB2ZXJzaW9ucywgYW5kIHRoYXQgc3VjaCBtb2RpZmllZCB2ZXJzaW9ucyBhcmUgY2xlYXJseSBpZGVudGlmaWVkIGFzIHN1Y2guCitObyBsaWNlbnNlcyBhcmUgZ3JhbnRlZCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlIHVuZGVyIGFueSBwYXRlbnRzCitvciB0cmFkZW1hcmtzIG9mIE1vdG9yb2xhLCBJbmMuCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKzY4MDYwIElOVEVHRVIgU09GVFdBUkUgUEFDS0FHRSAoS2VybmVsIHZlcnNpb24pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpbGUgaXNwLnNhIGNvbnRhaW5zIHRoZSA2ODA2MCBJbnRlZ2VyIFNvZnR3YXJlIFBhY2thZ2UuCitUaGlzIHBhY2thZ2UgaXMgZXNzZW50aWFsbHkgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdGhhdCBjYW4gYmUKK2ludGVncmF0ZWQgaW50byBhbiBvcGVyYXRpbmcgc3lzdGVtIHRvIGhhbmRsZSB0aGUgIlVuaW1wbGVtZW50ZWQKK0ludGVnZXIgSW5zdHJ1Y3Rpb24iIGV4Y2VwdGlvbiB2ZWN0b3IgIzYxLgorVGhpcyBleGNlcHRpb24gaXMgdGFrZW4gd2hlbiBhbnkgb2YgdGhlIGludGVnZXIgaW5zdHJ1Y3Rpb25zCitub3QgaGFyZHdhcmUgaW1wbGVtZW50ZWQgb24gdGhlIDY4MDYwIGFyZSBlbmNvdW50ZXJlZC4gVGhlCitpc3Auc2EgcHJvdmlkZXMgZnVsbCBlbXVsYXRpb24gc3VwcG9ydCBmb3IgdGhlc2UgaW5zdHJ1Y3Rpb25zLgorCitUaGUgdW5pbXBsZW1lbnRlZCBpbnRlZ2VyIGluc3RydWN0aW9ucyBhcmU6CisJNjQtYml0IGRpdmlkZQorCTY0LWJpdCBtdWx0aXBseQorCW1vdmVwCisJY21wMgorCWNoazIKKwljYXMgKHcvIGEgbWlzYWxpZ25lZCBlZmZlY3RpdmUgYWRkcmVzcykKKwljYXMyCisKK1JlbGVhc2UgZmlsZSBmb3JtYXQ6CistLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGZpbGUgaXNwLnNhIGlzIGVzc2VudGlhbGx5IGEgaGV4YWRlY2ltYWwgaW1hZ2Ugb2YgdGhlCityZWxlYXNlIHBhY2thZ2UuIFRoaXMgaXMgdGhlIE9OTFkgZm9ybWF0IHdoaWNoIHdpbGwgYmUgc3VwcG9ydGVkLgorVGhlIGhleCBpbWFnZSB3YXMgY3JlYXRlZCBieSBhc3NlbWJsaW5nIHRoZSBzb3VyY2UgY29kZSBhbmQKK3RoZW4gY29udmVydGluZyB0aGUgcmVzdWx0aW5nIGJpbmFyeSBvdXRwdXQgaW1hZ2UgaW50byBhbgorQVNDSUkgdGV4dCBmaWxlLiBUaGUgaGV4YWRlY2ltYWwgbnVtYmVycyBhcmUgbGlzdGVkCit1c2luZyB0aGUgTW90b3JvbGEgQXNzZW1ibHkgU3ludGF4IGFzc2VtYmxlciBkaXJlY3RpdmUgImRjLmwiCisoZGVmaW5lIGNvbnN0YW50IGxvbmd3b3JkKS4gVGhlIGZpbGUgY2FuIGJlIGNvbnZlcnRlZCB0byBvdGhlcgorYXNzZW1ibHkgc3ludGF4ZXMgYnkgdXNpbmcgYW55IHdvcmQgcHJvY2Vzc29yIHdpdGggYSBnbG9iYWwKK3NlYXJjaCBhbmQgcmVwbGFjZSBmdW5jdGlvbi4KKworVG8gYXNzaXN0IGluIGFzc2VtYmxpbmcgYW5kIGxpbmtpbmcgdGhpcyBtb2R1bGUgd2l0aCBvdGhlciBtb2R1bGVzLAordGhlIGluc3RhbGxlciBzaG91bGQgYWRkIGEgc3ltYm9saWMgbGFiZWwgdG8gdGhlIHRvcCBvZiB0aGUgZmlsZS4KK1RoaXMgd2lsbCBhbGxvdyBjYWxsaW5nIHJvdXRpbmVzIHRvIGFjY2VzcyB0aGUgZW50cnkgcG9pbnRzCitvZiB0aGlzIHBhY2thZ2UuCisKK1RoZSBzb3VyY2UgY29kZSBpc3AucyBoYXMgYWxzbyBiZWVuIGluY2x1ZGVkIGJ1dCBvbmx5IGZvcgorZG9jdW1lbnRhdGlvbiBwdXJwb3Nlcy4KKworUmVsZWFzZSBmaWxlIHN0cnVjdHVyZToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyh0b3Agb2YgbW9kdWxlKQorCS0tLS0tLS0tLS0tLS0tLS0tCisJfAkJfCAtIDEyOCBieXRlLXNpemVkIHNlY3Rpb24KKyAgICgxKSAgfCAgIENhbGwtT3V0ICAgIHwgLSA0IGJ5dGVzIHBlciBlbnRyeSAodXNlciBmaWxscyB0aGVzZSBpbikKKwl8CQl8IC0gZXhhbXBsZSByb3V0aW5lcyBpbiBpc2tlbGV0b24ucworCS0tLS0tLS0tLS0tLS0tLS0tCisJfAkJfCAtIDggYnl0ZXMgcGVyIGVudHJ5CisgICAoMikgIHwgRW50cnkgUG9pbnQgICB8IC0gdXNlciBkb2VzIGEgImJyYSIgb3IgImptcCIgdG8gdGhpcyBhZGRyZXNzCisJfCAgICAgICAgICAgICAgIHwKKwktLS0tLS0tLS0tLS0tLS0tLQorCXwJCXwgLSBjb2RlIHNlY3Rpb24KKyAgICgzKSAgfgkJfgorCXwJCXwKKwktLS0tLS0tLS0tLS0tLS0tLQorKGJvdHRvbSBvZiBtb2R1bGUpCisKK1RoZSBmaXJzdCBzZWN0aW9uIG9mIHRoaXMgbW9kdWxlIGlzIHRoZSAiQ2FsbC1vdXQiIHNlY3Rpb24uIFRoaXMgc2VjdGlvbgoraXMgTk9UIElOQ0xVREVEIGluIGlzcC5zYSAoYW4gZXhhbXBsZSAiQ2FsbC1vdXQiIHNlY3Rpb24gaXMgcHJvdmlkZWQgYXQKK3RoZSBlbmQgb2YgdGhlIGZpbGUgaXNrZWxldG9uLnMpLiBUaGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gaXMgdG8gYWxsb3cKK3RoZSBJU1Agcm91dGluZXMgdG8gcmVmZXJlbmNlIGV4dGVybmFsIGZ1bmN0aW9ucyB0aGF0IG11c3QgYmUgcHJvdmlkZWQKK2J5IHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0uIFRoaXMgc2VjdGlvbiBNVVNUIGJlIGV4YWN0bHkgMTI4IGJ5dGVzIGluCitzaXplLiBUaGVyZSBhcmUgMzIgZmllbGRzLCBlYWNoIDQgYnl0ZXMgaW4gc2l6ZS4gRWFjaCBmaWVsZCBjb3JyZXNwb25kcwordG8gYSBmdW5jdGlvbiByZXF1aXJlZCBieSB0aGUgSVNQICh0aGVzZSBmdW5jdGlvbnMgYW5kIHRoZWlyIGxvY2F0aW9uIGFyZQorbGlzdGVkIGluICI2ODA2MElTUCBjYWxsLW91dHMiIGJlbG93KS4gRWFjaCBmaWVsZCBlbnRyeSBzaG91bGQgY29udGFpbgordGhlIGFkZHJlc3Mgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gUkVMQVRJVkUgdG8gdGhlIHN0YXJ0aW5nIGFkZHJlc3MKK29mIHRoZSAiY2FsbC1vdXQiIHNlY3Rpb24uIFRoZSAiQ2FsbC1vdXQiIHNlY3Rpb24gbXVzdCBzaXQgYWRqYWNlbnQgdG8gdGhlCitpc3Auc2EgaW1hZ2UgaW4gbWVtb3J5LgorCitUaGUgc2Vjb25kIHNlY3Rpb24sIHRoZSAiRW50cnktcG9pbnQiIHNlY3Rpb24sIGlzIHVzZWQgYnkgZXh0ZXJuYWwgcm91dGluZXMKK3RvIGFjY2VzcyB0aGUgZnVuY3Rpb25zIHdpdGhpbiB0aGUgSVNQLiBTaW5jZSB0aGUgaXNwLnNhIGhleCBmaWxlIGNvbnRhaW5zCitubyBzeW1ib2wgbmFtZXMsIHRoaXMgc2VjdGlvbiBjb250YWlucyBmdW5jdGlvbiBlbnRyeSBwb2ludHMgdGhhdCBhcmUgZml4ZWQKK3dpdGggcmVzcGVjdCB0byB0aGUgdG9wIG9mIHRoZSBwYWNrYWdlLiBUaGUgY3VycmVudGx5IGRlZmluZWQgZW50cnktcG9pbnRzCithcmUgbGlzdGVkIGluIHNlY3Rpb24gIjY4MDYwIElTUCBlbnRyeSBwb2ludHMiIGJlbG93LiBBIGNhbGxpbmcgcm91dGluZQord291bGQgc2ltcGx5IGV4ZWN1dGUgYSAiYnJhIiBvciAiam1wIiB0aGF0IGp1bXBlZCB0byB0aGUgc2VsZWN0ZWQgZnVuY3Rpb24KK2VudHJ5LXBvaW50LgorCitGb3IgZXhhbXBsZSwgaWYgdGhlIDY4MDYwIGhhcmR3YXJlIHRvb2sgYSAiVW5pbXBsZW1lbnRlZCBJbnRlZ2VyIEluc3RydWN0aW9uIgorZXhjZXB0aW9uICh2ZWN0b3IgIzYxKSwgdGhlIG9wZXJhdGluZyBzeXN0ZW0gc2hvdWxkIGV4ZWN1dGUgc29tZXRoaW5nCitzaW1pbGFyIHRvOgorCisJYnJhCV8wNjBJU1BfVE9QKzEyOCswCisKKyhfMDYwSVNQX1RPUCBpcyB0aGUgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgIkNhbGwtb3V0IiBzZWN0aW9uOyB0aGUgIkNhbGwtb3V0Igorc2VjdGlvbiBpcyAxMjggYnl0ZXMgbG9uZzsgYW5kIHRoZSBVbmltcGxlbWVudGVkIEludGVnZXIgSVNQIGhhbmRsZXIgZW50cnkKK3BvaW50IGlzIGxvY2F0ZWQgMCBieXRlcyBmcm9tIHRoZSB0b3Agb2YgdGhlICJFbnRyeS1wb2ludCIgc2VjdGlvbi4pCisKK1RoZSB0aGlyZCBzZWN0aW9uIGlzIHRoZSBjb2RlIHNlY3Rpb24uIEFmdGVyIGVudGVyaW5nIHRocm91Z2ggYW4gIkVudHJ5LXBvaW50IiwKK3RoZSBlbnRyeSBjb2RlIGp1bXBzIHRvIHRoZSBhcHByb3ByaWF0ZSBlbXVsYXRpb24gY29kZSB3aXRoaW4gdGhlIGNvZGUgc2VjdGlvbi4KKworNjgwNjBJU1AgY2FsbC1vdXRzOiAoZGV0YWlscyBpbiBpc2tlbGV0b24ucykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisweDAwMDoJXzA2MF9yZWFsX2NoaworMHgwMDQ6CV8wNjBfcmVhbF9kaXZieXplcm8KKzB4MDA4OglfMDYwX3JlYWxfdHJhY2UKKzB4MDBjOglfMDYwX3JlYWxfYWNjZXNzCisweDAxMDoJXzA2MF9pc3BfZG9uZQorCisweDAxNDoJXzA2MF9yZWFsX2NhcworMHgwMTg6CV8wNjBfcmVhbF9jYXMyCisweDAxYzoJXzA2MF9yZWFsX2xvY2tfcGFnZQorMHgwMjA6CV8wNjBfcmVhbF91bmxvY2tfcGFnZQorCisweDAyNDoJKE1vdG9yb2xhIHJlc2VydmVkKQorMHgwMjg6CShNb3Rvcm9sYSByZXNlcnZlZCkKKzB4MDJjOgkoTW90b3JvbGEgcmVzZXJ2ZWQpCisweDAzMDoJKE1vdG9yb2xhIHJlc2VydmVkKQorMHgwMzQ6CShNb3Rvcm9sYSByZXNlcnZlZCkKKzB4MDM4OgkoTW90b3JvbGEgcmVzZXJ2ZWQpCisweDAzYzoJKE1vdG9yb2xhIHJlc2VydmVkKQorCisweDA0MDoJXzA2MF9pbWVtX3JlYWQKKzB4MDQ0OglfMDYwX2RtZW1fcmVhZAorMHgwNDg6CV8wNjBfZG1lbV93cml0ZQorMHgwNGM6CV8wNjBfaW1lbV9yZWFkX3dvcmQKKzB4MDUwOglfMDYwX2ltZW1fcmVhZF9sb25nCisweDA1NDoJXzA2MF9kbWVtX3JlYWRfYnl0ZQorMHgwNTg6CV8wNjBfZG1lbV9yZWFkX3dvcmQKKzB4MDVjOglfMDYwX2RtZW1fcmVhZF9sb25nCisweDA2MDoJXzA2MF9kbWVtX3dyaXRlX2J5dGUKKzB4MDY0OglfMDYwX2RtZW1fd3JpdGVfd29yZAorMHgwNjg6CV8wNjBfZG1lbV93cml0ZV9sb25nCisKKzB4MDZjOgkoTW90b3JvbGEgcmVzZXJ2ZWQpCisweDA3MDoJKE1vdG9yb2xhIHJlc2VydmVkKQorMHgwNzQ6CShNb3Rvcm9sYSByZXNlcnZlZCkKKzB4MDc4OgkoTW90b3JvbGEgcmVzZXJ2ZWQpCisweDA3YzoJKE1vdG9yb2xhIHJlc2VydmVkKQorCis2ODA2MElTUCBlbnRyeSBwb2ludHM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMHgwMDA6CV8wNjBfaXNwX3VuaW1wCisKKzB4MDA4OglfMDYwX2lzcF9jYXMKKzB4MDEwOglfMDYwX2lzcF9jYXMyCisweDAxODoJXzA2MF9pc3BfY2FzX2ZpbmlzaAorMHgwMjA6CV8wNjBfaXNwX2NhczJfZmluaXNoCisweDAyODoJXzA2MF9pc3BfY2FzX2lucmFuZ2UKKzB4MDMwOglfMDYwX2lzcF9jYXNfdGVybWluYXRlCisweDAzODoJXzA2MF9pc3BfY2FzX3Jlc3RhcnQKKworSW50ZWdyYXRpbmcgY2FzL2NhczI6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBpbnN0cnVjdGlvbnMgImNhczIiIGFuZCAiY2FzIiAod2hlbiB1c2VkIHdpdGggYSBtaXNhbGlnbmVkIGVmZmVjdGl2ZQorYWRkcmVzcykgdGFrZSB0aGUgVW5pbXBsZW1lbnRlZCBJbnRlZ2VyIEluc3RydWN0aW9uIGV4Y2VwdGlvbi4gV2hlbiB0aGUKKzA2MElTUCBpcyBpbnN0YWxsZWQgcHJvcGVybHksIHRoZXNlIGluc3RydWN0aW9ucyB3aWxsIGVudGVyIHRocm91Z2ggdGhlCitfMDYwX2lzcF91bmltcCgpIGVudHJ5IHBvaW50IG9mIHRoZSBJU1AuCisKK0FmdGVyIHRoZSAwNjBJU1AgZGVjb2RlcyB0aGUgaW5zdHJ1Y3Rpb24gdHlwZSBhbmQgZmV0Y2hlcyB0aGUgYXBwcm9wcmlhdGUKK2RhdGEgcmVnaXN0ZXJzLCBhbmQgQkVGT1JFIHRoZSBhY3R1YWwgZW11bGF0ZWQgdHJhbnNmZXJzIG9jY3VyLCB0aGUKK3BhY2thZ2UgY2FsbHMgZWl0aGVyIHRoZSAiQ2FsbC1vdXQiIF8wNjBfcmVhbF9jYXMoKSBvciBfMDYwX3JlYWxfY2FzMigpLgorSWYgdGhlIGVtdWxhdGlvbiBjb2RlIHByb3ZpZGVkIGJ5IHRoZSAwNjBJU1AgaXMgc3VmZmljaWVudCBmb3IgdGhlCitob3N0IHN5c3RlbSAoc2VlIGlzcC5zIHNvdXJjZSBjb2RlKSwgdGhlbiB0aGVzZSAiQ2FsbC1vdXQicyBzaG91bGQgYmUKK21hZGUsIGJ5IHRoZSBzeXN0ZW0gaW50ZWdyYXRvciwgdG8gcG9pbnQgZGlyZWN0bHkgYmFjayBpbnRvIHRoZSBwYWNrYWdlCit0aHJvdWdoIHRoZSAiRW50cnktcG9pbnQicyBfMDYwX2lzcF9jYXMoKSBvciBfMDYwX2lzcF9jYXMyKCkuCisKK09uZSBvdGhlciBuZWNlc3NhcnkgYWN0aW9uIGJ5IHRoZSBpbnRlZ3JhdG9yIGlzIHRvIHN1cHBseSB0aGUgcm91dGluZXMKK18wNjBfcmVhbF9sb2NrX3BhZ2UoKSBhbmQgXzA2MF9yZWFsX3VubG9ja19wYWdlKCkuIFRoZXNlIGZ1bmN0aW9ucyBhcmUKK2RlZmluZWQgZnVydGhlciBpbiBpc2tlbGV0b24ucyBhbmQgdGhlIDY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgU3BlY2lmaWNhdGlvbi4KKworSWYgdGhlICJjb3JlIiBlbXVsYXRpb24gcm91dGluZXMgb2YgZWl0aGVyICJjYXMiIG9yICJjYXMyIiBwZXJmb3JtIHNvbWUKK2FjdGlvbnMgd2hpY2ggYXJlIHRvbyBzeXN0ZW0tc3BlY2lmaWMsIHRoZW4gdGhlIHN5c3RlbSBpbnRlZ3JhdG9yIG11c3QKK3N1cHBseSBuZXcgZW11bGF0aW9uIGNvZGUuIFRoaXMgbmV3IGVtdWxhdGlvbiBjb2RlIHNob3VsZCByZXNpZGUgd2l0aGluCit0aGUgZnVuY3Rpb25zIF8wNjBfcmVhbF9jYXMoKSBvciBfMDYwX3JlYWxfY2FzMigpLiBXaGVuIHRoaXMgbmV3IGVtdWxhdGlvbgorY29kZSBoYXMgY29tcGxldGVkLCB0aGVuIGl0IHNob3VsZCByZS1lbnRlciB0aGUgMDYwSVNQIHBhY2thZ2UgdGhyb3VnaCB0aGUKKyJFbnRyeS1wb2ludCIgXzA2MF9pc3BfY2FzX2ZpbmlzaCgpIG9yIF8wNjBfaXNwX2NhczJfZmluaXNoKCkuCitUbyBzZWUgd2hhdCB0aGUgcmVnaXN0ZXIgc3RhdGUgaXMgdXBvbiBlbnRlcmluZyBfMDYwX3JlYWxfY2FzKCkgb3IKK18wNjBfcmVhbF9jYXMyKCkgYW5kIHdoYXQgaXQgc2hvdWxkIGJlIHVwb24gcmV0dXJuIHRvIHRoZSBwYWNrYWdlIHRocm91Z2gKK18wNjBfaXNwX2Nhc19maW5pc2goKSBvciBfMDYwX2lzcF9jYXMyX2ZpbmlzaCgpLCBwbGVhc2UgcmVmZXIgdG8gdGhlCitzb3VyY2UgY29kZSBpbiBpc3Aucy4KKworTWlzY2VsbGFuZW91czoKKy0tLS0tLS0tLS0tLS0tCisKK18wNjBfaXNwX3VuaW1wOgorLS0tLS0tLS0tLS0tLS0tLQorLSBkb2N1bWVudGVkIGluIDIuMiBpbiBzcGVjLgorLSBCYXNpYyBmbG93OgorCWV4Y2VwdGlvbiB0YWtlbiAtLS0+IGVudGVyIF8wNjBfaXNwX3VuaW1wICAgLS18CisJCQkJCQkgICAgICB8CisJCQkJCQkgICAgICB8CisgICAgICAgICAgICBtYXkgZXhpdCB0aHJvdWdoIF8wNjBfcmVhbF9pdHJhY2UgICAgPC0tLS18CisJCQkJCQkgIG9yICB8CisgICAgICAgICAgICBtYXkgZXhpdCB0aHJvdWdoIF8wNjBfcmVhbF9jaGsgICAgICAgPC0tLS18CisJCQkJCQkgIG9yICB8CisgICAgICAgICAgICBtYXkgZXhpdCB0aHJvdWdoIF8wNjBfcmVhbF9kaXZieXplcm8gPC0tLS18CisJCQkJCQkgIG9yICB8CisgICAgICAgICAgICBtYXkgZXhpdCB0aHJvdWdoIF8wNjBfaXNwX2RvbmUgICAgICAgPC0tLS18CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvaXNwLnNhIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2lzcC5zYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjg4ZDJhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2lzcC5zYQpAQCAtMCwwICsxLDM5MiBAQAorCS5sb25nCTB4NjBmZjAwMDAsMHgwMjM2MDAwMCwweDYwZmYwMDAwLDB4MTYyNjAwMDAKKwkubG9uZwkweDYwZmYwMDAwLDB4MTJkYzAwMDAsMHg2MGZmMDAwMCwweDExZWEwMDAwCisJLmxvbmcJMHg2MGZmMDAwMCwweDEwZGUwMDAwLDB4NjBmZjAwMDAsMHgxMmE0MDAwMAorCS5sb25nCTB4NjBmZjAwMDAsMHgxMjU2MDAwMCwweDYwZmYwMDAwLDB4MTIyYTAwMDAKKwkubG9uZwkweDUxZmM1MWZjLDB4NTFmYzUxZmMsMHg1MWZjNTFmYywweDUxZmM1MWZjCisJLmxvbmcJMHg1MWZjNTFmYywweDUxZmM1MWZjLDB4NTFmYzUxZmMsMHg1MWZjNTFmYworCS5sb25nCTB4NTFmYzUxZmMsMHg1MWZjNTFmYywweDUxZmM1MWZjLDB4NTFmYzUxZmMKKwkubG9uZwkweDUxZmM1MWZjLDB4NTFmYzUxZmMsMHg1MWZjNTFmYywweDUxZmM1MWZjCisJLmxvbmcJMHgyZjAwMjAzYSwweGZlZmM0ODdiLDB4MDkzMGZmZmYsMHhmZWY4MjAyZgorCS5sb25nCTB4MDAwNDRlNzQsMHgwMDA0MmYwMCwweDIwM2FmZWVhLDB4NDg3YjA5MzAKKwkubG9uZwkweGZmZmZmZWUyLDB4MjAyZjAwMDQsMHg0ZTc0MDAwNCwweDJmMDAyMDNhCisJLmxvbmcJMHhmZWQ4NDg3YiwweDA5MzBmZmZmLDB4ZmVjYzIwMmYsMHgwMDA0NGU3NAorCS5sb25nCTB4MDAwNDJmMDAsMHgyMDNhZmVjNiwweDQ4N2IwOTMwLDB4ZmZmZmZlYjYKKwkubG9uZwkweDIwMmYwMDA0LDB4NGU3NDAwMDQsMHgyZjAwMjAzYSwweGZlYjQ0ODdiCisJLmxvbmcJMHgwOTMwZmZmZiwweGZlYTAyMDJmLDB4MDAwNDRlNzQsMHgwMDA0MmYwMAorCS5sb25nCTB4MjAzYWZlYTIsMHg0ODdiMDkzMCwweGZmZmZmZThhLDB4MjAyZjAwMDQKKwkubG9uZwkweDRlNzQwMDA0LDB4MmYwMDIwM2EsMHhmZTkwNDg3YiwweDA5MzBmZmZmCisJLmxvbmcJMHhmZTc0MjAyZiwweDAwMDQ0ZTc0LDB4MDAwNDJmMDAsMHgyMDNhZmU3ZQorCS5sb25nCTB4NDg3YjA5MzAsMHhmZmZmZmU1ZSwweDIwMmYwMDA0LDB4NGU3NDAwMDQKKwkubG9uZwkweDJmMDAyMDNhLDB4ZmU2YzQ4N2IsMHgwOTMwZmZmZiwweGZlNDgyMDJmCisJLmxvbmcJMHgwMDA0NGU3NCwweDAwMDQyZjAwLDB4MjAzYWZlNzYsMHg0ODdiMDkzMAorCS5sb25nCTB4ZmZmZmZlMzIsMHgyMDJmMDAwNCwweDRlNzQwMDA0LDB4MmYwMDIwM2EKKwkubG9uZwkweGZlNjQ0ODdiLDB4MDkzMGZmZmYsMHhmZTFjMjAyZiwweDAwMDQ0ZTc0CisJLmxvbmcJMHgwMDA0MmYwMCwweDIwM2FmZTUyLDB4NDg3YjA5MzAsMHhmZmZmZmUwNgorCS5sb25nCTB4MjAyZjAwMDQsMHg0ZTc0MDAwNCwweDJmMDAyMDNhLDB4ZmU0MDQ4N2IKKwkubG9uZwkweDA5MzBmZmZmLDB4ZmRmMDIwMmYsMHgwMDA0NGU3NCwweDAwMDQyZjAwCisJLmxvbmcJMHgyMDNhZmUyZSwweDQ4N2IwOTMwLDB4ZmZmZmZkZGEsMHgyMDJmMDAwNAorCS5sb25nCTB4NGU3NDAwMDQsMHgyZjAwMjAzYSwweGZlMWM0ODdiLDB4MDkzMGZmZmYKKwkubG9uZwkweGZkYzQyMDJmLDB4MDAwNDRlNzQsMHgwMDA0MmYwMCwweDIwM2FmZTBhCisJLmxvbmcJMHg0ODdiMDkzMCwweGZmZmZmZGFlLDB4MjAyZjAwMDQsMHg0ZTc0MDAwNAorCS5sb25nCTB4MmYwMDIwM2EsMHhmZGY4NDg3YiwweDA5MzBmZmZmLDB4ZmQ5ODIwMmYKKwkubG9uZwkweDAwMDQ0ZTc0LDB4MDAwNDJmMDAsMHgyMDNhZmRlNiwweDQ4N2IwOTMwCisJLmxvbmcJMHhmZmZmZmQ4MiwweDIwMmYwMDA0LDB4NGU3NDAwMDQsMHgyZjAwMjAzYQorCS5sb25nCTB4ZmRkNDQ4N2IsMHgwOTMwZmZmZiwweGZkNmMyMDJmLDB4MDAwNDRlNzQKKwkubG9uZwkweDAwMDQyZjAwLDB4MjAzYWZkYzIsMHg0ODdiMDkzMCwweGZmZmZmZDU2CisJLmxvbmcJMHgyMDJmMDAwNCwweDRlNzQwMDA0LDB4NGU1NmZmYTAsMHg0OGVlM2ZmZgorCS5sb25nCTB4ZmZjMDJkNTYsMHhmZmY4MDgyZSwweDAwMDUwMDA0LDB4NjYwODRlNjgKKwkubG9uZwkweDJkNDhmZmZjLDB4NjAwODQxZWUsMHgwMDBjMmQ0OCwweGZmZmM0MjJlCisJLmxvbmcJMHhmZmFhM2Q2ZSwweDAwMDRmZmE4LDB4MmQ2ZTAwMDYsMHhmZmE0MjA2ZQorCS5sb25nCTB4ZmZhNDU4YWUsMHhmZmE0NjFmZiwweGZmZmZmZjI2LDB4MmQ0MGZmYTAKKwkubG9uZwkweDA4MDAwMDFlLDB4Njc2ODA4MDAsMHgwMDE2NjYyOCwweDYxZmYwMDAwCisJLmxvbmcJMHgwY2IwMDgyZSwweDAwMDUwMDA0LDB4NjcwMDAwYWMsMHgwODJlMDAwMgorCS5sb25nCTB4ZmZhYTY3MDAsMHgwMGEyMDgyZSwweDAwMDcwMDA0LDB4NjYwMDAxODYKKwkubG9uZwkweDYwMDAwMWIwLDB4NjFmZjAwMDAsMHgwYTI4MDgyZSwweDAwMDJmZmFhCisJLmxvbmcJMHg2NjBlMDgyZSwweDAwMDVmZmFhLDB4NjYwMDAxMGEsMHg2MDAwMDA3OAorCS5sb25nCTB4MDgyZTAwMDUsMHgwMDA0NjdlYSwweDA4MmUwMDA1LDB4ZmZhYTY2MDAKKwkubG9uZwkweDAxMjY0YTJlLDB4MDAwNDZiMDAsMHgwMTRjNjAwMCwweDAxNzYwODAwCisJLmxvbmcJMHgwMDE4NjcwYSwweDYxZmYwMDAwLDB4MDdhZTYwMDAsMHgwMDRhMDgwMAorCS5sb25nCTB4MDAxYjY3MzAsMHg0ODQwMGMwMCwweDAwZmM2NzBhLDB4NjFmZjAwMDAKKwkubG9uZwkweDBlOTI2MDAwLDB4MDAzMjIwNmUsMHhmZmE0NTRhZSwweGZmYTQ2MWZmCisJLmxvbmcJMHhmZmZmZmU2OCwweDRhODE2NjAwLDB4MDE5ODYxZmYsMHgwMDAwMGQyMAorCS5sb25nCTB4NjAwMDAwMTQsMHg2MWZmMDAwMCwweDA4YzQwYzJlLDB4MDAxMGZmYWEKKwkubG9uZwkweDY2MDAwMDA0LDB4NjA1YzFkNmUsMHhmZmE5MDAwNSwweDA4MmUwMDA1CisJLmxvbmcJMHgwMDA0NjYwNiwweDIwNmVmZmZjLDB4NGU2MDRjZWUsMHgzZmZmZmZjMAorCS5sb25nCTB4MDgyZTAwMDcsMHgwMDA0NjYxMiwweDJkNmVmZmE0LDB4MDAwNjJjYWUKKwkubG9uZwkweGZmZjg0ZTVlLDB4NjBmZmZmZmYsMHhmZDYyMmQ2ZSwweGZmZjhmZmZjCisJLmxvbmcJMHgzZDZlMDAwNCwweDAwMDAyZDZlLDB4MDAwNjAwMDgsMHgyZDZlZmZhNAorCS5sb25nCTB4MDAwMjNkN2MsMHgyMDI0MDAwNiwweDU5OGU0ZTVlLDB4NjBmZmZmZmYKKwkubG9uZwkweGZkMGUxZDZlLDB4ZmZhOTAwMDUsMHg0Y2VlM2ZmZiwweGZmYzAzY2FlCisJLmxvbmcJMHgwMDA0MmQ2ZSwweDAwMDYwMDA4LDB4MmQ2ZWZmYTQsMHgwMDAyM2Q3YworCS5sb25nCTB4MjAxODAwMDYsMHgyYzZlZmZmOCwweGRmZmMwMDAwLDB4MDA2MDYwZmYKKwkubG9uZwkweGZmZmZmY2IwLDB4MWQ2ZWZmYTksMHgwMDA1NGNlZSwweDNmZmZmZmMwCisJLmxvbmcJMHgzY2FlMDAwNCwweDJkNmUwMDA2LDB4MDAwODJkNmUsMHhmZmE0MDAwMgorCS5sb25nCTB4M2Q3YzIwMTQsMHgwMDA2MmM2ZSwweGZmZjhkZmZjLDB4MDAwMDAwNjAKKwkubG9uZwkweDYwZmZmZmZmLDB4ZmM5NDFkNmUsMHhmZmE5MDAwNSwweDRjZWUzZmZmCisJLmxvbmcJMHhmZmMwMmQ2ZSwweDAwMDYwMDBjLDB4M2Q3YzIwMTQsMHgwMDBhMmQ2ZQorCS5sb25nCTB4ZmZhNDAwMDYsMHgyYzZlZmZmOCwweGRmZmMwMDAwLDB4MDA2NDYwZmYKKwkubG9uZwkweGZmZmZmYzY2LDB4MWQ2ZWZmYTksMHgwMDA1NGNlZSwweDNmZmZmZmMwCisJLmxvbmcJMHgyZDZlMDAwNiwweDAwMGMzZDdjLDB4MjAyNDAwMGEsMHgyZDZlZmZhNAorCS5sb25nCTB4MDAwNjJjNmUsMHhmZmY4ZGZmYywweDAwMDAwMDY0LDB4NjBmZmZmZmYKKwkubG9uZwkweGZjNGUxZDZlLDB4ZmZhOTAwMDUsMHg0Y2VlM2ZmZiwweGZmYzAzZDdjCisJLmxvbmcJMHgwMGY0MDAwZSwweDJkNmVmZmE0LDB4MDAwYTNkNmUsMHgwMDA0MDAwOAorCS5sb25nCTB4MmM2ZWZmZjgsMHhkZmZjMDAwMCwweDAwNjg2MGZmLDB4ZmZmZmZjNGMKKwkubG9uZwkweDJjODgyZDQwLDB4ZmZmYzRmZWUsMHhmZmMwNGNkZiwweDdmZmYyZjJmCisJLmxvbmcJMHgwMDBjMmY2ZiwweDAwMDQwMDEwLDB4MmY2ZjAwMGMsMHgwMDA0MmY2ZgorCS5sb25nCTB4MDAwODAwMGMsMHgyZjVmMDAwNCwweDNmN2M0MDA4LDB4MDAwNjYwMjgKKwkubG9uZwkweDRjZWUzZmZmLDB4ZmZjMDRlNWUsMHg1MTRmMmVhZiwweDAwMDgzZjZmCisJLmxvbmcJMHgwMDBjMDAwNCwweDNmN2M0MDA4LDB4MDAwNjJmNmYsMHgwMDAyMDAwOAorCS5sb25nCTB4MmY3YzA5NDIsMHg4MDAxMDAwYywweDA4MTcwMDA1LDB4NjcwNjA4ZWYKKwkubG9uZwkweDAwMDIwMDBkLDB4NjBmZmZmZmYsMHhmYmNjMGMyZSwweDAwNDBmZmFhCisJLmxvbmcJMHg2NjBjNDI4MCwweDEwMmVmZmFiLDB4MmRhZWZmYWMsMHgwY2UwNGU3NQorCS5sb25nCTB4MjA0MDMwMmUsMHhmZmEwMzIwMCwweDAyNDAwMDNmLDB4MDI4MTAwMDAKKwkubG9uZwkweDAwMDczMDNiLDB4MDIwYTRlZmIsMHgwMDA2NGFmYywweDAwNDAwMDAwCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwODAKKwkubG9uZwkweDAwODYwMDhjLDB4MDA5MjAwOTgsMHgwMDllMDBhNCwweDAwYWEwMGIwCisJLmxvbmcJMHgwMGNlMDBlYywweDAxMGEwMTI4LDB4MDE0NjAxNjQsMHgwMTgyMDE5NgorCS5sb25nCTB4MDFiNDAxZDIsMHgwMWYwMDIwZSwweDAyMmMwMjRhLDB4MDI2ODAyN2MKKwkubG9uZwkweDAyOWEwMmI4LDB4MDJkNjAyZjQsMHgwMzEyMDMzMCwweDAzNGUwMzZjCisJLmxvbmcJMHgwMzZjMDM2YywweDAzNmMwMzZjLDB4MDM2YzAzNmMsMHgwMzZjMDNkNgorCS5sb25nCTB4MDNmMDA0MGEsMHgwNDJhMDNjYSwweDAwMDAwMDAwLDB4MDAwMDIwNmUKKwkubG9uZwkweGZmZTA0ZTc1LDB4MjA2ZWZmZTQsMHg0ZTc1MjA2ZSwweGZmZTg0ZTc1CisJLmxvbmcJMHgyMDZlZmZlYywweDRlNzUyMDZlLDB4ZmZmMDRlNzUsMHgyMDZlZmZmNAorCS5sb25nCTB4NGU3NTIwNmUsMHhmZmY4NGU3NSwweDIwNmVmZmZjLDB4NGU3NTIwMDgKKwkubG9uZwkweDIwNmVmZmUwLDB4ZDA4ODJkNDAsMHhmZmUwMmQ0OCwweGZmYWMxZDdjCisJLmxvbmcJMHgwMDAwZmZhYiwweDFkN2MwMDQwLDB4ZmZhYTRlNzUsMHgyMDA4MjA2ZQorCS5sb25nCTB4ZmZlNGQwODgsMHgyZDQwZmZlNCwweDJkNDhmZmFjLDB4MWQ3YzAwMDEKKwkubG9uZwkweGZmYWIxZDdjLDB4MDA0MGZmYWEsMHg0ZTc1MjAwOCwweDIwNmVmZmU4CisJLmxvbmcJMHhkMDg4MmQ0MCwweGZmZTgyZDQ4LDB4ZmZhYzFkN2MsMHgwMDAyZmZhYgorCS5sb25nCTB4MWQ3YzAwNDAsMHhmZmFhNGU3NSwweDIwMDgyMDZlLDB4ZmZlY2QwODgKKwkubG9uZwkweDJkNDBmZmVjLDB4MmQ0OGZmYWMsMHgxZDdjMDAwMywweGZmYWIxZDdjCisJLmxvbmcJMHgwMDQwZmZhYSwweDRlNzUyMDA4LDB4MjA2ZWZmZjAsMHhkMDg4MmQ0MAorCS5sb25nCTB4ZmZmMDJkNDgsMHhmZmFjMWQ3YywweDAwMDRmZmFiLDB4MWQ3YzAwNDAKKwkubG9uZwkweGZmYWE0ZTc1LDB4MjAwODIwNmUsMHhmZmY0ZDA4OCwweDJkNDBmZmY0CisJLmxvbmcJMHgyZDQ4ZmZhYywweDFkN2MwMDA1LDB4ZmZhYjFkN2MsMHgwMDQwZmZhYQorCS5sb25nCTB4NGU3NTIwMDgsMHgyMDZlZmZmOCwweGQwODgyZDQwLDB4ZmZmODJkNDgKKwkubG9uZwkweGZmYWMxZDdjLDB4MDAwNmZmYWIsMHgxZDdjMDA0MCwweGZmYWE0ZTc1CisJLmxvbmcJMHgxZDdjMDAwNCwweGZmYWEyMDA4LDB4MjA2ZWZmZmMsMHhkMDg4MmQ0MAorCS5sb25nCTB4ZmZmYzRlNzUsMHgyMDJlZmZlMCwweDJkNDBmZmFjLDB4OTA4ODJkNDAKKwkubG9uZwkweGZmZTAyMDQwLDB4MWQ3YzAwMDAsMHhmZmFiMWQ3YywweDAwNDBmZmFhCisJLmxvbmcJMHg0ZTc1MjAyZSwweGZmZTQyZDQwLDB4ZmZhYzkwODgsMHgyZDQwZmZlNAorCS5sb25nCTB4MjA0MDFkN2MsMHgwMDAxZmZhYiwweDFkN2MwMDQwLDB4ZmZhYTRlNzUKKwkubG9uZwkweDIwMmVmZmU4LDB4MmQ0MGZmYWMsMHg5MDg4MmQ0MCwweGZmZTgyMDQwCisJLmxvbmcJMHgxZDdjMDAwMiwweGZmYWIxZDdjLDB4MDA0MGZmYWEsMHg0ZTc1MjAyZQorCS5sb25nCTB4ZmZlYzJkNDAsMHhmZmFjOTA4OCwweDJkNDBmZmVjLDB4MjA0MDFkN2MKKwkubG9uZwkweDAwMDNmZmFiLDB4MWQ3YzAwNDAsMHhmZmFhNGU3NSwweDIwMmVmZmYwCisJLmxvbmcJMHgyZDQwZmZhYywweDkwODgyZDQwLDB4ZmZmMDIwNDAsMHgxZDdjMDAwNAorCS5sb25nCTB4ZmZhYjFkN2MsMHgwMDQwZmZhYSwweDRlNzUyMDJlLDB4ZmZmNDJkNDAKKwkubG9uZwkweGZmYWM5MDg4LDB4MmQ0MGZmZjQsMHgyMDQwMWQ3YywweDAwMDVmZmFiCisJLmxvbmcJMHgxZDdjMDA0MCwweGZmYWE0ZTc1LDB4MjAyZWZmZjgsMHgyZDQwZmZhYworCS5sb25nCTB4OTA4ODJkNDAsMHhmZmY4MjA0MCwweDFkN2MwMDA2LDB4ZmZhYjFkN2MKKwkubG9uZwkweDAwNDBmZmFhLDB4NGU3NTFkN2MsMHgwMDA4ZmZhYSwweDIwMmVmZmZjCisJLmxvbmcJMHg5MDg4MmQ0MCwweGZmZmMyMDQwLDB4NGU3NTIwNmUsMHhmZmE0NTRhZQorCS5sb25nCTB4ZmZhNDYxZmYsMHhmZmZmZjlkNCwweDRhODE2NmZmLDB4ZmZmZmZkMDQKKwkubG9uZwkweDMwNDBkMWVlLDB4ZmZlMDRlNzUsMHgyMDZlZmZhNCwweDU0YWVmZmE0CisJLmxvbmcJMHg2MWZmZmZmZiwweGY5YjY0YTgxLDB4NjZmZmZmZmYsMHhmY2U2MzA0MAorCS5sb25nCTB4ZDFlZWZmZTQsMHg0ZTc1MjA2ZSwweGZmYTQ1NGFlLDB4ZmZhNDYxZmYKKwkubG9uZwkweGZmZmZmOTk4LDB4NGE4MTY2ZmYsMHhmZmZmZmNjOCwweDMwNDBkMWVlCisJLmxvbmcJMHhmZmU4NGU3NSwweDIwNmVmZmE0LDB4NTRhZWZmYTQsMHg2MWZmZmZmZgorCS5sb25nCTB4Zjk3YTRhODEsMHg2NmZmZmZmZiwweGZjYWEzMDQwLDB4ZDFlZWZmZWMKKwkubG9uZwkweDRlNzUyMDZlLDB4ZmZhNDU0YWUsMHhmZmE0NjFmZiwweGZmZmZmOTVjCisJLmxvbmcJMHg0YTgxNjZmZiwweGZmZmZmYzhjLDB4MzA0MGQxZWUsMHhmZmYwNGU3NQorCS5sb25nCTB4MjA2ZWZmYTQsMHg1NGFlZmZhNCwweDYxZmZmZmZmLDB4ZjkzZTRhODEKKwkubG9uZwkweDY2ZmZmZmZmLDB4ZmM2ZTMwNDAsMHhkMWVlZmZmNCwweDRlNzUyMDZlCisJLmxvbmcJMHhmZmE0NTRhZSwweGZmYTQ2MWZmLDB4ZmZmZmY5MjAsMHg0YTgxNjZmZgorCS5sb25nCTB4ZmZmZmZjNTAsMHgzMDQwZDFlZSwweGZmZjg0ZTc1LDB4MjA2ZWZmYTQKKwkubG9uZwkweDU0YWVmZmE0LDB4NjFmZmZmZmYsMHhmOTAyNGE4MSwweDY2ZmZmZmZmCisJLmxvbmcJMHhmYzMyMzA0MCwweGQxZWVmZmZjLDB4NGU3NTJmMDEsMHgyMDZlZmZhNAorCS5sb25nCTB4NTRhZWZmYTQsMHg2MWZmZmZmZiwweGY4ZTI0YTgxLDB4NjZmZmZmZmYKKwkubG9uZwkweGZjMTIyMjFmLDB4MjA3NjE0ZTAsMHgwODAwMDAwOCwweDY3MGU0OGU3CisJLmxvbmcJMHgzYzAwMmEwMCwweDI2MDg2MGZmLDB4MDAwMDAwZWMsMHgyZjAyMjIwMAorCS5sb25nCTB4ZTk1OTAyNDEsMHgwMDBmMjIzNiwweDE0YzAwODAwLDB4MDAwYjY2MDIKKwkubG9uZwkweDQ4YzEyNDAwLDB4ZWY1YTAyODIsMHgwMDAwMDAwMywweGU1YTk0OWMwCisJLmxvbmcJMHhkMDgxZDFjMCwweDI0MWY0ZTc1LDB4MWQ3YzAwODAsMHhmZmFhMjA2ZQorCS5sb25nCTB4ZmZhNDRlNzUsMHgyMDZlZmZhNCwweDU0YWVmZmE0LDB4NjFmZmZmZmYKKwkubG9uZwkweGY4N2E0YTgxLDB4NjZmZmZmZmYsMHhmYmFhMzA0MCwweDRlNzUyMDZlCisJLmxvbmcJMHhmZmE0NThhZSwweGZmYTQ2MWZmLDB4ZmZmZmY4NzYsMHg0YTgxNjZmZgorCS5sb25nCTB4ZmZmZmZiOTAsMHgyMDQwNGU3NSwweDIwNmVmZmE0LDB4NTRhZWZmYTQKKwkubG9uZwkweDYxZmZmZmZmLDB4Zjg0NjRhODEsMHg2NmZmZmZmZiwweGZiNzYzMDQwCisJLmxvbmcJMHhkMWVlZmZhNCwweDU1ODg0ZTc1LDB4MjA2ZWZmYTQsMHg1NGFlZmZhNAorCS5sb25nCTB4NjFmZmZmZmYsMHhmODI2NGE4MSwweDY2ZmZmZmZmLDB4ZmI1NjIwNmUKKwkubG9uZwkweGZmYTQ1NTg4LDB4MDgwMDAwMDgsMHg2NzBlNDhlNywweDNjMDAyYTAwCisJLmxvbmcJMHgyNjA4NjBmZiwweDAwMDAwMDMwLDB4MmYwMjIyMDAsMHhlOTU5MDI0MQorCS5sb25nCTB4MDAwZjIyMzYsMHgxNGMwMDgwMCwweDAwMGI2NjAyLDB4NDhjMTI0MDAKKwkubG9uZwkweGVmNWEwMjgyLDB4MDAwMDAwMDMsMHhlNWE5NDljMCwweGQwODFkMWMwCisJLmxvbmcJMHgyNDFmNGU3NSwweDA4MDUwMDA2LDB4NjcwNDQyODIsMHg2MDE2ZTljNQorCS5sb25nCTB4MjQwNDI0MzYsMHgyNGMwMDgwNSwweDAwMGI2NjAyLDB4NDhjMmU5YzUKKwkubG9uZwkweDA1NDJlMWFhLDB4MDgwNTAwMDcsMHg2NzAyNDI4MywweGU5YzUwNjgyCisJLmxvbmcJMHgwYzAwMDAwMiwweDZkMzQ2NzE4LDB4MjA2ZWZmYTQsMHg1OGFlZmZhNAorCS5sb25nCTB4NjFmZmZmZmYsMHhmN2FjNGE4MSwweDY2ZmZmZmZmLDB4ZmFjNjYwMTgKKwkubG9uZwkweDIwNmVmZmE0LDB4NTRhZWZmYTQsMHg2MWZmZmZmZiwweGY3N2U0YTgxCisJLmxvbmcJMHg2NmZmZmZmZiwweGZhYWU0OGMwLDB4ZDY4MGU5YzUsMHgwNzgyNjcwMAorCS5sb25nCTB4MDA2YTBjMDAsMHgwMDAyNmQzNCwweDY3MTgyMDZlLDB4ZmZhNDU4YWUKKwkubG9uZwkweGZmYTQ2MWZmLDB4ZmZmZmY3NmEsMHg0YTgxNjZmZiwweGZmZmZmYTg0CisJLmxvbmcJMHg2MDFjMjA2ZSwweGZmYTQ1NGFlLDB4ZmZhNDYxZmYsMHhmZmZmZjczYworCS5sb25nCTB4NGE4MTY2ZmYsMHhmZmZmZmE2YywweDQ4YzA2MDAyLDB4NDI4MDI4MDAKKwkubG9uZwkweDA4MDUwMDAyLDB4NjcxMjIwNDMsMHg2MWZmZmZmZiwweGY3NzY0YTgxCisJLmxvbmcJMHg2NjI0ZDA4MiwweGQwODQ2MDE2LDB4ZDY4MjIwNDMsMHg2MWZmZmZmZgorCS5sb25nCTB4Zjc2MjRhODEsMHg2NjEwZDA4NCwweDYwMDRkNjgyLDB4MjAwMzIwNDAKKwkubG9uZwkweDRjZGYwMDNjLDB4NGU3NTIwNDMsMHgyMDNjMDEwMSwweDAwMDE2MGZmCisJLmxvbmcJMHhmZmZmZjlmMCwweDMyMmVmZmEwLDB4MTAwMTAyNDAsMHgwMDA3MjA3NgorCS5sb25nCTB4MDRlMGQwZWUsMHhmZmEyMDgwMSwweDAwMDc2NzAwLDB4MDA4YzMwMDEKKwkubG9uZwkweGVmNTgwMjQwLDB4MDAwNzIwMzYsMHgwNGMwMDgwMSwweDAwMDY2NzUyCisJLmxvbmcJMHgyNDAwMjQ0OCwweGUxOWEyMDAyLDB4NjFmZmZmZmYsMHhmNzFjNGE4MQorCS5sb25nCTB4NjYwMDAwZmMsMHg1NDRhMjA0YSwweGUxOWEyMDAyLDB4NjFmZmZmZmYKKwkubG9uZwkweGY3MDg0YTgxLDB4NjYwMDAwZTgsMHg1NDRhMjA0YSwweGUxOWEyMDAyCisJLmxvbmcJMHg2MWZmZmZmZiwweGY2ZjQ0YTgxLDB4NjYwMDAwZDQsMHg1NDRhMjA0YQorCS5sb25nCTB4ZTE5YTIwMDIsMHg2MWZmZmZmZiwweGY2ZTA0YTgxLDB4NjYwMDAwYzAKKwkubG9uZwkweDRlNzUyNDAwLDB4MjQ0OGUwNDgsMHg2MWZmZmZmZiwweGY2Y2M0YTgxCisJLmxvbmcJMHg2NjAwMDBhYywweDU0NGEyMDRhLDB4MjAwMjYxZmYsMHhmZmZmZjZiYQorCS5sb25nCTB4NGE4MTY2MDAsMHgwMDlhNGU3NSwweDA4MDEwMDA2LDB4Njc1YzI0NDgKKwkubG9uZwkweDYxZmZmZmZmLDB4ZjY2MjRhODEsMHg2NjAwMDA5MiwweDI0MDA1NDRhCisJLmxvbmcJMHgyMDRhNjFmZiwweGZmZmZmNjUwLDB4NGE4MTY2MDAsMHgwMDgwZTE0YQorCS5sb25nCTB4MTQwMDU0NGEsMHgyMDRhNjFmZiwweGZmZmZmNjNjLDB4NGE4MTY2MDAKKwkubG9uZwkweDAwNmNlMThhLDB4MTQwMDU0NGEsMHgyMDRhNjFmZiwweGZmZmZmNjI4CisJLmxvbmcJMHg0YTgxNjYwMCwweDAwNThlMThhLDB4MTQwMDEyMmUsMHhmZmEwZTIwOQorCS5sb25nCTB4MDI0MTAwMDcsMHgyZDgyMTRjMCwweDRlNzUyNDQ4LDB4NjFmZmZmZmYKKwkubG9uZwkweGY2MDY0YTgxLDB4NjYwMDAwMzYsMHgyNDAwNTQ0YSwweDIwNGE2MWZmCisJLmxvbmcJMHhmZmZmZjVmNCwweDRhODE2NjAwLDB4MDAyNGUxNGEsMHgxNDAwMTIyZQorCS5sb25nCTB4ZmZhMGUyMDksMHgwMjQxMDAwNywweDNkODIxNGMyLDB4NGU3NTIwNGEKKwkubG9uZwkweDIwM2MwMGExLDB4MDAwMTYwZmYsMHhmZmZmZjhhOCwweDIwNGEyMDNjCisJLmxvbmcJMHgwMTIxMDAwMSwweDYwZmZmZmZmLDB4Zjg5YTYxZmYsMHhmZmZmZjkxNAorCS5sb25nCTB4MTAyZWZmYTIsMHhlOTE4MDI0MCwweDAwMGYyNDM2LDB4MDRjMDBjMmUKKwkubG9uZwkweDAwMDJmZmEwLDB4NmQ1MDY3MjgsMHgyNDQ4NjFmZiwweGZmZmZmNWM0CisJLmxvbmcJMHg0YTgxNjYwMCwweDAwOWUyNjAwLDB4NTg4YTIwNGEsMHg2MWZmZmZmZgorCS5sb25nCTB4ZjViMjRhODEsMHg2NjAwMDA4YywweDIyMDAyMDAzLDB4NjAwMDAwNDgKKwkubG9uZwkweDI0NDg2MWZmLDB4ZmZmZmY1OWMsMHg0YTgxNjYwMCwweDAwNzYzMjAwCisJLmxvbmcJMHg0ODQwNDhjMCwweDQ4YzEwODJlLDB4MDAwN2ZmYTIsMHg2NjAwMDAyOAorCS5sb25nCTB4NDhjMjYwMDAsMHgwMDIyMjQ0OCwweDYxZmZmZmZmLDB4ZjU2MDRhODEKKwkubG9uZwkweDY2MDAwMDVlLDB4MTIwMGUwNDgsMHg0OWMwNDljMSwweDA4MmUwMDA3CisJLmxvbmcJMHhmZmEyNjYwMiwweDQ5YzI5NDgwLDB4NDJjMzAyMDMsMHgwMDA0OTI4MAorCS5sb25nCTB4YjI4MjQyYzQsMHg4NjA0MDIwMywweDAwMDUzODJlLDB4ZmZhODAyMDQKKwkubG9uZwkweDAwMWE4ODAzLDB4M2Q0NGZmYTgsMHgwODJlMDAwMywweGZmYTI2NjAyCisJLmxvbmcJMHg0ZTc1MDgwNCwweDAwMDA2NjAyLDB4NGU3NTFkN2MsMHgwMDEwZmZhYQorCS5sb25nCTB4NGU3NTIwNGEsMHgyMDNjMDEwMSwweDAwMDE2MGZmLDB4ZmZmZmY3YzQKKwkubG9uZwkweDIwNGEyMDNjLDB4MDE0MTAwMDEsMHg2MGZmZmZmZiwweGY3YjYxMDJlCisJLmxvbmcJMHhmZmExMDIwMCwweDAwMzg2NjAwLDB4MDIwODEwMmUsMHhmZmExMDI0MAorCS5sb25nCTB4MDAwNzJlMzYsMHgwNGMwNjcwMCwweDAwYzAxMDJlLDB4ZmZhMzEyMmUKKwkubG9uZwkweGZmYTIwMjQwLDB4MDAwN2U4MDksMHgwMjQxMDAwNywweDNkNDBmZmIyCisJLmxvbmcJMHgzZDQxZmZiNCwweDJhMzYwNGMwLDB4MmMzNjE0YzAsMHgwODJlMDAwMworCS5sb25nCTB4ZmZhMjY3MWEsMHg0YTg3NWRlZSwweGZmYjA2YTAyLDB4NDQ4NzRhODUKKwkubG9uZwkweDVkZWVmZmIxLDB4NmEwODQ0ZmMsMHgwMDAwNDA4NiwweDQwODU0YTg1CisJLmxvbmcJMHg2NjE2NGE4NiwweDY3MDAwMDQ4LDB4YmU4NjYzMDYsMHhjYjQ2NjAwMAorCS5sb25nCTB4MDAxMjRjNDcsMHg2MDA1NjAwYSwweGJlODU2MzRlLDB4NjFmZjAwMDAKKwkubG9uZwkweDAwNjgwODJlLDB4MDAwM2ZmYTIsMHg2NzI0NGEyZSwweGZmYjE2NzAyCisJLmxvbmcJMHg0NDg1MTAyZSwweGZmYjBiMTJlLDB4ZmZiMTY3MGMsMHgwYzg2ODAwMAorCS5sb25nCTB4MDAwMDYyMjYsMHg0NDg2NjAwNiwweDA4MDYwMDFmLDB4NjYxYzQ0ZWUKKwkubG9uZwkweGZmYTg0YTg2LDB4NDJlZWZmYTgsMHgzMDJlZmZiMiwweDMyMmVmZmI0CisJLmxvbmcJMHgyZDg1MDRjMCwweDJkODYxNGMwLDB4NGU3NTA4ZWUsMHgwMDAxZmZhOQorCS5sb25nCTB4MDhhZTAwMDAsMHhmZmE5NGU3NSwweDAyMmUwMDFlLDB4ZmZhOTAwMmUKKwkubG9uZwkweDAwMjBmZmFhLDB4NGU3NTBjODcsMHgwMDAwZmZmZiwweDYyMWU0MjgxCisJLmxvbmcJMHg0ODQ1NDg0NiwweDNhMDY4YWM3LDB4MzIwNTQ4NDYsMHgzYTA2OGFjNworCS5sb25nCTB4NDg0MTMyMDUsMHg0MjQ1NDg0NSwweDJjMDE0ZTc1LDB4NDJhZWZmYmMKKwkubG9uZwkweDQyMmVmZmI2LDB4NDI4MTA4MDcsMHgwMDFmNjYwZSwweDUyYWVmZmJjCisJLmxvbmcJMHhlMzhmZTM4ZSwweGUzOTU2MDAwLDB4ZmZlZTI2MDcsMHgyNDA1NDg0MgorCS5sb25nCTB4NDg0M2I0NDMsMHg2NjA2MzIzYywweGZmZmY2MDBhLDB4MjIwNTgyYzMKKwkubG9uZwkweDAyODEwMDAwLDB4ZmZmZjJmMDYsMHg0MjQ2NDg0NiwweDI2MDcyNDAxCisJLmxvbmcJMHhjNGM3NDg0MywweGM2YzEyODA1LDB4OTg4MzQ4NDQsMHgzMDA0MzgwNgorCS5sb25nCTB4NGE0MDY2MDAsMHgwMDBhYjQ4NCwweDYzMDQ1MzgxLDB4NjBkZTJmMDUKKwkubG9uZwkweDJjMDE0ODQ2LDB4MmEwNzYxZmYsMHgwMDAwMDA2YSwweDI0MDUyNjA2CisJLmxvbmcJMHgyYTFmMmMxZiwweDljODM5YjgyLDB4NjRmZjAwMDAsMHgwMDFhNTM4MQorCS5sb25nCTB4NDI4MjI2MDcsMHg0ODQzNDI0MywweGRjODNkYjgyLDB4MjYwNzQyNDMKKwkubG9uZwkweDQ4NDNkYTgzLDB4NGEyZWZmYjYsMHg2NjE2M2Q0MSwweGZmYjg0MjgxCisJLmxvbmcJMHg0ODQ1NDg0NiwweDNhMDY0MjQ2LDB4NTBlZWZmYjYsMHg2MDAwZmY2YworCS5sb25nCTB4M2Q0MWZmYmEsMHgzYzA1NDg0NiwweDQ4NDUyZTJlLDB4ZmZiYzY3MGEKKwkubG9uZwkweDUzODdlMjhkLDB4ZTI5NjUxY2YsMHhmZmZhMmEwNiwweDJjMmVmZmI4CisJLmxvbmcJMHg0ZTc1MjQwNiwweDI2MDYyODA1LDB4NDg0MzQ4NDQsMHhjY2M1Y2FjMworCS5sb25nCTB4YzRjNGM2YzQsMHg0Mjg0NDg0NiwweGRjNDVkNzQ0LDB4ZGM0MmQ3NDQKKwkubG9uZwkweDQ4NDY0MjQ1LDB4NDI0MjQ4NDUsMHg0ODQyZGE4MiwweGRhODM0ZTc1CisJLmxvbmcJMHg3MDA0NjFmZiwweGZmZmZmNjFjLDB4MGMyZTAwODAsMHhmZmFhNjcxMgorCS5sb25nCTB4MjQ0ODYxZmYsMHhmZmZmZjJkYywweDRhODE2NjFlLDB4MmUwMDYwMDAKKwkubG9uZwkweGZkZTY1OGFlLDB4ZmZhNDYxZmYsMHhmZmZmZjI4NiwweDRhODE2NmZmCisJLmxvbmcJMHhmZmZmZjVhMCwweDJlMDA2MDAwLDB4ZmRjZTYxZmYsMHhmZmZmZjVjZQorCS5sb25nCTB4MjA0YTIwM2MsMHgwMTAxMDAwMSwweDYwZmZmZmZmLDB4ZjU1NjEwMmUKKwkubG9uZwkweGZmYTEwYzAwLDB4MDAwNzZlMDAsMHgwMGI0MDI0MCwweDAwMDcyNjM2CisJLmxvbmcJMHgwNGMwMzQyZSwweGZmYTI0MjQxLDB4MTIwMmU5NWEsMHgwMjQyMDAwNworCS5sb25nCTB4MjgzNjI0YzAsMHg0YTg0NjcwMCwweDAwODg0YTgzLDB4NjcwMDAwODIKKwkubG9uZwkweDQyMmVmZmIwLDB4MDgyZTAwMDMsMHhmZmEyNjcxOCwweDRhODM2YzA4CisJLmxvbmcJMHg0NDgzMDAyZSwweDAwMDFmZmIwLDB4NGE4NDZjMDgsMHg0NDg0MGEyZQorCS5sb25nCTB4MDAwMWZmYjAsMHgyYTAzMmMwMywweDJlMDQ0ODQ2LDB4NDg0N2M2YzQKKwkubG9uZwkweGM4YzZjYWM3LDB4Y2NjNzQyODcsMHg0ODQzZDY0NCwweGRkODdkNjQ1CisJLmxvbmcJMHhkZDg3NDg0MywweDQyNDQ0MjQ1LDB4NDg0NDQ4NDUsMHhkODg1ZDg4NgorCS5sb25nCTB4NGEyZWZmYjAsMHg2NzA4NDY4MywweDQ2ODQ1MjgzLDB4ZDk4NzJkODMKKwkubG9uZwkweDI0YzA0NGZjLDB4MDAwMDJkODQsMHgxNGMwNDJjNywweDAyMDcwMDA4CisJLmxvbmcJMHgxYzJlZmZhOSwweDAyMDYwMDEwLDB4OGMwNzFkNDYsMHhmZmE5NGU3NQorCS5sb25nCTB4NDJiNjI0YzAsMHg0MmI2MTRjMCwweDdlMDQ2MGU0LDB4NzAwNDYxZmYKKwkubG9uZwkweGZmZmZmNTEwLDB4MGMyZTAwODAsMHhmZmFhNjcxNCwweDI0NDg2MWZmCisJLmxvbmcJMHhmZmZmZjFkMCwweDRhODE2NjAwLDB4MDAyMDI2MDAsMHg2MDAwZmYzNAorCS5sb25nCTB4NThhZWZmYTQsMHg2MWZmZmZmZiwweGYxNzg0YTgxLDB4NjZmZmZmZmYKKwkubG9uZwkweGY0OTIyNjAwLDB4NjAwMGZmMWMsMHg2MWZmZmZmZiwweGY0YzAyMDRhCisJLmxvbmcJMHgyMDNjMDEwMSwweDAwMDE2MGZmLDB4ZmZmZmY0NDgsMHgyZDQwZmZiNAorCS5sb25nCTB4MjIwMGU5NTgsMHgwMjQwMDAwZiwweDIyNzYwNGMwLDB4MmQ0OWZmYjAKKwkubG9uZwkweDIwMDFlYzQ5LDB4MDI0MTAwMDcsMHgyYTM2MTRjMCwweDAyNDAwMDA3CisJLmxvbmcJMHgyNjM2MDRjMCwweDNkNDBmZmJhLDB4MzAyZWZmYTIsMHgyMjAwZTk1OAorCS5sb25nCTB4MDI0MDAwMGYsMHgyMDc2MDRjMCwweDJkNDhmZmJjLDB4MjAwMWVjNDkKKwkubG9uZwkweDAyNDEwMDA3LDB4MjgzNjE0YzAsMHgwMjQwMDAwNywweDI0MzYwNGMwCisJLmxvbmcJMHgzZDQwZmZiOCwweDA4MmUwMDAxLDB4ZmZhMDU2YzcsMHgwODJlMDAwNQorCS5sb25nCTB4MDAwNDU2YzYsMHgyNDQ4MjY0OSwweDIyMDcyMDA2LDB4NjFmZmZmZmYKKwkubG9uZwkweGYwNWMyMDRhLDB4NGE4MDY2ZmYsMHgwMDAwMDFjOCwweDIyMDcyMDA2CisJLmxvbmcJMHgyMDRiNjFmZiwweGZmZmZmMDQ2LDB4MjA0YjRhODAsMHg2NjBhMjA0YQorCS5sb25nCTB4MjI0YjYwZmYsMHhmZmZmZjAyMCwweDJmMDAyMjA3LDB4MjAwNjIwNGEKKwkubG9uZwkweDYxZmZmZmZmLDB4ZjAzZTIwMWYsMHgyMDRiNjBmZiwweDAwMDAwMTk0CisJLmxvbmcJMHgwODJlMDAwMSwweGZmYTA2NjQ4LDB4NDRlZWZmYTgsMHhiMDQyNjYwMgorCS5sb25nCTB4YjI0MzQyZWUsMHhmZmE4NGEwNCwweDY2MTAzNjJlLDB4ZmZiYTNkODEKKwkubG9uZwkweDM0YzIzNDJlLDB4ZmZiODNkODAsMHgyNGMyMDgyZSwweDAwMDUwMDA0CisJLmxvbmcJMHg1NmMyMjAwMiwweDUxYzEyMDZlLDB4ZmZiYzYxZmYsMHhmZmZmZWZmNAorCS5sb25nCTB4MjAwMjUxYzEsMHgyMDZlZmZiMCwweDYxZmZmZmZmLDB4ZWZlNjRlNzUKKwkubG9uZwkweDQ0ZWVmZmE4LDB4YjA4MjY2MDIsMHhiMjgzNDJlZSwweGZmYTg0YTA0CisJLmxvbmcJMHg2NjEwMzYyZSwweGZmYmEyZDgxLDB4MzRjMDM0MmUsMHhmZmI4MmQ4MAorCS5sb25nCTB4MjRjMDA4MmUsMHgwMDA1MDAwNCwweDU2YzIyMDAyLDB4NTBjMTIwNmUKKwkubG9uZwkweGZmYmM2MWZmLDB4ZmZmZmVmYWMsMHgyMDAyNTBjMSwweDIwNmVmZmIwCisJLmxvbmcJMHg2MWZmZmZmZiwweGVmOWU0ZTc1LDB4MjAyZWZmYjQsMHg2MDAwZmVhZQorCS5sb25nCTB4MDgyZTAwMDEsMHhmZmEwNjYxMCwweDcwMDI2MWZmLDB4ZmZmZmYzNjQKKwkubG9uZwkweDJkNDhmZmI0LDB4NTFjNzYwMGUsMHg3MDA0NjFmZiwweGZmZmZmMzU0CisJLmxvbmcJMHgyZDQ4ZmZiNCwweDUwYzczMDJlLDB4ZmZhMjIyMDAsMHhlYzQ4MDI0MAorCS5sb25nCTB4MDAwNzI0MzYsMHgwNGMwMDI0MSwweDAwMDcyODM2LDB4MTRjMDNkNDEKKwkubG9uZwkweGZmYjgwODJlLDB4MDAwNTAwMDQsMHg1NmM2MjQ0OCwweDIyMDcyMDA2CisJLmxvbmcJMHg2MWZmZmZmZiwweGVmMjg0YTgwLDB4NjYwMDAwOTYsMHgyMDRhNjBmZgorCS5sb25nCTB4ZmZmZmVlZWUsMHgwODJlMDAwMSwweGZmYTA2NjJjLDB4NDRlZWZmYTgKKwkubG9uZwkweGIwNDQ0MmVlLDB4ZmZhODRhMDEsMHg2NjA4MzYyZSwweGZmYjgzZDgwCisJLmxvbmcJMHgzNGMyMjA2ZSwweGZmYjQ1MWMxLDB4MDgyZTAwMDUsMHgwMDA0NTZjMAorCS5sb25nCTB4NjFmZmZmZmYsMHhlZWZlNGU3NSwweDQ0ZWVmZmE4LDB4YjA4NDQyZWUKKwkubG9uZwkweGZmYTg0YTAxLDB4NjYwODM2MmUsMHhmZmI4MmQ4MCwweDM0YzAyMDZlCisJLmxvbmcJMHhmZmI0NTBjMSwweDA4MmUwMDA1LDB4MDAwNDU2YzAsMHg2MWZmZmZmZgorCS5sb25nCTB4ZWVkMjRlNzUsMHg0ZTdiNjAwMCwweDRlN2I2MDAxLDB4MGMyZTAwZmMKKwkubG9uZwkweGZmYTE2N2ZmLDB4ZmZmZmZmMjQsMHgyMDZlZmZiNCwweDA4MmUwMDAxCisJLmxvbmcJMHhmZmEwNTZjNywweDYwMDBmZjQwLDB4NGU3YjYwMDAsMHg0ZTdiNjAwMQorCS5sb25nCTB4MjQ0ODJmMDAsMHg2MWZmZmZmZiwweGYyNjQyMDFmLDB4NTg4ZjUxOGYKKwkubG9uZwkweDUxOGU3MjFhLDB4NDFlZjAwMDgsMHg0M2VmMDAwMCwweDIyZDg1MWM5CisJLmxvbmcJMHhmZmZjM2Q3YywweDQwMDgwMDBhLDB4MmQ0YTAwMGMsMHgyZDQwMDAxMAorCS5sb25nCTB4NGNlZTNmZmYsMHhmZmMwNGU1ZSwweDYwZmZmZmZmLDB4ZWRmODQyODAKKwkubG9uZwkweDQzZmIwMTcwLDB4MDAwMDA1YWUsMHhiM2M4NmQwZSwweDQzZmIwMTcwCisJLmxvbmcJMHgwMDAwMDAxMCwweGIxYzk2ZDAyLDB4NGU3NTcwZmYsMHg0ZTc1NGEwNgorCS5sb25nCTB4NjYwNDcwMDEsMHg2MDAyNzAwNSwweDRhMDc2NzAwLDB4MDFlNDI0NDgKKwkubG9uZwkweDI2NDkyODQ4LDB4MmE0OTU2OGMsMHg1NjhkMjIwYSwweDQwYzcwMDdjCisJLmxvbmcJMHgwNzAwNGU3YSwweDYwMDA0ZTdiLDB4MDAwMDRlN2IsMHgwMDAxZjU4YQorCS5sb25nCTB4ZjU4Y2Y1OGIsMHhmNThkZjQ2YSwweGY0NmNmNDZiLDB4ZjQ2ZDI0NDEKKwkubG9uZwkweDU2ODEyODQxLDB4ZjVjYWY1Y2MsMHgyNDdjODAwMCwweDAwMDAyNjdjCisJLmxvbmcJMHhhMDAwMDAwMCwweDI4N2MwMDAwLDB4MDAwMDIwMDgsMHgwMjAwMDAwMworCS5sb25nCTB4NjcxYzBjMDAsMHgwMDAyNjcwMCwweDAwOTY2MDAwLDB4MDEwMjUxZmMKKwkubG9uZwkweDRlN2JhMDA4LDB4MGU5MTEwMDAsMHgwZTkwMDAwMCwweDYwMDI2MDBlCisJLmxvbmcJMHhiMDgyNjYxYywweGIyODM2NjE4LDB4MGU5MTU4MDAsMHg2MDAyNjAwZQorCS5sb25nCTB4NGU3YmIwMDgsMHgwZTkwNDgwMCwweDRlN2JjMDA4LDB4NjAzNDYwMGUKKwkubG9uZwkweDRlN2JiMDA4LDB4MGU5MDA4MDAsMHg0ZTdiYzAwOCwweDYwMTI2MDBlCisJLmxvbmcJMHg0ZTcxNGU3MSwweDRlNzE0ZTcxLDB4NGU3MTRlNzEsMHg0ZTcxNjBiMAorCS5sb25nCTB4NGU3YjYwMDAsMHg0ZTdiNjAwMSwweDQ2Yzc1MWM0LDB4NjBmZmZmZmYKKwkubG9uZwkweGZkNDI0ZTdiLDB4NjAwMDRlN2IsMHg2MDAxNDZjNywweDUwYzQ2MGZmCisJLmxvbmcJMHhmZmZmZmQzMCwweDUxZmM1MWZjLDB4NTFmYzUxZmMsMHg1MWZjNTFmYworCS5sb25nCTB4NGU3YmEwMDgsMHgwZTkxMTAwMCwweDBlOTAwMDAwLDB4NjAwMjYwMGUKKwkubG9uZwkweGIwODI2NjJjLDB4YjI4MzY2MjgsMHgwZTkxNTgwMCwweDYwMDI2MDBlCisJLmxvbmcJMHg0ODQ0MGU1OCwweDQ4MDA0ZTdiLDB4YjAwODQ4NDQsMHg2MDAyNjAwZQorCS5sb25nCTB4MGU1MDQ4MDAsMHg0ZTdiYzAwOCwweDYwMDBmZmE4LDB4NGU3MTYwMGUKKwkubG9uZwkweDQ4NDAwZTU4LDB4MDgwMDRlN2IsMHhiMDA4NDg0MCwweDYwMDI2MDBlCisJLmxvbmcJMHgwZTUwMDgwMCwweDRlN2JjMDA4LDB4NjAwMGZmNzYsMHg0ZTcxNjAwZQorCS5sb25nCTB4NGU3MTRlNzEsMHg0ZTcxNGU3MSwweDRlNzE0ZTcxLDB4NGU3MTYwOTAKKwkubG9uZwkweDRlN2JhMDA4LDB4MGU5MTEwMDAsMHgwZTkwMDAwMCwweDYwMDI2MDBlCisJLmxvbmcJMHhiMDgyNjYzYywweGIyODM2NjM4LDB4MGU5MTU4MDAsMHg2MDAyNjAwZQorCS5sb25nCTB4ZTE5YzBlMTgsMHg0ODAwNDg0NCwweDBlNTg0ODAwLDB4NjAwMjYwMGUKKwkubG9uZwkweGUxOWM0ZTdiLDB4YjAwODBlMTAsMHg0ODAwNjAwNCwweDRlNzE2MDBlCisJLmxvbmcJMHg0ZTdiYzAwOCwweDYwMDBmZjJjLDB4NGU3MTRlNzEsMHg0ZTcxNjAwZQorCS5sb25nCTB4ZTE5ODBlMTgsMHgwODAwNDg0MCwweDBlNTgwODAwLDB4NjAwMjYwMGUKKwkubG9uZwkweGUxOTg0ZTdiLDB4YjAwODBlMTAsMHgwODAwNjAwNCwweDRlNzE2MDBlCisJLmxvbmcJMHg0ZTdiYzAwOCwweDYwMDBmZWVhLDB4NGU3MTRlNzEsMHg0ZTcxNjAwYworCS5sb25nCTB4NGU3MTRlNzEsMHg0ZTcxNGU3MSwweDRlNzE0ZTcxLDB4NjAwMGZmNzIKKwkubG9uZwkweDI0NDgyNjQ5LDB4Mjg0ODJhNDksMHg1MjhjNTI4ZCwweDIyMGE0MGM3CisJLmxvbmcJMHgwMDdjMDcwMCwweDRlN2E2MDAwLDB4NGU3YjAwMDAsMHg0ZTdiMDAwMQorCS5sb25nCTB4ZjU4YWY1OGMsMHhmNThiZjU4ZCwweGY0NmFmNDZjLDB4ZjQ2YmY0NmQKKwkubG9uZwkweDI0NDE1NjgxLDB4Mjg0MWY1Y2EsMHhmNWNjMjQ3YywweDgwMDAwMDAwCisJLmxvbmcJMHgyNjdjYTAwMCwweDAwMDAyODdjLDB4MDAwMDAwMDAsMHgyMDA4MDgwMAorCS5sb25nCTB4MDAwMDY2MDAsMHgwMDlhNjAxNiwweDUxZmM1MWZjLDB4NTFmYzUxZmMKKwkubG9uZwkweDRlN2JhMDA4LDB4MGU1MTEwMDAsMHgwZTUwMDAwMCwweDYwMDI2MDBlCisJLmxvbmcJMHhiMDQyNjYxYywweGIyNDM2NjE4LDB4MGU1MTU4MDAsMHg2MDAyNjAwZQorCS5sb25nCTB4NGU3YmIwMDgsMHgwZTUwNDgwMCwweDRlN2JjMDA4LDB4NjAzNDYwMGUKKwkubG9uZwkweDRlN2JiMDA4LDB4MGU1MDA4MDAsMHg0ZTdiYzAwOCwweDYwMTI2MDBlCisJLmxvbmcJMHg0ZTcxNGU3MSwweDRlNzE0ZTcxLDB4NGU3MTRlNzEsMHg0ZTcxNjBiMAorCS5sb25nCTB4NGU3YjYwMDAsMHg0ZTdiNjAwMSwweDQ2Yzc1MWM0LDB4NjBmZmZmZmYKKwkubG9uZwkweGZiNjI0ZTdiLDB4NjAwMDRlN2IsMHg2MDAxNDZjNywweDUwYzQ2MGZmCisJLmxvbmcJMHhmZmZmZmI1MCwweDUxZmM1MWZjLDB4NTFmYzUxZmMsMHg1MWZjNTFmYworCS5sb25nCTB4NGU3YmEwMDgsMHgwZTUxMTAwMCwweDBlNTAwMDAwLDB4NjAwMjYwMGUKKwkubG9uZwkweGIwNDI2NjJjLDB4YjI0MzY2MjgsMHgwZTUxNTgwMCwweDYwMDI2MDBlCisJLmxvbmcJMHhlMDljMGUxOCwweDQ4MDA0ZTdiLDB4YjAwOGUxOWMsMHg2MDAyNjAwZQorCS5sb25nCTB4MGUxMDQ4MDAsMHg0ZTdiYzAwOCwweDYwMDBmZmE4LDB4NGU3MTYwMGUKKwkubG9uZwkweGUwOTgwZTE4LDB4MDgwMDRlN2IsMHhiMDA4ZTE5OCwweDYwMDI2MDBlCisJLmxvbmcJMHgwZTEwMDgwMCwweDRlN2JjMDA4LDB4NjAwMGZmNzYsMHg0ZTcxNjAwZQorCS5sb25nCTB4NGU3MTRlNzEsMHg0ZTcxNGU3MSwweDRlNzE0ZTcxLDB4NGU3MTYwOTAKKwkubG9uZwkweDRhMDY2NjA0LDB4NzAwMTYwMDIsMHg3MDA1NGEwNywweDY2MDAwMGM2CisJLmxvbmcJMHgyMjQ4MjQ0OCwweDUyOGEyNjAyLDB4ZTA0YTQwYzcsMHgwMDdjMDcwMAorCS5sb25nCTB4NGU3YTYwMDAsMHg0ZTdiMDAwMCwweDRlN2IwMDAxLDB4ZjU4OWY1OGEKKwkubG9uZwkweGY0NjlmNDZhLDB4MjI3YzgwMDAsMHgwMDAwMjQ3YywweGEwMDAwMDAwCisJLmxvbmcJMHgyNjdjMDAwMCwweDAwMDA2MDE2LDB4NTFmYzUxZmMsMHg1MWZjNTFmYworCS5sb25nCTB4NGU3YjkwMDgsMHgwZTUwMDAwMCwweGIwNDQ2NjI0LDB4NjAwMjYwMGUKKwkubG9uZwkweDBlMTgyODAwLDB4NGU3YmEwMDgsMHgwZTEwMzgwMCwweDYwMDI2MDBlCisJLmxvbmcJMHg0ZTdiYjAwOCwweDYwNGM0ZTcxLDB4NGU3MTRlNzEsMHg0ZTcxNjAwZQorCS5sb25nCTB4ZTA5ODBlMTgsMHgwODAwNGU3YiwweGEwMDhlMTk4LDB4NjAwMjYwMGUKKwkubG9uZwkweDBlMTAwODAwLDB4NGU3YmIwMDgsMHg2MDE2NGU3MSwweDRlNzE2MDBlCisJLmxvbmcJMHg0ZTcxNGU3MSwweDRlNzE0ZTcxLDB4NGU3MTRlNzEsMHg0ZTcxNjBhMAorCS5sb25nCTB4NGU3YjYwMDAsMHg0ZTdiNjAwMSwweDQ2Yzc1MWMxLDB4NjBmZmZmZmYKKwkubG9uZwkweGZiMTY0ZTdiLDB4NjAwMDRlN2IsMHg2MDAxNDZjNywweDUwYzE2MGZmCisJLmxvbmcJMHhmZmZmZmIwNCwweDIyNDgyNDQ4LDB4NTY4YTIyMDgsMHgwODAxMDAwMAorCS5sb25nCTB4NjYwMDAwYzIsMHgyNjAyNDg0MiwweDQwYzcwMDdjLDB4MDcwMDRlN2EKKwkubG9uZwkweDYwMDA0ZTdiLDB4MDAwMDRlN2IsMHgwMDAxZjU4OSwweGY1OGFmNDY5CisJLmxvbmcJMHhmNDZhMjI3YywweDgwMDAwMDAwLDB4MjQ3Y2EwMDAsMHgwMDAwMjY3YworCS5sb25nCTB4MDAwMDAwMDAsMHg2MDE4NTFmYywweDUxZmM1MWZjLDB4NTFmYzUxZmMKKwkubG9uZwkweDRlN2I5MDA4LDB4MGU5MDAwMDAsMHhiMDg0NjYyNCwweDYwMDI2MDBlCisJLmxvbmcJMHgwZTU4MjgwMCwweDRlN2JhMDA4LDB4MGU1MDM4MDAsMHg2MDAyNjAwZQorCS5sb25nCTB4NGU3YmIwMDgsMHg2MDRjNGU3MSwweDRlNzE0ZTcxLDB4NGU3MTYwMGUKKwkubG9uZwkweDQ4NDAwZTU4LDB4MDgwMDQ4NDAsMHg0ZTdiYTAwOCwweDYwMDI2MDBlCisJLmxvbmcJMHgwZTUwMDgwMCwweDRlN2JiMDA4LDB4NjAxNjRlNzEsMHg0ZTcxNjAwZQorCS5sb25nCTB4NGU3MTRlNzEsMHg0ZTcxNGU3MSwweDRlNzE0ZTcxLDB4NGU3MTYwYTAKKwkubG9uZwkweDRlN2I2MDAwLDB4NGU3YjYwMDEsMHg0NmM3NTFjMSwweDYwZmZmZmZmCisJLmxvbmcJMHhmYTQ2NGU3YiwweDYwMDA0ZTdiLDB4NjAwMTQ2YzcsMHg1MGMxNjBmZgorCS5sb25nCTB4ZmZmZmZhMzQsMHgyYTAyZTA4YSwweDI2MDI0ODQyLDB4NDBjNzAwN2MKKwkubG9uZwkweDA3MDA0ZTdhLDB4NjAwMDRlN2IsMHgwMDAwNGU3YiwweDAwMDFmNTg5CisJLmxvbmcJMHhmNThhZjQ2OSwweGY0NmEyMjdjLDB4ODAwMDAwMDAsMHgyNDdjYTAwMAorCS5sb25nCTB4MDAwMDI2N2MsMHgwMDAwMDAwMCwweDYwMTQ1MWZjLDB4NTFmYzUxZmMKKwkubG9uZwkweDRlN2I5MDA4LDB4MGU5MDAwMDAsMHhiMDg0NjYyNCwweDYwMDI2MDBlCisJLmxvbmcJMHgwZTE4MjgwMCwweDBlNTgzODAwLDB4NGU3YmEwMDgsMHg2MDAyNjAwZQorCS5sb25nCTB4MGUxMDU4MDAsMHg0ZTdiYjAwOCwweDYwMDBmZjg4LDB4NGU3MTYwMGUKKwkubG9uZwkweGUxOTgwZTE4LDB4MDgwMDQ4NDAsMHgwZTU4MDgwMCwweDYwMDI2MDBlCisJLmxvbmcJMHhlMTk4NGU3YiwweGEwMDgwZTEwLDB4MDgwMDYwMDQsMHg0ZTcxNjAwZQorCS5sb25nCTB4NGU3YmIwMDgsMHg2MDAwZmY0YSwweDRlNzE0ZTcxLDB4NGU3MTYwMGUKKwkubG9uZwkweDRlNzE0ZTcxLDB4NGU3MTRlNzEsMHg0ZTcxNGU3MSwweDRlNzE2MDkwCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvaXRlc3Quc2EgYi9hcmNoL202OGsvaWZwc3AwNjAvaXRlc3Quc2EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxNWVhZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9pdGVzdC5zYQpAQCAtMCwwICsxLDEyODEgQEAKKwlkYy5sCSQ2MGZmMDAwMCwkMDA1YzU0NjUsJDczNzQ2OTZlLCQ2NzIwMzYzOAorCWRjLmwJJDMwMzYzMDIwLCQ0OTUzNTAyMCwkNzM3NDYxNzIsJDc0NjU2NDNhCisJZGMubAkkMGEwMDcwNjEsJDczNzM2NTY0LCQwYTAwMjA2NiwkNjE2OTZjNjUKKwlkYy5sCSQ2NDBhMDAwMCwkNGE4MDY2MGUsJDQ4N2FmZmU4LCQ2MWZmMDAwMAorCWRjLmwJJDRmOWE1ODhmLCQ0ZTc1MmYwMSwkNjFmZjAwMDAsJDRmYTQ1ODhmCisJZGMubAkkNDg3YWZmZDgsJDYxZmYwMDAwLCQ0ZjgyNTg4ZiwkNGU3NTRlNTYKKwlkYy5sCSRmZjYwNDhlNywkM2YzYzQ4N2EsJGZmOWU2MWZmLCQwMDAwNGY2YworCWRjLmwJJDU4OGY0MmFlLCRmZjc4NDg3YiwkMDE3MDAwMDAsJDAwZWE2MWZmCisJZGMubAkkMDAwMDRmNTgsJDU4OGY2MWZmLCQwMDAwMDBmMCwkNjFmZmZmZmYKKwlkYy5sCSRmZmE2NDJhZSwkZmY3ODQ4N2IsJDAxNzAwMDAwLCQwYWY2NjFmZgorCWRjLmwJJDAwMDA0ZjM4LCQ1ODhmNjFmZiwkMDAwMDBhZjgsJDYxZmZmZmZmCisJZGMubAkkZmY4NjQyYWUsJGZmNzg0ODdiLCQwMTcwMDAwMCwkMTc5YzYxZmYKKwlkYy5sCSQwMDAwNGYxOCwkNTg4ZjYxZmYsJDAwMDAxNzljLCQ2MWZmZmZmZgorCWRjLmwJJGZmNjY0MmFlLCRmZjc4NDg3YiwkMDE3MDAwMDAsJDAzODY2MWZmCisJZGMubAkkMDAwMDRlZjgsJDU4OGY2MWZmLCQwMDAwMDM4MCwkNjFmZmZmZmYKKwlkYy5sCSRmZjQ2NDJhZSwkZmY3ODQ4N2IsJDAxNzAwMDAwLCQyMDJjNjFmZgorCWRjLmwJJDAwMDA0ZWQ4LCQ1ODhmMmQ3YywkMDAwMDAwMDIsJGZmNzQ2MWZmCisJZGMubAkkMDAwMDIwMmMsJDYxZmZmZmZmLCRmZjFlNDJhZSwkZmY3ODQ4N2IKKwlkYy5sCSQwMTcwMDAwMCwkMGQ3YzYxZmYsJDAwMDA0ZWIwLCQ1ODhmNjFmZgorCWRjLmwJJDAwMDAwZDc0LCQ2MWZmZmZmZiwkZmVmZTQyYWUsJGZmNzg0ODdiCisJZGMubAkkMDE3MDAwMDAsJDBmOGU2MWZmLCQwMDAwNGU5MCwkNTg4ZjYxZmYKKwlkYy5sCSQwMDAwMGY4OCwkNjFmZmZmZmYsJGZlZGU0Y2RmLCQzY2ZjNGU1ZQorCWRjLmwJJDRlNzUwOTM2LCQzNDJkNjI2OSwkNzQyMDZkNzUsJDZjNzQ2OTcwCisJZGMubAkkNmM3OTJlMmUsJDJlMDA1MWZjLCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkNGUxODQyODEsJDI0M2M5OTk5LCQ5OTk5MjYzYworCWRjLmwJJDg4ODg4ODg4LCQzZDdjMDAwNCwkZmY3YzQ0ZmMsJDAwMDA0OGVlCisJZGMubAkkN2ZmZmZmODAsJDRjMDEzNDAyLCQ0MmVlZmY3ZSwkNDhlZTdmZmYKKwlkYy5sCSRmZmMwNDJhZSwkZmY4ODQyYWUsJGZmOGM2MWZmLCQwMDAwNGRhNgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwNGRjYywkNTJhZWZmNzgsJDRjZmIzZmZmCisJZGMubAkkMDE3MDAwMDAsJDRkYzgyMjNjLCQ3Nzc3Nzc3NywkMjQzYzk5OTkKKwlkYy5sCSQ5OTk5NzYwMCwkM2Q3YzAwMDQsJGZmN2M0NGZjLCQwMDAwNDhlZQorCWRjLmwJJDdmZmZmZjgwLCQ0YzAxMzQwMiwkNDJlZWZmN2UsJDQ4ZWU3ZmZmCisJZGMubAkkZmZjMDQyYWUsJGZmODg0MmFlLCRmZjhjNjFmZiwkMDAwMDRkNTYKKwlkYy5sCSQ0YTAwNjZmZiwkMDAwMDRkN2MsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZgorCWRjLmwJJDAxNzAwMDAwLCQ0ZDc4NzIxMCwkMjQzYzY2NjYsJDY2NjYzZDdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlN2ZmZiwkZmY4MDRjMDEKKwlkYy5sCSQyNDAyNDJlZSwkZmY3ZTQ4ZWUsJDdmZmZmZmMwLCQyZDdjMDAwMAorCWRjLmwJJDAwMDZmZjg4LCQ2MWZmMDAwMCwkNGQwYzRhMDAsJDY2ZmYwMDAwCisJZGMubAkkNGQzMjUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MCwkMDAwMDRkMmUKKwlkYy5sCSQyMjNjNTU1NSwkNTU1NTc0MDAsJDc2MDMzZDdjLCQwMDAwZmY3YworCWRjLmwJJDQ0ZmMwMDAwLCQ0OGVlN2ZmZiwkZmY4MDRjMDEsJDM0MDI0MmVlCisJZGMubAkkZmY3ZTQ4ZWUsJDdmZmZmZmMwLCQyZDdjMDAwMCwkMDAwMGZmODgKKwlkYy5sCSQyZDdjZmZmZiwkZmZmZmZmOGMsJDYxZmYwMDAwLCQ0Y2I4NGEwMAorCWRjLmwJJDY2ZmYwMDAwLCQ0Y2RlNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwCisJZGMubAkkMDAwMDRjZGEsJDIyM2M0MDAwLCQwMDAwNzQwMCwkNzYwNDNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWU3ZmZmLCRmZjgwNGMwMQorCWRjLmwJJDM0MDI0MmVlLCRmZjdlNDhlZSwkN2ZmZmZmYzAsJDJkN2MwMDAwCisJZGMubAkkMDAwMWZmODgsJDJkN2MwMDAwLCQwMDAwZmY4YywkNjFmZjAwMDAKKwlkYy5sCSQ0YzY0NGEwMCwkNjZmZjAwMDAsJDRjOGE1MmFlLCRmZjc4NGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwNGM4NiwkNzJmZjc0MDAsJDc2ZmYzZDdjCisJZGMubAkkMDAwOGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlN2ZmZiwkZmY4MDRjMDEKKwlkYy5sCSQzNDAyNDJlZSwkZmY3ZTQ4ZWUsJDdmZmZmZmMwLCQyZDdjZmZmZgorCWRjLmwJJGZmZmVmZjg4LCQyZDdjMDAwMCwkMDAwMWZmOGMsJDYxZmYwMDAwCisJZGMubAkkNGMxNDRhMDAsJDY2ZmYwMDAwLCQ0YzNhNTJhZSwkZmY3ODRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDRjMzYsJDIyM2M4MDAwLCQwMDAwNzQwMAorCWRjLmwJJDc2ZmYzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWU3ZmZmCisJZGMubAkkZmY4MDRjMDEsJDNjMDI0MmVlLCRmZjdlNDhlZSwkN2ZmZmZmYzAKKwlkYy5sCSQyZDdjMDAwMCwkMDAwMGZmODgsJDJkN2M4MDAwLCQwMDAwZmY4YworCWRjLmwJJDYxZmYwMDAwLCQ0YmMwNGEwMCwkNjZmZjAwMDAsJDRiZTY1MmFlCisJZGMubAkkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwNGJlMiwkMjIzYzgwMDAKKwlkYy5sCSQwMDAwNzQwMCwkNzYwMTNkN2MsJDAwMDhmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWU3ZmZmLCRmZjgwNGMwMSwkM2MwMjQyZWUsJGZmN2U0OGVlCisJZGMubAkkN2ZmZmZmYzAsJDJkN2NmZmZmLCRmZmZmZmY4OCwkMmQ3YzgwMDAKKwlkYy5sCSQwMDAwZmY4YywkNjFmZjAwMDAsJDRiNmM0YTAwLCQ2NmZmMDAwMAorCWRjLmwJJDRiOTI1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDA0YjhlCisJZGMubAkkNzIwMTc0MDAsJDI2M2M4MDAwLCQwMDAwM2Q3YywkMDAwOGZmN2MKKwlkYy5sCSQ0NGZjMDAwMCwkNDhlZTdmZmYsJGZmODA0YzAxLCQzYzAyNDJlZQorCWRjLmwJJGZmN2U0OGVlLCQ3ZmZmZmZjMCwkMmQ3Y2ZmZmYsJGZmZmZmZjg4CisJZGMubAkkMmQ3YzgwMDAsJDAwMDBmZjhjLCQ2MWZmMDAwMCwkNGIxODRhMDAKKwlkYy5sCSQ2NmZmMDAwMCwkNGIzZTIyMmUsJGZmNzg0MjgwLCQ0ZTc1MDk2ZAorCWRjLmwJJDZmNzY2NTcwLCQyZTJlMmUwMCwkNTJhZWZmNzgsJDRjZmIzZmZmCisJZGMubAkkMDE3MDAwMDAsJDRiMjg0MWVlLCRmZjYwMzAzYywkYWFhYTQyMjgKKwlkYy5sCSQwMDAwNDIyOCwkMDAwMjNkN2MsJDAwMWZmZjdjLCQ0NGZjMDAxZgorCWRjLmwJJDQ4ZWU3ZmZmLCRmZjgwMDE4OCwkMDAwMDQyZWUsJGZmN2U0OGVlCisJZGMubAkkN2ZmZmZmYzAsJDEyMjgwMDAyLCRlMTQ5MTIyOCwkMDAwMGIwNDEKKwlkYy5sCSQ2NmZmMDAwMCwkNGFkZTYxZmYsJDAwMDA0YWFhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDA0YWQwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkNGFjYzQxZWUsJGZmNjQzMDNjLCRhYWFhNDJhOCwkZmZmYzQyOTAKKwlkYy5sCSQ0MmE4MDAwNCwkM2Q3YzAwMWYsJGZmN2M0NGZjLCQwMDFmNDhlZQorCWRjLmwJJDdmZmZmZjgwLCQwMTg4MDAwMCwkNDJlZWZmN2UsJDQ4ZWU3ZmZmCisJZGMubAkkZmZjMDRhYTgsJGZmZmM2NmZmLCQwMDAwNGE4OCwkNGFhODAwMDQKKwlkYy5sCSQ2NmZmMDAwMCwkNGE3ZTBjOTAsJGFhMDBhYTAwLCQ2NmZmMDAwMAorCWRjLmwJJDRhNzI2MWZmLCQwMDAwNGEzZSwkNGEwMDY2ZmYsJDAwMDA0YTY0CisJZGMubAkkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMCwkNGE2MDQxZWUKKwlkYy5sCSRmZjYwMzAzYywkYWFhYTQyMjgsJDAwMDA0MjI4LCQwMDAyM2Q3YworCWRjLmwJJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZTdmZmYsJGZmODAwMTg4CisJZGMubAkkMDAwMDQyZWUsJGZmN2U0OGVlLCQ3ZmZmZmZjMCwkMTIyODAwMDIKKwlkYy5sCSRlMTQ5MTIyOCwkMDAwMGIwNDEsJDY2ZmYwMDAwLCQ0YTE2NjFmZgorCWRjLmwJJDAwMDA0OWUyLCQ0YTAwNjZmZiwkMDAwMDRhMDgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQ0YTA0NDFlZSwkZmY2MDExN2MKKwlkYy5sCSQwMGFhMDAwMCwkMTE3YzAwYWEsJDAwMDIzZDdjLCQwMDFmZmY3YworCWRjLmwJJDQ0ZmMwMDFmLCQ0OGVlN2ZmZiwkZmY4MDAxMDgsJDAwMDA0MmVlCisJZGMubAkkZmY3ZTQ4ZWUsJDdmZmZmZmMwLCQzZDdjYWFhYSwkZmY4MjMyM2MKKwlkYy5sCSRhYWFhYjA0MSwkNjZmZjAwMDAsJDQ5YmE2MWZmLCQwMDAwNDk4NgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwNDlhYywkNTJhZWZmNzgsJDRjZmIzZmZmCisJZGMubAkkMDE3MDAwMDAsJDQ5YTg0MWVlLCRmZjYwMjAzYywkYWFhYWFhYWEKKwlkYy5sCSQ0MjI4MDAwMCwkNDIyODAwMDIsJDQyMjgwMDA0LCQ0MjI4MDAwNgorCWRjLmwJJDNkN2MwMDFmLCRmZjdjNDRmYywkMDAxZjQ4ZWUsJDdmZmZmZjgwCisJZGMubAkkMDFjODAwMDAsJDQyZWVmZjdlLCQ0OGVlN2ZmZiwkZmZjMDEyMjgKKwlkYy5sCSQwMDA2ZTE4OSwkMTIyODAwMDQsJGUxODkxMjI4LCQwMDAyZTE4OQorCWRjLmwJJDEyMjgwMDAwLCRiMDgxNjZmZiwkMDAwMDQ5NDgsJDYxZmYwMDAwCisJZGMubAkkNDkxNDRhMDAsJDY2ZmYwMDAwLCQ0OTNhNTJhZSwkZmY3ODRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDQ5MzYsJDQxZWVmZjY0LCQyMDNjYWFhYQorCWRjLmwJJGFhYWE0MmE4LCRmZmZjNDI5MCwkNDJhODAwMDQsJDQyYTgwMDA4CisJZGMubAkkM2Q3YzAwMWYsJGZmN2M0NGZjLCQwMDFmNDhlZSwkN2ZmZmZmODAKKwlkYy5sCSQwMWM4MDAwMCwkNDJlZWZmN2UsJDQ4ZWU3ZmZmLCRmZmMwNGFhOAorCWRjLmwJJGZmZmM2NmZmLCQwMDAwNDhlYywkNGFhODAwMDgsJDY2ZmYwMDAwCisJZGMubAkkNDhlMjBjOTAsJGFhMDBhYTAwLCQ2NmZmMDAwMCwkNDhkNjBjYTgKKwlkYy5sCSRhYTAwYWEwMCwkMDAwNDY2ZmYsJDAwMDA0OGM4LCQ2MWZmMDAwMAorCWRjLmwJJDQ4OTQ0YTAwLCQ2NmZmMDAwMCwkNDhiYTUyYWUsJGZmNzg0Y2ZiCisJZGMubAkkM2ZmZjAxNzAsJDAwMDA0OGI2LCQ0MWVlZmY2MCwkMTE3YzAwYWEKKwlkYy5sCSQwMDAwMTE3YywkMDBhYTAwMDIsJDExN2MwMGFhLCQwMDA0MTE3YworCWRjLmwJJDAwYWEwMDA2LCQzZDdjMDAxZiwkZmY3YzQ0ZmMsJDAwMWY0OGVlCisJZGMubAkkN2ZmZmZmODAsJDAxNDgwMDAwLCQ0MmVlZmY3ZSwkNDhlZTdmZmYKKwlkYy5sCSRmZmMwMmQ3YywkYWFhYWFhYWEsJGZmODAyMjNjLCRhYWFhYWFhYQorCWRjLmwJJGIwODE2NmZmLCQwMDAwNDg1YywkNjFmZjAwMDAsJDQ4Mjg0YTAwCisJZGMubAkkNjZmZjAwMDAsJDQ4NGU1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAKKwlkYy5sCSQwMDAwNDg0YSwkNDFlZWZmNjAsJDNlM2NhYWFhLCQ0MjI4MDAwMAorCWRjLmwJJDQyMjgwMDAyLCQzZDdjMDAxZiwkZmY3YzQ0ZmMsJDAwMWY0OGVlCisJZGMubAkkN2ZmZmZmODAsJDBmODgwMDAwLCQ0MmVlZmY3ZSwkNDhlZTdmZmYKKwlkYy5sCSRmZmMwMTIyOCwkMDAwMmUxNDksJDEyMjgwMDAwLCRiZTQxNjZmZgorCWRjLmwJJDAwMDA0ODAwLCQ2MWZmMDAwMCwkNDdjYzRhMDAsJDY2ZmYwMDAwCisJZGMubAkkNDdmMjUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MCwkMDAwMDQ3ZWUKKwlkYy5sCSQ0MWVlZmY2MCwkMTE3YzAwYWEsJDAwMDAxMTdjLCQwMGFhMDAwMgorCWRjLmwJJDNkN2MwMDFmLCRmZjdjNDRmYywkMDAxZjQ4ZWUsJDdmZmZmZjgwCisJZGMubAkkMGYwODAwMDAsJDQyZWVmZjdlLCQ0OGVlN2ZmZiwkZmZjMDNkN2MKKwlkYy5sCSRhYWFhZmY5ZSwkMzIzY2FhYWEsJGJlNDE2NmZmLCQwMDAwNDdhNAorCWRjLmwJJDYxZmYwMDAwLCQ0NzcwNGEwMCwkNjZmZjAwMDAsJDQ3OTY1MmFlCisJZGMubAkkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwNDc5MiwkNDFlZWZmNjAKKwlkYy5sCSQzMDNjYWFhYSwkNDIyODAwMDAsJDQyMjgwMDAyLCQzZDdjMDAxZgorCWRjLmwJJGZmN2M0NGZjLCQwMDFmNDhlZSwkN2ZmZmZmODAsJDAxODgwMDAwCisJZGMubAkkNDJlZWZmN2UsJDQ4ZWU3ZmZmLCRmZmMwMTIyOCwkMDAwMmUxNDkKKwlkYy5sCSQxMjI4MDAwMCwkYjA0MTY2ZmYsJDAwMDA0NzQ4LCQ2MWZmMDAwMAorCWRjLmwJJDQ3MTQ0YTAwLCQ2NmZmMDAwMCwkNDczYTUyYWUsJGZmNzg0Y2ZiCisJZGMubAkkM2ZmZjAxNzAsJDAwMDA0NzM2LCQ0MWVlZmY2MCwkMzAzY2FhYWEKKwlkYy5sCSQ0MjI4MDAwOCwkNDIyODAwMGEsJDNkN2MwMDFmLCRmZjdjNDRmYworCWRjLmwJJDAwMWY0OGVlLCQ3ZmZmZmY4MCwkMDE4ODAwMDgsJDQyZWVmZjdlCisJZGMubAkkNDhlZTdmZmYsJGZmYzAxMjI4LCQwMDBhZTE0OSwkMTIyODAwMDgKKwlkYy5sCSRiMDQxNjZmZiwkMDAwMDQ2ZWMsJDYxZmYwMDAwLCQ0NmI4NGEwMAorCWRjLmwJJDY2ZmYwMDAwLCQ0NmRlNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwCisJZGMubAkkMDAwMDQ2ZGEsJDQxZWVmZjYwLCQxMTdjMDBhYSwkMDAwODExN2MKKwlkYy5sCSQwMGFhMDAwYSwkM2Q3YzAwMWYsJGZmN2M0NGZjLCQwMDFmNDhlZQorCWRjLmwJJDdmZmZmZjgwLCQwMTA4MDAwOCwkNDJlZWZmN2UsJDQ4ZWU3ZmZmCisJZGMubAkkZmZjMDNkN2MsJGFhYWFmZjgyLCQzMjNjYWFhYSwkYjA0MTY2ZmYKKwlkYy5sCSQwMDAwNDY5MCwkNjFmZjAwMDAsJDQ2NWM0YTAwLCQ2NmZmMDAwMAorCWRjLmwJJDQ2ODI1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDA0NjdlCisJZGMubAkkNDFlZWZmNjAsJDIwM2NhYWFhLCRhYWFhNDIyOCwkMDAwODQyMjgKKwlkYy5sCSQwMDBhNDIyOCwkMDAwYzQyMjgsJDAwMGUzZDdjLCQwMDFmZmY3YworCWRjLmwJJDQ0ZmMwMDFmLCQ0OGVlN2ZmZiwkZmY4MDAxYzgsJDAwMDg0MmVlCisJZGMubAkkZmY3ZTQ4ZWUsJDdmZmZmZmMwLCQxMjI4MDAwZSwkZTE4OTEyMjgKKwlkYy5sCSQwMDBjZTE4OSwkMTIyODAwMGEsJGUxODkxMjI4LCQwMDA4YjA4MQorCWRjLmwJJDY2ZmYwMDAwLCQ0NjFlNjFmZiwkMDAwMDQ1ZWEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDQ2MTAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQ0NjBjNDFlZSwkZmY2MDExN2MsJDAwYWEwMDA4LCQxMTdjMDBhYQorCWRjLmwJJDAwMGExMTdjLCQwMGFhMDAwYywkMTE3YzAwYWEsJDAwMGUzZDdjCisJZGMubAkkMDAxZmZmN2MsJDQ0ZmMwMDFmLCQ0OGVlN2ZmZiwkZmY4MDAxNDgKKwlkYy5sCSQwMDA4NDJlZSwkZmY3ZTQ4ZWUsJDdmZmZmZmMwLCQyZDdjYWFhYQorCWRjLmwJJGFhYWFmZjgwLCQyMjNjYWFhYSwkYWFhYWIwODEsJDY2ZmYwMDAwCisJZGMubAkkNDViMjYxZmYsJDAwMDA0NTdlLCQ0YTAwNjZmZiwkMDAwMDQ1YTQKKwlkYy5sCSQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwLCQ0NWEwNDFlZQorCWRjLmwJJGZmNjgzMDNjLCRhYWFhNDIyOCwkZmZmODQyMjgsJGZmZmEzZDdjCisJZGMubAkkMDAxZmZmN2MsJDQ0ZmMwMDFmLCQ0OGVlN2ZmZiwkZmY4MDAxODgKKwlkYy5sCSRmZmY4NDJlZSwkZmY3ZTQ4ZWUsJDdmZmZmZmMwLCQxMjI4ZmZmYQorCWRjLmwJJGUxNDkxMjI4LCRmZmY4YjA0MSwkNjZmZjAwMDAsJDQ1NTY2MWZmCisJZGMubAkkMDAwMDQ1MjIsJDRhMDA2NmZmLCQwMDAwNDU0OCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDQ1NDQ0MWVlLCRmZjY4MTE3YworCWRjLmwJJDAwYWFmZmY4LCQxMTdjMDBhYSwkZmZmYTNkN2MsJDAwMWZmZjdjCisJZGMubAkkNDRmYzAwMWYsJDQ4ZWU3ZmZmLCRmZjgwMDEwOCwkZmZmODQyZWUKKwlkYy5sCSRmZjdlNDhlZSwkN2ZmZmZmYzAsJDNkN2NhYWFhLCRmZjgyMzIzYworCWRjLmwJJGFhYWFiMDQxLCQ2NmZmMDAwMCwkNDRmYTYxZmYsJDAwMDA0NGM2CisJZGMubAkkNGEwMDY2ZmYsJDAwMDA0NGVjLCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkNDRlODQxZWUsJGZmNjgyMDNjLCRhYWFhYWFhYQorCWRjLmwJJDQyMjhmZmY4LCQ0MjI4ZmZmYSwkNDIyOGZmZmMsJDQyMjgwMDAwCisJZGMubAkkM2Q3YzAwMWYsJGZmN2M0NGZjLCQwMDFmNDhlZSwkN2ZmZmZmODAKKwlkYy5sCSQwMWM4ZmZmOCwkNDJlZWZmN2UsJDQ4ZWU3ZmZmLCRmZmMwMTIyOAorCWRjLmwJJGZmZmVlMTg5LCQxMjI4ZmZmYywkZTE4OTEyMjgsJGZmZmFlMTg5CisJZGMubAkkMTIyOGZmZjgsJGIwODE2NmZmLCQwMDAwNDQ4OCwkNjFmZjAwMDAKKwlkYy5sCSQ0NDU0NGEwMCwkNjZmZjAwMDAsJDQ0N2E1MmFlLCRmZjc4NGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwNDQ3NiwkNDFlZWZmNjgsJDExN2MwMGFhCisJZGMubAkkZmZmODExN2MsJDAwYWFmZmZhLCQxMTdjMDBhYSwkZmZmYzExN2MKKwlkYy5sCSQwMGFhMDAwMCwkM2Q3YzAwMWYsJGZmN2M0NGZjLCQwMDFmNDhlZQorCWRjLmwJJDdmZmZmZjgwLCQwMTQ4ZmZmOCwkNDJlZWZmN2UsJDQ4ZWU3ZmZmCisJZGMubAkkZmZjMDJkN2MsJGFhYWFhYWFhLCRmZjgwMjIzYywkYWFhYWFhYWEKKwlkYy5sCSRiMDgxNjZmZiwkMDAwMDQ0MWMsJDYxZmYwMDAwLCQ0M2U4NGEwMAorCWRjLmwJJDY2ZmYwMDAwLCQ0NDBlMjIyZSwkZmY3ODQyODAsJDRlNzUwOTM2CisJZGMubAkkMzQyZDYyNjksJDc0MjA2NDY5LCQ3NjY5NjQ2NSwkMmUyZTJlMDAKKwlkYy5sCSQ1MmFlZmY3OCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDQzZWM3MjAxLCQ3NDAwNzYwMCwkM2Q3YzAwMTQsJGZmN2M0NGZjCisJZGMubAkkMDAxZjQ4ZWUsJDdmZmZmZjgwLCQ0YzQxMzQwMiwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlN2ZmZiwkZmZjMDYxZmYsJDAwMDA0MzhhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDA0M2IwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkNDNhYzIyM2MsJDQ0NDQ0NDQ0LCQ3NDAwMjYzYywkNTU1NTU1NTUKKwlkYy5sCSQzZDdjMDAxMCwkZmY3YzQ0ZmMsJDAwMWY0OGVlLCQ3ZmZmZmY4MAorCWRjLmwJJDRjNDEzNDAyLCQ0MmVlZmY3ZSwkNDhlZTdmZmYsJGZmYzAyZDdjCisJZGMubAkkMTExMTExMTEsJGZmODgyZDdjLCQwMDAwMDAwMSwkZmY4YzYxZmYKKwlkYy5sCSQwMDAwNDMzMiwkNGEwMDY2ZmYsJDAwMDA0MzU4LCQ1MmFlZmY3OAorCWRjLmwJJDRjZmIzZmZmLCQwMTcwMDAwMCwkNDM1NDIyM2MsJDU1NTU1NTU1CisJZGMubAkkNzQwMDI2M2MsJDQ0NDQ0NDQ0LCQzZDdjMDAxNCwkZmY3YzQ0ZmMKKwlkYy5sCSQwMDFmNDhlZSwkN2ZmZmZmODAsJDRjNDEzNDAyLCQ0MmVlZmY3ZQorCWRjLmwJJDQ4ZWU3ZmZmLCRmZmMwMmQ3YywkNDQ0NDQ0NDQsJGZmODgyZDdjCisJZGMubAkkMDAwMDAwMDAsJGZmOGM2MWZmLCQwMDAwNDJkYSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwNDMwMCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDQyZmMyMjNjLCQxMTExMTExMSwkMjQzYzQ0NDQsJDQ0NDQyNjNjCisJZGMubAkkNDQ0NDQ0NDQsJDNkN2MwMDFlLCRmZjdjNDRmYywkMDAxZDQ4ZWUKKwlkYy5sCSQ3ZmZmZmY4MCwkNGM0MTM0MDIsJDQyZWVmZjdlLCQ0OGVlN2ZmZgorCWRjLmwJJGZmYzA2MWZmLCQwMDAwNDI4ZSwkNGEwMDY2ZmYsJDAwMDA0MmI0CisJZGMubAkkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMCwkNDJiMDcyZmUKKwlkYy5sCSQ3NDAxNzYwMiwkM2Q3YzAwMWUsJGZmN2M0NGZjLCQwMDFkNDhlZQorCWRjLmwJJDdmZmZmZjgwLCQ0YzQxM2MwMiwkNDJlZWZmN2UsJDQ4ZWU3ZmZmCisJZGMubAkkZmZjMDYxZmYsJDAwMDA0MjRlLCQ0YTAwNjZmZiwkMDAwMDQyNzQKKwlkYy5sCSQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwLCQ0MjcwNzJmZQorCWRjLmwJJDc0MDE3NjAwLCQzZDdjMDAxOCwkZmY3YzQ0ZmMsJDAwMWQ0OGVlCisJZGMubAkkN2ZmZmZmODAsJDRjNDEzYzAyLCQ0MmVlZmY3ZSwkNDhlZTdmZmYKKwlkYy5sCSRmZmMwMmQ3YywkMDAwMDAwMDAsJGZmODgyZDdjLCQ4MDAwMDAwMAorCWRjLmwJJGZmOGM2MWZmLCQwMDAwNDFmZSwkNGEwMDY2ZmYsJDAwMDA0MjI0CisJZGMubAkkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMCwkNDIyMDcyMDIKKwlkYy5sCSQ3NDAxNzYwMCwkM2Q3YzAwMWUsJGZmN2M0NGZjLCQwMDFkNDhlZQorCWRjLmwJJDdmZmZmZjgwLCQ0YzQxM2MwMiwkNDJlZWZmN2UsJDQ4ZWU3ZmZmCisJZGMubAkkZmZjMDYxZmYsJDAwMDA0MWJlLCQ0YTAwNjZmZiwkMDAwMDQxZTQKKwlkYy5sCSQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwLCQ0MWUwNzJmZgorCWRjLmwJJDc0ZmU3NmZmLCQzZDdjMDAwOCwkZmY3YzQ0ZmMsJDAwMDA0OGVlCisJZGMubAkkN2ZmZmZmODAsJDRjNDEzNDAyLCQ0MmVlZmY3ZSwkNDhlZTdmZmYKKwlkYy5sCSRmZmMwNjFmZiwkMDAwMDQxN2UsJDRhMDA2NmZmLCQwMDAwNDFhNAorCWRjLmwJJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDQxYTA3MmZmCisJZGMubAkkNzRmZTc2ZmYsJDNkN2MwMDA4LCRmZjdjNDRmYywkMDAwMDQ4ZWUKKwlkYy5sCSQ3ZmZmZmY4MCwkNGM3YzI0MDIsJGZmZmZmZmZmLCQ0MmVlZmY3ZQorCWRjLmwJJDQ4ZWU3ZmZmLCRmZmMwMmQ3YywkZmZmZmZmZmYsJGZmODg2MWZmCisJZGMubAkkMDAwMDQxMzIsJDRhMDA2NmZmLCQwMDAwNDE1OCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDQxNTQyMjNjLCQwMDAwZmZmZgorCWRjLmwJJDc0MDEyNjNjLCQ1NTU1NTU1NSwkM2Q3YzAwMDAsJGZmN2M0NGZjCisJZGMubAkkMDAwMDQ4ZWUsJDdmZmZmZjgwLCQ0YzQxMzQwMiwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlN2ZmZiwkZmZjMDJkN2MsJDAwMDBhYWFiLCRmZjg4MmQ3YworCWRjLmwJJDAwMDE1NTU2LCRmZjhjNjFmZiwkMDAwMDQwZGEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDQxMDAsJDIyMmVmZjc4LCQ0MjgwNGU3NSwkMDk2MzYxNzMKKwlkYy5sCSQyZTJlMmUwMCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDQwZWM0MWVlLCRmZjYxMzBiYywkYWFhYTMyM2MsJGFhYWEzNDNjCisJZGMubAkkYmJiYjNkN2MsJDAwMTRmZjdjLCQ0NGZjMDAxMCwkNDhlZTdmZmYKKwlkYy5sCSRmZjgwMGNkMCwkMDA4MTQyZWUsJGZmN2UzNjEwLCQzZDdjYmJiYgorCWRjLmwJJGZmOGU0OGVlLCQ3ZmZmZmZjMCwkNjFmZjAwMDAsJDQwNzg0YTAwCisJZGMubAkkNjZmZjAwMDAsJDQwOWU1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAKKwlkYy5sCSQwMDAwNDA5YSwkNDFlZWZmNjEsJDMwYmNlZWVlLCQzMjNjYWFhYQorCWRjLmwJJDM0M2NiYmJiLCQzZDdjMDAwMCwkZmY3YzQ0ZmMsJDAwMDA0OGVlCisJZGMubAkkN2ZmZmZmODAsJDBjZDAwMDgxLCQ0MmVlZmY3ZSwkMzYxMDNkN2MKKwlkYy5sCSRlZWVlZmY4NiwkM2Q3Y2VlZWUsJGZmOGU0OGVlLCQ3ZmZmZmZjMAorCWRjLmwJJDYxZmYwMDAwLCQ0MDIwNGEwMCwkNjZmZjAwMDAsJDQwNDY1MmFlCisJZGMubAkkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwNDA0MiwkNDFlZWZmNjIKKwlkYy5sCSQyMGJjYWFhYSwkYWFhYTIyM2MsJGFhYWFhYWFhLCQyNDNjYmJiYgorCWRjLmwJJGJiYmIzZDdjLCQwMDA0ZmY3YywkNDRmYzAwMDAsJDQ4ZWU3ZmZmCisJZGMubAkkZmY4MDBlZDAsJDAwODE0MmVlLCRmZjdlMjYxMCwkMmQ3Y2JiYmIKKwlkYy5sCSRiYmJiZmY4YywkNDhlZTdmZmYsJGZmYzA2MWZmLCQwMDAwM2ZjNgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwM2ZlYywkNTJhZWZmNzgsJDRjZmIzZmZmCisJZGMubAkkMDE3MDAwMDAsJDNmZTg0MWVlLCRmZjYyMjBiYywkZWVlZWVlZWUKKwlkYy5sCSQyMjNjYWFhYSwkYWFhYTI0M2MsJGJiYmJiYmJiLCQzZDdjMDAwMAorCWRjLmwJJGZmN2M0NGZjLCQwMDAwNDhlZSwkN2ZmZmZmODAsJDBlZDAwMDgxCisJZGMubAkkNDJlZWZmN2UsJDI2MTAyZDdjLCRlZWVlZWVlZSwkZmY4NDJkN2MKKwlkYy5sCSRlZWVlZWVlZSwkZmY4YzQ4ZWUsJDdmZmZmZmMwLCQ2MWZmMDAwMAorCWRjLmwJJDNmNjQ0YTAwLCQ2NmZmMDAwMCwkM2Y4YTUyYWUsJGZmNzg0Y2ZiCisJZGMubAkkM2ZmZjAxNzAsJDAwMDAzZjg2LCQ0MWVlZmY2MSwkMjBiY2FhYWEKKwlkYy5sCSRhYWFhMjIzYywkYWFhYWFhYWEsJDI0M2NiYmJiLCRiYmJiM2Q3YworCWRjLmwJJDAwMDRmZjdjLCQ0NGZjMDAwMCwkNDhlZTdmZmYsJGZmODAwZWQwCisJZGMubAkkMDA4MTQyZWUsJGZmN2UyNjEwLCQyZDdjYmJiYiwkYmJiYmZmOGMKKwlkYy5sCSQ0OGVlN2ZmZiwkZmZjMDYxZmYsJDAwMDAzZjBhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAzZjMwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkM2YyYzQxZWUsJGZmNjEyMGJjLCQ3ZmZmZmZmZiwkMjIzYzgwMDAKKwlkYy5sCSQwMDAwMjQzYywkYmJiYmJiYmIsJDNkN2MwMDFiLCRmZjdjNDRmYworCWRjLmwJJDAwMTA0OGVlLCQ3ZmZmZmY4MCwkMGVkMDAwODEsJDQyZWVmZjdlCisJZGMubAkkMjYxMDJkN2MsJDdmZmZmZmZmLCRmZjg0MmQ3YywkN2ZmZmZmZmYKKwlkYy5sCSRmZjhjNDhlZSwkN2ZmZmZmYzAsJDYxZmYwMDAwLCQzZWE4NGEwMAorCWRjLmwJJDY2ZmYwMDAwLCQzZWNlMjIyZSwkZmY3ODQyODAsJDRlNzUwOTYzCisJZGMubAkkNjE3MzMyMmUsJDJlMmUwMDAwLCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkM2ViODQxZWUsJGZmNjA0M2VlLCRmZjY0MjBiYworCWRjLmwJJGFhYWFhYWFhLCQyMmJjYmJiYiwkYmJiYjIyM2MsJGFhYWFhYWFhCisJZGMubAkkMjQzY2JiYmIsJGJiYmIyNjNjLCRjY2NjY2NjYywkMjgzY2RkZGQKKwlkYy5sCSRkZGRkM2Q3YywkMDAxNGZmN2MsJDQ0ZmMwMDEwLCQ0OGVlN2ZmZgorCWRjLmwJJGZmODAwZWZjLCQ4MGMxOTEwMiwkNDJlZWZmN2UsJDJhMTAyYzExCisJZGMubAkkMmQ3Y2NjY2MsJGNjY2NmZjk0LCQyZDdjZGRkZCwkZGRkZGZmOTgKKwlkYy5sCSQ0OGVlN2ZmZiwkZmZjMDYxZmYsJDAwMDAzZTFhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAzZTQwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkM2UzYzQxZWUsJGZmNjE0M2VlLCRmZjY1MjBiYywkYWFhYWFhYWEKKwlkYy5sCSQyMmJjYmJiYiwkYmJiYjIyM2MsJGFhYWFhYWFhLCQyNDNjYmJiYgorCWRjLmwJJGJiYmIyNjNjLCRjY2NjY2NjYywkMjgzY2RkZGQsJGRkZGQzZDdjCisJZGMubAkkMDAxNGZmN2MsJDQ0ZmMwMDEwLCQ0OGVlN2ZmZiwkZmY4MDBlZmMKKwlkYy5sCSQ4MGMxOTEwMiwkNDJlZWZmN2UsJDJhMTAyYzExLCQyZDdjY2NjYworCWRjLmwJJGNjY2NmZjk0LCQyZDdjZGRkZCwkZGRkZGZmOTgsJDQ4ZWU3ZmZmCisJZGMubAkkZmZjMDYxZmYsJDAwMDAzZDllLCQ0YTAwNjZmZiwkMDAwMDNkYzQKKwlkYy5sCSQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwLCQzZGMwNDFlZQorCWRjLmwJJGZmNjI0M2VlLCRmZjY2MjBiYywkYWFhYWFhYWEsJDIyYmNiYmJiCisJZGMubAkkYmJiYjIyM2MsJGFhYWFhYWFhLCQyNDNjYmJiYiwkYmJiYjI2M2MKKwlkYy5sCSRjY2NjY2NjYywkMjgzY2RkZGQsJGRkZGQzZDdjLCQwMDE0ZmY3YworCWRjLmwJJDQ0ZmMwMDEwLCQ0OGVlN2ZmZiwkZmY4MDBlZmMsJDgwYzE5MTAyCisJZGMubAkkNDJlZWZmN2UsJDJhMTAyYzExLCQyZDdjY2NjYywkY2NjY2ZmOTQKKwlkYy5sCSQyZDdjZGRkZCwkZGRkZGZmOTgsJDQ4ZWU3ZmZmLCRmZmMwNjFmZgorCWRjLmwJJDAwMDAzZDIyLCQ0YTAwNjZmZiwkMDAwMDNkNDgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQzZDQ0NDFlZSwkZmY2MDQzZWUKKwlkYy5sCSRmZjY0MjBiYywkZWVlZWVlZWUsJDIyYmNiYmJiLCRiYmJiMjIzYworCWRjLmwJJGFhYWFhYWFhLCQyNDNjYmJiYiwkYmJiYjI2M2MsJGNjY2NjY2NjCisJZGMubAkkMjgzY2RkZGQsJGRkZGQzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAKKwlkYy5sCSQ0OGVlN2ZmZiwkZmY4MDBlZmMsJDgwYzE5MTAyLCQ0MmVlZmY3ZQorCWRjLmwJJDJhMTAyYzExLCQyZDdjZWVlZSwkZWVlZWZmODQsJDJkN2NiYmJiCisJZGMubAkkYmJiYmZmODgsJDJkN2NlZWVlLCRlZWVlZmY5NCwkMmQ3Y2JiYmIKKwlkYy5sCSRiYmJiZmY5OCwkNDhlZTdmZmYsJGZmYzA2MWZmLCQwMDAwM2M5NgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwM2NiYywkNTJhZWZmNzgsJDRjZmIzZmZmCisJZGMubAkkMDE3MDAwMDAsJDNjYjg0MWVlLCRmZjYxNDNlZSwkZmY2NTIwYmMKKwlkYy5sCSRlZWVlZWVlZSwkMjJiY2JiYmIsJGJiYmIyMjNjLCRhYWFhYWFhYQorCWRjLmwJJDI0M2NiYmJiLCRiYmJiMjYzYywkY2NjY2NjY2MsJDI4M2NkZGRkCisJZGMubAkkZGRkZDNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZTdmZmYKKwlkYy5sCSRmZjgwMGVmYywkODBjMTkxMDIsJDQyZWVmZjdlLCQyYTEwMmMxMQorCWRjLmwJJDJkN2NlZWVlLCRlZWVlZmY4NCwkMmQ3Y2JiYmIsJGJiYmJmZjg4CisJZGMubAkkMmQ3Y2VlZWUsJGVlZWVmZjk0LCQyZDdjYmJiYiwkYmJiYmZmOTgKKwlkYy5sCSQ0OGVlN2ZmZiwkZmZjMDYxZmYsJDAwMDAzYzBhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAzYzMwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkM2MyYzQxZWUsJGZmNjI0M2VlLCRmZjY2MjBiYywkZWVlZWVlZWUKKwlkYy5sCSQyMmJjYmJiYiwkYmJiYjIyM2MsJGFhYWFhYWFhLCQyNDNjYmJiYgorCWRjLmwJJGJiYmIyNjNjLCRjY2NjY2NjYywkMjgzY2RkZGQsJGRkZGQzZDdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlN2ZmZiwkZmY4MDBlZmMKKwlkYy5sCSQ4MGMxOTEwMiwkNDJlZWZmN2UsJDJhMTAyYzExLCQyZDdjZWVlZQorCWRjLmwJJGVlZWVmZjg0LCQyZDdjYmJiYiwkYmJiYmZmODgsJDJkN2NlZWVlCisJZGMubAkkZWVlZWZmOTQsJDJkN2NiYmJiLCRiYmJiZmY5OCwkNDhlZTdmZmYKKwlkYy5sCSRmZmMwNjFmZiwkMDAwMDNiN2UsJDRhMDA2NmZmLCQwMDAwM2JhNAorCWRjLmwJJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDNiYTA0MWVlCisJZGMubAkkZmY2MDQzZWUsJGZmNjQyMGJjLCRhYWFhYWFhYSwkMjJiY2VlZWUKKwlkYy5sCSRlZWVlMjIzYywkYWFhYWFhYWEsJDI0M2NiYmJiLCRiYmJiMjYzYworCWRjLmwJJGNjY2NjY2NjLCQyODNjZGRkZCwkZGRkZDNkN2MsJDAwMDBmZjdjCisJZGMubAkkNDRmYzAwMDAsJDQ4ZWU3ZmZmLCRmZjgwMGVmYywkODBjMTkxMDIKKwlkYy5sCSQ0MmVlZmY3ZSwkMmExMDJjMTEsJDJkN2NhYWFhLCRhYWFhZmY4NAorCWRjLmwJJDJkN2NlZWVlLCRlZWVlZmY4OCwkMmQ3Y2FhYWEsJGFhYWFmZjk0CisJZGMubAkkMmQ3Y2VlZWUsJGVlZWVmZjk4LCQ0OGVlN2ZmZiwkZmZjMDYxZmYKKwlkYy5sCSQwMDAwM2FmMiwkNGEwMDY2ZmYsJDAwMDAzYjE4LCQ1MmFlZmY3OAorCWRjLmwJJDRjZmIzZmZmLCQwMTcwMDAwMCwkM2IxNDQxZWUsJGZmNjE0M2VlCisJZGMubAkkZmY2NTIwYmMsJGFhYWFhYWFhLCQyMmJjZWVlZSwkZWVlZTIyM2MKKwlkYy5sCSRhYWFhYWFhYSwkMjQzY2JiYmIsJGJiYmIyNjNjLCRjY2NjY2NjYworCWRjLmwJJDI4M2NkZGRkLCRkZGRkM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZTdmZmYsJGZmODAwZWZjLCQ4MGMxOTEwMiwkNDJlZWZmN2UKKwlkYy5sCSQyYTEwMmMxMSwkMmQ3Y2FhYWEsJGFhYWFmZjg0LCQyZDdjZWVlZQorCWRjLmwJJGVlZWVmZjg4LCQyZDdjYWFhYSwkYWFhYWZmOTQsJDJkN2NlZWVlCisJZGMubAkkZWVlZWZmOTgsJDQ4ZWU3ZmZmLCRmZmMwNjFmZiwkMDAwMDNhNjYKKwlkYy5sCSQ0YTAwNjZmZiwkMDAwMDNhOGMsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZgorCWRjLmwJJDAxNzAwMDAwLCQzYTg4NDFlZSwkZmY2MjQzZWUsJGZmNjYyMGJjCisJZGMubAkkYWFhYWFhYWEsJDIyYmM3ZmZmLCRmZmZmMjIzYywkYWFhYWFhYWEKKwlkYy5sCSQyNDNjODAwMCwkMDAwMDI2M2MsJGNjY2NjY2NjLCQyODNjZGRkZAorCWRjLmwJJGRkZGQzZDdjLCQwMDBiZmY3YywkNDRmYzAwMDAsJDQ4ZWU3ZmZmCisJZGMubAkkZmY4MDBlZmMsJDgwYzE5MTAyLCQ0MmVlZmY3ZSwkMmExMDJjMTEKKwlkYy5sCSQyZDdjYWFhYSwkYWFhYWZmODQsJDJkN2M3ZmZmLCRmZmZmZmY4OAorCWRjLmwJJDJkN2NhYWFhLCRhYWFhZmY5NCwkMmQ3YzdmZmYsJGZmZmZmZjk4CisJZGMubAkkNDhlZTdmZmYsJGZmYzA2MWZmLCQwMDAwMzlkYSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwM2EwMCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDM5ZmM0MWVlLCRmZjYwNDNlZSwkZmY2NDMwYmMsJGFhYWEzMmJjCisJZGMubAkkYmJiYjMyM2MsJGFhYWEzNDNjLCRiYmJiMzYzYywkY2NjYzM4M2MKKwlkYy5sCSRkZGRkM2Q3YywkMDAxNGZmN2MsJDQ0ZmMwMDEwLCQ0OGVlN2ZmZgorCWRjLmwJJGZmODAwY2ZjLCQ4MGMxOTEwMiwkNDJlZWZmN2UsJDNhMTAzYzExCisJZGMubAkkM2Q3Y2NjY2MsJGZmOTYzZDdjLCRkZGRkZmY5YSwkNDhlZTdmZmYKKwlkYy5sCSRmZmMwNjFmZiwkMDAwMDM5NmUsJDRhMDA2NmZmLCQwMDAwMzk5NAorCWRjLmwJJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDM5OTA0MWVlCisJZGMubAkkZmY2MTQzZWUsJGZmNjUzMGJjLCRhYWFhMzJiYywkYmJiYjMyM2MKKwlkYy5sCSRhYWFhMzQzYywkYmJiYjM2M2MsJGNjY2MzODNjLCRkZGRkM2Q3YworCWRjLmwJJDAwMDRmZjdjLCQ0NGZjMDAwMCwkNDhlZTdmZmYsJGZmODAwY2ZjCisJZGMubAkkODBjMTkxMDIsJDQyZWVmZjdlLCQzYTEwM2MxMSwkM2Q3Y2NjY2MKKwlkYy5sCSRmZjk2M2Q3YywkZGRkZGZmOWEsJDQ4ZWU3ZmZmLCRmZmMwNjFmZgorCWRjLmwJJDAwMDAzOTAyLCQ0YTAwNjZmZiwkMDAwMDM5MjgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQzOTI0NDFlZSwkZmY2MDQzZWUKKwlkYy5sCSRmZjY0MzBiYywkZWVlZTMyYmMsJGJiYmIzMjNjLCRhYWFhMzQzYworCWRjLmwJJGJiYmIzNjNjLCRjY2NjMzgzYywkZGRkZDNkN2MsJDAwMDBmZjdjCisJZGMubAkkNDRmYzAwMDAsJDQ4ZWU3ZmZmLCRmZjgwMGNmYywkODBjMTkxMDIKKwlkYy5sCSQ0MmVlZmY3ZSwkM2ExMDNjMTEsJDNkN2NlZWVlLCRmZjg2M2Q3YworCWRjLmwJJGJiYmJmZjhhLCQzZDdjZWVlZSwkZmY5NjNkN2MsJGJiYmJmZjlhCisJZGMubAkkNDhlZTdmZmYsJGZmYzA2MWZmLCQwMDAwMzg4YSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMzhiMCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDM4YWM0MWVlLCRmZjYxNDNlZSwkZmY2NTMwYmMsJGVlZWUzMmJjCisJZGMubAkkYmJiYjMyM2MsJGFhYWEzNDNjLCRiYmJiMzYzYywkY2NjYzM4M2MKKwlkYy5sCSRkZGRkM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlN2ZmZgorCWRjLmwJJGZmODAwY2ZjLCQ4MGMxOTEwMiwkNDJlZWZmN2UsJDNhMTAzYzExCisJZGMubAkkM2Q3Y2VlZWUsJGZmODYzZDdjLCRiYmJiZmY4YSwkM2Q3Y2VlZWUKKwlkYy5sCSRmZjk2M2Q3YywkYmJiYmZmOWEsJDQ4ZWU3ZmZmLCRmZmMwNjFmZgorCWRjLmwJJDAwMDAzODEyLCQ0YTAwNjZmZiwkMDAwMDM4MzgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQzODM0NDFlZSwkZmY2MDQzZWUKKwlkYy5sCSRmZjY0MzBiYywkYWFhYTMyYmMsJGVlZWUzMjNjLCRhYWFhMzQzYworCWRjLmwJJGJiYmIzNjNjLCRjY2NjMzgzYywkZGRkZDNkN2MsJDAwMDBmZjdjCisJZGMubAkkNDRmYzAwMDAsJDQ4ZWU3ZmZmLCRmZjgwMGNmYywkODBjMTkxMDIKKwlkYy5sCSQ0MmVlZmY3ZSwkM2ExMDNjMTEsJDNkN2NhYWFhLCRmZjg2M2Q3YworCWRjLmwJJGVlZWVmZjhhLCQzZDdjYWFhYSwkZmY5NjNkN2MsJGVlZWVmZjlhCisJZGMubAkkNDhlZTdmZmYsJGZmYzA2MWZmLCQwMDAwMzc5YSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMzdjMCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDM3YmM0MWVlLCRmZjYxNDNlZSwkZmY2NTMwYmMsJGFhYWEzMmJjCisJZGMubAkkN2ZmZjMyM2MsJGFhYWEzNDNjLCQ4MDAwMzYzYywkY2NjYzM4M2MKKwlkYy5sCSRkZGRkM2Q3YywkMDAxYmZmN2MsJDQ0ZmMwMDEwLCQ0OGVlN2ZmZgorCWRjLmwJJGZmODAwY2ZjLCQ4MGMxOTEwMiwkNDJlZWZmN2UsJDNhMTAzYzExCisJZGMubAkkM2Q3Y2FhYWEsJGZmODYzZDdjLCQ3ZmZmZmY4YSwkM2Q3Y2FhYWEKKwlkYy5sCSRmZjk2M2Q3YywkN2ZmZmZmOWEsJDQ4ZWU3ZmZmLCRmZmMwNjFmZgorCWRjLmwJJDAwMDAzNzIyLCQ0YTAwNjZmZiwkMDAwMDM3NDgsJDIyMmVmZjc4CisJZGMubAkkNDI4MDRlNzUsJDA5NjM2ZDcwLCQzMjJjNjM2OCwkNmIzMjJlMmUKKwlkYy5sCSQyZTAwNTFmYywkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDM3MmMzZDdjLCQyMDQwZmY2MCwkMjIzYzExMTEsJDExMjAzZDdjCisJZGMubAkkMDAwNGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlN2ZmZiwkZmY4MDAwZWUKKwlkYy5sCSQxMDAwZmY2MCwkNDJlZWZmN2UsJDQ4ZWU3ZmZmLCRmZmMwNjFmZgorCWRjLmwJJDAwMDAzNmMyLCQ0YTAwNjZmZiwkMDAwMDM2ZTgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQzNmU0M2Q3YywkMjA0MGZmNjAKKwlkYy5sCSQyMjdjMDAwMCwkMDA0MDNkN2MsJDAwMDRmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWU3ZmZmLCRmZjgwMDBlZSwkOTAwMGZmNjAsJDQyZWVmZjdlCisJZGMubAkkNDhlZTdmZmYsJGZmYzA2MWZmLCQwMDAwMzY3YSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMzZhMCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDM2OWMzZDdjLCQyMDQwZmY2MCwkMjIzYzExMTEsJDExMzAzZDdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlN2ZmZiwkZmY4MDAwZWUKKwlkYy5sCSQxODAwZmY2MCwkNDJlZWZmN2UsJDQ4ZWU3ZmZmLCRmZmMwNjFmZgorCWRjLmwJJDAwMDAzNjMyLCQ0YTAwNjZmZiwkMDAwMDM2NTgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQzNjU0M2Q3YywkMjA0MGZmNjAKKwlkYy5sCSQyMjdjMDAwMCwkMDAxMDNkN2MsJDAwMDFmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWU3ZmZmLCRmZjgwMDBlZSwkOTAwMGZmNjAsJDQyZWVmZjdlCisJZGMubAkkNDhlZTdmZmYsJGZmYzA2MWZmLCQwMDAwMzVlYSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMzYxMCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDM2MGMzZDdjLCQyMDQwZmY2MCwkMjIzYzExMTEsJDExNTAzZDdjCisJZGMubAkkMDAwMWZmN2MsJDQ0ZmMwMDAwLCQ0OGVlN2ZmZiwkZmY4MDAwZWUKKwlkYy5sCSQxMDAwZmY2MCwkNDJlZWZmN2UsJDQ4ZWU3ZmZmLCRmZmMwNjFmZgorCWRjLmwJJDAwMDAzNWEyLCQ0YTAwNjZmZiwkMDAwMDM1YzgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQzNWM0M2Q3YywkMjA0MGZmNjAKKwlkYy5sCSQyMjdjMDAwMCwkMDA5MDNkN2MsJDAwMDFmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWU3ZmZmLCRmZjgwMDBlZSwkOTAwMGZmNjAsJDQyZWVmZjdlCisJZGMubAkkNDhlZTdmZmYsJGZmYzA2MWZmLCQwMDAwMzU1YSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMzU4MCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDM1N2MyZDdjLCQyMDAwYTAwMCwkZmY2MDIyM2MsJDExMTEyMDAwCisJZGMubAkkM2Q3YzAwMDQsJGZmN2M0NGZjLCQwMDAwNDhlZSwkN2ZmZmZmODAKKwlkYy5sCSQwMmVlMTAwMCwkZmY2MDQyZWUsJGZmN2U0OGVlLCQ3ZmZmZmZjMAorCWRjLmwJJDYxZmYwMDAwLCQzNTEwNGEwMCwkNjZmZjAwMDAsJDM1MzY1MmFlCisJZGMubAkkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwMzUzMiwkMmQ3YzIwMDAKKwlkYy5sCSRhMDAwZmY2MCwkMjI3Y2ZmZmYsJGEwMDAzZDdjLCQwMDA0ZmY3YworCWRjLmwJJDQ0ZmMwMDAwLCQ0OGVlN2ZmZiwkZmY4MDAyZWUsJDkwMDBmZjYwCisJZGMubAkkNDJlZWZmN2UsJDQ4ZWU3ZmZmLCRmZmMwNjFmZiwkMDAwMDM0YzYKKwlkYy5sCSQ0YTAwNjZmZiwkMDAwMDM0ZWMsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZgorCWRjLmwJJDAxNzAwMDAwLCQzNGU4MmQ3YywkMjAwMGEwMDAsJGZmNjAyMjNjCisJZGMubAkkMTExMTMwMDAsJDNkN2MwMDAwLCRmZjdjNDRmYywkMDAwMDQ4ZWUKKwlkYy5sCSQ3ZmZmZmY4MCwkMDJlZTE4MDAsJGZmNjA0MmVlLCRmZjdlNDhlZQorCWRjLmwJJDdmZmZmZmMwLCQ2MWZmMDAwMCwkMzQ3YzRhMDAsJDY2ZmYwMDAwCisJZGMubAkkMzRhMjUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MCwkMDAwMDM0OWUKKwlkYy5sCSQyZDdjMjAwMCwkYTAwMGZmNjAsJDIyN2NmZmZmLCQ5MDAwM2Q3YworCWRjLmwJJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZTdmZmYsJGZmODAwMmVlCisJZGMubAkkOTAwMGZmNjAsJDQyZWVmZjdlLCQ0OGVlN2ZmZiwkZmZjMDYxZmYKKwlkYy5sCSQwMDAwMzQzMiwkNGEwMDY2ZmYsJDAwMDAzNDU4LCQ1MmFlZmY3OAorCWRjLmwJJDRjZmIzZmZmLCQwMTcwMDAwMCwkMzQ1NDJkN2MsJDIwMDBhMDAwCisJZGMubAkkZmY2MDIyM2MsJDExMTExMDAwLCQzZDdjMDAwMSwkZmY3YzQ0ZmMKKwlkYy5sCSQwMDAwNDhlZSwkN2ZmZmZmODAsJDAyZWUxMDAwLCRmZjYwNDJlZQorCWRjLmwJJGZmN2U0OGVlLCQ3ZmZmZmZjMCwkNjFmZjAwMDAsJDMzZTg0YTAwCisJZGMubAkkNjZmZjAwMDAsJDM0MGU1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAKKwlkYy5sCSQwMDAwMzQwYSwkMmQ3YzIwMDAsJGEwMDBmZjYwLCQyMjdjZmZmZgorCWRjLmwJJGIwMDAzZDdjLCQwMDAxZmY3YywkNDRmYzAwMDAsJDQ4ZWU3ZmZmCisJZGMubAkkZmY4MDAyZWUsJDkwMDBmZjYwLCQ0MmVlZmY3ZSwkNDhlZTdmZmYKKwlkYy5sCSRmZmMwNjFmZiwkMDAwMDMzOWUsJDRhMDA2NmZmLCQwMDAwMzNjNAorCWRjLmwJJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDMzYzAyZDdjCisJZGMubAkkYTAwMDAwMDAsJGZmNjAyZDdjLCRjMDAwMDAwMCwkZmY2NDIyM2MKKwlkYy5sCSRhMDAwMDAwMCwkM2Q3YzAwMGMsJGZmN2M0NGZjLCQwMDA4NDhlZQorCWRjLmwJJDdmZmZmZjgwLCQwNGVlMTAwMCwkZmY2MDQyZWUsJGZmN2U0OGVlCisJZGMubAkkN2ZmZmZmYzAsJDYxZmYwMDAwLCQzMzRjNGEwMCwkNjZmZjAwMDAKKwlkYy5sCSQzMzcyNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwMzM2ZQorCWRjLmwJJDJkN2NhMDAwLCQwMDAwZmY2MCwkMmQ3Y2MwMDAsJDAwMDBmZjY0CisJZGMubAkkMjI3Y2MwMDAsJDAwMDAzZDdjLCQwMDBjZmY3YywkNDRmYzAwMDgKKwlkYy5sCSQ0OGVlN2ZmZiwkZmY4MDA0ZWUsJDkwMDBmZjYwLCQ0MmVlZmY3ZQorCWRjLmwJJDQ4ZWU3ZmZmLCRmZmMwNjFmZiwkMDAwMDMyZmEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDMzMjAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQzMzFjMmQ3YywkYTAwMDAwMDAsJGZmNjAyZDdjLCRjMDAwMDAwMAorCWRjLmwJJGZmNjQyMjNjLCRiMDAwMDAwMCwkM2Q3YzAwMDgsJGZmN2M0NGZjCisJZGMubAkkMDAwODQ4ZWUsJDdmZmZmZjgwLCQwNGVlMTgwMCwkZmY2MDQyZWUKKwlkYy5sCSRmZjdlNDhlZSwkN2ZmZmZmYzAsJDYxZmYwMDAwLCQzMmE4NGEwMAorCWRjLmwJJDY2ZmYwMDAwLCQzMmNlNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwCisJZGMubAkkMDAwMDMyY2EsJDJkN2NhMDAwLCQwMDAwZmY2MCwkMmQ3Y2MwMDAKKwlkYy5sCSQwMDAwZmY2NCwkMjI3YzEwMDAsJDAwMDAzZDdjLCQwMDA5ZmY3YworCWRjLmwJJDQ0ZmMwMDA4LCQ0OGVlN2ZmZiwkZmY4MDA0ZWUsJDkwMDBmZjYwCisJZGMubAkkNDJlZWZmN2UsJDQ4ZWU3ZmZmLCRmZmMwNjFmZiwkMDAwMDMyNTYKKwlkYy5sCSQ0YTAwNjZmZiwkMDAwMDMyN2MsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZgorCWRjLmwJJDAxNzAwMDAwLCQzMjc4MmQ3YywkYTAwMDAwMDAsJGZmNjAyZDdjCisJZGMubAkkYzAwMDAwMDAsJGZmNjQyMjNjLCQ5MDAwMDAwMCwkM2Q3YzAwMDkKKwlkYy5sCSRmZjdjNDRmYywkMDAwODQ4ZWUsJDdmZmZmZjgwLCQwNGVlMTAwMAorCWRjLmwJJGZmNjA0MmVlLCRmZjdlNDhlZSwkN2ZmZmZmYzAsJDYxZmYwMDAwCisJZGMubAkkMzIwNDRhMDAsJDY2ZmYwMDAwLCQzMjJhNTJhZSwkZmY3ODRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDMyMjYsJDJkN2NhMDAwLCQwMDAwZmY2MAorCWRjLmwJJDJkN2NjMDAwLCQwMDAwZmY2NCwkMjI3Y2QwMDAsJDAwMDAzZDdjCisJZGMubAkkMDAwOWZmN2MsJDQ0ZmMwMDA4LCQ0OGVlN2ZmZiwkZmY4MDA0ZWUKKwlkYy5sCSQ5MDAwZmY2MCwkNDJlZWZmN2UsJDQ4ZWU3ZmZmLCRmZmMwNjFmZgorCWRjLmwJJDAwMDAzMWIyLCQ0YTAwNjZmZiwkMDAwMDMxZDgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQzMWQ0M2Q3YywkYTA0MGZmNjAKKwlkYy5sCSQyMjNjMTExMSwkMTFhMDNkN2MsJDAwMDRmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWU3ZmZmLCRmZjgwMDBlZSwkMTAwMGZmNjAsJDQyZWVmZjdlCisJZGMubAkkNDhlZTdmZmYsJGZmYzA2MWZmLCQwMDAwMzE2YSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMzE5MCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDMxOGMzZDdjLCRhMDQwZmY2MCwkMjI3YzAwMDAsJDAwNDAzZDdjCisJZGMubAkkMDAwNGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlN2ZmZiwkZmY4MDAwZWUKKwlkYy5sCSQ5ODAwZmY2MCwkNDJlZWZmN2UsJDQ4ZWU3ZmZmLCRmZmMwNjFmZgorCWRjLmwJJDAwMDAzMTIyLCQ0YTAwNjZmZiwkMDAwMDMxNDgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQzMTQ0M2Q3YywkYTA0MGZmNjAKKwlkYy5sCSQyMjNjMTExMSwkMTFiMDNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWU3ZmZmLCRmZjgwMDBlZSwkMTAwMGZmNjAsJDQyZWVmZjdlCisJZGMubAkkNDhlZTdmZmYsJGZmYzA2MWZmLCQwMDAwMzBkYSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMzEwMCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDMwZmMzZDdjLCRhMDQwZmY2MCwkMjI3YzAwMDAsJDAwMTAzZDdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlN2ZmZiwkZmY4MDAwZWUKKwlkYy5sCSQ5MDAwZmY2MCwkNDJlZWZmN2UsJDQ4ZWU3ZmZmLCRmZmMwNjFmZgorCWRjLmwJJDAwMDAzMDkyLCQ0YTAwNjZmZiwkMDAwMDMwYjgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQzMGI0M2Q3YywkYTA0MGZmNjAKKwlkYy5sCSQyMjNjMTExMSwkMTE5MDNkN2MsJDAwMDFmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWU3ZmZmLCRmZjgwMDBlZSwkMTAwMGZmNjAsJDQyZWVmZjdlCisJZGMubAkkNDhlZTdmZmYsJGZmYzA2MWZmLCQwMDAwMzA0YSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMzA3MCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDMwNmMzZDdjLCRhMDQwZmY2MCwkMjI3YzAwMDAsJDAwNTAzZDdjCisJZGMubAkkMDAwMWZmN2MsJDQ0ZmMwMDAwLCQ0OGVlN2ZmZiwkZmY4MDAwZWUKKwlkYy5sCSQ5MDAwZmY2MCwkNDJlZWZmN2UsJDQ4ZWU3ZmZmLCRmZmMwNjFmZgorCWRjLmwJJDAwMDAzMDAyLCQ0YTAwNjZmZiwkMDAwMDMwMjgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQzMDI0M2Q3YywkYTBjMGZmNjAKKwlkYy5sCSQyMjNjMTExMSwkMTFhMDNkN2MsJDAwMDRmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWU3ZmZmLCRmZjgwMDBlZSwkMTAwMGZmNjAsJDQyZWVmZjdlCisJZGMubAkkNDhlZTdmZmYsJGZmYzA2MWZmLCQwMDAwMmZiYSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMmZlMCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDJmZGMzZDdjLCRhMGMwZmY2MCwkMjI3Y2ZmZmYsJGZmYzAzZDdjCisJZGMubAkkMDAwNGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlN2ZmZiwkZmY4MDAwZWUKKwlkYy5sCSQ5MDAwZmY2MCwkNDJlZWZmN2UsJDQ4ZWU3ZmZmLCRmZmMwNjFmZgorCWRjLmwJJDAwMDAyZjcyLCQ0YTAwNjZmZiwkMDAwMDJmOTgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQyZjk0M2Q3YywkYTBjMGZmNjAKKwlkYy5sCSQyMjNjMTExMSwkMTFiMDNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWU3ZmZmLCRmZjgwMDBlZSwkMTgwMGZmNjAsJDQyZWVmZjdlCisJZGMubAkkNDhlZTdmZmYsJGZmYzA2MWZmLCQwMDAwMmYyYSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMmY1MCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDJmNGMzZDdjLCRhMGMwZmY2MCwkMjI3YzExMTEsJDExOTAzZDdjCisJZGMubAkkMDAwMWZmN2MsJDQ0ZmMwMDAwLCQ0OGVlN2ZmZiwkZmY4MDAwZWUKKwlkYy5sCSQ5MDAwZmY2MCwkNDJlZWZmN2UsJDQ4ZWU3ZmZmLCRmZmMwNjFmZgorCWRjLmwJJDAwMDAyZWUyLCQ0YTAwNjZmZiwkMDAwMDJmMDgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQyZjA0M2Q3YywkYTBjMGZmNjAKKwlkYy5sCSQyMjNjMTExMSwkMTFkMDNkN2MsJDAwMDFmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWU3ZmZmLCRmZjgwMDBlZSwkMTAwMGZmNjAsJDQyZWVmZjdlCisJZGMubAkkNDhlZTdmZmYsJGZmYzA2MWZmLCQwMDAwMmU5YSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMmVjMCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDJlYmMzZDdjLCRhMGMwZmY2MCwkMjI3YzAwMDAsJDAwNTAzZDdjCisJZGMubAkkMDAxYmZmN2MsJDQ0ZmMwMDFmLCQ0OGVlN2ZmZiwkZmY4MDAwZWUKKwlkYy5sCSQ5MDAwZmY2MCwkNDJlZWZmN2UsJDQ4ZWU3ZmZmLCRmZmMwNjFmZgorCWRjLmwJJDAwMDAyZTUyLCQ0YTAwNjZmZiwkMDAwMDJlNzgsJDIyMmVmZjc4CisJZGMubAkkNDI4MDRlNzUsJDA5NDU2NjY2LCQ2NTYzNzQ2OSwkNzY2NTIwNjEKKwlkYy5sCSQ2NDY0NzI2NSwkNzM3MzY1NzMsJDJlMmUyZTAwLCQ1MmFlZmY3OAorCWRjLmwJJDRjZmIzZmZmLCQwMTcwMDAwMCwkMmU1NDQyODIsJDc2MDI0MWVlCisJZGMubAkkZmY3NDNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYKKwlkYy5sCSRmZjgwNGMxMCwkMzQwMjQyZWUsJGZmN2U0OGVlLCRmZmZmZmZjMAorCWRjLmwJJDJkN2MwMDAwLCQwMDA0ZmY4YywkNjFmZjAwMDAsJDJkZTg0YTAwCisJZGMubAkkNjZmZjAwMDAsJDJlMGU1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAKKwlkYy5sCSQwMDAwMmUwYSwkNDI4Mjc2MDIsJDQxZWVmZjc0LCQzZDdjMDAwMAorCWRjLmwJJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAsJDRjMTgzNDAyCisJZGMubAkkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQKKwlkYy5sCSRmZjhjNDFlZSwkZmY3ODJkNDgsJGZmYTA2MWZmLCQwMDAwMmQ5NgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwMmRiYywkNTJhZWZmNzgsJDRjZmIzZmZmCisJZGMubAkkMDE3MDAwMDAsJDJkYjg0MjgyLCQ3NjAyNDFlZSwkZmY3ODNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMyMAorCWRjLmwJJDM0MDI0MmVlLCRmZjdlNDhlZSwkZmZmZmZmYzAsJDJkN2MwMDAwCisJZGMubAkkMDAwNGZmOGMsJDQxZWVmZjc0LCQyZDQ4ZmZhMCwkNjFmZjAwMDAKKwlkYy5sCSQyZDQ0NGEwMCwkNjZmZjAwMDAsJDJkNmE1MmFlLCRmZjc4NGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwMmQ2NiwkNDI4Mjc2MDIsJDQxZWUwZjc0CisJZGMubAkkM2Q3YzAwMDAsJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAKKwlkYy5sCSQ0YzI4MzQwMiwkZjAwMDQyZWUsJGZmN2U0OGVlLCRmZmZmZmZjMAorCWRjLmwJJDJkN2MwMDAwLCQwMDA0ZmY4YywkNjFmZjAwMDAsJDJjZjg0YTAwCisJZGMubAkkNjZmZjAwMDAsJDJkMWU1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAKKwlkYy5sCSQwMDAwMmQxYSwkNDI4Mjc2MDIsJDQxZWVlZjc0LCQzZDdjMDAwMAorCWRjLmwJJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAsJDRjMjgzNDAyCisJZGMubAkkMTAwMDQyZWUsJGZmN2U0OGVlLCRmZmZmZmZjMCwkMmQ3YzAwMDAKKwlkYy5sCSQwMDA0ZmY4YywkNjFmZjAwMDAsJDJjYWM0YTAwLCQ2NmZmMDAwMAorCWRjLmwJJDJjZDI1MmFlLCRmZjc4NTJhZSwkZmY3ODUyYWUsJGZmNzg0Y2ZiCisJZGMubAkkM2ZmZjAxNzAsJDAwMDAyY2M2LCQ0MjgyNzYwMiwkM2Q3YzAwMDAKKwlkYy5sCSRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwLCQ0YzNjMzQwMgorCWRjLmwJJDAwMDAwMDAyLCQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjCisJZGMubAkkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMmM1YSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMmM4MCwkNTJhZWZmNzgsJDYwMDQwMDAwLCQwMDAyNGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwMmM3NiwkNDI4Mjc2MDIsJDNkN2MwMDAwCisJZGMubAkkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MCwkNGMzYTM0MDIKKwlkYy5sCSRmZmRhNDJlZSwkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMAorCWRjLmwJJDAwMDRmZjhjLCQ2MWZmMDAwMCwkMmMwYzRhMDAsJDY2ZmYwMDAwCisJZGMubAkkMmMzMjUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MCwkMDAwMDJjMmUKKwlkYy5sCSQ0MjgyNzYwMiwkNDNlZWZmNzgsJDNkN2MwMDAwLCRmZjdjNDRmYworCWRjLmwJJDAwMDA0OGVlLCRmZmZmZmY4MCwkNGMyMTM0MDIsJDQyZWVmZjdlCisJZGMubAkkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzQxZWUKKwlkYy5sCSRmZjc0MmQ0OCwkZmZhNDYxZmYsJDAwMDAyYmJhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAyYmUwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMmJkYzQyODIsJDc2MDI0NWVlLCRmZjc4M2Q3YywkMDAwMGZmN2MKKwlkYy5sCSQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzIyLCQzNDAyNDJlZQorCWRjLmwJJGZmN2U0OGVlLCRmZmZmZmZjMCwkMmQ3YzAwMDAsJDAwMDRmZjhjCisJZGMubAkkNDFlZWZmNzQsJDJkNDhmZmE4LCQ2MWZmMDAwMCwkMmI2ODRhMDAKKwlkYy5sCSQ2NmZmMDAwMCwkMmI4ZTUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MAorCWRjLmwJJDAwMDAyYjhhLCQ0MjgyNzYwMiwkNDdlZWZmNzgsJDNkN2MwMDAwCisJZGMubAkkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MCwkNGMyMzM0MDIKKwlkYy5sCSQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNAorCWRjLmwJJGZmOGM0MWVlLCRmZjc0MmQ0OCwkZmZhYzYxZmYsJDAwMDAyYjE2CisJZGMubAkkNGEwMDY2ZmYsJDAwMDAyYjNjLCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkMmIzODQyODIsJDc2MDI0OWVlLCRmZjc4M2Q3YworCWRjLmwJJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzI0CisJZGMubAkkMzQwMjQyZWUsJGZmN2U0OGVlLCRmZmZmZmZjMCwkMmQ3YzAwMDAKKwlkYy5sCSQwMDA0ZmY4YywkNDFlZWZmNzQsJDJkNDhmZmIwLCQ2MWZmMDAwMAorCWRjLmwJJDJhYzQ0YTAwLCQ2NmZmMDAwMCwkMmFlYTUyYWUsJGZmNzg0Y2ZiCisJZGMubAkkM2ZmZjAxNzAsJDAwMDAyYWU2LCQ0MjgyNzYwMiwkNGJlZWZmNzgKKwlkYy5sCSQzZDdjMDAwMCwkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MAorCWRjLmwJJDRjMjUzNDAyLCQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjCisJZGMubAkkMDAwMDAwMDQsJGZmOGM0MWVlLCRmZjc0MmQ0OCwkZmZiNDYxZmYKKwlkYy5sCSQwMDAwMmE3MiwkNGEwMDY2ZmYsJDAwMDAyYTk4LCQ1MmFlZmY3OAorCWRjLmwJJDRjZmIzZmZmLCQwMTcwMDAwMCwkMmE5NDIyNGUsJDQyODI3NjAyCisJZGMubAkkNGRlOWZmNzgsJDMzN2MwMDAwLCRmZjdjNDRmYywkMDAwMDQ4ZTkKKwlkYy5sCSRmZmZmZmY4MCwkNGMyNjM0MDIsJDQyZTlmZjdlLCQ0OGU5ZmZmZgorCWRjLmwJJGZmYzAyMzdjLCQwMDAwMDAwNCwkZmY4YzQxZTksJGZmNzQyMzQ4CisJZGMubAkkZmZiODJjNDksJDYxZmYwMDAwLCQyYTFjNGEwMCwkNjZmZjAwMDAKKwlkYy5sCSQyYTQyNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwMmEzZQorCWRjLmwJJDQyODI3NjAyLCQyMDRmNGZlZSwkZmY3ODNkN2MsJDAwMDBmZjdjCisJZGMubAkkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMyNywkMzQwMjQyZWUKKwlkYy5sCSRmZjdlNDhlZSwkZmZmZmZmYzAsJDJkN2MwMDAwLCQwMDA0ZmY4YworCWRjLmwJJDQzZWVmZjc0LCQyZDQ5ZmZiYywkMmU0ODYxZmYsJDAwMDAyOWM2CisJZGMubAkkNGEwMDY2ZmYsJDAwMDAyOWVjLCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkMjllODQyODIsJDc2MDI0MWVlLCRmZjc0NzhmMAorCWRjLmwJJDNkN2MwMDAwLCRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwCisJZGMubAkkNGMzMDM0MDIsJDQwMTA0MmVlLCRmZjdlNDhlZSwkZmZmZmZmYzAKKwlkYy5sCSQyZDdjMDAwMCwkMDAwNGZmOGMsJDYxZmYwMDAwLCQyOTc4NGEwMAorCWRjLmwJJDY2ZmYwMDAwLCQyOTllNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwCisJZGMubAkkMDAwMDI5OWEsJDQyODI3NjAyLCQ0MWVlZmY3NCwkNzhmODNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzMAorCWRjLmwJJDM0MDI0MjEwLCQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjCisJZGMubAkkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMjkyYSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMjk1MCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDI5NGM0MjgyLCQ3NjAyNDFlZSwkZmY3NDc4ZmMsJDNkN2MwMDAwCisJZGMubAkkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MCwkNGMzMDM0MDIKKwlkYy5sCSQ0NDEwNDJlZSwkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMAorCWRjLmwJJDAwMDRmZjhjLCQ2MWZmMDAwMCwkMjhkYzRhMDAsJDY2ZmYwMDAwCisJZGMubAkkMjkwMjUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MCwkMDAwMDI4ZmUKKwlkYy5sCSQ0MjgyNzYwMiwkNDFlZWZmNzQsJDc4ZmUzZDdjLCQwMDAwZmY3YworCWRjLmwJJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjMzAsJDM0MDI0NjEwCisJZGMubAkkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQKKwlkYy5sCSRmZjhjNjFmZiwkMDAwMDI4OGUsJDRhMDA2NmZmLCQwMDAwMjhiNAorCWRjLmwJJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDI4YjA0MjgyCisJZGMubAkkNzYwMjQxZWUsJGZmNzQ3OGYwLCQzZDdjMDAwMCwkZmY3YzQ0ZmMKKwlkYy5sCSQwMDAwNDhlZSwkZmZmZmZmODAsJDRjMzAzNDAyLCQ0ODEwNDJlZQorCWRjLmwJJGZmN2U0OGVlLCRmZmZmZmZjMCwkMmQ3YzAwMDAsJDAwMDRmZjhjCisJZGMubAkkNjFmZjAwMDAsJDI4NDA0YTAwLCQ2NmZmMDAwMCwkMjg2NjUyYWUKKwlkYy5sCSRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDAyODYyLCQ0MjgyNzYwMgorCWRjLmwJJDQxZWVmZjc0LCQ3OGY4M2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZWZmZmYsJGZmODA0YzMwLCQzNDAyNGExMCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjNjFmZgorCWRjLmwJJDAwMDAyN2YyLCQ0YTAwNjZmZiwkMDAwMDI4MTgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQyODE0NDI4MiwkNzYwMjQxZWUKKwlkYy5sCSRmZjc0NzhmYywkM2Q3YzAwMDAsJGZmN2M0NGZjLCQwMDAwNDhlZQorCWRjLmwJJGZmZmZmZjgwLCQ0YzMwMzQwMiwkNGMxMDQyZWUsJGZmN2U0OGVlCisJZGMubAkkZmZmZmZmYzAsJDJkN2MwMDAwLCQwMDA0ZmY4YywkNjFmZjAwMDAKKwlkYy5sCSQyN2E0NGEwMCwkNjZmZjAwMDAsJDI3Y2E1MmFlLCRmZjc4NGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwMjdjNiwkNDI4Mjc2MDIsJDQxZWVmZjc0CisJZGMubAkkNzhmZTNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYKKwlkYy5sCSRmZjgwNGMzMCwkMzQwMjRlMTAsJDQyZWVmZjdlLCQ0OGVlZmZmZgorCWRjLmwJJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAyNzU2CisJZGMubAkkNGEwMDY2ZmYsJDAwMDAyNzdjLCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkMjc3ODQyODIsJDc2MDI0MWVlLCRmZjc0Mjg3YworCWRjLmwJJGZmZmZmZmZlLCQzZDdjMDAwMCwkZmY3YzQ0ZmMsJDAwMDA0OGVlCisJZGMubAkkZmZmZmZmODAsJDRjMzAzNDAyLCRjZTEwNDJlZSwkZmY3ZTQ4ZWUKKwlkYy5sCSRmZmZmZmZjMCwkMmQ3YzAwMDAsJDAwMDRmZjhjLCQ2MWZmMDAwMAorCWRjLmwJJDI3MDQ0YTAwLCQ2NmZmMDAwMCwkMjcyYTUyYWUsJGZmNzg0Y2ZiCisJZGMubAkkM2ZmZjAxNzAsJDAwMDAyNzI2LCQ0MjgyNzYwMiwkNDFlZWZmNzQKKwlkYy5sCSQyODdjMDAwMCwkMDAwMjNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWVmZmZmLCRmZjgwNGMzMCwkMzQwMmNlZjAsJDQyZWVmZjdlCisJZGMubAkkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYKKwlkYy5sCSQwMDAwMjZiMiwkNGEwMDY2ZmYsJDAwMDAyNmQ4LCQ1MmFlZmY3OAorCWRjLmwJJDRjZmIzZmZmLCQwMTcwMDAwMCwkMjZkNDQyODIsJDc2MDI0M2VlCisJZGMubAkkZmY3NDc4ZjAsJDNkN2MwMDAwLCRmZjdjNDRmYywkMDAwMDQ4ZWUKKwlkYy5sCSRmZmZmZmY4MCwkNGMzMTM0MDIsJDQwMTA0MmVlLCRmZjdlNDhlZQorCWRjLmwJJGZmZmZmZmMwLCQyZDdjMDAwMCwkMDAwNGZmOGMsJDYxZmYwMDAwCisJZGMubAkkMjY2NDRhMDAsJDY2ZmYwMDAwLCQyNjhhNTJhZSwkZmY3ODRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDI2ODYsJDQyODI3NjAyLCQ0NWVlZmY3NAorCWRjLmwJJDc4ZjAzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmCisJZGMubAkkZmY4MDRjMzIsJDM0MDI0MDEwLCQ0MmVlZmY3ZSwkNDhlZWZmZmYKKwlkYy5sCSRmZmMwMmQ3YywkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMjYxNgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwMjYzYywkNTJhZWZmNzgsJDRjZmIzZmZmCisJZGMubAkkMDE3MDAwMDAsJDI2Mzg0MjgyLCQ3NjAyNDdlZSwkZmY3NDc4ZjAKKwlkYy5sCSQzZDdjMDAwMCwkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MAorCWRjLmwJJDRjMzMzNDAyLCQ0MDEwNDJlZSwkZmY3ZTQ4ZWUsJGZmZmZmZmMwCisJZGMubAkkMmQ3YzAwMDAsJDAwMDRmZjhjLCQ2MWZmMDAwMCwkMjVjODRhMDAKKwlkYy5sCSQ2NmZmMDAwMCwkMjVlZTUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MAorCWRjLmwJJDAwMDAyNWVhLCQ0MjgyNzYwMiwkNDllZWZmNzQsJDc4ZjAzZDdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjMzQKKwlkYy5sCSQzNDAyNDAxMCwkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YworCWRjLmwJJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDI1N2EsJDRhMDA2NmZmCisJZGMubAkkMDAwMDI1YTAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQyNTljNDI4MiwkNzYwMjRiZWUsJGZmNzQ3OGYwLCQzZDdjMDAwMAorCWRjLmwJJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAsJDRjMzUzNDAyCisJZGMubAkkNDAxMDQyZWUsJGZmN2U0OGVlLCRmZmZmZmZjMCwkMmQ3YzAwMDAKKwlkYy5sCSQwMDA0ZmY4YywkNjFmZjAwMDAsJDI1MmM0YTAwLCQ2NmZmMDAwMAorCWRjLmwJJDI1NTI1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDAyNTRlCisJZGMubAkkMjI0ZTQyODIsJDc2MDI0ZGU5LCRmZjc0NzhmMCwkMzM3YzAwMDAKKwlkYy5sCSRmZjdjNDRmYywkMDAwMDQ4ZTksJGZmZmZmZjgwLCQ0YzM2MzQwMgorCWRjLmwJJDQwMTA0MmU5LCRmZjdlNDhlOSwkZmZmZmZmYzAsJDIzN2MwMDAwCisJZGMubAkkMDAwNGZmOGMsJDJjNDk2MWZmLCQwMDAwMjRkYSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMjUwMCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDI0ZmM0MjgyLCQ3NjAyMjA0ZiwkNGZlZWZmNzQsJDc4ZjAzZDdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjMzcKKwlkYy5sCSQzNDAyNDAxMCwkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YworCWRjLmwJJDAwMDAwMDA0LCRmZjhjMmU0OCwkNjFmZjAwMDAsJDI0ODg0YTAwCisJZGMubAkkNjZmZjAwMDAsJDI0YWU1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAKKwlkYy5sCSQwMDAwMjRhYSwkNDI4Mjc2MDIsJDQzZWVmZjc0LCQzZDdjMDAwMAorCWRjLmwJJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAsJDRjMTEzNDAyCisJZGMubAkkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQKKwlkYy5sCSRmZjhjNjFmZiwkMDAwMDI0M2UsJDRhMDA2NmZmLCQwMDAwMjQ2NAorCWRjLmwJJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDI0NjA0MjgyCisJZGMubAkkNzYwMjQ1ZWUsJGZmNzQzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAKKwlkYy5sCSQ0OGVlZmZmZiwkZmY4MDRjMTIsJDM0MDI0MmVlLCRmZjdlNDhlZQorCWRjLmwJJGZmZmZmZmMwLCQyZDdjMDAwMCwkMDAwNGZmOGMsJDYxZmYwMDAwCisJZGMubAkkMjNmNDRhMDAsJDY2ZmYwMDAwLCQyNDFhNTJhZSwkZmY3ODRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDI0MTYsJDQyODI3NjAyLCQ0N2VlZmY3NAorCWRjLmwJJDNkN2MwMDAwLCRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwCisJZGMubAkkNGMxMzM0MDIsJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MKKwlkYy5sCSQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAyM2FhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAyM2QwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMjNjYzQyODIsJDc2MDI0OWVlLCRmZjc0M2Q3YywkMDAwMGZmN2MKKwlkYy5sCSQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzE0LCQzNDAyNDJlZQorCWRjLmwJJGZmN2U0OGVlLCRmZmZmZmZjMCwkMmQ3YzAwMDAsJDAwMDRmZjhjCisJZGMubAkkNjFmZjAwMDAsJDIzNjA0YTAwLCQ2NmZmMDAwMCwkMjM4NjUyYWUKKwlkYy5sCSRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDAyMzgyLCQ0MjgyNzYwMgorCWRjLmwJJDRiZWVmZjc0LCQzZDdjMDAwMCwkZmY3YzQ0ZmMsJDAwMDA0OGVlCisJZGMubAkkZmZmZmZmODAsJDRjMTUzNDAyLCQ0MmVlZmY3ZSwkNDhlZWZmZmYKKwlkYy5sCSRmZmMwMmQ3YywkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMjMxNgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwMjMzYywkNTJhZWZmNzgsJDRjZmIzZmZmCisJZGMubAkkMDE3MDAwMDAsJDIzMzgyMjRlLCQ0MjgyNzYwMiwkNGRlOWZmNzQKKwlkYy5sCSQzMzdjMDAwMCwkZmY3YzQ0ZmMsJDAwMDA0OGU5LCRmZmZmZmY4MAorCWRjLmwJJDRjMTYzNDAyLCQ0MmU5ZmY3ZSwkNDhlOWZmZmYsJGZmYzAyMzdjCisJZGMubAkkMDAwMDAwMDQsJGZmOGMyYzQ5LCQ2MWZmMDAwMCwkMjJjODRhMDAKKwlkYy5sCSQ2NmZmMDAwMCwkMjJlZTUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MAorCWRjLmwJJDAwMDAyMmVhLCQ0MjgyNzYwMiwkMjA0ZjRmZWUsJGZmNzQzZDdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjMTcKKwlkYy5sCSQzNDAyNDJlZSwkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMAorCWRjLmwJJDAwMDRmZjhjLCQyZTQ4NjFmZiwkMDAwMDIyN2EsJDRhMDA2NmZmCisJZGMubAkkMDAwMDIyYTAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQyMjljNDI4MiwkNzYwMjQzZWUsJGZmNzQzZDdjLCQwMDAwZmY3YworCWRjLmwJJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjMTksJDM0MDI0MmVlCisJZGMubAkkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMCwkMDAwNGZmOGMKKwlkYy5sCSQ0MWVlZmY3OCwkMmQ0OGZmYTQsJDYxZmYwMDAwLCQyMjI4NGEwMAorCWRjLmwJJDY2ZmYwMDAwLCQyMjRlNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwCisJZGMubAkkMDAwMDIyNGEsJDQyODI3NjAyLCQ0NWVlZmY3NCwkM2Q3YzAwMDAKKwlkYy5sCSRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwLCQ0YzFhMzQwMgorCWRjLmwJJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0CisJZGMubAkkZmY4YzQxZWUsJGZmNzgyZDQ4LCRmZmE4NjFmZiwkMDAwMDIxZDYKKwlkYy5sCSQ0YTAwNjZmZiwkMDAwMDIxZmMsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZgorCWRjLmwJJDAxNzAwMDAwLCQyMWY4NDI4MiwkNzYwMjQ3ZWUsJGZmNzQzZDdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjMWIKKwlkYy5sCSQzNDAyNDJlZSwkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMAorCWRjLmwJJDAwMDRmZjhjLCQ0MWVlZmY3OCwkMmQ0OGZmYWMsJDYxZmYwMDAwCisJZGMubAkkMjE4NDRhMDAsJDY2ZmYwMDAwLCQyMWFhNTJhZSwkZmY3ODRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDIxYTYsJDQyODI3NjAyLCQ0OWVlZmY3NAorCWRjLmwJJDNkN2MwMDAwLCRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwCisJZGMubAkkNGMxYzM0MDIsJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MKKwlkYy5sCSQwMDAwMDAwNCwkZmY4YzQxZWUsJGZmNzgyZDQ4LCRmZmIwNjFmZgorCWRjLmwJJDAwMDAyMTMyLCQ0YTAwNjZmZiwkMDAwMDIxNTgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQyMTU0NDI4MiwkNzYwMjRiZWUKKwlkYy5sCSRmZjc0M2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZgorCWRjLmwJJGZmODA0YzFkLCQzNDAyNDJlZSwkZmY3ZTQ4ZWUsJGZmZmZmZmMwCisJZGMubAkkMmQ3YzAwMDAsJDAwMDRmZjhjLCQ0MWVlZmY3OCwkMmQ0OGZmYjQKKwlkYy5sCSQ2MWZmMDAwMCwkMjBlMDRhMDAsJDY2ZmYwMDAwLCQyMTA2NTJhZQorCWRjLmwJJGZmNzg0Y2ZiLCQzZmZmMDE3MCwkMDAwMDIxMDIsJDIyNGU0MjgyCisJZGMubAkkNzYwMjRkZTksJGZmNzQzMzdjLCQwMDAwZmY3YywkNDRmYzAwMDAKKwlkYy5sCSQ0OGU5ZmZmZiwkZmY4MDRjMWUsJDM0MDI0MmU5LCRmZjdlNDhlOQorCWRjLmwJJGZmZmZmZmMwLCQyMzdjMDAwMCwkMDAwNGZmOGMsJDQxZTlmZjc4CisJZGMubAkkMjM0OGZmYjgsJDJjNDk2MWZmLCQwMDAwMjA4YSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMjBiMCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDIwYWM0MjgyLCQ3NjAyMjA0ZiwkNGZlZWZmNzQsJDNkN2MwMDAwCisJZGMubAkkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MCwkNGMxZjM0MDIKKwlkYy5sCSQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNAorCWRjLmwJJGZmOGM0M2VlLCRmZjc4MmQ0OSwkZmZiYzJlNDgsJDYxZmYwMDAwCisJZGMubAkkMjAzNDRhMDAsJDY2ZmYwMDAwLCQyMDVhNTJhZSwkZmY3ODRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDIwNTYsJDQyODI3NjAyLCQ0M2VlZWY3NAorCWRjLmwJJDNkN2MwMDAwLCRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwCisJZGMubAkkNGMyOTM0MDIsJDEwMDA0MmVlLCRmZjdlNDhlZSwkZmZmZmZmYzAKKwlkYy5sCSQyZDdjMDAwMCwkMDAwNGZmOGMsJDYxZmYwMDAwLCQxZmU4NGEwMAorCWRjLmwJJDY2ZmYwMDAwLCQyMDBlNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwCisJZGMubAkkMDAwMDIwMGEsJDQyODI3NjAyLCQ0NWVlZWY3NCwkM2Q3YzAwMDAKKwlkYy5sCSRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwLCQ0YzJhMzQwMgorCWRjLmwJJDEwMDA0MmVlLCRmZjdlNDhlZSwkZmZmZmZmYzAsJDJkN2MwMDAwCisJZGMubAkkMDAwNGZmOGMsJDYxZmYwMDAwLCQxZjljNGEwMCwkNjZmZjAwMDAKKwlkYy5sCSQxZmMyNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwMWZiZQorCWRjLmwJJDQyODI3NjAyLCQ0N2VlZWY3NCwkM2Q3YzAwMDAsJGZmN2M0NGZjCisJZGMubAkkMDAwMDQ4ZWUsJGZmZmZmZjgwLCQ0YzJiMzQwMiwkMTAwMDQyZWUKKwlkYy5sCSRmZjdlNDhlZSwkZmZmZmZmYzAsJDJkN2MwMDAwLCQwMDA0ZmY4YworCWRjLmwJJDYxZmYwMDAwLCQxZjUwNGEwMCwkNjZmZjAwMDAsJDFmNzY1MmFlCisJZGMubAkkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwMWY3MiwkNDI4Mjc2MDIKKwlkYy5sCSQ0OWVlZWY3NCwkM2Q3YzAwMDAsJGZmN2M0NGZjLCQwMDAwNDhlZQorCWRjLmwJJGZmZmZmZjgwLCQ0YzJjMzQwMiwkMTAwMDQyZWUsJGZmN2U0OGVlCisJZGMubAkkZmZmZmZmYzAsJDJkN2MwMDAwLCQwMDA0ZmY4YywkNjFmZjAwMDAKKwlkYy5sCSQxZjA0NGEwMCwkNjZmZjAwMDAsJDFmMmE1MmFlLCRmZjc4NGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwMWYyNiwkNDI4Mjc2MDIsJDRiZWVlZjc0CisJZGMubAkkM2Q3YzAwMDAsJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAKKwlkYy5sCSQ0YzJkMzQwMiwkMTAwMDQyZWUsJGZmN2U0OGVlLCRmZmZmZmZjMAorCWRjLmwJJDJkN2MwMDAwLCQwMDA0ZmY4YywkNjFmZjAwMDAsJDFlYjg0YTAwCisJZGMubAkkNjZmZjAwMDAsJDFlZGU1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAKKwlkYy5sCSQwMDAwMWVkYSwkMjI0ZTQyODIsJDc2MDI0ZGU5LCRlZjc0MzM3YworCWRjLmwJJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlOWZmZmYsJGZmODA0YzJlCisJZGMubAkkMzQwMjEwMDAsJDQyZTlmZjdlLCQ0OGU5ZmZmZiwkZmZjMDIzN2MKKwlkYy5sCSQwMDAwMDAwNCwkZmY4YzJjNDksJDYxZmYwMDAwLCQxZTY4NGEwMAorCWRjLmwJJDY2ZmYwMDAwLCQxZThlNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwCisJZGMubAkkMDAwMDFlOGEsJDQyODI3NjAyLCQyMDRmNGZlZSwkZWY3NDNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMyZgorCWRjLmwJJDM0MDIxMDAwLCQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjCisJZGMubAkkMDAwMDAwMDQsJGZmOGMyZTQ4LCQ2MWZmMDAwMCwkMWUxODRhMDAKKwlkYy5sCSQ2NmZmMDAwMCwkMWUzZTUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MAorCWRjLmwJJDAwMDAxZTNhLCQ0MjgyNzYwMiwkNDFlZTBmNzQsJDNkN2MwMDAwCisJZGMubAkkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MCwkNGMyODM0MDIKKwlkYy5sCSRmMDAwNDJlZSwkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMAorCWRjLmwJJDAwMDRmZjhjLCQ2MWZmMDAwMCwkMWRjYzRhMDAsJDY2ZmYwMDAwCisJZGMubAkkMWRmMjUyYWUsJGZmNzg2MDA0LCQwMDAwMDAwMiwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkMWRlODQyODIsJDc2MDIzZDdjLCQwMDAwZmY3YworCWRjLmwJJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjM2EsJDM0MDJmZmRhCisJZGMubAkkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQKKwlkYy5sCSRmZjhjNjFmZiwkMDAwMDFkN2UsJDRhMDA2NmZmLCQwMDAwMWRhNAorCWRjLmwJJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDFkYTA0MjgyCisJZGMubAkkNzYwMjQ3ZWUsJGZmNzQ3OGYwLCQzZDdjMDAwMCwkZmY3YzQ0ZmMKKwlkYy5sCSQwMDAwNDhlZSwkZmZmZmZmODAsJDRjMzMzNDAyLCQ0MDEwNDJlZQorCWRjLmwJJGZmN2U0OGVlLCRmZmZmZmZjMCwkMmQ3YzAwMDAsJDAwMDRmZjhjCisJZGMubAkkNjFmZjAwMDAsJDFkMzA0YTAwLCQ2NmZmMDAwMCwkMWQ1NjUyYWUKKwlkYy5sCSRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDAxZDUyLCQ0MjgyNzYwMgorCWRjLmwJJDQ3ZWVmZjc0LCQ3OGY4M2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZWZmZmYsJGZmODA0YzMzLCQzNDAyNDIxMCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjNjFmZgorCWRjLmwJJDAwMDAxY2UyLCQ0YTAwNjZmZiwkMDAwMDFkMDgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQxZDA0NDI4MiwkNzYwMjQ3ZWUKKwlkYy5sCSRmZjc0NzhmYywkM2Q3YzAwMDAsJGZmN2M0NGZjLCQwMDAwNDhlZQorCWRjLmwJJGZmZmZmZjgwLCQ0YzMzMzQwMiwkNDQxMDQyZWUsJGZmN2U0OGVlCisJZGMubAkkZmZmZmZmYzAsJDJkN2MwMDAwLCQwMDA0ZmY4YywkNjFmZjAwMDAKKwlkYy5sCSQxYzk0NGEwMCwkNjZmZjAwMDAsJDFjYmE1MmFlLCRmZjc4NGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwMWNiNiwkNDI4Mjc2MDIsJDQ3ZWVmZjc0CisJZGMubAkkNzhmZTNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYKKwlkYy5sCSRmZjgwNGMzMywkMzQwMjQ2MTAsJDQyZWVmZjdlLCQ0OGVlZmZmZgorCWRjLmwJJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAxYzQ2CisJZGMubAkkNGEwMDY2ZmYsJDAwMDAxYzZjLCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkMWM2ODQyODIsJDc2MDI0N2VlLCRmZjc0NzhmMAorCWRjLmwJJDNkN2MwMDAwLCRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwCisJZGMubAkkNGMzMzM0MDIsJDQ4MTA0MmVlLCRmZjdlNDhlZSwkZmZmZmZmYzAKKwlkYy5sCSQyZDdjMDAwMCwkMDAwNGZmOGMsJDYxZmYwMDAwLCQxYmY4NGEwMAorCWRjLmwJJDY2ZmYwMDAwLCQxYzFlNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwCisJZGMubAkkMDAwMDFjMWEsJDQyODI3NjAyLCQ0N2VlZmY3NCwkNzhmODNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzMworCWRjLmwJJDM0MDI0YTEwLCQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjCisJZGMubAkkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMWJhYSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMWJkMCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDFiY2M0MjgyLCQ3NjAyNDdlZSwkZmY3NDc4ZmMsJDNkN2MwMDAwCisJZGMubAkkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MCwkNGMzMzM0MDIKKwlkYy5sCSQ0YzEwNDJlZSwkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMAorCWRjLmwJJDAwMDRmZjhjLCQ2MWZmMDAwMCwkMWI1YzRhMDAsJDY2ZmYwMDAwCisJZGMubAkkMWI4MjUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MCwkMDAwMDFiN2UKKwlkYy5sCSQ0MjgyNzYwMiwkNDdlZWZmNzQsJDc4ZmUzZDdjLCQwMDAwZmY3YworCWRjLmwJJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjMzMsJDM0MDI0ZTEwCisJZGMubAkkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQKKwlkYy5sCSRmZjhjNjFmZiwkMDAwMDFiMGUsJDRhMDA2NmZmLCQwMDAwMWIzNAorCWRjLmwJJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDFiMzA0MjgyCisJZGMubAkkNzYwMjQ3ZWUsJGZmNzQyODdjLCQwMDAwMDAwMiwkM2Q3YzAwMDAKKwlkYy5sCSRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwLCQ0YzMzMzQwMgorCWRjLmwJJGNlZjA0MmVlLCRmZjdlNDhlZSwkZmZmZmZmYzAsJDJkN2MwMDAwCisJZGMubAkkMDAwNGZmOGMsJDYxZmYwMDAwLCQxYWJjNGEwMCwkNjZmZjAwMDAKKwlkYy5sCSQxYWUyNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwMWFkZQorCWRjLmwJJDQyODI3NjAyLCQ0N2VlZmY3NCwkMjg3YzAwMDAsJDAwMDIzZDdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjMzMKKwlkYy5sCSQzNDAyMDc1MCwkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YworCWRjLmwJJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDFhNmEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDFhOTAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQxYThjNDI4MiwkNzYwMjQ3ZWUsJGZmNzQyODRiLCRkOWZjMDAwMAorCWRjLmwJJDAwMTAzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmCisJZGMubAkkZmY4MDRjMzAsJDM0MDJjOWEwLCRmZmYwNDJlZSwkZmY3ZTQ4ZWUKKwlkYy5sCSRmZmZmZmZjMCwkMmQ3YzAwMDAsJDAwMDRmZjhjLCQ2MWZmMDAwMAorCWRjLmwJJDFhMTQ0YTAwLCQ2NmZmMDAwMCwkMWEzYTUyYWUsJGZmNzg0Y2ZiCisJZGMubAkkM2ZmZjAxNzAsJDAwMDAxYTM2LCQ0MjgyNzYwMiwkNDdlZWZmNzQKKwlkYy5sCSQyODdjMDAwMCwkMDAwMjNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWVmZmZmLCRmZjgwNGMzMywkMzQwMmNlZjAsJDQyZWVmZjdlCisJZGMubAkkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYKKwlkYy5sCSQwMDAwMTljMiwkNGEwMDY2ZmYsJDAwMDAxOWU4LCQ1MmFlZmY3OAorCWRjLmwJJDYwMDQwMDAwLCQwMDAyNGNmYiwkM2ZmZjAxNzAsJDAwMDAxOWRlCisJZGMubAkkNDI4Mjc2MDIsJDQ3ZWVmZjc0LCQ3OGYwM2Q3YywkMDAwMGZmN2MKKwlkYy5sCSQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzNiLCQzNDAyNDBlNAorCWRjLmwJJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0CisJZGMubAkkZmY4YzYxZmYsJDAwMDAxOTZlLCQ0YTAwNjZmZiwkMDAwMDE5OTQKKwlkYy5sCSQ1MmFlZmY3OCwkNjAwNDAwMDAsJDAwMDI0Y2ZiLCQzZmZmMDE3MAorCWRjLmwJJDAwMDAxOThhLCQ0MjgyNzYwMiwkNDFlZWZmNzQsJDc4ZjgzZDdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlN2ZmZiwkZmY4MDRjM2IKKwlkYy5sCSQzNDAyNDJlNCwkNDJlZWZmN2UsJDQ4ZWU3ZmZmLCRmZmMwMmQ3YworCWRjLmwJJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDE5MWEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDE5NDAsJDUyYWVmZjc4LCQ2MDA0MDAwMCwkMDAwMjRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDE5MzYsJDQyODI3NjAyLCQ0MWVlZmY3NAorCWRjLmwJJDc4ZmMzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWU3ZmZmCisJZGMubAkkZmY4MDRjM2IsJDM0MDI0NGU0LCQ0MmVlZmY3ZSwkNDhlZTdmZmYKKwlkYy5sCSRmZmMwMmQ3YywkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMThjNgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwMThlYywkNTJhZWZmNzgsJDYwMDQwMDAwCisJZGMubAkkMDAwMjRjZmIsJDNmZmYwMTcwLCQwMDAwMThlMiwkNDI4Mjc2MDIKKwlkYy5sCSQ0MWVlZmY3NCwkNzhmZTNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWU3ZmZmLCRmZjgwNGMzYiwkMzQwMjQ2ZTQsJDQyZWVmZjdlCisJZGMubAkkNDhlZTdmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYKKwlkYy5sCSQwMDAwMTg3MiwkNGEwMDY2ZmYsJDAwMDAxODk4LCQ1MmFlZmY3OAorCWRjLmwJJDYwMDQwMDAwLCQwMDAyNGNmYiwkM2ZmZjAxNzAsJDAwMDAxODhlCisJZGMubAkkNDI4Mjc2MDIsJDQxZWVmZjc0LCQ3OGYwM2Q3YywkMDAwMGZmN2MKKwlkYy5sCSQ0NGZjMDAwMCwkNDhlZTdmZmYsJGZmODA0YzNiLCQzNDAyNDhlNAorCWRjLmwJJDQyZWVmZjdlLCQ0OGVlN2ZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0CisJZGMubAkkZmY4YzYxZmYsJDAwMDAxODFlLCQ0YTAwNjZmZiwkMDAwMDE4NDQKKwlkYy5sCSQ1MmFlZmY3OCwkNjAwNDAwMDAsJDAwMDI0Y2ZiLCQzZmZmMDE3MAorCWRjLmwJJDAwMDAxODNhLCQ0MjgyNzYwMiwkNDFlZWZmNzQsJDc4ZjgzZDdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlN2ZmZiwkZmY4MDRjM2IKKwlkYy5sCSQzNDAyNGFlNCwkNDJlZWZmN2UsJDQ4ZWU3ZmZmLCRmZmMwMmQ3YworCWRjLmwJJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDE3Y2EsJDRhMDA2NmZmCisJZGMubAkkMDAwMDE3ZjAsJDUyYWVmZjc4LCQ2MDA0MDAwMCwkMDAwMjRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDE3ZTYsJDQyODI3NjAyLCQ0MWVlZmY3NAorCWRjLmwJJDc4ZmMzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWU3ZmZmCisJZGMubAkkZmY4MDRjM2IsJDM0MDI0Y2U0LCQ0MmVlZmY3ZSwkNDhlZTdmZmYKKwlkYy5sCSRmZmMwMmQ3YywkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMTc3NgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwMTc5YywkNTJhZWZmNzgsJDYwMDQwMDAwCisJZGMubAkkMDAwMjRjZmIsJDNmZmYwMTcwLCQwMDAwMTc5MiwkNDI4Mjc2MDIKKwlkYy5sCSQ0MWVlZmY3NCwkNzhmZTNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWU3ZmZmLCRmZjgwNGMzYiwkMzQwMjRlZTQsJDQyZWVmZjdlCisJZGMubAkkNDhlZTdmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYKKwlkYy5sCSQwMDAwMTcyMiwkNGEwMDY2ZmYsJDAwMDAxNzQ4LCQ1MmFlZmY3OAorCWRjLmwJJDYwMDQwMDAwLCQwMDAyNGNmYiwkM2ZmZjAxNzAsJDAwMDAxNzNlCisJZGMubAkkNDI4Mjc2MDIsJDQ3ZWVmZjc0LCQyODdjZmZmZiwkZmZmZTNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzYgorCWRjLmwJJDM0MDJjZWUwLCQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjCisJZGMubAkkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMTZjYSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMTZmMCwkNTJhZWZmNzgsJDYwMDQwMDAwLCQwMDAyNGNmYgorCWRjLmwJJDNmZmYwMTcwLCQwMDAwMTZlNiwkNDI4Mjc2MDIsJDQ3ZWVmZjc0CisJZGMubAkkMjg3YzAwMDAsJDAwMDIzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAKKwlkYy5sCSQ0OGVlZmZmZiwkZmY4MDRjM2IsJDM0MDIwNzYwLCRmZmQwNDJlZQorCWRjLmwJJGZmN2U0OGVlLCRmZmZmZmZjMCwkMmQ3YzAwMDAsJDAwMDRmZjhjCisJZGMubAkkNjFmZjAwMDAsJDE2NzA0YTAwLCQ2NmZmMDAwMCwkMTY5NjUyYWUKKwlkYy5sCSRmZjc4NTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwMTY4ZQorCWRjLmwJJDQyODI3NjAyLCQ0N2Y5ZmZmZiwkZmY3NDI4N2MsJDAwMDAwMDAyCisJZGMubAkkM2Q3YzAwMDAsJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAKKwlkYy5sCSQ0YzNiMzQwMiwkY2YzMDAwMDAsJDAwMGE0MmVlLCRmZjdlNDhlZQorCWRjLmwJJGZmZmZmZmMwLCQyZDdjMDAwMCwkMDAwNGZmOGMsJDYwMDQwMDAwCisJZGMubAkkMDAwMjYxZmYsJDAwMDAxNjBlLCQ0YTAwNjZmZiwkMDAwMDE2MzQKKwlkYy5sCSQ1MmFlZmY3OCwkNjAwNDAwMDAsJDAwMDI0Y2ZiLCQzZmZmMDE3MAorCWRjLmwJJDAwMDAxNjJhLCQ0MjgyNzYwMiwkNDNlZWZmNzQsJDc4ZjAzZDdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjM2IKKwlkYy5sCSQzNDAyNDBlNCwkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YworCWRjLmwJJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDE1YmEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDE1ZTAsJDUyYWVmZjc4LCQ2MDA0MDAwMCwkMDAwMjRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDE1ZDYsJDQyODI3NjAyLCQ0MWVlZmY3NAorCWRjLmwJJDc4ZjgzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmCisJZGMubAkkZmY4MDRjM2IsJDM0MDI0MmU0LCQ0MmVlZmY3ZSwkNDhlZWZmZmYKKwlkYy5sCSRmZmMwMmQ3YywkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMTU2NgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwMTU4YywkNTJhZWZmNzgsJDYwMDQwMDAwCisJZGMubAkkMDAwMjRjZmIsJDNmZmYwMTcwLCQwMDAwMTU4MiwkNDI4Mjc2MDIKKwlkYy5sCSQ0MWVlZmY3NCwkNzhmYzNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWVmZmZmLCRmZjgwNGMzYiwkMzQwMjQ0ZTQsJDQyZWVmZjdlCisJZGMubAkkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYKKwlkYy5sCSQwMDAwMTUxMiwkNGEwMDY2ZmYsJDAwMDAxNTM4LCQ1MmFlZmY3OAorCWRjLmwJJDYwMDQwMDAwLCQwMDAyNGNmYiwkM2ZmZjAxNzAsJDAwMDAxNTJlCisJZGMubAkkNDI4Mjc2MDIsJDQxZWVmZjc0LCQ3OGZlM2Q3YywkMDAwMGZmN2MKKwlkYy5sCSQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzNiLCQzNDAyNDZlNAorCWRjLmwJJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0CisJZGMubAkkZmY4YzYxZmYsJDAwMDAxNGJlLCQ0YTAwNjZmZiwkMDAwMDE0ZTQKKwlkYy5sCSQ1MmFlZmY3OCwkNjAwNDAwMDAsJDAwMDI0Y2ZiLCQzZmZmMDE3MAorCWRjLmwJJDAwMDAxNGRhLCQ0MjgyNzYwMiwkNDFlZWZmNzQsJDc4ZjAzZDdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjM2IKKwlkYy5sCSQzNDAyNDhlNCwkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YworCWRjLmwJJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDE0NmEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDE0OTAsJDUyYWVmZjc4LCQ2MDA0MDAwMCwkMDAwMjRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDE0ODYsJDQyODI3NjAyLCQ0MWVlZmY3NAorCWRjLmwJJDc4ZjgzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmCisJZGMubAkkZmY4MDRjM2IsJDM0MDI0YWU0LCQ0MmVlZmY3ZSwkNDhlZWZmZmYKKwlkYy5sCSRmZmMwMmQ3YywkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMTQxNgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwMTQzYywkNTJhZWZmNzgsJDYwMDQwMDAwCisJZGMubAkkMDAwMjRjZmIsJDNmZmYwMTcwLCQwMDAwMTQzMiwkNDI4Mjc2MDIKKwlkYy5sCSQ0MWVlZmY3NCwkNzhmYzNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWVmZmZmLCRmZjgwNGMzYiwkMzQwMjRjZTQsJDQyZWVmZjdlCisJZGMubAkkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYKKwlkYy5sCSQwMDAwMTNjMiwkNGEwMDY2ZmYsJDAwMDAxM2U4LCQ1MmFlZmY3OAorCWRjLmwJJDYwMDQwMDAwLCQwMDAyNGNmYiwkM2ZmZjAxNzAsJDAwMDAxM2RlCisJZGMubAkkNDI4Mjc2MDIsJDQxZWVmZjc0LCQ3OGZlM2Q3YywkMDAwMGZmN2MKKwlkYy5sCSQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzNiLCQzNDAyNGVlNAorCWRjLmwJJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0CisJZGMubAkkZmY4YzYxZmYsJDAwMDAxMzZlLCQ0YTAwNjZmZiwkMDAwMDEzOTQKKwlkYy5sCSQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwLCQxMzkwNDI4MgorCWRjLmwJJDc2MDI0MWVlLCRmZjc0NzhmZSwkM2Q3YzAwMDAsJGZmN2M0NGZjCisJZGMubAkkMDAwMDQ4ZWUsJGZmZmZmZjgwLCQ0YzNiMzQwMiwkNGUyNjQyZWUKKwlkYy5sCSRmZjdlNDhlZSwkZmZmZmZmYzAsJDJkN2MwMDAwLCQwMDA0ZmY4YworCWRjLmwJJDYwMDQwMDAwLCQwMDAyNjFmZiwkMDAwMDEzMWEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDEzNDAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQxMzNjNDI4MiwkNzYwMjQ3ZWUsJGVmNzQ0OWVlLCRmZjcwMjg4YgorCWRjLmwJJDc4ZjAzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmCisJZGMubAkkZmY4MDRjMzQsJDM0MDI0MTIyLCQwMDEwMTAwMCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjNjFmZgorCWRjLmwJJDAwMDAxMmMyLCQ0YTAwNjZmZiwkMDAwMDEyZTgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQxMmU0NDI4MiwkNzYwMjQ3ZWUKKwlkYy5sCSRlZjc0NDllZSwkZmY3MDI4OGIsJDc4ZjgzZDdjLCQwMDAwZmY3YworCWRjLmwJJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjMzQsJDM0MDI0MzIyCisJZGMubAkkMDAxMDEwMDAsJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MKKwlkYy5sCSQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAxMjZhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAxMjkwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMTI4YzQyODIsJDc2MDI0N2VlLCRlZjc0NDllZSwkZmY3MDI4OGIKKwlkYy5sCSQ3OGZjM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZgorCWRjLmwJJGZmODA0YzM0LCQzNDAyNDUyMiwkMDAxMDEwMDAsJDQyZWVmZjdlCisJZGMubAkkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYKKwlkYy5sCSQwMDAwMTIxMiwkNGEwMDY2ZmYsJDAwMDAxMjM4LCQ1MmFlZmY3OAorCWRjLmwJJDRjZmIzZmZmLCQwMTcwMDAwMCwkMTIzNDQyODIsJDc2MDI0N2VlCisJZGMubAkkZWY3NDQ5ZWUsJGZmNzAyODhiLCQ3OGZlM2Q3YywkMDAwMGZmN2MKKwlkYy5sCSQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzM0LCQzNDAyNDcyMgorCWRjLmwJJDAwMTAxMDAwLCQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjCisJZGMubAkkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMTFiYSwkNGEwMDY2ZmYKKwlkYy5sCSQwMDAwMTFlMCwkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMAorCWRjLmwJJDExZGM0MjgyLCQ3NjAyNDdlZSwkZWY3NDQ5ZWUsJGZmNzAyODhiCisJZGMubAkkNzhmMDNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYKKwlkYy5sCSRmZjgwNGMzNCwkMzQwMjQ5MjIsJDAwMTAxMDAwLCQ0MmVlZmY3ZQorCWRjLmwJJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQsJGZmOGM2MWZmCisJZGMubAkkMDAwMDExNjIsJDRhMDA2NmZmLCQwMDAwMTE4OCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDExODQ0MjgyLCQ3NjAyNDdlZQorCWRjLmwJJGVmNzQ0OWVlLCRmZjcwMjg4YiwkNzhmODNkN2MsJDAwMDBmZjdjCisJZGMubAkkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzNCwkMzQwMjRiMjIKKwlkYy5sCSQwMDEwMTAwMCwkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YworCWRjLmwJJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDExMGEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDExMzAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQxMTJjNDI4MiwkNzYwMjQ3ZWUsJGVmNzQ0OWVlLCRmZjcwMjg4YgorCWRjLmwJJDc4ZmMzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmCisJZGMubAkkZmY4MDRjMzQsJDM0MDI0ZDIyLCQwMDEwMTAwMCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjNjFmZgorCWRjLmwJJDAwMDAxMGIyLCQ0YTAwNjZmZiwkMDAwMDEwZDgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQxMGQ0NDI4MiwkNzYwMjQ3ZWUKKwlkYy5sCSRlZjc0NDllZSwkZmY3MDI4OGIsJDc4ZmUzZDdjLCQwMDAwZmY3YworCWRjLmwJJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjMzQsJDM0MDI0ZjIyCisJZGMubAkkMDAxMDEwMDAsJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MKKwlkYy5sCSQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAxMDVhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAxMDgwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMTA3YzQyODIsJDc2MDI0N2VlLCRlZjc0NDllZSwkZmY3MDI4OGIKKwlkYy5sCSQ3OGZlM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZgorCWRjLmwJJGZmODA0YzM0LCQzNDAyNGYzMywkMDAwMDAwMTAsJDAwMDAxMDAwCisJZGMubAkkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQKKwlkYy5sCSRmZjhjNjFmZiwkMDAwMDBmZmUsJDRhMDA2NmZmLCQwMDAwMTAyNAorCWRjLmwJJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDEwMjA0MjgyCisJZGMubAkkNzYwMjQ3ZWUsJGVmNzQ0OWVlLCRmZjcwMjg4YiwkNzhmZTNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzNAorCWRjLmwJJDM0MDIwNzUzLCQwMDAwMTAwMCwkNDJlZWZmN2UsJDQ4ZWVmZmZmCisJZGMubAkkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDBmYTYKKwlkYy5sCSQ0YTAwNjZmZiwkMDAwMDBmY2MsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZgorCWRjLmwJJDAxNzAwMDAwLCQwZmM4NDI4MiwkNzYwMjQ3ZWUsJGVmNzQ0OWVlCisJZGMubAkkZmY3MDI4OGIsJDc4ZmUzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAKKwlkYy5sCSQ0OGVlZmZmZiwkZmY4MDRjMzQsJDM0MDIwNzUzLCQwMDAwMTAwMAorCWRjLmwJJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0CisJZGMubAkkZmY4YzYxZmYsJDAwMDAwZjRlLCQ0YTAwNjZmZiwkMDAwMDBmNzQKKwlkYy5sCSQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwLCQwZjcwNDI4MgorCWRjLmwJJDc2MDI0N2VlLCRlZjc0NDllZSwkZmY3MDI4OGIsJDc4ZjBkODhjCisJZGMubAkkM2Q3YzAwMDAsJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAKKwlkYy5sCSQ0YzMwMzQwMiwkNDliMzAwMDAsJDAwMTAwMDAwLCQxMDAwNDJlZQorCWRjLmwJJGZmN2U0OGVlLCRmZmZmZmZjMCwkMmQ3YzAwMDAsJDAwMDRmZjhjCisJZGMubAkkNjFmZjAwMDAsJDBlZjA0YTAwLCQ2NmZmMDAwMCwkMGYxNjUyYWUKKwlkYy5sCSRmZjc4NTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwMGYwZQorCWRjLmwJJDIyNGU0MjgyLCQ3NjAyNDdlOSwkMGY3NDQ5ZTksJGZmNzAyODhiCisJZGMubAkkMmM3Y2ZmZmYsJGZmZmUzMzdjLCQwMDAwZmY3YywkNDRmYzAwMDAKKwlkYy5sCSQ0OGU5ZmZmZiwkZmY4MDRjMzQsJDM0MDJlZjIyLCQwMDEwZjAwMAorCWRjLmwJJDQyZTlmZjdlLCQ0OGU5ZmZmZiwkZmZjMDIzN2MsJDAwMDAwMDA0CisJZGMubAkkZmY4YzJjNDksJDYxZmYwMDAwLCQwZThjNGEwMCwkNjZmZjAwMDAKKwlkYy5sCSQwZWIyNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwMGVhZQorCWRjLmwJJDIyNGU0MjgyLCQ3NjAyNDdlOSwkMGY3NDQ5ZTksJGZmNzAyODhiCisJZGMubAkkMmM3YzAwMDAsJDAwMDIzMzdjLCQwMDAwZmY3YywkNDRmYzAwMDAKKwlkYy5sCSQ0OGU5ZmZmZiwkZmY4MDRjMzQsJDM0MDJlZjIyLCRmZmYwZjAwMAorCWRjLmwJJDQyZTlmZjdlLCQ0OGU5ZmZmZiwkZmZjMDIzN2MsJDAwMDAwMDA0CisJZGMubAkkZmY4YzJjNDksJDYxZmYwMDAwLCQwZTJjNGEwMCwkNjZmZjAwMDAKKwlkYy5sCSQwZTUyNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwMGU0ZQorCWRjLmwJJDQyODI3NjAyLCQ0N2VlZmY1NCwkNDllZWZmNzAsJDI4OGI5OWZjCisJZGMubAkkMDAwMDAwMTAsJDc4MTAzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAKKwlkYy5sCSQ0OGVlZmZmZiwkZmY4MDRjMzQsJDM0MDI0MTI2LCQwMDEwMDAxMAorCWRjLmwJJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0CisJZGMubAkkZmY4YzYxZmYsJDAwMDAwZGNlLCQ0YTAwNjZmZiwkMDAwMDBkZjQKKwlkYy5sCSQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwLCQwZGYwNDI4MgorCWRjLmwJJDc2MDI0N2VlLCRmZjU0NDllZSwkZmY3MDI4OGIsJDk5ZmMwMDAwCisJZGMubAkkMDAxMDc4MDgsJDNkN2MwMDAwLCRmZjdjNDRmYywkMDAwMDQ4ZWUKKwlkYy5sCSRmZmZmZmY4MCwkNGMzNDM0MDIsJDQzMjYwMDEwLCQwMDEwNDJlZQorCWRjLmwJJGZmN2U0OGVlLCRmZmZmZmZjMCwkMmQ3YzAwMDAsJDAwMDRmZjhjCisJZGMubAkkNjFmZjAwMDAsJDBkNzA0YTAwLCQ2NmZmMDAwMCwkMGQ5NjUyYWUKKwlkYy5sCSRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDAwZDkyLCQ0MjgyNzYwMgorCWRjLmwJJDQ3ZWVmZjU0LCQ0OWVlZmY3MCwkMjg4Yjk5ZmMsJDAwMDAwMDEwCisJZGMubAkkNzgwNDNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYKKwlkYy5sCSRmZjgwNGMzNCwkMzQwMjQ1MjYsJDAwMTAwMDEwLCQ0MmVlZmY3ZQorCWRjLmwJJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQsJGZmOGM2MWZmCisJZGMubAkkMDAwMDBkMTIsJDRhMDA2NmZmLCQwMDAwMGQzOCwkNTJhZWZmNzgKKwlkYy5sCSQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDBkMzQ0MjgyLCQ3NjAyNDdlZQorCWRjLmwJJGZmNTQ0OWVlLCRmZjcwMjg4YiwkOTlmYzAwMDAsJDAwMTA3ODAyCisJZGMubAkkM2Q3YzAwMDAsJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAKKwlkYy5sCSQ0YzM0MzQwMiwkNDcyNjAwMTAsJDAwMTA0MmVlLCRmZjdlNDhlZQorCWRjLmwJJGZmZmZmZmMwLCQyZDdjMDAwMCwkMDAwNGZmOGMsJDYxZmYwMDAwCisJZGMubAkkMGNiNDRhMDAsJDY2ZmYwMDAwLCQwY2RhNTJhZSwkZmY3ODRjZmIKKwlkYy5sCSQzZmZmMDE3MCwkMDAwMDBjZDYsJDQyODI3NjAyLCQ0N2VlZmY1NAorCWRjLmwJJDQ5ZWVmZjcwLCQyODhiOTlmYywkMDAwMDAwMTAsJDc4MTAzZDdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjMzQKKwlkYy5sCSQzNDAyNDkyNiwkMDAxMDAwMTAsJDQyZWVmZjdlLCQ0OGVlZmZmZgorCWRjLmwJJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAwYzU2CisJZGMubAkkNGEwMDY2ZmYsJDAwMDAwYzdjLCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkMGM3ODQyODIsJDc2MDI0N2VlLCRmZjU0NDllZQorCWRjLmwJJGZmNzAyODhiLCQ5OWZjMDAwMCwkMDAxMDc4MDgsJDNkN2MwMDAwCisJZGMubAkkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MCwkNGMzNDM0MDIKKwlkYy5sCSQ0MzI2MDAxMCwkMDAxMDQyZWUsJGZmN2U0OGVlLCRmZmZmZmZjMAorCWRjLmwJJDJkN2MwMDAwLCQwMDA0ZmY4YywkNjFmZjAwMDAsJDBiZjg0YTAwCisJZGMubAkkNjZmZjAwMDAsJDBjMWU1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAKKwlkYy5sCSQwMDAwMGMxYSwkNDI4Mjc2MDIsJDQ3ZWVmZjU0LCQ0OWVlZmY3MAorCWRjLmwJJDI4OGI5OWZjLCQwMDAwMDAxMCwkNzgwNDNkN2MsJDAwMDBmZjdjCisJZGMubAkkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzNCwkMzQwMjRkMjYKKwlkYy5sCSQwMDEwMDAxMCwkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YworCWRjLmwJJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDBiOWEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDBiYzAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQwYmJjNDI4MiwkNzYwMjQ3ZWUsJGZmNTQ0OWVlLCRmZjcwMjg4YgorCWRjLmwJJDk5ZmMwMDAwLCQwMDEwNzgwMiwkM2Q3YzAwMDAsJGZmN2M0NGZjCisJZGMubAkkMDAwMDQ4ZWUsJGZmZmZmZjgwLCQ0YzM0MzQwMiwkNGYyNjAwMTAKKwlkYy5sCSQwMDEwNDJlZSwkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMAorCWRjLmwJJDAwMDRmZjhjLCQ2MWZmMDAwMCwkMGIzYzRhMDAsJDY2ZmYwMDAwCisJZGMubAkkMGI2MjUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MCwkMDAwMDBiNWUKKwlkYy5sCSQ0MjgyNzYwMiwkNDdlZWZmNTQsJDQ5ZWVmZjcwLCQyODhiOTlmYworCWRjLmwJJDAwMDAwMDEwLCQ3ODAyM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZWZmZmYsJGZmODA0YzM0LCQzNDAyNGYzNywkMDAwMDAwMTAKKwlkYy5sCSQwMDAwMDAxMCwkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YworCWRjLmwJJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDBhZGEsJDRhMDA2NmZmCisJZGMubAkkMDAwMDBiMDAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQwYWZjNDI4MiwkNzYwMjQ3ZWUsJGZmNTQ0OWVlLCRmZjcwMjg4YgorCWRjLmwJJDc4MDIzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmCisJZGMubAkkZmY4MDRjMzQsJDM0MDIwNzUzLCQwMDAwMDAyMCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjNjFmZgorCWRjLmwJJDAwMDAwYTgyLCQ0YTAwNjZmZiwkMDAwMDBhYTgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQwYWE0MjA0ZiwkNDI4Mjc2MDIKKwlkYy5sCSQ0N2VlZmY1NCwkNGZlZWZmNzAsJDJlOGI3ODIwLCQzZDdjMDAwMAorCWRjLmwJJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAsJDRjMzczNDAyCisJZGMubAkkNDkxNTQyZWUsJGZmN2U0OGVlLCRmZmZmZmZjMCwkMmQ3YzAwMDAKKwlkYy5sCSQwMDA0ZmY4YywkMmU0ODYxZmYsJDAwMDAwYTJhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAwYTUwLCQ1MmFlZmY3OCwkNTJhZWZmNzgsJDRjZmIzZmZmCisJZGMubAkkMDE3MDAwMDAsJDBhNDgyMjRlLCQ0MjgyNzYwMiwkNDdlOWZmNzQKKwlkYy5sCSQ0ZGU5ZmY3MCwkMmM4YmRkZmMsJDAwMDAwMDEwLCQyYTdjZmZmZgorCWRjLmwJJGZmZmUzMzdjLCQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZTlmZmZmCisJZGMubAkkZmY4MDRjMzYsJDM0MDJkZjI3LCRmZmYwMDAwMCwkMDAxMDQyZTkKKwlkYy5sCSRmZjdlNDhlOSwkZmZmZmZmYzAsJDIzN2MwMDAwLCQwMDA0ZmY4YworCWRjLmwJJDJjNDk2MWZmLCQwMDAwMDliZSwkNGEwMDY2ZmYsJDAwMDAwOWU0CisJZGMubAkkMjIyZWZmNzgsJDQyODA0ZTc1LCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkMDlkODQyODIsJDc2MDI0N2ZhLCRlZjc0NDlmYQorCWRjLmwJJGZmNzAyODhiLCQ3OGYwM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZWZmZmYsJGZmODA0YzNiLCQzNDAyNDEyMiwkZmY4MDEwMDAKKwlkYy5sCSQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNAorCWRjLmwJJGZmOGM2MWZmLCQwMDAwMDk1ZSwkNGEwMDY2ZmYsJDAwMDAwOTg0CisJZGMubAkkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMCwkMDk4MDQyODIKKwlkYy5sCSQ3NjAyNDdmYSwkZWY3NDQ5ZmEsJGZmNzAyODhiLCQ3OGY4M2Q3YworCWRjLmwJJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzNiCisJZGMubAkkMzQwMjQzMjIsJGZmODAxMDAwLCQ0MmVlZmY3ZSwkNDhlZWZmZmYKKwlkYy5sCSRmZmMwMmQ3YywkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMDkwNgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwMDkyYywkNTJhZWZmNzgsJDRjZmIzZmZmCisJZGMubAkkMDE3MDAwMDAsJDA5Mjg0MjgyLCQ3NjAyNDdmYSwkZWY3NDQ5ZmEKKwlkYy5sCSRmZjcwMjg4YiwkNzhmYzNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWVmZmZmLCRmZjgwNGMzYiwkMzQwMjQ1MjIsJGZmODAxMDAwCisJZGMubAkkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQKKwlkYy5sCSRmZjhjNjFmZiwkMDAwMDA4YWUsJDRhMDA2NmZmLCQwMDAwMDhkNAorCWRjLmwJJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDA4ZDA0MjgyCisJZGMubAkkNzYwMjQ3ZmEsJGVmNzQ0OWZhLCRmZjcwMjg4YiwkNzhmZTNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzYgorCWRjLmwJJDM0MDI0NzIyLCRmZjgwMTAwMCwkNDJlZWZmN2UsJDQ4ZWVmZmZmCisJZGMubAkkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDA4NTYKKwlkYy5sCSQ0YTAwNjZmZiwkMDAwMDA4N2MsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZgorCWRjLmwJJDAxNzAwMDAwLCQwODc4NDI4MiwkNzYwMjQ3ZmEsJGVmNzQ0OWZhCisJZGMubAkkZmY3MDI4OGIsJDc4ZjAzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAKKwlkYy5sCSQ0OGVlZmZmZiwkZmY4MDRjM2IsJDM0MDI0OTIyLCRmZjgwMTAwMAorCWRjLmwJJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0CisJZGMubAkkZmY4YzYxZmYsJDAwMDAwN2ZlLCQ0YTAwNjZmZiwkMDAwMDA4MjQKKwlkYy5sCSQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwLCQwODIwNDI4MgorCWRjLmwJJDc2MDI0N2ZhLCRlZjc0NDlmYSwkZmY3MDI4OGIsJDc4ZjgzZDdjCisJZGMubAkkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjM2IKKwlkYy5sCSQzNDAyNGIyMiwkZmY4MDEwMDAsJDQyZWVmZjdlLCQ0OGVlZmZmZgorCWRjLmwJJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAwN2E2CisJZGMubAkkNGEwMDY2ZmYsJDAwMDAwN2NjLCQ1MmFlZmY3OCwkNGNmYjNmZmYKKwlkYy5sCSQwMTcwMDAwMCwkMDdjODQyODIsJDc2MDI0N2ZhLCRlZjc0NDlmYQorCWRjLmwJJGZmNzAyODhiLCQ3OGZjM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZWZmZmYsJGZmODA0YzNiLCQzNDAyNGQyMiwkZmY4MDEwMDAKKwlkYy5sCSQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNAorCWRjLmwJJGZmOGM2MWZmLCQwMDAwMDc0ZSwkNGEwMDY2ZmYsJDAwMDAwNzc0CisJZGMubAkkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMCwkMDc3MDQyODIKKwlkYy5sCSQ3NjAyNDdmYSwkZWY3NDQ5ZmEsJGZmNzAyODhiLCQ3OGZlM2Q3YworCWRjLmwJJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzNiCisJZGMubAkkMzQwMjRmMjIsJGZmODAxMDAwLCQ0MmVlZmY3ZSwkNDhlZWZmZmYKKwlkYy5sCSRmZmMwMmQ3YywkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMDZmNgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwMDcxYywkNTJhZWZmNzgsJDRjZmIzZmZmCisJZGMubAkkMDE3MDAwMDAsJDA3MTg0MjgyLCQ3NjAyNDdmYSwkZWY3NDQ5ZmEKKwlkYy5sCSRmZjcwMjg4YiwkNzhmZTNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWVmZmZmLCRmZjgwNGMzYiwkMzQwMjRmMzMsJGZmZmZmZjgwCisJZGMubAkkMDAwMDEwMDAsJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MKKwlkYy5sCSQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAwNjlhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAwNmMwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMDZiYzQyODIsJDc2MDI0N2ZhLCRlZjc0NDlmYSwkZmY3MDI4OGIKKwlkYy5sCSQ3OGZlM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwLCQ0OGVlZmZmZgorCWRjLmwJJGZmODA0YzNiLCQzNDAyMDc3MywkZmZmZmZmNzAsJDAwMDAxMDAwCisJZGMubAkkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQKKwlkYy5sCSRmZjhjNjFmZiwkMDAwMDA2M2UsJDRhMDA2NmZmLCQwMDAwMDY2NAorCWRjLmwJJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDA2NjA0MjgyCisJZGMubAkkNzYwMjQ3ZmEsJGVmNzQ0OWZhLCRmZjcwMjg4YiwkMjgwYzNkN2MKKwlkYy5sCSQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzMAorCWRjLmwJJDM0MDI0OTkzLCQwMDAwMTAwMCwkNDJlZWZmN2UsJDQ4ZWVmZmZmCisJZGMubAkkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDA1ZTYKKwlkYy5sCSQ0YTAwNjZmZiwkMDAwMDA2MGMsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZgorCWRjLmwJJDAxNzAwMDAwLCQwNjA4NDI4MiwkNzYwMjQ3ZmEsJGVmNzQ0OWZhCisJZGMubAkkZmY3MDI4OGIsJDc4ZjBkODhjLCQzZDdjMDAwMCwkZmY3YzQ0ZmMKKwlkYy5sCSQwMDAwNDhlZSwkZmZmZmZmODAsJDRjMzAzNDAyLCQ0OWIzMDAwMAorCWRjLmwJJDAwMTAwMDAwLCQxMDAwNDJlZSwkZmY3ZTQ4ZWUsJGZmZmZmZmMwCisJZGMubAkkMmQ3YzAwMDAsJDAwMDRmZjhjLCQ2MWZmMDAwMCwkMDU4ODRhMDAKKwlkYy5sCSQ2NmZmMDAwMCwkMDVhZTUyYWUsJGZmNzg0MjgyLCQ3NjAyNDdmYQorCWRjLmwJJGZmNzQ0OWZhLCRmZjcwMjg4YiwkNzhmMDNkN2MsJDAwMDBmZjdjCisJZGMubAkkNDRmYzAwMDAsJDQ4ZWVmZmZmLCRmZjgwNGMzMCwkMzQwMjAxZjEKKwlkYy5sCSRmZmZmZmY3MCwkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YworCWRjLmwJJDAwMDAwMDA0LCRmZjhjNjFmZiwkMDAwMDA1M2EsJDRhMDA2NmZmCisJZGMubAkkMDAwMDA1NjAsJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAKKwlkYy5sCSQwNTVjNDI4MiwkNzYwMjQ3ZmEsJDBmNzQ0OWZhLCRmZjcwMjg4YgorCWRjLmwJJDJjN2MwMDAwLCQwMDAyM2Q3YywkMDAwMGZmN2MsJDQ0ZmMwMDAwCisJZGMubAkkNDhlZWZmZmYsJGZmODA0YzNiLCQzNDAyZWYyMiwkZmY2MGYwMDAKKwlkYy5sCSQ0MmVlZmY3ZSwkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNAorCWRjLmwJJGZmOGM2MWZmLCQwMDAwMDRkZSwkNGEwMDY2ZmYsJDAwMDAwNTA0CisJZGMubAkkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMCwkMDUwMDIwNGYKKwlkYy5sCSQ0MjgyNzYwMiwkNDdmYTBmNzQsJDQ5ZmFmZjcwLCQyODhiMmU3YworCWRjLmwJJDAwMDAwMDAyLCQzZDdjMDAwMCwkZmY3YzQ0ZmMsJDAwMDA0OGVlCisJZGMubAkkZmZmZmZmODAsJDRjM2IzNDAyLCRmZjIyZmY2MCwkZjAwMDQyZWUKKwlkYy5sCSRmZjdlNDhlZSwkZmZmZmZmYzAsJDJkN2MwMDAwLCQwMDA0ZmY4YworCWRjLmwJJDJlNDg2MWZmLCQwMDAwMDQ3ZSwkNGEwMDY2ZmYsJDAwMDAwNGE0CisJZGMubAkkNTJhZWZmNzgsJDRjZmIzZmZmLCQwMTcwMDAwMCwkMDRhMDQyODIKKwlkYy5sCSQ3NjAyNDdmYSwkZmY1NDQ5ZmEsJGZmNzAyODhiLCQ5OWZjMDAwMAorCWRjLmwJJDAwMTA3ODEwLCQzZDdjMDAwMCwkZmY3YzQ0ZmMsJDAwMDA0OGVlCisJZGMubAkkZmZmZmZmODAsJDRjM2IzNDAyLCQ0MTI2ZmY3MCwkMDAxMDQyZWUKKwlkYy5sCSRmZjdlNDhlZSwkZmZmZmZmYzAsJDJkN2MwMDAwLCQwMDA0ZmY4YworCWRjLmwJJDYxZmYwMDAwLCQwNDIwNGEwMCwkNjZmZjAwMDAsJDA0NDY1MmFlCisJZGMubAkkZmY3ODRjZmIsJDNmZmYwMTcwLCQwMDAwMDQ0MiwkNDI4Mjc2MDIKKwlkYy5sCSQ0N2ZhZmY1NCwkNDlmYWZmNzAsJDI4OGI5OWZjLCQwMDAwMDAxMAorCWRjLmwJJDc4MDgzZDdjLCQwMDAwZmY3YywkNDRmYzAwMDAsJDQ4ZWVmZmZmCisJZGMubAkkZmY4MDRjM2IsJDM0MDI0MzI2LCRmZjcwMDAxMCwkNDJlZWZmN2UKKwlkYy5sCSQ0OGVlZmZmZiwkZmZjMDJkN2MsJDAwMDAwMDA0LCRmZjhjNjFmZgorCWRjLmwJJDAwMDAwM2MyLCQ0YTAwNjZmZiwkMDAwMDAzZTgsJDUyYWVmZjc4CisJZGMubAkkNGNmYjNmZmYsJDAxNzAwMDAwLCQwM2U0NDI4MiwkNzYwMjQ3ZmEKKwlkYy5sCSRmZjU0NDlmYSwkZmY3MDI4OGIsJDk5ZmMwMDAwLCQwMDEwNzgwNAorCWRjLmwJJDNkN2MwMDAwLCRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwCisJZGMubAkkNGMzYjM0MDIsJDQ1MjZmZjcwLCQwMDEwNDJlZSwkZmY3ZTQ4ZWUKKwlkYy5sCSRmZmZmZmZjMCwkMmQ3YzAwMDAsJDAwMDRmZjhjLCQ2MWZmMDAwMAorCWRjLmwJJDAzNjQ0YTAwLCQ2NmZmMDAwMCwkMDM4YTUyYWUsJGZmNzg0Y2ZiCisJZGMubAkkM2ZmZjAxNzAsJDAwMDAwMzg2LCQ0MjgyNzYwMiwkNDdmYWZmNTQKKwlkYy5sCSQ0OWZhZmY3MCwkMjg4Yjk5ZmMsJDAwMDAwMDEwLCQ3ODAyM2Q3YworCWRjLmwJJDAwMDBmZjdjLCQ0NGZjMDAwMCwkNDhlZWZmZmYsJGZmODA0YzNiCisJZGMubAkkMzQwMjQ3MjYsJGZmNzAwMDEwLCQ0MmVlZmY3ZSwkNDhlZWZmZmYKKwlkYy5sCSRmZmMwMmQ3YywkMDAwMDAwMDQsJGZmOGM2MWZmLCQwMDAwMDMwNgorCWRjLmwJJDRhMDA2NmZmLCQwMDAwMDMyYywkNTJhZWZmNzgsJDRjZmIzZmZmCisJZGMubAkkMDE3MDAwMDAsJDAzMjg0MjgyLCQ3NjAyNDdmYSwkZmY1NDQ5ZmEKKwlkYy5sCSRmZjcwMjg4YiwkOTlmYzAwMDAsJDAwMTA3ODEwLCQzZDdjMDAwMAorCWRjLmwJJGZmN2M0NGZjLCQwMDAwNDhlZSwkZmZmZmZmODAsJDRjM2IzNDAyCisJZGMubAkkNDkyNmZmNzAsJDAwMTA0MmVlLCRmZjdlNDhlZSwkZmZmZmZmYzAKKwlkYy5sCSQyZDdjMDAwMCwkMDAwNGZmOGMsJDYxZmYwMDAwLCQwMmE4NGEwMAorCWRjLmwJJDY2ZmYwMDAwLCQwMmNlNTJhZSwkZmY3ODRjZmIsJDNmZmYwMTcwCisJZGMubAkkMDAwMDAyY2EsJDQyODI3NjAyLCQ0N2ZhZmY1NCwkNDlmYWZmNzAKKwlkYy5sCSQyODhiOTlmYywkMDAwMDAwMTAsJDc4MDgzZDdjLCQwMDAwZmY3YworCWRjLmwJJDQ0ZmMwMDAwLCQ0OGVlZmZmZiwkZmY4MDRjM2IsJDM0MDI0MzI2CisJZGMubAkkZmY3MDAwMTAsJDQyZWVmZjdlLCQ0OGVlZmZmZiwkZmZjMDJkN2MKKwlkYy5sCSQwMDAwMDAwNCwkZmY4YzYxZmYsJDAwMDAwMjRhLCQ0YTAwNjZmZgorCWRjLmwJJDAwMDAwMjcwLCQ1MmFlZmY3OCwkNGNmYjNmZmYsJDAxNzAwMDAwCisJZGMubAkkMDI2YzQyODIsJDc2MDI0N2ZhLCRmZjU0NDlmYSwkZmY3MDI4OGIKKwlkYy5sCSQ5OWZjMDAwMCwkMDAxMDc4MDQsJDNkN2MwMDAwLCRmZjdjNDRmYworCWRjLmwJJDAwMDA0OGVlLCRmZmZmZmY4MCwkNGMzYjM0MDIsJDRkMjZmZjcwCisJZGMubAkkMDAxMDQyZWUsJGZmN2U0OGVlLCRmZmZmZmZjMCwkMmQ3YzAwMDAKKwlkYy5sCSQwMDA0ZmY4YywkNjFmZjAwMDAsJDAxZWM0YTAwLCQ2NmZmMDAwMAorCWRjLmwJJDAyMTI1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDAwMjBlCisJZGMubAkkNDI4Mjc2MDIsJDQ3ZmFmZjU0LCQ0OWZhZmY3MCwkMjg4Yjk5ZmMKKwlkYy5sCSQwMDAwMDAxMCwkNzgwMjNkN2MsJDAwMDBmZjdjLCQ0NGZjMDAwMAorCWRjLmwJJDQ4ZWVmZmZmLCRmZjgwNGMzYiwkMzQwMjRmMjYsJGZmNzAwMDEwCisJZGMubAkkNDJlZWZmN2UsJDQ4ZWVmZmZmLCRmZmMwMmQ3YywkMDAwMDAwMDQKKwlkYy5sCSRmZjhjNjFmZiwkMDAwMDAxOGUsJDRhMDA2NmZmLCQwMDAwMDFiNAorCWRjLmwJJDUyYWVmZjc4LCQ0Y2ZiM2ZmZiwkMDE3MDAwMDAsJDAxYjA0MjgyCisJZGMubAkkNzYwMjQ3ZmEsJGZmNTQ0OWZhLCRmZjcwMjg4YiwkOTlmYzAwMDAKKwlkYy5sCSQwMDEwNzgwMiwkM2Q3YzAwMDAsJGZmN2M0NGZjLCQwMDAwNDhlZQorCWRjLmwJJGZmZmZmZjgwLCQ0YzNiMzQwMiwkNGYzN2ZmZmYsJGZmNzAwMDAwCisJZGMubAkkMDAxMDQyZWUsJGZmN2U0OGVlLCRmZmZmZmZjMCwkMmQ3YzAwMDAKKwlkYy5sCSQwMDA0ZmY4YywkNjFmZjAwMDAsJDAxMmM0YTAwLCQ2NmZmMDAwMAorCWRjLmwJJDAxNTI1MmFlLCRmZjc4NGNmYiwkM2ZmZjAxNzAsJDAwMDAwMTRlCisJZGMubAkkNDI4Mjc2MDIsJDQ3ZmFmZjU0LCQ0OWZhZmY3MCwkMjg4Yjc4MDIKKwlkYy5sCSQzZDdjMDAwMCwkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MAorCWRjLmwJJDRjM2IzNDAyLCQwNzczZmZmZiwkZmY3MDAwMDAsJDAwMjA0MmVlCisJZGMubAkkZmY3ZTQ4ZWUsJGZmZmZmZmMwLCQyZDdjMDAwMCwkMDAwNGZmOGMKKwlkYy5sCSQ2MWZmMDAwMCwkMDBkMDRhMDAsJDY2ZmYwMDAwLCQwMGY2NTJhZQorCWRjLmwJJGZmNzg0Y2ZiLCQzZmZmMDE3MCwkMDAwMDAwZjIsJDQyODI3NjAyCisJZGMubAkkNDdmYWZmNTQsJDQ5ZmFmZjcwLCQyODhiNzgwNCwkM2Q3YzAwMDAKKwlkYy5sCSRmZjdjNDRmYywkMDAwMDQ4ZWUsJGZmZmZmZjgwLCQ0YzMwMzQwMgorCWRjLmwJJDRmYjVmZmZmLCRmZjcwNDJlZSwkZmY3ZTQ4ZWUsJGZmZmZmZmMwCisJZGMubAkkMmQ3YzAwMDAsJDAwMDRmZjhjLCQ2MWZmMDAwMCwkMDA3ODRhMDAKKwlkYy5sCSQ2NmZmMDAwMCwkMDA5ZTUyYWUsJGZmNzg0Y2ZiLCQzZmZmMDE3MAorCWRjLmwJJDAwMDAwMDlhLCQyMDRmNDI4MiwkNzYwMjQ3ZmEsJGZmNzQ0ZGZhCisJZGMubAkkZmY3MDJjOGIsJGRkZmMwMDAwLCQwMDEwMmU3YywkZmZmZmZmZmUKKwlkYy5sCSQzZDdjMDAwMCwkZmY3YzQ0ZmMsJDAwMDA0OGVlLCRmZmZmZmY4MAorCWRjLmwJJDRjM2IzNDAyLCRmZjI3ZmY3MCwkMDAwMDAwMTAsJDQyZWVmZjdlCisJZGMubAkkNDhlZWZmZmYsJGZmYzAyZDdjLCQwMDAwMDAwNCwkZmY4YzJlNDgKKwlkYy5sCSQ2MWZmMDAwMCwkMDAxMDRhMDAsJDY2ZmYwMDAwLCQwMDM2NDI4MAorCWRjLmwJJDRlNzU0MWVlLCRmZjgwNDNlZSwkZmZjMDcwMGUsJGIxODk2NmZmCisJZGMubAkkMDAwMDAwMWMsJDUxYzhmZmY2LCQzMDJlZmY3YywkMzIyZWZmN2UKKwlkYy5sCSRiMDQxNjZmZiwkMDAwMDAwMDgsJDQyODA0ZTc1LCQ3MDAxNGU3NQorCWRjLmwJJDIyMmVmZjc4LCQ3MDAxNGU3NSwkYWNhY2FjYWMsJGFjYWNhY2FjCisJZGMubAkkYWNhY2FjYWMsJGFjYWNhY2FjLCRhY2FjYWNhYywkYWNhY2FjYWMKKwlkYy5sCSRhY2FjYWNhYywkYWNhY2FjYWMsJGFjYWNhY2FjLCRhY2FjYWNhYworCWRjLmwJJGFjYWNhY2FjLCRhY2FjYWNhYywkYWNhY2FjYWMsJGFjYWNhY2FjCisJZGMubAkkYWNhY2FjYWMsJGFjYWNhY2FjLCQyZjAwMjAzYSwkYWZhNDQ4N2IKKwlkYy5sCSQwOTMwZmZmZiwkYWZhMDIwMmYsJDAwMDQ0ZTc0LCQwMDA0MmYwMAorCWRjLmwJJDIwM2FhZjkyLCQ0ODdiMDkzMCwkZmZmZmFmOGEsJDIwMmYwMDA0CisJZGMubAkkNGU3NDAwMDQsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9vcy5TIGIvYXJjaC9tNjhrL2lmcHNwMDYwL29zLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE0ZGY4NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9vcy5TCkBAIC0wLDAgKzEsMzk2IEBACit8fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Cit8TU9UT1JPTEEgTUlDUk9QUk9DRVNTT1IgJiBNRU1PUlkgVEVDSE5PTE9HWSBHUk9VUAorfE02ODAwMCBIaS1QZXJmb3JtYW5jZSBNaWNyb3Byb2Nlc3NvciBEaXZpc2lvbgorfE02ODA2MCBTb2Z0d2FyZSBQYWNrYWdlCit8UHJvZHVjdGlvbiBSZWxlYXNlIFAxLjAwIC0tIE9jdG9iZXIgMTAsIDE5OTQKK3wKK3xNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCit8Cit8VEhFIFNPRlRXQVJFIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMgYW5kIHdpdGhvdXQgd2FycmFudHkuCit8VG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK3xNT1RPUk9MQSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0hFVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCit8SU5DTFVESU5HIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK3xhbmQgYW55IHdhcnJhbnR5IGFnYWluc3QgaW5mcmluZ2VtZW50IHdpdGggcmVnYXJkIHRvIHRoZSBTT0ZUV0FSRQorfChJTkNMVURJTkcgQU5ZIE1PRElGSUVEIFZFUlNJT05TIFRIRVJFT0YpIGFuZCBhbnkgYWNjb21wYW55aW5nIHdyaXR0ZW4gbWF0ZXJpYWxzLgorfAorfFRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCit8SU4gTk8gRVZFTlQgU0hBTEwgTU9UT1JPTEEgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCit8KElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgQlVTSU5FU1MgUFJPRklUUywKK3xCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIE9USEVSIFBFQ1VOSUFSWSBMT1NTKQorfEFSSVNJTkcgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTT0ZUV0FSRS4KK3xNb3Rvcm9sYSBhc3N1bWVzIG5vIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgbWFpbnRlbmFuY2UgYW5kIHN1cHBvcnQgb2YgdGhlIFNPRlRXQVJFLgorfAorfFlvdSBhcmUgaGVyZWJ5IGdyYW50ZWQgYSBjb3B5cmlnaHQgbGljZW5zZSB0byB1c2UsIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNPRlRXQVJFCit8c28gbG9uZyBhcyB0aGlzIGVudGlyZSBub3RpY2UgaXMgcmV0YWluZWQgd2l0aG91dCBhbHRlcmF0aW9uIGluIGFueSBtb2RpZmllZCBhbmQvb3IKK3xyZWRpc3RyaWJ1dGVkIHZlcnNpb25zLCBhbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KK3xObyBsaWNlbnNlcyBhcmUgZ3JhbnRlZCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlIHVuZGVyIGFueSBwYXRlbnRzCit8b3IgdHJhZGVtYXJrcyBvZiBNb3Rvcm9sYSwgSW5jLgorfH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorfCBvcy5zCit8Cit8IFRoaXMgZmlsZSBjb250YWluczoKK3wJLSBleGFtcGxlICJDYWxsLU91dCJzIHJlcXVpcmVkIGJ5IGJvdGggdGhlIElTUCBhbmQgRlBTUC4KK3wKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworfCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit8IEVYQU1QTEUgQ0FMTC1PVVRTCQkjCit8CQkJCSMKK3wgXzA2MF9kbWVtX3dyaXRlKCkJCSMKK3wgXzA2MF9kbWVtX3JlYWQoKQkJIworfCBfMDYwX2ltZW1fcmVhZCgpCQkjCit8IF8wNjBfZG1lbV9yZWFkX2J5dGUoKQkJIworfCBfMDYwX2RtZW1fcmVhZF93b3JkKCkJCSMKK3wgXzA2MF9kbWVtX3JlYWRfbG9uZygpCQkjCit8IF8wNjBfaW1lbV9yZWFkX3dvcmQoKQkJIworfCBfMDYwX2ltZW1fcmVhZF9sb25nKCkJCSMKK3wgXzA2MF9kbWVtX3dyaXRlX2J5dGUoKQkjCit8IF8wNjBfZG1lbV93cml0ZV93b3JkKCkJIworfCBfMDYwX2RtZW1fd3JpdGVfbG9uZygpCSMKK3wJCQkJIworfCBfMDYwX3JlYWxfdHJhY2UoKQkJIworfCBfMDYwX3JlYWxfYWNjZXNzKCkJCSMKK3wjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit8Cit8IEVhY2ggSU8gcm91dGluZSBjaGVja3MgdG8gc2VlIGlmIHRoZSBtZW1vcnkgd3JpdGUvcmVhZCBpcyB0by9mcm9tIHVzZXIKK3wgb3Igc3VwZXJ2aXNvciBhcHBsaWNhdGlvbiBzcGFjZS4gVGhlIGV4YW1wbGVzIGJlbG93IHVzZSBzaW1wbGUgIm1vdmUiCit8IGluc3RydWN0aW9ucyBmb3Igc3VwZXJ2aXNvciBtb2RlIGFwcGxpY2F0aW9ucyBhbmQgY2FsbCBfY29weWluKCkvX2NvcHlvdXQoKQorfCBmb3IgdXNlciBtb2RlIGFwcGxpY2F0aW9ucy4KK3wgV2hlbiBpbnN0YWxsaW5nIHRoZSAwNjBTUCwgdGhlIF9jb3B5aW4oKS9fY29weW91dCgpIGVxdWl2YWxlbnRzIGZvciBhCit8IGdpdmVuIG9wZXJhdGluZyBzeXN0ZW0gc2hvdWxkIGJlIHN1YnN0aXR1dGVkLgorfAorfCBUaGUgYWRkcmVzc2VzIHdpdGhpbiB0aGUgMDYwU1AgYXJlIGd1YXJhbnRlZWQgdG8gYmUgb24gdGhlIHN0YWNrLgorfCBUaGUgcmVzdWx0IGlzIHRoYXQgVW5peCBwcm9jZXNzZXMgYXJlIGFsbG93ZWQgdG8gc2xlZXAgYXMgYSBjb25zZXF1ZW5jZQorfCBvZiBhIHBhZ2UgZmF1bHQgZHVyaW5nIGEgX2NvcHlvdXQuCit8Cit8IExpbnV4LzY4azogVGhlIF8wNjBfW2lkXW1lbV97cmVhZCx3cml0ZX1fe2J5dGUsd29yZCxsb25nfSBmdW5jdGlvbnMKK3wgKGkuZS4gYWxsIHRoZSBrbm93biBsZW5ndGggPD0gNCkgYXJlIGltcGxlbWVudGVkIGJ5IHNpbmdsZSBtb3ZlcworfCBzdGF0ZW1lbnRzIGluc3RlYWQgb2YgKG1vcmUgZXhwZW5zaXZlKSBjb3B5e2luLG91dH0gY2FsbHMsIGlmCit8IHdvcmtpbmcgaW4gdXNlciBzcGFjZQorCit8Cit8IF8wNjBfZG1lbV93cml0ZSgpOgorfAorfCBXcml0ZXMgdG8gZGF0YSBtZW1vcnkgd2hpbGUgaW4gc3VwZXJ2aXNvciBtb2RlLgorfAorfCBJTlBVVFM6Cit8CWEwIC0gc3VwZXJ2aXNvciBzb3VyY2UgYWRkcmVzcworfAlhMSAtIHVzZXIgZGVzdGluYXRpb24gYWRkcmVzcworfAlkMCAtIG51bWJlciBvZiBieXRlcyB0byB3cml0ZQorfAkweDQoJWE2KSxiaXQ1IC0gMSA9IHN1cGVydmlzb3IgbW9kZSwgMCA9IHVzZXIgbW9kZQorfCBPVVRQVVRTOgorfAlkMSAtIDAgPSBzdWNjZXNzLCAhMCA9IGZhaWx1cmUKK3wKKwkuZ2xvYmFsCQlfMDYwX2RtZW1fd3JpdGUKK18wNjBfZG1lbV93cml0ZToKKwlzdWJxLmwJCSMxLCVkMAorCWJ0c3QJCSMweDUsMHg0KCVhNikJCXwgY2hlY2sgZm9yIHN1cGVydmlzb3Igc3RhdGUKKwliZXFzCQl1c2VyX3dyaXRlCitzdXBlcl93cml0ZToKKwltb3ZlLmIJCSglYTApKywoJWExKSsJCXwgY29weSAxIGJ5dGUKKwlkYnJhCQklZDAsc3VwZXJfd3JpdGUJCXwgcXVpdCBpZiAtLWN0ciA8IDAKKwljbHIubAkJJWQxCQkJfCByZXR1cm4gc3VjY2VzcworCXJ0cwordXNlcl93cml0ZToKKwltb3ZlLmIJCSglYTApKywlZDEJCXwgY29weSAxIGJ5dGUKK2NvcHlvdXRhZToKKwltb3ZzLmIJCSVkMSwoJWExKSsKKwlkYnJhCQklZDAsdXNlcl93cml0ZQkJfCBxdWl0IGlmIC0tY3RyIDwgMAorCWNsci5sCQklZDEJCQl8IHJldHVybiBzdWNjZXNzCisJcnRzCisKK3wKK3wgXzA2MF9pbWVtX3JlYWQoKSwgXzA2MF9kbWVtX3JlYWQoKToKK3wKK3wgUmVhZHMgZnJvbSBkYXRhL2luc3RydWN0aW9uIG1lbW9yeSB3aGlsZSBpbiBzdXBlcnZpc29yIG1vZGUuCit8Cit8IElOUFVUUzoKK3wJYTAgLSB1c2VyIHNvdXJjZSBhZGRyZXNzCit8CWExIC0gc3VwZXJ2aXNvciBkZXN0aW5hdGlvbiBhZGRyZXNzCit8CWQwIC0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQKK3wJMHg0KCVhNiksYml0NSAtIDEgPSBzdXBlcnZpc29yIG1vZGUsIDAgPSB1c2VyIG1vZGUKK3wgT1VUUFVUUzoKK3wJZDEgLSAwID0gc3VjY2VzcywgITAgPSBmYWlsdXJlCit8CisJLmdsb2JhbAkJXzA2MF9pbWVtX3JlYWQKKwkuZ2xvYmFsCQlfMDYwX2RtZW1fcmVhZAorXzA2MF9pbWVtX3JlYWQ6CitfMDYwX2RtZW1fcmVhZDoKKwlzdWJxLmwJCSMxLCVkMAorCWJ0c3QJCSMweDUsMHg0KCVhNikJCXwgY2hlY2sgZm9yIHN1cGVydmlzb3Igc3RhdGUKKwliZXFzCQl1c2VyX3JlYWQKK3N1cGVyX3JlYWQ6CisJbW92ZS5iCQkoJWEwKSssKCVhMSkrCQl8IGNvcHkgMSBieXRlCisJZGJyYQkJJWQwLHN1cGVyX3JlYWQJCXwgcXVpdCBpZiAtLWN0ciA8IDAKKwljbHIubAkJJWQxCQkJfCByZXR1cm4gc3VjY2VzcworCXJ0cwordXNlcl9yZWFkOgorY29weWluYWU6CisJbW92cy5iCQkoJWEwKSssJWQxCisJbW92ZS5iCQklZDEsKCVhMSkrCQl8IGNvcHkgMSBieXRlCisJZGJyYQkJJWQwLHVzZXJfcmVhZAkJfCBxdWl0IGlmIC0tY3RyIDwgMAorCWNsci5sCQklZDEJCQl8IHJldHVybiBzdWNjZXNzCisJcnRzCisKK3wKK3wgXzA2MF9kbWVtX3JlYWRfYnl0ZSgpOgorfAorfCBSZWFkIGEgZGF0YSBieXRlIGZyb20gdXNlciBtZW1vcnkuCit8Cit8IElOUFVUUzoKK3wJYTAgLSB1c2VyIHNvdXJjZSBhZGRyZXNzCit8CTB4NCglYTYpLGJpdDUgLSAxID0gc3VwZXJ2aXNvciBtb2RlLCAwID0gdXNlciBtb2RlCit8IE9VVFBVVFM6Cit8CWQwIC0gZGF0YSBieXRlIGluIGQwCit8CWQxIC0gMCA9IHN1Y2Nlc3MsICEwID0gZmFpbHVyZQorfAorCS5nbG9iYWwJCV8wNjBfZG1lbV9yZWFkX2J5dGUKK18wNjBfZG1lbV9yZWFkX2J5dGU6CisJY2xyLmwJCSVkMAkJCXwgY2xlYXIgd2hvbGUgbG9uZ3dvcmQKKwljbHIubAkJJWQxCQkJfCBhc3N1bWUgc3VjY2VzcworCWJ0c3QJCSMweDUsMHg0KCVhNikJCXwgY2hlY2sgZm9yIHN1cGVydmlzb3Igc3RhdGUKKwlibmVzCQlkbXJicwkJCXwgc3VwZXJ2aXNvcgorZG1yYnVhZTptb3ZzLmIJCSglYTApLCVkMAkJfCBmZXRjaCB1c2VyIGJ5dGUKKwlydHMKK2RtcmJzOgltb3ZlLmIJCSglYTApLCVkMAkJfCBmZXRjaCBzdXBlciBieXRlCisJcnRzCisKK3wKK3wgXzA2MF9kbWVtX3JlYWRfd29yZCgpOgorfAorfCBSZWFkIGEgZGF0YSB3b3JkIGZyb20gdXNlciBtZW1vcnkuCit8Cit8IElOUFVUUzoKK3wJYTAgLSB1c2VyIHNvdXJjZSBhZGRyZXNzCit8CTB4NCglYTYpLGJpdDUgLSAxID0gc3VwZXJ2aXNvciBtb2RlLCAwID0gdXNlciBtb2RlCit8IE9VVFBVVFM6Cit8CWQwIC0gZGF0YSB3b3JkIGluIGQwCit8CWQxIC0gMCA9IHN1Y2Nlc3MsICEwID0gZmFpbHVyZQorfAorfCBfMDYwX2ltZW1fcmVhZF93b3JkKCk6Cit8Cit8IFJlYWQgYW4gaW5zdHJ1Y3Rpb24gd29yZCBmcm9tIHVzZXIgbWVtb3J5LgorfAorfCBJTlBVVFM6Cit8CWEwIC0gdXNlciBzb3VyY2UgYWRkcmVzcworfAkweDQoJWE2KSxiaXQ1IC0gMSA9IHN1cGVydmlzb3IgbW9kZSwgMCA9IHVzZXIgbW9kZQorfCBPVVRQVVRTOgorfAlkMCAtIGluc3RydWN0aW9uIHdvcmQgaW4gZDAKK3wJZDEgLSAwID0gc3VjY2VzcywgITAgPSBmYWlsdXJlCit8CisJLmdsb2JhbAkJXzA2MF9kbWVtX3JlYWRfd29yZAorCS5nbG9iYWwJCV8wNjBfaW1lbV9yZWFkX3dvcmQKK18wNjBfZG1lbV9yZWFkX3dvcmQ6CitfMDYwX2ltZW1fcmVhZF93b3JkOgorCWNsci5sCQklZDEJCQl8IGFzc3VtZSBzdWNjZXNzCisJY2xyLmwJCSVkMAkJCXwgY2xlYXIgd2hvbGUgbG9uZ3dvcmQKKwlidHN0CQkjMHg1LDB4NCglYTYpCQl8IGNoZWNrIGZvciBzdXBlcnZpc29yIHN0YXRlCisJYm5lcwkJZG1yd3MJCQl8IHN1cGVydmlzb3IKK2Rtcnd1YWU6bW92cy53CQkoJWEwKSwgJWQwCQl8IGZldGNoIHVzZXIgd29yZAorCXJ0cworZG1yd3M6CW1vdmUudwkJKCVhMCksICVkMAkJfCBmZXRjaCBzdXBlciB3b3JkCisJcnRzCisKK3wKK3wgXzA2MF9kbWVtX3JlYWRfbG9uZygpOgorfAorCit8Cit8IElOUFVUUzoKK3wJYTAgLSB1c2VyIHNvdXJjZSBhZGRyZXNzCit8CTB4NCglYTYpLGJpdDUgLSAxID0gc3VwZXJ2aXNvciBtb2RlLCAwID0gdXNlciBtb2RlCit8IE9VVFBVVFM6Cit8CWQwIC0gZGF0YSBsb25nd29yZCBpbiBkMAorfAlkMSAtIDAgPSBzdWNjZXNzLCAhMCA9IGZhaWx1cmUKK3wKK3wgXzA2MF9pbWVtX3JlYWRfbG9uZygpOgorfAorfCBSZWFkIGFuIGluc3RydWN0aW9uIGxvbmd3b3JkIGZyb20gdXNlciBtZW1vcnkuCit8Cit8IElOUFVUUzoKK3wJYTAgLSB1c2VyIHNvdXJjZSBhZGRyZXNzCit8CTB4NCglYTYpLGJpdDUgLSAxID0gc3VwZXJ2aXNvciBtb2RlLCAwID0gdXNlciBtb2RlCit8IE9VVFBVVFM6Cit8CWQwIC0gaW5zdHJ1Y3Rpb24gbG9uZ3dvcmQgaW4gZDAKK3wJZDEgLSAwID0gc3VjY2VzcywgITAgPSBmYWlsdXJlCit8CisJLmdsb2JhbAkJXzA2MF9kbWVtX3JlYWRfbG9uZworCS5nbG9iYWwJCV8wNjBfaW1lbV9yZWFkX2xvbmcKK18wNjBfZG1lbV9yZWFkX2xvbmc6CitfMDYwX2ltZW1fcmVhZF9sb25nOgorCWNsci5sCQklZDEJCQl8IGFzc3VtZSBzdWNjZXNzCisJYnRzdAkJIzB4NSwweDQoJWE2KQkJfCBjaGVjayBmb3Igc3VwZXJ2aXNvciBzdGF0ZQorCWJuZXMJCWRtcmxzCQkJfCBzdXBlcnZpc29yCitkbXJsdWFlOm1vdnMubAkJKCVhMCksJWQwCQl8IGZldGNoIHVzZXIgbG9uZ3dvcmQKKwlydHMKK2RtcmxzOgltb3ZlLmwJCSglYTApLCVkMAkJfCBmZXRjaCBzdXBlciBsb25nd29yZAorCXJ0cworCit8Cit8IF8wNjBfZG1lbV93cml0ZV9ieXRlKCk6Cit8Cit8IFdyaXRlIGEgZGF0YSBieXRlIHRvIHVzZXIgbWVtb3J5LgorfAorfCBJTlBVVFM6Cit8CWEwIC0gdXNlciBkZXN0aW5hdGlvbiBhZGRyZXNzCit8CWQwIC0gZGF0YSBieXRlIGluIGQwCit8CTB4NCglYTYpLGJpdDUgLSAxID0gc3VwZXJ2aXNvciBtb2RlLCAwID0gdXNlciBtb2RlCit8IE9VVFBVVFM6Cit8CWQxIC0gMCA9IHN1Y2Nlc3MsICEwID0gZmFpbHVyZQorfAorCS5nbG9iYWwJCV8wNjBfZG1lbV93cml0ZV9ieXRlCitfMDYwX2RtZW1fd3JpdGVfYnl0ZToKKwljbHIubAkJJWQxCQkJfCBhc3N1bWUgc3VjY2VzcworCWJ0c3QJCSMweDUsMHg0KCVhNikJCXwgY2hlY2sgZm9yIHN1cGVydmlzb3Igc3RhdGUKKwlibmVzCQlkbXdicwkJCXwgc3VwZXJ2aXNvcgorZG13YnVhZTptb3ZzLmIJCSVkMCwoJWEwKQkJfCBzdG9yZSB1c2VyIGJ5dGUKKwlydHMKK2Rtd2JzOgltb3ZlLmIJCSVkMCwoJWEwKQkJfCBzdG9yZSBzdXBlciBieXRlCisJcnRzCisKK3wKK3wgXzA2MF9kbWVtX3dyaXRlX3dvcmQoKToKK3wKK3wgV3JpdGUgYSBkYXRhIHdvcmQgdG8gdXNlciBtZW1vcnkuCit8Cit8IElOUFVUUzoKK3wJYTAgLSB1c2VyIGRlc3RpbmF0aW9uIGFkZHJlc3MKK3wJZDAgLSBkYXRhIHdvcmQgaW4gZDAKK3wJMHg0KCVhNiksYml0NSAtIDEgPSBzdXBlcnZpc29yIG1vZGUsIDAgPSB1c2VyIG1vZGUKK3wgT1VUUFVUUzoKK3wJZDEgLSAwID0gc3VjY2VzcywgITAgPSBmYWlsdXJlCit8CisJLmdsb2JhbAkJXzA2MF9kbWVtX3dyaXRlX3dvcmQKK18wNjBfZG1lbV93cml0ZV93b3JkOgorCWNsci5sCQklZDEJCQl8IGFzc3VtZSBzdWNjZXNzCisJYnRzdAkJIzB4NSwweDQoJWE2KQkJfCBjaGVjayBmb3Igc3VwZXJ2aXNvciBzdGF0ZQorCWJuZXMJCWRtd3dzCQkJfCBzdXBlcnZpc29yCitkbXd3dToKK2Rtd3d1YWU6bW92cy53CQklZDAsKCVhMCkJCXwgc3RvcmUgdXNlciB3b3JkCisJYnJhcwkJZG13d3IKK2Rtd3dzOgltb3ZlLncJCSVkMCwoJWEwKQkJfCBzdG9yZSBzdXBlciB3b3JkCitkbXd3cjoJY2xyLmwJCSVkMQkJCXwgcmV0dXJuIHN1Y2Nlc3MKKwlydHMKKworfAorfCBfMDYwX2RtZW1fd3JpdGVfbG9uZygpOgorfAorfCBXcml0ZSBhIGRhdGEgbG9uZ3dvcmQgdG8gdXNlciBtZW1vcnkuCit8Cit8IElOUFVUUzoKK3wJYTAgLSB1c2VyIGRlc3RpbmF0aW9uIGFkZHJlc3MKK3wJZDAgLSBkYXRhIGxvbmd3b3JkIGluIGQwCit8CTB4NCglYTYpLGJpdDUgLSAxID0gc3VwZXJ2aXNvciBtb2RlLCAwID0gdXNlciBtb2RlCit8IE9VVFBVVFM6Cit8CWQxIC0gMCA9IHN1Y2Nlc3MsICEwID0gZmFpbHVyZQorfAorCS5nbG9iYWwJCV8wNjBfZG1lbV93cml0ZV9sb25nCitfMDYwX2RtZW1fd3JpdGVfbG9uZzoKKwljbHIubAkJJWQxCQkJfCBhc3N1bWUgc3VjY2VzcworCWJ0c3QJCSMweDUsMHg0KCVhNikJCXwgY2hlY2sgZm9yIHN1cGVydmlzb3Igc3RhdGUKKwlibmVzCQlkbXdscwkJCXwgc3VwZXJ2aXNvcgorZG13bHVhZTptb3ZzLmwJCSVkMCwoJWEwKQkJfCBzdG9yZSB1c2VyIGxvbmd3b3JkCisJcnRzCitkbXdsczoJbW92ZS5sCQklZDAsKCVhMCkJCXwgc3RvcmUgc3VwZXIgbG9uZ3dvcmQKKwlydHMKKworCisjaWYgMAorfCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3wKK3wgVXNlIHRoZXNlIHJvdXRpbmVzIGlmIHlvdXIga2VybmVsIGRvZXNuJ3QgaGF2ZSBfY29weW91dC9fY29weWluIGVxdWl2YWxlbnRzLgorfCBBc3N1bWVzIHRoYXQgRDAvRDEvQTAvQTEgYXJlIHNjcmF0Y2ggcmVnaXN0ZXJzLiBUaGUgX2NvcHlpbi9fY29weW91dAorfCBiZWxvdyBhc3N1bWUgdGhhdCB0aGUgU0ZDL0RGQyBoYXZlIGJlZW4gc2V0IHByZXZpb3VzbHkuCit8Cit8IExpbnV4LzY4azogVGhlc2UgYXJlIGJhc2ljYWxseSBub24taW5saW5lZCB2ZXJzaW9ucyBvZgorfCBtZW1jcHlfe3RvLGZyb219ZnMsIGJ1dCB3aXRob3V0IGxvbmctdHJhbnNmZXIgb3B0aW1pemF0aW9uCit8IE5vdGU6IEFzc3VtZWQgdGhhdCBTRkMvREZDIGFyZSBwb2ludGluZyBjb3JyZWN0bHkgdG8gdXNlciBkYXRhCit8IHNwYWNlLi4uIFNob3VsZCBiZSByaWdodCwgb3IgYXJlIHRoZXJlIGFueSBleGNlcHRpb25zPworCit8Cit8IGludCBfY29weW91dChzdXBlcnZpc29yX2FkZHIsIHVzZXJfYWRkciwgbmJ5dGVzKQorfAorCS5nbG9iYWwJCV9jb3B5b3V0CitfY29weW91dDoKKwltb3ZlLmwJCTQoJXNwKSwlYTAJCXwgc291cmNlCisJbW92ZS5sCQk4KCVzcCksJWExCQl8IGRlc3RpbmF0aW9uCisJbW92ZS5sCQkxMiglc3ApLCVkMAkJfCBjb3VudAorCXN1YnEubAkJIzEsJWQwCittb3Jlb3V0OgorCW1vdmUuYgkJKCVhMCkrLCVkMQkJfCBmZXRjaCBzdXBlcnZpc29yIGJ5dGUKK2NvcHlvdXRhZToKKwltb3ZzLmIJCSVkMSwoJWExKSsJCXwgc3RvcmUgdXNlciBieXRlCisJZGJyYQkJJWQwLG1vcmVvdXQJCXwgYXJlIHdlIHRocm91Z2ggeWV0PworCW1vdmVxCQkjMCwlZDAJCQl8IHJldHVybiBzdWNjZXNzCisJcnRzCisKK3wKK3wgaW50IF9jb3B5aW4odXNlcl9hZGRyLCBzdXBlcnZpc29yX2FkZHIsIG5ieXRlcykKK3wKKwkuZ2xvYmFsCQlfY29weWluCitfY29weWluOgorCW1vdmUubAkJNCglc3ApLCVhMAkJfCBzb3VyY2UKKwltb3ZlLmwJCTgoJXNwKSwlYTEJCXwgZGVzdGluYXRpb24KKwltb3ZlLmwJCTEyKCVzcCksJWQwCQl8IGNvdW50CisgICAgc3VicS5sICAgICAgIzEsJWQwCittb3JlaW46Citjb3B5aW5hZToKKwltb3ZzLmIJCSglYTApKywlZDEJCXwgZmV0Y2ggdXNlciBieXRlCisJbW92ZS5iCQklZDEsKCVhMSkrCQl8IHdyaXRlIHN1cGVydmlzb3IgYnl0ZQorCWRicmEJCSVkMCxtb3JlaW4JCXwgYXJlIHdlIHRocm91Z2ggeWV0PworCW1vdmVxCQkjMCwlZDAJCQl8IHJldHVybiBzdWNjZXNzCisJcnRzCisjZW5kaWYKKworfCMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit8Cit8IF8wNjBfcmVhbF90cmFjZSgpOgorfAorfCBUaGlzIGlzIHRoZSBleGl0IHBvaW50IGZvciB0aGUgMDYwRlBTUCB3aGVuIGFuIGluc3RydWN0aW9uIGlzIGJlaW5nIHRyYWNlZAorfCBhbmQgdGhlcmUgYXJlIG5vIG90aGVyIGhpZ2hlciBwcmlvcml0eSBleGNlcHRpb25zIHBlbmRpbmcgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24KK3wgb3IgdGhleSBoYXZlIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQuCit8Cit8IFRoZSBzYW1wbGUgY29kZSBiZWxvdyBzaW1wbHkgZXhlY3V0ZXMgYW4gInJ0ZSIuCit8CisJLmdsb2JhbAkJXzA2MF9yZWFsX3RyYWNlCitfMDYwX3JlYWxfdHJhY2U6CisJYnJhbAl0cmFwCisKK3wKK3wgXzA2MF9yZWFsX2FjY2VzcygpOgorfAorfCBUaGlzIGlzIHRoZSBleGl0IHBvaW50IGZvciB0aGUgMDYwRlBTUCB3aGVuIGFuIGFjY2VzcyBlcnJvciBleGNlcHRpb24KK3wgaXMgZW5jb3VudGVyZWQuIFRoZSByb3V0aW5lIGJlbG93IHNob3VsZCBwb2ludCB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbQorfCBoYW5kbGVyIGZvciBhY2Nlc3MgZXJyb3IgZXhjZXB0aW9ucy4gVGhlIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSBpcyBhbgorfCA4LXdvcmQgYWNjZXNzIGVycm9yIGZyYW1lLgorfAorfCBUaGUgc2FtcGxlIHJvdXRpbmUgYmVsb3cgc2ltcGx5IGV4ZWN1dGVzIGFuICJydGUiIGluc3RydWN0aW9uIHdoaWNoCit8IGlzIG1vc3QgbGlrZWx5IHRoZSBpbmNvcnJlY3QgdGhpbmcgdG8gZG8gYW5kIGNvdWxkIHB1dCB0aGUgc3lzdGVtCit8IGludG8gYW4gaW5maW5pdGUgbG9vcC4KK3wKKwkuZ2xvYmFsCQlfMDYwX3JlYWxfYWNjZXNzCitfMDYwX3JlYWxfYWNjZXNzOgorCWJyYWwJYnVzZXJyCisKKworCit8IEV4ZWNwdGlvbiBoYW5kbGluZyBmb3IgbW92cyBhY2Nlc3MgdG8gaWxsZWdhbCBtZW1vcnkKKwkuc2VjdGlvbiAuZml4dXAsI2FsbG9jLCNleGVjaW5zdHIKKwkuZXZlbgorMToJbW92ZXEJCSMtMSwlZDEKKwlydHMKKy5zZWN0aW9uIF9fZXhfdGFibGUsI2FsbG9jCisJLmFsaWduIDQKKwkubG9uZwlkbXJidWFlLDFiCisJLmxvbmcJZG1yd3VhZSwxYgorCS5sb25nCWRtcmx1YWUsMWIKKwkubG9uZwlkbXdidWFlLDFiCisJLmxvbmcJZG13d3VhZSwxYgorCS5sb25nCWRtd2x1YWUsMWIKKwkubG9uZwljb3B5b3V0YWUsMWIKKwkubG9uZwljb3B5aW5hZSwxYgorCS50ZXh0CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvcGZwc3Auc2EgYi9hcmNoL202OGsvaWZwc3AwNjAvcGZwc3Auc2EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI3NmIyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9wZnBzcC5zYQpAQCAtMCwwICsxLDE3MzAgQEAKKwlkYy5sCSQ2MGZmMDAwMCwkMTc0MDAwMDAsJDYwZmYwMDAwLCQxNWY0MDAwMAorCWRjLmwJJDYwZmYwMDAwLCQwMmI2MDAwMCwkNjBmZjAwMDAsJDA0NzAwMDAwCisJZGMubAkkNjBmZjAwMDAsJDFiMTAwMDAwLCQ2MGZmMDAwMCwkMTlhYTAwMDAKKwlkYy5sCSQ2MGZmMDAwMCwkMWI1YTAwMDAsJDYwZmYwMDAwLCQwNjJlMDAwMAorCWRjLmwJJDYwZmYwMDAwLCQxMDJjMDAwMCwkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMKKwlkYy5sCSQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDUxZmM1MWZjLCQ1MWZjNTFmYywkNTFmYzUxZmMsJDUxZmM1MWZjCisJZGMubAkkMmYwMDIwM2EsJGZmMmM0ODdiLCQwOTMwZmZmZiwkZmVmODIwMmYKKwlkYy5sCSQwMDA0NGU3NCwkMDAwNDJmMDAsJDIwM2FmZWYyLCQ0ODdiMDkzMAorCWRjLmwJJGZmZmZmZWUyLCQyMDJmMDAwNCwkNGU3NDAwMDQsJDJmMDAyMDNhCisJZGMubAkkZmVlMDQ4N2IsJDA5MzBmZmZmLCRmZWNjMjAyZiwkMDAwNDRlNzQKKwlkYy5sCSQwMDA0MmYwMCwkMjAzYWZlZDIsJDQ4N2IwOTMwLCRmZmZmZmViNgorCWRjLmwJJDIwMmYwMDA0LCQ0ZTc0MDAwNCwkMmYwMDIwM2EsJGZlYTQ0ODdiCisJZGMubAkkMDkzMGZmZmYsJGZlYTAyMDJmLCQwMDA0NGU3NCwkMDAwNDJmMDAKKwlkYy5sCSQyMDNhZmU5NiwkNDg3YjA5MzAsJGZmZmZmZThhLCQyMDJmMDAwNAorCWRjLmwJJDRlNzQwMDA0LCQyZjAwMjAzYSwkZmU3YzQ4N2IsJDA5MzBmZmZmCisJZGMubAkkZmU3NDIwMmYsJDAwMDQ0ZTc0LCQwMDA0MmYwMCwkMjAzYWZlNzYKKwlkYy5sCSQ0ODdiMDkzMCwkZmZmZmZlNWUsJDIwMmYwMDA0LCQ0ZTc0MDAwNAorCWRjLmwJJDJmMDAyMDNhLCRmZTY4NDg3YiwkMDkzMGZmZmYsJGZlNDgyMDJmCisJZGMubAkkMDAwNDRlNzQsJDAwMDQyZjAwLCQyMDNhZmU1NiwkNDg3YjA5MzAKKwlkYy5sCSRmZmZmZmUzMiwkMjAyZjAwMDQsJDRlNzQwMDA0LCQyZjAwMjAzYQorCWRjLmwJJGZlNDQ0ODdiLCQwOTMwZmZmZiwkZmUxYzIwMmYsJDAwMDQ0ZTc0CisJZGMubAkkMDAwNDJmMDAsJDIwM2FmZTMyLCQ0ODdiMDkzMCwkZmZmZmZlMDYKKwlkYy5sCSQyMDJmMDAwNCwkNGU3NDAwMDQsJDJmMDAyMDNhLCRmZTIwNDg3YgorCWRjLmwJJDA5MzBmZmZmLCRmZGYwMjAyZiwkMDAwNDRlNzQsJDAwMDQyZjAwCisJZGMubAkkMjAzYWZlMWUsJDQ4N2IwOTMwLCRmZmZmZmRkYSwkMjAyZjAwMDQKKwlkYy5sCSQ0ZTc0MDAwNCwkMmYwMDIwM2EsJGZlMGM0ODdiLCQwOTMwZmZmZgorCWRjLmwJJGZkYzQyMDJmLCQwMDA0NGU3NCwkMDAwNDJmMDAsJDIwM2FmZGZhCisJZGMubAkkNDg3YjA5MzAsJGZmZmZmZGFlLCQyMDJmMDAwNCwkNGU3NDAwMDQKKwlkYy5sCSQyZjAwMjAzYSwkZmRlODQ4N2IsJDA5MzBmZmZmLCRmZDk4MjAyZgorCWRjLmwJJDAwMDQ0ZTc0LCQwMDA0MmYwMCwkMjAzYWZkZDYsJDQ4N2IwOTMwCisJZGMubAkkZmZmZmZkODIsJDIwMmYwMDA0LCQ0ZTc0MDAwNCwkMmYwMDIwM2EKKwlkYy5sCSRmZGM0NDg3YiwkMDkzMGZmZmYsJGZkNmMyMDJmLCQwMDA0NGU3NAorCWRjLmwJJDAwMDQyZjAwLCQyMDNhZmRiMiwkNDg3YjA5MzAsJGZmZmZmZDU2CisJZGMubAkkMjAyZjAwMDQsJDRlNzQwMDA0LCQyZjAwMjAzYSwkZmRhMDQ4N2IKKwlkYy5sCSQwOTMwZmZmZiwkZmQ0MDIwMmYsJDAwMDQ0ZTc0LCQwMDA0MmYwMAorCWRjLmwJJDIwM2FmZDhlLCQ0ODdiMDkzMCwkZmZmZmZkMmEsJDIwMmYwMDA0CisJZGMubAkkNGU3NDAwMDQsJDJmMDAyMDNhLCRmZDdjNDg3YiwkMDkzMGZmZmYKKwlkYy5sCSRmZDE0MjAyZiwkMDAwNDRlNzQsJDAwMDQyZjAwLCQyMDNhZmQ2YQorCWRjLmwJJDQ4N2IwOTMwLCRmZmZmZmNmZSwkMjAyZjAwMDQsJDRlNzQwMDA0CisJZGMubAkkNDBjNjJkMzgsJGQzZDY0NjM0LCQzZDZmOTBhZSwkYjFlNzVjYzcKKwlkYy5sCSQ0MDAwMDAwMCwkYzkwZmRhYTIsJDIxNjhjMjM1LCQwMDAwMDAwMAorCWRjLmwJJDNmZmYwMDAwLCRjOTBmZGFhMiwkMjE2OGMyMzUsJDAwMDAwMDAwCisJZGMubAkkM2ZlNDVmMzAsJDZkYzljODgzLCQ0ZTU2ZmY0MCwkZjMyZWZmNmMKKwlkYy5sCSQ0OGVlMDMwMywkZmY5Y2YyMmUsJGJjMDBmZjYwLCRmMjJlZjBjMAorCWRjLmwJJGZmZGMyZDZlLCRmZjY4ZmY0NCwkMjA2ZWZmNDQsJDU4YWVmZjQ0CisJZGMubAkkNjFmZmZmZmYsJGZmMDQyZDQwLCRmZjQwMDgyZSwkMDAwNWZmNDIKKwlkYy5sCSQ2NjAwMDExNiwkNDFlZWZmNmMsJDYxZmYwMDAwLCQwNTFjNDFlZQorCWRjLmwJJGZmNmM2MWZmLCQwMDAwMmFlYywkMWQ0MGZmNGUsJDA4MmUwMDA1CisJZGMubAkkZmY0MzY3MjYsJGU5ZWUwMTgzLCRmZjQyNjFmZiwkMDAwMDVjYWMKKwlkYy5sCSQ0MWVlZmY3OCwkNjFmZjAwMDAsJDJhY2EwYzAwLCQwMDA2NjYwNgorCWRjLmwJJDYxZmYwMDAwLCQyYTJlMWQ0MCwkZmY0ZjQyODAsJDEwMmVmZjYzCisJZGMubAkkMTIyZWZmNDMsJDAyNDEwMDdmLCQwMmFlMDBmZiwkMDFmZmZmNjQKKwlkYy5sCSRmMjNjOTAwMCwkMDAwMDAwMDAsJGYyM2M4ODAwLCQwMDAwMDAwMAorCWRjLmwJJDQxZWVmZjZjLCQ0M2VlZmY3OCwkMjIzYjE1MzAsJDAwMDAxOTc0CisJZGMubAkkNGViYjE5MzAsJDAwMDAxOTZjLCRlOWVlMDE4MywkZmY0MjYxZmYKKwlkYy5sCSQwMDAwNWNkOCwkMDgyZTAwMDQsJGZmNjI2NjIyLCQwODJlMDAwMQorCWRjLmwJJGZmNjI2NjQ0LCRmMjJlZDBjMCwkZmZkY2YyMmUsJDljMDBmZjYwCisJZGMubAkkNGNlZTAzMDMsJGZmOWM0ZTVlLCQ2MGZmZmZmZiwkZmNjNmYyMmUKKwlkYy5sCSRmMDQwZmY2YywkM2Q3Y2UwMDUsJGZmNmVmMjJlLCRkMGMwZmZkYworCWRjLmwJJGYyMmU5YzAwLCRmZjYwNGNlZSwkMDMwM2ZmOWMsJGYzNmVmZjZjCisJZGMubAkkNGU1ZTYwZmYsJGZmZmZmY2IyLCRmMjJlZjA0MCwkZmY2YzFkN2MKKwlkYy5sCSQwMGM0MDAwYiwkM2Q3Y2UwMDEsJGZmNmVmMjJlLCRkMGMwZmZkYworCWRjLmwJJGYyMmU5YzAwLCRmZjYwNGNlZSwkMDMwM2ZmOWMsJGYzNmVmZjZjCisJZGMubAkkNGU1ZTYwZmYsJGZmZmZmY2FlLCQxZDdjMDAwMCwkZmY0ZTQyODAKKwlkYy5sCSQxMDJlZmY2MywkMDJhZWZmZmYsJDAwZmZmZjY0LCRmMjNjOTAwMAorCWRjLmwJJDAwMDAwMDAwLCRmMjNjODgwMCwkMDAwMDAwMDAsJDQxZWVmZjZjCisJZGMubAkkNjFmZjAwMDAsJDJlMGMwODJlLCQwMDA0ZmY2MiwkNjYwMGZmNzAKKwlkYy5sCSQwODJlMDAwMSwkZmY2MjY2MDAsJGZmOTBmMjJlLCRkMGMwZmZkYworCWRjLmwJJGYyMmU5YzAwLCRmZjYwNGNlZSwkMDMwM2ZmOWMsJDRlNWUwODE3CisJZGMubAkkMDAwNzY3ZmYsJGZmZmZmYzBjLCRmMjJmYTQwMCwkMDAwODNmN2MKKwlkYy5sCSQyMDI0MDAwNiwkNjBmZmZmZmYsJGZjZWM0ZTU2LCRmZjQwZjMyZQorCWRjLmwJJGZmNmM0OGVlLCQwMzAzZmY5YywkZjIyZWJjMDAsJGZmNjBmMjJlCisJZGMubAkkZjBjMGZmZGMsJDJkNmVmZjY4LCRmZjQ0MjA2ZSwkZmY0NDU4YWUKKwlkYy5sCSRmZjQ0NjFmZiwkZmZmZmZkNDIsJDJkNDBmZjQwLCQwODJlMDAwNQorCWRjLmwJJGZmNDI2NjAwLCQwMTMyNDFlZSwkZmY2YzYxZmYsJDAwMDAwMzVhCisJZGMubAkkNDFlZWZmNmMsJDYxZmYwMDAwLCQyOTJhMWQ0MCwkZmY0ZTA4MmUKKwlkYy5sCSQwMDA1ZmY0MywkNjcyZTA4MmUsJDAwMDRmZjQzLCQ2NjI2ZTllZQorCWRjLmwJJDAxODNmZjQyLCQ2MWZmMDAwMCwkNWFlMjQxZWUsJGZmNzg2MWZmCisJZGMubAkkMDAwMDI5MDAsJDBjMDAwMDA2LCQ2NjA2NjFmZiwkMDAwMDI4NjQKKwlkYy5sCSQxZDQwZmY0ZiwkNDI4MDEwMmUsJGZmNjMxMjJlLCRmZjQzMDI0MQorCWRjLmwJJDAwN2YwMmFlLCQwMGZmMDFmZiwkZmY2NGYyM2MsJDkwMDAwMDAwCisJZGMubAkkMDAwMGYyM2MsJDg4MDAwMDAwLCQwMDAwNDFlZSwkZmY2YzQzZWUKKwlkYy5sCSRmZjc4MjIzYiwkMTUzMDAwMDAsJDE3YWE0ZWJiLCQxOTMwMDAwMAorCWRjLmwJJDE3YTJlOWVlLCQwMTgzZmY0MiwkNjFmZjAwMDAsJDViMGUwODJlCisJZGMubAkkMDAwM2ZmNjIsJDY2MjIwODJlLCQwMDAxZmY2MiwkNjY0ZWYyMmUKKwlkYy5sCSRkMGMwZmZkYywkZjIyZTljMDAsJGZmNjA0Y2VlLCQwMzAzZmY5YworCWRjLmwJJDRlNWU2MGZmLCRmZmZmZmFmYywkMDgyZTAwMDMsJGZmNjY2NzAwCisJZGMubAkkZmZkNmYyMmUsJGYwNDBmZjZjLCQzZDdjZTAwMywkZmY2ZWYyMmUKKwlkYy5sCSRkMGMwZmZkYywkZjIyZTljMDAsJGZmNjA0Y2VlLCQwMzAzZmY5YworCWRjLmwJJGYzNmVmZjZjLCQ0ZTVlNjBmZiwkZmZmZmZhZjQsJDA4MmUwMDAxCisJZGMubAkkZmY2NjY3MDAsJGZmYWFmMjJlLCRmMDQwZmY2YywkMWQ3YzAwYzQKKwlkYy5sCSQwMDBiM2Q3YywkZTAwMWZmNmUsJGYyMmVkMGMwLCRmZmRjZjIyZQorCWRjLmwJJDljMDBmZjYwLCQ0Y2VlMDMwMywkZmY5Y2YzNmUsJGZmNmM0ZTVlCisJZGMubAkkNjBmZmZmZmYsJGZhZDAxZDdjLCQwMDAwZmY0ZSwkNDI4MDEwMmUKKwlkYy5sCSRmZjYzMDJhZSwkZmZmZjAwZmYsJGZmNjRmMjNjLCQ5MDAwMDAwMAorCWRjLmwJJDAwMDBmMjNjLCQ4ODAwMDAwMCwkMDAwMDQxZWUsJGZmNmM2MWZmCisJZGMubAkkMDAwMDJjMmUsJDA4MmUwMDAzLCRmZjYyNjYwMCwkZmY2NjA4MmUKKwlkYy5sCSQwMDAxZmY2MiwkNjYwMGZmOTAsJGYyMmVkMGMwLCRmZmRjZjIyZQorCWRjLmwJJDljMDBmZjYwLCQ0Y2VlMDMwMywkZmY5YzRlNWUsJDA4MTcwMDA3CisJZGMubAkkNjdmZmZmZmYsJGZhMmVmMjJmLCRhNDAwMDAwOCwkM2Y3YzIwMjQKKwlkYy5sCSQwMDA2NjBmZiwkZmZmZmZiMGUsJDRlNTZmZjQwLCRmMzJlZmY2YworCWRjLmwJJDQ4ZWUwMzAzLCRmZjljZjIyZSwkYmMwMGZmNjAsJGYyMmVmMGMwCisJZGMubAkkZmZkYzA4MmUsJDAwMDUwMDA0LCQ2NjA4NGU2OCwkMmQ0OGZmZDgKKwlkYy5sCSQ2MDA4NDFlZSwkMDAxMDJkNDgsJGZmZDgyZDZlLCRmZjY4ZmY0NAorCWRjLmwJJDIwNmVmZjQ0LCQ1OGFlZmY0NCwkNjFmZmZmZmYsJGZiNGMyZDQwCisJZGMubAkkZmY0MDQyMmUsJGZmNGEwODJlLCQwMDA1ZmY0MiwkNjYwMDAyMDgKKwlkYy5sCSRlOWVlMDAwNiwkZmY0MjBjMDAsJDAwMTM2NzAwLCQwNDllMDJhZQorCWRjLmwJJDAwZmYwMGZmLCRmZjY0ZjIzYywkOTAwMDAwMDAsJDAwMDBmMjNjCisJZGMubAkkODgwMDAwMDAsJDAwMDA0MWVlLCRmZjZjNjFmZiwkMDAwMDAxM2EKKwlkYy5sCSQ0MWVlZmY2YywkNjFmZjAwMDAsJDI3MGEwYzAwLCQwMDA2NjYwNgorCWRjLmwJJDYxZmYwMDAwLCQyNjZlMWQ0MCwkZmY0ZWU5ZWUsJDAxODNmZjQyCisJZGMubAkkMDgyZTAwMDUsJGZmNDM2NzI4LCQwYzJlMDAzYSwkZmY0MzY3MjAKKwlkYy5sCSQ2MWZmMDAwMCwkNThiNjQxZWUsJGZmNzg2MWZmLCQwMDAwMjZkNAorCWRjLmwJJDBjMDAwMDA2LCQ2NjA2NjFmZiwkMDAwMDI2MzgsJDFkNDBmZjRmCisJZGMubAkkNDI4MDEwMmUsJGZmNjNlOWVlLCQxMDQ3ZmY0MywkNDFlZWZmNmMKKwlkYy5sCSQ0M2VlZmY3OCwkMjIzYjFkMzAsJDAwMDAxNTk4LCQ0ZWJiMTkzMAorCWRjLmwJJDAwMDAxNTkwLCQxMDJlZmY2MiwkNjYzNDEwMmUsJGZmNDMwMjAwCisJZGMubAkkMDAzODBjMDAsJDAwMzg2NzBjLCRlOWVlMDE4MywkZmY0MjYxZmYKKwlkYy5sCSQwMDAwNThlOCwkZjIyZWQwYzAsJGZmZGNmMjJlLCQ5YzAwZmY2MAorCWRjLmwJJDRjZWUwMzAzLCRmZjljNGU1ZSwkNjBmZmZmZmYsJGY4ZTZjMDJlCisJZGMubAkkZmY2NmVkYzAsJDA2MDg2NjE0LCQwODJlMDAwNCwkZmY2NjY3YmEKKwlkYy5sCSQwODJlMDAwMSwkZmY2MjY3YjIsJDYwMDAwMDY2LCQwNDgwMDAwMAorCWRjLmwJJDAwMTgwYzAwLCQwMDA2NjYxNCwkMDgyZTAwMDMsJGZmNjY2NjAwCisJZGMubAkkMDA0YTA4MmUsJDAwMDRmZjY2LCQ2NjAwMDA0NiwkMmYwMDYxZmYKKwlkYy5sCSQwMDAwMDdlMCwkMjAxZjNkN2IsJDAyMjJmZjZlLCRmMjJlZDBjMAorCWRjLmwJJGZmZGNmMjJlLCQ5YzAwZmY2MCwkNGNlZTAzMDMsJGZmOWNmMzZlCisJZGMubAkkZmY2YzRlNWUsJDYwZmZmZmZmLCRmODdhZTAwMCwkZTAwNmUwMDQKKwlkYy5sCSRlMDA1ZTAwMywkZTAwMmUwMDEsJGUwMDEzMDNjLCQwMDA0NjBiYworCWRjLmwJJDMwM2MwMDAzLCQ2MGI2ZTllZSwkMDAwNmZmNDIsJDBjMDAwMDExCisJZGMubAkkNjcwODBjMDAsJDAwMTU2NzUwLCQ0ZTc1MzAyOCwkMDAwMDAyNDAKKwlkYy5sCSQ3ZmZmMGM0MCwkM2Y4MDY3MDgsJDBjNDA0MDdmLCQ2NzJjNGU3NQorCWRjLmwJJDAyYTg3ZmZmLCRmZmZmMDAwNCwkNjcxODYxZmYsJDAwMDAyNGNjCisJZGMubAkkNDQ0MDA2NDAsJDNmODEwMjY4LCQ4MDAwMDAwMCwkODE2ODAwMDAKKwlkYy5sCSQ0ZTc1MDI2OCwkODAwMDAwMDAsJDRlNzUwMjI4LCQwMDdmMDAwNAorCWRjLmwJJDAwNjg3ZmZmLCQwMDAwNGU3NSwkMzAyODAwMDAsJDAyNDA3ZmZmCisJZGMubAkkMGM0MDNjMDAsJDY3MDgwYzQwLCQ0M2ZmNjdkZSwkNGU3NTAyYTgKKwlkYy5sCSQ3ZmZmZmZmZiwkMDAwNDY2MDYsJDRhYTgwMDA4LCQ2N2M0NjFmZgorCWRjLmwJJDAwMDAyNDc4LCQ0NDQwMDY0MCwkM2MwMTAyNjgsJDgwMDAwMDAwCisJZGMubAkkODE2ODAwMDAsJDRlNzVlOWVlLCQwMGMzZmY0MiwkMGMwMDAwMDMKKwlkYy5sCSQ2NzAwMDRhMiwkMGMwMDAwMDcsJDY3MDAwNDlhLCQwMmFlZmZmZgorCWRjLmwJJDAwZmZmZjY0LCRmMjNjOTAwMCwkMDAwMDAwMDAsJGYyM2M4ODAwCisJZGMubAkkMDAwMDAwMDAsJDMwMmVmZjZjLCQwMjQwN2ZmZiwkNjcxMDQxZWUKKwlkYy5sCSRmZjZjNjFmZiwkMDAwMDI0NmMsJDFkNDBmZjRlLCQ2MDA2MWQ3YworCWRjLmwJJDAwMDRmZjRlLCQ0MjgwMTAyZSwkZmY2MzQxZWUsJGZmNmMyZDU2CisJZGMubAkkZmZkNDYxZmYsJDAwMDAyOTJhLCQxMDJlZmY2MiwkNjYwMDAwODYKKwlkYy5sCSQyY2FlZmZkNCwkMDgyZTAwMDUsJDAwMDQ2NjI2LCQyMDZlZmZkOAorCWRjLmwJJDRlNjBmMjJlLCRkMGMwZmZkYywkZjIyZTljMDAsJGZmNjA0Y2VlCisJZGMubAkkMDMwM2ZmOWMsJDRlNWUwODE3LCQwMDA3NjY3YSwkNjBmZmZmZmYKKwlkYy5sCSRmNzIyMGMyZSwkMDAwOGZmNGEsJDY2ZDhmMjJlLCRmMDgwZmY2YworCWRjLmwJJGYyMmVkMGMwLCRmZmRjZjIyZSwkOWMwMGZmNjAsJDRjZWUwMzAzCisJZGMubAkkZmY5YzJjNTYsJDJmNmYwMGM0LCQwMGI4MmY2ZiwkMDBjODAwYmMKKwlkYy5sCSQyZjZmMDAyYywkMDBjNDJmNmYsJDAwMzAwMGM4LCQyZjZmMDAzNAorCWRjLmwJJDAwY2NkZmZjLCQwMDAwMDBiOCwkMDgxNzAwMDcsJDY2Mjg2MGZmCisJZGMubAkkZmZmZmY2ZDAsJGMwMmVmZjY2LCRlZGMwMDYwOCwkNjYyYTA4MmUKKwlkYy5sCSQwMDA0ZmY2NiwkNjcwMGZmNmEsJDA4MmUwMDAxLCRmZjYyNjcwMAorCWRjLmwJJGZmNjA2MDAwLCQwMTY2M2Y3YywkMjAyNDAwMDYsJGYyMmZhNDAwCisJZGMubAkkMDAwODYwZmYsJGZmZmZmNzhlLCQwNDgwMDAwMCwkMDAxODMwM2IKKwlkYy5sCSQwMjBhNGVmYiwkMDAwNjRhZmMsJDAwMDgwMDAwLCQwMDAwMDAzYQorCWRjLmwJJDAwNjQwMDk0LCQwMDAwMDE0MCwkMDAwMGYyMmUsJGQwYzBmZmRjCisJZGMubAkkZjIyZTljMDAsJGZmNjA0Y2VlLCQwMzAzZmY5YywkM2Q3YzMwZDgKKwlkYy5sCSQwMDBhM2Q3YywkZTAwNmZmNmUsJGYzNmVmZjZjLCQ0ZTVlNjBmZgorCWRjLmwJJGZmZmZmNmQ0LCRmMjJlZDBjMCwkZmZkY2YyMmUsJDljMDBmZjYwCisJZGMubAkkNGNlZTAzMDMsJGZmOWMzZDdjLCQzMGQwMDAwYSwkM2Q3Y2UwMDQKKwlkYy5sCSRmZjZlZjM2ZSwkZmY2YzRlNWUsJDYwZmZmZmZmLCRmNjk0ZjIyZQorCWRjLmwJJGYwNDBmZjZjLCRmMjJlZDBjMCwkZmZkY2YyMmUsJDljMDBmZjYwCisJZGMubAkkNGNlZTAzMDMsJGZmOWMzZDdjLCQzMGQ0MDAwYSwkM2Q3Y2UwMDUKKwlkYy5sCSRmZjZlZjM2ZSwkZmY2YzRlNWUsJDYwZmZmZmZmLCRmNjBjMmNhZQorCWRjLmwJJGZmZDQwODJlLCQwMDA1MDAwNCwkNjYwMDAwMzgsJDIwNmVmZmQ4CisJZGMubAkkNGU2MGYyMmUsJGYwNDBmZjZjLCRmMjJlZDBjMCwkZmZkY2YyMmUKKwlkYy5sCSQ5YzAwZmY2MCwkNGNlZTAzMDMsJGZmOWMzZDdjLCQzMGNjMDAwYQorCWRjLmwJJDNkN2NlMDAzLCRmZjZlZjM2ZSwkZmY2YzRlNWUsJDYwZmZmZmZmCisJZGMubAkkZjVkZTBjMmUsJDAwMDhmZjRhLCQ2NmM4ZjIyZSwkZjA4MGZmNmMKKwlkYy5sCSRmMjJlZjA0MCwkZmY3OGYyMmUsJGQwYzBmZmRjLCRmMjJlOWMwMAorCWRjLmwJJGZmNjA0Y2VlLCQwMzAzZmY5YywkM2Q3YzMwY2MsJDAwMGEzZDdjCisJZGMubAkkZTAwM2ZmN2EsJGYzNmVmZjc4LCQyYzU2MmY2ZiwkMDBjNDAwYjgKKwlkYy5sCSQyZjZmMDBjOCwkMDBiYzJmNmYsJDAwY2MwMGMwLCQyZjZmMDAyYworCWRjLmwJJDAwYzQyZjZmLCQwMDMwMDBjOCwkMmY2ZjAwMzQsJDAwY2NkZmZjCisJZGMubAkkMDAwMDAwYjgsJDYwZmZmZmZmLCRmNTc2ZjIyZSwkZjA0MGZmNmMKKwlkYy5sCSRmMjJlZDBjMCwkZmZkY2YyMmUsJDljMDBmZjYwLCQ0Y2VlMDMwMworCWRjLmwJJGZmOWMzZDdjLCQzMGM0MDAwYSwkM2Q3Y2UwMDEsJGZmNmVmMzZlCisJZGMubAkkZmY2YzRlNWUsJDYwZmZmZmZmLCRmNTVjMDJhZSwkMDBmZjAwZmYKKwlkYy5sCSRmZjY0ZjIzYywkOTAwMDAwMDAsJDAwMDBmMjNjLCQ4ODAwMDAwMAorCWRjLmwJJDAwMDA2MWZmLCQwMDAwNTU0OCwkNDFlZWZmNmMsJDYxZmYwMDAwCisJZGMubAkkMjI3MjFkNDAsJGZmNGVlOWVlLCQwMTgzZmY0MiwkMDgyZTAwMDUKKwlkYy5sCSRmZjQzNjcyOCwkMGMyZTAwM2EsJGZmNDM2NzIwLCQ2MWZmMDAwMAorCWRjLmwJJDU0MmE0MWVlLCRmZjc4NjFmZiwkMDAwMDIyNDgsJDBjMDAwMDA2CisJZGMubAkkNjYwNjYxZmYsJDAwMDAyMWFjLCQxZDQwZmY0ZiwkNDI4MDEwMmUKKwlkYy5sCSRmZjYzZTllZSwkMTA0N2ZmNDMsJDQxZWVmZjZjLCQ0M2VlZmY3OAorCWRjLmwJJDIyM2IxZDMwLCQwMDAwMTEwYywkNGViYjE5MzAsJDAwMDAxMTA0CisJZGMubAkkMTAyZWZmNjIsJDY2MDAwMDhhLCQxMDJlZmY0MywkMDIwMDAwMzgKKwlkYy5sCSQwYzAwMDAzOCwkNjcwY2U5ZWUsJDAxODNmZjQyLCQ2MWZmMDAwMAorCWRjLmwJJDU0NWEwODJlLCQwMDA1MDAwNCwkNjYwMDAwMmEsJDIwNmVmZmQ4CisJZGMubAkkNGU2MGYyMmUsJGQwYzBmZmRjLCRmMjJlOWMwMCwkZmY2MDRjZWUKKwlkYy5sCSQwMzAzZmY5YywkNGU1ZTA4MTcsJDAwMDc2NjAwLCQwMTI2NjBmZgorCWRjLmwJJGZmZmZmNDQwLCQwODJlMDAwMiwkZmY0YTY3ZDYsJGYyMmVkMGMwCisJZGMubAkkZmZkY2YyMmUsJDljMDBmZjYwLCQ0Y2VlMDMwMywkZmY5YzRlNWUKKwlkYy5sCSQyZjZmMDAwNCwkMDAxMDJmNmYsJDAwMDAwMDBjLCRkZmZjMDAwMAorCWRjLmwJJDAwMGMwODE3LCQwMDA3NjYwMCwkMDBlYTYwZmYsJGZmZmZmNDA0CisJZGMubAkkYzAyZWZmNjYsJGVkYzAwNjA4LCQ2NjE4MDgyZSwkMDAwNGZmNjYKKwlkYy5sCSQ2NzAwZmY2NiwkMDgyZTAwMDEsJGZmNjI2NzAwLCRmZjVjNjAwMAorCWRjLmwJJDAwNmUwNDgwLCQwMDAwMDAxOCwkMGMwMDAwMDYsJDZkMTQwODJlCisJZGMubAkkMDAwM2ZmNjYsJDY2MDAwMDYwLCQwODJlMDAwNCwkZmY2NjY2MDAKKwlkYy5sCSQwMDRlMDgyZSwkMDAwNTAwMDQsJDY2MDAwMDU0LCQyMDZlZmZkOAorCWRjLmwJJDRlNjAzZDdiLCQwMjJhZmY2ZSwkZjIyZWQwYzAsJGZmZGNmMjJlCisJZGMubAkkOWMwMGZmNjAsJDRjZWUwMzAzLCRmZjljZjM2ZSwkZmY2YzRlNWUKKwlkYy5sCSQwODE3MDAwNywkNjYwMDAwNmMsJDYwZmZmZmZmLCRmMzg2ZTAwMAorCWRjLmwJJGUwMDZlMDA0LCRlMDA1ZTAwMywkZTAwMmUwMDEsJGUwMDEzMDNjCisJZGMubAkkMDAwMzYwMDAsJGZmYWUzMDNjLCQwMDA0NjAwMCwkZmZhNjA4MmUKKwlkYy5sCSQwMDAyZmY0YSwkNjdhYzNkN2IsJDAyZDZmZjZlLCRmMjJlZDBjMAorCWRjLmwJJGZmZGNmMjJlLCQ5YzAwZmY2MCwkNGNlZTAzMDMsJGZmOWNmMzZlCisJZGMubAkkZmY2YzRlNWUsJDJmNmYwMDA0LCQwMDEwMmY2ZiwkMDAwMDAwMGMKKwlkYy5sCSRkZmZjMDAwMCwkMDAwYzA4MTcsJDAwMDc2NjA2LCQ2MGZmZmZmZgorCWRjLmwJJGYzMjIzZjdjLCQyMDI0MDAwNiwkZjIyZmE0MDAsJDAwMDg2MGZmCisJZGMubAkkZmZmZmY0MDIsJDAyYWVmZmZmLCQwMGZmZmY2NCwkZjIzYzkwMDAKKwlkYy5sCSQwMDAwMDAwMCwkZjIzYzg4MDAsJDAwMDAwMDAwLCRlOWVlMDE4MworCWRjLmwJJGZmNDI2MWZmLCQwMDAwNTFiNCwkNDFlZWZmNmMsJDYxZmYwMDAwCisJZGMubAkkMjA2MjBjMDAsJDAwMDY2NjA2LCQ2MWZmMDAwMCwkMWZjNjFkNDAKKwlkYy5sCSRmZjRlNDI4MCwkMTAyZWZmNjMsJDQxZWVmZjZjLCQyZDU2ZmZkNAorCWRjLmwJJDYxZmYwMDAwLCQyNDhjMTAyZSwkZmY2MjY2MDAsJDAwODQyY2FlCisJZGMubAkkZmZkNDA4MmUsJDAwMDUwMDA0LCQ2NjI4MjA2ZSwkZmZkODRlNjAKKwlkYy5sCSRmMjJlZDBjMCwkZmZkY2YyMmUsJDljMDBmZjYwLCQ0Y2VlMDMwMworCWRjLmwJJGZmOWM0ZTVlLCQwODE3MDAwNywkNjYwMGZmNjgsJDYwZmZmZmZmCisJZGMubAkkZjI4MjA4MmUsJDAwMDNmZjRhLCQ2N2Q2ZjIyZSwkZDBjMGZmZGMKKwlkYy5sCSRmMjJlOWMwMCwkZmY2MDRjZWUsJDAzMDNmZjljLCQyYzU2MmY2ZgorCWRjLmwJJDAwYzQwMGI4LCQyZjZmMDBjOCwkMDBiYzJmNmYsJDAwMzgwMGM0CisJZGMubAkkMmY2ZjAwM2MsJDAwYzgyZjZmLCQwMDQwMDBjYywkZGZmYzAwMDAKKwlkYy5sCSQwMGI4MDgxNywkMDAwNzY2MDAsJGZmMWE2MGZmLCRmZmZmZjIzNAorCWRjLmwJJGMwMmVmZjY2LCRlZGMwMDYwOCwkNjcwMGZmNzQsJDJjYWVmZmQ0CisJZGMubAkkMGMwMDAwMWEsJDZlMDAwMGU4LCQ2NzAwMDA3MiwkMDgyZTAwMDUKKwlkYy5sCSQwMDA0NjYwYSwkMjA2ZWZmZDgsJDRlNjA2MDAwLCRmYjhlMGMyZQorCWRjLmwJJDAwMDhmZjRhLCQ2NjAwZmI4NCwkZjIyZWQwYzAsJGZmZGNmMjJlCisJZGMubAkkOWMwMGZmNjAsJDRjZWUwMzAzLCRmZjljM2Q3YywkMzBkODAwMGEKKwlkYy5sCSQzZDdjZTAwNiwkZmY2ZWYzNmUsJGZmNmMyYzU2LCQyZjZmMDBjNAorCWRjLmwJJDAwYjgyZjZmLCQwMGM4MDBiYywkMmY2ZjAwY2MsJDAwYzAyZjZmCisJZGMubAkkMDAzODAwYzQsJDJmNmYwMDNjLCQwMGM4MmY2ZiwkMDA0MDAwY2MKKwlkYy5sCSRkZmZjMDAwMCwkMDBiODYwZmYsJGZmZmZmMjJjLCQwODJlMDAwNQorCWRjLmwJJDAwMDQ2NjAwLCQwMDBjMjA2ZSwkZmZkODRlNjAsJDYwMDBmYjQ2CisJZGMubAkkMGMyZTAwMDgsJGZmNGE2NjAwLCRmYjNjZjIyZSwkZDBjMGZmZGMKKwlkYy5sCSRmMjJlOWMwMCwkZmY2MDRjZWUsJDAzMDNmZjljLCQzZDdjMzBkMAorCWRjLmwJJDAwMGEzZDdjLCRlMDA0ZmY2ZSwkZjM2ZWZmNmMsJDJjNTYyZjZmCisJZGMubAkkMDBjNDAwYjgsJDJmNmYwMGM4LCQwMGJjMmY2ZiwkMDBjYzAwYzAKKwlkYy5sCSQyZjZmMDAzOCwkMDBjNDJmNmYsJDAwM2MwMGM4LCQyZjZmMDA0MAorCWRjLmwJJDAwY2NkZmZjLCQwMDAwMDBiOCwkNjBmZmZmZmYsJGYxYTQwODJlCisJZGMubAkkMDAwNTAwMDQsJDY2MDAwMDBjLCQyMDZlZmZkOCwkNGU2MDYwMDAKKwlkYy5sCSRmYmRhMGMyZSwkMDAwOGZmNGEsJDY2MDBmYmQwLCRmMjJlZDBjMAorCWRjLmwJJGZmZGNmMjJlLCQ5YzAwZmY2MCwkNGNlZTAzMDMsJGZmOWMzZDdjCisJZGMubAkkMzBjNDAwMGEsJDNkN2NlMDAxLCRmZjZlZjM2ZSwkZmY2YzJjNTYKKwlkYy5sCSQyZjZmMDBjNCwkMDBiODJmNmYsJDAwYzgwMGJjLCQyZjZmMDBjYworCWRjLmwJJDAwYzAyZjZmLCQwMDM4MDBjNCwkMmY2ZjAwM2MsJDAwYzgyZjZmCisJZGMubAkkMDA0MDAwY2MsJGRmZmMwMDAwLCQwMGI4NjBmZiwkZmZmZmYxMDYKKwlkYy5sCSRlOWVlMDBjMywkZmY0MjBjMDAsJDAwMDE2NzA4LCQwYzAwMDAwNQorCWRjLmwJJDY3MzQ0ZTc1LCQzMDJlZmY2YywkMDI0MDdmZmYsJDY3MjYwYzQwCisJZGMubAkkM2Y4MDZlMjAsJDQ0NDAwNjQwLCQzZjgxMjIyZSwkZmY3MGUwYTkKKwlkYy5sCSQwOGMxMDAxZiwkMmQ0MWZmNzAsJDAyNmU4MDAwLCRmZjZjMDA2ZQorCWRjLmwJJDNmODBmZjZjLCQ0ZTc1MzAyZSwkZmY2YzAyNDAsJDdmZmY2NzNhCisJZGMubAkkMGM0MDNjMDAsJDZlMzQ0YTJlLCRmZjZjNWJlZSwkZmY2ZTNkNDAKKwlkYy5sCSRmZjZjNDI4MCwkNDFlZWZmNmMsJDMyM2MzYzAxLCQ2MWZmMDAwMAorCWRjLmwJJDFhNjYzMDNjLCQzYzAwNGEyZSwkZmY2ZTY3MDQsJDA4YzAwMDBmCisJZGMubAkkMDhlZTAwMDcsJGZmNzAzZDQwLCRmZjZjNGU3NSwkMDgyZTAwMDUKKwlkYy5sCSQwMDA0NjdmZiwkZmZmZmYxNzYsJDJkNjgwMDAwLCRmZjc4MmQ2OAorCWRjLmwJJDAwMDRmZjdjLCQyZDY4MDAwOCwkZmY4MDQyODEsJDRlNzUyZjAwCisJZGMubAkkNGU3YTA4MDgsJDA4MDAwMDAxLCQ2NjAwMDQ2MCwkMjAxZjRlNTYKKwlkYy5sCSRmZjQwNDhlZSwkMDMwM2ZmOWMsJGYyMmViYzAwLCRmZjYwZjIyZQorCWRjLmwJJGYwYzBmZmRjLCQyZDZlMDAwNiwkZmY0NDIwNmUsJGZmNDQ1OGFlCisJZGMubAkkZmY0NDYxZmYsJGZmZmZmMTUyLCQyZDQwZmY0MCwkNGE0MDZiMDAKKwlkYy5sCSQwMjBlMDJhZSwkMDBmZjAwZmYsJGZmNjQwODAwLCQwMDBhNjYxOAorCWRjLmwJJDIwNmVmZjQ0LCQ0M2VlZmY2YywkNzAwYzYxZmYsJGZmZmZmMGQyCisJZGMubAkkNGE4MTY2MDAsJDA0OTI2MDQ4LCQyMDZlZmY0NCwkNDNlZWZmNmMKKwlkYy5sCSQ3MDBjNjFmZiwkZmZmZmYwYmEsJDRhODE2NjAwLCQwNDdhZTllZQorCWRjLmwJJDAwNGZmZjZjLCQwYzQwN2ZmZiwkNjcyNjEwMmUsJGZmNmYwMjAwCisJZGMubAkkMDAwZjY2MGMsJDRhYWVmZjcwLCQ2NjA2NGFhZSwkZmY3NDY3MTAKKwlkYy5sCSQ0MWVlZmY2YywkNjFmZjAwMDAsJDUwMWFmMjJlLCRmMDgwZmY2YworCWRjLmwJJDA2YWUwMDAwLCQwMDBjZmY0NCwkNDFlZWZmNmMsJDYxZmYwMDAwCisJZGMubAkkMWNkMjFkNDAsJGZmNGUwYzAwLCQwMDA2NjYwYSwkNjFmZjAwMDAKKwlkYy5sCSQxYzMyMWQ0MCwkZmY0ZTQyMmUsJGZmNTMwODJlLCQwMDA1ZmY0MworCWRjLmwJJDY3NDgwODJlLCQwMDA0ZmY0MywkNjYyY2U5ZWUsJDAxODNmZjQyCisJZGMubAkkNjFmZjAwMDAsJDRlNzY0MWVlLCRmZjc4NjFmZiwkMDAwMDFjOTQKKwlkYy5sCSQxZDQwZmY0ZiwkMGMwMDAwMDYsJDY2MjA2MWZmLCQwMDAwMWJmNAorCWRjLmwJJDFkNDBmZjRmLCQ2MDE0MDgyZSwkMDAwM2ZmNDMsJDY3MGM1MGVlCisJZGMubAkkZmY1MzA4MmUsJDAwMDFmZjQzLCQ2N2MwNDI4MCwkMTAyZWZmNjMKKwlkYy5sCSQxMjJlZmY0MywkMDI0MTAwN2YsJGYyM2M5MDAwLCQwMDAwMDAwMAorCWRjLmwJJGYyM2M4ODAwLCQwMDAwMDAwMCwkNDFlZWZmNmMsJDQzZWVmZjc4CisJZGMubAkkMjIzYjE1MzAsJDAwMDAwYjJjLCQ0ZWJiMTkzMCwkMDAwMDBiMjQKKwlkYy5sCSQxMDJlZmY2MiwkNjY0MDRhMmUsJGZmNTM2NjBjLCRlOWVlMDE4MworCWRjLmwJJGZmNDI2MWZmLCQwMDAwNGU4NCwkMmQ2ZTAwMDYsJGZmNjgyZDZlCisJZGMubAkkZmY0NDAwMDYsJGYyMmVkMGMwLCRmZmRjZjIyZSwkOWMwMGZmNjAKKwlkYy5sCSQ0Y2VlMDMwMywkZmY5YzRlNWUsJDA4MTcwMDA3LCQ2NjAwMDA5NgorCWRjLmwJJDYwZmZmZmZmLCRlZTZlYzAyZSwkZmY2NmVkYzAsJDA2MDg2NjEyCisJZGMubAkkMDgyZTAwMDQsJGZmNjY2N2FlLCQwODJlMDAwMSwkZmY2MjY3YWMKKwlkYy5sCSQ2MDM0MDQ4MCwkMDAwMDAwMTgsJDBjMDAwMDA2LCQ2NjEwMDgyZQorCWRjLmwJJDAwMDRmZjY2LCQ2NjIwMDgyZSwkMDAwM2ZmNjYsJDY2MjAzZDdiCisJZGMubAkkMDIwNmZmNmUsJDYwMWVlMDAyLCRlMDA2ZTAwNCwkZTAwNWUwMDMKKwlkYy5sCSRlMDAyZTAwMSwkZTAwMTNkN2MsJGUwMDVmZjZlLCQ2MDA2M2Q3YworCWRjLmwJJGUwMDNmZjZlLCQyZDZlMDAwNiwkZmY2ODJkNmUsJGZmNDQwMDA2CisJZGMubAkkZjIyZWQwYzAsJGZmZGNmMjJlLCQ5YzAwZmY2MCwkNGNlZTAzMDMKKwlkYy5sCSRmZjljZjM2ZSwkZmY2YzRlNWUsJDA4MTcwMDA3LCQ2NjA2NjBmZgorCWRjLmwJJGZmZmZlZGUwLCQyZjE3M2Y2ZiwkMDAwODAwMDQsJDNmN2MyMDI0CisJZGMubAkkMDAwNmYyMmYsJGE0MDAwMDA4LCQ2MGZmZmZmZiwkZWViODA4MDAKKwlkYy5sCSQwMDBlNjcwMCwkMDFjMjA4MmUsJDAwMDUwMDA0LCQ2NjE2NGU2OAorCWRjLmwJJDJkNDhmZmQ4LCQ2MWZmMDAwMCwkMGJjZTIwNmUsJGZmZDg0ZTYwCisJZGMubAkkNjAwMDAxYWEsJDQyMmVmZjRhLCQ0MWVlMDAwYywkMmQ0OGZmZDgKKwlkYy5sCSQ2MWZmMDAwMCwkMGJiMjBjMmUsJDAwMDhmZjRhLCQ2NzAwMDA4NgorCWRjLmwJJDBjMmUwMDA0LCRmZjRhNjYwMCwkMDE4NDA4MmUsJDAwMDcwMDA0CisJZGMubAkkNjYzNjNkYWUsJDAwMDQwODA0LCQyZGFlZmY0NCwkMDgwNjNkYmMKKwlkYy5sCSQwMGYwMDgwYSwkNDFmNjA4MDQsJDJkNDgwMDA0LCRmMjJlZDBjMAorCWRjLmwJJGZmZGNmMjJlLCQ5YzAwZmY2MCwkNGNlZTAzMDMsJGZmOWM0ZTVlCisJZGMubAkkMmU1ZjYwZmYsJGZmZmZlZDNjLCQzZGFlMDAwNCwkMDgwMDJkYWUKKwlkYy5sCSRmZjQ0MDgwMiwkM2RiYzIwMjQsJDA4MDYyZGFlLCQwMDA2MDgwOAorCWRjLmwJJDQxZjYwODAwLCQyZDQ4MDAwNCwkZjIyZWQwYzAsJGZmZGNmMjJlCisJZGMubAkkOWMwMGZmNjAsJDRjZWUwMzAzLCRmZjljNGU1ZSwkMmU1ZjYwZmYKKwlkYy5sCSRmZmZmZWRmMiwkMWQ0MTAwMGEsJDFkNDAwMDBiLCRmMjJlZDBjMAorCWRjLmwJJGZmZGNmMjJlLCQ5YzAwZmY2MCwkNGNlZTAzMDMsJGZmOWMyZjE2CisJZGMubAkkMmYwMDJmMDEsJDJmMmVmZjQ0LCQ0MjgwMTAyZSwkMDAwYjQ0ODAKKwlkYy5sCSQwODJlMDAwNywkMDAwNDY3MWMsJDNkYWUwMDA0LCQwODAwMmRhZQorCWRjLmwJJDAwMDYwODA4LCQyZDlmMDgwMiwkM2RiYzIwMjQsJDA4MDY0ODc2CisJZGMubAkkMDgwMDYwMTQsJDNkYWUwMDA0LCQwODA0MmQ5ZiwkMDgwNjNkYmMKKwlkYy5sCSQwMGYwMDgwYSwkNDg3NjA4MDQsJDQyODExMjJlLCQwMDBhNGEwMQorCWRjLmwJJDZhMGNmMjM2LCRmMDgwMDgwYywkMDY4MDAwMDAsJDAwMGNlMzA5CisJZGMubAkkNmEwY2YyMzYsJGYwNDAwODBjLCQwNjgwMDAwMCwkMDAwY2UzMDkKKwlkYy5sCSQ2YTBjZjIzNiwkZjAyMDA4MGMsJDA2ODAwMDAwLCQwMDBjZTMwOQorCWRjLmwJJDZhMGNmMjM2LCRmMDEwMDgwYywkMDY4MDAwMDAsJDAwMGNlMzA5CisJZGMubAkkNmEwY2YyMzYsJGYwMDgwODBjLCQwNjgwMDAwMCwkMDAwY2UzMDkKKwlkYy5sCSQ2YTBjZjIzNiwkZjAwNDA4MGMsJDA2ODAwMDAwLCQwMDBjZTMwOQorCWRjLmwJJDZhMGNmMjM2LCRmMDAyMDgwYywkMDY4MDAwMDAsJDAwMGNlMzA5CisJZGMubAkkNmEwNmYyMzYsJGYwMDEwODBjLCQyMjJmMDAwNCwkMjAyZjAwMDgKKwlkYy5sCSQyYzZmMDAwYywkMmU1ZjA4MTcsJDAwMDc2N2ZmLCRmZmZmZWMwNAorCWRjLmwJJDYwZmZmZmZmLCRlY2YwNjFmZiwkMDAwMDEyNDQsJGYyMmVkMGMwCisJZGMubAkkZmZkY2YyMmUsJDljMDBmZjYwLCQ0Y2VlMDMwMywkZmY5YzA4MmUKKwlkYy5sCSQwMDA3MDAwNCwkNjYwZTJkNmUsJGZmNDQwMDA2LCQ0ZTVlNjBmZgorCWRjLmwJJGZmZmZlYmQwLCQyYzU2M2Y2ZiwkMDBjNDAwYzAsJDJmNmYwMGM2CisJZGMubAkkMDBjODJmNmYsJDAwMDQwMGMyLCQzZjdjMjAyNCwkMDBjNmRmZmMKKwlkYy5sCSQwMDAwMDBjMCwkNjBmZmZmZmYsJGVjOWMyMDFmLCQ0ZTU2ZmY0MAorCWRjLmwJJDQ4ZWUwMzAzLCRmZjljMmQ2ZSwkMDAwNmZmNDQsJDIwNmVmZjQ0CisJZGMubAkkNThhZWZmNDQsJDYxZmZmZmZmLCRlZDAwMmQ0MCwkZmY0MDRhNDAKKwlkYy5sCSQ2YjA0NzAxMCwkNjAyNjA4MDAsJDAwMGU2NjEwLCRlOWMwMTRjMworCWRjLmwJJDcwMGMwYzAxLCQwMDA3NjYxNCwkNTg4MDYwMTAsJDQyODA2MWZmCisJZGMubAkkMDAwMDBjZTYsJDIwMmVmZjQ0LCQ5MGFlMDAwNiwkM2Q0MDAwMGEKKwlkYy5sCSQ0Y2VlMDMwMywkZmY5YzRlNWUsJDUxOGYyZjAwLCQzZjZmMDAwYworCWRjLmwJJDAwMDQyZjZmLCQwMDBlMDAwNiwkNDI4MDMwMmYsJDAwMTIyZjZmCisJZGMubAkkMDAwNjAwMTAsJGQxYWYwMDA2LCQzZjdjNDAyYywkMDAwYTIwMWYKKwlkYy5sCSQ2MGZmZmZmZiwkZWJlNDRlN2EsJDA4MDgwODAwLCQwMDAxNjYwYworCWRjLmwJJGYyMmU5YzAwLCRmZjYwZjIyZSwkZDBjMGZmZGMsJDRjZWUwMzAzCisJZGMubAkkZmY5YzRlNWUsJDUxNGYyZWFmLCQwMDA4M2Y2ZiwkMDAwYzAwMDQKKwlkYy5sCSQzZjdjNDAwOCwkMDAwNjJmNmYsJDAwMDIwMDA4LCQyZjdjMDk0MgorCWRjLmwJJDgwMDEwMDBjLCQwODE3MDAwNSwkNjcwNjA4ZWYsJDAwMDIwMDBkCisJZGMubAkkNjBmZmZmZmYsJGViZDY0ZmVlLCRmZjQwNGU3YSwkMTgwODA4MDEKKwlkYy5sCSQwMDAxNjYwYywkZjIyZWQwYzAsJGZmZGNmMjJmLCQ5YzAwMDAyMAorCWRjLmwJJDJjNTYyZjZmLCQwMGM0MDBiYywkM2Y2ZjAwYzgsJDAwYzAzZjdjCisJZGMubAkkNDAwODAwYzIsJDJmNDgwMGM0LCQzZjQwMDBjOCwkM2Y3YzAwMDEKKwlkYy5sCSQwMGNhNGNlZiwkMDMwMzAwNWMsJGRlZmMwMGJjLCQ2MGE2NGU1NgorCWRjLmwJJGZmNDBmMzJlLCRmZjZjNDhlZSwkMDMwM2ZmOWMsJGYyMmViYzAwCisJZGMubAkkZmY2MGYyMmUsJGYwYzBmZmRjLCQyZDZlZmY2OCwkZmY0NDIwNmUKKwlkYy5sCSRmZjQ0NThhZSwkZmY0NDYxZmYsJGZmZmZlYmNlLCQyZDQwZmY0MAorCWRjLmwJJDA4MDAwMDBkLCQ2NjI4NDFlZSwkZmY2YzYxZmYsJGZmZmZmMWVhCisJZGMubAkkZjIyZWQwYzAsJGZmZGNmMjJlLCQ5YzAwZmY2MCwkNGNlZTAzMDMKKwlkYy5sCSRmZjljZjM2ZSwkZmY2YzRlNWUsJDYwZmZmZmZmLCRlYTk0MzIyZQorCWRjLmwJJGZmNmMwMjQxLCQ3ZmZmMGM0MSwkN2ZmZjY2MWEsJDRhYWVmZjc0CisJZGMubAkkNjYwYzIyMmUsJGZmNzAwMjgxLCQ3ZmZmZmZmZiwkNjcwODJkNmUKKwlkYy5sCSRmZjcwZmY1NCwkNjAxMjIyM2MsJDdmZmZmZmZmLCQ0YTJlZmY2YworCWRjLmwJJDZhMDI1MjgxLCQyZDQxZmY1NCwkZTljMDA0YzMsJDEyMmVmZjQxCisJZGMubAkkMzA3YjAyMDYsJDRlZmI4ODAyLCQwMDZjMDAwMCwkMDAwMGZmOTgKKwlkYy5sCSQwMDNlMDAwMCwkMDAxMDAwMDAsJDEwMmVmZjU0LCQwYzAxMDAwNworCWRjLmwJJDZmMTYyMDZlLCQwMDBjNjFmZiwkZmZmZmViODYsJDRhODE2NmZmCisJZGMubAkkMDAwMDU0MzYsJDYwMDBmZjZhLCQwMjQxMDAwNywkNjFmZjAwMDAKKwlkYy5sCSQ0NzhlNjAwMCwkZmY1YzMwMmUsJGZmNTQwYzAxLCQwMDA3NmYxNgorCWRjLmwJJDIwNmUwMDBjLCQ2MWZmZmZmZiwkZWI2ZTRhODEsJDY2ZmYwMDAwCisJZGMubAkkNTQxNjYwMDAsJGZmM2MwMjQxLCQwMDA3NjFmZiwkMDAwMDQ3MjQKKwlkYy5sCSQ2MDAwZmYyZSwkMjAyZWZmNTQsJDBjMDEwMDA3LCQ2ZjE2MjA2ZQorCWRjLmwJJDAwMGM2MWZmLCRmZmZmZWI1NiwkNGE4MTY2ZmYsJDAwMDA1M2Y2CisJZGMubAkkNjAwMGZmMGUsJDAyNDEwMDA3LCQ2MWZmMDAwMCwkNDZiYTYwMDAKKwlkYy5sCSRmZjAwNGU1NiwkZmY0MGYzMmUsJGZmNmM0OGVlLCQwMzAzZmY5YworCWRjLmwJJGYyMmViYzAwLCRmZjYwZjIyZSwkZjBjMGZmZGMsJDJkNmVmZjY4CisJZGMubAkkZmY0NDIwNmUsJGZmNDQ1OGFlLCRmZjQ0NjFmZiwkZmZmZmVhOGEKKwlkYy5sCSQyZDQwZmY0MCwkMDgwMDAwMGQsJDY2MDAwMDJhLCQ0MWVlZmY2YworCWRjLmwJJDYxZmZmZmZmLCRmMGE0ZjIyZSwkZDBjMGZmZGMsJGYyMmU5YzAwCisJZGMubAkkZmY2MDRjZWUsJDAzMDNmZjljLCRmMzZlZmY2YywkNGU1ZTYwZmYKKwlkYy5sCSRmZmZmZTk2NCwkZTljMDA0YzMsJDEyMmVmZjQxLCQzMDdiMDIwNgorCWRjLmwJJDRlZmI4ODAyLCQwMDc0MDBhNiwkMDE1YTAwMDAsJDAwNDIwMTA0CisJZGMubAkkMDAxMDAwMDAsJDEwMmVmZjcwLCQwOGMwMDAwNiwkMGMwMTAwMDcKKwlkYy5sCSQ2ZjE2MjA2ZSwkMDAwYzYxZmYsJGZmZmZlYTc2LCQ0YTgxNjZmZgorCWRjLmwJJDAwMDA1MzI2LCQ2MDAwZmZhMCwkMDI0MTAwMDcsJDYxZmYwMDAwCisJZGMubAkkNDY3ZTYwMDAsJGZmOTIzMDJlLCRmZjcwMDhjMCwkMDAwZTBjMDEKKwlkYy5sCSQwMDA3NmYxNiwkMjA2ZTAwMGMsJDYxZmZmZmZmLCRlYTVhNGE4MQorCWRjLmwJJDY2ZmYwMDAwLCQ1MzAyNjAwMCwkZmY2ZTAyNDEsJDAwMDc2MWZmCisJZGMubAkkMDAwMDQ2MTAsJDYwMDBmZjYwLCQyMDJlZmY3MCwkMDhjMDAwMWUKKwlkYy5sCSQwYzAxMDAwNywkNmYxNjIwNmUsJDAwMGM2MWZmLCRmZmZmZWEzZQorCWRjLmwJJDRhODE2NmZmLCQwMDAwNTJkZSwkNjAwMGZmM2MsJDAyNDEwMDA3CisJZGMubAkkNjFmZjAwMDAsJDQ1YTI2MDAwLCRmZjJlMGMwMSwkMDAwNzZmMmUKKwlkYy5sCSQyMDJlZmY2YywkMDI4MDgwMDAsJDAwMDAwMDgwLCQ3ZmMwMDAwMAorCWRjLmwJJDIyMmVmZjcwLCRlMDg5ODA4MSwkMjA2ZTAwMGMsJDYxZmZmZmZmCisJZGMubAkkZTlmYzRhODEsJDY2ZmYwMDAwLCQ1MjljNjAwMCwkZmVmYTIwMmUKKwlkYy5sCSRmZjZjMDI4MCwkODAwMDAwMDAsJDAwODA3ZmMwLCQwMDAwMmYwMQorCWRjLmwJJDIyMmVmZjcwLCRlMDg5ODA4MSwkMjIxZjAyNDEsJDAwMDc2MWZmCisJZGMubAkkMDAwMDQ1NDQsJDYwMDBmZWQwLCQyMDJlZmY2YywkMDI4MDgwMDAKKwlkYy5sCSQwMDAwMDA4MCwkN2ZmODAwMDAsJDIyMmVmZjcwLCQyZDQwZmY4NAorCWRjLmwJJDcwMGJlMGE5LCQ4M2FlZmY4NCwkMjIyZWZmNzAsJDAyODEwMDAwCisJZGMubAkkMDdmZmUwYjksJDJkNDFmZjg4LCQyMjJlZmY3NCwkZTBhOTgzYWUKKwlkYy5sCSRmZjg4NDFlZSwkZmY4NDIyNmUsJDAwMGM3MDA4LCQ2MWZmZmZmZgorCWRjLmwJJGU4Y2M0YTgxLCQ2NmZmMDAwMCwkNTIyYTYwMDAsJGZlN2E0MjJlCisJZGMubAkkZmY0YTNkNmUsJGZmNmNmZjg0LCQ0MjZlZmY4NiwkMjAyZWZmNzAKKwlkYy5sCSQwOGMwMDAxZSwkMmQ0MGZmODgsJDJkNmVmZjc0LCRmZjhjMDgyZQorCWRjLmwJJDAwMDUwMDA0LCQ2NjM4NGU2OCwkMmQ0OGZmZDgsJDJkNTZmZmQ0CisJZGMubAkkNjFmZjAwMDAsJDAyYzIyMjQ4LCQyZDQ4MDAwYywkMjA2ZWZmZDgKKwlkYy5sCSQ0ZTYwMmNhZSwkZmZkNDQxZWUsJGZmODQ3MDBjLCQ2MWZmZmZmZgorCWRjLmwJJGU4NmM0YTgxLCQ2NmZmMDAwMCwkNTFkODYwMDAsJGZlMWEyZDU2CisJZGMubAkkZmZkNDYxZmYsJDAwMDAwMjkwLCQyMjQ4MmQ0OCwkMDAwYzJjYWUKKwlkYy5sCSRmZmQ0MGMyZSwkMDAwOGZmNGEsJDY2Y2NmMjJlLCRkMGMwZmZkYworCWRjLmwJJGYyMmU5YzAwLCRmZjYwNGNlZSwkMDMwM2ZmOWMsJGYzNmVmZjZjCisJZGMubAkkMmM2ZWZmZDQsJDJmNmYwMGM0LCQwMGI4MmY2ZiwkMDBjODAwYmMKKwlkYy5sCSQyZjZmMDBjYywkMDBjMDJmNmYsJDAwNDQwMGM0LCQyZjZmMDA0OAorCWRjLmwJJDAwYzgyZjZmLCQwMDRjMDBjYywkZGZmYzAwMDAsJDAwYjg2MGZmCisJZGMubAkkZmZmZmU3MzQsJDRlNTZmZjQwLCRmMzJlZmY2YywkNDhlZTAzMDMKKwlkYy5sCSRmZjljZjIyZSwkYmMwMGZmNjAsJGYyMmVmMGMwLCRmZmRjMmQ2ZQorCWRjLmwJJGZmNjhmZjQ0LCQyMDZlZmY0NCwkNThhZWZmNDQsJDYxZmZmZmZmCisJZGMubAkkZTdmODJkNDAsJGZmNDAwODAwLCQwMDBkNjYwMCwkMDEwNmU5YzAKKwlkYy5sCSQwNGMzNjYyMiwkMGM2ZTQwMWUsJGZmNmM2NjFhLCRmMjNjOTAwMAorCWRjLmwJJDAwMDAwMDAwLCRmMjJlNDAwMCwkZmY3MGYyMmUsJDY4MDBmZjZjCisJZGMubAkkM2Q3Y2UwMDEsJGZmNmU0MWVlLCRmZjZjNjFmZiwkZmZmZmVkZWEKKwlkYy5sCSQwMmFlMDBmZiwkMDFmZmZmNjQsJGYyM2M5MDAwLCQwMDAwMDAwMAorCWRjLmwJJGYyM2M4ODAwLCQwMDAwMDAwMCwkZTllZTEwMDYsJGZmNDIwYzAxCisJZGMubAkkMDAxNzY3MDAsJDAwOTY0MWVlLCRmZjZjNjFmZiwkMDAwMDEzOTQKKwlkYy5sCSQxZDQwZmY0ZSwkMDgyZTAwMDUsJGZmNDM2NzJlLCQwODJlMDAwNAorCWRjLmwJJGZmNDM2NjI2LCRlOWVlMDE4MywkZmY0MjYxZmYsJDAwMDA0NTRjCisJZGMubAkkNDFlZWZmNzgsJDYxZmYwMDAwLCQxMzZhMGMwMCwkMDAwNjY2MDYKKwlkYy5sCSQ2MWZmMDAwMCwkMTJjZTFkNDAsJGZmNGY0MjgwLCQxMDJlZmY2MworCWRjLmwJJDEyMmVmZjQzLCQwMjQxMDA3ZiwkNDFlZWZmNmMsJDQzZWVmZjc4CisJZGMubAkkMjIzYjE1MzAsJDAwMDAwMjJjLCQ0ZWJiMTkzMCwkMDAwMDAyMjQKKwlkYy5sCSRlOWVlMDE4MywkZmY0MjYxZmYsJDAwMDA0NTkwLCRmMjJlZDBjMAorCWRjLmwJJGZmZGNmMjJlLCQ5YzAwZmY2MCwkNGNlZTAzMDMsJGZmOWNmMzZlCisJZGMubAkkZmY2YzRlNWUsJDYwZmZmZmZmLCRlNWNjNDI4MCwkMTAyZWZmNjMKKwlkYy5sCSQxMjJlZmY0MywkMDI4MTAwMDAsJDAwN2Y2MWZmLCQwMDAwMDM5NgorCWRjLmwJJDYwYmUxZDdjLCQwMDAwZmY0ZSwkNDI4MDEwMmUsJGZmNjMwMmFlCisJZGMubAkkZmZmZjAwZmYsJGZmNjQ0MWVlLCRmZjZjNjFmZiwkMDAwMDE3MjIKKwlkYy5sCSQ2MGFhNGU1NiwkZmY0MGYzMmUsJGZmNmM0OGVlLCQwMzAzZmY5YworCWRjLmwJJGYyMmViYzAwLCRmZjYwZjIyZSwkZjBjMGZmZGMsJDJkNmVmZjY4CisJZGMubAkkZmY0NDIwNmUsJGZmNDQ1OGFlLCRmZjQ0NjFmZiwkZmZmZmU2OWEKKwlkYy5sCSQyZDQwZmY0MCwkNDFlZWZmNmMsJDYxZmZmZmZmLCRlY2JjZjIyZQorCWRjLmwJJGQwYzBmZmRjLCRmMjJlOWMwMCwkZmY2MDRjZWUsJDAzMDNmZjljCisJZGMubAkkZjM2ZWZmNmMsJDRlNWU2MGZmLCRmZmZmZTU5MiwkMGM2ZjQwMmMKKwlkYy5sCSQwMDA2NjdmZiwkZmZmZmU1YjIsJDYwZmZmZmZmLCRlNTk2MjA0MAorCWRjLmwJJDEwMmVmZjQxLCQyMjAwMDI0MCwkMDAzODAyODEsJDAwMDAwMDA3CisJZGMubAkkMGMwMDAwMTgsJDY3MjQwYzAwLCQwMDIwNjcyYywkODA0MTBjMDAKKwlkYy5sCSQwMDNjNjcwNiwkMjA2ZTAwMGMsJDRlNzUxZDdjLCQwMDgwZmY0YQorCWRjLmwJJDQxZjYwMTYyLCRmZjY4MDAwNCwkNGU3NTIwMDgsJDYxZmYwMDAwCisJZGMubAkkNDJjYTIwNmUsJDAwMGM0ZTc1LCQyMDA4NjFmZiwkMDAwMDQzMGMKKwlkYy5sCSQyMDZlMDAwYywkMGMwMDAwMGMsJDY3MDI0ZTc1LCQ1MTg4MmQ0OAorCWRjLmwJJDAwMGM0ZTc1LCQxMDJlZmY0MSwkMjIwMDAyNDAsJDAwMzgwMjgxCisJZGMubAkkMDAwMDAwMDcsJDBjMDAwMDE4LCQ2NzBlMGMwMCwkMDAyMDY3MDAKKwlkYy5sCSQwMDc2MjA2ZSwkMDAwYzRlNzUsJDMyM2IxMjBlLCQyMDZlMDAwYworCWRjLmwJJDRlZmIxMDA2LCQ0YWZjMDAwOCwkMDAxMDAwMWEsJDAwMjQwMDJjCisJZGMubAkkMDAzNDAwM2MsJDAwNDQwMDRlLCQwNmFlMDAwMCwkMDAwY2ZmYTQKKwlkYy5sCSQ0ZTc1MDZhZSwkMDAwMDAwMGMsJGZmYTg0ZTc1LCRkNWZjMDAwMAorCWRjLmwJJDAwMGM0ZTc1LCRkN2ZjMDAwMCwkMDAwYzRlNzUsJGQ5ZmMwMDAwCisJZGMubAkkMDAwYzRlNzUsJGRiZmMwMDAwLCQwMDBjNGU3NSwkMDZhZTAwMDAKKwlkYy5sCSQwMDBjZmZkNCwkNGU3NTFkN2MsJDAwMDRmZjRhLCQwNmFlMDAwMAorCWRjLmwJJDAwMGNmZmQ4LCQ0ZTc1MzIzYiwkMTIxNDIwNmUsJDAwMGM1MTg4CisJZGMubAkkNTFhZTAwMGMsJDRlZmIxMDA2LCQ0YWZjMDAwOCwkMDAxMDAwMTYKKwlkYy5sCSQwMDFjMDAyMCwkMDAyNDAwMjgsJDAwMmMwMDMyLCQyZDQ4ZmZhNAorCWRjLmwJJDRlNzUyZDQ4LCRmZmE4NGU3NSwkMjQ0ODRlNzUsJDI2NDg0ZTc1CisJZGMubAkkMjg0ODRlNzUsJDJhNDg0ZTc1LCQyZDQ4ZmZkNCwkNGU3NTJkNDgKKwlkYy5sCSRmZmQ4MWQ3YywkMDAwOGZmNGEsJDRlNzU0YWZjLCQwMDZkMDAwMAorCWRjLmwJJDIwNzAwMDAwLCQyYTY2MDAwMCwkMDAwMDAwMDAsJDJiMGEwMDAwCisJZGMubAkkM2RiMjAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDJiYjAwMDAwLCQwMDAwMDAwMCwkMjc0NjAwMDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQyMzNjMDAwMCwkMDAwMDAwMDAsJDM2MjIwMDAwLCQxYzdjMDAwMAorCWRjLmwJJDMyZjIwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDJmYjAwMDAwCisJZGMubAkkMzllYTAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQyZTRlMDAwMCwkMDAwMDAwMDAsJDI5ZjQwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCisJZGMubAkkMjA1ZTAwMDAsJDNkYTAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQyMDY4MDAwMCwkM2RhYTAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCisJZGMubAkkMmI5ZTAwMDAsJDAwMDAwMDAwLCQyNzM0MDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQyYmE4MDAwMCwkMDAwMDAwMDAsJDI3M2UwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDIzMmEwMDAwLCQwMDAwMDAwMCwkMzYxMDAwMDAsJDFjNmEwMDAwCisJZGMubAkkMjMzNDAwMDAsJDAwMDAwMDAwLCQzNjFhMDAwMCwkMWM3NDAwMDAKKwlkYy5sCSQzOWQ4MDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDM5ZTI2MGZlLCQxMjJlZmY0MywkMDI0MTAwNzAsJGU4MDk2MWZmCisJZGMubAkkMDAwMDNlZDIsJDAyODAwMDAwLCQwMGZmMmYwMCwkMTAzYjA5MjAKKwlkYy5sCSQwMTQ4MmYwMCwkNjFmZjAwMDAsJDAzNDAyMDFmLCQyMjFmNjcwMAorCWRjLmwJJDAxMzQwODJlLCQwMDA1ZmY0MiwkNjcwMDAwYjgsJDA4MmUwMDA0CisJZGMubAkkZmY0MjY2MDAsJDAwMWExMjNiLCQxMTIwMDIxZSwkMDgyZTAwMDUKKwlkYy5sCSQwMDA0NjcwYSwkMGMyZTAwMDgsJGZmNGE2NjAyLCQ0ZTc1MjI0OAorCWRjLmwJJDlmYzA0MWQ3LCQ0YTAxNmEwYywkMjBlZWZmZGMsJDIwZWVmZmUwCisJZGMubAkkMjBlZWZmZTQsJGUzMDk2YTBjLCQyMGVlZmZlOCwkMjBlZWZmZWMKKwlkYy5sCSQyMGVlZmZmMCwkZTMwOTZhMGEsJGYyMTBmMDIwLCRkMWZjMDAwMAorCWRjLmwJJDAwMGNlMzA5LCQ2YTBhZjIxMCwkZjAxMGQxZmMsJDAwMDAwMDBjCisJZGMubAkkZTMwOTZhMGEsJGYyMTBmMDA4LCRkMWZjMDAwMCwkMDAwY2UzMDkKKwlkYy5sCSQ2YTBhZjIxMCwkZjAwNGQxZmMsJDAwMDAwMDBjLCRlMzA5NmEwYQorCWRjLmwJJGYyMTBmMDAyLCRkMWZjMDAwMCwkMDAwY2UzMDksJDZhMGFmMjEwCisJZGMubAkkZjAwMWQxZmMsJDAwMDAwMDBjLCQyZDQ5ZmY1NCwkNDFkNzJmMDAKKwlkYy5sCSQ2MWZmZmZmZiwkZTI0ODIwMWYsJGRmYzA0YTgxLCQ2NjAwMDcxZQorCWRjLmwJJDRlNzUyZDQ4LCRmZjU0OWZjMCwkNDNkNzJmMDEsJDJmMDA2MWZmCisJZGMubAkkZmZmZmUyMTQsJDIwMWY0YTgxLCQ2NjAwMDcwZSwkMjIxZjQxZDcKKwlkYy5sCSQ0YTAxNmEwYywkMmQ1OGZmZGMsJDJkNThmZmUwLCQyZDU4ZmZlNAorCWRjLmwJJGUzMDk2YTBjLCQyZDU4ZmZlOCwkMmQ1OGZmZWMsJDJkNThmZmYwCisJZGMubAkkZTMwOTZhMDQsJGYyMThkMDIwLCRlMzA5NmEwNCwkZjIxOGQwMTAKKwlkYy5sCSRlMzA5NmEwNCwkZjIxOGQwMDgsJGUzMDk2YTA0LCRmMjE4ZDAwNAorCWRjLmwJJGUzMDk2YTA0LCRmMjE4ZDAwMiwkZTMwOTZhMDQsJGYyMThkMDAxCisJZGMubAkkZGZjMDRlNzUsJDRlNzUwMDBjLCQwYzE4MGMxOCwkMTgyNDBjMTgKKwlkYy5sCSQxODI0MTgyNCwkMjQzMDBjMTgsJDE4MjQxODI0LCQyNDMwMTgyNAorCWRjLmwJJDI0MzAyNDMwLCQzMDNjMGMxOCwkMTgyNDE4MjQsJDI0MzAxODI0CisJZGMubAkkMjQzMDI0MzAsJDMwM2MxODI0LCQyNDMwMjQzMCwkMzAzYzI0MzAKKwlkYy5sCSQzMDNjMzAzYywkM2M0ODBjMTgsJDE4MjQxODI0LCQyNDMwMTgyNAorCWRjLmwJJDI0MzAyNDMwLCQzMDNjMTgyNCwkMjQzMDI0MzAsJDMwM2MyNDMwCisJZGMubAkkMzAzYzMwM2MsJDNjNDgxODI0LCQyNDMwMjQzMCwkMzAzYzI0MzAKKwlkYy5sCSQzMDNjMzAzYywkM2M0ODI0MzAsJDMwM2MzMDNjLCQzYzQ4MzAzYworCWRjLmwJJDNjNDgzYzQ4LCQ0ODU0MGMxOCwkMTgyNDE4MjQsJDI0MzAxODI0CisJZGMubAkkMjQzMDI0MzAsJDMwM2MxODI0LCQyNDMwMjQzMCwkMzAzYzI0MzAKKwlkYy5sCSQzMDNjMzAzYywkM2M0ODE4MjQsJDI0MzAyNDMwLCQzMDNjMjQzMAorCWRjLmwJJDMwM2MzMDNjLCQzYzQ4MjQzMCwkMzAzYzMwM2MsJDNjNDgzMDNjCisJZGMubAkkM2M0ODNjNDgsJDQ4NTQxODI0LCQyNDMwMjQzMCwkMzAzYzI0MzAKKwlkYy5sCSQzMDNjMzAzYywkM2M0ODI0MzAsJDMwM2MzMDNjLCQzYzQ4MzAzYworCWRjLmwJJDNjNDgzYzQ4LCQ0ODU0MjQzMCwkMzAzYzMwM2MsJDNjNDgzMDNjCisJZGMubAkkM2M0ODNjNDgsJDQ4NTQzMDNjLCQzYzQ4M2M0OCwkNDg1NDNjNDgKKwlkYy5sCSQ0ODU0NDg1NCwkNTQ2MDAwODAsJDQwYzAyMGEwLCQ2MGUwMTA5MAorCWRjLmwJJDUwZDAzMGIwLCQ3MGYwMDg4OCwkNDhjODI4YTgsJDY4ZTgxODk4CisJZGMubAkkNThkODM4YjgsJDc4ZjgwNDg0LCQ0NGM0MjRhNCwkNjRlNDE0OTQKKwlkYy5sCSQ1NGQ0MzRiNCwkNzRmNDBjOGMsJDRjY2MyY2FjLCQ2Y2VjMWM5YworCWRjLmwJJDVjZGMzY2JjLCQ3Y2ZjMDI4MiwkNDJjMjIyYTIsJDYyZTIxMjkyCisJZGMubAkkNTJkMjMyYjIsJDcyZjIwYThhLCQ0YWNhMmFhYSwkNmFlYTFhOWEKKwlkYy5sCSQ1YWRhM2FiYSwkN2FmYTA2ODYsJDQ2YzYyNmE2LCQ2NmU2MTY5NgorCWRjLmwJJDU2ZDYzNmI2LCQ3NmY2MGU4ZSwkNGVjZTJlYWUsJDZlZWUxZTllCisJZGMubAkkNWVkZTNlYmUsJDdlZmUwMTgxLCQ0MWMxMjFhMSwkNjFlMTExOTEKKwlkYy5sCSQ1MWQxMzFiMSwkNzFmMTA5ODksJDQ5YzkyOWE5LCQ2OWU5MTk5OQorCWRjLmwJJDU5ZDkzOWI5LCQ3OWY5MDU4NSwkNDVjNTI1YTUsJDY1ZTUxNTk1CisJZGMubAkkNTVkNTM1YjUsJDc1ZjUwZDhkLCQ0ZGNkMmRhZCwkNmRlZDFkOWQKKwlkYy5sCSQ1ZGRkM2RiZCwkN2RmZDAzODMsJDQzYzMyM2EzLCQ2M2UzMTM5MworCWRjLmwJJDUzZDMzM2IzLCQ3M2YzMGI4YiwkNGJjYjJiYWIsJDZiZWIxYjliCisJZGMubAkkNWJkYjNiYmIsJDdiZmIwNzg3LCQ0N2M3MjdhNywkNjdlNzE3OTcKKwlkYy5sCSQ1N2Q3MzdiNywkNzdmNzBmOGYsJDRmY2YyZmFmLCQ2ZmVmMWY5ZgorCWRjLmwJJDVmZGYzZmJmLCQ3ZmZmMjA0MCwkMzAyZWZmNDAsJDMyMDAwMjQwCisJZGMubAkkMDAzZjAyODEsJDAwMDAwMDA3LCQzMDNiMDIwYSwkNGVmYjAwMDYKKwlkYy5sCSQ0YWZjMDA0MCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDAwODAwMDg2LCQwMDhjMDA5MCwkMDA5NDAwOTgKKwlkYy5sCSQwMDljMDBhMCwkMDBhNjAwYjYsJDAwYzYwMGQyLCQwMGRlMDBlYQorCWRjLmwJJDAwZjYwMTAyLCQwMTE4MDEyNiwkMDEzNDAxM2UsJDAxNDgwMTUyCisJZGMubAkkMDE1YzAxNjYsJDAxN2EwMTk4LCQwMWI2MDFkMiwkMDFlZTAyMGEKKwlkYy5sCSQwMjI2MDI0MiwkMDI2MDAyNjAsJDAyNjAwMjYwLCQwMjYwMDI2MAorCWRjLmwJJDAyNjAwMjYwLCQwMmMwMDJkYSwkMDJmNDAzMTQsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDIwNmVmZmE0LCQ0ZTc1MjA2ZSwkZmZhODRlNzUKKwlkYy5sCSQyMDRhNGU3NSwkMjA0YjRlNzUsJDIwNGM0ZTc1LCQyMDRkNGU3NQorCWRjLmwJJDIwNTY0ZTc1LCQyMDZlZmZkOCwkNGU3NTIwMmUsJGZmYTQyMjAwCisJZGMubAkkZDI4ODJkNDEsJGZmYTQyMDQwLCQ0ZTc1MjAyZSwkZmZhODIyMDAKKwlkYy5sCSRkMjg4MmQ0MSwkZmZhODIwNDAsJDRlNzUyMDBhLCQyMjAwZDI4OAorCWRjLmwJJDI0NDEyMDQwLCQ0ZTc1MjAwYiwkMjIwMGQyODgsJDI2NDEyMDQwCisJZGMubAkkNGU3NTIwMGMsJDIyMDBkMjg4LCQyODQxMjA0MCwkNGU3NTIwMGQKKwlkYy5sCSQyMjAwZDI4OCwkMmE0MTIwNDAsJDRlNzUyMDE2LCQyMjAwZDI4OAorCWRjLmwJJDJjODEyMDQwLCQ0ZTc1MWQ3YywkMDAwNGZmNGEsJDIwMmVmZmQ4CisJZGMubAkkMjIwMGQyODgsJDJkNDFmZmQ4LCQyMDQwNGU3NSwkMjAyZWZmYTQKKwlkYy5sCSQ5MDg4MmQ0MCwkZmZhNDIwNDAsJDRlNzUyMDJlLCRmZmE4OTA4OAorCWRjLmwJJDJkNDBmZmE4LCQyMDQwNGU3NSwkMjAwYTkwODgsJDI0NDAyMDQwCisJZGMubAkkNGU3NTIwMGIsJDkwODgyNjQwLCQyMDQwNGU3NSwkMjAwYzkwODgKKwlkYy5sCSQyODQwMjA0MCwkNGU3NTIwMGQsJDkwODgyYTQwLCQyMDQwNGU3NQorCWRjLmwJJDIwMTY5MDg4LCQyYzgwMjA0MCwkNGU3NTFkN2MsJDAwMDhmZjRhCisJZGMubAkkMjAyZWZmZDgsJDkwODgyZDQwLCRmZmQ4MjA0MCwkNGU3NTIwNmUKKwlkYy5sCSRmZjQ0NTRhZSwkZmY0NDYxZmYsJGZmZmZkZTM4LCQ0YTgxNjZmZgorCWRjLmwJJGZmZmZmMWI2LCQzMDQwZDFlZSwkZmZhNDRlNzUsJDIwNmVmZjQ0CisJZGMubAkkNTRhZWZmNDQsJDYxZmZmZmZmLCRkZTFhNGE4MSwkNjZmZmZmZmYKKwlkYy5sCSRmMTk4MzA0MCwkZDFlZWZmYTgsJDRlNzUyMDZlLCRmZjQ0NTRhZQorCWRjLmwJJGZmNDQ2MWZmLCRmZmZmZGRmYywkNGE4MTY2ZmYsJGZmZmZmMTdhCisJZGMubAkkMzA0MGQxY2EsJDRlNzUyMDZlLCRmZjQ0NTRhZSwkZmY0NDYxZmYKKwlkYy5sCSRmZmZmZGRlMCwkNGE4MTY2ZmYsJGZmZmZmMTVlLCQzMDQwZDFjYgorCWRjLmwJJDRlNzUyMDZlLCRmZjQ0NTRhZSwkZmY0NDYxZmYsJGZmZmZkZGM0CisJZGMubAkkNGE4MTY2ZmYsJGZmZmZmMTQyLCQzMDQwZDFjYywkNGU3NTIwNmUKKwlkYy5sCSRmZjQ0NTRhZSwkZmY0NDYxZmYsJGZmZmZkZGE4LCQ0YTgxNjZmZgorCWRjLmwJJGZmZmZmMTI2LCQzMDQwZDFjZCwkNGU3NTIwNmUsJGZmNDQ1NGFlCisJZGMubAkkZmY0NDYxZmYsJGZmZmZkZDhjLCQ0YTgxNjZmZiwkZmZmZmYxMGEKKwlkYy5sCSQzMDQwZDFkNiwkNGU3NTIwNmUsJGZmNDQ1NGFlLCRmZjQ0NjFmZgorCWRjLmwJJGZmZmZkZDcwLCQ0YTgxNjZmZiwkZmZmZmYwZWUsJDMwNDBkMWVlCisJZGMubAkkZmZkODRlNzUsJDUwODE2MWZmLCQwMDAwMzhmYSwkMmYwMDIwNmUKKwlkYy5sCSRmZjQ0NTRhZSwkZmY0NDYxZmYsJGZmZmZkZDQ4LCQ0YTgxNjZmZgorCWRjLmwJJGZmZmZmMGM2LCQyMDVmMDgwMCwkMDAwODY2MDAsJDAwZTYyZDQwCisJZGMubAkkZmY1NDIyMDAsJGU5NTkwMjQxLCQwMDBmNjFmZiwkMDAwMDM4YzYKKwlkYy5sCSQyZjAyMjQyZSwkZmY1NDA4MDIsJDAwMGI2NjAyLCQ0OGMwMjIwMgorCWRjLmwJJGVmNTkwMjgxLCQwMDAwMDAwMywkZTNhODQ5YzIsJGQwODJkMWMwCisJZGMubAkkMjQxZjRlNzUsJDIwNmVmZjQ0LCQ1NGFlZmY0NCwkNjFmZmZmZmYKKwlkYy5sCSRkY2YyNGE4MSwkNjZmZmZmZmYsJGYwNzAzMDQwLCQ0ZTc1MjA2ZQorCWRjLmwJJGZmNDQ1OGFlLCRmZjQ0NjFmZiwkZmZmZmRjZWUsJDRhODE2NmZmCisJZGMubAkkZmZmZmYwNTYsJDIwNDA0ZTc1LCQyMDZlZmY0NCwkNTRhZWZmNDQKKwlkYy5sCSQ2MWZmZmZmZiwkZGNiZTRhODEsJDY2ZmZmZmZmLCRmMDNjMzA0MAorCWRjLmwJJGQxZWVmZjQ0LCQ1NTg4NGU3NSwkMjA2ZWZmNDQsJDU0YWVmZjQ0CisJZGMubAkkNjFmZmZmZmYsJGRjOWU0YTgxLCQ2NmZmZmZmZiwkZjAxYzIwNmUKKwlkYy5sCSRmZjQ0NTU4OCwkMDgwMDAwMDgsJDY2MDAwMDM4LCQyZDQwZmY1NAorCWRjLmwJJDIyMDBlOTU5LCQwMjQxMDAwZiwkNjFmZjAwMDAsJDM4MTgyZjAyCisJZGMubAkkMjQyZWZmNTQsJDA4MDIwMDBiLCQ2NjAyNDhjMCwkMjIwMmVmNTkKKwlkYy5sCSQwMjgxMDAwMCwkMDAwM2UzYTgsJDQ5YzJkMDgyLCRkMWMwMjQxZgorCWRjLmwJJDRlNzUwODAwLCQwMDA2NjcwYywkNDhlNzNjMDAsJDJhMDAyNjA4CisJZGMubAkkNDI4MjYwMjgsJDJkNDBmZjU0LCRlOWMwMTQwNCwkNjFmZjAwMDAKKwlkYy5sCSQzN2Q0NDhlNywkM2MwMDI0MDAsJDJhMmVmZjU0LCQyNjA4MDgwNQorCWRjLmwJJDAwMGI2NjAyLCQ0OGMyZTljNSwkMDU0MmUxYWEsJDA4MDUwMDA3CisJZGMubAkkNjcwMjQyODMsJGU5YzUwNjgyLCQwYzAwMDAwMiwkNmQzNDY3MTgKKwlkYy5sCSQyMDZlZmY0NCwkNThhZWZmNDQsJDYxZmZmZmZmLCRkYzBjNGE4MQorCWRjLmwJJDY2ZmYwMDAwLCQwMGIwNjAxOCwkMjA2ZWZmNDQsJDU0YWVmZjQ0CisJZGMubAkkNjFmZmZmZmYsJGRiZGU0YTgxLCQ2NmZmMDAwMCwkMDA5ODQ4YzAKKwlkYy5sCSRkNjgwZTljNSwkMDc4MjY3MDAsJDAwNmUwYzAwLCQwMDAyNmQzNAorCWRjLmwJJDY3MTgyMDZlLCRmZjQ0NThhZSwkZmY0NDYxZmYsJGZmZmZkYmNhCisJZGMubAkkNGE4MTY2ZmYsJDAwMDAwMDZlLCQ2MDFjMjA2ZSwkZmY0NDU0YWUKKwlkYy5sCSRmZjQ0NjFmZiwkZmZmZmRiOWMsJDRhODE2NmZmLCQwMDAwMDA1NgorCWRjLmwJJDQ4YzA2MDAyLCQ0MjgwMjgwMCwkMDgwNTAwMDIsJDY3MTQyMDQzCisJZGMubAkkNjFmZmZmZmYsJGRiZDY0YTgxLCQ2NjAwMDAyOCwkZDA4MmQwODQKKwlkYy5sCSQ2MDE4ZDY4MiwkMjA0MzYxZmYsJGZmZmZkYmMwLCQ0YTgxNjYwMAorCWRjLmwJJDAwMTJkMDg0LCQ2MDA0ZDY4MiwkMjAwMzIwNDAsJDRjZGYwMDNjCisJZGMubAkkNGU3NTIwNDMsJDRjZGYwMDNjLCQzMDNjMDEwMSwkNjBmZmZmZmYKKwlkYy5sCSRlZjE4NGNkZiwkMDAzYzYwZmYsJGZmZmZlZWJlLCQ2MWZmMDAwMAorCWRjLmwJJDQ0ZWEzMDNjLCQwMGUxNjAwYSwkNjFmZjAwMDAsJDQ0ZGUzMDNjCisJZGMubAkkMDE2MTIwNmUsJGZmNTQ2MGZmLCRmZmZmZWVlZSwkMTAyZWZmNDIKKwlkYy5sCSQwYzAwMDA5YywkNjcwMDAwYjIsJDBjMDAwMDk4LCQ2NzAwMDA3NAorCWRjLmwJJDBjMDAwMDk0LCQ2NzM2MjA2ZSwkZmY0NDU4YWUsJGZmNDQ2MWZmCisJZGMubAkkZmZmZmRiMDYsJDRhODE2NmZmLCRmZmZmZWU2ZSwkMmQ0MGZmNjQKKwlkYy5sCSQyMDZlZmY0NCwkNThhZWZmNDQsJDYxZmZmZmZmLCRkYWVjNGE4MQorCWRjLmwJJDY2ZmZmZmZmLCRlZTU0MmQ0MCwkZmY2ODRlNzUsJDIwNmVmZjQ0CisJZGMubAkkNThhZWZmNDQsJDYxZmZmZmZmLCRkYWQwNGE4MSwkNjZmZmZmZmYKKwlkYy5sCSRlZTM4MmQ0MCwkZmY2MDIwNmUsJGZmNDQ1OGFlLCRmZjQ0NjFmZgorCWRjLmwJJGZmZmZkYWI2LCQ0YTgxNjZmZiwkZmZmZmVlMWUsJDJkNDBmZjY4CisJZGMubAkkNGU3NTIwNmUsJGZmNDQ1OGFlLCRmZjQ0NjFmZiwkZmZmZmRhOWEKKwlkYy5sCSQ0YTgxNjZmZiwkZmZmZmVlMDIsJDJkNDBmZjYwLCQyMDZlZmY0NAorCWRjLmwJJDU4YWVmZjQ0LCQ2MWZmZmZmZiwkZGE4MDRhODEsJDY2ZmZmZmZmCisJZGMubAkkZWRlODJkNDAsJGZmNjQ0ZTc1LCQyMDZlZmY0NCwkNThhZWZmNDQKKwlkYy5sCSQ2MWZmZmZmZiwkZGE2NDRhODEsJDY2ZmZmZmZmLCRlZGNjMmQ0MAorCWRjLmwJJGZmNjAyMDZlLCRmZjQ0NThhZSwkZmY0NDYxZmYsJGZmZmZkYTRhCisJZGMubAkkNGE4MTY2ZmYsJGZmZmZlZGIyLCQyZDQwZmY2NCwkMjA2ZWZmNDQKKwlkYy5sCSQ1OGFlZmY0NCwkNjFmZmZmZmYsJGRhMzA0YTgxLCQ2NmZmZmZmZgorCWRjLmwJJGVkOTgyZDQwLCRmZjY4NGU3NSwkMmQ2ODAwMDQsJGZmODgyZDY5CisJZGMubAkkMDAwNGZmOTQsJDJkNjgwMDA4LCRmZjhjMmQ2OSwkMDAwOGZmOTgKKwlkYy5sCSQzMDI4MDAwMCwkMzIyOTAwMDAsJDNkNDBmZjg0LCQzZDQxZmY5MAorCWRjLmwJJDAyNDA3ZmZmLCQwMjQxN2ZmZiwkM2Q0MGZmNTQsJDNkNDFmZjU2CisJZGMubAkkYjA0MTZjZmYsJDAwMDAwMDVjLCQ2MWZmMDAwMCwkMDE1YTJmMDAKKwlkYy5sCSQwYzJlMDAwNCwkZmY0ZTY2MTAsJDQxZWVmZjg0LCQ2MWZmMDAwMAorCWRjLmwJJDA0ZmE0NDQwLCQzZDQwZmY1NCwkMzAyZWZmNTYsJDA0NDAwMDQyCisJZGMubAkkYjA2ZWZmNTQsJDZjMWEzMDJlLCRmZjU0ZDA2ZiwkMDAwMjMyMmUKKwlkYy5sCSRmZjg0MDI0MSwkODAwMDgwNDEsJDNkNDBmZjg0LCQyMDFmNGU3NQorCWRjLmwJJDAyNmU4MDAwLCRmZjg0MDhlZSwkMDAwMGZmODUsJDIwMWY0ZTc1CisJZGMubAkkNjFmZjAwMDAsJDAwNTYyZjAwLCQwYzJlMDAwNCwkZmY0ZjY2MTAKKwlkYy5sCSQ0MWVlZmY5MCwkNjFmZjAwMDAsJDA0YTI0NDQwLCQzZDQwZmY1NgorCWRjLmwJJDMwMmVmZjU0LCQwNDQwMDA0MiwkYjA2ZWZmNTYsJDZjMWEzMDJlCisJZGMubAkkZmY1NmQwNmYsJDAwMDIzMjJlLCRmZjkwMDI0MSwkODAwMDgwNDEKKwlkYy5sCSQzZDQwZmY5MCwkMjAxZjRlNzUsJDAyNmU4MDAwLCRmZjkwMDhlZQorCWRjLmwJJDAwMDBmZjkxLCQyMDFmNGU3NSwkMzIyZWZmODQsJDMwMDEwMjgxCisJZGMubAkkMDAwMDdmZmYsJDAyNDA4MDAwLCQwMDQwM2ZmZiwkM2Q0MGZmODQKKwlkYy5sCSQwYzJlMDAwNCwkZmY0ZTY3MGEsJDIwM2MwMDAwLCQzZmZmOTA4MQorCWRjLmwJJDRlNzU0MWVlLCRmZjg0NjFmZiwkMDAwMDA0MzAsJDQ0ODAyMjAwCisJZGMubAkkNjBlNjBjMmUsJDAwMDRmZjRlLCQ2NzNhMzIyZSwkZmY4NDAyODEKKwlkYy5sCSQwMDAwN2ZmZiwkMDI2ZTgwMDAsJGZmODQwODAxLCQwMDAwNjcxMgorCWRjLmwJJDAwNmUzZmZmLCRmZjg0MjAzYywkMDAwMDNmZmYsJDkwODFlMjgwCisJZGMubAkkNGU3NTAwNmUsJDNmZmVmZjg0LCQyMDNjMDAwMCwkM2ZmZTkwODEKKwlkYy5sCSRlMjgwNGU3NSwkNDFlZWZmODQsJDYxZmYwMDAwLCQwM2RlMDgwMAorCWRjLmwJJDAwMDA2NzEwLCQwMDZlM2ZmZiwkZmY4NDA2ODAsJDAwMDAzZmZmCisJZGMubAkkZTI4MDRlNzUsJDAwNmUzZmZlLCRmZjg0MDY4MCwkMDAwMDNmZmUKKwlkYy5sCSRlMjgwNGU3NSwkMzIyZWZmOTAsJDMwMDEwMjgxLCQwMDAwN2ZmZgorCWRjLmwJJDAyNDA4MDAwLCQwMDQwM2ZmZiwkM2Q0MGZmOTAsJDBjMmUwMDA0CisJZGMubAkkZmY0ZjY3MGEsJDIwM2MwMDAwLCQzZmZmOTA4MSwkNGU3NTQxZWUKKwlkYy5sCSRmZjkwNjFmZiwkMDAwMDAzODQsJDQ0ODAyMjAwLCQ2MGU2MGMyZQorCWRjLmwJJDAwMDVmZjRmLCQ2NzMyMGMyZSwkMDAwM2ZmNGYsJDY3M2UwYzJlCisJZGMubAkkMDAwM2ZmNGUsJDY3MTQwOGVlLCQwMDA2ZmY3MCwkMDBhZTAxMDAKKwlkYy5sCSQ0MDgwZmY2NCwkNDFlZWZmNmMsJDYwNDIwMGFlLCQwMTAwMDAwMAorCWRjLmwJJGZmNjQ0MWVlLCRmZjZjNjAzNCwkMDBhZTAxMDAsJDQwODBmZjY0CisJZGMubAkkMDhlZTAwMDYsJGZmN2M0MWVlLCRmZjc4NjAyMCwkNDFlZWZmNzgKKwlkYy5sCSQwYzJlMDAwNSwkZmY0ZTY2ZmYsJDAwMDAwMDBjLCQwMGFlMDAwMAorCWRjLmwJJDQwODBmZjY0LCQwMGFlMDEwMCwkMDAwMGZmNjQsJDA4MjgwMDA3CisJZGMubAkkMDAwMDY3MDgsJDAwYWUwODAwLCQwMDAwZmY2NCwkZjIxMGQwODAKKwlkYy5sCSQ0ZTc1MDBhZSwkMDEwMDIwODAsJGZmNjRmMjNiLCRkMDgwMDE3MAorCWRjLmwJJDAwMDAwMDA4LCQ0ZTc1N2ZmZiwkMDAwMGZmZmYsJGZmZmZmZmZmCisJZGMubAkkZmZmZjAwMDAsJDNmODEzYzAxLCRlNDA4MzIzYiwkMDJmNjMwMDEKKwlkYy5sCSQ5MDY4MDAwMCwkMGM0MDAwNDIsJDZhMTY0MjgwLCQwODJlMDAwMQorCWRjLmwJJGZmNjY2NzA0LCQwOGMwMDAxZCwkNjFmZjAwMDAsJDAwMWE0ZTc1CisJZGMubAkkMjAzYzIwMDAsJDAwMDAzMTQxLCQwMDAwNDJhOCwkMDAwNDQyYTgKKwlkYy5sCSQwMDA4NGU3NSwkMmQ2ODAwMDgsJGZmNTQyZDQwLCRmZjU4MjAwMQorCWRjLmwJJDkyNjgwMDAwLCQ2ZjEwMGM0MSwkMDAyMDZkMTAsJDBjNDEwMDQwCisJZGMubAkkNmQ1MDYwMDAsJDAwOWEyMDJlLCRmZjU4NGU3NSwkMmYwMjMxNDAKKwlkYy5sCSQwMDAwNzAyMCwkOTA0MTBjNDEsJDAwMWQ2ZDA4LCQxNDJlZmY1OAorCWRjLmwJJDg1MmVmZjU3LCRlOWU4MjAyMCwkMDAwNGU5ZTgsJDE4MDAwMDA0CisJZGMubAkkZTllZTA4MDAsJGZmNTQyMTQyLCQwMDA0MjE0MSwkMDAwOGU4YzAKKwlkYy5sCSQwMDllNjcwNCwkMDhjMDAwMWQsJDAyODBlMDAwLCQwMDAwMjQxZgorCWRjLmwJJDRlNzUyZjAyLCQzMTQwMDAwMCwkMDQ0MTAwMjAsJDcwMjA5MDQxCisJZGMubAkkMTQyZWZmNTgsJDg1MmVmZjU3LCRlOWU4MjAyMCwkMDAwNGU5ZTgKKwlkYy5sCSQxODAwMDAwNCwkZThjMTAwOWUsJDY2MGNlOGVlLCQwODFmZmY1NAorCWRjLmwJJDY2MDQyMDAxLCQ2MDA2MjAwMSwkMDhjMDAwMWQsJDQyYTgwMDA0CisJZGMubAkkMjE0MjAwMDgsJDAyODBlMDAwLCQwMDAwMjQxZiwkNGU3NTMxNDAKKwlkYy5sCSQwMDAwMGM0MSwkMDA0MTZkMTIsJDY3MjQ0MmE4LCQwMDA0NDJhOAorCWRjLmwJJDAwMDgyMDNjLCQyMDAwMDAwMCwkNGU3NTIwMjgsJDAwMDQyMjAwCisJZGMubAkkMDI4MGMwMDAsJDAwMDAwMjgxLCQzZmZmZmZmZiwkNjAxMjIwMjgKKwlkYy5sCSQwMDA0MDI4MCwkODAwMDAwMDAsJGUyODgwMjgxLCQ3ZmZmZmZmZgorCWRjLmwJJDY2MTY0YWE4LCQwMDA4NjYxMCwkNGEyZWZmNTgsJDY2MGE0MmE4CisJZGMubAkkMDAwNDQyYTgsJDAwMDg0ZTc1LCQwOGMwMDAxZCwkNDJhODAwMDQKKwlkYy5sCSQ0MmE4MDAwOCwkNGU3NTYxZmYsJDAwMDAwMTEwLCQ0YTgwNjcwMAorCWRjLmwJJDAwZmEwMDZlLCQwMjA4ZmY2NiwkMzI3YjEyMDYsJDRlZmI5ODAyCisJZGMubAkkMDA0MDAwZWEsJDAwMjQwMDA4LCQ0YTI4MDAwMiwkNmIwMDAwZGMKKwlkYy5sCSQ3MGZmNDg0MSwkMGMwMTAwMDQsJDY3MDAwMDNlLCQ2ZTAwMDA5NAorCWRjLmwJJDYwMDAwMDY0LCQ0YTI4MDAwMiwkNmEwMDAwYzAsJDcwZmY0ODQxCisJZGMubAkkMGMwMTAwMDQsJDY3MDAwMDIyLCQ2ZTAwMDA3OCwkNjAwMDAwNDgKKwlkYy5sCSRlMzgwNjQwMCwkMDBhNjQ4NDEsJDBjMDEwMDA0LCQ2NzAwMDAwYQorCWRjLmwJJDZlMDAwMDYwLCQ2MDAwMDAzMCwkMDZhODAwMDAsJDAxMDAwMDA0CisJZGMubAkkNjQwY2U0ZTgsJDAwMDRlNGU4LCQwMDA2NTI2OCwkMDAwMDRhODAKKwlkYy5sCSQ2NjA2MDI2OCwkZmUwMDAwMDYsJDAyYThmZmZmLCRmZjAwMDAwNAorCWRjLmwJJDQyYTgwMDA4LCQ0ZTc1NTJhOCwkMDAwODY0MWEsJDUyYTgwMDA0CisJZGMubAkkNjQxNGU0ZTgsJDAwMDRlNGU4LCQwMDA2ZTRlOCwkMDAwOGU0ZTgKKwlkYy5sCSQwMDBhNTI2OCwkMDAwMDRhODAsJDY2MDYwMjI4LCQwMGZlMDAwYgorCWRjLmwJJDRlNzUwNmE4LCQwMDAwMDgwMCwkMDAwODY0MWEsJDUyYTgwMDA0CisJZGMubAkkNjQxNGU0ZTgsJDAwMDRlNGU4LCQwMDA2ZTRlOCwkMDAwOGU0ZTgKKwlkYy5sCSQwMDBhNTI2OCwkMDAwMDRhODAsJDY2MDYwMjY4LCRmMDAwMDAwYQorCWRjLmwJJDAyYThmZmZmLCRmODAwMDAwOCwkNGU3NTQ4NDEsJDBjMDEwMDA0CisJZGMubAkkNjcwMGZmODYsJDZlZWE0ZTc1LCQ0ODQxNGEwMSwkNjYwNDQ4NDEKKwlkYy5sCSQ0ZTc1NDhlNywkMzAwMDBjMDEsJDAwMDQ2NjIyLCRlOWU4MzYwMgorCWRjLmwJJDAwMDQ3NDFlLCRlNWFiMjQyOCwkMDAwNDAyODIsJDAwMDAwMDNmCisJZGMubAkkNjYyODRhYTgsJDAwMDg2NjIyLCQ0YTgwNjYxZSwkNjAyMGU5ZTgKKwlkYy5sCSQzNTQyMDAwOCwkNzQxZWU1YWIsJDI0MjgwMDA4LCQwMjgyMDAwMAorCWRjLmwJJDAxZmY2NjA2LCQ0YTgwNjYwMiwkNjAwNDA4YzMsJDAwMWQyMDAzCisJZGMubAkkNGNkZjAwMGMsJDQ4NDE0ZTc1LCQyZjAyMmYwMywkMjAyODAwMDQKKwlkYy5sCSQyMjI4MDAwOCwkZWRjMDIwMDAsJDY3MWFlNWE4LCRlOWMxMzAyMgorCWRjLmwJJDgwODNlNWE5LCQyMTQwMDAwNCwkMjE0MTAwMDgsJDIwMDIyNjFmCisJZGMubAkkMjQxZjRlNzUsJGVkYzEyMDAwLCRlNWE5MDY4MiwkMDAwMDAwMjAKKwlkYy5sCSQyMTQxMDAwNCwkNDJhODAwMDgsJDIwMDIyNjFmLCQyNDFmNGU3NQorCWRjLmwJJGVkZTgwMDAwLCQwMDA0NjYwZSwkZWRlODAwMDAsJDAwMDg2NzAwCisJZGMubAkkMDA3NDA2NDAsJDAwMjA0MjgxLCQzMjI4MDAwMCwkMDI0MTdmZmYKKwlkYy5sCSRiMDQxNmUxYywkOTI0MDMwMjgsJDAwMDAwMjQwLCQ4MDAwODI0MAorCWRjLmwJJDMxNDEwMDAwLCQ2MWZmZmZmZiwkZmY4MjEwM2MsJDAwMDA0ZTc1CisJZGMubAkkMGMwMTAwMjAsJDZlMjBlOWU4LCQwODQwMDAwNCwkMjE0MDAwMDQKKwlkYy5sCSQyMDI4MDAwOCwkZTNhODIxNDAsJDAwMDgwMjY4LCQ4MDAwMDAwMAorCWRjLmwJJDEwM2MwMDA0LCQ0ZTc1MDQ0MSwkMDAyMDIwMjgsJDAwMDhlM2E4CisJZGMubAkkMjE0MDAwMDQsJDQyYTgwMDA4LCQwMjY4ODAwMCwkMDAwMDEwM2MKKwlkYy5sCSQwMDA0NGU3NSwkMDI2ODgwMDAsJDAwMDAxMDNjLCQwMDAxNGU3NQorCWRjLmwJJDMwMjgwMDAwLCQwMjQwN2ZmZiwkMGM0MDdmZmYsJDY3NDgwODI4CisJZGMubAkkMDAwNzAwMDQsJDY3MDYxMDNjLCQwMDAwNGU3NSwkNGE0MDY2MTgKKwlkYy5sCSQ0YWE4MDAwNCwkNjYwYzRhYTgsJDAwMDg2NjA2LCQxMDNjMDAwMQorCWRjLmwJJDRlNzUxMDNjLCQwMDA0NGU3NSwkNGFhODAwMDQsJDY2MTI0YWE4CisJZGMubAkkMDAwODY2MGMsJDAyNjg4MDAwLCQwMDAwMTAzYywkMDAwMTRlNzUKKwlkYy5sCSQxMDNjMDAwNiwkNGU3NTRhYTgsJDAwMDg2NjEyLCQyMDI4MDAwNAorCWRjLmwJJDAyODA3ZmZmLCRmZmZmNjYwNiwkMTAzYzAwMDIsJDRlNzUwODI4CisJZGMubAkkMDAwNjAwMDQsJDY3MDYxMDNjLCQwMDAzNGU3NSwkMTAzYzAwMDUKKwlkYy5sCSQ0ZTc1MjAyOCwkMDAwMDIyMDAsJDAyODA3ZmYwLCQwMDAwNjcwZQorCWRjLmwJJDBjODA3ZmYwLCQwMDAwNjcyOCwkMTAzYzAwMDAsJDRlNzUwMjgxCisJZGMubAkkMDAwZmZmZmYsJDY2ZmYwMDAwLCQwMDE0NGFhOCwkMDAwNDY2ZmYKKwlkYy5sCSQwMDAwMDAwYSwkMTAzYzAwMDEsJDRlNzUxMDNjLCQwMDA0NGU3NQorCWRjLmwJJDAyODEwMDBmLCRmZmZmNjZmZiwkMDAwMDAwMTQsJDRhYTgwMDA0CisJZGMubAkkNjZmZjAwMDAsJDAwMGExMDNjLCQwMDAyNGU3NSwkMDgwMTAwMTMKKwlkYy5sCSQ2NmZmMDAwMCwkMDAwYTEwM2MsJDAwMDU0ZTc1LCQxMDNjMDAwMworCWRjLmwJJDRlNzUyMDI4LCQwMDAwMjIwMCwkMDI4MDdmODAsJDAwMDA2NzBlCisJZGMubAkkMGM4MDdmODAsJDAwMDA2NzFlLCQxMDNjMDAwMCwkNGU3NTAyODEKKwlkYy5sCSQwMDdmZmZmZiwkNjZmZjAwMDAsJDAwMGExMDNjLCQwMDAxNGU3NQorCWRjLmwJJDEwM2MwMDA0LCQ0ZTc1MDI4MSwkMDA3ZmZmZmYsJDY2ZmYwMDAwCisJZGMubAkkMDAwYTEwM2MsJDAwMDI0ZTc1LCQwODAxMDAxNiwkNjZmZjAwMDAKKwlkYy5sCSQwMDBhMTAzYywkMDAwNTRlNzUsJDEwM2MwMDAzLCQ0ZTc1MmYwMQorCWRjLmwJJDA4MjgwMDA3LCQwMDAwNTZlOCwkMDAwMjMyMjgsJDAwMDAwMjQxCisJZGMubAkkN2ZmZjkyNDAsJDMxNDEwMDAwLCQyZjA4MjAyZiwkMDAwNDAyNDAKKwlkYy5sCSQwMGMwZTg0OCwkNjFmZmZmZmYsJGZhZTIyMDU3LCQzMjJmMDAwNgorCWRjLmwJJDAyNDEwMGMwLCRlODQ5NDg0MSwkMzIyZjAwMDYsJDAyNDEwMDMwCisJZGMubAkkZTg0OTYxZmYsJGZmZmZmYzIyLCQyMDVmMDhhOCwkMDAwNzAwMDAKKwlkYy5sCSQ0YTI4MDAwMiwkNjcwYTA4ZTgsJDAwMDcwMDAwLCQ0MjI4MDAwMgorCWRjLmwJJDQyODA0YWE4LCQwMDA0NjYwYSwkNGFhODAwMDgsJDY2MDQwOGMwCisJZGMubAkkMDAwMjA4MmUsJDAwMDFmZjY2LCQ2NzA2MDhlZSwkMDAwNWZmNjcKKwlkYy5sCSQ1ODhmNGU3NSwkMmYwMTA4MjgsJDAwMDcwMDAwLCQ1NmU4MDAwMgorCWRjLmwJJDMyMjgwMDAwLCQwMjQxN2ZmZiwkOTI0MDMxNDEsJDAwMDAyZjA4CisJZGMubAkkNDI4MDYxZmYsJGZmZmZmYTY0LCQyMDU3MzIzYywkMDAwNDQ4NDEKKwlkYy5sCSQzMjJmMDAwNiwkMDI0MTAwMzAsJGU4NDk2MWZmLCRmZmZmZmJhYQorCWRjLmwJJDIwNWYwOGE4LCQwMDA3MDAwMCwkNGEyODAwMDIsJDY3MGEwOGU4CisJZGMubAkkMDAwNzAwMDAsJDQyMjgwMDAyLCQ0MjgwNGFhOCwkMDAwNDY2MGEKKwlkYy5sCSQ0YWE4MDAwOCwkNjYwNDA4YzAsJDAwMDIwODJlLCQwMDAxZmY2NgorCWRjLmwJJDY3MDYwOGVlLCQwMDA1ZmY2NywkNTg4ZjRlNzUsJDAyNDEwMDEwCisJZGMubAkkZTgwODgyMDAsJDMwMDFlMzA5LCQ2MDBlMDI0MSwkMDAxMDgyMDAKKwlkYy5sCSQ0ODQwODIwMCwkMzAwMWUzMDksJDEwM2IwMDA4LCQ0MWZiMTYyMAorCWRjLmwJJDRlNzUwMjAwLCQwMDAyMDIwMCwkMDAwMjAyMDAsJDAwMDIwMDAwCisJZGMubAkkMDAwMDBhMDgsJDBhMDgwYTA4LCQwYTA4MGEwOCwkMGEwODdmZmYKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwN2ZmZQorCWRjLmwJJDAwMDBmZmZmLCRmZmZmZmZmZiwkZmZmZjAwMDAsJDAwMDA3ZmZlCisJZGMubAkkMDAwMGZmZmYsJGZmZmZmZmZmLCRmZmZmMDAwMCwkMDAwMDdmZmYKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwN2ZmZgorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDA0MDdlCisJZGMubAkkMDAwMGZmZmYsJGZmMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDQwN2UKKwlkYy5sCSQwMDAwZmZmZiwkZmYwMDAwMDAsJDAwMDAwMDAwLCQwMDAwN2ZmZgorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDA3ZmZmCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDQzZmUKKwlkYy5sCSQwMDAwZmZmZiwkZmZmZmZmZmYsJGY4MDAwMDAwLCQwMDAwNDNmZQorCWRjLmwJJDAwMDBmZmZmLCRmZmZmZmZmZiwkZjgwMDAwMDAsJDAwMDA3ZmZmCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwZmZmZgorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDBmZmZlCisJZGMubAkkMDAwMGZmZmYsJGZmZmZmZmZmLCRmZmZmMDAwMCwkMDAwMGZmZmYKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwZmZmZQorCWRjLmwJJDAwMDBmZmZmLCRmZmZmZmZmZiwkZmZmZjAwMDAsJDAwMDBmZmZmCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMGMwN2UKKwlkYy5sCSQwMDAwZmZmZiwkZmYwMDAwMDAsJDAwMDAwMDAwLCQwMDAwZmZmZgorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDBjMDdlCisJZGMubAkkMDAwMGZmZmYsJGZmMDAwMDAwLCQwMDAwMDAwMCwkMDAwMGZmZmYKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwYzNmZQorCWRjLmwJJDAwMDBmZmZmLCRmZmZmZmZmZiwkZjgwMDAwMDAsJDAwMDBmZmZmCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMGMzZmUKKwlkYy5sCSQwMDAwZmZmZiwkZmZmZmZmZmYsJGY4MDAwMDAwLCQwMDAwZTllZQorCWRjLmwJJDEwYzNmZjQyLCQzMjdiMTIwYSwkNGVmYjk4MDYsJDRhZmMwMDA4CisJZGMubAkkMDBlMDAxZTAsJDAxNDgwNjIwLCQwMDc4MDQxYSwkMDAxMDA2MjAKKwlkYy5sCSQ0YTJlZmY0ZSwkNjY0Y2YyMjgsJGQwODAwMDAwLCRmMjAwOTAwMAorCWRjLmwJJGYyMDA3ODAwLCRmMjNjOTAwMCwkMDAwMDAwMDAsJGYyMDFhODAwCisJZGMubAkkODM2ZWZmNjYsJDEyMmVmZjQxLCQwMjAxMDAzOCwkNjcxNDIwNmUKKwlkYy5sCSQwMDBjNjFmZiwkZmZmZmNmYWEsJDRhODE2NmZmLCQwMDAwMzg1YQorCWRjLmwJJDRlNzUxMjJlLCRmZjQxMDI0MSwkMDAwNzYxZmYsJDAwMDAyYmIwCisJZGMubAkkNGU3NTIyMjgsJDAwMDAwMjgxLCQ4MDAwMDAwMCwkMDA4MTAwODAKKwlkYy5sCSQwMDAwZjIwMSwkNDQwMDYwYTQsJDRhMmVmZjRlLCQ2NjRjZjIyOAorCWRjLmwJJGQwODAwMDAwLCRmMjAwOTAwMCwkZjIwMDcwMDAsJGYyM2M5MDAwCisJZGMubAkkMDAwMDAwMDAsJGYyMDFhODAwLCQ4MzZlZmY2NiwkMTIyZWZmNDEKKwlkYy5sCSQwMjAxMDAzOCwkNjcxNDIwNmUsJDAwMGM2MWZmLCRmZmZmY2Y1OAorCWRjLmwJJDRhODE2NmZmLCQwMDAwMzgwMCwkNGU3NTEyMmUsJGZmNDEwMjQxCisJZGMubAkkMDAwNzYxZmYsJDAwMDAyYjBjLCQ0ZTc1MjIyOCwkMDAwMDAyODEKKwlkYy5sCSQ4MDAwMDAwMCwkMDA4MTAwODAsJDAwMDBmMjAxLCQ0NDAwNjBhNAorCWRjLmwJJDRhMmVmZjRlLCQ2NjRjZjIyOCwkZDA4MDAwMDAsJGYyMDA5MDAwCisJZGMubAkkZjIwMDYwMDAsJGYyM2M5MDAwLCQwMDAwMDAwMCwkZjIwMWE4MDAKKwlkYy5sCSQ4MzZlZmY2NiwkMTIyZWZmNDEsJDAyMDEwMDM4LCQ2NzE0MjA2ZQorCWRjLmwJJDAwMGM2MWZmLCRmZmZmY2YwNiwkNGE4MTY2ZmYsJDAwMDAzN2E2CisJZGMubAkkNGU3NTEyMmUsJGZmNDEwMjQxLCQwMDA3NjFmZiwkMDAwMDJhNjgKKwlkYy5sCSQ0ZTc1MjIyOCwkMDAwMDAyODEsJDgwMDAwMDAwLCQwMDgxMDA4MAorCWRjLmwJJDAwMDBmMjAxLCQ0NDAwNjBhNCwkM2Q2ODAwMDAsJGZmODQ0MjZlCisJZGMubAkkZmY4NjJkNjgsJDAwMDRmZjg4LCQyZDY4MDAwOCwkZmY4Y2YyMjgKKwlkYy5sCSRkMDgwMDAwMCwkNjFmZmZmZmYsJGU4M2UyMjQ4LCQ0MWVlZmY4NAorCWRjLmwJJDcwMGMwYzJlLCQwMDA4ZmY0YSwkNjcyNjYxZmYsJGZmZmZjZGVlCisJZGMubAkkNGE4MTY2MDAsJDAwNTI0YTJlLCRmZjRlNjYwMiwkNGU3NTA4ZWUKKwlkYy5sCSQwMDAzZmY2NiwkMTAyZWZmNjIsJDAyMDAwMDBhLCQ2NjE2NGU3NQorCWRjLmwJJDYxZmZmZmZmLCRkYzRhNGE4MSwkNjYwMDAwMmMsJDRhMmVmZjRlCisJZGMubAkkNjZkYzRlNzUsJDQxZWVmZjg0LCQ2MWZmZmZmZiwkZjkwZTQ0NDAKKwlkYy5sCSQwMjQwN2ZmZiwkMDI2ZTgwMDAsJGZmODQ4MTZlLCRmZjg0ZjIyZQorCWRjLmwJJGQwNDBmZjg0LCQ0ZTc1MmNhZSwkZmZkNDYwZmYsJDAwMDAzNzAyCisJZGMubAkkMDIwMDAwMzAsJDAwMDAwMDQwLCQyZDQwZmY1YywkMzAyODAwMDAKKwlkYy5sCSQwMjQwN2ZmZiwkMGM0MDQwN2UsJDZlMDAwMGU2LCQ2NzAwMDE1MgorCWRjLmwJJDBjNDAzZjgxLCQ2ZDAwMDA1OCwkZjIyOGQwODAsJDAwMDBmMjJlCisJZGMubAkkOTAwMGZmNWMsJGYyM2M4ODAwLCQwMDAwMDAwMCwkZjIwMDY0MDAKKwlkYy5sCSRmMjNjOTAwMCwkMDAwMDAwMDAsJGYyMDFhODAwLCQ4MzZlZmY2NgorCWRjLmwJJDEyMmVmZjQxLCQwMjAxMDAzOCwkNjcxNDIwNmUsJDAwMGM2MWZmCisJZGMubAkkZmZmZmNkZGEsJDRhODE2NmZmLCQwMDAwMzY3YSwkNGU3NTEyMmUKKwlkYy5sCSRmZjQxMDI0MSwkMDAwNzYxZmYsJDAwMDAyOTNjLCQ0ZTc1MDhlZQorCWRjLmwJJDAwMDNmZjY2LCQzZDY4MDAwMCwkZmY4NDJkNjgsJDAwMDRmZjg4CisJZGMubAkkMmQ2ODAwMDgsJGZmOGMyZjA4LCQ0MjgwMGMyZSwkMDAwNGZmNGUKKwlkYy5sCSQ2NjBhNDFlZSwkZmY4NDYxZmYsJGZmZmZmODQwLCQ0MWVlZmY4NAorCWRjLmwJJDIyMmVmZjVjLCQ2MWZmZmZmZiwkZmE1ODQxZWUsJGZmODQ2MWZmCisJZGMubAkkMDAwMDAzNGMsJDEyMmVmZjQxLCQwMjAxMDAzOCwkNjcxNDIwNmUKKwlkYy5sCSQwMDBjNjFmZiwkZmZmZmNkNjYsJDRhODE2NmZmLCQwMDAwMzYwNgorCWRjLmwJJDYwMGUxMjJlLCRmZjQxMDI0MSwkMDAwNzYxZmYsJDAwMDAyOGM4CisJZGMubAkkMTIyZWZmNjIsJDAyMDEwMDBhLCQ2NjAwMDBiOCwkNTg4ZjRlNzUKKwlkYy5sCSQ0YTI4MDAwNywkNjYwZTRhYTgsJDAwMDg2NjA4LCQwMDZlMTA0OAorCWRjLmwJJGZmNjY2MDA2LCQwMDZlMTI0OCwkZmY2NjJmMDgsJDRhMjgwMDAwCisJZGMubAkkNWJjMTIwMmUsJGZmNWM2MWZmLCRmZmZmZmFlNCwkZjIxMGQwODAKKwlkYy5sCSRmMjAwNjQwMCwkMTIyZWZmNDEsJDAyMDEwMDM4LCQ2NzE0MjA2ZQorCWRjLmwJJDAwMGM2MWZmLCRmZmZmY2NmNiwkNGE4MTY2ZmYsJDAwMDAzNTk2CisJZGMubAkkNjAwZTEyMmUsJGZmNDEwMjQxLCQwMDA3NjFmZiwkMDAwMDI4NTgKKwlkYy5sCSQxMjJlZmY2MiwkMDIwMTAwMGEsJDY2MDAwMDdjLCQ1ODhmNGU3NQorCWRjLmwJJDMyMjgwMDAwLCQwMjQxODAwMCwkMDA0MTNmZmYsJDNkNDFmZjg0CisJZGMubAkkMmQ2ODAwMDQsJGZmODgyZDY4LCQwMDA4ZmY4YywkZjIyZTkwMDAKKwlkYy5sCSRmZjVjZjIyZSwkNDgwMGZmODQsJGYyM2M5MDAwLCQwMDAwMDAwMAorCWRjLmwJJGYyMDAwMDE4LCRmMjNjNTgzOCwkMDAwMmYyOTQsJGZlN2M2MDAwCisJZGMubAkkZmY1MDIwNWYsJDNkNjgwMDAwLCRmZjg0MmQ2OCwkMDAwNGZmODgKKwlkYy5sCSQyZDY4MDAwOCwkZmY4YzBjMmUsJDAwMDRmZjRlLCQ2NjJjNDFlZQorCWRjLmwJJGZmODQ2MWZmLCRmZmZmZjcxNCwkNDQ4MDAyNDAsJDdmZmZlZmVlCisJZGMubAkkMDA0ZmZmODQsJDYwMTQyMDVmLCQzZDY4MDAwMCwkZmY4NDJkNjgKKwlkYy5sCSQwMDA0ZmY4OCwkMmQ2ODAwMDgsJGZmOGMwOGFlLCQwMDA3ZmY4NAorCWRjLmwJJDU2ZWVmZjg2LCQ0MWVlZmY4NCwkMTIyZWZmNWYsJGU4MDkwMjQxCisJZGMubAkkMDAwYzQ4NDEsJDEyMmVmZjVmLCRlODA5MDI0MSwkMDAwMzQyODAKKwlkYy5sCSQ2MWZmZmZmZiwkZjU1NDRhMmUsJGZmODY2NzA2LCQwOGVlMDAwNworCWRjLmwJJGZmODRmMjJlLCRkMDQwZmY4NCwkNGU3NTAyMDAsJDAwMzAwMDAwCisJZGMubAkkMDA4MDJkNDAsJGZmNWMzMDI4LCQwMDAwMDI0MCwkN2ZmZjBjNDAKKwlkYy5sCSQ0M2ZlNmUwMCwkMDBjODY3MDAsJDAxMjAwYzQwLCQzYzAxNmQwMAorCWRjLmwJJDAwNDZmMjI4LCRkMDgwMDAwMCwkZjIyZTkwMDAsJGZmNWNmMjNjCisJZGMubAkkODgwMDAwMDAsJDAwMDBmMjJlLCQ3NDAwZmY1NCwkZjIzYzkwMDAKKwlkYy5sCSQwMDAwMDAwMCwkZjIwMGE4MDAsJDgxNmVmZjY2LCQyMjZlMDAwYworCWRjLmwJJDQxZWVmZjU0LCQ3MDA4NjFmZiwkZmZmZmNhZjIsJDRhODE2NmZmCisJZGMubAkkMDAwMDM0NTAsJDRlNzUwOGVlLCQwMDAzZmY2NiwkM2Q2ODAwMDAKKwlkYy5sCSRmZjg0MmQ2OCwkMDAwNGZmODgsJDJkNjgwMDA4LCRmZjhjMmYwOAorCWRjLmwJJDQyODAwYzJlLCQwMDA0ZmY0ZSwkNjYwYTQxZWUsJGZmODQ2MWZmCisJZGMubAkkZmZmZmY2MTgsJDQxZWVmZjg0LCQyMjJlZmY1YywkNjFmZmZmZmYKKwlkYy5sCSRmODMwNDFlZSwkZmY4NDYxZmYsJDAwMDAwMGQyLCQyZDQwZmY1NAorCWRjLmwJJDJkNDFmZjU4LCQyMjZlMDAwYywkNDFlZWZmNTQsJDcwMDg2MWZmCisJZGMubAkkZmZmZmNhOGEsJDRhODE2NmZmLCQwMDAwMzNlOCwkMTIyZWZmNjIKKwlkYy5sCSQwMjAxMDAwYSwkNjYwMGZlOWMsJDU4OGY0ZTc1LCQzMDI4MDAwYQorCWRjLmwJJDAyNDAwN2ZmLCQ2NjA4MDA2ZSwkMTA0OGZmNjYsJDYwMDYwMDZlCisJZGMubAkkMTI0OGZmNjYsJDJmMDg0YTI4LCQwMDAwNWJjMSwkMjAyZWZmNWMKKwlkYy5sCSQ2MWZmZmZmZiwkZjhjYWYyMTAsJGQwODBmMjJlLCQ3NDAwZmY1NAorCWRjLmwJJDIyNmUwMDBjLCQ0MWVlZmY1NCwkNzAwODYxZmYsJGZmZmZjYTJlCisJZGMubAkkNGE4MTY2ZmYsJDAwMDAzMzhjLCQxMjJlZmY2MiwkMDIwMTAwMGEKKwlkYy5sCSQ2NjAwZmU3NCwkNTg4ZjRlNzUsJDMyMjgwMDAwLCQwMjQxODAwMAorCWRjLmwJJDAwNDEzZmZmLCQzZDQxZmY4NCwkMmQ2ODAwMDQsJGZmODgyZDY4CisJZGMubAkkMDAwOGZmOGMsJGYyMmU5MDAwLCRmZjVjZjIyZSwkNDgwMGZmODQKKwlkYy5sCSRmMjNjOTAwMCwkMDAwMDAwMDAsJGYyMDAwMDE4LCRmMjNjNTgzOAorCWRjLmwJJDAwMDJmMjk0LCRmZWFlNjAwMCwkZmY2NDQyODAsJDMwMjgwMDAwCisJZGMubAkkMDQ0MDNmZmYsJDA2NDAwM2ZmLCQ0YTI4MDAwNCwkNmIwMjUzNDAKKwlkYy5sCSQ0ODQwZTk4OCwkNGEyODAwMDAsJDZhMDQwOGMwLCQwMDFmMjIyOAorCWRjLmwJJDAwMDRlOWMxLCQxMDU0ODA4MSwkMmQ0MGZmNTQsJDIyMjgwMDA0CisJZGMubAkkNzAxNWUxYTksJDJkNDFmZjU4LCQyMjI4MDAwOCwkZTljMTAwMTUKKwlkYy5sCSQyMjJlZmY1OCwkODI4MDIwMmUsJGZmNTQ0ZTc1LCQ0MjgwMzAyOAorCWRjLmwJJDAwMDAwNDQwLCQzZmZmMDY0MCwkMDA3ZjRhMjgsJDAwMDQ2YjAyCisJZGMubAkkNTM0MDQ4NDAsJGVmODg0YTI4LCQwMDAwNmEwNCwkMDhjMDAwMWYKKwlkYy5sCSQyMjI4MDAwNCwkMDI4MTdmZmYsJGZmMDBlMDg5LCQ4MDgxNGU3NQorCWRjLmwJJDYxZmZmZmZmLCRlMzgyMmYwOCwkMTAyZWZmNGUsJDY2MDAwMDgyCisJZGMubAkkMDgyZTAwMDQsJGZmNDI2NzEyLCQxMjJlZmY0MywkZTgwOTAyNDEKKwlkYy5sCSQwMDA3NjFmZiwkMDAwMDI0ZGUsJDYwMDQxMDJlLCRmZjQzZWJjMAorCWRjLmwJJDA2NDcyZjAwLCQ0MWVlZmY2YywkNjFmZjAwMDAsJDJiMjAwMmFlCisJZGMubAkkY2ZmZmYwMGYsJGZmODQyMDFmLCQ0YTJlZmY4NywkNjYxNjRhYWUKKwlkYy5sCSRmZjg4NjYxMCwkNGFhZWZmOGMsJDY2MGE0YTgwLCQ2NjA2MDI2ZQorCWRjLmwJJGYwMDBmZjg0LCQ0MWVlZmY4NCwkMjI1ZjcwMGMsJDBjMmUwMDA4CisJZGMubAkkZmY0YTY3MGUsJDYxZmZmZmZmLCRjOGQ0NGE4MSwkNjYwMGZiMzgKKwlkYy5sCSQ0ZTc1NjFmZiwkZmZmZmQ3NDgsJDRhODE2NjAwLCRmYjJhNGU3NQorCWRjLmwJJDBjMDAwMDA0LCQ2NzAwZmY3YSwkNDFlZWZmNmMsJDQyNmVmZjZlCisJZGMubAkkMGMwMDAwMDUsJDY3MDI2MGMwLCQwMDZlNDA4MCwkZmY2NjA4ZWUKKwlkYy5sCSQwMDA2ZmY3MCwkNjBiMjUxZmMsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJGZmZmZjMDAxLCRmZmZmZmY4MSwkZmZmZmZjMDEsJDAwMDA0MDAwCisJZGMubAkkMDAwMDAwN2YsJDAwMDAwM2ZmLCQwMjAwMDAzMCwkMDAwMDAwNDAKKwlkYy5sCSQ2MDA4MDIwMCwkMDAzMDAwMDAsJDAwODAyZDQwLCRmZjVjNDI0MQorCWRjLmwJJDEyMmVmZjRmLCRlNzA5ODIyZSwkZmY0ZTY2MDAsJDAyZTQzZDY5CisJZGMubAkkMDAwMGZmOTAsJDJkNjkwMDA0LCRmZjk0MmQ2OSwkMDAwOGZmOTgKKwlkYy5sCSQzZDY4MDAwMCwkZmY4NDJkNjgsJDAwMDRmZjg4LCQyZDY4MDAwOAorCWRjLmwJJGZmOGM2MWZmLCRmZmZmZWYyNCwkMmYwMDYxZmYsJGZmZmZlZmM4CisJZGMubAkkZDE5NzMyMmUsJGZmNWVlYzA5LCQyMDFmYjBiYiwkMTQ4NDY3MDAKKwlkYy5sCSQwMTFlNmQwMCwkMDA2MmIwYmIsJDE0ODQ2NzAwLCQwMjFhNmUwMAorCWRjLmwJJDAxNGFmMjJlLCRkMDgwZmY5MCwkZjIyZTkwMDAsJGZmNWNmMjNjCisJZGMubAkkODgwMDAwMDAsJDAwMDBmMjJlLCQ0ODIzZmY4NCwkZjIwMWE4MDAKKwlkYy5sCSRmMjNjOTAwMCwkMDAwMDAwMDAsJDgzYWVmZjY0LCRmMjJlZjA4MAorCWRjLmwJJGZmODQyZjAyLCQzMjJlZmY4NCwkMjQwMTAyODEsJDAwMDA3ZmZmCisJZGMubAkkMDI0MjgwMDAsJDkyODA4MjQyLCQzZDQxZmY4NCwkMjQxZmYyMmUKKwlkYy5sCSRkMDgwZmY4NCwkNGU3NWYyMmUsJGQwODBmZjkwLCRmMjJlOTAwMAorCWRjLmwJJGZmNWNmMjNjLCQ4ODAwMDAwMCwkMDAwMGYyMmUsJDQ4MjNmZjg0CisJZGMubAkkZjIwMWE4MDAsJGYyM2M5MDAwLCQwMDAwMDAwMCwkODNhZWZmNjQKKwlkYy5sCSQwMGFlMDAwMCwkMTA0OGZmNjQsJDEyMmVmZjYyLCQwMjAxMDAxMworCWRjLmwJJDY2MWMwODJlLCQwMDAzZmY2NCwkNTZjMTIwMmUsJGZmNWM2MWZmCisJZGMubAkkZmZmZmY1ZGMsJDgxMmVmZjY0LCRmMjEwZDA4MCwkNGU3NTIyMmUKKwlkYy5sCSRmZjVjMDIwMSwkMDBjMDY2MzQsJGYyMmVmMDgwLCRmZjg0MmYwMgorCWRjLmwJJDMyMmVmZjg0LCQzNDAxMDI4MSwkMDAwMDdmZmYsJDkyODAwNDgxCisJZGMubAkkMDAwMDYwMDAsJDAyNDE3ZmZmLCQwMjQyODAwMCwkODI0MjNkNDEKKwlkYy5sCSRmZjg0MjQxZiwkZjIyZWQwNDAsJGZmODQ2MGE2LCRmMjJlZDA4MAorCWRjLmwJJGZmOTAyMjJlLCRmZjVjMDIwMSwkMDAzMGYyMDEsJDkwMDBmMjJlCisJZGMubAkkNDgyM2ZmODQsJGYyM2M5MDAwLCQwMDAwMDAwMCwkNjBhYWYyMmUKKwlkYy5sCSRkMDgwZmY5MCwkZjIyZTkwMDAsJGZmNWNmMjNjLCQ4ODAwMDAwMAorCWRjLmwJJDAwMDBmMjJlLCQ0ODIzZmY4NCwkZjIwMWE4MDAsJGYyM2M5MDAwCisJZGMubAkkMDAwMDAwMDAsJDgzYWVmZjY0LCRmMjAwMDA5OCwkZjIzYzU4YjgKKwlkYy5sCSQwMDAyZjI5MywkZmYzYzYwMDAsJGZlZTQwOGVlLCQwMDAzZmY2NgorCWRjLmwJJGYyMmVkMDgwLCRmZjkwZjIzYywkOTAwMDAwMDAsJDAwMTBmMjNjCisJZGMubAkkODgwMDAwMDAsJDAwMDBmMjJlLCQ0ODIzZmY4NCwkZjIwMWE4MDAKKwlkYy5sCSRmMjNjOTAwMCwkMDAwMDAwMDAsJDgzYWVmZjY0LCQxMjJlZmY2MgorCWRjLmwJJDAyMDEwMDBiLCQ2NjIwZjIyZSwkZjA4MGZmODQsJDQxZWVmZjg0CisJZGMubAkkMjIyZWZmNWMsJDYxZmZmZmZmLCRmM2U4ODEyZSwkZmY2NGYyMmUKKwlkYy5sCSRkMDgwZmY4NCwkNGU3NWYyMmUsJGQwNDBmZjkwLCQyMjJlZmY1YworCWRjLmwJJDAyMDEwMGMwLCQ2NjUyZjIyZSwkOTAwMGZmNWMsJGYyM2M4ODAwCisJZGMubAkkMDAwMDAwMDAsJGYyMmU0OGEzLCRmZjg0ZjIzYywkOTAwMDAwMDAKKwlkYy5sCSQwMDAwZjIyZSwkZjA0MGZmODQsJDJmMDIzMjJlLCRmZjg0MjQwMQorCWRjLmwJJDAyODEwMDAwLCQ3ZmZmMDI0MiwkODAwMDkyODAsJDA2ODEwMDAwCisJZGMubAkkNjAwMDAyNDEsJDdmZmY4MjQyLCQzZDQxZmY4NCwkMjQxZmYyMmUKKwlkYy5sCSRkMDQwZmY4NCwkNjAwMGZmODAsJDIyMmVmZjVjLCQwMjAxMDAzMAorCWRjLmwJJGYyMDE5MDAwLCQ2MGE2ZjIyZSwkZDA4MGZmOTAsJGYyMmU5MDAwCisJZGMubAkkZmY1Y2YyM2MsJDg4MDAwMDAwLCQwMDAwZjIyZSwkNDgyM2ZmODQKKwlkYy5sCSRmMjAxYTgwMCwkZjIzYzkwMDAsJDAwMDAwMDAwLCQ4M2FlZmY2NAorCWRjLmwJJGYyMDAwMDk4LCRmMjNjNThiOCwkMDAwMmYyOTIsJGZkZTBmMjk0CisJZGMubAkkZmVmYWYyMmUsJGQwNDBmZjkwLCQyMjJlZmY1YywkMDIwMTAwYzAKKwlkYy5sCSQwMDAxMDAxMCwkZjIwMTkwMDAsJGYyM2M4ODAwLCQwMDAwMDAwMAorCWRjLmwJJGYyMmU0OGEzLCRmZjg0ZjIzYywkOTAwMDAwMDAsJDAwMDBmMjAwCisJZGMubAkkMDQ5OGYyM2MsJDU4YjgwMDAyLCRmMjkzZmRhMiwkNjAwMGZlYmMKKwlkYy5sCSQzMjNiMTIwYSwkNGVmYjEwMDYsJDRhZmMwMDMwLCRmZDEyMDA3MgorCWRjLmwJJDAwY2MwMDZjLCRmZDEyMDA2NiwkMDAwMDAwMDAsJDAwNzIwMDcyCisJZGMubAkkMDA2MDAwNmMsJDAwNzIwMDY2LCQwMDAwMDAwMCwkMDA5ZTAwNjAKKwlkYy5sCSQwMDllMDA2YywkMDA5ZTAwNjYsJDAwMDAwMDAwLCQwMDZjMDA2YworCWRjLmwJJDAwNmMwMDZjLCQwMDZjMDA2NiwkMDAwMDAwMDAsJGZkMTIwMDcyCisJZGMubAkkMDBjYzAwNmMsJGZkMTIwMDY2LCQwMDAwMDAwMCwkMDA2NjAwNjYKKwlkYy5sCSQwMDY2MDA2NiwkMDA2NjAwNjYsJDAwMDAwMDAwLCQ2MGZmZmZmZgorCWRjLmwJJGVkNjQ2MGZmLCRmZmZmZWNkYSwkNjBmZmZmZmYsJGVjZDQxMDI4CisJZGMubAkkMDAwMDEyMjksJDAwMDBiMTAxLCQ2YTEwZjIzYywkNDQwMDgwMDAKKwlkYy5sCSQwMDAwMWQ3YywkMDAwY2ZmNjQsJDRlNzVmMjNjLCQ0NDAwMDAwMAorCWRjLmwJJDAwMDAxZDdjLCQwMDA0ZmY2NCwkNGU3NWYyMjksJGQwODAwMDAwCisJZGMubAkkMTAyODAwMDAsJDEyMjkwMDAwLCRiMTAxNmExMCwkZjIwMDAwMTgKKwlkYy5sCSRmMjAwMDAxYSwkMWQ3YzAwMGEsJGZmNjQ0ZTc1LCRmMjAwMDAxOAorCWRjLmwJJDFkN2MwMDAyLCRmZjY0NGU3NSwkZjIyOGQwODAsJDAwMDAxMDI4CisJZGMubAkkMDAwMDEyMjksJDAwMDBiMTAxLCQ2YWUyNjBkMCwkMDIwMDAwMzAKKwlkYy5sCSQwMDAwMDA0MCwkNjAwODAyMDAsJDAwMzAwMDAwLCQwMDgwMmQ0MAorCWRjLmwJJGZmNWMxMjJlLCRmZjRlNjYwMCwkMDI2MjAyMDAsJDAwYzA2NjAwCisJZGMubAkkMDA3YzRhMjgsJDAwMDA2YTA2LCQwOGVlMDAwMywkZmY2NGYyMjgKKwlkYy5sCSRkMDgwMDAwMCwkNGU3NTAyMDAsJDAwYzA2NjAwLCQwMDYwMDhlZQorCWRjLmwJJDAwMDNmZjY2LCQ0YTI4MDAwMCwkNmEwNjA4ZWUsJDAwMDNmZjY0CisJZGMubAkkZjIyOGQwODAsJDAwMDAwODJlLCQwMDAzZmY2MiwkNjYwMjRlNzUKKwlkYy5sCSQzZDY4MDAwMCwkZmY4NDJkNjgsJDAwMDRmZjg4LCQyZDY4MDAwOAorCWRjLmwJJGZmOGM0MWVlLCRmZjg0NjFmZiwkZmZmZmVmNjAsJDQ0NDAwNjQwCisJZGMubAkkNjAwMDMyMmUsJGZmODQwMjQxLCQ4MDAwMDI0MCwkN2ZmZjgwNDEKKwlkYy5sCSQzZDQwZmY4NCwkZjIyZWQwNDAsJGZmODQ0ZTc1LCQwYzAwMDA0MAorCWRjLmwJJDY2N2UzZDY4LCQwMDAwZmY4NCwkMmQ2ODAwMDQsJGZmODgyZDY4CisJZGMubAkkMDAwOGZmOGMsJDYxZmZmZmZmLCRlYWMyMGM4MCwkMDAwMDAwN2YKKwlkYy5sCSQ2YzAwMDA5MiwkMGM4MGZmZmYsJGZmODE2NzAwLCQwMTc4NmQwMAorCWRjLmwJJDAwZjRmMjNjLCQ4ODAwMDAwMCwkMDAwMGYyMmUsJDkwMDBmZjVjCisJZGMubAkkZjIyZTQ4MDAsJGZmODRmMjAxLCRhODAwZjIzYywkOTAwMDAwMDAKKwlkYy5sCSQwMDAwODNhZSwkZmY2NDJmMDIsJGYyMmVmMDgwLCRmZjg0MzIyZQorCWRjLmwJJGZmODQzNDAxLCQwMjgxMDAwMCwkN2ZmZjkyODAsJDAyNDI4MDAwCisJZGMubAkkODQ0MTNkNDIsJGZmODQyNDFmLCRmMjJlZDA4MCwkZmY4NDRlNzUKKwlkYy5sCSQzZDY4MDAwMCwkZmY4NDJkNjgsJDAwMDRmZjg4LCQyZDY4MDAwOAorCWRjLmwJJGZmOGM2MWZmLCRmZmZmZWE0NCwkMGM4MDAwMDAsJDAzZmY2YzAwCisJZGMubAkkMDAxNDBjODAsJGZmZmZmYzAxLCQ2NzAwMDBmYSwkNmQwMDAwNzYKKwlkYy5sCSQ2MDAwZmY4MCwkMDhlZTAwMDMsJGZmNjY0YTJlLCRmZjg0NmEwNgorCWRjLmwJJDA4ZWUwMDAzLCRmZjY0MTIyZSwkZmY2MjAyMDEsJDAwMGI2NjFhCisJZGMubAkkNDFlZWZmODQsJDIyMmVmZjVjLCQ2MWZmZmZmZiwkZjA4NDgxMmUKKwlkYy5sCSRmZjY0ZjIyZSwkZDA4MGZmODQsJDRlNzUyZDZlLCRmZjg4ZmY5NAorCWRjLmwJJDJkNmVmZjhjLCRmZjk4MzIyZSwkZmY4NDJmMDIsJDM0MDEwMjgxCisJZGMubAkkMDAwMDdmZmYsJDkyODAwMjQyLCQ4MDAwMDY4MSwkMDAwMDYwMDAKKwlkYy5sCSQwMjQxN2ZmZiwkODQ0MTNkNDIsJGZmOTBmMjJlLCRkMDQwZmY5MAorCWRjLmwJJDI0MWY2MGFjLCRmMjNjODgwMCwkMDAwMDAwMDAsJGYyMmU5MDAwCisJZGMubAkkZmY1Y2YyMmUsJDQ4MDBmZjg0LCRmMjNjOTAwMCwkMDAwMDAwMDAKKwlkYy5sCSRmMjAxYTgwMCwkODNhZWZmNjQsJDAwYWUwMDAwLCQxMDQ4ZmY2NAorCWRjLmwJJDEyMmVmZjYyLCQwMjAxMDAxMywkNjYxYzA4MmUsJDAwMDNmZjY0CisJZGMubAkkNTZjMTIwMmUsJGZmNWM2MWZmLCRmZmZmZjBmNCwkODEyZWZmNjQKKwlkYy5sCSRmMjEwZDA4MCwkNGU3NTJmMDIsJDMyMmVmZjg0LCQyNDAxMDI4MQorCWRjLmwJJDAwMDA3ZmZmLCQwMjQyODAwMCwkOTI4MDA0ODEsJDAwMDA2MDAwCisJZGMubAkkMDI0MTdmZmYsJDgyNDIzZDQxLCRmZjg0MjQxZiwkZjIyZWQwNDAKKwlkYy5sCSRmZjg0NjBiNiwkZjIzYzg4MDAsJDAwMDAwMDAwLCRmMjJlOTAwMAorCWRjLmwJJGZmNWNmMjJlLCQ0ODAwZmY4NCwkZjIwMWE4MDAsJGYyM2M5MDAwCisJZGMubAkkMDAwMDAwMDAsJDgzYWVmZjY0LCRmMjAwMDA5OCwkZjIzYzU4YjgKKwlkYy5sCSQwMDAyZjI5MywkZmY3NDYwMDAsJGZlN2UwYzAxLCQwMDA0NjcwMAorCWRjLmwJJGZkYjYwYzAxLCQwMDA1NjdmZiwkZmZmZmU5ZWUsJDBjMDEwMDAzCisJZGMubAkkNjdmZmZmZmYsJGU5ZjhmMjI4LCQ0ODAwMDAwMCwkZjIwMGE4MDAKKwlkYy5sCSRlMTk4MWQ0MCwkZmY2NDRlNzUsJDUxZmM1MWZjLCQ1MWZjNTFmYworCWRjLmwJJDAwMDAzZmZmLCQwMDAwMDA3ZSwkMDAwMDAzZmUsJGZmZmZjMDAxCisJZGMubAkkZmZmZmZmODEsJGZmZmZmYzAxLCQwMjAwMDAzMCwkMDAwMDAwNDAKKwlkYy5sCSQ2MDA4MDIwMCwkMDAzMDAwMDAsJDAwODAyZDQwLCRmZjVjNDI0MQorCWRjLmwJJDEyMmVmZjRmLCRlNzA5ODIyZSwkZmY0ZTY2MDAsJDAyZDYzZDY5CisJZGMubAkkMDAwMGZmOTAsJDJkNjkwMDA0LCRmZjk0MmQ2OSwkMDAwOGZmOTgKKwlkYy5sCSQzZDY4MDAwMCwkZmY4NDJkNjgsJDAwMDRmZjg4LCQyZDY4MDAwOAorCWRjLmwJJGZmOGM2MWZmLCRmZmZmZTg2NCwkMmYwMDYxZmYsJGZmZmZlOTA4CisJZGMubAkkNDQ5N2QxOTcsJDMyMmVmZjVlLCRlYzA5MjAxZiwkYjBiYjE0OGUKKwlkYy5sCSQ2ZjAwMDA3NCwkYjBiYjE1MjAsJGZmN2E2NzAwLCQwMjBjNmUwMAorCWRjLmwJJDAxM2NmMjJlLCRkMDgwZmY5MCwkZjIyZTkwMDAsJGZmNWNmMjNjCisJZGMubAkkODgwMDAwMDAsJDAwMDBmMjJlLCQ0ODIwZmY4NCwkZjIwMWE4MDAKKwlkYy5sCSRmMjNjOTAwMCwkMDAwMDAwMDAsJDgzYWVmZjY0LCRmMjJlZjA4MAorCWRjLmwJJGZmODQyZjAyLCQzMjJlZmY4NCwkMjQwMTAyODEsJDAwMDA3ZmZmCisJZGMubAkkMDI0MjgwMDAsJDkyODA4MjQyLCQzZDQxZmY4NCwkMjQxZmYyMmUKKwlkYy5sCSRkMDgwZmY4NCwkNGU3NTAwMDAsJDdmZmYwMDAwLCQ0MDdmMDAwMAorCWRjLmwJJDQzZmYyMDFmLCQ2MGM2MmYwMCwkZjIyZWQwODAsJGZmOTBmMjJlCisJZGMubAkkOTAwMGZmNWMsJGYyM2M4ODAwLCQwMDAwMDAwMCwkZjIyZTQ4MjAKKwlkYy5sCSRmZjg0ZjIwMCwkYTgwMGYyM2MsJDkwMDAwMDAwLCQwMDAwODFhZQorCWRjLmwJJGZmNjRmMjI3LCRlMDAxMzAxNywkZGZmYzAwMDAsJDAwMGMwMjgwCisJZGMubAkkMDAwMDdmZmYsJDkwOTdiMGJiLCQxNGFlNmRiNiwkMjAxZjAwYWUKKwlkYy5sCSQwMDAwMTA0OCwkZmY2NDEyMmUsJGZmNjIwMjAxLCQwMDEzNjYxYworCWRjLmwJJDA4MmUwMDAzLCRmZjY0NTZjMSwkMjAyZWZmNWMsJDYxZmZmZmZmCisJZGMubAkkZWVlZTgxMmUsJGZmNjRmMjEwLCRkMDgwNGU3NSwkMjIyZWZmNWMKKwlkYy5sCSQwMjAxMDBjMCwkNjYzNGYyMmUsJGYwODBmZjg0LCQyZjAyMzIyZQorCWRjLmwJJGZmODQzNDAxLCQwMjgxMDAwMCwkN2ZmZjkyODAsJDA0ODEwMDAwCisJZGMubAkkNjAwMDAyNDEsJDdmZmYwMjQyLCQ4MDAwODI0MiwkM2Q0MWZmODQKKwlkYy5sCSQyNDFmZjIyZSwkZDA0MGZmODQsJDYwYTZmMjJlLCRkMDgwZmY5MAorCWRjLmwJJDIyMmVmZjVjLCQwMjAxMDAzMCwkZjIwMTkwMDAsJGYyMmU0ODIwCisJZGMubAkkZmY4NGYyM2MsJDkwMDAwMDAwLCQwMDAwNjBhYSwkMDhlZTAwMDMKKwlkYy5sCSRmZjY2ZjIyZSwkZDA4MGZmOTAsJGYyM2M5MDAwLCQwMDAwMDAxMAorCWRjLmwJJGYyM2M4ODAwLCQwMDAwMDAwMCwkZjIyZTQ4MjAsJGZmODRmMjAxCisJZGMubAkkYTgwMGYyM2MsJDkwMDAwMDAwLCQwMDAwODNhZSwkZmY2NDEyMmUKKwlkYy5sCSRmZjYyMDIwMSwkMDAwYjY2MjAsJGYyMmVmMDgwLCRmZjg0NDFlZQorCWRjLmwJJGZmODQyMjJlLCRmZjVjNjFmZiwkZmZmZmVkMzYsJDgxMmVmZjY0CisJZGMubAkkZjIyZWQwODAsJGZmODQ0ZTc1LCRmMjJlZDA0MCwkZmY5MDIyMmUKKwlkYy5sCSRmZjVjMDIwMSwkMDBjMDY2NTIsJGYyMmU5MDAwLCRmZjVjZjIzYworCWRjLmwJJDg4MDAwMDAwLCQwMDAwZjIyZSwkNDhhMGZmODQsJGYyM2M5MDAwCisJZGMubAkkMDAwMDAwMDAsJGYyMmVmMDQwLCRmZjg0MmYwMiwkMzIyZWZmODQKKwlkYy5sCSQyNDAxMDI4MSwkMDAwMDdmZmYsJDAyNDI4MDAwLCQ5MjgwMDY4MQorCWRjLmwJJDAwMDA2MDAwLCQwMjQxN2ZmZiwkODI0MjNkNDEsJGZmODQyNDFmCisJZGMubAkkZjIyZWQwNDAsJGZmODQ2MDAwLCRmZjgwMjIyZSwkZmY1YzAyMDEKKwlkYy5sCSQwMDMwZjIwMSwkOTAwMDYwYTYsJGYyMmVkMDgwLCRmZjkwZjIyZQorCWRjLmwJJDkwMDBmZjVjLCRmMjNjODgwMCwkMDAwMDAwMDAsJGYyMmU0ODIwCisJZGMubAkkZmY4NGYyMDEsJGE4MDBmMjNjLCQ5MDAwMDAwMCwkMDAwMDgzYWUKKwlkYy5sCSRmZjY0ZjIwMCwkMDA5OGYyM2MsJDU4YjgwMDAxLCRmMjkyZmRlZQorCWRjLmwJJGYyOTRmZWZhLCRmMjJlZDA0MCwkZmY5MDIyMmUsJGZmNWMwMjAxCisJZGMubAkkMDBjMDAwMDEsJDAwMTBmMjAxLCQ5MDAwZjIzYywkODgwMDAwMDAKKwlkYy5sCSQwMDAwZjIyZSwkNDhhMGZmODQsJGYyM2M5MDAwLCQwMDAwMDAwMAorCWRjLmwJJGYyMDAwNDk4LCRmMjNjNThiOCwkMDAwMWYyOTMsJGZkYjA2MDAwCisJZGMubAkkZmViYzMyM2IsJDEyMGE0ZWZiLCQxMDA2NGFmYywkMDAzMGZkMjAKKwlkYy5sCSQwMDllMDA3MiwkMDA2MGZkMjAsJDAwNjYwMDAwLCQwMDAwMDA3MgorCWRjLmwJJDAwNmMwMDcyLCQwMDYwMDA3MiwkMDA2NjAwMDAsJDAwMDAwMGQwCisJZGMubAkkMDBkMDAwNmMsJDAwNjAwMGQwLCQwMDY2MDAwMCwkMDAwMDAwNjAKKwlkYy5sCSQwMDYwMDA2MCwkMDA2MDAwNjAsJDAwNjYwMDAwLCQwMDAwZmQyMAorCWRjLmwJJDAwOWUwMDcyLCQwMDYwZmQyMCwkMDA2NjAwMDAsJDAwMDAwMDY2CisJZGMubAkkMDA2NjAwNjYsJDAwNjYwMDY2LCQwMDY2MDAwMCwkMDAwMDYwZmYKKwlkYy5sCSRmZmZmZTYyZSwkNjBmZmZmZmYsJGU2Mjg2MGZmLCRmZmZmZTZhNgorCWRjLmwJJDEwMjgwMDAwLCQxMjI5MDAwMCwkYjEwMTZhMTAsJGYyM2M0NDAwCisJZGMubAkkODAwMDAwMDAsJDFkN2MwMDBjLCRmZjY0NGU3NSwkZjIzYzQ0MDAKKwlkYy5sCSQwMDAwMDAwMCwkMWQ3YzAwMDQsJGZmNjQ0ZTc1LCQwMDZlMDQxMAorCWRjLmwJJGZmNjYxMDI4LCQwMDAwMTIyOSwkMDAwMGIxMDEsJDZhMTBmMjNjCisJZGMubAkkNDQwMGZmODAsJDAwMDAxZDdjLCQwMDBhZmY2NCwkNGU3NWYyM2MKKwlkYy5sCSQ0NDAwN2Y4MCwkMDAwMDFkN2MsJDAwMDJmZjY0LCQ0ZTc1MTAyOQorCWRjLmwJJDAwMDAxMjI4LCQwMDAwYjEwMSwkNmExNmYyMjksJGQwODAwMDAwCisJZGMubAkkZjIwMDAwMTgsJGYyMDAwMDFhLCQxZDdjMDAwYSwkZmY2NDRlNzUKKwlkYy5sCSRmMjI5ZDA4MCwkMDAwMGYyMDAsJDAwMTgxZDdjLCQwMDAyZmY2NAorCWRjLmwJJDRlNzUwMjAwLCQwMDMwMDAwMCwkMDA0MDYwMDgsJDAyMDAwMDMwCisJZGMubAkkMDAwMDAwODAsJDJkNDBmZjVjLCQxMjJlZmY0ZSwkNjYwMDAyNzYKKwlkYy5sCSQwMjAwMDBjMCwkNjYwMDAwOTAsJDJkNjgwMDA0LCRmZjg4MmQ2OAorCWRjLmwJJDAwMDhmZjhjLCQzMDI4MDAwMCwkMGE0MDgwMDAsJDZhMDYxZDdjCisJZGMubAkkMDAwOGZmNjQsJDNkNDBmZjg0LCRmMjJlZDA4MCwkZmY4NDRlNzUKKwlkYy5sCSQwMjAwMDBjMCwkNjY2MDA4ZWUsJDAwMDNmZjY2LCQyZDY4MDAwNAorCWRjLmwJJGZmODgyZDY4LCQwMDA4ZmY4YywkMzAyODAwMDAsJDBhNDA4MDAwCisJZGMubAkkNmEwNjFkN2MsJDAwMDhmZjY0LCQzZDQwZmY4NCwkZjIyZWQwODAKKwlkYy5sCSRmZjg0MDgyZSwkMDAwM2ZmNjIsJDY2MDI0ZTc1LCQ0MWVlZmY4NAorCWRjLmwJJDYxZmZmZmZmLCRlODc2NDQ0MCwkMDY0MDYwMDAsJDMyMmVmZjg0CisJZGMubAkkMDI0MTgwMDAsJDAyNDA3ZmZmLCQ4MDQxM2Q0MCwkZmY4NGYyMmUKKwlkYy5sCSRkMDQwZmY4NCwkNGU3NTBjMDAsJDAwNDA2NjdlLCQzZDY4MDAwMAorCWRjLmwJJGZmODQyZDY4LCQwMDA0ZmY4OCwkMmQ2ODAwMDgsJGZmOGM2MWZmCisJZGMubAkkZmZmZmUzZDgsJDBjODAwMDAwLCQwMDdmNmMwMCwkMDA5MDBjODAKKwlkYy5sCSRmZmZmZmY4MSwkNjcwMDAxNzgsJDZkMDAwMGY0LCRmMjNjODgwMAorCWRjLmwJJDAwMDAwMDAwLCRmMjJlOTAwMCwkZmY1Y2YyMmUsJDQ4MWFmZjg0CisJZGMubAkkZjIwMWE4MDAsJGYyM2M5MDAwLCQwMDAwMDAwMCwkODNhZWZmNjQKKwlkYy5sCSQyZjAyZjIyZSwkZjA4MGZmODQsJDMyMmVmZjg0LCQzNDAxMDI4MQorCWRjLmwJJDAwMDA3ZmZmLCQ5MjgwMDI0MiwkODAwMDg0NDEsJDNkNDJmZjg0CisJZGMubAkkMjQxZmYyMmUsJGQwODBmZjg0LCQ0ZTc1M2Q2OCwkMDAwMGZmODQKKwlkYy5sCSQyZDY4MDAwNCwkZmY4ODJkNjgsJDAwMDhmZjhjLCQ2MWZmZmZmZgorCWRjLmwJJGUzNWEwYzgwLCQwMDAwMDNmZiwkNmMxMjBjODAsJGZmZmZmYzAxCisJZGMubAkkNjcwMDAwZmMsJDZkMDAwMDc4LCQ2MDAwZmY4MiwkMDhlZTAwMDMKKwlkYy5sCSRmZjY2MGEyZSwkMDA4MGZmODQsJDZhMDYwOGVlLCQwMDAzZmY2NAorCWRjLmwJJDEyMmVmZjYyLCQwMjAxMDAwYiwkNjYxYTQxZWUsJGZmODQyMjJlCisJZGMubAkkZmY1YzYxZmYsJGZmZmZlOTlhLCQ4MTJlZmY2NCwkZjIyZWQwODAKKwlkYy5sCSRmZjg0NGU3NSwkMmQ2ZWZmODgsJGZmOTQyZDZlLCRmZjhjZmY5OAorCWRjLmwJJDMyMmVmZjg0LCQyZjAyMjQwMSwkMDI4MTAwMDAsJDdmZmYwMjQyCisJZGMubAkkODAwMDkyODAsJDA2ODEwMDAwLCQ2MDAwMDI0MSwkN2ZmZjgyNDIKKwlkYy5sCSQzZDQxZmY5MCwkZjIyZWQwNDAsJGZmOTAyNDFmLCQ2MGFjZjIzYworCWRjLmwJJDg4MDAwMDAwLCQwMDAwZjIyZSwkOTAwMGZmNWMsJGYyMmU0ODFhCisJZGMubAkkZmY4NGYyM2MsJDkwMDAwMDAwLCQwMDAwZjIwMSwkYTgwMDgzYWUKKwlkYy5sCSRmZjY0MDBhZSwkMDAwMDEwNDgsJGZmNjQxMjJlLCRmZjYyMDIwMQorCWRjLmwJJDAwMTM2NjFjLCQwODJlMDAwMywkZmY2NDU2YzEsJDIwMmVmZjVjCisJZGMubAkkNjFmZmZmZmYsJGVhMGE4MTJlLCRmZjY0ZjIxMCwkZDA4MDRlNzUKKwlkYy5sCSQyZjAyMzIyZSwkZmY4NDI0MDEsJDAyODEwMDAwLCQ3ZmZmMDI0MgorCWRjLmwJJDgwMDA5MjgwLCQwNDgxMDAwMCwkNjAwMDAyNDEsJDdmZmY4MjQyCisJZGMubAkkM2Q0MWZmODQsJGYyMmVkMDQwLCRmZjg0MjQxZiwkNjBiNmYyM2MKKwlkYy5sCSQ4ODAwMDAwMCwkMDAwMGYyMmUsJDkwMDBmZjVjLCRmMjJlNDgxYQorCWRjLmwJJGZmODRmMjAxLCRhODAwZjIzYywkOTAwMDAwMDAsJDAwMDA4M2FlCisJZGMubAkkZmY2NGYyMDAsJDAwOThmMjNjLCQ1OGI4MDAwMiwkZjI5M2ZmNzQKKwlkYy5sCSQ2MDAwZmU3ZSwkMGMwMTAwMDQsJDY3MDBmZGI2LCQwYzAxMDAwNQorCWRjLmwJJDY3ZmZmZmZmLCRlMzA0MGMwMSwkMDAwMzY3ZmYsJGZmZmZlMzBlCisJZGMubAkkZjIyODQ4MWEsJDAwMDBmMjAwLCRhODAwZTE5OCwkMWQ0MGZmNjQKKwlkYy5sCSQ0ZTc1MTIyZSwkZmY0ZTY2MTAsJDRhMjgwMDAwLCQ2YjAyNGU3NQorCWRjLmwJJDFkN2MwMDA4LCRmZjY0NGU3NSwkMGMwMTAwMDEsJDY3NDAwYzAxCisJZGMubAkkMDAwMjY3MjQsJDBjMDEwMDA1LCQ2N2ZmZmZmZiwkZTJiYzBjMDEKKwlkYy5sCSQwMDAzNjdmZiwkZmZmZmUyYzYsJDRhMjgwMDAwLCQ2YjAyNGU3NQorCWRjLmwJJDFkN2MwMDA4LCRmZjY0NGU3NSwkNGEyODAwMDAsJDZiMDgxZDdjCisJZGMubAkkMDAwMmZmNjQsJDRlNzUxZDdjLCQwMDBhZmY2NCwkNGU3NTRhMjgKKwlkYy5sCSQwMDAwNmIwOCwkMWQ3YzAwMDQsJGZmNjQ0ZTc1LCQxZDdjMDAwYworCWRjLmwJJGZmNjQ0ZTc1LCQxMjJlZmY0ZSwkNjYyODAyMDAsJDAwMzBmMjAwCisJZGMubAkkOTAwMGYyM2MsJDg4MDAwMDAwLCQwMDAwZjIyOCwkNDgwMTAwMDAKKwlkYy5sCSRmMjNjOTAwMCwkMDAwMDAwMDAsJGYyMDBhODAwLCQ4MWFlZmY2NAorCWRjLmwJJDRlNzUwYzAxLCQwMDAxNjcyZSwkMGMwMTAwMDIsJDY3NGUwYzAxCisJZGMubAkkMDAwNDY3MTAsJDBjMDEwMDA1LCQ2N2ZmZmZmZiwkZTIyYzYwZmYKKwlkYy5sCSRmZmZmZTIzYSwkM2Q2ODAwMDAsJGZmODQxZDdjLCQwMDgwZmY4OAorCWRjLmwJJDQxZWVmZjg0LCQ2MGE0NGEyOCwkMDAwMDZiMTAsJGYyM2M0NDAwCisJZGMubAkkMDAwMDAwMDAsJDFkN2MwMDA0LCRmZjY0NGU3NSwkZjIzYzQ0MDAKKwlkYy5sCSQ4MDAwMDAwMCwkMWQ3YzAwMGMsJGZmNjQ0ZTc1LCRmMjI4ZDA4MAorCWRjLmwJJDAwMDA0YTI4LCQwMDAwNmIwOCwkMWQ3YzAwMDIsJGZmNjQ0ZTc1CisJZGMubAkkMWQ3YzAwMGEsJGZmNjQ0ZTc1LCQxMjJlZmY0ZSwkNjYxOGYyM2MKKwlkYy5sCSQ4ODAwMDAwMCwkMDAwMGYyMjgsJDQ4MDMwMDAwLCRmMjAwYTgwMAorCWRjLmwJJDgxYWVmZjY0LCQ0ZTc1MGMwMSwkMDAwMTY3MmUsJDBjMDEwMDAyCisJZGMubAkkNjc0ZTBjMDEsJDAwMDQ2NzEwLCQwYzAxMDAwNSwkNjdmZmZmZmYKKwlkYy5sCSRlMTk4NjBmZiwkZmZmZmUxYTYsJDNkNjgwMDAwLCRmZjg0MWQ3YworCWRjLmwJJDAwODBmZjg4LCQ0MWVlZmY4NCwkNjBiNDRhMjgsJDAwMDA2YjEwCisJZGMubAkkZjIzYzQ0MDAsJDAwMDAwMDAwLCQxZDdjMDAwNCwkZmY2NDRlNzUKKwlkYy5sCSRmMjNjNDQwMCwkODAwMDAwMDAsJDFkN2MwMDBjLCRmZjY0NGU3NQorCWRjLmwJJGYyMjhkMDgwLCQwMDAwNGEyOCwkMDAwMDZiMDgsJDFkN2MwMDAyCisJZGMubAkkZmY2NDRlNzUsJDFkN2MwMDBhLCRmZjY0NGU3NSwkMDIwMDAwMzAKKwlkYy5sCSQwMDAwMDA0MCwkNjAwODAyMDAsJDAwMzAwMDAwLCQwMDgwMmQ0MAorCWRjLmwJJGZmNWMxMjJlLCRmZjRlNjYwMCwkMDI1YzAyMDAsJDAwYzA2NjdlCisJZGMubAkkMmQ2ODAwMDQsJGZmODgyZDY4LCQwMDA4ZmY4YywkMzIyODAwMDAKKwlkYy5sCSQwODgxMDAwZiwkM2Q0MWZmODQsJGYyMmVkMDgwLCRmZjg0NGU3NQorCWRjLmwJJDAyMDAwMGMwLCQ2NjU4MDhlZSwkMDAwM2ZmNjYsJDJkNjgwMDA0CisJZGMubAkkZmY4ODJkNjgsJDAwMDhmZjhjLCQzMDI4MDAwMCwkMDg4MDAwMGYKKwlkYy5sCSQzZDQwZmY4NCwkZjIyZWQwODAsJGZmODQwODJlLCQwMDAzZmY2MgorCWRjLmwJJDY2MDI0ZTc1LCQ0MWVlZmY4NCwkNjFmZmZmZmYsJGU0MWU0NDQwCisJZGMubAkkMDY0MDYwMDAsJDMyMmVmZjg0LCQwMjQxODAwMCwkMDI0MDdmZmYKKwlkYy5sCSQ4MDQxM2Q0MCwkZmY4NGYyMmUsJGQwNDBmZjg0LCQ0ZTc1MGMwMAorCWRjLmwJJDAwNDA2NjdlLCQzZDY4MDAwMCwkZmY4NDJkNjgsJDAwMDRmZjg4CisJZGMubAkkMmQ2ODAwMDgsJGZmOGM2MWZmLCRmZmZmZGY4MCwkMGM4MDAwMDAKKwlkYy5sCSQwMDdmNmMwMCwkMDA5MDBjODAsJGZmZmZmZjgxLCQ2NzAwMDE3MAorCWRjLmwJJDZkMDAwMGVjLCRmMjNjODgwMCwkMDAwMDAwMDAsJGYyMmU5MDAwCisJZGMubAkkZmY1Y2YyMmUsJDQ4MThmZjg0LCRmMjAxYTgwMCwkZjIzYzkwMDAKKwlkYy5sCSQwMDAwMDAwMCwkODNhZWZmNjQsJDJmMDJmMjJlLCRmMDgwZmY4NAorCWRjLmwJJDMyMmVmZjg0LCQyNDAxMDI4MSwkMDAwMDdmZmYsJDkyODAwMjQyCisJZGMubAkkODAwMDg0NDEsJDNkNDJmZjg0LCQyNDFmZjIyZSwkZDA4MGZmODQKKwlkYy5sCSQ0ZTc1M2Q2OCwkMDAwMGZmODQsJDJkNjgwMDA0LCRmZjg4MmQ2OAorCWRjLmwJJDAwMDhmZjhjLCQ2MWZmZmZmZiwkZGYwMjBjODAsJDAwMDAwM2ZmCisJZGMubAkkNmMxMjBjODAsJGZmZmZmYzAxLCQ2NzAwMDBmNCwkNmQwMDAwNzAKKwlkYy5sCSQ2MDAwZmY4MiwkMDhlZTAwMDMsJGZmNjYwOGFlLCQwMDA3ZmY4NAorCWRjLmwJJDEyMmVmZjYyLCQwMjAxMDAwYiwkNjYxYTQxZWUsJGZmODQyMjJlCisJZGMubAkkZmY1YzYxZmYsJGZmZmZlNTRhLCQ4MTJlZmY2NCwkZjIyZWQwODAKKwlkYy5sCSRmZjg0NGU3NSwkMmQ2ZWZmODgsJGZmOTQyZDZlLCRmZjhjZmY5OAorCWRjLmwJJDMyMmVmZjg0LCQyZjAyMjQwMSwkMDI4MTAwMDAsJDdmZmYwMjQyCisJZGMubAkkODAwMDkyODAsJDA2ODEwMDAwLCQ2MDAwMDI0MSwkN2ZmZjgyNDIKKwlkYy5sCSQzZDQxZmY5MCwkZjIyZWQwNDAsJGZmOTAyNDFmLCQ2MGFjZjIzYworCWRjLmwJJDg4MDAwMDAwLCQwMDAwZjIyZSwkOTAwMGZmNWMsJGYyMmU0ODE4CisJZGMubAkkZmY4NGYyM2MsJDkwMDAwMDAwLCQwMDAwZjIwMSwkYTgwMDgzYWUKKwlkYy5sCSRmZjY0MDBhZSwkMDAwMDEwNDgsJGZmNjQxMjJlLCRmZjYyMDIwMQorCWRjLmwJJDAwMTM2NjFjLCQwODJlMDAwMywkZmY2NDU2YzEsJDIwMmVmZjVjCisJZGMubAkkNjFmZmZmZmYsJGU1YmE4MTJlLCRmZjY0ZjIxMCwkZDA4MDRlNzUKKwlkYy5sCSQyZjAyMzIyZSwkZmY4NDI0MDEsJDAyODEwMDAwLCQ3ZmZmMDI0MgorCWRjLmwJJDgwMDA5MjgwLCQwNDgxMDAwMCwkNjAwMDAyNDEsJDdmZmY4MjQyCisJZGMubAkkM2Q0MWZmODQsJGYyMmVkMDQwLCRmZjg0MjQxZiwkNjBiNmYyM2MKKwlkYy5sCSQ4ODAwMDAwMCwkMDAwMGYyMmUsJDkwMDBmZjVjLCRmMjJlNDgxOAorCWRjLmwJJGZmODRmMjAxLCRhODAwZjIzYywkOTAwMDAwMDAsJDAwMDA4M2FlCisJZGMubAkkZmY2NGYyMDAsJDAwOThmMjNjLCQ1OGI4MDAwMiwkZjI5M2ZmNzQKKwlkYy5sCSQ2MDAwZmU4NiwkMGMwMTAwMDQsJDY3MDBmZGM2LCQwYzAxMDAwNQorCWRjLmwJJDY3ZmZmZmZmLCRkZWI0MGMwMSwkMDAwMzY3ZmYsJGZmZmZkZWJlCisJZGMubAkkZjIyODQ4MTgsJDAwMDAwYzAxLCQwMDAyNjcwOCwkMWQ3YzAwMDQKKwlkYy5sCSRmZjY0NGU3NSwkMWQ3YzAwMDIsJGZmNjQ0ZTc1LCQ0MjQxMTIyZQorCWRjLmwJJGZmNGZlNzA5LCQ4MjJlZmY0ZSwkNjYxOGYyMjksJGQwODAwMDAwCisJZGMubAkkZjIyODQ4MzgsJDAwMDBmMjAwLCRhODAwZTE5OCwkMWQ0MGZmNjQKKwlkYy5sCSQ0ZTc1MzIzYiwkMTIwYTRlZmIsJDEwMDY0YWZjLCQwMDMwZmZkYworCWRjLmwJJGZmZGNmZmRjLCQwMDYwMDBmOCwkMDA2ZTAwMDAsJDAwMDBmZmRjCisJZGMubAkkZmZkY2ZmZGMsJDAwNjAwMDdjLCQwMDZlMDAwMCwkMDAwMGZmZGMKKwlkYy5sCSRmZmRjZmZkYywkMDA2MDAwN2MsJDAwNmUwMDAwLCQwMDAwMDA2MAorCWRjLmwJJDAwNjAwMDYwLCQwMDYwMDA2MCwkMDA2ZTAwMDAsJDAwMDAwMTE0CisJZGMubAkkMDA5YzAwOWMsJDAwNjAwMGJjLCQwMDZlMDAwMCwkMDAwMDAwNmUKKwlkYy5sCSQwMDZlMDA2ZSwkMDA2ZTAwNmUsJDAwNmUwMDAwLCQwMDAwNjFmZgorCWRjLmwJJGZmZmZkZGRlLCQwMjJlMDBmNywkZmY2NDRlNzUsJDYxZmZmZmZmCisJZGMubAkkZGRkMDAyMmUsJDAwZjdmZjY0LCQ0ZTc1M2Q2OCwkMDAwMGZmODQKKwlkYy5sCSQyMDI4MDAwNCwkMDhjMDAwMWYsJDJkNDBmZjg4LCQyZDY4MDAwOAorCWRjLmwJJGZmOGM0MWVlLCRmZjg0NjAwMCwkZmY0MjJkNjksJDAwMDBmZjg0CisJZGMubAkkMjAyOTAwMDQsJDA4YzAwMDFmLCQyZDQwZmY4OCwkMmQ2OTAwMDgKKwlkYy5sCSRmZjhjNDNlZSwkZmY4NDYwMDAsJGZmMjIzZDY5LCQwMDAwZmY5MAorCWRjLmwJJDNkNjgwMDAwLCRmZjg0MjAyOSwkMDAwNDA4YzAsJDAwMWYyZDQwCisJZGMubAkkZmY5NDIwMjgsJDAwMDQwOGMwLCQwMDFmMmQ0MCwkZmY4ODJkNjkKKwlkYy5sCSQwMDA4ZmY5OCwkMmQ2ODAwMDgsJGZmOGM0M2VlLCRmZjkwNDFlZQorCWRjLmwJJGZmODQ2MDAwLCRmZWU2MTAyOCwkMDAwMDEyMjksJDAwMDBiMTAxCisJZGMubAkkNmIwMGZmNzgsJDRhMDA2YjAyLCQ0ZTc1MWQ3YywkMDAwOGZmNjQKKwlkYy5sCSQ0ZTc1MTAyOCwkMDAwMDEyMjksJDAwMDBiMTAxLCQ2YjAwZmY3YworCWRjLmwJJDRhMDA2YTAyLCQ0ZTc1MWQ3YywkMDAwOGZmNjQsJDRlNzUyZDQwCisJZGMubAkkZmY1YzQyNDEsJDEyMmVmZjRmLCRlNzA5ODIyZSwkZmY0ZTY2MDAKKwlkYy5sCSQwMmEwM2Q2OSwkMDAwMGZmOTAsJDJkNjkwMDA0LCRmZjk0MmQ2OQorCWRjLmwJJDAwMDhmZjk4LCQzZDY4MDAwMCwkZmY4NDJkNjgsJDAwMDRmZjg4CisJZGMubAkkMmQ2ODAwMDgsJGZmOGM2MWZmLCRmZmZmZGJmMCwkMmYwMDYxZmYKKwlkYy5sCSRmZmZmZGM5NCwkZDA5ZjBjODAsJGZmZmZjMDAxLCQ2NzAwMDBmOAorCWRjLmwJJDZkMDAwMDY0LCQwYzgwMDAwMCwkNDAwMDY3MDAsJDAxZGE2ZTAwCisJZGMubAkkMDEyMmYyMmUsJGQwODBmZjkwLCRmMjJlOTAwMCwkZmY1Y2YyM2MKKwlkYy5sCSQ4ODAwMDAwMCwkMDAwMGYyMmUsJDQ4MjdmZjg0LCRmMjAxYTgwMAorCWRjLmwJJGYyM2M5MDAwLCQwMDAwMDAwMCwkODNhZWZmNjQsJGYyMmVmMDgwCisJZGMubAkkZmY4NDJmMDIsJDMyMmVmZjg0LCQyNDAxMDI4MSwkMDAwMDdmZmYKKwlkYy5sCSQwMjQyODAwMCwkOTI4MDgyNDIsJDNkNDFmZjg0LCQyNDFmZjIyZQorCWRjLmwJJGQwODBmZjg0LCQ0ZTc1ZjIyZSwkZDA4MGZmOTAsJGYyMmU5MDAwCisJZGMubAkkZmY1Y2YyM2MsJDg4MDAwMDAwLCQwMDAwZjIyZSwkNDgyN2ZmODQKKwlkYy5sCSRmMjAxYTgwMCwkZjIzYzkwMDAsJDAwMDAwMDAwLCQ4M2FlZmY2NAorCWRjLmwJJDAwYWUwMDAwLCQxMDQ4ZmY2NCwkMTIyZWZmNjIsJDAyMDEwMDEzCisJZGMubAkkNjYyMDA4MmUsJDAwMDNmZjY0LCQ1NmMxMjAyZSwkZmY1YzAyMDAKKwlkYy5sCSQwMDMwNjFmZiwkZmZmZmUyYTgsJDgxMmVmZjY0LCRmMjEwZDA4MAorCWRjLmwJJDRlNzVmMjJlLCRmMDgwZmY4NCwkMmYwMjMyMmUsJGZmODQyNDAxCisJZGMubAkkMDI4MTAwMDAsJDdmZmY5MjgwLCQwNDgxMDAwMCwkNjAwMDAyNDEKKwlkYy5sCSQ3ZmZmMDI0MiwkODAwMDgyNDIsJDNkNDFmZjg0LCQyNDFmZjIyZQorCWRjLmwJJGQwNDBmZjg0LCQ2MGFjZjIyZSwkZDA4MGZmOTAsJGYyMmU5MDAwCisJZGMubAkkZmY1Y2YyM2MsJDg4MDAwMDAwLCQwMDAwZjIyZSwkNDgyN2ZmODQKKwlkYy5sCSRmMjAxYTgwMCwkZjIzYzkwMDAsJDAwMDAwMDAwLCQ4M2FlZmY2NAorCWRjLmwJJGYyMDAwMDk4LCRmMjNjNThiOCwkMDAwMmYyOTMsJGZmNjQ2MDAwCisJZGMubAkkZmYwYzA4ZWUsJDAwMDNmZjY2LCRmMjJlZDA4MCwkZmY5MGYyM2MKKwlkYy5sCSQ5MDAwMDAwMCwkMDAxMGYyM2MsJDg4MDAwMDAwLCQwMDAwZjIyZQorCWRjLmwJJDQ4MjdmZjg0LCRmMjAxYTgwMCwkZjIzYzkwMDAsJDAwMDAwMDAwCisJZGMubAkkODNhZWZmNjQsJDEyMmVmZjYyLCQwMjAxMDAwYiwkNjYyMGYyMmUKKwlkYy5sCSRmMDgwZmY4NCwkNDFlZWZmODQsJDIyMmVmZjVjLCQ2MWZmZmZmZgorCWRjLmwJJGUxNjY4MTJlLCRmZjY0ZjIyZSwkZDA4MGZmODQsJDRlNzVmMjJlCisJZGMubAkkZDA0MGZmOTAsJGYyMmU5MDAwLCRmZjVjZjIzYywkODgwMDAwMDAKKwlkYy5sCSQwMDAwZjIyZSwkNDhhN2ZmODQsJGYyM2M5MDAwLCQwMDAwMDAwMAorCWRjLmwJJGYyMmVmMDQwLCRmZjg0MmYwMiwkMzIyZWZmODQsJDI0MDEwMjgxCisJZGMubAkkMDAwMDdmZmYsJDAyNDI4MDAwLCQ5MjgwMDY4MSwkMDAwMDYwMDAKKwlkYy5sCSQwMjQxN2ZmZiwkODI0MjNkNDEsJGZmODQyNDFmLCRmMjJlZDA0MAorCWRjLmwJJGZmODQ2MDAwLCRmZjhhZjIyZSwkZDA4MGZmOTAsJGYyMmU5MDAwCisJZGMubAkkZmY1Y2YyM2MsJDg4MDAwMDAwLCQwMDAwZjIyZSwkNDgyN2ZmODQKKwlkYy5sCSRmMjAxYTgwMCwkZjIzYzkwMDAsJDAwMDAwMDAwLCQ4M2FlZmY2NAorCWRjLmwJJGYyMDAwMDk4LCRmMjNjNThiOCwkMDAwMmYyOTIsJGZlMjBmMjk0CisJZGMubAkkZmYxMmYyMmUsJGQwNDBmZjkwLCQyMjJlZmY1YywkMDIwMTAwYzAKKwlkYy5sCSQwMDAxMDAxMCwkZjIwMTkwMDAsJGYyM2M4ODAwLCQwMDAwMDAwMAorCWRjLmwJJGYyMmU0OGE3LCRmZjg0ZjIzYywkOTAwMDAwMDAsJDAwMDBmMjAwCisJZGMubAkkMDQ5OGYyM2MsJDU4YjgwMDAyLCRmMjkzZmRlMiwkNjAwMGZlZDQKKwlkYy5sCSQzMjNiMTIwYSwkNGVmYjEwMDYsJDRhZmMwMDMwLCRmZDU2MDA3MgorCWRjLmwJJDAwNzgwMDZjLCRmZDU2MDA2NiwkMDAwMDAwMDAsJDAwNzIwMDcyCisJZGMubAkkMDA2MDAwNmMsJDAwNzIwMDY2LCQwMDAwMDAwMCwkMDA3ZTAwNjAKKwlkYy5sCSQwMDdlMDA2YywkMDA3ZTAwNjYsJDAwMDAwMDAwLCQwMDZjMDA2YworCWRjLmwJJDAwNmMwMDZjLCQwMDZjMDA2NiwkMDAwMDAwMDAsJGZkNTYwMDcyCisJZGMubAkkMDA3ODAwNmMsJGZkNTYwMDY2LCQwMDAwMDAwMCwkMDA2NjAwNjYKKwlkYy5sCSQwMDY2MDA2NiwkMDA2NjAwNjYsJDAwMDAwMDAwLCQ2MGZmZmZmZgorCWRjLmwJJGRhNzQ2MGZmLCRmZmZmZDllYSwkNjBmZmZmZmYsJGQ5ZTQ2MGZmCisJZGMubAkkZmZmZmVkMGUsJDYwZmZmZmZmLCRlZDYyNjBmZiwkZmZmZmVkMmUKKwlkYy5sCSQyZDQwZmY1YywkNDI0MTEyMmUsJGZmNGZlNzA5LCQ4MjJlZmY0ZQorCWRjLmwJJDY2MDAwMjdjLCQzZDY5MDAwMCwkZmY5MDJkNjksJDAwMDRmZjk0CisJZGMubAkkMmQ2OTAwMDgsJGZmOTgzZDY4LCQwMDAwZmY4NCwkMmQ2ODAwMDQKKwlkYy5sCSRmZjg4MmQ2OCwkMDAwOGZmOGMsJDYxZmZmZmZmLCRkOGFlMmYwMAorCWRjLmwJJDYxZmZmZmZmLCRkOTUyNDQ5NywkZDE5NzMyMmUsJGZmNWVlYzA5CisJZGMubAkkMjAxZjBjODAsJGZmZmZjMDAxLCQ2ZjAwMDA2NCwkMGM4MDAwMDAKKwlkYy5sCSQzZmZmNjcwMCwkMDFiNjZlMDAsJDAxMDBmMjJlLCRkMDgwZmY5MAorCWRjLmwJJGYyMmU5MDAwLCRmZjVjZjIzYywkODgwMDAwMDAsJDAwMDBmMjJlCisJZGMubAkkNDgyNGZmODQsJGYyMDFhODAwLCRmMjNjOTAwMCwkMDAwMDAwMDAKKwlkYy5sCSQ4M2FlZmY2NCwkZjIyZWYwODAsJGZmODQyZjAyLCQzMjJlZmY4NAorCWRjLmwJJDI0MDEwMjgxLCQwMDAwN2ZmZiwkMDI0MjgwMDAsJDkyODA4MjQyCisJZGMubAkkM2Q0MWZmODQsJDI0MWZmMjJlLCRkMDgwZmY4NCwkNGU3NWYyMmUKKwlkYy5sCSRkMDgwZmY5MCwkZjIyZTkwMDAsJGZmNWNmMjNjLCQ4ODAwMDAwMAorCWRjLmwJJDAwMDBmMjJlLCQ0ODI0ZmY4NCwkZjIwMWE4MDAsJGYyM2M5MDAwCisJZGMubAkkMDAwMDAwMDAsJDgzYWVmZjY0LCRmMjI3ZTAwMSwkMzIxN2RmZmMKKwlkYy5sCSQwMDAwMDAwYywkMDI4MTAwMDAsJDdmZmY5MjgwLCQwYzgxMDAwMAorCWRjLmwJJDdmZmY2ZDkwLCQwMDZlMTA0OCwkZmY2NjEyMmUsJGZmNjIwMjAxCisJZGMubAkkMDAxMzY2MjAsJDA4MmUwMDAzLCRmZjY0NTZjMSwkMjAyZWZmNWMKKwlkYy5sCSQwMjAwMDAzMCwkNjFmZmZmZmYsJGRmNDY4MTJlLCRmZjY0ZjIxMAorCWRjLmwJJGQwODA0ZTc1LCRmMjJlZjA4MCwkZmY4NDJmMDIsJDMyMmVmZjg0CisJZGMubAkkMjQwMTAyODEsJDAwMDA3ZmZmLCQwMjQyODAwMCwkOTI4MDA0ODEKKwlkYy5sCSQwMDAwNjAwMCwkMDI0MTdmZmYsJDgyNDIzZDQxLCRmZjg0MjQxZgorCWRjLmwJJGYyMmVkMDQwLCRmZjg0NjBhYywkMDhlZTAwMDMsJGZmNjZmMjJlCisJZGMubAkkZDA4MGZmOTAsJGYyM2M5MDAwLCQwMDAwMDAxMCwkZjIzYzg4MDAKKwlkYy5sCSQwMDAwMDAwMCwkZjIyZTQ4MjQsJGZmODRmMjAxLCRhODAwZjIzYworCWRjLmwJJDkwMDAwMDAwLCQwMDAwODNhZSwkZmY2NDEyMmUsJGZmNjIwMjAxCisJZGMubAkkMDAwYjY2MjAsJGYyMmVmMDgwLCRmZjg0NDFlZSwkZmY4NDIyMmUKKwlkYy5sCSRmZjVjNjFmZiwkZmZmZmRlNDAsJDgxMmVmZjY0LCRmMjJlZDA4MAorCWRjLmwJJGZmODQ0ZTc1LCRmMjJlZDA0MCwkZmY5MGYyMmUsJDkwMDBmZjVjCisJZGMubAkkZjIzYzg4MDAsJDAwMDAwMDAwLCRmMjJlNDhhNCwkZmY4NGYyM2MKKwlkYy5sCSQ5MDAwMDAwMCwkMDAwMGYyMmUsJGYwNDBmZjg0LCQyZjAyMzIyZQorCWRjLmwJJGZmODQyNDAxLCQwMjgxMDAwMCwkN2ZmZjAyNDIsJDgwMDA5MjgwCisJZGMubAkkMDY4MTAwMDAsJDYwMDAwMjQxLCQ3ZmZmODI0MiwkM2Q0MWZmODQKKwlkYy5sCSQyNDFmZjIyZSwkZDA0MGZmODQsJDYwOGFmMjJlLCRkMDgwZmY5MAorCWRjLmwJJGYyMmU5MDAwLCRmZjVjZjIzYywkODgwMDAwMDAsJDAwMDBmMjJlCisJZGMubAkkNDgyNGZmODQsJGYyMDFhODAwLCRmMjNjOTAwMCwkMDAwMDAwMDAKKwlkYy5sCSQ4M2FlZmY2NCwkZjIwMDAwOTgsJGYyM2M1OGI4LCQwMDAxZjI5MgorCWRjLmwJJGZlNDRmMjk0LCRmZjE0ZjIyZSwkZDA0MGZmOTAsJDQyODEwMDAxCisJZGMubAkkMDAxMGYyMDEsJDkwMDBmMjNjLCQ4ODAwMDAwMCwkMDAwMGYyMmUKKwlkYy5sCSQ0OGE0ZmY4NCwkZjIzYzkwMDAsJDAwMDAwMDAwLCRmMjAwMDQ5OAorCWRjLmwJJGYyM2M1OGI4LCQwMDAxZjI5MywkZmUwYzYwMDAsJGZlZGMzMjNiCisJZGMubAkkMTIwYTRlZmIsJDEwMDY0YWZjLCQwMDMwZmQ3YSwkMDA3MjAwNzgKKwlkYy5sCSQwMDYwZmQ3YSwkMDA2NjAwMDAsJDAwMDAwMDc4LCQwMDZjMDA3OAorCWRjLmwJJDAwNjAwMDc4LCQwMDY2MDAwMCwkMDAwMDAwN2UsJDAwN2UwMDZjCisJZGMubAkkMDA2MDAwN2UsJDAwNjYwMDAwLCQwMDAwMDA2MCwkMDA2MDAwNjAKKwlkYy5sCSQwMDYwMDA2MCwkMDA2NjAwMDAsJDAwMDBmZDdhLCQwMDcyMDA3OAorCWRjLmwJJDAwNjBmZDdhLCQwMDY2MDAwMCwkMDAwMDAwNjYsJDAwNjYwMDY2CisJZGMubAkkMDA2NjAwNjYsJDAwNjYwMDAwLCQwMDAwNjBmZiwkZmZmZmQ2ZDIKKwlkYy5sCSQ2MGZmZmZmZiwkZDZjYzYwZmYsJGZmZmZkNzRhLCQ2MGZmZmZmZgorCWRjLmwJJGYwY2U2MGZmLCRmZmZmZjA5YywkNjBmZmZmZmYsJGYwZjQwMjAwCisJZGMubAkkMDAzMDAwMDAsJDAwNDA2MDA4LCQwMjAwMDAzMCwkMDAwMDAwODAKKwlkYy5sCSQyZDQwZmY1YywkNDI0MTEyMmUsJGZmNGZlNzA5LCQ4MjJlZmY0ZQorCWRjLmwJJDY2MDAwMjRjLCQ2MWZmZmZmZiwkZDRiMmYyMmUsJGQwODBmZjkwCisJZGMubAkkZjIzYzg4MDAsJDAwMDAwMDAwLCRmMjJlOTAwMCwkZmY1Y2YyMmUKKwlkYy5sCSQ0ODIyZmY4NCwkZjIzYzkwMDAsJDAwMDAwMDAwLCRmMjAxYTgwMAorCWRjLmwJJDgzYWVmZjY0LCRmMjgxMDAzYywkMmYwMmYyMjcsJGUwMDEzMjJlCisJZGMubAkkZmY1ZWVjMDksJDM0MTcwMjgyLCQwMDAwN2ZmZiwkOTQ4MGI0YmIKKwlkYy5sCSQxNDI0NmMzOCwkYjRiYjE0MmEsJDZkMDAwMGI4LCQ2NzAwMDE4NAorCWRjLmwJJDMyMTcwMjQxLCQ4MDAwODI0MiwkM2U4MWYyMWYsJGQwODAyNDFmCisJZGMubAkkNGU3NTRlNzUsJDAwMDA3ZmZmLCQwMDAwNDA3ZiwkMDAwMDQzZmYKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDNmODEsJDAwMDAzYzAxLCQwMGFlMDAwMAorCWRjLmwJJDEwNDhmZjY0LCQxMjJlZmY2MiwkMDIwMTAwMTMsJDY2MjRkZmZjCisJZGMubAkkMDAwMDAwMGMsJDA4MmUwMDAzLCRmZjY0NTZjMSwkMjAyZWZmNWMKKwlkYy5sCSQ2MWZmZmZmZiwkZGM3YTgxMmUsJGZmNjRmMjEwLCRkMDgwMjQxZgorCWRjLmwJJDRlNzUxMjJlLCRmZjVjMDIwMSwkMDBjMDY2MWEsJDMyMTcwMjQxCisJZGMubAkkODAwMDA0ODIsJDAwMDA2MDAwLCQwMjQyN2ZmZiwkODI0MjNlODEKKwlkYy5sCSRmMjFmZDA0MCwkNjBiZWYyMmUsJGQwODBmZjkwLCQyMjJlZmY1YworCWRjLmwJJDAyMDEwMDMwLCRmMjAxOTAwMCwkZjIyZTQ4MjIsJGZmODRmMjNjCisJZGMubAkkOTAwMDAwMDAsJDAwMDBkZmZjLCQwMDAwMDAwYywkZjIyN2UwMDEKKwlkYy5sCSQ2MGJhMDhlZSwkMDAwM2ZmNjYsJGRmZmMwMDAwLCQwMDBjZjIyZQorCWRjLmwJJGQwODBmZjkwLCRmMjNjOTAwMCwkMDAwMDAwMTAsJGYyM2M4ODAwCisJZGMubAkkMDAwMDAwMDAsJGYyMmU0ODIyLCRmZjg0ZjIzYywkOTAwMDAwMDAKKwlkYy5sCSQwMDAwZjIwMSwkYTgwMDgzYWUsJGZmNjQxMjJlLCRmZjYyMDIwMQorCWRjLmwJJDAwMGI2NjIyLCRmMjJlZjA4MCwkZmY4NDQxZWUsJGZmODQyMjJlCisJZGMubAkkZmY1YzYxZmYsJGZmZmZkYWNhLCQ4MTJlZmY2NCwkZjIyZWQwODAKKwlkYy5sCSRmZjg0MjQxZiwkNGU3NWYyMmUsJGQwNDBmZjkwLCQyMjJlZmY1YworCWRjLmwJJDAyMDEwMGMwLCQ2NjRlZjIyZSwkOTAwMGZmNWMsJGYyM2M4ODAwCisJZGMubAkkMDAwMDAwMDAsJGYyMmU0OGEyLCRmZjg0ZjIzYywkOTAwMDAwMDAKKwlkYy5sCSQwMDAwZjIyZSwkZjA0MGZmODQsJDMyMmVmZjg0LCQyNDAxMDI4MQorCWRjLmwJJDAwMDA3ZmZmLCQwMjQyODAwMCwkOTI4MDA2ODEsJDAwMDA2MDAwCisJZGMubAkkMDI0MTdmZmYsJDgyNDIzZDQxLCRmZjg0ZjIyZSwkZDA0MGZmODQKKwlkYy5sCSQ2MDAwZmY4MiwkMjIyZWZmNWMsJDAyMDEwMDMwLCRmMjAxOTAwMAorCWRjLmwJJDYwYWEyMjJlLCRmZjVjMDIwMSwkMDBjMDY3MDAsJGZlNzQyMjJmCisJZGMubAkkMDAwNDBjODEsJDgwMDAwMDAwLCQ2NjAwZmU2NiwkNGFhZjAwMDgKKwlkYy5sCSQ2NjAwZmU1ZSwkMDgyZTAwMDEsJGZmNjY2NzAwLCRmZTU0ZjIyZQorCWRjLmwJJGQwNDBmZjkwLCQyMjJlZmY1YywkMDIwMTAwYzAsJDAwMDEwMDEwCisJZGMubAkkZjIwMTkwMDAsJGYyM2M4ODAwLCQwMDAwMDAwMCwkZjIyZTQ4YTIKKwlkYy5sCSRmZjg0ZjIzYywkOTAwMDAwMDAsJDAwMDBmMjAwLCQwMDE4ZjIwMAorCWRjLmwJJDA0OThmMjAwLCQwNDM4ZjI5MiwkZmVjYTYwMDAsJGZlMTQzMjNiCisJZGMubAkkMTIwYTRlZmIsJDEwMDY0YWZjLCQwMDMwZmRhYSwkMDBlNDAxMWMKKwlkYy5sCSQwMDYwZmRhYSwkMDA2NjAwMDAsJDAwMDAwMGJjLCQwMDZjMDExYworCWRjLmwJJDAwNjAwMGJjLCQwMDY2MDAwMCwkMDAwMDAxMzAsJDAxMzAwMTBjCisJZGMubAkkMDA2MDAxMzAsJDAwNjYwMDAwLCQwMDAwMDA2MCwkMDA2MDAwNjAKKwlkYy5sCSQwMDYwMDA2MCwkMDA2NjAwMDAsJDAwMDBmZGFhLCQwMGU0MDExYworCWRjLmwJJDAwNjBmZGFhLCQwMDY2MDAwMCwkMDAwMDAwNjYsJDAwNjYwMDY2CisJZGMubAkkMDA2NjAwNjYsJDAwNjYwMDAwLCQwMDAwNjBmZiwkZmZmZmQzZDIKKwlkYy5sCSQ2MGZmZmZmZiwkZDNjYzEwMjgsJDAwMDAxMjI5LCQwMDAwYjEwMQorCWRjLmwJJDZiMDAwMDE2LCQ0YTAwNmIyZSwkZjIzYzQ0MDAsJDAwMDAwMDAwCisJZGMubAkkMWQ3YzAwMDQsJGZmNjQ0ZTc1LCQxMjJlZmY1ZiwkMDIwMTAwMzAKKwlkYy5sCSQwYzAxMDAyMCwkNjcxMGYyM2MsJDQ0MDAwMDAwLCQwMDAwMWQ3YworCWRjLmwJJDAwMDRmZjY0LCQ0ZTc1ZjIzYywkNDQwMDgwMDAsJDAwMDAxZDdjCisJZGMubAkkMDAwY2ZmNjQsJDRlNzUzZDY4LCQwMDAwZmY4NCwkMmQ2ODAwMDQKKwlkYy5sCSRmZjg4MmQ2OCwkMDAwOGZmOGMsJDYxZmZmZmZmLCRkMjdlNDI2ZQorCWRjLmwJJGZmOTA0MmFlLCRmZjk0NDJhZSwkZmY5ODYwMDAsJGZjY2UzZDY5CisJZGMubAkkMDAwMGZmOTAsJDJkNjkwMDA0LCRmZjk0MmQ2OSwkMDAwOGZmOTgKKwlkYy5sCSQ2MWZmZmZmZiwkZDMwMjQyNmUsJGZmODQ0MmFlLCRmZjg4NDJhZQorCWRjLmwJJGZmOGM2MDAwLCRmY2E2MTAyOCwkMDAwMDEyMjksJDAwMDBiMzAwCisJZGMubAkkNmJmZmZmZmYsJGQzYTBmMjI4LCRkMDgwMDAwMCwkNGEyODAwMDAKKwlkYy5sCSQ2YTFjMWQ3YywkMDAwYWZmNjQsJDRlNzVmMjI5LCRkMDgwMDAwMAorCWRjLmwJJDRhMjkwMDAwLCQ2YTA4MWQ3YywkMDAwYWZmNjQsJDRlNzUxZDdjCisJZGMubAkkMDAwMmZmNjQsJDRlNzUwMjAwLCQwMDMwMDAwMCwkMDA0MDYwMDgKKwlkYy5sCSQwMjAwMDAzMCwkMDAwMDAwODAsJDJkNDBmZjVjLCQ0MjQxMTIyZQorCWRjLmwJJGZmNGZlNzA5LCQ4MjJlZmY0ZSwkNjYwMDAyNGMsJDYxZmZmZmZmCisJZGMubAkkZDBlYWYyMmUsJGQwODBmZjkwLCRmMjNjODgwMCwkMDAwMDAwMDAKKwlkYy5sCSRmMjJlOTAwMCwkZmY1Y2YyMmUsJDQ4MjhmZjg0LCRmMjNjOTAwMAorCWRjLmwJJDAwMDAwMDAwLCRmMjAxYTgwMCwkODNhZWZmNjQsJGYyODEwMDNjCisJZGMubAkkMmYwMmYyMjcsJGUwMDEzMjJlLCRmZjVlZWMwOSwkMzQxNzAyODIKKwlkYy5sCSQwMDAwN2ZmZiwkOTQ4MGI0YmIsJDE0MjQ2YzM4LCRiNGJiMTQyYQorCWRjLmwJJDZkMDAwMGI4LCQ2NzAwMDE4NCwkMzIxNzAyNDEsJDgwMDA4MjQyCisJZGMubAkkM2U4MWYyMWYsJGQwODAyNDFmLCQ0ZTc1NGU3NSwkMDAwMDdmZmYKKwlkYy5sCSQwMDAwNDA3ZiwkMDAwMDQzZmYsJDAwMDAwMDAwLCQwMDAwM2Y4MQorCWRjLmwJJDAwMDAzYzAxLCQwMGFlMDAwMCwkMTA0OGZmNjQsJDEyMmVmZjYyCisJZGMubAkkMDIwMTAwMTMsJDY2MjRkZmZjLCQwMDAwMDAwYywkMDgyZTAwMDMKKwlkYy5sCSRmZjY0NTZjMSwkMjAyZWZmNWMsJDYxZmZmZmZmLCRkOGIyODEyZQorCWRjLmwJJGZmNjRmMjEwLCRkMDgwMjQxZiwkNGU3NTEyMmUsJGZmNWMwMjAxCisJZGMubAkkMDBjMDY2MWEsJDMyMTcwMjQxLCQ4MDAwMDQ4MiwkMDAwMDYwMDAKKwlkYy5sCSQwMjQyN2ZmZiwkODI0MjNlODEsJGYyMWZkMDQwLCQ2MGJlZjIyZQorCWRjLmwJJGQwODBmZjkwLCQyMjJlZmY1YywkMDIwMTAwMzAsJGYyMDE5MDAwCisJZGMubAkkZjIyZTQ4MjgsJGZmODRmMjNjLCQ5MDAwMDAwMCwkMDAwMGRmZmMKKwlkYy5sCSQwMDAwMDAwYywkZjIyN2UwMDEsJDYwYmEwOGVlLCQwMDAzZmY2NgorCWRjLmwJJGRmZmMwMDAwLCQwMDBjZjIyZSwkZDA4MGZmOTAsJGYyM2M5MDAwCisJZGMubAkkMDAwMDAwMTAsJGYyM2M4ODAwLCQwMDAwMDAwMCwkZjIyZTQ4MjgKKwlkYy5sCSRmZjg0ZjIzYywkOTAwMDAwMDAsJDAwMDBmMjAxLCRhODAwODNhZQorCWRjLmwJJGZmNjQxMjJlLCRmZjYyMDIwMSwkMDAwYjY2MjIsJGYyMmVmMDgwCisJZGMubAkkZmY4NDQxZWUsJGZmODQyMjJlLCRmZjVjNjFmZiwkZmZmZmQ3MDIKKwlkYy5sCSQ4MTJlZmY2NCwkZjIyZWQwODAsJGZmODQyNDFmLCQ0ZTc1ZjIyZQorCWRjLmwJJGQwNDBmZjkwLCQyMjJlZmY1YywkMDIwMTAwYzAsJDY2NGVmMjJlCisJZGMubAkkOTAwMGZmNWMsJGYyM2M4ODAwLCQwMDAwMDAwMCwkZjIyZTQ4YTgKKwlkYy5sCSRmZjg0ZjIzYywkOTAwMDAwMDAsJDAwMDBmMjJlLCRmMDQwZmY4NAorCWRjLmwJJDMyMmVmZjg0LCQyNDAxMDI4MSwkMDAwMDdmZmYsJDAyNDI4MDAwCisJZGMubAkkOTI4MDA2ODEsJDAwMDA2MDAwLCQwMjQxN2ZmZiwkODI0MjNkNDEKKwlkYy5sCSRmZjg0ZjIyZSwkZDA0MGZmODQsJDYwMDBmZjgyLCQyMjJlZmY1YworCWRjLmwJJDAyMDEwMDMwLCRmMjAxOTAwMCwkNjBhYTIyMmUsJGZmNWMwMjAxCisJZGMubAkkMDBjMDY3MDAsJGZlNzQyMjJmLCQwMDA0MGM4MSwkODAwMDAwMDAKKwlkYy5sCSQ2NjAwZmU2NiwkNGFhZjAwMDgsJDY2MDBmZTVlLCQwODJlMDAwMQorCWRjLmwJJGZmNjY2NzAwLCRmZTU0ZjIyZSwkZDA0MGZmOTAsJDIyMmVmZjVjCisJZGMubAkkMDIwMTAwYzAsJDAwMDEwMDEwLCRmMjAxOTAwMCwkZjIzYzg4MDAKKwlkYy5sCSQwMDAwMDAwMCwkZjIyZTQ4YTgsJGZmODRmMjNjLCQ5MDAwMDAwMAorCWRjLmwJJDAwMDBmMjAwLCQwMDE4ZjIwMCwkMDQ5OGYyMDAsJDA0MzhmMjkyCisJZGMubAkkZmVjYTYwMDAsJGZlMTQzMjNiLCQxMjBhNGVmYiwkMTAwNjRhZmMKKwlkYy5sCSQwMDMwZmRhYSwkMDBlMjAxMWEsJDAwNjBmZGFhLCQwMDY2MDAwMAorCWRjLmwJJDAwMDAwMGJhLCQwMDZjMDExYSwkMDA2MDAwYmEsJDAwNjYwMDAwCisJZGMubAkkMDAwMDAxMzAsJDAxMzAwMTBhLCQwMDYwMDEzMCwkMDA2NjAwMDAKKwlkYy5sCSQwMDAwMDA2MCwkMDA2MDAwNjAsJDAwNjAwMDYwLCQwMDY2MDAwMAorCWRjLmwJJDAwMDBmZGFhLCQwMGUyMDExYSwkMDA2MGZkYWEsJDAwNjYwMDAwCisJZGMubAkkMDAwMDAwNjYsJDAwNjYwMDY2LCQwMDY2MDA2NiwkMDA2NjAwMDAKKwlkYy5sCSQwMDAwNjBmZiwkZmZmZmQwMGEsJDYwZmZmZmZmLCRkMDA0MTAyOAorCWRjLmwJJDAwMDAxMjI5LCQwMDAwYjMwMCwkNmExNDRhMDAsJDZiMmVmMjNjCisJZGMubAkkNDQwMDAwMDAsJDAwMDAxZDdjLCQwMDA0ZmY2NCwkNGU3NTEyMmUKKwlkYy5sCSRmZjVmMDIwMSwkMDAzMDBjMDEsJDAwMjA2NzEwLCRmMjNjNDQwMAorCWRjLmwJJDAwMDAwMDAwLCQxZDdjMDAwNCwkZmY2NDRlNzUsJGYyM2M0NDAwCisJZGMubAkkODAwMDAwMDAsJDFkN2MwMDBjLCRmZjY0NGU3NSwkM2Q2ODAwMDAKKwlkYy5sCSRmZjg0MmQ2OCwkMDAwNGZmODgsJDJkNjgwMDA4LCRmZjhjNjFmZgorCWRjLmwJJGZmZmZjZWI4LCQ0MjZlZmY5MCwkNDJhZWZmOTQsJDQyYWVmZjk4CisJZGMubAkkNjAwMGZjZDAsJDNkNjkwMDAwLCRmZjkwMmQ2OSwkMDAwNGZmOTQKKwlkYy5sCSQyZDY5MDAwOCwkZmY5ODYxZmYsJGZmZmZjZjNjLCQ0MjZlZmY4NAorCWRjLmwJJDQyYWVmZjg4LCQ0MmFlZmY4YywkNjAwMGZjYTgsJDEwMjgwMDAwCisJZGMubAkkMTIyOTAwMDAsJGIzMDA2YWZmLCRmZmZmY2ZkYSwkZjIyOGQwODAKKwlkYy5sCSQwMDAwZjIwMCwkMDAxYWYyOTMsJDAwMWUxZDdjLCQwMDBhZmY2NAorCWRjLmwJJDRlNzVmMjI5LCRkMDgwMDAwMCwkNGEyOTAwMDAsJDZhMDgxZDdjCisJZGMubAkkMDAwYWZmNjQsJDRlNzUxZDdjLCQwMDAyZmY2NCwkNGU3NTAyMDAKKwlkYy5sCSQwMDMwMDAwMCwkMDA0MDYwMDgsJDAyMDAwMDMwLCQwMDAwMDA4MAorCWRjLmwJJDJkNDBmZjVjLCQ0MjQxMTIyZSwkZmY0ZTY2MDAsJDAyNzQ0YTI4CisJZGMubAkkMDAwMDZiZmYsJGZmZmZjZjdlLCQwMjAwMDBjMCwkNjY0OGYyMmUKKwlkYy5sCSQ5MDAwZmY1YywkZjIzYzg4MDAsJDAwMDAwMDAwLCRmMjEwNDgwNAorCWRjLmwJJGYyMDFhODAwLCQ4M2FlZmY2NCwkNGU3NTRhMjgsJDAwMDA2YmZmCisJZGMubAkkZmZmZmNmNTIsJDAyMDAwMGMwLCQ2NjFjM2Q2OCwkMDAwMGZmODQKKwlkYy5sCSQyZDY4MDAwNCwkZmY4ODJkNjgsJDAwMDhmZjhjLCQ2MWZmZmZmZgorCWRjLmwJJGNlMDQ2MDAwLCQwMDNlMGMwMCwkMDA0MDY2MDAsJDAwODQzZDY4CisJZGMubAkkMDAwMGZmODQsJDJkNjgwMDA0LCRmZjg4MmQ2OCwkMDAwOGZmOGMKKwlkYy5sCSQ2MWZmZmZmZiwkY2RlMDBjODAsJDAwMDAwMDdlLCQ2NzAwMDA5OAorCWRjLmwJJDZlMDAwMDllLCQwYzgwZmZmZiwkZmY4MDY3MDAsJDAxYTQ2ZDAwCisJZGMubAkkMDEyMGYyM2MsJDg4MDAwMDAwLCQwMDAwZjIyZSwkOTAwMGZmNWMKKwlkYy5sCSRmMjJlNDgwNCwkZmY4NGYyMDEsJGE4MDBmMjNjLCQ5MDAwMDAwMAorCWRjLmwJJDAwMDA4M2FlLCRmZjY0MmYwMiwkZjIyZWYwODAsJGZmODQzMjJlCisJZGMubAkkZmY4NDI0MDEsJDAyODEwMDAwLCQ3ZmZmOTI4MCwkMDI0MjgwMDAKKwlkYy5sCSQ4NDQxM2Q0MiwkZmY4NDI0MWYsJGYyMmVkMDgwLCRmZjg0NGU3NQorCWRjLmwJJDNkNjgwMDAwLCRmZjg0MmQ2OCwkMDAwNGZmODgsJDJkNjgwMDA4CisJZGMubAkkZmY4YzYxZmYsJGZmZmZjZDVlLCQwYzgwMDAwMCwkMDNmZTY3MDAKKwlkYy5sCSQwMDE2NmUxYywkMGM4MGZmZmYsJGZjMDA2NzAwLCQwMTI0NmQwMAorCWRjLmwJJDAwYTA2MDAwLCRmZjdlMDgyZSwkMDAwMGZmODUsJDY2MDBmZjc0CisJZGMubAkkMDhlZTAwMDMsJGZmNjZmMjNjLCQ5MDAwMDAwMCwkMDAxMGYyM2MKKwlkYy5sCSQ4ODAwMDAwMCwkMDAwMGYyMmUsJDQ4MDRmZjg0LCRmMjAxYTgwMAorCWRjLmwJJGYyM2M5MDAwLCQwMDAwMDAwMCwkODNhZWZmNjQsJDEyMmVmZjYyCisJZGMubAkkMDIwMTAwMGIsJDY2MjBmMjJlLCRmMDgwZmY4NCwkNDFlZWZmODQKKwlkYy5sCSQyMjJlZmY1YywkNjFmZmZmZmYsJGQzMzg4MTJlLCRmZjY0ZjIyZQorCWRjLmwJJGQwODBmZjg0LCQ0ZTc1MmQ2ZSwkZmY4OGZmOTQsJDJkNmVmZjhjCisJZGMubAkkZmY5ODMyMmUsJGZmODQyZjAyLCQyNDAxMDI4MSwkMDAwMDdmZmYKKwlkYy5sCSQwMjQyODAwMCwkOTI4MDA2ODEsJDAwMDA2MDAwLCQwMjQxN2ZmZgorCWRjLmwJJDgyNDIzZDQxLCRmZjkwZjIyZSwkZDA0MGZmOTAsJDI0MWY2MGE2CisJZGMubAkkZjIzYzg4MDAsJDAwMDAwMDAwLCRmMjJlOTAwMCwkZmY1Y2YyMmUKKwlkYy5sCSQ0ODA0ZmY4NCwkZjIzYzkwMDAsJDAwMDAwMDAwLCRmMjAxYTgwMAorCWRjLmwJJDgzYWVmZjY0LCQwMGFlMDAwMCwkMTA0OGZmNjQsJDEyMmVmZjYyCisJZGMubAkkMDIwMTAwMTMsJDY2MWMwODJlLCQwMDAzZmY2NCwkNTZjMTIwMmUKKwlkYy5sCSRmZjVjNjFmZiwkZmZmZmQzYTgsJDgxMmVmZjY0LCRmMjEwZDA4MAorCWRjLmwJJDRlNzUyZjAyLCQzMjJlZmY4NCwkMjQwMTAyODEsJDAwMDA3ZmZmCisJZGMubAkkMDI0MjgwMDAsJDkyODAwNDgxLCQwMDAwNjAwMCwkMDI0MTdmZmYKKwlkYy5sCSQ4MjQyM2Q0MSwkZmY4NGYyMmUsJGQwNDBmZjg0LCQyNDFmNjBiNgorCWRjLmwJJDA4MmUwMDAwLCRmZjg1NjYwMCwkZmY3OGYyM2MsJDg4MDAwMDAwCisJZGMubAkkMDAwMGYyMmUsJDkwMDBmZjVjLCRmMjJlNDgwNCwkZmY4NGYyMDEKKwlkYy5sCSRhODAwZjIzYywkOTAwMDAwMDAsJDAwMDA4M2FlLCRmZjY0ZjIwMAorCWRjLmwJJDAwODBmMjNjLCQ1OGI4MDAwMSwkZjI5M2ZmNmEsJDYwMDBmZTQ4CisJZGMubAkkMGMwMTAwMDQsJDY3MDBmZGI0LCQwYzAxMDAwMSwkNjcxNjBjMDEKKwlkYy5sCSQwMDAyNjczNiwkMGMwMTAwMDUsJDY3ZmZmZmZmLCRjYzhjNjBmZgorCWRjLmwJJGZmZmZjYzlhLCQ0YTI4MDAwMCwkNmIxMGYyM2MsJDQ0MDAwMDAwCisJZGMubAkkMDAwMDFkN2MsJDAwMDRmZjY0LCQ0ZTc1ZjIzYywkNDQwMDgwMDAKKwlkYy5sCSQwMDAwMWQ3YywkMDAwY2ZmNjQsJDRlNzU0YTI4LCQwMDAwNmJmZgorCWRjLmwJJGZmZmZjY2MyLCRmMjI4ZDA4MCwkMDAwMDFkN2MsJDAwMDJmZjY0CisJZGMubAkkNGU3NTMwM2IsJDEyMDY0ZWZiLCQwMDAyMDAyMCwkMDAyNjAwMmMKKwlkYy5sCSQwMDMwMDAzNCwkMDAzODAwM2MsJDAwNDAwMDQ0LCQwMDRhMDA1MAorCWRjLmwJJDAwNTQwMDU4LCQwMDVjMDA2MCwkMDA2NDIwMmUsJGZmOWM0ZTc1CisJZGMubAkkMjAyZWZmYTAsJDRlNzUyMDAyLCQ0ZTc1MjAwMywkNGU3NTIwMDQKKwlkYy5sCSQ0ZTc1MjAwNSwkNGU3NTIwMDYsJDRlNzUyMDA3LCQ0ZTc1MjAyZQorCWRjLmwJJGZmYTQ0ZTc1LCQyMDJlZmZhOCwkNGU3NTIwMGEsJDRlNzUyMDBiCisJZGMubAkkNGU3NTIwMGMsJDRlNzUyMDBkLCQ0ZTc1MjAxNiwkNGU3NTIwMmUKKwlkYy5sCSRmZmQ4NGU3NSwkMzIzYjEyMDYsJDRlZmIxMDAyLCQwMDEwMDAxNgorCWRjLmwJJDAwMWMwMDIwLCQwMDI0MDAyOCwkMDAyYzAwMzAsJDJkNDBmZjljCisJZGMubAkkNGU3NTJkNDAsJGZmYTA0ZTc1LCQyNDAwNGU3NSwkMjYwMDRlNzUKKwlkYy5sCSQyODAwNGU3NSwkMmEwMDRlNzUsJDJjMDA0ZTc1LCQyZTAwNGU3NQorCWRjLmwJJDMyM2IxMjA2LCQ0ZWZiMTAwMiwkMDAxMDAwMTYsJDAwMWMwMDIwCisJZGMubAkkMDAyNDAwMjgsJDAwMmMwMDMwLCQzZDQwZmY5ZSwkNGU3NTNkNDAKKwlkYy5sCSRmZmEyNGU3NSwkMzQwMDRlNzUsJDM2MDA0ZTc1LCQzODAwNGU3NQorCWRjLmwJJDNhMDA0ZTc1LCQzYzAwNGU3NSwkM2UwMDRlNzUsJDMyM2IxMjA2CisJZGMubAkkNGVmYjEwMDIsJDAwMTAwMDE2LCQwMDFjMDAyMCwkMDAyNDAwMjgKKwlkYy5sCSQwMDJjMDAzMCwkMWQ0MGZmOWYsJDRlNzUxZDQwLCRmZmEzNGU3NQorCWRjLmwJJDE0MDA0ZTc1LCQxNjAwNGU3NSwkMTgwMDRlNzUsJDFhMDA0ZTc1CisJZGMubAkkMWMwMDRlNzUsJDFlMDA0ZTc1LCQzMjNiMTIwNiwkNGVmYjEwMDIKKwlkYy5sCSQwMDEwMDAxNiwkMDAxYzAwMjAsJDAwMjQwMDI4LCQwMDJjMDAzMAorCWRjLmwJJGQxYWVmZmE0LCQ0ZTc1ZDFhZSwkZmZhODRlNzUsJGQ1YzA0ZTc1CisJZGMubAkkZDdjMDRlNzUsJGQ5YzA0ZTc1LCRkYmMwNGU3NSwkZDE5NjRlNzUKKwlkYy5sCSQxZDdjMDAwNCwkZmY0YTBjMDAsJDAwMDE2NzA2LCRkMWFlZmZkOAorCWRjLmwJJDRlNzU1NGFlLCRmZmQ4NGU3NSwkMzIzYjEyMDYsJDRlZmIxMDAyCisJZGMubAkkMDAxMDAwMTYsJDAwMWMwMDIwLCQwMDI0MDAyOCwkMDAyYzAwMzAKKwlkYy5sCSQ5MWFlZmZhNCwkNGU3NTkxYWUsJGZmYTg0ZTc1LCQ5NWMwNGU3NQorCWRjLmwJJDk3YzA0ZTc1LCQ5OWMwNGU3NSwkOWJjMDRlNzUsJDkxOTY0ZTc1CisJZGMubAkkMWQ3YzAwMDgsJGZmNGEwYzAwLCQwMDAxNjcwNiwkOTFhZWZmZDgKKwlkYy5sCSQ0ZTc1NTVhZSwkZmZkODRlNzUsJDMwM2IwMjA2LCQ0ZWZiMDAwMgorCWRjLmwJJDAwMTAwMDI4LCQwMDQwMDA0YywkMDA1ODAwNjQsJDAwNzAwMDdjCisJZGMubAkkMmQ2ZWZmZGMsJGZmNmMyZDZlLCRmZmUwZmY3MCwkMmQ2ZWZmZTQKKwlkYy5sCSRmZjc0NDFlZSwkZmY2YzRlNzUsJDJkNmVmZmU4LCRmZjZjMmQ2ZQorCWRjLmwJJGZmZWNmZjcwLCQyZDZlZmZmMCwkZmY3NDQxZWUsJGZmNmM0ZTc1CisJZGMubAkkZjIyZWYwMjAsJGZmNmM0MWVlLCRmZjZjNGU3NSwkZjIyZWYwMTAKKwlkYy5sCSRmZjZjNDFlZSwkZmY2YzRlNzUsJGYyMmVmMDA4LCRmZjZjNDFlZQorCWRjLmwJJGZmNmM0ZTc1LCRmMjJlZjAwNCwkZmY2YzQxZWUsJGZmNmM0ZTc1CisJZGMubAkkZjIyZWYwMDIsJGZmNmM0MWVlLCRmZjZjNGU3NSwkZjIyZWYwMDEKKwlkYy5sCSRmZjZjNDFlZSwkZmY2YzRlNzUsJDMwM2IwMjA2LCQ0ZWZiMDAwMgorCWRjLmwJJDAwMTAwMDI4LCQwMDQwMDA0YywkMDA1ODAwNjQsJDAwNzAwMDdjCisJZGMubAkkMmQ2ZWZmZGMsJGZmNzgyZDZlLCRmZmUwZmY3YywkMmQ2ZWZmZTQKKwlkYy5sCSRmZjgwNDFlZSwkZmY3ODRlNzUsJDJkNmVmZmU4LCRmZjc4MmQ2ZQorCWRjLmwJJGZmZWNmZjdjLCQyZDZlZmZmMCwkZmY4MDQxZWUsJGZmNzg0ZTc1CisJZGMubAkkZjIyZWYwMjAsJGZmNzg0MWVlLCRmZjc4NGU3NSwkZjIyZWYwMTAKKwlkYy5sCSRmZjc4NDFlZSwkZmY3ODRlNzUsJGYyMmVmMDA4LCRmZjc4NDFlZQorCWRjLmwJJGZmNzg0ZTc1LCRmMjJlZjAwNCwkZmY3ODQxZWUsJGZmNzg0ZTc1CisJZGMubAkkZjIyZWYwMDIsJGZmNzg0MWVlLCRmZjc4NGU3NSwkZjIyZWYwMDEKKwlkYy5sCSRmZjc4NDFlZSwkZmY3ODRlNzUsJDMwM2IwMjA2LCQ0ZWZiMDAwMgorCWRjLmwJJDAwMTAwMDE4LCQwMDIwMDAyYSwkMDAzNDAwM2UsJDAwNDgwMDUyCisJZGMubAkkZjIyZWYwODAsJGZmZGM0ZTc1LCRmMjJlZjA4MCwkZmZlODRlNzUKKwlkYy5sCSRmMjI3ZTAwMSwkZjIxZmQwMjAsJDRlNzVmMjI3LCRlMDAxZjIxZgorCWRjLmwJJGQwMTA0ZTc1LCRmMjI3ZTAwMSwkZjIxZmQwMDgsJDRlNzVmMjI3CisJZGMubAkkZTAwMWYyMWYsJGQwMDQ0ZTc1LCRmMjI3ZTAwMSwkZjIxZmQwMDIKKwlkYy5sCSQ0ZTc1ZjIyNywkZTAwMWYyMWYsJGQwMDE0ZTc1LCQ3MDBjNjFmZgorCWRjLmwJJGZmZmZiYWNlLCQ0M2VlZmY2YywkNzAwYzYxZmYsJGZmZmZhMGQ4CisJZGMubAkkNGE4MTY2ZmYsJDAwMDAwYTE0LCRlOWVlMDA0ZiwkZmY2YzBjNDAKKwlkYy5sCSQ3ZmZmNjYwMiwkNGU3NTEwMmUsJGZmNmYwMjAwLCQwMDBmNjYwZQorCWRjLmwJJDRhYWVmZjcwLCQ2NjA4NGFhZSwkZmY3NDY2MDIsJDRlNzU0MWVlCisJZGMubAkkZmY2YzYxZmYsJDAwMDAwMDFjLCRmMjJlZjA4MCwkZmY2YzRlNzUKKwlkYy5sCSQwMDAwMDAwMCwkMDIwMzAyMDMsJDAyMDMwMzAyLCQwMzAyMDIwMworCWRjLmwJJDJkNjgwMDAwLCRmZjg0MmQ2OCwkMDAwNGZmODgsJDJkNjgwMDA4CisJZGMubAkkZmY4YzQxZWUsJGZmODQ0OGU3LCQzYzAwZjIyNywkZTAwMTc0MDIKKwlkYy5sCSQ3NjA0MjgxMCwkNDI4MTRjM2MsJDEwMDEwMDAwLCQwMDBhZTljNAorCWRjLmwJJDA4YzRkMjgwLCQ1ODAzNTFjYSwkZmZlZTA4MDQsJDAwMWU2NzAyCisJZGMubAkkNDQ4MTA0ODEsJDAwMDAwMDEwLCQ2YzBlNDQ4MSwkMDA4NDQwMDAKKwlkYy5sCSQwMDAwMDA5MCwkNDAwMDAwMDAsJDJmMDE3MjAxLCRmMjNjNDQwMAorCWRjLmwJJDAwMDAwMDAwLCRlOWQwMDcwNCwkZjIwMDU4MjIsJDI4MzAxYzAwCisJZGMubAkkNzYwMDc0MDcsJGYyM2M0NDIzLCQ0MTIwMDAwMCwkZTljNDA4YzQKKwlkYy5sCSRmMjAwNTgyMiwkNTgwMzUxY2EsJGZmZWM1MjgxLCQwYzgxMDAwMAorCWRjLmwJJDAwMDI2ZmQ4LCQwODEwMDAxZiwkNjcwNGYyMDAsJDAwMWEyMjE3CisJZGMubAkkMGM4MTAwMDAsJDAwMWI2ZjAwLCQwMGU0MDgxMCwkMDAxZTY2NzQKKwlkYy5sCSQ0MjgxMjgxMCwkZTljNDA3MDQsJDY2MjQ1MjgxLCQ3YTAxMjgzMAorCWRjLmwJJDVjMDA2NjA4LCQ1MDgxNTI4NSwkMjgzMDVjMDAsJDQyODM3NDA3CisJZGMubAkkZTljNDA4YzQsJDY2MDg1ODgzLCQ1MjgxNTFjYSwkZmZmNDIwMDEKKwlkYy5sCSQyMjE3OTI4MCwkNmMxMDQ0ODEsJDI4MTAwMDg0LCQ0MDAwMDAwMAorCWRjLmwJJDAwOTA0MDAwLCQwMDAwNDNmYiwkMDE3MDAwMDAsJDA2NjY0MjgzCisJZGMubAkkZjIzYzQ0ODAsJDNmODAwMDAwLCQ3NDAzZTI4MCwkNjQwNmYyMzEKKwlkYy5sCSQ0OGEzMzgwMCwkMDY4MzAwMDAsJDAwMGM0YTgwLCQ2NmVjZjIwMAorCWRjLmwJJDA0MjM2MDY4LCQ0MjgxN2EwMiwkMjgzMDVjMDAsJDY2MDg1Mzg1CisJZGMubAkkNTA4MTI4MzAsJDVjMDA3NjFjLCQ3NDA3ZTljNCwkMDhjNDY2MDgKKwlkYy5sCSQ1OTgzNTI4MSwkNTFjYWZmZjQsJDIwMDEyMjE3LCQ5MjgwNmUxMAorCWRjLmwJJDQ0ODEyODEwLCQwMjg0YmZmZiwkZmZmZjAyOTAsJGJmZmZmZmZmCisJZGMubAkkNDNmYjAxNzAsJDAwMDAwNWZjLCQ0MjgzZjIzYywkNDQ4MDNmODAKKwlkYy5sCSQwMDAwNzQwMywkZTI4MDY0MDYsJGYyMzE0OGEzLCQzODAwMDY4MworCWRjLmwJJDAwMDAwMDBjLCQ0YTgwNjZlYywkZjIwMDA0MjAsJDI2MmVmZjYwCisJZGMubAkkZTljMzI2ODIsJDI4MTBlNTgyLCRlOWM0MDAwMiwkZDQ4MDQzZmEKKwlkYy5sCSRmZTUwMTAzMSwkMjgwMDQyODMsJGVmYzMwNjgyLCRmMjAzOTAwMAorCWRjLmwJJGUyODA2NDBhLCQ0M2ZiMDE3MCwkMDAwMDA2NDQsJDYwMTZlMjgwCisJZGMubAkkNjQwYTQzZmIsJDAxNzAwMDAwLCQwNmQyNjAwOCwkNDNmYjAxNzAKKwlkYy5sCSQwMDAwMDU5MCwkMjAwMTZhMDgsJDQ0ODAwMDkwLCQ0MDAwMDAwMAorCWRjLmwJJDQyODNmMjNjLCQ0NDgwM2Y4MCwkMDAwMGUyODAsJDY0MDZmMjMxCisJZGMubAkkNDhhMzM4MDAsJDA2ODMwMDAwLCQwMDBjNGE4MCwkNjZlYzA4MTAKKwlkYy5sCSQwMDFlNjcwNiwkZjIwMDA0MjAsJDYwMDRmMjAwLCQwNDIzZjIwMAorCWRjLmwJJGE4MDAwODgwLCQwMDA5NjcwNiwkMDA2ZTAxMDgsJGZmNjY1ODhmCisJZGMubAkkZjIxZmQwNDAsJDRjZGYwMDNjLCRmMjNjOTAwMCwkMDAwMDAwMDAKKwlkYy5sCSRmMjNjODgwMCwkMDAwMDAwMDAsJDRlNzUzZmZkLCQwMDAwOWEyMAorCWRjLmwJJDlhODRmYmNmLCRmNzk4MDAwMCwkMDAwMDNmZmQsJDAwMDA5YTIwCisJZGMubAkkOWE4NGZiY2YsJGY3OTkwMDAwLCQwMDAwM2Y4MCwkMDAwMDAwMDAKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDA0MDAwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDAwMDAwLCQwMDAwMDAwMCwkMDAwMDQxMjAsJDAwMDAwMDAwCisJZGMubAkkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwNDU5YSwkMjgwMDAwMDAKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwLCQwMDAwMDMwMworCWRjLmwJJDAyMDIwMzAyLCQwMjAzMDIwMywkMDMwMjQ4ZTcsJDNmMjBmMjI3CisJZGMubAkkZTAwN2YyM2MsJDkwMDAwMDAwLCQwMDIwMmQ1MCwkZmY1ODJlMDAKKwlkYy5sCSQ0MjJlZmY1MCwkMGMyZTAwMDQsJGZmNGU2NjAwLCQwMDMwMzAxMAorCWRjLmwJJDAyNDA3ZmZmLCQyMjI4MDAwNCwkMjQyODAwMDgsJDUzNDBlMzhhCisJZGMubAkkZTM5MTRhODEsJDZjZjY0YTQwLCQ2ZTA0NTBlZSwkZmY1MDAyNDAKKwlkYy5sCSQ3ZmZmMzA4MCwkMjE0MTAwMDQsJDIxNDIwMDA4LCQyZDUwZmY5MAorCWRjLmwJJDJkNjgwMDA0LCRmZjk0MmQ2OCwkMDAwOGZmOTgsJDAyYWU3ZmZmCisJZGMubAkkZmZmZmZmOTAsJDRhMmVmZjUwLCQ2NzA4MmMzYywkZmZmZmVjYmIKKwlkYy5sCSQ2MDM4MzAyZSwkZmY5MDNkN2MsJDNmZmZmZjkwLCRmMjJlNDgwMAorCWRjLmwJJGZmOTAwNDQwLCQzZmZmZjIwMCwkNTAyMmYyM2EsJDQ0MjhmZjFjCisJZGMubAkkZjI5MzAwMGUsJGYyM2E0ODIzLCRmZjAyZjIwNiwkNjAwMDYwMGEKKwlkYy5sCSRmMjNhNDgyMywkZmVlNmYyMDYsJDYwMDBmMjNjLCQ4ODAwMDAwMAorCWRjLmwJJDAwMDA0MjQ1LCQ0YTg3NmYwNCwkMjgwNzYwMDYsJDI4MDY5ODg3CisJZGMubAkkNTI4NDRhODQsJDZmMTgwYzg0LCQwMDAwMDAxMSwkNmYxMjc4MTEKKwlkYy5sCSQ0YTg3NmYwYywkMDBhZTAwMDAsJDIwODBmZjY0LCQ2MDAyNzgwMQorCWRjLmwJJDRhODc2ZTA2LCRiZTg2NmQwMiwkMmMwNzIwMDYsJDUyODA5MDg0CisJZGMubAkkNDg0NTQyNDUsJDQyNDI0YTgwLCQ2YzE0NTI0NSwkMGM4MGZmZmYKKwlkYy5sCSRlY2Q0NmUwOCwkMDY4MDAwMDAsJDAwMTg3NDE4LCQ0NDgwZjIzYQorCWRjLmwJJDQ0ODBmZTk4LCRlOWVlMTY4MiwkZmY2MGUzNDksJGQyNDVlMzQ5CisJZGMubAkkNGFhZWZmNTgsJDZjMDI1MjgxLCQ0NWZhZmVjMCwkMTYzMjE4MDAKKwlkYy5sCSRlOThiZjIwMywkOTAwMGU4OGIsJDRhMDM2NjBhLCQ0M2ZiMDE3MAorCWRjLmwJJDAwMDAwMzcwLCQ2MDE2ZTIwYiwkNjQwYTQzZmIsJDAxNzAwMDAwCisJZGMubAkkMDNmZTYwMDgsJDQzZmIwMTcwLCQwMDAwMDQ5MCwkNDI4M2UyODgKKwlkYy5sCSQ2NDA2ZjIzMSwkNDhhMzM4MDAsJDA2ODMwMDAwLCQwMDBjNGE4MAorCWRjLmwJJDY2ZWNmMjNjLCQ4ODAwMDAwMCwkMDAwMGYyM2MsJDkwMDAwMDAwCisJZGMubAkkMDAxMGYyMTAsJDQ4MDBmMjAwLCQwMDE4NGE0NSwkNjYwOGYyMDAKKwlkYy5sCSQwNDIwNjAwMCwkMDA4ZTRhMmUsJGZmNTA2NzAwLCQwMDcyZjIyNworCWRjLmwJJGUwMDIzNjE3LCQwMjQzN2ZmZiwkMDA1MDgwMDAsJGQ2NTAwNDQzCisJZGMubAkkM2ZmZmQ2NjksJDAwMjQwNDQzLCQzZmZmZDY2OSwkMDAzMDA0NDMKKwlkYy5sCSQzZmZmNmIwMCwkMDA0ODAyNTcsJDgwMDA4NzU3LCQwMjUwN2ZmZgorCWRjLmwJJDJmMjgwMDA4LCQyZjI4MDAwNCwkMmYzYzNmZmYsJDAwMDBmMjFmCisJZGMubAkkZDA4MGYyMWYsJDQ4MjMyZjI5LCQwMDJjMmYyOSwkMDAyODJmM2MKKwlkYy5sCSQzZmZmMDAwMCwkMmYyOTAwMzgsJDJmMjkwMDM0LCQyZjNjM2ZmZgorCWRjLmwJJDAwMDBmMjFmLCQ0ODIzZjIxZiwkNDgyMzYwMTYsJDYwZmU0YTQyCisJZGMubAkkNjcwY2YyMjksJDQ4MjMwMDI0LCRmMjI5NDgyMywkMDAzMGYyMDAKKwlkYy5sCSQwNDIzZjIwMCwkYTgwMGYyMmUsJDY4MDBmZjkwLCQ0NWVlZmY5MAorCWRjLmwJJDA4MDAwMDA5LCQ2NzBlMDBhYSwkMDAwMDAwMDEsJDAwMDhmMjJlCisJZGMubAkkNDgwMGZmOTAsJDJkNmVmZjYwLCRmZjU0MDJhZSwkMDAwMDAwMzAKKwlkYy5sCSRmZjYwNDhlNywkYzBjMDJmMmUsJGZmNTQyZjJlLCRmZjU4NDFlZQorCWRjLmwJJGZmOTBmMjEwLCQ2ODAwNGFhZSwkZmY1ODZjMDYsJDAwOTA4MDAwCisJZGMubAkkMDAwMDJmMmUsJGZmNjRmMjJlLCQ5MDAwZmY2MCwkZjIzYzg4MDAKKwlkYy5sCSQwMDAwMDAwMCwkZjIyZTQ4MDEsJGZmOTBmMjAwLCRhODAwODE2ZQorCWRjLmwJJGZmNjYxZDU3LCRmZjY0NTg4ZiwkMmQ1ZmZmNTgsJDJkNWZmZjU0CisJZGMubAkkNGNkZjAzMDMsJDJkNmVmZjU4LCRmZjkwMmQ2ZSwkZmY1NGZmNjAKKwlkYy5sCSQ0ODQ1NGE0NSwkNjZmZjAwMDAsJDAwODZmMjNhLCQ0NTAwZmNlYworCWRjLmwJJDIwMDQ1MzgwLCQ0MjgzZTI4OCwkNjQwNmYyMzEsJDQ5MjMzODAwCisJZGMubAkkMDY4MzAwMDAsJDAwMGM0YTgwLCQ2NmVjNGEyZSwkZmY1MDY3MGEKKwlkYy5sCSRmMjAwMDAxOCwkNjBmZjAwMDAsJDAwMjhmMjAwLCQwMDE4ZjIwMAorCWRjLmwJJDA4MzhmMjkzLCQwMDFhNTM4NiwkM2EzYzAwMDEsJGYyM2M5MDAwCisJZGMubAkkMDAwMDAwMjAsJGYyM2E0NTIzLCRmY2MyNjAwMCwkZmRhOGYyM2EKKwlkYy5sCSQ0NTIzZmNiOCwkZjIwMDA4MzgsJGYyOTQwMDVjLCRmMjkyMDAwYworCWRjLmwJJGYyM2E0NDIwLCRmY2E2NTI4NiwkNjA0YzUyODYsJDNhM2MwMDAxCisJZGMubAkkZjIzYzkwMDAsJDAwMDAwMDIwLCQ2MDAwZmQ3YSwkZjIzYTQ1MDAKKwlkYy5sCSRmYzZhMjAwNCwkNDI4M2UyODgsJDY0MDZmMjMxLCQ0OTIzMzgwMAorCWRjLmwJJDA2ODMwMDAwLCQwMDBjNGE4MCwkNjZlY2YyMDAsJDAwMThmMjAwCisJZGMubAkkMDgzOGYyOGUsJDAwMTJmMjNhLCQ0NDIwZmM2MCwkNTI4NjUyODQKKwlkYy5sCSRmMjNhNDUyMywkZmM1NmYyM2MsJDkwMDAwMDAwLCQwMDEwZjIwMAorCWRjLmwJJDA4MjA0MWVlLCRmZjg0ZjIxMCwkNjgwMDI0MjgsJDAwMDQyNjI4CisJZGMubAkkMDAwODQyYTgsJDAwMDQ0MmE4LCQwMDA4MjAxMCwkNDg0MDY3MTQKKwlkYy5sCSQwNDgwMDAwMCwkM2ZmZDRhODAsJDZlMGE0NDgwLCRlMjhhZTI5MworCWRjLmwJJDUxYzhmZmZhLCQ0YTgyNjYwNCwkNGE4MzY3MTAsJDQyODEwNjgzCisJZGMubAkkMDAwMDAwODAsJGQ1ODEwMjgzLCRmZmZmZmY4MCwkMjAwNDU2ODgKKwlkYy5sCSQ2MWZmMDAwMCwkMDJiMDRhMmUsJGZmNTA2NzI4LCRmMjAwMDAzYQorCWRjLmwJJGYyODEwMDBjLCRmMjA2NDAwMCwkZjIwMDAwMTgsJDYwMmU0YTg3CisJZGMubAkkNmQwOGYyM2EsJDQ0MDBmYmU0LCQ2MDIyZjIwNiwkNDAwMGYyMDAKKwlkYy5sCSQwMDE4NjAxOCwkZjIwMDAwM2EsJGYyOGUwMDBhLCRmMjNhNDQwMAorCWRjLmwJJGZiOWE2MDA4LCRmMjA2NDAwMCwkZjIwMDAwMTgsJGYyMjk0ODIwCisJZGMubAkkMDAxOGYyMmUsJDY4MDBmZjkwLCQyNDJhMDAwNCwkMjYyYTAwMDgKKwlkYy5sCSQzMDEyNjcwZSwkMDQ0MDNmZmQsJDQ0NDBlMjhhLCRlMjkzNTFjOAorCWRjLmwJJGZmZmE0MjgxLCQwNjgzMDAwMCwkMDA4MGQ1ODEsJDAyODNmZmZmCisJZGMubAkkZmY4MDcwMDQsJDQxZWVmZjU0LCQ2MWZmMDAwMCwkMDIyODIwMmUKKwlkYy5sCSRmZjU0NzIwYywkZTJhOGVmZWUsJDAxMGNmZjg0LCRlMmE4ZWZlZQorCWRjLmwJJDA0MDRmZjg0LCQ0YTAwNjcwOCwkMDBhZTAwMDAsJDIwODBmZjY0CisJZGMubAkkNDI4MDAyMmUsJDAwMGZmZjg0LCQ0YWFlZmY1OCwkNmMwMjcwMDIKKwlkYy5sCSQ0YTg2NmMwMiwkNTI4MGVmZWUsJDAwMDJmZjg0LCRmMjNjODgwMAorCWRjLmwJJDAwMDAwMDAwLCRmMjFmZDBlMCwkNGNkZjA0ZmMsJDRlNzU0MDAyCisJZGMubAkkMDAwMGEwMDAsJDAwMDAwMDAwLCQwMDAwNDAwNSwkMDAwMGM4MDAKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDQwMGMsJDAwMDA5YzQwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDA0MDE5LCQwMDAwYmViYywkMjAwMDAwMDAsJDAwMDA0MDM0CisJZGMubAkkMDAwMDhlMWIsJGM5YmYwNDAwLCQwMDAwNDA2OSwkMDAwMDlkYzUKKwlkYy5sCSRhZGE4MmI3MCwkYjU5ZTQwZDMsJDAwMDBjMjc4LCQxZjQ5ZmZjZgorCWRjLmwJJGE2ZDU0MWE4LCQwMDAwOTNiYSwkNDdjOTgwZTksJDhjZTA0MzUxCisJZGMubAkkMDAwMGFhN2UsJGViZmI5ZGY5LCRkZThlNDZhMywkMDAwMGUzMTkKKwlkYy5sCSRhMGFlYTYwZSwkOTFjNzRkNDgsJDAwMDBjOTc2LCQ3NTg2ODE3NQorCWRjLmwJJDBjMTc1YTkyLCQwMDAwOWU4YiwkM2I1ZGM1M2QsJDVkZTU3NTI1CisJZGMubAkkMDAwMGM0NjAsJDUyMDI4YTIwLCQ5NzliNDAwMiwkMDAwMGEwMDAKKwlkYy5sCSQwMDAwMDAwMCwkMDAwMDQwMDUsJDAwMDBjODAwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDA0MDBjLCQwMDAwOWM0MCwkMDAwMDAwMDAsJDAwMDA0MDE5CisJZGMubAkkMDAwMGJlYmMsJDIwMDAwMDAwLCQwMDAwNDAzNCwkMDAwMDhlMWIKKwlkYy5sCSRjOWJmMDQwMCwkMDAwMDQwNjksJDAwMDA5ZGM1LCRhZGE4MmI3MAorCWRjLmwJJGI1OWU0MGQzLCQwMDAwYzI3OCwkMWY0OWZmY2YsJGE2ZDY0MWE4CisJZGMubAkkMDAwMDkzYmEsJDQ3Yzk4MGU5LCQ4Y2UwNDM1MSwkMDAwMGFhN2UKKwlkYy5sCSRlYmZiOWRmOSwkZGU4ZTQ2YTMsJDAwMDBlMzE5LCRhMGFlYTYwZQorCWRjLmwJJDkxYzc0ZDQ4LCQwMDAwYzk3NiwkNzU4NjgxNzUsJDBjMTg1YTkyCisJZGMubAkkMDAwMDllOGIsJDNiNWRjNTNkLCQ1ZGU1NzUyNSwkMDAwMGM0NjAKKwlkYy5sCSQ1MjAyOGEyMCwkOTc5YjQwMDIsJDAwMDBhMDAwLCQwMDAwMDAwMAorCWRjLmwJJDAwMDA0MDA1LCQwMDAwYzgwMCwkMDAwMDAwMDAsJDAwMDA0MDBjCisJZGMubAkkMDAwMDljNDAsJDAwMDAwMDAwLCQwMDAwNDAxOSwkMDAwMGJlYmMKKwlkYy5sCSQyMDAwMDAwMCwkMDAwMDQwMzQsJDAwMDA4ZTFiLCRjOWJmMDQwMAorCWRjLmwJJDAwMDA0MDY5LCQwMDAwOWRjNSwkYWRhODJiNzAsJGI1OWQ0MGQzCisJZGMubAkkMDAwMGMyNzgsJDFmNDlmZmNmLCRhNmQ1NDFhOCwkMDAwMDkzYmEKKwlkYy5sCSQ0N2M5ODBlOSwkOGNkZjQzNTEsJDAwMDBhYTdlLCRlYmZiOWRmOQorCWRjLmwJJGRlOGQ0NmEzLCQwMDAwZTMxOSwkYTBhZWE2MGUsJDkxYzY0ZDQ4CisJZGMubAkkMDAwMGM5NzYsJDc1ODY4MTc1LCQwYzE3NWE5MiwkMDAwMDllOGIKKwlkYy5sCSQzYjVkYzUzZCwkNWRlNDc1MjUsJDAwMDBjNDYwLCQ1MjAyOGEyMAorCWRjLmwJJDk3OWE0OGU3LCRmZjAwN2UwMSwkNTM4MDI4MDIsJDJhMDNlOWMyCisJZGMubAkkMTAwM2U3ODIsJGU5YzM2MDAzLCRlNzgzODQ4NiwkZTM4NWUzOTQKKwlkYy5sCSQ0ODQ2ZDM0NiwkZDY4NTRlNzEsJGQ1ODQ0ZTcxLCRkMzQ2NDg0NgorCWRjLmwJJDRhNDc2NzEyLCQ0ODQ3ZTk0NywkZGU0MTEwYzcsJDQ4NDc0MjQ3CisJZGMubAkkNTFjOGZmYzgsJDYwMTI0ODQ3LCQzZTAxNDg0NywkNTI0NzUxYzgKKwlkYy5sCSRmZmJhNDg0NywkZTk0ZjEwYzcsJDRjZGYwMGZmLCQ0ZTc1NzAwMQorCWRjLmwJJDYxMDAwMGQ2LCQzZDdjMDEyMSwkMDAwYTYwMDAsJDAwN2U3MDAyCisJZGMubAkkNjEwMDAwYzYsJDNkN2MwMTQxLCQwMDBhNjA2ZSwkNzAwNDYxMDAKKwlkYy5sCSQwMGI4M2Q3YywkMDEwMTAwMGEsJDYwNjA3MDA4LCQ2MTAwMDBhYQorCWRjLmwJJDNkN2MwMTYxLCQwMDBhNjA1MiwkNzAwYzYxMDAsJDAwOWMzZDdjCisJZGMubAkkMDE2MTAwMGEsJDYwNDQ3MDAxLCQ2MTAwMDA4ZSwkM2Q3YzAwYTEKKwlkYy5sCSQwMDBhNjAzNiwkNzAwMjYxMDAsJDAwODAzZDdjLCQwMGMxMDAwYQorCWRjLmwJJDYwMjg3MDA0LCQ2MTAwMDA3MiwkM2Q3YzAwODEsJDAwMGE2MDFhCisJZGMubAkkNzAwODYxMDAsJDAwNjQzZDdjLCQwMGUxMDAwYSwkNjAwYzcwMGMKKwlkYy5sCSQ2MTAwMDA1NiwkM2Q3YzAwZTEsJDAwMGEyZDZlLCRmZjY4MDAwNgorCWRjLmwJJGYyMmVkMGMwLCRmZmRjZjIyZSwkOWMwMGZmNjAsJDRjZWUwMzAzCisJZGMubAkkZmY5YzRlNWUsJDJmMTcyZjZmLCQwMDA4MDAwNCwkMmY2ZjAwMGMKKwlkYy5sCSQwMDA4MmY3YywkMDAwMDAwMDEsJDAwMGMzZjZmLCQwMDA2MDAwYworCWRjLmwJJDNmN2M0MDA4LCQwMDA2MDgxNywkMDAwNTY3MDYsJDA4ZWYwMDAyCisJZGMubAkkMDAwZDYwZmYsJGZmZmY5NWY0LCQxMjJlZmY0MSwkMDIwMTAwMzgKKwlkYy5sCSQwYzAxMDAxOCwkNjcwMDAwMGMsJDBjMDEwMDIwLCQ2NzAwMDA2MAorCWRjLmwJJDRlNzUxMjJlLCRmZjQxMDI0MSwkMDAwNzMyM2IsJDEyMDY0ZWZiCisJZGMubAkkMTAwMjAwMTAsJDAwMTYwMDFjLCQwMDIwMDAyNCwkMDAyODAwMmMKKwlkYy5sCSQwMDMwOTFhZSwkZmZhNDRlNzUsJDkxYWVmZmE4LCQ0ZTc1OTVjMAorCWRjLmwJJDRlNzU5N2MwLCQ0ZTc1OTljMCwkNGU3NTliYzAsJDRlNzU5MTk2CisJZGMubAkkNGU3NTBjMmUsJDAwMzAwMDBhLCQ2NjEyMDgyZSwkMDAwNTAwMDQKKwlkYy5sCSQ2NjBhNGU3YSwkODgwMDkxYzAsJDRlN2I4ODAwLCQ0ZTc1NDQ4MAorCWRjLmwJJDYwYTA1MWZjLCQwMDAwMDAwMCwkMDAwMDAwMDAsJDAwMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvc3JjL1JFQURNRS1TUkMgYi9hcmNoL202OGsvaWZwc3AwNjAvc3JjL1JFQURNRS1TUkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJlNWNmZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvUkVBRE1FLVNSQwpAQCAtMCwwICsxLDEyIEBACitUaGlzIGlzIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29kZSBmcm9tIE1vdG9yb2xhIGZvciB0aGUgNjgwNjAgcHJvY2Vzc29yCitzdXBwb3J0IGNvZGUsIHByb3ZpZGluZyBlbXVsYXRpb24gZm9yIHJhcmVseSB1c2VkIG02OGsgaW5zdHJ1Y3Rpb25zCitub3QgaW1wbGVtZW50ZWQgaW4gdGhlIDY4MDYwIHNpbGljb24uCisKK1RoZSBjb2RlIHByb3ZpZGVkIGhlcmUgd2lsbCBub3QgYXNzZW1ibGUgb3V0IG9mIHRoZSBib3ggdXNpbmcgdGhlIEdOVQorYXNzZW1ibGVyLCBob3dldmVyIGl0IGlzIGJlaW5nIGluY2x1ZGVkIGluIG9yZGVyIHRvIGNvbXBseSB3aXRoIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK1lvdSBkb24ndCBuZWVkIHRvIGFjdHVhbGx5IGFzc2VtYmxlIHRoZXNlIGZpbGVzIGluIG9yZGVyIHRvIGNvbXBpbGUgYQord29ya2luIG02OGsga2VybmVsLCB0aGUgcHJlY29tcGlsZWQgLnNhIGZpbGVzIGluIGFyY2gvbTY4ay9pZnBzcDA2MAorYXJlIHN1ZmZpY2llbnQgYW5kIHdlcmUgZ2VuZXJhdGVkIGZyb20gdGhlc2Ugc291cmNlIGZpbGVzIGJ5CitNb3Rvcm9sYS4KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvZnBsc3AuUyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvZnBsc3AuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGI3OWI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9mcGxzcC5TCkBAIC0wLDAgKzEsMTA5ODAgQEAKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorTU9UT1JPTEEgTUlDUk9QUk9DRVNTT1IgJiBNRU1PUlkgVEVDSE5PTE9HWSBHUk9VUAorTTY4MDAwIEhpLVBlcmZvcm1hbmNlIE1pY3JvcHJvY2Vzc29yIERpdmlzaW9uCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZQorUHJvZHVjdGlvbiBSZWxlYXNlIFAxLjAwIC0tIE9jdG9iZXIgMTAsIDE5OTQKKworTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IKkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUSEUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitNT1RPUk9MQSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0hFVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorYW5kIGFueSB3YXJyYW50eSBhZ2FpbnN0IGluZnJpbmdlbWVudCB3aXRoIHJlZ2FyZCB0byB0aGUgU09GVFdBUkUKKyhJTkNMVURJTkcgQU5ZIE1PRElGSUVEIFZFUlNJT05TIFRIRVJFT0YpIGFuZCBhbnkgYWNjb21wYW55aW5nIHdyaXR0ZW4gbWF0ZXJpYWxzLgorCitUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorSU4gTk8gRVZFTlQgU0hBTEwgTU9UT1JPTEEgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUyBQUk9GSVRTLAorQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIEJVU0lORVNTIElORk9STUFUSU9OLCBPUiBPVEhFUiBQRUNVTklBUlkgTE9TUykKK0FSSVNJTkcgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTT0ZUV0FSRS4KK01vdG9yb2xhIGFzc3VtZXMgbm8gcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBtYWludGVuYW5jZSBhbmQgc3VwcG9ydCBvZiB0aGUgU09GVFdBUkUuCisKK1lvdSBhcmUgaGVyZWJ5IGdyYW50ZWQgYSBjb3B5cmlnaHQgbGljZW5zZSB0byB1c2UsIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNPRlRXQVJFCitzbyBsb25nIGFzIHRoaXMgZW50aXJlIG5vdGljZSBpcyByZXRhaW5lZCB3aXRob3V0IGFsdGVyYXRpb24gaW4gYW55IG1vZGlmaWVkIGFuZC9vcgorcmVkaXN0cmlidXRlZCB2ZXJzaW9ucywgYW5kIHRoYXQgc3VjaCBtb2RpZmllZCB2ZXJzaW9ucyBhcmUgY2xlYXJseSBpZGVudGlmaWVkIGFzIHN1Y2guCitObyBsaWNlbnNlcyBhcmUgZ3JhbnRlZCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlIHVuZGVyIGFueSBwYXRlbnRzCitvciB0cmFkZW1hcmtzIG9mIE1vdG9yb2xhLCBJbmMuCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyMKKyMgbGZwdG9wLnM6CisjCVRoaXMgZmlsZSBpcyBhcHBlbmRlZCB0byB0aGUgdG9wIG9mIHRoZSAwNjBJTFNQIHBhY2thZ2UKKyMgYW5kIGNvbnRhaW5zIHRoZSBlbnRyeSBwb2ludHMgaW50byB0aGUgcGFja2FnZS4gVGhlIHVzZXIsIGluCisjIGVmZmVjdCwgYnJhbmNoZXMgdG8gb25lIG9mIHRoZSBicmFuY2ggdGFibGUgZW50cmllcyBsb2NhdGVkIGhlcmUuCisjCisKKwlicmEubAlfZmFjb3NzXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mYWNvc2RfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZhY29zeF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV9mYXNpbnNfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2Zhc2luZF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmFzaW54XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2ZhdGFuc18KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmF0YW5kXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mYXRhbnhfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfZmF0YW5oc18KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmF0YW5oZF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmF0YW5oeF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV9mY29zc18KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmNvc2RfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2Zjb3N4XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2Zjb3Noc18KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmNvc2hkXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mY29zaHhfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfZmV0b3hzXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mZXRveGRfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZldG94eF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV9mZXRveG0xc18KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmV0b3htMWRfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZldG94bTF4XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2ZnZXRleHBzXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mZ2V0ZXhwZF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmdldGV4cHhfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfZmdldG1hbnNfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZnZXRtYW5kXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mZ2V0bWFueF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV9mbG9nMTBzXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mbG9nMTBkXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mbG9nMTB4XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2Zsb2cyc18KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmxvZzJkXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mbG9nMnhfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfZmxvZ25zXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mbG9nbmRfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2Zsb2dueF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV9mbG9nbnAxc18KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmxvZ25wMWRfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2Zsb2ducDF4XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2Ztb2RzXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mbW9kZF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZm1vZHhfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfZnJlbXNfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZyZW1kXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mcmVteF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV9mc2NhbGVzXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mc2NhbGVkXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mc2NhbGV4XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2ZzaW5zXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mc2luZF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZnNpbnhfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfZnNpbmNvc3NfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZzaW5jb3NkXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mc2luY29zeF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV9mc2luaHNfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZzaW5oZF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZnNpbmh4XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2Z0YW5zXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mdGFuZF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZnRhbnhfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfZnRhbmhzXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mdGFuaGRfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2Z0YW5oeF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV9mdGVudG94c18KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZnRlbnRveGRfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2Z0ZW50b3h4XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2Z0d290b3hzXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mdHdvdG94ZF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZnR3b3RveHhfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfZmFic3NfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZhYnNkXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mYWJzeF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV9mYWRkc18KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmFkZGRfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZhZGR4XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2ZkaXZzXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mZGl2ZF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZmRpdnhfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfZmludHNfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZpbnRkXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9maW50eF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV9maW50cnpzXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9maW50cnpkXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9maW50cnp4XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2ZtdWxzXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mbXVsZF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZm11bHhfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfZm5lZ3NfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZuZWdkXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mbmVneF8KKwlzaG9ydAkweDAwMDAKKworCWJyYS5sCV9mc3FydHNfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJX2ZzcXJ0ZF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZnNxcnR4XworCXNob3J0CTB4MDAwMAorCisJYnJhLmwJX2ZzdWJzXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV9mc3ViZF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfZnN1YnhfCisJc2hvcnQJMHgwMDAwCisKKyMgbGVhdmUgcm9vbSBmb3IgZnV0dXJlIHBvc3NpYmxlIGFkZGl0aW9ucworCWFsaWduCTB4NDAwCisKKyMKKyMgVGhpcyBmaWxlIGNvbnRhaW5zIGEgc2V0IG9mIGRlZmluZSBzdGF0ZW1lbnRzIGZvciBjb25zdGFudHMKKyMgaW4gb3JkZXIgdG8gcHJvbW90ZSByZWFkYWJpbGl0eSB3aXRoaW4gdGhlIGNvcmVjb2RlIGl0c2VsZi4KKyMKKworc2V0IExPQ0FMX1NJWkUsCQkxOTIJCQkjIHN0YWNrIGZyYW1lIHNpemUoYnl0ZXMpCitzZXQgTFYsCQkJLUxPQ0FMX1NJWkUJCSMgc3RhY2sgb2Zmc2V0CisKK3NldCBFWENfU1IsCQkweDQJCQkjIHN0YWNrIHN0YXR1cyByZWdpc3Rlcgorc2V0IEVYQ19QQywJCTB4NgkJCSMgc3RhY2sgcGMKK3NldCBFWENfVk9GRiwJCTB4YQkJCSMgc3RhY2tlZCB2ZWN0b3Igb2Zmc2V0CitzZXQgRVhDX0VBLAkJMHhjCQkJIyBzdGFja2VkIDxlYT4KKworc2V0IEVYQ19GUCwJCTB4MAkJCSMgZnJhbWUgcG9pbnRlcgorCitzZXQgRVhDX0FSRUdTLAkJLTY4CQkJIyBvZmZzZXQgb2YgYWxsIGFkZHJlc3MgcmVncworc2V0IEVYQ19EUkVHUywJCS0xMDAJCQkjIG9mZnNldCBvZiBhbGwgZGF0YSByZWdzCitzZXQgRVhDX0ZQUkVHUywJCS0zNgkJCSMgb2Zmc2V0IG9mIGFsbCBmcCByZWdzCisKK3NldCBFWENfQTcsCQlFWENfQVJFR1MrKDcqNCkJCSMgb2Zmc2V0IG9mIHNhdmVkIGE3CitzZXQgT0xEX0E3LAkJRVhDX0FSRUdTKyg2KjQpCQkjIGV4dHJhIGNvcHkgb2Ygc2F2ZWQgYTcKK3NldCBFWENfQTYsCQlFWENfQVJFR1MrKDYqNCkJCSMgb2Zmc2V0IG9mIHNhdmVkIGE2CitzZXQgRVhDX0E1LAkJRVhDX0FSRUdTKyg1KjQpCitzZXQgRVhDX0E0LAkJRVhDX0FSRUdTKyg0KjQpCitzZXQgRVhDX0EzLAkJRVhDX0FSRUdTKygzKjQpCitzZXQgRVhDX0EyLAkJRVhDX0FSRUdTKygyKjQpCitzZXQgRVhDX0ExLAkJRVhDX0FSRUdTKygxKjQpCitzZXQgRVhDX0EwLAkJRVhDX0FSRUdTKygwKjQpCitzZXQgRVhDX0Q3LAkJRVhDX0RSRUdTKyg3KjQpCitzZXQgRVhDX0Q2LAkJRVhDX0RSRUdTKyg2KjQpCitzZXQgRVhDX0Q1LAkJRVhDX0RSRUdTKyg1KjQpCitzZXQgRVhDX0Q0LAkJRVhDX0RSRUdTKyg0KjQpCitzZXQgRVhDX0QzLAkJRVhDX0RSRUdTKygzKjQpCitzZXQgRVhDX0QyLAkJRVhDX0RSRUdTKygyKjQpCitzZXQgRVhDX0QxLAkJRVhDX0RSRUdTKygxKjQpCitzZXQgRVhDX0QwLAkJRVhDX0RSRUdTKygwKjQpCisKK3NldCBFWENfRlAwLAkJRVhDX0ZQUkVHUysoMCoxMikJIyBvZmZzZXQgb2Ygc2F2ZWQgZnAwCitzZXQgRVhDX0ZQMSwJCUVYQ19GUFJFR1MrKDEqMTIpCSMgb2Zmc2V0IG9mIHNhdmVkIGZwMQorc2V0IEVYQ19GUDIsCQlFWENfRlBSRUdTKygyKjEyKQkjIG9mZnNldCBvZiBzYXZlZCBmcDIgKG5vdCB1c2VkKQorCitzZXQgRlBfU0NSMSwJCUxWKzgwCQkJIyBmcCBzY3JhdGNoIDEKK3NldCBGUF9TQ1IxX0VYLAkJRlBfU0NSMSswCitzZXQgRlBfU0NSMV9TR04sCUZQX1NDUjErMgorc2V0IEZQX1NDUjFfSEksCQlGUF9TQ1IxKzQKK3NldCBGUF9TQ1IxX0xPLAkJRlBfU0NSMSs4CisKK3NldCBGUF9TQ1IwLAkJTFYrNjgJCQkjIGZwIHNjcmF0Y2ggMAorc2V0IEZQX1NDUjBfRVgsCQlGUF9TQ1IwKzAKK3NldCBGUF9TQ1IwX1NHTiwJRlBfU0NSMCsyCitzZXQgRlBfU0NSMF9ISSwJCUZQX1NDUjArNAorc2V0IEZQX1NDUjBfTE8sCQlGUF9TQ1IwKzgKKworc2V0IEZQX0RTVCwJCUxWKzU2CQkJIyBmcCBkZXN0aW5hdGlvbiBvcGVyYW5kCitzZXQgRlBfRFNUX0VYLAkJRlBfRFNUKzAKK3NldCBGUF9EU1RfU0dOLAkJRlBfRFNUKzIKK3NldCBGUF9EU1RfSEksCQlGUF9EU1QrNAorc2V0IEZQX0RTVF9MTywJCUZQX0RTVCs4CisKK3NldCBGUF9TUkMsCQlMVis0NAkJCSMgZnAgc291cmNlIG9wZXJhbmQKK3NldCBGUF9TUkNfRVgsCQlGUF9TUkMrMAorc2V0IEZQX1NSQ19TR04sCQlGUF9TUkMrMgorc2V0IEZQX1NSQ19ISSwJCUZQX1NSQys0CitzZXQgRlBfU1JDX0xPLAkJRlBfU1JDKzgKKworc2V0IFVTRVJfRlBJQVIsCQlMVis0MAkJCSMgRlAgaW5zdHIgYWRkcmVzcyByZWdpc3RlcgorCitzZXQgVVNFUl9GUFNSLAkJTFYrMzYJCQkjIEZQIHN0YXR1cyByZWdpc3Rlcgorc2V0IEZQU1JfQ0MsCQlVU0VSX0ZQU1IrMAkJIyBGUFNSIGNvbmRpdGlvbiBjb2Rlcworc2V0IEZQU1JfUUJZVEUsCQlVU0VSX0ZQU1IrMQkJIyBGUFNSIHFvdXRpZW50IGJ5dGUKK3NldCBGUFNSX0VYQ0VQVCwJVVNFUl9GUFNSKzIJCSMgRlBTUiBleGNlcHRpb24gc3RhdHVzIGJ5dGUKK3NldCBGUFNSX0FFWENFUFQsCVVTRVJfRlBTUiszCQkjIEZQU1IgYWNjcnVlZCBleGNlcHRpb24gYnl0ZQorCitzZXQgVVNFUl9GUENSLAkJTFYrMzIJCQkjIEZQIGNvbnRyb2wgcmVnaXN0ZXIKK3NldCBGUENSX0VOQUJMRSwJVVNFUl9GUENSKzIJCSMgRlBDUiBleGNlcHRpb24gZW5hYmxlCitzZXQgRlBDUl9NT0RFLAkJVVNFUl9GUENSKzMJCSMgRlBDUiByb3VuZGluZyBtb2RlIGNvbnRyb2wKKworc2V0IExfU0NSMywJCUxWKzI4CQkJIyBpbnRlZ2VyIHNjcmF0Y2ggMworc2V0IExfU0NSMiwJCUxWKzI0CQkJIyBpbnRlZ2VyIHNjcmF0Y2ggMgorc2V0IExfU0NSMSwJCUxWKzIwCQkJIyBpbnRlZ2VyIHNjcmF0Y2ggMQorCitzZXQgU1RPUkVfRkxHLAkJTFYrMTkJCQkjIGZsYWc6IG9wZXJhbmQgc3RvcmUgKGllLiBub3QgZmNtcC9mdHN0KQorCitzZXQgRVhDX1RFTVAyLAkJTFYrMjQJCQkjIHRlbXBvcmFyeSBzcGFjZQorc2V0IEVYQ19URU1QLAkJTFYrMTYJCQkjIHRlbXBvcmFyeSBzcGFjZQorCitzZXQgRFRBRywJCUxWKzE1CQkJIyBkZXN0aW5hdGlvbiBvcGVyYW5kIHR5cGUKK3NldCBTVEFHLAkJTFYrMTQJCQkjIHNvdXJjZSBvcGVyYW5kIHR5cGUKKworc2V0IFNQQ09ORF9GTEcsCQlMVisxMAkJCSMgZmxhZzogc3BlY2lhbCBjYXNlIChzZWUgYmVsb3cpCisKK3NldCBFWENfQ0MsCQlMVis4CQkJIyBzYXZlZCBjb25kaXRpb24gY29kZXMKK3NldCBFWENfRVhUV1BUUiwJTFYrNAkJCSMgc2F2ZWQgY3VycmVudCBQQyAoYWN0aXZlKQorc2V0IEVYQ19FWFRXT1JELAlMVisyCQkJIyBzYXZlZCBleHRlbnNpb24gd29yZAorc2V0IEVYQ19DTURSRUcsCQlMVisyCQkJIyBzYXZlZCBleHRlbnNpb24gd29yZAorc2V0IEVYQ19PUFdPUkQsCQlMViswCQkJIyBzYXZlZCBvcGVyYXRpb24gd29yZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEhlbHBmdWwgbWFjcm9zCisKK3NldCBGVEVNUCwJCTAJCQkjIG9mZnNldHMgd2l0aGluIGFuCitzZXQgRlRFTVBfRVgsCQkwCQkJIyBleHRlbmRlZCBwcmVjaXNpb24KK3NldCBGVEVNUF9TR04sCQkyCQkJIyB2YWx1ZSBzYXZlZCBpbiBtZW1vcnkuCitzZXQgRlRFTVBfSEksCQk0CitzZXQgRlRFTVBfTE8sCQk4CitzZXQgRlRFTVBfR1JTLAkJMTIKKworc2V0IExPQ0FMLAkJMAkJCSMgb2Zmc2V0cyB3aXRoaW4gYW4KK3NldCBMT0NBTF9FWCwJCTAJCQkjIGV4dGVuZGVkIHByZWNpc2lvbgorc2V0IExPQ0FMX1NHTiwJCTIJCQkjIHZhbHVlIHNhdmVkIGluIG1lbW9yeS4KK3NldCBMT0NBTF9ISSwJCTQKK3NldCBMT0NBTF9MTywJCTgKK3NldCBMT0NBTF9HUlMsCQkxMgorCitzZXQgRFNULAkJMAkJCSMgb2Zmc2V0cyB3aXRoaW4gYW4KK3NldCBEU1RfRVgsCQkwCQkJIyBleHRlbmRlZCBwcmVjaXNpb24KK3NldCBEU1RfSEksCQk0CQkJIyB2YWx1ZSBzYXZlZCBpbiBtZW1vcnkuCitzZXQgRFNUX0xPLAkJOAorCitzZXQgU1JDLAkJMAkJCSMgb2Zmc2V0cyB3aXRoaW4gYW4KK3NldCBTUkNfRVgsCQkwCQkJIyBleHRlbmRlZCBwcmVjaXNpb24KK3NldCBTUkNfSEksCQk0CQkJIyB2YWx1ZSBzYXZlZCBpbiBtZW1vcnkuCitzZXQgU1JDX0xPLAkJOAorCitzZXQgU0dMX0xPLAkJMHgzZjgxCQkJIyBtaW4gc2dsIHByZWMgZXhwb25lbnQKK3NldCBTR0xfSEksCQkweDQwN2UJCQkjIG1heCBzZ2wgcHJlYyBleHBvbmVudAorc2V0IERCTF9MTywJCTB4M2MwMQkJCSMgbWluIGRibCBwcmVjIGV4cG9uZW50CitzZXQgREJMX0hJLAkJMHg0M2ZlCQkJIyBtYXggZGJsIHByZWMgZXhwb25lbnQKK3NldCBFWFRfTE8sCQkweDAJCQkjIG1pbiBleHQgcHJlYyBleHBvbmVudAorc2V0IEVYVF9ISSwJCTB4N2ZmZQkJCSMgbWF4IGV4dCBwcmVjIGV4cG9uZW50CisKK3NldCBFWFRfQklBUywJCTB4M2ZmZgkJCSMgZXh0ZW5kZWQgcHJlY2lzaW9uIGJpYXMKK3NldCBTR0xfQklBUywJCTB4MDA3ZgkJCSMgc2luZ2xlIHByZWNpc2lvbiBiaWFzCitzZXQgREJMX0JJQVMsCQkweDAzZmYJCQkjIGRvdWJsZSBwcmVjaXNpb24gYmlhcworCitzZXQgTk9STSwJCTB4MDAJCQkjIG9wZXJhbmQgdHlwZSBmb3IgU1RBRy9EVEFHCitzZXQgWkVSTywJCTB4MDEJCQkjIG9wZXJhbmQgdHlwZSBmb3IgU1RBRy9EVEFHCitzZXQgSU5GLAkJMHgwMgkJCSMgb3BlcmFuZCB0eXBlIGZvciBTVEFHL0RUQUcKK3NldCBRTkFOLAkJMHgwMwkJCSMgb3BlcmFuZCB0eXBlIGZvciBTVEFHL0RUQUcKK3NldCBERU5PUk0sCQkweDA0CQkJIyBvcGVyYW5kIHR5cGUgZm9yIFNUQUcvRFRBRworc2V0IFNOQU4sCQkweDA1CQkJIyBvcGVyYW5kIHR5cGUgZm9yIFNUQUcvRFRBRworc2V0IFVOTk9STSwJCTB4MDYJCQkjIG9wZXJhbmQgdHlwZSBmb3IgU1RBRy9EVEFHCisKKyMjIyMjIyMjIyMjIyMjIyMjIworIyBGUFNSL0ZQQ1IgYml0cyAjCisjIyMjIyMjIyMjIyMjIyMjIyMKK3NldCBuZWdfYml0LAkJMHgzCQkJIyBuZWdhdGl2ZSByZXN1bHQKK3NldCB6X2JpdCwJCTB4MgkJCSMgemVybyByZXN1bHQKK3NldCBpbmZfYml0LAkJMHgxCQkJIyBpbmZpbml0ZSByZXN1bHQKK3NldCBuYW5fYml0LAkJMHgwCQkJIyBOQU4gcmVzdWx0CisKK3NldCBxX3NuX2JpdCwJCTB4NwkJCSMgc2lnbiBiaXQgb2YgcXVvdGllbnQgYnl0ZQorCitzZXQgYnN1bl9iaXQsCQk3CQkJIyBicmFuY2ggb24gdW5vcmRlcmVkCitzZXQgc25hbl9iaXQsCQk2CQkJIyBzaWduYWxsaW5nIE5BTgorc2V0IG9wZXJyX2JpdCwJCTUJCQkjIG9wZXJhbmQgZXJyb3IKK3NldCBvdmZsX2JpdCwJCTQJCQkjIG92ZXJmbG93CitzZXQgdW5mbF9iaXQsCQkzCQkJIyB1bmRlcmZsb3cKK3NldCBkel9iaXQsCQkyCQkJIyBkaXZpZGUgYnkgemVybworc2V0IGluZXgyX2JpdCwJCTEJCQkjIGluZXhhY3QgcmVzdWx0IDIKK3NldCBpbmV4MV9iaXQsCQkwCQkJIyBpbmV4YWN0IHJlc3VsdCAxCisKK3NldCBhaW9wX2JpdCwJCTcJCQkjIGFjY3J1ZWQgaW5leGFjdCBvcGVyYXRpb24gYml0CitzZXQgYW92ZmxfYml0LAkJNgkJCSMgYWNjcnVlZCBvdmVyZmxvdyBiaXQKK3NldCBhdW5mbF9iaXQsCQk1CQkJIyBhY2NydWVkIHVuZGVyZmxvdyBiaXQKK3NldCBhZHpfYml0LAkJNAkJCSMgYWNjcnVlZCBkeiBiaXQKK3NldCBhaW5leF9iaXQsCQkzCQkJIyBhY2NydWVkIGluZXhhY3QgYml0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEZQU1IgaW5kaXZpZHVhbCBiaXQgbWFza3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3NldCBuZWdfbWFzaywJCTB4MDgwMDAwMDAJCSMgbmVnYXRpdmUgYml0IG1hc2sgKGx3KQorc2V0IGluZl9tYXNrLAkJMHgwMjAwMDAwMAkJIyBpbmZpbml0eSBiaXQgbWFzayAobHcpCitzZXQgel9tYXNrLAkJMHgwNDAwMDAwMAkJIyB6ZXJvIGJpdCBtYXNrIChsdykKK3NldCBuYW5fbWFzaywJCTB4MDEwMDAwMDAJCSMgbmFuIGJpdCBtYXNrIChsdykKKworc2V0IG5lZ19ibWFzaywJCTB4MDgJCQkjIG5lZ2F0aXZlIGJpdCBtYXNrIChieXRlKQorc2V0IGluZl9ibWFzaywJCTB4MDIJCQkjIGluZmluaXR5IGJpdCBtYXNrIChieXRlKQorc2V0IHpfYm1hc2ssCQkweDA0CQkJIyB6ZXJvIGJpdCBtYXNrIChieXRlKQorc2V0IG5hbl9ibWFzaywJCTB4MDEJCQkjIG5hbiBiaXQgbWFzayAoYnl0ZSkKKworc2V0IGJzdW5fbWFzaywJCTB4MDAwMDgwMDAJCSMgYnN1biBleGNlcHRpb24gbWFzaworc2V0IHNuYW5fbWFzaywJCTB4MDAwMDQwMDAJCSMgc25hbiBleGNlcHRpb24gbWFzaworc2V0IG9wZXJyX21hc2ssCQkweDAwMDAyMDAwCQkjIG9wZXJyIGV4Y2VwdGlvbiBtYXNrCitzZXQgb3ZmbF9tYXNrLAkJMHgwMDAwMTAwMAkJIyBvdmVyZmxvdyBleGNlcHRpb24gbWFzaworc2V0IHVuZmxfbWFzaywJCTB4MDAwMDA4MDAJCSMgdW5kZXJmbG93IGV4Y2VwdGlvbiBtYXNrCitzZXQgZHpfbWFzaywJCTB4MDAwMDA0MDAJCSMgZHogZXhjZXB0aW9uIG1hc2sKK3NldCBpbmV4Ml9tYXNrLAkJMHgwMDAwMDIwMAkJIyBpbmV4MiBleGNlcHRpb24gbWFzaworc2V0IGluZXgxX21hc2ssCQkweDAwMDAwMTAwCQkjIGluZXgxIGV4Y2VwdGlvbiBtYXNrCisKK3NldCBhaW9wX21hc2ssCQkweDAwMDAwMDgwCQkjIGFjY3J1ZWQgaWxsZWdhbCBvcGVyYXRpb24KK3NldCBhb3ZmbF9tYXNrLAkJMHgwMDAwMDA0MAkJIyBhY2NydWVkIG92ZXJmbG93CitzZXQgYXVuZmxfbWFzaywJCTB4MDAwMDAwMjAJCSMgYWNjcnVlZCB1bmRlcmZsb3cKK3NldCBhZHpfbWFzaywJCTB4MDAwMDAwMTAJCSMgYWNjcnVlZCBkaXZpZGUgYnkgemVybworc2V0IGFpbmV4X21hc2ssCQkweDAwMDAwMDA4CQkjIGFjY3J1ZWQgaW5leGFjdAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBGUFNSIGNvbWJpbmF0aW9ucyB1c2VkIGluIHRoZSBGUFNQICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzZXQgZHppbmZfbWFzaywJCWluZl9tYXNrK2R6X21hc2srYWR6X21hc2sKK3NldCBvcG5hbl9tYXNrLAkJbmFuX21hc2srb3BlcnJfbWFzaythaW9wX21hc2sKK3NldCBuemlfbWFzaywJCTB4MDFmZmZmZmYJCSNjbGVhcnMgTiwgWiwgYW5kIEkKK3NldCB1bmZpbnhfbWFzaywJdW5mbF9tYXNrK2luZXgyX21hc2srYXVuZmxfbWFzaythaW5leF9tYXNrCitzZXQgdW5mMmlueF9tYXNrLAl1bmZsX21hc2sraW5leDJfbWFzaythaW5leF9tYXNrCitzZXQgb3ZmaW54X21hc2ssCW92ZmxfbWFzaytpbmV4Ml9tYXNrK2FvdmZsX21hc2srYWluZXhfbWFzaworc2V0IGlueDFhX21hc2ssCQlpbmV4MV9tYXNrK2FpbmV4X21hc2sKK3NldCBpbngyYV9tYXNrLAkJaW5leDJfbWFzaythaW5leF9tYXNrCitzZXQgc25hbmlvcF9tYXNrLAluYW5fbWFzaytzbmFuX21hc2srYWlvcF9tYXNrCitzZXQgc25hbmlvcDJfbWFzaywJc25hbl9tYXNrK2Fpb3BfbWFzaworc2V0IG5hbmlvcF9tYXNrLAluYW5fbWFzaythaW9wX21hc2sKK3NldCBuZWdpbmZfbWFzaywJbmVnX21hc2sraW5mX21hc2sKK3NldCBpbmZhaW9wX21hc2ssCWluZl9tYXNrK2Fpb3BfbWFzaworc2V0IG5lZ3pfbWFzaywJCW5lZ19tYXNrK3pfbWFzaworc2V0IG9wYW9wX21hc2ssCQlvcGVycl9tYXNrK2Fpb3BfbWFzaworc2V0IHVuZmxfaW54X21hc2ssCXVuZmxfbWFzaythdW5mbF9tYXNrK2FpbmV4X21hc2sKK3NldCBvdmZsX2lueF9tYXNrLAlvdmZsX21hc2srYW92ZmxfbWFzaythaW5leF9tYXNrCisKKyMjIyMjIyMjIworIyBtaXNjLiAjCisjIyMjIyMjIyMKK3NldCBybmRfc3RreV9iaXQsCTI5CQkJIyBzdGt5IGJpdCBwb3MgaW4gbG9uZ3dvcmQKKworc2V0IHNpZ25fYml0LAkJMHg3CQkJIyBzaWduIGJpdAorc2V0IHNpZ25hbl9iaXQsCQkweDYJCQkjIHNpZ25hbGxpbmcgbmFuIGJpdAorCitzZXQgc2dsX3RocmVzaCwJCTB4M2Y4MQkJCSMgbWluaW11bSBzZ2wgZXhwb25lbnQKK3NldCBkYmxfdGhyZXNoLAkJMHgzYzAxCQkJIyBtaW5pbXVtIGRibCBleHBvbmVudAorCitzZXQgeF9tb2RlLAkJMHgwCQkJIyBleHRlbmRlZCBwcmVjaXNpb24KK3NldCBzX21vZGUsCQkweDQJCQkjIHNpbmdsZSBwcmVjaXNpb24KK3NldCBkX21vZGUsCQkweDgJCQkjIGRvdWJsZSBwcmVjaXNpb24KKworc2V0IHJuX21vZGUsCQkweDAJCQkjIHJvdW5kLXRvLW5lYXJlc3QKK3NldCByel9tb2RlLAkJMHgxCQkJIyByb3VuZC10by16ZXJvCitzZXQgcm1fbW9kZSwJCTB4MgkJCSMgcm91bmQtdHAtbWludXMtaW5maW5pdHkKK3NldCBycF9tb2RlLAkJMHgzCQkJIyByb3VuZC10by1wbHVzLWluZmluaXR5CisKK3NldCBtYW50aXNzYWxlbiwJNjQJCQkjIGxlbmd0aCBvZiBtYW50aXNzYSBpbiBiaXRzCisKK3NldCBCWVRFLAkJMQkJCSMgbGVuKGJ5dGUpID09IDEgYnl0ZQorc2V0IFdPUkQsCQkyCQkJIyBsZW4od29yZCkgPT0gMiBieXRlcworc2V0IExPTkcsCQk0CQkJIyBsZW4obG9uZ3dvcmQpID09IDIgYnl0ZXMKKworc2V0IEJTVU5fVkVDLAkJMHhjMAkJCSMgYnN1biAgICB2ZWN0b3Igb2Zmc2V0CitzZXQgSU5FWF9WRUMsCQkweGM0CQkJIyBpbmV4YWN0IHZlY3RvciBvZmZzZXQKK3NldCBEWl9WRUMsCQkweGM4CQkJIyBkeiAgICAgIHZlY3RvciBvZmZzZXQKK3NldCBVTkZMX1ZFQywJCTB4Y2MJCQkjIHVuZmwgICAgdmVjdG9yIG9mZnNldAorc2V0IE9QRVJSX1ZFQywJCTB4ZDAJCQkjIG9wZXJyICAgdmVjdG9yIG9mZnNldAorc2V0IE9WRkxfVkVDLAkJMHhkNAkJCSMgb3ZmbCAgICB2ZWN0b3Igb2Zmc2V0CitzZXQgU05BTl9WRUMsCQkweGQ4CQkJIyBzbmFuICAgIHZlY3RvciBvZmZzZXQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNQZWNpYWwgQ09ORGl0aW9uIEZMYUdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc2V0IGZ0cmFwY2NfZmxnLAkweDAxCQkJIyBmbGFnIGJpdDogZnRyYXBjYyBleGNlcHRpb24KK3NldCBmYnN1bl9mbGcsCQkweDAyCQkJIyBmbGFnIGJpdDogYnN1biBleGNlcHRpb24KK3NldCBtaWE3X2ZsZywJCTB4MDQJCQkjIGZsYWcgYml0OiAoYTcpKyA8ZWE+CitzZXQgbWRhN19mbGcsCQkweDA4CQkJIyBmbGFnIGJpdDogLShhNykgPGVhPgorc2V0IGZtb3ZtX2ZsZywJCTB4NDAJCQkjIGZsYWcgYml0OiBmbW92bSBpbnN0cnVjdGlvbgorc2V0IGltbWVkX2ZsZywJCTB4ODAJCQkjIGZsYWcgYml0OiAmPGRhdGE+IDxlYT4KKworc2V0IGZ0cmFwY2NfYml0LAkweDAKK3NldCBmYnN1bl9iaXQsCQkweDEKK3NldCBtaWE3X2JpdCwJCTB4Mgorc2V0IG1kYTdfYml0LAkJMHgzCitzZXQgaW1tZWRfYml0LAkJMHg3CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVFJBTlNDRU5ERU5UQUwgIkxBU1QtT1AiIEZMQUdTICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3NldCBGTVVMX09QLAkJMHgwCQkJIyBmbXVsIGluc3RyIHBlcmZvcm1lZCBsYXN0CitzZXQgRkRJVl9PUCwJCTB4MQkJCSMgZmRpdiBwZXJmb3JtZWQgbGFzdAorc2V0IEZBRERfT1AsCQkweDIJCQkjIGZhZGQgcGVyZm9ybWVkIGxhc3QKK3NldCBGTU9WX09QLAkJMHgzCQkJIyBmbW92IHBlcmZvcm1lZCBsYXN0CisKKyMjIyMjIyMjIyMjIyMKKyMgQ09OU1RBTlRTICMKKyMjIyMjIyMjIyMjIyMKK1QxOglsb25nCQkweDQwQzYyRDM4LDB4RDNENjQ2MzQJIyAxNjM4MSBMT0cyIExFQUQKK1QyOglsb25nCQkweDNENkY5MEFFLDB4QjFFNzVDQzcJIyAxNjM4MSBMT0cyIFRSQUlMCisKK1BJOglsb25nCQkweDQwMDAwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDAwMDAwMDAwCitQSUJZMjoJbG9uZwkJMHgzRkZGMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgwMDAwMDAwMAorCitUV09CWVBJOgorCWxvbmcJCTB4M0ZFNDVGMzAsMHg2REM5Qzg4MworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1PTkFESUMgVEVNUExBVEUJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX2ZzaW5zXworX2ZzaW5zXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LnMJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBzZ2wgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMF8ycworCWJzci5sCQlzc2luCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDBfNnMKK19MMF8yczoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wwXzNzCQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MMF82cworX0wwXzNzOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMF80cwkJCSMgbm8KKwlic3IubAkJdF9vcGVycgkJCSMgeWVzCisJYnJhLmIJCV9MMF82cworX0wwXzRzOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDBfNXMJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wwXzZzCitfTDBfNXM6CisJYnNyLmwJCXNzaW5kCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDBfNnM6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mc2luZF8KK19mc2luZF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5kCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgZGJsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJbW92LmIJCSVkMSxTVEFHKCVhNikKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMF8yZAorCWJzci5sCQlzc2luCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDBfNmQKK19MMF8yZDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wwXzNkCQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MMF82ZAorX0wwXzNkOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMF80ZAkJCSMgbm8KKwlic3IubAkJdF9vcGVycgkJCSMgeWVzCisJYnJhLmIJCV9MMF82ZAorX0wwXzRkOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDBfNWQJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wwXzZkCitfTDBfNWQ6CisJYnNyLmwJCXNzaW5kCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDBfNmQ6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mc2lueF8KK19mc2lueF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwltb3YubAkJMHg4KzB4MCglYTYpLDB4MCglYTApCSMgbG9hZCBleHQgaW5wdXQKKwltb3YubAkJMHg4KzB4NCglYTYpLDB4NCglYTApCisJbW92LmwJCTB4OCsweDgoJWE2KSwweDgoJWEwKQorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMF8yeAorCWJzci5sCQlzc2luCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDBfNngKK19MMF8yeDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wwXzN4CQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MMF82eAorX0wwXzN4OgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMF80eAkJCSMgbm8KKwlic3IubAkJdF9vcGVycgkJCSMgeWVzCisJYnJhLmIJCV9MMF82eAorX0wwXzR4OgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDBfNXgJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wwXzZ4CitfTDBfNXg6CisJYnNyLmwJCXNzaW5kCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDBfNng6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNT05BRElDIFRFTVBMQVRFCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCV9mY29zc18KK19mY29zc186CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5zCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgc2dsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDFfMnMKKwlic3IubAkJc2NvcwkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxXzZzCitfTDFfMnM6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMV8zcwkJCSMgbm8KKwlic3IubAkJbGRfcG9uZQkJCSMgeWVzCisJYnJhLmIJCV9MMV82cworX0wxXzNzOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMV80cwkJCSMgbm8KKwlic3IubAkJdF9vcGVycgkJCSMgeWVzCisJYnJhLmIJCV9MMV82cworX0wxXzRzOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDFfNXMJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wxXzZzCitfTDFfNXM6CisJYnNyLmwJCXNjb3NkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDFfNnM6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mY29zZF8KK19mY29zZF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5kCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgZGJsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJbW92LmIJCSVkMSxTVEFHKCVhNikKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMV8yZAorCWJzci5sCQlzY29zCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDFfNmQKK19MMV8yZDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxXzNkCQkJIyBubworCWJzci5sCQlsZF9wb25lCQkJIyB5ZXMKKwlicmEuYgkJX0wxXzZkCitfTDFfM2Q6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wxXzRkCQkJIyBubworCWJzci5sCQl0X29wZXJyCQkJIyB5ZXMKKwlicmEuYgkJX0wxXzZkCitfTDFfNGQ6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMV81ZAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDFfNmQKK19MMV81ZDoKKwlic3IubAkJc2Nvc2QJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMV82ZDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2Zjb3N4XworX2Zjb3N4XzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCW1vdi5sCQkweDgrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBpbnB1dAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxXzJ4CisJYnNyLmwJCXNjb3MJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMV82eAorX0wxXzJ4OgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDFfM3gJCQkjIG5vCisJYnNyLmwJCWxkX3BvbmUJCQkjIHllcworCWJyYS5iCQlfTDFfNngKK19MMV8zeDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDFfNHgJCQkjIG5vCisJYnNyLmwJCXRfb3BlcnIJCQkjIHllcworCWJyYS5iCQlfTDFfNngKK19MMV80eDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxXzV4CQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMV82eAorX0wxXzV4OgorCWJzci5sCQlzY29zZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxXzZ4OgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTU9OQURJQyBURU1QTEFURQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlfZnNpbmhzXworX2ZzaW5oc186CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5zCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgc2dsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDJfMnMKKwlic3IubAkJc3NpbmgJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMl82cworX0wyXzJzOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDJfM3MJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0wyXzZzCitfTDJfM3M6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wyXzRzCQkJIyBubworCWJzci5sCQlzcmNfaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wyXzZzCitfTDJfNHM6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMl81cwkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDJfNnMKK19MMl81czoKKwlic3IubAkJc3NpbmhkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDJfNnM6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mc2luaGRfCitfZnNpbmhkXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LmQJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBkYmwgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwltb3YuYgkJJWQxLFNUQUcoJWE2KQorCXRzdC5iCQklZDEKKwlibmUuYgkJX0wyXzJkCisJYnNyLmwJCXNzaW5oCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDJfNmQKK19MMl8yZDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wyXzNkCQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MMl82ZAorX0wyXzNkOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMl80ZAkJCSMgbm8KKwlic3IubAkJc3JjX2luZgkJCSMgeWVzCisJYnJhLmIJCV9MMl82ZAorX0wyXzRkOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDJfNWQJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wyXzZkCitfTDJfNWQ6CisJYnNyLmwJCXNzaW5oZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wyXzZkOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZnNpbmh4XworX2ZzaW5oeF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwltb3YubAkJMHg4KzB4MCglYTYpLDB4MCglYTApCSMgbG9hZCBleHQgaW5wdXQKKwltb3YubAkJMHg4KzB4NCglYTYpLDB4NCglYTApCisJbW92LmwJCTB4OCsweDgoJWE2KSwweDgoJWEwKQorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMl8yeAorCWJzci5sCQlzc2luaAkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wyXzZ4CitfTDJfMng6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMl8zeAkJCSMgbm8KKwlic3IubAkJc3JjX3plcm8JCQkjIHllcworCWJyYS5iCQlfTDJfNngKK19MMl8zeDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDJfNHgJCQkjIG5vCisJYnNyLmwJCXNyY19pbmYJCQkjIHllcworCWJyYS5iCQlfTDJfNngKK19MMl80eDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wyXzV4CQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMl82eAorX0wyXzV4OgorCWJzci5sCQlzc2luaGQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMl82eDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1PTkFESUMgVEVNUExBVEUJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX2Zsb2ducDFzXworX2Zsb2ducDFzXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LnMJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBzZ2wgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MM18ycworCWJzci5sCQlzbG9nbnAxCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDNfNnMKK19MM18yczoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wzXzNzCQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MM182cworX0wzXzNzOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MM180cwkJCSMgbm8KKwlic3IubAkJc29wcl9pbmYJCQkjIHllcworCWJyYS5iCQlfTDNfNnMKK19MM180czoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wzXzVzCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MM182cworX0wzXzVzOgorCWJzci5sCQlzbG9nbnAxZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wzXzZzOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZmxvZ25wMWRfCitfZmxvZ25wMWRfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YuZAkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIGRibCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCW1vdi5iCQklZDEsU1RBRyglYTYpCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDNfMmQKKwlic3IubAkJc2xvZ25wMQkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wzXzZkCitfTDNfMmQ6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MM18zZAkJCSMgbm8KKwlic3IubAkJc3JjX3plcm8JCQkjIHllcworCWJyYS5iCQlfTDNfNmQKK19MM18zZDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDNfNGQJCQkjIG5vCisJYnNyLmwJCXNvcHJfaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wzXzZkCitfTDNfNGQ6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MM181ZAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDNfNmQKK19MM181ZDoKKwlic3IubAkJc2xvZ25wMWQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MM182ZDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2Zsb2ducDF4XworX2Zsb2ducDF4XzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCW1vdi5sCQkweDgrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBpbnB1dAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wzXzJ4CisJYnNyLmwJCXNsb2ducDEJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MM182eAorX0wzXzJ4OgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDNfM3gJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0wzXzZ4CitfTDNfM3g6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wzXzR4CQkJIyBubworCWJzci5sCQlzb3ByX2luZgkJCSMgeWVzCisJYnJhLmIJCV9MM182eAorX0wzXzR4OgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDNfNXgJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wzXzZ4CitfTDNfNXg6CisJYnNyLmwJCXNsb2ducDFkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDNfNng6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNT05BRElDIFRFTVBMQVRFCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCV9mZXRveG0xc18KK19mZXRveG0xc186CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5zCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgc2dsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDRfMnMKKwlic3IubAkJc2V0b3htMQkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0w0XzZzCitfTDRfMnM6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MNF8zcwkJCSMgbm8KKwlic3IubAkJc3JjX3plcm8JCQkjIHllcworCWJyYS5iCQlfTDRfNnMKK19MNF8zczoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDRfNHMJCQkjIG5vCisJYnNyLmwJCXNldG94bTFpCQkJIyB5ZXMKKwlicmEuYgkJX0w0XzZzCitfTDRfNHM6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MNF81cwkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDRfNnMKK19MNF81czoKKwlic3IubAkJc2V0b3htMWQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MNF82czoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2ZldG94bTFkXworX2ZldG94bTFkXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LmQJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBkYmwgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwltb3YuYgkJJWQxLFNUQUcoJWE2KQorCXRzdC5iCQklZDEKKwlibmUuYgkJX0w0XzJkCisJYnNyLmwJCXNldG94bTEJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MNF82ZAorX0w0XzJkOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDRfM2QJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0w0XzZkCitfTDRfM2Q6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0w0XzRkCQkJIyBubworCWJzci5sCQlzZXRveG0xaQkJCSMgeWVzCisJYnJhLmIJCV9MNF82ZAorX0w0XzRkOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDRfNWQJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0w0XzZkCitfTDRfNWQ6CisJYnNyLmwJCXNldG94bTFkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDRfNmQ6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mZXRveG0xeF8KK19mZXRveG0xeF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwltb3YubAkJMHg4KzB4MCglYTYpLDB4MCglYTApCSMgbG9hZCBleHQgaW5wdXQKKwltb3YubAkJMHg4KzB4NCglYTYpLDB4NCglYTApCisJbW92LmwJCTB4OCsweDgoJWE2KSwweDgoJWEwKQorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MNF8yeAorCWJzci5sCQlzZXRveG0xCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDRfNngKK19MNF8yeDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0w0XzN4CQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MNF82eAorX0w0XzN4OgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MNF80eAkJCSMgbm8KKwlic3IubAkJc2V0b3htMWkJCQkjIHllcworCWJyYS5iCQlfTDRfNngKK19MNF80eDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0w0XzV4CQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MNF82eAorX0w0XzV4OgorCWJzci5sCQlzZXRveG0xZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0w0XzZ4OgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTU9OQURJQyBURU1QTEFURQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlfZnRhbmhzXworX2Z0YW5oc186CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5zCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgc2dsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDVfMnMKKwlic3IubAkJc3RhbmgJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MNV82cworX0w1XzJzOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDVfM3MJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0w1XzZzCitfTDVfM3M6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0w1XzRzCQkJIyBubworCWJzci5sCQlzcmNfb25lCQkJIyB5ZXMKKwlicmEuYgkJX0w1XzZzCitfTDVfNHM6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MNV81cwkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDVfNnMKK19MNV81czoKKwlic3IubAkJc3RhbmhkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDVfNnM6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mdGFuaGRfCitfZnRhbmhkXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LmQJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBkYmwgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwltb3YuYgkJJWQxLFNUQUcoJWE2KQorCXRzdC5iCQklZDEKKwlibmUuYgkJX0w1XzJkCisJYnNyLmwJCXN0YW5oCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDVfNmQKK19MNV8yZDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0w1XzNkCQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MNV82ZAorX0w1XzNkOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MNV80ZAkJCSMgbm8KKwlic3IubAkJc3JjX29uZQkJCSMgeWVzCisJYnJhLmIJCV9MNV82ZAorX0w1XzRkOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDVfNWQJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0w1XzZkCitfTDVfNWQ6CisJYnNyLmwJCXN0YW5oZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0w1XzZkOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZnRhbmh4XworX2Z0YW5oeF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwltb3YubAkJMHg4KzB4MCglYTYpLDB4MCglYTApCSMgbG9hZCBleHQgaW5wdXQKKwltb3YubAkJMHg4KzB4NCglYTYpLDB4NCglYTApCisJbW92LmwJCTB4OCsweDgoJWE2KSwweDgoJWEwKQorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MNV8yeAorCWJzci5sCQlzdGFuaAkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0w1XzZ4CitfTDVfMng6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MNV8zeAkJCSMgbm8KKwlic3IubAkJc3JjX3plcm8JCQkjIHllcworCWJyYS5iCQlfTDVfNngKK19MNV8zeDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDVfNHgJCQkjIG5vCisJYnNyLmwJCXNyY19vbmUJCQkjIHllcworCWJyYS5iCQlfTDVfNngKK19MNV80eDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0w1XzV4CQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MNV82eAorX0w1XzV4OgorCWJzci5sCQlzdGFuaGQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MNV82eDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1PTkFESUMgVEVNUExBVEUJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX2ZhdGFuc18KK19mYXRhbnNfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YucwkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIHNnbCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0w2XzJzCisJYnNyLmwJCXNhdGFuCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDZfNnMKK19MNl8yczoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0w2XzNzCQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MNl82cworX0w2XzNzOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MNl80cwkJCSMgbm8KKwlic3IubAkJc3BpXzIJCQkjIHllcworCWJyYS5iCQlfTDZfNnMKK19MNl80czoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0w2XzVzCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MNl82cworX0w2XzVzOgorCWJzci5sCQlzYXRhbmQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MNl82czoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2ZhdGFuZF8KK19mYXRhbmRfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YuZAkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIGRibCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCW1vdi5iCQklZDEsU1RBRyglYTYpCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDZfMmQKKwlic3IubAkJc2F0YW4JCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MNl82ZAorX0w2XzJkOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDZfM2QJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0w2XzZkCitfTDZfM2Q6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0w2XzRkCQkJIyBubworCWJzci5sCQlzcGlfMgkJCSMgeWVzCisJYnJhLmIJCV9MNl82ZAorX0w2XzRkOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDZfNWQJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0w2XzZkCitfTDZfNWQ6CisJYnNyLmwJCXNhdGFuZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0w2XzZkOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZmF0YW54XworX2ZhdGFueF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwltb3YubAkJMHg4KzB4MCglYTYpLDB4MCglYTApCSMgbG9hZCBleHQgaW5wdXQKKwltb3YubAkJMHg4KzB4NCglYTYpLDB4NCglYTApCisJbW92LmwJCTB4OCsweDgoJWE2KSwweDgoJWEwKQorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MNl8yeAorCWJzci5sCQlzYXRhbgkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0w2XzZ4CitfTDZfMng6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MNl8zeAkJCSMgbm8KKwlic3IubAkJc3JjX3plcm8JCQkjIHllcworCWJyYS5iCQlfTDZfNngKK19MNl8zeDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDZfNHgJCQkjIG5vCisJYnNyLmwJCXNwaV8yCQkJIyB5ZXMKKwlicmEuYgkJX0w2XzZ4CitfTDZfNHg6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MNl81eAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDZfNngKK19MNl81eDoKKwlic3IubAkJc2F0YW5kCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDZfNng6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNT05BRElDIFRFTVBMQVRFCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCV9mYXNpbnNfCitfZmFzaW5zXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LnMJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBzZ2wgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MN18ycworCWJzci5sCQlzYXNpbgkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0w3XzZzCitfTDdfMnM6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MN18zcwkJCSMgbm8KKwlic3IubAkJc3JjX3plcm8JCQkjIHllcworCWJyYS5iCQlfTDdfNnMKK19MN18zczoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDdfNHMJCQkjIG5vCisJYnNyLmwJCXRfb3BlcnIJCQkjIHllcworCWJyYS5iCQlfTDdfNnMKK19MN180czoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0w3XzVzCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MN182cworX0w3XzVzOgorCWJzci5sCQlzYXNpbmQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MN182czoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2Zhc2luZF8KK19mYXNpbmRfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YuZAkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIGRibCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCW1vdi5iCQklZDEsU1RBRyglYTYpCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDdfMmQKKwlic3IubAkJc2FzaW4JCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MN182ZAorX0w3XzJkOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDdfM2QJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0w3XzZkCitfTDdfM2Q6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0w3XzRkCQkJIyBubworCWJzci5sCQl0X29wZXJyCQkJIyB5ZXMKKwlicmEuYgkJX0w3XzZkCitfTDdfNGQ6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MN181ZAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDdfNmQKK19MN181ZDoKKwlic3IubAkJc2FzaW5kCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDdfNmQ6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mYXNpbnhfCitfZmFzaW54XzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCW1vdi5sCQkweDgrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBpbnB1dAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0w3XzJ4CisJYnNyLmwJCXNhc2luCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDdfNngKK19MN18yeDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0w3XzN4CQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MN182eAorX0w3XzN4OgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MN180eAkJCSMgbm8KKwlic3IubAkJdF9vcGVycgkJCSMgeWVzCisJYnJhLmIJCV9MN182eAorX0w3XzR4OgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDdfNXgJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0w3XzZ4CitfTDdfNXg6CisJYnNyLmwJCXNhc2luZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0w3XzZ4OgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTU9OQURJQyBURU1QTEFURQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlfZmF0YW5oc18KK19mYXRhbmhzXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LnMJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBzZ2wgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MOF8ycworCWJzci5sCQlzYXRhbmgJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MOF82cworX0w4XzJzOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDhfM3MJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0w4XzZzCitfTDhfM3M6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0w4XzRzCQkJIyBubworCWJzci5sCQl0X29wZXJyCQkJIyB5ZXMKKwlicmEuYgkJX0w4XzZzCitfTDhfNHM6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MOF81cwkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDhfNnMKK19MOF81czoKKwlic3IubAkJc2F0YW5oZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0w4XzZzOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZmF0YW5oZF8KK19mYXRhbmhkXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LmQJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBkYmwgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwltb3YuYgkJJWQxLFNUQUcoJWE2KQorCXRzdC5iCQklZDEKKwlibmUuYgkJX0w4XzJkCisJYnNyLmwJCXNhdGFuaAkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0w4XzZkCitfTDhfMmQ6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MOF8zZAkJCSMgbm8KKwlic3IubAkJc3JjX3plcm8JCQkjIHllcworCWJyYS5iCQlfTDhfNmQKK19MOF8zZDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDhfNGQJCQkjIG5vCisJYnNyLmwJCXRfb3BlcnIJCQkjIHllcworCWJyYS5iCQlfTDhfNmQKK19MOF80ZDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0w4XzVkCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MOF82ZAorX0w4XzVkOgorCWJzci5sCQlzYXRhbmhkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDhfNmQ6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mYXRhbmh4XworX2ZhdGFuaHhfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJbW92LmwJCTB4OCsweDAoJWE2KSwweDAoJWEwKQkjIGxvYWQgZXh0IGlucHV0CisJbW92LmwJCTB4OCsweDQoJWE2KSwweDQoJWEwKQorCW1vdi5sCQkweDgrMHg4KCVhNiksMHg4KCVhMCkKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDhfMngKKwlic3IubAkJc2F0YW5oCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDhfNngKK19MOF8yeDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0w4XzN4CQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MOF82eAorX0w4XzN4OgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MOF80eAkJCSMgbm8KKwlic3IubAkJdF9vcGVycgkJCSMgeWVzCisJYnJhLmIJCV9MOF82eAorX0w4XzR4OgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDhfNXgJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0w4XzZ4CitfTDhfNXg6CisJYnNyLmwJCXNhdGFuaGQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MOF82eDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1PTkFESUMgVEVNUExBVEUJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX2Z0YW5zXworX2Z0YW5zXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LnMJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBzZ2wgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MOV8ycworCWJzci5sCQlzdGFuCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDlfNnMKK19MOV8yczoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0w5XzNzCQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MOV82cworX0w5XzNzOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MOV80cwkJCSMgbm8KKwlic3IubAkJdF9vcGVycgkJCSMgeWVzCisJYnJhLmIJCV9MOV82cworX0w5XzRzOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDlfNXMJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0w5XzZzCitfTDlfNXM6CisJYnNyLmwJCXN0YW5kCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDlfNnM6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mdGFuZF8KK19mdGFuZF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5kCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgZGJsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJbW92LmIJCSVkMSxTVEFHKCVhNikKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MOV8yZAorCWJzci5sCQlzdGFuCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDlfNmQKK19MOV8yZDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0w5XzNkCQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MOV82ZAorX0w5XzNkOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MOV80ZAkJCSMgbm8KKwlic3IubAkJdF9vcGVycgkJCSMgeWVzCisJYnJhLmIJCV9MOV82ZAorX0w5XzRkOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDlfNWQJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0w5XzZkCitfTDlfNWQ6CisJYnNyLmwJCXN0YW5kCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDlfNmQ6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mdGFueF8KK19mdGFueF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwltb3YubAkJMHg4KzB4MCglYTYpLDB4MCglYTApCSMgbG9hZCBleHQgaW5wdXQKKwltb3YubAkJMHg4KzB4NCglYTYpLDB4NCglYTApCisJbW92LmwJCTB4OCsweDgoJWE2KSwweDgoJWEwKQorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MOV8yeAorCWJzci5sCQlzdGFuCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDlfNngKK19MOV8yeDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0w5XzN4CQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MOV82eAorX0w5XzN4OgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MOV80eAkJCSMgbm8KKwlic3IubAkJdF9vcGVycgkJCSMgeWVzCisJYnJhLmIJCV9MOV82eAorX0w5XzR4OgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDlfNXgJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0w5XzZ4CitfTDlfNXg6CisJYnNyLmwJCXN0YW5kCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDlfNng6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNT05BRElDIFRFTVBMQVRFCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCV9mZXRveHNfCitfZmV0b3hzXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LnMJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBzZ2wgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMTBfMnMKKwlic3IubAkJc2V0b3gJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMTBfNnMKK19MMTBfMnM6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMTBfM3MJCQkjIG5vCisJYnNyLmwJCWxkX3BvbmUJCQkjIHllcworCWJyYS5iCQlfTDEwXzZzCitfTDEwXzNzOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMTBfNHMJCQkjIG5vCisJYnNyLmwJCXN6cl9pbmYJCQkjIHllcworCWJyYS5iCQlfTDEwXzZzCitfTDEwXzRzOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDEwXzVzCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMTBfNnMKK19MMTBfNXM6CisJYnNyLmwJCXNldG94ZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxMF82czoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2ZldG94ZF8KK19mZXRveGRfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YuZAkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIGRibCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCW1vdi5iCQklZDEsU1RBRyglYTYpCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDEwXzJkCisJYnNyLmwJCXNldG94CQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDEwXzZkCitfTDEwXzJkOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDEwXzNkCQkJIyBubworCWJzci5sCQlsZF9wb25lCQkJIyB5ZXMKKwlicmEuYgkJX0wxMF82ZAorX0wxMF8zZDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDEwXzRkCQkJIyBubworCWJzci5sCQlzenJfaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wxMF82ZAorX0wxMF80ZDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxMF81ZAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDEwXzZkCitfTDEwXzVkOgorCWJzci5sCQlzZXRveGQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMTBfNmQ6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mZXRveHhfCitfZmV0b3h4XzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCW1vdi5sCQkweDgrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBpbnB1dAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxMF8yeAorCWJzci5sCQlzZXRveAkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxMF82eAorX0wxMF8yeDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxMF8zeAkJCSMgbm8KKwlic3IubAkJbGRfcG9uZQkJCSMgeWVzCisJYnJhLmIJCV9MMTBfNngKK19MMTBfM3g6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wxMF80eAkJCSMgbm8KKwlic3IubAkJc3pyX2luZgkJCSMgeWVzCisJYnJhLmIJCV9MMTBfNngKK19MMTBfNHg6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMTBfNXgJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wxMF82eAorX0wxMF81eDoKKwlic3IubAkJc2V0b3hkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDEwXzZ4OgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTU9OQURJQyBURU1QTEFURQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlfZnR3b3RveHNfCitfZnR3b3RveHNfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YucwkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIHNnbCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxMV8ycworCWJzci5sCQlzdHdvdG94CQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDExXzZzCitfTDExXzJzOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDExXzNzCQkJIyBubworCWJzci5sCQlsZF9wb25lCQkJIyB5ZXMKKwlicmEuYgkJX0wxMV82cworX0wxMV8zczoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDExXzRzCQkJIyBubworCWJzci5sCQlzenJfaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wxMV82cworX0wxMV80czoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxMV81cwkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDExXzZzCitfTDExXzVzOgorCWJzci5sCQlzdHdvdG94ZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxMV82czoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2Z0d290b3hkXworX2Z0d290b3hkXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LmQJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBkYmwgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwltb3YuYgkJJWQxLFNUQUcoJWE2KQorCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxMV8yZAorCWJzci5sCQlzdHdvdG94CQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDExXzZkCitfTDExXzJkOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDExXzNkCQkJIyBubworCWJzci5sCQlsZF9wb25lCQkJIyB5ZXMKKwlicmEuYgkJX0wxMV82ZAorX0wxMV8zZDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDExXzRkCQkJIyBubworCWJzci5sCQlzenJfaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wxMV82ZAorX0wxMV80ZDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxMV81ZAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDExXzZkCitfTDExXzVkOgorCWJzci5sCQlzdHdvdG94ZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxMV82ZDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2Z0d290b3h4XworX2Z0d290b3h4XzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCW1vdi5sCQkweDgrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBpbnB1dAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxMV8yeAorCWJzci5sCQlzdHdvdG94CQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDExXzZ4CitfTDExXzJ4OgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDExXzN4CQkJIyBubworCWJzci5sCQlsZF9wb25lCQkJIyB5ZXMKKwlicmEuYgkJX0wxMV82eAorX0wxMV8zeDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDExXzR4CQkJIyBubworCWJzci5sCQlzenJfaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wxMV82eAorX0wxMV80eDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxMV81eAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDExXzZ4CitfTDExXzV4OgorCWJzci5sCQlzdHdvdG94ZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxMV82eDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1PTkFESUMgVEVNUExBVEUJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX2Z0ZW50b3hzXworX2Z0ZW50b3hzXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LnMJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBzZ2wgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMTJfMnMKKwlic3IubAkJc3RlbnRveAkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxMl82cworX0wxMl8yczoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxMl8zcwkJCSMgbm8KKwlic3IubAkJbGRfcG9uZQkJCSMgeWVzCisJYnJhLmIJCV9MMTJfNnMKK19MMTJfM3M6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wxMl80cwkJCSMgbm8KKwlic3IubAkJc3pyX2luZgkJCSMgeWVzCisJYnJhLmIJCV9MMTJfNnMKK19MMTJfNHM6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMTJfNXMJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wxMl82cworX0wxMl81czoKKwlic3IubAkJc3RlbnRveGQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMTJfNnM6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mdGVudG94ZF8KK19mdGVudG94ZF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5kCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgZGJsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJbW92LmIJCSVkMSxTVEFHKCVhNikKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMTJfMmQKKwlic3IubAkJc3RlbnRveAkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxMl82ZAorX0wxMl8yZDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxMl8zZAkJCSMgbm8KKwlic3IubAkJbGRfcG9uZQkJCSMgeWVzCisJYnJhLmIJCV9MMTJfNmQKK19MMTJfM2Q6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wxMl80ZAkJCSMgbm8KKwlic3IubAkJc3pyX2luZgkJCSMgeWVzCisJYnJhLmIJCV9MMTJfNmQKK19MMTJfNGQ6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMTJfNWQJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wxMl82ZAorX0wxMl81ZDoKKwlic3IubAkJc3RlbnRveGQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMTJfNmQ6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mdGVudG94eF8KK19mdGVudG94eF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwltb3YubAkJMHg4KzB4MCglYTYpLDB4MCglYTApCSMgbG9hZCBleHQgaW5wdXQKKwltb3YubAkJMHg4KzB4NCglYTYpLDB4NCglYTApCisJbW92LmwJCTB4OCsweDgoJWE2KSwweDgoJWEwKQorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMTJfMngKKwlic3IubAkJc3RlbnRveAkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxMl82eAorX0wxMl8yeDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxMl8zeAkJCSMgbm8KKwlic3IubAkJbGRfcG9uZQkJCSMgeWVzCisJYnJhLmIJCV9MMTJfNngKK19MMTJfM3g6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wxMl80eAkJCSMgbm8KKwlic3IubAkJc3pyX2luZgkJCSMgeWVzCisJYnJhLmIJCV9MMTJfNngKK19MMTJfNHg6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMTJfNXgJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wxMl82eAorX0wxMl81eDoKKwlic3IubAkJc3RlbnRveGQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMTJfNng6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNT05BRElDIFRFTVBMQVRFCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCV9mbG9nbnNfCitfZmxvZ25zXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LnMJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBzZ2wgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMTNfMnMKKwlic3IubAkJc2xvZ24JCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMTNfNnMKK19MMTNfMnM6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMTNfM3MJCQkjIG5vCisJYnNyLmwJCXRfZHoyCQkJIyB5ZXMKKwlicmEuYgkJX0wxM182cworX0wxM18zczoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDEzXzRzCQkJIyBubworCWJzci5sCQlzb3ByX2luZgkJCSMgeWVzCisJYnJhLmIJCV9MMTNfNnMKK19MMTNfNHM6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMTNfNXMJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wxM182cworX0wxM181czoKKwlic3IubAkJc2xvZ25kCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDEzXzZzOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZmxvZ25kXworX2Zsb2duZF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5kCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgZGJsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJbW92LmIJCSVkMSxTVEFHKCVhNikKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMTNfMmQKKwlic3IubAkJc2xvZ24JCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMTNfNmQKK19MMTNfMmQ6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMTNfM2QJCQkjIG5vCisJYnNyLmwJCXRfZHoyCQkJIyB5ZXMKKwlicmEuYgkJX0wxM182ZAorX0wxM18zZDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDEzXzRkCQkJIyBubworCWJzci5sCQlzb3ByX2luZgkJCSMgeWVzCisJYnJhLmIJCV9MMTNfNmQKK19MMTNfNGQ6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMTNfNWQJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wxM182ZAorX0wxM181ZDoKKwlic3IubAkJc2xvZ25kCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDEzXzZkOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZmxvZ254XworX2Zsb2dueF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwltb3YubAkJMHg4KzB4MCglYTYpLDB4MCglYTApCSMgbG9hZCBleHQgaW5wdXQKKwltb3YubAkJMHg4KzB4NCglYTYpLDB4NCglYTApCisJbW92LmwJCTB4OCsweDgoJWE2KSwweDgoJWEwKQorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMTNfMngKKwlic3IubAkJc2xvZ24JCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMTNfNngKK19MMTNfMng6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMTNfM3gJCQkjIG5vCisJYnNyLmwJCXRfZHoyCQkJIyB5ZXMKKwlicmEuYgkJX0wxM182eAorX0wxM18zeDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDEzXzR4CQkJIyBubworCWJzci5sCQlzb3ByX2luZgkJCSMgeWVzCisJYnJhLmIJCV9MMTNfNngKK19MMTNfNHg6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMTNfNXgJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wxM182eAorX0wxM181eDoKKwlic3IubAkJc2xvZ25kCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDEzXzZ4OgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTU9OQURJQyBURU1QTEFURQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlfZmxvZzEwc18KK19mbG9nMTBzXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LnMJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBzZ2wgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMTRfMnMKKwlic3IubAkJc2xvZzEwCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDE0XzZzCitfTDE0XzJzOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDE0XzNzCQkJIyBubworCWJzci5sCQl0X2R6MgkJCSMgeWVzCisJYnJhLmIJCV9MMTRfNnMKK19MMTRfM3M6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wxNF80cwkJCSMgbm8KKwlic3IubAkJc29wcl9pbmYJCQkjIHllcworCWJyYS5iCQlfTDE0XzZzCitfTDE0XzRzOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDE0XzVzCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMTRfNnMKK19MMTRfNXM6CisJYnNyLmwJCXNsb2cxMGQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMTRfNnM6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mbG9nMTBkXworX2Zsb2cxMGRfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YuZAkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIGRibCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCW1vdi5iCQklZDEsU1RBRyglYTYpCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDE0XzJkCisJYnNyLmwJCXNsb2cxMAkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxNF82ZAorX0wxNF8yZDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxNF8zZAkJCSMgbm8KKwlic3IubAkJdF9kejIJCQkjIHllcworCWJyYS5iCQlfTDE0XzZkCitfTDE0XzNkOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMTRfNGQJCQkjIG5vCisJYnNyLmwJCXNvcHJfaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wxNF82ZAorX0wxNF80ZDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxNF81ZAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDE0XzZkCitfTDE0XzVkOgorCWJzci5sCQlzbG9nMTBkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDE0XzZkOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZmxvZzEweF8KK19mbG9nMTB4XzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCW1vdi5sCQkweDgrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBpbnB1dAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxNF8yeAorCWJzci5sCQlzbG9nMTAJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMTRfNngKK19MMTRfMng6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMTRfM3gJCQkjIG5vCisJYnNyLmwJCXRfZHoyCQkJIyB5ZXMKKwlicmEuYgkJX0wxNF82eAorX0wxNF8zeDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDE0XzR4CQkJIyBubworCWJzci5sCQlzb3ByX2luZgkJCSMgeWVzCisJYnJhLmIJCV9MMTRfNngKK19MMTRfNHg6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMTRfNXgJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wxNF82eAorX0wxNF81eDoKKwlic3IubAkJc2xvZzEwZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxNF82eDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1PTkFESUMgVEVNUExBVEUJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX2Zsb2cyc18KK19mbG9nMnNfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YucwkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIHNnbCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxNV8ycworCWJzci5sCQlzbG9nMgkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxNV82cworX0wxNV8yczoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxNV8zcwkJCSMgbm8KKwlic3IubAkJdF9kejIJCQkjIHllcworCWJyYS5iCQlfTDE1XzZzCitfTDE1XzNzOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMTVfNHMJCQkjIG5vCisJYnNyLmwJCXNvcHJfaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wxNV82cworX0wxNV80czoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxNV81cwkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDE1XzZzCitfTDE1XzVzOgorCWJzci5sCQlzbG9nMmQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMTVfNnM6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mbG9nMmRfCitfZmxvZzJkXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LmQJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBkYmwgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwltb3YuYgkJJWQxLFNUQUcoJWE2KQorCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxNV8yZAorCWJzci5sCQlzbG9nMgkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxNV82ZAorX0wxNV8yZDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxNV8zZAkJCSMgbm8KKwlic3IubAkJdF9kejIJCQkjIHllcworCWJyYS5iCQlfTDE1XzZkCitfTDE1XzNkOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMTVfNGQJCQkjIG5vCisJYnNyLmwJCXNvcHJfaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wxNV82ZAorX0wxNV80ZDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxNV81ZAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDE1XzZkCitfTDE1XzVkOgorCWJzci5sCQlzbG9nMmQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMTVfNmQ6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mbG9nMnhfCitfZmxvZzJ4XzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCW1vdi5sCQkweDgrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBpbnB1dAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxNV8yeAorCWJzci5sCQlzbG9nMgkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxNV82eAorX0wxNV8yeDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxNV8zeAkJCSMgbm8KKwlic3IubAkJdF9kejIJCQkjIHllcworCWJyYS5iCQlfTDE1XzZ4CitfTDE1XzN4OgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMTVfNHgJCQkjIG5vCisJYnNyLmwJCXNvcHJfaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wxNV82eAorX0wxNV80eDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxNV81eAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDE1XzZ4CitfTDE1XzV4OgorCWJzci5sCQlzbG9nMmQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMTVfNng6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNT05BRElDIFRFTVBMQVRFCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCV9mY29zaHNfCitfZmNvc2hzXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LnMJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBzZ2wgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMTZfMnMKKwlic3IubAkJc2Nvc2gJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMTZfNnMKK19MMTZfMnM6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMTZfM3MJCQkjIG5vCisJYnNyLmwJCWxkX3BvbmUJCQkjIHllcworCWJyYS5iCQlfTDE2XzZzCitfTDE2XzNzOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMTZfNHMJCQkjIG5vCisJYnNyLmwJCWxkX3BpbmYJCQkjIHllcworCWJyYS5iCQlfTDE2XzZzCitfTDE2XzRzOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDE2XzVzCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMTZfNnMKK19MMTZfNXM6CisJYnNyLmwJCXNjb3NoZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxNl82czoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2Zjb3NoZF8KK19mY29zaGRfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YuZAkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIGRibCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCW1vdi5iCQklZDEsU1RBRyglYTYpCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDE2XzJkCisJYnNyLmwJCXNjb3NoCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDE2XzZkCitfTDE2XzJkOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDE2XzNkCQkJIyBubworCWJzci5sCQlsZF9wb25lCQkJIyB5ZXMKKwlicmEuYgkJX0wxNl82ZAorX0wxNl8zZDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDE2XzRkCQkJIyBubworCWJzci5sCQlsZF9waW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wxNl82ZAorX0wxNl80ZDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxNl81ZAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDE2XzZkCitfTDE2XzVkOgorCWJzci5sCQlzY29zaGQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMTZfNmQ6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mY29zaHhfCitfZmNvc2h4XzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCW1vdi5sCQkweDgrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBpbnB1dAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxNl8yeAorCWJzci5sCQlzY29zaAkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxNl82eAorX0wxNl8yeDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxNl8zeAkJCSMgbm8KKwlic3IubAkJbGRfcG9uZQkJCSMgeWVzCisJYnJhLmIJCV9MMTZfNngKK19MMTZfM3g6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wxNl80eAkJCSMgbm8KKwlic3IubAkJbGRfcGluZgkJCSMgeWVzCisJYnJhLmIJCV9MMTZfNngKK19MMTZfNHg6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMTZfNXgJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wxNl82eAorX0wxNl81eDoKKwlic3IubAkJc2Nvc2hkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDE2XzZ4OgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTU9OQURJQyBURU1QTEFURQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlfZmFjb3NzXworX2ZhY29zc186CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5zCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgc2dsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDE3XzJzCisJYnNyLmwJCXNhY29zCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDE3XzZzCitfTDE3XzJzOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDE3XzNzCQkJIyBubworCWJzci5sCQlsZF9wcGkyCQkJIyB5ZXMKKwlicmEuYgkJX0wxN182cworX0wxN18zczoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDE3XzRzCQkJIyBubworCWJzci5sCQl0X29wZXJyCQkJIyB5ZXMKKwlicmEuYgkJX0wxN182cworX0wxN180czoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxN181cwkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDE3XzZzCitfTDE3XzVzOgorCWJzci5sCQlzYWNvc2QJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMTdfNnM6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mYWNvc2RfCitfZmFjb3NkXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LmQJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBkYmwgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwltb3YuYgkJJWQxLFNUQUcoJWE2KQorCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxN18yZAorCWJzci5sCQlzYWNvcwkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxN182ZAorX0wxN18yZDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxN18zZAkJCSMgbm8KKwlic3IubAkJbGRfcHBpMgkJCSMgeWVzCisJYnJhLmIJCV9MMTdfNmQKK19MMTdfM2Q6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wxN180ZAkJCSMgbm8KKwlic3IubAkJdF9vcGVycgkJCSMgeWVzCisJYnJhLmIJCV9MMTdfNmQKK19MMTdfNGQ6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMTdfNWQJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wxN182ZAorX0wxN181ZDoKKwlic3IubAkJc2Fjb3NkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDE3XzZkOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZmFjb3N4XworX2ZhY29zeF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwltb3YubAkJMHg4KzB4MCglYTYpLDB4MCglYTApCSMgbG9hZCBleHQgaW5wdXQKKwltb3YubAkJMHg4KzB4NCglYTYpLDB4NCglYTApCisJbW92LmwJCTB4OCsweDgoJWE2KSwweDgoJWEwKQorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMTdfMngKKwlic3IubAkJc2Fjb3MJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMTdfNngKK19MMTdfMng6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMTdfM3gJCQkjIG5vCisJYnNyLmwJCWxkX3BwaTIJCQkjIHllcworCWJyYS5iCQlfTDE3XzZ4CitfTDE3XzN4OgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMTdfNHgJCQkjIG5vCisJYnNyLmwJCXRfb3BlcnIJCQkjIHllcworCWJyYS5iCQlfTDE3XzZ4CitfTDE3XzR4OgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDE3XzV4CQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMTdfNngKK19MMTdfNXg6CisJYnNyLmwJCXNhY29zZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxN182eDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1PTkFESUMgVEVNUExBVEUJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX2ZnZXRleHBzXworX2ZnZXRleHBzXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LnMJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBzZ2wgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMThfMnMKKwlic3IubAkJc2dldGV4cAkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxOF82cworX0wxOF8yczoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxOF8zcwkJCSMgbm8KKwlic3IubAkJc3JjX3plcm8JCQkjIHllcworCWJyYS5iCQlfTDE4XzZzCitfTDE4XzNzOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMThfNHMJCQkjIG5vCisJYnNyLmwJCXRfb3BlcnIJCQkjIHllcworCWJyYS5iCQlfTDE4XzZzCitfTDE4XzRzOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDE4XzVzCQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMThfNnMKK19MMThfNXM6CisJYnNyLmwJCXNnZXRleHBkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDE4XzZzOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZmdldGV4cGRfCitfZmdldGV4cGRfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YuZAkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIGRibCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCW1vdi5iCQklZDEsU1RBRyglYTYpCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDE4XzJkCisJYnNyLmwJCXNnZXRleHAJCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMThfNmQKK19MMThfMmQ6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMThfM2QJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0wxOF82ZAorX0wxOF8zZDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDE4XzRkCQkJIyBubworCWJzci5sCQl0X29wZXJyCQkJIyB5ZXMKKwlicmEuYgkJX0wxOF82ZAorX0wxOF80ZDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxOF81ZAkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDE4XzZkCitfTDE4XzVkOgorCWJzci5sCQlzZ2V0ZXhwZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxOF82ZDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2ZnZXRleHB4XworX2ZnZXRleHB4XzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCW1vdi5sCQkweDgrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBpbnB1dAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxOF8yeAorCWJzci5sCQlzZ2V0ZXhwCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDE4XzZ4CitfTDE4XzJ4OgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDE4XzN4CQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MMThfNngKK19MMThfM3g6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wxOF80eAkJCSMgbm8KKwlic3IubAkJdF9vcGVycgkJCSMgeWVzCisJYnJhLmIJCV9MMThfNngKK19MMThfNHg6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMThfNXgJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wxOF82eAorX0wxOF81eDoKKwlic3IubAkJc2dldGV4cGQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMThfNng6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNT05BRElDIFRFTVBMQVRFCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCV9mZ2V0bWFuc18KK19mZ2V0bWFuc186CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5zCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgc2dsIGlucHV0CisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5iCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDE5XzJzCisJYnNyLmwJCXNnZXRtYW4JCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMTlfNnMKK19MMTlfMnM6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMTlfM3MJCQkjIG5vCisJYnNyLmwJCXNyY196ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0wxOV82cworX0wxOV8zczoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDE5XzRzCQkJIyBubworCWJzci5sCQl0X29wZXJyCQkJIyB5ZXMKKwlicmEuYgkJX0wxOV82cworX0wxOV80czoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wxOV81cwkJCSMgbm8KKwlic3IubAkJc3JjX3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDE5XzZzCitfTDE5XzVzOgorCWJzci5sCQlzZ2V0bWFuZAkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wxOV82czoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2ZnZXRtYW5kXworX2ZnZXRtYW5kXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LmQJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBkYmwgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwltb3YuYgkJJWQxLFNUQUcoJWE2KQorCXRzdC5iCQklZDEKKwlibmUuYgkJX0wxOV8yZAorCWJzci5sCQlzZ2V0bWFuCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDE5XzZkCitfTDE5XzJkOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDE5XzNkCQkJIyBubworCWJzci5sCQlzcmNfemVybwkJCSMgeWVzCisJYnJhLmIJCV9MMTlfNmQKK19MMTlfM2Q6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wxOV80ZAkJCSMgbm8KKwlic3IubAkJdF9vcGVycgkJCSMgeWVzCisJYnJhLmIJCV9MMTlfNmQKK19MMTlfNGQ6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMTlfNWQJCQkjIG5vCisJYnNyLmwJCXNyY19xbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wxOV82ZAorX0wxOV81ZDoKKwlic3IubAkJc2dldG1hbmQJCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMTlfNmQ6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mZ2V0bWFueF8KK19mZ2V0bWFueF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwltb3YubAkJMHg4KzB4MCglYTYpLDB4MCglYTApCSMgbG9hZCBleHQgaW5wdXQKKwltb3YubAkJMHg4KzB4NCglYTYpLDB4NCglYTApCisJbW92LmwJCTB4OCsweDgoJWE2KSwweDgoJWEwKQorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMTlfMngKKwlic3IubAkJc2dldG1hbgkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wxOV82eAorX0wxOV8yeDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wxOV8zeAkJCSMgbm8KKwlic3IubAkJc3JjX3plcm8JCQkjIHllcworCWJyYS5iCQlfTDE5XzZ4CitfTDE5XzN4OgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMTlfNHgJCQkjIG5vCisJYnNyLmwJCXRfb3BlcnIJCQkjIHllcworCWJyYS5iCQlfTDE5XzZ4CitfTDE5XzR4OgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDE5XzV4CQkJIyBubworCWJzci5sCQlzcmNfcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMTlfNngKK19MMTlfNXg6CisJYnNyLmwJCXNnZXRtYW5kCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDE5XzZ4OgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTU9OQURJQyBURU1QTEFURQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlfZnNpbmNvc3NfCitfZnNpbmNvc3NfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YucwkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIHNnbCBpbnB1dAorCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wyMF8ycworCWJzci5sCQlzc2luY29zCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDIwXzZzCitfTDIwXzJzOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDIwXzNzCQkJIyBubworCWJzci5sCQlzc2luY29zegkJCSMgeWVzCisJYnJhLmIJCV9MMjBfNnMKK19MMjBfM3M6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wyMF80cwkJCSMgbm8KKwlic3IubAkJc3NpbmNvc2kJCQkjIHllcworCWJyYS5iCQlfTDIwXzZzCitfTDIwXzRzOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDIwXzVzCQkJIyBubworCWJzci5sCQlzc2luY29zcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMjBfNnMKK19MMjBfNXM6CisJYnNyLmwJCXNzaW5jb3NkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDIwXzZzOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHgwMywtKCVzcCkJCSMgc3RvcmUgb2ZmIGZwMC9mcDEKKwlmbW92bS54CQkoJXNwKSssJjB4NDAJCSMgZnAwIG5vdyBpbiBmcDEKKwlmbW92bS54CQkoJXNwKSssJjB4ODAJCSMgZnAxIG5vdyBpbiBmcDAKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2ZzaW5jb3NkXworX2ZzaW5jb3NkXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LmQJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBkYmwgaW5wdXQKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmIJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwltb3YuYgkJJWQxLFNUQUcoJWE2KQorCXRzdC5iCQklZDEKKwlibmUuYgkJX0wyMF8yZAorCWJzci5sCQlzc2luY29zCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDIwXzZkCitfTDIwXzJkOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDIwXzNkCQkJIyBubworCWJzci5sCQlzc2luY29zegkJCSMgeWVzCisJYnJhLmIJCV9MMjBfNmQKK19MMjBfM2Q6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wyMF80ZAkJCSMgbm8KKwlic3IubAkJc3NpbmNvc2kJCQkjIHllcworCWJyYS5iCQlfTDIwXzZkCitfTDIwXzRkOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDIwXzVkCQkJIyBubworCWJzci5sCQlzc2luY29zcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMjBfNmQKK19MMjBfNWQ6CisJYnNyLmwJCXNzaW5jb3NkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDIwXzZkOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHgwMywtKCVzcCkJCSMgc3RvcmUgb2ZmIGZwMC9mcDEKKwlmbW92bS54CQkoJXNwKSssJjB4NDAJCSMgZnAwIG5vdyBpbiBmcDEKKwlmbW92bS54CQkoJXNwKSssJjB4ODAJCSMgZnAxIG5vdyBpbiBmcDAKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2ZzaW5jb3N4XworX2ZzaW5jb3N4XzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCW1vdi5sCQkweDgrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBpbnB1dAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YuYgkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wyMF8yeAorCWJzci5sCQlzc2luY29zCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDIwXzZ4CitfTDIwXzJ4OgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDIwXzN4CQkJIyBubworCWJzci5sCQlzc2luY29zegkJCSMgeWVzCisJYnJhLmIJCV9MMjBfNngKK19MMjBfM3g6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wyMF80eAkJCSMgbm8KKwlic3IubAkJc3NpbmNvc2kJCQkjIHllcworCWJyYS5iCQlfTDIwXzZ4CitfTDIwXzR4OgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDIwXzV4CQkJIyBubworCWJzci5sCQlzc2luY29zcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMjBfNngKK19MMjBfNXg6CisJYnNyLmwJCXNzaW5jb3NkCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDIwXzZ4OgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHgwMywtKCVzcCkJCSMgc3RvcmUgb2ZmIGZwMC9mcDEKKwlmbW92bS54CQkoJXNwKSssJjB4NDAJCSMgZnAwIG5vdyBpbiBmcDEKKwlmbW92bS54CQkoJXNwKSssJjB4ODAJCSMgZnAxIG5vdyBpbiBmcDAKKwl1bmxrCQklYTYKKwlydHMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERZQURJQyBURU1QTEFURQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlfZnJlbXNfCitfZnJlbXNfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YucwkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIHNnbCBkc3QKKwlmbW92LngJCSVmcDAsRlBfRFNUKCVhNikKKwlsZWEJCUZQX0RTVCglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsRFRBRyglYTYpCisKKwlmbW92LnMJCTB4YyglYTYpLCVmcDAJCSMgbG9hZCBzZ2wgc3JjCisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5sCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gc3JjCisJbGVhCQlGUF9EU1QoJWE2KSwlYTEJCSMgcGFzcyBwdHIgdG8gZHN0CisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMjFfMnMKKwlic3IubAkJc3JlbV9zbm9ybQkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wyMV82cworX0wyMV8yczoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wyMV8zcwkJCSMgbm8KKwlic3IubAkJc3JlbV9zemVybwkJCSMgeWVzCisJYnJhLmIJCV9MMjFfNnMKK19MMjFfM3M6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wyMV80cwkJCSMgbm8KKwlic3IubAkJc3JlbV9zaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wyMV82cworX0wyMV80czoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wyMV81cwkJCSMgbm8KKwlic3IubAkJc29wX3NxbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wyMV82cworX0wyMV81czoKKwlic3IubAkJc3JlbV9zZG5ybQkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wyMV82czoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2ZyZW1kXworX2ZyZW1kXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LmQJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBkYmwgZHN0CisJZm1vdi54CQklZnAwLEZQX0RTVCglYTYpCisJbGVhCQlGUF9EU1QoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLERUQUcoJWE2KQorCisJZm1vdi5kCQkweDEwKCVhNiksJWZwMAkJIyBsb2FkIGRibCBzcmMKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmwJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMKKwlsZWEJCUZQX0RTVCglYTYpLCVhMQkJIyBwYXNzIHB0ciB0byBkc3QKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wyMV8yZAorCWJzci5sCQlzcmVtX3Nub3JtCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDIxXzZkCitfTDIxXzJkOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDIxXzNkCQkJIyBubworCWJzci5sCQlzcmVtX3N6ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0wyMV82ZAorX0wyMV8zZDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDIxXzRkCQkJIyBubworCWJzci5sCQlzcmVtX3NpbmYJCQkjIHllcworCWJyYS5iCQlfTDIxXzZkCitfTDIxXzRkOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDIxXzVkCQkJIyBubworCWJzci5sCQlzb3Bfc3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDIxXzZkCitfTDIxXzVkOgorCWJzci5sCQlzcmVtX3NkbnJtCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDIxXzZkOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZnJlbXhfCitfZnJlbXhfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWxlYQkJRlBfRFNUKCVhNiksJWEwCisJbW92LmwJCTB4OCsweDAoJWE2KSwweDAoJWEwKQkjIGxvYWQgZXh0IGRzdAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxEVEFHKCVhNikKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJbW92LmwJCTB4MTQrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBzcmMKKwltb3YubAkJMHgxNCsweDQoJWE2KSwweDQoJWEwKQorCW1vdi5sCQkweDE0KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YubAkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIHNyYworCWxlYQkJRlBfRFNUKCVhNiksJWExCQkjIHBhc3MgcHRyIHRvIGRzdAorCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDIxXzJ4CisJYnNyLmwJCXNyZW1fc25vcm0JCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMjFfNngKK19MMjFfMng6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMjFfM3gJCQkjIG5vCisJYnNyLmwJCXNyZW1fc3plcm8JCQkjIHllcworCWJyYS5iCQlfTDIxXzZ4CitfTDIxXzN4OgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMjFfNHgJCQkjIG5vCisJYnNyLmwJCXNyZW1fc2luZgkJCSMgeWVzCisJYnJhLmIJCV9MMjFfNngKK19MMjFfNHg6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMjFfNXgJCQkjIG5vCisJYnNyLmwJCXNvcF9zcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMjFfNngKK19MMjFfNXg6CisJYnNyLmwJCXNyZW1fc2Rucm0JCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMjFfNng6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEWUFESUMgVEVNUExBVEUJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX2Ztb2RzXworX2Ztb2RzXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LnMJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBzZ2wgZHN0CisJZm1vdi54CQklZnAwLEZQX0RTVCglYTYpCisJbGVhCQlGUF9EU1QoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLERUQUcoJWE2KQorCisJZm1vdi5zCQkweGMoJWE2KSwlZnAwCQkjIGxvYWQgc2dsIHNyYworCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YubAkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIHNyYworCWxlYQkJRlBfRFNUKCVhNiksJWExCQkjIHBhc3MgcHRyIHRvIGRzdAorCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDIyXzJzCisJYnNyLmwJCXNtb2Rfc25vcm0JCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMjJfNnMKK19MMjJfMnM6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMjJfM3MJCQkjIG5vCisJYnNyLmwJCXNtb2Rfc3plcm8JCQkjIHllcworCWJyYS5iCQlfTDIyXzZzCitfTDIyXzNzOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMjJfNHMJCQkjIG5vCisJYnNyLmwJCXNtb2Rfc2luZgkJCSMgeWVzCisJYnJhLmIJCV9MMjJfNnMKK19MMjJfNHM6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMjJfNXMJCQkjIG5vCisJYnNyLmwJCXNvcF9zcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMjJfNnMKK19MMjJfNXM6CisJYnNyLmwJCXNtb2Rfc2Rucm0JCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMjJfNnM6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mbW9kZF8KK19mbW9kZF86CisJbGluawkJJWE2LCYtTE9DQUxfU0laRQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlAwKCVhNikJIyBzYXZlIGZwMC9mcDEKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIEZQQ1IKKworIworIwljb3B5LCBjb252ZXJ0LCBhbmQgdGFnIGlucHV0IGFyZ3VtZW50CisjCisJZm1vdi5kCQkweDgoJWE2KSwlZnAwCQkjIGxvYWQgZGJsIGRzdAorCWZtb3YueAkJJWZwMCxGUF9EU1QoJWE2KQorCWxlYQkJRlBfRFNUKCVhNiksJWEwCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxEVEFHKCVhNikKKworCWZtb3YuZAkJMHgxMCglYTYpLCVmcDAJCSMgbG9hZCBkYmwgc3JjCisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5sCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gc3JjCisJbGVhCQlGUF9EU1QoJWE2KSwlYTEJCSMgcGFzcyBwdHIgdG8gZHN0CisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMjJfMmQKKwlic3IubAkJc21vZF9zbm9ybQkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wyMl82ZAorX0wyMl8yZDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wyMl8zZAkJCSMgbm8KKwlic3IubAkJc21vZF9zemVybwkJCSMgeWVzCisJYnJhLmIJCV9MMjJfNmQKK19MMjJfM2Q6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wyMl80ZAkJCSMgbm8KKwlic3IubAkJc21vZF9zaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wyMl82ZAorX0wyMl80ZDoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wyMl81ZAkJCSMgbm8KKwlic3IubAkJc29wX3NxbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wyMl82ZAorX0wyMl81ZDoKKwlic3IubAkJc21vZF9zZG5ybQkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wyMl82ZDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCWdsb2JhbAkJX2Ztb2R4XworX2Ztb2R4XzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlsZWEJCUZQX0RTVCglYTYpLCVhMAorCW1vdi5sCQkweDgrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBkc3QKKwltb3YubAkJMHg4KzB4NCglYTYpLDB4NCglYTApCisJbW92LmwJCTB4OCsweDgoJWE2KSwweDgoJWEwKQorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsRFRBRyglYTYpCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCW1vdi5sCQkweDE0KzB4MCglYTYpLDB4MCglYTApCSMgbG9hZCBleHQgc3JjCisJbW92LmwJCTB4MTQrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHgxNCsweDgoJWE2KSwweDgoJWEwKQorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmwJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMKKwlsZWEJCUZQX0RTVCglYTYpLCVhMQkJIyBwYXNzIHB0ciB0byBkc3QKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wyMl8yeAorCWJzci5sCQlzbW9kX3Nub3JtCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDIyXzZ4CitfTDIyXzJ4OgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDIyXzN4CQkJIyBubworCWJzci5sCQlzbW9kX3N6ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0wyMl82eAorX0wyMl8zeDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDIyXzR4CQkJIyBubworCWJzci5sCQlzbW9kX3NpbmYJCQkjIHllcworCWJyYS5iCQlfTDIyXzZ4CitfTDIyXzR4OgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDIyXzV4CQkJIyBubworCWJzci5sCQlzb3Bfc3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDIyXzZ4CitfTDIyXzV4OgorCWJzci5sCQlzbW9kX3NkbnJtCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDIyXzZ4OgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRFlBRElDIFRFTVBMQVRFCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCV9mc2NhbGVzXworX2ZzY2FsZXNfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWZtb3YucwkJMHg4KCVhNiksJWZwMAkJIyBsb2FkIHNnbCBkc3QKKwlmbW92LngJCSVmcDAsRlBfRFNUKCVhNikKKwlsZWEJCUZQX0RTVCglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsRFRBRyglYTYpCisKKwlmbW92LnMJCTB4YyglYTYpLCVmcDAJCSMgbG9hZCBzZ2wgc3JjCisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQorCW1vdi5sCQklZDAsJWQxCisKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIG1vZGUscHJlYworCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gc3JjCisJbGVhCQlGUF9EU1QoJWE2KSwlYTEJCSMgcGFzcyBwdHIgdG8gZHN0CisKKwl0c3QuYgkJJWQxCisJYm5lLmIJCV9MMjNfMnMKKwlic3IubAkJc3NjYWxlX3Nub3JtCQkJIyBvcGVyYW5kIGlzIGEgTk9STQorCWJyYS5iCQlfTDIzXzZzCitfTDIzXzJzOgorCWNtcGkuYgkJJWQxLCZaRVJPCQkjIGlzIG9wZXJhbmQgYSBaRVJPPworCWJuZS5iCQlfTDIzXzNzCQkJIyBubworCWJzci5sCQlzc2NhbGVfc3plcm8JCQkjIHllcworCWJyYS5iCQlfTDIzXzZzCitfTDIzXzNzOgorCWNtcGkuYgkJJWQxLCZJTkYJCSMgaXMgb3BlcmFuZCBhbiBJTkY/CisJYm5lLmIJCV9MMjNfNHMJCQkjIG5vCisJYnNyLmwJCXNzY2FsZV9zaW5mCQkJIyB5ZXMKKwlicmEuYgkJX0wyM182cworX0wyM180czoKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyBpcyBvcGVyYW5kIGEgUU5BTj8KKwlibmUuYgkJX0wyM181cwkJCSMgbm8KKwlic3IubAkJc29wX3NxbmFuCQkJIyB5ZXMKKwlicmEuYgkJX0wyM182cworX0wyM181czoKKwlic3IubAkJc3NjYWxlX3NkbnJtCQkJIyBvcGVyYW5kIGlzIGEgREVOT1JNCitfTDIzXzZzOgorCisjCisjCVJlc3VsdCBpcyBub3cgaW4gRlAwCisjCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwlmbW92bS54CQlFWENfRlAxKCVhNiksJjB4NDAJIyByZXN0b3JlIGZwMQorCXVubGsJCSVhNgorCXJ0cworCisJZ2xvYmFsCQlfZnNjYWxlZF8KK19mc2NhbGVkXzoKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUDAoJWE2KQkjIHNhdmUgZnAwL2ZwMQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gRlBDUgorCisjCisjCWNvcHksIGNvbnZlcnQsIGFuZCB0YWcgaW5wdXQgYXJndW1lbnQKKyMKKwlmbW92LmQJCTB4OCglYTYpLCVmcDAJCSMgbG9hZCBkYmwgZHN0CisJZm1vdi54CQklZnAwLEZQX0RTVCglYTYpCisJbGVhCQlGUF9EU1QoJWE2KSwlYTAKKwlic3IubAkJdGFnCQkJIyBmZXRjaCBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLERUQUcoJWE2KQorCisJZm1vdi5kCQkweDEwKCVhNiksJWZwMAkJIyBsb2FkIGRibCBzcmMKKwlmbW92LngJCSVmcDAsRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQl0YWcJCQkjIGZldGNoIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCisJbW92LmwJCSVkMCwlZDEKKworCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgbW9kZSxwcmVjCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMKKwlsZWEJCUZQX0RTVCglYTYpLCVhMQkJIyBwYXNzIHB0ciB0byBkc3QKKworCXRzdC5iCQklZDEKKwlibmUuYgkJX0wyM18yZAorCWJzci5sCQlzc2NhbGVfc25vcm0JCQkjIG9wZXJhbmQgaXMgYSBOT1JNCisJYnJhLmIJCV9MMjNfNmQKK19MMjNfMmQ6CisJY21waS5iCQklZDEsJlpFUk8JCSMgaXMgb3BlcmFuZCBhIFpFUk8/CisJYm5lLmIJCV9MMjNfM2QJCQkjIG5vCisJYnNyLmwJCXNzY2FsZV9zemVybwkJCSMgeWVzCisJYnJhLmIJCV9MMjNfNmQKK19MMjNfM2Q6CisJY21waS5iCQklZDEsJklORgkJIyBpcyBvcGVyYW5kIGFuIElORj8KKwlibmUuYgkJX0wyM180ZAkJCSMgbm8KKwlic3IubAkJc3NjYWxlX3NpbmYJCQkjIHllcworCWJyYS5iCQlfTDIzXzZkCitfTDIzXzRkOgorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIGlzIG9wZXJhbmQgYSBRTkFOPworCWJuZS5iCQlfTDIzXzVkCQkJIyBubworCWJzci5sCQlzb3Bfc3FuYW4JCQkjIHllcworCWJyYS5iCQlfTDIzXzZkCitfTDIzXzVkOgorCWJzci5sCQlzc2NhbGVfc2Rucm0JCQkjIG9wZXJhbmQgaXMgYSBERU5PUk0KK19MMjNfNmQ6CisKKyMKKyMJUmVzdWx0IGlzIG5vdyBpbiBGUDAKKyMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUDEoJWE2KSwmMHg0MAkjIHJlc3RvcmUgZnAxCisJdW5sawkJJWE2CisJcnRzCisKKwlnbG9iYWwJCV9mc2NhbGV4XworX2ZzY2FsZXhfOgorCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQMCglYTYpCSMgc2F2ZSBmcDAvZnAxCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBGUENSCisKKyMKKyMJY29weSwgY29udmVydCwgYW5kIHRhZyBpbnB1dCBhcmd1bWVudAorIworCWxlYQkJRlBfRFNUKCVhNiksJWEwCisJbW92LmwJCTB4OCsweDAoJWE2KSwweDAoJWEwKQkjIGxvYWQgZXh0IGRzdAorCW1vdi5sCQkweDgrMHg0KCVhNiksMHg0KCVhMCkKKwltb3YubAkJMHg4KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxEVEFHKCVhNikKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJbW92LmwJCTB4MTQrMHgwKCVhNiksMHgwKCVhMCkJIyBsb2FkIGV4dCBzcmMKKwltb3YubAkJMHgxNCsweDQoJWE2KSwweDQoJWEwKQorCW1vdi5sCQkweDE0KzB4OCglYTYpLDB4OCglYTApCisJYnNyLmwJCXRhZwkJCSMgZmV0Y2ggb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKwltb3YubAkJJWQwLCVkMQorCisJYW5kaS5sCQkmMHgwMGZmMDBmZixVU0VSX0ZQU1IoJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBtb2RlLHByZWMKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIHNyYworCWxlYQkJRlBfRFNUKCVhNiksJWExCQkjIHBhc3MgcHRyIHRvIGRzdAorCisJdHN0LmIJCSVkMQorCWJuZS5iCQlfTDIzXzJ4CisJYnNyLmwJCXNzY2FsZV9zbm9ybQkJCSMgb3BlcmFuZCBpcyBhIE5PUk0KKwlicmEuYgkJX0wyM182eAorX0wyM18yeDoKKwljbXBpLmIJCSVkMSwmWkVSTwkJIyBpcyBvcGVyYW5kIGEgWkVSTz8KKwlibmUuYgkJX0wyM18zeAkJCSMgbm8KKwlic3IubAkJc3NjYWxlX3N6ZXJvCQkJIyB5ZXMKKwlicmEuYgkJX0wyM182eAorX0wyM18zeDoKKwljbXBpLmIJCSVkMSwmSU5GCQkjIGlzIG9wZXJhbmQgYW4gSU5GPworCWJuZS5iCQlfTDIzXzR4CQkJIyBubworCWJzci5sCQlzc2NhbGVfc2luZgkJCSMgeWVzCisJYnJhLmIJCV9MMjNfNngKK19MMjNfNHg6CisJY21waS5iCQklZDEsJlFOQU4JCSMgaXMgb3BlcmFuZCBhIFFOQU4/CisJYm5lLmIJCV9MMjNfNXgJCQkjIG5vCisJYnNyLmwJCXNvcF9zcW5hbgkJCSMgeWVzCisJYnJhLmIJCV9MMjNfNngKK19MMjNfNXg6CisJYnNyLmwJCXNzY2FsZV9zZG5ybQkJCSMgb3BlcmFuZCBpcyBhIERFTk9STQorX0wyM182eDoKKworIworIwlSZXN1bHQgaXMgbm93IGluIEZQMAorIworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQMSglYTYpLCYweDQwCSMgcmVzdG9yZSBmcDEKKwl1bmxrCQklYTYKKwlydHMKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNzaW4oKTogICAgIGNvbXB1dGVzIHRoZSBzaW5lIG9mIGEgbm9ybWFsaXplZCBpbnB1dAkJCSMKKyMgc3NpbmQoKTogICAgY29tcHV0ZXMgdGhlIHNpbmUgb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJCQkjCisjIHNjb3MoKTogICAgIGNvbXB1dGVzIHRoZSBjb3NpbmUgb2YgYSBub3JtYWxpemVkIGlucHV0CQkJIworIyBzY29zZCgpOiAgICBjb21wdXRlcyB0aGUgY29zaW5lIG9mIGEgZGVub3JtYWxpemVkIGlucHV0CQkjCisjIHNzaW5jb3MoKTogIGNvbXB1dGVzIHRoZSBzaW5lIGFuZCBjb3NpbmUgb2YgYSBub3JtYWxpemVkIGlucHV0CSMKKyMgc3NpbmNvc2QoKTogY29tcHV0ZXMgdGhlIHNpbmUgYW5kIGNvc2luZSBvZiBhIGRlbm9ybWFsaXplZCBpbnB1dAkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlmcDAgPSBzaW4oWCkgb3IgY29zKFgpCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgICAgRm9yIHNzaW5jb3MoWCk6CQkJCQkJCSMKKyMJZnAwID0gc2luKFgpCQkJCQkJCSMKKyMJZnAxID0gY29zKFgpCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCVRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDEgdWxwIGluIDY0IHNpZ25pZmljYW50IGJpdCwgaS5lLgkjCisjCXdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkJIworIwlyb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljCSMKKyMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkJCQkJCQkJCSMKKyMJU0lOIGFuZCBDT1M6CQkJCQkJCSMKKyMJMS4gSWYgU0lOIGlzIGludm9rZWQsIHNldCBBZGpOIDo9IDA7IG90aGVyd2lzZSwgc2V0IEFkak4gOj0gMS4JIworIwkJCQkJCQkJCSMKKyMJMi4gSWYgfFh8ID49IDE1UGkgb3IgfFh8IDwgMioqKC00MCksIGdvIHRvIDcuCQkJIworIwkJCQkJCQkJCSMKKyMJMy4gRGVjb21wb3NlIFggYXMgWCA9IE4oUGkvMikgKyByIHdoZXJlIHxyfCA8PSBQaS80LiBMZXQJIworIwkJayA9IE4gbW9kIDQsIHNvIGluIHBhcnRpY3VsYXIsIGsgPSAwLDEsMixvciAzLgkJIworIwkJT3ZlcndyaXRlIGsgYnkgayA6PSBrICsgQWRqTi4JCQkJIworIwkJCQkJCQkJCSMKKyMJNC4gSWYgayBpcyBldmVuLCBnbyB0byA2LgkJCQkJIworIwkJCQkJCQkJCSMKKyMJNS4gKGsgaXMgb2RkKSBTZXQgaiA6PSAoay0xKS8yLCBzZ24gOj0gKC0xKSoqai4JCQkjCisjCQlSZXR1cm4gc2duKmNvcyhyKSB3aGVyZSBjb3MocikgaXMgYXBwcm94aW1hdGVkIGJ5IGFuCSMKKyMJCWV2ZW4gcG9seW5vbWlhbCBpbiByLCAxICsgcipyKihCMStzKihCMisgLi4uICsgcypCOCkpLAkjCisjCQlzID0gcipyLgkJCQkJCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTYuIChrIGlzIGV2ZW4pIFNldCBqIDo9IGsvMiwgc2duIDo9ICgtMSkqKmouIFJldHVybiBzZ24qc2luKHIpCSMKKyMJCXdoZXJlIHNpbihyKSBpcyBhcHByb3hpbWF0ZWQgYnkgYW4gb2RkIHBvbHlub21pYWwgaW4gcgkjCisjCQlyICsgcipzKihBMStzKihBMisgLi4uICsgcypBNykpLAlzID0gcipyLgkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwk3LiBJZiB8WHwgPiAxLCBnbyB0byA5LgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTguICh8WHw8MioqKC00MCkpIElmIFNJTiBpcyBpbnZva2VkLCByZXR1cm4gWDsJCQkjCisjCQlvdGhlcndpc2UgcmV0dXJuIDEuCQkJCQkjCisjCQkJCQkJCQkJIworIwk5LiBPdmVyd3JpdGUgWCBieSBYIDo9IFggcmVtIDJQaS4gTm93IHRoYXQgfFh8IDw9IFBpLAkJIworIwkJZ28gYmFjayB0byAzLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCVNJTkNPUzoJCQkJCQkJCSMKKyMJMS4gSWYgfFh8ID49IDE1UGkgb3IgfFh8IDwgMioqKC00MCksIGdvIHRvIDYuCQkJIworIwkJCQkJCQkJCSMKKyMJMi4gRGVjb21wb3NlIFggYXMgWCA9IE4oUGkvMikgKyByIHdoZXJlIHxyfCA8PSBQaS80LiBMZXQJIworIwkJayA9IE4gbW9kIDQsIHNvIGluIHBhcnRpY3VsYXIsIGsgPSAwLDEsMixvciAzLgkJIworIwkJCQkJCQkJCSMKKyMJMy4gSWYgayBpcyBldmVuLCBnbyB0byA1LgkJCQkJIworIwkJCQkJCQkJCSMKKyMJNC4gKGsgaXMgb2RkKSBTZXQgajEgOj0gKGstMSkvMiwgajIgOj0gajEgKEVPUikgKGsgbW9kIDIpLCBpZS4JIworIwkJajEgZXhjbHVzaXZlIG9yIHdpdGggdGhlIGwucy5iLiBvZiBrLgkJCSMKKyMJCXNnbjEgOj0gKC0xKSoqajEsIHNnbjIgOj0gKC0xKSoqajIuCQkJIworIwkJU0lOKFgpID0gc2duMSAqIGNvcyhyKSBhbmQgQ09TKFgpID0gc2duMipzaW4ocikgd2hlcmUJIworIwkJc2luKHIpIGFuZCBjb3MocikgYXJlIGNvbXB1dGVkIGFzIG9kZCBhbmQgZXZlbgkJIworIwkJcG9seW5vbWlhbHMgaW4gciwgcmVzcGVjdGl2ZWx5LiBFeGl0CQkJIworIwkJCQkJCQkJCSMKKyMJNS4gKGsgaXMgZXZlbikgU2V0IGoxIDo9IGsvMiwgc2duMSA6PSAoLTEpKipqMS4JCQkjCisjCQlTSU4oWCkgPSBzZ24xICogc2luKHIpIGFuZCBDT1MoWCkgPSBzZ24xKmNvcyhyKSB3aGVyZQkjCisjCQlzaW4ocikgYW5kIGNvcyhyKSBhcmUgY29tcHV0ZWQgYXMgb2RkIGFuZCBldmVuCQkjCisjCQlwb2x5bm9taWFscyBpbiByLCByZXNwZWN0aXZlbHkuIEV4aXQJCQkjCisjCQkJCQkJCQkJIworIwk2LiBJZiB8WHwgPiAxLCBnbyB0byA4LgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTcuICh8WHw8MioqKC00MCkpIFNJTihYKSA9IFggYW5kIENPUyhYKSA9IDEuIEV4aXQuCQkjCisjCQkJCQkJCQkJIworIwk4LiBPdmVyd3JpdGUgWCBieSBYIDo9IFggcmVtIDJQaS4gTm93IHRoYXQgfFh8IDw9IFBpLAkJIworIwkJZ28gYmFjayB0byAyLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1NJTkE3Oglsb25nCQkweEJENkFBQTc3LDB4Q0NDOTk0RjUKK1NJTkE2Oglsb25nCQkweDNERTYxMjA5LDB4N0FBRThEQTEKK1NJTkE1Oglsb25nCQkweEJFNUFFNjQ1LDB4MkExMThBRTQKK1NJTkE0Oglsb25nCQkweDNFQzcxREUzLDB4QTUzNDE1MzEKK1NJTkEzOglsb25nCQkweEJGMkEwMUEwLDB4MUEwMThCNTksMHgwMDAwMDAwMCwweDAwMDAwMDAwCitTSU5BMjoJbG9uZwkJMHgzRkY4MDAwMCwweDg4ODg4ODg4LDB4ODg4ODU5QUYsMHgwMDAwMDAwMAorU0lOQTE6CWxvbmcJCTB4QkZGQzAwMDAsMHhBQUFBQUFBQSwweEFBQUFBQTk5LDB4MDAwMDAwMDAKKworQ09TQjg6CWxvbmcJCTB4M0QyQUM0RDAsMHhENjAxMUVFMworQ09TQjc6CWxvbmcJCTB4QkRBOTM5NkYsMHg5RjQ1QUMxOQorQ09TQjY6CWxvbmcJCTB4M0UyMUVFRDksMHgwNjEyQzk3MgorQ09TQjU6CWxvbmcJCTB4QkU5MjdFNEYsMHhCNzlEOUZDRgorQ09TQjQ6CWxvbmcJCTB4M0VGQTAxQTAsMHgxQTAxRDQyMywweDAwMDAwMDAwLDB4MDAwMDAwMDAKK0NPU0IzOglsb25nCQkweEJGRjUwMDAwLDB4QjYwQjYwQjYsMHgwQjYxRDQzOCwweDAwMDAwMDAwCitDT1NCMjoJbG9uZwkJMHgzRkZBMDAwMCwweEFBQUFBQUFBLDB4QUFBQUFCNUUKK0NPU0IxOglsb25nCQkweEJGMDAwMDAwCisKKwlzZXQJCUlOQVJHLEZQX1NDUjAKKworCXNldAkJWCxGUF9TQ1IwCisjCXNldAkJWERDQVJFLFgrMgorCXNldAkJWEZSQUMsWCs0CisKKwlzZXQJCVJQUklNRSxGUF9TQ1IwCisJc2V0CQlTUFJJTUUsRlBfU0NSMQorCisJc2V0CQlQT1NORUcxLExfU0NSMQorCXNldAkJVFdPVE82MyxMX1NDUjEKKworCXNldAkJRU5ERkxBRyxMX1NDUjIKKwlzZXQJCUlOVCxMX1NDUjIKKworCXNldAkJQURKTixMX1NDUjMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCXNzaW4KK3NzaW46CisJbW92LmwJCSYwLEFESk4oJWE2KQkJIyB5ZXM7IFNFVCBBREpOIFRPIDAKKwlicmEuYgkJU0lOQkdOCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlzY29zCitzY29zOgorCW1vdi5sCQkmMSxBREpOKCVhNikJCSMgeWVzOyBTRVQgQURKTiBUTyAxCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitTSU5CR046CisjLS1TQVZFIEZQQ1IsIEZQMS4gQ0hFQ0sgSUYgfFh8IElTIFRPTyBTTUFMTCBPUiBMQVJHRQorCisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIExPQUQgSU5QVVQKKwlmbW92LngJCSVmcDAsWCglYTYpCQkjIHNhdmUgaW5wdXQgYXQgWAorCisjICJDT01QQUNUSUZZIiBYCisJbW92LmwJCSglYTApLCVkMQkJIyBwdXQgZXhwIGluIGhpIHdvcmQKKwltb3YudwkJNCglYTApLCVkMQkJIyBmZXRjaCBoaShtYW4pCisJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQkJIyBzdHJpcCBzaWduCisKKwljbXBpLmwJCSVkMSwmMHgzRkQ3ODAwMAkJIyBpcyB8WHwgPj0gMioqKC00MCk/CisJYmdlLmIJCVNPSzEJCQkjIG5vCisJYnJhLncJCVNJTlNNCQkJIyB5ZXM7IGlucHV0IGlzIHZlcnkgc21hbGwKKworU09LMToKKwljbXAubAkJJWQxLCYweDQwMDRCQzdFCQkjIGlzIHxYfCA8IDE1IFBJPworCWJsdC5iCQlTSU5NQUlOCQkJIyBubworCWJyYS53CQlTUkVEVUNFWAkJIyB5ZXM7IGlucHV0IGlzIHZlcnkgbGFyZ2UKKworIy0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDw9IDE1IFBJLgorIy0tVEhFIEFSR1VNRU5UIFJFRFVDVElPTiBJUyBET05FIEJZIFRBQkxFIExPT0sgVVAuCitTSU5NQUlOOgorCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC5kCQlUV09CWVBJKCVwYyksJWZwMQkjIFgqMi9QSQorCisJbGVhCQlQSVRCTCsweDIwMCglcGMpLCVhMQkjIFRBQkxFIE9GIE4qUEkvMiwgTiA9IC0zMiwuLi4sMzIKKworCWZtb3YubAkJJWZwMSxJTlQoJWE2KQkJIyBDT05WRVJUIFRPIElOVEVHRVIKKworCW1vdi5sCQlJTlQoJWE2KSwlZDEJCSMgbWFrZSBhIGNvcHkgb2YgTgorCWFzbC5sCQkmNCwlZDEJCQkjIE4gKj0gMTYKKwlhZGQubAkJJWQxLCVhMQkJCSMgdGJsX2FkZHIgPSBhMSArIChOKjE2KQorCisjIEExIElTIFRIRSBBRERSRVNTIE9GIE4qUElCWTIKKyMgLi4uV0hJQ0ggSVMgSU4gVFdPIFBJRUNFUyBZMSAmIFkyCisJZnN1Yi54CQkoJWExKSssJWZwMAkJIyBYLVkxCisJZnN1Yi5zCQkoJWExKSwlZnAwCQkjIGZwMCA9IFIgPSAoWC1ZMSktWTIKKworU0lOQ09OVDoKKyMtLWNvbnRpbnVhdGlvbiBmcm9tIFJFRFVDRVgKKworIy0tR0VUIE4rQURKTiBBTkQgU0VFIElGIFNJTihSKSBPUiBDT1MoUikgSVMgTkVFREVECisJbW92LmwJCUlOVCglYTYpLCVkMQorCWFkZC5sCQlBREpOKCVhNiksJWQxCQkjIFNFRSBJRiBEMCBJUyBPREQgT1IgRVZFTgorCXJvci5sCQkmMSwlZDEJCQkjIEQwIFdBUyBPREQgSUZGIEQwIElTIE5FR0FUSVZFCisJY21wLmwJCSVkMSwmMAorCWJsdC53CQlDT1NQT0xZCisKKyMtLUxFVCBKIEJFIFRIRSBMRUFTVCBTSUcuIEJJVCBPRiBEMCwgTEVUIFNHTiA6PSAoLTEpKipKLgorIy0tVEhFTiBXRSBSRVRVUk4JU0dOKlNJTihSKS4gU0dOKlNJTihSKSBJUyBDT01QVVRFRCBCWQorIy0tUicgKyBSJypTKihBMSArIFMoQTIgKyBTKEEzICsgUyhBNCArIC4uLiArIFNBNykpKSksIFdIRVJFCisjLS1SJyA9IFNHTipSLCBTPVIqUi4gVEhJUyBDQU4gQkUgUkVXUklUVEVOIEFTCisjLS1SJyArIFInKlMqKCBbQTErVChBMytUKEE1K1RBNykpXSArIFtTKEEyK1QoQTQrVEE2KSldKQorIy0tV0hFUkUgVD1TKlMuCisjLS1OT1RFIFRIQVQgQTMgVEhST1VHSCBBNyBBUkUgU1RPUkVEIElOIERPVUJMRSBQUkVDSVNJT04KKyMtLVdISUxFIEExIEFORCBBMiBBUkUgSU4gRE9VQkxFLUVYVEVOREVEIEZPUk1BVC4KK1NJTlBPTFk6CisJZm1vdm0ueAkJJjB4MGMsLSglc3ApCQkjIHNhdmUgZnAyL2ZwMworCisJZm1vdi54CQklZnAwLFgoJWE2KQkJIyBYIElTIFIKKwlmbXVsLngJCSVmcDAsJWZwMAkJIyBGUDAgSVMgUworCisJZm1vdi5kCQlTSU5BNyglcGMpLCVmcDMKKwlmbW92LmQJCVNJTkE2KCVwYyksJWZwMgorCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLngJCSVmcDEsJWZwMQkJIyBGUDEgSVMgVAorCisJcm9yLmwJCSYxLCVkMQorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEKKyMgLi4uTEVBU1QgU0lHLiBCSVQgT0YgRDAgSU4gU0lHTiBQT1NJVElPTgorCWVvci5sCQklZDEsWCglYTYpCQkjIFggSVMgTk9XIFInPSBTR04qUgorCisJZm11bC54CQklZnAxLCVmcDMJCSMgVEE3CisJZm11bC54CQklZnAxLCVmcDIJCSMgVEE2CisKKwlmYWRkLmQJCVNJTkE1KCVwYyksJWZwMwkJIyBBNStUQTcKKwlmYWRkLmQJCVNJTkE0KCVwYyksJWZwMgkJIyBBNCtUQTYKKworCWZtdWwueAkJJWZwMSwlZnAzCQkjIFQoQTUrVEE3KQorCWZtdWwueAkJJWZwMSwlZnAyCQkjIFQoQTQrVEE2KQorCisJZmFkZC5kCQlTSU5BMyglcGMpLCVmcDMJCSMgQTMrVChBNStUQTcpCisJZmFkZC54CQlTSU5BMiglcGMpLCVmcDIJCSMgQTIrVChBNCtUQTYpCisKKwlmbXVsLngJCSVmcDMsJWZwMQkJIyBUKEEzK1QoQTUrVEE3KSkKKworCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoQTIrVChBNCtUQTYpKQorCWZhZGQueAkJU0lOQTEoJXBjKSwlZnAxCQkjIEExK1QoQTMrVChBNStUQTcpKQorCWZtdWwueAkJWCglYTYpLCVmcDAJCSMgUicqUworCisJZmFkZC54CQklZnAyLCVmcDEJCSMgW0ExK1QoQTMrVChBNStUQTcpKV0rW1MoQTIrVChBNCtUQTYpKV0KKworCWZtdWwueAkJJWZwMSwlZnAwCQkjIFNJTihSJyktUicKKworCWZtb3ZtLngJCSglc3ApKywmMHgzMAkJIyByZXN0b3JlIGZwMi9mcDMKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgbW9kZSxwcmVjCisJZmFkZC54CQlYKCVhNiksJWZwMAkJIyBsYXN0IGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb24gc2V0CisJYnJhCQl0X2lueDIKKworIy0tTEVUIEogQkUgVEhFIExFQVNUIFNJRy4gQklUIE9GIEQwLCBMRVQgU0dOIDo9ICgtMSkqKkouCisjLS1USEVOIFdFIFJFVFVSTglTR04qQ09TKFIpLiBTR04qQ09TKFIpIElTIENPTVBVVEVEIEJZCisjLS1TR04gKyBTJyooQjEgKyBTKEIyICsgUyhCMyArIFMoQjQgKyAuLi4gKyBTQjgpKSkpLCBXSEVSRQorIy0tUz1SKlIgQU5EIFMnPVNHTipTLiBUSElTIENBTiBCRSBSRVdSSVRURU4gQVMKKyMtLVNHTiArIFMnKihbQjErVChCMytUKEI1K1RCNykpXSArIFtTKEIyK1QoQjQrVChCNitUQjgpKSldKQorIy0tV0hFUkUgVD1TKlMuCisjLS1OT1RFIFRIQVQgQjQgVEhST1VHSCBCOCBBUkUgU1RPUkVEIElOIERPVUJMRSBQUkVDSVNJT04KKyMtLVdISUxFIEIyIEFORCBCMyBBUkUgSU4gRE9VQkxFLUVYVEVOREVEIEZPUk1BVCwgQjEgSVMgLTEvMgorIy0tQU5EIElTIFRIRVJFRk9SRSBTVE9SRUQgQVMgU0lOR0xFIFBSRUNJU0lPTi4KK0NPU1BPTFk6CisJZm1vdm0ueAkJJjB4MGMsLSglc3ApCQkjIHNhdmUgZnAyL2ZwMworCisJZm11bC54CQklZnAwLCVmcDAJCSMgRlAwIElTIFMKKworCWZtb3YuZAkJQ09TQjgoJXBjKSwlZnAyCisJZm1vdi5kCQlDT1NCNyglcGMpLCVmcDMKKworCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC54CQklZnAxLCVmcDEJCSMgRlAxIElTIFQKKworCWZtb3YueAkJJWZwMCxYKCVhNikJCSMgWCBJUyBTCisJcm9yLmwJCSYxLCVkMQorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEKKyMgLi4uTEVBU1QgU0lHLiBCSVQgT0YgRDAgSU4gU0lHTiBQT1NJVElPTgorCisJZm11bC54CQklZnAxLCVmcDIJCSMgVEI4CisKKwllb3IubAkJJWQxLFgoJWE2KQkJIyBYIElTIE5PVyBTJz0gU0dOKlMKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQxCisKKwlmbXVsLngJCSVmcDEsJWZwMwkJIyBUQjcKKworCW9yLmwJCSYweDNGODAwMDAwLCVkMQkJIyBEMCBJUyBTR04gSU4gU0lOR0xFCisJbW92LmwJCSVkMSxQT1NORUcxKCVhNikKKworCWZhZGQuZAkJQ09TQjYoJXBjKSwlZnAyCQkjIEI2K1RCOAorCWZhZGQuZAkJQ09TQjUoJXBjKSwlZnAzCQkjIEI1K1RCNworCisJZm11bC54CQklZnAxLCVmcDIJCSMgVChCNitUQjgpCisJZm11bC54CQklZnAxLCVmcDMJCSMgVChCNStUQjcpCisKKwlmYWRkLmQJCUNPU0I0KCVwYyksJWZwMgkJIyBCNCtUKEI2K1RCOCkKKwlmYWRkLngJCUNPU0IzKCVwYyksJWZwMwkJIyBCMytUKEI1K1RCNykKKworCWZtdWwueAkJJWZwMSwlZnAyCQkjIFQoQjQrVChCNitUQjgpKQorCWZtdWwueAkJJWZwMywlZnAxCQkjIFQoQjMrVChCNStUQjcpKQorCisJZmFkZC54CQlDT1NCMiglcGMpLCVmcDIJCSMgQjIrVChCNCtUKEI2K1RCOCkpCisJZmFkZC5zCQlDT1NCMSglcGMpLCVmcDEJCSMgQjErVChCMytUKEI1K1RCNykpCisKKwlmbXVsLngJCSVmcDIsJWZwMAkJIyBTKEIyK1QoQjQrVChCNitUQjgpKSkKKworCWZhZGQueAkJJWZwMSwlZnAwCisKKwlmbXVsLngJCVgoJWE2KSwlZnAwCisKKwlmbW92bS54CQkoJXNwKSssJjB4MzAJCSMgcmVzdG9yZSBmcDIvZnAzCisKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIG1vZGUscHJlYworCWZhZGQucwkJUE9TTkVHMSglYTYpLCVmcDAJIyBsYXN0IGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb24gc2V0CisJYnJhCQl0X2lueDIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFNJTmU6IEJpZyBPUiBTbWFsbD8KKyMtLUlGIHxYfCA+IDE1UEksIFdFIFVTRSBUSEUgR0VORVJBTCBBUkdVTUVOVCBSRURVQ1RJT04uCisjLS1JRiB8WHwgPCAyKiooLTQwKSwgUkVUVVJOIFggT1IgMS4KK1NJTkJPUlM6CisJY21wLmwJCSVkMSwmMHgzRkZGODAwMAorCWJndC5sCQlTUkVEVUNFWAorCitTSU5TTToKKwltb3YubAkJQURKTiglYTYpLCVkMQorCWNtcC5sCQklZDEsJjAKKwliZ3QuYgkJQ09TVElOWQorCisjIGhlcmUsIHRoZSBvcGVyYXRpb24gbWF5IHVuZGVyZmxvdyBpZmYgdGhlIHByZWNpc2lvbiBpcyBzZ2wgb3IgZGJsLgorIyBleHRlbmRlZCBkZW5vcm1zIGFyZSBoYW5kbGVkIHRocm91Z2ggYW5vdGhlciBlbnRyeSBwb2ludC4KK1NJTlRJTlk6CisjCW1vdi53CQkmMHgwMDAwLFhEQ0FSRSglYTYpCSMgSlVTVCBJTiBDQVNFCisKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIG1vZGUscHJlYworCW1vdi5iCQkmRk1PVl9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1PVkUKKwlmbW92LngJCVgoJWE2KSwlZnAwCQkjIGxhc3QgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbiBzZXQKKwlicmEJCXRfY2F0Y2gKKworQ09TVElOWToKKwlmbW92LnMJCSYweDNGODAwMDAwLCVmcDAJIyBmcDAgPSAxLjAKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIG1vZGUscHJlYworCWZhZGQucwkJJjB4ODA4MDAwMDAsJWZwMAkjIGxhc3QgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbiBzZXQKKwlicmEJCXRfcGlueDIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlzc2luZAorIy0tU0lOKFgpID0gWCBGT1IgREVOT1JNQUxJWkVEIFgKK3NzaW5kOgorCWJyYQkJdF9leHRkbnJtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlzY29zZAorIy0tQ09TKFgpID0gMSBGT1IgREVOT1JNQUxJWkVEIFgKK3Njb3NkOgorCWZtb3YucwkJJjB4M0Y4MDAwMDAsJWZwMAkjIGZwMCA9IDEuMAorCWJyYQkJdF9waW54MgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzc2luY29zCitzc2luY29zOgorIy0tU0VUIEFESk4gVE8gNAorCW1vdi5sCQkmNCxBREpOKCVhNikKKworCWZtb3YueAkJKCVhMCksJWZwMAkJIyBMT0FEIElOUFVUCisJZm1vdi54CQklZnAwLFgoJWE2KQorCisJbW92LmwJCSglYTApLCVkMQorCW1vdi53CQk0KCVhMCksJWQxCisJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQkJIyBDT01QQUNUSUZZIFgKKworCWNtcC5sCQklZDEsJjB4M0ZENzgwMDAJCSMgfFh8ID49IDIqKigtNDApPworCWJnZS5iCQlTQ09LMQorCWJyYS53CQlTQ1NNCisKK1NDT0sxOgorCWNtcC5sCQklZDEsJjB4NDAwNEJDN0UJCSMgfFh8IDwgMTUgUEk/CisJYmx0LmIJCVNDTUFJTgorCWJyYS53CQlTUkVEVUNFWAorCisKKyMtLVRISVMgSVMgVEhFIFVTVUFMIENBU0UsIHxYfCA8PSAxNSBQSS4KKyMtLVRIRSBBUkdVTUVOVCBSRURVQ1RJT04gSVMgRE9ORSBCWSBUQUJMRSBMT09LIFVQLgorU0NNQUlOOgorCWZtb3YueAkJJWZwMCwlZnAxCisKKwlmbXVsLmQJCVRXT0JZUEkoJXBjKSwlZnAxCSMgWCoyL1BJCisKKwlsZWEJCVBJVEJMKzB4MjAwKCVwYyksJWExCSMgVEFCTEUgT0YgTipQSS8yLCBOID0gLTMyLC4uLiwzMgorCisJZm1vdi5sCQklZnAxLElOVCglYTYpCQkjIENPTlZFUlQgVE8gSU5URUdFUgorCisJbW92LmwJCUlOVCglYTYpLCVkMQorCWFzbC5sCQkmNCwlZDEKKwlhZGQubAkJJWQxLCVhMQkJCSMgQUREUkVTUyBPRiBOKlBJQlkyLCBJTiBZMSwgWTIKKworCWZzdWIueAkJKCVhMSkrLCVmcDAJCSMgWC1ZMQorCWZzdWIucwkJKCVhMSksJWZwMAkJIyBGUDAgSVMgUiA9IChYLVkxKS1ZMgorCitTQ0NPTlQ6CisjLS1jb250aW51YXRpb24gcG9pbnQgZnJvbSBSRURVQ0VYCisKKwltb3YubAkJSU5UKCVhNiksJWQxCisJcm9yLmwJCSYxLCVkMQorCWNtcC5sCQklZDEsJjAJCQkjIEQwIDwgMCBJRkYgTiBJUyBPREQKKwliZ2UudwkJTkVWRU4KKworU05PREQ6CisjLS1SRUdJU1RFUlMgU0FWRUQgU08gRkFSOiBEMCwgQTAsIEZQMi4KKwlmbW92bS54CQkmMHgwNCwtKCVzcCkJCSMgc2F2ZSBmcDIKKworCWZtb3YueAkJJWZwMCxSUFJJTUUoJWE2KQorCWZtdWwueAkJJWZwMCwlZnAwCQkjIEZQMCBJUyBTID0gUipSCisJZm1vdi5kCQlTSU5BNyglcGMpLCVmcDEJCSMgQTcKKwlmbW92LmQJCUNPU0I4KCVwYyksJWZwMgkJIyBCOAorCWZtdWwueAkJJWZwMCwlZnAxCQkjIFNBNworCWZtdWwueAkJJWZwMCwlZnAyCQkjIFNCOAorCisJbW92LmwJCSVkMiwtKCVzcCkKKwltb3YubAkJJWQxLCVkMgorCXJvci5sCQkmMSwlZDIKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQyCisJZW9yLmwJCSVkMSwlZDIKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQyCisKKwlmYWRkLmQJCVNJTkE2KCVwYyksJWZwMQkJIyBBNitTQTcKKwlmYWRkLmQJCUNPU0I3KCVwYyksJWZwMgkJIyBCNytTQjgKKworCWZtdWwueAkJJWZwMCwlZnAxCQkjIFMoQTYrU0E3KQorCWVvci5sCQklZDIsUlBSSU1FKCVhNikKKwltb3YubAkJKCVzcCkrLCVkMgorCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoQjcrU0I4KQorCXJvci5sCQkmMSwlZDEKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQxCisJbW92LmwJCSYweDNGODAwMDAwLFBPU05FRzEoJWE2KQorCWVvci5sCQklZDEsUE9TTkVHMSglYTYpCisKKwlmYWRkLmQJCVNJTkE1KCVwYyksJWZwMQkJIyBBNStTKEE2K1NBNykKKwlmYWRkLmQJCUNPU0I2KCVwYyksJWZwMgkJIyBCNitTKEI3K1NCOCkKKworCWZtdWwueAkJJWZwMCwlZnAxCQkjIFMoQTUrUyhBNitTQTcpKQorCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoQjYrUyhCNytTQjgpKQorCWZtb3YueAkJJWZwMCxTUFJJTUUoJWE2KQorCisJZmFkZC5kCQlTSU5BNCglcGMpLCVmcDEJCSMgQTQrUyhBNStTKEE2K1NBNykpCisJZW9yLmwJCSVkMSxTUFJJTUUoJWE2KQorCWZhZGQuZAkJQ09TQjUoJXBjKSwlZnAyCQkjIEI1K1MoQjYrUyhCNytTQjgpKQorCisJZm11bC54CQklZnAwLCVmcDEJCSMgUyhBNCsuLi4pCisJZm11bC54CQklZnAwLCVmcDIJCSMgUyhCNSsuLi4pCisKKwlmYWRkLmQJCVNJTkEzKCVwYyksJWZwMQkJIyBBMytTKEE0Ky4uLikKKwlmYWRkLmQJCUNPU0I0KCVwYyksJWZwMgkJIyBCNCtTKEI1Ky4uLikKKworCWZtdWwueAkJJWZwMCwlZnAxCQkjIFMoQTMrLi4uKQorCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoQjQrLi4uKQorCisJZmFkZC54CQlTSU5BMiglcGMpLCVmcDEJCSMgQTIrUyhBMysuLi4pCisJZmFkZC54CQlDT1NCMyglcGMpLCVmcDIJCSMgQjMrUyhCNCsuLi4pCisKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBTKEEyKy4uLikKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBTKEIzKy4uLikKKworCWZhZGQueAkJU0lOQTEoJXBjKSwlZnAxCQkjIEExK1MoQTIrLi4uKQorCWZhZGQueAkJQ09TQjIoJXBjKSwlZnAyCQkjIEIyK1MoQjMrLi4uKQorCisJZm11bC54CQklZnAwLCVmcDEJCSMgUyhBMSsuLi4pCisJZm11bC54CQklZnAyLCVmcDAJCSMgUyhCMisuLi4pCisKKwlmbXVsLngJCVJQUklNRSglYTYpLCVmcDEJIyBSJ1MoQTErLi4uKQorCWZhZGQucwkJQ09TQjEoJXBjKSwlZnAwCQkjIEIxK1MoQjIuLi4pCisJZm11bC54CQlTUFJJTUUoJWE2KSwlZnAwCSMgUycoQjErUyhCMisuLi4pKQorCisJZm1vdm0ueAkJKCVzcCkrLCYweDIwCQkjIHJlc3RvcmUgZnAyCisKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZhZGQueAkJUlBSSU1FKCVhNiksJWZwMQkjIENPUyhYKQorCWJzcgkJc3RvX2NvcwkJCSMgc3RvcmUgY29zaW5lIHJlc3VsdAorCWZhZGQucwkJUE9TTkVHMSglYTYpLCVmcDAJIyBTSU4oWCkKKwlicmEJCXRfaW54MgorCitORVZFTjoKKyMtLVJFR0lTVEVSUyBTQVZFRCBTTyBGQVI6IEZQMi4KKwlmbW92bS54CQkmMHgwNCwtKCVzcCkJCSMgc2F2ZSBmcDIKKworCWZtb3YueAkJJWZwMCxSUFJJTUUoJWE2KQorCWZtdWwueAkJJWZwMCwlZnAwCQkjIEZQMCBJUyBTID0gUipSCisKKwlmbW92LmQJCUNPU0I4KCVwYyksJWZwMQkJIyBCOAorCWZtb3YuZAkJU0lOQTcoJXBjKSwlZnAyCQkjIEE3CisKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBTQjgKKwlmbW92LngJCSVmcDAsU1BSSU1FKCVhNikKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBTQTcKKworCXJvci5sCQkmMSwlZDEKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQxCisKKwlmYWRkLmQJCUNPU0I3KCVwYyksJWZwMQkJIyBCNytTQjgKKwlmYWRkLmQJCVNJTkE2KCVwYyksJWZwMgkJIyBBNitTQTcKKworCWVvci5sCQklZDEsUlBSSU1FKCVhNikKKwllb3IubAkJJWQxLFNQUklNRSglYTYpCisKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBTKEI3K1NCOCkKKworCW9yLmwJCSYweDNGODAwMDAwLCVkMQorCW1vdi5sCQklZDEsUE9TTkVHMSglYTYpCisKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBTKEE2K1NBNykKKworCWZhZGQuZAkJQ09TQjYoJXBjKSwlZnAxCQkjIEI2K1MoQjcrU0I4KQorCWZhZGQuZAkJU0lOQTUoJXBjKSwlZnAyCQkjIEE1K1MoQTYrU0E3KQorCisJZm11bC54CQklZnAwLCVmcDEJCSMgUyhCNitTKEI3K1NCOCkpCisJZm11bC54CQklZnAwLCVmcDIJCSMgUyhBNStTKEE2K1NBNykpCisKKwlmYWRkLmQJCUNPU0I1KCVwYyksJWZwMQkJIyBCNStTKEI2K1MoQjcrU0I4KSkKKwlmYWRkLmQJCVNJTkE0KCVwYyksJWZwMgkJIyBBNCtTKEE1K1MoQTYrU0E3KSkKKworCWZtdWwueAkJJWZwMCwlZnAxCQkjIFMoQjUrLi4uKQorCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoQTQrLi4uKQorCisJZmFkZC5kCQlDT1NCNCglcGMpLCVmcDEJCSMgQjQrUyhCNSsuLi4pCisJZmFkZC5kCQlTSU5BMyglcGMpLCVmcDIJCSMgQTMrUyhBNCsuLi4pCisKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBTKEI0Ky4uLikKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBTKEEzKy4uLikKKworCWZhZGQueAkJQ09TQjMoJXBjKSwlZnAxCQkjIEIzK1MoQjQrLi4uKQorCWZhZGQueAkJU0lOQTIoJXBjKSwlZnAyCQkjIEEyK1MoQTMrLi4uKQorCisJZm11bC54CQklZnAwLCVmcDEJCSMgUyhCMysuLi4pCisJZm11bC54CQklZnAwLCVmcDIJCSMgUyhBMisuLi4pCisKKwlmYWRkLngJCUNPU0IyKCVwYyksJWZwMQkJIyBCMitTKEIzKy4uLikKKwlmYWRkLngJCVNJTkExKCVwYyksJWZwMgkJIyBBMStTKEEyKy4uLikKKworCWZtdWwueAkJJWZwMCwlZnAxCQkjIFMoQjIrLi4uKQorCWZtdWwueAkJJWZwMiwlZnAwCQkjIHMoYTErLi4uKQorCisKKwlmYWRkLnMJCUNPU0IxKCVwYyksJWZwMQkJIyBCMStTKEIyLi4uKQorCWZtdWwueAkJUlBSSU1FKCVhNiksJWZwMAkjIFInUyhBMSsuLi4pCisJZm11bC54CQlTUFJJTUUoJWE2KSwlZnAxCSMgUycoQjErUyhCMisuLi4pKQorCisJZm1vdm0ueAkJKCVzcCkrLCYweDIwCQkjIHJlc3RvcmUgZnAyCisKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZhZGQucwkJUE9TTkVHMSglYTYpLCVmcDEJIyBDT1MoWCkKKwlic3IJCXN0b19jb3MJCQkjIHN0b3JlIGNvc2luZSByZXN1bHQKKwlmYWRkLngJCVJQUklNRSglYTYpLCVmcDAJIyBTSU4oWCkKKwlicmEJCXRfaW54MgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworU0NCT1JTOgorCWNtcC5sCQklZDEsJjB4M0ZGRjgwMDAKKwliZ3QudwkJU1JFRFVDRVgKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1NDU006CisjCW1vdi53CQkmMHgwMDAwLFhEQ0FSRSglYTYpCisJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAxCisKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZzdWIucwkJJjB4MDA4MDAwMDAsJWZwMQorCWJzcgkJc3RvX2NvcwkJCSMgc3RvcmUgY29zaW5lIHJlc3VsdAorCWZtb3YubAkJJWZwY3IsJWQwCQkjIGQwIG11c3QgaGF2ZSBmcGNyLHRvbworCW1vdi5iCQkmRk1PVl9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1PVkUKKwlmbW92LngJCVgoJWE2KSwlZnAwCisJYnJhCQl0X2NhdGNoCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc3NpbmNvc2QKKyMtLVNJTiBBTkQgQ09TIE9GIFggRk9SIERFTk9STUFMSVpFRCBYCitzc2luY29zZDoKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIGQwCisJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAxCisJYnNyCQlzdG9fY29zCQkJIyBzdG9yZSBjb3NpbmUgcmVzdWx0CisJbW92LmwJCSglc3ApKywlZDAJCSMgcmVzdG9yZSBkMAorCWJyYQkJdF9leHRkbnJtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMtLVdIRU4gUkVEVUNFWCBJUyBVU0VELCBUSEUgQ09ERSBXSUxMIElORVZJVEFCTFkgQkUgU0xPVy4KKyMtLVRISVMgUkVEVUNUSU9OIE1FVEhPRCwgSE9XRVZFUiwgSVMgTVVDSCBGQVNURVIgVEhBTiBVU0lORworIy0tVEhFIFJFTUFJTkRFUiBJTlNUUlVDVElPTiBXSElDSCBJUyBOT1cgSU4gU09GVFdBUkUuCitTUkVEVUNFWDoKKwlmbW92bS54CQkmMHgzYywtKCVzcCkJCSMgc2F2ZSB7ZnAyLWZwNX0KKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAxCSMgZnAxID0gMAorCisjLS1JZiBjb21wYWN0IGZvcm0gb2YgYWJzKGFyZykgaW4gZDA9JDdmZmVmZmZmLCBhcmd1bWVudCBpcyBzbyBsYXJnZSB0aGF0CisjLS10aGVyZSBpcyBhIGRhbmdlciBvZiB1bndhbnRlZCBvdmVyZmxvdyBpbiBmaXJzdCBMT09QIGl0ZXJhdGlvbi4gIEluIHRoaXMKKyMtLWNhc2UsIHJlZHVjZSBhcmd1bWVudCBieSBvbmUgcmVtYWluZGVyIHN0ZXAgdG8gbWFrZSBzdWJzZXF1ZW50IHJlZHVjdGlvbgorIy0tc2FmZS4KKwljbXAubAkJJWQxLCYweDdmZmVmZmZmCQkjIGlzIGFyZyBkYW5nZXJvdXNseSBsYXJnZT8KKwlibmUuYgkJU0xPT1AJCQkjIG5vCisKKyMgeWVzOyBjcmVhdGUgMioqMTYzODMqUEkvMgorCW1vdi53CQkmMHg3ZmZlLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQkmMHhjOTBmZGFhMixGUF9TQ1IwX0hJKCVhNikKKwljbHIubAkJRlBfU0NSMF9MTyglYTYpCisKKyMgY3JlYXRlIGxvdyBoYWxmIG9mIDIqKjE2MzgzKlBJLzIgYXQgRlBfU0NSMQorCW1vdi53CQkmMHg3ZmRjLEZQX1NDUjFfRVgoJWE2KQorCW1vdi5sCQkmMHg4NWEzMDhkMyxGUF9TQ1IxX0hJKCVhNikKKwljbHIubAkJRlBfU0NSMV9MTyglYTYpCisKKwlmdGVzdC54CQklZnAwCQkJIyB0ZXN0IHNpZ24gb2YgYXJndW1lbnQKKwlmYmx0LncJCXNyZWRfbmVnCisKKwlvci5iCQkmMHg4MCxGUF9TQ1IwX0VYKCVhNikJIyBwb3NpdGl2ZSBhcmcKKwlvci5iCQkmMHg4MCxGUF9TQ1IxX0VYKCVhNikKK3NyZWRfbmVnOgorCWZhZGQueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBoaWdoIHBhcnQgb2YgcmVkdWN0aW9uIGlzIGV4YWN0CisJZm1vdi54CQklZnAwLCVmcDEJCSMgc2F2ZSBoaWdoIHJlc3VsdCBpbiBmcDEKKwlmYWRkLngJCUZQX1NDUjEoJWE2KSwlZnAwCSMgbG93IHBhcnQgb2YgcmVkdWN0aW9uCisJZnN1Yi54CQklZnAwLCVmcDEJCSMgZGV0ZXJtaW5lIGxvdyBjb21wb25lbnQgb2YgcmVzdWx0CisJZmFkZC54CQlGUF9TQ1IxKCVhNiksJWZwMQkjIGZwMC9mcDEgYXJlIHJlZHVjZWQgYXJndW1lbnQuCisKKyMtLU9OIEVOVFJZLCBGUDAgSVMgWCwgT04gUkVUVVJOLCBGUDAgSVMgWCBSRU0gUEkvMiwgfFh8IDw9IFBJLzQuCisjLS1pbnRlZ2VyIHF1b3RpZW50IHdpbGwgYmUgc3RvcmVkIGluIE4KKyMtLUludGVybWVkaXRhdGUgcmVtYWluZGVyIGlzIDY2LWJpdCBsb25nOyAoUixyKSBpbiAoRlAwLEZQMSkKK1NMT09QOgorCWZtb3YueAkJJWZwMCxJTkFSRyglYTYpCQkjICstMioqSyAqIEYsIDEgPD0gRiA8IDIKKwltb3YudwkJSU5BUkcoJWE2KSwlZDEKKwltb3YubAkJJWQxLCVhMQkJCSMgc2F2ZSBhIGNvcHkgb2YgRDAKKwlhbmQubAkJJjB4MDAwMDdGRkYsJWQxCisJc3ViLmwJCSYweDAwMDAzRkZGLCVkMQkJIyBkMCA9IEsKKwljbXAubAkJJWQxLCYyOAorCWJsZS5iCQlTTEFTVExPT1AKK1NDT05UTE9PUDoKKwlzdWIubAkJJjI3LCVkMQkJCSMgZDAgPSBMIDo9IEstMjcKKwltb3YuYgkJJjAsRU5ERkxBRyglYTYpCisJYnJhLmIJCVNXT1JLCitTTEFTVExPT1A6CisJY2xyLmwJCSVkMQkJCSMgZDAgPSBMIDo9IDAKKwltb3YuYgkJJjEsRU5ERkxBRyglYTYpCisKK1NXT1JLOgorIy0tRklORCBUSEUgUkVNQUlOREVSIE9GIChSLHIpIFcuUi5ULgkyKipMICogKFBJLzIpLiBMIElTIFNPIENIT1NFTgorIy0tVEhBVAlJTlQoIFggKiAoMi9QSSkgLyAyKiooTCkgKSA8IDIqKjI5LgorCisjLS1DUkVBVEUgMioqKC1MKSAqICgyL1BJKSwgU0lHTihJTkFSRykqMioqKDYzKSwKKyMtLTIqKkwgKiAoUElieTJfMSksIDIqKkwgKiAoUElieTJfMikKKworCW1vdi5sCQkmMHgwMDAwM0ZGRSwlZDIJCSMgQklBU0VEIEVYUCBPRiAyL1BJCisJc3ViLmwJCSVkMSwlZDIJCQkjIEJJQVNFRCBFWFAgT0YgMioqKC1MKSooMi9QSSkKKworCW1vdi5sCQkmMHhBMkY5ODM2RSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJJjB4NEU0NDE1MkEsRlBfU0NSMF9MTyglYTYpCisJbW92LncJCSVkMixGUF9TQ1IwX0VYKCVhNikJIyBGUF9TQ1IwID0gMioqKC1MKSooMi9QSSkKKworCWZtb3YueAkJJWZwMCwlZnAyCisJZm11bC54CQlGUF9TQ1IwKCVhNiksJWZwMgkjIGZwMiA9IFggKiAyKiooLUwpKigyL1BJKQorCisjLS1XRSBNVVNUIE5PVyBGSU5EIElOVChGUDIpLiBTSU5DRSBXRSBORUVEIFRISVMgVkFMVUUgSU4KKyMtLUZMT0FUSU5HIFBPSU5UIEZPUk1BVCwgVEhFIFRXTyBGTU9WRSdTCUZNT1ZFLkwgRlAgPC0tPiBOCisjLS1XSUxMIEJFIFRPTyBJTkVGRklDSUVOVC4gVEhFIFdBWSBBUk9VTkQgSVQgSVMgVEhBVAorIy0tKFNJR04oSU5BUkcpKjIqKjYzCSsJRlAyKSAtIFNJR04oSU5BUkcpKjIqKjYzIFdJTEwgR0lWRQorIy0tVVMgVEhFIERFU0lSRUQgVkFMVUUgSU4gRkxPQVRJTkcgUE9JTlQuCisJbW92LmwJCSVhMSwlZDIKKwlzd2FwCQklZDIKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQyCisJb3IubAkJJjB4NUYwMDAwMDAsJWQyCQkjIGQyID0gU0lHTihJTkFSRykqMioqNjMgSU4gU0dMCisJbW92LmwJCSVkMixUV09UTzYzKCVhNikKKwlmYWRkLnMJCVRXT1RPNjMoJWE2KSwlZnAyCSMgVEhFIEZSQUNUSU9OQUwgUEFSVCBPRiBGUDEgSVMgUk9VTkRFRAorCWZzdWIucwkJVFdPVE82MyglYTYpLCVmcDIJIyBmcDIgPSBOCisjCWZpbnQueAkJJWZwMgorCisjLS1DUkVBVElORyAyKiooTCkqUGlieTJfMSBhbmQgMioqKEwpKlBpYnkyXzIKKwltb3YubAkJJWQxLCVkMgkJCSMgZDIgPSBMCisKKwlhZGQubAkJJjB4MDAwMDNGRkYsJWQyCQkjIEJJQVNFRCBFWFAgT0YgMioqTCAqIChQSS8yKQorCW1vdi53CQklZDIsRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCSYweEM5MEZEQUEyLEZQX1NDUjBfSEkoJWE2KQorCWNsci5sCQlGUF9TQ1IwX0xPKCVhNikJCSMgRlBfU0NSMCA9IDIqKihMKSAqIFBpYnkyXzEKKworCWFkZC5sCQkmMHgwMDAwM0ZERCwlZDEKKwltb3YudwkJJWQxLEZQX1NDUjFfRVgoJWE2KQorCW1vdi5sCQkmMHg4NUEzMDhEMyxGUF9TQ1IxX0hJKCVhNikKKwljbHIubAkJRlBfU0NSMV9MTyglYTYpCQkjIEZQX1NDUjEgPSAyKiooTCkgKiBQaWJ5Ml8yCisKKwltb3YuYgkJRU5ERkxBRyglYTYpLCVkMQorCisjLS1XZSBhcmUgbm93IHJlYWR5IHRvIHBlcmZvcm0gKFIrcikgLSBOKlAxIC0gTipQMiwgUDEgPSAyKiooTCkgKiBQaWJ5Ml8xIGFuZAorIy0tUDIgPSAyKiooTCkgKiBQaWJ5Ml8yCisJZm1vdi54CQklZnAyLCVmcDQJCSMgZnA0ID0gTgorCWZtdWwueAkJRlBfU0NSMCglYTYpLCVmcDQJIyBmcDQgPSBXID0gTipQMQorCWZtb3YueAkJJWZwMiwlZnA1CQkjIGZwNSA9IE4KKwlmbXVsLngJCUZQX1NDUjEoJWE2KSwlZnA1CSMgZnA1ID0gdyA9IE4qUDIKKwlmbW92LngJCSVmcDQsJWZwMwkJIyBmcDMgPSBXID0gTipQMQorCisjLS13ZSB3YW50IFArcCA9IFcrdyAgYnV0ICB8cHwgPD0gaGFsZiB1bHAgb2YgUAorIy0tVGhlbiwgd2UgbmVlZCB0byBjb21wdXRlICBBIDo9IFItUCAgIGFuZCAgYSA6PSByLXAKKwlmYWRkLngJCSVmcDUsJWZwMwkJIyBmcDMgPSBQCisJZnN1Yi54CQklZnAzLCVmcDQJCSMgZnA0ID0gVy1QCisKKwlmc3ViLngJCSVmcDMsJWZwMAkJIyBmcDAgPSBBIDo9IFIgLSBQCisJZmFkZC54CQklZnA1LCVmcDQJCSMgZnA0ID0gcCA9IChXLVApK3cKKworCWZtb3YueAkJJWZwMCwlZnAzCQkjIGZwMyA9IEEKKwlmc3ViLngJCSVmcDQsJWZwMQkJIyBmcDEgPSBhIDo9IHIgLSBwCisKKyMtLU5vdyB3ZSBuZWVkIHRvIG5vcm1hbGl6ZSAoQSxhKSB0byAgIm5ldyAoUixyKSIgd2hlcmUgUityID0gQSthIGJ1dAorIy0tfHJ8IDw9IGhhbGYgdWxwIG9mIFIuCisJZmFkZC54CQklZnAxLCVmcDAJCSMgZnAwID0gUiA6PSBBK2EKKyMtLU5vIG5lZWQgdG8gY2FsY3VsYXRlIHIgaWYgdGhpcyBpcyB0aGUgbGFzdCBsb29wCisJY21wLmIJCSVkMSwmMAorCWJndC53CQlTUkVTVE9SRQorCisjLS1OZWVkIHRvIGNhbGN1bGF0ZSByCisJZnN1Yi54CQklZnAwLCVmcDMJCSMgZnAzID0gQS1SCisJZmFkZC54CQklZnAzLCVmcDEJCSMgZnAxID0gciA6PSAoQS1SKSthCisJYnJhLncJCVNMT09QCisKK1NSRVNUT1JFOgorCWZtb3YubAkJJWZwMixJTlQoJWE2KQorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQkoJXNwKSssJjB4M2MJCSMgcmVzdG9yZSB7ZnAyLWZwNX0KKworCW1vdi5sCQlBREpOKCVhNiksJWQxCisJY21wLmwJCSVkMSwmNAorCisJYmx0LncJCVNJTkNPTlQKKwlicmEudwkJU0NDT05UCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc3RhbigpOiAgY29tcHV0ZXMgdGhlIHRhbmdlbnQgb2YgYSBub3JtYWxpemVkIGlucHV0CQkJIworIyBzdGFuZCgpOiBjb21wdXRlcyB0aGUgdGFuZ2VudCBvZiBhIGRlbm9ybWFsaXplZCBpbnB1dAkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCisjCWQwID0gcm91bmQgcHJlY2lzaW9uLG1vZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWZwMCA9IHRhbihYKQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAzIHVscCBpbiA2NCBzaWduaWZpY2FudCBiaXQsIGkuZS4gIworIwl3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5CSMKKyMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCisjCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJCQkJCQkJCQkjCisjCTEuIElmIHxYfCA+PSAxNVBpIG9yIHxYfCA8IDIqKigtNDApLCBnbyB0byA2LgkJCSMKKyMJCQkJCQkJCQkjCisjCTIuIERlY29tcG9zZSBYIGFzIFggPSBOKFBpLzIpICsgciB3aGVyZSB8cnwgPD0gUGkvNC4gTGV0CSMKKyMJCWsgPSBOIG1vZCAyLCBzbyBpbiBwYXJ0aWN1bGFyLCBrID0gMCBvciAxLgkJIworIwkJCQkJCQkJCSMKKyMJMy4gSWYgayBpcyBvZGQsIGdvIHRvIDUuCQkJCQkjCisjCQkJCQkJCQkJIworIwk0LiAoayBpcyBldmVuKSBUYW4oWCkgPSB0YW4ocikgYW5kIHRhbihyKSBpcyBhcHByb3hpbWF0ZWQgYnkgYQkjCisjCQlyYXRpb25hbCBmdW5jdGlvbiBVL1Ygd2hlcmUJCQkJIworIwkJVSA9IHIgKyByKnMqKFAxICsgcyooUDIgKyBzKlAzKSksIGFuZAkJCSMKKyMJCVYgPSAxICsgcyooUTEgKyBzKihRMiArIHMqKFEzICsgcypRNCkpKSwgIHMgPSByKnIuCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTQuIChrIGlzIG9kZCkgVGFuKFgpID0gLWNvdChyKS4gU2luY2UgdGFuKHIpIGlzIGFwcHJveGltYXRlZCBieSAjCisjCQlhIHJhdGlvbmFsIGZ1bmN0aW9uIFUvViB3aGVyZQkJCQkjCisjCQlVID0gciArIHIqcyooUDEgKyBzKihQMiArIHMqUDMpKSwgYW5kCQkJIworIwkJViA9IDEgKyBzKihRMSArIHMqKFEyICsgcyooUTMgKyBzKlE0KSkpLCBzID0gcipyLAkjCisjCQktQ290KHIpID0gLVYvVS4gRXhpdC4JCQkJCSMKKyMJCQkJCQkJCQkjCisjCTYuIElmIHxYfCA+IDEsIGdvIHRvIDguCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJNy4gKHxYfDwyKiooLTQwKSkgVGFuKFgpID0gWC4gRXhpdC4JCQkJIworIwkJCQkJCQkJCSMKKyMJOC4gT3ZlcndyaXRlIFggYnkgWCA6PSBYIHJlbSAyUGkuIE5vdyB0aGF0IHxYfCA8PSBQaSwgZ28gYmFjawkjCisjCQl0byAyLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitUQU5RNDoKKwlsb25nCQkweDNFQTBCNzU5LDB4RjUwRjg2ODgKK1RBTlAzOgorCWxvbmcJCTB4QkVGMkJBQTUsMHhBODkyNEYwNAorCitUQU5RMzoKKwlsb25nCQkweEJGMzQ2RjU5LDB4QjM5QkE2NUYsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisKK1RBTlAyOgorCWxvbmcJCTB4M0ZGNjAwMDAsMHhFMDczRDNGQywweDE5OUM0QTAwLDB4MDAwMDAwMDAKKworVEFOUTI6CisJbG9uZwkJMHgzRkY5MDAwMCwweEQyM0NENjg0LDB4MTVEOTVGQTEsMHgwMDAwMDAwMAorCitUQU5QMToKKwlsb25nCQkweEJGRkMwMDAwLDB4ODg5NUE2QzUsMHhGQjQyM0JDQSwweDAwMDAwMDAwCisKK1RBTlExOgorCWxvbmcJCTB4QkZGRDAwMDAsMHhFRUY1N0UwRCwweEE4NEJDOENFLDB4MDAwMDAwMDAKKworSU5WVFdPUEk6CisJbG9uZwkJMHgzRkZDMDAwMCwweEEyRjk4MzZFLDB4NEU0NDE1MkEsMHgwMDAwMDAwMAorCitUV09QSTE6CisJbG9uZwkJMHg0MDAxMDAwMCwweEM5MEZEQUEyLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorVFdPUEkyOgorCWxvbmcJCTB4M0ZERjAwMDAsMHg4NUEzMDhENCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworIy0tTipQSS8yLCAtMzIgPD0gTiA8PSAzMiwgSU4gQSBMRUFESU5HIFRFUk0gSU4gRVhULiBBTkQgVFJBSUxJTkcKKyMtLVRFUk0gSU4gU0dMLiBOT1RFIFRIQVQgUEkgSVMgNjQtQklUIExPTkcsIFRIVVMgTipQSS8yIElTIEFUCisjLS1NT1NUIDY5IEJJVFMgTE9ORy4KKyMJZ2xvYmFsCQlQSVRCTAorUElUQkw6CisJbG9uZwkJMHhDMDA0MDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgyMTgwMDAwMAorCWxvbmcJCTB4QzAwNDAwMDAsMHhDMkM3NUJDRCwweDEwNUQ3QzIzLDB4QTBEMDAwMDAKKwlsb25nCQkweEMwMDQwMDAwLDB4QkM3RURDRjcsMHhGRjUyMzYxMSwweEExRTgwMDAwCisJbG9uZwkJMHhDMDA0MDAwMCwweEI2MzY1RTIyLDB4RUU0NkYwMDAsMHgyMTQ4MDAwMAorCWxvbmcJCTB4QzAwNDAwMDAsMHhBRkVEREY0RCwweEREM0JBOUVFLDB4QTEyMDAwMDAKKwlsb25nCQkweEMwMDQwMDAwLDB4QTlBNTYwNzgsMHhDQzMwNjNERCwweDIxRkMwMDAwCisJbG9uZwkJMHhDMDA0MDAwMCwweEEzNUNFMUEzLDB4QkIyNTFEQ0IsMHgyMTEwMDAwMAorCWxvbmcJCTB4QzAwNDAwMDAsMHg5RDE0NjJDRSwweEFBMTlEN0I5LDB4QTE1ODAwMDAKKwlsb25nCQkweEMwMDQwMDAwLDB4OTZDQkUzRjksMHg5OTBFOTFBOCwweDIxRTAwMDAwCisJbG9uZwkJMHhDMDA0MDAwMCwweDkwODM2NTI0LDB4ODgwMzRCOTYsMHgyMEIwMDAwMAorCWxvbmcJCTB4QzAwNDAwMDAsMHg4QTNBRTY0RiwweDc2RjgwNTg0LDB4QTE4ODAwMDAKKwlsb25nCQkweEMwMDQwMDAwLDB4ODNGMjY3N0EsMHg2NUVDQkY3MywweDIxQzQwMDAwCisJbG9uZwkJMHhDMDAzMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHgyMDAwMDAwMAorCWxvbmcJCTB4QzAwMzAwMDAsMHhFRUMyRDNBMCwweDg3QUM2NjlGLDB4MjEzODAwMDAKKwlsb25nCQkweEMwMDMwMDAwLDB4RTIzMUQ1RjYsMHg2NTk1REE3QiwweEExMzAwMDAwCisJbG9uZwkJMHhDMDAzMDAwMCwweEQ1QTBEODRDLDB4NDM3RjRFNTgsMHg5RkMwMDAwMAorCWxvbmcJCTB4QzAwMzAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4MjEwMDAwMDAKKwlsb25nCQkweEMwMDMwMDAwLDB4QkM3RURDRjcsMHhGRjUyMzYxMSwweEExNjgwMDAwCisJbG9uZwkJMHhDMDAzMDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHhBMEEwMDAwMAorCWxvbmcJCTB4QzAwMzAwMDAsMHhBMzVDRTFBMywweEJCMjUxRENCLDB4MjA5MDAwMDAKKwlsb25nCQkweEMwMDMwMDAwLDB4OTZDQkUzRjksMHg5OTBFOTFBOCwweDIxNjAwMDAwCisJbG9uZwkJMHhDMDAzMDAwMCwweDhBM0FFNjRGLDB4NzZGODA1ODQsMHhBMTA4MDAwMAorCWxvbmcJCTB4QzAwMjAwMDAsMHhGQjUzRDE0QSwweEE5QzJGMkMyLDB4MUY4MDAwMDAKKwlsb25nCQkweEMwMDIwMDAwLDB4RTIzMUQ1RjYsMHg2NTk1REE3QiwweEEwQjAwMDAwCisJbG9uZwkJMHhDMDAyMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgyMDgwMDAwMAorCWxvbmcJCTB4QzAwMjAwMDAsMHhBRkVEREY0RCwweEREM0JBOUVFLDB4QTAyMDAwMDAKKwlsb25nCQkweEMwMDIwMDAwLDB4OTZDQkUzRjksMHg5OTBFOTFBOCwweDIwRTAwMDAwCisJbG9uZwkJMHhDMDAxMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHgxRjAwMDAwMAorCWxvbmcJCTB4QzAwMTAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4MjAwMDAwMDAKKwlsb25nCQkweEMwMDEwMDAwLDB4OTZDQkUzRjksMHg5OTBFOTFBOCwweDIwNjAwMDAwCisJbG9uZwkJMHhDMDAwMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgxRjgwMDAwMAorCWxvbmcJCTB4QkZGRjAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4MUYwMDAwMDAKKwlsb25nCQkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHg5RjAwMDAwMAorCWxvbmcJCTB4NDAwMDAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4OUY4MDAwMDAKKwlsb25nCQkweDQwMDEwMDAwLDB4OTZDQkUzRjksMHg5OTBFOTFBOCwweEEwNjAwMDAwCisJbG9uZwkJMHg0MDAxMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHhBMDAwMDAwMAorCWxvbmcJCTB4NDAwMTAwMDAsMHhGQjUzRDE0QSwweEE5QzJGMkMyLDB4OUYwMDAwMDAKKwlsb25nCQkweDQwMDIwMDAwLDB4OTZDQkUzRjksMHg5OTBFOTFBOCwweEEwRTAwMDAwCisJbG9uZwkJMHg0MDAyMDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHgyMDIwMDAwMAorCWxvbmcJCTB4NDAwMjAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4QTA4MDAwMDAKKwlsb25nCQkweDQwMDIwMDAwLDB4RTIzMUQ1RjYsMHg2NTk1REE3QiwweDIwQjAwMDAwCisJbG9uZwkJMHg0MDAyMDAwMCwweEZCNTNEMTRBLDB4QTlDMkYyQzIsMHg5RjgwMDAwMAorCWxvbmcJCTB4NDAwMzAwMDAsMHg4QTNBRTY0RiwweDc2RjgwNTg0LDB4MjEwODAwMDAKKwlsb25nCQkweDQwMDMwMDAwLDB4OTZDQkUzRjksMHg5OTBFOTFBOCwweEExNjAwMDAwCisJbG9uZwkJMHg0MDAzMDAwMCwweEEzNUNFMUEzLDB4QkIyNTFEQ0IsMHhBMDkwMDAwMAorCWxvbmcJCTB4NDAwMzAwMDAsMHhBRkVEREY0RCwweEREM0JBOUVFLDB4MjBBMDAwMDAKKwlsb25nCQkweDQwMDMwMDAwLDB4QkM3RURDRjcsMHhGRjUyMzYxMSwweDIxNjgwMDAwCisJbG9uZwkJMHg0MDAzMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHhBMTAwMDAwMAorCWxvbmcJCTB4NDAwMzAwMDAsMHhENUEwRDg0QywweDQzN0Y0RTU4LDB4MUZDMDAwMDAKKwlsb25nCQkweDQwMDMwMDAwLDB4RTIzMUQ1RjYsMHg2NTk1REE3QiwweDIxMzAwMDAwCisJbG9uZwkJMHg0MDAzMDAwMCwweEVFQzJEM0EwLDB4ODdBQzY2OUYsMHhBMTM4MDAwMAorCWxvbmcJCTB4NDAwMzAwMDAsMHhGQjUzRDE0QSwweEE5QzJGMkMyLDB4QTAwMDAwMDAKKwlsb25nCQkweDQwMDQwMDAwLDB4ODNGMjY3N0EsMHg2NUVDQkY3MywweEExQzQwMDAwCisJbG9uZwkJMHg0MDA0MDAwMCwweDhBM0FFNjRGLDB4NzZGODA1ODQsMHgyMTg4MDAwMAorCWxvbmcJCTB4NDAwNDAwMDAsMHg5MDgzNjUyNCwweDg4MDM0Qjk2LDB4QTBCMDAwMDAKKwlsb25nCQkweDQwMDQwMDAwLDB4OTZDQkUzRjksMHg5OTBFOTFBOCwweEExRTAwMDAwCisJbG9uZwkJMHg0MDA0MDAwMCwweDlEMTQ2MkNFLDB4QUExOUQ3QjksMHgyMTU4MDAwMAorCWxvbmcJCTB4NDAwNDAwMDAsMHhBMzVDRTFBMywweEJCMjUxRENCLDB4QTExMDAwMDAKKwlsb25nCQkweDQwMDQwMDAwLDB4QTlBNTYwNzgsMHhDQzMwNjNERCwweEExRkMwMDAwCisJbG9uZwkJMHg0MDA0MDAwMCwweEFGRURERjRELDB4REQzQkE5RUUsMHgyMTIwMDAwMAorCWxvbmcJCTB4NDAwNDAwMDAsMHhCNjM2NUUyMiwweEVFNDZGMDAwLDB4QTE0ODAwMDAKKwlsb25nCQkweDQwMDQwMDAwLDB4QkM3RURDRjcsMHhGRjUyMzYxMSwweDIxRTgwMDAwCisJbG9uZwkJMHg0MDA0MDAwMCwweEMyQzc1QkNELDB4MTA1RDdDMjMsMHgyMEQwMDAwMAorCWxvbmcJCTB4NDAwNDAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4QTE4MDAwMDAKKworCXNldAkJSU5BUkcsRlBfU0NSMAorCisJc2V0CQlUV09UTzYzLExfU0NSMQorCXNldAkJSU5ULExfU0NSMQorCXNldAkJRU5ERkxBRyxMX1NDUjIKKworCWdsb2JhbAkJc3Rhbgorc3RhbjoKKwlmbW92LngJCSglYTApLCVmcDAJCSMgTE9BRCBJTlBVVAorCisJbW92LmwJCSglYTApLCVkMQorCW1vdi53CQk0KCVhMCksJWQxCisJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQorCisJY21wLmwJCSVkMSwmMHgzRkQ3ODAwMAkJIyB8WHwgPj0gMioqKC00MCk/CisJYmdlLmIJCVRBTk9LMQorCWJyYS53CQlUQU5TTQorVEFOT0sxOgorCWNtcC5sCQklZDEsJjB4NDAwNEJDN0UJCSMgfFh8IDwgMTUgUEk/CisJYmx0LmIJCVRBTk1BSU4KKwlicmEudwkJUkVEVUNFWAorCitUQU5NQUlOOgorIy0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDw9IDE1IFBJLgorIy0tVEhFIEFSR1VNRU5UIFJFRFVDVElPTiBJUyBET05FIEJZIFRBQkxFIExPT0sgVVAuCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLmQJCVRXT0JZUEkoJXBjKSwlZnAxCSMgWCoyL1BJCisKKwlsZWEubAkJUElUQkwrMHgyMDAoJXBjKSwlYTEJIyBUQUJMRSBPRiBOKlBJLzIsIE4gPSAtMzIsLi4uLDMyCisKKwlmbW92LmwJCSVmcDEsJWQxCQkjIENPTlZFUlQgVE8gSU5URUdFUgorCisJYXNsLmwJCSY0LCVkMQorCWFkZC5sCQklZDEsJWExCQkJIyBBRERSRVNTIE4qUElCWTIgSU4gWTEsIFkyCisKKwlmc3ViLngJCSglYTEpKywlZnAwCQkjIFgtWTEKKworCWZzdWIucwkJKCVhMSksJWZwMAkJIyBGUDAgSVMgUiA9IChYLVkxKS1ZMgorCisJcm9yLmwJCSY1LCVkMQorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEJCSMgRDAgV0FTIE9ERCBJRkYgRDAgPCAwCisKK1RBTkNPTlQ6CisJZm1vdm0ueAkJJjB4MGMsLSglc3ApCQkjIHNhdmUgZnAyLGZwMworCisJY21wLmwJCSVkMSwmMAorCWJsdC53CQlOT0RECisKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwueAkJJWZwMSwlZnAxCQkjIFMgPSBSKlIKKworCWZtb3YuZAkJVEFOUTQoJXBjKSwlZnAzCisJZm1vdi5kCQlUQU5QMyglcGMpLCVmcDIKKworCWZtdWwueAkJJWZwMSwlZnAzCQkjIFNRNAorCWZtdWwueAkJJWZwMSwlZnAyCQkjIFNQMworCisJZmFkZC5kCQlUQU5RMyglcGMpLCVmcDMJCSMgUTMrU1E0CisJZmFkZC54CQlUQU5QMiglcGMpLCVmcDIJCSMgUDIrU1AzCisKKwlmbXVsLngJCSVmcDEsJWZwMwkJIyBTKFEzK1NRNCkKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBTKFAyK1NQMykKKworCWZhZGQueAkJVEFOUTIoJXBjKSwlZnAzCQkjIFEyK1MoUTMrU1E0KQorCWZhZGQueAkJVEFOUDEoJXBjKSwlZnAyCQkjIFAxK1MoUDIrU1AzKQorCisJZm11bC54CQklZnAxLCVmcDMJCSMgUyhRMitTKFEzK1NRNCkpCisJZm11bC54CQklZnAxLCVmcDIJCSMgUyhQMStTKFAyK1NQMykpCisKKwlmYWRkLngJCVRBTlExKCVwYyksJWZwMwkJIyBRMStTKFEyK1MoUTMrU1E0KSkKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBSUyhQMStTKFAyK1NQMykpCisKKwlmbXVsLngJCSVmcDMsJWZwMQkJIyBTKFExK1MoUTIrUyhRMytTUTQpKSkKKworCWZhZGQueAkJJWZwMiwlZnAwCQkjIFIrUlMoUDErUyhQMitTUDMpKQorCisJZmFkZC5zCQkmMHgzRjgwMDAwMCwlZnAxCSMgMStTKFExKy4uLikKKworCWZtb3ZtLngJCSglc3ApKywmMHgzMAkJIyByZXN0b3JlIGZwMixmcDMKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgbW9kZSxwcmVjCisJZmRpdi54CQklZnAxLCVmcDAJCSMgbGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uIHNldAorCWJyYQkJdF9pbngyCisKK05PREQ6CisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLngJCSVmcDAsJWZwMAkJIyBTID0gUipSCisKKwlmbW92LmQJCVRBTlE0KCVwYyksJWZwMworCWZtb3YuZAkJVEFOUDMoJXBjKSwlZnAyCisKKwlmbXVsLngJCSVmcDAsJWZwMwkJIyBTUTQKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBTUDMKKworCWZhZGQuZAkJVEFOUTMoJXBjKSwlZnAzCQkjIFEzK1NRNAorCWZhZGQueAkJVEFOUDIoJXBjKSwlZnAyCQkjIFAyK1NQMworCisJZm11bC54CQklZnAwLCVmcDMJCSMgUyhRMytTUTQpCisJZm11bC54CQklZnAwLCVmcDIJCSMgUyhQMitTUDMpCisKKwlmYWRkLngJCVRBTlEyKCVwYyksJWZwMwkJIyBRMitTKFEzK1NRNCkKKwlmYWRkLngJCVRBTlAxKCVwYyksJWZwMgkJIyBQMStTKFAyK1NQMykKKworCWZtdWwueAkJJWZwMCwlZnAzCQkjIFMoUTIrUyhRMytTUTQpKQorCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoUDErUyhQMitTUDMpKQorCisJZmFkZC54CQlUQU5RMSglcGMpLCVmcDMJCSMgUTErUyhRMitTKFEzK1NRNCkpCisJZm11bC54CQklZnAxLCVmcDIJCSMgUlMoUDErUyhQMitTUDMpKQorCisJZm11bC54CQklZnAzLCVmcDAJCSMgUyhRMStTKFEyK1MoUTMrU1E0KSkpCisKKwlmYWRkLngJCSVmcDIsJWZwMQkJIyBSK1JTKFAxK1MoUDIrU1AzKSkKKwlmYWRkLnMJCSYweDNGODAwMDAwLCVmcDAJIyAxK1MoUTErLi4uKQorCisJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIHJlc3RvcmUgZnAyLGZwMworCisJZm1vdi54CQklZnAxLC0oJXNwKQorCWVvci5sCQkmMHg4MDAwMDAwMCwoJXNwKQorCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBtb2RlLHByZWMKKwlmZGl2LngJCSglc3ApKywlZnAwCQkjIGxhc3QgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbiBzZXQKKwlicmEJCXRfaW54MgorCitUQU5CT1JTOgorIy0tSUYgfFh8ID4gMTVQSSwgV0UgVVNFIFRIRSBHRU5FUkFMIEFSR1VNRU5UIFJFRFVDVElPTi4KKyMtLUlGIHxYfCA8IDIqKigtNDApLCBSRVRVUk4gWCBPUiAxLgorCWNtcC5sCQklZDEsJjB4M0ZGRjgwMDAKKwliZ3QuYgkJUkVEVUNFWAorCitUQU5TTToKKwlmbW92LngJCSVmcDAsLSglc3ApCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBtb2RlLHByZWMKKwltb3YuYgkJJkZNT1ZfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNT1ZFCisJZm1vdi54CQkoJXNwKSssJWZwMAkJIyBsYXN0IGluc3QgLSBwb3NpYmJsZSBleGNlcHRpb24gc2V0CisJYnJhCQl0X2NhdGNoCisKKwlnbG9iYWwJCXN0YW5kCisjLS1UQU4oWCkgPSBYIEZPUiBERU5PUk1BTElaRUQgWAorc3RhbmQ6CisJYnJhCQl0X2V4dGRucm0KKworIy0tV0hFTiBSRURVQ0VYIElTIFVTRUQsIFRIRSBDT0RFIFdJTEwgSU5FVklUQUJMWSBCRSBTTE9XLgorIy0tVEhJUyBSRURVQ1RJT04gTUVUSE9ELCBIT1dFVkVSLCBJUyBNVUNIIEZBU1RFUiBUSEFOIFVTSU5HCisjLS1USEUgUkVNQUlOREVSIElOU1RSVUNUSU9OIFdISUNIIElTIE5PVyBJTiBTT0ZUV0FSRS4KK1JFRFVDRVg6CisJZm1vdm0ueAkJJjB4M2MsLSglc3ApCQkjIHNhdmUge2ZwMi1mcDV9CisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMQkjIGZwMSA9IDAKKworIy0tSWYgY29tcGFjdCBmb3JtIG9mIGFicyhhcmcpIGluIGQwPSQ3ZmZlZmZmZiwgYXJndW1lbnQgaXMgc28gbGFyZ2UgdGhhdAorIy0tdGhlcmUgaXMgYSBkYW5nZXIgb2YgdW53YW50ZWQgb3ZlcmZsb3cgaW4gZmlyc3QgTE9PUCBpdGVyYXRpb24uICBJbiB0aGlzCisjLS1jYXNlLCByZWR1Y2UgYXJndW1lbnQgYnkgb25lIHJlbWFpbmRlciBzdGVwIHRvIG1ha2Ugc3Vic2VxdWVudCByZWR1Y3Rpb24KKyMtLXNhZmUuCisJY21wLmwJCSVkMSwmMHg3ZmZlZmZmZgkJIyBpcyBhcmcgZGFuZ2Vyb3VzbHkgbGFyZ2U/CisJYm5lLmIJCUxPT1AJCQkjIG5vCisKKyMgeWVzOyBjcmVhdGUgMioqMTYzODMqUEkvMgorCW1vdi53CQkmMHg3ZmZlLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQkmMHhjOTBmZGFhMixGUF9TQ1IwX0hJKCVhNikKKwljbHIubAkJRlBfU0NSMF9MTyglYTYpCisKKyMgY3JlYXRlIGxvdyBoYWxmIG9mIDIqKjE2MzgzKlBJLzIgYXQgRlBfU0NSMQorCW1vdi53CQkmMHg3ZmRjLEZQX1NDUjFfRVgoJWE2KQorCW1vdi5sCQkmMHg4NWEzMDhkMyxGUF9TQ1IxX0hJKCVhNikKKwljbHIubAkJRlBfU0NSMV9MTyglYTYpCisKKwlmdGVzdC54CQklZnAwCQkJIyB0ZXN0IHNpZ24gb2YgYXJndW1lbnQKKwlmYmx0LncJCXJlZF9uZWcKKworCW9yLmIJCSYweDgwLEZQX1NDUjBfRVgoJWE2KQkjIHBvc2l0aXZlIGFyZworCW9yLmIJCSYweDgwLEZQX1NDUjFfRVgoJWE2KQorcmVkX25lZzoKKwlmYWRkLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgaGlnaCBwYXJ0IG9mIHJlZHVjdGlvbiBpcyBleGFjdAorCWZtb3YueAkJJWZwMCwlZnAxCQkjIHNhdmUgaGlnaCByZXN1bHQgaW4gZnAxCisJZmFkZC54CQlGUF9TQ1IxKCVhNiksJWZwMAkjIGxvdyBwYXJ0IG9mIHJlZHVjdGlvbgorCWZzdWIueAkJJWZwMCwlZnAxCQkjIGRldGVybWluZSBsb3cgY29tcG9uZW50IG9mIHJlc3VsdAorCWZhZGQueAkJRlBfU0NSMSglYTYpLCVmcDEJIyBmcDAvZnAxIGFyZSByZWR1Y2VkIGFyZ3VtZW50LgorCisjLS1PTiBFTlRSWSwgRlAwIElTIFgsIE9OIFJFVFVSTiwgRlAwIElTIFggUkVNIFBJLzIsIHxYfCA8PSBQSS80LgorIy0taW50ZWdlciBxdW90aWVudCB3aWxsIGJlIHN0b3JlZCBpbiBOCisjLS1JbnRlcm1lZGl0YXRlIHJlbWFpbmRlciBpcyA2Ni1iaXQgbG9uZzsgKFIscikgaW4gKEZQMCxGUDEpCitMT09QOgorCWZtb3YueAkJJWZwMCxJTkFSRyglYTYpCQkjICstMioqSyAqIEYsIDEgPD0gRiA8IDIKKwltb3YudwkJSU5BUkcoJWE2KSwlZDEKKwltb3YubAkJJWQxLCVhMQkJCSMgc2F2ZSBhIGNvcHkgb2YgRDAKKwlhbmQubAkJJjB4MDAwMDdGRkYsJWQxCisJc3ViLmwJCSYweDAwMDAzRkZGLCVkMQkJIyBkMCA9IEsKKwljbXAubAkJJWQxLCYyOAorCWJsZS5iCQlMQVNUTE9PUAorQ09OVExPT1A6CisJc3ViLmwJCSYyNywlZDEJCQkjIGQwID0gTCA6PSBLLTI3CisJbW92LmIJCSYwLEVOREZMQUcoJWE2KQorCWJyYS5iCQlXT1JLCitMQVNUTE9PUDoKKwljbHIubAkJJWQxCQkJIyBkMCA9IEwgOj0gMAorCW1vdi5iCQkmMSxFTkRGTEFHKCVhNikKKworV09SSzoKKyMtLUZJTkQgVEhFIFJFTUFJTkRFUiBPRiAoUixyKSBXLlIuVC4JMioqTCAqIChQSS8yKS4gTCBJUyBTTyBDSE9TRU4KKyMtLVRIQVQJSU5UKCBYICogKDIvUEkpIC8gMioqKEwpICkgPCAyKioyOS4KKworIy0tQ1JFQVRFIDIqKigtTCkgKiAoMi9QSSksIFNJR04oSU5BUkcpKjIqKig2MyksCisjLS0yKipMICogKFBJYnkyXzEpLCAyKipMICogKFBJYnkyXzIpCisKKwltb3YubAkJJjB4MDAwMDNGRkUsJWQyCQkjIEJJQVNFRCBFWFAgT0YgMi9QSQorCXN1Yi5sCQklZDEsJWQyCQkJIyBCSUFTRUQgRVhQIE9GIDIqKigtTCkqKDIvUEkpCisKKwltb3YubAkJJjB4QTJGOTgzNkUsRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCSYweDRFNDQxNTJBLEZQX1NDUjBfTE8oJWE2KQorCW1vdi53CQklZDIsRlBfU0NSMF9FWCglYTYpCSMgRlBfU0NSMCA9IDIqKigtTCkqKDIvUEkpCisKKwlmbW92LngJCSVmcDAsJWZwMgorCWZtdWwueAkJRlBfU0NSMCglYTYpLCVmcDIJIyBmcDIgPSBYICogMioqKC1MKSooMi9QSSkKKworIy0tV0UgTVVTVCBOT1cgRklORCBJTlQoRlAyKS4gU0lOQ0UgV0UgTkVFRCBUSElTIFZBTFVFIElOCisjLS1GTE9BVElORyBQT0lOVCBGT1JNQVQsIFRIRSBUV08gRk1PVkUnUwlGTU9WRS5MIEZQIDwtLT4gTgorIy0tV0lMTCBCRSBUT08gSU5FRkZJQ0lFTlQuIFRIRSBXQVkgQVJPVU5EIElUIElTIFRIQVQKKyMtLShTSUdOKElOQVJHKSoyKio2MwkrCUZQMikgLSBTSUdOKElOQVJHKSoyKio2MyBXSUxMIEdJVkUKKyMtLVVTIFRIRSBERVNJUkVEIFZBTFVFIElOIEZMT0FUSU5HIFBPSU5ULgorCW1vdi5sCQklYTEsJWQyCisJc3dhcAkJJWQyCisJYW5kLmwJCSYweDgwMDAwMDAwLCVkMgorCW9yLmwJCSYweDVGMDAwMDAwLCVkMgkJIyBkMiA9IFNJR04oSU5BUkcpKjIqKjYzIElOIFNHTAorCW1vdi5sCQklZDIsVFdPVE82MyglYTYpCisJZmFkZC5zCQlUV09UTzYzKCVhNiksJWZwMgkjIFRIRSBGUkFDVElPTkFMIFBBUlQgT0YgRlAxIElTIFJPVU5ERUQKKwlmc3ViLnMJCVRXT1RPNjMoJWE2KSwlZnAyCSMgZnAyID0gTgorIwlmaW50cnoueAklZnAyLCVmcDIKKworIy0tQ1JFQVRJTkcgMioqKEwpKlBpYnkyXzEgYW5kIDIqKihMKSpQaWJ5Ml8yCisJbW92LmwJCSVkMSwlZDIJCQkjIGQyID0gTAorCisJYWRkLmwJCSYweDAwMDAzRkZGLCVkMgkJIyBCSUFTRUQgRVhQIE9GIDIqKkwgKiAoUEkvMikKKwltb3YudwkJJWQyLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQkmMHhDOTBGREFBMixGUF9TQ1IwX0hJKCVhNikKKwljbHIubAkJRlBfU0NSMF9MTyglYTYpCQkjIEZQX1NDUjAgPSAyKiooTCkgKiBQaWJ5Ml8xCisKKwlhZGQubAkJJjB4MDAwMDNGREQsJWQxCisJbW92LncJCSVkMSxGUF9TQ1IxX0VYKCVhNikKKwltb3YubAkJJjB4ODVBMzA4RDMsRlBfU0NSMV9ISSglYTYpCisJY2xyLmwJCUZQX1NDUjFfTE8oJWE2KQkJIyBGUF9TQ1IxID0gMioqKEwpICogUGlieTJfMgorCisJbW92LmIJCUVOREZMQUcoJWE2KSwlZDEKKworIy0tV2UgYXJlIG5vdyByZWFkeSB0byBwZXJmb3JtIChSK3IpIC0gTipQMSAtIE4qUDIsIFAxID0gMioqKEwpICogUGlieTJfMSBhbmQKKyMtLVAyID0gMioqKEwpICogUGlieTJfMgorCWZtb3YueAkJJWZwMiwlZnA0CQkjIGZwNCA9IE4KKwlmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnA0CSMgZnA0ID0gVyA9IE4qUDEKKwlmbW92LngJCSVmcDIsJWZwNQkJIyBmcDUgPSBOCisJZm11bC54CQlGUF9TQ1IxKCVhNiksJWZwNQkjIGZwNSA9IHcgPSBOKlAyCisJZm1vdi54CQklZnA0LCVmcDMJCSMgZnAzID0gVyA9IE4qUDEKKworIy0td2Ugd2FudCBQK3AgPSBXK3cgIGJ1dCAgfHB8IDw9IGhhbGYgdWxwIG9mIFAKKyMtLVRoZW4sIHdlIG5lZWQgdG8gY29tcHV0ZSAgQSA6PSBSLVAgICBhbmQgIGEgOj0gci1wCisJZmFkZC54CQklZnA1LCVmcDMJCSMgZnAzID0gUAorCWZzdWIueAkJJWZwMywlZnA0CQkjIGZwNCA9IFctUAorCisJZnN1Yi54CQklZnAzLCVmcDAJCSMgZnAwID0gQSA6PSBSIC0gUAorCWZhZGQueAkJJWZwNSwlZnA0CQkjIGZwNCA9IHAgPSAoVy1QKSt3CisKKwlmbW92LngJCSVmcDAsJWZwMwkJIyBmcDMgPSBBCisJZnN1Yi54CQklZnA0LCVmcDEJCSMgZnAxID0gYSA6PSByIC0gcAorCisjLS1Ob3cgd2UgbmVlZCB0byBub3JtYWxpemUgKEEsYSkgdG8gICJuZXcgKFIscikiIHdoZXJlIFIrciA9IEErYSBidXQKKyMtLXxyfCA8PSBoYWxmIHVscCBvZiBSLgorCWZhZGQueAkJJWZwMSwlZnAwCQkjIGZwMCA9IFIgOj0gQSthCisjLS1ObyBuZWVkIHRvIGNhbGN1bGF0ZSByIGlmIHRoaXMgaXMgdGhlIGxhc3QgbG9vcAorCWNtcC5iCQklZDEsJjAKKwliZ3QudwkJUkVTVE9SRQorCisjLS1OZWVkIHRvIGNhbGN1bGF0ZSByCisJZnN1Yi54CQklZnAwLCVmcDMJCSMgZnAzID0gQS1SCisJZmFkZC54CQklZnAzLCVmcDEJCSMgZnAxID0gciA6PSAoQS1SKSthCisJYnJhLncJCUxPT1AKKworUkVTVE9SRToKKwlmbW92LmwJCSVmcDIsSU5UKCVhNikKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJKCVzcCkrLCYweDNjCQkjIHJlc3RvcmUge2ZwMi1mcDV9CisKKwltb3YubAkJSU5UKCVhNiksJWQxCisJcm9yLmwJCSYxLCVkMQorCisJYnJhLncJCVRBTkNPTlQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzYXRhbigpOiAgY29tcHV0ZXMgdGhlIGFyY3RhbmdlbnQgb2YgYSBub3JtYWxpemVkIG51bWJlcgkJIworIyBzYXRhbmQoKTogY29tcHV0ZXMgdGhlIGFyY3RhbmdlbnQgb2YgYSBkZW5vcm1hbGl6ZWQgbnVtYmVyCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVAkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlmcDAgPSBhcmN0YW4oWCkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMiB1bHBzIGluCTY0IHNpZ25pZmljYW50IGJpdCwJIworIwlpLmUuIHdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkJIworIwlyb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljCSMKKyMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlTdGVwIDEuIElmIHxYfCA+PSAxNiBvciB8WHwgPCAxLzE2LCBnbyB0byBTdGVwIDUuCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDIuIExldCBYID0gc2duICogMioqayAqIDEueHh4eHh4eHguLi54LgkJCSMKKyMJCU5vdGUgdGhhdCBrID0gLTQsIC0zLC4uLiwgb3IgMy4JCQkJIworIwkJRGVmaW5lIEYgPSBzZ24gKiAyKiprICogMS54eHh4MSwgaS5lLiB0aGUgZmlyc3QgNQkjCisjCQlzaWduaWZpY2FudCBiaXRzIG9mIFggd2l0aCBhIGJpdC0xIGF0dGFjaGVkIGF0IHRoZSA2LXRoCSMKKyMJCWJpdCBwb3NpdGlvbi4gRGVmaW5lIHUgdG8gYmUgdSA9IChYLUYpIC8gKDEgKyBYKkYpLgkjCisjCQkJCQkJCQkJIworIwlTdGVwIDMuIEFwcHJveGltYXRlIGFyY3Rhbih1KSBieSBhIHBvbHlub21pYWwgcG9seS4JCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgNC4gUmV0dXJuIGFyY3RhbihGKSArIHBvbHksIGFyY3RhbihGKSBpcyBmZXRjaGVkIGZyb20gYQkjCisjCQl0YWJsZSBvZiB2YWx1ZXMgY2FsY3VsYXRlZCBiZWZvcmVoYW5kLiBFeGl0LgkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA1LiBJZiB8WHwgPj0gMTYsIGdvIHRvIFN0ZXAgNy4JCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA2LiBBcHByb3hpbWF0ZSBhcmN0YW4oWCkgYnkgYW4gb2RkIHBvbHlub21pYWwgaW4gWC4gRXhpdC4JIworIwkJCQkJCQkJCSMKKyMJU3RlcCA3LiBEZWZpbmUgWCcgPSAtMS9YLiBBcHByb3hpbWF0ZSBhcmN0YW4oWCcpIGJ5IGFuIG9kZAkjCisjCQlwb2x5bm9taWFsIGluIFgnLgkJCQkJIworIwkJQXJjdGFuKFgpID0gc2lnbihYKSpQaS8yICsgYXJjdGFuKFgnKS4gRXhpdC4JCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0FUQU5BMzoJbG9uZwkJMHhCRkY2Njg3RSwweDMxNDk4N0Q4CitBVEFOQTI6CWxvbmcJCTB4NDAwMkFDNjksMHgzNEEyNkRCMworQVRBTkExOglsb25nCQkweEJGQzI0NzZGLDB4NEUxREEyOEUKKworQVRBTkI2Oglsb25nCQkweDNGQjM0NDQ0LDB4N0Y4NzY5ODkKK0FUQU5CNToJbG9uZwkJMHhCRkI3NDRFRSwweDdGQUY0NURCCitBVEFOQjQ6CWxvbmcJCTB4M0ZCQzcxQzYsMHg0Njk0MDIyMAorQVRBTkIzOglsb25nCQkweEJGQzI0OTI0LDB4OTIxODcyRjkKK0FUQU5CMjoJbG9uZwkJMHgzRkM5OTk5OSwweDk5OTk4RkE5CitBVEFOQjE6CWxvbmcJCTB4QkZENTU1NTUsMHg1NTU1NTU1NQorCitBVEFOQzU6CWxvbmcJCTB4QkZCNzBCRjMsMHg5ODUzOUU2QQorQVRBTkM0Oglsb25nCQkweDNGQkM3MTg3LDB4OTYyRDFEN0QKK0FUQU5DMzoJbG9uZwkJMHhCRkMyNDkyNCwweDgyNzEwN0I4CitBVEFOQzI6CWxvbmcJCTB4M0ZDOTk5OTksMHg5OTk2MjYzRQorQVRBTkMxOglsb25nCQkweEJGRDU1NTU1LDB4NTU1NTU1MzYKKworUFBJQlkyOglsb25nCQkweDNGRkYwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDAwMDAwMDAwCitOUElCWTI6CWxvbmcJCTB4QkZGRjAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4MDAwMDAwMDAKKworUFRJTlk6CWxvbmcJCTB4MDAwMTAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK05USU5ZOglsb25nCQkweDgwMDEwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisKK0FUQU5UQkw6CisJbG9uZwkJMHgzRkZCMDAwMCwweDgzRDE1MkM1LDB4MDYwQjdBNTEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHg4QkM4NTQ0NSwweDY1NDk4QjhCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4OTNCRTQwNjAsMHgxNzYyNkIwRCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweDlCQjMwNzhELDB4MzVBRUMyMDIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHhBM0E2OUE1MiwweDVERENFN0RFLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4QUI5OEU5NDMsMHg2Mjc2NTYxOSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweEIzODlFNTAyLDB4RjlDNTk4NjIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHhCQjc5N0U0MywweDZCMDlFNkZCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4QzM2N0E1QzcsMHgzOUU1RjQ0NiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweENCNTQ0QzYxLDB4Q0ZGN0Q1QzYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHhEMzNGNjJGOCwweDI0ODg1MzNFLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4REIyOERBODEsMHg2MjQwNEM3NywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweEUzMTBBNDA3LDB4OEFEMzRGMTgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHhFQUY2QjBBOCwweDE4OEVFMUVCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4RjJEQUYxOTQsMHg5REJFNzlENSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweEZBQkQ1ODEzLDB4NjFENDdFM0UsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHg4MzQ2QUMyMSwweDA5NTlFQ0M0LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4OEIyMzJBMDgsMHgzMDQyODJEOCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweDkyRkI3MEI4LDB4RDI5QUUyRjksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHg5QUNGNDc2RiwweDVDQ0QxQ0I0LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4QTI5RTc2MzAsMHg0OTU0RjIzRiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEFBNjhDNUQwLDB4OEFCODUyMzAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhCMjJERkZGRCwweDlENTM5RjgzLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4QjlFREVGNDUsMHgzRTkwMEVBNSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEMxQTg1RjFDLDB4Qzc1RTNFQTUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhDOTVEMUJFOCwweDI4MTM4REU2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4RDEwQkYzMDAsMHg4NDBEMkRFNCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEQ4QjRCMkJBLDB4NkJDMDVFN0EsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhFMDU3MkE2QiwweEI0MjMzNUY2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4RTdGMzJBNzAsMHhFQTlDQUE4RiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEVGODg4NDMyLDB4NjRFQ0VGQUEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhGNzE3MEEyOCwweEVDQzA2NjY2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4ODEyRkQyODgsMHgzMzJEQUQzMiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweDg4QThEMUIxLDB4MjE4RTRENjQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHg5MDEyQUIzRiwweDIzRTRBRUU4LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4OTc2Q0MzRDQsMHgxMUU3RjFCOSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweDlFQjY4OTQ5LDB4Mzg4OUEyMjcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhBNUVGNzJDMywweDQ0ODczNjFCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4QUQxNzAwQkEsMHhGMDdBNzIyNywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEI0MkNCQ0ZBLDB4RkQzN0VGQjcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhCQjMwM0E5NCwweDBCQTgwRjg5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4QzIyMTE1QzYsMHhGQ0FFQkJBRiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEM4RkVGM0U2LDB4ODYzMzEyMjEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhDRkM5ODMzMCwweEI0MDAwQzcwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4RDY4MDdBQTEsMHgxMDJDNUJGOSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEREMjM5OUJDLDB4MzEyNTJBQTMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhFM0IyQTg1NSwweDZCOEZDNTE3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4RUEyRDc2NEYsMHg2NDMxNTk4OSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEYzQkY1QkY4LDB4QkFEMUEyMUQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4MDFDRTM5RSwweDBEMjA1QzlBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4ODYzMEEyREEsMHhEQTFFRDA2NiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDhDMUFENDQ1LDB4RjNFMDlCOEMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5MURCOEYxNiwweDY0RjM1MEUyLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OTc3MzE0MjAsMHgzNjVFNTM4QywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDlDRTFDOEU2LDB4QTBCOENEQkEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBMjI4MzJEQiwweENBREFBRTA5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QTc0NkYyREQsMHhCNzYwMjI5NCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEFDM0VDMEZCLDB4OTk3REQ2QTIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhCMTEwNjg4QSwweEVCREM2RjZBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QjVCQ0M0OTAsMHg1OUVDQzRCMCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEJBNDRCQzdELDB4RDQ3MDc4MkYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhCRUE5NDE0NCwweEZEMDQ5QUFDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QzJFQjRBQkIsMHg2NjE2MjhCNiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEM3MEJENTRDLDB4RTYwMkVFMTQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhDRDAwMDU0OSwweEFERUM3MTU5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RDQ4NDU3RDIsMHhEOEVBNEVBMywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweERCOTQ4REE3LDB4MTJERUNFM0IsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhFMjM4NTVGOSwweDY5RTgwOTZBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RTg3NzExMjksMHhDNDM1MzI1OSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEVFNTdDMTZFLDB4MEQzNzlDMEQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhGM0UxMDIxMSwweEE4N0MzNzc5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RjkxOTAzOUQsMHg3NThCOEQ0MSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEZFMDU4QjhGLDB4NjQ5MzVGQjMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4MTU1RkI0OSwweDdCNjg1RDA0LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4ODM4ODlFMzUsMHg0OUQxMDhFMSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDg1OUNGQTc2LDB4NTExRDcyNEIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4Nzk1MkVDRiwweEZGODEzMUU3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4ODk3MzJGRDEsMHg5NTU3NjQxQiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDhCMzhDQUQxLDB4MDE5MzJBMzUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4Q0U3QThEOCwweDMwMUVFNkI1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4OEY0NkEzOUUsMHgyRUFFNTI4MSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDkyMkRBN0Q3LDB4OTE4ODg0ODcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5NEQxOUZDQiwweERFREY1MjQxLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4OTczQUI5NDQsMHgxOUQyQTA4QiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDk5NkZGMDBFLDB4MDhFMTBCOTYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5Qjc3M0Y5NSwweDEyMzIxREE3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4OUQ1NUNDMzIsMHgwRjkzNTYyNCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDlGMTAwNTc1LDB4MDA2Q0M1NzEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBMEE5QzI5MCwweEQ5N0NDMDZDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QTIyNjU5RUIsMHhFQkMwNjMwQSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEEzODhCNEFGLDB4RjZFRjBFQzksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBNEQzNUYxMCwweDYxRDI5MkM0LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QTYwODk1REMsMHhGQkUzMTg3RSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEE3MkE1MURDLDB4NzM2N0JFQUMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBODNBNTE1MywweDA5NTYxNjhGLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QTkzQTIwMDcsMHg3NTM5NTQ2RSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEFBOUU3MjQ1LDB4MDIzQjI2MDUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBQzRDODRCQSwweDZGRTRENThGLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QURDRTRBNEEsMHg2MDZCOTcxMiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEFGMkEyRENELDB4OEQyNjNDOUMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCMDY1NkY4MSwweEYyMjI2NUM3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QjE4NDY1MTUsMHgwRjcxNDk2QSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEIyOEFBQTE1LDB4NkY5QURBMzUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCMzdCNDRGRiwweDM3NjZCODk1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QjQ1OEMzREMsMHhFOTYzMDQzMywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEI1MjU1MjlELDB4NTYyMjQ2QkQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCNUUyQ0NBOSwweDVGOUQ4OENDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QjY5MkNBREEsMHg3QUNBMUFEQSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEI3MzZBRUE3LDB4QTY5MjU4MzgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCN0NGQUIyOCwweDdFOUY3QjM2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4Qjg1RUNDNjYsMHhDQjIxOTgzNSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEI4RTRGRDVBLDB4MjBBNTkzREEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCOTlGNDFGNiwweDRBRkY5QkI1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QkE3RjFFMTcsMHg4NDJCQkU3QiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEJCNDcxMjg1LDB4NzYzN0UxN0QsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCQkZBQkU4QSwweDQ3ODhERjZGLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QkM5RDBGQUQsMHgyQjY4OUQ3OSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEJEMzA2QTM5LDB4NDcxRUNEODYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCREI2QzczMSwweDg1NkFGMThBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QkUzMUNBQzUsMHgwMkU4MEQ3MCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEJFQTJENTVDLDB4RTMzMTk0RTIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCRjBCMTBCNywweEMwMzEyOEYwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QkY2QjdBMTgsMHhEQUNCNzc4RCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEJGQzRFQTQ2LDB4NjNGQTE4RjYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDMDE4MUJERSwweDhCODlBNDU0LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QzA2NUIwNjYsMHhDRkJGNjQzOSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEMwQUUzNDVGLDB4NTYzNDBBRTYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDMEYyMjI5MSwweDlDQjlFNkE3LDB4MDAwMDAwMDAKKworCXNldAkJWCxGUF9TQ1IwCisJc2V0CQlYRENBUkUsWCsyCisJc2V0CQlYRlJBQyxYKzQKKwlzZXQJCVhGUkFDTE8sWCs4CisKKwlzZXQJCUFUQU5GLEZQX1NDUjEKKwlzZXQJCUFUQU5GSEksQVRBTkYrNAorCXNldAkJQVRBTkZMTyxBVEFORis4CisKKwlnbG9iYWwJCXNhdGFuCisjLS1FTlRSWSBQT0lOVCBGT1IgQVRBTihYKSwgSEVSRSBYIElTIEZJTklURSwgTk9OLVpFUk8sIEFORCBOT1QgTkFOJ1MKK3NhdGFuOgorCWZtb3YueAkJKCVhMCksJWZwMAkJIyBMT0FEIElOUFVUCisKKwltb3YubAkJKCVhMCksJWQxCisJbW92LncJCTQoJWEwKSwlZDEKKwlmbW92LngJCSVmcDAsWCglYTYpCisJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQorCisJY21wLmwJCSVkMSwmMHgzRkZCODAwMAkJIyB8WHwgPj0gMS8xNj8KKwliZ2UuYgkJQVRBTk9LMQorCWJyYS53CQlBVEFOU00KKworQVRBTk9LMToKKwljbXAubAkJJWQxLCYweDQwMDJGRkZGCQkjIHxYfCA8IDE2ID8KKwlibGUuYgkJQVRBTk1BSU4KKwlicmEudwkJQVRBTkJJRworCisjLS1USEUgTU9TVCBMSUtFTFkgQ0FTRSwgfFh8IElOIFsxLzE2LCAxNikuIFdFIFVTRSBUQUJMRSBURUNITklRVUUKKyMtLVRIRSBJREVBIElTIEFUQU4oWCkgPSBBVEFOKEYpICsgQVRBTiggW1gtRl0gLyBbMStYRl0gKS4KKyMtLVNPIElGIEYgSVMgQ0hPU0VOIFRPIEJFIENMT1NFIFRPIFggQU5EIEFUQU4oRikgSVMgU1RPUkVEIElOCisjLS1BIFRBQkxFLCBBTEwgV0UgTkVFRCBJUyBUTyBBUFBST1hJTUFURSBBVEFOKFUpIFdIRVJFCisjLS1VID0gKFgtRikvKDErWEYpIElTIFNNQUxMIChSRU1FTUJFUiBGIElTIENMT1NFIFRPIFgpLiBJVCBJUworIy0tVFJVRSBUSEFUIEEgRElWSURFIElTIE5PVyBORUVERUQsIEJVVCBUSEUgQVBQUk9YSU1BVElPTiBGT1IKKyMtLUFUQU4oVSkgSVMgQSBWRVJZIFNIT1JUIFBPTFlOT01JQUwgQU5EIFRIRSBJTkRFWElORyBUTworIy0tRkVUQ0ggRiBBTkQgU0FWSU5HIE9GIFJFR0lTVEVSUyBDQU4gQkUgQUxMIEhJREVEIFVOREVSIFRIRQorIy0tRElWSURFLiBJTiBUSEUgRU5EIFRISVMgTUVUSE9EIElTIE1VQ0ggRkFTVEVSIFRIQU4gQSBUUkFESVRJT05BTAorIy0tT05FLiBOT1RFIEFMU08gVEhBVCBUSEUgVFJBRElUSU9OQUwgU0NIRU1FIFRIQVQgQVBQUk9YSU1BVEUKKyMtLUFUQU4oWCkgRElSRUNUTFkgV0lMTCBORUVEIFRPIFVTRSBBIFJBVElPTkFMIEFQUFJPWElNQVRJT04KKyMtLShESVZJU0lPTiBORUVERUQpIEFOWVdBWSBCRUNBVVNFIEEgUE9MWU5PTUlBTCBBUFBST1hJTUFUSU9OCisjLS1XSUxMIElOVk9MVkUgQSBWRVJZIExPTkcgUE9MWU5PTUlBTC4KKworIy0tTk9XIFdFIFNFRSBYIEFTICstMl5LICogMS5CQkJCQkJCLi4uLkIgPC0gMS4gKyA2MyBCSVRTCisjLS1XRSBDSE9TRSBGIFRPIEJFICstMl5LICogMS5CQkJCMQorIy0tVEhBVCBJUyBJVCBNQVRDSEVTIFRIRSBFWFBPTkVOVCBBTkQgRklSU1QgNSBCSVRTIE9GIFgsIFRIRQorIy0tU0lYVEggQklUUyBJUyBTRVQgVE8gQkUgMS4gU0lOQ0UgSyA9IC00LCAtMywgLi4uLCAzLCBUSEVSRQorIy0tQVJFIE9OTFkgOCBUSU1FUyAxNiA9IDJeNyA9IDEyOCB8RnwnUy4gU0lOQ0UgQVRBTigtfEZ8KSBJUworIy0tIC1BVEFOKHxGfCksIFdFIE5FRUQgVE8gU1RPUkUgT05MWSBBVEFOKHxGfCkuCisKK0FUQU5NQUlOOgorCisJYW5kLmwJCSYweEY4MDAwMDAwLFhGUkFDKCVhNikJIyBGSVJTVCA1IEJJVFMKKwlvci5sCQkmMHgwNDAwMDAwMCxYRlJBQyglYTYpCSMgU0VUIDYtVEggQklUIFRPIDEKKwltb3YubAkJJjB4MDAwMDAwMDAsWEZSQUNMTyglYTYpICMgTE9DQVRJT04gT0YgWCBJUyBOT1cgRgorCisJZm1vdi54CQklZnAwLCVmcDEJCSMgRlAxIElTIFgKKwlmbXVsLngJCVgoJWE2KSwlZnAxCQkjIEZQMSBJUyBYKkYsIE5PVEUgVEhBVCBYKkYgPiAwCisJZnN1Yi54CQlYKCVhNiksJWZwMAkJIyBGUDAgSVMgWC1GCisJZmFkZC5zCQkmMHgzRjgwMDAwMCwlZnAxCSMgRlAxIElTIDEgKyBYKkYKKwlmZGl2LngJCSVmcDEsJWZwMAkJIyBGUDAgSVMgVSA9IChYLUYpLygxK1gqRikKKworIy0tV0hJTEUgVEhFIERJVklTSU9OIElTIFRBS0lORyBJVFMgVElNRSwgV0UgRkVUQ0ggQVRBTih8RnwpCisjLS1DUkVBVEUgQVRBTihGKSBBTkQgU1RPUkUgSVQgSU4gQVRBTkYsIEFORAorIy0tU0FWRSBSRUdJU1RFUlMgRlAyLgorCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgU0FWRSBkMiBURU1QT1JBUklMWQorCW1vdi5sCQklZDEsJWQyCQkJIyBUSEUgRVhQIEFORCAxNiBCSVRTIE9GIFgKKwlhbmQubAkJJjB4MDAwMDc4MDAsJWQxCQkjIDQgVkFSWUlORyBCSVRTIE9GIEYnUyBGUkFDVElPTgorCWFuZC5sCQkmMHg3RkZGMDAwMCwlZDIJCSMgRVhQT05FTlQgT0YgRgorCXN1Yi5sCQkmMHgzRkZCMDAwMCwlZDIJCSMgSys0CisJYXNyLmwJCSYxLCVkMgorCWFkZC5sCQklZDIsJWQxCQkJIyBUSEUgNyBCSVRTIElERU5USUZZSU5HIEYKKwlhc3IubAkJJjcsJWQxCQkJIyBJTkRFWCBJTlRPIFRCTCBPRiBBVEFOKHxGfCkKKwlsZWEJCUFUQU5UQkwoJXBjKSwlYTEKKwlhZGQubAkJJWQxLCVhMQkJCSMgQUREUkVTUyBPRiBBVEFOKHxGfCkKKwltb3YubAkJKCVhMSkrLEFUQU5GKCVhNikKKwltb3YubAkJKCVhMSkrLEFUQU5GSEkoJWE2KQorCW1vdi5sCQkoJWExKSssQVRBTkZMTyglYTYpCSMgQVRBTkYgSVMgTk9XIEFUQU4ofEZ8KQorCW1vdi5sCQlYKCVhNiksJWQxCQkjIExPQUQgU0lHTiBBTkQgRVhQTy4gQUdBSU4KKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQxCQkjIFNJR04oRikKKwlvci5sCQklZDEsQVRBTkYoJWE2KQkJIyBBVEFORiBJUyBOT1cgU0lHTihGKSpBVEFOKHxGfCkKKwltb3YubAkJKCVzcCkrLCVkMgkJIyBSRVNUT1JFIGQyCisKKyMtLVRIQVQnUyBBTEwgSSBIQVZFIFRPIERPIEZPUiBOT1csCisjLS1CVVQgQUxBUywgVEhFIERJVklERSBJUyBTVElMTCBDUkFOS0lORyEKKworIy0tVSBJTiBGUDAsIFdFIEFSRSBOT1cgUkVBRFkgVE8gQ09NUFVURSBBVEFOKFUpIEFTCisjLS1VICsgQTEqVSpWKihBMiArIFYqKEEzICsgVikpLCBWID0gVSpVCisjLS1USEUgUE9MWU5PTUlBTCBNQVkgTE9PSyBTVFJBTkdFLCBCVVQgSVMgTkVWRVJUSEVMRVNTIENPUlJFQ1QuCisjLS1USEUgTkFUVVJBTCBGT1JNIElTIFUgKyBVKlYqKEExICsgViooQTIgKyBWKkEzKSkKKyMtLVdIQVQgV0UgSEFWRSBIRVJFIElTIE1FUkVMWQlBMSA9IEEzLCBBMiA9IEExL0EzLCBBMyA9IEEyL0EzLgorIy0tVEhFIFJFQVNPTiBGT1IgVEhJUyBSRUFSUkFOR0VNRU5UIElTIFRPIE1BS0UgVEhFIElOREVQRU5ERU5UCisjLS1QQVJUUyBBMSpVKlYgQU5EIChBMiArIC4uLiBTVFVGRikgTU9SRSBMT0FELUJBTEFOQ0VECisKKwlmbW92bS54CQkmMHgwNCwtKCVzcCkJCSMgc2F2ZSBmcDIKKworCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC54CQklZnAxLCVmcDEKKwlmbW92LmQJCUFUQU5BMyglcGMpLCVmcDIKKwlmYWRkLngJCSVmcDEsJWZwMgkJIyBBMytWCisJZm11bC54CQklZnAxLCVmcDIJCSMgViooQTMrVikKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBVKlYKKwlmYWRkLmQJCUFUQU5BMiglcGMpLCVmcDIJIyBBMitWKihBMytWKQorCWZtdWwuZAkJQVRBTkExKCVwYyksJWZwMQkjIEExKlUqVgorCWZtdWwueAkJJWZwMiwlZnAxCQkjIEExKlUqViooQTIrViooQTMrVikpCisJZmFkZC54CQklZnAxLCVmcDAJCSMgQVRBTihVKSwgRlAxIFJFTEVBU0VECisKKwlmbW92bS54CQkoJXNwKSssJjB4MjAJCSMgcmVzdG9yZSBmcDIKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm5kIG1vZGUscHJlYworCWZhZGQueAkJQVRBTkYoJWE2KSwlZnAwCQkjIEFUQU4oWCkKKwlicmEJCXRfaW54MgorCitBVEFOQk9SUzoKKyMtLXxYfCBJUyBJTiBkMCBJTiBDT01QQUNUIEZPUk0uIEZQMSwgZDAgU0FWRUQuCisjLS1GUDAgSVMgWCBBTkQgfFh8IDw9IDEvMTYgT1IgfFh8ID49IDE2LgorCWNtcC5sCQklZDEsJjB4M0ZGRjgwMDAKKwliZ3QudwkJQVRBTkJJRwkJCSMgSS5FLiB8WHwgPj0gMTYKKworQVRBTlNNOgorIy0tfFh8IDw9IDEvMTYKKyMtLUlGIHxYfCA8IDJeKC00MCksIFJFVFVSTiBYIEFTIEFOU1dFUi4gT1RIRVJXSVNFLCBBUFBST1hJTUFURQorIy0tQVRBTihYKSBCWSBYICsgWCpZKihCMStZKihCMitZKihCMytZKihCNCtZKihCNStZKkI2KSkpKSkKKyMtLVdISUNIIElTIFggKyBYKlkqKCBbQjErWiooQjMrWipCNSldICsgW1kqKEIyK1oqKEI0K1oqQjYpXSApCisjLS1XSEVSRSBZID0gWCpYLCBBTkQgWiA9IFkqWS4KKworCWNtcC5sCQklZDEsJjB4M0ZENzgwMDAKKwlibHQudwkJQVRBTlRJTlkKKworIy0tQ09NUFVURSBQT0xZTk9NSUFMCisJZm1vdm0ueAkJJjB4MGMsLSglc3ApCQkjIHNhdmUgZnAyL2ZwMworCisJZm11bC54CQklZnAwLCVmcDAJCSMgRlBPIElTIFkgPSBYKlgKKworCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC54CQklZnAxLCVmcDEJCSMgRlAxIElTIFogPSBZKlkKKworCWZtb3YuZAkJQVRBTkI2KCVwYyksJWZwMgorCWZtb3YuZAkJQVRBTkI1KCVwYyksJWZwMworCisJZm11bC54CQklZnAxLCVmcDIJCSMgWipCNgorCWZtdWwueAkJJWZwMSwlZnAzCQkjIFoqQjUKKworCWZhZGQuZAkJQVRBTkI0KCVwYyksJWZwMgkjIEI0K1oqQjYKKwlmYWRkLmQJCUFUQU5CMyglcGMpLCVmcDMJIyBCMytaKkI1CisKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBaKihCNCtaKkI2KQorCWZtdWwueAkJJWZwMywlZnAxCQkjIFoqKEIzK1oqQjUpCisKKwlmYWRkLmQJCUFUQU5CMiglcGMpLCVmcDIJIyBCMitaKihCNCtaKkI2KQorCWZhZGQuZAkJQVRBTkIxKCVwYyksJWZwMQkjIEIxK1oqKEIzK1oqQjUpCisKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBZKihCMitaKihCNCtaKkI2KSkKKwlmbXVsLngJCVgoJWE2KSwlZnAwCQkjIFgqWQorCisJZmFkZC54CQklZnAyLCVmcDEJCSMgW0IxK1oqKEIzK1oqQjUpXStbWSooQjIrWiooQjQrWipCNikpXQorCisJZm11bC54CQklZnAxLCVmcDAJCSMgWCpZKihbQjErWiooQjMrWipCNSldK1tZKihCMitaKihCNCtaKkI2KSldKQorCisJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIHJlc3RvcmUgZnAyL2ZwMworCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyBybmQgbW9kZSxwcmVjCisJZmFkZC54CQlYKCVhNiksJWZwMAorCWJyYQkJdF9pbngyCisKK0FUQU5USU5ZOgorIy0tfFh8IDwgMl4oLTQwKSwgQVRBTihYKSA9IFgKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm5kIG1vZGUscHJlYworCW1vdi5iCQkmRk1PVl9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1PVkUKKwlmbW92LngJCVgoJWE2KSwlZnAwCQkjIGxhc3QgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbiBzZXQKKworCWJyYQkJdF9jYXRjaAorCitBVEFOQklHOgorIy0tSUYgfFh8ID4gMl4oMTAwKSwgUkVUVVJOCVNJR04oWCkqKFBJLzIgLSBUSU5ZKS4gT1RIRVJXSVNFLAorIy0tUkVUVVJOIFNJR04oWCkqUEkvMiArIEFUQU4oLTEvWCkuCisJY21wLmwJCSVkMSwmMHg0MDYzODAwMAorCWJndC53CQlBVEFOSFVHRQorCisjLS1BUFBST1hJTUFURSBBVEFOKC0xL1gpIEJZCisjLS1YJytYJypZKihDMStZKihDMitZKihDMytZKihDNCtZKkM1KSkpKSwgWCcgPSAtMS9YLCBZID0gWCcqWCcKKyMtLVRISVMgQ0FOIEJFIFJFLVdSSVRURU4gQVMKKyMtLVgnK1gnKlkqKCBbQzErWiooQzMrWipDNSldICsgW1kqKEMyK1oqQzQpXSApLCBaID0gWSpZLgorCisJZm1vdm0ueAkJJjB4MGMsLSglc3ApCQkjIHNhdmUgZnAyL2ZwMworCisJZm1vdi5zCQkmMHhCRjgwMDAwMCwlZnAxCSMgTE9BRCAtMQorCWZkaXYueAkJJWZwMCwlZnAxCQkjIEZQMSBJUyAtMS9YCisKKyMtLURJVklERSBJUyBTVElMTCBDUkFOS0lORworCisJZm1vdi54CQklZnAxLCVmcDAJCSMgRlAwIElTIFgnCisJZm11bC54CQklZnAwLCVmcDAJCSMgRlAwIElTIFkgPSBYJypYJworCWZtb3YueAkJJWZwMSxYKCVhNikJCSMgWCBJUyBSRUFMTFkgWCcKKworCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC54CQklZnAxLCVmcDEJCSMgRlAxIElTIFogPSBZKlkKKworCWZtb3YuZAkJQVRBTkM1KCVwYyksJWZwMworCWZtb3YuZAkJQVRBTkM0KCVwYyksJWZwMgorCisJZm11bC54CQklZnAxLCVmcDMJCSMgWipDNQorCWZtdWwueAkJJWZwMSwlZnAyCQkjIFoqQjQKKworCWZhZGQuZAkJQVRBTkMzKCVwYyksJWZwMwkjIEMzK1oqQzUKKwlmYWRkLmQJCUFUQU5DMiglcGMpLCVmcDIJIyBDMitaKkM0CisKKwlmbXVsLngJCSVmcDMsJWZwMQkJIyBaKihDMytaKkM1KSwgRlAzIFJFTEVBU0VECisJZm11bC54CQklZnAwLCVmcDIJCSMgWSooQzIrWipDNCkKKworCWZhZGQuZAkJQVRBTkMxKCVwYyksJWZwMQkjIEMxK1oqKEMzK1oqQzUpCisJZm11bC54CQlYKCVhNiksJWZwMAkJIyBYJypZCisKKwlmYWRkLngJCSVmcDIsJWZwMQkJIyBbWSooQzIrWipDNCldK1tDMStaKihDMytaKkM1KV0KKworCWZtdWwueAkJJWZwMSwlZnAwCQkjIFgnKlkqKFtCMStaKihCMytaKkI1KV0KKyMJCQkJCS4uLgkrW1kqKEIyK1oqKEI0K1oqQjYpKV0pCisJZmFkZC54CQlYKCVhNiksJWZwMAorCisJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIHJlc3RvcmUgZnAyL2ZwMworCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyBybmQgbW9kZSxwcmVjCisJdHN0LmIJCSglYTApCisJYnBsLmIJCXBvc19iaWcKKworbmVnX2JpZzoKKwlmYWRkLngJCU5QSUJZMiglcGMpLCVmcDAKKwlicmEJCXRfbWlueDIKKworcG9zX2JpZzoKKwlmYWRkLngJCVBQSUJZMiglcGMpLCVmcDAKKwlicmEJCXRfcGlueDIKKworQVRBTkhVR0U6CisjLS1SRVRVUk4gU0lHTihYKSooUElCWTIgLSBUSU5ZKSA9IFNJR04oWCkqUElCWTIgLSBTSUdOKFgpKlRJTlkKKwl0c3QuYgkJKCVhMCkKKwlicGwuYgkJcG9zX2h1Z2UKKworbmVnX2h1Z2U6CisJZm1vdi54CQlOUElCWTIoJXBjKSwlZnAwCisJZm1vdi5sCQklZDAsJWZwY3IKKwlmYWRkLngJCVBUSU5ZKCVwYyksJWZwMAorCWJyYQkJdF9taW54MgorCitwb3NfaHVnZToKKwlmbW92LngJCVBQSUJZMiglcGMpLCVmcDAKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZhZGQueAkJTlRJTlkoJXBjKSwlZnAwCisJYnJhCQl0X3BpbngyCisKKwlnbG9iYWwJCXNhdGFuZAorIy0tRU5UUlkgUE9JTlQgRk9SIEFUQU4oWCkgRk9SIERFTk9STUFMSVpFRCBBUkdVTUVOVAorc2F0YW5kOgorCWJyYQkJdF9leHRkbnJtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc2FzaW4oKTogIGNvbXB1dGVzIHRoZSBpbnZlcnNlIHNpbmUgb2YgYSBub3JtYWxpemVkIGlucHV0CQkjCisjIHNhc2luZCgpOiBjb21wdXRlcyB0aGUgaW52ZXJzZSBzaW5lIG9mIGEgZGVub3JtYWxpemVkIGlucHV0CQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSBhcmNzaW4oWCkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMyB1bHBzIGluCTY0IHNpZ25pZmljYW50IGJpdCwJIworIwlpLmUuIHdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkJIworIwlyb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljCSMKKyMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkJCQkJCQkJCSMKKyMJQVNJTgkJCQkJCQkJIworIwkxLiBJZiB8WHwgPj0gMSwgZ28gdG8gMy4JCQkJCSMKKyMJCQkJCQkJCQkjCisjCTIuICh8WHwgPCAxKSBDYWxjdWxhdGUgYXNpbihYKSBieQkJCQkjCisjCQl6IDo9IHNxcnQoIFsxLVhdWzErWF0gKQkJCQkJIworIwkJYXNpbihYKSA9IGF0YW4oIHggLyB6ICkuCQkJCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTMuIElmIHxYfCA+IDEsIGdvIHRvIDUuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJNC4gKHxYfCA9IDEpIHNnbiA6PSBzaWduKFgpLCByZXR1cm4gYXNpbihYKSA6PSBzZ24gKiBQaS8yLiBFeGl0LiMKKyMJCQkJCQkJCQkjCisjCTUuICh8WHwgPiAxKSBHZW5lcmF0ZSBhbiBpbnZhbGlkIG9wZXJhdGlvbiBieSAwICogaW5maW5pdHkuCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXNhc2luCitzYXNpbjoKKwlmbW92LngJCSglYTApLCVmcDAJCSMgTE9BRCBJTlBVVAorCisJbW92LmwJCSglYTApLCVkMQorCW1vdi53CQk0KCVhMCksJWQxCisJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQorCWNtcC5sCQklZDEsJjB4M0ZGRjgwMDAKKwliZ2UuYgkJQVNJTkJJRworCisjIFRoaXMgY2F0Y2ggaXMgYWRkZWQgaGVyZSBmb3IgdGhlICcwNjAgUVNQLiBPcmlnaW5hbGx5LCB0aGUgY2FsbCB0bworIyBzYXRhbigpIHdvdWxkIGhhbmRsZSB0aGlzIGNhc2UgYnkgY2F1c2luZyB0aGUgZXhjZXB0aW9uIHdoaWNoIHdvdWxkCisjIG5vdCBiZSBjYXVnaHQgdW50aWwgZ2VuX2V4Y2VwdCgpLiBOb3csIHdpdGggdGhlIGV4Y2VwdGlvbnMgYmVpbmcKKyMgZGV0ZWN0ZWQgaW5zaWRlIG9mIHNhdGFuKCksIHRoZSBleGNlcHRpb24gd291bGQgaGF2ZSBiZWVuIGhhbmRsZWQgdGhlcmUKKyMgaW5zdGVhZCBvZiBpbnNpZGUgc2FzaW4oKSBhcyBleHBlY3RlZC4KKwljbXAubAkJJWQxLCYweDNGRDc4MDAwCisJYmx0LncJCUFTSU5USU5ZCisKKyMtLVRISVMgSVMgVEhFIFVTVUFMIENBU0UsIHxYfCA8IDEKKyMtLUFTSU4oWCkgPSBBVEFOKCBYIC8gU1FSVCggKDEtWCkoMStYKSApICkKKworQVNJTk1BSU46CisJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAxCisJZnN1Yi54CQklZnAwLCVmcDEJCSMgMS1YCisJZm1vdm0ueAkJJjB4NCwtKCVzcCkJCSMgIHtmcDJ9CisJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAyCisJZmFkZC54CQklZnAwLCVmcDIJCSMgMStYCisJZm11bC54CQklZnAyLCVmcDEJCSMgKDErWCkoMS1YKQorCWZtb3ZtLngJCSglc3ApKywmMHgyMAkJIyAge2ZwMn0KKwlmc3FydC54CQklZnAxCQkJIyBTUVJUKFsxLVhdWzErWF0pCisJZmRpdi54CQklZnAxLCVmcDAJCSMgWC9TUVJUKFsxLVhdWzErWF0pCisJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgWC9TUVJUKC4uLikKKwlsZWEJCSglc3ApLCVhMAkJIyBwYXNzIHB0ciB0byBYL1NRUlQoLi4uKQorCWJzcgkJc2F0YW4KKwlhZGQubAkJJjB4Yywlc3AJCSMgY2xlYXIgWC9TUVJUKC4uLikgZnJvbSBzdGFjaworCWJyYQkJdF9pbngyCisKK0FTSU5CSUc6CisJZmFicy54CQklZnAwCQkJIyB8WHwKKwlmY21wLnMJCSVmcDAsJjB4M0Y4MDAwMDAKKwlmYmd0CQl0X29wZXJyCQkJIyBjYXVzZSBhbiBvcGVyciBleGNlcHRpb24KKworIy0tfFh8ID0gMSwgQVNJTihYKSA9ICstIFBJLzIuCitBU0lOT05FOgorCWZtb3YueAkJUElCWTIoJXBjKSwlZnAwCisJbW92LmwJCSglYTApLCVkMQorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEJCSMgU0lHTiBCSVQgT0YgWAorCW9yLmwJCSYweDNGODAwMDAwLCVkMQkJIyArLTEgSU4gU0dMIEZPUk1BVAorCW1vdi5sCQklZDEsLSglc3ApCQkjIHB1c2ggU0lHTihYKSBJTiBTR0wtRk1UCisJZm1vdi5sCQklZDAsJWZwY3IKKwlmbXVsLnMJCSglc3ApKywlZnAwCisJYnJhCQl0X2lueDIKKworIy0tfFh8IDwgMl4oLTQwKSwgQVRBTihYKSA9IFgKK0FTSU5USU5ZOgorCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm5kIG1vZGUscHJlYworCW1vdi5iCQkmRk1PVl9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1PVkUKKwlmbW92LngJCSglYTApLCVmcDAJCSMgbGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uCisJYnJhCQl0X2NhdGNoCisKKwlnbG9iYWwJCXNhc2luZAorIy0tQVNJTihYKSA9IFggRk9SIERFTk9STUFMSVpFRCBYCitzYXNpbmQ6CisJYnJhCQl0X2V4dGRucm0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzYWNvcygpOiAgY29tcHV0ZXMgdGhlIGludmVyc2UgY29zaW5lIG9mIGEgbm9ybWFsaXplZCBpbnB1dAkJIworIyBzYWNvc2QoKTogY29tcHV0ZXMgdGhlIGludmVyc2UgY29zaW5lIG9mIGEgZGVub3JtYWxpemVkIGlucHV0CQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlmcDAgPSBhcmNjb3MoWCkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMyB1bHBzIGluCTY0IHNpZ25pZmljYW50IGJpdCwJIworIwlpLmUuIHdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkJIworIwlyb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljCSMKKyMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwkJCQkJCQkJCSMKKyMJQUNPUwkJCQkJCQkJIworIwkxLiBJZiB8WHwgPj0gMSwgZ28gdG8gMy4JCQkJCSMKKyMJCQkJCQkJCQkjCisjCTIuICh8WHwgPCAxKSBDYWxjdWxhdGUgYWNvcyhYKSBieQkJCQkjCisjCQl6IDo9ICgxLVgpIC8gKDErWCkJCQkJCSMKKyMJCWFjb3MoWCkgPSAyICogYXRhbiggc3FydCh6KSApLgkJCQkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwkzLiBJZiB8WHwgPiAxLCBnbyB0byA1LgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTQuICh8WHwgPSAxKSBJZiBYID4gMCwgcmV0dXJuIDAuIE90aGVyd2lzZSwgcmV0dXJuIFBpLiBFeGl0LgkjCisjCQkJCQkJCQkJIworIwk1LiAofFh8ID4gMSkgR2VuZXJhdGUgYW4gaW52YWxpZCBvcGVyYXRpb24gYnkgMCAqIGluZmluaXR5LgkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzYWNvcworc2Fjb3M6CisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIExPQUQgSU5QVVQKKworCW1vdi5sCQkoJWEwKSwlZDEJCSMgcGFjayBleHAgdy8gdXBwZXIgMTYgZnJhY3Rpb24KKwltb3YudwkJNCglYTApLCVkMQorCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEKKwljbXAubAkJJWQxLCYweDNGRkY4MDAwCisJYmdlLmIJCUFDT1NCSUcKKworIy0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDwgMQorIy0tQUNPUyhYKSA9IDIgKiBBVEFOKAlTUVJUKCAoMS1YKS8oMStYKSApICkKKworQUNPU01BSU46CisJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAxCisJZmFkZC54CQklZnAwLCVmcDEJCSMgMStYCisJZm5lZy54CQklZnAwCQkJIyAtWAorCWZhZGQucwkJJjB4M0Y4MDAwMDAsJWZwMAkjIDEtWAorCWZkaXYueAkJJWZwMSwlZnAwCQkjICgxLVgpLygxK1gpCisJZnNxcnQueAkJJWZwMAkJCSMgU1FSVCgoMS1YKS8oMStYKSkKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIG9yaWdpbmFsIHVzZXJzIGZwY3IKKwljbHIubAkJJWQwCisJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgU1FSVCguLi4pIHRvIHN0YWNrCisJbGVhCQkoJXNwKSwlYTAJCSMgcGFzcyBwdHIgdG8gc3FydAorCWJzcgkJc2F0YW4JCQkjIEFUQU4oU1FSVChbMS1YXS9bMStYXSkpCisJYWRkLmwJCSYweGMsJXNwCQkjIGNsZWFyIFNRUlQoLi4uKSBmcm9tIHN0YWNrCisKKwlmbW92LmwJCSglc3ApKywlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIHByZWMsbW9kZQorCWZhZGQueAkJJWZwMCwlZnAwCQkjIDIgKiBBVEFOKCBTVFVGRiApCisJYnJhCQl0X3BpbngyCisKK0FDT1NCSUc6CisJZmFicy54CQklZnAwCisJZmNtcC5zCQklZnAwLCYweDNGODAwMDAwCisJZmJndAkJdF9vcGVycgkJCSMgY2F1c2UgYW4gb3BlcnIgZXhjZXB0aW9uCisKKyMtLXxYfCA9IDEsIEFDT1MoWCkgPSAwIE9SIFBJCisJdHN0LmIJCSglYTApCQkJIyBpcyBYIHBvc2l0aXZlIG9yIG5lZ2F0aXZlPworCWJwbC5iCQlBQ09TUDEKKworIy0tWCA9IC0xCisjUmV0dXJucyBQSSBhbmQgaW5leGFjdCBleGNlcHRpb24KK0FDT1NNMToKKwlmbW92LngJCVBJKCVwYyksJWZwMAkJIyBsb2FkIFBJCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgbG9hZCByb3VuZCBtb2RlLHByZWMKKwlmYWRkLnMJCSYweDAwODAwMDAwLCVmcDAJIyBhZGQgYSBzbWFsbCB2YWx1ZQorCWJyYQkJdF9waW54MgorCitBQ09TUDE6CisJYnJhCQlsZF9wemVybwkJIyBhbnN3ZXIgaXMgcG9zaXRpdmUgemVybworCisJZ2xvYmFsCQlzYWNvc2QKKyMtLUFDT1MoWCkgPSBQSS8yIEZPUiBERU5PUk1BTElaRUQgWAorc2Fjb3NkOgorCWZtb3YubAkJJWQwLCVmcGNyCQkjIGxvYWQgdXNlcidzIHJuZCBtb2RlL3ByZWMKKwlmbW92LngJCVBJQlkyKCVwYyksJWZwMAorCWJyYQkJdF9waW54MgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNldG94KCk6ICAgIGNvbXB1dGVzIHRoZSBleHBvbmVudGlhbCBmb3IgYSBub3JtYWxpemVkIGlucHV0CQkjCisjIHNldG94ZCgpOiAgIGNvbXB1dGVzIHRoZSBleHBvbmVudGlhbCBmb3IgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJCSMKKyMgc2V0b3htMSgpOiAgY29tcHV0ZXMgdGhlIGV4cG9uZW50aWFsIG1pbnVzIDEgZm9yIGEgbm9ybWFsaXplZCBpbnB1dAkjCisjIHNldG94bTFkKCk6IGNvbXB1dGVzIHRoZSBleHBvbmVudGlhbCBtaW51cyAxIGZvciBhIGRlbm9ybWFsaXplZCBpbnB1dAkjCisjCQkJCQkJCQkJIworIyBJTlBVVAkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlmcDAgPSBleHAoWCkgb3IgZXhwKFgpLTEJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCVRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDAuODUgdWxwcyBpbiA2NCBzaWduaWZpY2FudCBiaXQsCSMKKyMJaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5ICMKKyMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCisjCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNIGFuZCBJTVBMRU1FTlRBVElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJCQkJCQkJCQkjCisjCXNldG94ZAkJCQkJCQkJIworIwktLS0tLS0JCQkJCQkJCSMKKyMJU3RlcCAxLglTZXQgYW5zIDo9IDEuMAkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgMi4JUmV0dXJuCWFucyA6PSBhbnMgKyBzaWduKFgpKjJeKC0xMjYpLiBFeGl0LgkJIworIwlOb3RlczoJVGhpcyB3aWxsIGFsd2F5cyBnZW5lcmF0ZSBvbmUgZXhjZXB0aW9uIC0tIGluZXhhY3QuCSMKKyMJCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIwlzZXRveAkJCQkJCQkJIworIwktLS0tLQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCAxLglGaWx0ZXIgb3V0IGV4dHJlbWUgY2FzZXMgb2YgaW5wdXQgYXJndW1lbnQuCQkjCisjCQkxLjEJSWYgfFh8ID49IDJeKC02NSksIGdvIHRvIFN0ZXAgMS4zLgkJIworIwkJMS4yCUdvIHRvIFN0ZXAgNy4JCQkJCSMKKyMJCTEuMwlJZiB8WHwgPCAxNjM4MCBsb2coMiksIGdvIHRvIFN0ZXAgMi4JCSMKKyMJCTEuNAlHbyB0byBTdGVwIDguCQkJCQkjCisjCU5vdGVzOglUaGUgdXN1YWwgY2FzZSBzaG91bGQgdGFrZSB0aGUgYnJhbmNoZXMgMS4xIC0+IDEuMyAtPiAyLiMKKyMJCVRvIGF2b2lkIHRoZSB1c2Ugb2YgZmxvYXRpbmctcG9pbnQgY29tcGFyaXNvbnMsIGEJIworIwkJY29tcGFjdCByZXByZXNlbnRhdGlvbiBvZiB8WHwgaXMgdXNlZC4gVGhpcyBmb3JtYXQgaXMgYQkjCisjCQkzMi1iaXQgaW50ZWdlciwgdGhlIHVwcGVyIChtb3JlIHNpZ25pZmljYW50KSAxNiBiaXRzCSMKKyMJCWFyZSB0aGUgc2lnbiBhbmQgYmlhc2VkIGV4cG9uZW50IGZpZWxkIG9mIHxYfDsgdGhlCSMKKyMJCWxvd2VyIDE2IGJpdHMgYXJlIHRoZSAxNiBtb3N0IHNpZ25pZmljYW50IGZyYWN0aW9uCSMKKyMJCShpbmNsdWRpbmcgdGhlIGV4cGxpY2l0IGJpdCkgYml0cyBvZiB8WHwuIENvbnNlcXVlbnRseSwJIworIwkJdGhlIGNvbXBhcmlzb25zIGluIFN0ZXBzIDEuMSBhbmQgMS4zIGNhbiBiZSBwZXJmb3JtZWQJIworIwkJYnkgaW50ZWdlciBjb21wYXJpc29uLiBOb3RlIGFsc28gdGhhdCB0aGUgY29uc3RhbnQJIworIwkJMTYzODAgbG9nKDIpIHVzZWQgaW4gU3RlcCAxLjMgaXMgYWxzbyBpbiB0aGUgY29tcGFjdAkjCisjCQlmb3JtLiBUaHVzIHRha2luZyB0aGUgYnJhbmNoIHRvIFN0ZXAgMiBndWFyYW50ZWVzCSMKKyMJCXxYfCA8IDE2MzgwIGxvZygyKS4gVGhlcmUgaXMgbm8gaGFybSB0byBoYXZlIGEgc21hbGwJIworIwkJbnVtYmVyIG9mIGNhc2VzIHdoZXJlIHxYfCBpcyBsZXNzIHRoYW4sCWJ1dCBjbG9zZSB0bywJIworIwkJMTYzODAgbG9nKDIpIGFuZCB0aGUgYnJhbmNoIHRvIFN0ZXAgOSBpcyB0YWtlbi4JCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgMi4JQ2FsY3VsYXRlIE4gPSByb3VuZC10by1uZWFyZXN0LWludCggWCAqIDY0L2xvZzIgKS4JIworIwkJMi4xCVNldCBBZGpGbGFnIDo9IDAgKGluZGljYXRlcyB0aGUgYnJhbmNoIDEuMyAtPiAyICMKKyMJCQl3YXMgdGFrZW4pCQkJCQkjCisjCQkyLjIJTiA6PSByb3VuZC10by1uZWFyZXN0LWludGVnZXIoIFggKiA2NC9sb2cyICkuCSMKKyMJCTIuMwlDYWxjdWxhdGUJSiA9IE4gbW9kIDY0OyBzbyBKID0gMCwxLDIsLi4uLCAjCisjCQkJb3IgNjMuCQkJCQkJIworIwkJMi40CUNhbGN1bGF0ZQlNID0gKE4gLSBKKS82NDsgc28gTiA9IDY0TSArIEouCSMKKyMJCTIuNQlDYWxjdWxhdGUgdGhlIGFkZHJlc3Mgb2YgdGhlIHN0b3JlZCB2YWx1ZSBvZgkjCisjCQkJMl4oSi82NCkuCQkJCQkjCisjCQkyLjYJQ3JlYXRlIHRoZSB2YWx1ZSBTY2FsZSA9IDJeTS4JCQkjCisjCU5vdGVzOglUaGUgY2FsY3VsYXRpb24gaW4gMi4yIGlzIHJlYWxseSBwZXJmb3JtZWQgYnkJCSMKKyMJCQlaIDo9IFggKiBjb25zdGFudAkJCQkjCisjCQkJTiA6PSByb3VuZC10by1uZWFyZXN0LWludGVnZXIoWikJCSMKKyMJCXdoZXJlCQkJCQkJCSMKKyMJCQljb25zdGFudCA6PSBzaW5nbGUtcHJlY2lzaW9uKCA2NC9sb2cgMiApLgkjCisjCQkJCQkJCQkJIworIwkJVXNpbmcgYSBzaW5nbGUtcHJlY2lzaW9uIGNvbnN0YW50IGF2b2lkcyBtZW1vcnkJCSMKKyMJCWFjY2Vzcy4gQW5vdGhlciBlZmZlY3Qgb2YgdXNpbmcgYSBzaW5nbGUtcHJlY2lzaW9uCSMKKyMJCSJjb25zdGFudCIgaXMgdGhhdCB0aGUgY2FsY3VsYXRlZCB2YWx1ZSBaIGlzCQkjCisjCQkJCQkJCQkJIworIwkJCVogPSBYKig2NC9sb2cyKSooMStlcHMpLCB8ZXBzfCA8PSAyXigtMjQpLgkjCisjCQkJCQkJCQkJIworIwkJVGhpcyBlcnJvciBoYXMgdG8gYmUgY29uc2lkZXJlZCBsYXRlciBpbiBTdGVwcyAzIGFuZCA0LgkjCisjCQkJCQkJCQkJIworIwlTdGVwIDMuCUNhbGN1bGF0ZSBYIC0gTipsb2cyLzY0LgkJCQkjCisjCQkzLjEJUiA6PSBYICsgTipMMSwJCQkJCSMKKyMJCQkJd2hlcmUgTDEgOj0gc2luZ2xlLXByZWNpc2lvbigtbG9nMi82NCkuCSMKKyMJCTMuMglSIDo9IFIgKyBOKkwyLAkJCQkJIworIwkJCQlMMiA6PSBleHRlbmRlZC1wcmVjaXNpb24oLWxvZzIvNjQgLSBMMSkuIworIwlOb3RlczoJYSkgVGhlIHdheSBMMSBhbmQgTDIgYXJlIGNob3NlbiBlbnN1cmVzIEwxK0wyCQkjCisjCQlhcHByb3hpbWF0ZSB0aGUgdmFsdWUgLWxvZzIvNjQgdG8gODggYml0cyBvZiBhY2N1cmFjeS4JIworIwkJYikgTipMMSBpcyBleGFjdCBiZWNhdXNlIE4gaXMgbm8gbG9uZ2VyIHRoYW4gMjIgYml0cwkjCisjCQlhbmQgTDEgaXMgbm8gbG9uZ2VyIHRoYW4gMjQgYml0cy4JCQkjCisjCQljKSBUaGUgY2FsY3VsYXRpb24gWCtOKkwxIGlzIGFsc28gZXhhY3QgZHVlIHRvCQkjCisjCQljYW5jZWxsYXRpb24uIFRodXMsIFIgaXMgcHJhY3RpY2FsbHkgWCtOKEwxK0wyKSB0byBmdWxsCSMKKyMJCTY0IGJpdHMuCQkJCQkJIworIwkJZCkgSXQgaXMgaW1wb3J0YW50IHRvIGVzdGltYXRlIGhvdyBsYXJnZSBjYW4gfFJ8IGJlCSMKKyMJCWFmdGVyIFN0ZXAgMy4yLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCQlOID0gcm5kLXRvLWludCggWCo2NC9sb2cyICgxK2VwcykgKSwgfGVwc3w8PTJeKC0yNCkJIworIwkJWCo2NC9sb2cyICgxK2VwcykJPQlOICsgZiwJfGZ8IDw9IDAuNQkjCisjCQlYKjY0L2xvZzIgLSBOCT0JZiAtIGVwcypYIDY0L2xvZzIJCSMKKyMJCVggLSBOKmxvZzIvNjQJPQlmKmxvZzIvNjQgLSBlcHMqWAkJIworIwkJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCQlOb3cgfFh8IDw9IDE2NDQ2IGxvZzIsIHRodXMJCQkJIworIwkJCQkJCQkJCSMKKyMJCQl8WCAtIE4qbG9nMi82NHwgPD0gKDAuNSArIDE2NDQ2LzJeKDE4KSkqbG9nMi82NAkjCisjCQkJCQk8PSAwLjU3IGxvZzIvNjQuCQkjCisjCQkgVGhpcyBib3VuZCB3aWxsIGJlIHVzZWQgaW4gU3RlcCA0LgkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgNC4JQXBwcm94aW1hdGUgZXhwKFIpLTEgYnkgYSBwb2x5bm9taWFsCQkJIworIwkJcCA9IFIgKyBSKlIqKEExICsgUiooQTIgKyBSKihBMyArIFIqKEE0ICsgUipBNSkpKSkJIworIwlOb3RlczoJYSkgSW4gb3JkZXIgdG8gcmVkdWNlIG1lbW9yeSBhY2Nlc3MsIHRoZSBjb2VmZmljaWVudHMJIworIwkJYXJlIG1hZGUgYXMgInNob3J0IiBhcyBwb3NzaWJsZTogQTEgKHdoaWNoIGlzIDEvMiksIEE0CSMKKyMJCWFuZCBBNSBhcmUgc2luZ2xlIHByZWNpc2lvbjsgQTIgYW5kIEEzIGFyZSBkb3VibGUJIworIwkJcHJlY2lzaW9uLgkJCQkJCSMKKyMJCWIpIEV2ZW4gd2l0aCB0aGUgcmVzdHJpY3Rpb25zIGFib3ZlLAkJCSMKKyMJCSAgIHxwIC0gKGV4cChSKS0xKXwgPCAyXigtNjguOCkgZm9yIGFsbCB8UnwgPD0gMC4wMDYyLgkjCisjCQlOb3RlIHRoYXQgMC4wMDYyIGlzIHNsaWdodGx5IGJpZ2dlciB0aGFuIDAuNTcgbG9nMi82NC4JIworIwkJYykgVG8gZnVsbHkgdXRpbGl6ZSB0aGUgcGlwZWxpbmUsIHAgaXMgc2VwYXJhdGVkIGludG8JIworIwkJdHdvIGluZGVwZW5kZW50IHBpZWNlcyBvZiByb3VnaGx5IGVxdWFsIGNvbXBsZXhpdGllcwkjCisjCQkJcCA9IFsgUiArIFIqUyooQTIgKyBTKkE0KSBdCSsJCSMKKyMJCQkJWyBTKihBMSArIFMqKEEzICsgUypBNSkpIF0JCSMKKyMJCXdoZXJlIFMgPSBSKlIuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA1LglDb21wdXRlIDJeKEovNjQpKmV4cChSKSA9IDJeKEovNjQpKigxK3ApIGJ5CQkjCisjCQkJCWFucyA6PSBUICsgKCBUKnAgKyB0KQkJCSMKKyMJCXdoZXJlIFQgYW5kIHQgYXJlIHRoZSBzdG9yZWQgdmFsdWVzIGZvciAyXihKLzY0KS4JIworIwlOb3RlczoJMl4oSi82NCkgaXMgc3RvcmVkIGFzIFQgYW5kIHQgd2hlcmUgVCt0IGFwcHJveGltYXRlcwkjCisjCQkyXihKLzY0KSB0byByb3VnaGx5IDg1IGJpdHM7IFQgaXMgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uCSMKKyMJCWFuZCB0IGlzIGluIHNpbmdsZSBwcmVjaXNpb24uIE5vdGUgYWxzbyB0aGF0IFQgaXMJIworIwkJcm91bmRlZCB0byA2MiBiaXRzIHNvIHRoYXQgdGhlIGxhc3QgdHdvIGJpdHMgb2YgVCBhcmUJIworIwkJemVyby4gVGhlIHJlYXNvbiBmb3Igc3VjaCBhIHNwZWNpYWwgZm9ybSBpcyB0aGF0IFQtMSwJIworIwkJVC0yLCBhbmQgVC04IHdpbGwgYWxsIGJlIGV4YWN0IC0tLSBhIHByb3BlcnR5IHRoYXQgd2lsbAkjCisjCQlnaXZlIG11Y2ggbW9yZSBhY2N1cmF0ZSBjb21wdXRhdGlvbiBvZiB0aGUgZnVuY3Rpb24JIworIwkJRVhQTTEuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgNi4JUmVjb25zdHJ1Y3Rpb24gb2YgZXhwKFgpCQkJCSMKKyMJCQlleHAoWCkgPSAyXk0gKiAyXihKLzY0KSAqIGV4cChSKS4JCSMKKyMJCTYuMQlJZiBBZGpGbGFnID0gMCwgZ28gdG8gNi4zCQkJIworIwkJNi4yCWFucyA6PSBhbnMgKiBBZGpTY2FsZQkJCQkjCisjCQk2LjMJUmVzdG9yZSB0aGUgdXNlciBGUENSCQkJCSMKKyMJCTYuNAlSZXR1cm4gYW5zIDo9IGFucyAqIFNjYWxlLiBFeGl0LgkJIworIwlOb3RlczoJSWYgQWRqRmxhZyA9IDAsIHdlIGhhdmUgWCA9IE1sb2cyICsgSmxvZzIvNjQgKyBSLAkjCisjCQl8TXwgPD0gMTYzODAsIGFuZCBTY2FsZSA9IDJeTS4gTW9yZW92ZXIsIGV4cChYKSB3aWxsCSMKKyMJCW5laXRoZXIgb3ZlcmZsb3cgbm9yIHVuZGVyZmxvdy4gSWYgQWRqRmxhZyA9IDEsIHRoYXQJIworIwkJbWVhbnMgdGhhdAkJCQkJCSMKKyMJCQlYID0gKE0xK00pbG9nMiArIEpsb2cyLzY0ICsgUiwgfE0xK018ID49IDE2MzgwLgkjCisjCQlIZW5jZSwgZXhwKFgpIG1heSBvdmVyZmxvdyBvciB1bmRlcmZsb3cgb3IgbmVpdGhlci4JIworIwkJV2hlbiB0aGF0IGlzIHRoZSBjYXNlLCBBZGpTY2FsZSA9IDJeKE0xKSB3aGVyZSBNMSBpcwkjCisjCQlhcHByb3hpbWF0ZWx5IE0uIFRodXMgNi4yIHdpbGwgbmV2ZXIgY2F1c2UJCSMKKyMJCW92ZXIvdW5kZXJmbG93LiBQb3NzaWJsZSBleGNlcHRpb24gaW4gNi40IGlzIG92ZXJmbG93CSMKKyMJCW9yIHVuZGVyZmxvdy4gVGhlIGluZXhhY3QgZXhjZXB0aW9uIGlzIG5vdCBnZW5lcmF0ZWQgaW4JIworIwkJNi40LiBBbHRob3VnaCBvbmUgY2FuIGFyZ3VlIHRoYXQgdGhlIGluZXhhY3QgZmxhZwkjCisjCQlzaG91bGQgYWx3YXlzIGJlIHJhaXNlZCwgdG8gc2ltdWxhdGUgdGhhdCBleGNlcHRpb24JIworIwkJY29zdCB0byBtdWNoIHRoYW4gdGhlIGZsYWcgaXMgd29ydGggaW4gcHJhY3RpY2FsIHVzZXMuCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgNy4JUmV0dXJuIDEgKyBYLgkJCQkJCSMKKyMJCTcuMQlhbnMgOj0gWAkJCQkJIworIwkJNy4yCVJlc3RvcmUgdXNlciBGUENSLgkJCQkjCisjCQk3LjMJUmV0dXJuIGFucyA6PSAxICsgYW5zLiBFeGl0CQkJIworIwlOb3RlczoJRm9yIG5vbi16ZXJvIFgsIHRoZSBpbmV4YWN0IGV4Y2VwdGlvbiB3aWxsIGFsd2F5cyBiZQkjCisjCQlyYWlzZWQgYnkgNy4zLiBUaGF0IGlzIHRoZSBvbmx5IGV4Y2VwdGlvbiByYWlzZWQgYnkgNy4zLiMKKyMJCU5vdGUgYWxzbyB0aGF0IHdlIHVzZSB0aGUgRk1PVkVNIGluc3RydWN0aW9uIHRvIG1vdmUgWAkjCisjCQlpbiBTdGVwIDcuMSB0byBhdm9pZCB1bm5lY2Vzc2FyeSB0cmFwcGluZy4gKEFsdGhvdWdoCSMKKyMJCXRoZSBGTU9WRU0gbWF5IG5vdCBzZWVtIHJlbGV2YW50IHNpbmNlIFggaXMgbm9ybWFsaXplZCwJIworIwkJdGhlIHByZWNhdXRpb24gd2lsbCBiZSB1c2VmdWwgaW4gdGhlIGxpYnJhcnkgdmVyc2lvbiBvZgkjCisjCQl0aGlzIGNvZGUgd2hlcmUgdGhlIHNlcGFyYXRlIGVudHJ5IGZvciBkZW5vcm1hbGl6ZWQJIworIwkJaW5wdXRzIHdpbGwgYmUgZG9uZSBhd2F5IHdpdGguKQkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDguCUhhbmRsZSBleHAoWCkgd2hlcmUgfFh8ID49IDE2MzgwbG9nMi4JCQkjCisjCQk4LjEJSWYgfFh8ID4gMTY0ODAgbG9nMiwgZ28gdG8gU3RlcCA5LgkJIworIwkJKG1pbWljIDIuMiAtIDIuNikJCQkJCSMKKyMJCTguMglOIDo9IHJvdW5kLXRvLWludGVnZXIoIFggKiA2NC9sb2cyICkJCSMKKyMJCTguMwlDYWxjdWxhdGUgSiA9IE4gbW9kIDY0LCBKID0gMCwxLC4uLiw2MwkJIworIwkJOC40CUsgOj0gKE4tSikvNjQsIE0xIDo9IHRydW5jYXRlKEsvMiksIE0gPSBLLU0xLAkjCisjCQkJQWRqRmxhZyA6PSAxLgkJCQkJIworIwkJOC41CUNhbGN1bGF0ZSB0aGUgYWRkcmVzcyBvZiB0aGUgc3RvcmVkIHZhbHVlCSMKKyMJCQkyXihKLzY0KS4JCQkJCSMKKyMJCTguNglDcmVhdGUgdGhlIHZhbHVlcyBTY2FsZSA9IDJeTSwgQWRqU2NhbGUgPSAyXk0xLgkjCisjCQk4LjcJR28gdG8gU3RlcCAzLgkJCQkJIworIwlOb3RlczoJUmVmZXIgdG8gbm90ZXMgZm9yIDIuMiAtIDIuNi4JCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA5LglIYW5kbGUgZXhwKFgpLCB8WHwgPiAxNjQ4MCBsb2cyLgkJCSMKKyMJCTkuMQlJZiBYIDwgMCwgZ28gdG8gOS4zCQkJCSMKKyMJCTkuMglhbnMgOj0gSHVnZSwgZ28gdG8gOS40CQkJCSMKKyMJCTkuMwlhbnMgOj0gVGlueS4JCQkJCSMKKyMJCTkuNAlSZXN0b3JlIHVzZXIgRlBDUi4JCQkJIworIwkJOS41CVJldHVybiBhbnMgOj0gYW5zICogYW5zLiBFeGl0LgkJCSMKKyMJTm90ZXM6CUV4cChYKSB3aWxsIHN1cmVseSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIGRlcGVuZGluZyBvbgkjCisjCQlYJ3Mgc2lnbi4gIkh1Z2UiIGFuZCAiVGlueSIgYXJlIHJlc3BlY3RpdmVseSBsYXJnZS90aW55CSMKKyMJCWV4dGVuZGVkLXByZWNpc2lvbiBudW1iZXJzIHdob3NlIHNxdWFyZSBvdmVyL3VuZGVyZmxvdwkjCisjCQl3aXRoIGFuIGluZXhhY3QgcmVzdWx0LiBUaHVzLCA5LjUgYWx3YXlzIHJhaXNlcyB0aGUJIworIwkJaW5leGFjdCB0b2dldGhlciB3aXRoIGVpdGhlciBvdmVyZmxvdyBvciB1bmRlcmZsb3cuCSMKKyMJCQkJCQkJCQkjCisjCXNldG94bTFkCQkJCQkJCSMKKyMJLS0tLS0tLS0JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCAxLglTZXQgYW5zIDo9IDAJCQkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDIuCVJldHVybglhbnMgOj0gWCArIGFucy4gRXhpdC4JCQkJIworIwlOb3RlczoJVGhpcyB3aWxsIHJldHVybiBYIHdpdGggdGhlIGFwcHJvcHJpYXRlIHJvdW5kaW5nCSMKKyMJCSBwcmVjaXNpb24gcHJlc2NyaWJlZCBieSB0aGUgdXNlciBGUENSLgkJCSMKKyMJCQkJCQkJCQkjCisjCXNldG94bTEJCQkJCQkJCSMKKyMJLS0tLS0tLQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCAxLglDaGVjayB8WHwJCQkJCQkjCisjCQkxLjEJSWYgfFh8ID49IDEvNCwgZ28gdG8gU3RlcCAxLjMuCQkJIworIwkJMS4yCUdvIHRvIFN0ZXAgNy4JCQkJCSMKKyMJCTEuMwlJZiB8WHwgPCA3MCBsb2coMiksIGdvIHRvIFN0ZXAgMi4JCSMKKyMJCTEuNAlHbyB0byBTdGVwIDEwLgkJCQkJIworIwlOb3RlczoJVGhlIHVzdWFsIGNhc2Ugc2hvdWxkIHRha2UgdGhlIGJyYW5jaGVzIDEuMSAtPiAxLjMgLT4gMi4jCisjCQlIb3dldmVyLCBpdCBpcyBjb25jZWl2YWJsZSB8WHwgY2FuIGJlIHNtYWxsIHZlcnkgb2Z0ZW4JIworIwkJYmVjYXVzZSBFWFBNMSBpcyBpbnRlbmRlZCB0byBldmFsdWF0ZSBleHAoWCktMQkJIworIwkJYWNjdXJhdGVseSB3aGVuIHxYfCBpcyBzbWFsbC4gRm9yIGZ1cnRoZXIgZGV0YWlscyBvbgkjCisjCQl0aGUgY29tcGFyaXNvbnMsIHNlZSB0aGUgbm90ZXMgb24gU3RlcCAxIG9mIHNldG94LgkjCisjCQkJCQkJCQkJIworIwlTdGVwIDIuCUNhbGN1bGF0ZSBOID0gcm91bmQtdG8tbmVhcmVzdC1pbnQoIFggKiA2NC9sb2cyICkuCSMKKyMJCTIuMQlOIDo9IHJvdW5kLXRvLW5lYXJlc3QtaW50ZWdlciggWCAqIDY0L2xvZzIgKS4JIworIwkJMi4yCUNhbGN1bGF0ZQlKID0gTiBtb2QgNjQ7IHNvIEogPSAwLDEsMiwuLi4sICMKKyMJCQlvciA2My4JCQkJCQkjCisjCQkyLjMJQ2FsY3VsYXRlCU0gPSAoTiAtIEopLzY0OyBzbyBOID0gNjRNICsgSi4JIworIwkJMi40CUNhbGN1bGF0ZSB0aGUgYWRkcmVzcyBvZiB0aGUgc3RvcmVkIHZhbHVlIG9mCSMKKyMJCQkyXihKLzY0KS4JCQkJCSMKKyMJCTIuNQlDcmVhdGUgdGhlIHZhbHVlcyBTYyA9IDJeTSBhbmQJCQkjCisjCQkJT25lYnlTYyA6PSAtMl4oLU0pLgkJCQkjCisjCU5vdGVzOglTZWUgdGhlIG5vdGVzIG9uIFN0ZXAgMiBvZiBzZXRveC4JCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDMuCUNhbGN1bGF0ZSBYIC0gTipsb2cyLzY0LgkJCQkjCisjCQkzLjEJUiA6PSBYICsgTipMMSwJCQkJCSMKKyMJCQkJd2hlcmUgTDEgOj0gc2luZ2xlLXByZWNpc2lvbigtbG9nMi82NCkuCSMKKyMJCTMuMglSIDo9IFIgKyBOKkwyLAkJCQkJIworIwkJCQlMMiA6PSBleHRlbmRlZC1wcmVjaXNpb24oLWxvZzIvNjQgLSBMMSkuIworIwlOb3RlczoJQXBwbHlpbmcgdGhlIGFuYWx5c2lzIG9mIFN0ZXAgMyBvZiBzZXRveCBpbiB0aGlzIGNhc2UJIworIwkJc2hvd3MgdGhhdCB8UnwgPD0gMC4wMDU1IChub3RlIHRoYXQgfFh8IDw9IDcwIGxvZzIgaW4JIworIwkJdGhpcyBjYXNlKS4JCQkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDQuCUFwcHJveGltYXRlIGV4cChSKS0xIGJ5IGEgcG9seW5vbWlhbAkJCSMKKyMJCQlwID0gUitSKlIqKEExK1IqKEEyK1IqKEEzK1IqKEE0K1IqKEE1K1IqQTYpKSkpKQkjCisjCU5vdGVzOglhKSBJbiBvcmRlciB0byByZWR1Y2UgbWVtb3J5IGFjY2VzcywgdGhlIGNvZWZmaWNpZW50cwkjCisjCQlhcmUgbWFkZSBhcyAic2hvcnQiIGFzIHBvc3NpYmxlOiBBMSAod2hpY2ggaXMgMS8yKSwgQTUJIworIwkJYW5kIEE2IGFyZSBzaW5nbGUgcHJlY2lzaW9uOyBBMiwgQTMgYW5kIEE0IGFyZSBkb3VibGUJIworIwkJcHJlY2lzaW9uLgkJCQkJCSMKKyMJCWIpIEV2ZW4gd2l0aCB0aGUgcmVzdHJpY3Rpb24gYWJvdmUsCQkJIworIwkJCXxwIC0gKGV4cChSKS0xKXwgPAl8UnwgKiAyXigtNzIuNykJCSMKKyMJCWZvciBhbGwgfFJ8IDw9IDAuMDA1NS4JCQkJCSMKKyMJCWMpIFRvIGZ1bGx5IHV0aWxpemUgdGhlIHBpcGVsaW5lLCBwIGlzIHNlcGFyYXRlZCBpbnRvCSMKKyMJCXR3byBpbmRlcGVuZGVudCBwaWVjZXMgb2Ygcm91Z2hseSBlcXVhbCBjb21wbGV4aXR5CSMKKyMJCQlwID0gWyBSKlMqKEEyICsgUyooQTQgKyBTKkE2KSkgXQkrCSMKKyMJCQkJWyBSICsgUyooQTEgKyBTKihBMyArIFMqQTUpKSBdCQkjCisjCQl3aGVyZSBTID0gUipSLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgNS4JQ29tcHV0ZSAyXihKLzY0KSpwIGJ5CQkJCQkjCisjCQkJCXAgOj0gVCpwCQkJCSMKKyMJCXdoZXJlIFQgYW5kIHQgYXJlIHRoZSBzdG9yZWQgdmFsdWVzIGZvciAyXihKLzY0KS4JIworIwlOb3RlczoJMl4oSi82NCkgaXMgc3RvcmVkIGFzIFQgYW5kIHQgd2hlcmUgVCt0IGFwcHJveGltYXRlcwkjCisjCQkyXihKLzY0KSB0byByb3VnaGx5IDg1IGJpdHM7IFQgaXMgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uCSMKKyMJCWFuZCB0IGlzIGluIHNpbmdsZSBwcmVjaXNpb24uIE5vdGUgYWxzbyB0aGF0IFQgaXMJIworIwkJcm91bmRlZCB0byA2MiBiaXRzIHNvIHRoYXQgdGhlIGxhc3QgdHdvIGJpdHMgb2YgVCBhcmUJIworIwkJemVyby4gVGhlIHJlYXNvbiBmb3Igc3VjaCBhIHNwZWNpYWwgZm9ybSBpcyB0aGF0IFQtMSwJIworIwkJVC0yLCBhbmQgVC04IHdpbGwgYWxsIGJlIGV4YWN0IC0tLSBhIHByb3BlcnR5IHRoYXQgd2lsbAkjCisjCQliZSBleHBsb2l0ZWQgaW4gU3RlcCA2IGJlbG93LiBUaGUgdG90YWwgcmVsYXRpdmUgZXJyb3IJIworIwkJaW4gcCBpcyBubyBiaWdnZXIgdGhhbiAyXigtNjcuNykgY29tcGFyZWQgdG8gdGhlIGZpbmFsCSMKKyMJCXJlc3VsdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA2LglSZWNvbnN0cnVjdGlvbiBvZiBleHAoWCktMQkJCQkjCisjCQkJZXhwKFgpLTEgPSAyXk0gKiAoIDJeKEovNjQpICsgcCAtIDJeKC1NKSApLgkjCisjCQk2LjEJSWYgTSA8PSA2MywgZ28gdG8gU3RlcCA2LjMuCQkJIworIwkJNi4yCWFucyA6PSBUICsgKHAgKyAodCArIE9uZWJ5U2MpKS4gR28gdG8gNi42CSMKKyMJCTYuMwlJZiBNID49IC0zLCBnbyB0byA2LjUuCQkJCSMKKyMJCTYuNAlhbnMgOj0gKFQgKyAocCArIHQpKSArIE9uZWJ5U2MuIEdvIHRvIDYuNgkjCisjCQk2LjUJYW5zIDo9IChUICsgT25lYnlTYykgKyAocCArIHQpLgkJCSMKKyMJCTYuNglSZXN0b3JlIHVzZXIgRlBDUi4JCQkJIworIwkJNi43CVJldHVybiBhbnMgOj0gU2MgKiBhbnMuIEV4aXQuCQkJIworIwlOb3RlczoJVGhlIHZhcmlvdXMgYXJyYW5nZW1lbnRzIG9mIHRoZSBleHByZXNzaW9ucyBnaXZlCSMKKyMJCWFjY3VyYXRlIGV2YWx1YXRpb25zLgkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA3LglleHAoWCktMSBmb3IgfFh8IDwgMS80LgkJCQkJIworIwkJNy4xCUlmIHxYfCA+PSAyXigtNjUpLCBnbyB0byBTdGVwIDkuCQkjCisjCQk3LjIJR28gdG8gU3RlcCA4LgkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA4LglDYWxjdWxhdGUgZXhwKFgpLTEsIHxYfCA8IDJeKC02NSkuCQkJIworIwkJOC4xCUlmIHxYfCA8IDJeKC0xNjMxMiksIGdvdG8gOC4zCQkJIworIwkJOC4yCVJlc3RvcmUgRlBDUjsgcmV0dXJuIGFucyA6PSBYIC0gMl4oLTE2MzgyKS4JIworIwkJCUV4aXQuCQkJCQkJIworIwkJOC4zCVggOj0gWCAqIDJeKDE0MCkuCQkJCSMKKyMJCTguNAlSZXN0b3JlIEZQQ1I7IGFucyA6PSBhbnMgLSAyXigtMTYzODIpLgkJIworIwkJIFJldHVybiBhbnMgOj0gYW5zKjJeKDE0MCkuIEV4aXQJCQkjCisjCU5vdGVzOglUaGUgaWRlYSBpcyB0byByZXR1cm4gIlggLSB0aW55IiB1bmRlciB0aGUgdXNlcgkJIworIwkJcHJlY2lzaW9uIGFuZCByb3VuZGluZyBtb2Rlcy4gVG8gYXZvaWQgdW5uZWNlc3NhcnkJIworIwkJaW5lZmZpY2llbmN5LCB3ZSBzdGF5IGF3YXkgZnJvbSBkZW5vcm1hbGl6ZWQgbnVtYmVycwkjCisjCQl0aGUgYmVzdCB3ZSBjYW4uIEZvciB8WHwgPj0gMl4oLTE2MzEyKSwgdGhlCQkjCisjCQlzdHJhaWdodGZvcndhcmQgOC4yIGdlbmVyYXRlcyB0aGUgaW5leGFjdCBleGNlcHRpb24gYXMJIworIwkJdGhlIGNhc2Ugd2FycmFudHMuCQkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDkuCUNhbGN1bGF0ZSBleHAoWCktMSwgfFh8IDwgMS80LCBieSBhIHBvbHlub21pYWwJCSMKKyMJCQlwID0gWCArIFgqWCooQjEgKyBYKihCMiArIC4uLiArIFgqQjEyKSkJCSMKKyMJTm90ZXM6CWEpIEluIG9yZGVyIHRvIHJlZHVjZSBtZW1vcnkgYWNjZXNzLCB0aGUgY29lZmZpY2llbnRzCSMKKyMJCWFyZSBtYWRlIGFzICJzaG9ydCIgYXMgcG9zc2libGU6IEIxICh3aGljaCBpcyAxLzIpLCBCOQkjCisjCQl0byBCMTIgYXJlIHNpbmdsZSBwcmVjaXNpb247IEIzIHRvIEI4IGFyZSBkb3VibGUJIworIwkJcHJlY2lzaW9uOyBhbmQgQjIgaXMgZG91YmxlIGV4dGVuZGVkLgkJCSMKKyMJCWIpIEV2ZW4gd2l0aCB0aGUgcmVzdHJpY3Rpb24gYWJvdmUsCQkJIworIwkJCXxwIC0gKGV4cChYKS0xKXwgPCB8WHwgMl4oLTcwLjYpCQkjCisjCQlmb3IgYWxsIHxYfCA8PSAwLjI1MS4JCQkJCSMKKyMJCU5vdGUgdGhhdCAwLjI1MSBpcyBzbGlnaHRseSBiaWdnZXIgdGhhbiAxLzQuCQkjCisjCQljKSBUbyBmdWxseSBwcmVzZXJ2ZSBhY2N1cmFjeSwgdGhlIHBvbHlub21pYWwgaXMJIworIwkJY29tcHV0ZWQgYXMJCQkJCQkjCisjCQkJWCArICggUypCMSArCVEgKSB3aGVyZSBTID0gWCpYIGFuZAkJIworIwkJCVEJPQlYKlMqKEIyICsgWCooQjMgKyAuLi4gKyBYKkIxMikpCSMKKyMJCWQpIFRvIGZ1bGx5IHV0aWxpemUgdGhlIHBpcGVsaW5lLCBRIGlzIHNlcGFyYXRlZCBpbnRvCSMKKyMJCXR3byBpbmRlcGVuZGVudCBwaWVjZXMgb2Ygcm91Z2hseSBlcXVhbCBjb21wbGV4aXR5CSMKKyMJCQlRID0gWyBYKlMqKEIyICsgUyooQjQgKyAuLi4gKyBTKkIxMikpIF0gKwkjCisjCQkJCVsgUypTKihCMyArIFMqKEI1ICsgLi4uICsgUypCMTEpKSBdCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgMTAuIENhbGN1bGF0ZSBleHAoWCktMSBmb3IgfFh8ID49IDcwIGxvZyAyLgkJIworIwkJMTAuMSBJZiBYID49IDcwbG9nMiAsIGV4cChYKSAtIDEgPSBleHAoWCkgZm9yIGFsbAkjCisjCQlwcmFjdGljYWwgcHVycG9zZXMuIFRoZXJlZm9yZSwgZ28gdG8gU3RlcCAxIG9mIHNldG94LgkjCisjCQkxMC4yIElmIFggPD0gLTcwbG9nMiwgZXhwKFgpIC0gMSA9IC0xIGZvciBhbGwgcHJhY3RpY2FsCSMKKyMJCXB1cnBvc2VzLgkJCQkJCSMKKyMJCWFucyA6PSAtMQkJCQkJCSMKKyMJCVJlc3RvcmUgdXNlciBGUENSCQkJCQkjCisjCQlSZXR1cm4gYW5zIDo9IGFucyArIDJeKC0xMjYpLiBFeGl0LgkJCSMKKyMJTm90ZXM6CTEwLjIgd2lsbCBhbHdheXMgY3JlYXRlIGFuIGluZXhhY3QgYW5kIHJldHVybiAtMSArIHRpbnkJIworIwkJaW4gdGhlIHVzZXIgcm91bmRpbmcgcHJlY2lzaW9uIGFuZCBtb2RlLgkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworTDI6CWxvbmcJCTB4M0ZEQzAwMDAsMHg4MkUzMDg2NSwweDQzNjFDNEM2LDB4MDAwMDAwMDAKKworRUVYUEEzOglsb25nCQkweDNGQTU1NTU1LDB4NTU1NTRDQzEKK0VFWFBBMjoJbG9uZwkJMHgzRkM1NTU1NSwweDU1NTU0QTU0CisKK0VNMUE0Oglsb25nCQkweDNGODExMTExLDB4MTExNzQzODUKK0VNMUEzOglsb25nCQkweDNGQTU1NTU1LDB4NTU1NTRGNUEKKworRU0xQTI6CWxvbmcJCTB4M0ZDNTU1NTUsMHg1NTU1NTU1NSwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworRU0xQjg6CWxvbmcJCTB4M0VDNzFERTMsMHhBNTc3NDY4MgorRU0xQjc6CWxvbmcJCTB4M0VGQTAxQTAsMHgxOUQ3Q0I2OAorCitFTTFCNjoJbG9uZwkJMHgzRjJBMDFBMCwweDFBMDE5REYzCitFTTFCNToJbG9uZwkJMHgzRjU2QzE2QywweDE2QzE3MEUyCisKK0VNMUI0Oglsb25nCQkweDNGODExMTExLDB4MTExMTExMTEKK0VNMUIzOglsb25nCQkweDNGQTU1NTU1LDB4NTU1NTU1NTUKKworRU0xQjI6CWxvbmcJCTB4M0ZGQzAwMDAsMHhBQUFBQUFBQSwweEFBQUFBQUFCCisJbG9uZwkJMHgwMDAwMDAwMAorCitUV08xNDA6CWxvbmcJCTB4NDhCMDAwMDAsMHgwMDAwMDAwMAorVFdPTjE0MDoKKwlsb25nCQkweDM3MzAwMDAwLDB4MDAwMDAwMDAKKworRUVYUFRCTDoKKwlsb25nCQkweDNGRkYwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDgxNjREMUYzLDB4QkMwMzA3NzQsMHg5Rjg0MUE5QgorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4MkNEODY5OCwweEFDMkJBMUQ4LDB4OUZDMUQ1QjkKKwlsb25nCQkweDNGRkYwMDAwLDB4ODQzQTI4QzMsMHhBQ0RFNDA0OCwweEEwNzI4MzY5CisJbG9uZwkJMHgzRkZGMDAwMCwweDg1QUFDMzY3LDB4Q0M0ODdCMTQsMHgxRkM1Qzk1QworCWxvbmcJCTB4M0ZGRjAwMDAsMHg4NzFGNjE5NiwweDlFOEQxMDEwLDB4MUVFODVDOUYKKwlsb25nCQkweDNGRkYwMDAwLDB4ODg5ODBFODAsMHg5MkRBODUyOCwweDlGQTIwNzI5CisJbG9uZwkJMHgzRkZGMDAwMCwweDhBMTRENTc1LDB4NDk2RUZEOUMsMHhBMDdCRjlBRgorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4Qjk1QzFFMywweEVBOEJENkU4LDB4QTAwMjBEQ0YKKwlsb25nCQkweDNGRkYwMDAwLDB4OEQxQURGNUIsMHg3RTVCQTlFNCwweDIwNUE2M0RBCisJbG9uZwkJMHgzRkZGMDAwMCwweDhFQTQzOThCLDB4NDVDRDUzQzAsMHgxRUI3MDA1MQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5MDMxREM0MywweDE0NjZCMURDLDB4MUY2RUIwMjkKKwlsb25nCQkweDNGRkYwMDAwLDB4OTFDM0QzNzMsMHhBQjExQzMzOCwweEEwNzgxNDk0CisJbG9uZwkJMHgzRkZGMDAwMCwweDkzNUEyQjJGLDB4MTNFNkU5MkMsMHg5RUIzMTlCMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5NEY0RUZBOCwweEZFRjcwOTYwLDB4MjAxNzQ1N0QKKwlsb25nCQkweDNGRkYwMDAwLDB4OTY5NDJEMzcsMHgyMDE4NUEwMCwweDFGMTFENTM3CisJbG9uZwkJMHgzRkZGMDAwMCwweDk4MzdGMDUxLDB4OERCOEE5NzAsMHg5RkI5NTJERAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5OUUwNDU5MywweDIwQjdGQTY0LDB4MUZFNDMwODcKKwlsb25nCQkweDNGRkYwMDAwLDB4OUI4RDM5QjksMHhENTRFNTUzOCwweDFGQTJBODE4CisJbG9uZwkJMHgzRkZGMDAwMCwweDlEM0VEOUE3LDB4MkNGRkI3NTAsMHgxRkRFNDk0RAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5RUY1MzI2MCwweDkxQTExMUFDLDB4MjA1MDQ4OTAKKwlsb25nCQkweDNGRkYwMDAwLDB4QTBCMDUxMEYsMHhCOTcxNEZDNCwweEEwNzM2OTFDCisJbG9uZwkJMHgzRkZGMDAwMCwweEEyNzA0MzAzLDB4MEM0OTY4MTgsMHgxRjlCN0EwNQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBNDM1MTVBRSwweDA5RTY4MEEwLDB4QTA3OTcxMjYKKwlsb25nCQkweDNGRkYwMDAwLDB4QTVGRUQ2QTksMHhCMTUxMzhFQywweEEwNzFBMTQwCisJbG9uZwkJMHgzRkZGMDAwMCwweEE3Q0Q5M0I0LDB4RTk2NTM1NjgsMHgyMDRGNjJEQQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBOUExNUFCNCwweEVBN0MwRUY4LDB4MUYyODNDNEEKKwlsb25nCQkweDNGRkYwMDAwLDB4QUI3QTM5QjUsMHhBOTNFRDMzOCwweDlGOUE3RkRDCisJbG9uZwkJMHgzRkZGMDAwMCwweEFENTgzRUVBLDB4NDJBMTRBQzgsMHhBMDVCM0ZBQworCWxvbmcJCTB4M0ZGRjAwMDAsMHhBRjNCNzhBRCwweDY5MEE0Mzc0LDB4MUZERjI2MTAKKwlsb25nCQkweDNGRkYwMDAwLDB4QjEyM0Y1ODEsMHhEMkFDMjU5MCwweDlGNzA1RjkwCisJbG9uZwkJMHgzRkZGMDAwMCwweEIzMTFDNDEyLDB4QTkxMTI0ODgsMHgyMDFGNjc4QQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCNTA0RjMzMywweEY5REU2NDg0LDB4MUYzMkZCMTMKKwlsb25nCQkweDNGRkYwMDAwLDB4QjZGRDkxRTMsMHgyOEQxNzc5MCwweDIwMDM4QjMwCisJbG9uZwkJMHgzRkZGMDAwMCwweEI4RkJBRjQ3LDB4NjJGQjlFRTgsMHgyMDBEQzNDQworCWxvbmcJCTB4M0ZGRjAwMDAsMHhCQUZGNUFCMiwweDEzM0U0NUZDLDB4OUY4QjJBRTYKKwlsb25nCQkweDNGRkYwMDAwLDB4QkQwOEEzOUYsMHg1ODBDMzZDMCwweEEwMkJCRjcwCisJbG9uZwkJMHgzRkZGMDAwMCwweEJGMTc5OUI2LDB4N0E3MzEwODQsMHhBMDBCRjUxOAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDMTJDNENDQSwweDY2NzA5NDU4LDB4QTA0MURENDEKKwlsb25nCQkweDNGRkYwMDAwLDB4QzM0NkNDREEsMHgyNDk3NjQwOCwweDlGREYxMzdCCisJbG9uZwkJMHgzRkZGMDAwMCwweEM1NjcyQTExLDB4NTUwNkRBREMsMHgyMDFGMTU2OAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDNzhENzRDOCwweEFCQjlCMTVDLDB4MUZDMTNBMkUKKwlsb25nCQkweDNGRkYwMDAwLDB4QzlCOUJEODYsMHg2RTJGMjdBNCwweEEwM0Y4RjAzCisJbG9uZwkJMHgzRkZGMDAwMCwweENCRUMxNEZFLDB4RjI3MjdDNUMsMHgxRkY0OTA3RAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDRTI0OEMxNSwweDFGODQ4MEU0LDB4OUU2RTUzRTQKKwlsb25nCQkweDNGRkYwMDAwLDB4RDA2MzMzREEsMHhFRjJCMjU5NCwweDFGRDZENDVDCisJbG9uZwkJMHgzRkZGMDAwMCwweEQyQTgxRDkxLDB4RjEyQUU0NUMsMHhBMDc2RURCOQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhENEYzNUFBQiwweENGRURGQTIwLDB4OUZBNkRFMjEKKwlsb25nCQkweDNGRkYwMDAwLDB4RDc0NEZDQ0EsMHhENjlENkFGNCwweDFFRTY5QTJGCisJbG9uZwkJMHgzRkZGMDAwMCwweEQ5OUQxNUMyLDB4NzhBRkQ3QjQsMHgyMDdGNDM5RgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhEQkZCQjc5NywweERBRjIzNzU0LDB4MjAxRUMyMDcKKwlsb25nCQkweDNGRkYwMDAwLDB4REU2MEY0ODIsMHg1RTBFOTEyNCwweDlFOEJFMTc1CisJbG9uZwkJMHgzRkZGMDAwMCwweEUwQ0NERUVDLDB4MkE5NEUxMTAsMHgyMDAzMkM0QgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhFMzNGODk3MiwweEJFOEE1QTUwLDB4MjAwNERGRjUKKwlsb25nCQkweDNGRkYwMDAwLDB4RTVCOTA2RTcsMHg3QzgzNDhBOCwweDFFNzJGNDdBCisJbG9uZwkJMHgzRkZGMDAwMCwweEU4Mzk2QTUwLDB4M0M0QkRDNjgsMHgxRjcyMkYyMgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhFQUMwQzZFNywweEREMjQzOTMwLDB4QTAxN0U5NDUKKwlsb25nCQkweDNGRkYwMDAwLDB4RUQ0RjMwMUUsMHhEOTk0MkI4NCwweDFGNDAxQTVCCisJbG9uZwkJMHgzRkZGMDAwMCwweEVGRTRCOTlCLDB4RENEQUY1Q0MsMHg5RkI5QTlFMworCWxvbmcJCTB4M0ZGRjAwMDAsMHhGMjgxNzczQywweDU5RkZCMTM4LDB4MjA3NDRDMDUKKwlsb25nCQkweDNGRkYwMDAwLDB4RjUyNTdEMTUsMHgyNDg2Q0MyQywweDFGNzczQTE5CisJbG9uZwkJMHgzRkZGMDAwMCwweEY3RDBERjczLDB4MEFEMTNCQjgsMHgxRkZFOTBENQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhGQTgzQjJEQiwweDcyMkEwMzNDLDB4QTA0MUVEMjIKKwlsb25nCQkweDNGRkYwMDAwLDB4RkQzRTBDMEMsMHhGNDg2QzE3NCwweDFGODUzRjNBCisKKwlzZXQJCUFESkZMQUcsTF9TQ1IyCisJc2V0CQlTQ0FMRSxGUF9TQ1IwCisJc2V0CQlBREpTQ0FMRSxGUF9TQ1IxCisJc2V0CQlTQyxGUF9TQ1IwCisJc2V0CQlPTkVCWVNDLEZQX1NDUjEKKworCWdsb2JhbAkJc2V0b3gKK3NldG94OgorIy0tZW50cnkgcG9pbnQgZm9yIEVYUChYKSwgaGVyZSBYIGlzIGZpbml0ZSwgbm9uLXplcm8sIGFuZCBub3QgTmFOJ3MKKworIy0tU3RlcCAxLgorCW1vdi5sCQkoJWEwKSwlZDEJCSMgbG9hZCBwYXJ0IG9mIGlucHV0IFgKKwlhbmQubAkJJjB4N0ZGRjAwMDAsJWQxCQkjIGJpYXNlZCBleHBvLiBvZiBYCisJY21wLmwJCSVkMSwmMHgzRkJFMDAwMAkJIyAyXigtNjUpCisJYmdlLmIJCUVYUEMxCQkJIyBub3JtYWwgY2FzZQorCWJyYQkJRVhQU00KKworRVhQQzE6CisjLS1UaGUgY2FzZSB8WHwgPj0gMl4oLTY1KQorCW1vdi53CQk0KCVhMCksJWQxCQkjIGV4cG8uIGFuZCBwYXJ0aWFsIHNpZy4gb2YgfFh8CisJY21wLmwJCSVkMSwmMHg0MDBDQjE2NwkJIyAxNjM4MCBsb2cyIHRydW5jLiAxNiBiaXRzCisJYmx0LmIJCUVYUE1BSU4JCQkjIG5vcm1hbCBjYXNlCisJYnJhCQlFRVhQQklHCisKK0VYUE1BSU46CisjLS1TdGVwIDIuCisjLS1UaGlzIGlzIHRoZSBub3JtYWwgYnJhbmNoOgkyXigtNjUpIDw9IHxYfCA8IDE2MzgwIGxvZzIuCisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIGxvYWQgaW5wdXQgZnJvbSAoYTApCisKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwucwkJJjB4NDJCOEFBM0IsJWZwMAkjIDY0L2xvZzIgKiBYCisJZm1vdm0ueAkJJjB4YywtKCVzcCkJCSMgc2F2ZSBmcDIgeyVmcDIvJWZwM30KKwltb3YubAkJJjAsQURKRkxBRyglYTYpCisJZm1vdi5sCQklZnAwLCVkMQkJIyBOID0gaW50KCBYICogNjQvbG9nMiApCisJbGVhCQlFRVhQVEJMKCVwYyksJWExCisJZm1vdi5sCQklZDEsJWZwMAkJIyBjb252ZXJ0IHRvIGZsb2F0aW5nLWZvcm1hdAorCisJbW92LmwJCSVkMSxMX1NDUjEoJWE2KQkJIyBzYXZlIE4gdGVtcG9yYXJpbHkKKwlhbmQubAkJJjB4M0YsJWQxCQkjIEQwIGlzIEogPSBOIG1vZCA2NAorCWxzbC5sCQkmNCwlZDEKKwlhZGQubAkJJWQxLCVhMQkJCSMgYWRkcmVzcyBvZiAyXihKLzY0KQorCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDEKKwlhc3IubAkJJjYsJWQxCQkJIyBEMCBpcyBNCisJYWRkLncJCSYweDNGRkYsJWQxCQkjIGJpYXNlZCBleHBvLiBvZiAyXihNKQorCW1vdi53CQlMMiglcGMpLExfU0NSMSglYTYpCSMgcHJlZmV0Y2ggTDIsIG5vIG5lZWQgaW4gQ0IKKworRVhQQ09OVDE6CisjLS1TdGVwIDMuCisjLS1mcDEsZnAyIHNhdmVkIG9uIHRoZSBzdGFjay4gZnAwIGlzIE4sIGZwMSBpcyBYLAorIy0tYTAgcG9pbnRzIHRvIDJeKEovNjQpLCBEMCBpcyBiaWFzZWQgZXhwby4gb2YgMl4oTSkKKwlmbW92LngJCSVmcDAsJWZwMgorCWZtdWwucwkJJjB4QkMzMTcyMTgsJWZwMAkjIE4gKiBMMSwgTDEgPSBsZWFkKC1sb2cyLzY0KQorCWZtdWwueAkJTDIoJXBjKSwlZnAyCQkjIE4gKiBMMiwgTDErTDIgPSAtbG9nMi82NAorCWZhZGQueAkJJWZwMSwlZnAwCQkjIFggKyBOKkwxCisJZmFkZC54CQklZnAyLCVmcDAJCSMgZnAwIGlzIFIsIHJlZHVjZWQgYXJnLgorCisjLS1TdGVwIDQuCisjLS1XRSBOT1cgQ09NUFVURSBFWFAoUiktMSBCWSBBIFBPTFlOT01JQUwKKyMtLSBSICsgUipSKihBMSArIFIqKEEyICsgUiooQTMgKyBSKihBNCArIFIqQTUpKSkpCisjLS1UTyBGVUxMWSBVVElMSVpFIFRIRSBQSVBFTElORSwgV0UgQ09NUFVURSBTID0gUipSCisjLS1bUitSKlMqKEEyK1MqQTQpXSArIFtTKihBMStTKihBMytTKkE1KSldCisKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwueAkJJWZwMSwlZnAxCQkjIGZwMSBJUyBTID0gUipSCisKKwlmbW92LnMJCSYweDNBQjYwQjcwLCVmcDIJIyBmcDIgSVMgQTUKKworCWZtdWwueAkJJWZwMSwlZnAyCQkjIGZwMiBJUyBTKkE1CisJZm1vdi54CQklZnAxLCVmcDMKKwlmbXVsLnMJCSYweDNDMDg4ODk1LCVmcDMJIyBmcDMgSVMgUypBNAorCisJZmFkZC5kCQlFRVhQQTMoJXBjKSwlZnAyCSMgZnAyIElTIEEzK1MqQTUKKwlmYWRkLmQJCUVFWFBBMiglcGMpLCVmcDMJIyBmcDMgSVMgQTIrUypBNAorCisJZm11bC54CQklZnAxLCVmcDIJCSMgZnAyIElTIFMqKEEzK1MqQTUpCisJbW92LncJCSVkMSxTQ0FMRSglYTYpCQkjIFNDQUxFIGlzIDJeKE0pIGluIGV4dGVuZGVkCisJbW92LmwJCSYweDgwMDAwMDAwLFNDQUxFKzQoJWE2KQorCWNsci5sCQlTQ0FMRSs4KCVhNikKKworCWZtdWwueAkJJWZwMSwlZnAzCQkjIGZwMyBJUyBTKihBMitTKkE0KQorCisJZmFkZC5zCQkmMHgzRjAwMDAwMCwlZnAyCSMgZnAyIElTIEExK1MqKEEzK1MqQTUpCisJZm11bC54CQklZnAwLCVmcDMJCSMgZnAzIElTIFIqUyooQTIrUypBNCkKKworCWZtdWwueAkJJWZwMSwlZnAyCQkjIGZwMiBJUyBTKihBMStTKihBMytTKkE1KSkKKwlmYWRkLngJCSVmcDMsJWZwMAkJIyBmcDAgSVMgUitSKlMqKEEyK1MqQTQpLAorCisJZm1vdi54CQkoJWExKSssJWZwMQkJIyBmcDEgaXMgbGVhZC4gcHQuIG9mIDJeKEovNjQpCisJZmFkZC54CQklZnAyLCVmcDAJCSMgZnAwIGlzIEVYUChSKSAtIDEKKworIy0tU3RlcCA1CisjLS1maW5hbCByZWNvbnN0cnVjdGlvbiBwcm9jZXNzCisjLS1FWFAoWCkgPSAyXk0gKiAoIDJeKEovNjQpICsgMl4oSi82NCkqKEVYUChSKS0xKSApCisKKwlmbXVsLngJCSVmcDEsJWZwMAkJIyAyXihKLzY0KSooRXhwKFIpLTEpCisJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIGZwMiByZXN0b3JlZCB7JWZwMi8lZnAzfQorCWZhZGQucwkJKCVhMSksJWZwMAkJIyBhY2N1cmF0ZSAyXihKLzY0KQorCisJZmFkZC54CQklZnAxLCVmcDAJCSMgMl4oSi82NCkgKyAyXihKLzY0KSouLi4KKwltb3YubAkJQURKRkxBRyglYTYpLCVkMQorCisjLS1TdGVwIDYKKwl0c3QubAkJJWQxCisJYmVxLmIJCU5PUk1BTAorQURKVVNUOgorCWZtdWwueAkJQURKU0NBTEUoJWE2KSwlZnAwCitOT1JNQUw6CisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VyIEZQQ1IKKwltb3YuYgkJJkZNVUxfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNVUwKKwlmbXVsLngJCVNDQUxFKCVhNiksJWZwMAkJIyBtdWx0aXBseSAyXihNKQorCWJyYQkJdF9jYXRjaAorCitFWFBTTToKKyMtLVN0ZXAgNworCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIGxvYWQgWAorCWZtb3YubAkJJWQwLCVmcGNyCisJZmFkZC5zCQkmMHgzRjgwMDAwMCwlZnAwCSMgMStYIGluIHVzZXIgbW9kZQorCWJyYQkJdF9waW54MgorCitFRVhQQklHOgorIy0tU3RlcCA4CisJY21wLmwJCSVkMSwmMHg0MDBDQjI3QwkJIyAxNjQ4MCBsb2cyCisJYmd0LmIJCUVYUDJCSUcKKyMtLVN0ZXBzIDguMiAtLSA4LjYKKwlmbW92LngJCSglYTApLCVmcDAJCSMgbG9hZCBpbnB1dCBmcm9tIChhMCkKKworCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC5zCQkmMHg0MkI4QUEzQiwlZnAwCSMgNjQvbG9nMiAqIFgKKwlmbW92bS54CQkmMHhjLC0oJXNwKQkJIyBzYXZlIGZwMiB7JWZwMi8lZnAzfQorCW1vdi5sCQkmMSxBREpGTEFHKCVhNikKKwlmbW92LmwJCSVmcDAsJWQxCQkjIE4gPSBpbnQoIFggKiA2NC9sb2cyICkKKwlsZWEJCUVFWFBUQkwoJXBjKSwlYTEKKwlmbW92LmwJCSVkMSwlZnAwCQkjIGNvbnZlcnQgdG8gZmxvYXRpbmctZm9ybWF0CisJbW92LmwJCSVkMSxMX1NDUjEoJWE2KQkJIyBzYXZlIE4gdGVtcG9yYXJpbHkKKwlhbmQubAkJJjB4M0YsJWQxCQkjIEQwIGlzIEogPSBOIG1vZCA2NAorCWxzbC5sCQkmNCwlZDEKKwlhZGQubAkJJWQxLCVhMQkJCSMgYWRkcmVzcyBvZiAyXihKLzY0KQorCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDEKKwlhc3IubAkJJjYsJWQxCQkJIyBEMCBpcyBLCisJbW92LmwJCSVkMSxMX1NDUjEoJWE2KQkJIyBzYXZlIEsgdGVtcG9yYXJpbHkKKwlhc3IubAkJJjEsJWQxCQkJIyBEMCBpcyBNMQorCXN1Yi5sCQklZDEsTF9TQ1IxKCVhNikJCSMgYTEgaXMgTQorCWFkZC53CQkmMHgzRkZGLCVkMQkJIyBiaWFzZWQgZXhwby4gb2YgMl4oTTEpCisJbW92LncJCSVkMSxBREpTQ0FMRSglYTYpCSMgQURKU0NBTEUgOj0gMl4oTTEpCisJbW92LmwJCSYweDgwMDAwMDAwLEFESlNDQUxFKzQoJWE2KQorCWNsci5sCQlBREpTQ0FMRSs4KCVhNikKKwltb3YubAkJTF9TQ1IxKCVhNiksJWQxCQkjIEQwIGlzIE0KKwlhZGQudwkJJjB4M0ZGRiwlZDEJCSMgYmlhc2VkIGV4cG8uIG9mIDJeKE0pCisJYnJhLncJCUVYUENPTlQxCQkjIGdvIGJhY2sgdG8gU3RlcCAzCisKK0VYUDJCSUc6CisjLS1TdGVwIDkKKwl0c3QuYgkJKCVhMCkJCQkjIGlzIFggcG9zaXRpdmUgb3IgbmVnYXRpdmU/CisJYm1pCQl0X3VuZmwyCisJYnJhCQl0X292ZmwyCisKKwlnbG9iYWwJCXNldG94ZAorc2V0b3hkOgorIy0tZW50cnkgcG9pbnQgZm9yIEVYUChYKSwgWCBpcyBkZW5vcm1hbGl6ZWQKKwltb3YubAkJKCVhMCksLSglc3ApCisJYW5kaS5sCQkmMHg4MDAwMDAwMCwoJXNwKQorCW9yaS5sCQkmMHgwMDgwMDAwMCwoJXNwKQkjIHNpZ24oWCkqMl4oLTEyNikKKworCWZtb3YucwkJJjB4M0Y4MDAwMDAsJWZwMAorCisJZm1vdi5sCQklZDAsJWZwY3IKKwlmYWRkLnMJCSglc3ApKywlZnAwCisJYnJhCQl0X3BpbngyCisKKwlnbG9iYWwJCXNldG94bTEKK3NldG94bTE6CisjLS1lbnRyeSBwb2ludCBmb3IgRVhQTTEoWCksIGhlcmUgWCBpcyBmaW5pdGUsIG5vbi16ZXJvLCBub24tTmFOCisKKyMtLVN0ZXAgMS4KKyMtLVN0ZXAgMS4xCisJbW92LmwJCSglYTApLCVkMQkJIyBsb2FkIHBhcnQgb2YgaW5wdXQgWAorCWFuZC5sCQkmMHg3RkZGMDAwMCwlZDEJCSMgYmlhc2VkIGV4cG8uIG9mIFgKKwljbXAubAkJJWQxLCYweDNGRkQwMDAwCQkjIDEvNAorCWJnZS5iCQlFTTFDT04xCQkJIyB8WHwgPj0gMS80CisJYnJhCQlFTTFTTQorCitFTTFDT04xOgorIy0tU3RlcCAxLjMKKyMtLVRoZSBjYXNlIHxYfCA+PSAxLzQKKwltb3YudwkJNCglYTApLCVkMQkJIyBleHBvLiBhbmQgcGFydGlhbCBzaWcuIG9mIHxYfAorCWNtcC5sCQklZDEsJjB4NDAwNEMyMTUJCSMgNzBsb2cyIHJvdW5kZWQgdXAgdG8gMTYgYml0cworCWJsZS5iCQlFTTFNQUlOCQkJIyAxLzQgPD0gfFh8IDw9IDcwbG9nMgorCWJyYQkJRU0xQklHCisKK0VNMU1BSU46CisjLS1TdGVwIDIuCisjLS1UaGlzIGlzIHRoZSBjYXNlOgkxLzQgPD0gfFh8IDw9IDcwIGxvZzIuCisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIGxvYWQgaW5wdXQgZnJvbSAoYTApCisKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwucwkJJjB4NDJCOEFBM0IsJWZwMAkjIDY0L2xvZzIgKiBYCisJZm1vdm0ueAkJJjB4YywtKCVzcCkJCSMgc2F2ZSBmcDIgeyVmcDIvJWZwM30KKwlmbW92LmwJCSVmcDAsJWQxCQkjIE4gPSBpbnQoIFggKiA2NC9sb2cyICkKKwlsZWEJCUVFWFBUQkwoJXBjKSwlYTEKKwlmbW92LmwJCSVkMSwlZnAwCQkjIGNvbnZlcnQgdG8gZmxvYXRpbmctZm9ybWF0CisKKwltb3YubAkJJWQxLExfU0NSMSglYTYpCQkjIHNhdmUgTiB0ZW1wb3JhcmlseQorCWFuZC5sCQkmMHgzRiwlZDEJCSMgRDAgaXMgSiA9IE4gbW9kIDY0CisJbHNsLmwJCSY0LCVkMQorCWFkZC5sCQklZDEsJWExCQkJIyBhZGRyZXNzIG9mIDJeKEovNjQpCisJbW92LmwJCUxfU0NSMSglYTYpLCVkMQorCWFzci5sCQkmNiwlZDEJCQkjIEQwIGlzIE0KKwltb3YubAkJJWQxLExfU0NSMSglYTYpCQkjIHNhdmUgYSBjb3B5IG9mIE0KKworIy0tU3RlcCAzLgorIy0tZnAxLGZwMiBzYXZlZCBvbiB0aGUgc3RhY2suIGZwMCBpcyBOLCBmcDEgaXMgWCwKKyMtLWEwIHBvaW50cyB0byAyXihKLzY0KSwgRDAgYW5kIGExIGJvdGggY29udGFpbiBNCisJZm1vdi54CQklZnAwLCVmcDIKKwlmbXVsLnMJCSYweEJDMzE3MjE4LCVmcDAJIyBOICogTDEsIEwxID0gbGVhZCgtbG9nMi82NCkKKwlmbXVsLngJCUwyKCVwYyksJWZwMgkJIyBOICogTDIsIEwxK0wyID0gLWxvZzIvNjQKKwlmYWRkLngJCSVmcDEsJWZwMAkJIyBYICsgTipMMQorCWZhZGQueAkJJWZwMiwlZnAwCQkjIGZwMCBpcyBSLCByZWR1Y2VkIGFyZy4KKwlhZGQudwkJJjB4M0ZGRiwlZDEJCSMgRDAgaXMgYmlhc2VkIGV4cG8uIG9mIDJeTQorCisjLS1TdGVwIDQuCisjLS1XRSBOT1cgQ09NUFVURSBFWFAoUiktMSBCWSBBIFBPTFlOT01JQUwKKyMtLSBSICsgUipSKihBMSArIFIqKEEyICsgUiooQTMgKyBSKihBNCArIFIqKEE1ICsgUipBNikpKSkpCisjLS1UTyBGVUxMWSBVVElMSVpFIFRIRSBQSVBFTElORSwgV0UgQ09NUFVURSBTID0gUipSCisjLS1bUipTKihBMitTKihBNCtTKkE2KSldICsgW1IrUyooQTErUyooQTMrUypBNSkpXQorCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLngJCSVmcDEsJWZwMQkJIyBmcDEgSVMgUyA9IFIqUgorCisJZm1vdi5zCQkmMHgzOTUwMDk3QiwlZnAyCSMgZnAyIElTIGE2CisKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBmcDIgSVMgUypBNgorCWZtb3YueAkJJWZwMSwlZnAzCisJZm11bC5zCQkmMHgzQUI2MEI2QSwlZnAzCSMgZnAzIElTIFMqQTUKKworCWZhZGQuZAkJRU0xQTQoJXBjKSwlZnAyCQkjIGZwMiBJUyBBNCtTKkE2CisJZmFkZC5kCQlFTTFBMyglcGMpLCVmcDMJCSMgZnAzIElTIEEzK1MqQTUKKwltb3YudwkJJWQxLFNDKCVhNikJCSMgU0MgaXMgMl4oTSkgaW4gZXh0ZW5kZWQKKwltb3YubAkJJjB4ODAwMDAwMDAsU0MrNCglYTYpCisJY2xyLmwJCVNDKzgoJWE2KQorCisJZm11bC54CQklZnAxLCVmcDIJCSMgZnAyIElTIFMqKEE0K1MqQTYpCisJbW92LmwJCUxfU0NSMSglYTYpLCVkMQkJIyBEMCBpcwlNCisJbmVnLncJCSVkMQkJCSMgRDAgaXMgLU0KKwlmbXVsLngJCSVmcDEsJWZwMwkJIyBmcDMgSVMgUyooQTMrUypBNSkKKwlhZGQudwkJJjB4M0ZGRiwlZDEJCSMgYmlhc2VkIGV4cG8uIG9mIDJeKC1NKQorCWZhZGQuZAkJRU0xQTIoJXBjKSwlZnAyCQkjIGZwMiBJUyBBMitTKihBNCtTKkE2KQorCWZhZGQucwkJJjB4M0YwMDAwMDAsJWZwMwkjIGZwMyBJUyBBMStTKihBMytTKkE1KQorCisJZm11bC54CQklZnAxLCVmcDIJCSMgZnAyIElTIFMqKEEyK1MqKEE0K1MqQTYpKQorCW9yLncJCSYweDgwMDAsJWQxCQkjIHNpZ25lZC9leHBvLiBvZiAtMl4oLU0pCisJbW92LncJCSVkMSxPTkVCWVNDKCVhNikJIyBPbmVieVNjIGlzIC0yXigtTSkKKwltb3YubAkJJjB4ODAwMDAwMDAsT05FQllTQys0KCVhNikKKwljbHIubAkJT05FQllTQys4KCVhNikKKwlmbXVsLngJCSVmcDMsJWZwMQkJIyBmcDEgSVMgUyooQTErUyooQTMrUypBNSkpCisKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBmcDIgSVMgUipTKihBMitTKihBNCtTKkE2KSkKKwlmYWRkLngJCSVmcDEsJWZwMAkJIyBmcDAgSVMgUitTKihBMStTKihBMytTKkE1KSkKKworCWZhZGQueAkJJWZwMiwlZnAwCQkjIGZwMCBJUyBFWFAoUiktMQorCisJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIGZwMiByZXN0b3JlZCB7JWZwMi8lZnAzfQorCisjLS1TdGVwIDUKKyMtLUNvbXB1dGUgMl4oSi82NCkqcAorCisJZm11bC54CQkoJWExKSwlZnAwCQkjIDJeKEovNjQpKihFeHAoUiktMSkKKworIy0tU3RlcCA2CisjLS1TdGVwIDYuMQorCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDEJCSMgcmV0cmlldmUgTQorCWNtcC5sCQklZDEsJjYzCisJYmxlLmIJCU1MRTYzCisjLS1TdGVwIDYuMglNID49IDY0CisJZm1vdi5zCQkxMiglYTEpLCVmcDEJCSMgZnAxIGlzIHQKKwlmYWRkLngJCU9ORUJZU0MoJWE2KSwlZnAxCSMgZnAxIGlzIHQrT25lYnlTYworCWZhZGQueAkJJWZwMSwlZnAwCQkjIHArKHQrT25lYnlTYyksIGZwMSByZWxlYXNlZAorCWZhZGQueAkJKCVhMSksJWZwMAkJIyBUKyhwKyh0K09uZWJ5U2MpKQorCWJyYQkJRU0xU0NBTEUKK01MRTYzOgorIy0tU3RlcCA2LjMJTSA8PSA2MworCWNtcC5sCQklZDEsJi0zCisJYmdlLmIJCU1HRU4zCitNTFROMzoKKyMtLVN0ZXAgNi40CU0gPD0gLTQKKwlmYWRkLnMJCTEyKCVhMSksJWZwMAkJIyBwK3QKKwlmYWRkLngJCSglYTEpLCVmcDAJCSMgVCsocCt0KQorCWZhZGQueAkJT05FQllTQyglYTYpLCVmcDAJIyBPbmVieVNjICsgKFQrKHArdCkpCisJYnJhCQlFTTFTQ0FMRQorTUdFTjM6CisjLS1TdGVwIDYuNQktMyA8PSBNIDw9IDYzCisJZm1vdi54CQkoJWExKSssJWZwMQkJIyBmcDEgaXMgVAorCWZhZGQucwkJKCVhMSksJWZwMAkJIyBmcDAgaXMgcCt0CisJZmFkZC54CQlPTkVCWVNDKCVhNiksJWZwMQkjIGZwMSBpcyBUK09uZWJ5U2MKKwlmYWRkLngJCSVmcDEsJWZwMAkJIyAoVCtPbmVieVNjKSsocCt0KQorCitFTTFTQ0FMRToKKyMtLVN0ZXAgNi42CisJZm1vdi5sCQklZDAsJWZwY3IKKwlmbXVsLngJCVNDKCVhNiksJWZwMAorCWJyYQkJdF9pbngyCisKK0VNMVNNOgorIy0tU3RlcCA3CXxYfCA8IDEvNC4KKwljbXAubAkJJWQxLCYweDNGQkUwMDAwCQkjIDJeKC02NSkKKwliZ2UuYgkJRU0xUE9MWQorCitFTTFUSU5ZOgorIy0tU3RlcCA4CXxYfCA8IDJeKC02NSkKKwljbXAubAkJJWQxLCYweDAwMzMwMDAwCQkjIDJeKC0xNjMxMikKKwlibHQuYgkJRU0xMlRJTlkKKyMtLVN0ZXAgOC4yCisJbW92LmwJCSYweDgwMDEwMDAwLFNDKCVhNikJIyBTQyBpcyAtMl4oLTE2MzgyKQorCW1vdi5sCQkmMHg4MDAwMDAwMCxTQys0KCVhNikKKwljbHIubAkJU0MrOCglYTYpCisJZm1vdi54CQkoJWEwKSwlZnAwCisJZm1vdi5sCQklZDAsJWZwY3IKKwltb3YuYgkJJkZBRERfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBBREQKKwlmYWRkLngJCVNDKCVhNiksJWZwMAorCWJyYQkJdF9jYXRjaAorCitFTTEyVElOWToKKyMtLVN0ZXAgOC4zCisJZm1vdi54CQkoJWEwKSwlZnAwCisJZm11bC5kCQlUV08xNDAoJXBjKSwlZnAwCisJbW92LmwJCSYweDgwMDEwMDAwLFNDKCVhNikKKwltb3YubAkJJjB4ODAwMDAwMDAsU0MrNCglYTYpCisJY2xyLmwJCVNDKzgoJWE2KQorCWZhZGQueAkJU0MoJWE2KSwlZnAwCisJZm1vdi5sCQklZDAsJWZwY3IKKwltb3YuYgkJJkZNVUxfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNVUwKKwlmbXVsLmQJCVRXT04xNDAoJXBjKSwlZnAwCisJYnJhCQl0X2NhdGNoCisKK0VNMVBPTFk6CisjLS1TdGVwIDkJZXhwKFgpLTEgYnkgYSBzaW1wbGUgcG9seW5vbWlhbAorCWZtb3YueAkJKCVhMCksJWZwMAkJIyBmcDAgaXMgWAorCWZtdWwueAkJJWZwMCwlZnAwCQkjIGZwMCBpcyBTIDo9IFgqWAorCWZtb3ZtLngJCSYweGMsLSglc3ApCQkjIHNhdmUgZnAyIHslZnAyLyVmcDN9CisJZm1vdi5zCQkmMHgyRjMwQ0FBOCwlZnAxCSMgZnAxIGlzIEIxMgorCWZtdWwueAkJJWZwMCwlZnAxCQkjIGZwMSBpcyBTKkIxMgorCWZtb3YucwkJJjB4MzEwRjgyOTAsJWZwMgkjIGZwMiBpcyBCMTEKKwlmYWRkLnMJCSYweDMyRDczMjIwLCVmcDEJIyBmcDEgaXMgQjEwK1MqQjEyCisKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBmcDIgaXMgUypCMTEKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBmcDEgaXMgUyooQjEwICsgLi4uCisKKwlmYWRkLnMJCSYweDM0OTNGMjgxLCVmcDIJIyBmcDIgaXMgQjkrUyouLi4KKwlmYWRkLmQJCUVNMUI4KCVwYyksJWZwMQkJIyBmcDEgaXMgQjgrUyouLi4KKworCWZtdWwueAkJJWZwMCwlZnAyCQkjIGZwMiBpcyBTKihCOSsuLi4KKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBmcDEgaXMgUyooQjgrLi4uCisKKwlmYWRkLmQJCUVNMUI3KCVwYyksJWZwMgkJIyBmcDIgaXMgQjcrUyouLi4KKwlmYWRkLmQJCUVNMUI2KCVwYyksJWZwMQkJIyBmcDEgaXMgQjYrUyouLi4KKworCWZtdWwueAkJJWZwMCwlZnAyCQkjIGZwMiBpcyBTKihCNysuLi4KKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBmcDEgaXMgUyooQjYrLi4uCisKKwlmYWRkLmQJCUVNMUI1KCVwYyksJWZwMgkJIyBmcDIgaXMgQjUrUyouLi4KKwlmYWRkLmQJCUVNMUI0KCVwYyksJWZwMQkJIyBmcDEgaXMgQjQrUyouLi4KKworCWZtdWwueAkJJWZwMCwlZnAyCQkjIGZwMiBpcyBTKihCNSsuLi4KKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBmcDEgaXMgUyooQjQrLi4uCisKKwlmYWRkLmQJCUVNMUIzKCVwYyksJWZwMgkJIyBmcDIgaXMgQjMrUyouLi4KKwlmYWRkLngJCUVNMUIyKCVwYyksJWZwMQkJIyBmcDEgaXMgQjIrUyouLi4KKworCWZtdWwueAkJJWZwMCwlZnAyCQkjIGZwMiBpcyBTKihCMysuLi4KKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBmcDEgaXMgUyooQjIrLi4uCisKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBmcDIgaXMgUypTKihCMysuLi4pCisJZm11bC54CQkoJWEwKSwlZnAxCQkjIGZwMSBpcyBYKlMqKEIyLi4uCisKKwlmbXVsLnMJCSYweDNGMDAwMDAwLCVmcDAJIyBmcDAgaXMgUypCMQorCWZhZGQueAkJJWZwMiwlZnAxCQkjIGZwMSBpcyBRCisKKwlmbW92bS54CQkoJXNwKSssJjB4MzAJCSMgZnAyIHJlc3RvcmVkIHslZnAyLyVmcDN9CisKKwlmYWRkLngJCSVmcDEsJWZwMAkJIyBmcDAgaXMgUypCMStRCisKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZhZGQueAkJKCVhMCksJWZwMAorCWJyYQkJdF9pbngyCisKK0VNMUJJRzoKKyMtLVN0ZXAgMTAJfFh8ID4gNzAgbG9nMgorCW1vdi5sCQkoJWEwKSwlZDEKKwljbXAubAkJJWQxLCYwCisJYmd0LncJCUVYUEMxCisjLS1TdGVwIDEwLjIKKwlmbW92LnMJCSYweEJGODAwMDAwLCVmcDAJIyBmcDAgaXMgLTEKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZhZGQucwkJJjB4MDA4MDAwMDAsJWZwMAkjIC0xICsgMl4oLTEyNikKKwlicmEJCXRfbWlueDIKKworCWdsb2JhbAkJc2V0b3htMWQKK3NldG94bTFkOgorIy0tZW50cnkgcG9pbnQgZm9yIEVYUE0xKFgpLCBoZXJlIFggaXMgZGVub3JtYWxpemVkCisjLS1TdGVwIDAuCisJYnJhCQl0X2V4dGRucm0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzZ2V0ZXhwKCk6ICByZXR1cm5zIHRoZSBleHBvbmVudCBwb3J0aW9uIG9mIHRoZSBpbnB1dCBhcmd1bWVudC4JIworIwkgICAgICBUaGUgZXhwb25lbnQgYmlhcyBpcyByZW1vdmVkIGFuZCB0aGUgZXhwb25lbnQgdmFsdWUgaXMJIworIwkgICAgICByZXR1cm5lZCBhcyBhbiBleHRlbmRlZCBwcmVjaXNpb24gbnVtYmVyIGluIGZwMC4JCSMKKyMgc2dldGV4cGQoKTogaGFuZGxlcyBkZW5vcm1hbGl6ZWQgbnVtYmVycy4JCQkJIworIwkJCQkJCQkJCSMKKyMgc2dldG1hbigpOiAgZXh0cmFjdHMgdGhlIG1hbnRpc3NhIG9mIHRoZSBpbnB1dCBhcmd1bWVudC4gVGhlCQkjCisjCSAgICAgIG1hbnRpc3NhIGlzIGNvbnZlcnRlZCB0byBhbiBleHRlbmRlZCBwcmVjaXNpb24gbnVtYmVyIHcvCSMKKyMJICAgICAgYW4gZXhwb25lbnQgb2YgJDNmZmYgYW5kIGlzIHJldHVybmVkIGluIGZwMC4gVGhlIHJhbmdlIG9mICMKKyMJICAgICAgdGhlIHJlc3VsdCBpcyBbMS4wIC0gMi4wKS4JCQkJIworIyBzZ2V0bWFuZCgpOiBoYW5kbGVzIGRlbm9ybWFsaXplZCBudW1iZXJzLgkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dAkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWZwMCA9IGV4cG9uZW50KFgpIG9yIG1hbnRpc3NhKFgpCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXNnZXRleHAKK3NnZXRleHA6CisJbW92LncJCVNSQ19FWCglYTApLCVkMAkJIyBnZXQgdGhlIGV4cG9uZW50CisJYmNscgkJJjB4ZiwlZDAJCSMgY2xlYXIgdGhlIHNpZ24gYml0CisJc3ViaS53CQkmMHgzZmZmLCVkMAkJIyBzdWJ0cmFjdCBvZmYgdGhlIGJpYXMKKwlmbW92LncJCSVkMCwlZnAwCQkjIHJldHVybiBleHAgaW4gZnAwCisJYmx0LmIJCXNnZXRleHBuCQkjIGl0J3MgbmVnYXRpdmUKKwlydHMKKworc2dldGV4cG46CisJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKKwlydHMKKworCWdsb2JhbAkJc2dldGV4cGQKK3NnZXRleHBkOgorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUKKwluZWcudwkJJWQwCQkJIyBuZXcgZXhwID0gLShzaGZ0IGFtdCkKKwlzdWJpLncJCSYweDNmZmYsJWQwCQkjIHN1YnRyYWN0IG9mZiB0aGUgYmlhcworCWZtb3YudwkJJWQwLCVmcDAJCSMgcmV0dXJuIGV4cCBpbiBmcDAKKwltb3YuYgkJJm5lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ04nIGNjb2RlIGJpdAorCXJ0cworCisJZ2xvYmFsCQlzZ2V0bWFuCitzZ2V0bWFuOgorCW1vdi53CQlTUkNfRVgoJWEwKSwlZDAJCSMgZ2V0IHRoZSBleHAKKwlvcmkudwkJJjB4N2ZmZiwlZDAJCSMgY2xlYXIgb2xkIGV4cAorCWJjbHIJCSYweGUsJWQwCQkjIG1ha2UgaXQgdGhlIG5ldyBleHAgKy0zZmZmCisKKyMgaGVyZSwgd2UgYnVpbGQgdGhlIHJlc3VsdCBpbiBhIHRtcCBsb2NhdGlvbiBzbyBhcyBub3QgdG8gZGlzdHVyYiB0aGUgaW5wdXQKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpICMgY29weSB0byB0bXAgbG9jCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KSAjIGNvcHkgdG8gdG1wIGxvYworCW1vdi53CQklZDAsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWZtb3YueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwdXQgbmV3IHZhbHVlIGJhY2sgaW4gZnAwCisJYm1pLmIJCXNnZXRtYW5uCQkjIGl0J3MgbmVnYXRpdmUKKwlydHMKKworc2dldG1hbm46CisJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKKwlydHMKKworIworIyBGb3IgZGVub3JtYWxpemVkIG51bWJlcnMsIHNoaWZ0IHRoZSBtYW50aXNzYSB1bnRpbCB0aGUgai1iaXQgPSAxLAorIyB0aGVuIGxvYWQgdGhlIGV4cG9uZW50IHdpdGggKy8xICQzZmZmLgorIworCWdsb2JhbAkJc2dldG1hbmQKK3NnZXRtYW5kOgorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgZXhwb25lbnQKKwlicmEuYgkJc2dldG1hbgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNjb3NoKCk6ICBjb21wdXRlcyB0aGUgaHlwZXJib2xpYyBjb3NpbmUgb2YgYSBub3JtYWxpemVkIGlucHV0CSMKKyMgc2Nvc2hkKCk6IGNvbXB1dGVzIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiBhIGRlbm9ybWFsaXplZCBpbnB1dAkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSBjb3NoKFgpCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDMgdWxwcyBpbiA2NCBzaWduaWZpY2FudCBiaXQsCSMKKyMJaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5CSMKKyMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCisjCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJCQkJCQkJCQkjCisjCUNPU0gJCQkJCQkJCSMKKyMJMS4gSWYgfFh8ID4gMTYzODAgbG9nMiwgZ28gdG8gMy4JCQkJIworIwkJCQkJCQkJCSMKKyMJMi4gKHxYfCA8PSAxNjM4MCBsb2cyKSBDb3NoKFgpIGlzIG9idGFpbmVkIGJ5IHRoZSBmb3JtdWxhZQkjCisjCQl5ID0gfFh8LCB6ID0gZXhwKFkpLCBhbmQJCQkJIworIwkJY29zaChYKSA9ICgxLzIpKiggeiArIDEveiApLgkJCQkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwkzLiAofFh8ID4gMTYzODAgbG9nMikuIElmIHxYfCA+IDE2NDgwIGxvZzIsIGdvIHRvIDUuCQkjCisjCQkJCQkJCQkJIworIwk0LiAoMTYzODAgbG9nMiA8IHxYfCA8PSAxNjQ4MCBsb2cyKQkJCQkjCisjCQljb3NoKFgpID0gc2lnbihYKSAqIGV4cCh8WHwpLzIuCQkJCSMKKyMJCUhvd2V2ZXIsIGludm9raW5nIGV4cCh8WHwpIG1heSBjYXVzZSBwcmVtYXR1cmUJCSMKKyMJCW92ZXJmbG93LiBUaHVzLCB3ZSBjYWxjdWxhdGUgc2luaChYKSBhcyBmb2xsb3dzOgkjCisjCQlZCTo9IHxYfAkJCQkJCSMKKyMJCUZhY3QJOj0JMioqKDE2MzgwKQkJCQkjCisjCQlZJwk6PSBZIC0gMTYzODEgbG9nMgkJCQkjCisjCQljb3NoKFgpIDo9IEZhY3QgKiBleHAoWScpLgkJCQkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwk1LiAofFh8ID4gMTY0ODAgbG9nMikgc2luaChYKSBtdXN0IG92ZXJmbG93LiBSZXR1cm4JCSMKKyMJCUh1Z2UqSHVnZSB0byBnZW5lcmF0ZSBvdmVyZmxvdyBhbmQgYW4gaW5maW5pdHkgd2l0aAkjCisjCQl0aGUgYXBwcm9wcmlhdGUgc2lnbi4gSHVnZSBpcyB0aGUgbGFyZ2VzdCBmaW5pdGUgbnVtYmVyCSMKKyMJCWluIGV4dGVuZGVkIGZvcm1hdC4gRXhpdC4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworVFdPMTYzODA6CisJbG9uZwkJMHg3RkZCMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCisJZ2xvYmFsCQlzY29zaAorc2Nvc2g6CisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIExPQUQgSU5QVVQKKworCW1vdi5sCQkoJWEwKSwlZDEKKwltb3YudwkJNCglYTApLCVkMQorCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEKKwljbXAubAkJJWQxLCYweDQwMENCMTY3CisJYmd0LmIJCUNPU0hCSUcKKworIy0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDwgMTYzODAgTE9HMgorIy0tQ09TSChYKSA9ICgxLzIpICogKCBFWFAoWCkgKyAxL0VYUChYKSApCisKKwlmYWJzLngJCSVmcDAJCQkjIHxYfAorCisJbW92LmwJCSVkMCwtKCVzcCkKKwljbHIubAkJJWQwCisJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgfFh8IHRvIHN0YWNrCisJbGVhCQkoJXNwKSwlYTAJCSMgcGFzcyBwdHIgdG8gfFh8CisJYnNyCQlzZXRveAkJCSMgRlAwIElTIEVYUCh8WHwpCisJYWRkLmwJCSYweGMsJXNwCQkjIGVyYXNlIHxYfCBmcm9tIHN0YWNrCisJZm11bC5zCQkmMHgzRjAwMDAwMCwlZnAwCSMgKDEvMilFWFAofFh8KQorCW1vdi5sCQkoJXNwKSssJWQwCisKKwlmbW92LnMJCSYweDNFODAwMDAwLCVmcDEJIyAoMS80KQorCWZkaXYueAkJJWZwMCwlZnAxCQkjIDEvKDIgRVhQKHxYfCkpCisKKwlmbW92LmwJCSVkMCwlZnBjcgorCW1vdi5iCQkmRkFERF9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIEFERAorCWZhZGQueAkJJWZwMSwlZnAwCisJYnJhCQl0X2NhdGNoCisKK0NPU0hCSUc6CisJY21wLmwJCSVkMSwmMHg0MDBDQjJCMworCWJndC5iCQlDT1NISFVHRQorCisJZmFicy54CQklZnAwCisJZnN1Yi5kCQlUMSglcGMpLCVmcDAJCSMgKHxYfC0xNjM4MUxPRzJfTEVBRCkKKwlmc3ViLmQJCVQyKCVwYyksJWZwMAkJIyB8WHwgLSAxNjM4MSBMT0cyLCBBQ0NVUkFURQorCisJbW92LmwJCSVkMCwtKCVzcCkKKwljbHIubAkJJWQwCisJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgZnAwIHRvIHN0YWNrCisJbGVhCQkoJXNwKSwlYTAJCSMgcGFzcyBwdHIgdG8gZnAwCisJYnNyCQlzZXRveAorCWFkZC5sCQkmMHhjLCVzcAkJIyBjbGVhciBmcDAgZnJvbSBzdGFjaworCW1vdi5sCQkoJXNwKSssJWQwCisKKwlmbW92LmwJCSVkMCwlZnBjcgorCW1vdi5iCQkmRk1VTF9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1VTAorCWZtdWwueAkJVFdPMTYzODAoJXBjKSwlZnAwCisJYnJhCQl0X2NhdGNoCisKK0NPU0hIVUdFOgorCWJyYQkJdF9vdmZsMgorCisJZ2xvYmFsCQlzY29zaGQKKyMtLUNPU0goWCkgPSAxIEZPUiBERU5PUk1BTElaRUQgWAorc2Nvc2hkOgorCWZtb3YucwkJJjB4M0Y4MDAwMDAsJWZwMAorCisJZm1vdi5sCQklZDAsJWZwY3IKKwlmYWRkLnMJCSYweDAwODAwMDAwLCVmcDAKKwlicmEJCXRfcGlueDIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzc2luaCgpOiAgY29tcHV0ZXMgdGhlIGh5cGVyYm9saWMgc2luZSBvZiBhIG5vcm1hbGl6ZWQgaW5wdXQJCSMKKyMgc3NpbmhkKCk6IGNvbXB1dGVzIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dAkJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJZnAwID0gc2luaChYKQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAzIHVscHMgaW4gNjQgc2lnbmlmaWNhbnQgYml0LAkjCisjCWkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseSAjCisjCXJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMJIworIwlpbiBkb3VibGUgcHJlY2lzaW9uLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCQkJCQkJCQkJIworIyAgICAgICBTSU5ICQkJCQkJCQkjCisjICAgICAgIDEuIElmIHxYfCA+IDE2MzgwIGxvZzIsIGdvIHRvIDMuCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIDIuICh8WHwgPD0gMTYzODAgbG9nMikgU2luaChYKSBpcyBvYnRhaW5lZCBieSB0aGUgZm9ybXVsYQkjCisjICAgICAgICAgICAgICAgeSA9IHxYfCwgc2duID0gc2lnbihYKSwgYW5kIHogPSBleHBtMShZKSwJCSMKKyMgICAgICAgICAgICAgICBzaW5oKFgpID0gc2duKigxLzIpKiggeiArIHovKDEreikgKS4JCQkjCisjICAgICAgICAgIEV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIDMuIElmIHxYfCA+IDE2NDgwIGxvZzIsIGdvIHRvIDUuCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIDQuICgxNjM4MCBsb2cyIDwgfFh8IDw9IDE2NDgwIGxvZzIpCQkJCSMKKyMgICAgICAgICAgICAgICBzaW5oKFgpID0gc2lnbihYKSAqIGV4cCh8WHwpLzIuCQkJCSMKKyMgICAgICAgICAgSG93ZXZlciwgaW52b2tpbmcgZXhwKHxYfCkgbWF5IGNhdXNlIHByZW1hdHVyZSBvdmVyZmxvdy4JIworIyAgICAgICAgICBUaHVzLCB3ZSBjYWxjdWxhdGUgc2luaChYKSBhcyBmb2xsb3dzOgkJCSMKKyMgICAgICAgICAgICAgWSAgICAgICA6PSB8WHwJCQkJCQkjCisjICAgICAgICAgICAgIHNnbiAgICAgOj0gc2lnbihYKQkJCQkJIworIyAgICAgICAgICAgICBzZ25GYWN0IDo9IHNnbiAqIDIqKigxNjM4MCkJCQkJIworIyAgICAgICAgICAgICBZJyAgICAgIDo9IFkgLSAxNjM4MSBsb2cyCQkJCQkjCisjICAgICAgICAgICAgIHNpbmgoWCkgOj0gc2duRmFjdCAqIGV4cChZJykuCQkJCSMKKyMgICAgICAgICAgRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgNS4gKHxYfCA+IDE2NDgwIGxvZzIpIHNpbmgoWCkgbXVzdCBvdmVyZmxvdy4gUmV0dXJuCQkjCisjICAgICAgICAgIHNpZ24oWCkqSHVnZSpIdWdlIHRvIGdlbmVyYXRlIG92ZXJmbG93IGFuZCBhbiBpbmZpbml0eSB3aXRoCSMKKyMgICAgICAgICAgdGhlIGFwcHJvcHJpYXRlIHNpZ24uIEh1Z2UgaXMgdGhlIGxhcmdlc3QgZmluaXRlIG51bWJlciBpbgkjCisjICAgICAgICAgIGV4dGVuZGVkIGZvcm1hdC4gRXhpdC4JCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXNzaW5oCitzc2luaDoKKwlmbW92LngJCSglYTApLCVmcDAJCSMgTE9BRCBJTlBVVAorCisJbW92LmwJCSglYTApLCVkMQorCW1vdi53CQk0KCVhMCksJWQxCisJbW92LmwJCSVkMSwlYTEJCQkjIHNhdmUgKGNvbXBhY3RlZCkgb3BlcmFuZAorCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEKKwljbXAubAkJJWQxLCYweDQwMENCMTY3CisJYmd0LmIJCVNJTkhCSUcKKworIy0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDwgMTYzODAgTE9HMgorIy0tWSA9IHxYfCwgWiA9IEVYUE0xKFkpLCBTSU5IKFgpID0gU0lHTihYKSooMS8yKSooIFogKyBaLygxK1opICkKKworCWZhYnMueAkJJWZwMAkJCSMgWSA9IHxYfAorCisJbW92bS5sCQkmMHg4MDQwLC0oJXNwKQkJIyB7YTEvZDB9CisJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgWSBvbiBzdGFjaworCWxlYQkJKCVzcCksJWEwCQkjIHBhc3MgcHRyIHRvIFkKKwljbHIubAkJJWQwCisJYnNyCQlzZXRveG0xCQkJIyBGUDAgSVMgWiA9IEVYUE0xKFkpCisJYWRkLmwJCSYweGMsJXNwCQkjIGNsZWFyIFkgZnJvbSBzdGFjaworCWZtb3YubAkJJjAsJWZwY3IKKwltb3ZtLmwJCSglc3ApKywmMHgwMjAxCQkjIHthMS9kMH0KKworCWZtb3YueAkJJWZwMCwlZnAxCisJZmFkZC5zCQkmMHgzRjgwMDAwMCwlZnAxCSMgMStaCisJZm1vdi54CQklZnAwLC0oJXNwKQorCWZkaXYueAkJJWZwMSwlZnAwCQkjIFovKDErWikKKwltb3YubAkJJWExLCVkMQorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEKKwlvci5sCQkmMHgzRjAwMDAwMCwlZDEKKwlmYWRkLngJCSglc3ApKywlZnAwCisJbW92LmwJCSVkMSwtKCVzcCkKKworCWZtb3YubAkJJWQwLCVmcGNyCisJbW92LmIJCSZGTVVMX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTVVMCisJZm11bC5zCQkoJXNwKSssJWZwMAkJIyBsYXN0IGZwIGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb25zIHNldAorCWJyYQkJdF9jYXRjaAorCitTSU5IQklHOgorCWNtcC5sCQklZDEsJjB4NDAwQ0IyQjMKKwliZ3QJCXRfb3ZmbAorCWZhYnMueAkJJWZwMAorCWZzdWIuZAkJVDEoJXBjKSwlZnAwCQkjICh8WHwtMTYzODFMT0cyX0xFQUQpCisJbW92LmwJCSYwLC0oJXNwKQorCW1vdi5sCQkmMHg4MDAwMDAwMCwtKCVzcCkKKwltb3YubAkJJWExLCVkMQorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEKKwlvci5sCQkmMHg3RkZCMDAwMCwlZDEKKwltb3YubAkJJWQxLC0oJXNwKQkJIyBFWFRFTkRFRCBGTVQKKwlmc3ViLmQJCVQyKCVwYyksJWZwMAkJIyB8WHwgLSAxNjM4MSBMT0cyLCBBQ0NVUkFURQorCisJbW92LmwJCSVkMCwtKCVzcCkKKwljbHIubAkJJWQwCisJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgZnAwIG9uIHN0YWNrCisJbGVhCQkoJXNwKSwlYTAJCSMgcGFzcyBwdHIgdG8gZnAwCisJYnNyCQlzZXRveAorCWFkZC5sCQkmMHhjLCVzcAkJIyBjbGVhciBmcDAgZnJvbSBzdGFjaworCisJbW92LmwJCSglc3ApKywlZDAKKwlmbW92LmwJCSVkMCwlZnBjcgorCW1vdi5iCQkmRk1VTF9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1VTAorCWZtdWwueAkJKCVzcCkrLCVmcDAJCSMgcG9zc2libGUgZXhjZXB0aW9uCisJYnJhCQl0X2NhdGNoCisKKwlnbG9iYWwJCXNzaW5oZAorIy0tU0lOSChYKSA9IFggRk9SIERFTk9STUFMSVpFRCBYCitzc2luaGQ6CisJYnJhCQl0X2V4dGRucm0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzdGFuaCgpOiAgY29tcHV0ZXMgdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiBhIG5vcm1hbGl6ZWQgaW5wdXQJIworIyBzdGFuaGQoKTogY29tcHV0ZXMgdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiBhIGRlbm9ybWFsaXplZCBpbnB1dAkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSB0YW5oKFgpCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDMgdWxwcyBpbiA2NCBzaWduaWZpY2FudCBiaXQsCSMKKyMJaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5ICMKKyMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCisjCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJCQkJCQkJCQkjCisjCVRBTkgJCQkJCQkJCSMKKyMJMS4gSWYgfFh8ID49ICg1LzIpIGxvZzIgb3IgfFh8IDw9IDIqKigtNDApLCBnbyB0byAzLgkJIworIwkJCQkJCQkJCSMKKyMJMi4gKDIqKigtNDApIDwgfFh8IDwgKDUvMikgbG9nMikgQ2FsY3VsYXRlIHRhbmgoWCkgYnkJCSMKKyMJCXNnbiA6PSBzaWduKFgpLCB5IDo9IDJ8WHwsIHogOj0gZXhwbTEoWSksIGFuZAkJIworIwkJdGFuaChYKSA9IHNnbiooIHovKDIreikgKS4JCQkJIworIwkJRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJMy4gKHxYfCA8PSAyKiooLTQwKSBvciB8WHwgPj0gKDUvMikgbG9nMikuIElmIHxYfCA8IDEsCQkjCisjCQlnbyB0byA3LgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTQuICh8WHwgPj0gKDUvMikgbG9nMikgSWYgfFh8ID49IDUwIGxvZzIsIGdvIHRvIDYuCQkjCisjCQkJCQkJCQkJIworIwk1LiAoKDUvMikgbG9nMiA8PSB8WHwgPCA1MCBsb2cyKSBDYWxjdWxhdGUgdGFuaChYKSBieQkJIworIwkJc2duIDo9IHNpZ24oWCksIHkgOj0gMnxYfCwgeiA6PSBleHAoWSksCQkJIworIwkJdGFuaChYKSA9IHNnbiAtIFsgc2duKjIvKDEreikgXS4JCQkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwk2LiAofFh8ID49IDUwIGxvZzIpIFRhbmgoWCkgPSArLTEgKHJvdW5kIHRvIG5lYXJlc3QpLiBUaHVzLCB3ZQkjCisjCQljYWxjdWxhdGUgVGFuaChYKSBieQkJCQkJIworIwkJc2duIDo9IHNpZ24oWCksIFRpbnkgOj0gMioqKC0xMjYpLAkJCSMKKyMJCXRhbmgoWCkgOj0gc2duIC0gc2duKlRpbnkuCQkJCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTcuICh8WHwgPCAyKiooLTQwKSkuIFRhbmgoWCkgPSBYLglFeGl0LgkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlzZXQJCVgsRlBfU0NSMAorCXNldAkJWEZSQUMsWCs0CisKKwlzZXQJCVNHTixMX1NDUjMKKworCXNldAkJVixGUF9TQ1IwCisKKwlnbG9iYWwJCXN0YW5oCitzdGFuaDoKKwlmbW92LngJCSglYTApLCVmcDAJCSMgTE9BRCBJTlBVVAorCisJZm1vdi54CQklZnAwLFgoJWE2KQorCW1vdi5sCQkoJWEwKSwlZDEKKwltb3YudwkJNCglYTApLCVkMQorCW1vdi5sCQklZDEsWCglYTYpCisJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQorCWNtcC5sCQklZDEsICYweDNmZDc4MDAwCSMgaXMgfFh8IDwgMl4oLTQwKT8KKwlibHQudwkJVEFOSEJPUlMJCSMgeWVzCisJY21wLmwJCSVkMSwgJjB4M2ZmZmRkY2UJIyBpcyB8WHwgPiAoNS8yKUxPRzI/CisJYmd0LncJCVRBTkhCT1JTCQkjIHllcworCisjLS1USElTIElTIFRIRSBVU1VBTCBDQVNFCisjLS1ZID0gMnxYfCwgWiA9IEVYUE0xKFkpLCBUQU5IKFgpID0gU0lHTihYKSAqIFogLyAoWisyKS4KKworCW1vdi5sCQlYKCVhNiksJWQxCisJbW92LmwJCSVkMSxTR04oJWE2KQorCWFuZC5sCQkmMHg3RkZGMDAwMCwlZDEKKwlhZGQubAkJJjB4MDAwMTAwMDAsJWQxCQkjIEVYUE9ORU5UIE9GIDJ8WHwKKwltb3YubAkJJWQxLFgoJWE2KQorCWFuZC5sCQkmMHg4MDAwMDAwMCxTR04oJWE2KQorCWZtb3YueAkJWCglYTYpLCVmcDAJCSMgRlAwIElTIFkgPSAyfFh8CisKKwltb3YubAkJJWQwLC0oJXNwKQorCWNsci5sCQklZDAKKwlmbW92bS54CQkmMHgxLC0oJXNwKQkJIyBzYXZlIFkgb24gc3RhY2sKKwlsZWEJCSglc3ApLCVhMAkJIyBwYXNzIHB0ciB0byBZCisJYnNyCQlzZXRveG0xCQkJIyBGUDAgSVMgWiA9IEVYUE0xKFkpCisJYWRkLmwJCSYweGMsJXNwCQkjIGNsZWFyIFkgZnJvbSBzdGFjaworCW1vdi5sCQkoJXNwKSssJWQwCisKKwlmbW92LngJCSVmcDAsJWZwMQorCWZhZGQucwkJJjB4NDAwMDAwMDAsJWZwMQkjIForMgorCW1vdi5sCQlTR04oJWE2KSwlZDEKKwlmbW92LngJCSVmcDEsViglYTYpCisJZW9yLmwJCSVkMSxWKCVhNikKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgcHJlYyxtb2RlCisJZmRpdi54CQlWKCVhNiksJWZwMAorCWJyYQkJdF9pbngyCisKK1RBTkhCT1JTOgorCWNtcC5sCQklZDEsJjB4M0ZGRjgwMDAKKwlibHQudwkJVEFOSFNNCisKKwljbXAubAkJJWQxLCYweDQwMDQ4QUExCisJYmd0LncJCVRBTkhIVUdFCisKKyMtLSAoNS8yKSBMT0cyIDwgfFh8IDwgNTAgTE9HMiwKKyMtLVRBTkgoWCkgPSAxIC0gKDIvW0VYUCgyWCkrMV0pLiBMRVQgWSA9IDJ8WHwsIFNHTiA9IFNJR04oWCksCisjLS1UQU5IKFgpID0gU0dOIC0JU0dOKjIvW0VYUChZKSsxXS4KKworCW1vdi5sCQlYKCVhNiksJWQxCisJbW92LmwJCSVkMSxTR04oJWE2KQorCWFuZC5sCQkmMHg3RkZGMDAwMCwlZDEKKwlhZGQubAkJJjB4MDAwMTAwMDAsJWQxCQkjIEVYUE8gT0YgMnxYfAorCW1vdi5sCQklZDEsWCglYTYpCQkjIFkgPSAyfFh8CisJYW5kLmwJCSYweDgwMDAwMDAwLFNHTiglYTYpCisJbW92LmwJCVNHTiglYTYpLCVkMQorCWZtb3YueAkJWCglYTYpLCVmcDAJCSMgWSA9IDJ8WHwKKworCW1vdi5sCQklZDAsLSglc3ApCisJY2xyLmwJCSVkMAorCWZtb3ZtLngJCSYweDAxLC0oJXNwKQkJIyBzYXZlIFkgb24gc3RhY2sKKwlsZWEJCSglc3ApLCVhMAkJIyBwYXNzIHB0ciB0byBZCisJYnNyCQlzZXRveAkJCSMgRlAwIElTIEVYUChZKQorCWFkZC5sCQkmMHhjLCVzcAkJIyBjbGVhciBZIGZyb20gc3RhY2sKKwltb3YubAkJKCVzcCkrLCVkMAorCW1vdi5sCQlTR04oJWE2KSwlZDEKKwlmYWRkLnMJCSYweDNGODAwMDAwLCVmcDAJIyBFWFAoWSkrMQorCisJZW9yLmwJCSYweEMwMDAwMDAwLCVkMQkJIyAtU0lHTihYKSoyCisJZm1vdi5zCQklZDEsJWZwMQkJIyAtU0lHTihYKSoyIElOIFNHTCBGTVQKKwlmZGl2LngJCSVmcDAsJWZwMQkJIyAtU0lHTihYKTIgLyBbRVhQKFkpKzEgXQorCisJbW92LmwJCVNHTiglYTYpLCVkMQorCW9yLmwJCSYweDNGODAwMDAwLCVkMQkJIyBTR04KKwlmbW92LnMJCSVkMSwlZnAwCQkjIFNHTiBJTiBTR0wgRk1UCisKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIHByZWMsbW9kZQorCW1vdi5iCQkmRkFERF9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIEFERAorCWZhZGQueAkJJWZwMSwlZnAwCisJYnJhCQl0X2lueDIKKworVEFOSFNNOgorCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgcHJlYyxtb2RlCisJbW92LmIJCSZGTU9WX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTU9WRQorCWZtb3YueAkJWCglYTYpLCVmcDAJCSMgbGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uIHNldAorCWJyYQkJdF9jYXRjaAorCisjLS0tUkVUVVJOIFNHTihYKSAtIFNHTihYKUVQUworVEFOSEhVR0U6CisJbW92LmwJCVgoJWE2KSwlZDEKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQxCisJb3IubAkJJjB4M0Y4MDAwMDAsJWQxCisJZm1vdi5zCQklZDEsJWZwMAorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEKKwllb3IubAkJJjB4ODA4MDAwMDAsJWQxCQkjIC1TSUdOKFgpKkVQUworCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBwcmVjLG1vZGUKKwlmYWRkLnMJCSVkMSwlZnAwCisJYnJhCQl0X2lueDIKKworCWdsb2JhbAkJc3RhbmhkCisjLS1UQU5IKFgpID0gWCBGT1IgREVOT1JNQUxJWkVEIFgKK3N0YW5oZDoKKwlicmEJCXRfZXh0ZG5ybQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNsb2duKCk6ICAgIGNvbXB1dGVzIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiBhIG5vcm1hbGl6ZWQgaW5wdXQJIworIyBzbG9nbmQoKTogICBjb21wdXRlcyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJIworIyBzbG9nbnAxKCk6ICBjb21wdXRlcyB0aGUgbG9nKDErWCkgb2YgYSBub3JtYWxpemVkIGlucHV0CQkjCisjIHNsb2ducDFkKCk6IGNvbXB1dGVzIHRoZSBsb2coMStYKSBvZiBhIGRlbm9ybWFsaXplZCBpbnB1dAkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dAkJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gbG9nKFgpIG9yIGxvZygxK1gpCQkJCQkjCisjCQkJCQkJCQkJIworIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAyIHVscHMgaW4gNjQgc2lnbmlmaWNhbnQgYml0LAkjCisjCWkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseQkjCisjCXJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMJIworIwlpbiBkb3VibGUgcHJlY2lzaW9uLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUxPR046CQkJCQkJCQkjCisjCVN0ZXAgMS4gSWYgfFgtMXwgPCAxLzE2LCBhcHByb3hpbWF0ZSBsb2coWCkgYnkgYW4gb2RkCQkjCisjCQlwb2x5bm9taWFsIGluIHUsIHdoZXJlIHUgPSAyKFgtMSkvKFgrMSkuIE90aGVyd2lzZSwJIworIwkJbW92ZSBvbiB0byBTdGVwIDIuCQkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDIuIFggPSAyKiprICogWSB3aGVyZSAxIDw9IFkgPCAyLiBEZWZpbmUgRiB0byBiZSB0aGUgZmlyc3QJIworIwkJc2V2ZW4gc2lnbmlmaWNhbnQgYml0cyBvZiBZIHBsdXMgMioqKC03KSwgaS5lLgkJIworIwkJRiA9IDEueHh4eHh4MSBpbiBiYXNlIDIgd2hlcmUgdGhlIHNpeCAieCIgbWF0Y2ggdGhvc2UJIworIwkJb2YgWS4gTm90ZSB0aGF0IHxZLUZ8IDw9IDIqKigtNykuCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCAzLiBEZWZpbmUgdSA9IChZLUYpL0YuIEFwcHJveGltYXRlIGxvZygxK3UpIGJ5IGEJCSMKKyMJCXBvbHlub21pYWwgaW4gdSwgbG9nKDErdSkgPSBwb2x5LgkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgNC4gUmVjb25zdHJ1Y3QJCQkJCQkjCisjCQlsb2coWCkgPSBsb2coIDIqKmsgKiBZICkgPSBrKmxvZygyKSArIGxvZyhGKSArIGxvZygxK3UpCSMKKyMJCWJ5IGsqbG9nKDIpICsgKGxvZyhGKSArIHBvbHkpLiBUaGUgdmFsdWVzIG9mIGxvZyhGKSBhcmUJIworIwkJY2FsY3VsYXRlZCBiZWZvcmVoYW5kIGFuZCBzdG9yZWQgaW4gdGhlIHByb2dyYW0uCSMKKyMJCQkJCQkJCQkjCisjCWxvZ25wMToJCQkJCQkJCSMKKyMJU3RlcCAxOiBJZiB8WHwgPCAxLzE2LCBhcHByb3hpbWF0ZSBsb2coMStYKSBieSBhbiBvZGQJCSMKKyMJCXBvbHlub21pYWwgaW4gdSB3aGVyZSB1ID0gMlgvKDIrWCkuIE90aGVyd2lzZSwgbW92ZSBvbgkjCisjCQl0byBTdGVwIDIuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCAyOiBMZXQgMStYID0gMioqayAqIFksIHdoZXJlIDEgPD0gWSA8IDIuIERlZmluZSBGIGFzIGRvbmUJIworIwkJaW4gU3RlcCAyIG9mIHRoZSBhbGdvcml0aG0gZm9yIExPR04gYW5kIGNvbXB1dGUJCSMKKyMJCWxvZygxK1gpIGFzIGsqbG9nKDIpICsgbG9nKEYpICsgcG9seSB3aGVyZSBwb2x5CQkjCisjCQlhcHByb3hpbWF0ZXMgbG9nKDErdSksIHUgPSAoWS1GKS9GLgkJCSMKKyMJCQkJCQkJCQkjCisjCUltcGxlbWVudGF0aW9uIE5vdGVzOgkJCQkJCSMKKyMJTm90ZSAxLiBUaGVyZSBhcmUgNjQgZGlmZmVyZW50IHBvc3NpYmxlIHZhbHVlcyBmb3IgRiwgdGh1cyA2NAkjCisjCQlsb2coRikncyBuZWVkIHRvIGJlIHRhYnVsYXRlZC4gTW9yZW92ZXIsIHRoZSB2YWx1ZXMgb2YJIworIwkJMS9GIGFyZSBhbHNvIHRhYnVsYXRlZCBzbyB0aGF0IHRoZSBkaXZpc2lvbiBpbiAoWS1GKS9GCSMKKyMJCWNhbiBiZSBwZXJmb3JtZWQgYnkgYSBtdWx0aXBsaWNhdGlvbi4JCQkjCisjCQkJCQkJCQkJIworIwlOb3RlIDIuIEluIFN0ZXAgMiBvZiBsb2ducDEsIGluIG9yZGVyIHRvIHByZXNlcnZlZCBhY2N1cmFjeSwJIworIwkJdGhlIHZhbHVlIFktRiBoYXMgdG8gYmUgY2FsY3VsYXRlZCBjYXJlZnVsbHkgd2hlbgkjCisjCQkxLzIgPD0gWCA8IDMvMi4JCQkJCQkjCisjCQkJCQkJCQkJIworIwlOb3RlIDMuIFRvIGZ1bGx5IGV4cGxvaXQgdGhlIHBpcGVsaW5lLCBwb2x5bm9taWFscyBhcmUgdXN1YWxseQkjCisjCQlzZXBhcmF0ZWQgaW50byB0d28gcGFydHMgZXZhbHVhdGVkIGluZGVwZW5kZW50bHkgYmVmb3JlCSMKKyMJCWJlaW5nIGFkZGVkIHVwLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMT0dPRjI6CisJbG9uZwkJMHgzRkZFMDAwMCwweEIxNzIxN0Y3LDB4RDFDRjc5QUMsMHgwMDAwMDAwMAorCitvbmU6CisJbG9uZwkJMHgzRjgwMDAwMAoremVybzoKKwlsb25nCQkweDAwMDAwMDAwCitpbmZ0eToKKwlsb25nCQkweDdGODAwMDAwCituZWdvbmU6CisJbG9uZwkJMHhCRjgwMDAwMAorCitMT0dBNjoKKwlsb25nCQkweDNGQzI0OTlBLDB4QjVFNDA0MEIKK0xPR0E1OgorCWxvbmcJCTB4QkZDNTU1QjUsMHg4NDhDQjdEQgorCitMT0dBNDoKKwlsb25nCQkweDNGQzk5OTk5LDB4OTg3RDg3MzAKK0xPR0EzOgorCWxvbmcJCTB4QkZDRkZGRkYsMHhGRjZGN0U5NworCitMT0dBMjoKKwlsb25nCQkweDNGRDU1NTU1LDB4NTU1NTU1QTQKK0xPR0ExOgorCWxvbmcJCTB4QkZFMDAwMDAsMHgwMDAwMDAwOAorCitMT0dCNToKKwlsb25nCQkweDNGMTc1NDk2LDB4QUREN0RBRDYKK0xPR0I0OgorCWxvbmcJCTB4M0YzQzcxQzIsMHhGRTgwQzdFMAorCitMT0dCMzoKKwlsb25nCQkweDNGNjI0OTI0LDB4OTI4QkNDRkYKK0xPR0IyOgorCWxvbmcJCTB4M0Y4OTk5OTksMHg5OTk5OTVFQworCitMT0dCMToKKwlsb25nCQkweDNGQjU1NTU1LDB4NTU1NTU1NTUKK1RXTzoKKwlsb25nCQkweDQwMDAwMDAwLDB4MDAwMDAwMDAKKworTFRIT0xEOgorCWxvbmcJCTB4M2Y5OTAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworTE9HVEJMOgorCWxvbmcJCTB4M0ZGRTAwMDAsMHhGRTAzRjgwRiwweEUwM0Y4MEZFLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRjcwMDAwLDB4RkYwMTUzNTgsMHg4MzNDNDdFMiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEZBMjMyQ0YyLDB4NTIxMzhBQzAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGOTAwMDAsMHhCREM4RDgzRSwweEFEODhENTQ5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RjY2MDNEOTgsMHgwRjY2MDNEQSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZBMDAwMCwweDlDRjQzRENGLDB4RjVFQUZENDgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhGMkI5RDY0OCwweDBGMkI5RDY1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkEwMDAwLDB4REExNkVCODgsMHhDQjhERjYxNCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEVGMkVCNzFGLDB4QzQzNDUyMzgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHg4QjI5Qjc3NSwweDFCRDcwNzQzLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RUJCREIyQTUsMHhDMTYxOUM4QywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweEE4RDgzOUY4LDB4MzBDMUZCNDksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhFODY1QUM3QiwweDc2MDNBMTk3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4QzYxQTJFQjEsMHg4Q0Q5MDdBRCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEU1MjU5ODJBLDB4RjcwQzg4MEUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHhFMkYyQTQ3QSwweERFM0ExOEFGLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RTFGQzc4MEUsMHgxRkM3ODBFMiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweEZGNjQ4OThFLDB4REY1NUQ1NTEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhERUU5NUM0QywweEEwMzdCQTU3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4OERCOTU2QTksMHg3QjNEMDE0OCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweERCRUI2MUVFLDB4RDE5QzU5NTgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHg5QjhGRTEwMCwweEY0N0JBMURFLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RDkwMUIyMDMsMHg2NDA2QzgwRSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEE5MzcyRjFELDB4MERBMUJEMTcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhENjJCODBENiwweDJCODBENjJDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4QjZCMDdGMzgsMHhDRTkwRTQ2QiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEQzNjgwRDM2LDB4ODBEMzY4MEQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhDM0ZEMDMyOSwweDA2NDg4NDgxLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RDBCNjlGQ0IsMHhEMjU4MEQwQiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEQxMURFMEZGLDB4MTVBQjE4Q0EsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhDRTE2OEE3NywweDI1MDgwQ0UxLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4REUxNDMzQTEsMHg2QzY2QjE1MCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweENCODcyN0MwLDB4NjVDMzkzRTAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhFQUUxMEI1QSwweDdEREM4QURELDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QzkwN0RBNEUsMHg4NzExNDZBRCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEY3ODU2RTVFLDB4RTJDOUIyOTEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhDNjk4MEM2OSwweDgwQzY5ODBDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4ODIwMTJDQTUsMHhBNjgyMDZENywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEM0MzcyRjg1LDB4NUQ4MjRDQTYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHg4ODJDNUZDRCwweDcyNTZBOEM1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QzFFNEJCRDUsMHg5NUY2RTk0NywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweDhFNDRDNjBCLDB4NENDRkQ3REUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhCRkEwMkZFOCwweDBCRkEwMkZGLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4OTQ0QUQwOUUsMHhGNDM1MUFGNiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEJENjkxMDQ3LDB4MDc2NjFBQTMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHg5QTNFRUNENCwweEMzRUFBNkIyLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QkIzRUU3MjEsMHhBNTREODgwQywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEEwMjE4NDM0LDB4MzUzRjFERTgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhCOTIxNDNGQSwweDM2RjVFMDJFLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4QTVGMkZDQUIsMHhCQkM1MDZEQSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEI3MEZCQjVBLDB4MTlCRTM2NTksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhBQkIzQjhCQSwweDJBRDM2MkE1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QjUwOUU2OEEsMHg5Qjk0ODIxRiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEIxNjQxNzk1LDB4Q0UzQ0E5N0IsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhCMzBGNjM1MiwweDg5MTdDODBCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4QjcwNDc1NTEsMHg1RDBGMUM2MSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEIxMUZEM0I4LDB4MEIxMUZEM0MsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhCQzk1MkFGRSwweEVBM0QxM0UxLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QUYzQUREQzYsMHg4MEFGM0FERSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEMyMTY4RUQwLDB4RjQ1OEJBNEEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBRDYwMkI1OCwweDBBRDYwMkI2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4Qzc4OEY0MzksMHhCMzE2M0JGMSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEFCOEY2OUUyLDB4ODM1OUNEMTEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhDQ0VDQUMwOCwweEJGMDQ1NjVELDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QTlDODRBNDcsMHhBMDdGNTYzOCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEQyNDIwNDg3LDB4MkREODUxNjAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBODBBODBBOCwweDBBODBBODBCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4RDc4OTQ5OTIsMHgzQkMzNTg4QSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEE2NTVDNDM5LDB4MkQ3QjczQTgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhEQ0MyQzRCNCwweDk4ODdEQUNDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QTRBOUNGMUQsMHg5NjgzMzc1MSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEUxRUVCRDNFLDB4NkQ2QTZCOUUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBMzA2NUUzRiwweEFFN0NEMEUwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4RTcwRDc4NUMsMHgyRjlGNUJEQywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEExNkIzMTJFLDB4QThGQzM3N0QsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhFQzFGMzkyQywweDUxNzlGMjgzLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OUZEODA5RkQsMHg4MDlGRDgwQSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEYxMjQ0MEQzLDB4RTM2MTMwRTYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5RTRDQUQyMywweERENUYzQTIwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4RjYxQ0NFOTIsMHgzNDY2MDBCQiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDlDQzhFMTYwLDB4QzNGQjE5QjksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhGQjA5MUZEMywweDgxNDU2MzBBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OUI0QzZGOUUsMHhGMDNBM0NBQSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEZGRTk3MDQyLDB4QkZBNEMyQUQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5OUQ3MjJEQSwweEJERTU4RjA2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4ODI1RUZDRUQsMHg0OTM2OTMzMCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDk4NjhDODA5LDB4ODY4QzgwOTgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4NEMzN0E3QSwweEI5QTkwNUM5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OTcwMTJFMDIsMHg1QzA0QjgwOSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDg3MjI0QzJFLDB4OEU2NDVGQjcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5NUEwMjU2OCwweDA5NUEwMjU3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4ODk3QjhDQUMsMHg5RjdERTI5OCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDk0NDU4MDk0LDB4NDU4MDk0NDYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4QkNGNTVERSwweEM0Q0QwNUZFLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OTJGMTEzODQsMHgwNDk3ODg5QywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDhFMURDMEZCLDB4ODlFMTI1RTUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5MUEyQjNDNCwweEQ1RTZGODA5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OTA2NkU2OEMsMHg5NTVCNkM5QiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDkwNUEzODYzLDB4M0UwNkM0M0IsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5MkFBREU3NCwweEM3QkU1OUUwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OEYxNzc5RDksMHhGREMzQTIxOSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDk0RTlCRkY2LDB4MTU4NDU2NDMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4RERBNTIwMiwweDM3Njk0ODA5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OTcyM0ExQjcsMHgyMDEzNDIwMywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDhDQTI5QzA0LDB4NjUxNEUwMjMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5OTU4OTlDOCwweDkwRUI4OTkwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OEI3MDM0NEEsMHgxMzlCQzc1QSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDlCODhCREFBLDB4M0EzREFFMkYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4QTQyRjg3MCwweDU2NjlEQjQ2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OURCNDIyNEYsMHhGRkUxMTU3QywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDg5MUFDNzNBLDB4RTk4MTlCNTAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5RkRBREMyNiwweDhCN0ExMkRBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4ODdGNzgwODcsMHhGNzgwODdGOCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEExRkNGRjE3LDB4Q0U3MzNCRDQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4NkQ5MDU0NCwweDdBMzRBQ0M2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QTQxQTlFOEYsMHg1NDQ2RkI5RiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDg1QkYzNzYxLDB4MkNFRTNDOUIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBNjMzQ0Q3RSwweDY3NzFDRDhCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4ODRBOUY5QzgsMHgwODRBOUY5RCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEE4NDg5RTYwLDB4MEI0MzVBNUUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4Mzk5MzA1MiwweDNGQkUzMzY4LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QUE1OTIzM0MsMHhDQ0E0QkQ0OSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDgyOENCRkJFLDB4QjlBMDIwQTMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBQzY1NkRBRSwweDZCQ0M0OTg1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4ODE4NDhEQTgsMHhGQUYwRDI3NywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEFFNkQ4RUUzLDB4NjBCQjI0NjgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4MDgwODA4MCwweDgwODA4MDgxLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QjA3MTk3QTIsMHgzQzQ2QzY1NCwweDAwMDAwMDAwCisKKwlzZXQJCUFESkssTF9TQ1IxCisKKwlzZXQJCVgsRlBfU0NSMAorCXNldAkJWERDQVJFLFgrMgorCXNldAkJWEZSQUMsWCs0CisKKwlzZXQJCUYsRlBfU0NSMQorCXNldAkJRkZSQUMsRis0CisKKwlzZXQJCUtMT0cyLEZQX1NDUjAKKworCXNldAkJU0FWRVUsRlBfU0NSMAorCisJZ2xvYmFsCQlzbG9nbgorIy0tRU5UUlkgUE9JTlQgRk9SIExPRyhYKSBGT1IgWCBGSU5JVEUsIE5PTi1aRVJPLCBOT1QgTkFOJ1MKK3Nsb2duOgorCWZtb3YueAkJKCVhMCksJWZwMAkJIyBMT0FEIElOUFVUCisJbW92LmwJCSYweDAwMDAwMDAwLEFESksoJWE2KQorCitMT0dCR046CisjLS1GUENSIFNBVkVEIEFORCBDTEVBUkVELCBJTlBVVCBJUyAyXihBREpLKSpGUDAsIEZQMCBDT05UQUlOUworIy0tQSBGSU5JVEUsIE5PTi1aRVJPLCBOT1JNQUxJWkVEIE5VTUJFUi4KKworCW1vdi5sCQkoJWEwKSwlZDEKKwltb3YudwkJNCglYTApLCVkMQorCisJbW92LmwJCSglYTApLFgoJWE2KQorCW1vdi5sCQk0KCVhMCksWCs0KCVhNikKKwltb3YubAkJOCglYTApLFgrOCglYTYpCisKKwljbXAubAkJJWQxLCYwCQkJIyBDSEVDSyBJRiBYIElTIE5FR0FUSVZFCisJYmx0LncJCUxPR05FRwkJCSMgTE9HIE9GIE5FR0FUSVZFIEFSR1VNRU5UIElTIElOVkFMSUQKKyMgWCBJUyBQT1NJVElWRSwgQ0hFQ0sgSUYgWCBJUyBORUFSIDEKKwljbXAubAkJJWQxLCYweDNmZmVmMDdkCQkjIElTIFggPCAxNS8xNj8KKwlibHQuYgkJTE9HTUFJTgkJCSMgWUVTCisJY21wLmwJCSVkMSwmMHgzZmZmODg0MQkJIyBJUyBYID4gMTcvMTY/CisJYmxlLncJCUxPR05FQVIxCQkjIE5PCisKK0xPR01BSU46CisjLS1USElTIFNIT1VMRCBCRSBUSEUgVVNVQUwgQ0FTRSwgWCBOT1QgVkVSWSBDTE9TRSBUTyAxCisKKyMtLVggPSAyXihLKSAqIFksIDEgPD0gWSA8IDIuIFRIVVMsIFkgPSAxLlhYWFhYWFhYLi4uLlhYIElOIEJJTkFSWS4KKyMtLVdFIERFRklORSBGID0gMS5YWFhYWFgxLCBJLkUuIEZJUlNUIDcgQklUUyBPRiBZIEFORCBBVFRBQ0ggQSAxLgorIy0tVEhFIElERUEgSVMgVEhBVCBMT0coWCkgPSBLKkxPRzIgKyBMT0coWSkKKyMtLQkJCSA9IEsqTE9HMiArIExPRyhGKSArIExPRygxICsgKFktRikvRikuCisjLS1OT1RFIFRIQVQgVSA9IChZLUYpL0YgSVMgVkVSWSBTTUFMTCBBTkQgVEhVUyBBUFBST1hJTUFUSU5HCisjLS1MT0coMStVKSBDQU4gQkUgVkVSWSBFRkZJQ0lFTlQuCisjLS1BTFNPIE5PVEUgVEhBVCBUSEUgVkFMVUUgMS9GIElTIFNUT1JFRCBJTiBBIFRBQkxFIFNPIFRIQVQgTk8KKyMtLURJVklTSU9OIElTIE5FRURFRCBUTyBDQUxDVUxBVEUgKFktRikvRi4KKworIy0tR0VUIEssIFksIEYsIEFORCBBRERSRVNTIE9GIDEvRi4KKwlhc3IubAkJJjgsJWQxCisJYXNyLmwJCSY4LCVkMQkJCSMgU0hJRlRFRCAxNiBCSVRTLCBCSUFTRUQgRVhQTy4gT0YgWAorCXN1Yi5sCQkmMHgzRkZGLCVkMQkJIyBUSElTIElTIEsKKwlhZGQubAkJQURKSyglYTYpLCVkMQkJIyBBREpVU1QgSywgT1JJR0lOQUwgSU5QVVQgTUFZIEJFICBERU5PUk0uCisJbGVhCQlMT0dUQkwoJXBjKSwlYTAJCSMgQkFTRSBBRERSRVNTIE9GIDEvRiBBTkQgTE9HKEYpCisJZm1vdi5sCQklZDEsJWZwMQkJIyBDT05WRVJUIEsgVE8gRkxPQVRJTkctUE9JTlQgRk9STUFUCisKKyMtLVdISUxFIFRIRSBDT05WRVJTSU9OIElTIEdPSU5HIE9OLCBXRSBHRVQgRiBBTkQgQUREUkVTUyBPRiAxL0YKKwltb3YubAkJJjB4M0ZGRjAwMDAsWCglYTYpCSMgWCBJUyBOT1cgWSwgSS5FLiAyXigtSykqWAorCW1vdi5sCQlYRlJBQyglYTYpLEZGUkFDKCVhNikKKwlhbmQubAkJJjB4RkUwMDAwMDAsRkZSQUMoJWE2KQkjIEZJUlNUIDcgQklUUyBPRiBZCisJb3IubAkJJjB4MDEwMDAwMDAsRkZSQUMoJWE2KQkjIEdFVCBGOiBBVFRBQ0ggQSAxIEFUIFRIRSBFSUdIVEggQklUCisJbW92LmwJCUZGUkFDKCVhNiksJWQxCSMgUkVBRFkgVE8gR0VUIEFERFJFU1MgT0YgMS9GCisJYW5kLmwJCSYweDdFMDAwMDAwLCVkMQorCWFzci5sCQkmOCwlZDEKKwlhc3IubAkJJjgsJWQxCisJYXNyLmwJCSY0LCVkMQkJCSMgU0hJRlRFRCAyMCwgRDAgSVMgVEhFIERJU1BMQUNFTUVOVAorCWFkZC5sCQklZDEsJWEwCQkJIyBBMCBJUyBUSEUgQUREUkVTUyBGT1IgMS9GCisKKwlmbW92LngJCVgoJWE2KSwlZnAwCisJbW92LmwJCSYweDNmZmYwMDAwLEYoJWE2KQorCWNsci5sCQlGKzgoJWE2KQorCWZzdWIueAkJRiglYTYpLCVmcDAJCSMgWS1GCisJZm1vdm0ueAkJJjB4YywtKCVzcCkJCSMgU0FWRSBGUDItMyBXSElMRSBGUDAgSVMgTk9UIFJFQURZCisjLS1TVU1NQVJZOiBGUDAgSVMgWS1GLCBBMCBJUyBBRERSRVNTIE9GIDEvRiwgRlAxIElTIEsKKyMtLVJFR0lTVEVSUyBTQVZFRDogRlBDUiwgRlAxLCBGUDIKKworTFAxQ09OVDE6CisjLS1BTiBSRS1FTlRSWSBQT0lOVCBGT1IgTE9HTlAxCisJZm11bC54CQkoJWEwKSwlZnAwCQkjIEZQMCBJUyBVID0gKFktRikvRgorCWZtdWwueAkJTE9HT0YyKCVwYyksJWZwMQkjIEdFVCBLKkxPRzIgV0hJTEUgRlAwIElTIE5PVCBSRUFEWQorCWZtb3YueAkJJWZwMCwlZnAyCisJZm11bC54CQklZnAyLCVmcDIJCSMgRlAyIElTIFY9VSpVCisJZm1vdi54CQklZnAxLEtMT0cyKCVhNikJCSMgUFVUIEsqTE9HMiBJTiBNRU1FT1JZLCBGUkVFIEZQMQorCisjLS1MT0coMStVKSBJUyBBUFBST1hJTUFURUQgQlkKKyMtLVUgKyBWKihBMStVKihBMitVKihBMytVKihBNCtVKihBNStVKkE2KSkpKSkgV0hJQ0ggSVMKKyMtLVtVICsgViooQTErViooQTMrVipBNSkpXSAgKyAgW1UqViooQTIrViooQTQrVipBNikpXQorCisJZm1vdi54CQklZnAyLCVmcDMKKwlmbW92LngJCSVmcDIsJWZwMQorCisJZm11bC5kCQlMT0dBNiglcGMpLCVmcDEJCSMgVipBNgorCWZtdWwuZAkJTE9HQTUoJXBjKSwlZnAyCQkjIFYqQTUKKworCWZhZGQuZAkJTE9HQTQoJXBjKSwlZnAxCQkjIEE0K1YqQTYKKwlmYWRkLmQJCUxPR0EzKCVwYyksJWZwMgkJIyBBMytWKkE1CisKKwlmbXVsLngJCSVmcDMsJWZwMQkJIyBWKihBNCtWKkE2KQorCWZtdWwueAkJJWZwMywlZnAyCQkjIFYqKEEzK1YqQTUpCisKKwlmYWRkLmQJCUxPR0EyKCVwYyksJWZwMQkJIyBBMitWKihBNCtWKkE2KQorCWZhZGQuZAkJTE9HQTEoJXBjKSwlZnAyCQkjIEExK1YqKEEzK1YqQTUpCisKKwlmbXVsLngJCSVmcDMsJWZwMQkJIyBWKihBMitWKihBNCtWKkE2KSkKKwlhZGQubAkJJjE2LCVhMAkJCSMgQUREUkVTUyBPRiBMT0coRikKKwlmbXVsLngJCSVmcDMsJWZwMgkJIyBWKihBMStWKihBMytWKkE1KSkKKworCWZtdWwueAkJJWZwMCwlZnAxCQkjIFUqViooQTIrViooQTQrVipBNikpCisJZmFkZC54CQklZnAyLCVmcDAJCSMgVStWKihBMStWKihBMytWKkE1KSkKKworCWZhZGQueAkJKCVhMCksJWZwMQkJIyBMT0coRikrVSpWKihBMitWKihBNCtWKkE2KSkKKwlmbW92bS54CQkoJXNwKSssJjB4MzAJCSMgUkVTVE9SRSBGUDItMworCWZhZGQueAkJJWZwMSwlZnAwCQkjIEZQMCBJUyBMT0coRikgKyBMT0coMStVKQorCisJZm1vdi5sCQklZDAsJWZwY3IKKwlmYWRkLngJCUtMT0cyKCVhNiksJWZwMAkJIyBGSU5BTCBBREQKKwlicmEJCXRfaW54MgorCisKK0xPR05FQVIxOgorCisjIGlmIHRoZSBpbnB1dCBpcyBleGFjdGx5IGVxdWFsIHRvIG9uZSwgdGhlbiBleGl0IHRocm91Z2ggbGRfcHplcm8uCisjIGlmIHRoZXNlIDIgbGluZXMgd2VyZW4ndCBoZXJlLCB0aGUgY29ycmVjdCBhbnN3ZXIgd291bGQgYmUgcmV0dXJuZWQKKyMgYnV0IHRoZSBJTkVYMiBiaXQgd291bGQgYmUgc2V0LgorCWZjbXAuYgkJJWZwMCwmMHgxCQkjIGlzIGl0IGVxdWFsIHRvIG9uZT8KKwlmYmVxLmwJCWxkX3B6ZXJvCQkjIHllcworCisjLS1SRUdJU1RFUlMgU0FWRUQ6IEZQQ1IsIEZQMS4gRlAwIENPTlRBSU5TIFRIRSBJTlBVVC4KKwlmbW92LngJCSVmcDAsJWZwMQorCWZzdWIucwkJb25lKCVwYyksJWZwMQkJIyBGUDEgSVMgWC0xCisJZmFkZC5zCQlvbmUoJXBjKSwlZnAwCQkjIEZQMCBJUyBYKzEKKwlmYWRkLngJCSVmcDEsJWZwMQkJIyBGUDEgSVMgMihYLTEpCisjLS1MT0coWCkgPSBMT0coMStVLzIpLUxPRygxLVUvMikgV0hJQ0ggSVMgQU4gT0REIFBPTFlOT01JQUwKKyMtLUlOIFUsIFUgPSAyKFgtMSkvKFgrMSkgPSBGUDEvRlAwCisKK0xQMUNPTlQyOgorIy0tVEhJUyBJUyBBTiBSRS1FTlRSWSBQT0lOVCBGT1IgTE9HTlAxCisJZmRpdi54CQklZnAwLCVmcDEJCSMgRlAxIElTIFUKKwlmbW92bS54CQkmMHhjLC0oJXNwKQkJIyBTQVZFIEZQMi0zCisjLS1SRUdJU1RFUlMgU0FWRUQgQVJFIE5PVyBGUENSLEZQMSxGUDIsRlAzCisjLS1MRVQgVj1VKlUsIFc9VipWLCBDQUxDVUxBVEUKKyMtLVUgKyBVKlYqKEIxICsgViooQjIgKyBWKihCMyArIFYqKEI0ICsgVipCNSkpKSkgQlkKKyMtLVUgKyBVKlYqKCAgW0IxICsgVyooQjMgKyBXKkI1KV0gICsgIFtWKihCMiArIFcqQjQpXSAgKQorCWZtb3YueAkJJWZwMSwlZnAwCisJZm11bC54CQklZnAwLCVmcDAJCSMgRlAwIElTIFYKKwlmbW92LngJCSVmcDEsU0FWRVUoJWE2KQkJIyBTVE9SRSBVIElOIE1FTU9SWSwgRlJFRSBGUDEKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwueAkJJWZwMSwlZnAxCQkjIEZQMSBJUyBXCisKKwlmbW92LmQJCUxPR0I1KCVwYyksJWZwMworCWZtb3YuZAkJTE9HQjQoJXBjKSwlZnAyCisKKwlmbXVsLngJCSVmcDEsJWZwMwkJIyBXKkI1CisJZm11bC54CQklZnAxLCVmcDIJCSMgVypCNAorCisJZmFkZC5kCQlMT0dCMyglcGMpLCVmcDMJCSMgQjMrVypCNQorCWZhZGQuZAkJTE9HQjIoJXBjKSwlZnAyCQkjIEIyK1cqQjQKKworCWZtdWwueAkJJWZwMywlZnAxCQkjIFcqKEIzK1cqQjUpLCBGUDMgUkVMRUFTRUQKKworCWZtdWwueAkJJWZwMCwlZnAyCQkjIFYqKEIyK1cqQjQpCisKKwlmYWRkLmQJCUxPR0IxKCVwYyksJWZwMQkJIyBCMStXKihCMytXKkI1KQorCWZtdWwueAkJU0FWRVUoJWE2KSwlZnAwCQkjIEZQMCBJUyBVKlYKKworCWZhZGQueAkJJWZwMiwlZnAxCQkjIEIxK1cqKEIzK1cqQjUpICsgViooQjIrVypCNCksIEZQMiBSRUxFQVNFRAorCWZtb3ZtLngJCSglc3ApKywmMHgzMAkJIyBGUDItMyBSRVNUT1JFRAorCisJZm11bC54CQklZnAxLCVmcDAJCSMgVSpWKiggW0IxK1cqKEIzK1cqQjUpXSArIFtWKihCMitXKkI0KV0gKQorCisJZm1vdi5sCQklZDAsJWZwY3IKKwlmYWRkLngJCVNBVkVVKCVhNiksJWZwMAorCWJyYQkJdF9pbngyCisKKyMtLVJFR0lTVEVSUyBTQVZFRCBGUENSLiBMT0coLVZFKSBJUyBJTlZBTElECitMT0dORUc6CisJYnJhCQl0X29wZXJyCisKKwlnbG9iYWwJCXNsb2duZAorc2xvZ25kOgorIy0tRU5UUlkgUE9JTlQgRk9SIExPRyhYKSBGT1IgREVOT1JNQUxJWkVEIElOUFVUCisKKwltb3YubAkJJi0xMDAsQURKSyglYTYpCQkjIElOUFVUID0gMl4oQURKSykgKiBGUDAKKworIy0tLS1ub3JtYWxpemUgdGhlIGlucHV0IHZhbHVlIGJ5IGxlZnQgc2hpZnRpbmcgayBiaXRzIChrIHRvIGJlIGRldGVybWluZWQKKyMtLS0tYmVsb3cpLCBhZGp1c3RpbmcgZXhwb25lbnQgYW5kIHN0b3JpbmcgLWsgdG8gIEFESksKKyMtLS0tdGhlIHZhbHVlIFRXT1RPMTAwIGlzIG5vIGxvbmdlciBuZWVkZWQuCisjLS0tLU5vdGUgdGhhdCB0aGlzIGNvZGUgYXNzdW1lcyB0aGUgZGVub3JtYWxpemVkIGlucHV0IGlzIE5PTi1aRVJPLgorCisJbW92bS5sCQkmMHgzZjAwLC0oJXNwKQkJIyBzYXZlIHNvbWUgcmVnaXN0ZXJzICB7ZDItZDd9CisJbW92LmwJCSglYTApLCVkMwkJIyBEMyBpcyBleHBvbmVudCBvZiBzbWFsbGVzdCBub3JtLiAjCisJbW92LmwJCTQoJWEwKSwlZDQKKwltb3YubAkJOCglYTApLCVkNQkJIyAoRDQsRDUpIGlzIChIaV9YLExvX1gpCisJY2xyLmwJCSVkMgkJCSMgRDIgdXNlZCBmb3IgaG9sZGluZyBLCisKKwl0c3QubAkJJWQ0CisJYm5lLmIJCUhpX25vdDAKKworSGlfMDoKKwltb3YubAkJJWQ1LCVkNAorCWNsci5sCQklZDUKKwltb3YubAkJJjMyLCVkMgorCWNsci5sCQklZDYKKwliZmZmbwkJJWQ0eyYwOiYzMn0sJWQ2CisJbHNsLmwJCSVkNiwlZDQKKwlhZGQubAkJJWQ2LCVkMgkJCSMgKEQzLEQ0LEQ1KSBpcyBub3JtYWxpemVkCisKKwltb3YubAkJJWQzLFgoJWE2KQorCW1vdi5sCQklZDQsWEZSQUMoJWE2KQorCW1vdi5sCQklZDUsWEZSQUMrNCglYTYpCisJbmVnLmwJCSVkMgorCW1vdi5sCQklZDIsQURKSyglYTYpCisJZm1vdi54CQlYKCVhNiksJWZwMAorCW1vdm0ubAkJKCVzcCkrLCYweGZjCQkjIHJlc3RvcmUgcmVnaXN0ZXJzIHtkMi1kN30KKwlsZWEJCVgoJWE2KSwlYTAKKwlicmEudwkJTE9HQkdOCQkJIyBiZWdpbiByZWd1bGFyIGxvZyhYKQorCitIaV9ub3QwOgorCWNsci5sCQklZDYKKwliZmZmbwkJJWQ0eyYwOiYzMn0sJWQ2CQkjIGZpbmQgZmlyc3QgMQorCW1vdi5sCQklZDYsJWQyCQkJIyBnZXQgaworCWxzbC5sCQklZDYsJWQ0CisJbW92LmwJCSVkNSwlZDcJCQkjIGEgY29weSBvZiBENQorCWxzbC5sCQklZDYsJWQ1CisJbmVnLmwJCSVkNgorCWFkZC5sCQkmMzIsJWQ2CisJbHNyLmwJCSVkNiwlZDcKKwlvci5sCQklZDcsJWQ0CQkJIyAoRDMsRDQsRDUpIG5vcm1hbGl6ZWQKKworCW1vdi5sCQklZDMsWCglYTYpCisJbW92LmwJCSVkNCxYRlJBQyglYTYpCisJbW92LmwJCSVkNSxYRlJBQys0KCVhNikKKwluZWcubAkJJWQyCisJbW92LmwJCSVkMixBREpLKCVhNikKKwlmbW92LngJCVgoJWE2KSwlZnAwCisJbW92bS5sCQkoJXNwKSssJjB4ZmMJCSMgcmVzdG9yZSByZWdpc3RlcnMge2QyLWQ3fQorCWxlYQkJWCglYTYpLCVhMAorCWJyYS53CQlMT0dCR04JCQkjIGJlZ2luIHJlZ3VsYXIgbG9nKFgpCisKKwlnbG9iYWwJCXNsb2ducDEKKyMtLUVOVFJZIFBPSU5UIEZPUiBMT0coMStYKSBGT1IgWCBGSU5JVEUsIE5PTi1aRVJPLCBOT1QgTkFOJ1MKK3Nsb2ducDE6CisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIExPQUQgSU5QVVQKKwlmYWJzLngJCSVmcDAJCQkjIHRlc3QgbWFnbml0dWRlCisJZmNtcC54CQklZnAwLExUSE9MRCglcGMpCSMgY29tcGFyZSB3aXRoIG1pbiB0aHJlc2hvbGQKKwlmYmd0LncJCUxQMVJFQUwJCQkjIGlmIGdyZWF0ZXIsIGNvbnRpbnVlCisJZm1vdi5sCQklZDAsJWZwY3IKKwltb3YuYgkJJkZNT1ZfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNT1ZFCisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIHJldHVybiBzaWduZWQgYXJndW1lbnQKKwlicmEJCXRfY2F0Y2gKKworTFAxUkVBTDoKKwlmbW92LngJCSglYTApLCVmcDAJCSMgTE9BRCBJTlBVVAorCW1vdi5sCQkmMHgwMDAwMDAwMCxBREpLKCVhNikKKwlmbW92LngJCSVmcDAsJWZwMQkJIyBGUDEgSVMgSU5QVVQgWgorCWZhZGQucwkJb25lKCVwYyksJWZwMAkJIyBYIDo9IFJPVU5EKDErWikKKwlmbW92LngJCSVmcDAsWCglYTYpCisJbW92LncJCVhGUkFDKCVhNiksWERDQVJFKCVhNikKKwltb3YubAkJWCglYTYpLCVkMQorCWNtcC5sCQklZDEsJjAKKwlibGUudwkJTFAxTkVHMAkJCSMgTE9HIE9GIFpFUk8gT1IgLVZFCisJY21wLmwJCSVkMSwmMHgzZmZlODAwMAkJIyBJUyBCT1VORFMgWzEvMiwzLzJdPworCWJsdC53CQlMT0dNQUlOCisJY21wLmwJCSVkMSwmMHgzZmZmYzAwMAorCWJndC53CQlMT0dNQUlOCisjLS1JRiAxK1ogPiAzLzIgT1IgMStaIDwgMS8yLCBUSEVOIFgsIFdISUNIIElTIFJPVU5ESU5HIDErWiwKKyMtLUNPTlRBSU5TIEFUIExFQVNUIDYzIEJJVFMgT0YgSU5GT1JNQVRJT04gT0YgWi4gSU4gVEhBVCBDQVNFLAorIy0tU0lNUExZIElOVk9LRSBMT0coWCkgRk9SIExPRygxK1opLgorCitMUDFORUFSMToKKyMtLU5FWFQgU0VFIElGIEVYUCgtMS8xNikgPCBYIDwgRVhQKDEvMTYpCisJY21wLmwJCSVkMSwmMHgzZmZlZjA3ZAorCWJsdC53CQlMUDFDQVJFCisJY21wLmwJCSVkMSwmMHgzZmZmODg0MQorCWJndC53CQlMUDFDQVJFCisKK0xQMU9ORTE2OgorIy0tRVhQKC0xLzE2KSA8IFggPCBFWFAoMS8xNikuIExPRygxK1opID0gTE9HKDErVS8yKSAtIExPRygxLVUvMikKKyMtLVdIRVJFIFUgPSAyWi8oMitaKSA9IDJaLygxK1gpLgorCWZhZGQueAkJJWZwMSwlZnAxCQkjIEZQMSBJUyAyWgorCWZhZGQucwkJb25lKCVwYyksJWZwMAkJIyBGUDAgSVMgMStYCisjLS1VID0gRlAxL0ZQMAorCWJyYS53CQlMUDFDT05UMgorCitMUDFDQVJFOgorIy0tSEVSRSBXRSBVU0UgVEhFIFVTVUFMIFRBQkxFIERSSVZFTiBBUFBST0FDSC4gQ0FSRSBIQVMgVE8gQkUKKyMtLVRBS0VOIEJFQ0FVU0UgMStaIENBTiBIQVZFIDY3IEJJVFMgT0YgSU5GT1JNQVRJT04gQU5EIFdFIE1VU1QKKyMtLVBSRVNFUlZFIEFMTCBUSEUgSU5GT1JNQVRJT04uIEJFQ0FVU0UgMStaIElTIElOIFsxLzIsMy8yXSwKKyMtLVRIRVJFIEFSRSBPTkxZIFRXTyBDQVNFUy4KKyMtLUNBU0UgMTogMStaIDwgMSwgVEhFTiBLID0gLTEgQU5EIFktRiA9ICgyLUYpICsgMloKKyMtLUNBU0UgMjogMStaID4gMSwgVEhFTiBLID0gMCAgQU5EIFktRiA9ICgxLUYpICsgWgorIy0tT04gUkVUVVJOSU5HIFRPIExQMUNPTlQxLCBXRSBNVVNUIEhBVkUgSyBJTiBGUDEsIEFERFJFU1MgT0YKKyMtLSgxL0YpIElOIEEwLCBZLUYgSU4gRlAwLCBBTkQgRlAyIFNBVkVELgorCisJbW92LmwJCVhGUkFDKCVhNiksRkZSQUMoJWE2KQorCWFuZC5sCQkmMHhGRTAwMDAwMCxGRlJBQyglYTYpCisJb3IubAkJJjB4MDEwMDAwMDAsRkZSQUMoJWE2KQkjIEYgT0JUQUlORUQKKwljbXAubAkJJWQxLCYweDNGRkY4MDAwCQkjIFNFRSBJRiAxK1ogPiAxCisJYmdlLmIJCUtJU1pFUk8KKworS0lTTkVHMToKKwlmbW92LnMJCVRXTyglcGMpLCVmcDAKKwltb3YubAkJJjB4M2ZmZjAwMDAsRiglYTYpCisJY2xyLmwJCUYrOCglYTYpCisJZnN1Yi54CQlGKCVhNiksJWZwMAkJIyAyLUYKKwltb3YubAkJRkZSQUMoJWE2KSwlZDEKKwlhbmQubAkJJjB4N0UwMDAwMDAsJWQxCisJYXNyLmwJCSY4LCVkMQorCWFzci5sCQkmOCwlZDEKKwlhc3IubAkJJjQsJWQxCQkJIyBEMCBDT05UQUlOUyBESVNQTEFDRU1FTlQgRk9SIDEvRgorCWZhZGQueAkJJWZwMSwlZnAxCQkjIEdFVCAyWgorCWZtb3ZtLngJCSYweGMsLSglc3ApCQkjIFNBVkUgRlAyICB7JWZwMi8lZnAzfQorCWZhZGQueAkJJWZwMSwlZnAwCQkjIEZQMCBJUyBZLUYgPSAoMi1GKSsyWgorCWxlYQkJTE9HVEJMKCVwYyksJWEwCQkjIEEwIElTIEFERFJFU1MgT0YgMS9GCisJYWRkLmwJCSVkMSwlYTAKKwlmbW92LnMJCW5lZ29uZSglcGMpLCVmcDEJIyBGUDEgSVMgSyA9IC0xCisJYnJhLncJCUxQMUNPTlQxCisKK0tJU1pFUk86CisJZm1vdi5zCQlvbmUoJXBjKSwlZnAwCisJbW92LmwJCSYweDNmZmYwMDAwLEYoJWE2KQorCWNsci5sCQlGKzgoJWE2KQorCWZzdWIueAkJRiglYTYpLCVmcDAJCSMgMS1GCisJbW92LmwJCUZGUkFDKCVhNiksJWQxCisJYW5kLmwJCSYweDdFMDAwMDAwLCVkMQorCWFzci5sCQkmOCwlZDEKKwlhc3IubAkJJjgsJWQxCisJYXNyLmwJCSY0LCVkMQorCWZhZGQueAkJJWZwMSwlZnAwCQkjIEZQMCBJUyBZLUYKKwlmbW92bS54CQkmMHhjLC0oJXNwKQkJIyBGUDIgU0FWRUQgeyVmcDIvJWZwM30KKwlsZWEJCUxPR1RCTCglcGMpLCVhMAorCWFkZC5sCQklZDEsJWEwCQkJIyBBMCBJUyBBRERSRVNTIE9GIDEvRgorCWZtb3YucwkJemVybyglcGMpLCVmcDEJCSMgRlAxIElTIEsgPSAwCisJYnJhLncJCUxQMUNPTlQxCisKK0xQMU5FRzA6CisjLS1GUENSIFNBVkVELiBEMCBJUyBYIElOIENPTVBBQ1QgRk9STS4KKwljbXAubAkJJWQxLCYwCisJYmx0LmIJCUxQMU5FRworTFAxWkVSTzoKKwlmbW92LnMJCW5lZ29uZSglcGMpLCVmcDAKKworCWZtb3YubAkJJWQwLCVmcGNyCisJYnJhCQl0X2R6CisKK0xQMU5FRzoKKwlmbW92LnMJCXplcm8oJXBjKSwlZnAwCisKKwlmbW92LmwJCSVkMCwlZnBjcgorCWJyYQkJdF9vcGVycgorCisJZ2xvYmFsCQlzbG9nbnAxZAorIy0tRU5UUlkgUE9JTlQgRk9SIExPRygxK1opIEZPUiBERU5PUk1BTElaRUQgSU5QVVQKKyMgU2ltcGx5IHJldHVybiB0aGUgZGVub3JtCitzbG9nbnAxZDoKKwlicmEJCXRfZXh0ZG5ybQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNhdGFuaCgpOiAgY29tcHV0ZXMgdGhlIGludmVyc2UgaHlwZXJib2xpYyB0YW5nZW50IG9mIGEgbm9ybSBpbnB1dAkjCisjIHNhdGFuaGQoKTogY29tcHV0ZXMgdGhlIGludmVyc2UgaHlwZXJib2xpYyB0YW5nZW50IG9mIGEgZGVub3JtIGlucHV0CSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCisjCWQwID0gcm91bmQgcHJlY2lzaW9uLG1vZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IGFyY3RhbmgoWCkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAzIHVscHMgaW4JNjQgc2lnbmlmaWNhbnQgYml0LAkjCisjCWkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseQkjCisjCXJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMJIworIwlpbiBkb3VibGUgcHJlY2lzaW9uLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCQkJCQkJCQkJIworIwlBVEFOSAkJCQkJCQkJIworIwkxLiBJZiB8WHwgPj0gMSwgZ28gdG8gMy4JCQkJCSMKKyMJCQkJCQkJCQkjCisjCTIuICh8WHwgPCAxKSBDYWxjdWxhdGUgYXRhbmgoWCkgYnkJCQkJIworIwkJc2duIDo9IHNpZ24oWCkJCQkJCQkjCisjCQl5IDo9IHxYfAkJCQkJCSMKKyMJCXogOj0gMnkvKDEteSkJCQkJCQkjCisjCQlhdGFuaChYKSA6PSBzZ24gKiAoMS8yKSAqIGxvZ3AxKHopCQkJIworIwkJRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJMy4gSWYgfFh8ID4gMSwgZ28gdG8gNS4JCQkJCQkjCisjCQkJCQkJCQkJIworIwk0LiAofFh8ID0gMSkgR2VuZXJhdGUgaW5maW5pdHkgd2l0aCBhbiBhcHByb3ByaWF0ZSBzaWduIGFuZAkjCisjCQlkaXZpZGUtYnktemVybyBieQkJCQkJIworIwkJc2duIDo9IHNpZ24oWCkJCQkJCQkjCisjCQlhdGFuKFgpIDo9IHNnbiAvICgrMCkuCQkJCQkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwk1LiAofFh8ID4gMSkgR2VuZXJhdGUgYW4gaW52YWxpZCBvcGVyYXRpb24gYnkgMCAqIGluZmluaXR5LgkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzYXRhbmgKK3NhdGFuaDoKKwltb3YubAkJKCVhMCksJWQxCisJbW92LncJCTQoJWEwKSwlZDEKKwlhbmQubAkJJjB4N0ZGRkZGRkYsJWQxCisJY21wLmwJCSVkMSwmMHgzRkZGODAwMAorCWJnZS5iCQlBVEFOSEJJRworCisjLS1USElTIElTIFRIRSBVU1VBTCBDQVNFLCB8WHwgPCAxCisjLS1ZID0gfFh8LCBaID0gMlkvKDEtWSksIEFUQU5IKFgpID0gU0lHTihYKSAqICgxLzIpICogTE9HMVAoWikuCisKKwlmYWJzLngJCSglYTApLCVmcDAJCSMgWSA9IHxYfAorCWZtb3YueAkJJWZwMCwlZnAxCisJZm5lZy54CQklZnAxCQkJIyAtWQorCWZhZGQueAkJJWZwMCwlZnAwCQkjIDJZCisJZmFkZC5zCQkmMHgzRjgwMDAwMCwlZnAxCSMgMS1ZCisJZmRpdi54CQklZnAxLCVmcDAJCSMgMlkvKDEtWSkKKwltb3YubAkJKCVhMCksJWQxCisJYW5kLmwJCSYweDgwMDAwMDAwLCVkMQorCW9yLmwJCSYweDNGMDAwMDAwLCVkMQkJIyBTSUdOKFgpKkhBTEYKKwltb3YubAkJJWQxLC0oJXNwKQorCisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBybmQgcHJlYyxtb2RlCisJY2xyLmwJCSVkMAkJCSMgcGFzcyBleHQgcHJlYyxSTgorCWZtb3ZtLngJCSYweDAxLC0oJXNwKQkJIyBzYXZlIFogb24gc3RhY2sKKwlsZWEJCSglc3ApLCVhMAkJIyBwYXNzIHB0ciB0byBaCisJYnNyCQlzbG9nbnAxCQkJIyBMT0cxUChaKQorCWFkZC5sCQkmMHhjLCVzcAkJIyBjbGVhciBaIGZyb20gc3RhY2sKKworCW1vdi5sCQkoJXNwKSssJWQwCQkjIGZldGNoIG9sZCBwcmVjLG1vZGUKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyBsb2FkIGl0CisJbW92LmIJCSZGTVVMX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTVVMCisJZm11bC5zCQkoJXNwKSssJWZwMAorCWJyYQkJdF9jYXRjaAorCitBVEFOSEJJRzoKKwlmYWJzLngJCSglYTApLCVmcDAJCSMgfFh8CisJZmNtcC5zCQklZnAwLCYweDNGODAwMDAwCisJZmJndAkJdF9vcGVycgorCWJyYQkJdF9kegorCisJZ2xvYmFsCQlzYXRhbmhkCisjLS1BVEFOSChYKSA9IFggRk9SIERFTk9STUFMSVpFRCBYCitzYXRhbmhkOgorCWJyYQkJdF9leHRkbnJtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc2xvZzEwKCk6ICBjb21wdXRlcyB0aGUgYmFzZS0xMCBsb2dhcml0aG0gb2YgYSBub3JtYWxpemVkIGlucHV0CSMKKyMgc2xvZzEwZCgpOiBjb21wdXRlcyB0aGUgYmFzZS0xMCBsb2dhcml0aG0gb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJIworIyBzbG9nMigpOiAgIGNvbXB1dGVzIHRoZSBiYXNlLTIgbG9nYXJpdGhtIG9mIGEgbm9ybWFsaXplZCBpbnB1dAkjCisjIHNsb2cyZCgpOiAgY29tcHV0ZXMgdGhlIGJhc2UtMiBsb2dhcml0aG0gb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dAkJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gbG9nXzEwKFgpIG9yIGxvZ18yKFgpCQkJCQkjCisjCQkJCQkJCQkJIworIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAxLjcgdWxwcyBpbiA2NCBzaWduaWZpY2FudCBiaXQsCSMKKyMJaS5lLiB3aXRoaW4gMC41MDAzIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5CSMKKyMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCisjCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIHNsb2cxMGQ6CQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgMC4JSWYgWCA8IDAsIGNyZWF0ZSBhIE5hTiBhbmQgcmFpc2UgdGhlIGludmFsaWQgb3BlcmF0aW9uCSMKKyMgICAgICAgICAgICAgICBmbGFnLiBPdGhlcndpc2UsIHNhdmUgRlBDUiBpbiBEMTsgc2V0IEZwQ1IgdG8gZGVmYXVsdC4JIworIyAgICAgICBOb3RlczogIERlZmF1bHQgbWVhbnMgcm91bmQtdG8tbmVhcmVzdCBtb2RlLCBubyBmbG9hdGluZy1wb2ludAkjCisjICAgICAgICAgICAgICAgdHJhcHMsIGFuZCBwcmVjaXNpb24gY29udHJvbCA9IGRvdWJsZSBleHRlbmRlZC4JCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgMS4gQ2FsbCBzbG9nbmQgdG8gb2J0YWluIFkgPSBsb2coWCksIHRoZSBuYXR1cmFsIGxvZyBvZiBYLgkjCisjICAgICAgIE5vdGVzOiAgRXZlbiBpZiBYIGlzIGRlbm9ybWFsaXplZCwgbG9nKFgpIGlzIGFsd2F5cyBub3JtYWxpemVkLgkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDIuICBDb21wdXRlIGxvZ18xMChYKSA9IGxvZyhYKSAqICgxL2xvZygxMCkpLgkJIworIyAgICAgICAgICAgIDIuMSBSZXN0b3JlIHRoZSB1c2VyIEZQQ1IJCQkJCSMKKyMgICAgICAgICAgICAyLjIgUmV0dXJuIGFucyA6PSBZICogSU5WX0wxMC4JCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgc2xvZzEwOgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAwLiBJZiBYIDwgMCwgY3JlYXRlIGEgTmFOIGFuZCByYWlzZSB0aGUgaW52YWxpZCBvcGVyYXRpb24JIworIyAgICAgICAgICAgICAgIGZsYWcuIE90aGVyd2lzZSwgc2F2ZSBGUENSIGluIEQxOyBzZXQgRnBDUiB0byBkZWZhdWx0LgkjCisjICAgICAgIE5vdGVzOiAgRGVmYXVsdCBtZWFucyByb3VuZC10by1uZWFyZXN0IG1vZGUsIG5vIGZsb2F0aW5nLXBvaW50CSMKKyMgICAgICAgICAgICAgICB0cmFwcywgYW5kIHByZWNpc2lvbiBjb250cm9sID0gZG91YmxlIGV4dGVuZGVkLgkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAxLiBDYWxsIHNMb2dOIHRvIG9idGFpbiBZID0gbG9nKFgpLCB0aGUgbmF0dXJhbCBsb2cgb2YgWC4JIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAyLiAgIENvbXB1dGUgbG9nXzEwKFgpID0gbG9nKFgpICogKDEvbG9nKDEwKSkuCQkjCisjICAgICAgICAgICAgMi4xICBSZXN0b3JlIHRoZSB1c2VyIEZQQ1IJCQkJCSMKKyMgICAgICAgICAgICAyLjIgIFJldHVybiBhbnMgOj0gWSAqIElOVl9MMTAuCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIHNMb2cyZDoJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgMC4gSWYgWCA8IDAsIGNyZWF0ZSBhIE5hTiBhbmQgcmFpc2UgdGhlIGludmFsaWQgb3BlcmF0aW9uCSMKKyMgICAgICAgICAgICAgICBmbGFnLiBPdGhlcndpc2UsIHNhdmUgRlBDUiBpbiBEMTsgc2V0IEZwQ1IgdG8gZGVmYXVsdC4JIworIyAgICAgICBOb3RlczogIERlZmF1bHQgbWVhbnMgcm91bmQtdG8tbmVhcmVzdCBtb2RlLCBubyBmbG9hdGluZy1wb2ludAkjCisjICAgICAgICAgICAgICAgdHJhcHMsIGFuZCBwcmVjaXNpb24gY29udHJvbCA9IGRvdWJsZSBleHRlbmRlZC4JCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgMS4gQ2FsbCBzbG9nbmQgdG8gb2J0YWluIFkgPSBsb2coWCksIHRoZSBuYXR1cmFsIGxvZyBvZiBYLgkjCisjICAgICAgIE5vdGVzOiAgRXZlbiBpZiBYIGlzIGRlbm9ybWFsaXplZCwgbG9nKFgpIGlzIGFsd2F5cyBub3JtYWxpemVkLgkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDIuICAgQ29tcHV0ZSBsb2dfMTAoWCkgPSBsb2coWCkgKiAoMS9sb2coMikpLgkJIworIyAgICAgICAgICAgIDIuMSAgUmVzdG9yZSB0aGUgdXNlciBGUENSCQkJCQkjCisjICAgICAgICAgICAgMi4yICBSZXR1cm4gYW5zIDo9IFkgKiBJTlZfTDIuCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIHNMb2cyOgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAwLiBJZiBYIDwgMCwgY3JlYXRlIGEgTmFOIGFuZCByYWlzZSB0aGUgaW52YWxpZCBvcGVyYXRpb24JIworIyAgICAgICAgICAgICAgIGZsYWcuIE90aGVyd2lzZSwgc2F2ZSBGUENSIGluIEQxOyBzZXQgRnBDUiB0byBkZWZhdWx0LgkjCisjICAgICAgIE5vdGVzOiAgRGVmYXVsdCBtZWFucyByb3VuZC10by1uZWFyZXN0IG1vZGUsIG5vIGZsb2F0aW5nLXBvaW50CSMKKyMgICAgICAgICAgICAgICB0cmFwcywgYW5kIHByZWNpc2lvbiBjb250cm9sID0gZG91YmxlIGV4dGVuZGVkLgkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAxLiBJZiBYIGlzIG5vdCBhbiBpbnRlZ2VyIHBvd2VyIG9mIHR3bywgaS5lLiwgWCAhPSAyXmssCSMKKyMgICAgICAgICAgICAgICBnbyB0byBTdGVwIDMuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAyLiAgIFJldHVybiBrLgkJCQkJCSMKKyMgICAgICAgICAgICAyLjEgIEdldCBpbnRlZ2VyIGssIFggPSAyXmsuCQkJCSMKKyMgICAgICAgICAgICAyLjIgIFJlc3RvcmUgdGhlIHVzZXIgRlBDUi4JCQkJIworIyAgICAgICAgICAgIDIuMyAgUmV0dXJuIGFucyA6PSBjb252ZXJ0LXRvLWRvdWJsZS1leHRlbmRlZChrKS4JCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgMy4gQ2FsbCBzTG9nTiB0byBvYnRhaW4gWSA9IGxvZyhYKSwgdGhlIG5hdHVyYWwgbG9nIG9mIFguCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgNC4gICBDb21wdXRlIGxvZ18yKFgpID0gbG9nKFgpICogKDEvbG9nKDIpKS4JCSMKKyMgICAgICAgICAgICA0LjEgIFJlc3RvcmUgdGhlIHVzZXIgRlBDUgkJCQkJIworIyAgICAgICAgICAgIDQuMiAgUmV0dXJuIGFucyA6PSBZICogSU5WX0wyLgkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitJTlZfTDEwOgorCWxvbmcJCTB4M0ZGRDAwMDAsMHhERTVCRDhBOSwweDM3Mjg3MTk1LDB4MDAwMDAwMDAKKworSU5WX0wyOgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCOEFBM0IyOSwweDVDMTdGMEJDLDB4MDAwMDAwMDAKKworCWdsb2JhbAkJc2xvZzEwCisjLS1lbnRyeSBwb2ludCBmb3IgTG9nMTAoWCksIFggaXMgbm9ybWFsaXplZAorc2xvZzEwOgorCWZtb3YuYgkJJjB4MSwlZnAwCisJZmNtcC54CQklZnAwLCglYTApCQkjIGlmIG9wZXJhbmQgPT0gMSwKKwlmYmVxLmwJCWxkX3B6ZXJvCQkjIHJldHVybiBhbiBFWEFDVCB6ZXJvCisKKwltb3YubAkJKCVhMCksJWQxCisJYmx0LncJCWludmFsaWQKKwltb3YubAkJJWQwLC0oJXNwKQorCWNsci5sCQklZDAKKwlic3IJCXNsb2duCQkJIyBsb2coWCksIFggbm9ybWFsLgorCWZtb3YubAkJKCVzcCkrLCVmcGNyCisJZm11bC54CQlJTlZfTDEwKCVwYyksJWZwMAorCWJyYQkJdF9pbngyCisKKwlnbG9iYWwJCXNsb2cxMGQKKyMtLWVudHJ5IHBvaW50IGZvciBMb2cxMChYKSwgWCBpcyBkZW5vcm1hbGl6ZWQKK3Nsb2cxMGQ6CisJbW92LmwJCSglYTApLCVkMQorCWJsdC53CQlpbnZhbGlkCisJbW92LmwJCSVkMCwtKCVzcCkKKwljbHIubAkJJWQwCisJYnNyCQlzbG9nbmQJCQkjIGxvZyhYKSwgWCBkZW5vcm0uCisJZm1vdi5sCQkoJXNwKSssJWZwY3IKKwlmbXVsLngJCUlOVl9MMTAoJXBjKSwlZnAwCisJYnJhCQl0X21pbngyCisKKwlnbG9iYWwJCXNsb2cyCisjLS1lbnRyeSBwb2ludCBmb3IgTG9nMihYKSwgWCBpcyBub3JtYWxpemVkCitzbG9nMjoKKwltb3YubAkJKCVhMCksJWQxCisJYmx0LncJCWludmFsaWQKKworCW1vdi5sCQk4KCVhMCksJWQxCisJYm5lLmIJCWNvbnRpbnVlCQkjIFggaXMgbm90IDJeaworCisJbW92LmwJCTQoJWEwKSwlZDEKKwlhbmQubAkJJjB4N0ZGRkZGRkYsJWQxCisJYm5lLmIJCWNvbnRpbnVlCisKKyMtLVggPSAyXmsuCisJbW92LncJCSglYTApLCVkMQorCWFuZC5sCQkmMHgwMDAwN0ZGRiwlZDEKKwlzdWIubAkJJjB4M0ZGRiwlZDEKKwliZXEubAkJbGRfcHplcm8KKwlmbW92LmwJCSVkMCwlZnBjcgorCWZtb3YubAkJJWQxLCVmcDAKKwlicmEJCXRfaW54MgorCitjb250aW51ZToKKwltb3YubAkJJWQwLC0oJXNwKQorCWNsci5sCQklZDAKKwlic3IJCXNsb2duCQkJIyBsb2coWCksIFggbm9ybWFsLgorCWZtb3YubAkJKCVzcCkrLCVmcGNyCisJZm11bC54CQlJTlZfTDIoJXBjKSwlZnAwCisJYnJhCQl0X2lueDIKKworaW52YWxpZDoKKwlicmEJCXRfb3BlcnIKKworCWdsb2JhbAkJc2xvZzJkCisjLS1lbnRyeSBwb2ludCBmb3IgTG9nMihYKSwgWCBpcyBkZW5vcm1hbGl6ZWQKK3Nsb2cyZDoKKwltb3YubAkJKCVhMCksJWQxCisJYmx0LncJCWludmFsaWQKKwltb3YubAkJJWQwLC0oJXNwKQorCWNsci5sCQklZDAKKwlic3IJCXNsb2duZAkJCSMgbG9nKFgpLCBYIGRlbm9ybS4KKwlmbW92LmwJCSglc3ApKywlZnBjcgorCWZtdWwueAkJSU5WX0wyKCVwYyksJWZwMAorCWJyYQkJdF9taW54MgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHN0d290b3goKTogIGNvbXB1dGVzIDIqKlggZm9yIGEgbm9ybWFsaXplZCBpbnB1dAkJCSMKKyMgc3R3b3RveGQoKTogY29tcHV0ZXMgMioqWCBmb3IgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJCQkjCisjIHN0ZW50b3goKTogIGNvbXB1dGVzIDEwKipYIGZvciBhIG5vcm1hbGl6ZWQgaW5wdXQJCQkjCisjIHN0ZW50b3hkKCk6IGNvbXB1dGVzIDEwKipYIGZvciBhIGRlbm9ybWFsaXplZCBpbnB1dAkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCisjCWQwID0gcm91bmQgcHJlY2lzaW9uLG1vZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IDIqKlggb3IgMTAqKlgJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAyIHVscHMgaW4gNjQgc2lnbmlmaWNhbnQgYml0LAkjCisjCWkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseQkjCisjCXJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMJIworIwlpbiBkb3VibGUgcHJlY2lzaW9uLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCQkJCQkJCQkJIworIwl0d290b3gJCQkJCQkJCSMKKyMJMS4gSWYgfFh8ID4gMTY0ODAsIGdvIHRvIEV4cEJpZy4JCQkJIworIwkJCQkJCQkJCSMKKyMJMi4gSWYgfFh8IDwgMioqKC03MCksIGdvIHRvIEV4cFNtLgkJCQkjCisjCQkJCQkJCQkJIworIwkzLiBEZWNvbXBvc2UgWCBhcyBYID0gTi82NCArIHIgd2hlcmUgfHJ8IDw9IDEvMTI4LiBGdXJ0aGVybW9yZQkjCisjCQlkZWNvbXBvc2UgTiBhcwkJCQkJCSMKKyMJCSBOID0gNjQoTSArIE0nKSArIGosICBqID0gMCwxLDIsLi4uLDYzLgkJCSMKKyMJCQkJCQkJCQkjCisjCTQuIE92ZXJ3cml0ZSByIDo9IHIgKiBsb2cyLiBUaGVuCQkJCSMKKyMJCTIqKlggPSAyKiooTScpICogMioqKE0pICogMioqKGovNjQpICogZXhwKHIpLgkJIworIwkJR28gdG8gZXhwciB0byBjb21wdXRlIHRoYXQgZXhwcmVzc2lvbi4JCQkjCisjCQkJCQkJCQkJIworIwl0ZW50b3gJCQkJCQkJCSMKKyMJMS4gSWYgfFh8ID4gMTY0ODAqbG9nXzEwKDIpIChiYXNlIDEwIGxvZyBvZiAyKSwgZ28gdG8gRXhwQmlnLgkjCisjCQkJCQkJCQkJIworIwkyLiBJZiB8WHwgPCAyKiooLTcwKSwgZ28gdG8gRXhwU20uCQkJCSMKKyMJCQkJCQkJCQkjCisjCTMuIFNldCB5IDo9IFgqbG9nXzIoMTApKjY0IChiYXNlIDIgbG9nIG9mIDEwKS4gU2V0CQkjCisjCQlOIDo9IHJvdW5kLXRvLWludCh5KS4gRGVjb21wb3NlIE4gYXMJCQkjCisjCQkgTiA9IDY0KE0gKyBNJykgKyBqLCAgaiA9IDAsMSwyLC4uLiw2My4JCQkjCisjCQkJCQkJCQkJIworIwk0LiBEZWZpbmUgciBhcwkJCQkJCQkjCisjCQlyIDo9ICgoWCAtIE4qTDEpLU4qTDIpICogTDEwCQkJCSMKKyMJCXdoZXJlIEwxLCBMMiBhcmUgdGhlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhcnRzIG9mCSMKKyMJCWxvZ18xMCgyKS82NCBhbmQgTDEwIGlzIHRoZSBuYXR1cmFsIGxvZyBvZiAxMC4gVGhlbgkjCisjCQkxMCoqWCA9IDIqKihNJykgKiAyKiooTSkgKiAyKiooai82NCkgKiBleHAocikuCQkjCisjCQlHbyB0byBleHByIHRvIGNvbXB1dGUgdGhhdCBleHByZXNzaW9uLgkJCSMKKyMJCQkJCQkJCQkjCisjCWV4cHIJCQkJCQkJCSMKKyMJMS4gRmV0Y2ggMioqKGovNjQpIGZyb20gdGFibGUgYXMgRmFjdDEgYW5kIEZhY3QyLgkJIworIwkJCQkJCQkJCSMKKyMJMi4gT3ZlcndyaXRlIEZhY3QxIGFuZCBGYWN0MiBieQkJCQkJIworIwkJRmFjdDEgOj0gMioqKE0pICogRmFjdDEJCQkJCSMKKyMJCUZhY3QyIDo9IDIqKihNKSAqIEZhY3QyCQkJCQkjCisjCQlUaHVzIEZhY3QxICsgRmFjdDIgPSAyKiooTSkgKiAyKiooai82NCkuCQkjCisjCQkJCQkJCQkJIworIwkzLiBDYWxjdWxhdGUgUCB3aGVyZSAxICsgUCBhcHByb3hpbWF0ZXMgZXhwKHIpOgkJCSMKKyMJCVAgPSByICsgcipyKihBMStyKihBMisuLi4rcipBNSkpLgkJCSMKKyMJCQkJCQkJCQkjCisjCTQuIExldCBBZGpGYWN0IDo9IDIqKihNJykuIFJldHVybgkJCQkjCisjCQlBZGpGYWN0ICogKCBGYWN0MSArICgoRmFjdDEqUCkgKyBGYWN0MikgKS4JCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCUV4cEJpZwkJCQkJCQkJIworIwkxLiBHZW5lcmF0ZSBvdmVyZmxvdyBieSBIdWdlICogSHVnZSBpZiBYID4gMDsgb3RoZXJ3aXNlLAkjCisjCSAgICAgICAgZ2VuZXJhdGUgdW5kZXJmbG93IGJ5IFRpbnkgKiBUaW55LgkJCSMKKyMJCQkJCQkJCQkjCisjCUV4cFNtCQkJCQkJCQkjCisjCTEuIFJldHVybiAxICsgWC4JCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitMMlRFTjY0OgorCWxvbmcJCTB4NDA2QTkzNEYsMHgwOTc5QTM3MQkjIDY0TE9HMTAvTE9HMgorTDEwVFdPMToKKwlsb25nCQkweDNGNzM0NDEzLDB4NTA5RjgwMDAJIyBMT0cyLzY0TE9HMTAKKworTDEwVFdPMjoKKwlsb25nCQkweEJGQ0QwMDAwLDB4QzAyMTlEQzEsMHhEQTk5NEZEMiwweDAwMDAwMDAwCisKK0xPRzEwOglsb25nCQkweDQwMDAwMDAwLDB4OTM1RDhEREQsMHhBQUE4QUMxNywweDAwMDAwMDAwCisKK0xPRzI6CWxvbmcJCTB4M0ZGRTAwMDAsMHhCMTcyMTdGNywweEQxQ0Y3OUFDLDB4MDAwMDAwMDAKKworRVhQQTU6CWxvbmcJCTB4M0Y1NkMxNkQsMHg2RjdCRDBCMgorRVhQQTQ6CWxvbmcJCTB4M0Y4MTExMTIsMHgzMDJDNzEyQworRVhQQTM6CWxvbmcJCTB4M0ZBNTU1NTUsMHg1NTU1NENDMQorRVhQQTI6CWxvbmcJCTB4M0ZDNTU1NTUsMHg1NTU1NEE1NAorRVhQQTE6CWxvbmcJCTB4M0ZFMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworVEVYUFRCTDoKKwlsb25nCQkweDNGRkYwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDNGNzM4MDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDgxNjREMUYzLDB4QkMwMzA3NzMsMHgzRkJFRjdDQQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4MkNEODY5OCwweEFDMkJBMUQ3LDB4M0ZCREY4QTkKKwlsb25nCQkweDNGRkYwMDAwLDB4ODQzQTI4QzMsMHhBQ0RFNDA0NiwweDNGQkNEN0M5CisJbG9uZwkJMHgzRkZGMDAwMCwweDg1QUFDMzY3LDB4Q0M0ODdCMTUsMHhCRkJERThEQQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4NzFGNjE5NiwweDlFOEQxMDEwLDB4M0ZCREU4NUMKKwlsb25nCQkweDNGRkYwMDAwLDB4ODg5ODBFODAsMHg5MkRBODUyNywweDNGQkVCQkYxCisJbG9uZwkJMHgzRkZGMDAwMCwweDhBMTRENTc1LDB4NDk2RUZEOUEsMHgzRkJCODBDQQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4Qjk1QzFFMywweEVBOEJENkU3LDB4QkZCQTgzNzMKKwlsb25nCQkweDNGRkYwMDAwLDB4OEQxQURGNUIsMHg3RTVCQTlFNiwweEJGQkU5NjcwCisJbG9uZwkJMHgzRkZGMDAwMCwweDhFQTQzOThCLDB4NDVDRDUzQzAsMHgzRkJEQjcwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5MDMxREM0MywweDE0NjZCMURDLDB4M0ZCRUVFQjAKKwlsb25nCQkweDNGRkYwMDAwLDB4OTFDM0QzNzMsMHhBQjExQzMzNiwweDNGQkJGRDZECisJbG9uZwkJMHgzRkZGMDAwMCwweDkzNUEyQjJGLDB4MTNFNkU5MkMsMHhCRkJEQjMxOQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5NEY0RUZBOCwweEZFRjcwOTYxLDB4M0ZCREJBMkIKKwlsb25nCQkweDNGRkYwMDAwLDB4OTY5NDJEMzcsMHgyMDE4NUEwMCwweDNGQkU5MUQ1CisJbG9uZwkJMHgzRkZGMDAwMCwweDk4MzdGMDUxLDB4OERCOEE5NkYsMHgzRkJFOEQ1QQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5OUUwNDU5MywweDIwQjdGQTY1LDB4QkZCQ0RFN0IKKwlsb25nCQkweDNGRkYwMDAwLDB4OUI4RDM5QjksMHhENTRFNTUzOSwweEJGQkVCQUFGCisJbG9uZwkJMHgzRkZGMDAwMCwweDlEM0VEOUE3LDB4MkNGRkI3NTEsMHhCRkJEODZEQQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5RUY1MzI2MCwweDkxQTExMUFFLDB4QkZCRUJFREQKKwlsb25nCQkweDNGRkYwMDAwLDB4QTBCMDUxMEYsMHhCOTcxNEZDMiwweDNGQkNDOTZFCisJbG9uZwkJMHgzRkZGMDAwMCwweEEyNzA0MzAzLDB4MEM0OTY4MTksMHhCRkJFQzkwQgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBNDM1MTVBRSwweDA5RTY4MDlFLDB4M0ZCQkQxREIKKwlsb25nCQkweDNGRkYwMDAwLDB4QTVGRUQ2QTksMHhCMTUxMzhFQSwweDNGQkNFNUVCCisJbG9uZwkJMHgzRkZGMDAwMCwweEE3Q0Q5M0I0LDB4RTk2NTM1NkEsMHhCRkJFQzI3NAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBOUExNUFCNCwweEVBN0MwRUY4LDB4M0ZCRUE4M0MKKwlsb25nCQkweDNGRkYwMDAwLDB4QUI3QTM5QjUsMHhBOTNFRDMzNywweDNGQkVDQjAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEFENTgzRUVBLDB4NDJBMTRBQzYsMHgzRkJFOTMwMQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBRjNCNzhBRCwweDY5MEE0Mzc1LDB4QkZCRDgzNjcKKwlsb25nCQkweDNGRkYwMDAwLDB4QjEyM0Y1ODEsMHhEMkFDMjU5MCwweEJGQkVGMDVGCisJbG9uZwkJMHgzRkZGMDAwMCwweEIzMTFDNDEyLDB4QTkxMTI0ODksMHgzRkJERkIzQworCWxvbmcJCTB4M0ZGRjAwMDAsMHhCNTA0RjMzMywweEY5REU2NDg0LDB4M0ZCRUIyRkIKKwlsb25nCQkweDNGRkYwMDAwLDB4QjZGRDkxRTMsMHgyOEQxNzc5MSwweDNGQkFFMkNCCisJbG9uZwkJMHgzRkZGMDAwMCwweEI4RkJBRjQ3LDB4NjJGQjlFRTksMHgzRkJDREMzQworCWxvbmcJCTB4M0ZGRjAwMDAsMHhCQUZGNUFCMiwweDEzM0U0NUZCLDB4M0ZCRUU5QUEKKwlsb25nCQkweDNGRkYwMDAwLDB4QkQwOEEzOUYsMHg1ODBDMzZCRiwweEJGQkVBRUZECisJbG9uZwkJMHgzRkZGMDAwMCwweEJGMTc5OUI2LDB4N0E3MzEwODMsMHhCRkJDQkY1MQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDMTJDNENDQSwweDY2NzA5NDU2LDB4M0ZCRUY4OEEKKwlsb25nCQkweDNGRkYwMDAwLDB4QzM0NkNDREEsMHgyNDk3NjQwNywweDNGQkQ4M0IyCisJbG9uZwkJMHgzRkZGMDAwMCwweEM1NjcyQTExLDB4NTUwNkRBREQsMHgzRkJERjhBQgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDNzhENzRDOCwweEFCQjlCMTVELDB4QkZCREZCMTcKKwlsb25nCQkweDNGRkYwMDAwLDB4QzlCOUJEODYsMHg2RTJGMjdBMywweEJGQkVGRTNDCisJbG9uZwkJMHgzRkZGMDAwMCwweENCRUMxNEZFLDB4RjI3MjdDNUQsMHhCRkJCQjZGOAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDRTI0OEMxNSwweDFGODQ4MEU0LDB4QkZCQ0VFNTMKKwlsb25nCQkweDNGRkYwMDAwLDB4RDA2MzMzREEsMHhFRjJCMjU5NSwweEJGQkRBNEFFCisJbG9uZwkJMHgzRkZGMDAwMCwweEQyQTgxRDkxLDB4RjEyQUU0NUEsMHgzRkJDOTEyNAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhENEYzNUFBQiwweENGRURGQTFGLDB4M0ZCRUIyNDMKKwlsb25nCQkweDNGRkYwMDAwLDB4RDc0NEZDQ0EsMHhENjlENkFGNCwweDNGQkRFNjlBCisJbG9uZwkJMHgzRkZGMDAwMCwweEQ5OUQxNUMyLDB4NzhBRkQ3QjYsMHhCRkI4QkM2MQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhEQkZCQjc5NywweERBRjIzNzU1LDB4M0ZCREY2MTAKKwlsb25nCQkweDNGRkYwMDAwLDB4REU2MEY0ODIsMHg1RTBFOTEyNCwweEJGQkQ4QkUxCisJbG9uZwkJMHgzRkZGMDAwMCwweEUwQ0NERUVDLDB4MkE5NEUxMTEsMHgzRkJBQ0IxMgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhFMzNGODk3MiwweEJFOEE1QTUxLDB4M0ZCQjlCRkUKKwlsb25nCQkweDNGRkYwMDAwLDB4RTVCOTA2RTcsMHg3QzgzNDhBOCwweDNGQkNGMkY0CisJbG9uZwkJMHgzRkZGMDAwMCwweEU4Mzk2QTUwLDB4M0M0QkRDNjgsMHgzRkJFRjIyRgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhFQUMwQzZFNywweEREMjQzOTJGLDB4QkZCREJGNEEKKwlsb25nCQkweDNGRkYwMDAwLDB4RUQ0RjMwMUUsMHhEOTk0MkI4NCwweDNGQkVDMDFBCisJbG9uZwkJMHgzRkZGMDAwMCwweEVGRTRCOTlCLDB4RENEQUY1Q0IsMHgzRkJFOENBQworCWxvbmcJCTB4M0ZGRjAwMDAsMHhGMjgxNzczQywweDU5RkZCMTNBLDB4QkZCQ0JCM0YKKwlsb25nCQkweDNGRkYwMDAwLDB4RjUyNTdEMTUsMHgyNDg2Q0MyQywweDNGQkVGNzNBCisJbG9uZwkJMHgzRkZGMDAwMCwweEY3RDBERjczLDB4MEFEMTNCQjksMHhCRkI4Qjc5NQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhGQTgzQjJEQiwweDcyMkEwMzNBLDB4M0ZCRUY4NEIKKwlsb25nCQkweDNGRkYwMDAwLDB4RkQzRTBDMEMsMHhGNDg2QzE3NSwweEJGQkVGNTgxCisKKwlzZXQJCUlOVCxMX1NDUjEKKworCXNldAkJWCxGUF9TQ1IwCisJc2V0CQlYRENBUkUsWCsyCisJc2V0CQlYRlJBQyxYKzQKKworCXNldAkJQURKRkFDVCxGUF9TQ1IwCisKKwlzZXQJCUZBQ1QxLEZQX1NDUjAKKwlzZXQJCUZBQ1QxSEksRkFDVDErNAorCXNldAkJRkFDVDFMT1csRkFDVDErOAorCisJc2V0CQlGQUNUMixGUF9TQ1IxCisJc2V0CQlGQUNUMkhJLEZBQ1QyKzQKKwlzZXQJCUZBQ1QyTE9XLEZBQ1QyKzgKKworCWdsb2JhbAkJc3R3b3RveAorIy0tRU5UUlkgUE9JTlQgRk9SIDIqKihYKSwgSEVSRSBYIElTIEZJTklURSwgTk9OLVpFUk8sIEFORCBOT1QgTkFOJ1MKK3N0d290b3g6CisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgTE9BRCBJTlBVVAorCisJbW92LmwJCSglYTApLCVkMQorCW1vdi53CQk0KCVhMCksJWQxCisJZm1vdi54CQklZnAwLFgoJWE2KQorCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEKKworCWNtcC5sCQklZDEsJjB4M0ZCOTgwMDAJCSMgfFh8ID49IDIqKigtNzApPworCWJnZS5iCQlUV09PSzEKKwlicmEudwkJRVhQQk9SUworCitUV09PSzE6CisJY21wLmwJCSVkMSwmMHg0MDBEODBDMAkJIyB8WHwgPiAxNjQ4MD8KKwlibGUuYgkJVFdPTUFJTgorCWJyYS53CQlFWFBCT1JTCisKK1RXT01BSU46CisjLS1VU1VBTCBDQVNFLCAyXigtNzApIDw9IHxYfCA8PSAxNjQ4MAorCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLnMJCSYweDQyODAwMDAwLCVmcDEJIyA2NCAqIFgKKwlmbW92LmwJCSVmcDEsSU5UKCVhNikJCSMgTiA9IFJPVU5ELVRPLUlOVCg2NCBYKQorCW1vdi5sCQklZDIsLSglc3ApCisJbGVhCQlURVhQVEJMKCVwYyksJWExCSMgTE9BRCBBRERSRVNTIE9GIFRBQkxFIE9GIDJeKEovNjQpCisJZm1vdi5sCQlJTlQoJWE2KSwlZnAxCQkjIE4gLS0+IEZMT0FUSU5HIEZNVAorCW1vdi5sCQlJTlQoJWE2KSwlZDEKKwltb3YubAkJJWQxLCVkMgorCWFuZC5sCQkmMHgzRiwlZDEJCSMgRDAgSVMgSgorCWFzbC5sCQkmNCwlZDEJCQkjIERJU1BMQUNFTUVOVCBGT1IgMl4oSi82NCkKKwlhZGQubAkJJWQxLCVhMQkJCSMgQUREUkVTUyBGT1IgMl4oSi82NCkKKwlhc3IubAkJJjYsJWQyCQkJIyBkMiBJUyBMLCBOID0gNjRMICsgSgorCW1vdi5sCQklZDIsJWQxCisJYXNyLmwJCSYxLCVkMQkJCSMgRDAgSVMgTQorCXN1Yi5sCQklZDEsJWQyCQkJIyBkMiBJUyBNJywgTiA9IDY0KE0rTScpICsgSgorCWFkZC5sCQkmMHgzRkZGLCVkMgorCisjLS1TVU1NQVJZOiBhMSBJUyBBRERSRVNTIEZPUiBUSEUgTEVBRElORyBQT1JUSU9OIE9GIDJeKEovNjQpLAorIy0tRDAgSVMgTSBXSEVSRSBOID0gNjQoTStNJykgKyBKLiBOT1RFIFRIQVQgfE18IDw9IDE2MTQwIEJZIERFU0lHTi4KKyMtLUFESkZBQ1QgPSAyXihNJykuCisjLS1SRUdJU1RFUlMgU0FWRUQgU08gRkFSIEFSRSAoSU4gT1JERVIpIEZQQ1IsIEQwLCBGUDEsIGExLCBBTkQgRlAyLgorCisJZm1vdm0ueAkJJjB4MGMsLSglc3ApCQkjIHNhdmUgZnAyL2ZwMworCisJZm11bC5zCQkmMHgzQzgwMDAwMCwlZnAxCSMgKDEvNjQpKk4KKwltb3YubAkJKCVhMSkrLEZBQ1QxKCVhNikKKwltb3YubAkJKCVhMSkrLEZBQ1QxSEkoJWE2KQorCW1vdi5sCQkoJWExKSssRkFDVDFMT1coJWE2KQorCW1vdi53CQkoJWExKSssRkFDVDIoJWE2KQorCisJZnN1Yi54CQklZnAxLCVmcDAJCSMgWCAtICgxLzY0KSpJTlQoNjQgWCkKKworCW1vdi53CQkoJWExKSssRkFDVDJISSglYTYpCisJY2xyLncJCUZBQ1QySEkrMiglYTYpCisJY2xyLmwJCUZBQ1QyTE9XKCVhNikKKwlhZGQudwkJJWQxLEZBQ1QxKCVhNikKKwlmbXVsLngJCUxPRzIoJXBjKSwlZnAwCQkjIEZQMCBJUyBSCisJYWRkLncJCSVkMSxGQUNUMiglYTYpCisKKwlicmEudwkJZXhwcgorCitFWFBCT1JTOgorIy0tRlBDUiwgRDAgU0FWRUQKKwljbXAubAkJJWQxLCYweDNGRkY4MDAwCisJYmd0LmIJCVRFWFBCSUcKKworIy0tfFh8IElTIFNNQUxMLCBSRVRVUk4gMSArIFgKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgcHJlYyxtb2RlCisJZmFkZC5zCQkmMHgzRjgwMDAwMCwlZnAwCSMgUkVUVVJOIDEgKyBYCisJYnJhCQl0X3BpbngyCisKK1RFWFBCSUc6CisjLS18WHwgSVMgTEFSR0UsIEdFTkVSQVRFIE9WRVJGTE9XIElGIFggPiAwOyBFTFNFIEdFTkVSQVRFIFVOREVSRkxPVworIy0tUkVHSVNURVJTIFNBVkUgU08gRkFSIEFSRSBGUENSIEFORCAgRDAKKwltb3YubAkJWCglYTYpLCVkMQorCWNtcC5sCQklZDEsJjAKKwlibHQuYgkJRVhQTkVHCisKKwlicmEJCXRfb3ZmbDIJCQkjIHRfb3ZmbCBleHBlY3RzIHBvc2l0aXZlIHZhbHVlCisKK0VYUE5FRzoKKwlicmEJCXRfdW5mbDIJCQkjIHRfdW5mbCBleHBlY3RzIHBvc2l0aXZlIHZhbHVlCisKKwlnbG9iYWwJCXN0d290b3hkCitzdHdvdG94ZDoKKyMtLUVOVFJZIFBPSU5UIEZPUiAyKiooWCkgRk9SIERFTk9STUFMSVpFRCBBUkdVTUVOVAorCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgc2V0IHVzZXIncyByb3VuZGluZyBtb2RlL3ByZWNpc2lvbgorCWZtb3YucwkJJjB4M0Y4MDAwMDAsJWZwMAkjIFJFVFVSTiAxICsgWAorCW1vdi5sCQkoJWEwKSwlZDEKKwlvci5sCQkmMHgwMDgwMDAwMSwlZDEKKwlmYWRkLnMJCSVkMSwlZnAwCisJYnJhCQl0X3BpbngyCisKKwlnbG9iYWwJCXN0ZW50b3gKKyMtLUVOVFJZIFBPSU5UIEZPUiAxMCoqKFgpLCBIRVJFIFggSVMgRklOSVRFLCBOT04tWkVSTywgQU5EIE5PVCBOQU4nUworc3RlbnRveDoKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyBMT0FEIElOUFVUCisKKwltb3YubAkJKCVhMCksJWQxCisJbW92LncJCTQoJWEwKSwlZDEKKwlmbW92LngJCSVmcDAsWCglYTYpCisJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQorCisJY21wLmwJCSVkMSwmMHgzRkI5ODAwMAkJIyB8WHwgPj0gMioqKC03MCk/CisJYmdlLmIJCVRFTk9LMQorCWJyYS53CQlFWFBCT1JTCisKK1RFTk9LMToKKwljbXAubAkJJWQxLCYweDQwMEI5QjA3CQkjIHxYfCA8PSAxNjQ4MCpsb2cyL2xvZzEwID8KKwlibGUuYgkJVEVOTUFJTgorCWJyYS53CQlFWFBCT1JTCisKK1RFTk1BSU46CisjLS1VU1VBTCBDQVNFLCAyXigtNzApIDw9IHxYfCA8PSAxNjQ4MCBMT0cgMiAvIExPRyAxMAorCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLmQJCUwyVEVONjQoJXBjKSwlZnAxCSMgWCo2NCpMT0cxMC9MT0cyCisJZm1vdi5sCQklZnAxLElOVCglYTYpCQkjIE49SU5UKFgqNjQqTE9HMTAvTE9HMikKKwltb3YubAkJJWQyLC0oJXNwKQorCWxlYQkJVEVYUFRCTCglcGMpLCVhMQkjIExPQUQgQUREUkVTUyBPRiBUQUJMRSBPRiAyXihKLzY0KQorCWZtb3YubAkJSU5UKCVhNiksJWZwMQkJIyBOIC0tPiBGTE9BVElORyBGTVQKKwltb3YubAkJSU5UKCVhNiksJWQxCisJbW92LmwJCSVkMSwlZDIKKwlhbmQubAkJJjB4M0YsJWQxCQkjIEQwIElTIEoKKwlhc2wubAkJJjQsJWQxCQkJIyBESVNQTEFDRU1FTlQgRk9SIDJeKEovNjQpCisJYWRkLmwJCSVkMSwlYTEJCQkjIEFERFJFU1MgRk9SIDJeKEovNjQpCisJYXNyLmwJCSY2LCVkMgkJCSMgZDIgSVMgTCwgTiA9IDY0TCArIEoKKwltb3YubAkJJWQyLCVkMQorCWFzci5sCQkmMSwlZDEJCQkjIEQwIElTIE0KKwlzdWIubAkJJWQxLCVkMgkJCSMgZDIgSVMgTScsIE4gPSA2NChNK00nKSArIEoKKwlhZGQubAkJJjB4M0ZGRiwlZDIKKworIy0tU1VNTUFSWTogYTEgSVMgQUREUkVTUyBGT1IgVEhFIExFQURJTkcgUE9SVElPTiBPRiAyXihKLzY0KSwKKyMtLUQwIElTIE0gV0hFUkUgTiA9IDY0KE0rTScpICsgSi4gTk9URSBUSEFUIHxNfCA8PSAxNjE0MCBCWSBERVNJR04uCisjLS1BREpGQUNUID0gMl4oTScpLgorIy0tUkVHSVNURVJTIFNBVkVEIFNPIEZBUiBBUkUgKElOIE9SREVSKSBGUENSLCBEMCwgRlAxLCBhMSwgQU5EIEZQMi4KKwlmbW92bS54CQkmMHgwYywtKCVzcCkJCSMgc2F2ZSBmcDIvZnAzCisKKwlmbW92LngJCSVmcDEsJWZwMgorCisJZm11bC5kCQlMMTBUV08xKCVwYyksJWZwMQkjIE4qKExPRzIvNjRMT0cxMClfTEVBRAorCW1vdi5sCQkoJWExKSssRkFDVDEoJWE2KQorCisJZm11bC54CQlMMTBUV08yKCVwYyksJWZwMgkjIE4qKExPRzIvNjRMT0cxMClfVFJBSUwKKworCW1vdi5sCQkoJWExKSssRkFDVDFISSglYTYpCisJbW92LmwJCSglYTEpKyxGQUNUMUxPVyglYTYpCisJZnN1Yi54CQklZnAxLCVmcDAJCSMgWCAtIE4gTF9MRUFECisJbW92LncJCSglYTEpKyxGQUNUMiglYTYpCisKKwlmc3ViLngJCSVmcDIsJWZwMAkJIyBYIC0gTiBMX1RSQUlMCisKKwltb3YudwkJKCVhMSkrLEZBQ1QySEkoJWE2KQorCWNsci53CQlGQUNUMkhJKzIoJWE2KQorCWNsci5sCQlGQUNUMkxPVyglYTYpCisKKwlmbXVsLngJCUxPRzEwKCVwYyksJWZwMAkJIyBGUDAgSVMgUgorCWFkZC53CQklZDEsRkFDVDEoJWE2KQorCWFkZC53CQklZDEsRkFDVDIoJWE2KQorCitleHByOgorIy0tRlBDUiwgRlAyLCBGUDMgQVJFIFNBVkVEIElOIE9SREVSIEFTIFNIT1dOLgorIy0tQURKRkFDVCBDT05UQUlOUyAyKiooTScpLCBGQUNUMSArIEZBQ1QyID0gMioqKE0pICogMioqKEovNjQpLgorIy0tRlAwIElTIFIuIFRIRSBGT0xMT1dJTkcgQ09ERSBDT01QVVRFUworIy0tCTIqKihNJytNKSAqIDIqKihKLzY0KSAqIEVYUChSKQorCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLngJCSVmcDEsJWZwMQkJIyBGUDEgSVMgUyA9IFIqUgorCisJZm1vdi5kCQlFWFBBNSglcGMpLCVmcDIJCSMgRlAyIElTIEE1CisJZm1vdi5kCQlFWFBBNCglcGMpLCVmcDMJCSMgRlAzIElTIEE0CisKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBGUDIgSVMgUypBNQorCWZtdWwueAkJJWZwMSwlZnAzCQkjIEZQMyBJUyBTKkE0CisKKwlmYWRkLmQJCUVYUEEzKCVwYyksJWZwMgkJIyBGUDIgSVMgQTMrUypBNQorCWZhZGQuZAkJRVhQQTIoJXBjKSwlZnAzCQkjIEZQMyBJUyBBMitTKkE0CisKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBGUDIgSVMgUyooQTMrUypBNSkKKwlmbXVsLngJCSVmcDEsJWZwMwkJIyBGUDMgSVMgUyooQTIrUypBNCkKKworCWZhZGQuZAkJRVhQQTEoJXBjKSwlZnAyCQkjIEZQMiBJUyBBMStTKihBMytTKkE1KQorCWZtdWwueAkJJWZwMCwlZnAzCQkjIEZQMyBJUyBSKlMqKEEyK1MqQTQpCisKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBGUDIgSVMgUyooQTErUyooQTMrUypBNSkpCisJZmFkZC54CQklZnAzLCVmcDAJCSMgRlAwIElTIFIrUipTKihBMitTKkE0KQorCWZhZGQueAkJJWZwMiwlZnAwCQkjIEZQMCBJUyBFWFAoUikgLSAxCisKKwlmbW92bS54CQkoJXNwKSssJjB4MzAJCSMgcmVzdG9yZSBmcDIvZnAzCisKKyMtLUZJTkFMIFJFQ09OU1RSVUNUSU9OIFBST0NFU1MKKyMtLUVYUChYKSA9IDJeTSoyXihKLzY0KSArIDJeTSoyXihKLzY0KSooRVhQKFIpLTEpICAtICAoMSBPUiAwKQorCisJZm11bC54CQlGQUNUMSglYTYpLCVmcDAKKwlmYWRkLngJCUZBQ1QyKCVhNiksJWZwMAorCWZhZGQueAkJRkFDVDEoJWE2KSwlZnAwCisKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIHByZWMsbW9kZQorCW1vdi53CQklZDIsQURKRkFDVCglYTYpCSMgSU5TRVJUIEVYUE9ORU5UCisJbW92LmwJCSglc3ApKywlZDIKKwltb3YubAkJJjB4ODAwMDAwMDAsQURKRkFDVCs0KCVhNikKKwljbHIubAkJQURKRkFDVCs4KCVhNikKKwltb3YuYgkJJkZNVUxfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNVUwKKwlmbXVsLngJCUFESkZBQ1QoJWE2KSwlZnAwCSMgRklOQUwgQURKVVNUTUVOVAorCWJyYQkJdF9jYXRjaAorCisJZ2xvYmFsCQlzdGVudG94ZAorc3RlbnRveGQ6CisjLS1FTlRSWSBQT0lOVCBGT1IgMTAqKihYKSBGT1IgREVOT1JNQUxJWkVEIEFSR1VNRU5UCisKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyBzZXQgdXNlcidzIHJvdW5kaW5nIG1vZGUvcHJlY2lzaW9uCisJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAwCSMgUkVUVVJOIDEgKyBYCisJbW92LmwJCSglYTApLCVkMQorCW9yLmwJCSYweDAwODAwMDAxLCVkMQorCWZhZGQucwkJJWQxLCVmcDAKKwlicmEJCXRfcGlueDIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzc2NhbGUoKTogY29tcHV0ZXMgdGhlIGRlc3RpbmF0aW9uIG9wZXJhbmQgc2NhbGVkIGJ5IHRoZSBzb3VyY2UJIworIwkgICAgb3BlcmFuZC4gSWYgdGhlIGFic291bHV0ZSB2YWx1ZSBvZiB0aGUgc291cmNlIG9wZXJhbmQgaXMJIworIwkgICAgPj0gMl4xNCwgYW4gb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGlzIHJldHVybmVkLgkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJYTAgID0gcG9pbnRlciB0byBkb3VibGUtZXh0ZW5kZWQgc291cmNlIG9wZXJhbmQgWAkJIworIwlhMSAgPSBwb2ludGVyIHRvIGRvdWJsZS1leHRlbmRlZCBkZXN0aW5hdGlvbiBvcGVyYW5kIFkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWZwMCA9ICBzY2FsZShYLFkpCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc2V0CVNJR04sCQlMX1NDUjEKKworCWdsb2JhbAkJc3NjYWxlCitzc2NhbGU6CisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc3RvcmUgb2ZmIGN0cmwgYml0cyBmb3Igbm93CisKKwltb3YudwkJRFNUX0VYKCVhMSksJWQxCQkjIGdldCBkc3QgZXhwb25lbnQKKwlzbWkuYgkJU0lHTiglYTYpCQkjIHVzZSBTSUdOIHRvIGhvbGQgZHN0IHNpZ24KKwlhbmRpLmwJCSYweDAwMDA3ZmZmLCVkMQkJIyBzdHJpcCBzaWduIGZyb20gZHN0IGV4cAorCisJbW92LncJCVNSQ19FWCglYTApLCVkMAkJIyBjaGVjayBzcmMgYm91bmRzCisJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBjbHIgc3JjIHNpZ24gYml0CisJY21waS53CQklZDAsJjB4M2ZmZgkJIyBpcyBzcmMgfiBaRVJPPworCWJsdC53CQlzcmNfc21hbGwJCSMgeWVzCisJY21waS53CQklZDAsJjB4NDAwYwkJIyBubzsgaXMgc3JjIHRvbyBiaWc/CisJYmd0LncJCXNyY19vdXQJCQkjIHllcworCisjCisjIFNvdXJjZSBpcyB3aXRoaW4gMl4xNCByYW5nZS4KKyMKK3NyY19vazoKKwlmaW50cnoueAlTUkMoJWEwKSwlZnAwCQkjIGNhbGMgaW50IG9mIHNyYworCWZtb3YubAkJJWZwMCwlZDAJCSMgaW50IHNyYyB0byBkMAorIyBkb24ndCB3YW50IGFueSBhY2NydWVkIGJpdHMgZnJvbSB0aGUgZmludHJ6IHNob3dpbmcgdXAgbGF0ZXIgc2luY2UKKyMgd2UgbWF5IG5lZWQgdG8gcmVhZCB0aGUgZnBzciBmb3IgdGhlIGxhc3QgZnAgb3AgaW4gdF9jYXRjaDIoKS4KKwlmbW92LmwJCSYweDAsJWZwc3IKKworCXRzdC5iCQlEU1RfSEkoJWExKQkJIyBpcyBkc3QgZGVub3JtYWxpemVkPworCWJtaS5iCQlzb2tfbm9ybQorCisjIHRoZSBkc3QgaXMgYSBERU5PUk0uIG5vcm1hbGl6ZSB0aGUgREVOT1JNIGFuZCBhZGQgdGhlIGFkanVzdG1lbnQgdG8KKyMgdGhlIHNyYyB2YWx1ZS4gdGhlbiwganVtcCB0byB0aGUgbm9ybSBwYXJ0IG9mIHRoZSByb3V0aW5lLgorc29rX2Rucm06CisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzcmMgZm9yIG5vdworCisJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjBfRVgoJWE2KSAjIG1ha2UgYSBjb3B5CisJbW92LmwJCURTVF9ISSglYTEpLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlEU1RfTE8oJWExKSxGUF9TQ1IwX0xPKCVhNikKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3MgcHRyIHRvIERFTk9STQorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgdGhlIERFTk9STQorCW5lZy5sCQklZDAKKwlhZGQubAkJKCVzcCkrLCVkMAkJIyBhZGQgYWRqdXN0bWVudCB0byBzcmMKKworCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIGxvYWQgbm9ybWFsaXplZCBERU5PUk0KKworCWNtcGkudwkJJWQwLCYtMHgzZmZmCQkjIGlzIHRoZSBzaGZ0IGFtdCByZWFsbHkgbG93PworCWJnZS5iCQlzb2tfbm9ybTIJCSMgdGhhbmsgZ29vZG5lc3Mgbm8KKworIyB0aGUgbXVsdGlwbHkgZmFjdG9yIHRoYXQgd2UncmUgdHJ5aW5nIHRvIGNyZWF0ZSBzaG91bGQgYmUgYSBkZW5vcm0KKyMgZm9yIHRoZSBtdWx0aXBseSB0byB3b3JrLiB0aGVyZWZvcmUsIHdlJ3JlIGdvaW5nIHRvIGFjdHVhbGx5IGRvIGEKKyMgbXVsdGlwbHkgd2l0aCBhIGRlbm9ybSB3aGljaCB3aWxsIGNhdXNlIGFuIHVuaW1wbGVtZW50ZWQgZGF0YSB0eXBlCisjIGV4Y2VwdGlvbiB0byBiZSBwdXQgaW50byB0aGUgbWFjaGluZSB3aGljaCB3aWxsIGJlIGNhdWdodCBhbmQgY29ycmVjdGVkCisjIGxhdGVyLiB3ZSBkb24ndCBkbyB0aGlzIHdpdGggdGhlIERFTk9STXMgYWJvdmUgYmVjYXVzZSB0aGlzIG1ldGhvZAorIyBpcyBzbG93ZXIuIGJ1dCwgZG9uJ3QgZnJldCwgSSBkb24ndCBzZWUgaXQgYmVpbmcgdXNlZCBtdWNoIGVpdGhlci4KKwlmbW92LmwJCSglc3ApKywlZnBjcgkJIyByZXN0b3JlIHVzZXIgZnBjcgorCW1vdi5sCQkmMHg4MDAwMDAwMCwlZDEJCSMgbG9hZCBub3JtYWxpemVkIG1hbnRpc3NhCisJc3ViaS5sCQkmLTB4M2ZmZiwlZDAJCSMgaG93IG1hbnkgc2hvdWxkIHdlIHNoaWZ0PworCW5lZy5sCQklZDAJCQkjIG1ha2UgaXQgcG9zaXRpdmUKKwljbXBpLmIJCSVkMCwmMHgyMAkJIyBpcyBpdCA+IDMyPworCWJnZS5iCQlzb2tfZG5ybV8zMgkJIyB5ZXMKKwlsc3IubAkJJWQwLCVkMQkJCSMgbm87IGJpdCBzdGF5cyBpbiB1cHBlciBsdworCWNsci5sCQktKCVzcCkJCQkjIGluc2VydCB6ZXJvIGxvdyBtYW50aXNzYQorCW1vdi5sCQklZDEsLSglc3ApCQkjIGluc2VydCBuZXcgaGlnaCBtYW50aXNzYQorCWNsci5sCQktKCVzcCkJCQkjIG1ha2UgemVybyBleHBvbmVudAorCWJyYS5iCQlzb2tfbm9ybV9jb250Citzb2tfZG5ybV8zMjoKKwlzdWJpLmIJCSYweDIwLCVkMAkJIyBnZXQgc2hpZnQgY291bnQKKwlsc3IubAkJJWQwLCVkMQkJCSMgbWFrZSBsb3cgbWFudGlzc2EgbG9uZ3dvcmQKKwltb3YubAkJJWQxLC0oJXNwKQkJIyBpbnNlcnQgbmV3IGxvdyBtYW50aXNzYQorCWNsci5sCQktKCVzcCkJCQkjIGluc2VydCB6ZXJvIGhpZ2ggbWFudGlzc2EKKwljbHIubAkJLSglc3ApCQkJIyBtYWtlIHplcm8gZXhwb25lbnQKKwlicmEuYgkJc29rX25vcm1fY29udAorCisjIHRoZSBzcmMgd2lsbCBmb3JjZSB0aGUgZHN0IHRvIGEgREVOT1JNIHZhbHVlIG9yIHdvcnNlLiBzbywgbGV0J3MKKyMgY3JlYXRlIGFuIGZwIG11bHRpcGx5IHRoYXQgd2lsbCBjcmVhdGUgdGhlIHJlc3VsdC4KK3Nva19ub3JtOgorCWZtb3ZtLngJCURTVCglYTEpLCYweDgwCQkjIGxvYWQgZnAwIHdpdGggbm9ybWFsaXplZCBzcmMKK3Nva19ub3JtMjoKKwlmbW92LmwJCSglc3ApKywlZnBjcgkJIyByZXN0b3JlIHVzZXIgZnBjcgorCisJYWRkaS53CQkmMHgzZmZmLCVkMAkJIyB0dXJuIHNyYyBhbXQgaW50byBleHAgdmFsdWUKKwlzd2FwCQklZDAJCQkjIHB1dCBleHBvbmVudCBpbiBoaWdoIHdvcmQKKwljbHIubAkJLSglc3ApCQkJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSYweDgwMDAwMDAwLC0oJXNwKQkjIGluc2VydCBuZXcgaGlnaCBtYW50aXNzYQorCW1vdi5sCQklZDAsLSglc3ApCQkjIGluc2VydCBuZXcgbG8gbWFudGlzc2EKKworc29rX25vcm1fY29udDoKKwlmbW92LmwJCSVmcGNyLCVkMAkJIyBkMCBuZWVkcyBmcGNyIGZvciB0X2NhdGNoMgorCW1vdi5iCQkmRk1VTF9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1VTAorCWZtdWwueAkJKCVzcCkrLCVmcDAJCSMgZG8gdGhlIG11bHRpcGx5CisJYnJhCQl0X2NhdGNoMgkJIyBjYXRjaCBhbnkgZXhjZXB0aW9ucworCisjCisjIFNvdXJjZSBpcyBvdXRzaWRlIG9mIDJeMTQgcmFuZ2UuICBUZXN0IHRoZSBzaWduIGFuZCBicmFuY2gKKyMgdG8gdGhlIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbiBoYW5kbGVyLgorIworc3JjX291dDoKKwltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIGN0cmwgYml0cworCWV4ZwkJJWEwLCVhMQkJCSMgc3dhcCBzcmMsZHN0IHB0cnMKKwl0c3QuYgkJU1JDX0VYKCVhMSkJCSMgaXMgc3JjIG5lZ2F0aXZlPworCWJtaQkJdF91bmZsCQkJIyB5ZXM7IHVuZGVyZmxvdworCWJyYQkJdF9vdmZsX3NjCQkjIG5vOyBvdmVyZmxvdworCisjCisjIFRoZSBzb3VyY2UgaW5wdXQgaXMgYmVsb3cgMSwgc28gd2UgY2hlY2sgZm9yIGRlbm9ybWFsaXplZCBudW1iZXJzCisjIGFuZCBzZXQgdW5mbC4KKyMKK3NyY19zbWFsbDoKKwl0c3QuYgkJRFNUX0hJKCVhMSkJCSMgaXMgZHN0IGRlbm9ybWFsaXplZD8KKwlicGwuYgkJc3NtYWxsX2RvbmUJCSMgeWVzCisKKwltb3YubAkJKCVzcCkrLCVkMAorCWZtb3YubAkJJWQwLCVmcGNyCQkjIG5vOyBsb2FkIGNvbnRyb2wgYml0cworCW1vdi5iCQkmRk1PVl9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1PVkUKKwlmbW92LngJCURTVCglYTEpLCVmcDAJCSMgc2ltcGx5IHJldHVybiBkZXN0CisJYnJhCQl0X2NhdGNoMgorc3NtYWxsX2RvbmU6CisJbW92LmwJCSglc3ApKywlZDAJCSMgbG9hZCBjb250cm9sIGJpdHMgaW50byBkMQorCW1vdi5sCQklYTEsJWEwCQkJIyBwYXNzIHB0ciB0byBkc3QKKwlicmEJCXRfcmVzZG5ybQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNtb2QoKTogY29tcHV0ZXMgdGhlIGZwIE1PRCBvZiB0aGUgaW5wdXQgdmFsdWVzIFgsWS4JCQkjCisjIHNyZW0oKTogY29tcHV0ZXMgdGhlIGZwIChJRUVFKSBSRU0gb2YgdGhlIGlucHV0IHZhbHVlcyBYLFkuCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0IFgJCQkjCisjCWExID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQgWQkJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMJVGhlIGlucHV0IG9wZXJhbmRzIFggYW5kIFkgY2FuIGJlIGVpdGhlciBub3JtYWxpemVkIG9yCQkjCisjCWRlbm9ybWFsaXplZC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMgICAgICBmcDAgPSBGUkVNKFgsWSkgb3IgRk1PRChYLFkpCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAxLiAgU2F2ZSBhbmQgc3RyaXAgc2lnbnMgb2YgWCBhbmQgWTogc2lnblggOj0gc2lnbihYKSwJIworIyAgICAgICAgICAgICAgICBzaWduWSA6PSBzaWduKFkpLCBYIDo9IHxYfCwgWSA6PSB8WXwsCQkJIworIyAgICAgICAgICAgICAgICBzaWduUSA6PSBzaWduWCBFT1Igc2lnblkuIFJlY29yZCB3aGV0aGVyIE1PRCBvciBSRU0JIworIyAgICAgICAgICAgICAgICBpcyByZXF1ZXN0ZWQuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAyLiAgU2V0IEwgOj0gZXhwbyhYKS1leHBvKFkpLCBrIDo9IDAsIFEgOj0gMC4JCSMKKyMgICAgICAgICAgICAgICAgSWYgKEwgPCAwKSB0aGVuCQkJCQkjCisjICAgICAgICAgICAgICAgICAgIFIgOj0gWCwgZ28gdG8gU3RlcCA0LgkJCQkjCisjICAgICAgICAgICAgICAgIGVsc2UJCQkJCQkJIworIyAgICAgICAgICAgICAgICAgICBSIDo9IDJeKC1MKVgsIGogOj0gTC4JCQkJIworIyAgICAgICAgICAgICAgICBlbmRpZgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDMuICBQZXJmb3JtIE1PRChYLFkpCQkJCQkjCisjICAgICAgICAgICAgMy4xIElmIFIgPSBZLCBnbyB0byBTdGVwIDkuCQkJCSMKKyMgICAgICAgICAgICAzLjIgSWYgUiA+IFksIHRoZW4geyBSIDo9IFIgLSBZLCBRIDo9IFEgKyAxfQkJIworIyAgICAgICAgICAgIDMuMyBJZiBqID0gMCwgZ28gdG8gU3RlcCA0LgkJCQkjCisjICAgICAgICAgICAgMy40IGsgOj0gayArIDEsIGogOj0gaiAtIDEsIFEgOj0gMlEsIFIgOj0gMlIuIEdvIHRvCSMKKyMgICAgICAgICAgICAgICAgU3RlcCAzLjEuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCA0LiAgQXQgdGhpcyBwb2ludCwgUiA9IFggLSBRWSA9IE1PRChYLFkpLiBTZXQJCSMKKyMgICAgICAgICAgICAgICAgTGFzdF9TdWJ0cmFjdCA6PSBmYWxzZSAodXNlZCBpbiBTdGVwIDcgYmVsb3cpLiBJZgkjCisjICAgICAgICAgICAgICAgIE1PRCBpcyByZXF1ZXN0ZWQsIGdvIHRvIFN0ZXAgNi4JCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDUuICBSID0gTU9EKFgsWSksIGJ1dCBSRU0oWCxZKSBpcyByZXF1ZXN0ZWQuCQkjCisjICAgICAgICAgICAgNS4xIElmIFIgPCBZLzIsIHRoZW4gUiA9IE1PRChYLFkpID0gUkVNKFgsWSkuIEdvIHRvCSMKKyMgICAgICAgICAgICAgICAgU3RlcCA2LgkJCQkJCSMKKyMgICAgICAgICAgICA1LjIgSWYgUiA+IFkvMiwgdGhlbiB7IHNldCBMYXN0X1N1YnRyYWN0IDo9IHRydWUsCQkjCisjICAgICAgICAgICAgICAgIFEgOj0gUSArIDEsIFkgOj0gc2lnblkqWSB9LiBHbyB0byBTdGVwIDYuCQkjCisjICAgICAgICAgICAgNS4zIFRoaXMgaXMgdGhlIHRyaWNreSBjYXNlIG9mIFIgPSBZLzIuIElmIFEgaXMgb2RkLAkjCisjICAgICAgICAgICAgICAgIHRoZW4geyBRIDo9IFEgKyAxLCBzaWduWCA6PSAtc2lnblggfS4JCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDYuICBSIDo9IHNpZ25YKlIuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCA3LiAgSWYgTGFzdF9TdWJ0cmFjdCA9IHRydWUsIFIgOj0gUiAtIFkuCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCA4LiAgUmV0dXJuIHNpZ25RLCBsYXN0IDcgYml0cyBvZiBRLCBhbmQgUiBhcyByZXF1aXJlZC4JIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCA5LiAgQXQgdGhpcyBwb2ludCwgUiA9IDJeKC1qKSpYIC0gUSBZID0gWS4gVGh1cywJCSMKKyMgICAgICAgICAgICAgICAgWCA9IDJeKGopKihRKzEpWS4gc2V0IFEgOj0gMl4oaikqKFErMSksCQkjCisjICAgICAgICAgICAgICAgIFIgOj0gMC4gUmV0dXJuIHNpZ25RLCBsYXN0IDcgYml0cyBvZiBRLCBhbmQgUi4JCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlzZXQJCU1vZF9GbGFnLExfU0NSMworCXNldAkJU2NfRmxhZyxMX1NDUjMrMQorCisJc2V0CQlTaWduWSxMX1NDUjIKKwlzZXQJCVNpZ25YLExfU0NSMisyCisJc2V0CQlTaWduUSxMX1NDUjMrMgorCisJc2V0CQlZLEZQX1NDUjAKKwlzZXQJCVlfSGksWSs0CisJc2V0CQlZX0xvLFkrOAorCisJc2V0CQlSLEZQX1NDUjEKKwlzZXQJCVJfSGksUis0CisJc2V0CQlSX0xvLFIrOAorCitTY2FsZToKKwlsb25nCQkweDAwMDEwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisKKwlnbG9iYWwJCXNtb2QKK3Ntb2Q6CisJY2xyLmIJCUZQU1JfUUJZVEUoJWE2KQorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgY3RybCBiaXRzCisJY2xyLmIJCU1vZF9GbGFnKCVhNikKKwlicmEuYgkJTW9kX1JlbQorCisJZ2xvYmFsCQlzcmVtCitzcmVtOgorCWNsci5iCQlGUFNSX1FCWVRFKCVhNikKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIGN0cmwgYml0cworCW1vdi5iCQkmMHgxLE1vZF9GbGFnKCVhNikKKworTW9kX1JlbToKKyMuLlNhdmUgc2lnbiBvZiBYIGFuZCBZCisJbW92bS5sCQkmMHgzZjAwLC0oJXNwKQkJIyBzYXZlIGRhdGEgcmVnaXN0ZXJzCisJbW92LncJCVNSQ19FWCglYTApLCVkMworCW1vdi53CQklZDMsU2lnblkoJWE2KQorCWFuZC5sCQkmMHgwMDAwN0ZGRiwlZDMJCSMgWSA6PSB8WXwKKworIworCW1vdi5sCQlTUkNfSEkoJWEwKSwlZDQKKwltb3YubAkJU1JDX0xPKCVhMCksJWQ1CQkjIChEMyxENCxENSkgaXMgfFl8CisKKwl0c3QubAkJJWQzCisJYm5lLmIJCVlfTm9ybWFsCisKKwltb3YubAkJJjB4MDAwMDNGRkUsJWQzCQkjICQzRkZEICsgMQorCXRzdC5sCQklZDQKKwlibmUuYgkJSGlZX25vdDAKKworSGlZXzA6CisJbW92LmwJCSVkNSwlZDQKKwljbHIubAkJJWQ1CisJc3ViLmwJCSYzMiwlZDMKKwljbHIubAkJJWQ2CisJYmZmZm8JCSVkNHsmMDomMzJ9LCVkNgorCWxzbC5sCQklZDYsJWQ0CisJc3ViLmwJCSVkNiwlZDMJCQkjIChEMyxENCxENSkgaXMgbm9ybWFsaXplZAorIwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ud2l0aCBiaWFzICQ3RkZECisJYnJhLmIJCUNoa19YCisKK0hpWV9ub3QwOgorCWNsci5sCQklZDYKKwliZmZmbwkJJWQ0eyYwOiYzMn0sJWQ2CisJc3ViLmwJCSVkNiwlZDMKKwlsc2wubAkJJWQ2LCVkNAorCW1vdi5sCQklZDUsJWQ3CQkJIyBhIGNvcHkgb2YgRDUKKwlsc2wubAkJJWQ2LCVkNQorCW5lZy5sCQklZDYKKwlhZGQubAkJJjMyLCVkNgorCWxzci5sCQklZDYsJWQ3CisJb3IubAkJJWQ3LCVkNAkJCSMgKEQzLEQ0LEQ1KSBub3JtYWxpemVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ud2l0aCBiaWFzICQ3RkZECisJYnJhLmIJCUNoa19YCisKK1lfTm9ybWFsOgorCWFkZC5sCQkmMHgwMDAwM0ZGRSwlZDMJCSMgKEQzLEQ0LEQ1KSBub3JtYWxpemVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ud2l0aCBiaWFzICQ3RkZECisKK0Noa19YOgorCW1vdi53CQlEU1RfRVgoJWExKSwlZDAKKwltb3YudwkJJWQwLFNpZ25YKCVhNikKKwltb3YudwkJU2lnblkoJWE2KSwlZDEKKwllb3IubAkJJWQwLCVkMQorCWFuZC5sCQkmMHgwMDAwODAwMCwlZDEKKwltb3YudwkJJWQxLFNpZ25RKCVhNikJCSMgc2lnbihRKSBvYnRhaW5lZAorCWFuZC5sCQkmMHgwMDAwN0ZGRiwlZDAKKwltb3YubAkJRFNUX0hJKCVhMSksJWQxCisJbW92LmwJCURTVF9MTyglYTEpLCVkMgkJIyAoRDAsRDEsRDIpIGlzIHxYfAorCXRzdC5sCQklZDAKKwlibmUuYgkJWF9Ob3JtYWwKKwltb3YubAkJJjB4MDAwMDNGRkUsJWQwCisJdHN0LmwJCSVkMQorCWJuZS5iCQlIaVhfbm90MAorCitIaVhfMDoKKwltb3YubAkJJWQyLCVkMQorCWNsci5sCQklZDIKKwlzdWIubAkJJjMyLCVkMAorCWNsci5sCQklZDYKKwliZmZmbwkJJWQxeyYwOiYzMn0sJWQ2CisJbHNsLmwJCSVkNiwlZDEKKwlzdWIubAkJJWQ2LCVkMAkJCSMgKEQwLEQxLEQyKSBpcyBub3JtYWxpemVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ud2l0aCBiaWFzICQ3RkZECisJYnJhLmIJCUluaXQKKworSGlYX25vdDA6CisJY2xyLmwJCSVkNgorCWJmZmZvCQklZDF7JjA6JjMyfSwlZDYKKwlzdWIubAkJJWQ2LCVkMAorCWxzbC5sCQklZDYsJWQxCisJbW92LmwJCSVkMiwlZDcJCQkjIGEgY29weSBvZiBEMgorCWxzbC5sCQklZDYsJWQyCisJbmVnLmwJCSVkNgorCWFkZC5sCQkmMzIsJWQ2CisJbHNyLmwJCSVkNiwlZDcKKwlvci5sCQklZDcsJWQxCQkJIyAoRDAsRDEsRDIpIG5vcm1hbGl6ZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi53aXRoIGJpYXMgJDdGRkQKKwlicmEuYgkJSW5pdAorCitYX05vcm1hbDoKKwlhZGQubAkJJjB4MDAwMDNGRkUsJWQwCQkjIChEMCxEMSxEMikgbm9ybWFsaXplZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLndpdGggYmlhcyAkN0ZGRAorCitJbml0OgorIworCW1vdi5sCQklZDMsTF9TQ1IxKCVhNikJCSMgc2F2ZSBiaWFzZWQgZXhwKFkpCisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBiaWFzZWQgZXhwKFgpCisJc3ViLmwJCSVkMywlZDAJCQkjIEwgOj0gZXhwbyhYKS1leHBvKFkpCisKKwljbHIubAkJJWQ2CQkJIyBENiA6PSBjYXJyeSA8LSAwCisJY2xyLmwJCSVkMwkJCSMgRDMgaXMgUQorCW1vdi5sCQkmMCwlYTEJCQkjIEExIGlzIGs7IGoraz1MLCBRPTAKKworIy4uKENhcnJ5LEQxLEQyKSBpcyBSCisJdHN0LmwJCSVkMAorCWJnZS5iCQlNb2RfTG9vcF9wcmUKKworIy4uZXhwbyhYKSA8IGV4cG8oWSkuIFRodXMgWCA9IG1vZChYLFkpCisjCisJbW92LmwJCSglc3ApKywlZDAJCSMgcmVzdG9yZSBkMAorCWJyYS53CQlHZXRfTW9kCisKK01vZF9Mb29wX3ByZToKKwlhZGRxLmwJCSYweDQsJXNwCQkjIGVyYXNlIGV4cChYKQorIy4uQXQgdGhpcyBwb2ludCAgUiA9IDJeKC1MKVg7IFEgPSAwOyBrID0gMDsgYW5kICBrK2ogPSBMCitNb2RfTG9vcDoKKwl0c3QubAkJJWQ2CQkJIyB0ZXN0IGNhcnJ5IGJpdAorCWJndC5iCQlSX0dUX1kKKworIy4uQXQgdGhpcyBwb2ludCBjYXJyeSA9IDAsIFIgPSAoRDEsRDIpLCBZID0gKEQ0LEQ1KQorCWNtcC5sCQklZDEsJWQ0CQkJIyBjb21wYXJlIGhpKFIpIGFuZCBoaShZKQorCWJuZS5iCQlSX05FX1kKKwljbXAubAkJJWQyLCVkNQkJCSMgY29tcGFyZSBsbyhSKSBhbmQgbG8oWSkKKwlibmUuYgkJUl9ORV9ZCisKKyMuLkF0IHRoaXMgcG9pbnQsIFIgPSBZCisJYnJhLncJCVJlbV9pc18wCisKK1JfTkVfWToKKyMuLnVzZSB0aGUgYm9ycm93IG9mIHRoZSBwcmV2aW91cyBjb21wYXJlCisJYmNzLmIJCVJfTFRfWQkJCSMgYm9ycm93IGlzIHNldCBpZmYgUiA8IFkKKworUl9HVF9ZOgorIy4uSWYgQ2FycnkgaXMgc2V0LCB0aGVuIFkgPCAoQ2FycnksRDEsRDIpIDwgMlkuIE90aGVyd2lzZSwgQ2FycnkgPSAwCisjLi5hbmQgWSA8IChEMSxEMikgPCAyWS4gRWl0aGVyIHdheSwgcGVyZm9ybSBSIC0gWQorCXN1Yi5sCQklZDUsJWQyCQkJIyBsbyhSKSAtIGxvKFkpCisJc3VieC5sCQklZDQsJWQxCQkJIyBoaShSKSAtIGhpKFkpCisJY2xyLmwJCSVkNgkJCSMgY2xlYXIgY2FycnkKKwlhZGRxLmwJCSYxLCVkMwkJCSMgUSA6PSBRICsgMQorCitSX0xUX1k6CisjLi5BdCB0aGlzIHBvaW50LCBDYXJyeT0wLCBSIDwgWS4gUiA9IDJeKGstTClYIC0gUVk7IGsraiA9IEw7IGogPj0gMC4KKwl0c3QubAkJJWQwCQkJIyBzZWUgaWYgaiA9IDAuCisJYmVxLmIJCVBvc3RMb29wCisKKwlhZGQubAkJJWQzLCVkMwkJCSMgUSA6PSAyUQorCWFkZC5sCQklZDIsJWQyCQkJIyBsbyhSKSA9IDJsbyhSKQorCXJveGwubAkJJjEsJWQxCQkJIyBoaShSKSA9IDJoaShSKSArIGNhcnJ5CisJc2NzCQklZDYJCQkjIHNldCBDYXJyeSBpZiAyKFIpIG92ZXJmbG93cworCWFkZHEubAkJJjEsJWExCQkJIyBrIDo9IGsrMQorCXN1YnEubAkJJjEsJWQwCQkJIyBqIDo9IGogLSAxCisjLi5BdCB0aGlzIHBvaW50LCBSPShDYXJyeSxEMSxEMikgPSAyXihrLUwpWCAtIFFZLCBqK2s9TCwgaiA+PSAwLCBSIDwgMlkuCisKKwlicmEuYgkJTW9kX0xvb3AKKworUG9zdExvb3A6CisjLi5rID0gTCwgaiA9IDAsIENhcnJ5ID0gMCwgUiA9IChEMSxEMikgPSBYIC0gUVksIFIgPCBZLgorCisjLi5ub3JtYWxpemUgUi4KKwltb3YubAkJTF9TQ1IxKCVhNiksJWQwCQkjIG5ldyBiaWFzZWQgZXhwbyBvZiBSCisJdHN0LmwJCSVkMQorCWJuZS5iCQlIaVJfbm90MAorCitIaVJfMDoKKwltb3YubAkJJWQyLCVkMQorCWNsci5sCQklZDIKKwlzdWIubAkJJjMyLCVkMAorCWNsci5sCQklZDYKKwliZmZmbwkJJWQxeyYwOiYzMn0sJWQ2CisJbHNsLmwJCSVkNiwlZDEKKwlzdWIubAkJJWQ2LCVkMAkJCSMgKEQwLEQxLEQyKSBpcyBub3JtYWxpemVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ud2l0aCBiaWFzICQ3RkZECisJYnJhLmIJCUdldF9Nb2QKKworSGlSX25vdDA6CisJY2xyLmwJCSVkNgorCWJmZmZvCQklZDF7JjA6JjMyfSwlZDYKKwlibWkuYgkJR2V0X01vZAkJCSMgYWxyZWFkeSBub3JtYWxpemVkCisJc3ViLmwJCSVkNiwlZDAKKwlsc2wubAkJJWQ2LCVkMQorCW1vdi5sCQklZDIsJWQ3CQkJIyBhIGNvcHkgb2YgRDIKKwlsc2wubAkJJWQ2LCVkMgorCW5lZy5sCQklZDYKKwlhZGQubAkJJjMyLCVkNgorCWxzci5sCQklZDYsJWQ3CisJb3IubAkJJWQ3LCVkMQkJCSMgKEQwLEQxLEQyKSBub3JtYWxpemVkCisKKyMKK0dldF9Nb2Q6CisJY21wLmwJCSVkMCwmMHgwMDAwNDFGRQorCWJnZS5iCQlOb19TY2FsZQorRG9fU2NhbGU6CisJbW92LncJCSVkMCxSKCVhNikKKwltb3YubAkJJWQxLFJfSGkoJWE2KQorCW1vdi5sCQklZDIsUl9MbyglYTYpCisJbW92LmwJCUxfU0NSMSglYTYpLCVkNgorCW1vdi53CQklZDYsWSglYTYpCisJbW92LmwJCSVkNCxZX0hpKCVhNikKKwltb3YubAkJJWQ1LFlfTG8oJWE2KQorCWZtb3YueAkJUiglYTYpLCVmcDAJCSMgbm8gZXhjZXB0aW9uCisJbW92LmIJCSYxLFNjX0ZsYWcoJWE2KQorCWJyYS5iCQlNb2RPclJlbQorTm9fU2NhbGU6CisJbW92LmwJCSVkMSxSX0hpKCVhNikKKwltb3YubAkJJWQyLFJfTG8oJWE2KQorCXN1Yi5sCQkmMHgzRkZFLCVkMAorCW1vdi53CQklZDAsUiglYTYpCisJbW92LmwJCUxfU0NSMSglYTYpLCVkNgorCXN1Yi5sCQkmMHgzRkZFLCVkNgorCW1vdi5sCQklZDYsTF9TQ1IxKCVhNikKKwlmbW92LngJCVIoJWE2KSwlZnAwCisJbW92LncJCSVkNixZKCVhNikKKwltb3YubAkJJWQ0LFlfSGkoJWE2KQorCW1vdi5sCQklZDUsWV9MbyglYTYpCisJY2xyLmIJCVNjX0ZsYWcoJWE2KQorCisjCitNb2RPclJlbToKKwl0c3QuYgkJTW9kX0ZsYWcoJWE2KQorCWJlcS5iCQlGaXhfU2lnbgorCisJbW92LmwJCUxfU0NSMSglYTYpLCVkNgkJIyBuZXcgYmlhc2VkIGV4cG8oWSkKKwlzdWJxLmwJCSYxLCVkNgkJCSMgYmlhc2VkIGV4cG8oWS8yKQorCWNtcC5sCQklZDAsJWQ2CisJYmx0LmIJCUZpeF9TaWduCisJYmd0LmIJCUxhc3RfU3ViCisKKwljbXAubAkJJWQxLCVkNAorCWJuZS5iCQlOb3RfRVEKKwljbXAubAkJJWQyLCVkNQorCWJuZS5iCQlOb3RfRVEKKwlicmEudwkJVGllX0Nhc2UKKworTm90X0VROgorCWJjcy5iCQlGaXhfU2lnbgorCitMYXN0X1N1YjoKKyMKKwlmc3ViLngJCVkoJWE2KSwlZnAwCQkjIG5vIGV4Y2VwdGlvbnMKKwlhZGRxLmwJCSYxLCVkMwkJCSMgUSA6PSBRICsgMQorCisjCitGaXhfU2lnbjoKKyMuLkdldCBzaWduIG9mIFgKKwltb3YudwkJU2lnblgoJWE2KSwlZDYKKwliZ2UuYgkJR2V0X1EKKwlmbmVnLngJCSVmcDAKKworIy4uR2V0IFEKKyMKK0dldF9ROgorCWNsci5sCQklZDYKKwltb3YudwkJU2lnblEoJWE2KSwlZDYJCSMgRDYgaXMgc2lnbihRKQorCW1vdi5sCQkmOCwlZDcKKwlsc3IubAkJJWQ3LCVkNgorCWFuZC5sCQkmMHgwMDAwMDA3RiwlZDMJCSMgNyBiaXRzIG9mIFEKKwlvci5sCQklZDYsJWQzCQkJIyBzaWduIGFuZCBiaXRzIG9mIFEKKyMJc3dhcAkJJWQzCisjCWZtb3YubAkJJWZwc3IsJWQ2CisjCWFuZC5sCQkmMHhGRjAwRkZGRiwlZDYKKyMJb3IubAkJJWQzLCVkNgorIwlmbW92LmwJCSVkNiwlZnBzcgkJIyBwdXQgUSBpbiBmcHNyCisJbW92LmIJCSVkMyxGUFNSX1FCWVRFKCVhNikJIyBwdXQgUSBpbiBmcHNyCisKKyMKK1Jlc3RvcmU6CisJbW92bS5sCQkoJXNwKSssJjB4ZmMJCSMgIHslZDItJWQ3fQorCW1vdi5sCQkoJXNwKSssJWQwCisJZm1vdi5sCQklZDAsJWZwY3IKKwl0c3QuYgkJU2NfRmxhZyglYTYpCisJYmVxLmIJCUZpbmlzaAorCW1vdi5iCQkmRk1VTF9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1VTAorCWZtdWwueAkJU2NhbGUoJXBjKSwlZnAwCQkjIG1heSBjYXVzZSB1bmRlcmZsb3cKKwlicmEJCXRfY2F0Y2gyCisjIHRoZSAnMDQwIHBhY2thZ2UgZGlkIHRoaXMgYXBwYXJlbnRseSB0byBzZWUgaWYgdGhlIGRzdCBvcGVyYW5kIGZvciB0aGUKKyMgcHJlY2VkaW5nIGZtdWwgd2FzIGEgZGVub3JtLiBidXQsIGl0IGJldHRlciBub3QgaGF2ZSBiZWVuIHNpbmNlIHRoZQorIyBhbGdvcml0aG0ganVzdCBnb3QgZG9uZSBwbGF5aW5nIHdpdGggZnAwIGFuZCBleHBlY3RlZCBubyBleGNlcHRpb25zCisjIGFzIGEgcmVzdWx0LiB0cnVzdCBtZS4uLgorIwlicmEJCXRfYXZvaWRfdW5zdXBwCQkjIGNoZWNrIGZvciBkZW5vcm0gYXMgYQorIwkJCQkJCTtyZXN1bHQgb2YgdGhlIHNjYWxpbmcKKworRmluaXNoOgorCW1vdi5iCQkmRk1PVl9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1PVkUKKwlmbW92LngJCSVmcDAsJWZwMAkJIyBjYXB0dXJlIGV4Y2VwdGlvbnMgJiByb3VuZAorCWJyYQkJdF9jYXRjaDIKKworUmVtX2lzXzA6CisjLi5SID0gMl4oLWopWCAtIFEgWSA9IFksIHRodXMgUiA9IDAgYW5kIHF1b3RpZW50ID0gMl5qIChRKzEpCisJYWRkcS5sCQkmMSwlZDMKKwljbXAubAkJJWQwLCY4CQkJIyBEMCBpcyBqCisJYmdlLmIJCVFfQmlnCisKKwlsc2wubAkJJWQwLCVkMworCWJyYS5iCQlTZXRfUl8wCisKK1FfQmlnOgorCWNsci5sCQklZDMKKworU2V0X1JfMDoKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAKKwljbHIuYgkJU2NfRmxhZyglYTYpCisJYnJhLncJCUZpeF9TaWduCisKK1RpZV9DYXNlOgorIy4uQ2hlY2sgcGFyaXR5IG9mIFEKKwltb3YubAkJJWQzLCVkNgorCWFuZC5sCQkmMHgwMDAwMDAwMSwlZDYKKwl0c3QubAkJJWQ2CisJYmVxLncJCUZpeF9TaWduCQkjIFEgaXMgZXZlbgorCisjLi5RIGlzIG9kZCwgUSA6PSBRICsgMSwgc2lnblggOj0gLXNpZ25YCisJYWRkcS5sCQkmMSwlZDMKKwltb3YudwkJU2lnblgoJWE2KSwlZDYKKwllb3IubAkJJjB4MDAwMDgwMDAsJWQ2CisJbW92LncJCSVkNixTaWduWCglYTYpCisJYnJhLncJCUZpeF9TaWduCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJdGFnKCk6IHJldHVybiB0aGUgb3B0eXBlIG9mIHRoZSBpbnB1dCBleHQgZnAgbnVtYmVyCQkjCisjCQkJCQkJCQkJIworIwlUaGlzIHJvdXRpbmUgaXMgdXNlZCBieSB0aGUgMDYwRlBMU1AuCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZAkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gdmFsdWUgb2YgdHlwZSB0YWcJCQkJCQkjCisjCQlvbmUgb2Y6IE5PUk0sIElORiwgUU5BTiwgU05BTiwgREVOT1JNLCBaRVJPCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlTaW1wbHkgdGVzdCB0aGUgZXhwb25lbnQsIGotYml0LCBhbmQgbWFudGlzc2EgdmFsdWVzIHRvCQkjCisjIGRldGVybWluZSB0aGUgdHlwZSBvZiBvcGVyYW5kLgkJCQkJIworIwlJZiBpdCdzIGFuIHVubm9ybWFsaXplZCB6ZXJvLCBhbHRlciB0aGUgb3BlcmFuZCBhbmQgZm9yY2UgaXQJIworIyB0byBiZSBhIG5vcm1hbCB6ZXJvLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQl0YWcKK3RhZzoKKwltb3YudwkJRlRFTVBfRVgoJWEwKSwgJWQwCSMgZXh0cmFjdCBleHBvbmVudAorCWFuZGkudwkJJjB4N2ZmZiwgJWQwCQkjIHN0cmlwIG9mZiBzaWduCisJY21waS53CQklZDAsICYweDdmZmYJCSMgaXMgKEVYUCA9PSBNQVgpPworCWJlcS5iCQlpbmZfb3JfbmFuX3gKK25vdF9pbmZfb3JfbmFuX3g6CisJYnRzdAkJJjB4NyxGVEVNUF9ISSglYTApCisJYmVxLmIJCW5vdF9ub3JtX3gKK2lzX25vcm1feDoKKwltb3YuYgkJJk5PUk0sICVkMAorCXJ0cworbm90X25vcm1feDoKKwl0c3QudwkJJWQwCQkJIyBpcyBleHBvbmVudCA9IDA/CisJYm5lLmIJCWlzX3Vubm9ybV94Citub3RfdW5ub3JtX3g6CisJdHN0LmwJCUZURU1QX0hJKCVhMCkKKwlibmUuYgkJaXNfZGVub3JtX3gKKwl0c3QubAkJRlRFTVBfTE8oJWEwKQorCWJuZS5iCQlpc19kZW5vcm1feAoraXNfemVyb194OgorCW1vdi5iCQkmWkVSTywgJWQwCisJcnRzCitpc19kZW5vcm1feDoKKwltb3YuYgkJJkRFTk9STSwgJWQwCisJcnRzCitpc191bm5vcm1feDoKKwlic3IubAkJdW5ub3JtX2ZpeAkJIyBjb252ZXJ0IHRvIG5vcm0sZGVub3JtLG9yIHplcm8KKwlydHMKK2lzX3Vubm9ybV9yZWdfeDoKKwltb3YuYgkJJlVOTk9STSwgJWQwCisJcnRzCitpbmZfb3JfbmFuX3g6CisJdHN0LmwJCUZURU1QX0xPKCVhMCkKKwlibmUuYgkJaXNfbmFuX3gKKwltb3YubAkJRlRFTVBfSEkoJWEwKSwgJWQwCisJYW5kLmwJCSYweDdmZmZmZmZmLCAlZDAJIyBtc2IgaXMgYSBkb24ndCBjYXJlIQorCWJuZS5iCQlpc19uYW5feAoraXNfaW5mX3g6CisJbW92LmIJCSZJTkYsICVkMAorCXJ0cworaXNfbmFuX3g6CisJbW92LmIJCSZRTkFOLCAlZDAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitxbmFuOglsb25nCQkweDdmZmYwMDAwLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJdF9keigpOiBIYW5kbGUgMDYwRlBMU1AgZHogZXhjZXB0aW9uIGZvciAiZmxvZ24iIGVtdWxhdGlvbi4JIworIwl0X2R6MigpOiBIYW5kbGUgMDYwRlBMU1AgZHogZXhjZXB0aW9uIGZvciAiZmF0YW5oIiBlbXVsYXRpb24uCSMKKyMJCQkJCQkJCQkjCisjCVRoZXNlIHJvdWl0bmVzIGFyZSB1c2VkIGJ5IHRoZSAwNjBGUExTUCBwYWNrYWdlLgkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZC4JCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IGRlZmF1bHQgRFogcmVzdWx0LgkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVHJhbnNjZW5kZW50YWwgZW11bGF0aW9uIGZvciB0aGUgMDYwRlBMU1AgaGFzIGRldGVjdGVkIHRoYXQJIworIyBhIERaIGV4Y2VwdGlvbiBzaG91bGQgb2NjdXIgZm9yIHRoZSBpbnN0cnVjdGlvbi4gSWYgRFogaXMgZGlzYWJsZWQsCSMKKyMgcmV0dXJuIHRoZSBkZWZhdWx0IHJlc3VsdC4JCQkJCQkjCisjCUlmIERaIGlzIGVuYWJsZWQsIHRoZSBkc3Qgb3BlcmFuZCBzaG91bGQgYmUgcmV0dXJuZWQgdW5zY2F0aGVkCSMKKyMgaW4gZnAwIHdoaWxlIGZwMSBpcyB1c2VkIHRvIGNyZWF0ZSBhIERaIGV4Y2VwdGlvbiBzbyB0aGF0IHRoZQkJIworIyBvcGVyYXRpbmcgc3lzdGVtIGNhbiBsb2cgdGhhdCBzdWNoIGFuIGV2ZW50IG9jY3VycmVkLgkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXRfZHoKK3RfZHo6CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGNoZWNrIHNpZ24gZm9yIG5lZyBvciBwb3MKKwlicGwuYgkJZHpfcGluZgkJCSMgYnJhbmNoIGlmIHBvcyBzaWduCisKKwlnbG9iYWwJCXRfZHoyCit0X2R6MjoKKwlvcmkubAkJJmR6aW5mX21hc2srbmVnX21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgTi9JL0RaL0FEWgorCisJYnRzdAkJJmR6X2JpdCxGUENSX0VOQUJMRSglYTYpCisJYm5lLmIJCWR6X21pbmZfZW5hCisKKyMgZHogaXMgZGlzYWJsZWQuIHJldHVybiBhIC1JTkYuCisJZm1vdi5zCQkmMHhmZjgwMDAwMCwlZnAwCSMgcmV0dXJuIC1JTkYKKwlydHMKKworIyBkeiBpcyBlbmFibGVkLiBjcmVhdGUgYSBkeiBleGNlcHRpb24gc28gdGhlIHVzZXIgY2FuIHJlY29yZCBpdAorIyBidXQgdXNlIGZwMSBpbnN0ZWFkLiByZXR1cm4gdGhlIGRzdCBvcGVyYW5kIHVuc2NhdGhlZCBpbiBmcDAuCitkel9taW5mX2VuYToKKwlmbW92bS54CQlFWENfRlAwKCVhNiksJjB4ODAJIyByZXR1cm4gZnAwIHVuc2NhdGhlZAorCWZtb3YubAkJVVNFUl9GUENSKCVhNiksJWZwY3IKKwlmbW92LnMJCSYweGJmODAwMDAwLCVmcDEJIyBsb2FkIC0xCisJZmRpdi5zCQkmMHgwMDAwMDAwMCwlZnAxCSMgLTEgLyAwCisJcnRzCisKK2R6X3BpbmY6CisJb3JpLmwJCSZkemluZl9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IEkvRFovQURaCisKKwlidHN0CQkmZHpfYml0LEZQQ1JfRU5BQkxFKCVhNikKKwlibmUuYgkJZHpfcGluZl9lbmEKKworIyBkeiBpcyBkaXNhYmxlZC4gcmV0dXJuIGEgK0lORi4KKwlmbW92LnMJCSYweDdmODAwMDAwLCVmcDAJIyByZXR1cm4gK0lORgorCXJ0cworCisjIGR6IGlzIGVuYWJsZWQuIGNyZWF0ZSBhIGR6IGV4Y2VwdGlvbiBzbyB0aGUgdXNlciBjYW4gcmVjb3JkIGl0CisjIGJ1dCB1c2UgZnAxIGluc3RlYWQuIHJldHVybiB0aGUgZHN0IG9wZXJhbmQgdW5zY2F0aGVkIGluIGZwMC4KK2R6X3BpbmZfZW5hOgorCWZtb3ZtLngJCUVYQ19GUDAoJWE2KSwmMHg4MAkjIHJldHVybiBmcDAgdW5zY2F0aGVkCisJZm1vdi5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjcgorCWZtb3YucwkJJjB4M2Y4MDAwMDAsJWZwMQkjIGxvYWQgKzEKKwlmZGl2LnMJCSYweDAwMDAwMDAwLCVmcDEJIyArMSAvIDAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwl0X29wZXJyKCk6IEhhbmRsZSAwNjBGUExTUCBPUEVSUiBleGNlcHRpb24gZHVyaW5nIGVtdWxhdGlvbi4JIworIwkJCQkJCQkJCSMKKyMJVGhpcyByb3V0aW5lIGlzIHVzZWQgYnkgdGhlIDA2MEZQTFNQIHBhY2thZ2UuCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZS4JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMSA9IHNvdXJjZSBvcGVyYW5kCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gZGVmYXVsdCByZXN1bHQJCQkJCQkjCisjCWZwMSA9IHVuY2hhbmdlZAkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlBbiBvcGVyYW5kIGVycm9yIHNob3VsZCBvY2N1ciBhcyB0aGUgcmVzdWx0IG9mIHRyYW5zY2VuZGVudGFsCSMKKyMgZW11bGF0aW9uIGluIHRoZSAwNjBGUExTUC4gSWYgT1BFUlIgaXMgZGlzYWJsZWQsIGp1c3QgcmV0dXJuIGEgTkFOCSMKKyMgaW4gZnAwLiBJZiBPUEVSUiBpcyBlbmFibGVkLCByZXR1cm4gdGhlIGRzdCBvcGVyYW5kIHVuc2NhdGhlZCBpbiBmcDAJIworIyBhbmQgdGhlIHNvdXJjZSBvcGVyYW5kIGluIGZwMS4gVXNlIGZwMiB0byBjcmVhdGUgYW4gT1BFUlIgZXhjZXB0aW9uCSMKKyMgc28gdGhhdCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBjYW4gbG9nIHRoZSBldmVudC4JCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQl0X29wZXJyCit0X29wZXJyOgorCW9yaS5sCQkmb3BuYW5fbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBOQU4vT1BFUlIvQUlPUAorCisJYnRzdAkJJm9wZXJyX2JpdCxGUENSX0VOQUJMRSglYTYpCisJYm5lLmIJCW9wZXJyX2VuYQorCisjIG9wZXJyIGlzIGRpc2FibGVkLiByZXR1cm4gYSBRTkFOIGluIGZwMAorCWZtb3ZtLngJCXFuYW4oJXBjKSwmMHg4MAkJIyByZXR1cm4gUU5BTgorCXJ0cworCisjIG9wZXJyIGlzIGVuYWJsZWQuIGNyZWF0ZSBhbiBvcGVyciBleGNlcHRpb24gc28gdGhlIHVzZXIgY2FuIHJlY29yZCBpdAorIyBidXQgdXNlIGZwMiBpbnN0ZWFkLiByZXR1cm4gdGhlIGRzdCBvcGVyYW5kIHVuc2NhdGhlZCBpbiBmcDAuCitvcGVycl9lbmE6CisJZm1vdm0ueAkJRVhDX0ZQMCglYTYpLCYweDgwCSMgcmV0dXJuIGZwMCB1bnNjYXRoZWQKKwlmbW92LmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyCisJZm1vdm0ueAkJJjB4MDQsLSglc3ApCQkjIHNhdmUgZnAyCisJZm1vdi5zCQkmMHg3ZjgwMDAwMCwlZnAyCSMgbG9hZCArSU5GCisJZm11bC5zCQkmMHgwMDAwMDAwMCwlZnAyCSMgK0lORiB4IDAKKwlmbW92bS54CQkoJXNwKSssJjB4MjAJCSMgcmVzdG9yZSBmcDIKKwlydHMKKworcGxzX2h1Z2U6CisJbG9uZwkJMHg3ZmZlMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmZmZmYKK21uc19odWdlOgorCWxvbmcJCTB4ZmZmZTAwMDAsMHhmZmZmZmZmZiwweGZmZmZmZmZmCitwbHNfdGlueToKKwlsb25nCQkweDAwMDAwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMAorbW5zX3Rpbnk6CisJbG9uZwkJMHg4MDAwMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwl0X3VuZmwoKTogSGFuZGxlIDA2MEZQTFNQIHVuZGVyZmxvdyBleGNlcHRpb24gZHVyaW5nIGVtdWxhdGlvbi4JIworIwl0X3VuZmwyKCk6IEhhbmRsZSAwNjBGUExTUCB1bmRlcmZsb3cgZXhjZXB0aW9uIGR1cmluZwkJIworIwkgICAgICAgICAgIGVtdWxhdGlvbi4gcmVzdWx0IGFsd2F5cyBwb3NpdGl2ZS4JCQkjCisjCQkJCQkJCQkJIworIwlUaGlzIHJvdXRpbmUgaXMgdXNlZCBieSB0aGUgMDYwRlBMU1AgcGFja2FnZS4JCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lLgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlBbiB1bmRlcmZsb3cgc2hvdWxkIG9jY3VyIGFzIHRoZSByZXN1bHQgb2YgdHJhbnNjZW5kZW50YWwJIworIyBlbXVsYXRpb24gaW4gdGhlIDA2MEZQTFNQLiBDcmVhdGUgYW4gdW5kZXJmbG93IGJ5IHVzaW5nICJmbXVsIgkjCisjIGFuZCB0d28gdmVyeSBzbWFsbCBudW1iZXJzIG9mIGFwcHJvcHJpYXRlIHNpZ24gc28gdGhlIG9wZXJhdGluZwkjCisjIHN5c3RlbSBjYW4gbG9nIHRoZSBldmVudC4JCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQl0X3VuZmwKK3RfdW5mbDoKKwl0c3QuYgkJU1JDX0VYKCVhMCkKKwlicGwuYgkJdW5mX3BvcworCisJZ2xvYmFsCQl0X3VuZmwyCit0X3VuZmwyOgorCW9yaS5sCQkmdW5maW54X21hc2srbmVnX21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgTi9VTkZML0lORVgyL0FVTkZML0FJTkVYCisKKwlmbW92LmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyCisJZm1vdm0ueAkJbW5zX3RpbnkoJXBjKSwmMHg4MAorCWZtdWwueAkJcGxzX3RpbnkoJXBjKSwlZnAwCisKKwlmbW92LmwJCSVmcHNyLCVkMAorCXJvbC5sCQkmMHg4LCVkMAorCW1vdi5iCQklZDAsRlBTUl9DQyglYTYpCisJcnRzCit1bmZfcG9zOgorCW9yaS53CQkmdW5maW54X21hc2ssRlBTUl9FWENFUFQoJWE2KSAjIHNldCBVTkZML0lORVgyL0FVTkZML0FJTkVYCisKKwlmbW92LmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyCisJZm1vdm0ueAkJcGxzX3RpbnkoJXBjKSwmMHg4MAorCWZtdWwueAkJJWZwMCwlZnAwCisKKwlmbW92LmwJCSVmcHNyLCVkMAorCXJvbC5sCQkmMHg4LCVkMAorCW1vdi5iCQklZDAsRlBTUl9DQyglYTYpCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJdF9vdmZsKCk6IEhhbmRsZSAwNjBGUExTUCBvdmVyZmxvdyBleGNlcHRpb24gZHVyaW5nIGVtdWxhdGlvbi4JIworIwkJICAobW9uYWRpYykJCQkJCQkjCisjCXRfb3ZmbDIoKTogSGFuZGxlIDA2MEZQTFNQIG92ZXJmbG93IGV4Y2VwdGlvbiBkdXJpbmcJCSMKKyMJICAgICAgICAgICBlbXVsYXRpb24uIHJlc3VsdCBhbHdheXMgcG9zaXRpdmUuIChkeWFkaWMpCQkjCisjCXRfb3ZmbF9zYygpOiBIYW5kbGUgMDYwRlBMU1Agb3ZlcmZsb3cgZXhjZXB0aW9uIGR1cmluZwkJIworIwkgICAgICAgICAgICAgZW11bGF0aW9uIGZvciAiZnNjYWxlIi4JCQkJIworIwkJCQkJCQkJCSMKKyMJVGhpcyByb3V0aW5lIGlzIHVzZWQgYnkgdGhlIDA2MEZQTFNQIHBhY2thZ2UuCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZS4JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdAkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJQW4gb3ZlcmZsb3cgc2hvdWxkIG9jY3VyIGFzIHRoZSByZXN1bHQgb2YgdHJhbnNjZW5kZW50YWwJIworIyBlbXVsYXRpb24gaW4gdGhlIDA2MEZQTFNQLiBDcmVhdGUgYW4gb3ZlcmZsb3cgYnkgdXNpbmcgImZtdWwiCQkjCisjIGFuZCB0d28gdmVyeSBsYXJlZyBudW1iZXJzIG9mIGFwcHJvcHJpYXRlIHNpZ24gc28gdGhlIG9wZXJhdGluZwkjCisjIHN5c3RlbSBjYW4gbG9nIHRoZSBldmVudC4JCQkJCQkjCisjCUZvciB0X292Zmxfc2MoKSB3ZSB0YWtlIHNwZWNpYWwgY2FyZSBub3QgdG8gbG9zZSB0aGUgSU5FWDIgYml0LgkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQl0X292Zmxfc2MKK3Rfb3ZmbF9zYzoKKwlvcmkubAkJJm92ZmxfaW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgT1ZGTC9BT1ZGTC9BSU5FWAorCisJbW92LmIJCSVkMCwlZDEJCQkjIGZldGNoIHJuZCBwcmVjLG1vZGUKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBleHRyYWN0IHByZWMKKwliZXEudwkJb3ZmbF93b3JrCisKKyMgZHN0IG9wIGlzIGEgREVOT1JNLiB3ZSBoYXZlIHRvIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EgdG8gc2VlIGlmIHRoZQorIyByZXN1bHQgd291bGQgYmUgaW5leGFjdCBmb3IgdGhlIGdpdmVuIHByZWNpc2lvbi4gbWFrZSBhIGNvcHkgb2YgdGhlCisjIGRzdCBzbyB3ZSBkb24ndCBzY3JldyB1cCB0aGUgdmVyc2lvbiBwYXNzZWQgdG8gdXMuCisJbW92LncJCUxPQ0FMX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCUxPQ0FMX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCUxPQ0FMX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzcyBwdHIgdG8gRlBfU0NSMAorCW1vdm0ubAkJJjB4YzA4MCwtKCVzcCkJCSMgc2F2ZSBkMC1kMS9hMAorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgbWFudGlzc2EKKwltb3ZtLmwJCSglc3ApKywmMHgwMTAzCQkjIHJlc3RvcmUgZDAtZDEvYTAKKworCWNtcGkuYgkJJWQxLCYweDQwCQkjIGlzIHByZWNpc2lvbiBzZ2w/CisJYm5lLmIJCW92Zmxfc2NfZGJsCQkjIG5vOyBkYmwKK292Zmxfc2Nfc2dsOgorCXRzdC5sCQlMT0NBTF9MTyglYTApCQkjIGlzIGxvIGx3IG9mIHNnbCBzZXQ/CisJYm5lLmIJCW92Zmxfc2NfaW54CQkjIHllcworCXRzdC5iCQkzK0xPQ0FMX0hJKCVhMCkJCSMgaXMgbG8gYnl0ZSBvZiBoaSBsdyBzZXQ/CisJYm5lLmIJCW92Zmxfc2NfaW54CQkjIHllcworCWJyYS53CQlvdmZsX3dvcmsJCSMgZG9uJ3Qgc2V0IElORVgyCitvdmZsX3NjX2RibDoKKwltb3YubAkJTE9DQUxfTE8oJWEwKSwlZDEJIyBhcmUgYW55IG9mIGxvIDExIGJpdHMgb2YKKwlhbmRpLmwJCSYweDdmZiwlZDEJCSMgZGJsIG1hbnRpc3NhIHNldD8KKwliZXEudwkJb3ZmbF93b3JrCQkjIG5vOyBkb24ndCBzZXQgSU5FWDIKK292Zmxfc2NfaW54OgorCW9yaS5sCQkmaW5leDJfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBJTkVYMgorCWJyYS5iCQlvdmZsX3dvcmsJCSMgY29udGludWUKKworCWdsb2JhbAkJdF9vdmZsCit0X292Zmw6CisJb3JpLncJCSZvdmZpbnhfbWFzayxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IE9WRkwvSU5FWDIvQU9WRkwvQUlORVgKK292Zmxfd29yazoKKwl0c3QuYgkJU1JDX0VYKCVhMCkKKwlicGwuYgkJb3ZmbF9wCitvdmZsX206CisJZm1vdi5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjcgorCWZtb3ZtLngJCW1uc19odWdlKCVwYyksJjB4ODAKKwlmbXVsLngJCXBsc19odWdlKCVwYyksJWZwMAorCisJZm1vdi5sCQklZnBzciwlZDAKKwlyb2wubAkJJjB4OCwlZDAKKwlvcmkuYgkJJm5lZ19tYXNrLCVkMAorCW1vdi5iCQklZDAsRlBTUl9DQyglYTYpCisJcnRzCitvdmZsX3A6CisJZm1vdi5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjcgorCWZtb3ZtLngJCXBsc19odWdlKCVwYyksJjB4ODAKKwlmbXVsLngJCXBsc19odWdlKCVwYyksJWZwMAorCisJZm1vdi5sCQklZnBzciwlZDAKKwlyb2wubAkJJjB4OCwlZDAKKwltb3YuYgkJJWQwLEZQU1JfQ0MoJWE2KQorCXJ0cworCisJZ2xvYmFsCQl0X292ZmwyCit0X292ZmwyOgorCW9yaS53CQkmb3ZmaW54X21hc2ssRlBTUl9FWENFUFQoJWE2KSAjIHNldCBPVkZML0lORVgyL0FPVkZML0FJTkVYCisJZm1vdi5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjcgorCWZtb3ZtLngJCXBsc19odWdlKCVwYyksJjB4ODAKKwlmbXVsLngJCXBsc19odWdlKCVwYyksJWZwMAorCisJZm1vdi5sCQklZnBzciwlZDAKKwlyb2wubAkJJjB4OCwlZDAKKwltb3YuYgkJJWQwLEZQU1JfQ0MoJWE2KQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXRfY2F0Y2goKTogSGFuZGxlIDA2MEZQTFNQIE9WRkwsVU5GTCxvciBJTkVYMiBleGNlcHRpb24gZHVyaW5nCSMKKyMJCSAgIGVtdWxhdGlvbi4JCQkJCQkjCisjCXRfY2F0Y2gyKCk6IEhhbmRsZSAwNjBGUExTUCBPVkZMLFVORkwsb3IgSU5FWDIgZXhjZXB0aW9uIGR1cmluZwkjCisjCQkgICAgZW11bGF0aW9uLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCVRoZXNlIHJvdXRpbmVzIGFyZSB1c2VkIGJ5IHRoZSAwNjBGUExTUCBwYWNrYWdlLgkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZS4JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IGRlZmF1bHQgdW5kZXJmbG93IG9yIG92ZXJmbG93IHJlc3VsdAkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IGRlZmF1bHQgcmVzdWx0CQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSWYgYW4gb3ZlcmZsb3cgb3IgdW5kZXJmbG93IG9jY3VycmVkIGR1cmluZyB0aGUgbGFzdAkJIworIyBpbnN0cnVjdGlvbiBvZiB0cmFuc2NlbmRlbnRhbCAwNjBGUExTUCBlbXVsYXRpb24sIHRoZW4gaXQgaGFzIGFscmVhZHkJIworIyBvY2N1cnJlZCBhbmQgaGFzIGJlZW4gbG9nZ2VkLiBOb3cgd2UgbmVlZCB0byBzZWUgaWYgYW4gaW5leGFjdAkjCisjIGV4Y2VwdGlvbiBzaG91bGQgb2NjdXIuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJdF9jYXRjaDIKK3RfY2F0Y2gyOgorCWZtb3YubAkJJWZwc3IsJWQwCisJb3IubAkJJWQwLFVTRVJfRlBTUiglYTYpCisJYnJhLmIJCWlueDJfd29yaworCisJZ2xvYmFsCQl0X2NhdGNoCit0X2NhdGNoOgorCWZtb3YubAkJJWZwc3IsJWQwCisJb3IubAkJJWQwLFVTRVJfRlBTUiglYTYpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJdF9pbngyKCk6IEhhbmRsZSBpbmV4YWN0IDA2MEZQTFNQIGV4Y2VwdGlvbiBkdXJpbmcgZW11bGF0aW9uLgkjCisjCXRfcGlueDIoKTogSGFuZGxlIGluZXhhY3QgMDYwRlBMU1AgZXhjZXB0aW9uIGZvciAiKyIgcmVzdWx0cy4JIworIwl0X21pbngyKCk6IEhhbmRsZSBpbmV4YWN0IDA2MEZQTFNQIGV4Y2VwdGlvbiBmb3IgIi0iIHJlc3VsdHMuCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUuCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSBkZWZhdWx0IHJlc3VsdAkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IGRlZmF1bHQgcmVzdWx0CQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhlIGxhc3QgaW5zdHJ1Y3Rpb24gb2YgdHJhbnNjZW5kZW50YWwgZW11bGF0aW9uIGZvciB0aGUJIworIyAwNjBGUExTUCBzaG91bGQgYmUgaW5leGFjdC4gU28sIGlmIGluZXhhY3QgaXMgZW5hYmxlZCwgdGhlbiB3ZSBjcmVhdGUJIworIyB0aGUgZXZlbnQgaGVyZSBieSBhZGRpbmcgYSBsYXJnZSBhbmQgdmVyeSBzbWFsbCBudW1iZXIgdG9nZXRoZXIJIworIyBzbyB0aGF0IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGNhbiBsb2cgdGhlIGV2ZW50LgkJCSMKKyMJTXVzdCBjaGVjaywgdG9vLCBpZiB0aGUgcmVzdWx0IHdhcyB6ZXJvLCBpbiB3aGljaCBjYXNlIHdlIGp1c3QJIworIyBzZXQgdGhlIEZQU1IgYml0cyBhbmQgcmV0dXJuLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXRfaW54MgordF9pbngyOgorCWZibHQudwkJdF9taW54MgorCWZiZXEudwkJaW54Ml96ZXJvCisKKwlnbG9iYWwJCXRfcGlueDIKK3RfcGlueDI6CisJb3JpLncJCSZpbngyYV9tYXNrLEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgSU5FWDIvQUlORVgKKwlicmEuYgkJaW54Ml93b3JrCisKKwlnbG9iYWwJCXRfbWlueDIKK3RfbWlueDI6CisJb3JpLmwJCSZpbngyYV9tYXNrK25lZ19tYXNrLFVTRVJfRlBTUiglYTYpCisKK2lueDJfd29yazoKKwlidHN0CQkmaW5leDJfYml0LEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBpbmV4YWN0IGVuYWJsZWQ/CisJYm5lLmIJCWlueDJfd29ya19lbmEJCSMgeWVzCisJcnRzCitpbngyX3dvcmtfZW5hOgorCWZtb3YubAkJVVNFUl9GUENSKCVhNiksJWZwY3IJIyBpbnNlcnQgdXNlcidzIGV4Y2VwdGlvbnMKKwlmbW92LnMJCSYweDNmODAwMDAwLCVmcDEJIyBsb2FkICsxCisJZmFkZC54CQlwbHNfdGlueSglcGMpLCVmcDEJIyBjYXVzZSBleGNlcHRpb24KKwlydHMKKworaW54Ml96ZXJvOgorCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikKKwlvcmkudwkJJmlueDJhX21hc2ssMitVU0VSX0ZQU1IoJWE2KSAjIHNldCBJTkVYL0FJTkVYCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJdF9leHRkbnJtKCk6IEhhbmRsZSBERU5PUk0gaW5wdXRzIGluIDA2MEZQTFNQLgkJCSMKKyMJdF9yZXNkbnJtKCk6IEhhbmRsZSBERU5PUk0gaW5wdXRzIGluIDA2MEZQTFNQIGZvciAiZnNjYWxlIi4JIworIwkJCQkJCQkJCSMKKyMJVGhpcyByb3V0aW5lIGlzIHVzZWQgYnkgdGhlIDA2MEZQTFNQIHBhY2thZ2UuCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZS4JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQgb3BlcmFuZAkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gZGVmYXVsdCByZXN1bHQJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGb3IgYWxsIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYSBkZW5vcm1hbGl6ZWQgaW5wdXQgYW5kIHRoYXQJIworIyBmKHgpPXgsIHRoaXMgaXMgdGhlIGVudHJ5IHBvaW50LgkJCQkJIworIwlERU5PUk0gdmFsdWUgaXMgbW92ZWQgdXNpbmcgImZtb3ZlIiB3aGljaCB0cmlnZ2VycyBhbiBleGNlcHRpb24JIworIyBpZiBlbmFibGVkIHNvIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGNhbiBsb2cgdGhlIGV2ZW50LgkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXRfZXh0ZG5ybQordF9leHRkbnJtOgorCWZtb3YubAkJVVNFUl9GUENSKCVhNiksJWZwY3IKKwlmbW92LngJCVNSQ19FWCglYTApLCVmcDAKKwlmbW92LmwJCSVmcHNyLCVkMAorCW9yaS5sCQkmdW5maW54X21hc2ssJWQwCisJb3IubAkJJWQwLFVTRVJfRlBTUiglYTYpCisJcnRzCisKKwlnbG9iYWwJCXRfcmVzZG5ybQordF9yZXNkbnJtOgorCWZtb3YubAkJVVNFUl9GUENSKCVhNiksJWZwY3IKKwlmbW92LngJCVNSQ19FWCglYTApLCVmcDAKKwlmbW92LmwJCSVmcHNyLCVkMAorCW9yLmwJCSVkMCxVU0VSX0ZQU1IoJWE2KQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBzdG9fY29zOgorIwlUaGlzIGlzIHVzZWQgYnkgZnNpbmNvcyBsaWJyYXJ5IGVtdWxhdGlvbi4gVGhlIGNvcnJlY3QKKyMgdmFsdWVzIGFyZSBhbHJlYWR5IGluIGZwMCBhbmQgZnAxIHNvIHdlIGRvIG5vdGhpbmcgaGVyZS4KKyMKKwlnbG9iYWwJCXN0b19jb3MKK3N0b19jb3M6CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjCWRzdF9xbmFuIC0tLSBmb3JjZSByZXN1bHQgd2hlbiBkZXN0aW5hdGlvbiBpcyBhIE5hTgorIworCWdsb2JhbAkJZHN0X3FuYW4KK2RzdF9xbmFuOgorCWZtb3YueAkJRFNUKCVhMSksJWZwMAorCXRzdC5iCQlEU1RfRVgoJWExKQorCWJtaS5iCQlkc3RfcW5hbl9tCitkc3RfcW5hbl9wOgorCW1vdi5iCQkmbmFuX2JtYXNrLEZQU1JfQ0MoJWE2KQorCXJ0cworZHN0X3FuYW5fbToKKwltb3YuYgkJJm5hbl9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpCisJcnRzCisKKyMKKyMJc3JjX3FuYW4gLS0tIGZvcmNlIHJlc3VsdCB3aGVuIHNvdXJjZSBpcyBhIE5hTgorIworCWdsb2JhbAkJc3JjX3FuYW4KK3NyY19xbmFuOgorCWZtb3YueAkJU1JDKCVhMCksJWZwMAorCXRzdC5iCQlTUkNfRVgoJWEwKQorCWJtaS5iCQlzcmNfcW5hbl9tCitzcmNfcW5hbl9wOgorCW1vdi5iCQkmbmFuX2JtYXNrLEZQU1JfQ0MoJWE2KQorCXJ0cworc3JjX3FuYW5fbToKKwltb3YuYgkJJm5hbl9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjCU5hdGl2ZSBpbnN0cnVjdGlvbiBzdXBwb3J0CisjCisjCVNvbWUgc3lzdGVtcyBtYXkgbmVlZCBlbnRyeSBwb2ludHMgZXZlbiBmb3IgNjgwNjAgbmF0aXZlCisjCWluc3RydWN0aW9ucy4gIFRoZXNlIHJvdXRpbmVzIGFyZSBwcm92aWRlZCBmb3IKKyMJY29udmVuaWVuY2UuCisjCisJZ2xvYmFsCQlfZmFkZHNfCitfZmFkZHNfOgorCWZtb3YubAkJJWZwY3IsLSglc3ApCQkjIHNhdmUgZnBjcgorCWZtb3YubAkJJjB4MDAwMDAwMDAsJWZwY3IJIyBjbGVhciBmcGNyIGZvciBsb2FkCisJZm1vdi5zCQkweDgoJXNwKSwlZnAwCQkjIGxvYWQgc2dsIGRzdAorCWZtb3YubAkJKCVzcCkrLCVmcGNyCQkjIHJlc3RvcmUgZnBjcgorCWZhZGQucwkJMHg4KCVzcCksJWZwMAkJIyBmYWRkIHcvIHNnbCBzcmMKKwlydHMKKworCWdsb2JhbAkJX2ZhZGRkXworX2ZhZGRkXzoKKwlmbW92LmwJCSVmcGNyLC0oJXNwKQkJIyBzYXZlIGZwY3IKKwlmbW92LmwJCSYweDAwMDAwMDAwLCVmcGNyCSMgY2xlYXIgZnBjciBmb3IgbG9hZAorCWZtb3YuZAkJMHg4KCVzcCksJWZwMAkJIyBsb2FkIGRibCBkc3QKKwlmbW92LmwJCSglc3ApKywlZnBjcgkJIyByZXN0b3JlIGZwY3IKKwlmYWRkLmQJCTB4Yyglc3ApLCVmcDAJCSMgZmFkZCB3LyBkYmwgc3JjCisJcnRzCisKKwlnbG9iYWwJCV9mYWRkeF8KK19mYWRkeF86CisJZm1vdm0ueAkJMHg0KCVzcCksJjB4ODAJCSMgbG9hZCBleHQgZHN0CisJZmFkZC54CQkweDEwKCVzcCksJWZwMAkJIyBmYWRkIHcvIGV4dCBzcmMKKwlydHMKKworCWdsb2JhbAkJX2ZzdWJzXworX2ZzdWJzXzoKKwlmbW92LmwJCSVmcGNyLC0oJXNwKQkJIyBzYXZlIGZwY3IKKwlmbW92LmwJCSYweDAwMDAwMDAwLCVmcGNyCSMgY2xlYXIgZnBjciBmb3IgbG9hZAorCWZtb3YucwkJMHg4KCVzcCksJWZwMAkJIyBsb2FkIHNnbCBkc3QKKwlmbW92LmwJCSglc3ApKywlZnBjcgkJIyByZXN0b3JlIGZwY3IKKwlmc3ViLnMJCTB4OCglc3ApLCVmcDAJCSMgZnN1YiB3LyBzZ2wgc3JjCisJcnRzCisKKwlnbG9iYWwJCV9mc3ViZF8KK19mc3ViZF86CisJZm1vdi5sCQklZnBjciwtKCVzcCkJCSMgc2F2ZSBmcGNyCisJZm1vdi5sCQkmMHgwMDAwMDAwMCwlZnBjcgkjIGNsZWFyIGZwY3IgZm9yIGxvYWQKKwlmbW92LmQJCTB4OCglc3ApLCVmcDAJCSMgbG9hZCBkYmwgZHN0CisJZm1vdi5sCQkoJXNwKSssJWZwY3IJCSMgcmVzdG9yZSBmcGNyCisJZnN1Yi5kCQkweGMoJXNwKSwlZnAwCQkjIGZzdWIgdy8gZGJsIHNyYworCXJ0cworCisJZ2xvYmFsCQlfZnN1YnhfCitfZnN1YnhfOgorCWZtb3ZtLngJCTB4NCglc3ApLCYweDgwCQkjIGxvYWQgZXh0IGRzdAorCWZzdWIueAkJMHgxMCglc3ApLCVmcDAJCSMgZnN1YiB3LyBleHQgc3JjCisJcnRzCisKKwlnbG9iYWwJCV9mbXVsc18KK19mbXVsc186CisJZm1vdi5sCQklZnBjciwtKCVzcCkJCSMgc2F2ZSBmcGNyCisJZm1vdi5sCQkmMHgwMDAwMDAwMCwlZnBjcgkjIGNsZWFyIGZwY3IgZm9yIGxvYWQKKwlmbW92LnMJCTB4OCglc3ApLCVmcDAJCSMgbG9hZCBzZ2wgZHN0CisJZm1vdi5sCQkoJXNwKSssJWZwY3IJCSMgcmVzdG9yZSBmcGNyCisJZm11bC5zCQkweDgoJXNwKSwlZnAwCQkjIGZtdWwgdy8gc2dsIHNyYworCXJ0cworCisJZ2xvYmFsCQlfZm11bGRfCitfZm11bGRfOgorCWZtb3YubAkJJWZwY3IsLSglc3ApCQkjIHNhdmUgZnBjcgorCWZtb3YubAkJJjB4MDAwMDAwMDAsJWZwY3IJIyBjbGVhciBmcGNyIGZvciBsb2FkCisJZm1vdi5kCQkweDgoJXNwKSwlZnAwCQkjIGxvYWQgZGJsIGRzdAorCWZtb3YubAkJKCVzcCkrLCVmcGNyCQkjIHJlc3RvcmUgZnBjcgorCWZtdWwuZAkJMHhjKCVzcCksJWZwMAkJIyBmbXVsIHcvIGRibCBzcmMKKwlydHMKKworCWdsb2JhbAkJX2ZtdWx4XworX2ZtdWx4XzoKKwlmbW92bS54CQkweDQoJXNwKSwmMHg4MAkJIyBsb2FkIGV4dCBkc3QKKwlmbXVsLngJCTB4MTAoJXNwKSwlZnAwCQkjIGZtdWwgdy8gZXh0IHNyYworCXJ0cworCisJZ2xvYmFsCQlfZmRpdnNfCitfZmRpdnNfOgorCWZtb3YubAkJJWZwY3IsLSglc3ApCQkjIHNhdmUgZnBjcgorCWZtb3YubAkJJjB4MDAwMDAwMDAsJWZwY3IJIyBjbGVhciBmcGNyIGZvciBsb2FkCisJZm1vdi5zCQkweDgoJXNwKSwlZnAwCQkjIGxvYWQgc2dsIGRzdAorCWZtb3YubAkJKCVzcCkrLCVmcGNyCQkjIHJlc3RvcmUgZnBjcgorCWZkaXYucwkJMHg4KCVzcCksJWZwMAkJIyBmZGl2IHcvIHNnbCBzcmMKKwlydHMKKworCWdsb2JhbAkJX2ZkaXZkXworX2ZkaXZkXzoKKwlmbW92LmwJCSVmcGNyLC0oJXNwKQkJIyBzYXZlIGZwY3IKKwlmbW92LmwJCSYweDAwMDAwMDAwLCVmcGNyCSMgY2xlYXIgZnBjciBmb3IgbG9hZAorCWZtb3YuZAkJMHg4KCVzcCksJWZwMAkJIyBsb2FkIGRibCBkc3QKKwlmbW92LmwJCSglc3ApKywlZnBjcgkJIyByZXN0b3JlIGZwY3IKKwlmZGl2LmQJCTB4Yyglc3ApLCVmcDAJCSMgZmRpdiB3LyBkYmwgc3JjCisJcnRzCisKKwlnbG9iYWwJCV9mZGl2eF8KK19mZGl2eF86CisJZm1vdm0ueAkJMHg0KCVzcCksJjB4ODAJCSMgbG9hZCBleHQgZHN0CisJZmRpdi54CQkweDEwKCVzcCksJWZwMAkJIyBmZGl2IHcvIGV4dCBzcmMKKwlydHMKKworCWdsb2JhbAkJX2ZhYnNzXworX2ZhYnNzXzoKKwlmYWJzLnMJCTB4NCglc3ApLCVmcDAJCSMgZmFicyB3LyBzZ2wgc3JjCisJcnRzCisKKwlnbG9iYWwJCV9mYWJzZF8KK19mYWJzZF86CisJZmFicy5kCQkweDQoJXNwKSwlZnAwCQkjIGZhYnMgdy8gZGJsIHNyYworCXJ0cworCisJZ2xvYmFsCQlfZmFic3hfCitfZmFic3hfOgorCWZhYnMueAkJMHg0KCVzcCksJWZwMAkJIyBmYWJzIHcvIGV4dCBzcmMKKwlydHMKKworCWdsb2JhbAkJX2ZuZWdzXworX2ZuZWdzXzoKKwlmbmVnLnMJCTB4NCglc3ApLCVmcDAJCSMgZm5lZyB3LyBzZ2wgc3JjCisJcnRzCisKKwlnbG9iYWwJCV9mbmVnZF8KK19mbmVnZF86CisJZm5lZy5kCQkweDQoJXNwKSwlZnAwCQkjIGZuZWcgdy8gZGJsIHNyYworCXJ0cworCisJZ2xvYmFsCQlfZm5lZ3hfCitfZm5lZ3hfOgorCWZuZWcueAkJMHg0KCVzcCksJWZwMAkJIyBmbmVnIHcvIGV4dCBzcmMKKwlydHMKKworCWdsb2JhbAkJX2ZzcXJ0c18KK19mc3FydHNfOgorCWZzcXJ0LnMJCTB4NCglc3ApLCVmcDAJCSMgZnNxcnQgdy8gc2dsIHNyYworCXJ0cworCisJZ2xvYmFsCQlfZnNxcnRkXworX2ZzcXJ0ZF86CisJZnNxcnQuZAkJMHg0KCVzcCksJWZwMAkJIyBmc3FydCB3LyBkYmwgc3JjCisJcnRzCisKKwlnbG9iYWwJCV9mc3FydHhfCitfZnNxcnR4XzoKKwlmc3FydC54CQkweDQoJXNwKSwlZnAwCQkjIGZzcXJ0IHcvIGV4dCBzcmMKKwlydHMKKworCWdsb2JhbAkJX2ZpbnRzXworX2ZpbnRzXzoKKwlmaW50LnMJCTB4NCglc3ApLCVmcDAJCSMgZmludCB3LyBzZ2wgc3JjCisJcnRzCisKKwlnbG9iYWwJCV9maW50ZF8KK19maW50ZF86CisJZmludC5kCQkweDQoJXNwKSwlZnAwCQkjIGZpbnQgdy8gZGJsIHNyYworCXJ0cworCisJZ2xvYmFsCQlfZmludHhfCitfZmludHhfOgorCWZpbnQueAkJMHg0KCVzcCksJWZwMAkJIyBmaW50IHcvIGV4dCBzcmMKKwlydHMKKworCWdsb2JhbAkJX2ZpbnRyenNfCitfZmludHJ6c186CisJZmludHJ6LnMJMHg0KCVzcCksJWZwMAkJIyBmaW50cnogdy8gc2dsIHNyYworCXJ0cworCisJZ2xvYmFsCQlfZmludHJ6ZF8KK19maW50cnpkXzoKKwlmaW50cnouZAkweDQoJXNwKSwlZnAwCQkjIGZpbnRyeCB3LyBkYmwgc3JjCisJcnRzCisKKwlnbG9iYWwJCV9maW50cnp4XworX2ZpbnRyenhfOgorCWZpbnRyei54CTB4NCglc3ApLCVmcDAJCSMgZmludHJ6IHcvIGV4dCBzcmMKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc3JjX3plcm8oKTogUmV0dXJuIHNpZ25lZCB6ZXJvIGFjY29yZGluZyB0byBzaWduIG9mIHNyYyBvcGVyYW5kLgkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlzcmNfemVybworc3JjX3plcm86CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGdldCBzaWduIG9mIHNyYyBvcGVyYW5kCisJYm1pLmIJCWxkX216ZXJvCQkjIGlmIG5lZywgbG9hZCBuZWcgemVybworCisjCisjIGxkX3B6ZXJvKCk6IHJldHVybiBhIHBvc2l0aXZlIHplcm8uCisjCisJZ2xvYmFsCQlsZF9wemVybworbGRfcHplcm86CisJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgbG9hZCArMAorCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ1onIGNjb2RlIGJpdAorCXJ0cworCisjIGxkX216ZXJvKCk6IHJldHVybiBhIG5lZ2F0aXZlIHplcm8uCisJZ2xvYmFsCQlsZF9temVybworbGRfbXplcm86CisJZm1vdi5zCQkmMHg4MDAwMDAwMCwlZnAwCSMgbG9hZCAtMAorCW1vdi5iCQkmbmVnX2JtYXNrK3pfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0ICdOJywnWicgY2NvZGUgYml0cworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGRzdF96ZXJvKCk6IFJldHVybiBzaWduZWQgemVybyBhY2NvcmRpbmcgdG8gc2lnbiBvZiBkc3Qgb3BlcmFuZC4JIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJZHN0X3plcm8KK2RzdF96ZXJvOgorCXRzdC5iCQlEU1RfRVgoJWExKQkJIyBnZXQgc2lnbiBvZiBkc3Qgb3BlcmFuZAorCWJtaS5iCQlsZF9temVybwkJIyBpZiBuZWcsIGxvYWQgbmVnIHplcm8KKwlicmEuYgkJbGRfcHplcm8JCSMgbG9hZCBwb3NpdGl2ZSB6ZXJvCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc3JjX2luZigpOiBSZXR1cm4gc2lnbmVkIGluZiBhY2NvcmRpbmcgdG8gc2lnbiBvZiBzcmMgb3BlcmFuZC4JIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJc3JjX2luZgorc3JjX2luZjoKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgZ2V0IHNpZ24gb2Ygc3JjIG9wZXJhbmQKKwlibWkuYgkJbGRfbWluZgkJCSMgaWYgbmVnYXRpdmUgYnJhbmNoCisKKyMKKyMgbGRfcGluZigpOiByZXR1cm4gYSBwb3NpdGl2ZSBpbmZpbml0eS4KKyMKKwlnbG9iYWwJCWxkX3BpbmYKK2xkX3BpbmY6CisJZm1vdi5zCQkmMHg3ZjgwMDAwMCwlZnAwCSMgbG9hZCArSU5GCisJbW92LmIJCSZpbmZfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdJTkYnIGNjb2RlIGJpdAorCXJ0cworCisjCisjIGxkX21pbmYoKTpyZXR1cm4gYSBuZWdhdGl2ZSBpbmZpbml0eS4KKyMKKwlnbG9iYWwJCWxkX21pbmYKK2xkX21pbmY6CisJZm1vdi5zCQkmMHhmZjgwMDAwMCwlZnAwCSMgbG9hZCAtSU5GCisJbW92LmIJCSZuZWdfYm1hc2sraW5mX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCAnTicsJ0knIGNjb2RlIGJpdHMKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBkc3RfaW5mKCk6IFJldHVybiBzaWduZWQgaW5mIGFjY29yZGluZyB0byBzaWduIG9mIGRzdCBvcGVyYW5kLgkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlkc3RfaW5mCitkc3RfaW5mOgorCXRzdC5iCQlEU1RfRVgoJWExKQkJIyBnZXQgc2lnbiBvZiBkc3Qgb3BlcmFuZAorCWJtaS5iCQlsZF9taW5mCQkJIyBpZiBuZWdhdGl2ZSBicmFuY2gKKwlicmEuYgkJbGRfcGluZgorCisJZ2xvYmFsCQlzenJfaW5mCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzenJfaW5mKCk6IFJldHVybiArWkVSTyBmb3IgYSBuZWdhdGl2ZSBzcmMgb3BlcmFuZCBvcgkJIworIwkgICAgICAgICAgICArSU5GIGZvciBhIHBvc2l0aXZlIHNyYyBvcGVyYW5kLgkJIworIwkgICAgIFJvdXRpbmUgdXNlZCBmb3IgZmV0b3gsIGZ0d290b3gsIGFuZCBmdGVudG94LgkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc3pyX2luZjoKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgY2hlY2sgc2lnbiBvZiBzb3VyY2UKKwlibWkuYgkJbGRfcHplcm8KKwlicmEuYgkJbGRfcGluZgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNvcHJfaW5mKCk6IFJldHVybiArSU5GIGZvciBhIHBvc2l0aXZlIHNyYyBvcGVyYW5kIG9yCQkJIworIwkgICAgICBqdW1wIHRvIG9wZXJhbmQgZXJyb3Igcm91dGluZSBmb3IgYSBuZWdhdGl2ZSBzcmMgb3BlcmFuZC4JIworIwkgICAgICBSb3V0aW5lIHVzZWQgZm9yIGZsb2duLCBmbG9nbnAxLCBmbG9nMTAsIGFuZCBmbG9nMi4JIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJc29wcl9pbmYKK3NvcHJfaW5mOgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBjaGVjayBzaWduIG9mIHNvdXJjZQorCWJtaS53CQl0X29wZXJyCisJYnJhLmIJCWxkX3BpbmYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc2V0b3htMWkoKTogUmV0dXJuIG1pbnVzIG9uZSBmb3IgYSBuZWdhdGl2ZSBzcmMgb3BlcmFuZCBvcgkjCisjCSAgICAgIHBvc2l0aXZlIGluZmluaXR5IGZvciBhIHBvc2l0aXZlIHNyYyBvcGVyYW5kLgkjCisjCSAgICAgIFJvdXRpbmUgdXNlZCBmb3IgZmV0b3htMS4JCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCXNldG94bTFpCitzZXRveG0xaToKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgY2hlY2sgc2lnbiBvZiBzb3VyY2UKKwlibWkuYgkJbGRfbW9uZQorCWJyYS5iCQlsZF9waW5mCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc3JjX29uZSgpOiBSZXR1cm4gc2lnbmVkIG9uZSBhY2NvcmRpbmcgdG8gc2lnbiBvZiBzcmMgb3BlcmFuZC4JIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJc3JjX29uZQorc3JjX29uZToKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgY2hlY2sgc2lnbiBvZiBzb3VyY2UKKwlibWkuYgkJbGRfbW9uZQorCisjCisjIGxkX3BvbmUoKTogcmV0dXJuIHBvc2l0aXZlIG9uZS4KKyMKKwlnbG9iYWwJCWxkX3BvbmUKK2xkX3BvbmU6CisJZm1vdi5zCQkmMHgzZjgwMDAwMCwlZnAwCSMgbG9hZCArMQorCWNsci5iCQlGUFNSX0NDKCVhNikKKwlydHMKKworIworIyBsZF9tb25lKCk6IHJldHVybiBuZWdhdGl2ZSBvbmUuCisjCisJZ2xvYmFsCQlsZF9tb25lCitsZF9tb25lOgorCWZtb3YucwkJJjB4YmY4MDAwMDAsJWZwMAkjIGxvYWQgLTEKKwltb3YuYgkJJm5lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ04nIGNjb2RlIGJpdAorCXJ0cworCitwcGlieTI6CWxvbmcJCTB4M2ZmZjAwMDAsIDB4YzkwZmRhYTIsIDB4MjE2OGMyMzUKK21waWJ5MjoJbG9uZwkJMHhiZmZmMDAwMCwgMHhjOTBmZGFhMiwgMHgyMTY4YzIzNQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzcGlfMigpOiBSZXR1cm4gc2lnbmVkIFBJLzIgYWNjb3JkaW5nIHRvIHNpZ24gb2Ygc3JjIG9wZXJhbmQuCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlzcGlfMgorc3BpXzI6CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGNoZWNrIHNpZ24gb2Ygc291cmNlCisJYm1pLmIJCWxkX21waTIKKworIworIyBsZF9wcGkyKCk6IHJldHVybiBwb3NpdGl2ZSBQSS8yLgorIworCWdsb2JhbAkJbGRfcHBpMgorbGRfcHBpMjoKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZtb3YueAkJcHBpYnkyKCVwYyksJWZwMAkjIGxvYWQgK3BpLzIKKwlicmEudwkJdF9waW54MgkJCSMgc2V0IElORVgyCisKKyMKKyMgbGRfbXBpMigpOiByZXR1cm4gbmVnYXRpdmUgUEkvMi4KKyMKKwlnbG9iYWwJCWxkX21waTIKK2xkX21waTI6CisJZm1vdi5sCQklZDAsJWZwY3IKKwlmbW92LngJCW1waWJ5MiglcGMpLCVmcDAJIyBsb2FkIC1waS8yCisJYnJhLncJCXRfbWlueDIJCQkjIHNldCBJTkVYMgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgZ2l2ZSBzdXBwb3J0IGZvciBmc2luY29zLiAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgc3NpbmNvc3ooKTogV2hlbiB0aGUgc3JjIG9wZXJhbmQgaXMgWkVSTywgc3RvcmUgYSBvbmUgaW4gdGhlCisjCSAgICAgIGNvc2luZSByZWdpc3RlciBhbmQgcmV0dXJuIGEgWkVSTyBpbiBmcDAgdy8gdGhlIHNhbWUgc2lnbgorIwkgICAgICBhcyB0aGUgc3JjIG9wZXJhbmQuCisjCisJZ2xvYmFsCQlzc2luY29zegorc3NpbmNvc3o6CisJZm1vdi5zCQkmMHgzZjgwMDAwMCwlZnAxCisJdHN0LmIJCVNSQ19FWCglYTApCQkjIHRlc3Qgc2lnbgorCWJwbC5iCQlzaW5jb3N6cAorCWZtb3YucwkJJjB4ODAwMDAwMDAsJWZwMAkjIHJldHVybiBzaW4gcmVzdWx0IGluIGZwMAorCW1vdi5iCQkmel9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpCisJcnRzCitzaW5jb3N6cDoKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyByZXR1cm4gc2luIHJlc3VsdCBpbiBmcDAKKwltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCisJcnRzCisKKyMKKyMgc3NpbmNvc2koKTogV2hlbiB0aGUgc3JjIG9wZXJhbmQgaXMgSU5GLCBzdG9yZSBhIFFOQU4gaW4gdGhlIGNvc2luZQorIwkgICAgICByZWdpc3RlciBhbmQganVtcCB0byB0aGUgb3BlcmFuZCBlcnJvciByb3V0aW5lIGZvciBuZWdhdGl2ZQorIwkgICAgICBzcmMgb3BlcmFuZHMuCisjCisJZ2xvYmFsCQlzc2luY29zaQorc3NpbmNvc2k6CisJZm1vdi54CQlxbmFuKCVwYyksJWZwMQkJIyBsb2FkIE5BTgorCWJyYS53CQl0X29wZXJyCisKKyMKKyMgc3NpbmNvc3FuYW4oKTogV2hlbiB0aGUgc3JjIG9wZXJhbmQgaXMgYSBRTkFOLCBzdG9yZSB0aGUgUU5BTiBpbiB0aGUgY29zaW5lCisjCQkgcmVnaXN0ZXIgYW5kIGJyYW5jaCB0byB0aGUgc3JjIFFOQU4gcm91dGluZS4KKyMKKwlnbG9iYWwJCXNzaW5jb3NxbmFuCitzc2luY29zcW5hbjoKKwlmbW92LngJCUxPQ0FMX0VYKCVhMCksJWZwMQorCWJyYS53CQlzcmNfcW5hbgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc21vZF9zZG5ybQorCWdsb2JhbAkJc21vZF9zbm9ybQorc21vZF9zZG5ybToKK3Ntb2Rfc25vcm06CisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwliZXEubAkJc21vZAorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLncJCXNtb2RfenJvCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQl0X29wZXJyCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzbW9kCisJYnJhLmwJCWRzdF9xbmFuCisKKwlnbG9iYWwJCXNtb2Rfc3plcm8KK3Ntb2Rfc3plcm86CisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwliZXEubAkJdF9vcGVycgorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXRfb3BlcnIKKwlicmEubAkJZHN0X3FuYW4KKworCWdsb2JhbAkJc21vZF9zaW5mCitzbW9kX3NpbmY6CisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwliZXEubAkJc21vZF9mcG4KKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQlzbW9kX3pybworCWNtcGkuYgkJJWQxLCZJTkYKKwliZXEubAkJdF9vcGVycgorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJc21vZF9mcG4KKwlicmEubAkJZHN0X3FuYW4KKworc21vZF96cm86CitzcmVtX3pybzoKKwltb3YuYgkJU1JDX0VYKCVhMCksJWQxCQkjIGdldCBzcmMgc2lnbgorCW1vdi5iCQlEU1RfRVgoJWExKSwlZDAJCSMgZ2V0IGRzdCBzaWduCisJZW9yLmIJCSVkMCwlZDEJCQkjIGdldCBxYnl0ZSBzaWduCisJYW5kaS5iCQkmMHg4MCwlZDEKKwltb3YuYgkJJWQxLEZQU1JfUUJZVEUoJWE2KQorCXRzdC5iCQklZDAKKwlicGwudwkJbGRfcHplcm8KKwlicmEudwkJbGRfbXplcm8KKworc21vZF9mcG46CitzcmVtX2ZwbjoKKwljbHIuYgkJRlBTUl9RQllURSglYTYpCisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YuYgkJU1JDX0VYKCVhMCksJWQxCQkjIGdldCBzcmMgc2lnbgorCW1vdi5iCQlEU1RfRVgoJWExKSwlZDAJCSMgZ2V0IGRzdCBzaWduCisJZW9yLmIJCSVkMCwlZDEJCQkjIGdldCBxYnl0ZSBzaWduCisJYW5kaS5iCQkmMHg4MCwlZDEKKwltb3YuYgkJJWQxLEZQU1JfUUJZVEUoJWE2KQorCWNtcGkuYgkJRFRBRyglYTYpLCZERU5PUk0KKwlibmUuYgkJc21vZF9ucm0KKwlsZWEJCURTVCglYTEpLCVhMAorCW1vdi5sCQkoJXNwKSssJWQwCisJYnJhCQl0X3Jlc2Rucm0KK3Ntb2RfbnJtOgorCWZtb3YubAkJKCVzcCkrLCVmcGNyCisJZm1vdi54CQlEU1QoJWExKSwlZnAwCisJdHN0LmIJCURTVF9FWCglYTEpCisJYm1pLmIJCXNtb2RfbnJtX25lZworCXJ0cworCitzbW9kX25ybV9uZWc6CisJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjb2RlCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCXNyZW1fc25vcm0KKwlnbG9iYWwJCXNyZW1fc2Rucm0KK3NyZW1fc2Rucm06CitzcmVtX3Nub3JtOgorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJYmVxLmwJCXNyZW0KKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS53CQlzcmVtX3pybworCWNtcGkuYgkJJWQxLCZJTkYKKwliZXEubAkJdF9vcGVycgorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJc3JlbQorCWJyYS5sCQlkc3RfcW5hbgorCisJZ2xvYmFsCQlzcmVtX3N6ZXJvCitzcmVtX3N6ZXJvOgorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQl0X29wZXJyCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQl0X29wZXJyCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQl0X29wZXJyCisJYnJhLmwJCWRzdF9xbmFuCisKKwlnbG9iYWwJCXNyZW1fc2luZgorc3JlbV9zaW5mOgorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJYmVxLncJCXNyZW1fZnBuCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEudwkJc3JlbV96cm8KKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXNyZW1fZnBuCisJYnJhLmwJCWRzdF9xbmFuCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc3NjYWxlX3Nub3JtCisJZ2xvYmFsCQlzc2NhbGVfc2Rucm0KK3NzY2FsZV9zbm9ybToKK3NzY2FsZV9zZG5ybToKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWJlcS5sCQlzc2NhbGUKKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQlkc3RfemVybworCWNtcGkuYgkJJWQxLCZJTkYKKwliZXEubAkJZHN0X2luZgorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJc3NjYWxlCisJYnJhLmwJCWRzdF9xbmFuCisKKwlnbG9iYWwJCXNzY2FsZV9zemVybworc3NjYWxlX3N6ZXJvOgorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJYmVxLmwJCXNzY2FsZQorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCWRzdF96ZXJvCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQlkc3RfaW5mCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzc2NhbGUKKwlicmEubAkJZHN0X3FuYW4KKworCWdsb2JhbAkJc3NjYWxlX3NpbmYKK3NzY2FsZV9zaW5mOgorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5sCQlkc3RfcW5hbgorCWJyYS5sCQl0X29wZXJyCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzb3Bfc3FuYW4KK3NvcF9zcW5hbjoKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCWRzdF9xbmFuCisJYnJhLmwJCXNyY19xbmFuCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbm9ybSgpOiBub3JtYWxpemUgdGhlIG1hbnRpc3NhIG9mIGFuIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dC4gdGhlCSMKKyMJICBpbnB1dCBvcGVyYW5kIHNob3VsZCBub3QgYmUgbm9ybWFsaXplZCBhbHJlYWR5LgkJIworIwkJCQkJCQkJCSMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJbm9ybSgpCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlub25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCA9IHBvaW50ZXIgZnAgZXh0ZW5kZWQgcHJlY2lzaW9uIG9wZXJhbmQgdG8gbm9ybWFsaXplCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlkMCA9IG51bWJlciBvZiBiaXQgcG9zaXRpb25zIHRoZSBtYW50aXNzYSB3YXMgc2hpZnRlZAkJIworIwlhMCA9IHRoZSBpbnB1dCBvcGVyYW5kJ3MgbWFudGlzc2EgaXMgbm9ybWFsaXplZDsgdGhlIGV4cG9uZW50CSMKKyMJICAgICBpcyB1bmNoYW5nZWQuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCW5vcm0KK25vcm06CisJbW92LmwJCSVkMiwgLSglc3ApCQkjIGNyZWF0ZSBzb21lIHRlbXAgcmVncworCW1vdi5sCQklZDMsIC0oJXNwKQorCisJbW92LmwJCUZURU1QX0hJKCVhMCksICVkMAkjIGxvYWQgaGkobWFudGlzc2EpCisJbW92LmwJCUZURU1QX0xPKCVhMCksICVkMQkjIGxvYWQgbG8obWFudGlzc2EpCisKKwliZmZmbwkJJWQweyYwOiYzMn0sICVkMgkjIGhvdyBtYW55IHBsYWNlcyB0byBzaGlmdD8KKwliZXEuYgkJbm9ybV9sbwkJCSMgaGkobWFuKSBpcyBhbGwgemVyb2VzIQorCitub3JtX2hpOgorCWxzbC5sCQklZDIsICVkMAkJIyBsZWZ0IHNoaWZ0IGhpKG1hbikKKwliZmV4dHUJCSVkMXsmMDolZDJ9LCAlZDMJIyBleHRyYWN0IGxvIGJpdHMKKworCW9yLmwJCSVkMywgJWQwCQkjIGNyZWF0ZSBoaShtYW4pCisJbHNsLmwJCSVkMiwgJWQxCQkjIGNyZWF0ZSBsbyhtYW4pCisKKwltb3YubAkJJWQwLCBGVEVNUF9ISSglYTApCSMgc3RvcmUgbmV3IGhpKG1hbikKKwltb3YubAkJJWQxLCBGVEVNUF9MTyglYTApCSMgc3RvcmUgbmV3IGxvKG1hbikKKworCW1vdi5sCQklZDIsICVkMAkJIyByZXR1cm4gc2hpZnQgYW1vdW50CisKKwltb3YubAkJKCVzcCkrLCAlZDMJCSMgcmVzdG9yZSB0ZW1wIHJlZ3MKKwltb3YubAkJKCVzcCkrLCAlZDIKKworCXJ0cworCitub3JtX2xvOgorCWJmZmZvCQklZDF7JjA6JjMyfSwgJWQyCSMgaG93IG1hbnkgcGxhY2VzIHRvIHNoaWZ0PworCWxzbC5sCQklZDIsICVkMQkJIyBzaGlmdCBsbyhtYW4pCisJYWRkLmwJCSYzMiwgJWQyCQkjIGFkZCAzMiB0byBzaGZ0IGFtb3VudAorCisJbW92LmwJCSVkMSwgRlRFTVBfSEkoJWEwKQkjIHN0b3JlIGhpKG1hbikKKwljbHIubAkJRlRFTVBfTE8oJWEwKQkJIyBsbyhtYW4pIGlzIG5vdyB6ZXJvCisKKwltb3YubAkJJWQyLCAlZDAJCSMgcmV0dXJuIHNoaWZ0IGFtb3VudAorCisJbW92LmwJCSglc3ApKywgJWQzCQkjIHJlc3RvcmUgdGVtcCByZWdzCisJbW92LmwJCSglc3ApKywgJWQyCisKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyB1bm5vcm1fZml4KCk6IC0gY2hhbmdlcyBhbiBVTk5PUk0gdG8gb25lIG9mIE5PUk0sIERFTk9STSwgb3IgWkVSTwkjCisjCQktIHJldHVybnMgY29ycmVzcG9uZGluZyBvcHR5cGUgdGFnCQkJIworIwkJCQkJCQkJCSMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJdW5ub3JtX2ZpeCgpCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCW5vcm0oKSAtIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWEwID0gcG9pbnRlciB0byB1bm5vcm1hbGl6ZWQgZXh0ZW5kZWQgcHJlY2lzaW9uIG51bWJlcgkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJZDAgPSBvcHR5cGUgdGFnIC0gaXMgY29ycmVjdGVkIHRvIG9uZSBvZiBOT1JNLCBERU5PUk0sIG9yIFpFUk8JIworIwlhMCA9IGlucHV0IG9wZXJhbmQgaGFzIGJlZW4gY29udmVydGVkIHRvIGEgbm9ybSwgZGVub3JtLCBvcgkjCisjCSAgICAgemVybzsgYm90aCB0aGUgZXhwb25lbnQgYW5kIG1hbnRpc3NhIGFyZSBjaGFuZ2VkLgkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJdW5ub3JtX2ZpeAordW5ub3JtX2ZpeDoKKwliZmZmbwkJRlRFTVBfSEkoJWEwKXsmMDomMzJ9LCAlZDAgIyBob3cgbWFueSBzaGlmdHMgYXJlIG5lZWRlZD8KKwlibmUuYgkJdW5ub3JtX3NoaWZ0CQkjIGhpKG1hbikgaXMgbm90IGFsbCB6ZXJvZXMKKworIworIyBoaShtYW4pIGlzIGFsbCB6ZXJvZXMgc28gc2VlIGlmIGFueSBiaXRzIGluIGxvKG1hbikgYXJlIHNldAorIwordW5ub3JtX2Noa19sbzoKKwliZmZmbwkJRlRFTVBfTE8oJWEwKXsmMDomMzJ9LCAlZDAgIyBpcyBvcGVyYW5kIHJlYWxseSBhIHplcm8/CisJYmVxLncJCXVubm9ybV96ZXJvCQkjIHllcworCisJYWRkLncJCSYzMiwgJWQwCQkjIG5vOyBmaXggc2hpZnQgZGlzdGFuY2UKKworIworIyBkMCA9ICMgc2hpZnRzIG5lZWRlZCBmb3IgY29tcGxldGUgbm9ybWFsaXphdGlvbgorIwordW5ub3JtX3NoaWZ0OgorCWNsci5sCQklZDEJCQkjIGNsZWFyIHRvcCB3b3JkCisJbW92LncJCUZURU1QX0VYKCVhMCksICVkMQkjIGV4dHJhY3QgZXhwb25lbnQKKwlhbmQudwkJJjB4N2ZmZiwgJWQxCQkjIHN0cmlwIG9mZiBzZ24KKworCWNtcC53CQklZDAsICVkMQkJIyB3aWxsIGRlbm9ybSBwdXNoIGV4cCA8IDA/CisJYmd0LmIJCXVubm9ybV9ucm1femVybwkJIyB5ZXM7IGRlbm9ybSBvbmx5IHVudGlsIGV4cCA9IDAKKworIworIyBleHBvbmVudCB3b3VsZCBub3QgZ28gPCAwLiB0aGVyZWZvcmUsIG51bWJlciBzdGF5cyBub3JtYWxpemVkCisjCisJc3ViLncJCSVkMCwgJWQxCQkjIHNoaWZ0IGV4cG9uZW50IHZhbHVlCisJbW92LncJCUZURU1QX0VYKCVhMCksICVkMAkjIGxvYWQgb2xkIGV4cG9uZW50CisJYW5kLncJCSYweDgwMDAsICVkMAkJIyBzYXZlIG9sZCBzaWduCisJb3IudwkJJWQwLCAlZDEJCSMge3NnbixuZXcgZXhwfQorCW1vdi53CQklZDEsIEZURU1QX0VYKCVhMCkJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIFVOTk9STQorCisJbW92LmIJCSZOT1JNLCAlZDAJCSMgcmV0dXJuIG5ldyBvcHR5cGUgdGFnCisJcnRzCisKKyMKKyMgZXhwb25lbnQgd291bGQgZ28gPCAwLCBzbyBvbmx5IGRlbm9ybWFsaXplIHVudGlsIGV4cCA9IDAKKyMKK3Vubm9ybV9ucm1femVybzoKKwljbXAuYgkJJWQxLCAmMzIJCSMgaXMgZXhwIDw9IDMyPworCWJndC5iCQl1bm5vcm1fbnJtX3plcm9fbHJnCSMgbm87IGdvIGhhbmRsZSBsYXJnZSBleHBvbmVudAorCisJYmZleHR1CQlGVEVNUF9ISSglYTApeyVkMTomMzJ9LCAlZDAgIyBleHRyYWN0IG5ldyBoaShtYW4pCisJbW92LmwJCSVkMCwgRlRFTVBfSEkoJWEwKQkjIHNhdmUgbmV3IGhpKG1hbikKKworCW1vdi5sCQlGVEVNUF9MTyglYTApLCAlZDAJIyBmZXRjaCBvbGQgbG8obWFuKQorCWxzbC5sCQklZDEsICVkMAkJIyBleHRyYWN0IG5ldyBsbyhtYW4pCisJbW92LmwJCSVkMCwgRlRFTVBfTE8oJWEwKQkjIHNhdmUgbmV3IGxvKG1hbikKKworCWFuZC53CQkmMHg4MDAwLCBGVEVNUF9FWCglYTApCSMgc2V0IGV4cCA9IDAKKworCW1vdi5iCQkmREVOT1JNLCAlZDAJCSMgcmV0dXJuIG5ldyBvcHR5cGUgdGFnCisJcnRzCisKKyMKKyMgb25seSBtYW50aXNzYSBiaXRzIHNldCBhcmUgaW4gbG8obWFuKQorIwordW5ub3JtX25ybV96ZXJvX2xyZzoKKwlzdWIudwkJJjMyLCAlZDEJCSMgYWRqdXN0IHNoZnQgYW10IGJ5IDMyCisKKwltb3YubAkJRlRFTVBfTE8oJWEwKSwgJWQwCSMgZmV0Y2ggb2xkIGxvKG1hbikKKwlsc2wubAkJJWQxLCAlZDAJCSMgbGVmdCBzaGlmdCBsbyhtYW4pCisKKwltb3YubAkJJWQwLCBGVEVNUF9ISSglYTApCSMgc3RvcmUgbmV3IGhpKG1hbikKKwljbHIubAkJRlRFTVBfTE8oJWEwKQkJIyBsbyhtYW4pID0gMAorCisJYW5kLncJCSYweDgwMDAsIEZURU1QX0VYKCVhMCkJIyBzZXQgZXhwID0gMAorCisJbW92LmIJCSZERU5PUk0sICVkMAkJIyByZXR1cm4gbmV3IG9wdHlwZSB0YWcKKwlydHMKKworIworIyB3aG9sZSBtYW50aXNzYSBpcyB6ZXJvIHNvIHRoaXMgVU5OT1JNIGlzIGFjdHVhbGx5IGEgemVybworIwordW5ub3JtX3plcm86CisJYW5kLncJCSYweDgwMDAsIEZURU1QX0VYKCVhMCkJIyBmb3JjZSBleHBvbmVudCB0byB6ZXJvCisKKwltb3YuYgkJJlpFUk8sICVkMAkJIyBmaXggb3B0eXBlIHRhZworCXJ0cwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9mcHNwLlMgYi9hcmNoL202OGsvaWZwc3AwNjAvc3JjL2Zwc3AuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjU5N2E5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9mcHNwLlMKQEAgLTAsMCArMSwyNDc4NSBAQAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitNT1RPUk9MQSBNSUNST1BST0NFU1NPUiAmIE1FTU9SWSBURUNITk9MT0dZIEdST1VQCitNNjgwMDAgSGktUGVyZm9ybWFuY2UgTWljcm9wcm9jZXNzb3IgRGl2aXNpb24KK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlCitQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAorCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RIRSBTT0ZUV0FSRSBpcyBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzIGFuZCB3aXRob3V0IHdhcnJhbnR5LgorVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK01PVE9ST0xBIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCithbmQgYW55IHdhcnJhbnR5IGFnYWluc3QgaW5mcmluZ2VtZW50IHdpdGggcmVnYXJkIHRvIHRoZSBTT0ZUV0FSRQorKElOQ0xVRElORyBBTlkgTU9ESUZJRUQgVkVSU0lPTlMgVEhFUkVPRikgYW5kIGFueSBhY2NvbXBhbnlpbmcgd3JpdHRlbiBtYXRlcmlhbHMuCisKK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitJTiBOTyBFVkVOVCBTSEFMTCBNT1RPUk9MQSBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEJVU0lORVNTIFBST0ZJVFMsCitCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIE9USEVSIFBFQ1VOSUFSWSBMT1NTKQorQVJJU0lORyBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLgorTW90b3JvbGEgYXNzdW1lcyBubyByZXNwb25zaWJpbGl0eSBmb3IgdGhlIG1haW50ZW5hbmNlIGFuZCBzdXBwb3J0IG9mIHRoZSBTT0ZUV0FSRS4KKworWW91IGFyZSBoZXJlYnkgZ3JhbnRlZCBhIGNvcHlyaWdodCBsaWNlbnNlIHRvIHVzZSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGUgU09GVFdBUkUKK3NvIGxvbmcgYXMgdGhpcyBlbnRpcmUgbm90aWNlIGlzIHJldGFpbmVkIHdpdGhvdXQgYWx0ZXJhdGlvbiBpbiBhbnkgbW9kaWZpZWQgYW5kL29yCityZWRpc3RyaWJ1dGVkIHZlcnNpb25zLCBhbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KK05vIGxpY2Vuc2VzIGFyZSBncmFudGVkIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UgdW5kZXIgYW55IHBhdGVudHMKK29yIHRyYWRlbWFya3Mgb2YgTW90b3JvbGEsIEluYy4KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorIworIyBmcmVhbC5zOgorIwlUaGlzIGZpbGUgaXMgYXBwZW5kZWQgdG8gdGhlIHRvcCBvZiB0aGUgMDYwRlBTUCBwYWNrYWdlCisjIGFuZCBjb250YWlucyB0aGUgZW50cnkgcG9pbnRzIGludG8gdGhlIHBhY2thZ2UuIFRoZSB1c2VyLCBpbgorIyBlZmZlY3QsIGJyYW5jaGVzIHRvIG9uZSBvZiB0aGUgYnJhbmNoIHRhYmxlIGVudHJpZXMgbG9jYXRlZAorIyBhZnRlciBfMDYwRlBTUF9UQUJMRS4KKyMJQWxzbywgc3Vicm91dGluZSBzdHVicyBleGlzdCBpbiB0aGlzIGZpbGUgKF9mcHNwX2RvbmUgZm9yCisjIGV4YW1wbGUpIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgdGhlIEZQU1AgcGFja2FnZSBpdHNlbGYgaW4gb3JkZXIKKyMgdG8gY2FsbCBhIGdpdmVuIHJvdXRpbmUuIFRoZSBzdHViIHJvdXRpbmUgYWN0dWFsbHkgcGVyZm9ybXMgdGhlCisjIGNhbGxvdXQuIFRoZSBGUFNQIGNvZGUgZG9lcyBhICJic3IiIHRvIHRoZSBzdHViIHJvdXRpbmUuIFRoaXMKKyMgZXh0cmEgbGF5ZXIgb2YgaGllcmFyY2h5IGFkZHMgYSBzbGlnaHQgcGVyZm9ybWFuY2UgcGVuYWx0eSBidXQKKyMgaXQgbWFrZXMgdGhlIEZQU1AgY29kZSBlYXNpZXIgdG8gcmVhZCBhbmQgbW9yZSBtYWluYXRpbmFibGUuCisjCisKK3NldAlfb2ZmX2JzdW4sCTB4MDAKK3NldAlfb2ZmX3NuYW4sCTB4MDQKK3NldAlfb2ZmX29wZXJyLAkweDA4CitzZXQJX29mZl9vdmZsLAkweDBjCitzZXQJX29mZl91bmZsLAkweDEwCitzZXQJX29mZl9keiwJMHgxNAorc2V0CV9vZmZfaW5leCwJMHgxOAorc2V0CV9vZmZfZmxpbmUsCTB4MWMKK3NldAlfb2ZmX2ZwdV9kaXMsCTB4MjAKK3NldAlfb2ZmX3RyYXAsCTB4MjQKK3NldAlfb2ZmX3RyYWNlLAkweDI4CitzZXQJX29mZl9hY2Nlc3MsCTB4MmMKK3NldAlfb2ZmX2RvbmUsCTB4MzAKKworc2V0CV9vZmZfaW1yLAkweDQwCitzZXQJX29mZl9kbXIsCTB4NDQKK3NldAlfb2ZmX2RtdywJMHg0OAorc2V0CV9vZmZfaXJ3LAkweDRjCitzZXQJX29mZl9pcmwsCTB4NTAKK3NldAlfb2ZmX2RyYiwJMHg1NAorc2V0CV9vZmZfZHJ3LAkweDU4CitzZXQJX29mZl9kcmwsCTB4NWMKK3NldAlfb2ZmX2R3YiwJMHg2MAorc2V0CV9vZmZfZHd3LAkweDY0CitzZXQJX29mZl9kd2wsCTB4NjgKKworXzA2MEZQU1BfVEFCTEU6CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEhlcmUncyB0aGUgdGFibGUgb2YgRU5UUlkgUE9JTlRTIGZvciB0aG9zZSBsaW5raW5nIHRoZSBwYWNrYWdlLgorCWJyYS5sCQlfZnBzcF9zbmFuCisJc2hvcnQJCTB4MDAwMAorCWJyYS5sCQlfZnBzcF9vcGVycgorCXNob3J0CQkweDAwMDAKKwlicmEubAkJX2Zwc3Bfb3ZmbAorCXNob3J0CQkweDAwMDAKKwlicmEubAkJX2Zwc3BfdW5mbAorCXNob3J0CQkweDAwMDAKKwlicmEubAkJX2Zwc3BfZHoKKwlzaG9ydAkJMHgwMDAwCisJYnJhLmwJCV9mcHNwX2luZXgKKwlzaG9ydAkJMHgwMDAwCisJYnJhLmwJCV9mcHNwX2ZsaW5lCisJc2hvcnQJCTB4MDAwMAorCWJyYS5sCQlfZnBzcF91bnN1cHAKKwlzaG9ydAkJMHgwMDAwCisJYnJhLmwJCV9mcHNwX2VmZmFkZAorCXNob3J0CQkweDAwMDAKKworCXNwYWNlCQk1NgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCV9mcHNwX2RvbmUKK19mcHNwX2RvbmU6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9kb25lLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfcmVhbF9vdmZsCitfcmVhbF9vdmZsOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfb3ZmbCwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX3JlYWxfdW5mbAorX3JlYWxfdW5mbDoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX3VuZmwsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9yZWFsX2luZXgKK19yZWFsX2luZXg6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9pbmV4LCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfcmVhbF9ic3VuCitfcmVhbF9ic3VuOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfYnN1biwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX3JlYWxfb3BlcnIKK19yZWFsX29wZXJyOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfb3BlcnIsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9yZWFsX3NuYW4KK19yZWFsX3NuYW46CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9zbmFuLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfcmVhbF9kegorX3JlYWxfZHo6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9keiwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX3JlYWxfZmxpbmUKK19yZWFsX2ZsaW5lOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZmxpbmUsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9yZWFsX2ZwdV9kaXNhYmxlZAorX3JlYWxfZnB1X2Rpc2FibGVkOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZnB1X2RpcywlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX3JlYWxfdHJhcAorX3JlYWxfdHJhcDoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX3RyYXAsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9yZWFsX3RyYWNlCitfcmVhbF90cmFjZToKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX3RyYWNlLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfcmVhbF9hY2Nlc3MKK19yZWFsX2FjY2VzczoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2FjY2VzcywlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCV9pbWVtX3JlYWQKK19pbWVtX3JlYWQ6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9pbXIsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9kbWVtX3JlYWQKK19kbWVtX3JlYWQ6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9kbXIsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9kbWVtX3dyaXRlCitfZG1lbV93cml0ZToKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2RtdywlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2ltZW1fcmVhZF93b3JkCitfaW1lbV9yZWFkX3dvcmQ6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9pcncsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9pbWVtX3JlYWRfbG9uZworX2ltZW1fcmVhZF9sb25nOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfaXJsLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfZG1lbV9yZWFkX2J5dGUKK19kbWVtX3JlYWRfYnl0ZToKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2RyYiwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2RtZW1fcmVhZF93b3JkCitfZG1lbV9yZWFkX3dvcmQ6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9kcncsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9kbWVtX3JlYWRfbG9uZworX2RtZW1fcmVhZF9sb25nOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZHJsLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfZG1lbV93cml0ZV9ieXRlCitfZG1lbV93cml0ZV9ieXRlOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZHdiLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfZG1lbV93cml0ZV93b3JkCitfZG1lbV93cml0ZV93b3JkOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZHd3LCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfZG1lbV93cml0ZV9sb25nCitfZG1lbV93cml0ZV9sb25nOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZHdsLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisjCisjIFRoaXMgZmlsZSBjb250YWlucyBhIHNldCBvZiBkZWZpbmUgc3RhdGVtZW50cyBmb3IgY29uc3RhbnRzCisjIGluIG9yZGVyIHRvIHByb21vdGUgcmVhZGFiaWxpdHkgd2l0aGluIHRoZSBjb3JlY29kZSBpdHNlbGYuCisjCisKK3NldCBMT0NBTF9TSVpFLAkJMTkyCQkJIyBzdGFjayBmcmFtZSBzaXplKGJ5dGVzKQorc2V0IExWLAkJCS1MT0NBTF9TSVpFCQkjIHN0YWNrIG9mZnNldAorCitzZXQgRVhDX1NSLAkJMHg0CQkJIyBzdGFjayBzdGF0dXMgcmVnaXN0ZXIKK3NldCBFWENfUEMsCQkweDYJCQkjIHN0YWNrIHBjCitzZXQgRVhDX1ZPRkYsCQkweGEJCQkjIHN0YWNrZWQgdmVjdG9yIG9mZnNldAorc2V0IEVYQ19FQSwJCTB4YwkJCSMgc3RhY2tlZCA8ZWE+CisKK3NldCBFWENfRlAsCQkweDAJCQkjIGZyYW1lIHBvaW50ZXIKKworc2V0IEVYQ19BUkVHUywJCS02OAkJCSMgb2Zmc2V0IG9mIGFsbCBhZGRyZXNzIHJlZ3MKK3NldCBFWENfRFJFR1MsCQktMTAwCQkJIyBvZmZzZXQgb2YgYWxsIGRhdGEgcmVncworc2V0IEVYQ19GUFJFR1MsCQktMzYJCQkjIG9mZnNldCBvZiBhbGwgZnAgcmVncworCitzZXQgRVhDX0E3LAkJRVhDX0FSRUdTKyg3KjQpCQkjIG9mZnNldCBvZiBzYXZlZCBhNworc2V0IE9MRF9BNywJCUVYQ19BUkVHUysoNio0KQkJIyBleHRyYSBjb3B5IG9mIHNhdmVkIGE3CitzZXQgRVhDX0E2LAkJRVhDX0FSRUdTKyg2KjQpCQkjIG9mZnNldCBvZiBzYXZlZCBhNgorc2V0IEVYQ19BNSwJCUVYQ19BUkVHUysoNSo0KQorc2V0IEVYQ19BNCwJCUVYQ19BUkVHUysoNCo0KQorc2V0IEVYQ19BMywJCUVYQ19BUkVHUysoMyo0KQorc2V0IEVYQ19BMiwJCUVYQ19BUkVHUysoMio0KQorc2V0IEVYQ19BMSwJCUVYQ19BUkVHUysoMSo0KQorc2V0IEVYQ19BMCwJCUVYQ19BUkVHUysoMCo0KQorc2V0IEVYQ19ENywJCUVYQ19EUkVHUysoNyo0KQorc2V0IEVYQ19ENiwJCUVYQ19EUkVHUysoNio0KQorc2V0IEVYQ19ENSwJCUVYQ19EUkVHUysoNSo0KQorc2V0IEVYQ19ENCwJCUVYQ19EUkVHUysoNCo0KQorc2V0IEVYQ19EMywJCUVYQ19EUkVHUysoMyo0KQorc2V0IEVYQ19EMiwJCUVYQ19EUkVHUysoMio0KQorc2V0IEVYQ19EMSwJCUVYQ19EUkVHUysoMSo0KQorc2V0IEVYQ19EMCwJCUVYQ19EUkVHUysoMCo0KQorCitzZXQgRVhDX0ZQMCwJCUVYQ19GUFJFR1MrKDAqMTIpCSMgb2Zmc2V0IG9mIHNhdmVkIGZwMAorc2V0IEVYQ19GUDEsCQlFWENfRlBSRUdTKygxKjEyKQkjIG9mZnNldCBvZiBzYXZlZCBmcDEKK3NldCBFWENfRlAyLAkJRVhDX0ZQUkVHUysoMioxMikJIyBvZmZzZXQgb2Ygc2F2ZWQgZnAyIChub3QgdXNlZCkKKworc2V0IEZQX1NDUjEsCQlMVis4MAkJCSMgZnAgc2NyYXRjaCAxCitzZXQgRlBfU0NSMV9FWCwJCUZQX1NDUjErMAorc2V0IEZQX1NDUjFfU0dOLAlGUF9TQ1IxKzIKK3NldCBGUF9TQ1IxX0hJLAkJRlBfU0NSMSs0CitzZXQgRlBfU0NSMV9MTywJCUZQX1NDUjErOAorCitzZXQgRlBfU0NSMCwJCUxWKzY4CQkJIyBmcCBzY3JhdGNoIDAKK3NldCBGUF9TQ1IwX0VYLAkJRlBfU0NSMCswCitzZXQgRlBfU0NSMF9TR04sCUZQX1NDUjArMgorc2V0IEZQX1NDUjBfSEksCQlGUF9TQ1IwKzQKK3NldCBGUF9TQ1IwX0xPLAkJRlBfU0NSMCs4CisKK3NldCBGUF9EU1QsCQlMVis1NgkJCSMgZnAgZGVzdGluYXRpb24gb3BlcmFuZAorc2V0IEZQX0RTVF9FWCwJCUZQX0RTVCswCitzZXQgRlBfRFNUX1NHTiwJCUZQX0RTVCsyCitzZXQgRlBfRFNUX0hJLAkJRlBfRFNUKzQKK3NldCBGUF9EU1RfTE8sCQlGUF9EU1QrOAorCitzZXQgRlBfU1JDLAkJTFYrNDQJCQkjIGZwIHNvdXJjZSBvcGVyYW5kCitzZXQgRlBfU1JDX0VYLAkJRlBfU1JDKzAKK3NldCBGUF9TUkNfU0dOLAkJRlBfU1JDKzIKK3NldCBGUF9TUkNfSEksCQlGUF9TUkMrNAorc2V0IEZQX1NSQ19MTywJCUZQX1NSQys4CisKK3NldCBVU0VSX0ZQSUFSLAkJTFYrNDAJCQkjIEZQIGluc3RyIGFkZHJlc3MgcmVnaXN0ZXIKKworc2V0IFVTRVJfRlBTUiwJCUxWKzM2CQkJIyBGUCBzdGF0dXMgcmVnaXN0ZXIKK3NldCBGUFNSX0NDLAkJVVNFUl9GUFNSKzAJCSMgRlBTUiBjb25kaXRpb24gY29kZXMKK3NldCBGUFNSX1FCWVRFLAkJVVNFUl9GUFNSKzEJCSMgRlBTUiBxb3V0aWVudCBieXRlCitzZXQgRlBTUl9FWENFUFQsCVVTRVJfRlBTUisyCQkjIEZQU1IgZXhjZXB0aW9uIHN0YXR1cyBieXRlCitzZXQgRlBTUl9BRVhDRVBULAlVU0VSX0ZQU1IrMwkJIyBGUFNSIGFjY3J1ZWQgZXhjZXB0aW9uIGJ5dGUKKworc2V0IFVTRVJfRlBDUiwJCUxWKzMyCQkJIyBGUCBjb250cm9sIHJlZ2lzdGVyCitzZXQgRlBDUl9FTkFCTEUsCVVTRVJfRlBDUisyCQkjIEZQQ1IgZXhjZXB0aW9uIGVuYWJsZQorc2V0IEZQQ1JfTU9ERSwJCVVTRVJfRlBDUiszCQkjIEZQQ1Igcm91bmRpbmcgbW9kZSBjb250cm9sCisKK3NldCBMX1NDUjMsCQlMVisyOAkJCSMgaW50ZWdlciBzY3JhdGNoIDMKK3NldCBMX1NDUjIsCQlMVisyNAkJCSMgaW50ZWdlciBzY3JhdGNoIDIKK3NldCBMX1NDUjEsCQlMVisyMAkJCSMgaW50ZWdlciBzY3JhdGNoIDEKKworc2V0IFNUT1JFX0ZMRywJCUxWKzE5CQkJIyBmbGFnOiBvcGVyYW5kIHN0b3JlIChpZS4gbm90IGZjbXAvZnRzdCkKKworc2V0IEVYQ19URU1QMiwJCUxWKzI0CQkJIyB0ZW1wb3Jhcnkgc3BhY2UKK3NldCBFWENfVEVNUCwJCUxWKzE2CQkJIyB0ZW1wb3Jhcnkgc3BhY2UKKworc2V0IERUQUcsCQlMVisxNQkJCSMgZGVzdGluYXRpb24gb3BlcmFuZCB0eXBlCitzZXQgU1RBRywJCUxWKzE0CQkJIyBzb3VyY2Ugb3BlcmFuZCB0eXBlCisKK3NldCBTUENPTkRfRkxHLAkJTFYrMTAJCQkjIGZsYWc6IHNwZWNpYWwgY2FzZSAoc2VlIGJlbG93KQorCitzZXQgRVhDX0NDLAkJTFYrOAkJCSMgc2F2ZWQgY29uZGl0aW9uIGNvZGVzCitzZXQgRVhDX0VYVFdQVFIsCUxWKzQJCQkjIHNhdmVkIGN1cnJlbnQgUEMgKGFjdGl2ZSkKK3NldCBFWENfRVhUV09SRCwJTFYrMgkJCSMgc2F2ZWQgZXh0ZW5zaW9uIHdvcmQKK3NldCBFWENfQ01EUkVHLAkJTFYrMgkJCSMgc2F2ZWQgZXh0ZW5zaW9uIHdvcmQKK3NldCBFWENfT1BXT1JELAkJTFYrMAkJCSMgc2F2ZWQgb3BlcmF0aW9uIHdvcmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBIZWxwZnVsIG1hY3JvcworCitzZXQgRlRFTVAsCQkwCQkJIyBvZmZzZXRzIHdpdGhpbiBhbgorc2V0IEZURU1QX0VYLAkJMAkJCSMgZXh0ZW5kZWQgcHJlY2lzaW9uCitzZXQgRlRFTVBfU0dOLAkJMgkJCSMgdmFsdWUgc2F2ZWQgaW4gbWVtb3J5Lgorc2V0IEZURU1QX0hJLAkJNAorc2V0IEZURU1QX0xPLAkJOAorc2V0IEZURU1QX0dSUywJCTEyCisKK3NldCBMT0NBTCwJCTAJCQkjIG9mZnNldHMgd2l0aGluIGFuCitzZXQgTE9DQUxfRVgsCQkwCQkJIyBleHRlbmRlZCBwcmVjaXNpb24KK3NldCBMT0NBTF9TR04sCQkyCQkJIyB2YWx1ZSBzYXZlZCBpbiBtZW1vcnkuCitzZXQgTE9DQUxfSEksCQk0CitzZXQgTE9DQUxfTE8sCQk4CitzZXQgTE9DQUxfR1JTLAkJMTIKKworc2V0IERTVCwJCTAJCQkjIG9mZnNldHMgd2l0aGluIGFuCitzZXQgRFNUX0VYLAkJMAkJCSMgZXh0ZW5kZWQgcHJlY2lzaW9uCitzZXQgRFNUX0hJLAkJNAkJCSMgdmFsdWUgc2F2ZWQgaW4gbWVtb3J5Lgorc2V0IERTVF9MTywJCTgKKworc2V0IFNSQywJCTAJCQkjIG9mZnNldHMgd2l0aGluIGFuCitzZXQgU1JDX0VYLAkJMAkJCSMgZXh0ZW5kZWQgcHJlY2lzaW9uCitzZXQgU1JDX0hJLAkJNAkJCSMgdmFsdWUgc2F2ZWQgaW4gbWVtb3J5Lgorc2V0IFNSQ19MTywJCTgKKworc2V0IFNHTF9MTywJCTB4M2Y4MQkJCSMgbWluIHNnbCBwcmVjIGV4cG9uZW50CitzZXQgU0dMX0hJLAkJMHg0MDdlCQkJIyBtYXggc2dsIHByZWMgZXhwb25lbnQKK3NldCBEQkxfTE8sCQkweDNjMDEJCQkjIG1pbiBkYmwgcHJlYyBleHBvbmVudAorc2V0IERCTF9ISSwJCTB4NDNmZQkJCSMgbWF4IGRibCBwcmVjIGV4cG9uZW50CitzZXQgRVhUX0xPLAkJMHgwCQkJIyBtaW4gZXh0IHByZWMgZXhwb25lbnQKK3NldCBFWFRfSEksCQkweDdmZmUJCQkjIG1heCBleHQgcHJlYyBleHBvbmVudAorCitzZXQgRVhUX0JJQVMsCQkweDNmZmYJCQkjIGV4dGVuZGVkIHByZWNpc2lvbiBiaWFzCitzZXQgU0dMX0JJQVMsCQkweDAwN2YJCQkjIHNpbmdsZSBwcmVjaXNpb24gYmlhcworc2V0IERCTF9CSUFTLAkJMHgwM2ZmCQkJIyBkb3VibGUgcHJlY2lzaW9uIGJpYXMKKworc2V0IE5PUk0sCQkweDAwCQkJIyBvcGVyYW5kIHR5cGUgZm9yIFNUQUcvRFRBRworc2V0IFpFUk8sCQkweDAxCQkJIyBvcGVyYW5kIHR5cGUgZm9yIFNUQUcvRFRBRworc2V0IElORiwJCTB4MDIJCQkjIG9wZXJhbmQgdHlwZSBmb3IgU1RBRy9EVEFHCitzZXQgUU5BTiwJCTB4MDMJCQkjIG9wZXJhbmQgdHlwZSBmb3IgU1RBRy9EVEFHCitzZXQgREVOT1JNLAkJMHgwNAkJCSMgb3BlcmFuZCB0eXBlIGZvciBTVEFHL0RUQUcKK3NldCBTTkFOLAkJMHgwNQkJCSMgb3BlcmFuZCB0eXBlIGZvciBTVEFHL0RUQUcKK3NldCBVTk5PUk0sCQkweDA2CQkJIyBvcGVyYW5kIHR5cGUgZm9yIFNUQUcvRFRBRworCisjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRlBTUi9GUENSIGJpdHMgIworIyMjIyMjIyMjIyMjIyMjIyMjCitzZXQgbmVnX2JpdCwJCTB4MwkJCSMgbmVnYXRpdmUgcmVzdWx0CitzZXQgel9iaXQsCQkweDIJCQkjIHplcm8gcmVzdWx0CitzZXQgaW5mX2JpdCwJCTB4MQkJCSMgaW5maW5pdGUgcmVzdWx0CitzZXQgbmFuX2JpdCwJCTB4MAkJCSMgTkFOIHJlc3VsdAorCitzZXQgcV9zbl9iaXQsCQkweDcJCQkjIHNpZ24gYml0IG9mIHF1b3RpZW50IGJ5dGUKKworc2V0IGJzdW5fYml0LAkJNwkJCSMgYnJhbmNoIG9uIHVub3JkZXJlZAorc2V0IHNuYW5fYml0LAkJNgkJCSMgc2lnbmFsbGluZyBOQU4KK3NldCBvcGVycl9iaXQsCQk1CQkJIyBvcGVyYW5kIGVycm9yCitzZXQgb3ZmbF9iaXQsCQk0CQkJIyBvdmVyZmxvdworc2V0IHVuZmxfYml0LAkJMwkJCSMgdW5kZXJmbG93CitzZXQgZHpfYml0LAkJMgkJCSMgZGl2aWRlIGJ5IHplcm8KK3NldCBpbmV4Ml9iaXQsCQkxCQkJIyBpbmV4YWN0IHJlc3VsdCAyCitzZXQgaW5leDFfYml0LAkJMAkJCSMgaW5leGFjdCByZXN1bHQgMQorCitzZXQgYWlvcF9iaXQsCQk3CQkJIyBhY2NydWVkIGluZXhhY3Qgb3BlcmF0aW9uIGJpdAorc2V0IGFvdmZsX2JpdCwJCTYJCQkjIGFjY3J1ZWQgb3ZlcmZsb3cgYml0CitzZXQgYXVuZmxfYml0LAkJNQkJCSMgYWNjcnVlZCB1bmRlcmZsb3cgYml0CitzZXQgYWR6X2JpdCwJCTQJCQkjIGFjY3J1ZWQgZHogYml0CitzZXQgYWluZXhfYml0LAkJMwkJCSMgYWNjcnVlZCBpbmV4YWN0IGJpdAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBGUFNSIGluZGl2aWR1YWwgYml0IG1hc2tzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzZXQgbmVnX21hc2ssCQkweDA4MDAwMDAwCQkjIG5lZ2F0aXZlIGJpdCBtYXNrIChsdykKK3NldCBpbmZfbWFzaywJCTB4MDIwMDAwMDAJCSMgaW5maW5pdHkgYml0IG1hc2sgKGx3KQorc2V0IHpfbWFzaywJCTB4MDQwMDAwMDAJCSMgemVybyBiaXQgbWFzayAobHcpCitzZXQgbmFuX21hc2ssCQkweDAxMDAwMDAwCQkjIG5hbiBiaXQgbWFzayAobHcpCisKK3NldCBuZWdfYm1hc2ssCQkweDA4CQkJIyBuZWdhdGl2ZSBiaXQgbWFzayAoYnl0ZSkKK3NldCBpbmZfYm1hc2ssCQkweDAyCQkJIyBpbmZpbml0eSBiaXQgbWFzayAoYnl0ZSkKK3NldCB6X2JtYXNrLAkJMHgwNAkJCSMgemVybyBiaXQgbWFzayAoYnl0ZSkKK3NldCBuYW5fYm1hc2ssCQkweDAxCQkJIyBuYW4gYml0IG1hc2sgKGJ5dGUpCisKK3NldCBic3VuX21hc2ssCQkweDAwMDA4MDAwCQkjIGJzdW4gZXhjZXB0aW9uIG1hc2sKK3NldCBzbmFuX21hc2ssCQkweDAwMDA0MDAwCQkjIHNuYW4gZXhjZXB0aW9uIG1hc2sKK3NldCBvcGVycl9tYXNrLAkJMHgwMDAwMjAwMAkJIyBvcGVyciBleGNlcHRpb24gbWFzaworc2V0IG92ZmxfbWFzaywJCTB4MDAwMDEwMDAJCSMgb3ZlcmZsb3cgZXhjZXB0aW9uIG1hc2sKK3NldCB1bmZsX21hc2ssCQkweDAwMDAwODAwCQkjIHVuZGVyZmxvdyBleGNlcHRpb24gbWFzaworc2V0IGR6X21hc2ssCQkweDAwMDAwNDAwCQkjIGR6IGV4Y2VwdGlvbiBtYXNrCitzZXQgaW5leDJfbWFzaywJCTB4MDAwMDAyMDAJCSMgaW5leDIgZXhjZXB0aW9uIG1hc2sKK3NldCBpbmV4MV9tYXNrLAkJMHgwMDAwMDEwMAkJIyBpbmV4MSBleGNlcHRpb24gbWFzaworCitzZXQgYWlvcF9tYXNrLAkJMHgwMDAwMDA4MAkJIyBhY2NydWVkIGlsbGVnYWwgb3BlcmF0aW9uCitzZXQgYW92ZmxfbWFzaywJCTB4MDAwMDAwNDAJCSMgYWNjcnVlZCBvdmVyZmxvdworc2V0IGF1bmZsX21hc2ssCQkweDAwMDAwMDIwCQkjIGFjY3J1ZWQgdW5kZXJmbG93CitzZXQgYWR6X21hc2ssCQkweDAwMDAwMDEwCQkjIGFjY3J1ZWQgZGl2aWRlIGJ5IHplcm8KK3NldCBhaW5leF9tYXNrLAkJMHgwMDAwMDAwOAkJIyBhY2NydWVkIGluZXhhY3QKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRlBTUiBjb21iaW5hdGlvbnMgdXNlZCBpbiB0aGUgRlBTUCAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc2V0IGR6aW5mX21hc2ssCQlpbmZfbWFzaytkel9tYXNrK2Fkel9tYXNrCitzZXQgb3BuYW5fbWFzaywJCW5hbl9tYXNrK29wZXJyX21hc2srYWlvcF9tYXNrCitzZXQgbnppX21hc2ssCQkweDAxZmZmZmZmCQkjY2xlYXJzIE4sIFosIGFuZCBJCitzZXQgdW5maW54X21hc2ssCXVuZmxfbWFzaytpbmV4Ml9tYXNrK2F1bmZsX21hc2srYWluZXhfbWFzaworc2V0IHVuZjJpbnhfbWFzaywJdW5mbF9tYXNrK2luZXgyX21hc2srYWluZXhfbWFzaworc2V0IG92ZmlueF9tYXNrLAlvdmZsX21hc2sraW5leDJfbWFzaythb3ZmbF9tYXNrK2FpbmV4X21hc2sKK3NldCBpbngxYV9tYXNrLAkJaW5leDFfbWFzaythaW5leF9tYXNrCitzZXQgaW54MmFfbWFzaywJCWluZXgyX21hc2srYWluZXhfbWFzaworc2V0IHNuYW5pb3BfbWFzaywJbmFuX21hc2src25hbl9tYXNrK2Fpb3BfbWFzaworc2V0IHNuYW5pb3AyX21hc2ssCXNuYW5fbWFzaythaW9wX21hc2sKK3NldCBuYW5pb3BfbWFzaywJbmFuX21hc2srYWlvcF9tYXNrCitzZXQgbmVnaW5mX21hc2ssCW5lZ19tYXNrK2luZl9tYXNrCitzZXQgaW5mYWlvcF9tYXNrLAlpbmZfbWFzaythaW9wX21hc2sKK3NldCBuZWd6X21hc2ssCQluZWdfbWFzayt6X21hc2sKK3NldCBvcGFvcF9tYXNrLAkJb3BlcnJfbWFzaythaW9wX21hc2sKK3NldCB1bmZsX2lueF9tYXNrLAl1bmZsX21hc2srYXVuZmxfbWFzaythaW5leF9tYXNrCitzZXQgb3ZmbF9pbnhfbWFzaywJb3ZmbF9tYXNrK2FvdmZsX21hc2srYWluZXhfbWFzaworCisjIyMjIyMjIyMKKyMgbWlzYy4gIworIyMjIyMjIyMjCitzZXQgcm5kX3N0a3lfYml0LAkyOQkJCSMgc3RreSBiaXQgcG9zIGluIGxvbmd3b3JkCisKK3NldCBzaWduX2JpdCwJCTB4NwkJCSMgc2lnbiBiaXQKK3NldCBzaWduYW5fYml0LAkJMHg2CQkJIyBzaWduYWxsaW5nIG5hbiBiaXQKKworc2V0IHNnbF90aHJlc2gsCQkweDNmODEJCQkjIG1pbmltdW0gc2dsIGV4cG9uZW50CitzZXQgZGJsX3RocmVzaCwJCTB4M2MwMQkJCSMgbWluaW11bSBkYmwgZXhwb25lbnQKKworc2V0IHhfbW9kZSwJCTB4MAkJCSMgZXh0ZW5kZWQgcHJlY2lzaW9uCitzZXQgc19tb2RlLAkJMHg0CQkJIyBzaW5nbGUgcHJlY2lzaW9uCitzZXQgZF9tb2RlLAkJMHg4CQkJIyBkb3VibGUgcHJlY2lzaW9uCisKK3NldCBybl9tb2RlLAkJMHgwCQkJIyByb3VuZC10by1uZWFyZXN0CitzZXQgcnpfbW9kZSwJCTB4MQkJCSMgcm91bmQtdG8temVybworc2V0IHJtX21vZGUsCQkweDIJCQkjIHJvdW5kLXRwLW1pbnVzLWluZmluaXR5CitzZXQgcnBfbW9kZSwJCTB4MwkJCSMgcm91bmQtdG8tcGx1cy1pbmZpbml0eQorCitzZXQgbWFudGlzc2FsZW4sCTY0CQkJIyBsZW5ndGggb2YgbWFudGlzc2EgaW4gYml0cworCitzZXQgQllURSwJCTEJCQkjIGxlbihieXRlKSA9PSAxIGJ5dGUKK3NldCBXT1JELAkJMgkJCSMgbGVuKHdvcmQpID09IDIgYnl0ZXMKK3NldCBMT05HLAkJNAkJCSMgbGVuKGxvbmd3b3JkKSA9PSAyIGJ5dGVzCisKK3NldCBCU1VOX1ZFQywJCTB4YzAJCQkjIGJzdW4gICAgdmVjdG9yIG9mZnNldAorc2V0IElORVhfVkVDLAkJMHhjNAkJCSMgaW5leGFjdCB2ZWN0b3Igb2Zmc2V0CitzZXQgRFpfVkVDLAkJMHhjOAkJCSMgZHogICAgICB2ZWN0b3Igb2Zmc2V0CitzZXQgVU5GTF9WRUMsCQkweGNjCQkJIyB1bmZsICAgIHZlY3RvciBvZmZzZXQKK3NldCBPUEVSUl9WRUMsCQkweGQwCQkJIyBvcGVyciAgIHZlY3RvciBvZmZzZXQKK3NldCBPVkZMX1ZFQywJCTB4ZDQJCQkjIG92ZmwgICAgdmVjdG9yIG9mZnNldAorc2V0IFNOQU5fVkVDLAkJMHhkOAkJCSMgc25hbiAgICB2ZWN0b3Igb2Zmc2V0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTUGVjaWFsIENPTkRpdGlvbiBGTGFHcyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3NldCBmdHJhcGNjX2ZsZywJMHgwMQkJCSMgZmxhZyBiaXQ6IGZ0cmFwY2MgZXhjZXB0aW9uCitzZXQgZmJzdW5fZmxnLAkJMHgwMgkJCSMgZmxhZyBiaXQ6IGJzdW4gZXhjZXB0aW9uCitzZXQgbWlhN19mbGcsCQkweDA0CQkJIyBmbGFnIGJpdDogKGE3KSsgPGVhPgorc2V0IG1kYTdfZmxnLAkJMHgwOAkJCSMgZmxhZyBiaXQ6IC0oYTcpIDxlYT4KK3NldCBmbW92bV9mbGcsCQkweDQwCQkJIyBmbGFnIGJpdDogZm1vdm0gaW5zdHJ1Y3Rpb24KK3NldCBpbW1lZF9mbGcsCQkweDgwCQkJIyBmbGFnIGJpdDogJjxkYXRhPiA8ZWE+CisKK3NldCBmdHJhcGNjX2JpdCwJMHgwCitzZXQgZmJzdW5fYml0LAkJMHgxCitzZXQgbWlhN19iaXQsCQkweDIKK3NldCBtZGE3X2JpdCwJCTB4Mworc2V0IGltbWVkX2JpdCwJCTB4NworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRSQU5TQ0VOREVOVEFMICJMQVNULU9QIiBGTEFHUyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzZXQgRk1VTF9PUCwJCTB4MAkJCSMgZm11bCBpbnN0ciBwZXJmb3JtZWQgbGFzdAorc2V0IEZESVZfT1AsCQkweDEJCQkjIGZkaXYgcGVyZm9ybWVkIGxhc3QKK3NldCBGQUREX09QLAkJMHgyCQkJIyBmYWRkIHBlcmZvcm1lZCBsYXN0CitzZXQgRk1PVl9PUCwJCTB4MwkJCSMgZm1vdiBwZXJmb3JtZWQgbGFzdAorCisjIyMjIyMjIyMjIyMjCisjIENPTlNUQU5UUyAjCisjIyMjIyMjIyMjIyMjCitUMToJbG9uZwkJMHg0MEM2MkQzOCwweEQzRDY0NjM0CSMgMTYzODEgTE9HMiBMRUFECitUMjoJbG9uZwkJMHgzRDZGOTBBRSwweEIxRTc1Q0M3CSMgMTYzODEgTE9HMiBUUkFJTAorCitQSToJbG9uZwkJMHg0MDAwMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgwMDAwMDAwMAorUElCWTI6CWxvbmcJCTB4M0ZGRjAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4MDAwMDAwMDAKKworVFdPQllQSToKKwlsb25nCQkweDNGRTQ1RjMwLDB4NkRDOUM4ODMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfZnBzcF9vdmZsKCk6IDA2MEZQU1AgZW50cnkgcG9pbnQgZm9yIEZQIE92ZXJmbG93IGV4Y2VwdGlvbi4JIworIwkJCQkJCQkJCSMKKyMJVGhpcyBoYW5kbGVyIHNob3VsZCBiZSB0aGUgZmlyc3QgY29kZSBleGVjdXRlZCB1cG9uIHRha2luZyB0aGUJIworIwlGUCBPdmVyZmxvdyBleGNlcHRpb24gaW4gYW4gb3BlcmF0aW5nIHN5c3RlbS4JCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfaW1lbV9yZWFkX2xvbmcoKSAtIHJlYWQgaW5zdHJ1Y3Rpb24gbG9uZ3dvcmQJCQkjCisjCWZpeF9za2V3ZWRfb3BzKCkgLSBhZGp1c3Qgc3JjIG9wZXJhbmQgaW4gZnNhdmUgZnJhbWUJCSMKKyMJc2V0X3RhZ194KCkgLSBkZXRlcm1pbmUgb3B0eXBlIG9mIHNyYy9kc3Qgb3BlcmFuZHMJCSMKKyMJc3RvcmVfZnByZWcoKSAtIHN0b3JlIG9wY2xhc3MgMCBvciAyIHJlc3VsdCB0byBGUCByZWdmaWxlCSMKKyMJdW5ub3JtX2ZpeCgpIC0gY2hhbmdlIFVOTk9STSBvcGVyYW5kcyB0byBOT1JNIG9yIFpFUk8JCSMKKyMJbG9hZF9mcG4yKCkgLSBsb2FkIGRzdCBvcGVyYW5kIGZyb20gRlAgcmVnZmlsZQkJCSMKKyMJZm91dCgpIC0gZW11bGF0ZSBhbiBvcGNsYXNzIDMgaW5zdHJ1Y3Rpb24JCQkjCisjCXRibF91bnN1cHAgLSBhZGQgb2YgdGFibGUgb2YgZW11bGF0aW9uIHJvdXRpbmVzIGZvciBvcGNsYXNzIDAsMgkjCisjCV9mcHNwX2RvbmUoKSAtICJjYWxsb3V0IiBmb3IgMDYwRlBTUCBleGl0IChhbGwgd29yayBkb25lISkJIworIwlfcmVhbF9vdmZsKCkgLSAiY2FsbG91dCIgZm9yIE92ZXJmbG93IGV4Y2VwdGlvbiBlbmFibGVkIGNvZGUJIworIwlfcmVhbF9pbmV4KCkgLSAiY2FsbG91dCIgZm9yIEluZXhhY3QgZXhjZXB0aW9uIGVuYWJsZWQgY29kZQkjCisjCV9yZWFsX3RyYWNlKCkgLSAiY2FsbG91dCIgZm9yIFRyYWNlIGV4Y2VwdGlvbiBjb2RlCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgdGhlIEZQIE92ZmwgZXhjZXB0aW9uIHN0YWNrIGZyYW1lCSMKKyMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIHNvdXJjZSBvcGVyYW5kCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJT3ZlcmZsb3cgRXhjZXB0aW9uIGVuYWJsZWQ6CQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBpcyB1bmNoYW5nZWQJCQkJCSMKKyMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIGFkanVzdGVkIHNyYyBvcCBmb3Igb3BjbGFzcyAwLDIJIworIwlPdmVyZmxvdyBFeGNlcHRpb24gZGlzYWJsZWQ6CQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBpcyB1bmNoYW5nZWQJCQkJCSMKKyMJLSBUaGUgImV4Y2VwdGlvbiBwcmVzZW50IiBmbGFnIGluIHRoZSBmc2F2ZSBmcmFtZSBpcyBjbGVhcmVkCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU9uIHRoZSAwNjAsIGlmIGFuIEZQIG92ZXJmbG93IGlzIHByZXNlbnQgYXMgdGhlIHJlc3VsdCBvZiBhbnkJIworIyBpbnN0cnVjdGlvbiwgdGhlIDA2MCB3aWxsIHRha2UgYW4gb3ZlcmZsb3cgZXhjZXB0aW9uIHdoZXRoZXIgdGhlCSMKKyMgZXhjZXB0aW9uIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgaW4gdGhlIEZQQ1IuIEZvciB0aGUgZGlzYWJsZWQgY2FzZSwJIworIyBUaGlzIGhhbmRsZXIgZW11bGF0ZXMgdGhlIGluc3RydWN0aW9uIHRvIGRldGVybWluZSB3aGF0IHRoZSBjb3JyZWN0CSMKKyMgZGVmYXVsdCByZXN1bHQgc2hvdWxkIGJlIGZvciB0aGUgb3BlcmF0aW9uLiBUaGlzIGRlZmF1bHQgcmVzdWx0IGlzCSMKKyMgdGhlbiBzdG9yZWQgaW4gZWl0aGVyIHRoZSBGUCByZWdmaWxlLCBkYXRhIHJlZ2ZpbGUsIG9yIG1lbW9yeS4JIworIyBGaW5hbGx5LCB0aGUgaGFuZGxlciBleGl0cyB0aHJvdWdoIHRoZSAiY2FsbG91dCIgX2Zwc3BfZG9uZSgpCQkjCisjIGRlbm90aW5nIHRoYXQgbm8gZXhjZXB0aW9uYWwgY29uZGl0aW9ucyBleGlzdCB3aXRoaW4gdGhlIG1hY2hpbmUuCSMKKyMJSWYgdGhlIGV4Y2VwdGlvbiBpcyBlbmFibGVkLCB0aGVuIHRoaXMgaGFuZGxlciBtdXN0IGNyZWF0ZSB0aGUJIworIyBleGNlcHRpb25hbCBvcGVyYW5kIGFuZCBwbGF2ZSBpdCBpbiB0aGUgZnNhdmUgc3RhdGUgZnJhbWUsIGFuZCBzdG9yZQkjCisjIHRoZSBkZWZhdWx0IHJlc3VsdCAob25seSBpZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgb3BjbGFzcyAzKS4gRm9yCSMKKyMgZXhjZXB0aW9ucyBlbmFibGVkLCB0aGlzIGhhbmRsZXIgbXVzdCBleGl0IHRocm91Z2ggdGhlICJjYWxsb3V0IgkjCisjIF9yZWFsX292ZmwoKSBzbyB0aGF0IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGVuYWJsZWQgb3ZlcmZsb3cgaGFuZGxlcgkjCisjIGNhbiBoYW5kbGUgdGhpcyBjYXNlLgkJCQkJCQkjCisjCVR3byBvdGhlciBjb25kaXRpb25zIGV4aXN0LiBGaXJzdCwgaWYgb3ZlcmZsb3cgd2FzIGRpc2FibGVkCSMKKyMgYnV0IHRoZSBpbmV4YWN0IGV4Y2VwdGlvbiB3YXMgZW5hYmxlZCwgdGhpcyBoYW5kbGVyIG11c3QgZXhpdAkJIworIyB0aHJvdWdoIHRoZSAiY2FsbG91dCIgX3JlYWxfaW5leCgpIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcmVzdWx0CSMKKyMgd2FzIGluZXhhY3QuCQkJCQkJCQkjCisjCUFsc28sIGluIHRoZSBjYXNlIG9mIGFuIG9wY2xhc3MgdGhyZWUgaW5zdHJ1Y3Rpb24gd2hlcmUJCSMKKyMgb3ZlcmZsb3cgd2FzIGRpc2FibGVkIGFuZCB0aGUgdHJhY2UgZXhjZXB0aW9uIHdhcyBlbmFibGVkLCB0aGlzCSMKKyMgaGFuZGxlciBtdXN0IGV4aXQgdGhyb3VnaCB0aGUgImNhbGxvdXQiIF9yZWFsX3RyYWNlKCkuCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfZnBzcF9vdmZsCitfZnBzcF9vdmZsOgorCisjJCMJc3ViLmwJCSYyNCwlc3AJCQkjIG1ha2Ugcm9vbSBmb3Igc3JjL2RzdAorCisJbGluay53CQklYTYsJi1MT0NBTF9TSVpFCSMgaW5pdCBzdGFjayBmcmFtZQorCisJZnNhdmUJCUZQX1NSQyglYTYpCQkjIGdyYWIgdGhlICJidXN5IiBmcmFtZQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQUkVHUyglYTYpCSMgc2F2ZSBmcDAtZnAxIG9uIHN0YWNrCisKKyMgdGhlIEZQSUFSIGhvbGRzIHRoZSAiY3VycmVudCBQQyIgb2YgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uCisJbW92LmwJCVVTRVJfRlBJQVIoJWE2KSxFWENfRVhUV1BUUiglYTYpCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIHRoZSBpbnN0cnVjdGlvbiB3b3JkcworCW1vdi5sCQklZDAsRVhDX09QV09SRCglYTYpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJYnRzdAkJJjB4NSxFWENfQ01EUkVHKCVhNikJIyBpcyBpbnN0ciBhbiBmbW92ZSBvdXQ/CisJYm5lLncJCWZvdmZsX291dAorCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCisJYnNyLmwJCWZpeF9za2V3ZWRfb3BzCQkjIGZpeCBzcmMgb3AKKworIyBzaW5jZSwgSSBiZWxpZXZlLCBvbmx5IE5PUk1zIGFuZCBERU5PUk1zIGNhbiBjb21lIHRocm91Z2ggaGVyZSwKKyMgbWF5YmUgd2UgY2FuIGF2b2lkIHRoZSBzdWJyb3V0aW5lIGNhbGwuCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHNyYyBvcAorCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQkJIyBtYXliZSBOT1JNLERFTk9STQorCisjIGJpdCBmaXZlIG9mIHRoZSBmcCBleHRlbnNpb24gd29yZCBzZXBhcmF0ZXMgdGhlIG1vbmFkaWMgYW5kIGR5YWRpYyBvcGVyYXRpb25zCisjIHRoYXQgY2FuIHBhc3MgdGhyb3VnaCBmcHNwX292ZmwoKS4gcmVtZW1iZXIgdGhhdCBmY21wLCBmdHN0LCBhbmQgZnNpbmNvcworIyB3aWxsIG5ldmVyIHRha2UgdGhpcyBleGNlcHRpb24uCisJYnRzdAkJJjB4NSwxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wZXJhdGlvbiBtb25hZGljIG9yIGR5YWRpYz8KKwliZXEuYgkJZm92ZmxfZXh0cmFjdAkJIyBtb25hZGljCisKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwICMgZHlhZGljOyBsb2FkIGRzdCByZWcKKwlic3IubAkJbG9hZF9mcG4yCQkjIGxvYWQgZHN0IGludG8gRlBfRFNUCisKKwlsZWEJCUZQX0RTVCglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gZHN0IG9wCisJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQorCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgb3BlcmFuZCBhbiBVTk5PUk0/CisJYm5lLmIJCWZvdmZsX29wMl9kb25lCQkjIG5vCisJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBjb252ZXJ0IHRvIE5PUk0sREVOT1JNLG9yIFpFUk8KK2ZvdmZsX29wMl9kb25lOgorCW1vdi5iCQklZDAsRFRBRyglYTYpCQkjIHNhdmUgZHN0IG9wdHlwZSB0YWcKKworZm92ZmxfZXh0cmFjdDoKKworIyQjCW1vdi5sCQlGUF9TUkNfRVgoJWE2KSxUUkFQX1NSQ09QX0VYKCVhNikKKyMkIwltb3YubAkJRlBfU1JDX0hJKCVhNiksVFJBUF9TUkNPUF9ISSglYTYpCisjJCMJbW92LmwJCUZQX1NSQ19MTyglYTYpLFRSQVBfU1JDT1BfTE8oJWE2KQorIyQjCW1vdi5sCQlGUF9EU1RfRVgoJWE2KSxUUkFQX0RTVE9QX0VYKCVhNikKKyMkIwltb3YubAkJRlBfRFNUX0hJKCVhNiksVFJBUF9EU1RPUF9ISSglYTYpCisjJCMJbW92LmwJCUZQX0RTVF9MTyglYTYpLFRSQVBfRFNUT1BfTE8oJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBwcmVjL21vZGUKKworCW1vdi5iCQkxK0VYQ19DTURSRUcoJWE2KSwlZDEKKwlhbmRpLncJCSYweDAwN2YsJWQxCQkjIGV4dHJhY3QgZXh0ZW5zaW9uCisKKwlhbmRpLmwJCSYweDAwZmYwMWZmLFVTRVJfRlBTUiglYTYpICMgemVybyBhbGwgYnV0IGFjY3VyZWQgZmllbGQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIGN1cnJlbnQgY29udHJvbCByZWdzCisJZm1vdi5sCQkmMHgwLCVmcHNyCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWxlYQkJRlBfRFNUKCVhNiksJWExCisKKyMgbWF5YmUgd2UgY2FuIG1ha2UgdGhlc2UgZW50cnkgcG9pbnRzIE9OTFkgdGhlIE9WRkwgZW50cnkgcG9pbnRzIG9mIGVhY2ggcm91dGluZS4KKwltb3YubAkJKHRibF91bnN1cHAubCwlcGMsJWQxLncqNCksJWQxICMgZmV0Y2ggcm91dGluZSBhZGRyCisJanNyCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEubCoxKQorCisjIHRoZSBvcGVyYXRpb24gaGFzIGJlZW4gZW11bGF0ZWQuIHRoZSByZXN1bHQgaXMgaW4gZnAwLgorIyB0aGUgRVhPUCwgaWYgYW4gZXhjZXB0aW9uIG9jY3VycmVkLCBpcyBpbiBmcDEuCisjIHdlIG11c3Qgc2F2ZSB0aGUgZGVmYXVsdCByZXN1bHQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyCisjIHRyYXBzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAKKwlic3IubAkJc3RvcmVfZnByZWcKKworIyB0aGUgZXhjZXB0aW9uYWwgcG9zc2liaWxpdGllcyB3ZSBoYXZlIGxlZnQgb3Vyc2VsdmVzIHdpdGggYXJlIE9OTFkgb3ZlcmZsb3cKKyMgYW5kIGluZXhhY3QuIGFuZCwgdGhlIGluZXhhY3QgaXMgc3VjaCB0aGF0IG92ZXJmbG93IG9jY3VycmVkIGFuZCB3YXMgZGlzYWJsZWQKKyMgYnV0IGluZXhhY3Qgd2FzIGVuYWJsZWQuCisJYnRzdAkJJm92ZmxfYml0LEZQQ1JfRU5BQkxFKCVhNikKKwlibmUuYgkJZm92Zmxfb3ZmbF9vbgorCisJYnRzdAkJJmluZXgyX2JpdCxGUENSX0VOQUJMRSglYTYpCisJYm5lLmIJCWZvdmZsX2luZXhfb24KKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CisjJCMJYWRkLmwJCSYyNCwlc3AKKwlicmEubAkJX2Zwc3BfZG9uZQorCisjIG92ZXJmbG93IGlzIGVuYWJsZWQgQU5EIG92ZXJmbG93LCBvZiBjb3Vyc2UsIG9jY3VycmVkLiBzbywgd2UgaGF2ZSB0aGUgRVhPUAorIyBpbiBmcDEuIG5vdywgc2ltcGx5IGp1bXAgdG8gX3JlYWxfb3ZmbCgpIQorZm92Zmxfb3ZmbF9vbjoKKwlmbW92bS54CQkmMHg0MCxGUF9TUkMoJWE2KQkjIHNhdmUgRVhPUCAoZnAxKSB0byBzdGFjaworCisJbW92LncJCSYweGUwMDUsMitGUF9TUkMoJWE2KQkjIHNhdmUgZXhjIHN0YXR1cworCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyBkbyB0aGlzIGFmdGVyIGZtb3ZtLG90aGVyIGY8b3A+cyEKKworCXVubGsJCSVhNgorCisJYnJhLmwJCV9yZWFsX292ZmwKKworIyBvdmVyZmxvdyBvY2N1cnJlZCBidXQgaXMgZGlzYWJsZWQuIG1lYW53aGlsZSwgaW5leGFjdCBpcyBlbmFibGVkLiB0aGVyZWZvcmUsCisjIHdlIG11c3QganVtcCB0byByZWFsX2luZXgoKS4KK2ZvdmZsX2luZXhfb246CisKKwlmbW92bS54CQkmMHg0MCxGUF9TUkMoJWE2KQkjIHNhdmUgRVhPUCAoZnAxKSB0byBzdGFjaworCisJbW92LmIJCSYweGM0LDErRVhDX1ZPRkYoJWE2KQkjIHZlY3RvciBvZmZzZXQgPSAweGM0CisJbW92LncJCSYweGUwMDEsMitGUF9TUkMoJWE2KQkjIHNhdmUgZXhjIHN0YXR1cworCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyBkbyB0aGlzIGFmdGVyIGZtb3ZtLG90aGVyIGY8b3A+cyEKKworCXVubGsJCSVhNgorCisJYnJhLmwJCV9yZWFsX2luZXgKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmb3ZmbF9vdXQ6CisKKworIyQjCW1vdi5sCQlGUF9TUkNfRVgoJWE2KSxUUkFQX1NSQ09QX0VYKCVhNikKKyMkIwltb3YubAkJRlBfU1JDX0hJKCVhNiksVFJBUF9TUkNPUF9ISSglYTYpCisjJCMJbW92LmwJCUZQX1NSQ19MTyglYTYpLFRSQVBfU1JDT1BfTE8oJWE2KQorCisjIHRoZSBzcmMgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGEgTk9STSghKSwgc28gdGFnIGl0IGFzIHN1Y2gKKwltb3YuYgkJJk5PUk0sU1RBRyglYTYpCQkjIHNldCBzcmMgb3B0eXBlIHRhZworCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBwcmVjL21vZGUKKworCWFuZC5sCQkmMHhmZmZmMDBmZixVU0VSX0ZQU1IoJWE2KSAjIHplcm8gYWxsIGJ1dCBhY2N1cmVkIGZpZWxkCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBjdXJyZW50IGNvbnRyb2wgcmVncworCWZtb3YubAkJJjB4MCwlZnBzcgorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gc3JjIG9wZXJhbmQKKworCWJzci5sCQlmb3V0CisKKwlidHN0CQkmb3ZmbF9iaXQsRlBDUl9FTkFCTEUoJWE2KQorCWJuZS53CQlmb3ZmbF9vdmZsX29uCisKKwlidHN0CQkmaW5leDJfYml0LEZQQ1JfRU5BQkxFKCVhNikKKwlibmUudwkJZm92ZmxfaW5leF9vbgorCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYKKyMkIwlhZGQubAkJJjI0LCVzcAorCisJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBvbj8KKwliZXEubAkJX2Zwc3BfZG9uZQkJIyBubworCisJZm1vdi5sCQklZnBpYXIsMHg4KCVzcCkJCSMgIkN1cnJlbnQgUEMiIGlzIGluIEZQSUFSCisJbW92LncJCSYweDIwMjQsMHg2KCVzcCkJIyBzdGsgZm10ID0gMHgyOyB2b2ZmID0gMHgwMjQKKwlicmEubAkJX3JlYWxfdHJhY2UKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfZnBzcF91bmZsKCk6IDA2MEZQU1AgZW50cnkgcG9pbnQgZm9yIEZQIFVuZGVyZmxvdyBleGNlcHRpb24uCSMKKyMJCQkJCQkJCQkjCisjCVRoaXMgaGFuZGxlciBzaG91bGQgYmUgdGhlIGZpcnN0IGNvZGUgZXhlY3V0ZWQgdXBvbiB0YWtpbmcgdGhlCSMKKyMJRlAgVW5kZXJmbG93IGV4Y2VwdGlvbiBpbiBhbiBvcGVyYXRpbmcgc3lzdGVtLgkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9pbWVtX3JlYWRfbG9uZygpIC0gcmVhZCBpbnN0cnVjdGlvbiBsb25nd29yZAkJCSMKKyMJZml4X3NrZXdlZF9vcHMoKSAtIGFkanVzdCBzcmMgb3BlcmFuZCBpbiBmc2F2ZSBmcmFtZQkJIworIwlzZXRfdGFnX3goKSAtIGRldGVybWluZSBvcHR5cGUgb2Ygc3JjL2RzdCBvcGVyYW5kcwkJIworIwlzdG9yZV9mcHJlZygpIC0gc3RvcmUgb3BjbGFzcyAwIG9yIDIgcmVzdWx0IHRvIEZQIHJlZ2ZpbGUJIworIwl1bm5vcm1fZml4KCkgLSBjaGFuZ2UgVU5OT1JNIG9wZXJhbmRzIHRvIE5PUk0gb3IgWkVSTwkJIworIwlsb2FkX2ZwbjIoKSAtIGxvYWQgZHN0IG9wZXJhbmQgZnJvbSBGUCByZWdmaWxlCQkJIworIwlmb3V0KCkgLSBlbXVsYXRlIGFuIG9wY2xhc3MgMyBpbnN0cnVjdGlvbgkJCSMKKyMJdGJsX3Vuc3VwcCAtIGFkZCBvZiB0YWJsZSBvZiBlbXVsYXRpb24gcm91dGluZXMgZm9yIG9wY2xhc3MgMCwyCSMKKyMJX2Zwc3BfZG9uZSgpIC0gImNhbGxvdXQiIGZvciAwNjBGUFNQIGV4aXQgKGFsbCB3b3JrIGRvbmUhKQkjCisjCV9yZWFsX292ZmwoKSAtICJjYWxsb3V0IiBmb3IgT3ZlcmZsb3cgZXhjZXB0aW9uIGVuYWJsZWQgY29kZQkjCisjCV9yZWFsX2luZXgoKSAtICJjYWxsb3V0IiBmb3IgSW5leGFjdCBleGNlcHRpb24gZW5hYmxlZCBjb2RlCSMKKyMJX3JlYWxfdHJhY2UoKSAtICJjYWxsb3V0IiBmb3IgVHJhY2UgZXhjZXB0aW9uIGNvZGUJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBjb250YWlucyB0aGUgRlAgVW5mbCBleGNlcHRpb24gc3RhY2sgZnJhbWUJIworIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgc291cmNlIG9wZXJhbmQJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlVbmRlcmZsb3cgRXhjZXB0aW9uIGVuYWJsZWQ6CQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBpcyB1bmNoYW5nZWQJCQkJCSMKKyMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIGFkanVzdGVkIHNyYyBvcCBmb3Igb3BjbGFzcyAwLDIJIworIwlVbmRlcmZsb3cgRXhjZXB0aW9uIGRpc2FibGVkOgkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgdW5jaGFuZ2VkCQkJCQkjCisjCS0gVGhlICJleGNlcHRpb24gcHJlc2VudCIgZmxhZyBpbiB0aGUgZnNhdmUgZnJhbWUgaXMgY2xlYXJlZAkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlPbiB0aGUgMDYwLCBpZiBhbiBGUCB1bmRlcmZsb3cgaXMgcHJlc2VudCBhcyB0aGUgcmVzdWx0IG9mIGFueQkjCisjIGluc3RydWN0aW9uLCB0aGUgMDYwIHdpbGwgdGFrZSBhbiB1bmRlcmZsb3cgZXhjZXB0aW9uIHdoZXRoZXIgdGhlCSMKKyMgZXhjZXB0aW9uIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgaW4gdGhlIEZQQ1IuIEZvciB0aGUgZGlzYWJsZWQgY2FzZSwJIworIyBUaGlzIGhhbmRsZXIgZW11bGF0ZXMgdGhlIGluc3RydWN0aW9uIHRvIGRldGVybWluZSB3aGF0IHRoZSBjb3JyZWN0CSMKKyMgZGVmYXVsdCByZXN1bHQgc2hvdWxkIGJlIGZvciB0aGUgb3BlcmF0aW9uLiBUaGlzIGRlZmF1bHQgcmVzdWx0IGlzCSMKKyMgdGhlbiBzdG9yZWQgaW4gZWl0aGVyIHRoZSBGUCByZWdmaWxlLCBkYXRhIHJlZ2ZpbGUsIG9yIG1lbW9yeS4JIworIyBGaW5hbGx5LCB0aGUgaGFuZGxlciBleGl0cyB0aHJvdWdoIHRoZSAiY2FsbG91dCIgX2Zwc3BfZG9uZSgpCQkjCisjIGRlbm90aW5nIHRoYXQgbm8gZXhjZXB0aW9uYWwgY29uZGl0aW9ucyBleGlzdCB3aXRoaW4gdGhlIG1hY2hpbmUuCSMKKyMJSWYgdGhlIGV4Y2VwdGlvbiBpcyBlbmFibGVkLCB0aGVuIHRoaXMgaGFuZGxlciBtdXN0IGNyZWF0ZSB0aGUJIworIyBleGNlcHRpb25hbCBvcGVyYW5kIGFuZCBwbGF2ZSBpdCBpbiB0aGUgZnNhdmUgc3RhdGUgZnJhbWUsIGFuZCBzdG9yZQkjCisjIHRoZSBkZWZhdWx0IHJlc3VsdCAob25seSBpZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgb3BjbGFzcyAzKS4gRm9yCSMKKyMgZXhjZXB0aW9ucyBlbmFibGVkLCB0aGlzIGhhbmRsZXIgbXVzdCBleGl0IHRocm91Z2ggdGhlICJjYWxsb3V0IgkjCisjIF9yZWFsX3VuZmwoKSBzbyB0aGF0IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGVuYWJsZWQgb3ZlcmZsb3cgaGFuZGxlcgkjCisjIGNhbiBoYW5kbGUgdGhpcyBjYXNlLgkJCQkJCQkjCisjCVR3byBvdGhlciBjb25kaXRpb25zIGV4aXN0LiBGaXJzdCwgaWYgdW5kZXJmbG93IHdhcyBkaXNhYmxlZAkjCisjIGJ1dCB0aGUgaW5leGFjdCBleGNlcHRpb24gd2FzIGVuYWJsZWQgYW5kIHRoZSByZXN1bHQgd2FzIGluZXhhY3QsCSMKKyMgdGhpcyBoYW5kbGVyIG11c3QgZXhpdCB0aHJvdWdoIHRoZSAiY2FsbG91dCIgX3JlYWxfaW5leCgpLgkJIworIyB3YXMgaW5leGFjdC4JCQkJCQkJCSMKKyMJQWxzbywgaW4gdGhlIGNhc2Ugb2YgYW4gb3BjbGFzcyB0aHJlZSBpbnN0cnVjdGlvbiB3aGVyZQkJIworIyB1bmRlcmZsb3cgd2FzIGRpc2FibGVkIGFuZCB0aGUgdHJhY2UgZXhjZXB0aW9uIHdhcyBlbmFibGVkLCB0aGlzCSMKKyMgaGFuZGxlciBtdXN0IGV4aXQgdGhyb3VnaCB0aGUgImNhbGxvdXQiIF9yZWFsX3RyYWNlKCkuCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfZnBzcF91bmZsCitfZnBzcF91bmZsOgorCisjJCMJc3ViLmwJCSYyNCwlc3AJCQkjIG1ha2Ugcm9vbSBmb3Igc3JjL2RzdAorCisJbGluay53CQklYTYsJi1MT0NBTF9TSVpFCSMgaW5pdCBzdGFjayBmcmFtZQorCisJZnNhdmUJCUZQX1NSQyglYTYpCQkjIGdyYWIgdGhlICJidXN5IiBmcmFtZQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQUkVHUyglYTYpCSMgc2F2ZSBmcDAtZnAxIG9uIHN0YWNrCisKKyMgdGhlIEZQSUFSIGhvbGRzIHRoZSAiY3VycmVudCBQQyIgb2YgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uCisJbW92LmwJCVVTRVJfRlBJQVIoJWE2KSxFWENfRVhUV1BUUiglYTYpCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIHRoZSBpbnN0cnVjdGlvbiB3b3JkcworCW1vdi5sCQklZDAsRVhDX09QV09SRCglYTYpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJYnRzdAkJJjB4NSxFWENfQ01EUkVHKCVhNikJIyBpcyBpbnN0ciBhbiBmbW92ZSBvdXQ/CisJYm5lLncJCWZ1bmZsX291dAorCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCisJYnNyLmwJCWZpeF9za2V3ZWRfb3BzCQkjIGZpeCBzcmMgb3AKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKKwlic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikJCSMgbWF5YmUgTk9STSxERU5PUk0KKworIyBiaXQgZml2ZSBvZiB0aGUgZnAgZXh0IHdvcmQgc2VwYXJhdGVzIHRoZSBtb25hZGljIGFuZCBkeWFkaWMgb3BlcmF0aW9ucworIyB0aGF0IGNhbiBwYXNzIHRocm91Z2ggZnBzcF91bmZsKCkuIHJlbWVtYmVyIHRoYXQgZmNtcCwgYW5kIGZ0c3QKKyMgd2lsbCBuZXZlciB0YWtlIHRoaXMgZXhjZXB0aW9uLgorCWJ0c3QJCSYweDUsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcCBtb25hZGljIG9yIGR5YWRpYz8KKwliZXEuYgkJZnVuZmxfZXh0cmFjdAkJIyBtb25hZGljCisKKyMgbm93LCB3aGF0J3MgbGVmdCB0aGF0J3Mgbm90IGR5YWRpYyBpcyBmc2luY29zLiB3ZSBjYW4gZGlzdGluZ3Vpc2ggaXQKKyMgZnJvbSBhbGwgZHlhZGljcyBieSB0aGUgJzAxMTB4eHggcGF0dGVybgorCWJ0c3QJCSYweDQsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcCBhbiBmc2luY29zPworCWJuZS5iCQlmdW5mbF9leHRyYWN0CQkjIHllcworCisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMCAjIGR5YWRpYzsgbG9hZCBkc3QgcmVnCisJYnNyLmwJCWxvYWRfZnBuMgkJIyBsb2FkIGRzdCBpbnRvIEZQX0RTVAorCisJbGVhCQlGUF9EU1QoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIGRzdCBvcAorCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKKwljbXBpLmIJCSVkMCwmVU5OT1JNCQkjIGlzIG9wZXJhbmQgYW4gVU5OT1JNPworCWJuZS5iCQlmdW5mbF9vcDJfZG9uZQkJIyBubworCWJzci5sCQl1bm5vcm1fZml4CQkjIHllczsgY29udmVydCB0byBOT1JNLERFTk9STSxvciBaRVJPCitmdW5mbF9vcDJfZG9uZToKKwltb3YuYgkJJWQwLERUQUcoJWE2KQkJIyBzYXZlIGRzdCBvcHR5cGUgdGFnCisKK2Z1bmZsX2V4dHJhY3Q6CisKKyMkIwltb3YubAkJRlBfU1JDX0VYKCVhNiksVFJBUF9TUkNPUF9FWCglYTYpCisjJCMJbW92LmwJCUZQX1NSQ19ISSglYTYpLFRSQVBfU1JDT1BfSEkoJWE2KQorIyQjCW1vdi5sCQlGUF9TUkNfTE8oJWE2KSxUUkFQX1NSQ09QX0xPKCVhNikKKyMkIwltb3YubAkJRlBfRFNUX0VYKCVhNiksVFJBUF9EU1RPUF9FWCglYTYpCisjJCMJbW92LmwJCUZQX0RTVF9ISSglYTYpLFRSQVBfRFNUT1BfSEkoJWE2KQorIyQjCW1vdi5sCQlGUF9EU1RfTE8oJWE2KSxUUkFQX0RTVE9QX0xPKCVhNikKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgcHJlYy9tb2RlCisKKwltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQxCisJYW5kaS53CQkmMHgwMDdmLCVkMQkJIyBleHRyYWN0IGV4dGVuc2lvbgorCisJYW5kaS5sCQkmMHgwMGZmMDFmZixVU0VSX0ZQU1IoJWE2KQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gY3VycmVudCBjb250cm9sIHJlZ3MKKwlmbW92LmwJCSYweDAsJWZwc3IKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJbGVhCQlGUF9EU1QoJWE2KSwlYTEKKworIyBtYXliZSB3ZSBjYW4gbWFrZSB0aGVzZSBlbnRyeSBwb2ludHMgT05MWSB0aGUgT1ZGTCBlbnRyeSBwb2ludHMgb2YgZWFjaCByb3V0aW5lLgorCW1vdi5sCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEudyo0KSwlZDEgIyBmZXRjaCByb3V0aW5lIGFkZHIKKwlqc3IJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS5sKjEpCisKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwCisJYnNyLmwJCXN0b3JlX2ZwcmVnCisKKyMgVGhlIGAwNjAgRlBVIG11bHRpcGxpZXIgaGFyZHdhcmUgaXMgc3VjaCB0aGF0IGlmIHRoZSByZXN1bHQgb2YgYQorIyBtdWx0aXBseSBvcGVyYXRpb24gaXMgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIG5vcm1hbGl6ZWQgbnVtYmVyCisjICgweDAwMDAwMDAwXzgwMDAwMDAwXzAwMDAwMDAwKSwgdGhlbiB0aGUgbWFjaGluZSB3aWxsIHRha2UgYW4KKyMgdW5kZXJmbG93IGV4Y2VwdGlvbi4gU2luY2UgdGhpcyBpcyBpbmNvcnJlY3QsIHdlIG5lZWQgdG8gY2hlY2sKKyMgaWYgb3VyIGVtdWxhdGlvbiwgYWZ0ZXIgcmUtZG9pbmcgdGhlIG9wZXJhdGlvbiwgZGVjaWRlZCB0aGF0CisjIG5vIHVuZGVyZmxvdyB3YXMgY2FsbGVkIGZvci4gV2UgZG8gdGhlc2UgY2hlY2tzIG9ubHkgaW4KKyMgZnVuZmxfe3VuZmwsaW5leH1fb24oKSBiZWNhdXNlIHcvIGJvdGggZXhjZXB0aW9ucyBkaXNhYmxlZCwgdGhpcworIyBzcGVjaWFsIGNhc2Ugd2lsbCBzaW1wbHkgZXhpdCBncmFjZWZ1bGx5IHdpdGggdGhlIGNvcnJlY3QgcmVzdWx0LgorCisjIHRoZSBleGNlcHRpb25hbCBwb3NzaWJpbGl0aWVzIHdlIGhhdmUgbGVmdCBvdXJzZWx2ZXMgd2l0aCBhcmUgT05MWSBvdmVyZmxvdworIyBhbmQgaW5leGFjdC4gYW5kLCB0aGUgaW5leGFjdCBpcyBzdWNoIHRoYXQgb3ZlcmZsb3cgb2NjdXJyZWQgYW5kIHdhcyBkaXNhYmxlZAorIyBidXQgaW5leGFjdCB3YXMgZW5hYmxlZC4KKwlidHN0CQkmdW5mbF9iaXQsRlBDUl9FTkFCTEUoJWE2KQorCWJuZS5iCQlmdW5mbF91bmZsX29uCisKK2Z1bmZsX2Noa2luZXg6CisJYnRzdAkJJmluZXgyX2JpdCxGUENSX0VOQUJMRSglYTYpCisJYm5lLmIJCWZ1bmZsX2luZXhfb24KKworZnVuZmxfZXhpdDoKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgorIyQjCWFkZC5sCQkmMjQsJXNwCisJYnJhLmwJCV9mcHNwX2RvbmUKKworIyBvdmVyZmxvdyBpcyBlbmFibGVkIEFORCBvdmVyZmxvdywgb2YgY291cnNlLCBvY2N1cnJlZC4gc28sIHdlIGhhdmUgdGhlIEVYT1AKKyMgaW4gZnAxIChkb24ndCBmb3JnZXQgdG8gc2F2ZSBmcDApLiB3aGF0IHRvIGRvIG5vdz8KKyMgd2VsbCwgd2Ugc2ltcGx5IGhhdmUgdG8gZ2V0IHRvIGdvIHRvIF9yZWFsX3VuZmwoKSEKK2Z1bmZsX3VuZmxfb246CisKKyMgVGhlIGAwNjAgRlBVIG11bHRpcGxpZXIgaGFyZHdhcmUgaXMgc3VjaCB0aGF0IGlmIHRoZSByZXN1bHQgb2YgYQorIyBtdWx0aXBseSBvcGVyYXRpb24gaXMgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIG5vcm1hbGl6ZWQgbnVtYmVyCisjICgweDAwMDAwMDAwXzgwMDAwMDAwXzAwMDAwMDAwKSwgdGhlbiB0aGUgbWFjaGluZSB3aWxsIHRha2UgYW4KKyMgdW5kZXJmbG93IGV4Y2VwdGlvbi4gU2luY2UgdGhpcyBpcyBpbmNvcnJlY3QsIHdlIGNoZWNrIGhlcmUgdG8gc2VlCisjIGlmIG91ciBlbXVsYXRpb24sIGFmdGVyIHJlLWRvaW5nIHRoZSBvcGVyYXRpb24sIGRlY2lkZWQgdGhhdAorIyBubyB1bmRlcmZsb3cgd2FzIGNhbGxlZCBmb3IuCisJYnRzdAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikKKwliZXEudwkJZnVuZmxfY2hraW5leAorCitmdW5mbF91bmZsX29uMjoKKwlmbW92bS54CQkmMHg0MCxGUF9TUkMoJWE2KQkjIHNhdmUgRVhPUCAoZnAxKSB0byBzdGFjaworCisJbW92LncJCSYweGUwMDMsMitGUF9TUkMoJWE2KQkjIHNhdmUgZXhjIHN0YXR1cworCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyBkbyB0aGlzIGFmdGVyIGZtb3ZtLG90aGVyIGY8b3A+cyEKKworCXVubGsJCSVhNgorCisJYnJhLmwJCV9yZWFsX3VuZmwKKworIyB1bmRlZmxvdyBvY2N1cnJlZCBidXQgaXMgZGlzYWJsZWQuIG1lYW53aGlsZSwgaW5leGFjdCBpcyBlbmFibGVkLiB0aGVyZWZvcmUsCisjIHdlIG11c3QganVtcCB0byByZWFsX2luZXgoKS4KK2Z1bmZsX2luZXhfb246CisKKyMgVGhlIGAwNjAgRlBVIG11bHRpcGxpZXIgaGFyZHdhcmUgaXMgc3VjaCB0aGF0IGlmIHRoZSByZXN1bHQgb2YgYQorIyBtdWx0aXBseSBvcGVyYXRpb24gaXMgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIG5vcm1hbGl6ZWQgbnVtYmVyCisjICgweDAwMDAwMDAwXzgwMDAwMDAwXzAwMDAwMDAwKSwgdGhlbiB0aGUgbWFjaGluZSB3aWxsIHRha2UgYW4KKyMgdW5kZXJmbG93IGV4Y2VwdGlvbi4KKyMgQnV0LCB3aGV0aGVyIGJvZ3VzIG9yIG5vdCwgaWYgaW5leGFjdCBpcyBlbmFibGVkIEFORCBpdCBvY2N1cnJlZCwKKyMgdGhlbiB3ZSBoYXZlIHRvIGJyYW5jaCB0byByZWFsX2luZXguCisKKwlidHN0CQkmaW5leDJfYml0LEZQU1JfRVhDRVBUKCVhNikKKwliZXEudwkJZnVuZmxfZXhpdAorCitmdW5mbF9pbmV4X29uMjoKKworCWZtb3ZtLngJCSYweDQwLEZQX1NSQyglYTYpCSMgc2F2ZSBFWE9QIHRvIHN0YWNrCisKKwltb3YuYgkJJjB4YzQsMStFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4YzQKKwltb3YudwkJJjB4ZTAwMSwyK0ZQX1NSQyglYTYpCSMgc2F2ZSBleGMgc3RhdHVzCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIGRvIHRoaXMgYWZ0ZXIgZm1vdm0sb3RoZXIgZjxvcD5zIQorCisJdW5sawkJJWE2CisKKwlicmEubAkJX3JlYWxfaW5leAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZnVuZmxfb3V0OgorCisKKyMkIwltb3YubAkJRlBfU1JDX0VYKCVhNiksVFJBUF9TUkNPUF9FWCglYTYpCisjJCMJbW92LmwJCUZQX1NSQ19ISSglYTYpLFRSQVBfU1JDT1BfSEkoJWE2KQorIyQjCW1vdi5sCQlGUF9TUkNfTE8oJWE2KSxUUkFQX1NSQ09QX0xPKCVhNikKKworIyB0aGUgc3JjIG9wZXJhbmQgaXMgZGVmaW5pdGVseSBhIE5PUk0oISksIHNvIHRhZyBpdCBhcyBzdWNoCisJbW92LmIJCSZOT1JNLFNUQUcoJWE2KQkJIyBzZXQgc3JjIG9wdHlwZSB0YWcKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgcHJlYy9tb2RlCisKKwlhbmQubAkJJjB4ZmZmZjAwZmYsVVNFUl9GUFNSKCVhNikgIyB6ZXJvIGFsbCBidXQgYWNjdXJlZCBmaWVsZAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gY3VycmVudCBjb250cm9sIHJlZ3MKKwlmbW92LmwJCSYweDAsJWZwc3IKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIHNyYyBvcGVyYW5kCisKKwlic3IubAkJZm91dAorCisJYnRzdAkJJnVuZmxfYml0LEZQQ1JfRU5BQkxFKCVhNikKKwlibmUudwkJZnVuZmxfdW5mbF9vbjIKKworCWJ0c3QJCSZpbmV4Ml9iaXQsRlBDUl9FTkFCTEUoJWE2KQorCWJuZS53CQlmdW5mbF9pbmV4X29uMgorCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYKKyMkIwlhZGQubAkJJjI0LCVzcAorCisJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBvbj8KKwliZXEubAkJX2Zwc3BfZG9uZQkJIyBubworCisJZm1vdi5sCQklZnBpYXIsMHg4KCVzcCkJCSMgIkN1cnJlbnQgUEMiIGlzIGluIEZQSUFSCisJbW92LncJCSYweDIwMjQsMHg2KCVzcCkJIyBzdGsgZm10ID0gMHgyOyB2b2ZmID0gMHgwMjQKKwlicmEubAkJX3JlYWxfdHJhY2UKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfZnBzcF91bnN1cHAoKTogMDYwRlBTUCBlbnRyeSBwb2ludCBmb3IgRlAgIlVuaW1wbGVtZW50ZWQJIworIwkJICAgICAgICBEYXRhIFR5cGUiIGV4Y2VwdGlvbi4JCQkJIworIwkJCQkJCQkJCSMKKyMJVGhpcyBoYW5kbGVyIHNob3VsZCBiZSB0aGUgZmlyc3QgY29kZSBleGVjdXRlZCB1cG9uIHRha2luZyB0aGUJIworIwlGUCBVbmltcGxlbWVudGVkIERhdGEgVHlwZSBleGNlcHRpb24gaW4gYW4gb3BlcmF0aW5nIHN5c3RlbS4JIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2ltZW1fcmVhZF97d29yZCxsb25nfSgpIC0gcmVhZCBpbnN0cnVjdGlvbiB3b3JkL2xvbmd3b3JkCSMKKyMJZml4X3NrZXdlZF9vcHMoKSAtIGFkanVzdCBzcmMgb3BlcmFuZCBpbiBmc2F2ZSBmcmFtZQkJIworIwlzZXRfdGFnX3goKSAtIGRldGVybWluZSBvcHR5cGUgb2Ygc3JjL2RzdCBvcGVyYW5kcwkJIworIwlzdG9yZV9mcHJlZygpIC0gc3RvcmUgb3BjbGFzcyAwIG9yIDIgcmVzdWx0IHRvIEZQIHJlZ2ZpbGUJIworIwl1bm5vcm1fZml4KCkgLSBjaGFuZ2UgVU5OT1JNIG9wZXJhbmRzIHRvIE5PUk0gb3IgWkVSTwkJIworIwlsb2FkX2ZwbjIoKSAtIGxvYWQgZHN0IG9wZXJhbmQgZnJvbSBGUCByZWdmaWxlCQkJIworIwlsb2FkX2ZwbjEoKSAtIGxvYWQgc3JjIG9wZXJhbmQgZnJvbSBGUCByZWdmaWxlCQkJIworIwlmb3V0KCkgLSBlbXVsYXRlIGFuIG9wY2xhc3MgMyBpbnN0cnVjdGlvbgkJCSMKKyMJdGJsX3Vuc3VwcCAtIGFkZCBvZiB0YWJsZSBvZiBlbXVsYXRpb24gcm91dGluZXMgZm9yIG9wY2xhc3MgMCwyCSMKKyMJX3JlYWxfaW5leCgpIC0gImNhbGxvdXQiIHRvIG9wZXJhdGluZyBzeXN0ZW0gaW5leGFjdCBoYW5kbGVyCSMKKyMJX2Zwc3BfZG9uZSgpIC0gImNhbGxvdXQiIGZvciBleGl0OyB3b3JrIGFsbCBkb25lCQkjCisjCV9yZWFsX3RyYWNlKCkgLSAiY2FsbG91dCIgZm9yIFRyYWNlIGVuYWJsZWQgZXhjZXB0aW9uCQkjCisjCWZ1bmltcF9za2V3KCkgLSBhZGp1c3QgZnNhdmUgc3JjIG9wcyB0byAiaW5jb3JyZWN0IiB2YWx1ZQkjCisjCV9yZWFsX3NuYW4oKSAtICJjYWxsb3V0IiBmb3IgU05BTiBleGNlcHRpb24JCQkjCisjCV9yZWFsX29wZXJyKCkgLSAiY2FsbG91dCIgZm9yIE9QRVJSIGV4Y2VwdGlvbgkJCSMKKyMJX3JlYWxfb3ZmbCgpIC0gImNhbGxvdXQiIGZvciBPVkZMIGV4Y2VwdGlvbgkJCSMKKyMJX3JlYWxfdW5mbCgpIC0gImNhbGxvdXQiIGZvciBVTkZMIGV4Y2VwdGlvbgkJCSMKKyMJZ2V0X3BhY2tlZCgpIC0gZmV0Y2ggcGFja2VkIG9wZXJhbmQgZnJvbSBtZW1vcnkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgdGhlICJVbmltcCBEYXRhIFR5cGUiIHN0ayBmcmFtZQkjCisjCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBzc3JjIG9wIChmb3IgVU5OT1JNL0RFTk9STSkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSWYgSW5leGFjdCBleGNlcHRpb24gKG9wY2xhc3MgMyk6CQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIGNoYW5nZWQgdG8gYW4gSW5leGFjdCBleGNlcHRpb24gc3RrIGZyYW1lCSMKKyMJSWYgU05BTiBleGNlcHRpb24gKG9wY2xhc3MgMyk6CQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBpcyBjaGFuZ2VkIHRvIGFuIFNOQU4gZXhjZXB0aW9uIHN0ayBmcmFtZQkjCisjCUlmIE9QRVJSIGV4Y2VwdGlvbiAob3BjbGFzcyAzKToJCQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIGNoYW5nZWQgdG8gYW4gT1BFUlIgZXhjZXB0aW9uIHN0ayBmcmFtZQkjCisjCUlmIE9WRkwgZXhjZXB0aW9uIChvcGNsYXNzIDMpOgkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhbiBPVkZMIGV4Y2VwdGlvbiBzdGsgZnJhbWUJIworIwlJZiBVTkZMIGV4Y2VwdGlvbiAob3BjbGFzcyAzKToJCQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIGNoYW5nZWQgdG8gYW4gVU5GTCBleGNlcHRpb24gc3RhY2sgZnJhbWUJIworIwlJZiBUcmFjZSBleGNlcHRpb24gZW5hYmxlZDoJCQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIGNoYW5nZWQgdG8gYSBUcmFjZSBleGNlcHRpb24gc3RhY2sgZnJhbWUJIworIwlFbHNlOiAobm9ybWFsIGNhc2UpCQkJCQkJIworIwktIENvcnJlY3QgcmVzdWx0IGhhcyBiZWVuIHN0b3JlZCBhcyBhcHByb3ByaWF0ZQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVR3byBtYWluIGluc3RydWN0aW9uIHR5cGVzIGNhbiBlbnRlciBoZXJlOiAoMSkgREVOT1JNIG9yIFVOTk9STQkjCisjIHVuaW1wbGVtZW50ZWQgZGF0YSB0eXBlcy4gVGhlc2UgY2FuIGJlIGVpdGhlciBvcGNsYXNzIDAsMiBvciAzCSMKKyMgaW5zdHJ1Y3Rpb25zLCBhbmQgKDIpIFBBQ0tFRCB1bmltcGxlbWVudGVkIGRhdGEgZm9ybWF0IGluc3RydWN0aW9ucwkjCisjIGFsc28gb2Ygb3BjbGFzc2VzIDAsMiwgb3IgMy4JCQkJCQkjCisjCUZvciBVTk5PUk0vREVOT1JNIG9wY2xhc3MgMCBhbmQgMiwgdGhlIGhhbmRsZXIgZmV0Y2hlcyB0aGUgc3JjCSMKKyMgb3BlcmFuZCBmcm9tIHRoZSBmc2F2ZSBzdGF0ZSBmcmFtZSBhbmQgdGhlIGRzdCBvcGVyYW5kIChpZiBkeWFkaWMpCSMKKyMgZnJvbSB0aGUgRlAgcmVnaXN0ZXIgZmlsZS4gVGhlIGluc3RydWN0aW9uIGlzIHRoZW4gZW11bGF0ZWQgYnkJIworIyBjaG9vc2luZyBhbiBlbXVsYXRpb24gcm91dGluZSBmcm9tIGEgdGFibGUgb2Ygcm91dGluZXMgaW5kZXhlZCBieQkjCisjIGluc3RydWN0aW9uIHR5cGUuIE9uY2UgdGhlIGluc3RydWN0aW9uIGhhcyBiZWVuIGVtdWxhdGVkIGFuZCByZXN1bHQJIworIyBzYXZlZCwgdGhlbiB3ZSBjaGVjayB0byBzZWUgaWYgYW55IGVuYWJsZWQgZXhjZXB0aW9ucyByZXN1bHRlZCBmcm9tCSMKKyMgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLiBJZiBub25lLCB0aGVuIHdlIGV4aXQgdGhyb3VnaCB0aGUgImNhbGxvdXQiCSMKKyMgX2Zwc3BfZG9uZSgpLiBJZiB0aGVyZSBpcyBhbiBlbmFibGVkIEZQIGV4Y2VwdGlvbiwgdGhlbiB3ZSBpbnNlcnQJIworIyB0aGlzIGV4Y2VwdGlvbiBpbnRvIHRoZSBGUFUgaW4gdGhlIGZzYXZlIHN0YXRlIGZyYW1lIGFuZCB0aGVuIGV4aXQJIworIyB0aHJvdWdoIF9mcHNwX2RvbmUoKS4JCQkJCQkJIworIwlQQUNLRUQgb3BjbGFzcyAwIGFuZCAyIGlzIHNpbWlsYXIgaW4gaG93IHRoZSBpbnN0cnVjdGlvbiBpcwkjCisjIGVtdWxhdGVkIGFuZCBleGNlcHRpb25zIGhhbmRsZWQuIFRoZSBkaWZmZXJlbmNlcyBvY2N1ciBpbiBob3cgdGhlCSMKKyMgaGFuZGxlciBsb2FkcyB0aGUgcGFja2VkIG9wIChieSBjYWxsaW5nIGdldF9wYWNrZWQoKSByb3V0aW5lKSBhbmQJIworIyBieSB0aGUgZmFjdCB0aGF0IGEgVHJhY2UgZXhjZXB0aW9uIGNvdWxkIGJlIHBlbmRpbmcgZm9yIFBBQ0tFRCBvcHMuCSMKKyMgSWYgYSBUcmFjZSBleGNlcHRpb24gaXMgcGVuZGluZywgdGhlbiB0aGUgY3VycmVudCBleGNlcHRpb24gc3RhY2sJIworIyBmcmFtZSBpcyBjaGFuZ2VkIHRvIGEgVHJhY2UgZXhjZXB0aW9uIHN0YWNrIGZyYW1lIGFuZCBhbiBleGl0IGlzCSMKKyMgbWFkZSB0aHJvdWdoIF9yZWFsX3RyYWNlKCkuCQkJCQkJIworIwlGb3IgVU5OT1JNL0RFTk9STSBvcGNsYXNzIDMsIHRoZSBhY3R1YWwgbW92ZSBvdXQgdG8gbWVtb3J5IGlzCSMKKyMgcGVyZm9ybWVkIGJ5IGNhbGxpbmcgdGhlIHJvdXRpbmUgZm91dCgpLiBJZiBubyBleGNlcHRpb24gc2hvdWxkIG9jY3VyCSMKKyMgYXMgdGhlIHJlc3VsdCBvZiBlbXVsYXRpb24sIHRoZW4gYW4gZXhpdCBlaXRoZXIgb2NjdXJzIHRocm91Z2gJIworIyBfZnBzcF9kb25lKCkgb3IgdGhyb3VnaCBfcmVhbF90cmFjZSgpIGlmIGEgVHJhY2UgZXhjZXB0aW9uIGlzIHBlbmRpbmcJIworIyAoYSBUcmFjZSBzdGFjayBmcmFtZSBtdXN0IGJlIGNyZWF0ZWQgaGVyZSwgdG9vKS4gSWYgYW4gRlAgZXhjZXB0aW9uCSMKKyMgc2hvdWxkIG9jY3VyLCB0aGVuIHdlIG11c3QgY3JlYXRlIGFuIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSBvZiB0aGF0CSMKKyMgdHlwZSBhbmQganVtcCB0byBlaXRoZXIgX3JlYWxfc25hbigpLCBfcmVhbF9vcGVycigpLCBfcmVhbF9pbmV4KCksCSMKKyMgX3JlYWxfdW5mbCgpLCBvciBfcmVhbF9vdmZsKCkgYXMgYXBwcm9wcmlhdGUuIFBBQ0tFRCBvcGNsYXNzIDMJIworIyBlbXVsYXRpb24gaXMgcGVyZm9ybWVkIGluIGEgc2ltaWxhciBtYW5uZXIuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgKDEpIERFTk9STSBhbmQgVU5OT1JNICh1bmltcGxlbWVudGVkKSBkYXRhIHR5cGVzOgorIworIwkJCQlwb3N0LWluc3RydWN0aW9uCisjCQkJCSoqKioqKioqKioqKioqKioqCisjCQkJCSogICAgICBFQQkqCisjCSBwcmUtaW5zdHJ1Y3Rpb24JKgkJKgorIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkqIDB4MCAqICAweDBkYyAgKgkqIDB4MyAqICAweDBkYyAgKgorIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkqICAgICBOZXh0CSoJKiAgICAgTmV4dAkqCisjCSogICAgICBQQwkqCSogICAgICBQQwkqCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSogICAgICBTUgkqCSogICAgICBTUgkqCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCisjICgyKSBQQUNLRUQgZm9ybWF0ICh1bnN1cHBvcnRlZCkgb3BjbGFzc2VzIHR3byBhbmQgdGhyZWU6CisjCSoqKioqKioqKioqKioqKioqCisjCSogICAgICBFQQkqCisjCSoJCSoKKyMJKioqKioqKioqKioqKioqKioKKyMJKiAweDIgKiAgMHgwZGMJKgorIwkqKioqKioqKioqKioqKioqKgorIwkqICAgICBOZXh0CSoKKyMJKiAgICAgIFBDCSoKKyMJKioqKioqKioqKioqKioqKioKKyMJKiAgICAgIFNSCSoKKyMJKioqKioqKioqKioqKioqKioKKyMKKwlnbG9iYWwJCV9mcHNwX3Vuc3VwcAorX2Zwc3BfdW5zdXBwOgorCisJbGluay53CQklYTYsJi1MT0NBTF9TSVpFCSMgaW5pdCBzdGFjayBmcmFtZQorCisJZnNhdmUJCUZQX1NSQyglYTYpCQkjIHNhdmUgZnAgc3RhdGUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUFJFR1MoJWE2KQkjIHNhdmUgZnAwLWZwMSBvbiBzdGFjaworCisJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQkjIHVzZXIgb3Igc3VwZXJ2aXNvciBtb2RlPworCWJuZS5iCQlmdV9zCitmdV91OgorCW1vdi5sCQkldXNwLCVhMAkJIyBmZXRjaCB1c2VyIHN0YWNrIHBvaW50ZXIKKwltb3YubAkJJWEwLEVYQ19BNyglYTYpCQkjIHNhdmUgb24gc3RhY2sKKwlicmEuYgkJZnVfY29udAorIyBpZiB0aGUgZXhjZXB0aW9uIGlzIGFuIG9wY2xhc3MgemVybyBvciB0d28gdW5pbXBsZW1lbnRlZCBkYXRhIHR5cGUKKyMgZXhjZXB0aW9uLCB0aGVuIHRoZSBhNycgY2FsY3VsYXRlZCBoZXJlIGlzIHdyb25nIHNpbmNlIGl0IGRvZXNuJ3QKKyMgc3RhY2sgYW4gZWEuIGhvd2V2ZXIsIHdlIGRvbid0IG5lZWQgYW4gYTcnIGZvciB0aGlzIGNhc2UgYW55d2F5cy4KK2Z1X3M6CisJbGVhCQkweDQrRVhDX0VBKCVhNiksJWEwCSMgbG9hZCBvbGQgYTcnCisJbW92LmwJCSVhMCxFWENfQTcoJWE2KQkJIyBzYXZlIG9uIHN0YWNrCisKK2Z1X2NvbnQ6CisKKyMgdGhlIEZQSUFSIGhvbGRzIHRoZSAiY3VycmVudCBQQyIgb2YgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uCisjIHRoZSBGUElBUiBzaG91bGQgYmUgc2V0IGNvcnJlY3RseSBmb3IgQUxMIGV4Y2VwdGlvbnMgcGFzc2luZyB0aHJvdWdoCisjIHRoaXMgcG9pbnQuCisJbW92LmwJCVVTRVJfRlBJQVIoJWE2KSxFWENfRVhUV1BUUiglYTYpCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIHRoZSBpbnN0cnVjdGlvbiB3b3JkcworCW1vdi5sCQklZDAsRVhDX09QV09SRCglYTYpCSMgc3RvcmUgT1BXT1JEIGFuZCBFWFRXT1JECisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWNsci5iCQlTUENPTkRfRkxHKCVhNikJCSMgY2xlYXIgc3BlY2lhbCBjb25kaXRpb24gZmxhZworCisjIFNlcGFyYXRlIG9wY2xhc3MgdGhyZWUgKGZwbi10by1tZW0pIG9wcyBzaW5jZSB0aGV5IGhhdmUgYSBkaWZmZXJlbnQKKyMgc3RhY2sgZnJhbWUgYW5kIHByb3RvY29sLgorCWJ0c3QJCSYweDUsRVhDX0NNRFJFRyglYTYpCSMgaXMgaXQgYW4gZm1vdmUgb3V0PworCWJuZS53CQlmdV9vdXQJCQkjIHllcworCisjIFNlcGFyYXRlIHBhY2tlZCBvcGNsYXNzIHR3byBpbnN0cnVjdGlvbnMuCisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjA6JjZ9LCVkMAorCWNtcGkuYgkJJWQwLCYweDEzCisJYmVxLncJCWZ1X2luX3BhY2sKKworCisjIEknbSBub3Qgc3VyZSBhdCB0aGlzIHBvaW50IHdoYXQgRlBTUiBiaXRzIGFyZSB2YWxpZCBmb3IgdGhpcyBpbnN0cnVjdGlvbi4KKyMgc28sIHNpbmNlIHRoZSBlbXVsYXRpb24gcm91dGluZXMgcmUtY3JlYXRlIHRoZW0gYW55d2F5cywgemVybyBleGNlcHRpb24gZmllbGQKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpICMgemVybyBleGNlcHRpb24gZmllbGQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIGN1cnJlbnQgY29udHJvbCByZWdzCisJZm1vdi5sCQkmMHgwLCVmcHNyCisKKyMgT3BjbGFzcyB0d28gdy8gbWVtb3J5LXRvLWZwbiBvcGVyYXRpb24gd2lsbCBoYXZlIGFuIGluY29ycmVjdCBleHRlbmRlZAorIyBwcmVjaXNpb24gZm9ybWF0IGlmIHRoZSBzcmMgZm9ybWF0IHdhcyBzaW5nbGUgb3IgZG91YmxlIGFuZCB0aGUKKyMgc291cmNlIGRhdGEgdHlwZSB3YXMgYW4gSU5GLCBOQU4sIERFTk9STSwgb3IgVU5OT1JNCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gaW5wdXQKKwlic3IubAkJZml4X3NrZXdlZF9vcHMKKworIyB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdGhlIHNyYyBvcGVyYW5kIG9yIHRoZSBkc3Qgb3BlcmFuZCAob3IgYm90aCkgaXMgdGhlCisjIFVOTk9STSBvciBERU5PUk0uIGNhbGwgdGhlIGZ1bmN0aW9uIHRoYXQgdGFncyB0aGUgb3BlcmFuZCB0eXBlLiBpZiB0aGUKKyMgaW5wdXQgaXMgYW4gVU5OT1JNLCB0aGVuIGNvbnZlcnQgaXQgdG8gYSBOT1JNLCBERU5PUk0sIG9yIFpFUk8uCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHNyYyBvcAorCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKKwljbXBpLmIJCSVkMCwmVU5OT1JNCQkjIGlzIG9wZXJhbmQgYW4gVU5OT1JNPworCWJuZS5iCQlmdV9vcDIJCQkjIG5vCisJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBjb252ZXJ0IHRvIE5PUk0sREVOT1JNLG9yIFpFUk8KKworZnVfb3AyOgorCW1vdi5iCQklZDAsU1RBRyglYTYpCQkjIHNhdmUgc3JjIG9wdHlwZSB0YWcKKworCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAgIyBkeWFkaWM7IGxvYWQgZHN0IHJlZworCisjIGJpdCBmaXZlIG9mIHRoZSBmcCBleHRlbnNpb24gd29yZCBzZXBhcmF0ZXMgdGhlIG1vbmFkaWMgYW5kIGR5YWRpYyBvcGVyYXRpb25zCisjIGF0IHRoaXMgcG9pbnQKKwlidHN0CQkmMHg1LDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3BlcmF0aW9uIG1vbmFkaWMgb3IgZHlhZGljPworCWJlcS5iCQlmdV9leHRyYWN0CQkjIG1vbmFkaWMKKwljbXBpLmIJCTErRVhDX0NNRFJFRyglYTYpLCYweDNhCSMgaXMgb3BlcmF0aW9uIGFuIGZ0c3Q/CisJYmVxLmIJCWZ1X2V4dHJhY3QJCSMgeWVzLCBzbyBpdCdzIG1vbmFkaWMsIHRvbworCisJYnNyLmwJCWxvYWRfZnBuMgkJIyBsb2FkIGRzdCBpbnRvIEZQX0RTVAorCisJbGVhCQlGUF9EU1QoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIGRzdCBvcAorCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKKwljbXBpLmIJCSVkMCwmVU5OT1JNCQkjIGlzIG9wZXJhbmQgYW4gVU5OT1JNPworCWJuZS5iCQlmdV9vcDJfZG9uZQkJIyBubworCWJzci5sCQl1bm5vcm1fZml4CQkjIHllczsgY29udmVydCB0byBOT1JNLERFTk9STSxvciBaRVJPCitmdV9vcDJfZG9uZToKKwltb3YuYgkJJWQwLERUQUcoJWE2KQkJIyBzYXZlIGRzdCBvcHR5cGUgdGFnCisKK2Z1X2V4dHJhY3Q6CisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBmZXRjaCBybmQgbW9kZS9wcmVjCisKKwliZmV4dHUJCTErRVhDX0NNRFJFRyglYTYpeyYxOiY3fSwlZDEgIyBleHRyYWN0IGV4dGVuc2lvbgorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlsZWEJCUZQX0RTVCglYTYpLCVhMQorCisJbW92LmwJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS5sKjQpLCVkMSAjIGZldGNoIHJvdXRpbmUgYWRkcgorCWpzcgkJKHRibF91bnN1cHAubCwlcGMsJWQxLmwqMSkKKworIworIyBFeGNlcHRpb25zIGluIG9yZGVyIG9mIHByZWNlZGVuY2U6CisjCUJTVU4JOiBub25lCisjCVNOQU4JOiBhbGwgZHlhZGljIG9wcworIwlPUEVSUgk6IGZzcXJ0KC1OT1JNKQorIwlPVkZMCTogYWxsIGV4Y2VwdCBmdHN0LGZjbXAKKyMJVU5GTAk6IGFsbCBleGNlcHQgZnRzdCxmY21wCisjCURaCTogZmRpdgorIwlJTkVYMgk6IGFsbCBleGNlcHQgZnRzdCxmY21wCisjCUlORVgxCTogbm9uZSAocGFja2VkIGRvZXNuJ3QgZ28gdGhyb3VnaCBoZXJlKQorIworCisjIHdlIGRldGVybWluZSB0aGUgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24oaWYgYW55KSBzZXQgYnkgdGhlCisjIGVtdWxhdGlvbiByb3V0aW5lIHRoYXQgaGFzIGFsc28gYmVlbiBlbmFibGVkIGJ5IHRoZSB1c2VyLgorCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMAkjIGZldGNoIGV4Y2VwdGlvbnMgc2V0CisJYm5lLmIJCWZ1X2luX2VuYQkJIyBzb21lIGFyZSBlbmFibGVkCisKK2Z1X2luX2NvbnQ6CisjIGZjbXAgYW5kIGZ0c3QgZG8gbm90IHN0b3JlIGFueSByZXN1bHQuCisJbW92LmIJCTErRVhDX0NNRFJFRyglYTYpLCVkMAkjIGZldGNoIGV4dGVuc2lvbgorCWFuZGkuYgkJJjB4MzgsJWQwCQkjIGV4dHJhY3QgYml0cyAzLTUKKwljbXBpLmIJCSVkMCwmMHgzOAkJIyBpcyBpbnN0ciBmY21wIG9yIGZ0c3Q/CisJYmVxLmIJCWZ1X2luX2V4aXQJCSMgeWVzCisKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwICMgZHlhZGljOyBsb2FkIGRzdCByZWcKKwlic3IubAkJc3RvcmVfZnByZWcJCSMgc3RvcmUgdGhlIHJlc3VsdAorCitmdV9pbl9leGl0OgorCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYKKworCWJyYS5sCQlfZnBzcF9kb25lCisKK2Z1X2luX2VuYToKKwlhbmQuYgkJRlBTUl9FWENFUFQoJWE2KSwlZDAJIyBrZWVwIG9ubHkgb25lcyBlbmFibGVkCisJYmZmZm8JCSVkMHsmMjQ6Jjh9LCVkMAkJIyBmaW5kIGhpZ2hlc3QgcHJpb3JpdHkgZXhjZXB0aW9uCisJYm5lLmIJCWZ1X2luX2V4YwkJIyB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgc2V0CisKKyMKKyMgTm8gZXhjZXB0aW9ucyBvY2N1cnJlZCB0aGF0IHdlcmUgYWxzbyBlbmFibGVkLiBOb3c6CisjCisjCWlmIChPVkZMICYmIG92ZmxfZGlzYWJsZWQgJiYgaW5leGFjdF9lbmFibGVkKSB7CisjCSAgICBicmFuY2ggdG8gX3JlYWxfaW5leCgpIChldmVuIGlmIHRoZSByZXN1bHQgd2FzIGV4YWN0ISk7CisjCX0gZWxzZSB7CisjCSAgICBzYXZlIHRoZSByZXN1bHQgaW4gdGhlIHByb3BlciBmcCByZWcgKHVubGVzcyB0aGUgb3AgaXMgZmNtcCBvciBmdHN0KTsKKyMJICAgIHJldHVybjsKKyMJfQorIworCWJ0c3QJCSZvdmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgd2FzIG92ZXJmbG93IHNldD8KKwliZXEuYgkJZnVfaW5fY29udAkJIyBubworCitmdV9pbl9vdmZsY2hrOgorCWJ0c3QJCSZpbmV4Ml9iaXQsRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBpbmV4YWN0IGVuYWJsZWQ/CisJYmVxLmIJCWZ1X2luX2NvbnQJCSMgbm8KKwlicmEudwkJZnVfaW5fZXhjX292ZmwJCSMgZ28gaW5zZXJ0IG92ZXJmbG93IGZyYW1lCisKKyMKKyMgQW4gZXhjZXB0aW9uIG9jY3VycmVkIGFuZCB0aGF0IGV4Y2VwdGlvbiB3YXMgZW5hYmxlZDoKKyMKKyMJc2hpZnQgZW5hYmxlZCBleGNlcHRpb24gZmllbGQgaW50byBsbyBieXRlIG9mIGQwOworIwlpZiAoKChJTkVYMiB8fCBJTkVYMSkgJiYgaW5leF9lbmFibGVkICYmIE9WRkwgJiYgb3ZmbF9kaXNhYmxlZCkgfHwKKyMJICAgICgoSU5FWDIgfHwgSU5FWDEpICYmIGluZXhfZW5hYmxlZCAmJiBVTkZMICYmIHVuZmxfZGlzYWJsZWQpKSB7CisjCQkvKgorIwkJICogdGhpcyBpcyB0aGUgY2FzZSB3aGVyZSB3ZSBtdXN0IGNhbGwgX3JlYWxfaW5leCgpIG5vdyBvciBlbHNlCisjCQkgKiB0aGVyZSB3aWxsIGJlIG5vIG90aGVyIHdheSB0byBwYXNzIGl0IHRoZSBleGNlcHRpb25hbCBvcGVyYW5kCisjCQkgKi8KKyMJCWNhbGwgX3JlYWxfaW5leCgpOworIwl9IGVsc2UgeworIwkJcmVzdG9yZSBleGMgc3RhdGUgKFNOQU58fE9QRVJSfHxPVkZMfHxVTkZMfHxEWnx8SU5FWCkgaW50byB0aGUgRlBVOworIwl9CisjCitmdV9pbl9leGM6CisJc3ViaS5sCQkmMjQsJWQwCQkJIyBmaXggb2Zmc2V0IHRvIGJlIDAtOAorCWNtcGkuYgkJJWQwLCYweDYJCSMgaXMgZXhjZXB0aW9uIElORVg/ICg2KQorCWJuZS5iCQlmdV9pbl9leGNfZXhpdAkJIyBubworCisjIHRoZSBlbmFibGVkIGV4Y2VwdGlvbiB3YXMgaW5leGFjdAorCWJ0c3QJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgZGlkIGRpc2FibGVkIHVuZGVyZmxvdyBvY2N1cj8KKwlibmUudwkJZnVfaW5fZXhjX3VuZmwJCSMgeWVzCisJYnRzdAkJJm92ZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBkaWQgZGlzYWJsZWQgb3ZlcmZsb3cgb2NjdXI/CisJYm5lLncJCWZ1X2luX2V4Y19vdmZsCQkjIHllcworCisjIGhlcmUsIHdlIGluc2VydCB0aGUgY29ycmVjdCBmc2F2ZSBzdGF0dXMgdmFsdWUgaW50byB0aGUgZnNhdmUgZnJhbWUgZm9yIHRoZQorIyBjb3JyZXNwb25kaW5nIGV4Y2VwdGlvbi4gdGhlIG9wZXJhbmQgaW4gdGhlIGZzYXZlIGZyYW1lIHNob3VsZCBiZSB0aGUgb3JpZ2luYWwKKyMgc3JjIG9wZXJhbmQuCitmdV9pbl9leGNfZXhpdDoKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIGQwCisJYnNyLmwJCWZ1bmltcF9za2V3CQkjIHNrZXcgc2dsIG9yIGRibCBpbnB1dHMKKwltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIGQwCisKKwltb3YudwkJKHRibF9leGNlcHQuYiwlcGMsJWQwLncqMiksMitGUF9TUkMoJWE2KSAjIGNyZWF0ZSBleGMgc3RhdHVzCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIHJlc3RvcmUgc3JjIG9wCisKKwl1bmxrCQklYTYKKworCWJyYS5sCQlfZnBzcF9kb25lCisKK3RibF9leGNlcHQ6CisJc2hvcnQJCTB4ZTAwMCwweGUwMDYsMHhlMDA0LDB4ZTAwNQorCXNob3J0CQkweGUwMDMsMHhlMDAyLDB4ZTAwMSwweGUwMDEKKworZnVfaW5fZXhjX3VuZmw6CisJbW92LncJCSYweDQsJWQwCisJYnJhLmIJCWZ1X2luX2V4Y19leGl0CitmdV9pbl9leGNfb3ZmbDoKKwltb3YudwkJJjB4MDMsJWQwCisJYnJhLmIJCWZ1X2luX2V4Y19leGl0CisKKyMgSWYgdGhlIGlucHV0IG9wZXJhbmQgdG8gdGhpcyBvcGVyYXRpb24gd2FzIG9wY2xhc3MgdHdvIGFuZCBhIHNpbmdsZQorIyBvciBkb3VibGUgcHJlY2lzaW9uIGRlbm9ybSwgaW5mLCBvciBuYW4sIHRoZSBvcGVyYW5kIG5lZWRzIHRvIGJlCisjICJjb3JyZWN0ZWQiIGluIG9yZGVyIHRvIGhhdmUgdGhlIHByb3BlciBlcXVpdmFsZW50IGV4dGVuZGVkIHByZWNpc2lvbgorIyBudW1iZXIuCisJZ2xvYmFsCQlmaXhfc2tld2VkX29wcworZml4X3NrZXdlZF9vcHM6CisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjA6JjZ9LCVkMCAjIGV4dHJhY3Qgb3BjbGFzcyxzcmMgZm10CisJY21waS5iCQklZDAsJjB4MTEJCSMgaXMgY2xhc3MgPSAyICYgZm10ID0gc2dsPworCWJlcS5iCQlmc29fc2dsCQkJIyB5ZXMKKwljbXBpLmIJCSVkMCwmMHgxNQkJIyBpcyBjbGFzcyA9IDIgJiBmbXQgPSBkYmw/CisJYmVxLmIJCWZzb19kYmwJCQkjIHllcworCXJ0cwkJCQkJIyBubworCitmc29fc2dsOgorCW1vdi53CQlMT0NBTF9FWCglYTApLCVkMAkjIGZldGNoIHNyYyBleHBvbmVudAorCWFuZGkudwkJJjB4N2ZmZiwlZDAJCSMgc3RyaXAgc2lnbgorCWNtcGkudwkJJWQwLCYweDNmODAJCSMgaXMgfGV4cHwgPT0gJDNmODA/CisJYmVxLmIJCWZzb19zZ2xfZG5ybV96ZXJvCSMgeWVzCisJY21waS53CQklZDAsJjB4NDA3ZgkJIyBubzsgaXMgfGV4cHwgPT0gJDQwN2Y/CisJYmVxLmIJCWZzb19pbmZuYW4JCSMgeWVzCisJcnRzCQkJCQkjIG5vCisKK2Zzb19zZ2xfZG5ybV96ZXJvOgorCWFuZGkubAkJJjB4N2ZmZmZmZmYsTE9DQUxfSEkoJWEwKSAjIGNsZWFyIGotYml0CisJYmVxLmIJCWZzb196ZXJvCQkjIGl0J3MgYSBza2V3ZWQgemVybworZnNvX3NnbF9kbnJtOgorIyBoZXJlLCB3ZSBjb3VudCBvbiBub3JtIG5vdCB0byBhbHRlciBhMC4uLgorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgbWFudGlzc2EKKwluZWcudwkJJWQwCQkJIyAtc2hmdCBhbXQKKwlhZGRpLncJCSYweDNmODEsJWQwCQkjIGFkanVzdCBuZXcgZXhwb25lbnQKKwlhbmRpLncJCSYweDgwMDAsTE9DQUxfRVgoJWEwKQkjIGNsZWFyIG9sZCBleHBvbmVudAorCW9yLncJCSVkMCxMT0NBTF9FWCglYTApCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCXJ0cworCitmc29femVybzoKKwlhbmRpLncJCSYweDgwMDAsTE9DQUxfRVgoJWEwKQkjIGNsZWFyIGJvZ3VzIGV4cG9uZW50CisJcnRzCisKK2Zzb19pbmZuYW46CisJYW5kaS5iCQkmMHg3ZixMT0NBTF9ISSglYTApCSMgY2xlYXIgai1iaXQKKwlvcmkudwkJJjB4N2ZmZixMT0NBTF9FWCglYTApCSMgbWFrZSBleHBvbmVudCA9ICQ3ZmZmCisJcnRzCisKK2Zzb19kYmw6CisJbW92LncJCUxPQ0FMX0VYKCVhMCksJWQwCSMgZmV0Y2ggc3JjIGV4cG9uZW50CisJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBzdHJpcCBzaWduCisJY21waS53CQklZDAsJjB4M2MwMAkJIyBpcyB8ZXhwfCA9PSAkM2MwMD8KKwliZXEuYgkJZnNvX2RibF9kbnJtX3plcm8JIyB5ZXMKKwljbXBpLncJCSVkMCwmMHg0M2ZmCQkjIG5vOyBpcyB8ZXhwfCA9PSAkNDNmZj8KKwliZXEuYgkJZnNvX2luZm5hbgkJIyB5ZXMKKwlydHMJCQkJCSMgbm8KKworZnNvX2RibF9kbnJtX3plcm86CisJYW5kaS5sCQkmMHg3ZmZmZmZmZixMT0NBTF9ISSglYTApICMgY2xlYXIgai1iaXQKKwlibmUuYgkJZnNvX2RibF9kbnJtCQkjIGl0J3MgYSBza2V3ZWQgZGVub3JtCisJdHN0LmwJCUxPQ0FMX0xPKCVhMCkJCSMgaXMgaXQgYSB6ZXJvPworCWJlcS5iCQlmc29femVybwkJIyB5ZXMKK2Zzb19kYmxfZG5ybToKKyMgaGVyZSwgd2UgY291bnQgb24gbm9ybSBub3QgdG8gYWx0ZXIgYTAuLi4KKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIG1hbnRpc3NhCisJbmVnLncJCSVkMAkJCSMgLXNoZnQgYW10CisJYWRkaS53CQkmMHgzYzAxLCVkMAkJIyBhZGp1c3QgbmV3IGV4cG9uZW50CisJYW5kaS53CQkmMHg4MDAwLExPQ0FMX0VYKCVhMCkJIyBjbGVhciBvbGQgZXhwb25lbnQKKwlvci53CQklZDAsTE9DQUxfRVgoJWEwKQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBmbW92ZSBvdXQgdG9vayBhbiB1bmltcGxlbWVudGVkIGRhdGEgdHlwZSBleGNlcHRpb24uCisjIHRoZSBzcmMgb3BlcmFuZCBpcyBpbiBGUF9TUkMuIENhbGwgX2ZvdXQoKSB0byB3cml0ZSBvdXQgdGhlIHJlc3VsdCBhbmQKKyMgdG8gZGV0ZXJtaW5lIHdoaWNoIGV4Y2VwdGlvbnMsIGlmIGFueSwgdG8gdGFrZS4KK2Z1X291dDoKKworIyBTZXBhcmF0ZSBwYWNrZWQgbW92ZSBvdXRzIGZyb20gdGhlIFVOTk9STSBhbmQgREVOT1JNIG1vdmUgb3V0cy4KKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmMzomM30sJWQwCisJY21waS5iCQklZDAsJjB4MworCWJlcS53CQlmdV9vdXRfcGFjaworCWNtcGkuYgkJJWQwLCYweDcKKwliZXEudwkJZnVfb3V0X3BhY2sKKworCisjIEknbSBub3Qgc3VyZSBhdCB0aGlzIHBvaW50IHdoYXQgRlBTUiBiaXRzIGFyZSB2YWxpZCBmb3IgdGhpcyBpbnN0cnVjdGlvbi4KKyMgc28sIHNpbmNlIHRoZSBlbXVsYXRpb24gcm91dGluZXMgcmUtY3JlYXRlIHRoZW0gYW55d2F5cywgemVybyBleGNlcHRpb24gZmllbGQuCisjIGZtb3ZlIG91dCBkb2Vzbid0IGFmZmVjdCBjY29kZXMuCisJYW5kLmwJCSYweGZmZmYwMGZmLFVTRVJfRlBTUiglYTYpICMgemVybyBleGNlcHRpb24gZmllbGQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIGN1cnJlbnQgY29udHJvbCByZWdzCisJZm1vdi5sCQkmMHgwLCVmcHNyCisKKyMgdGhlIHNyYyBjYW4gT05MWSBiZSBhIERFTk9STSBvciBhbiBVTk5PUk0hIHNvLCBkb24ndCBtYWtlIGFueSBiaWcgc3Vicm91dGluZQorIyBjYWxsIGhlcmUuIGp1c3QgZmlndXJlIG91dCB3aGF0IGl0IGlzLi4uCisJbW92LncJCUZQX1NSQ19FWCglYTYpLCVkMAkjIGdldCBleHBvbmVudAorCWFuZGkudwkJJjB4N2ZmZiwlZDAJCSMgc3RyaXAgc2lnbgorCWJlcS5iCQlmdV9vdXRfZGVub3JtCQkjIGl0J3MgYSBERU5PUk0KKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBmaXggaXQKKworCW1vdi5iCQklZDAsU1RBRyglYTYpCisKKwlicmEuYgkJZnVfb3V0X2NvbnQKK2Z1X291dF9kZW5vcm06CisJbW92LmIJCSZERU5PUk0sU1RBRyglYTYpCitmdV9vdXRfY29udDoKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgZmV0Y2ggcm5kIG1vZGUvcHJlYworCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gc3JjIG9wZXJhbmQKKworCW1vdi5sCQkoJWE2KSxFWENfQTYoJWE2KQkjIGluIGNhc2UgYTYgY2hhbmdlcworCWJzci5sCQlmb3V0CQkJIyBjYWxsIGZtb3ZlIG91dCByb3V0aW5lCisKKyMgRXhjZXB0aW9ucyBpbiBvcmRlciBvZiBwcmVjZWRlbmNlOgorIwlCU1VOCTogbm9uZQorIwlTTkFOCTogbm9uZQorIwlPUEVSUgk6IGZtb3ZlLntiLHcsbH0gb3V0IG9mIGxhcmdlIFVOTk9STQorIwlPVkZMCTogZm1vdmUue3MsZH0KKyMJVU5GTAk6IGZtb3ZlLntzLGQseH0KKyMJRFoJOiBub25lCisjCUlORVgyCTogYWxsCisjCUlORVgxCTogbm9uZSAocGFja2VkIGRvZXNuJ3QgdHJhdmVsIHRocm91Z2ggaGVyZSkKKworIyBkZXRlcm1pbmUgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgZXhjZXB0aW9uKGlmIGFueSkgc2V0IGJ5IHRoZQorIyBlbXVsYXRpb24gcm91dGluZSB0aGF0IGhhcyBhbHNvIGJlZW4gZW5hYmxlZCBieSB0aGUgdXNlci4KKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDAJIyBmZXRjaCBleGNlcHRpb25zIGVuYWJsZWQKKwlibmUudwkJZnVfb3V0X2VuYQkJIyBzb21lIGFyZSBlbmFibGVkCisKK2Z1X291dF9kb25lOgorCisJbW92LmwJCUVYQ19BNiglYTYpLCglYTYpCSMgaW4gY2FzZSBhNiBjaGFuZ2VkCisKKyMgb24gZXh0ZW5kZWQgcHJlY2lzaW9uIG9wY2xhc3MgdGhyZWUgaW5zdHJ1Y3Rpb25zIHVzaW5nIHByZS1kZWNyZW1lbnQgb3IKKyMgcG9zdC1pbmNyZW1lbnQgYWRkcmVzc2luZyBtb2RlLCB0aGUgYWRkcmVzcyByZWdpc3RlciBpcyBub3QgdXBkYXRlZC4gaXMgdGhlCisjIGFkZHJlc3MgcmVnaXN0ZXIgd2FzIHRoZSBzdGFjayBwb2ludGVyIHVzZWQgZnJvbSB1c2VyIG1vZGUsIHRoZW4gbGV0J3MgdXBkYXRlCisjIGl0IGhlcmUuIGlmIGl0IHdhcyB1c2VkIGZyb20gc3VwZXJ2aXNvciBtb2RlLCB0aGVuIHdlIGhhdmUgdG8gaGFuZGxlIHRoaXMKKyMgYXMgYSBzcGVjaWFsIGNhc2UuCisJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQorCWJuZS5iCQlmdV9vdXRfZG9uZV9zCisKKwltb3YubAkJRVhDX0E3KCVhNiksJWEwCQkjIHJlc3RvcmUgYTcKKwltb3YubAkJJWEwLCV1c3AKKworZnVfb3V0X2RvbmVfY29udDoKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgorCisJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBvbj8KKwlibmUuYgkJZnVfb3V0X3RyYWNlCQkjIHllcworCisJYnJhLmwJCV9mcHNwX2RvbmUKKworIyBpcyB0aGUgZWEgbW9kZSBwcmUtZGVjcmVtZW50IG9mIHRoZSBzdGFjayBwb2ludGVyIGZyb20gc3VwZXJ2aXNvciBtb2RlPworIyAoImZtb3YueCBmcG0sLShhNykiKSBpZiBzbywKK2Z1X291dF9kb25lX3M6CisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnCisJYm5lLmIJCWZ1X291dF9kb25lX2NvbnQKKworIyB0aGUgZXh0ZW5kZWQgcHJlY2lzaW9uIHJlc3VsdCBpcyBzdGlsbCBpbiBmcDAuIGJ1dCwgd2UgbmVlZCB0byBzYXZlIGl0CisjIHNvbWV3aGVyZSBvbiB0aGUgc3RhY2sgdW50aWwgd2UgY2FuIGNvcHkgaXQgdG8gaXRzIGZpbmFsIHJlc3RpbmcgcGxhY2UuCisjIGhlcmUsIHdlJ3JlIGNvdW50aW5nIG9uIHRoZSB0b3Agb2YgdGhlIHN0YWNrIHRvIGJlIHRoZSBvbGQgcGxhY2UtaG9sZGVycworIyBmb3IgZnAwL2ZwMSB3aGljaCBoYXZlIGFscmVhZHkgYmVlbiByZXN0b3JlZC4gdGhhdCB3YXksIHdlIGNhbiB3cml0ZQorIyBvdmVyIHRob3NlIGRlc3RpbmF0aW9ucyB3aXRoIHRoZSBzaGlmdGVkIHN0YWNrIGZyYW1lLgorCWZtb3ZtLngJCSYweDgwLEZQX1NSQyglYTYpCSMgcHV0IGFuc3dlciBvbiBzdGFjaworCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwltb3YubAkJKCVhNiksJWE2CQkjIHJlc3RvcmUgZnJhbWUgcG9pbnRlcgorCisJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX1NSKCVzcCksTE9DQUxfU0laRStFWENfU1ItMHhjKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRSsyK0VYQ19QQyglc3ApLExPQ0FMX1NJWkUrMitFWENfUEMtMHhjKCVzcCkKKworIyBub3csIGNvcHkgdGhlIHJlc3VsdCB0byB0aGUgcHJvcGVyIHBsYWNlIG9uIHRoZSBzdGFjaworCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX1NSQ19FWCglc3ApLExPQ0FMX1NJWkUrRVhDX1NSKzB4MCglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfU1JDX0hJKCVzcCksTE9DQUxfU0laRStFWENfU1IrMHg0KCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStGUF9TUkNfTE8oJXNwKSxMT0NBTF9TSVpFK0VYQ19TUisweDgoJXNwKQorCisJYWRkLmwJCSZMT0NBTF9TSVpFLTB4OCwlc3AKKworCWJ0c3QJCSYweDcsKCVzcCkKKwlibmUuYgkJZnVfb3V0X3RyYWNlCisKKwlicmEubAkJX2Zwc3BfZG9uZQorCitmdV9vdXRfZW5hOgorCWFuZC5iCQlGUFNSX0VYQ0VQVCglYTYpLCVkMAkjIGtlZXAgb25seSBvbmVzIGVuYWJsZWQKKwliZmZmbwkJJWQweyYyNDomOH0sJWQwCQkjIGZpbmQgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24KKwlibmUuYgkJZnVfb3V0X2V4YwkJIyB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgc2V0CisKKyMgbm8gZXhjZXB0aW9ucyB3ZXJlIHNldC4KKyMgaWYgYSBkaXNhYmxlZCBvdmVyZmxvdyBvY2N1cnJlZCBhbmQgaW5leGFjdCB3YXMgZW5hYmxlZCBidXQgdGhlIHJlc3VsdAorIyB3YXMgZXhhY3QsIHRoZW4gYSBicmFuY2ggdG8gX3JlYWxfaW5leCgpIGlzIG1hZGUuCisJYnRzdAkJJm92ZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyB3YXMgb3ZlcmZsb3cgc2V0PworCWJlcS53CQlmdV9vdXRfZG9uZQkJIyBubworCitmdV9vdXRfb3ZmbGNoazoKKwlidHN0CQkmaW5leDJfYml0LEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgaW5leGFjdCBlbmFibGVkPworCWJlcS53CQlmdV9vdXRfZG9uZQkJIyBubworCWJyYS53CQlmdV9pbmV4CQkJIyB5ZXMKKworIworIyBUaGUgZnAgbW92ZSBvdXQgdGhhdCB0b29rIHRoZSAiVW5pbXBsZW1lbnRlZCBEYXRhIFR5cGUiIGV4Y2VwdGlvbiB3YXMKKyMgYmVpbmcgdHJhY2VkLiBTaW5jZSB0aGUgc3RhY2sgZnJhbWVzIGFyZSBzaW1pbGFyLCBnZXQgdGhlICJjdXJyZW50IiBQQworIyBmcm9tIEZQSUFSIGFuZCBwdXQgaXQgaW4gdGhlIHRyYWNlIHN0YWNrIGZyYW1lIHRoZW4ganVtcCB0byBfcmVhbF90cmFjZSgpLgorIworIwkJICBVTlNVUFAgRlJBTUUJCSAgIFRSQUNFIEZSQU1FCisjCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkJKiAgICAgIEVBCSoJKiAgICBDdXJyZW50CSoKKyMJCSoJCSoJKiAgICAgIFBDCSoKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCQkqIDB4MyAqICAweDBkYwkqCSogMHgyICogIDB4MDI0CSoKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCQkqICAgICBOZXh0CSoJKiAgICAgTmV4dAkqCisjCQkqICAgICAgUEMJKgkqICAgICAgUEMJKgorIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJCSogICAgICBTUgkqCSogICAgICBTUgkqCisjCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIworZnVfb3V0X3RyYWNlOgorCW1vdi53CQkmMHgyMDI0LDB4Niglc3ApCisJZm1vdi5sCQklZnBpYXIsMHg4KCVzcCkKKwlicmEubAkJX3JlYWxfdHJhY2UKKworIyBhbiBleGNlcHRpb24gb2NjdXJyZWQgYW5kIHRoYXQgZXhjZXB0aW9uIHdhcyBlbmFibGVkLgorZnVfb3V0X2V4YzoKKwlzdWJpLmwJCSYyNCwlZDAJCQkjIGZpeCBvZmZzZXQgdG8gYmUgMC04CisKKyMgd2UgZG9uJ3QgbWVzcyB3aXRoIHRoZSBleGlzdGluZyBmc2F2ZSBmcmFtZS4ganVzdCByZS1pbnNlcnQgaXQgYW5kCisjIGp1bXAgdG8gdGhlICJfcmVhbF97fSgpIiBoYW5kbGVyLi4uCisJbW92LncJCSh0YmxfZnVfb3V0LmIsJXBjLCVkMC53KjIpLCVkMAorCWptcAkJKHRibF9mdV9vdXQuYiwlcGMsJWQwLncqMSkKKworCXN3YmVnCQkmMHg4Cit0YmxfZnVfb3V0OgorCXNob3J0CQl0YmxfZnVfb3V0CS0gdGJsX2Z1X291dAkjIEJTVU4gY2FuJ3QgaGFwcGVuCisJc2hvcnQJCXRibF9mdV9vdXQJLSB0YmxfZnVfb3V0CSMgU05BTiBjYW4ndCBoYXBwZW4KKwlzaG9ydAkJZnVfb3BlcnIJLSB0YmxfZnVfb3V0CSMgT1BFUlIKKwlzaG9ydAkJZnVfb3ZmbAkJLSB0YmxfZnVfb3V0CSMgT1ZGTAorCXNob3J0CQlmdV91bmZsCQktIHRibF9mdV9vdXQJIyBVTkZMCisJc2hvcnQJCXRibF9mdV9vdXQJLSB0YmxfZnVfb3V0CSMgRFogY2FuJ3QgaGFwcGVuCisJc2hvcnQJCWZ1X2luZXgJCS0gdGJsX2Z1X291dAkjIElORVgyCisJc2hvcnQJCXRibF9mdV9vdXQJLSB0YmxfZnVfb3V0CSMgSU5FWDEgd29uJ3QgbWFrZSBpdCBoZXJlCisKKyMgZm9yIHNuYW4sb3BlcnIsb3ZmbCx1bmZsLCBzcmMgb3AgaXMgc3RpbGwgaW4gRlBfU1JDIHNvIGp1c3QKKyMgZnJlc3RvcmUgaXQuCitmdV9zbmFuOgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJbW92LncJCSYweDMwZDgsRVhDX1ZPRkYoJWE2KQkjIHZlY3RvciBvZmZzZXQgPSAweGQ4CisJbW92LncJCSYweGUwMDYsMitGUF9TUkMoJWE2KQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikKKworCXVubGsJCSVhNgorCisKKwlicmEubAkJX3JlYWxfc25hbgorCitmdV9vcGVycjoKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCW1vdi53CQkmMHgzMGQwLEVYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhkMAorCW1vdi53CQkmMHhlMDA0LDIrRlBfU1JDKCVhNikKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCisKKwl1bmxrCQklYTYKKworCisJYnJhLmwJCV9yZWFsX29wZXJyCisKK2Z1X292Zmw6CisJZm1vdm0ueAkJJjB4NDAsRlBfU1JDKCVhNikJIyBzYXZlIEVYT1AgdG8gdGhlIHN0YWNrCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCW1vdi53CQkmMHgzMGQ0LEVYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhkNAorCW1vdi53CQkmMHhlMDA1LDIrRlBfU1JDKCVhNikKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIHJlc3RvcmUgRVhPUAorCisJdW5sawkJJWE2CisKKwlicmEubAkJX3JlYWxfb3ZmbAorCisjIHVuZGVyZmxvdyBjYW4gaGFwcGVuIGZvciBleHRlbmRlZCBwcmVjaXNpb24uIGV4dGVuZGVkIHByZWNpc2lvbiBvcGNsYXNzCisjIHRocmVlIGluc3RydWN0aW9uIGV4Y2VwdGlvbnMgZG9uJ3QgdXBkYXRlIHRoZSBzdGFjayBwb2ludGVyLiBzbywgaWYgdGhlCisjIGV4Y2VwdGlvbiBvY2N1cnJlZCBmcm9tIHVzZXIgbW9kZSwgdGhlbiBzaW1wbHkgdXBkYXRlIGE3IGFuZCBleGl0IG5vcm1hbGx5LgorIyBpZiB0aGUgZXhjZXB0aW9uIG9jY3VycmVkIGZyb20gc3VwZXJ2aXNvciBtb2RlLCBjaGVjayBpZgorZnVfdW5mbDoKKwltb3YubAkJRVhDX0E2KCVhNiksKCVhNikJIyByZXN0b3JlIGE2CisKKwlidHN0CQkmMHg1LEVYQ19TUiglYTYpCisJYm5lLncJCWZ1X3VuZmxfcworCisJbW92LmwJCUVYQ19BNyglYTYpLCVhMAkJIyByZXN0b3JlIGE3IHdoZXRoZXIgd2UgbmVlZAorCW1vdi5sCQklYTAsJXVzcAkJIyB0byBvciBub3QuLi4KKworZnVfdW5mbF9jb250OgorCWZtb3ZtLngJCSYweDQwLEZQX1NSQyglYTYpCSMgc2F2ZSBFWE9QIHRvIHRoZSBzdGFjaworCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwltb3YudwkJJjB4MzBjYyxFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4Y2MKKwltb3YudwkJJjB4ZTAwMywyK0ZQX1NSQyglYTYpCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIEVYT1AKKworCXVubGsJCSVhNgorCisJYnJhLmwJCV9yZWFsX3VuZmwKKworZnVfdW5mbF9zOgorCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtZGE3X2ZsZyAjIHdhcyB0aGUgPGVhPiBtb2RlIC0oc3ApPworCWJuZS5iCQlmdV91bmZsX2NvbnQKKworIyB0aGUgZXh0ZW5kZWQgcHJlY2lzaW9uIHJlc3VsdCBpcyBzdGlsbCBpbiBmcDAuIGJ1dCwgd2UgbmVlZCB0byBzYXZlIGl0CisjIHNvbWV3aGVyZSBvbiB0aGUgc3RhY2sgdW50aWwgd2UgY2FuIGNvcHkgaXQgdG8gaXRzIGZpbmFsIHJlc3RpbmcgcGxhY2UKKyMgKHdoZXJlIHRoZSBleGMgZnJhbWUgaXMgY3VycmVudGx5KS4gbWFrZSBzdXJlIGl0J3Mgbm90IGF0IHRoZSB0b3Agb2YgdGhlCisjIGZyYW1lIG9yIGl0IHdpbGwgZ2V0IG92ZXJ3cml0dGVuIHdoZW4gdGhlIGV4YyBzdGFjayBmcmFtZSBpcyBzaGlmdGVkICJkb3duIi4KKwlmbW92bS54CQkmMHg4MCxGUF9TUkMoJWE2KQkjIHB1dCBhbnN3ZXIgb24gc3RhY2sKKwlmbW92bS54CQkmMHg0MCxGUF9EU1QoJWE2KQkjIHB1dCBFWE9QIG9uIHN0YWNrCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCW1vdi53CQkmMHgzMGNjLEVYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhjYworCW1vdi53CQkmMHhlMDAzLDIrRlBfRFNUKCVhNikKKworCWZyZXN0b3JlCUZQX0RTVCglYTYpCQkjIHJlc3RvcmUgRVhPUAorCisJbW92LmwJCSglYTYpLCVhNgkJIyByZXN0b3JlIGZyYW1lIHBvaW50ZXIKKworCW1vdi5sCQlMT0NBTF9TSVpFK0VYQ19TUiglc3ApLExPQ0FMX1NJWkUrRVhDX1NSLTB4Yyglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrMitFWENfUEMoJXNwKSxMT0NBTF9TSVpFKzIrRVhDX1BDLTB4Yyglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX0VBKCVzcCksTE9DQUxfU0laRStFWENfRUEtMHhjKCVzcCkKKworIyBub3csIGNvcHkgdGhlIHJlc3VsdCB0byB0aGUgcHJvcGVyIHBsYWNlIG9uIHRoZSBzdGFjaworCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX1NSQ19FWCglc3ApLExPQ0FMX1NJWkUrRVhDX1NSKzB4MCglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfU1JDX0hJKCVzcCksTE9DQUxfU0laRStFWENfU1IrMHg0KCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStGUF9TUkNfTE8oJXNwKSxMT0NBTF9TSVpFK0VYQ19TUisweDgoJXNwKQorCisJYWRkLmwJCSZMT0NBTF9TSVpFLTB4OCwlc3AKKworCWJyYS5sCQlfcmVhbF91bmZsCisKKyMgZm1vdmUgaW4gYW5kIG91dCBlbnRlciBoZXJlLgorZnVfaW5leDoKKwlmbW92bS54CQkmMHg0MCxGUF9TUkMoJWE2KQkjIHNhdmUgRVhPUCB0byB0aGUgc3RhY2sKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJbW92LncJCSYweDMwYzQsRVhDX1ZPRkYoJWE2KQkjIHZlY3RvciBvZmZzZXQgPSAweGM0CisJbW92LncJCSYweGUwMDEsMitGUF9TUkMoJWE2KQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgcmVzdG9yZSBFWE9QCisKKwl1bmxrCQklYTYKKworCisJYnJhLmwJCV9yZWFsX2luZXgKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZnVfaW5fcGFjazoKKworCisjIEknbSBub3Qgc3VyZSBhdCB0aGlzIHBvaW50IHdoYXQgRlBTUiBiaXRzIGFyZSB2YWxpZCBmb3IgdGhpcyBpbnN0cnVjdGlvbi4KKyMgc28sIHNpbmNlIHRoZSBlbXVsYXRpb24gcm91dGluZXMgcmUtY3JlYXRlIHRoZW0gYW55d2F5cywgemVybyBleGNlcHRpb24gZmllbGQKKwlhbmRpLmwJCSYweDBmZjAwZmYsVVNFUl9GUFNSKCVhNikgIyB6ZXJvIGV4Y2VwdGlvbiBmaWVsZAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gY3VycmVudCBjb250cm9sIHJlZ3MKKwlmbW92LmwJCSYweDAsJWZwc3IKKworCWJzci5sCQlnZXRfcGFja2VkCQkjIGZldGNoIHBhY2tlZCBzcmMgb3BlcmFuZAorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gc3JjCisJYnNyLmwJCXNldF90YWdfeAkJIyBzZXQgc3JjIG9wdHlwZSB0YWcKKworCW1vdi5iCQklZDAsU1RBRyglYTYpCQkjIHNhdmUgc3JjIG9wdHlwZSB0YWcKKworCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAgIyBkeWFkaWM7IGxvYWQgZHN0IHJlZworCisjIGJpdCBmaXZlIG9mIHRoZSBmcCBleHRlbnNpb24gd29yZCBzZXBhcmF0ZXMgdGhlIG1vbmFkaWMgYW5kIGR5YWRpYyBvcGVyYXRpb25zCisjIGF0IHRoaXMgcG9pbnQKKwlidHN0CQkmMHg1LDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3BlcmF0aW9uIG1vbmFkaWMgb3IgZHlhZGljPworCWJlcS5iCQlmdV9leHRyYWN0X3AJCSMgbW9uYWRpYworCWNtcGkuYgkJMStFWENfQ01EUkVHKCVhNiksJjB4M2EJIyBpcyBvcGVyYXRpb24gYW4gZnRzdD8KKwliZXEuYgkJZnVfZXh0cmFjdF9wCQkjIHllcywgc28gaXQncyBtb25hZGljLCB0b28KKworCWJzci5sCQlsb2FkX2ZwbjIJCSMgbG9hZCBkc3QgaW50byBGUF9EU1QKKworCWxlYQkJRlBfRFNUKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBkc3Qgb3AKKwlic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCisJY21waS5iCQklZDAsJlVOTk9STQkJIyBpcyBvcGVyYW5kIGFuIFVOTk9STT8KKwlibmUuYgkJZnVfb3AyX2RvbmVfcAkJIyBubworCWJzci5sCQl1bm5vcm1fZml4CQkjIHllczsgY29udmVydCB0byBOT1JNLERFTk9STSxvciBaRVJPCitmdV9vcDJfZG9uZV9wOgorCW1vdi5iCQklZDAsRFRBRyglYTYpCQkjIHNhdmUgZHN0IG9wdHlwZSB0YWcKKworZnVfZXh0cmFjdF9wOgorCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgZmV0Y2ggcm5kIG1vZGUvcHJlYworCisJYmZleHR1CQkxK0VYQ19DTURSRUcoJWE2KXsmMTomN30sJWQxICMgZXh0cmFjdCBleHRlbnNpb24KKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJbGVhCQlGUF9EU1QoJWE2KSwlYTEKKworCW1vdi5sCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEubCo0KSwlZDEgIyBmZXRjaCByb3V0aW5lIGFkZHIKKwlqc3IJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS5sKjEpCisKKyMKKyMgRXhjZXB0aW9ucyBpbiBvcmRlciBvZiBwcmVjZWRlbmNlOgorIwlCU1VOCTogbm9uZQorIwlTTkFOCTogYWxsIGR5YWRpYyBvcHMKKyMJT1BFUlIJOiBmc3FydCgtTk9STSkKKyMJT1ZGTAk6IGFsbCBleGNlcHQgZnRzdCxmY21wCisjCVVORkwJOiBhbGwgZXhjZXB0IGZ0c3QsZmNtcAorIwlEWgk6IGZkaXYKKyMJSU5FWDIJOiBhbGwgZXhjZXB0IGZ0c3QsZmNtcAorIwlJTkVYMQk6IGFsbAorIworCisjIHdlIGRldGVybWluZSB0aGUgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24oaWYgYW55KSBzZXQgYnkgdGhlCisjIGVtdWxhdGlvbiByb3V0aW5lIHRoYXQgaGFzIGFsc28gYmVlbiBlbmFibGVkIGJ5IHRoZSB1c2VyLgorCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMAkjIGZldGNoIGV4Y2VwdGlvbnMgZW5hYmxlZAorCWJuZS53CQlmdV9pbl9lbmFfcAkJIyBzb21lIGFyZSBlbmFibGVkCisKK2Z1X2luX2NvbnRfcDoKKyMgZmNtcCBhbmQgZnRzdCBkbyBub3Qgc3RvcmUgYW55IHJlc3VsdC4KKwltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQwCSMgZmV0Y2ggZXh0ZW5zaW9uCisJYW5kaS5iCQkmMHgzOCwlZDAJCSMgZXh0cmFjdCBiaXRzIDMtNQorCWNtcGkuYgkJJWQwLCYweDM4CQkjIGlzIGluc3RyIGZjbXAgb3IgZnRzdD8KKwliZXEuYgkJZnVfaW5fZXhpdF9wCQkjIHllcworCisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMCAjIGR5YWRpYzsgbG9hZCBkc3QgcmVnCisJYnNyLmwJCXN0b3JlX2ZwcmVnCQkjIHN0b3JlIHRoZSByZXN1bHQKKworZnVfaW5fZXhpdF9wOgorCisJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQkjIHVzZXIgb3Igc3VwZXJ2aXNvcj8KKwlibmUudwkJZnVfaW5fZXhpdF9zX3AJCSMgc3VwZXJ2aXNvcgorCisJbW92LmwJCUVYQ19BNyglYTYpLCVhMAkJIyB1cGRhdGUgdXNlciBhNworCW1vdi5sCQklYTAsJXVzcAorCitmdV9pbl9leGl0X2NvbnRfcDoKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgkJCSMgdW5yYXZlbCBzdGFjayBmcmFtZQorCisJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBvbj8KKwlibmUudwkJZnVfdHJhY2VfcAkJIyB5ZXMKKworCWJyYS5sCQlfZnBzcF9kb25lCQkjIGV4aXQgdG8gb3MKKworIyB0aGUgZXhjZXB0aW9uIG9jY3VycmVkIGluIHN1cGVydmlzb3IgbW9kZS4gY2hlY2sgdG8gc2VlIGlmIHRoZQorIyBhZGRyZXNzaW5nIG1vZGUgd2FzIChhNykrLiBpZiBzbywgd2UnbGwgbmVlZCB0byBzaGlmdCB0aGUKKyMgc3RhY2sgZnJhbWUgInVwIi4KK2Z1X2luX2V4aXRfc19wOgorCWJ0c3QJCSZtaWE3X2JpdCxTUENPTkRfRkxHKCVhNikgIyB3YXMgZWEgbW9kZSAoYTcpKworCWJlcS5iCQlmdV9pbl9leGl0X2NvbnRfcAkjIG5vCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgkJCSMgdW5yYXZlbCBzdGFjayBmcmFtZQorCisjIHNoaWZ0IHRoZSBzdGFjayBmcmFtZSAidXAiLiB3ZSBkb24ndCByZWFsbHkgY2FyZSBhYm91dCB0aGUgPGVhPiBmaWVsZC4KKwltb3YubAkJMHg0KCVzcCksMHgxMCglc3ApCisJbW92LmwJCTB4MCglc3ApLDB4Yyglc3ApCisJYWRkLmwJCSYweGMsJXNwCisKKwlidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPworCWJuZS53CQlmdV90cmFjZV9wCQkjIHllcworCisJYnJhLmwJCV9mcHNwX2RvbmUJCSMgZXhpdCB0byBvcworCitmdV9pbl9lbmFfcDoKKwlhbmQuYgkJRlBTUl9FWENFUFQoJWE2KSwlZDAJIyBrZWVwIG9ubHkgb25lcyBlbmFibGVkICYgc2V0CisJYmZmZm8JCSVkMHsmMjQ6Jjh9LCVkMAkJIyBmaW5kIGhpZ2hlc3QgcHJpb3JpdHkgZXhjZXB0aW9uCisJYm5lLmIJCWZ1X2luX2V4Y19wCQkjIGF0IGxlYXN0IG9uZSB3YXMgc2V0CisKKyMKKyMgTm8gZXhjZXB0aW9ucyBvY2N1cnJlZCB0aGF0IHdlcmUgYWxzbyBlbmFibGVkLiBOb3c6CisjCisjCWlmIChPVkZMICYmIG92ZmxfZGlzYWJsZWQgJiYgaW5leGFjdF9lbmFibGVkKSB7CisjCSAgICBicmFuY2ggdG8gX3JlYWxfaW5leCgpIChldmVuIGlmIHRoZSByZXN1bHQgd2FzIGV4YWN0ISk7CisjCX0gZWxzZSB7CisjCSAgICBzYXZlIHRoZSByZXN1bHQgaW4gdGhlIHByb3BlciBmcCByZWcgKHVubGVzcyB0aGUgb3AgaXMgZmNtcCBvciBmdHN0KTsKKyMJICAgIHJldHVybjsKKyMJfQorIworCWJ0c3QJCSZvdmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgd2FzIG92ZXJmbG93IHNldD8KKwliZXEudwkJZnVfaW5fY29udF9wCQkjIG5vCisKK2Z1X2luX292ZmxjaGtfcDoKKwlidHN0CQkmaW5leDJfYml0LEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgaW5leGFjdCBlbmFibGVkPworCWJlcS53CQlmdV9pbl9jb250X3AJCSMgbm8KKwlicmEudwkJZnVfaW5fZXhjX292ZmxfcAkjIGRvIF9yZWFsX2luZXgoKSBub3cKKworIworIyBBbiBleGNlcHRpb24gb2NjdXJyZWQgYW5kIHRoYXQgZXhjZXB0aW9uIHdhcyBlbmFibGVkOgorIworIwlzaGlmdCBlbmFibGVkIGV4Y2VwdGlvbiBmaWVsZCBpbnRvIGxvIGJ5dGUgb2YgZDA7CisjCWlmICgoKElORVgyIHx8IElORVgxKSAmJiBpbmV4X2VuYWJsZWQgJiYgT1ZGTCAmJiBvdmZsX2Rpc2FibGVkKSB8fAorIwkgICAgKChJTkVYMiB8fCBJTkVYMSkgJiYgaW5leF9lbmFibGVkICYmIFVORkwgJiYgdW5mbF9kaXNhYmxlZCkpIHsKKyMJCS8qCisjCQkgKiB0aGlzIGlzIHRoZSBjYXNlIHdoZXJlIHdlIG11c3QgY2FsbCBfcmVhbF9pbmV4KCkgbm93IG9yIGVsc2UKKyMJCSAqIHRoZXJlIHdpbGwgYmUgbm8gb3RoZXIgd2F5IHRvIHBhc3MgaXQgdGhlIGV4Y2VwdGlvbmFsIG9wZXJhbmQKKyMJCSAqLworIwkJY2FsbCBfcmVhbF9pbmV4KCk7CisjCX0gZWxzZSB7CisjCQlyZXN0b3JlIGV4YyBzdGF0ZSAoU05BTnx8T1BFUlJ8fE9WRkx8fFVORkx8fERafHxJTkVYKSBpbnRvIHRoZSBGUFU7CisjCX0KKyMKK2Z1X2luX2V4Y19wOgorCXN1YmkubAkJJjI0LCVkMAkJCSMgZml4IG9mZnNldCB0byBiZSAwLTgKKwljbXBpLmIJCSVkMCwmMHg2CQkjIGlzIGV4Y2VwdGlvbiBJTkVYPyAoNiBvciA3KQorCWJsdC5iCQlmdV9pbl9leGNfZXhpdF9wCSMgbm8KKworIyB0aGUgZW5hYmxlZCBleGNlcHRpb24gd2FzIGluZXhhY3QKKwlidHN0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGRpZCBkaXNhYmxlZCB1bmRlcmZsb3cgb2NjdXI/CisJYm5lLncJCWZ1X2luX2V4Y191bmZsX3AJIyB5ZXMKKwlidHN0CQkmb3ZmbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGRpZCBkaXNhYmxlZCBvdmVyZmxvdyBvY2N1cj8KKwlibmUudwkJZnVfaW5fZXhjX292ZmxfcAkjIHllcworCisjIGhlcmUsIHdlIGluc2VydCB0aGUgY29ycmVjdCBmc2F2ZSBzdGF0dXMgdmFsdWUgaW50byB0aGUgZnNhdmUgZnJhbWUgZm9yIHRoZQorIyBjb3JyZXNwb25kaW5nIGV4Y2VwdGlvbi4gdGhlIG9wZXJhbmQgaW4gdGhlIGZzYXZlIGZyYW1lIHNob3VsZCBiZSB0aGUgb3JpZ2luYWwKKyMgc3JjIG9wZXJhbmQuCisjIGFzIGEgcmVtaW5kZXIgZm9yIGZ1dHVyZSBwcmVkaWN0ZWQgcGFpbiBhbmQgYWdvbnksIHdlIGFyZSBwYXNzaW5nIGluIGZzYXZlIHRoZQorIyAibm9uLXNrZXdlZCIgb3BlcmFuZCBmb3IgY2FzZXMgb2Ygc2dsIGFuZCBkYmwgc3JjIElORnMsTkFOcywgYW5kIERFTk9STXMuCisjIHRoaXMgaXMgSU5DT1JSRUNUIGZvciBlbmFibGVkIFNOQU4gd2hpY2ggd291bGQgZ2l2ZSB0byB0aGUgdXNlciB0aGUgc2tld2VkIFNOQU4hISEKK2Z1X2luX2V4Y19leGl0X3A6CisJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQkjIHVzZXIgb3Igc3VwZXJ2aXNvcj8KKwlibmUudwkJZnVfaW5fZXhjX2V4aXRfc19wCSMgc3VwZXJ2aXNvcgorCisJbW92LmwJCUVYQ19BNyglYTYpLCVhMAkJIyB1cGRhdGUgdXNlciBhNworCW1vdi5sCQklYTAsJXVzcAorCitmdV9pbl9leGNfZXhpdF9jb250X3A6CisJbW92LncJCSh0YmxfZXhjZXB0X3AuYiwlcGMsJWQwLncqMiksMitGUF9TUkMoJWE2KQorCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIHNyYyBvcAorCisJdW5sawkJJWE2CisKKwlidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIGVuYWJsZWQ/CisJYm5lLncJCWZ1X3RyYWNlX3AJCSMgeWVzCisKKwlicmEubAkJX2Zwc3BfZG9uZQorCit0YmxfZXhjZXB0X3A6CisJc2hvcnQJCTB4ZTAwMCwweGUwMDYsMHhlMDA0LDB4ZTAwNQorCXNob3J0CQkweGUwMDMsMHhlMDAyLDB4ZTAwMSwweGUwMDEKKworZnVfaW5fZXhjX292ZmxfcDoKKwltb3YudwkJJjB4MywlZDAKKwlicmEudwkJZnVfaW5fZXhjX2V4aXRfcAorCitmdV9pbl9leGNfdW5mbF9wOgorCW1vdi53CQkmMHg0LCVkMAorCWJyYS53CQlmdV9pbl9leGNfZXhpdF9wCisKK2Z1X2luX2V4Y19leGl0X3NfcDoKKwlidHN0CQkmbWlhN19iaXQsU1BDT05EX0ZMRyglYTYpCisJYmVxLmIJCWZ1X2luX2V4Y19leGl0X2NvbnRfcAorCisJbW92LncJCSh0YmxfZXhjZXB0X3AuYiwlcGMsJWQwLncqMiksMitGUF9TUkMoJWE2KQorCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIHNyYyBvcAorCisJdW5sawkJJWE2CQkJIyB1bnJhdmVsIHN0YWNrIGZyYW1lCisKKyMgc2hpZnQgc3RhY2sgZnJhbWUgInVwIi4gd2hvIGNhcmVzIGFib3V0IDxlYT4gZmllbGQuCisJbW92LmwJCTB4NCglc3ApLDB4MTAoJXNwKQorCW1vdi5sCQkweDAoJXNwKSwweGMoJXNwKQorCWFkZC5sCQkmMHhjLCVzcAorCisJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBvbj8KKwlibmUuYgkJZnVfdHJhY2VfcAkJIyB5ZXMKKworCWJyYS5sCQlfZnBzcF9kb25lCQkjIGV4aXQgdG8gb3MKKworIworIyBUaGUgb3BjbGFzcyB0d28gUEFDS0VEIGluc3RydWN0aW9uIHRoYXQgdG9vayBhbiAiVW5pbXBsZW1lbnRlZCBEYXRhIFR5cGUiCisjIGV4Y2VwdGlvbiB3YXMgYmVpbmcgdHJhY2VkLiBNYWtlIHRoZSAiY3VycmVudCIgUEMgdGhlIEZQSUFSIGFuZCBwdXQgaXQgaW4gdGhlCisjIHRyYWNlIHN0YWNrIGZyYW1lIHRoZW4ganVtcCB0byBfcmVhbF90cmFjZSgpLgorIworIwkJICBVTlNVUFAgRlJBTUUJCSAgIFRSQUNFIEZSQU1FCisjCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkJKiAgICAgIEVBCSoJKiAgICBDdXJyZW50CSoKKyMJCSoJCSoJKiAgICAgIFBDCSoKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCQkqIDB4MiAqCTB4MGRjCSoJKiAweDIgKiAgMHgwMjQJKgorIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJCSogICAgIE5leHQJKgkqICAgICBOZXh0CSoKKyMJCSogICAgICBQQwkqCSogICAgICBQQwkqCisjCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkJKiAgICAgIFNSCSoJKiAgICAgIFNSCSoKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCitmdV90cmFjZV9wOgorCW1vdi53CQkmMHgyMDI0LDB4Niglc3ApCisJZm1vdi5sCQklZnBpYXIsMHg4KCVzcCkKKworCWJyYS5sCQlfcmVhbF90cmFjZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZnVfb3V0X3BhY2s6CisKKworIyBJJ20gbm90IHN1cmUgYXQgdGhpcyBwb2ludCB3aGF0IEZQU1IgYml0cyBhcmUgdmFsaWQgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24uCisjIHNvLCBzaW5jZSB0aGUgZW11bGF0aW9uIHJvdXRpbmVzIHJlLWNyZWF0ZSB0aGVtIGFueXdheXMsIHplcm8gZXhjZXB0aW9uIGZpZWxkLgorIyBmbW92ZSBvdXQgZG9lc24ndCBhZmZlY3QgY2NvZGVzLgorCWFuZC5sCQkmMHhmZmZmMDBmZixVU0VSX0ZQU1IoJWE2KSAjIHplcm8gZXhjZXB0aW9uIGZpZWxkCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBjdXJyZW50IGNvbnRyb2wgcmVncworCWZtb3YubAkJJjB4MCwlZnBzcgorCisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMAorCWJzci5sCQlsb2FkX2ZwbjEKKworIyB1bmxpa2Ugb3RoZXIgb3BjbGFzcyAzLCB1bmltcGxlbWVudGVkIGRhdGEgdHlwZSBleGNlcHRpb25zLCBwYWNrZWQgbXVzdCBiZQorIyBhYmxlIHRvIGRldGVjdCBhbGwgb3BlcmFuZCB0eXBlcy4KKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKKwljbXBpLmIJCSVkMCwmVU5OT1JNCQkjIGlzIG9wZXJhbmQgYW4gVU5OT1JNPworCWJuZS5iCQlmdV9vcDJfcAkJIyBubworCWJzci5sCQl1bm5vcm1fZml4CQkjIHllczsgY29udmVydCB0byBOT1JNLERFTk9STSxvciBaRVJPCisKK2Z1X29wMl9wOgorCW1vdi5iCQklZDAsU1RBRyglYTYpCQkjIHNhdmUgc3JjIG9wdHlwZSB0YWcKKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgZmV0Y2ggcm5kIG1vZGUvcHJlYworCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gc3JjIG9wZXJhbmQKKworCW1vdi5sCQkoJWE2KSxFWENfQTYoJWE2KQkjIGluIGNhc2UgYTYgY2hhbmdlcworCWJzci5sCQlmb3V0CQkJIyBjYWxsIGZtb3ZlIG91dCByb3V0aW5lCisKKyMgRXhjZXB0aW9ucyBpbiBvcmRlciBvZiBwcmVjZWRlbmNlOgorIwlCU1VOCTogbm8KKyMJU05BTgk6IHllcworIwlPUEVSUgk6IGlmICgoa19mYWN0b3IgPiArMTcpIHx8IChkZWMuIGV4cCBleGNlZWRzIDMgZGlnaXRzKSkKKyMJT1ZGTAk6IG5vCisjCVVORkwJOiBubworIwlEWgk6IG5vCisjCUlORVgyCTogeWVzCisjCUlORVgxCTogbm8KKworIyBkZXRlcm1pbmUgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgZXhjZXB0aW9uKGlmIGFueSkgc2V0IGJ5IHRoZQorIyBlbXVsYXRpb24gcm91dGluZSB0aGF0IGhhcyBhbHNvIGJlZW4gZW5hYmxlZCBieSB0aGUgdXNlci4KKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDAJIyBmZXRjaCBleGNlcHRpb25zIGVuYWJsZWQKKwlibmUudwkJZnVfb3V0X2VuYV9wCQkjIHNvbWUgYXJlIGVuYWJsZWQKKworZnVfb3V0X2V4aXRfcDoKKwltb3YubAkJRVhDX0E2KCVhNiksKCVhNikJIyByZXN0b3JlIGE2CisKKwlidHN0CQkmMHg1LEVYQ19TUiglYTYpCSMgdXNlciBvciBzdXBlcnZpc29yPworCWJuZS5iCQlmdV9vdXRfZXhpdF9zX3AJCSMgc3VwZXJ2aXNvcgorCisJbW92LmwJCUVYQ19BNyglYTYpLCVhMAkJIyB1cGRhdGUgdXNlciBhNworCW1vdi5sCQklYTAsJXVzcAorCitmdV9vdXRfZXhpdF9jb250X3A6CisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYJCQkjIHVucmF2ZWwgc3RhY2sgZnJhbWUKKworCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2Ugb24/CisJYm5lLncJCWZ1X3RyYWNlX3AJCSMgeWVzCisKKwlicmEubAkJX2Zwc3BfZG9uZQkJIyBleGl0IHRvIG9zCisKKyMgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBzdXBlcnZpc29yIG1vZGUuIGNoZWNrIHRvIHNlZSBpZiB0aGUKKyMgYWRkcmVzc2luZyBtb2RlIHdhcyAtKGE3KS4gaWYgc28sIHdlJ2xsIG5lZWQgdG8gc2hpZnQgdGhlCisjIHN0YWNrIGZyYW1lICJkb3duIi4KK2Z1X291dF9leGl0X3NfcDoKKwlidHN0CQkmbWRhN19iaXQsU1BDT05EX0ZMRyglYTYpICMgd2FzIGVhIG1vZGUgLShhNykKKwliZXEuYgkJZnVfb3V0X2V4aXRfY29udF9wCSMgbm8KKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJbW92LmwJCSglYTYpLCVhNgkJIyByZXN0b3JlIGZyYW1lIHBvaW50ZXIKKworCW1vdi5sCQlMT0NBTF9TSVpFK0VYQ19TUiglc3ApLExPQ0FMX1NJWkUrRVhDX1NSLTB4Yyglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrMitFWENfUEMoJXNwKSxMT0NBTF9TSVpFKzIrRVhDX1BDLTB4Yyglc3ApCisKKyMgbm93LCBjb3B5IHRoZSByZXN1bHQgdG8gdGhlIHByb3BlciBwbGFjZSBvbiB0aGUgc3RhY2sKKwltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfRVgoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUisweDAoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9ISSglc3ApLExPQ0FMX1NJWkUrRVhDX1NSKzB4NCglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfRFNUX0xPKCVzcCksTE9DQUxfU0laRStFWENfU1IrMHg4KCVzcCkKKworCWFkZC5sCQkmTE9DQUxfU0laRS0weDgsJXNwCisKKwlidHN0CQkmMHg3LCglc3ApCisJYm5lLncJCWZ1X3RyYWNlX3AKKworCWJyYS5sCQlfZnBzcF9kb25lCisKK2Z1X291dF9lbmFfcDoKKwlhbmQuYgkJRlBTUl9FWENFUFQoJWE2KSwlZDAJIyBrZWVwIG9ubHkgb25lcyBlbmFibGVkCisJYmZmZm8JCSVkMHsmMjQ6Jjh9LCVkMAkJIyBmaW5kIGhpZ2hlc3QgcHJpb3JpdHkgZXhjZXB0aW9uCisJYmVxLncJCWZ1X291dF9leGl0X3AKKworCW1vdi5sCQlFWENfQTYoJWE2KSwoJWE2KQkjIHJlc3RvcmUgYTYKKworIyBhbiBleGNlcHRpb24gb2NjdXJyZWQgYW5kIHRoYXQgZXhjZXB0aW9uIHdhcyBlbmFibGVkLgorIyB0aGUgb25seSBleGNlcHRpb24gcG9zc2libGUgb24gcGFja2VkIG1vdmUgb3V0IGFyZSBJTkVYLCBPUEVSUiwgYW5kIFNOQU4uCitmdV9vdXRfZXhjX3A6CisJY21waS5iCQklZDAsJjB4MWEKKwliZ3QudwkJZnVfaW5leF9wMgorCWJlcS53CQlmdV9vcGVycl9wCisKK2Z1X3NuYW5fcDoKKwlidHN0CQkmMHg1LEVYQ19TUiglYTYpCisJYm5lLmIJCWZ1X3NuYW5fc19wCisKKwltb3YubAkJRVhDX0E3KCVhNiksJWEwCisJbW92LmwJCSVhMCwldXNwCisJYnJhLncJCWZ1X3NuYW4KKworZnVfc25hbl9zX3A6CisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnCisJYm5lLncJCWZ1X3NuYW4KKworIyB0aGUgaW5zdHJ1Y3Rpb24gd2FzICJmbW92ZS5wIGZwbiwtKGE3KSIgZnJvbSBzdXBlcnZpc29yIG1vZGUuCisjIHRoZSBzdHJhdGVneSBpcyB0byBtb3ZlIHRoZSBleGNlcHRpb24gZnJhbWUgImRvd24iIDEyIGJ5dGVzLiB0aGVuLCB3ZQorIyBjYW4gc3RvcmUgdGhlIGRlZmF1bHQgcmVzdWx0IHdoZXJlIHRoZSBleGNlcHRpb24gZnJhbWUgd2FzLgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJbW92LncJCSYweDMwZDgsRVhDX1ZPRkYoJWE2KQkjIHZlY3RvciBvZmZzZXQgPSAweGQwCisJbW92LncJCSYweGUwMDYsMitGUF9TUkMoJWE2KQkjIHNldCBmc2F2ZSBzdGF0dXMKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIHJlc3RvcmUgc3JjIG9wZXJhbmQKKworCW1vdi5sCQkoJWE2KSwlYTYJCSMgcmVzdG9yZSBmcmFtZSBwb2ludGVyCisKKwltb3YubAkJTE9DQUxfU0laRStFWENfU1IoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUi0weGMoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFKzIrRVhDX1BDKCVzcCksTE9DQUxfU0laRSsyK0VYQ19QQy0weGMoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0VYQ19FQSglc3ApLExPQ0FMX1NJWkUrRVhDX0VBLTB4Yyglc3ApCisKKyMgbm93LCB3ZSBjb3B5IHRoZSBkZWZhdWx0IHJlc3VsdCB0byBpdHMgcHJvcGVyIGxvY2F0aW9uCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfRFNUX0VYKCVzcCksTE9DQUxfU0laRSsweDQoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9ISSglc3ApLExPQ0FMX1NJWkUrMHg4KCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfTE8oJXNwKSxMT0NBTF9TSVpFKzB4Yyglc3ApCisKKwlhZGQubAkJJkxPQ0FMX1NJWkUtMHg4LCVzcAorCisKKwlicmEubAkJX3JlYWxfc25hbgorCitmdV9vcGVycl9wOgorCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikKKwlibmUudwkJZnVfb3BlcnJfcF9zCisKKwltb3YubAkJRVhDX0E3KCVhNiksJWEwCisJbW92LmwJCSVhMCwldXNwCisJYnJhLncJCWZ1X29wZXJyCisKK2Z1X29wZXJyX3BfczoKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcKKwlibmUudwkJZnVfb3BlcnIKKworIyB0aGUgaW5zdHJ1Y3Rpb24gd2FzICJmbW92ZS5wIGZwbiwtKGE3KSIgZnJvbSBzdXBlcnZpc29yIG1vZGUuCisjIHRoZSBzdHJhdGVneSBpcyB0byBtb3ZlIHRoZSBleGNlcHRpb24gZnJhbWUgImRvd24iIDEyIGJ5dGVzLiB0aGVuLCB3ZQorIyBjYW4gc3RvcmUgdGhlIGRlZmF1bHQgcmVzdWx0IHdoZXJlIHRoZSBleGNlcHRpb24gZnJhbWUgd2FzLgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJbW92LncJCSYweDMwZDAsRVhDX1ZPRkYoJWE2KQkjIHZlY3RvciBvZmZzZXQgPSAweGQwCisJbW92LncJCSYweGUwMDQsMitGUF9TUkMoJWE2KQkjIHNldCBmc2F2ZSBzdGF0dXMKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIHJlc3RvcmUgc3JjIG9wZXJhbmQKKworCW1vdi5sCQkoJWE2KSwlYTYJCSMgcmVzdG9yZSBmcmFtZSBwb2ludGVyCisKKwltb3YubAkJTE9DQUxfU0laRStFWENfU1IoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUi0weGMoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFKzIrRVhDX1BDKCVzcCksTE9DQUxfU0laRSsyK0VYQ19QQy0weGMoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0VYQ19FQSglc3ApLExPQ0FMX1NJWkUrRVhDX0VBLTB4Yyglc3ApCisKKyMgbm93LCB3ZSBjb3B5IHRoZSBkZWZhdWx0IHJlc3VsdCB0byBpdHMgcHJvcGVyIGxvY2F0aW9uCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfRFNUX0VYKCVzcCksTE9DQUxfU0laRSsweDQoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9ISSglc3ApLExPQ0FMX1NJWkUrMHg4KCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfTE8oJXNwKSxMT0NBTF9TSVpFKzB4Yyglc3ApCisKKwlhZGQubAkJJkxPQ0FMX1NJWkUtMHg4LCVzcAorCisKKwlicmEubAkJX3JlYWxfb3BlcnIKKworZnVfaW5leF9wMjoKKwlidHN0CQkmMHg1LEVYQ19TUiglYTYpCisJYm5lLncJCWZ1X2luZXhfc19wMgorCisJbW92LmwJCUVYQ19BNyglYTYpLCVhMAorCW1vdi5sCQklYTAsJXVzcAorCWJyYS53CQlmdV9pbmV4CisKK2Z1X2luZXhfc19wMjoKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcKKwlibmUudwkJZnVfaW5leAorCisjIHRoZSBpbnN0cnVjdGlvbiB3YXMgImZtb3ZlLnAgZnBuLC0oYTcpIiBmcm9tIHN1cGVydmlzb3IgbW9kZS4KKyMgdGhlIHN0cmF0ZWd5IGlzIHRvIG1vdmUgdGhlIGV4Y2VwdGlvbiBmcmFtZSAiZG93biIgMTIgYnl0ZXMuIHRoZW4sIHdlCisjIGNhbiBzdG9yZSB0aGUgZGVmYXVsdCByZXN1bHQgd2hlcmUgdGhlIGV4Y2VwdGlvbiBmcmFtZSB3YXMuCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwltb3YudwkJJjB4MzBjNCxFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4YzQKKwltb3YudwkJJjB4ZTAwMSwyK0ZQX1NSQyglYTYpCSMgc2V0IGZzYXZlIHN0YXR1cworCisJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgcmVzdG9yZSBzcmMgb3BlcmFuZAorCisJbW92LmwJCSglYTYpLCVhNgkJIyByZXN0b3JlIGZyYW1lIHBvaW50ZXIKKworCW1vdi5sCQlMT0NBTF9TSVpFK0VYQ19TUiglc3ApLExPQ0FMX1NJWkUrRVhDX1NSLTB4Yyglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrMitFWENfUEMoJXNwKSxMT0NBTF9TSVpFKzIrRVhDX1BDLTB4Yyglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX0VBKCVzcCksTE9DQUxfU0laRStFWENfRUEtMHhjKCVzcCkKKworIyBub3csIHdlIGNvcHkgdGhlIGRlZmF1bHQgcmVzdWx0IHRvIGl0cyBwcm9wZXIgbG9jYXRpb24KKwltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfRVgoJXNwKSxMT0NBTF9TSVpFKzB4NCglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfRFNUX0hJKCVzcCksTE9DQUxfU0laRSsweDgoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9MTyglc3ApLExPQ0FMX1NJWkUrMHhjKCVzcCkKKworCWFkZC5sCQkmTE9DQUxfU0laRS0weDgsJXNwCisKKworCWJyYS5sCQlfcmVhbF9pbmV4CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBpZiB3ZSdyZSBzdHVmZmluZyBhIHNvdXJjZSBvcGVyYW5kIGJhY2sgaW50byBhbiBmc2F2ZSBmcmFtZSB0aGVuIHdlCisjIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgZm9yIHNpbmdsZSBvciBkb3VibGUgc291cmNlIG9wZXJhbmRzIHRoYXQgdGhlCisjIGZvcm1hdCBzdHVmZmVkIGlzIGFzIHdlaXJkIGFzIHRoZSBoYXJkd2FyZSB1c3VhbGx5IG1ha2VzIGl0LgorIworCWdsb2JhbAkJZnVuaW1wX3NrZXcKK2Z1bmltcF9za2V3OgorCWJmZXh0dQkJRVhDX0VYVFdPUkQoJWE2KXsmMzomM30sJWQwICMgZXh0cmFjdCBzcmMgc3BlY2lmaWVyCisJY21waS5iCQklZDAsJjB4MQkJIyB3YXMgc3JjIHNnbD8KKwliZXEuYgkJZnVuaW1wX3NrZXdfc2dsCQkjIHllcworCWNtcGkuYgkJJWQwLCYweDUJCSMgd2FzIHNyYyBkYmw/CisJYmVxLmIJCWZ1bmltcF9za2V3X2RibAkJIyB5ZXMKKwlydHMKKworZnVuaW1wX3NrZXdfc2dsOgorCW1vdi53CQlGUF9TUkNfRVgoJWE2KSwlZDAJIyBmZXRjaCBERU5PUk0gZXhwb25lbnQKKwlhbmRpLncJCSYweDdmZmYsJWQwCQkjIHN0cmlwIHNpZ24KKwliZXEuYgkJZnVuaW1wX3NrZXdfc2dsX25vdAorCWNtcGkudwkJJWQwLCYweDNmODAKKwliZ3QuYgkJZnVuaW1wX3NrZXdfc2dsX25vdAorCW5lZy53CQklZDAJCQkjIG1ha2UgZXhwb25lbnQgbmVnYXRpdmUKKwlhZGRpLncJCSYweDNmODEsJWQwCQkjIGZpbmQgYW10IHRvIHNoaWZ0CisJbW92LmwJCUZQX1NSQ19ISSglYTYpLCVkMQkjIGZldGNoIERFTk9STSBoaShtYW4pCisJbHNyLmwJCSVkMCwlZDEJCQkjIHNoaWZ0IGl0CisJYnNldAkJJjMxLCVkMQkJCSMgc2V0IGotYml0CisJbW92LmwJCSVkMSxGUF9TUkNfSEkoJWE2KQkjIGluc2VydCBuZXcgaGkobWFuKQorCWFuZGkudwkJJjB4ODAwMCxGUF9TUkNfRVgoJWE2KQkjIGNsZWFyIG9sZCBleHBvbmVudAorCW9yaS53CQkmMHgzZjgwLEZQX1NSQ19FWCglYTYpCSMgaW5zZXJ0IG5ldyAic2tld2VkIiBleHBvbmVudAorZnVuaW1wX3NrZXdfc2dsX25vdDoKKwlydHMKKworZnVuaW1wX3NrZXdfZGJsOgorCW1vdi53CQlGUF9TUkNfRVgoJWE2KSwlZDAJIyBmZXRjaCBERU5PUk0gZXhwb25lbnQKKwlhbmRpLncJCSYweDdmZmYsJWQwCQkjIHN0cmlwIHNpZ24KKwliZXEuYgkJZnVuaW1wX3NrZXdfZGJsX25vdAorCWNtcGkudwkJJWQwLCYweDNjMDAKKwliZ3QuYgkJZnVuaW1wX3NrZXdfZGJsX25vdAorCisJdHN0LmIJCUZQX1NSQ19FWCglYTYpCQkjIG1ha2UgImludGVybmFsIGZvcm1hdCIKKwlzbWkuYgkJMHgyK0ZQX1NSQyglYTYpCisJbW92LncJCSVkMCxGUF9TUkNfRVgoJWE2KQkjIGluc2VydCBleHBvbmVudCB3aXRoIGNsZWFyZWQgc2lnbgorCWNsci5sCQklZDAJCQkjIGNsZWFyIGcscixzCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gc3JjIG9wCisJbW92LncJCSYweDNjMDEsJWQxCQkjIHBhc3MgZGVub3JtIHRocmVzaG9sZAorCWJzci5sCQlkbnJtX2xwCQkJIyBkZW5vcm0gaXQKKwltb3YudwkJJjB4M2MwMCwlZDAJCSMgbmV3IGV4cG9uZW50CisJdHN0LmIJCTB4MitGUF9TUkMoJWE2KQkJIyBpcyBzaWduIHNldD8KKwliZXEuYgkJZnNzX2RibF9kZW5vcm1fZG9uZQkjIG5vCisJYnNldAkJJjE1LCVkMAkJCSMgc2V0IHNpZ24KK2Zzc19kYmxfZGVub3JtX2RvbmU6CisJYnNldAkJJjB4NyxGUF9TUkNfSEkoJWE2KQkjIHNldCBqLWJpdAorCW1vdi53CQklZDAsRlBfU1JDX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CitmdW5pbXBfc2tld19kYmxfbm90OgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlfbWVtX3dyaXRlMgorX21lbV93cml0ZTI6CisJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQorCWJlcS5sCQlfZG1lbV93cml0ZQorCW1vdi5sCQkweDAoJWEwKSxGUF9EU1RfRVgoJWE2KQorCW1vdi5sCQkweDQoJWEwKSxGUF9EU1RfSEkoJWE2KQorCW1vdi5sCQkweDgoJWEwKSxGUF9EU1RfTE8oJWE2KQorCWNsci5sCQklZDEKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfZnBzcF9lZmZhZGQoKTogMDYwRlBTUCBlbnRyeSBwb2ludCBmb3IgRlAgIlVuaW1wbGVtZW50ZWQJIworIwkJCWVmZmVjdGl2ZSBhZGRyZXNzIiBleGNlcHRpb24uCQkJIworIwkJCQkJCQkJCSMKKyMJVGhpcyBoYW5kbGVyIHNob3VsZCBiZSB0aGUgZmlyc3QgY29kZSBleGVjdXRlZCB1cG9uIHRha2luZyB0aGUJIworIwlGUCBVbmltcGxlbWVudGVkIEVmZmVjdGl2ZSBBZGRyZXNzIGV4Y2VwdGlvbiBpbiBhbiBvcGVyYXRpbmcJIworIwlzeXN0ZW0uCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfaW1lbV9yZWFkX2xvbmcoKSAtIHJlYWQgaW5zdHJ1Y3Rpb24gbG9uZ3dvcmQJCQkjCisjCWZpeF9za2V3ZWRfb3BzKCkgLSBhZGp1c3Qgc3JjIG9wZXJhbmQgaW4gZnNhdmUgZnJhbWUJCSMKKyMJc2V0X3RhZ194KCkgLSBkZXRlcm1pbmUgb3B0eXBlIG9mIHNyYy9kc3Qgb3BlcmFuZHMJCSMKKyMJc3RvcmVfZnByZWcoKSAtIHN0b3JlIG9wY2xhc3MgMCBvciAyIHJlc3VsdCB0byBGUCByZWdmaWxlCSMKKyMJdW5ub3JtX2ZpeCgpIC0gY2hhbmdlIFVOTk9STSBvcGVyYW5kcyB0byBOT1JNIG9yIFpFUk8JCSMKKyMJbG9hZF9mcG4yKCkgLSBsb2FkIGRzdCBvcGVyYW5kIGZyb20gRlAgcmVnZmlsZQkJCSMKKyMJdGJsX3Vuc3VwcCAtIGFkZCBvZiB0YWJsZSBvZiBlbXVsYXRpb24gcm91dGluZXMgZm9yIG9wY2xhc3MgMCwyCSMKKyMJZGVjYmluKCkgLSBjb252ZXJ0IHBhY2tlZCBkYXRhIHRvIEZQIGJpbmFyeSBkYXRhCQkjCisjCV9yZWFsX2ZwdV9kaXNhYmxlZCgpIC0gImNhbGxvdXQiIGZvciAiRlBVIGRpc2FibGVkIiBleGNlcHRpb24JIworIwlfcmVhbF9hY2Nlc3MoKSAtICJjYWxsb3V0IiBmb3IgYWNjZXNzIGVycm9yIGV4Y2VwdGlvbgkJIworIwlfbWVtX3JlYWQoKSAtIHJlYWQgZXh0ZW5kZWQgaW1tZWRpYXRlIG9wZXJhbmQgZnJvbSBtZW1vcnkJIworIwlfZnBzcF9kb25lKCkgLSAiY2FsbG91dCIgZm9yIGV4aXQ7IHdvcmsgYWxsIGRvbmUJCSMKKyMJX3JlYWxfdHJhY2UoKSAtICJjYWxsb3V0IiBmb3IgVHJhY2UgZW5hYmxlZCBleGNlcHRpb24JCSMKKyMJZm1vdm1fZHluYW1pYygpIC0gZW11bGF0ZSBkeW5hbWljIGZtb3ZtIGluc3RydWN0aW9uCQkjCisjCWZtb3ZtX2N0cmwoKSAtIGVtdWxhdGUgZm1vdm0gY29udHJvbCBpbnN0cnVjdGlvbgkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIHRoZSAiVW5pbXBsZW1lbnRlZCA8ZWE+IiBzdGsgZnJhbWUJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSWYgYWNjZXNzIGVycm9yOgkJCQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIGNoYW5nZWQgdG8gYW4gYWNjZXNzIGVycm9yIHN0YWNrIGZyYW1lCSMKKyMJSWYgRlBVIGRpc2FibGVkOgkJCQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIGNoYW5nZWQgdG8gYW4gRlBVIGRpc2FibGVkIHN0YWNrIGZyYW1lCSMKKyMJSWYgVHJhY2UgZXhjZXB0aW9uIGVuYWJsZWQ6CQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBpcyBjaGFuZ2VkIHRvIGEgVHJhY2UgZXhjZXB0aW9uIHN0YWNrIGZyYW1lCSMKKyMJRWxzZTogKG5vcm1hbCBjYXNlKQkJCQkJCSMKKyMJLSBOb25lIChjb3JyZWN0IHJlc3VsdCBoYXMgYmVlbiBzdG9yZWQgYXMgYXBwcm9wcmlhdGUpCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGlzIGV4Y2VwdGlvbiBoYW5kbGVzIDMgdHlwZXMgb2Ygb3BlcmF0aW9uczoJCQkjCisjICgxKSBGUCBJbnN0cnVjdGlvbnMgdXNpbmcgZXh0ZW5kZWQgcHJlY2lzaW9uIG9yIHBhY2tlZCBpbW1lZGlhdGUJIworIyAgICAgYWRkcmVzc2luZyBtb2RlLgkJCQkJCQkjCisjICgyKSBUaGUgImZtb3ZtLngiIGluc3RydWN0aW9uIHcvIGR5bmFtaWMgcmVnaXN0ZXIgc3BlY2lmaWNhdGlvbi4JIworIyAoMykgVGhlICJmbW92bS5sIiBpbnN0cnVjdGlvbiB3LyAyIG9yIDMgY29udHJvbCByZWdpc3RlcnMuCQkjCisjCQkJCQkJCQkJIworIwlGb3IgaW1tZWRpYXRlIGRhdGEgb3BlcmF0aW9ucywgdGhlIGRhdGEgaXMgcmVhZCBpbiB3LyBhCQkjCisjIF9tZW1fcmVhZCgpICJjYWxsb3V0IiwgY29udmVydGVkIHRvIEZQIGJpbmFyeSAoaWYgcGFja2VkKSwgYW5kIHVzZWQJIworIyBhcyB0aGUgc291cmNlIG9wZXJhbmQgdG8gdGhlIGluc3RydWN0aW9uIHNwZWNpZmllZCBieSB0aGUgaW5zdHJ1Y3Rpb24JIworIyB3b3JkLiBJZiBubyBGUCBleGNlcHRpb24gc2hvdWxkIGJlIHJlcG9ydGVkIGFkcyBhIHJlc3VsdCBvZiB0aGUJIworIyBlbXVsYXRpb24sIHRoZW4gdGhlIHJlc3VsdCBpcyBzdG9yZWQgdG8gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGFuZAkjCisjIHRoZSBoYW5kbGVyIGV4aXRzIHRocm91Z2ggX2Zwc3BfZG9uZSgpLiBJZiBhbiBlbmFibGVkIGV4YyBoYXMgYmVlbgkjCisjIHNpZ25hbGxlZCBhcyBhIHJlc3VsdCBvZiBlbXVsYXRpb24sIHRoZW4gYW4gZnNhdmUgc3RhdGUgZnJhbWUJCSMKKyMgY29ycmVzcG9uZGluZyB0byB0aGUgRlAgZXhjZXB0aW9uIHR5cGUgbXVzdCBiZSBlbnRlcmVkIGludG8gdGhlIDA2MAkjCisjIEZQVSBiZWZvcmUgZXhpdGluZy4gSW4gZWl0aGVyIHRoZSBlbmFibGVkIG9yIGRpc2FibGVkIGNhc2VzLCB3ZQkjCisjIG11c3QgYWxzbyBjaGVjayBpZiBhIFRyYWNlIGV4Y2VwdGlvbiBpcyBwZW5kaW5nLCBpbiB3aGljaCBjYXNlLCB3ZQkjCisjIG11c3QgY3JlYXRlIGEgVHJhY2UgZXhjZXB0aW9uIHN0YWNrIGZyYW1lIGZyb20gdGhlIGN1cnJlbnQgZXhjZXB0aW9uCSMKKyMgc3RhY2sgZnJhbWUuIElmIG5vIFRyYWNlIGlzIHBlbmRpbmcsIHdlIHNpbXBseSBleGl0IHRocm91Z2gJCSMKKyMgX2Zwc3BfZG9uZSgpLgkJCQkJCQkJIworIwlGb3IgImZtb3ZtLngiLCBjYWxsIHRoZSByb3V0aW5lIGZtb3ZtX2R5bmFtaWMoKSB3aGljaCB3aWxsCSMKKyMgZGVjb2RlIGFuZCBlbXVsYXRlIHRoZSBpbnN0cnVjdGlvbi4gTm8gRlAgZXhjZXB0aW9ucyBjYW4gYmUgcGVuZGluZwkjCisjIGFzIGEgcmVzdWx0IG9mIHRoaXMgb3BlcmF0aW9uIGVtdWxhdGlvbi4gQSBUcmFjZSBleGNlcHRpb24gY2FuIGJlCSMKKyMgcGVuZGluZywgdGhvdWdoLCB3aGljaCBtZWFucyB0aGUgY3VycmVudCBzdGFjayBmcmFtZSBtdXN0IGJlIGNoYW5nZWQJIworIyB0byBhIFRyYWNlIHN0YWNrIGZyYW1lIGFuZCBhbiBleGl0IG1hZGUgdGhyb3VnaCBfcmVhbF90cmFjZSgpLgkjCisjIEZvciB0aGUgY2FzZSBvZiAiZm1vdm0ueCBEbiwtKGE3KSIsIHdoZXJlIHRoZSBvZmZlbmRpbmcgaW5zdHJ1Y3Rpb24JIworIyB3YXMgZXhlY3V0ZWQgZnJvbSBzdXBlcnZpc29yIG1vZGUsIHRoaXMgaGFuZGxlciBtdXN0IHN0b3JlIHRoZSBGUAkjCisjIHJlZ2lzdGVyIGZpbGUgdmFsdWVzIHRvIHRoZSBzeXN0ZW0gc3RhY2sgYnkgaXRzZWxmIHNpbmNlCQkjCisjIGZtb3ZtX2R5bmFtaWMoKSBjYW4ndCBoYW5kbGUgdGhpcy4gQSBub3JtYWwgZXhpdCBpcyBtYWRlIHRocm91Z2gJIworIyBmcHNwX2RvbmUoKS4JCQkJCQkJCSMKKyMJRm9yICJmbW92bS5sIiwgZm1vdm1fY3RybCgpIGlzIHVzZWQgdG8gZW11bGF0ZSB0aGUgaW5zdHJ1Y3Rpb24uCSMKKyMgQWdhaW4sIGEgVHJhY2UgZXhjZXB0aW9uIG1heSBiZSBwZW5kaW5nIGFuZCBhbiBleGl0IG1hZGUgdGhyb3VnaAkjCisjIF9yZWFsX3RyYWNlKCkuIEVsc2UsIGEgbm9ybWFsIGV4aXQgaXMgbWFkZSB0aHJvdWdoIF9mcHNwX2RvbmUoKS4JIworIwkJCQkJCQkJCSMKKyMJQmVmb3JlIGFueSBvZiB0aGUgYWJvdmUgaXMgYXR0ZW1wdGVkLCBpdCBtdXN0IGJlIGNoZWNrZWQgdG8JIworIyBzZWUgaWYgdGhlIEZQVSBpcyBkaXNhYmxlZC4gU2luY2UgdGhlICJVbmltcCA8ZWE+IiBleGNlcHRpb24gaXMgdGFrZW4JIworIyBiZWZvcmUgdGhlICJGUFUgZGlzYWJsZWQiIGV4Y2VwdGlvbiwgYnV0IHRoZSAiRlBVIGRpc2FibGVkIiBleGNlcHRpb24JIworIyBoYXMgaGlnaGVyIHByaW9yaXR5LCB3ZSBjaGVjayB0aGUgZGlzYWJsZWQgYml0IGluIHRoZSBQQ1IuIElmIHNldCwJIworIyB0aGVuIHdlIG11c3QgY3JlYXRlIGFuIDggd29yZCAiRlBVIGRpc2FibGVkIiBleGNlcHRpb24gc3RhY2sgZnJhbWUJIworIyBmcm9tIHRoZSBjdXJyZW50IDQgd29yZCBleGNlcHRpb24gc3RhY2sgZnJhbWUuIFRoaXMgaW5jbHVkZXMJCSMKKyMgcmVwcm9kdWNpbmcgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzIG9mIHRoZSBpbnN0cnVjdGlvbiB0byBwdXQgb24gdGhlCSMKKyMgbmV3IHN0YWNrIGZyYW1lLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwlJbiB0aGUgcHJvY2VzcyBvZiBhbGwgZW11bGF0aW9uIHdvcmssIGlmIGEgX21lbV9yZWFkKCkJCSMKKyMgImNhbGxvdXQiIHJldHVybnMgYSBmYWlsaW5nIHJlc3VsdCBpbmRpY2F0aW5nIGFuIGFjY2VzcyBlcnJvciwgdGhlbgkjCisjIHdlIG11c3QgY3JlYXRlIGFuIGFjY2VzcyBlcnJvciBzdGFjayBmcmFtZSBmcm9tIHRoZSBjdXJyZW50IHN0YWNrCSMKKyMgZnJhbWUuIFRoaXMgaW5mb3JtYXRpb24gaW5jbHVkZXMgYSBmYXVsdGluZyBhZGRyZXNzIGFuZCBhIGZhdWx0LQkjCisjIHN0YXR1cy1sb25nd29yZC4gVGhlc2UgYXJlIGNyZWF0ZWQgd2l0aGluIHRoaXMgaGFuZGxlci4JCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCV9mcHNwX2VmZmFkZAorX2Zwc3BfZWZmYWRkOgorCisjIFRoaXMgZXhjZXB0aW9uIHR5cGUgdGFrZXMgcHJpb3JpdHkgb3ZlciB0aGUgIkxpbmUgRiBFbXVsYXRvciIKKyMgZXhjZXB0aW9uLiBUaGVyZWZvcmUsIHRoZSBGUFUgY291bGQgYmUgZGlzYWJsZWQgd2hlbiBlbnRlcmluZyBoZXJlLgorIyBTbywgd2UgbXVzdCBjaGVjayB0byBzZWUgaWYgaXQncyBkaXNhYmxlZCBhbmQgaGFuZGxlIHRoYXQgY2FzZSBzZXBhcmF0ZWx5LgorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgZDAKKwltb3ZjCQklcGNyLCVkMAkJIyBsb2FkIHByb2MgY3IKKwlidHN0CQkmMHgxLCVkMAkJIyBpcyBGUFUgZGlzYWJsZWQ/CisJYm5lLncJCWllYV9kaXNhYmxlZAkJIyB5ZXMKKwltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIGQwCisKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCSMgaW5pdCBzdGFjayBmcmFtZQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQUkVHUyglYTYpCSMgc2F2ZSBmcDAtZnAxIG9uIHN0YWNrCisKKyMgUEMgb2YgaW5zdHJ1Y3Rpb24gdGhhdCB0b29rIHRoZSBleGNlcHRpb24gaXMgdGhlIFBDIGluIHRoZSBmcmFtZQorCW1vdi5sCQlFWENfUEMoJWE2KSxFWENfRVhUV1BUUiglYTYpCisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggdGhlIGluc3RydWN0aW9uIHdvcmRzCisJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikJIyBzdG9yZSBPUFdPUkQgYW5kIEVYVFdPUkQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJdHN0LncJCSVkMAkJCSMgaXMgb3BlcmF0aW9uIGZtb3ZlbT8KKwlibWkudwkJaWVhX2Ztb3ZtCQkjIHllcworCisjCisjIGhlcmUsIHdlIHdpbGwgaGF2ZToKKyMJZmFicwlmZGFicwlmc2FicwkJZmFjb3MJCWZtb2QKKyMJZmFkZAlmZGFkZAlmc2FkZAkJZmFzaW4JCWZyZW0KKyMJZmNtcAkJCQlmYXRhbgkJZnNjYWxlCisjCWZkaXYJZmRkaXYJZnNkaXYJCWZhdGFuaAkJZnNpbgorIwlmaW50CQkJCWZjb3MJCWZzaW5jb3MKKyMJZmludHJ6CQkJCWZjb3NoCQlmc2luaAorIwlmbW92ZQlmZG1vdmUJZnNtb3ZlCQlmZXRveAkJZnRhbgorIwlmbXVsCWZkbXVsCWZzbXVsCQlmZXRveG0xCQlmdGFuaAorIwlmbmVnCWZkbmVnCWZzbmVnCQlmZ2V0ZXhwCQlmdGVudG94CisjCWZzZ2xkaXYJCQkJZmdldG1hbgkJZnR3b3RveAorIwlmc2dsbXVsCQkJCWZsb2cxMAorIwlmc3FydAkJCQlmbG9nMgorIwlmc3ViCWZkc3ViCWZzc3ViCQlmbG9nbgorIwlmdHN0CQkJCWZsb2ducDEKKyMgd2hpY2ggY2FuIGFsbCB1c2UgZjxvcD4ue3gscH0KKyMgc28sIG5vdyBpdCdzIGltbWVkaWF0ZSBkYXRhIGV4dGVuZGVkIHByZWNpc2lvbiBBTkQgUEFDS0VEIEZPUk1BVCEKKyMKK2llYV9vcDoKKwlhbmRpLmwJCSYweDAwZmYwMGZmLFVTRVJfRlBTUiglYTYpCisKKwlidHN0CQkmMHhhLCVkMAkJIyBpcyBzcmMgZm10IHggb3IgcD8KKwlibmUuYgkJaWVhX29wX3BhY2sJCSMgcGFja2VkCisKKworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byAjPGRhdGE+CisJbGVhCQlGUF9TUkMoJWE2KSwlYTEJCSMgcGFzczogcHRyIHRvIHN1cGVyIGFkZHIKKwltb3YubAkJJjB4YywlZDAJCSMgcGFzczogMTIgYnl0ZXMKKwlic3IubAkJX2ltZW1fcmVhZAkJIyByZWFkIGV4dGVuZGVkIGltbWVkaWF0ZQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS53CQlpZWFfaWFjYwkJIyB5ZXMKKworCWJyYS5iCQlpZWFfb3Bfc2V0c3JjCisKK2llYV9vcF9wYWNrOgorCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgcGFzczogcHRyIHRvICM8ZGF0YT4KKwlsZWEJCUZQX1NSQyglYTYpLCVhMQkJIyBwYXNzOiBwdHIgdG8gc3VwZXIgZHN0CisJbW92LmwJCSYweGMsJWQwCQkjIHBhc3M6IDEyIGJ5dGVzCisJYnNyLmwJCV9pbWVtX3JlYWQJCSMgcmVhZCBwYWNrZWQgb3BlcmFuZAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS53CQlpZWFfaWFjYwkJIyB5ZXMKKworIyBUaGUgcGFja2VkIG9wZXJhbmQgaXMgYW4gSU5GIG9yIGEgTkFOIGlmIHRoZSBleHBvbmVudCBmaWVsZCBpcyBhbGwgb25lcy4KKwliZmV4dHUJCUZQX1NSQyglYTYpeyYxOiYxNX0sJWQwCSMgZ2V0IGV4cAorCWNtcGkudwkJJWQwLCYweDdmZmYJCSMgSU5GIG9yIE5BTj8KKwliZXEuYgkJaWVhX29wX3NldHNyYwkJIyBvcGVyYW5kIGlzIGFuIElORiBvciBOQU4KKworIyBUaGUgcGFja2VkIG9wZXJhbmQgaXMgYSB6ZXJvIGlmIHRoZSBtYW50aXNzYSBpcyBhbGwgemVybywgZWxzZSBpdCdzCisjIGEgbm9ybWFsIHBhY2tlZCBvcC4KKwltb3YuYgkJMytGUF9TUkMoJWE2KSwlZDAJIyBnZXQgYnl0ZSA0CisJYW5kaS5iCQkmMHgwZiwlZDAJCSMgY2xlYXIgYWxsIGJ1dCBsYXN0IG55YmJsZQorCWJuZS5iCQlpZWFfb3BfZ3Bfbm90X3NwZWMJIyBub3QgYSB6ZXJvCisJdHN0LmwJCUZQX1NSQ19ISSglYTYpCQkjIGlzIGx3IDIgemVybz8KKwlibmUuYgkJaWVhX29wX2dwX25vdF9zcGVjCSMgbm90IGEgemVybworCXRzdC5sCQlGUF9TUkNfTE8oJWE2KQkJIyBpcyBsdyAzIHplcm8/CisJYmVxLmIJCWllYV9vcF9zZXRzcmMJCSMgb3BlcmFuZCBpcyBhIFpFUk8KK2llYV9vcF9ncF9ub3Rfc3BlYzoKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gcGFja2VkIG9wCisJYnNyLmwJCWRlY2JpbgkJCSMgY29udmVydCB0byBleHRlbmRlZAorCWZtb3ZtLngJCSYweDgwLEZQX1NSQyglYTYpCSMgbWFrZSB0aGlzIHRoZSBzcmNvcAorCitpZWFfb3Bfc2V0c3JjOgorCWFkZGkubAkJJjB4YyxFWENfRVhUV1BUUiglYTYpCSMgdXBkYXRlIGV4dGVuc2lvbiB3b3JkIHBvaW50ZXIKKworIyBGUF9TUkMgbm93IGhvbGRzIHRoZSBzcmMgb3BlcmFuZC4KKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCisJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCQkjIGNvdWxkIGJlIEFOWVRISU5HISEhCisJY21waS5iCQklZDAsJlVOTk9STQkJIyBpcyBvcGVyYW5kIGFuIFVOTk9STT8KKwlibmUuYgkJaWVhX29wX2dldGRzdAkJIyBubworCWJzci5sCQl1bm5vcm1fZml4CQkjIHllczsgY29udmVydCB0byBOT1JNL0RFTk9STS9aRVJPCisJbW92LmIJCSVkMCxTVEFHKCVhNikJCSMgc2V0IG5ldyBvcHR5cGUgdGFnCitpZWFfb3BfZ2V0ZHN0OgorCWNsci5iCQlTVE9SRV9GTEcoJWE2KQkJIyBjbGVhciAic3RvcmUgcmVzdWx0IiBib29sZWFuCisKKwlidHN0CQkmMHg1LDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3BlcmF0aW9uIG1vbmFkaWMgb3IgZHlhZGljPworCWJlcS5iCQlpZWFfb3BfZXh0cmFjdAkJIyBtb25hZGljCisJYnRzdAkJJjB4NCwxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wZXJhdGlvbiBmc2luY29zLGZ0c3QsZmNtcD8KKwlibmUuYgkJaWVhX29wX3NwZWMJCSMgeWVzCisKK2llYV9vcF9sb2FkZHN0OgorCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAgIyBmZXRjaCBkc3QgcmVnbm8KKwlic3IubAkJbG9hZF9mcG4yCQkjIGxvYWQgZHN0IG9wZXJhbmQKKworCWxlYQkJRlBfRFNUKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBkc3Qgb3AKKwlic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxEVEFHKCVhNikJCSMgY291bGQgYmUgQU5ZVEhJTkchISEKKwljbXBpLmIJCSVkMCwmVU5OT1JNCQkjIGlzIG9wZXJhbmQgYW4gVU5OT1JNPworCWJuZS5iCQlpZWFfb3BfZXh0cmFjdAkJIyBubworCWJzci5sCQl1bm5vcm1fZml4CQkjIHllczsgY29udmVydCB0byBOT1JNL0RFTk9STS9aRVJPCisJbW92LmIJCSVkMCxEVEFHKCVhNikJCSMgc2V0IG5ldyBvcHR5cGUgdGFnCisJYnJhLmIJCWllYV9vcF9leHRyYWN0CisKKyMgdGhlIG9wZXJhdGlvbiBpcyBmc2luY29zLCBmdHN0LCBvciBmY21wLiBvbmx5IGZjbXAgaXMgZHlhZGljCitpZWFfb3Bfc3BlYzoKKwlidHN0CQkmMHgzLDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3BlcmF0aW9uIGZzaW5jb3M/CisJYmVxLmIJCWllYV9vcF9leHRyYWN0CQkjIHllcworIyBub3csIHdlJ3JlIGxlZnQgd2l0aCBmdHN0IGFuZCBmY21wLiBzbywgZmlyc3QgbGV0J3MgdGFnIHRoZW0gc28gdGhhdCB0aGV5IGRvbid0CisjIHN0b3JlIGEgcmVzdWx0LiB0aGVuLCBvbmx5IGZjbXAgd2lsbCBicmFuY2ggYmFjayBhbmQgcGljayB1cCBhIGRzdCBvcGVyYW5kLgorCXN0CQlTVE9SRV9GTEcoJWE2KQkJIyBkb24ndCBzdG9yZSBhIGZpbmFsIHJlc3VsdAorCWJ0c3QJCSYweDEsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcGVyYXRpb24gZmNtcD8KKwliZXEuYgkJaWVhX29wX2xvYWRkc3QJCSMgeWVzCisKK2llYV9vcF9leHRyYWN0OgorCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzczogcm5kIG1vZGUscHJlYworCisJbW92LmIJCTErRVhDX0NNRFJFRyglYTYpLCVkMQorCWFuZGkudwkJJjB4MDA3ZiwlZDEJCSMgZXh0cmFjdCBleHRlbnNpb24KKworCWZtb3YubAkJJjB4MCwlZnBjcgorCWZtb3YubAkJJjB4MCwlZnBzcgorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlsZWEJCUZQX0RTVCglYTYpLCVhMQorCisJbW92LmwJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS53KjQpLCVkMSAjIGZldGNoIHJvdXRpbmUgYWRkcgorCWpzcgkJKHRibF91bnN1cHAubCwlcGMsJWQxLmwqMSkKKworIworIyBFeGNlcHRpb25zIGluIG9yZGVyIG9mIHByZWNlZGVuY2U6CisjCUJTVU4JOiBub25lCisjCVNOQU4JOiBhbGwgb3BlcmF0aW9ucworIwlPUEVSUgk6IGFsbCByZWctcmVnIG9yIG1lbS1yZWcgb3BlcmF0aW9ucyB0aGF0IGNhbiBub3JtYWxseSBvcGVycgorIwlPVkZMCTogc2FtZSBhcyBPUEVSUgorIwlVTkZMCTogc2FtZSBhcyBPUEVSUgorIwlEWgk6IHNhbWUgYXMgT1BFUlIKKyMJSU5FWDIJOiBzYW1lIGFzIE9QRVJSCisjCUlORVgxCTogYWxsIHBhY2tlZCBpbW1lZGlhdGUgb3BlcmF0aW9ucworIworCisjIHdlIGRldGVybWluZSB0aGUgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24oaWYgYW55KSBzZXQgYnkgdGhlCisjIGVtdWxhdGlvbiByb3V0aW5lIHRoYXQgaGFzIGFsc28gYmVlbiBlbmFibGVkIGJ5IHRoZSB1c2VyLgorCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMAkjIGZldGNoIGV4Y2VwdGlvbnMgZW5hYmxlZAorCWJuZS5iCQlpZWFfb3BfZW5hCQkjIHNvbWUgYXJlIGVuYWJsZWQKKworIyBub3csIHdlIHNhdmUgdGhlIHJlc3VsdCwgdW5sZXNzLCBvZiBjb3Vyc2UsIHRoZSBvcGVyYXRpb24gd2FzIGZ0c3Qgb3IgZmNtcC4KKyMgdGhlc2UgZG9uJ3Qgc2F2ZSByZXN1bHRzLgoraWVhX29wX3NhdmU6CisJdHN0LmIJCVNUT1JFX0ZMRyglYTYpCQkjIGRvZXMgdGhpcyBvcCBzdG9yZSBhIHJlc3VsdD8KKwlibmUuYgkJaWVhX29wX2V4aXQxCQkjIGV4aXQgd2l0aCBubyBmcmVzdG9yZQorCitpZWFfb3Bfc3RvcmU6CisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMCAjIGZldGNoIGRzdCByZWdubworCWJzci5sCQlzdG9yZV9mcHJlZwkJIyBzdG9yZSB0aGUgcmVzdWx0CisKK2llYV9vcF9leGl0MToKKwltb3YubAkJRVhDX1BDKCVhNiksVVNFUl9GUElBUiglYTYpICMgc2V0IEZQSUFSIHRvICJDdXJyZW50IFBDIgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLEVYQ19QQyglYTYpICMgc2V0ICJOZXh0IFBDIiBpbiBleGMgZnJhbWUKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CQkJIyB1bnJhdmVsIHRoZSBmcmFtZQorCisJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBvbj8KKwlibmUudwkJaWVhX29wX3RyYWNlCQkjIHllcworCisJYnJhLmwJCV9mcHNwX2RvbmUJCSMgZXhpdCB0byBvcworCitpZWFfb3BfZW5hOgorCWFuZC5iCQlGUFNSX0VYQ0VQVCglYTYpLCVkMAkjIGtlZXAgb25seSBvbmVzIGVuYWJsZSBhbmQgc2V0CisJYmZmZm8JCSVkMHsmMjQ6Jjh9LCVkMAkJIyBmaW5kIGhpZ2hlc3QgcHJpb3JpdHkgZXhjZXB0aW9uCisJYm5lLmIJCWllYV9vcF9leGMJCSMgYXQgbGVhc3Qgb25lIHdhcyBzZXQKKworIyBubyBleGNlcHRpb24gb2NjdXJyZWQuIG5vdywgZGlkIGEgZGlzYWJsZWQsIGV4YWN0IG92ZXJmbG93IG9jY3VyIHdpdGggaW5leGFjdAorIyBlbmFibGVkPyBpZiBzbywgdGhlbiB3ZSBoYXZlIHRvIHN0dWZmIGFuIG92ZXJmbG93IGZyYW1lIGludG8gdGhlIEZQVS4KKwlidHN0CQkmb3ZmbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGRpZCBvdmVyZmxvdyBvY2N1cj8KKwliZXEuYgkJaWVhX29wX3NhdmUKKworaWVhX29wX292Zmw6CisJYnRzdAkJJmluZXgyX2JpdCxGUENSX0VOQUJMRSglYTYpICMgaXMgaW5leGFjdCBlbmFibGVkPworCWJlcS5iCQlpZWFfb3Bfc3RvcmUJCSMgbm8KKwlicmEuYgkJaWVhX29wX2V4Y19vdmZsCQkjIHllcworCisjIGFuIGVuYWJsZWQgZXhjZXB0aW9uIG9jY3VycmVkLiB3ZSBoYXZlIHRvIGluc2VydCB0aGUgZXhjZXB0aW9uIHR5cGUgYmFjayBpbnRvCisjIHRoZSBtYWNoaW5lLgoraWVhX29wX2V4YzoKKwlzdWJpLmwJCSYyNCwlZDAJCQkjIGZpeCBvZmZzZXQgdG8gYmUgMC04CisJY21waS5iCQklZDAsJjB4NgkJIyBpcyBleGNlcHRpb24gSU5FWD8KKwlibmUuYgkJaWVhX29wX2V4Y19mb3JjZQkjIG5vCisKKyMgdGhlIGVuYWJsZWQgZXhjZXB0aW9uIHdhcyBpbmV4YWN0LiBzbywgaWYgaXQgb2NjdXJzIHdpdGggYW4gb3ZlcmZsb3cKKyMgb3IgdW5kZXJmbG93IHRoYXQgd2FzIGRpc2FibGVkLCB0aGVuIHdlIGhhdmUgdG8gZm9yY2UgYW4gb3ZlcmZsb3cgb3IKKyMgdW5kZXJmbG93IGZyYW1lLgorCWJ0c3QJCSZvdmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgZGlkIG92ZXJmbG93IG9jY3VyPworCWJuZS5iCQlpZWFfb3BfZXhjX292ZmwJCSMgeWVzCisJYnRzdAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBkaWQgdW5kZXJmbG93IG9jY3VyPworCWJuZS5iCQlpZWFfb3BfZXhjX3VuZmwJCSMgeWVzCisKK2llYV9vcF9leGNfZm9yY2U6CisJbW92LncJCSh0YmxfaWVhX2V4Y2VwdC5iLCVwYywlZDAudyoyKSwyK0ZQX1NSQyglYTYpCisJYnJhLmIJCWllYV9vcF9leGl0MgkJIyBleGl0IHdpdGggZnJlc3RvcmUKKwordGJsX2llYV9leGNlcHQ6CisJc2hvcnQJCTB4ZTAwMiwgMHhlMDA2LCAweGUwMDQsIDB4ZTAwNQorCXNob3J0CQkweGUwMDMsIDB4ZTAwMiwgMHhlMDAxLCAweGUwMDEKKworaWVhX29wX2V4Y19vdmZsOgorCW1vdi53CQkmMHhlMDA1LDIrRlBfU1JDKCVhNikKKwlicmEuYgkJaWVhX29wX2V4aXQyCisKK2llYV9vcF9leGNfdW5mbDoKKwltb3YudwkJJjB4ZTAwMywyK0ZQX1NSQyglYTYpCisKK2llYV9vcF9leGl0MjoKKwltb3YubAkJRVhDX1BDKCVhNiksVVNFUl9GUElBUiglYTYpICMgc2V0IEZQSUFSIHRvICJDdXJyZW50IFBDIgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLEVYQ19QQyglYTYpICMgc2V0ICJOZXh0IFBDIiBpbiBleGMgZnJhbWUKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgcmVzdG9yZSBleGNlcHRpb25hbCBzdGF0ZQorCisJdW5sawkJJWE2CQkJIyB1bnJhdmVsIHRoZSBmcmFtZQorCisJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBvbj8KKwlibmUuYgkJaWVhX29wX3RyYWNlCQkjIHllcworCisJYnJhLmwJCV9mcHNwX2RvbmUJCSMgZXhpdCB0byBvcworCisjCisjIFRoZSBvcGNsYXNzIHR3byBpbnN0cnVjdGlvbiB0aGF0IHRvb2sgYW4gIlVuaW1wbGVtZW50ZWQgRWZmZWN0aXZlIEFkZHJlc3MiCisjIGV4Y2VwdGlvbiB3YXMgYmVpbmcgdHJhY2VkLiBNYWtlIHRoZSAiY3VycmVudCIgUEMgdGhlIEZQSUFSIGFuZCBwdXQgaXQgaW4KKyMgdGhlIHRyYWNlIHN0YWNrIGZyYW1lIHRoZW4ganVtcCB0byBfcmVhbF90cmFjZSgpLgorIworIwkJIFVOSU1QIEVBIEZSQU1FCQkgICBUUkFDRSBGUkFNRQorIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJCSogMHgwICogIDB4MGYwCSoJKiAgICBDdXJyZW50CSoKKyMJCSoqKioqKioqKioqKioqKioqCSogICAgICBQQwkqCisjCQkqICAgIEN1cnJlbnQJKgkqKioqKioqKioqKioqKioqKgorIwkJKiAgICAgIFBDCSoJKiAweDIgKiAgMHgwMjQJKgorIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJCSogICAgICBTUgkqCSogICAgIE5leHQJKgorIwkJKioqKioqKioqKioqKioqKioJKiAgICAgIFBDCSoKKyMJCQkJCSoqKioqKioqKioqKioqKioqCisjCQkJCQkqICAgICAgU1IJKgorIwkJCQkJKioqKioqKioqKioqKioqKioKK2llYV9vcF90cmFjZToKKwltb3YubAkJKCVzcCksLSglc3ApCQkjIHNoaWZ0IHN0YWNrIGZyYW1lICJkb3duIgorCW1vdi53CQkweDgoJXNwKSwweDQoJXNwKQorCW1vdi53CQkmMHgyMDI0LDB4Niglc3ApCSMgc3RrIGZtdCA9IDB4Mjsgdm9mZiA9IDB4MDI0CisJZm1vdi5sCQklZnBpYXIsMHg4KCVzcCkJCSMgIkN1cnJlbnQgUEMiIGlzIGluIEZQSUFSCisKKwlicmEubAkJX3JlYWxfdHJhY2UKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaWVhX2Ztb3ZtOgorCWJ0c3QJCSYxNCwlZDAJCQkjIGN0cmwgb3IgZGF0YSByZWcKKwliZXEudwkJaWVhX2Ztb3ZtX2N0cmwKKworaWVhX2Ztb3ZtX2RhdGE6CisKKwlidHN0CQkmMHg1LEVYQ19TUiglYTYpCSMgdXNlciBvciBzdXBlcnZpc29yIG1vZGUKKwlibmUuYgkJaWVhX2Ztb3ZtX2RhdGFfcworCitpZWFfZm1vdm1fZGF0YV91OgorCW1vdi5sCQkldXNwLCVhMAorCW1vdi5sCQklYTAsRVhDX0E3KCVhNikJCSMgc3RvcmUgY3VycmVudCBhNworCWJzci5sCQlmbW92bV9keW5hbWljCQkjIGRvIGR5bmFtaWMgZm1vdm0KKwltb3YubAkJRVhDX0E3KCVhNiksJWEwCQkjIGxvYWQgcG9zc2libHkgbmV3IGE3CisJbW92LmwJCSVhMCwldXNwCQkjIHVwZGF0ZSB1c3AKKwlicmEudwkJaWVhX2Ztb3ZtX2V4aXQKKworaWVhX2Ztb3ZtX2RhdGFfczoKKwljbHIuYgkJU1BDT05EX0ZMRyglYTYpCisJbGVhCQkweDIrRVhDX1ZPRkYoJWE2KSwlYTAKKwltb3YubAkJJWEwLEVYQ19BNyglYTYpCisJYnNyLmwJCWZtb3ZtX2R5bmFtaWMJCSMgZG8gZHluYW1pYyBmbW92bQorCisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnCisJYmVxLncJCWllYV9mbW92bV9kYXRhX3ByZWRlYworCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtaWE3X2ZsZworCWJuZS53CQlpZWFfZm1vdm1fZXhpdAorCisjIHJpZ2h0IG5vdywgZDAgPSB0aGUgc2l6ZS4KKyMgdGhlIGRhdGEgaGFzIGJlZW4gZmV0Y2hlZCBmcm9tIHRoZSBzdXBlcnZpc29yIHN0YWNrLCBidXQgd2UgaGF2ZSBub3QKKyMgaW5jcmVtZW50ZWQgdGhlIHN0YWNrIHBvaW50ZXIgYnkgdGhlIGFwcHJvcHJpYXRlIG51bWJlciBvZiBieXRlcy4KKyMgZG8gaXQgaGVyZS4KK2llYV9mbW92bV9kYXRhX3Bvc3RpbmM6CisJYnRzdAkJJjB4NyxFWENfU1IoJWE2KQorCWJuZS5iCQlpZWFfZm1vdm1fZGF0YV9waV90cmFjZQorCisJbW92LncJCUVYQ19TUiglYTYpLChFWENfU1IsJWE2LCVkMCkKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwoRVhDX1BDLCVhNiwlZDApCisJbW92LncJCSYweDAwZjAsKEVYQ19WT0ZGLCVhNiwlZDApCisKKwlsZWEJCShFWENfU1IsJWE2LCVkMCksJWEwCisJbW92LmwJCSVhMCxFWENfU1IoJWE2KQorCisJZm1vdm0ueAkJRVhDX0ZQMCglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYKKwltb3YubAkJKCVzcCkrLCVzcAorCWJyYS5sCQlfZnBzcF9kb25lCisKK2llYV9mbW92bV9kYXRhX3BpX3RyYWNlOgorCW1vdi53CQlFWENfU1IoJWE2KSwoRVhDX1NSLTB4NCwlYTYsJWQwKQorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLChFWENfUEMtMHg0LCVhNiwlZDApCisJbW92LncJCSYweDIwMjQsKEVYQ19WT0ZGLTB4NCwlYTYsJWQwKQorCW1vdi5sCQlFWENfUEMoJWE2KSwoRVhDX1ZPRkYrMHgyLTB4NCwlYTYsJWQwKQorCisJbGVhCQkoRVhDX1NSLTB4NCwlYTYsJWQwKSwlYTAKKwltb3YubAkJJWEwLEVYQ19TUiglYTYpCisKKwlmbW92bS54CQlFWENfRlAwKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgorCW1vdi5sCQkoJXNwKSssJXNwCisJYnJhLmwJCV9yZWFsX3RyYWNlCisKKyMgcmlnaHQgbm93LCBkMSA9IHNpemUgYW5kIGQwID0gdGhlIHN0cmcuCitpZWFfZm1vdm1fZGF0YV9wcmVkZWM6CisJbW92LmIJCSVkMSxFWENfVk9GRiglYTYpCSMgc3RvcmUgc3RyZworCW1vdi5iCQklZDAsMHgxK0VYQ19WT0ZGKCVhNikJIyBzdG9yZSBzaXplCisKKwlmbW92bS54CQlFWENfRlAwKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCW1vdi5sCQkoJWE2KSwtKCVzcCkJCSMgbWFrZSBhIGNvcHkgb2YgYTYKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIGQwCisJbW92LmwJCSVkMSwtKCVzcCkJCSMgc2F2ZSBkMQorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLC0oJXNwKQkjIG1ha2UgYSBjb3B5IG9mIE5leHQgUEMKKworCWNsci5sCQklZDAKKwltb3YuYgkJMHgxK0VYQ19WT0ZGKCVhNiksJWQwCSMgZmV0Y2ggc2l6ZQorCW5lZy5sCQklZDAJCQkjIGdldCBuZWdhdGl2ZSBvZiBzaXplCisKKwlidHN0CQkmMHg3LEVYQ19TUiglYTYpCSMgaXMgdHJhY2UgZW5hYmxlZD8KKwliZXEuYgkJaWVhX2Ztb3ZtX2RhdGFfcDIKKworCW1vdi53CQlFWENfU1IoJWE2KSwoRVhDX1NSLTB4NCwlYTYsJWQwKQorCW1vdi5sCQlFWENfUEMoJWE2KSwoRVhDX1ZPRkYtMHgyLCVhNiwlZDApCisJbW92LmwJCSglc3ApKywoRVhDX1BDLTB4NCwlYTYsJWQwKQorCW1vdi53CQkmMHgyMDI0LChFWENfVk9GRi0weDQsJWE2LCVkMCkKKworCXBlYQkJKCVhNiwlZDApCQkjIGNyZWF0ZSBmaW5hbCBzcAorCWJyYS5iCQlpZWFfZm1vdm1fZGF0YV9wMworCitpZWFfZm1vdm1fZGF0YV9wMjoKKwltb3YudwkJRVhDX1NSKCVhNiksKEVYQ19TUiwlYTYsJWQwKQorCW1vdi5sCQkoJXNwKSssKEVYQ19QQywlYTYsJWQwKQorCW1vdi53CQkmMHgwMGYwLChFWENfVk9GRiwlYTYsJWQwKQorCisJcGVhCQkoMHg0LCVhNiwlZDApCQkjIGNyZWF0ZSBmaW5hbCBzcAorCitpZWFfZm1vdm1fZGF0YV9wMzoKKwljbHIubAkJJWQxCisJbW92LmIJCUVYQ19WT0ZGKCVhNiksJWQxCSMgZmV0Y2ggc3RyZworCisJdHN0LmIJCSVkMQorCWJwbC5iCQlmbV8xCisJZm1vdm0ueAkJJjB4ODAsKDB4NCsweDgsJWE2LCVkMCkKKwlhZGRpLmwJCSYweGMsJWQwCitmbV8xOgorCWxzbC5iCQkmMHgxLCVkMQorCWJwbC5iCQlmbV8yCisJZm1vdm0ueAkJJjB4NDAsKDB4NCsweDgsJWE2LCVkMCkKKwlhZGRpLmwJCSYweGMsJWQwCitmbV8yOgorCWxzbC5iCQkmMHgxLCVkMQorCWJwbC5iCQlmbV8zCisJZm1vdm0ueAkJJjB4MjAsKDB4NCsweDgsJWE2LCVkMCkKKwlhZGRpLmwJCSYweGMsJWQwCitmbV8zOgorCWxzbC5iCQkmMHgxLCVkMQorCWJwbC5iCQlmbV80CisJZm1vdm0ueAkJJjB4MTAsKDB4NCsweDgsJWE2LCVkMCkKKwlhZGRpLmwJCSYweGMsJWQwCitmbV80OgorCWxzbC5iCQkmMHgxLCVkMQorCWJwbC5iCQlmbV81CisJZm1vdm0ueAkJJjB4MDgsKDB4NCsweDgsJWE2LCVkMCkKKwlhZGRpLmwJCSYweGMsJWQwCitmbV81OgorCWxzbC5iCQkmMHgxLCVkMQorCWJwbC5iCQlmbV82CisJZm1vdm0ueAkJJjB4MDQsKDB4NCsweDgsJWE2LCVkMCkKKwlhZGRpLmwJCSYweGMsJWQwCitmbV82OgorCWxzbC5iCQkmMHgxLCVkMQorCWJwbC5iCQlmbV83CisJZm1vdm0ueAkJJjB4MDIsKDB4NCsweDgsJWE2LCVkMCkKKwlhZGRpLmwJCSYweGMsJWQwCitmbV83OgorCWxzbC5iCQkmMHgxLCVkMQorCWJwbC5iCQlmbV9lbmQKKwlmbW92bS54CQkmMHgwMSwoMHg0KzB4OCwlYTYsJWQwKQorZm1fZW5kOgorCW1vdi5sCQkweDQoJXNwKSwlZDEKKwltb3YubAkJMHg4KCVzcCksJWQwCisJbW92LmwJCTB4Yyglc3ApLCVhNgorCW1vdi5sCQkoJXNwKSssJXNwCisKKwlidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIGVuYWJsZWQ/CisJYmVxLmwJCV9mcHNwX2RvbmUKKwlicmEubAkJX3JlYWxfdHJhY2UKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaWVhX2Ztb3ZtX2N0cmw6CisKKwlic3IubAkJZm1vdm1fY3RybAkJIyBsb2FkIGN0cmwgcmVncworCitpZWFfZm1vdm1fZXhpdDoKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCWJ0c3QJCSYweDcsRVhDX1NSKCVhNikJIyBpcyB0cmFjZSBvbj8KKwlibmUuYgkJaWVhX2Ztb3ZtX3RyYWNlCQkjIHllcworCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksRVhDX1BDKCVhNikgIyBzZXQgTmV4dCBQQworCisJdW5sawkJJWE2CQkJIyB1bnJhdmVsIHRoZSBmcmFtZQorCisJYnJhLmwJCV9mcHNwX2RvbmUJCSMgZXhpdCB0byBvcworCisjCisjIFRoZSBjb250cm9sIHJlZyBpbnN0cnVjdGlvbiB0aGF0IHRvb2sgYW4gIlVuaW1wbGVtZW50ZWQgRWZmZWN0aXZlIEFkZHJlc3MiCisjIGV4Y2VwdGlvbiB3YXMgYmVpbmcgdHJhY2VkLiBUaGUgIkN1cnJlbnQgUEMiIGZvciB0aGUgdHJhY2UgZnJhbWUgaXMgdGhlCisjIFBDIHN0YWNrZWQgZm9yIFVuaW1wIEVBLiBUaGUgIk5leHQgUEMiIGlzIGluIEVYQ19FWFRXUFRSLgorIyBBZnRlciBmaXhpbmcgdGhlIHN0YWNrIGZyYW1lLCBqdW1wIHRvIF9yZWFsX3RyYWNlKCkuCisjCisjCQkgVU5JTVAgRUEgRlJBTUUJCSAgIFRSQUNFIEZSQU1FCisjCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkJKiAweDAgKiAgMHgwZjAJKgkqICAgIEN1cnJlbnQJKgorIwkJKioqKioqKioqKioqKioqKioJKiAgICAgIFBDCSoKKyMJCSogICAgQ3VycmVudAkqCSoqKioqKioqKioqKioqKioqCisjCQkqICAgICAgUEMJKgkqIDB4MiAqICAweDAyNAkqCisjCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkJKiAgICAgIFNSCSoJKiAgICAgTmV4dAkqCisjCQkqKioqKioqKioqKioqKioqKgkqICAgICAgUEMJKgorIwkJCQkJKioqKioqKioqKioqKioqKioKKyMJCQkJCSogICAgICBTUgkqCisjCQkJCQkqKioqKioqKioqKioqKioqKgorIyB0aGlzIGFpbid0IGEgcHJldHR5IHNvbHV0aW9uLCBidXQgaXQgd29ya3M6CisjIC1yZXN0b3JlIGE2IChub3Qgd2l0aCB1bmxrKQorIyAtc2hpZnQgc3RhY2sgZnJhbWUgZG93biBvdmVyIHdoZXJlIG9sZCBhNiB1c2VkIHRvIGJlCisjIC1hZGQgTE9DQUxfU0laRSB0byBzdGFjayBwb2ludGVyCitpZWFfZm1vdm1fdHJhY2U6CisJbW92LmwJCSglYTYpLCVhNgkJIyByZXN0b3JlIGZyYW1lIHBvaW50ZXIKKwltb3YudwkJRVhDX1NSK0xPQ0FMX1NJWkUoJXNwKSwweDArTE9DQUxfU0laRSglc3ApCisJbW92LmwJCUVYQ19QQytMT0NBTF9TSVpFKCVzcCksMHg4K0xPQ0FMX1NJWkUoJXNwKQorCW1vdi5sCQlFWENfRVhUV1BUUitMT0NBTF9TSVpFKCVzcCksMHgyK0xPQ0FMX1NJWkUoJXNwKQorCW1vdi53CQkmMHgyMDI0LDB4NitMT0NBTF9TSVpFKCVzcCkgIyBzdGsgZm10ID0gMHgyOyB2b2ZmID0gMHgwMjQKKwlhZGQubAkJJkxPQ0FMX1NJWkUsJXNwCQkjIGNsZWFyIHN0YWNrIGZyYW1lCisKKwlicmEubAkJX3JlYWxfdHJhY2UKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaGUgRlBVIGlzIGRpc2FibGVkIGFuZCBzbyB3ZSBzaG91bGQgcmVhbGx5IGhhdmUgdGFrZW4gdGhlICJMaW5lCisjIEYgRW11bGF0b3IiIGV4Y2VwdGlvbi4gU28sIGhlcmUgd2UgY3JlYXRlIGFuIDgtd29yZCBzdGFjayBmcmFtZQorIyBmcm9tIG91ciA0LXdvcmQgc3RhY2sgZnJhbWUuIFRoaXMgbWVhbnMgd2UgbXVzdCBjYWxjdWxhdGUgdGhlIGxlbmd0aAorIyB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gdG8gZ2V0IHRoZSAibmV4dCBQQyIuIFRoaXMgaXMgdHJpdmlhbCBmb3IKKyMgaW1tZWRpYXRlIG9wZXJhbmRzIGJ1dCByZXF1aXJlcyBzb21lIGV4dHJhIHdvcmsgZm9yIGZtb3ZtIGR5bmFtaWMKKyMgd2hpY2ggY2FuIHVzZSBtb3N0IGFkZHJlc3NpbmcgbW9kZXMuCitpZWFfZGlzYWJsZWQ6CisJbW92LmwJCSglc3ApKywlZDAJCSMgcmVzdG9yZSBkMAorCisJbGluawkJJWE2LCYtTE9DQUxfU0laRQkjIGluaXQgc3RhY2sgZnJhbWUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKworIyBQQyBvZiBpbnN0cnVjdGlvbiB0aGF0IHRvb2sgdGhlIGV4Y2VwdGlvbiBpcyB0aGUgUEMgaW4gdGhlIGZyYW1lCisJbW92LmwJCUVYQ19QQyglYTYpLEVYQ19FWFRXUFRSKCVhNikKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggdGhlIGluc3RydWN0aW9uIHdvcmRzCisJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikJIyBzdG9yZSBPUFdPUkQgYW5kIEVYVFdPUkQKKworCXRzdC53CQklZDAJCQkjIGlzIGluc3RyIGZtb3ZtPworCWJtaS5iCQlpZWFfZGlzX2Ztb3ZtCQkjIHllcworIyBpbnN0cnVjdGlvbiBpcyB1c2luZyBhbiBleHRlbmRlZCBwcmVjaXNpb24gaW1tZWRpYXRlIG9wZXJhbmQuIHRoZXJlZm9yZSwKKyMgdGhlIHRvdGFsIGluc3RydWN0aW9uIGxlbmd0aCBpcyAxNiBieXRlcy4KK2llYV9kaXNfaW1tZWQ6CisJbW92LmwJCSYweDEwLCVkMAkJIyAxNiBieXRlcyBvZiBpbnN0cnVjdGlvbgorCWJyYS5iCQlpZWFfZGlzX2NvbnQKK2llYV9kaXNfZm1vdm06CisJYnRzdAkJJjB4ZSwlZDAJCSMgaXMgaW5zdHIgZm1vdm0gY3RybAorCWJuZS5iCQlpZWFfZGlzX2Ztb3ZtX2RhdGEJIyBubworIyB0aGUgaW5zdHJ1Y3Rpb24gaXMgYSBmbW92bS5sIHdpdGggMiBvciAzIHJlZ2lzdGVycy4KKwliZmV4dHUJCSVkMHsmMTk6JjN9LCVkMQorCW1vdi5sCQkmMHhjLCVkMAorCWNtcGkuYgkJJWQxLCYweDcJCSMgbW92ZSBhbGwgcmVncz8KKwlibmUuYgkJaWVhX2Rpc19jb250CisJYWRkcS5sCQkmMHg0LCVkMAorCWJyYS5iCQlpZWFfZGlzX2NvbnQKKyMgdGhlIGluc3RydWN0aW9uIGlzIGFuIGZtb3ZtLnggZHluYW1pYyB3aGljaCBjYW4gdXNlIG1hbnkgYWRkcmVzc2luZworIyBtb2RlcyBhbmQgdGh1cyBjYW4gaGF2ZSBzZXZlcmFsIGRpZmZlcmVudCB0b3RhbCBpbnN0cnVjdGlvbiBsZW5ndGhzLgorIyBjYWxsIGZtb3ZtX2NhbGNfZWEgd2hpY2ggd2lsbCBnbyB0aHJvdWdoIHRoZSBlYSBjYWxjIHByb2Nlc3MgYW5kLAorIyBhcyBhIGJ5LXByb2R1Y3QsIHdpbGwgdGVsbCB1cyBob3cgbG9uZyB0aGUgaW5zdHJ1Y3Rpb24gaXMuCitpZWFfZGlzX2Ztb3ZtX2RhdGE6CisJY2xyLmwJCSVkMAorCWJzci5sCQlmbW92bV9jYWxjX2VhCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWQwCisJc3ViLmwJCUVYQ19QQyglYTYpLCVkMAoraWVhX2Rpc19jb250OgorCW1vdi53CQklZDAsRVhDX1ZPRkYoJWE2KQkjIHN0b3JlIHN0YWNrIHNoaWZ0IHZhbHVlCisKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYKKworIyBoZXJlLCB3ZSBhY3R1YWxseSBjcmVhdGUgdGhlIDgtd29yZCBmcmFtZSBmcm9tIHRoZSA0LXdvcmQgZnJhbWUsCisjIHdpdGggdGhlICJuZXh0IFBDIiBhcyBhZGRpdGlvbmFsIGluZm8uCisjIHRoZSA8ZWE+IGZpZWxkIGlzIGxldCBhcyB1bmRlZmluZWQuCisJc3VicS5sCQkmMHg4LCVzcAkJIyBtYWtlIHJvb20gZm9yIG5ldyBzdGFjaworCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgZDAKKwltb3YudwkJMHhjKCVzcCksMHg0KCVzcCkJIyBtb3ZlIFNSCisJbW92LmwJCTB4ZSglc3ApLDB4Niglc3ApCSMgbW92ZSBDdXJyZW50IFBDCisJY2xyLmwJCSVkMAorCW1vdi53CQkweDEyKCVzcCksJWQwCisJbW92LmwJCTB4Niglc3ApLDB4MTAoJXNwKQkjIG1vdmUgQ3VycmVudCBQQworCWFkZC5sCQklZDAsMHg2KCVzcCkJCSMgbWFrZSBOZXh0IFBDCisJbW92LncJCSYweDQwMmMsMHhhKCVzcCkJIyBpbnNlcnQgb2Zmc2V0LGZyYW1lIGZvcm1hdAorCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgZDAKKworCWJyYS5sCQlfcmVhbF9mcHVfZGlzYWJsZWQKKworIyMjIyMjIyMjIworCitpZWFfaWFjYzoKKwltb3ZjCQklcGNyLCVkMAorCWJ0c3QJCSYweDEsJWQwCisJYm5lLmIJCWllYV9pYWNjX2NvbnQKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMSBvbiBzdGFjaworaWVhX2lhY2NfY29udDoKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYKKworCXN1YnEudwkJJjB4OCwlc3AJCSMgbWFrZSBzdGFjayBmcmFtZSBiaWdnZXIKKwltb3YubAkJMHg4KCVzcCksKCVzcCkJCSMgc3RvcmUgU1IsaGkoUEMpCisJbW92LncJCTB4Yyglc3ApLDB4NCglc3ApCSMgc3RvcmUgbG8oUEMpCisJbW92LncJCSYweDQwMDgsMHg2KCVzcCkJIyBzdG9yZSB2b2ZmCisJbW92LmwJCTB4Miglc3ApLDB4OCglc3ApCSMgc3RvcmUgZWEKKwltb3YubAkJJjB4MDk0MjgwMDEsMHhjKCVzcCkJIyBzdG9yZSBmc2x3CisKK2llYV9hY2NfZG9uZToKKwlidHN0CQkmMHg1LCglc3ApCQkjIHVzZXIgb3Igc3VwZXJ2aXNvciBtb2RlPworCWJlcS5iCQlpZWFfYWNjX2RvbmUyCQkjIHVzZXIKKwlic2V0CQkmMHgyLDB4ZCglc3ApCQkjIHNldCBzdXBlcnZpc29yIFRNIGJpdAorCitpZWFfYWNjX2RvbmUyOgorCWJyYS5sCQlfcmVhbF9hY2Nlc3MKKworaWVhX2RhY2M6CisJbGVhCQktTE9DQUxfU0laRSglYTYpLCVzcAorCisJbW92YwkJJXBjciwlZDEKKwlidHN0CQkmMHgxLCVkMQorCWJuZS5iCQlpZWFfZGFjY19jb250CisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxIG9uIHN0YWNrCisJZm1vdm0ubAkJTE9DQUxfU0laRStVU0VSX0ZQQ1IoJXNwKSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworaWVhX2RhY2NfY29udDoKKwltb3YubAkJKCVhNiksJWE2CisKKwltb3YubAkJMHg0K0xPQ0FMX1NJWkUoJXNwKSwtMHg4KzB4NCtMT0NBTF9TSVpFKCVzcCkKKwltb3YudwkJMHg4K0xPQ0FMX1NJWkUoJXNwKSwtMHg4KzB4OCtMT0NBTF9TSVpFKCVzcCkKKwltb3YudwkJJjB4NDAwOCwtMHg4KzB4YStMT0NBTF9TSVpFKCVzcCkKKwltb3YubAkJJWEwLC0weDgrMHhjK0xPQ0FMX1NJWkUoJXNwKQorCW1vdi53CQklZDAsLTB4OCsweDEwK0xPQ0FMX1NJWkUoJXNwKQorCW1vdi53CQkmMHgwMDAxLC0weDgrMHgxMitMT0NBTF9TSVpFKCVzcCkKKworCW1vdm0ubAkJTE9DQUxfU0laRStFWENfRFJFR1MoJXNwKSwmMHgwMzAzICMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCWFkZC53CQkmTE9DQUxfU0laRS0weDQsJXNwCisKKwlicmEuYgkJaWVhX2FjY19kb25lCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2Zwc3Bfb3BlcnIoKTogMDYwRlBTUCBlbnRyeSBwb2ludCBmb3IgRlAgT3BlcnIgZXhjZXB0aW9uLgkjCisjCQkJCQkJCQkJIworIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIHRoZQkjCisjCUZQIE9wZXJhbmQgRXJyb3IgZXhjZXB0aW9uIGluIGFuIG9wZXJhdGluZyBzeXN0ZW0uCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfaW1lbV9yZWFkX2xvbmcoKSAtIHJlYWQgaW5zdHJ1Y3Rpb24gbG9uZ3dvcmQJCQkjCisjCWZpeF9za2V3ZWRfb3BzKCkgLSBhZGp1c3Qgc3JjIG9wZXJhbmQgaW4gZnNhdmUgZnJhbWUJCSMKKyMJX3JlYWxfb3BlcnIoKSAtICJjYWxsb3V0IiB0byBvcGVyYXRpbmcgc3lzdGVtIG9wZXJyIGhhbmRsZXIJIworIwlfZG1lbV93cml0ZV97Ynl0ZSx3b3JkLGxvbmd9KCkgLSBzdG9yZSBkYXRhIHRvIG1lbSAob3BjbGFzcyAzKQkjCisjCXN0b3JlX2RyZWdfe2IsdyxsfSgpIC0gc3RvcmUgZGF0YSB0byBkYXRhIHJlZ2ZpbGUgKG9wY2xhc3MgMykJIworIwlmYWNjX291dF97Yix3LGx9KCkgLSBzdG9yZSB0byBtZW1vcnkgdG9vayBhY2Nlc3MgZXJyb3IgKG9wY2wgMykJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIHRoZSBGUCBPcGVyciBleGNlcHRpb24gZnJhbWUJIworIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgc291cmNlIG9wZXJhbmQJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlObyBhY2Nlc3MgZXJyb3I6CQkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgdW5jaGFuZ2VkCQkJCQkjCisjCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBhZGp1c3RlZCBzcmMgb3AgZm9yIG9wY2xhc3MgMCwyCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUluIGEgc3lzdGVtIHdoZXJlIHRoZSBGUCBPcGVyciBleGNlcHRpb24gaXMgZW5hYmxlZCwgdGhlIGdvYWwJIworIyBpcyB0byBnZXQgdG8gdGhlIGhhbmRsZXIgc3BlY2lmaWVkIGF0IF9yZWFsX29wZXJyKCkuIEJ1dCwgb24gdGhlIDA2MCwJIworIyBmb3Igb3BjbGFzcyB6ZXJvIGFuZCB0d28gaW5zdHJ1Y3Rpb24gdGFraW5nIHRoaXMgZXhjZXB0aW9uLCB0aGUJIworIyBpbnB1dCBvcGVyYW5kIGluIHRoZSBmc2F2ZSBmcmFtZSBtYXkgYmUgaW5jb3JyZWN0IGZvciBzb21lIGNhc2VzCSMKKyMgYW5kIG5lZWRzIHRvIGJlIGNvcnJlY3RlZC4gVGhpcyBoYW5kbGVyIGNhbGxzIGZpeF9za2V3ZWRfb3BzKCkgdG8JIworIyBkbyBqdXN0IHRoaXMgYW5kIHRoZW4gZXhpdHMgdGhyb3VnaCBfcmVhbF9vcGVycigpLgkJCSMKKyMJRm9yIG9wY2xhc3MgMyBpbnN0cnVjdGlvbnMsIHRoZSAwNjAgZG9lc24ndCBzdG9yZSB0aGUgZGVmYXVsdAkjCisjIG9wZXJyIHJlc3VsdCBvdXQgdG8gbWVtb3J5IG9yIGRhdGEgcmVnaXN0ZXIgZmlsZSBhcyBpdCBzaG91bGQuCSMKKyMgVGhpcyBjb2RlIG11c3QgZW11bGF0ZSB0aGUgbW92ZSBvdXQgYmVmb3JlIGZpbmFsbHkgZXhpdGluZyB0aHJvdWdoCSMKKyMgX3JlYWxfaW5leCgpLiBUaGUgbW92ZSBvdXQsIGlmIHRvIG1lbW9yeSwgaXMgcGVyZm9ybWVkIHVzaW5nCQkjCisjIF9tZW1fd3JpdGUoKSAiY2FsbG91dCIgcm91dGluZXMgdGhhdCBtYXkgcmV0dXJuIGEgZmFpbGluZyByZXN1bHQuCSMKKyMgSW4gdGhpcyBzcGVjaWFsIGNhc2UsIHRoZSBoYW5kbGVyIG11c3QgZXhpdCB0aHJvdWdoIGZhY2Nfb3V0KCkJIworIyB3aGljaCBjcmVhdGVzIGFuIGFjY2VzcyBlcnJvciBzdGFjayBmcmFtZSBmcm9tIHRoZSBjdXJyZW50IG9wZXJyCSMKKyMgc3RhY2sgZnJhbWUuCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfZnBzcF9vcGVycgorX2Zwc3Bfb3BlcnI6CisKKwlsaW5rLncJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCisKKwlmc2F2ZQkJRlBfU1JDKCVhNikJCSMgZ3JhYiB0aGUgImJ1c3kiIGZyYW1lCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlBSRUdTKCVhNikJIyBzYXZlIGZwMC1mcDEgb24gc3RhY2sKKworIyB0aGUgRlBJQVIgaG9sZHMgdGhlICJjdXJyZW50IFBDIiBvZiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24KKwltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19FWFRXUFRSKCVhNikKKworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCB0aGUgaW5zdHJ1Y3Rpb24gd29yZHMKKwltb3YubAkJJWQwLEVYQ19PUFdPUkQoJWE2KQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWJ0c3QJCSYxMywlZDAJCQkjIGlzIGluc3RyIGFuIGZtb3ZlIG91dD8KKwlibmUuYgkJZm9wZXJyX291dAkJIyBmbW92ZSBvdXQKKworCisjIGhlcmUsIHdlIHNpbXBseSBzZWUgaWYgdGhlIG9wZXJhbmQgaW4gdGhlIGZzYXZlIGZyYW1lIG5lZWRzIHRvIGJlICJ1bnNrZXdlZCIuCisjIHRoaXMgd291bGQgYmUgdGhlIGNhc2UgZm9yIG9wY2xhc3MgdHdvIG9wZXJhdGlvbnMgd2l0aCBhIHNvdXJjZSBpbmZpbml0eSBvcgorIyBkZW5vcm0gb3BlcmFuZCBpbiB0aGUgc2dsIG9yIGRibCBmb3JtYXQuIE5BTnMgYWxzbyBiZWNvbWUgc2tld2VkLCBidXQgY2FuJ3QKKyMgY2F1c2UgYW4gb3BlcnIgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgdGhlbSBoZXJlLgorCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKKwlic3IubAkJZml4X3NrZXdlZF9vcHMJCSMgZml4IHNyYyBvcAorCitmb3BlcnJfZXhpdDoKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCisKKwl1bmxrCQklYTYKKwlicmEubAkJX3JlYWxfb3BlcnIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgdGhlIGhhcmR3YXJlIGRvZXMgbm90IHNhdmUgdGhlIGRlZmF1bHQgcmVzdWx0IHRvIG1lbW9yeSBvbiBlbmFibGVkCisjIG9wZXJhbmQgZXJyb3IgZXhjZXB0aW9ucy4gd2UgZG8gdGhpcyBoZXJlIGJlZm9yZSBwYXNzaW5nIGNvbnRyb2wgdG8KKyMgdGhlIHVzZXIgb3BlcmFuZCBlcnJvciBoYW5kbGVyLgorIworIyBieXRlLCB3b3JkLCBhbmQgbG9uZyBkZXN0aW5hdGlvbiBmb3JtYXQgb3BlcmF0aW9ucyBjYW4gcGFzcworIyB0aHJvdWdoIGhlcmUuIHdlIHNpbXBseSBuZWVkIHRvIHRlc3QgdGhlIHNpZ24gb2YgdGhlIHNyYworIyBvcGVyYW5kIGFuZCBzYXZlIHRoZSBhcHByb3ByaWF0ZSBtaW5pbXVtIG9yIG1heGltdW0gaW50ZWdlciB2YWx1ZQorIyB0byB0aGUgZWZmZWN0aXZlIGFkZHJlc3MgYXMgcG9pbnRlZCB0byBieSB0aGUgc3RhY2tlZCBlZmZlY3RpdmUgYWRkcmVzcy4KKyMKKyMgYWx0aG91Z2ggcGFja2VkIG9wY2xhc3MgdGhyZWUgb3BlcmF0aW9ucyBjYW4gdGFrZSBvcGVyYW5kIGVycm9yCisjIGV4Y2VwdGlvbnMsIHRoZXkgd29uJ3QgcGFzcyB0aHJvdWdoIGhlcmUgc2luY2UgdGhleSBhcmUgY2F1Z2h0CisjIGZpcnN0IGJ5IHRoZSB1bnN1cHBvcnRlZCBkYXRhIGZvcm1hdCBleGNlcHRpb24gaGFuZGxlci4gdGhhdCBoYW5kbGVyCisjIHNlbmRzIHRoZW0gZGlyZWN0bHkgdG8gX3JlYWxfb3BlcnIoKSBpZiBuZWNlc3NhcnkuCisjCitmb3BlcnJfb3V0OgorCisJbW92LncJCUZQX1NSQ19FWCglYTYpLCVkMQkjIGZldGNoIGV4cG9uZW50CisJYW5kaS53CQkmMHg3ZmZmLCVkMQorCWNtcGkudwkJJWQxLCYweDdmZmYKKwlibmUuYgkJZm9wZXJyX291dF9ub3RfcW5hbgorIyB0aGUgb3BlcmFuZCBpcyBlaXRoZXIgYW4gaW5maW5pdHkgb3IgYSBRTkFOLgorCXRzdC5sCQlGUF9TUkNfTE8oJWE2KQorCWJuZS5iCQlmb3BlcnJfb3V0X3FuYW4KKwltb3YubAkJRlBfU1JDX0hJKCVhNiksJWQxCisJYW5kaS5sCQkmMHg3ZmZmZmZmZiwlZDEKKwliZXEuYgkJZm9wZXJyX291dF9ub3RfcW5hbgorZm9wZXJyX291dF9xbmFuOgorCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSxMX1NDUjEoJWE2KQorCWJyYS5iCQlmb3BlcnJfb3V0X2ptcAorCitmb3BlcnJfb3V0X25vdF9xbmFuOgorCW1vdi5sCQkmMHg3ZmZmZmZmZiwlZDEKKwl0c3QuYgkJRlBfU1JDX0VYKCVhNikKKwlicGwuYgkJZm9wZXJyX291dF9ub3RfcW5hbjIKKwlhZGRxLmwJCSYweDEsJWQxCitmb3BlcnJfb3V0X25vdF9xbmFuMjoKKwltb3YubAkJJWQxLExfU0NSMSglYTYpCisKK2ZvcGVycl9vdXRfam1wOgorCWJmZXh0dQkJJWQweyYxOTomM30sJWQwCQkjIGV4dHJhY3QgZHN0IGZvcm1hdCBmaWVsZAorCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IDxlYT4gbW9kZSxyZWcKKwltb3YudwkJKHRibF9vcGVyci5iLCVwYywlZDAudyoyKSwlYTAKKwlqbXAJCSh0Ymxfb3BlcnIuYiwlcGMsJWEwKQorCit0Ymxfb3BlcnI6CisJc2hvcnQJCWZvcGVycl9vdXRfbCAtIHRibF9vcGVyciAjIGxvbmcgd29yZCBpbnRlZ2VyCisJc2hvcnQJCXRibF9vcGVyciAgICAtIHRibF9vcGVyciAjIHNnbCBwcmVjIHNob3VsZG4ndCBoYXBwZW4KKwlzaG9ydAkJdGJsX29wZXJyICAgIC0gdGJsX29wZXJyICMgZXh0IHByZWMgc2hvdWxkbid0IGhhcHBlbgorCXNob3J0CQlmb3BlcnJfZXhpdCAgLSB0Ymxfb3BlcnIgIyBwYWNrZWQgd29uJ3QgZW50ZXIgaGVyZQorCXNob3J0CQlmb3BlcnJfb3V0X3cgLSB0Ymxfb3BlcnIgIyB3b3JkIGludGVnZXIKKwlzaG9ydAkJdGJsX29wZXJyICAgIC0gdGJsX29wZXJyICMgZGJsIHByZWMgc2hvdWxkbid0IGhhcHBlbgorCXNob3J0CQlmb3BlcnJfb3V0X2IgLSB0Ymxfb3BlcnIgIyBieXRlIGludGVnZXIKKwlzaG9ydAkJdGJsX29wZXJyICAgIC0gdGJsX29wZXJyICMgcGFja2VkIHdvbid0IGVudGVyIGhlcmUKKworZm9wZXJyX291dF9iOgorCW1vdi5iCQlMX1NDUjEoJWE2KSwlZDAJCSMgbG9hZCBwb3NpdGl2ZSBkZWZhdWx0IHJlc3VsdAorCWNtcGkuYgkJJWQxLCYweDcJCSMgaXMgPGVhPiBtb2RlIGEgZGF0YSByZWc/CisJYmxlLmIJCWZvcGVycl9vdXRfYl9zYXZlX2RuCSMgeWVzCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBwYXNzOiA8ZWE+IG9mIGRlZmF1bHQgcmVzdWx0CisJYnNyLmwJCV9kbWVtX3dyaXRlX2J5dGUJIyB3cml0ZSB0aGUgZGVmYXVsdCByZXN1bHQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfYgkJIyB5ZXMKKworCWJyYS53CQlmb3BlcnJfZXhpdAorZm9wZXJyX291dF9iX3NhdmVfZG46CisJYW5kaS53CQkmMHgwMDA3LCVkMQorCWJzci5sCQlzdG9yZV9kcmVnX2IJCSMgc3RvcmUgcmVzdWx0IHRvIHJlZ2ZpbGUKKwlicmEudwkJZm9wZXJyX2V4aXQKKworZm9wZXJyX291dF93OgorCW1vdi53CQlMX1NDUjEoJWE2KSwlZDAJCSMgbG9hZCBwb3NpdGl2ZSBkZWZhdWx0IHJlc3VsdAorCWNtcGkuYgkJJWQxLCYweDcJCSMgaXMgPGVhPiBtb2RlIGEgZGF0YSByZWc/CisJYmxlLmIJCWZvcGVycl9vdXRfd19zYXZlX2RuCSMgeWVzCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBwYXNzOiA8ZWE+IG9mIGRlZmF1bHQgcmVzdWx0CisJYnNyLmwJCV9kbWVtX3dyaXRlX3dvcmQJIyB3cml0ZSB0aGUgZGVmYXVsdCByZXN1bHQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfdwkJIyB5ZXMKKworCWJyYS53CQlmb3BlcnJfZXhpdAorZm9wZXJyX291dF93X3NhdmVfZG46CisJYW5kaS53CQkmMHgwMDA3LCVkMQorCWJzci5sCQlzdG9yZV9kcmVnX3cJCSMgc3RvcmUgcmVzdWx0IHRvIHJlZ2ZpbGUKKwlicmEudwkJZm9wZXJyX2V4aXQKKworZm9wZXJyX291dF9sOgorCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDAJCSMgbG9hZCBwb3NpdGl2ZSBkZWZhdWx0IHJlc3VsdAorCWNtcGkuYgkJJWQxLCYweDcJCSMgaXMgPGVhPiBtb2RlIGEgZGF0YSByZWc/CisJYmxlLmIJCWZvcGVycl9vdXRfbF9zYXZlX2RuCSMgeWVzCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBwYXNzOiA8ZWE+IG9mIGRlZmF1bHQgcmVzdWx0CisJYnNyLmwJCV9kbWVtX3dyaXRlX2xvbmcJIyB3cml0ZSB0aGUgZGVmYXVsdCByZXN1bHQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfbAkJIyB5ZXMKKworCWJyYS53CQlmb3BlcnJfZXhpdAorZm9wZXJyX291dF9sX3NhdmVfZG46CisJYW5kaS53CQkmMHgwMDA3LCVkMQorCWJzci5sCQlzdG9yZV9kcmVnX2wJCSMgc3RvcmUgcmVzdWx0IHRvIHJlZ2ZpbGUKKwlicmEudwkJZm9wZXJyX2V4aXQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfZnBzcF9zbmFuKCk6IDA2MEZQU1AgZW50cnkgcG9pbnQgZm9yIEZQIFNOQU4gZXhjZXB0aW9uLgkjCisjCQkJCQkJCQkJIworIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIHRoZQkjCisjCUZQIFNpZ25hbGxpbmcgTkFOIGV4Y2VwdGlvbiBpbiBhbiBvcGVyYXRpbmcgc3lzdGVtLgkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2ltZW1fcmVhZF9sb25nKCkgLSByZWFkIGluc3RydWN0aW9uIGxvbmd3b3JkCQkJIworIwlmaXhfc2tld2VkX29wcygpIC0gYWRqdXN0IHNyYyBvcGVyYW5kIGluIGZzYXZlIGZyYW1lCQkjCisjCV9yZWFsX3NuYW4oKSAtICJjYWxsb3V0IiB0byBvcGVyYXRpbmcgc3lzdGVtIFNOQU4gaGFuZGxlcgkjCisjCV9kbWVtX3dyaXRlX3tieXRlLHdvcmQsbG9uZ30oKSAtIHN0b3JlIGRhdGEgdG8gbWVtIChvcGNsYXNzIDMpCSMKKyMJc3RvcmVfZHJlZ197Yix3LGx9KCkgLSBzdG9yZSBkYXRhIHRvIGRhdGEgcmVnZmlsZSAob3BjbGFzcyAzKQkjCisjCWZhY2Nfb3V0X3tiLHcsbCxkLHh9KCkgLSBzdG9yZSB0byBtZW0gdG9vayBhY2MgZXJyb3IgKG9wY2wgMykJIworIwlfY2FsY19lYV9mb3V0KCkgLSBmaXggQW4gaWYgPGVhPiBpcyAtKCkgb3IgKCkrOyBhbHNvIGdldCA8ZWE+CSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBjb250YWlucyB0aGUgRlAgU05BTiBleGNlcHRpb24gZnJhbWUJCSMKKyMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIHNvdXJjZSBvcGVyYW5kCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm8gYWNjZXNzIGVycm9yOgkJCQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIHVuY2hhbmdlZAkJCQkJIworIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgYWRqdXN0ZWQgc3JjIG9wIGZvciBvcGNsYXNzIDAsMgkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJbiBhIHN5c3RlbSB3aGVyZSB0aGUgRlAgU05BTiBleGNlcHRpb24gaXMgZW5hYmxlZCwgdGhlIGdvYWwJIworIyBpcyB0byBnZXQgdG8gdGhlIGhhbmRsZXIgc3BlY2lmaWVkIGF0IF9yZWFsX3NuYW4oKS4gQnV0LCBvbiB0aGUgMDYwLAkjCisjIGZvciBvcGNsYXNzIHplcm8gYW5kIHR3byBpbnN0cnVjdGlvbnMgdGFraW5nIHRoaXMgZXhjZXB0aW9uLCB0aGUJIworIyBpbnB1dCBvcGVyYW5kIGluIHRoZSBmc2F2ZSBmcmFtZSBtYXkgYmUgaW5jb3JyZWN0IGZvciBzb21lIGNhc2VzCSMKKyMgYW5kIG5lZWRzIHRvIGJlIGNvcnJlY3RlZC4gVGhpcyBoYW5kbGVyIGNhbGxzIGZpeF9za2V3ZWRfb3BzKCkgdG8JIworIyBkbyBqdXN0IHRoaXMgYW5kIHRoZW4gZXhpdHMgdGhyb3VnaCBfcmVhbF9zbmFuKCkuCQkJIworIwlGb3Igb3BjbGFzcyAzIGluc3RydWN0aW9ucywgdGhlIDA2MCBkb2Vzbid0IHN0b3JlIHRoZSBkZWZhdWx0CSMKKyMgU05BTiByZXN1bHQgb3V0IHRvIG1lbW9yeSBvciBkYXRhIHJlZ2lzdGVyIGZpbGUgYXMgaXQgc2hvdWxkLgkJIworIyBUaGlzIGNvZGUgbXVzdCBlbXVsYXRlIHRoZSBtb3ZlIG91dCBiZWZvcmUgZmluYWxseSBleGl0aW5nIHRocm91Z2gJIworIyBfcmVhbF9zbmFuKCkuIFRoZSBtb3ZlIG91dCwgaWYgdG8gbWVtb3J5LCBpcyBwZXJmb3JtZWQgdXNpbmcJCSMKKyMgX21lbV93cml0ZSgpICJjYWxsb3V0IiByb3V0aW5lcyB0aGF0IG1heSByZXR1cm4gYSBmYWlsaW5nIHJlc3VsdC4JIworIyBJbiB0aGlzIHNwZWNpYWwgY2FzZSwgdGhlIGhhbmRsZXIgbXVzdCBleGl0IHRocm91Z2ggZmFjY19vdXQoKQkjCisjIHdoaWNoIGNyZWF0ZXMgYW4gYWNjZXNzIGVycm9yIHN0YWNrIGZyYW1lIGZyb20gdGhlIGN1cnJlbnQgU05BTgkjCisjIHN0YWNrIGZyYW1lLgkJCQkJCQkJIworIwlGb3IgdGhlIGNhc2Ugb2YgYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIG9wY2xhc3MgMyBpbnN0cnVjdGlvbiwJIworIyBpZiB0aGUgZWZmZWN0aXZlIGFkZHJlc3NpbmcgbW9kZSB3YXMgLSgpIG9yICgpKywgdGhlbiB0aGUgYWRkcmVzcwkjCisjIHJlZ2lzdGVyIG11c3QgZ2V0IHVwZGF0ZWQgYnkgY2FsbGluZyBfY2FsY19lYV9mb3V0KCkuIElmIHRoZSA8ZWE+CSMKKyMgd2FzIC0oYTcpIGZyb20gc3VwZXJ2aXNvciBtb2RlLCB0aGVuIHRoZSBleGNlcHRpb24gZnJhbWUgY3VycmVudGx5CSMKKyMgb24gdGhlIHN5c3RlbSBzdGFjayBtdXN0IGJlIGNhcmVmdWxseSBtb3ZlZCAiZG93biIgdG8gbWFrZSByb29tCSMKKyMgZm9yIHRoZSBvcGVyYW5kIGJlaW5nIG1vdmVkLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCV9mcHNwX3NuYW4KK19mcHNwX3NuYW46CisKKwlsaW5rLncJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCisKKwlmc2F2ZQkJRlBfU1JDKCVhNikJCSMgZ3JhYiB0aGUgImJ1c3kiIGZyYW1lCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlBSRUdTKCVhNikJIyBzYXZlIGZwMC1mcDEgb24gc3RhY2sKKworIyB0aGUgRlBJQVIgaG9sZHMgdGhlICJjdXJyZW50IFBDIiBvZiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24KKwltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19FWFRXUFRSKCVhNikKKworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCB0aGUgaW5zdHJ1Y3Rpb24gd29yZHMKKwltb3YubAkJJWQwLEVYQ19PUFdPUkQoJWE2KQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWJ0c3QJCSYxMywlZDAJCQkjIGlzIGluc3RyIGFuIGZtb3ZlIG91dD8KKwlibmUudwkJZnNuYW5fb3V0CQkjIGZtb3ZlIG91dAorCisKKyMgaGVyZSwgd2Ugc2ltcGx5IHNlZSBpZiB0aGUgb3BlcmFuZCBpbiB0aGUgZnNhdmUgZnJhbWUgbmVlZHMgdG8gYmUgInVuc2tld2VkIi4KKyMgdGhpcyB3b3VsZCBiZSB0aGUgY2FzZSBmb3Igb3BjbGFzcyB0d28gb3BlcmF0aW9ucyB3aXRoIGEgc291cmNlIGluZmluaXR5IG9yCisjIGRlbm9ybSBvcGVyYW5kIGluIHRoZSBzZ2wgb3IgZGJsIGZvcm1hdC4gTkFOcyBhbHNvIGJlY29tZSBza2V3ZWQgYW5kIG11c3QgYmUKKyMgZml4ZWQgaGVyZS4KKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCisJYnNyLmwJCWZpeF9za2V3ZWRfb3BzCQkjIGZpeCBzcmMgb3AKKworZnNuYW5fZXhpdDoKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCisKKwl1bmxrCQklYTYKKwlicmEubAkJX3JlYWxfc25hbgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyB0aGUgaGFyZHdhcmUgZG9lcyBub3Qgc2F2ZSB0aGUgZGVmYXVsdCByZXN1bHQgdG8gbWVtb3J5IG9uIGVuYWJsZWQKKyMgc25hbiBleGNlcHRpb25zLiB3ZSBkbyB0aGlzIGhlcmUgYmVmb3JlIHBhc3NpbmcgY29udHJvbCB0bworIyB0aGUgdXNlciBzbmFuIGhhbmRsZXIuCisjCisjIGJ5dGUsIHdvcmQsIGxvbmcsIGFuZCBwYWNrZWQgZGVzdGluYXRpb24gZm9ybWF0IG9wZXJhdGlvbnMgY2FuIHBhc3MKKyMgdGhyb3VnaCBoZXJlLiBzaW5jZSBwYWNrZWQgZm9ybWF0IG9wZXJhdGlvbnMgYWxyZWFkeSB3ZXJlIGhhbmRsZWQgYnkKKyMgZnBzcF91bnN1cHAoKSwgdGhlbiB3ZSBuZWVkIHRvIGRvIG5vdGhpbmcgZWxzZSBmb3IgdGhlbSBoZXJlLgorIyBmb3IgYnl0ZSwgd29yZCwgYW5kIGxvbmcsIHdlIHNpbXBseSBuZWVkIHRvIHRlc3QgdGhlIHNpZ24gb2YgdGhlIHNyYworIyBvcGVyYW5kIGFuZCBzYXZlIHRoZSBhcHByb3ByaWF0ZSBtaW5pbXVtIG9yIG1heGltdW0gaW50ZWdlciB2YWx1ZQorIyB0byB0aGUgZWZmZWN0aXZlIGFkZHJlc3MgYXMgcG9pbnRlZCB0byBieSB0aGUgc3RhY2tlZCBlZmZlY3RpdmUgYWRkcmVzcy4KKyMKK2ZzbmFuX291dDoKKworCWJmZXh0dQkJJWQweyYxOTomM30sJWQwCQkjIGV4dHJhY3QgZHN0IGZvcm1hdCBmaWVsZAorCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IDxlYT4gbW9kZSxyZWcKKwltb3YudwkJKHRibF9zbmFuLmIsJXBjLCVkMC53KjIpLCVhMAorCWptcAkJKHRibF9zbmFuLmIsJXBjLCVhMCkKKwordGJsX3NuYW46CisJc2hvcnQJCWZzbmFuX291dF9sIC0gdGJsX3NuYW4gIyBsb25nIHdvcmQgaW50ZWdlcgorCXNob3J0CQlmc25hbl9vdXRfcyAtIHRibF9zbmFuICMgc2dsIHByZWMgc2hvdWxkbid0IGhhcHBlbgorCXNob3J0CQlmc25hbl9vdXRfeCAtIHRibF9zbmFuICMgZXh0IHByZWMgc2hvdWxkbid0IGhhcHBlbgorCXNob3J0CQl0Ymxfc25hbiAgICAtIHRibF9zbmFuICMgcGFja2VkIG5lZWRzIG5vIGhlbHAKKwlzaG9ydAkJZnNuYW5fb3V0X3cgLSB0Ymxfc25hbiAjIHdvcmQgaW50ZWdlcgorCXNob3J0CQlmc25hbl9vdXRfZCAtIHRibF9zbmFuICMgZGJsIHByZWMgc2hvdWxkbid0IGhhcHBlbgorCXNob3J0CQlmc25hbl9vdXRfYiAtIHRibF9zbmFuICMgYnl0ZSBpbnRlZ2VyCisJc2hvcnQJCXRibF9zbmFuICAgIC0gdGJsX3NuYW4gIyBwYWNrZWQgbmVlZHMgbm8gaGVscAorCitmc25hbl9vdXRfYjoKKwltb3YuYgkJRlBfU1JDX0hJKCVhNiksJWQwCSMgbG9hZCB1cHBlciBieXRlIG9mIFNOQU4KKwlic2V0CQkmNiwlZDAJCQkjIHNldCBTTkFOIGJpdAorCWNtcGkuYgkJJWQxLCYweDcJCSMgaXMgPGVhPiBtb2RlIGEgZGF0YSByZWc/CisJYmxlLmIJCWZzbmFuX291dF9iX2RuCQkjIHllcworCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgcGFzczogPGVhPiBvZiBkZWZhdWx0IHJlc3VsdAorCWJzci5sCQlfZG1lbV93cml0ZV9ieXRlCSMgd3JpdGUgdGhlIGRlZmF1bHQgcmVzdWx0CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X2IJCSMgeWVzCisKKwlicmEudwkJZnNuYW5fZXhpdAorZnNuYW5fb3V0X2JfZG46CisJYW5kaS53CQkmMHgwMDA3LCVkMQorCWJzci5sCQlzdG9yZV9kcmVnX2IJCSMgc3RvcmUgcmVzdWx0IHRvIHJlZ2ZpbGUKKwlicmEudwkJZnNuYW5fZXhpdAorCitmc25hbl9vdXRfdzoKKwltb3YudwkJRlBfU1JDX0hJKCVhNiksJWQwCSMgbG9hZCB1cHBlciB3b3JkIG9mIFNOQU4KKwlic2V0CQkmMTQsJWQwCQkJIyBzZXQgU05BTiBiaXQKKwljbXBpLmIJCSVkMSwmMHg3CQkjIGlzIDxlYT4gbW9kZSBhIGRhdGEgcmVnPworCWJsZS5iCQlmc25hbl9vdXRfd19kbgkJIyB5ZXMKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHBhc3M6IDxlYT4gb2YgZGVmYXVsdCByZXN1bHQKKwlic3IubAkJX2RtZW1fd3JpdGVfd29yZAkjIHdyaXRlIHRoZSBkZWZhdWx0IHJlc3VsdAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF93CQkjIHllcworCisJYnJhLncJCWZzbmFuX2V4aXQKK2ZzbmFuX291dF93X2RuOgorCWFuZGkudwkJJjB4MDAwNywlZDEKKwlic3IubAkJc3RvcmVfZHJlZ193CQkjIHN0b3JlIHJlc3VsdCB0byByZWdmaWxlCisJYnJhLncJCWZzbmFuX2V4aXQKKworZnNuYW5fb3V0X2w6CisJbW92LmwJCUZQX1NSQ19ISSglYTYpLCVkMAkjIGxvYWQgdXBwZXIgbG9uZ3dvcmQgb2YgU05BTgorCWJzZXQJCSYzMCwlZDAJCQkjIHNldCBTTkFOIGJpdAorCWNtcGkuYgkJJWQxLCYweDcJCSMgaXMgPGVhPiBtb2RlIGEgZGF0YSByZWc/CisJYmxlLmIJCWZzbmFuX291dF9sX2RuCQkjIHllcworCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgcGFzczogPGVhPiBvZiBkZWZhdWx0IHJlc3VsdAorCWJzci5sCQlfZG1lbV93cml0ZV9sb25nCSMgd3JpdGUgdGhlIGRlZmF1bHQgcmVzdWx0CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X2wJCSMgeWVzCisKKwlicmEudwkJZnNuYW5fZXhpdAorZnNuYW5fb3V0X2xfZG46CisJYW5kaS53CQkmMHgwMDA3LCVkMQorCWJzci5sCQlzdG9yZV9kcmVnX2wJCSMgc3RvcmUgcmVzdWx0IHRvIHJlZ2ZpbGUKKwlicmEudwkJZnNuYW5fZXhpdAorCitmc25hbl9vdXRfczoKKwljbXBpLmIJCSVkMSwmMHg3CQkjIGlzIDxlYT4gbW9kZSBhIGRhdGEgcmVnPworCWJsZS5iCQlmc25hbl9vdXRfZF9kbgkJIyB5ZXMKKwltb3YubAkJRlBfU1JDX0VYKCVhNiksJWQwCSMgZmV0Y2ggU05BTiBzaWduCisJYW5kaS5sCQkmMHg4MDAwMDAwMCwlZDAJCSMga2VlcCBzaWduCisJb3JpLmwJCSYweDdmYzAwMDAwLCVkMAkJIyBpbnNlcnQgbmV3IGV4cG9uZW50LFNOQU4gYml0CisJbW92LmwJCUZQX1NSQ19ISSglYTYpLCVkMQkjIGxvYWQgbWFudGlzc2EKKwlsc3IubAkJJjB4OCwlZDEJCSMgc2hpZnQgbWFudGlzc2EgZm9yIHNnbAorCW9yLmwJCSVkMSwlZDAJCQkjIGNyZWF0ZSBzZ2wgU05BTgorCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgcGFzczogPGVhPiBvZiBkZWZhdWx0IHJlc3VsdAorCWJzci5sCQlfZG1lbV93cml0ZV9sb25nCSMgd3JpdGUgdGhlIGRlZmF1bHQgcmVzdWx0CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X2wJCSMgeWVzCisKKwlicmEudwkJZnNuYW5fZXhpdAorZnNuYW5fb3V0X2RfZG46CisJbW92LmwJCUZQX1NSQ19FWCglYTYpLCVkMAkjIGZldGNoIFNOQU4gc2lnbgorCWFuZGkubAkJJjB4ODAwMDAwMDAsJWQwCQkjIGtlZXAgc2lnbgorCW9yaS5sCQkmMHg3ZmMwMDAwMCwlZDAJCSMgaW5zZXJ0IG5ldyBleHBvbmVudCxTTkFOIGJpdAorCW1vdi5sCQklZDEsLSglc3ApCisJbW92LmwJCUZQX1NSQ19ISSglYTYpLCVkMQkjIGxvYWQgbWFudGlzc2EKKwlsc3IubAkJJjB4OCwlZDEJCSMgc2hpZnQgbWFudGlzc2EgZm9yIHNnbAorCW9yLmwJCSVkMSwlZDAJCQkjIGNyZWF0ZSBzZ2wgU05BTgorCW1vdi5sCQkoJXNwKSssJWQxCisJYW5kaS53CQkmMHgwMDA3LCVkMQorCWJzci5sCQlzdG9yZV9kcmVnX2wJCSMgc3RvcmUgcmVzdWx0IHRvIHJlZ2ZpbGUKKwlicmEudwkJZnNuYW5fZXhpdAorCitmc25hbl9vdXRfZDoKKwltb3YubAkJRlBfU1JDX0VYKCVhNiksJWQwCSMgZmV0Y2ggU05BTiBzaWduCisJYW5kaS5sCQkmMHg4MDAwMDAwMCwlZDAJCSMga2VlcCBzaWduCisJb3JpLmwJCSYweDdmZjgwMDAwLCVkMAkJIyBpbnNlcnQgbmV3IGV4cG9uZW50LFNOQU4gYml0CisJbW92LmwJCUZQX1NSQ19ISSglYTYpLCVkMQkjIGxvYWQgaGkgbWFudGlzc2EKKwltb3YubAkJJWQwLEZQX1NDUjBfRVgoJWE2KQkjIHN0b3JlIHRvIHRlbXAgc3BhY2UKKwltb3YubAkJJjExLCVkMAkJCSMgbG9hZCBzaGlmdCBhbXQKKwlsc3IubAkJJWQwLCVkMQorCW9yLmwJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBjcmVhdGUgZGJsIGhpCisJbW92LmwJCUZQX1NSQ19ISSglYTYpLCVkMQkjIGxvYWQgaGkgbWFudGlzc2EKKwlhbmRpLmwJCSYweDAwMDAwN2ZmLCVkMQorCXJvci5sCQklZDAsJWQxCisJbW92LmwJCSVkMSxGUF9TQ1IwX0hJKCVhNikJIyBzdG9yZSB0byB0ZW1wIHNwYWNlCisJbW92LmwJCUZQX1NSQ19MTyglYTYpLCVkMQkjIGxvYWQgbG8gbWFudGlzc2EKKwlsc3IubAkJJWQwLCVkMQorCW9yLmwJCSVkMSxGUF9TQ1IwX0hJKCVhNikJIyBjcmVhdGUgZGJsIGxvCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcHRyIHRvIG9wZXJhbmQKKwltb3YubAkJRVhDX0VBKCVhNiksJWExCQkjIHBhc3M6IGRzdCBhZGRyCisJbW92cS5sCQkmMHg4LCVkMAkJIyBwYXNzOiBzaXplIG9mIDggYnl0ZXMKKwlic3IubAkJX2RtZW1fd3JpdGUJCSMgd3JpdGUgdGhlIGRlZmF1bHQgcmVzdWx0CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X2QJCSMgeWVzCisKKwlicmEudwkJZnNuYW5fZXhpdAorCisjIGZvciBleHRlbmRlZCBwcmVjaXNpb24sIGlmIHRoZSBhZGRyZXNzaW5nIG1vZGUgaXMgcHJlLWRlY3JlbWVudCBvcgorIyBwb3N0LWluY3JlbWVudCwgdGhlbiB0aGUgYWRkcmVzcyByZWdpc3RlciBkaWQgbm90IGdldCB1cGRhdGVkLgorIyBpbiBhZGRpdGlvbiwgZm9yIHByZS1kZWNyZW1lbnQsIHRoZSBzdGFja2VkIDxlYT4gaXMgaW5jb3JyZWN0LgorZnNuYW5fb3V0X3g6CisJY2xyLmIJCVNQQ09ORF9GTEcoJWE2KQkJIyBjbGVhciBzcGVjaWFsIGNhc2UgZmxhZworCisJbW92LncJCUZQX1NSQ19FWCglYTYpLEZQX1NDUjBfRVgoJWE2KQorCWNsci53CQkyK0ZQX1NDUjAoJWE2KQorCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSwlZDAKKwlic2V0CQkmMzAsJWQwCisJbW92LmwJCSVkMCxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJRlBfU1JDX0xPKCVhNiksRlBfU0NSMF9MTyglYTYpCisKKwlidHN0CQkmMHg1LEVYQ19TUiglYTYpCSMgc3VwZXJ2aXNvciBtb2RlIGV4Y2VwdGlvbj8KKwlibmUuYgkJZnNuYW5fb3V0X3hfcwkJIyB5ZXMKKworCW1vdi5sCQkldXNwLCVhMAkJIyBmZXRjaCB1c2VyIHN0YWNrIHBvaW50ZXIKKwltb3YubAkJJWEwLEVYQ19BNyglYTYpCQkjIHNhdmUgb24gc3RhY2sgZm9yIGNhbGNfZWEoKQorCW1vdi5sCQkoJWE2KSxFWENfQTYoJWE2KQorCisJYnNyLmwJCV9jYWxjX2VhX2ZvdXQJCSMgZmluZCB0aGUgY29ycmVjdCBlYSx1cGRhdGUgQW4KKwltb3YubAkJJWEwLCVhMQorCW1vdi5sCQklYTAsRVhDX0VBKCVhNikJCSMgc3RhY2sgY29ycmVjdCA8ZWE+CisKKwltb3YubAkJRVhDX0E3KCVhNiksJWEwCisJbW92LmwJCSVhMCwldXNwCQkjIHJlc3RvcmUgdXNlciBzdGFjayBwb2ludGVyCisJbW92LmwJCUVYQ19BNiglYTYpLCglYTYpCisKK2ZzbmFuX291dF94X3NhdmU6CisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcHRyIHRvIG9wZXJhbmQKKwltb3ZxLmwJCSYweGMsJWQwCQkjIHBhc3M6IHNpemUgb2YgZXh0ZW5kZWQKKwlic3IubAkJX2RtZW1fd3JpdGUJCSMgd3JpdGUgdGhlIGRlZmF1bHQgcmVzdWx0CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X3gJCSMgeWVzCisKKwlicmEudwkJZnNuYW5fZXhpdAorCitmc25hbl9vdXRfeF9zOgorCW1vdi5sCQkoJWE2KSxFWENfQTYoJWE2KQorCisJYnNyLmwJCV9jYWxjX2VhX2ZvdXQJCSMgZmluZCB0aGUgY29ycmVjdCBlYSx1cGRhdGUgQW4KKwltb3YubAkJJWEwLCVhMQorCW1vdi5sCQklYTAsRVhDX0VBKCVhNikJCSMgc3RhY2sgY29ycmVjdCA8ZWE+CisKKwltb3YubAkJRVhDX0E2KCVhNiksKCVhNikKKworCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtZGE3X2ZsZyAjIGlzIDxlYT4gbW9kZSAtKGE3KT8KKwlibmUuYgkJZnNuYW5fb3V0X3hfc2F2ZQkjIG5vCisKKyMgdGhlIG9wZXJhdGlvbiB3YXMgImZtb3ZlLnggU05BTiwtKGE3KSIgZnJvbSBzdXBlcnZpc29yIG1vZGUuCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQorCisJbW92LmwJCUVYQ19BNiglYTYpLCVhNgkJIyByZXN0b3JlIGZyYW1lIHBvaW50ZXIKKworCW1vdi5sCQlMT0NBTF9TSVpFK0VYQ19TUiglc3ApLExPQ0FMX1NJWkUrRVhDX1NSLTB4Yyglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX1BDKzB4Miglc3ApLExPQ0FMX1NJWkUrRVhDX1BDKzB4Mi0weGMoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0VYQ19FQSglc3ApLExPQ0FMX1NJWkUrRVhDX0VBLTB4Yyglc3ApCisKKwltb3YubAkJTE9DQUxfU0laRStGUF9TQ1IwX0VYKCVzcCksTE9DQUxfU0laRStFWENfU1IoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX1NDUjBfSEkoJXNwKSxMT0NBTF9TSVpFK0VYQ19QQysweDIoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX1NDUjBfTE8oJXNwKSxMT0NBTF9TSVpFK0VYQ19FQSglc3ApCisKKwlhZGQubAkJJkxPQ0FMX1NJWkUtMHg4LCVzcAorCisJYnJhLmwJCV9yZWFsX3NuYW4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfZnBzcF9pbmV4KCk6IDA2MEZQU1AgZW50cnkgcG9pbnQgZm9yIEZQIEluZXhhY3QgZXhjZXB0aW9uLgkjCisjCQkJCQkJCQkJIworIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIHRoZQkjCisjCUZQIEluZXhhY3QgZXhjZXB0aW9uIGluIGFuIG9wZXJhdGluZyBzeXN0ZW0uCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2ltZW1fcmVhZF9sb25nKCkgLSByZWFkIGluc3RydWN0aW9uIGxvbmd3b3JkCQkJIworIwlmaXhfc2tld2VkX29wcygpIC0gYWRqdXN0IHNyYyBvcGVyYW5kIGluIGZzYXZlIGZyYW1lCQkjCisjCXNldF90YWdfeCgpIC0gZGV0ZXJtaW5lIG9wdHlwZSBvZiBzcmMvZHN0IG9wZXJhbmRzCQkjCisjCXN0b3JlX2ZwcmVnKCkgLSBzdG9yZSBvcGNsYXNzIDAgb3IgMiByZXN1bHQgdG8gRlAgcmVnZmlsZQkjCisjCXVubm9ybV9maXgoKSAtIGNoYW5nZSBVTk5PUk0gb3BlcmFuZHMgdG8gTk9STSBvciBaRVJPCQkjCisjCWxvYWRfZnBuMigpIC0gbG9hZCBkc3Qgb3BlcmFuZCBmcm9tIEZQIHJlZ2ZpbGUJCQkjCisjCXNtb3ZjcigpIC0gZW11bGF0ZSBhbiAiZm1vdmNyIiBpbnN0cnVjdGlvbgkJCSMKKyMJZm91dCgpIC0gZW11bGF0ZSBhbiBvcGNsYXNzIDMgaW5zdHJ1Y3Rpb24JCQkjCisjCXRibF91bnN1cHAgLSBhZGQgb2YgdGFibGUgb2YgZW11bGF0aW9uIHJvdXRpbmVzIGZvciBvcGNsYXNzIDAsMgkjCisjCV9yZWFsX2luZXgoKSAtICJjYWxsb3V0IiB0byBvcGVyYXRpbmcgc3lzdGVtIGluZXhhY3QgaGFuZGxlcgkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgdGhlIEZQIEluZXhhY3QgZXhjZXB0aW9uIGZyYW1lCSMKKyMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIHNvdXJjZSBvcGVyYW5kCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIHVuY2hhbmdlZAkJCQkJIworIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgYWRqdXN0ZWQgc3JjIG9wIGZvciBvcGNsYXNzIDAsMgkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJbiBhIHN5c3RlbSB3aGVyZSB0aGUgRlAgSW5leGFjdCBleGNlcHRpb24gaXMgZW5hYmxlZCwgdGhlIGdvYWwJIworIyBpcyB0byBnZXQgdG8gdGhlIGhhbmRsZXIgc3BlY2lmaWVkIGF0IF9yZWFsX2luZXgoKS4gQnV0LCBvbiB0aGUgMDYwLAkjCisjIGZvciBvcGNsYXNzIHplcm8gYW5kIHR3byBpbnN0cnVjdGlvbiB0YWtpbmcgdGhpcyBleGNlcHRpb24sIHRoZQkjCisjIGhhcmR3YXJlIGRvZXNuJ3Qgc3RvcmUgdGhlIGNvcnJlY3QgcmVzdWx0IHRvIHRoZSBkZXN0aW5hdGlvbiBGUAkjCisjIHJlZ2lzdGVyIGFzIGRpZCB0aGUgJzA0MCBhbmQgJzg4MS8yLiBUaGlzIGhhbmRsZXIgbXVzdCBlbXVsYXRlIHRoZQkjCisjIGluc3RydWN0aW9uIGluIG9yZGVyIHRvIGdldCB0aGlzIHZhbHVlIGFuZCB0aGVuIHN0b3JlIGl0IHRvIHRoZQkjCisjIGNvcnJlY3QgcmVnaXN0ZXIgYmVmb3JlIGNhbGxpbmcgX3JlYWxfaW5leCgpLgkJCQkjCisjCUZvciBvcGNsYXNzIDMgaW5zdHJ1Y3Rpb25zLCB0aGUgMDYwIGRvZXNuJ3Qgc3RvcmUgdGhlIGRlZmF1bHQJIworIyBpbmV4YWN0IHJlc3VsdCBvdXQgdG8gbWVtb3J5IG9yIGRhdGEgcmVnaXN0ZXIgZmlsZSBhcyBpdCBzaG91bGQuCSMKKyMgVGhpcyBjb2RlIG11c3QgZW11bGF0ZSB0aGUgbW92ZSBvdXQgYnkgY2FsbGluZyBmb3V0KCkgYmVmb3JlIGZpbmFsbHkJIworIyBleGl0aW5nIHRocm91Z2ggX3JlYWxfaW5leCgpLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCV9mcHNwX2luZXgKK19mcHNwX2luZXg6CisKKwlsaW5rLncJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCisKKwlmc2F2ZQkJRlBfU1JDKCVhNikJCSMgZ3JhYiB0aGUgImJ1c3kiIGZyYW1lCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlBSRUdTKCVhNikJIyBzYXZlIGZwMC1mcDEgb24gc3RhY2sKKworIyB0aGUgRlBJQVIgaG9sZHMgdGhlICJjdXJyZW50IFBDIiBvZiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24KKwltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19FWFRXUFRSKCVhNikKKworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCB0aGUgaW5zdHJ1Y3Rpb24gd29yZHMKKwltb3YubAkJJWQwLEVYQ19PUFdPUkQoJWE2KQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWJ0c3QJCSYxMywlZDAJCQkjIGlzIGluc3RyIGFuIGZtb3ZlIG91dD8KKwlibmUudwkJZmluZXhfb3V0CQkjIGZtb3ZlIG91dAorCisKKyMgdGhlIGhhcmR3YXJlLCBmb3IgImZhYnMiIGFuZCAiZm5lZyIgdy8gYSBsb25nIHNvdXJjZSBmb3JtYXQsIHB1dHMgdGhlCisjIGxvbmd3b3JkIGludGVnZXIgZGlyZWN0bHkgaW50byB0aGUgdXBwZXIgbG9uZ3dvcmQgb2YgdGhlIG1hbnRpc3NhIGFsb25nCisjIHcvIGFuIGV4cG9uZW50IHZhbHVlIG9mIDB4NDAxZS4gd2UgY29udmVydCB0aGlzIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBoZXJlLgorCWJmZXh0dQkJJWQweyYxOTomM30sJWQwCQkjIGZldGNoIGluc3RyIHNpemUKKwlibmUuYgkJZmluZXhfY29udAkJIyBpbnN0ciBzaXplIGlzIG5vdCBsb25nCisJY21waS53CQlGUF9TUkNfRVgoJWE2KSwmMHg0MDFlCSMgaXMgZXhwb25lbnQgMHg0MDFlPworCWJuZS5iCQlmaW5leF9jb250CQkjIG5vCisJZm1vdi5sCQkmMHgwLCVmcGNyCisJZm1vdi5sCQlGUF9TUkNfSEkoJWE2KSwlZnAwCSMgbG9hZCBpbnRlZ2VyIHNyYworCWZtb3YueAkJJWZwMCxGUF9TUkMoJWE2KQkjIHN0b3JlIGludGVnZXIgYXMgZXh0ZW5kZWQgcHJlY2lzaW9uCisJbW92LncJCSYweGUwMDEsMHgyK0ZQX1NSQyglYTYpCisKK2ZpbmV4X2NvbnQ6CisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHNyYyBvcAorCWJzci5sCQlmaXhfc2tld2VkX29wcwkJIyBmaXggc3JjIG9wCisKKyMgSGVyZSwgd2UgemVybyB0aGUgY2NvZGUgYW5kIGV4Y2VwdGlvbiBieXRlIGZpZWxkIHNpbmNlIHdlJ3JlIGdvaW5nIHRvCisjIGVtdWxhdGUgdGhlIHdob2xlIGluc3RydWN0aW9uLiBOb3RpY2UsIHRob3VnaCwgdGhhdCB3ZSBkb24ndCBraWxsIHRoZQorIyBJTkVYMSBiaXQuIFRoaXMgaXMgYmVjYXVzZSBhIHBhY2tlZCBvcCBoYXMgbG9uZyBzaW5jZSBiZWVuIGNvbnZlcnRlZAorIyB0byBleHRlbmRlZCBiZWZvcmUgYXJyaXZpbmcgaGVyZS4gVGhlcmVmb3JlLCB3ZSBuZWVkIHRvIHJldGFpbiB0aGUKKyMgSU5FWDEgYml0IGZyb20gd2hlbiB0aGUgb3BlcmFuZCB3YXMgZmlyc3QgY29udmVydGVkLgorCWFuZGkubAkJJjB4MDBmZjAxZmYsVVNFUl9GUFNSKCVhNikgIyB6ZXJvIGFsbCBidXQgYWNjdXJlZCBmaWVsZAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gY3VycmVudCBjb250cm9sIHJlZ3MKKwlmbW92LmwJCSYweDAsJWZwc3IKKworCWJmZXh0dQkJRVhDX0VYVFdPUkQoJWE2KXsmMDomNn0sJWQxICMgZXh0cmFjdCB1cHBlciA2IG9mIGNtZHJlZworCWNtcGkuYgkJJWQxLCYweDE3CQkjIGlzIG9wIGFuIGZtb3ZlY3I/CisJYmVxLncJCWZpbmV4X2Ztb3ZjcgkJIyB5ZXMKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKKwlic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikJCSMgbWF5YmUgTk9STSxERU5PUk0KKworIyBiaXRzIGZvdXIgYW5kIGZpdmUgb2YgdGhlIGZwIGV4dGVuc2lvbiB3b3JkIHNlcGFyYXRlIHRoZSBtb25hZGljIGFuZCBkeWFkaWMKKyMgb3BlcmF0aW9ucyB0aGF0IGNhbiBwYXNzIHRocm91Z2ggZnBzcF9pbmV4KCkuIHJlbWVtYmVyIHRoYXQgZmNtcCBhbmQgZnRzdAorIyB3aWxsIG5ldmVyIHRha2UgdGhpcyBleGNlcHRpb24sIGJ1dCBmc2luY29zIHdpbGwuCisJYnRzdAkJJjB4NSwxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wZXJhdGlvbiBtb25hZGljIG9yIGR5YWRpYz8KKwliZXEuYgkJZmluZXhfZXh0cmFjdAkJIyBtb25hZGljCisKKwlidHN0CQkmMHg0LDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3BlcmF0aW9uIGFuIGZzaW5jb3M/CisJYm5lLmIJCWZpbmV4X2V4dHJhY3QJCSMgeWVzCisKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwICMgZHlhZGljOyBsb2FkIGRzdCByZWcKKwlic3IubAkJbG9hZF9mcG4yCQkjIGxvYWQgZHN0IGludG8gRlBfRFNUCisKKwlsZWEJCUZQX0RTVCglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gZHN0IG9wCisJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQorCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgb3BlcmFuZCBhbiBVTk5PUk0/CisJYm5lLmIJCWZpbmV4X29wMl9kb25lCQkjIG5vCisJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBjb252ZXJ0IHRvIE5PUk0sREVOT1JNLG9yIFpFUk8KK2ZpbmV4X29wMl9kb25lOgorCW1vdi5iCQklZDAsRFRBRyglYTYpCQkjIHNhdmUgZHN0IG9wdHlwZSB0YWcKKworZmluZXhfZXh0cmFjdDoKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIHByZWMvbW9kZQorCisJbW92LmIJCTErRVhDX0NNRFJFRyglYTYpLCVkMQorCWFuZGkudwkJJjB4MDA3ZiwlZDEJCSMgZXh0cmFjdCBleHRlbnNpb24KKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJbGVhCQlGUF9EU1QoJWE2KSwlYTEKKworCW1vdi5sCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEudyo0KSwlZDEgIyBmZXRjaCByb3V0aW5lIGFkZHIKKwlqc3IJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS5sKjEpCisKKyMgdGhlIG9wZXJhdGlvbiBoYXMgYmVlbiBlbXVsYXRlZC4gdGhlIHJlc3VsdCBpcyBpbiBmcDAuCitmaW5leF9zYXZlOgorCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAKKwlic3IubAkJc3RvcmVfZnByZWcKKworZmluZXhfZXhpdDoKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCisKKwl1bmxrCQklYTYKKwlicmEubAkJX3JlYWxfaW5leAorCitmaW5leF9mbW92Y3I6CisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBwcmVjLG1vZGUKKwltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQxCisJYW5kaS5sCQkmMHgwMDAwMDA3ZiwlZDEJCSMgcGFzcyByb20gb2Zmc2V0CisJYnNyLmwJCXNtb3ZjcgorCWJyYS5iCQlmaW5leF9zYXZlCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIHRoZSBoYXJkd2FyZSBkb2VzIG5vdCBzYXZlIHRoZSBkZWZhdWx0IHJlc3VsdCB0byBtZW1vcnkgb24gZW5hYmxlZAorIyBpbmV4YWN0IGV4Y2VwdGlvbnMuIHdlIGRvIHRoaXMgaGVyZSBiZWZvcmUgcGFzc2luZyBjb250cm9sIHRvCisjIHRoZSB1c2VyIGluZXhhY3QgaGFuZGxlci4KKyMKKyMgYnl0ZSwgd29yZCwgYW5kIGxvbmcgZGVzdGluYXRpb24gZm9ybWF0IG9wZXJhdGlvbnMgY2FuIHBhc3MKKyMgdGhyb3VnaCBoZXJlLiBzbyBjYW4gZG91YmxlIGFuZCBzaW5nbGUgcHJlY2lzaW9uLgorIyBhbHRob3VnaCBwYWNrZWQgb3BjbGFzcyB0aHJlZSBvcGVyYXRpb25zIGNhbiB0YWtlIGluZXhhY3QKKyMgZXhjZXB0aW9ucywgdGhleSB3b24ndCBwYXNzIHRocm91Z2ggaGVyZSBzaW5jZSB0aGV5IGFyZSBjYXVnaHQKKyMgZmlyc3QgYnkgdGhlIHVuc3VwcG9ydGVkIGRhdGEgZm9ybWF0IGV4Y2VwdGlvbiBoYW5kbGVyLiB0aGF0IGhhbmRsZXIKKyMgc2VuZHMgdGhlbSBkaXJlY3RseSB0byBfcmVhbF9pbmV4KCkgaWYgbmVjZXNzYXJ5LgorIworZmluZXhfb3V0OgorCisJbW92LmIJCSZOT1JNLFNUQUcoJWE2KQkJIyBzcmMgaXMgYSBOT1JNCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIHByZWMsbW9kZQorCisJYW5kaS5sCQkmMHhmZmZmMDBmZixVU0VSX0ZQU1IoJWE2KSAjIHplcm8gZXhjZXB0aW9uIGZpZWxkCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMgb3BlcmFuZAorCisJYnNyLmwJCWZvdXQJCQkjIHN0b3JlIHRoZSBkZWZhdWx0IHJlc3VsdAorCisJYnJhLmIJCWZpbmV4X2V4aXQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfZnBzcF9keigpOiAwNjBGUFNQIGVudHJ5IHBvaW50IGZvciBGUCBEWiBleGNlcHRpb24uCQkjCisjCQkJCQkJCQkJIworIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nCSMKKyMJdGhlIEZQIERaIGV4Y2VwdGlvbiBpbiBhbiBvcGVyYXRpbmcgc3lzdGVtLgkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9pbWVtX3JlYWRfbG9uZygpIC0gcmVhZCBpbnN0cnVjdGlvbiBsb25nd29yZCBmcm9tIG1lbW9yeQkjCisjCWZpeF9za2V3ZWRfb3BzKCkgLSBhZGp1c3QgZnNhdmUgb3BlcmFuZAkJCQkjCisjCV9yZWFsX2R6KCkgLSAiY2FsbG91dCIgZXhpdCBwb2ludCBmcm9tIEZQIERaIGhhbmRsZXIJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBjb250YWlucyB0aGUgRlAgRFogZXhjZXB0aW9uIHN0YWNrLgkJIworIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgc291cmNlIG9wZXJhbmQuCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIHRoZSBGUCBEWiBleGNlcHRpb24gc3RhY2suCQkjCisjCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBhZGp1c3RlZCBzb3VyY2Ugb3BlcmFuZC4JCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUluIGEgc3lzdGVtIHdoZXJlIHRoZSBEWiBleGNlcHRpb24gaXMgZW5hYmxlZCwgdGhlIGdvYWwgaXMgdG8JIworIyBnZXQgdG8gdGhlIGhhbmRsZXIgc3BlY2lmaWVkIGF0IF9yZWFsX2R6KCkuIEJ1dCwgb24gdGhlIDA2MCwgd2hlbiB0aGUJIworIyBleGNlcHRpb24gaXMgdGFrZW4sIHRoZSBpbnB1dCBvcGVyYW5kIGluIHRoZSBmc2F2ZSBzdGF0ZSBmcmFtZSBtYXkJIworIyBiZSBpbmNvcnJlY3QgZm9yIHNvbWUgY2FzZXMgYW5kIG5lZWQgdG8gYmUgYWRqdXN0ZWQuIFNvLCB0aGlzIHBhY2thZ2UJIworIyBhZGp1c3RzIHRoZSBvcGVyYW5kIHVzaW5nIGZpeF9za2V3ZWRfb3BzKCkgYW5kIHRoZW4gYnJhbmNoZXMgdG8JIworIyBfcmVhbF9keigpLgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2Zwc3BfZHoKK19mcHNwX2R6OgorCisJbGluay53CQklYTYsJi1MT0NBTF9TSVpFCSMgaW5pdCBzdGFjayBmcmFtZQorCisJZnNhdmUJCUZQX1NSQyglYTYpCQkjIGdyYWIgdGhlICJidXN5IiBmcmFtZQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQUkVHUyglYTYpCSMgc2F2ZSBmcDAtZnAxIG9uIHN0YWNrCisKKyMgdGhlIEZQSUFSIGhvbGRzIHRoZSAiY3VycmVudCBQQyIgb2YgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uCisJbW92LmwJCVVTRVJfRlBJQVIoJWE2KSxFWENfRVhUV1BUUiglYTYpCisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggdGhlIGluc3RydWN0aW9uIHdvcmRzCisJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKworIyBoZXJlLCB3ZSBzaW1wbHkgc2VlIGlmIHRoZSBvcGVyYW5kIGluIHRoZSBmc2F2ZSBmcmFtZSBuZWVkcyB0byBiZSAidW5za2V3ZWQiLgorIyB0aGlzIHdvdWxkIGJlIHRoZSBjYXNlIGZvciBvcGNsYXNzIHR3byBvcGVyYXRpb25zIHdpdGggYSBzb3VyY2UgemVybworIyBpbiB0aGUgc2dsIG9yIGRibCBmb3JtYXQuCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHNyYyBvcAorCWJzci5sCQlmaXhfc2tld2VkX29wcwkJIyBmaXggc3JjIG9wCisKK2Zkel9leGl0OgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikKKworCXVubGsJCSVhNgorCWJyYS5sCQlfcmVhbF9kegorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9mcHNwX2ZsaW5lKCk6IDA2MEZQU1AgZW50cnkgcG9pbnQgZm9yICJMaW5lIEYgZW11bGF0b3IiIGV4Yy4JIworIwkJCQkJCQkJCSMKKyMJVGhpcyBoYW5kbGVyIHNob3VsZCBiZSB0aGUgZmlyc3QgY29kZSBleGVjdXRlZCB1cG9uIHRha2luZyB0aGUJIworIwkiTGluZSBGIEVtdWxhdG9yIiBleGNlcHRpb24gaW4gYW4gb3BlcmF0aW5nIHN5c3RlbS4JCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9mcHNwX3VuaW1wKCkgLSBoYW5kbGUgIkZQIFVuaW1wbGVtZW50ZWQiIGV4Y2VwdGlvbnMJCSMKKyMJX3JlYWxfZnB1X2Rpc2FibGVkKCkgLSBoYW5kbGUgIkZQVSBkaXNhYmxlZCIgZXhjZXB0aW9ucwkJIworIwlfcmVhbF9mbGluZSgpIC0gaGFuZGxlICJGTElORSIgZXhjZXB0aW9ucwkJCSMKKyMJX2ltZW1fcmVhZF9sb25nKCkgLSByZWFkIGluc3RydWN0aW9uIGxvbmd3b3JkCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIGEgIkxpbmUgRiBFbXVsYXRvciIgZXhjZXB0aW9uCSMKKyMJICBzdGFjayBmcmFtZS4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIHVuY2hhbmdlZAkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJV2hlbiBhICJMaW5lIEYgRW11bGF0b3IiIGV4Y2VwdGlvbiBvY2N1cnMsIHRoZXJlIGFyZSAzIHBvc3NpYmxlCSMKKyMgZXhjZXB0aW9uIHR5cGVzLCBkZW5vdGVkIGJ5IHRoZSBleGNlcHRpb24gc3RhY2sgZnJhbWUgZm9ybWF0IG51bWJlcjoJIworIwkoMSkgRlBVIHVuaW1wbGVtZW50ZWQgaW5zdHJ1Y3Rpb24gKDYgd29yZCBzdGFjayBmcmFtZSkJCSMKKyMJKDIpIEZQVSBkaXNhYmxlZCAoOCB3b3JkIHN0YWNrIGZyYW1lKQkJCQkjCisjCSgzKSBMaW5lIEYgKDQgd29yZCBzdGFjayBmcmFtZSkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCVRoaXMgbW9kdWxlIGRldGVybWluZXMgd2hpY2ggYW5kIGZvcmtzIHRoZSBmbG93IG9mZiB0byB0aGUJIworIyBhcHByb3ByaWF0ZSAiY2FsbG91dCIgKGZvciAiZGlzYWJsZWQiIGFuZCAiTGluZSBGIikgb3IgdG8gdGhlCQkjCisjIGNvcnJlY3QgZW11bGF0aW9uIGNvZGUgKGZvciAiRlBVIHVuaW1wbGVtZW50ZWQiKS4JCQkjCisjCVRoaXMgY29kZSBhbHNvIG11c3QgY2hlY2sgZm9yICJmbW92ZWNyIiBpbnN0cnVjdGlvbnMgdy8gYQkjCisjIG5vbi16ZXJvIDxlYT4gZmllbGQuIFRoZXNlIG1heSBnZXQgZmxhZ2dlZCBhcyAiTGluZSBGIiBidXQgc2hvdWxkCSMKKyMgcmVhbGx5IGJlIGZsYWdnZWQgYXMgIkZQVSBVbmltcGxlbWVudGVkIi4gKFRoaXMgaXMgYSAiZmVhdHVyZSIgb24JIworIyB0aGUgJzA2MC4JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCV9mcHNwX2ZsaW5lCitfZnBzcF9mbGluZToKKworIyBjaGVjayB0byBzZWUgaWYgdGhpcyBleGNlcHRpb24gaXMgYSAiRlAgVW5pbXBsZW1lbnRlZCBJbnN0cnVjdGlvbiIKKyMgZXhjZXB0aW9uLiBpZiBzbywgYnJhbmNoIGRpcmVjdGx5IHRvIHRoYXQgaGFuZGxlcidzIGVudHJ5IHBvaW50LgorCWNtcGkudwkJMHg2KCVzcCksJjB4MjAyYworCWJlcS5sCQlfZnBzcF91bmltcAorCisjIGNoZWNrIHRvIHNlZSBpZiB0aGUgRlBVIGlzIGRpc2FibGVkLiBpZiBzbywganVtcCB0byB0aGUgT1MgZW50cnkKKyMgcG9pbnQgZm9yIHRoYXQgY29uZGl0aW9uLgorCWNtcGkudwkJMHg2KCVzcCksJjB4NDAyYworCWJlcS5sCQlfcmVhbF9mcHVfZGlzYWJsZWQKKworIyB0aGUgZXhjZXB0aW9uIHdhcyBhbiAiRi1MaW5lIElsbGVnYWwiIGV4Y2VwdGlvbi4gd2UgY2hlY2sgdG8gc2VlCisjIGlmIHRoZSBGLUxpbmUgaW5zdHJ1Y3Rpb24gaXMgYW4gImZtb3ZlY3IiIHcvIGEgbm9uLXplcm8gPGVhPi4gaWYKKyMgc28sIGNvbnZlcnQgdGhlIEYtTGluZSBleGNlcHRpb24gc3RhY2sgZnJhbWUgdG8gYW4gRlAgVW5pbXBsZW1lbnRlZAorIyBJbnN0cnVjdGlvbiBleGNlcHRpb24gc3RhY2sgZnJhbWUgZWxzZSBicmFuY2ggdG8gdGhlIE9TIGVudHJ5CisjIHBvaW50IGZvciB0aGUgRi1MaW5lIGV4Y2VwdGlvbiBoYW5kbGVyLgorCWxpbmsudwkJJWE2LCYtTE9DQUxfU0laRQkjIGluaXQgc3RhY2sgZnJhbWUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKworCW1vdi5sCQlFWENfUEMoJWE2KSxFWENfRVhUV1BUUiglYTYpCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIGluc3RydWN0aW9uIHdvcmRzCisKKwliZmV4dHUJCSVkMHsmMDomMTB9LCVkMQkJIyBpcyBpdCBhbiBmbW92ZWNyPworCWNtcGkudwkJJWQxLCYweDAzYzgKKwlibmUuYgkJZmxpbmVfZmxpbmUJCSMgbm8KKworCWJmZXh0dQkJJWQweyYxNjomNn0sJWQxCQkjIGlzIGl0IGFuIGZtb3ZlY3I/CisJY21waS5iCQklZDEsJjB4MTcKKwlibmUuYgkJZmxpbmVfZmxpbmUJCSMgbm8KKworIyBpdCdzIGFuIGZtb3ZlY3Igdy8gYSBub24temVybyA8ZWE+IHRoYXQgaGFzIGVudGVyZWQgdGhyb3VnaAorIyB0aGUgRi1MaW5lIElsbGVnYWwgZXhjZXB0aW9uLgorIyBzbywgd2UgbmVlZCB0byBjb252ZXJ0IHRoZSBGLUxpbmUgZXhjZXB0aW9uIHN0YWNrIGZyYW1lIGludG8gYW4KKyMgRlAgVW5pbXBsZW1lbnRlZCBJbnN0cnVjdGlvbiBzdGFjayBmcmFtZSBhbmQganVtcCB0byB0aGF0IGVudHJ5CisjIHBvaW50LgorIworIyBidXQsIGlmIHRoZSBGUFUgaXMgZGlzYWJsZWQsIHRoZW4gd2UgbmVlZCB0byBqdW1wIHRvIHRoZSBGUFUgZGlhYmxlZAorIyBlbnRyeSBwb2ludC4KKwltb3ZjCQklcGNyLCVkMAorCWJ0c3QJCSYweDEsJWQwCisJYmVxLmIJCWZsaW5lX2Ztb3ZjcgorCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CisKKwlzdWIubAkJJjB4OCwlc3AJCSMgbWFrZSByb29tIGZvciAiTmV4dCBQQyIsIDxlYT4KKwltb3YudwkJMHg4KCVzcCksKCVzcCkKKwltb3YubAkJMHhhKCVzcCksMHgyKCVzcCkJIyBtb3ZlICJDdXJyZW50IFBDIgorCW1vdi53CQkmMHg0MDJjLDB4Niglc3ApCisJbW92LmwJCTB4Miglc3ApLDB4Yyglc3ApCisJYWRkcS5sCQkmMHg0LDB4Miglc3ApCQkjIHNldCAiTmV4dCBQQyIKKworCWJyYS5sCQlfcmVhbF9mcHVfZGlzYWJsZWQKKworZmxpbmVfZm1vdmNyOgorCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgorCisJZm1vdi5sCQkweDIoJXNwKSwlZnBpYXIJCSMgc2V0IGN1cnJlbnQgUEMKKwlhZGRxLmwJCSYweDQsMHgyKCVzcCkJCSMgc2V0IE5leHQgUEMKKworCW1vdi5sCQkoJXNwKSwtKCVzcCkKKwltb3YubAkJMHg4KCVzcCksMHg0KCVzcCkKKwltb3YuYgkJJjB4MjAsMHg2KCVzcCkKKworCWJyYS5sCQlfZnBzcF91bmltcAorCitmbGluZV9mbGluZToKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYKKworCWJyYS5sCQlfcmVhbF9mbGluZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9mcHNwX3VuaW1wKCk6IDA2MEZQU1AgZW50cnkgcG9pbnQgZm9yIEZQICJVbmltcGxlbWVudGVkCSMKKyMJCSAgICAgICBJbnN0cnVjdGlvbiIgZXhjZXB0aW9uLgkJCQkjCisjCQkJCQkJCQkJIworIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIHRoZQkjCisjCUZQIFVuaW1wbGVtZW50ZWQgSW5zdHJ1Y3Rpb24gZXhjZXB0aW9uIGluIGFuIG9wZXJhdGluZyBzeXN0ZW0uCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9pbWVtX3JlYWRfe3dvcmQsbG9uZ30oKSAtIHJlYWQgaW5zdHJ1Y3Rpb24gd29yZC9sb25nd29yZAkjCisjCWxvYWRfZm9wKCkgLSBsb2FkIHNyYy9kc3Qgb3BzIGZyb20gbWVtb3J5IGFuZC9vciBGUCByZWdmaWxlCSMKKyMJc3RvcmVfZnByZWcoKSAtIHN0b3JlIG9wY2xhc3MgMCBvciAyIHJlc3VsdCB0byBGUCByZWdmaWxlCSMKKyMJdGJsX3RyYW5zIC0gYWRkciBvZiB0YWJsZSBvZiBlbXVsYXRpb24gcm91dGluZXMgZm9yIHRybnNjbmRscwkjCisjCV9yZWFsX2FjY2VzcygpIC0gImNhbGxvdXQiIGZvciBhY2Nlc3MgZXJyb3IgZXhjZXB0aW9uCQkjCisjCV9mcHNwX2RvbmUoKSAtICJjYWxsb3V0IiBmb3IgZXhpdDsgd29yayBhbGwgZG9uZQkJIworIwlfcmVhbF90cmFjZSgpIC0gImNhbGxvdXQiIGZvciBUcmFjZSBlbmFibGVkIGV4Y2VwdGlvbgkJIworIwlzbW92Y3IoKSAtIGVtdWxhdGUgImZtb3ZlY3IiIGluc3RydWN0aW9uCQkJIworIwlmdW5pbXBfc2tldygpIC0gYWRqdXN0IGZzYXZlIHNyYyBvcHMgdG8gImluY29ycmVjdCIgdmFsdWUJIworIwlfZnRyYXBjYygpIC0gZW11bGF0ZSBhbiAiZnRyYXBjYyIgaW5zdHJ1Y3Rpb24JCQkjCisjCV9mZGJjYygpIC0gZW11bGF0ZSBhbiAiZmRiY2MiIGluc3RydWN0aW9uCQkJIworIwlfZnNjYygpIC0gZW11bGF0ZSBhbiAiZnNjYyIgaW5zdHJ1Y3Rpb24JCQkJIworIwlfcmVhbF90cmFwKCkgLSAiY2FsbG91dCIgZm9yIFRyYXAgZXhjZXB0aW9uCQkJIworIwlfcmVhbF9ic3VuKCkgLSAiY2FsbG91dCIgZm9yIGVuYWJsZWQgQnN1biBleGNlcHRpb24JCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBjb250YWlucyB0aGUgIlVuaW1wbGVtZW50ZWQgSW5zdHIiIHN0ayBmcmFtZQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJZiBhY2Nlc3MgZXJyb3I6CQkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhbiBhY2Nlc3MgZXJyb3Igc3RhY2sgZnJhbWUJIworIwlJZiBUcmFjZSBleGNlcHRpb24gZW5hYmxlZDoJCQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIGNoYW5nZWQgdG8gYSBUcmFjZSBleGNlcHRpb24gc3RhY2sgZnJhbWUJIworIwlFbHNlOiAobm9ybWFsIGNhc2UpCQkJCQkJIworIwktIENvcnJlY3QgcmVzdWx0IGhhcyBiZWVuIHN0b3JlZCBhcyBhcHByb3ByaWF0ZQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoZXJlIGFyZSB0d28gbWFpbiBjYXNlcyBvZiBpbnN0cnVjdGlvbnMgdGhhdCBtYXkgZW50ZXIgaGVyZSB0bwkjCisjIGJlIGVtdWxhdGVkOiAoMSkgdGhlIEZQZ2VuIGluc3RydWN0aW9ucywgbW9zdCBvZiB3aGljaCB3ZXJlIGFsc28JIworIyB1bmltcGxlbWVudGVkIG9uIHRoZSAwNDAsIGFuZCAoMikgImZ0cmFwY2MiLCAiZnNjYyIsIGFuZCAiZmRiY2MiLgkjCisjCUZvciB0aGUgZmlyc3Qgc2V0LCB0aGlzIGhhbmRsZXIgY2FsbHMgdGhlIHJvdXRpbmUgbG9hZF9mb3AoKQkjCisjIHRvIGxvYWQgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gKGZvciBkeWFkaWMpIG9wZXJhbmRzIHRvIGJlIHVzZWQJIworIyBmb3IgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uLiBUaGUgY29ycmVjdCBlbXVsYXRpb24gcm91dGluZSBpcyB0aGVuCSMKKyMgY2hvc2VuIGJ5IGRlY29kaW5nIHRoZSBpbnN0cnVjdGlvbiB0eXBlIGFuZCBpbmRleGluZyBpbnRvIGFuCQkjCisjIGVtdWxhdGlvbiBzdWJyb3V0aW5lIGluZGV4IHRhYmxlLiBBZnRlciBlbXVsYXRpb24gcmV0dXJucywgdGhpcwkjCisjIGhhbmRsZXIgY2hlY2tzIHRvIHNlZSBpZiBhbiBleGNlcHRpb24gc2hvdWxkIG9jY3VyIGFzIGEgcmVzdWx0IG9mIHRoZSAjCisjIEZQIGluc3RydWN0aW9uIGVtdWxhdGlvbi4gSWYgc28sIHRoZW4gYW4gRlAgZXhjZXB0aW9uIG9mIHRoZSBjb3JyZWN0CSMKKyMgdHlwZSBpcyBpbnNlcnRlZCBpbnRvIHRoZSBGUFUgc3RhdGUgZnJhbWUgdXNpbmcgdGhlICJmcmVzdG9yZSIJIworIyBpbnN0cnVjdGlvbiBiZWZvcmUgZXhpdGluZyB0aHJvdWdoIF9mcHNwX2RvbmUoKS4gSW4gZWl0aGVyIHRoZQkjCisjIGV4Y2VwdGlvbmFsIG9yIG5vbi1leGNlcHRpb25hbCBjYXNlcywgd2UgbXVzdCBjaGVjayB0byBzZWUgaWYgdGhlCSMKKyMgVHJhY2UgZXhjZXB0aW9uIGlzIGVuYWJsZWQuIElmIHNvLCB0aGVuIHdlIG11c3QgY3JlYXRlIGEgVHJhY2UJIworIyBleGNlcHRpb24gZnJhbWUgZnJvbSB0aGUgY3VycmVudCBleGNlcHRpb24gZnJhbWUgYW5kIGV4aXQgdGhyb3VnaAkjCisjIF9yZWFsX3RyYWNlKCkuCQkJCQkJCSMKKyMJRm9yICJmZGJjYyIsICJmdHJhcGNjIiwgYW5kICJmc2NjIiwgdGhlIGVtdWxhdGlvbiBzdWJyb3V0aW5lcwkjCisjIF9mZGJjYygpLCBfZnRyYXBjYygpLCBhbmQgX2ZzY2MoKSByZXNwZWN0aXZlbHkgYXJlIHVzZWQuIEFsbCB0aHJlZQkjCisjIG1heSBmbGFnIHRoYXQgYSBCU1VOIGV4Y2VwdGlvbiBzaG91bGQgYmUgdGFrZW4uIElmIHNvLCB0aGVuIHRoZQkjCisjIGN1cnJlbnQgZXhjZXB0aW9uIHN0YWNrIGZyYW1lIGlzIGNvbnZlcnRlZCBpbnRvIGEgQlNVTiBleGNlcHRpb24JIworIyBzdGFjayBmcmFtZSBhbmQgYW4gZXhpdCBpcyBtYWRlIHRocm91Z2ggX3JlYWxfYnN1bigpLiBJZiB0aGUJCSMKKyMgaW5zdHJ1Y3Rpb24gd2FzICJmdHJhcGNjIiBhbmQgYSBUcmFwIGV4Y2VwdGlvbiBzaG91bGQgcmVzdWx0LCBhIFRyYXAJIworIyBleGNlcHRpb24gc3RhY2sgZnJhbWUgaXMgY3JlYXRlZCBmcm9tIHRoZSBjdXJyZW50IGZyYW1lIGFuZCBhbiBleGl0CSMKKyMgaXMgbWFkZSB0aHJvdWdoIF9yZWFsX3RyYXAoKS4gSWYgYSBUcmFjZSBleGNlcHRpb24gaXMgcGVuZGluZywgdGhlbgkjCisjIGEgVHJhY2UgZXhjZXB0aW9uIGZyYW1lIGlzIGNyZWF0ZWQgZnJvbSB0aGUgY3VycmVudCBmcmFtZSBhbmQgYSBqdW1wCSMKKyMgaXMgbWFkZSB0byBfcmVhbF90cmFjZSgpLiBGaW5hbGx5LCBpZiBub25lIG9mIHRoZXNlIGNvbmRpdGlvbnMgZXhpc3QsCSMKKyMgdGhlbiB0aGUgaGFuZGxlciBleGl0cyB0aG91Z2ggdGhlIGNhbGxvdXQgX2Zwc3BfZG9uZSgpLgkJIworIwkJCQkJCQkJCSMKKyMJSW4gYW55IG9mIHRoZSBhYm92ZSBzY2VuYXJpb3MsIGlmIGEgX21lbV9yZWFkKCkgb3IgX21lbV93cml0ZSgpCSMKKyMgImNhbGxvdXQiIHJldHVybnMgYSBmYWlsaW5nIHZhbHVlLCB0aGVuIGFuIGFjY2VzcyBlcnJvciBzdGFjayBmcmFtZQkjCisjIGlzIGNyZWF0ZWQgZnJvbSB0aGUgY3VycmVudCBzdGFjayBmcmFtZSBhbmQgYW4gZXhpdCBpcyBtYWRlIHRocm91Z2gJIworIyBfcmVhbF9hY2Nlc3MoKS4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBGUCBVTklNUExFTUVOVEVEIElOU1RSVUNUSU9OIFNUQUNLIEZSQU1FOgorIworIwkqKioqKioqKioqKioqKioqKgorIwkqCQkqID0+IDxlYT4gb2YgZnAgdW5pbXAgaW5zdHIuCisjCS0gICAgICBFQQktCisjCSoJCSoKKyMJKioqKioqKioqKioqKioqKioKKyMJKiAweDIgKiAgMHgwMmMJKiA9PiBmcmFtZSBmb3JtYXQgYW5kIHZlY3RvciBvZmZzZXQodmVjdG9yICMxMSkKKyMJKioqKioqKioqKioqKioqKioKKyMJKgkJKgorIwktICAgIE5leHQgUEMJLSA9PiBQQyBvZiBpbnN0ciB0byBleGVjdXRlIGFmdGVyIGV4YyBoYW5kbGluZworIwkqCQkqCisjCSoqKioqKioqKioqKioqKioqCisjCSogICAgICBTUgkqID0+IFNSIGF0IHRoZSB0aW1lIHRoZSBleGNlcHRpb24gd2FzIHRha2VuCisjCSoqKioqKioqKioqKioqKioqCisjCisjIE5vdGU6IHRoZSAhTlVMTCBiaXQgZG9lcyBub3QgZ2V0IHNldCBpbiB0aGUgZnNhdmUgZnJhbWUgd2hlbiB0aGUKKyMgbWFjaGluZSBlbmNvdW50ZXJzIGFuIGZwIHVuaW1wIGV4Y2VwdGlvbi4gVGhlcmVmb3JlLCBpdCBtdXN0IGJlIHNldAorIyBiZWZvcmUgbGVhdmluZyB0aGlzIGhhbmRsZXIuCisjCisJZ2xvYmFsCQlfZnBzcF91bmltcAorX2Zwc3BfdW5pbXA6CisKKwlsaW5rLncJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlBSRUdTKCVhNikJIyBzYXZlIGZwMC1mcDEKKworCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikJIyB1c2VyIG1vZGUgZXhjZXB0aW9uPworCWJuZS5iCQlmdW5pbXBfcwkJIyBubzsgc3VwZXJ2aXNvciBtb2RlCisKKyMgc2F2ZSB0aGUgdmFsdWUgb2YgdGhlIHVzZXIgc3RhY2sgcG9pbnRlciBvbnRvIHRoZSBzdGFjayBmcmFtZQorZnVuaW1wX3U6CisJbW92LmwJCSV1c3AsJWEwCQkjIGZldGNoIHVzZXIgc3RhY2sgcG9pbnRlcgorCW1vdi5sCQklYTAsRVhDX0E3KCVhNikJCSMgc3RvcmUgaW4gc3RhY2sgZnJhbWUKKwlicmEuYgkJZnVuaW1wX2NvbnQKKworIyBzdG9yZSB0aGUgdmFsdWUgb2YgdGhlIHN1cGVydmlzb3Igc3RhY2sgcG9pbnRlciBCRUZPUkUgdGhlIGV4YyBvY2N1cnJlZC4KKyMgb2xkX3NwIGlzIGFkZHJlc3MganVzdCBhYm92ZSBzdGFja2VkIGVmZmVjdGl2ZSBhZGRyZXNzLgorZnVuaW1wX3M6CisJbGVhCQk0K0VYQ19FQSglYTYpLCVhMAkjIGxvYWQgb2xkIGE3JworCW1vdi5sCQklYTAsRVhDX0E3KCVhNikJCSMgc3RvcmUgYTcnCisJbW92LmwJCSVhMCxPTERfQTcoJWE2KQkJIyBtYWtlIGEgY29weQorCitmdW5pbXBfY29udDoKKworIyB0aGUgRlBJQVIgaG9sZHMgdGhlICJjdXJyZW50IFBDIiBvZiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24uCisJbW92LmwJCVVTRVJfRlBJQVIoJWE2KSxFWENfRVhUV1BUUiglYTYpCisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggdGhlIGluc3RydWN0aW9uIHdvcmRzCisJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJY2xyLmIJCVNQQ09ORF9GTEcoJWE2KQkJIyBjbGVhciAic3BlY2lhbCBjYXNlIiBmbGFnCisKKyMgRGl2aWRlIHRoZSBmcCBpbnN0cnVjdGlvbnMgaW50byA4IHR5cGVzIGJhc2VkIG9uIHRoZSBUWVBFIGZpZWxkIGluCisjIGJpdHMgNi04IG9mIHRoZSBvcHdvcmQoY2xhc3NlcyA2LDcgYXJlIHVuZGVmaW5lZCkuCisjIChmb3IgdGhlICcwNjAsIG9ubHkgdHdvIHR5cGVzICBjYW4gdGFrZSB0aGlzIGV4Y2VwdGlvbikKKyMJYmZ0c3QJCSVkMHsmNzomM30JCSMgdGVzdCBUWVBFCisJYnRzdAkJJjIyLCVkMAkJCSMgdHlwZSAwIG9yIDEgPworCWJuZS53CQlmdW5pbXBfbWlzYwkJIyB0eXBlIDEKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVFlQRSA9PSAwOiBHZW5lcmFsIGluc3RydWN0aW9ucwkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZnVuaW1wX2dlbjoKKworCWNsci5iCQlTVE9SRV9GTEcoJWE2KQkJIyBjbGVhciAic3RvcmUgcmVzdWx0IiBmbGFnCisKKyMgY2xlYXIgdGhlIGNjb2RlIGJ5dGUgYW5kIGV4Y2VwdGlvbiBzdGF0dXMgYnl0ZQorCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWJmZXh0dQkJJWQweyYxNjomNn0sJWQxCQkjIGV4dHJhY3QgdXBwZXIgNiBvZiBjbWRyZWcKKwljbXBpLmIJCSVkMSwmMHgxNwkJIyBpcyBvcCBhbiBmbW92ZWNyPworCWJlcS53CQlmdW5pbXBfZm1vdmNyCQkjIHllcworCitmdW5pbXBfZ2VuX29wOgorCWJzci5sCQlfbG9hZF9mb3AJCSMgbG9hZAorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBmZXRjaCBybmQgbW9kZQorCisJbW92LmIJCTErRVhDX0NNRFJFRyglYTYpLCVkMQorCWFuZGkudwkJJjB4MDAzZiwlZDEJCSMgZXh0cmFjdCBleHRlbnNpb24gYml0cworCWxzbC53CQkmMHgzLCVkMQkJIyBzaGlmdCByaWdodCAzIGJpdHMKKwlvci5iCQlTVEFHKCVhNiksJWQxCQkjIGluc2VydCBzcmMgb3B0YWcgYml0cworCisJbGVhCQlGUF9EU1QoJWE2KSwlYTEJCSMgcGFzcyBkc3QgcHRyIGluIGExCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBzcmMgcHRyIGluIGEwCisKKwltb3YudwkJKHRibF90cmFucy53LCVwYywlZDEudyoyKSwlZDEKKwlqc3IJCSh0YmxfdHJhbnMudywlcGMsJWQxLncqMSkgIyBlbXVsYXRlCisKK2Z1bmltcF9mc2F2ZToKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDAJIyBmZXRjaCBleGNlcHRpb25zIGVuYWJsZWQKKwlibmUudwkJZnVuaW1wX2VuYQkJIyBzb21lIGFyZSBlbmFibGVkCisKK2Z1bmltcF9zdG9yZToKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwICMgZmV0Y2ggRG4KKwlic3IubAkJc3RvcmVfZnByZWcJCSMgc3RvcmUgcmVzdWx0IHRvIGZwIHJlZ2ZpbGUKKworZnVuaW1wX2dlbl9leGl0OgorCWZtb3ZtLngJCUVYQ19GUDAoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCitmdW5pbXBfZ2VuX2V4aXRfY21wOgorCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtaWE3X2ZsZyAjIHdhcyB0aGUgZWEgbW9kZSAoc3ApKyA/CisJYmVxLmIJCWZ1bmltcF9nZW5fZXhpdF9hNwkjIHllcworCisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnICMgd2FzIHRoZSBlYSBtb2RlIC0oc3ApID8KKwliZXEuYgkJZnVuaW1wX2dlbl9leGl0X2E3CSMgeWVzCisKK2Z1bmltcF9nZW5fZXhpdF9jb250OgorCXVubGsJCSVhNgorCitmdW5pbXBfZ2VuX2V4aXRfY29udDI6CisJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBvbj8KKwliZXEubAkJX2Zwc3BfZG9uZQkJIyBubworCisjIHRoaXMgY2F0Y2hlcyBhIHByb2JsZW0gd2l0aCB0aGUgY2FzZSB3aGVyZSBhbiBleGNlcHRpb24gd2lsbCBiZSByZS1pbnNlcnRlZAorIyBpbnRvIHRoZSBtYWNoaW5lLiB0aGUgZnJlc3RvcmUgaGFzIGFscmVhZHkgYmVlbiBleGVjdXRlZC4uLnNvLCB0aGUgZm1vdi5sCisjIGFsb25lIG9mIHRoZSBjb250cm9sIHJlZ2lzdGVyIHdvdWxkIHRyaWdnZXIgYW4gdW53YW50ZWQgZXhjZXB0aW9uLgorIyB1bnRpbCBJIGZlZWwgbGlrZSBmaXhpbmcgdGhpcywgd2UnbGwgc2lkZXN0ZXAgdGhlIGV4Y2VwdGlvbi4KKwlmc2F2ZQkJLSglc3ApCisJZm1vdi5sCQklZnBpYXIsMHgxNCglc3ApCSMgIkN1cnJlbnQgUEMiIGlzIGluIEZQSUFSCisJZnJlc3RvcmUJKCVzcCkrCisJbW92LncJCSYweDIwMjQsMHg2KCVzcCkJIyBzdGsgZm10ID0gMHgyOyB2b2ZmID0gMHgyNAorCWJyYS5sCQlfcmVhbF90cmFjZQorCitmdW5pbXBfZ2VuX2V4aXRfYTc6CisJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQkjIHN1cGVydmlzb3Igb3IgdXNlciBtb2RlPworCWJuZS5iCQlmdW5pbXBfZ2VuX2V4aXRfYTdfcwkjIHN1cGVydmlzb3IKKworCW1vdi5sCQklYTAsLSglc3ApCisJbW92LmwJCUVYQ19BNyglYTYpLCVhMAorCW1vdi5sCQklYTAsJXVzcAorCW1vdi5sCQkoJXNwKSssJWEwCisJYnJhLmIJCWZ1bmltcF9nZW5fZXhpdF9jb250CisKKyMgaWYgdGhlIGluc3RydWN0aW9uIHdhcyBleGVjdXRlZCBmcm9tIHN1cGVydmlzb3IgbW9kZSBhbmQgdGhlIGFkZHJlc3NpbmcKKyMgbW9kZSB3YXMgKGE3KSssIHRoZW4gdGhlIHN0YWNrIGZyYW1lIGZvciB0aGUgcnRlIG11c3QgYmUgc2hpZnRlZCAidXAiCisjICJuIiBieXRlcyB3aGVyZSAibiIgaXMgdGhlIHNpemUgb2YgdGhlIHNyYyBvcGVyYW5kIHR5cGUuCisjIGY8b3A+LntiLHcsbCxzLGQseCxwfQorZnVuaW1wX2dlbl9leGl0X2E3X3M6CisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBkMAorCW1vdi5sCQlFWENfQTcoJWE2KSwlZDAJCSMgbG9hZCBuZXcgYTcnCisJc3ViLmwJCU9MRF9BNyglYTYpLCVkMAkJIyBzdWJ0cmFjdCBvbGQgYTcnCisJbW92LmwJCTB4MitFWENfUEMoJWE2KSwoMHgyK0VYQ19QQywlYTYsJWQwKSAjIHNoaWZ0IHN0YWNrIGZyYW1lCisJbW92LmwJCUVYQ19TUiglYTYpLChFWENfU1IsJWE2LCVkMCkgIyBzaGlmdCBzdGFjayBmcmFtZQorCW1vdi53CQklZDAsRVhDX1NSKCVhNikJCSMgc3RvcmUgaW5jciBudW1iZXIKKwltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIGQwCisKKwl1bmxrCQklYTYKKworCWFkZC53CQkoJXNwKSwlc3AJCSMgc3RhY2sgZnJhbWUgc2hpZnRlZAorCWJyYS5iCQlmdW5pbXBfZ2VuX2V4aXRfY29udDIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBmbW92ZWNyLnggI2NjYyxmcG4gIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZnVuaW1wX2Ztb3ZjcjoKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAorCW1vdi5iCQkxK0VYQ19DTURSRUcoJWE2KSwlZDEKKwlhbmRpLmwJCSYweDAwMDAwMDdmLCVkMQkJIyBwYXNzIHJvbSBvZmZzZXQgaW4gZDEKKwlic3IubAkJc21vdmNyCisJYnJhLncJCWZ1bmltcF9mc2F2ZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgdGhlIHVzZXIgaGFzIGVuYWJsZWQgc29tZSBleGNlcHRpb25zLiB3ZSBmaWd1cmUgbm90IHRvIHNlZSB0aGlzIHRvbworIyBvZnRlbiBzbyB0aGF0J3Mgd2h5IGl0IGdldHMgbG93ZXIgcHJpb3JpdHkuCisjCitmdW5pbXBfZW5hOgorCisjIHdhcyBhbiBleGNlcHRpb24gc2V0IHRoYXQgd2FzIGFsc28gZW5hYmxlZD8KKwlhbmQuYgkJRlBTUl9FWENFUFQoJWE2KSwlZDAJIyBrZWVwIG9ubHkgb25lcyBlbmFibGVkIGFuZCBzZXQKKwliZmZmbwkJJWQweyYyNDomOH0sJWQwCQkjIGZpbmQgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24KKwlibmUuYgkJZnVuaW1wX2V4YwkJIyBhdCBsZWFzdCBvbmUgd2FzIHNldAorCisjIG5vIGV4Y2VwdGlvbiB0aGF0IHdhcyBlbmFibGVkIHdhcyBzZXQgQlVUIGlmIHdlIGdvdCBhbiBleGFjdCBvdmVyZmxvdworIyBhbmQgb3ZlcmZsb3cgd2Fzbid0IGVuYWJsZWQgYnV0IGluZXhhY3Qgd2FzICh5ZWNoISkgdGhlbiB0aGlzIGlzCisjIGFuIGluZXhhY3QgZXhjZXB0aW9uOyBvdGhlcndpc2UsIHJldHVybiB0byBub3JtYWwgbm9uLWV4Y2VwdGlvbiBmbG93LgorCWJ0c3QJCSZvdmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgZGlkIG92ZXJmbG93IG9jY3VyPworCWJlcS53CQlmdW5pbXBfc3RvcmUJCSMgbm87IHJldHVybiB0byBub3JtYWwgZmxvdworCisjIHRoZSBvdmVyZmxvdyB3LyBleGFjdCByZXN1bHQgaGFwcGVuZWQgYnV0IHdhcyBpbmV4YWN0IHNldCBpbiB0aGUgRlBDUj8KK2Z1bmltcF9vdmZsOgorCWJ0c3QJCSZpbmV4Ml9iaXQsRlBDUl9FTkFCTEUoJWE2KSAjIGlzIGluZXhhY3QgZW5hYmxlZD8KKwliZXEudwkJZnVuaW1wX3N0b3JlCQkjIG5vOyByZXR1cm4gdG8gbm9ybWFsIGZsb3cKKwlicmEuYgkJZnVuaW1wX2V4Y19vdmZsCQkjIHllcworCisjIHNvbWUgZXhjZXB0aW9uIGhhcHBlbmVkIHRoYXQgd2FzIGFjdHVhbGx5IGVuYWJsZWQuCisjIHdlJ2xsIGluc2VydCB0aGlzIG5ldyBleGNlcHRpb24gaW50byB0aGUgRlBVIGFuZCB0aGVuIHJldHVybi4KK2Z1bmltcF9leGM6CisJc3ViaS5sCQkmMjQsJWQwCQkJIyBmaXggb2Zmc2V0IHRvIGJlIDAtOAorCWNtcGkuYgkJJWQwLCYweDYJCSMgaXMgZXhjZXB0aW9uIElORVg/CisJYm5lLmIJCWZ1bmltcF9leGNfZm9yY2UJIyBubworCisjIHRoZSBlbmFibGVkIGV4Y2VwdGlvbiB3YXMgaW5leGFjdC4gc28sIGlmIGl0IG9jY3VycyB3aXRoIGFuIG92ZXJmbG93CisjIG9yIHVuZGVyZmxvdyB0aGF0IHdhcyBkaXNhYmxlZCwgdGhlbiB3ZSBoYXZlIHRvIGZvcmNlIGFuIG92ZXJmbG93IG9yCisjIHVuZGVyZmxvdyBmcmFtZS4gdGhlIGV2ZW50dWFsIG92ZXJmbG93IG9yIHVuZGVyZmxvdyBoYW5kbGVyIHdpbGwgc2VlIHRoYXQKKyMgaXQncyBhY3R1YWxseSBhbiBpbmV4YWN0IGFuZCBhY3QgYXBwcm9wcmlhdGVseS4gdGhpcyBpcyB0aGUgb25seSBlYXN5CisjIHdheSB0byBoYXZlIHRoZSBFWE9QIGF2YWlsYWJsZSBmb3IgdGhlIGVuYWJsZWQgaW5leGFjdCBoYW5kbGVyIHdoZW4KKyMgYSBkaXNhYmxlZCBvdmVyZmxvdyBvciB1bmRlcmZsb3cgaGFzIGFsc28gaGFwcGVuZWQuCisJYnRzdAkJJm92ZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBkaWQgb3ZlcmZsb3cgb2NjdXI/CisJYm5lLmIJCWZ1bmltcF9leGNfb3ZmbAkJIyB5ZXMKKwlidHN0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGRpZCB1bmRlcmZsb3cgb2NjdXI/CisJYm5lLmIJCWZ1bmltcF9leGNfdW5mbAkJIyB5ZXMKKworIyBmb3JjZSB0aGUgZnNhdmUgZXhjZXB0aW9uIHN0YXR1cyBiaXRzIHRvIHNpZ25hbCBhbiBleGNlcHRpb24gb2YgdGhlCisjIGFwcHJvcHJpYXRlIHR5cGUuIGRvbid0IGZvcmdldCB0byAic2tldyIgdGhlIHNvdXJjZSBvcGVyYW5kIGluIGNhc2Ugd2UKKyMgInVuc2tld2VkIiB0aGUgb25lIHRoZSBoYXJkd2FyZSBpbml0aWFsbHkgZ2F2ZSB1cy4KK2Z1bmltcF9leGNfZm9yY2U6CisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBkMAorCWJzci5sCQlmdW5pbXBfc2tldwkJIyBjaGVjayBmb3Igc3BlY2lhbCBjYXNlCisJbW92LmwJCSglc3ApKywlZDAJCSMgcmVzdG9yZSBkMAorCW1vdi53CQkodGJsX2Z1bmltcF9leGNlcHQuYiwlcGMsJWQwLncqMiksMitGUF9TUkMoJWE2KQorCWJyYS5iCQlmdW5pbXBfZ2VuX2V4aXQyCSMgZXhpdCB3aXRoIGZyZXN0b3JlCisKK3RibF9mdW5pbXBfZXhjZXB0OgorCXNob3J0CQkweGUwMDIsIDB4ZTAwNiwgMHhlMDA0LCAweGUwMDUKKwlzaG9ydAkJMHhlMDAzLCAweGUwMDIsIDB4ZTAwMSwgMHhlMDAxCisKKyMgaW5zZXJ0IGFuIG92ZXJmbG93IGZyYW1lCitmdW5pbXBfZXhjX292Zmw6CisJYnNyLmwJCWZ1bmltcF9za2V3CQkjIGNoZWNrIGZvciBzcGVjaWFsIGNhc2UKKwltb3YudwkJJjB4ZTAwNSwyK0ZQX1NSQyglYTYpCisJYnJhLmIJCWZ1bmltcF9nZW5fZXhpdDIKKworIyBpbnNlcnQgYW4gdW5kZXJmbG93IGZyYW1lCitmdW5pbXBfZXhjX3VuZmw6CisJYnNyLmwJCWZ1bmltcF9za2V3CQkjIGNoZWNrIGZvciBzcGVjaWFsIGNhc2UKKwltb3YudwkJJjB4ZTAwMywyK0ZQX1NSQyglYTYpCisKKyMgdGhpcyBpcyB0aGUgZ2VuZXJhbCBleGl0IHBvaW50IGZvciBhbiBlbmFibGVkIGV4Y2VwdGlvbiB0aGF0IHdpbGwgYmUKKyMgcmVzdG9yZWQgaW50byB0aGUgbWFjaGluZSBmb3IgdGhlIGluc3RydWN0aW9uIGp1c3QgZW11bGF0ZWQuCitmdW5pbXBfZ2VuX2V4aXQyOgorCWZtb3ZtLngJCUVYQ19GUDAoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgaW5zZXJ0IGV4Y2VwdGlvbmFsIHN0YXR1cworCisJYnJhLncJCWZ1bmltcF9nZW5fZXhpdF9jbXAKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIFRZUEUgPT0gMTogRkRCPGNjPiwgRlM8Y2M+LCBGVFJBUDxjYz4KKyMKKyMgVGhlc2UgaW5zdHJ1Y3Rpb25zIHdlcmUgaW1wbGVtZW50ZWQgb24gdGhlICc4ODEvMiBhbmQgJzA0MCBpbiBoYXJkd2FyZSBidXQKKyMgYXJlIGVtdWxhdGVkIGluIHNvZnR3YXJlIG9uIHRoZSAnMDYwLgorIworZnVuaW1wX21pc2M6CisJYmZleHR1CQklZDB7JjEwOiYzfSwlZDEJCSMgZXh0cmFjdCBtb2RlIGZpZWxkCisJY21waS5iCQklZDEsJjB4MQkJIyBpcyBpdCBhbiBmZGI8Y2M+PworCWJlcS53CQlmdW5pbXBfZmRiY2MJCSMgeWVzCisJY21waS5iCQklZDEsJjB4NwkJIyBpcyBpdCBhbiBmczxjYz4/CisJYm5lLncJCWZ1bmltcF9mc2NjCQkjIHllcworCWJmZXh0dQkJJWQweyYxMzomM30sJWQxCisJY21waS5iCQklZDEsJjB4MgkJIyBpcyBpdCBhbiBmczxjYz4/CisJYmx0LncJCWZ1bmltcF9mc2NjCQkjIHllcworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGZ0cmFwPGNjPgkJIworIyBmdHJhcDxjYz4udyAjPGRhdGE+CSMKKyMgZnRyYXA8Y2M+LmwgIzxkYXRhPgkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmdW5pbXBfZnRyYXBjYzoKKworCWJzci5sCQlfZnRyYXBjYwkJIyBGVFJBUDxjYz4oKQorCisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJmZic3VuX2ZsZyAjIGlzIGVuYWJsZWQgYnN1biBvY2N1cnJpbmc/CisJYmVxLncJCWZ1bmltcF9ic3VuCQkjIHllcworCisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJmZ0cmFwY2NfZmxnICMgc2hvdWxkIGEgdHJhcCBvY2N1cj8KKwlibmUudwkJZnVuaW1wX2RvbmUJCSMgbm8KKworIwkgRlAgVU5JTVAgRlJBTUUJCSAgIFRSQVAgIEZSQU1FCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSoqICAgIDxFQT4gICAgICoqCSoqICBDdXJyZW50IFBDICoqCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSogMHgyICogIDB4MDJjCSoJKiAweDIgKiAgMHgwMWMgICoKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJKiogICBOZXh0IFBDICAgKioJKiogICBOZXh0IFBDICAgKioKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJKiAgICAgIFNSCSoJKiAgICAgIFNSCSoKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJICAgICg2IHdvcmRzKQkJICAgICg2IHdvcmRzKQorIworIyB0aGUgZnRyYXBjYyBpbnN0cnVjdGlvbiBzaG91bGQgdGFrZSBhIHRyYXAuIHNvLCBoZXJlIHdlIG11c3QgY3JlYXRlIGEKKyMgdHJhcCBzdGFjayBmcmFtZSBmcm9tIGFuIHVuaW1wbGVtZW50ZWQgZnAgaW5zdHJ1Y3Rpb24gc3RhY2sgZnJhbWUgYW5kCisjIGp1bXAgdG8gdGhlIHVzZXIgc3VwcGxpZWQgZW50cnkgcG9pbnQgZm9yIHRoZSB0cmFwIGV4Y2VwdGlvbgorZnVuaW1wX2Z0cmFwY2NfdHA6CisJbW92LmwJCVVTRVJfRlBJQVIoJWE2KSxFWENfRUEoJWE2KSAjIEFkZHJlc3MgPSBDdXJyZW50IFBDCisJbW92LncJCSYweDIwMWMsRVhDX1ZPRkYoJWE2KQkjIFZlY3RvciBPZmZzZXQgPSAweDAxYworCisJZm1vdm0ueAkJRVhDX0ZQMCglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYKKwlicmEubAkJX3JlYWxfdHJhcAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGZkYjxjYz4gRG4sPGxhYmVsPgkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmdW5pbXBfZmRiY2M6CisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQJCSMgcmVhZCBkaXNwbGFjZW1lbnQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUudwkJZnVuaW1wX2lhY2MJCSMgeWVzCisKKwlleHQubAkJJWQwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKworCWJzci5sCQlfZmRiY2MJCQkjIEZEQjxjYz4oKQorCisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJmZic3VuX2ZsZyAjIGlzIGVuYWJsZWQgYnN1biBvY2N1cnJpbmc/CisJYmVxLncJCWZ1bmltcF9ic3VuCisKKwlicmEudwkJZnVuaW1wX2RvbmUJCSMgYnJhbmNoIHRvIGZpbmlzaAorCisjIyMjIyMjIyMjIyMjIyMjIworIyBmczxjYz4uYiA8ZWE+CSMKKyMjIyMjIyMjIyMjIyMjIyMjCitmdW5pbXBfZnNjYzoKKworCWJzci5sCQlfZnNjYwkJCSMgRlM8Y2M+KCkKKworIyBJIGFtIGFzc3VtaW5nIGhlcmUgdGhhdCBhbiAiZnM8Y2M+LmIgLShBbikiIG9yICJmczxjYz4uYiAoQW4pKyIgaW5zdHJ1Y3Rpb24KKyMgZG9lcyBub3QgbmVlZCB0byB1cGRhdGUgIkFuIiBiZWZvcmUgdGFraW5nIGEgYnN1biBleGNlcHRpb24uCisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJmZic3VuX2ZsZyAjIGlzIGVuYWJsZWQgYnN1biBvY2N1cnJpbmc/CisJYmVxLncJCWZ1bmltcF9ic3VuCisKKwlidHN0CQkmMHg1LEVYQ19TUiglYTYpCSMgeWVzOyBpcyBpdCBhIHVzZXIgbW9kZSBleGNlcHRpb24/CisJYm5lLmIJCWZ1bmltcF9mc2NjX3MJCSMgbm8KKworZnVuaW1wX2ZzY2NfdToKKwltb3YubAkJRVhDX0E3KCVhNiksJWEwCQkjIHllczsgc2V0IG5ldyBVU1AKKwltb3YubAkJJWEwLCV1c3AKKwlicmEudwkJZnVuaW1wX2RvbmUJCSMgYnJhbmNoIHRvIGZpbmlzaAorCisjIHJlbWVtYmVyLCBJJ20gYXNzdW1pbmcgdGhhdCBwb3N0LWluY3JlbWVudCBpcyBib2d1cy4uLihpdCBJUyEhISkKKyMgc28sIHRoZSBsZWFzdCBzaWduaWZpY2FudCBXT1JEIG9mIHRoZSBzdGFja2VkIGVmZmVjdGl2ZSBhZGRyZXNzIGdvdAorIyBvdmVyd3JpdHRlbiBieSB0aGUgImZzPGNjPiAtKEFuKSIuIFdlIG11c3Qgc2hpZnQgdGhlIHN0YWNrIGZyYW1lICJkb3duIgorIyBzbyB0aGF0IHRoZSBydGUgd2lsbCB3b3JrIGNvcnJlY3RseSB3aXRob3V0IGRlc3Ryb3lpbmcgdGhlIHJlc3VsdC4KKyMgZXZlbiB0aG91Z2ggdGhlIG9wZXJhdGlvbiBzaXplIGlzIGJ5dGUsIHRoZSBzdGFjayBwdHIgaXMgZGVjciBieSAyLgorIworIyByZW1lbWJlciwgYWxzbywgdGhpcyBpbnN0cnVjdGlvbiBtYXkgYmUgdHJhY2VkLgorZnVuaW1wX2ZzY2NfczoKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcgIyB3YXMgYTcgbW9kaWZpZWQ/CisJYm5lLncJCWZ1bmltcF9kb25lCQkjIG5vCisKKwlmbW92bS54CQlFWENfRlAwKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgorCisJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBlbmFibGVkPworCWJuZS5iCQlmdW5pbXBfZnNjY19zX3RyYWNlCSMgeWVzCisKKwlzdWJxLmwJCSYweDIsJXNwCisJbW92LmwJCTB4Miglc3ApLCglc3ApCQkjIHNoaWZ0IFNSLGhpKFBDKSAiZG93biIKKwltb3YubAkJMHg2KCVzcCksMHg0KCVzcCkJIyBzaGlmdCBsbyhQQyksdm9mZiAiZG93biIKKwlicmEubAkJX2Zwc3BfZG9uZQorCitmdW5pbXBfZnNjY19zX3RyYWNlOgorCXN1YnEubAkJJjB4Miwlc3AKKwltb3YubAkJMHgyKCVzcCksKCVzcCkJCSMgc2hpZnQgU1IsaGkoUEMpICJkb3duIgorCW1vdi53CQkweDYoJXNwKSwweDQoJXNwKQkjIHNoaWZ0IGxvKFBDKQorCW1vdi53CQkmMHgyMDI0LDB4Niglc3ApCSMgZm10L3ZvZmYgPSAkMjAyNAorCWZtb3YubAkJJWZwaWFyLDB4OCglc3ApCQkjIGluc2VydCAiY3VycmVudCBQQyIKKworCWJyYS5sCQlfcmVhbF90cmFjZQorCisjCisjIFRoZSBmdHJhcDxjYz4sIGZzPGNjPiwgb3IgZmRiPGNjPiBpcyB0byB0YWtlIGFuIGVuYWJsZWQgYnN1bi4gd2UgbXVzdCBjb252ZXJ0CisjIHRoZSBmcCB1bmltcGxlbWVudGVkIGluc3RydWN0aW9uIGV4Y2VwdGlvbiBzdGFjayBmcmFtZSBpbnRvIGEgYnN1biBzdGFjayBmcmFtZSwKKyMgcmVzdG9yZSBhIGJzdW4gZXhjZXB0aW9uIGludG8gdGhlIG1hY2hpbmUsIGFuZCBicmFuY2ggdG8gdGhlIHVzZXIKKyMgc3VwcGxpZWQgYnN1biBob29rLgorIworIwkgRlAgVU5JTVAgRlJBTUUJCSAgIEJTVU4gRlJBTUUKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJKiogICAgPEVBPiAgICAgKioJKiAweDAgKiAweDBjMAkqCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSogMHgyICogIDB4MDJjICAqCSoqIEN1cnJlbnQgUEMgICoqCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSoqICAgTmV4dCBQQyAgICoqCSogICAgICBTUgkqCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSogICAgICBTUgkqCSAgICAoNCB3b3JkcykKKyMJKioqKioqKioqKioqKioqKioKKyMJICAgICg2IHdvcmRzKQorIworZnVuaW1wX2JzdW46CisJbW92LncJCSYweDAwYzAsMitFWENfRUEoJWE2KQkjIEZtdCA9IDB4MDsgVmVjdG9yIE9mZnNldCA9IDB4MGMwCisJbW92LmwJCVVTRVJfRlBJQVIoJWE2KSxFWENfVk9GRiglYTYpICMgUEMgPSBDdXJyZW50IFBDCisJbW92LncJCUVYQ19TUiglYTYpLDIrRVhDX1BDKCVhNikgIyBzaGlmdCBTUiAidXAiCisKKwltb3YudwkJJjB4ZTAwMCwyK0ZQX1NSQyglYTYpCSMgYnN1biBleGNlcHRpb24gZW5hYmxlZAorCisJZm1vdm0ueAkJRVhDX0ZQMCglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIGJzdW4gZXhjZXB0aW9uCisKKwl1bmxrCQklYTYKKworCWFkZHEubAkJJjB4NCwlc3AJCSMgZXJhc2Ugc2x1ZGdlCisKKwlicmEubAkJX3JlYWxfYnN1bgkJIyBicmFuY2ggdG8gdXNlciBic3VuIGhvb2sKKworIworIyBhbGwgZnRyYXBjYy9mc2NjL2ZkYmNjIHByb2Nlc3NpbmcgaGFzIGJlZW4gY29tcGxldGVkLiB1bndpbmQgdGhlIHN0YWNrIGZyYW1lCisjIGFuZCByZXR1cm4uCisjCisjIGFzIHVzdWFsLCB3ZSBoYXZlIHRvIGNoZWNrIGZvciB0cmFjZSBtb2RlIGJlaW5nIG9uIGhlcmUuIHNpbmNlIGluc3RydWN0aW9ucworIyBtb2RpZnlpbmcgdGhlIHN1cGVydmlzb3Igc3RhY2sgZnJhbWUgZG9uJ3QgcGFzcyB0aHJvdWdoIGhlcmUsIHRoaXMgaXMgYQorIyByZWxhdGl2ZWx5IGVhc3kgdGFzay4KKyMKK2Z1bmltcF9kb25lOgorCWZtb3ZtLngJCUVYQ19GUDAoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CisKKwlidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIGVuYWJsZWQ/CisJYm5lLmIJCWZ1bmltcF90cmFjZQkJIyB5ZXMKKworCWJyYS5sCQlfZnBzcF9kb25lCisKKyMJIEZQIFVOSU1QIEZSQU1FCQkgIFRSQUNFICBGUkFNRQorIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkqKiAgICA8RUE+ICAgICAqKgkqKiAgQ3VycmVudCBQQyAqKgorIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkqIDB4MiAqICAweDAyYwkqCSogMHgyICogIDB4MDI0ICAqCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSoqICAgTmV4dCBQQyAgICoqCSoqICAgTmV4dCBQQyAgICoqCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSogICAgICBTUgkqCSogICAgICBTUgkqCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSAgICAoNiB3b3JkcykJCSAgICAoNiB3b3JkcykKKyMKKyMgdGhlIGZzY2MgaW5zdHJ1Y3Rpb24gc2hvdWxkIHRha2UgYSB0cmFjZSB0cmFwLiBzbywgaGVyZSB3ZSBtdXN0IGNyZWF0ZSBhCisjIHRyYWNlIHN0YWNrIGZyYW1lIGZyb20gYW4gdW5pbXBsZW1lbnRlZCBmcCBpbnN0cnVjdGlvbiBzdGFjayBmcmFtZSBhbmQKKyMganVtcCB0byB0aGUgdXNlciBzdXBwbGllZCBlbnRyeSBwb2ludCBmb3IgdGhlIHRyYWNlIGV4Y2VwdGlvbgorZnVuaW1wX3RyYWNlOgorCWZtb3YubAkJJWZwaWFyLDB4OCglc3ApCQkjIGN1cnJlbnQgUEMgaXMgaW4gZnBpYXIKKwltb3YuYgkJJjB4MjQsMHg3KCVzcCkJCSMgdmVjdG9yIG9mZnNldCA9IDB4MDI0CisKKwlicmEubAkJX3JlYWxfdHJhY2UKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQl0YmxfdHJhbnMKKwlzd2JlZwkJJjB4MWMwCit0YmxfdHJhbnM6CisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMC0wIGZtb3ZlY3IgYWxsCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMC0xIGZtb3ZlY3IgYWxsCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMC0yIGZtb3ZlY3IgYWxsCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMC0zIGZtb3ZlY3IgYWxsCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMC00IGZtb3ZlY3IgYWxsCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMC01IGZtb3ZlY3IgYWxsCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMC02IGZtb3ZlY3IgYWxsCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMC03IGZtb3ZlY3IgYWxsCisKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAxLTAgZmludCBub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMS0xIGZpbnQgemVybworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDEtMiBmaW50IGluZgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDEtMyBmaW50IHFuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAxLTUgZmludCBkZW5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAxLTQgZmludCBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMS02IGZpbnQgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMS03IEVSUk9SCisKKwlzaG9ydAkJc3NpbmgJIC0gdGJsX3RyYW5zCSMgJDAyLTAgZnNpbmggbm9ybQorCXNob3J0CQlzcmNfemVybyAtIHRibF90cmFucwkjICQwMi0xIGZzaW5oIHplcm8KKwlzaG9ydAkJc3JjX2luZgkgLSB0YmxfdHJhbnMJIyAkMDItMiBmc2luaCBpbmYKKwlzaG9ydAkJc3JjX3FuYW4gLSB0YmxfdHJhbnMJIyAkMDItMyBmc2luaCBxbmFuCisJc2hvcnQJCXNzaW5oZAkgLSB0YmxfdHJhbnMJIyAkMDItNSBmc2luaCBkZW5vcm0KKwlzaG9ydAkJc3JjX3NuYW4gLSB0YmxfdHJhbnMJIyAkMDItNCBmc2luaCBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMi02IGZzaW5oIHVubm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDItNyBFUlJPUgorCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMy0wIGZpbnRyeiBub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMy0xIGZpbnRyeiB6ZXJvCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMy0yIGZpbnRyeiBpbmYKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAzLTMgZmludHJ6IHFuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDAzLTUgZmludHJ6IGRlbm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDMtNCBmaW50cnogc25hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDMtNiBmaW50cnogdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwMy03IEVSUk9SCisKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA0LTAgZnNxcnQgbm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDQtMSBmc3FydCB6ZXJvCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNC0yIGZzcXJ0IGluZgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDQtMyBmc3FydCBxbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNC01IGZzcXJ0IGRlbm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDQtNCBmc3FydCBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNC02IGZzcXJ0IHVubm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMDQtNyBFUlJPUgorCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNS0wIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNS0xIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNS0yIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNS0zIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNS00IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNS01IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNS02IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNS03IEVSUk9SCisKKwlzaG9ydAkJc2xvZ25wMQkgLSB0YmxfdHJhbnMJIyAkMDYtMCBmbG9nbnAxIG5vcm0KKwlzaG9ydAkJc3JjX3plcm8gLSB0YmxfdHJhbnMJIyAkMDYtMSBmbG9nbnAxIHplcm8KKwlzaG9ydAkJc29wcl9pbmYgLSB0YmxfdHJhbnMJIyAkMDYtMiBmbG9nbnAxIGluZgorCXNob3J0CQlzcmNfcW5hbiAtIHRibF90cmFucwkjICQwNi0zIGZsb2ducDEgcW5hbgorCXNob3J0CQlzbG9nbnAxZCAtIHRibF90cmFucwkjICQwNi01IGZsb2ducDEgZGVub3JtCisJc2hvcnQJCXNyY19zbmFuIC0gdGJsX3RyYW5zCSMgJDA2LTQgZmxvZ25wMSBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNi02IGZsb2ducDEgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwNi03IEVSUk9SCisKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA3LTAgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA3LTEgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA3LTIgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA3LTMgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA3LTQgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA3LTUgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA3LTYgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA3LTcgRVJST1IKKworCXNob3J0CQlzZXRveG0xCSAtIHRibF90cmFucwkjICQwOC0wIGZldG94bTEgbm9ybQorCXNob3J0CQlzcmNfemVybyAtIHRibF90cmFucwkjICQwOC0xIGZldG94bTEgemVybworCXNob3J0CQlzZXRveG0xaSAtIHRibF90cmFucwkjICQwOC0yIGZldG94bTEgaW5mCisJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDA4LTMgZmV0b3htMSBxbmFuCisJc2hvcnQJCXNldG94bTFkIC0gdGJsX3RyYW5zCSMgJDA4LTUgZmV0b3htMSBkZW5vcm0KKwlzaG9ydAkJc3JjX3NuYW4gLSB0YmxfdHJhbnMJIyAkMDgtNCBmZXRveG0xIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA4LTYgZmV0b3htMSB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA4LTcgRVJST1IKKworCXNob3J0CQlzdGFuaAkgLSB0YmxfdHJhbnMJIyAkMDktMCBmdGFuaCBub3JtCisJc2hvcnQJCXNyY196ZXJvIC0gdGJsX3RyYW5zCSMgJDA5LTEgZnRhbmggemVybworCXNob3J0CQlzcmNfb25lCSAtIHRibF90cmFucwkjICQwOS0yIGZ0YW5oIGluZgorCXNob3J0CQlzcmNfcW5hbiAtIHRibF90cmFucwkjICQwOS0zIGZ0YW5oIHFuYW4KKwlzaG9ydAkJc3RhbmhkCSAtIHRibF90cmFucwkjICQwOS01IGZ0YW5oIGRlbm9ybQorCXNob3J0CQlzcmNfc25hbiAtIHRibF90cmFucwkjICQwOS00IGZ0YW5oIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDA5LTYgZnRhbmggdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwOS03IEVSUk9SCisKKwlzaG9ydAkJc2F0YW4JIC0gdGJsX3RyYW5zCSMgJDBhLTAgZmF0YW4gbm9ybQorCXNob3J0CQlzcmNfemVybyAtIHRibF90cmFucwkjICQwYS0xIGZhdGFuIHplcm8KKwlzaG9ydAkJc3BpXzIJIC0gdGJsX3RyYW5zCSMgJDBhLTIgZmF0YW4gaW5mCisJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDBhLTMgZmF0YW4gcW5hbgorCXNob3J0CQlzYXRhbmQJIC0gdGJsX3RyYW5zCSMgJDBhLTUgZmF0YW4gZGVub3JtCisJc2hvcnQJCXNyY19zbmFuIC0gdGJsX3RyYW5zCSMgJDBhLTQgZmF0YW4gc25hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGEtNiBmYXRhbiB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDBhLTcgRVJST1IKKworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGItMCBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGItMSBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGItMiBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGItMyBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGItNCBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGItNSBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGItNiBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGItNyBFUlJPUgorCisJc2hvcnQJCXNhc2luCSAtIHRibF90cmFucwkjICQwYy0wIGZhc2luIG5vcm0KKwlzaG9ydAkJc3JjX3plcm8gLSB0YmxfdHJhbnMJIyAkMGMtMSBmYXNpbiB6ZXJvCisJc2hvcnQJCXRfb3BlcnIJIC0gdGJsX3RyYW5zCSMgJDBjLTIgZmFzaW4gaW5mCisJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDBjLTMgZmFzaW4gcW5hbgorCXNob3J0CQlzYXNpbmQJIC0gdGJsX3RyYW5zCSMgJDBjLTUgZmFzaW4gZGVub3JtCisJc2hvcnQJCXNyY19zbmFuIC0gdGJsX3RyYW5zCSMgJDBjLTQgZmFzaW4gc25hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGMtNiBmYXNpbiB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDBjLTcgRVJST1IKKworCXNob3J0CQlzYXRhbmgJIC0gdGJsX3RyYW5zCSMgJDBkLTAgZmF0YW5oIG5vcm0KKwlzaG9ydAkJc3JjX3plcm8gLSB0YmxfdHJhbnMJIyAkMGQtMSBmYXRhbmggemVybworCXNob3J0CQl0X29wZXJyCSAtIHRibF90cmFucwkjICQwZC0yIGZhdGFuaCBpbmYKKwlzaG9ydAkJc3JjX3FuYW4gLSB0YmxfdHJhbnMJIyAkMGQtMyBmYXRhbmggcW5hbgorCXNob3J0CQlzYXRhbmhkCSAtIHRibF90cmFucwkjICQwZC01IGZhdGFuaCBkZW5vcm0KKwlzaG9ydAkJc3JjX3NuYW4gLSB0YmxfdHJhbnMJIyAkMGQtNCBmYXRhbmggc25hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGQtNiBmYXRhbmggdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQwZC03IEVSUk9SCisKKwlzaG9ydAkJc3NpbgkgLSB0YmxfdHJhbnMJIyAkMGUtMCBmc2luIG5vcm0KKwlzaG9ydAkJc3JjX3plcm8gLSB0YmxfdHJhbnMJIyAkMGUtMSBmc2luIHplcm8KKwlzaG9ydAkJdF9vcGVycgkgLSB0YmxfdHJhbnMJIyAkMGUtMiBmc2luIGluZgorCXNob3J0CQlzcmNfcW5hbiAtIHRibF90cmFucwkjICQwZS0zIGZzaW4gcW5hbgorCXNob3J0CQlzc2luZAkgLSB0YmxfdHJhbnMJIyAkMGUtNSBmc2luIGRlbm9ybQorCXNob3J0CQlzcmNfc25hbiAtIHRibF90cmFucwkjICQwZS00IGZzaW4gc25hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGUtNiBmc2luIHVubm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMGUtNyBFUlJPUgorCisJc2hvcnQJCXN0YW4JIC0gdGJsX3RyYW5zCSMgJDBmLTAgZnRhbiBub3JtCisJc2hvcnQJCXNyY196ZXJvIC0gdGJsX3RyYW5zCSMgJDBmLTEgZnRhbiB6ZXJvCisJc2hvcnQJCXRfb3BlcnIJIC0gdGJsX3RyYW5zCSMgJDBmLTIgZnRhbiBpbmYKKwlzaG9ydAkJc3JjX3FuYW4gLSB0YmxfdHJhbnMJIyAkMGYtMyBmdGFuIHFuYW4KKwlzaG9ydAkJc3RhbmQJIC0gdGJsX3RyYW5zCSMgJDBmLTUgZnRhbiBkZW5vcm0KKwlzaG9ydAkJc3JjX3NuYW4gLSB0YmxfdHJhbnMJIyAkMGYtNCBmdGFuIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDBmLTYgZnRhbiB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDBmLTcgRVJST1IKKworCXNob3J0CQlzZXRveAkgLSB0YmxfdHJhbnMJIyAkMTAtMCBmZXRveCBub3JtCisJc2hvcnQJCWxkX3BvbmUJIC0gdGJsX3RyYW5zCSMgJDEwLTEgZmV0b3ggemVybworCXNob3J0CQlzenJfaW5mCSAtIHRibF90cmFucwkjICQxMC0yIGZldG94IGluZgorCXNob3J0CQlzcmNfcW5hbiAtIHRibF90cmFucwkjICQxMC0zIGZldG94IHFuYW4KKwlzaG9ydAkJc2V0b3hkCSAtIHRibF90cmFucwkjICQxMC01IGZldG94IGRlbm9ybQorCXNob3J0CQlzcmNfc25hbiAtIHRibF90cmFucwkjICQxMC00IGZldG94IHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDEwLTYgZmV0b3ggdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxMC03IEVSUk9SCisKKwlzaG9ydAkJc3R3b3RveAkgLSB0YmxfdHJhbnMJIyAkMTEtMCBmdHdvdG94IG5vcm0KKwlzaG9ydAkJbGRfcG9uZQkgLSB0YmxfdHJhbnMJIyAkMTEtMSBmdHdvdG94IHplcm8KKwlzaG9ydAkJc3pyX2luZgkgLSB0YmxfdHJhbnMJIyAkMTEtMiBmdHdvdG94IGluZgorCXNob3J0CQlzcmNfcW5hbiAtIHRibF90cmFucwkjICQxMS0zIGZ0d290b3ggcW5hbgorCXNob3J0CQlzdHdvdG94ZCAtIHRibF90cmFucwkjICQxMS01IGZ0d290b3ggZGVub3JtCisJc2hvcnQJCXNyY19zbmFuIC0gdGJsX3RyYW5zCSMgJDExLTQgZnR3b3RveCBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxMS02IGZ0d290b3ggdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxMS03IEVSUk9SCisKKwlzaG9ydAkJc3RlbnRveAkgLSB0YmxfdHJhbnMJIyAkMTItMCBmdGVudG94IG5vcm0KKwlzaG9ydAkJbGRfcG9uZQkgLSB0YmxfdHJhbnMJIyAkMTItMSBmdGVudG94IHplcm8KKwlzaG9ydAkJc3pyX2luZgkgLSB0YmxfdHJhbnMJIyAkMTItMiBmdGVudG94IGluZgorCXNob3J0CQlzcmNfcW5hbiAtIHRibF90cmFucwkjICQxMi0zIGZ0ZW50b3ggcW5hbgorCXNob3J0CQlzdGVudG94ZCAtIHRibF90cmFucwkjICQxMi01IGZ0ZW50b3ggZGVub3JtCisJc2hvcnQJCXNyY19zbmFuIC0gdGJsX3RyYW5zCSMgJDEyLTQgZnRlbnRveCBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxMi02IGZ0ZW50b3ggdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxMi03IEVSUk9SCisKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDEzLTAgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDEzLTEgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDEzLTIgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDEzLTMgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDEzLTQgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDEzLTUgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDEzLTYgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDEzLTcgRVJST1IKKworCXNob3J0CQlzbG9nbgkgLSB0YmxfdHJhbnMJIyAkMTQtMCBmbG9nbiBub3JtCisJc2hvcnQJCXRfZHoyCSAtIHRibF90cmFucwkjICQxNC0xIGZsb2duIHplcm8KKwlzaG9ydAkJc29wcl9pbmYgLSB0YmxfdHJhbnMJIyAkMTQtMiBmbG9nbiBpbmYKKwlzaG9ydAkJc3JjX3FuYW4gLSB0YmxfdHJhbnMJIyAkMTQtMyBmbG9nbiBxbmFuCisJc2hvcnQJCXNsb2duZAkgLSB0YmxfdHJhbnMJIyAkMTQtNSBmbG9nbiBkZW5vcm0KKwlzaG9ydAkJc3JjX3NuYW4gLSB0YmxfdHJhbnMJIyAkMTQtNCBmbG9nbiBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxNC02IGZsb2duIHVubm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTQtNyBFUlJPUgorCisJc2hvcnQJCXNsb2cxMAkgLSB0YmxfdHJhbnMJIyAkMTUtMCBmbG9nMTAgbm9ybQorCXNob3J0CQl0X2R6MgkgLSB0YmxfdHJhbnMJIyAkMTUtMSBmbG9nMTAgemVybworCXNob3J0CQlzb3ByX2luZiAtIHRibF90cmFucwkjICQxNS0yIGZsb2cxMCBpbmYKKwlzaG9ydAkJc3JjX3FuYW4gLSB0YmxfdHJhbnMJIyAkMTUtMyBmbG9nMTAgcW5hbgorCXNob3J0CQlzbG9nMTBkCSAtIHRibF90cmFucwkjICQxNS01IGZsb2cxMCBkZW5vcm0KKwlzaG9ydAkJc3JjX3NuYW4gLSB0YmxfdHJhbnMJIyAkMTUtNCBmbG9nMTAgc25hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTUtNiBmbG9nMTAgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxNS03IEVSUk9SCisKKwlzaG9ydAkJc2xvZzIJIC0gdGJsX3RyYW5zCSMgJDE2LTAgZmxvZzIgbm9ybQorCXNob3J0CQl0X2R6MgkgLSB0YmxfdHJhbnMJIyAkMTYtMSBmbG9nMiB6ZXJvCisJc2hvcnQJCXNvcHJfaW5mIC0gdGJsX3RyYW5zCSMgJDE2LTIgZmxvZzIgaW5mCisJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDE2LTMgZmxvZzIgcW5hbgorCXNob3J0CQlzbG9nMmQJIC0gdGJsX3RyYW5zCSMgJDE2LTUgZmxvZzIgZGVub3JtCisJc2hvcnQJCXNyY19zbmFuIC0gdGJsX3RyYW5zCSMgJDE2LTQgZmxvZzIgc25hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTYtNiBmbG9nMiB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDE2LTcgRVJST1IKKworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTctMCBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTctMSBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTctMiBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTctMyBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTctNCBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTctNSBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTctNiBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTctNyBFUlJPUgorCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxOC0wIGZhYnMgbm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTgtMSBmYWJzIHplcm8KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDE4LTIgZmFicyBpbmYKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDE4LTMgZmFicyBxbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxOC01IGZhYnMgZGVub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxOC00IGZhYnMgc25hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTgtNiBmYWJzIHVubm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTgtNyBFUlJPUgorCisJc2hvcnQJCXNjb3NoCSAtIHRibF90cmFucwkjICQxOS0wIGZjb3NoIG5vcm0KKwlzaG9ydAkJbGRfcG9uZQkgLSB0YmxfdHJhbnMJIyAkMTktMSBmY29zaCB6ZXJvCisJc2hvcnQJCWxkX3BpbmYJIC0gdGJsX3RyYW5zCSMgJDE5LTIgZmNvc2ggaW5mCisJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDE5LTMgZmNvc2ggcW5hbgorCXNob3J0CQlzY29zaGQJIC0gdGJsX3RyYW5zCSMgJDE5LTUgZmNvc2ggZGVub3JtCisJc2hvcnQJCXNyY19zbmFuIC0gdGJsX3RyYW5zCSMgJDE5LTQgZmNvc2ggc25hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMTktNiBmY29zaCB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDE5LTcgRVJST1IKKworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWEtMCBmbmVnIG5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDFhLTEgZm5lZyB6ZXJvCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxYS0yIGZuZWcgaW5mCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxYS0zIGZuZWcgcW5hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWEtNSBmbmVnIGRlbm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWEtNCBmbmVnIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDFhLTYgZm5lZyB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDFhLTcgRVJST1IKKworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWItMCBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWItMSBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWItMiBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWItMyBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWItNCBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWItNSBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWItNiBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWItNyBFUlJPUgorCisJc2hvcnQJCXNhY29zCSAtIHRibF90cmFucwkjICQxYy0wIGZhY29zIG5vcm0KKwlzaG9ydAkJbGRfcHBpMgkgLSB0YmxfdHJhbnMJIyAkMWMtMSBmYWNvcyB6ZXJvCisJc2hvcnQJCXRfb3BlcnIJIC0gdGJsX3RyYW5zCSMgJDFjLTIgZmFjb3MgaW5mCisJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDFjLTMgZmFjb3MgcW5hbgorCXNob3J0CQlzYWNvc2QJIC0gdGJsX3RyYW5zCSMgJDFjLTUgZmFjb3MgZGVub3JtCisJc2hvcnQJCXNyY19zbmFuIC0gdGJsX3RyYW5zCSMgJDFjLTQgZmFjb3Mgc25hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMWMtNiBmYWNvcyB1bm5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDFjLTcgRVJST1IKKworCXNob3J0CQlzY29zCSAtIHRibF90cmFucwkjICQxZC0wIGZjb3Mgbm9ybQorCXNob3J0CQlsZF9wb25lCSAtIHRibF90cmFucwkjICQxZC0xIGZjb3MgemVybworCXNob3J0CQl0X29wZXJyCSAtIHRibF90cmFucwkjICQxZC0yIGZjb3MgaW5mCisJc2hvcnQJCXNyY19xbmFuIC0gdGJsX3RyYW5zCSMgJDFkLTMgZmNvcyBxbmFuCisJc2hvcnQJCXNjb3NkCSAtIHRibF90cmFucwkjICQxZC01IGZjb3MgZGVub3JtCisJc2hvcnQJCXNyY19zbmFuIC0gdGJsX3RyYW5zCSMgJDFkLTQgZmNvcyBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxZC02IGZjb3MgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxZC03IEVSUk9SCisKKwlzaG9ydAkJc2dldGV4cAkgLSB0YmxfdHJhbnMJIyAkMWUtMCBmZ2V0ZXhwIG5vcm0KKwlzaG9ydAkJc3JjX3plcm8gLSB0YmxfdHJhbnMJIyAkMWUtMSBmZ2V0ZXhwIHplcm8KKwlzaG9ydAkJdF9vcGVycgkgLSB0YmxfdHJhbnMJIyAkMWUtMiBmZ2V0ZXhwIGluZgorCXNob3J0CQlzcmNfcW5hbiAtIHRibF90cmFucwkjICQxZS0zIGZnZXRleHAgcW5hbgorCXNob3J0CQlzZ2V0ZXhwZCAtIHRibF90cmFucwkjICQxZS01IGZnZXRleHAgZGVub3JtCisJc2hvcnQJCXNyY19zbmFuIC0gdGJsX3RyYW5zCSMgJDFlLTQgZmdldGV4cCBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxZS02IGZnZXRleHAgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxZS03IEVSUk9SCisKKwlzaG9ydAkJc2dldG1hbgkgLSB0YmxfdHJhbnMJIyAkMWYtMCBmZ2V0bWFuIG5vcm0KKwlzaG9ydAkJc3JjX3plcm8gLSB0YmxfdHJhbnMJIyAkMWYtMSBmZ2V0bWFuIHplcm8KKwlzaG9ydAkJdF9vcGVycgkgLSB0YmxfdHJhbnMJIyAkMWYtMiBmZ2V0bWFuIGluZgorCXNob3J0CQlzcmNfcW5hbiAtIHRibF90cmFucwkjICQxZi0zIGZnZXRtYW4gcW5hbgorCXNob3J0CQlzZ2V0bWFuZCAtIHRibF90cmFucwkjICQxZi01IGZnZXRtYW4gZGVub3JtCisJc2hvcnQJCXNyY19zbmFuIC0gdGJsX3RyYW5zCSMgJDFmLTQgZmdldG1hbiBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxZi02IGZnZXRtYW4gdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQxZi03IEVSUk9SCisKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIwLTAgZmRpdiBub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMC0xIGZkaXYgemVybworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjAtMiBmZGl2IGluZgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjAtMyBmZGl2IHFuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIwLTUgZmRpdiBkZW5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIwLTQgZmRpdiBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMC02IGZkaXYgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMC03IEVSUk9SCisKKwlzaG9ydAkJc21vZF9zbm9ybSAtIHRibF90cmFucwkjICQyMS0wIGZtb2Qgbm9ybQorCXNob3J0CQlzbW9kX3N6ZXJvIC0gdGJsX3RyYW5zCSMgJDIxLTEgZm1vZCB6ZXJvCisJc2hvcnQJCXNtb2Rfc2luZiAtIHRibF90cmFucwkjICQyMS0yIGZtb2QgaW5mCisJc2hvcnQJCXNvcF9zcW5hbiAtIHRibF90cmFucwkjICQyMS0zIGZtb2QgcW5hbgorCXNob3J0CQlzbW9kX3NkbnJtIC0gdGJsX3RyYW5zCSMgJDIxLTUgZm1vZCBkZW5vcm0KKwlzaG9ydAkJc29wX3NzbmFuIC0gdGJsX3RyYW5zCSMgJDIxLTQgZm1vZCBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMS02IGZtb2QgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMS03IEVSUk9SCisKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIyLTAgZmFkZCBub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMi0xIGZhZGQgemVybworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjItMiBmYWRkIGluZgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjItMyBmYWRkIHFuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIyLTUgZmFkZCBkZW5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIyLTQgZmFkZCBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMi02IGZhZGQgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMi03IEVSUk9SCisKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIzLTAgZm11bCBub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMy0xIGZtdWwgemVybworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjMtMiBmbXVsIGluZgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjMtMyBmbXVsIHFuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIzLTUgZm11bCBkZW5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDIzLTQgZm11bCBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMy02IGZtdWwgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyMy03IEVSUk9SCisKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI0LTAgZnNnbGRpdiBub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNC0xIGZzZ2xkaXYgemVybworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjQtMiBmc2dsZGl2IGluZgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjQtMyBmc2dsZGl2IHFuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI0LTUgZnNnbGRpdiBkZW5vcm0KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI0LTQgZnNnbGRpdiBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNC02IGZzZ2xkaXYgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNC03IEVSUk9SCisKKwlzaG9ydAkJc3JlbV9zbm9ybSAtIHRibF90cmFucwkjICQyNS0wIGZyZW0gbm9ybQorCXNob3J0CQlzcmVtX3N6ZXJvIC0gdGJsX3RyYW5zCSMgJDI1LTEgZnJlbSB6ZXJvCisJc2hvcnQJCXNyZW1fc2luZiAtIHRibF90cmFucwkjICQyNS0yIGZyZW0gaW5mCisJc2hvcnQJCXNvcF9zcW5hbiAtIHRibF90cmFucwkjICQyNS0zIGZyZW0gcW5hbgorCXNob3J0CQlzcmVtX3NkbnJtIC0gdGJsX3RyYW5zCSMgJDI1LTUgZnJlbSBkZW5vcm0KKwlzaG9ydAkJc29wX3NzbmFuIC0gdGJsX3RyYW5zCSMgJDI1LTQgZnJlbSBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNS02IGZyZW0gdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNS03IEVSUk9SCisKKwlzaG9ydAkJc3NjYWxlX3Nub3JtIC0gdGJsX3RyYW5zICMgJDI2LTAgZnNjYWxlIG5vcm0KKwlzaG9ydAkJc3NjYWxlX3N6ZXJvIC0gdGJsX3RyYW5zICMgJDI2LTEgZnNjYWxlIHplcm8KKwlzaG9ydAkJc3NjYWxlX3NpbmYgLSB0YmxfdHJhbnMJIyAkMjYtMiBmc2NhbGUgaW5mCisJc2hvcnQJCXNvcF9zcW5hbiAtIHRibF90cmFucwkjICQyNi0zIGZzY2FsZSBxbmFuCisJc2hvcnQJCXNzY2FsZV9zZG5ybSAtIHRibF90cmFucyAjICQyNi01IGZzY2FsZSBkZW5vcm0KKwlzaG9ydAkJc29wX3NzbmFuIC0gdGJsX3RyYW5zCSMgJDI2LTQgZnNjYWxlIHNuYW4KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI2LTYgZnNjYWxlIHVubm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjYtNyBFUlJPUgorCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNy0wIGZzZ2xtdWwgbm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjctMSBmc2dsbXVsIHplcm8KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI3LTIgZnNnbG11bCBpbmYKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI3LTMgZnNnbG11bCBxbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNy01IGZzZ2xtdWwgZGVub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyNy00IGZzZ2xtdWwgc25hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjctNiBmc2dsbXVsIHVubm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjctNyBFUlJPUgorCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyOC0wIGZzdWIgbm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjgtMSBmc3ViIHplcm8KKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI4LTIgZnN1YiBpbmYKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDI4LTMgZnN1YiBxbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyOC01IGZzdWIgZGVub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyOC00IGZzdWIgc25hbgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjgtNiBmc3ViIHVubm9ybQorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMjgtNyBFUlJPUgorCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyOS0wIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyOS0xIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyOS0yIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyOS0zIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyOS00IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyOS01IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyOS02IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyOS03IEVSUk9SCisKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJhLTAgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJhLTEgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJhLTIgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJhLTMgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJhLTQgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJhLTUgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJhLTYgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJhLTcgRVJST1IKKworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmItMCBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmItMSBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmItMiBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmItMyBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmItNCBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmItNSBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmItNiBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmItNyBFUlJPUgorCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYy0wIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYy0xIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYy0yIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYy0zIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYy00IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYy01IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYy02IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyYy03IEVSUk9SCisKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJkLTAgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJkLTEgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJkLTIgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJkLTMgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJkLTQgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJkLTUgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJkLTYgRVJST1IKKwlzaG9ydAkJdGJsX3RyYW5zIC0gdGJsX3RyYW5zCSMgJDJkLTcgRVJST1IKKworCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmUtMCBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmUtMSBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmUtMiBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmUtMyBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmUtNCBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmUtNSBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmUtNiBFUlJPUgorCXNob3J0CQl0YmxfdHJhbnMgLSB0YmxfdHJhbnMJIyAkMmUtNyBFUlJPUgorCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZi0wIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZi0xIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZi0yIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZi0zIEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZi00IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZi01IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZi02IEVSUk9SCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQyZi03IEVSUk9SCisKKwlzaG9ydAkJc3NpbmNvcwkgLSB0YmxfdHJhbnMJIyAkMzAtMCBmc2luY29zIG5vcm0KKwlzaG9ydAkJc3NpbmNvc3ogLSB0YmxfdHJhbnMJIyAkMzAtMSBmc2luY29zIHplcm8KKwlzaG9ydAkJc3NpbmNvc2kgLSB0YmxfdHJhbnMJIyAkMzAtMiBmc2luY29zIGluZgorCXNob3J0CQlzc2luY29zcW5hbiAtIHRibF90cmFucwkjICQzMC0zIGZzaW5jb3MgcW5hbgorCXNob3J0CQlzc2luY29zZCAtIHRibF90cmFucwkjICQzMC01IGZzaW5jb3MgZGVub3JtCisJc2hvcnQJCXNzaW5jb3NzbmFuIC0gdGJsX3RyYW5zCSMgJDMwLTQgZnNpbmNvcyBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzMC02IGZzaW5jb3MgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzMC03IEVSUk9SCisKKwlzaG9ydAkJc3NpbmNvcwkgLSB0YmxfdHJhbnMJIyAkMzEtMCBmc2luY29zIG5vcm0KKwlzaG9ydAkJc3NpbmNvc3ogLSB0YmxfdHJhbnMJIyAkMzEtMSBmc2luY29zIHplcm8KKwlzaG9ydAkJc3NpbmNvc2kgLSB0YmxfdHJhbnMJIyAkMzEtMiBmc2luY29zIGluZgorCXNob3J0CQlzc2luY29zcW5hbiAtIHRibF90cmFucwkjICQzMS0zIGZzaW5jb3MgcW5hbgorCXNob3J0CQlzc2luY29zZCAtIHRibF90cmFucwkjICQzMS01IGZzaW5jb3MgZGVub3JtCisJc2hvcnQJCXNzaW5jb3NzbmFuIC0gdGJsX3RyYW5zCSMgJDMxLTQgZnNpbmNvcyBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzMS02IGZzaW5jb3MgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzMS03IEVSUk9SCisKKwlzaG9ydAkJc3NpbmNvcwkgLSB0YmxfdHJhbnMJIyAkMzItMCBmc2luY29zIG5vcm0KKwlzaG9ydAkJc3NpbmNvc3ogLSB0YmxfdHJhbnMJIyAkMzItMSBmc2luY29zIHplcm8KKwlzaG9ydAkJc3NpbmNvc2kgLSB0YmxfdHJhbnMJIyAkMzItMiBmc2luY29zIGluZgorCXNob3J0CQlzc2luY29zcW5hbiAtIHRibF90cmFucwkjICQzMi0zIGZzaW5jb3MgcW5hbgorCXNob3J0CQlzc2luY29zZCAtIHRibF90cmFucwkjICQzMi01IGZzaW5jb3MgZGVub3JtCisJc2hvcnQJCXNzaW5jb3NzbmFuIC0gdGJsX3RyYW5zCSMgJDMyLTQgZnNpbmNvcyBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzMi02IGZzaW5jb3MgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzMi03IEVSUk9SCisKKwlzaG9ydAkJc3NpbmNvcwkgLSB0YmxfdHJhbnMJIyAkMzMtMCBmc2luY29zIG5vcm0KKwlzaG9ydAkJc3NpbmNvc3ogLSB0YmxfdHJhbnMJIyAkMzMtMSBmc2luY29zIHplcm8KKwlzaG9ydAkJc3NpbmNvc2kgLSB0YmxfdHJhbnMJIyAkMzMtMiBmc2luY29zIGluZgorCXNob3J0CQlzc2luY29zcW5hbiAtIHRibF90cmFucwkjICQzMy0zIGZzaW5jb3MgcW5hbgorCXNob3J0CQlzc2luY29zZCAtIHRibF90cmFucwkjICQzMy01IGZzaW5jb3MgZGVub3JtCisJc2hvcnQJCXNzaW5jb3NzbmFuIC0gdGJsX3RyYW5zCSMgJDMzLTQgZnNpbmNvcyBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzMy02IGZzaW5jb3MgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzMy03IEVSUk9SCisKKwlzaG9ydAkJc3NpbmNvcwkgLSB0YmxfdHJhbnMJIyAkMzQtMCBmc2luY29zIG5vcm0KKwlzaG9ydAkJc3NpbmNvc3ogLSB0YmxfdHJhbnMJIyAkMzQtMSBmc2luY29zIHplcm8KKwlzaG9ydAkJc3NpbmNvc2kgLSB0YmxfdHJhbnMJIyAkMzQtMiBmc2luY29zIGluZgorCXNob3J0CQlzc2luY29zcW5hbiAtIHRibF90cmFucwkjICQzNC0zIGZzaW5jb3MgcW5hbgorCXNob3J0CQlzc2luY29zZCAtIHRibF90cmFucwkjICQzNC01IGZzaW5jb3MgZGVub3JtCisJc2hvcnQJCXNzaW5jb3NzbmFuIC0gdGJsX3RyYW5zCSMgJDM0LTQgZnNpbmNvcyBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzNC02IGZzaW5jb3MgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzNC03IEVSUk9SCisKKwlzaG9ydAkJc3NpbmNvcwkgLSB0YmxfdHJhbnMJIyAkMzUtMCBmc2luY29zIG5vcm0KKwlzaG9ydAkJc3NpbmNvc3ogLSB0YmxfdHJhbnMJIyAkMzUtMSBmc2luY29zIHplcm8KKwlzaG9ydAkJc3NpbmNvc2kgLSB0YmxfdHJhbnMJIyAkMzUtMiBmc2luY29zIGluZgorCXNob3J0CQlzc2luY29zcW5hbiAtIHRibF90cmFucwkjICQzNS0zIGZzaW5jb3MgcW5hbgorCXNob3J0CQlzc2luY29zZCAtIHRibF90cmFucwkjICQzNS01IGZzaW5jb3MgZGVub3JtCisJc2hvcnQJCXNzaW5jb3NzbmFuIC0gdGJsX3RyYW5zCSMgJDM1LTQgZnNpbmNvcyBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzNS02IGZzaW5jb3MgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzNS03IEVSUk9SCisKKwlzaG9ydAkJc3NpbmNvcwkgLSB0YmxfdHJhbnMJIyAkMzYtMCBmc2luY29zIG5vcm0KKwlzaG9ydAkJc3NpbmNvc3ogLSB0YmxfdHJhbnMJIyAkMzYtMSBmc2luY29zIHplcm8KKwlzaG9ydAkJc3NpbmNvc2kgLSB0YmxfdHJhbnMJIyAkMzYtMiBmc2luY29zIGluZgorCXNob3J0CQlzc2luY29zcW5hbiAtIHRibF90cmFucwkjICQzNi0zIGZzaW5jb3MgcW5hbgorCXNob3J0CQlzc2luY29zZCAtIHRibF90cmFucwkjICQzNi01IGZzaW5jb3MgZGVub3JtCisJc2hvcnQJCXNzaW5jb3NzbmFuIC0gdGJsX3RyYW5zCSMgJDM2LTQgZnNpbmNvcyBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzNi02IGZzaW5jb3MgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzNi03IEVSUk9SCisKKwlzaG9ydAkJc3NpbmNvcwkgLSB0YmxfdHJhbnMJIyAkMzctMCBmc2luY29zIG5vcm0KKwlzaG9ydAkJc3NpbmNvc3ogLSB0YmxfdHJhbnMJIyAkMzctMSBmc2luY29zIHplcm8KKwlzaG9ydAkJc3NpbmNvc2kgLSB0YmxfdHJhbnMJIyAkMzctMiBmc2luY29zIGluZgorCXNob3J0CQlzc2luY29zcW5hbiAtIHRibF90cmFucwkjICQzNy0zIGZzaW5jb3MgcW5hbgorCXNob3J0CQlzc2luY29zZCAtIHRibF90cmFucwkjICQzNy01IGZzaW5jb3MgZGVub3JtCisJc2hvcnQJCXNzaW5jb3NzbmFuIC0gdGJsX3RyYW5zCSMgJDM3LTQgZnNpbmNvcyBzbmFuCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzNy02IGZzaW5jb3MgdW5ub3JtCisJc2hvcnQJCXRibF90cmFucyAtIHRibF90cmFucwkjICQzNy03IEVSUk9SCisKKyMjIyMjIyMjIyMKKworIyB0aGUgaW5zdHJ1Y3Rpb24gZmV0Y2ggYWNjZXNzIGZvciB0aGUgZGlzcGxhY2VtZW50IHdvcmQgZm9yIHRoZQorIyBmZGJjYyBlbXVsYXRpb24gZmFpbGVkLiBoZXJlLCB3ZSBjcmVhdGUgYW4gYWNjZXNzIGVycm9yIGZyYW1lCisjIGZyb20gdGhlIGN1cnJlbnQgZnJhbWUgYW5kIGJyYW5jaCB0byBfcmVhbF9hY2Nlc3MoKS4KK2Z1bmltcF9pYWNjOgorCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCisJbW92LmwJCVVTRVJfRlBJQVIoJWE2KSxFWENfUEMoJWE2KSAjIHN0b3JlIGN1cnJlbnQgUEMKKworCXVubGsJCSVhNgorCisJbW92LmwJCSglc3ApLC0oJXNwKQkJIyBzdG9yZSBTUixoaShQQykKKwltb3YudwkJMHg4KCVzcCksMHg0KCVzcCkJIyBzdG9yZSBsbyhQQykKKwltb3YudwkJJjB4NDAwOCwweDYoJXNwKQkjIHN0b3JlIHZvZmYKKwltb3YubAkJMHgyKCVzcCksMHg4KCVzcCkJIyBzdG9yZSBFQQorCW1vdi5sCQkmMHgwOTQyODAwMSwweGMoJXNwKQkjIHN0b3JlIEZTTFcKKworCWJ0c3QJCSYweDUsKCVzcCkJCSMgdXNlciBvciBzdXBlcnZpc29yIG1vZGU/CisJYmVxLmIJCWZ1bmltcF9pYWNjX2VuZAkJIyB1c2VyCisJYnNldAkJJjB4MiwweGQoJXNwKQkJIyBzZXQgc3VwZXJ2aXNvciBUTSBiaXQKKworZnVuaW1wX2lhY2NfZW5kOgorCWJyYS5sCQlfcmVhbF9hY2Nlc3MKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzc2luKCk6ICAgICBjb21wdXRlcyB0aGUgc2luZSBvZiBhIG5vcm1hbGl6ZWQgaW5wdXQJCQkjCisjIHNzaW5kKCk6ICAgIGNvbXB1dGVzIHRoZSBzaW5lIG9mIGEgZGVub3JtYWxpemVkIGlucHV0CQkJIworIyBzY29zKCk6ICAgICBjb21wdXRlcyB0aGUgY29zaW5lIG9mIGEgbm9ybWFsaXplZCBpbnB1dAkJCSMKKyMgc2Nvc2QoKTogICAgY29tcHV0ZXMgdGhlIGNvc2luZSBvZiBhIGRlbm9ybWFsaXplZCBpbnB1dAkJIworIyBzc2luY29zKCk6ICBjb21wdXRlcyB0aGUgc2luZSBhbmQgY29zaW5lIG9mIGEgbm9ybWFsaXplZCBpbnB1dAkjCisjIHNzaW5jb3NkKCk6IGNvbXB1dGVzIHRoZSBzaW5lIGFuZCBjb3NpbmUgb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dAkJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJZnAwID0gc2luKFgpIG9yIGNvcyhYKQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgIEZvciBzc2luY29zKFgpOgkJCQkJCQkjCisjCWZwMCA9IHNpbihYKQkJCQkJCQkjCisjCWZwMSA9IGNvcyhYKQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAxIHVscCBpbiA2NCBzaWduaWZpY2FudCBiaXQsIGkuZS4JIworIwl3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5CSMKKyMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCisjCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJCQkJCQkJCQkjCisjCVNJTiBhbmQgQ09TOgkJCQkJCQkjCisjCTEuIElmIFNJTiBpcyBpbnZva2VkLCBzZXQgQWRqTiA6PSAwOyBvdGhlcndpc2UsIHNldCBBZGpOIDo9IDEuCSMKKyMJCQkJCQkJCQkjCisjCTIuIElmIHxYfCA+PSAxNVBpIG9yIHxYfCA8IDIqKigtNDApLCBnbyB0byA3LgkJCSMKKyMJCQkJCQkJCQkjCisjCTMuIERlY29tcG9zZSBYIGFzIFggPSBOKFBpLzIpICsgciB3aGVyZSB8cnwgPD0gUGkvNC4gTGV0CSMKKyMJCWsgPSBOIG1vZCA0LCBzbyBpbiBwYXJ0aWN1bGFyLCBrID0gMCwxLDIsb3IgMy4JCSMKKyMJCU92ZXJ3cml0ZSBrIGJ5IGsgOj0gayArIEFkak4uCQkJCSMKKyMJCQkJCQkJCQkjCisjCTQuIElmIGsgaXMgZXZlbiwgZ28gdG8gNi4JCQkJCSMKKyMJCQkJCQkJCQkjCisjCTUuIChrIGlzIG9kZCkgU2V0IGogOj0gKGstMSkvMiwgc2duIDo9ICgtMSkqKmouCQkJIworIwkJUmV0dXJuIHNnbipjb3Mocikgd2hlcmUgY29zKHIpIGlzIGFwcHJveGltYXRlZCBieSBhbgkjCisjCQlldmVuIHBvbHlub21pYWwgaW4gciwgMSArIHIqciooQjErcyooQjIrIC4uLiArIHMqQjgpKSwJIworIwkJcyA9IHIqci4JCQkJCQkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwk2LiAoayBpcyBldmVuKSBTZXQgaiA6PSBrLzIsIHNnbiA6PSAoLTEpKipqLiBSZXR1cm4gc2duKnNpbihyKQkjCisjCQl3aGVyZSBzaW4ocikgaXMgYXBwcm94aW1hdGVkIGJ5IGFuIG9kZCBwb2x5bm9taWFsIGluIHIJIworIwkJciArIHIqcyooQTErcyooQTIrIC4uLiArIHMqQTcpKSwJcyA9IHIqci4JIworIwkJRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJNy4gSWYgfFh8ID4gMSwgZ28gdG8gOS4JCQkJCQkjCisjCQkJCQkJCQkJIworIwk4LiAofFh8PDIqKigtNDApKSBJZiBTSU4gaXMgaW52b2tlZCwgcmV0dXJuIFg7CQkJIworIwkJb3RoZXJ3aXNlIHJldHVybiAxLgkJCQkJIworIwkJCQkJCQkJCSMKKyMJOS4gT3ZlcndyaXRlIFggYnkgWCA6PSBYIHJlbSAyUGkuIE5vdyB0aGF0IHxYfCA8PSBQaSwJCSMKKyMJCWdvIGJhY2sgdG8gMy4JCQkJCQkjCisjCQkJCQkJCQkJIworIwlTSU5DT1M6CQkJCQkJCQkjCisjCTEuIElmIHxYfCA+PSAxNVBpIG9yIHxYfCA8IDIqKigtNDApLCBnbyB0byA2LgkJCSMKKyMJCQkJCQkJCQkjCisjCTIuIERlY29tcG9zZSBYIGFzIFggPSBOKFBpLzIpICsgciB3aGVyZSB8cnwgPD0gUGkvNC4gTGV0CSMKKyMJCWsgPSBOIG1vZCA0LCBzbyBpbiBwYXJ0aWN1bGFyLCBrID0gMCwxLDIsb3IgMy4JCSMKKyMJCQkJCQkJCQkjCisjCTMuIElmIGsgaXMgZXZlbiwgZ28gdG8gNS4JCQkJCSMKKyMJCQkJCQkJCQkjCisjCTQuIChrIGlzIG9kZCkgU2V0IGoxIDo9IChrLTEpLzIsIGoyIDo9IGoxIChFT1IpIChrIG1vZCAyKSwgaWUuCSMKKyMJCWoxIGV4Y2x1c2l2ZSBvciB3aXRoIHRoZSBsLnMuYi4gb2Ygay4JCQkjCisjCQlzZ24xIDo9ICgtMSkqKmoxLCBzZ24yIDo9ICgtMSkqKmoyLgkJCSMKKyMJCVNJTihYKSA9IHNnbjEgKiBjb3MocikgYW5kIENPUyhYKSA9IHNnbjIqc2luKHIpIHdoZXJlCSMKKyMJCXNpbihyKSBhbmQgY29zKHIpIGFyZSBjb21wdXRlZCBhcyBvZGQgYW5kIGV2ZW4JCSMKKyMJCXBvbHlub21pYWxzIGluIHIsIHJlc3BlY3RpdmVseS4gRXhpdAkJCSMKKyMJCQkJCQkJCQkjCisjCTUuIChrIGlzIGV2ZW4pIFNldCBqMSA6PSBrLzIsIHNnbjEgOj0gKC0xKSoqajEuCQkJIworIwkJU0lOKFgpID0gc2duMSAqIHNpbihyKSBhbmQgQ09TKFgpID0gc2duMSpjb3Mocikgd2hlcmUJIworIwkJc2luKHIpIGFuZCBjb3MocikgYXJlIGNvbXB1dGVkIGFzIG9kZCBhbmQgZXZlbgkJIworIwkJcG9seW5vbWlhbHMgaW4gciwgcmVzcGVjdGl2ZWx5LiBFeGl0CQkJIworIwkJCQkJCQkJCSMKKyMJNi4gSWYgfFh8ID4gMSwgZ28gdG8gOC4JCQkJCQkjCisjCQkJCQkJCQkJIworIwk3LiAofFh8PDIqKigtNDApKSBTSU4oWCkgPSBYIGFuZCBDT1MoWCkgPSAxLiBFeGl0LgkJIworIwkJCQkJCQkJCSMKKyMJOC4gT3ZlcndyaXRlIFggYnkgWCA6PSBYIHJlbSAyUGkuIE5vdyB0aGF0IHxYfCA8PSBQaSwJCSMKKyMJCWdvIGJhY2sgdG8gMi4JCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitTSU5BNzoJbG9uZwkJMHhCRDZBQUE3NywweENDQzk5NEY1CitTSU5BNjoJbG9uZwkJMHgzREU2MTIwOSwweDdBQUU4REExCitTSU5BNToJbG9uZwkJMHhCRTVBRTY0NSwweDJBMTE4QUU0CitTSU5BNDoJbG9uZwkJMHgzRUM3MURFMywweEE1MzQxNTMxCitTSU5BMzoJbG9uZwkJMHhCRjJBMDFBMCwweDFBMDE4QjU5LDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorU0lOQTI6CWxvbmcJCTB4M0ZGODAwMDAsMHg4ODg4ODg4OCwweDg4ODg1OUFGLDB4MDAwMDAwMDAKK1NJTkExOglsb25nCQkweEJGRkMwMDAwLDB4QUFBQUFBQUEsMHhBQUFBQUE5OSwweDAwMDAwMDAwCisKK0NPU0I4Oglsb25nCQkweDNEMkFDNEQwLDB4RDYwMTFFRTMKK0NPU0I3Oglsb25nCQkweEJEQTkzOTZGLDB4OUY0NUFDMTkKK0NPU0I2Oglsb25nCQkweDNFMjFFRUQ5LDB4MDYxMkM5NzIKK0NPU0I1Oglsb25nCQkweEJFOTI3RTRGLDB4Qjc5RDlGQ0YKK0NPU0I0Oglsb25nCQkweDNFRkEwMUEwLDB4MUEwMUQ0MjMsMHgwMDAwMDAwMCwweDAwMDAwMDAwCitDT1NCMzoJbG9uZwkJMHhCRkY1MDAwMCwweEI2MEI2MEI2LDB4MEI2MUQ0MzgsMHgwMDAwMDAwMAorQ09TQjI6CWxvbmcJCTB4M0ZGQTAwMDAsMHhBQUFBQUFBQSwweEFBQUFBQjVFCitDT1NCMToJbG9uZwkJMHhCRjAwMDAwMAorCisJc2V0CQlJTkFSRyxGUF9TQ1IwCisKKwlzZXQJCVgsRlBfU0NSMAorIwlzZXQJCVhEQ0FSRSxYKzIKKwlzZXQJCVhGUkFDLFgrNAorCisJc2V0CQlSUFJJTUUsRlBfU0NSMAorCXNldAkJU1BSSU1FLEZQX1NDUjEKKworCXNldAkJUE9TTkVHMSxMX1NDUjEKKwlzZXQJCVRXT1RPNjMsTF9TQ1IxCisKKwlzZXQJCUVOREZMQUcsTF9TQ1IyCisJc2V0CQlJTlQsTF9TQ1IyCisKKwlzZXQJCUFESk4sTF9TQ1IzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlzc2luCitzc2luOgorCW1vdi5sCQkmMCxBREpOKCVhNikJCSMgeWVzOyBTRVQgQURKTiBUTyAwCisJYnJhLmIJCVNJTkJHTgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJc2Nvcworc2NvczoKKwltb3YubAkJJjEsQURKTiglYTYpCQkjIHllczsgU0VUIEFESk4gVE8gMQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworU0lOQkdOOgorIy0tU0FWRSBGUENSLCBGUDEuIENIRUNLIElGIHxYfCBJUyBUT08gU01BTEwgT1IgTEFSR0UKKworCWZtb3YueAkJKCVhMCksJWZwMAkJIyBMT0FEIElOUFVUCisJZm1vdi54CQklZnAwLFgoJWE2KQkJIyBzYXZlIGlucHV0IGF0IFgKKworIyAiQ09NUEFDVElGWSIgWAorCW1vdi5sCQkoJWEwKSwlZDEJCSMgcHV0IGV4cCBpbiBoaSB3b3JkCisJbW92LncJCTQoJWEwKSwlZDEJCSMgZmV0Y2ggaGkobWFuKQorCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEJCSMgc3RyaXAgc2lnbgorCisJY21waS5sCQklZDEsJjB4M0ZENzgwMDAJCSMgaXMgfFh8ID49IDIqKigtNDApPworCWJnZS5iCQlTT0sxCQkJIyBubworCWJyYS53CQlTSU5TTQkJCSMgeWVzOyBpbnB1dCBpcyB2ZXJ5IHNtYWxsCisKK1NPSzE6CisJY21wLmwJCSVkMSwmMHg0MDA0QkM3RQkJIyBpcyB8WHwgPCAxNSBQST8KKwlibHQuYgkJU0lOTUFJTgkJCSMgbm8KKwlicmEudwkJU1JFRFVDRVgJCSMgeWVzOyBpbnB1dCBpcyB2ZXJ5IGxhcmdlCisKKyMtLVRISVMgSVMgVEhFIFVTVUFMIENBU0UsIHxYfCA8PSAxNSBQSS4KKyMtLVRIRSBBUkdVTUVOVCBSRURVQ1RJT04gSVMgRE9ORSBCWSBUQUJMRSBMT09LIFVQLgorU0lOTUFJTjoKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwuZAkJVFdPQllQSSglcGMpLCVmcDEJIyBYKjIvUEkKKworCWxlYQkJUElUQkwrMHgyMDAoJXBjKSwlYTEJIyBUQUJMRSBPRiBOKlBJLzIsIE4gPSAtMzIsLi4uLDMyCisKKwlmbW92LmwJCSVmcDEsSU5UKCVhNikJCSMgQ09OVkVSVCBUTyBJTlRFR0VSCisKKwltb3YubAkJSU5UKCVhNiksJWQxCQkjIG1ha2UgYSBjb3B5IG9mIE4KKwlhc2wubAkJJjQsJWQxCQkJIyBOICo9IDE2CisJYWRkLmwJCSVkMSwlYTEJCQkjIHRibF9hZGRyID0gYTEgKyAoTioxNikKKworIyBBMSBJUyBUSEUgQUREUkVTUyBPRiBOKlBJQlkyCisjIC4uLldISUNIIElTIElOIFRXTyBQSUVDRVMgWTEgJiBZMgorCWZzdWIueAkJKCVhMSkrLCVmcDAJCSMgWC1ZMQorCWZzdWIucwkJKCVhMSksJWZwMAkJIyBmcDAgPSBSID0gKFgtWTEpLVkyCisKK1NJTkNPTlQ6CisjLS1jb250aW51YXRpb24gZnJvbSBSRURVQ0VYCisKKyMtLUdFVCBOK0FESk4gQU5EIFNFRSBJRiBTSU4oUikgT1IgQ09TKFIpIElTIE5FRURFRAorCW1vdi5sCQlJTlQoJWE2KSwlZDEKKwlhZGQubAkJQURKTiglYTYpLCVkMQkJIyBTRUUgSUYgRDAgSVMgT0REIE9SIEVWRU4KKwlyb3IubAkJJjEsJWQxCQkJIyBEMCBXQVMgT0REIElGRiBEMCBJUyBORUdBVElWRQorCWNtcC5sCQklZDEsJjAKKwlibHQudwkJQ09TUE9MWQorCisjLS1MRVQgSiBCRSBUSEUgTEVBU1QgU0lHLiBCSVQgT0YgRDAsIExFVCBTR04gOj0gKC0xKSoqSi4KKyMtLVRIRU4gV0UgUkVUVVJOCVNHTipTSU4oUikuIFNHTipTSU4oUikgSVMgQ09NUFVURUQgQlkKKyMtLVInICsgUicqUyooQTEgKyBTKEEyICsgUyhBMyArIFMoQTQgKyAuLi4gKyBTQTcpKSkpLCBXSEVSRQorIy0tUicgPSBTR04qUiwgUz1SKlIuIFRISVMgQ0FOIEJFIFJFV1JJVFRFTiBBUworIy0tUicgKyBSJypTKiggW0ExK1QoQTMrVChBNStUQTcpKV0gKyBbUyhBMitUKEE0K1RBNikpXSkKKyMtLVdIRVJFIFQ9UypTLgorIy0tTk9URSBUSEFUIEEzIFRIUk9VR0ggQTcgQVJFIFNUT1JFRCBJTiBET1VCTEUgUFJFQ0lTSU9OCisjLS1XSElMRSBBMSBBTkQgQTIgQVJFIElOIERPVUJMRS1FWFRFTkRFRCBGT1JNQVQuCitTSU5QT0xZOgorCWZtb3ZtLngJCSYweDBjLC0oJXNwKQkJIyBzYXZlIGZwMi9mcDMKKworCWZtb3YueAkJJWZwMCxYKCVhNikJCSMgWCBJUyBSCisJZm11bC54CQklZnAwLCVmcDAJCSMgRlAwIElTIFMKKworCWZtb3YuZAkJU0lOQTcoJXBjKSwlZnAzCisJZm1vdi5kCQlTSU5BNiglcGMpLCVmcDIKKworCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC54CQklZnAxLCVmcDEJCSMgRlAxIElTIFQKKworCXJvci5sCQkmMSwlZDEKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQxCisjIC4uLkxFQVNUIFNJRy4gQklUIE9GIEQwIElOIFNJR04gUE9TSVRJT04KKwllb3IubAkJJWQxLFgoJWE2KQkJIyBYIElTIE5PVyBSJz0gU0dOKlIKKworCWZtdWwueAkJJWZwMSwlZnAzCQkjIFRBNworCWZtdWwueAkJJWZwMSwlZnAyCQkjIFRBNgorCisJZmFkZC5kCQlTSU5BNSglcGMpLCVmcDMJCSMgQTUrVEE3CisJZmFkZC5kCQlTSU5BNCglcGMpLCVmcDIJCSMgQTQrVEE2CisKKwlmbXVsLngJCSVmcDEsJWZwMwkJIyBUKEE1K1RBNykKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBUKEE0K1RBNikKKworCWZhZGQuZAkJU0lOQTMoJXBjKSwlZnAzCQkjIEEzK1QoQTUrVEE3KQorCWZhZGQueAkJU0lOQTIoJXBjKSwlZnAyCQkjIEEyK1QoQTQrVEE2KQorCisJZm11bC54CQklZnAzLCVmcDEJCSMgVChBMytUKEE1K1RBNykpCisKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBTKEEyK1QoQTQrVEE2KSkKKwlmYWRkLngJCVNJTkExKCVwYyksJWZwMQkJIyBBMStUKEEzK1QoQTUrVEE3KSkKKwlmbXVsLngJCVgoJWE2KSwlZnAwCQkjIFInKlMKKworCWZhZGQueAkJJWZwMiwlZnAxCQkjIFtBMStUKEEzK1QoQTUrVEE3KSldK1tTKEEyK1QoQTQrVEE2KSldCisKKwlmbXVsLngJCSVmcDEsJWZwMAkJIyBTSU4oUicpLVInCisKKwlmbW92bS54CQkoJXNwKSssJjB4MzAJCSMgcmVzdG9yZSBmcDIvZnAzCisKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIG1vZGUscHJlYworCWZhZGQueAkJWCglYTYpLCVmcDAJCSMgbGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uIHNldAorCWJyYQkJdF9pbngyCisKKyMtLUxFVCBKIEJFIFRIRSBMRUFTVCBTSUcuIEJJVCBPRiBEMCwgTEVUIFNHTiA6PSAoLTEpKipKLgorIy0tVEhFTiBXRSBSRVRVUk4JU0dOKkNPUyhSKS4gU0dOKkNPUyhSKSBJUyBDT01QVVRFRCBCWQorIy0tU0dOICsgUycqKEIxICsgUyhCMiArIFMoQjMgKyBTKEI0ICsgLi4uICsgU0I4KSkpKSwgV0hFUkUKKyMtLVM9UipSIEFORCBTJz1TR04qUy4gVEhJUyBDQU4gQkUgUkVXUklUVEVOIEFTCisjLS1TR04gKyBTJyooW0IxK1QoQjMrVChCNStUQjcpKV0gKyBbUyhCMitUKEI0K1QoQjYrVEI4KSkpXSkKKyMtLVdIRVJFIFQ9UypTLgorIy0tTk9URSBUSEFUIEI0IFRIUk9VR0ggQjggQVJFIFNUT1JFRCBJTiBET1VCTEUgUFJFQ0lTSU9OCisjLS1XSElMRSBCMiBBTkQgQjMgQVJFIElOIERPVUJMRS1FWFRFTkRFRCBGT1JNQVQsIEIxIElTIC0xLzIKKyMtLUFORCBJUyBUSEVSRUZPUkUgU1RPUkVEIEFTIFNJTkdMRSBQUkVDSVNJT04uCitDT1NQT0xZOgorCWZtb3ZtLngJCSYweDBjLC0oJXNwKQkJIyBzYXZlIGZwMi9mcDMKKworCWZtdWwueAkJJWZwMCwlZnAwCQkjIEZQMCBJUyBTCisKKwlmbW92LmQJCUNPU0I4KCVwYyksJWZwMgorCWZtb3YuZAkJQ09TQjcoJXBjKSwlZnAzCisKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwueAkJJWZwMSwlZnAxCQkjIEZQMSBJUyBUCisKKwlmbW92LngJCSVmcDAsWCglYTYpCQkjIFggSVMgUworCXJvci5sCQkmMSwlZDEKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQxCisjIC4uLkxFQVNUIFNJRy4gQklUIE9GIEQwIElOIFNJR04gUE9TSVRJT04KKworCWZtdWwueAkJJWZwMSwlZnAyCQkjIFRCOAorCisJZW9yLmwJCSVkMSxYKCVhNikJCSMgWCBJUyBOT1cgUyc9IFNHTipTCisJYW5kLmwJCSYweDgwMDAwMDAwLCVkMQorCisJZm11bC54CQklZnAxLCVmcDMJCSMgVEI3CisKKwlvci5sCQkmMHgzRjgwMDAwMCwlZDEJCSMgRDAgSVMgU0dOIElOIFNJTkdMRQorCW1vdi5sCQklZDEsUE9TTkVHMSglYTYpCisKKwlmYWRkLmQJCUNPU0I2KCVwYyksJWZwMgkJIyBCNitUQjgKKwlmYWRkLmQJCUNPU0I1KCVwYyksJWZwMwkJIyBCNStUQjcKKworCWZtdWwueAkJJWZwMSwlZnAyCQkjIFQoQjYrVEI4KQorCWZtdWwueAkJJWZwMSwlZnAzCQkjIFQoQjUrVEI3KQorCisJZmFkZC5kCQlDT1NCNCglcGMpLCVmcDIJCSMgQjQrVChCNitUQjgpCisJZmFkZC54CQlDT1NCMyglcGMpLCVmcDMJCSMgQjMrVChCNStUQjcpCisKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBUKEI0K1QoQjYrVEI4KSkKKwlmbXVsLngJCSVmcDMsJWZwMQkJIyBUKEIzK1QoQjUrVEI3KSkKKworCWZhZGQueAkJQ09TQjIoJXBjKSwlZnAyCQkjIEIyK1QoQjQrVChCNitUQjgpKQorCWZhZGQucwkJQ09TQjEoJXBjKSwlZnAxCQkjIEIxK1QoQjMrVChCNStUQjcpKQorCisJZm11bC54CQklZnAyLCVmcDAJCSMgUyhCMitUKEI0K1QoQjYrVEI4KSkpCisKKwlmYWRkLngJCSVmcDEsJWZwMAorCisJZm11bC54CQlYKCVhNiksJWZwMAorCisJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIHJlc3RvcmUgZnAyL2ZwMworCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBtb2RlLHByZWMKKwlmYWRkLnMJCVBPU05FRzEoJWE2KSwlZnAwCSMgbGFzdCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9uIHNldAorCWJyYQkJdF9pbngyCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBTSU5lOiBCaWcgT1IgU21hbGw/CisjLS1JRiB8WHwgPiAxNVBJLCBXRSBVU0UgVEhFIEdFTkVSQUwgQVJHVU1FTlQgUkVEVUNUSU9OLgorIy0tSUYgfFh8IDwgMioqKC00MCksIFJFVFVSTiBYIE9SIDEuCitTSU5CT1JTOgorCWNtcC5sCQklZDEsJjB4M0ZGRjgwMDAKKwliZ3QubAkJU1JFRFVDRVgKKworU0lOU006CisJbW92LmwJCUFESk4oJWE2KSwlZDEKKwljbXAubAkJJWQxLCYwCisJYmd0LmIJCUNPU1RJTlkKKworIyBoZXJlLCB0aGUgb3BlcmF0aW9uIG1heSB1bmRlcmZsb3cgaWZmIHRoZSBwcmVjaXNpb24gaXMgc2dsIG9yIGRibC4KKyMgZXh0ZW5kZWQgZGVub3JtcyBhcmUgaGFuZGxlZCB0aHJvdWdoIGFub3RoZXIgZW50cnkgcG9pbnQuCitTSU5USU5ZOgorIwltb3YudwkJJjB4MDAwMCxYRENBUkUoJWE2KQkjIEpVU1QgSU4gQ0FTRQorCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBtb2RlLHByZWMKKwltb3YuYgkJJkZNT1ZfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNT1ZFCisJZm1vdi54CQlYKCVhNiksJWZwMAkJIyBsYXN0IGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb24gc2V0CisJYnJhCQl0X2NhdGNoCisKK0NPU1RJTlk6CisJZm1vdi5zCQkmMHgzRjgwMDAwMCwlZnAwCSMgZnAwID0gMS4wCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBtb2RlLHByZWMKKwlmYWRkLnMJCSYweDgwODAwMDAwLCVmcDAJIyBsYXN0IGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb24gc2V0CisJYnJhCQl0X3BpbngyCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJc3NpbmQKKyMtLVNJTihYKSA9IFggRk9SIERFTk9STUFMSVpFRCBYCitzc2luZDoKKwlicmEJCXRfZXh0ZG5ybQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJc2Nvc2QKKyMtLUNPUyhYKSA9IDEgRk9SIERFTk9STUFMSVpFRCBYCitzY29zZDoKKwlmbW92LnMJCSYweDNGODAwMDAwLCVmcDAJIyBmcDAgPSAxLjAKKwlicmEJCXRfcGlueDIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc3NpbmNvcworc3NpbmNvczoKKyMtLVNFVCBBREpOIFRPIDQKKwltb3YubAkJJjQsQURKTiglYTYpCisKKwlmbW92LngJCSglYTApLCVmcDAJCSMgTE9BRCBJTlBVVAorCWZtb3YueAkJJWZwMCxYKCVhNikKKworCW1vdi5sCQkoJWEwKSwlZDEKKwltb3YudwkJNCglYTApLCVkMQorCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEJCSMgQ09NUEFDVElGWSBYCisKKwljbXAubAkJJWQxLCYweDNGRDc4MDAwCQkjIHxYfCA+PSAyKiooLTQwKT8KKwliZ2UuYgkJU0NPSzEKKwlicmEudwkJU0NTTQorCitTQ09LMToKKwljbXAubAkJJWQxLCYweDQwMDRCQzdFCQkjIHxYfCA8IDE1IFBJPworCWJsdC5iCQlTQ01BSU4KKwlicmEudwkJU1JFRFVDRVgKKworCisjLS1USElTIElTIFRIRSBVU1VBTCBDQVNFLCB8WHwgPD0gMTUgUEkuCisjLS1USEUgQVJHVU1FTlQgUkVEVUNUSU9OIElTIERPTkUgQlkgVEFCTEUgTE9PSyBVUC4KK1NDTUFJTjoKKwlmbW92LngJCSVmcDAsJWZwMQorCisJZm11bC5kCQlUV09CWVBJKCVwYyksJWZwMQkjIFgqMi9QSQorCisJbGVhCQlQSVRCTCsweDIwMCglcGMpLCVhMQkjIFRBQkxFIE9GIE4qUEkvMiwgTiA9IC0zMiwuLi4sMzIKKworCWZtb3YubAkJJWZwMSxJTlQoJWE2KQkJIyBDT05WRVJUIFRPIElOVEVHRVIKKworCW1vdi5sCQlJTlQoJWE2KSwlZDEKKwlhc2wubAkJJjQsJWQxCisJYWRkLmwJCSVkMSwlYTEJCQkjIEFERFJFU1MgT0YgTipQSUJZMiwgSU4gWTEsIFkyCisKKwlmc3ViLngJCSglYTEpKywlZnAwCQkjIFgtWTEKKwlmc3ViLnMJCSglYTEpLCVmcDAJCSMgRlAwIElTIFIgPSAoWC1ZMSktWTIKKworU0NDT05UOgorIy0tY29udGludWF0aW9uIHBvaW50IGZyb20gUkVEVUNFWAorCisJbW92LmwJCUlOVCglYTYpLCVkMQorCXJvci5sCQkmMSwlZDEKKwljbXAubAkJJWQxLCYwCQkJIyBEMCA8IDAgSUZGIE4gSVMgT0RECisJYmdlLncJCU5FVkVOCisKK1NOT0REOgorIy0tUkVHSVNURVJTIFNBVkVEIFNPIEZBUjogRDAsIEEwLCBGUDIuCisJZm1vdm0ueAkJJjB4MDQsLSglc3ApCQkjIHNhdmUgZnAyCisKKwlmbW92LngJCSVmcDAsUlBSSU1FKCVhNikKKwlmbXVsLngJCSVmcDAsJWZwMAkJIyBGUDAgSVMgUyA9IFIqUgorCWZtb3YuZAkJU0lOQTcoJXBjKSwlZnAxCQkjIEE3CisJZm1vdi5kCQlDT1NCOCglcGMpLCVmcDIJCSMgQjgKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBTQTcKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBTQjgKKworCW1vdi5sCQklZDIsLSglc3ApCisJbW92LmwJCSVkMSwlZDIKKwlyb3IubAkJJjEsJWQyCisJYW5kLmwJCSYweDgwMDAwMDAwLCVkMgorCWVvci5sCQklZDEsJWQyCisJYW5kLmwJCSYweDgwMDAwMDAwLCVkMgorCisJZmFkZC5kCQlTSU5BNiglcGMpLCVmcDEJCSMgQTYrU0E3CisJZmFkZC5kCQlDT1NCNyglcGMpLCVmcDIJCSMgQjcrU0I4CisKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBTKEE2K1NBNykKKwllb3IubAkJJWQyLFJQUklNRSglYTYpCisJbW92LmwJCSglc3ApKywlZDIKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBTKEI3K1NCOCkKKwlyb3IubAkJJjEsJWQxCisJYW5kLmwJCSYweDgwMDAwMDAwLCVkMQorCW1vdi5sCQkmMHgzRjgwMDAwMCxQT1NORUcxKCVhNikKKwllb3IubAkJJWQxLFBPU05FRzEoJWE2KQorCisJZmFkZC5kCQlTSU5BNSglcGMpLCVmcDEJCSMgQTUrUyhBNitTQTcpCisJZmFkZC5kCQlDT1NCNiglcGMpLCVmcDIJCSMgQjYrUyhCNytTQjgpCisKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBTKEE1K1MoQTYrU0E3KSkKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBTKEI2K1MoQjcrU0I4KSkKKwlmbW92LngJCSVmcDAsU1BSSU1FKCVhNikKKworCWZhZGQuZAkJU0lOQTQoJXBjKSwlZnAxCQkjIEE0K1MoQTUrUyhBNitTQTcpKQorCWVvci5sCQklZDEsU1BSSU1FKCVhNikKKwlmYWRkLmQJCUNPU0I1KCVwYyksJWZwMgkJIyBCNStTKEI2K1MoQjcrU0I4KSkKKworCWZtdWwueAkJJWZwMCwlZnAxCQkjIFMoQTQrLi4uKQorCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoQjUrLi4uKQorCisJZmFkZC5kCQlTSU5BMyglcGMpLCVmcDEJCSMgQTMrUyhBNCsuLi4pCisJZmFkZC5kCQlDT1NCNCglcGMpLCVmcDIJCSMgQjQrUyhCNSsuLi4pCisKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBTKEEzKy4uLikKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBTKEI0Ky4uLikKKworCWZhZGQueAkJU0lOQTIoJXBjKSwlZnAxCQkjIEEyK1MoQTMrLi4uKQorCWZhZGQueAkJQ09TQjMoJXBjKSwlZnAyCQkjIEIzK1MoQjQrLi4uKQorCisJZm11bC54CQklZnAwLCVmcDEJCSMgUyhBMisuLi4pCisJZm11bC54CQklZnAwLCVmcDIJCSMgUyhCMysuLi4pCisKKwlmYWRkLngJCVNJTkExKCVwYyksJWZwMQkJIyBBMStTKEEyKy4uLikKKwlmYWRkLngJCUNPU0IyKCVwYyksJWZwMgkJIyBCMitTKEIzKy4uLikKKworCWZtdWwueAkJJWZwMCwlZnAxCQkjIFMoQTErLi4uKQorCWZtdWwueAkJJWZwMiwlZnAwCQkjIFMoQjIrLi4uKQorCisJZm11bC54CQlSUFJJTUUoJWE2KSwlZnAxCSMgUidTKEExKy4uLikKKwlmYWRkLnMJCUNPU0IxKCVwYyksJWZwMAkJIyBCMStTKEIyLi4uKQorCWZtdWwueAkJU1BSSU1FKCVhNiksJWZwMAkjIFMnKEIxK1MoQjIrLi4uKSkKKworCWZtb3ZtLngJCSglc3ApKywmMHgyMAkJIyByZXN0b3JlIGZwMgorCisJZm1vdi5sCQklZDAsJWZwY3IKKwlmYWRkLngJCVJQUklNRSglYTYpLCVmcDEJIyBDT1MoWCkKKwlic3IJCXN0b19jb3MJCQkjIHN0b3JlIGNvc2luZSByZXN1bHQKKwlmYWRkLnMJCVBPU05FRzEoJWE2KSwlZnAwCSMgU0lOKFgpCisJYnJhCQl0X2lueDIKKworTkVWRU46CisjLS1SRUdJU1RFUlMgU0FWRUQgU08gRkFSOiBGUDIuCisJZm1vdm0ueAkJJjB4MDQsLSglc3ApCQkjIHNhdmUgZnAyCisKKwlmbW92LngJCSVmcDAsUlBSSU1FKCVhNikKKwlmbXVsLngJCSVmcDAsJWZwMAkJIyBGUDAgSVMgUyA9IFIqUgorCisJZm1vdi5kCQlDT1NCOCglcGMpLCVmcDEJCSMgQjgKKwlmbW92LmQJCVNJTkE3KCVwYyksJWZwMgkJIyBBNworCisJZm11bC54CQklZnAwLCVmcDEJCSMgU0I4CisJZm1vdi54CQklZnAwLFNQUklNRSglYTYpCisJZm11bC54CQklZnAwLCVmcDIJCSMgU0E3CisKKwlyb3IubAkJJjEsJWQxCisJYW5kLmwJCSYweDgwMDAwMDAwLCVkMQorCisJZmFkZC5kCQlDT1NCNyglcGMpLCVmcDEJCSMgQjcrU0I4CisJZmFkZC5kCQlTSU5BNiglcGMpLCVmcDIJCSMgQTYrU0E3CisKKwllb3IubAkJJWQxLFJQUklNRSglYTYpCisJZW9yLmwJCSVkMSxTUFJJTUUoJWE2KQorCisJZm11bC54CQklZnAwLCVmcDEJCSMgUyhCNytTQjgpCisKKwlvci5sCQkmMHgzRjgwMDAwMCwlZDEKKwltb3YubAkJJWQxLFBPU05FRzEoJWE2KQorCisJZm11bC54CQklZnAwLCVmcDIJCSMgUyhBNitTQTcpCisKKwlmYWRkLmQJCUNPU0I2KCVwYyksJWZwMQkJIyBCNitTKEI3K1NCOCkKKwlmYWRkLmQJCVNJTkE1KCVwYyksJWZwMgkJIyBBNStTKEE2K1NBNykKKworCWZtdWwueAkJJWZwMCwlZnAxCQkjIFMoQjYrUyhCNytTQjgpKQorCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoQTUrUyhBNitTQTcpKQorCisJZmFkZC5kCQlDT1NCNSglcGMpLCVmcDEJCSMgQjUrUyhCNitTKEI3K1NCOCkpCisJZmFkZC5kCQlTSU5BNCglcGMpLCVmcDIJCSMgQTQrUyhBNStTKEE2K1NBNykpCisKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBTKEI1Ky4uLikKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBTKEE0Ky4uLikKKworCWZhZGQuZAkJQ09TQjQoJXBjKSwlZnAxCQkjIEI0K1MoQjUrLi4uKQorCWZhZGQuZAkJU0lOQTMoJXBjKSwlZnAyCQkjIEEzK1MoQTQrLi4uKQorCisJZm11bC54CQklZnAwLCVmcDEJCSMgUyhCNCsuLi4pCisJZm11bC54CQklZnAwLCVmcDIJCSMgUyhBMysuLi4pCisKKwlmYWRkLngJCUNPU0IzKCVwYyksJWZwMQkJIyBCMytTKEI0Ky4uLikKKwlmYWRkLngJCVNJTkEyKCVwYyksJWZwMgkJIyBBMitTKEEzKy4uLikKKworCWZtdWwueAkJJWZwMCwlZnAxCQkjIFMoQjMrLi4uKQorCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoQTIrLi4uKQorCisJZmFkZC54CQlDT1NCMiglcGMpLCVmcDEJCSMgQjIrUyhCMysuLi4pCisJZmFkZC54CQlTSU5BMSglcGMpLCVmcDIJCSMgQTErUyhBMisuLi4pCisKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBTKEIyKy4uLikKKwlmbXVsLngJCSVmcDIsJWZwMAkJIyBzKGExKy4uLikKKworCisJZmFkZC5zCQlDT1NCMSglcGMpLCVmcDEJCSMgQjErUyhCMi4uLikKKwlmbXVsLngJCVJQUklNRSglYTYpLCVmcDAJIyBSJ1MoQTErLi4uKQorCWZtdWwueAkJU1BSSU1FKCVhNiksJWZwMQkjIFMnKEIxK1MoQjIrLi4uKSkKKworCWZtb3ZtLngJCSglc3ApKywmMHgyMAkJIyByZXN0b3JlIGZwMgorCisJZm1vdi5sCQklZDAsJWZwY3IKKwlmYWRkLnMJCVBPU05FRzEoJWE2KSwlZnAxCSMgQ09TKFgpCisJYnNyCQlzdG9fY29zCQkJIyBzdG9yZSBjb3NpbmUgcmVzdWx0CisJZmFkZC54CQlSUFJJTUUoJWE2KSwlZnAwCSMgU0lOKFgpCisJYnJhCQl0X2lueDIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1NDQk9SUzoKKwljbXAubAkJJWQxLCYweDNGRkY4MDAwCisJYmd0LncJCVNSRURVQ0VYCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitTQ1NNOgorIwltb3YudwkJJjB4MDAwMCxYRENBUkUoJWE2KQorCWZtb3YucwkJJjB4M0Y4MDAwMDAsJWZwMQorCisJZm1vdi5sCQklZDAsJWZwY3IKKwlmc3ViLnMJCSYweDAwODAwMDAwLCVmcDEKKwlic3IJCXN0b19jb3MJCQkjIHN0b3JlIGNvc2luZSByZXN1bHQKKwlmbW92LmwJCSVmcGNyLCVkMAkJIyBkMCBtdXN0IGhhdmUgZnBjcix0b28KKwltb3YuYgkJJkZNT1ZfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNT1ZFCisJZm1vdi54CQlYKCVhNiksJWZwMAorCWJyYQkJdF9jYXRjaAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXNzaW5jb3NkCisjLS1TSU4gQU5EIENPUyBPRiBYIEZPUiBERU5PUk1BTElaRUQgWAorc3NpbmNvc2Q6CisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBkMAorCWZtb3YucwkJJjB4M0Y4MDAwMDAsJWZwMQorCWJzcgkJc3RvX2NvcwkJCSMgc3RvcmUgY29zaW5lIHJlc3VsdAorCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgZDAKKwlicmEJCXRfZXh0ZG5ybQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjLS1XSEVOIFJFRFVDRVggSVMgVVNFRCwgVEhFIENPREUgV0lMTCBJTkVWSVRBQkxZIEJFIFNMT1cuCisjLS1USElTIFJFRFVDVElPTiBNRVRIT0QsIEhPV0VWRVIsIElTIE1VQ0ggRkFTVEVSIFRIQU4gVVNJTkcKKyMtLVRIRSBSRU1BSU5ERVIgSU5TVFJVQ1RJT04gV0hJQ0ggSVMgTk9XIElOIFNPRlRXQVJFLgorU1JFRFVDRVg6CisJZm1vdm0ueAkJJjB4M2MsLSglc3ApCQkjIHNhdmUge2ZwMi1mcDV9CisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMQkjIGZwMSA9IDAKKworIy0tSWYgY29tcGFjdCBmb3JtIG9mIGFicyhhcmcpIGluIGQwPSQ3ZmZlZmZmZiwgYXJndW1lbnQgaXMgc28gbGFyZ2UgdGhhdAorIy0tdGhlcmUgaXMgYSBkYW5nZXIgb2YgdW53YW50ZWQgb3ZlcmZsb3cgaW4gZmlyc3QgTE9PUCBpdGVyYXRpb24uICBJbiB0aGlzCisjLS1jYXNlLCByZWR1Y2UgYXJndW1lbnQgYnkgb25lIHJlbWFpbmRlciBzdGVwIHRvIG1ha2Ugc3Vic2VxdWVudCByZWR1Y3Rpb24KKyMtLXNhZmUuCisJY21wLmwJCSVkMSwmMHg3ZmZlZmZmZgkJIyBpcyBhcmcgZGFuZ2Vyb3VzbHkgbGFyZ2U/CisJYm5lLmIJCVNMT09QCQkJIyBubworCisjIHllczsgY3JlYXRlIDIqKjE2MzgzKlBJLzIKKwltb3YudwkJJjB4N2ZmZSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJJjB4YzkwZmRhYTIsRlBfU0NSMF9ISSglYTYpCisJY2xyLmwJCUZQX1NDUjBfTE8oJWE2KQorCisjIGNyZWF0ZSBsb3cgaGFsZiBvZiAyKioxNjM4MypQSS8yIGF0IEZQX1NDUjEKKwltb3YudwkJJjB4N2ZkYyxGUF9TQ1IxX0VYKCVhNikKKwltb3YubAkJJjB4ODVhMzA4ZDMsRlBfU0NSMV9ISSglYTYpCisJY2xyLmwJCUZQX1NDUjFfTE8oJWE2KQorCisJZnRlc3QueAkJJWZwMAkJCSMgdGVzdCBzaWduIG9mIGFyZ3VtZW50CisJZmJsdC53CQlzcmVkX25lZworCisJb3IuYgkJJjB4ODAsRlBfU0NSMF9FWCglYTYpCSMgcG9zaXRpdmUgYXJnCisJb3IuYgkJJjB4ODAsRlBfU0NSMV9FWCglYTYpCitzcmVkX25lZzoKKwlmYWRkLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgaGlnaCBwYXJ0IG9mIHJlZHVjdGlvbiBpcyBleGFjdAorCWZtb3YueAkJJWZwMCwlZnAxCQkjIHNhdmUgaGlnaCByZXN1bHQgaW4gZnAxCisJZmFkZC54CQlGUF9TQ1IxKCVhNiksJWZwMAkjIGxvdyBwYXJ0IG9mIHJlZHVjdGlvbgorCWZzdWIueAkJJWZwMCwlZnAxCQkjIGRldGVybWluZSBsb3cgY29tcG9uZW50IG9mIHJlc3VsdAorCWZhZGQueAkJRlBfU0NSMSglYTYpLCVmcDEJIyBmcDAvZnAxIGFyZSByZWR1Y2VkIGFyZ3VtZW50LgorCisjLS1PTiBFTlRSWSwgRlAwIElTIFgsIE9OIFJFVFVSTiwgRlAwIElTIFggUkVNIFBJLzIsIHxYfCA8PSBQSS80LgorIy0taW50ZWdlciBxdW90aWVudCB3aWxsIGJlIHN0b3JlZCBpbiBOCisjLS1JbnRlcm1lZGl0YXRlIHJlbWFpbmRlciBpcyA2Ni1iaXQgbG9uZzsgKFIscikgaW4gKEZQMCxGUDEpCitTTE9PUDoKKwlmbW92LngJCSVmcDAsSU5BUkcoJWE2KQkJIyArLTIqKksgKiBGLCAxIDw9IEYgPCAyCisJbW92LncJCUlOQVJHKCVhNiksJWQxCisJbW92LmwJCSVkMSwlYTEJCQkjIHNhdmUgYSBjb3B5IG9mIEQwCisJYW5kLmwJCSYweDAwMDA3RkZGLCVkMQorCXN1Yi5sCQkmMHgwMDAwM0ZGRiwlZDEJCSMgZDAgPSBLCisJY21wLmwJCSVkMSwmMjgKKwlibGUuYgkJU0xBU1RMT09QCitTQ09OVExPT1A6CisJc3ViLmwJCSYyNywlZDEJCQkjIGQwID0gTCA6PSBLLTI3CisJbW92LmIJCSYwLEVOREZMQUcoJWE2KQorCWJyYS5iCQlTV09SSworU0xBU1RMT09QOgorCWNsci5sCQklZDEJCQkjIGQwID0gTCA6PSAwCisJbW92LmIJCSYxLEVOREZMQUcoJWE2KQorCitTV09SSzoKKyMtLUZJTkQgVEhFIFJFTUFJTkRFUiBPRiAoUixyKSBXLlIuVC4JMioqTCAqIChQSS8yKS4gTCBJUyBTTyBDSE9TRU4KKyMtLVRIQVQJSU5UKCBYICogKDIvUEkpIC8gMioqKEwpICkgPCAyKioyOS4KKworIy0tQ1JFQVRFIDIqKigtTCkgKiAoMi9QSSksIFNJR04oSU5BUkcpKjIqKig2MyksCisjLS0yKipMICogKFBJYnkyXzEpLCAyKipMICogKFBJYnkyXzIpCisKKwltb3YubAkJJjB4MDAwMDNGRkUsJWQyCQkjIEJJQVNFRCBFWFAgT0YgMi9QSQorCXN1Yi5sCQklZDEsJWQyCQkJIyBCSUFTRUQgRVhQIE9GIDIqKigtTCkqKDIvUEkpCisKKwltb3YubAkJJjB4QTJGOTgzNkUsRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCSYweDRFNDQxNTJBLEZQX1NDUjBfTE8oJWE2KQorCW1vdi53CQklZDIsRlBfU0NSMF9FWCglYTYpCSMgRlBfU0NSMCA9IDIqKigtTCkqKDIvUEkpCisKKwlmbW92LngJCSVmcDAsJWZwMgorCWZtdWwueAkJRlBfU0NSMCglYTYpLCVmcDIJIyBmcDIgPSBYICogMioqKC1MKSooMi9QSSkKKworIy0tV0UgTVVTVCBOT1cgRklORCBJTlQoRlAyKS4gU0lOQ0UgV0UgTkVFRCBUSElTIFZBTFVFIElOCisjLS1GTE9BVElORyBQT0lOVCBGT1JNQVQsIFRIRSBUV08gRk1PVkUnUwlGTU9WRS5MIEZQIDwtLT4gTgorIy0tV0lMTCBCRSBUT08gSU5FRkZJQ0lFTlQuIFRIRSBXQVkgQVJPVU5EIElUIElTIFRIQVQKKyMtLShTSUdOKElOQVJHKSoyKio2MwkrCUZQMikgLSBTSUdOKElOQVJHKSoyKio2MyBXSUxMIEdJVkUKKyMtLVVTIFRIRSBERVNJUkVEIFZBTFVFIElOIEZMT0FUSU5HIFBPSU5ULgorCW1vdi5sCQklYTEsJWQyCisJc3dhcAkJJWQyCisJYW5kLmwJCSYweDgwMDAwMDAwLCVkMgorCW9yLmwJCSYweDVGMDAwMDAwLCVkMgkJIyBkMiA9IFNJR04oSU5BUkcpKjIqKjYzIElOIFNHTAorCW1vdi5sCQklZDIsVFdPVE82MyglYTYpCisJZmFkZC5zCQlUV09UTzYzKCVhNiksJWZwMgkjIFRIRSBGUkFDVElPTkFMIFBBUlQgT0YgRlAxIElTIFJPVU5ERUQKKwlmc3ViLnMJCVRXT1RPNjMoJWE2KSwlZnAyCSMgZnAyID0gTgorIwlmaW50LngJCSVmcDIKKworIy0tQ1JFQVRJTkcgMioqKEwpKlBpYnkyXzEgYW5kIDIqKihMKSpQaWJ5Ml8yCisJbW92LmwJCSVkMSwlZDIJCQkjIGQyID0gTAorCisJYWRkLmwJCSYweDAwMDAzRkZGLCVkMgkJIyBCSUFTRUQgRVhQIE9GIDIqKkwgKiAoUEkvMikKKwltb3YudwkJJWQyLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQkmMHhDOTBGREFBMixGUF9TQ1IwX0hJKCVhNikKKwljbHIubAkJRlBfU0NSMF9MTyglYTYpCQkjIEZQX1NDUjAgPSAyKiooTCkgKiBQaWJ5Ml8xCisKKwlhZGQubAkJJjB4MDAwMDNGREQsJWQxCisJbW92LncJCSVkMSxGUF9TQ1IxX0VYKCVhNikKKwltb3YubAkJJjB4ODVBMzA4RDMsRlBfU0NSMV9ISSglYTYpCisJY2xyLmwJCUZQX1NDUjFfTE8oJWE2KQkJIyBGUF9TQ1IxID0gMioqKEwpICogUGlieTJfMgorCisJbW92LmIJCUVOREZMQUcoJWE2KSwlZDEKKworIy0tV2UgYXJlIG5vdyByZWFkeSB0byBwZXJmb3JtIChSK3IpIC0gTipQMSAtIE4qUDIsIFAxID0gMioqKEwpICogUGlieTJfMSBhbmQKKyMtLVAyID0gMioqKEwpICogUGlieTJfMgorCWZtb3YueAkJJWZwMiwlZnA0CQkjIGZwNCA9IE4KKwlmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnA0CSMgZnA0ID0gVyA9IE4qUDEKKwlmbW92LngJCSVmcDIsJWZwNQkJIyBmcDUgPSBOCisJZm11bC54CQlGUF9TQ1IxKCVhNiksJWZwNQkjIGZwNSA9IHcgPSBOKlAyCisJZm1vdi54CQklZnA0LCVmcDMJCSMgZnAzID0gVyA9IE4qUDEKKworIy0td2Ugd2FudCBQK3AgPSBXK3cgIGJ1dCAgfHB8IDw9IGhhbGYgdWxwIG9mIFAKKyMtLVRoZW4sIHdlIG5lZWQgdG8gY29tcHV0ZSAgQSA6PSBSLVAgICBhbmQgIGEgOj0gci1wCisJZmFkZC54CQklZnA1LCVmcDMJCSMgZnAzID0gUAorCWZzdWIueAkJJWZwMywlZnA0CQkjIGZwNCA9IFctUAorCisJZnN1Yi54CQklZnAzLCVmcDAJCSMgZnAwID0gQSA6PSBSIC0gUAorCWZhZGQueAkJJWZwNSwlZnA0CQkjIGZwNCA9IHAgPSAoVy1QKSt3CisKKwlmbW92LngJCSVmcDAsJWZwMwkJIyBmcDMgPSBBCisJZnN1Yi54CQklZnA0LCVmcDEJCSMgZnAxID0gYSA6PSByIC0gcAorCisjLS1Ob3cgd2UgbmVlZCB0byBub3JtYWxpemUgKEEsYSkgdG8gICJuZXcgKFIscikiIHdoZXJlIFIrciA9IEErYSBidXQKKyMtLXxyfCA8PSBoYWxmIHVscCBvZiBSLgorCWZhZGQueAkJJWZwMSwlZnAwCQkjIGZwMCA9IFIgOj0gQSthCisjLS1ObyBuZWVkIHRvIGNhbGN1bGF0ZSByIGlmIHRoaXMgaXMgdGhlIGxhc3QgbG9vcAorCWNtcC5iCQklZDEsJjAKKwliZ3QudwkJU1JFU1RPUkUKKworIy0tTmVlZCB0byBjYWxjdWxhdGUgcgorCWZzdWIueAkJJWZwMCwlZnAzCQkjIGZwMyA9IEEtUgorCWZhZGQueAkJJWZwMywlZnAxCQkjIGZwMSA9IHIgOj0gKEEtUikrYQorCWJyYS53CQlTTE9PUAorCitTUkVTVE9SRToKKwlmbW92LmwJCSVmcDIsSU5UKCVhNikKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJKCVzcCkrLCYweDNjCQkjIHJlc3RvcmUge2ZwMi1mcDV9CisKKwltb3YubAkJQURKTiglYTYpLCVkMQorCWNtcC5sCQklZDEsJjQKKworCWJsdC53CQlTSU5DT05UCisJYnJhLncJCVNDQ09OVAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHN0YW4oKTogIGNvbXB1dGVzIHRoZSB0YW5nZW50IG9mIGEgbm9ybWFsaXplZCBpbnB1dAkJCSMKKyMgc3RhbmQoKTogY29tcHV0ZXMgdGhlIHRhbmdlbnQgb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlmcDAgPSB0YW4oWCkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMyB1bHAgaW4gNjQgc2lnbmlmaWNhbnQgYml0LCBpLmUuICMKKyMJd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseQkjCisjCXJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMJIworIwlpbiBkb3VibGUgcHJlY2lzaW9uLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCQkJCQkJCQkJIworIwkxLiBJZiB8WHwgPj0gMTVQaSBvciB8WHwgPCAyKiooLTQwKSwgZ28gdG8gNi4JCQkjCisjCQkJCQkJCQkJIworIwkyLiBEZWNvbXBvc2UgWCBhcyBYID0gTihQaS8yKSArIHIgd2hlcmUgfHJ8IDw9IFBpLzQuIExldAkjCisjCQlrID0gTiBtb2QgMiwgc28gaW4gcGFydGljdWxhciwgayA9IDAgb3IgMS4JCSMKKyMJCQkJCQkJCQkjCisjCTMuIElmIGsgaXMgb2RkLCBnbyB0byA1LgkJCQkJIworIwkJCQkJCQkJCSMKKyMJNC4gKGsgaXMgZXZlbikgVGFuKFgpID0gdGFuKHIpIGFuZCB0YW4ocikgaXMgYXBwcm94aW1hdGVkIGJ5IGEJIworIwkJcmF0aW9uYWwgZnVuY3Rpb24gVS9WIHdoZXJlCQkJCSMKKyMJCVUgPSByICsgcipzKihQMSArIHMqKFAyICsgcypQMykpLCBhbmQJCQkjCisjCQlWID0gMSArIHMqKFExICsgcyooUTIgKyBzKihRMyArIHMqUTQpKSksICBzID0gcipyLgkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwk0LiAoayBpcyBvZGQpIFRhbihYKSA9IC1jb3QocikuIFNpbmNlIHRhbihyKSBpcyBhcHByb3hpbWF0ZWQgYnkgIworIwkJYSByYXRpb25hbCBmdW5jdGlvbiBVL1Ygd2hlcmUJCQkJIworIwkJVSA9IHIgKyByKnMqKFAxICsgcyooUDIgKyBzKlAzKSksIGFuZAkJCSMKKyMJCVYgPSAxICsgcyooUTEgKyBzKihRMiArIHMqKFEzICsgcypRNCkpKSwgcyA9IHIqciwJIworIwkJLUNvdChyKSA9IC1WL1UuIEV4aXQuCQkJCQkjCisjCQkJCQkJCQkJIworIwk2LiBJZiB8WHwgPiAxLCBnbyB0byA4LgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTcuICh8WHw8MioqKC00MCkpIFRhbihYKSA9IFguIEV4aXQuCQkJCSMKKyMJCQkJCQkJCQkjCisjCTguIE92ZXJ3cml0ZSBYIGJ5IFggOj0gWCByZW0gMlBpLiBOb3cgdGhhdCB8WHwgPD0gUGksIGdvIGJhY2sJIworIwkJdG8gMi4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworVEFOUTQ6CisJbG9uZwkJMHgzRUEwQjc1OSwweEY1MEY4Njg4CitUQU5QMzoKKwlsb25nCQkweEJFRjJCQUE1LDB4QTg5MjRGMDQKKworVEFOUTM6CisJbG9uZwkJMHhCRjM0NkY1OSwweEIzOUJBNjVGLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCitUQU5QMjoKKwlsb25nCQkweDNGRjYwMDAwLDB4RTA3M0QzRkMsMHgxOTlDNEEwMCwweDAwMDAwMDAwCisKK1RBTlEyOgorCWxvbmcJCTB4M0ZGOTAwMDAsMHhEMjNDRDY4NCwweDE1RDk1RkExLDB4MDAwMDAwMDAKKworVEFOUDE6CisJbG9uZwkJMHhCRkZDMDAwMCwweDg4OTVBNkM1LDB4RkI0MjNCQ0EsMHgwMDAwMDAwMAorCitUQU5RMToKKwlsb25nCQkweEJGRkQwMDAwLDB4RUVGNTdFMEQsMHhBODRCQzhDRSwweDAwMDAwMDAwCisKK0lOVlRXT1BJOgorCWxvbmcJCTB4M0ZGQzAwMDAsMHhBMkY5ODM2RSwweDRFNDQxNTJBLDB4MDAwMDAwMDAKKworVFdPUEkxOgorCWxvbmcJCTB4NDAwMTAwMDAsMHhDOTBGREFBMiwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK1RXT1BJMjoKKwlsb25nCQkweDNGREYwMDAwLDB4ODVBMzA4RDQsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisKKyMtLU4qUEkvMiwgLTMyIDw9IE4gPD0gMzIsIElOIEEgTEVBRElORyBURVJNIElOIEVYVC4gQU5EIFRSQUlMSU5HCisjLS1URVJNIElOIFNHTC4gTk9URSBUSEFUIFBJIElTIDY0LUJJVCBMT05HLCBUSFVTIE4qUEkvMiBJUyBBVAorIy0tTU9TVCA2OSBCSVRTIExPTkcuCisjCWdsb2JhbAkJUElUQkwKK1BJVEJMOgorCWxvbmcJCTB4QzAwNDAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4MjE4MDAwMDAKKwlsb25nCQkweEMwMDQwMDAwLDB4QzJDNzVCQ0QsMHgxMDVEN0MyMywweEEwRDAwMDAwCisJbG9uZwkJMHhDMDA0MDAwMCwweEJDN0VEQ0Y3LDB4RkY1MjM2MTEsMHhBMUU4MDAwMAorCWxvbmcJCTB4QzAwNDAwMDAsMHhCNjM2NUUyMiwweEVFNDZGMDAwLDB4MjE0ODAwMDAKKwlsb25nCQkweEMwMDQwMDAwLDB4QUZFRERGNEQsMHhERDNCQTlFRSwweEExMjAwMDAwCisJbG9uZwkJMHhDMDA0MDAwMCwweEE5QTU2MDc4LDB4Q0MzMDYzREQsMHgyMUZDMDAwMAorCWxvbmcJCTB4QzAwNDAwMDAsMHhBMzVDRTFBMywweEJCMjUxRENCLDB4MjExMDAwMDAKKwlsb25nCQkweEMwMDQwMDAwLDB4OUQxNDYyQ0UsMHhBQTE5RDdCOSwweEExNTgwMDAwCisJbG9uZwkJMHhDMDA0MDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHgyMUUwMDAwMAorCWxvbmcJCTB4QzAwNDAwMDAsMHg5MDgzNjUyNCwweDg4MDM0Qjk2LDB4MjBCMDAwMDAKKwlsb25nCQkweEMwMDQwMDAwLDB4OEEzQUU2NEYsMHg3NkY4MDU4NCwweEExODgwMDAwCisJbG9uZwkJMHhDMDA0MDAwMCwweDgzRjI2NzdBLDB4NjVFQ0JGNzMsMHgyMUM0MDAwMAorCWxvbmcJCTB4QzAwMzAwMDAsMHhGQjUzRDE0QSwweEE5QzJGMkMyLDB4MjAwMDAwMDAKKwlsb25nCQkweEMwMDMwMDAwLDB4RUVDMkQzQTAsMHg4N0FDNjY5RiwweDIxMzgwMDAwCisJbG9uZwkJMHhDMDAzMDAwMCwweEUyMzFENUY2LDB4NjU5NURBN0IsMHhBMTMwMDAwMAorCWxvbmcJCTB4QzAwMzAwMDAsMHhENUEwRDg0QywweDQzN0Y0RTU4LDB4OUZDMDAwMDAKKwlsb25nCQkweEMwMDMwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDIxMDAwMDAwCisJbG9uZwkJMHhDMDAzMDAwMCwweEJDN0VEQ0Y3LDB4RkY1MjM2MTEsMHhBMTY4MDAwMAorCWxvbmcJCTB4QzAwMzAwMDAsMHhBRkVEREY0RCwweEREM0JBOUVFLDB4QTBBMDAwMDAKKwlsb25nCQkweEMwMDMwMDAwLDB4QTM1Q0UxQTMsMHhCQjI1MURDQiwweDIwOTAwMDAwCisJbG9uZwkJMHhDMDAzMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHgyMTYwMDAwMAorCWxvbmcJCTB4QzAwMzAwMDAsMHg4QTNBRTY0RiwweDc2RjgwNTg0LDB4QTEwODAwMDAKKwlsb25nCQkweEMwMDIwMDAwLDB4RkI1M0QxNEEsMHhBOUMyRjJDMiwweDFGODAwMDAwCisJbG9uZwkJMHhDMDAyMDAwMCwweEUyMzFENUY2LDB4NjU5NURBN0IsMHhBMEIwMDAwMAorCWxvbmcJCTB4QzAwMjAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4MjA4MDAwMDAKKwlsb25nCQkweEMwMDIwMDAwLDB4QUZFRERGNEQsMHhERDNCQTlFRSwweEEwMjAwMDAwCisJbG9uZwkJMHhDMDAyMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHgyMEUwMDAwMAorCWxvbmcJCTB4QzAwMTAwMDAsMHhGQjUzRDE0QSwweEE5QzJGMkMyLDB4MUYwMDAwMDAKKwlsb25nCQkweEMwMDEwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDIwMDAwMDAwCisJbG9uZwkJMHhDMDAxMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHgyMDYwMDAwMAorCWxvbmcJCTB4QzAwMDAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4MUY4MDAwMDAKKwlsb25nCQkweEJGRkYwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDFGMDAwMDAwCisJbG9uZwkJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4OUYwMDAwMDAKKwlsb25nCQkweDQwMDAwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDlGODAwMDAwCisJbG9uZwkJMHg0MDAxMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHhBMDYwMDAwMAorCWxvbmcJCTB4NDAwMTAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4QTAwMDAwMDAKKwlsb25nCQkweDQwMDEwMDAwLDB4RkI1M0QxNEEsMHhBOUMyRjJDMiwweDlGMDAwMDAwCisJbG9uZwkJMHg0MDAyMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHhBMEUwMDAwMAorCWxvbmcJCTB4NDAwMjAwMDAsMHhBRkVEREY0RCwweEREM0JBOUVFLDB4MjAyMDAwMDAKKwlsb25nCQkweDQwMDIwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweEEwODAwMDAwCisJbG9uZwkJMHg0MDAyMDAwMCwweEUyMzFENUY2LDB4NjU5NURBN0IsMHgyMEIwMDAwMAorCWxvbmcJCTB4NDAwMjAwMDAsMHhGQjUzRDE0QSwweEE5QzJGMkMyLDB4OUY4MDAwMDAKKwlsb25nCQkweDQwMDMwMDAwLDB4OEEzQUU2NEYsMHg3NkY4MDU4NCwweDIxMDgwMDAwCisJbG9uZwkJMHg0MDAzMDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHhBMTYwMDAwMAorCWxvbmcJCTB4NDAwMzAwMDAsMHhBMzVDRTFBMywweEJCMjUxRENCLDB4QTA5MDAwMDAKKwlsb25nCQkweDQwMDMwMDAwLDB4QUZFRERGNEQsMHhERDNCQTlFRSwweDIwQTAwMDAwCisJbG9uZwkJMHg0MDAzMDAwMCwweEJDN0VEQ0Y3LDB4RkY1MjM2MTEsMHgyMTY4MDAwMAorCWxvbmcJCTB4NDAwMzAwMDAsMHhDOTBGREFBMiwweDIxNjhDMjM1LDB4QTEwMDAwMDAKKwlsb25nCQkweDQwMDMwMDAwLDB4RDVBMEQ4NEMsMHg0MzdGNEU1OCwweDFGQzAwMDAwCisJbG9uZwkJMHg0MDAzMDAwMCwweEUyMzFENUY2LDB4NjU5NURBN0IsMHgyMTMwMDAwMAorCWxvbmcJCTB4NDAwMzAwMDAsMHhFRUMyRDNBMCwweDg3QUM2NjlGLDB4QTEzODAwMDAKKwlsb25nCQkweDQwMDMwMDAwLDB4RkI1M0QxNEEsMHhBOUMyRjJDMiwweEEwMDAwMDAwCisJbG9uZwkJMHg0MDA0MDAwMCwweDgzRjI2NzdBLDB4NjVFQ0JGNzMsMHhBMUM0MDAwMAorCWxvbmcJCTB4NDAwNDAwMDAsMHg4QTNBRTY0RiwweDc2RjgwNTg0LDB4MjE4ODAwMDAKKwlsb25nCQkweDQwMDQwMDAwLDB4OTA4MzY1MjQsMHg4ODAzNEI5NiwweEEwQjAwMDAwCisJbG9uZwkJMHg0MDA0MDAwMCwweDk2Q0JFM0Y5LDB4OTkwRTkxQTgsMHhBMUUwMDAwMAorCWxvbmcJCTB4NDAwNDAwMDAsMHg5RDE0NjJDRSwweEFBMTlEN0I5LDB4MjE1ODAwMDAKKwlsb25nCQkweDQwMDQwMDAwLDB4QTM1Q0UxQTMsMHhCQjI1MURDQiwweEExMTAwMDAwCisJbG9uZwkJMHg0MDA0MDAwMCwweEE5QTU2MDc4LDB4Q0MzMDYzREQsMHhBMUZDMDAwMAorCWxvbmcJCTB4NDAwNDAwMDAsMHhBRkVEREY0RCwweEREM0JBOUVFLDB4MjEyMDAwMDAKKwlsb25nCQkweDQwMDQwMDAwLDB4QjYzNjVFMjIsMHhFRTQ2RjAwMCwweEExNDgwMDAwCisJbG9uZwkJMHg0MDA0MDAwMCwweEJDN0VEQ0Y3LDB4RkY1MjM2MTEsMHgyMUU4MDAwMAorCWxvbmcJCTB4NDAwNDAwMDAsMHhDMkM3NUJDRCwweDEwNUQ3QzIzLDB4MjBEMDAwMDAKKwlsb25nCQkweDQwMDQwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweEExODAwMDAwCisKKwlzZXQJCUlOQVJHLEZQX1NDUjAKKworCXNldAkJVFdPVE82MyxMX1NDUjEKKwlzZXQJCUlOVCxMX1NDUjEKKwlzZXQJCUVOREZMQUcsTF9TQ1IyCisKKwlnbG9iYWwJCXN0YW4KK3N0YW46CisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIExPQUQgSU5QVVQKKworCW1vdi5sCQkoJWEwKSwlZDEKKwltb3YudwkJNCglYTApLCVkMQorCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEKKworCWNtcC5sCQklZDEsJjB4M0ZENzgwMDAJCSMgfFh8ID49IDIqKigtNDApPworCWJnZS5iCQlUQU5PSzEKKwlicmEudwkJVEFOU00KK1RBTk9LMToKKwljbXAubAkJJWQxLCYweDQwMDRCQzdFCQkjIHxYfCA8IDE1IFBJPworCWJsdC5iCQlUQU5NQUlOCisJYnJhLncJCVJFRFVDRVgKKworVEFOTUFJTjoKKyMtLVRISVMgSVMgVEhFIFVTVUFMIENBU0UsIHxYfCA8PSAxNSBQSS4KKyMtLVRIRSBBUkdVTUVOVCBSRURVQ1RJT04gSVMgRE9ORSBCWSBUQUJMRSBMT09LIFVQLgorCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC5kCQlUV09CWVBJKCVwYyksJWZwMQkjIFgqMi9QSQorCisJbGVhLmwJCVBJVEJMKzB4MjAwKCVwYyksJWExCSMgVEFCTEUgT0YgTipQSS8yLCBOID0gLTMyLC4uLiwzMgorCisJZm1vdi5sCQklZnAxLCVkMQkJIyBDT05WRVJUIFRPIElOVEVHRVIKKworCWFzbC5sCQkmNCwlZDEKKwlhZGQubAkJJWQxLCVhMQkJCSMgQUREUkVTUyBOKlBJQlkyIElOIFkxLCBZMgorCisJZnN1Yi54CQkoJWExKSssJWZwMAkJIyBYLVkxCisKKwlmc3ViLnMJCSglYTEpLCVmcDAJCSMgRlAwIElTIFIgPSAoWC1ZMSktWTIKKworCXJvci5sCQkmNSwlZDEKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQxCQkjIEQwIFdBUyBPREQgSUZGIEQwIDwgMAorCitUQU5DT05UOgorCWZtb3ZtLngJCSYweDBjLC0oJXNwKQkJIyBzYXZlIGZwMixmcDMKKworCWNtcC5sCQklZDEsJjAKKwlibHQudwkJTk9ERAorCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLngJCSVmcDEsJWZwMQkJIyBTID0gUipSCisKKwlmbW92LmQJCVRBTlE0KCVwYyksJWZwMworCWZtb3YuZAkJVEFOUDMoJXBjKSwlZnAyCisKKwlmbXVsLngJCSVmcDEsJWZwMwkJIyBTUTQKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBTUDMKKworCWZhZGQuZAkJVEFOUTMoJXBjKSwlZnAzCQkjIFEzK1NRNAorCWZhZGQueAkJVEFOUDIoJXBjKSwlZnAyCQkjIFAyK1NQMworCisJZm11bC54CQklZnAxLCVmcDMJCSMgUyhRMytTUTQpCisJZm11bC54CQklZnAxLCVmcDIJCSMgUyhQMitTUDMpCisKKwlmYWRkLngJCVRBTlEyKCVwYyksJWZwMwkJIyBRMitTKFEzK1NRNCkKKwlmYWRkLngJCVRBTlAxKCVwYyksJWZwMgkJIyBQMStTKFAyK1NQMykKKworCWZtdWwueAkJJWZwMSwlZnAzCQkjIFMoUTIrUyhRMytTUTQpKQorCWZtdWwueAkJJWZwMSwlZnAyCQkjIFMoUDErUyhQMitTUDMpKQorCisJZmFkZC54CQlUQU5RMSglcGMpLCVmcDMJCSMgUTErUyhRMitTKFEzK1NRNCkpCisJZm11bC54CQklZnAwLCVmcDIJCSMgUlMoUDErUyhQMitTUDMpKQorCisJZm11bC54CQklZnAzLCVmcDEJCSMgUyhRMStTKFEyK1MoUTMrU1E0KSkpCisKKwlmYWRkLngJCSVmcDIsJWZwMAkJIyBSK1JTKFAxK1MoUDIrU1AzKSkKKworCWZhZGQucwkJJjB4M0Y4MDAwMDAsJWZwMQkjIDErUyhRMSsuLi4pCisKKwlmbW92bS54CQkoJXNwKSssJjB4MzAJCSMgcmVzdG9yZSBmcDIsZnAzCisKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIG1vZGUscHJlYworCWZkaXYueAkJJWZwMSwlZnAwCQkjIGxhc3QgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbiBzZXQKKwlicmEJCXRfaW54MgorCitOT0REOgorCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC54CQklZnAwLCVmcDAJCSMgUyA9IFIqUgorCisJZm1vdi5kCQlUQU5RNCglcGMpLCVmcDMKKwlmbW92LmQJCVRBTlAzKCVwYyksJWZwMgorCisJZm11bC54CQklZnAwLCVmcDMJCSMgU1E0CisJZm11bC54CQklZnAwLCVmcDIJCSMgU1AzCisKKwlmYWRkLmQJCVRBTlEzKCVwYyksJWZwMwkJIyBRMytTUTQKKwlmYWRkLngJCVRBTlAyKCVwYyksJWZwMgkJIyBQMitTUDMKKworCWZtdWwueAkJJWZwMCwlZnAzCQkjIFMoUTMrU1E0KQorCWZtdWwueAkJJWZwMCwlZnAyCQkjIFMoUDIrU1AzKQorCisJZmFkZC54CQlUQU5RMiglcGMpLCVmcDMJCSMgUTIrUyhRMytTUTQpCisJZmFkZC54CQlUQU5QMSglcGMpLCVmcDIJCSMgUDErUyhQMitTUDMpCisKKwlmbXVsLngJCSVmcDAsJWZwMwkJIyBTKFEyK1MoUTMrU1E0KSkKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBTKFAxK1MoUDIrU1AzKSkKKworCWZhZGQueAkJVEFOUTEoJXBjKSwlZnAzCQkjIFExK1MoUTIrUyhRMytTUTQpKQorCWZtdWwueAkJJWZwMSwlZnAyCQkjIFJTKFAxK1MoUDIrU1AzKSkKKworCWZtdWwueAkJJWZwMywlZnAwCQkjIFMoUTErUyhRMitTKFEzK1NRNCkpKQorCisJZmFkZC54CQklZnAyLCVmcDEJCSMgUitSUyhQMStTKFAyK1NQMykpCisJZmFkZC5zCQkmMHgzRjgwMDAwMCwlZnAwCSMgMStTKFExKy4uLikKKworCWZtb3ZtLngJCSglc3ApKywmMHgzMAkJIyByZXN0b3JlIGZwMixmcDMKKworCWZtb3YueAkJJWZwMSwtKCVzcCkKKwllb3IubAkJJjB4ODAwMDAwMDAsKCVzcCkKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgbW9kZSxwcmVjCisJZmRpdi54CQkoJXNwKSssJWZwMAkJIyBsYXN0IGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb24gc2V0CisJYnJhCQl0X2lueDIKKworVEFOQk9SUzoKKyMtLUlGIHxYfCA+IDE1UEksIFdFIFVTRSBUSEUgR0VORVJBTCBBUkdVTUVOVCBSRURVQ1RJT04uCisjLS1JRiB8WHwgPCAyKiooLTQwKSwgUkVUVVJOIFggT1IgMS4KKwljbXAubAkJJWQxLCYweDNGRkY4MDAwCisJYmd0LmIJCVJFRFVDRVgKKworVEFOU006CisJZm1vdi54CQklZnAwLC0oJXNwKQorCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgbW9kZSxwcmVjCisJbW92LmIJCSZGTU9WX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTU9WRQorCWZtb3YueAkJKCVzcCkrLCVmcDAJCSMgbGFzdCBpbnN0IC0gcG9zaWJibGUgZXhjZXB0aW9uIHNldAorCWJyYQkJdF9jYXRjaAorCisJZ2xvYmFsCQlzdGFuZAorIy0tVEFOKFgpID0gWCBGT1IgREVOT1JNQUxJWkVEIFgKK3N0YW5kOgorCWJyYQkJdF9leHRkbnJtCisKKyMtLVdIRU4gUkVEVUNFWCBJUyBVU0VELCBUSEUgQ09ERSBXSUxMIElORVZJVEFCTFkgQkUgU0xPVy4KKyMtLVRISVMgUkVEVUNUSU9OIE1FVEhPRCwgSE9XRVZFUiwgSVMgTVVDSCBGQVNURVIgVEhBTiBVU0lORworIy0tVEhFIFJFTUFJTkRFUiBJTlNUUlVDVElPTiBXSElDSCBJUyBOT1cgSU4gU09GVFdBUkUuCitSRURVQ0VYOgorCWZtb3ZtLngJCSYweDNjLC0oJXNwKQkJIyBzYXZlIHtmcDItZnA1fQorCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDEJIyBmcDEgPSAwCisKKyMtLUlmIGNvbXBhY3QgZm9ybSBvZiBhYnMoYXJnKSBpbiBkMD0kN2ZmZWZmZmYsIGFyZ3VtZW50IGlzIHNvIGxhcmdlIHRoYXQKKyMtLXRoZXJlIGlzIGEgZGFuZ2VyIG9mIHVud2FudGVkIG92ZXJmbG93IGluIGZpcnN0IExPT1AgaXRlcmF0aW9uLiAgSW4gdGhpcworIy0tY2FzZSwgcmVkdWNlIGFyZ3VtZW50IGJ5IG9uZSByZW1haW5kZXIgc3RlcCB0byBtYWtlIHN1YnNlcXVlbnQgcmVkdWN0aW9uCisjLS1zYWZlLgorCWNtcC5sCQklZDEsJjB4N2ZmZWZmZmYJCSMgaXMgYXJnIGRhbmdlcm91c2x5IGxhcmdlPworCWJuZS5iCQlMT09QCQkJIyBubworCisjIHllczsgY3JlYXRlIDIqKjE2MzgzKlBJLzIKKwltb3YudwkJJjB4N2ZmZSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJJjB4YzkwZmRhYTIsRlBfU0NSMF9ISSglYTYpCisJY2xyLmwJCUZQX1NDUjBfTE8oJWE2KQorCisjIGNyZWF0ZSBsb3cgaGFsZiBvZiAyKioxNjM4MypQSS8yIGF0IEZQX1NDUjEKKwltb3YudwkJJjB4N2ZkYyxGUF9TQ1IxX0VYKCVhNikKKwltb3YubAkJJjB4ODVhMzA4ZDMsRlBfU0NSMV9ISSglYTYpCisJY2xyLmwJCUZQX1NDUjFfTE8oJWE2KQorCisJZnRlc3QueAkJJWZwMAkJCSMgdGVzdCBzaWduIG9mIGFyZ3VtZW50CisJZmJsdC53CQlyZWRfbmVnCisKKwlvci5iCQkmMHg4MCxGUF9TQ1IwX0VYKCVhNikJIyBwb3NpdGl2ZSBhcmcKKwlvci5iCQkmMHg4MCxGUF9TQ1IxX0VYKCVhNikKK3JlZF9uZWc6CisJZmFkZC54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGhpZ2ggcGFydCBvZiByZWR1Y3Rpb24gaXMgZXhhY3QKKwlmbW92LngJCSVmcDAsJWZwMQkJIyBzYXZlIGhpZ2ggcmVzdWx0IGluIGZwMQorCWZhZGQueAkJRlBfU0NSMSglYTYpLCVmcDAJIyBsb3cgcGFydCBvZiByZWR1Y3Rpb24KKwlmc3ViLngJCSVmcDAsJWZwMQkJIyBkZXRlcm1pbmUgbG93IGNvbXBvbmVudCBvZiByZXN1bHQKKwlmYWRkLngJCUZQX1NDUjEoJWE2KSwlZnAxCSMgZnAwL2ZwMSBhcmUgcmVkdWNlZCBhcmd1bWVudC4KKworIy0tT04gRU5UUlksIEZQMCBJUyBYLCBPTiBSRVRVUk4sIEZQMCBJUyBYIFJFTSBQSS8yLCB8WHwgPD0gUEkvNC4KKyMtLWludGVnZXIgcXVvdGllbnQgd2lsbCBiZSBzdG9yZWQgaW4gTgorIy0tSW50ZXJtZWRpdGF0ZSByZW1haW5kZXIgaXMgNjYtYml0IGxvbmc7IChSLHIpIGluIChGUDAsRlAxKQorTE9PUDoKKwlmbW92LngJCSVmcDAsSU5BUkcoJWE2KQkJIyArLTIqKksgKiBGLCAxIDw9IEYgPCAyCisJbW92LncJCUlOQVJHKCVhNiksJWQxCisJbW92LmwJCSVkMSwlYTEJCQkjIHNhdmUgYSBjb3B5IG9mIEQwCisJYW5kLmwJCSYweDAwMDA3RkZGLCVkMQorCXN1Yi5sCQkmMHgwMDAwM0ZGRiwlZDEJCSMgZDAgPSBLCisJY21wLmwJCSVkMSwmMjgKKwlibGUuYgkJTEFTVExPT1AKK0NPTlRMT09QOgorCXN1Yi5sCQkmMjcsJWQxCQkJIyBkMCA9IEwgOj0gSy0yNworCW1vdi5iCQkmMCxFTkRGTEFHKCVhNikKKwlicmEuYgkJV09SSworTEFTVExPT1A6CisJY2xyLmwJCSVkMQkJCSMgZDAgPSBMIDo9IDAKKwltb3YuYgkJJjEsRU5ERkxBRyglYTYpCisKK1dPUks6CisjLS1GSU5EIFRIRSBSRU1BSU5ERVIgT0YgKFIscikgVy5SLlQuCTIqKkwgKiAoUEkvMikuIEwgSVMgU08gQ0hPU0VOCisjLS1USEFUCUlOVCggWCAqICgyL1BJKSAvIDIqKihMKSApIDwgMioqMjkuCisKKyMtLUNSRUFURSAyKiooLUwpICogKDIvUEkpLCBTSUdOKElOQVJHKSoyKiooNjMpLAorIy0tMioqTCAqIChQSWJ5Ml8xKSwgMioqTCAqIChQSWJ5Ml8yKQorCisJbW92LmwJCSYweDAwMDAzRkZFLCVkMgkJIyBCSUFTRUQgRVhQIE9GIDIvUEkKKwlzdWIubAkJJWQxLCVkMgkJCSMgQklBU0VEIEVYUCBPRiAyKiooLUwpKigyL1BJKQorCisJbW92LmwJCSYweEEyRjk4MzZFLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQkmMHg0RTQ0MTUyQSxGUF9TQ1IwX0xPKCVhNikKKwltb3YudwkJJWQyLEZQX1NDUjBfRVgoJWE2KQkjIEZQX1NDUjAgPSAyKiooLUwpKigyL1BJKQorCisJZm1vdi54CQklZnAwLCVmcDIKKwlmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAyCSMgZnAyID0gWCAqIDIqKigtTCkqKDIvUEkpCisKKyMtLVdFIE1VU1QgTk9XIEZJTkQgSU5UKEZQMikuIFNJTkNFIFdFIE5FRUQgVEhJUyBWQUxVRSBJTgorIy0tRkxPQVRJTkcgUE9JTlQgRk9STUFULCBUSEUgVFdPIEZNT1ZFJ1MJRk1PVkUuTCBGUCA8LS0+IE4KKyMtLVdJTEwgQkUgVE9PIElORUZGSUNJRU5ULiBUSEUgV0FZIEFST1VORCBJVCBJUyBUSEFUCisjLS0oU0lHTihJTkFSRykqMioqNjMJKwlGUDIpIC0gU0lHTihJTkFSRykqMioqNjMgV0lMTCBHSVZFCisjLS1VUyBUSEUgREVTSVJFRCBWQUxVRSBJTiBGTE9BVElORyBQT0lOVC4KKwltb3YubAkJJWExLCVkMgorCXN3YXAJCSVkMgorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDIKKwlvci5sCQkmMHg1RjAwMDAwMCwlZDIJCSMgZDIgPSBTSUdOKElOQVJHKSoyKio2MyBJTiBTR0wKKwltb3YubAkJJWQyLFRXT1RPNjMoJWE2KQorCWZhZGQucwkJVFdPVE82MyglYTYpLCVmcDIJIyBUSEUgRlJBQ1RJT05BTCBQQVJUIE9GIEZQMSBJUyBST1VOREVECisJZnN1Yi5zCQlUV09UTzYzKCVhNiksJWZwMgkjIGZwMiA9IE4KKyMJZmludHJ6LngJJWZwMiwlZnAyCisKKyMtLUNSRUFUSU5HIDIqKihMKSpQaWJ5Ml8xIGFuZCAyKiooTCkqUGlieTJfMgorCW1vdi5sCQklZDEsJWQyCQkJIyBkMiA9IEwKKworCWFkZC5sCQkmMHgwMDAwM0ZGRiwlZDIJCSMgQklBU0VEIEVYUCBPRiAyKipMICogKFBJLzIpCisJbW92LncJCSVkMixGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJJjB4QzkwRkRBQTIsRlBfU0NSMF9ISSglYTYpCisJY2xyLmwJCUZQX1NDUjBfTE8oJWE2KQkJIyBGUF9TQ1IwID0gMioqKEwpICogUGlieTJfMQorCisJYWRkLmwJCSYweDAwMDAzRkRELCVkMQorCW1vdi53CQklZDEsRlBfU0NSMV9FWCglYTYpCisJbW92LmwJCSYweDg1QTMwOEQzLEZQX1NDUjFfSEkoJWE2KQorCWNsci5sCQlGUF9TQ1IxX0xPKCVhNikJCSMgRlBfU0NSMSA9IDIqKihMKSAqIFBpYnkyXzIKKworCW1vdi5iCQlFTkRGTEFHKCVhNiksJWQxCisKKyMtLVdlIGFyZSBub3cgcmVhZHkgdG8gcGVyZm9ybSAoUityKSAtIE4qUDEgLSBOKlAyLCBQMSA9IDIqKihMKSAqIFBpYnkyXzEgYW5kCisjLS1QMiA9IDIqKihMKSAqIFBpYnkyXzIKKwlmbW92LngJCSVmcDIsJWZwNAkJIyBmcDQgPSBOCisJZm11bC54CQlGUF9TQ1IwKCVhNiksJWZwNAkjIGZwNCA9IFcgPSBOKlAxCisJZm1vdi54CQklZnAyLCVmcDUJCSMgZnA1ID0gTgorCWZtdWwueAkJRlBfU0NSMSglYTYpLCVmcDUJIyBmcDUgPSB3ID0gTipQMgorCWZtb3YueAkJJWZwNCwlZnAzCQkjIGZwMyA9IFcgPSBOKlAxCisKKyMtLXdlIHdhbnQgUCtwID0gVyt3ICBidXQgIHxwfCA8PSBoYWxmIHVscCBvZiBQCisjLS1UaGVuLCB3ZSBuZWVkIHRvIGNvbXB1dGUgIEEgOj0gUi1QICAgYW5kICBhIDo9IHItcAorCWZhZGQueAkJJWZwNSwlZnAzCQkjIGZwMyA9IFAKKwlmc3ViLngJCSVmcDMsJWZwNAkJIyBmcDQgPSBXLVAKKworCWZzdWIueAkJJWZwMywlZnAwCQkjIGZwMCA9IEEgOj0gUiAtIFAKKwlmYWRkLngJCSVmcDUsJWZwNAkJIyBmcDQgPSBwID0gKFctUCkrdworCisJZm1vdi54CQklZnAwLCVmcDMJCSMgZnAzID0gQQorCWZzdWIueAkJJWZwNCwlZnAxCQkjIGZwMSA9IGEgOj0gciAtIHAKKworIy0tTm93IHdlIG5lZWQgdG8gbm9ybWFsaXplIChBLGEpIHRvICAibmV3IChSLHIpIiB3aGVyZSBSK3IgPSBBK2EgYnV0CisjLS18cnwgPD0gaGFsZiB1bHAgb2YgUi4KKwlmYWRkLngJCSVmcDEsJWZwMAkJIyBmcDAgPSBSIDo9IEErYQorIy0tTm8gbmVlZCB0byBjYWxjdWxhdGUgciBpZiB0aGlzIGlzIHRoZSBsYXN0IGxvb3AKKwljbXAuYgkJJWQxLCYwCisJYmd0LncJCVJFU1RPUkUKKworIy0tTmVlZCB0byBjYWxjdWxhdGUgcgorCWZzdWIueAkJJWZwMCwlZnAzCQkjIGZwMyA9IEEtUgorCWZhZGQueAkJJWZwMywlZnAxCQkjIGZwMSA9IHIgOj0gKEEtUikrYQorCWJyYS53CQlMT09QCisKK1JFU1RPUkU6CisJZm1vdi5sCQklZnAyLElOVCglYTYpCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCSglc3ApKywmMHgzYwkJIyByZXN0b3JlIHtmcDItZnA1fQorCisJbW92LmwJCUlOVCglYTYpLCVkMQorCXJvci5sCQkmMSwlZDEKKworCWJyYS53CQlUQU5DT05UCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc2F0YW4oKTogIGNvbXB1dGVzIHRoZSBhcmN0YW5nZW50IG9mIGEgbm9ybWFsaXplZCBudW1iZXIJCSMKKyMgc2F0YW5kKCk6IGNvbXB1dGVzIHRoZSBhcmN0YW5nZW50IG9mIGEgZGVub3JtYWxpemVkIG51bWJlcgkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dAkJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJZnAwID0gYXJjdGFuKFgpCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCVRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDIgdWxwcyBpbgk2NCBzaWduaWZpY2FudCBiaXQsCSMKKyMJaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5CSMKKyMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCisjCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJU3RlcCAxLiBJZiB8WHwgPj0gMTYgb3IgfFh8IDwgMS8xNiwgZ28gdG8gU3RlcCA1LgkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCAyLiBMZXQgWCA9IHNnbiAqIDIqKmsgKiAxLnh4eHh4eHh4Li4ueC4JCQkjCisjCQlOb3RlIHRoYXQgayA9IC00LCAtMywuLi4sIG9yIDMuCQkJCSMKKyMJCURlZmluZSBGID0gc2duICogMioqayAqIDEueHh4eDEsIGkuZS4gdGhlIGZpcnN0IDUJIworIwkJc2lnbmlmaWNhbnQgYml0cyBvZiBYIHdpdGggYSBiaXQtMSBhdHRhY2hlZCBhdCB0aGUgNi10aAkjCisjCQliaXQgcG9zaXRpb24uIERlZmluZSB1IHRvIGJlIHUgPSAoWC1GKSAvICgxICsgWCpGKS4JIworIwkJCQkJCQkJCSMKKyMJU3RlcCAzLiBBcHByb3hpbWF0ZSBhcmN0YW4odSkgYnkgYSBwb2x5bm9taWFsIHBvbHkuCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDQuIFJldHVybiBhcmN0YW4oRikgKyBwb2x5LCBhcmN0YW4oRikgaXMgZmV0Y2hlZCBmcm9tIGEJIworIwkJdGFibGUgb2YgdmFsdWVzIGNhbGN1bGF0ZWQgYmVmb3JlaGFuZC4gRXhpdC4JCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgNS4gSWYgfFh8ID49IDE2LCBnbyB0byBTdGVwIDcuCQkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgNi4gQXBwcm94aW1hdGUgYXJjdGFuKFgpIGJ5IGFuIG9kZCBwb2x5bm9taWFsIGluIFguIEV4aXQuCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgNy4gRGVmaW5lIFgnID0gLTEvWC4gQXBwcm94aW1hdGUgYXJjdGFuKFgnKSBieSBhbiBvZGQJIworIwkJcG9seW5vbWlhbCBpbiBYJy4JCQkJCSMKKyMJCUFyY3RhbihYKSA9IHNpZ24oWCkqUGkvMiArIGFyY3RhbihYJykuIEV4aXQuCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitBVEFOQTM6CWxvbmcJCTB4QkZGNjY4N0UsMHgzMTQ5ODdEOAorQVRBTkEyOglsb25nCQkweDQwMDJBQzY5LDB4MzRBMjZEQjMKK0FUQU5BMToJbG9uZwkJMHhCRkMyNDc2RiwweDRFMURBMjhFCisKK0FUQU5CNjoJbG9uZwkJMHgzRkIzNDQ0NCwweDdGODc2OTg5CitBVEFOQjU6CWxvbmcJCTB4QkZCNzQ0RUUsMHg3RkFGNDVEQgorQVRBTkI0Oglsb25nCQkweDNGQkM3MUM2LDB4NDY5NDAyMjAKK0FUQU5CMzoJbG9uZwkJMHhCRkMyNDkyNCwweDkyMTg3MkY5CitBVEFOQjI6CWxvbmcJCTB4M0ZDOTk5OTksMHg5OTk5OEZBOQorQVRBTkIxOglsb25nCQkweEJGRDU1NTU1LDB4NTU1NTU1NTUKKworQVRBTkM1Oglsb25nCQkweEJGQjcwQkYzLDB4OTg1MzlFNkEKK0FUQU5DNDoJbG9uZwkJMHgzRkJDNzE4NywweDk2MkQxRDdECitBVEFOQzM6CWxvbmcJCTB4QkZDMjQ5MjQsMHg4MjcxMDdCOAorQVRBTkMyOglsb25nCQkweDNGQzk5OTk5LDB4OTk5NjI2M0UKK0FUQU5DMToJbG9uZwkJMHhCRkQ1NTU1NSwweDU1NTU1NTM2CisKK1BQSUJZMjoJbG9uZwkJMHgzRkZGMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgwMDAwMDAwMAorTlBJQlkyOglsb25nCQkweEJGRkYwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDAwMDAwMDAwCisKK1BUSU5ZOglsb25nCQkweDAwMDEwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCitOVElOWToJbG9uZwkJMHg4MDAxMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCitBVEFOVEJMOgorCWxvbmcJCTB4M0ZGQjAwMDAsMHg4M0QxNTJDNSwweDA2MEI3QTUxLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4OEJDODU0NDUsMHg2NTQ5OEI4QiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweDkzQkU0MDYwLDB4MTc2MjZCMEQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHg5QkIzMDc4RCwweDM1QUVDMjAyLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4QTNBNjlBNTIsMHg1RERDRTdERSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweEFCOThFOTQzLDB4NjI3NjU2MTksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHhCMzg5RTUwMiwweEY5QzU5ODYyLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4QkI3OTdFNDMsMHg2QjA5RTZGQiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweEMzNjdBNUM3LDB4MzlFNUY0NDYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHhDQjU0NEM2MSwweENGRjdENUM2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4RDMzRjYyRjgsMHgyNDg4NTMzRSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweERCMjhEQTgxLDB4NjI0MDRDNzcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHhFMzEwQTQwNywweDhBRDM0RjE4LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4RUFGNkIwQTgsMHgxODhFRTFFQiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweEYyREFGMTk0LDB4OURCRTc5RDUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHhGQUJENTgxMywweDYxRDQ3RTNFLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4ODM0NkFDMjEsMHgwOTU5RUNDNCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweDhCMjMyQTA4LDB4MzA0MjgyRDgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHg5MkZCNzBCOCwweEQyOUFFMkY5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4OUFDRjQ3NkYsMHg1Q0NEMUNCNCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEEyOUU3NjMwLDB4NDk1NEYyM0YsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhBQTY4QzVEMCwweDhBQjg1MjMwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4QjIyREZGRkQsMHg5RDUzOUY4MywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEI5RURFRjQ1LDB4M0U5MDBFQTUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhDMUE4NUYxQywweEM3NUUzRUE1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4Qzk1RDFCRTgsMHgyODEzOERFNiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEQxMEJGMzAwLDB4ODQwRDJERTQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhEOEI0QjJCQSwweDZCQzA1RTdBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4RTA1NzJBNkIsMHhCNDIzMzVGNiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEU3RjMyQTcwLDB4RUE5Q0FBOEYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhFRjg4ODQzMiwweDY0RUNFRkFBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4RjcxNzBBMjgsMHhFQ0MwNjY2NiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweDgxMkZEMjg4LDB4MzMyREFEMzIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHg4OEE4RDFCMSwweDIxOEU0RDY0LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4OTAxMkFCM0YsMHgyM0U0QUVFOCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweDk3NkNDM0Q0LDB4MTFFN0YxQjksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHg5RUI2ODk0OSwweDM4ODlBMjI3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4QTVFRjcyQzMsMHg0NDg3MzYxQiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEFEMTcwMEJBLDB4RjA3QTcyMjcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhCNDJDQkNGQSwweEZEMzdFRkI3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4QkIzMDNBOTQsMHgwQkE4MEY4OSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEMyMjExNUM2LDB4RkNBRUJCQUYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhDOEZFRjNFNiwweDg2MzMxMjIxLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4Q0ZDOTgzMzAsMHhCNDAwMEM3MCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEQ2ODA3QUExLDB4MTAyQzVCRjksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhERDIzOTlCQywweDMxMjUyQUEzLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4RTNCMkE4NTUsMHg2QjhGQzUxNywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEVBMkQ3NjRGLDB4NjQzMTU5ODksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhGM0JGNUJGOCwweEJBRDFBMjFELDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4ODAxQ0UzOUUsMHgwRDIwNUM5QSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDg2MzBBMkRBLDB4REExRUQwNjYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4QzFBRDQ0NSwweEYzRTA5QjhDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OTFEQjhGMTYsMHg2NEYzNTBFMiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDk3NzMxNDIwLDB4MzY1RTUzOEMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5Q0UxQzhFNiwweEEwQjhDREJBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QTIyODMyREIsMHhDQURBQUUwOSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEE3NDZGMkRELDB4Qjc2MDIyOTQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBQzNFQzBGQiwweDk5N0RENkEyLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QjExMDY4OEEsMHhFQkRDNkY2QSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEI1QkNDNDkwLDB4NTlFQ0M0QjAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhCQTQ0QkM3RCwweEQ0NzA3ODJGLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QkVBOTQxNDQsMHhGRDA0OUFBQywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEMyRUI0QUJCLDB4NjYxNjI4QjYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhDNzBCRDU0QywweEU2MDJFRTE0LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4Q0QwMDA1NDksMHhBREVDNzE1OSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEQ0ODQ1N0QyLDB4RDhFQTRFQTMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhEQjk0OERBNywweDEyREVDRTNCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RTIzODU1RjksMHg2OUU4MDk2QSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEU4NzcxMTI5LDB4QzQzNTMyNTksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhFRTU3QzE2RSwweDBEMzc5QzBELDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RjNFMTAyMTEsMHhBODdDMzc3OSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEY5MTkwMzlELDB4NzU4QjhENDEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhGRTA1OEI4RiwweDY0OTM1RkIzLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4ODE1NUZCNDksMHg3QjY4NUQwNCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDgzODg5RTM1LDB4NDlEMTA4RTEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4NTlDRkE3NiwweDUxMUQ3MjRCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4ODc5NTJFQ0YsMHhGRjgxMzFFNywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDg5NzMyRkQxLDB4OTU1NzY0MUIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4QjM4Q0FEMSwweDAxOTMyQTM1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4OENFN0E4RDgsMHgzMDFFRTZCNSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDhGNDZBMzlFLDB4MkVBRTUyODEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5MjJEQTdENywweDkxODg4NDg3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4OTREMTlGQ0IsMHhERURGNTI0MSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDk3M0FCOTQ0LDB4MTlEMkEwOEIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5OTZGRjAwRSwweDA4RTEwQjk2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4OUI3NzNGOTUsMHgxMjMyMURBNywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweDlENTVDQzMyLDB4MEY5MzU2MjQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5RjEwMDU3NSwweDAwNkNDNTcxLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QTBBOUMyOTAsMHhEOTdDQzA2QywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEEyMjY1OUVCLDB4RUJDMDYzMEEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBMzg4QjRBRiwweEY2RUYwRUM5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QTREMzVGMTAsMHg2MUQyOTJDNCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEE2MDg5NURDLDB4RkJFMzE4N0UsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBNzJBNTFEQywweDczNjdCRUFDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QTgzQTUxNTMsMHgwOTU2MTY4RiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEE5M0EyMDA3LDB4NzUzOTU0NkUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBQTlFNzI0NSwweDAyM0IyNjA1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QUM0Qzg0QkEsMHg2RkU0RDU4RiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEFEQ0U0QTRBLDB4NjA2Qjk3MTIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBRjJBMkRDRCwweDhEMjYzQzlDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QjA2NTZGODEsMHhGMjIyNjVDNywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEIxODQ2NTE1LDB4MEY3MTQ5NkEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCMjhBQUExNSwweDZGOUFEQTM1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QjM3QjQ0RkYsMHgzNzY2Qjg5NSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEI0NThDM0RDLDB4RTk2MzA0MzMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCNTI1NTI5RCwweDU2MjI0NkJELDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QjVFMkNDQTksMHg1RjlEODhDQywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEI2OTJDQURBLDB4N0FDQTFBREEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCNzM2QUVBNywweEE2OTI1ODM4LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QjdDRkFCMjgsMHg3RTlGN0IzNiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEI4NUVDQzY2LDB4Q0IyMTk4MzUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCOEU0RkQ1QSwweDIwQTU5M0RBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4Qjk5RjQxRjYsMHg0QUZGOUJCNSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEJBN0YxRTE3LDB4ODQyQkJFN0IsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCQjQ3MTI4NSwweDc2MzdFMTdELDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QkJGQUJFOEEsMHg0Nzg4REY2RiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEJDOUQwRkFELDB4MkI2ODlENzksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCRDMwNkEzOSwweDQ3MUVDRDg2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QkRCNkM3MzEsMHg4NTZBRjE4QSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEJFMzFDQUM1LDB4MDJFODBENzAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCRUEyRDU1QywweEUzMzE5NEUyLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QkYwQjEwQjcsMHhDMDMxMjhGMCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEJGNkI3QTE4LDB4REFDQjc3OEQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCRkM0RUE0NiwweDYzRkExOEY2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QzAxODFCREUsMHg4Qjg5QTQ1NCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZGMDAwMCwweEMwNjVCMDY2LDB4Q0ZCRjY0MzksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDMEFFMzQ1RiwweDU2MzQwQUU2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkYwMDAwLDB4QzBGMjIyOTEsMHg5Q0I5RTZBNywweDAwMDAwMDAwCisKKwlzZXQJCVgsRlBfU0NSMAorCXNldAkJWERDQVJFLFgrMgorCXNldAkJWEZSQUMsWCs0CisJc2V0CQlYRlJBQ0xPLFgrOAorCisJc2V0CQlBVEFORixGUF9TQ1IxCisJc2V0CQlBVEFORkhJLEFUQU5GKzQKKwlzZXQJCUFUQU5GTE8sQVRBTkYrOAorCisJZ2xvYmFsCQlzYXRhbgorIy0tRU5UUlkgUE9JTlQgRk9SIEFUQU4oWCksIEhFUkUgWCBJUyBGSU5JVEUsIE5PTi1aRVJPLCBBTkQgTk9UIE5BTidTCitzYXRhbjoKKwlmbW92LngJCSglYTApLCVmcDAJCSMgTE9BRCBJTlBVVAorCisJbW92LmwJCSglYTApLCVkMQorCW1vdi53CQk0KCVhMCksJWQxCisJZm1vdi54CQklZnAwLFgoJWE2KQorCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEKKworCWNtcC5sCQklZDEsJjB4M0ZGQjgwMDAJCSMgfFh8ID49IDEvMTY/CisJYmdlLmIJCUFUQU5PSzEKKwlicmEudwkJQVRBTlNNCisKK0FUQU5PSzE6CisJY21wLmwJCSVkMSwmMHg0MDAyRkZGRgkJIyB8WHwgPCAxNiA/CisJYmxlLmIJCUFUQU5NQUlOCisJYnJhLncJCUFUQU5CSUcKKworIy0tVEhFIE1PU1QgTElLRUxZIENBU0UsIHxYfCBJTiBbMS8xNiwgMTYpLiBXRSBVU0UgVEFCTEUgVEVDSE5JUVVFCisjLS1USEUgSURFQSBJUyBBVEFOKFgpID0gQVRBTihGKSArIEFUQU4oIFtYLUZdIC8gWzErWEZdICkuCisjLS1TTyBJRiBGIElTIENIT1NFTiBUTyBCRSBDTE9TRSBUTyBYIEFORCBBVEFOKEYpIElTIFNUT1JFRCBJTgorIy0tQSBUQUJMRSwgQUxMIFdFIE5FRUQgSVMgVE8gQVBQUk9YSU1BVEUgQVRBTihVKSBXSEVSRQorIy0tVSA9IChYLUYpLygxK1hGKSBJUyBTTUFMTCAoUkVNRU1CRVIgRiBJUyBDTE9TRSBUTyBYKS4gSVQgSVMKKyMtLVRSVUUgVEhBVCBBIERJVklERSBJUyBOT1cgTkVFREVELCBCVVQgVEhFIEFQUFJPWElNQVRJT04gRk9SCisjLS1BVEFOKFUpIElTIEEgVkVSWSBTSE9SVCBQT0xZTk9NSUFMIEFORCBUSEUgSU5ERVhJTkcgVE8KKyMtLUZFVENIIEYgQU5EIFNBVklORyBPRiBSRUdJU1RFUlMgQ0FOIEJFIEFMTCBISURFRCBVTkRFUiBUSEUKKyMtLURJVklERS4gSU4gVEhFIEVORCBUSElTIE1FVEhPRCBJUyBNVUNIIEZBU1RFUiBUSEFOIEEgVFJBRElUSU9OQUwKKyMtLU9ORS4gTk9URSBBTFNPIFRIQVQgVEhFIFRSQURJVElPTkFMIFNDSEVNRSBUSEFUIEFQUFJPWElNQVRFCisjLS1BVEFOKFgpIERJUkVDVExZIFdJTEwgTkVFRCBUTyBVU0UgQSBSQVRJT05BTCBBUFBST1hJTUFUSU9OCisjLS0oRElWSVNJT04gTkVFREVEKSBBTllXQVkgQkVDQVVTRSBBIFBPTFlOT01JQUwgQVBQUk9YSU1BVElPTgorIy0tV0lMTCBJTlZPTFZFIEEgVkVSWSBMT05HIFBPTFlOT01JQUwuCisKKyMtLU5PVyBXRSBTRUUgWCBBUyArLTJeSyAqIDEuQkJCQkJCQi4uLi5CIDwtIDEuICsgNjMgQklUUworIy0tV0UgQ0hPU0UgRiBUTyBCRSArLTJeSyAqIDEuQkJCQjEKKyMtLVRIQVQgSVMgSVQgTUFUQ0hFUyBUSEUgRVhQT05FTlQgQU5EIEZJUlNUIDUgQklUUyBPRiBYLCBUSEUKKyMtLVNJWFRIIEJJVFMgSVMgU0VUIFRPIEJFIDEuIFNJTkNFIEsgPSAtNCwgLTMsIC4uLiwgMywgVEhFUkUKKyMtLUFSRSBPTkxZIDggVElNRVMgMTYgPSAyXjcgPSAxMjggfEZ8J1MuIFNJTkNFIEFUQU4oLXxGfCkgSVMKKyMtLSAtQVRBTih8RnwpLCBXRSBORUVEIFRPIFNUT1JFIE9OTFkgQVRBTih8RnwpLgorCitBVEFOTUFJTjoKKworCWFuZC5sCQkmMHhGODAwMDAwMCxYRlJBQyglYTYpCSMgRklSU1QgNSBCSVRTCisJb3IubAkJJjB4MDQwMDAwMDAsWEZSQUMoJWE2KQkjIFNFVCA2LVRIIEJJVCBUTyAxCisJbW92LmwJCSYweDAwMDAwMDAwLFhGUkFDTE8oJWE2KSAjIExPQ0FUSU9OIE9GIFggSVMgTk9XIEYKKworCWZtb3YueAkJJWZwMCwlZnAxCQkjIEZQMSBJUyBYCisJZm11bC54CQlYKCVhNiksJWZwMQkJIyBGUDEgSVMgWCpGLCBOT1RFIFRIQVQgWCpGID4gMAorCWZzdWIueAkJWCglYTYpLCVmcDAJCSMgRlAwIElTIFgtRgorCWZhZGQucwkJJjB4M0Y4MDAwMDAsJWZwMQkjIEZQMSBJUyAxICsgWCpGCisJZmRpdi54CQklZnAxLCVmcDAJCSMgRlAwIElTIFUgPSAoWC1GKS8oMStYKkYpCisKKyMtLVdISUxFIFRIRSBESVZJU0lPTiBJUyBUQUtJTkcgSVRTIFRJTUUsIFdFIEZFVENIIEFUQU4ofEZ8KQorIy0tQ1JFQVRFIEFUQU4oRikgQU5EIFNUT1JFIElUIElOIEFUQU5GLCBBTkQKKyMtLVNBVkUgUkVHSVNURVJTIEZQMi4KKworCW1vdi5sCQklZDIsLSglc3ApCQkjIFNBVkUgZDIgVEVNUE9SQVJJTFkKKwltb3YubAkJJWQxLCVkMgkJCSMgVEhFIEVYUCBBTkQgMTYgQklUUyBPRiBYCisJYW5kLmwJCSYweDAwMDA3ODAwLCVkMQkJIyA0IFZBUllJTkcgQklUUyBPRiBGJ1MgRlJBQ1RJT04KKwlhbmQubAkJJjB4N0ZGRjAwMDAsJWQyCQkjIEVYUE9ORU5UIE9GIEYKKwlzdWIubAkJJjB4M0ZGQjAwMDAsJWQyCQkjIEsrNAorCWFzci5sCQkmMSwlZDIKKwlhZGQubAkJJWQyLCVkMQkJCSMgVEhFIDcgQklUUyBJREVOVElGWUlORyBGCisJYXNyLmwJCSY3LCVkMQkJCSMgSU5ERVggSU5UTyBUQkwgT0YgQVRBTih8RnwpCisJbGVhCQlBVEFOVEJMKCVwYyksJWExCisJYWRkLmwJCSVkMSwlYTEJCQkjIEFERFJFU1MgT0YgQVRBTih8RnwpCisJbW92LmwJCSglYTEpKyxBVEFORiglYTYpCisJbW92LmwJCSglYTEpKyxBVEFORkhJKCVhNikKKwltb3YubAkJKCVhMSkrLEFUQU5GTE8oJWE2KQkjIEFUQU5GIElTIE5PVyBBVEFOKHxGfCkKKwltb3YubAkJWCglYTYpLCVkMQkJIyBMT0FEIFNJR04gQU5EIEVYUE8uIEFHQUlOCisJYW5kLmwJCSYweDgwMDAwMDAwLCVkMQkJIyBTSUdOKEYpCisJb3IubAkJJWQxLEFUQU5GKCVhNikJCSMgQVRBTkYgSVMgTk9XIFNJR04oRikqQVRBTih8RnwpCisJbW92LmwJCSglc3ApKywlZDIJCSMgUkVTVE9SRSBkMgorCisjLS1USEFUJ1MgQUxMIEkgSEFWRSBUTyBETyBGT1IgTk9XLAorIy0tQlVUIEFMQVMsIFRIRSBESVZJREUgSVMgU1RJTEwgQ1JBTktJTkchCisKKyMtLVUgSU4gRlAwLCBXRSBBUkUgTk9XIFJFQURZIFRPIENPTVBVVEUgQVRBTihVKSBBUworIy0tVSArIEExKlUqViooQTIgKyBWKihBMyArIFYpKSwgViA9IFUqVQorIy0tVEhFIFBPTFlOT01JQUwgTUFZIExPT0sgU1RSQU5HRSwgQlVUIElTIE5FVkVSVEhFTEVTUyBDT1JSRUNULgorIy0tVEhFIE5BVFVSQUwgRk9STSBJUyBVICsgVSpWKihBMSArIFYqKEEyICsgVipBMykpCisjLS1XSEFUIFdFIEhBVkUgSEVSRSBJUyBNRVJFTFkJQTEgPSBBMywgQTIgPSBBMS9BMywgQTMgPSBBMi9BMy4KKyMtLVRIRSBSRUFTT04gRk9SIFRISVMgUkVBUlJBTkdFTUVOVCBJUyBUTyBNQUtFIFRIRSBJTkRFUEVOREVOVAorIy0tUEFSVFMgQTEqVSpWIEFORCAoQTIgKyAuLi4gU1RVRkYpIE1PUkUgTE9BRC1CQUxBTkNFRAorCisJZm1vdm0ueAkJJjB4MDQsLSglc3ApCQkjIHNhdmUgZnAyCisKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwueAkJJWZwMSwlZnAxCisJZm1vdi5kCQlBVEFOQTMoJXBjKSwlZnAyCisJZmFkZC54CQklZnAxLCVmcDIJCSMgQTMrVgorCWZtdWwueAkJJWZwMSwlZnAyCQkjIFYqKEEzK1YpCisJZm11bC54CQklZnAwLCVmcDEJCSMgVSpWCisJZmFkZC5kCQlBVEFOQTIoJXBjKSwlZnAyCSMgQTIrViooQTMrVikKKwlmbXVsLmQJCUFUQU5BMSglcGMpLCVmcDEJIyBBMSpVKlYKKwlmbXVsLngJCSVmcDIsJWZwMQkJIyBBMSpVKlYqKEEyK1YqKEEzK1YpKQorCWZhZGQueAkJJWZwMSwlZnAwCQkjIEFUQU4oVSksIEZQMSBSRUxFQVNFRAorCisJZm1vdm0ueAkJKCVzcCkrLCYweDIwCQkjIHJlc3RvcmUgZnAyCisKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJuZCBtb2RlLHByZWMKKwlmYWRkLngJCUFUQU5GKCVhNiksJWZwMAkJIyBBVEFOKFgpCisJYnJhCQl0X2lueDIKKworQVRBTkJPUlM6CisjLS18WHwgSVMgSU4gZDAgSU4gQ09NUEFDVCBGT1JNLiBGUDEsIGQwIFNBVkVELgorIy0tRlAwIElTIFggQU5EIHxYfCA8PSAxLzE2IE9SIHxYfCA+PSAxNi4KKwljbXAubAkJJWQxLCYweDNGRkY4MDAwCisJYmd0LncJCUFUQU5CSUcJCQkjIEkuRS4gfFh8ID49IDE2CisKK0FUQU5TTToKKyMtLXxYfCA8PSAxLzE2CisjLS1JRiB8WHwgPCAyXigtNDApLCBSRVRVUk4gWCBBUyBBTlNXRVIuIE9USEVSV0lTRSwgQVBQUk9YSU1BVEUKKyMtLUFUQU4oWCkgQlkgWCArIFgqWSooQjErWSooQjIrWSooQjMrWSooQjQrWSooQjUrWSpCNikpKSkpCisjLS1XSElDSCBJUyBYICsgWCpZKiggW0IxK1oqKEIzK1oqQjUpXSArIFtZKihCMitaKihCNCtaKkI2KV0gKQorIy0tV0hFUkUgWSA9IFgqWCwgQU5EIFogPSBZKlkuCisKKwljbXAubAkJJWQxLCYweDNGRDc4MDAwCisJYmx0LncJCUFUQU5USU5ZCisKKyMtLUNPTVBVVEUgUE9MWU5PTUlBTAorCWZtb3ZtLngJCSYweDBjLC0oJXNwKQkJIyBzYXZlIGZwMi9mcDMKKworCWZtdWwueAkJJWZwMCwlZnAwCQkjIEZQTyBJUyBZID0gWCpYCisKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwueAkJJWZwMSwlZnAxCQkjIEZQMSBJUyBaID0gWSpZCisKKwlmbW92LmQJCUFUQU5CNiglcGMpLCVmcDIKKwlmbW92LmQJCUFUQU5CNSglcGMpLCVmcDMKKworCWZtdWwueAkJJWZwMSwlZnAyCQkjIFoqQjYKKwlmbXVsLngJCSVmcDEsJWZwMwkJIyBaKkI1CisKKwlmYWRkLmQJCUFUQU5CNCglcGMpLCVmcDIJIyBCNCtaKkI2CisJZmFkZC5kCQlBVEFOQjMoJXBjKSwlZnAzCSMgQjMrWipCNQorCisJZm11bC54CQklZnAxLCVmcDIJCSMgWiooQjQrWipCNikKKwlmbXVsLngJCSVmcDMsJWZwMQkJIyBaKihCMytaKkI1KQorCisJZmFkZC5kCQlBVEFOQjIoJXBjKSwlZnAyCSMgQjIrWiooQjQrWipCNikKKwlmYWRkLmQJCUFUQU5CMSglcGMpLCVmcDEJIyBCMStaKihCMytaKkI1KQorCisJZm11bC54CQklZnAwLCVmcDIJCSMgWSooQjIrWiooQjQrWipCNikpCisJZm11bC54CQlYKCVhNiksJWZwMAkJIyBYKlkKKworCWZhZGQueAkJJWZwMiwlZnAxCQkjIFtCMStaKihCMytaKkI1KV0rW1kqKEIyK1oqKEI0K1oqQjYpKV0KKworCWZtdWwueAkJJWZwMSwlZnAwCQkjIFgqWSooW0IxK1oqKEIzK1oqQjUpXStbWSooQjIrWiooQjQrWipCNikpXSkKKworCWZtb3ZtLngJCSglc3ApKywmMHgzMAkJIyByZXN0b3JlIGZwMi9mcDMKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm5kIG1vZGUscHJlYworCWZhZGQueAkJWCglYTYpLCVmcDAKKwlicmEJCXRfaW54MgorCitBVEFOVElOWToKKyMtLXxYfCA8IDJeKC00MCksIEFUQU4oWCkgPSBYCisKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJuZCBtb2RlLHByZWMKKwltb3YuYgkJJkZNT1ZfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNT1ZFCisJZm1vdi54CQlYKCVhNiksJWZwMAkJIyBsYXN0IGluc3QgLSBwb3NzaWJsZSBleGNlcHRpb24gc2V0CisKKwlicmEJCXRfY2F0Y2gKKworQVRBTkJJRzoKKyMtLUlGIHxYfCA+IDJeKDEwMCksIFJFVFVSTglTSUdOKFgpKihQSS8yIC0gVElOWSkuIE9USEVSV0lTRSwKKyMtLVJFVFVSTiBTSUdOKFgpKlBJLzIgKyBBVEFOKC0xL1gpLgorCWNtcC5sCQklZDEsJjB4NDA2MzgwMDAKKwliZ3QudwkJQVRBTkhVR0UKKworIy0tQVBQUk9YSU1BVEUgQVRBTigtMS9YKSBCWQorIy0tWCcrWCcqWSooQzErWSooQzIrWSooQzMrWSooQzQrWSpDNSkpKSksIFgnID0gLTEvWCwgWSA9IFgnKlgnCisjLS1USElTIENBTiBCRSBSRS1XUklUVEVOIEFTCisjLS1YJytYJypZKiggW0MxK1oqKEMzK1oqQzUpXSArIFtZKihDMitaKkM0KV0gKSwgWiA9IFkqWS4KKworCWZtb3ZtLngJCSYweDBjLC0oJXNwKQkJIyBzYXZlIGZwMi9mcDMKKworCWZtb3YucwkJJjB4QkY4MDAwMDAsJWZwMQkjIExPQUQgLTEKKwlmZGl2LngJCSVmcDAsJWZwMQkJIyBGUDEgSVMgLTEvWAorCisjLS1ESVZJREUgSVMgU1RJTEwgQ1JBTktJTkcKKworCWZtb3YueAkJJWZwMSwlZnAwCQkjIEZQMCBJUyBYJworCWZtdWwueAkJJWZwMCwlZnAwCQkjIEZQMCBJUyBZID0gWCcqWCcKKwlmbW92LngJCSVmcDEsWCglYTYpCQkjIFggSVMgUkVBTExZIFgnCisKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwueAkJJWZwMSwlZnAxCQkjIEZQMSBJUyBaID0gWSpZCisKKwlmbW92LmQJCUFUQU5DNSglcGMpLCVmcDMKKwlmbW92LmQJCUFUQU5DNCglcGMpLCVmcDIKKworCWZtdWwueAkJJWZwMSwlZnAzCQkjIFoqQzUKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBaKkI0CisKKwlmYWRkLmQJCUFUQU5DMyglcGMpLCVmcDMJIyBDMytaKkM1CisJZmFkZC5kCQlBVEFOQzIoJXBjKSwlZnAyCSMgQzIrWipDNAorCisJZm11bC54CQklZnAzLCVmcDEJCSMgWiooQzMrWipDNSksIEZQMyBSRUxFQVNFRAorCWZtdWwueAkJJWZwMCwlZnAyCQkjIFkqKEMyK1oqQzQpCisKKwlmYWRkLmQJCUFUQU5DMSglcGMpLCVmcDEJIyBDMStaKihDMytaKkM1KQorCWZtdWwueAkJWCglYTYpLCVmcDAJCSMgWCcqWQorCisJZmFkZC54CQklZnAyLCVmcDEJCSMgW1kqKEMyK1oqQzQpXStbQzErWiooQzMrWipDNSldCisKKwlmbXVsLngJCSVmcDEsJWZwMAkJIyBYJypZKihbQjErWiooQjMrWipCNSldCisjCQkJCQkuLi4JK1tZKihCMitaKihCNCtaKkI2KSldKQorCWZhZGQueAkJWCglYTYpLCVmcDAKKworCWZtb3ZtLngJCSglc3ApKywmMHgzMAkJIyByZXN0b3JlIGZwMi9mcDMKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm5kIG1vZGUscHJlYworCXRzdC5iCQkoJWEwKQorCWJwbC5iCQlwb3NfYmlnCisKK25lZ19iaWc6CisJZmFkZC54CQlOUElCWTIoJXBjKSwlZnAwCisJYnJhCQl0X21pbngyCisKK3Bvc19iaWc6CisJZmFkZC54CQlQUElCWTIoJXBjKSwlZnAwCisJYnJhCQl0X3BpbngyCisKK0FUQU5IVUdFOgorIy0tUkVUVVJOIFNJR04oWCkqKFBJQlkyIC0gVElOWSkgPSBTSUdOKFgpKlBJQlkyIC0gU0lHTihYKSpUSU5ZCisJdHN0LmIJCSglYTApCisJYnBsLmIJCXBvc19odWdlCisKK25lZ19odWdlOgorCWZtb3YueAkJTlBJQlkyKCVwYyksJWZwMAorCWZtb3YubAkJJWQwLCVmcGNyCisJZmFkZC54CQlQVElOWSglcGMpLCVmcDAKKwlicmEJCXRfbWlueDIKKworcG9zX2h1Z2U6CisJZm1vdi54CQlQUElCWTIoJXBjKSwlZnAwCisJZm1vdi5sCQklZDAsJWZwY3IKKwlmYWRkLngJCU5USU5ZKCVwYyksJWZwMAorCWJyYQkJdF9waW54MgorCisJZ2xvYmFsCQlzYXRhbmQKKyMtLUVOVFJZIFBPSU5UIEZPUiBBVEFOKFgpIEZPUiBERU5PUk1BTElaRUQgQVJHVU1FTlQKK3NhdGFuZDoKKwlicmEJCXRfZXh0ZG5ybQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNhc2luKCk6ICBjb21wdXRlcyB0aGUgaW52ZXJzZSBzaW5lIG9mIGEgbm9ybWFsaXplZCBpbnB1dAkJIworIyBzYXNpbmQoKTogY29tcHV0ZXMgdGhlIGludmVyc2Ugc2luZSBvZiBhIGRlbm9ybWFsaXplZCBpbnB1dAkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dAkJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gYXJjc2luKFgpCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDMgdWxwcyBpbgk2NCBzaWduaWZpY2FudCBiaXQsCSMKKyMJaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5CSMKKyMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCisjCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJCQkJCQkJCQkjCisjCUFTSU4JCQkJCQkJCSMKKyMJMS4gSWYgfFh8ID49IDEsIGdvIHRvIDMuCQkJCQkjCisjCQkJCQkJCQkJIworIwkyLiAofFh8IDwgMSkgQ2FsY3VsYXRlIGFzaW4oWCkgYnkJCQkJIworIwkJeiA6PSBzcXJ0KCBbMS1YXVsxK1hdICkJCQkJCSMKKyMJCWFzaW4oWCkgPSBhdGFuKCB4IC8geiApLgkJCQkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwkzLiBJZiB8WHwgPiAxLCBnbyB0byA1LgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTQuICh8WHwgPSAxKSBzZ24gOj0gc2lnbihYKSwgcmV0dXJuIGFzaW4oWCkgOj0gc2duICogUGkvMi4gRXhpdC4jCisjCQkJCQkJCQkJIworIwk1LiAofFh8ID4gMSkgR2VuZXJhdGUgYW4gaW52YWxpZCBvcGVyYXRpb24gYnkgMCAqIGluZmluaXR5LgkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzYXNpbgorc2FzaW46CisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIExPQUQgSU5QVVQKKworCW1vdi5sCQkoJWEwKSwlZDEKKwltb3YudwkJNCglYTApLCVkMQorCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEKKwljbXAubAkJJWQxLCYweDNGRkY4MDAwCisJYmdlLmIJCUFTSU5CSUcKKworIyBUaGlzIGNhdGNoIGlzIGFkZGVkIGhlcmUgZm9yIHRoZSAnMDYwIFFTUC4gT3JpZ2luYWxseSwgdGhlIGNhbGwgdG8KKyMgc2F0YW4oKSB3b3VsZCBoYW5kbGUgdGhpcyBjYXNlIGJ5IGNhdXNpbmcgdGhlIGV4Y2VwdGlvbiB3aGljaCB3b3VsZAorIyBub3QgYmUgY2F1Z2h0IHVudGlsIGdlbl9leGNlcHQoKS4gTm93LCB3aXRoIHRoZSBleGNlcHRpb25zIGJlaW5nCisjIGRldGVjdGVkIGluc2lkZSBvZiBzYXRhbigpLCB0aGUgZXhjZXB0aW9uIHdvdWxkIGhhdmUgYmVlbiBoYW5kbGVkIHRoZXJlCisjIGluc3RlYWQgb2YgaW5zaWRlIHNhc2luKCkgYXMgZXhwZWN0ZWQuCisJY21wLmwJCSVkMSwmMHgzRkQ3ODAwMAorCWJsdC53CQlBU0lOVElOWQorCisjLS1USElTIElTIFRIRSBVU1VBTCBDQVNFLCB8WHwgPCAxCisjLS1BU0lOKFgpID0gQVRBTiggWCAvIFNRUlQoICgxLVgpKDErWCkgKSApCisKK0FTSU5NQUlOOgorCWZtb3YucwkJJjB4M0Y4MDAwMDAsJWZwMQorCWZzdWIueAkJJWZwMCwlZnAxCQkjIDEtWAorCWZtb3ZtLngJCSYweDQsLSglc3ApCQkjICB7ZnAyfQorCWZtb3YucwkJJjB4M0Y4MDAwMDAsJWZwMgorCWZhZGQueAkJJWZwMCwlZnAyCQkjIDErWAorCWZtdWwueAkJJWZwMiwlZnAxCQkjICgxK1gpKDEtWCkKKwlmbW92bS54CQkoJXNwKSssJjB4MjAJCSMgIHtmcDJ9CisJZnNxcnQueAkJJWZwMQkJCSMgU1FSVChbMS1YXVsxK1hdKQorCWZkaXYueAkJJWZwMSwlZnAwCQkjIFgvU1FSVChbMS1YXVsxK1hdKQorCWZtb3ZtLngJCSYweDAxLC0oJXNwKQkJIyBzYXZlIFgvU1FSVCguLi4pCisJbGVhCQkoJXNwKSwlYTAJCSMgcGFzcyBwdHIgdG8gWC9TUVJUKC4uLikKKwlic3IJCXNhdGFuCisJYWRkLmwJCSYweGMsJXNwCQkjIGNsZWFyIFgvU1FSVCguLi4pIGZyb20gc3RhY2sKKwlicmEJCXRfaW54MgorCitBU0lOQklHOgorCWZhYnMueAkJJWZwMAkJCSMgfFh8CisJZmNtcC5zCQklZnAwLCYweDNGODAwMDAwCisJZmJndAkJdF9vcGVycgkJCSMgY2F1c2UgYW4gb3BlcnIgZXhjZXB0aW9uCisKKyMtLXxYfCA9IDEsIEFTSU4oWCkgPSArLSBQSS8yLgorQVNJTk9ORToKKwlmbW92LngJCVBJQlkyKCVwYyksJWZwMAorCW1vdi5sCQkoJWEwKSwlZDEKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQxCQkjIFNJR04gQklUIE9GIFgKKwlvci5sCQkmMHgzRjgwMDAwMCwlZDEJCSMgKy0xIElOIFNHTCBGT1JNQVQKKwltb3YubAkJJWQxLC0oJXNwKQkJIyBwdXNoIFNJR04oWCkgSU4gU0dMLUZNVAorCWZtb3YubAkJJWQwLCVmcGNyCisJZm11bC5zCQkoJXNwKSssJWZwMAorCWJyYQkJdF9pbngyCisKKyMtLXxYfCA8IDJeKC00MCksIEFUQU4oWCkgPSBYCitBU0lOVElOWToKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJuZCBtb2RlLHByZWMKKwltb3YuYgkJJkZNT1ZfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNT1ZFCisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIGxhc3QgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbgorCWJyYQkJdF9jYXRjaAorCisJZ2xvYmFsCQlzYXNpbmQKKyMtLUFTSU4oWCkgPSBYIEZPUiBERU5PUk1BTElaRUQgWAorc2FzaW5kOgorCWJyYQkJdF9leHRkbnJtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc2Fjb3MoKTogIGNvbXB1dGVzIHRoZSBpbnZlcnNlIGNvc2luZSBvZiBhIG5vcm1hbGl6ZWQgaW5wdXQJCSMKKyMgc2Fjb3NkKCk6IGNvbXB1dGVzIHRoZSBpbnZlcnNlIGNvc2luZSBvZiBhIGRlbm9ybWFsaXplZCBpbnB1dAkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dAkJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJZnAwID0gYXJjY29zKFgpCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFDQ1VSQUNZIGFuZCBNT05PVE9OSUNJVFkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoZSByZXR1cm5lZCByZXN1bHQgaXMgd2l0aGluIDMgdWxwcyBpbgk2NCBzaWduaWZpY2FudCBiaXQsCSMKKyMJaS5lLiB3aXRoaW4gMC41MDAxIHVscCB0byA1MyBiaXRzIGlmIHRoZSByZXN1bHQgaXMgc3Vic2VxdWVudGx5CSMKKyMJcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiBUaGUgcmVzdWx0IGlzIHByb3ZhYmx5IG1vbm90b25pYwkjCisjCWluIGRvdWJsZSBwcmVjaXNpb24uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJCQkJCQkJCQkjCisjCUFDT1MJCQkJCQkJCSMKKyMJMS4gSWYgfFh8ID49IDEsIGdvIHRvIDMuCQkJCQkjCisjCQkJCQkJCQkJIworIwkyLiAofFh8IDwgMSkgQ2FsY3VsYXRlIGFjb3MoWCkgYnkJCQkJIworIwkJeiA6PSAoMS1YKSAvICgxK1gpCQkJCQkjCisjCQlhY29zKFgpID0gMiAqIGF0YW4oIHNxcnQoeikgKS4JCQkJIworIwkJRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJMy4gSWYgfFh8ID4gMSwgZ28gdG8gNS4JCQkJCQkjCisjCQkJCQkJCQkJIworIwk0LiAofFh8ID0gMSkgSWYgWCA+IDAsIHJldHVybiAwLiBPdGhlcndpc2UsIHJldHVybiBQaS4gRXhpdC4JIworIwkJCQkJCQkJCSMKKyMJNS4gKHxYfCA+IDEpIEdlbmVyYXRlIGFuIGludmFsaWQgb3BlcmF0aW9uIGJ5IDAgKiBpbmZpbml0eS4JIworIwkJRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc2Fjb3MKK3NhY29zOgorCWZtb3YueAkJKCVhMCksJWZwMAkJIyBMT0FEIElOUFVUCisKKwltb3YubAkJKCVhMCksJWQxCQkjIHBhY2sgZXhwIHcvIHVwcGVyIDE2IGZyYWN0aW9uCisJbW92LncJCTQoJWEwKSwlZDEKKwlhbmQubAkJJjB4N0ZGRkZGRkYsJWQxCisJY21wLmwJCSVkMSwmMHgzRkZGODAwMAorCWJnZS5iCQlBQ09TQklHCisKKyMtLVRISVMgSVMgVEhFIFVTVUFMIENBU0UsIHxYfCA8IDEKKyMtLUFDT1MoWCkgPSAyICogQVRBTigJU1FSVCggKDEtWCkvKDErWCkgKSApCisKK0FDT1NNQUlOOgorCWZtb3YucwkJJjB4M0Y4MDAwMDAsJWZwMQorCWZhZGQueAkJJWZwMCwlZnAxCQkjIDErWAorCWZuZWcueAkJJWZwMAkJCSMgLVgKKwlmYWRkLnMJCSYweDNGODAwMDAwLCVmcDAJIyAxLVgKKwlmZGl2LngJCSVmcDEsJWZwMAkJIyAoMS1YKS8oMStYKQorCWZzcXJ0LngJCSVmcDAJCQkjIFNRUlQoKDEtWCkvKDErWCkpCisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBvcmlnaW5hbCB1c2VycyBmcGNyCisJY2xyLmwJCSVkMAorCWZtb3ZtLngJCSYweDAxLC0oJXNwKQkJIyBzYXZlIFNRUlQoLi4uKSB0byBzdGFjaworCWxlYQkJKCVzcCksJWEwCQkjIHBhc3MgcHRyIHRvIHNxcnQKKwlic3IJCXNhdGFuCQkJIyBBVEFOKFNRUlQoWzEtWF0vWzErWF0pKQorCWFkZC5sCQkmMHhjLCVzcAkJIyBjbGVhciBTUVJUKC4uLikgZnJvbSBzdGFjaworCisJZm1vdi5sCQkoJXNwKSssJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBwcmVjLG1vZGUKKwlmYWRkLngJCSVmcDAsJWZwMAkJIyAyICogQVRBTiggU1RVRkYgKQorCWJyYQkJdF9waW54MgorCitBQ09TQklHOgorCWZhYnMueAkJJWZwMAorCWZjbXAucwkJJWZwMCwmMHgzRjgwMDAwMAorCWZiZ3QJCXRfb3BlcnIJCQkjIGNhdXNlIGFuIG9wZXJyIGV4Y2VwdGlvbgorCisjLS18WHwgPSAxLCBBQ09TKFgpID0gMCBPUiBQSQorCXRzdC5iCQkoJWEwKQkJCSMgaXMgWCBwb3NpdGl2ZSBvciBuZWdhdGl2ZT8KKwlicGwuYgkJQUNPU1AxCisKKyMtLVggPSAtMQorI1JldHVybnMgUEkgYW5kIGluZXhhY3QgZXhjZXB0aW9uCitBQ09TTTE6CisJZm1vdi54CQlQSSglcGMpLCVmcDAJCSMgbG9hZCBQSQorCWZtb3YubAkJJWQwLCVmcGNyCQkjIGxvYWQgcm91bmQgbW9kZSxwcmVjCisJZmFkZC5zCQkmMHgwMDgwMDAwMCwlZnAwCSMgYWRkIGEgc21hbGwgdmFsdWUKKwlicmEJCXRfcGlueDIKKworQUNPU1AxOgorCWJyYQkJbGRfcHplcm8JCSMgYW5zd2VyIGlzIHBvc2l0aXZlIHplcm8KKworCWdsb2JhbAkJc2Fjb3NkCisjLS1BQ09TKFgpID0gUEkvMiBGT1IgREVOT1JNQUxJWkVEIFgKK3NhY29zZDoKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyBsb2FkIHVzZXIncyBybmQgbW9kZS9wcmVjCisJZm1vdi54CQlQSUJZMiglcGMpLCVmcDAKKwlicmEJCXRfcGlueDIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzZXRveCgpOiAgICBjb21wdXRlcyB0aGUgZXhwb25lbnRpYWwgZm9yIGEgbm9ybWFsaXplZCBpbnB1dAkJIworIyBzZXRveGQoKTogICBjb21wdXRlcyB0aGUgZXhwb25lbnRpYWwgZm9yIGEgZGVub3JtYWxpemVkIGlucHV0CQkjCisjIHNldG94bTEoKTogIGNvbXB1dGVzIHRoZSBleHBvbmVudGlhbCBtaW51cyAxIGZvciBhIG5vcm1hbGl6ZWQgaW5wdXQJIworIyBzZXRveG0xZCgpOiBjb21wdXRlcyB0aGUgZXhwb25lbnRpYWwgbWludXMgMSBmb3IgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dAkJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJZnAwID0gZXhwKFgpIG9yIGV4cChYKS0xCQkJCQkjCisjCQkJCQkJCQkJIworIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAwLjg1IHVscHMgaW4gNjQgc2lnbmlmaWNhbnQgYml0LAkjCisjCWkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseSAjCisjCXJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMJIworIwlpbiBkb3VibGUgcHJlY2lzaW9uLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSBhbmQgSU1QTEVNRU5UQVRJT04gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCQkJCQkJCQkJIworIwlzZXRveGQJCQkJCQkJCSMKKyMJLS0tLS0tCQkJCQkJCQkjCisjCVN0ZXAgMS4JU2V0IGFucyA6PSAxLjAJCQkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDIuCVJldHVybglhbnMgOj0gYW5zICsgc2lnbihYKSoyXigtMTI2KS4gRXhpdC4JCSMKKyMJTm90ZXM6CVRoaXMgd2lsbCBhbHdheXMgZ2VuZXJhdGUgb25lIGV4Y2VwdGlvbiAtLSBpbmV4YWN0LgkjCisjCQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJc2V0b3gJCQkJCQkJCSMKKyMJLS0tLS0JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgMS4JRmlsdGVyIG91dCBleHRyZW1lIGNhc2VzIG9mIGlucHV0IGFyZ3VtZW50LgkJIworIwkJMS4xCUlmIHxYfCA+PSAyXigtNjUpLCBnbyB0byBTdGVwIDEuMy4JCSMKKyMJCTEuMglHbyB0byBTdGVwIDcuCQkJCQkjCisjCQkxLjMJSWYgfFh8IDwgMTYzODAgbG9nKDIpLCBnbyB0byBTdGVwIDIuCQkjCisjCQkxLjQJR28gdG8gU3RlcCA4LgkJCQkJIworIwlOb3RlczoJVGhlIHVzdWFsIGNhc2Ugc2hvdWxkIHRha2UgdGhlIGJyYW5jaGVzIDEuMSAtPiAxLjMgLT4gMi4jCisjCQlUbyBhdm9pZCB0aGUgdXNlIG9mIGZsb2F0aW5nLXBvaW50IGNvbXBhcmlzb25zLCBhCSMKKyMJCWNvbXBhY3QgcmVwcmVzZW50YXRpb24gb2YgfFh8IGlzIHVzZWQuIFRoaXMgZm9ybWF0IGlzIGEJIworIwkJMzItYml0IGludGVnZXIsIHRoZSB1cHBlciAobW9yZSBzaWduaWZpY2FudCkgMTYgYml0cwkjCisjCQlhcmUgdGhlIHNpZ24gYW5kIGJpYXNlZCBleHBvbmVudCBmaWVsZCBvZiB8WHw7IHRoZQkjCisjCQlsb3dlciAxNiBiaXRzIGFyZSB0aGUgMTYgbW9zdCBzaWduaWZpY2FudCBmcmFjdGlvbgkjCisjCQkoaW5jbHVkaW5nIHRoZSBleHBsaWNpdCBiaXQpIGJpdHMgb2YgfFh8LiBDb25zZXF1ZW50bHksCSMKKyMJCXRoZSBjb21wYXJpc29ucyBpbiBTdGVwcyAxLjEgYW5kIDEuMyBjYW4gYmUgcGVyZm9ybWVkCSMKKyMJCWJ5IGludGVnZXIgY29tcGFyaXNvbi4gTm90ZSBhbHNvIHRoYXQgdGhlIGNvbnN0YW50CSMKKyMJCTE2MzgwIGxvZygyKSB1c2VkIGluIFN0ZXAgMS4zIGlzIGFsc28gaW4gdGhlIGNvbXBhY3QJIworIwkJZm9ybS4gVGh1cyB0YWtpbmcgdGhlIGJyYW5jaCB0byBTdGVwIDIgZ3VhcmFudGVlcwkjCisjCQl8WHwgPCAxNjM4MCBsb2coMikuIFRoZXJlIGlzIG5vIGhhcm0gdG8gaGF2ZSBhIHNtYWxsCSMKKyMJCW51bWJlciBvZiBjYXNlcyB3aGVyZSB8WHwgaXMgbGVzcyB0aGFuLAlidXQgY2xvc2UgdG8sCSMKKyMJCTE2MzgwIGxvZygyKSBhbmQgdGhlIGJyYW5jaCB0byBTdGVwIDkgaXMgdGFrZW4uCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDIuCUNhbGN1bGF0ZSBOID0gcm91bmQtdG8tbmVhcmVzdC1pbnQoIFggKiA2NC9sb2cyICkuCSMKKyMJCTIuMQlTZXQgQWRqRmxhZyA6PSAwIChpbmRpY2F0ZXMgdGhlIGJyYW5jaCAxLjMgLT4gMiAjCisjCQkJd2FzIHRha2VuKQkJCQkJIworIwkJMi4yCU4gOj0gcm91bmQtdG8tbmVhcmVzdC1pbnRlZ2VyKCBYICogNjQvbG9nMiApLgkjCisjCQkyLjMJQ2FsY3VsYXRlCUogPSBOIG1vZCA2NDsgc28gSiA9IDAsMSwyLC4uLiwgIworIwkJCW9yIDYzLgkJCQkJCSMKKyMJCTIuNAlDYWxjdWxhdGUJTSA9IChOIC0gSikvNjQ7IHNvIE4gPSA2NE0gKyBKLgkjCisjCQkyLjUJQ2FsY3VsYXRlIHRoZSBhZGRyZXNzIG9mIHRoZSBzdG9yZWQgdmFsdWUgb2YJIworIwkJCTJeKEovNjQpLgkJCQkJIworIwkJMi42CUNyZWF0ZSB0aGUgdmFsdWUgU2NhbGUgPSAyXk0uCQkJIworIwlOb3RlczoJVGhlIGNhbGN1bGF0aW9uIGluIDIuMiBpcyByZWFsbHkgcGVyZm9ybWVkIGJ5CQkjCisjCQkJWiA6PSBYICogY29uc3RhbnQJCQkJIworIwkJCU4gOj0gcm91bmQtdG8tbmVhcmVzdC1pbnRlZ2VyKFopCQkjCisjCQl3aGVyZQkJCQkJCQkjCisjCQkJY29uc3RhbnQgOj0gc2luZ2xlLXByZWNpc2lvbiggNjQvbG9nIDIgKS4JIworIwkJCQkJCQkJCSMKKyMJCVVzaW5nIGEgc2luZ2xlLXByZWNpc2lvbiBjb25zdGFudCBhdm9pZHMgbWVtb3J5CQkjCisjCQlhY2Nlc3MuIEFub3RoZXIgZWZmZWN0IG9mIHVzaW5nIGEgc2luZ2xlLXByZWNpc2lvbgkjCisjCQkiY29uc3RhbnQiIGlzIHRoYXQgdGhlIGNhbGN1bGF0ZWQgdmFsdWUgWiBpcwkJIworIwkJCQkJCQkJCSMKKyMJCQlaID0gWCooNjQvbG9nMikqKDErZXBzKSwgfGVwc3wgPD0gMl4oLTI0KS4JIworIwkJCQkJCQkJCSMKKyMJCVRoaXMgZXJyb3IgaGFzIHRvIGJlIGNvbnNpZGVyZWQgbGF0ZXIgaW4gU3RlcHMgMyBhbmQgNC4JIworIwkJCQkJCQkJCSMKKyMJU3RlcCAzLglDYWxjdWxhdGUgWCAtIE4qbG9nMi82NC4JCQkJIworIwkJMy4xCVIgOj0gWCArIE4qTDEsCQkJCQkjCisjCQkJCXdoZXJlIEwxIDo9IHNpbmdsZS1wcmVjaXNpb24oLWxvZzIvNjQpLgkjCisjCQkzLjIJUiA6PSBSICsgTipMMiwJCQkJCSMKKyMJCQkJTDIgOj0gZXh0ZW5kZWQtcHJlY2lzaW9uKC1sb2cyLzY0IC0gTDEpLiMKKyMJTm90ZXM6CWEpIFRoZSB3YXkgTDEgYW5kIEwyIGFyZSBjaG9zZW4gZW5zdXJlcyBMMStMMgkJIworIwkJYXBwcm94aW1hdGUgdGhlIHZhbHVlIC1sb2cyLzY0IHRvIDg4IGJpdHMgb2YgYWNjdXJhY3kuCSMKKyMJCWIpIE4qTDEgaXMgZXhhY3QgYmVjYXVzZSBOIGlzIG5vIGxvbmdlciB0aGFuIDIyIGJpdHMJIworIwkJYW5kIEwxIGlzIG5vIGxvbmdlciB0aGFuIDI0IGJpdHMuCQkJIworIwkJYykgVGhlIGNhbGN1bGF0aW9uIFgrTipMMSBpcyBhbHNvIGV4YWN0IGR1ZSB0bwkJIworIwkJY2FuY2VsbGF0aW9uLiBUaHVzLCBSIGlzIHByYWN0aWNhbGx5IFgrTihMMStMMikgdG8gZnVsbAkjCisjCQk2NCBiaXRzLgkJCQkJCSMKKyMJCWQpIEl0IGlzIGltcG9ydGFudCB0byBlc3RpbWF0ZSBob3cgbGFyZ2UgY2FuIHxSfCBiZQkjCisjCQlhZnRlciBTdGVwIDMuMi4JCQkJCQkjCisjCQkJCQkJCQkJIworIwkJTiA9IHJuZC10by1pbnQoIFgqNjQvbG9nMiAoMStlcHMpICksIHxlcHN8PD0yXigtMjQpCSMKKyMJCVgqNjQvbG9nMiAoMStlcHMpCT0JTiArIGYsCXxmfCA8PSAwLjUJIworIwkJWCo2NC9sb2cyIC0gTgk9CWYgLSBlcHMqWCA2NC9sb2cyCQkjCisjCQlYIC0gTipsb2cyLzY0CT0JZipsb2cyLzY0IC0gZXBzKlgJCSMKKyMJCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIwkJTm93IHxYfCA8PSAxNjQ0NiBsb2cyLCB0aHVzCQkJCSMKKyMJCQkJCQkJCQkjCisjCQkJfFggLSBOKmxvZzIvNjR8IDw9ICgwLjUgKyAxNjQ0Ni8yXigxOCkpKmxvZzIvNjQJIworIwkJCQkJPD0gMC41NyBsb2cyLzY0LgkJIworIwkJIFRoaXMgYm91bmQgd2lsbCBiZSB1c2VkIGluIFN0ZXAgNC4JCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDQuCUFwcHJveGltYXRlIGV4cChSKS0xIGJ5IGEgcG9seW5vbWlhbAkJCSMKKyMJCXAgPSBSICsgUipSKihBMSArIFIqKEEyICsgUiooQTMgKyBSKihBNCArIFIqQTUpKSkpCSMKKyMJTm90ZXM6CWEpIEluIG9yZGVyIHRvIHJlZHVjZSBtZW1vcnkgYWNjZXNzLCB0aGUgY29lZmZpY2llbnRzCSMKKyMJCWFyZSBtYWRlIGFzICJzaG9ydCIgYXMgcG9zc2libGU6IEExICh3aGljaCBpcyAxLzIpLCBBNAkjCisjCQlhbmQgQTUgYXJlIHNpbmdsZSBwcmVjaXNpb247IEEyIGFuZCBBMyBhcmUgZG91YmxlCSMKKyMJCXByZWNpc2lvbi4JCQkJCQkjCisjCQliKSBFdmVuIHdpdGggdGhlIHJlc3RyaWN0aW9ucyBhYm92ZSwJCQkjCisjCQkgICB8cCAtIChleHAoUiktMSl8IDwgMl4oLTY4LjgpIGZvciBhbGwgfFJ8IDw9IDAuMDA2Mi4JIworIwkJTm90ZSB0aGF0IDAuMDA2MiBpcyBzbGlnaHRseSBiaWdnZXIgdGhhbiAwLjU3IGxvZzIvNjQuCSMKKyMJCWMpIFRvIGZ1bGx5IHV0aWxpemUgdGhlIHBpcGVsaW5lLCBwIGlzIHNlcGFyYXRlZCBpbnRvCSMKKyMJCXR3byBpbmRlcGVuZGVudCBwaWVjZXMgb2Ygcm91Z2hseSBlcXVhbCBjb21wbGV4aXRpZXMJIworIwkJCXAgPSBbIFIgKyBSKlMqKEEyICsgUypBNCkgXQkrCQkjCisjCQkJCVsgUyooQTEgKyBTKihBMyArIFMqQTUpKSBdCQkjCisjCQl3aGVyZSBTID0gUipSLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgNS4JQ29tcHV0ZSAyXihKLzY0KSpleHAoUikgPSAyXihKLzY0KSooMStwKSBieQkJIworIwkJCQlhbnMgOj0gVCArICggVCpwICsgdCkJCQkjCisjCQl3aGVyZSBUIGFuZCB0IGFyZSB0aGUgc3RvcmVkIHZhbHVlcyBmb3IgMl4oSi82NCkuCSMKKyMJTm90ZXM6CTJeKEovNjQpIGlzIHN0b3JlZCBhcyBUIGFuZCB0IHdoZXJlIFQrdCBhcHByb3hpbWF0ZXMJIworIwkJMl4oSi82NCkgdG8gcm91Z2hseSA4NSBiaXRzOyBUIGlzIGluIGV4dGVuZGVkIHByZWNpc2lvbgkjCisjCQlhbmQgdCBpcyBpbiBzaW5nbGUgcHJlY2lzaW9uLiBOb3RlIGFsc28gdGhhdCBUIGlzCSMKKyMJCXJvdW5kZWQgdG8gNjIgYml0cyBzbyB0aGF0IHRoZSBsYXN0IHR3byBiaXRzIG9mIFQgYXJlCSMKKyMJCXplcm8uIFRoZSByZWFzb24gZm9yIHN1Y2ggYSBzcGVjaWFsIGZvcm0gaXMgdGhhdCBULTEsCSMKKyMJCVQtMiwgYW5kIFQtOCB3aWxsIGFsbCBiZSBleGFjdCAtLS0gYSBwcm9wZXJ0eSB0aGF0IHdpbGwJIworIwkJZ2l2ZSBtdWNoIG1vcmUgYWNjdXJhdGUgY29tcHV0YXRpb24gb2YgdGhlIGZ1bmN0aW9uCSMKKyMJCUVYUE0xLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDYuCVJlY29uc3RydWN0aW9uIG9mIGV4cChYKQkJCQkjCisjCQkJZXhwKFgpID0gMl5NICogMl4oSi82NCkgKiBleHAoUikuCQkjCisjCQk2LjEJSWYgQWRqRmxhZyA9IDAsIGdvIHRvIDYuMwkJCSMKKyMJCTYuMglhbnMgOj0gYW5zICogQWRqU2NhbGUJCQkJIworIwkJNi4zCVJlc3RvcmUgdGhlIHVzZXIgRlBDUgkJCQkjCisjCQk2LjQJUmV0dXJuIGFucyA6PSBhbnMgKiBTY2FsZS4gRXhpdC4JCSMKKyMJTm90ZXM6CUlmIEFkakZsYWcgPSAwLCB3ZSBoYXZlIFggPSBNbG9nMiArIEpsb2cyLzY0ICsgUiwJIworIwkJfE18IDw9IDE2MzgwLCBhbmQgU2NhbGUgPSAyXk0uIE1vcmVvdmVyLCBleHAoWCkgd2lsbAkjCisjCQluZWl0aGVyIG92ZXJmbG93IG5vciB1bmRlcmZsb3cuIElmIEFkakZsYWcgPSAxLCB0aGF0CSMKKyMJCW1lYW5zIHRoYXQJCQkJCQkjCisjCQkJWCA9IChNMStNKWxvZzIgKyBKbG9nMi82NCArIFIsIHxNMStNfCA+PSAxNjM4MC4JIworIwkJSGVuY2UsIGV4cChYKSBtYXkgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IG9yIG5laXRoZXIuCSMKKyMJCVdoZW4gdGhhdCBpcyB0aGUgY2FzZSwgQWRqU2NhbGUgPSAyXihNMSkgd2hlcmUgTTEgaXMJIworIwkJYXBwcm94aW1hdGVseSBNLiBUaHVzIDYuMiB3aWxsIG5ldmVyIGNhdXNlCQkjCisjCQlvdmVyL3VuZGVyZmxvdy4gUG9zc2libGUgZXhjZXB0aW9uIGluIDYuNCBpcyBvdmVyZmxvdwkjCisjCQlvciB1bmRlcmZsb3cuIFRoZSBpbmV4YWN0IGV4Y2VwdGlvbiBpcyBub3QgZ2VuZXJhdGVkIGluCSMKKyMJCTYuNC4gQWx0aG91Z2ggb25lIGNhbiBhcmd1ZSB0aGF0IHRoZSBpbmV4YWN0IGZsYWcJIworIwkJc2hvdWxkIGFsd2F5cyBiZSByYWlzZWQsIHRvIHNpbXVsYXRlIHRoYXQgZXhjZXB0aW9uCSMKKyMJCWNvc3QgdG8gbXVjaCB0aGFuIHRoZSBmbGFnIGlzIHdvcnRoIGluIHByYWN0aWNhbCB1c2VzLgkjCisjCQkJCQkJCQkJIworIwlTdGVwIDcuCVJldHVybiAxICsgWC4JCQkJCQkjCisjCQk3LjEJYW5zIDo9IFgJCQkJCSMKKyMJCTcuMglSZXN0b3JlIHVzZXIgRlBDUi4JCQkJIworIwkJNy4zCVJldHVybiBhbnMgOj0gMSArIGFucy4gRXhpdAkJCSMKKyMJTm90ZXM6CUZvciBub24temVybyBYLCB0aGUgaW5leGFjdCBleGNlcHRpb24gd2lsbCBhbHdheXMgYmUJIworIwkJcmFpc2VkIGJ5IDcuMy4gVGhhdCBpcyB0aGUgb25seSBleGNlcHRpb24gcmFpc2VkIGJ5IDcuMy4jCisjCQlOb3RlIGFsc28gdGhhdCB3ZSB1c2UgdGhlIEZNT1ZFTSBpbnN0cnVjdGlvbiB0byBtb3ZlIFgJIworIwkJaW4gU3RlcCA3LjEgdG8gYXZvaWQgdW5uZWNlc3NhcnkgdHJhcHBpbmcuIChBbHRob3VnaAkjCisjCQl0aGUgRk1PVkVNIG1heSBub3Qgc2VlbSByZWxldmFudCBzaW5jZSBYIGlzIG5vcm1hbGl6ZWQsCSMKKyMJCXRoZSBwcmVjYXV0aW9uIHdpbGwgYmUgdXNlZnVsIGluIHRoZSBsaWJyYXJ5IHZlcnNpb24gb2YJIworIwkJdGhpcyBjb2RlIHdoZXJlIHRoZSBzZXBhcmF0ZSBlbnRyeSBmb3IgZGVub3JtYWxpemVkCSMKKyMJCWlucHV0cyB3aWxsIGJlIGRvbmUgYXdheSB3aXRoLikJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA4LglIYW5kbGUgZXhwKFgpIHdoZXJlIHxYfCA+PSAxNjM4MGxvZzIuCQkJIworIwkJOC4xCUlmIHxYfCA+IDE2NDgwIGxvZzIsIGdvIHRvIFN0ZXAgOS4JCSMKKyMJCShtaW1pYyAyLjIgLSAyLjYpCQkJCQkjCisjCQk4LjIJTiA6PSByb3VuZC10by1pbnRlZ2VyKCBYICogNjQvbG9nMiApCQkjCisjCQk4LjMJQ2FsY3VsYXRlIEogPSBOIG1vZCA2NCwgSiA9IDAsMSwuLi4sNjMJCSMKKyMJCTguNAlLIDo9IChOLUopLzY0LCBNMSA6PSB0cnVuY2F0ZShLLzIpLCBNID0gSy1NMSwJIworIwkJCUFkakZsYWcgOj0gMS4JCQkJCSMKKyMJCTguNQlDYWxjdWxhdGUgdGhlIGFkZHJlc3Mgb2YgdGhlIHN0b3JlZCB2YWx1ZQkjCisjCQkJMl4oSi82NCkuCQkJCQkjCisjCQk4LjYJQ3JlYXRlIHRoZSB2YWx1ZXMgU2NhbGUgPSAyXk0sIEFkalNjYWxlID0gMl5NMS4JIworIwkJOC43CUdvIHRvIFN0ZXAgMy4JCQkJCSMKKyMJTm90ZXM6CVJlZmVyIHRvIG5vdGVzIGZvciAyLjIgLSAyLjYuCQkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgOS4JSGFuZGxlIGV4cChYKSwgfFh8ID4gMTY0ODAgbG9nMi4JCQkjCisjCQk5LjEJSWYgWCA8IDAsIGdvIHRvIDkuMwkJCQkjCisjCQk5LjIJYW5zIDo9IEh1Z2UsIGdvIHRvIDkuNAkJCQkjCisjCQk5LjMJYW5zIDo9IFRpbnkuCQkJCQkjCisjCQk5LjQJUmVzdG9yZSB1c2VyIEZQQ1IuCQkJCSMKKyMJCTkuNQlSZXR1cm4gYW5zIDo9IGFucyAqIGFucy4gRXhpdC4JCQkjCisjCU5vdGVzOglFeHAoWCkgd2lsbCBzdXJlbHkgb3ZlcmZsb3cgb3IgdW5kZXJmbG93LCBkZXBlbmRpbmcgb24JIworIwkJWCdzIHNpZ24uICJIdWdlIiBhbmQgIlRpbnkiIGFyZSByZXNwZWN0aXZlbHkgbGFyZ2UvdGlueQkjCisjCQlleHRlbmRlZC1wcmVjaXNpb24gbnVtYmVycyB3aG9zZSBzcXVhcmUgb3Zlci91bmRlcmZsb3cJIworIwkJd2l0aCBhbiBpbmV4YWN0IHJlc3VsdC4gVGh1cywgOS41IGFsd2F5cyByYWlzZXMgdGhlCSMKKyMJCWluZXhhY3QgdG9nZXRoZXIgd2l0aCBlaXRoZXIgb3ZlcmZsb3cgb3IgdW5kZXJmbG93LgkjCisjCQkJCQkJCQkJIworIwlzZXRveG0xZAkJCQkJCQkjCisjCS0tLS0tLS0tCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgMS4JU2V0IGFucyA6PSAwCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCAyLglSZXR1cm4JYW5zIDo9IFggKyBhbnMuIEV4aXQuCQkJCSMKKyMJTm90ZXM6CVRoaXMgd2lsbCByZXR1cm4gWCB3aXRoIHRoZSBhcHByb3ByaWF0ZSByb3VuZGluZwkjCisjCQkgcHJlY2lzaW9uIHByZXNjcmliZWQgYnkgdGhlIHVzZXIgRlBDUi4JCQkjCisjCQkJCQkJCQkJIworIwlzZXRveG0xCQkJCQkJCQkjCisjCS0tLS0tLS0JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgMS4JQ2hlY2sgfFh8CQkJCQkJIworIwkJMS4xCUlmIHxYfCA+PSAxLzQsIGdvIHRvIFN0ZXAgMS4zLgkJCSMKKyMJCTEuMglHbyB0byBTdGVwIDcuCQkJCQkjCisjCQkxLjMJSWYgfFh8IDwgNzAgbG9nKDIpLCBnbyB0byBTdGVwIDIuCQkjCisjCQkxLjQJR28gdG8gU3RlcCAxMC4JCQkJCSMKKyMJTm90ZXM6CVRoZSB1c3VhbCBjYXNlIHNob3VsZCB0YWtlIHRoZSBicmFuY2hlcyAxLjEgLT4gMS4zIC0+IDIuIworIwkJSG93ZXZlciwgaXQgaXMgY29uY2VpdmFibGUgfFh8IGNhbiBiZSBzbWFsbCB2ZXJ5IG9mdGVuCSMKKyMJCWJlY2F1c2UgRVhQTTEgaXMgaW50ZW5kZWQgdG8gZXZhbHVhdGUgZXhwKFgpLTEJCSMKKyMJCWFjY3VyYXRlbHkgd2hlbiB8WHwgaXMgc21hbGwuIEZvciBmdXJ0aGVyIGRldGFpbHMgb24JIworIwkJdGhlIGNvbXBhcmlzb25zLCBzZWUgdGhlIG5vdGVzIG9uIFN0ZXAgMSBvZiBzZXRveC4JIworIwkJCQkJCQkJCSMKKyMJU3RlcCAyLglDYWxjdWxhdGUgTiA9IHJvdW5kLXRvLW5lYXJlc3QtaW50KCBYICogNjQvbG9nMiApLgkjCisjCQkyLjEJTiA6PSByb3VuZC10by1uZWFyZXN0LWludGVnZXIoIFggKiA2NC9sb2cyICkuCSMKKyMJCTIuMglDYWxjdWxhdGUJSiA9IE4gbW9kIDY0OyBzbyBKID0gMCwxLDIsLi4uLCAjCisjCQkJb3IgNjMuCQkJCQkJIworIwkJMi4zCUNhbGN1bGF0ZQlNID0gKE4gLSBKKS82NDsgc28gTiA9IDY0TSArIEouCSMKKyMJCTIuNAlDYWxjdWxhdGUgdGhlIGFkZHJlc3Mgb2YgdGhlIHN0b3JlZCB2YWx1ZSBvZgkjCisjCQkJMl4oSi82NCkuCQkJCQkjCisjCQkyLjUJQ3JlYXRlIHRoZSB2YWx1ZXMgU2MgPSAyXk0gYW5kCQkJIworIwkJCU9uZWJ5U2MgOj0gLTJeKC1NKS4JCQkJIworIwlOb3RlczoJU2VlIHRoZSBub3RlcyBvbiBTdGVwIDIgb2Ygc2V0b3guCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCAzLglDYWxjdWxhdGUgWCAtIE4qbG9nMi82NC4JCQkJIworIwkJMy4xCVIgOj0gWCArIE4qTDEsCQkJCQkjCisjCQkJCXdoZXJlIEwxIDo9IHNpbmdsZS1wcmVjaXNpb24oLWxvZzIvNjQpLgkjCisjCQkzLjIJUiA6PSBSICsgTipMMiwJCQkJCSMKKyMJCQkJTDIgOj0gZXh0ZW5kZWQtcHJlY2lzaW9uKC1sb2cyLzY0IC0gTDEpLiMKKyMJTm90ZXM6CUFwcGx5aW5nIHRoZSBhbmFseXNpcyBvZiBTdGVwIDMgb2Ygc2V0b3ggaW4gdGhpcyBjYXNlCSMKKyMJCXNob3dzIHRoYXQgfFJ8IDw9IDAuMDA1NSAobm90ZSB0aGF0IHxYfCA8PSA3MCBsb2cyIGluCSMKKyMJCXRoaXMgY2FzZSkuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA0LglBcHByb3hpbWF0ZSBleHAoUiktMSBieSBhIHBvbHlub21pYWwJCQkjCisjCQkJcCA9IFIrUipSKihBMStSKihBMitSKihBMytSKihBNCtSKihBNStSKkE2KSkpKSkJIworIwlOb3RlczoJYSkgSW4gb3JkZXIgdG8gcmVkdWNlIG1lbW9yeSBhY2Nlc3MsIHRoZSBjb2VmZmljaWVudHMJIworIwkJYXJlIG1hZGUgYXMgInNob3J0IiBhcyBwb3NzaWJsZTogQTEgKHdoaWNoIGlzIDEvMiksIEE1CSMKKyMJCWFuZCBBNiBhcmUgc2luZ2xlIHByZWNpc2lvbjsgQTIsIEEzIGFuZCBBNCBhcmUgZG91YmxlCSMKKyMJCXByZWNpc2lvbi4JCQkJCQkjCisjCQliKSBFdmVuIHdpdGggdGhlIHJlc3RyaWN0aW9uIGFib3ZlLAkJCSMKKyMJCQl8cCAtIChleHAoUiktMSl8IDwJfFJ8ICogMl4oLTcyLjcpCQkjCisjCQlmb3IgYWxsIHxSfCA8PSAwLjAwNTUuCQkJCQkjCisjCQljKSBUbyBmdWxseSB1dGlsaXplIHRoZSBwaXBlbGluZSwgcCBpcyBzZXBhcmF0ZWQgaW50bwkjCisjCQl0d28gaW5kZXBlbmRlbnQgcGllY2VzIG9mIHJvdWdobHkgZXF1YWwgY29tcGxleGl0eQkjCisjCQkJcCA9IFsgUipTKihBMiArIFMqKEE0ICsgUypBNikpIF0JKwkjCisjCQkJCVsgUiArIFMqKEExICsgUyooQTMgKyBTKkE1KSkgXQkJIworIwkJd2hlcmUgUyA9IFIqUi4JCQkJCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDUuCUNvbXB1dGUgMl4oSi82NCkqcCBieQkJCQkJIworIwkJCQlwIDo9IFQqcAkJCQkjCisjCQl3aGVyZSBUIGFuZCB0IGFyZSB0aGUgc3RvcmVkIHZhbHVlcyBmb3IgMl4oSi82NCkuCSMKKyMJTm90ZXM6CTJeKEovNjQpIGlzIHN0b3JlZCBhcyBUIGFuZCB0IHdoZXJlIFQrdCBhcHByb3hpbWF0ZXMJIworIwkJMl4oSi82NCkgdG8gcm91Z2hseSA4NSBiaXRzOyBUIGlzIGluIGV4dGVuZGVkIHByZWNpc2lvbgkjCisjCQlhbmQgdCBpcyBpbiBzaW5nbGUgcHJlY2lzaW9uLiBOb3RlIGFsc28gdGhhdCBUIGlzCSMKKyMJCXJvdW5kZWQgdG8gNjIgYml0cyBzbyB0aGF0IHRoZSBsYXN0IHR3byBiaXRzIG9mIFQgYXJlCSMKKyMJCXplcm8uIFRoZSByZWFzb24gZm9yIHN1Y2ggYSBzcGVjaWFsIGZvcm0gaXMgdGhhdCBULTEsCSMKKyMJCVQtMiwgYW5kIFQtOCB3aWxsIGFsbCBiZSBleGFjdCAtLS0gYSBwcm9wZXJ0eSB0aGF0IHdpbGwJIworIwkJYmUgZXhwbG9pdGVkIGluIFN0ZXAgNiBiZWxvdy4gVGhlIHRvdGFsIHJlbGF0aXZlIGVycm9yCSMKKyMJCWluIHAgaXMgbm8gYmlnZ2VyIHRoYW4gMl4oLTY3LjcpIGNvbXBhcmVkIHRvIHRoZSBmaW5hbAkjCisjCQlyZXN1bHQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgNi4JUmVjb25zdHJ1Y3Rpb24gb2YgZXhwKFgpLTEJCQkJIworIwkJCWV4cChYKS0xID0gMl5NICogKCAyXihKLzY0KSArIHAgLSAyXigtTSkgKS4JIworIwkJNi4xCUlmIE0gPD0gNjMsIGdvIHRvIFN0ZXAgNi4zLgkJCSMKKyMJCTYuMglhbnMgOj0gVCArIChwICsgKHQgKyBPbmVieVNjKSkuIEdvIHRvIDYuNgkjCisjCQk2LjMJSWYgTSA+PSAtMywgZ28gdG8gNi41LgkJCQkjCisjCQk2LjQJYW5zIDo9IChUICsgKHAgKyB0KSkgKyBPbmVieVNjLiBHbyB0byA2LjYJIworIwkJNi41CWFucyA6PSAoVCArIE9uZWJ5U2MpICsgKHAgKyB0KS4JCQkjCisjCQk2LjYJUmVzdG9yZSB1c2VyIEZQQ1IuCQkJCSMKKyMJCTYuNwlSZXR1cm4gYW5zIDo9IFNjICogYW5zLiBFeGl0LgkJCSMKKyMJTm90ZXM6CVRoZSB2YXJpb3VzIGFycmFuZ2VtZW50cyBvZiB0aGUgZXhwcmVzc2lvbnMgZ2l2ZQkjCisjCQlhY2N1cmF0ZSBldmFsdWF0aW9ucy4JCQkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgNy4JZXhwKFgpLTEgZm9yIHxYfCA8IDEvNC4JCQkJCSMKKyMJCTcuMQlJZiB8WHwgPj0gMl4oLTY1KSwgZ28gdG8gU3RlcCA5LgkJIworIwkJNy4yCUdvIHRvIFN0ZXAgOC4JCQkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgOC4JQ2FsY3VsYXRlIGV4cChYKS0xLCB8WHwgPCAyXigtNjUpLgkJCSMKKyMJCTguMQlJZiB8WHwgPCAyXigtMTYzMTIpLCBnb3RvIDguMwkJCSMKKyMJCTguMglSZXN0b3JlIEZQQ1I7IHJldHVybiBhbnMgOj0gWCAtIDJeKC0xNjM4MikuCSMKKyMJCQlFeGl0LgkJCQkJCSMKKyMJCTguMwlYIDo9IFggKiAyXigxNDApLgkJCQkjCisjCQk4LjQJUmVzdG9yZSBGUENSOyBhbnMgOj0gYW5zIC0gMl4oLTE2MzgyKS4JCSMKKyMJCSBSZXR1cm4gYW5zIDo9IGFucyoyXigxNDApLiBFeGl0CQkJIworIwlOb3RlczoJVGhlIGlkZWEgaXMgdG8gcmV0dXJuICJYIC0gdGlueSIgdW5kZXIgdGhlIHVzZXIJCSMKKyMJCXByZWNpc2lvbiBhbmQgcm91bmRpbmcgbW9kZXMuIFRvIGF2b2lkIHVubmVjZXNzYXJ5CSMKKyMJCWluZWZmaWNpZW5jeSwgd2Ugc3RheSBhd2F5IGZyb20gZGVub3JtYWxpemVkIG51bWJlcnMJIworIwkJdGhlIGJlc3Qgd2UgY2FuLiBGb3IgfFh8ID49IDJeKC0xNjMxMiksIHRoZQkJIworIwkJc3RyYWlnaHRmb3J3YXJkIDguMiBnZW5lcmF0ZXMgdGhlIGluZXhhY3QgZXhjZXB0aW9uIGFzCSMKKyMJCXRoZSBjYXNlIHdhcnJhbnRzLgkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCA5LglDYWxjdWxhdGUgZXhwKFgpLTEsIHxYfCA8IDEvNCwgYnkgYSBwb2x5bm9taWFsCQkjCisjCQkJcCA9IFggKyBYKlgqKEIxICsgWCooQjIgKyAuLi4gKyBYKkIxMikpCQkjCisjCU5vdGVzOglhKSBJbiBvcmRlciB0byByZWR1Y2UgbWVtb3J5IGFjY2VzcywgdGhlIGNvZWZmaWNpZW50cwkjCisjCQlhcmUgbWFkZSBhcyAic2hvcnQiIGFzIHBvc3NpYmxlOiBCMSAod2hpY2ggaXMgMS8yKSwgQjkJIworIwkJdG8gQjEyIGFyZSBzaW5nbGUgcHJlY2lzaW9uOyBCMyB0byBCOCBhcmUgZG91YmxlCSMKKyMJCXByZWNpc2lvbjsgYW5kIEIyIGlzIGRvdWJsZSBleHRlbmRlZC4JCQkjCisjCQliKSBFdmVuIHdpdGggdGhlIHJlc3RyaWN0aW9uIGFib3ZlLAkJCSMKKyMJCQl8cCAtIChleHAoWCktMSl8IDwgfFh8IDJeKC03MC42KQkJIworIwkJZm9yIGFsbCB8WHwgPD0gMC4yNTEuCQkJCQkjCisjCQlOb3RlIHRoYXQgMC4yNTEgaXMgc2xpZ2h0bHkgYmlnZ2VyIHRoYW4gMS80LgkJIworIwkJYykgVG8gZnVsbHkgcHJlc2VydmUgYWNjdXJhY3ksIHRoZSBwb2x5bm9taWFsIGlzCSMKKyMJCWNvbXB1dGVkIGFzCQkJCQkJIworIwkJCVggKyAoIFMqQjEgKwlRICkgd2hlcmUgUyA9IFgqWCBhbmQJCSMKKyMJCQlRCT0JWCpTKihCMiArIFgqKEIzICsgLi4uICsgWCpCMTIpKQkjCisjCQlkKSBUbyBmdWxseSB1dGlsaXplIHRoZSBwaXBlbGluZSwgUSBpcyBzZXBhcmF0ZWQgaW50bwkjCisjCQl0d28gaW5kZXBlbmRlbnQgcGllY2VzIG9mIHJvdWdobHkgZXF1YWwgY29tcGxleGl0eQkjCisjCQkJUSA9IFsgWCpTKihCMiArIFMqKEI0ICsgLi4uICsgUypCMTIpKSBdICsJIworIwkJCQlbIFMqUyooQjMgKyBTKihCNSArIC4uLiArIFMqQjExKSkgXQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDEwLiBDYWxjdWxhdGUgZXhwKFgpLTEgZm9yIHxYfCA+PSA3MCBsb2cgMi4JCSMKKyMJCTEwLjEgSWYgWCA+PSA3MGxvZzIgLCBleHAoWCkgLSAxID0gZXhwKFgpIGZvciBhbGwJIworIwkJcHJhY3RpY2FsIHB1cnBvc2VzLiBUaGVyZWZvcmUsIGdvIHRvIFN0ZXAgMSBvZiBzZXRveC4JIworIwkJMTAuMiBJZiBYIDw9IC03MGxvZzIsIGV4cChYKSAtIDEgPSAtMSBmb3IgYWxsIHByYWN0aWNhbAkjCisjCQlwdXJwb3Nlcy4JCQkJCQkjCisjCQlhbnMgOj0gLTEJCQkJCQkjCisjCQlSZXN0b3JlIHVzZXIgRlBDUgkJCQkJIworIwkJUmV0dXJuIGFucyA6PSBhbnMgKyAyXigtMTI2KS4gRXhpdC4JCQkjCisjCU5vdGVzOgkxMC4yIHdpbGwgYWx3YXlzIGNyZWF0ZSBhbiBpbmV4YWN0IGFuZCByZXR1cm4gLTEgKyB0aW55CSMKKyMJCWluIHRoZSB1c2VyIHJvdW5kaW5nIHByZWNpc2lvbiBhbmQgbW9kZS4JCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0wyOglsb25nCQkweDNGREMwMDAwLDB4ODJFMzA4NjUsMHg0MzYxQzRDNiwweDAwMDAwMDAwCisKK0VFWFBBMzoJbG9uZwkJMHgzRkE1NTU1NSwweDU1NTU0Q0MxCitFRVhQQTI6CWxvbmcJCTB4M0ZDNTU1NTUsMHg1NTU1NEE1NAorCitFTTFBNDoJbG9uZwkJMHgzRjgxMTExMSwweDExMTc0Mzg1CitFTTFBMzoJbG9uZwkJMHgzRkE1NTU1NSwweDU1NTU0RjVBCisKK0VNMUEyOglsb25nCQkweDNGQzU1NTU1LDB4NTU1NTU1NTUsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisKK0VNMUI4Oglsb25nCQkweDNFQzcxREUzLDB4QTU3NzQ2ODIKK0VNMUI3Oglsb25nCQkweDNFRkEwMUEwLDB4MTlEN0NCNjgKKworRU0xQjY6CWxvbmcJCTB4M0YyQTAxQTAsMHgxQTAxOURGMworRU0xQjU6CWxvbmcJCTB4M0Y1NkMxNkMsMHgxNkMxNzBFMgorCitFTTFCNDoJbG9uZwkJMHgzRjgxMTExMSwweDExMTExMTExCitFTTFCMzoJbG9uZwkJMHgzRkE1NTU1NSwweDU1NTU1NTU1CisKK0VNMUIyOglsb25nCQkweDNGRkMwMDAwLDB4QUFBQUFBQUEsMHhBQUFBQUFBQgorCWxvbmcJCTB4MDAwMDAwMDAKKworVFdPMTQwOglsb25nCQkweDQ4QjAwMDAwLDB4MDAwMDAwMDAKK1RXT04xNDA6CisJbG9uZwkJMHgzNzMwMDAwMCwweDAwMDAwMDAwCisKK0VFWFBUQkw6CisJbG9uZwkJMHgzRkZGMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4MTY0RDFGMywweEJDMDMwNzc0LDB4OUY4NDFBOUIKKwlsb25nCQkweDNGRkYwMDAwLDB4ODJDRDg2OTgsMHhBQzJCQTFEOCwweDlGQzFENUI5CisJbG9uZwkJMHgzRkZGMDAwMCwweDg0M0EyOEMzLDB4QUNERTQwNDgsMHhBMDcyODM2OQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4NUFBQzM2NywweENDNDg3QjE0LDB4MUZDNUM5NUMKKwlsb25nCQkweDNGRkYwMDAwLDB4ODcxRjYxOTYsMHg5RThEMTAxMCwweDFFRTg1QzlGCisJbG9uZwkJMHgzRkZGMDAwMCwweDg4OTgwRTgwLDB4OTJEQTg1MjgsMHg5RkEyMDcyOQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4QTE0RDU3NSwweDQ5NkVGRDlDLDB4QTA3QkY5QUYKKwlsb25nCQkweDNGRkYwMDAwLDB4OEI5NUMxRTMsMHhFQThCRDZFOCwweEEwMDIwRENGCisJbG9uZwkJMHgzRkZGMDAwMCwweDhEMUFERjVCLDB4N0U1QkE5RTQsMHgyMDVBNjNEQQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4RUE0Mzk4QiwweDQ1Q0Q1M0MwLDB4MUVCNzAwNTEKKwlsb25nCQkweDNGRkYwMDAwLDB4OTAzMURDNDMsMHgxNDY2QjFEQywweDFGNkVCMDI5CisJbG9uZwkJMHgzRkZGMDAwMCwweDkxQzNEMzczLDB4QUIxMUMzMzgsMHhBMDc4MTQ5NAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5MzVBMkIyRiwweDEzRTZFOTJDLDB4OUVCMzE5QjAKKwlsb25nCQkweDNGRkYwMDAwLDB4OTRGNEVGQTgsMHhGRUY3MDk2MCwweDIwMTc0NTdECisJbG9uZwkJMHgzRkZGMDAwMCwweDk2OTQyRDM3LDB4MjAxODVBMDAsMHgxRjExRDUzNworCWxvbmcJCTB4M0ZGRjAwMDAsMHg5ODM3RjA1MSwweDhEQjhBOTcwLDB4OUZCOTUyREQKKwlsb25nCQkweDNGRkYwMDAwLDB4OTlFMDQ1OTMsMHgyMEI3RkE2NCwweDFGRTQzMDg3CisJbG9uZwkJMHgzRkZGMDAwMCwweDlCOEQzOUI5LDB4RDU0RTU1MzgsMHgxRkEyQTgxOAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5RDNFRDlBNywweDJDRkZCNzUwLDB4MUZERTQ5NEQKKwlsb25nCQkweDNGRkYwMDAwLDB4OUVGNTMyNjAsMHg5MUExMTFBQywweDIwNTA0ODkwCisJbG9uZwkJMHgzRkZGMDAwMCwweEEwQjA1MTBGLDB4Qjk3MTRGQzQsMHhBMDczNjkxQworCWxvbmcJCTB4M0ZGRjAwMDAsMHhBMjcwNDMwMywweDBDNDk2ODE4LDB4MUY5QjdBMDUKKwlsb25nCQkweDNGRkYwMDAwLDB4QTQzNTE1QUUsMHgwOUU2ODBBMCwweEEwNzk3MTI2CisJbG9uZwkJMHgzRkZGMDAwMCwweEE1RkVENkE5LDB4QjE1MTM4RUMsMHhBMDcxQTE0MAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBN0NEOTNCNCwweEU5NjUzNTY4LDB4MjA0RjYyREEKKwlsb25nCQkweDNGRkYwMDAwLDB4QTlBMTVBQjQsMHhFQTdDMEVGOCwweDFGMjgzQzRBCisJbG9uZwkJMHgzRkZGMDAwMCwweEFCN0EzOUI1LDB4QTkzRUQzMzgsMHg5RjlBN0ZEQworCWxvbmcJCTB4M0ZGRjAwMDAsMHhBRDU4M0VFQSwweDQyQTE0QUM4LDB4QTA1QjNGQUMKKwlsb25nCQkweDNGRkYwMDAwLDB4QUYzQjc4QUQsMHg2OTBBNDM3NCwweDFGREYyNjEwCisJbG9uZwkJMHgzRkZGMDAwMCwweEIxMjNGNTgxLDB4RDJBQzI1OTAsMHg5RjcwNUY5MAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCMzExQzQxMiwweEE5MTEyNDg4LDB4MjAxRjY3OEEKKwlsb25nCQkweDNGRkYwMDAwLDB4QjUwNEYzMzMsMHhGOURFNjQ4NCwweDFGMzJGQjEzCisJbG9uZwkJMHgzRkZGMDAwMCwweEI2RkQ5MUUzLDB4MjhEMTc3OTAsMHgyMDAzOEIzMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCOEZCQUY0NywweDYyRkI5RUU4LDB4MjAwREMzQ0MKKwlsb25nCQkweDNGRkYwMDAwLDB4QkFGRjVBQjIsMHgxMzNFNDVGQywweDlGOEIyQUU2CisJbG9uZwkJMHgzRkZGMDAwMCwweEJEMDhBMzlGLDB4NTgwQzM2QzAsMHhBMDJCQkY3MAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCRjE3OTlCNiwweDdBNzMxMDg0LDB4QTAwQkY1MTgKKwlsb25nCQkweDNGRkYwMDAwLDB4QzEyQzRDQ0EsMHg2NjcwOTQ1OCwweEEwNDFERDQxCisJbG9uZwkJMHgzRkZGMDAwMCwweEMzNDZDQ0RBLDB4MjQ5NzY0MDgsMHg5RkRGMTM3QgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDNTY3MkExMSwweDU1MDZEQURDLDB4MjAxRjE1NjgKKwlsb25nCQkweDNGRkYwMDAwLDB4Qzc4RDc0QzgsMHhBQkI5QjE1QywweDFGQzEzQTJFCisJbG9uZwkJMHgzRkZGMDAwMCwweEM5QjlCRDg2LDB4NkUyRjI3QTQsMHhBMDNGOEYwMworCWxvbmcJCTB4M0ZGRjAwMDAsMHhDQkVDMTRGRSwweEYyNzI3QzVDLDB4MUZGNDkwN0QKKwlsb25nCQkweDNGRkYwMDAwLDB4Q0UyNDhDMTUsMHgxRjg0ODBFNCwweDlFNkU1M0U0CisJbG9uZwkJMHgzRkZGMDAwMCwweEQwNjMzM0RBLDB4RUYyQjI1OTQsMHgxRkQ2RDQ1QworCWxvbmcJCTB4M0ZGRjAwMDAsMHhEMkE4MUQ5MSwweEYxMkFFNDVDLDB4QTA3NkVEQjkKKwlsb25nCQkweDNGRkYwMDAwLDB4RDRGMzVBQUIsMHhDRkVERkEyMCwweDlGQTZERTIxCisJbG9uZwkJMHgzRkZGMDAwMCwweEQ3NDRGQ0NBLDB4RDY5RDZBRjQsMHgxRUU2OUEyRgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhEOTlEMTVDMiwweDc4QUZEN0I0LDB4MjA3RjQzOUYKKwlsb25nCQkweDNGRkYwMDAwLDB4REJGQkI3OTcsMHhEQUYyMzc1NCwweDIwMUVDMjA3CisJbG9uZwkJMHgzRkZGMDAwMCwweERFNjBGNDgyLDB4NUUwRTkxMjQsMHg5RThCRTE3NQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhFMENDREVFQywweDJBOTRFMTEwLDB4MjAwMzJDNEIKKwlsb25nCQkweDNGRkYwMDAwLDB4RTMzRjg5NzIsMHhCRThBNUE1MCwweDIwMDRERkY1CisJbG9uZwkJMHgzRkZGMDAwMCwweEU1QjkwNkU3LDB4N0M4MzQ4QTgsMHgxRTcyRjQ3QQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhFODM5NkE1MCwweDNDNEJEQzY4LDB4MUY3MjJGMjIKKwlsb25nCQkweDNGRkYwMDAwLDB4RUFDMEM2RTcsMHhERDI0MzkzMCwweEEwMTdFOTQ1CisJbG9uZwkJMHgzRkZGMDAwMCwweEVENEYzMDFFLDB4RDk5NDJCODQsMHgxRjQwMUE1QgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhFRkU0Qjk5QiwweERDREFGNUNDLDB4OUZCOUE5RTMKKwlsb25nCQkweDNGRkYwMDAwLDB4RjI4MTc3M0MsMHg1OUZGQjEzOCwweDIwNzQ0QzA1CisJbG9uZwkJMHgzRkZGMDAwMCwweEY1MjU3RDE1LDB4MjQ4NkNDMkMsMHgxRjc3M0ExOQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhGN0QwREY3MywweDBBRDEzQkI4LDB4MUZGRTkwRDUKKwlsb25nCQkweDNGRkYwMDAwLDB4RkE4M0IyREIsMHg3MjJBMDMzQywweEEwNDFFRDIyCisJbG9uZwkJMHgzRkZGMDAwMCwweEZEM0UwQzBDLDB4RjQ4NkMxNzQsMHgxRjg1M0YzQQorCisJc2V0CQlBREpGTEFHLExfU0NSMgorCXNldAkJU0NBTEUsRlBfU0NSMAorCXNldAkJQURKU0NBTEUsRlBfU0NSMQorCXNldAkJU0MsRlBfU0NSMAorCXNldAkJT05FQllTQyxGUF9TQ1IxCisKKwlnbG9iYWwJCXNldG94CitzZXRveDoKKyMtLWVudHJ5IHBvaW50IGZvciBFWFAoWCksIGhlcmUgWCBpcyBmaW5pdGUsIG5vbi16ZXJvLCBhbmQgbm90IE5hTidzCisKKyMtLVN0ZXAgMS4KKwltb3YubAkJKCVhMCksJWQxCQkjIGxvYWQgcGFydCBvZiBpbnB1dCBYCisJYW5kLmwJCSYweDdGRkYwMDAwLCVkMQkJIyBiaWFzZWQgZXhwby4gb2YgWAorCWNtcC5sCQklZDEsJjB4M0ZCRTAwMDAJCSMgMl4oLTY1KQorCWJnZS5iCQlFWFBDMQkJCSMgbm9ybWFsIGNhc2UKKwlicmEJCUVYUFNNCisKK0VYUEMxOgorIy0tVGhlIGNhc2UgfFh8ID49IDJeKC02NSkKKwltb3YudwkJNCglYTApLCVkMQkJIyBleHBvLiBhbmQgcGFydGlhbCBzaWcuIG9mIHxYfAorCWNtcC5sCQklZDEsJjB4NDAwQ0IxNjcJCSMgMTYzODAgbG9nMiB0cnVuYy4gMTYgYml0cworCWJsdC5iCQlFWFBNQUlOCQkJIyBub3JtYWwgY2FzZQorCWJyYQkJRUVYUEJJRworCitFWFBNQUlOOgorIy0tU3RlcCAyLgorIy0tVGhpcyBpcyB0aGUgbm9ybWFsIGJyYW5jaDoJMl4oLTY1KSA8PSB8WHwgPCAxNjM4MCBsb2cyLgorCWZtb3YueAkJKCVhMCksJWZwMAkJIyBsb2FkIGlucHV0IGZyb20gKGEwKQorCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLnMJCSYweDQyQjhBQTNCLCVmcDAJIyA2NC9sb2cyICogWAorCWZtb3ZtLngJCSYweGMsLSglc3ApCQkjIHNhdmUgZnAyIHslZnAyLyVmcDN9CisJbW92LmwJCSYwLEFESkZMQUcoJWE2KQorCWZtb3YubAkJJWZwMCwlZDEJCSMgTiA9IGludCggWCAqIDY0L2xvZzIgKQorCWxlYQkJRUVYUFRCTCglcGMpLCVhMQorCWZtb3YubAkJJWQxLCVmcDAJCSMgY29udmVydCB0byBmbG9hdGluZy1mb3JtYXQKKworCW1vdi5sCQklZDEsTF9TQ1IxKCVhNikJCSMgc2F2ZSBOIHRlbXBvcmFyaWx5CisJYW5kLmwJCSYweDNGLCVkMQkJIyBEMCBpcyBKID0gTiBtb2QgNjQKKwlsc2wubAkJJjQsJWQxCisJYWRkLmwJCSVkMSwlYTEJCQkjIGFkZHJlc3Mgb2YgMl4oSi82NCkKKwltb3YubAkJTF9TQ1IxKCVhNiksJWQxCisJYXNyLmwJCSY2LCVkMQkJCSMgRDAgaXMgTQorCWFkZC53CQkmMHgzRkZGLCVkMQkJIyBiaWFzZWQgZXhwby4gb2YgMl4oTSkKKwltb3YudwkJTDIoJXBjKSxMX1NDUjEoJWE2KQkjIHByZWZldGNoIEwyLCBubyBuZWVkIGluIENCCisKK0VYUENPTlQxOgorIy0tU3RlcCAzLgorIy0tZnAxLGZwMiBzYXZlZCBvbiB0aGUgc3RhY2suIGZwMCBpcyBOLCBmcDEgaXMgWCwKKyMtLWEwIHBvaW50cyB0byAyXihKLzY0KSwgRDAgaXMgYmlhc2VkIGV4cG8uIG9mIDJeKE0pCisJZm1vdi54CQklZnAwLCVmcDIKKwlmbXVsLnMJCSYweEJDMzE3MjE4LCVmcDAJIyBOICogTDEsIEwxID0gbGVhZCgtbG9nMi82NCkKKwlmbXVsLngJCUwyKCVwYyksJWZwMgkJIyBOICogTDIsIEwxK0wyID0gLWxvZzIvNjQKKwlmYWRkLngJCSVmcDEsJWZwMAkJIyBYICsgTipMMQorCWZhZGQueAkJJWZwMiwlZnAwCQkjIGZwMCBpcyBSLCByZWR1Y2VkIGFyZy4KKworIy0tU3RlcCA0LgorIy0tV0UgTk9XIENPTVBVVEUgRVhQKFIpLTEgQlkgQSBQT0xZTk9NSUFMCisjLS0gUiArIFIqUiooQTEgKyBSKihBMiArIFIqKEEzICsgUiooQTQgKyBSKkE1KSkpKQorIy0tVE8gRlVMTFkgVVRJTElaRSBUSEUgUElQRUxJTkUsIFdFIENPTVBVVEUgUyA9IFIqUgorIy0tW1IrUipTKihBMitTKkE0KV0gKyBbUyooQTErUyooQTMrUypBNSkpXQorCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLngJCSVmcDEsJWZwMQkJIyBmcDEgSVMgUyA9IFIqUgorCisJZm1vdi5zCQkmMHgzQUI2MEI3MCwlZnAyCSMgZnAyIElTIEE1CisKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBmcDIgSVMgUypBNQorCWZtb3YueAkJJWZwMSwlZnAzCisJZm11bC5zCQkmMHgzQzA4ODg5NSwlZnAzCSMgZnAzIElTIFMqQTQKKworCWZhZGQuZAkJRUVYUEEzKCVwYyksJWZwMgkjIGZwMiBJUyBBMytTKkE1CisJZmFkZC5kCQlFRVhQQTIoJXBjKSwlZnAzCSMgZnAzIElTIEEyK1MqQTQKKworCWZtdWwueAkJJWZwMSwlZnAyCQkjIGZwMiBJUyBTKihBMytTKkE1KQorCW1vdi53CQklZDEsU0NBTEUoJWE2KQkJIyBTQ0FMRSBpcyAyXihNKSBpbiBleHRlbmRlZAorCW1vdi5sCQkmMHg4MDAwMDAwMCxTQ0FMRSs0KCVhNikKKwljbHIubAkJU0NBTEUrOCglYTYpCisKKwlmbXVsLngJCSVmcDEsJWZwMwkJIyBmcDMgSVMgUyooQTIrUypBNCkKKworCWZhZGQucwkJJjB4M0YwMDAwMDAsJWZwMgkjIGZwMiBJUyBBMStTKihBMytTKkE1KQorCWZtdWwueAkJJWZwMCwlZnAzCQkjIGZwMyBJUyBSKlMqKEEyK1MqQTQpCisKKwlmbXVsLngJCSVmcDEsJWZwMgkJIyBmcDIgSVMgUyooQTErUyooQTMrUypBNSkpCisJZmFkZC54CQklZnAzLCVmcDAJCSMgZnAwIElTIFIrUipTKihBMitTKkE0KSwKKworCWZtb3YueAkJKCVhMSkrLCVmcDEJCSMgZnAxIGlzIGxlYWQuIHB0LiBvZiAyXihKLzY0KQorCWZhZGQueAkJJWZwMiwlZnAwCQkjIGZwMCBpcyBFWFAoUikgLSAxCisKKyMtLVN0ZXAgNQorIy0tZmluYWwgcmVjb25zdHJ1Y3Rpb24gcHJvY2VzcworIy0tRVhQKFgpID0gMl5NICogKCAyXihKLzY0KSArIDJeKEovNjQpKihFWFAoUiktMSkgKQorCisJZm11bC54CQklZnAxLCVmcDAJCSMgMl4oSi82NCkqKEV4cChSKS0xKQorCWZtb3ZtLngJCSglc3ApKywmMHgzMAkJIyBmcDIgcmVzdG9yZWQgeyVmcDIvJWZwM30KKwlmYWRkLnMJCSglYTEpLCVmcDAJCSMgYWNjdXJhdGUgMl4oSi82NCkKKworCWZhZGQueAkJJWZwMSwlZnAwCQkjIDJeKEovNjQpICsgMl4oSi82NCkqLi4uCisJbW92LmwJCUFESkZMQUcoJWE2KSwlZDEKKworIy0tU3RlcCA2CisJdHN0LmwJCSVkMQorCWJlcS5iCQlOT1JNQUwKK0FESlVTVDoKKwlmbXVsLngJCUFESlNDQUxFKCVhNiksJWZwMAorTk9STUFMOgorCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlciBGUENSCisJbW92LmIJCSZGTVVMX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTVVMCisJZm11bC54CQlTQ0FMRSglYTYpLCVmcDAJCSMgbXVsdGlwbHkgMl4oTSkKKwlicmEJCXRfY2F0Y2gKKworRVhQU006CisjLS1TdGVwIDcKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyBsb2FkIFgKKwlmbW92LmwJCSVkMCwlZnBjcgorCWZhZGQucwkJJjB4M0Y4MDAwMDAsJWZwMAkjIDErWCBpbiB1c2VyIG1vZGUKKwlicmEJCXRfcGlueDIKKworRUVYUEJJRzoKKyMtLVN0ZXAgOAorCWNtcC5sCQklZDEsJjB4NDAwQ0IyN0MJCSMgMTY0ODAgbG9nMgorCWJndC5iCQlFWFAyQklHCisjLS1TdGVwcyA4LjIgLS0gOC42CisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIGxvYWQgaW5wdXQgZnJvbSAoYTApCisKKwlmbW92LngJCSVmcDAsJWZwMQorCWZtdWwucwkJJjB4NDJCOEFBM0IsJWZwMAkjIDY0L2xvZzIgKiBYCisJZm1vdm0ueAkJJjB4YywtKCVzcCkJCSMgc2F2ZSBmcDIgeyVmcDIvJWZwM30KKwltb3YubAkJJjEsQURKRkxBRyglYTYpCisJZm1vdi5sCQklZnAwLCVkMQkJIyBOID0gaW50KCBYICogNjQvbG9nMiApCisJbGVhCQlFRVhQVEJMKCVwYyksJWExCisJZm1vdi5sCQklZDEsJWZwMAkJIyBjb252ZXJ0IHRvIGZsb2F0aW5nLWZvcm1hdAorCW1vdi5sCQklZDEsTF9TQ1IxKCVhNikJCSMgc2F2ZSBOIHRlbXBvcmFyaWx5CisJYW5kLmwJCSYweDNGLCVkMQkJIyBEMCBpcyBKID0gTiBtb2QgNjQKKwlsc2wubAkJJjQsJWQxCisJYWRkLmwJCSVkMSwlYTEJCQkjIGFkZHJlc3Mgb2YgMl4oSi82NCkKKwltb3YubAkJTF9TQ1IxKCVhNiksJWQxCisJYXNyLmwJCSY2LCVkMQkJCSMgRDAgaXMgSworCW1vdi5sCQklZDEsTF9TQ1IxKCVhNikJCSMgc2F2ZSBLIHRlbXBvcmFyaWx5CisJYXNyLmwJCSYxLCVkMQkJCSMgRDAgaXMgTTEKKwlzdWIubAkJJWQxLExfU0NSMSglYTYpCQkjIGExIGlzIE0KKwlhZGQudwkJJjB4M0ZGRiwlZDEJCSMgYmlhc2VkIGV4cG8uIG9mIDJeKE0xKQorCW1vdi53CQklZDEsQURKU0NBTEUoJWE2KQkjIEFESlNDQUxFIDo9IDJeKE0xKQorCW1vdi5sCQkmMHg4MDAwMDAwMCxBREpTQ0FMRSs0KCVhNikKKwljbHIubAkJQURKU0NBTEUrOCglYTYpCisJbW92LmwJCUxfU0NSMSglYTYpLCVkMQkJIyBEMCBpcyBNCisJYWRkLncJCSYweDNGRkYsJWQxCQkjIGJpYXNlZCBleHBvLiBvZiAyXihNKQorCWJyYS53CQlFWFBDT05UMQkJIyBnbyBiYWNrIHRvIFN0ZXAgMworCitFWFAyQklHOgorIy0tU3RlcCA5CisJdHN0LmIJCSglYTApCQkJIyBpcyBYIHBvc2l0aXZlIG9yIG5lZ2F0aXZlPworCWJtaQkJdF91bmZsMgorCWJyYQkJdF9vdmZsMgorCisJZ2xvYmFsCQlzZXRveGQKK3NldG94ZDoKKyMtLWVudHJ5IHBvaW50IGZvciBFWFAoWCksIFggaXMgZGVub3JtYWxpemVkCisJbW92LmwJCSglYTApLC0oJXNwKQorCWFuZGkubAkJJjB4ODAwMDAwMDAsKCVzcCkKKwlvcmkubAkJJjB4MDA4MDAwMDAsKCVzcCkJIyBzaWduKFgpKjJeKC0xMjYpCisKKwlmbW92LnMJCSYweDNGODAwMDAwLCVmcDAKKworCWZtb3YubAkJJWQwLCVmcGNyCisJZmFkZC5zCQkoJXNwKSssJWZwMAorCWJyYQkJdF9waW54MgorCisJZ2xvYmFsCQlzZXRveG0xCitzZXRveG0xOgorIy0tZW50cnkgcG9pbnQgZm9yIEVYUE0xKFgpLCBoZXJlIFggaXMgZmluaXRlLCBub24temVybywgbm9uLU5hTgorCisjLS1TdGVwIDEuCisjLS1TdGVwIDEuMQorCW1vdi5sCQkoJWEwKSwlZDEJCSMgbG9hZCBwYXJ0IG9mIGlucHV0IFgKKwlhbmQubAkJJjB4N0ZGRjAwMDAsJWQxCQkjIGJpYXNlZCBleHBvLiBvZiBYCisJY21wLmwJCSVkMSwmMHgzRkZEMDAwMAkJIyAxLzQKKwliZ2UuYgkJRU0xQ09OMQkJCSMgfFh8ID49IDEvNAorCWJyYQkJRU0xU00KKworRU0xQ09OMToKKyMtLVN0ZXAgMS4zCisjLS1UaGUgY2FzZSB8WHwgPj0gMS80CisJbW92LncJCTQoJWEwKSwlZDEJCSMgZXhwby4gYW5kIHBhcnRpYWwgc2lnLiBvZiB8WHwKKwljbXAubAkJJWQxLCYweDQwMDRDMjE1CQkjIDcwbG9nMiByb3VuZGVkIHVwIHRvIDE2IGJpdHMKKwlibGUuYgkJRU0xTUFJTgkJCSMgMS80IDw9IHxYfCA8PSA3MGxvZzIKKwlicmEJCUVNMUJJRworCitFTTFNQUlOOgorIy0tU3RlcCAyLgorIy0tVGhpcyBpcyB0aGUgY2FzZToJMS80IDw9IHxYfCA8PSA3MCBsb2cyLgorCWZtb3YueAkJKCVhMCksJWZwMAkJIyBsb2FkIGlucHV0IGZyb20gKGEwKQorCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLnMJCSYweDQyQjhBQTNCLCVmcDAJIyA2NC9sb2cyICogWAorCWZtb3ZtLngJCSYweGMsLSglc3ApCQkjIHNhdmUgZnAyIHslZnAyLyVmcDN9CisJZm1vdi5sCQklZnAwLCVkMQkJIyBOID0gaW50KCBYICogNjQvbG9nMiApCisJbGVhCQlFRVhQVEJMKCVwYyksJWExCisJZm1vdi5sCQklZDEsJWZwMAkJIyBjb252ZXJ0IHRvIGZsb2F0aW5nLWZvcm1hdAorCisJbW92LmwJCSVkMSxMX1NDUjEoJWE2KQkJIyBzYXZlIE4gdGVtcG9yYXJpbHkKKwlhbmQubAkJJjB4M0YsJWQxCQkjIEQwIGlzIEogPSBOIG1vZCA2NAorCWxzbC5sCQkmNCwlZDEKKwlhZGQubAkJJWQxLCVhMQkJCSMgYWRkcmVzcyBvZiAyXihKLzY0KQorCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDEKKwlhc3IubAkJJjYsJWQxCQkJIyBEMCBpcyBNCisJbW92LmwJCSVkMSxMX1NDUjEoJWE2KQkJIyBzYXZlIGEgY29weSBvZiBNCisKKyMtLVN0ZXAgMy4KKyMtLWZwMSxmcDIgc2F2ZWQgb24gdGhlIHN0YWNrLiBmcDAgaXMgTiwgZnAxIGlzIFgsCisjLS1hMCBwb2ludHMgdG8gMl4oSi82NCksIEQwIGFuZCBhMSBib3RoIGNvbnRhaW4gTQorCWZtb3YueAkJJWZwMCwlZnAyCisJZm11bC5zCQkmMHhCQzMxNzIxOCwlZnAwCSMgTiAqIEwxLCBMMSA9IGxlYWQoLWxvZzIvNjQpCisJZm11bC54CQlMMiglcGMpLCVmcDIJCSMgTiAqIEwyLCBMMStMMiA9IC1sb2cyLzY0CisJZmFkZC54CQklZnAxLCVmcDAJCSMgWCArIE4qTDEKKwlmYWRkLngJCSVmcDIsJWZwMAkJIyBmcDAgaXMgUiwgcmVkdWNlZCBhcmcuCisJYWRkLncJCSYweDNGRkYsJWQxCQkjIEQwIGlzIGJpYXNlZCBleHBvLiBvZiAyXk0KKworIy0tU3RlcCA0LgorIy0tV0UgTk9XIENPTVBVVEUgRVhQKFIpLTEgQlkgQSBQT0xZTk9NSUFMCisjLS0gUiArIFIqUiooQTEgKyBSKihBMiArIFIqKEEzICsgUiooQTQgKyBSKihBNSArIFIqQTYpKSkpKQorIy0tVE8gRlVMTFkgVVRJTElaRSBUSEUgUElQRUxJTkUsIFdFIENPTVBVVEUgUyA9IFIqUgorIy0tW1IqUyooQTIrUyooQTQrUypBNikpXSArIFtSK1MqKEExK1MqKEEzK1MqQTUpKV0KKworCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC54CQklZnAxLCVmcDEJCSMgZnAxIElTIFMgPSBSKlIKKworCWZtb3YucwkJJjB4Mzk1MDA5N0IsJWZwMgkjIGZwMiBJUyBhNgorCisJZm11bC54CQklZnAxLCVmcDIJCSMgZnAyIElTIFMqQTYKKwlmbW92LngJCSVmcDEsJWZwMworCWZtdWwucwkJJjB4M0FCNjBCNkEsJWZwMwkjIGZwMyBJUyBTKkE1CisKKwlmYWRkLmQJCUVNMUE0KCVwYyksJWZwMgkJIyBmcDIgSVMgQTQrUypBNgorCWZhZGQuZAkJRU0xQTMoJXBjKSwlZnAzCQkjIGZwMyBJUyBBMytTKkE1CisJbW92LncJCSVkMSxTQyglYTYpCQkjIFNDIGlzIDJeKE0pIGluIGV4dGVuZGVkCisJbW92LmwJCSYweDgwMDAwMDAwLFNDKzQoJWE2KQorCWNsci5sCQlTQys4KCVhNikKKworCWZtdWwueAkJJWZwMSwlZnAyCQkjIGZwMiBJUyBTKihBNCtTKkE2KQorCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDEJCSMgRDAgaXMJTQorCW5lZy53CQklZDEJCQkjIEQwIGlzIC1NCisJZm11bC54CQklZnAxLCVmcDMJCSMgZnAzIElTIFMqKEEzK1MqQTUpCisJYWRkLncJCSYweDNGRkYsJWQxCQkjIGJpYXNlZCBleHBvLiBvZiAyXigtTSkKKwlmYWRkLmQJCUVNMUEyKCVwYyksJWZwMgkJIyBmcDIgSVMgQTIrUyooQTQrUypBNikKKwlmYWRkLnMJCSYweDNGMDAwMDAwLCVmcDMJIyBmcDMgSVMgQTErUyooQTMrUypBNSkKKworCWZtdWwueAkJJWZwMSwlZnAyCQkjIGZwMiBJUyBTKihBMitTKihBNCtTKkE2KSkKKwlvci53CQkmMHg4MDAwLCVkMQkJIyBzaWduZWQvZXhwby4gb2YgLTJeKC1NKQorCW1vdi53CQklZDEsT05FQllTQyglYTYpCSMgT25lYnlTYyBpcyAtMl4oLU0pCisJbW92LmwJCSYweDgwMDAwMDAwLE9ORUJZU0MrNCglYTYpCisJY2xyLmwJCU9ORUJZU0MrOCglYTYpCisJZm11bC54CQklZnAzLCVmcDEJCSMgZnAxIElTIFMqKEExK1MqKEEzK1MqQTUpKQorCisJZm11bC54CQklZnAwLCVmcDIJCSMgZnAyIElTIFIqUyooQTIrUyooQTQrUypBNikpCisJZmFkZC54CQklZnAxLCVmcDAJCSMgZnAwIElTIFIrUyooQTErUyooQTMrUypBNSkpCisKKwlmYWRkLngJCSVmcDIsJWZwMAkJIyBmcDAgSVMgRVhQKFIpLTEKKworCWZtb3ZtLngJCSglc3ApKywmMHgzMAkJIyBmcDIgcmVzdG9yZWQgeyVmcDIvJWZwM30KKworIy0tU3RlcCA1CisjLS1Db21wdXRlIDJeKEovNjQpKnAKKworCWZtdWwueAkJKCVhMSksJWZwMAkJIyAyXihKLzY0KSooRXhwKFIpLTEpCisKKyMtLVN0ZXAgNgorIy0tU3RlcCA2LjEKKwltb3YubAkJTF9TQ1IxKCVhNiksJWQxCQkjIHJldHJpZXZlIE0KKwljbXAubAkJJWQxLCY2MworCWJsZS5iCQlNTEU2MworIy0tU3RlcCA2LjIJTSA+PSA2NAorCWZtb3YucwkJMTIoJWExKSwlZnAxCQkjIGZwMSBpcyB0CisJZmFkZC54CQlPTkVCWVNDKCVhNiksJWZwMQkjIGZwMSBpcyB0K09uZWJ5U2MKKwlmYWRkLngJCSVmcDEsJWZwMAkJIyBwKyh0K09uZWJ5U2MpLCBmcDEgcmVsZWFzZWQKKwlmYWRkLngJCSglYTEpLCVmcDAJCSMgVCsocCsodCtPbmVieVNjKSkKKwlicmEJCUVNMVNDQUxFCitNTEU2MzoKKyMtLVN0ZXAgNi4zCU0gPD0gNjMKKwljbXAubAkJJWQxLCYtMworCWJnZS5iCQlNR0VOMworTUxUTjM6CisjLS1TdGVwIDYuNAlNIDw9IC00CisJZmFkZC5zCQkxMiglYTEpLCVmcDAJCSMgcCt0CisJZmFkZC54CQkoJWExKSwlZnAwCQkjIFQrKHArdCkKKwlmYWRkLngJCU9ORUJZU0MoJWE2KSwlZnAwCSMgT25lYnlTYyArIChUKyhwK3QpKQorCWJyYQkJRU0xU0NBTEUKK01HRU4zOgorIy0tU3RlcCA2LjUJLTMgPD0gTSA8PSA2MworCWZtb3YueAkJKCVhMSkrLCVmcDEJCSMgZnAxIGlzIFQKKwlmYWRkLnMJCSglYTEpLCVmcDAJCSMgZnAwIGlzIHArdAorCWZhZGQueAkJT05FQllTQyglYTYpLCVmcDEJIyBmcDEgaXMgVCtPbmVieVNjCisJZmFkZC54CQklZnAxLCVmcDAJCSMgKFQrT25lYnlTYykrKHArdCkKKworRU0xU0NBTEU6CisjLS1TdGVwIDYuNgorCWZtb3YubAkJJWQwLCVmcGNyCisJZm11bC54CQlTQyglYTYpLCVmcDAKKwlicmEJCXRfaW54MgorCitFTTFTTToKKyMtLVN0ZXAgNwl8WHwgPCAxLzQuCisJY21wLmwJCSVkMSwmMHgzRkJFMDAwMAkJIyAyXigtNjUpCisJYmdlLmIJCUVNMVBPTFkKKworRU0xVElOWToKKyMtLVN0ZXAgOAl8WHwgPCAyXigtNjUpCisJY21wLmwJCSVkMSwmMHgwMDMzMDAwMAkJIyAyXigtMTYzMTIpCisJYmx0LmIJCUVNMTJUSU5ZCisjLS1TdGVwIDguMgorCW1vdi5sCQkmMHg4MDAxMDAwMCxTQyglYTYpCSMgU0MgaXMgLTJeKC0xNjM4MikKKwltb3YubAkJJjB4ODAwMDAwMDAsU0MrNCglYTYpCisJY2xyLmwJCVNDKzgoJWE2KQorCWZtb3YueAkJKCVhMCksJWZwMAorCWZtb3YubAkJJWQwLCVmcGNyCisJbW92LmIJCSZGQUREX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgQURECisJZmFkZC54CQlTQyglYTYpLCVmcDAKKwlicmEJCXRfY2F0Y2gKKworRU0xMlRJTlk6CisjLS1TdGVwIDguMworCWZtb3YueAkJKCVhMCksJWZwMAorCWZtdWwuZAkJVFdPMTQwKCVwYyksJWZwMAorCW1vdi5sCQkmMHg4MDAxMDAwMCxTQyglYTYpCisJbW92LmwJCSYweDgwMDAwMDAwLFNDKzQoJWE2KQorCWNsci5sCQlTQys4KCVhNikKKwlmYWRkLngJCVNDKCVhNiksJWZwMAorCWZtb3YubAkJJWQwLCVmcGNyCisJbW92LmIJCSZGTVVMX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTVVMCisJZm11bC5kCQlUV09OMTQwKCVwYyksJWZwMAorCWJyYQkJdF9jYXRjaAorCitFTTFQT0xZOgorIy0tU3RlcCA5CWV4cChYKS0xIGJ5IGEgc2ltcGxlIHBvbHlub21pYWwKKwlmbW92LngJCSglYTApLCVmcDAJCSMgZnAwIGlzIFgKKwlmbXVsLngJCSVmcDAsJWZwMAkJIyBmcDAgaXMgUyA6PSBYKlgKKwlmbW92bS54CQkmMHhjLC0oJXNwKQkJIyBzYXZlIGZwMiB7JWZwMi8lZnAzfQorCWZtb3YucwkJJjB4MkYzMENBQTgsJWZwMQkjIGZwMSBpcyBCMTIKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBmcDEgaXMgUypCMTIKKwlmbW92LnMJCSYweDMxMEY4MjkwLCVmcDIJIyBmcDIgaXMgQjExCisJZmFkZC5zCQkmMHgzMkQ3MzIyMCwlZnAxCSMgZnAxIGlzIEIxMCtTKkIxMgorCisJZm11bC54CQklZnAwLCVmcDIJCSMgZnAyIGlzIFMqQjExCisJZm11bC54CQklZnAwLCVmcDEJCSMgZnAxIGlzIFMqKEIxMCArIC4uLgorCisJZmFkZC5zCQkmMHgzNDkzRjI4MSwlZnAyCSMgZnAyIGlzIEI5K1MqLi4uCisJZmFkZC5kCQlFTTFCOCglcGMpLCVmcDEJCSMgZnAxIGlzIEI4K1MqLi4uCisKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBmcDIgaXMgUyooQjkrLi4uCisJZm11bC54CQklZnAwLCVmcDEJCSMgZnAxIGlzIFMqKEI4Ky4uLgorCisJZmFkZC5kCQlFTTFCNyglcGMpLCVmcDIJCSMgZnAyIGlzIEI3K1MqLi4uCisJZmFkZC5kCQlFTTFCNiglcGMpLCVmcDEJCSMgZnAxIGlzIEI2K1MqLi4uCisKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBmcDIgaXMgUyooQjcrLi4uCisJZm11bC54CQklZnAwLCVmcDEJCSMgZnAxIGlzIFMqKEI2Ky4uLgorCisJZmFkZC5kCQlFTTFCNSglcGMpLCVmcDIJCSMgZnAyIGlzIEI1K1MqLi4uCisJZmFkZC5kCQlFTTFCNCglcGMpLCVmcDEJCSMgZnAxIGlzIEI0K1MqLi4uCisKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBmcDIgaXMgUyooQjUrLi4uCisJZm11bC54CQklZnAwLCVmcDEJCSMgZnAxIGlzIFMqKEI0Ky4uLgorCisJZmFkZC5kCQlFTTFCMyglcGMpLCVmcDIJCSMgZnAyIGlzIEIzK1MqLi4uCisJZmFkZC54CQlFTTFCMiglcGMpLCVmcDEJCSMgZnAxIGlzIEIyK1MqLi4uCisKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBmcDIgaXMgUyooQjMrLi4uCisJZm11bC54CQklZnAwLCVmcDEJCSMgZnAxIGlzIFMqKEIyKy4uLgorCisJZm11bC54CQklZnAwLCVmcDIJCSMgZnAyIGlzIFMqUyooQjMrLi4uKQorCWZtdWwueAkJKCVhMCksJWZwMQkJIyBmcDEgaXMgWCpTKihCMi4uLgorCisJZm11bC5zCQkmMHgzRjAwMDAwMCwlZnAwCSMgZnAwIGlzIFMqQjEKKwlmYWRkLngJCSVmcDIsJWZwMQkJIyBmcDEgaXMgUQorCisJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIGZwMiByZXN0b3JlZCB7JWZwMi8lZnAzfQorCisJZmFkZC54CQklZnAxLCVmcDAJCSMgZnAwIGlzIFMqQjErUQorCisJZm1vdi5sCQklZDAsJWZwY3IKKwlmYWRkLngJCSglYTApLCVmcDAKKwlicmEJCXRfaW54MgorCitFTTFCSUc6CisjLS1TdGVwIDEwCXxYfCA+IDcwIGxvZzIKKwltb3YubAkJKCVhMCksJWQxCisJY21wLmwJCSVkMSwmMAorCWJndC53CQlFWFBDMQorIy0tU3RlcCAxMC4yCisJZm1vdi5zCQkmMHhCRjgwMDAwMCwlZnAwCSMgZnAwIGlzIC0xCisJZm1vdi5sCQklZDAsJWZwY3IKKwlmYWRkLnMJCSYweDAwODAwMDAwLCVmcDAJIyAtMSArIDJeKC0xMjYpCisJYnJhCQl0X21pbngyCisKKwlnbG9iYWwJCXNldG94bTFkCitzZXRveG0xZDoKKyMtLWVudHJ5IHBvaW50IGZvciBFWFBNMShYKSwgaGVyZSBYIGlzIGRlbm9ybWFsaXplZAorIy0tU3RlcCAwLgorCWJyYQkJdF9leHRkbnJtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc2dldGV4cCgpOiAgcmV0dXJucyB0aGUgZXhwb25lbnQgcG9ydGlvbiBvZiB0aGUgaW5wdXQgYXJndW1lbnQuCSMKKyMJICAgICAgVGhlIGV4cG9uZW50IGJpYXMgaXMgcmVtb3ZlZCBhbmQgdGhlIGV4cG9uZW50IHZhbHVlIGlzCSMKKyMJICAgICAgcmV0dXJuZWQgYXMgYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIG51bWJlciBpbiBmcDAuCQkjCisjIHNnZXRleHBkKCk6IGhhbmRsZXMgZGVub3JtYWxpemVkIG51bWJlcnMuCQkJCSMKKyMJCQkJCQkJCQkjCisjIHNnZXRtYW4oKTogIGV4dHJhY3RzIHRoZSBtYW50aXNzYSBvZiB0aGUgaW5wdXQgYXJndW1lbnQuIFRoZQkJIworIwkgICAgICBtYW50aXNzYSBpcyBjb252ZXJ0ZWQgdG8gYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIG51bWJlciB3LwkjCisjCSAgICAgIGFuIGV4cG9uZW50IG9mICQzZmZmIGFuZCBpcyByZXR1cm5lZCBpbiBmcDAuIFRoZSByYW5nZSBvZiAjCisjCSAgICAgIHRoZSByZXN1bHQgaXMgWzEuMCAtIDIuMCkuCQkJCSMKKyMgc2dldG1hbmQoKTogaGFuZGxlcyBkZW5vcm1hbGl6ZWQgbnVtYmVycy4JCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJYTAgID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlmcDAgPSBleHBvbmVudChYKSBvciBtYW50aXNzYShYKQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzZ2V0ZXhwCitzZ2V0ZXhwOgorCW1vdi53CQlTUkNfRVgoJWEwKSwlZDAJCSMgZ2V0IHRoZSBleHBvbmVudAorCWJjbHIJCSYweGYsJWQwCQkjIGNsZWFyIHRoZSBzaWduIGJpdAorCXN1YmkudwkJJjB4M2ZmZiwlZDAJCSMgc3VidHJhY3Qgb2ZmIHRoZSBiaWFzCisJZm1vdi53CQklZDAsJWZwMAkJIyByZXR1cm4gZXhwIGluIGZwMAorCWJsdC5iCQlzZ2V0ZXhwbgkJIyBpdCdzIG5lZ2F0aXZlCisJcnRzCisKK3NnZXRleHBuOgorCW1vdi5iCQkmbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnTicgY2NvZGUgYml0CisJcnRzCisKKwlnbG9iYWwJCXNnZXRleHBkCitzZ2V0ZXhwZDoKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplCisJbmVnLncJCSVkMAkJCSMgbmV3IGV4cCA9IC0oc2hmdCBhbXQpCisJc3ViaS53CQkmMHgzZmZmLCVkMAkJIyBzdWJ0cmFjdCBvZmYgdGhlIGJpYXMKKwlmbW92LncJCSVkMCwlZnAwCQkjIHJldHVybiBleHAgaW4gZnAwCisJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKKwlydHMKKworCWdsb2JhbAkJc2dldG1hbgorc2dldG1hbjoKKwltb3YudwkJU1JDX0VYKCVhMCksJWQwCQkjIGdldCB0aGUgZXhwCisJb3JpLncJCSYweDdmZmYsJWQwCQkjIGNsZWFyIG9sZCBleHAKKwliY2xyCQkmMHhlLCVkMAkJIyBtYWtlIGl0IHRoZSBuZXcgZXhwICstM2ZmZgorCisjIGhlcmUsIHdlIGJ1aWxkIHRoZSByZXN1bHQgaW4gYSB0bXAgbG9jYXRpb24gc28gYXMgbm90IHRvIGRpc3R1cmIgdGhlIGlucHV0CisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KSAjIGNvcHkgdG8gdG1wIGxvYworCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikgIyBjb3B5IHRvIHRtcCBsb2MKKwltb3YudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwlmbW92LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcHV0IG5ldyB2YWx1ZSBiYWNrIGluIGZwMAorCWJtaS5iCQlzZ2V0bWFubgkJIyBpdCdzIG5lZ2F0aXZlCisJcnRzCisKK3NnZXRtYW5uOgorCW1vdi5iCQkmbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnTicgY2NvZGUgYml0CisJcnRzCisKKyMKKyMgRm9yIGRlbm9ybWFsaXplZCBudW1iZXJzLCBzaGlmdCB0aGUgbWFudGlzc2EgdW50aWwgdGhlIGotYml0ID0gMSwKKyMgdGhlbiBsb2FkIHRoZSBleHBvbmVudCB3aXRoICsvMSAkM2ZmZi4KKyMKKwlnbG9iYWwJCXNnZXRtYW5kCitzZ2V0bWFuZDoKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIGV4cG9uZW50CisJYnJhLmIJCXNnZXRtYW4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzY29zaCgpOiAgY29tcHV0ZXMgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIGEgbm9ybWFsaXplZCBpbnB1dAkjCisjIHNjb3NoZCgpOiBjb21wdXRlcyB0aGUgaHlwZXJib2xpYyBjb3NpbmUgb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dAkJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gY29zaChYKQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAzIHVscHMgaW4gNjQgc2lnbmlmaWNhbnQgYml0LAkjCisjCWkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseQkjCisjCXJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMJIworIwlpbiBkb3VibGUgcHJlY2lzaW9uLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCQkJCQkJCQkJIworIwlDT1NICQkJCQkJCQkjCisjCTEuIElmIHxYfCA+IDE2MzgwIGxvZzIsIGdvIHRvIDMuCQkJCSMKKyMJCQkJCQkJCQkjCisjCTIuICh8WHwgPD0gMTYzODAgbG9nMikgQ29zaChYKSBpcyBvYnRhaW5lZCBieSB0aGUgZm9ybXVsYWUJIworIwkJeSA9IHxYfCwgeiA9IGV4cChZKSwgYW5kCQkJCSMKKyMJCWNvc2goWCkgPSAoMS8yKSooIHogKyAxL3ogKS4JCQkJIworIwkJRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJMy4gKHxYfCA+IDE2MzgwIGxvZzIpLiBJZiB8WHwgPiAxNjQ4MCBsb2cyLCBnbyB0byA1LgkJIworIwkJCQkJCQkJCSMKKyMJNC4gKDE2MzgwIGxvZzIgPCB8WHwgPD0gMTY0ODAgbG9nMikJCQkJIworIwkJY29zaChYKSA9IHNpZ24oWCkgKiBleHAofFh8KS8yLgkJCQkjCisjCQlIb3dldmVyLCBpbnZva2luZyBleHAofFh8KSBtYXkgY2F1c2UgcHJlbWF0dXJlCQkjCisjCQlvdmVyZmxvdy4gVGh1cywgd2UgY2FsY3VsYXRlIHNpbmgoWCkgYXMgZm9sbG93czoJIworIwkJWQk6PSB8WHwJCQkJCQkjCisjCQlGYWN0CTo9CTIqKigxNjM4MCkJCQkJIworIwkJWScJOj0gWSAtIDE2MzgxIGxvZzIJCQkJIworIwkJY29zaChYKSA6PSBGYWN0ICogZXhwKFknKS4JCQkJIworIwkJRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJNS4gKHxYfCA+IDE2NDgwIGxvZzIpIHNpbmgoWCkgbXVzdCBvdmVyZmxvdy4gUmV0dXJuCQkjCisjCQlIdWdlKkh1Z2UgdG8gZ2VuZXJhdGUgb3ZlcmZsb3cgYW5kIGFuIGluZmluaXR5IHdpdGgJIworIwkJdGhlIGFwcHJvcHJpYXRlIHNpZ24uIEh1Z2UgaXMgdGhlIGxhcmdlc3QgZmluaXRlIG51bWJlcgkjCisjCQlpbiBleHRlbmRlZCBmb3JtYXQuIEV4aXQuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1RXTzE2MzgwOgorCWxvbmcJCTB4N0ZGQjAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKworCWdsb2JhbAkJc2Nvc2gKK3Njb3NoOgorCWZtb3YueAkJKCVhMCksJWZwMAkJIyBMT0FEIElOUFVUCisKKwltb3YubAkJKCVhMCksJWQxCisJbW92LncJCTQoJWEwKSwlZDEKKwlhbmQubAkJJjB4N0ZGRkZGRkYsJWQxCisJY21wLmwJCSVkMSwmMHg0MDBDQjE2NworCWJndC5iCQlDT1NIQklHCisKKyMtLVRISVMgSVMgVEhFIFVTVUFMIENBU0UsIHxYfCA8IDE2MzgwIExPRzIKKyMtLUNPU0goWCkgPSAoMS8yKSAqICggRVhQKFgpICsgMS9FWFAoWCkgKQorCisJZmFicy54CQklZnAwCQkJIyB8WHwKKworCW1vdi5sCQklZDAsLSglc3ApCisJY2xyLmwJCSVkMAorCWZtb3ZtLngJCSYweDAxLC0oJXNwKQkJIyBzYXZlIHxYfCB0byBzdGFjaworCWxlYQkJKCVzcCksJWEwCQkjIHBhc3MgcHRyIHRvIHxYfAorCWJzcgkJc2V0b3gJCQkjIEZQMCBJUyBFWFAofFh8KQorCWFkZC5sCQkmMHhjLCVzcAkJIyBlcmFzZSB8WHwgZnJvbSBzdGFjaworCWZtdWwucwkJJjB4M0YwMDAwMDAsJWZwMAkjICgxLzIpRVhQKHxYfCkKKwltb3YubAkJKCVzcCkrLCVkMAorCisJZm1vdi5zCQkmMHgzRTgwMDAwMCwlZnAxCSMgKDEvNCkKKwlmZGl2LngJCSVmcDAsJWZwMQkJIyAxLygyIEVYUCh8WHwpKQorCisJZm1vdi5sCQklZDAsJWZwY3IKKwltb3YuYgkJJkZBRERfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBBREQKKwlmYWRkLngJCSVmcDEsJWZwMAorCWJyYQkJdF9jYXRjaAorCitDT1NIQklHOgorCWNtcC5sCQklZDEsJjB4NDAwQ0IyQjMKKwliZ3QuYgkJQ09TSEhVR0UKKworCWZhYnMueAkJJWZwMAorCWZzdWIuZAkJVDEoJXBjKSwlZnAwCQkjICh8WHwtMTYzODFMT0cyX0xFQUQpCisJZnN1Yi5kCQlUMiglcGMpLCVmcDAJCSMgfFh8IC0gMTYzODEgTE9HMiwgQUNDVVJBVEUKKworCW1vdi5sCQklZDAsLSglc3ApCisJY2xyLmwJCSVkMAorCWZtb3ZtLngJCSYweDAxLC0oJXNwKQkJIyBzYXZlIGZwMCB0byBzdGFjaworCWxlYQkJKCVzcCksJWEwCQkjIHBhc3MgcHRyIHRvIGZwMAorCWJzcgkJc2V0b3gKKwlhZGQubAkJJjB4Yywlc3AJCSMgY2xlYXIgZnAwIGZyb20gc3RhY2sKKwltb3YubAkJKCVzcCkrLCVkMAorCisJZm1vdi5sCQklZDAsJWZwY3IKKwltb3YuYgkJJkZNVUxfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNVUwKKwlmbXVsLngJCVRXTzE2MzgwKCVwYyksJWZwMAorCWJyYQkJdF9jYXRjaAorCitDT1NISFVHRToKKwlicmEJCXRfb3ZmbDIKKworCWdsb2JhbAkJc2Nvc2hkCisjLS1DT1NIKFgpID0gMSBGT1IgREVOT1JNQUxJWkVEIFgKK3Njb3NoZDoKKwlmbW92LnMJCSYweDNGODAwMDAwLCVmcDAKKworCWZtb3YubAkJJWQwLCVmcGNyCisJZmFkZC5zCQkmMHgwMDgwMDAwMCwlZnAwCisJYnJhCQl0X3BpbngyCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc3NpbmgoKTogIGNvbXB1dGVzIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgYSBub3JtYWxpemVkIGlucHV0CQkjCisjIHNzaW5oZCgpOiBjb21wdXRlcyB0aGUgaHlwZXJib2xpYyBzaW5lIG9mIGEgZGVub3JtYWxpemVkIGlucHV0CSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCisjCWQwID0gcm91bmQgcHJlY2lzaW9uLG1vZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWZwMCA9IHNpbmgoWCkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMyB1bHBzIGluIDY0IHNpZ25pZmljYW50IGJpdCwJIworIwlpLmUuIHdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkgIworIwlyb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljCSMKKyMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwkJCQkJCQkJCSMKKyMgICAgICAgU0lOSAkJCQkJCQkJIworIyAgICAgICAxLiBJZiB8WHwgPiAxNjM4MCBsb2cyLCBnbyB0byAzLgkJCQkjCisjCQkJCQkJCQkJIworIyAgICAgICAyLiAofFh8IDw9IDE2MzgwIGxvZzIpIFNpbmgoWCkgaXMgb2J0YWluZWQgYnkgdGhlIGZvcm11bGEJIworIyAgICAgICAgICAgICAgIHkgPSB8WHwsIHNnbiA9IHNpZ24oWCksIGFuZCB6ID0gZXhwbTEoWSksCQkjCisjICAgICAgICAgICAgICAgc2luaChYKSA9IHNnbiooMS8yKSooIHogKyB6LygxK3opICkuCQkJIworIyAgICAgICAgICBFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyAgICAgICAzLiBJZiB8WHwgPiAxNjQ4MCBsb2cyLCBnbyB0byA1LgkJCQkjCisjCQkJCQkJCQkJIworIyAgICAgICA0LiAoMTYzODAgbG9nMiA8IHxYfCA8PSAxNjQ4MCBsb2cyKQkJCQkjCisjICAgICAgICAgICAgICAgc2luaChYKSA9IHNpZ24oWCkgKiBleHAofFh8KS8yLgkJCQkjCisjICAgICAgICAgIEhvd2V2ZXIsIGludm9raW5nIGV4cCh8WHwpIG1heSBjYXVzZSBwcmVtYXR1cmUgb3ZlcmZsb3cuCSMKKyMgICAgICAgICAgVGh1cywgd2UgY2FsY3VsYXRlIHNpbmgoWCkgYXMgZm9sbG93czoJCQkjCisjICAgICAgICAgICAgIFkgICAgICAgOj0gfFh8CQkJCQkJIworIyAgICAgICAgICAgICBzZ24gICAgIDo9IHNpZ24oWCkJCQkJCSMKKyMgICAgICAgICAgICAgc2duRmFjdCA6PSBzZ24gKiAyKiooMTYzODApCQkJCSMKKyMgICAgICAgICAgICAgWScgICAgICA6PSBZIC0gMTYzODEgbG9nMgkJCQkJIworIyAgICAgICAgICAgICBzaW5oKFgpIDo9IHNnbkZhY3QgKiBleHAoWScpLgkJCQkjCisjICAgICAgICAgIEV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIDUuICh8WHwgPiAxNjQ4MCBsb2cyKSBzaW5oKFgpIG11c3Qgb3ZlcmZsb3cuIFJldHVybgkJIworIyAgICAgICAgICBzaWduKFgpKkh1Z2UqSHVnZSB0byBnZW5lcmF0ZSBvdmVyZmxvdyBhbmQgYW4gaW5maW5pdHkgd2l0aAkjCisjICAgICAgICAgIHRoZSBhcHByb3ByaWF0ZSBzaWduLiBIdWdlIGlzIHRoZSBsYXJnZXN0IGZpbml0ZSBudW1iZXIgaW4JIworIyAgICAgICAgICBleHRlbmRlZCBmb3JtYXQuIEV4aXQuCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzc2luaAorc3Npbmg6CisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIExPQUQgSU5QVVQKKworCW1vdi5sCQkoJWEwKSwlZDEKKwltb3YudwkJNCglYTApLCVkMQorCW1vdi5sCQklZDEsJWExCQkJIyBzYXZlIChjb21wYWN0ZWQpIG9wZXJhbmQKKwlhbmQubAkJJjB4N0ZGRkZGRkYsJWQxCisJY21wLmwJCSVkMSwmMHg0MDBDQjE2NworCWJndC5iCQlTSU5IQklHCisKKyMtLVRISVMgSVMgVEhFIFVTVUFMIENBU0UsIHxYfCA8IDE2MzgwIExPRzIKKyMtLVkgPSB8WHwsIFogPSBFWFBNMShZKSwgU0lOSChYKSA9IFNJR04oWCkqKDEvMikqKCBaICsgWi8oMStaKSApCisKKwlmYWJzLngJCSVmcDAJCQkjIFkgPSB8WHwKKworCW1vdm0ubAkJJjB4ODA0MCwtKCVzcCkJCSMge2ExL2QwfQorCWZtb3ZtLngJCSYweDAxLC0oJXNwKQkJIyBzYXZlIFkgb24gc3RhY2sKKwlsZWEJCSglc3ApLCVhMAkJIyBwYXNzIHB0ciB0byBZCisJY2xyLmwJCSVkMAorCWJzcgkJc2V0b3htMQkJCSMgRlAwIElTIFogPSBFWFBNMShZKQorCWFkZC5sCQkmMHhjLCVzcAkJIyBjbGVhciBZIGZyb20gc3RhY2sKKwlmbW92LmwJCSYwLCVmcGNyCisJbW92bS5sCQkoJXNwKSssJjB4MDIwMQkJIyB7YTEvZDB9CisKKwlmbW92LngJCSVmcDAsJWZwMQorCWZhZGQucwkJJjB4M0Y4MDAwMDAsJWZwMQkjIDErWgorCWZtb3YueAkJJWZwMCwtKCVzcCkKKwlmZGl2LngJCSVmcDEsJWZwMAkJIyBaLygxK1opCisJbW92LmwJCSVhMSwlZDEKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQxCisJb3IubAkJJjB4M0YwMDAwMDAsJWQxCisJZmFkZC54CQkoJXNwKSssJWZwMAorCW1vdi5sCQklZDEsLSglc3ApCisKKwlmbW92LmwJCSVkMCwlZnBjcgorCW1vdi5iCQkmRk1VTF9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1VTAorCWZtdWwucwkJKCVzcCkrLCVmcDAJCSMgbGFzdCBmcCBpbnN0IC0gcG9zc2libGUgZXhjZXB0aW9ucyBzZXQKKwlicmEJCXRfY2F0Y2gKKworU0lOSEJJRzoKKwljbXAubAkJJWQxLCYweDQwMENCMkIzCisJYmd0CQl0X292ZmwKKwlmYWJzLngJCSVmcDAKKwlmc3ViLmQJCVQxKCVwYyksJWZwMAkJIyAofFh8LTE2MzgxTE9HMl9MRUFEKQorCW1vdi5sCQkmMCwtKCVzcCkKKwltb3YubAkJJjB4ODAwMDAwMDAsLSglc3ApCisJbW92LmwJCSVhMSwlZDEKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQxCisJb3IubAkJJjB4N0ZGQjAwMDAsJWQxCisJbW92LmwJCSVkMSwtKCVzcCkJCSMgRVhURU5ERUQgRk1UCisJZnN1Yi5kCQlUMiglcGMpLCVmcDAJCSMgfFh8IC0gMTYzODEgTE9HMiwgQUNDVVJBVEUKKworCW1vdi5sCQklZDAsLSglc3ApCisJY2xyLmwJCSVkMAorCWZtb3ZtLngJCSYweDAxLC0oJXNwKQkJIyBzYXZlIGZwMCBvbiBzdGFjaworCWxlYQkJKCVzcCksJWEwCQkjIHBhc3MgcHRyIHRvIGZwMAorCWJzcgkJc2V0b3gKKwlhZGQubAkJJjB4Yywlc3AJCSMgY2xlYXIgZnAwIGZyb20gc3RhY2sKKworCW1vdi5sCQkoJXNwKSssJWQwCisJZm1vdi5sCQklZDAsJWZwY3IKKwltb3YuYgkJJkZNVUxfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBNVUwKKwlmbXVsLngJCSglc3ApKywlZnAwCQkjIHBvc3NpYmxlIGV4Y2VwdGlvbgorCWJyYQkJdF9jYXRjaAorCisJZ2xvYmFsCQlzc2luaGQKKyMtLVNJTkgoWCkgPSBYIEZPUiBERU5PUk1BTElaRUQgWAorc3NpbmhkOgorCWJyYQkJdF9leHRkbnJtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc3RhbmgoKTogIGNvbXB1dGVzIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgYSBub3JtYWxpemVkIGlucHV0CSMKKyMgc3RhbmhkKCk6IGNvbXB1dGVzIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBpbnB1dAkJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gdGFuaChYKQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBQ0NVUkFDWSBhbmQgTU9OT1RPTklDSVRZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGUgcmV0dXJuZWQgcmVzdWx0IGlzIHdpdGhpbiAzIHVscHMgaW4gNjQgc2lnbmlmaWNhbnQgYml0LAkjCisjCWkuZS4gd2l0aGluIDAuNTAwMSB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseSAjCisjCXJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMJIworIwlpbiBkb3VibGUgcHJlY2lzaW9uLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCQkJCQkJCQkJIworIwlUQU5ICQkJCQkJCQkjCisjCTEuIElmIHxYfCA+PSAoNS8yKSBsb2cyIG9yIHxYfCA8PSAyKiooLTQwKSwgZ28gdG8gMy4JCSMKKyMJCQkJCQkJCQkjCisjCTIuICgyKiooLTQwKSA8IHxYfCA8ICg1LzIpIGxvZzIpIENhbGN1bGF0ZSB0YW5oKFgpIGJ5CQkjCisjCQlzZ24gOj0gc2lnbihYKSwgeSA6PSAyfFh8LCB6IDo9IGV4cG0xKFkpLCBhbmQJCSMKKyMJCXRhbmgoWCkgPSBzZ24qKCB6LygyK3opICkuCQkJCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTMuICh8WHwgPD0gMioqKC00MCkgb3IgfFh8ID49ICg1LzIpIGxvZzIpLiBJZiB8WHwgPCAxLAkJIworIwkJZ28gdG8gNy4JCQkJCQkjCisjCQkJCQkJCQkJIworIwk0LiAofFh8ID49ICg1LzIpIGxvZzIpIElmIHxYfCA+PSA1MCBsb2cyLCBnbyB0byA2LgkJIworIwkJCQkJCQkJCSMKKyMJNS4gKCg1LzIpIGxvZzIgPD0gfFh8IDwgNTAgbG9nMikgQ2FsY3VsYXRlIHRhbmgoWCkgYnkJCSMKKyMJCXNnbiA6PSBzaWduKFgpLCB5IDo9IDJ8WHwsIHogOj0gZXhwKFkpLAkJCSMKKyMJCXRhbmgoWCkgPSBzZ24gLSBbIHNnbioyLygxK3opIF0uCQkJIworIwkJRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJNi4gKHxYfCA+PSA1MCBsb2cyKSBUYW5oKFgpID0gKy0xIChyb3VuZCB0byBuZWFyZXN0KS4gVGh1cywgd2UJIworIwkJY2FsY3VsYXRlIFRhbmgoWCkgYnkJCQkJCSMKKyMJCXNnbiA6PSBzaWduKFgpLCBUaW55IDo9IDIqKigtMTI2KSwJCQkjCisjCQl0YW5oKFgpIDo9IHNnbiAtIHNnbipUaW55LgkJCQkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwk3LiAofFh8IDwgMioqKC00MCkpLiBUYW5oKFgpID0gWC4JRXhpdC4JCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJc2V0CQlYLEZQX1NDUjAKKwlzZXQJCVhGUkFDLFgrNAorCisJc2V0CQlTR04sTF9TQ1IzCisKKwlzZXQJCVYsRlBfU0NSMAorCisJZ2xvYmFsCQlzdGFuaAorc3Rhbmg6CisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIExPQUQgSU5QVVQKKworCWZtb3YueAkJJWZwMCxYKCVhNikKKwltb3YubAkJKCVhMCksJWQxCisJbW92LncJCTQoJWEwKSwlZDEKKwltb3YubAkJJWQxLFgoJWE2KQorCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEKKwljbXAubAkJJWQxLCAmMHgzZmQ3ODAwMAkjIGlzIHxYfCA8IDJeKC00MCk/CisJYmx0LncJCVRBTkhCT1JTCQkjIHllcworCWNtcC5sCQklZDEsICYweDNmZmZkZGNlCSMgaXMgfFh8ID4gKDUvMilMT0cyPworCWJndC53CQlUQU5IQk9SUwkJIyB5ZXMKKworIy0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRQorIy0tWSA9IDJ8WHwsIFogPSBFWFBNMShZKSwgVEFOSChYKSA9IFNJR04oWCkgKiBaIC8gKForMikuCisKKwltb3YubAkJWCglYTYpLCVkMQorCW1vdi5sCQklZDEsU0dOKCVhNikKKwlhbmQubAkJJjB4N0ZGRjAwMDAsJWQxCisJYWRkLmwJCSYweDAwMDEwMDAwLCVkMQkJIyBFWFBPTkVOVCBPRiAyfFh8CisJbW92LmwJCSVkMSxYKCVhNikKKwlhbmQubAkJJjB4ODAwMDAwMDAsU0dOKCVhNikKKwlmbW92LngJCVgoJWE2KSwlZnAwCQkjIEZQMCBJUyBZID0gMnxYfAorCisJbW92LmwJCSVkMCwtKCVzcCkKKwljbHIubAkJJWQwCisJZm1vdm0ueAkJJjB4MSwtKCVzcCkJCSMgc2F2ZSBZIG9uIHN0YWNrCisJbGVhCQkoJXNwKSwlYTAJCSMgcGFzcyBwdHIgdG8gWQorCWJzcgkJc2V0b3htMQkJCSMgRlAwIElTIFogPSBFWFBNMShZKQorCWFkZC5sCQkmMHhjLCVzcAkJIyBjbGVhciBZIGZyb20gc3RhY2sKKwltb3YubAkJKCVzcCkrLCVkMAorCisJZm1vdi54CQklZnAwLCVmcDEKKwlmYWRkLnMJCSYweDQwMDAwMDAwLCVmcDEJIyBaKzIKKwltb3YubAkJU0dOKCVhNiksJWQxCisJZm1vdi54CQklZnAxLFYoJWE2KQorCWVvci5sCQklZDEsViglYTYpCisKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIHByZWMsbW9kZQorCWZkaXYueAkJViglYTYpLCVmcDAKKwlicmEJCXRfaW54MgorCitUQU5IQk9SUzoKKwljbXAubAkJJWQxLCYweDNGRkY4MDAwCisJYmx0LncJCVRBTkhTTQorCisJY21wLmwJCSVkMSwmMHg0MDA0OEFBMQorCWJndC53CQlUQU5ISFVHRQorCisjLS0gKDUvMikgTE9HMiA8IHxYfCA8IDUwIExPRzIsCisjLS1UQU5IKFgpID0gMSAtICgyL1tFWFAoMlgpKzFdKS4gTEVUIFkgPSAyfFh8LCBTR04gPSBTSUdOKFgpLAorIy0tVEFOSChYKSA9IFNHTiAtCVNHTioyL1tFWFAoWSkrMV0uCisKKwltb3YubAkJWCglYTYpLCVkMQorCW1vdi5sCQklZDEsU0dOKCVhNikKKwlhbmQubAkJJjB4N0ZGRjAwMDAsJWQxCisJYWRkLmwJCSYweDAwMDEwMDAwLCVkMQkJIyBFWFBPIE9GIDJ8WHwKKwltb3YubAkJJWQxLFgoJWE2KQkJIyBZID0gMnxYfAorCWFuZC5sCQkmMHg4MDAwMDAwMCxTR04oJWE2KQorCW1vdi5sCQlTR04oJWE2KSwlZDEKKwlmbW92LngJCVgoJWE2KSwlZnAwCQkjIFkgPSAyfFh8CisKKwltb3YubAkJJWQwLC0oJXNwKQorCWNsci5sCQklZDAKKwlmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSBZIG9uIHN0YWNrCisJbGVhCQkoJXNwKSwlYTAJCSMgcGFzcyBwdHIgdG8gWQorCWJzcgkJc2V0b3gJCQkjIEZQMCBJUyBFWFAoWSkKKwlhZGQubAkJJjB4Yywlc3AJCSMgY2xlYXIgWSBmcm9tIHN0YWNrCisJbW92LmwJCSglc3ApKywlZDAKKwltb3YubAkJU0dOKCVhNiksJWQxCisJZmFkZC5zCQkmMHgzRjgwMDAwMCwlZnAwCSMgRVhQKFkpKzEKKworCWVvci5sCQkmMHhDMDAwMDAwMCwlZDEJCSMgLVNJR04oWCkqMgorCWZtb3YucwkJJWQxLCVmcDEJCSMgLVNJR04oWCkqMiBJTiBTR0wgRk1UCisJZmRpdi54CQklZnAwLCVmcDEJCSMgLVNJR04oWCkyIC8gW0VYUChZKSsxIF0KKworCW1vdi5sCQlTR04oJWE2KSwlZDEKKwlvci5sCQkmMHgzRjgwMDAwMCwlZDEJCSMgU0dOCisJZm1vdi5zCQklZDEsJWZwMAkJIyBTR04gSU4gU0dMIEZNVAorCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBwcmVjLG1vZGUKKwltb3YuYgkJJkZBRERfT1AsJWQxCQkjIGxhc3QgaW5zdCBpcyBBREQKKwlmYWRkLngJCSVmcDEsJWZwMAorCWJyYQkJdF9pbngyCisKK1RBTkhTTToKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIHByZWMsbW9kZQorCW1vdi5iCQkmRk1PVl9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1PVkUKKwlmbW92LngJCVgoJWE2KSwlZnAwCQkjIGxhc3QgaW5zdCAtIHBvc3NpYmxlIGV4Y2VwdGlvbiBzZXQKKwlicmEJCXRfY2F0Y2gKKworIy0tLVJFVFVSTiBTR04oWCkgLSBTR04oWClFUFMKK1RBTkhIVUdFOgorCW1vdi5sCQlYKCVhNiksJWQxCisJYW5kLmwJCSYweDgwMDAwMDAwLCVkMQorCW9yLmwJCSYweDNGODAwMDAwLCVkMQorCWZtb3YucwkJJWQxLCVmcDAKKwlhbmQubAkJJjB4ODAwMDAwMDAsJWQxCisJZW9yLmwJCSYweDgwODAwMDAwLCVkMQkJIyAtU0lHTihYKSpFUFMKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHJlc3RvcmUgdXNlcnMgcm91bmQgcHJlYyxtb2RlCisJZmFkZC5zCQklZDEsJWZwMAorCWJyYQkJdF9pbngyCisKKwlnbG9iYWwJCXN0YW5oZAorIy0tVEFOSChYKSA9IFggRk9SIERFTk9STUFMSVpFRCBYCitzdGFuaGQ6CisJYnJhCQl0X2V4dGRucm0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzbG9nbigpOiAgICBjb21wdXRlcyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgYSBub3JtYWxpemVkIGlucHV0CSMKKyMgc2xvZ25kKCk6ICAgY29tcHV0ZXMgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIGEgZGVub3JtYWxpemVkIGlucHV0CSMKKyMgc2xvZ25wMSgpOiAgY29tcHV0ZXMgdGhlIGxvZygxK1gpIG9mIGEgbm9ybWFsaXplZCBpbnB1dAkJIworIyBzbG9nbnAxZCgpOiBjb21wdXRlcyB0aGUgbG9nKDErWCkgb2YgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCisjCWQwID0gcm91bmQgcHJlY2lzaW9uLG1vZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IGxvZyhYKSBvciBsb2coMStYKQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMiB1bHBzIGluIDY0IHNpZ25pZmljYW50IGJpdCwJIworIwlpLmUuIHdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkJIworIwlyb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljCSMKKyMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlMT0dOOgkJCQkJCQkJIworIwlTdGVwIDEuIElmIHxYLTF8IDwgMS8xNiwgYXBwcm94aW1hdGUgbG9nKFgpIGJ5IGFuIG9kZAkJIworIwkJcG9seW5vbWlhbCBpbiB1LCB3aGVyZSB1ID0gMihYLTEpLyhYKzEpLiBPdGhlcndpc2UsCSMKKyMJCW1vdmUgb24gdG8gU3RlcCAyLgkJCQkJIworIwkJCQkJCQkJCSMKKyMJU3RlcCAyLiBYID0gMioqayAqIFkgd2hlcmUgMSA8PSBZIDwgMi4gRGVmaW5lIEYgdG8gYmUgdGhlIGZpcnN0CSMKKyMJCXNldmVuIHNpZ25pZmljYW50IGJpdHMgb2YgWSBwbHVzIDIqKigtNyksIGkuZS4JCSMKKyMJCUYgPSAxLnh4eHh4eDEgaW4gYmFzZSAyIHdoZXJlIHRoZSBzaXggIngiIG1hdGNoIHRob3NlCSMKKyMJCW9mIFkuIE5vdGUgdGhhdCB8WS1GfCA8PSAyKiooLTcpLgkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgMy4gRGVmaW5lIHUgPSAoWS1GKS9GLiBBcHByb3hpbWF0ZSBsb2coMSt1KSBieSBhCQkjCisjCQlwb2x5bm9taWFsIGluIHUsIGxvZygxK3UpID0gcG9seS4JCQkjCisjCQkJCQkJCQkJIworIwlTdGVwIDQuIFJlY29uc3RydWN0CQkJCQkJIworIwkJbG9nKFgpID0gbG9nKCAyKiprICogWSApID0gaypsb2coMikgKyBsb2coRikgKyBsb2coMSt1KQkjCisjCQlieSBrKmxvZygyKSArIChsb2coRikgKyBwb2x5KS4gVGhlIHZhbHVlcyBvZiBsb2coRikgYXJlCSMKKyMJCWNhbGN1bGF0ZWQgYmVmb3JlaGFuZCBhbmQgc3RvcmVkIGluIHRoZSBwcm9ncmFtLgkjCisjCQkJCQkJCQkJIworIwlsb2ducDE6CQkJCQkJCQkjCisjCVN0ZXAgMTogSWYgfFh8IDwgMS8xNiwgYXBwcm94aW1hdGUgbG9nKDErWCkgYnkgYW4gb2RkCQkjCisjCQlwb2x5bm9taWFsIGluIHUgd2hlcmUgdSA9IDJYLygyK1gpLiBPdGhlcndpc2UsIG1vdmUgb24JIworIwkJdG8gU3RlcCAyLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCVN0ZXAgMjogTGV0IDErWCA9IDIqKmsgKiBZLCB3aGVyZSAxIDw9IFkgPCAyLiBEZWZpbmUgRiBhcyBkb25lCSMKKyMJCWluIFN0ZXAgMiBvZiB0aGUgYWxnb3JpdGhtIGZvciBMT0dOIGFuZCBjb21wdXRlCQkjCisjCQlsb2coMStYKSBhcyBrKmxvZygyKSArIGxvZyhGKSArIHBvbHkgd2hlcmUgcG9seQkJIworIwkJYXBwcm94aW1hdGVzIGxvZygxK3UpLCB1ID0gKFktRikvRi4JCQkjCisjCQkJCQkJCQkJIworIwlJbXBsZW1lbnRhdGlvbiBOb3RlczoJCQkJCQkjCisjCU5vdGUgMS4gVGhlcmUgYXJlIDY0IGRpZmZlcmVudCBwb3NzaWJsZSB2YWx1ZXMgZm9yIEYsIHRodXMgNjQJIworIwkJbG9nKEYpJ3MgbmVlZCB0byBiZSB0YWJ1bGF0ZWQuIE1vcmVvdmVyLCB0aGUgdmFsdWVzIG9mCSMKKyMJCTEvRiBhcmUgYWxzbyB0YWJ1bGF0ZWQgc28gdGhhdCB0aGUgZGl2aXNpb24gaW4gKFktRikvRgkjCisjCQljYW4gYmUgcGVyZm9ybWVkIGJ5IGEgbXVsdGlwbGljYXRpb24uCQkJIworIwkJCQkJCQkJCSMKKyMJTm90ZSAyLiBJbiBTdGVwIDIgb2YgbG9nbnAxLCBpbiBvcmRlciB0byBwcmVzZXJ2ZWQgYWNjdXJhY3ksCSMKKyMJCXRoZSB2YWx1ZSBZLUYgaGFzIHRvIGJlIGNhbGN1bGF0ZWQgY2FyZWZ1bGx5IHdoZW4JIworIwkJMS8yIDw9IFggPCAzLzIuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJTm90ZSAzLiBUbyBmdWxseSBleHBsb2l0IHRoZSBwaXBlbGluZSwgcG9seW5vbWlhbHMgYXJlIHVzdWFsbHkJIworIwkJc2VwYXJhdGVkIGludG8gdHdvIHBhcnRzIGV2YWx1YXRlZCBpbmRlcGVuZGVudGx5IGJlZm9yZQkjCisjCQliZWluZyBhZGRlZCB1cC4JCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTE9HT0YyOgorCWxvbmcJCTB4M0ZGRTAwMDAsMHhCMTcyMTdGNywweEQxQ0Y3OUFDLDB4MDAwMDAwMDAKKworb25lOgorCWxvbmcJCTB4M0Y4MDAwMDAKK3plcm86CisJbG9uZwkJMHgwMDAwMDAwMAoraW5mdHk6CisJbG9uZwkJMHg3RjgwMDAwMAorbmVnb25lOgorCWxvbmcJCTB4QkY4MDAwMDAKKworTE9HQTY6CisJbG9uZwkJMHgzRkMyNDk5QSwweEI1RTQwNDBCCitMT0dBNToKKwlsb25nCQkweEJGQzU1NUI1LDB4ODQ4Q0I3REIKKworTE9HQTQ6CisJbG9uZwkJMHgzRkM5OTk5OSwweDk4N0Q4NzMwCitMT0dBMzoKKwlsb25nCQkweEJGQ0ZGRkZGLDB4RkY2RjdFOTcKKworTE9HQTI6CisJbG9uZwkJMHgzRkQ1NTU1NSwweDU1NTU1NUE0CitMT0dBMToKKwlsb25nCQkweEJGRTAwMDAwLDB4MDAwMDAwMDgKKworTE9HQjU6CisJbG9uZwkJMHgzRjE3NTQ5NiwweEFERDdEQUQ2CitMT0dCNDoKKwlsb25nCQkweDNGM0M3MUMyLDB4RkU4MEM3RTAKKworTE9HQjM6CisJbG9uZwkJMHgzRjYyNDkyNCwweDkyOEJDQ0ZGCitMT0dCMjoKKwlsb25nCQkweDNGODk5OTk5LDB4OTk5OTk1RUMKKworTE9HQjE6CisJbG9uZwkJMHgzRkI1NTU1NSwweDU1NTU1NTU1CitUV086CisJbG9uZwkJMHg0MDAwMDAwMCwweDAwMDAwMDAwCisKK0xUSE9MRDoKKwlsb25nCQkweDNmOTkwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisKK0xPR1RCTDoKKwlsb25nCQkweDNGRkUwMDAwLDB4RkUwM0Y4MEYsMHhFMDNGODBGRSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkY3MDAwMCwweEZGMDE1MzU4LDB4ODMzQzQ3RTIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhGQTIzMkNGMiwweDUyMTM4QUMwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRjkwMDAwLDB4QkRDOEQ4M0UsMHhBRDg4RDU0OSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEY2NjAzRDk4LDB4MEY2NjAzREEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQTAwMDAsMHg5Q0Y0M0RDRiwweEY1RUFGRDQ4LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RjJCOUQ2NDgsMHgwRjJCOUQ2NSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZBMDAwMCwweERBMTZFQjg4LDB4Q0I4REY2MTQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhFRjJFQjcxRiwweEM0MzQ1MjM4LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4OEIyOUI3NzUsMHgxQkQ3MDc0MywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEVCQkRCMkE1LDB4QzE2MTlDOEMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHhBOEQ4MzlGOCwweDMwQzFGQjQ5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RTg2NUFDN0IsMHg3NjAzQTE5NywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZCMDAwMCwweEM2MUEyRUIxLDB4OENEOTA3QUQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhFNTI1OTgyQSwweEY3MEM4ODBFLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkIwMDAwLDB4RTJGMkE0N0EsMHhERTNBMThBRiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEUxRkM3ODBFLDB4MUZDNzgwRTIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQjAwMDAsMHhGRjY0ODk4RSwweERGNTVENTUxLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4REVFOTVDNEMsMHhBMDM3QkE1NywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweDhEQjk1NkE5LDB4N0IzRDAxNDgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhEQkVCNjFFRSwweEQxOUM1OTU4LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4OUI4RkUxMDAsMHhGNDdCQTFERSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEQ5MDFCMjAzLDB4NjQwNkM4MEUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhBOTM3MkYxRCwweDBEQTFCRDE3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4RDYyQjgwRDYsMHgyQjgwRDYyQywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweEI2QjA3RjM4LDB4Q0U5MEU0NkIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhEMzY4MEQzNiwweDgwRDM2ODBELDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4QzNGRDAzMjksMHgwNjQ4ODQ4MSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEQwQjY5RkNCLDB4RDI1ODBEMEIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhEMTFERTBGRiwweDE1QUIxOENBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4Q0UxNjhBNzcsMHgyNTA4MENFMSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZDMDAwMCwweERFMTQzM0ExLDB4NkM2NkIxNTAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhDQjg3MjdDMCwweDY1QzM5M0UwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkMwMDAwLDB4RUFFMTBCNUEsMHg3RERDOEFERCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEM5MDdEQTRFLDB4ODcxMTQ2QUQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGQzAwMDAsMHhGNzg1NkU1RSwweEUyQzlCMjkxLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QzY5ODBDNjksMHg4MEM2OTgwQywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweDgyMDEyQ0E1LDB4QTY4MjA2RDcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhDNDM3MkY4NSwweDVEODI0Q0E2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4ODgyQzVGQ0QsMHg3MjU2QThDNSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEMxRTRCQkQ1LDB4OTVGNkU5NDcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHg4RTQ0QzYwQiwweDRDQ0ZEN0RFLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QkZBMDJGRTgsMHgwQkZBMDJGRiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweDk0NEFEMDlFLDB4RjQzNTFBRjYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhCRDY5MTA0NywweDA3NjYxQUEzLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4OUEzRUVDRDQsMHhDM0VBQTZCMiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEJCM0VFNzIxLDB4QTU0RDg4MEMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhBMDIxODQzNCwweDM1M0YxREU4LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QjkyMTQzRkEsMHgzNkY1RTAyRSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEE1RjJGQ0FCLDB4QkJDNTA2REEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhCNzBGQkI1QSwweDE5QkUzNjU5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4QUJCM0I4QkEsMHgyQUQzNjJBNSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEI1MDlFNjhBLDB4OUI5NDgyMUYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhCMTY0MTc5NSwweENFM0NBOTdCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QjMwRjYzNTIsMHg4OTE3QzgwQiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEI3MDQ3NTUxLDB4NUQwRjFDNjEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhCMTFGRDNCOCwweDBCMTFGRDNDLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4QkM5NTJBRkUsMHhFQTNEMTNFMSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEFGM0FEREM2LDB4ODBBRjNBREUsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhDMjE2OEVEMCwweEY0NThCQTRBLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QUQ2MDJCNTgsMHgwQUQ2MDJCNiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEM3ODhGNDM5LDB4QjMxNjNCRjEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBQjhGNjlFMiwweDgzNTlDRDExLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4Q0NFQ0FDMDgsMHhCRjA0NTY1RCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEE5Qzg0QTQ3LDB4QTA3RjU2MzgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhEMjQyMDQ4NywweDJERDg1MTYwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QTgwQTgwQTgsMHgwQTgwQTgwQiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEQ3ODk0OTkyLDB4M0JDMzU4OEEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBNjU1QzQzOSwweDJEN0I3M0E4LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4RENDMkM0QjQsMHg5ODg3REFDQywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEE0QTlDRjFELDB4OTY4MzM3NTEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhFMUVFQkQzRSwweDZENkE2QjlFLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QTMwNjVFM0YsMHhBRTdDRDBFMCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEU3MEQ3ODVDLDB4MkY5RjVCREMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBMTZCMzEyRSwweEE4RkMzNzdELDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4RUMxRjM5MkMsMHg1MTc5RjI4MywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDlGRDgwOUZELDB4ODA5RkQ4MEEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhGMTI0NDBEMywweEUzNjEzMEU2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OUU0Q0FEMjMsMHhERDVGM0EyMCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZEMDAwMCwweEY2MUNDRTkyLDB4MzQ2NjAwQkIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5Q0M4RTE2MCwweEMzRkIxOUI5LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkQwMDAwLDB4RkIwOTFGRDMsMHg4MTQ1NjMwQSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDlCNEM2RjlFLDB4RjAzQTNDQUEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRDAwMDAsMHhGRkU5NzA0MiwweEJGQTRDMkFELDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OTlENzIyREEsMHhCREU1OEYwNiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDgyNUVGQ0VELDB4NDkzNjkzMzAsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5ODY4QzgwOSwweDg2OEM4MDk4LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4ODRDMzdBN0EsMHhCOUE5MDVDOSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDk3MDEyRTAyLDB4NUMwNEI4MDksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4NzIyNEMyRSwweDhFNjQ1RkI3LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OTVBMDI1NjgsMHgwOTVBMDI1NywweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDg5N0I4Q0FDLDB4OUY3REUyOTgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5NDQ1ODA5NCwweDQ1ODA5NDQ2LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OEJDRjU1REUsMHhDNENEMDVGRSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDkyRjExMzg0LDB4MDQ5Nzg4OUMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4RTFEQzBGQiwweDg5RTEyNUU1LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OTFBMkIzQzQsMHhENUU2RjgwOSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDkwNjZFNjhDLDB4OTU1QjZDOUIsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5MDVBMzg2MywweDNFMDZDNDNCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OTJBQURFNzQsMHhDN0JFNTlFMCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDhGMTc3OUQ5LDB4RkRDM0EyMTksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5NEU5QkZGNiwweDE1ODQ1NjQzLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OEREQTUyMDIsMHgzNzY5NDgwOSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDk3MjNBMUI3LDB4MjAxMzQyMDMsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4Q0EyOUMwNCwweDY1MTRFMDIzLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OTk1ODk5QzgsMHg5MEVCODk5MCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDhCNzAzNDRBLDB4MTM5QkM3NUEsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg5Qjg4QkRBQSwweDNBM0RBRTJGLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OEE0MkY4NzAsMHg1NjY5REI0NiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDlEQjQyMjRGLDB4RkZFMTE1N0MsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4OTFBQzczQSwweEU5ODE5QjUwLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4OUZEQURDMjYsMHg4QjdBMTJEQSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDg3Rjc4MDg3LDB4Rjc4MDg3RjgsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBMUZDRkYxNywweENFNzMzQkQ0LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4ODZEOTA1NDQsMHg3QTM0QUNDNiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEE0MUE5RThGLDB4NTQ0NkZCOUYsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4NUJGMzc2MSwweDJDRUUzQzlCLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QTYzM0NEN0UsMHg2NzcxQ0Q4QiwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDg0QTlGOUM4LDB4MDg0QTlGOUQsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBODQ4OUU2MCwweDBCNDM1QTVFLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4ODM5OTMwNTIsMHgzRkJFMzM2OCwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEFBNTkyMzNDLDB4Q0NBNEJENDksMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHg4MjhDQkZCRSwweEI5QTAyMEEzLDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4QUM2NTZEQUUsMHg2QkNDNDk4NSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweDgxODQ4REE4LDB4RkFGMEQyNzcsMHgwMDAwMDAwMAorCWxvbmcJCTB4M0ZGRTAwMDAsMHhBRTZEOEVFMywweDYwQkIyNDY4LDB4MDAwMDAwMDAKKwlsb25nCQkweDNGRkUwMDAwLDB4ODA4MDgwODAsMHg4MDgwODA4MSwweDAwMDAwMDAwCisJbG9uZwkJMHgzRkZFMDAwMCwweEIwNzE5N0EyLDB4M0M0NkM2NTQsMHgwMDAwMDAwMAorCisJc2V0CQlBREpLLExfU0NSMQorCisJc2V0CQlYLEZQX1NDUjAKKwlzZXQJCVhEQ0FSRSxYKzIKKwlzZXQJCVhGUkFDLFgrNAorCisJc2V0CQlGLEZQX1NDUjEKKwlzZXQJCUZGUkFDLEYrNAorCisJc2V0CQlLTE9HMixGUF9TQ1IwCisKKwlzZXQJCVNBVkVVLEZQX1NDUjAKKworCWdsb2JhbAkJc2xvZ24KKyMtLUVOVFJZIFBPSU5UIEZPUiBMT0coWCkgRk9SIFggRklOSVRFLCBOT04tWkVSTywgTk9UIE5BTidTCitzbG9nbjoKKwlmbW92LngJCSglYTApLCVmcDAJCSMgTE9BRCBJTlBVVAorCW1vdi5sCQkmMHgwMDAwMDAwMCxBREpLKCVhNikKKworTE9HQkdOOgorIy0tRlBDUiBTQVZFRCBBTkQgQ0xFQVJFRCwgSU5QVVQgSVMgMl4oQURKSykqRlAwLCBGUDAgQ09OVEFJTlMKKyMtLUEgRklOSVRFLCBOT04tWkVSTywgTk9STUFMSVpFRCBOVU1CRVIuCisKKwltb3YubAkJKCVhMCksJWQxCisJbW92LncJCTQoJWEwKSwlZDEKKworCW1vdi5sCQkoJWEwKSxYKCVhNikKKwltb3YubAkJNCglYTApLFgrNCglYTYpCisJbW92LmwJCTgoJWEwKSxYKzgoJWE2KQorCisJY21wLmwJCSVkMSwmMAkJCSMgQ0hFQ0sgSUYgWCBJUyBORUdBVElWRQorCWJsdC53CQlMT0dORUcJCQkjIExPRyBPRiBORUdBVElWRSBBUkdVTUVOVCBJUyBJTlZBTElECisjIFggSVMgUE9TSVRJVkUsIENIRUNLIElGIFggSVMgTkVBUiAxCisJY21wLmwJCSVkMSwmMHgzZmZlZjA3ZAkJIyBJUyBYIDwgMTUvMTY/CisJYmx0LmIJCUxPR01BSU4JCQkjIFlFUworCWNtcC5sCQklZDEsJjB4M2ZmZjg4NDEJCSMgSVMgWCA+IDE3LzE2PworCWJsZS53CQlMT0dORUFSMQkJIyBOTworCitMT0dNQUlOOgorIy0tVEhJUyBTSE9VTEQgQkUgVEhFIFVTVUFMIENBU0UsIFggTk9UIFZFUlkgQ0xPU0UgVE8gMQorCisjLS1YID0gMl4oSykgKiBZLCAxIDw9IFkgPCAyLiBUSFVTLCBZID0gMS5YWFhYWFhYWC4uLi5YWCBJTiBCSU5BUlkuCisjLS1XRSBERUZJTkUgRiA9IDEuWFhYWFhYMSwgSS5FLiBGSVJTVCA3IEJJVFMgT0YgWSBBTkQgQVRUQUNIIEEgMS4KKyMtLVRIRSBJREVBIElTIFRIQVQgTE9HKFgpID0gSypMT0cyICsgTE9HKFkpCisjLS0JCQkgPSBLKkxPRzIgKyBMT0coRikgKyBMT0coMSArIChZLUYpL0YpLgorIy0tTk9URSBUSEFUIFUgPSAoWS1GKS9GIElTIFZFUlkgU01BTEwgQU5EIFRIVVMgQVBQUk9YSU1BVElORworIy0tTE9HKDErVSkgQ0FOIEJFIFZFUlkgRUZGSUNJRU5ULgorIy0tQUxTTyBOT1RFIFRIQVQgVEhFIFZBTFVFIDEvRiBJUyBTVE9SRUQgSU4gQSBUQUJMRSBTTyBUSEFUIE5PCisjLS1ESVZJU0lPTiBJUyBORUVERUQgVE8gQ0FMQ1VMQVRFIChZLUYpL0YuCisKKyMtLUdFVCBLLCBZLCBGLCBBTkQgQUREUkVTUyBPRiAxL0YuCisJYXNyLmwJCSY4LCVkMQorCWFzci5sCQkmOCwlZDEJCQkjIFNISUZURUQgMTYgQklUUywgQklBU0VEIEVYUE8uIE9GIFgKKwlzdWIubAkJJjB4M0ZGRiwlZDEJCSMgVEhJUyBJUyBLCisJYWRkLmwJCUFESksoJWE2KSwlZDEJCSMgQURKVVNUIEssIE9SSUdJTkFMIElOUFVUIE1BWSBCRSAgREVOT1JNLgorCWxlYQkJTE9HVEJMKCVwYyksJWEwCQkjIEJBU0UgQUREUkVTUyBPRiAxL0YgQU5EIExPRyhGKQorCWZtb3YubAkJJWQxLCVmcDEJCSMgQ09OVkVSVCBLIFRPIEZMT0FUSU5HLVBPSU5UIEZPUk1BVAorCisjLS1XSElMRSBUSEUgQ09OVkVSU0lPTiBJUyBHT0lORyBPTiwgV0UgR0VUIEYgQU5EIEFERFJFU1MgT0YgMS9GCisJbW92LmwJCSYweDNGRkYwMDAwLFgoJWE2KQkjIFggSVMgTk9XIFksIEkuRS4gMl4oLUspKlgKKwltb3YubAkJWEZSQUMoJWE2KSxGRlJBQyglYTYpCisJYW5kLmwJCSYweEZFMDAwMDAwLEZGUkFDKCVhNikJIyBGSVJTVCA3IEJJVFMgT0YgWQorCW9yLmwJCSYweDAxMDAwMDAwLEZGUkFDKCVhNikJIyBHRVQgRjogQVRUQUNIIEEgMSBBVCBUSEUgRUlHSFRIIEJJVAorCW1vdi5sCQlGRlJBQyglYTYpLCVkMQkjIFJFQURZIFRPIEdFVCBBRERSRVNTIE9GIDEvRgorCWFuZC5sCQkmMHg3RTAwMDAwMCwlZDEKKwlhc3IubAkJJjgsJWQxCisJYXNyLmwJCSY4LCVkMQorCWFzci5sCQkmNCwlZDEJCQkjIFNISUZURUQgMjAsIEQwIElTIFRIRSBESVNQTEFDRU1FTlQKKwlhZGQubAkJJWQxLCVhMAkJCSMgQTAgSVMgVEhFIEFERFJFU1MgRk9SIDEvRgorCisJZm1vdi54CQlYKCVhNiksJWZwMAorCW1vdi5sCQkmMHgzZmZmMDAwMCxGKCVhNikKKwljbHIubAkJRis4KCVhNikKKwlmc3ViLngJCUYoJWE2KSwlZnAwCQkjIFktRgorCWZtb3ZtLngJCSYweGMsLSglc3ApCQkjIFNBVkUgRlAyLTMgV0hJTEUgRlAwIElTIE5PVCBSRUFEWQorIy0tU1VNTUFSWTogRlAwIElTIFktRiwgQTAgSVMgQUREUkVTUyBPRiAxL0YsIEZQMSBJUyBLCisjLS1SRUdJU1RFUlMgU0FWRUQ6IEZQQ1IsIEZQMSwgRlAyCisKK0xQMUNPTlQxOgorIy0tQU4gUkUtRU5UUlkgUE9JTlQgRk9SIExPR05QMQorCWZtdWwueAkJKCVhMCksJWZwMAkJIyBGUDAgSVMgVSA9IChZLUYpL0YKKwlmbXVsLngJCUxPR09GMiglcGMpLCVmcDEJIyBHRVQgSypMT0cyIFdISUxFIEZQMCBJUyBOT1QgUkVBRFkKKwlmbW92LngJCSVmcDAsJWZwMgorCWZtdWwueAkJJWZwMiwlZnAyCQkjIEZQMiBJUyBWPVUqVQorCWZtb3YueAkJJWZwMSxLTE9HMiglYTYpCQkjIFBVVCBLKkxPRzIgSU4gTUVNRU9SWSwgRlJFRSBGUDEKKworIy0tTE9HKDErVSkgSVMgQVBQUk9YSU1BVEVEIEJZCisjLS1VICsgViooQTErVSooQTIrVSooQTMrVSooQTQrVSooQTUrVSpBNikpKSkpIFdISUNIIElTCisjLS1bVSArIFYqKEExK1YqKEEzK1YqQTUpKV0gICsgIFtVKlYqKEEyK1YqKEE0K1YqQTYpKV0KKworCWZtb3YueAkJJWZwMiwlZnAzCisJZm1vdi54CQklZnAyLCVmcDEKKworCWZtdWwuZAkJTE9HQTYoJXBjKSwlZnAxCQkjIFYqQTYKKwlmbXVsLmQJCUxPR0E1KCVwYyksJWZwMgkJIyBWKkE1CisKKwlmYWRkLmQJCUxPR0E0KCVwYyksJWZwMQkJIyBBNCtWKkE2CisJZmFkZC5kCQlMT0dBMyglcGMpLCVmcDIJCSMgQTMrVipBNQorCisJZm11bC54CQklZnAzLCVmcDEJCSMgViooQTQrVipBNikKKwlmbXVsLngJCSVmcDMsJWZwMgkJIyBWKihBMytWKkE1KQorCisJZmFkZC5kCQlMT0dBMiglcGMpLCVmcDEJCSMgQTIrViooQTQrVipBNikKKwlmYWRkLmQJCUxPR0ExKCVwYyksJWZwMgkJIyBBMStWKihBMytWKkE1KQorCisJZm11bC54CQklZnAzLCVmcDEJCSMgViooQTIrViooQTQrVipBNikpCisJYWRkLmwJCSYxNiwlYTAJCQkjIEFERFJFU1MgT0YgTE9HKEYpCisJZm11bC54CQklZnAzLCVmcDIJCSMgViooQTErViooQTMrVipBNSkpCisKKwlmbXVsLngJCSVmcDAsJWZwMQkJIyBVKlYqKEEyK1YqKEE0K1YqQTYpKQorCWZhZGQueAkJJWZwMiwlZnAwCQkjIFUrViooQTErViooQTMrVipBNSkpCisKKwlmYWRkLngJCSglYTApLCVmcDEJCSMgTE9HKEYpK1UqViooQTIrViooQTQrVipBNikpCisJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIFJFU1RPUkUgRlAyLTMKKwlmYWRkLngJCSVmcDEsJWZwMAkJIyBGUDAgSVMgTE9HKEYpICsgTE9HKDErVSkKKworCWZtb3YubAkJJWQwLCVmcGNyCisJZmFkZC54CQlLTE9HMiglYTYpLCVmcDAJCSMgRklOQUwgQURECisJYnJhCQl0X2lueDIKKworCitMT0dORUFSMToKKworIyBpZiB0aGUgaW5wdXQgaXMgZXhhY3RseSBlcXVhbCB0byBvbmUsIHRoZW4gZXhpdCB0aHJvdWdoIGxkX3B6ZXJvLgorIyBpZiB0aGVzZSAyIGxpbmVzIHdlcmVuJ3QgaGVyZSwgdGhlIGNvcnJlY3QgYW5zd2VyIHdvdWxkIGJlIHJldHVybmVkCisjIGJ1dCB0aGUgSU5FWDIgYml0IHdvdWxkIGJlIHNldC4KKwlmY21wLmIJCSVmcDAsJjB4MQkJIyBpcyBpdCBlcXVhbCB0byBvbmU/CisJZmJlcS5sCQlsZF9wemVybwkJIyB5ZXMKKworIy0tUkVHSVNURVJTIFNBVkVEOiBGUENSLCBGUDEuIEZQMCBDT05UQUlOUyBUSEUgSU5QVVQuCisJZm1vdi54CQklZnAwLCVmcDEKKwlmc3ViLnMJCW9uZSglcGMpLCVmcDEJCSMgRlAxIElTIFgtMQorCWZhZGQucwkJb25lKCVwYyksJWZwMAkJIyBGUDAgSVMgWCsxCisJZmFkZC54CQklZnAxLCVmcDEJCSMgRlAxIElTIDIoWC0xKQorIy0tTE9HKFgpID0gTE9HKDErVS8yKS1MT0coMS1VLzIpIFdISUNIIElTIEFOIE9ERCBQT0xZTk9NSUFMCisjLS1JTiBVLCBVID0gMihYLTEpLyhYKzEpID0gRlAxL0ZQMAorCitMUDFDT05UMjoKKyMtLVRISVMgSVMgQU4gUkUtRU5UUlkgUE9JTlQgRk9SIExPR05QMQorCWZkaXYueAkJJWZwMCwlZnAxCQkjIEZQMSBJUyBVCisJZm1vdm0ueAkJJjB4YywtKCVzcCkJCSMgU0FWRSBGUDItMworIy0tUkVHSVNURVJTIFNBVkVEIEFSRSBOT1cgRlBDUixGUDEsRlAyLEZQMworIy0tTEVUIFY9VSpVLCBXPVYqViwgQ0FMQ1VMQVRFCisjLS1VICsgVSpWKihCMSArIFYqKEIyICsgViooQjMgKyBWKihCNCArIFYqQjUpKSkpIEJZCisjLS1VICsgVSpWKiggIFtCMSArIFcqKEIzICsgVypCNSldICArICBbViooQjIgKyBXKkI0KV0gICkKKwlmbW92LngJCSVmcDEsJWZwMAorCWZtdWwueAkJJWZwMCwlZnAwCQkjIEZQMCBJUyBWCisJZm1vdi54CQklZnAxLFNBVkVVKCVhNikJCSMgU1RPUkUgVSBJTiBNRU1PUlksIEZSRUUgRlAxCisJZm1vdi54CQklZnAwLCVmcDEKKwlmbXVsLngJCSVmcDEsJWZwMQkJIyBGUDEgSVMgVworCisJZm1vdi5kCQlMT0dCNSglcGMpLCVmcDMKKwlmbW92LmQJCUxPR0I0KCVwYyksJWZwMgorCisJZm11bC54CQklZnAxLCVmcDMJCSMgVypCNQorCWZtdWwueAkJJWZwMSwlZnAyCQkjIFcqQjQKKworCWZhZGQuZAkJTE9HQjMoJXBjKSwlZnAzCQkjIEIzK1cqQjUKKwlmYWRkLmQJCUxPR0IyKCVwYyksJWZwMgkJIyBCMitXKkI0CisKKwlmbXVsLngJCSVmcDMsJWZwMQkJIyBXKihCMytXKkI1KSwgRlAzIFJFTEVBU0VECisKKwlmbXVsLngJCSVmcDAsJWZwMgkJIyBWKihCMitXKkI0KQorCisJZmFkZC5kCQlMT0dCMSglcGMpLCVmcDEJCSMgQjErVyooQjMrVypCNSkKKwlmbXVsLngJCVNBVkVVKCVhNiksJWZwMAkJIyBGUDAgSVMgVSpWCisKKwlmYWRkLngJCSVmcDIsJWZwMQkJIyBCMStXKihCMytXKkI1KSArIFYqKEIyK1cqQjQpLCBGUDIgUkVMRUFTRUQKKwlmbW92bS54CQkoJXNwKSssJjB4MzAJCSMgRlAyLTMgUkVTVE9SRUQKKworCWZtdWwueAkJJWZwMSwlZnAwCQkjIFUqViooIFtCMStXKihCMytXKkI1KV0gKyBbViooQjIrVypCNCldICkKKworCWZtb3YubAkJJWQwLCVmcGNyCisJZmFkZC54CQlTQVZFVSglYTYpLCVmcDAKKwlicmEJCXRfaW54MgorCisjLS1SRUdJU1RFUlMgU0FWRUQgRlBDUi4gTE9HKC1WRSkgSVMgSU5WQUxJRAorTE9HTkVHOgorCWJyYQkJdF9vcGVycgorCisJZ2xvYmFsCQlzbG9nbmQKK3Nsb2duZDoKKyMtLUVOVFJZIFBPSU5UIEZPUiBMT0coWCkgRk9SIERFTk9STUFMSVpFRCBJTlBVVAorCisJbW92LmwJCSYtMTAwLEFESksoJWE2KQkJIyBJTlBVVCA9IDJeKEFESkspICogRlAwCisKKyMtLS0tbm9ybWFsaXplIHRoZSBpbnB1dCB2YWx1ZSBieSBsZWZ0IHNoaWZ0aW5nIGsgYml0cyAoayB0byBiZSBkZXRlcm1pbmVkCisjLS0tLWJlbG93KSwgYWRqdXN0aW5nIGV4cG9uZW50IGFuZCBzdG9yaW5nIC1rIHRvICBBREpLCisjLS0tLXRoZSB2YWx1ZSBUV09UTzEwMCBpcyBubyBsb25nZXIgbmVlZGVkLgorIy0tLS1Ob3RlIHRoYXQgdGhpcyBjb2RlIGFzc3VtZXMgdGhlIGRlbm9ybWFsaXplZCBpbnB1dCBpcyBOT04tWkVSTy4KKworCW1vdm0ubAkJJjB4M2YwMCwtKCVzcCkJCSMgc2F2ZSBzb21lIHJlZ2lzdGVycyAge2QyLWQ3fQorCW1vdi5sCQkoJWEwKSwlZDMJCSMgRDMgaXMgZXhwb25lbnQgb2Ygc21hbGxlc3Qgbm9ybS4gIworCW1vdi5sCQk0KCVhMCksJWQ0CisJbW92LmwJCTgoJWEwKSwlZDUJCSMgKEQ0LEQ1KSBpcyAoSGlfWCxMb19YKQorCWNsci5sCQklZDIJCQkjIEQyIHVzZWQgZm9yIGhvbGRpbmcgSworCisJdHN0LmwJCSVkNAorCWJuZS5iCQlIaV9ub3QwCisKK0hpXzA6CisJbW92LmwJCSVkNSwlZDQKKwljbHIubAkJJWQ1CisJbW92LmwJCSYzMiwlZDIKKwljbHIubAkJJWQ2CisJYmZmZm8JCSVkNHsmMDomMzJ9LCVkNgorCWxzbC5sCQklZDYsJWQ0CisJYWRkLmwJCSVkNiwlZDIJCQkjIChEMyxENCxENSkgaXMgbm9ybWFsaXplZAorCisJbW92LmwJCSVkMyxYKCVhNikKKwltb3YubAkJJWQ0LFhGUkFDKCVhNikKKwltb3YubAkJJWQ1LFhGUkFDKzQoJWE2KQorCW5lZy5sCQklZDIKKwltb3YubAkJJWQyLEFESksoJWE2KQorCWZtb3YueAkJWCglYTYpLCVmcDAKKwltb3ZtLmwJCSglc3ApKywmMHhmYwkJIyByZXN0b3JlIHJlZ2lzdGVycyB7ZDItZDd9CisJbGVhCQlYKCVhNiksJWEwCisJYnJhLncJCUxPR0JHTgkJCSMgYmVnaW4gcmVndWxhciBsb2coWCkKKworSGlfbm90MDoKKwljbHIubAkJJWQ2CisJYmZmZm8JCSVkNHsmMDomMzJ9LCVkNgkJIyBmaW5kIGZpcnN0IDEKKwltb3YubAkJJWQ2LCVkMgkJCSMgZ2V0IGsKKwlsc2wubAkJJWQ2LCVkNAorCW1vdi5sCQklZDUsJWQ3CQkJIyBhIGNvcHkgb2YgRDUKKwlsc2wubAkJJWQ2LCVkNQorCW5lZy5sCQklZDYKKwlhZGQubAkJJjMyLCVkNgorCWxzci5sCQklZDYsJWQ3CisJb3IubAkJJWQ3LCVkNAkJCSMgKEQzLEQ0LEQ1KSBub3JtYWxpemVkCisKKwltb3YubAkJJWQzLFgoJWE2KQorCW1vdi5sCQklZDQsWEZSQUMoJWE2KQorCW1vdi5sCQklZDUsWEZSQUMrNCglYTYpCisJbmVnLmwJCSVkMgorCW1vdi5sCQklZDIsQURKSyglYTYpCisJZm1vdi54CQlYKCVhNiksJWZwMAorCW1vdm0ubAkJKCVzcCkrLCYweGZjCQkjIHJlc3RvcmUgcmVnaXN0ZXJzIHtkMi1kN30KKwlsZWEJCVgoJWE2KSwlYTAKKwlicmEudwkJTE9HQkdOCQkJIyBiZWdpbiByZWd1bGFyIGxvZyhYKQorCisJZ2xvYmFsCQlzbG9nbnAxCisjLS1FTlRSWSBQT0lOVCBGT1IgTE9HKDErWCkgRk9SIFggRklOSVRFLCBOT04tWkVSTywgTk9UIE5BTidTCitzbG9nbnAxOgorCWZtb3YueAkJKCVhMCksJWZwMAkJIyBMT0FEIElOUFVUCisJZmFicy54CQklZnAwCQkJIyB0ZXN0IG1hZ25pdHVkZQorCWZjbXAueAkJJWZwMCxMVEhPTEQoJXBjKQkjIGNvbXBhcmUgd2l0aCBtaW4gdGhyZXNob2xkCisJZmJndC53CQlMUDFSRUFMCQkJIyBpZiBncmVhdGVyLCBjb250aW51ZQorCWZtb3YubAkJJWQwLCVmcGNyCisJbW92LmIJCSZGTU9WX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTU9WRQorCWZtb3YueAkJKCVhMCksJWZwMAkJIyByZXR1cm4gc2lnbmVkIGFyZ3VtZW50CisJYnJhCQl0X2NhdGNoCisKK0xQMVJFQUw6CisJZm1vdi54CQkoJWEwKSwlZnAwCQkjIExPQUQgSU5QVVQKKwltb3YubAkJJjB4MDAwMDAwMDAsQURKSyglYTYpCisJZm1vdi54CQklZnAwLCVmcDEJCSMgRlAxIElTIElOUFVUIFoKKwlmYWRkLnMJCW9uZSglcGMpLCVmcDAJCSMgWCA6PSBST1VORCgxK1opCisJZm1vdi54CQklZnAwLFgoJWE2KQorCW1vdi53CQlYRlJBQyglYTYpLFhEQ0FSRSglYTYpCisJbW92LmwJCVgoJWE2KSwlZDEKKwljbXAubAkJJWQxLCYwCisJYmxlLncJCUxQMU5FRzAJCQkjIExPRyBPRiBaRVJPIE9SIC1WRQorCWNtcC5sCQklZDEsJjB4M2ZmZTgwMDAJCSMgSVMgQk9VTkRTIFsxLzIsMy8yXT8KKwlibHQudwkJTE9HTUFJTgorCWNtcC5sCQklZDEsJjB4M2ZmZmMwMDAKKwliZ3QudwkJTE9HTUFJTgorIy0tSUYgMStaID4gMy8yIE9SIDErWiA8IDEvMiwgVEhFTiBYLCBXSElDSCBJUyBST1VORElORyAxK1osCisjLS1DT05UQUlOUyBBVCBMRUFTVCA2MyBCSVRTIE9GIElORk9STUFUSU9OIE9GIFouIElOIFRIQVQgQ0FTRSwKKyMtLVNJTVBMWSBJTlZPS0UgTE9HKFgpIEZPUiBMT0coMStaKS4KKworTFAxTkVBUjE6CisjLS1ORVhUIFNFRSBJRiBFWFAoLTEvMTYpIDwgWCA8IEVYUCgxLzE2KQorCWNtcC5sCQklZDEsJjB4M2ZmZWYwN2QKKwlibHQudwkJTFAxQ0FSRQorCWNtcC5sCQklZDEsJjB4M2ZmZjg4NDEKKwliZ3QudwkJTFAxQ0FSRQorCitMUDFPTkUxNjoKKyMtLUVYUCgtMS8xNikgPCBYIDwgRVhQKDEvMTYpLiBMT0coMStaKSA9IExPRygxK1UvMikgLSBMT0coMS1VLzIpCisjLS1XSEVSRSBVID0gMlovKDIrWikgPSAyWi8oMStYKS4KKwlmYWRkLngJCSVmcDEsJWZwMQkJIyBGUDEgSVMgMloKKwlmYWRkLnMJCW9uZSglcGMpLCVmcDAJCSMgRlAwIElTIDErWAorIy0tVSA9IEZQMS9GUDAKKwlicmEudwkJTFAxQ09OVDIKKworTFAxQ0FSRToKKyMtLUhFUkUgV0UgVVNFIFRIRSBVU1VBTCBUQUJMRSBEUklWRU4gQVBQUk9BQ0guIENBUkUgSEFTIFRPIEJFCisjLS1UQUtFTiBCRUNBVVNFIDErWiBDQU4gSEFWRSA2NyBCSVRTIE9GIElORk9STUFUSU9OIEFORCBXRSBNVVNUCisjLS1QUkVTRVJWRSBBTEwgVEhFIElORk9STUFUSU9OLiBCRUNBVVNFIDErWiBJUyBJTiBbMS8yLDMvMl0sCisjLS1USEVSRSBBUkUgT05MWSBUV08gQ0FTRVMuCisjLS1DQVNFIDE6IDErWiA8IDEsIFRIRU4gSyA9IC0xIEFORCBZLUYgPSAoMi1GKSArIDJaCisjLS1DQVNFIDI6IDErWiA+IDEsIFRIRU4gSyA9IDAgIEFORCBZLUYgPSAoMS1GKSArIFoKKyMtLU9OIFJFVFVSTklORyBUTyBMUDFDT05UMSwgV0UgTVVTVCBIQVZFIEsgSU4gRlAxLCBBRERSRVNTIE9GCisjLS0oMS9GKSBJTiBBMCwgWS1GIElOIEZQMCwgQU5EIEZQMiBTQVZFRC4KKworCW1vdi5sCQlYRlJBQyglYTYpLEZGUkFDKCVhNikKKwlhbmQubAkJJjB4RkUwMDAwMDAsRkZSQUMoJWE2KQorCW9yLmwJCSYweDAxMDAwMDAwLEZGUkFDKCVhNikJIyBGIE9CVEFJTkVECisJY21wLmwJCSVkMSwmMHgzRkZGODAwMAkJIyBTRUUgSUYgMStaID4gMQorCWJnZS5iCQlLSVNaRVJPCisKK0tJU05FRzE6CisJZm1vdi5zCQlUV08oJXBjKSwlZnAwCisJbW92LmwJCSYweDNmZmYwMDAwLEYoJWE2KQorCWNsci5sCQlGKzgoJWE2KQorCWZzdWIueAkJRiglYTYpLCVmcDAJCSMgMi1GCisJbW92LmwJCUZGUkFDKCVhNiksJWQxCisJYW5kLmwJCSYweDdFMDAwMDAwLCVkMQorCWFzci5sCQkmOCwlZDEKKwlhc3IubAkJJjgsJWQxCisJYXNyLmwJCSY0LCVkMQkJCSMgRDAgQ09OVEFJTlMgRElTUExBQ0VNRU5UIEZPUiAxL0YKKwlmYWRkLngJCSVmcDEsJWZwMQkJIyBHRVQgMloKKwlmbW92bS54CQkmMHhjLC0oJXNwKQkJIyBTQVZFIEZQMiAgeyVmcDIvJWZwM30KKwlmYWRkLngJCSVmcDEsJWZwMAkJIyBGUDAgSVMgWS1GID0gKDItRikrMloKKwlsZWEJCUxPR1RCTCglcGMpLCVhMAkJIyBBMCBJUyBBRERSRVNTIE9GIDEvRgorCWFkZC5sCQklZDEsJWEwCisJZm1vdi5zCQluZWdvbmUoJXBjKSwlZnAxCSMgRlAxIElTIEsgPSAtMQorCWJyYS53CQlMUDFDT05UMQorCitLSVNaRVJPOgorCWZtb3YucwkJb25lKCVwYyksJWZwMAorCW1vdi5sCQkmMHgzZmZmMDAwMCxGKCVhNikKKwljbHIubAkJRis4KCVhNikKKwlmc3ViLngJCUYoJWE2KSwlZnAwCQkjIDEtRgorCW1vdi5sCQlGRlJBQyglYTYpLCVkMQorCWFuZC5sCQkmMHg3RTAwMDAwMCwlZDEKKwlhc3IubAkJJjgsJWQxCisJYXNyLmwJCSY4LCVkMQorCWFzci5sCQkmNCwlZDEKKwlmYWRkLngJCSVmcDEsJWZwMAkJIyBGUDAgSVMgWS1GCisJZm1vdm0ueAkJJjB4YywtKCVzcCkJCSMgRlAyIFNBVkVEIHslZnAyLyVmcDN9CisJbGVhCQlMT0dUQkwoJXBjKSwlYTAKKwlhZGQubAkJJWQxLCVhMAkJCSMgQTAgSVMgQUREUkVTUyBPRiAxL0YKKwlmbW92LnMJCXplcm8oJXBjKSwlZnAxCQkjIEZQMSBJUyBLID0gMAorCWJyYS53CQlMUDFDT05UMQorCitMUDFORUcwOgorIy0tRlBDUiBTQVZFRC4gRDAgSVMgWCBJTiBDT01QQUNUIEZPUk0uCisJY21wLmwJCSVkMSwmMAorCWJsdC5iCQlMUDFORUcKK0xQMVpFUk86CisJZm1vdi5zCQluZWdvbmUoJXBjKSwlZnAwCisKKwlmbW92LmwJCSVkMCwlZnBjcgorCWJyYQkJdF9kegorCitMUDFORUc6CisJZm1vdi5zCQl6ZXJvKCVwYyksJWZwMAorCisJZm1vdi5sCQklZDAsJWZwY3IKKwlicmEJCXRfb3BlcnIKKworCWdsb2JhbAkJc2xvZ25wMWQKKyMtLUVOVFJZIFBPSU5UIEZPUiBMT0coMStaKSBGT1IgREVOT1JNQUxJWkVEIElOUFVUCisjIFNpbXBseSByZXR1cm4gdGhlIGRlbm9ybQorc2xvZ25wMWQ6CisJYnJhCQl0X2V4dGRucm0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzYXRhbmgoKTogIGNvbXB1dGVzIHRoZSBpbnZlcnNlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiBhIG5vcm0gaW5wdXQJIworIyBzYXRhbmhkKCk6IGNvbXB1dGVzIHRoZSBpbnZlcnNlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiBhIGRlbm9ybSBpbnB1dAkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSBhcmN0YW5oKFgpCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMyB1bHBzIGluCTY0IHNpZ25pZmljYW50IGJpdCwJIworIwlpLmUuIHdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkJIworIwlyb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljCSMKKyMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkJCQkJCQkJCSMKKyMJQVRBTkgJCQkJCQkJCSMKKyMJMS4gSWYgfFh8ID49IDEsIGdvIHRvIDMuCQkJCQkjCisjCQkJCQkJCQkJIworIwkyLiAofFh8IDwgMSkgQ2FsY3VsYXRlIGF0YW5oKFgpIGJ5CQkJCSMKKyMJCXNnbiA6PSBzaWduKFgpCQkJCQkJIworIwkJeSA6PSB8WHwJCQkJCQkjCisjCQl6IDo9IDJ5LygxLXkpCQkJCQkJIworIwkJYXRhbmgoWCkgOj0gc2duICogKDEvMikgKiBsb2dwMSh6KQkJCSMKKyMJCUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCTMuIElmIHxYfCA+IDEsIGdvIHRvIDUuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJNC4gKHxYfCA9IDEpIEdlbmVyYXRlIGluZmluaXR5IHdpdGggYW4gYXBwcm9wcmlhdGUgc2lnbiBhbmQJIworIwkJZGl2aWRlLWJ5LXplcm8gYnkJCQkJCSMKKyMJCXNnbiA6PSBzaWduKFgpCQkJCQkJIworIwkJYXRhbihYKSA6PSBzZ24gLyAoKzApLgkJCQkJIworIwkJRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJNS4gKHxYfCA+IDEpIEdlbmVyYXRlIGFuIGludmFsaWQgb3BlcmF0aW9uIGJ5IDAgKiBpbmZpbml0eS4JIworIwkJRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc2F0YW5oCitzYXRhbmg6CisJbW92LmwJCSglYTApLCVkMQorCW1vdi53CQk0KCVhMCksJWQxCisJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQorCWNtcC5sCQklZDEsJjB4M0ZGRjgwMDAKKwliZ2UuYgkJQVRBTkhCSUcKKworIy0tVEhJUyBJUyBUSEUgVVNVQUwgQ0FTRSwgfFh8IDwgMQorIy0tWSA9IHxYfCwgWiA9IDJZLygxLVkpLCBBVEFOSChYKSA9IFNJR04oWCkgKiAoMS8yKSAqIExPRzFQKFopLgorCisJZmFicy54CQkoJWEwKSwlZnAwCQkjIFkgPSB8WHwKKwlmbW92LngJCSVmcDAsJWZwMQorCWZuZWcueAkJJWZwMQkJCSMgLVkKKwlmYWRkLngJCSVmcDAsJWZwMAkJIyAyWQorCWZhZGQucwkJJjB4M0Y4MDAwMDAsJWZwMQkjIDEtWQorCWZkaXYueAkJJWZwMSwlZnAwCQkjIDJZLygxLVkpCisJbW92LmwJCSglYTApLCVkMQorCWFuZC5sCQkmMHg4MDAwMDAwMCwlZDEKKwlvci5sCQkmMHgzRjAwMDAwMCwlZDEJCSMgU0lHTihYKSpIQUxGCisJbW92LmwJCSVkMSwtKCVzcCkKKworCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgcm5kIHByZWMsbW9kZQorCWNsci5sCQklZDAJCQkjIHBhc3MgZXh0IHByZWMsUk4KKwlmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSBaIG9uIHN0YWNrCisJbGVhCQkoJXNwKSwlYTAJCSMgcGFzcyBwdHIgdG8gWgorCWJzcgkJc2xvZ25wMQkJCSMgTE9HMVAoWikKKwlhZGQubAkJJjB4Yywlc3AJCSMgY2xlYXIgWiBmcm9tIHN0YWNrCisKKwltb3YubAkJKCVzcCkrLCVkMAkJIyBmZXRjaCBvbGQgcHJlYyxtb2RlCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgbG9hZCBpdAorCW1vdi5iCQkmRk1VTF9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1VTAorCWZtdWwucwkJKCVzcCkrLCVmcDAKKwlicmEJCXRfY2F0Y2gKKworQVRBTkhCSUc6CisJZmFicy54CQkoJWEwKSwlZnAwCQkjIHxYfAorCWZjbXAucwkJJWZwMCwmMHgzRjgwMDAwMAorCWZiZ3QJCXRfb3BlcnIKKwlicmEJCXRfZHoKKworCWdsb2JhbAkJc2F0YW5oZAorIy0tQVRBTkgoWCkgPSBYIEZPUiBERU5PUk1BTElaRUQgWAorc2F0YW5oZDoKKwlicmEJCXRfZXh0ZG5ybQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNsb2cxMCgpOiAgY29tcHV0ZXMgdGhlIGJhc2UtMTAgbG9nYXJpdGhtIG9mIGEgbm9ybWFsaXplZCBpbnB1dAkjCisjIHNsb2cxMGQoKTogY29tcHV0ZXMgdGhlIGJhc2UtMTAgbG9nYXJpdGhtIG9mIGEgZGVub3JtYWxpemVkIGlucHV0CSMKKyMgc2xvZzIoKTogICBjb21wdXRlcyB0aGUgYmFzZS0yIGxvZ2FyaXRobSBvZiBhIG5vcm1hbGl6ZWQgaW5wdXQJIworIyBzbG9nMmQoKTogIGNvbXB1dGVzIHRoZSBiYXNlLTIgbG9nYXJpdGhtIG9mIGEgZGVub3JtYWxpemVkIGlucHV0CSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQJCQkjCisjCWQwID0gcm91bmQgcHJlY2lzaW9uLG1vZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IGxvZ18xMChYKSBvciBsb2dfMihYKQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMS43IHVscHMgaW4gNjQgc2lnbmlmaWNhbnQgYml0LAkjCisjCWkuZS4gd2l0aGluIDAuNTAwMyB1bHAgdG8gNTMgYml0cyBpZiB0aGUgcmVzdWx0IGlzIHN1YnNlcXVlbnRseQkjCisjCXJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gVGhlIHJlc3VsdCBpcyBwcm92YWJseSBtb25vdG9uaWMJIworIwlpbiBkb3VibGUgcHJlY2lzaW9uLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCQkJCQkJCQkJIworIyAgICAgICBzbG9nMTBkOgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDAuCUlmIFggPCAwLCBjcmVhdGUgYSBOYU4gYW5kIHJhaXNlIHRoZSBpbnZhbGlkIG9wZXJhdGlvbgkjCisjICAgICAgICAgICAgICAgZmxhZy4gT3RoZXJ3aXNlLCBzYXZlIEZQQ1IgaW4gRDE7IHNldCBGcENSIHRvIGRlZmF1bHQuCSMKKyMgICAgICAgTm90ZXM6ICBEZWZhdWx0IG1lYW5zIHJvdW5kLXRvLW5lYXJlc3QgbW9kZSwgbm8gZmxvYXRpbmctcG9pbnQJIworIyAgICAgICAgICAgICAgIHRyYXBzLCBhbmQgcHJlY2lzaW9uIGNvbnRyb2wgPSBkb3VibGUgZXh0ZW5kZWQuCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDEuIENhbGwgc2xvZ25kIHRvIG9idGFpbiBZID0gbG9nKFgpLCB0aGUgbmF0dXJhbCBsb2cgb2YgWC4JIworIyAgICAgICBOb3RlczogIEV2ZW4gaWYgWCBpcyBkZW5vcm1hbGl6ZWQsIGxvZyhYKSBpcyBhbHdheXMgbm9ybWFsaXplZC4JIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAyLiAgQ29tcHV0ZSBsb2dfMTAoWCkgPSBsb2coWCkgKiAoMS9sb2coMTApKS4JCSMKKyMgICAgICAgICAgICAyLjEgUmVzdG9yZSB0aGUgdXNlciBGUENSCQkJCQkjCisjICAgICAgICAgICAgMi4yIFJldHVybiBhbnMgOj0gWSAqIElOVl9MMTAuCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIHNsb2cxMDoJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgMC4gSWYgWCA8IDAsIGNyZWF0ZSBhIE5hTiBhbmQgcmFpc2UgdGhlIGludmFsaWQgb3BlcmF0aW9uCSMKKyMgICAgICAgICAgICAgICBmbGFnLiBPdGhlcndpc2UsIHNhdmUgRlBDUiBpbiBEMTsgc2V0IEZwQ1IgdG8gZGVmYXVsdC4JIworIyAgICAgICBOb3RlczogIERlZmF1bHQgbWVhbnMgcm91bmQtdG8tbmVhcmVzdCBtb2RlLCBubyBmbG9hdGluZy1wb2ludAkjCisjICAgICAgICAgICAgICAgdHJhcHMsIGFuZCBwcmVjaXNpb24gY29udHJvbCA9IGRvdWJsZSBleHRlbmRlZC4JCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgMS4gQ2FsbCBzTG9nTiB0byBvYnRhaW4gWSA9IGxvZyhYKSwgdGhlIG5hdHVyYWwgbG9nIG9mIFguCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgMi4gICBDb21wdXRlIGxvZ18xMChYKSA9IGxvZyhYKSAqICgxL2xvZygxMCkpLgkJIworIyAgICAgICAgICAgIDIuMSAgUmVzdG9yZSB0aGUgdXNlciBGUENSCQkJCQkjCisjICAgICAgICAgICAgMi4yICBSZXR1cm4gYW5zIDo9IFkgKiBJTlZfTDEwLgkJCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBzTG9nMmQ6CQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDAuIElmIFggPCAwLCBjcmVhdGUgYSBOYU4gYW5kIHJhaXNlIHRoZSBpbnZhbGlkIG9wZXJhdGlvbgkjCisjICAgICAgICAgICAgICAgZmxhZy4gT3RoZXJ3aXNlLCBzYXZlIEZQQ1IgaW4gRDE7IHNldCBGcENSIHRvIGRlZmF1bHQuCSMKKyMgICAgICAgTm90ZXM6ICBEZWZhdWx0IG1lYW5zIHJvdW5kLXRvLW5lYXJlc3QgbW9kZSwgbm8gZmxvYXRpbmctcG9pbnQJIworIyAgICAgICAgICAgICAgIHRyYXBzLCBhbmQgcHJlY2lzaW9uIGNvbnRyb2wgPSBkb3VibGUgZXh0ZW5kZWQuCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDEuIENhbGwgc2xvZ25kIHRvIG9idGFpbiBZID0gbG9nKFgpLCB0aGUgbmF0dXJhbCBsb2cgb2YgWC4JIworIyAgICAgICBOb3RlczogIEV2ZW4gaWYgWCBpcyBkZW5vcm1hbGl6ZWQsIGxvZyhYKSBpcyBhbHdheXMgbm9ybWFsaXplZC4JIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAyLiAgIENvbXB1dGUgbG9nXzEwKFgpID0gbG9nKFgpICogKDEvbG9nKDIpKS4JCSMKKyMgICAgICAgICAgICAyLjEgIFJlc3RvcmUgdGhlIHVzZXIgRlBDUgkJCQkJIworIyAgICAgICAgICAgIDIuMiAgUmV0dXJuIGFucyA6PSBZICogSU5WX0wyLgkJCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBzTG9nMjoJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgMC4gSWYgWCA8IDAsIGNyZWF0ZSBhIE5hTiBhbmQgcmFpc2UgdGhlIGludmFsaWQgb3BlcmF0aW9uCSMKKyMgICAgICAgICAgICAgICBmbGFnLiBPdGhlcndpc2UsIHNhdmUgRlBDUiBpbiBEMTsgc2V0IEZwQ1IgdG8gZGVmYXVsdC4JIworIyAgICAgICBOb3RlczogIERlZmF1bHQgbWVhbnMgcm91bmQtdG8tbmVhcmVzdCBtb2RlLCBubyBmbG9hdGluZy1wb2ludAkjCisjICAgICAgICAgICAgICAgdHJhcHMsIGFuZCBwcmVjaXNpb24gY29udHJvbCA9IGRvdWJsZSBleHRlbmRlZC4JCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgMS4gSWYgWCBpcyBub3QgYW4gaW50ZWdlciBwb3dlciBvZiB0d28sIGkuZS4sIFggIT0gMl5rLAkjCisjICAgICAgICAgICAgICAgZ28gdG8gU3RlcCAzLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjICAgICAgIFN0ZXAgMi4gICBSZXR1cm4gay4JCQkJCQkjCisjICAgICAgICAgICAgMi4xICBHZXQgaW50ZWdlciBrLCBYID0gMl5rLgkJCQkjCisjICAgICAgICAgICAgMi4yICBSZXN0b3JlIHRoZSB1c2VyIEZQQ1IuCQkJCSMKKyMgICAgICAgICAgICAyLjMgIFJldHVybiBhbnMgOj0gY29udmVydC10by1kb3VibGUtZXh0ZW5kZWQoaykuCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDMuIENhbGwgc0xvZ04gdG8gb2J0YWluIFkgPSBsb2coWCksIHRoZSBuYXR1cmFsIGxvZyBvZiBYLgkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDQuICAgQ29tcHV0ZSBsb2dfMihYKSA9IGxvZyhYKSAqICgxL2xvZygyKSkuCQkjCisjICAgICAgICAgICAgNC4xICBSZXN0b3JlIHRoZSB1c2VyIEZQQ1IJCQkJCSMKKyMgICAgICAgICAgICA0LjIgIFJldHVybiBhbnMgOj0gWSAqIElOVl9MMi4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworSU5WX0wxMDoKKwlsb25nCQkweDNGRkQwMDAwLDB4REU1QkQ4QTksMHgzNzI4NzE5NSwweDAwMDAwMDAwCisKK0lOVl9MMjoKKwlsb25nCQkweDNGRkYwMDAwLDB4QjhBQTNCMjksMHg1QzE3RjBCQywweDAwMDAwMDAwCisKKwlnbG9iYWwJCXNsb2cxMAorIy0tZW50cnkgcG9pbnQgZm9yIExvZzEwKFgpLCBYIGlzIG5vcm1hbGl6ZWQKK3Nsb2cxMDoKKwlmbW92LmIJCSYweDEsJWZwMAorCWZjbXAueAkJJWZwMCwoJWEwKQkJIyBpZiBvcGVyYW5kID09IDEsCisJZmJlcS5sCQlsZF9wemVybwkJIyByZXR1cm4gYW4gRVhBQ1QgemVybworCisJbW92LmwJCSglYTApLCVkMQorCWJsdC53CQlpbnZhbGlkCisJbW92LmwJCSVkMCwtKCVzcCkKKwljbHIubAkJJWQwCisJYnNyCQlzbG9nbgkJCSMgbG9nKFgpLCBYIG5vcm1hbC4KKwlmbW92LmwJCSglc3ApKywlZnBjcgorCWZtdWwueAkJSU5WX0wxMCglcGMpLCVmcDAKKwlicmEJCXRfaW54MgorCisJZ2xvYmFsCQlzbG9nMTBkCisjLS1lbnRyeSBwb2ludCBmb3IgTG9nMTAoWCksIFggaXMgZGVub3JtYWxpemVkCitzbG9nMTBkOgorCW1vdi5sCQkoJWEwKSwlZDEKKwlibHQudwkJaW52YWxpZAorCW1vdi5sCQklZDAsLSglc3ApCisJY2xyLmwJCSVkMAorCWJzcgkJc2xvZ25kCQkJIyBsb2coWCksIFggZGVub3JtLgorCWZtb3YubAkJKCVzcCkrLCVmcGNyCisJZm11bC54CQlJTlZfTDEwKCVwYyksJWZwMAorCWJyYQkJdF9taW54MgorCisJZ2xvYmFsCQlzbG9nMgorIy0tZW50cnkgcG9pbnQgZm9yIExvZzIoWCksIFggaXMgbm9ybWFsaXplZAorc2xvZzI6CisJbW92LmwJCSglYTApLCVkMQorCWJsdC53CQlpbnZhbGlkCisKKwltb3YubAkJOCglYTApLCVkMQorCWJuZS5iCQljb250aW51ZQkJIyBYIGlzIG5vdCAyXmsKKworCW1vdi5sCQk0KCVhMCksJWQxCisJYW5kLmwJCSYweDdGRkZGRkZGLCVkMQorCWJuZS5iCQljb250aW51ZQorCisjLS1YID0gMl5rLgorCW1vdi53CQkoJWEwKSwlZDEKKwlhbmQubAkJJjB4MDAwMDdGRkYsJWQxCisJc3ViLmwJCSYweDNGRkYsJWQxCisJYmVxLmwJCWxkX3B6ZXJvCisJZm1vdi5sCQklZDAsJWZwY3IKKwlmbW92LmwJCSVkMSwlZnAwCisJYnJhCQl0X2lueDIKKworY29udGludWU6CisJbW92LmwJCSVkMCwtKCVzcCkKKwljbHIubAkJJWQwCisJYnNyCQlzbG9nbgkJCSMgbG9nKFgpLCBYIG5vcm1hbC4KKwlmbW92LmwJCSglc3ApKywlZnBjcgorCWZtdWwueAkJSU5WX0wyKCVwYyksJWZwMAorCWJyYQkJdF9pbngyCisKK2ludmFsaWQ6CisJYnJhCQl0X29wZXJyCisKKwlnbG9iYWwJCXNsb2cyZAorIy0tZW50cnkgcG9pbnQgZm9yIExvZzIoWCksIFggaXMgZGVub3JtYWxpemVkCitzbG9nMmQ6CisJbW92LmwJCSglYTApLCVkMQorCWJsdC53CQlpbnZhbGlkCisJbW92LmwJCSVkMCwtKCVzcCkKKwljbHIubAkJJWQwCisJYnNyCQlzbG9nbmQJCQkjIGxvZyhYKSwgWCBkZW5vcm0uCisJZm1vdi5sCQkoJXNwKSssJWZwY3IKKwlmbXVsLngJCUlOVl9MMiglcGMpLCVmcDAKKwlicmEJCXRfbWlueDIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzdHdvdG94KCk6ICBjb21wdXRlcyAyKipYIGZvciBhIG5vcm1hbGl6ZWQgaW5wdXQJCQkjCisjIHN0d290b3hkKCk6IGNvbXB1dGVzIDIqKlggZm9yIGEgZGVub3JtYWxpemVkIGlucHV0CQkJIworIyBzdGVudG94KCk6ICBjb21wdXRlcyAxMCoqWCBmb3IgYSBub3JtYWxpemVkIGlucHV0CQkJIworIyBzdGVudG94ZCgpOiBjb21wdXRlcyAxMCoqWCBmb3IgYSBkZW5vcm1hbGl6ZWQgaW5wdXQJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0CQkJIworIwlkMCA9IHJvdW5kIHByZWNpc2lvbixtb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSAyKipYIG9yIDEwKipYCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUNDVVJBQ1kgYW5kIE1PTk9UT05JQ0lUWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhlIHJldHVybmVkIHJlc3VsdCBpcyB3aXRoaW4gMiB1bHBzIGluIDY0IHNpZ25pZmljYW50IGJpdCwJIworIwlpLmUuIHdpdGhpbiAwLjUwMDEgdWxwIHRvIDUzIGJpdHMgaWYgdGhlIHJlc3VsdCBpcyBzdWJzZXF1ZW50bHkJIworIwlyb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXMgcHJvdmFibHkgbW9ub3RvbmljCSMKKyMJaW4gZG91YmxlIHByZWNpc2lvbi4JCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkJCQkJCQkJCSMKKyMJdHdvdG94CQkJCQkJCQkjCisjCTEuIElmIHxYfCA+IDE2NDgwLCBnbyB0byBFeHBCaWcuCQkJCSMKKyMJCQkJCQkJCQkjCisjCTIuIElmIHxYfCA8IDIqKigtNzApLCBnbyB0byBFeHBTbS4JCQkJIworIwkJCQkJCQkJCSMKKyMJMy4gRGVjb21wb3NlIFggYXMgWCA9IE4vNjQgKyByIHdoZXJlIHxyfCA8PSAxLzEyOC4gRnVydGhlcm1vcmUJIworIwkJZGVjb21wb3NlIE4gYXMJCQkJCQkjCisjCQkgTiA9IDY0KE0gKyBNJykgKyBqLCAgaiA9IDAsMSwyLC4uLiw2My4JCQkjCisjCQkJCQkJCQkJIworIwk0LiBPdmVyd3JpdGUgciA6PSByICogbG9nMi4gVGhlbgkJCQkjCisjCQkyKipYID0gMioqKE0nKSAqIDIqKihNKSAqIDIqKihqLzY0KSAqIGV4cChyKS4JCSMKKyMJCUdvIHRvIGV4cHIgdG8gY29tcHV0ZSB0aGF0IGV4cHJlc3Npb24uCQkJIworIwkJCQkJCQkJCSMKKyMJdGVudG94CQkJCQkJCQkjCisjCTEuIElmIHxYfCA+IDE2NDgwKmxvZ18xMCgyKSAoYmFzZSAxMCBsb2cgb2YgMiksIGdvIHRvIEV4cEJpZy4JIworIwkJCQkJCQkJCSMKKyMJMi4gSWYgfFh8IDwgMioqKC03MCksIGdvIHRvIEV4cFNtLgkJCQkjCisjCQkJCQkJCQkJIworIwkzLiBTZXQgeSA6PSBYKmxvZ18yKDEwKSo2NCAoYmFzZSAyIGxvZyBvZiAxMCkuIFNldAkJIworIwkJTiA6PSByb3VuZC10by1pbnQoeSkuIERlY29tcG9zZSBOIGFzCQkJIworIwkJIE4gPSA2NChNICsgTScpICsgaiwgIGogPSAwLDEsMiwuLi4sNjMuCQkJIworIwkJCQkJCQkJCSMKKyMJNC4gRGVmaW5lIHIgYXMJCQkJCQkJIworIwkJciA6PSAoKFggLSBOKkwxKS1OKkwyKSAqIEwxMAkJCQkjCisjCQl3aGVyZSBMMSwgTDIgYXJlIHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXJ0cyBvZgkjCisjCQlsb2dfMTAoMikvNjQgYW5kIEwxMCBpcyB0aGUgbmF0dXJhbCBsb2cgb2YgMTAuIFRoZW4JIworIwkJMTAqKlggPSAyKiooTScpICogMioqKE0pICogMioqKGovNjQpICogZXhwKHIpLgkJIworIwkJR28gdG8gZXhwciB0byBjb21wdXRlIHRoYXQgZXhwcmVzc2lvbi4JCQkjCisjCQkJCQkJCQkJIworIwlleHByCQkJCQkJCQkjCisjCTEuIEZldGNoIDIqKihqLzY0KSBmcm9tIHRhYmxlIGFzIEZhY3QxIGFuZCBGYWN0Mi4JCSMKKyMJCQkJCQkJCQkjCisjCTIuIE92ZXJ3cml0ZSBGYWN0MSBhbmQgRmFjdDIgYnkJCQkJCSMKKyMJCUZhY3QxIDo9IDIqKihNKSAqIEZhY3QxCQkJCQkjCisjCQlGYWN0MiA6PSAyKiooTSkgKiBGYWN0MgkJCQkJIworIwkJVGh1cyBGYWN0MSArIEZhY3QyID0gMioqKE0pICogMioqKGovNjQpLgkJIworIwkJCQkJCQkJCSMKKyMJMy4gQ2FsY3VsYXRlIFAgd2hlcmUgMSArIFAgYXBwcm94aW1hdGVzIGV4cChyKToJCQkjCisjCQlQID0gciArIHIqciooQTErciooQTIrLi4uK3IqQTUpKS4JCQkjCisjCQkJCQkJCQkJIworIwk0LiBMZXQgQWRqRmFjdCA6PSAyKiooTScpLiBSZXR1cm4JCQkJIworIwkJQWRqRmFjdCAqICggRmFjdDEgKyAoKEZhY3QxKlApICsgRmFjdDIpICkuCQkjCisjCQlFeGl0LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwlFeHBCaWcJCQkJCQkJCSMKKyMJMS4gR2VuZXJhdGUgb3ZlcmZsb3cgYnkgSHVnZSAqIEh1Z2UgaWYgWCA+IDA7IG90aGVyd2lzZSwJIworIwkgICAgICAgIGdlbmVyYXRlIHVuZGVyZmxvdyBieSBUaW55ICogVGlueS4JCQkjCisjCQkJCQkJCQkJIworIwlFeHBTbQkJCQkJCQkJIworIwkxLiBSZXR1cm4gMSArIFguCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworTDJURU42NDoKKwlsb25nCQkweDQwNkE5MzRGLDB4MDk3OUEzNzEJIyA2NExPRzEwL0xPRzIKK0wxMFRXTzE6CisJbG9uZwkJMHgzRjczNDQxMywweDUwOUY4MDAwCSMgTE9HMi82NExPRzEwCisKK0wxMFRXTzI6CisJbG9uZwkJMHhCRkNEMDAwMCwweEMwMjE5REMxLDB4REE5OTRGRDIsMHgwMDAwMDAwMAorCitMT0cxMDoJbG9uZwkJMHg0MDAwMDAwMCwweDkzNUQ4RERELDB4QUFBOEFDMTcsMHgwMDAwMDAwMAorCitMT0cyOglsb25nCQkweDNGRkUwMDAwLDB4QjE3MjE3RjcsMHhEMUNGNzlBQywweDAwMDAwMDAwCisKK0VYUEE1Oglsb25nCQkweDNGNTZDMTZELDB4NkY3QkQwQjIKK0VYUEE0Oglsb25nCQkweDNGODExMTEyLDB4MzAyQzcxMkMKK0VYUEEzOglsb25nCQkweDNGQTU1NTU1LDB4NTU1NTRDQzEKK0VYUEEyOglsb25nCQkweDNGQzU1NTU1LDB4NTU1NTRBNTQKK0VYUEExOglsb25nCQkweDNGRTAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisKK1RFWFBUQkw6CisJbG9uZwkJMHgzRkZGMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAsMHgzRjczODAwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4MTY0RDFGMywweEJDMDMwNzczLDB4M0ZCRUY3Q0EKKwlsb25nCQkweDNGRkYwMDAwLDB4ODJDRDg2OTgsMHhBQzJCQTFENywweDNGQkRGOEE5CisJbG9uZwkJMHgzRkZGMDAwMCwweDg0M0EyOEMzLDB4QUNERTQwNDYsMHgzRkJDRDdDOQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4NUFBQzM2NywweENDNDg3QjE1LDB4QkZCREU4REEKKwlsb25nCQkweDNGRkYwMDAwLDB4ODcxRjYxOTYsMHg5RThEMTAxMCwweDNGQkRFODVDCisJbG9uZwkJMHgzRkZGMDAwMCwweDg4OTgwRTgwLDB4OTJEQTg1MjcsMHgzRkJFQkJGMQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4QTE0RDU3NSwweDQ5NkVGRDlBLDB4M0ZCQjgwQ0EKKwlsb25nCQkweDNGRkYwMDAwLDB4OEI5NUMxRTMsMHhFQThCRDZFNywweEJGQkE4MzczCisJbG9uZwkJMHgzRkZGMDAwMCwweDhEMUFERjVCLDB4N0U1QkE5RTYsMHhCRkJFOTY3MAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg4RUE0Mzk4QiwweDQ1Q0Q1M0MwLDB4M0ZCREI3MDAKKwlsb25nCQkweDNGRkYwMDAwLDB4OTAzMURDNDMsMHgxNDY2QjFEQywweDNGQkVFRUIwCisJbG9uZwkJMHgzRkZGMDAwMCwweDkxQzNEMzczLDB4QUIxMUMzMzYsMHgzRkJCRkQ2RAorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5MzVBMkIyRiwweDEzRTZFOTJDLDB4QkZCREIzMTkKKwlsb25nCQkweDNGRkYwMDAwLDB4OTRGNEVGQTgsMHhGRUY3MDk2MSwweDNGQkRCQTJCCisJbG9uZwkJMHgzRkZGMDAwMCwweDk2OTQyRDM3LDB4MjAxODVBMDAsMHgzRkJFOTFENQorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5ODM3RjA1MSwweDhEQjhBOTZGLDB4M0ZCRThENUEKKwlsb25nCQkweDNGRkYwMDAwLDB4OTlFMDQ1OTMsMHgyMEI3RkE2NSwweEJGQkNERTdCCisJbG9uZwkJMHgzRkZGMDAwMCwweDlCOEQzOUI5LDB4RDU0RTU1MzksMHhCRkJFQkFBRgorCWxvbmcJCTB4M0ZGRjAwMDAsMHg5RDNFRDlBNywweDJDRkZCNzUxLDB4QkZCRDg2REEKKwlsb25nCQkweDNGRkYwMDAwLDB4OUVGNTMyNjAsMHg5MUExMTFBRSwweEJGQkVCRURECisJbG9uZwkJMHgzRkZGMDAwMCwweEEwQjA1MTBGLDB4Qjk3MTRGQzIsMHgzRkJDQzk2RQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBMjcwNDMwMywweDBDNDk2ODE5LDB4QkZCRUM5MEIKKwlsb25nCQkweDNGRkYwMDAwLDB4QTQzNTE1QUUsMHgwOUU2ODA5RSwweDNGQkJEMURCCisJbG9uZwkJMHgzRkZGMDAwMCwweEE1RkVENkE5LDB4QjE1MTM4RUEsMHgzRkJDRTVFQgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBN0NEOTNCNCwweEU5NjUzNTZBLDB4QkZCRUMyNzQKKwlsb25nCQkweDNGRkYwMDAwLDB4QTlBMTVBQjQsMHhFQTdDMEVGOCwweDNGQkVBODNDCisJbG9uZwkJMHgzRkZGMDAwMCwweEFCN0EzOUI1LDB4QTkzRUQzMzcsMHgzRkJFQ0IwMAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhBRDU4M0VFQSwweDQyQTE0QUM2LDB4M0ZCRTkzMDEKKwlsb25nCQkweDNGRkYwMDAwLDB4QUYzQjc4QUQsMHg2OTBBNDM3NSwweEJGQkQ4MzY3CisJbG9uZwkJMHgzRkZGMDAwMCwweEIxMjNGNTgxLDB4RDJBQzI1OTAsMHhCRkJFRjA1RgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCMzExQzQxMiwweEE5MTEyNDg5LDB4M0ZCREZCM0MKKwlsb25nCQkweDNGRkYwMDAwLDB4QjUwNEYzMzMsMHhGOURFNjQ4NCwweDNGQkVCMkZCCisJbG9uZwkJMHgzRkZGMDAwMCwweEI2RkQ5MUUzLDB4MjhEMTc3OTEsMHgzRkJBRTJDQgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCOEZCQUY0NywweDYyRkI5RUU5LDB4M0ZCQ0RDM0MKKwlsb25nCQkweDNGRkYwMDAwLDB4QkFGRjVBQjIsMHgxMzNFNDVGQiwweDNGQkVFOUFBCisJbG9uZwkJMHgzRkZGMDAwMCwweEJEMDhBMzlGLDB4NTgwQzM2QkYsMHhCRkJFQUVGRAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhCRjE3OTlCNiwweDdBNzMxMDgzLDB4QkZCQ0JGNTEKKwlsb25nCQkweDNGRkYwMDAwLDB4QzEyQzRDQ0EsMHg2NjcwOTQ1NiwweDNGQkVGODhBCisJbG9uZwkJMHgzRkZGMDAwMCwweEMzNDZDQ0RBLDB4MjQ5NzY0MDcsMHgzRkJEODNCMgorCWxvbmcJCTB4M0ZGRjAwMDAsMHhDNTY3MkExMSwweDU1MDZEQURELDB4M0ZCREY4QUIKKwlsb25nCQkweDNGRkYwMDAwLDB4Qzc4RDc0QzgsMHhBQkI5QjE1RCwweEJGQkRGQjE3CisJbG9uZwkJMHgzRkZGMDAwMCwweEM5QjlCRDg2LDB4NkUyRjI3QTMsMHhCRkJFRkUzQworCWxvbmcJCTB4M0ZGRjAwMDAsMHhDQkVDMTRGRSwweEYyNzI3QzVELDB4QkZCQkI2RjgKKwlsb25nCQkweDNGRkYwMDAwLDB4Q0UyNDhDMTUsMHgxRjg0ODBFNCwweEJGQkNFRTUzCisJbG9uZwkJMHgzRkZGMDAwMCwweEQwNjMzM0RBLDB4RUYyQjI1OTUsMHhCRkJEQTRBRQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhEMkE4MUQ5MSwweEYxMkFFNDVBLDB4M0ZCQzkxMjQKKwlsb25nCQkweDNGRkYwMDAwLDB4RDRGMzVBQUIsMHhDRkVERkExRiwweDNGQkVCMjQzCisJbG9uZwkJMHgzRkZGMDAwMCwweEQ3NDRGQ0NBLDB4RDY5RDZBRjQsMHgzRkJERTY5QQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhEOTlEMTVDMiwweDc4QUZEN0I2LDB4QkZCOEJDNjEKKwlsb25nCQkweDNGRkYwMDAwLDB4REJGQkI3OTcsMHhEQUYyMzc1NSwweDNGQkRGNjEwCisJbG9uZwkJMHgzRkZGMDAwMCwweERFNjBGNDgyLDB4NUUwRTkxMjQsMHhCRkJEOEJFMQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhFMENDREVFQywweDJBOTRFMTExLDB4M0ZCQUNCMTIKKwlsb25nCQkweDNGRkYwMDAwLDB4RTMzRjg5NzIsMHhCRThBNUE1MSwweDNGQkI5QkZFCisJbG9uZwkJMHgzRkZGMDAwMCwweEU1QjkwNkU3LDB4N0M4MzQ4QTgsMHgzRkJDRjJGNAorCWxvbmcJCTB4M0ZGRjAwMDAsMHhFODM5NkE1MCwweDNDNEJEQzY4LDB4M0ZCRUYyMkYKKwlsb25nCQkweDNGRkYwMDAwLDB4RUFDMEM2RTcsMHhERDI0MzkyRiwweEJGQkRCRjRBCisJbG9uZwkJMHgzRkZGMDAwMCwweEVENEYzMDFFLDB4RDk5NDJCODQsMHgzRkJFQzAxQQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhFRkU0Qjk5QiwweERDREFGNUNCLDB4M0ZCRThDQUMKKwlsb25nCQkweDNGRkYwMDAwLDB4RjI4MTc3M0MsMHg1OUZGQjEzQSwweEJGQkNCQjNGCisJbG9uZwkJMHgzRkZGMDAwMCwweEY1MjU3RDE1LDB4MjQ4NkNDMkMsMHgzRkJFRjczQQorCWxvbmcJCTB4M0ZGRjAwMDAsMHhGN0QwREY3MywweDBBRDEzQkI5LDB4QkZCOEI3OTUKKwlsb25nCQkweDNGRkYwMDAwLDB4RkE4M0IyREIsMHg3MjJBMDMzQSwweDNGQkVGODRCCisJbG9uZwkJMHgzRkZGMDAwMCwweEZEM0UwQzBDLDB4RjQ4NkMxNzUsMHhCRkJFRjU4MQorCisJc2V0CQlJTlQsTF9TQ1IxCisKKwlzZXQJCVgsRlBfU0NSMAorCXNldAkJWERDQVJFLFgrMgorCXNldAkJWEZSQUMsWCs0CisKKwlzZXQJCUFESkZBQ1QsRlBfU0NSMAorCisJc2V0CQlGQUNUMSxGUF9TQ1IwCisJc2V0CQlGQUNUMUhJLEZBQ1QxKzQKKwlzZXQJCUZBQ1QxTE9XLEZBQ1QxKzgKKworCXNldAkJRkFDVDIsRlBfU0NSMQorCXNldAkJRkFDVDJISSxGQUNUMis0CisJc2V0CQlGQUNUMkxPVyxGQUNUMis4CisKKwlnbG9iYWwJCXN0d290b3gKKyMtLUVOVFJZIFBPSU5UIEZPUiAyKiooWCksIEhFUkUgWCBJUyBGSU5JVEUsIE5PTi1aRVJPLCBBTkQgTk9UIE5BTidTCitzdHdvdG94OgorCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIExPQUQgSU5QVVQKKworCW1vdi5sCQkoJWEwKSwlZDEKKwltb3YudwkJNCglYTApLCVkMQorCWZtb3YueAkJJWZwMCxYKCVhNikKKwlhbmQubAkJJjB4N0ZGRkZGRkYsJWQxCisKKwljbXAubAkJJWQxLCYweDNGQjk4MDAwCQkjIHxYfCA+PSAyKiooLTcwKT8KKwliZ2UuYgkJVFdPT0sxCisJYnJhLncJCUVYUEJPUlMKKworVFdPT0sxOgorCWNtcC5sCQklZDEsJjB4NDAwRDgwQzAJCSMgfFh8ID4gMTY0ODA/CisJYmxlLmIJCVRXT01BSU4KKwlicmEudwkJRVhQQk9SUworCitUV09NQUlOOgorIy0tVVNVQUwgQ0FTRSwgMl4oLTcwKSA8PSB8WHwgPD0gMTY0ODAKKworCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC5zCQkmMHg0MjgwMDAwMCwlZnAxCSMgNjQgKiBYCisJZm1vdi5sCQklZnAxLElOVCglYTYpCQkjIE4gPSBST1VORC1UTy1JTlQoNjQgWCkKKwltb3YubAkJJWQyLC0oJXNwKQorCWxlYQkJVEVYUFRCTCglcGMpLCVhMQkjIExPQUQgQUREUkVTUyBPRiBUQUJMRSBPRiAyXihKLzY0KQorCWZtb3YubAkJSU5UKCVhNiksJWZwMQkJIyBOIC0tPiBGTE9BVElORyBGTVQKKwltb3YubAkJSU5UKCVhNiksJWQxCisJbW92LmwJCSVkMSwlZDIKKwlhbmQubAkJJjB4M0YsJWQxCQkjIEQwIElTIEoKKwlhc2wubAkJJjQsJWQxCQkJIyBESVNQTEFDRU1FTlQgRk9SIDJeKEovNjQpCisJYWRkLmwJCSVkMSwlYTEJCQkjIEFERFJFU1MgRk9SIDJeKEovNjQpCisJYXNyLmwJCSY2LCVkMgkJCSMgZDIgSVMgTCwgTiA9IDY0TCArIEoKKwltb3YubAkJJWQyLCVkMQorCWFzci5sCQkmMSwlZDEJCQkjIEQwIElTIE0KKwlzdWIubAkJJWQxLCVkMgkJCSMgZDIgSVMgTScsIE4gPSA2NChNK00nKSArIEoKKwlhZGQubAkJJjB4M0ZGRiwlZDIKKworIy0tU1VNTUFSWTogYTEgSVMgQUREUkVTUyBGT1IgVEhFIExFQURJTkcgUE9SVElPTiBPRiAyXihKLzY0KSwKKyMtLUQwIElTIE0gV0hFUkUgTiA9IDY0KE0rTScpICsgSi4gTk9URSBUSEFUIHxNfCA8PSAxNjE0MCBCWSBERVNJR04uCisjLS1BREpGQUNUID0gMl4oTScpLgorIy0tUkVHSVNURVJTIFNBVkVEIFNPIEZBUiBBUkUgKElOIE9SREVSKSBGUENSLCBEMCwgRlAxLCBhMSwgQU5EIEZQMi4KKworCWZtb3ZtLngJCSYweDBjLC0oJXNwKQkJIyBzYXZlIGZwMi9mcDMKKworCWZtdWwucwkJJjB4M0M4MDAwMDAsJWZwMQkjICgxLzY0KSpOCisJbW92LmwJCSglYTEpKyxGQUNUMSglYTYpCisJbW92LmwJCSglYTEpKyxGQUNUMUhJKCVhNikKKwltb3YubAkJKCVhMSkrLEZBQ1QxTE9XKCVhNikKKwltb3YudwkJKCVhMSkrLEZBQ1QyKCVhNikKKworCWZzdWIueAkJJWZwMSwlZnAwCQkjIFggLSAoMS82NCkqSU5UKDY0IFgpCisKKwltb3YudwkJKCVhMSkrLEZBQ1QySEkoJWE2KQorCWNsci53CQlGQUNUMkhJKzIoJWE2KQorCWNsci5sCQlGQUNUMkxPVyglYTYpCisJYWRkLncJCSVkMSxGQUNUMSglYTYpCisJZm11bC54CQlMT0cyKCVwYyksJWZwMAkJIyBGUDAgSVMgUgorCWFkZC53CQklZDEsRkFDVDIoJWE2KQorCisJYnJhLncJCWV4cHIKKworRVhQQk9SUzoKKyMtLUZQQ1IsIEQwIFNBVkVECisJY21wLmwJCSVkMSwmMHgzRkZGODAwMAorCWJndC5iCQlURVhQQklHCisKKyMtLXxYfCBJUyBTTUFMTCwgUkVUVVJOIDEgKyBYCisKKwlmbW92LmwJCSVkMCwlZnBjcgkJIyByZXN0b3JlIHVzZXJzIHJvdW5kIHByZWMsbW9kZQorCWZhZGQucwkJJjB4M0Y4MDAwMDAsJWZwMAkjIFJFVFVSTiAxICsgWAorCWJyYQkJdF9waW54MgorCitURVhQQklHOgorIy0tfFh8IElTIExBUkdFLCBHRU5FUkFURSBPVkVSRkxPVyBJRiBYID4gMDsgRUxTRSBHRU5FUkFURSBVTkRFUkZMT1cKKyMtLVJFR0lTVEVSUyBTQVZFIFNPIEZBUiBBUkUgRlBDUiBBTkQgIEQwCisJbW92LmwJCVgoJWE2KSwlZDEKKwljbXAubAkJJWQxLCYwCisJYmx0LmIJCUVYUE5FRworCisJYnJhCQl0X292ZmwyCQkJIyB0X292ZmwgZXhwZWN0cyBwb3NpdGl2ZSB2YWx1ZQorCitFWFBORUc6CisJYnJhCQl0X3VuZmwyCQkJIyB0X3VuZmwgZXhwZWN0cyBwb3NpdGl2ZSB2YWx1ZQorCisJZ2xvYmFsCQlzdHdvdG94ZAorc3R3b3RveGQ6CisjLS1FTlRSWSBQT0lOVCBGT1IgMioqKFgpIEZPUiBERU5PUk1BTElaRUQgQVJHVU1FTlQKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHNldCB1c2VyJ3Mgcm91bmRpbmcgbW9kZS9wcmVjaXNpb24KKwlmbW92LnMJCSYweDNGODAwMDAwLCVmcDAJIyBSRVRVUk4gMSArIFgKKwltb3YubAkJKCVhMCksJWQxCisJb3IubAkJJjB4MDA4MDAwMDEsJWQxCisJZmFkZC5zCQklZDEsJWZwMAorCWJyYQkJdF9waW54MgorCisJZ2xvYmFsCQlzdGVudG94CisjLS1FTlRSWSBQT0lOVCBGT1IgMTAqKihYKSwgSEVSRSBYIElTIEZJTklURSwgTk9OLVpFUk8sIEFORCBOT1QgTkFOJ1MKK3N0ZW50b3g6CisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgTE9BRCBJTlBVVAorCisJbW92LmwJCSglYTApLCVkMQorCW1vdi53CQk0KCVhMCksJWQxCisJZm1vdi54CQklZnAwLFgoJWE2KQorCWFuZC5sCQkmMHg3RkZGRkZGRiwlZDEKKworCWNtcC5sCQklZDEsJjB4M0ZCOTgwMDAJCSMgfFh8ID49IDIqKigtNzApPworCWJnZS5iCQlURU5PSzEKKwlicmEudwkJRVhQQk9SUworCitURU5PSzE6CisJY21wLmwJCSVkMSwmMHg0MDBCOUIwNwkJIyB8WHwgPD0gMTY0ODAqbG9nMi9sb2cxMCA/CisJYmxlLmIJCVRFTk1BSU4KKwlicmEudwkJRVhQQk9SUworCitURU5NQUlOOgorIy0tVVNVQUwgQ0FTRSwgMl4oLTcwKSA8PSB8WHwgPD0gMTY0ODAgTE9HIDIgLyBMT0cgMTAKKworCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC5kCQlMMlRFTjY0KCVwYyksJWZwMQkjIFgqNjQqTE9HMTAvTE9HMgorCWZtb3YubAkJJWZwMSxJTlQoJWE2KQkJIyBOPUlOVChYKjY0KkxPRzEwL0xPRzIpCisJbW92LmwJCSVkMiwtKCVzcCkKKwlsZWEJCVRFWFBUQkwoJXBjKSwlYTEJIyBMT0FEIEFERFJFU1MgT0YgVEFCTEUgT0YgMl4oSi82NCkKKwlmbW92LmwJCUlOVCglYTYpLCVmcDEJCSMgTiAtLT4gRkxPQVRJTkcgRk1UCisJbW92LmwJCUlOVCglYTYpLCVkMQorCW1vdi5sCQklZDEsJWQyCisJYW5kLmwJCSYweDNGLCVkMQkJIyBEMCBJUyBKCisJYXNsLmwJCSY0LCVkMQkJCSMgRElTUExBQ0VNRU5UIEZPUiAyXihKLzY0KQorCWFkZC5sCQklZDEsJWExCQkJIyBBRERSRVNTIEZPUiAyXihKLzY0KQorCWFzci5sCQkmNiwlZDIJCQkjIGQyIElTIEwsIE4gPSA2NEwgKyBKCisJbW92LmwJCSVkMiwlZDEKKwlhc3IubAkJJjEsJWQxCQkJIyBEMCBJUyBNCisJc3ViLmwJCSVkMSwlZDIJCQkjIGQyIElTIE0nLCBOID0gNjQoTStNJykgKyBKCisJYWRkLmwJCSYweDNGRkYsJWQyCisKKyMtLVNVTU1BUlk6IGExIElTIEFERFJFU1MgRk9SIFRIRSBMRUFESU5HIFBPUlRJT04gT0YgMl4oSi82NCksCisjLS1EMCBJUyBNIFdIRVJFIE4gPSA2NChNK00nKSArIEouIE5PVEUgVEhBVCB8TXwgPD0gMTYxNDAgQlkgREVTSUdOLgorIy0tQURKRkFDVCA9IDJeKE0nKS4KKyMtLVJFR0lTVEVSUyBTQVZFRCBTTyBGQVIgQVJFIChJTiBPUkRFUikgRlBDUiwgRDAsIEZQMSwgYTEsIEFORCBGUDIuCisJZm1vdm0ueAkJJjB4MGMsLSglc3ApCQkjIHNhdmUgZnAyL2ZwMworCisJZm1vdi54CQklZnAxLCVmcDIKKworCWZtdWwuZAkJTDEwVFdPMSglcGMpLCVmcDEJIyBOKihMT0cyLzY0TE9HMTApX0xFQUQKKwltb3YubAkJKCVhMSkrLEZBQ1QxKCVhNikKKworCWZtdWwueAkJTDEwVFdPMiglcGMpLCVmcDIJIyBOKihMT0cyLzY0TE9HMTApX1RSQUlMCisKKwltb3YubAkJKCVhMSkrLEZBQ1QxSEkoJWE2KQorCW1vdi5sCQkoJWExKSssRkFDVDFMT1coJWE2KQorCWZzdWIueAkJJWZwMSwlZnAwCQkjIFggLSBOIExfTEVBRAorCW1vdi53CQkoJWExKSssRkFDVDIoJWE2KQorCisJZnN1Yi54CQklZnAyLCVmcDAJCSMgWCAtIE4gTF9UUkFJTAorCisJbW92LncJCSglYTEpKyxGQUNUMkhJKCVhNikKKwljbHIudwkJRkFDVDJISSsyKCVhNikKKwljbHIubAkJRkFDVDJMT1coJWE2KQorCisJZm11bC54CQlMT0cxMCglcGMpLCVmcDAJCSMgRlAwIElTIFIKKwlhZGQudwkJJWQxLEZBQ1QxKCVhNikKKwlhZGQudwkJJWQxLEZBQ1QyKCVhNikKKworZXhwcjoKKyMtLUZQQ1IsIEZQMiwgRlAzIEFSRSBTQVZFRCBJTiBPUkRFUiBBUyBTSE9XTi4KKyMtLUFESkZBQ1QgQ09OVEFJTlMgMioqKE0nKSwgRkFDVDEgKyBGQUNUMiA9IDIqKihNKSAqIDIqKihKLzY0KS4KKyMtLUZQMCBJUyBSLiBUSEUgRk9MTE9XSU5HIENPREUgQ09NUFVURVMKKyMtLQkyKiooTScrTSkgKiAyKiooSi82NCkgKiBFWFAoUikKKworCWZtb3YueAkJJWZwMCwlZnAxCisJZm11bC54CQklZnAxLCVmcDEJCSMgRlAxIElTIFMgPSBSKlIKKworCWZtb3YuZAkJRVhQQTUoJXBjKSwlZnAyCQkjIEZQMiBJUyBBNQorCWZtb3YuZAkJRVhQQTQoJXBjKSwlZnAzCQkjIEZQMyBJUyBBNAorCisJZm11bC54CQklZnAxLCVmcDIJCSMgRlAyIElTIFMqQTUKKwlmbXVsLngJCSVmcDEsJWZwMwkJIyBGUDMgSVMgUypBNAorCisJZmFkZC5kCQlFWFBBMyglcGMpLCVmcDIJCSMgRlAyIElTIEEzK1MqQTUKKwlmYWRkLmQJCUVYUEEyKCVwYyksJWZwMwkJIyBGUDMgSVMgQTIrUypBNAorCisJZm11bC54CQklZnAxLCVmcDIJCSMgRlAyIElTIFMqKEEzK1MqQTUpCisJZm11bC54CQklZnAxLCVmcDMJCSMgRlAzIElTIFMqKEEyK1MqQTQpCisKKwlmYWRkLmQJCUVYUEExKCVwYyksJWZwMgkJIyBGUDIgSVMgQTErUyooQTMrUypBNSkKKwlmbXVsLngJCSVmcDAsJWZwMwkJIyBGUDMgSVMgUipTKihBMitTKkE0KQorCisJZm11bC54CQklZnAxLCVmcDIJCSMgRlAyIElTIFMqKEExK1MqKEEzK1MqQTUpKQorCWZhZGQueAkJJWZwMywlZnAwCQkjIEZQMCBJUyBSK1IqUyooQTIrUypBNCkKKwlmYWRkLngJCSVmcDIsJWZwMAkJIyBGUDAgSVMgRVhQKFIpIC0gMQorCisJZm1vdm0ueAkJKCVzcCkrLCYweDMwCQkjIHJlc3RvcmUgZnAyL2ZwMworCisjLS1GSU5BTCBSRUNPTlNUUlVDVElPTiBQUk9DRVNTCisjLS1FWFAoWCkgPSAyXk0qMl4oSi82NCkgKyAyXk0qMl4oSi82NCkqKEVYUChSKS0xKSAgLSAgKDEgT1IgMCkKKworCWZtdWwueAkJRkFDVDEoJWE2KSwlZnAwCisJZmFkZC54CQlGQUNUMiglYTYpLCVmcDAKKwlmYWRkLngJCUZBQ1QxKCVhNiksJWZwMAorCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgcmVzdG9yZSB1c2VycyByb3VuZCBwcmVjLG1vZGUKKwltb3YudwkJJWQyLEFESkZBQ1QoJWE2KQkjIElOU0VSVCBFWFBPTkVOVAorCW1vdi5sCQkoJXNwKSssJWQyCisJbW92LmwJCSYweDgwMDAwMDAwLEFESkZBQ1QrNCglYTYpCisJY2xyLmwJCUFESkZBQ1QrOCglYTYpCisJbW92LmIJCSZGTVVMX09QLCVkMQkJIyBsYXN0IGluc3QgaXMgTVVMCisJZm11bC54CQlBREpGQUNUKCVhNiksJWZwMAkjIEZJTkFMIEFESlVTVE1FTlQKKwlicmEJCXRfY2F0Y2gKKworCWdsb2JhbAkJc3RlbnRveGQKK3N0ZW50b3hkOgorIy0tRU5UUlkgUE9JTlQgRk9SIDEwKiooWCkgRk9SIERFTk9STUFMSVpFRCBBUkdVTUVOVAorCisJZm1vdi5sCQklZDAsJWZwY3IJCSMgc2V0IHVzZXIncyByb3VuZGluZyBtb2RlL3ByZWNpc2lvbgorCWZtb3YucwkJJjB4M0Y4MDAwMDAsJWZwMAkjIFJFVFVSTiAxICsgWAorCW1vdi5sCQkoJWEwKSwlZDEKKwlvci5sCQkmMHgwMDgwMDAwMSwlZDEKKwlmYWRkLnMJCSVkMSwlZnAwCisJYnJhCQl0X3BpbngyCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc21vdmNyKCk6IHJldHVybnMgdGhlIFJPTSBjb25zdGFudCBhdCB0aGUgb2Zmc2V0IHNwZWNpZmllZCBpbiBkMQkjCisjCSAgICByb3VuZGVkIHRvIHRoZSBtb2RlIGFuZCBwcmVjaXNpb24gc3BlY2lmaWVkIGluIGQwLgkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZDAgPSBybmQgcHJlYyxtb2RlCQkJCQkJIworIwlkMSA9IFJPTSBvZmZzZXQJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gdGhlIFJPTSBjb25zdGFudCByb3VuZGVkIHRvIHRoZSB1c2VyJ3Mgcm91bmRpbmcgbW9kZSxwcmVjCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXNtb3Zjcgorc21vdmNyOgorCW1vdi5sCQklZDEsLSglc3ApCQkjIHNhdmUgcm9tIG9mZnNldCBmb3IgYSBzZWMKKworCWxzci5iCQkmMHg0LCVkMAkJIyBzaGlmdCBjdHJsIGJpdHMgdG8gbG8KKwltb3YubAkJJWQwLCVkMQkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLncJCSYweDMsJWQxCQkjIGV4dHJhY3Qgcm5kIG1vZGUKKwlhbmRpLncJCSYweGMsJWQwCQkjIGV4dHJhY3Qgcm5kIHByZWMKKwlzd2FwCQklZDAJCQkjIHB1dCBybmQgcHJlYyBpbiBoaQorCW1vdi53CQklZDEsJWQwCQkJIyBwdXQgcm5kIG1vZGUgaW4gbG8KKworCW1vdi5sCQkoJXNwKSssJWQxCQkjIGdldCByb20gb2Zmc2V0CisKKyMKKyMgY2hlY2sgcmFuZ2Ugb2Ygb2Zmc2V0CisjCisJdHN0LmIJCSVkMQkJCSMgaWYgemVybywgb2Zmc2V0IGlzIHRvIHBpCisJYmVxLmIJCXBpX3RibAkJCSMgaXQgaXMgcGkKKwljbXBpLmIJCSVkMSwmMHgwYQkJIyBjaGVjayByYW5nZSAkMDEgLSAkMGEKKwlibGUuYgkJel92YWwJCQkjIGlmIGluIHRoaXMgcmFuZ2UsIHJldHVybiB6ZXJvCisJY21waS5iCQklZDEsJjB4MGUJCSMgY2hlY2sgcmFuZ2UgJDBiIC0gJDBlCisJYmxlLmIJCXNtX3RibAkJCSMgdmFsaWQgY29uc3RhbnRzIGluIHRoaXMgcmFuZ2UKKwljbXBpLmIJCSVkMSwmMHgyZgkJIyBjaGVjayByYW5nZSAkMTAgLSAkMmYKKwlibGUuYgkJel92YWwJCQkjIGlmIGluIHRoaXMgcmFuZ2UsIHJldHVybiB6ZXJvCisJY21waS5iCQklZDEsJjB4M2YJCSMgY2hlY2sgcmFuZ2UgJDMwIC0gJDNmCisJYmxlLmIJCWJnX3RibAkJCSMgdmFsaWQgY29uc3RhbnRzIGluIHRoaXMgcmFuZ2UKKworel92YWw6CisJYnJhLmwJCWxkX3B6ZXJvCQkjIHJldHVybiBhIHplcm8KKworIworIyB0aGUgYW5zd2VyIGlzIFBJIHJvdW5kZWQgdG8gdGhlIHByb3BlciBwcmVjaXNpb24uCisjCisjIGZldGNoIGEgcG9pbnRlciB0byB0aGUgYW5zd2VyIHRhYmxlIHJlbGF0aW5nIHRvIHRoZSBwcm9wZXIgcm91bmRpbmcKKyMgcHJlY2lzaW9uLgorIworcGlfdGJsOgorCXRzdC5iCQklZDAJCQkjIGlzIHJtb2RlIFJOPworCWJuZS5iCQlwaV9ub3Rfcm4JCSMgbm8KK3BpX3JuOgorCWxlYS5sCQlQSVJOKCVwYyksJWEwCQkjIHllczsgbG9hZCBQSSBSTiB0YWJsZSBhZGRyCisJYnJhLncJCXNldF9maW54CitwaV9ub3Rfcm46CisJY21waS5iCQklZDAsJnJwX21vZGUJCSMgaXMgcm1vZGUgUlA/CisJYmVxLmIJCXBpX3JwCQkJIyB5ZXMKK3BpX3J6cm06CisJbGVhLmwJCVBJUlpSTSglcGMpLCVhMAkJIyBubzsgbG9hZCBQSSBSWixSTSB0YWJsZSBhZGRyCisJYnJhLmIJCXNldF9maW54CitwaV9ycDoKKwlsZWEubAkJUElSUCglcGMpLCVhMAkJIyBsb2FkIFBJIFJQIHRhYmxlIGFkZHIKKwlicmEuYgkJc2V0X2ZpbngKKworIworIyB0aGUgYW5zd2VyIGlzIG9uZSBvZjoKKyMJJDBCCWxvZzEwKDIpCShpbmV4YWN0KQorIwkkMEMJZQkJKGluZXhhY3QpCisjCSQwRAlsb2cyKGUpCQkoaW5leGFjdCkKKyMJJDBFCWxvZzEwKGUpCShleGFjdCkKKyMKKyMgZmV0Y2ggYSBwb2ludGVyIHRvIHRoZSBhbnN3ZXIgdGFibGUgcmVsYXRpbmcgdG8gdGhlIHByb3BlciByb3VuZGluZworIyBwcmVjaXNpb24uCisjCitzbV90Ymw6CisJc3ViaS5iCQkmMHhiLCVkMQkJIyBtYWtlIG9mZnNldCBpbiAwLTQgcmFuZ2UKKwl0c3QuYgkJJWQwCQkJIyBpcyBybW9kZSBSTj8KKwlibmUuYgkJc21fbm90X3JuCQkjIG5vCitzbV9ybjoKKwlsZWEubAkJU01BTFJOKCVwYyksJWEwCQkjIHllczsgbG9hZCBSTiB0YWJsZSBhZGRyCitzbV90YmxfY29udDoKKwljbXBpLmIJCSVkMSwmMHgyCQkjIGlzIHJlc3VsdCBsb2cxMChlKT8KKwlibGUuYgkJc2V0X2ZpbngJCSMgbm87IGFuc3dlciBpcyBpbmV4YWN0CisJYnJhLmIJCW5vX2ZpbngJCQkjIHllczsgYW5zd2VyIGlzIGV4YWN0CitzbV9ub3Rfcm46CisJY21waS5iCQklZDAsJnJwX21vZGUJCSMgaXMgcm1vZGUgUlA/CisJYmVxLmIJCXNtX3JwCQkJIyB5ZXMKK3NtX3J6cm06CisJbGVhLmwJCVNNQUxSWlJNKCVwYyksJWEwCSMgbm87IGxvYWQgUlosUk0gdGFibGUgYWRkcgorCWJyYS5iCQlzbV90YmxfY29udAorc21fcnA6CisJbGVhLmwJCVNNQUxSUCglcGMpLCVhMAkJIyBsb2FkIFJQIHRhYmxlIGFkZHIKKwlicmEuYgkJc21fdGJsX2NvbnQKKworIworIyB0aGUgYW5zd2VyIGlzIG9uZSBvZjoKKyMJJDMwCWxuKDIpCQkoaW5leGFjdCkKKyMJJDMxCWxuKDEwKQkJKGluZXhhY3QpCisjCSQzMgkxMF4wCQkoZXhhY3QpCisjCSQzMwkxMF4xCQkoZXhhY3QpCisjCSQzNAkxMF4yCQkoZXhhY3QpCisjCSQzNQkxMF40CQkoZXhhY3QpCisjCSQzNgkxMF44CQkoZXhhY3QpCisjCSQzNwkxMF4xNgkJKGV4YWN0KQorIwkkMzgJMTBeMzIJCShpbmV4YWN0KQorIwkkMzkJMTBeNjQJCShpbmV4YWN0KQorIwkkM0EJMTBeMTI4CQkoaW5leGFjdCkKKyMJJDNCCTEwXjI1NgkJKGluZXhhY3QpCisjCSQzQwkxMF41MTIJCShpbmV4YWN0KQorIwkkM0QJMTBeMTAyNAkJKGluZXhhY3QpCisjCSQzRQkxMF4yMDQ4CQkoaW5leGFjdCkKKyMJJDNGCTEwXjQwOTYJCShpbmV4YWN0KQorIworIyBmZXRjaCBhIHBvaW50ZXIgdG8gdGhlIGFuc3dlciB0YWJsZSByZWxhdGluZyB0byB0aGUgcHJvcGVyIHJvdW5kaW5nCisjIHByZWNpc2lvbi4KKyMKK2JnX3RibDoKKwlzdWJpLmIJCSYweDMwLCVkMQkJIyBtYWtlIG9mZnNldCBpbiAwLWYgcmFuZ2UKKwl0c3QuYgkJJWQwCQkJIyBpcyBybW9kZSBSTj8KKwlibmUuYgkJYmdfbm90X3JuCQkjIG5vCitiZ19ybjoKKwlsZWEubAkJQklHUk4oJXBjKSwlYTAJCSMgeWVzOyBsb2FkIFJOIHRhYmxlIGFkZHIKK2JnX3RibF9jb250OgorCWNtcGkuYgkJJWQxLCYweDEJCSMgaXMgb2Zmc2V0IDw9ICQzMT8KKwlibGUuYgkJc2V0X2ZpbngJCSMgeWVzOyBhbnN3ZXIgaXMgaW5leGFjdAorCWNtcGkuYgkJJWQxLCYweDcJCSMgaXMgJDMyIDw9IG9mZnNldCA8PSAkMzc/CisJYmxlLmIJCW5vX2ZpbngJCQkjIHllczsgYW5zd2VyIGlzIGV4YWN0CisJYnJhLmIJCXNldF9maW54CQkjIG5vOyBhbnN3ZXIgaXMgaW5leGFjdAorYmdfbm90X3JuOgorCWNtcGkuYgkJJWQwLCZycF9tb2RlCQkjIGlzIHJtb2RlIFJQPworCWJlcS5iCQliZ19ycAkJCSMgeWVzCitiZ19yenJtOgorCWxlYS5sCQlCSUdSWlJNKCVwYyksJWEwCSMgbm87IGxvYWQgUlosUk0gdGFibGUgYWRkcgorCWJyYS5iCQliZ190YmxfY29udAorYmdfcnA6CisJbGVhLmwJCUJJR1JQKCVwYyksJWEwCQkjIGxvYWQgUlAgdGFibGUgYWRkcgorCWJyYS5iCQliZ190YmxfY29udAorCisjIGFuc3dlciBpcyBpbmV4YWN0LCBzbyBzZXQgSU5FWDIgYW5kIEFJTkVYIGluIHRoZSB1c2VyJ3MgRlBTUi4KK3NldF9maW54OgorCW9yaS5sCQkmaW54MmFfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBJTkVYMi9BSU5FWAorbm9fZmlueDoKKwltdWx1LncJCSYweGMsJWQxCQkjIG9mZnNldCBwb2ludHMgaW50byB0YWJsZXMKKwlzd2FwCQklZDAJCQkjIHB1dCBybmQgcHJlYyBpbiBsbyB3b3JkCisJdHN0LmIJCSVkMAkJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPworCisJYm5lLmIJCW5vdF9leHQJCQkjIGlmIHhwcmVjLCBkbyBub3QgY2FsbCByb3VuZAorCisjIFByZWNpc2lvbiBpcyBleHRlbmRlZAorCWZtb3ZtLngJCSglYTAsJWQxLncpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlydHMKKworIyBQcmVjaXNpb24gaXMgc2luZ2xlIG9yIGRvdWJsZQorbm90X2V4dDoKKwlzd2FwCQklZDAJCQkjIHJuZCBwcmVjIGluIHVwcGVyIHdvcmQKKworIyBjYWxsIHJvdW5kKCkgdG8gcm91bmQgdGhlIGFuc3dlciB0byB0aGUgcHJvcGVyIHByZWNpc2lvbi4KKyMgZXhwb25lbnRzIG91dCBvZiByYW5nZSBmb3Igc2luZ2xlIG9yIGRvdWJsZSBETyBOT1QgY2F1c2UgdW5kZXJmbG93CisjIG9yIG92ZXJmbG93LgorCW1vdi53CQkweDAoJWEwLCVkMS53KSxGUF9TQ1IxX0VYKCVhNikgIyBsb2FkIGZpcnN0IHdvcmQKKwltb3YubAkJMHg0KCVhMCwlZDEudyksRlBfU0NSMV9ISSglYTYpICMgbG9hZCBzZWNvbmQgd29yZAorCW1vdi5sCQkweDgoJWEwLCVkMS53KSxGUF9TQ1IxX0xPKCVhNikgIyBsb2FkIHRoaXJkIHdvcmQKKwltb3YubAkJJWQwLCVkMQorCWNsci5sCQklZDAJCQkjIGNsZWFyIGcscixzCisJbGVhCQlGUF9TQ1IxKCVhNiksJWEwCSMgcGFzcyBwdHIgdG8gYW5zd2VyCisJY2xyLncJCUxPQ0FMX1NHTiglYTApCQkjIHNpZ24gYWx3YXlzIHBvc2l0aXZlCisJYnNyLmwJCV9yb3VuZAkJCSMgcm91bmQgdGhlIG1hbnRpc3NhCisKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gcm91bmRlZCByZXN1bHQgaW4gZnAwCisJcnRzCisKKwlhbGlnbgkJMHg0CisKK1BJUk46CWxvbmcJCTB4NDAwMDAwMDAsMHhjOTBmZGFhMiwweDIxNjhjMjM1CSMgcGkKK1BJUlpSTToJbG9uZwkJMHg0MDAwMDAwMCwweGM5MGZkYWEyLDB4MjE2OGMyMzQJIyBwaQorUElSUDoJbG9uZwkJMHg0MDAwMDAwMCwweGM5MGZkYWEyLDB4MjE2OGMyMzUJIyBwaQorCitTTUFMUk46CWxvbmcJCTB4M2ZmZDAwMDAsMHg5YTIwOWE4NCwweGZiY2ZmNzk4CSMgbG9nMTAoMikKKwlsb25nCQkweDQwMDAwMDAwLDB4YWRmODU0NTgsMHhhMmJiNGE5YQkjIGUKKwlsb25nCQkweDNmZmYwMDAwLDB4YjhhYTNiMjksMHg1YzE3ZjBiYwkjIGxvZzIoZSkKKwlsb25nCQkweDNmZmQwMDAwLDB4ZGU1YmQ4YTksMHgzNzI4NzE5NQkjIGxvZzEwKGUpCisJbG9uZwkJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAJIyAwLjAKKworU01BTFJaUk06CisJbG9uZwkJMHgzZmZkMDAwMCwweDlhMjA5YTg0LDB4ZmJjZmY3OTgJIyBsb2cxMCgyKQorCWxvbmcJCTB4NDAwMDAwMDAsMHhhZGY4NTQ1OCwweGEyYmI0YTlhCSMgZQorCWxvbmcJCTB4M2ZmZjAwMDAsMHhiOGFhM2IyOSwweDVjMTdmMGJiCSMgbG9nMihlKQorCWxvbmcJCTB4M2ZmZDAwMDAsMHhkZTViZDhhOSwweDM3Mjg3MTk1CSMgbG9nMTAoZSkKKwlsb25nCQkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAkjIDAuMAorCitTTUFMUlA6CWxvbmcJCTB4M2ZmZDAwMDAsMHg5YTIwOWE4NCwweGZiY2ZmNzk5CSMgbG9nMTAoMikKKwlsb25nCQkweDQwMDAwMDAwLDB4YWRmODU0NTgsMHhhMmJiNGE5YgkjIGUKKwlsb25nCQkweDNmZmYwMDAwLDB4YjhhYTNiMjksMHg1YzE3ZjBiYwkjIGxvZzIoZSkKKwlsb25nCQkweDNmZmQwMDAwLDB4ZGU1YmQ4YTksMHgzNzI4NzE5NQkjIGxvZzEwKGUpCisJbG9uZwkJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAJIyAwLjAKKworQklHUk46CWxvbmcJCTB4M2ZmZTAwMDAsMHhiMTcyMTdmNywweGQxY2Y3OWFjCSMgbG4oMikKKwlsb25nCQkweDQwMDAwMDAwLDB4OTM1ZDhkZGQsMHhhYWE4YWMxNwkjIGxuKDEwKQorCisJbG9uZwkJMHgzZmZmMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDAKKwlsb25nCQkweDQwMDIwMDAwLDB4QTAwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMQorCWxvbmcJCTB4NDAwNTAwMDAsMHhDODAwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiAyCisJbG9uZwkJMHg0MDBDMDAwMCwweDlDNDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDQKKwlsb25nCQkweDQwMTkwMDAwLDB4QkVCQzIwMDAsMHgwMDAwMDAwMAkjIDEwIF4gOAorCWxvbmcJCTB4NDAzNDAwMDAsMHg4RTFCQzlCRiwweDA0MDAwMDAwCSMgMTAgXiAxNgorCWxvbmcJCTB4NDA2OTAwMDAsMHg5REM1QURBOCwweDJCNzBCNTlFCSMgMTAgXiAzMgorCWxvbmcJCTB4NDBEMzAwMDAsMHhDMjc4MUY0OSwweEZGQ0ZBNkQ1CSMgMTAgXiA2NAorCWxvbmcJCTB4NDFBODAwMDAsMHg5M0JBNDdDOSwweDgwRTk4Q0UwCSMgMTAgXiAxMjgKKwlsb25nCQkweDQzNTEwMDAwLDB4QUE3RUVCRkIsMHg5REY5REU4RQkjIDEwIF4gMjU2CisJbG9uZwkJMHg0NkEzMDAwMCwweEUzMTlBMEFFLDB4QTYwRTkxQzcJIyAxMCBeIDUxMgorCWxvbmcJCTB4NEQ0ODAwMDAsMHhDOTc2NzU4NiwweDgxNzUwQzE3CSMgMTAgXiAxMDI0CisJbG9uZwkJMHg1QTkyMDAwMCwweDlFOEIzQjVELDB4QzUzRDVERTUJIyAxMCBeIDIwNDgKKwlsb25nCQkweDc1MjUwMDAwLDB4QzQ2MDUyMDIsMHg4QTIwOTc5QgkjIDEwIF4gNDA5NgorCitCSUdSWlJNOgorCWxvbmcJCTB4M2ZmZTAwMDAsMHhiMTcyMTdmNywweGQxY2Y3OWFiCSMgbG4oMikKKwlsb25nCQkweDQwMDAwMDAwLDB4OTM1ZDhkZGQsMHhhYWE4YWMxNgkjIGxuKDEwKQorCisJbG9uZwkJMHgzZmZmMDAwMCwweDgwMDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDAKKwlsb25nCQkweDQwMDIwMDAwLDB4QTAwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMQorCWxvbmcJCTB4NDAwNTAwMDAsMHhDODAwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiAyCisJbG9uZwkJMHg0MDBDMDAwMCwweDlDNDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDQKKwlsb25nCQkweDQwMTkwMDAwLDB4QkVCQzIwMDAsMHgwMDAwMDAwMAkjIDEwIF4gOAorCWxvbmcJCTB4NDAzNDAwMDAsMHg4RTFCQzlCRiwweDA0MDAwMDAwCSMgMTAgXiAxNgorCWxvbmcJCTB4NDA2OTAwMDAsMHg5REM1QURBOCwweDJCNzBCNTlECSMgMTAgXiAzMgorCWxvbmcJCTB4NDBEMzAwMDAsMHhDMjc4MUY0OSwweEZGQ0ZBNkQ1CSMgMTAgXiA2NAorCWxvbmcJCTB4NDFBODAwMDAsMHg5M0JBNDdDOSwweDgwRTk4Q0RGCSMgMTAgXiAxMjgKKwlsb25nCQkweDQzNTEwMDAwLDB4QUE3RUVCRkIsMHg5REY5REU4RAkjIDEwIF4gMjU2CisJbG9uZwkJMHg0NkEzMDAwMCwweEUzMTlBMEFFLDB4QTYwRTkxQzYJIyAxMCBeIDUxMgorCWxvbmcJCTB4NEQ0ODAwMDAsMHhDOTc2NzU4NiwweDgxNzUwQzE3CSMgMTAgXiAxMDI0CisJbG9uZwkJMHg1QTkyMDAwMCwweDlFOEIzQjVELDB4QzUzRDVERTQJIyAxMCBeIDIwNDgKKwlsb25nCQkweDc1MjUwMDAwLDB4QzQ2MDUyMDIsMHg4QTIwOTc5QQkjIDEwIF4gNDA5NgorCitCSUdSUDoKKwlsb25nCQkweDNmZmUwMDAwLDB4YjE3MjE3ZjcsMHhkMWNmNzlhYwkjIGxuKDIpCisJbG9uZwkJMHg0MDAwMDAwMCwweDkzNWQ4ZGRkLDB4YWFhOGFjMTcJIyBsbigxMCkKKworCWxvbmcJCTB4M2ZmZjAwMDAsMHg4MDAwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiAwCisJbG9uZwkJMHg0MDAyMDAwMCwweEEwMDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDEKKwlsb25nCQkweDQwMDUwMDAwLDB4QzgwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMgorCWxvbmcJCTB4NDAwQzAwMDAsMHg5QzQwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiA0CisJbG9uZwkJMHg0MDE5MDAwMCwweEJFQkMyMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDgKKwlsb25nCQkweDQwMzQwMDAwLDB4OEUxQkM5QkYsMHgwNDAwMDAwMAkjIDEwIF4gMTYKKwlsb25nCQkweDQwNjkwMDAwLDB4OURDNUFEQTgsMHgyQjcwQjU5RQkjIDEwIF4gMzIKKwlsb25nCQkweDQwRDMwMDAwLDB4QzI3ODFGNDksMHhGRkNGQTZENgkjIDEwIF4gNjQKKwlsb25nCQkweDQxQTgwMDAwLDB4OTNCQTQ3QzksMHg4MEU5OENFMAkjIDEwIF4gMTI4CisJbG9uZwkJMHg0MzUxMDAwMCwweEFBN0VFQkZCLDB4OURGOURFOEUJIyAxMCBeIDI1NgorCWxvbmcJCTB4NDZBMzAwMDAsMHhFMzE5QTBBRSwweEE2MEU5MUM3CSMgMTAgXiA1MTIKKwlsb25nCQkweDRENDgwMDAwLDB4Qzk3Njc1ODYsMHg4MTc1MEMxOAkjIDEwIF4gMTAyNAorCWxvbmcJCTB4NUE5MjAwMDAsMHg5RThCM0I1RCwweEM1M0Q1REU1CSMgMTAgXiAyMDQ4CisJbG9uZwkJMHg3NTI1MDAwMCwweEM0NjA1MjAyLDB4OEEyMDk3OUIJIyAxMCBeIDQwOTYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzc2NhbGUoKTogY29tcHV0ZXMgdGhlIGRlc3RpbmF0aW9uIG9wZXJhbmQgc2NhbGVkIGJ5IHRoZSBzb3VyY2UJIworIwkgICAgb3BlcmFuZC4gSWYgdGhlIGFic291bHV0ZSB2YWx1ZSBvZiB0aGUgc291cmNlIG9wZXJhbmQgaXMJIworIwkgICAgPj0gMl4xNCwgYW4gb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGlzIHJldHVybmVkLgkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJYTAgID0gcG9pbnRlciB0byBkb3VibGUtZXh0ZW5kZWQgc291cmNlIG9wZXJhbmQgWAkJIworIwlhMSAgPSBwb2ludGVyIHRvIGRvdWJsZS1leHRlbmRlZCBkZXN0aW5hdGlvbiBvcGVyYW5kIFkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWZwMCA9ICBzY2FsZShYLFkpCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc2V0CVNJR04sCQlMX1NDUjEKKworCWdsb2JhbAkJc3NjYWxlCitzc2NhbGU6CisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc3RvcmUgb2ZmIGN0cmwgYml0cyBmb3Igbm93CisKKwltb3YudwkJRFNUX0VYKCVhMSksJWQxCQkjIGdldCBkc3QgZXhwb25lbnQKKwlzbWkuYgkJU0lHTiglYTYpCQkjIHVzZSBTSUdOIHRvIGhvbGQgZHN0IHNpZ24KKwlhbmRpLmwJCSYweDAwMDA3ZmZmLCVkMQkJIyBzdHJpcCBzaWduIGZyb20gZHN0IGV4cAorCisJbW92LncJCVNSQ19FWCglYTApLCVkMAkJIyBjaGVjayBzcmMgYm91bmRzCisJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBjbHIgc3JjIHNpZ24gYml0CisJY21waS53CQklZDAsJjB4M2ZmZgkJIyBpcyBzcmMgfiBaRVJPPworCWJsdC53CQlzcmNfc21hbGwJCSMgeWVzCisJY21waS53CQklZDAsJjB4NDAwYwkJIyBubzsgaXMgc3JjIHRvbyBiaWc/CisJYmd0LncJCXNyY19vdXQJCQkjIHllcworCisjCisjIFNvdXJjZSBpcyB3aXRoaW4gMl4xNCByYW5nZS4KKyMKK3NyY19vazoKKwlmaW50cnoueAlTUkMoJWEwKSwlZnAwCQkjIGNhbGMgaW50IG9mIHNyYworCWZtb3YubAkJJWZwMCwlZDAJCSMgaW50IHNyYyB0byBkMAorIyBkb24ndCB3YW50IGFueSBhY2NydWVkIGJpdHMgZnJvbSB0aGUgZmludHJ6IHNob3dpbmcgdXAgbGF0ZXIgc2luY2UKKyMgd2UgbWF5IG5lZWQgdG8gcmVhZCB0aGUgZnBzciBmb3IgdGhlIGxhc3QgZnAgb3AgaW4gdF9jYXRjaDIoKS4KKwlmbW92LmwJCSYweDAsJWZwc3IKKworCXRzdC5iCQlEU1RfSEkoJWExKQkJIyBpcyBkc3QgZGVub3JtYWxpemVkPworCWJtaS5iCQlzb2tfbm9ybQorCisjIHRoZSBkc3QgaXMgYSBERU5PUk0uIG5vcm1hbGl6ZSB0aGUgREVOT1JNIGFuZCBhZGQgdGhlIGFkanVzdG1lbnQgdG8KKyMgdGhlIHNyYyB2YWx1ZS4gdGhlbiwganVtcCB0byB0aGUgbm9ybSBwYXJ0IG9mIHRoZSByb3V0aW5lLgorc29rX2Rucm06CisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzcmMgZm9yIG5vdworCisJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjBfRVgoJWE2KSAjIG1ha2UgYSBjb3B5CisJbW92LmwJCURTVF9ISSglYTEpLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlEU1RfTE8oJWExKSxGUF9TQ1IwX0xPKCVhNikKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3MgcHRyIHRvIERFTk9STQorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgdGhlIERFTk9STQorCW5lZy5sCQklZDAKKwlhZGQubAkJKCVzcCkrLCVkMAkJIyBhZGQgYWRqdXN0bWVudCB0byBzcmMKKworCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIGxvYWQgbm9ybWFsaXplZCBERU5PUk0KKworCWNtcGkudwkJJWQwLCYtMHgzZmZmCQkjIGlzIHRoZSBzaGZ0IGFtdCByZWFsbHkgbG93PworCWJnZS5iCQlzb2tfbm9ybTIJCSMgdGhhbmsgZ29vZG5lc3Mgbm8KKworIyB0aGUgbXVsdGlwbHkgZmFjdG9yIHRoYXQgd2UncmUgdHJ5aW5nIHRvIGNyZWF0ZSBzaG91bGQgYmUgYSBkZW5vcm0KKyMgZm9yIHRoZSBtdWx0aXBseSB0byB3b3JrLiB0aGVyZWZvcmUsIHdlJ3JlIGdvaW5nIHRvIGFjdHVhbGx5IGRvIGEKKyMgbXVsdGlwbHkgd2l0aCBhIGRlbm9ybSB3aGljaCB3aWxsIGNhdXNlIGFuIHVuaW1wbGVtZW50ZWQgZGF0YSB0eXBlCisjIGV4Y2VwdGlvbiB0byBiZSBwdXQgaW50byB0aGUgbWFjaGluZSB3aGljaCB3aWxsIGJlIGNhdWdodCBhbmQgY29ycmVjdGVkCisjIGxhdGVyLiB3ZSBkb24ndCBkbyB0aGlzIHdpdGggdGhlIERFTk9STXMgYWJvdmUgYmVjYXVzZSB0aGlzIG1ldGhvZAorIyBpcyBzbG93ZXIuIGJ1dCwgZG9uJ3QgZnJldCwgSSBkb24ndCBzZWUgaXQgYmVpbmcgdXNlZCBtdWNoIGVpdGhlci4KKwlmbW92LmwJCSglc3ApKywlZnBjcgkJIyByZXN0b3JlIHVzZXIgZnBjcgorCW1vdi5sCQkmMHg4MDAwMDAwMCwlZDEJCSMgbG9hZCBub3JtYWxpemVkIG1hbnRpc3NhCisJc3ViaS5sCQkmLTB4M2ZmZiwlZDAJCSMgaG93IG1hbnkgc2hvdWxkIHdlIHNoaWZ0PworCW5lZy5sCQklZDAJCQkjIG1ha2UgaXQgcG9zaXRpdmUKKwljbXBpLmIJCSVkMCwmMHgyMAkJIyBpcyBpdCA+IDMyPworCWJnZS5iCQlzb2tfZG5ybV8zMgkJIyB5ZXMKKwlsc3IubAkJJWQwLCVkMQkJCSMgbm87IGJpdCBzdGF5cyBpbiB1cHBlciBsdworCWNsci5sCQktKCVzcCkJCQkjIGluc2VydCB6ZXJvIGxvdyBtYW50aXNzYQorCW1vdi5sCQklZDEsLSglc3ApCQkjIGluc2VydCBuZXcgaGlnaCBtYW50aXNzYQorCWNsci5sCQktKCVzcCkJCQkjIG1ha2UgemVybyBleHBvbmVudAorCWJyYS5iCQlzb2tfbm9ybV9jb250Citzb2tfZG5ybV8zMjoKKwlzdWJpLmIJCSYweDIwLCVkMAkJIyBnZXQgc2hpZnQgY291bnQKKwlsc3IubAkJJWQwLCVkMQkJCSMgbWFrZSBsb3cgbWFudGlzc2EgbG9uZ3dvcmQKKwltb3YubAkJJWQxLC0oJXNwKQkJIyBpbnNlcnQgbmV3IGxvdyBtYW50aXNzYQorCWNsci5sCQktKCVzcCkJCQkjIGluc2VydCB6ZXJvIGhpZ2ggbWFudGlzc2EKKwljbHIubAkJLSglc3ApCQkJIyBtYWtlIHplcm8gZXhwb25lbnQKKwlicmEuYgkJc29rX25vcm1fY29udAorCisjIHRoZSBzcmMgd2lsbCBmb3JjZSB0aGUgZHN0IHRvIGEgREVOT1JNIHZhbHVlIG9yIHdvcnNlLiBzbywgbGV0J3MKKyMgY3JlYXRlIGFuIGZwIG11bHRpcGx5IHRoYXQgd2lsbCBjcmVhdGUgdGhlIHJlc3VsdC4KK3Nva19ub3JtOgorCWZtb3ZtLngJCURTVCglYTEpLCYweDgwCQkjIGxvYWQgZnAwIHdpdGggbm9ybWFsaXplZCBzcmMKK3Nva19ub3JtMjoKKwlmbW92LmwJCSglc3ApKywlZnBjcgkJIyByZXN0b3JlIHVzZXIgZnBjcgorCisJYWRkaS53CQkmMHgzZmZmLCVkMAkJIyB0dXJuIHNyYyBhbXQgaW50byBleHAgdmFsdWUKKwlzd2FwCQklZDAJCQkjIHB1dCBleHBvbmVudCBpbiBoaWdoIHdvcmQKKwljbHIubAkJLSglc3ApCQkJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSYweDgwMDAwMDAwLC0oJXNwKQkjIGluc2VydCBuZXcgaGlnaCBtYW50aXNzYQorCW1vdi5sCQklZDAsLSglc3ApCQkjIGluc2VydCBuZXcgbG8gbWFudGlzc2EKKworc29rX25vcm1fY29udDoKKwlmbW92LmwJCSVmcGNyLCVkMAkJIyBkMCBuZWVkcyBmcGNyIGZvciB0X2NhdGNoMgorCW1vdi5iCQkmRk1VTF9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1VTAorCWZtdWwueAkJKCVzcCkrLCVmcDAJCSMgZG8gdGhlIG11bHRpcGx5CisJYnJhCQl0X2NhdGNoMgkJIyBjYXRjaCBhbnkgZXhjZXB0aW9ucworCisjCisjIFNvdXJjZSBpcyBvdXRzaWRlIG9mIDJeMTQgcmFuZ2UuICBUZXN0IHRoZSBzaWduIGFuZCBicmFuY2gKKyMgdG8gdGhlIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbiBoYW5kbGVyLgorIworc3JjX291dDoKKwltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIGN0cmwgYml0cworCWV4ZwkJJWEwLCVhMQkJCSMgc3dhcCBzcmMsZHN0IHB0cnMKKwl0c3QuYgkJU1JDX0VYKCVhMSkJCSMgaXMgc3JjIG5lZ2F0aXZlPworCWJtaQkJdF91bmZsCQkJIyB5ZXM7IHVuZGVyZmxvdworCWJyYQkJdF9vdmZsX3NjCQkjIG5vOyBvdmVyZmxvdworCisjCisjIFRoZSBzb3VyY2UgaW5wdXQgaXMgYmVsb3cgMSwgc28gd2UgY2hlY2sgZm9yIGRlbm9ybWFsaXplZCBudW1iZXJzCisjIGFuZCBzZXQgdW5mbC4KKyMKK3NyY19zbWFsbDoKKwl0c3QuYgkJRFNUX0hJKCVhMSkJCSMgaXMgZHN0IGRlbm9ybWFsaXplZD8KKwlicGwuYgkJc3NtYWxsX2RvbmUJCSMgeWVzCisKKwltb3YubAkJKCVzcCkrLCVkMAorCWZtb3YubAkJJWQwLCVmcGNyCQkjIG5vOyBsb2FkIGNvbnRyb2wgYml0cworCW1vdi5iCQkmRk1PVl9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1PVkUKKwlmbW92LngJCURTVCglYTEpLCVmcDAJCSMgc2ltcGx5IHJldHVybiBkZXN0CisJYnJhCQl0X2NhdGNoMgorc3NtYWxsX2RvbmU6CisJbW92LmwJCSglc3ApKywlZDAJCSMgbG9hZCBjb250cm9sIGJpdHMgaW50byBkMQorCW1vdi5sCQklYTEsJWEwCQkJIyBwYXNzIHB0ciB0byBkc3QKKwlicmEJCXRfcmVzZG5ybQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNtb2QoKTogY29tcHV0ZXMgdGhlIGZwIE1PRCBvZiB0aGUgaW5wdXQgdmFsdWVzIFgsWS4JCQkjCisjIHNyZW0oKTogY29tcHV0ZXMgdGhlIGZwIChJRUVFKSBSRU0gb2YgdGhlIGlucHV0IHZhbHVlcyBYLFkuCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0IFgJCQkjCisjCWExID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQgWQkJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24sbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMJVGhlIGlucHV0IG9wZXJhbmRzIFggYW5kIFkgY2FuIGJlIGVpdGhlciBub3JtYWxpemVkIG9yCQkjCisjCWRlbm9ybWFsaXplZC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMgICAgICBmcDAgPSBGUkVNKFgsWSkgb3IgRk1PRChYLFkpCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAxLiAgU2F2ZSBhbmQgc3RyaXAgc2lnbnMgb2YgWCBhbmQgWTogc2lnblggOj0gc2lnbihYKSwJIworIyAgICAgICAgICAgICAgICBzaWduWSA6PSBzaWduKFkpLCBYIDo9IHxYfCwgWSA6PSB8WXwsCQkJIworIyAgICAgICAgICAgICAgICBzaWduUSA6PSBzaWduWCBFT1Igc2lnblkuIFJlY29yZCB3aGV0aGVyIE1PRCBvciBSRU0JIworIyAgICAgICAgICAgICAgICBpcyByZXF1ZXN0ZWQuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCAyLiAgU2V0IEwgOj0gZXhwbyhYKS1leHBvKFkpLCBrIDo9IDAsIFEgOj0gMC4JCSMKKyMgICAgICAgICAgICAgICAgSWYgKEwgPCAwKSB0aGVuCQkJCQkjCisjICAgICAgICAgICAgICAgICAgIFIgOj0gWCwgZ28gdG8gU3RlcCA0LgkJCQkjCisjICAgICAgICAgICAgICAgIGVsc2UJCQkJCQkJIworIyAgICAgICAgICAgICAgICAgICBSIDo9IDJeKC1MKVgsIGogOj0gTC4JCQkJIworIyAgICAgICAgICAgICAgICBlbmRpZgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDMuICBQZXJmb3JtIE1PRChYLFkpCQkJCQkjCisjICAgICAgICAgICAgMy4xIElmIFIgPSBZLCBnbyB0byBTdGVwIDkuCQkJCSMKKyMgICAgICAgICAgICAzLjIgSWYgUiA+IFksIHRoZW4geyBSIDo9IFIgLSBZLCBRIDo9IFEgKyAxfQkJIworIyAgICAgICAgICAgIDMuMyBJZiBqID0gMCwgZ28gdG8gU3RlcCA0LgkJCQkjCisjICAgICAgICAgICAgMy40IGsgOj0gayArIDEsIGogOj0gaiAtIDEsIFEgOj0gMlEsIFIgOj0gMlIuIEdvIHRvCSMKKyMgICAgICAgICAgICAgICAgU3RlcCAzLjEuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCA0LiAgQXQgdGhpcyBwb2ludCwgUiA9IFggLSBRWSA9IE1PRChYLFkpLiBTZXQJCSMKKyMgICAgICAgICAgICAgICAgTGFzdF9TdWJ0cmFjdCA6PSBmYWxzZSAodXNlZCBpbiBTdGVwIDcgYmVsb3cpLiBJZgkjCisjICAgICAgICAgICAgICAgIE1PRCBpcyByZXF1ZXN0ZWQsIGdvIHRvIFN0ZXAgNi4JCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDUuICBSID0gTU9EKFgsWSksIGJ1dCBSRU0oWCxZKSBpcyByZXF1ZXN0ZWQuCQkjCisjICAgICAgICAgICAgNS4xIElmIFIgPCBZLzIsIHRoZW4gUiA9IE1PRChYLFkpID0gUkVNKFgsWSkuIEdvIHRvCSMKKyMgICAgICAgICAgICAgICAgU3RlcCA2LgkJCQkJCSMKKyMgICAgICAgICAgICA1LjIgSWYgUiA+IFkvMiwgdGhlbiB7IHNldCBMYXN0X1N1YnRyYWN0IDo9IHRydWUsCQkjCisjICAgICAgICAgICAgICAgIFEgOj0gUSArIDEsIFkgOj0gc2lnblkqWSB9LiBHbyB0byBTdGVwIDYuCQkjCisjICAgICAgICAgICAgNS4zIFRoaXMgaXMgdGhlIHRyaWNreSBjYXNlIG9mIFIgPSBZLzIuIElmIFEgaXMgb2RkLAkjCisjICAgICAgICAgICAgICAgIHRoZW4geyBRIDo9IFEgKyAxLCBzaWduWCA6PSAtc2lnblggfS4JCQkjCisjCQkJCQkJCQkJIworIyAgICAgICBTdGVwIDYuICBSIDo9IHNpZ25YKlIuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCA3LiAgSWYgTGFzdF9TdWJ0cmFjdCA9IHRydWUsIFIgOj0gUiAtIFkuCQkJIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCA4LiAgUmV0dXJuIHNpZ25RLCBsYXN0IDcgYml0cyBvZiBRLCBhbmQgUiBhcyByZXF1aXJlZC4JIworIwkJCQkJCQkJCSMKKyMgICAgICAgU3RlcCA5LiAgQXQgdGhpcyBwb2ludCwgUiA9IDJeKC1qKSpYIC0gUSBZID0gWS4gVGh1cywJCSMKKyMgICAgICAgICAgICAgICAgWCA9IDJeKGopKihRKzEpWS4gc2V0IFEgOj0gMl4oaikqKFErMSksCQkjCisjICAgICAgICAgICAgICAgIFIgOj0gMC4gUmV0dXJuIHNpZ25RLCBsYXN0IDcgYml0cyBvZiBRLCBhbmQgUi4JCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlzZXQJCU1vZF9GbGFnLExfU0NSMworCXNldAkJU2NfRmxhZyxMX1NDUjMrMQorCisJc2V0CQlTaWduWSxMX1NDUjIKKwlzZXQJCVNpZ25YLExfU0NSMisyCisJc2V0CQlTaWduUSxMX1NDUjMrMgorCisJc2V0CQlZLEZQX1NDUjAKKwlzZXQJCVlfSGksWSs0CisJc2V0CQlZX0xvLFkrOAorCisJc2V0CQlSLEZQX1NDUjEKKwlzZXQJCVJfSGksUis0CisJc2V0CQlSX0xvLFIrOAorCitTY2FsZToKKwlsb25nCQkweDAwMDEwMDAwLDB4ODAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisKKwlnbG9iYWwJCXNtb2QKK3Ntb2Q6CisJY2xyLmIJCUZQU1JfUUJZVEUoJWE2KQorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgY3RybCBiaXRzCisJY2xyLmIJCU1vZF9GbGFnKCVhNikKKwlicmEuYgkJTW9kX1JlbQorCisJZ2xvYmFsCQlzcmVtCitzcmVtOgorCWNsci5iCQlGUFNSX1FCWVRFKCVhNikKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIGN0cmwgYml0cworCW1vdi5iCQkmMHgxLE1vZF9GbGFnKCVhNikKKworTW9kX1JlbToKKyMuLlNhdmUgc2lnbiBvZiBYIGFuZCBZCisJbW92bS5sCQkmMHgzZjAwLC0oJXNwKQkJIyBzYXZlIGRhdGEgcmVnaXN0ZXJzCisJbW92LncJCVNSQ19FWCglYTApLCVkMworCW1vdi53CQklZDMsU2lnblkoJWE2KQorCWFuZC5sCQkmMHgwMDAwN0ZGRiwlZDMJCSMgWSA6PSB8WXwKKworIworCW1vdi5sCQlTUkNfSEkoJWEwKSwlZDQKKwltb3YubAkJU1JDX0xPKCVhMCksJWQ1CQkjIChEMyxENCxENSkgaXMgfFl8CisKKwl0c3QubAkJJWQzCisJYm5lLmIJCVlfTm9ybWFsCisKKwltb3YubAkJJjB4MDAwMDNGRkUsJWQzCQkjICQzRkZEICsgMQorCXRzdC5sCQklZDQKKwlibmUuYgkJSGlZX25vdDAKKworSGlZXzA6CisJbW92LmwJCSVkNSwlZDQKKwljbHIubAkJJWQ1CisJc3ViLmwJCSYzMiwlZDMKKwljbHIubAkJJWQ2CisJYmZmZm8JCSVkNHsmMDomMzJ9LCVkNgorCWxzbC5sCQklZDYsJWQ0CisJc3ViLmwJCSVkNiwlZDMJCQkjIChEMyxENCxENSkgaXMgbm9ybWFsaXplZAorIwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ud2l0aCBiaWFzICQ3RkZECisJYnJhLmIJCUNoa19YCisKK0hpWV9ub3QwOgorCWNsci5sCQklZDYKKwliZmZmbwkJJWQ0eyYwOiYzMn0sJWQ2CisJc3ViLmwJCSVkNiwlZDMKKwlsc2wubAkJJWQ2LCVkNAorCW1vdi5sCQklZDUsJWQ3CQkJIyBhIGNvcHkgb2YgRDUKKwlsc2wubAkJJWQ2LCVkNQorCW5lZy5sCQklZDYKKwlhZGQubAkJJjMyLCVkNgorCWxzci5sCQklZDYsJWQ3CisJb3IubAkJJWQ3LCVkNAkJCSMgKEQzLEQ0LEQ1KSBub3JtYWxpemVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ud2l0aCBiaWFzICQ3RkZECisJYnJhLmIJCUNoa19YCisKK1lfTm9ybWFsOgorCWFkZC5sCQkmMHgwMDAwM0ZGRSwlZDMJCSMgKEQzLEQ0LEQ1KSBub3JtYWxpemVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ud2l0aCBiaWFzICQ3RkZECisKK0Noa19YOgorCW1vdi53CQlEU1RfRVgoJWExKSwlZDAKKwltb3YudwkJJWQwLFNpZ25YKCVhNikKKwltb3YudwkJU2lnblkoJWE2KSwlZDEKKwllb3IubAkJJWQwLCVkMQorCWFuZC5sCQkmMHgwMDAwODAwMCwlZDEKKwltb3YudwkJJWQxLFNpZ25RKCVhNikJCSMgc2lnbihRKSBvYnRhaW5lZAorCWFuZC5sCQkmMHgwMDAwN0ZGRiwlZDAKKwltb3YubAkJRFNUX0hJKCVhMSksJWQxCisJbW92LmwJCURTVF9MTyglYTEpLCVkMgkJIyAoRDAsRDEsRDIpIGlzIHxYfAorCXRzdC5sCQklZDAKKwlibmUuYgkJWF9Ob3JtYWwKKwltb3YubAkJJjB4MDAwMDNGRkUsJWQwCisJdHN0LmwJCSVkMQorCWJuZS5iCQlIaVhfbm90MAorCitIaVhfMDoKKwltb3YubAkJJWQyLCVkMQorCWNsci5sCQklZDIKKwlzdWIubAkJJjMyLCVkMAorCWNsci5sCQklZDYKKwliZmZmbwkJJWQxeyYwOiYzMn0sJWQ2CisJbHNsLmwJCSVkNiwlZDEKKwlzdWIubAkJJWQ2LCVkMAkJCSMgKEQwLEQxLEQyKSBpcyBub3JtYWxpemVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ud2l0aCBiaWFzICQ3RkZECisJYnJhLmIJCUluaXQKKworSGlYX25vdDA6CisJY2xyLmwJCSVkNgorCWJmZmZvCQklZDF7JjA6JjMyfSwlZDYKKwlzdWIubAkJJWQ2LCVkMAorCWxzbC5sCQklZDYsJWQxCisJbW92LmwJCSVkMiwlZDcJCQkjIGEgY29weSBvZiBEMgorCWxzbC5sCQklZDYsJWQyCisJbmVnLmwJCSVkNgorCWFkZC5sCQkmMzIsJWQ2CisJbHNyLmwJCSVkNiwlZDcKKwlvci5sCQklZDcsJWQxCQkJIyAoRDAsRDEsRDIpIG5vcm1hbGl6ZWQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi53aXRoIGJpYXMgJDdGRkQKKwlicmEuYgkJSW5pdAorCitYX05vcm1hbDoKKwlhZGQubAkJJjB4MDAwMDNGRkUsJWQwCQkjIChEMCxEMSxEMikgbm9ybWFsaXplZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLndpdGggYmlhcyAkN0ZGRAorCitJbml0OgorIworCW1vdi5sCQklZDMsTF9TQ1IxKCVhNikJCSMgc2F2ZSBiaWFzZWQgZXhwKFkpCisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBiaWFzZWQgZXhwKFgpCisJc3ViLmwJCSVkMywlZDAJCQkjIEwgOj0gZXhwbyhYKS1leHBvKFkpCisKKwljbHIubAkJJWQ2CQkJIyBENiA6PSBjYXJyeSA8LSAwCisJY2xyLmwJCSVkMwkJCSMgRDMgaXMgUQorCW1vdi5sCQkmMCwlYTEJCQkjIEExIGlzIGs7IGoraz1MLCBRPTAKKworIy4uKENhcnJ5LEQxLEQyKSBpcyBSCisJdHN0LmwJCSVkMAorCWJnZS5iCQlNb2RfTG9vcF9wcmUKKworIy4uZXhwbyhYKSA8IGV4cG8oWSkuIFRodXMgWCA9IG1vZChYLFkpCisjCisJbW92LmwJCSglc3ApKywlZDAJCSMgcmVzdG9yZSBkMAorCWJyYS53CQlHZXRfTW9kCisKK01vZF9Mb29wX3ByZToKKwlhZGRxLmwJCSYweDQsJXNwCQkjIGVyYXNlIGV4cChYKQorIy4uQXQgdGhpcyBwb2ludCAgUiA9IDJeKC1MKVg7IFEgPSAwOyBrID0gMDsgYW5kICBrK2ogPSBMCitNb2RfTG9vcDoKKwl0c3QubAkJJWQ2CQkJIyB0ZXN0IGNhcnJ5IGJpdAorCWJndC5iCQlSX0dUX1kKKworIy4uQXQgdGhpcyBwb2ludCBjYXJyeSA9IDAsIFIgPSAoRDEsRDIpLCBZID0gKEQ0LEQ1KQorCWNtcC5sCQklZDEsJWQ0CQkJIyBjb21wYXJlIGhpKFIpIGFuZCBoaShZKQorCWJuZS5iCQlSX05FX1kKKwljbXAubAkJJWQyLCVkNQkJCSMgY29tcGFyZSBsbyhSKSBhbmQgbG8oWSkKKwlibmUuYgkJUl9ORV9ZCisKKyMuLkF0IHRoaXMgcG9pbnQsIFIgPSBZCisJYnJhLncJCVJlbV9pc18wCisKK1JfTkVfWToKKyMuLnVzZSB0aGUgYm9ycm93IG9mIHRoZSBwcmV2aW91cyBjb21wYXJlCisJYmNzLmIJCVJfTFRfWQkJCSMgYm9ycm93IGlzIHNldCBpZmYgUiA8IFkKKworUl9HVF9ZOgorIy4uSWYgQ2FycnkgaXMgc2V0LCB0aGVuIFkgPCAoQ2FycnksRDEsRDIpIDwgMlkuIE90aGVyd2lzZSwgQ2FycnkgPSAwCisjLi5hbmQgWSA8IChEMSxEMikgPCAyWS4gRWl0aGVyIHdheSwgcGVyZm9ybSBSIC0gWQorCXN1Yi5sCQklZDUsJWQyCQkJIyBsbyhSKSAtIGxvKFkpCisJc3VieC5sCQklZDQsJWQxCQkJIyBoaShSKSAtIGhpKFkpCisJY2xyLmwJCSVkNgkJCSMgY2xlYXIgY2FycnkKKwlhZGRxLmwJCSYxLCVkMwkJCSMgUSA6PSBRICsgMQorCitSX0xUX1k6CisjLi5BdCB0aGlzIHBvaW50LCBDYXJyeT0wLCBSIDwgWS4gUiA9IDJeKGstTClYIC0gUVk7IGsraiA9IEw7IGogPj0gMC4KKwl0c3QubAkJJWQwCQkJIyBzZWUgaWYgaiA9IDAuCisJYmVxLmIJCVBvc3RMb29wCisKKwlhZGQubAkJJWQzLCVkMwkJCSMgUSA6PSAyUQorCWFkZC5sCQklZDIsJWQyCQkJIyBsbyhSKSA9IDJsbyhSKQorCXJveGwubAkJJjEsJWQxCQkJIyBoaShSKSA9IDJoaShSKSArIGNhcnJ5CisJc2NzCQklZDYJCQkjIHNldCBDYXJyeSBpZiAyKFIpIG92ZXJmbG93cworCWFkZHEubAkJJjEsJWExCQkJIyBrIDo9IGsrMQorCXN1YnEubAkJJjEsJWQwCQkJIyBqIDo9IGogLSAxCisjLi5BdCB0aGlzIHBvaW50LCBSPShDYXJyeSxEMSxEMikgPSAyXihrLUwpWCAtIFFZLCBqK2s9TCwgaiA+PSAwLCBSIDwgMlkuCisKKwlicmEuYgkJTW9kX0xvb3AKKworUG9zdExvb3A6CisjLi5rID0gTCwgaiA9IDAsIENhcnJ5ID0gMCwgUiA9IChEMSxEMikgPSBYIC0gUVksIFIgPCBZLgorCisjLi5ub3JtYWxpemUgUi4KKwltb3YubAkJTF9TQ1IxKCVhNiksJWQwCQkjIG5ldyBiaWFzZWQgZXhwbyBvZiBSCisJdHN0LmwJCSVkMQorCWJuZS5iCQlIaVJfbm90MAorCitIaVJfMDoKKwltb3YubAkJJWQyLCVkMQorCWNsci5sCQklZDIKKwlzdWIubAkJJjMyLCVkMAorCWNsci5sCQklZDYKKwliZmZmbwkJJWQxeyYwOiYzMn0sJWQ2CisJbHNsLmwJCSVkNiwlZDEKKwlzdWIubAkJJWQ2LCVkMAkJCSMgKEQwLEQxLEQyKSBpcyBub3JtYWxpemVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ud2l0aCBiaWFzICQ3RkZECisJYnJhLmIJCUdldF9Nb2QKKworSGlSX25vdDA6CisJY2xyLmwJCSVkNgorCWJmZmZvCQklZDF7JjA6JjMyfSwlZDYKKwlibWkuYgkJR2V0X01vZAkJCSMgYWxyZWFkeSBub3JtYWxpemVkCisJc3ViLmwJCSVkNiwlZDAKKwlsc2wubAkJJWQ2LCVkMQorCW1vdi5sCQklZDIsJWQ3CQkJIyBhIGNvcHkgb2YgRDIKKwlsc2wubAkJJWQ2LCVkMgorCW5lZy5sCQklZDYKKwlhZGQubAkJJjMyLCVkNgorCWxzci5sCQklZDYsJWQ3CisJb3IubAkJJWQ3LCVkMQkJCSMgKEQwLEQxLEQyKSBub3JtYWxpemVkCisKKyMKK0dldF9Nb2Q6CisJY21wLmwJCSVkMCwmMHgwMDAwNDFGRQorCWJnZS5iCQlOb19TY2FsZQorRG9fU2NhbGU6CisJbW92LncJCSVkMCxSKCVhNikKKwltb3YubAkJJWQxLFJfSGkoJWE2KQorCW1vdi5sCQklZDIsUl9MbyglYTYpCisJbW92LmwJCUxfU0NSMSglYTYpLCVkNgorCW1vdi53CQklZDYsWSglYTYpCisJbW92LmwJCSVkNCxZX0hpKCVhNikKKwltb3YubAkJJWQ1LFlfTG8oJWE2KQorCWZtb3YueAkJUiglYTYpLCVmcDAJCSMgbm8gZXhjZXB0aW9uCisJbW92LmIJCSYxLFNjX0ZsYWcoJWE2KQorCWJyYS5iCQlNb2RPclJlbQorTm9fU2NhbGU6CisJbW92LmwJCSVkMSxSX0hpKCVhNikKKwltb3YubAkJJWQyLFJfTG8oJWE2KQorCXN1Yi5sCQkmMHgzRkZFLCVkMAorCW1vdi53CQklZDAsUiglYTYpCisJbW92LmwJCUxfU0NSMSglYTYpLCVkNgorCXN1Yi5sCQkmMHgzRkZFLCVkNgorCW1vdi5sCQklZDYsTF9TQ1IxKCVhNikKKwlmbW92LngJCVIoJWE2KSwlZnAwCisJbW92LncJCSVkNixZKCVhNikKKwltb3YubAkJJWQ0LFlfSGkoJWE2KQorCW1vdi5sCQklZDUsWV9MbyglYTYpCisJY2xyLmIJCVNjX0ZsYWcoJWE2KQorCisjCitNb2RPclJlbToKKwl0c3QuYgkJTW9kX0ZsYWcoJWE2KQorCWJlcS5iCQlGaXhfU2lnbgorCisJbW92LmwJCUxfU0NSMSglYTYpLCVkNgkJIyBuZXcgYmlhc2VkIGV4cG8oWSkKKwlzdWJxLmwJCSYxLCVkNgkJCSMgYmlhc2VkIGV4cG8oWS8yKQorCWNtcC5sCQklZDAsJWQ2CisJYmx0LmIJCUZpeF9TaWduCisJYmd0LmIJCUxhc3RfU3ViCisKKwljbXAubAkJJWQxLCVkNAorCWJuZS5iCQlOb3RfRVEKKwljbXAubAkJJWQyLCVkNQorCWJuZS5iCQlOb3RfRVEKKwlicmEudwkJVGllX0Nhc2UKKworTm90X0VROgorCWJjcy5iCQlGaXhfU2lnbgorCitMYXN0X1N1YjoKKyMKKwlmc3ViLngJCVkoJWE2KSwlZnAwCQkjIG5vIGV4Y2VwdGlvbnMKKwlhZGRxLmwJCSYxLCVkMwkJCSMgUSA6PSBRICsgMQorCisjCitGaXhfU2lnbjoKKyMuLkdldCBzaWduIG9mIFgKKwltb3YudwkJU2lnblgoJWE2KSwlZDYKKwliZ2UuYgkJR2V0X1EKKwlmbmVnLngJCSVmcDAKKworIy4uR2V0IFEKKyMKK0dldF9ROgorCWNsci5sCQklZDYKKwltb3YudwkJU2lnblEoJWE2KSwlZDYJCSMgRDYgaXMgc2lnbihRKQorCW1vdi5sCQkmOCwlZDcKKwlsc3IubAkJJWQ3LCVkNgorCWFuZC5sCQkmMHgwMDAwMDA3RiwlZDMJCSMgNyBiaXRzIG9mIFEKKwlvci5sCQklZDYsJWQzCQkJIyBzaWduIGFuZCBiaXRzIG9mIFEKKyMJc3dhcAkJJWQzCisjCWZtb3YubAkJJWZwc3IsJWQ2CisjCWFuZC5sCQkmMHhGRjAwRkZGRiwlZDYKKyMJb3IubAkJJWQzLCVkNgorIwlmbW92LmwJCSVkNiwlZnBzcgkJIyBwdXQgUSBpbiBmcHNyCisJbW92LmIJCSVkMyxGUFNSX1FCWVRFKCVhNikJIyBwdXQgUSBpbiBmcHNyCisKKyMKK1Jlc3RvcmU6CisJbW92bS5sCQkoJXNwKSssJjB4ZmMJCSMgIHslZDItJWQ3fQorCW1vdi5sCQkoJXNwKSssJWQwCisJZm1vdi5sCQklZDAsJWZwY3IKKwl0c3QuYgkJU2NfRmxhZyglYTYpCisJYmVxLmIJCUZpbmlzaAorCW1vdi5iCQkmRk1VTF9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1VTAorCWZtdWwueAkJU2NhbGUoJXBjKSwlZnAwCQkjIG1heSBjYXVzZSB1bmRlcmZsb3cKKwlicmEJCXRfY2F0Y2gyCisjIHRoZSAnMDQwIHBhY2thZ2UgZGlkIHRoaXMgYXBwYXJlbnRseSB0byBzZWUgaWYgdGhlIGRzdCBvcGVyYW5kIGZvciB0aGUKKyMgcHJlY2VkaW5nIGZtdWwgd2FzIGEgZGVub3JtLiBidXQsIGl0IGJldHRlciBub3QgaGF2ZSBiZWVuIHNpbmNlIHRoZQorIyBhbGdvcml0aG0ganVzdCBnb3QgZG9uZSBwbGF5aW5nIHdpdGggZnAwIGFuZCBleHBlY3RlZCBubyBleGNlcHRpb25zCisjIGFzIGEgcmVzdWx0LiB0cnVzdCBtZS4uLgorIwlicmEJCXRfYXZvaWRfdW5zdXBwCQkjIGNoZWNrIGZvciBkZW5vcm0gYXMgYQorIwkJCQkJCTtyZXN1bHQgb2YgdGhlIHNjYWxpbmcKKworRmluaXNoOgorCW1vdi5iCQkmRk1PVl9PUCwlZDEJCSMgbGFzdCBpbnN0IGlzIE1PVkUKKwlmbW92LngJCSVmcDAsJWZwMAkJIyBjYXB0dXJlIGV4Y2VwdGlvbnMgJiByb3VuZAorCWJyYQkJdF9jYXRjaDIKKworUmVtX2lzXzA6CisjLi5SID0gMl4oLWopWCAtIFEgWSA9IFksIHRodXMgUiA9IDAgYW5kIHF1b3RpZW50ID0gMl5qIChRKzEpCisJYWRkcS5sCQkmMSwlZDMKKwljbXAubAkJJWQwLCY4CQkJIyBEMCBpcyBqCisJYmdlLmIJCVFfQmlnCisKKwlsc2wubAkJJWQwLCVkMworCWJyYS5iCQlTZXRfUl8wCisKK1FfQmlnOgorCWNsci5sCQklZDMKKworU2V0X1JfMDoKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAKKwljbHIuYgkJU2NfRmxhZyglYTYpCisJYnJhLncJCUZpeF9TaWduCisKK1RpZV9DYXNlOgorIy4uQ2hlY2sgcGFyaXR5IG9mIFEKKwltb3YubAkJJWQzLCVkNgorCWFuZC5sCQkmMHgwMDAwMDAwMSwlZDYKKwl0c3QubAkJJWQ2CisJYmVxLncJCUZpeF9TaWduCQkjIFEgaXMgZXZlbgorCisjLi5RIGlzIG9kZCwgUSA6PSBRICsgMSwgc2lnblggOj0gLXNpZ25YCisJYWRkcS5sCQkmMSwlZDMKKwltb3YudwkJU2lnblgoJWE2KSwlZDYKKwllb3IubAkJJjB4MDAwMDgwMDAsJWQ2CisJbW92LncJCSVkNixTaWduWCglYTYpCisJYnJhLncJCUZpeF9TaWduCisKK3FuYW46CWxvbmcJCTB4N2ZmZjAwMDAsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwl0X2R6KCk6IEhhbmRsZSBEWiBleGNlcHRpb24gZHVyaW5nIHRyYW5zY2VuZGVudGFsIGVtdWxhdGlvbi4JIworIwkgICAgICAgIFNldHMgTiBiaXQgYWNjb3JkaW5nIHRvIHNpZ24gb2Ygc291cmNlIG9wZXJhbmQuCQkjCisjCXRfZHoyKCk6IEhhbmRsZSBEWiBleGNlcHRpb24gZHVyaW5nIHRyYW5zY2VuZGVudGFsIGVtdWxhdGlvbi4JIworIwkJIFNldHMgTiBiaXQgYWx3YXlzLgkJCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIHNvdXJjZSBvcGVyYW5kCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSBkZWZhdWx0IHJlc3VsdAkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCS0gU3RvcmUgcHJvcGVybHkgc2lnbmVkIElORiBpbnRvIGZwMC4JCQkJIworIwktIFNldCBGUFNSIGV4Y2VwdGlvbiBzdGF0dXMgZHogYml0LCBjY29kZSBpbmYgYml0LCBhbmQJCSMKKyMJICBhY2NydWVkIGR6IGJpdC4JCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQl0X2R6Cit0X2R6OgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBubzsgaXMgc3JjIG5lZ2F0aXZlPworCWJtaS5iCQl0X2R6MgkJCSMgeWVzCisKK2R6X3BpbmY6CisJZm1vdi5zCQkmMHg3ZjgwMDAwMCwlZnAwCSMgcmV0dXJuICtJTkYgaW4gZnAwCisJb3JpLmwJCSZkemluZl9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IEkvRFovQURaCisJcnRzCisKKwlnbG9iYWwJCXRfZHoyCit0X2R6MjoKKwlmbW92LnMJCSYweGZmODAwMDAwLCVmcDAJIyByZXR1cm4gLUlORiBpbiBmcDAKKwlvcmkubAkJJmR6aW5mX21hc2srbmVnX21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgTi9JL0RaL0FEWgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBPUEVSUiBleGNlcHRpb246CQkJCQkJIworIwktIHNldCBGUFNSIGV4Y2VwdGlvbiBzdGF0dXMgb3BlcnIgYml0LCBjb25kaXRpb24gY29kZQkjCisjCSAgbmFuIGJpdDsgU3RvcmUgZGVmYXVsdCBOQU4gaW50byBmcDAJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJdF9vcGVycgordF9vcGVycjoKKwlvcmkubAkJJm9wbmFuX21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgTmFOL09QRVJSL0FJT1AKKwlmbW92bS54CQlxbmFuKCVwYyksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgTkFOIGluIGZwMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBFeHRlbmRlZCBERU5PUk06CQkJCQkJIworIwktIEZvciBhbGwgZnVuY3Rpb25zIHRoYXQgaGF2ZSBhIGRlbm9ybWFsaXplZCBpbnB1dCBhbmQJIworIwkgIHRoYXQgZih4KT14LCB0aGlzIGlzIHRoZSBlbnRyeSBwb2ludC4JCQkjCisjCS0gd2Ugb25seSByZXR1cm4gdGhlIEVYT1AgaGVyZSBpZiBlaXRoZXIgdW5kZXJmbG93IG9yCSMKKyMJICBpbmV4YWN0IGlzIGVuYWJsZWQuCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEVudHJ5IHBvaW50IGZvciBzY2FsZSB3LyBleHRlbmRlZCBkZW5vcm0uIFRoZSBmdW5jdGlvbiBkb2VzCisjIE5PVCBzZXQgSU5FWDIvQVVORkwvQUlORVguCisJZ2xvYmFsCQl0X3Jlc2Rucm0KK3RfcmVzZG5ybToKKwlvcmkubAkJJnVuZmxfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBVTkZMCisJYnJhLmIJCXhkbnJtX2NvbgorCisJZ2xvYmFsCQl0X2V4dGRucm0KK3RfZXh0ZG5ybToKKwlvcmkubAkJJnVuZmlueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IFVORkwvSU5FWDIvQVVORkwvQUlORVgKKworeGRucm1fY29uOgorCW1vdi5sCQklYTAsJWExCQkJIyBtYWtlIGNvcHkgb2Ygc3JjIHB0cgorCW1vdi5sCQklZDAsJWQxCQkJIyBtYWtlIGNvcHkgb2Ygcm5kIHByZWMsbW9kZQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGV4dGVuZGVkIHByZWNpc2lvbj8KKwlibmUuYgkJeGRucm1fc2QJCSMgbm8KKworIyByZXN1bHQgcHJlY2lzaW9uIGlzIGV4dGVuZGVkLgorCXRzdC5iCQlMT0NBTF9FWCglYTApCQkjIGlzIGRlbm9ybSBuZWdhdGl2ZT8KKwlicGwuYgkJeGRucm1fZXhpdAkJIyBubworCisJYnNldAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgeWVzOyBzZXQgJ04nIGNjb2RlIGJpdAorCWJyYS5iCQl4ZG5ybV9leGl0CisKKyMgcmVzdWx0IHByZWNpc2lvbiBpcyBzaW5nbGUgb3IgZG91YmxlCit4ZG5ybV9zZDoKKwltb3YubAkJJWExLC0oJXNwKQorCXRzdC5iCQlMT0NBTF9FWCglYTApCQkjIGlzIGRlbm9ybSBwb3Mgb3IgbmVnPworCXNtaS5iCQklZDEJCQkjIHNldCBkMCBhY2NvZGluZ2x5CisJYnNyLmwJCXVuZl9zdWIKKwltb3YubAkJKCVzcCkrLCVhMQoreGRucm1fZXhpdDoKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDAKKwlhbmRpLmIJCSYweDBhLCVkMAkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJeGRucm1fZW5hCQkjIHllcworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjCisjIHVuZmwgZW5hYmxlZCAjCisjIyMjIyMjIyMjIyMjIyMjCisjIHdlIGhhdmUgYSBERU5PUk0gdGhhdCBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgaW50byBhbiBFWE9QLgorIyBzbywgbm9ybWFsaXplIHRoZSBtYW50aXNzYSwgYWRkIDB4NjAwMCB0byB0aGUgbmV3IGV4cG9uZW50LAorIyBhbmQgcmV0dXJuIHRoZSByZXN1bHQgaW4gZnAxLgoreGRucm1fZW5hOgorCW1vdi53CQlMT0NBTF9FWCglYTEpLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlMT0NBTF9ISSglYTEpLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlMT0NBTF9MTyglYTEpLEZQX1NDUjBfTE8oJWE2KQorCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSBtYW50aXNzYQorCWFkZGkubAkJJjB4NjAwMCwlZDAJCSMgYWRkIGV4dHJhIGJpYXMKKwlhbmRpLncJCSYweDgwMDAsRlBfU0NSMF9FWCglYTYpCSMga2VlcCBvbGQgc2lnbgorCW9yLncJCSVkMCxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVU5GTCBleGNlcHRpb246CQkJCQkJIworIwktIFRoaXMgcm91dGluZSBpcyBmb3IgY2FzZXMgd2hlcmUgZXZlbiBhbiBFWE9QIGlzbid0CSMKKyMJICBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgcmFuZ2Ugb2YgdGhpcyByZXN1bHQuCSMKKyMJICBJbiBzdWNoIGEgY2FzZSwgdGhlIEVYT1AgZXF1YWxzIHplcm8uCQkJIworIwktIFJldHVybiB0aGUgZGVmYXVsdCByZXN1bHQgdG8gdGhlIHByb3BlciBwcmVjaXNpb24JIworIwkgIHdpdGggdGhlIHNpZ24gb2YgdGhpcyByZXN1bHQgYmVpbmcgdGhlIHNhbWUgYXMgdGhhdAkjCisjCSAgb2YgdGhlIHNyYyBvcGVyYW5kLgkJCQkJIworIwktIHRfdW5mbDIoKSBpcyBwcm92aWRlZCB0byBmb3JjZSB0aGUgcmVzdWx0IHNpZ24gdG8JIworIwkgIHBvc2l0aXZlIHdoaWNoIGlzIHRoZSBkZXNpcmVkIHJlc3VsdCBmb3IgZmV0b3goKS4JIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCXRfdW5mbAordF91bmZsOgorCW9yaS5sCQkmdW5maW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgVU5GTC9JTkVYMi9BVU5GTC9BSU5FWAorCisJdHN0LmIJCSglYTApCQkJIyBpcyByZXN1bHQgcG9zIG9yIG5lZz8KKwlzbWkuYgkJJWQxCQkJIyBzZXQgZDEgYWNjb3JkaW5nbHkKKwlic3IubAkJdW5mX3N1YgkJCSMgY2FsYyBkZWZhdWx0IHVuZmwgcmVzdWx0CisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCisJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAxCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJcnRzCisKKyMgdF91bmZsMiBBTFdBWVMgdGVsbHMgdW5mX3N1YiB0byBjcmVhdGUgYSBwb3NpdGl2ZSByZXN1bHQKKwlnbG9iYWwJCXRfdW5mbDIKK3RfdW5mbDI6CisJb3JpLmwJCSZ1bmZpbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBVTkZML0lORVgyL0FVTkZML0FJTkVYCisKKwlzZi5iCQklZDEJCQkjIHNldCBkMCB0byByZXByZXNlbnQgcG9zaXRpdmUKKwlic3IubAkJdW5mX3N1YgkJCSMgY2FsYyBkZWZhdWx0IHVuZmwgcmVzdWx0CisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCisJZm1vdi5zCQkmMHgwMDAwMDAwLCVmcDEJCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE9WRkwgZXhjZXB0aW9uOgkJCQkJCSMKKyMJLSBUaGlzIHJvdXRpbmUgaXMgZm9yIGNhc2VzIHdoZXJlIGV2ZW4gYW4gRVhPUCBpc24ndAkjCisjCSAgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIHJhbmdlIG9mIHRoaXMgcmVzdWx0LgkjCisjCS0gUmV0dXJuIHRoZSBkZWZhdWx0IHJlc3VsdCB0byB0aGUgcHJvcGVyIHByZWNpc2lvbgkjCisjCSAgd2l0aCB0aGUgc2lnbiBvZiB0aGlzIHJlc3VsdCBiZWluZyB0aGUgc2FtZSBhcyB0aGF0CSMKKyMJICBvZiB0aGUgc3JjIG9wZXJhbmQuCQkJCQkjCisjCS0gdF9vdmZsMigpIGlzIHByb3ZpZGVkIHRvIGZvcmNlIHRoZSByZXN1bHQgc2lnbiB0bwkjCisjCSAgcG9zaXRpdmUgd2hpY2ggaXMgdGhlIGRlc2lyZWQgcmVzdWx0IGZvciBmY29zaCgpLgkjCisjCS0gdF9vdmZsX3NjKCkgaXMgcHJvdmlkZWQgZm9yIHNjYWxlKCkgd2hpY2ggb25seSBzZXRzCSMKKyMJICB0aGUgaW5leGFjdCBiaXRzIGlmIHRoZSBudW1iZXIgaXMgaW5leGFjdCBmb3IgdGhlCSMKKyMJICBwcmVjaXNpb24gaW5kaWNhdGVkLgkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJdF9vdmZsX3NjCit0X292Zmxfc2M6CisJb3JpLmwJCSZvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IE9WRkwvQU9WRkwvQUlORVgKKworCW1vdi5iCQklZDAsJWQxCQkJIyBmZXRjaCBybmQgbW9kZS9wcmVjCisJYW5kaS5iCQkmMHhjMCwlZDEJCSMgZXh0cmFjdCBybmQgcHJlYworCWJlcS5iCQlvdmZsX3dvcmsJCSMgcHJlYyBpcyBleHRlbmRlZAorCisJdHN0LmIJCUxPQ0FMX0hJKCVhMCkJCSMgaXMgZHN0IGEgREVOT1JNPworCWJtaS5iCQlvdmZsX3NjX25vcm0JCSMgbm8KKworIyBkc3Qgb3AgaXMgYSBERU5PUk0uIHdlIGhhdmUgdG8gbm9ybWFsaXplIHRoZSBtYW50aXNzYSB0byBzZWUgaWYgdGhlCisjIHJlc3VsdCB3b3VsZCBiZSBpbmV4YWN0IGZvciB0aGUgZ2l2ZW4gcHJlY2lzaW9uLiBtYWtlIGEgY29weSBvZiB0aGUKKyMgZHN0IHNvIHdlIGRvbid0IHNjcmV3IHVwIHRoZSB2ZXJzaW9uIHBhc3NlZCB0byB1cy4KKwltb3YudwkJTE9DQUxfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJTE9DQUxfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJTE9DQUxfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzIHB0ciB0byBGUF9TQ1IwCisJbW92bS5sCQkmMHhjMDgwLC0oJXNwKQkJIyBzYXZlIGQwLWQxL2EwCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSBtYW50aXNzYQorCW1vdm0ubAkJKCVzcCkrLCYweDAxMDMJCSMgcmVzdG9yZSBkMC1kMS9hMAorCitvdmZsX3NjX25vcm06CisJY21waS5iCQklZDEsJjB4NDAJCSMgaXMgcHJlYyBkYmw/CisJYm5lLmIJCW92Zmxfc2NfZGJsCQkjIG5vOyBzZ2wKK292Zmxfc2Nfc2dsOgorCXRzdC5sCQlMT0NBTF9MTyglYTApCQkjIGlzIGxvIGx3IG9mIHNnbCBzZXQ/CisJYm5lLmIJCW92Zmxfc2NfaW54CQkjIHllcworCXRzdC5iCQkzK0xPQ0FMX0hJKCVhMCkJCSMgaXMgbG8gYnl0ZSBvZiBoaSBsdyBzZXQ/CisJYm5lLmIJCW92Zmxfc2NfaW54CQkjIHllcworCWJyYS5iCQlvdmZsX3dvcmsJCSMgZG9uJ3Qgc2V0IElORVgyCitvdmZsX3NjX2RibDoKKwltb3YubAkJTE9DQUxfTE8oJWEwKSwlZDEJIyBhcmUgYW55IG9mIGxvIDExIGJpdHMgb2YKKwlhbmRpLmwJCSYweDdmZiwlZDEJCSMgZGJsIG1hbnRpc3NhIHNldD8KKwliZXEuYgkJb3ZmbF93b3JrCQkjIG5vOyBkb24ndCBzZXQgSU5FWDIKK292Zmxfc2NfaW54OgorCW9yaS5sCQkmaW5leDJfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBJTkVYMgorCWJyYS5iCQlvdmZsX3dvcmsJCSMgY29udGludWUKKworCWdsb2JhbAkJdF9vdmZsCit0X292Zmw6CisJb3JpLmwJCSZvdmZpbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBPVkZML0lORVgyL0FPVkZML0FJTkVYCisKK292Zmxfd29yazoKKwl0c3QuYgkJTE9DQUxfRVgoJWEwKQkJIyB3aGF0IGlzIHRoZSBzaWduPworCXNtaS5iCQklZDEJCQkjIHNldCBkMSBhY2NvcmRpbmdseQorCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjIGRlZmF1bHQgb3ZmbCByZXN1bHQKKwltb3YuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIGluc2VydCBuZXcgY2NvZGVzCisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCisJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAxCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJcnRzCisKKyMgdF9vdmZsMiBBTFdBWVMgdGVsbHMgb3ZmX3JlcyB0byBjcmVhdGUgYSBwb3NpdGl2ZSByZXN1bHQKKwlnbG9iYWwJCXRfb3ZmbDIKK3Rfb3ZmbDI6CisJb3JpLmwJCSZvdmZpbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBPVkZML0lORVgyL0FPVkZML0FJTkVYCisKKwlzZi5iCQklZDEJCQkjIGNsZWFyIHNpZ24gZmxhZyBmb3IgcG9zaXRpdmUKKwlic3IubAkJb3ZmX3JlcwkJCSMgY2FsYyBkZWZhdWx0IG92ZmwgcmVzdWx0CisJbW92LmIJCSVkMCxGUFNSX0NDKCVhNikJIyBpbnNlcnQgbmV3IGNjb2RlcworCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKworCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMQkjIHJldHVybiBFWE9QIGluIGZwMQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyB0X2NhdGNoKCk6CQkJCQkJCSMKKyMJLSB0aGUgbGFzdCBvcGVyYXRpb24gb2YgYSB0cmFuc2NlbmRlbnRhbCBlbXVsYXRpb24JIworIwkgIHJvdXRpbmUgbWF5IGhhdmUgY2F1c2VkIGFuIHVuZGVyZmxvdyBvciBvdmVyZmxvdy4JIworIwkgIHdlIGZpbmQgb3V0IGlmIHRoaXMgb2NjdXJyZWQgYnkgZG9pbmcgYW4gZnNhdmUgYW5kCSMKKyMJICBjaGVja2luZyB0aGUgZXhjZXB0aW9uIGJpdC4gaWYgb25lIGRpZCBvY2N1ciwgdGhlbiB3ZQkjCisjCSAganVtcCB0byBmZ2VuX2V4Y2VwdCgpIHdoaWNoIGNyZWF0ZXMgdGhlIGRlZmF1bHQJIworIwkgIHJlc3VsdCBhbmQgRVhPUCBmb3IgdXMuCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQl0X2NhdGNoCit0X2NhdGNoOgorCisJZnNhdmUJCS0oJXNwKQorCXRzdC5iCQkweDIoJXNwKQorCWJtaS5iCQljYXRjaAorCWFkZC5sCQkmMHhjLCVzcAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBJTkVYMiBleGNlcHRpb246CQkJCQkJIworIwktIFRoZSBpbmV4MiBhbmQgYWluZXggYml0cyBhcmUgc2V0LgkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQl0X2lueDIKK3RfaW54MjoKKwlmYmx0LncJCXRfbWlueDIKKwlmYmVxLncJCWlueDJfemVybworCisJZ2xvYmFsCQl0X3BpbngyCit0X3BpbngyOgorCW9yaS53CQkmaW54MmFfbWFzaywyK1VTRVJfRlBTUiglYTYpICMgc2V0IElORVgyL0FJTkVYCisJcnRzCisKKwlnbG9iYWwJCXRfbWlueDIKK3RfbWlueDI6CisJb3JpLmwJCSZpbngyYV9tYXNrK25lZ19tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IE4vSU5FWDIvQUlORVgKKwlydHMKKworaW54Ml96ZXJvOgorCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikKKwlvcmkudwkJJmlueDJhX21hc2ssMitVU0VSX0ZQU1IoJWE2KSAjIHNldCBJTkVYMi9BSU5FWAorCXJ0cworCisjIGFuIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBleGNlcHRpb24gb2NjdXJyZWQuCisjIHdlIG11c3Qgc2V0IElORVgvQUlORVggc2luY2UgdGhlIGZtdWwvZmRpdi9mbW92IGVtdWxhdGlvbiBtYXkgbm90IQorY2F0Y2g6CisJb3JpLncJCSZpbngyYV9tYXNrLEZQU1JfRVhDRVBUKCVhNikKK2NhdGNoMjoKKwlic3IubAkJZmdlbl9leGNlcHQKKwlhZGQubAkJJjB4Yywlc3AKKwlydHMKKworCWdsb2JhbAkJdF9jYXRjaDIKK3RfY2F0Y2gyOgorCisJZnNhdmUJCS0oJXNwKQorCisJdHN0LmIJCTB4Miglc3ApCisJYm1pLmIJCWNhdGNoMgorCWFkZC5sCQkmMHhjLCVzcAorCisJZm1vdi5sCQklZnBzciwlZDAKKwlvci5sCQklZDAsVVNFUl9GUFNSKCVhNikKKworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgdW5mX3JlcygpOiB1bmRlcmZsb3cgZGVmYXVsdCByZXN1bHQgY2FsY3VsYXRpb24gZm9yIHRyYW5zY2VuZGVudGFscwkjCisjCQkJCQkJCQkJIworIyBJTlBVVDoJCQkJCQkJCSMKKyMJZDAgICA6IHJuZCBtb2RlLHByZWNpc2lvbgkJCQkJIworIwlkMS5iIDogc2lnbiBiaXQgb2YgcmVzdWx0ICgnMTExMTExMTEgPSAoLSkgOyAnMDAwMDAwMDAgPSAoKykpCSMKKyMgT1VUUFVUOgkJCQkJCQkJIworIwlhMCAgIDogcG9pbnRzIHRvIHJlc3VsdCAoaW4gaW5zdHJ1Y3Rpb24gbWVtb3J5KQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3VuZl9zdWI6CisJb3JpLmwJCSZ1bmZpbnhfbWFzayxVU0VSX0ZQU1IoJWE2KQorCisJYW5kaS53CQkmMHgxMCwlZDEJCSMga2VlcCBzaWduIGJpdCBpbiA0dGggc3BvdAorCisJbHNyLmIJCSYweDQsJWQwCQkjIHNoaWZ0IHJuZCBwcmVjLG1vZGUgdG8gbG8gYml0cworCWFuZGkuYgkJJjB4ZiwlZDAJCSMgc3RyaXAgaGkgcm5kIG1vZGUgYml0CisJb3IuYgkJJWQxLCVkMAkJCSMgY29uY2F0IHtzZ24sbW9kZSxwcmVjfQorCisJbW92LmwJCSVkMCwlZDEJCQkjIG1ha2UgYSBjb3B5CisJbHNsLmIJCSYweDEsJWQxCQkjIG11bHQgaW5kZXggMiBieSAyCisKKwltb3YuYgkJKHRibF91bmZfY2MuYiwlcGMsJWQwLncqMSksRlBTUl9DQyglYTYpICMgaW5zZXJ0IGNjb2RlIGJpdHMKKwlsZWEJCSh0YmxfdW5mX3Jlc3VsdC5iLCVwYywlZDEudyo4KSwlYTAgIyBncmFiIHJlc3VsdCBwdHIKKwlydHMKKwordGJsX3VuZl9jYzoKKwlieXRlCQkweDQsIDB4NCwgMHg0LCAweDAKKwlieXRlCQkweDQsIDB4NCwgMHg0LCAweDAKKwlieXRlCQkweDQsIDB4NCwgMHg0LCAweDAKKwlieXRlCQkweDAsIDB4MCwgMHgwLCAweDAKKwlieXRlCQkweDgrMHg0LCAweDgrMHg0LCAweDgsIDB4OCsweDQKKwlieXRlCQkweDgrMHg0LCAweDgrMHg0LCAweDgsIDB4OCsweDQKKwlieXRlCQkweDgrMHg0LCAweDgrMHg0LCAweDgsIDB4OCsweDQKKwordGJsX3VuZl9yZXN1bHQ6CisJbG9uZwkJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwICMgWkVSTztleHQKKwlsb25nCQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAgIyBaRVJPO2V4dAorCWxvbmcJCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MCAjIFpFUk87ZXh0CisJbG9uZwkJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwICMgTUlOOyBleHQKKworCWxvbmcJCTB4M2Y4MTAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MCAjIFpFUk87c2dsCisJbG9uZwkJMHgzZjgxMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwICMgWkVSTztzZ2wKKwlsb25nCQkweDNmODEwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAgIyBaRVJPO3NnbAorCWxvbmcJCTB4M2Y4MTAwMDAsIDB4MDAwMDAxMDAsIDB4MDAwMDAwMDAsIDB4MCAjIE1JTjsgc2dsCisKKwlsb25nCQkweDNjMDEwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAgIyBaRVJPO2RibAorCWxvbmcJCTB4M2MwMTAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MCAjIFpFUjA7ZGJsCisJbG9uZwkJMHgzYzAxMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwICMgWkVSTztkYmwKKwlsb25nCQkweDNjMDEwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwODAwLCAweDAgIyBNSU47IGRibAorCisJbG9uZwkJMHgwLDB4MCwweDAsMHgwCisJbG9uZwkJMHgwLDB4MCwweDAsMHgwCisJbG9uZwkJMHgwLDB4MCwweDAsMHgwCisJbG9uZwkJMHgwLDB4MCwweDAsMHgwCisKKwlsb25nCQkweDgwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAgIyBaRVJPO2V4dAorCWxvbmcJCTB4ODAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MCAjIFpFUk87ZXh0CisJbG9uZwkJMHg4MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwICMgTUlOOyBleHQKKwlsb25nCQkweDgwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAgIyBaRVJPO2V4dAorCisJbG9uZwkJMHhiZjgxMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwICMgWkVSTztzZ2wKKwlsb25nCQkweGJmODEwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAgIyBaRVJPO3NnbAorCWxvbmcJCTB4YmY4MTAwMDAsIDB4MDAwMDAxMDAsIDB4MDAwMDAwMDAsIDB4MCAjIE1JTjsgc2dsCisJbG9uZwkJMHhiZjgxMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwICMgWkVSTztzZ2wKKworCWxvbmcJCTB4YmMwMTAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MCAjIFpFUk87ZGJsCisJbG9uZwkJMHhiYzAxMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwICMgWkVSTztkYmwKKwlsb25nCQkweGJjMDEwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwODAwLCAweDAgIyBNSU47IGRibAorCWxvbmcJCTB4YmMwMTAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MCAjIFpFUk87ZGJsCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNyY196ZXJvKCk6IFJldHVybiBzaWduZWQgemVybyBhY2NvcmRpbmcgdG8gc2lnbiBvZiBzcmMgb3BlcmFuZC4JIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJc3JjX3plcm8KK3NyY196ZXJvOgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBnZXQgc2lnbiBvZiBzcmMgb3BlcmFuZAorCWJtaS5iCQlsZF9temVybwkJIyBpZiBuZWcsIGxvYWQgbmVnIHplcm8KKworIworIyBsZF9wemVybygpOiByZXR1cm4gYSBwb3NpdGl2ZSB6ZXJvLgorIworCWdsb2JhbAkJbGRfcHplcm8KK2xkX3B6ZXJvOgorCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIGxvYWQgKzAKKwltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdaJyBjY29kZSBiaXQKKwlydHMKKworIyBsZF9temVybygpOiByZXR1cm4gYSBuZWdhdGl2ZSB6ZXJvLgorCWdsb2JhbAkJbGRfbXplcm8KK2xkX216ZXJvOgorCWZtb3YucwkJJjB4ODAwMDAwMDAsJWZwMAkjIGxvYWQgLTAKKwltb3YuYgkJJm5lZ19ibWFzayt6X2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCAnTicsJ1onIGNjb2RlIGJpdHMKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBkc3RfemVybygpOiBSZXR1cm4gc2lnbmVkIHplcm8gYWNjb3JkaW5nIHRvIHNpZ24gb2YgZHN0IG9wZXJhbmQuCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCWRzdF96ZXJvCitkc3RfemVybzoKKwl0c3QuYgkJRFNUX0VYKCVhMSkJCSMgZ2V0IHNpZ24gb2YgZHN0IG9wZXJhbmQKKwlibWkuYgkJbGRfbXplcm8JCSMgaWYgbmVnLCBsb2FkIG5lZyB6ZXJvCisJYnJhLmIJCWxkX3B6ZXJvCQkjIGxvYWQgcG9zaXRpdmUgemVybworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNyY19pbmYoKTogUmV0dXJuIHNpZ25lZCBpbmYgYWNjb3JkaW5nIHRvIHNpZ24gb2Ygc3JjIG9wZXJhbmQuCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCXNyY19pbmYKK3NyY19pbmY6CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGdldCBzaWduIG9mIHNyYyBvcGVyYW5kCisJYm1pLmIJCWxkX21pbmYJCQkjIGlmIG5lZ2F0aXZlIGJyYW5jaAorCisjCisjIGxkX3BpbmYoKTogcmV0dXJuIGEgcG9zaXRpdmUgaW5maW5pdHkuCisjCisJZ2xvYmFsCQlsZF9waW5mCitsZF9waW5mOgorCWZtb3YucwkJJjB4N2Y4MDAwMDAsJWZwMAkjIGxvYWQgK0lORgorCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnSU5GJyBjY29kZSBiaXQKKwlydHMKKworIworIyBsZF9taW5mKCk6cmV0dXJuIGEgbmVnYXRpdmUgaW5maW5pdHkuCisjCisJZ2xvYmFsCQlsZF9taW5mCitsZF9taW5mOgorCWZtb3YucwkJJjB4ZmY4MDAwMDAsJWZwMAkjIGxvYWQgLUlORgorCW1vdi5iCQkmbmVnX2JtYXNrK2luZl9ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgJ04nLCdJJyBjY29kZSBiaXRzCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZHN0X2luZigpOiBSZXR1cm4gc2lnbmVkIGluZiBhY2NvcmRpbmcgdG8gc2lnbiBvZiBkc3Qgb3BlcmFuZC4JIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJZHN0X2luZgorZHN0X2luZjoKKwl0c3QuYgkJRFNUX0VYKCVhMSkJCSMgZ2V0IHNpZ24gb2YgZHN0IG9wZXJhbmQKKwlibWkuYgkJbGRfbWluZgkJCSMgaWYgbmVnYXRpdmUgYnJhbmNoCisJYnJhLmIJCWxkX3BpbmYKKworCWdsb2JhbAkJc3pyX2luZgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc3pyX2luZigpOiBSZXR1cm4gK1pFUk8gZm9yIGEgbmVnYXRpdmUgc3JjIG9wZXJhbmQgb3IJCSMKKyMJICAgICAgICAgICAgK0lORiBmb3IgYSBwb3NpdGl2ZSBzcmMgb3BlcmFuZC4JCSMKKyMJICAgICBSb3V0aW5lIHVzZWQgZm9yIGZldG94LCBmdHdvdG94LCBhbmQgZnRlbnRveC4JIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3N6cl9pbmY6CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGNoZWNrIHNpZ24gb2Ygc291cmNlCisJYm1pLmIJCWxkX3B6ZXJvCisJYnJhLmIJCWxkX3BpbmYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzb3ByX2luZigpOiBSZXR1cm4gK0lORiBmb3IgYSBwb3NpdGl2ZSBzcmMgb3BlcmFuZCBvcgkJCSMKKyMJICAgICAganVtcCB0byBvcGVyYW5kIGVycm9yIHJvdXRpbmUgZm9yIGEgbmVnYXRpdmUgc3JjIG9wZXJhbmQuCSMKKyMJICAgICAgUm91dGluZSB1c2VkIGZvciBmbG9nbiwgZmxvZ25wMSwgZmxvZzEwLCBhbmQgZmxvZzIuCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCXNvcHJfaW5mCitzb3ByX2luZjoKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgY2hlY2sgc2lnbiBvZiBzb3VyY2UKKwlibWkudwkJdF9vcGVycgorCWJyYS5iCQlsZF9waW5mCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNldG94bTFpKCk6IFJldHVybiBtaW51cyBvbmUgZm9yIGEgbmVnYXRpdmUgc3JjIG9wZXJhbmQgb3IJIworIwkgICAgICBwb3NpdGl2ZSBpbmZpbml0eSBmb3IgYSBwb3NpdGl2ZSBzcmMgb3BlcmFuZC4JIworIwkgICAgICBSb3V0aW5lIHVzZWQgZm9yIGZldG94bTEuCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlzZXRveG0xaQorc2V0b3htMWk6CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGNoZWNrIHNpZ24gb2Ygc291cmNlCisJYm1pLmIJCWxkX21vbmUKKwlicmEuYgkJbGRfcGluZgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHNyY19vbmUoKTogUmV0dXJuIHNpZ25lZCBvbmUgYWNjb3JkaW5nIHRvIHNpZ24gb2Ygc3JjIG9wZXJhbmQuCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCXNyY19vbmUKK3NyY19vbmU6CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGNoZWNrIHNpZ24gb2Ygc291cmNlCisJYm1pLmIJCWxkX21vbmUKKworIworIyBsZF9wb25lKCk6IHJldHVybiBwb3NpdGl2ZSBvbmUuCisjCisJZ2xvYmFsCQlsZF9wb25lCitsZF9wb25lOgorCWZtb3YucwkJJjB4M2Y4MDAwMDAsJWZwMAkjIGxvYWQgKzEKKwljbHIuYgkJRlBTUl9DQyglYTYpCisJcnRzCisKKyMKKyMgbGRfbW9uZSgpOiByZXR1cm4gbmVnYXRpdmUgb25lLgorIworCWdsb2JhbAkJbGRfbW9uZQorbGRfbW9uZToKKwlmbW92LnMJCSYweGJmODAwMDAwLCVmcDAJIyBsb2FkIC0xCisJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKKwlydHMKKworcHBpYnkyOglsb25nCQkweDNmZmYwMDAwLCAweGM5MGZkYWEyLCAweDIxNjhjMjM1CittcGlieTI6CWxvbmcJCTB4YmZmZjAwMDAsIDB4YzkwZmRhYTIsIDB4MjE2OGMyMzUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc3BpXzIoKTogUmV0dXJuIHNpZ25lZCBQSS8yIGFjY29yZGluZyB0byBzaWduIG9mIHNyYyBvcGVyYW5kLgkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJc3BpXzIKK3NwaV8yOgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBjaGVjayBzaWduIG9mIHNvdXJjZQorCWJtaS5iCQlsZF9tcGkyCisKKyMKKyMgbGRfcHBpMigpOiByZXR1cm4gcG9zaXRpdmUgUEkvMi4KKyMKKwlnbG9iYWwJCWxkX3BwaTIKK2xkX3BwaTI6CisJZm1vdi5sCQklZDAsJWZwY3IKKwlmbW92LngJCXBwaWJ5MiglcGMpLCVmcDAJIyBsb2FkICtwaS8yCisJYnJhLncJCXRfcGlueDIJCQkjIHNldCBJTkVYMgorCisjCisjIGxkX21waTIoKTogcmV0dXJuIG5lZ2F0aXZlIFBJLzIuCisjCisJZ2xvYmFsCQlsZF9tcGkyCitsZF9tcGkyOgorCWZtb3YubAkJJWQwLCVmcGNyCisJZm1vdi54CQltcGlieTIoJXBjKSwlZnAwCSMgbG9hZCAtcGkvMgorCWJyYS53CQl0X21pbngyCQkJIyBzZXQgSU5FWDIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIGdpdmUgc3VwcG9ydCBmb3IgZnNpbmNvcy4gIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIHNzaW5jb3N6KCk6IFdoZW4gdGhlIHNyYyBvcGVyYW5kIGlzIFpFUk8sIHN0b3JlIGEgb25lIGluIHRoZQorIwkgICAgICBjb3NpbmUgcmVnaXN0ZXIgYW5kIHJldHVybiBhIFpFUk8gaW4gZnAwIHcvIHRoZSBzYW1lIHNpZ24KKyMJICAgICAgYXMgdGhlIHNyYyBvcGVyYW5kLgorIworCWdsb2JhbAkJc3NpbmNvc3oKK3NzaW5jb3N6OgorCWZtb3YucwkJJjB4M2Y4MDAwMDAsJWZwMQorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyB0ZXN0IHNpZ24KKwlicGwuYgkJc2luY29zenAKKwlmbW92LnMJCSYweDgwMDAwMDAwLCVmcDAJIyByZXR1cm4gc2luIHJlc3VsdCBpbiBmcDAKKwltb3YuYgkJJnpfYm1hc2srbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQorCWJyYS5iCQlzdG9fY29zCQkJIyBzdG9yZSBjb3NpbmUgcmVzdWx0CitzaW5jb3N6cDoKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyByZXR1cm4gc2luIHJlc3VsdCBpbiBmcDAKKwltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCisJYnJhLmIJCXN0b19jb3MJCQkjIHN0b3JlIGNvc2luZSByZXN1bHQKKworIworIyBzc2luY29zaSgpOiBXaGVuIHRoZSBzcmMgb3BlcmFuZCBpcyBJTkYsIHN0b3JlIGEgUU5BTiBpbiB0aGUgY29zaW5lCisjCSAgICAgIHJlZ2lzdGVyIGFuZCBqdW1wIHRvIHRoZSBvcGVyYW5kIGVycm9yIHJvdXRpbmUgZm9yIG5lZ2F0aXZlCisjCSAgICAgIHNyYyBvcGVyYW5kcy4KKyMKKwlnbG9iYWwJCXNzaW5jb3NpCitzc2luY29zaToKKwlmbW92LngJCXFuYW4oJXBjKSwlZnAxCQkjIGxvYWQgTkFOCisJYnNyLmwJCXN0b19jb3MJCQkjIHN0b3JlIGNvc2luZSByZXN1bHQKKwlicmEudwkJdF9vcGVycgorCisjCisjIHNzaW5jb3NxbmFuKCk6IFdoZW4gdGhlIHNyYyBvcGVyYW5kIGlzIGEgUU5BTiwgc3RvcmUgdGhlIFFOQU4gaW4gdGhlIGNvc2luZQorIwkJIHJlZ2lzdGVyIGFuZCBicmFuY2ggdG8gdGhlIHNyYyBRTkFOIHJvdXRpbmUuCisjCisJZ2xvYmFsCQlzc2luY29zcW5hbgorc3NpbmNvc3FuYW46CisJZm1vdi54CQlMT0NBTF9FWCglYTApLCVmcDEKKwlic3IubAkJc3RvX2NvcworCWJyYS53CQlzcmNfcW5hbgorCisjCisjIHNzaW5jb3NzbmFuKCk6IFdoZW4gdGhlIHNyYyBvcGVyYW5kIGlzIGFuIFNOQU4sIHN0b3JlIHRoZSBTTkFOIHcvIHRoZSBTTkFOIGJpdCBzZXQKKyMJCSBpbiB0aGUgY29zaW5lIHJlZ2lzdGVyIGFuZCBicmFuY2ggdG8gdGhlIHNyYyBTTkFOIHJvdXRpbmUuCisjCisJZ2xvYmFsCQlzc2luY29zc25hbgorc3NpbmNvc3NuYW46CisJZm1vdi54CQlMT0NBTF9FWCglYTApLCVmcDEKKwlic3IubAkJc3RvX2NvcworCWJyYS53CQlzcmNfc25hbgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBzdG9fY29zKCk6IHN0b3JlIGZwMSB0byB0aGUgZnByZWcgZGVzaWduYXRlZCBieSB0aGUgQ01EUkVHIGRzdCBmaWVsZC4JIworIwkgICAgIGZwMSBob2xkcyB0aGUgcmVzdWx0IG9mIHRoZSBjb3NpbmUgcG9ydGlvbiBvZiBzc2luY29zKCkuCSMKKyMJICAgICB0aGUgdmFsdWUgaW4gZnAxIHdpbGwgbm90IHRha2UgYW55IGV4Y2VwdGlvbnMgd2hlbiBtb3ZlZC4JIworIyBJTlBVVDoJCQkJCQkJCSMKKyMJZnAxIDogZnAgdmFsdWUgdG8gc3RvcmUJCQkJCQkjCisjIE1PRElGSUVEOgkJCQkJCQkJIworIwlkMAkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJc3RvX2Nvcworc3RvX2NvczoKKwltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQwCisJYW5kaS53CQkmMHg3LCVkMAorCW1vdi53CQkodGJsX3N0b19jb3MuYiwlcGMsJWQwLncqMiksJWQwCisJam1wCQkodGJsX3N0b19jb3MuYiwlcGMsJWQwLncqMSkKKwordGJsX3N0b19jb3M6CisJc2hvcnQJCXN0b19jb3NfMCAtIHRibF9zdG9fY29zCisJc2hvcnQJCXN0b19jb3NfMSAtIHRibF9zdG9fY29zCisJc2hvcnQJCXN0b19jb3NfMiAtIHRibF9zdG9fY29zCisJc2hvcnQJCXN0b19jb3NfMyAtIHRibF9zdG9fY29zCisJc2hvcnQJCXN0b19jb3NfNCAtIHRibF9zdG9fY29zCisJc2hvcnQJCXN0b19jb3NfNSAtIHRibF9zdG9fY29zCisJc2hvcnQJCXN0b19jb3NfNiAtIHRibF9zdG9fY29zCisJc2hvcnQJCXN0b19jb3NfNyAtIHRibF9zdG9fY29zCisKK3N0b19jb3NfMDoKKwlmbW92bS54CQkmMHg0MCxFWENfRlAwKCVhNikKKwlydHMKK3N0b19jb3NfMToKKwlmbW92bS54CQkmMHg0MCxFWENfRlAxKCVhNikKKwlydHMKK3N0b19jb3NfMjoKKwlmbW92LngJCSVmcDEsJWZwMgorCXJ0cworc3RvX2Nvc18zOgorCWZtb3YueAkJJWZwMSwlZnAzCisJcnRzCitzdG9fY29zXzQ6CisJZm1vdi54CQklZnAxLCVmcDQKKwlydHMKK3N0b19jb3NfNToKKwlmbW92LngJCSVmcDEsJWZwNQorCXJ0cworc3RvX2Nvc182OgorCWZtb3YueAkJJWZwMSwlZnA2CisJcnRzCitzdG9fY29zXzc6CisJZm1vdi54CQklZnAxLCVmcDcKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlzbW9kX3NkbnJtCisJZ2xvYmFsCQlzbW9kX3Nub3JtCitzbW9kX3NkbnJtOgorc21vZF9zbm9ybToKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWJlcS5sCQlzbW9kCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEudwkJc21vZF96cm8KKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXNtb2QKKwljbXBpLmIJCSVkMSwmU05BTgorCWJlcS5sCQlkc3Rfc25hbgorCWJyYS5sCQlkc3RfcW5hbgorCisJZ2xvYmFsCQlzbW9kX3N6ZXJvCitzbW9kX3N6ZXJvOgorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQl0X29wZXJyCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQl0X29wZXJyCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQl0X29wZXJyCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEubAkJZHN0X3FuYW4KKwlicmEubAkJZHN0X3NuYW4KKworCWdsb2JhbAkJc21vZF9zaW5mCitzbW9kX3NpbmY6CisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwliZXEubAkJc21vZF9mcG4KKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQlzbW9kX3pybworCWNtcGkuYgkJJWQxLCZJTkYKKwliZXEubAkJdF9vcGVycgorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJc21vZF9mcG4KKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5sCQlkc3RfcW5hbgorCWJyYS5sCQlkc3Rfc25hbgorCitzbW9kX3pybzoKK3NyZW1fenJvOgorCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDEJCSMgZ2V0IHNyYyBzaWduCisJbW92LmIJCURTVF9FWCglYTEpLCVkMAkJIyBnZXQgZHN0IHNpZ24KKwllb3IuYgkJJWQwLCVkMQkJCSMgZ2V0IHFieXRlIHNpZ24KKwlhbmRpLmIJCSYweDgwLCVkMQorCW1vdi5iCQklZDEsRlBTUl9RQllURSglYTYpCisJdHN0LmIJCSVkMAorCWJwbC53CQlsZF9wemVybworCWJyYS53CQlsZF9temVybworCitzbW9kX2ZwbjoKK3NyZW1fZnBuOgorCWNsci5iCQlGUFNSX1FCWVRFKCVhNikKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDEJCSMgZ2V0IHNyYyBzaWduCisJbW92LmIJCURTVF9FWCglYTEpLCVkMAkJIyBnZXQgZHN0IHNpZ24KKwllb3IuYgkJJWQwLCVkMQkJCSMgZ2V0IHFieXRlIHNpZ24KKwlhbmRpLmIJCSYweDgwLCVkMQorCW1vdi5iCQklZDEsRlBTUl9RQllURSglYTYpCisJY21waS5iCQlEVEFHKCVhNiksJkRFTk9STQorCWJuZS5iCQlzbW9kX25ybQorCWxlYQkJRFNUKCVhMSksJWEwCisJbW92LmwJCSglc3ApKywlZDAKKwlicmEJCXRfcmVzZG5ybQorc21vZF9ucm06CisJZm1vdi5sCQkoJXNwKSssJWZwY3IKKwlmbW92LngJCURTVCglYTEpLCVmcDAKKwl0c3QuYgkJRFNUX0VYKCVhMSkKKwlibWkuYgkJc21vZF9ucm1fbmVnCisJcnRzCisKK3Ntb2RfbnJtX25lZzoKKwltb3YuYgkJJm5lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ04nIGNjb2RlCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCXNyZW1fc25vcm0KKwlnbG9iYWwJCXNyZW1fc2Rucm0KK3NyZW1fc2Rucm06CitzcmVtX3Nub3JtOgorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJYmVxLmwJCXNyZW0KKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS53CQlzcmVtX3pybworCWNtcGkuYgkJJWQxLCZJTkYKKwliZXEubAkJdF9vcGVycgorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJc3JlbQorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCWRzdF9xbmFuCisJYnJhLmwJCWRzdF9zbmFuCisKKwlnbG9iYWwJCXNyZW1fc3plcm8KK3NyZW1fc3plcm86CisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwliZXEubAkJdF9vcGVycgorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5sCQlkc3RfcW5hbgorCWJyYS5sCQlkc3Rfc25hbgorCisJZ2xvYmFsCQlzcmVtX3NpbmYKK3NyZW1fc2luZjoKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWJlcS53CQlzcmVtX2ZwbgorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLncJCXNyZW1fenJvCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQl0X29wZXJyCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzcmVtX2ZwbgorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCWRzdF9xbmFuCisJYnJhLmwJCWRzdF9zbmFuCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCXNzY2FsZV9zbm9ybQorCWdsb2JhbAkJc3NjYWxlX3NkbnJtCitzc2NhbGVfc25vcm06Citzc2NhbGVfc2Rucm06CisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwliZXEubAkJc3NjYWxlCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEubAkJZHN0X3plcm8KKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCWRzdF9pbmYKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXNzY2FsZQorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCWRzdF9xbmFuCisJYnJhLmwJCWRzdF9zbmFuCisKKwlnbG9iYWwJCXNzY2FsZV9zemVybworc3NjYWxlX3N6ZXJvOgorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJYmVxLmwJCXNzY2FsZQorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCWRzdF96ZXJvCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQlkc3RfaW5mCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzc2NhbGUKKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5sCQlkc3RfcW5hbgorCWJyYS5sCQlkc3Rfc25hbgorCisJZ2xvYmFsCQlzc2NhbGVfc2luZgorc3NjYWxlX3NpbmY6CisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwliZXEubAkJdF9vcGVycgorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCWRzdF9xbmFuCisJY21waS5iCQklZDEsJlNOQU4KKwliZXEubAkJZHN0X3NuYW4KKwlicmEubAkJdF9vcGVycgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBzb3Bfc3FuYW4oKTogVGhlIHNyYyBvcCBmb3IgZnJlbS9mbW9kL2ZzY2FsZSB3YXMgYSBRTkFOLgorIworCWdsb2JhbAkJc29wX3NxbmFuCitzb3Bfc3FuYW46CisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5iCQlkc3RfcW5hbgorCWNtcGkuYgkJJWQxLCZTTkFOCisJYmVxLmIJCWRzdF9zbmFuCisJYnJhLmIJCXNyY19xbmFuCisKKyMKKyMgc29wX3NzbmFuKCk6IFRoZSBzcmMgb3AgZm9yIGZyZW0vZm1vZC9mc2NhbGUgd2FzIGFuIFNOQU4uCisjCisJZ2xvYmFsCQlzb3Bfc3NuYW4KK3NvcF9zc25hbjoKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmIJCWRzdF9xbmFuX3NyY19zbmFuCisJY21waS5iCQklZDEsJlNOQU4KKwliZXEuYgkJZHN0X3NuYW4KKwlicmEuYgkJc3JjX3NuYW4KKworZHN0X3FuYW5fc3JjX3NuYW46CisJb3JpLmwJCSZzbmFuaW9wX21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgTkFOL1NOQU4vQUlPUAorCWJyYS5iCQlkc3RfcW5hbgorCisjCisjIGRzdF9xbmFuKCk6IFJldHVybiB0aGUgZHN0IFNOQU4gdy8gdGhlIFNOQU4gYml0IHNldC4KKyMKKwlnbG9iYWwJCWRzdF9zbmFuCitkc3Rfc25hbjoKKwlmbW92LngJCURTVCglYTEpLCVmcDAJCSMgdGhlIGZtb3ZlIHNldHMgdGhlIFNOQU4gYml0CisJZm1vdi5sCQklZnBzciwlZDAJCSMgY2F0Y2ggcmVzdWx0aW5nIHN0YXR1cworCW9yLmwJCSVkMCxVU0VSX0ZQU1IoJWE2KQkjIHN0b3JlIHN0YXR1cworCXJ0cworCisjCisjIGRzdF9xbmFuKCk6IFJldHVybiB0aGUgZHN0IFFOQU4uCisjCisJZ2xvYmFsCQlkc3RfcW5hbgorZHN0X3FuYW46CisJZm1vdi54CQlEU1QoJWExKSwlZnAwCQkjIHJldHVybiB0aGUgbm9uLXNpZ25hbGxpbmcgbmFuCisJdHN0LmIJCURTVF9FWCglYTEpCQkjIHNldCBjY29kZXMgYWNjb3JkaW5nIHRvIFFOQU4gc2lnbgorCWJtaS5iCQlkc3RfcW5hbl9tCitkc3RfcW5hbl9wOgorCW1vdi5iCQkmbmFuX2JtYXNrLEZQU1JfQ0MoJWE2KQorCXJ0cworZHN0X3FuYW5fbToKKwltb3YuYgkJJm5lZ19ibWFzaytuYW5fYm1hc2ssRlBTUl9DQyglYTYpCisJcnRzCisKKyMKKyMgc3JjX3NuYW4oKTogUmV0dXJuIHRoZSBzcmMgU05BTiB3LyB0aGUgU05BTiBiaXQgc2V0LgorIworCWdsb2JhbAkJc3JjX3NuYW4KK3NyY19zbmFuOgorCWZtb3YueAkJU1JDKCVhMCksJWZwMAkJIyB0aGUgZm1vdmUgc2V0cyB0aGUgU05BTiBiaXQKKwlmbW92LmwJCSVmcHNyLCVkMAkJIyBjYXRjaCByZXN1bHRpbmcgc3RhdHVzCisJb3IubAkJJWQwLFVTRVJfRlBTUiglYTYpCSMgc3RvcmUgc3RhdHVzCisJcnRzCisKKyMKKyMgc3JjX3FuYW4oKTogUmV0dXJuIHRoZSBzcmMgUU5BTi4KKyMKKwlnbG9iYWwJCXNyY19xbmFuCitzcmNfcW5hbjoKKwlmbW92LngJCVNSQyglYTApLCVmcDAJCSMgcmV0dXJuIHRoZSBub24tc2lnbmFsbGluZyBuYW4KKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgc2V0IGNjb2RlcyBhY2NvcmRpbmcgdG8gUU5BTiBzaWduCisJYm1pLmIJCWRzdF9xbmFuX20KK3NyY19xbmFuX3A6CisJbW92LmIJCSZuYW5fYm1hc2ssRlBTUl9DQyglYTYpCisJcnRzCitzcmNfcW5hbl9tOgorCW1vdi5iCQkmbmVnX2JtYXNrK25hbl9ibWFzayxGUFNSX0NDKCVhNikKKwlydHMKKworIworIyBma2VybjIuczoKKyMJVGhlc2UgZW50cnkgcG9pbnRzIGFyZSB1c2VkIGJ5IHRoZSBleGNlcHRpb24gaGFuZGxlcgorIyByb3V0aW5lcyB3aGVyZSBhbiBpbnN0cnVjdGlvbiBpcyBzZWxlY3RlZCBieSBhbiBpbmRleCBpbnRvCisjIGEgbGFyZ2UganVtcCB0YWJsZSBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gaW5zdHJ1Y3Rpb24gd2hpY2gKKyMgaGFzIGJlZW4gZGVjb2RlZC4gRmxvdyBjb250aW51ZXMgaGVyZSB3aGVyZSB3ZSBub3cgZGVjb2RlCisjIGZ1cnRoZXIgYWNjb2RpbmcgdG8gdGhlIHNvdXJjZSBvcGVyYW5kIHR5cGUuCisjCisKKwlnbG9iYWwJCWZzaW5oCitmc2luaDoKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJlcS5sCQlzc2luaAorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCXNyY196ZXJvCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQlzcmNfaW5mCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzc2luaGQKKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5sCQlzcmNfcW5hbgorCWJyYS5sCQlzcmNfc25hbgorCisJZ2xvYmFsCQlmbG9nbnAxCitmbG9nbnAxOgorCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYmVxLmwJCXNsb2ducDEKKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQlzcmNfemVybworCWNtcGkuYgkJJWQxLCZJTkYKKwliZXEubAkJc29wcl9pbmYKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXNsb2ducDFkCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEubAkJc3JjX3FuYW4KKwlicmEubAkJc3JjX3NuYW4KKworCWdsb2JhbAkJZmV0b3htMQorZmV0b3htMToKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJlcS5sCQlzZXRveG0xCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEubAkJc3JjX3plcm8KKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXNldG94bTFpCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzZXRveG0xZAorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCXNyY19xbmFuCisJYnJhLmwJCXNyY19zbmFuCisKKwlnbG9iYWwJCWZ0YW5oCitmdGFuaDoKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJlcS5sCQlzdGFuaAorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCXNyY196ZXJvCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQlzcmNfb25lCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzdGFuaGQKKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5sCQlzcmNfcW5hbgorCWJyYS5sCQlzcmNfc25hbgorCisJZ2xvYmFsCQlmYXRhbgorZmF0YW46CisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwliZXEubAkJc2F0YW4KKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQlzcmNfemVybworCWNtcGkuYgkJJWQxLCZJTkYKKwliZXEubAkJc3BpXzIKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXNhdGFuZAorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCXNyY19xbmFuCisJYnJhLmwJCXNyY19zbmFuCisKKwlnbG9iYWwJCWZhc2luCitmYXNpbjoKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJlcS5sCQlzYXNpbgorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCXNyY196ZXJvCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQl0X29wZXJyCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzYXNpbmQKKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5sCQlzcmNfcW5hbgorCWJyYS5sCQlzcmNfc25hbgorCisJZ2xvYmFsCQlmYXRhbmgKK2ZhdGFuaDoKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJlcS5sCQlzYXRhbmgKKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQlzcmNfemVybworCWNtcGkuYgkJJWQxLCZJTkYKKwliZXEubAkJdF9vcGVycgorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJc2F0YW5oZAorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCXNyY19xbmFuCisJYnJhLmwJCXNyY19zbmFuCisKKwlnbG9iYWwJCWZzaW5lCitmc2luZToKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJlcS5sCQlzc2luCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEubAkJc3JjX3plcm8KKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXNzaW5kCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEubAkJc3JjX3FuYW4KKwlicmEubAkJc3JjX3NuYW4KKworCWdsb2JhbAkJZnRhbgorZnRhbjoKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJlcS5sCQlzdGFuCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEubAkJc3JjX3plcm8KKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXRfb3BlcnIKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXN0YW5kCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEubAkJc3JjX3FuYW4KKwlicmEubAkJc3JjX3NuYW4KKworCWdsb2JhbAkJZmV0b3gKK2ZldG94OgorCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYmVxLmwJCXNldG94CisJY21waS5iCQklZDEsJlpFUk8KKwliZXEubAkJbGRfcG9uZQorCWNtcGkuYgkJJWQxLCZJTkYKKwliZXEubAkJc3pyX2luZgorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJc2V0b3hkCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEubAkJc3JjX3FuYW4KKwlicmEubAkJc3JjX3NuYW4KKworCWdsb2JhbAkJZnR3b3RveAorZnR3b3RveDoKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJlcS5sCQlzdHdvdG94CisJY21waS5iCQklZDEsJlpFUk8KKwliZXEubAkJbGRfcG9uZQorCWNtcGkuYgkJJWQxLCZJTkYKKwliZXEubAkJc3pyX2luZgorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJc3R3b3RveGQKKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5sCQlzcmNfcW5hbgorCWJyYS5sCQlzcmNfc25hbgorCisJZ2xvYmFsCQlmdGVudG94CitmdGVudG94OgorCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYmVxLmwJCXN0ZW50b3gKKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQlsZF9wb25lCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQlzenJfaW5mCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzdGVudG94ZAorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCXNyY19xbmFuCisJYnJhLmwJCXNyY19zbmFuCisKKwlnbG9iYWwJCWZsb2duCitmbG9nbjoKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJlcS5sCQlzbG9nbgorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCXRfZHoyCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQlzb3ByX2luZgorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJc2xvZ25kCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEubAkJc3JjX3FuYW4KKwlicmEubAkJc3JjX3NuYW4KKworCWdsb2JhbAkJZmxvZzEwCitmbG9nMTA6CisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwliZXEubAkJc2xvZzEwCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEubAkJdF9kejIKKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXNvcHJfaW5mCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzbG9nMTBkCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEubAkJc3JjX3FuYW4KKwlicmEubAkJc3JjX3NuYW4KKworCWdsb2JhbAkJZmxvZzIKK2Zsb2cyOgorCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYmVxLmwJCXNsb2cyCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEubAkJdF9kejIKKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXNvcHJfaW5mCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzbG9nMmQKKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5sCQlzcmNfcW5hbgorCWJyYS5sCQlzcmNfc25hbgorCisJZ2xvYmFsCQlmY29zaAorZmNvc2g6CisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwliZXEubAkJc2Nvc2gKKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQlsZF9wb25lCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQlsZF9waW5mCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzY29zaGQKKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5sCQlzcmNfcW5hbgorCWJyYS5sCQlzcmNfc25hbgorCisJZ2xvYmFsCQlmYWNvcworZmFjb3M6CisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwliZXEubAkJc2Fjb3MKKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQlsZF9wcGkyCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQl0X29wZXJyCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzYWNvc2QKKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5sCQlzcmNfcW5hbgorCWJyYS5sCQlzcmNfc25hbgorCisJZ2xvYmFsCQlmY29zCitmY29zOgorCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYmVxLmwJCXNjb3MKKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQlsZF9wb25lCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQl0X29wZXJyCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzY29zZAorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCXNyY19xbmFuCisJYnJhLmwJCXNyY19zbmFuCisKKwlnbG9iYWwJCWZnZXRleHAKK2ZnZXRleHA6CisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwliZXEubAkJc2dldGV4cAorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCXNyY196ZXJvCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQl0X29wZXJyCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzZ2V0ZXhwZAorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCXNyY19xbmFuCisJYnJhLmwJCXNyY19zbmFuCisKKwlnbG9iYWwJCWZnZXRtYW4KK2ZnZXRtYW46CisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwliZXEubAkJc2dldG1hbgorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCXNyY196ZXJvCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQl0X29wZXJyCisJY21waS5iCQklZDEsJkRFTk9STQorCWJlcS5sCQlzZ2V0bWFuZAorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCXNyY19xbmFuCisJYnJhLmwJCXNyY19zbmFuCisKKwlnbG9iYWwJCWZzaW5jb3MKK2ZzaW5jb3M6CisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwliZXEubAkJc3NpbmNvcworCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCXNzaW5jb3N6CisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQlzc2luY29zaQorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJc3NpbmNvc2QKKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5sCQlzc2luY29zcW5hbgorCWJyYS5sCQlzc2luY29zc25hbgorCisJZ2xvYmFsCQlmbW9kCitmbW9kOgorCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYmVxLmwJCXNtb2Rfc25vcm0KKwljbXBpLmIJCSVkMSwmWkVSTworCWJlcS5sCQlzbW9kX3N6ZXJvCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQlzbW9kX3NpbmYKKwljbXBpLmIJCSVkMSwmREVOT1JNCisJYmVxLmwJCXNtb2Rfc2Rucm0KKwljbXBpLmIJCSVkMSwmUU5BTgorCWJlcS5sCQlzb3Bfc3FuYW4KKwlicmEubAkJc29wX3NzbmFuCisKKwlnbG9iYWwJCWZyZW0KK2ZyZW06CisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwliZXEubAkJc3JlbV9zbm9ybQorCWNtcGkuYgkJJWQxLCZaRVJPCisJYmVxLmwJCXNyZW1fc3plcm8KKwljbXBpLmIJCSVkMSwmSU5GCisJYmVxLmwJCXNyZW1fc2luZgorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJc3JlbV9zZG5ybQorCWNtcGkuYgkJJWQxLCZRTkFOCisJYmVxLmwJCXNvcF9zcW5hbgorCWJyYS5sCQlzb3Bfc3NuYW4KKworCWdsb2JhbAkJZnNjYWxlCitmc2NhbGU6CisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwliZXEubAkJc3NjYWxlX3Nub3JtCisJY21waS5iCQklZDEsJlpFUk8KKwliZXEubAkJc3NjYWxlX3N6ZXJvCisJY21waS5iCQklZDEsJklORgorCWJlcS5sCQlzc2NhbGVfc2luZgorCWNtcGkuYgkJJWQxLCZERU5PUk0KKwliZXEubAkJc3NjYWxlX3NkbnJtCisJY21waS5iCQklZDEsJlFOQU4KKwliZXEubAkJc29wX3NxbmFuCisJYnJhLmwJCXNvcF9zc25hbgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZnZW5fZXhjZXB0KCk6IGNhdGNoIGFuIGV4Y2VwdGlvbiBkdXJpbmcgdHJhbnNjZW5kZW50YWwJCSMKKyMJCSAgICAgICBlbXVsYXRpb24JCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZtdWwoKSAtIGVtdWxhdGUgYSBtdWx0aXBseSBpbnN0cnVjdGlvbgkJCQkjCisjCWZhZGQoKSAtIGVtdWxhdGUgYW4gYWRkIGluc3RydWN0aW9uCQkJCSMKKyMJZmluKCkgLSBlbXVsYXRlIGFuIGZtb3ZlIGluc3RydWN0aW9uCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IGRlc3RpbmF0aW9uIG9wZXJhbmQJCQkJCSMKKyMJZDAgID0gdHlwZSBvZiBpbnN0cnVjdGlvbiB0aGF0IHRvb2sgZXhjZXB0aW9uCQkJIworIwlmc2F2ZSBmcmFtZSA9IHNvdXJjZSBvcGVyYW5kCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSByZXN1bHQJCQkJCQkJIworIwlmcDEgPSBFWE9QCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUFuIGV4Y2VwdGlvbiBvY2N1cnJlZCBvbiB0aGUgbGFzdCBpbnN0cnVjdGlvbiBvZiB0aGUJCSMKKyMgdHJhbnNjZW5kZW50YWwgZW11bGF0aW9uLiBob3BlZnVsbHksIHRoaXMgd29uJ3QgYmUgaGFwcGVuaW5nIG11Y2gJIworIyBiZWNhdXNlIGl0IHdpbGwgYmUgVkVSWSBzbG93LgkJCQkJCSMKKyMJVGhlIG9ubHkgZXhjZXB0aW9ucyBjYXBhYmxlIG9mIHBhc3NpbmcgdGhyb3VnaCBoZXJlIGFyZQkJIworIyBPdmVyZmxvdywgVW5kZXJmbG93LCBhbmQgVW5zdXBwb3J0ZWQgRGF0YSBUeXBlLgkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZnZW5fZXhjZXB0CitmZ2VuX2V4Y2VwdDoKKwljbXBpLmIJCTB4Myglc3ApLCYweDcJCSMgaXMgZXhjZXB0aW9uIFVOU1VQUD8KKwliZXEuYgkJZmdlX3Vuc3VwcAkJIyB5ZXMKKworCW1vdi5iCQkmTk9STSxTVEFHKCVhNikKKworZmdlX2NvbnQ6CisJbW92LmIJCSZOT1JNLERUQUcoJWE2KQorCisjIG9rLCBJIGhhdmUgYSBwcm9ibGVtIHdpdGggcHV0dGluZyB0aGUgZHN0IG9wIGF0IEZQX0RTVC4gdGhlIGVtdWxhdGlvbgorIyByb3V0aW5lcyBhcmVuJ3Qgc3VwcG9zZWQgdG8gYWx0ZXIgdGhlIG9wZXJhbmRzIGJ1dCB3ZSd2ZSBqdXN0IHNxdWFzaGVkCisjIEZQX0RTVCBoZXJlLi4uCisKKyMgOC8xNy85MyAtIHRoaXMgdHVybnMgb3V0IHRvIGJlIG1vcmUgb2YgYSAiY2xlYW5saW5lc3MiIHN0YW5kcG9pbnQKKyMgdGhlbiBhIHBvdGVudGlhbCBidWcuIHRvIGJlZ2luIHdpdGgsIG9ubHkgdGhlIGR5YWRpYyBmdW5jdGlvbnMKKyMgZnJlbSxmbW9kLCBhbmQgZnNjYWxlIHdvdWxkIGdldCB0aGUgZHN0IHRyYXNoZWQgaGVyZS4gQnV0LCBmb3IKKyMgdGhlIDA2MFNQLCB0aGUgRlBfRFNUIGlzIG5ldmVyIHVzZWQgYWdhaW4gYW55d2F5cy4KKwlmbW92bS54CQkmMHg4MCxGUF9EU1QoJWE2KQkjIGRzdCBvcCBpcyBpbiBmcDAKKworCWxlYQkJMHg0KCVzcCksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKKwlsZWEJCUZQX0RTVCglYTYpLCVhMQkJIyBwYXNzOiBwdHIgdG8gZHN0IG9wCisKKwljbXBpLmIJCSVkMSwmRk1PVl9PUAorCWJlcS5iCQlmZ2VfZmluCQkJIyBpdCB3YXMgYW4gImZtb3YiCisJY21waS5iCQklZDEsJkZBRERfT1AKKwliZXEuYgkJZmdlX2ZhZGQJCSMgaXQgd2FzIGFuICJmYWRkIgorZmdlX2ZtdWw6CisJYnNyLmwJCWZtdWwKKwlydHMKK2ZnZV9mYWRkOgorCWJzci5sCQlmYWRkCisJcnRzCitmZ2VfZmluOgorCWJzci5sCQlmaW4KKwlydHMKKworZmdlX3Vuc3VwcDoKKwltb3YuYgkJJkRFTk9STSxTVEFHKCVhNikKKwlicmEuYgkJZmdlX2NvbnQKKworIworIyBUaGlzIHRhYmxlIGhvbGRzIHRoZSBvZmZzZXRzIG9mIHRoZSBlbXVsYXRpb24gcm91dGluZXMgZm9yIGVhY2ggaW5kaXZpZHVhbAorIyBtYXRoIG9wZXJhdGlvbiByZWxhdGl2ZSB0byB0aGUgYWRkcmVzcyBvZiB0aGlzIHRhYmxlLiBJbmNsdWRlZCBhcmUKKyMgcm91dGluZXMgbGlrZSBmYWRkL2ZtdWwvZmFicyBhcyB3ZWxsIGFzIHRoZSB0cmFuc2NlbmRlbnRhbHMuCisjIFRoZSBsb2NhdGlvbiB3aXRoaW4gdGhlIHRhYmxlIGlzIGRldGVybWluZWQgYnkgdGhlIGV4dGVuc2lvbiBiaXRzIG9mIHRoZQorIyBvcGVyYXRpb24gbG9uZ3dvcmQuCisjCisKKwlzd2JlZwkJJjEwOQordGJsX3Vuc3VwcDoKKwlsb25nCQlmaW4JCS0gdGJsX3Vuc3VwcAkjIDAwOiBmbW92ZQorCWxvbmcJCWZpbnQJCS0gdGJsX3Vuc3VwcAkjIDAxOiBmaW50CisJbG9uZwkJZnNpbmgJCS0gdGJsX3Vuc3VwcAkjIDAyOiBmc2luaAorCWxvbmcJCWZpbnRyegkJLSB0YmxfdW5zdXBwCSMgMDM6IGZpbnRyegorCWxvbmcJCWZzcXJ0CQktIHRibF91bnN1cHAJIyAwNDogZnNxcnQKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZsb2ducDEJCS0gdGJsX3Vuc3VwcAkjIDA2OiBmbG9nbnAxCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmZXRveG0xCQktIHRibF91bnN1cHAJIyAwODogZmV0b3htMQorCWxvbmcJCWZ0YW5oCQktIHRibF91bnN1cHAJIyAwOTogZnRhbmgKKwlsb25nCQlmYXRhbgkJLSB0YmxfdW5zdXBwCSMgMGE6IGZhdGFuCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmYXNpbgkJLSB0YmxfdW5zdXBwCSMgMGM6IGZhc2luCisJbG9uZwkJZmF0YW5oCQktIHRibF91bnN1cHAJIyAwZDogZmF0YW5oCisJbG9uZwkJZnNpbmUJCS0gdGJsX3Vuc3VwcAkjIDBlOiBmc2luCisJbG9uZwkJZnRhbgkJLSB0YmxfdW5zdXBwCSMgMGY6IGZ0YW4KKwlsb25nCQlmZXRveAkJLSB0YmxfdW5zdXBwCSMgMTA6IGZldG94CisJbG9uZwkJZnR3b3RveAkJLSB0YmxfdW5zdXBwCSMgMTE6IGZ0d290b3gKKwlsb25nCQlmdGVudG94CQktIHRibF91bnN1cHAJIyAxMjogZnRlbnRveAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJZmxvZ24JCS0gdGJsX3Vuc3VwcAkjIDE0OiBmbG9nbgorCWxvbmcJCWZsb2cxMAkJLSB0YmxfdW5zdXBwCSMgMTU6IGZsb2cxMAorCWxvbmcJCWZsb2cyCQktIHRibF91bnN1cHAJIyAxNjogZmxvZzIKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZhYnMJCS0gdGJsX3Vuc3VwcAkjIDE4OiBmYWJzCisJbG9uZwkJZmNvc2gJCS0gdGJsX3Vuc3VwcAkjIDE5OiBmY29zaAorCWxvbmcJCWZuZWcJCS0gdGJsX3Vuc3VwcAkjIDFhOiBmbmVnCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmYWNvcwkJLSB0YmxfdW5zdXBwCSMgMWM6IGZhY29zCisJbG9uZwkJZmNvcwkJLSB0YmxfdW5zdXBwCSMgMWQ6IGZjb3MKKwlsb25nCQlmZ2V0ZXhwCQktIHRibF91bnN1cHAJIyAxZTogZmdldGV4cAorCWxvbmcJCWZnZXRtYW4JCS0gdGJsX3Vuc3VwcAkjIDFmOiBmZ2V0bWFuCisJbG9uZwkJZmRpdgkJLSB0YmxfdW5zdXBwCSMgMjA6IGZkaXYKKwlsb25nCQlmbW9kCQktIHRibF91bnN1cHAJIyAyMTogZm1vZAorCWxvbmcJCWZhZGQJCS0gdGJsX3Vuc3VwcAkjIDIyOiBmYWRkCisJbG9uZwkJZm11bAkJLSB0YmxfdW5zdXBwCSMgMjM6IGZtdWwKKwlsb25nCQlmc2dsZGl2CQktIHRibF91bnN1cHAJIyAyNDogZnNnbGRpdgorCWxvbmcJCWZyZW0JCS0gdGJsX3Vuc3VwcAkjIDI1OiBmcmVtCisJbG9uZwkJZnNjYWxlCQktIHRibF91bnN1cHAJIyAyNjogZnNjYWxlCisJbG9uZwkJZnNnbG11bAkJLSB0YmxfdW5zdXBwCSMgMjc6IGZzZ2xtdWwKKwlsb25nCQlmc3ViCQktIHRibF91bnN1cHAJIyAyODogZnN1YgorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJZnNpbmNvcwkJLSB0YmxfdW5zdXBwCSMgMzA6IGZzaW5jb3MKKwlsb25nCQlmc2luY29zCQktIHRibF91bnN1cHAJIyAzMTogZnNpbmNvcworCWxvbmcJCWZzaW5jb3MJCS0gdGJsX3Vuc3VwcAkjIDMyOiBmc2luY29zCisJbG9uZwkJZnNpbmNvcwkJLSB0YmxfdW5zdXBwCSMgMzM6IGZzaW5jb3MKKwlsb25nCQlmc2luY29zCQktIHRibF91bnN1cHAJIyAzNDogZnNpbmNvcworCWxvbmcJCWZzaW5jb3MJCS0gdGJsX3Vuc3VwcAkjIDM1OiBmc2luY29zCisJbG9uZwkJZnNpbmNvcwkJLSB0YmxfdW5zdXBwCSMgMzY6IGZzaW5jb3MKKwlsb25nCQlmc2luY29zCQktIHRibF91bnN1cHAJIyAzNzogZnNpbmNvcworCWxvbmcJCWZjbXAJCS0gdGJsX3Vuc3VwcAkjIDM4OiBmY21wCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmdHN0CQktIHRibF91bnN1cHAJIyAzYTogZnRzdAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmc2luCQktIHRibF91bnN1cHAJIyA0MDogZnNtb3ZlCisJbG9uZwkJZnNzcXJ0CQktIHRibF91bnN1cHAJIyA0MTogZnNzcXJ0CisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZkaW4JCS0gdGJsX3Vuc3VwcAkjIDQ0OiBmZG1vdmUKKwlsb25nCQlmZHNxcnQJCS0gdGJsX3Vuc3VwcAkjIDQ1OiBmZHNxcnQKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmc2FicwkJLSB0YmxfdW5zdXBwCSMgNTg6IGZzYWJzCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmc25lZwkJLSB0YmxfdW5zdXBwCSMgNWE6IGZzbmVnCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmZGFicwkJLSB0YmxfdW5zdXBwCSMgNWM6IGZkYWJzCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmZG5lZwkJLSB0YmxfdW5zdXBwCSMgNWU6IGZkbmVnCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmc2RpdgkJLSB0YmxfdW5zdXBwCSMgNjA6IGZzZGl2CisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmc2FkZAkJLSB0YmxfdW5zdXBwCSMgNjI6IGZzYWRkCisJbG9uZwkJZnNtdWwJCS0gdGJsX3Vuc3VwcAkjIDYzOiBmc211bAorCWxvbmcJCWZkZGl2CQktIHRibF91bnN1cHAJIyA2NDogZmRkaXYKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZkYWRkCQktIHRibF91bnN1cHAJIyA2NjogZmRhZGQKKwlsb25nCQlmZG11bAkJLSB0YmxfdW5zdXBwCSMgNjc6IGZkbXVsCisJbG9uZwkJZnNzdWIJCS0gdGJsX3Vuc3VwcAkjIDY4OiBmc3N1YgorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZkc3ViCQktIHRibF91bnN1cHAJIyA2YzogZmRzdWIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmbXVsKCk6IGVtdWxhdGVzIHRoZSBmbXVsIGluc3RydWN0aW9uCQkJCSMKKyMJZnNtdWwoKTogZW11bGF0ZXMgdGhlIGZzbXVsIGluc3RydWN0aW9uCQkJCSMKKyMJZmRtdWwoKTogZW11bGF0ZXMgdGhlIGZkbXVsIGluc3RydWN0aW9uCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXNjYWxlX3RvX3plcm9fc3JjKCkgLSBzY2FsZSBzcmMgZXhwb25lbnQgdG8gemVybwkJIworIwlzY2FsZV90b196ZXJvX2RzdCgpIC0gc2NhbGUgZHN0IGV4cG9uZW50IHRvIHplcm8JCSMKKyMJdW5mX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdAkJCSMKKyMJb3ZmX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0CQkJIworIwlyZXNfcW5hbigpIC0gcmV0dXJuIFFOQU4gcmVzdWx0CQkJCQkjCisjCXJlc19zbmFuKCkgLSByZXR1cm4gU05BTiByZXN1bHQJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKKyMJYTEgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBkZXN0aW5hdGlvbiBvcGVyYW5kCQkjCisjCWQwICBybmQgcHJlYyxtb2RlCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gcmVzdWx0CQkJCQkJCSMKKyMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlIYW5kbGUgTkFOcywgaW5maW5pdGllcywgYW5kIHplcm9lcyBhcyBzcGVjaWFsIGNhc2VzLiBEaXZpZGUJIworIyBub3Jtcy9kZW5vcm1zIGludG8gZXh0L3NnbC9kYmwgcHJlY2lzaW9uLgkJCQkjCisjCUZvciBub3Jtcy9kZW5vcm1zLCBzY2FsZSB0aGUgZXhwb25lbnRzIHN1Y2ggdGhhdCBhIG11bHRpcGx5CSMKKyMgaW5zdHJ1Y3Rpb24gd29uJ3QgY2F1c2UgYW4gZXhjZXB0aW9uLiBVc2UgdGhlIHJlZ3VsYXIgZm11bCB0bwkJIworIyBjb21wdXRlIGEgcmVzdWx0LiBDaGVjayBpZiB0aGUgcmVndWxhciBvcGVyYW5kcyB3b3VsZCBoYXZlIHRha2VuCSMKKyMgYW4gZXhjZXB0aW9uLiBJZiBzbywgcmV0dXJuIHRoZSBkZWZhdWx0IG92ZXJmbG93L3VuZGVyZmxvdyByZXN1bHQJIworIyBhbmQgcmV0dXJuIHRoZSBFWE9QIGlmIGV4Y2VwdGlvbnMgYXJlIGVuYWJsZWQuIEVsc2UsIHNjYWxlIHRoZQkjCisjIHJlc3VsdCBvcGVyYW5kIHRvIHRoZSBwcm9wZXIgZXhwb25lbnQuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlhbGlnbgkJMHgxMAordGJsX2ZtdWxfb3ZmbDoKKwlsb25nCQkweDNmZmYgLSAweDdmZmUJCSMgZXh0X21heAorCWxvbmcJCTB4M2ZmZiAtIDB4NDA3ZQkJIyBzZ2xfbWF4CisJbG9uZwkJMHgzZmZmIC0gMHg0M2ZlCQkjIGRibF9tYXgKK3RibF9mbXVsX3VuZmw6CisJbG9uZwkJMHgzZmZmICsgMHgwMDAxCQkjIGV4dF91bmZsCisJbG9uZwkJMHgzZmZmIC0gMHgzZjgwCQkjIHNnbF91bmZsCisJbG9uZwkJMHgzZmZmIC0gMHgzYzAwCQkjIGRibF91bmZsCisKKwlnbG9iYWwJCWZzbXVsCitmc211bDoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmc19tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IHNnbCBwcmVjCisJYnJhLmIJCWZtdWwKKworCWdsb2JhbAkJZmRtdWwKK2ZkbXVsOgorCWFuZGkuYgkJJjB4MzAsJWQwCisJb3JpLmIJCSZkX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgZGJsIHByZWMKKworCWdsb2JhbAkJZm11bAorZm11bDoKKwltb3YubAkJJWQwLExfU0NSMyglYTYpCQkjIHN0b3JlIHJuZCBpbmZvCisKKwljbHIudwkJJWQxCisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwlsc2wuYgkJJjB4MywlZDEKKwlvci5iCQlTVEFHKCVhNiksJWQxCQkjIGNvbWJpbmUgc3JjIHRhZ3MKKwlibmUudwkJZm11bF9ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAorCitmbXVsX25vcm06CisJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjFfRVgoJWE2KQorCW1vdi5sCQlEU1RfSEkoJWExKSxGUF9TQ1IxX0hJKCVhNikKKwltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMV9MTyglYTYpCisKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKworCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIHNjYWxlIHNyYyBleHBvbmVudAorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgc2NhbGUgZmFjdG9yIDEKKworCWJzci5sCQlzY2FsZV90b196ZXJvX2RzdAkjIHNjYWxlIGRzdCBleHBvbmVudAorCisJYWRkLmwJCSVkMCwoJXNwKQkJIyBTQ0FMRV9GQUNUT1IgPSBzY2FsZTEgKyBzY2FsZTIKKworCW1vdi53CQkyK0xfU0NSMyglYTYpLCVkMQkjIGZldGNoIHByZWNpc2lvbgorCWxzci5iCQkmMHg2LCVkMQkJIyBzaGlmdCB0byBsbyBiaXRzCisJbW92LmwJCSglc3ApKywlZDAJCSMgbG9hZCBTLkYuCisJY21wLmwJCSVkMCwodGJsX2ZtdWxfb3ZmbC53LCVwYywlZDEudyo0KSAjIHdvdWxkIHJlc3VsdCBvdmZsPworCWJlcS53CQlmbXVsX21heV9vdmZsCQkjIHJlc3VsdCBtYXkgcm5kIHRvIG92ZXJmbG93CisJYmx0LncJCWZtdWxfb3ZmbAkJIyByZXN1bHQgd2lsbCBvdmVyZmxvdworCisJY21wLmwJCSVkMCwodGJsX2ZtdWxfdW5mbC53LCVwYywlZDEudyo0KSAjIHdvdWxkIHJlc3VsdCB1bmZsPworCWJlcS53CQlmbXVsX21heV91bmZsCQkjIHJlc3VsdCBtYXkgcm5kIHRvIG5vIHVuZmwKKwliZ3QudwkJZm11bF91bmZsCQkjIHJlc3VsdCB3aWxsIHVuZGVyZmxvdworCisjCisjIE5PUk1BTDoKKyMgLSB0aGUgcmVzdWx0IG9mIHRoZSBtdWx0aXBseSBvcGVyYXRpb24gd2lsbCBuZWl0aGVyIG92ZXJmbG93IG5vciB1bmRlcmZsb3cuCisjIC0gZG8gdGhlIG11bHRpcGx5IHRvIHRoZSBwcm9wZXIgcHJlY2lzaW9uIGFuZCByb3VuZGluZyBtb2RlLgorIyAtIHNjYWxlIHRoZSByZXN1bHQgZXhwb25lbnQgdXNpbmcgdGhlIHNjYWxlIGZhY3Rvci4gaWYgYm90aCBvcGVyYW5kcyB3ZXJlCisjIG5vcm1hbGl6ZWQgdGhlbiB3ZSByZWFsbHkgZG9uJ3QgbmVlZCB0byBnbyB0aHJvdWdoIHRoaXMgc2NhbGluZy4gYnV0IGZvciBub3csCisjIHRoaXMgd2lsbCBkby4KKyMKK2ZtdWxfbm9ybWFsOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wZXJhbmQKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBtdWx0aXBseQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKK2ZtdWxfbm9ybWFsX2V4aXQ6CisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAorCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQge3NnbixleHB9CisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgT1ZFUkZMT1c6CisjIC0gdGhlIHJlc3VsdCBvZiB0aGUgbXVsdGlwbHkgb3BlcmF0aW9uIGlzIGFuIG92ZXJmbG93LgorIyAtIGRvIHRoZSBtdWx0aXBseSB0byB0aGUgcHJvcGVyIHByZWNpc2lvbiBhbmQgcm91bmRpbmcgbW9kZSBpbiBvcmRlciB0bworIyBzZXQgdGhlIGluZXhhY3QgYml0cy4KKyMgLSBjYWxjdWxhdGUgdGhlIGRlZmF1bHQgcmVzdWx0IGFuZCByZXR1cm4gaXQgaW4gZnAwLgorIyAtIGlmIG92ZXJmbG93IG9yIGluZXhhY3QgaXMgZW5hYmxlZCwgd2UgbmVlZCBhIG11bHRpcGx5IHJlc3VsdCByb3VuZGVkIHRvCisjIGV4dGVuZGVkIHByZWNpc2lvbi4gaWYgdGhlIG9yaWdpbmFsIG9wZXJhdGlvbiB3YXMgZXh0ZW5kZWQsIHRoZW4gd2UgaGF2ZSB0aGlzCisjIHJlc3VsdC4gaWYgdGhlIG9yaWdpbmFsIG9wZXJhdGlvbiB3YXMgc2luZ2xlIG9yIGRvdWJsZSwgd2UgaGF2ZSB0byBkbyBhbm90aGVyCisjIG11bHRpcGx5IHVzaW5nIGV4dGVuZGVkIHByZWNpc2lvbiBhbmQgdGhlIGNvcnJlY3Qgcm91bmRpbmcgbW9kZS4gdGhlIHJlc3VsdAorIyBvZiB0aGlzIG9wZXJhdGlvbiB0aGVuIGhhcyBpdHMgZXhwb25lbnQgc2NhbGVkIGJ5IC0weDYwMDAgdG8gY3JlYXRlIHRoZQorIyBleGNlcHRpb25hbCBvcGVyYW5kLgorIworZm11bF9vdmZsOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wZXJhbmQKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBtdWx0aXBseQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKyMgc2F2ZSBzZXR0aW5nIHRoaXMgdW50aWwgbm93IGJlY2F1c2UgdGhpcyBpcyB3aGVyZSBmbXVsX21heV9vdmZsIG1heSBqdW1wIGluCitmbXVsX292ZmxfdHN0OgorCW9yLmwJCSZvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmbXVsX292ZmxfZW5hCQkjIHllcworCisjIGNhbGN1bGF0ZSB0aGUgZGVmYXVsdCByZXN1bHQKK2ZtdWxfb3ZmbF9kaXM6CisJYnRzdAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgaXMgcmVzdWx0IG5lZ2F0aXZlPworCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzcyBybmQgcHJlYyxtb2RlCisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQorCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBPVkZMIGlzIGVuYWJsZWQ7IENyZWF0ZSBFWE9QOgorIyAtIGlmIHByZWNpc2lvbiBpcyBleHRlbmRlZCwgdGhlbiB3ZSBoYXZlIHRoZSBFWE9QLiBzaW1wbHkgYmlhcyB0aGUgZXhwb25lbnQKKyMgd2l0aCBhbiBleHRyYSAtMHg2MDAwLiBpZiB0aGUgcHJlY2lzaW9uIGlzIHNpbmdsZSBvciBkb3VibGUsIHdlIG5lZWQgdG8KKyMgY2FsY3VsYXRlIGEgcmVzdWx0IHJvdW5kZWQgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uLgorIworZm11bF9vdmZsX2VuYToKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHhjMCwlZDEJCSMgdGVzdCB0aGUgcm5kIHByZWMKKwlibmUuYgkJZm11bF9vdmZsX2VuYV9zZAkjIGl0J3Mgc2dsIG9yIGRibAorCitmbXVsX292ZmxfZW5hX2NvbnQ6CisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgbW92ZSByZXN1bHQgdG8gc3RhY2sKKworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi53CQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJc3ViaS5sCQkmMHg2MDAwLCVkMQkJIyBzdWJ0cmFjdCBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQkJIyBjbGVhciBzaWduIGJpdAorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCWJyYS5iCQlmbXVsX292ZmxfZGlzCisKK2ZtdWxfb3ZmbF9lbmFfc2Q6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3BlcmFuZAorCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4MzAsJWQxCQkjIGtlZXAgcm5kIG1vZGUgb25seQorCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisKKwlmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBtdWx0aXBseQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlicmEuYgkJZm11bF9vdmZsX2VuYV9jb250CisKKyMKKyMgbWF5IE9WRVJGTE9XOgorIyAtIHRoZSByZXN1bHQgb2YgdGhlIG11bHRpcGx5IG9wZXJhdGlvbiBNQVkgb3ZlcmZsb3cuCisjIC0gZG8gdGhlIG11bHRpcGx5IHRvIHRoZSBwcm9wZXIgcHJlY2lzaW9uIGFuZCByb3VuZGluZyBtb2RlIGluIG9yZGVyIHRvCisjIHNldCB0aGUgaW5leGFjdCBiaXRzLgorIyAtIGNhbGN1bGF0ZSB0aGUgZGVmYXVsdCByZXN1bHQgYW5kIHJldHVybiBpdCBpbiBmcDAuCisjCitmbXVsX21heV9vdmZsOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZm11bC54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgbXVsdGlwbHkKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCisJZmFicy54CQklZnAwLCVmcDEJCSMgbWFrZSBhIGNvcHkgb2YgcmVzdWx0CisJZmNtcC5iCQklZnAxLCYweDIJCSMgaXMgfHJlc3VsdHwgPj0gMi5iPworCWZiZ2UudwkJZm11bF9vdmZsX3RzdAkJIyB5ZXM7IG92ZXJmbG93IGhhcyBvY2N1cnJlZAorCisjIG5vLCBpdCBkaWRuJ3Qgb3ZlcmZsb3c7IHdlIGhhdmUgY29ycmVjdCByZXN1bHQKKwlicmEudwkJZm11bF9ub3JtYWxfZXhpdAorCisjCisjIFVOREVSRkxPVzoKKyMgLSB0aGUgcmVzdWx0IG9mIHRoZSBtdWx0aXBseSBvcGVyYXRpb24gaXMgYW4gdW5kZXJmbG93LgorIyAtIGRvIHRoZSBtdWx0aXBseSB0byB0aGUgcHJvcGVyIHByZWNpc2lvbiBhbmQgcm91bmRpbmcgbW9kZSBpbiBvcmRlciB0bworIyBzZXQgdGhlIGluZXhhY3QgYml0cy4KKyMgLSBjYWxjdWxhdGUgdGhlIGRlZmF1bHQgcmVzdWx0IGFuZCByZXR1cm4gaXQgaW4gZnAwLgorIyAtIGlmIG92ZXJmbG93IG9yIGluZXhhY3QgaXMgZW5hYmxlZCwgd2UgbmVlZCBhIG11bHRpcGx5IHJlc3VsdCByb3VuZGVkIHRvCisjIGV4dGVuZGVkIHByZWNpc2lvbi4gaWYgdGhlIG9yaWdpbmFsIG9wZXJhdGlvbiB3YXMgZXh0ZW5kZWQsIHRoZW4gd2UgaGF2ZSB0aGlzCisjIHJlc3VsdC4gaWYgdGhlIG9yaWdpbmFsIG9wZXJhdGlvbiB3YXMgc2luZ2xlIG9yIGRvdWJsZSwgd2UgaGF2ZSB0byBkbyBhbm90aGVyCisjIG11bHRpcGx5IHVzaW5nIGV4dGVuZGVkIHByZWNpc2lvbiBhbmQgdGhlIGNvcnJlY3Qgcm91bmRpbmcgbW9kZS4gdGhlIHJlc3VsdAorIyBvZiB0aGlzIG9wZXJhdGlvbiB0aGVuIGhhcyBpdHMgZXhwb25lbnQgc2NhbGVkIGJ5IC0weDYwMDAgdG8gY3JlYXRlIHRoZQorIyBleGNlcHRpb25hbCBvcGVyYW5kLgorIworZm11bF91bmZsOgorCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZmwgZXhjIGJpdAorCisjIGZvciBmdW4sIGxldCdzIHVzZSBvbmx5IGV4dGVuZGVkIHByZWNpc2lvbiwgcm91bmQgdG8gemVyby4gdGhlbiwgbGV0CisjIHRoZSB1bmZfcmVzKCkgcm91dGluZSBmaWd1cmUgb3V0IGFsbCB0aGUgcmVzdC4KKyMgd2lsbCB3ZSBnZXQgdGhlIGNvcnJlY3QgYW5zd2VyLgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wZXJhbmQKKworCWZtb3YubAkJJnJ6X21vZGUqMHgxMCwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZtdWwueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIG11bHRpcGx5CisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MGIsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmbXVsX3VuZmxfZW5hCQkjIHllcworCitmbXVsX3VuZmxfZGlzOgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyB1bmZfcmVzMiBtYXkgaGF2ZSBzZXQgJ1onCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIFVORkwgaXMgZW5hYmxlZC4KKyMKK2ZtdWxfdW5mbF9lbmE6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AKKworCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CisJYm5lLmIJCWZtdWxfdW5mbF9lbmFfc2QJIyBubywgc2dsIG9yIGRibAorCisjIGlmIHRoZSBybmQgbW9kZSBpcyBhbnl0aGluZyBidXQgUlosIHRoZW4gd2UgaGF2ZSB0byByZS1kbyB0aGUgYWJvdmUKKyMgbXVsdGlwbGljYXRpb24gYmVjdWFzZSB3ZSB1c2VkIFJaIGZvciBhbGwuCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKK2ZtdWxfdW5mbF9lbmFfY29udDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZm11bC54CQlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgbXVsdGlwbHkKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlmbW92bS54CQkmMHg0MCxGUF9TQ1IwKCVhNikJIyBzYXZlIHJlc3VsdCB0byBzdGFjaworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJYWRkaS5sCQkmMHg2MDAwLCVkMQkJIyBhZGQgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlicmEudwkJZm11bF91bmZsX2RpcworCitmbXVsX3VuZmxfZW5hX3NkOgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDMwLCVkMQkJIyB1c2Ugb25seSBybmQgbW9kZQorCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisKKwlicmEuYgkJZm11bF91bmZsX2VuYV9jb250CisKKyMgTUFZIFVOREVSRkxPVzoKKyMgLXVzZSB0aGUgY29ycmVjdCByb3VuZGluZyBtb2RlIGFuZCBwcmVjaXNpb24uIHRoaXMgY29kZSBmYXZvcnMgb3BlcmF0aW9ucworIyB0aGF0IGRvIG5vdCB1bmRlcmZsb3cuCitmbXVsX21heV91bmZsOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wZXJhbmQKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBtdWx0aXBseQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwlmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKKwlmY21wLmIJCSVmcDEsJjB4MgkJIyBpcyB8cmVzdWx0fCA+IDIuYj8KKwlmYmd0LncJCWZtdWxfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCisJZmJsdC53CQlmbXVsX3VuZmwJCSMgeWVzOyB1bmRlcmZsb3cgb2NjdXJyZWQKKworIworIyB3ZSBzdGlsbCBkb24ndCBrbm93IGlmIHVuZGVyZmxvdyBvY2N1cnJlZC4gcmVzdWx0IGlzIH4gZXF1YWwgdG8gMi4gYnV0LAorIyB3ZSBkb24ndCBrbm93IGlmIHRoZSByZXN1bHQgd2FzIGFuIHVuZGVyZmxvdyB0aGF0IHJvdW5kZWQgdXAgdG8gYSAyIG9yCisjIGEgbm9ybWFsaXplZCBudW1iZXIgdGhhdCByb3VuZGVkIGRvd24gdG8gYSAyLiBzbywgcmVkbyB0aGUgZW50aXJlIG9wZXJhdGlvbgorIyB1c2luZyBSWiBhcyB0aGUgcm91bmRpbmcgbW9kZSB0byBzZWUgd2hhdCB0aGUgcHJlLXJvdW5kZWQgcmVzdWx0IGlzLgorIyB0aGlzIGNhc2Ugc2hvdWxkIGJlIHJlbGF0aXZlbHkgcmFyZS4KKyMKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcGVyYW5kCisKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHhjMCwlZDEJCSMga2VlcCBybmQgcHJlYworCW9yaS5iCQkmcnpfbW9kZSoweDEwLCVkMQkjIGluc2VydCBSWgorCisJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZm11bC54CQlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgbXVsdGlwbHkKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZmFicy54CQklZnAxCQkJIyBtYWtlIGFic29sdXRlIHZhbHVlCisJZmNtcC5iCQklZnAxLCYweDIJCSMgaXMgfHJlc3VsdHwgPCAyLmI/CisJZmJnZS53CQlmbXVsX25vcm1hbF9leGl0CSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCWJyYS53CQlmbXVsX3VuZmwJCSMgeWVzLCB1bmRlcmZsb3cgb2NjdXJyZWQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBNdWx0aXBseTogaW5wdXRzIGFyZSBub3QgYm90aCBub3JtYWxpemVkOyB3aGF0IGFyZSB0aGV5PworIworZm11bF9ub3Rfbm9ybToKKwltb3YudwkJKHRibF9mbXVsX29wLmIsJXBjLCVkMS53KjIpLCVkMQorCWptcAkJKHRibF9mbXVsX29wLmIsJXBjLCVkMS53KQorCisJc3diZWcJCSY0OAordGJsX2ZtdWxfb3A6CisJc2hvcnQJCWZtdWxfbm9ybQktIHRibF9mbXVsX29wICMgTk9STSB4IE5PUk0KKwlzaG9ydAkJZm11bF96ZXJvCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggWkVSTworCXNob3J0CQlmbXVsX2luZl9zcmMJLSB0YmxfZm11bF9vcCAjIE5PUk0geCBJTkYKKwlzaG9ydAkJZm11bF9yZXNfcW5hbgktIHRibF9mbXVsX29wICMgTk9STSB4IFFOQU4KKwlzaG9ydAkJZm11bF9ub3JtCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggREVOT1JNCisJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIE5PUk0geCBTTkFOCisJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIworCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKKworCXNob3J0CQlmbXVsX3plcm8JLSB0YmxfZm11bF9vcCAjIFpFUk8geCBOT1JNCisJc2hvcnQJCWZtdWxfemVybwktIHRibF9mbXVsX29wICMgWkVSTyB4IFpFUk8KKwlzaG9ydAkJZm11bF9yZXNfb3BlcnIJLSB0YmxfZm11bF9vcCAjIFpFUk8geCBJTkYKKwlzaG9ydAkJZm11bF9yZXNfcW5hbgktIHRibF9mbXVsX29wICMgWkVSTyB4IFFOQU4KKwlzaG9ydAkJZm11bF96ZXJvCS0gdGJsX2ZtdWxfb3AgIyBaRVJPIHggREVOT1JNCisJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIFpFUk8geCBTTkFOCisJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIworCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKKworCXNob3J0CQlmbXVsX2luZl9kc3QJLSB0YmxfZm11bF9vcCAjIElORiB4IE5PUk0KKwlzaG9ydAkJZm11bF9yZXNfb3BlcnIJLSB0YmxfZm11bF9vcCAjIElORiB4IFpFUk8KKwlzaG9ydAkJZm11bF9pbmZfZHN0CS0gdGJsX2ZtdWxfb3AgIyBJTkYgeCBJTkYKKwlzaG9ydAkJZm11bF9yZXNfcW5hbgktIHRibF9mbXVsX29wICMgSU5GIHggUU5BTgorCXNob3J0CQlmbXVsX2luZl9kc3QJLSB0YmxfZm11bF9vcCAjIElORiB4IERFTk9STQorCXNob3J0CQlmbXVsX3Jlc19zbmFuCS0gdGJsX2ZtdWxfb3AgIyBJTkYgeCBTTkFOCisJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIworCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKKworCXNob3J0CQlmbXVsX3Jlc19xbmFuCS0gdGJsX2ZtdWxfb3AgIyBRTkFOIHggTk9STQorCXNob3J0CQlmbXVsX3Jlc19xbmFuCS0gdGJsX2ZtdWxfb3AgIyBRTkFOIHggWkVSTworCXNob3J0CQlmbXVsX3Jlc19xbmFuCS0gdGJsX2ZtdWxfb3AgIyBRTkFOIHggSU5GCisJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIFFOQU4geCBRTkFOCisJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIFFOQU4geCBERU5PUk0KKwlzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgUU5BTiB4IFNOQU4KKwlzaG9ydAkJdGJsX2ZtdWxfb3AJLSB0YmxfZm11bF9vcCAjCisJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIworCisJc2hvcnQJCWZtdWxfbm9ybQktIHRibF9mbXVsX29wICMgTk9STSB4IE5PUk0KKwlzaG9ydAkJZm11bF96ZXJvCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggWkVSTworCXNob3J0CQlmbXVsX2luZl9zcmMJLSB0YmxfZm11bF9vcCAjIE5PUk0geCBJTkYKKwlzaG9ydAkJZm11bF9yZXNfcW5hbgktIHRibF9mbXVsX29wICMgTk9STSB4IFFOQU4KKwlzaG9ydAkJZm11bF9ub3JtCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggREVOT1JNCisJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIE5PUk0geCBTTkFOCisJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIworCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKKworCXNob3J0CQlmbXVsX3Jlc19zbmFuCS0gdGJsX2ZtdWxfb3AgIyBTTkFOIHggTk9STQorCXNob3J0CQlmbXVsX3Jlc19zbmFuCS0gdGJsX2ZtdWxfb3AgIyBTTkFOIHggWkVSTworCXNob3J0CQlmbXVsX3Jlc19zbmFuCS0gdGJsX2ZtdWxfb3AgIyBTTkFOIHggSU5GCisJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIFNOQU4geCBRTkFOCisJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIFNOQU4geCBERU5PUk0KKwlzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgU05BTiB4IFNOQU4KKwlzaG9ydAkJdGJsX2ZtdWxfb3AJLSB0YmxfZm11bF9vcCAjCisJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIworCitmbXVsX3Jlc19vcGVycjoKKwlicmEubAkJcmVzX29wZXJyCitmbXVsX3Jlc19zbmFuOgorCWJyYS5sCQlyZXNfc25hbgorZm11bF9yZXNfcW5hbjoKKwlicmEubAkJcmVzX3FuYW4KKworIworIyBNdWx0aXBseTogKFplcm8geCBaZXJvKSB8fCAoWmVybyB4IG5vcm0pIHx8IChaZXJvIHggZGVub3JtKQorIworCWdsb2JhbAkJZm11bF96ZXJvCQkjIGdsb2JhbCBmb3IgZnNnbG11bAorZm11bF96ZXJvOgorCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDAJCSMgZXhjbHVzaXZlIG9yIHRoZSBzaWducworCW1vdi5iCQlEU1RfRVgoJWExKSwlZDEKKwllb3IuYgkJJWQwLCVkMQorCWJwbC5iCQlmbXVsX3plcm9fcAkJIyByZXN1bHQgWkVSTyBpcyBwb3MuCitmbXVsX3plcm9fbjoKKwlmbW92LnMJCSYweDgwMDAwMDAwLCVmcDAJIyBsb2FkIC1aRVJPCisJbW92LmIJCSZ6X2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgWi9OCisJcnRzCitmbXVsX3plcm9fcDoKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyBsb2FkICtaRVJPCisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaCisJcnRzCisKKyMKKyMgTXVsdGlwbHk6IChpbmYgeCBpbmYpIHx8IChpbmYgeCBub3JtKSB8fCAoaW5mIHggZGVub3JtKQorIworIyBOb3RlOiBUaGUgai1iaXQgZm9yIGFuIGluZmluaXR5IGlzIGEgZG9uJ3QtY2FyZS4gSG93ZXZlciwgdG8gYmUKKyMgc3RyaWN0bHkgY29tcGF0aWJsZSB3LyB0aGUgNjg4ODEvODgyLCB3ZSBtYWtlIHN1cmUgdG8gcmV0dXJuIGFuCisjIElORiB3LyB0aGUgai1iaXQgc2V0IGlmIHRoZSBpbnB1dCBJTkYgai1iaXQgd2FzIHNldC4gRGVzdGluYXRpb24KKyMgSU5GcyB0YWtlIHByaW9yaXR5LgorIworCWdsb2JhbAkJZm11bF9pbmZfZHN0CQkjIGdsb2JhbCBmb3IgZnNnbG11bAorZm11bF9pbmZfZHN0OgorCWZtb3ZtLngJCURTVCglYTEpLCYweDgwCQkjIHJldHVybiBJTkYgcmVzdWx0IGluIGZwMAorCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDAJCSMgZXhjbHVzaXZlIG9yIHRoZSBzaWducworCW1vdi5iCQlEU1RfRVgoJWExKSwlZDEKKwllb3IuYgkJJWQwLCVkMQorCWJwbC5iCQlmbXVsX2luZl9kc3RfcAkJIyByZXN1bHQgSU5GIGlzIHBvcy4KK2ZtdWxfaW5mX2RzdF9uOgorCWZhYnMueAkJJWZwMAkJCSMgY2xlYXIgcmVzdWx0IHNpZ24KKwlmbmVnLngJCSVmcDAJCQkjIHNldCByZXN1bHQgc2lnbgorCW1vdi5iCQkmaW5mX2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgSU5GL04KKwlydHMKK2ZtdWxfaW5mX2RzdF9wOgorCWZhYnMueAkJJWZwMAkJCSMgY2xlYXIgcmVzdWx0IHNpZ24KKwltb3YuYgkJJmluZl9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgSU5GCisJcnRzCisKKwlnbG9iYWwJCWZtdWxfaW5mX3NyYwkJIyBnbG9iYWwgZm9yIGZzZ2xtdWwKK2ZtdWxfaW5mX3NyYzoKKwlmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gSU5GIHJlc3VsdCBpbiBmcDAKKwltb3YuYgkJU1JDX0VYKCVhMCksJWQwCQkjIGV4Y2x1c2l2ZSBvciB0aGUgc2lnbnMKKwltb3YuYgkJRFNUX0VYKCVhMSksJWQxCisJZW9yLmIJCSVkMCwlZDEKKwlicGwuYgkJZm11bF9pbmZfZHN0X3AJCSMgcmVzdWx0IElORiBpcyBwb3MuCisJYnJhLmIJCWZtdWxfaW5mX2RzdF9uCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZmluKCk6IGVtdWxhdGVzIHRoZSBmbW92ZSBpbnN0cnVjdGlvbgkJCQkjCisjCWZzaW4oKTogZW11bGF0ZXMgdGhlIGZzbW92ZSBpbnN0cnVjdGlvbgkJCQkjCisjCWZkaW4oKTogZW11bGF0ZXMgdGhlIGZkbW92ZSBpbnN0cnVjdGlvbgkJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlub3JtKCkgLSBub3JtYWxpemUgbWFudGlzc2EgZm9yIEVYT1Agb24gZGVub3JtCQkJIworIwlzY2FsZV90b196ZXJvX3NyYygpIC0gc2NhbGUgc3JjIGV4cG9uZW50IHRvIHplcm8JCSMKKyMJb3ZmX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0CQkJIworIwl1bmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CQkJIworIwlyZXNfcW5hbl8xb3AoKSAtIHJldHVybiBRTkFOIHJlc3VsdAkJCQkjCisjCXJlc19zbmFuXzFvcCgpIC0gcmV0dXJuIFNOQU4gcmVzdWx0CQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKKyMJZDAgPSByb3VuZCBwcmVjL21vZGUJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSByZXN1bHQJCQkJCQkJIworIwlmcDEgPSBFWE9QIChpZiBleGNlcHRpb24gb2NjdXJyZWQpCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUhhbmRsZSBOQU5zLCBpbmZpbml0aWVzLCBhbmQgemVyb2VzIGFzIHNwZWNpYWwgY2FzZXMuIERpdmlkZQkjCisjIG5vcm1zIGludG8gZXh0ZW5kZWQsIHNpbmdsZSwgYW5kIGRvdWJsZSBwcmVjaXNpb24uCQkJIworIwlOb3JtcyBjYW4gYmUgZW11bGF0ZWQgdy8gYSByZWd1bGFyIGZtb3ZlIGluc3RydWN0aW9uLiBGb3IJIworIyBzZ2wvZGJsLCBtdXN0IHNjYWxlIGV4cG9uZW50IGFuZCBwZXJmb3JtIGFuICJmbW92ZSIuIENoZWNrIHRvIHNlZQkjCisjIGlmIHRoZSByZXN1bHQgd291bGQgaGF2ZSBvdmVyZmxvd2VkL3VuZGVyZmxvd2VkLiBJZiBzbywgdXNlIHVuZl9yZXMoKQkjCisjIG9yIG92Zl9yZXMoKSB0byByZXR1cm4gdGhlIGRlZmF1bHQgcmVzdWx0LiBBbHNvIHJldHVybiBFWE9QIGlmCSMKKyMgZXhjZXB0aW9uIGlzIGVuYWJsZWQuIElmIG5vIGV4Y2VwdGlvbiwgcmV0dXJuIHRoZSBkZWZhdWx0IHJlc3VsdC4JIworIwlVbm5vcm1zIGRvbid0IHBhc3MgdGhyb3VnaCBoZXJlLgkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlmc2luCitmc2luOgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWNpc2lvbgorCWJyYS5iCQlmaW4KKworCWdsb2JhbAkJZmRpbgorZmRpbjoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmZF9tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IGRibCBwcmVjaXNpb24KKworCWdsb2JhbAkJZmluCitmaW46CisJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzdG9yZSBybmQgaW5mbworCisJbW92LmIJCVNUQUcoJWE2KSwlZDEJCSMgZmV0Y2ggc3JjIG9wdHlwZSB0YWcKKwlibmUudwkJZmluX25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CisKKyMKKyMgRlAgTU9WRSBJTjogTk9STXMgYW5kIERFTk9STXMgT05MWSEKKyMKK2Zpbl9ub3JtOgorCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUudwkJZmluX25vdF9leHQJCSMgbm8sIHNvIGdvIGhhbmRsZSBkYmwgb3Igc2dsCisKKyMKKyMgcHJlY2lzaW9uIHNlbGVjdGVkIGlzIGV4dGVuZGVkLiBzby4uLndlIGNhbm5vdCBnZXQgYW4gdW5kZXJmbG93CisjIG9yIG92ZXJmbG93IGJlY2F1c2Ugb2Ygcm91bmRpbmcgdG8gdGhlIGNvcnJlY3QgcHJlY2lzaW9uLiBzby4uLgorIyBza2lwIHRoZSBzY2FsaW5nIGFuZCB1bnNjYWxpbmcuLi4KKyMKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgdGhlIG9wZXJhbmQgbmVnYXRpdmU/CisJYnBsLmIJCWZpbl9ub3JtX2RvbmUJCSMgbm8KKwlic2V0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyB5ZXMsIHNvIHNldCAnTicgY2NvZGUgYml0CitmaW5fbm9ybV9kb25lOgorCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIHJldHVybiByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgZm9yIGFuIGV4dGVuZGVkIHByZWNpc2lvbiBERU5PUk0sIHRoZSBVTkZMIGV4Y2VwdGlvbiBiaXQgaXMgc2V0CisjIHRoZSBhY2NydWVkIGJpdCBpcyBOT1Qgc2V0IGluIHRoaXMgaW5zdGFuY2Uobm8gaW5leGFjdG5lc3MhKQorIworZmluX2Rlbm9ybToKKwlhbmRpLmIJCSYweGMwLCVkMAkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CisJYm5lLncJCWZpbl9ub3RfZXh0CQkjIG5vLCBzbyBnbyBoYW5kbGUgZGJsIG9yIHNnbAorCisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIHRoZSBvcGVyYW5kIG5lZ2F0aXZlPworCWJwbC5iCQlmaW5fZGVub3JtX2RvbmUJCSMgbm8KKwlic2V0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyB5ZXMsIHNvIHNldCAnTicgY2NvZGUgYml0CitmaW5fZGVub3JtX2RvbmU6CisJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlidHN0CQkmdW5mbF9iaXQsRlBDUl9FTkFCTEUoJWE2KSAjIGlzIFVORkwgZW5hYmxlZD8KKwlibmUuYgkJZmluX2Rlbm9ybV91bmZsX2VuYQkjIHllcworCXJ0cworCisjCisjIHRoZSBpbnB1dCBpcyBhbiBleHRlbmRlZCBERU5PUk0gYW5kIHVuZGVyZmxvdyBpcyBlbmFibGVkIGluIHRoZSBGUENSLgorIyBub3JtYWxpemUgdGhlIG1hbnRpc3NhIGFuZCBhZGQgdGhlIGJpYXMgb2YgMHg2MDAwIHRvIHRoZSByZXN1bHRpbmcgbmVnYXRpdmUKKyMgZXhwb25lbnQgYW5kIGluc2VydCBiYWNrIGludG8gdGhlIG9wZXJhbmQuCisjCitmaW5fZGVub3JtX3VuZmxfZW5hOgorCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBvcGVyYW5kCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSByZXN1bHQKKwluZWcudwkJJWQwCQkJIyBuZXcgZXhwb25lbnQgPSAtKHNoZnQgdmFsKQorCWFkZGkudwkJJjB4NjAwMCwlZDAJCSMgYWRkIG5ldyBiaWFzIHRvIGV4cG9uZW50CisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCBvbGQgc2lnbixleHAKKwlhbmRpLncJCSYweDgwMDAsJWQxCQkjIGtlZXAgb2xkIHNpZ24KKwlhbmRpLncJCSYweDdmZmYsJWQwCQkjIGNsZWFyIHNpZ24gcG9zaXRpb24KKwlvci53CQklZDEsJWQwCQkJIyBjb25jYXQgbmV3IGV4byxvbGQgc2lnbgorCW1vdi53CQklZDAsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCXJ0cworCisjCisjIG9wZXJhbmQgaXMgdG8gYmUgcm91bmRlZCB0byBzaW5nbGUgb3IgZG91YmxlIHByZWNpc2lvbgorIworZmluX25vdF9leHQ6CisJY21waS5iCQklZDAsJnNfbW9kZSoweDEwCSMgc2VwYXJhdGUgc2dsL2RibCBwcmVjCisJYm5lLmIJCWZpbl9kYmwKKworIworIyBvcGVyYW5kIGlzIHRvIGJlIHJvdW5kZWQgdG8gc2luZ2xlIHByZWNpc2lvbgorIworZmluX3NnbDoKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwlic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCisKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4M2Y4MAkjIHdpbGwgbW92ZSBpbiB1bmRlcmZsb3c/CisJYmdlLncJCWZpbl9zZF91bmZsCQkjIHllczsgZ28gaGFuZGxlIHVuZGVyZmxvdworCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0MDdlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PworCWJlcS53CQlmaW5fc2RfbWF5X292ZmwJCSMgbWF5YmU7IGdvIGNoZWNrCisJYmx0LncJCWZpbl9zZF9vdmZsCQkjIHllczsgZ28gaGFuZGxlIG92ZXJmbG93CisKKyMKKyMgb3BlcmFuZCB3aWxsIE5PVCBvdmVyZmxvdyBvciB1bmRlcmZsb3cgd2hlbiBtb3ZlZCBpbnRvIHRoZSBmcCByZWcgZmlsZQorIworZmluX3NkX25vcm1hbDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZm1vdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gbW92ZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmaW5fc2Rfbm9ybWFsX2V4aXQ6CisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQge3NnbixleHB9CisJbW92LncJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlvci53CQklZDEsJWQyCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cG9uZW50CisJbW92LncJCSVkMixGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24KKyMKK2Zpbl9kYmw6CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgY2FsY3VsYXRlIHNjYWxlIGZhY3RvcgorCisJY21waS5sCQklZDAsJjB4M2ZmZi0weDNjMDAJIyB3aWxsIG1vdmUgaW4gdW5kZXJmbG93PworCWJnZS53CQlmaW5fc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4NDNmZQkjIHdpbGwgbW92ZSBpbiBvdmVyZmxvdz8KKwliZXEudwkJZmluX3NkX21heV9vdmZsCQkjIG1heWJlOyBnbyBjaGVjaworCWJsdC53CQlmaW5fc2Rfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdworCWJyYS53CQlmaW5fc2Rfbm9ybWFsCQkjIG5vOyBobyBoYW5kbGUgbm9ybWFsaXplZCBvcAorCisjCisjIG9wZXJhbmQgV0lMTCB1bmRlcmZsb3cgd2hlbiBtb3ZlZCBpbiB0byB0aGUgZnAgcmVnaXN0ZXIgZmlsZQorIworZmluX3NkX3VuZmw6CisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CisKKwl0c3QuYgkJRlBfU0NSMF9FWCglYTYpCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CisJYnBsLmIJCWZpbl9zZF91bmZsX3RzdAorCWJzZXQJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIHNldCAnTicgY2NvZGUgYml0CisKKyMgaWYgdW5kZXJmbG93IG9yIGluZXhhY3QgaXMgZW5hYmxlZCwgdGhlbiBnbyBjYWxjdWxhdGUgdGhlIEVYT1AgZmlyc3QuCitmaW5fc2RfdW5mbF90c3Q6CisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgwYiwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZpbl9zZF91bmZsX2VuYQkJIyB5ZXMKKworZmluX3NkX3VuZmxfZGlzOgorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyB1bmZfcmVzIG1heSBoYXZlIHNldCAnWicKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgb3BlcmFuZCB3aWxsIHVuZGVyZmxvdyBBTkQgdW5kZXJmbG93IG9yIGluZXhhY3QgaXMgZW5hYmxlZC4KKyMgdGhlcmVmb3JlLCB3ZSBtdXN0IHJldHVybiB0aGUgcmVzdWx0IHJvdW5kZWQgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uLgorIworZmluX3NkX3VuZmxfZW5hOgorCW1vdi5sCQlGUF9TQ1IwX0hJKCVhNiksRlBfU0NSMV9ISSglYTYpCisJbW92LmwJCUZQX1NDUjBfTE8oJWE2KSxGUF9TQ1IxX0xPKCVhNikKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQgY3VycmVudCBleHBvbmVudAorCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi53CQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBzdWJ0cmFjdCBzY2FsZSBmYWN0b3IKKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGV4dHJhY3Qgb2xkIHNpZ24KKwlhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBuZXcgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEKKwlvci53CQklZDEsJWQyCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDIsRlBfU0NSMV9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlicmEuYgkJZmluX3NkX3VuZmxfZGlzCisKKyMKKyMgb3BlcmFuZCBXSUxMIG92ZXJmbG93LgorIworZmluX3NkX292Zmw6CisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworCWZtb3YueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIG1vdmUKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworZmluX3NkX292ZmxfdHN0OgorCW9yLmwJCSZvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmaW5fc2Rfb3ZmbF9lbmEJCSMgeWVzCisKKyMKKyMgT1ZGTCBpcyBub3QgZW5hYmxlZDsgdGhlcmVmb3JlLCB3ZSBtdXN0IGNyZWF0ZSB0aGUgZGVmYXVsdCByZXN1bHQgYnkKKyMgY2FsbGluZyBvdmZfcmVzKCkuCisjCitmaW5fc2Rfb3ZmbF9kaXM6CisJYnRzdAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgaXMgcmVzdWx0IG5lZ2F0aXZlPworCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzczogcHJlYyxtb2RlCisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQorCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBPVkZMIGlzIGVuYWJsZWQuCisjIHRoZSBJTkVYMiBiaXQgaGFzIGFscmVhZHkgYmVlbiB1cGRhdGVkIGJ5IHRoZSByb3VuZCB0byB0aGUgY29ycmVjdCBwcmVjaXNpb24uCisjIG5vdywgcm91bmQgdG8gZXh0ZW5kZWQoYW5kIGRvbid0IGFsdGVyIHRoZSBGUFNSKS4KKyMKK2Zpbl9zZF9vdmZsX2VuYToKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCXN1Yi5sCQkmMHg2MDAwLCVkMQkJIyBzdWJ0cmFjdCBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQorCW9yLncJCSVkMiwlZDEKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJYnJhLmIJCWZpbl9zZF9vdmZsX2RpcworCisjCisjIHRoZSBtb3ZlIGluIE1BWSBvdmVyZmxvdy4gc28uLi4KKyMKK2Zpbl9zZF9tYXlfb3ZmbDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZm1vdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gdGhlIG1vdmUKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCisJZmFicy54CQklZnAwLCVmcDEJCSMgbWFrZSBhIGNvcHkgb2YgcmVzdWx0CisJZmNtcC5iCQklZnAxLCYweDIJCSMgaXMgfHJlc3VsdHwgPj0gMi5iPworCWZiZ2UudwkJZmluX3NkX292ZmxfdHN0CQkjIHllczsgb3ZlcmZsb3cgaGFzIG9jY3VycmVkCisKKyMgbm8sIGl0IGRpZG4ndCBvdmVyZmxvdzsgd2UgaGF2ZSBjb3JyZWN0IHJlc3VsdAorCWJyYS53CQlmaW5fc2Rfbm9ybWFsX2V4aXQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBvcGVyYW5kIGlzIG5vdCBhIE5PUk06IGNoZWNrIGl0cyBvcHR5cGUgYW5kIGJyYW5jaCBhY2NvcmRpbmdseQorIworZmluX25vdF9ub3JtOgorCWNtcGkuYgkJJWQxLCZERU5PUk0JCSMgd2VlZCBvdXQgREVOT1JNCisJYmVxLncJCWZpbl9kZW5vcm0KKwljbXBpLmIJCSVkMSwmU05BTgkJIyB3ZWVkIG91dCBTTkFOcworCWJlcS5sCQlyZXNfc25hbl8xb3AKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyB3ZWVkIG91dCBRTkFOcworCWJlcS5sCQlyZXNfcW5hbl8xb3AKKworIworIyBkbyB0aGUgZm1vdmUgaW47IGF0IHRoaXMgcG9pbnQsIG9ubHkgcG9zc2libGUgb3BzIGFyZSBaRVJPIGFuZCBJTkYuCisjIHVzZSBmbW92IHRvIGRldGVybWluZSBjY29kZXMuCisjIHByZWM6bW9kZSBzaG91bGQgYmUgemVybyBhdCB0aGlzIHBvaW50IGJ1dCBpdCB3b24ndCBhZmZlY3QgYW5zd2VyIGFueXdheXMuCisjCisJZm1vdi54CQlTUkMoJWEwKSwlZnAwCQkjIGRvIGZtb3ZlIGluCisJZm1vdi5sCQklZnBzciwlZDAJCSMgbm8gZXhjZXB0aW9ucyBwb3NzaWJsZQorCXJvbC5sCQkmMHg4LCVkMAkJIyBwdXQgY2NvZGVzIGluIGxvIGJ5dGUKKwltb3YuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIGluc2VydCBjb3JyZWN0IGNjb2RlcworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZkaXYoKTogZW11bGF0ZXMgdGhlIGZkaXYgaW5zdHJ1Y3Rpb24JCQkJIworIwlmc2RpdigpOiBlbXVsYXRlcyB0aGUgZnNkaXYgaW5zdHJ1Y3Rpb24JCQkJIworIwlmZGRpdigpOiBlbXVsYXRlcyB0aGUgZmRkaXYgaW5zdHJ1Y3Rpb24JCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJc2NhbGVfdG9femVyb19zcmMoKSAtIHNjYWxlIHNyYyBleHBvbmVudCB0byB6ZXJvCQkjCisjCXNjYWxlX3RvX3plcm9fZHN0KCkgLSBzY2FsZSBkc3QgZXhwb25lbnQgdG8gemVybwkJIworIwl1bmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CQkJIworIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCisjCXJlc19xbmFuKCkgLSByZXR1cm4gUU5BTiByZXN1bHQJCQkJCSMKKyMJcmVzX3NuYW4oKSAtIHJldHVybiBTTkFOIHJlc3VsdAkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlhMSA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGRlc3RpbmF0aW9uIG9wZXJhbmQJCSMKKyMJZDAgIHJuZCBwcmVjLG1vZGUJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSByZXN1bHQJCQkJCQkJIworIwlmcDEgPSBFWE9QIChpZiBleGNlcHRpb24gb2NjdXJyZWQpCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUhhbmRsZSBOQU5zLCBpbmZpbml0aWVzLCBhbmQgemVyb2VzIGFzIHNwZWNpYWwgY2FzZXMuIERpdmlkZQkjCisjIG5vcm1zL2Rlbm9ybXMgaW50byBleHQvc2dsL2RibCBwcmVjaXNpb24uCQkJCSMKKyMJRm9yIG5vcm1zL2Rlbm9ybXMsIHNjYWxlIHRoZSBleHBvbmVudHMgc3VjaCB0aGF0IGEgZGl2aWRlCSMKKyMgaW5zdHJ1Y3Rpb24gd29uJ3QgY2F1c2UgYW4gZXhjZXB0aW9uLiBVc2UgdGhlIHJlZ3VsYXIgZmRpdiB0bwkJIworIyBjb21wdXRlIGEgcmVzdWx0LiBDaGVjayBpZiB0aGUgcmVndWxhciBvcGVyYW5kcyB3b3VsZCBoYXZlIHRha2VuCSMKKyMgYW4gZXhjZXB0aW9uLiBJZiBzbywgcmV0dXJuIHRoZSBkZWZhdWx0IG92ZXJmbG93L3VuZGVyZmxvdyByZXN1bHQJIworIyBhbmQgcmV0dXJuIHRoZSBFWE9QIGlmIGV4Y2VwdGlvbnMgYXJlIGVuYWJsZWQuIEVsc2UsIHNjYWxlIHRoZQkjCisjIHJlc3VsdCBvcGVyYW5kIHRvIHRoZSBwcm9wZXIgZXhwb25lbnQuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlhbGlnbgkJMHgxMAordGJsX2ZkaXZfdW5mbDoKKwlsb25nCQkweDNmZmYgLSAweDAwMDAJCSMgZXh0X3VuZmwKKwlsb25nCQkweDNmZmYgLSAweDNmODEJCSMgc2dsX3VuZmwKKwlsb25nCQkweDNmZmYgLSAweDNjMDEJCSMgZGJsX3VuZmwKKwordGJsX2ZkaXZfb3ZmbDoKKwlsb25nCQkweDNmZmYgLSAweDdmZmUJCSMgZXh0IG92ZXJmbG93IGV4cG9uZW50CisJbG9uZwkJMHgzZmZmIC0gMHg0MDdlCQkjIHNnbCBvdmVyZmxvdyBleHBvbmVudAorCWxvbmcJCTB4M2ZmZiAtIDB4NDNmZQkJIyBkYmwgb3ZlcmZsb3cgZXhwb25lbnQKKworCWdsb2JhbAkJZnNkaXYKK2ZzZGl2OgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWMKKwlicmEuYgkJZmRpdgorCisJZ2xvYmFsCQlmZGRpdgorZmRkaXY6CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKKwlvcmkuYgkJJmRfbW9kZSoweDEwLCVkMAkjIGluc2VydCBkYmwgcHJlYworCisJZ2xvYmFsCQlmZGl2CitmZGl2OgorCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KKworCWNsci53CQklZDEKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWxzbC5iCQkmMHgzLCVkMQorCW9yLmIJCVNUQUcoJWE2KSwlZDEJCSMgY29tYmluZSBzcmMgdGFncworCisJYm5lLncJCWZkaXZfbm90X25vcm0JCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworIworIyBESVZJREU6IE5PUk1zIGFuZCBERU5PUk1zIE9OTFkhCisjCitmZGl2X25vcm06CisJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjFfRVgoJWE2KQorCW1vdi5sCQlEU1RfSEkoJWExKSxGUF9TQ1IxX0hJKCVhNikKKwltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMV9MTyglYTYpCisKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKworCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIHNjYWxlIHNyYyBleHBvbmVudAorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgc2NhbGUgZmFjdG9yIDEKKworCWJzci5sCQlzY2FsZV90b196ZXJvX2RzdAkjIHNjYWxlIGRzdCBleHBvbmVudAorCisJbmVnLmwJCSglc3ApCQkJIyBTQ0FMRSBGQUNUT1IgPSBzY2FsZTEgLSBzY2FsZTIKKwlhZGQubAkJJWQwLCglc3ApCisKKwltb3YudwkJMitMX1NDUjMoJWE2KSwlZDEJIyBmZXRjaCBwcmVjaXNpb24KKwlsc3IuYgkJJjB4NiwlZDEJCSMgc2hpZnQgdG8gbG8gYml0cworCW1vdi5sCQkoJXNwKSssJWQwCQkjIGxvYWQgUy5GLgorCWNtcC5sCQklZDAsKHRibF9mZGl2X292ZmwuYiwlcGMsJWQxLncqNCkgIyB3aWxsIHJlc3VsdCBvdmVyZmxvdz8KKwlibGUudwkJZmRpdl9tYXlfb3ZmbAkJIyByZXN1bHQgd2lsbCBvdmVyZmxvdworCisJY21wLmwJCSVkMCwodGJsX2ZkaXZfdW5mbC53LCVwYywlZDEudyo0KSAjIHdpbGwgcmVzdWx0IHVuZGVyZmxvdz8KKwliZXEudwkJZmRpdl9tYXlfdW5mbAkJIyBtYXliZQorCWJndC53CQlmZGl2X3VuZmwJCSMgeWVzOyBnbyBoYW5kbGUgdW5kZXJmbG93CisKK2ZkaXZfbm9ybWFsOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2F2ZSBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZkaXYueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIGRpdmlkZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmZGl2X25vcm1hbF9leGl0OgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIHJlc3VsdCBvbiBzdGFjaworCW1vdi5sCQklZDIsLSglc3ApCQkjIHN0b3JlIGQyCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBsb2FkIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlydHMKKwordGJsX2ZkaXZfb3ZmbDI6CisJbG9uZwkJMHg3ZmZmCisJbG9uZwkJMHg0MDdmCisJbG9uZwkJMHg0M2ZmCisKK2ZkaXZfbm9fb3ZmbDoKKwltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIHNjYWxlIGZhY3RvcgorCWJyYS5iCQlmZGl2X25vcm1hbF9leGl0CisKK2ZkaXZfbWF5X292Zmw6CisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzY2FsZSBmYWN0b3IKKworCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgc2V0IEZQU1IKKworCWZkaXYueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIGRpdmlkZQorCisJZm1vdi5sCQklZnBzciwlZDAKKwlmbW92LmwJCSYweDAsJWZwY3IKKworCW9yLmwJCSVkMCxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWCxOCisKKwlmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSByZXN1bHQgdG8gc3RhY2sKKwltb3YudwkJKCVzcCksJWQwCQkjIGZldGNoIG5ldyBleHBvbmVudAorCWFkZC5sCQkmMHhjLCVzcAkJIyBjbGVhciByZXN1bHQgZnJvbSBzdGFjaworCWFuZGkubAkJJjB4N2ZmZiwlZDAJCSMgc3RyaXAgc2lnbgorCXN1Yi5sCQkoJXNwKSwlZDAJCSMgYWRkIHNjYWxlIGZhY3RvcgorCWNtcC5sCQklZDAsKHRibF9mZGl2X292ZmwyLmIsJXBjLCVkMS53KjQpCisJYmx0LmIJCWZkaXZfbm9fb3ZmbAorCW1vdi5sCQkoJXNwKSssJWQwCisKK2ZkaXZfb3ZmbF90c3Q6CisJb3IubAkJJm92ZmxfaW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAorCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgxMywlZDEJCSMgaXMgT1ZGTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZkaXZfb3ZmbF9lbmEJCSMgeWVzCisKK2ZkaXZfb3ZmbF9kaXM6CisJYnRzdAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgaXMgcmVzdWx0IG5lZ2F0aXZlPworCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzcyBwcmVjOnJuZAorCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IElORiBpZiBhcHBsaWNhYmxlCisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCitmZGl2X292ZmxfZW5hOgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CisJYm5lLmIJCWZkaXZfb3ZmbF9lbmFfc2QJIyBubywgZG8gc2dsIG9yIGRibAorCitmZGl2X292ZmxfZW5hX2NvbnQ6CisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgbW92ZSByZXN1bHQgdG8gc3RhY2sKKworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi53CQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJc3ViaS5sCQkmMHg2MDAwLCVkMQkJIyBzdWJ0cmFjdCBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQkJIyBjbGVhciBzaWduIGJpdAorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCWJyYS5iCQlmZGl2X292ZmxfZGlzCisKK2ZkaXZfb3ZmbF9lbmFfc2Q6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3BlcmFuZAorCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4MzAsJWQxCQkjIGtlZXAgcm5kIG1vZGUKKwlmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgorCisJZmRpdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgZGl2aWRlCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWJyYS5iCQlmZGl2X292ZmxfZW5hX2NvbnQKKworZmRpdl91bmZsOgorCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZmwgZXhjIGJpdAorCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJJnJ6X21vZGUqMHgxMCwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZkaXYueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIGRpdmlkZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZmRpdl91bmZsX2VuYQkJIyB5ZXMKKworZmRpdl91bmZsX2RpczoKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0CisKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiByZXN1bHQgYWRkcgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEJCSMgcGFzczogcm5kIHByZWMsbW9kZQorCWJzci5sCQl1bmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgJ1onIG1heSBoYXZlIGJlZW4gc2V0CisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIFVORkwgaXMgZW5hYmxlZC4KKyMKK2ZkaXZfdW5mbF9lbmE6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AKKworCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CisJYm5lLmIJCWZkaXZfdW5mbF9lbmFfc2QJIyBubywgc2dsIG9yIGRibAorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKK2ZkaXZfdW5mbF9lbmFfY29udDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZmRpdi54CQlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgZGl2aWRlCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJZm1vdm0ueAkJJjB4NDAsRlBfU0NSMCglYTYpCSMgc2F2ZSByZXN1bHQgdG8gc3RhY2sKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvZXIKKwlhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlicmEudwkJZmRpdl91bmZsX2RpcworCitmZGl2X3VuZmxfZW5hX3NkOgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDMwLCVkMQkJIyB1c2Ugb25seSBybmQgbW9kZQorCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisKKwlicmEuYgkJZmRpdl91bmZsX2VuYV9jb250CisKKyMKKyMgdGhlIGRpdmlkZSBvcGVyYXRpb24gTUFZIHVuZGVyZmxvdzoKKyMKK2ZkaXZfbWF5X3VuZmw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmZGl2LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBkaXZpZGUKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCisJZmFicy54CQklZnAwLCVmcDEJCSMgbWFrZSBhIGNvcHkgb2YgcmVzdWx0CisJZmNtcC5iCQklZnAxLCYweDEJCSMgaXMgfHJlc3VsdHwgPiAxLmI/CisJZmJndC53CQlmZGl2X25vcm1hbF9leGl0CSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCWZibHQudwkJZmRpdl91bmZsCQkjIHllczsgdW5kZXJmbG93IG9jY3VycmVkCisKKyMKKyMgd2Ugc3RpbGwgZG9uJ3Qga25vdyBpZiB1bmRlcmZsb3cgb2NjdXJyZWQuIHJlc3VsdCBpcyB+IGVxdWFsIHRvIDEuIGJ1dCwKKyMgd2UgZG9uJ3Qga25vdyBpZiB0aGUgcmVzdWx0IHdhcyBhbiB1bmRlcmZsb3cgdGhhdCByb3VuZGVkIHVwIHRvIGEgMQorIyBvciBhIG5vcm1hbGl6ZWQgbnVtYmVyIHRoYXQgcm91bmRlZCBkb3duIHRvIGEgMS4gc28sIHJlZG8gdGhlIGVudGlyZQorIyBvcGVyYXRpb24gdXNpbmcgUlogYXMgdGhlIHJvdW5kaW5nIG1vZGUgdG8gc2VlIHdoYXQgdGhlIHByZS1yb3VuZGVkCisjIHJlc3VsdCBpcy4gdGhpcyBjYXNlIHNob3VsZCBiZSByZWxhdGl2ZWx5IHJhcmUuCisjCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AgaW50byBmcDEKKworCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBrZWVwIHJuZCBwcmVjCisJb3JpLmIJCSZyel9tb2RlKjB4MTAsJWQxCSMgaW5zZXJ0IFJaCisKKwlmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmZGl2LngJCUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBkaXZpZGUKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZmFicy54CQklZnAxCQkJIyBtYWtlIGFic29sdXRlIHZhbHVlCisJZmNtcC5iCQklZnAxLCYweDEJCSMgaXMgfHJlc3VsdHwgPCAxLmI/CisJZmJnZS53CQlmZGl2X25vcm1hbF9leGl0CSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCWJyYS53CQlmZGl2X3VuZmwJCSMgeWVzOyB1bmRlcmZsb3cgb2NjdXJyZWQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIERpdmlkZTogaW5wdXRzIGFyZSBub3QgYm90aCBub3JtYWxpemVkOyB3aGF0IGFyZSB0aGV5PworIworZmRpdl9ub3Rfbm9ybToKKwltb3YudwkJKHRibF9mZGl2X29wLmIsJXBjLCVkMS53KjIpLCVkMQorCWptcAkJKHRibF9mZGl2X29wLmIsJXBjLCVkMS53KjEpCisKKwlzd2JlZwkJJjQ4Cit0YmxfZmRpdl9vcDoKKwlzaG9ydAkJZmRpdl9ub3JtCS0gdGJsX2ZkaXZfb3AgIyBOT1JNIC8gTk9STQorCXNob3J0CQlmZGl2X2luZl9sb2FkCS0gdGJsX2ZkaXZfb3AgIyBOT1JNIC8gWkVSTworCXNob3J0CQlmZGl2X3plcm9fbG9hZAktIHRibF9mZGl2X29wICMgTk9STSAvIElORgorCXNob3J0CQlmZGl2X3Jlc19xbmFuCS0gdGJsX2ZkaXZfb3AgIyBOT1JNIC8gUU5BTgorCXNob3J0CQlmZGl2X25vcm0JLSB0YmxfZmRpdl9vcCAjIE5PUk0gLyBERU5PUk0KKwlzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgTk9STSAvIFNOQU4KKwlzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCisJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIworCisJc2hvcnQJCWZkaXZfemVyb19sb2FkCS0gdGJsX2ZkaXZfb3AgIyBaRVJPIC8gTk9STQorCXNob3J0CQlmZGl2X3Jlc19vcGVycgktIHRibF9mZGl2X29wICMgWkVSTyAvIFpFUk8KKwlzaG9ydAkJZmRpdl96ZXJvX2xvYWQJLSB0YmxfZmRpdl9vcCAjIFpFUk8gLyBJTkYKKwlzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgWkVSTyAvIFFOQU4KKwlzaG9ydAkJZmRpdl96ZXJvX2xvYWQJLSB0YmxfZmRpdl9vcCAjIFpFUk8gLyBERU5PUk0KKwlzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgWkVSTyAvIFNOQU4KKwlzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCisJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIworCisJc2hvcnQJCWZkaXZfaW5mX2RzdAktIHRibF9mZGl2X29wICMgSU5GIC8gTk9STQorCXNob3J0CQlmZGl2X2luZl9kc3QJLSB0YmxfZmRpdl9vcCAjIElORiAvIFpFUk8KKwlzaG9ydAkJZmRpdl9yZXNfb3BlcnIJLSB0YmxfZmRpdl9vcCAjIElORiAvIElORgorCXNob3J0CQlmZGl2X3Jlc19xbmFuCS0gdGJsX2ZkaXZfb3AgIyBJTkYgLyBRTkFOCisJc2hvcnQJCWZkaXZfaW5mX2RzdAktIHRibF9mZGl2X29wICMgSU5GIC8gREVOT1JNCisJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIElORiAvIFNOQU4KKwlzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCisJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIworCisJc2hvcnQJCWZkaXZfcmVzX3FuYW4JLSB0YmxfZmRpdl9vcCAjIFFOQU4gLyBOT1JNCisJc2hvcnQJCWZkaXZfcmVzX3FuYW4JLSB0YmxfZmRpdl9vcCAjIFFOQU4gLyBaRVJPCisJc2hvcnQJCWZkaXZfcmVzX3FuYW4JLSB0YmxfZmRpdl9vcCAjIFFOQU4gLyBJTkYKKwlzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgUU5BTiAvIFFOQU4KKwlzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgUU5BTiAvIERFTk9STQorCXNob3J0CQlmZGl2X3Jlc19zbmFuCS0gdGJsX2ZkaXZfb3AgIyBRTkFOIC8gU05BTgorCXNob3J0CQl0YmxfZmRpdl9vcAktIHRibF9mZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCisKKwlzaG9ydAkJZmRpdl9ub3JtCS0gdGJsX2ZkaXZfb3AgIyBERU5PUk0gLyBOT1JNCisJc2hvcnQJCWZkaXZfaW5mX2xvYWQJLSB0YmxfZmRpdl9vcCAjIERFTk9STSAvIFpFUk8KKwlzaG9ydAkJZmRpdl96ZXJvX2xvYWQJLSB0YmxfZmRpdl9vcCAjIERFTk9STSAvIElORgorCXNob3J0CQlmZGl2X3Jlc19xbmFuCS0gdGJsX2ZkaXZfb3AgIyBERU5PUk0gLyBRTkFOCisJc2hvcnQJCWZkaXZfbm9ybQktIHRibF9mZGl2X29wICMgREVOT1JNIC8gREVOT1JNCisJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIERFTk9STSAvIFNOQU4KKwlzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCisJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIworCisJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIFNOQU4gLyBOT1JNCisJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIFNOQU4gLyBaRVJPCisJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIFNOQU4gLyBJTkYKKwlzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgU05BTiAvIFFOQU4KKwlzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgU05BTiAvIERFTk9STQorCXNob3J0CQlmZGl2X3Jlc19zbmFuCS0gdGJsX2ZkaXZfb3AgIyBTTkFOIC8gU05BTgorCXNob3J0CQl0YmxfZmRpdl9vcAktIHRibF9mZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCisKK2ZkaXZfcmVzX3FuYW46CisJYnJhLmwJCXJlc19xbmFuCitmZGl2X3Jlc19zbmFuOgorCWJyYS5sCQlyZXNfc25hbgorZmRpdl9yZXNfb3BlcnI6CisJYnJhLmwJCXJlc19vcGVycgorCisJZ2xvYmFsCQlmZGl2X3plcm9fbG9hZAkJIyBnbG9iYWwgZm9yIGZzZ2xkaXYKK2ZkaXZfemVyb19sb2FkOgorCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDAJCSMgcmVzdWx0IHNpZ24gaXMgZXhjbHVzaXZlCisJbW92LmIJCURTVF9FWCglYTEpLCVkMQkJIyBvciBvZiBpbnB1dCBzaWducy4KKwllb3IuYgkJJWQwLCVkMQorCWJwbC5iCQlmZGl2X3plcm9fbG9hZF9wCSMgcmVzdWx0IGlzIHBvc2l0aXZlCisJZm1vdi5zCQkmMHg4MDAwMDAwMCwlZnAwCSMgbG9hZCBhIC1aRVJPCisJbW92LmIJCSZ6X2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgWi9OCisJcnRzCitmZGl2X3plcm9fbG9hZF9wOgorCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIGxvYWQgYSArWkVSTworCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgWgorCXJ0cworCisjCisjIFRoZSBkZXN0aW5hdGlvbiB3YXMgSW4gUmFuZ2UgYW5kIHRoZSBzb3VyY2Ugd2FzIGEgWkVSTy4gVGhlIHJlc3VsdCwKKyMgdGhlcmVmb3JlLCBpcyBhbiBJTkYgdy8gdGhlIHByb3BlciBzaWduLgorIyBTbywgZGV0ZXJtaW5lIHRoZSBzaWduIGFuZCByZXR1cm4gYSBuZXcgSU5GICh3LyB0aGUgai1iaXQgY2xlYXJlZCkuCisjCisJZ2xvYmFsCQlmZGl2X2luZl9sb2FkCQkjIGdsb2JhbCBmb3IgZnNnbGRpdgorZmRpdl9pbmZfbG9hZDoKKwlvcmkudwkJJmR6X21hc2srYWR6X21hc2ssMitVU0VSX0ZQU1IoJWE2KSAjIG5vOyBzZXQgRFovQURaCisJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBsb2FkIGJvdGggc2lnbnMKKwltb3YuYgkJRFNUX0VYKCVhMSksJWQxCisJZW9yLmIJCSVkMCwlZDEKKwlicGwuYgkJZmRpdl9pbmZfbG9hZF9wCQkjIHJlc3VsdCBpcyBwb3NpdGl2ZQorCWZtb3YucwkJJjB4ZmY4MDAwMDAsJWZwMAkjIG1ha2UgcmVzdWx0IC1JTkYKKwltb3YuYgkJJmluZl9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IElORi9OCisJcnRzCitmZGl2X2luZl9sb2FkX3A6CisJZm1vdi5zCQkmMHg3ZjgwMDAwMCwlZnAwCSMgbWFrZSByZXN1bHQgK0lORgorCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYKKwlydHMKKworIworIyBUaGUgZGVzdGluYXRpb24gd2FzIGFuIElORiB3LyBhbiBJbiBSYW5nZSBvciBaRVJPIHNvdXJjZSwgdGhlIHJlc3VsdCBpcworIyBhbiBJTkYgdy8gdGhlIHByb3BlciBzaWduLgorIyBUaGUgNjg4ODEvODgyIHJldHVybnMgdGhlIGRlc3RpbmF0aW9uIElORiB3LyB0aGUgbmV3IHNpZ24oaWYgdGhlIGotYml0IG9mIHRoZQorIyBkc3QgSU5GIGlzIHNldCwgdGhlbiB0aGVuIGotYml0IG9mIHRoZSByZXN1bHQgSU5GIGlzIGFsc28gc2V0KS4KKyMKKwlnbG9iYWwJCWZkaXZfaW5mX2RzdAkJIyBnbG9iYWwgZm9yIGZzZ2xkaXYKK2ZkaXZfaW5mX2RzdDoKKwltb3YuYgkJRFNUX0VYKCVhMSksJWQwCQkjIGxvYWQgYm90aCBzaWducworCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDEKKwllb3IuYgkJJWQwLCVkMQorCWJwbC5iCQlmZGl2X2luZl9kc3RfcAkJIyByZXN1bHQgaXMgcG9zaXRpdmUKKworCWZtb3ZtLngJCURTVCglYTEpLCYweDgwCQkjIHJldHVybiByZXN1bHQgaW4gZnAwCisJZmFicy54CQklZnAwCQkJIyBjbGVhciBzaWduIGJpdAorCWZuZWcueAkJJWZwMAkJCSMgc2V0IHNpZ24gYml0CisJbW92LmIJCSZpbmZfYm1hc2srbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCBJTkYvTkVHCisJcnRzCisKK2ZkaXZfaW5mX2RzdF9wOgorCWZtb3ZtLngJCURTVCglYTEpLCYweDgwCQkjIHJldHVybiByZXN1bHQgaW4gZnAwCisJZmFicy54CQklZnAwCQkJIyByZXR1cm4gcG9zaXRpdmUgSU5GCisJbW92LmIJCSZpbmZfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IElORgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZuZWcoKTogZW11bGF0ZXMgdGhlIGZuZWcgaW5zdHJ1Y3Rpb24JCQkJIworIwlmc25lZygpOiBlbXVsYXRlcyB0aGUgZnNuZWcgaW5zdHJ1Y3Rpb24JCQkJIworIwlmZG5lZygpOiBlbXVsYXRlcyB0aGUgZmRuZWcgaW5zdHJ1Y3Rpb24JCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJbm9ybSgpIC0gbm9ybWFsaXplIGEgZGVub3JtIHRvIHByb3ZpZGUgRVhPUAkJCSMKKyMJc2NhbGVfdG9femVyb19zcmMoKSAtIHNjYWxlIHNnbC9kYmwgc291cmNlIGV4cG9uZW50CQkjCisjCW92Zl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdAkJCSMKKyMJdW5mX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdAkJCSMKKyMJcmVzX3FuYW5fMW9wKCkgLSByZXR1cm4gUU5BTiByZXN1bHQJCQkJIworIwlyZXNfc25hbl8xb3AoKSAtIHJldHVybiBTTkFOIHJlc3VsdAkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCisjCWQwID0gcm5kIHByZWMsbW9kZQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IHJlc3VsdAkJCQkJCQkjCisjCWZwMSA9IEVYT1AgKGlmIGV4Y2VwdGlvbiBvY2N1cnJlZCkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSGFuZGxlIE5BTnMsIHplcm9lcywgYW5kIGluZmluaXRpZXMgYXMgc3BlY2lhbCBjYXNlcy4gU2VwYXJhdGUJIworIyBub3Jtcy9kZW5vcm1zIGludG8gZXh0L3NnbC9kYmwgcHJlY2lzaW9ucy4gRXh0ZW5kZWQgcHJlY2lzaW9uIGNhbiBiZQkjCisjIGVtdWxhdGVkIGJ5IHNpbXBseSBzZXR0aW5nIHNpZ24gYml0LiBTZ2wvZGJsIG9wZXJhbmRzIG11c3QgYmUgc2NhbGVkCSMKKyMgYW5kIGFuIGFjdHVhbCBmbmVnIHBlcmZvcm1lZCB0byBzZWUgaWYgb3ZlcmZsb3cvdW5kZXJmbG93IHdvdWxkIGhhdmUJIworIyBvY2N1cnJlZC4gSWYgc28sIHJldHVybiBkZWZhdWx0IHVuZGVyZmxvdy9vdmVyZmxvdyByZXN1bHQuIEVsc2UsCSMKKyMgc2NhbGUgdGhlIHJlc3VsdCBleHBvbmVudCBhbmQgcmV0dXJuIHJlc3VsdC4gRlBTUiBnZXRzIHNldCBiYXNlZCBvbgkjCisjIHRoZSByZXN1bHQgdmFsdWUuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZzbmVnCitmc25lZzoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmc19tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IHNnbCBwcmVjaXNpb24KKwlicmEuYgkJZm5lZworCisJZ2xvYmFsCQlmZG5lZworZmRuZWc6CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKKwlvcmkuYgkJJmRfbW9kZSoweDEwLCVkMAkjIGluc2VydCBkYmwgcHJlYworCisJZ2xvYmFsCQlmbmVnCitmbmVnOgorCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJuZS53CQlmbmVnX25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CisKKyMKKyMgTkVHQVRFIFNJR04gOiBub3JtcyBhbmQgZGVub3JtcyBPTkxZIQorIworZm5lZ19ub3JtOgorCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUudwkJZm5lZ19ub3RfZXh0CQkjIG5vOyBnbyBoYW5kbGUgc2dsIG9yIGRibAorCisjCisjIHByZWNpc2lvbiBzZWxlY3RlZCBpcyBleHRlbmRlZC4gc28uLi53ZSBjYW4gbm90IGdldCBhbiB1bmRlcmZsb3cKKyMgb3Igb3ZlcmZsb3cgYmVjYXVzZSBvZiByb3VuZGluZyB0byB0aGUgY29ycmVjdCBwcmVjaXNpb24uIHNvLi4uCisjIHNraXAgdGhlIHNjYWxpbmcgYW5kIHVuc2NhbGluZy4uLgorIworCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJbW92LncJCVNSQ19FWCglYTApLCVkMAorCWVvcmkudwkJJjB4ODAwMCwlZDAJCSMgbmVnYXRlIHNpZ24KKwlicGwuYgkJZm5lZ19ub3JtX2xvYWQJCSMgc2lnbiBpcyBwb3NpdGl2ZQorCW1vdi5iCQkmbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnTicgY2NvZGUgYml0CitmbmVnX25vcm1fbG9hZDoKKwltb3YudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgZm9yIGFuIGV4dGVuZGVkIHByZWNpc2lvbiBERU5PUk0sIHRoZSBVTkZMIGV4Y2VwdGlvbiBiaXQgaXMgc2V0CisjIHRoZSBhY2NydWVkIGJpdCBpcyBOT1Qgc2V0IGluIHRoaXMgaW5zdGFuY2Uobm8gaW5leGFjdG5lc3MhKQorIworZm5lZ19kZW5vcm06CisJYW5kaS5iCQkmMHhjMCwlZDAJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPworCWJuZS5iCQlmbmVnX25vdF9leHQJCSMgbm87IGdvIGhhbmRsZSBzZ2wgb3IgZGJsCisKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKworCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJbW92LncJCVNSQ19FWCglYTApLCVkMAorCWVvcmkudwkJJjB4ODAwMCwlZDAJCSMgbmVnYXRlIHNpZ24KKwlicGwuYgkJZm5lZ19kZW5vcm1fZG9uZQkjIG5vCisJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgeWVzLCBzZXQgJ04nIGNjb2RlIGJpdAorZm5lZ19kZW5vcm1fZG9uZToKKwltb3YudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKworCWJ0c3QJCSZ1bmZsX2JpdCxGUENSX0VOQUJMRSglYTYpICMgaXMgVU5GTCBlbmFibGVkPworCWJuZS5iCQlmbmVnX2V4dF91bmZsX2VuYQkjIHllcworCXJ0cworCisjCisjIHRoZSBpbnB1dCBpcyBhbiBleHRlbmRlZCBERU5PUk0gYW5kIHVuZGVyZmxvdyBpcyBlbmFibGVkIGluIHRoZSBGUENSLgorIyBub3JtYWxpemUgdGhlIG1hbnRpc3NhIGFuZCBhZGQgdGhlIGJpYXMgb2YgMHg2MDAwIHRvIHRoZSByZXN1bHRpbmcgbmVnYXRpdmUKKyMgZXhwb25lbnQgYW5kIGluc2VydCBiYWNrIGludG8gdGhlIG9wZXJhbmQuCisjCitmbmVnX2V4dF91bmZsX2VuYToKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gb3BlcmFuZAorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgcmVzdWx0CisJbmVnLncJCSVkMAkJCSMgbmV3IGV4cG9uZW50ID0gLShzaGZ0IHZhbCkKKwlhZGRpLncJCSYweDYwMDAsJWQwCQkjIGFkZCBuZXcgYmlhcyB0byBleHBvbmVudAorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2ggb2xkIHNpZ24sZXhwCisJYW5kaS53CQkmMHg4MDAwLCVkMQkJIyBrZWVwIG9sZCBzaWduCisJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBjbGVhciBzaWduIHBvc2l0aW9uCisJb3IudwkJJWQxLCVkMAkJCSMgY29uY2F0IG9sZCBzaWduLCBuZXcgZXhwb25lbnQKKwltb3YudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlydHMKKworIworIyBvcGVyYW5kIGlzIGVpdGhlciBzaW5nbGUgb3IgZG91YmxlCisjCitmbmVnX25vdF9leHQ6CisJY21waS5iCQklZDAsJnNfbW9kZSoweDEwCSMgc2VwYXJhdGUgc2dsL2RibCBwcmVjCisJYm5lLmIJCWZuZWdfZGJsCisKKyMKKyMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIHNpbmdsZSBwcmVjaXNpb24KKyMKK2ZuZWdfc2dsOgorCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIGNhbGN1bGF0ZSBzY2FsZSBmYWN0b3IKKworCWNtcGkubAkJJWQwLCYweDNmZmYtMHgzZjgwCSMgd2lsbCBtb3ZlIGluIHVuZGVyZmxvdz8KKwliZ2UudwkJZm5lZ19zZF91bmZsCQkjIHllczsgZ28gaGFuZGxlIHVuZGVyZmxvdworCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0MDdlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PworCWJlcS53CQlmbmVnX3NkX21heV9vdmZsCSMgbWF5YmU7IGdvIGNoZWNrCisJYmx0LncJCWZuZWdfc2Rfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdworCisjCisjIG9wZXJhbmQgd2lsbCBOT1Qgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IHdoZW4gbW92ZWQgaW4gdG8gdGhlIGZwIHJlZyBmaWxlCisjCitmbmVnX3NkX25vcm1hbDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZm5lZy54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gbmVnYXRpb24KKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgorCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworZm5lZ19zZF9ub3JtYWxfZXhpdDoKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCBzZ24sZXhwCisJbW92LncJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlvci53CQklZDEsJWQyCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDIsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIG9wZXJhbmQgaXMgdG8gYmUgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uCisjCitmbmVnX2RibDoKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwlic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCisKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4M2MwMAkjIHdpbGwgbW92ZSBpbiB1bmRlcmZsb3c/CisJYmdlLmIJCWZuZWdfc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4NDNmZQkjIHdpbGwgbW92ZSBpbiBvdmVyZmxvdz8KKwliZXEudwkJZm5lZ19zZF9tYXlfb3ZmbAkjIG1heWJlOyBnbyBjaGVjaworCWJsdC53CQlmbmVnX3NkX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKKwlicmEudwkJZm5lZ19zZF9ub3JtYWwJCSMgbm87IGhvIGhhbmRsZSBub3JtYWxpemVkIG9wCisKKyMKKyMgb3BlcmFuZCBXSUxMIHVuZGVyZmxvdyB3aGVuIG1vdmVkIGluIHRvIHRoZSBmcCByZWdpc3RlciBmaWxlCisjCitmbmVnX3NkX3VuZmw6CisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CisKKwllb3JpLmIJCSYweDgwLEZQX1NDUjBfRVgoJWE2KQkjIG5lZ2F0ZSBzaWduCisJYnBsLmIJCWZuZWdfc2RfdW5mbF90c3QKKwlic2V0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBzZXQgJ04nIGNjb2RlIGJpdAorCisjIGlmIHVuZGVyZmxvdyBvciBpbmV4YWN0IGlzIGVuYWJsZWQsIGdvIGNhbGN1bGF0ZSBFWE9QIGZpcnN0LgorZm5lZ19zZF91bmZsX3RzdDoKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZm5lZ19zZF91bmZsX2VuYQkjIHllcworCitmbmVnX3NkX3VuZmxfZGlzOgorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyB1bmZfcmVzIG1heSBoYXZlIHNldCAnWicKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgb3BlcmFuZCB3aWxsIHVuZGVyZmxvdyBBTkQgdW5kZXJmbG93IGlzIGVuYWJsZWQuCisjIHRoZXJlZm9yZSwgd2UgbXVzdCByZXR1cm4gdGhlIHJlc3VsdCByb3VuZGVkIHRvIGV4dGVuZGVkIHByZWNpc2lvbi4KKyMKK2ZuZWdfc2RfdW5mbF9lbmE6CisJbW92LmwJCUZQX1NDUjBfSEkoJWE2KSxGUF9TQ1IxX0hJKCVhNikKKwltb3YubAkJRlBfU0NSMF9MTyglYTYpLEZQX1NDUjFfTE8oJWE2KQorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCBjdXJyZW50IGV4cG9uZW50CisKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIHN1YnRyYWN0IHNjYWxlIGZhY3RvcgorCWFkZGkubAkJJjB4NjAwMCwlZDEJCSMgYWRkIG5ldyBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBuZXcgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSxGUF9TQ1IxX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cAorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlicmEuYgkJZm5lZ19zZF91bmZsX2RpcworCisjCisjIG9wZXJhbmQgV0lMTCBvdmVyZmxvdy4KKyMKK2ZuZWdfc2Rfb3ZmbDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZm5lZy54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gbmVnYXRpb24KKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworZm5lZ19zZF9vdmZsX3RzdDoKKwlvci5sCQkmb3ZmbF9pbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4CisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDEzLCVkMQkJIyBpcyBPVkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZm5lZ19zZF9vdmZsX2VuYQkjIHllcworCisjCisjIE9WRkwgaXMgbm90IGVuYWJsZWQ7IHRoZXJlZm9yZSwgd2UgbXVzdCBjcmVhdGUgdGhlIGRlZmF1bHQgcmVzdWx0IGJ5CisjIGNhbGxpbmcgb3ZmX3JlcygpLgorIworZm5lZ19zZF9vdmZsX2RpczoKKwlidHN0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBpcyByZXN1bHQgbmVnYXRpdmU/CisJc25lCQklZDEJCQkjIHNldCBzaWduIHBhcmFtIGFjY29yZGluZ2x5CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzOiBwcmVjLG1vZGUKKwlic3IubAkJb3ZmX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0CisJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYsTiBpZiBhcHBsaWNhYmxlCisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIE9WRkwgaXMgZW5hYmxlZC4KKyMgdGhlIElORVgyIGJpdCBoYXMgYWxyZWFkeSBiZWVuIHVwZGF0ZWQgYnkgdGhlIHJvdW5kIHRvIHRoZSBjb3JyZWN0IHByZWNpc2lvbi4KKyMgbm93LCByb3VuZCB0byBleHRlbmRlZChhbmQgZG9uJ3QgYWx0ZXIgdGhlIEZQU1IpLgorIworZm5lZ19zZF9vdmZsX2VuYToKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCXN1YmkubAkJJjB4NjAwMCwlZDEJCSMgc3VidHJhY3QgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgc2lnbixleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJYnJhLmIJCWZuZWdfc2Rfb3ZmbF9kaXMKKworIworIyB0aGUgbW92ZSBpbiBNQVkgdW5kZXJmbG93LiBzby4uLgorIworZm5lZ19zZF9tYXlfb3ZmbDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZm5lZy54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gbmVnYXRpb24KKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCisJZmFicy54CQklZnAwLCVmcDEJCSMgbWFrZSBhIGNvcHkgb2YgcmVzdWx0CisJZmNtcC5iCQklZnAxLCYweDIJCSMgaXMgfHJlc3VsdHwgPj0gMi5iPworCWZiZ2UudwkJZm5lZ19zZF9vdmZsX3RzdAkjIHllczsgb3ZlcmZsb3cgaGFzIG9jY3VycmVkCisKKyMgbm8sIGl0IGRpZG4ndCBvdmVyZmxvdzsgd2UgaGF2ZSBjb3JyZWN0IHJlc3VsdAorCWJyYS53CQlmbmVnX3NkX25vcm1hbF9leGl0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgaW5wdXQgaXMgbm90IG5vcm1hbGl6ZWQ7IHdoYXQgaXMgaXQ/CisjCitmbmVnX25vdF9ub3JtOgorCWNtcGkuYgkJJWQxLCZERU5PUk0JCSMgd2VlZCBvdXQgREVOT1JNCisJYmVxLncJCWZuZWdfZGVub3JtCisJY21waS5iCQklZDEsJlNOQU4JCSMgd2VlZCBvdXQgU05BTgorCWJlcS5sCQlyZXNfc25hbl8xb3AKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyB3ZWVkIG91dCBRTkFOCisJYmVxLmwJCXJlc19xbmFuXzFvcAorCisjCisjIGRvIHRoZSBmbmVnOyBhdCB0aGlzIHBvaW50LCBvbmx5IHBvc3NpYmxlIG9wcyBhcmUgWkVSTyBhbmQgSU5GLgorIyB1c2UgZm5lZyB0byBkZXRlcm1pbmUgY2NvZGVzLgorIyBwcmVjOm1vZGUgc2hvdWxkIGJlIHplcm8gYXQgdGhpcyBwb2ludCBidXQgaXQgd29uJ3QgYWZmZWN0IGFuc3dlciBhbnl3YXlzLgorIworCWZuZWcueAkJU1JDX0VYKCVhMCksJWZwMAkjIGRvIGZuZWcKKwlmbW92LmwJCSVmcHNyLCVkMAorCXJvbC5sCQkmMHg4LCVkMAkJIyBwdXQgY2NvZGVzIGluIGxvIGJ5dGUKKwltb3YuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIGluc2VydCBjb3JyZWN0IGNjb2RlcworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZ0c3QoKTogZW11bGF0ZXMgdGhlIGZ0ZXN0IGluc3RydWN0aW9uCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXJlc3tzLHF9bmFuXzFvcCgpIC0gc2V0IE5BTiByZXN1bHQgZm9yIG1vbmFkaWMgaW5zdHJ1Y3Rpb24JIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJbm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJQ2hlY2sgdGhlIHNvdXJjZSBvcGVyYW5kIHRhZyAoU1RBRykgYW5kIHNldCB0aGUgRlBDUiBhY2NvcmRpbmcJIworIyB0byB0aGUgb3BlcmFuZCB0eXBlIGFuZCBzaWduLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZ0c3QKK2Z0c3Q6CisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwlibmUuYgkJZnRzdF9ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAorCisjCisjIE5vcm06CisjCitmdHN0X25vcm06CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CisJYm1pLmIJCWZ0c3Rfbm9ybV9tCQkjIHllcworCXJ0cworZnRzdF9ub3JtX206CisJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKKwlydHMKKworIworIyBpbnB1dCBpcyBub3Qgbm9ybWFsaXplZDsgd2hhdCBpcyBpdD8KKyMKK2Z0c3Rfbm90X25vcm06CisJY21waS5iCQklZDEsJlpFUk8JCSMgd2VlZCBvdXQgWkVSTworCWJlcS5iCQlmdHN0X3plcm8KKwljbXBpLmIJCSVkMSwmSU5GCQkjIHdlZWQgb3V0IElORgorCWJlcS5iCQlmdHN0X2luZgorCWNtcGkuYgkJJWQxLCZTTkFOCQkjIHdlZWQgb3V0IFNOQU4KKwliZXEubAkJcmVzX3NuYW5fMW9wCisJY21waS5iCQklZDEsJlFOQU4JCSMgd2VlZCBvdXQgUU5BTgorCWJlcS5sCQlyZXNfcW5hbl8xb3AKKworIworIyBEZW5vcm06CisjCitmdHN0X2Rlbm9ybToKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgb3BlcmFuZCBuZWdhdGl2ZT8KKwlibWkuYgkJZnRzdF9kZW5vcm1fbQkJIyB5ZXMKKwlydHMKK2Z0c3RfZGVub3JtX206CisJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKKwlydHMKKworIworIyBJbmZpbml0eToKKyMKK2Z0c3RfaW5mOgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBvcGVyYW5kIG5lZ2F0aXZlPworCWJtaS5iCQlmdHN0X2luZl9tCQkjIHllcworZnRzdF9pbmZfcDoKKwltb3YuYgkJJmluZl9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ0knIGNjb2RlIGJpdAorCXJ0cworZnRzdF9pbmZfbToKKwltb3YuYgkJJmluZl9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0ICdJJywnTicgY2NvZGUgYml0cworCXJ0cworCisjCisjIFplcm86CisjCitmdHN0X3plcm86CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CisJYm1pLmIJCWZ0c3RfemVyb19tCQkjIHllcworZnRzdF96ZXJvX3A6CisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnTicgY2NvZGUgYml0CisJcnRzCitmdHN0X3plcm9fbToKKwltb3YuYgkJJnpfYm1hc2srbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicsJ04nIGNjb2RlIGJpdHMKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmaW50KCk6IGVtdWxhdGVzIHRoZSBmaW50IGluc3RydWN0aW9uCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXJlc197cyxxfW5hbl8xb3AoKSAtIHNldCBOQU4gcmVzdWx0IGZvciBtb25hZGljIG9wZXJhdGlvbgkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCisjCWQwID0gcm91bmQgcHJlY2lzaW9uL21vZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IHJlc3VsdAkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlTZXBhcmF0ZSBhY2NvcmRpbmcgdG8gb3BlcmFuZCB0eXBlLiBVbm5vcm1zIGRvbid0IHBhc3MgdGhyb3VnaAkjCisjIGhlcmUuIEZvciBub3JtcywgbG9hZCB0aGUgcm91bmRpbmcgbW9kZS9wcmVjLCBleGVjdXRlIGEgImZpbnQiLCB0aGVuCSMKKyMgc3RvcmUgdGhlIHJlc3VsdGluZyBGUFNSIGJpdHMuCQkJCQkjCisjCUZvciBkZW5vcm1zLCBmb3JjZSB0aGUgai1iaXQgdG8gYSBvbmUgYW5kIGRvIHRoZSBzYW1lIGFzIGZvcgkjCisjIG5vcm1zLiBEZW5vcm1zIGFyZSBzbyBsb3cgdGhhdCB0aGUgYW5zd2VyIHdpbGwgZWl0aGVyIGJlIGEgemVybyBvciBhCSMKKyMgb25lLgkJCQkJCQkJCSMKKyMJRm9yIHplcm9lcy9pbmZzL05BTnMsIHJldHVybiB0aGUgc2FtZSB3aGlsZSBzZXR0aW5nIHRoZSBGUFNSCSMKKyMgYXMgYXBwcm9wcmlhdGUuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZpbnQKK2ZpbnQ6CisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwlibmUuYgkJZmludF9ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAorCisjCisjIE5vcm06CisjCitmaW50X25vcm06CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgc2V0IHByZWMgPSBleHQKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZpbnQueAkJU1JDKCVhMCksJWZwMAkJIyBleGVjdXRlIGZpbnQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZm1vdi5sCQklZnBzciwlZDAJCSMgc2F2ZSBGUFNSCisJb3IubAkJJWQwLFVTRVJfRlBTUiglYTYpCSMgc2V0IGV4Y2VwdGlvbiBiaXRzCisKKwlydHMKKworIworIyBpbnB1dCBpcyBub3Qgbm9ybWFsaXplZDsgd2hhdCBpcyBpdD8KKyMKK2ZpbnRfbm90X25vcm06CisJY21waS5iCQklZDEsJlpFUk8JCSMgd2VlZCBvdXQgWkVSTworCWJlcS5iCQlmaW50X3plcm8KKwljbXBpLmIJCSVkMSwmSU5GCQkjIHdlZWQgb3V0IElORgorCWJlcS5iCQlmaW50X2luZgorCWNtcGkuYgkJJWQxLCZERU5PUk0JCSMgd2VlZCBvdXQgREVOT1JNCisJYmVxLmIJCWZpbnRfZGVub3JtCisJY21waS5iCQklZDEsJlNOQU4JCSMgd2VlZCBvdXQgU05BTgorCWJlcS5sCQlyZXNfc25hbl8xb3AKKwlicmEubAkJcmVzX3FuYW5fMW9wCQkjIHdlZWQgb3V0IFFOQU4KKworIworIyBEZW5vcm06CisjCisjIGZvciBERU5PUk1zLCB0aGUgcmVzdWx0IHdpbGwgYmUgZWl0aGVyICgrLy0pWkVSTyBvciAoKy8tKTEuCisjIGFsc28sIHRoZSBJTkVYMiBhbmQgQUlORVggZXhjZXB0aW9uIGJpdHMgd2lsbCBiZSBzZXQuCisjIHNvLCB3ZSBjb3VsZCBlaXRoZXIgc2V0IHRoZXNlIG1hbnVhbGx5IG9yIGZvcmNlIHRoZSBERU5PUk0KKyMgdG8gYSB2ZXJ5IHNtYWxsIE5PUk0gYW5kIHNoaXAgaXQgdG8gdGhlIE5PUk0gcm91dGluZS4KKyMgSSBkbyB0aGUgbGF0dGVyLgorIworZmludF9kZW5vcm06CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KSAjIGNvcHkgc2lnbiwgemVybyBleHAKKwltb3YuYgkJJjB4ODAsRlBfU0NSMF9ISSglYTYpCSMgZm9yY2UgREVOT1JNID09PiBzbWFsbCBOT1JNCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCisJYnJhLmIJCWZpbnRfbm9ybQorCisjCisjIFplcm86CisjCitmaW50X3plcm86CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIFpFUk8gbmVnYXRpdmU/CisJYm1pLmIJCWZpbnRfemVyb19tCQkjIHllcworZmludF96ZXJvX3A6CisJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgcmV0dXJuICtaRVJPIGluIGZwMAorCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ1onIGNjb2RlIGJpdAorCXJ0cworZmludF96ZXJvX206CisJZm1vdi5zCQkmMHg4MDAwMDAwMCwlZnAwCSMgcmV0dXJuIC1aRVJPIGluIGZwMAorCW1vdi5iCQkmel9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0ICdaJywnTicgY2NvZGUgYml0cworCXJ0cworCisjCisjIEluZmluaXR5OgorIworZmludF9pbmY6CisJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgSU5GIG5lZ2F0aXZlPworCWJtaS5iCQlmaW50X2luZl9tCQkjIHllcworZmludF9pbmZfcDoKKwltb3YuYgkJJmluZl9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ0knIGNjb2RlIGJpdAorCXJ0cworZmludF9pbmZfbToKKwltb3YuYgkJJmluZl9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0ICdOJywnSScgY2NvZGUgYml0cworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZpbnRyeigpOiBlbXVsYXRlcyB0aGUgZmludHJ6IGluc3RydWN0aW9uCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJcmVzX3tzLHF9bmFuXzFvcCgpIC0gc2V0IE5BTiByZXN1bHQgZm9yIG1vbmFkaWMgb3BlcmF0aW9uCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24vbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gcmVzdWx0CQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVNlcGFyYXRlIGFjY29yZGluZyB0byBvcGVyYW5kIHR5cGUuIFVubm9ybXMgZG9uJ3QgcGFzcyB0aHJvdWdoCSMKKyMgaGVyZS4gRm9yIG5vcm1zLCBsb2FkIHRoZSByb3VuZGluZyBtb2RlL3ByZWMsIGV4ZWN1dGUgYSAiZmludHJ6IiwJIworIyB0aGVuIHN0b3JlIHRoZSByZXN1bHRpbmcgRlBTUiBiaXRzLgkJCQkJIworIwlGb3IgZGVub3JtcywgZm9yY2UgdGhlIGotYml0IHRvIGEgb25lIGFuZCBkbyB0aGUgc2FtZSBhcyBmb3IJIworIyBub3Jtcy4gRGVub3JtcyBhcmUgc28gbG93IHRoYXQgdGhlIGFuc3dlciB3aWxsIGVpdGhlciBiZSBhIHplcm8gb3IgYQkjCisjIG9uZS4JCQkJCQkJCQkjCisjCUZvciB6ZXJvZXMvaW5mcy9OQU5zLCByZXR1cm4gdGhlIHNhbWUgd2hpbGUgc2V0dGluZyB0aGUgRlBTUgkjCisjIGFzIGFwcHJvcHJpYXRlLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlmaW50cnoKK2ZpbnRyejoKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJuZS5iCQlmaW50cnpfbm90X25vcm0JCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworIworIyBOb3JtOgorIworZmludHJ6X25vcm06CisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZpbnRyei54CVNSQyglYTApLCVmcDAJCSMgZXhlY3V0ZSBmaW50cnoKKworCWZtb3YubAkJJWZwc3IsJWQwCQkjIHNhdmUgRlBTUgorCW9yLmwJCSVkMCxVU0VSX0ZQU1IoJWE2KQkjIHNldCBleGNlcHRpb24gYml0cworCisJcnRzCisKKyMKKyMgaW5wdXQgaXMgbm90IG5vcm1hbGl6ZWQ7IHdoYXQgaXMgaXQ/CisjCitmaW50cnpfbm90X25vcm06CisJY21waS5iCQklZDEsJlpFUk8JCSMgd2VlZCBvdXQgWkVSTworCWJlcS5iCQlmaW50cnpfemVybworCWNtcGkuYgkJJWQxLCZJTkYJCSMgd2VlZCBvdXQgSU5GCisJYmVxLmIJCWZpbnRyel9pbmYKKwljbXBpLmIJCSVkMSwmREVOT1JNCQkjIHdlZWQgb3V0IERFTk9STQorCWJlcS5iCQlmaW50cnpfZGVub3JtCisJY21waS5iCQklZDEsJlNOQU4JCSMgd2VlZCBvdXQgU05BTgorCWJlcS5sCQlyZXNfc25hbl8xb3AKKwlicmEubAkJcmVzX3FuYW5fMW9wCQkjIHdlZWQgb3V0IFFOQU4KKworIworIyBEZW5vcm06CisjCisjIGZvciBERU5PUk1zLCB0aGUgcmVzdWx0IHdpbGwgYmUgKCsvLSlaRVJPLgorIyBhbHNvLCB0aGUgSU5FWDIgYW5kIEFJTkVYIGV4Y2VwdGlvbiBiaXRzIHdpbGwgYmUgc2V0LgorIyBzbywgd2UgY291bGQgZWl0aGVyIHNldCB0aGVzZSBtYW51YWxseSBvciBmb3JjZSB0aGUgREVOT1JNCisjIHRvIGEgdmVyeSBzbWFsbCBOT1JNIGFuZCBzaGlwIGl0IHRvIHRoZSBOT1JNIHJvdXRpbmUuCisjIEkgZG8gdGhlIGxhdHRlci4KKyMKK2ZpbnRyel9kZW5vcm06CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KSAjIGNvcHkgc2lnbiwgemVybyBleHAKKwltb3YuYgkJJjB4ODAsRlBfU0NSMF9ISSglYTYpCSMgZm9yY2UgREVOT1JNID09PiBzbWFsbCBOT1JNCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCisJYnJhLmIJCWZpbnRyel9ub3JtCisKKyMKKyMgWmVybzoKKyMKK2ZpbnRyel96ZXJvOgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBaRVJPIG5lZ2F0aXZlPworCWJtaS5iCQlmaW50cnpfemVyb19tCQkjIHllcworZmludHJ6X3plcm9fcDoKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyByZXR1cm4gK1pFUk8gaW4gZnAwCisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicgY2NvZGUgYml0CisJcnRzCitmaW50cnpfemVyb19tOgorCWZtb3YucwkJJjB4ODAwMDAwMDAsJWZwMAkjIHJldHVybiAtWkVSTyBpbiBmcDAKKwltb3YuYgkJJnpfYm1hc2srbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCAnWicsJ04nIGNjb2RlIGJpdHMKKwlydHMKKworIworIyBJbmZpbml0eToKKyMKK2ZpbnRyel9pbmY6CisJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgSU5GIG5lZ2F0aXZlPworCWJtaS5iCQlmaW50cnpfaW5mX20JCSMgeWVzCitmaW50cnpfaW5mX3A6CisJbW92LmIJCSZpbmZfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdJJyBjY29kZSBiaXQKKwlydHMKK2ZpbnRyel9pbmZfbToKKwltb3YuYgkJJmluZl9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0ICdOJywnSScgY2NvZGUgYml0cworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZhYnMoKTogIGVtdWxhdGVzIHRoZSBmYWJzIGluc3RydWN0aW9uCQkJCSMKKyMJZnNhYnMoKTogZW11bGF0ZXMgdGhlIGZzYWJzIGluc3RydWN0aW9uCQkJCSMKKyMJZmRhYnMoKTogZW11bGF0ZXMgdGhlIGZkYWJzIGluc3RydWN0aW9uCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCW5vcm0oKSAtIG5vcm1hbGl6ZSBkZW5vcm0gbWFudGlzc2EgdG8gcHJvdmlkZSBFWE9QCQkjCisjCXNjYWxlX3RvX3plcm9fc3JjKCkgLSBtYWtlIGV4cG9uZW50LiA9IDA7IGdldCBzY2FsZSBmYWN0b3IJIworIwl1bmZfcmVzKCkgLSBjYWxjdWxhdGUgdW5kZXJmbG93IHJlc3VsdAkJCQkjCisjCW92Zl9yZXMoKSAtIGNhbGN1bGF0ZSBvdmVyZmxvdyByZXN1bHQJCQkJIworIwlyZXNfe3MscX1uYW5fMW9wKCkgLSBzZXQgTkFOIHJlc3VsdCBmb3IgbW9uYWRpYyBvcGVyYXRpb24JIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlkMCA9IHJuZCBwcmVjaXNpb24vbW9kZQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWZwMCA9IHJlc3VsdAkJCQkJCQkjCisjCWZwMSA9IEVYT1AgKGlmIGV4Y2VwdGlvbiBvY2N1cnJlZCkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSGFuZGxlIE5BTnMsIGluZmluaXRpZXMsIGFuZCB6ZXJvZXMgYXMgc3BlY2lhbCBjYXNlcy4gRGl2aWRlCSMKKyMgbm9ybXMgaW50byBleHRlbmRlZCwgc2luZ2xlLCBhbmQgZG91YmxlIHByZWNpc2lvbi4JCQkjCisjCVNpbXBseSBjbGVhciBzaWduIGZvciBleHRlbmRlZCBwcmVjaXNpb24gbm9ybS4gRXh0IHByZWMgZGVub3JtCSMKKyMgZ2V0cyBhbiBFWE9QIGNyZWF0ZWQgZm9yIGl0IHNpbmNlIGl0J3MgYW4gdW5kZXJmbG93LgkJCSMKKyMJRG91YmxlIGFuZCBzaW5nbGUgcHJlY2lzaW9uIGNhbiBvdmVyZmxvdyBhbmQgdW5kZXJmbG93LiBGaXJzdCwJIworIyBzY2FsZSB0aGUgb3BlcmFuZCBzdWNoIHRoYXQgdGhlIGV4cG9uZW50IGlzIHplcm8uIFBlcmZvcm0gYW4gImZhYnMiCSMKKyMgdXNpbmcgdGhlIGNvcnJlY3Qgcm5kIG1vZGUvcHJlYy4gQ2hlY2sgdG8gc2VlIGlmIHRoZSBvcmlnaW5hbAkJIworIyBleHBvbmVudCB3b3VsZCB0YWtlIGFuIGV4Y2VwdGlvbi4gSWYgc28sIHVzZSB1bmZfcmVzKCkgb3Igb3ZmX3JlcygpCSMKKyMgdG8gY2FsY3VsYXRlIHRoZSBkZWZhdWx0IHJlc3VsdC4gQWxzbywgY3JlYXRlIHRoZSBFWE9QIGZvciB0aGUJIworIyBleGNlcHRpb25hbCBjYXNlLiBJZiBubyBleGNlcHRpb24gc2hvdWxkIG9jY3VyLCBpbnNlcnQgdGhlIGNvcnJlY3QJIworIyByZXN1bHQgZXhwb25lbnQgYW5kIHJldHVybi4JCQkJCQkjCisjCVVubm9ybXMgZG9uJ3QgcGFzcyB0aHJvdWdoIGhlcmUuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZzYWJzCitmc2FiczoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmc19tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IHNnbCBwcmVjaXNpb24KKwlicmEuYgkJZmFicworCisJZ2xvYmFsCQlmZGFicworZmRhYnM6CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKKwlvcmkuYgkJJmRfbW9kZSoweDEwLCVkMAkjIGluc2VydCBkYmwgcHJlY2lzaW9uCisKKwlnbG9iYWwJCWZhYnMKK2ZhYnM6CisJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzdG9yZSBybmQgaW5mbworCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYm5lLncJCWZhYnNfbm90X25vcm0JCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworIworIyBBQlNPTFVURSBWQUxVRTogbm9ybXMgYW5kIGRlbm9ybXMgT05MWSEKKyMKK2ZhYnNfbm9ybToKKwlhbmRpLmIJCSYweGMwLCVkMAkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CisJYm5lLmIJCWZhYnNfbm90X2V4dAkJIyBubzsgZ28gaGFuZGxlIHNnbCBvciBkYmwKKworIworIyBwcmVjaXNpb24gc2VsZWN0ZWQgaXMgZXh0ZW5kZWQuIHNvLi4ud2UgY2FuIG5vdCBnZXQgYW4gdW5kZXJmbG93CisjIG9yIG92ZXJmbG93IGJlY2F1c2Ugb2Ygcm91bmRpbmcgdG8gdGhlIGNvcnJlY3QgcHJlY2lzaW9uLiBzby4uLgorIyBza2lwIHRoZSBzY2FsaW5nIGFuZCB1bnNjYWxpbmcuLi4KKyMKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCW1vdi53CQlTUkNfRVgoJWEwKSwlZDEKKwliY2xyCQkmMTUsJWQxCQkJIyBmb3JjZSBhYnNvbHV0ZSB2YWx1ZQorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IGV4cG9uZW50CisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBmb3IgYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIERFTk9STSwgdGhlIFVORkwgZXhjZXB0aW9uIGJpdCBpcyBzZXQKKyMgdGhlIGFjY3J1ZWQgYml0IGlzIE5PVCBzZXQgaW4gdGhpcyBpbnN0YW5jZShubyBpbmV4YWN0bmVzcyEpCisjCitmYWJzX2Rlbm9ybToKKwlhbmRpLmIJCSYweGMwLCVkMAkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CisJYm5lLmIJCWZhYnNfbm90X2V4dAkJIyBubworCisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CisKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCW1vdi53CQlTUkNfRVgoJWEwKSwlZDAKKwliY2xyCQkmMTUsJWQwCQkJIyBjbGVhciBzaWduCisJbW92LncJCSVkMCxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgZXhwb25lbnQKKworCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKworCWJ0c3QJCSZ1bmZsX2JpdCxGUENSX0VOQUJMRSglYTYpICMgaXMgVU5GTCBlbmFibGVkPworCWJuZS5iCQlmYWJzX2V4dF91bmZsX2VuYQorCXJ0cworCisjCisjIHRoZSBpbnB1dCBpcyBhbiBleHRlbmRlZCBERU5PUk0gYW5kIHVuZGVyZmxvdyBpcyBlbmFibGVkIGluIHRoZSBGUENSLgorIyBub3JtYWxpemUgdGhlIG1hbnRpc3NhIGFuZCBhZGQgdGhlIGJpYXMgb2YgMHg2MDAwIHRvIHRoZSByZXN1bHRpbmcgbmVnYXRpdmUKKyMgZXhwb25lbnQgYW5kIGluc2VydCBiYWNrIGludG8gdGhlIG9wZXJhbmQuCisjCitmYWJzX2V4dF91bmZsX2VuYToKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gb3BlcmFuZAorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgcmVzdWx0CisJbmVnLncJCSVkMAkJCSMgbmV3IGV4cG9uZW50ID0gLShzaGZ0IHZhbCkKKwlhZGRpLncJCSYweDYwMDAsJWQwCQkjIGFkZCBuZXcgYmlhcyB0byBleHBvbmVudAorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2ggb2xkIHNpZ24sZXhwCisJYW5kaS53CQkmMHg4MDAwLCVkMQkJIyBrZWVwIG9sZCBzaWduCisJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBjbGVhciBzaWduIHBvc2l0aW9uCisJb3IudwkJJWQxLCVkMAkJCSMgY29uY2F0IG9sZCBzaWduLCBuZXcgZXhwb25lbnQKKwltb3YudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlydHMKKworIworIyBvcGVyYW5kIGlzIGVpdGhlciBzaW5nbGUgb3IgZG91YmxlCisjCitmYWJzX25vdF9leHQ6CisJY21waS5iCQklZDAsJnNfbW9kZSoweDEwCSMgc2VwYXJhdGUgc2dsL2RibCBwcmVjCisJYm5lLmIJCWZhYnNfZGJsCisKKyMKKyMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIHNpbmdsZSBwcmVjaXNpb24KKyMKK2ZhYnNfc2dsOgorCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIGNhbGN1bGF0ZSBzY2FsZSBmYWN0b3IKKworCWNtcGkubAkJJWQwLCYweDNmZmYtMHgzZjgwCSMgd2lsbCBtb3ZlIGluIHVuZGVyZmxvdz8KKwliZ2UudwkJZmFic19zZF91bmZsCQkjIHllczsgZ28gaGFuZGxlIHVuZGVyZmxvdworCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0MDdlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PworCWJlcS53CQlmYWJzX3NkX21heV9vdmZsCSMgbWF5YmU7IGdvIGNoZWNrCisJYmx0LncJCWZhYnNfc2Rfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdworCisjCisjIG9wZXJhbmQgd2lsbCBOT1Qgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IHdoZW4gbW92ZWQgaW4gdG8gdGhlIGZwIHJlZyBmaWxlCisjCitmYWJzX3NkX25vcm1hbDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZmFicy54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gYWJzb2x1dGUKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgorCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworZmFic19zZF9ub3JtYWxfZXhpdDoKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCBzZ24sZXhwCisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlvci53CQklZDEsJWQyCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDIsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIG9wZXJhbmQgaXMgdG8gYmUgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uCisjCitmYWJzX2RibDoKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwlic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCisKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4M2MwMAkjIHdpbGwgbW92ZSBpbiB1bmRlcmZsb3c/CisJYmdlLmIJCWZhYnNfc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4NDNmZQkjIHdpbGwgbW92ZSBpbiBvdmVyZmxvdz8KKwliZXEudwkJZmFic19zZF9tYXlfb3ZmbAkjIG1heWJlOyBnbyBjaGVjaworCWJsdC53CQlmYWJzX3NkX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKKwlicmEudwkJZmFic19zZF9ub3JtYWwJCSMgbm87IGhvIGhhbmRsZSBub3JtYWxpemVkIG9wCisKKyMKKyMgb3BlcmFuZCBXSUxMIHVuZGVyZmxvdyB3aGVuIG1vdmVkIGluIHRvIHRoZSBmcCByZWdpc3RlciBmaWxlCisjCitmYWJzX3NkX3VuZmw6CisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CisKKwliY2xyCQkmMHg3LEZQX1NDUjBfRVgoJWE2KQkjIGZvcmNlIGFic29sdXRlIHZhbHVlCisKKyMgaWYgdW5kZXJmbG93IG9yIGluZXhhY3QgaXMgZW5hYmxlZCwgZ28gY2FsY3VsYXRlIEVYT1AgZmlyc3QuCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgwYiwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZhYnNfc2RfdW5mbF9lbmEJIyB5ZXMKKworZmFic19zZF91bmZsX2RpczoKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiByZXN1bHQgYWRkcgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEJCSMgcGFzczogcm5kIHByZWMsbW9kZQorCWJzci5sCQl1bmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IHBvc3NpYmxlICdaJyBjY29kZQorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBvcGVyYW5kIHdpbGwgdW5kZXJmbG93IEFORCB1bmRlcmZsb3cgaXMgZW5hYmxlZC4KKyMgdGhlcmVmb3JlLCB3ZSBtdXN0IHJldHVybiB0aGUgcmVzdWx0IHJvdW5kZWQgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uLgorIworZmFic19zZF91bmZsX2VuYToKKwltb3YubAkJRlBfU0NSMF9ISSglYTYpLEZQX1NDUjFfSEkoJWE2KQorCW1vdi5sCQlGUF9TQ1IwX0xPKCVhNiksRlBfU0NSMV9MTyglYTYpCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBsb2FkIGN1cnJlbnQgZXhwb25lbnQKKworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgc3VidHJhY3Qgc2NhbGUgZmFjdG9yCisJYWRkaS5sCQkmMHg2MDAwLCVkMQkJIyBhZGQgbmV3IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG5ldyBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjFfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWJyYS5iCQlmYWJzX3NkX3VuZmxfZGlzCisKKyMKKyMgb3BlcmFuZCBXSUxMIG92ZXJmbG93LgorIworZmFic19zZF9vdmZsOgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmYWJzLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBhYnNvbHV0ZQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIEZQU1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmYWJzX3NkX292ZmxfdHN0OgorCW9yLmwJCSZvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmYWJzX3NkX292ZmxfZW5hCSMgeWVzCisKKyMKKyMgT1ZGTCBpcyBub3QgZW5hYmxlZDsgdGhlcmVmb3JlLCB3ZSBtdXN0IGNyZWF0ZSB0aGUgZGVmYXVsdCByZXN1bHQgYnkKKyMgY2FsbGluZyBvdmZfcmVzKCkuCisjCitmYWJzX3NkX292ZmxfZGlzOgorCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZT8KKwlzbmUJCSVkMQkJCSMgc2V0IHNpZ24gcGFyYW0gYWNjb3JkaW5nbHkKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3M6IHByZWMsbW9kZQorCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IElORixOIGlmIGFwcGxpY2FibGUKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgT1ZGTCBpcyBlbmFibGVkLgorIyB0aGUgSU5FWDIgYml0IGhhcyBhbHJlYWR5IGJlZW4gdXBkYXRlZCBieSB0aGUgcm91bmQgdG8gdGhlIGNvcnJlY3QgcHJlY2lzaW9uLgorIyBub3csIHJvdW5kIHRvIGV4dGVuZGVkKGFuZCBkb24ndCBhbHRlciB0aGUgRlBTUikuCisjCitmYWJzX3NkX292ZmxfZW5hOgorCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJc3ViaS5sCQkmMHg2MDAwLCVkMQkJIyBzdWJ0cmFjdCBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBzaWduLGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlicmEuYgkJZmFic19zZF9vdmZsX2RpcworCisjCisjIHRoZSBtb3ZlIGluIE1BWSB1bmRlcmZsb3cuIHNvLi4uCisjCitmYWJzX3NkX21heV9vdmZsOgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmYWJzLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBhYnNvbHV0ZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwlmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKKwlmY21wLmIJCSVmcDEsJjB4MgkJIyBpcyB8cmVzdWx0fCA+PSAyLmI/CisJZmJnZS53CQlmYWJzX3NkX292ZmxfdHN0CSMgeWVzOyBvdmVyZmxvdyBoYXMgb2NjdXJyZWQKKworIyBubywgaXQgZGlkbid0IG92ZXJmbG93OyB3ZSBoYXZlIGNvcnJlY3QgcmVzdWx0CisJYnJhLncJCWZhYnNfc2Rfbm9ybWFsX2V4aXQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBpbnB1dCBpcyBub3Qgbm9ybWFsaXplZDsgd2hhdCBpcyBpdD8KKyMKK2ZhYnNfbm90X25vcm06CisJY21waS5iCQklZDEsJkRFTk9STQkJIyB3ZWVkIG91dCBERU5PUk0KKwliZXEudwkJZmFic19kZW5vcm0KKwljbXBpLmIJCSVkMSwmU05BTgkJIyB3ZWVkIG91dCBTTkFOCisJYmVxLmwJCXJlc19zbmFuXzFvcAorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIHdlZWQgb3V0IFFOQU4KKwliZXEubAkJcmVzX3FuYW5fMW9wCisKKwlmYWJzLngJCVNSQyglYTApLCVmcDAJCSMgZm9yY2UgYWJzb2x1dGUgdmFsdWUKKworCWNtcGkuYgkJJWQxLCZJTkYJCSMgd2VlZCBvdXQgSU5GCisJYmVxLmIJCWZhYnNfaW5mCitmYWJzX3plcm86CisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicgY2NvZGUgYml0CisJcnRzCitmYWJzX2luZjoKKwltb3YuYgkJJmluZl9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ0knIGNjb2RlIGJpdAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZjbXAoKTogZnAgY29tcGFyZSBvcCByb3V0aW5lCQkJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlyZXNfcW5hbigpIC0gcmV0dXJuIFFOQU4gcmVzdWx0CQkJCQkjCisjCXJlc19zbmFuKCkgLSByZXR1cm4gU05BTiByZXN1bHQJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKKyMJYTEgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBkZXN0aW5hdGlvbiBvcGVyYW5kCQkjCisjCWQwID0gcm91bmQgcHJlYy9tb2RlCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSGFuZGxlIE5BTnMgYW5kIGRlbm9ybXMgYXMgc3BlY2lhbCBjYXNlcy4gRm9yIGV2ZXJ5dGhpbmcgZWxzZSwJIworIyBqdXN0IHVzZSB0aGUgYWN0dWFsIGZjbXAgaW5zdHJ1Y3Rpb24gdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBjb25kaXRpb24JIworIyBjb2Rlcy4JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZjbXAKK2ZjbXA6CisJY2xyLncJCSVkMQorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJbHNsLmIJCSYweDMsJWQxCisJb3IuYgkJU1RBRyglYTYpLCVkMQorCWJuZS5iCQlmY21wX25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CisKKyMKKyMgQ09NUEFSRSBGUCBPUHMgOiBOT1JNcywgWkVST3MsIElORnMsIGFuZCAiY29ycmVjdGVkIiBERU5PUk1zCisjCitmY21wX25vcm06CisJZm1vdm0ueAkJRFNUKCVhMSksJjB4ODAJCSMgbG9hZCBkc3Qgb3AKKworCWZjbXAueAkJJWZwMCxTUkMoJWEwKQkJIyBkbyBjb21wYXJlCisKKwlmbW92LmwJCSVmcHNyLCVkMAkJIyBzYXZlIEZQU1IKKwlyb2wubAkJJjB4OCwlZDAJCSMgZXh0cmFjdCBjY29kZSBiaXRzCisJbW92LmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgY2NvZGUgYml0cyhubyBleGMgYml0cyBhcmUgc2V0KQorCisJcnRzCisKKyMKKyMgZmNtcDogaW5wdXRzIGFyZSBub3QgYm90aCBub3JtYWxpemVkOyB3aGF0IGFyZSB0aGV5PworIworZmNtcF9ub3Rfbm9ybToKKwltb3YudwkJKHRibF9mY21wX29wLmIsJXBjLCVkMS53KjIpLCVkMQorCWptcAkJKHRibF9mY21wX29wLmIsJXBjLCVkMS53KjEpCisKKwlzd2JlZwkJJjQ4Cit0YmxfZmNtcF9vcDoKKwlzaG9ydAkJZmNtcF9ub3JtCS0gdGJsX2ZjbXBfb3AgIyBOT1JNIC0gTk9STQorCXNob3J0CQlmY21wX25vcm0JLSB0YmxfZmNtcF9vcCAjIE5PUk0gLSBaRVJPCisJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgTk9STSAtIElORgorCXNob3J0CQlmY21wX3Jlc19xbmFuCS0gdGJsX2ZjbXBfb3AgIyBOT1JNIC0gUU5BTgorCXNob3J0CQlmY21wX25ybV9kbnJtCS0gdGJsX2ZjbXBfb3AgIyBOT1JNIC0gREVOT1JNCisJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIE5PUk0gLSBTTkFOCisJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIworCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKKworCXNob3J0CQlmY21wX25vcm0JLSB0YmxfZmNtcF9vcCAjIFpFUk8gLSBOT1JNCisJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgWkVSTyAtIFpFUk8KKwlzaG9ydAkJZmNtcF9ub3JtCS0gdGJsX2ZjbXBfb3AgIyBaRVJPIC0gSU5GCisJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIFpFUk8gLSBRTkFOCisJc2hvcnQJCWZjbXBfZG5ybV9zCS0gdGJsX2ZjbXBfb3AgIyBaRVJPIC0gREVOT1JNCisJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIFpFUk8gLSBTTkFOCisJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIworCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKKworCXNob3J0CQlmY21wX25vcm0JLSB0YmxfZmNtcF9vcCAjIElORiAtIE5PUk0KKwlzaG9ydAkJZmNtcF9ub3JtCS0gdGJsX2ZjbXBfb3AgIyBJTkYgLSBaRVJPCisJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgSU5GIC0gSU5GCisJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIElORiAtIFFOQU4KKwlzaG9ydAkJZmNtcF9kbnJtX3MJLSB0YmxfZmNtcF9vcCAjIElORiAtIERFTk9STQorCXNob3J0CQlmY21wX3Jlc19zbmFuCS0gdGJsX2ZjbXBfb3AgIyBJTkYgLSBTTkFOCisJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIworCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKKworCXNob3J0CQlmY21wX3Jlc19xbmFuCS0gdGJsX2ZjbXBfb3AgIyBRTkFOIC0gTk9STQorCXNob3J0CQlmY21wX3Jlc19xbmFuCS0gdGJsX2ZjbXBfb3AgIyBRTkFOIC0gWkVSTworCXNob3J0CQlmY21wX3Jlc19xbmFuCS0gdGJsX2ZjbXBfb3AgIyBRTkFOIC0gSU5GCisJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIFFOQU4gLSBRTkFOCisJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIFFOQU4gLSBERU5PUk0KKwlzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgUU5BTiAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCisJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIworCisJc2hvcnQJCWZjbXBfZG5ybV9ucm0JLSB0YmxfZmNtcF9vcCAjIERFTk9STSAtIE5PUk0KKwlzaG9ydAkJZmNtcF9kbnJtX2QJLSB0YmxfZmNtcF9vcCAjIERFTk9STSAtIFpFUk8KKwlzaG9ydAkJZmNtcF9kbnJtX2QJLSB0YmxfZmNtcF9vcCAjIERFTk9STSAtIElORgorCXNob3J0CQlmY21wX3Jlc19xbmFuCS0gdGJsX2ZjbXBfb3AgIyBERU5PUk0gLSBRTkFOCisJc2hvcnQJCWZjbXBfZG5ybV9zZAktIHRibF9mY21wX29wICMgREVOT1JNIC0gREVOT1JNCisJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIERFTk9STSAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCisJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIworCisJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIFNOQU4gLSBOT1JNCisJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIFNOQU4gLSBaRVJPCisJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIFNOQU4gLSBJTkYKKwlzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgU05BTiAtIFFOQU4KKwlzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgU05BTiAtIERFTk9STQorCXNob3J0CQlmY21wX3Jlc19zbmFuCS0gdGJsX2ZjbXBfb3AgIyBTTkFOIC0gU05BTgorCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKKwlzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCisKKyMgdW5saWtlIGFsbCBvdGhlciBmdW5jdGlvbnMgZm9yIFFOQU4gYW5kIFNOQU4sIGZjbXAgZG9lcyBOT1Qgc2V0IHRoZQorIyAnTicgYml0IGZvciBhIG5lZ2F0aXZlIFFOQU4gb3IgU05BTiBpbnB1dCBzbyB3ZSBtdXN0IHNxdWVsY2ggaXQgaGVyZS4KK2ZjbXBfcmVzX3FuYW46CisJYnNyLmwJCXJlc19xbmFuCisJYW5kaS5iCQkmMHhmNyxGUFNSX0NDKCVhNikKKwlydHMKK2ZjbXBfcmVzX3NuYW46CisJYnNyLmwJCXJlc19zbmFuCisJYW5kaS5iCQkmMHhmNyxGUFNSX0NDKCVhNikKKwlydHMKKworIworIyBERU5PUk1zIGFyZSBhIGxpdHRsZSBtb3JlIGRpZmZpY3VsdC4KKyMgSWYgeW91IGhhdmUgYSAyIERFTk9STXMsIHRoZW4geW91IGNhbiBqdXN0IGZvcmNlIHRoZSBqLWJpdCB0byBhIG9uZQorIyBhbmQgdXNlIHRoZSBmY21wX25vcm0gcm91dGluZS4KKyMgSWYgeW91IGhhdmUgYSBERU5PUk0gYW5kIGFuIElORiBvciBaRVJPLCBqdXN0IGZvcmNlIHRoZSBERU5PUk0ncyBqLWJpdCB0byBhIG9uZQorIyBhbmQgdXNlIHRoZSBmY21wX25vcm0gcm91dGluZS4KKyMgSWYgeW91IGhhdmUgYSBERU5PUk0gYW5kIGEgTk9STSB3aXRoIG9wcG9zaXRlIHNpZ25zLCB0aGVuIHVzZSBmY21wX25vcm0sIGFsc28uCisjIEJ1dCB3aXRoIGEgREVOT1JNIGFuZCBhIE5PUk0gb2YgdGhlIHNhbWUgc2lnbiwgdGhlIG5lZyBiaXQgaXMgc2V0IGlmIHRoZQorIyAoMSkgc2lnbnMgYXJlICgrKSBhbmQgdGhlIERFTk9STSBpcyB0aGUgZHN0IG9yCisjICgyKSBzaWducyBhcmUgKC0pIGFuZCB0aGUgREVOT1JNIGlzIHRoZSBzcmMKKyMKKworZmNtcF9kbnJtX3M6CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSwlZDAKKwlic2V0CQkmMzEsJWQwCQkJIyBERU5PUk0gc3JjOyBtYWtlIGludG8gc21hbGwgbm9ybQorCW1vdi5sCQklZDAsRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAorCWJyYS53CQlmY21wX25vcm0KKworZmNtcF9kbnJtX2Q6CisJbW92LmwJCURTVF9FWCglYTEpLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlEU1RfSEkoJWExKSwlZDAKKwlic2V0CQkmMzEsJWQwCQkJIyBERU5PUk0gc3JjOyBtYWtlIGludG8gc21hbGwgbm9ybQorCW1vdi5sCQklZDAsRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCURTVF9MTyglYTEpLEZQX1NDUjBfTE8oJWE2KQorCWxlYQkJRlBfU0NSMCglYTYpLCVhMQorCWJyYS53CQlmY21wX25vcm0KKworZmNtcF9kbnJtX3NkOgorCW1vdi53CQlEU1RfRVgoJWExKSxGUF9TQ1IxX0VYKCVhNikKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCURTVF9ISSglYTEpLCVkMAorCWJzZXQJCSYzMSwlZDAJCQkjIERFTk9STSBkc3Q7IG1ha2UgaW50byBzbWFsbCBub3JtCisJbW92LmwJCSVkMCxGUF9TQ1IxX0hJKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksJWQwCisJYnNldAkJJjMxLCVkMAkJCSMgREVOT1JNIGRzdDsgbWFrZSBpbnRvIHNtYWxsIG5vcm0KKwltb3YubAkJJWQwLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlEU1RfTE8oJWExKSxGUF9TQ1IxX0xPKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJbGVhCQlGUF9TQ1IxKCVhNiksJWExCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCisJYnJhLncJCWZjbXBfbm9ybQorCitmY21wX25ybV9kbnJtOgorCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDAJCSMgZGV0ZXJtaW5lIGlmIGxpa2Ugc2lnbnMKKwltb3YuYgkJRFNUX0VYKCVhMSksJWQxCisJZW9yLmIJCSVkMCwlZDEKKwlibWkudwkJZmNtcF9kbnJtX3MKKworIyBzaWducyBhcmUgdGhlIHNhbWUsIHNvIG11c3QgZGV0ZXJtaW5lIHRoZSBhbnN3ZXIgb3Vyc2VsdmVzLgorCXRzdC5iCQklZDAJCQkjIGlzIHNyYyBvcCBuZWdhdGl2ZT8KKwlibWkuYgkJZmNtcF9ucm1fZG5ybV9tCQkjIHllcworCXJ0cworZmNtcF9ucm1fZG5ybV9tOgorCW1vdi5iCQkmbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicgY2NvZGUgYml0CisJcnRzCisKK2ZjbXBfZG5ybV9ucm06CisJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBkZXRlcm1pbmUgaWYgbGlrZSBzaWducworCW1vdi5iCQlEU1RfRVgoJWExKSwlZDEKKwllb3IuYgkJJWQwLCVkMQorCWJtaS53CQlmY21wX2Rucm1fZAorCisjIHNpZ25zIGFyZSB0aGUgc2FtZSwgc28gbXVzdCBkZXRlcm1pbmUgdGhlIGFuc3dlciBvdXJzZWx2ZXMuCisJdHN0LmIJCSVkMAkJCSMgaXMgc3JjIG9wIG5lZ2F0aXZlPworCWJwbC5iCQlmY21wX2Rucm1fbnJtX20JCSMgbm8KKwlydHMKK2ZjbXBfZG5ybV9ucm1fbToKKwltb3YuYgkJJm5lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ1onIGNjb2RlIGJpdAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZzZ2xtdWwoKTogZW11bGF0ZXMgdGhlIGZzZ2xtdWwgaW5zdHJ1Y3Rpb24JCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlzY2FsZV90b196ZXJvX3NyYygpIC0gc2NhbGUgc3JjIGV4cG9uZW50IHRvIHplcm8JCSMKKyMJc2NhbGVfdG9femVyb19kc3QoKSAtIHNjYWxlIGRzdCBleHBvbmVudCB0byB6ZXJvCQkjCisjCXVuZl9yZXM0KCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0IGZvciBzZ2xvcAkJIworIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCisjCXJlc19xbmFuKCkgLSByZXR1cm4gUU5BTiByZXN1bHQJCQkJCSMKKyMJcmVzX3NuYW4oKSAtIHJldHVybiBTTkFOIHJlc3VsdAkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlhMSA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGRlc3RpbmF0aW9uIG9wZXJhbmQJCSMKKyMJZDAgIHJuZCBwcmVjLG1vZGUJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSByZXN1bHQJCQkJCQkJIworIwlmcDEgPSBFWE9QIChpZiBleGNlcHRpb24gb2NjdXJyZWQpCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUhhbmRsZSBOQU5zLCBpbmZpbml0aWVzLCBhbmQgemVyb2VzIGFzIHNwZWNpYWwgY2FzZXMuIERpdmlkZQkjCisjIG5vcm1zL2Rlbm9ybXMgaW50byBleHQvc2dsL2RibCBwcmVjaXNpb24uCQkJCSMKKyMJRm9yIG5vcm1zL2Rlbm9ybXMsIHNjYWxlIHRoZSBleHBvbmVudHMgc3VjaCB0aGF0IGEgbXVsdGlwbHkJIworIyBpbnN0cnVjdGlvbiB3b24ndCBjYXVzZSBhbiBleGNlcHRpb24uIFVzZSB0aGUgcmVndWxhciBmc2dsbXVsIHRvCSMKKyMgY29tcHV0ZSBhIHJlc3VsdC4gQ2hlY2sgaWYgdGhlIHJlZ3VsYXIgb3BlcmFuZHMgd291bGQgaGF2ZSB0YWtlbgkjCisjIGFuIGV4Y2VwdGlvbi4gSWYgc28sIHJldHVybiB0aGUgZGVmYXVsdCBvdmVyZmxvdy91bmRlcmZsb3cgcmVzdWx0CSMKKyMgYW5kIHJldHVybiB0aGUgRVhPUCBpZiBleGNlcHRpb25zIGFyZSBlbmFibGVkLiBFbHNlLCBzY2FsZSB0aGUJIworIyByZXN1bHQgb3BlcmFuZCB0byB0aGUgcHJvcGVyIGV4cG9uZW50LgkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlmc2dsbXVsCitmc2dsbXVsOgorCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KKworCWNsci53CQklZDEKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWxzbC5iCQkmMHgzLCVkMQorCW9yLmIJCVNUQUcoJWE2KSwlZDEKKworCWJuZS53CQlmc2dsbXVsX25vdF9ub3JtCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworZnNnbG11bF9ub3JtOgorCW1vdi53CQlEU1RfRVgoJWExKSxGUF9TQ1IxX0VYKCVhNikKKwltb3YubAkJRFNUX0hJKCVhMSksRlBfU0NSMV9ISSglYTYpCisJbW92LmwJCURTVF9MTyglYTEpLEZQX1NDUjFfTE8oJWE2KQorCisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisKKwlic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBzY2FsZSBleHBvbmVudAorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgc2NhbGUgZmFjdG9yIDEKKworCWJzci5sCQlzY2FsZV90b196ZXJvX2RzdAkjIHNjYWxlIGRzdCBleHBvbmVudAorCisJYWRkLmwJCSglc3ApKywlZDAJCSMgU0NBTEVfRkFDVE9SID0gc2NhbGUxICsgc2NhbGUyCisKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4N2ZmZQkjIHdvdWxkIHJlc3VsdCBvdmZsPworCWJlcS53CQlmc2dsbXVsX21heV9vdmZsCSMgcmVzdWx0IG1heSBybmQgdG8gb3ZlcmZsb3cKKwlibHQudwkJZnNnbG11bF9vdmZsCQkjIHJlc3VsdCB3aWxsIG92ZXJmbG93CisKKwljbXBpLmwJCSVkMCwmMHgzZmZmKzB4MDAwMQkjIHdvdWxkIHJlc3VsdCB1bmZsPworCWJlcS53CQlmc2dsbXVsX21heV91bmZsCSMgcmVzdWx0IG1heSBybmQgdG8gbm8gdW5mbAorCWJndC53CQlmc2dsbXVsX3VuZmwJCSMgcmVzdWx0IHdpbGwgdW5kZXJmbG93CisKK2ZzZ2xtdWxfbm9ybWFsOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNnbG11bC54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgbXVsdGlwbHkKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmc2dsbXVsX25vcm1hbF9leGl0OgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBsb2FkIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlydHMKKworZnNnbG11bF9vdmZsOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNnbG11bC54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgbXVsdGlwbHkKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmc2dsbXVsX292ZmxfdHN0OgorCisjIHNhdmUgc2V0dGluZyB0aGlzIHVudGlsIG5vdyBiZWNhdXNlIHRoaXMgaXMgd2hlcmUgZnNnbG11bF9tYXlfb3ZmbCBtYXkganVtcCBpbgorCW9yLmwJCSZvdmZsX2lueF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4CisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDEzLCVkMQkJIyBpcyBPVkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZnNnbG11bF9vdmZsX2VuYQkjIHllcworCitmc2dsbXVsX292ZmxfZGlzOgorCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZT8KKwlzbmUJCSVkMQkJCSMgc2V0IHNpZ24gcGFyYW0gYWNjb3JkaW5nbHkKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3MgcHJlYzpybmQKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBmb3JjZSBwcmVjID0gZXh0CisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQorCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworZnNnbG11bF9vdmZsX2VuYToKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBtb3ZlIHJlc3VsdCB0byBzdGFjaworCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9CisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlzdWJpLmwJCSYweDYwMDAsJWQxCQkjIHN1YnRyYWN0IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJYnJhLmIJCWZzZ2xtdWxfb3ZmbF9kaXMKKworZnNnbG11bF9tYXlfb3ZmbDoKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZzZ2xtdWwueAlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgc2dsIG11bHRpcGx5CisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworCWZhYnMueAkJJWZwMCwlZnAxCQkjIG1ha2UgYSBjb3B5IG9mIHJlc3VsdAorCWZjbXAuYgkJJWZwMSwmMHgyCQkjIGlzIHxyZXN1bHR8ID49IDIuYj8KKwlmYmdlLncJCWZzZ2xtdWxfb3ZmbF90c3QJIyB5ZXM7IG92ZXJmbG93IGhhcyBvY2N1cnJlZAorCisjIG5vLCBpdCBkaWRuJ3Qgb3ZlcmZsb3c7IHdlIGhhdmUgY29ycmVjdCByZXN1bHQKKwlicmEudwkJZnNnbG11bF9ub3JtYWxfZXhpdAorCitmc2dsbXVsX3VuZmw6CisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CisKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAorCisJZm1vdi5sCQkmcnpfbW9kZSoweDEwLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNnbG11bC54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgbXVsdGlwbHkKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgwYiwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZzZ2xtdWxfdW5mbF9lbmEJIyB5ZXMKKworZnNnbG11bF91bmZsX2RpczoKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0CisKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiByZXN1bHQgYWRkcgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEJCSMgcGFzczogcm5kIHByZWMsbW9kZQorCWJzci5sCQl1bmZfcmVzNAkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgJ1onIGJpdCBtYXkgaGF2ZSBiZWVuIHNldAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBVTkZMIGlzIGVuYWJsZWQuCisjCitmc2dsbXVsX3VuZmxfZW5hOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNnbG11bC54CUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBzZ2wgbXVsdGlwbHkKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlmbW92bS54CQkmMHg0MCxGUF9TQ1IwKCVhNikJIyBzYXZlIHJlc3VsdCB0byBzdGFjaworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJYWRkaS5sCQkmMHg2MDAwLCVkMQkJIyBhZGQgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlicmEudwkJZnNnbG11bF91bmZsX2RpcworCitmc2dsbXVsX21heV91bmZsOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNnbG11bC54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgbXVsdGlwbHkKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCisJZmFicy54CQklZnAwLCVmcDEJCSMgbWFrZSBhIGNvcHkgb2YgcmVzdWx0CisJZmNtcC5iCQklZnAxLCYweDIJCSMgaXMgfHJlc3VsdHwgPiAyLmI/CisJZmJndC53CQlmc2dsbXVsX25vcm1hbF9leGl0CSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCWZibHQudwkJZnNnbG11bF91bmZsCQkjIHllczsgdW5kZXJmbG93IG9jY3VycmVkCisKKyMKKyMgd2Ugc3RpbGwgZG9uJ3Qga25vdyBpZiB1bmRlcmZsb3cgb2NjdXJyZWQuIHJlc3VsdCBpcyB+IGVxdWFsIHRvIDIuIGJ1dCwKKyMgd2UgZG9uJ3Qga25vdyBpZiB0aGUgcmVzdWx0IHdhcyBhbiB1bmRlcmZsb3cgdGhhdCByb3VuZGVkIHVwIHRvIGEgMiBvcgorIyBhIG5vcm1hbGl6ZWQgbnVtYmVyIHRoYXQgcm91bmRlZCBkb3duIHRvIGEgMi4gc28sIHJlZG8gdGhlIGVudGlyZSBvcGVyYXRpb24KKyMgdXNpbmcgUlogYXMgdGhlIHJvdW5kaW5nIG1vZGUgdG8gc2VlIHdoYXQgdGhlIHByZS1yb3VuZGVkIHJlc3VsdCBpcy4KKyMgdGhpcyBjYXNlIHNob3VsZCBiZSByZWxhdGl2ZWx5IHJhcmUuCisjCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AgaW50byBmcDEKKworCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBrZWVwIHJuZCBwcmVjCisJb3JpLmIJCSZyel9tb2RlKjB4MTAsJWQxCSMgaW5zZXJ0IFJaCisKKwlmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc2dsbXVsLngJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIHNnbCBtdWx0aXBseQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmYWJzLngJCSVmcDEJCQkjIG1ha2UgYWJzb2x1dGUgdmFsdWUKKwlmY21wLmIJCSVmcDEsJjB4MgkJIyBpcyB8cmVzdWx0fCA8IDIuYj8KKwlmYmdlLncJCWZzZ2xtdWxfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCisJYnJhLncJCWZzZ2xtdWxfdW5mbAkJIyB5ZXMsIHVuZGVyZmxvdyBvY2N1cnJlZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBTaW5nbGUgUHJlY2lzaW9uIE11bHRpcGx5OiBpbnB1dHMgYXJlIG5vdCBib3RoIG5vcm1hbGl6ZWQ7IHdoYXQgYXJlIHRoZXk/CisjCitmc2dsbXVsX25vdF9ub3JtOgorCW1vdi53CQkodGJsX2ZzZ2xtdWxfb3AuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX2ZzZ2xtdWxfb3AuYiwlcGMsJWQxLncqMSkKKworCXN3YmVnCQkmNDgKK3RibF9mc2dsbXVsX29wOgorCXNob3J0CQlmc2dsbXVsX25vcm0JCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggTk9STQorCXNob3J0CQlmc2dsbXVsX3plcm8JCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggWkVSTworCXNob3J0CQlmc2dsbXVsX2luZl9zcmMJCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggSU5GCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3FuYW4JLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBRTkFOCisJc2hvcnQJCWZzZ2xtdWxfbm9ybQkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBERU5PUk0KKwlzaG9ydAkJZnNnbG11bF9yZXNfc25hbgktIHRibF9mc2dsbXVsX29wICMgTk9STSB4IFNOQU4KKwlzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIworCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCisKKwlzaG9ydAkJZnNnbG11bF96ZXJvCQktIHRibF9mc2dsbXVsX29wICMgWkVSTyB4IE5PUk0KKwlzaG9ydAkJZnNnbG11bF96ZXJvCQktIHRibF9mc2dsbXVsX29wICMgWkVSTyB4IFpFUk8KKwlzaG9ydAkJZnNnbG11bF9yZXNfb3BlcnIJLSB0YmxfZnNnbG11bF9vcCAjIFpFUk8geCBJTkYKKwlzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgWkVSTyB4IFFOQU4KKwlzaG9ydAkJZnNnbG11bF96ZXJvCQktIHRibF9mc2dsbXVsX29wICMgWkVSTyB4IERFTk9STQorCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBaRVJPIHggU05BTgorCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCisJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKKworCXNob3J0CQlmc2dsbXVsX2luZl9kc3QJCS0gdGJsX2ZzZ2xtdWxfb3AgIyBJTkYgeCBOT1JNCisJc2hvcnQJCWZzZ2xtdWxfcmVzX29wZXJyCS0gdGJsX2ZzZ2xtdWxfb3AgIyBJTkYgeCBaRVJPCisJc2hvcnQJCWZzZ2xtdWxfaW5mX2RzdAkJLSB0YmxfZnNnbG11bF9vcCAjIElORiB4IElORgorCXNob3J0CQlmc2dsbXVsX3Jlc19xbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBJTkYgeCBRTkFOCisJc2hvcnQJCWZzZ2xtdWxfaW5mX2RzdAkJLSB0YmxfZnNnbG11bF9vcCAjIElORiB4IERFTk9STQorCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBJTkYgeCBTTkFOCisJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKKwlzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIworCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3FuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFFOQU4geCBOT1JNCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3FuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFFOQU4geCBaRVJPCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3FuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFFOQU4geCBJTkYKKwlzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgUU5BTiB4IFFOQU4KKwlzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgUU5BTiB4IERFTk9STQorCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBRTkFOIHggU05BTgorCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCisJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKKworCXNob3J0CQlmc2dsbXVsX25vcm0JCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggTk9STQorCXNob3J0CQlmc2dsbXVsX3plcm8JCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggWkVSTworCXNob3J0CQlmc2dsbXVsX2luZl9zcmMJCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggSU5GCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3FuYW4JLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBRTkFOCisJc2hvcnQJCWZzZ2xtdWxfbm9ybQkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBERU5PUk0KKwlzaG9ydAkJZnNnbG11bF9yZXNfc25hbgktIHRibF9mc2dsbXVsX29wICMgTk9STSB4IFNOQU4KKwlzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIworCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCisKKwlzaG9ydAkJZnNnbG11bF9yZXNfc25hbgktIHRibF9mc2dsbXVsX29wICMgU05BTiB4IE5PUk0KKwlzaG9ydAkJZnNnbG11bF9yZXNfc25hbgktIHRibF9mc2dsbXVsX29wICMgU05BTiB4IFpFUk8KKwlzaG9ydAkJZnNnbG11bF9yZXNfc25hbgktIHRibF9mc2dsbXVsX29wICMgU05BTiB4IElORgorCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBTTkFOIHggUU5BTgorCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBTTkFOIHggREVOT1JNCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3NuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFNOQU4geCBTTkFOCisJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKKwlzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIworCitmc2dsbXVsX3Jlc19vcGVycjoKKwlicmEubAkJcmVzX29wZXJyCitmc2dsbXVsX3Jlc19zbmFuOgorCWJyYS5sCQlyZXNfc25hbgorZnNnbG11bF9yZXNfcW5hbjoKKwlicmEubAkJcmVzX3FuYW4KK2ZzZ2xtdWxfemVybzoKKwlicmEubAkJZm11bF96ZXJvCitmc2dsbXVsX2luZl9zcmM6CisJYnJhLmwJCWZtdWxfaW5mX3NyYworZnNnbG11bF9pbmZfZHN0OgorCWJyYS5sCQlmbXVsX2luZl9kc3QKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmc2dsZGl2KCk6IGVtdWxhdGVzIHRoZSBmc2dsZGl2IGluc3RydWN0aW9uCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJc2NhbGVfdG9femVyb19zcmMoKSAtIHNjYWxlIHNyYyBleHBvbmVudCB0byB6ZXJvCQkjCisjCXNjYWxlX3RvX3plcm9fZHN0KCkgLSBzY2FsZSBkc3QgZXhwb25lbnQgdG8gemVybwkJIworIwl1bmZfcmVzNCgpIC0gcmV0dXJuIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdCBmb3Igc2dsb3AJCSMKKyMJb3ZmX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0CQkJIworIwlyZXNfcW5hbigpIC0gcmV0dXJuIFFOQU4gcmVzdWx0CQkJCQkjCisjCXJlc19zbmFuKCkgLSByZXR1cm4gU05BTiByZXN1bHQJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKKyMJYTEgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBkZXN0aW5hdGlvbiBvcGVyYW5kCQkjCisjCWQwICBybmQgcHJlYyxtb2RlCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gcmVzdWx0CQkJCQkJCSMKKyMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlIYW5kbGUgTkFOcywgaW5maW5pdGllcywgYW5kIHplcm9lcyBhcyBzcGVjaWFsIGNhc2VzLiBEaXZpZGUJIworIyBub3Jtcy9kZW5vcm1zIGludG8gZXh0L3NnbC9kYmwgcHJlY2lzaW9uLgkJCQkjCisjCUZvciBub3Jtcy9kZW5vcm1zLCBzY2FsZSB0aGUgZXhwb25lbnRzIHN1Y2ggdGhhdCBhIGRpdmlkZQkjCisjIGluc3RydWN0aW9uIHdvbid0IGNhdXNlIGFuIGV4Y2VwdGlvbi4gVXNlIHRoZSByZWd1bGFyIGZzZ2xkaXYgdG8JIworIyBjb21wdXRlIGEgcmVzdWx0LiBDaGVjayBpZiB0aGUgcmVndWxhciBvcGVyYW5kcyB3b3VsZCBoYXZlIHRha2VuCSMKKyMgYW4gZXhjZXB0aW9uLiBJZiBzbywgcmV0dXJuIHRoZSBkZWZhdWx0IG92ZXJmbG93L3VuZGVyZmxvdyByZXN1bHQJIworIyBhbmQgcmV0dXJuIHRoZSBFWE9QIGlmIGV4Y2VwdGlvbnMgYXJlIGVuYWJsZWQuIEVsc2UsIHNjYWxlIHRoZQkjCisjIHJlc3VsdCBvcGVyYW5kIHRvIHRoZSBwcm9wZXIgZXhwb25lbnQuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZzZ2xkaXYKK2ZzZ2xkaXY6CisJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzdG9yZSBybmQgaW5mbworCisJY2xyLncJCSVkMQorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJbHNsLmIJCSYweDMsJWQxCisJb3IuYgkJU1RBRyglYTYpLCVkMQkJIyBjb21iaW5lIHNyYyB0YWdzCisKKwlibmUudwkJZnNnbGRpdl9ub3Rfbm9ybQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CisKKyMKKyMgRElWSURFOiBOT1JNcyBhbmQgREVOT1JNcyBPTkxZIQorIworZnNnbGRpdl9ub3JtOgorCW1vdi53CQlEU1RfRVgoJWExKSxGUF9TQ1IxX0VYKCVhNikKKwltb3YubAkJRFNUX0hJKCVhMSksRlBfU0NSMV9ISSglYTYpCisJbW92LmwJCURTVF9MTyglYTEpLEZQX1NDUjFfTE8oJWE2KQorCisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisKKwlic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yIDEKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIHNjYWxlIGZhY3RvciAxCisKKwlic3IubAkJc2NhbGVfdG9femVyb19kc3QJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yIDIKKworCW5lZy5sCQkoJXNwKQkJCSMgUy5GLiA9IHNjYWxlMSAtIHNjYWxlMgorCWFkZC5sCQklZDAsKCVzcCkKKworCW1vdi53CQkyK0xfU0NSMyglYTYpLCVkMQkjIGZldGNoIHByZWNpc2lvbixtb2RlCisJbHNyLmIJCSYweDYsJWQxCisJbW92LmwJCSglc3ApKywlZDAKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4N2ZmZQorCWJsZS53CQlmc2dsZGl2X21heV9vdmZsCisKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4MDAwMAkjIHdpbGwgcmVzdWx0IHVuZGVyZmxvdz8KKwliZXEudwkJZnNnbGRpdl9tYXlfdW5mbAkjIG1heWJlCisJYmd0LncJCWZzZ2xkaXZfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKKworZnNnbGRpdl9ub3JtYWw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzYXZlIEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNnbGRpdi54CUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBzZ2wgZGl2aWRlCisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIEZQU1IKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKK2ZzZ2xkaXZfbm9ybWFsX2V4aXQ6CisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgcmVzdWx0IG9uIHN0YWNrCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiByZXN1bHQgaW4gZnAwCisJcnRzCisKK2ZzZ2xkaXZfbWF5X292Zmw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBzZXQgRlBTUgorCisJZnNnbGRpdi54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBkaXZpZGUKKworCWZtb3YubAkJJWZwc3IsJWQxCisJZm1vdi5sCQkmMHgwLCVmcGNyCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgsTgorCisJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgcmVzdWx0IHRvIHN0YWNrCisJbW92LncJCSglc3ApLCVkMQkJIyBmZXRjaCBuZXcgZXhwb25lbnQKKwlhZGQubAkJJjB4Yywlc3AJCSMgY2xlYXIgcmVzdWx0CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwljbXAubAkJJWQxLCYweDdmZmYJCSMgZGlkIGRpdmlkZSBvdmVyZmxvdz8KKwlibHQuYgkJZnNnbGRpdl9ub3JtYWxfZXhpdAorCitmc2dsZGl2X292ZmxfdHN0OgorCW9yLncJCSZvdmZsX2lueF9tYXNrLDIrVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAorCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgxMywlZDEJCSMgaXMgT1ZGTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZzZ2xkaXZfb3ZmbF9lbmEJIyB5ZXMKKworZnNnbGRpdl9vdmZsX2RpczoKKwlidHN0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBpcyByZXN1bHQgbmVnYXRpdmUKKwlzbmUJCSVkMQkJCSMgc2V0IHNpZ24gcGFyYW0gYWNjb3JkaW5nbHkKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3MgcHJlYzpybmQKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBraWxsIHByZWNpc2lvbgorCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IElORiBpZiBhcHBsaWNhYmxlCisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCitmc2dsZGl2X292ZmxfZW5hOgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIG1vdmUgcmVzdWx0IHRvIHN0YWNrCisKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCXN1YmkubAkJJjB4NjAwMCwlZDEJCSMgc3VidHJhY3QgbmV3IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCQkjIGNsZWFyIG1zIGJpdAorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCWJyYS5iCQlmc2dsZGl2X292ZmxfZGlzCisKK2ZzZ2xkaXZfdW5mbDoKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKworCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCSZyel9tb2RlKjB4MTAsJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc2dsZGl2LngJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIHNnbCBkaXZpZGUKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgwYiwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZzZ2xkaXZfdW5mbF9lbmEJIyB5ZXMKKworZnNnbGRpdl91bmZsX2RpczoKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0CisKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiByZXN1bHQgYWRkcgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEJCSMgcGFzczogcm5kIHByZWMsbW9kZQorCWJzci5sCQl1bmZfcmVzNAkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgJ1onIGJpdCBtYXkgaGF2ZSBiZWVuIHNldAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBVTkZMIGlzIGVuYWJsZWQuCisjCitmc2dsZGl2X3VuZmxfZW5hOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNnbGRpdi54CUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBzZ2wgZGl2aWRlCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJZm1vdm0ueAkJJjB4NDAsRlBfU0NSMCglYTYpCSMgc2F2ZSByZXN1bHQgdG8gc3RhY2sKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCWFkZGkubAkJJjB4NjAwMCwlZDEJCSMgYWRkIGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCQkjIGNsZWFyIHRvcCBiaXQKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sIG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJYnJhLmIJCWZzZ2xkaXZfdW5mbF9kaXMKKworIworIyB0aGUgZGl2aWRlIG9wZXJhdGlvbiBNQVkgdW5kZXJmbG93OgorIworZnNnbGRpdl9tYXlfdW5mbDoKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZzZ2xkaXYueAlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgc2dsIGRpdmlkZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwlmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKKwlmY21wLmIJCSVmcDEsJjB4MQkJIyBpcyB8cmVzdWx0fCA+IDEuYj8KKwlmYmd0LncJCWZzZ2xkaXZfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCisJZmJsdC53CQlmc2dsZGl2X3VuZmwJCSMgeWVzOyB1bmRlcmZsb3cgb2NjdXJyZWQKKworIworIyB3ZSBzdGlsbCBkb24ndCBrbm93IGlmIHVuZGVyZmxvdyBvY2N1cnJlZC4gcmVzdWx0IGlzIH4gZXF1YWwgdG8gMS4gYnV0LAorIyB3ZSBkb24ndCBrbm93IGlmIHRoZSByZXN1bHQgd2FzIGFuIHVuZGVyZmxvdyB0aGF0IHJvdW5kZWQgdXAgdG8gYSAxCisjIG9yIGEgbm9ybWFsaXplZCBudW1iZXIgdGhhdCByb3VuZGVkIGRvd24gdG8gYSAxLiBzbywgcmVkbyB0aGUgZW50aXJlCisjIG9wZXJhdGlvbiB1c2luZyBSWiBhcyB0aGUgcm91bmRpbmcgbW9kZSB0byBzZWUgd2hhdCB0aGUgcHJlLXJvdW5kZWQKKyMgcmVzdWx0IGlzLiB0aGlzIGNhc2Ugc2hvdWxkIGJlIHJlbGF0aXZlbHkgcmFyZS4KKyMKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcCBpbnRvICVmcDEKKworCWNsci5sCQklZDEJCQkjIGNsZWFyIHNjcmF0Y2ggcmVnaXN0ZXIKKwlvcmkuYgkJJnJ6X21vZGUqMHgxMCwlZDEJIyBmb3JjZSBSWiBybmQgbW9kZQorCisJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNnbGRpdi54CUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBzZ2wgZGl2aWRlCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWZhYnMueAkJJWZwMQkJCSMgbWFrZSBhYnNvbHV0ZSB2YWx1ZQorCWZjbXAuYgkJJWZwMSwmMHgxCQkjIGlzIHxyZXN1bHR8IDwgMS5iPworCWZiZ2UudwkJZnNnbGRpdl9ub3JtYWxfZXhpdAkjIG5vOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKKwlicmEudwkJZnNnbGRpdl91bmZsCQkjIHllczsgdW5kZXJmbG93IG9jY3VycmVkCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBEaXZpZGU6IGlucHV0cyBhcmUgbm90IGJvdGggbm9ybWFsaXplZDsgd2hhdCBhcmUgdGhleT8KKyMKK2ZzZ2xkaXZfbm90X25vcm06CisJbW92LncJCSh0YmxfZnNnbGRpdl9vcC5iLCVwYywlZDEudyoyKSwlZDEKKwlqbXAJCSh0YmxfZnNnbGRpdl9vcC5iLCVwYywlZDEudyoxKQorCisJc3diZWcJCSY0OAordGJsX2ZzZ2xkaXZfb3A6CisJc2hvcnQJCWZzZ2xkaXZfbm9ybQkJLSB0YmxfZnNnbGRpdl9vcCAjIE5PUk0gLyBOT1JNCisJc2hvcnQJCWZzZ2xkaXZfaW5mX2xvYWQJLSB0YmxfZnNnbGRpdl9vcCAjIE5PUk0gLyBaRVJPCisJc2hvcnQJCWZzZ2xkaXZfemVyb19sb2FkCS0gdGJsX2ZzZ2xkaXZfb3AgIyBOT1JNIC8gSU5GCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIE5PUk0gLyBRTkFOCisJc2hvcnQJCWZzZ2xkaXZfbm9ybQkJLSB0YmxfZnNnbGRpdl9vcCAjIE5PUk0gLyBERU5PUk0KKwlzaG9ydAkJZnNnbGRpdl9yZXNfc25hbgktIHRibF9mc2dsZGl2X29wICMgTk9STSAvIFNOQU4KKwlzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIworCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCisKKwlzaG9ydAkJZnNnbGRpdl96ZXJvX2xvYWQJLSB0YmxfZnNnbGRpdl9vcCAjIFpFUk8gLyBOT1JNCisJc2hvcnQJCWZzZ2xkaXZfcmVzX29wZXJyCS0gdGJsX2ZzZ2xkaXZfb3AgIyBaRVJPIC8gWkVSTworCXNob3J0CQlmc2dsZGl2X3plcm9fbG9hZAktIHRibF9mc2dsZGl2X29wICMgWkVSTyAvIElORgorCXNob3J0CQlmc2dsZGl2X3Jlc19xbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBaRVJPIC8gUU5BTgorCXNob3J0CQlmc2dsZGl2X3plcm9fbG9hZAktIHRibF9mc2dsZGl2X29wICMgWkVSTyAvIERFTk9STQorCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBaRVJPIC8gU05BTgorCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCisJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKKworCXNob3J0CQlmc2dsZGl2X2luZl9kc3QJCS0gdGJsX2ZzZ2xkaXZfb3AgIyBJTkYgLyBOT1JNCisJc2hvcnQJCWZzZ2xkaXZfaW5mX2RzdAkJLSB0YmxfZnNnbGRpdl9vcCAjIElORiAvIFpFUk8KKwlzaG9ydAkJZnNnbGRpdl9yZXNfb3BlcnIJLSB0YmxfZnNnbGRpdl9vcCAjIElORiAvIElORgorCXNob3J0CQlmc2dsZGl2X3Jlc19xbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBJTkYgLyBRTkFOCisJc2hvcnQJCWZzZ2xkaXZfaW5mX2RzdAkJLSB0YmxfZnNnbGRpdl9vcCAjIElORiAvIERFTk9STQorCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBJTkYgLyBTTkFOCisJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIworCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFFOQU4gLyBOT1JNCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFFOQU4gLyBaRVJPCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFFOQU4gLyBJTkYKKwlzaG9ydAkJZnNnbGRpdl9yZXNfcW5hbgktIHRibF9mc2dsZGl2X29wICMgUU5BTiAvIFFOQU4KKwlzaG9ydAkJZnNnbGRpdl9yZXNfcW5hbgktIHRibF9mc2dsZGl2X29wICMgUU5BTiAvIERFTk9STQorCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBRTkFOIC8gU05BTgorCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCisJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKKworCXNob3J0CQlmc2dsZGl2X25vcm0JCS0gdGJsX2ZzZ2xkaXZfb3AgIyBERU5PUk0gLyBOT1JNCisJc2hvcnQJCWZzZ2xkaXZfaW5mX2xvYWQJLSB0YmxfZnNnbGRpdl9vcCAjIERFTk9STSAvIFpFUk8KKwlzaG9ydAkJZnNnbGRpdl96ZXJvX2xvYWQJLSB0YmxfZnNnbGRpdl9vcCAjIERFTk9STSAvIElORgorCXNob3J0CQlmc2dsZGl2X3Jlc19xbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBERU5PUk0gLyBRTkFOCisJc2hvcnQJCWZzZ2xkaXZfbm9ybQkJLSB0YmxfZnNnbGRpdl9vcCAjIERFTk9STSAvIERFTk9STQorCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBERU5PUk0gLyBTTkFOCisJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIworCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3NuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFNOQU4gLyBOT1JNCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3NuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFNOQU4gLyBaRVJPCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3NuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFNOQU4gLyBJTkYKKwlzaG9ydAkJZnNnbGRpdl9yZXNfc25hbgktIHRibF9mc2dsZGl2X29wICMgU05BTiAvIFFOQU4KKwlzaG9ydAkJZnNnbGRpdl9yZXNfc25hbgktIHRibF9mc2dsZGl2X29wICMgU05BTiAvIERFTk9STQorCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBTTkFOIC8gU05BTgorCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCisJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKKworZnNnbGRpdl9yZXNfcW5hbjoKKwlicmEubAkJcmVzX3FuYW4KK2ZzZ2xkaXZfcmVzX3NuYW46CisJYnJhLmwJCXJlc19zbmFuCitmc2dsZGl2X3Jlc19vcGVycjoKKwlicmEubAkJcmVzX29wZXJyCitmc2dsZGl2X2luZl9sb2FkOgorCWJyYS5sCQlmZGl2X2luZl9sb2FkCitmc2dsZGl2X3plcm9fbG9hZDoKKwlicmEubAkJZmRpdl96ZXJvX2xvYWQKK2ZzZ2xkaXZfaW5mX2RzdDoKKwlicmEubAkJZmRpdl9pbmZfZHN0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZmFkZCgpOiBlbXVsYXRlcyB0aGUgZmFkZCBpbnN0cnVjdGlvbgkJCQkjCisjCWZzYWRkKCk6IGVtdWxhdGVzIHRoZSBmYWRkIGluc3RydWN0aW9uCQkJCSMKKyMJZmRhZGQoKTogZW11bGF0ZXMgdGhlIGZkYWRkIGluc3RydWN0aW9uCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWFkZHN1Yl9zY2FsZXIyKCkgLSBzY2FsZSB0aGUgb3BlcmFuZHMgc28gdGhleSB3b24ndCB0YWtlIGV4YwkjCisjCW92Zl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdAkJCSMKKyMJdW5mX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdAkJCSMKKyMJcmVzX3FuYW4oKSAtIHNldCBRTkFOIHJlc3VsdAkJCQkJIworIwlyZXNfc25hbigpIC0gc2V0IFNOQU4gcmVzdWx0CQkJCQkjCisjCXJlc19vcGVycigpIC0gc2V0IE9QRVJSIHJlc3VsdAkJCQkJIworIwlzY2FsZV90b196ZXJvX3NyYygpIC0gc2V0IHNyYyBvcGVyYW5kIGV4cG9uZW50IGVxdWFsIHRvIHplcm8JIworIwlzY2FsZV90b196ZXJvX2RzdCgpIC0gc2V0IGRzdCBvcGVyYW5kIGV4cG9uZW50IGVxdWFsIHRvIHplcm8JIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlhMSA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGRlc3RpbmF0aW9uIG9wZXJhbmQJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IHJlc3VsdAkJCQkJCQkjCisjCWZwMSA9IEVYT1AgKGlmIGV4Y2VwdGlvbiBvY2N1cnJlZCkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSGFuZGxlIE5BTnMsIGluZmluaXRpZXMsIGFuZCB6ZXJvZXMgYXMgc3BlY2lhbCBjYXNlcy4gRGl2aWRlCSMKKyMgbm9ybXMgaW50byBleHRlbmRlZCwgc2luZ2xlLCBhbmQgZG91YmxlIHByZWNpc2lvbi4JCQkjCisjCURvIGFkZGl0aW9uIGFmdGVyIHNjYWxpbmcgZXhwb25lbnRzIHN1Y2ggdGhhdCBleGNlcHRpb24gd29uJ3QJIworIyBvY2N1ci4gVGhlbiwgY2hlY2sgcmVzdWx0IGV4cG9uZW50IHRvIHNlZSBpZiBleGNlcHRpb24gd291bGQgaGF2ZQkjCisjIG9jY3VycmVkLiBJZiBzbywgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGFuZCBtYXliZSBFWE9QLiBFbHNlLCBpbnNlcnQJIworIyB0aGUgY29ycmVjdCByZXN1bHQgZXhwb25lbnQgYW5kIHJldHVybi4gU2V0IEZQU1IgYml0cyBhcyBhcHByb3ByaWF0ZS4JIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJZnNhZGQKK2ZzYWRkOgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWMKKwlicmEuYgkJZmFkZAorCisJZ2xvYmFsCQlmZGFkZAorZmRhZGQ6CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKKwlvcmkuYgkJJmRfbW9kZSoweDEwLCVkMAkjIGluc2VydCBkYmwgcHJlYworCisJZ2xvYmFsCQlmYWRkCitmYWRkOgorCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KKworCWNsci53CQklZDEKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWxzbC5iCQkmMHgzLCVkMQorCW9yLmIJCVNUQUcoJWE2KSwlZDEJCSMgY29tYmluZSBzcmMgdGFncworCisJYm5lLncJCWZhZGRfbm90X25vcm0JCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworIworIyBBREQ6IG5vcm1zIGFuZCBkZW5vcm1zCisjCitmYWRkX25vcm06CisJYnNyLmwJCWFkZHN1Yl9zY2FsZXIyCQkjIHNjYWxlIGV4cG9uZW50cworCitmYWRkX3plcm9fZW50cnk6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmYWRkLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBhZGQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZm1vdi5sCQklZnBzciwlZDEJCSMgZmV0Y2ggSU5FWDIsTixaCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIGV4YyBhbmQgY2NvZGUgYml0cworCisJZmJlcS53CQlmYWRkX3plcm9fZXhpdAkJIyBpZiByZXN1bHQgaXMgemVybywgZW5kIG5vdworCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCisJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgcmVzdWx0IHRvIHN0YWNrCisKKwltb3YudwkJMitMX1NDUjMoJWE2KSwlZDEKKwlsc3IuYgkJJjB4NiwlZDEKKworCW1vdi53CQkoJXNwKSwlZDIJCSMgZmV0Y2ggbmV3IHNpZ24sIGV4cAorCWFuZGkubAkJJjB4N2ZmZiwlZDIJCSMgc3RyaXAgc2lnbgorCXN1Yi5sCQklZDAsJWQyCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisKKwljbXAubAkJJWQyLCh0YmxfZmFkZF9vdmZsLmIsJXBjLCVkMS53KjQpICMgaXMgaXQgYW4gb3ZlcmZsb3c/CisJYmdlLmIJCWZhZGRfb3ZmbAkJIyB5ZXMKKworCWNtcC5sCQklZDIsKHRibF9mYWRkX3VuZmwuYiwlcGMsJWQxLncqNCkgIyBpcyBpdCBhbiB1bmRlcmZsb3c/CisJYmx0LncJCWZhZGRfdW5mbAkJIyB5ZXMKKwliZXEudwkJZmFkZF9tYXlfdW5mbAkJIyBtYXliZTsgZ28gZmluZCBvdXQKKworZmFkZF9ub3JtYWw6CisJbW92LncJCSglc3ApLCVkMQorCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBzaWduCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDEsKCVzcCkJCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCisJZm1vdm0ueAkJKCVzcCkrLCYweDgwCQkjIHJldHVybiByZXN1bHQgaW4gZnAwCisKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJcnRzCisKK2ZhZGRfemVyb19leGl0OgorIwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyByZXR1cm4gemVybyBpbiBmcDAKKwlydHMKKwordGJsX2ZhZGRfb3ZmbDoKKwlsb25nCQkweDdmZmYJCQkjIGV4dCBvdmZsCisJbG9uZwkJMHg0MDdmCQkJIyBzZ2wgb3ZmbAorCWxvbmcJCTB4NDNmZgkJCSMgZGJsIG92ZmwKKwordGJsX2ZhZGRfdW5mbDoKKwlsb25nCSAgICAgICAgMHgwMDAwCQkJIyBleHQgdW5mbAorCWxvbmcJCTB4M2Y4MQkJCSMgc2dsIHVuZmwKKwlsb25nCQkweDNjMDEJCQkjIGRibCB1bmZsCisKK2ZhZGRfb3ZmbDoKKwlvci5sCQkmb3ZmbF9pbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4CisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDEzLCVkMQkJIyBpcyBPVkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZmFkZF9vdmZsX2VuYQkJIyB5ZXMKKworCWFkZC5sCQkmMHhjLCVzcAorZmFkZF9vdmZsX2RpczoKKwlidHN0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBpcyByZXN1bHQgbmVnYXRpdmU/CisJc25lCQklZDEJCQkjIHNldCBzaWduIHBhcmFtIGFjY29yZGluZ2x5CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzIHByZWM6cm5kCisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQorCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJcnRzCisKK2ZhZGRfb3ZmbF9lbmE6CisJbW92LmIJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZmFkZF9vdmZsX2VuYV9zZAkjIG5vOyBwcmVjID0gc2dsIG9yIGRibAorCitmYWRkX292ZmxfZW5hX2NvbnQ6CisJbW92LncJCSglc3ApLCVkMQorCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBzaWduCisJc3ViaS5sCQkmMHg2MDAwLCVkMgkJIyBhZGQgZXh0cmEgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDIKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSwoJXNwKQkJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisKKwlmbW92bS54CQkoJXNwKSssJjB4NDAJCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJYnJhLmIJCWZhZGRfb3ZmbF9kaXMKKworZmFkZF9vdmZsX2VuYV9zZDoKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAorCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4MzAsJWQxCQkjIGtlZXAgcm5kIG1vZGUKKwlmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgorCisJZmFkZC54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgYWRkCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJYWRkLmwJCSYweGMsJXNwCisJZm1vdm0ueAkJJjB4MDEsLSglc3ApCisJYnJhLmIJCWZhZGRfb3ZmbF9lbmFfY29udAorCitmYWRkX3VuZmw6CisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CisKKwlhZGQubAkJJjB4Yywlc3AKKworCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCSZyel9tb2RlKjB4MTAsJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmYWRkLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBhZGQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWCxOCisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZmFkZF91bmZsX2VuYQkJIyB5ZXMKKworZmFkZF91bmZsX2RpczoKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0CisKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiByZXN1bHQgYWRkcgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEJCSMgcGFzczogcm5kIHByZWMsbW9kZQorCWJzci5sCQl1bmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgJ1onIGJpdCBtYXkgaGF2ZSBiZWVuIHNldAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJcnRzCisKK2ZhZGRfdW5mbF9lbmE6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AKKworCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CisJYm5lLmIJCWZhZGRfdW5mbF9lbmFfc2QJIyBubzsgc2dsIG9yIGRibAorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKK2ZhZGRfdW5mbF9lbmFfY29udDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZmFkZC54CQlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgbXVsdGlwbHkKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlmbW92bS54CQkmMHg0MCxGUF9TQ1IwKCVhNikJIyBzYXZlIHJlc3VsdCB0byBzdGFjaworCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9CisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBuZXcgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEJCSMgY2xlYXIgdG9wIGJpdAorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlicmEudwkJZmFkZF91bmZsX2RpcworCitmYWRkX3VuZmxfZW5hX3NkOgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDMwLCVkMQkJIyB1c2Ugb25seSBybmQgbW9kZQorCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisKKwlicmEuYgkJZmFkZF91bmZsX2VuYV9jb250CisKKyMKKyMgcmVzdWx0IGlzIGVxdWFsIHRvIHRoZSBzbWFsbGVzdCBub3JtYWxpemVkIG51bWJlciBpbiB0aGUgc2VsZWN0ZWQgcHJlY2lzaW9uCisjIGlmIHRoZSBwcmVjaXNpb24gaXMgZXh0ZW5kZWQsIHRoaXMgcmVzdWx0IGNvdWxkIG5vdCBoYXZlIGNvbWUgZnJvbSBhbgorIyB1bmRlcmZsb3cgdGhhdCByb3VuZGVkIHVwLgorIworZmFkZF9tYXlfdW5mbDoKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHhjMCwlZDEKKwliZXEudwkJZmFkZF9ub3JtYWwJCSMgeWVzOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKKworCW1vdi5sCQkweDQoJXNwKSwlZDEJCSMgZXh0cmFjdCBoaShtYW4pCisJY21waS5sCQklZDEsJjB4ODAwMDAwMDAJCSMgaXMgaGkobWFuKSA9IDB4ODAwMDAwMDA/CisJYm5lLncJCWZhZGRfbm9ybWFsCQkjIG5vOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKKworCXRzdC5sCQkweDgoJXNwKQkJIyBpcyBsbyhtYW4pID0gMHgwPworCWJuZS53CQlmYWRkX25vcm1hbAkJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCisKKwlidHN0CQkmaW5leDJfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBpcyBJTkVYMiBzZXQ/CisJYmVxLncJCWZhZGRfbm9ybWFsCQkjIG5vOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKKworIworIyBvaywgc28gbm93IHRoZSByZXN1bHQgaGFzIGEgZXhwb25lbnQgZXF1YWwgdG8gdGhlIHNtYWxsZXN0IG5vcm1hbGl6ZWQKKyMgZXhwb25lbnQgZm9yIHRoZSBzZWxlY3RlZCBwcmVjaXNpb24uIGFsc28sIHRoZSBtYW50aXNzYSBpcyBlcXVhbCB0bworIyAweDgwMDAwMDAwMDAwMDAwMDAgYW5kIHRoaXMgbWFudGlzc2EgaXMgdGhlIHJlc3VsdCBvZiByb3VuZGluZyBub24temVybworIyBnLHIscy4KKyMgbm93LCB3ZSBtdXN0IGRldGVybWluZSB3aGV0aGVyIHRoZSBwcmUtcm91bmRlZCByZXN1bHQgd2FzIGFuIHVuZGVyZmxvdworIyByb3VuZGVkICJ1cCIgb3IgYSBub3JtYWxpemVkIG51bWJlciByb3VuZGVkICJkb3duIi4KKyMgc28sIHdlIGRvIHRoaXMgYmUgcmUtZXhlY3V0aW5nIHRoZSBhZGQgdXNpbmcgUlogYXMgdGhlIHJvdW5kaW5nIG1vZGUgYW5kCisjIHNlZWluZyBpZiB0aGUgbmV3IHJlc3VsdCBpcyBzbWFsbGVyIG9yIGVxdWFsIHRvIHRoZSBjdXJyZW50IHJlc3VsdC4KKyMKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcCBpbnRvIGZwMQorCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGtlZXAgcm5kIHByZWMKKwlvcmkuYgkJJnJ6X21vZGUqMHgxMCwlZDEJIyBpbnNlcnQgcm5kIG1vZGUKKwlmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmYWRkLngJCUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBhZGQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlmYWJzLngJCSVmcDAJCQkjIGNvbXBhcmUgYWJzb2x1dGUgdmFsdWVzCisJZmFicy54CQklZnAxCisJZmNtcC54CQklZnAwLCVmcDEJCSMgaXMgZmlyc3QgcmVzdWx0ID4gc2Vjb25kPworCisJZmJndC53CQlmYWRkX3VuZmwJCSMgeWVzOyBpdCdzIGFuIHVuZGVyZmxvdworCWJyYS53CQlmYWRkX25vcm1hbAkJIyBubzsgaXQncyBub3QgYW4gdW5kZXJmbG93CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgQWRkOiBpbnB1dHMgYXJlIG5vdCBib3RoIG5vcm1hbGl6ZWQ7IHdoYXQgYXJlIHRoZXk/CisjCitmYWRkX25vdF9ub3JtOgorCW1vdi53CQkodGJsX2ZhZGRfb3AuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX2ZhZGRfb3AuYiwlcGMsJWQxLncqMSkKKworCXN3YmVnCQkmNDgKK3RibF9mYWRkX29wOgorCXNob3J0CQlmYWRkX25vcm0JLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBOT1JNCisJc2hvcnQJCWZhZGRfemVyb19zcmMJLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBaRVJPCisJc2hvcnQJCWZhZGRfaW5mX3NyYwktIHRibF9mYWRkX29wICMgTk9STSArIElORgorCXNob3J0CQlmYWRkX3Jlc19xbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgUU5BTgorCXNob3J0CQlmYWRkX25vcm0JLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBERU5PUk0KKwlzaG9ydAkJZmFkZF9yZXNfc25hbgktIHRibF9mYWRkX29wICMgTk9STSArIFNOQU4KKwlzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCisJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIworCisJc2hvcnQJCWZhZGRfemVyb19kc3QJLSB0YmxfZmFkZF9vcCAjIFpFUk8gKyBOT1JNCisJc2hvcnQJCWZhZGRfemVyb18yCS0gdGJsX2ZhZGRfb3AgIyBaRVJPICsgWkVSTworCXNob3J0CQlmYWRkX2luZl9zcmMJLSB0YmxfZmFkZF9vcCAjIFpFUk8gKyBJTkYKKwlzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgTk9STSArIFFOQU4KKwlzaG9ydAkJZmFkZF96ZXJvX2RzdAktIHRibF9mYWRkX29wICMgWkVSTyArIERFTk9STQorCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgU05BTgorCXNob3J0CQl0YmxfZmFkZF9vcAktIHRibF9mYWRkX29wICMKKwlzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCisKKwlzaG9ydAkJZmFkZF9pbmZfZHN0CS0gdGJsX2ZhZGRfb3AgIyBJTkYgKyBOT1JNCisJc2hvcnQJCWZhZGRfaW5mX2RzdAktIHRibF9mYWRkX29wICMgSU5GICsgWkVSTworCXNob3J0CQlmYWRkX2luZl8yCS0gdGJsX2ZhZGRfb3AgIyBJTkYgKyBJTkYKKwlzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgTk9STSArIFFOQU4KKwlzaG9ydAkJZmFkZF9pbmZfZHN0CS0gdGJsX2ZhZGRfb3AgIyBJTkYgKyBERU5PUk0KKwlzaG9ydAkJZmFkZF9yZXNfc25hbgktIHRibF9mYWRkX29wICMgTk9STSArIFNOQU4KKwlzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCisJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIworCisJc2hvcnQJCWZhZGRfcmVzX3FuYW4JLSB0YmxfZmFkZF9vcCAjIFFOQU4gKyBOT1JNCisJc2hvcnQJCWZhZGRfcmVzX3FuYW4JLSB0YmxfZmFkZF9vcCAjIFFOQU4gKyBaRVJPCisJc2hvcnQJCWZhZGRfcmVzX3FuYW4JLSB0YmxfZmFkZF9vcCAjIFFOQU4gKyBJTkYKKwlzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgUU5BTiArIFFOQU4KKwlzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgUU5BTiArIERFTk9STQorCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBRTkFOICsgU05BTgorCXNob3J0CQl0YmxfZmFkZF9vcAktIHRibF9mYWRkX29wICMKKwlzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCisKKwlzaG9ydAkJZmFkZF9ub3JtCS0gdGJsX2ZhZGRfb3AgIyBERU5PUk0gKyBOT1JNCisJc2hvcnQJCWZhZGRfemVyb19zcmMJLSB0YmxfZmFkZF9vcCAjIERFTk9STSArIFpFUk8KKwlzaG9ydAkJZmFkZF9pbmZfc3JjCS0gdGJsX2ZhZGRfb3AgIyBERU5PUk0gKyBJTkYKKwlzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgTk9STSArIFFOQU4KKwlzaG9ydAkJZmFkZF9ub3JtCS0gdGJsX2ZhZGRfb3AgIyBERU5PUk0gKyBERU5PUk0KKwlzaG9ydAkJZmFkZF9yZXNfc25hbgktIHRibF9mYWRkX29wICMgTk9STSArIFNOQU4KKwlzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCisJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIworCisJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIFNOQU4gKyBOT1JNCisJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIFNOQU4gKyBaRVJPCisJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIFNOQU4gKyBJTkYKKwlzaG9ydAkJZmFkZF9yZXNfc25hbgktIHRibF9mYWRkX29wICMgU05BTiArIFFOQU4KKwlzaG9ydAkJZmFkZF9yZXNfc25hbgktIHRibF9mYWRkX29wICMgU05BTiArIERFTk9STQorCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBTTkFOICsgU05BTgorCXNob3J0CQl0YmxfZmFkZF9vcAktIHRibF9mYWRkX29wICMKKwlzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCisKK2ZhZGRfcmVzX3FuYW46CisJYnJhLmwJCXJlc19xbmFuCitmYWRkX3Jlc19zbmFuOgorCWJyYS5sCQlyZXNfc25hbgorCisjCisjIGJvdGggb3BlcmFuZHMgYXJlIFpFUk9lcworIworZmFkZF96ZXJvXzI6CisJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBhcmUgdGhlIHNpZ25zIG9wcG9zaXRlCisJbW92LmIJCURTVF9FWCglYTEpLCVkMQorCWVvci5iCQklZDAsJWQxCisJYm1pLncJCWZhZGRfemVyb18yX2Noa19ybQkjIHdlZWQgb3V0ICgtWkVSTykrKCtaRVJPKQorCisjIHRoZSBzaWducyBhcmUgdGhlIHNhbWUuIHNvIGRldGVybWluZSB3aGV0aGVyIHRoZXkgYXJlIHBvc2l0aXZlIG9yIG5lZ2F0aXZlCisjIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlbHkgc2lnbmVkIHplcm8uCisJdHN0LmIJCSVkMAkJCSMgYXJlIFpFUk9lcyBwb3NpdGl2ZSBvciBuZWdhdGl2ZT8KKwlibWkuYgkJZmFkZF96ZXJvX3JtCQkjIG5lZ2F0aXZlCisJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgcmV0dXJuICtaRVJPCisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaCisJcnRzCisKKyMKKyMgdGhlIFpFUk9lcyBoYXZlIG9wcG9zaXRlIHNpZ25zOgorIyAtIHRoZXJlZm9yZSwgd2UgcmV0dXJuICtaRVJPIGlmIHRoZSByb3VuZGluZyBtb2RlcyBhcmUgUk4sUlosIG9yIFJQLgorIyAtIC1aRVJPIGlzIHJldHVybmVkIGluIHRoZSBjYXNlIG9mIFJNLgorIworZmFkZF96ZXJvXzJfY2hrX3JtOgorCW1vdi5iCQkzK0xfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4MzAsJWQxCQkjIGV4dHJhY3Qgcm5kIG1vZGUKKwljbXBpLmIJCSVkMSwmcm1fbW9kZSoweDEwCSMgaXMgcm5kIG1vZGUgPT0gUk0/CisJYmVxLmIJCWZhZGRfemVyb19ybQkJIyB5ZXMKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyByZXR1cm4gK1pFUk8KKwltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0IFoKKwlydHMKKworZmFkZF96ZXJvX3JtOgorCWZtb3YucwkJJjB4ODAwMDAwMDAsJWZwMAkjIHJldHVybiAtWkVSTworCW1vdi5iCQkmbmVnX2JtYXNrK3pfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IE5FRy9aCisJcnRzCisKKyMKKyMgb25lIG9wZXJhbmQgaXMgYSBaRVJPIGFuZCB0aGUgb3RoZXIgaXMgYSBERU5PUk0gb3IgTk9STS4gc2NhbGUKKyMgdGhlIERFTk9STSBvciBOT1JNIGFuZCBqdW1wIHRvIHRoZSByZWd1bGFyIGZhZGQgcm91dGluZS4KKyMKK2ZhZGRfemVyb19kc3Q6CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgc2NhbGUgdGhlIG9wZXJhbmQKKwljbHIudwkJRlBfU0NSMV9FWCglYTYpCisJY2xyLmwJCUZQX1NDUjFfSEkoJWE2KQorCWNsci5sCQlGUF9TQ1IxX0xPKCVhNikKKwlicmEudwkJZmFkZF96ZXJvX2VudHJ5CQkjIGdvIGV4ZWN1dGUgZmFkZAorCitmYWRkX3plcm9fc3JjOgorCW1vdi53CQlEU1RfRVgoJWExKSxGUF9TQ1IxX0VYKCVhNikKKwltb3YubAkJRFNUX0hJKCVhMSksRlBfU0NSMV9ISSglYTYpCisJbW92LmwJCURTVF9MTyglYTEpLEZQX1NDUjFfTE8oJWE2KQorCWJzci5sCQlzY2FsZV90b196ZXJvX2RzdAkjIHNjYWxlIHRoZSBvcGVyYW5kCisJY2xyLncJCUZQX1NDUjBfRVgoJWE2KQorCWNsci5sCQlGUF9TQ1IwX0hJKCVhNikKKwljbHIubAkJRlBfU0NSMF9MTyglYTYpCisJYnJhLncJCWZhZGRfemVyb19lbnRyeQkJIyBnbyBleGVjdXRlIGZhZGQKKworIworIyBib3RoIG9wZXJhbmRzIGFyZSBJTkZzLiBhbiBPUEVSUiB3aWxsIHJlc3VsdCBpZiB0aGUgSU5GcyBoYXZlCisjIGRpZmZlcmVudCBzaWducy4gZWxzZSwgYW4gSU5GIG9mIHRoZSBzYW1lIHNpZ24gaXMgcmV0dXJuZWQKKyMKK2ZhZGRfaW5mXzI6CisJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBleGNsdXNpdmUgb3IgdGhlIHNpZ25zCisJbW92LmIJCURTVF9FWCglYTEpLCVkMQorCWVvci5iCQklZDEsJWQwCisJYm1pLmwJCXJlc19vcGVycgkJIyB3ZWVkIG91dCAoLUlORikrKCtJTkYpCisKKyMgb2ssIHNvIGl0J3Mgbm90IGFuIE9QRVJSLiBidXQsIHdlIGRvIGhhdmUgdG8gcmVtZW1iZXIgdG8gcmV0dXJuIHRoZQorIyBzcmMgSU5GIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgODgxLzg4MiBnZXRzIHRoZSBqLWJpdCBmcm9tLi4uCisKKyMKKyMgb3BlcmFuZHMgYXJlIElORiBhbmQgb25lIG9mIHtaRVJPLCBJTkYsIERFTk9STSwgTk9STX0KKyMKK2ZhZGRfaW5mX3NyYzoKKwlmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gc3JjIElORgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBJTkYgcG9zaXRpdmU/CisJYnBsLmIJCWZhZGRfaW5mX2RvbmUJCSMgeWVzOyB3ZSdyZSBkb25lCisJbW92LmIJCSZuZWdfYm1hc2sraW5mX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCBJTkYvTkVHCisJcnRzCisKKyMKKyMgb3BlcmFuZHMgYXJlIElORiBhbmQgb25lIG9mIHtaRVJPLCBJTkYsIERFTk9STSwgTk9STX0KKyMKK2ZhZGRfaW5mX2RzdDoKKwlmbW92bS54CQlEU1QoJWExKSwmMHg4MAkJIyByZXR1cm4gZHN0IElORgorCXRzdC5iCQlEU1RfRVgoJWExKQkJIyBpcyBJTkYgcG9zaXRpdmU/CisJYnBsLmIJCWZhZGRfaW5mX2RvbmUJCSMgeWVzOyB3ZSdyZSBkb25lCisJbW92LmIJCSZuZWdfYm1hc2sraW5mX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCBJTkYvTkVHCisJcnRzCisKK2ZhZGRfaW5mX2RvbmU6CisJbW92LmIJCSZpbmZfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IElORgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZzdWIoKTogZW11bGF0ZXMgdGhlIGZzdWIgaW5zdHJ1Y3Rpb24JCQkJIworIwlmc3N1YigpOiBlbXVsYXRlcyB0aGUgZnNzdWIgaW5zdHJ1Y3Rpb24JCQkJIworIwlmZHN1YigpOiBlbXVsYXRlcyB0aGUgZmRzdWIgaW5zdHJ1Y3Rpb24JCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYWRkc3ViX3NjYWxlcjIoKSAtIHNjYWxlIHRoZSBvcGVyYW5kcyBzbyB0aGV5IHdvbid0IHRha2UgZXhjCSMKKyMJb3ZmX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0CQkJIworIwl1bmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CQkJIworIwlyZXNfcW5hbigpIC0gc2V0IFFOQU4gcmVzdWx0CQkJCQkjCisjCXJlc19zbmFuKCkgLSBzZXQgU05BTiByZXN1bHQJCQkJCSMKKyMJcmVzX29wZXJyKCkgLSBzZXQgT1BFUlIgcmVzdWx0CQkJCQkjCisjCXNjYWxlX3RvX3plcm9fc3JjKCkgLSBzZXQgc3JjIG9wZXJhbmQgZXhwb25lbnQgZXF1YWwgdG8gemVybwkjCisjCXNjYWxlX3RvX3plcm9fZHN0KCkgLSBzZXQgZHN0IG9wZXJhbmQgZXhwb25lbnQgZXF1YWwgdG8gemVybwkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCisjCWExID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gZGVzdGluYXRpb24gb3BlcmFuZAkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gcmVzdWx0CQkJCQkJCSMKKyMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlIYW5kbGUgTkFOcywgaW5maW5pdGllcywgYW5kIHplcm9lcyBhcyBzcGVjaWFsIGNhc2VzLiBEaXZpZGUJIworIyBub3JtcyBpbnRvIGV4dGVuZGVkLCBzaW5nbGUsIGFuZCBkb3VibGUgcHJlY2lzaW9uLgkJCSMKKyMJRG8gc3VidHJhY3Rpb24gYWZ0ZXIgc2NhbGluZyBleHBvbmVudHMgc3VjaCB0aGF0IGV4Y2VwdGlvbiB3b24ndCMKKyMgb2NjdXIuIFRoZW4sIGNoZWNrIHJlc3VsdCBleHBvbmVudCB0byBzZWUgaWYgZXhjZXB0aW9uIHdvdWxkIGhhdmUJIworIyBvY2N1cnJlZC4gSWYgc28sIHJldHVybiBkZWZhdWx0IHJlc3VsdCBhbmQgbWF5YmUgRVhPUC4gRWxzZSwgaW5zZXJ0CSMKKyMgdGhlIGNvcnJlY3QgcmVzdWx0IGV4cG9uZW50IGFuZCByZXR1cm4uIFNldCBGUFNSIGJpdHMgYXMgYXBwcm9wcmlhdGUuCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZzc3ViCitmc3N1YjoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmc19tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IHNnbCBwcmVjCisJYnJhLmIJCWZzdWIKKworCWdsb2JhbAkJZmRzdWIKK2Zkc3ViOgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZkX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgZGJsIHByZWMKKworCWdsb2JhbAkJZnN1YgorZnN1YjoKKwltb3YubAkJJWQwLExfU0NSMyglYTYpCQkjIHN0b3JlIHJuZCBpbmZvCisKKwljbHIudwkJJWQxCisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwlsc2wuYgkJJjB4MywlZDEKKwlvci5iCQlTVEFHKCVhNiksJWQxCQkjIGNvbWJpbmUgc3JjIHRhZ3MKKworCWJuZS53CQlmc3ViX25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CisKKyMKKyMgU1VCOiBub3JtcyBhbmQgZGVub3JtcworIworZnN1Yl9ub3JtOgorCWJzci5sCQlhZGRzdWJfc2NhbGVyMgkJIyBzY2FsZSBleHBvbmVudHMKKworZnN1Yl96ZXJvX2VudHJ5OgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZnN1Yi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgc3VidHJhY3QKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZm1vdi5sCQklZnBzciwlZDEJCSMgZmV0Y2ggSU5FWDIsIE4sIFoKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgZXhjIGFuZCBjY29kZSBiaXRzCisKKwlmYmVxLncJCWZzdWJfemVyb19leGl0CQkjIGlmIHJlc3VsdCB6ZXJvLCBlbmQgbm93CisKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisKKwlmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSByZXN1bHQgdG8gc3RhY2sKKworCW1vdi53CQkyK0xfU0NSMyglYTYpLCVkMQorCWxzci5iCQkmMHg2LCVkMQorCisJbW92LncJCSglc3ApLCVkMgkJIyBmZXRjaCBuZXcgZXhwb25lbnQKKwlhbmRpLmwJCSYweDdmZmYsJWQyCQkjIHN0cmlwIHNpZ24KKwlzdWIubAkJJWQwLCVkMgkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCisJY21wLmwJCSVkMiwodGJsX2ZzdWJfb3ZmbC5iLCVwYywlZDEudyo0KSAjIGlzIGl0IGFuIG92ZXJmbG93PworCWJnZS5iCQlmc3ViX292ZmwJCSMgeWVzCisKKwljbXAubAkJJWQyLCh0YmxfZnN1Yl91bmZsLmIsJXBjLCVkMS53KjQpICMgaXMgaXQgYW4gdW5kZXJmbG93PworCWJsdC53CQlmc3ViX3VuZmwJCSMgeWVzCisJYmVxLncJCWZzdWJfbWF5X3VuZmwJCSMgbWF5YmU7IGdvIGZpbmQgb3V0CisKK2ZzdWJfbm9ybWFsOgorCW1vdi53CQkoJXNwKSwlZDEKKwlhbmRpLncJCSYweDgwMDAsJWQxCQkjIGtlZXAgc2lnbgorCW9yLncJCSVkMiwlZDEJCQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YudwkJJWQxLCglc3ApCQkjIGluc2VydCBuZXcgZXhwb25lbnQKKworCWZtb3ZtLngJCSglc3ApKywmMHg4MAkJIyByZXR1cm4gcmVzdWx0IGluIGZwMAorCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCXJ0cworCitmc3ViX3plcm9fZXhpdDoKKyMJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgcmV0dXJuIHplcm8gaW4gZnAwCisJcnRzCisKK3RibF9mc3ViX292Zmw6CisJbG9uZwkJMHg3ZmZmCQkJIyBleHQgb3ZmbAorCWxvbmcJCTB4NDA3ZgkJCSMgc2dsIG92ZmwKKwlsb25nCQkweDQzZmYJCQkjIGRibCBvdmZsCisKK3RibF9mc3ViX3VuZmw6CisJbG9uZwkgICAgICAgIDB4MDAwMAkJCSMgZXh0IHVuZmwKKwlsb25nCQkweDNmODEJCQkjIHNnbCB1bmZsCisJbG9uZwkJMHgzYzAxCQkJIyBkYmwgdW5mbAorCitmc3ViX292Zmw6CisJb3IubAkJJm92ZmxfaW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAorCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgxMywlZDEJCSMgaXMgT1ZGTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZzdWJfb3ZmbF9lbmEJCSMgeWVzCisKKwlhZGQubAkJJjB4Yywlc3AKK2ZzdWJfb3ZmbF9kaXM6CisJYnRzdAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgaXMgcmVzdWx0IG5lZ2F0aXZlPworCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzcyBwcmVjOnJuZAorCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IElORixOIGlmIGFwcGxpY2FibGUKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCXJ0cworCitmc3ViX292ZmxfZW5hOgorCW1vdi5iCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CisJYm5lLmIJCWZzdWJfb3ZmbF9lbmFfc2QJIyBubworCitmc3ViX292ZmxfZW5hX2NvbnQ6CisJbW92LncJCSglc3ApLCVkMQkJIyBmZXRjaCB7c2duLGV4cH0KKwlhbmRpLncJCSYweDgwMDAsJWQxCQkjIGtlZXAgc2lnbgorCXN1YmkubAkJJjB4NjAwMCwlZDIJCSMgc3VidHJhY3QgbmV3IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQyCQkjIGNsZWFyIHRvcCBiaXQKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgc2lnbixleHAKKwltb3YudwkJJWQxLCglc3ApCQkjIGluc2VydCBuZXcgZXhwb25lbnQKKworCWZtb3ZtLngJCSglc3ApKywmMHg0MAkJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlicmEuYgkJZnN1Yl9vdmZsX2RpcworCitmc3ViX292ZmxfZW5hX3NkOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHgzMCwlZDEJCSMgY2xlYXIgcm5kIHByZWMKKwlmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgorCisJZnN1Yi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgc3VidHJhY3QKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlhZGQubAkJJjB4Yywlc3AKKwlmbW92bS54CQkmMHgwMSwtKCVzcCkKKwlicmEuYgkJZnN1Yl9vdmZsX2VuYV9jb250CisKK2ZzdWJfdW5mbDoKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKworCWFkZC5sCQkmMHhjLCVzcAorCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJJnJ6X21vZGUqMHgxMCwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZzdWIueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIHN1YnRyYWN0CisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikKKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MGIsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmc3ViX3VuZmxfZW5hCQkjIHllcworCitmc3ViX3VuZmxfZGlzOgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyAnWicgbWF5IGhhdmUgYmVlbiBzZXQKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCXJ0cworCitmc3ViX3VuZmxfZW5hOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAorCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZnN1Yl91bmZsX2VuYV9zZAkjIG5vCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworZnN1Yl91bmZsX2VuYV9jb250OgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc3ViLngJCUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBzdWJ0cmFjdAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCWZtb3ZtLngJCSYweDQwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIHJlc3VsdCB0byBzdGFjaworCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9CisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlhZGRpLmwJCSYweDYwMDAsJWQxCQkjIHN1YnRyYWN0IG5ldyBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQkJIyBjbGVhciB0b3AgYml0CisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IHNnbixleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlicmEudwkJZnN1Yl91bmZsX2RpcworCitmc3ViX3VuZmxfZW5hX3NkOgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDMwLCVkMQkJIyBjbGVhciBybmQgcHJlYworCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisKKwlicmEuYgkJZnN1Yl91bmZsX2VuYV9jb250CisKKyMKKyMgcmVzdWx0IGlzIGVxdWFsIHRvIHRoZSBzbWFsbGVzdCBub3JtYWxpemVkIG51bWJlciBpbiB0aGUgc2VsZWN0ZWQgcHJlY2lzaW9uCisjIGlmIHRoZSBwcmVjaXNpb24gaXMgZXh0ZW5kZWQsIHRoaXMgcmVzdWx0IGNvdWxkIG5vdCBoYXZlIGNvbWUgZnJvbSBhbgorIyB1bmRlcmZsb3cgdGhhdCByb3VuZGVkIHVwLgorIworZnN1Yl9tYXlfdW5mbDoKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHhjMCwlZDEJCSMgZmV0Y2ggcm5kIHByZWMKKwliZXEudwkJZnN1Yl9ub3JtYWwJCSMgeWVzOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKKworCW1vdi5sCQkweDQoJXNwKSwlZDEKKwljbXBpLmwJCSVkMSwmMHg4MDAwMDAwMAkJIyBpcyBoaShtYW4pID0gMHg4MDAwMDAwMD8KKwlibmUudwkJZnN1Yl9ub3JtYWwJCSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCisJdHN0LmwJCTB4OCglc3ApCQkjIGlzIGxvKG1hbikgPSAweDA/CisJYm5lLncJCWZzdWJfbm9ybWFsCQkjIG5vOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKKworCWJ0c3QJCSZpbmV4Ml9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGlzIElORVgyIHNldD8KKwliZXEudwkJZnN1Yl9ub3JtYWwJCSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCisjCisjIG9rLCBzbyBub3cgdGhlIHJlc3VsdCBoYXMgYSBleHBvbmVudCBlcXVhbCB0byB0aGUgc21hbGxlc3Qgbm9ybWFsaXplZAorIyBleHBvbmVudCBmb3IgdGhlIHNlbGVjdGVkIHByZWNpc2lvbi4gYWxzbywgdGhlIG1hbnRpc3NhIGlzIGVxdWFsIHRvCisjIDB4ODAwMDAwMDAwMDAwMDAwMCBhbmQgdGhpcyBtYW50aXNzYSBpcyB0aGUgcmVzdWx0IG9mIHJvdW5kaW5nIG5vbi16ZXJvCisjIGcscixzLgorIyBub3csIHdlIG11c3QgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHByZS1yb3VuZGVkIHJlc3VsdCB3YXMgYW4gdW5kZXJmbG93CisjIHJvdW5kZWQgInVwIiBvciBhIG5vcm1hbGl6ZWQgbnVtYmVyIHJvdW5kZWQgImRvd24iLgorIyBzbywgd2UgZG8gdGhpcyBiZSByZS1leGVjdXRpbmcgdGhlIGFkZCB1c2luZyBSWiBhcyB0aGUgcm91bmRpbmcgbW9kZSBhbmQKKyMgc2VlaW5nIGlmIHRoZSBuZXcgcmVzdWx0IGlzIHNtYWxsZXIgb3IgZXF1YWwgdG8gdGhlIGN1cnJlbnQgcmVzdWx0LgorIworCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wIGludG8gZnAxCisKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHhjMCwlZDEJCSMga2VlcCBybmQgcHJlYworCW9yaS5iCQkmcnpfbW9kZSoweDEwLCVkMQkjIGluc2VydCBybmQgbW9kZQorCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZzdWIueAkJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIHN1YnRyYWN0CisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJZmFicy54CQklZnAwCQkJIyBjb21wYXJlIGFic29sdXRlIHZhbHVlcworCWZhYnMueAkJJWZwMQorCWZjbXAueAkJJWZwMCwlZnAxCQkjIGlzIGZpcnN0IHJlc3VsdCA+IHNlY29uZD8KKworCWZiZ3QudwkJZnN1Yl91bmZsCQkjIHllczsgaXQncyBhbiB1bmRlcmZsb3cKKwlicmEudwkJZnN1Yl9ub3JtYWwJCSMgbm87IGl0J3Mgbm90IGFuIHVuZGVyZmxvdworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIFN1YjogaW5wdXRzIGFyZSBub3QgYm90aCBub3JtYWxpemVkOyB3aGF0IGFyZSB0aGV5PworIworZnN1Yl9ub3Rfbm9ybToKKwltb3YudwkJKHRibF9mc3ViX29wLmIsJXBjLCVkMS53KjIpLCVkMQorCWptcAkJKHRibF9mc3ViX29wLmIsJXBjLCVkMS53KjEpCisKKwlzd2JlZwkJJjQ4Cit0YmxfZnN1Yl9vcDoKKwlzaG9ydAkJZnN1Yl9ub3JtCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gTk9STQorCXNob3J0CQlmc3ViX3plcm9fc3JjCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gWkVSTworCXNob3J0CQlmc3ViX2luZl9zcmMJLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBJTkYKKwlzaG9ydAkJZnN1Yl9yZXNfcW5hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFFOQU4KKwlzaG9ydAkJZnN1Yl9ub3JtCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gREVOT1JNCisJc2hvcnQJCWZzdWJfcmVzX3NuYW4JLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBTTkFOCisJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIworCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKKworCXNob3J0CQlmc3ViX3plcm9fZHN0CS0gdGJsX2ZzdWJfb3AgIyBaRVJPIC0gTk9STQorCXNob3J0CQlmc3ViX3plcm9fMgktIHRibF9mc3ViX29wICMgWkVSTyAtIFpFUk8KKwlzaG9ydAkJZnN1Yl9pbmZfc3JjCS0gdGJsX2ZzdWJfb3AgIyBaRVJPIC0gSU5GCisJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBRTkFOCisJc2hvcnQJCWZzdWJfemVyb19kc3QJLSB0YmxfZnN1Yl9vcCAjIFpFUk8gLSBERU5PUk0KKwlzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZzdWJfb3AJLSB0YmxfZnN1Yl9vcCAjCisJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIworCisJc2hvcnQJCWZzdWJfaW5mX2RzdAktIHRibF9mc3ViX29wICMgSU5GIC0gTk9STQorCXNob3J0CQlmc3ViX2luZl9kc3QJLSB0YmxfZnN1Yl9vcCAjIElORiAtIFpFUk8KKwlzaG9ydAkJZnN1Yl9pbmZfMgktIHRibF9mc3ViX29wICMgSU5GIC0gSU5GCisJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBRTkFOCisJc2hvcnQJCWZzdWJfaW5mX2RzdAktIHRibF9mc3ViX29wICMgSU5GIC0gREVOT1JNCisJc2hvcnQJCWZzdWJfcmVzX3NuYW4JLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBTTkFOCisJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIworCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKKworCXNob3J0CQlmc3ViX3Jlc19xbmFuCS0gdGJsX2ZzdWJfb3AgIyBRTkFOIC0gTk9STQorCXNob3J0CQlmc3ViX3Jlc19xbmFuCS0gdGJsX2ZzdWJfb3AgIyBRTkFOIC0gWkVSTworCXNob3J0CQlmc3ViX3Jlc19xbmFuCS0gdGJsX2ZzdWJfb3AgIyBRTkFOIC0gSU5GCisJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIFFOQU4gLSBRTkFOCisJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIFFOQU4gLSBERU5PUk0KKwlzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgUU5BTiAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZzdWJfb3AJLSB0YmxfZnN1Yl9vcCAjCisJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIworCisJc2hvcnQJCWZzdWJfbm9ybQktIHRibF9mc3ViX29wICMgREVOT1JNIC0gTk9STQorCXNob3J0CQlmc3ViX3plcm9fc3JjCS0gdGJsX2ZzdWJfb3AgIyBERU5PUk0gLSBaRVJPCisJc2hvcnQJCWZzdWJfaW5mX3NyYwktIHRibF9mc3ViX29wICMgREVOT1JNIC0gSU5GCisJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBRTkFOCisJc2hvcnQJCWZzdWJfbm9ybQktIHRibF9mc3ViX29wICMgREVOT1JNIC0gREVOT1JNCisJc2hvcnQJCWZzdWJfcmVzX3NuYW4JLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBTTkFOCisJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIworCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKKworCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBTTkFOIC0gTk9STQorCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBTTkFOIC0gWkVSTworCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBTTkFOIC0gSU5GCisJc2hvcnQJCWZzdWJfcmVzX3NuYW4JLSB0YmxfZnN1Yl9vcCAjIFNOQU4gLSBRTkFOCisJc2hvcnQJCWZzdWJfcmVzX3NuYW4JLSB0YmxfZnN1Yl9vcCAjIFNOQU4gLSBERU5PUk0KKwlzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgU05BTiAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZzdWJfb3AJLSB0YmxfZnN1Yl9vcCAjCisJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIworCitmc3ViX3Jlc19xbmFuOgorCWJyYS5sCQlyZXNfcW5hbgorZnN1Yl9yZXNfc25hbjoKKwlicmEubAkJcmVzX3NuYW4KKworIworIyBib3RoIG9wZXJhbmRzIGFyZSBaRVJPZXMKKyMKK2ZzdWJfemVyb18yOgorCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDAKKwltb3YuYgkJRFNUX0VYKCVhMSksJWQxCisJZW9yLmIJCSVkMSwlZDAKKwlicGwuYgkJZnN1Yl96ZXJvXzJfY2hrX3JtCisKKyMgdGhlIHNpZ25zIGFyZSBvcHBvc2l0ZSwgc28sIHJldHVybiBhIFpFUk8gdy8gdGhlIHNpZ24gb2YgdGhlIGRzdCBaRVJPCisJdHN0LmIJCSVkMAkJCSMgaXMgZHN0IG5lZ2F0aXZlPworCWJtaS5iCQlmc3ViX3plcm9fMl9ybQkJIyB5ZXMKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyBubzsgcmV0dXJuICtaRVJPCisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaCisJcnRzCisKKyMKKyMgdGhlIFpFUk9lcyBoYXZlIHRoZSBzYW1lIHNpZ25zOgorIyAtIHRoZXJlZm9yZSwgd2UgcmV0dXJuICtaRVJPIGlmIHRoZSByb3VuZGluZyBtb2RlIGlzIFJOLFJaLCBvciBSUAorIyAtIC1aRVJPIGlzIHJldHVybmVkIGluIHRoZSBjYXNlIG9mIFJNLgorIworZnN1Yl96ZXJvXzJfY2hrX3JtOgorCW1vdi5iCQkzK0xfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4MzAsJWQxCQkjIGV4dHJhY3Qgcm5kIG1vZGUKKwljbXBpLmIJCSVkMSwmcm1fbW9kZSoweDEwCSMgaXMgcm5kIG1vZGUgPSBSTT8KKwliZXEuYgkJZnN1Yl96ZXJvXzJfcm0JCSMgeWVzCisJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgbm87IHJldHVybiArWkVSTworCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgWgorCXJ0cworCitmc3ViX3plcm9fMl9ybToKKwlmbW92LnMJCSYweDgwMDAwMDAwLCVmcDAJIyByZXR1cm4gLVpFUk8KKwltb3YuYgkJJnpfYm1hc2srbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaL05FRworCXJ0cworCisjCisjIG9uZSBvcGVyYW5kIGlzIGEgWkVSTyBhbmQgdGhlIG90aGVyIGlzIGEgREVOT1JNIG9yIGEgTk9STS4KKyMgc2NhbGUgdGhlIERFTk9STSBvciBOT1JNIGFuZCBqdW1wIHRvIHRoZSByZWd1bGFyIGZzdWIgcm91dGluZS4KKyMKK2ZzdWJfemVyb19kc3Q6CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgc2NhbGUgdGhlIG9wZXJhbmQKKwljbHIudwkJRlBfU0NSMV9FWCglYTYpCisJY2xyLmwJCUZQX1NDUjFfSEkoJWE2KQorCWNsci5sCQlGUF9TQ1IxX0xPKCVhNikKKwlicmEudwkJZnN1Yl96ZXJvX2VudHJ5CQkjIGdvIGV4ZWN1dGUgZnN1YgorCitmc3ViX3plcm9fc3JjOgorCW1vdi53CQlEU1RfRVgoJWExKSxGUF9TQ1IxX0VYKCVhNikKKwltb3YubAkJRFNUX0hJKCVhMSksRlBfU0NSMV9ISSglYTYpCisJbW92LmwJCURTVF9MTyglYTEpLEZQX1NDUjFfTE8oJWE2KQorCWJzci5sCQlzY2FsZV90b196ZXJvX2RzdAkjIHNjYWxlIHRoZSBvcGVyYW5kCisJY2xyLncJCUZQX1NDUjBfRVgoJWE2KQorCWNsci5sCQlGUF9TQ1IwX0hJKCVhNikKKwljbHIubAkJRlBfU0NSMF9MTyglYTYpCisJYnJhLncJCWZzdWJfemVyb19lbnRyeQkJIyBnbyBleGVjdXRlIGZzdWIKKworIworIyBib3RoIG9wZXJhbmRzIGFyZSBJTkZzLiBhbiBPUEVSUiB3aWxsIHJlc3VsdCBpZiB0aGUgSU5GcyBoYXZlIHRoZQorIyBzYW1lIHNpZ25zLiBlbHNlLAorIworZnN1Yl9pbmZfMjoKKwltb3YuYgkJU1JDX0VYKCVhMCksJWQwCQkjIGV4Y2x1c2l2ZSBvciB0aGUgc2lnbnMKKwltb3YuYgkJRFNUX0VYKCVhMSksJWQxCisJZW9yLmIJCSVkMSwlZDAKKwlicGwubAkJcmVzX29wZXJyCQkjIHdlZWQgb3V0ICgtSU5GKSsoK0lORikKKworIyBvaywgc28gaXQncyBub3QgYW4gT1BFUlIuIGJ1dCB3ZSBkbyBoYXZlIHRvIHJlbWVtYmVyIHRvIHJldHVybgorIyB0aGUgc3JjIElORiBzaW5jZSB0aGF0J3Mgd2hlcmUgdGhlIDg4MS84ODIgZ2V0cyB0aGUgai1iaXQuCisKK2ZzdWJfaW5mX3NyYzoKKwlmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gc3JjIElORgorCWZuZWcueAkJJWZwMAkJCSMgaW52ZXJ0IHNpZ24KKwlmYmdlLncJCWZzdWJfaW5mX2RvbmUJCSMgc2lnbiBpcyBub3cgcG9zaXRpdmUKKwltb3YuYgkJJm5lZ19ibWFzaytpbmZfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IElORi9ORUcKKwlydHMKKworZnN1Yl9pbmZfZHN0OgorCWZtb3ZtLngJCURTVCglYTEpLCYweDgwCQkjIHJldHVybiBkc3QgSU5GCisJdHN0LmIJCURTVF9FWCglYTEpCQkjIGlzIElORiBuZWdhdGl2ZT8KKwlicGwuYgkJZnN1Yl9pbmZfZG9uZQkJIyBubworCW1vdi5iCQkmbmVnX2JtYXNrK2luZl9ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgSU5GL05FRworCXJ0cworCitmc3ViX2luZl9kb25lOgorCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmc3FydCgpOiBlbXVsYXRlcyB0aGUgZnNxcnQgaW5zdHJ1Y3Rpb24JCQkJIworIwlmc3NxcnQoKTogZW11bGF0ZXMgdGhlIGZzc3FydCBpbnN0cnVjdGlvbgkJCSMKKyMJZmRzcXJ0KCk6IGVtdWxhdGVzIHRoZSBmZHNxcnQgaW5zdHJ1Y3Rpb24JCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlzY2FsZV9zcXJ0KCkgLSBzY2FsZSB0aGUgc291cmNlIG9wZXJhbmQJCQkJIworIwl1bmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CQkJIworIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCisjCXJlc19xbmFuXzFvcCgpIC0gcmV0dXJuIFFOQU4gcmVzdWx0CQkJCSMKKyMJcmVzX3NuYW5fMW9wKCkgLSByZXR1cm4gU05BTiByZXN1bHQJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlkMCAgcm5kIHByZWMsbW9kZQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IHJlc3VsdAkJCQkJCQkjCisjCWZwMSA9IEVYT1AgKGlmIGV4Y2VwdGlvbiBvY2N1cnJlZCkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSGFuZGxlIE5BTnMsIGluZmluaXRpZXMsIGFuZCB6ZXJvZXMgYXMgc3BlY2lhbCBjYXNlcy4gRGl2aWRlCSMKKyMgbm9ybXMvZGVub3JtcyBpbnRvIGV4dC9zZ2wvZGJsIHByZWNpc2lvbi4JCQkJIworIwlGb3Igbm9ybXMvZGVub3Jtcywgc2NhbGUgdGhlIGV4cG9uZW50cyBzdWNoIHRoYXQgYSBzcXJ0CQkjCisjIGluc3RydWN0aW9uIHdvbid0IGNhdXNlIGFuIGV4Y2VwdGlvbi4gVXNlIHRoZSByZWd1bGFyIGZzcXJ0IHRvCSMKKyMgY29tcHV0ZSBhIHJlc3VsdC4gQ2hlY2sgaWYgdGhlIHJlZ3VsYXIgb3BlcmFuZHMgd291bGQgaGF2ZSB0YWtlbgkjCisjIGFuIGV4Y2VwdGlvbi4gSWYgc28sIHJldHVybiB0aGUgZGVmYXVsdCBvdmVyZmxvdy91bmRlcmZsb3cgcmVzdWx0CSMKKyMgYW5kIHJldHVybiB0aGUgRVhPUCBpZiBleGNlcHRpb25zIGFyZSBlbmFibGVkLiBFbHNlLCBzY2FsZSB0aGUJIworIyByZXN1bHQgb3BlcmFuZCB0byB0aGUgcHJvcGVyIGV4cG9uZW50LgkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlmc3NxcnQKK2Zzc3FydDoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmc19tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IHNnbCBwcmVjaXNpb24KKwlicmEuYgkJZnNxcnQKKworCWdsb2JhbAkJZmRzcXJ0CitmZHNxcnQ6CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKKwlvcmkuYgkJJmRfbW9kZSoweDEwLCVkMAkjIGluc2VydCBkYmwgcHJlY2lzaW9uCisKKwlnbG9iYWwJCWZzcXJ0Citmc3FydDoKKwltb3YubAkJJWQwLExfU0NSMyglYTYpCQkjIHN0b3JlIHJuZCBpbmZvCisJY2xyLncJCSVkMQorCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYm5lLncJCWZzcXJ0X25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CisKKyMKKyMgU1FVQVJFIFJPT1Q6IG5vcm1zIGFuZCBkZW5vcm1zIE9OTFkhCisjCitmc3FydF9ub3JtOgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBvcGVyYW5kIG5lZ2F0aXZlPworCWJtaS5sCQlyZXNfb3BlcnIJCSMgeWVzCisKKwlhbmRpLmIJCSYweGMwLCVkMAkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CisJYm5lLmIJCWZzcXJ0X25vdF9leHQJCSMgbm87IGdvIGhhbmRsZSBzZ2wgb3IgZGJsCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNxcnQueAkJKCVhMCksJWZwMAkJIyBleGVjdXRlIHNxdWFyZSByb290CisKKwlmbW92LmwJCSVmcHNyLCVkMQorCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNldCBOLElORVgKKworCXJ0cworCitmc3FydF9kZW5vcm06CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CisJYm1pLmwJCXJlc19vcGVycgkJIyB5ZXMKKworCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZnNxcnRfbm90X2V4dAkJIyBubzsgZ28gaGFuZGxlIHNnbCBvciBkYmwKKworCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCisJYnNyLmwJCXNjYWxlX3NxcnQJCSMgY2FsY3VsYXRlIHNjYWxlIGZhY3RvcgorCisJYnJhLncJCWZzcXJ0X3NkX25vcm1hbAorCisjCisjIG9wZXJhbmQgaXMgZWl0aGVyIHNpbmdsZSBvciBkb3VibGUKKyMKK2ZzcXJ0X25vdF9leHQ6CisJY21waS5iCQklZDAsJnNfbW9kZSoweDEwCSMgc2VwYXJhdGUgc2dsL2RibCBwcmVjCisJYm5lLncJCWZzcXJ0X2RibAorCisjCisjIG9wZXJhbmQgaXMgdG8gYmUgcm91bmRlZCB0byBzaW5nbGUgcHJlY2lzaW9uCisjCitmc3FydF9zZ2w6CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisKKwlic3IubAkJc2NhbGVfc3FydAkJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCisKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4M2Y4MQkjIHdpbGwgbW92ZSBpbiB1bmRlcmZsb3c/CisJYmVxLncJCWZzcXJ0X3NkX21heV91bmZsCisJYmd0LncJCWZzcXJ0X3NkX3VuZmwJCSMgeWVzOyBnbyBoYW5kbGUgdW5kZXJmbG93CisJY21waS5sCQklZDAsJjB4M2ZmZi0weDQwN2YJIyB3aWxsIG1vdmUgaW4gb3ZlcmZsb3c/CisJYmVxLncJCWZzcXJ0X3NkX21heV9vdmZsCSMgbWF5YmU7IGdvIGNoZWNrCisJYmx0LncJCWZzcXJ0X3NkX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKKworIworIyBvcGVyYW5kIHdpbGwgTk9UIG92ZXJmbG93IG9yIHVuZGVyZmxvdyB3aGVuIG1vdmVkIGluIHRvIHRoZSBmcCByZWcgZmlsZQorIworZnNxcnRfc2Rfbm9ybWFsOgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmc3FydC54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gYWJzb2x1dGUKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgorCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworZnNxcnRfc2Rfbm9ybWFsX2V4aXQ6CisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQgc2duLGV4cAorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJb3IudwkJJWQxLCVkMgkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQyLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBvcGVyYW5kIGlzIHRvIGJlIHJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbgorIworZnNxcnRfZGJsOgorCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCisJYnNyLmwJCXNjYWxlX3NxcnQJCSMgY2FsY3VsYXRlIHNjYWxlIGZhY3RvcgorCisJY21waS5sCQklZDAsJjB4M2ZmZi0weDNjMDEJIyB3aWxsIG1vdmUgaW4gdW5kZXJmbG93PworCWJlcS53CQlmc3FydF9zZF9tYXlfdW5mbAorCWJndC5iCQlmc3FydF9zZF91bmZsCQkjIHllczsgZ28gaGFuZGxlIHVuZGVyZmxvdworCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0M2ZmCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PworCWJlcS53CQlmc3FydF9zZF9tYXlfb3ZmbAkjIG1heWJlOyBnbyBjaGVjaworCWJsdC53CQlmc3FydF9zZF9vdmZsCQkjIHllczsgZ28gaGFuZGxlIG92ZXJmbG93CisJYnJhLncJCWZzcXJ0X3NkX25vcm1hbAkJIyBubzsgaG8gaGFuZGxlIG5vcm1hbGl6ZWQgb3AKKworIyB3ZSdyZSBvbiB0aGUgbGluZSBoZXJlIGFuZCB0aGUgZGlzdGluZ3Vpc2luZyBjaGFyYWN0ZXJpc3RpYyBpcyB3aGV0aGVyCisjIHRoZSBleHBvbmVudCBpcyAzZmZmIG9yIDNmZmUuIGlmIGl0J3MgM2ZmZSwgdGhlbiBpdCdzIGEgc2FmZSBudW1iZXIKKyMgZWxzZXdpc2UgZmFsbCB0aHJvdWdoIHRvIHVuZGVyZmxvdy4KK2ZzcXJ0X3NkX21heV91bmZsOgorCWJ0c3QJCSYweDAsMStGUF9TQ1IwX0VYKCVhNikJIyBpcyBleHBvbmVudCAweDNmZmY/CisJYm5lLncJCWZzcXJ0X3NkX25vcm1hbAkJIyB5ZXMsIHNvIG5vIHVuZGVyZmxvdworCisjCisjIG9wZXJhbmQgV0lMTCB1bmRlcmZsb3cgd2hlbiBtb3ZlZCBpbiB0byB0aGUgZnAgcmVnaXN0ZXIgZmlsZQorIworZnNxcnRfc2RfdW5mbDoKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKworCWZtb3YubAkJJnJ6X21vZGUqMHgxMCwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZzcXJ0LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzcXVhcmUgcm9vdAorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKyMgaWYgdW5kZXJmbG93IG9yIGluZXhhY3QgaXMgZW5hYmxlZCwgZ28gY2FsY3VsYXRlIEVYT1AgZmlyc3QuCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgwYiwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZzcXJ0X3NkX3VuZmxfZW5hCSMgeWVzCisKK2ZzcXJ0X3NkX3VuZmxfZGlzOgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgcG9zc2libGUgJ1onIGNjb2RlCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIG9wZXJhbmQgd2lsbCB1bmRlcmZsb3cgQU5EIHVuZGVyZmxvdyBpcyBlbmFibGVkLgorIyB0aGVyZWZvcmUsIHdlIG11c3QgcmV0dXJuIHRoZSByZXN1bHQgcm91bmRlZCB0byBleHRlbmRlZCBwcmVjaXNpb24uCisjCitmc3FydF9zZF91bmZsX2VuYToKKwltb3YubAkJRlBfU0NSMF9ISSglYTYpLEZQX1NDUjFfSEkoJWE2KQorCW1vdi5sCQlGUF9TQ1IwX0xPKCVhNiksRlBfU0NSMV9MTyglYTYpCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBsb2FkIGN1cnJlbnQgZXhwb25lbnQKKworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgc3VidHJhY3Qgc2NhbGUgZmFjdG9yCisJYWRkaS5sCQkmMHg2MDAwLCVkMQkJIyBhZGQgbmV3IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG5ldyBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjFfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWJyYS5iCQlmc3FydF9zZF91bmZsX2RpcworCisjCisjIG9wZXJhbmQgV0lMTCBvdmVyZmxvdy4KKyMKK2ZzcXJ0X3NkX292Zmw6CisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworCWZzcXJ0LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBzcXVhcmUgcm9vdAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIEZQU1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmc3FydF9zZF9vdmZsX3RzdDoKKwlvci5sCQkmb3ZmbF9pbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4CisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDEzLCVkMQkJIyBpcyBPVkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZnNxcnRfc2Rfb3ZmbF9lbmEJIyB5ZXMKKworIworIyBPVkZMIGlzIG5vdCBlbmFibGVkOyB0aGVyZWZvcmUsIHdlIG11c3QgY3JlYXRlIHRoZSBkZWZhdWx0IHJlc3VsdCBieQorIyBjYWxsaW5nIG92Zl9yZXMoKS4KKyMKK2ZzcXJ0X3NkX292ZmxfZGlzOgorCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZT8KKwlzbmUJCSVkMQkJCSMgc2V0IHNpZ24gcGFyYW0gYWNjb3JkaW5nbHkKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3M6IHByZWMsbW9kZQorCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IElORixOIGlmIGFwcGxpY2FibGUKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgT1ZGTCBpcyBlbmFibGVkLgorIyB0aGUgSU5FWDIgYml0IGhhcyBhbHJlYWR5IGJlZW4gdXBkYXRlZCBieSB0aGUgcm91bmQgdG8gdGhlIGNvcnJlY3QgcHJlY2lzaW9uLgorIyBub3csIHJvdW5kIHRvIGV4dGVuZGVkKGFuZCBkb24ndCBhbHRlciB0aGUgRlBTUikuCisjCitmc3FydF9zZF9vdmZsX2VuYToKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCXN1YmkubAkJJjB4NjAwMCwlZDEJCSMgc3VidHJhY3QgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgc2lnbixleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJYnJhLmIJCWZzcXJ0X3NkX292ZmxfZGlzCisKKyMKKyMgdGhlIG1vdmUgaW4gTUFZIHVuZGVyZmxvdy4gc28uLi4KKyMKK2ZzcXJ0X3NkX21heV9vdmZsOgorCWJ0c3QJCSYweDAsMStGUF9TQ1IwX0VYKCVhNikJIyBpcyBleHBvbmVudCAweDNmZmY/CisJYm5lLncJCWZzcXJ0X3NkX292ZmwJCSMgeWVzLCBzbyBvdmVyZmxvdworCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworCWZzcXJ0LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBhYnNvbHV0ZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwlmbW92LngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKKwlmY21wLmIJCSVmcDEsJjB4MQkJIyBpcyB8cmVzdWx0fCA+PSAxLmI/CisJZmJnZS53CQlmc3FydF9zZF9vdmZsX3RzdAkjIHllczsgb3ZlcmZsb3cgaGFzIG9jY3VycmVkCisKKyMgbm8sIGl0IGRpZG4ndCBvdmVyZmxvdzsgd2UgaGF2ZSBjb3JyZWN0IHJlc3VsdAorCWJyYS53CQlmc3FydF9zZF9ub3JtYWxfZXhpdAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIGlucHV0IGlzIG5vdCBub3JtYWxpemVkOyB3aGF0IGlzIGl0PworIworZnNxcnRfbm90X25vcm06CisJY21waS5iCQklZDEsJkRFTk9STQkJIyB3ZWVkIG91dCBERU5PUk0KKwliZXEudwkJZnNxcnRfZGVub3JtCisJY21waS5iCQklZDEsJlpFUk8JCSMgd2VlZCBvdXQgWkVSTworCWJlcS5iCQlmc3FydF96ZXJvCisJY21waS5iCQklZDEsJklORgkJIyB3ZWVkIG91dCBJTkYKKwliZXEuYgkJZnNxcnRfaW5mCisJY21waS5iCQklZDEsJlNOQU4JCSMgd2VlZCBvdXQgU05BTgorCWJlcS5sCQlyZXNfc25hbl8xb3AKKwlicmEubAkJcmVzX3FuYW5fMW9wCisKKyMKKyMJZnNxcnQoKzApID0gKzAKKyMJZnNxcnQoLTApID0gLTAKKyMJZnNxcnQoK0lORikgPSArSU5GCisjCWZzcXJ0KC1JTkYpID0gT1BFUlIKKyMKK2ZzcXJ0X3plcm86CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIFpFUk8gcG9zaXRpdmUgb3IgbmVnYXRpdmU/CisJYm1pLmIJCWZzcXJ0X3plcm9fbQkJIyBuZWdhdGl2ZQorZnNxcnRfemVyb19wOgorCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIHJldHVybiArWkVSTworCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ1onIGNjb2RlIGJpdAorCXJ0cworZnNxcnRfemVyb19tOgorCWZtb3YucwkJJjB4ODAwMDAwMDAsJWZwMAkjIHJldHVybiAtWkVSTworCW1vdi5iCQkmel9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdaJywnTicgY2NvZGUgYml0cworCXJ0cworCitmc3FydF9pbmY6CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIElORiBwb3NpdGl2ZSBvciBuZWdhdGl2ZT8KKwlibWkubAkJcmVzX29wZXJyCQkjIG5lZ2F0aXZlCitmc3FydF9pbmZfcDoKKwlmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gK0lORiBpbiBmcDAKKwltb3YuYgkJJmluZl9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ0knIGNjb2RlIGJpdAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWFkZHN1Yl9zY2FsZXIyKCk6IHNjYWxlIGlucHV0cyB0byBmYWRkL2ZzdWIgc3VjaCB0aGF0IG5vCSMKKyMJCQkgIE9WRkwvVU5GTCBleGNlcHRpb25zIHdpbGwgcmVzdWx0CQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlub3JtKCkgLSBub3JtYWxpemUgbWFudGlzc2EgYWZ0ZXIgYWRqdXN0aW5nIGV4cG9uZW50CQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGUF9TUkMoYTYpID0gZnAgb3AxKHNyYykJCQkJCSMKKyMJRlBfRFNUKGE2KSA9IGZwIG9wMihkc3QpCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGUF9TUkMoYTYpID0gZnAgb3AxIHNjYWxlZChzcmMpCQkJCQkjCisjCUZQX0RTVChhNikgPSBmcCBvcDIgc2NhbGVkKGRzdCkJCQkJCSMKKyMJZDAgICAgICAgICA9IHNjYWxlIGFtb3VudAkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSWYgdGhlIERTVCBleHBvbmVudCBpcyA+IHRoZSBTUkMgZXhwb25lbnQsIHNldCB0aGUgRFNUIGV4cG9uZW50CSMKKyMgZXF1YWwgdG8gMHgzZmZmIGFuZCBzY2FsZSB0aGUgU1JDIGV4cG9uZW50IGJ5IHRoZSB2YWx1ZSB0aGF0IHRoZQkjCisjIERTVCBleHBvbmVudCB3YXMgc2NhbGVkIGJ5LiBJZiB0aGUgU1JDIGV4cG9uZW50IGlzIGdyZWF0ZXIgb3IgZXF1YWwsCSMKKyMgZG8gdGhlIG9wcG9zaXRlLiBSZXR1cm4gdGhpcyBzY2FsZSBmYWN0b3IgaW4gZDAuCQkJIworIwlJZiB0aGUgdHdvIGV4cG9uZW50cyBkaWZmZXIgYnkgPiB0aGUgbnVtYmVyIG9mIG1hbnRpc3NhIGJpdHMJIworIyBwbHVzIHR3bywgdGhlbiBzZXQgdGhlIHNtYWxsZXN0IGV4cG9uZW50IHRvIGEgdmVyeSBzbWFsbCB2YWx1ZSBhcyBhCSMKKyMgcXVpY2sgc2hvcnRjdXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWFkZHN1Yl9zY2FsZXIyCithZGRzdWJfc2NhbGVyMjoKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCURTVF9ISSglYTEpLEZQX1NDUjFfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMV9MTyglYTYpCisJbW92LncJCVNSQ19FWCglYTApLCVkMAorCW1vdi53CQlEU1RfRVgoJWExKSwlZDEKKwltb3YudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQorCW1vdi53CQklZDEsRlBfU0NSMV9FWCglYTYpCisKKwlhbmRpLncJCSYweDdmZmYsJWQwCisJYW5kaS53CQkmMHg3ZmZmLCVkMQorCW1vdi53CQklZDAsTF9TQ1IxKCVhNikJCSMgc3RvcmUgc3JjIGV4cG9uZW50CisJbW92LncJCSVkMSwyK0xfU0NSMSglYTYpCSMgc3RvcmUgZHN0IGV4cG9uZW50CisKKwljbXAudwkJJWQwLCAlZDEJCSMgaXMgc3JjIGV4cCA+PSBkc3QgZXhwPworCWJnZS5sCQlzcmNfZXhwX2dlMgorCisjIGRzdCBleHAgaXMgPiAgc3JjIGV4cDsgc2NhbGUgZHN0IHRvIGV4cCA9IDB4M2ZmZgorZHN0X2V4cF9ndDI6CisJYnNyLmwJCXNjYWxlX3RvX3plcm9fZHN0CisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzY2FsZSBmYWN0b3IKKworCWNtcGkuYgkJU1RBRyglYTYpLCZERU5PUk0JIyBpcyBkc3QgZGVub3JtYWxpemVkPworCWJuZS5iCQljbXBleHAxMgorCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSB0aGUgZGVub3JtOyByZXN1bHQgaXMgbmV3IGV4cAorCW5lZy53CQklZDAJCQkjIG5ldyBleHAgPSAtKHNoZnQgdmFsKQorCW1vdi53CQklZDAsTF9TQ1IxKCVhNikJCSMgaW5zZXQgbmV3IGV4cAorCitjbXBleHAxMjoKKwltb3YudwkJMitMX1NDUjEoJWE2KSwlZDAKKwlzdWJpLncJCSZtYW50aXNzYWxlbisyLCVkMAkjIHN1YnRyYWN0IG1hbnRpc3NhbGVuKzIgZnJvbSBsYXJnZXIgZXhwCisKKwljbXAudwkJJWQwLExfU0NSMSglYTYpCQkjIGlzIGRpZmZlcmVuY2UgPj0gbGVuKG1hbnRpc3NhKSsyPworCWJnZS5iCQlxdWlja19zY2FsZTEyCisKKwltb3YudwkJTF9TQ1IxKCVhNiksJWQwCisJYWRkLncJCTB4Miglc3ApLCVkMAkJIyBzY2FsZSBzcmMgZXhwb25lbnQgYnkgc2NhbGUgZmFjdG9yCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEKKwlhbmQudwkJJjB4ODAwMCwlZDEKKwlvci53CQklZDEsJWQwCQkJIyBjb25jYXQge3NnbixuZXcgZXhwfQorCW1vdi53CQklZDAsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBkc3QgZXhwb25lbnQKKworCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJldHVybiBTQ0FMRSBmYWN0b3IKKwlydHMKKworcXVpY2tfc2NhbGUxMjoKKwlhbmRpLncJCSYweDgwMDAsRlBfU0NSMF9FWCglYTYpCSMgemVybyBzcmMgZXhwb25lbnQKKwlic2V0CQkmMHgwLDErRlBfU0NSMF9FWCglYTYpCSMgc2V0IGV4cCA9IDEKKworCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJldHVybiBTQ0FMRSBmYWN0b3IKKwlydHMKKworIyBzcmMgZXhwIGlzID49IGRzdCBleHA7IHNjYWxlIHNyYyB0byBleHAgPSAweDNmZmYKK3NyY19leHBfZ2UyOgorCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYworCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgc2NhbGUgZmFjdG9yCisKKwljbXBpLmIJCURUQUcoJWE2KSwmREVOT1JNCSMgaXMgZHN0IGRlbm9ybWFsaXplZD8KKwlibmUuYgkJY21wZXhwMjIKKwlsZWEJCUZQX1NDUjEoJWE2KSwlYTAKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIHRoZSBkZW5vcm07IHJlc3VsdCBpcyBuZXcgZXhwCisJbmVnLncJCSVkMAkJCSMgbmV3IGV4cCA9IC0oc2hmdCB2YWwpCisJbW92LncJCSVkMCwyK0xfU0NSMSglYTYpCSMgaW5zZXQgbmV3IGV4cAorCitjbXBleHAyMjoKKwltb3YudwkJTF9TQ1IxKCVhNiksJWQwCisJc3ViaS53CQkmbWFudGlzc2FsZW4rMiwlZDAJIyBzdWJ0cmFjdCBtYW50aXNzYWxlbisyIGZyb20gbGFyZ2VyIGV4cAorCisJY21wLncJCSVkMCwyK0xfU0NSMSglYTYpCSMgaXMgZGlmZmVyZW5jZSA+PSBsZW4obWFudGlzc2EpKzI/CisJYmdlLmIJCXF1aWNrX3NjYWxlMjIKKworCW1vdi53CQkyK0xfU0NSMSglYTYpLCVkMAorCWFkZC53CQkweDIoJXNwKSwlZDAJCSMgc2NhbGUgZHN0IGV4cG9uZW50IGJ5IHNjYWxlIGZhY3RvcgorCW1vdi53CQlGUF9TQ1IxX0VYKCVhNiksJWQxCisJYW5kaS53CQkmMHg4MDAwLCVkMQorCW9yLncJCSVkMSwlZDAJCQkjIGNvbmNhdCB7c2duLG5ldyBleHB9CisJbW92LncJCSVkMCxGUF9TQ1IxX0VYKCVhNikJIyBpbnNlcnQgbmV3IGRzdCBleHBvbmVudAorCisJbW92LmwJCSglc3ApKywlZDAJCSMgcmV0dXJuIFNDQUxFIGZhY3RvcgorCXJ0cworCitxdWlja19zY2FsZTIyOgorCWFuZGkudwkJJjB4ODAwMCxGUF9TQ1IxX0VYKCVhNikJIyB6ZXJvIGRzdCBleHBvbmVudAorCWJzZXQJCSYweDAsMStGUF9TQ1IxX0VYKCVhNikJIyBzZXQgZXhwID0gMQorCisJbW92LmwJCSglc3ApKywlZDAJCSMgcmV0dXJuIFNDQUxFIGZhY3RvcgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXNjYWxlX3RvX3plcm9fc3JjKCk6IHNjYWxlIHRoZSBleHBvbmVudCBvZiBleHRlbmRlZCBwcmVjaXNpb24JIworIwkJCSAgICAgdmFsdWUgYXQgRlBfU0NSMChhNikuCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJbm9ybSgpIC0gbm9ybWFsaXplIHRoZSBtYW50aXNzYSBpZiB0aGUgb3BlcmFuZCB3YXMgYSBERU5PUk0JIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRlBfU0NSMChhNikgPSBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZCB0byBiZSBzY2FsZWQJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUZQX1NDUjAoYTYpID0gc2NhbGVkIGV4dGVuZGVkIHByZWNpc2lvbiBvcGVyYW5kCQkJIworIwlkMAkgICAgPSBzY2FsZSB2YWx1ZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJU2V0IHRoZSBleHBvbmVudCBvZiB0aGUgaW5wdXQgb3BlcmFuZCB0byAweDNmZmYuIFNhdmUgdGhlIHZhbHVlCSMKKyMgb2YgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgb3JpZ2luYWwgYW5kIG5ldyBleHBvbmVudC4gVGhlbiwJIworIyBub3JtYWxpemUgdGhlIG9wZXJhbmQgaWYgaXQgd2FzIGEgREVOT1JNLiBBZGQgdGhpcyBub3JtYWxpemF0aW9uCSMKKyMgdmFsdWUgdG8gdGhlIHByZXZpb3VzIHZhbHVlLiBSZXR1cm4gdGhlIHJlc3VsdC4JCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzY2FsZV90b196ZXJvX3NyYworc2NhbGVfdG9femVyb19zcmM6CisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBleHRyYWN0IG9wZXJhbmQncyB7c2duLGV4cH0KKwltb3YudwkJJWQxLCVkMAkJCSMgbWFrZSBhIGNvcHkKKworCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgZXh0cmFjdCBvcGVyYW5kJ3MgZXhwb25lbnQKKworCWFuZGkudwkJJjB4ODAwMCwlZDAJCSMgZXh0cmFjdCBvcGVyYW5kJ3Mgc2duCisJb3IudwkJJjB4M2ZmZiwlZDAJCSMgaW5zZXJ0IG5ldyBvcGVyYW5kJ3MgZXhwb25lbnQoPTApCisKKwltb3YudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBiaWFzZWQgZXhwb25lbnQKKworCWNtcGkuYgkJU1RBRyglYTYpLCZERU5PUk0JIyBpcyBvcGVyYW5kIG5vcm1hbGl6ZWQ/CisJYmVxLmIJCXN0enNfZGVub3JtCQkjIG5vcm1hbGl6ZSB0aGUgREVOT1JNCisKK3N0enNfbm9ybToKKwltb3YubAkJJjB4M2ZmZiwlZDAKKwlzdWIubAkJJWQxLCVkMAkJCSMgc2NhbGUgPSBCSUFTICsgKC1leHApCisKKwlydHMKKworc3R6c19kZW5vcm06CisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzcyBwdHIgdG8gc3JjIG9wCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSBkZW5vcm0KKwluZWcubAkJJWQwCQkJIyBuZXcgZXhwb25lbnQgPSAtKHNoZnQgdmFsKQorCW1vdi5sCQklZDAsJWQxCQkJIyBwcmVwYXJlIGZvciBvcF9ub3JtIGNhbGwKKwlicmEuYgkJc3R6c19ub3JtCQkjIGZpbmlzaCBzY2FsaW5nCisKKyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXNjYWxlX3NxcnQoKTogc2NhbGUgdGhlIGlucHV0IG9wZXJhbmQgZXhwb25lbnQgc28gYSBzdWJzZXF1ZW50CSMKKyMJCSAgICAgIGZzcXJ0IG9wZXJhdGlvbiB3b24ndCB0YWtlIGFuIGV4Y2VwdGlvbi4JCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCW5vcm0oKSAtIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EgaWYgdGhlIG9wZXJhbmQgd2FzIGEgREVOT1JNCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUZQX1NDUjAoYTYpID0gZXh0ZW5kZWQgcHJlY2lzaW9uIG9wZXJhbmQgdG8gYmUgc2NhbGVkCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGUF9TQ1IwKGE2KSA9IHNjYWxlZCBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZAkJCSMKKyMJZDAJICAgID0gc2NhbGUgdmFsdWUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUlmIHRoZSBpbnB1dCBvcGVyYW5kIGlzIGEgREVOT1JNLCBub3JtYWxpemUgaXQuCQkJIworIwlJZiB0aGUgZXhwb25lbnQgb2YgdGhlIGlucHV0IG9wZXJhbmQgaXMgZXZlbiwgc2V0IHRoZSBleHBvbmVudAkjCisjIHRvIDB4M2ZmZSBhbmQgcmV0dXJuIGEgc2NhbGUgZmFjdG9yIG9mICIoZXhwLTB4M2ZmZSkvMiIuIElmIHRoZQkjCisjIGV4cG9uZW50IG9mIHRoZSBpbnB1dCBvcGVyYW5kIGlzIG9mZiwgc2V0IHRoZSBleHBvbmVudCB0byBveDNmZmYgYW5kCSMKKyMgcmV0dXJuIGEgc2NhbGUgZmFjdG9yIG9mICIoZXhwLTB4M2ZmZikvMiIuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXNjYWxlX3NxcnQKK3NjYWxlX3NxcnQ6CisJY21waS5iCQlTVEFHKCVhNiksJkRFTk9STQkjIGlzIG9wZXJhbmQgbm9ybWFsaXplZD8KKwliZXEuYgkJc3NfZGVub3JtCQkjIG5vcm1hbGl6ZSB0aGUgREVOT1JNCisKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGV4dHJhY3Qgb3BlcmFuZCdzIHtzZ24sZXhwfQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgZXh0cmFjdCBvcGVyYW5kJ3MgZXhwb25lbnQKKworCWFuZGkudwkJJjB4ODAwMCxGUF9TQ1IwX0VYKCVhNikJIyBleHRyYWN0IG9wZXJhbmQncyBzZ24KKworCWJ0c3QJCSYweDAsJWQxCQkjIGlzIGV4cCBldmVuIG9yIG9kZD8KKwliZXEuYgkJc3Nfbm9ybV9ldmVuCisKKwlvcmkudwkJJjB4M2ZmZixGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IG9wZXJhbmQncyBleHBvbmVudCg9MCkKKworCW1vdi5sCQkmMHgzZmZmLCVkMAorCXN1Yi5sCQklZDEsJWQwCQkJIyBzY2FsZSA9IEJJQVMgKyAoLWV4cCkKKwlhc3IubAkJJjB4MSwlZDAJCSMgZGl2aWRlIHNjYWxlIGZhY3RvciBieSAyCisJcnRzCisKK3NzX25vcm1fZXZlbjoKKwlvcmkudwkJJjB4M2ZmZSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IG9wZXJhbmQncyBleHBvbmVudCg9MCkKKworCW1vdi5sCQkmMHgzZmZlLCVkMAorCXN1Yi5sCQklZDEsJWQwCQkJIyBzY2FsZSA9IEJJQVMgKyAoLWV4cCkKKwlhc3IubAkJJjB4MSwlZDAJCSMgZGl2aWRlIHNjYWxlIGZhY3RvciBieSAyCisJcnRzCisKK3NzX2Rlbm9ybToKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzIHB0ciB0byBzcmMgb3AKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIGRlbm9ybQorCisJYnRzdAkJJjB4MCwlZDAJCSMgaXMgZXhwIGV2ZW4gb3Igb2RkPworCWJlcS5iCQlzc19kZW5vcm1fZXZlbgorCisJb3JpLncJCSYweDNmZmYsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBvcGVyYW5kJ3MgZXhwb25lbnQoPTApCisKKwlhZGQubAkJJjB4M2ZmZiwlZDAKKwlhc3IubAkJJjB4MSwlZDAJCSMgZGl2aWRlIHNjYWxlIGZhY3RvciBieSAyCisJcnRzCisKK3NzX2Rlbm9ybV9ldmVuOgorCW9yaS53CQkmMHgzZmZlLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgb3BlcmFuZCdzIGV4cG9uZW50KD0wKQorCisJYWRkLmwJCSYweDNmZmUsJWQwCisJYXNyLmwJCSYweDEsJWQwCQkjIGRpdmlkZSBzY2FsZSBmYWN0b3IgYnkgMgorCXJ0cworCisjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlzY2FsZV90b196ZXJvX2RzdCgpOiBzY2FsZSB0aGUgZXhwb25lbnQgb2YgZXh0ZW5kZWQgcHJlY2lzaW9uCSMKKyMJCQkgICAgIHZhbHVlIGF0IEZQX1NDUjEoYTYpLgkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCW5vcm0oKSAtIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EgaWYgdGhlIG9wZXJhbmQgd2FzIGEgREVOT1JNCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUZQX1NDUjEoYTYpID0gZXh0ZW5kZWQgcHJlY2lzaW9uIG9wZXJhbmQgdG8gYmUgc2NhbGVkCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGUF9TQ1IxKGE2KSA9IHNjYWxlZCBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZAkJCSMKKyMJZDAJICAgID0gc2NhbGUgdmFsdWUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVNldCB0aGUgZXhwb25lbnQgb2YgdGhlIGlucHV0IG9wZXJhbmQgdG8gMHgzZmZmLiBTYXZlIHRoZSB2YWx1ZQkjCisjIG9mIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG9yaWdpbmFsIGFuZCBuZXcgZXhwb25lbnQuIFRoZW4sCSMKKyMgbm9ybWFsaXplIHRoZSBvcGVyYW5kIGlmIGl0IHdhcyBhIERFTk9STS4gQWRkIHRoaXMgbm9ybWFsaXphdGlvbgkjCisjIHZhbHVlIHRvIHRoZSBwcmV2aW91cyB2YWx1ZS4gUmV0dXJuIHRoZSByZXN1bHQuCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc2NhbGVfdG9femVyb19kc3QKK3NjYWxlX3RvX3plcm9fZHN0OgorCW1vdi53CQlGUF9TQ1IxX0VYKCVhNiksJWQxCSMgZXh0cmFjdCBvcGVyYW5kJ3Mge3NnbixleHB9CisJbW92LncJCSVkMSwlZDAJCQkjIG1ha2UgYSBjb3B5CisKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIGV4dHJhY3Qgb3BlcmFuZCdzIGV4cG9uZW50CisKKwlhbmRpLncJCSYweDgwMDAsJWQwCQkjIGV4dHJhY3Qgb3BlcmFuZCdzIHNnbgorCW9yLncJCSYweDNmZmYsJWQwCQkjIGluc2VydCBuZXcgb3BlcmFuZCdzIGV4cG9uZW50KD0wKQorCisJbW92LncJCSVkMCxGUF9TQ1IxX0VYKCVhNikJIyBpbnNlcnQgYmlhc2VkIGV4cG9uZW50CisKKwljbXBpLmIJCURUQUcoJWE2KSwmREVOT1JNCSMgaXMgb3BlcmFuZCBub3JtYWxpemVkPworCWJlcS5iCQlzdHpkX2Rlbm9ybQkJIyBub3JtYWxpemUgdGhlIERFTk9STQorCitzdHpkX25vcm06CisJbW92LmwJCSYweDNmZmYsJWQwCisJc3ViLmwJCSVkMSwlZDAJCQkjIHNjYWxlID0gQklBUyArICgtZXhwKQorCXJ0cworCitzdHpkX2Rlbm9ybToKKwlsZWEJCUZQX1NDUjEoJWE2KSwlYTAJIyBwYXNzIHB0ciB0byBkc3Qgb3AKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIGRlbm9ybQorCW5lZy5sCQklZDAJCQkjIG5ldyBleHBvbmVudCA9IC0oc2hmdCB2YWwpCisJbW92LmwJCSVkMCwlZDEJCQkjIHByZXBhcmUgZm9yIG9wX25vcm0gY2FsbAorCWJyYS5iCQlzdHpkX25vcm0JCSMgZmluaXNoIHNjYWxpbmcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlyZXNfcW5hbigpOiByZXR1cm4gZGVmYXVsdCByZXN1bHQgdy8gUU5BTiBvcGVyYW5kIGZvciBkeWFkaWMJIworIwlyZXNfc25hbigpOiByZXR1cm4gZGVmYXVsdCByZXN1bHQgdy8gU05BTiBvcGVyYW5kIGZvciBkeWFkaWMJIworIwlyZXNfcW5hbl8xb3AoKTogcmV0dXJuIGRmbHQgcmVzdWx0IHcvIFFOQU4gb3BlcmFuZCBmb3IgbW9uYWRpYwkjCisjCXJlc19zbmFuXzFvcCgpOiByZXR1cm4gZGZsdCByZXN1bHQgdy8gU05BTiBvcGVyYW5kIGZvciBtb25hZGljCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUZQX1NSQyhhNikgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzcmMgb3BlcmFuZAkJIworIwlGUF9EU1QoYTYpID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gZHN0IG9wZXJhbmQJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IGRlZmF1bHQgcmVzdWx0CQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSWYgZWl0aGVyIG9wZXJhbmQgKGJ1dCBub3QgYm90aCBvcGVyYW5kcykgb2YgYW4gb3BlcmF0aW9uIGlzIGEJIworIyBub25zaWduYWxsaW5nIE5BTiwgdGhlbiB0aGF0IE5BTiBpcyByZXR1cm5lZCBhcyB0aGUgcmVzdWx0LiBJZiBib3RoCSMKKyMgb3BlcmFuZHMgYXJlIG5vbnNpZ25hbGxpbmcgTkFOcywgdGhlbiB0aGUgZGVzdGluYXRpb24gb3BlcmFuZAkJIworIyBub25zaWduYWxsaW5nIE5BTiBpcyByZXR1cm5lZCBhcyB0aGUgcmVzdWx0LgkJCQkjCisjCUlmIGVpdGhlciBvcGVyYW5kIHRvIGFuIG9wZXJhdGlvbiBpcyBhIHNpZ25hbGxpbmcgTkFOIChTTkFOKSwJIworIyB0aGVuLCB0aGUgU05BTiBiaXQgaXMgc2V0IGluIHRoZSBGUFNSIEVYQyBieXRlLiBJZiB0aGUgU05BTiB0cmFwCSMKKyMgZW5hYmxlIGJpdCBpcyBzZXQgaW4gdGhlIEZQQ1IsIHRoZW4gdGhlIHRyYXAgaXMgdGFrZW4gYW5kIHRoZQkJIworIyBkZXN0aW5hdGlvbiBpcyBub3QgbW9kaWZpZWQuIElmIHRoZSBTTkFOIHRyYXAgZW5hYmxlIGJpdCBpcyBub3Qgc2V0LAkjCisjIHRoZW4gdGhlIFNOQU4gaXMgY29udmVydGVkIHRvIGEgbm9uc2lnbmFsbGluZyBOQU4gKGJ5IHNldHRpbmcgdGhlCSMKKyMgU05BTiBiaXQgaW4gdGhlIG9wZXJhbmQgdG8gb25lKSwgYW5kIHRoZSBvcGVyYXRpb24gY29udGludWVzIGFzCSMKKyMgZGVzY3JpYmVkIGluIHRoZSBwcmVjZWRpbmcgcGFyYWdyYXBoLCBmb3Igbm9uc2lnbmFsbGluZyBOQU5zLgkJIworIwlNYWtlIHN1cmUgdGhlIGFwcHJvcHJpYXRlIEZQU1IgYml0cyBhcmUgc2V0IGJlZm9yZSBleGl0aW5nLgkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlyZXNfcW5hbgorCWdsb2JhbAkJcmVzX3NuYW4KK3Jlc19xbmFuOgorcmVzX3NuYW46CisJY21wLmIJCURUQUcoJWE2KSwgJlNOQU4JIyBpcyB0aGUgZHN0IGFuIFNOQU4/CisJYmVxLmIJCWRzdF9zbmFuMgorCWNtcC5iCQlEVEFHKCVhNiksICZRTkFOCSMgaXMgdGhlIGRzdCBhICBRTkFOPworCWJlcS5iCQlkc3RfcW5hbjIKK3NyY19uYW46CisJY21wLmIJCVNUQUcoJWE2KSwgJlFOQU4KKwliZXEuYgkJc3JjX3FuYW4yCisJZ2xvYmFsCQlyZXNfc25hbl8xb3AKK3Jlc19zbmFuXzFvcDoKK3NyY19zbmFuMjoKKwlic2V0CQkmMHg2LCBGUF9TUkNfSEkoJWE2KQkjIHNldCBTTkFOIGJpdAorCW9yLmwJCSZuYW5fbWFzaythaW9wX21hc2src25hbl9tYXNrLCBVU0VSX0ZQU1IoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksICVhMAorCWJyYS5iCQluYW5fY29tcAorCWdsb2JhbAkJcmVzX3FuYW5fMW9wCityZXNfcW5hbl8xb3A6CitzcmNfcW5hbjI6CisJb3IubAkJJm5hbl9tYXNrLCBVU0VSX0ZQU1IoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksICVhMAorCWJyYS5iCQluYW5fY29tcAorZHN0X3NuYW4yOgorCW9yLmwJCSZuYW5fbWFzaythaW9wX21hc2src25hbl9tYXNrLCBVU0VSX0ZQU1IoJWE2KQorCWJzZXQJCSYweDYsIEZQX0RTVF9ISSglYTYpCSMgc2V0IFNOQU4gYml0CisJbGVhCQlGUF9EU1QoJWE2KSwgJWEwCisJYnJhLmIJCW5hbl9jb21wCitkc3RfcW5hbjI6CisJbGVhCQlGUF9EU1QoJWE2KSwgJWEwCisJY21wLmIJCVNUQUcoJWE2KSwgJlNOQU4KKwlibmUJCW5hbl9kb25lCisJb3IubAkJJmFpb3BfbWFzaytzbmFuX21hc2ssIFVTRVJfRlBTUiglYTYpCituYW5fZG9uZToKKwlvci5sCQkmbmFuX21hc2ssIFVTRVJfRlBTUiglYTYpCituYW5fY29tcDoKKwlidHN0CQkmMHg3LCBGVEVNUF9FWCglYTApCSMgaXMgTkFOIG5lZz8KKwliZXEuYgkJbmFuX25vdF9uZWcKKwlvci5sCQkmbmVnX21hc2ssIFVTRVJfRlBTUiglYTYpCituYW5fbm90X25lZzoKKwlmbW92bS54CQkoJWEwKSwgJjB4ODAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlyZXNfb3BlcnIoKTogcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGR1cmluZyBvcGVyYW5kIGVycm9yCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSBkZWZhdWx0IG9wZXJhbmQgZXJyb3IgcmVzdWx0CQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUFuIG5vbnNpZ25hbGxpbmcgTkFOIGlzIHJldHVybmVkIGFzIHRoZSBkZWZhdWx0IHJlc3VsdCB3aGVuCSMKKyMgYW4gb3BlcmFuZCBlcnJvciBvY2N1cnMgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXM6CQkJIworIwkJCQkJCQkJCSMKKyMJTXVsdGlwbHk6IChJbmZpbml0eSB4IFplcm8pCQkJCQkjCisjCURpdmlkZSAgOiAoWmVybyAvIFplcm8pIHx8IChJbmZpbml0eSAvIEluZmluaXR5KQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJcmVzX29wZXJyCityZXNfb3BlcnI6CisJb3IubAkJJm5hbl9tYXNrK29wZXJyX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KQorCWZtb3ZtLngJCW5hbl9yZXR1cm4oJXBjKSwgJjB4ODAKKwlydHMKKworbmFuX3JldHVybjoKKwlsb25nCQkweDdmZmYwMDAwLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmRiY2MoKTogcm91dGluZSB0byBlbXVsYXRlIHRoZSBmZGJjYyBpbnN0cnVjdGlvbgkJCSMKKyMJCQkJCQkJCQkjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCV9mZGJjYygpCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWZldGNoX2RyZWcoKSAtIGZldGNoIERuIHZhbHVlCQkJCQkjCisjCXN0b3JlX2RyZWdfbCgpIC0gc3RvcmUgdXBkYXRlZCBEbiB2YWx1ZQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IGRpc3BsYWNlbWVudAkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCW5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoaXMgcm91dGluZSBjaGVja3Mgd2hpY2ggY29uZGl0aW9uYWwgcHJlZGljYXRlIGlzIHNwZWNpZmllZCBieQkjCisjIHRoZSBzdGFja2VkIGZkYmNjIGluc3RydWN0aW9uIG9wY29kZSBhbmQgdGhlbiBicmFuY2hlcyB0byBhIHJvdXRpbmUJIworIyBmb3IgdGhhdCBwcmVkaWNhdGUuIFRoZSBjb3JyZXNwb25kaW5nIGZiY2MgaW5zdHJ1Y3Rpb24gaXMgdGhlbiB1c2VkCSMKKyMgdG8gc2VlIHdoZXRoZXIgdGhlIGNvbmRpdGlvbiAoc3BlY2lmaWVkIGJ5IHRoZSBzdGFja2VkIEZQU1IpIGlzIHRydWUJIworIyBvciBmYWxzZS4JCQkJCQkJCSMKKyMJSWYgYSBCU1VOIGV4Y2VwdGlvbiBzaG91bGQgYmUgaW5kaWNhdGVkLCB0aGUgQlNVTiBhbmQgQUJTVU4JIworIyBiaXRzIGFyZSBzZXQgaW4gdGhlIHN0YWNrZWQgRlBTUi4gSWYgdGhlIEJTVU4gZXhjZXB0aW9uIGlzIGVuYWJsZWQsCSMKKyMgdGhlIGZic3VuX2ZsZyBpcyBzZXQgaW4gdGhlIFNQQ09ORF9GTEcgbG9jYXRpb24gb24gdGhlIHN0YWNrLiBJZiBhbgkjCisjIGVuYWJsZWQgQlNVTiBzaG91bGQgbm90IGJlIGZsYWdnZWQgYW5kIHRoZSBwcmVkaWNhdGUgaXMgdHJ1ZSwgdGhlbgkjCisjIERuIGlzIGZldGNoZWQgYW5kIGRlY3JlbWVudGVkIGJ5IG9uZS4gSWYgRG4gaXMgbm90IGVxdWFsIHRvIC0xLCBhZGQJIworIyB0aGUgZGlzcGxhY2VtZW50IHZhbHVlIHRvIHRoZSBzdGFja2VkIFBDIHNvIHRoYXQgd2hlbiBhbiAicnRlIiBpcwkjCisjIGZpbmFsbHkgZXhlY3V0ZWQsIHRoZSBicmFuY2ggb2NjdXJzLgkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCV9mZGJjYworX2ZkYmNjOgorCW1vdi5sCQklZDAsTF9TQ1IxKCVhNikJCSMgc2F2ZSBkaXNwbGFjZW1lbnQKKworCW1vdi53CQlFWENfQ01EUkVHKCVhNiksJWQwCSMgZmV0Y2ggcHJlZGljYXRlCisKKwljbHIubAkJJWQxCQkJIyBjbGVhciBzY3JhdGNoIHJlZworCW1vdi5iCQlGUFNSX0NDKCVhNiksJWQxCSMgZmV0Y2ggZnAgY2NvZGVzCisJcm9yLmwJCSYweDgsJWQxCQkjIHJvdGF0ZSB0byB0b3AgYnl0ZQorCWZtb3YubAkJJWQxLCVmcHNyCQkjIGluc2VydCBpbnRvIEZQU1IKKworCW1vdi53CQkodGJsX2ZkYmNjLmIsJXBjLCVkMC53KjIpLCVkMSAjIGxvYWQgdGFibGUKKwlqbXAJCSh0YmxfZmRiY2MuYiwlcGMsJWQxLncpICMganVtcCB0byBmZGJjYyByb3V0aW5lCisKK3RibF9mZGJjYzoKKwlzaG9ydAkJZmRiY2NfZgkJLQl0YmxfZmRiY2MJIyAwMAorCXNob3J0CQlmZGJjY19lcQktCXRibF9mZGJjYwkjIDAxCisJc2hvcnQJCWZkYmNjX29ndAktCXRibF9mZGJjYwkjIDAyCisJc2hvcnQJCWZkYmNjX29nZQktCXRibF9mZGJjYwkjIDAzCisJc2hvcnQJCWZkYmNjX29sdAktCXRibF9mZGJjYwkjIDA0CisJc2hvcnQJCWZkYmNjX29sZQktCXRibF9mZGJjYwkjIDA1CisJc2hvcnQJCWZkYmNjX29nbAktCXRibF9mZGJjYwkjIDA2CisJc2hvcnQJCWZkYmNjX29yCS0JdGJsX2ZkYmNjCSMgMDcKKwlzaG9ydAkJZmRiY2NfdW4JLQl0YmxfZmRiY2MJIyAwOAorCXNob3J0CQlmZGJjY191ZXEJLQl0YmxfZmRiY2MJIyAwOQorCXNob3J0CQlmZGJjY191Z3QJLQl0YmxfZmRiY2MJIyAxMAorCXNob3J0CQlmZGJjY191Z2UJLQl0YmxfZmRiY2MJIyAxMQorCXNob3J0CQlmZGJjY191bHQJLQl0YmxfZmRiY2MJIyAxMgorCXNob3J0CQlmZGJjY191bGUJLQl0YmxfZmRiY2MJIyAxMworCXNob3J0CQlmZGJjY19uZXEJLQl0YmxfZmRiY2MJIyAxNAorCXNob3J0CQlmZGJjY190CQktCXRibF9mZGJjYwkjIDE1CisJc2hvcnQJCWZkYmNjX3NmCS0JdGJsX2ZkYmNjCSMgMTYKKwlzaG9ydAkJZmRiY2Nfc2VxCS0JdGJsX2ZkYmNjCSMgMTcKKwlzaG9ydAkJZmRiY2NfZ3QJLQl0YmxfZmRiY2MJIyAxOAorCXNob3J0CQlmZGJjY19nZQktCXRibF9mZGJjYwkjIDE5CisJc2hvcnQJCWZkYmNjX2x0CS0JdGJsX2ZkYmNjCSMgMjAKKwlzaG9ydAkJZmRiY2NfbGUJLQl0YmxfZmRiY2MJIyAyMQorCXNob3J0CQlmZGJjY19nbAktCXRibF9mZGJjYwkjIDIyCisJc2hvcnQJCWZkYmNjX2dsZQktCXRibF9mZGJjYwkjIDIzCisJc2hvcnQJCWZkYmNjX25nbGUJLQl0YmxfZmRiY2MJIyAyNAorCXNob3J0CQlmZGJjY19uZ2wJLQl0YmxfZmRiY2MJIyAyNQorCXNob3J0CQlmZGJjY19ubGUJLQl0YmxfZmRiY2MJIyAyNgorCXNob3J0CQlmZGJjY19ubHQJLQl0YmxfZmRiY2MJIyAyNworCXNob3J0CQlmZGJjY19uZ2UJLQl0YmxfZmRiY2MJIyAyOAorCXNob3J0CQlmZGJjY19uZ3QJLQl0YmxfZmRiY2MJIyAyOQorCXNob3J0CQlmZGJjY19zbmVxCS0JdGJsX2ZkYmNjCSMgMzAKKwlzaG9ydAkJZmRiY2Nfc3QJLQl0YmxfZmRiY2MJIyAzMQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCQkJCQkJCQkJIworIyBJRUVFIE5vbmF3YXJlIHRlc3RzCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEZvciB0aGUgSUVFRSBub25hd2FyZSB0ZXN0cywgb25seSB0aGUgZmFsc2UgYnJhbmNoIGNoYW5nZXMgdGhlCSMKKyMgY291bnRlci4gSG93ZXZlciwgdGhlIHRydWUgYnJhbmNoIG1heSBzZXQgYnN1biBzbyB3ZSBjaGVjayB0byBzZWUJIworIyBpZiB0aGUgTkFOIGJpdCBpcyBzZXQsIGluIHdoaWNoIGNhc2UgQlNVTiBhbmQgQUlPUCB3aWxsIGJlIHNldC4JIworIwkJCQkJCQkJCSMKKyMgVGhlIGNhc2VzIEVRIGFuZCBORSBhcmUgc2hhcmVkIGJ5IHRoZSBBd2FyZSBhbmQgTm9uYXdhcmUgZ3JvdXBzCSMKKyMgYW5kIGFyZSBpbmNhcGFibGUgb2Ygc2V0dGluZyB0aGUgQlNVTiBleGNlcHRpb24gYml0LgkJCSMKKyMJCQkJCQkJCQkjCisjIFR5cGljYWxseSwgb25seSBvbmUgb2YgdGhlIHR3byBwb3NzaWJsZSBicmFuY2ggZGlyZWN0aW9ucyBjb3VsZAkjCisjIGhhdmUgdGhlIE5BTiBiaXQgc2V0LgkJCQkJCQkjCisjIChUaGlzIGlzIGFzc3VtaW5nIHRoZSBtdXR1YWwgZXhjbHVzaXZlbmVzcyBvZiBGUFNSIGNjIGJpdCBncm91cGluZ3MJIworIyAgaXMgcHJlc2VydmVkLikJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBlcXVhbDoKKyMKKyMJWgorIworZmRiY2NfZXE6CisJZmJlcS53CQlmZGJjY19lcV95ZXMJCSMgZXF1YWw/CitmZGJjY19lcV9ubzoKKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY19lcV95ZXM6CisJcnRzCisKKyMKKyMgbm90IGVxdWFsOgorIwlfCisjCVoKKyMKK2ZkYmNjX25lcToKKwlmYm5lcS53CQlmZGJjY19uZXFfeWVzCQkjIG5vdCBlcXVhbD8KK2ZkYmNjX25lcV9ubzoKKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY19uZXFfeWVzOgorCXJ0cworCisjCisjIGdyZWF0ZXIgdGhhbjoKKyMJX19fX19fXworIwlOQU52WnZOCisjCitmZGJjY19ndDoKKwlmYmd0LncJCWZkYmNjX2d0X3llcwkJIyBncmVhdGVyIHRoYW4/CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLncJCWZkYmNjX2ZhbHNlCQkjIG5vO2dvIGhhbmRsZSBjb3VudGVyCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBCU1VOIGVuYWJsZWQ/CisJYm5lLncJCWZkYmNjX2JzdW4JCSMgeWVzOyB3ZSBoYXZlIGFuIGV4Y2VwdGlvbgorCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKK2ZkYmNjX2d0X3llczoKKwlydHMJCQkJCSMgZG8gbm90aGluZworCisjCisjIG5vdCBncmVhdGVyIHRoYW46CisjCisjCU5BTnZadk4KKyMKK2ZkYmNjX25ndDoKKwlmYm5ndC53CQlmZGJjY19uZ3RfeWVzCQkjIG5vdCBncmVhdGVyIHRoYW4/CitmZGJjY19uZ3Rfbm86CisJYnJhLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBnbyBoYW5kbGUgY291bnRlcgorZmRiY2Nfbmd0X3llczoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEuYgkJZmRiY2Nfbmd0X2RvbmUJCSMgbm87Z28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBCU1VOIGVuYWJsZWQ/CisJYm5lLncJCWZkYmNjX2JzdW4JCSMgeWVzOyB3ZSBoYXZlIGFuIGV4Y2VwdGlvbgorZmRiY2Nfbmd0X2RvbmU6CisJcnRzCQkJCQkjIG5vOyBkbyBub3RoaW5nCisKKyMKKyMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsOgorIwkgICBfX19fXworIwladihOQU52TikKKyMKK2ZkYmNjX2dlOgorCWZiZ2UudwkJZmRiY2NfZ2VfeWVzCQkjIGdyZWF0ZXIgdGhhbiBvciBlcXVhbD8KK2ZkYmNjX2dlX25vOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS53CQlmZGJjY19mYWxzZQkJIyBubztnbyBoYW5kbGUgY291bnRlcgorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgaXMgQlNVTiBlbmFibGVkPworCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY19nZV95ZXM6CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLmIJCWZkYmNjX2dlX3llc19kb25lCSMgbm87Z28gZG8gbm90aGluZworCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgaXMgQlNVTiBlbmFibGVkPworCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KK2ZkYmNjX2dlX3llc19kb25lOgorCXJ0cwkJCQkJIyBkbyBub3RoaW5nCisKKyMKKyMgbm90IChncmVhdGVyIHRoYW4gb3IgZXF1YWwpOgorIwkgICAgICAgXworIwlOQU52KE5eWikKKyMKK2ZkYmNjX25nZToKKwlmYm5nZS53CQlmZGJjY19uZ2VfeWVzCQkjIG5vdCAoZ3JlYXRlciB0aGFuIG9yIGVxdWFsKT8KK2ZkYmNjX25nZV9ubzoKKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY19uZ2VfeWVzOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS5iCQlmZGJjY19uZ2VfZG9uZQkJIyBubztnbyBmaW5pc2gKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KKwlibmUudwkJZmRiY2NfYnN1bgkJIyB5ZXM7IHdlIGhhdmUgYW4gZXhjZXB0aW9uCitmZGJjY19uZ2VfZG9uZToKKwlydHMJCQkJCSMgbm87IGRvIG5vdGhpbmcKKworIworIyBsZXNzIHRoYW46CisjCSAgIF9fX19fCisjCU5eKE5BTnZaKQorIworZmRiY2NfbHQ6CisJZmJsdC53CQlmZGJjY19sdF95ZXMJCSMgbGVzcyB0aGFuPworZmRiY2NfbHRfbm86CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBnbyBoYW5kbGUgY291bnRlcgorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgaXMgQlNVTiBlbmFibGVkPworCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY19sdF95ZXM6CisJcnRzCQkJCQkjIGRvIG5vdGhpbmcKKworIworIyBub3QgbGVzcyB0aGFuOgorIwkgICAgICAgXworIwlOQU52KFp2TikKKyMKK2ZkYmNjX25sdDoKKwlmYm5sdC53CQlmZGJjY19ubHRfeWVzCQkjIG5vdCBsZXNzIHRoYW4/CitmZGJjY19ubHRfbm86CisJYnJhLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBnbyBoYW5kbGUgY291bnRlcgorZmRiY2Nfbmx0X3llczoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEuYgkJZmRiY2Nfbmx0X2RvbmUJCSMgbm87Z28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBCU1VOIGVuYWJsZWQ/CisJYm5lLncJCWZkYmNjX2JzdW4JCSMgeWVzOyB3ZSBoYXZlIGFuIGV4Y2VwdGlvbgorZmRiY2Nfbmx0X2RvbmU6CisJcnRzCQkJCQkjIG5vOyBkbyBub3RoaW5nCisKKyMKKyMgbGVzcyB0aGFuIG9yIGVxdWFsOgorIwkgICAgIF9fXworIwladihOXk5BTikKKyMKK2ZkYmNjX2xlOgorCWZibGUudwkJZmRiY2NfbGVfeWVzCQkjIGxlc3MgdGhhbiBvciBlcXVhbD8KK2ZkYmNjX2xlX25vOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KKwlibmUudwkJZmRiY2NfYnN1bgkJIyB5ZXM7IHdlIGhhdmUgYW4gZXhjZXB0aW9uCisJYnJhLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBnbyBoYW5kbGUgY291bnRlcgorZmRiY2NfbGVfeWVzOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS5iCQlmZGJjY19sZV95ZXNfZG9uZQkjIG5vOyBnbyBkbyBub3RoaW5nCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBCU1VOIGVuYWJsZWQ/CisJYm5lLncJCWZkYmNjX2JzdW4JCSMgeWVzOyB3ZSBoYXZlIGFuIGV4Y2VwdGlvbgorZmRiY2NfbGVfeWVzX2RvbmU6CisJcnRzCQkJCQkjIGRvIG5vdGhpbmcKKworIworIyBub3QgKGxlc3MgdGhhbiBvciBlcXVhbCk6CisjCSAgICAgX19fCisjCU5BTnYoTnZaKQorIworZmRiY2NfbmxlOgorCWZibmxlLncJCWZkYmNjX25sZV95ZXMJCSMgbm90IChsZXNzIHRoYW4gb3IgZXF1YWwpPworZmRiY2NfbmxlX25vOgorCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKK2ZkYmNjX25sZV95ZXM6CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLncJCWZkYmNjX25sZV9kb25lCQkjIG5vOyBnbyBmaW5pc2gKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KKwlibmUudwkJZmRiY2NfYnN1bgkJIyB5ZXM7IHdlIGhhdmUgYW4gZXhjZXB0aW9uCitmZGJjY19ubGVfZG9uZToKKwlydHMJCQkJCSMgbm87IGRvIG5vdGhpbmcKKworIworIyBncmVhdGVyIG9yIGxlc3MgdGhhbjoKKyMJX19fX18KKyMJTkFOdloKKyMKK2ZkYmNjX2dsOgorCWZiZ2wudwkJZmRiY2NfZ2xfeWVzCQkjIGdyZWF0ZXIgb3IgbGVzcyB0aGFuPworZmRiY2NfZ2xfbm86CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBoYW5kbGUgY291bnRlcgorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgaXMgQlNVTiBlbmFibGVkPworCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY19nbF95ZXM6CisJcnRzCQkJCQkjIGRvIG5vdGhpbmcKKworIworIyBub3QgKGdyZWF0ZXIgb3IgbGVzcyB0aGFuKToKKyMKKyMJTkFOdloKKyMKK2ZkYmNjX25nbDoKKwlmYm5nbC53CQlmZGJjY19uZ2xfeWVzCQkjIG5vdCAoZ3JlYXRlciBvciBsZXNzIHRoYW4pPworZmRiY2NfbmdsX25vOgorCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKK2ZkYmNjX25nbF95ZXM6CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLmIJCWZkYmNjX25nbF9kb25lCQkjIG5vOyBnbyBmaW5pc2gKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KKwlibmUudwkJZmRiY2NfYnN1bgkJIyB5ZXM7IHdlIGhhdmUgYW4gZXhjZXB0aW9uCitmZGJjY19uZ2xfZG9uZToKKwlydHMJCQkJCSMgbm87IGRvIG5vdGhpbmcKKworIworIyBncmVhdGVyLCBsZXNzLCBvciBlcXVhbDoKKyMJX19fCisjCU5BTgorIworZmRiY2NfZ2xlOgorCWZiZ2xlLncJCWZkYmNjX2dsZV95ZXMJCSMgZ3JlYXRlciwgbGVzcywgb3IgZXF1YWw/CitmZGJjY19nbGVfbm86CisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBCU1VOIGVuYWJsZWQ/CisJYm5lLncJCWZkYmNjX2JzdW4JCSMgeWVzOyB3ZSBoYXZlIGFuIGV4Y2VwdGlvbgorCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKK2ZkYmNjX2dsZV95ZXM6CisJcnRzCQkJCQkjIGRvIG5vdGhpbmcKKworIworIyBub3QgKGdyZWF0ZXIsIGxlc3MsIG9yIGVxdWFsKToKKyMKKyMJTkFOCisjCitmZGJjY19uZ2xlOgorCWZibmdsZS53CWZkYmNjX25nbGVfeWVzCQkjIG5vdCAoZ3JlYXRlciwgbGVzcywgb3IgZXF1YWwpPworZmRiY2NfbmdsZV9ubzoKKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY19uZ2xlX3llczoKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KKwlibmUudwkJZmRiY2NfYnN1bgkJIyB5ZXM7IHdlIGhhdmUgYW4gZXhjZXB0aW9uCisJcnRzCQkJCQkjIG5vOyBkbyBub3RoaW5nCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJCQkJCQkJCQkjCisjIE1pc2NlbGxhbmVvdXMgdGVzdHMJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgRm9yIHRoZSBJRUVFIG1pc2NlbGxhbmVvdXMgdGVzdHMsIGFsbCBidXQgZmRiZiBhbmQgZmRidCBjYW4gc2V0IGJzdW4uICMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgZmFsc2U6CisjCisjCUZhbHNlCisjCitmZGJjY19mOgkJCQkJIyBubyBic3VuIHBvc3NpYmxlCisJYnJhLncJCWZkYmNjX2ZhbHNlCQkjIGdvIGhhbmRsZSBjb3VudGVyCisKKyMKKyMgdHJ1ZToKKyMKKyMJVHJ1ZQorIworZmRiY2NfdDoJCQkJCSMgbm8gYnN1biBwb3NzaWJsZQorCXJ0cwkJCQkJIyBkbyBub3RoaW5nCisKKyMKKyMgc2lnbmFsbGluZyBmYWxzZToKKyMKKyMJRmFsc2UKKyMKK2ZkYmNjX3NmOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0PworCWJlcS53CQlmZGJjY19mYWxzZQkJIyBubztnbyBoYW5kbGUgY291bnRlcgorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgaXMgQlNVTiBlbmFibGVkPworCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgZ28gaGFuZGxlIGNvdW50ZXIKKworIworIyBzaWduYWxsaW5nIHRydWU6CisjCisjCVRydWUKKyMKK2ZkYmNjX3N0OgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0PworCWJlcS5iCQlmZGJjY19zdF9kb25lCQkjIG5vO2dvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgaXMgQlNVTiBlbmFibGVkPworCWJuZS53CQlmZGJjY19ic3VuCQkjIHllczsgd2UgaGF2ZSBhbiBleGNlcHRpb24KK2ZkYmNjX3N0X2RvbmU6CisJcnRzCisKKyMKKyMgc2lnbmFsbGluZyBlcXVhbDoKKyMKKyMJWgorIworZmRiY2Nfc2VxOgorCWZic2VxLncJCWZkYmNjX3NlcV95ZXMJCSMgc2lnbmFsbGluZyBlcXVhbD8KK2ZkYmNjX3NlcV9ubzoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldD8KKwliZXEudwkJZmRiY2NfZmFsc2UJCSMgbm87Z28gaGFuZGxlIGNvdW50ZXIKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KKwlibmUudwkJZmRiY2NfYnN1bgkJIyB5ZXM7IHdlIGhhdmUgYW4gZXhjZXB0aW9uCisJYnJhLncJCWZkYmNjX2ZhbHNlCQkjIGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY19zZXFfeWVzOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0PworCWJlcS5iCQlmZGJjY19zZXFfeWVzX2RvbmUJIyBubztnbyBkbyBub3RoaW5nCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBCU1VOIGVuYWJsZWQ/CisJYm5lLncJCWZkYmNjX2JzdW4JCSMgeWVzOyB3ZSBoYXZlIGFuIGV4Y2VwdGlvbgorZmRiY2Nfc2VxX3llc19kb25lOgorCXJ0cwkJCQkJIyB5ZXM7IGRvIG5vdGhpbmcKKworIworIyBzaWduYWxsaW5nIG5vdCBlcXVhbDoKKyMJXworIwlaCisjCitmZGJjY19zbmVxOgorCWZic25lcS53CWZkYmNjX3NuZXFfeWVzCQkjIHNpZ25hbGxpbmcgbm90IGVxdWFsPworZmRiY2Nfc25lcV9ubzoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldD8KKwliZXEudwkJZmRiY2NfZmFsc2UJCSMgbm87Z28gaGFuZGxlIGNvdW50ZXIKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIGlzIEJTVU4gZW5hYmxlZD8KKwlibmUudwkJZmRiY2NfYnN1bgkJIyB5ZXM7IHdlIGhhdmUgYW4gZXhjZXB0aW9uCisJYnJhLncJCWZkYmNjX2ZhbHNlCQkjIGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY19zbmVxX3llczoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgc2V0IEJTVU4gZXhjIGJpdAorCWJlcS53CQlmZGJjY19zbmVxX2RvbmUJCSMgbm87Z28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBCU1VOIGVuYWJsZWQ/CisJYm5lLncJCWZkYmNjX2JzdW4JCSMgeWVzOyB3ZSBoYXZlIGFuIGV4Y2VwdGlvbgorZmRiY2Nfc25lcV9kb25lOgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCQkJCQkJCQkJIworIyBJRUVFIEF3YXJlIHRlc3RzCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEZvciB0aGUgSUVFRSBhd2FyZSB0ZXN0cywgYWN0aW9uIGlzIG9ubHkgdGFrZW4gaWYgdGhlIHJlc3VsdCBpcyBmYWxzZS4jCisjIFRoZXJlZm9yZSwgdGhlIG9wcG9zaXRlIGJyYW5jaCB0eXBlIGlzIHVzZWQgdG8ganVtcCB0byB0aGUgZGVjcmVtZW50CSMKKyMgcm91dGluZS4JCQkJCQkJCSMKKyMgVGhlIEJTVU4gZXhjZXB0aW9uIHdpbGwgbm90IGJlIHNldCBmb3IgYW55IG9mIHRoZXNlIHRlc3RzLgkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBvcmRlcmVkIGdyZWF0ZXIgdGhhbjoKKyMJX19fX19fXworIwlOQU52WnZOCisjCitmZGJjY19vZ3Q6CisJZmJvZ3QudwkJZmRiY2Nfb2d0X3llcwkJIyBvcmRlcmVkIGdyZWF0ZXIgdGhhbj8KK2ZkYmNjX29ndF9ubzoKKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY19vZ3RfeWVzOgorCXJ0cwkJCQkJIyB5ZXM7IGRvIG5vdGhpbmcKKworIworIyB1bm9yZGVyZWQgb3IgbGVzcyBvciBlcXVhbDoKKyMJX19fX19fXworIwlOQU52WnZOCisjCitmZGJjY191bGU6CisJZmJ1bGUudwkJZmRiY2NfdWxlX3llcwkJIyB1bm9yZGVyZWQgb3IgbGVzcyBvciBlcXVhbD8KK2ZkYmNjX3VsZV9ubzoKKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY191bGVfeWVzOgorCXJ0cwkJCQkJIyB5ZXM7IGRvIG5vdGhpbmcKKworIworIyBvcmRlcmVkIGdyZWF0ZXIgdGhhbiBvciBlcXVhbDoKKyMJICAgX19fX18KKyMJWnYoTkFOdk4pCisjCitmZGJjY19vZ2U6CisJZmJvZ2UudwkJZmRiY2Nfb2dlX3llcwkJIyBvcmRlcmVkIGdyZWF0ZXIgdGhhbiBvciBlcXVhbD8KK2ZkYmNjX29nZV9ubzoKKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY19vZ2VfeWVzOgorCXJ0cwkJCQkJIyB5ZXM7IGRvIG5vdGhpbmcKKworIworIyB1bm9yZGVyZWQgb3IgbGVzcyB0aGFuOgorIwkgICAgICAgXworIwlOQU52KE5eWikKKyMKK2ZkYmNjX3VsdDoKKwlmYnVsdC53CQlmZGJjY191bHRfeWVzCQkjIHVub3JkZXJlZCBvciBsZXNzIHRoYW4/CitmZGJjY191bHRfbm86CisJYnJhLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBnbyBoYW5kbGUgY291bnRlcgorZmRiY2NfdWx0X3llczoKKwlydHMJCQkJCSMgeWVzOyBkbyBub3RoaW5nCisKKyMKKyMgb3JkZXJlZCBsZXNzIHRoYW46CisjCSAgIF9fX19fCisjCU5eKE5BTnZaKQorIworZmRiY2Nfb2x0OgorCWZib2x0LncJCWZkYmNjX29sdF95ZXMJCSMgb3JkZXJlZCBsZXNzIHRoYW4/CitmZGJjY19vbHRfbm86CisJYnJhLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBnbyBoYW5kbGUgY291bnRlcgorZmRiY2Nfb2x0X3llczoKKwlydHMJCQkJCSMgeWVzOyBkbyBub3RoaW5nCisKKyMKKyMgdW5vcmRlcmVkIG9yIGdyZWF0ZXIgb3IgZXF1YWw6CisjCisjCU5BTnZadk4KKyMKK2ZkYmNjX3VnZToKKwlmYnVnZS53CQlmZGJjY191Z2VfeWVzCQkjIHVub3JkZXJlZCBvciBncmVhdGVyIHRoYW4/CitmZGJjY191Z2Vfbm86CisJYnJhLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBnbyBoYW5kbGUgY291bnRlcgorZmRiY2NfdWdlX3llczoKKwlydHMJCQkJCSMgeWVzOyBkbyBub3RoaW5nCisKKyMKKyMgb3JkZXJlZCBsZXNzIHRoYW4gb3IgZXF1YWw6CisjCSAgICAgX19fCisjCVp2KE5eTkFOKQorIworZmRiY2Nfb2xlOgorCWZib2xlLncJCWZkYmNjX29sZV95ZXMJCSMgb3JkZXJlZCBncmVhdGVyIG9yIGxlc3MgdGhhbj8KK2ZkYmNjX29sZV9ubzoKKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY19vbGVfeWVzOgorCXJ0cwkJCQkJIyB5ZXM7IGRvIG5vdGhpbmcKKworIworIyB1bm9yZGVyZWQgb3IgZ3JlYXRlciB0aGFuOgorIwkgICAgIF9fXworIwlOQU52KE52WikKKyMKK2ZkYmNjX3VndDoKKwlmYnVndC53CQlmZGJjY191Z3RfeWVzCQkjIHVub3JkZXJlZCBvciBncmVhdGVyIHRoYW4/CitmZGJjY191Z3Rfbm86CisJYnJhLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBnbyBoYW5kbGUgY291bnRlcgorZmRiY2NfdWd0X3llczoKKwlydHMJCQkJCSMgeWVzOyBkbyBub3RoaW5nCisKKyMKKyMgb3JkZXJlZCBncmVhdGVyIG9yIGxlc3MgdGhhbjoKKyMJX19fX18KKyMJTkFOdloKKyMKK2ZkYmNjX29nbDoKKwlmYm9nbC53CQlmZGJjY19vZ2xfeWVzCQkjIG9yZGVyZWQgZ3JlYXRlciBvciBsZXNzIHRoYW4/CitmZGJjY19vZ2xfbm86CisJYnJhLncJCWZkYmNjX2ZhbHNlCQkjIG5vOyBnbyBoYW5kbGUgY291bnRlcgorZmRiY2Nfb2dsX3llczoKKwlydHMJCQkJCSMgeWVzOyBkbyBub3RoaW5nCisKKyMKKyMgdW5vcmRlcmVkIG9yIGVxdWFsOgorIworIwlOQU52WgorIworZmRiY2NfdWVxOgorCWZidWVxLncJCWZkYmNjX3VlcV95ZXMJCSMgdW5vcmRlcmVkIG9yIGVxdWFsPworZmRiY2NfdWVxX25vOgorCWJyYS53CQlmZGJjY19mYWxzZQkJIyBubzsgZ28gaGFuZGxlIGNvdW50ZXIKK2ZkYmNjX3VlcV95ZXM6CisJcnRzCQkJCQkjIHllczsgZG8gbm90aGluZworCisjCisjIG9yZGVyZWQ6CisjCV9fXworIwlOQU4KKyMKK2ZkYmNjX29yOgorCWZib3IudwkJZmRiY2Nfb3JfeWVzCQkjIG9yZGVyZWQ/CitmZGJjY19vcl9ubzoKKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY19vcl95ZXM6CisJcnRzCQkJCQkjIHllczsgZG8gbm90aGluZworCisjCisjIHVub3JkZXJlZDoKKyMKKyMJTkFOCisjCitmZGJjY191bjoKKwlmYnVuLncJCWZkYmNjX3VuX3llcwkJIyB1bm9yZGVyZWQ/CitmZGJjY191bl9ubzoKKwlicmEudwkJZmRiY2NfZmFsc2UJCSMgbm87IGdvIGhhbmRsZSBjb3VudGVyCitmZGJjY191bl95ZXM6CisJcnRzCQkJCQkjIHllczsgZG8gbm90aGluZworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIHRoZSBic3VuIGV4Y2VwdGlvbiBiaXQgd2FzIG5vdCBzZXQuCisjCisjICgxKSBzdWJ0cmFjdCAxIGZyb20gdGhlIGNvdW50IHJlZ2lzdGVyCisjICgyKSBpZiAoY3IgPT0gLTEpIHRoZW4KKyMJcGMgPSBwYyBvZiBuZXh0IGluc3RydWN0aW9uCisjICAgICBlbHNlCisjCXBjICs9IHNpZ25fZXh0KDE2LWJpdCBkaXNwbGFjZW1lbnQpCisjCitmZGJjY19mYWxzZToKKwltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksICVkMQkjIGZldGNoIGxvIG9wd29yZAorCWFuZGkudwkJJjB4NywgJWQxCQkjIGV4dHJhY3QgY291bnQgcmVnaXN0ZXIKKworCWJzci5sCQlmZXRjaF9kcmVnCQkjIGZldGNoIGNvdW50IHZhbHVlCisjIG1ha2Ugc3VyZSB0aGF0IGQwIGlzbid0IGNvcnJ1cHRlZCBiZXR3ZWVuIGNhbGxzLi4uCisKKwlzdWJxLncJCSYweDEsICVkMAkJIyBEbiAtIDEgLT4gRG4KKworCWJzci5sCQlzdG9yZV9kcmVnX2wJCSMgc3RvcmUgbmV3IGNvdW50IHZhbHVlCisKKwljbXBpLncJCSVkMCwgJi0weDEJCSMgaXMgKERuID09IC0xKT8KKwlibmUuYgkJZmRiY2NfZmFsc2VfY29udAkjIG5vOworCXJ0cworCitmZGJjY19mYWxzZV9jb250OgorCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDAJCSMgZmV0Y2ggZGlzcGxhY2VtZW50CisJYWRkLmwJCVVTRVJfRlBJQVIoJWE2KSwlZDAJIyBhZGQgaW5zdHJ1Y3Rpb24gUEMKKwlhZGRxLmwJCSYweDQsJWQwCQkjIGFkZCBpbnN0cnVjdGlvbiBsZW5ndGgKKwltb3YubAkJJWQwLEVYQ19QQyglYTYpCQkjIHNldCBuZXcgUEMKKwlydHMKKworIyB0aGUgZW11bGF0aW9uIHJvdXRpbmUgc2V0IGJzdW4gYW5kIEJTVU4gd2FzIGVuYWJsZWQuIGhhdmUgdG8KKyMgZml4IHN0YWNrIGFuZCBqdW1wIHRvIHRoZSBic3VuIGhhbmRsZXIuCisjIGxldCB0aGUgY2FsbGVyIG9mIHRoaXMgcm91dGluZSBzaGlmdCB0aGUgc3RhY2sgZnJhbWUgdXAgdG8KKyMgZWxpbWluYXRlIHRoZSBlZmZlY3RpdmUgYWRkcmVzcyBmaWVsZC4KK2ZkYmNjX2JzdW46CisJbW92LmIJCSZmYnN1bl9mbGcsU1BDT05EX0ZMRyglYTYpCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZnRyYXBjYygpOiByb3V0aW5lIHRvIGVtdWxhdGUgdGhlIGZ0cmFwY2MgaW5zdHJ1Y3Rpb24JCQkjCisjCQkJCQkJCQkJIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfZnRyYXBjYygpCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCW5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCW5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCW5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCVRoaXMgcm91dGluZSBjaGVja3Mgd2hpY2ggY29uZGl0aW9uYWwgcHJlZGljYXRlIGlzIHNwZWNpZmllZCBieQkjCisjIHRoZSBzdGFja2VkIGZ0cmFwY2MgaW5zdHJ1Y3Rpb24gb3Bjb2RlIGFuZCB0aGVuIGJyYW5jaGVzIHRvIGEgcm91dGluZQkjCisjIGZvciB0aGF0IHByZWRpY2F0ZS4gVGhlIGNvcnJlc3BvbmRpbmcgZmJjYyBpbnN0cnVjdGlvbiBpcyB0aGVuIHVzZWQJIworIyB0byBzZWUgd2hldGhlciB0aGUgY29uZGl0aW9uIChzcGVjaWZpZWQgYnkgdGhlIHN0YWNrZWQgRlBTUikgaXMgdHJ1ZQkjCisjIG9yIGZhbHNlLgkJCQkJCQkJIworIwlJZiBhIEJTVU4gZXhjZXB0aW9uIHNob3VsZCBiZSBpbmRpY2F0ZWQsIHRoZSBCU1VOIGFuZCBBQlNVTgkjCisjIGJpdHMgYXJlIHNldCBpbiB0aGUgc3RhY2tlZCBGUFNSLiBJZiB0aGUgQlNVTiBleGNlcHRpb24gaXMgZW5hYmxlZCwJIworIyB0aGUgZmJzdW5fZmxnIGlzIHNldCBpbiB0aGUgU1BDT05EX0ZMRyBsb2NhdGlvbiBvbiB0aGUgc3RhY2suIElmIGFuCSMKKyMgZW5hYmxlZCBCU1VOIHNob3VsZCBub3QgYmUgZmxhZ2dlZCBhbmQgdGhlIHByZWRpY2F0ZSBpcyB0cnVlLCB0aGVuCSMKKyMgdGhlIGZ0cmFwY2NfZmxnIGlzIHNldCBpbiB0aGUgU1BDT05EX0ZMRyBsb2NhdGlvbi4gVGhlc2Ugc3BlY2lhbAkjCisjIGZsYWdzIGluZGljYXRlIHRvIHRoZSBjYWxsaW5nIHJvdXRpbmUgdG8gZW11bGF0ZSB0aGUgZXhjZXB0aW9uYWwJIworIyBjb25kaXRpb24uCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfZnRyYXBjYworX2Z0cmFwY2M6CisJbW92LncJCUVYQ19DTURSRUcoJWE2KSwlZDAJIyBmZXRjaCBwcmVkaWNhdGUKKworCWNsci5sCQklZDEJCQkjIGNsZWFyIHNjcmF0Y2ggcmVnCisJbW92LmIJCUZQU1JfQ0MoJWE2KSwlZDEJIyBmZXRjaCBmcCBjY29kZXMKKwlyb3IubAkJJjB4OCwlZDEJCSMgcm90YXRlIHRvIHRvcCBieXRlCisJZm1vdi5sCQklZDEsJWZwc3IJCSMgaW5zZXJ0IGludG8gRlBTUgorCisJbW92LncJCSh0YmxfZnRyYXBjYy5iLCVwYywlZDAudyoyKSwgJWQxICMgbG9hZCB0YWJsZQorCWptcAkJKHRibF9mdHJhcGNjLmIsJXBjLCVkMS53KSAjIGp1bXAgdG8gZnRyYXBjYyByb3V0aW5lCisKK3RibF9mdHJhcGNjOgorCXNob3J0CQlmdHJhcGNjX2YJLQl0YmxfZnRyYXBjYwkjIDAwCisJc2hvcnQJCWZ0cmFwY2NfZXEJLQl0YmxfZnRyYXBjYwkjIDAxCisJc2hvcnQJCWZ0cmFwY2Nfb2d0CS0JdGJsX2Z0cmFwY2MJIyAwMgorCXNob3J0CQlmdHJhcGNjX29nZQktCXRibF9mdHJhcGNjCSMgMDMKKwlzaG9ydAkJZnRyYXBjY19vbHQJLQl0YmxfZnRyYXBjYwkjIDA0CisJc2hvcnQJCWZ0cmFwY2Nfb2xlCS0JdGJsX2Z0cmFwY2MJIyAwNQorCXNob3J0CQlmdHJhcGNjX29nbAktCXRibF9mdHJhcGNjCSMgMDYKKwlzaG9ydAkJZnRyYXBjY19vcgktCXRibF9mdHJhcGNjCSMgMDcKKwlzaG9ydAkJZnRyYXBjY191bgktCXRibF9mdHJhcGNjCSMgMDgKKwlzaG9ydAkJZnRyYXBjY191ZXEJLQl0YmxfZnRyYXBjYwkjIDA5CisJc2hvcnQJCWZ0cmFwY2NfdWd0CS0JdGJsX2Z0cmFwY2MJIyAxMAorCXNob3J0CQlmdHJhcGNjX3VnZQktCXRibF9mdHJhcGNjCSMgMTEKKwlzaG9ydAkJZnRyYXBjY191bHQJLQl0YmxfZnRyYXBjYwkjIDEyCisJc2hvcnQJCWZ0cmFwY2NfdWxlCS0JdGJsX2Z0cmFwY2MJIyAxMworCXNob3J0CQlmdHJhcGNjX25lcQktCXRibF9mdHJhcGNjCSMgMTQKKwlzaG9ydAkJZnRyYXBjY190CS0JdGJsX2Z0cmFwY2MJIyAxNQorCXNob3J0CQlmdHJhcGNjX3NmCS0JdGJsX2Z0cmFwY2MJIyAxNgorCXNob3J0CQlmdHJhcGNjX3NlcQktCXRibF9mdHJhcGNjCSMgMTcKKwlzaG9ydAkJZnRyYXBjY19ndAktCXRibF9mdHJhcGNjCSMgMTgKKwlzaG9ydAkJZnRyYXBjY19nZQktCXRibF9mdHJhcGNjCSMgMTkKKwlzaG9ydAkJZnRyYXBjY19sdAktCXRibF9mdHJhcGNjCSMgMjAKKwlzaG9ydAkJZnRyYXBjY19sZQktCXRibF9mdHJhcGNjCSMgMjEKKwlzaG9ydAkJZnRyYXBjY19nbAktCXRibF9mdHJhcGNjCSMgMjIKKwlzaG9ydAkJZnRyYXBjY19nbGUJLQl0YmxfZnRyYXBjYwkjIDIzCisJc2hvcnQJCWZ0cmFwY2NfbmdsZQktCXRibF9mdHJhcGNjCSMgMjQKKwlzaG9ydAkJZnRyYXBjY19uZ2wJLQl0YmxfZnRyYXBjYwkjIDI1CisJc2hvcnQJCWZ0cmFwY2NfbmxlCS0JdGJsX2Z0cmFwY2MJIyAyNgorCXNob3J0CQlmdHJhcGNjX25sdAktCXRibF9mdHJhcGNjCSMgMjcKKwlzaG9ydAkJZnRyYXBjY19uZ2UJLQl0YmxfZnRyYXBjYwkjIDI4CisJc2hvcnQJCWZ0cmFwY2Nfbmd0CS0JdGJsX2Z0cmFwY2MJIyAyOQorCXNob3J0CQlmdHJhcGNjX3NuZXEJLQl0YmxfZnRyYXBjYwkjIDMwCisJc2hvcnQJCWZ0cmFwY2Nfc3QJLQl0YmxfZnRyYXBjYwkjIDMxCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJCQkJCQkJCQkjCisjIElFRUUgTm9uYXdhcmUgdGVzdHMJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgRm9yIHRoZSBJRUVFIG5vbmF3YXJlIHRlc3RzLCB3ZSBzZXQgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGUJCSMKKyMgZmxvYXRpbmcgcG9pbnQgY29uZGl0aW9uIGNvZGVzLiBJbiBhZGRpdGlvbiwgd2UgY2hlY2sgdG8gc2VlCQkjCisjIGlmIHRoZSBOQU4gYml0IGlzIHNldCwgaW4gd2hpY2ggY2FzZSBCU1VOIGFuZCBBSU9QIHdpbGwgYmUgc2V0LgkjCisjCQkJCQkJCQkJIworIyBUaGUgY2FzZXMgRVEgYW5kIE5FIGFyZSBzaGFyZWQgYnkgdGhlIEF3YXJlIGFuZCBOb25hd2FyZSBncm91cHMJIworIyBhbmQgYXJlIGluY2FwYWJsZSBvZiBzZXR0aW5nIHRoZSBCU1VOIGV4Y2VwdGlvbiBiaXQuCQkJIworIwkJCQkJCQkJCSMKKyMgVHlwaWNhbGx5LCBvbmx5IG9uZSBvZiB0aGUgdHdvIHBvc3NpYmxlIGJyYW5jaCBkaXJlY3Rpb25zIGNvdWxkCSMKKyMgaGF2ZSB0aGUgTkFOIGJpdCBzZXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgZXF1YWw6CisjCisjCVoKKyMKK2Z0cmFwY2NfZXE6CisJZmJlcS53CQlmdHJhcGNjX3RyYXAJCSMgZXF1YWw/CitmdHJhcGNjX2VxX25vOgorCXJ0cwkJCQkJIyBkbyBub3RoaW5nCisKKyMKKyMgbm90IGVxdWFsOgorIwlfCisjCVoKKyMKK2Z0cmFwY2NfbmVxOgorCWZibmVxLncJCWZ0cmFwY2NfdHJhcAkJIyBub3QgZXF1YWw/CitmdHJhcGNjX25lcV9ubzoKKwlydHMJCQkJCSMgZG8gbm90aGluZworCisjCisjIGdyZWF0ZXIgdGhhbjoKKyMJX19fX19fXworIwlOQU52WnZOCisjCitmdHJhcGNjX2d0OgorCWZiZ3QudwkJZnRyYXBjY190cmFwCQkjIGdyZWF0ZXIgdGhhbj8KK2Z0cmFwY2NfZ3Rfbm86CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLmIJCWZ0cmFwY2NfZ3RfZG9uZQkJIyBubworCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PworCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCitmdHJhcGNjX2d0X2RvbmU6CisJcnRzCQkJCQkjIG5vOyBkbyBub3RoaW5nCisKKyMKKyMgbm90IGdyZWF0ZXIgdGhhbjoKKyMKKyMJTkFOdlp2TgorIworZnRyYXBjY19uZ3Q6CisJZmJuZ3QudwkJZnRyYXBjY19uZ3RfeWVzCQkjIG5vdCBncmVhdGVyIHRoYW4/CitmdHJhcGNjX25ndF9ubzoKKwlydHMJCQkJCSMgZG8gbm90aGluZworZnRyYXBjY19uZ3RfeWVzOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PworCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCisJYnJhLncJCWZ0cmFwY2NfdHJhcAkJIyBubzsgZ28gdGFrZSB0cmFwCisKKyMKKyMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsOgorIwkgICBfX19fXworIwladihOQU52TikKKyMKK2Z0cmFwY2NfZ2U6CisJZmJnZS53CQlmdHJhcGNjX2dlX3llcwkJIyBncmVhdGVyIHRoYW4gb3IgZXF1YWw/CitmdHJhcGNjX2dlX25vOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS5iCQlmdHJhcGNjX2dlX2RvbmUJCSMgbm87IGdvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PworCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCitmdHJhcGNjX2dlX2RvbmU6CisJcnRzCQkJCQkjIG5vOyBkbyBub3RoaW5nCitmdHJhcGNjX2dlX3llczoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEudwkJZnRyYXBjY190cmFwCQkjIG5vOyBnbyB0YWtlIHRyYXAKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBCU1VOIHNldD8KKwlibmUudwkJZnRyYXBjY19ic3VuCQkjIHllcworCWJyYS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAorCisjCisjIG5vdCAoZ3JlYXRlciB0aGFuIG9yIGVxdWFsKToKKyMJICAgICAgIF8KKyMJTkFOdihOXlopCisjCitmdHJhcGNjX25nZToKKwlmYm5nZS53CQlmdHJhcGNjX25nZV95ZXMJCSMgbm90IChncmVhdGVyIHRoYW4gb3IgZXF1YWwpPworZnRyYXBjY19uZ2Vfbm86CisJcnRzCQkJCQkjIGRvIG5vdGhpbmcKK2Z0cmFwY2NfbmdlX3llczoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEudwkJZnRyYXBjY190cmFwCQkjIG5vOyBnbyB0YWtlIHRyYXAKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBCU1VOIHNldD8KKwlibmUudwkJZnRyYXBjY19ic3VuCQkjIHllcworCWJyYS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAorCisjCisjIGxlc3MgdGhhbjoKKyMJICAgX19fX18KKyMJTl4oTkFOdlopCisjCitmdHJhcGNjX2x0OgorCWZibHQudwkJZnRyYXBjY190cmFwCQkjIGxlc3MgdGhhbj8KK2Z0cmFwY2NfbHRfbm86CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLmIJCWZ0cmFwY2NfbHRfZG9uZQkJIyBubzsgZ28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgQlNVTiBzZXQ/CisJYm5lLncJCWZ0cmFwY2NfYnN1bgkJIyB5ZXMKK2Z0cmFwY2NfbHRfZG9uZToKKwlydHMJCQkJCSMgbm87IGRvIG5vdGhpbmcKKworIworIyBub3QgbGVzcyB0aGFuOgorIwkgICAgICAgXworIwlOQU52KFp2TikKKyMKK2Z0cmFwY2Nfbmx0OgorCWZibmx0LncJCWZ0cmFwY2Nfbmx0X3llcwkJIyBub3QgbGVzcyB0aGFuPworZnRyYXBjY19ubHRfbm86CisJcnRzCQkJCQkjIGRvIG5vdGhpbmcKK2Z0cmFwY2Nfbmx0X3llczoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEudwkJZnRyYXBjY190cmFwCQkjIG5vOyBnbyB0YWtlIHRyYXAKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBCU1VOIHNldD8KKwlibmUudwkJZnRyYXBjY19ic3VuCQkjIHllcworCWJyYS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAorCisjCisjIGxlc3MgdGhhbiBvciBlcXVhbDoKKyMJICAgICBfX18KKyMJWnYoTl5OQU4pCisjCitmdHJhcGNjX2xlOgorCWZibGUudwkJZnRyYXBjY19sZV95ZXMJCSMgbGVzcyB0aGFuIG9yIGVxdWFsPworZnRyYXBjY19sZV9ubzoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEuYgkJZnRyYXBjY19sZV9kb25lCQkjIG5vOyBnbyBmaW5pc2gKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBCU1VOIHNldD8KKwlibmUudwkJZnRyYXBjY19ic3VuCQkjIHllcworZnRyYXBjY19sZV9kb25lOgorCXJ0cwkJCQkJIyBubzsgZG8gbm90aGluZworZnRyYXBjY19sZV95ZXM6CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLncJCWZ0cmFwY2NfdHJhcAkJIyBubzsgZ28gdGFrZSB0cmFwCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgQlNVTiBzZXQ/CisJYm5lLncJCWZ0cmFwY2NfYnN1bgkJIyB5ZXMKKwlicmEudwkJZnRyYXBjY190cmFwCQkjIG5vOyBnbyB0YWtlIHRyYXAKKworIworIyBub3QgKGxlc3MgdGhhbiBvciBlcXVhbCk6CisjCSAgICAgX19fCisjCU5BTnYoTnZaKQorIworZnRyYXBjY19ubGU6CisJZmJubGUudwkJZnRyYXBjY19ubGVfeWVzCQkjIG5vdCAobGVzcyB0aGFuIG9yIGVxdWFsKT8KK2Z0cmFwY2NfbmxlX25vOgorCXJ0cwkJCQkJIyBkbyBub3RoaW5nCitmdHJhcGNjX25sZV95ZXM6CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLncJCWZ0cmFwY2NfdHJhcAkJIyBubzsgZ28gdGFrZSB0cmFwCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgQlNVTiBzZXQ/CisJYm5lLncJCWZ0cmFwY2NfYnN1bgkJIyB5ZXMKKwlicmEudwkJZnRyYXBjY190cmFwCQkjIG5vOyBnbyB0YWtlIHRyYXAKKworIworIyBncmVhdGVyIG9yIGxlc3MgdGhhbjoKKyMJX19fX18KKyMJTkFOdloKKyMKK2Z0cmFwY2NfZ2w6CisJZmJnbC53CQlmdHJhcGNjX3RyYXAJCSMgZ3JlYXRlciBvciBsZXNzIHRoYW4/CitmdHJhcGNjX2dsX25vOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS5iCQlmdHJhcGNjX2dsX2RvbmUJCSMgbm87IGdvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PworCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCitmdHJhcGNjX2dsX2RvbmU6CisJcnRzCQkJCQkjIG5vOyBkbyBub3RoaW5nCisKKyMKKyMgbm90IChncmVhdGVyIG9yIGxlc3MgdGhhbik6CisjCisjCU5BTnZaCisjCitmdHJhcGNjX25nbDoKKwlmYm5nbC53CQlmdHJhcGNjX25nbF95ZXMJCSMgbm90IChncmVhdGVyIG9yIGxlc3MgdGhhbik/CitmdHJhcGNjX25nbF9ubzoKKwlydHMJCQkJCSMgZG8gbm90aGluZworZnRyYXBjY19uZ2xfeWVzOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PworCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCisJYnJhLncJCWZ0cmFwY2NfdHJhcAkJIyBubzsgZ28gdGFrZSB0cmFwCisKKyMKKyMgZ3JlYXRlciwgbGVzcywgb3IgZXF1YWw6CisjCV9fXworIwlOQU4KKyMKK2Z0cmFwY2NfZ2xlOgorCWZiZ2xlLncJCWZ0cmFwY2NfdHJhcAkJIyBncmVhdGVyLCBsZXNzLCBvciBlcXVhbD8KK2Z0cmFwY2NfZ2xlX25vOgorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PworCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCisJcnRzCQkJCQkjIG5vOyBkbyBub3RoaW5nCisKKyMKKyMgbm90IChncmVhdGVyLCBsZXNzLCBvciBlcXVhbCk6CisjCisjCU5BTgorIworZnRyYXBjY19uZ2xlOgorCWZibmdsZS53CWZ0cmFwY2NfbmdsZV95ZXMJIyBub3QgKGdyZWF0ZXIsIGxlc3MsIG9yIGVxdWFsKT8KK2Z0cmFwY2NfbmdsZV9ubzoKKwlydHMJCQkJCSMgZG8gbm90aGluZworZnRyYXBjY19uZ2xlX3llczoKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBCU1VOIHNldD8KKwlibmUudwkJZnRyYXBjY19ic3VuCQkjIHllcworCWJyYS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCQkJCQkJCQkJIworIyBNaXNjZWxsYW5lb3VzIHRlc3RzCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEZvciB0aGUgSUVFRSBhd2FyZSB0ZXN0cywgd2Ugb25seSBoYXZlIHRvIHNldCB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZQkjCisjIGZsb2F0aW5nIHBvaW50IGNvbmRpdGlvbiBjb2Rlcy4gVGhlIEJTVU4gZXhjZXB0aW9uIHdpbGwgbm90IGJlCSMKKyMgc2V0IGZvciBhbnkgb2YgdGhlc2UgdGVzdHMuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBmYWxzZToKKyMKKyMJRmFsc2UKKyMKK2Z0cmFwY2NfZjoKKwlydHMJCQkJCSMgZG8gbm90aGluZworCisjCisjIHRydWU6CisjCisjCVRydWUKKyMKK2Z0cmFwY2NfdDoKKwlicmEudwkJZnRyYXBjY190cmFwCQkjIGdvIHRha2UgdHJhcAorCisjCisjIHNpZ25hbGxpbmcgZmFsc2U6CisjCisjCUZhbHNlCisjCitmdHJhcGNjX3NmOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBzZXQgQlNVTiBleGMgYml0CisJYmVxLmIJCWZ0cmFwY2Nfc2ZfZG9uZQkJIyBubzsgZ28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlidHN0CQkmYnN1bl9iaXQsIEZQQ1JfRU5BQkxFKCVhNikgIyB3YXMgQlNVTiBzZXQ/CisJYm5lLncJCWZ0cmFwY2NfYnN1bgkJIyB5ZXMKK2Z0cmFwY2Nfc2ZfZG9uZToKKwlydHMJCQkJCSMgbm87IGRvIG5vdGhpbmcKKworIworIyBzaWduYWxsaW5nIHRydWU6CisjCisjCVRydWUKKyMKK2Z0cmFwY2Nfc3Q6CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIHNldCBCU1VOIGV4YyBiaXQKKwliZXEudwkJZnRyYXBjY190cmFwCQkjIG5vOyBnbyB0YWtlIHRyYXAKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBCU1VOIHNldD8KKwlibmUudwkJZnRyYXBjY19ic3VuCQkjIHllcworCWJyYS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAorCisjCisjIHNpZ25hbGxpbmcgZXF1YWw6CisjCisjCVoKKyMKK2Z0cmFwY2Nfc2VxOgorCWZic2VxLncJCWZ0cmFwY2Nfc2VxX3llcwkJIyBzaWduYWxsaW5nIGVxdWFsPworZnRyYXBjY19zZXFfbm86CisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIHNldCBCU1VOIGV4YyBiaXQKKwliZXEudwkJZnRyYXBjY19zZXFfZG9uZQkjIG5vOyBnbyBmaW5pc2gKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJ0c3QJCSZic3VuX2JpdCwgRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBCU1VOIHNldD8KKwlibmUudwkJZnRyYXBjY19ic3VuCQkjIHllcworZnRyYXBjY19zZXFfZG9uZToKKwlydHMJCQkJCSMgbm87IGRvIG5vdGhpbmcKK2Z0cmFwY2Nfc2VxX3llczoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgc2V0IEJTVU4gZXhjIGJpdAorCWJlcS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PworCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCisJYnJhLncJCWZ0cmFwY2NfdHJhcAkJIyBubzsgZ28gdGFrZSB0cmFwCisKKyMKKyMgc2lnbmFsbGluZyBub3QgZXF1YWw6CisjCV8KKyMJWgorIworZnRyYXBjY19zbmVxOgorCWZic25lcS53CWZ0cmFwY2Nfc25lcV95ZXMJIyBzaWduYWxsaW5nIGVxdWFsPworZnRyYXBjY19zbmVxX25vOgorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBzZXQgQlNVTiBleGMgYml0CisJYmVxLncJCWZ0cmFwY2Nfc25lcV9ub19kb25lCSMgbm87IGdvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PworCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCitmdHJhcGNjX3NuZXFfbm9fZG9uZToKKwlydHMJCQkJCSMgZG8gbm90aGluZworZnRyYXBjY19zbmVxX3llczoKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgc2V0IEJTVU4gZXhjIGJpdAorCWJlcS53CQlmdHJhcGNjX3RyYXAJCSMgbm87IGdvIHRha2UgdHJhcAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnRzdAkJJmJzdW5fYml0LCBGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PworCWJuZS53CQlmdHJhcGNjX2JzdW4JCSMgeWVzCisJYnJhLncJCWZ0cmFwY2NfdHJhcAkJIyBubzsgZ28gdGFrZSB0cmFwCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJCQkJCQkJCQkjCisjIElFRUUgQXdhcmUgdGVzdHMJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgRm9yIHRoZSBJRUVFIGF3YXJlIHRlc3RzLCB3ZSBvbmx5IGhhdmUgdG8gc2V0IHRoZSByZXN1bHQgYmFzZWQgb24gdGhlCSMKKyMgZmxvYXRpbmcgcG9pbnQgY29uZGl0aW9uIGNvZGVzLiBUaGUgQlNVTiBleGNlcHRpb24gd2lsbCBub3QgYmUJIworIyBzZXQgZm9yIGFueSBvZiB0aGVzZSB0ZXN0cy4JCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIG9yZGVyZWQgZ3JlYXRlciB0aGFuOgorIwlfX19fX19fCisjCU5BTnZadk4KKyMKK2Z0cmFwY2Nfb2d0OgorCWZib2d0LncJCWZ0cmFwY2NfdHJhcAkJIyBvcmRlcmVkIGdyZWF0ZXIgdGhhbj8KK2Z0cmFwY2Nfb2d0X25vOgorCXJ0cwkJCQkJIyBkbyBub3RoaW5nCisKKyMKKyMgdW5vcmRlcmVkIG9yIGxlc3Mgb3IgZXF1YWw6CisjCV9fX19fX18KKyMJTkFOdlp2TgorIworZnRyYXBjY191bGU6CisJZmJ1bGUudwkJZnRyYXBjY190cmFwCQkjIHVub3JkZXJlZCBvciBsZXNzIG9yIGVxdWFsPworZnRyYXBjY191bGVfbm86CisJcnRzCQkJCQkjIGRvIG5vdGhpbmcKKworIworIyBvcmRlcmVkIGdyZWF0ZXIgdGhhbiBvciBlcXVhbDoKKyMJICAgX19fX18KKyMJWnYoTkFOdk4pCisjCitmdHJhcGNjX29nZToKKwlmYm9nZS53CQlmdHJhcGNjX3RyYXAJCSMgb3JkZXJlZCBncmVhdGVyIHRoYW4gb3IgZXF1YWw/CitmdHJhcGNjX29nZV9ubzoKKwlydHMJCQkJCSMgZG8gbm90aGluZworCisjCisjIHVub3JkZXJlZCBvciBsZXNzIHRoYW46CisjCSAgICAgICBfCisjCU5BTnYoTl5aKQorIworZnRyYXBjY191bHQ6CisJZmJ1bHQudwkJZnRyYXBjY190cmFwCQkjIHVub3JkZXJlZCBvciBsZXNzIHRoYW4/CitmdHJhcGNjX3VsdF9ubzoKKwlydHMJCQkJCSMgZG8gbm90aGluZworCisjCisjIG9yZGVyZWQgbGVzcyB0aGFuOgorIwkgICBfX19fXworIwlOXihOQU52WikKKyMKK2Z0cmFwY2Nfb2x0OgorCWZib2x0LncJCWZ0cmFwY2NfdHJhcAkJIyBvcmRlcmVkIGxlc3MgdGhhbj8KK2Z0cmFwY2Nfb2x0X25vOgorCXJ0cwkJCQkJIyBkbyBub3RoaW5nCisKKyMKKyMgdW5vcmRlcmVkIG9yIGdyZWF0ZXIgb3IgZXF1YWw6CisjCisjCU5BTnZadk4KKyMKK2Z0cmFwY2NfdWdlOgorCWZidWdlLncJCWZ0cmFwY2NfdHJhcAkJIyB1bm9yZGVyZWQgb3IgZ3JlYXRlciB0aGFuPworZnRyYXBjY191Z2Vfbm86CisJcnRzCQkJCQkjIGRvIG5vdGhpbmcKKworIworIyBvcmRlcmVkIGxlc3MgdGhhbiBvciBlcXVhbDoKKyMJICAgICBfX18KKyMJWnYoTl5OQU4pCisjCitmdHJhcGNjX29sZToKKwlmYm9sZS53CQlmdHJhcGNjX3RyYXAJCSMgb3JkZXJlZCBncmVhdGVyIG9yIGxlc3MgdGhhbj8KK2Z0cmFwY2Nfb2xlX25vOgorCXJ0cwkJCQkJIyBkbyBub3RoaW5nCisKKyMKKyMgdW5vcmRlcmVkIG9yIGdyZWF0ZXIgdGhhbjoKKyMJICAgICBfX18KKyMJTkFOdihOdlopCisjCitmdHJhcGNjX3VndDoKKwlmYnVndC53CQlmdHJhcGNjX3RyYXAJCSMgdW5vcmRlcmVkIG9yIGdyZWF0ZXIgdGhhbj8KK2Z0cmFwY2NfdWd0X25vOgorCXJ0cwkJCQkJIyBkbyBub3RoaW5nCisKKyMKKyMgb3JkZXJlZCBncmVhdGVyIG9yIGxlc3MgdGhhbjoKKyMJX19fX18KKyMJTkFOdloKKyMKK2Z0cmFwY2Nfb2dsOgorCWZib2dsLncJCWZ0cmFwY2NfdHJhcAkJIyBvcmRlcmVkIGdyZWF0ZXIgb3IgbGVzcyB0aGFuPworZnRyYXBjY19vZ2xfbm86CisJcnRzCQkJCQkjIGRvIG5vdGhpbmcKKworIworIyB1bm9yZGVyZWQgb3IgZXF1YWw6CisjCisjCU5BTnZaCisjCitmdHJhcGNjX3VlcToKKwlmYnVlcS53CQlmdHJhcGNjX3RyYXAJCSMgdW5vcmRlcmVkIG9yIGVxdWFsPworZnRyYXBjY191ZXFfbm86CisJcnRzCQkJCQkjIGRvIG5vdGhpbmcKKworIworIyBvcmRlcmVkOgorIwlfX18KKyMJTkFOCisjCitmdHJhcGNjX29yOgorCWZib3IudwkJZnRyYXBjY190cmFwCQkjIG9yZGVyZWQ/CitmdHJhcGNjX29yX25vOgorCXJ0cwkJCQkJIyBkbyBub3RoaW5nCisKKyMKKyMgdW5vcmRlcmVkOgorIworIwlOQU4KKyMKK2Z0cmFwY2NfdW46CisJZmJ1bi53CQlmdHJhcGNjX3RyYXAJCSMgdW5vcmRlcmVkPworZnRyYXBjY191bl9ubzoKKwlydHMJCQkJCSMgZG8gbm90aGluZworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIHRoZSBic3VuIGV4Y2VwdGlvbiBiaXQgd2FzIG5vdCBzZXQuCisjIHdlIHdpbGwgbmVlZCB0byBqdW1wIHRvIHRoZSBmdHJhcGNjIHZlY3Rvci4gdGhlIHN0YWNrIGZyYW1lCisjIGlzIHRoZSBzYW1lIHNpemUgYXMgdGhhdCBvZiB0aGUgZnAgdW5pbXAgaW5zdHJ1Y3Rpb24uIHRoZQorIyBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgPGVhPiBmaWVsZCBzaG91bGQgaG9sZCB0aGUgUEMKKyMgb2YgdGhlIGZ0cmFwY2MgaW5zdHJ1Y3Rpb24gYW5kIHRoZSB2ZWN0b3Igb2Zmc2V0IGZpZWxkCisjIHNob3VsZCBkZW5vdGUgdGhlIGZ0cmFwY2MgdHJhcC4KK2Z0cmFwY2NfdHJhcDoKKwltb3YuYgkJJmZ0cmFwY2NfZmxnLFNQQ09ORF9GTEcoJWE2KQorCXJ0cworCisjIHRoZSBlbXVsYXRpb24gcm91dGluZSBzZXQgYnN1biBhbmQgQlNVTiB3YXMgZW5hYmxlZC4gaGF2ZSB0bworIyBmaXggc3RhY2sgYW5kIGp1bXAgdG8gdGhlIGJzdW4gaGFuZGxlci4KKyMgbGV0IHRoZSBjYWxsZXIgb2YgdGhpcyByb3V0aW5lIHNoaWZ0IHRoZSBzdGFjayBmcmFtZSB1cCB0bworIyBlbGltaW5hdGUgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzIGZpZWxkLgorZnRyYXBjY19ic3VuOgorCW1vdi5iCQkmZmJzdW5fZmxnLFNQQ09ORF9GTEcoJWE2KQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGZzY2MoKTogcm91dGluZSB0byBlbXVsYXRlIHRoZSBmc2NjIGluc3RydWN0aW9uCQkJIworIwkJCQkJCQkJCSMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJX2ZzY2MoKQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJc3RvcmVfZHJlZ19iKCkgLSBzdG9yZSByZXN1bHQgdG8gZGF0YSByZWdpc3RlciBmaWxlCQkjCisjCWRlY19hcmVnKCkgLSBkZWNyZW1lbnQgYW4gYXJlZyBmb3IgLShhbikgbW9kZQkJCSMKKyMJaW5jX2FyZWcoKSAtIGluY3JlbWVudCBhbiBhcmVnIGZvciAoYW4pKyBtb2RlCQkJIworIwlfZG1lbV93cml0ZV9ieXRlKCkgLSBzdG9yZSByZXN1bHQgdG8gbWVtb3J5CQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJbm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJbm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhpcyByb3V0aW5lIGNoZWNrcyB3aGljaCBjb25kaXRpb25hbCBwcmVkaWNhdGUgaXMgc3BlY2lmaWVkIGJ5CSMKKyMgdGhlIHN0YWNrZWQgZnNjYyBpbnN0cnVjdGlvbiBvcGNvZGUgYW5kIHRoZW4gYnJhbmNoZXMgdG8gYSByb3V0aW5lCSMKKyMgZm9yIHRoYXQgcHJlZGljYXRlLiBUaGUgY29ycmVzcG9uZGluZyBmYmNjIGluc3RydWN0aW9uIGlzIHRoZW4gdXNlZAkjCisjIHRvIHNlZSB3aGV0aGVyIHRoZSBjb25kaXRpb24gKHNwZWNpZmllZCBieSB0aGUgc3RhY2tlZCBGUFNSKSBpcyB0cnVlCSMKKyMgb3IgZmFsc2UuCQkJCQkJCQkjCisjCUlmIGEgQlNVTiBleGNlcHRpb24gc2hvdWxkIGJlIGluZGljYXRlZCwgdGhlIEJTVU4gYW5kIEFCU1VOCSMKKyMgYml0cyBhcmUgc2V0IGluIHRoZSBzdGFja2VkIEZQU1IuIElmIHRoZSBCU1VOIGV4Y2VwdGlvbiBpcyBlbmFibGVkLAkjCisjIHRoZSBmYnN1bl9mbGcgaXMgc2V0IGluIHRoZSBTUENPTkRfRkxHIGxvY2F0aW9uIG9uIHRoZSBzdGFjay4gSWYgYW4JIworIyBlbmFibGVkIEJTVU4gc2hvdWxkIG5vdCBiZSBmbGFnZ2VkIGFuZCB0aGUgcHJlZGljYXRlIGlzIHRydWUsIHRoZW4JIworIyB0aGUgcmVzdWx0IGlzIHN0b3JlZCB0byB0aGUgZGF0YSByZWdpc3RlciBmaWxlIG9yIG1lbW9yeQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2ZzY2MKK19mc2NjOgorCW1vdi53CQlFWENfQ01EUkVHKCVhNiksJWQwCSMgZmV0Y2ggcHJlZGljYXRlCisKKwljbHIubAkJJWQxCQkJIyBjbGVhciBzY3JhdGNoIHJlZworCW1vdi5iCQlGUFNSX0NDKCVhNiksJWQxCSMgZmV0Y2ggZnAgY2NvZGVzCisJcm9yLmwJCSYweDgsJWQxCQkjIHJvdGF0ZSB0byB0b3AgYnl0ZQorCWZtb3YubAkJJWQxLCVmcHNyCQkjIGluc2VydCBpbnRvIEZQU1IKKworCW1vdi53CQkodGJsX2ZzY2MuYiwlcGMsJWQwLncqMiksJWQxICMgbG9hZCB0YWJsZQorCWptcAkJKHRibF9mc2NjLmIsJXBjLCVkMS53KQkjIGp1bXAgdG8gZnNjYyByb3V0aW5lCisKK3RibF9mc2NjOgorCXNob3J0CQlmc2NjX2YJCS0JdGJsX2ZzY2MJIyAwMAorCXNob3J0CQlmc2NjX2VxCQktCXRibF9mc2NjCSMgMDEKKwlzaG9ydAkJZnNjY19vZ3QJLQl0YmxfZnNjYwkjIDAyCisJc2hvcnQJCWZzY2Nfb2dlCS0JdGJsX2ZzY2MJIyAwMworCXNob3J0CQlmc2NjX29sdAktCXRibF9mc2NjCSMgMDQKKwlzaG9ydAkJZnNjY19vbGUJLQl0YmxfZnNjYwkjIDA1CisJc2hvcnQJCWZzY2Nfb2dsCS0JdGJsX2ZzY2MJIyAwNgorCXNob3J0CQlmc2NjX29yCQktCXRibF9mc2NjCSMgMDcKKwlzaG9ydAkJZnNjY191bgkJLQl0YmxfZnNjYwkjIDA4CisJc2hvcnQJCWZzY2NfdWVxCS0JdGJsX2ZzY2MJIyAwOQorCXNob3J0CQlmc2NjX3VndAktCXRibF9mc2NjCSMgMTAKKwlzaG9ydAkJZnNjY191Z2UJLQl0YmxfZnNjYwkjIDExCisJc2hvcnQJCWZzY2NfdWx0CS0JdGJsX2ZzY2MJIyAxMgorCXNob3J0CQlmc2NjX3VsZQktCXRibF9mc2NjCSMgMTMKKwlzaG9ydAkJZnNjY19uZXEJLQl0YmxfZnNjYwkjIDE0CisJc2hvcnQJCWZzY2NfdAkJLQl0YmxfZnNjYwkjIDE1CisJc2hvcnQJCWZzY2Nfc2YJCS0JdGJsX2ZzY2MJIyAxNgorCXNob3J0CQlmc2NjX3NlcQktCXRibF9mc2NjCSMgMTcKKwlzaG9ydAkJZnNjY19ndAkJLQl0YmxfZnNjYwkjIDE4CisJc2hvcnQJCWZzY2NfZ2UJCS0JdGJsX2ZzY2MJIyAxOQorCXNob3J0CQlmc2NjX2x0CQktCXRibF9mc2NjCSMgMjAKKwlzaG9ydAkJZnNjY19sZQkJLQl0YmxfZnNjYwkjIDIxCisJc2hvcnQJCWZzY2NfZ2wJCS0JdGJsX2ZzY2MJIyAyMgorCXNob3J0CQlmc2NjX2dsZQktCXRibF9mc2NjCSMgMjMKKwlzaG9ydAkJZnNjY19uZ2xlCS0JdGJsX2ZzY2MJIyAyNAorCXNob3J0CQlmc2NjX25nbAktCXRibF9mc2NjCSMgMjUKKwlzaG9ydAkJZnNjY19ubGUJLQl0YmxfZnNjYwkjIDI2CisJc2hvcnQJCWZzY2Nfbmx0CS0JdGJsX2ZzY2MJIyAyNworCXNob3J0CQlmc2NjX25nZQktCXRibF9mc2NjCSMgMjgKKwlzaG9ydAkJZnNjY19uZ3QJLQl0YmxfZnNjYwkjIDI5CisJc2hvcnQJCWZzY2Nfc25lcQktCXRibF9mc2NjCSMgMzAKKwlzaG9ydAkJZnNjY19zdAkJLQl0YmxfZnNjYwkjIDMxCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJCQkJCQkJCQkjCisjIElFRUUgTm9uYXdhcmUgdGVzdHMJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgRm9yIHRoZSBJRUVFIG5vbmF3YXJlIHRlc3RzLCB3ZSBzZXQgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGUJCSMKKyMgZmxvYXRpbmcgcG9pbnQgY29uZGl0aW9uIGNvZGVzLiBJbiBhZGRpdGlvbiwgd2UgY2hlY2sgdG8gc2VlCQkjCisjIGlmIHRoZSBOQU4gYml0IGlzIHNldCwgaW4gd2hpY2ggY2FzZSBCU1VOIGFuZCBBSU9QIHdpbGwgYmUgc2V0LgkjCisjCQkJCQkJCQkJIworIyBUaGUgY2FzZXMgRVEgYW5kIE5FIGFyZSBzaGFyZWQgYnkgdGhlIEF3YXJlIGFuZCBOb25hd2FyZSBncm91cHMJIworIyBhbmQgYXJlIGluY2FwYWJsZSBvZiBzZXR0aW5nIHRoZSBCU1VOIGV4Y2VwdGlvbiBiaXQuCQkJIworIwkJCQkJCQkJCSMKKyMgVHlwaWNhbGx5LCBvbmx5IG9uZSBvZiB0aGUgdHdvIHBvc3NpYmxlIGJyYW5jaCBkaXJlY3Rpb25zIGNvdWxkCSMKKyMgaGF2ZSB0aGUgTkFOIGJpdCBzZXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgZXF1YWw6CisjCisjCVoKKyMKK2ZzY2NfZXE6CisJZmJlcS53CQlmc2NjX2VxX3llcwkJIyBlcXVhbD8KK2ZzY2NfZXFfbm86CisJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKK2ZzY2NfZXFfeWVzOgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKKworIworIyBub3QgZXF1YWw6CisjCV8KKyMJWgorIworZnNjY19uZXE6CisJZmJuZXEudwkJZnNjY19uZXFfeWVzCQkjIG5vdCBlcXVhbD8KK2ZzY2NfbmVxX25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCitmc2NjX25lcV95ZXM6CisJc3QJCSVkMAkJCSMgc2V0IHRydWUKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorCisjCisjIGdyZWF0ZXIgdGhhbjoKKyMJX19fX19fXworIwlOQU52WnZOCisjCitmc2NjX2d0OgorCWZiZ3QudwkJZnNjY19ndF95ZXMJCSMgZ3JlYXRlciB0aGFuPworZnNjY19ndF9ubzoKKwljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEudwkJZnNjY19kb25lCQkjIG5vO2dvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnJhLncJCWZzY2NfY2hrX2JzdW4JCSMgZ28gZmluaXNoCitmc2NjX2d0X3llczoKKwlzdAkJJWQwCQkJIyBzZXQgdHJ1ZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCisKKyMKKyMgbm90IGdyZWF0ZXIgdGhhbjoKKyMKKyMJTkFOdlp2TgorIworZnNjY19uZ3Q6CisJZmJuZ3QudwkJZnNjY19uZ3RfeWVzCQkjIG5vdCBncmVhdGVyIHRoYW4/Citmc2NjX25ndF9ubzoKKwljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorZnNjY19uZ3RfeWVzOgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLncJCWZzY2NfZG9uZQkJIyBubztnbyBmaW5pc2gKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJyYS53CQlmc2NjX2Noa19ic3VuCQkjIGdvIGZpbmlzaAorCisjCisjIGdyZWF0ZXIgdGhhbiBvciBlcXVhbDoKKyMJICAgX19fX18KKyMJWnYoTkFOdk4pCisjCitmc2NjX2dlOgorCWZiZ2UudwkJZnNjY19nZV95ZXMJCSMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsPworZnNjY19nZV9ubzoKKwljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEudwkJZnNjY19kb25lCQkjIG5vO2dvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnJhLncJCWZzY2NfY2hrX2JzdW4JCSMgZ28gZmluaXNoCitmc2NjX2dlX3llczoKKwlzdAkJJWQwCQkJIyBzZXQgdHJ1ZQorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS53CQlmc2NjX2RvbmUJCSMgbm87Z28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKKworIworIyBub3QgKGdyZWF0ZXIgdGhhbiBvciBlcXVhbCk6CisjCSAgICAgICBfCisjCU5BTnYoTl5aKQorIworZnNjY19uZ2U6CisJZmJuZ2UudwkJZnNjY19uZ2VfeWVzCQkjIG5vdCAoZ3JlYXRlciB0aGFuIG9yIGVxdWFsKT8KK2ZzY2NfbmdlX25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCitmc2NjX25nZV95ZXM6CisJc3QJCSVkMAkJCSMgc2V0IHRydWUKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEudwkJZnNjY19kb25lCQkjIG5vO2dvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnJhLncJCWZzY2NfY2hrX2JzdW4JCSMgZ28gZmluaXNoCisKKyMKKyMgbGVzcyB0aGFuOgorIwkgICBfX19fXworIwlOXihOQU52WikKKyMKK2ZzY2NfbHQ6CisJZmJsdC53CQlmc2NjX2x0X3llcwkJIyBsZXNzIHRoYW4/Citmc2NjX2x0X25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS53CQlmc2NjX2RvbmUJCSMgbm87Z28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKK2ZzY2NfbHRfeWVzOgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKKworIworIyBub3QgbGVzcyB0aGFuOgorIwkgICAgICAgXworIwlOQU52KFp2TikKKyMKK2ZzY2Nfbmx0OgorCWZibmx0LncJCWZzY2Nfbmx0X3llcwkJIyBub3QgbGVzcyB0aGFuPworZnNjY19ubHRfbm86CisJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKK2ZzY2Nfbmx0X3llczoKKwlzdAkJJWQwCQkJIyBzZXQgdHJ1ZQorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBpcyBOQU4gc2V0IGluIGNjPworCWJlcS53CQlmc2NjX2RvbmUJCSMgbm87Z28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKKworIworIyBsZXNzIHRoYW4gb3IgZXF1YWw6CisjCSAgICAgX19fCisjCVp2KE5eTkFOKQorIworZnNjY19sZToKKwlmYmxlLncJCWZzY2NfbGVfeWVzCQkjIGxlc3MgdGhhbiBvciBlcXVhbD8KK2ZzY2NfbGVfbm86CisJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLncJCWZzY2NfZG9uZQkJIyBubztnbyBmaW5pc2gKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJyYS53CQlmc2NjX2Noa19ic3VuCQkjIGdvIGZpbmlzaAorZnNjY19sZV95ZXM6CisJc3QJCSVkMAkJCSMgc2V0IHRydWUKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEudwkJZnNjY19kb25lCQkjIG5vO2dvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnJhLncJCWZzY2NfY2hrX2JzdW4JCSMgZ28gZmluaXNoCisKKyMKKyMgbm90IChsZXNzIHRoYW4gb3IgZXF1YWwpOgorIwkgICAgIF9fXworIwlOQU52KE52WikKKyMKK2ZzY2NfbmxlOgorCWZibmxlLncJCWZzY2NfbmxlX3llcwkJIyBub3QgKGxlc3MgdGhhbiBvciBlcXVhbCk/Citmc2NjX25sZV9ubzoKKwljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorZnNjY19ubGVfeWVzOgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLncJCWZzY2NfZG9uZQkJIyBubztnbyBmaW5pc2gKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJyYS53CQlmc2NjX2Noa19ic3VuCQkjIGdvIGZpbmlzaAorCisjCisjIGdyZWF0ZXIgb3IgbGVzcyB0aGFuOgorIwlfX19fXworIwlOQU52WgorIworZnNjY19nbDoKKwlmYmdsLncJCWZzY2NfZ2xfeWVzCQkjIGdyZWF0ZXIgb3IgbGVzcyB0aGFuPworZnNjY19nbF9ubzoKKwljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgaXMgTkFOIHNldCBpbiBjYz8KKwliZXEudwkJZnNjY19kb25lCQkjIG5vO2dvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnJhLncJCWZzY2NfY2hrX2JzdW4JCSMgZ28gZmluaXNoCitmc2NjX2dsX3llczoKKwlzdAkJJWQwCQkJIyBzZXQgdHJ1ZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCisKKyMKKyMgbm90IChncmVhdGVyIG9yIGxlc3MgdGhhbik6CisjCisjCU5BTnZaCisjCitmc2NjX25nbDoKKwlmYm5nbC53CQlmc2NjX25nbF95ZXMJCSMgbm90IChncmVhdGVyIG9yIGxlc3MgdGhhbik/Citmc2NjX25nbF9ubzoKKwljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorZnNjY19uZ2xfeWVzOgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIGlzIE5BTiBzZXQgaW4gY2M/CisJYmVxLncJCWZzY2NfZG9uZQkJIyBubztnbyBmaW5pc2gKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJyYS53CQlmc2NjX2Noa19ic3VuCQkjIGdvIGZpbmlzaAorCisjCisjIGdyZWF0ZXIsIGxlc3MsIG9yIGVxdWFsOgorIwlfX18KKyMJTkFOCisjCitmc2NjX2dsZToKKwlmYmdsZS53CQlmc2NjX2dsZV95ZXMJCSMgZ3JlYXRlciwgbGVzcywgb3IgZXF1YWw/Citmc2NjX2dsZV9ubzoKKwljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJyYS53CQlmc2NjX2Noa19ic3VuCQkjIGdvIGZpbmlzaAorZnNjY19nbGVfeWVzOgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKKworIworIyBub3QgKGdyZWF0ZXIsIGxlc3MsIG9yIGVxdWFsKToKKyMKKyMJTkFOCisjCitmc2NjX25nbGU6CisJZmJuZ2xlLncJCWZzY2NfbmdsZV95ZXMJIyBub3QgKGdyZWF0ZXIsIGxlc3MsIG9yIGVxdWFsKT8KK2ZzY2NfbmdsZV9ubzoKKwljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorZnNjY19uZ2xlX3llczoKKwlzdAkJJWQwCQkJIyBzZXQgdHJ1ZQorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnJhLncJCWZzY2NfY2hrX2JzdW4JCSMgZ28gZmluaXNoCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJCQkJCQkJCQkjCisjIE1pc2NlbGxhbmVvdXMgdGVzdHMJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgRm9yIHRoZSBJRUVFIGF3YXJlIHRlc3RzLCB3ZSBvbmx5IGhhdmUgdG8gc2V0IHRoZSByZXN1bHQgYmFzZWQgb24gdGhlCSMKKyMgZmxvYXRpbmcgcG9pbnQgY29uZGl0aW9uIGNvZGVzLiBUaGUgQlNVTiBleGNlcHRpb24gd2lsbCBub3QgYmUJIworIyBzZXQgZm9yIGFueSBvZiB0aGVzZSB0ZXN0cy4JCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIGZhbHNlOgorIworIwlGYWxzZQorIworZnNjY19mOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCisKKyMKKyMgdHJ1ZToKKyMKKyMJVHJ1ZQorIworZnNjY190OgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKKworIworIyBzaWduYWxsaW5nIGZhbHNlOgorIworIwlGYWxzZQorIworZnNjY19zZjoKKwljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgc2V0IEJTVU4gZXhjIGJpdAorCWJlcS53CQlmc2NjX2RvbmUJCSMgbm87Z28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKKworIworIyBzaWduYWxsaW5nIHRydWU6CisjCisjCVRydWUKKyMKK2ZzY2Nfc3Q6CisJc3QJCSVkMAkJCSMgc2V0IGZhbHNlCisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIHNldCBCU1VOIGV4YyBiaXQKKwliZXEudwkJZnNjY19kb25lCQkjIG5vO2dvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnJhLncJCWZzY2NfY2hrX2JzdW4JCSMgZ28gZmluaXNoCisKKyMKKyMgc2lnbmFsbGluZyBlcXVhbDoKKyMKKyMJWgorIworZnNjY19zZXE6CisJZmJzZXEudwkJZnNjY19zZXFfeWVzCQkjIHNpZ25hbGxpbmcgZXF1YWw/Citmc2NjX3NlcV9ubzoKKwljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKKwlidHN0CQkmbmFuX2JpdCwgRlBTUl9DQyglYTYpCSMgc2V0IEJTVU4gZXhjIGJpdAorCWJlcS53CQlmc2NjX2RvbmUJCSMgbm87Z28gZmluaXNoCisJb3JpLmwJCSZic3VuX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBCU1VOIGV4YyBiaXQKKwlicmEudwkJZnNjY19jaGtfYnN1bgkJIyBnbyBmaW5pc2gKK2ZzY2Nfc2VxX3llczoKKwlzdAkJJWQwCQkJIyBzZXQgdHJ1ZQorCWJ0c3QJCSZuYW5fYml0LCBGUFNSX0NDKCVhNikJIyBzZXQgQlNVTiBleGMgYml0CisJYmVxLncJCWZzY2NfZG9uZQkJIyBubztnbyBmaW5pc2gKKwlvcmkubAkJJmJzdW5fbWFzaythaW9wX21hc2ssIFVTRVJfRlBTUiglYTYpICMgc2V0IEJTVU4gZXhjIGJpdAorCWJyYS53CQlmc2NjX2Noa19ic3VuCQkjIGdvIGZpbmlzaAorCisjCisjIHNpZ25hbGxpbmcgbm90IGVxdWFsOgorIwlfCisjCVoKKyMKK2ZzY2Nfc25lcToKKwlmYnNuZXEudwlmc2NjX3NuZXFfeWVzCQkjIHNpZ25hbGxpbmcgZXF1YWw/Citmc2NjX3NuZXFfbm86CisJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIHNldCBCU1VOIGV4YyBiaXQKKwliZXEudwkJZnNjY19kb25lCQkjIG5vO2dvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnJhLncJCWZzY2NfY2hrX2JzdW4JCSMgZ28gZmluaXNoCitmc2NjX3NuZXFfeWVzOgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJYnRzdAkJJm5hbl9iaXQsIEZQU1JfQ0MoJWE2KQkjIHNldCBCU1VOIGV4YyBiaXQKKwliZXEudwkJZnNjY19kb25lCQkjIG5vO2dvIGZpbmlzaAorCW9yaS5sCQkmYnN1bl9tYXNrK2Fpb3BfbWFzaywgVVNFUl9GUFNSKCVhNikgIyBzZXQgQlNVTiBleGMgYml0CisJYnJhLncJCWZzY2NfY2hrX2JzdW4JCSMgZ28gZmluaXNoCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJCQkJCQkJCQkjCisjIElFRUUgQXdhcmUgdGVzdHMJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgRm9yIHRoZSBJRUVFIGF3YXJlIHRlc3RzLCB3ZSBvbmx5IGhhdmUgdG8gc2V0IHRoZSByZXN1bHQgYmFzZWQgb24gdGhlCSMKKyMgZmxvYXRpbmcgcG9pbnQgY29uZGl0aW9uIGNvZGVzLiBUaGUgQlNVTiBleGNlcHRpb24gd2lsbCBub3QgYmUJIworIyBzZXQgZm9yIGFueSBvZiB0aGVzZSB0ZXN0cy4JCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIG9yZGVyZWQgZ3JlYXRlciB0aGFuOgorIwlfX19fX19fCisjCU5BTnZadk4KKyMKK2ZzY2Nfb2d0OgorCWZib2d0LncJCWZzY2Nfb2d0X3llcwkJIyBvcmRlcmVkIGdyZWF0ZXIgdGhhbj8KK2ZzY2Nfb2d0X25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCitmc2NjX29ndF95ZXM6CisJc3QJCSVkMAkJCSMgc2V0IHRydWUKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorCisjCisjIHVub3JkZXJlZCBvciBsZXNzIG9yIGVxdWFsOgorIwlfX19fX19fCisjCU5BTnZadk4KKyMKK2ZzY2NfdWxlOgorCWZidWxlLncJCWZzY2NfdWxlX3llcwkJIyB1bm9yZGVyZWQgb3IgbGVzcyBvciBlcXVhbD8KK2ZzY2NfdWxlX25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCitmc2NjX3VsZV95ZXM6CisJc3QJCSVkMAkJCSMgc2V0IHRydWUKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorCisjCisjIG9yZGVyZWQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsOgorIwkgICBfX19fXworIwladihOQU52TikKKyMKK2ZzY2Nfb2dlOgorCWZib2dlLncJCWZzY2Nfb2dlX3llcwkJIyBvcmRlcmVkIGdyZWF0ZXIgdGhhbiBvciBlcXVhbD8KK2ZzY2Nfb2dlX25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCitmc2NjX29nZV95ZXM6CisJc3QJCSVkMAkJCSMgc2V0IHRydWUKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorCisjCisjIHVub3JkZXJlZCBvciBsZXNzIHRoYW46CisjCSAgICAgICBfCisjCU5BTnYoTl5aKQorIworZnNjY191bHQ6CisJZmJ1bHQudwkJZnNjY191bHRfeWVzCQkjIHVub3JkZXJlZCBvciBsZXNzIHRoYW4/Citmc2NjX3VsdF9ubzoKKwljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorZnNjY191bHRfeWVzOgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKKworIworIyBvcmRlcmVkIGxlc3MgdGhhbjoKKyMJICAgX19fX18KKyMJTl4oTkFOdlopCisjCitmc2NjX29sdDoKKwlmYm9sdC53CQlmc2NjX29sdF95ZXMJCSMgb3JkZXJlZCBsZXNzIHRoYW4/Citmc2NjX29sdF9ubzoKKwljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorZnNjY19vbHRfeWVzOgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKKworIworIyB1bm9yZGVyZWQgb3IgZ3JlYXRlciBvciBlcXVhbDoKKyMKKyMJTkFOdlp2TgorIworZnNjY191Z2U6CisJZmJ1Z2UudwkJZnNjY191Z2VfeWVzCQkjIHVub3JkZXJlZCBvciBncmVhdGVyIHRoYW4/Citmc2NjX3VnZV9ubzoKKwljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorZnNjY191Z2VfeWVzOgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKKworIworIyBvcmRlcmVkIGxlc3MgdGhhbiBvciBlcXVhbDoKKyMJICAgICBfX18KKyMJWnYoTl5OQU4pCisjCitmc2NjX29sZToKKwlmYm9sZS53CQlmc2NjX29sZV95ZXMJCSMgb3JkZXJlZCBncmVhdGVyIG9yIGxlc3MgdGhhbj8KK2ZzY2Nfb2xlX25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCitmc2NjX29sZV95ZXM6CisJc3QJCSVkMAkJCSMgc2V0IHRydWUKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorCisjCisjIHVub3JkZXJlZCBvciBncmVhdGVyIHRoYW46CisjCSAgICAgX19fCisjCU5BTnYoTnZaKQorIworZnNjY191Z3Q6CisJZmJ1Z3QudwkJZnNjY191Z3RfeWVzCQkjIHVub3JkZXJlZCBvciBncmVhdGVyIHRoYW4/Citmc2NjX3VndF9ubzoKKwljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorZnNjY191Z3RfeWVzOgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKKworIworIyBvcmRlcmVkIGdyZWF0ZXIgb3IgbGVzcyB0aGFuOgorIwlfX19fXworIwlOQU52WgorIworZnNjY19vZ2w6CisJZmJvZ2wudwkJZnNjY19vZ2xfeWVzCQkjIG9yZGVyZWQgZ3JlYXRlciBvciBsZXNzIHRoYW4/Citmc2NjX29nbF9ubzoKKwljbHIuYgkJJWQwCQkJIyBzZXQgZmFsc2UKKwlicmEudwkJZnNjY19kb25lCQkjIGdvIGZpbmlzaAorZnNjY19vZ2xfeWVzOgorCXN0CQklZDAJCQkjIHNldCB0cnVlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKKworIworIyB1bm9yZGVyZWQgb3IgZXF1YWw6CisjCisjCU5BTnZaCisjCitmc2NjX3VlcToKKwlmYnVlcS53CQlmc2NjX3VlcV95ZXMJCSMgdW5vcmRlcmVkIG9yIGVxdWFsPworZnNjY191ZXFfbm86CisJY2xyLmIJCSVkMAkJCSMgc2V0IGZhbHNlCisJYnJhLncJCWZzY2NfZG9uZQkJIyBnbyBmaW5pc2gKK2ZzY2NfdWVxX3llczoKKwlzdAkJJWQwCQkJIyBzZXQgdHJ1ZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCisKKyMKKyMgb3JkZXJlZDoKKyMJX19fCisjCU5BTgorIworZnNjY19vcjoKKwlmYm9yLncJCWZzY2Nfb3JfeWVzCQkjIG9yZGVyZWQ/Citmc2NjX29yX25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCitmc2NjX29yX3llczoKKwlzdAkJJWQwCQkJIyBzZXQgdHJ1ZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCisKKyMKKyMgdW5vcmRlcmVkOgorIworIwlOQU4KKyMKK2ZzY2NfdW46CisJZmJ1bi53CQlmc2NjX3VuX3llcwkJIyB1bm9yZGVyZWQ/Citmc2NjX3VuX25vOgorCWNsci5iCQklZDAJCQkjIHNldCBmYWxzZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCitmc2NjX3VuX3llczoKKwlzdAkJJWQwCQkJIyBzZXQgdHJ1ZQorCWJyYS53CQlmc2NjX2RvbmUJCSMgZ28gZmluaXNoCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgdGhlIGJzdW4gZXhjZXB0aW9uIGJpdCB3YXMgc2V0LiBub3csIGNoZWNrIHRvIHNlZSBpcyBCU1VOCisjIGlzIGVuYWJsZWQuIGlmIHNvLCBkb24ndCBzdG9yZSByZXN1bHQgYW5kIGNvcnJlY3Qgc3RhY2sgZnJhbWUKKyMgZm9yIGEgYnN1biBleGNlcHRpb24uCisjCitmc2NjX2Noa19ic3VuOgorCWJ0c3QJCSZic3VuX2JpdCxGUENSX0VOQUJMRSglYTYpICMgd2FzIEJTVU4gc2V0PworCWJuZS53CQlmc2NjX2JzdW4KKworIworIyB0aGUgYnN1biBleGNlcHRpb24gYml0IHdhcyBub3Qgc2V0LgorIyB0aGUgcmVzdWx0IGhhcyBiZWVuIHNlbGVjdGVkLgorIyBub3csIGNoZWNrIHRvIHNlZSBpZiB0aGUgcmVzdWx0IGlzIHRvIGJlIHN0b3JlZCBpbiB0aGUgZGF0YSByZWdpc3RlcgorIyBmaWxlIG9yIGluIG1lbW9yeS4KKyMKK2ZzY2NfZG9uZToKKwltb3YubAkJJWQwLCVhMAkJCSMgc2F2ZSByZXN1bHQgZm9yIGEgbW9tZW50CisKKwltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZmV0Y2ggbG8gb3B3b3JkCisJbW92LmwJCSVkMSwlZDAJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5iCQkmMHgzOCwlZDEJCSMgZXh0cmFjdCBzcmMgbW9kZQorCisJYm5lLmIJCWZzY2NfbWVtX29wCQkjIGl0J3MgYSBtZW1vcnkgb3BlcmF0aW9uCisKKwltb3YubAkJJWQwLCVkMQorCWFuZGkudwkJJjB4NywlZDEJCSMgcGFzcyBpbmRleCBpbiBkMQorCW1vdi5sCQklYTAsJWQwCQkJIyBwYXNzIHJlc3VsdCBpbiBkMAorCWJzci5sCQlzdG9yZV9kcmVnX2IJCSMgc2F2ZSByZXN1bHQgaW4gcmVnZmlsZQorCXJ0cworCisjCisjIHRoZSBzdGFja2VkIDxlYT4gaXMgY29ycmVjdCB3aXRoIHRoZSBleGNlcHRpb24gb2Y6CisjCS0+IERuIDogPGVhPiBpcyBnYXJiYWdlCisjCisjIGlmIHRoZSBhZGRyZXNzaW5nIG1vZGUgaXMgcG9zdC1pbmNyZW1lbnQgb3IgcHJlLWRlY3JlbWVudCwKKyMgdGhlbiB0aGUgYWRkcmVzcyByZWdpc3RlcnMgaGF2ZSBub3QgYmVlbiB1cGRhdGVkLgorIworZnNjY19tZW1fb3A6CisJY21waS5iCQklZDEsJjB4MTgJCSMgaXMgPGVhPiAoQW4pKyA/CisJYmVxLmIJCWZzY2NfbWVtX2luYwkJIyB5ZXMKKwljbXBpLmIJCSVkMSwmMHgyMAkJIyBpcyA8ZWE+IC0oQW4pID8KKwliZXEuYgkJZnNjY19tZW1fZGVjCQkjIHllcworCisJbW92LmwJCSVhMCwlZDAJCQkjIHBhc3MgcmVzdWx0IGluIGQwCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBmZXRjaCA8ZWE+CisJYnNyLmwJCV9kbWVtX3dyaXRlX2J5dGUJIyB3cml0ZSByZXN1bHQgYnl0ZQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS53CQlmc2NjX2VycgkJIyB5ZXMKKworCXJ0cworCisjIGFkZHJlc2luZyBtb2RlIGlzIHBvc3QtaW5jcmVtZW50LiB3cml0ZSB0aGUgcmVzdWx0IGJ5dGUuIGlmIHRoZSB3cml0ZQorIyBmYWlscyB0aGVuIGRvbid0IHVwZGF0ZSB0aGUgYWRkcmVzcyByZWdpc3Rlci4gaWYgd3JpdGUgcGFzc2VzIHRoZW4KKyMgY2FsbCBpbmNfYXJlZygpIHRvIHVwZGF0ZSB0aGUgYWRkcmVzcyByZWdpc3Rlci4KK2ZzY2NfbWVtX2luYzoKKwltb3YubAkJJWEwLCVkMAkJCSMgcGFzcyByZXN1bHQgaW4gZDAKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIGZldGNoIDxlYT4KKwlic3IubAkJX2RtZW1fd3JpdGVfYnl0ZQkjIHdyaXRlIHJlc3VsdCBieXRlCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLncJCWZzY2NfZXJyCQkjIHllcworCisJbW92LmIJCTB4MStFWENfT1BXT1JEKCVhNiksJWQxCSMgZmV0Y2ggb3B3b3JkCisJYW5kaS53CQkmMHg3LCVkMQkJIyBwYXNzIGluZGV4IGluIGQxCisJbW92cS5sCQkmMHgxLCVkMAkJIyBwYXNzIGFtdCB0byBpbmMgYnkKKwlic3IubAkJaW5jX2FyZWcJCSMgaW5jcmVtZW50IGFkZHJlc3MgcmVnaXN0ZXIKKworCXJ0cworCisjIGFkZHJlc3NpbmcgbW9kZSBpcyBwcmUtZGVjcmVtZW50LiB3cml0ZSB0aGUgcmVzdWx0IGJ5dGUuIGlmIHRoZSB3cml0ZQorIyBmYWlscyB0aGVuIGRvbid0IHVwZGF0ZSB0aGUgYWRkcmVzcyByZWdpc3Rlci4gaWYgdGhlIHdyaXRlIHBhc3NlcyB0aGVuCisjIGNhbGwgZGVjX2FyZWcoKSB0byB1cGRhdGUgdGhlIGFkZHJlc3MgcmVnaXN0ZXIuCitmc2NjX21lbV9kZWM6CisJbW92LmwJCSVhMCwlZDAJCQkjIHBhc3MgcmVzdWx0IGluIGQwCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBmZXRjaCA8ZWE+CisJYnNyLmwJCV9kbWVtX3dyaXRlX2J5dGUJIyB3cml0ZSByZXN1bHQgYnl0ZQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS53CQlmc2NjX2VycgkJIyB5ZXMKKworCW1vdi5iCQkweDErRVhDX09QV09SRCglYTYpLCVkMQkjIGZldGNoIG9wd29yZAorCWFuZGkudwkJJjB4NywlZDEJCSMgcGFzcyBpbmRleCBpbiBkMQorCW1vdnEubAkJJjB4MSwlZDAJCSMgcGFzcyBhbXQgdG8gZGVjIGJ5CisJYnNyLmwJCWRlY19hcmVnCQkjIGRlY3JlbWVudCBhZGRyZXNzIHJlZ2lzdGVyCisKKwlydHMKKworIyB0aGUgZW11bGF0aW9uIHJvdXRpbmUgc2V0IGJzdW4gYW5kIEJTVU4gd2FzIGVuYWJsZWQuIGhhdmUgdG8KKyMgZml4IHN0YWNrIGFuZCBqdW1wIHRvIHRoZSBic3VuIGhhbmRsZXIuCisjIGxldCB0aGUgY2FsbGVyIG9mIHRoaXMgcm91dGluZSBzaGlmdCB0aGUgc3RhY2sgZnJhbWUgdXAgdG8KKyMgZWxpbWluYXRlIHRoZSBlZmZlY3RpdmUgYWRkcmVzcyBmaWVsZC4KK2ZzY2NfYnN1bjoKKwltb3YuYgkJJmZic3VuX2ZsZyxTUENPTkRfRkxHKCVhNikKKwlydHMKKworIyB0aGUgYnl0ZSB3cml0ZSB0byBtZW1vcnkgaGFzIGZhaWxlZC4gcGFzcyB0aGUgZmFpbGluZyBlZmZlY3RpdmUgYWRkcmVzcworIyBhbmQgYSBGU0xXIHRvIGZ1bmltcF9kYWNjKCkuCitmc2NjX2VycjoKKwltb3YudwkJJjB4MDBhMSxFWENfVk9GRiglYTYpCisJYnJhLmwJCWZhY2NfZmluaXNoCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZm1vdm1fZHluYW1pYygpOiBlbXVsYXRlICJmbW92bSIgZHluYW1pYyBpbnN0cnVjdGlvbgkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZmV0Y2hfZHJlZygpIC0gZmV0Y2ggZGF0YSByZWdpc3RlcgkJCQkjCisjCXtpLGQsfW1lbV9yZWFkKCkgLSBmZXRjaCBkYXRhIGZyb20gbWVtb3J5CQkJIworIwlfbWVtX3dyaXRlKCkgLSB3cml0ZSBkYXRhIHRvIG1lbW9yeQkJCQkjCisjCWllYV9pYWNjKCkgLSBpbnN0cnVjdGlvbiBtZW1vcnkgYWNjZXNzIGVycm9yIG9jY3VycmVkCQkjCisjCWllYV9kYWNjKCkgLSBkYXRhIG1lbW9yeSBhY2Nlc3MgZXJyb3Igb2NjdXJyZWQJCQkjCisjCXJlc3RvcmUoKSAtIHJlc3RvcmUgQW4gaW5kZXggcmVncyBpZiBhY2Nlc3MgZXJyb3Igb2NjdXJyZWQJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSWYgaW5zdHIgaXMgImZtb3ZtIERuLC0oQTcpIiBmcm9tIHN1cGVydmlzb3IgbW9kZSwJCSMKKyMJCWQwID0gc2l6ZSBvZiBkdW1wCQkJCQkjCisjCQlkMSA9IERuCQkJCQkJCSMKKyMJRWxzZSBpZiBpbnN0cnVjdGlvbiBhY2Nlc3MgZXJyb3IsCQkJCSMKKyMJCWQwID0gRlNMVwkJCQkJCSMKKyMJRWxzZSBpZiBkYXRhIGFjY2VzcyBlcnJvciwJCQkJCSMKKyMJCWQwID0gRlNMVwkJCQkJCSMKKyMJCWEwID0gYWRkcmVzcyBvZiBmYXVsdAkJCQkJIworIwlFbHNlCQkJCQkJCQkjCisjCQlub25lLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGUgZWZmZWN0aXZlIGFkZHJlc3MgbXVzdCBiZSBjYWxjdWxhdGVkIHNpbmNlIHRoaXMgaXMgZW50ZXJlZAkjCisjIGZyb20gYW4gIlVuaW1wbGVtZW50ZWQgRWZmZWN0aXZlIEFkZHJlc3MiIGV4Y2VwdGlvbiBoYW5kbGVyLiBTbywgd2UJIworIyBoYXZlIG91ciBvd24gZmNhbGNfZWEoKSByb3V0aW5lIGhlcmUuIElmIGFuIGFjY2VzcyBlcnJvciBpcyBmbGFnZ2VkCSMKKyMgYnkgYSBfe2ksZCx9bWVtX3JlYWQoKSBjYWxsLCB3ZSBtdXN0IGV4aXQgdGhyb3VnaCB0aGUgc3BlY2lhbAkJIworIyBoYW5kbGVyLgkJCQkJCQkJIworIwlUaGUgZGF0YSByZWdpc3RlciBpcyBkZXRlcm1pbmVkIGFuZCBpdHMgdmFsdWUgbG9hZGVkIHRvIGdldCB0aGUJIworIyBzdHJpbmcgb2YgRlAgcmVnaXN0ZXJzIGFmZmVjdGVkLiBUaGlzIHZhbHVlIGlzIHVzZWQgYXMgYW4gaW5kZXggaW50bwkjCisjIGEgbG9va3VwIHRhYmxlIHN1Y2ggdGhhdCB3ZSBjYW4gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYnl0ZXMJCSMKKyMgaW52b2x2ZWQuCQkJCQkJCQkjCisjCUlmIHRoZSBpbnN0cnVjdGlvbiBpcyAiZm1vdm0ueCA8ZWE+LERuIiwgYSBfbWVtX3JlYWQoKSBpcyB1c2VkCSMKKyMgdG8gcmVhZCBpbiBhbGwgRlAgdmFsdWVzLiBBZ2FpbiwgX21lbV9yZWFkKCkgbWF5IGZhaWwgYW5kIHJlcXVpcmUgYQkjCisjIHNwZWNpYWwgZXhpdC4JCQkJCQkJCSMKKyMJSWYgdGhlIGluc3RydWN0aW9uIGlzICJmbW92bS54IEROLDxlYT4iLCBhIF9tZW1fd3JpdGUoKSBpcyB1c2VkCSMKKyMgdG8gd3JpdGUgYWxsIEZQIHZhbHVlcy4gX21lbV93cml0ZSgpIG1heSBhbHNvIGZhaWwuCQkJIworIwlJZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgImZtb3ZtLnggRE4sLShhNykiIGZyb20gc3VwZXJ2aXNvciBtb2RlLAkjCisjIHRoZW4gd2UgcmV0dXJuIHRoZSBzaXplIG9mIHRoZSBkdW1wIGFuZCB0aGUgc3RyaW5nIHRvIHRoZSBjYWxsZXIJIworIyBzbyB0aGF0IHRoZSBtb3ZlIGNhbiBvY2N1ciBvdXRzaWRlIG9mIHRoaXMgcm91dGluZS4gVGhpcyBzcGVjaWFsCSMKKyMgY2FzZSBpcyByZXF1aXJlZCBzbyB0aGF0IG1vdmVzIHRvIHRoZSBzeXN0ZW0gc3RhY2sgYXJlIGhhbmRsZWQJIworIyBjb3JyZWN0bHkuCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBEWU5BTUlDOgkJCQkJCQkJIworIwlmbW92bS54CWRuLCA8ZWE+CQkJCQkJIworIwlmbW92bS54CTxlYT4sIGRuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJICAgICAgPFdPUkQgMT4JCSAgICAgIDxXT1JEMj4JCQkJIworIwkxMTExIDAwMTAgMDAgfDxlYT58CTExQCYgMTAwMCAwJCQkIDAwMDAJCQkjCisjCQkJCQkJCQkJIworIwkmID0gKDApOiBwcmVkZWNyZW1lbnQgYWRkcmVzc2luZyBtb2RlCQkJCSMKKyMJICAgICgxKTogcG9zdGluY3JlbWVudCBvciBjb250cm9sIGFkZHJlc3NpbmcgbW9kZQkJIworIwlAID0gKDApOiBtb3ZlIGxpc3RlZCByZWdzIGZyb20gbWVtb3J5IHRvIHRoZSBGUFUJCSMKKyMJICAgICgxKTogbW92ZSBsaXN0ZWQgcmVncyBmcm9tIHRoZSBGUFUgdG8gbWVtb3J5CQkjCisjCSQkJCAgICA6IGluZGV4IG9mIGRhdGEgcmVnaXN0ZXIgaG9sZGluZyByZWcgc2VsZWN0IG1hc2sJCSMKKyMJCQkJCQkJCQkjCisjIE5PVEVTOgkJCQkJCQkJIworIwlJZiB0aGUgZGF0YSByZWdpc3RlciBob2xkcyBhIHplcm8sIHRoZW4gdGhlCQkJIworIwlpbnN0cnVjdGlvbiBpcyBhIG5vcC4JCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlmbW92bV9keW5hbWljCitmbW92bV9keW5hbWljOgorCisjIGV4dHJhY3QgdGhlIGRhdGEgcmVnaXN0ZXIgaW4gd2hpY2ggdGhlIGJpdCBzdHJpbmcgcmVzaWRlcy4uLgorCW1vdi5iCQkxK0VYQ19FWFRXT1JEKCVhNiksJWQxCSMgZmV0Y2ggZXh0d29yZAorCWFuZGkudwkJJjB4NzAsJWQxCQkjIGV4dHJhY3QgcmVnIGJpdHMKKwlsc3IuYgkJJjB4NCwlZDEJCSMgc2hpZnQgaW50byBsbyBiaXRzCisKKyMgZmV0Y2ggdGhlIGJpdCBzdHJpbmcgaW50byBkMC4uLgorCWJzci5sCQlmZXRjaF9kcmVnCQkjIGZldGNoIHJlZyBzdHJpbmcKKworCWFuZGkubAkJJjB4MDAwMDAwZmYsJWQwCQkjIGtlZXAgb25seSBsbyBieXRlCisKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIHN0cmcKKwltb3YuYgkJKHRibF9mbW92bV9zaXplLncsJXBjLCVkMCksJWQwCisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzaXplCisJYnNyLmwJCWZtb3ZtX2NhbGNfZWEJCSMgY2FsY3VsYXRlIDxlYT4KKwltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIHNpemUKKwltb3YubAkJKCVzcCkrLCVkMQkJIyByZXN0b3JlIHN0cmcKKworIyBpZiB0aGUgYml0IHN0cmluZyBpcyBhIHplcm8sIHRoZW4gdGhlIG9wZXJhdGlvbiBpcyBhIG5vLW9wCisjIGJ1dCwgbWFrZSBzdXJlIHRoYXQgd2UndmUgY2FsY3VsYXRlZCBlYSBhbmQgYWR2YW5jZWQgdGhlIG9wd29yZCBwb2ludGVyCisJYmVxLncJCWZtb3ZtX2RhdGFfZG9uZQorCisjIHNlcGFyYXRlIG1vdmUgaW5zIGZyb20gbW92ZSBvdXRzLi4uCisJYnRzdAkJJjB4NSxFWENfRVhUV09SRCglYTYpCSMgaXMgaXQgYSBtb3ZlIGluIG9yIG91dD8KKwliZXEudwkJZm1vdm1fZGF0YV9pbgkJIyBpdCdzIGEgbW92ZSBvdXQKKworIyMjIyMjIyMjIyMjIworIyBNT1ZFIE9VVDogIworIyMjIyMjIyMjIyMjIworZm1vdm1fZGF0YV9vdXQ6CisJYnRzdAkJJjB4NCxFWENfRVhUV09SRCglYTYpCSMgY29udHJvbCBvciBwcmVkZWNyZW1lbnQ/CisJYm5lLncJCWZtb3ZtX291dF9jdHJsCQkjIGNvbnRyb2wKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZm1vdm1fb3V0X3ByZWRlYzoKKyMgZm9yIHByZWRlY3JlbWVudCBtb2RlLCB0aGUgYml0IHN0cmluZyBpcyB0aGUgb3Bwb3NpdGUgb2YgYm90aCBjb250cm9sCisjIG9wZXJhdGlvbnMgYW5kIHBvc3RpbmNyZW1lbnQgbW9kZS4gKGJpdDcgPSBGUDcgLi4uIGJpdDAgPSBGUDApCisjIGhlcmUsIHdlIGNvbnZlcnQgaXQgdG8gYmUganVzdCBsaWtlIHRoZSBvdGhlcnMuLi4KKwltb3YuYgkJKHRibF9mbW92bV9jb252ZXJ0LncsJXBjLCVkMS53KjEpLCVkMQorCisJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQkjIHVzZXIgb3Igc3VwZXJ2aXNvciBtb2RlPworCWJlcS5iCQlmbW92bV9vdXRfY3RybAkJIyB1c2VyCisKK2Ztb3ZtX291dF9wcmVkZWNfczoKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcgIyBpcyA8ZWE+IG1vZGUgLShhNyk/CisJYm5lLmIJCWZtb3ZtX291dF9jdHJsCisKKyMgdGhlIG9wZXJhdGlvbiB3YXMgdW5mb3J0dW5hdGVseSBhbjogZm1vdm0ueCBkbiwtKHNwKQorIyBjYWxsZWQgZnJvbSBzdXBlcnZpc29yIG1vZGUuCisjIHdlJ3JlIGFsc28gcGFzc2luZyAic2l6ZSIgYW5kICJzdHJnIiBiYWNrIHRvIHRoZSBjYWxsaW5nIHJvdXRpbmUKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZm1vdm1fb3V0X2N0cmw6CisJbW92LmwJCSVhMCwlYTEJCQkjIG1vdmUgPGVhPiB0byBhMQorCisJc3ViLmwJCSVkMCwlc3AJCQkjIHN1YnRyYWN0IHNpemUgb2YgZHVtcAorCWxlYQkJKCVzcCksJWEwCisKKwl0c3QuYgkJJWQxCQkJIyBzaG91bGQgRlAwIGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9vdXRfY3RybF9mcDEJIyBubworCisJbW92LmwJCTB4MCtFWENfRlAwKCVhNiksKCVhMCkrCSMgeWVzCisJbW92LmwJCTB4NCtFWENfRlAwKCVhNiksKCVhMCkrCisJbW92LmwJCTB4OCtFWENfRlAwKCVhNiksKCVhMCkrCisKK2Ztb3ZtX291dF9jdHJsX2ZwMToKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQMSBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fb3V0X2N0cmxfZnAyCSMgbm8KKworCW1vdi5sCQkweDArRVhDX0ZQMSglYTYpLCglYTApKwkjIHllcworCW1vdi5sCQkweDQrRVhDX0ZQMSglYTYpLCglYTApKworCW1vdi5sCQkweDgrRVhDX0ZQMSglYTYpLCglYTApKworCitmbW92bV9vdXRfY3RybF9mcDI6CisJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDIgYmUgbW92ZWQ/CisJYnBsLmIJCWZtb3ZtX291dF9jdHJsX2ZwMwkjIG5vCisKKwlmbW92bS54CQkmMHgyMCwoJWEwKQkJIyB5ZXMKKwlhZGQubAkJJjB4YywlYTAKKworZm1vdm1fb3V0X2N0cmxfZnAzOgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlAzIGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9vdXRfY3RybF9mcDQJIyBubworCisJZm1vdm0ueAkJJjB4MTAsKCVhMCkJCSMgeWVzCisJYWRkLmwJCSYweGMsJWEwCisKK2Ztb3ZtX291dF9jdHJsX2ZwNDoKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNCBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fb3V0X2N0cmxfZnA1CSMgbm8KKworCWZtb3ZtLngJCSYweDA4LCglYTApCQkjIHllcworCWFkZC5sCQkmMHhjLCVhMAorCitmbW92bV9vdXRfY3RybF9mcDU6CisJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDUgYmUgbW92ZWQ/CisJYnBsLmIJCWZtb3ZtX291dF9jdHJsX2ZwNgkjIG5vCisKKwlmbW92bS54CQkmMHgwNCwoJWEwKQkJIyB5ZXMKKwlhZGQubAkJJjB4YywlYTAKKworZm1vdm1fb3V0X2N0cmxfZnA2OgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlA2IGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9vdXRfY3RybF9mcDcJIyBubworCisJZm1vdm0ueAkJJjB4MDIsKCVhMCkJCSMgeWVzCisJYWRkLmwJCSYweGMsJWEwCisKK2Ztb3ZtX291dF9jdHJsX2ZwNzoKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNyBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fb3V0X2N0cmxfZG9uZQkjIG5vCisKKwlmbW92bS54CQkmMHgwMSwoJWEwKQkJIyB5ZXMKKwlhZGQubAkJJjB4YywlYTAKKworZm1vdm1fb3V0X2N0cmxfZG9uZToKKwltb3YubAkJJWExLExfU0NSMSglYTYpCisKKwlsZWEJCSglc3ApLCVhMAkJIyBwYXNzOiBzdXBlcnZpc29yIHNyYworCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgc2l6ZQorCWJzci5sCQlfZG1lbV93cml0ZQkJIyBjb3B5IGRhdGEgdG8gdXNlciBtZW0KKworCW1vdi5sCQkoJXNwKSssJWQwCisJYWRkLmwJCSVkMCwlc3AJCQkjIGNsZWFyIGZwcmVnIGRhdGEgZnJvbSBzdGFjaworCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBlcnI/CisJYm5lLncJCWZtb3ZtX291dF9lcnIJCSMgeWVzCisKKwlydHMKKworIyMjIyMjIyMjIyMjCisjIE1PVkUgSU46ICMKKyMjIyMjIyMjIyMjIworZm1vdm1fZGF0YV9pbjoKKwltb3YubAkJJWEwLExfU0NSMSglYTYpCisKKwlzdWIubAkJJWQwLCVzcAkJCSMgbWFrZSByb29tIGZvciBmcHJlZ3MKKwlsZWEJCSglc3ApLCVhMQorCisJbW92LmwJCSVkMSwtKCVzcCkJCSMgc2F2ZSBiaXQgc3RyaW5nIGZvciBsYXRlcgorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgIyBvZiBieXRlcworCisJYnNyLmwJCV9kbWVtX3JlYWQJCSMgY29weSBkYXRhIGZyb20gdXNlciBtZW0KKworCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJldHJpZXZlICMgb2YgYnl0ZXMKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkZmV0Y2ggZmFpbD8KKwlibmUudwkJZm1vdm1faW5fZXJyCQkjIHllcworCisJbW92LmwJCSglc3ApKywlZDEJCSMgbG9hZCBiaXQgc3RyaW5nCisKKwlsZWEJCSglc3ApLCVhMAkJIyBhZGRyIG9mIHN0YWNrCisKKwl0c3QuYgkJJWQxCQkJIyBzaG91bGQgRlAwIGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9kYXRhX2luX2ZwMQkjIG5vCisKKwltb3YubAkJKCVhMCkrLDB4MCtFWENfRlAwKCVhNikJIyB5ZXMKKwltb3YubAkJKCVhMCkrLDB4NCtFWENfRlAwKCVhNikKKwltb3YubAkJKCVhMCkrLDB4OCtFWENfRlAwKCVhNikKKworZm1vdm1fZGF0YV9pbl9mcDE6CisJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDEgYmUgbW92ZWQ/CisJYnBsLmIJCWZtb3ZtX2RhdGFfaW5fZnAyCSMgbm8KKworCW1vdi5sCQkoJWEwKSssMHgwK0VYQ19GUDEoJWE2KQkjIHllcworCW1vdi5sCQkoJWEwKSssMHg0K0VYQ19GUDEoJWE2KQorCW1vdi5sCQkoJWEwKSssMHg4K0VYQ19GUDEoJWE2KQorCitmbW92bV9kYXRhX2luX2ZwMjoKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQMiBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fZGF0YV9pbl9mcDMJIyBubworCisJZm1vdm0ueAkJKCVhMCkrLCYweDIwCQkjIHllcworCitmbW92bV9kYXRhX2luX2ZwMzoKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQMyBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fZGF0YV9pbl9mcDQJIyBubworCisJZm1vdm0ueAkJKCVhMCkrLCYweDEwCQkjIHllcworCitmbW92bV9kYXRhX2luX2ZwNDoKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNCBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fZGF0YV9pbl9mcDUJIyBubworCisJZm1vdm0ueAkJKCVhMCkrLCYweDA4CQkjIHllcworCitmbW92bV9kYXRhX2luX2ZwNToKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNSBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fZGF0YV9pbl9mcDYJIyBubworCisJZm1vdm0ueAkJKCVhMCkrLCYweDA0CQkjIHllcworCitmbW92bV9kYXRhX2luX2ZwNjoKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNiBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fZGF0YV9pbl9mcDcJIyBubworCisJZm1vdm0ueAkJKCVhMCkrLCYweDAyCQkjIHllcworCitmbW92bV9kYXRhX2luX2ZwNzoKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNyBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fZGF0YV9pbl9kb25lCSMgbm8KKworCWZtb3ZtLngJCSglYTApKywmMHgwMQkJIyB5ZXMKKworZm1vdm1fZGF0YV9pbl9kb25lOgorCWFkZC5sCQklZDAsJXNwCQkJIyByZW1vdmUgZnByZWdzIGZyb20gc3RhY2sKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitmbW92bV9kYXRhX2RvbmU6CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIHRhYmxlIGluZGV4ZWQgYnkgdGhlIG9wZXJhdGlvbidzIGJpdCBzdHJpbmcgdGhhdCBnaXZlcyB0aGUgbnVtYmVyCisjIG9mIGJ5dGVzIHRoYXQgd2lsbCBiZSBtb3ZlZC4KKyMKKyMgbnVtYmVyIG9mIGJ5dGVzID0gKCMgb2YgMSdzIGluIGJpdCBzdHJpbmcpICogMTIoYnl0ZXMvZnByZWcpCisjCit0YmxfZm1vdm1fc2l6ZToKKwlieXRlCTB4MDAsMHgwYywweDBjLDB4MTgsMHgwYywweDE4LDB4MTgsMHgyNAorCWJ5dGUJMHgwYywweDE4LDB4MTgsMHgyNCwweDE4LDB4MjQsMHgyNCwweDMwCisJYnl0ZQkweDBjLDB4MTgsMHgxOCwweDI0LDB4MTgsMHgyNCwweDI0LDB4MzAKKwlieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYworCWJ5dGUJMHgwYywweDE4LDB4MTgsMHgyNCwweDE4LDB4MjQsMHgyNCwweDMwCisJYnl0ZQkweDE4LDB4MjQsMHgyNCwweDMwLDB4MjQsMHgzMCwweDMwLDB4M2MKKwlieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYworCWJ5dGUJMHgyNCwweDMwLDB4MzAsMHgzYywweDMwLDB4M2MsMHgzYywweDQ4CisJYnl0ZQkweDBjLDB4MTgsMHgxOCwweDI0LDB4MTgsMHgyNCwweDI0LDB4MzAKKwlieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYworCWJ5dGUJMHgxOCwweDI0LDB4MjQsMHgzMCwweDI0LDB4MzAsMHgzMCwweDNjCisJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKKwlieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYworCWJ5dGUJMHgyNCwweDMwLDB4MzAsMHgzYywweDMwLDB4M2MsMHgzYywweDQ4CisJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKKwlieXRlCTB4MzAsMHgzYywweDNjLDB4NDgsMHgzYywweDQ4LDB4NDgsMHg1NAorCWJ5dGUJMHgwYywweDE4LDB4MTgsMHgyNCwweDE4LDB4MjQsMHgyNCwweDMwCisJYnl0ZQkweDE4LDB4MjQsMHgyNCwweDMwLDB4MjQsMHgzMCwweDMwLDB4M2MKKwlieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYworCWJ5dGUJMHgyNCwweDMwLDB4MzAsMHgzYywweDMwLDB4M2MsMHgzYywweDQ4CisJYnl0ZQkweDE4LDB4MjQsMHgyNCwweDMwLDB4MjQsMHgzMCwweDMwLDB4M2MKKwlieXRlCTB4MjQsMHgzMCwweDMwLDB4M2MsMHgzMCwweDNjLDB4M2MsMHg0OAorCWJ5dGUJMHgyNCwweDMwLDB4MzAsMHgzYywweDMwLDB4M2MsMHgzYywweDQ4CisJYnl0ZQkweDMwLDB4M2MsMHgzYywweDQ4LDB4M2MsMHg0OCwweDQ4LDB4NTQKKwlieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYworCWJ5dGUJMHgyNCwweDMwLDB4MzAsMHgzYywweDMwLDB4M2MsMHgzYywweDQ4CisJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKKwlieXRlCTB4MzAsMHgzYywweDNjLDB4NDgsMHgzYywweDQ4LDB4NDgsMHg1NAorCWJ5dGUJMHgyNCwweDMwLDB4MzAsMHgzYywweDMwLDB4M2MsMHgzYywweDQ4CisJYnl0ZQkweDMwLDB4M2MsMHgzYywweDQ4LDB4M2MsMHg0OCwweDQ4LDB4NTQKKwlieXRlCTB4MzAsMHgzYywweDNjLDB4NDgsMHgzYywweDQ4LDB4NDgsMHg1NAorCWJ5dGUJMHgzYywweDQ4LDB4NDgsMHg1NCwweDQ4LDB4NTQsMHg1NCwweDYwCisKKyMKKyMgdGFibGUgdG8gY29udmVydCBhIHByZS1kZWNyZW1lbnQgYml0IHN0cmluZyBpbnRvIGEgcG9zdC1pbmNyZW1lbnQKKyMgb3IgY29udHJvbCBiaXQgc3RyaW5nLgorIyBleDoJMHgwMAk9PT4JMHgwMAorIwkweDAxCT09PgkweDgwCisjCTB4MDIJPT0+CTB4NDAKKyMJCS4KKyMJCS4KKyMJMHhmZAk9PT4JMHhiZgorIwkweGZlCT09PgkweDdmCisjCTB4ZmYJPT0+CTB4ZmYKKyMKK3RibF9mbW92bV9jb252ZXJ0OgorCWJ5dGUJMHgwMCwweDgwLDB4NDAsMHhjMCwweDIwLDB4YTAsMHg2MCwweGUwCisJYnl0ZQkweDEwLDB4OTAsMHg1MCwweGQwLDB4MzAsMHhiMCwweDcwLDB4ZjAKKwlieXRlCTB4MDgsMHg4OCwweDQ4LDB4YzgsMHgyOCwweGE4LDB4NjgsMHhlOAorCWJ5dGUJMHgxOCwweDk4LDB4NTgsMHhkOCwweDM4LDB4YjgsMHg3OCwweGY4CisJYnl0ZQkweDA0LDB4ODQsMHg0NCwweGM0LDB4MjQsMHhhNCwweDY0LDB4ZTQKKwlieXRlCTB4MTQsMHg5NCwweDU0LDB4ZDQsMHgzNCwweGI0LDB4NzQsMHhmNAorCWJ5dGUJMHgwYywweDhjLDB4NGMsMHhjYywweDJjLDB4YWMsMHg2YywweGVjCisJYnl0ZQkweDFjLDB4OWMsMHg1YywweGRjLDB4M2MsMHhiYywweDdjLDB4ZmMKKwlieXRlCTB4MDIsMHg4MiwweDQyLDB4YzIsMHgyMiwweGEyLDB4NjIsMHhlMgorCWJ5dGUJMHgxMiwweDkyLDB4NTIsMHhkMiwweDMyLDB4YjIsMHg3MiwweGYyCisJYnl0ZQkweDBhLDB4OGEsMHg0YSwweGNhLDB4MmEsMHhhYSwweDZhLDB4ZWEKKwlieXRlCTB4MWEsMHg5YSwweDVhLDB4ZGEsMHgzYSwweGJhLDB4N2EsMHhmYQorCWJ5dGUJMHgwNiwweDg2LDB4NDYsMHhjNiwweDI2LDB4YTYsMHg2NiwweGU2CisJYnl0ZQkweDE2LDB4OTYsMHg1NiwweGQ2LDB4MzYsMHhiNiwweDc2LDB4ZjYKKwlieXRlCTB4MGUsMHg4ZSwweDRlLDB4Y2UsMHgyZSwweGFlLDB4NmUsMHhlZQorCWJ5dGUJMHgxZSwweDllLDB4NWUsMHhkZSwweDNlLDB4YmUsMHg3ZSwweGZlCisJYnl0ZQkweDAxLDB4ODEsMHg0MSwweGMxLDB4MjEsMHhhMSwweDYxLDB4ZTEKKwlieXRlCTB4MTEsMHg5MSwweDUxLDB4ZDEsMHgzMSwweGIxLDB4NzEsMHhmMQorCWJ5dGUJMHgwOSwweDg5LDB4NDksMHhjOSwweDI5LDB4YTksMHg2OSwweGU5CisJYnl0ZQkweDE5LDB4OTksMHg1OSwweGQ5LDB4MzksMHhiOSwweDc5LDB4ZjkKKwlieXRlCTB4MDUsMHg4NSwweDQ1LDB4YzUsMHgyNSwweGE1LDB4NjUsMHhlNQorCWJ5dGUJMHgxNSwweDk1LDB4NTUsMHhkNSwweDM1LDB4YjUsMHg3NSwweGY1CisJYnl0ZQkweDBkLDB4OGQsMHg0ZCwweGNkLDB4MmQsMHhhZCwweDZkLDB4ZWQKKwlieXRlCTB4MWQsMHg5ZCwweDVkLDB4ZGQsMHgzZCwweGJkLDB4N2QsMHhmZAorCWJ5dGUJMHgwMywweDgzLDB4NDMsMHhjMywweDIzLDB4YTMsMHg2MywweGUzCisJYnl0ZQkweDEzLDB4OTMsMHg1MywweGQzLDB4MzMsMHhiMywweDczLDB4ZjMKKwlieXRlCTB4MGIsMHg4YiwweDRiLDB4Y2IsMHgyYiwweGFiLDB4NmIsMHhlYgorCWJ5dGUJMHgxYiwweDliLDB4NWIsMHhkYiwweDNiLDB4YmIsMHg3YiwweGZiCisJYnl0ZQkweDA3LDB4ODcsMHg0NywweGM3LDB4MjcsMHhhNywweDY3LDB4ZTcKKwlieXRlCTB4MTcsMHg5NywweDU3LDB4ZDcsMHgzNywweGI3LDB4NzcsMHhmNworCWJ5dGUJMHgwZiwweDhmLDB4NGYsMHhjZiwweDJmLDB4YWYsMHg2ZiwweGVmCisJYnl0ZQkweDFmLDB4OWYsMHg1ZiwweGRmLDB4M2YsMHhiZiwweDdmLDB4ZmYKKworCWdsb2JhbAkJZm1vdm1fY2FsY19lYQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgX2Ztb3ZtX2NhbGNfZWE6IGNhbGN1bGF0ZSBlZmZlY3RpdmUgYWRkcmVzcyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZm1vdm1fY2FsY19lYToKKwltb3YubAkJJWQwLCVhMAkJCSMgbW92ZSAjIGJ5dGVzIHRvIGEwCisKKyMgY3VycmVudGx5LCBNT0RFIGFuZCBSRUcgYXJlIHRha2VuIGZyb20gdGhlIEVYQ19PUFdPUkQuIHRoaXMgY291bGQgYmUKKyMgZWFzaWx5IGNoYW5nZWQgaWYgdGhleSB3ZXJlIGlucHV0cyBwYXNzZWQgaW4gcmVnaXN0ZXJzLgorCW1vdi53CQlFWENfT1BXT1JEKCVhNiksJWQwCSMgZmV0Y2ggb3Bjb2RlIHdvcmQKKwltb3YudwkJJWQwLCVkMQkJCSMgbWFrZSBhIGNvcHkKKworCWFuZGkudwkJJjB4M2YsJWQwCQkjIGV4dHJhY3QgbW9kZSBmaWVsZAorCWFuZGkubAkJJjB4NywlZDEJCSMgZXh0cmFjdCByZWcgIGZpZWxkCisKKyMganVtcCB0byB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbiBmb3IgZWFjaCB7TU9ERSxSRUd9IHBhaXIuCisJbW92LncJCSh0YmxfZmVhX21vZGUuYiwlcGMsJWQwLncqMiksJWQwICMgZmV0Y2ggam1wIGRpc3RhbmNlCisJam1wCQkodGJsX2ZlYV9tb2RlLmIsJXBjLCVkMC53KjEpICMgam1wIHRvIGNvcnJlY3QgZWEgbW9kZQorCisJc3diZWcJCSY2NAordGJsX2ZlYV9tb2RlOgorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCisJc2hvcnQJCWZhZGRyX2luZF9hMAktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfYTEJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2EyCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9hMwktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfYTQJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2E1CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9hNgktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfYTcJLQl0YmxfZmVhX21vZGUKKworCXNob3J0CQlmYWRkcl9pbmRfcF9hMAktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfcF9hMQktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfcF9hMgktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfcF9hMwktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfcF9hNAktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfcF9hNQktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfcF9hNgktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfcF9hNwktCXRibF9mZWFfbW9kZQorCisJc2hvcnQJCWZhZGRyX2luZF9tX2EwCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9tX2ExCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9tX2EyCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9tX2EzCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9tX2E0CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9tX2E1CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9tX2E2CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9tX2E3CS0JdGJsX2ZlYV9tb2RlCisKKwlzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTAJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTEJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTIJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTMJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTQJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTYJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTcJLQl0YmxfZmVhX21vZGUKKworCXNob3J0CQlmYWRkcl9pbmRfZXh0CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9leHQJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2V4dAktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZXh0CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9leHQJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2V4dAktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZXh0CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9leHQJLQl0YmxfZmVhX21vZGUKKworCXNob3J0CQlmYWJzX3Nob3J0CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhYnNfbG9uZwktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmcGNfaW5kCQktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmcGNfaW5kX2V4dAktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdDogKEFuKSAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZmFkZHJfaW5kX2EwOgorCW1vdi5sCQlFWENfRFJFR1MrMHg4KCVhNiksJWEwCSMgR2V0IGN1cnJlbnQgYTAKKwlydHMKKworZmFkZHJfaW5kX2ExOgorCW1vdi5sCQlFWENfRFJFR1MrMHhjKCVhNiksJWEwCSMgR2V0IGN1cnJlbnQgYTEKKwlydHMKKworZmFkZHJfaW5kX2EyOgorCW1vdi5sCQklYTIsJWEwCQkJIyBHZXQgY3VycmVudCBhMgorCXJ0cworCitmYWRkcl9pbmRfYTM6CisJbW92LmwJCSVhMywlYTAJCQkjIEdldCBjdXJyZW50IGEzCisJcnRzCisKK2ZhZGRyX2luZF9hNDoKKwltb3YubAkJJWE0LCVhMAkJCSMgR2V0IGN1cnJlbnQgYTQKKwlydHMKKworZmFkZHJfaW5kX2E1OgorCW1vdi5sCQklYTUsJWEwCQkJIyBHZXQgY3VycmVudCBhNQorCXJ0cworCitmYWRkcl9pbmRfYTY6CisJbW92LmwJCSglYTYpLCVhMAkJIyBHZXQgY3VycmVudCBhNgorCXJ0cworCitmYWRkcl9pbmRfYTc6CisJbW92LmwJCUVYQ19BNyglYTYpLCVhMAkJIyBHZXQgY3VycmVudCBhNworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0IHcvIHBvc3RpbmNyZW1lbnQ6IChBbikrICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmYWRkcl9pbmRfcF9hMDoKKwltb3YubAkJRVhDX0RSRUdTKzB4OCglYTYpLCVkMAkjIEdldCBjdXJyZW50IGEwCisJbW92LmwJCSVkMCwlZDEKKwlhZGQubAkJJWEwLCVkMQkJCSMgSW5jcmVtZW50CisJbW92LmwJCSVkMSxFWENfRFJFR1MrMHg4KCVhNikJIyBTYXZlIGluY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCitmYWRkcl9pbmRfcF9hMToKKwltb3YubAkJRVhDX0RSRUdTKzB4YyglYTYpLCVkMAkjIEdldCBjdXJyZW50IGExCisJbW92LmwJCSVkMCwlZDEKKwlhZGQubAkJJWEwLCVkMQkJCSMgSW5jcmVtZW50CisJbW92LmwJCSVkMSxFWENfRFJFR1MrMHhjKCVhNikJIyBTYXZlIGluY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCitmYWRkcl9pbmRfcF9hMjoKKwltb3YubAkJJWEyLCVkMAkJCSMgR2V0IGN1cnJlbnQgYTIKKwltb3YubAkJJWQwLCVkMQorCWFkZC5sCQklYTAsJWQxCQkJIyBJbmNyZW1lbnQKKwltb3YubAkJJWQxLCVhMgkJCSMgU2F2ZSBpbmNyIHZhbHVlCisJbW92LmwJCSVkMCwlYTAKKwlydHMKKworZmFkZHJfaW5kX3BfYTM6CisJbW92LmwJCSVhMywlZDAJCQkjIEdldCBjdXJyZW50IGEzCisJbW92LmwJCSVkMCwlZDEKKwlhZGQubAkJJWEwLCVkMQkJCSMgSW5jcmVtZW50CisJbW92LmwJCSVkMSwlYTMJCQkjIFNhdmUgaW5jciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisJcnRzCisKK2ZhZGRyX2luZF9wX2E0OgorCW1vdi5sCQklYTQsJWQwCQkJIyBHZXQgY3VycmVudCBhNAorCW1vdi5sCQklZDAsJWQxCisJYWRkLmwJCSVhMCwlZDEJCQkjIEluY3JlbWVudAorCW1vdi5sCQklZDEsJWE0CQkJIyBTYXZlIGluY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCitmYWRkcl9pbmRfcF9hNToKKwltb3YubAkJJWE1LCVkMAkJCSMgR2V0IGN1cnJlbnQgYTUKKwltb3YubAkJJWQwLCVkMQorCWFkZC5sCQklYTAsJWQxCQkJIyBJbmNyZW1lbnQKKwltb3YubAkJJWQxLCVhNQkJCSMgU2F2ZSBpbmNyIHZhbHVlCisJbW92LmwJCSVkMCwlYTAKKwlydHMKKworZmFkZHJfaW5kX3BfYTY6CisJbW92LmwJCSglYTYpLCVkMAkJIyBHZXQgY3VycmVudCBhNgorCW1vdi5sCQklZDAsJWQxCisJYWRkLmwJCSVhMCwlZDEJCQkjIEluY3JlbWVudAorCW1vdi5sCQklZDEsKCVhNikJCSMgU2F2ZSBpbmNyIHZhbHVlCisJbW92LmwJCSVkMCwlYTAKKwlydHMKKworZmFkZHJfaW5kX3BfYTc6CisJbW92LmIJCSZtaWE3X2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgInNwZWNpYWwgY2FzZSIgZmxhZworCisJbW92LmwJCUVYQ19BNyglYTYpLCVkMAkJIyBHZXQgY3VycmVudCBhNworCW1vdi5sCQklZDAsJWQxCisJYWRkLmwJCSVhMCwlZDEJCQkjIEluY3JlbWVudAorCW1vdi5sCQklZDEsRVhDX0E3KCVhNikJCSMgU2F2ZSBpbmNyIHZhbHVlCisJbW92LmwJCSVkMCwlYTAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0IHcvIHByZWRlY3JlbWVudDogLShBbikgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZmFkZHJfaW5kX21fYTA6CisJbW92LmwJCUVYQ19EUkVHUysweDgoJWE2KSwlZDAJIyBHZXQgY3VycmVudCBhMAorCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKKwltb3YubAkJJWQwLEVYQ19EUkVHUysweDgoJWE2KQkjIFNhdmUgZGVjciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisJcnRzCisKK2ZhZGRyX2luZF9tX2ExOgorCW1vdi5sCQlFWENfRFJFR1MrMHhjKCVhNiksJWQwCSMgR2V0IGN1cnJlbnQgYTEKKwlzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50CisJbW92LmwJCSVkMCxFWENfRFJFR1MrMHhjKCVhNikJIyBTYXZlIGRlY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCitmYWRkcl9pbmRfbV9hMjoKKwltb3YubAkJJWEyLCVkMAkJCSMgR2V0IGN1cnJlbnQgYTIKKwlzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50CisJbW92LmwJCSVkMCwlYTIJCQkjIFNhdmUgZGVjciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisJcnRzCisKK2ZhZGRyX2luZF9tX2EzOgorCW1vdi5sCQklYTMsJWQwCQkJIyBHZXQgY3VycmVudCBhMworCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKKwltb3YubAkJJWQwLCVhMwkJCSMgU2F2ZSBkZWNyIHZhbHVlCisJbW92LmwJCSVkMCwlYTAKKwlydHMKKworZmFkZHJfaW5kX21fYTQ6CisJbW92LmwJCSVhNCwlZDAJCQkjIEdldCBjdXJyZW50IGE0CisJc3ViLmwJCSVhMCwlZDAJCQkjIERlY3JlbWVudAorCW1vdi5sCQklZDAsJWE0CQkJIyBTYXZlIGRlY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCitmYWRkcl9pbmRfbV9hNToKKwltb3YubAkJJWE1LCVkMAkJCSMgR2V0IGN1cnJlbnQgYTUKKwlzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50CisJbW92LmwJCSVkMCwlYTUJCQkjIFNhdmUgZGVjciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisJcnRzCisKK2ZhZGRyX2luZF9tX2E2OgorCW1vdi5sCQkoJWE2KSwlZDAJCSMgR2V0IGN1cnJlbnQgYTYKKwlzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50CisJbW92LmwJCSVkMCwoJWE2KQkJIyBTYXZlIGRlY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCitmYWRkcl9pbmRfbV9hNzoKKwltb3YuYgkJJm1kYTdfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCAic3BlY2lhbCBjYXNlIiBmbGFnCisKKwltb3YubAkJRVhDX0E3KCVhNiksJWQwCQkjIEdldCBjdXJyZW50IGE3CisJc3ViLmwJCSVhMCwlZDAJCQkjIERlY3JlbWVudAorCW1vdi5sCQklZDAsRVhDX0E3KCVhNikJCSMgU2F2ZSBkZWNyIHZhbHVlCisJbW92LmwJCSVkMCwlYTAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdCB3LyBkaXNwbGFjZW1lbnQ6IChkMTYsIEFuKSAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZmFkZHJfaW5kX2Rpc3BfYTA6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCisJYWRkLmwJCUVYQ19EUkVHUysweDgoJWE2KSwlYTAJIyBhMCArIGQxNgorCXJ0cworCitmYWRkcl9pbmRfZGlzcF9hMToKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CisKKwlhZGQubAkJRVhDX0RSRUdTKzB4YyglYTYpLCVhMAkjIGExICsgZDE2CisJcnRzCisKK2ZhZGRyX2luZF9kaXNwX2EyOgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKworCWFkZC5sCQklYTIsJWEwCQkJIyBhMiArIGQxNgorCXJ0cworCitmYWRkcl9pbmRfZGlzcF9hMzoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CisKKwlhZGQubAkJJWEzLCVhMAkJCSMgYTMgKyBkMTYKKwlydHMKKworZmFkZHJfaW5kX2Rpc3BfYTQ6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCisJYWRkLmwJCSVhNCwlYTAJCQkjIGE0ICsgZDE2CisJcnRzCisKK2ZhZGRyX2luZF9kaXNwX2E1OgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKworCWFkZC5sCQklYTUsJWEwCQkJIyBhNSArIGQxNgorCXJ0cworCitmYWRkcl9pbmRfZGlzcF9hNjoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CisKKwlhZGQubAkJKCVhNiksJWEwCQkjIGE2ICsgZDE2CisJcnRzCisKK2ZhZGRyX2luZF9kaXNwX2E3OgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKworCWFkZC5sCQlFWENfQTcoJWE2KSwlYTAJCSMgYTcgKyBkMTYKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3Qgdy8gaW5kZXgoOC1iaXQgZGlzcGxhY2VtZW50KTogKGQ4LCBBbiwgWG4pICMKKyMgICAgIiAgICAgICAiICAgICAgICAgIiAgICB3LyAgICIgIChiYXNlIGRpc3BsYWNlbWVudCk6IChiZCwgQW4sIFhuKSAgIworIyBNZW1vcnkgaW5kaXJlY3QgcG9zdGluZGV4ZWQ6IChbYmQsIEFuXSwgWG4sIG9kKQkJICAgICAgICMKKyMgTWVtb3J5IGluZGlyZWN0IHByZWluZGV4ZWQ6IChbYmQsIEFuLCBYbl0sIG9kKQkJICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZmFkZHJfaW5kX2V4dDoKKwlhZGRxLmwJCSYweDgsJWQxCisJYnNyLmwJCWZldGNoX2RyZWcJCSMgZmV0Y2ggYmFzZSBhcmVnCisJbW92LmwJCSVkMCwtKCVzcCkKKworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAkJIyBmZXRjaCBleHR3b3JkIGluIGQwCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LmwJCSglc3ApKywlYTAKKworCWJ0c3QJCSYweDgsJWQwCisJYm5lLncJCWZjYWxjX21lbV9pbmQKKworCW1vdi5sCQklZDAsTF9TQ1IxKCVhNikJCSMgaG9sZCBvcHdvcmQKKworCW1vdi5sCQklZDAsJWQxCisJcm9sLncJCSYweDQsJWQxCisJYW5kaS53CQkmMHhmLCVkMQkJIyBleHRyYWN0IGluZGV4IHJlZ25vCisKKyMgY291bnQgb24gZmV0Y2hfZHJlZygpIG5vdCB0byBhbHRlciBhMC4uLgorCWJzci5sCQlmZXRjaF9kcmVnCQkjIGZldGNoIGluZGV4CisKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LmwJCUxfU0NSMSglYTYpLCVkMgkJIyBmZXRjaCBvcHdvcmQKKworCWJ0c3QJCSYweGIsJWQyCQkjIGlzIGl0IHdvcmQgb3IgbG9uZz8KKwlibmUuYgkJZmFpaThfbG9uZworCWV4dC5sCQklZDAJCQkjIHNpZ24gZXh0ZW5kIHdvcmQgaW5kZXgKK2ZhaWk4X2xvbmc6CisJbW92LmwJCSVkMiwlZDEKKwlyb2wudwkJJjB4NywlZDEKKwlhbmRpLmwJCSYweDMsJWQxCQkjIGV4dHJhY3Qgc2NhbGUgdmFsdWUKKworCWxzbC5sCQklZDEsJWQwCQkJIyBzaGlmdCBpbmRleCBieSBzY2FsZQorCisJZXh0Yi5sCQklZDIJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCWFkZC5sCQklZDIsJWQwCQkJIyBpbmRleCArIGRpc3AKKwlhZGQubAkJJWQwLCVhMAkJCSMgQW4gKyAoaW5kZXggKyBkaXNwKQorCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBvbGQgZDIKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFic29sdXRlIHNob3J0OiAoWFhYKS5XICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZmFic19zaG9ydDoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQJCSMgZmV0Y2ggc2hvcnQgYWRkcmVzcworCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyByZXR1cm4gPGVhPiBpbiBhMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBYnNvbHV0ZSBsb25nOiAoWFhYKS5MICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmYWJzX2xvbmc6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIGxvbmcgYWRkcmVzcworCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi5sCQklZDAsJWEwCQkJIyByZXR1cm4gPGVhPiBpbiBhMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFByb2dyYW0gY291bnRlciBpbmRpcmVjdCB3LyBkaXNwbGFjZW1lbnQ6IChkMTYsIFBDKSAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmcGNfaW5kOgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAkJIyBmZXRjaCB3b3JkIGRpc3BsYWNlbWVudAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKworCWFkZC5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIHBjICsgZDE2CisKKyMgX2ltZW1fcmVhZF93b3JkKCkgaW5jcmVhc2VkIHRoZSBleHR3cHRyIGJ5IDIuIG5lZWQgdG8gYWRqdXN0IGhlcmUuCisJc3VicS5sCQkmMHgyLCVhMAkJIyBhZGp1c3QgPGVhPgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFBDIGluZGlyZWN0IHcvIGluZGV4KDgtYml0IGRpc3BsYWNlbWVudCk6IChkOCwgUEMsIEFuKSAjCisjICIgICAgICIgICAgIHcvICAgIiAgKGJhc2UgZGlzcGxhY2VtZW50KTogKGJkLCBQQywgQW4pICAjCisjIFBDIG1lbW9yeSBpbmRpcmVjdCBwb3N0aW5kZXhlZDogKFtiZCwgUENdLCBYbiwgb2QpICAgICAjCisjIFBDIG1lbW9yeSBpbmRpcmVjdCBwcmVpbmRleGVkOiAoW2JkLCBQQywgWG5dLCBvZCkgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmcGNfaW5kX2V4dDoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQJCSMgZmV0Y2ggZXh0IHdvcmQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBwdXQgYmFzZSBpbiBhMAorCXN1YnEubAkJJjB4MiwlYTAJCSMgYWRqdXN0IGJhc2UKKworCWJ0c3QJCSYweDgsJWQwCQkjIGlzIGRpc3Agb25seSA4IGJpdHM/CisJYm5lLncJCWZjYWxjX21lbV9pbmQJCSMgY2FsYyBtZW1vcnkgaW5kaXJlY3QKKworCW1vdi5sCQklZDAsTF9TQ1IxKCVhNikJCSMgc3RvcmUgb3B3b3JkCisKKwltb3YubAkJJWQwLCVkMQkJCSMgbWFrZSBleHR3b3JkIGNvcHkKKwlyb2wudwkJJjB4NCwlZDEJCSMgcm90YXRlIHJlZyBudW0gaW50byBwbGFjZQorCWFuZGkudwkJJjB4ZiwlZDEJCSMgZXh0cmFjdCByZWdpc3RlciBudW1iZXIKKworIyBjb3VudCBvbiBmZXRjaF9kcmVnKCkgbm90IHRvIGFsdGVyIGEwLi4uCisJYnNyLmwJCWZldGNoX2RyZWcJCSMgZmV0Y2ggaW5kZXgKKworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YubAkJTF9TQ1IxKCVhNiksJWQyCQkjIGZldGNoIG9wd29yZAorCisJYnRzdAkJJjB4YiwlZDIJCSMgaXMgaW5kZXggd29yZCBvciBsb25nPworCWJuZS5iCQlmcGlpOF9sb25nCQkjIGxvbmcKKwlleHQubAkJJWQwCQkJIyBzaWduIGV4dGVuZCB3b3JkIGluZGV4CitmcGlpOF9sb25nOgorCW1vdi5sCQklZDIsJWQxCisJcm9sLncJCSYweDcsJWQxCQkjIHJvdGF0ZSBzY2FsZSB2YWx1ZSBpbnRvIHBsYWNlCisJYW5kaS5sCQkmMHgzLCVkMQkJIyBleHRyYWN0IHNjYWxlIHZhbHVlCisKKwlsc2wubAkJJWQxLCVkMAkJCSMgc2hpZnQgaW5kZXggYnkgc2NhbGUKKworCWV4dGIubAkJJWQyCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKwlhZGQubAkJJWQyLCVkMAkJCSMgZGlzcCArIGluZGV4CisJYWRkLmwJCSVkMCwlYTAJCQkjIEFuICsgKGluZGV4ICsgZGlzcCkKKworCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgdGVtcCByZWdpc3RlcgorCXJ0cworCisjIGQyID0gaW5kZXgKKyMgZDMgPSBiYXNlCisjIGQ0ID0gb2QKKyMgZDUgPSBleHR3b3JkCitmY2FsY19tZW1faW5kOgorCWJ0c3QJCSYweDYsJWQwCQkjIGlzIHRoZSBpbmRleCBzdXBwcmVzc2VkPworCWJlcS5iCQlmY2FsY19pbmRleAorCisJbW92bS5sCQkmMHgzYzAwLC0oJXNwKQkJIyBzYXZlIGQyLWQ1CisKKwltb3YubAkJJWQwLCVkNQkJCSMgcHV0IGV4dHdvcmQgaW4gZDUKKwltb3YubAkJJWEwLCVkMwkJCSMgcHV0IGJhc2UgaW4gZDMKKworCWNsci5sCQklZDIJCQkjIHllcywgc28gaW5kZXggPSAwCisJYnJhLmIJCWZiYXNlX3N1cHBfY2sKKworIyBpbmRleDoKK2ZjYWxjX2luZGV4OgorCW1vdi5sCQklZDAsTF9TQ1IxKCVhNikJCSMgc2F2ZSBkMCAob3B3b3JkKQorCWJmZXh0dQkJJWQweyYxNjomNH0sJWQxCQkjIGZldGNoIGRyZWcgaW5kZXgKKwlic3IubAkJZmV0Y2hfZHJlZworCisJbW92bS5sCQkmMHgzYzAwLC0oJXNwKQkJIyBzYXZlIGQyLWQ1CisJbW92LmwJCSVkMCwlZDIJCQkjIHB1dCBpbmRleCBpbiBkMgorCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDUKKwltb3YubAkJJWEwLCVkMworCisJYnRzdAkJJjB4YiwlZDUJCSMgaXMgaW5kZXggd29yZCBvciBsb25nPworCWJuZS5iCQlmbm9fZXh0CisJZXh0LmwJCSVkMgorCitmbm9fZXh0OgorCWJmZXh0dQkJJWQ1eyYyMTomMn0sJWQwCisJbHNsLmwJCSVkMCwlZDIKKworIyBiYXNlIGFkZHJlc3MgKHBhc3NlZCBhcyBwYXJhbWV0ZXIgaW4gZDMpOgorIyB3ZSBjbGVhciB0aGUgdmFsdWUgaGVyZSBpZiBpdCBzaG91bGQgYWN0dWFsbHkgYmUgc3VwcHJlc3NlZC4KK2ZiYXNlX3N1cHBfY2s6CisJYnRzdAkJJjB4NywlZDUJCSMgaXMgdGhlIGJkIHN1cHByZXNzZWQ/CisJYmVxLmIJCWZub19iYXNlX3N1cAorCWNsci5sCQklZDMKKworIyBiYXNlIGRpc3BsYWNlbWVudDoKK2Zub19iYXNlX3N1cDoKKwliZmV4dHUJCSVkNXsmMjY6JjJ9LCVkMAkJIyBnZXQgYmQgc2l6ZQorIwliZXEubAkJZm1vdm1fZXJyb3IJCSMgaWYgKHNpemUgPT0gMCkgaXQncyByZXNlcnZlZAorCisJY21waS5iCQklZDAsJjB4MgorCWJsdC5iCQlmbm9fYmQKKwliZXEuYgkJZmdldF93b3JkX2JkCisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJZmNlYV9pYWNjCQkjIHllcworCisJYnJhLmIJCWZjaGtfaW5kCisKK2ZnZXRfd29yZF9iZDoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJZmNlYV9pYWNjCQkjIHllcworCisJZXh0LmwJCSVkMAkJCSMgc2lnbiBleHRlbmQgYmQKKworZmNoa19pbmQ6CisJYWRkLmwJCSVkMCwlZDMJCQkjIGJhc2UgKz0gYmQKKworIyBvdXRlciBkaXNwbGFjZW1lbnQ6Citmbm9fYmQ6CisJYmZleHR1CQklZDV7JjMwOiYyfSwlZDAJCSMgaXMgb2Qgc3VwcHJlc3NlZD8KKwliZXEudwkJZmFpaV9iZAorCisJY21waS5iCQklZDAsJjB4MgorCWJsdC5iCQlmbnVsbF9vZAorCWJlcS5iCQlmd29yZF9vZAorCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWZjZWFfaWFjYwkJIyB5ZXMKKworCWJyYS5iCQlmYWRkX3RoZW0KKworZndvcmRfb2Q6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWZjZWFfaWFjYwkJIyB5ZXMKKworCWV4dC5sCQklZDAJCQkjIHNpZ24gZXh0ZW5kIG9kCisJYnJhLmIJCWZhZGRfdGhlbQorCitmbnVsbF9vZDoKKwljbHIubAkJJWQwCisKK2ZhZGRfdGhlbToKKwltb3YubAkJJWQwLCVkNAorCisJYnRzdAkJJjB4MiwlZDUJCSMgcHJlIG9yIHBvc3QgaW5kZXhpbmc/CisJYmVxLmIJCWZwcmVfaW5kZXhlZAorCisJbW92LmwJCSVkMywlYTAKKwlic3IubAkJX2RtZW1fcmVhZF9sb25nCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZGZldGNoIGZhaWw/CisJYm5lLncJCWZjZWFfZXJyCQkjIHllcworCisJYWRkLmwJCSVkMiwlZDAJCQkjIDxlYT4gKz0gaW5kZXgKKwlhZGQubAkJJWQ0LCVkMAkJCSMgPGVhPiArPSBvZAorCWJyYS5iCQlmZG9uZV9lYQorCitmcHJlX2luZGV4ZWQ6CisJYWRkLmwJCSVkMiwlZDMJCQkjIHByZWluZGV4aW5nCisJbW92LmwJCSVkMywlYTAKKwlic3IubAkJX2RtZW1fcmVhZF9sb25nCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZGZldGNoIGZhaWw/CisJYm5lLncJCWZjZWFfZXJyCQkjIHllcworCisJYWRkLmwJCSVkNCwlZDAJCQkjIGVhICs9IG9kCisJYnJhLmIJCWZkb25lX2VhCisKK2ZhaWlfYmQ6CisJYWRkLmwJCSVkMiwlZDMJCQkjIGVhID0gKGJhc2UgKyBiZCkgKyBpbmRleAorCW1vdi5sCQklZDMsJWQwCitmZG9uZV9lYToKKwltb3YubAkJJWQwLCVhMAorCisJbW92bS5sCQkoJXNwKSssJjB4MDAzYwkJIyByZXN0b3JlIGQyLWQ1CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZmNlYV9lcnI6CisJbW92LmwJCSVkMywlYTAKKworCW1vdm0ubAkJKCVzcCkrLCYweDAwM2MJCSMgcmVzdG9yZSBkMi1kNQorCW1vdi53CQkmMHgwMTAxLCVkMAorCWJyYS5sCQlpZWFfZGFjYworCitmY2VhX2lhY2M6CisJbW92bS5sCQkoJXNwKSssJjB4MDAzYwkJIyByZXN0b3JlIGQyLWQ1CisJYnJhLmwJCWllYV9pYWNjCisKK2Ztb3ZtX291dF9lcnI6CisJYnNyLmwJCXJlc3RvcmUKKwltb3YudwkJJjB4MDBlMSwlZDAKKwlicmEuYgkJZm1vdm1fZXJyCisKK2Ztb3ZtX2luX2VycjoKKwlic3IubAkJcmVzdG9yZQorCW1vdi53CQkmMHgwMTYxLCVkMAorCitmbW92bV9lcnI6CisJbW92LmwJCUxfU0NSMSglYTYpLCVhMAorCWJyYS5sCQlpZWFfZGFjYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZtb3ZtX2N0cmwoKTogZW11bGF0ZSBmbW92bS5sIG9mIGNvbnRyb2wgcmVnaXN0ZXJzIGluc3RyCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9pbWVtX3JlYWRfbG9uZygpIC0gcmVhZCBsb25nd29yZCBmcm9tIG1lbW9yeQkJCSMKKyMJaWVhX2lhY2MoKSAtIF9pbWVtX3JlYWRfbG9uZygpIGZhaWxlZDsgZXJyb3IgcmVjb3ZlcnkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUlmIF9pbWVtX3JlYWRfbG9uZygpIGRvZXNuJ3QgZmFpbDoJCQkJIworIwkJVVNFUl9GUENSKGE2KSAgPSBuZXcgRlBDUiB2YWx1ZQkJCQkjCisjCQlVU0VSX0ZQU1IoYTYpICA9IG5ldyBGUFNSIHZhbHVlCQkJCSMKKyMJCVVTRVJfRlBJQVIoYTYpID0gbmV3IEZQSUFSIHZhbHVlCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRGVjb2RlIHRoZSBpbnN0cnVjdGlvbiB0eXBlIGJ5IGxvb2tpbmcgYXQgdGhlIGV4dGVuc2lvbiB3b3JkCSMKKyMgaW4gb3JkZXIgdG8gc2VlIGhvdyBtYW55IGNvbnRyb2wgcmVnaXN0ZXJzIHRvIGZldGNoIGZyb20gbWVtb3J5LgkjCisjIEZldGNoIHRoZW0gdXNpbmcgX2ltZW1fcmVhZF9sb25nKCkuIElmIHRoaXMgZmV0Y2ggZmFpbHMsIGV4aXQgdGhyb3VnaAkjCisjIHRoZSBzcGVjaWFsIGFjY2VzcyBlcnJvciBleGl0IGhhbmRsZXIgaWVhX2lhY2MoKS4JCQkjCisjCQkJCQkJCQkJIworIyBJbnN0cnVjdGlvbiB3b3JkIGRlY29kaW5nOgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCWZtb3ZlbS5sICM8ZGF0YT4sIHtGUElBUiZ8RlBDUiZ8RlBTUn0JCQkJIworIwkJCQkJCQkJCSMKKyMJCVdPUkQxCQkJV09SRDIJCQkJIworIwkxMTExIDAwMTAgMDAgMTExMTAwCTEwMCQgJCQwMCAwMDAwIDAwMDAJCQkjCisjCQkJCQkJCQkJIworIwkkJCQgKDEwMCk6IEZQQ1IJCQkJCQkJIworIwkgICAgKDAxMCk6IEZQU1IJCQkJCQkJIworIwkgICAgKDAwMSk6IEZQSUFSCQkJCQkJIworIwkgICAgKDAwMCk6IEZQSUFSCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJZm1vdm1fY3RybAorZm1vdm1fY3RybDoKKwltb3YuYgkJRVhDX0VYVFdPUkQoJWE2KSwlZDAJIyBmZXRjaCByZWcgc2VsZWN0IGJpdHMKKwljbXBpLmIJCSVkMCwmMHg5YwkJIyBmcGNyICYgZnBzciAmIGZwaWFyID8KKwliZXEudwkJZmN0cmxfaW5fNwkJIyB5ZXMKKwljbXBpLmIJCSVkMCwmMHg5OAkJIyBmcGNyICYgZnBzciA/CisJYmVxLncJCWZjdHJsX2luXzYJCSMgeWVzCisJY21waS5iCQklZDAsJjB4OTQJCSMgZnBjciAmIGZwaWFyID8KKwliZXEuYgkJZmN0cmxfaW5fNQkJIyB5ZXMKKworIyBmbW92ZW0ubCAjPGRhdGE+LCBmcHNyL2ZwaWFyCitmY3RybF9pbl8zOgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBGUFNSIGZyb20gbWVtCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LmwJCSVkMCxVU0VSX0ZQU1IoJWE2KQkjIHN0b3JlIG5ldyBGUFNSIHRvIHN0YWNrCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQSUFSIGZyb20gbWVtCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LmwJCSVkMCxVU0VSX0ZQSUFSKCVhNikJIyBzdG9yZSBuZXcgRlBJQVIgdG8gc3RhY2sKKwlydHMKKworIyBmbW92ZW0ubCAjPGRhdGE+LCBmcGNyL2ZwaWFyCitmY3RybF9pbl81OgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBGUENSIGZyb20gbWVtCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LmwJCSVkMCxVU0VSX0ZQQ1IoJWE2KQkjIHN0b3JlIG5ldyBGUENSIHRvIHN0YWNrCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQSUFSIGZyb20gbWVtCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LmwJCSVkMCxVU0VSX0ZQSUFSKCVhNikJIyBzdG9yZSBuZXcgRlBJQVIgdG8gc3RhY2sKKwlydHMKKworIyBmbW92ZW0ubCAjPGRhdGE+LCBmcGNyL2Zwc3IKK2ZjdHJsX2luXzY6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQQ1IgZnJvbSBtZW0KKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YubAkJJWQwLFVTRVJfRlBDUiglYTYpCSMgc3RvcmUgbmV3IEZQQ1IgdG8gbWVtCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQU1IgZnJvbSBtZW0KKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YubAkJJWQwLFVTRVJfRlBTUiglYTYpCSMgc3RvcmUgbmV3IEZQU1IgdG8gbWVtCisJcnRzCisKKyMgZm1vdmVtLmwgIzxkYXRhPiwgZnBjci9mcHNyL2ZwaWFyCitmY3RybF9pbl83OgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBGUENSIGZyb20gbWVtCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LmwJCSVkMCxVU0VSX0ZQQ1IoJWE2KQkjIHN0b3JlIG5ldyBGUENSIHRvIG1lbQorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBGUFNSIGZyb20gbWVtCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LmwJCSVkMCxVU0VSX0ZQU1IoJWE2KQkjIHN0b3JlIG5ldyBGUFNSIHRvIG1lbQorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBGUElBUiBmcm9tIG1lbQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi5sCQklZDAsVVNFUl9GUElBUiglYTYpCSMgc3RvcmUgbmV3IEZQSUFSIHRvIG1lbQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9kY2FsY19lYSgpOiBjYWxjIGNvcnJlY3QgPGVhPiBmcm9tIDxlYT4gc3RhY2tlZCBvbiBleGNlcHRpb24JIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJaW5jX2FyZWcoKSAtIGluY3JlbWVudCBhbiBhZGRyZXNzIHJlZ2lzdGVyCQkJIworIwlkZWNfYXJlZygpIC0gZGVjcmVtZW50IGFuIGFkZHJlc3MgcmVnaXN0ZXIJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IG51bWJlciBvZiBieXRlcyB0byBhZGp1c3QgPGVhPiBieQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIyAiRHVtbXkiIENBTEN1bGF0ZSBFZmZlY3RpdmUgQWRkcmVzczoJCQkJCSMKKyMJVGhlIHN0YWNrZWQgPGVhPiBmb3IgRlAgdW5pbXBsZW1lbnRlZCBpbnN0cnVjdGlvbnMgYW5kIG9wY2xhc3MJIworIwl0d28gcGFja2VkIGluc3RydWN0aW9ucyBpcyBjb3JyZWN0IHdpdGggdGhlIGV4Y2VwdGlvbiBvZi4uLgkjCisjCQkJCQkJCQkJIworIwkxKSAtKEFuKSAgIDogVGhlIHJlZ2lzdGVyIGlzIG5vdCB1cGRhdGVkIHJlZ2FyZGxlc3Mgb2Ygc2l6ZS4JIworIwkJICAgICBBbHNvLCBmb3IgZXh0ZW5kZWQgcHJlY2lzaW9uIGFuZCBwYWNrZWQsIHRoZQkjCisjCQkgICAgIHN0YWNrZWQgPGVhPiB2YWx1ZSBpcyA4IGJ5dGVzIHRvbyBiaWcJCSMKKyMJMikgKEFuKSsgICA6IFRoZSByZWdpc3RlciBpcyBub3QgdXBkYXRlZC4JCQkjCisjCTMpICM8ZGF0YT4gOiBUaGUgdXBwZXIgbG9uZ3dvcmQgb2YgdGhlIGltbWVkaWF0ZSBvcGVyYW5kIGlzCSMKKyMJCSAgICAgc3RhY2tlZCBiLHcsbCBhbmQgcyBzaXplcyBhcmUgY29tcGxldGVseSBzdGFja2VkLgkjCisjCQkgICAgIGQseCwgYW5kIHAgYXJlIG5vdC4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2RjYWxjX2VhCitfZGNhbGNfZWE6CisJbW92LmwJCSVkMCwgJWEwCQkjIG1vdmUgIyBieXRlcyB0byAlYTAKKworCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwgJWQwCSMgZmV0Y2ggb3Bjb2RlIHdvcmQKKwltb3YubAkJJWQwLCAlZDEJCSMgbWFrZSBhIGNvcHkKKworCWFuZGkudwkJJjB4MzgsICVkMAkJIyBleHRyYWN0IG1vZGUgZmllbGQKKwlhbmRpLmwJCSYweDcsICVkMQkJIyBleHRyYWN0IHJlZyAgZmllbGQKKworCWNtcGkuYgkJJWQwLCYweDE4CQkjIGlzIG1vZGUgKEFuKSsgPworCWJlcS5iCQlkY2VhX3BpCQkJIyB5ZXMKKworCWNtcGkuYgkJJWQwLCYweDIwCQkjIGlzIG1vZGUgLShBbikgPworCWJlcS5iCQlkY2VhX3BkCQkJIyB5ZXMKKworCW9yLncJCSVkMSwlZDAJCQkjIGNvbmNhdCBtb2RlLHJlZworCWNtcGkuYgkJJWQwLCYweDNjCQkjIGlzIG1vZGUgIzxkYXRhPj8KKworCWJlcS5iCQlkY2VhX2ltbQkJIyB5ZXMKKworCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgcmV0dXJuIDxlYT4KKwlydHMKKworIyBuZWVkIHRvIHNldCBpbW1lZGlhdGUgZGF0YSBmbGFnIGhlcmUgc2luY2Ugd2UnbGwgbmVlZCB0byBkbworIyBhbiBpbWVtX3JlYWQgdG8gZmV0Y2ggdGhpcyBsYXRlci4KK2RjZWFfaW1tOgorCW1vdi5iCQkmaW1tZWRfZmxnLFNQQ09ORF9GTEcoJWE2KQorCWxlYQkJKFtVU0VSX0ZQSUFSLCVhNl0sMHg0KSwlYTAgIyBubzsgcmV0dXJuIDxlYT4KKwlydHMKKworIyBoZXJlLCB0aGUgPGVhPiBpcyBzdGFja2VkIGNvcnJlY3RseS4gaG93ZXZlciwgd2UgbXVzdCB1cGRhdGUgdGhlCisjIGFkZHJlc3MgcmVnaXN0ZXIuLi4KK2RjZWFfcGk6CisJbW92LmwJCSVhMCwlZDAJCQkjIHBhc3MgYW10IHRvIGluYyBieQorCWJzci5sCQlpbmNfYXJlZwkJIyBpbmMgYWRkciByZWdpc3RlcgorCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAorCXJ0cworCisjIHRoZSA8ZWE+IGlzIHN0YWNrZWQgY29ycmVjdGx5IGZvciBhbGwgYnV0IGV4dGVuZGVkIGFuZCBwYWNrZWQgd2hpY2gKKyMgdGhlIDxlYT5zIGFyZSA4IGJ5dGVzIHRvbyBsYXJnZS4KKyMgaXQgd291bGQgbWFrZSBubyBzZW5zZSB0byBoYXZlIGEgcHJlLWRlY3JlbWVudCB0byBhNyBpbiBzdXBlcnZpc29yCisjIG1vZGUgc28gd2UgZG9uJ3QgZXZlbiB3b3JyeSBhYm91dCB0aGlzIHRyaWNreSBjYXNlIGhlcmUgOiApCitkY2VhX3BkOgorCW1vdi5sCQklYTAsJWQwCQkJIyBwYXNzIGFtdCB0byBkZWMgYnkKKwlic3IubAkJZGVjX2FyZWcJCSMgZGVjIGFkZHIgcmVnaXN0ZXIKKworCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgc3RhY2tlZCA8ZWE+IGlzIGNvcnJlY3QKKworCWNtcGkuYgkJJWQwLCYweGMJCSMgaXMgb3BzaXplIGV4dCBvciBwYWNrZWQ/CisJYmVxLmIJCWRjZWFfcGQyCQkjIHllcworCXJ0cworZGNlYV9wZDI6CisJc3ViLmwJCSYweDgsJWEwCQkjIGNvcnJlY3QgPGVhPgorCW1vdi5sCQklYTAsRVhDX0VBKCVhNikJCSMgcHV0IGNvcnJlY3QgPGVhPiBvbiBzdGFjaworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9jYWxjX2VhX2ZvdXQoKTogY2FsY3VsYXRlIGNvcnJlY3Qgc3RhY2tlZCA8ZWE+IGZvciBleHRlbmRlZAkjCisjCQkJIGFuZCBwYWNrZWQgZGF0YSBvcGNsYXNzIDMgb3BlcmF0aW9ucy4JCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcmV0dXJuIGNvcnJlY3QgZWZmZWN0aXZlIGFkZHJlc3MJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRm9yIG9wY2xhc3MgMyBleHRlbmRlZCBhbmQgcGFja2VkIGRhdGEgb3BlcmF0aW9ucywgdGhlIDxlYT4JIworIyBzdGFja2VkIGZvciB0aGUgZXhjZXB0aW9uIGlzIGluY29ycmVjdCBmb3IgLShhbikgYW5kIChhbikrIGFkZHJlc3NpbmcJIworIyBtb2Rlcy4gQWxzbywgd2hpbGUgd2UncmUgYXQgaXQsIHRoZSBpbmRleCByZWdpc3RlciBpdHNlbGYgbXVzdCBnZXQJIworIyB1cGRhdGVkLgkJCQkJCQkJIworIwlTbywgZm9yIC0oYW4pLCB3ZSBtdXN0IHN1YnRyYWN0IDggb2ZmIG9mIHRoZSBzdGFja2VkIDxlYT4gdmFsdWUJIworIyBhbmQgcmV0dXJuIHRoYXQgdmFsdWUgYXMgdGhlIGNvcnJlY3QgPGVhPiBhbmQgc3RvcmUgdGhhdCB2YWx1ZSBpbiBBbi4JIworIyBGb3IgKGFuKSssIHRoZSBzdGFja2VkIDxlYT4gaXMgY29ycmVjdCBidXQgd2UgbXVzdCBhZGp1c3QgQW4gYnkgKzEyLgkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMgY2FsY19lYSBpcyBjdXJyZW50bHkgdXNlZCB0byByZXRyaWV2ZSB0aGUgY29ycmVjdCA8ZWE+CisjIGZvciBmbW92ZSBvdXRzIG9mIHR5cGUgZXh0ZW5kZWQgYW5kIHBhY2tlZC4KKwlnbG9iYWwJCV9jYWxjX2VhX2ZvdXQKK19jYWxjX2VhX2ZvdXQ6CisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMAkjIGZldGNoIG9wY29kZSB3b3JkCisJbW92LmwJCSVkMCwlZDEJCQkjIG1ha2UgYSBjb3B5CisKKwlhbmRpLncJCSYweDM4LCVkMAkJIyBleHRyYWN0IG1vZGUgZmllbGQKKwlhbmRpLmwJCSYweDcsJWQxCQkjIGV4dHJhY3QgcmVnICBmaWVsZAorCisJY21waS5iCQklZDAsJjB4MTgJCSMgaXMgbW9kZSAoQW4pKyA/CisJYmVxLmIJCWNlYWZfcGkJCQkjIHllcworCisJY21waS5iCQklZDAsJjB4MjAJCSMgaXMgbW9kZSAtKEFuKSA/CisJYmVxLncJCWNlYWZfcGQJCQkjIHllcworCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAorCXJ0cworCisjIChBbikrIDogZXh0ZW5kZWQgYW5kIHBhY2tlZCBmbW92ZSBvdXQKKyMJOiBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAorIwk6ICJBbiIgbm90IHVwZGF0ZWQKK2NlYWZfcGk6CisJbW92LncJCSh0YmxfY2VhZl9waS5iLCVwYywlZDEudyoyKSwlZDEKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCisJam1wCQkodGJsX2NlYWZfcGkuYiwlcGMsJWQxLncqMSkKKworCXN3YmVnCQkmMHg4Cit0YmxfY2VhZl9waToKKwlzaG9ydAkJY2VhZl9waTAgLSB0YmxfY2VhZl9waQorCXNob3J0CQljZWFmX3BpMSAtIHRibF9jZWFmX3BpCisJc2hvcnQJCWNlYWZfcGkyIC0gdGJsX2NlYWZfcGkKKwlzaG9ydAkJY2VhZl9waTMgLSB0YmxfY2VhZl9waQorCXNob3J0CQljZWFmX3BpNCAtIHRibF9jZWFmX3BpCisJc2hvcnQJCWNlYWZfcGk1IC0gdGJsX2NlYWZfcGkKKwlzaG9ydAkJY2VhZl9waTYgLSB0YmxfY2VhZl9waQorCXNob3J0CQljZWFmX3BpNyAtIHRibF9jZWFmX3BpCisKK2NlYWZfcGkwOgorCWFkZGkubAkJJjB4YyxFWENfRFJFR1MrMHg4KCVhNikKKwlydHMKK2NlYWZfcGkxOgorCWFkZGkubAkJJjB4YyxFWENfRFJFR1MrMHhjKCVhNikKKwlydHMKK2NlYWZfcGkyOgorCWFkZC5sCQkmMHhjLCVhMgorCXJ0cworY2VhZl9waTM6CisJYWRkLmwJCSYweGMsJWEzCisJcnRzCitjZWFmX3BpNDoKKwlhZGQubAkJJjB4YywlYTQKKwlydHMKK2NlYWZfcGk1OgorCWFkZC5sCQkmMHhjLCVhNQorCXJ0cworY2VhZl9waTY6CisJYWRkaS5sCQkmMHhjLEVYQ19BNiglYTYpCisJcnRzCitjZWFmX3BpNzoKKwltb3YuYgkJJm1pYTdfZmxnLFNQQ09ORF9GTEcoJWE2KQorCWFkZGkubAkJJjB4YyxFWENfQTcoJWE2KQorCXJ0cworCisjIC0oQW4pIDogZXh0ZW5kZWQgYW5kIHBhY2tlZCBmbW92ZSBvdXQKKyMJOiBzdGFja2VkIDxlYT4gPSBhY3R1YWwgPGVhPiArIDgKKyMJOiAiQW4iIG5vdCB1cGRhdGVkCitjZWFmX3BkOgorCW1vdi53CQkodGJsX2NlYWZfcGQuYiwlcGMsJWQxLncqMiksJWQxCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAorCXN1Yi5sCQkmMHg4LCVhMAorCXN1Yi5sCQkmMHg4LEVYQ19FQSglYTYpCisJam1wCQkodGJsX2NlYWZfcGQuYiwlcGMsJWQxLncqMSkKKworCXN3YmVnCQkmMHg4Cit0YmxfY2VhZl9wZDoKKwlzaG9ydAkJY2VhZl9wZDAgLSB0YmxfY2VhZl9wZAorCXNob3J0CQljZWFmX3BkMSAtIHRibF9jZWFmX3BkCisJc2hvcnQJCWNlYWZfcGQyIC0gdGJsX2NlYWZfcGQKKwlzaG9ydAkJY2VhZl9wZDMgLSB0YmxfY2VhZl9wZAorCXNob3J0CQljZWFmX3BkNCAtIHRibF9jZWFmX3BkCisJc2hvcnQJCWNlYWZfcGQ1IC0gdGJsX2NlYWZfcGQKKwlzaG9ydAkJY2VhZl9wZDYgLSB0YmxfY2VhZl9wZAorCXNob3J0CQljZWFmX3BkNyAtIHRibF9jZWFmX3BkCisKK2NlYWZfcGQwOgorCW1vdi5sCQklYTAsRVhDX0RSRUdTKzB4OCglYTYpCisJcnRzCitjZWFmX3BkMToKKwltb3YubAkJJWEwLEVYQ19EUkVHUysweGMoJWE2KQorCXJ0cworY2VhZl9wZDI6CisJbW92LmwJCSVhMCwlYTIKKwlydHMKK2NlYWZfcGQzOgorCW1vdi5sCQklYTAsJWEzCisJcnRzCitjZWFmX3BkNDoKKwltb3YubAkJJWEwLCVhNAorCXJ0cworY2VhZl9wZDU6CisJbW92LmwJCSVhMCwlYTUKKwlydHMKK2NlYWZfcGQ2OgorCW1vdi5sCQklYTAsRVhDX0E2KCVhNikKKwlydHMKK2NlYWZfcGQ3OgorCW1vdi5sCQklYTAsRVhDX0E3KCVhNikKKwltb3YuYgkJJm1kYTdfZmxnLFNQQ09ORF9GTEcoJWE2KQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9sb2FkX2ZvcCgpOiBsb2FkIG9wZXJhbmQgZm9yIHVuaW1wbGVtZW50ZWQgRlAgZXhjZXB0aW9uCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXNldF90YWdfeCgpIC0gZGV0ZXJtaW5lIGV4dCBwcmVjIG9wdHlwZSB0YWcJCQkjCisjCXNldF90YWdfcygpIC0gZGV0ZXJtaW5lIHNnbCBwcmVjIG9wdHlwZSB0YWcJCQkjCisjCXNldF90YWdfZCgpIC0gZGV0ZXJtaW5lIGRibCBwcmVjIG9wdHlwZSB0YWcJCQkjCisjCXVubm9ybV9maXgoKSAtIGNvbnZlcnQgbm9ybWFsaXplZCBudW1iZXIgdG8gZGVub3JtIG9yIHplcm8JIworIwlub3JtKCkgLSBub3JtYWxpemUgYSBkZW5vcm1hbGl6ZWQgbnVtYmVyCQkJIworIwlnZXRfcGFja2VkKCkgLSBmZXRjaCBhIHBhY2tlZCBvcGVyYW5kIGZyb20gbWVtb3J5CQkjCisjCV9kY2FsY19lYSgpIC0gY2FsY3VsYXRlIDxlYT4sIGZpeGluZyBBbiBpbiBwcm9jZXNzCQkjCisjCQkJCQkJCQkJIworIwlfaW1lbV9yZWFkX3t3b3JkLGxvbmd9KCkgLSByZWFkIGZyb20gaW5zdHJ1Y3Rpb24gbWVtb3J5CQkjCisjCV9kbWVtX3JlYWQoKSAtIHJlYWQgZnJvbSBkYXRhIG1lbW9yeQkJCQkjCisjCV9kbWVtX3JlYWRfe2J5dGUsd29yZCxsb25nfSgpIC0gcmVhZCBmcm9tIGRhdGEgbWVtb3J5CQkjCisjCQkJCQkJCQkJIworIwlmYWNjX2luX3tiLHcsbCxkLHh9KCkgLSBtZW0gcmVhZCBmYWlsZWQ7IHNwZWNpYWwgZXhpdCBwb2ludAkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJZiBtZW1vcnkgYWNjZXNzIGRvZXNuJ3QgZmFpbDoJCQkJCSMKKyMJCUZQX1NSQyhhNikgPSBzb3VyY2Ugb3BlcmFuZCBpbiBleHRlbmRlZCBwcmVjaXNpb24JIworIwkJRlBfRFNUKGE2KSA9IGRlc3RpbmF0aW9uIG9wZXJhbmQgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIFVuaW1wbGVtZW50ZWQgRlAgZXhjZXB0aW9uIGhhbmRsZXIgaW4JIworIyBvcmRlciB0byBsb2FkIHRoZSBzb3VyY2UgYW5kIG1heWJlIGRlc3RpbmF0aW9uIG9wZXJhbmQgaW50bwkJIworIyBGUF9TUkMoYTYpIGFuZCBGUF9EU1QoYTYpLiBJZiB0aGUgaW5zdHJ1Y3Rpb24gd2FzIG9wY2xhc3MgemVybywgbG9hZAkjCisjIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGZyb20gdGhlIEZQIHJlZ2lzdGVyIGZpbGUuIFNldCB0aGUgb3B0eXBlCSMKKyMgdGFncyBmb3IgYm90aCBpZiBkeWFkaWMsIG9uZSBmb3IgbW9uYWRpYy4gSWYgYSBudW1iZXIgaXMgYW4gVU5OT1JNLAkjCisjIGNvbnZlcnQgaXQgdG8gYSBERU5PUk0gb3IgYSBaRVJPLgkJCQkJIworIwlJZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgb3BjbGFzcyB0d28gKG1lbW9yeS0+cmVnKSwgdGhlbiBmZXRjaAkjCisjIHRoZSBkZXN0aW5hdGlvbiBmcm9tIHRoZSByZWdpc3RlciBmaWxlIGFuZCB0aGUgc291cmNlIG9wZXJhbmQgZnJvbQkjCisjIG1lbW9yeS4gVGFnIGFuZCBmaXggYm90aCBhcyBhYm92ZSB3LyBvcGNsYXNzIHplcm8gaW5zdHJ1Y3Rpb25zLgkjCisjCUlmIHRoZSBzb3VyY2Ugb3BlcmFuZCBpcyBieXRlLHdvcmQsbG9uZywgb3Igc2luZ2xlLCBpdCBtYXkgYmUJIworIyBpbiB0aGUgZGF0YSByZWdpc3RlciBmaWxlLiBJZiBpdCdzIGFjdHVhbGx5IG91dCBpbiBtZW1vcnksIHVzZSBvbmUgb2YJIworIyB0aGUgbWVtX3JlYWQoKSByb3V0aW5lcyB0byBmZXRjaCBpdC4gSWYgdGhlIG1lbV9yZWFkKCkgYWNjZXNzIHJldHVybnMJIworIyBhIGZhaWxpbmcgdmFsdWUsIGV4aXQgdGhyb3VnaCB0aGUgc3BlY2lhbCBmYWNjX2luKCkgcm91dGluZSB3aGljaAkjCisjIHdpbGwgY3JlYXRlIGFuIGFjY2VzcyBlcnJvciBleGNlcHRpb24gZnJhbWUgZnJvbSB0aGUgY3VycmVudCBleGNlcHRpb24gIworIyBmcmFtZS4JCQkJCQkJCSMKKyMJSW1tZWRpYXRlIGRhdGEgYW5kIHJlZ3VsYXIgZGF0YSBhY2Nlc3NlcyBhcmUgc2VwYXJhdGVkIGJlY2F1c2UJIworIyBpZiBhbiBpbW1lZGlhdGUgZGF0YSBhY2Nlc3MgZmFpbHMsIHRoZSByZXN1bHRpbmcgZmF1bHQgc3RhdHVzCQkjCisjIGxvbmd3b3JkIHN0YWNrZWQgZm9yIHRoZSBhY2Nlc3MgZXJyb3IgZXhjZXB0aW9uIG11c3QgaGF2ZSB0aGUJCSMKKyMgaW5zdHJ1Y3Rpb24gYml0IHNldC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2xvYWRfZm9wCitfbG9hZF9mb3A6CisKKyMgIDE1ICAgICAxMyAxMiAxMCAgOSA3ICA2ICAgICAgIDAKKyMgLyAgICAgICAgXCAvICAgXCAvICBcIC8gICAgICAgICBcCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyB8IG9wY2xhc3MgfCBSWCAgfCBSWSB8IEVYVEVOU0lPTiB8ICAoMm5kIHdvcmQgb2YgZ2VuZXJhbCBGUCBpbnN0cnVjdGlvbikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisKKyMJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjA6JjN9LCAlZDAgIyBleHRyYWN0IG9wY2xhc3MKKyMJY21waS5iCQklZDAsICYweDIJCSMgd2hpY2ggY2xhc3MgaXMgaXQ/ICgnMDAwLCcwMTAsJzAxMSkKKyMJYmVxLncJCW9wMDEwCQkJIyBoYW5kbGUgPGVhPiAtPiBmcG4KKyMJYmd0LncJCW9wMDExCQkJIyBoYW5kbGUgZnBuIC0+IDxlYT4KKworIyB3ZSdyZSBub3QgdXNpbmcgb3AwMTEgZm9yIG5vdy4uLgorCWJ0c3QJCSYweDYsRVhDX0NNRFJFRyglYTYpCisJYm5lLmIJCW9wMDEwCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgT1BDTEFTUyAnMDAwOiByZWcgLT4gcmVnICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK29wMDAwOgorCW1vdi5iCQkxK0VYQ19DTURSRUcoJWE2KSwlZDAJIyBmZXRjaCBleHRlbnNpb24gd29yZCBsbworCWJ0c3QJCSYweDUsJWQwCQkjIHRlc3RpbmcgZXh0ZW5zaW9uIGJpdHMKKwliZXEuYgkJb3AwMDBfc3JjCQkjIChiaXQgNSA9PSAwKSA9PiBtb25hZGljCisJYnRzdAkJJjB4NCwlZDAJCSMgKGJpdCA1ID09IDEpCisJYmVxLmIJCW9wMDAwX2RzdAkJIyAoYml0IDQgPT0gMCkgPT4gZHlhZGljCisJYW5kLncJCSYweDAwN2YsJWQwCQkjIGV4dHJhY3QgZXh0ZW5zaW9uIGJpdHMgezY6MH0KKwljbXBpLncJCSVkMCwmMHgwMDM4CQkjIGlzIGl0IGFuIGZjbXAgKGR5YWRpYykgPworCWJuZS5iCQlvcDAwMF9zcmMJCSMgaXQncyBhbiBmY21wCisKK29wMDAwX2RzdDoKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sICVkMCAjIGV4dHJhY3QgZHN0IGZpZWxkCisJYnNyLmwJCWxvYWRfZnBuMgkJIyBmZXRjaCBkc3QgZnByZWcgaW50byBGUF9EU1QKKworCWJzci5sCQlzZXRfdGFnX3gJCSMgZ2V0IGRzdCBvcHR5cGUgdGFnCisKKwljbXBpLmIJCSVkMCwgJlVOTk9STQkJIyBpcyBkc3QgZnByZWcgYW4gVU5OT1JNPworCWJlcS5iCQlvcDAwMF9kc3RfdW5ub3JtCSMgeWVzCitvcDAwMF9kc3RfY29udDoKKwltb3YuYgkJJWQwLCBEVEFHKCVhNikJCSMgc3RvcmUgdGhlIGRzdCBvcHR5cGUgdGFnCisKK29wMDAwX3NyYzoKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmMzomM30sICVkMCAjIGV4dHJhY3Qgc3JjIGZpZWxkCisJYnNyLmwJCWxvYWRfZnBuMQkJIyBmZXRjaCBzcmMgZnByZWcgaW50byBGUF9TUkMKKworCWJzci5sCQlzZXRfdGFnX3gJCSMgZ2V0IHNyYyBvcHR5cGUgdGFnCisKKwljbXBpLmIJCSVkMCwgJlVOTk9STQkJIyBpcyBzcmMgZnByZWcgYW4gVU5OT1JNPworCWJlcS5iCQlvcDAwMF9zcmNfdW5ub3JtCSMgeWVzCitvcDAwMF9zcmNfY29udDoKKwltb3YuYgkJJWQwLCBTVEFHKCVhNikJCSMgc3RvcmUgdGhlIHNyYyBvcHR5cGUgdGFnCisJcnRzCisKK29wMDAwX2RzdF91bm5vcm06CisJYnNyLmwJCXVubm9ybV9maXgJCSMgZml4IHRoZSBkc3QgVU5OT1JNCisJYnJhLmIJCW9wMDAwX2RzdF9jb250CitvcDAwMF9zcmNfdW5ub3JtOgorCWJzci5sCQl1bm5vcm1fZml4CQkjIGZpeCB0aGUgc3JjIFVOTk9STQorCWJyYS5iCQlvcDAwMF9zcmNfY29udAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBPUENMQVNTICcwMTA6IDxlYT4gLT4gcmVnICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitvcDAxMDoKKwltb3YudwkJRVhDX0NNRFJFRyglYTYpLCVkMAkjIGZldGNoIGV4dGVuc2lvbiB3b3JkCisJYnRzdAkJJjB4NSwlZDAJCSMgdGVzdGluZyBleHRlbnNpb24gYml0cworCWJlcS5iCQlvcDAxMF9zcmMJCSMgKGJpdCA1ID09IDApID0+IG1vbmFkaWMKKwlidHN0CQkmMHg0LCVkMAkJIyAoYml0IDUgPT0gMSkKKwliZXEuYgkJb3AwMTBfZHN0CQkjIChiaXQgNCA9PSAwKSA9PiBkeWFkaWMKKwlhbmQudwkJJjB4MDA3ZiwlZDAJCSMgZXh0cmFjdCBleHRlbnNpb24gYml0cyB7NjowfQorCWNtcGkudwkJJWQwLCYweDAwMzgJCSMgaXMgaXQgYW4gZmNtcCAoZHlhZGljKSA/CisJYm5lLmIJCW9wMDEwX3NyYwkJIyBpdCdzIGFuIGZjbXAKKworb3AwMTBfZHN0OgorCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwgJWQwICMgZXh0cmFjdCBkc3QgZmllbGQKKwlic3IubAkJbG9hZF9mcG4yCQkjIGZldGNoIGRzdCBmcHJlZyBwdHIKKworCWJzci5sCQlzZXRfdGFnX3gJCSMgZ2V0IGRzdCB0eXBlIHRhZworCisJY21waS5iCQklZDAsICZVTk5PUk0JCSMgaXMgZHN0IGZwcmVnIGFuIFVOTk9STT8KKwliZXEuYgkJb3AwMTBfZHN0X3Vubm9ybQkjIHllcworb3AwMTBfZHN0X2NvbnQ6CisJbW92LmIJCSVkMCwgRFRBRyglYTYpCQkjIHN0b3JlIHRoZSBkc3Qgb3B0eXBlIHRhZworCitvcDAxMF9zcmM6CisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjM6JjN9LCAlZDAgIyBleHRyYWN0IHNyYyB0eXBlIGZpZWxkCisKKwliZmV4dHUJCUVYQ19PUFdPUkQoJWE2KXsmMTA6JjN9LCAlZDEgIyBleHRyYWN0IDxlYT4gbW9kZSBmaWVsZAorCWJuZS53CQlmZXRjaF9mcm9tX21lbQkJIyBzcmMgb3AgaXMgaW4gbWVtb3J5CisKK29wMDEwX2RyZWc6CisJY2xyLmIJCVNUQUcoJWE2KQkJIyBlaXRoZXIgTk9STSBvciBaRVJPCisJYmZleHR1CQlFWENfT1BXT1JEKCVhNil7JjEzOiYzfSwgJWQxICMgZXh0cmFjdCBzcmMgcmVnIGZpZWxkCisKKwltb3YudwkJKHRibF9vcDAxMF9kcmVnLmIsJXBjLCVkMC53KjIpLCAlZDAgIyBqbXAgYmFzZWQgb24gb3B0eXBlCisJam1wCQkodGJsX29wMDEwX2RyZWcuYiwlcGMsJWQwLncqMSkgIyBmZXRjaCBzcmMgZnJvbSBkcmVnCisKK29wMDEwX2RzdF91bm5vcm06CisJYnNyLmwJCXVubm9ybV9maXgJCSMgZml4IHRoZSBkc3QgVU5OT1JNCisJYnJhLmIJCW9wMDEwX2RzdF9jb250CisKKwlzd2JlZwkJJjB4OAordGJsX29wMDEwX2RyZWc6CisJc2hvcnQJCW9wZF9sb25nCS0gdGJsX29wMDEwX2RyZWcKKwlzaG9ydAkJb3BkX3NnbAkJLSB0Ymxfb3AwMTBfZHJlZworCXNob3J0CQl0Ymxfb3AwMTBfZHJlZwktIHRibF9vcDAxMF9kcmVnCisJc2hvcnQJCXRibF9vcDAxMF9kcmVnCS0gdGJsX29wMDEwX2RyZWcKKwlzaG9ydAkJb3BkX3dvcmQJLSB0Ymxfb3AwMTBfZHJlZworCXNob3J0CQl0Ymxfb3AwMTBfZHJlZwktIHRibF9vcDAxMF9kcmVnCisJc2hvcnQJCW9wZF9ieXRlCS0gdGJsX29wMDEwX2RyZWcKKwlzaG9ydAkJdGJsX29wMDEwX2RyZWcJLSB0Ymxfb3AwMTBfZHJlZworCisjCisjIExPTkc6IGNhbiBiZSBlaXRoZXIgTk9STSBvciBaRVJPLi4uCisjCitvcGRfbG9uZzoKKwlic3IubAkJZmV0Y2hfZHJlZwkJIyBmZXRjaCBsb25nIGluIGQwCisJZm1vdi5sCQklZDAsICVmcDAJCSMgbG9hZCBhIGxvbmcKKwlmbW92bS54CQkmMHg4MCwgRlBfU1JDKCVhNikJIyByZXR1cm4gc3JjIG9wIGluIEZQX1NSQworCWZiZXEudwkJb3BkX2xvbmdfemVybwkJIyBsb25nIGlzIGEgWkVSTworCXJ0cworb3BkX2xvbmdfemVybzoKKwltb3YuYgkJJlpFUk8sIFNUQUcoJWE2KQkjIHNldCBaRVJPIG9wdHlwZSBmbGFnCisJcnRzCisKKyMKKyMgV09SRDogY2FuIGJlIGVpdGhlciBOT1JNIG9yIFpFUk8uLi4KKyMKK29wZF93b3JkOgorCWJzci5sCQlmZXRjaF9kcmVnCQkjIGZldGNoIHdvcmQgaW4gZDAKKwlmbW92LncJCSVkMCwgJWZwMAkJIyBsb2FkIGEgd29yZAorCWZtb3ZtLngJCSYweDgwLCBGUF9TUkMoJWE2KQkjIHJldHVybiBzcmMgb3AgaW4gRlBfU1JDCisJZmJlcS53CQlvcGRfd29yZF96ZXJvCQkjIFdPUkQgaXMgYSBaRVJPCisJcnRzCitvcGRfd29yZF96ZXJvOgorCW1vdi5iCQkmWkVSTywgU1RBRyglYTYpCSMgc2V0IFpFUk8gb3B0eXBlIGZsYWcKKwlydHMKKworIworIyBCWVRFOiBjYW4gYmUgZWl0aGVyIE5PUk0gb3IgWkVSTy4uLgorIworb3BkX2J5dGU6CisJYnNyLmwJCWZldGNoX2RyZWcJCSMgZmV0Y2ggd29yZCBpbiBkMAorCWZtb3YuYgkJJWQwLCAlZnAwCQkjIGxvYWQgYSBieXRlCisJZm1vdm0ueAkJJjB4ODAsIEZQX1NSQyglYTYpCSMgcmV0dXJuIHNyYyBvcCBpbiBGUF9TUkMKKwlmYmVxLncJCW9wZF9ieXRlX3plcm8JCSMgYnl0ZSBpcyBhIFpFUk8KKwlydHMKK29wZF9ieXRlX3plcm86CisJbW92LmIJCSZaRVJPLCBTVEFHKCVhNikJIyBzZXQgWkVSTyBvcHR5cGUgZmxhZworCXJ0cworCisjCisjIFNHTDogY2FuIGJlIGVpdGhlciBOT1JNLCBERU5PUk0sIFpFUk8sIElORiwgUU5BTiBvciBTTkFOIGJ1dCBub3QgVU5OT1JNCisjCisjIHNlcGFyYXRlIFNOQU5zIGFuZCBERU5PUk1zIHNvIHRoZXkgY2FuIGJlIGxvYWRlZCB3LyBzcGVjaWFsIGNhcmUuCisjIGFsbCBvdGhlcnMgY2FuIHNpbXBseSBiZSBtb3ZlZCAiaW4iIHVzaW5nIGZtb3ZlLgorIworb3BkX3NnbDoKKwlic3IubAkJZmV0Y2hfZHJlZwkJIyBmZXRjaCBzZ2wgaW4gZDAKKwltb3YubAkJJWQwLExfU0NSMSglYTYpCisKKwlsZWEJCUxfU0NSMSglYTYpLCAlYTAJIyBwYXNzOiBwdHIgdG8gdGhlIHNnbAorCWJzci5sCQlzZXRfdGFnX3MJCSMgZGV0ZXJtaW5lIHNnbCB0eXBlCisJbW92LmIJCSVkMCwgU1RBRyglYTYpCQkjIHNhdmUgdGhlIHNyYyB0YWcKKworCWNtcGkuYgkJJWQwLCAmU05BTgkJIyBpcyBpdCBhbiBTTkFOPworCWJlcS53CQlnZXRfc2dsX3NuYW4JCSMgeWVzCisKKwljbXBpLmIJCSVkMCwgJkRFTk9STQkJIyBpcyBpdCBhIERFTk9STT8KKwliZXEudwkJZ2V0X3NnbF9kZW5vcm0JCSMgeWVzCisKKwlmbW92LnMJCSglYTApLCAlZnAwCQkjIG5vLCBzbyBjYW4gbG9hZCBpdCByZWd1bGFyCisJZm1vdm0ueAkJJjB4ODAsIEZQX1NSQyglYTYpCSMgcmV0dXJuIHNyYyBvcCBpbiBGUF9TUkMKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmV0Y2hfZnJvbV9tZW0oKToJCQkJCQkJIworIyAtIHNyYyBpcyBvdXQgaW4gbWVtb3J5LiBtdXN0OgkJCQkJCSMKKyMJKDEpIGNhbGMgZWEgLSBtdXN0IHJlYWQgQUZURVIgeW91IGtub3cgdGhlIHNyYyB0eXBlIHNpbmNlCSMKKyMJCSAgICAgIGlmIHRoZSBlYSBpcyAtKCkgb3IgKCkrLCBuZWVkIHRvIGtub3cgIyBvZiBieXRlcy4JIworIwkoMikgcmVhZCBpdCBpbiBmcm9tIGVpdGhlciB1c2VyIG9yIHN1cGVydmlzb3Igc3BhY2UJCSMKKyMJKDMpIGlmIChiIHx8IHcgfHwgbCkgdGhlbiBzaW1wbHkgcmVhZCBpbgkJCSMKKyMJICAgIGlmIChzIHx8IGQgfHwgeCkgdGhlbiBjaGVjayBmb3IgU05BTixVTk5PUk0sREVOT1JNCQkjCisjCSAgICBpZiAocGFja2VkKSB0aGVuIHB1bnQgZm9yIG5vdwkJCQkjCisjIElOUFVUOgkJCQkJCQkJIworIwklZDAgOiBzcmMgdHlwZSBmaWVsZAkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2ZldGNoX2Zyb21fbWVtOgorCWNsci5iCQlTVEFHKCVhNikJCSMgZWl0aGVyIE5PUk0gb3IgWkVSTworCisJbW92LncJCSh0YmxfZnBfdHlwZS5iLCVwYywlZDAudyoyKSwgJWQwICMgaW5kZXggYnkgc3JjIHR5cGUgZmllbGQKKwlqbXAJCSh0YmxfZnBfdHlwZS5iLCVwYywlZDAudyoxKQorCisJc3diZWcJCSYweDgKK3RibF9mcF90eXBlOgorCXNob3J0CQlsb2FkX2xvbmcJLSB0YmxfZnBfdHlwZQorCXNob3J0CQlsb2FkX3NnbAktIHRibF9mcF90eXBlCisJc2hvcnQJCWxvYWRfZXh0CS0gdGJsX2ZwX3R5cGUKKwlzaG9ydAkJbG9hZF9wYWNrZWQJLSB0YmxfZnBfdHlwZQorCXNob3J0CQlsb2FkX3dvcmQJLSB0YmxfZnBfdHlwZQorCXNob3J0CQlsb2FkX2RibAktIHRibF9mcF90eXBlCisJc2hvcnQJCWxvYWRfYnl0ZQktIHRibF9mcF90eXBlCisJc2hvcnQJCXRibF9mcF90eXBlCS0gdGJsX2ZwX3R5cGUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbG9hZCBhIExPTkcgaW50byAlZnAwOgkJIworIwktbnVtYmVyIGNhbid0IGZhdWx0CQkjCisjCSgxKSBjYWxjIGVhCQkJIworIwkoMikgcmVhZCA0IGJ5dGVzIGludG8gTF9TQ1IxCSMKKyMJKDMpIGZtb3YubCBpbnRvICVmcDAJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitsb2FkX2xvbmc6CisJbW92cS5sCQkmMHg0LCAlZDAJCSMgcGFzczogNCAoYnl0ZXMpCisJYnNyLmwJCV9kY2FsY19lYQkJIyBjYWxjIDxlYT47IDxlYT4gaW4gJWEwCisKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmaW1tZWRfZmxnCisJYmVxLmIJCWxvYWRfbG9uZ19pbW1lZAorCisJYnNyLmwJCV9kbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBzcmMgb3BlcmFuZCBmcm9tIG1lbW9yeQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRmZXRjaCBmYWlsPworCWJuZS5sCQlmYWNjX2luX2wJCSMgeWVzCisKK2xvYWRfbG9uZ19jb250OgorCWZtb3YubAkJJWQwLCAlZnAwCQkjIHJlYWQgaW50byAlZnAwO2NvbnZlcnQgdG8geHByZWMKKwlmbW92bS54CQkmMHg4MCwgRlBfU1JDKCVhNikJIyByZXR1cm4gc3JjIG9wIGluIEZQX1NSQworCisJZmJlcS53CQlsb2FkX2xvbmdfemVybwkJIyBzcmMgb3AgaXMgYSBaRVJPCisJcnRzCitsb2FkX2xvbmdfemVybzoKKwltb3YuYgkJJlpFUk8sIFNUQUcoJWE2KQkjIHNldCBvcHR5cGUgdGFnIHRvIFpFUk8KKwlydHMKKworbG9hZF9sb25nX2ltbWVkOgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggc3JjIG9wZXJhbmQgaW1tZWQgZGF0YQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlmdW5pbXBfaWFjYwkJIyB5ZXMKKwlicmEuYgkJbG9hZF9sb25nX2NvbnQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbG9hZCBhIFdPUkQgaW50byAlZnAwOgkJIworIwktbnVtYmVyIGNhbid0IGZhdWx0CQkjCisjCSgxKSBjYWxjIGVhCQkJIworIwkoMikgcmVhZCAyIGJ5dGVzIGludG8gTF9TQ1IxCSMKKyMJKDMpIGZtb3YudyBpbnRvICVmcDAJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitsb2FkX3dvcmQ6CisJbW92cS5sCQkmMHgyLCAlZDAJCSMgcGFzczogMiAoYnl0ZXMpCisJYnNyLmwJCV9kY2FsY19lYQkJIyBjYWxjIDxlYT47IDxlYT4gaW4gJWEwCisKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmaW1tZWRfZmxnCisJYmVxLmIJCWxvYWRfd29yZF9pbW1lZAorCisJYnNyLmwJCV9kbWVtX3JlYWRfd29yZAkJIyBmZXRjaCBzcmMgb3BlcmFuZCBmcm9tIG1lbW9yeQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRmZXRjaCBmYWlsPworCWJuZS5sCQlmYWNjX2luX3cJCSMgeWVzCisKK2xvYWRfd29yZF9jb250OgorCWZtb3YudwkJJWQwLCAlZnAwCQkjIHJlYWQgaW50byAlZnAwO2NvbnZlcnQgdG8geHByZWMKKwlmbW92bS54CQkmMHg4MCwgRlBfU1JDKCVhNikJIyByZXR1cm4gc3JjIG9wIGluIEZQX1NSQworCisJZmJlcS53CQlsb2FkX3dvcmRfemVybwkJIyBzcmMgb3AgaXMgYSBaRVJPCisJcnRzCitsb2FkX3dvcmRfemVybzoKKwltb3YuYgkJJlpFUk8sIFNUQUcoJWE2KQkjIHNldCBvcHR5cGUgdGFnIHRvIFpFUk8KKwlydHMKKworbG9hZF93b3JkX2ltbWVkOgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQJCSMgZmV0Y2ggc3JjIG9wZXJhbmQgaW1tZWQgZGF0YQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlmdW5pbXBfaWFjYwkJIyB5ZXMKKwlicmEuYgkJbG9hZF93b3JkX2NvbnQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbG9hZCBhIEJZVEUgaW50byAlZnAwOgkJIworIwktbnVtYmVyIGNhbid0IGZhdWx0CQkjCisjCSgxKSBjYWxjIGVhCQkJIworIwkoMikgcmVhZCAxIGJ5dGUgaW50byBMX1NDUjEJIworIwkoMykgZm1vdi5iIGludG8gJWZwMAkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2xvYWRfYnl0ZToKKwltb3ZxLmwJCSYweDEsICVkMAkJIyBwYXNzOiAxIChieXRlKQorCWJzci5sCQlfZGNhbGNfZWEJCSMgY2FsYyA8ZWE+OyA8ZWE+IGluICVhMAorCisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJmltbWVkX2ZsZworCWJlcS5iCQlsb2FkX2J5dGVfaW1tZWQKKworCWJzci5sCQlfZG1lbV9yZWFkX2J5dGUJCSMgZmV0Y2ggc3JjIG9wZXJhbmQgZnJvbSBtZW1vcnkKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkZmV0Y2ggZmFpbD8KKwlibmUubAkJZmFjY19pbl9iCQkjIHllcworCitsb2FkX2J5dGVfY29udDoKKwlmbW92LmIJCSVkMCwgJWZwMAkJIyByZWFkIGludG8gJWZwMDtjb252ZXJ0IHRvIHhwcmVjCisJZm1vdm0ueAkJJjB4ODAsIEZQX1NSQyglYTYpCSMgcmV0dXJuIHNyYyBvcCBpbiBGUF9TUkMKKworCWZiZXEudwkJbG9hZF9ieXRlX3plcm8JCSMgc3JjIG9wIGlzIGEgWkVSTworCXJ0cworbG9hZF9ieXRlX3plcm86CisJbW92LmIJCSZaRVJPLCBTVEFHKCVhNikJIyBzZXQgb3B0eXBlIHRhZyB0byBaRVJPCisJcnRzCisKK2xvYWRfYnl0ZV9pbW1lZDoKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCQkjIGZldGNoIHNyYyBvcGVyYW5kIGltbWVkIGRhdGEKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJZnVuaW1wX2lhY2MJCSMgeWVzCisJYnJhLmIJCWxvYWRfYnl0ZV9jb250CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGxvYWQgYSBTR0wgaW50byAlZnAwOgkJCSMKKyMJLW51bWJlciBjYW4ndCBmYXVsdAkJIworIwkoMSkgY2FsYyBlYQkJCSMKKyMJKDIpIHJlYWQgNCBieXRlcyBpbnRvIExfU0NSMQkjCisjCSgzKSBmbW92LnMgaW50byAlZnAwCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbG9hZF9zZ2w6CisJbW92cS5sCQkmMHg0LCAlZDAJCSMgcGFzczogNCAoYnl0ZXMpCisJYnNyLmwJCV9kY2FsY19lYQkJIyBjYWxjIDxlYT47IDxlYT4gaW4gJWEwCisKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmaW1tZWRfZmxnCisJYmVxLmIJCWxvYWRfc2dsX2ltbWVkCisKKwlic3IubAkJX2RtZW1fcmVhZF9sb25nCQkjIGZldGNoIHNyYyBvcGVyYW5kIGZyb20gbWVtb3J5CisJbW92LmwJCSVkMCwgTF9TQ1IxKCVhNikJIyBzdG9yZSBzcmMgb3Agb24gc3RhY2sKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkZmV0Y2ggZmFpbD8KKwlibmUubAkJZmFjY19pbl9sCQkjIHllcworCitsb2FkX3NnbF9jb250OgorCWxlYQkJTF9TQ1IxKCVhNiksICVhMAkjIHBhc3M6IHB0ciB0byBzZ2wgc3JjIG9wCisJYnNyLmwJCXNldF90YWdfcwkJIyBkZXRlcm1pbmUgc3JjIHR5cGUgdGFnCisJbW92LmIJCSVkMCwgU1RBRyglYTYpCQkjIHNhdmUgc3JjIG9wdHlwZSB0YWcgb24gc3RhY2sKKworCWNtcGkuYgkJJWQwLCAmREVOT1JNCQkjIGlzIGl0IGEgc2dsIERFTk9STT8KKwliZXEudwkJZ2V0X3NnbF9kZW5vcm0JCSMgeWVzCisKKwljbXBpLmIJCSVkMCwgJlNOQU4JCSMgaXMgaXQgYSBzZ2wgU05BTj8KKwliZXEudwkJZ2V0X3NnbF9zbmFuCQkjIHllcworCisJZm1vdi5zCQlMX1NDUjEoJWE2KSwgJWZwMAkjIHJlYWQgaW50byAlZnAwO2NvbnZlcnQgdG8geHByZWMKKwlmbW92bS54CQkmMHg4MCwgRlBfU1JDKCVhNikJIyByZXR1cm4gc3JjIG9wIGluIEZQX1NSQworCXJ0cworCitsb2FkX3NnbF9pbW1lZDoKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIHNyYyBvcGVyYW5kIGltbWVkIGRhdGEKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJZnVuaW1wX2lhY2MJCSMgeWVzCisJYnJhLmIJCWxvYWRfc2dsX2NvbnQKKworIyBtdXN0IGNvbnZlcnQgc2dsIGRlbm9ybSBmb3JtYXQgdG8gYW4gWHByZWMgZGVub3JtIGZtdCBzdWl0YWJsZSBmb3IKKyMgbm9ybWFsaXphdGlvbi4uLgorIyAlYTAgOiBwb2ludHMgdG8gc2dsIGRlbm9ybQorZ2V0X3NnbF9kZW5vcm06CisJY2xyLncJCUZQX1NSQ19FWCglYTYpCisJYmZleHR1CQkoJWEwKXsmOTomMjN9LCAlZDAJIyBmZXRjaCBzZ2wgaGkoX21hbnRpc3NhKQorCWxzbC5sCQkmMHg4LCAlZDAKKwltb3YubAkJJWQwLCBGUF9TUkNfSEkoJWE2KQkjIHNldCBleHQgaGkoX21hbnRpc3NhKQorCWNsci5sCQlGUF9TUkNfTE8oJWE2KQkJIyBzZXQgZXh0IGxvKF9tYW50aXNzYSkKKworCWNsci53CQlGUF9TUkNfRVgoJWE2KQorCWJ0c3QJCSYweDcsICglYTApCQkjIGlzIHNnbiBiaXQgc2V0PworCWJlcS5iCQlzZ2xfZG5ybV9ub3JtCisJYnNldAkJJjB4NywgRlBfU1JDX0VYKCVhNikJIyBzZXQgc2duIG9mIHhwcmVjIHZhbHVlCisKK3NnbF9kbnJtX25vcm06CisJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSBudW1iZXIKKwltb3YudwkJJjB4M2Y4MSwgJWQxCQkjIHhwcmVjIGV4cCA9IDB4M2Y4MQorCXN1Yi53CQklZDAsICVkMQkJIyBleHAgPSAweDNmODEgLSBzaGZ0IGFtdC4KKwlvci53CQklZDEsIEZQX1NSQ19FWCglYTYpCSMge3NnbixleHB9CisKKwltb3YuYgkJJk5PUk0sIFNUQUcoJWE2KQkjIGZpeCBzcmMgdHlwZSB0YWcKKwlydHMKKworIyBjb252ZXJ0IHNnbCB0byBleHQgU05BTgorIyAlYTAgOiBwb2ludHMgdG8gc2dsIFNOQU4KK2dldF9zZ2xfc25hbjoKKwltb3YudwkJJjB4N2ZmZiwgRlBfU1JDX0VYKCVhNikgIyBzZXQgZXhwIG9mIFNOQU4KKwliZmV4dHUJCSglYTApeyY5OiYyM30sICVkMAorCWxzbC5sCQkmMHg4LCAlZDAJCSMgZXh0cmFjdCBhbmQgaW5zZXJ0IGhpKG1hbikKKwltb3YubAkJJWQwLCBGUF9TUkNfSEkoJWE2KQorCWNsci5sCQlGUF9TUkNfTE8oJWE2KQorCisJYnRzdAkJJjB4NywgKCVhMCkJCSMgc2VlIGlmIHNpZ24gb2YgU05BTiBpcyBzZXQKKwliZXEuYgkJbm9fc2dsX3NuYW5fc2duCisJYnNldAkJJjB4NywgRlBfU1JDX0VYKCVhNikKK25vX3NnbF9zbmFuX3NnbjoKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbG9hZCBhIERCTCBpbnRvICVmcDA6CQkJIworIwktbnVtYmVyIGNhbid0IGZhdWx0CQkjCisjCSgxKSBjYWxjIGVhCQkJIworIwkoMikgcmVhZCA4IGJ5dGVzIGludG8gTF9TQ1IoMSwyKSMKKyMJKDMpIGZtb3YuZCBpbnRvICVmcDAJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitsb2FkX2RibDoKKwltb3ZxLmwJCSYweDgsICVkMAkJIyBwYXNzOiA4IChieXRlcykKKwlic3IubAkJX2RjYWxjX2VhCQkjIGNhbGMgPGVhPjsgPGVhPiBpbiAlYTAKKworCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZpbW1lZF9mbGcKKwliZXEuYgkJbG9hZF9kYmxfaW1tZWQKKworCWxlYQkJTF9TQ1IxKCVhNiksICVhMQkjIHBhc3M6IHB0ciB0byBpbnB1dCBkYmwgdG1wIHNwYWNlCisJbW92cS5sCQkmMHg4LCAlZDAJCSMgcGFzczogIyBieXRlcyB0byByZWFkCisJYnNyLmwJCV9kbWVtX3JlYWQJCSMgZmV0Y2ggc3JjIG9wZXJhbmQgZnJvbSBtZW1vcnkKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkZmV0Y2ggZmFpbD8KKwlibmUubAkJZmFjY19pbl9kCQkjIHllcworCitsb2FkX2RibF9jb250OgorCWxlYQkJTF9TQ1IxKCVhNiksICVhMAkjIHBhc3M6IHB0ciB0byBpbnB1dCBkYmwKKwlic3IubAkJc2V0X3RhZ19kCQkjIGRldGVybWluZSBzcmMgdHlwZSB0YWcKKwltb3YuYgkJJWQwLCBTVEFHKCVhNikJCSMgc2V0IHNyYyBvcHR5cGUgdGFnCisKKwljbXBpLmIJCSVkMCwgJkRFTk9STQkJIyBpcyBpdCBhIGRibCBERU5PUk0/CisJYmVxLncJCWdldF9kYmxfZGVub3JtCQkjIHllcworCisJY21waS5iCQklZDAsICZTTkFOCQkjIGlzIGl0IGEgZGJsIFNOQU4/CisJYmVxLncJCWdldF9kYmxfc25hbgkJIyB5ZXMKKworCWZtb3YuZAkJTF9TQ1IxKCVhNiksICVmcDAJIyByZWFkIGludG8gJWZwMDtjb252ZXJ0IHRvIHhwcmVjCisJZm1vdm0ueAkJJjB4ODAsIEZQX1NSQyglYTYpCSMgcmV0dXJuIHNyYyBvcCBpbiBGUF9TUkMKKwlydHMKKworbG9hZF9kYmxfaW1tZWQ6CisJbGVhCQlMX1NDUjEoJWE2KSwgJWExCSMgcGFzczogcHRyIHRvIGlucHV0IGRibCB0bXAgc3BhY2UKKwltb3ZxLmwJCSYweDgsICVkMAkJIyBwYXNzOiAjIGJ5dGVzIHRvIHJlYWQKKwlic3IubAkJX2ltZW1fcmVhZAkJIyBmZXRjaCBzcmMgb3BlcmFuZCBmcm9tIG1lbW9yeQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlmdW5pbXBfaWFjYwkJIyB5ZXMKKwlicmEuYgkJbG9hZF9kYmxfY29udAorCisjIG11c3QgY29udmVydCBkYmwgZGVub3JtIGZvcm1hdCB0byBhbiBYcHJlYyBkZW5vcm0gZm10IHN1aXRhYmxlIGZvcgorIyBub3JtYWxpemF0aW9uLi4uCisjICVhMCA6IGxvYy4gb2YgZGJsIGRlbm9ybQorZ2V0X2RibF9kZW5vcm06CisJY2xyLncJCUZQX1NSQ19FWCglYTYpCisJYmZleHR1CQkoJWEwKXsmMTI6JjMxfSwgJWQwCSMgZmV0Y2ggaGkoX21hbnRpc3NhKQorCW1vdi5sCQklZDAsIEZQX1NSQ19ISSglYTYpCisJYmZleHR1CQk0KCVhMCl7JjExOiYyMX0sICVkMAkjIGZldGNoIGxvKF9tYW50aXNzYSkKKwltb3YubAkJJjB4YiwgJWQxCisJbHNsLmwJCSVkMSwgJWQwCisJbW92LmwJCSVkMCwgRlBfU1JDX0xPKCVhNikKKworCWJ0c3QJCSYweDcsICglYTApCQkjIGlzIHNnbiBiaXQgc2V0PworCWJlcS5iCQlkYmxfZG5ybV9ub3JtCisJYnNldAkJJjB4NywgRlBfU1JDX0VYKCVhNikJIyBzZXQgc2duIG9mIHhwcmVjIHZhbHVlCisKK2RibF9kbnJtX25vcm06CisJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSBudW1iZXIKKwltb3YudwkJJjB4M2MwMSwgJWQxCQkjIHhwcmVjIGV4cCA9IDB4M2MwMQorCXN1Yi53CQklZDAsICVkMQkJIyBleHAgPSAweDNjMDEgLSBzaGZ0IGFtdC4KKwlvci53CQklZDEsIEZQX1NSQ19FWCglYTYpCSMge3NnbixleHB9CisKKwltb3YuYgkJJk5PUk0sIFNUQUcoJWE2KQkjIGZpeCBzcmMgdHlwZSB0YWcKKwlydHMKKworIyBjb252ZXJ0IGRibCB0byBleHQgU05BTgorIyAlYTAgOiBwb2ludHMgdG8gZGJsIFNOQU4KK2dldF9kYmxfc25hbjoKKwltb3YudwkJJjB4N2ZmZiwgRlBfU1JDX0VYKCVhNikgIyBzZXQgZXhwIG9mIFNOQU4KKworCWJmZXh0dQkJKCVhMCl7JjEyOiYzMX0sICVkMAkjIGZldGNoIGhpKF9tYW50aXNzYSkKKwltb3YubAkJJWQwLCBGUF9TUkNfSEkoJWE2KQorCWJmZXh0dQkJNCglYTApeyYxMTomMjF9LCAlZDAJIyBmZXRjaCBsbyhfbWFudGlzc2EpCisJbW92LmwJCSYweGIsICVkMQorCWxzbC5sCQklZDEsICVkMAorCW1vdi5sCQklZDAsIEZQX1NSQ19MTyglYTYpCisKKwlidHN0CQkmMHg3LCAoJWEwKQkJIyBzZWUgaWYgc2lnbiBvZiBTTkFOIGlzIHNldAorCWJlcS5iCQlub19kYmxfc25hbl9zZ24KKwlic2V0CQkmMHg3LCBGUF9TUkNfRVgoJWE2KQorbm9fZGJsX3NuYW5fc2duOgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGxvYWQgYSBYcHJlYyBpbnRvICVmcDA6CQkJIworIwktbnVtYmVyIGNhbid0IGZhdWx0CQkJIworIwkoMSkgY2FsYyBlYQkJCQkjCisjCSgyKSByZWFkIDEyIGJ5dGVzIGludG8gTF9TQ1IoMSwyKQkjCisjCSgzKSBmbW92LnggaW50byAlZnAwCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbG9hZF9leHQ6CisJbW92LmwJCSYweGMsICVkMAkJIyBwYXNzOiAxMiAoYnl0ZXMpCisJYnNyLmwJCV9kY2FsY19lYQkJIyBjYWxjIDxlYT4KKworCWxlYQkJRlBfU1JDKCVhNiksICVhMQkjIHBhc3M6IHB0ciB0byBpbnB1dCBleHQgdG1wIHNwYWNlCisJbW92LmwJCSYweGMsICVkMAkJIyBwYXNzOiAjIG9mIGJ5dGVzIHRvIHJlYWQKKwlic3IubAkJX2RtZW1fcmVhZAkJIyBmZXRjaCBzcmMgb3BlcmFuZCBmcm9tIG1lbW9yeQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRmZXRjaCBmYWlsPworCWJuZS5sCQlmYWNjX2luX3gJCSMgeWVzCisKKwlsZWEJCUZQX1NSQyglYTYpLCAlYTAJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCisJYnNyLmwJCXNldF90YWdfeAkJIyBkZXRlcm1pbmUgc3JjIHR5cGUgdGFnCisKKwljbXBpLmIJCSVkMCwgJlVOTk9STQkJIyBpcyB0aGUgc3JjIG9wIGFuIFVOTk9STT8KKwliZXEuYgkJbG9hZF9leHRfdW5ub3JtCQkjIHllcworCisJbW92LmIJCSVkMCwgU1RBRyglYTYpCQkjIHN0b3JlIHRoZSBzcmMgb3B0eXBlIHRhZworCXJ0cworCitsb2FkX2V4dF91bm5vcm06CisJYnNyLmwJCXVubm9ybV9maXgJCSMgZml4IHRoZSBzcmMgVU5OT1JNCisJbW92LmIJCSVkMCwgU1RBRyglYTYpCQkjIHN0b3JlIHRoZSBzcmMgb3B0eXBlIHRhZworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGxvYWQgYSBwYWNrZWQgaW50byAlZnAwOgkJCSMKKyMJLW51bWJlciBjYW4ndCBmYXVsdAkJCSMKKyMJKDEpIGNhbGMgZWEJCQkJIworIwkoMikgcmVhZCAxMiBieXRlcyBpbnRvIExfU0NSKDEsMiwzKQkjCisjCSgzKSBmbW92LnggaW50byAlZnAwCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbG9hZF9wYWNrZWQ6CisJYnNyLmwJCWdldF9wYWNrZWQKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIHNyYyBvcAorCWJzci5sCQlzZXRfdGFnX3gJCSMgZGV0ZXJtaW5lIHNyYyB0eXBlIHRhZworCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgdGhlIHNyYyBvcCBhbiBVTk5PUk0gWkVSTz8KKwliZXEuYgkJbG9hZF9wYWNrZWRfdW5ub3JtCSMgeWVzCisKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQkJIyBzdG9yZSB0aGUgc3JjIG9wdHlwZSB0YWcKKwlydHMKKworbG9hZF9wYWNrZWRfdW5ub3JtOgorCWJzci5sCQl1bm5vcm1fZml4CQkjIGZpeCB0aGUgVU5OT1JNIFpFUk8KKwltb3YuYgkJJWQwLFNUQUcoJWE2KQkJIyBzdG9yZSB0aGUgc3JjIG9wdHlwZSB0YWcKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmb3V0KCk6IG1vdmUgZnJvbSBmcCByZWdpc3RlciB0byBtZW1vcnkgb3IgZGF0YSByZWdpc3RlcgkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfcm91bmQoKSAtIG5lZWRlZCB0byBjcmVhdGUgRVhPUCBmb3Igc2dsL2RibCBwcmVjaXNpb24JCSMKKyMJbm9ybSgpIC0gbmVlZGVkIHRvIGNyZWF0ZSBFWE9QIGZvciBleHRlbmRlZCBwcmVjaXNpb24JCSMKKyMJb3ZmX3JlcygpIC0gY3JlYXRlIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0IGZvciBzZ2wvZGJsIHByZWNpc2lvbiMKKyMJdW5mX3JlcygpIC0gY3JlYXRlIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdCBmb3Igc2dsL2RibCBwcmVjLgkjCisjCWRzdF9kYmwoKSAtIGNyZWF0ZSByb3VuZGVkIGRibCBwcmVjaXNpb24gcmVzdWx0LgkJIworIwlkc3Rfc2dsKCkgLSBjcmVhdGUgcm91bmRlZCBzZ2wgcHJlY2lzaW9uIHJlc3VsdC4JCSMKKyMJZmV0Y2hfZHJlZygpIC0gZmV0Y2ggZHluYW1pYyBrLWZhY3RvciByZWcgZm9yIHBhY2tlZC4JCSMKKyMJYmluZGVjKCkgLSBjb252ZXJ0IEZQIGJpbmFyeSBudW1iZXIgdG8gcGFja2VkIG51bWJlci4JCSMKKyMJX21lbV93cml0ZSgpIC0gd3JpdGUgZGF0YSB0byBtZW1vcnkuCQkJCSMKKyMJX21lbV93cml0ZTIoKSAtIHdyaXRlIGRhdGEgdG8gbWVtb3J5IHVubGVzcyBzdXB2IG1vZGUgLShhNykgZXhjLiMKKyMJX2RtZW1fd3JpdGVfe2J5dGUsd29yZCxsb25nfSgpIC0gd3JpdGUgZGF0YSB0byBtZW1vcnkuCQkjCisjCXN0b3JlX2RyZWdfe2IsdyxsfSgpIC0gc3RvcmUgZGF0YSB0byBkYXRhIHJlZ2lzdGVyIGZpbGUuCSMKKyMJZmFjY19vdXRfe2IsdyxsLGQseH0oKSAtIGRhdGEgYWNjZXNzIGVycm9yIG9jY3VycmVkLgkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlkMCA9IHJvdW5kIHByZWMsbW9kZQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA6IGludGVybWVkaWF0ZSB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgcmVzdWx0IGlmCQkjCisjCSAgICAgIE9WRkwvVU5GTCBvY2N1cnJlZCBmb3IgYSBzZ2wgb3IgZGJsIG9wZXJhbmQJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoaXMgcm91dGluZSBpcyBhY2Nlc3NlZCBieSBtYW55IGhhbmRsZXJzIHRoYXQgbmVlZCB0byBkbyBhbgkjCisjIG9wY2xhc3MgdGhyZWUgbW92ZSBvZiBhbiBvcGVyYW5kIG91dCB0byBtZW1vcnkuCQkJIworIwlEZWNvZGUgYW4gZm1vdmUgb3V0IChvcGNsYXNzIDMpIGluc3RydWN0aW9uIHRvIGRldGVybWluZSBpZgkjCisjIGl0J3MgYix3LGwscyxkLHgsIG9yIHAgaW4gc2l6ZS4gYix3LGwgY2FuIGJlIHN0b3JlZCB0byBlaXRoZXIgYSBkYXRhCSMKKyMgcmVnaXN0ZXIgb3IgbWVtb3J5LiBUaGUgYWxnb3JpdGhtIHVzZXMgYSBzdGFuZGFyZCAiZm1vdmUiIHRvIGNyZWF0ZQkjCisjIHRoZSByb3VuZGVkIHJlc3VsdC4gQWxzbywgc2luY2UgZXhjZXB0aW9ucyBhcmUgZGlzYWJsZWQsIHRoaXMgYWxzbwkjCisjIGNyZWF0ZSB0aGUgY29ycmVjdCBPUEVSUiBkZWZhdWx0IHJlc3VsdCBpZiBhcHByb3ByaWF0ZS4JCSMKKyMJRm9yIHNnbCBvciBkYmwgcHJlY2lzaW9uLCBvdmVyZmxvdyBvciB1bmRlcmZsb3cgY2FuIG9jY3VyLiBJZgkjCisjIGVpdGhlciBvY2N1cnMgYW5kIGlzIGVuYWJsZWQsIHRoZSBFWE9QLgkJCQkjCisjCUZvciBleHRlbmRlZCBwcmVjaXNpb24sIHRoZSBzdGFja2VkIDxlYT4gbXVzdCBiZSBmaXhlZCBhbG9uZwkjCisjIHcvIHRoZSBhZGRyZXNzIGluZGV4IHJlZ2lzdGVyIGFzIGFwcHJvcHJpYXRlIHcvIF9jYWxjX2VhX2ZvdXQoKS4gSWYJIworIyB0aGUgc291cmNlIGlzIGEgZGVub3JtIGFuZCBpZiB1bmRlcmZsb3cgaXMgZW5hYmxlZCwgYW4gRVhPUCBtdXN0IGJlCSMKKyMgY3JlYXRlZC4JCQkJCQkJCSMKKyMJRm9yIHBhY2tlZCwgdGhlIGstZmFjdG9yIG11c3QgYmUgZmV0Y2hlZCBmcm9tIHRoZSBpbnN0cnVjdGlvbgkjCisjIHdvcmQgb3IgYSBkYXRhIHJlZ2lzdGVyLiBUaGUgPGVhPiBtdXN0IGJlIGZpeGVkIGFzIHcvIGV4dGVuZGVkCSMKKyMgcHJlY2lzaW9uLiBUaGVuLCBiaW5kZWMoKSBpcyBjYWxsZWQgdG8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZQkJIworIyBwYWNrZWQgcmVzdWx0LgkJCQkJCQkjCisjCUlmIGF0IGFueSB0aW1lIGFuIGFjY2VzcyBlcnJvciBpcyBmbGFnZ2VkIGJ5IG9uZSBvZiB0aGUgbW92ZS0JIworIyB0by1tZW1vcnkgcm91dGluZXMsIHRoZW4gYSBzcGVjaWFsIGV4aXQgbXVzdCBiZSBtYWRlIHNvIHRoYXQgdGhlCSMKKyMgYWNjZXNzIGVycm9yIGNhbiBiZSBoYW5kbGVkIHByb3Blcmx5LgkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJZm91dAorZm91dDoKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmMzomM30sJWQxICMgZXh0cmFjdCBkc3QgZm10CisJbW92LncJCSh0YmxfZm91dC5iLCVwYywlZDEudyoyKSwlYTEgIyB1c2UgYXMgaW5kZXgKKwlqbXAJCSh0YmxfZm91dC5iLCVwYywlYTEpCSMganVtcCB0byByb3V0aW5lCisKKwlzd2JlZwkJJjB4OAordGJsX2ZvdXQ6CisJc2hvcnQJCWZvdXRfbG9uZwktCXRibF9mb3V0CisJc2hvcnQJCWZvdXRfc2dsCS0JdGJsX2ZvdXQKKwlzaG9ydAkJZm91dF9leHQJLQl0YmxfZm91dAorCXNob3J0CQlmb3V0X3BhY2sJLQl0YmxfZm91dAorCXNob3J0CQlmb3V0X3dvcmQJLQl0YmxfZm91dAorCXNob3J0CQlmb3V0X2RibAktCXRibF9mb3V0CisJc2hvcnQJCWZvdXRfYnl0ZQktCXRibF9mb3V0CisJc2hvcnQJCWZvdXRfcGFjawktCXRibF9mb3V0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGZtb3ZlLmIgb3V0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBPbmx5ICJVbmltcGxlbWVudGVkIERhdGEgVHlwZSIgZXhjZXB0aW9ucyBlbnRlciBoZXJlLiBUaGUgb3BlcmFuZAorIyBpcyBlaXRoZXIgYSBERU5PUk0gb3IgYSBOT1JNLgorZm91dF9ieXRlOgorCXRzdC5iCQlTVEFHKCVhNikJCSMgaXMgb3BlcmFuZCBub3JtYWxpemVkPworCWJuZS5iCQlmb3V0X2J5dGVfZGVub3JtCSMgbm8KKworCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIGxvYWQgdmFsdWUKKworZm91dF9ieXRlX25vcm06CisJZm1vdi5sCQklZDAsJWZwY3IJCSMgaW5zZXJ0IHJuZCBwcmVjLG1vZGUKKworCWZtb3YuYgkJJWZwMCwlZDAJCSMgZXhlYyBtb3ZlIG91dCB3LyBjb3JyZWN0IHJuZCBtb2RlCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWZtb3YubAkJJWZwc3IsJWQxCQkjIGZldGNoIEZQU1IKKwlvci53CQklZDEsMitVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgbmV3IGV4YyxhY2NydWVkIGJpdHMKKworCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IGRzdCBtb2RlCisJYW5kaS5iCQkmMHgzOCwlZDEJCSMgaXMgbW9kZSA9PSAwPyAoRHJlZyBkc3QpCisJYmVxLmIJCWZvdXRfYnl0ZV9kbgkJIyBtdXN0IHNhdmUgdG8gaW50ZWdlciByZWdmaWxlCisKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0CisJYnNyLmwJCV9kbWVtX3dyaXRlX2J5dGUJIyB3cml0ZSBieXRlCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X2IJCSMgeWVzCisKKwlydHMKKworZm91dF9ieXRlX2RuOgorCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IERuCisJYW5kaS53CQkmMHg3LCVkMQorCWJzci5sCQlzdG9yZV9kcmVnX2IKKwlydHMKKworZm91dF9ieXRlX2Rlbm9ybToKKwltb3YubAkJU1JDX0VYKCVhMCksJWQxCisJYW5kaS5sCQkmMHg4MDAwMDAwMCwlZDEJCSMga2VlcCBERU5PUk0gc2lnbgorCW9yaS5sCQkmMHgwMDgwMDAwMCwlZDEJCSMgbWFrZSBzbWFsbGVzdCBzZ2wKKwlmbW92LnMJCSVkMSwlZnAwCisJYnJhLmIJCWZvdXRfYnl0ZV9ub3JtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGZtb3ZlLncgb3V0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBPbmx5ICJVbmltcGxlbWVudGVkIERhdGEgVHlwZSIgZXhjZXB0aW9ucyBlbnRlciBoZXJlLiBUaGUgb3BlcmFuZAorIyBpcyBlaXRoZXIgYSBERU5PUk0gb3IgYSBOT1JNLgorZm91dF93b3JkOgorCXRzdC5iCQlTVEFHKCVhNikJCSMgaXMgb3BlcmFuZCBub3JtYWxpemVkPworCWJuZS5iCQlmb3V0X3dvcmRfZGVub3JtCSMgbm8KKworCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIGxvYWQgdmFsdWUKKworZm91dF93b3JkX25vcm06CisJZm1vdi5sCQklZDAsJWZwY3IJCSMgaW5zZXJ0IHJuZCBwcmVjOm1vZGUKKworCWZtb3YudwkJJWZwMCwlZDAJCSMgZXhlYyBtb3ZlIG91dCB3LyBjb3JyZWN0IHJuZCBtb2RlCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWZtb3YubAkJJWZwc3IsJWQxCQkjIGZldGNoIEZQU1IKKwlvci53CQklZDEsMitVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgbmV3IGV4YyxhY2NydWVkIGJpdHMKKworCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IGRzdCBtb2RlCisJYW5kaS5iCQkmMHgzOCwlZDEJCSMgaXMgbW9kZSA9PSAwPyAoRHJlZyBkc3QpCisJYmVxLmIJCWZvdXRfd29yZF9kbgkJIyBtdXN0IHNhdmUgdG8gaW50ZWdlciByZWdmaWxlCisKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0CisJYnNyLmwJCV9kbWVtX3dyaXRlX3dvcmQJIyB3cml0ZSB3b3JkCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X3cJCSMgeWVzCisKKwlydHMKKworZm91dF93b3JkX2RuOgorCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IERuCisJYW5kaS53CQkmMHg3LCVkMQorCWJzci5sCQlzdG9yZV9kcmVnX3cKKwlydHMKKworZm91dF93b3JkX2Rlbm9ybToKKwltb3YubAkJU1JDX0VYKCVhMCksJWQxCisJYW5kaS5sCQkmMHg4MDAwMDAwMCwlZDEJCSMga2VlcCBERU5PUk0gc2lnbgorCW9yaS5sCQkmMHgwMDgwMDAwMCwlZDEJCSMgbWFrZSBzbWFsbGVzdCBzZ2wKKwlmbW92LnMJCSVkMSwlZnAwCisJYnJhLmIJCWZvdXRfd29yZF9ub3JtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGZtb3ZlLmwgb3V0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBPbmx5ICJVbmltcGxlbWVudGVkIERhdGEgVHlwZSIgZXhjZXB0aW9ucyBlbnRlciBoZXJlLiBUaGUgb3BlcmFuZAorIyBpcyBlaXRoZXIgYSBERU5PUk0gb3IgYSBOT1JNLgorZm91dF9sb25nOgorCXRzdC5iCQlTVEFHKCVhNikJCSMgaXMgb3BlcmFuZCBub3JtYWxpemVkPworCWJuZS5iCQlmb3V0X2xvbmdfZGVub3JtCSMgbm8KKworCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIGxvYWQgdmFsdWUKKworZm91dF9sb25nX25vcm06CisJZm1vdi5sCQklZDAsJWZwY3IJCSMgaW5zZXJ0IHJuZCBwcmVjOm1vZGUKKworCWZtb3YubAkJJWZwMCwlZDAJCSMgZXhlYyBtb3ZlIG91dCB3LyBjb3JyZWN0IHJuZCBtb2RlCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWZtb3YubAkJJWZwc3IsJWQxCQkjIGZldGNoIEZQU1IKKwlvci53CQklZDEsMitVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgbmV3IGV4YyxhY2NydWVkIGJpdHMKKworZm91dF9sb25nX3dyaXRlOgorCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IGRzdCBtb2RlCisJYW5kaS5iCQkmMHgzOCwlZDEJCSMgaXMgbW9kZSA9PSAwPyAoRHJlZyBkc3QpCisJYmVxLmIJCWZvdXRfbG9uZ19kbgkJIyBtdXN0IHNhdmUgdG8gaW50ZWdlciByZWdmaWxlCisKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0CisJYnNyLmwJCV9kbWVtX3dyaXRlX2xvbmcJIyB3cml0ZSBsb25nCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X2wJCSMgeWVzCisKKwlydHMKKworZm91dF9sb25nX2RuOgorCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IERuCisJYW5kaS53CQkmMHg3LCVkMQorCWJzci5sCQlzdG9yZV9kcmVnX2wKKwlydHMKKworZm91dF9sb25nX2Rlbm9ybToKKwltb3YubAkJU1JDX0VYKCVhMCksJWQxCisJYW5kaS5sCQkmMHg4MDAwMDAwMCwlZDEJCSMga2VlcCBERU5PUk0gc2lnbgorCW9yaS5sCQkmMHgwMDgwMDAwMCwlZDEJCSMgbWFrZSBzbWFsbGVzdCBzZ2wKKwlmbW92LnMJCSVkMSwlZnAwCisJYnJhLmIJCWZvdXRfbG9uZ19ub3JtCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGZtb3ZlLnggb3V0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBPbmx5ICJVbmltcGxlbWVudGVkIERhdGEgVHlwZSIgZXhjZXB0aW9ucyBlbnRlciBoZXJlLiBUaGUgb3BlcmFuZAorIyBpcyBlaXRoZXIgYSBERU5PUk0gb3IgYSBOT1JNLgorIyBUaGUgREVOT1JNIGNhdXNlcyBhbiBVbmRlcmZsb3cgZXhjZXB0aW9uLgorZm91dF9leHQ6CisKKyMgd2UgY29weSB0aGUgZXh0ZW5kZWQgcHJlY2lzaW9uIHJlc3VsdCB0byBGUF9TQ1IwIHNvIHRoYXQgdGhlIHJlc2VydmVkCisjIDE2LWJpdCBmaWVsZCBnZXRzIHplcm9lZC4gd2UgZG8gdGhpcyBzaW5jZSB3ZSBwcm9taXNlIG5vdCB0byBkaXN0dXJiCisjIHdoYXQncyBhdCBTUkMoYTApLgorCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwljbHIudwkJMitGUF9TQ1IwX0VYKCVhNikJIyBjbGVhciByZXNlcnZlZCBmaWVsZAorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisKKwlmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gcmVzdWx0CisKKwlic3IubAkJX2NhbGNfZWFfZm91dAkJIyBmaXggc3RhY2tlZCA8ZWE+CisKKwltb3YubAkJJWEwLCVhMQkJCSMgcGFzczogZHN0IGFkZHIKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBzcmMgYWRkcgorCW1vdi5sCQkmMHhjLCVkMAkJIyBwYXNzOiBvcHNpemUgaXMgMTIgYnl0ZXMKKworIyB3ZSBtdXN0IG5vdCB5ZXQgd3JpdGUgdGhlIGV4dGVuZGVkIHByZWNpc2lvbiBkYXRhIHRvIHRoZSBzdGFjaworIyBpbiB0aGUgcHJlLWRlY3JlbWVudCBjYXNlIGZyb20gc3VwZXJ2aXNvciBtb2RlIG9yIGVsc2Ugd2UnbGwgY29ycnVwdAorIyB0aGUgc3RhY2sgZnJhbWUuIHNvLCBsZWF2ZSBpdCBpbiBGUF9TUkMgZm9yIG5vdyBhbmQgZGVhbCB3aXRoIGl0IGxhdGVyLi4uCisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnCisJYmVxLmIJCWZvdXRfZXh0X2E3CisKKwlic3IubAkJX2RtZW1fd3JpdGUJCSMgd3JpdGUgZXh0IHByZWMgbnVtYmVyIHRvIG1lbW9yeQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS53CQlmb3V0X2V4dF9lcnIJCSMgeWVzCisKKwl0c3QuYgkJU1RBRyglYTYpCQkjIGlzIG9wZXJhbmQgbm9ybWFsaXplZD8KKwlibmUuYgkJZm91dF9leHRfZGVub3JtCQkjIG5vCisJcnRzCisKKyMgdGhlIG51bWJlciBpcyBhIERFTk9STS4gbXVzdCBzZXQgdGhlIHVuZGVyZmxvdyBleGNlcHRpb24gYml0Citmb3V0X2V4dF9kZW5vcm06CisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5kZXJmbG93IGV4YyBiaXQKKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMAorCWFuZGkuYgkJJjB4MGEsJWQwCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmb3V0X2V4dF9leGMJCSMgeWVzCisJcnRzCisKKyMgd2UgZG9uJ3Qgd2FudCB0byBkbyB0aGUgd3JpdGUgaWYgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBzdXBlcnZpc29yIG1vZGUKKyMgc28gX21lbV93cml0ZTIoKSBoYW5kbGVzIHRoaXMgZm9yIHVzLgorZm91dF9leHRfYTc6CisJYnNyLmwJCV9tZW1fd3JpdGUyCQkjIHdyaXRlIGV4dCBwcmVjIG51bWJlciB0byBtZW1vcnkKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUudwkJZm91dF9leHRfZXJyCQkjIHllcworCisJdHN0LmIJCVNUQUcoJWE2KQkJIyBpcyBvcGVyYW5kIG5vcm1hbGl6ZWQ/CisJYm5lLmIJCWZvdXRfZXh0X2Rlbm9ybQkJIyBubworCXJ0cworCitmb3V0X2V4dF9leGM6CisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EKKwluZWcudwkJJWQwCQkJIyBuZXcgZXhwID0gLShzaGZ0IGFtdCkKKwlhbmRpLncJCSYweDdmZmYsJWQwCisJYW5kaS53CQkmMHg4MDAwLEZQX1NDUjBfRVgoJWE2KQkjIGtlZXAgb25seSBvbGQgc2lnbgorCW9yLncJCSVkMCxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJcnRzCisKK2ZvdXRfZXh0X2VycjoKKwltb3YubAkJRVhDX0E2KCVhNiksKCVhNikJIyBmaXggc3RhY2tlZCBhNgorCWJyYS5sCQlmYWNjX291dF94CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZm1vdmUucyBvdXQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2ZvdXRfc2dsOgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWMKKwltb3YubAkJJWQwLExfU0NSMyglYTYpCQkjIHNhdmUgcm5kIHByZWMsbW9kZSBvbiBzdGFjaworCisjCisjIG9wZXJhbmQgaXMgYSBub3JtYWxpemVkIG51bWJlci4gZmlyc3QsIHdlIGNoZWNrIHRvIHNlZSBpZiB0aGUgbW92ZSBvdXQKKyMgd291bGQgY2F1c2UgZWl0aGVyIGFuIHVuZGVyZmxvdyBvciBvdmVyZmxvdy4gdGhlc2UgY2FzZXMgYXJlIGhhbmRsZWQKKyMgc2VwYXJhdGVseS4gb3RoZXJ3aXNlLCBzZXQgdGhlIEZQQ1IgdG8gdGhlIHByb3BlciByb3VuZGluZyBtb2RlIGFuZAorIyBleGVjdXRlIHRoZSBtb3ZlLgorIworCW1vdi53CQlTUkNfRVgoJWEwKSwlZDAJCSMgZXh0cmFjdCBleHBvbmVudAorCWFuZGkudwkJJjB4N2ZmZiwlZDAJCSMgc3RyaXAgc2lnbgorCisJY21waS53CQklZDAsJlNHTF9ISQkJIyB3aWxsIG9wZXJhbmQgb3ZlcmZsb3c/CisJYmd0LncJCWZvdXRfc2dsX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgT1ZGTAorCWJlcS53CQlmb3V0X3NnbF9tYXlfb3ZmbAkjIG1heWJlOyBnbyBoYW5kbGUgcG9zc2libGUgT1ZGTAorCWNtcGkudwkJJWQwLCZTR0xfTE8JCSMgd2lsbCBvcGVyYW5kIHVuZGVyZmxvdz8KKwlibHQudwkJZm91dF9zZ2xfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKKworIworIyBOT1JNcyhpbiByYW5nZSkgY2FuIGJlIHN0b3JlZCBvdXQgYnkgYSBzaW1wbGUgImZtb3YucyIKKyMgVW5ub3JtYWxpemVkIGlucHV0cyBjYW4gY29tZSB0aHJvdWdoIHRoaXMgcG9pbnQuCisjCitmb3V0X3NnbF9leGc6CisJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgZmV0Y2ggZm9wIGZyb20gc3RhY2sKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmbW92LnMJCSVmcDAsJWQwCQkjIHN0b3JlIGRvZXMgY29udmVydCBhbmQgcm91bmQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCisKKwlvci53CQklZDEsMitVU0VSX0ZQU1IoJWE2KQkjIHNldCBwb3NzaWJsZSBpbmV4Mi9haW5leAorCitmb3V0X3NnbF9leGdfd3JpdGU6CisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgZHN0IG1vZGUKKwlhbmRpLmIJCSYweDM4LCVkMQkJIyBpcyBtb2RlID09IDA/IChEcmVnIGRzdCkKKwliZXEuYgkJZm91dF9zZ2xfZXhnX3dyaXRlX2RuCSMgbXVzdCBzYXZlIHRvIGludGVnZXIgcmVnZmlsZQorCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAorCWJzci5sCQlfZG1lbV93cml0ZV9sb25nCSMgd3JpdGUgbG9uZworCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF9sCQkjIHllcworCisJcnRzCisKK2ZvdXRfc2dsX2V4Z193cml0ZV9kbjoKKwltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBEbgorCWFuZGkudwkJJjB4NywlZDEKKwlic3IubAkJc3RvcmVfZHJlZ19sCisJcnRzCisKKyMKKyMgaGVyZSwgd2Uga25vdyB0aGF0IHRoZSBvcGVyYW5kIHdvdWxkIFVORkwgaWYgbW92ZWQgb3V0IHRvIHNpbmdsZSBwcmVjLAorIyBzbywgZGVub3JtIGFuZCByb3VuZCBhbmQgdGhlbiB1c2UgZ2VuZXJpYyBzdG9yZSBzaW5nbGUgcm91dGluZSB0bworIyB3cml0ZSB0aGUgdmFsdWUgdG8gbWVtb3J5LgorIworZm91dF9zZ2xfdW5mbDoKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCBVTkZMCisKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwltb3YubAkJJWEwLC0oJXNwKQorCisJY2xyLmwJCSVkMAkJCSMgcGFzczogUy5GLiA9IDAKKworCWNtcGkuYgkJU1RBRyglYTYpLCZERU5PUk0JIyBmZXRjaCBzcmMgb3B0eXBlIHRhZworCWJuZS5iCQlmb3V0X3NnbF91bmZsX2NvbnQJIyBsZXQgREVOT1JNcyBmYWxsIHRocm91Z2gKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgdGhlIERFTk9STQorCitmb3V0X3NnbF91bmZsX2NvbnQ6CisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcHRyIHRvIG9wZXJhbmQKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKKwlic3IubAkJdW5mX3JlcwkJCSMgY2FsYyBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBmb3AKKwlic3IubAkJZHN0X3NnbAkJCSMgY29udmVydCB0byBzaW5nbGUgcHJlYworCisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgZHN0IG1vZGUKKwlhbmRpLmIJCSYweDM4LCVkMQkJIyBpcyBtb2RlID09IDA/IChEcmVnIGRzdCkKKwliZXEuYgkJZm91dF9zZ2xfdW5mbF9kbgkjIG11c3Qgc2F2ZSB0byBpbnRlZ2VyIHJlZ2ZpbGUKKworCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgc3RhY2tlZCA8ZWE+IGlzIGNvcnJlY3QKKwlic3IubAkJX2RtZW1fd3JpdGVfbG9uZwkjIHdyaXRlIGxvbmcKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfbAkJIyB5ZXMKKworCWJyYS5iCQlmb3V0X3NnbF91bmZsX2Noa2V4YworCitmb3V0X3NnbF91bmZsX2RuOgorCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IERuCisJYW5kaS53CQkmMHg3LCVkMQorCWJzci5sCQlzdG9yZV9kcmVnX2wKKworZm91dF9zZ2xfdW5mbF9jaGtleGM6CisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgwYSwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLncJCWZvdXRfc2RfZXhjX3VuZmwJIyB5ZXMKKwlhZGRxLmwJCSYweDQsJXNwCisJcnRzCisKKyMKKyMgaXQncyBkZWZpbml0ZWx5IGFuIG92ZXJmbG93IHNvIGNhbGwgb3ZmX3JlcyB0byBnZXQgdGhlIGNvcnJlY3QgYW5zd2VyCisjCitmb3V0X3NnbF9vdmZsOgorCXRzdC5iCQkzK1NSQ19ISSglYTApCQkjIGlzIHJlc3VsdCBpbmV4YWN0PworCWJuZS5iCQlmb3V0X3NnbF9vdmZsX2luZXgyCisJdHN0LmwJCVNSQ19MTyglYTApCQkjIGlzIHJlc3VsdCBpbmV4YWN0PworCWJuZS5iCQlmb3V0X3NnbF9vdmZsX2luZXgyCisJb3JpLncJCSZvdmZsX2lueF9tYXNrLDIrVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAorCWJyYS5iCQlmb3V0X3NnbF9vdmZsX2NvbnQKK2ZvdXRfc2dsX292ZmxfaW5leDI6CisJb3JpLncJCSZvdmZpbnhfbWFzaywyK1VTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgvaW5leDIKKworZm91dF9zZ2xfb3ZmbF9jb250OgorCW1vdi5sCQklYTAsLSglc3ApCisKKyMgY2FsbCBvdmZfcmVzKCkgdy8gc2dsIHByZWMgYW5kIHRoZSBjb3JyZWN0IHJuZCBtb2RlIHRvIGNyZWF0ZSB0aGUgZGVmYXVsdAorIyBvdmVyZmxvdyByZXN1bHQuIERPTidUIHNhdmUgdGhlIHJldHVybmVkIGNjb2RlcyBmcm9tIG92Zl9yZXMoKSBzaW5jZQorIyBmbW92ZSBvdXQgZG9lc24ndCBhbHRlciB0aGVtLgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBvcGVyYW5kIG5lZ2F0aXZlPworCXNtaQkJJWQxCQkJIyBzZXQgaWYgc28KKwltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3M6IHNnbCBwcmVjLHJuZCBtb2RlCisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGMgT1ZGTCByZXN1bHQKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyBsb2FkIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0CisJZm1vdi5zCQklZnAwLCVkMAkJIyBzdG9yZSB0byBzaW5nbGUKKworCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IGRzdCBtb2RlCisJYW5kaS5iCQkmMHgzOCwlZDEJCSMgaXMgbW9kZSA9PSAwPyAoRHJlZyBkc3QpCisJYmVxLmIJCWZvdXRfc2dsX292ZmxfZG4JIyBtdXN0IHNhdmUgdG8gaW50ZWdlciByZWdmaWxlCisKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0CisJYnNyLmwJCV9kbWVtX3dyaXRlX2xvbmcJIyB3cml0ZSBsb25nCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X2wJCSMgeWVzCisKKwlicmEuYgkJZm91dF9zZ2xfb3ZmbF9jaGtleGMKKworZm91dF9zZ2xfb3ZmbF9kbjoKKwltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBEbgorCWFuZGkudwkJJjB4NywlZDEKKwlic3IubAkJc3RvcmVfZHJlZ19sCisKK2ZvdXRfc2dsX292ZmxfY2hrZXhjOgorCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MGEsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS53CQlmb3V0X3NkX2V4Y19vdmZsCSMgeWVzCisJYWRkcS5sCQkmMHg0LCVzcAorCXJ0cworCisjCisjIG1vdmUgb3V0IE1BWSBvdmVyZmxvdzoKKyMgKDEpIGZvcmNlIHRoZSBleHAgdG8gMHgzZmZmCisjICgyKSBkbyBhIG1vdmUgdy8gYXBwcm9wcmlhdGUgcm5kIG1vZGUKKyMgKDMpIGlmIGV4cCBzdGlsbCBlcXVhbHMgemVybywgdGhlbiBpbnNlcnQgb3JpZ2luYWwgZXhwb25lbnQKKyMJZm9yIHRoZSBjb3JyZWN0IHJlc3VsdC4KKyMgICAgIGlmIGV4cCBub3cgZXF1YWxzIG9uZSwgdGhlbiBpdCBvdmVyZmxvd2VkIHNvIGNhbGwgb3ZmX3Jlcy4KKyMKK2ZvdXRfc2dsX21heV9vdmZsOgorCW1vdi53CQlTUkNfRVgoJWEwKSwlZDEJCSMgZmV0Y2ggY3VycmVudCBzaWduCisJYW5kaS53CQkmMHg4MDAwLCVkMQkJIyBrZWVwIGl0LGNsZWFyIGV4cAorCW9yaS53CQkmMHgzZmZmLCVkMQkJIyBpbnNlcnQgZXhwID0gMAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IHNjYWxlZCBleHAKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpICMgY29weSBoaShtYW4pCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KSAjIGNvcHkgbG8obWFuKQorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmbW92LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZm9yY2UgZm9wIHRvIGJlIHJvdW5kZWQKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJZmFicy54CQklZnAwCQkJIyBuZWVkIGFic29sdXRlIHZhbHVlCisJZmNtcC5iCQklZnAwLCYweDIJCSMgZGlkIGV4cG9uZW50IGluY3JlYXNlPworCWZibHQudwkJZm91dF9zZ2xfZXhnCQkjIG5vOyBnbyBmaW5pc2ggTk9STQorCWJyYS53CQlmb3V0X3NnbF9vdmZsCQkjIHllczsgZ28gaGFuZGxlIG92ZXJmbG93CisKKyMjIyMjIyMjIyMjIyMjIyMKKworZm91dF9zZF9leGNfdW5mbDoKKwltb3YubAkJKCVzcCkrLCVhMAorCisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisKKwljbXBpLmIJCVNUQUcoJWE2KSwmREVOT1JNCSMgd2FzIHNyYyBhIERFTk9STT8KKwlibmUuYgkJZm91dF9zZF9leGNfY29udAkjIG5vCisKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAKKwlic3IubAkJbm9ybQorCW5lZy5sCQklZDAKKwlhbmRpLncJCSYweDdmZmYsJWQwCisJYmZpbnMJCSVkMCxGUF9TQ1IwX0VYKCVhNil7JjE6JjE1fQorCWJyYS5iCQlmb3V0X3NkX2V4Y19jb250CisKK2ZvdXRfc2RfZXhjOgorZm91dF9zZF9leGNfb3ZmbDoKKwltb3YubAkJKCVzcCkrLCVhMAkJIyByZXN0b3JlIGEwCisKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKworZm91dF9zZF9leGNfY29udDoKKwliY2xyCQkmMHg3LEZQX1NDUjBfRVgoJWE2KQkjIGNsZWFyIHNpZ24gYml0CisJc25lLmIJCTIrRlBfU0NSMF9FWCglYTYpCSMgc2V0IGludGVybmFsIHNpZ24gYml0CisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcHRyIHRvIERFTk9STQorCisJbW92LmIJCTMrTF9TQ1IzKCVhNiksJWQxCisJbHNyLmIJCSYweDQsJWQxCisJYW5kaS53CQkmMHgwYywlZDEKKwlzd2FwCQklZDEKKwltb3YuYgkJMytMX1NDUjMoJWE2KSwlZDEKKwlsc3IuYgkJJjB4NCwlZDEKKwlhbmRpLncJCSYweDAzLCVkMQorCWNsci5sCQklZDAJCQkjIHBhc3M6IHplcm8gZyxyLHMKKwlic3IubAkJX3JvdW5kCQkJIyByb3VuZCB0aGUgREVOT1JNCisKKwl0c3QuYgkJMitGUF9TQ1IwX0VYKCVhNikJIyBpcyBFWE9QIG5lZ2F0aXZlPworCWJlcS5iCQlmb3V0X3NkX2V4Y19kb25lCSMgbm8KKwlic2V0CQkmMHg3LEZQX1NDUjBfRVgoJWE2KQkjIHllcworCitmb3V0X3NkX2V4Y19kb25lOgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBmbW92ZS5kIG91dCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmb3V0X2RibDoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmZF9tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IGRibCBwcmVjCisJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzYXZlIHJuZCBwcmVjLG1vZGUgb24gc3RhY2sKKworIworIyBvcGVyYW5kIGlzIGEgbm9ybWFsaXplZCBudW1iZXIuIGZpcnN0LCB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIG1vdmUgb3V0CisjIHdvdWxkIGNhdXNlIGVpdGhlciBhbiB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cuIHRoZXNlIGNhc2VzIGFyZSBoYW5kbGVkCisjIHNlcGFyYXRlbHkuIG90aGVyd2lzZSwgc2V0IHRoZSBGUENSIHRvIHRoZSBwcm9wZXIgcm91bmRpbmcgbW9kZSBhbmQKKyMgZXhlY3V0ZSB0aGUgbW92ZS4KKyMKKwltb3YudwkJU1JDX0VYKCVhMCksJWQwCQkjIGV4dHJhY3QgZXhwb25lbnQKKwlhbmRpLncJCSYweDdmZmYsJWQwCQkjIHN0cmlwIHNpZ24KKworCWNtcGkudwkJJWQwLCZEQkxfSEkJCSMgd2lsbCBvcGVyYW5kIG92ZXJmbG93PworCWJndC53CQlmb3V0X2RibF9vdmZsCQkjIHllczsgZ28gaGFuZGxlIE9WRkwKKwliZXEudwkJZm91dF9kYmxfbWF5X292ZmwJIyBtYXliZTsgZ28gaGFuZGxlIHBvc3NpYmxlIE9WRkwKKwljbXBpLncJCSVkMCwmREJMX0xPCQkjIHdpbGwgb3BlcmFuZCB1bmRlcmZsb3c/CisJYmx0LncJCWZvdXRfZGJsX3VuZmwJCSMgeWVzOyBnbyBoYW5kbGUgdW5kZXJmbG93CisKKyMKKyMgTk9STXMoaW4gcmFuZ2UpIGNhbiBiZSBzdG9yZWQgb3V0IGJ5IGEgc2ltcGxlICJmbW92LmQiCisjIFVubm9ybWFsaXplZCBpbnB1dHMgY2FuIGNvbWUgdGhyb3VnaCB0aGlzIHBvaW50LgorIworZm91dF9kYmxfZXhnOgorCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIGZldGNoIGZvcCBmcm9tIHN0YWNrCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZm1vdi5kCQklZnAwLExfU0NSMSglYTYpCSMgc3RvcmUgZG9lcyBjb252ZXJ0IGFuZCByb3VuZAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMAkJIyBzYXZlIEZQU1IKKworCW9yLncJCSVkMCwyK1VTRVJfRlBTUiglYTYpCSMgc2V0IHBvc3NpYmxlIGluZXgyL2FpbmV4CisKKwltb3YubAkJRVhDX0VBKCVhNiksJWExCQkjIHBhc3M6IGRzdCBhZGRyCisJbGVhCQlMX1NDUjEoJWE2KSwlYTAJCSMgcGFzczogc3JjIGFkZHIKKwltb3ZxLmwJCSYweDgsJWQwCQkjIHBhc3M6IG9wc2l6ZSBpcyA4IGJ5dGVzCisJYnNyLmwJCV9kbWVtX3dyaXRlCQkjIHN0b3JlIGRibCBmb3AgdG8gbWVtb3J5CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X2QJCSMgeWVzCisKKwlydHMJCQkJCSMgbm87IHNvIHdlJ3JlIGZpbmlzaGVkCisKKyMKKyMgaGVyZSwgd2Uga25vdyB0aGF0IHRoZSBvcGVyYW5kIHdvdWxkIFVORkwgaWYgbW92ZWQgb3V0IHRvIGRvdWJsZSBwcmVjLAorIyBzbywgZGVub3JtIGFuZCByb3VuZCBhbmQgdGhlbiB1c2UgZ2VuZXJpYyBzdG9yZSBkb3VibGUgcm91dGluZSB0bworIyB3cml0ZSB0aGUgdmFsdWUgdG8gbWVtb3J5LgorIworZm91dF9kYmxfdW5mbDoKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCBVTkZMCisKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwltb3YubAkJJWEwLC0oJXNwKQorCisJY2xyLmwJCSVkMAkJCSMgcGFzczogUy5GLiA9IDAKKworCWNtcGkuYgkJU1RBRyglYTYpLCZERU5PUk0JIyBmZXRjaCBzcmMgb3B0eXBlIHRhZworCWJuZS5iCQlmb3V0X2RibF91bmZsX2NvbnQJIyBsZXQgREVOT1JNcyBmYWxsIHRocm91Z2gKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgdGhlIERFTk9STQorCitmb3V0X2RibF91bmZsX2NvbnQ6CisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogcHRyIHRvIG9wZXJhbmQKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCQkjIHBhc3M6IHJuZCBwcmVjLG1vZGUKKwlic3IubAkJdW5mX3JlcwkJCSMgY2FsYyBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBmb3AKKwlic3IubAkJZHN0X2RibAkJCSMgY29udmVydCB0byBzaW5nbGUgcHJlYworCW1vdi5sCQklZDAsTF9TQ1IxKCVhNikKKwltb3YubAkJJWQxLExfU0NSMiglYTYpCisKKwltb3YubAkJRVhDX0VBKCVhNiksJWExCQkjIHBhc3M6IGRzdCBhZGRyCisJbGVhCQlMX1NDUjEoJWE2KSwlYTAJCSMgcGFzczogc3JjIGFkZHIKKwltb3ZxLmwJCSYweDgsJWQwCQkjIHBhc3M6IG9wc2l6ZSBpcyA4IGJ5dGVzCisJYnNyLmwJCV9kbWVtX3dyaXRlCQkjIHN0b3JlIGRibCBmb3AgdG8gbWVtb3J5CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X2QJCSMgeWVzCisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDBhLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUudwkJZm91dF9zZF9leGNfdW5mbAkjIHllcworCWFkZHEubAkJJjB4NCwlc3AKKwlydHMKKworIworIyBpdCdzIGRlZmluaXRlbHkgYW4gb3ZlcmZsb3cgc28gY2FsbCBvdmZfcmVzIHRvIGdldCB0aGUgY29ycmVjdCBhbnN3ZXIKKyMKK2ZvdXRfZGJsX292Zmw6CisJbW92LncJCTIrU1JDX0xPKCVhMCksJWQwCisJYW5kaS53CQkmMHg3ZmYsJWQwCisJYm5lLmIJCWZvdXRfZGJsX292ZmxfaW5leDIKKworCW9yaS53CQkmb3ZmbF9pbnhfbWFzaywyK1VTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKKwlicmEuYgkJZm91dF9kYmxfb3ZmbF9jb250Citmb3V0X2RibF9vdmZsX2luZXgyOgorCW9yaS53CQkmb3ZmaW54X21hc2ssMitVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4L2luZXgyCisKK2ZvdXRfZGJsX292ZmxfY29udDoKKwltb3YubAkJJWEwLC0oJXNwKQorCisjIGNhbGwgb3ZmX3JlcygpIHcvIGRibCBwcmVjIGFuZCB0aGUgY29ycmVjdCBybmQgbW9kZSB0byBjcmVhdGUgdGhlIGRlZmF1bHQKKyMgb3ZlcmZsb3cgcmVzdWx0LiBET04nVCBzYXZlIHRoZSByZXR1cm5lZCBjY29kZXMgZnJvbSBvdmZfcmVzKCkgc2luY2UKKyMgZm1vdmUgb3V0IGRvZXNuJ3QgYWx0ZXIgdGhlbS4KKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgb3BlcmFuZCBuZWdhdGl2ZT8KKwlzbWkJCSVkMQkJCSMgc2V0IGlmIHNvCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzOiBkYmwgcHJlYyxybmQgbW9kZQorCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjIE9WRkwgcmVzdWx0CisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgbG9hZCBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdAorCWZtb3YuZAkJJWZwMCxMX1NDUjEoJWE2KQkjIHN0b3JlIHRvIGRvdWJsZQorCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMQkJIyBwYXNzOiBkc3QgYWRkcgorCWxlYQkJTF9TQ1IxKCVhNiksJWEwCQkjIHBhc3M6IHNyYyBhZGRyCisJbW92cS5sCQkmMHg4LCVkMAkJIyBwYXNzOiBvcHNpemUgaXMgOCBieXRlcworCWJzci5sCQlfZG1lbV93cml0ZQkJIyBzdG9yZSBkYmwgZm9wIHRvIG1lbW9yeQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF9kCQkjIHllcworCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgwYSwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLncJCWZvdXRfc2RfZXhjX292ZmwJIyB5ZXMKKwlhZGRxLmwJCSYweDQsJXNwCisJcnRzCisKKyMKKyMgbW92ZSBvdXQgTUFZIG92ZXJmbG93OgorIyAoMSkgZm9yY2UgdGhlIGV4cCB0byAweDNmZmYKKyMgKDIpIGRvIGEgbW92ZSB3LyBhcHByb3ByaWF0ZSBybmQgbW9kZQorIyAoMykgaWYgZXhwIHN0aWxsIGVxdWFscyB6ZXJvLCB0aGVuIGluc2VydCBvcmlnaW5hbCBleHBvbmVudAorIwlmb3IgdGhlIGNvcnJlY3QgcmVzdWx0LgorIyAgICAgaWYgZXhwIG5vdyBlcXVhbHMgb25lLCB0aGVuIGl0IG92ZXJmbG93ZWQgc28gY2FsbCBvdmZfcmVzLgorIworZm91dF9kYmxfbWF5X292Zmw6CisJbW92LncJCVNSQ19FWCglYTApLCVkMQkJIyBmZXRjaCBjdXJyZW50IHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQxCQkjIGtlZXAgaXQsY2xlYXIgZXhwCisJb3JpLncJCSYweDNmZmYsJWQxCQkjIGluc2VydCBleHAgPSAwCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgc2NhbGVkIGV4cAorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikgIyBjb3B5IGhpKG1hbikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpICMgY29weSBsbyhtYW4pCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworCWZtb3YueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBmb3JjZSBmb3AgdG8gYmUgcm91bmRlZAorCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlmYWJzLngJCSVmcDAJCQkjIG5lZWQgYWJzb2x1dGUgdmFsdWUKKwlmY21wLmIJCSVmcDAsJjB4MgkJIyBkaWQgZXhwb25lbnQgaW5jcmVhc2U/CisJZmJsdC53CQlmb3V0X2RibF9leGcJCSMgbm87IGdvIGZpbmlzaCBOT1JNCisJYnJhLncJCWZvdXRfZGJsX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkc3RfZGJsKCk6IGNyZWF0ZSBkb3VibGUgcHJlY2lzaW9uIHZhbHVlIGZyb20gZXh0ZW5kZWQgcHJlYy4JIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIHNvdXJjZSBvcGVyYW5kIGluIGV4dGVuZGVkIHByZWNpc2lvbgkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZDAgPSBoaShkb3VibGUgcHJlY2lzaW9uIHJlc3VsdCkJCQkJIworIwlkMSA9IGxvKGRvdWJsZSBwcmVjaXNpb24gcmVzdWx0KQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkJCQkJCQkJCSMKKyMgIENoYW5nZXMgZXh0ZW5kZWQgcHJlY2lzaW9uIHRvIGRvdWJsZSBwcmVjaXNpb24uCQkJIworIyAgTm90ZTogbm8gYXR0ZW1wdCBpcyBtYWRlIHRvIHJvdW5kIHRoZSBleHRlbmRlZCB2YWx1ZSB0byBkb3VibGUuCSMKKyMJZGJsX3NpZ24gPSBleHRfc2lnbgkJCQkJCSMKKyMJZGJsX2V4cCA9IGV4dF9leHAgLSAkM2ZmZihleHQgYmlhcykgKyAkN2ZmKGRibCBiaWFzKQkJIworIwlnZXQgcmlkIG9mIGV4dCBpbnRlZ2VyIGJpdAkJCQkJIworIwlkYmxfbWFudCA9IGV4dF9tYW50ezYyOjEyfQkJCQkJIworIwkJCQkJCQkJCSMKKyMJCS0tLS0tLS0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0JIworIyAgZXh0ZW5kZWQgLT4gIHxzfCAgICBleHAgICAgfCAgIHwxfCBtcyBtYW50ICAgfCAgICB8IGxzIG1hbnQgICAgIHwJIworIwkJLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLQkjCisjCQkgOTUJICAgIDY0ICAgIDYzIDYyCSAgICAgIDMyICAgICAgMzEgICAgIDExCSAgMAkjCisjCQkJCSAgICAgfAkJCSAgICAgfAkJIworIwkJCQkgICAgIHwJCQkgICAgIHwJCSMKKyMJCQkJICAgICB8CQkJICAgICB8CQkjCisjCQkJICAgICAgICAgICAgIHYJCQkgICAgIHYJCSMKKyMJCQkgICAgICAtLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0JCSMKKyMgIGRvdWJsZSAgIC0+CQkgICAgICB8c3xleHB8IG1hbnQgIHwgICB8ICBtYW50ICAgICAgIHwJCSMKKyMJCQkgICAgICAtLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0JCSMKKyMJCQkgICAgICA2MyAgICAgNTEgICAzMiAgIDMxCSAgICAgICAwCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RzdF9kYmw6CisJY2xyLmwJCSVkMAkJCSMgY2xlYXIgZDAKKwltb3YudwkJRlRFTVBfRVgoJWEwKSwlZDAJIyBnZXQgZXhwb25lbnQKKwlzdWJpLncJCSZFWFRfQklBUywlZDAJCSMgc3VidHJhY3QgZXh0ZW5kZWQgcHJlY2lzaW9uIGJpYXMKKwlhZGRpLncJCSZEQkxfQklBUywlZDAJCSMgYWRkIGRvdWJsZSBwcmVjaXNpb24gYmlhcworCXRzdC5iCQlGVEVNUF9ISSglYTApCQkjIGlzIG51bWJlciBhIGRlbm9ybT8KKwlibWkuYgkJZHN0X2dldF9kdXBwZXIJCSMgbm8KKwlzdWJxLncJCSYweDEsJWQwCQkjIHllczsgZGVub3JtIGJpYXMgPSBEQkxfQklBUyAtIDEKK2RzdF9nZXRfZHVwcGVyOgorCXN3YXAJCSVkMAkJCSMgZDAgbm93IGluIHVwcGVyIHdvcmQKKwlsc2wubAkJJjB4NCwlZDAJCSMgZDAgaW4gcHJvcGVyIHBsYWNlIGZvciBkYmwgcHJlYyBleHAKKwl0c3QuYgkJRlRFTVBfRVgoJWEwKQkJIyB0ZXN0IHNpZ24KKwlicGwuYgkJZHN0X2dldF9kbWFuCQkjIGlmIHBvc3RpdmUsIGdvIHByb2Nlc3MgbWFudGlzc2EKKwlic2V0CQkmMHgxZiwlZDAJCSMgaWYgbmVnYXRpdmUsIHNldCBzaWduCitkc3RfZ2V0X2RtYW46CisJbW92LmwJCUZURU1QX0hJKCVhMCksJWQxCSMgZ2V0IG1zIG1hbnRpc3NhCisJYmZleHR1CQklZDF7JjE6JjIwfSwlZDEJCSMgZ2V0IHVwcGVyIDIwIGJpdHMgb2YgbXMKKwlvci5sCQklZDEsJWQwCQkJIyBwdXQgdGhlc2UgYml0cyBpbiBtcyB3b3JkIG9mIGRvdWJsZQorCW1vdi5sCQklZDAsTF9TQ1IxKCVhNikJCSMgcHV0IHRoZSBuZXcgZXhwIGJhY2sgb24gdGhlIHN0YWNrCisJbW92LmwJCUZURU1QX0hJKCVhMCksJWQxCSMgZ2V0IG1zIG1hbnRpc3NhCisJbW92LmwJCSYyMSwlZDAJCQkjIGxvYWQgc2hpZnQgY291bnQKKwlsc2wubAkJJWQwLCVkMQkJCSMgcHV0IGxvd2VyIDExIGJpdHMgaW4gdXBwZXIgYml0cworCW1vdi5sCQklZDEsTF9TQ1IyKCVhNikJCSMgYnVpbGQgbG93ZXIgbHdvcmQgaW4gbWVtb3J5CisJbW92LmwJCUZURU1QX0xPKCVhMCksJWQxCSMgZ2V0IGxzIG1hbnRpc3NhCisJYmZleHR1CQklZDF7JjA6JjIxfSwlZDAJCSMgZ2V0IGxzIDIxIGJpdHMgb2YgZG91YmxlCisJbW92LmwJCUxfU0NSMiglYTYpLCVkMQorCW9yLmwJCSVkMCwlZDEJCQkjIHB1dCB0aGVtIGluIGRvdWJsZSByZXN1bHQKKwltb3YubAkJTF9TQ1IxKCVhNiksJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZHN0X3NnbCgpOiBjcmVhdGUgc2luZ2xlIHByZWNpc2lvbiB2YWx1ZSBmcm9tIGV4dGVuZGVkIHByZWMJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBzb3VyY2Ugb3BlcmFuZCBpbiBleHRlbmRlZCBwcmVjaXNpb24JCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gc2luZ2xlIHByZWNpc2lvbiByZXN1bHQJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCQkJCQkJCQkJIworIyBDaGFuZ2VzIGV4dGVuZGVkIHByZWNpc2lvbiB0byBzaW5nbGUgcHJlY2lzaW9uLgkJCSMKKyMJc2dsX3NpZ24gPSBleHRfc2lnbgkJCQkJCSMKKyMJc2dsX2V4cCA9IGV4dF9leHAgLSAkM2ZmZihleHQgYmlhcykgKyAkN2Yoc2dsIGJpYXMpCQkjCisjCWdldCByaWQgb2YgZXh0IGludGVnZXIgYml0CQkJCQkjCisjCXNnbF9tYW50ID0gZXh0X21hbnR7NjI6MTJ9CQkJCQkjCisjCQkJCQkJCQkJIworIwkJLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLQkjCisjICBleHRlbmRlZCAtPiAgfHN8ICAgIGV4cCAgICB8ICAgfDF8IG1zIG1hbnQgICB8ICAgIHwgbHMgbWFudCAgICAgfAkjCisjCQktLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tCSMKKyMJCSA5NQkgICAgNjQgICAgNjMgNjIJICAgNDAgMzIgICAgICAzMSAgICAgMTIJICAwCSMKKyMJCQkJICAgICB8CSAgIHwJCQkJIworIwkJCQkgICAgIHwJICAgfAkJCQkjCisjCQkJCSAgICAgfAkgICB8CQkJCSMKKyMJCQkgICAgICAgICAgICAgdiAgICAgdgkJCQkjCisjCQkJICAgICAgLS0tLS0tLS0tLS0tLS0tCQkJCSMKKyMgIHNpbmdsZSAgIC0+CQkgICAgICB8c3xleHB8IG1hbnQgIHwJCQkJIworIwkJCSAgICAgIC0tLS0tLS0tLS0tLS0tLQkJCQkjCisjCQkJICAgICAgMzEgICAgIDIyICAgICAwCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RzdF9zZ2w6CisJY2xyLmwJCSVkMAorCW1vdi53CQlGVEVNUF9FWCglYTApLCVkMAkjIGdldCBleHBvbmVudAorCXN1YmkudwkJJkVYVF9CSUFTLCVkMAkJIyBzdWJ0cmFjdCBleHRlbmRlZCBwcmVjaXNpb24gYmlhcworCWFkZGkudwkJJlNHTF9CSUFTLCVkMAkJIyBhZGQgc2luZ2xlIHByZWNpc2lvbiBiaWFzCisJdHN0LmIJCUZURU1QX0hJKCVhMCkJCSMgaXMgbnVtYmVyIGEgZGVub3JtPworCWJtaS5iCQlkc3RfZ2V0X3N1cHBlcgkJIyBubworCXN1YnEudwkJJjB4MSwlZDAJCSMgeWVzOyBkZW5vcm0gYmlhcyA9IFNHTF9CSUFTIC0gMQorZHN0X2dldF9zdXBwZXI6CisJc3dhcAkJJWQwCQkJIyBwdXQgZXhwIGluIHVwcGVyIHdvcmQgb2YgZDAKKwlsc2wubAkJJjB4NywlZDAJCSMgc2hpZnQgaXQgaW50byBzaW5nbGUgZXhwIGJpdHMKKwl0c3QuYgkJRlRFTVBfRVgoJWEwKQkJIyB0ZXN0IHNpZ24KKwlicGwuYgkJZHN0X2dldF9zbWFuCQkjIGlmIHBvc2l0aXZlLCBjb250aW51ZQorCWJzZXQJCSYweDFmLCVkMAkJIyBpZiBuZWdhdGl2ZSwgcHV0IGluIHNpZ24gZmlyc3QKK2RzdF9nZXRfc21hbjoKKwltb3YubAkJRlRFTVBfSEkoJWEwKSwlZDEJIyBnZXQgbXMgbWFudGlzc2EKKwlhbmRpLmwJCSYweDdmZmZmZjAwLCVkMQkJIyBnZXQgdXBwZXIgMjMgYml0cyBvZiBtcworCWxzci5sCQkmMHg4LCVkMQkJIyBhbmQgcHV0IHRoZW0gZmx1c2ggcmlnaHQKKwlvci5sCQklZDEsJWQwCQkJIyBwdXQgdGhlc2UgYml0cyBpbiBtcyB3b3JkIG9mIHNpbmdsZQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2ZvdXRfcGFjazoKKwlic3IubAkJX2NhbGNfZWFfZm91dAkJIyBmZXRjaCB0aGUgPGVhPgorCW1vdi5sCQklYTAsLSglc3ApCisKKwltb3YuYgkJU1RBRyglYTYpLCVkMAkJIyBmZXRjaCBpbnB1dCB0eXBlCisJYm5lLncJCWZvdXRfcGFja19ub3Rfbm9ybQkjIGlucHV0IGlzIG5vdCBOT1JNCisKK2ZvdXRfcGFja19ub3JtOgorCWJ0c3QJCSYweDQsRVhDX0NNRFJFRyglYTYpCSMgc3RhdGljIG9yIGR5bmFtaWM/CisJYmVxLmIJCWZvdXRfcGFja19zCQkjIHN0YXRpYworCitmb3V0X3BhY2tfZDoKKwltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQxCSMgZmV0Y2ggZHluYW1pYyByZWcKKwlsc3IuYgkJJjB4NCwlZDEKKwlhbmRpLncJCSYweDcsJWQxCisKKwlic3IubAkJZmV0Y2hfZHJlZwkJIyBmZXRjaCBEbiB3LyBrLWZhY3RvcgorCisJYnJhLmIJCWZvdXRfcGFja190eXBlCitmb3V0X3BhY2tfczoKKwltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQwCSMgZmV0Y2ggc3RhdGljIGZpZWxkCisKK2ZvdXRfcGFja190eXBlOgorCWJmZXh0cwkJJWQweyYyNTomN30sJWQwCQkjIGV4dHJhY3Qgay1mYWN0b3IKKwltb3YubAklZDAsLSglc3ApCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gaW5wdXQKKworIyBiaW5kZWMgaXMgY3VycmVudGx5IHNjcmFtYmxpbmcgRlBfU1JDIGZvciBkZW5vcm0gaW5wdXRzLgorIyB3ZSdsbCBoYXZlIHRvIGNoYW5nZSB0aGlzLCBidXQgZm9yIG5vdywgdG91Z2ggbHVjayEhIQorCWJzci5sCQliaW5kZWMJCQkjIGNvbnZlcnQgeHByZWMgdG8gcGFja2VkCisKKyMJYW5kaS5sCQkmMHhjZmZmMDAwZixGUF9TQ1IwKCVhNikgIyBjbGVhciB1bnVzZWQgZmllbGRzCisJYW5kaS5sCQkmMHhjZmZmZjAwZixGUF9TQ1IwKCVhNikgIyBjbGVhciB1bnVzZWQgZmllbGRzCisKKwltb3YubAkoJXNwKSssJWQwCisKKwl0c3QuYgkJMytGUF9TQ1IwX0VYKCVhNikKKwlibmUuYgkJZm91dF9wYWNrX3NldAorCXRzdC5sCQlGUF9TQ1IwX0hJKCVhNikKKwlibmUuYgkJZm91dF9wYWNrX3NldAorCXRzdC5sCQlGUF9TQ1IwX0xPKCVhNikKKwlibmUuYgkJZm91dF9wYWNrX3NldAorCisjIGFkZCB0aGUgZXh0cmEgY29uZGl0aW9uIHRoYXQgb25seSBpZiB0aGUgay1mYWN0b3Igd2FzIHplcm8sIHRvbywgc2hvdWxkCisjIHdlIHplcm8gdGhlIGV4cG9uZW50CisJdHN0LmwJCSVkMAorCWJuZS5iCQlmb3V0X3BhY2tfc2V0CisjICJtYW50aXNzYSIgaXMgYWxsIHplcm8gd2hpY2ggbWVhbnMgdGhhdCB0aGUgYW5zd2VyIGlzIHplcm8uIGJ1dCwgdGhlICcwNDAKKyMgYWxnb3JpdGhtIGFsbG93cyB0aGUgZXhwb25lbnQgdG8gYmUgbm9uLXplcm8uIHRoZSA4ODEvMiBkbyBub3QuIHRoZXJlZm9yZSwKKyMgaWYgdGhlIG1hbnRpc3NhIGlzIHplcm8sIEkgd2lsbCB6ZXJvIHRoZSBleHBvbmVudCwgdG9vLgorIyB0aGUgcXVlc3Rpb24gbm93IGlzIHdoZXRoZXIgdGhlIGV4cG9uZW50cyBzaWduIGJpdCBpcyBhbGxvd2VkIHRvIGJlIG5vbi16ZXJvCisjIGZvciBhIHplcm8sIGFsc28uLi4KKwlhbmRpLncJCSYweGYwMDAsRlBfU0NSMCglYTYpCisKK2ZvdXRfcGFja19zZXQ6CisKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBzcmMgYWRkcgorCitmb3V0X3BhY2tfd3JpdGU6CisJbW92LmwJCSglc3ApKywlYTEJCSMgcGFzczogZHN0IGFkZHIKKwltb3YubAkJJjB4YywlZDAJCSMgcGFzczogb3BzaXplIGlzIDEyIGJ5dGVzCisKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcKKwliZXEuYgkJZm91dF9wYWNrX2E3CisKKwlic3IubAkJX2RtZW1fd3JpdGUJCSMgd3JpdGUgZXh0IHByZWMgbnVtYmVyIHRvIG1lbW9yeQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS53CQlmb3V0X2V4dF9lcnIJCSMgeWVzCisKKwlydHMKKworIyB3ZSBkb24ndCB3YW50IHRvIGRvIHRoZSB3cml0ZSBpZiB0aGUgZXhjZXB0aW9uIG9jY3VycmVkIGluIHN1cGVydmlzb3IgbW9kZQorIyBzbyBfbWVtX3dyaXRlMigpIGhhbmRsZXMgdGhpcyBmb3IgdXMuCitmb3V0X3BhY2tfYTc6CisJYnNyLmwJCV9tZW1fd3JpdGUyCQkjIHdyaXRlIGV4dCBwcmVjIG51bWJlciB0byBtZW1vcnkKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUudwkJZm91dF9leHRfZXJyCQkjIHllcworCisJcnRzCisKK2ZvdXRfcGFja19ub3Rfbm9ybToKKwljbXBpLmIJCSVkMCwmREVOT1JNCQkjIGlzIGl0IGEgREVOT1JNPworCWJlcS53CQlmb3V0X3BhY2tfbm9ybQkJIyB5ZXMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWNsci53CQkyK0ZQX1NSQ19FWCglYTYpCisJY21waS5iCQklZDAsJlNOQU4JCSMgaXMgaXQgYW4gU05BTj8KKwliZXEuYgkJZm91dF9wYWNrX3NuYW4JCSMgeWVzCisJYnJhLmIJCWZvdXRfcGFja193cml0ZQkJIyBubworCitmb3V0X3BhY2tfc25hbjoKKwlvcmkudwkJJnNuYW5pb3AyX21hc2ssRlBTUl9FWENFUFQoJWE2KSAjIHNldCBTTkFOL0FJT1AKKwlic2V0CQkmMHg2LEZQX1NSQ19ISSglYTYpCSMgc2V0IHNuYW4gYml0CisJYnJhLmIJCWZvdXRfcGFja193cml0ZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZldGNoX2RyZWcoKTogZmV0Y2ggcmVnaXN0ZXIgYWNjb3JkaW5nIHRvIGluZGV4IGluIGQxCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMSA9IGluZGV4IG9mIHJlZ2lzdGVyIHRvIGZldGNoIGZyb20JCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZDAgPSB2YWx1ZSBvZiByZWdpc3RlciBmZXRjaGVkCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlBY2NvcmRpbmcgdG8gdGhlIGluZGV4IHZhbHVlIGluIGQxIHdoaWNoIGNhbiByYW5nZSBmcm9tIHplcm8JIworIyB0byBmaWZ0ZWVuLCBsb2FkIHRoZSBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyIGZpbGUgdmFsdWUgKHdoZXJlCQkjCisjIGFkZHJlc3MgcmVnaXN0ZXIgaW5kZXhlcyBzdGFydCBhdCA4KS4gRDAvRDEvQTAvQTEvQTYvQTcgYXJlIG9uIHRoZQkjCisjIHN0YWNrLiBUaGUgcmVzdCBzaG91bGQgc3RpbGwgYmUgaW4gdGhlaXIgb3JpZ2luYWwgcGxhY2VzLgkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyB0aGlzIHJvdXRpbmUgbGVhdmVzIGQxIGludGFjdCBmb3Igc3Vic2VxdWVudCBzdG9yZV9kcmVnIGNhbGxzLgorCWdsb2JhbAkJZmV0Y2hfZHJlZworZmV0Y2hfZHJlZzoKKwltb3YudwkJKHRibF9mZHJlZy5iLCVwYywlZDEudyoyKSwlZDAKKwlqbXAJCSh0YmxfZmRyZWcuYiwlcGMsJWQwLncqMSkKKwordGJsX2ZkcmVnOgorCXNob3J0CQlmZHJlZzAgLSB0YmxfZmRyZWcKKwlzaG9ydAkJZmRyZWcxIC0gdGJsX2ZkcmVnCisJc2hvcnQJCWZkcmVnMiAtIHRibF9mZHJlZworCXNob3J0CQlmZHJlZzMgLSB0YmxfZmRyZWcKKwlzaG9ydAkJZmRyZWc0IC0gdGJsX2ZkcmVnCisJc2hvcnQJCWZkcmVnNSAtIHRibF9mZHJlZworCXNob3J0CQlmZHJlZzYgLSB0YmxfZmRyZWcKKwlzaG9ydAkJZmRyZWc3IC0gdGJsX2ZkcmVnCisJc2hvcnQJCWZkcmVnOCAtIHRibF9mZHJlZworCXNob3J0CQlmZHJlZzkgLSB0YmxfZmRyZWcKKwlzaG9ydAkJZmRyZWdhIC0gdGJsX2ZkcmVnCisJc2hvcnQJCWZkcmVnYiAtIHRibF9mZHJlZworCXNob3J0CQlmZHJlZ2MgLSB0YmxfZmRyZWcKKwlzaG9ydAkJZmRyZWdkIC0gdGJsX2ZkcmVnCisJc2hvcnQJCWZkcmVnZSAtIHRibF9mZHJlZworCXNob3J0CQlmZHJlZ2YgLSB0YmxfZmRyZWcKKworZmRyZWcwOgorCW1vdi5sCQlFWENfRFJFR1MrMHgwKCVhNiksJWQwCisJcnRzCitmZHJlZzE6CisJbW92LmwJCUVYQ19EUkVHUysweDQoJWE2KSwlZDAKKwlydHMKK2ZkcmVnMjoKKwltb3YubAkJJWQyLCVkMAorCXJ0cworZmRyZWczOgorCW1vdi5sCQklZDMsJWQwCisJcnRzCitmZHJlZzQ6CisJbW92LmwJCSVkNCwlZDAKKwlydHMKK2ZkcmVnNToKKwltb3YubAkJJWQ1LCVkMAorCXJ0cworZmRyZWc2OgorCW1vdi5sCQklZDYsJWQwCisJcnRzCitmZHJlZzc6CisJbW92LmwJCSVkNywlZDAKKwlydHMKK2ZkcmVnODoKKwltb3YubAkJRVhDX0RSRUdTKzB4OCglYTYpLCVkMAorCXJ0cworZmRyZWc5OgorCW1vdi5sCQlFWENfRFJFR1MrMHhjKCVhNiksJWQwCisJcnRzCitmZHJlZ2E6CisJbW92LmwJCSVhMiwlZDAKKwlydHMKK2ZkcmVnYjoKKwltb3YubAkJJWEzLCVkMAorCXJ0cworZmRyZWdjOgorCW1vdi5sCQklYTQsJWQwCisJcnRzCitmZHJlZ2Q6CisJbW92LmwJCSVhNSwlZDAKKwlydHMKK2ZkcmVnZToKKwltb3YubAkJKCVhNiksJWQwCisJcnRzCitmZHJlZ2Y6CisJbW92LmwJCUVYQ19BNyglYTYpLCVkMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXN0b3JlX2RyZWdfbCgpOiBzdG9yZSBsb25nd29yZCB0byBkYXRhIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBkMQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IGxvbmdvd3JkIHZhbHVlIHRvIHN0b3JlCQkJCQkjCisjCWQxID0gaW5kZXggb2YgcmVnaXN0ZXIgdG8gZmV0Y2ggZnJvbQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkoZGF0YSByZWdpc3RlciBpcyB1cGRhdGVkKQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJQWNjb3JkaW5nIHRvIHRoZSBpbmRleCB2YWx1ZSBpbiBkMSwgc3RvcmUgdGhlIGxvbmd3b3JkIHZhbHVlCSMKKyMgaW4gZDAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZGF0YSByZWdpc3Rlci4gRDAvRDEgYXJlIG9uIHRoZSBzdGFjawkjCisjIHdoaWxlIHRoZSByZXN0IGFyZSBpbiB0aGVpciBpbml0aWFsIHBsYWNlcy4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc3RvcmVfZHJlZ19sCitzdG9yZV9kcmVnX2w6CisJbW92LncJCSh0Ymxfc2RyZWdsLmIsJXBjLCVkMS53KjIpLCVkMQorCWptcAkJKHRibF9zZHJlZ2wuYiwlcGMsJWQxLncqMSkKKwordGJsX3NkcmVnbDoKKwlzaG9ydAkJc2RyZWdsMCAtIHRibF9zZHJlZ2wKKwlzaG9ydAkJc2RyZWdsMSAtIHRibF9zZHJlZ2wKKwlzaG9ydAkJc2RyZWdsMiAtIHRibF9zZHJlZ2wKKwlzaG9ydAkJc2RyZWdsMyAtIHRibF9zZHJlZ2wKKwlzaG9ydAkJc2RyZWdsNCAtIHRibF9zZHJlZ2wKKwlzaG9ydAkJc2RyZWdsNSAtIHRibF9zZHJlZ2wKKwlzaG9ydAkJc2RyZWdsNiAtIHRibF9zZHJlZ2wKKwlzaG9ydAkJc2RyZWdsNyAtIHRibF9zZHJlZ2wKKworc2RyZWdsMDoKKwltb3YubAkJJWQwLEVYQ19EUkVHUysweDAoJWE2KQorCXJ0cworc2RyZWdsMToKKwltb3YubAkJJWQwLEVYQ19EUkVHUysweDQoJWE2KQorCXJ0cworc2RyZWdsMjoKKwltb3YubAkJJWQwLCVkMgorCXJ0cworc2RyZWdsMzoKKwltb3YubAkJJWQwLCVkMworCXJ0cworc2RyZWdsNDoKKwltb3YubAkJJWQwLCVkNAorCXJ0cworc2RyZWdsNToKKwltb3YubAkJJWQwLCVkNQorCXJ0cworc2RyZWdsNjoKKwltb3YubAkJJWQwLCVkNgorCXJ0cworc2RyZWdsNzoKKwltb3YubAkJJWQwLCVkNworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXN0b3JlX2RyZWdfdygpOiBzdG9yZSB3b3JkIHRvIGRhdGEgcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IGQxCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gd29yZCB2YWx1ZSB0byBzdG9yZQkJCQkJIworIwlkMSA9IGluZGV4IG9mIHJlZ2lzdGVyIHRvIGZldGNoIGZyb20JCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJKGRhdGEgcmVnaXN0ZXIgaXMgdXBkYXRlZCkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUFjY29yZGluZyB0byB0aGUgaW5kZXggdmFsdWUgaW4gZDEsIHN0b3JlIHRoZSB3b3JkIHZhbHVlCSMKKyMgaW4gZDAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZGF0YSByZWdpc3Rlci4gRDAvRDEgYXJlIG9uIHRoZSBzdGFjawkjCisjIHdoaWxlIHRoZSByZXN0IGFyZSBpbiB0aGVpciBpbml0aWFsIHBsYWNlcy4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc3RvcmVfZHJlZ193CitzdG9yZV9kcmVnX3c6CisJbW92LncJCSh0Ymxfc2RyZWd3LmIsJXBjLCVkMS53KjIpLCVkMQorCWptcAkJKHRibF9zZHJlZ3cuYiwlcGMsJWQxLncqMSkKKwordGJsX3NkcmVndzoKKwlzaG9ydAkJc2RyZWd3MCAtIHRibF9zZHJlZ3cKKwlzaG9ydAkJc2RyZWd3MSAtIHRibF9zZHJlZ3cKKwlzaG9ydAkJc2RyZWd3MiAtIHRibF9zZHJlZ3cKKwlzaG9ydAkJc2RyZWd3MyAtIHRibF9zZHJlZ3cKKwlzaG9ydAkJc2RyZWd3NCAtIHRibF9zZHJlZ3cKKwlzaG9ydAkJc2RyZWd3NSAtIHRibF9zZHJlZ3cKKwlzaG9ydAkJc2RyZWd3NiAtIHRibF9zZHJlZ3cKKwlzaG9ydAkJc2RyZWd3NyAtIHRibF9zZHJlZ3cKKworc2RyZWd3MDoKKwltb3YudwkJJWQwLDIrRVhDX0RSRUdTKzB4MCglYTYpCisJcnRzCitzZHJlZ3cxOgorCW1vdi53CQklZDAsMitFWENfRFJFR1MrMHg0KCVhNikKKwlydHMKK3NkcmVndzI6CisJbW92LncJCSVkMCwlZDIKKwlydHMKK3NkcmVndzM6CisJbW92LncJCSVkMCwlZDMKKwlydHMKK3NkcmVndzQ6CisJbW92LncJCSVkMCwlZDQKKwlydHMKK3NkcmVndzU6CisJbW92LncJCSVkMCwlZDUKKwlydHMKK3NkcmVndzY6CisJbW92LncJCSVkMCwlZDYKKwlydHMKK3NkcmVndzc6CisJbW92LncJCSVkMCwlZDcKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlzdG9yZV9kcmVnX2IoKTogc3RvcmUgYnl0ZSB0byBkYXRhIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBkMQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IGJ5dGUgdmFsdWUgdG8gc3RvcmUJCQkJCSMKKyMJZDEgPSBpbmRleCBvZiByZWdpc3RlciB0byBmZXRjaCBmcm9tCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCShkYXRhIHJlZ2lzdGVyIGlzIHVwZGF0ZWQpCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlBY2NvcmRpbmcgdG8gdGhlIGluZGV4IHZhbHVlIGluIGQxLCBzdG9yZSB0aGUgYnl0ZSB2YWx1ZQkjCisjIGluIGQwIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEgcmVnaXN0ZXIuIEQwL0QxIGFyZSBvbiB0aGUgc3RhY2sJIworIyB3aGlsZSB0aGUgcmVzdCBhcmUgaW4gdGhlaXIgaW5pdGlhbCBwbGFjZXMuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXN0b3JlX2RyZWdfYgorc3RvcmVfZHJlZ19iOgorCW1vdi53CQkodGJsX3NkcmVnYi5iLCVwYywlZDEudyoyKSwlZDEKKwlqbXAJCSh0Ymxfc2RyZWdiLmIsJXBjLCVkMS53KjEpCisKK3RibF9zZHJlZ2I6CisJc2hvcnQJCXNkcmVnYjAgLSB0Ymxfc2RyZWdiCisJc2hvcnQJCXNkcmVnYjEgLSB0Ymxfc2RyZWdiCisJc2hvcnQJCXNkcmVnYjIgLSB0Ymxfc2RyZWdiCisJc2hvcnQJCXNkcmVnYjMgLSB0Ymxfc2RyZWdiCisJc2hvcnQJCXNkcmVnYjQgLSB0Ymxfc2RyZWdiCisJc2hvcnQJCXNkcmVnYjUgLSB0Ymxfc2RyZWdiCisJc2hvcnQJCXNkcmVnYjYgLSB0Ymxfc2RyZWdiCisJc2hvcnQJCXNkcmVnYjcgLSB0Ymxfc2RyZWdiCisKK3NkcmVnYjA6CisJbW92LmIJCSVkMCwzK0VYQ19EUkVHUysweDAoJWE2KQorCXJ0cworc2RyZWdiMToKKwltb3YuYgkJJWQwLDMrRVhDX0RSRUdTKzB4NCglYTYpCisJcnRzCitzZHJlZ2IyOgorCW1vdi5iCQklZDAsJWQyCisJcnRzCitzZHJlZ2IzOgorCW1vdi5iCQklZDAsJWQzCisJcnRzCitzZHJlZ2I0OgorCW1vdi5iCQklZDAsJWQ0CisJcnRzCitzZHJlZ2I1OgorCW1vdi5iCQklZDAsJWQ1CisJcnRzCitzZHJlZ2I2OgorCW1vdi5iCQklZDAsJWQ2CisJcnRzCitzZHJlZ2I3OgorCW1vdi5iCQklZDAsJWQ3CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJaW5jX2FyZWcoKTogaW5jcmVtZW50IGFuIGFkZHJlc3MgcmVnaXN0ZXIgYnkgdGhlIHZhbHVlIGluIGQwCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gYW1vdW50IHRvIGluY3JlbWVudCBieQkJCQkJIworIwlkMSA9IGluZGV4IG9mIGFkZHJlc3MgcmVnaXN0ZXIgdG8gaW5jcmVtZW50CQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJKGFkZHJlc3MgcmVnaXN0ZXIgaXMgdXBkYXRlZCkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVR5cGljYWxseSB1c2VkIGZvciBhbiBpbnN0cnVjdGlvbiB3LyBhIHBvc3QtaW5jcmVtZW50IDxlYT4sCSMKKyMgdGhpcyByb3V0aW5lIGFkZHMgdGhlIGluY3JlbWVudCB2YWx1ZSBpbiBkMCB0byB0aGUgYWRkcmVzcyByZWdpc3RlcgkjCisjIHNwZWNpZmllZCBieSBkMS4gQTAvQTEvQTYvQTcgcmVzaWRlIG9uIHRoZSBzdGFjay4gVGhlIHJlc3QgcmVzaWRlCSMKKyMgaW4gdGhlaXIgb3JpZ2luYWwgcGxhY2VzLgkJCQkJCSMKKyMJRm9yIGE3LCBpZiB0aGUgaW5jcmVtZW50IGFtb3VudCBpcyBvbmUsIHRoZW4gd2UgaGF2ZSB0bwkJIworIyBpbmNyZW1lbnQgYnkgdHdvLiBGb3IgYW55IGE3IHVwZGF0ZSwgc2V0IHRoZSBtaWE3X2ZsYWcgc28gdGhhdCBpZgkjCisjIGFuIGFjY2VzcyBlcnJvciBleGNlcHRpb24gb2NjdXJzIGxhdGVyIGluIGVtdWxhdGlvbiwgdGhpcyBhZGRyZXNzCSMKKyMgcmVnaXN0ZXIgdXBkYXRlIGNhbiBiZSB1bmRvbmUuCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlpbmNfYXJlZworaW5jX2FyZWc6CisJbW92LncJCSh0YmxfaWFyZWcuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX2lhcmVnLmIsJXBjLCVkMS53KjEpCisKK3RibF9pYXJlZzoKKwlzaG9ydAkJaWFyZWcwIC0gdGJsX2lhcmVnCisJc2hvcnQJCWlhcmVnMSAtIHRibF9pYXJlZworCXNob3J0CQlpYXJlZzIgLSB0YmxfaWFyZWcKKwlzaG9ydAkJaWFyZWczIC0gdGJsX2lhcmVnCisJc2hvcnQJCWlhcmVnNCAtIHRibF9pYXJlZworCXNob3J0CQlpYXJlZzUgLSB0YmxfaWFyZWcKKwlzaG9ydAkJaWFyZWc2IC0gdGJsX2lhcmVnCisJc2hvcnQJCWlhcmVnNyAtIHRibF9pYXJlZworCitpYXJlZzA6CWFkZC5sCQklZDAsRVhDX0RSRUdTKzB4OCglYTYpCisJcnRzCitpYXJlZzE6CWFkZC5sCQklZDAsRVhDX0RSRUdTKzB4YyglYTYpCisJcnRzCitpYXJlZzI6CWFkZC5sCQklZDAsJWEyCisJcnRzCitpYXJlZzM6CWFkZC5sCQklZDAsJWEzCisJcnRzCitpYXJlZzQ6CWFkZC5sCQklZDAsJWE0CisJcnRzCitpYXJlZzU6CWFkZC5sCQklZDAsJWE1CisJcnRzCitpYXJlZzY6CWFkZC5sCQklZDAsKCVhNikKKwlydHMKK2lhcmVnNzoJbW92LmIJCSZtaWE3X2ZsZyxTUENPTkRfRkxHKCVhNikKKwljbXBpLmIJCSVkMCwmMHgxCisJYmVxLmIJCWlhcmVnN2IKKwlhZGQubAkJJWQwLEVYQ19BNyglYTYpCisJcnRzCitpYXJlZzdiOgorCWFkZHEubAkJJjB4MixFWENfQTcoJWE2KQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWRlY19hcmVnKCk6IGRlY3JlbWVudCBhbiBhZGRyZXNzIHJlZ2lzdGVyIGJ5IHRoZSB2YWx1ZSBpbiBkMAkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IGFtb3VudCB0byBkZWNyZW1lbnQgYnkJCQkJCSMKKyMJZDEgPSBpbmRleCBvZiBhZGRyZXNzIHJlZ2lzdGVyIHRvIGRlY3JlbWVudAkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCShhZGRyZXNzIHJlZ2lzdGVyIGlzIHVwZGF0ZWQpCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUeXBpY2FsbHkgdXNlZCBmb3IgYW4gaW5zdHJ1Y3Rpb24gdy8gYSBwcmUtZGVjcmVtZW50IDxlYT4sCSMKKyMgdGhpcyByb3V0aW5lIGFkZHMgdGhlIGRlY3JlbWVudCB2YWx1ZSBpbiBkMCB0byB0aGUgYWRkcmVzcyByZWdpc3RlcgkjCisjIHNwZWNpZmllZCBieSBkMS4gQTAvQTEvQTYvQTcgcmVzaWRlIG9uIHRoZSBzdGFjay4gVGhlIHJlc3QgcmVzaWRlCSMKKyMgaW4gdGhlaXIgb3JpZ2luYWwgcGxhY2VzLgkJCQkJCSMKKyMJRm9yIGE3LCBpZiB0aGUgZGVjcmVtZW50IGFtb3VudCBpcyBvbmUsIHRoZW4gd2UgaGF2ZSB0bwkJIworIyBkZWNyZW1lbnQgYnkgdHdvLiBGb3IgYW55IGE3IHVwZGF0ZSwgc2V0IHRoZSBtZGE3X2ZsYWcgc28gdGhhdCBpZgkjCisjIGFuIGFjY2VzcyBlcnJvciBleGNlcHRpb24gb2NjdXJzIGxhdGVyIGluIGVtdWxhdGlvbiwgdGhpcyBhZGRyZXNzCSMKKyMgcmVnaXN0ZXIgdXBkYXRlIGNhbiBiZSB1bmRvbmUuCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlkZWNfYXJlZworZGVjX2FyZWc6CisJbW92LncJCSh0YmxfZGFyZWcuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX2RhcmVnLmIsJXBjLCVkMS53KjEpCisKK3RibF9kYXJlZzoKKwlzaG9ydAkJZGFyZWcwIC0gdGJsX2RhcmVnCisJc2hvcnQJCWRhcmVnMSAtIHRibF9kYXJlZworCXNob3J0CQlkYXJlZzIgLSB0YmxfZGFyZWcKKwlzaG9ydAkJZGFyZWczIC0gdGJsX2RhcmVnCisJc2hvcnQJCWRhcmVnNCAtIHRibF9kYXJlZworCXNob3J0CQlkYXJlZzUgLSB0YmxfZGFyZWcKKwlzaG9ydAkJZGFyZWc2IC0gdGJsX2RhcmVnCisJc2hvcnQJCWRhcmVnNyAtIHRibF9kYXJlZworCitkYXJlZzA6CXN1Yi5sCQklZDAsRVhDX0RSRUdTKzB4OCglYTYpCisJcnRzCitkYXJlZzE6CXN1Yi5sCQklZDAsRVhDX0RSRUdTKzB4YyglYTYpCisJcnRzCitkYXJlZzI6CXN1Yi5sCQklZDAsJWEyCisJcnRzCitkYXJlZzM6CXN1Yi5sCQklZDAsJWEzCisJcnRzCitkYXJlZzQ6CXN1Yi5sCQklZDAsJWE0CisJcnRzCitkYXJlZzU6CXN1Yi5sCQklZDAsJWE1CisJcnRzCitkYXJlZzY6CXN1Yi5sCQklZDAsKCVhNikKKwlydHMKK2RhcmVnNzoJbW92LmIJCSZtZGE3X2ZsZyxTUENPTkRfRkxHKCVhNikKKwljbXBpLmIJCSVkMCwmMHgxCisJYmVxLmIJCWRhcmVnN2IKKwlzdWIubAkJJWQwLEVYQ19BNyglYTYpCisJcnRzCitkYXJlZzdiOgorCXN1YnEubAkJJjB4MixFWENfQTcoJWE2KQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlsb2FkX2ZwbjEoKTogbG9hZCBGUCByZWdpc3RlciB2YWx1ZSBpbnRvIEZQX1NSQyhhNikuCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IGluZGV4IG9mIEZQIHJlZ2lzdGVyIHRvIGxvYWQJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRlBfU1JDKGE2KSA9IHZhbHVlIGxvYWRlZCBmcm9tIEZQIHJlZ2lzdGVyIGZpbGUJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlVc2luZyB0aGUgaW5kZXggaW4gZDAsIGxvYWQgRlBfU1JDKGE2KSB3aXRoIGEgbnVtYmVyIGZyb20gdGhlCSMKKyMgRlAgcmVnaXN0ZXIgZmlsZS4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJbG9hZF9mcG4xCitsb2FkX2ZwbjE6CisJbW92LncJCSh0YmxfbG9hZF9mcG4xLmIsJXBjLCVkMC53KjIpLCAlZDAKKwlqbXAJCSh0YmxfbG9hZF9mcG4xLmIsJXBjLCVkMC53KjEpCisKK3RibF9sb2FkX2ZwbjE6CisJc2hvcnQJCWxvYWRfZnBuMV8wIC0gdGJsX2xvYWRfZnBuMQorCXNob3J0CQlsb2FkX2ZwbjFfMSAtIHRibF9sb2FkX2ZwbjEKKwlzaG9ydAkJbG9hZF9mcG4xXzIgLSB0YmxfbG9hZF9mcG4xCisJc2hvcnQJCWxvYWRfZnBuMV8zIC0gdGJsX2xvYWRfZnBuMQorCXNob3J0CQlsb2FkX2ZwbjFfNCAtIHRibF9sb2FkX2ZwbjEKKwlzaG9ydAkJbG9hZF9mcG4xXzUgLSB0YmxfbG9hZF9mcG4xCisJc2hvcnQJCWxvYWRfZnBuMV82IC0gdGJsX2xvYWRfZnBuMQorCXNob3J0CQlsb2FkX2ZwbjFfNyAtIHRibF9sb2FkX2ZwbjEKKworbG9hZF9mcG4xXzA6CisJbW92LmwJCTArRVhDX0ZQMCglYTYpLCAwK0ZQX1NSQyglYTYpCisJbW92LmwJCTQrRVhDX0ZQMCglYTYpLCA0K0ZQX1NSQyglYTYpCisJbW92LmwJCTgrRVhDX0ZQMCglYTYpLCA4K0ZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCisJcnRzCitsb2FkX2ZwbjFfMToKKwltb3YubAkJMCtFWENfRlAxKCVhNiksIDArRlBfU1JDKCVhNikKKwltb3YubAkJNCtFWENfRlAxKCVhNiksIDQrRlBfU1JDKCVhNikKKwltb3YubAkJOCtFWENfRlAxKCVhNiksIDgrRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCAlYTAKKwlydHMKK2xvYWRfZnBuMV8yOgorCWZtb3ZtLngJCSYweDIwLCBGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksICVhMAorCXJ0cworbG9hZF9mcG4xXzM6CisJZm1vdm0ueAkJJjB4MTAsIEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCisJcnRzCitsb2FkX2ZwbjFfNDoKKwlmbW92bS54CQkmMHgwOCwgRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCAlYTAKKwlydHMKK2xvYWRfZnBuMV81OgorCWZtb3ZtLngJCSYweDA0LCBGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksICVhMAorCXJ0cworbG9hZF9mcG4xXzY6CisJZm1vdm0ueAkJJjB4MDIsIEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCisJcnRzCitsb2FkX2ZwbjFfNzoKKwlmbW92bS54CQkmMHgwMSwgRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCAlYTAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlsb2FkX2ZwbjIoKTogbG9hZCBGUCByZWdpc3RlciB2YWx1ZSBpbnRvIEZQX0RTVChhNikuCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IGluZGV4IG9mIEZQIHJlZ2lzdGVyIHRvIGxvYWQJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRlBfRFNUKGE2KSA9IHZhbHVlIGxvYWRlZCBmcm9tIEZQIHJlZ2lzdGVyIGZpbGUJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlVc2luZyB0aGUgaW5kZXggaW4gZDAsIGxvYWQgRlBfRFNUKGE2KSB3aXRoIGEgbnVtYmVyIGZyb20gdGhlCSMKKyMgRlAgcmVnaXN0ZXIgZmlsZS4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJbG9hZF9mcG4yCitsb2FkX2ZwbjI6CisJbW92LncJCSh0YmxfbG9hZF9mcG4yLmIsJXBjLCVkMC53KjIpLCAlZDAKKwlqbXAJCSh0YmxfbG9hZF9mcG4yLmIsJXBjLCVkMC53KjEpCisKK3RibF9sb2FkX2ZwbjI6CisJc2hvcnQJCWxvYWRfZnBuMl8wIC0gdGJsX2xvYWRfZnBuMgorCXNob3J0CQlsb2FkX2ZwbjJfMSAtIHRibF9sb2FkX2ZwbjIKKwlzaG9ydAkJbG9hZF9mcG4yXzIgLSB0YmxfbG9hZF9mcG4yCisJc2hvcnQJCWxvYWRfZnBuMl8zIC0gdGJsX2xvYWRfZnBuMgorCXNob3J0CQlsb2FkX2ZwbjJfNCAtIHRibF9sb2FkX2ZwbjIKKwlzaG9ydAkJbG9hZF9mcG4yXzUgLSB0YmxfbG9hZF9mcG4yCisJc2hvcnQJCWxvYWRfZnBuMl82IC0gdGJsX2xvYWRfZnBuMgorCXNob3J0CQlsb2FkX2ZwbjJfNyAtIHRibF9sb2FkX2ZwbjIKKworbG9hZF9mcG4yXzA6CisJbW92LmwJCTArRVhDX0ZQMCglYTYpLCAwK0ZQX0RTVCglYTYpCisJbW92LmwJCTQrRVhDX0ZQMCglYTYpLCA0K0ZQX0RTVCglYTYpCisJbW92LmwJCTgrRVhDX0ZQMCglYTYpLCA4K0ZQX0RTVCglYTYpCisJbGVhCQlGUF9EU1QoJWE2KSwgJWEwCisJcnRzCitsb2FkX2ZwbjJfMToKKwltb3YubAkJMCtFWENfRlAxKCVhNiksIDArRlBfRFNUKCVhNikKKwltb3YubAkJNCtFWENfRlAxKCVhNiksIDQrRlBfRFNUKCVhNikKKwltb3YubAkJOCtFWENfRlAxKCVhNiksIDgrRlBfRFNUKCVhNikKKwlsZWEJCUZQX0RTVCglYTYpLCAlYTAKKwlydHMKK2xvYWRfZnBuMl8yOgorCWZtb3ZtLngJCSYweDIwLCBGUF9EU1QoJWE2KQorCWxlYQkJRlBfRFNUKCVhNiksICVhMAorCXJ0cworbG9hZF9mcG4yXzM6CisJZm1vdm0ueAkJJjB4MTAsIEZQX0RTVCglYTYpCisJbGVhCQlGUF9EU1QoJWE2KSwgJWEwCisJcnRzCitsb2FkX2ZwbjJfNDoKKwlmbW92bS54CQkmMHgwOCwgRlBfRFNUKCVhNikKKwlsZWEJCUZQX0RTVCglYTYpLCAlYTAKKwlydHMKK2xvYWRfZnBuMl81OgorCWZtb3ZtLngJCSYweDA0LCBGUF9EU1QoJWE2KQorCWxlYQkJRlBfRFNUKCVhNiksICVhMAorCXJ0cworbG9hZF9mcG4yXzY6CisJZm1vdm0ueAkJJjB4MDIsIEZQX0RTVCglYTYpCisJbGVhCQlGUF9EU1QoJWE2KSwgJWEwCisJcnRzCitsb2FkX2ZwbjJfNzoKKwlmbW92bS54CQkmMHgwMSwgRlBfRFNUKCVhNikKKwlsZWEJCUZQX0RTVCglYTYpLCAlYTAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlzdG9yZV9mcHJlZygpOiBzdG9yZSBhbiBmcCB2YWx1ZSB0byB0aGUgZnByZWcgZGVzaWduYXRlZCBkMC4JIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gZXh0ZW5kZWQgcHJlY2lzaW9uIHZhbHVlIHRvIHN0b3JlCQkJCSMKKyMJZDAgID0gaW5kZXggb2YgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJU3RvcmUgdGhlIHZhbHVlIGluIGZwMCB0byB0aGUgRlAgcmVnaXN0ZXIgZGVzaWduYXRlZCBieSB0aGUJIworIyB2YWx1ZSBpbiBkMC4gVGhlIEZQIG51bWJlciBjYW4gYmUgREVOT1JNIG9yIFNOQU4gc28gd2UgaGF2ZSB0byBiZQkjCisjIGNhcmVmdWwgdGhhdCB3ZSBkb24ndCB0YWtlIGFuIGV4Y2VwdGlvbiBoZXJlLgkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzdG9yZV9mcHJlZworc3RvcmVfZnByZWc6CisJbW92LncJCSh0Ymxfc3RvcmVfZnByZWcuYiwlcGMsJWQwLncqMiksICVkMAorCWptcAkJKHRibF9zdG9yZV9mcHJlZy5iLCVwYywlZDAudyoxKQorCit0Ymxfc3RvcmVfZnByZWc6CisJc2hvcnQJCXN0b3JlX2ZwcmVnXzAgLSB0Ymxfc3RvcmVfZnByZWcKKwlzaG9ydAkJc3RvcmVfZnByZWdfMSAtIHRibF9zdG9yZV9mcHJlZworCXNob3J0CQlzdG9yZV9mcHJlZ18yIC0gdGJsX3N0b3JlX2ZwcmVnCisJc2hvcnQJCXN0b3JlX2ZwcmVnXzMgLSB0Ymxfc3RvcmVfZnByZWcKKwlzaG9ydAkJc3RvcmVfZnByZWdfNCAtIHRibF9zdG9yZV9mcHJlZworCXNob3J0CQlzdG9yZV9mcHJlZ181IC0gdGJsX3N0b3JlX2ZwcmVnCisJc2hvcnQJCXN0b3JlX2ZwcmVnXzYgLSB0Ymxfc3RvcmVfZnByZWcKKwlzaG9ydAkJc3RvcmVfZnByZWdfNyAtIHRibF9zdG9yZV9mcHJlZworCitzdG9yZV9mcHJlZ18wOgorCWZtb3ZtLngJCSYweDgwLCBFWENfRlAwKCVhNikKKwlydHMKK3N0b3JlX2ZwcmVnXzE6CisJZm1vdm0ueAkJJjB4ODAsIEVYQ19GUDEoJWE2KQorCXJ0cworc3RvcmVfZnByZWdfMjoKKwlmbW92bS54CQkmMHgwMSwgLSglc3ApCisJZm1vdm0ueAkJKCVzcCkrLCAmMHgyMAorCXJ0cworc3RvcmVfZnByZWdfMzoKKwlmbW92bS54CQkmMHgwMSwgLSglc3ApCisJZm1vdm0ueAkJKCVzcCkrLCAmMHgxMAorCXJ0cworc3RvcmVfZnByZWdfNDoKKwlmbW92bS54CQkmMHgwMSwgLSglc3ApCisJZm1vdm0ueAkJKCVzcCkrLCAmMHgwOAorCXJ0cworc3RvcmVfZnByZWdfNToKKwlmbW92bS54CQkmMHgwMSwgLSglc3ApCisJZm1vdm0ueAkJKCVzcCkrLCAmMHgwNAorCXJ0cworc3RvcmVfZnByZWdfNjoKKwlmbW92bS54CQkmMHgwMSwgLSglc3ApCisJZm1vdm0ueAkJKCVzcCkrLCAmMHgwMgorCXJ0cworc3RvcmVfZnByZWdfNzoKKwlmbW92bS54CQkmMHgwMSwgLSglc3ApCisJZm1vdm0ueAkJKCVzcCkrLCAmMHgwMQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9kZW5vcm0oKTogZGVub3JtYWxpemUgYW4gaW50ZXJtZWRpYXRlIHJlc3VsdAkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWEwID0gcG9pbnRzIHRvIHRoZSBvcGVyYW5kIHRvIGJlIGRlbm9ybWFsaXplZAkJCSMKKyMJCShpbiB0aGUgaW50ZXJuYWwgZXh0ZW5kZWQgZm9ybWF0KQkJCSMKKyMJCQkJCQkJCQkjCisjCWQwID0gcm91bmRpbmcgcHJlY2lzaW9uCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIHRoZSBkZW5vcm1hbGl6ZWQgcmVzdWx0CQkJCSMKKyMJCShpbiB0aGUgaW50ZXJuYWwgZXh0ZW5kZWQgZm9ybWF0KQkJCSMKKyMJCQkJCQkJCQkjCisjCWQwID0gZ3VhcmQscm91bmQsc3RpY2t5CQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJQWNjb3JkaW5nIHRvIHRoZSBleHBvbmVudCB1bmRlcmZsb3cgdGhyZXNob2xkIGZvciB0aGUgZ2l2ZW4JIworIyBwcmVjaXNpb24sIHNoaWZ0IHRoZSBtYW50aXNzYSBiaXRzIHRvIHRoZSByaWdodCBpbiBvcmRlciByYWlzZSB0aGUJIworIyBleHBvbmVudCBvZiB0aGUgb3BlcmFuZCB0byB0aGUgdGhyZXNob2xkIHZhbHVlLiBXaGlsZSBzaGlmdGluZyB0aGUJIworIyBtYW50aXNzYSBiaXRzIHJpZ2h0LCBtYWludGFpbiB0aGUgdmFsdWUgb2YgdGhlIGd1YXJkLCByb3VuZCwgYW5kCSMKKyMgc3RpY2t5IGJpdHMuCQkJCQkJCQkjCisjIG90aGVyIG5vdGVzOgkJCQkJCQkJIworIwkoMSkgX2Rlbm9ybSgpIGlzIGNhbGxlZCBieSB0aGUgdW5kZXJmbG93IHJvdXRpbmVzCQkjCisjCSgyKSBfZGVub3JtKCkgZG9lcyBOT1QgYWZmZWN0IHRoZSBzdGF0dXMgcmVnaXN0ZXIJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgdGFibGUgb2YgZXhwb25lbnQgdGhyZXNob2xkIHZhbHVlcyBmb3IgZWFjaCBwcmVjaXNpb24KKyMKK3RibF90aHJlc2g6CisJc2hvcnQJCTB4MAorCXNob3J0CQlzZ2xfdGhyZXNoCisJc2hvcnQJCWRibF90aHJlc2gKKworCWdsb2JhbAkJX2Rlbm9ybQorX2Rlbm9ybToKKyMKKyMgTG9hZCB0aGUgZXhwb25lbnQgdGhyZXNob2xkIGZvciB0aGUgcHJlY2lzaW9uIHNlbGVjdGVkIGFuZCBjaGVjaworIyB0byBzZWUgaWYgKHRocmVzaG9sZCAtIGV4cG9uZW50KSBpcyA+IDY1IGluIHdoaWNoIGNhc2Ugd2UgY2FuCisjIHNpbXBseSBjYWxjdWxhdGUgdGhlIHN0aWNreSBiaXQgYW5kIHplcm8gdGhlIG1hbnRpc3NhLiBvdGhlcndpc2UKKyMgd2UgaGF2ZSB0byBjYWxsIHRoZSBkZW5vcm1hbGl6YXRpb24gcm91dGluZS4KKyMKKwlsc3IuYgkJJjB4MiwgJWQwCQkjIHNoaWZ0IHByZWMgdG8gbG8gYml0cworCW1vdi53CQkodGJsX3RocmVzaC5iLCVwYywlZDAudyoyKSwgJWQxICMgbG9hZCBwcmVjIHRocmVzaG9sZAorCW1vdi53CQklZDEsICVkMAkJIyBjb3B5IGQxIGludG8gZDAKKwlzdWIudwkJRlRFTVBfRVgoJWEwKSwgJWQwCSMgZGlmZiA9IHRocmVzaG9sZCAtIGV4cAorCWNtcGkudwkJJWQwLCAmNjYJCSMgaXMgZGlmZiA+IDY1PyAobWFudCArIGcsciBiaXRzKQorCWJwbC5iCQlkZW5vcm1fc2V0X3N0a3kJCSMgeWVzOyBqdXN0IGNhbGMgc3RpY2t5CisKKwljbHIubAkJJWQwCQkJIyBjbGVhciBnLHIscworCWJ0c3QJCSZpbmV4Ml9iaXQsIEZQU1JfRVhDRVBUKCVhNikgIyB5ZXM7IHdhcyBJTkVYMiBzZXQ/CisJYmVxLmIJCWRlbm9ybV9jYWxsCQkjIG5vOyBkb24ndCBjaGFuZ2UgYW55dGhpbmcKKwlic2V0CQkmMjksICVkMAkJIyB5ZXM7IHNldCBzdGlja3kgYml0CisKK2Rlbm9ybV9jYWxsOgorCWJzci5sCQlkbnJtX2xwCQkJIyBkZW5vcm1hbGl6ZSB0aGUgbnVtYmVyCisJcnRzCisKKyMKKyMgYWxsIGJpdCB3b3VsZCBoYXZlIGJlZW4gc2hpZnRlZCBvZmYgZHVyaW5nIHRoZSBkZW5vcm0gc28gc2ltcGx5CisjIGNhbGN1bGF0ZSBpZiB0aGUgc3RpY2t5IHNob3VsZCBiZSBzZXQgYW5kIGNsZWFyIHRoZSBlbnRpcmUgbWFudGlzc2EuCisjCitkZW5vcm1fc2V0X3N0a3k6CisJbW92LmwJCSYweDIwMDAwMDAwLCAlZDAJIyBzZXQgc3RpY2t5IGJpdCBpbiByZXR1cm4gdmFsdWUKKwltb3YudwkJJWQxLCBGVEVNUF9FWCglYTApCSMgbG9hZCBleHAgd2l0aCB0aHJlc2hvbGQKKwljbHIubAkJRlRFTVBfSEkoJWEwKQkJIyBzZXQgZDEgPSAwIChtcyBtYW50aXNzYSkKKwljbHIubAkJRlRFTVBfTE8oJWEwKQkJIyBzZXQgZDIgPSAwIChtcyBtYW50aXNzYSkKKwlydHMKKworIwkJCQkJCQkJCSMKKyMgZG5ybV9scCgpOiBub3JtYWxpemUgZXhwb25lbnQvbWFudGlzc2EgdG8gc3BlY2lmaWVkIHRocmVzaGhvbGQJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQ6CQkJCQkJCQkjCisjCSVhMAkgICA6IHBvaW50cyB0byB0aGUgb3BlcmFuZCB0byBiZSBkZW5vcm1hbGl6ZWQJCSMKKyMJJWQwezMxOjI5fSA6IGluaXRpYWwgZ3VhcmQscm91bmQsc3RpY2t5CQkJCSMKKyMJJWQxezE1OjB9ICA6IGRlbm9ybWFsaXphdGlvbiB0aHJlc2hvbGQJCQkJIworIyBPVVRQVVQ6CQkJCQkJCQkjCisjCSVhMAkgICA6IHBvaW50cyB0byB0aGUgZGVub3JtYWxpemVkIG9wZXJhbmQJCQkjCisjCSVkMHszMToyOX0gOiBmaW5hbCBndWFyZCxyb3VuZCxzdGlja3kJCQkJIworIwkJCQkJCQkJCSMKKworIyAqKiogTG9jYWwgRXF1YXRlcyAqKiogIworc2V0CUdSUywJCUxfU0NSMgkJCSMgZyxyLHMgdGVtcCBzdG9yYWdlCitzZXQJRlRFTVBfTE8yLAlMX1NDUjEJCQkjIEZURU1QX0xPIGNvcHkKKworCWdsb2JhbAkJZG5ybV9scAorZG5ybV9scDoKKworIworIyBtYWtlIGEgY29weSBvZiBGVEVNUF9MTyBhbmQgcGxhY2UgdGhlIGcscixzIGJpdHMgZGlyZWN0bHkgYWZ0ZXIgaXQKKyMgaW4gbWVtb3J5IHNvIGFzIHRvIG1ha2UgdGhlIGJpdGZpZWxkIGV4dHJhY3Rpb24gZm9yIGRlbm9ybWFsaXphdGlvbiBlYXNpZXIuCisjCisJbW92LmwJCUZURU1QX0xPKCVhMCksIEZURU1QX0xPMiglYTYpICMgbWFrZSBGVEVNUF9MTyBjb3B5CisJbW92LmwJCSVkMCwgR1JTKCVhNikJCSMgcGxhY2UgZyxyLHMgYWZ0ZXIgaXQKKworIworIyBjaGVjayB0byBzZWUgaG93IG11Y2ggbGVzcyB0aGFuIHRoZSB1bmRlcmZsb3cgdGhyZXNob2xkIHRoZSBvcGVyYW5kCisjIGV4cG9uZW50IGlzLgorIworCW1vdi5sCQklZDEsICVkMAkJIyBjb3B5IHRoZSBkZW5vcm0gdGhyZXNob2xkCisJc3ViLncJCUZURU1QX0VYKCVhMCksICVkMQkjIGQxID0gdGhyZXNob2xkIC0gdW5zIGV4cG9uZW50CisJYmxlLmIJCWRucm1fbm9fbHAJCSMgZDEgPD0gMAorCWNtcGkudwkJJWQxLCAmMHgyMAkJIyBpcyAoIDAgPD0gZDEgPCAzMikgPworCWJsdC5iCQljYXNlXzEJCQkjIHllcworCWNtcGkudwkJJWQxLCAmMHg0MAkJIyBpcyAoMzIgPD0gZDEgPCA2NCkgPworCWJsdC5iCQljYXNlXzIJCQkjIHllcworCWJyYS53CQljYXNlXzMJCQkjIChkMSA+PSA2NCkKKworIworIyBObyBub3JtYWxpemF0aW9uIG5lY2Vzc2FyeQorIworZG5ybV9ub19scDoKKwltb3YubAkJR1JTKCVhNiksICVkMAkJIyByZXN0b3JlIG9yaWdpbmFsIGcscixzCisJcnRzCisKKyMKKyMgY2FzZSAoMDxkMTwzMikKKyMKKyMgJWQwID0gZGVub3JtIHRocmVzaG9sZAorIyAlZDEgPSAibiIgPSBhbXQgdG8gc2hpZnQKKyMKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCXwgICAgIEZURU1QX0hJCSAgfAlGVEVNUF9MTyAgICAgfGdyczAwMC4uLi4uLi4uLjAwMHwKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCTwtKDMyIC0gbiktPjwtKG4pLT48LSgzMiAtIG4pLT48LShuKS0+PC0oMzIgLSBuKS0+PC0obiktPgorIwlcCSAgIFwJCSAgICAgIFwJCQkgXAorIwkgXAkgICAgXAkJICAgICAgIFwJCSAgXAorIwkgIFwJICAgICBcCQkJXAkJICAgXAorIwkgICBcCSAgICAgIFwJCQkgXAkJICAgIFwKKyMJICAgIFwJICAgICAgIFwJCSAgXAkJICAgICBcCisjCSAgICAgXAkJXAkJICAgXAkJICAgICAgXAorIwkgICAgICBcCQkgXAkJICAgIFwJCSAgICAgICBcCisjCSAgICAgICBcCSAgXAkJICAgICBcCQkJXAorIwk8LShuKS0+PC0oMzIgLSBuKS0+PC0tLS0tLSgzMiktLS0tLS0tPjwtLS0tLS0oMzIpLS0tLS0tLT4KKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCXwwLi4uLi4wfCBORVdfSEkgIHwgIE5FV19GVEVNUF9MTyAgICAgfGdycwkJfAorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKK2Nhc2VfMToKKwltb3YubAkJJWQyLCAtKCVzcCkJCSMgY3JlYXRlIHRlbXAgc3RvcmFnZQorCisJbW92LncJCSVkMCwgRlRFTVBfRVgoJWEwKQkjIGV4cG9uZW50ID0gZGVub3JtIHRocmVzaG9sZAorCW1vdi5sCQkmMzIsICVkMAorCXN1Yi53CQklZDEsICVkMAkJIyAlZDAgPSAzMiAtICVkMQorCisJY21waS53CQklZDEsICYyOQkJIyBpcyBzaGZ0IGFtdCA+PSAyOQorCWJsdC5iCQljYXNlMV9leHRyYWN0CQkjIG5vOyBubyBmaXggbmVlZGVkCisJbW92LmIJCUdSUyglYTYpLCAlZDIKKwlvci5iCQklZDIsIDMrRlRFTVBfTE8yKCVhNikKKworY2FzZTFfZXh0cmFjdDoKKwliZmV4dHUJCUZURU1QX0hJKCVhMCl7JjA6JWQwfSwgJWQyICMgJWQyID0gbmV3IEZURU1QX0hJCisJYmZleHR1CQlGVEVNUF9ISSglYTApeyVkMDomMzJ9LCAlZDEgIyAlZDEgPSBuZXcgRlRFTVBfTE8KKwliZmV4dHUJCUZURU1QX0xPMiglYTYpeyVkMDomMzJ9LCAlZDAgIyAlZDAgPSBuZXcgRyxSLFMKKworCW1vdi5sCQklZDIsIEZURU1QX0hJKCVhMCkJIyBzdG9yZSBuZXcgRlRFTVBfSEkKKwltb3YubAkJJWQxLCBGVEVNUF9MTyglYTApCSMgc3RvcmUgbmV3IEZURU1QX0xPCisKKwliZnRzdAkJJWQweyYyOiYzMH0JCSMgd2VyZSBiaXRzIHNoaWZ0ZWQgb2ZmPworCWJlcS5iCQljYXNlMV9zdGlja3lfY2xlYXIJIyBubzsgZ28gZmluaXNoCisJYnNldAkJJnJuZF9zdGt5X2JpdCwgJWQwCSMgeWVzOyBzZXQgc3RpY2t5IGJpdAorCitjYXNlMV9zdGlja3lfY2xlYXI6CisJYW5kLmwJCSYweGUwMDAwMDAwLCAlZDAJIyBjbGVhciBhbGwgYnV0IEcsUixTCisJbW92LmwJCSglc3ApKywgJWQyCQkjIHJlc3RvcmUgdGVtcCByZWdpc3RlcgorCXJ0cworCisjCisjIGNhc2UgKDMyPD1kMTw2NCkKKyMKKyMgJWQwID0gZGVub3JtIHRocmVzaG9sZAorIyAlZDEgPSAibiIgPSBhbXQgdG8gc2hpZnQKKyMKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCXwgICAgIEZURU1QX0hJCSAgfAlGVEVNUF9MTyAgICAgfGdyczAwMC4uLi4uLi4uLjAwMHwKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCTwtKDMyIC0gbiktPjwtKG4pLT48LSgzMiAtIG4pLT48LShuKS0+PC0oMzIgLSBuKS0+PC0obiktPgorIwlcCSAgIFwJCSAgICAgIFwKKyMJIFwJICAgIFwJCSAgICAgICBcCisjCSAgXAkgICAgIFwJCQktLS0tLS0tLS0tLS0tLS0tLS0tCisjCSAgIFwJICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0JCSAgIFwKKyMJICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0JCSAgXAkJICAgIFwKKyMJCQkgICAgICAgXAkgICBcCQkgICAgIFwKKyMJCQkJXAkgICAgXAkJICAgICAgXAorIwkJCQkgXAkgICAgIFwJCSAgICAgICBcCisjCTwtLS0tLS0tKDMyKS0tLS0tLT48LShuKS0+PC0oMzIgLSBuKS0+PC0tLS0tLSgzMiktLS0tLS0tPgorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJfDAuLi4uLi4uLi4uLi4uLi4wfDAuLi4uMHwgTkVXX0xPICAgICB8Z3JzCQl8CisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworY2FzZV8yOgorCW1vdi5sCQklZDIsIC0oJXNwKQkJIyBjcmVhdGUgdGVtcCBzdG9yYWdlCisKKwltb3YudwkJJWQwLCBGVEVNUF9FWCglYTApCSMgZXhwb25lbnQgPSBkZW5vcm0gdGhyZXNob2xkCisJc3ViaS53CQkmMHgyMCwgJWQxCQkjICVkMSBub3cgYmV0d2VlbiAwIGFuZCAzMgorCW1vdi5sCQkmMHgyMCwgJWQwCisJc3ViLncJCSVkMSwgJWQwCQkjICVkMCA9IDMyIC0gJWQxCisKKyMgc3VidGxlIHN0ZXAgaGVyZTsgb3IgaW4gdGhlIGcscixzIGF0IHRoZSBib3R0b20gb2YgRlRFTVBfTE8gdG8gbWluaW1pemUKKyMgdGhlIG51bWJlciBvZiBiaXRzIHRvIGNoZWNrIGZvciB0aGUgc3RpY2t5IGRldGVjdC4KKyMgaXQgb25seSBwbGF5cyBhIHJvbGUgaW4gc2hpZnQgYW1vdW50cyBvZiA2MS02My4KKwltb3YuYgkJR1JTKCVhNiksICVkMgorCW9yLmIJCSVkMiwgMytGVEVNUF9MTzIoJWE2KQorCisJYmZleHR1CQlGVEVNUF9ISSglYTApeyYwOiVkMH0sICVkMiAjICVkMiA9IG5ldyBGVEVNUF9MTworCWJmZXh0dQkJRlRFTVBfSEkoJWEwKXslZDA6JjMyfSwgJWQxICMgJWQxID0gbmV3IEcsUixTCisKKwliZnRzdAkJJWQxeyYyOiYzMH0JCSMgd2VyZSBhbnkgYml0cyBzaGlmdGVkIG9mZj8KKwlibmUuYgkJY2FzZTJfc2V0X3N0aWNreQkjIHllczsgc2V0IHN0aWNreSBiaXQKKwliZnRzdAkJRlRFTVBfTE8yKCVhNil7JWQwOiYzMX0JIyB3ZXJlIGFueSBiaXRzIHNoaWZ0ZWQgb2ZmPworCWJuZS5iCQljYXNlMl9zZXRfc3RpY2t5CSMgeWVzOyBzZXQgc3RpY2t5IGJpdAorCisJbW92LmwJCSVkMSwgJWQwCQkjIG1vdmUgbmV3IEcsUixTIHRvICVkMAorCWJyYS5iCQljYXNlMl9lbmQKKworY2FzZTJfc2V0X3N0aWNreToKKwltb3YubAkJJWQxLCAlZDAJCSMgbW92ZSBuZXcgRyxSLFMgdG8gJWQwCisJYnNldAkJJnJuZF9zdGt5X2JpdCwgJWQwCSMgc2V0IHN0aWNreSBiaXQKKworY2FzZTJfZW5kOgorCWNsci5sCQlGVEVNUF9ISSglYTApCQkjIHN0b3JlIEZURU1QX0hJID0gMAorCW1vdi5sCQklZDIsIEZURU1QX0xPKCVhMCkJIyBzdG9yZSBGVEVNUF9MTworCWFuZC5sCQkmMHhlMDAwMDAwMCwgJWQwCSMgY2xlYXIgYWxsIGJ1dCBHLFIsUworCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSB0ZW1wIHJlZ2lzdGVyCisJcnRzCisKKyMKKyMgY2FzZSAoZDE+PTY0KQorIworIyAlZDAgPSBkZW5vcm0gdGhyZXNob2xkCisjICVkMSA9IGFtdCB0byBzaGlmdAorIworY2FzZV8zOgorCW1vdi53CQklZDAsIEZURU1QX0VYKCVhMCkJIyBpbnNlcnQgZGVub3JtIHRocmVzaG9sZAorCisJY21waS53CQklZDEsICY2NQkJIyBpcyBzaGlmdCBhbXQgPiA2NT8KKwlibHQuYgkJY2FzZTNfNjQJCSMgbm87IGl0J3MgPT0gNjQKKwliZXEuYgkJY2FzZTNfNjUJCSMgbm87IGl0J3MgPT0gNjUKKworIworIyBjYXNlIChkMT42NSkKKyMKKyMgU2hpZnQgdmFsdWUgaXMgPiA2NSBhbmQgb3V0IG9mIHJhbmdlLiBBbGwgYml0cyBhcmUgc2hpZnRlZCBvZmYuCisjIFJldHVybiBhIHplcm8gbWFudGlzc2Egd2l0aCB0aGUgc3RpY2t5IGJpdCBzZXQKKyMKKwljbHIubAkJRlRFTVBfSEkoJWEwKQkJIyBjbGVhciBoaShtYW50aXNzYSkKKwljbHIubAkJRlRFTVBfTE8oJWEwKQkJIyBjbGVhciBsbyhtYW50aXNzYSkKKwltb3YubAkJJjB4MjAwMDAwMDAsICVkMAkjIHNldCBzdGlja3kgYml0CisJcnRzCisKKyMKKyMgY2FzZSAoZDEgPT0gNjQpCisjCisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwl8ICAgICBGVEVNUF9ISQkgIHwJRlRFTVBfTE8gICAgIHxncnMwMDAuLi4uLi4uLi4wMDB8CisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwk8LS0tLS0tLSgzMiktLS0tLS0+CisjCVwJCSAgIFwKKyMJIFwJCSAgICBcCisjCSAgXAkJICAgICBcCisjCSAgIFwJCSAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwkgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJICAgIFwKKyMJCQkJCSAgIFwJCSAgICAgXAorIwkJCQkJICAgIFwJCSAgICAgIFwKKyMJCQkJCSAgICAgXAkJICAgICAgIFwKKyMJCQkJCSAgICAgIDwtLS0tLS0tKDMyKS0tLS0tLT4KKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCXwwLi4uLi4uLi4uLi4uLi4uMHwwLi4uLi4uLi4uLi4uLi4uLjB8Z3JzCQl8CisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworY2FzZTNfNjQ6CisJbW92LmwJCUZURU1QX0hJKCVhMCksICVkMAkjIGZldGNoIGhpKG1hbnRpc3NhKQorCW1vdi5sCQklZDAsICVkMQkJIyBtYWtlIGEgY29weQorCWFuZC5sCQkmMHhjMDAwMDAwMCwgJWQwCSMgZXh0cmFjdCBHLFIKKwlhbmQubAkJJjB4M2ZmZmZmZmYsICVkMQkjIGV4dHJhY3Qgb3RoZXIgYml0cworCisJYnJhLmIJCWNhc2UzX2NvbXBsZXRlCisKKyMKKyMgY2FzZSAoZDEgPT0gNjUpCisjCisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwl8ICAgICBGVEVNUF9ISQkgIHwJRlRFTVBfTE8gICAgIHxncnMwMDAuLi4uLi4uLi4wMDB8CisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwk8LS0tLS0tLSgzMiktLS0tLS0+CisjCVwJCSAgIFwKKyMJIFwJCSAgICBcCisjCSAgXAkJICAgICBcCisjCSAgIFwJCSAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwkgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JCSAgICBcCisjCQkJCQkgICAgXAkJICAgICBcCisjCQkJCQkgICAgIFwJCSAgICAgIFwKKyMJCQkJCSAgICAgIFwJCSAgICAgICBcCisjCQkJCQkgICAgICAgPC0tLS0tLS0oMzEpLS0tLS0+CisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwl8MC4uLi4uLi4uLi4uLi4uLjB8MC4uLi4uLi4uLi4uLi4uLi4wfDBycwkJfAorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKK2Nhc2UzXzY1OgorCW1vdi5sCQlGVEVNUF9ISSglYTApLCAlZDAJIyBmZXRjaCBoaShtYW50aXNzYSkKKwlhbmQubAkJJjB4ODAwMDAwMDAsICVkMAkjIGV4dHJhY3QgUiBiaXQKKwlsc3IubAkJJjB4MSwgJWQwCQkjIHNoaWZ0IGhpZ2ggYml0IGludG8gUiBiaXQKKwlhbmQubAkJJjB4N2ZmZmZmZmYsICVkMQkjIGV4dHJhY3Qgb3RoZXIgYml0cworCitjYXNlM19jb21wbGV0ZToKKyMgbGFzdCBvcGVyYXRpb24gZG9uZSB3YXMgYW4gImFuZCIgb2YgdGhlIGJpdHMgc2hpZnRlZCBvZmYgc28gdGhlIGNvbmRpdGlvbgorIyBjb2RlcyBhcmUgYWxyZWFkeSBzZXQgc28gYnJhbmNoIGFjY29yZGluZ2x5LgorCWJuZS5iCQljYXNlM19zZXRfc3RpY2t5CSMgeWVzOyBnbyBzZXQgbmV3IHN0aWNreQorCXRzdC5sCQlGVEVNUF9MTyglYTApCQkjIHdlcmUgYW55IGJpdHMgc2hpZnRlZCBvZmY/CisJYm5lLmIJCWNhc2UzX3NldF9zdGlja3kJIyB5ZXM7IGdvIHNldCBuZXcgc3RpY2t5CisJdHN0LmIJCUdSUyglYTYpCQkjIHdlcmUgYW55IGJpdHMgc2hpZnRlZCBvZmY/CisJYm5lLmIJCWNhc2UzX3NldF9zdGlja3kJIyB5ZXM7IGdvIHNldCBuZXcgc3RpY2t5CisKKyMKKyMgbm8gYml0cyB3ZXJlIHNoaWZ0ZWQgb2ZmIHNvIGRvbid0IHNldCB0aGUgc3RpY2t5IGJpdC4KKyMgdGhlIGd1YXJkIGFuZAorIyB0aGUgZW50aXJlIG1hbnRpc3NhIGlzIHplcm8uCisjCisJY2xyLmwJCUZURU1QX0hJKCVhMCkJCSMgY2xlYXIgaGkobWFudGlzc2EpCisJY2xyLmwJCUZURU1QX0xPKCVhMCkJCSMgY2xlYXIgbG8obWFudGlzc2EpCisJcnRzCisKKyMKKyMgc29tZSBiaXRzIHdlcmUgc2hpZnRlZCBvZmYgc28gc2V0IHRoZSBzdGlja3kgYml0LgorIyB0aGUgZW50aXJlIG1hbnRpc3NhIGlzIHplcm8uCisjCitjYXNlM19zZXRfc3RpY2t5OgorCWJzZXQJCSZybmRfc3RreV9iaXQsJWQwCSMgc2V0IG5ldyBzdGlja3kgYml0CisJY2xyLmwJCUZURU1QX0hJKCVhMCkJCSMgY2xlYXIgaGkobWFudGlzc2EpCisJY2xyLmwJCUZURU1QX0xPKCVhMCkJCSMgY2xlYXIgbG8obWFudGlzc2EpCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX3JvdW5kKCk6IHJvdW5kIHJlc3VsdCBhY2NvcmRpbmcgdG8gcHJlY2lzaW9uL21vZGUJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwCSAgPSBwdHIgdG8gaW5wdXQgb3BlcmFuZCBpbiBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQJIworIwlkMShoaSkgICAgPSBjb250YWlucyByb3VuZGluZyBwcmVjaXNpb246CQkJIworIwkJCWV4dCA9ICQwMDAweHh4eAkJCQkJIworIwkJCXNnbCA9ICQwMDA0eHh4eAkJCQkJIworIwkJCWRibCA9ICQwMDA4eHh4eAkJCQkJIworIwlkMShsbykJICA9IGNvbnRhaW5zIHJvdW5kaW5nIG1vZGU6CQkJCSMKKyMJCQlSTiAgPSAkeHh4eDAwMDAJCQkJCSMKKyMJCQlSWiAgPSAkeHh4eDAwMDEJCQkJCSMKKyMJCQlSTSAgPSAkeHh4eDAwMDIJCQkJCSMKKyMJCQlSUCAgPSAkeHh4eDAwMDMJCQkJCSMKKyMJZDB7MzE6Mjl9ID0gY29udGFpbnMgdGhlIGcscixzIGJpdHMgKGV4dGVuZGVkKQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byByb3VuZGVkIHJlc3VsdAkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJT24gcmV0dXJuIHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IGEwIGlzIGNvcnJlY3RseSByb3VuZGVkLAkjCisjCWEwIGlzIHByZXNlcnZlZCBhbmQgdGhlIGctci1zIGJpdHMgaW4gZDAgYXJlIGNsZWFyZWQuCQkjCisjCVRoZSByZXN1bHQgaXMgbm90IHR5cGVkIC0gdGhlIHRhZyBmaWVsZCBpcyBpbnZhbGlkLiAgVGhlCSMKKyMJcmVzdWx0IGlzIHN0aWxsIGluIHRoZSBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQuCQkjCisjCQkJCQkJCQkJIworIwlUaGUgSU5FWCBiaXQgb2YgVVNFUl9GUFNSIHdpbGwgYmUgc2V0IGlmIHRoZSByb3VuZGVkIHJlc3VsdCB3YXMJIworIwlpbmV4YWN0IChpLmUuIGlmIGFueSBvZiB0aGUgZy1yLXMgYml0cyB3ZXJlIHNldCkuCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfcm91bmQKK19yb3VuZDoKKyMKKyMgZXh0X2dycygpIGxvb2tzIGF0IHRoZSByb3VuZGluZyBwcmVjaXNpb24gYW5kIHNldHMgdGhlIGFwcHJvcHJpYXRlCisjIEcsUixTIGJpdHMuCisjIElmIChHLFIsUyA9PSAwKSB0aGVuIHJlc3VsdCBpcyBleGFjdCBhbmQgcm91bmQgaXMgZG9uZSwgZWxzZSBzZXQKKyMgdGhlIGluZXggZmxhZyBpbiBzdGF0dXMgcmVnIGFuZCBjb250aW51ZS4KKyMKKwlic3IubAkJZXh0X2dycwkJCSMgZXh0cmFjdCBHLFIsUworCisJdHN0LmwJCSVkMAkJCSMgYXJlIEcsUixTIHplcm8/CisJYmVxLncJCXRydW5jYXRlCQkjIHllczsgcm91bmQgaXMgY29tcGxldGUKKworCW9yLncJCSZpbngyYV9tYXNrLCAyK1VTRVJfRlBTUiglYTYpICMgc2V0IGluZXgyL2FpbmV4CisKKyMKKyMgVXNlIHJvdW5kaW5nIG1vZGUgYXMgYW4gaW5kZXggaW50byBhIGp1bXAgdGFibGUgZm9yIHRoZXNlIG1vZGVzLgorIyBBbGwgb2YgdGhlIGZvbGxvd2luZyBhc3N1bWVzIGdycyAhPSAwLgorIworCW1vdi53CQkodGJsX21vZGUuYiwlcGMsJWQxLncqMiksICVhMSAjIGxvYWQganVtcCBvZmZzZXQKKwlqbXAJCSh0YmxfbW9kZS5iLCVwYywlYTEpCSMgam1wIHRvIHJuZCBtb2RlIGhhbmRsZXIKKwordGJsX21vZGU6CisJc2hvcnQJCXJuZF9uZWFyIC0gdGJsX21vZGUKKwlzaG9ydAkJdHJ1bmNhdGUgLSB0YmxfbW9kZQkjIFJaIGFsd2F5cyB0cnVuY2F0ZXMKKwlzaG9ydAkJcm5kX21udXMgLSB0YmxfbW9kZQorCXNob3J0CQlybmRfcGx1cyAtIHRibF9tb2RlCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCVJPVU5EIFBMVVMgSU5GSU5JVFkJCQkJCSMKKyMJCQkJCQkJCSMKKyMJSWYgc2lnbiBvZiBmcCBudW1iZXIgPSAwIChwb3NpdGl2ZSksIHRoZW4gYWRkIDEgdG8gbC4JIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3JuZF9wbHVzOgorCXRzdC5iCQlGVEVNUF9TR04oJWEwKQkJIyBjaGVjayBmb3Igc2lnbgorCWJtaS53CQl0cnVuY2F0ZQkJIyBpZiBwb3NpdGl2ZSB0aGVuIHRydW5jYXRlCisKKwltb3YubAkJJjB4ZmZmZmZmZmYsICVkMAkjIGZvcmNlIGcscixzIHRvIGJlIGFsbCBmJ3MKKwlzd2FwCQklZDEJCQkjIHNldCB1cCBkMSBmb3Igcm91bmQgcHJlYy4KKworCWNtcGkuYgkJJWQxLCAmc19tb2RlCQkjIGlzIHByZWMgPSBzZ2w/CisJYmVxLncJCWFkZF9zZ2wJCQkjIHllcworCWJndC53CQlhZGRfZGJsCQkJIyBubzsgaXQncyBkYmwKKwlicmEudwkJYWRkX2V4dAkJCSMgbm87IGl0J3MgZXh0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCVJPVU5EIE1JTlVTIElORklOSVRZCQkJCQkjCisjCQkJCQkJCQkjCisjCUlmIHNpZ24gb2YgZnAgbnVtYmVyID0gMSAobmVnYXRpdmUpLCB0aGVuIGFkZCAxIHRvIGwuCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitybmRfbW51czoKKwl0c3QuYgkJRlRFTVBfU0dOKCVhMCkJCSMgY2hlY2sgZm9yIHNpZ24KKwlicGwudwkJdHJ1bmNhdGUJCSMgaWYgbmVnYXRpdmUgdGhlbiB0cnVuY2F0ZQorCisJbW92LmwJCSYweGZmZmZmZmZmLCAlZDAJIyBmb3JjZSBnLHIscyB0byBiZSBhbGwgZidzCisJc3dhcAkJJWQxCQkJIyBzZXQgdXAgZDEgZm9yIHJvdW5kIHByZWMuCisKKwljbXBpLmIJCSVkMSwgJnNfbW9kZQkJIyBpcyBwcmVjID0gc2dsPworCWJlcS53CQlhZGRfc2dsCQkJIyB5ZXMKKwliZ3QudwkJYWRkX2RibAkJCSMgbm87IGl0J3MgZGJsCisJYnJhLncJCWFkZF9leHQJCQkjIG5vOyBpdCdzIGV4dAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwlST1VORCBORUFSRVNUCQkJCQkJIworIwkJCQkJCQkJIworIwlJZiAoZz0xKSwgdGhlbiBhZGQgMSB0byBsIGFuZCBpZiAocj1zPTApLCB0aGVuIGNsZWFyIGwJIworIwlOb3RlIHRoYXQgdGhpcyB3aWxsIHJvdW5kIHRvIGV2ZW4gaW4gY2FzZSBvZiBhIHRpZS4JIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3JuZF9uZWFyOgorCWFzbC5sCQkmMHgxLCAlZDAJCSMgc2hpZnQgZy1iaXQgdG8gYy1iaXQKKwliY2MudwkJdHJ1bmNhdGUJCSMgaWYgKGc9MSkgdGhlbgorCisJc3dhcAkJJWQxCQkJIyBzZXQgdXAgZDEgZm9yIHJvdW5kIHByZWMuCisKKwljbXBpLmIJCSVkMSwgJnNfbW9kZQkJIyBpcyBwcmVjID0gc2dsPworCWJlcS53CQlhZGRfc2dsCQkJIyB5ZXMKKwliZ3QudwkJYWRkX2RibAkJCSMgbm87IGl0J3MgZGJsCisJYnJhLncJCWFkZF9leHQJCQkjIG5vOyBpdCdzIGV4dAorCisjICoqKiBMT0NBTCBFUVVBVEVTICoqKgorc2V0CWFkXzFfc2dsLAkweDAwMDAwMTAwCSMgY29uc3RhbnQgdG8gYWRkIDEgdG8gbC1iaXQgaW4gc2dsIHByZWMKK3NldAlhZF8xX2RibCwJMHgwMDAwMDgwMAkjIGNvbnN0YW50IHRvIGFkZCAxIHRvIGwtYml0IGluIGRibCBwcmVjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJQUREIFNJTkdMRQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCithZGRfc2dsOgorCWFkZC5sCQkmYWRfMV9zZ2wsIEZURU1QX0hJKCVhMCkKKwliY2MuYgkJc2NjX2NscgkJCSMgbm8gbWFudGlzc2Egb3ZlcmZsb3cKKwlyb3hyLncJCUZURU1QX0hJKCVhMCkJCSMgc2hpZnQgdi1iaXQgYmFjayBpbgorCXJveHIudwkJRlRFTVBfSEkrMiglYTApCQkjIHNoaWZ0IHYtYml0IGJhY2sgaW4KKwlhZGQudwkJJjB4MSwgRlRFTVBfRVgoJWEwKQkjIGFuZCBpbmNyIGV4cG9uZW50CitzY2NfY2xyOgorCXRzdC5sCQklZDAJCQkjIHRlc3QgZm9yIHJzID0gMAorCWJuZS5iCQlzZ2xfZG9uZQorCWFuZC53CQkmMHhmZTAwLCBGVEVNUF9ISSsyKCVhMCkgIyBjbGVhciB0aGUgbC1iaXQKK3NnbF9kb25lOgorCWFuZC5sCQkmMHhmZmZmZmYwMCwgRlRFTVBfSEkoJWEwKSAjIHRydW5jYXRlIGJpdHMgYmV5b25kIHNnbCBsaW1pdAorCWNsci5sCQlGVEVNUF9MTyglYTApCQkjIGNsZWFyIGQyCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJQUREIEVYVEVOREVECSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2FkZF9leHQ6CisJYWRkcS5sCQkmMSxGVEVNUF9MTyglYTApCSMgYWRkIDEgdG8gbC1iaXQKKwliY2MuYgkJeGNjX2NscgkJCSMgdGVzdCBmb3IgY2Fycnkgb3V0CisJYWRkcS5sCQkmMSxGVEVNUF9ISSglYTApCSMgcHJvcGFnYXRlIGNhcnJ5CisJYmNjLmIJCXhjY19jbHIKKwlyb3hyLncJCUZURU1QX0hJKCVhMCkJCSMgbWFudCBpcyAwIHNvIHJlc3RvcmUgdi1iaXQKKwlyb3hyLncJCUZURU1QX0hJKzIoJWEwKQkJIyBtYW50IGlzIDAgc28gcmVzdG9yZSB2LWJpdAorCXJveHIudwkJRlRFTVBfTE8oJWEwKQorCXJveHIudwkJRlRFTVBfTE8rMiglYTApCisJYWRkLncJCSYweDEsRlRFTVBfRVgoJWEwKQkjIGFuZCBpbmMgZXhwCit4Y2NfY2xyOgorCXRzdC5sCQklZDAJCQkjIHRlc3QgcnMgPSAwCisJYm5lLmIJCWFkZF9leHRfZG9uZQorCWFuZC5iCQkmMHhmZSxGVEVNUF9MTyszKCVhMCkJIyBjbGVhciB0aGUgbCBiaXQKK2FkZF9leHRfZG9uZToKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwlBREQgRE9VQkxFCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2FkZF9kYmw6CisJYWRkLmwJCSZhZF8xX2RibCwgRlRFTVBfTE8oJWEwKSAjIGFkZCAxIHRvIGxzYgorCWJjYy5iCQlkY2NfY2xyCQkJIyBubyBjYXJyeQorCWFkZHEubAkJJjB4MSwgRlRFTVBfSEkoJWEwKQkjIHByb3BhZ2F0ZSBjYXJyeQorCWJjYy5iCQlkY2NfY2xyCQkJIyBubyBjYXJyeQorCisJcm94ci53CQlGVEVNUF9ISSglYTApCQkjIG1hbnQgaXMgMCBzbyByZXN0b3JlIHYtYml0CisJcm94ci53CQlGVEVNUF9ISSsyKCVhMCkJCSMgbWFudCBpcyAwIHNvIHJlc3RvcmUgdi1iaXQKKwlyb3hyLncJCUZURU1QX0xPKCVhMCkKKwlyb3hyLncJCUZURU1QX0xPKzIoJWEwKQorCWFkZHEudwkJJjB4MSwgRlRFTVBfRVgoJWEwKQkjIGluY3IgZXhwb25lbnQKK2RjY19jbHI6CisJdHN0LmwJCSVkMAkJCSMgdGVzdCBmb3IgcnMgPSAwCisJYm5lLmIJCWRibF9kb25lCisJYW5kLncJCSYweGYwMDAsIEZURU1QX0xPKzIoJWEwKSAjIGNsZWFyIHRoZSBsLWJpdAorCitkYmxfZG9uZToKKwlhbmQubAkJJjB4ZmZmZmY4MDAsRlRFTVBfTE8oJWEwKSAjIHRydW5jYXRlIGJpdHMgYmV5b25kIGRibCBsaW1pdAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVHJ1bmNhdGUgYWxsIG90aGVyIGJpdHMgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit0cnVuY2F0ZToKKwlzd2FwCQklZDEJCQkjIHNlbGVjdCBybmQgcHJlYworCisJY21waS5iCQklZDEsICZzX21vZGUJCSMgaXMgcHJlYyBzZ2w/CisJYmVxLncJCXNnbF9kb25lCQkjIHllcworCWJndC5iCQlkYmxfZG9uZQkJIyBubzsgaXQncyBkYmwKKwlydHMJCQkJCSMgbm87IGl0J3MgZXh0CisKKworIworIyBleHRfZ3JzKCk6IGV4dHJhY3QgZ3VhcmQsIHJvdW5kIGFuZCBzdGlja3kgYml0cyBhY2NvcmRpbmcgdG8KKyMJICAgICByb3VuZGluZyBwcmVjaXNpb24uCisjCisjIElOUFVUCisjCWQwCSAgID0gZXh0ZW5kZWQgcHJlY2lzaW9uIGcscixzIChpbiBkMHszMToyOX0pCisjCWQxCSAgID0ge1BSRUMsUk9VTkR9CisjIE9VVFBVVAorIwlkMHszMToyOX0gID0gZ3VhcmQsIHJvdW5kLCBzdGlja3kKKyMKKyMgVGhlIGV4dF9ncnMgZXh0cmFjdCB0aGUgZ3VhcmQvcm91bmQvc3RpY2t5IGJpdHMgYWNjb3JkaW5nIHRvIHRoZQorIyBzZWxlY3RlZCByb3VuZGluZyBwcmVjaXNpb24uIEl0IGlzIGNhbGxlZCBieSB0aGUgcm91bmQgc3Vicm91dGluZQorIyBvbmx5LiAgQWxsIHJlZ2lzdGVycyBleGNlcHQgZDAgYXJlIGtlcHQgaW50YWN0LiBkMCBiZWNvbWVzIGFuCisjIHVwZGF0ZWQgZ3VhcmQscm91bmQsc3RpY2t5IGluIGQwezMxOjI5fQorIworIyBOb3RlczogdGhlIGV4dF9ncnMgdXNlcyB0aGUgcm91bmQgUFJFQywgYW5kIHRoZXJlZm9yZSBoYXMgdG8gc3dhcCBkMQorIwkgcHJpb3IgdG8gdXNhZ2UsIGFuZCBuZWVkcyB0byByZXN0b3JlIGQxIHRvIG9yaWdpbmFsLiB0aGlzCisjCSByb3V0aW5lIGlzIHRpZ2h0bHkgdGllZCB0byB0aGUgcm91bmQgcm91dGluZSBhbmQgbm90IG1lYW50IHRvCisjCSB1cGhvbGQgc3RhbmRhcmQgc3Vicm91dGluZSBjYWxsaW5nIHByYWN0aWNlcy4KKyMKKworZXh0X2dyczoKKwlzd2FwCQklZDEJCQkjIGhhdmUgZDEudyBwb2ludCB0byByb3VuZCBwcmVjaXNpb24KKwl0c3QuYgkJJWQxCQkJIyBpcyBybmQgcHJlYyA9IGV4dGVuZGVkPworCWJuZS5iCQlleHRfZ3JzX25vdF9leHQJCSMgbm87IGdvIGhhbmRsZSBzZ2wgb3IgZGJsCisKKyMKKyMgJWQwIGFjdHVhbGx5IGFscmVhZHkgaG9sZCBnLHIscyBzaW5jZSBfcm91bmQoKSBoYWQgaXQgYmVmb3JlIGNhbGxpbmcKKyMgdGhpcyBmdW5jdGlvbi4gc28sIGFzIGxvbmcgYXMgd2UgZG9uJ3QgZGlzdHVyYiBpdCwgd2UgYXJlICJyZXR1cm5pbmciIGl0LgorIworZXh0X2dyc19leHQ6CisJc3dhcAkJJWQxCQkJIyB5ZXM7IHJldHVybiB0byBjb3JyZWN0IHBvc2l0aW9ucworCXJ0cworCitleHRfZ3JzX25vdF9leHQ6CisJbW92bS5sCQkmMHgzMDAwLCAtKCVzcCkJCSMgbWFrZSBzb21lIHRlbXAgcmVnaXN0ZXJzIHtkMi9kM30KKworCWNtcGkuYgkJJWQxLCAmc19tb2RlCQkjIGlzIHJuZCBwcmVjID0gc2dsPworCWJuZS5iCQlleHRfZ3JzX2RibAkJIyBubzsgZ28gaGFuZGxlIGRibAorCisjCisjIHNnbDoKKyMJOTYJCTY0CSAgNDAJMzIJCTAKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJfCBFWFAJfFhYWFhYWFh8CSAgfHh4CXwJCXxncnN8CisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCQkJPC0tKDI0KS0tLT5ublwJCQkgICAvCisjCQkJCSAgIGVlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwkJCQkgICB3dwkJfAorIwkJCQkJCXYKKyMJCQkJICAgZ3IJICAgbmV3IHN0aWNreQorIworZXh0X2dyc19zZ2w6CisJYmZleHR1CQlGVEVNUF9ISSglYTApeyYyNDomMn0sICVkMyAjIHNnbCBwcmVjLiBnLXIgYXJlIDIgYml0cyByaWdodAorCW1vdi5sCQkmMzAsICVkMgkJIyBvZiB0aGUgc2dsIHByZWMuIGxpbWl0cworCWxzbC5sCQklZDIsICVkMwkJIyBzaGlmdCBnLXIgYml0cyB0byBNU0Igb2YgZDMKKwltb3YubAkJRlRFTVBfSEkoJWEwKSwgJWQyCSMgZ2V0IHdvcmQgMiBmb3Igcy1iaXQgdGVzdAorCWFuZC5sCQkmMHgwMDAwMDAzZiwgJWQyCSMgcyBiaXQgaXMgdGhlIG9yIG9mIGFsbCBvdGhlcgorCWJuZS5iCQlleHRfZ3JzX3N0X3N0a3kJCSMgYml0cyB0byB0aGUgcmlnaHQgb2YgZy1yCisJdHN0LmwJCUZURU1QX0xPKCVhMCkJCSMgdGVzdCBsb3dlciBtYW50aXNzYQorCWJuZS5iCQlleHRfZ3JzX3N0X3N0a3kJCSMgaWYgYW55IGFyZSBzZXQsIHNldCBzdGlja3kKKwl0c3QubAkJJWQwCQkJIyB0ZXN0IG9yaWdpbmFsIGcscixzCisJYm5lLmIJCWV4dF9ncnNfc3Rfc3RreQkJIyBpZiBhbnkgYXJlIHNldCwgc2V0IHN0aWNreQorCWJyYS5iCQlleHRfZ3JzX2VuZF9zZAkJIyBpZiB3b3JkcyAzIGFuZCA0IGFyZSBjbHIsIGV4aXQKKworIworIyBkYmw6CisjCTk2CQk2NAkJMzIJIDExCTAKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJfCBFWFAJfFhYWFhYWFh8CQl8CSB8eHgJfGdyc3wKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJCQkJCQkgIG5uXAkgICAgLworIwkJCQkJCSAgZWUgLS0tLS0tLQorIwkJCQkJCSAgd3cJfAorIwkJCQkJCQl2CisjCQkJCQkJICBncgluZXcgc3RpY2t5CisjCitleHRfZ3JzX2RibDoKKwliZmV4dHUJCUZURU1QX0xPKCVhMCl7JjIxOiYyfSwgJWQzICMgZGJsLXByZWMuIGctciBhcmUgMiBiaXRzIHJpZ2h0CisJbW92LmwJCSYzMCwgJWQyCQkjIG9mIHRoZSBkYmwgcHJlYy4gbGltaXRzCisJbHNsLmwJCSVkMiwgJWQzCQkjIHNoaWZ0IGctciBiaXRzIHRvIHRoZSBNU0Igb2YgZDMKKwltb3YubAkJRlRFTVBfTE8oJWEwKSwgJWQyCSMgZ2V0IGxvd2VyIG1hbnRpc3NhICBmb3Igcy1iaXQgdGVzdAorCWFuZC5sCQkmMHgwMDAwMDFmZiwgJWQyCSMgcyBiaXQgaXMgdGhlIG9yLWluZyBvZiBhbGwKKwlibmUuYgkJZXh0X2dyc19zdF9zdGt5CQkjIG90aGVyIGJpdHMgdG8gdGhlIHJpZ2h0IG9mIGctcgorCXRzdC5sCQklZDAJCQkjIHRlc3Qgd29yZCBvcmlnaW5hbCBnLHIscworCWJuZS5iCQlleHRfZ3JzX3N0X3N0a3kJCSMgaWYgYW55IGFyZSBzZXQsIHNldCBzdGlja3kKKwlicmEuYgkJZXh0X2dyc19lbmRfc2QJCSMgaWYgY2xlYXIsIGV4aXQKKworZXh0X2dyc19zdF9zdGt5OgorCWJzZXQJCSZybmRfc3RreV9iaXQsICVkMwkjIHNldCBzdGlja3kgYml0CitleHRfZ3JzX2VuZF9zZDoKKwltb3YubAkJJWQzLCAlZDAJCSMgcmV0dXJuIGdycyB0byBkMAorCisJbW92bS5sCQkoJXNwKSssICYweGMJCSMgcmVzdG9yZSBzY3JhdGNoIHJlZ2lzdGVycyB7ZDIvZDN9CisKKwlzd2FwCQklZDEJCQkjIHJlc3RvcmUgZDEgdG8gb3JpZ2luYWwKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBub3JtKCk6IG5vcm1hbGl6ZSB0aGUgbWFudGlzc2Egb2YgYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIGlucHV0LiB0aGUJIworIwkgIGlucHV0IG9wZXJhbmQgc2hvdWxkIG5vdCBiZSBub3JtYWxpemVkIGFscmVhZHkuCQkjCisjCQkJCQkJCQkJIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlub3JtKCkJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCW5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWEwID0gcG9pbnRlciBmcCBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZCB0byBub3JtYWxpemUJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWQwID0gbnVtYmVyIG9mIGJpdCBwb3NpdGlvbnMgdGhlIG1hbnRpc3NhIHdhcyBzaGlmdGVkCQkjCisjCWEwID0gdGhlIGlucHV0IG9wZXJhbmQncyBtYW50aXNzYSBpcyBub3JtYWxpemVkOyB0aGUgZXhwb25lbnQJIworIwkgICAgIGlzIHVuY2hhbmdlZC4JCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJbm9ybQorbm9ybToKKwltb3YubAkJJWQyLCAtKCVzcCkJCSMgY3JlYXRlIHNvbWUgdGVtcCByZWdzCisJbW92LmwJCSVkMywgLSglc3ApCisKKwltb3YubAkJRlRFTVBfSEkoJWEwKSwgJWQwCSMgbG9hZCBoaShtYW50aXNzYSkKKwltb3YubAkJRlRFTVBfTE8oJWEwKSwgJWQxCSMgbG9hZCBsbyhtYW50aXNzYSkKKworCWJmZmZvCQklZDB7JjA6JjMyfSwgJWQyCSMgaG93IG1hbnkgcGxhY2VzIHRvIHNoaWZ0PworCWJlcS5iCQlub3JtX2xvCQkJIyBoaShtYW4pIGlzIGFsbCB6ZXJvZXMhCisKK25vcm1faGk6CisJbHNsLmwJCSVkMiwgJWQwCQkjIGxlZnQgc2hpZnQgaGkobWFuKQorCWJmZXh0dQkJJWQxeyYwOiVkMn0sICVkMwkjIGV4dHJhY3QgbG8gYml0cworCisJb3IubAkJJWQzLCAlZDAJCSMgY3JlYXRlIGhpKG1hbikKKwlsc2wubAkJJWQyLCAlZDEJCSMgY3JlYXRlIGxvKG1hbikKKworCW1vdi5sCQklZDAsIEZURU1QX0hJKCVhMCkJIyBzdG9yZSBuZXcgaGkobWFuKQorCW1vdi5sCQklZDEsIEZURU1QX0xPKCVhMCkJIyBzdG9yZSBuZXcgbG8obWFuKQorCisJbW92LmwJCSVkMiwgJWQwCQkjIHJldHVybiBzaGlmdCBhbW91bnQKKworCW1vdi5sCQkoJXNwKSssICVkMwkJIyByZXN0b3JlIHRlbXAgcmVncworCW1vdi5sCQkoJXNwKSssICVkMgorCisJcnRzCisKK25vcm1fbG86CisJYmZmZm8JCSVkMXsmMDomMzJ9LCAlZDIJIyBob3cgbWFueSBwbGFjZXMgdG8gc2hpZnQ/CisJbHNsLmwJCSVkMiwgJWQxCQkjIHNoaWZ0IGxvKG1hbikKKwlhZGQubAkJJjMyLCAlZDIJCSMgYWRkIDMyIHRvIHNoZnQgYW1vdW50CisKKwltb3YubAkJJWQxLCBGVEVNUF9ISSglYTApCSMgc3RvcmUgaGkobWFuKQorCWNsci5sCQlGVEVNUF9MTyglYTApCQkjIGxvKG1hbikgaXMgbm93IHplcm8KKworCW1vdi5sCQklZDIsICVkMAkJIyByZXR1cm4gc2hpZnQgYW1vdW50CisKKwltb3YubAkJKCVzcCkrLCAlZDMJCSMgcmVzdG9yZSB0ZW1wIHJlZ3MKKwltb3YubAkJKCVzcCkrLCAlZDIKKworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHVubm9ybV9maXgoKTogLSBjaGFuZ2VzIGFuIFVOTk9STSB0byBvbmUgb2YgTk9STSwgREVOT1JNLCBvciBaRVJPCSMKKyMJCS0gcmV0dXJucyBjb3JyZXNwb25kaW5nIG9wdHlwZSB0YWcJCQkjCisjCQkJCQkJCQkJIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwl1bm5vcm1fZml4KCkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJbm9ybSgpIC0gbm9ybWFsaXplIHRoZSBtYW50aXNzYQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJYTAgPSBwb2ludGVyIHRvIHVubm9ybWFsaXplZCBleHRlbmRlZCBwcmVjaXNpb24gbnVtYmVyCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlkMCA9IG9wdHlwZSB0YWcgLSBpcyBjb3JyZWN0ZWQgdG8gb25lIG9mIE5PUk0sIERFTk9STSwgb3IgWkVSTwkjCisjCWEwID0gaW5wdXQgb3BlcmFuZCBoYXMgYmVlbiBjb252ZXJ0ZWQgdG8gYSBub3JtLCBkZW5vcm0sIG9yCSMKKyMJICAgICB6ZXJvOyBib3RoIHRoZSBleHBvbmVudCBhbmQgbWFudGlzc2EgYXJlIGNoYW5nZWQuCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQl1bm5vcm1fZml4Cit1bm5vcm1fZml4OgorCWJmZmZvCQlGVEVNUF9ISSglYTApeyYwOiYzMn0sICVkMCAjIGhvdyBtYW55IHNoaWZ0cyBhcmUgbmVlZGVkPworCWJuZS5iCQl1bm5vcm1fc2hpZnQJCSMgaGkobWFuKSBpcyBub3QgYWxsIHplcm9lcworCisjCisjIGhpKG1hbikgaXMgYWxsIHplcm9lcyBzbyBzZWUgaWYgYW55IGJpdHMgaW4gbG8obWFuKSBhcmUgc2V0CisjCit1bm5vcm1fY2hrX2xvOgorCWJmZmZvCQlGVEVNUF9MTyglYTApeyYwOiYzMn0sICVkMCAjIGlzIG9wZXJhbmQgcmVhbGx5IGEgemVybz8KKwliZXEudwkJdW5ub3JtX3plcm8JCSMgeWVzCisKKwlhZGQudwkJJjMyLCAlZDAJCSMgbm87IGZpeCBzaGlmdCBkaXN0YW5jZQorCisjCisjIGQwID0gIyBzaGlmdHMgbmVlZGVkIGZvciBjb21wbGV0ZSBub3JtYWxpemF0aW9uCisjCit1bm5vcm1fc2hpZnQ6CisJY2xyLmwJCSVkMQkJCSMgY2xlYXIgdG9wIHdvcmQKKwltb3YudwkJRlRFTVBfRVgoJWEwKSwgJWQxCSMgZXh0cmFjdCBleHBvbmVudAorCWFuZC53CQkmMHg3ZmZmLCAlZDEJCSMgc3RyaXAgb2ZmIHNnbgorCisJY21wLncJCSVkMCwgJWQxCQkjIHdpbGwgZGVub3JtIHB1c2ggZXhwIDwgMD8KKwliZ3QuYgkJdW5ub3JtX25ybV96ZXJvCQkjIHllczsgZGVub3JtIG9ubHkgdW50aWwgZXhwID0gMAorCisjCisjIGV4cG9uZW50IHdvdWxkIG5vdCBnbyA8IDAuIHRoZXJlZm9yZSwgbnVtYmVyIHN0YXlzIG5vcm1hbGl6ZWQKKyMKKwlzdWIudwkJJWQwLCAlZDEJCSMgc2hpZnQgZXhwb25lbnQgdmFsdWUKKwltb3YudwkJRlRFTVBfRVgoJWEwKSwgJWQwCSMgbG9hZCBvbGQgZXhwb25lbnQKKwlhbmQudwkJJjB4ODAwMCwgJWQwCQkjIHNhdmUgb2xkIHNpZ24KKwlvci53CQklZDAsICVkMQkJIyB7c2duLG5ldyBleHB9CisJbW92LncJCSVkMSwgRlRFTVBfRVgoJWEwKQkjIGluc2VydCBuZXcgZXhwb25lbnQKKworCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgVU5OT1JNCisKKwltb3YuYgkJJk5PUk0sICVkMAkJIyByZXR1cm4gbmV3IG9wdHlwZSB0YWcKKwlydHMKKworIworIyBleHBvbmVudCB3b3VsZCBnbyA8IDAsIHNvIG9ubHkgZGVub3JtYWxpemUgdW50aWwgZXhwID0gMAorIwordW5ub3JtX25ybV96ZXJvOgorCWNtcC5iCQklZDEsICYzMgkJIyBpcyBleHAgPD0gMzI/CisJYmd0LmIJCXVubm9ybV9ucm1femVyb19scmcJIyBubzsgZ28gaGFuZGxlIGxhcmdlIGV4cG9uZW50CisKKwliZmV4dHUJCUZURU1QX0hJKCVhMCl7JWQxOiYzMn0sICVkMCAjIGV4dHJhY3QgbmV3IGhpKG1hbikKKwltb3YubAkJJWQwLCBGVEVNUF9ISSglYTApCSMgc2F2ZSBuZXcgaGkobWFuKQorCisJbW92LmwJCUZURU1QX0xPKCVhMCksICVkMAkjIGZldGNoIG9sZCBsbyhtYW4pCisJbHNsLmwJCSVkMSwgJWQwCQkjIGV4dHJhY3QgbmV3IGxvKG1hbikKKwltb3YubAkJJWQwLCBGVEVNUF9MTyglYTApCSMgc2F2ZSBuZXcgbG8obWFuKQorCisJYW5kLncJCSYweDgwMDAsIEZURU1QX0VYKCVhMCkJIyBzZXQgZXhwID0gMAorCisJbW92LmIJCSZERU5PUk0sICVkMAkJIyByZXR1cm4gbmV3IG9wdHlwZSB0YWcKKwlydHMKKworIworIyBvbmx5IG1hbnRpc3NhIGJpdHMgc2V0IGFyZSBpbiBsbyhtYW4pCisjCit1bm5vcm1fbnJtX3plcm9fbHJnOgorCXN1Yi53CQkmMzIsICVkMQkJIyBhZGp1c3Qgc2hmdCBhbXQgYnkgMzIKKworCW1vdi5sCQlGVEVNUF9MTyglYTApLCAlZDAJIyBmZXRjaCBvbGQgbG8obWFuKQorCWxzbC5sCQklZDEsICVkMAkJIyBsZWZ0IHNoaWZ0IGxvKG1hbikKKworCW1vdi5sCQklZDAsIEZURU1QX0hJKCVhMCkJIyBzdG9yZSBuZXcgaGkobWFuKQorCWNsci5sCQlGVEVNUF9MTyglYTApCQkjIGxvKG1hbikgPSAwCisKKwlhbmQudwkJJjB4ODAwMCwgRlRFTVBfRVgoJWEwKQkjIHNldCBleHAgPSAwCisKKwltb3YuYgkJJkRFTk9STSwgJWQwCQkjIHJldHVybiBuZXcgb3B0eXBlIHRhZworCXJ0cworCisjCisjIHdob2xlIG1hbnRpc3NhIGlzIHplcm8gc28gdGhpcyBVTk5PUk0gaXMgYWN0dWFsbHkgYSB6ZXJvCisjCit1bm5vcm1femVybzoKKwlhbmQudwkJJjB4ODAwMCwgRlRFTVBfRVgoJWEwKQkjIGZvcmNlIGV4cG9uZW50IHRvIHplcm8KKworCW1vdi5iCQkmWkVSTywgJWQwCQkjIGZpeCBvcHR5cGUgdGFnCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJc2V0X3RhZ194KCk6IHJldHVybiB0aGUgb3B0eXBlIG9mIHRoZSBpbnB1dCBleHQgZnAgbnVtYmVyCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZAkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gdmFsdWUgb2YgdHlwZSB0YWcJCQkJCQkjCisjCQlvbmUgb2Y6IE5PUk0sIElORiwgUU5BTiwgU05BTiwgREVOT1JNLCBVTk5PUk0sIFpFUk8JIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJU2ltcGx5IHRlc3QgdGhlIGV4cG9uZW50LCBqLWJpdCwgYW5kIG1hbnRpc3NhIHZhbHVlcyB0bwkJIworIyBkZXRlcm1pbmUgdGhlIHR5cGUgb2Ygb3BlcmFuZC4JCQkJCSMKKyMJSWYgaXQncyBhbiB1bm5vcm1hbGl6ZWQgemVybywgYWx0ZXIgdGhlIG9wZXJhbmQgYW5kIGZvcmNlIGl0CSMKKyMgdG8gYmUgYSBub3JtYWwgemVyby4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc2V0X3RhZ194CitzZXRfdGFnX3g6CisJbW92LncJCUZURU1QX0VYKCVhMCksICVkMAkjIGV4dHJhY3QgZXhwb25lbnQKKwlhbmRpLncJCSYweDdmZmYsICVkMAkJIyBzdHJpcCBvZmYgc2lnbgorCWNtcGkudwkJJWQwLCAmMHg3ZmZmCQkjIGlzIChFWFAgPT0gTUFYKT8KKwliZXEuYgkJaW5mX29yX25hbl94Citub3RfaW5mX29yX25hbl94OgorCWJ0c3QJCSYweDcsRlRFTVBfSEkoJWEwKQorCWJlcS5iCQlub3Rfbm9ybV94Citpc19ub3JtX3g6CisJbW92LmIJCSZOT1JNLCAlZDAKKwlydHMKK25vdF9ub3JtX3g6CisJdHN0LncJCSVkMAkJCSMgaXMgZXhwb25lbnQgPSAwPworCWJuZS5iCQlpc191bm5vcm1feAorbm90X3Vubm9ybV94OgorCXRzdC5sCQlGVEVNUF9ISSglYTApCisJYm5lLmIJCWlzX2Rlbm9ybV94CisJdHN0LmwJCUZURU1QX0xPKCVhMCkKKwlibmUuYgkJaXNfZGVub3JtX3gKK2lzX3plcm9feDoKKwltb3YuYgkJJlpFUk8sICVkMAorCXJ0cworaXNfZGVub3JtX3g6CisJbW92LmIJCSZERU5PUk0sICVkMAorCXJ0cworIyBtdXN0IGRpc3Rpbmd1aXNoIG5vdyAiVW5ub3JtYWxpemVkIHplcm9lcyIgd2hpY2ggd2UKKyMgbXVzdCBjb252ZXJ0IHRvIHplcm8uCitpc191bm5vcm1feDoKKwl0c3QubAkJRlRFTVBfSEkoJWEwKQorCWJuZS5iCQlpc191bm5vcm1fcmVnX3gKKwl0c3QubAkJRlRFTVBfTE8oJWEwKQorCWJuZS5iCQlpc191bm5vcm1fcmVnX3gKKyMgaXQncyBhbiAidW5ub3JtYWxpemVkIHplcm8iLiBsZXQncyBjb252ZXJ0IGl0IHRvIGFuIGFjdHVhbCB6ZXJvLi4uCisJYW5kaS53CQkmMHg4MDAwLEZURU1QX0VYKCVhMCkJIyBjbGVhciBleHBvbmVudAorCW1vdi5iCQkmWkVSTywgJWQwCisJcnRzCitpc191bm5vcm1fcmVnX3g6CisJbW92LmIJCSZVTk5PUk0sICVkMAorCXJ0cworaW5mX29yX25hbl94OgorCXRzdC5sCQlGVEVNUF9MTyglYTApCisJYm5lLmIJCWlzX25hbl94CisJbW92LmwJCUZURU1QX0hJKCVhMCksICVkMAorCWFuZC5sCQkmMHg3ZmZmZmZmZiwgJWQwCSMgbXNiIGlzIGEgZG9uJ3QgY2FyZSEKKwlibmUuYgkJaXNfbmFuX3gKK2lzX2luZl94OgorCW1vdi5iCQkmSU5GLCAlZDAKKwlydHMKK2lzX25hbl94OgorCWJ0c3QJCSYweDYsIEZURU1QX0hJKCVhMCkKKwliZXEuYgkJaXNfc25hbl94CisJbW92LmIJCSZRTkFOLCAlZDAKKwlydHMKK2lzX3NuYW5feDoKKwltb3YuYgkJJlNOQU4sICVkMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXNldF90YWdfZCgpOiByZXR1cm4gdGhlIG9wdHlwZSBvZiB0aGUgaW5wdXQgZGJsIGZwIG51bWJlcgkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50cyB0byBkb3VibGUgcHJlY2lzaW9uIG9wZXJhbmQJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZDAgPSB2YWx1ZSBvZiB0eXBlIHRhZwkJCQkJCSMKKyMJCW9uZSBvZjogTk9STSwgSU5GLCBRTkFOLCBTTkFOLCBERU5PUk0sIFpFUk8JCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVNpbXBseSB0ZXN0IHRoZSBleHBvbmVudCwgai1iaXQsIGFuZCBtYW50aXNzYSB2YWx1ZXMgdG8JCSMKKyMgZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIG9wZXJhbmQuCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzZXRfdGFnX2QKK3NldF90YWdfZDoKKwltb3YubAkJRlRFTVAoJWEwKSwgJWQwCisJbW92LmwJCSVkMCwgJWQxCisKKwlhbmRpLmwJCSYweDdmZjAwMDAwLCAlZDAKKwliZXEuYgkJemVyb19vcl9kZW5vcm1fZAorCisJY21waS5sCQklZDAsICYweDdmZjAwMDAwCisJYmVxLmIJCWluZl9vcl9uYW5fZAorCitpc19ub3JtX2Q6CisJbW92LmIJCSZOT1JNLCAlZDAKKwlydHMKK3plcm9fb3JfZGVub3JtX2Q6CisJYW5kLmwJCSYweDAwMGZmZmZmLCAlZDEKKwlibmUJCWlzX2Rlbm9ybV9kCisJdHN0LmwJCTQrRlRFTVAoJWEwKQorCWJuZQkJaXNfZGVub3JtX2QKK2lzX3plcm9fZDoKKwltb3YuYgkJJlpFUk8sICVkMAorCXJ0cworaXNfZGVub3JtX2Q6CisJbW92LmIJCSZERU5PUk0sICVkMAorCXJ0cworaW5mX29yX25hbl9kOgorCWFuZC5sCQkmMHgwMDBmZmZmZiwgJWQxCisJYm5lCQlpc19uYW5fZAorCXRzdC5sCQk0K0ZURU1QKCVhMCkKKwlibmUJCWlzX25hbl9kCitpc19pbmZfZDoKKwltb3YuYgkJJklORiwgJWQwCisJcnRzCitpc19uYW5fZDoKKwlidHN0CQkmMTksICVkMQorCWJuZQkJaXNfcW5hbl9kCitpc19zbmFuX2Q6CisJbW92LmIJCSZTTkFOLCAlZDAKKwlydHMKK2lzX3FuYW5fZDoKKwltb3YuYgkJJlFOQU4sICVkMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXNldF90YWdfcygpOiByZXR1cm4gdGhlIG9wdHlwZSBvZiB0aGUgaW5wdXQgc2dsIGZwIG51bWJlcgkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gc2luZ2xlIHByZWNpc2lvbiBvcGVyYW5kCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZDAgPSB2YWx1ZSBvZiB0eXBlIHRhZwkJCQkJCSMKKyMJCW9uZSBvZjogTk9STSwgSU5GLCBRTkFOLCBTTkFOLCBERU5PUk0sIFpFUk8JCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVNpbXBseSB0ZXN0IHRoZSBleHBvbmVudCwgai1iaXQsIGFuZCBtYW50aXNzYSB2YWx1ZXMgdG8JCSMKKyMgZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIG9wZXJhbmQuCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzZXRfdGFnX3MKK3NldF90YWdfczoKKwltb3YubAkJRlRFTVAoJWEwKSwgJWQwCisJbW92LmwJCSVkMCwgJWQxCisKKwlhbmRpLmwJCSYweDdmODAwMDAwLCAlZDAKKwliZXEuYgkJemVyb19vcl9kZW5vcm1fcworCisJY21waS5sCQklZDAsICYweDdmODAwMDAwCisJYmVxLmIJCWluZl9vcl9uYW5fcworCitpc19ub3JtX3M6CisJbW92LmIJCSZOT1JNLCAlZDAKKwlydHMKK3plcm9fb3JfZGVub3JtX3M6CisJYW5kLmwJCSYweDAwN2ZmZmZmLCAlZDEKKwlibmUJCWlzX2Rlbm9ybV9zCitpc196ZXJvX3M6CisJbW92LmIJCSZaRVJPLCAlZDAKKwlydHMKK2lzX2Rlbm9ybV9zOgorCW1vdi5iCQkmREVOT1JNLCAlZDAKKwlydHMKK2luZl9vcl9uYW5fczoKKwlhbmQubAkJJjB4MDA3ZmZmZmYsICVkMQorCWJuZQkJaXNfbmFuX3MKK2lzX2luZl9zOgorCW1vdi5iCQkmSU5GLCAlZDAKKwlydHMKK2lzX25hbl9zOgorCWJ0c3QJCSYyMiwgJWQxCisJYm5lCQlpc19xbmFuX3MKK2lzX3NuYW5fczoKKwltb3YuYgkJJlNOQU4sICVkMAorCXJ0cworaXNfcW5hbl9zOgorCW1vdi5iCQkmUU5BTiwgJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJdW5mX3JlcygpOiByb3V0aW5lIHRvIHByb2R1Y2UgZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0IG9mIGEJIworIwkJICAgc2NhbGVkIGV4dGVuZGVkIHByZWNpc2lvbiBudW1iZXI7IHRoaXMgaXMgdXNlZCBieQkjCisjCQkgICBmYWRkL2ZkaXYvZm11bC9ldGMuIGVtdWxhdGlvbiByb3V0aW5lcy4JCSMKKyMJdW5mX3JlczQoKTogc2FtZSBhcyBhYm92ZSBidXQgZm9yIGZzZ2xtdWwvZnNnbGRpdiB3aGljaCB1c2UJIworIwkJICAgIHNpbmdsZSByb3VuZCBwcmVjIGFuZCBleHRlbmRlZCBwcmVjIG1vZGUuCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfZGVub3JtKCkgLSBkZW5vcm1hbGl6ZSBhY2NvcmRpbmcgdG8gc2NhbGUgZmFjdG9yCQkjCisjCV9yb3VuZCgpIC0gcm91bmQgZGVub3JtYWxpemVkIG51bWJlciBhY2NvcmRpbmcgdG8gcm5kIHByZWMJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc29uIG9wZXJhbmQJCQkjCisjCWQwID0gc2NhbGUgZmFjdG9yCQkJCQkJIworIwlkMSA9IHJvdW5kaW5nIHByZWNpc2lvbi9tb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0IGluIGV4dGVuZGVkIHByZWNpc2lvbgkjCisjCWQwLmIgPSByZXN1bHQgRlBTUl9jYyB3aGljaCBjYWxsZXIgbWF5IG9yIG1heSBub3Qgd2FudCB0byBzYXZlCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUNvbnZlcnQgdGhlIGlucHV0IG9wZXJhbmQgdG8gImludGVybmFsIGZvcm1hdCIgd2hpY2ggbWVhbnMgdGhlCSMKKyMgZXhwb25lbnQgaXMgZXh0ZW5kZWQgdG8gMTYgYml0cyBhbmQgdGhlIHNpZ24gaXMgc3RvcmVkIGluIHRoZSB1bnVzZWQJIworIyBwb3J0aW9uIG9mIHRoZSBleHRlbmRlZCBwcmVjaXNvbiBvcGVyYW5kLiBEZW5vcm1hbGl6ZSB0aGUgbnVtYmVyCSMKKyMgYWNjb3JkaW5nIHRvIHRoZSBzY2FsZSBmYWN0b3IgcGFzc2VkIGluIGQwLiBUaGVuLCByb3VuZCB0aGUJCSMKKyMgZGVub3JtYWxpemVkIHJlc3VsdC4JCQkJCQkJIworIwlTZXQgdGhlIEZQU1JfZXhjIGJpdHMgYXMgYXBwcm9wcmlhdGUgYnV0IHJldHVybiB0aGUgY2MgYml0cyBpbgkjCisjIGQwIGluIGNhc2UgdGhlIGNhbGxlciBkb2Vzbid0IHdhbnQgdG8gc2F2ZSB0aGVtIChhcyBpcyB0aGUgY2FzZSBmb3IJIworIyBmbW92ZSBvdXQpLgkJCQkJCQkJIworIwl1bmZfcmVzNCgpIGZvciBmc2dsbXVsL2ZzZ2xkaXYgZm9yY2VzIHRoZSBkZW5vcm0gdG8gZXh0ZW5kZWQJIworIyBwcmVjaXNpb24gYW5kIHRoZSByb3VuZGluZyBtb2RlIHRvIHNpbmdsZS4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCXVuZl9yZXMKK3VuZl9yZXM6CisJbW92LmwJCSVkMSwgLSglc3ApCQkjIHNhdmUgcm5kIHByZWMsbW9kZSBvbiBzdGFjaworCisJYnRzdAkJJjB4NywgRlRFTVBfRVgoJWEwKQkjIG1ha2UgImludGVybmFsIiBmb3JtYXQKKwlzbmUJCUZURU1QX1NHTiglYTApCisKKwltb3YudwkJRlRFTVBfRVgoJWEwKSwgJWQxCSMgZXh0cmFjdCBleHBvbmVudAorCWFuZC53CQkmMHg3ZmZmLCAlZDEKKwlzdWIudwkJJWQwLCAlZDEKKwltb3YudwkJJWQxLCBGVEVNUF9FWCglYTApCSMgaW5zZXJ0IDE2IGJpdCBleHBvbmVudAorCisJbW92LmwJCSVhMCwgLSglc3ApCQkjIHNhdmUgb3BlcmFuZCBwdHIgZHVyaW5nIGNhbGxzCisKKwltb3YubAkJMHg0KCVzcCksJWQwCQkjIHBhc3Mgcm5kIHByZWMuCisJYW5kaS53CQkmMHgwMGMwLCVkMAorCWxzci53CQkmMHg0LCVkMAorCWJzci5sCQlfZGVub3JtCQkJIyBkZW5vcm0gcmVzdWx0CisKKwltb3YubAkJKCVzcCksJWEwCisJbW92LncJCTB4Niglc3ApLCVkMQkJIyBsb2FkIHByZWM6bW9kZSBpbnRvICVkMQorCWFuZGkudwkJJjB4YzAsJWQxCQkjIGV4dHJhY3Qgcm5kIHByZWMKKwlsc3IudwkJJjB4NCwlZDEKKwlzd2FwCQklZDEKKwltb3YudwkJMHg2KCVzcCksJWQxCisJYW5kaS53CQkmMHgzMCwlZDEKKwlsc3IudwkJJjB4NCwlZDEKKwlic3IubAkJX3JvdW5kCQkJIyByb3VuZCB0aGUgZGVub3JtCisKKwltb3YubAkJKCVzcCkrLCAlYTAKKworIyByZXN1bHQgaXMgbm93IHJvdW5kZWQgcHJvcGVybHkuIGNvbnZlcnQgYmFjayB0byBub3JtYWwgZm9ybWF0CisJYmNscgkJJjB4NywgRlRFTVBfRVgoJWEwKQkjIGNsZWFyIHNnbiBmaXJzdDsgbWF5IGhhdmUgcmVzaWR1ZQorCXRzdC5iCQlGVEVNUF9TR04oJWEwKQkJIyBpcyAiaW50ZXJuYWwgcmVzdWx0IiBzaWduIHNldD8KKwliZXEuYgkJdW5mX3Jlc19jaGtpZnplcm8JIyBubzsgcmVzdWx0IGlzIHBvc2l0aXZlCisJYnNldAkJJjB4NywgRlRFTVBfRVgoJWEwKQkjIHNldCByZXN1bHQgc2duCisJY2xyLmIJCUZURU1QX1NHTiglYTApCQkjIGNsZWFyIHRlbXAgc2lnbgorCisjIHRoZSBudW1iZXIgbWF5IGhhdmUgYmVjb21lIHplcm8gYWZ0ZXIgcm91bmRpbmcuIHNldCBjY29kZXMgYWNjb3JkaW5nbHkuCit1bmZfcmVzX2Noa2lmemVybzoKKwljbHIubAkJJWQwCisJdHN0LmwJCUZURU1QX0hJKCVhMCkJCSMgaXMgdmFsdWUgbm93IGEgemVybz8KKwlibmUuYgkJdW5mX3Jlc19jb250CQkjIG5vCisJdHN0LmwJCUZURU1QX0xPKCVhMCkKKwlibmUuYgkJdW5mX3Jlc19jb250CQkjIG5vCisjCWJzZXQJCSZ6X2JpdCwgRlBTUl9DQyglYTYpCSMgeWVzOyBzZXQgemVybyBjY29kZSBiaXQKKwlic2V0CQkmel9iaXQsICVkMAkJIyB5ZXM7IHNldCB6ZXJvIGNjb2RlIGJpdAorCit1bmZfcmVzX2NvbnQ6CisKKyMKKyMgY2FuIGluZXgxIGFsc28gYmUgc2V0IGFsb25nIHdpdGggdW5mbCBhbmQgaW5leDI/Pz8KKyMKKyMgd2Uga25vdyB0aGF0IHVuZGVyZmxvdyBoYXMgb2NjdXJyZWQuIGF1bmZsIHNob3VsZCBiZSBzZXQgaWYgSU5FWDIgaXMgYWxzbyBzZXQuCisjCisJYnRzdAkJJmluZXgyX2JpdCwgRlBTUl9FWENFUFQoJWE2KSAjIGlzIElORVgyIHNldD8KKwliZXEuYgkJdW5mX3Jlc19lbmQJCSMgbm8KKwlic2V0CQkmYXVuZmxfYml0LCBGUFNSX0FFWENFUFQoJWE2KSAjIHllczsgc2V0IGF1bmZsCisKK3VuZl9yZXNfZW5kOgorCWFkZC5sCQkmMHg0LCAlc3AJCSMgY2xlYXIgc3RhY2sKKwlydHMKKworIyB1bmZfcmVzKCkgZm9yIGZzZ2xtdWwoKSBhbmQgZnNnbGRpdigpLgorCWdsb2JhbAkJdW5mX3JlczQKK3VuZl9yZXM0OgorCW1vdi5sCQklZDEsLSglc3ApCQkjIHNhdmUgcm5kIHByZWMsbW9kZSBvbiBzdGFjaworCisJYnRzdAkJJjB4NyxGVEVNUF9FWCglYTApCSMgbWFrZSAiaW50ZXJuYWwiIGZvcm1hdAorCXNuZQkJRlRFTVBfU0dOKCVhMCkKKworCW1vdi53CQlGVEVNUF9FWCglYTApLCVkMQkjIGV4dHJhY3QgZXhwb25lbnQKKwlhbmQudwkJJjB4N2ZmZiwlZDEKKwlzdWIudwkJJWQwLCVkMQorCW1vdi53CQklZDEsRlRFTVBfRVgoJWEwKQkjIGluc2VydCAxNiBiaXQgZXhwb25lbnQKKworCW1vdi5sCQklYTAsLSglc3ApCQkjIHNhdmUgb3BlcmFuZCBwdHIgZHVyaW5nIGNhbGxzCisKKwljbHIubAkJJWQwCQkJIyBmb3JjZSBybmQgcHJlYyA9IGV4dAorCWJzci5sCQlfZGVub3JtCQkJIyBkZW5vcm0gcmVzdWx0CisKKwltb3YubAkJKCVzcCksJWEwCisJbW92LncJCSZzX21vZGUsJWQxCQkjIGZvcmNlIHJuZCBwcmVjID0gc2dsCisJc3dhcAkJJWQxCisJbW92LncJCTB4Niglc3ApLCVkMQkJIyBsb2FkIHJuZCBtb2RlCisJYW5kaS53CQkmMHgzMCwlZDEJCSMgZXh0cmFjdCBybmQgcHJlYworCWxzci53CQkmMHg0LCVkMQorCWJzci5sCQlfcm91bmQJCQkjIHJvdW5kIHRoZSBkZW5vcm0KKworCW1vdi5sCQkoJXNwKSssJWEwCisKKyMgcmVzdWx0IGlzIG5vdyByb3VuZGVkIHByb3Blcmx5LiBjb252ZXJ0IGJhY2sgdG8gbm9ybWFsIGZvcm1hdAorCWJjbHIJCSYweDcsRlRFTVBfRVgoJWEwKQkjIGNsZWFyIHNnbiBmaXJzdDsgbWF5IGhhdmUgcmVzaWR1ZQorCXRzdC5iCQlGVEVNUF9TR04oJWEwKQkJIyBpcyAiaW50ZXJuYWwgcmVzdWx0IiBzaWduIHNldD8KKwliZXEuYgkJdW5mX3JlczRfY2hraWZ6ZXJvCSMgbm87IHJlc3VsdCBpcyBwb3NpdGl2ZQorCWJzZXQJCSYweDcsRlRFTVBfRVgoJWEwKQkjIHNldCByZXN1bHQgc2duCisJY2xyLmIJCUZURU1QX1NHTiglYTApCQkjIGNsZWFyIHRlbXAgc2lnbgorCisjIHRoZSBudW1iZXIgbWF5IGhhdmUgYmVjb21lIHplcm8gYWZ0ZXIgcm91bmRpbmcuIHNldCBjY29kZXMgYWNjb3JkaW5nbHkuCit1bmZfcmVzNF9jaGtpZnplcm86CisJY2xyLmwJCSVkMAorCXRzdC5sCQlGVEVNUF9ISSglYTApCQkjIGlzIHZhbHVlIG5vdyBhIHplcm8/CisJYm5lLmIJCXVuZl9yZXM0X2NvbnQJCSMgbm8KKwl0c3QubAkJRlRFTVBfTE8oJWEwKQorCWJuZS5iCQl1bmZfcmVzNF9jb250CQkjIG5vCisjCWJzZXQJCSZ6X2JpdCxGUFNSX0NDKCVhNikJIyB5ZXM7IHNldCB6ZXJvIGNjb2RlIGJpdAorCWJzZXQJCSZ6X2JpdCwlZDAJCSMgeWVzOyBzZXQgemVybyBjY29kZSBiaXQKKwordW5mX3JlczRfY29udDoKKworIworIyBjYW4gaW5leDEgYWxzbyBiZSBzZXQgYWxvbmcgd2l0aCB1bmZsIGFuZCBpbmV4Mj8/PworIworIyB3ZSBrbm93IHRoYXQgdW5kZXJmbG93IGhhcyBvY2N1cnJlZC4gYXVuZmwgc2hvdWxkIGJlIHNldCBpZiBJTkVYMiBpcyBhbHNvIHNldC4KKyMKKwlidHN0CQkmaW5leDJfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBpcyBJTkVYMiBzZXQ/CisJYmVxLmIJCXVuZl9yZXM0X2VuZAkJIyBubworCWJzZXQJCSZhdW5mbF9iaXQsRlBTUl9BRVhDRVBUKCVhNikgIyB5ZXM7IHNldCBhdW5mbAorCit1bmZfcmVzNF9lbmQ6CisJYWRkLmwJCSYweDQsJXNwCQkjIGNsZWFyIHN0YWNrCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJb3ZmX3JlcygpOiByb3V0aW5lIHRvIHByb2R1Y2UgdGhlIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0IG9mCSMKKyMJCSAgIGFuIG92ZXJmbG93aW5nIG51bWJlci4JCQkJIworIwlvdmZfcmVzMigpOiBzYW1lIGFzIGFib3ZlIGJ1dCB0aGUgcm5kIG1vZGUvcHJlYyBhcmUgcGFzc2VkCSMKKyMJCSAgICBkaWZmZXJlbnRseS4JCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCW5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQxLmIJPSAnLTEnID0+ICgtKTsgJzAnID0+ICgrKQkJCQkjCisjICAgb3ZmX3JlcygpOgkJCQkJCQkJIworIwlkMAk9IHJuZCBtb2RlL3ByZWMJCQkJCQkjCisjICAgb3ZmX3JlczIoKToJCQkJCQkJCSMKKyMJaGkoZDApCT0gcm5kIHByZWMJCQkJCQkjCisjCWxvKGQwKQk9IHJuZCBtb2RlCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAJPSBwb2ludHMgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHJlc3VsdAkJCSMKKyMJZDAuYgk9IGNvbmRpdGlvbiBjb2RlIGJpdHMJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoZSBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdCBjYW4gYmUgZGV0ZXJtaW5lZCBieSB0aGUgc2lnbiBvZgkjCisjIHRoZSByZXN1bHQgYW5kIHRoZSByb3VuZGluZyBtb2RlL3ByZWMgaW4gZWZmZWN0LiBUaGVzZSBiaXRzIGFyZQkjCisjIGNvbmNhdGVuYXRlZCB0b2dldGhlciB0byBjcmVhdGUgYW4gaW5kZXggaW50byB0aGUgZGVmYXVsdCByZXN1bHQJIworIyB0YWJsZS4gQSBwb2ludGVyIHRvIHRoZSBjb3JyZWN0IHJlc3VsdCBpcyByZXR1cm5lZCBpbiBhMC4gVGhlCQkjCisjIHJlc3VsdGluZyBjb25kaXRpb24gY29kZXMgYXJlIHJldHVybmVkIGluIGQwIGluIGNhc2UgdGhlIGNhbGxlcgkjCisjIGRvZXNuJ3Qgd2FudCBGUFNSX2NjIGFsdGVyZWQgKGFzIGlzIHRoZSBjYXNlIGZvciBmbW92ZSBvdXQpLgkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJb3ZmX3Jlcworb3ZmX3JlczoKKwlhbmRpLncJCSYweDEwLCVkMQkJIyBrZWVwIHJlc3VsdCBzaWduCisJbHNyLmIJCSYweDQsJWQwCQkjIHNoaWZ0IHByZWMvbW9kZQorCW9yLmIJCSVkMCwlZDEJCQkjIGNvbmNhdCB0aGUgdHdvCisJbW92LncJCSVkMSwlZDAJCQkjIG1ha2UgYSBjb3B5CisJbHNsLmIJCSYweDEsJWQxCQkjIG11bHRpcGx5IGQxIGJ5IDIKKwlicmEuYgkJb3ZmX3Jlc19sb2FkCisKKwlnbG9iYWwJCW92Zl9yZXMyCitvdmZfcmVzMjoKKwlhbmQudwkJJjB4MTAsICVkMQkJIyBrZWVwIHJlc3VsdCBzaWduCisJb3IuYgkJJWQwLCAlZDEJCSMgaW5zZXJ0IHJuZCBtb2RlCisJc3dhcAkJJWQwCisJb3IuYgkJJWQwLCAlZDEJCSMgaW5zZXJ0IHJuZCBwcmVjCisJbW92LncJCSVkMSwgJWQwCQkjIG1ha2UgYSBjb3B5CisJbHNsLmIJCSYweDEsICVkMQkJIyBzaGlmdCBsZWZ0IGJ5IDEKKworIworIyB1c2UgdGhlIHJvdW5kaW5nIG1vZGUsIHByZWNpc2lvbiwgYW5kIHJlc3VsdCBzaWduIGFzIGluIGluZGV4IGludG8gdGhlCisjIHR3byB0YWJsZXMgYmVsb3cgdG8gZmV0Y2ggdGhlIGRlZmF1bHQgcmVzdWx0IGFuZCB0aGUgcmVzdWx0IGNjb2Rlcy4KKyMKK292Zl9yZXNfbG9hZDoKKwltb3YuYgkJKHRibF9vdmZsX2NjLmIsJXBjLCVkMC53KjEpLCAlZDAgIyBmZXRjaCByZXN1bHQgY2NvZGVzCisJbGVhCQkodGJsX292ZmxfcmVzdWx0LmIsJXBjLCVkMS53KjgpLCAlYTAgIyByZXR1cm4gcmVzdWx0IHB0cgorCisJcnRzCisKK3RibF9vdmZsX2NjOgorCWJ5dGUJCTB4MiwgMHgwLCAweDAsIDB4MgorCWJ5dGUJCTB4MiwgMHgwLCAweDAsIDB4MgorCWJ5dGUJCTB4MiwgMHgwLCAweDAsIDB4MgorCWJ5dGUJCTB4MCwgMHgwLCAweDAsIDB4MAorCWJ5dGUJCTB4MisweDgsIDB4OCwgMHgyKzB4OCwgMHg4CisJYnl0ZQkJMHgyKzB4OCwgMHg4LCAweDIrMHg4LCAweDgKKwlieXRlCQkweDIrMHg4LCAweDgsIDB4MisweDgsIDB4OAorCit0Ymxfb3ZmbF9yZXN1bHQ6CisJbG9uZwkJMHg3ZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjICtJTkY7IFJOCisJbG9uZwkJMHg3ZmZlMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCAjICtFWFQ7IFJaCisJbG9uZwkJMHg3ZmZlMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCAjICtFWFQ7IFJNCisJbG9uZwkJMHg3ZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjICtJTkY7IFJQCisKKwlsb25nCQkweDdmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgK0lORjsgUk4KKwlsb25nCQkweDQwN2UwMDAwLDB4ZmZmZmZmMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgK1NHTDsgUloKKwlsb25nCQkweDQwN2UwMDAwLDB4ZmZmZmZmMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgK1NHTDsgUk0KKwlsb25nCQkweDdmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgK0lORjsgUlAKKworCWxvbmcJCTB4N2ZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyArSU5GOyBSTgorCWxvbmcJCTB4NDNmZTAwMDAsMHhmZmZmZmZmZiwweGZmZmZmODAwLDB4MDAwMDAwMDAgIyArREJMOyBSWgorCWxvbmcJCTB4NDNmZTAwMDAsMHhmZmZmZmZmZiwweGZmZmZmODAwLDB4MDAwMDAwMDAgIyArREJMOyBSTQorCWxvbmcJCTB4N2ZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyArSU5GOyBSUAorCisJbG9uZwkJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCWxvbmcJCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwlsb25nCQkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJbG9uZwkJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCisJbG9uZwkJMHhmZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjIC1JTkY7IFJOCisJbG9uZwkJMHhmZmZlMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCAjIC1FWFQ7IFJaCisJbG9uZwkJMHhmZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjIC1JTkY7IFJNCisJbG9uZwkJMHhmZmZlMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCAjIC1FWFQ7IFJQCisKKwlsb25nCQkweGZmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgLUlORjsgUk4KKwlsb25nCQkweGMwN2UwMDAwLDB4ZmZmZmZmMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgLVNHTDsgUloKKwlsb25nCQkweGZmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgLUlORjsgUk0KKwlsb25nCQkweGMwN2UwMDAwLDB4ZmZmZmZmMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgLVNHTDsgUlAKKworCWxvbmcJCTB4ZmZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyAtSU5GOyBSTgorCWxvbmcJCTB4YzNmZTAwMDAsMHhmZmZmZmZmZiwweGZmZmZmODAwLDB4MDAwMDAwMDAgIyAtREJMOyBSWgorCWxvbmcJCTB4ZmZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyAtSU5GOyBSTQorCWxvbmcJCTB4YzNmZTAwMDAsMHhmZmZmZmZmZiwweGZmZmZmODAwLDB4MDAwMDAwMDAgIyAtREJMOyBSUAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWdldF9wYWNrZWQoKTogZmV0Y2ggYSBwYWNrZWQgb3BlcmFuZCBmcm9tIG1lbW9yeSBhbmQgdGhlbgkjCisjCQkgICAgICBjb252ZXJ0IGl0IHRvIGEgZmxvYXRpbmctcG9pbnQgYmluYXJ5IG51bWJlci4JIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2RjYWxjX2VhKCkgLSBjYWxjdWxhdGUgdGhlIGNvcnJlY3QgPGVhPgkJCSMKKyMJX21lbV9yZWFkKCkgLSBmZXRjaCB0aGUgcGFja2VkIG9wZXJhbmQgZnJvbSBtZW1vcnkJCSMKKyMJZmFjY19pbl94KCkgLSB0aGUgZmV0Y2ggZmFpbGVkIHNvIGp1bXAgdG8gc3BlY2lhbCBleGl0IGNvZGUJIworIwlkZWNiaW4oKSAgICAtIGNvbnZlcnQgcGFja2VkIHRvIGJpbmFyeSBleHRlbmRlZCBwcmVjaXNpb24JIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSWYgbm8gZmFpbHVyZSBvbiBfbWVtX3JlYWQoKToJCQkJCSMKKyMJRlBfU1JDKGE2KSA9IHBhY2tlZCBvcGVyYW5kIG5vdyBhcyBhIGJpbmFyeSBGUCBudW1iZXIJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUdldCB0aGUgY29ycmVjdCA8ZWE+IHdoaWhjIGlzIHRoZSB2YWx1ZSBvbiB0aGUgZXhjZXB0aW9uIHN0YWNrCSMKKyMgZnJhbWUgdy8gbWF5YmUgYSBjb3JyZWN0aW9uIGZhY3RvciBpZiB0aGUgPGVhPiBpcyAtKGFuKSBvciAoYW4pKy4JIworIyBUaGVuLCBmZXRjaCB0aGUgb3BlcmFuZCBmcm9tIG1lbW9yeS4gSWYgdGhlIGZldGNoIGZhaWxzLCBleGl0CQkjCisjIHRocm91Z2ggZmFjY19pbl94KCkuCQkJCQkJCSMKKyMJSWYgdGhlIHBhY2tlZCBvcGVyYW5kIGlzIGEgWkVSTyxOQU4sIG9yIElORiwgY29udmVydCBpdCB0bwkjCisjIGl0cyBiaW5hcnkgcmVwcmVzZW50YXRpb24gaGVyZS4gRWxzZSwgY2FsbCBkZWNiaW4oKSB3aGljaCB3aWxsCSMKKyMgY29udmVydCB0aGUgcGFja2VkIHZhbHVlIHRvIGFuIGV4dGVuZGVkIHByZWNpc2lvbiBiaW5hcnkgdmFsdWUuCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgdGhlIHN0YWNrZWQgPGVhPiBmb3IgcGFja2VkIGlzIGNvcnJlY3QgZXhjZXB0IGZvciAtKEFuKS4KKyMgdGhlIGJhc2UgcmVnIG11c3QgYmUgdXBkYXRlZCBmb3IgYm90aCAtKEFuKSBhbmQgKEFuKSsuCisJZ2xvYmFsCQlnZXRfcGFja2VkCitnZXRfcGFja2VkOgorCW1vdi5sCQkmMHhjLCVkMAkJIyBwYWNrZWQgaXMgMTIgYnl0ZXMKKwlic3IubAkJX2RjYWxjX2VhCQkjIGZldGNoIDxlYT47IGNvcnJlY3QgQW4KKworCWxlYQkJRlBfU1JDKCVhNiksJWExCQkjIHBhc3M6IHB0ciB0byBzdXBlciBkc3QKKwltb3YubAkJJjB4YywlZDAJCSMgcGFzczogMTIgYnl0ZXMKKwlic3IubAkJX2RtZW1fcmVhZAkJIyByZWFkIHBhY2tlZCBvcGVyYW5kCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZGZldGNoIGZhaWw/CisJYm5lLmwJCWZhY2NfaW5feAkJIyB5ZXMKKworIyBUaGUgcGFja2VkIG9wZXJhbmQgaXMgYW4gSU5GIG9yIGEgTkFOIGlmIHRoZSBleHBvbmVudCBmaWVsZCBpcyBhbGwgb25lcy4KKwliZmV4dHUJCUZQX1NSQyglYTYpeyYxOiYxNX0sJWQwCSMgZ2V0IGV4cAorCWNtcGkudwkJJWQwLCYweDdmZmYJCSMgSU5GIG9yIE5BTj8KKwlibmUuYgkJZ3BfdHJ5X3plcm8JCSMgbm8KKwlydHMJCQkJCSMgb3BlcmFuZCBpcyBhbiBJTkYgb3IgTkFOCisKKyMgVGhlIHBhY2tlZCBvcGVyYW5kIGlzIGEgemVybyBpZiB0aGUgbWFudGlzc2EgaXMgYWxsIHplcm8sIGVsc2UgaXQncworIyBhIG5vcm1hbCBwYWNrZWQgb3AuCitncF90cnlfemVybzoKKwltb3YuYgkJMytGUF9TUkMoJWE2KSwlZDAJIyBnZXQgYnl0ZSA0CisJYW5kaS5iCQkmMHgwZiwlZDAJCSMgY2xlYXIgYWxsIGJ1dCBsYXN0IG55YmJsZQorCWJuZS5iCQlncF9ub3Rfc3BlYwkJIyBub3QgYSB6ZXJvCisJdHN0LmwJCUZQX1NSQ19ISSglYTYpCQkjIGlzIGx3IDIgemVybz8KKwlibmUuYgkJZ3Bfbm90X3NwZWMJCSMgbm90IGEgemVybworCXRzdC5sCQlGUF9TUkNfTE8oJWE2KQkJIyBpcyBsdyAzIHplcm8/CisJYm5lLmIJCWdwX25vdF9zcGVjCQkjIG5vdCBhIHplcm8KKwlydHMJCQkJCSMgb3BlcmFuZCBpcyBhIFpFUk8KK2dwX25vdF9zcGVjOgorCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBwYWNrZWQgb3AKKwlic3IubAkJZGVjYmluCQkJIyBjb252ZXJ0IHRvIGV4dGVuZGVkCisJZm1vdm0ueAkJJjB4ODAsRlBfU1JDKCVhNikJIyBtYWtlIHRoaXMgdGhlIHNyY29wCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZGVjYmluKCk6IENvbnZlcnRzIG5vcm1hbGl6ZWQgcGFja2VkIGJjZCB2YWx1ZSBwb2ludGVkIHRvIGJ5IHJlZ2lzdGVyCSMKKyMJICAgIGEwIHRvIGV4dGVuZGVkLXByZWNpc2lvbiB2YWx1ZSBpbiBmcDAuCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIG5vcm1hbGl6ZWQgcGFja2VkIGJjZCB2YWx1ZQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IGV4YWN0IGZwIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYWNrZWQgYmNkIHZhbHVlLgkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRXhwZWN0ZWQgaXMgYSBub3JtYWwgYmNkIChpLmUuIG5vbi1leGNlcHRpb25hbDsgYWxsIGluZiwgemVybywJIworIwlhbmQgTmFOIG9wZXJhbmRzIGFyZSBkaXNwYXRjaGVkIHdpdGhvdXQgZW50ZXJpbmcgdGhpcyByb3V0aW5lKQkjCisjCXZhbHVlIGluIDY4ODgxLzg4MiBmb3JtYXQgYXQgbG9jYXRpb24gKGEwKS4JCQkjCisjCQkJCQkJCQkJIworIwlBMS4gQ29udmVydCB0aGUgYmNkIGV4cG9uZW50IHRvIGJpbmFyeSBieSBzdWNjZXNzaXZlIGFkZHMgYW5kCSMKKyMJbXVscy4gU2V0IHRoZSBzaWduIGFjY29yZGluZyB0byBTRS4gU3VidHJhY3QgMTYgdG8gY29tcGVuc2F0ZQkjCisjCWZvciB0aGUgbWFudGlzc2Egd2hpY2ggaXMgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgMTcgaW50ZWdlcgkjCisjCWRpZ2l0cywgcmF0aGVyIHRoYW4gMSBpbnRlZ2VyIGFuZCAxNiBmcmFjdGlvbiBkaWdpdHMuCQkjCisjCU5vdGU6IHRoaXMgb3BlcmF0aW9uIGNhbiBuZXZlciBvdmVyZmxvdy4JCQkjCisjCQkJCQkJCQkJIworIwlBMi4gQ29udmVydCB0aGUgYmNkIG1hbnRpc3NhIHRvIGJpbmFyeSBieSBzdWNjZXNzaXZlCQkjCisjCWFkZHMgYW5kIG11bHMgaW4gRlAwLiBTZXQgdGhlIHNpZ24gYWNjb3JkaW5nIHRvIFNNLgkJIworIwlUaGUgbWFudGlzc2EgZGlnaXRzIHdpbGwgYmUgY29udmVydGVkIHdpdGggdGhlIGRlY2ltYWwgcG9pbnQJIworIwlhc3N1bWVkIGZvbGxvd2luZyB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgZGlnaXQuCQkJIworIwlOb3RlOiB0aGlzIG9wZXJhdGlvbiBjYW4gbmV2ZXIgb3ZlcmZsb3cuCQkJIworIwkJCQkJCQkJCSMKKyMJQTMuIENvdW50IHRoZSBudW1iZXIgb2YgbGVhZGluZy90cmFpbGluZyB6ZXJvcyBpbiB0aGUJCSMKKyMJYmNkIHN0cmluZy4gIElmIFNFIGlzIHBvc2l0aXZlLCBjb3VudCB0aGUgbGVhZGluZyB6ZXJvczsJIworIwlpZiBuZWdhdGl2ZSwgY291bnQgdGhlIHRyYWlsaW5nIHplcm9zLiAgU2V0IHRoZSBhZGp1c3RlZAkjCisjCWV4cG9uZW50IGVxdWFsIHRvIHRoZSBleHBvbmVudCBmcm9tIEExIGFuZCB0aGUgemVybyBjb3VudAkjCisjCWFkZGVkIGlmIFNNID0gMSBhbmQgc3VidHJhY3RlZCBpZiBTTSA9IDAuICBTY2FsZSB0aGUJCSMKKyMJbWFudGlzc2EgdGhlIGVxdWl2YWxlbnQgb2YgZm9yY2luZyBpbiB0aGUgYmNkIHZhbHVlOgkJIworIwkJCQkJCQkJCSMKKyMJU00gPSAwCWEgbm9uLXplcm8gZGlnaXQgaW4gdGhlIGludGVnZXIgcG9zaXRpb24JCSMKKyMJU00gPSAxCWEgbm9uLXplcm8gZGlnaXQgaW4gTWFudDAsIGxzZCBvZiB0aGUgZnJhY3Rpb24JCSMKKyMJCQkJCQkJCQkjCisjCXRoaXMgd2lsbCBpbnN1cmUgdGhhdCBhbnkgdmFsdWUsIHJlZ2FyZGxlc3Mgb2YgaXRzCQkjCisjCXJlcHJlc2VudGF0aW9uIChleC4gMC4xRTIsIDFFMSwgMTBFMCwgMTAwRS0xKSwgaXMgY29udmVydGVkCSMKKyMJY29uc2lzdGVudGx5LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwlBNC4gQ2FsY3VsYXRlIHRoZSBmYWN0b3IgMTBeZXhwIGluIEZQMSB1c2luZyBhIHRhYmxlIG9mCQkjCisjCTEwXigyXm4pIHZhbHVlcy4gIFRvIHJlZHVjZSB0aGUgZXJyb3IgaW4gZm9ybWluZyBmYWN0b3JzCSMKKyMJZ3JlYXRlciB0aGFuIDEwXjI3LCBhIGRpcmVjdGVkIHJvdW5kaW5nIHNjaGVtZSBpcyB1c2VkIHdpdGgJIworIwl0YWJsZXMgcm91bmRlZCB0byBSTiwgUk0sIGFuZCBSUCwgYWNjb3JkaW5nIHRvIHRoZSB0YWJsZQkjCisjCWluIHRoZSBjb21tZW50cyBvZiB0aGUgcHdydGVuIHNlY3Rpb24uCQkJCSMKKyMJCQkJCQkJCQkjCisjCUE1LiBGb3JtIHRoZSBmaW5hbCBiaW5hcnkgbnVtYmVyIGJ5IHNjYWxpbmcgdGhlIG1hbnRpc3NhIGJ5CSMKKyMJdGhlIGV4cG9uZW50IGZhY3Rvci4gIFRoaXMgaXMgZG9uZSBieSBtdWx0aXBseWluZyB0aGUJCSMKKyMJbWFudGlzc2EgaW4gRlAwIGJ5IHRoZSBmYWN0b3IgaW4gRlAxIGlmIHRoZSBhZGp1c3RlZAkJIworIwlleHBvbmVudCBzaWduIGlzIHBvc2l0aXZlLCBhbmQgZGl2aWRpbmcgRlAwIGJ5IEZQMSBpZgkJIworIwlpdCBpcyBuZWdhdGl2ZS4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJQ2xlYW4gdXAgYW5kIHJldHVybi4gQ2hlY2sgaWYgdGhlIGZpbmFsIG11bCBvciBkaXYgd2FzIGluZXhhY3QuCSMKKyMJSWYgc28sIHNldCBJTkVYMSBpbiBVU0VSX0ZQU1IuCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjCVBURU5STiwgUFRFTlJNLCBhbmQgUFRFTlJQIGFyZSBhcnJheXMgb2YgcG93ZXJzIG9mIDEwIHJvdW5kZWQKKyMJdG8gbmVhcmVzdCwgbWludXMsIGFuZCBwbHVzLCByZXNwZWN0aXZlbHkuICBUaGUgdGFibGVzIGluY2x1ZGUKKyMJMTAqKnsxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNTYsNTEyLDEwMjQsMjA0OCw0MDk2fS4gIE5vIHJvdW5kaW5nCisjCWlzIHJlcXVpcmVkIHVudGlsIHRoZSBwb3dlciBpcyBncmVhdGVyIHRoYW4gMjcsIGhvd2V2ZXIsIGFsbAorIwl0YWJsZXMgaW5jbHVkZSB0aGUgZmlyc3QgNSBmb3IgZWFzZSBvZiBpbmRleGluZy4KKyMKK1JUQUJMRToKKwlieXRlCQkwLDAsMCwwCisJYnl0ZQkJMiwzLDIsMworCWJ5dGUJCTIsMywzLDIKKwlieXRlCQkzLDIsMiwzCisKKwlzZXQJCUZOSUJTLDcKKwlzZXQJCUZTVFJULDAKKworCXNldAkJRVNUUlQsNAorCXNldAkJRURJR0lUUywyCisKKwlnbG9iYWwJCWRlY2JpbgorZGVjYmluOgorCW1vdi5sCQkweDAoJWEwKSxGUF9TQ1IwX0VYKCVhNikgIyBtYWtlIGEgY29weSBvZiBpbnB1dAorCW1vdi5sCQkweDQoJWEwKSxGUF9TQ1IwX0hJKCVhNikgIyBzbyB3ZSBkb24ndCBhbHRlciBpdAorCW1vdi5sCQkweDgoJWEwKSxGUF9TQ1IwX0xPKCVhNikKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAorCisJbW92bS5sCQkmMHgzYzAwLC0oJXNwKQkJIyBzYXZlIGQyLWQ1CisJZm1vdm0ueAkJJjB4MSwtKCVzcCkJCSMgc2F2ZSBmcDEKKyMKKyMgQ2FsY3VsYXRlIGV4cG9uZW50OgorIyAgMS4gQ29weSBiY2QgdmFsdWUgaW4gbWVtb3J5IGZvciB1c2UgYXMgYSB3b3JraW5nIGNvcHkuCisjICAyLiBDYWxjdWxhdGUgYWJzb2x1dGUgdmFsdWUgb2YgZXhwb25lbnQgaW4gZDEgYnkgbXVsIGFuZCBhZGQuCisjICAzLiBDb3JyZWN0IGZvciBleHBvbmVudCBzaWduLgorIyAgNC4gU3VidHJhY3QgMTYgdG8gY29tcGVuc2F0ZSBmb3IgaW50ZXJwcmV0aW5nIHRoZSBtYW50IGFzIGFsbCBpbnRlZ2VyIGRpZ2l0cy4KKyMgICAgIChpLmUuLCBhbGwgZGlnaXRzIGFzc3VtZWQgbGVmdCBvZiB0aGUgZGVjaW1hbCBwb2ludC4pCisjCisjIFJlZ2lzdGVyIHVzYWdlOgorIworIyAgY2FsY19lOgorIwkoKikgIGQwOiB0ZW1wIGRpZ2l0IHN0b3JhZ2UKKyMJKCopICBkMTogYWNjdW11bGF0b3IgZm9yIGJpbmFyeSBleHBvbmVudAorIwkoKikgIGQyOiBkaWdpdCBjb3VudAorIwkoKikgIGQzOiBvZmZzZXQgcG9pbnRlcgorIwkoICkgIGQ0OiBmaXJzdCB3b3JkIG9mIGJjZAorIwkoICkgIGEwOiBwb2ludGVyIHRvIHdvcmtpbmcgYmNkIHZhbHVlCisjCSggKSAgYTY6IHBvaW50ZXIgdG8gb3JpZ2luYWwgYmNkIHZhbHVlCisjCSgqKSAgRlBfU0NSMTogd29ya2luZyBjb3B5IG9mIG9yaWdpbmFsIGJjZCB2YWx1ZQorIwkoKikgIExfU0NSMTogY29weSBvZiBvcmlnaW5hbCBleHBvbmVudCB3b3JkCisjCitjYWxjX2U6CisJbW92LmwJCSZFRElHSVRTLCVkMgkJIyAjIG9mIG5pYmJsZXMgKGRpZ2l0cykgaW4gZnJhY3Rpb24gcGFydAorCW1vdi5sCQkmRVNUUlQsJWQzCQkjIGNvdW50ZXIgdG8gcGljayB1cCBkaWdpdHMKKwltb3YubAkJKCVhMCksJWQ0CQkjIGdldCBmaXJzdCB3b3JkIG9mIGJjZAorCWNsci5sCQklZDEJCQkjIHplcm8gZDEgZm9yIGFjY3VtdWxhdG9yCitlX2dkOgorCW11bHUubAkJJjB4YSwlZDEJCSMgbXVsIHBhcnRpYWwgcHJvZHVjdCBieSBvbmUgZGlnaXQgcGxhY2UKKwliZmV4dHUJCSVkNHslZDM6JjR9LCVkMAkJIyBnZXQgdGhlIGRpZ2l0IGFuZCB6ZXJvIGV4dGVuZCBpbnRvIGQwCisJYWRkLmwJCSVkMCwlZDEJCQkjIGQxID0gZDEgKyBkMAorCWFkZHEuYgkJJjQsJWQzCQkJIyBhZHZhbmNlIGQzIHRvIHRoZSBuZXh0IGRpZ2l0CisJZGJmLncJCSVkMixlX2dkCQkjIGlmIHdlIGhhdmUgdXNlZCBhbGwgMyBkaWdpdHMsIGV4aXQgbG9vcAorCWJ0c3QJCSYzMCwlZDQJCQkjIGdldCBTRQorCWJlcS5iCQllX3BvcwkJCSMgZG9uJ3QgbmVnYXRlIGlmIHBvcworCW5lZy5sCQklZDEJCQkjIG5lZ2F0ZSBiZWZvcmUgc3VidHJhY3RpbmcKK2VfcG9zOgorCXN1Yi5sCQkmMTYsJWQxCQkJIyBzdWIgdG8gY29tcGVuc2F0ZSBmb3Igc2hpZnQgb2YgbWFudAorCWJnZS5iCQllX3NhdmUJCQkjIGlmIHN0aWxsIHBvcywgZG8gbm90IG5lZworCW5lZy5sCQklZDEJCQkjIG5vdyBuZWdhdGl2ZSwgbWFrZSBwb3MgYW5kIHNldCBTRQorCW9yLmwJCSYweDQwMDAwMDAwLCVkNAkJIyBzZXQgU0UgaW4gZDQsCisJb3IubAkJJjB4NDAwMDAwMDAsKCVhMCkJIyBhbmQgaW4gd29ya2luZyBiY2QKK2Vfc2F2ZToKKwltb3YubAkJJWQxLC0oJXNwKQkJIyBzYXZlIGV4cCBvbiBzdGFjaworIworIworIyBDYWxjdWxhdGUgbWFudGlzc2E6CisjICAxLiBDYWxjdWxhdGUgYWJzb2x1dGUgdmFsdWUgb2YgbWFudGlzc2EgaW4gZnAwIGJ5IG11bCBhbmQgYWRkLgorIyAgMi4gQ29ycmVjdCBmb3IgbWFudGlzc2Egc2lnbi4KKyMgICAgIChpLmUuLCBhbGwgZGlnaXRzIGFzc3VtZWQgbGVmdCBvZiB0aGUgZGVjaW1hbCBwb2ludC4pCisjCisjIFJlZ2lzdGVyIHVzYWdlOgorIworIyAgY2FsY19tOgorIwkoKikgIGQwOiB0ZW1wIGRpZ2l0IHN0b3JhZ2UKKyMJKCopICBkMTogbHdvcmQgY291bnRlcgorIwkoKikgIGQyOiBkaWdpdCBjb3VudAorIwkoKikgIGQzOiBvZmZzZXQgcG9pbnRlcgorIwkoICkgIGQ0OiB3b3JkcyAyIGFuZCAzIG9mIGJjZAorIwkoICkgIGEwOiBwb2ludGVyIHRvIHdvcmtpbmcgYmNkIHZhbHVlCisjCSggKSAgYTY6IHBvaW50ZXIgdG8gb3JpZ2luYWwgYmNkIHZhbHVlCisjCSgqKSBmcDA6IG1hbnRpc3NhIGFjY3VtdWxhdG9yCisjCSggKSAgRlBfU0NSMTogd29ya2luZyBjb3B5IG9mIG9yaWdpbmFsIGJjZCB2YWx1ZQorIwkoICkgIExfU0NSMTogY29weSBvZiBvcmlnaW5hbCBleHBvbmVudCB3b3JkCisjCitjYWxjX206CisJbW92LmwJCSYxLCVkMQkJCSMgd29yZCBjb3VudGVyLCBpbml0IHRvIDEKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyBhY2N1bXVsYXRvcgorIworIworIyAgU2luY2UgdGhlIHBhY2tlZCBudW1iZXIgaGFzIGEgbG9uZyB3b3JkIGJldHdlZW4gdGhlIGZpcnN0ICYgc2Vjb25kIHBhcnRzLAorIyAgZ2V0IHRoZSBpbnRlZ2VyIGRpZ2l0IHRoZW4gc2tpcCBkb3duICYgZ2V0IHRoZSByZXN0IG9mIHRoZQorIyAgbWFudGlzc2EuICBXZSB3aWxsIHVucm9sbCB0aGUgbG9vcCBvbmNlLgorIworCWJmZXh0dQkJKCVhMCl7JjI4OiY0fSwlZDAJIyBpbnRlZ2VyIHBhcnQgaXMgbHMgZGlnaXQgaW4gbG9uZyB3b3JkCisJZmFkZC5iCQklZDAsJWZwMAkJIyBhZGQgZGlnaXQgdG8gc3VtIGluIGZwMAorIworIworIyAgR2V0IHRoZSByZXN0IG9mIHRoZSBtYW50aXNzYS4KKyMKK2xvYWRsdzoKKwltb3YubAkJKCVhMCwlZDEuTCo0KSwlZDQJIyBsb2FkIG1hbnRpc3NhIGxvbnF3b3JkIGludG8gZDQKKwltb3YubAkJJkZTVFJULCVkMwkJIyBjb3VudGVyIHRvIHBpY2sgdXAgZGlnaXRzCisJbW92LmwJCSZGTklCUywlZDIJCSMgcmVzZXQgbnVtYmVyIG9mIGRpZ2l0cyBwZXIgYTAgcHRyCittZDJiOgorCWZtdWwucwkJJjB4NDEyMDAwMDAsJWZwMAkjIGZwMCA9IGZwMCAqIDEwCisJYmZleHR1CQklZDR7JWQzOiY0fSwlZDAJCSMgZ2V0IHRoZSBkaWdpdCBhbmQgemVybyBleHRlbmQKKwlmYWRkLmIJCSVkMCwlZnAwCQkjIGZwMCA9IGZwMCArIGRpZ2l0CisjCisjCisjICBJZiBhbGwgdGhlIGRpZ2l0cyAoOCkgaW4gdGhhdCBsb25nIHdvcmQgaGF2ZSBiZWVuIGNvbnZlcnRlZCAoZDI9MCksCisjICB0aGVuIGluYyBkMSAoPTIpIHRvIHBvaW50IHRvIHRoZSBuZXh0IGxvbmcgd29yZCBhbmQgcmVzZXQgZDMgdG8gMAorIyAgdG8gaW5pdGlhbGl6ZSB0aGUgZGlnaXQgb2Zmc2V0LCBhbmQgc2V0IGQyIHRvIDcgZm9yIHRoZSBkaWdpdCBjb3VudDsKKyMgIGVsc2UgY29udGludWUgd2l0aCB0aGlzIGxvbmcgd29yZC4KKyMKKwlhZGRxLmIJCSY0LCVkMwkJCSMgYWR2YW5jZSBkMyB0byB0aGUgbmV4dCBkaWdpdAorCWRiZi53CQklZDIsbWQyYgkJIyBjaGVjayBmb3IgbGFzdCBkaWdpdCBpbiB0aGlzIGx3CituZXh0bHc6CisJYWRkcS5sCQkmMSwlZDEJCQkjIGluYyBsdyBwb2ludGVyIGluIG1hbnRpc3NhCisJY21wLmwJCSVkMSwmMgkJCSMgdGVzdCBmb3IgbGFzdCBsdworCWJsZS5iCQlsb2FkbHcJCQkjIGlmIG5vdCwgZ2V0IGxhc3Qgb25lCisjCisjICBDaGVjayB0aGUgc2lnbiBvZiB0aGUgbWFudCBhbmQgbWFrZSB0aGUgdmFsdWUgaW4gZnAwIHRoZSBzYW1lIHNpZ24uCisjCittX3NpZ246CisJYnRzdAkJJjMxLCglYTApCQkjIHRlc3Qgc2lnbiBvZiB0aGUgbWFudGlzc2EKKwliZXEuYgkJYXBfc3RfegkJCSMgaWYgY2xlYXIsIGdvIHRvIGFwcGVuZC9zdHJpcCB6ZXJvcworCWZuZWcueAkJJWZwMAkJCSMgaWYgc2V0LCBuZWdhdGUgZnAwCisjCisjIEFwcGVuZC9zdHJpcCB6ZXJvczoKKyMKKyMgIEZvciBhZGp1c3RlZCBleHBvbmVudHMgd2hpY2ggaGF2ZSBhbiBhYnNvbHV0ZSB2YWx1ZSBncmVhdGVyIHRoYW4gMjcqLAorIyAgdGhpcyByb3V0aW5lIGNhbGN1bGF0ZXMgdGhlIGFtb3VudCBuZWVkZWQgdG8gbm9ybWFsaXplIHRoZSBtYW50aXNzYQorIyAgZm9yIHRoZSBhZGp1c3RlZCBleHBvbmVudC4gIFRoYXQgbnVtYmVyIGlzIHN1YnRyYWN0ZWQgZnJvbSB0aGUgZXhwCisjICBpZiB0aGUgZXhwIHdhcyBwb3NpdGl2ZSwgYW5kIGFkZGVkIGlmIGl0IHdhcyBuZWdhdGl2ZS4gIFRoZSBwdXJwb3NlCisjICBvZiB0aGlzIGlzIHRvIHJlZHVjZSB0aGUgdmFsdWUgb2YgdGhlIGV4cG9uZW50IGFuZCB0aGUgcG9zc2liaWxpdHkKKyMgIG9mIGVycm9yIGluIGNhbGN1bGF0aW9uIG9mIHB3cnRlbi4KKyMKKyMgIDEuIEJyYW5jaCBvbiB0aGUgc2lnbiBvZiB0aGUgYWRqdXN0ZWQgZXhwb25lbnQuCisjICAycC4ocG9zaXRpdmUgZXhwKQorIyAgIDIuIENoZWNrIE0xNiBhbmQgdGhlIGRpZ2l0cyBpbiBsd29yZHMgMiBhbmQgMyBpbiBkZWNlbmRpbmcgb3JkZXIuCisjICAgMy4gQWRkIG9uZSBmb3IgZWFjaCB6ZXJvIGVuY291bnRlcmVkIHVudGlsIGEgbm9uLXplcm8gZGlnaXQuCisjICAgNC4gU3VidHJhY3QgdGhlIGNvdW50IGZyb20gdGhlIGV4cC4KKyMgICA1LiBDaGVjayBpZiB0aGUgZXhwIGhhcyBjcm9zc2VkIHplcm8gaW4gIzMgYWJvdmU7IG1ha2UgdGhlIGV4cCBhYnMKKyMJICAgYW5kIHNldCBTRS4KKyMJNi4gTXVsdGlwbHkgdGhlIG1hbnRpc3NhIGJ5IDEwKipjb3VudC4KKyMgIDJuLihuZWdhdGl2ZSBleHApCisjICAgMi4gQ2hlY2sgdGhlIGRpZ2l0cyBpbiBsd29yZHMgMyBhbmQgMiBpbiBkZWNlbmRpbmcgb3JkZXIuCisjICAgMy4gQWRkIG9uZSBmb3IgZWFjaCB6ZXJvIGVuY291bnRlcmVkIHVudGlsIGEgbm9uLXplcm8gZGlnaXQuCisjICAgNC4gQWRkIHRoZSBjb3VudCB0byB0aGUgZXhwLgorIyAgIDUuIENoZWNrIGlmIHRoZSBleHAgaGFzIGNyb3NzZWQgemVybyBpbiAjMyBhYm92ZTsgY2xlYXIgU0UuCisjICAgNi4gRGl2aWRlIHRoZSBtYW50aXNzYSBieSAxMCoqY291bnQuCisjCisjICAqV2h5IDI3PyAgSWYgdGhlIGFkanVzdGVkIGV4cG9uZW50IGlzIHdpdGhpbiAtMjggPCBleHBBIDwgMjgsIHRoYW4KKyMgICBhbnkgYWRqdXN0bWVudCBkdWUgdG8gYXBwZW5kL3N0cmlwIHplcm9zIHdpbGwgZHJpdmUgdGhlIHJlc3VsdGFuZQorIyAgIGV4cG9uZW50IHRvd2FyZHMgemVyby4gIFNpbmNlIGFsbCBwd3J0ZW4gY29uc3RhbnRzIHdpdGggYSBwb3dlcgorIyAgIG9mIDI3IG9yIGxlc3MgYXJlIGV4YWN0LCB0aGVyZSBpcyBubyBuZWVkIHRvIHVzZSB0aGlzIHJvdXRpbmUgdG8KKyMgICBhdHRlbXB0IHRvIGxlc3NlbiB0aGUgcmVzdWx0YW50IGV4cG9uZW50LgorIworIyBSZWdpc3RlciB1c2FnZToKKyMKKyMgIGFwX3N0X3o6CisjCSgqKSAgZDA6IHRlbXAgZGlnaXQgc3RvcmFnZQorIwkoKikgIGQxOiB6ZXJvIGNvdW50CisjCSgqKSAgZDI6IGRpZ2l0IGNvdW50CisjCSgqKSAgZDM6IG9mZnNldCBwb2ludGVyCisjCSggKSAgZDQ6IGZpcnN0IHdvcmQgb2YgYmNkCisjCSgqKSAgZDU6IGx3b3JkIGNvdW50ZXIKKyMJKCApICBhMDogcG9pbnRlciB0byB3b3JraW5nIGJjZCB2YWx1ZQorIwkoICkgIEZQX1NDUjE6IHdvcmtpbmcgY29weSBvZiBvcmlnaW5hbCBiY2QgdmFsdWUKKyMJKCApICBMX1NDUjE6IGNvcHkgb2Ygb3JpZ2luYWwgZXhwb25lbnQgd29yZAorIworIworIyBGaXJzdCBjaGVjayB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIGV4cG9uZW50IHRvIHNlZSBpZiB0aGlzCisjIHJvdXRpbmUgaXMgbmVjZXNzYXJ5LiAgSWYgc28sIHRoZW4gY2hlY2sgdGhlIHNpZ24gb2YgdGhlIGV4cG9uZW50CisjIGFuZCBkbyBhcHBlbmQgKCspIG9yIHN0cmlwICgtKSB6ZXJvcyBhY2NvcmRpbmdseS4KKyMgVGhpcyBzZWN0aW9uIGhhbmRsZXMgYSBwb3NpdGl2ZSBhZGp1c3RlZCBleHBvbmVudC4KKyMKK2FwX3N0X3o6CisJbW92LmwJCSglc3ApLCVkMQkJIyBsb2FkIGV4cEEgZm9yIHJhbmdlIHRlc3QKKwljbXAubAkJJWQxLCYyNwkJCSMgdGVzdCBpcyB3aXRoIDI3CisJYmxlLncJCXB3cnRlbgkJCSMgaWYgYWJzKGV4cEEpIDwyOCwgc2tpcCBhcC9zdCB6ZXJvcworCWJ0c3QJCSYzMCwoJWEwKQkJIyBjaGVjayBzaWduIG9mIGV4cAorCWJuZS5iCQlhcF9zdF9uCQkJIyBpZiBuZWcsIGdvIHRvIG5lZyBzaWRlCisJY2xyLmwJCSVkMQkJCSMgemVybyBjb3VudCByZWcKKwltb3YubAkJKCVhMCksJWQ0CQkjIGxvYWQgbHdvcmQgMSB0byBkNAorCWJmZXh0dQkJJWQ0eyYyODomNH0sJWQwCQkjIGdldCBNMTYgaW4gZDAKKwlibmUuYgkJYXBfcF9meAkJCSMgaWYgTTE2IGlzIG5vbi16ZXJvLCBnbyBmaXggZXhwCisJYWRkcS5sCQkmMSwlZDEJCQkjIGluYyB6ZXJvIGNvdW50CisJbW92LmwJCSYxLCVkNQkJCSMgaW5pdCBsd29yZCBjb3VudGVyCisJbW92LmwJCSglYTAsJWQ1LkwqNCksJWQ0CSMgZ2V0IGx3b3JkIDIgdG8gZDQKKwlibmUuYgkJYXBfcF9jbAkJCSMgaWYgbHcgMiBpcyB6ZXJvLCBza2lwIGl0CisJYWRkcS5sCQkmOCwlZDEJCQkjIGFuZCBpbmMgY291bnQgYnkgOAorCWFkZHEubAkJJjEsJWQ1CQkJIyBpbmMgbHdvcmQgY291bnRlcgorCW1vdi5sCQkoJWEwLCVkNS5MKjQpLCVkNAkjIGdldCBsd29yZCAzIHRvIGQ0CithcF9wX2NsOgorCWNsci5sCQklZDMJCQkjIGluaXQgb2Zmc2V0IHJlZworCW1vdi5sCQkmNywlZDIJCQkjIGluaXQgZGlnaXQgY291bnRlcgorYXBfcF9nZDoKKwliZmV4dHUJCSVkNHslZDM6JjR9LCVkMAkJIyBnZXQgZGlnaXQKKwlibmUuYgkJYXBfcF9meAkJCSMgaWYgbm9uLXplcm8sIGdvIHRvIGZpeCBleHAKKwlhZGRxLmwJCSY0LCVkMwkJCSMgcG9pbnQgdG8gbmV4dCBkaWdpdAorCWFkZHEubAkJJjEsJWQxCQkJIyBpbmMgZGlnaXQgY291bnRlcgorCWRiZi53CQklZDIsYXBfcF9nZAkJIyBnZXQgbmV4dCBkaWdpdAorYXBfcF9meDoKKwltb3YubAkJJWQxLCVkMAkJCSMgY29weSBjb3VudGVyIHRvIGQyCisJbW92LmwJCSglc3ApLCVkMQkJIyBnZXQgYWRqdXN0ZWQgZXhwIGZyb20gbWVtb3J5CisJc3ViLmwJCSVkMCwlZDEJCQkjIHN1YnRyYWN0IGNvdW50IGZyb20gZXhwCisJYmdlLmIJCWFwX3BfZm0JCQkjIGlmIHN0aWxsIHBvcywgZ28gdG8gcHdydGVuCisJbmVnLmwJCSVkMQkJCSMgbm93IGl0cyBuZWc7IGdldCBhYnMKKwltb3YubAkJKCVhMCksJWQ0CQkjIGxvYWQgbHdvcmQgMSB0byBkNAorCW9yLmwJCSYweDQwMDAwMDAwLCVkNAkJIyBhbmQgc2V0IFNFIGluIGQ0CisJb3IubAkJJjB4NDAwMDAwMDAsKCVhMCkJIyBhbmQgaW4gbWVtb3J5CisjCisjIENhbGN1bGF0ZSB0aGUgbWFudGlzc2EgbXVsdGlwbGllciB0byBjb21wZW5zYXRlIGZvciB0aGUgc3RyaXBpbmcgb2YKKyMgemVyb3MgZnJvbSB0aGUgbWFudGlzc2EuCisjCithcF9wX2ZtOgorCWxlYS5sCQlQVEVOUk4oJXBjKSwlYTEJCSMgZ2V0IGFkZHJlc3Mgb2YgcG93ZXItb2YtdGVuIHRhYmxlCisJY2xyLmwJCSVkMwkJCSMgaW5pdCB0YWJsZSBpbmRleAorCWZtb3YucwkJJjB4M2Y4MDAwMDAsJWZwMQkjIGluaXQgZnAxIHRvIDEKKwltb3YubAkJJjMsJWQyCQkJIyBpbml0IGQyIHRvIGNvdW50IGJpdHMgaW4gY291bnRlcgorYXBfcF9lbDoKKwlhc3IubAkJJjEsJWQwCQkJIyBzaGlmdCBsc2IgaW50byBjYXJyeQorCWJjYy5iCQlhcF9wX2VuCQkJIyBpZiAxLCBtdWwgZnAxIGJ5IHB3cnRlbiBmYWN0b3IKKwlmbXVsLngJCSglYTEsJWQzKSwlZnAxCQkjIG11bCBieSAxMCoqKGQzX2JpdF9ubykKK2FwX3BfZW46CisJYWRkLmwJCSYxMiwlZDMJCQkjIGluYyBkMyB0byBuZXh0IHJ0YWJsZSBlbnRyeQorCXRzdC5sCQklZDAJCQkjIGNoZWNrIGlmIGQwIGlzIHplcm8KKwlibmUuYgkJYXBfcF9lbAkJCSMgaWYgbm90LCBnZXQgbmV4dCBiaXQKKwlmbXVsLngJCSVmcDEsJWZwMAkJIyBtdWwgbWFudGlzc2EgYnkgMTAqKihub19iaXRzX3NoaWZ0ZWQpCisJYnJhLmIJCXB3cnRlbgkJCSMgZ28gY2FsYyBwd3J0ZW4KKyMKKyMgVGhpcyBzZWN0aW9uIGhhbmRsZXMgYSBuZWdhdGl2ZSBhZGp1c3RlZCBleHBvbmVudC4KKyMKK2FwX3N0X246CisJY2xyLmwJCSVkMQkJCSMgY2xyIGNvdW50ZXIKKwltb3YubAkJJjIsJWQ1CQkJIyBzZXQgdXAgZDUgdG8gcG9pbnQgdG8gbHdvcmQgMworCW1vdi5sCQkoJWEwLCVkNS5MKjQpLCVkNAkjIGdldCBsd29yZCAzCisJYm5lLmIJCWFwX25fY2wJCQkjIGlmIG5vdCB6ZXJvLCBjaGVjayBkaWdpdHMKKwlzdWIubAkJJjEsJWQ1CQkJIyBkZWMgZDUgdG8gcG9pbnQgdG8gbHdvcmQgMgorCWFkZHEubAkJJjgsJWQxCQkJIyBpbmMgY291bnRlciBieSA4CisJbW92LmwJCSglYTAsJWQ1LkwqNCksJWQ0CSMgZ2V0IGx3b3JkIDIKK2FwX25fY2w6CisJbW92LmwJCSYyOCwlZDMJCQkjIHBvaW50IHRvIGxhc3QgZGlnaXQKKwltb3YubAkJJjcsJWQyCQkJIyBpbml0IGRpZ2l0IGNvdW50ZXIKK2FwX25fZ2Q6CisJYmZleHR1CQklZDR7JWQzOiY0fSwlZDAJCSMgZ2V0IGRpZ2l0CisJYm5lLmIJCWFwX25fZngJCQkjIGlmIG5vbi16ZXJvLCBnbyB0byBleHAgZml4CisJc3VicS5sCQkmNCwlZDMJCQkjIHBvaW50IHRvIHByZXZpb3VzIGRpZ2l0CisJYWRkcS5sCQkmMSwlZDEJCQkjIGluYyBkaWdpdCBjb3VudGVyCisJZGJmLncJCSVkMixhcF9uX2dkCQkjIGdldCBuZXh0IGRpZ2l0CithcF9uX2Z4OgorCW1vdi5sCQklZDEsJWQwCQkJIyBjb3B5IGNvdW50ZXIgdG8gZDAKKwltb3YubAkJKCVzcCksJWQxCQkjIGdldCBhZGp1c3RlZCBleHAgZnJvbSBtZW1vcnkKKwlzdWIubAkJJWQwLCVkMQkJCSMgc3VidHJhY3QgY291bnQgZnJvbSBleHAKKwliZ3QuYgkJYXBfbl9mbQkJCSMgaWYgc3RpbGwgcG9zLCBnbyBmaXggbWFudGlzc2EKKwluZWcubAkJJWQxCQkJIyB0YWtlIGFicyBvZiBleHAgYW5kIGNsciBTRQorCW1vdi5sCQkoJWEwKSwlZDQJCSMgbG9hZCBsd29yZCAxIHRvIGQ0CisJYW5kLmwJCSYweGJmZmZmZmZmLCVkNAkJIyBhbmQgY2xyIFNFIGluIGQ0CisJYW5kLmwJCSYweGJmZmZmZmZmLCglYTApCSMgYW5kIGluIG1lbW9yeQorIworIyBDYWxjdWxhdGUgdGhlIG1hbnRpc3NhIG11bHRpcGxpZXIgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIGFwcGVuZGluZyBvZgorIyB6ZXJvcyB0byB0aGUgbWFudGlzc2EuCisjCithcF9uX2ZtOgorCWxlYS5sCQlQVEVOUk4oJXBjKSwlYTEJCSMgZ2V0IGFkZHJlc3Mgb2YgcG93ZXItb2YtdGVuIHRhYmxlCisJY2xyLmwJCSVkMwkJCSMgaW5pdCB0YWJsZSBpbmRleAorCWZtb3YucwkJJjB4M2Y4MDAwMDAsJWZwMQkjIGluaXQgZnAxIHRvIDEKKwltb3YubAkJJjMsJWQyCQkJIyBpbml0IGQyIHRvIGNvdW50IGJpdHMgaW4gY291bnRlcgorYXBfbl9lbDoKKwlhc3IubAkJJjEsJWQwCQkJIyBzaGlmdCBsc2IgaW50byBjYXJyeQorCWJjYy5iCQlhcF9uX2VuCQkJIyBpZiAxLCBtdWwgZnAxIGJ5IHB3cnRlbiBmYWN0b3IKKwlmbXVsLngJCSglYTEsJWQzKSwlZnAxCQkjIG11bCBieSAxMCoqKGQzX2JpdF9ubykKK2FwX25fZW46CisJYWRkLmwJCSYxMiwlZDMJCQkjIGluYyBkMyB0byBuZXh0IHJ0YWJsZSBlbnRyeQorCXRzdC5sCQklZDAJCQkjIGNoZWNrIGlmIGQwIGlzIHplcm8KKwlibmUuYgkJYXBfbl9lbAkJCSMgaWYgbm90LCBnZXQgbmV4dCBiaXQKKwlmZGl2LngJCSVmcDEsJWZwMAkJIyBkaXYgbWFudGlzc2EgYnkgMTAqKihub19iaXRzX3NoaWZ0ZWQpCisjCisjCisjIENhbGN1bGF0ZSBwb3dlci1vZi10ZW4gZmFjdG9yIGZyb20gYWRqdXN0ZWQgYW5kIHNoaWZ0ZWQgZXhwb25lbnQuCisjCisjIFJlZ2lzdGVyIHVzYWdlOgorIworIyAgcHdydGVuOgorIwkoKikgIGQwOiB0ZW1wCisjCSggKSAgZDE6IGV4cG9uZW50CisjCSgqKSAgZDI6IHtGUENSWzY6NV0sU00sU0V9IGFzIGluZGV4IGluIFJUQUJMRTsgdGVtcAorIwkoKikgIGQzOiBGUENSIHdvcmsgY29weQorIwkoICkgIGQ0OiBmaXJzdCB3b3JkIG9mIGJjZAorIwkoKikgIGExOiBSVEFCTEUgcG9pbnRlcgorIyAgY2FsY19wOgorIwkoKikgIGQwOiB0ZW1wCisjCSggKSAgZDE6IGV4cG9uZW50CisjCSgqKSAgZDM6IFBXUlR4eCB0YWJsZSBpbmRleAorIwkoICkgIGEwOiBwb2ludGVyIHRvIHdvcmtpbmcgY29weSBvZiBiY2QKKyMJKCopICBhMTogUFdSVHh4IHBvaW50ZXIKKyMJKCopIGZwMTogcG93ZXItb2YtdGVuIGFjY3VtdWxhdG9yCisjCisjIFB3cnRlbiBjYWxjdWxhdGVzIHRoZSBleHBvbmVudCBmYWN0b3IgaW4gdGhlIHNlbGVjdGVkIHJvdW5kaW5nIG1vZGUKKyMgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgdGFibGU6CisjCisjCVNpZ24gb2YgTWFudCAgU2lnbiBvZiBFeHAgIFJvdW5kaW5nIE1vZGUgIFBXUlRFTiBSb3VuZGluZyBNb2RlCisjCisjCUFOWQkgIEFOWQlSTglSTgorIworIwkgKwkgICArCVJQCVJQCisjCSAtCSAgICsJUlAJUk0KKyMJICsJICAgLQlSUAlSTQorIwkgLQkgICAtCVJQCVJQCisjCisjCSArCSAgICsJUk0JUk0KKyMJIC0JICAgKwlSTQlSUAorIwkgKwkgICAtCVJNCVJQCisjCSAtCSAgIC0JUk0JUk0KKyMKKyMJICsJICAgKwlSWglSTQorIwkgLQkgICArCVJaCVJNCisjCSArCSAgIC0JUloJUlAKKyMJIC0JICAgLQlSWglSUAorIworIworcHdydGVuOgorCW1vdi5sCQlVU0VSX0ZQQ1IoJWE2KSwlZDMJIyBnZXQgdXNlcidzIEZQQ1IKKwliZmV4dHUJCSVkM3smMjY6JjJ9LCVkMgkJIyBpc29sYXRlIHJvdW5kaW5nIG1vZGUgYml0cworCW1vdi5sCQkoJWEwKSwlZDQJCSMgcmVsb2FkIDFzdCBiY2Qgd29yZCB0byBkNAorCWFzbC5sCQkmMiwlZDIJCQkjIGZvcm1hdCBkMiB0byBiZQorCWJmZXh0dQkJJWQ0eyYwOiYyfSwlZDAJCSMge0ZQQ1JbNl0sRlBDUls1XSxTTSxTRX0KKwlhZGQubAkJJWQwLCVkMgkJCSMgaW4gZDIgYXMgaW5kZXggaW50byBSVEFCTEUKKwlsZWEubAkJUlRBQkxFKCVwYyksJWExCQkjIGxvYWQgcnRhYmxlIGJhc2UKKwltb3YuYgkJKCVhMSwlZDIpLCVkMAkJIyBsb2FkIG5ldyByb3VuZGluZyBiaXRzIGZyb20gdGFibGUKKwljbHIubAkJJWQzCQkJIyBjbGVhciBkMyB0byBmb3JjZSBubyBleGMgYW5kIGV4dGVuZGVkCisJYmZpbnMJCSVkMCwlZDN7JjI2OiYyfQkJIyBzdHVmZiBuZXcgcm91bmRpbmcgYml0cyBpbiBGUENSCisJZm1vdi5sCQklZDMsJWZwY3IJCSMgd3JpdGUgbmV3IEZQQ1IKKwlhc3IubAkJJjEsJWQwCQkJIyB3cml0ZSBjb3JyZWN0IFBURU54eCB0YWJsZQorCWJjYy5iCQlub3RfcnAJCQkjIHRvIGExCisJbGVhLmwJCVBURU5SUCglcGMpLCVhMQkJIyBpdCBpcyBSUAorCWJyYS5iCQljYWxjX3AJCQkjIGdvIHRvIGluaXQgc2VjdGlvbgorbm90X3JwOgorCWFzci5sCQkmMSwlZDAJCQkjIGtlZXAgY2hlY2tpbmcKKwliY2MuYgkJbm90X3JtCisJbGVhLmwJCVBURU5STSglcGMpLCVhMQkJIyBpdCBpcyBSTQorCWJyYS5iCQljYWxjX3AJCQkjIGdvIHRvIGluaXQgc2VjdGlvbgorbm90X3JtOgorCWxlYS5sCQlQVEVOUk4oJXBjKSwlYTEJCSMgaXQgaXMgUk4KK2NhbGNfcDoKKwltb3YubAkJJWQxLCVkMAkJCSMgY29weSBleHAgdG8gZDA7dXNlIGQwCisJYnBsLmIJCW5vX25lZwkJCSMgaWYgZXhwIGlzIG5lZ2F0aXZlLAorCW5lZy5sCQklZDAJCQkjIGludmVydCBpdAorCW9yLmwJCSYweDQwMDAwMDAwLCglYTApCSMgYW5kIHNldCBTRSBiaXQKK25vX25lZzoKKwljbHIubAkJJWQzCQkJIyB0YWJsZSBpbmRleAorCWZtb3YucwkJJjB4M2Y4MDAwMDAsJWZwMQkjIGluaXQgZnAxIHRvIDEKK2VfbG9vcDoKKwlhc3IubAkJJjEsJWQwCQkJIyBzaGlmdCBuZXh0IGJpdCBpbnRvIGNhcnJ5CisJYmNjLmIJCWVfbmV4dAkJCSMgaWYgemVybywgc2tpcCB0aGUgbXVsCisJZm11bC54CQkoJWExLCVkMyksJWZwMQkJIyBtdWwgYnkgMTAqKihkM19iaXRfbm8pCitlX25leHQ6CisJYWRkLmwJCSYxMiwlZDMJCQkjIGluYyBkMyB0byBuZXh0IHJ0YWJsZSBlbnRyeQorCXRzdC5sCQklZDAJCQkjIGNoZWNrIGlmIGQwIGlzIHplcm8KKwlibmUuYgkJZV9sb29wCQkJIyBub3QgemVybywgY29udGludWUgc2hpZnRpbmcKKyMKKyMKKyMgIENoZWNrIHRoZSBzaWduIG9mIHRoZSBhZGp1c3RlZCBleHAgYW5kIG1ha2UgdGhlIHZhbHVlIGluIGZwMCB0aGUKKyMgIHNhbWUgc2lnbi4gSWYgdGhlIGV4cCB3YXMgcG9zIHRoZW4gbXVsdGlwbHkgZnAxKmZwMDsKKyMgIGVsc2UgZGl2aWRlIGZwMC9mcDEuCisjCisjIFJlZ2lzdGVyIFVzYWdlOgorIyAgbm9ybToKKyMJKCApICBhMDogcG9pbnRlciB0byB3b3JraW5nIGJjZCB2YWx1ZQorIwkoKikgZnAwOiBtYW50aXNzYSBhY2N1bXVsYXRvcgorIwkoICkgZnAxOiBzY2FsaW5nIGZhY3RvciAtIDEwKiooYWJzKGV4cCkpCisjCitwbm9ybToKKwlidHN0CQkmMzAsKCVhMCkJCSMgdGVzdCB0aGUgc2lnbiBvZiB0aGUgZXhwb25lbnQKKwliZXEuYgkJbXVsCQkJIyBpZiBjbGVhciwgZ28gdG8gbXVsdGlwbHkKK2RpdjoKKwlmZGl2LngJCSVmcDEsJWZwMAkJIyBleHAgaXMgbmVnYXRpdmUsIHNvIGRpdmlkZSBtYW50IGJ5IGV4cAorCWJyYS5iCQllbmRfZGVjCittdWw6CisJZm11bC54CQklZnAxLCVmcDAJCSMgZXhwIGlzIHBvc2l0aXZlLCBzbyBtdWx0aXBseSBieSBleHAKKyMKKyMKKyMgQ2xlYW4gdXAgYW5kIHJldHVybiB3aXRoIHJlc3VsdCBpbiBmcDAuCisjCisjIElmIHRoZSBmaW5hbCBtdWwvZGl2IGluIGRlY2JpbiBpbmN1cnJlZCBhbiBpbmV4IGV4Y2VwdGlvbiwKKyMgaXQgd2lsbCBiZSBpbmV4MiwgYnV0IHdpbGwgYmUgcmVwb3J0ZWQgYXMgaW5leDEgYnkgZ2V0X29wLgorIworZW5kX2RlYzoKKwlmbW92LmwJCSVmcHNyLCVkMAkJIyBnZXQgc3RhdHVzIHJlZ2lzdGVyCisJYmNscgkJJmluZXgyX2JpdCs4LCVkMAkjIHRlc3QgZm9yIGluZXgyIGFuZCBjbGVhciBpdAorCWJlcS5iCQlub19leGMJCQkjIHNraXAgdGhpcyBpZiBubyBleGMKKwlvcmkudwkJJmlueDFhX21hc2ssMitVU0VSX0ZQU1IoJWE2KSAjIHNldCBJTkVYMS9BSU5FWAorbm9fZXhjOgorCWFkZC5sCQkmMHg0LCVzcAkJIyBjbGVhciAxIGx3IHBhcmFtCisJZm1vdm0ueAkJKCVzcCkrLCYweDQwCQkjIHJlc3RvcmUgZnAxCisJbW92bS5sCQkoJXNwKSssJjB4M2MJCSMgcmVzdG9yZSBkMi1kNQorCWZtb3YubAkJJjB4MCwlZnBjcgorCWZtb3YubAkJJjB4MCwlZnBzcgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGJpbmRlYygpOiBDb252ZXJ0cyBhbiBpbnB1dCBpbiBleHRlbmRlZCBwcmVjaXNpb24gZm9ybWF0IHRvIGJjZCBmb3JtYXQjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gdGhlIGlucHV0IGV4dGVuZGVkIHByZWNpc2lvbiB2YWx1ZSBpbiBtZW1vcnkuCSMKKyMJICAgICB0aGUgaW5wdXQgbWF5IGJlIGVpdGhlciBub3JtYWxpemVkLCB1bm5vcm1hbGl6ZWQsIG9yCSMKKyMJICAgICBkZW5vcm1hbGl6ZWQuCQkJCQkJIworIwlkMCA9IGNvbnRhaW5zIHRoZSBrLWZhY3RvciBzaWduLWV4dGVuZGVkIHRvIDMyLWJpdHMuCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGUF9TQ1IwKGE2KSA9IGJjZCBmb3JtYXQgcmVzdWx0IG9uIHRoZSBzdGFjay4JCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkJCQkJCQkJCSMKKyMJQTEuCVNldCBSTSBhbmQgc2l6ZSBleHQ7ICBTZXQgU0lHTUEgPSBzaWduIG9mIGlucHV0LgkjCisjCQlUaGUgay1mYWN0b3IgaXMgc2F2ZWQgZm9yIHVzZSBpbiBkNy4gQ2xlYXIgdGhlCQkjCisjCQlCSU5ERUNfRkxHIGZvciBzZXBhcmF0aW5nIG5vcm1hbGl6ZWQvZGVub3JtYWxpemVkCSMKKyMJCWlucHV0LiAgSWYgaW5wdXQgaXMgdW5ub3JtYWxpemVkIG9yIGRlbm9ybWFsaXplZCwJIworIwkJbm9ybWFsaXplIGl0LgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCUEyLglTZXQgWCA9IGFicyhpbnB1dCkuCQkJCQkjCisjCQkJCQkJCQkJIworIwlBMy4JQ29tcHV0ZSBJTE9HLgkJCQkJCSMKKyMJCUlMT0cgaXMgdGhlIGxvZyBiYXNlIDEwIG9mIHRoZSBpbnB1dCB2YWx1ZS4gIEl0IGlzCSMKKyMJCWFwcHJveGltYXRlZCBieSBhZGRpbmcgZSArIDAuZiB3aGVuIHRoZSBvcmlnaW5hbAkjCisjCQl2YWx1ZSBpcyB2aWV3ZWQgYXMgMl5eZSAqIDEuZiBpbiBleHRlbmRlZCBwcmVjaXNpb24uCSMKKyMJCVRoaXMgdmFsdWUgaXMgc3RvcmVkIGluIGQ2LgkJCQkjCisjCQkJCQkJCQkJIworIwlBNC4JQ2xyIElORVggYml0LgkJCQkJCSMKKyMJCVRoZSBvcGVyYXRpb24gaW4gQTMgYWJvdmUgbWF5IGhhdmUgc2V0IElORVgyLgkJIworIwkJCQkJCQkJCSMKKyMJQTUuCVNldCBJQ1RSID0gMDsJCQkJCQkjCisjCQlJQ1RSIGlzIGEgZmxhZyB1c2VkIGluIEExMy4gIEl0IG11c3QgYmUgc2V0IGJlZm9yZSB0aGUJIworIwkJbG9vcCBlbnRyeSBBNi4JCQkJCQkjCisjCQkJCQkJCQkJIworIwlBNi4JQ2FsY3VsYXRlIExFTi4JCQkJCQkjCisjCQlMRU4gaXMgdGhlIG51bWJlciBvZiBkaWdpdHMgdG8gYmUgZGlzcGxheWVkLiAgVGhlCSMKKyMJCWstZmFjdG9yIGNhbiBkaWN0YXRlIGVpdGhlciB0aGUgdG90YWwgbnVtYmVyIG9mIGRpZ2l0cywJIworIwkJaWYgaXQgaXMgYSBwb3NpdGl2ZSBudW1iZXIsIG9yIHRoZSBudW1iZXIgb2YgZGlnaXRzCSMKKyMJCWFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IHdoaWNoIGFyZSB0byBiZSBpbmNsdWRlZCBhcwkjCisjCQlzaWduaWZpY2FudC4gIFNlZSB0aGUgNjg4ODIgbWFudWFsIGZvciBleGFtcGxlcy4JIworIwkJSWYgTEVOIGlzIGNvbXB1dGVkIHRvIGJlIGdyZWF0ZXIgdGhhbiAxNywgc2V0IE9QRVJSIGluCSMKKyMJCVVTRVJfRlBTUi4gIExFTiBpcyBzdG9yZWQgaW4gZDQuCQkJIworIwkJCQkJCQkJCSMKKyMJQTcuCUNhbGN1bGF0ZSBTQ0FMRS4JCQkJCSMKKyMJCVNDQUxFIGlzIGVxdWFsIHRvIDEwXklTQ0FMRSwgd2hlcmUgSVNDQUxFIGlzIHRoZSBudW1iZXIJIworIwkJb2YgZGVjaW1hbCBwbGFjZXMgbmVlZGVkIHRvIGluc3VyZSBMRU4gaW50ZWdlciBkaWdpdHMJIworIwkJaW4gdGhlIG91dHB1dCBiZWZvcmUgY29udmVyc2lvbiB0byBiY2QuIExBTUJEQSBpcyB0aGUJIworIwkJc2lnbiBvZiBJU0NBTEUsIHVzZWQgaW4gQTkuIEZwMSBjb250YWlucwkJIworIwkJMTBeXihhYnMoSVNDQUxFKSkgdXNpbmcgYSByb3VuZGluZyBtb2RlIHdoaWNoIGlzIGEJIworIwkJZnVuY3Rpb24gb2YgdGhlIG9yaWdpbmFsIHJvdW5kaW5nIG1vZGUgYW5kIHRoZSBzaWducwkjCisjCQlvZiBJU0NBTEUgYW5kIFguICBBIHRhYmxlIGlzIGdpdmVuIGluIHRoZSBjb2RlLgkJIworIwkJCQkJCQkJCSMKKyMJQTguCUNsciBJTkVYOyBGb3JjZSBSWi4JCQkJCSMKKyMJCVRoZSBvcGVyYXRpb24gaW4gQTMgYWJvdmUgbWF5IGhhdmUgc2V0IElORVgyLgkJIworIwkJUlogbW9kZSBpcyBmb3JjZWQgZm9yIHRoZSBzY2FsaW5nIG9wZXJhdGlvbiB0byBpbnN1cmUJIworIwkJb25seSBvbmUgcm91bmRpbmcgZXJyb3IuICBUaGUgZ3JzIGJpdHMgYXJlIGNvbGxlY3RlZCBpbiAjCisjCQl0aGUgSU5FWCBmbGFnIGZvciB1c2UgaW4gQTEwLgkJCQkjCisjCQkJCQkJCQkJIworIwlBOS4JU2NhbGUgWCAtPiBZLgkJCQkJCSMKKyMJCVRoZSBtYW50aXNzYSBpcyBzY2FsZWQgdG8gdGhlIGRlc2lyZWQgbnVtYmVyIG9mCQkjCisjCQlzaWduaWZpY2FudCBkaWdpdHMuICBUaGUgZXhjZXNzIGRpZ2l0cyBhcmUgY29sbGVjdGVkCSMKKyMJCWluIElORVgyLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCUExMC4JT3IgaW4gSU5FWC4JCQkJCQkjCisjCQlJZiBJTkVYIGlzIHNldCwgcm91bmQgZXJyb3Igb2NjdXJyZWQuICBUaGlzIGlzCQkjCisjCQljb21wZW5zYXRlZCBmb3IgYnkgJ29yLWluZycgaW4gdGhlIElORVgyIGZsYWcgdG8JIworIwkJdGhlIGxzYiBvZiBZLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCUExMS4JUmVzdG9yZSBvcmlnaW5hbCBGUENSOyBzZXQgc2l6ZSBleHQuCQkJIworIwkJUGVyZm9ybSBGSU5UIG9wZXJhdGlvbiBpbiB0aGUgdXNlcidzIHJvdW5kaW5nIG1vZGUuCSMKKyMJCUtlZXAgdGhlIHNpemUgdG8gZXh0ZW5kZWQuCQkJCSMKKyMJCQkJCQkJCQkjCisjCUExMi4JQ2FsY3VsYXRlIFlJTlQgPSBGSU5UKFkpIGFjY29yZGluZyB0byB1c2VyJ3Mgcm91bmRpbmcJIworIwkJbW9kZS4gIFRoZSBGUFNQIHJvdXRpbmUgc2ludGQwIGlzIHVzZWQuICBUaGUgb3V0cHV0CSMKKyMJCWlzIGluIGZwMC4JCQkJCQkjCisjCQkJCQkJCQkJIworIwlBMTMuCUNoZWNrIGZvciBMRU4gZGlnaXRzLgkJCQkJIworIwkJSWYgdGhlIGludCBvcGVyYXRpb24gcmVzdWx0cyBpbiBtb3JlIHRoYW4gTEVOIGRpZ2l0cywJIworIwkJb3IgbGVzcyB0aGFuIExFTiAtMSBkaWdpdHMsIGFkanVzdCBJTE9HIGFuZCByZXBlYXQgZnJvbQkjCisjCQlBNi4gIFRoaXMgdGVzdCBvY2N1cnMgb25seSBvbiB0aGUgZmlyc3QgcGFzcy4gIElmIHRoZQkjCisjCQlyZXN1bHQgaXMgZXhhY3RseSAxMF5MRU4sIGRlY3JlbWVudCBJTE9HIGFuZCBkaXZpZGUJIworIwkJdGhlIG1hbnRpc3NhIGJ5IDEwLgkJCQkJIworIwkJCQkJCQkJCSMKKyMJQTE0LglDb252ZXJ0IHRoZSBtYW50aXNzYSB0byBiY2QuCQkJCSMKKyMJCVRoZSBiaW5zdHIgcm91dGluZSBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlIExFTiBkaWdpdAkjCisjCQltYW50aXNzYSB0byBiY2QgaW4gbWVtb3J5LiAgVGhlIGlucHV0IHRvIGJpbnN0ciBpcwkjCisjCQl0byBiZSBhIGZyYWN0aW9uOyBpLmUuIChtYW50aXNzYSkvMTBeTEVOIGFuZCBhZGp1c3RlZAkjCisjCQlzdWNoIHRoYXQgdGhlIGRlY2ltYWwgcG9pbnQgaXMgdG8gdGhlIGxlZnQgb2YgYml0IDYzLgkjCisjCQlUaGUgYmNkIGRpZ2l0cyBhcmUgc3RvcmVkIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uIGluCSMKKyMJCXRoZSBmaW5hbCBzdHJpbmcgYXJlYSBpbiBtZW1vcnkuCQkJIworIwkJCQkJCQkJCSMKKyMJQTE1LglDb252ZXJ0IHRoZSBleHBvbmVudCB0byBiY2QuCQkJCSMKKyMJCUFzIGluIEExNCBhYm92ZSwgdGhlIGV4cCBpcyBjb252ZXJ0ZWQgdG8gYmNkIGFuZCB0aGUJIworIwkJZGlnaXRzIGFyZSBzdG9yZWQgaW4gdGhlIGZpbmFsIHN0cmluZy4JCQkjCisjCQlUZXN0IHRoZSBsZW5ndGggb2YgdGhlIGZpbmFsIGV4cG9uZW50IHN0cmluZy4gIElmIHRoZQkjCisjCQlsZW5ndGggaXMgNCwgc2V0IG9wZXJyLgkJCQkJIworIwkJCQkJCQkJCSMKKyMJQTE2LglXcml0ZSBzaWduIGJpdHMgdG8gZmluYWwgc3RyaW5nLgkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3NldAlCSU5ERUNfRkxHLAlFWENfVEVNUAkjIERFTk9STSBmbGFnCisKKyMgQ29uc3RhbnRzIGluIGV4dGVuZGVkIHByZWNpc2lvbgorUExPRzI6CisJbG9uZwkJMHgzRkZEMDAwMCwweDlBMjA5QTg0LDB4RkJDRkY3OTgsMHgwMDAwMDAwMAorUExPRzJVUDE6CisJbG9uZwkJMHgzRkZEMDAwMCwweDlBMjA5QTg0LDB4RkJDRkY3OTksMHgwMDAwMDAwMAorCisjIENvbnN0YW50cyBpbiBzaW5nbGUgcHJlY2lzaW9uCitGT05FOgorCWxvbmcJCTB4M0Y4MDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK0ZUV086CisJbG9uZwkJMHg0MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorRlRFTjoKKwlsb25nCQkweDQxMjAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCitGNDkzMzoKKwlsb25nCQkweDQ1OUEyODAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisKK1JCRFRCTDoKKwlieXRlCQkwLDAsMCwwCisJYnl0ZQkJMywzLDIsMgorCWJ5dGUJCTMsMiwyLDMKKwlieXRlCQkyLDMsMywyCisKKyMJSW1wbGVtZW50YXRpb24gTm90ZXM6CisjCisjCVRoZSByZWdpc3RlcnMgYXJlIHVzZWQgYXMgZm9sbG93czoKKyMKKyMJCWQwOiBzY3JhdGNoOyBMRU4gaW5wdXQgdG8gYmluc3RyCisjCQlkMTogc2NyYXRjaAorIwkJZDI6IHVwcGVyIDMyLWJpdHMgb2YgbWFudGlzc2EgZm9yIGJpbnN0cgorIwkJZDM6IHNjcmF0Y2g7bG93ZXIgMzItYml0cyBvZiBtYW50aXNzYSBmb3IgYmluc3RyCisjCQlkNDogTEVOCisjCQlkNTogTEFNQkRBL0lDVFIKKyMJCWQ2OiBJTE9HCisjCQlkNzogay1mYWN0b3IKKyMJCWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvZmluYWwgcmVzdWx0CisjCQlhMTogc2NyYXRjaCBwb2ludGVyCisjCQlhMjogcG9pbnRlciB0byBGUF9YOyBhYnMob3JpZ2luYWwgdmFsdWUpIGluIGV4dAorIwkJZnAwOiBzY3JhdGNoCisjCQlmcDE6IHNjcmF0Y2gKKyMJCWZwMjogc2NyYXRjaAorIwkJRl9TQ1IxOgorIwkJRl9TQ1IyOgorIwkJTF9TQ1IxOgorIwkJTF9TQ1IyOgorCisJZ2xvYmFsCQliaW5kZWMKK2JpbmRlYzoKKwltb3ZtLmwJCSYweDNmMjAsLSglc3ApCSMgIHslZDItJWQ3LyVhMn0KKwlmbW92bS54CQkmMHg3LC0oJXNwKQkjICB7JWZwMC0lZnAyfQorCisjIEExLiBTZXQgUk0gYW5kIHNpemUgZXh0LiBTZXQgU0lHTUEgPSBzaWduIGlucHV0OworIyAgICAgVGhlIGstZmFjdG9yIGlzIHNhdmVkIGZvciB1c2UgaW4gZDcuICBDbGVhciBCSU5ERUNfRkxHIGZvcgorIyAgICAgc2VwYXJhdGluZyAgbm9ybWFsaXplZC9kZW5vcm1hbGl6ZWQgaW5wdXQuICBJZiB0aGUgaW5wdXQKKyMgICAgIGlzIGEgZGVub3JtYWxpemVkIG51bWJlciwgc2V0IHRoZSBCSU5ERUNfRkxHIG1lbW9yeSB3b3JkCisjICAgICB0byBzaWduYWwgZGVub3JtLiAgSWYgdGhlIGlucHV0IGlzIHVubm9ybWFsaXplZCwgbm9ybWFsaXplCisjICAgICB0aGUgaW5wdXQgYW5kIHRlc3QgZm9yIGRlbm9ybWFsaXplZCByZXN1bHQuCisjCisJZm1vdi5sCQkmcm1fbW9kZSoweDEwLCVmcGNyCSMgc2V0IFJNIGFuZCBleHQKKwltb3YubAkJKCVhMCksTF9TQ1IyKCVhNikJIyBzYXZlIGV4cG9uZW50IGZvciBzaWduIGNoZWNrCisJbW92LmwJCSVkMCwlZDcJCSMgbW92ZSBrLWZhY3RvciB0byBkNworCisJY2xyLmIJCUJJTkRFQ19GTEcoJWE2KQkjIGNsciBub3JtL2Rlbm9ybSBmbGFnCisJY21waS5iCQlTVEFHKCVhNiksJkRFTk9STSAjIGlzIGlucHV0IGEgREVOT1JNPworCWJuZS53CQlBMl9zdHIJCSMgbm87IGlucHV0IGlzIGEgTk9STQorCisjCisjIE5vcm1hbGl6ZSB0aGUgZGVub3JtCisjCit1bl9kZV9ub3JtOgorCW1vdi53CQkoJWEwKSwlZDAKKwlhbmQudwkJJjB4N2ZmZiwlZDAJIyBzdHJpcCBzaWduIG9mIG5vcm1hbGl6ZWQgZXhwCisJbW92LmwJCTQoJWEwKSwlZDEKKwltb3YubAkJOCglYTApLCVkMgorbm9ybV9sb29wOgorCXN1Yi53CQkmMSwlZDAKKwlsc2wubAkJJjEsJWQyCisJcm94bC5sCQkmMSwlZDEKKwl0c3QubAkJJWQxCisJYmdlLmIJCW5vcm1fbG9vcAorIworIyBUZXN0IGlmIHRoZSBub3JtYWxpemVkIGlucHV0IGlzIGRlbm9ybWFsaXplZAorIworCXRzdC53CQklZDAKKwliZ3QuYgkJcG9zX2V4cAkJIyBpZiBncmVhdGVyIHRoYW4gemVybywgaXQgaXMgYSBub3JtCisJc3QJCUJJTkRFQ19GTEcoJWE2KQkjIHNldCBmbGFnIGZvciBkZW5vcm0KK3Bvc19leHA6CisJYW5kLncJCSYweDdmZmYsJWQwCSMgc3RyaXAgc2lnbiBvZiBub3JtYWxpemVkIGV4cAorCW1vdi53CQklZDAsKCVhMCkKKwltb3YubAkJJWQxLDQoJWEwKQorCW1vdi5sCQklZDIsOCglYTApCisKKyMgQTIuIFNldCBYID0gYWJzKGlucHV0KS4KKyMKK0EyX3N0cjoKKwltb3YubAkJKCVhMCksRlBfU0NSMSglYTYpCSMgbW92ZSBpbnB1dCB0byB3b3JrIHNwYWNlCisJbW92LmwJCTQoJWEwKSxGUF9TQ1IxKzQoJWE2KQkjIG1vdmUgaW5wdXQgdG8gd29yayBzcGFjZQorCW1vdi5sCQk4KCVhMCksRlBfU0NSMSs4KCVhNikJIyBtb3ZlIGlucHV0IHRvIHdvcmsgc3BhY2UKKwlhbmQubAkJJjB4N2ZmZmZmZmYsRlBfU0NSMSglYTYpCSMgY3JlYXRlIGFicyhYKQorCisjIEEzLiBDb21wdXRlIElMT0cuCisjICAgICBJTE9HIGlzIHRoZSBsb2cgYmFzZSAxMCBvZiB0aGUgaW5wdXQgdmFsdWUuICBJdCBpcyBhcHByb3gtCisjICAgICBpbWF0ZWQgYnkgYWRkaW5nIGUgKyAwLmYgd2hlbiB0aGUgb3JpZ2luYWwgdmFsdWUgaXMgdmlld2VkCisjICAgICBhcyAyXl5lICogMS5mIGluIGV4dGVuZGVkIHByZWNpc2lvbi4gIFRoaXMgdmFsdWUgaXMgc3RvcmVkCisjICAgICBpbiBkNi4KKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCUlucHV0L091dHB1dAorIwlkMDogay1mYWN0b3IvZXhwb25lbnQKKyMJZDI6IHgveAorIwlkMzogeC94CisjCWQ0OiB4L3gKKyMJZDU6IHgveAorIwlkNjogeC9JTE9HCisjCWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKKyMJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9maW5hbCByZXN1bHQKKyMJYTE6IHgveAorIwlhMjogeC94CisjCWZwMDogeC9mbG9hdChJTE9HKQorIwlmcDE6IHgveAorIwlmcDI6IHgveAorIwlGX1NDUjE6eC94CisjCUZfU0NSMjpBYnMoWCkvQWJzKFgpIHdpdGggJDNmZmYgZXhwb25lbnQKKyMJTF9TQ1IxOngveAorIwlMX1NDUjI6Zmlyc3Qgd29yZCBvZiBYIHBhY2tlZC9VbmNoYW5nZWQKKworCXRzdC5iCQlCSU5ERUNfRkxHKCVhNikJIyBjaGVjayBmb3IgZGVub3JtCisJYmVxLmIJCUEzX2NvbnQJCSMgaWYgY2xyLCBjb250aW51ZSB3aXRoIG5vcm0KKwltb3YubAkJJi00OTMzLCVkNgkjIGZvcmNlIElMT0cgPSAtNDkzMworCWJyYS5iCQlBNF9zdHIKK0EzX2NvbnQ6CisJbW92LncJCUZQX1NDUjEoJWE2KSwlZDAJIyBtb3ZlIGV4cCB0byBkMAorCW1vdi53CQkmMHgzZmZmLEZQX1NDUjEoJWE2KQkjIHJlcGxhY2UgZXhwb25lbnQgd2l0aCAweDNmZmYKKwlmbW92LngJCUZQX1NDUjEoJWE2KSwlZnAwCSMgbm93IGZwMCBoYXMgMS5mCisJc3ViLncJCSYweDNmZmYsJWQwCSMgc3RyaXAgb2ZmIGJpYXMKKwlmYWRkLncJCSVkMCwlZnAwCSMgYWRkIGluIGV4cAorCWZzdWIucwkJRk9ORSglcGMpLCVmcDAJIyBzdWJ0cmFjdCBvZmYgMS4wCisJZmJnZS53CQlwb3NfcmVzCQkjIGlmIHBvcywgYnJhbmNoCisJZm11bC54CQlQTE9HMlVQMSglcGMpLCVmcDAJIyBpZiBuZWcsIG11bCBieSBMT0cyVVAxCisJZm1vdi5sCQklZnAwLCVkNgkjIHB1dCBJTE9HIGluIGQ2IGFzIGEgbHdvcmQKKwlicmEuYgkJQTRfc3RyCQkjIGdvIG1vdmUgb3V0IElMT0cKK3Bvc19yZXM6CisJZm11bC54CQlQTE9HMiglcGMpLCVmcDAJIyBpZiBwb3MsIG11bCBieSBMT0cyCisJZm1vdi5sCQklZnAwLCVkNgkjIHB1dCBJTE9HIGluIGQ2IGFzIGEgbHdvcmQKKworCisjIEE0LiBDbHIgSU5FWCBiaXQuCisjICAgICBUaGUgb3BlcmF0aW9uIGluIEEzIGFib3ZlIG1heSBoYXZlIHNldCBJTkVYMi4KKworQTRfc3RyOgorCWZtb3YubAkJJjAsJWZwc3IJIyB6ZXJvIGFsbCBvZiBmcHNyIC0gbm90aGluZyBuZWVkZWQKKworCisjIEE1LiBTZXQgSUNUUiA9IDA7CisjICAgICBJQ1RSIGlzIGEgZmxhZyB1c2VkIGluIEExMy4gIEl0IG11c3QgYmUgc2V0IGJlZm9yZSB0aGUKKyMgICAgIGxvb3AgZW50cnkgQTYuIFRoZSBsb3dlciB3b3JkIG9mIGQ1IGlzIHVzZWQgZm9yIElDVFIuCisKKwljbHIudwkJJWQ1CQkjIGNsZWFyIElDVFIKKworIyBBNi4gQ2FsY3VsYXRlIExFTi4KKyMgICAgIExFTiBpcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyB0byBiZSBkaXNwbGF5ZWQuICBUaGUgay1mYWN0b3IKKyMgICAgIGNhbiBkaWN0YXRlIGVpdGhlciB0aGUgdG90YWwgbnVtYmVyIG9mIGRpZ2l0cywgaWYgaXQgaXMKKyMgICAgIGEgcG9zaXRpdmUgbnVtYmVyLCBvciB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUKKyMgICAgIG9yaWdpbmFsIGRlY2ltYWwgcG9pbnQgd2hpY2ggYXJlIHRvIGJlIGluY2x1ZGVkIGFzCisjICAgICBzaWduaWZpY2FudC4gIFNlZSB0aGUgNjg4ODIgbWFudWFsIGZvciBleGFtcGxlcy4KKyMgICAgIElmIExFTiBpcyBjb21wdXRlZCB0byBiZSBncmVhdGVyIHRoYW4gMTcsIHNldCBPUEVSUiBpbgorIyAgICAgVVNFUl9GUFNSLiAgTEVOIGlzIHN0b3JlZCBpbiBkNC4KKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCUlucHV0L091dHB1dAorIwlkMDogZXhwb25lbnQvVW5jaGFuZ2VkCisjCWQyOiB4L3gvc2NyYXRjaAorIwlkMzogeC94CisjCWQ0OiBleGMgcGljdHVyZS9MRU4KKyMJZDU6IElDVFIvVW5jaGFuZ2VkCisjCWQ2OiBJTE9HL1VuY2hhbmdlZAorIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCisjCWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvZmluYWwgcmVzdWx0CisjCWExOiB4L3gKKyMJYTI6IHgveAorIwlmcDA6IGZsb2F0KElMT0cpL1VuY2hhbmdlZAorIwlmcDE6IHgveAorIwlmcDI6IHgveAorIwlGX1NDUjE6eC94CisjCUZfU0NSMjpBYnMoWCkgd2l0aCAkM2ZmZiBleHBvbmVudC9VbmNoYW5nZWQKKyMJTF9TQ1IxOngveAorIwlMX1NDUjI6Zmlyc3Qgd29yZCBvZiBYIHBhY2tlZC9VbmNoYW5nZWQKKworQTZfc3RyOgorCXRzdC5sCQklZDcJCSMgYnJhbmNoIG9uIHNpZ24gb2YgaworCWJsZS5iCQlrX25lZwkJIyBpZiBrIDw9IDAsIExFTiA9IElMT0cgKyAxIC0gaworCW1vdi5sCQklZDcsJWQ0CQkjIGlmIGsgPiAwLCBMRU4gPSBrCisJYnJhLmIJCWxlbl9jawkJIyBza2lwIHRvIExFTiBjaGVjawora19uZWc6CisJbW92LmwJCSVkNiwlZDQJCSMgZmlyc3QgbG9hZCBJTE9HIHRvIGQ0CisJc3ViLmwJCSVkNywlZDQJCSMgc3VidHJhY3Qgb2ZmIGsKKwlhZGRxLmwJCSYxLCVkNAkJIyBhZGQgaW4gdGhlIDEKK2xlbl9jazoKKwl0c3QubAkJJWQ0CQkjIExFTiBjaGVjazogYnJhbmNoIG9uIHNpZ24gb2YgTEVOCisJYmxlLmIJCUxFTl9uZwkJIyBpZiBuZWcsIHNldCBMRU4gPSAxCisJY21wLmwJCSVkNCwmMTcJCSMgdGVzdCBpZiBMRU4gPiAxNworCWJsZS5iCQlBN19zdHIJCSMgaWYgbm90LCBmb3JnZXQgaXQKKwltb3YubAkJJjE3LCVkNAkJIyBzZXQgbWF4IExFTiA9IDE3CisJdHN0LmwJCSVkNwkJIyBpZiBuZWdhdGl2ZSwgbmV2ZXIgc2V0IE9QRVJSCisJYmxlLmIJCUE3X3N0cgkJIyBpZiBwb3NpdGl2ZSwgY29udGludWUKKwlvci5sCQkmb3Bhb3BfbWFzayxVU0VSX0ZQU1IoJWE2KQkjIHNldCBPUEVSUiAmIEFJT1AgaW4gVVNFUl9GUFNSCisJYnJhLmIJCUE3X3N0cgkJIyBmaW5pc2hlZCBoZXJlCitMRU5fbmc6CisJbW92LmwJCSYxLCVkNAkJIyBtaW4gTEVOIGlzIDEKKworCisjIEE3LiBDYWxjdWxhdGUgU0NBTEUuCisjICAgICBTQ0FMRSBpcyBlcXVhbCB0byAxMF5JU0NBTEUsIHdoZXJlIElTQ0FMRSBpcyB0aGUgbnVtYmVyCisjICAgICBvZiBkZWNpbWFsIHBsYWNlcyBuZWVkZWQgdG8gaW5zdXJlIExFTiBpbnRlZ2VyIGRpZ2l0cworIyAgICAgaW4gdGhlIG91dHB1dCBiZWZvcmUgY29udmVyc2lvbiB0byBiY2QuIExBTUJEQSBpcyB0aGUgc2lnbgorIyAgICAgb2YgSVNDQUxFLCB1c2VkIGluIEE5LiAgRnAxIGNvbnRhaW5zIDEwXl4oYWJzKElTQ0FMRSkpIHVzaW5nCisjICAgICB0aGUgcm91bmRpbmcgbW9kZSBhcyBnaXZlbiBpbiB0aGUgZm9sbG93aW5nIHRhYmxlIChzZWUKKyMgICAgIENvb25lbiwgcC4gNy4yMyBhcyByZWYuOyBob3dldmVyLCB0aGUgU0NBTEUgdmFyaWFibGUgaXMKKyMgICAgIG9mIG9wcG9zaXRlIHNpZ24gaW4gYmluZGVjLnNhIGZyb20gQ29vbmVuKS4KKyMKKyMJSW5pdGlhbAkJCQkJVVNFCisjCUZQQ1JbNjo1XQlMQU1CREEJU0lHTihYKQkJRlBDUls2OjVdCisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJIFJOCTAwCSAgIDAJICAgMAkJMDAvMAlSTgorIwkgUk4JMDAJICAgMAkgICAxCQkwMC8wCVJOCisjCSBSTgkwMAkgICAxCSAgIDAJCTAwLzAJUk4KKyMJIFJOCTAwCSAgIDEJICAgMQkJMDAvMAlSTgorIwkgUloJMDEJICAgMAkgICAwCQkxMS8zCVJQCisjCSBSWgkwMQkgICAwCSAgIDEJCTExLzMJUlAKKyMJIFJaCTAxCSAgIDEJICAgMAkJMTAvMglSTQorIwkgUloJMDEJICAgMQkgICAxCQkxMC8yCVJNCisjCSBSTQkxMAkgICAwCSAgIDAJCTExLzMJUlAKKyMJIFJNCTEwCSAgIDAJICAgMQkJMTAvMglSTQorIwkgUk0JMTAJICAgMQkgICAwCQkxMC8yCVJNCisjCSBSTQkxMAkgICAxCSAgIDEJCTExLzMJUlAKKyMJIFJQCTExCSAgIDAJICAgMAkJMTAvMglSTQorIwkgUlAJMTEJICAgMAkgICAxCQkxMS8zCVJQCisjCSBSUAkxMQkgICAxCSAgIDAJCTExLzMJUlAKKyMJIFJQCTExCSAgIDEJICAgMQkJMTAvMglSTQorIworIyBSZWdpc3RlciB1c2FnZToKKyMJSW5wdXQvT3V0cHV0CisjCWQwOiBleHBvbmVudC9zY3JhdGNoIC0gZmluYWwgaXMgMAorIwlkMjogeC8wIG9yIDI0IGZvciBBOQorIwlkMzogeC9zY3JhdGNoIC0gb2Zmc2V0IHB0ciBpbnRvIFBURU5STSBhcnJheQorIwlkNDogTEVOL1VuY2hhbmdlZAorIwlkNTogMC9JQ1RSOkxBTUJEQQorIwlkNjogSUxPRy9JTE9HIG9yIGsgaWYgKChrPD0wKSYoSUxPRzxrKSkKKyMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAorIwlhMDogcHRyIGZvciBvcmlnaW5hbCBvcGVyYW5kL2ZpbmFsIHJlc3VsdAorIwlhMTogeC9wdHIgdG8gUFRFTlJNIGFycmF5CisjCWEyOiB4L3gKKyMJZnAwOiBmbG9hdChJTE9HKS9VbmNoYW5nZWQKKyMJZnAxOiB4LzEwXklTQ0FMRQorIwlmcDI6IHgveAorIwlGX1NDUjE6eC94CisjCUZfU0NSMjpBYnMoWCkgd2l0aCAkM2ZmZiBleHBvbmVudC9VbmNoYW5nZWQKKyMJTF9TQ1IxOngveAorIwlMX1NDUjI6Zmlyc3Qgd29yZCBvZiBYIHBhY2tlZC9VbmNoYW5nZWQKKworQTdfc3RyOgorCXRzdC5sCQklZDcJCSMgdGVzdCBzaWduIG9mIGsKKwliZ3QuYgkJa19wb3MJCSMgaWYgcG9zIGFuZCA+IDAsIHNraXAgdGhpcworCWNtcC5sCQklZDcsJWQ2CQkjIHRlc3QgayAtIElMT0cKKwlibHQuYgkJa19wb3MJCSMgaWYgSUxPRyA+PSBrLCBza2lwIHRoaXMKKwltb3YubAkJJWQ3LCVkNgkJIyBpZiAoKGs8MCkgJiAoSUxPRyA8IGspKSBJTE9HID0gawora19wb3M6CisJbW92LmwJCSVkNiwlZDAJCSMgY2FsYyBJTE9HICsgMSAtIExFTiBpbiBkMAorCWFkZHEubAkJJjEsJWQwCQkjIGFkZCB0aGUgMQorCXN1Yi5sCQklZDQsJWQwCQkjIHN1YiBvZmYgTEVOCisJc3dhcAkJJWQ1CQkjIHVzZSB1cHBlciB3b3JkIG9mIGQ1IGZvciBMQU1CREEKKwljbHIudwkJJWQ1CQkjIHNldCBpdCB6ZXJvIGluaXRpYWxseQorCWNsci53CQklZDIJCSMgc2V0IHVwIGQyIGZvciB2ZXJ5IHNtYWxsIGNhc2UKKwl0c3QubAkJJWQwCQkjIHRlc3Qgc2lnbiBvZiBJU0NBTEUKKwliZ2UuYgkJaXNjYWxlCQkjIGlmIHBvcywgc2tpcCBuZXh0IGluc3QKKwlhZGRxLncJCSYxLCVkNQkJIyBpZiBuZWcsIHNldCBMQU1CREEgdHJ1ZQorCWNtcC5sCQklZDAsJjB4ZmZmZmVjZDQJIyB0ZXN0IGlzY2FsZSA8PSAtNDkwOAorCWJndC5iCQlub19pbmYJCSMgaWYgZmFsc2UsIHNraXAgcmVzdAorCWFkZC5sCQkmMjQsJWQwCQkjIGFkZCBpbiAyNCB0byBpc2NhbGUKKwltb3YubAkJJjI0LCVkMgkJIyBwdXQgMjQgaW4gZDIgZm9yIEE5Citub19pbmY6CisJbmVnLmwJCSVkMAkJIyBhbmQgdGFrZSBhYnMgb2YgSVNDQUxFCitpc2NhbGU6CisJZm1vdi5zCQlGT05FKCVwYyksJWZwMQkjIGluaXQgZnAxIHRvIDEKKwliZmV4dHUJCVVTRVJfRlBDUiglYTYpeyYyNjomMn0sJWQxCSMgZ2V0IGluaXRpYWwgcm1vZGUgYml0cworCWxzbC53CQkmMSwlZDEJCSMgcHV0IHRoZW0gaW4gYml0cyAyOjEKKwlhZGQudwkJJWQ1LCVkMQkJIyBhZGQgaW4gTEFNQkRBCisJbHNsLncJCSYxLCVkMQkJIyBwdXQgdGhlbSBpbiBiaXRzIDM6MQorCXRzdC5sCQlMX1NDUjIoJWE2KQkjIHRlc3Qgc2lnbiBvZiBvcmlnaW5hbCB4CisJYmdlLmIJCXhfcG9zCQkjIGlmIHBvcywgZG9uJ3Qgc2V0IGJpdCAwCisJYWRkcS5sCQkmMSwlZDEJCSMgaWYgbmVnLCBzZXQgYml0IDAKK3hfcG9zOgorCWxlYS5sCQlSQkRUQkwoJXBjKSwlYTIJIyBsb2FkIHJiZHRibCBiYXNlCisJbW92LmIJCSglYTIsJWQxKSwlZDMJIyBsb2FkIGQzIHdpdGggbmV3IHJtb2RlCisJbHNsLmwJCSY0LCVkMwkJIyBwdXQgYml0cyBpbiBwcm9wZXIgcG9zaXRpb24KKwlmbW92LmwJCSVkMywlZnBjcgkjIGxvYWQgYml0cyBpbnRvIGZwdQorCWxzci5sCQkmNCwlZDMJCSMgcHV0IGJpdHMgaW4gcHJvcGVyIHBvc2l0aW9uCisJdHN0LmIJCSVkMwkJIyBkZWNvZGUgbmV3IHJtb2RlIGZvciBwdGVuIHRhYmxlCisJYm5lLmIJCW5vdF9ybgkJIyBpZiB6ZXJvLCBpdCBpcyBSTgorCWxlYS5sCQlQVEVOUk4oJXBjKSwlYTEJIyBsb2FkIGExIHdpdGggUk4gdGFibGUgYmFzZQorCWJyYS5iCQlybW9kZQkJIyBleGl0IGRlY29kZQorbm90X3JuOgorCWxzci5iCQkmMSwlZDMJCSMgZ2V0IGxzYiBpbiBjYXJyeQorCWJjYy5iCQlub3RfcnAyCQkjIGlmIGNhcnJ5IGNsZWFyLCBpdCBpcyBSTQorCWxlYS5sCQlQVEVOUlAoJXBjKSwlYTEJIyBsb2FkIGExIHdpdGggUlAgdGFibGUgYmFzZQorCWJyYS5iCQlybW9kZQkJIyBleGl0IGRlY29kZQorbm90X3JwMjoKKwlsZWEubAkJUFRFTlJNKCVwYyksJWExCSMgbG9hZCBhMSB3aXRoIFJNIHRhYmxlIGJhc2UKK3Jtb2RlOgorCWNsci5sCQklZDMJCSMgY2xyIHRhYmxlIGluZGV4CitlX2xvb3AyOgorCWxzci5sCQkmMSwlZDAJCSMgc2hpZnQgbmV4dCBiaXQgaW50byBjYXJyeQorCWJjYy5iCQllX25leHQyCQkjIGlmIHplcm8sIHNraXAgdGhlIG11bAorCWZtdWwueAkJKCVhMSwlZDMpLCVmcDEJIyBtdWwgYnkgMTAqKihkM19iaXRfbm8pCitlX25leHQyOgorCWFkZC5sCQkmMTIsJWQzCQkjIGluYyBkMyB0byBuZXh0IHB3cnRlbiB0YWJsZSBlbnRyeQorCXRzdC5sCQklZDAJCSMgdGVzdCBpZiBJU0NBTEUgaXMgemVybworCWJuZS5iCQllX2xvb3AyCQkjIGlmIG5vdCwgbG9vcAorCisjIEE4LiBDbHIgSU5FWDsgRm9yY2UgUlouCisjICAgICBUaGUgb3BlcmF0aW9uIGluIEEzIGFib3ZlIG1heSBoYXZlIHNldCBJTkVYMi4KKyMgICAgIFJaIG1vZGUgaXMgZm9yY2VkIGZvciB0aGUgc2NhbGluZyBvcGVyYXRpb24gdG8gaW5zdXJlCisjICAgICBvbmx5IG9uZSByb3VuZGluZyBlcnJvci4gIFRoZSBncnMgYml0cyBhcmUgY29sbGVjdGVkIGluCisjICAgICB0aGUgSU5FWCBmbGFnIGZvciB1c2UgaW4gQTEwLgorIworIyBSZWdpc3RlciB1c2FnZToKKyMJSW5wdXQvT3V0cHV0CisKKwlmbW92LmwJCSYwLCVmcHNyCSMgY2xyIElORVgKKwlmbW92LmwJCSZyel9tb2RlKjB4MTAsJWZwY3IJIyBzZXQgUlogcm91bmRpbmcgbW9kZQorCisjIEE5LiBTY2FsZSBYIC0+IFkuCisjICAgICBUaGUgbWFudGlzc2EgaXMgc2NhbGVkIHRvIHRoZSBkZXNpcmVkIG51bWJlciBvZiBzaWduaWZpY2FudAorIyAgICAgZGlnaXRzLiAgVGhlIGV4Y2VzcyBkaWdpdHMgYXJlIGNvbGxlY3RlZCBpbiBJTkVYMi4gSWYgbXVsLAorIyAgICAgQ2hlY2sgZDIgZm9yIGV4Y2VzcyAxMCBleHBvbmVudGlhbCB2YWx1ZS4gIElmIG5vdCB6ZXJvLAorIyAgICAgdGhlIGlzY2FsZSB2YWx1ZSB3b3VsZCBoYXZlIGNhdXNlZCB0aGUgcHdydGVuIGNhbGN1bGF0aW9uCisjICAgICB0byBvdmVyZmxvdy4gIE9ubHkgYSBuZWdhdGl2ZSBpc2NhbGUgY2FuIGNhdXNlIHRoaXMsIHNvCisjICAgICBtdWx0aXBseSBieSAxMF4oZDIpLCB3aGljaCBpcyBub3cgb25seSBhbGxvd2VkIHRvIGJlIDI0LAorIyAgICAgd2l0aCBhIG11bHRpcGx5IGJ5IDEwXjggYW5kIDEwXjE2LCB3aGljaCBpcyBleGFjdCBzaW5jZQorIyAgICAgMTBeMjQgaXMgZXhhY3QuICBJZiB0aGUgaW5wdXQgd2FzIGRlbm9ybWFsaXplZCwgd2UgbXVzdAorIyAgICAgY3JlYXRlIGEgYnVzeSBzdGFjayBmcmFtZSB3aXRoIHRoZSBtdWwgY29tbWFuZCBhbmQgdGhlCisjICAgICB0d28gb3BlcmFuZHMsIGFuZCBhbGxvdyB0aGUgZnB1IHRvIGNvbXBsZXRlIHRoZSBtdWx0aXBseS4KKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCUlucHV0L091dHB1dAorIwlkMDogRlBDUiB3aXRoIFJaIG1vZGUvVW5jaGFuZ2VkCisjCWQyOiAwIG9yIDI0L3VuY2hhbmdlZAorIwlkMzogeC94CisjCWQ0OiBMRU4vVW5jaGFuZ2VkCisjCWQ1OiBJQ1RSOkxBTUJEQQorIwlkNjogSUxPRy9VbmNoYW5nZWQKKyMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAorIwlhMDogcHRyIGZvciBvcmlnaW5hbCBvcGVyYW5kL2ZpbmFsIHJlc3VsdAorIwlhMTogcHRyIHRvIFBURU5STSBhcnJheS9VbmNoYW5nZWQKKyMJYTI6IHgveAorIwlmcDA6IGZsb2F0KElMT0cpL1ggYWRqdXN0ZWQgZm9yIFNDQUxFIChZKQorIwlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKKyMJZnAyOiB4L3gKKyMJRl9TQ1IxOngveAorIwlGX1NDUjI6QWJzKFgpIHdpdGggJDNmZmYgZXhwb25lbnQvVW5jaGFuZ2VkCisjCUxfU0NSMTp4L3gKKyMJTF9TQ1IyOmZpcnN0IHdvcmQgb2YgWCBwYWNrZWQvVW5jaGFuZ2VkCisKK0E5X3N0cjoKKwlmbW92LngJCSglYTApLCVmcDAJIyBsb2FkIFggZnJvbSBtZW1vcnkKKwlmYWJzLngJCSVmcDAJCSMgdXNlIGFicyhYKQorCXRzdC53CQklZDUJCSMgTEFNQkRBIGlzIGluIGxvd2VyIHdvcmQgb2YgZDUKKwlibmUuYgkJc2NfbXVsCQkjIGlmIG5lZyAoTEFNQkRBID0gMSksIHNjYWxlIGJ5IG11bAorCWZkaXYueAkJJWZwMSwlZnAwCSMgY2FsY3VsYXRlIFggLyBTQ0FMRSAtPiBZIHRvIGZwMAorCWJyYS53CQlBMTBfc3QJCSMgYnJhbmNoIHRvIEExMAorCitzY19tdWw6CisJdHN0LmIJCUJJTkRFQ19GTEcoJWE2KQkjIGNoZWNrIGZvciBkZW5vcm0KKwliZXEudwkJQTlfbm9ybQkJIyBpZiBub3JtLCBjb250aW51ZSB3aXRoIG11bAorCisjIGZvciBERU5PUk0sIHdlIG11c3QgY2FsY3VsYXRlOgorIwlmcDAgPSBpbnB1dF9vcCAqIDEwXklTQ0FMRSAqIDEwXjI0CisjIHNpbmNlIHRoZSBpbnB1dCBvcGVyYW5kIGlzIGEgREVOT1JNLCB3ZSBjYW4ndCBtdWx0aXBseSBpdCBkaXJlY3RseS4KKyMgc28sIHdlIGRvIHRoZSBtdWx0aXBsaWNhdGlvbiBvZiB0aGUgZXhwb25lbnRzIGFuZCBtYW50aXNzYXMgc2VwYXJhdGVseS4KKyMgaW4gdGhpcyB3YXksIHdlIGF2b2lkIHVuZGVyZmxvdyBvbiBpbnRlcm1lZGlhdGUgc3RhZ2VzIG9mIHRoZQorIyBtdWx0aXBsaWNhdGlvbiBhbmQgZ3VhcmFudGVlIGEgcmVzdWx0IHdpdGhvdXQgZXhjZXB0aW9uLgorCWZtb3ZtLngJCSYweDIsLSglc3ApCSMgc2F2ZSAxMF5JU0NBTEUgdG8gc3RhY2sKKworCW1vdi53CQkoJXNwKSwlZDMJIyBncmFiIGV4cG9uZW50CisJYW5kaS53CQkmMHg3ZmZmLCVkMwkjIGNsZWFyIHNpZ24KKwlvcmkudwkJJjB4ODAwMCwoJWEwKQkjIG1ha2UgREVOT1JNIGV4cCBuZWdhdGl2ZQorCWFkZC53CQkoJWEwKSwlZDMJIyBhZGQgREVOT1JNIGV4cCB0byAxMF5JU0NBTEUgZXhwCisJc3ViaS53CQkmMHgzZmZmLCVkMwkjIHN1YnRyYWN0IEJJQVMKKwlhZGQudwkJMzYoJWExKSwlZDMKKwlzdWJpLncJCSYweDNmZmYsJWQzCSMgc3VidHJhY3QgQklBUworCWFkZC53CQk0OCglYTEpLCVkMworCXN1YmkudwkJJjB4M2ZmZiwlZDMJIyBzdWJ0cmFjdCBCSUFTCisKKwlibWkudwkJc2NfbXVsX2VycgkjIGlzIHJlc3VsdCBpcyBERU5PUk0sIHB1bnQhISEKKworCWFuZGkudwkJJjB4ODAwMCwoJXNwKQkjIGtlZXAgc2lnbgorCW9yLncJCSVkMywoJXNwKQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwlhbmRpLncJCSYweDdmZmYsKCVhMCkJIyBjbGVhciBzaWduIGJpdCBvbiBERU5PUk0gYWdhaW4KKwltb3YubAkJMHg4KCVhMCksLSglc3ApICMgcHV0IGlucHV0IG9wIG1hbnRpc3NhIG9uIHN0aworCW1vdi5sCQkweDQoJWEwKSwtKCVzcCkKKwltb3YubAkJJjB4M2ZmZjAwMDAsLSglc3ApICMgZm9yY2UgZXhwIHRvIHplcm8KKwlmbW92bS54CQkoJXNwKSssJjB4ODAJIyBsb2FkIG5vcm1hbGl6ZWQgREVOT1JNIGludG8gZnAwCisJZm11bC54CQkoJXNwKSssJWZwMAorCisjCWZtdWwueAkzNiglYTEpLCVmcDAJIyBtdWx0aXBseSBmcDAgYnkgMTBeOAorIwlmbXVsLngJNDgoJWExKSwlZnAwCSMgbXVsdGlwbHkgZnAwIGJ5IDEwXjE2CisJbW92LmwJCTM2KzgoJWExKSwtKCVzcCkgIyBnZXQgMTBeOCBtYW50aXNzYQorCW1vdi5sCQkzNis0KCVhMSksLSglc3ApCisJbW92LmwJCSYweDNmZmYwMDAwLC0oJXNwKSAjIGZvcmNlIGV4cCB0byB6ZXJvCisJbW92LmwJCTQ4KzgoJWExKSwtKCVzcCkgIyBnZXQgMTBeMTYgbWFudGlzc2EKKwltb3YubAkJNDgrNCglYTEpLC0oJXNwKQorCW1vdi5sCQkmMHgzZmZmMDAwMCwtKCVzcCkjIGZvcmNlIGV4cCB0byB6ZXJvCisJZm11bC54CQkoJXNwKSssJWZwMAkjIG11bHRpcGx5IGZwMCBieSAxMF44CisJZm11bC54CQkoJXNwKSssJWZwMAkjIG11bHRpcGx5IGZwMCBieSAxMF4xNgorCWJyYS5iCQlBMTBfc3QKKworc2NfbXVsX2VycjoKKwlicmEuYgkJc2NfbXVsX2VycgorCitBOV9ub3JtOgorCXRzdC53CQklZDIJCSMgdGVzdCBmb3Igc21hbGwgZXhwIGNhc2UKKwliZXEuYgkJQTlfY29uCQkjIGlmIHplcm8sIGNvbnRpbnVlIGFzIG5vcm1hbAorCWZtdWwueAkJMzYoJWExKSwlZnAwCSMgbXVsdGlwbHkgZnAwIGJ5IDEwXjgKKwlmbXVsLngJCTQ4KCVhMSksJWZwMAkjIG11bHRpcGx5IGZwMCBieSAxMF4xNgorQTlfY29uOgorCWZtdWwueAkJJWZwMSwlZnAwCSMgY2FsY3VsYXRlIFggKiBTQ0FMRSAtPiBZIHRvIGZwMAorCisjIEExMC4gT3IgaW4gSU5FWC4KKyMgICAgICBJZiBJTkVYIGlzIHNldCwgcm91bmQgZXJyb3Igb2NjdXJyZWQuICBUaGlzIGlzIGNvbXBlbnNhdGVkCisjICAgICAgZm9yIGJ5ICdvci1pbmcnIGluIHRoZSBJTkVYMiBmbGFnIHRvIHRoZSBsc2Igb2YgWS4KKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCUlucHV0L091dHB1dAorIwlkMDogRlBDUiB3aXRoIFJaIG1vZGUvRlBTUiB3aXRoIElORVgyIGlzb2xhdGVkCisjCWQyOiB4L3gKKyMJZDM6IHgveAorIwlkNDogTEVOL1VuY2hhbmdlZAorIwlkNTogSUNUUjpMQU1CREEKKyMJZDY6IElMT0cvVW5jaGFuZ2VkCisjCWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKKyMJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9maW5hbCByZXN1bHQKKyMJYTE6IHB0ciB0byBQVEVOeHggYXJyYXkvVW5jaGFuZ2VkCisjCWEyOiB4L3B0ciB0byBGUF9TQ1IxKGE2KQorIwlmcDA6IFkvWSB3aXRoIGxzYiBhZGp1c3RlZAorIwlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKKyMJZnAyOiB4L3gKKworQTEwX3N0OgorCWZtb3YubAkJJWZwc3IsJWQwCSMgZ2V0IEZQU1IKKwlmbW92LngJCSVmcDAsRlBfU0NSMSglYTYpCSMgbW92ZSBZIHRvIG1lbW9yeQorCWxlYS5sCQlGUF9TQ1IxKCVhNiksJWEyCSMgbG9hZCBhMiB3aXRoIHB0ciB0byBGUF9TQ1IxCisJYnRzdAkJJjksJWQwCQkjIGNoZWNrIGlmIElORVgyIHNldAorCWJlcS5iCQlBMTFfc3QJCSMgaWYgY2xlYXIsIHNraXAgcmVzdAorCW9yLmwJCSYxLDgoJWEyKQkjIG9yIGluIDEgdG8gbHNiIG9mIG1hbnRpc3NhCisJZm1vdi54CQlGUF9TQ1IxKCVhNiksJWZwMAkjIHdyaXRlIGFkanVzdGVkIFkgYmFjayB0byBmcHUKKworCisjIEExMS4gUmVzdG9yZSBvcmlnaW5hbCBGUENSOyBzZXQgc2l6ZSBleHQuCisjICAgICAgUGVyZm9ybSBGSU5UIG9wZXJhdGlvbiBpbiB0aGUgdXNlcidzIHJvdW5kaW5nIG1vZGUuICBLZWVwCisjICAgICAgdGhlIHNpemUgdG8gZXh0ZW5kZWQuICBUaGUgc2ludGRvIGVudHJ5IHBvaW50IGluIHRoZSBzaW50CisjICAgICAgcm91dGluZSBleHBlY3RzIHRoZSBGUENSIHZhbHVlIHRvIGJlIGluIFVTRVJfRlBDUiBmb3IKKyMgICAgICBtb2RlIGFuZCBwcmVjaXNpb24uICBUaGUgb3JpZ2luYWwgRlBDUiBpcyBzYXZlZCBpbiBMX1NDUjEuCisKK0ExMV9zdDoKKwltb3YubAkJVVNFUl9GUENSKCVhNiksTF9TQ1IxKCVhNikJIyBzYXZlIGl0IGZvciBsYXRlcgorCWFuZC5sCQkmMHgwMDAwMDAzMCxVU0VSX0ZQQ1IoJWE2KQkjIHNldCBzaXplIHRvIGV4dCwKKyMJCQkJCTtibG9jayBleGNlcHRpb25zCisKKworIyBBMTIuIENhbGN1bGF0ZSBZSU5UID0gRklOVChZKSBhY2NvcmRpbmcgdG8gdXNlcidzIHJvdW5kaW5nIG1vZGUuCisjICAgICAgVGhlIEZQU1Agcm91dGluZSBzaW50ZDAgaXMgdXNlZC4gIFRoZSBvdXRwdXQgaXMgaW4gZnAwLgorIworIyBSZWdpc3RlciB1c2FnZToKKyMJSW5wdXQvT3V0cHV0CisjCWQwOiBGUFNSIHdpdGggQUlORVggY2xlYXJlZC9GUENSIHdpdGggc2l6ZSBzZXQgdG8gZXh0CisjCWQyOiB4L3gvc2NyYXRjaAorIwlkMzogeC94CisjCWQ0OiBMRU4vVW5jaGFuZ2VkCisjCWQ1OiBJQ1RSOkxBTUJEQS9VbmNoYW5nZWQKKyMJZDY6IElMT0cvVW5jaGFuZ2VkCisjCWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKKyMJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9zcmMgcHRyIGZvciBzaW50ZG8KKyMJYTE6IHB0ciB0byBQVEVOeHggYXJyYXkvVW5jaGFuZ2VkCisjCWEyOiBwdHIgdG8gRlBfU0NSMShhNikvVW5jaGFuZ2VkCisjCWE2OiB0ZW1wIHBvaW50ZXIgdG8gRlBfU0NSMShhNikgLSBvcmlnIHZhbHVlIHNhdmVkIGFuZCByZXN0b3JlZAorIwlmcDA6IFkvWUlOVAorIwlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKKyMJZnAyOiB4L3gKKyMJRl9TQ1IxOngveAorIwlGX1NDUjI6WSBhZGp1c3RlZCBmb3IgaW5leC9ZIHdpdGggb3JpZ2luYWwgZXhwb25lbnQKKyMJTF9TQ1IxOngvb3JpZ2luYWwgVVNFUl9GUENSCisjCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBMTJfc3Q6CisJbW92bS5sCSYweGMwYzAsLSglc3ApCSMgc2F2ZSByZWdzIHVzZWQgYnkgc2ludGQwCSB7JWQwLSVkMS8lYTAtJWExfQorCW1vdi5sCUxfU0NSMSglYTYpLC0oJXNwKQorCW1vdi5sCUxfU0NSMiglYTYpLC0oJXNwKQorCisJbGVhLmwJCUZQX1NDUjEoJWE2KSwlYTAJIyBhMCBpcyBwdHIgdG8gRlBfU0NSMShhNikKKwlmbW92LngJCSVmcDAsKCVhMCkJIyBtb3ZlIFkgdG8gbWVtb3J5IGF0IEZQX1NDUjEoYTYpCisJdHN0LmwJCUxfU0NSMiglYTYpCSMgdGVzdCBzaWduIG9mIG9yaWdpbmFsIG9wZXJhbmQKKwliZ2UuYgkJZG9fZmludDEyCQkjIGlmIHBvcywgdXNlIFkKKwlvci5sCQkmMHg4MDAwMDAwMCwoJWEwKQkjIGlmIG5lZywgdXNlIC1ZCitkb19maW50MTI6CisJbW92LmwJVVNFUl9GUFNSKCVhNiksLSglc3ApCisjCWJzcglzaW50ZG8JCSMgc2ludCByb3V0aW5lIHJldHVybnMgaW50IGluIGZwMAorCisJZm1vdi5sCVVTRVJfRlBDUiglYTYpLCVmcGNyCisJZm1vdi5sCSYweDAsJWZwc3IJCQkjIGNsZWFyIHRoZSBBRVhDIGJpdHMhISEKKyMjCW1vdi5sCQlVU0VSX0ZQQ1IoJWE2KSwlZDAJIyBleHQgcHJlYy9rZWVwIHJuZCBtb2RlCisjIwlhbmRpLmwJCSYweDAwMDAwMDMwLCVkMAorIyMJZm1vdi5sCQklZDAsJWZwY3IKKwlmaW50LngJCUZQX1NDUjEoJWE2KSwlZnAwCSMgZG8gZmludCgpCisJZm1vdi5sCSVmcHNyLCVkMAorCW9yLncJJWQwLEZQU1JfRVhDRVBUKCVhNikKKyMjCWZtb3YubAkJJjB4MCwlZnBjcgorIyMJZm1vdi5sCQklZnBzciwlZDAJCSMgZG9uJ3Qga2VlcCBjY29kZXMKKyMjCW9yLncJCSVkMCxGUFNSX0VYQ0VQVCglYTYpCisKKwltb3YuYgkoJXNwKSxVU0VSX0ZQU1IoJWE2KQorCWFkZC5sCSY0LCVzcAorCisJbW92LmwJKCVzcCkrLExfU0NSMiglYTYpCisJbW92LmwJKCVzcCkrLExfU0NSMSglYTYpCisJbW92bS5sCSglc3ApKywmMHgzMDMJIyByZXN0b3JlIHJlZ3MgdXNlZCBieSBzaW50CSB7JWQwLSVkMS8lYTAtJWExfQorCisJbW92LmwJTF9TQ1IyKCVhNiksRlBfU0NSMSglYTYpCSMgcmVzdG9yZSBvcmlnaW5hbCBleHBvbmVudAorCW1vdi5sCUxfU0NSMSglYTYpLFVTRVJfRlBDUiglYTYpCSMgcmVzdG9yZSB1c2VyJ3MgRlBDUgorCisjIEExMy4gQ2hlY2sgZm9yIExFTiBkaWdpdHMuCisjICAgICAgSWYgdGhlIGludCBvcGVyYXRpb24gcmVzdWx0cyBpbiBtb3JlIHRoYW4gTEVOIGRpZ2l0cywKKyMgICAgICBvciBsZXNzIHRoYW4gTEVOIC0xIGRpZ2l0cywgYWRqdXN0IElMT0cgYW5kIHJlcGVhdCBmcm9tCisjICAgICAgQTYuICBUaGlzIHRlc3Qgb2NjdXJzIG9ubHkgb24gdGhlIGZpcnN0IHBhc3MuICBJZiB0aGUKKyMgICAgICByZXN1bHQgaXMgZXhhY3RseSAxMF5MRU4sIGRlY3JlbWVudCBJTE9HIGFuZCBkaXZpZGUKKyMgICAgICB0aGUgbWFudGlzc2EgYnkgMTAuICBUaGUgY2FsY3VsYXRpb24gb2YgMTBeTEVOIGNhbm5vdAorIyAgICAgIGJlIGluZXhhY3QsIHNpbmNlIGFsbCBwb3dlcnMgb2YgdGVuIHVwdG8gMTBeMjcgYXJlIGV4YWN0CisjICAgICAgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uLCBzbyB0aGUgdXNlIG9mIGEgcHJldmlvdXMgcG93ZXItb2YtdGVuCisjICAgICAgdGFibGUgd2lsbCBpbnRyb2R1Y2Ugbm8gZXJyb3IuCisjCisjCisjIFJlZ2lzdGVyIHVzYWdlOgorIwlJbnB1dC9PdXRwdXQKKyMJZDA6IEZQQ1Igd2l0aCBzaXplIHNldCB0byBleHQvc2NyYXRjaCBmaW5hbCA9IDAKKyMJZDI6IHgveAorIwlkMzogeC9zY3JhdGNoIGZpbmFsID0geAorIwlkNDogTEVOL0xFTiBhZGp1c3RlZAorIwlkNTogSUNUUjpMQU1CREEvTEFNQkRBOklDVFIKKyMJZDY6IElMT0cvSUxPRyBhZGp1c3RlZAorIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCisjCWEwOiBwb2ludGVyIGludG8gbWVtb3J5IGZvciBwYWNrZWQgYmNkIHN0cmluZyBmb3JtYXRpb24KKyMJYTE6IHB0ciB0byBQVEVOeHggYXJyYXkvVW5jaGFuZ2VkCisjCWEyOiBwdHIgdG8gRlBfU0NSMShhNikvVW5jaGFuZ2VkCisjCWZwMDogaW50IHBvcnRpb24gb2YgWS9hYnMoWUlOVCkgYWRqdXN0ZWQKKyMJZnAxOiAxMF5JU0NBTEUvVW5jaGFuZ2VkCisjCWZwMjogeC8xMF5MRU4KKyMJRl9TQ1IxOngveAorIwlGX1NDUjI6WSB3aXRoIG9yaWdpbmFsIGV4cG9uZW50L1VuY2hhbmdlZAorIwlMX1NDUjE6b3JpZ2luYWwgVVNFUl9GUENSL1VuY2hhbmdlZAorIwlMX1NDUjI6Zmlyc3Qgd29yZCBvZiBYIHBhY2tlZC9VbmNoYW5nZWQKKworQTEzX3N0OgorCXN3YXAJCSVkNQkJIyBwdXQgSUNUUiBpbiBsb3dlciB3b3JkIG9mIGQ1CisJdHN0LncJCSVkNQkJIyBjaGVjayBpZiBJQ1RSID0gMAorCWJuZQkJbm90X3pyCQkjIGlmIG5vbi16ZXJvLCBnbyB0byBzZWNvbmQgdGVzdAorIworIyBDb21wdXRlIDEwXihMRU4tMSkKKyMKKwlmbW92LnMJCUZPTkUoJXBjKSwlZnAyCSMgaW5pdCBmcDIgdG8gMS4wCisJbW92LmwJCSVkNCwlZDAJCSMgcHV0IExFTiBpbiBkMAorCXN1YnEubAkJJjEsJWQwCQkjIGQwID0gTEVOIC0xCisJY2xyLmwJCSVkMwkJIyBjbHIgdGFibGUgaW5kZXgKK2xfbG9vcDoKKwlsc3IubAkJJjEsJWQwCQkjIHNoaWZ0IG5leHQgYml0IGludG8gY2FycnkKKwliY2MuYgkJbF9uZXh0CQkjIGlmIHplcm8sIHNraXAgdGhlIG11bAorCWZtdWwueAkJKCVhMSwlZDMpLCVmcDIJIyBtdWwgYnkgMTAqKihkM19iaXRfbm8pCitsX25leHQ6CisJYWRkLmwJCSYxMiwlZDMJCSMgaW5jIGQzIHRvIG5leHQgcHdydGVuIHRhYmxlIGVudHJ5CisJdHN0LmwJCSVkMAkJIyB0ZXN0IGlmIExFTiBpcyB6ZXJvCisJYm5lLmIJCWxfbG9vcAkJIyBpZiBub3QsIGxvb3AKKyMKKyMgMTBeTEVOLTEgaXMgY29tcHV0ZWQgZm9yIHRoaXMgdGVzdCBhbmQgQTE0LiAgSWYgdGhlIGlucHV0IHdhcworIyBkZW5vcm1hbGl6ZWQsIGNoZWNrIG9ubHkgdGhlIGNhc2UgaW4gd2hpY2ggWUlOVCA+IDEwXkxFTi4KKyMKKwl0c3QuYgkJQklOREVDX0ZMRyglYTYpCSMgY2hlY2sgaWYgaW5wdXQgd2FzIG5vcm0KKwliZXEuYgkJQTEzX2NvbgkJIyBpZiBub3JtLCBjb250aW51ZSB3aXRoIGNoZWNraW5nCisJZmFicy54CQklZnAwCQkjIHRha2UgYWJzIG9mIFlJTlQKKwlicmEJCXRlc3RfMgorIworIyBDb21wYXJlIGFicyhZSU5UKSB0byAxMF4oTEVOLTEpIGFuZCAxMF5MRU4KKyMKK0ExM19jb246CisJZmFicy54CQklZnAwCQkjIHRha2UgYWJzIG9mIFlJTlQKKwlmY21wLngJCSVmcDAsJWZwMgkjIGNvbXBhcmUgYWJzKFlJTlQpIHdpdGggMTBeKExFTi0xKQorCWZiZ2UudwkJdGVzdF8yCQkjIGlmIGdyZWF0ZXIsIGRvIG5leHQgdGVzdAorCXN1YnEubAkJJjEsJWQ2CQkjIHN1YnRyYWN0IDEgZnJvbSBJTE9HCisJbW92LncJCSYxLCVkNQkJIyBzZXQgSUNUUgorCWZtb3YubAkJJnJtX21vZGUqMHgxMCwlZnBjcgkjIHNldCBybW9kZSB0byBSTQorCWZtdWwucwkJRlRFTiglcGMpLCVmcDIJIyBjb21wdXRlIDEwXkxFTgorCWJyYS53CQlBNl9zdHIJCSMgcmV0dXJuIHRvIEE2IGFuZCByZWNvbXB1dGUgWUlOVAordGVzdF8yOgorCWZtdWwucwkJRlRFTiglcGMpLCVmcDIJIyBjb21wdXRlIDEwXkxFTgorCWZjbXAueAkJJWZwMCwlZnAyCSMgY29tcGFyZSBhYnMoWUlOVCkgd2l0aCAxMF5MRU4KKwlmYmx0LncJCUExNF9zdAkJIyBpZiBsZXNzLCBhbGwgaXMgb2ssIGdvIHRvIEExNAorCWZiZ3QudwkJZml4X2V4CQkjIGlmIGdyZWF0ZXIsIGZpeCBhbmQgcmVkbworCWZkaXYucwkJRlRFTiglcGMpLCVmcDAJIyBpZiBlcXVhbCwgZGl2aWRlIGJ5IDEwCisJYWRkcS5sCQkmMSwlZDYJCSMgYW5kIGluYyBJTE9HCisJYnJhLmIJCUExNF9zdAkJIyBhbmQgY29udGludWUgZWxzZXdoZXJlCitmaXhfZXg6CisJYWRkcS5sCQkmMSwlZDYJCSMgaW5jcmVtZW50IElMT0cgYnkgMQorCW1vdi53CQkmMSwlZDUJCSMgc2V0IElDVFIKKwlmbW92LmwJCSZybV9tb2RlKjB4MTAsJWZwY3IJIyBzZXQgcm1vZGUgdG8gUk0KKwlicmEudwkJQTZfc3RyCQkjIHJldHVybiB0byBBNiBhbmQgcmVjb21wdXRlIFlJTlQKKyMKKyMgU2luY2UgSUNUUiA8PiAwLCB3ZSBoYXZlIGFscmVhZHkgYmVlbiB0aHJvdWdoIG9uZSBhZGp1c3RtZW50LAorIyBhbmQgc2hvdWxkbid0IGhhdmUgYW5vdGhlcjsgdGhpcyBpcyB0byBjaGVjayBpZiBhYnMoWUlOVCkgPSAxMF5MRU4KKyMgMTBeTEVOIGlzIGFnYWluIGNvbXB1dGVkIHVzaW5nIHdoYXRldmVyIHRhYmxlIGlzIGluIGExIHNpbmNlIHRoZQorIyB2YWx1ZSBjYWxjdWxhdGVkIGNhbm5vdCBiZSBpbmV4YWN0LgorIworbm90X3pyOgorCWZtb3YucwkJRk9ORSglcGMpLCVmcDIJIyBpbml0IGZwMiB0byAxLjAKKwltb3YubAkJJWQ0LCVkMAkJIyBwdXQgTEVOIGluIGQwCisJY2xyLmwJCSVkMwkJIyBjbHIgdGFibGUgaW5kZXgKK3pfbG9vcDoKKwlsc3IubAkJJjEsJWQwCQkjIHNoaWZ0IG5leHQgYml0IGludG8gY2FycnkKKwliY2MuYgkJel9uZXh0CQkjIGlmIHplcm8sIHNraXAgdGhlIG11bAorCWZtdWwueAkJKCVhMSwlZDMpLCVmcDIJIyBtdWwgYnkgMTAqKihkM19iaXRfbm8pCit6X25leHQ6CisJYWRkLmwJCSYxMiwlZDMJCSMgaW5jIGQzIHRvIG5leHQgcHdydGVuIHRhYmxlIGVudHJ5CisJdHN0LmwJCSVkMAkJIyB0ZXN0IGlmIExFTiBpcyB6ZXJvCisJYm5lLmIJCXpfbG9vcAkJIyBpZiBub3QsIGxvb3AKKwlmYWJzLngJCSVmcDAJCSMgZ2V0IGFicyhZSU5UKQorCWZjbXAueAkJJWZwMCwlZnAyCSMgY2hlY2sgaWYgYWJzKFlJTlQpID0gMTBeTEVOCisJZmJuZXEudwkJQTE0X3N0CQkjIGlmIG5vdCwgc2tpcCB0aGlzCisJZmRpdi5zCQlGVEVOKCVwYyksJWZwMAkjIGRpdmlkZSBhYnMoWUlOVCkgYnkgMTAKKwlhZGRxLmwJCSYxLCVkNgkJIyBhbmQgaW5jIElMT0cgYnkgMQorCWFkZHEubAkJJjEsJWQ0CQkjIGFuZCBpbmMgTEVOCisJZm11bC5zCQlGVEVOKCVwYyksJWZwMgkjIGlmIExFTisrLCB0aGUgZ2V0IDEwXl5MRU4KKworIyBBMTQuIENvbnZlcnQgdGhlIG1hbnRpc3NhIHRvIGJjZC4KKyMgICAgICBUaGUgYmluc3RyIHJvdXRpbmUgaXMgdXNlZCB0byBjb252ZXJ0IHRoZSBMRU4gZGlnaXQKKyMgICAgICBtYW50aXNzYSB0byBiY2QgaW4gbWVtb3J5LiAgVGhlIGlucHV0IHRvIGJpbnN0ciBpcworIyAgICAgIHRvIGJlIGEgZnJhY3Rpb247IGkuZS4gKG1hbnRpc3NhKS8xMF5MRU4gYW5kIGFkanVzdGVkCisjICAgICAgc3VjaCB0aGF0IHRoZSBkZWNpbWFsIHBvaW50IGlzIHRvIHRoZSBsZWZ0IG9mIGJpdCA2My4KKyMgICAgICBUaGUgYmNkIGRpZ2l0cyBhcmUgc3RvcmVkIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uIGluCisjICAgICAgdGhlIGZpbmFsIHN0cmluZyBhcmVhIGluIG1lbW9yeS4KKyMKKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCUlucHV0L091dHB1dAorIwlkMDogeC9MRU4gY2FsbCB0byBiaW5zdHIgLSBmaW5hbCBpcyAwCisjCWQxOiB4LzAKKyMJZDI6IHgvbXMgMzItYml0cyBvZiBtYW50IG9mIGFicyhZSU5UKQorIwlkMzogeC9scyAzMi1iaXRzIG9mIG1hbnQgb2YgYWJzKFlJTlQpCisjCWQ0OiBMRU4vVW5jaGFuZ2VkCisjCWQ1OiBJQ1RSOkxBTUJEQS9MQU1CREE6SUNUUgorIwlkNjogSUxPRworIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCisjCWEwOiBwb2ludGVyIGludG8gbWVtb3J5IGZvciBwYWNrZWQgYmNkIHN0cmluZyBmb3JtYXRpb24KKyMJICAgIC9wdHIgdG8gZmlyc3QgbWFudGlzc2EgYnl0ZSBpbiByZXN1bHQgc3RyaW5nCisjCWExOiBwdHIgdG8gUFRFTnh4IGFycmF5L1VuY2hhbmdlZAorIwlhMjogcHRyIHRvIEZQX1NDUjEoYTYpL1VuY2hhbmdlZAorIwlmcDA6IGludCBwb3J0aW9uIG9mIFkvYWJzKFlJTlQpIGFkanVzdGVkCisjCWZwMTogMTBeSVNDQUxFL1VuY2hhbmdlZAorIwlmcDI6IDEwXkxFTi9VbmNoYW5nZWQKKyMJRl9TQ1IxOngvV29yayBhcmVhIGZvciBmaW5hbCByZXN1bHQKKyMJRl9TQ1IyOlkgd2l0aCBvcmlnaW5hbCBleHBvbmVudC9VbmNoYW5nZWQKKyMJTF9TQ1IxOm9yaWdpbmFsIFVTRVJfRlBDUi9VbmNoYW5nZWQKKyMJTF9TQ1IyOmZpcnN0IHdvcmQgb2YgWCBwYWNrZWQvVW5jaGFuZ2VkCisKK0ExNF9zdDoKKwlmbW92LmwJCSZyel9tb2RlKjB4MTAsJWZwY3IJIyBmb3JjZSByeiBmb3IgY29udmVyc2lvbgorCWZkaXYueAkJJWZwMiwlZnAwCSMgZGl2aWRlIGFicyhZSU5UKSBieSAxMF5MRU4KKwlsZWEubAkJRlBfU0NSMCglYTYpLCVhMAorCWZtb3YueAkJJWZwMCwoJWEwKQkjIG1vdmUgYWJzKFlJTlQpLzEwXkxFTiB0byBtZW1vcnkKKwltb3YubAkJNCglYTApLCVkMgkjIG1vdmUgMm5kIHdvcmQgb2YgRlBfUkVTIHRvIGQyCisJbW92LmwJCTgoJWEwKSwlZDMJIyBtb3ZlIDNyZCB3b3JkIG9mIEZQX1JFUyB0byBkMworCWNsci5sCQk0KCVhMCkJCSMgemVybyB3b3JkIDIgb2YgRlBfUkVTCisJY2xyLmwJCTgoJWEwKQkJIyB6ZXJvIHdvcmQgMyBvZiBGUF9SRVMKKwltb3YubAkJKCVhMCksJWQwCSMgbW92ZSBleHBvbmVudCB0byBkMAorCXN3YXAJCSVkMAkJIyBwdXQgZXhwb25lbnQgaW4gbG93ZXIgd29yZAorCWJlcS5iCQlub19zZnQJCSMgaWYgemVybywgZG9uJ3Qgc2hpZnQKKwlzdWIubAkJJjB4M2ZmZCwlZDAJIyBzdWIgYmlhcyBsZXNzIDIgdG8gbWFrZSBmcmFjdAorCXRzdC5sCQklZDAJCSMgY2hlY2sgaWYgPiAxCisJYmd0LmIJCW5vX3NmdAkJIyBpZiBzbywgZG9uJ3Qgc2hpZnQKKwluZWcubAkJJWQwCQkjIG1ha2UgZXhwIHBvc2l0aXZlCittX2xvb3A6CisJbHNyLmwJCSYxLCVkMgkJIyBzaGlmdCBkMjpkMyByaWdodCwgYWRkIDBzCisJcm94ci5sCQkmMSwlZDMJCSMgdGhlIG51bWJlciBvZiBwbGFjZXMKKwlkYmYudwkJJWQwLG1fbG9vcAkjIGdpdmVuIGluIGQwCitub19zZnQ6CisJdHN0LmwJCSVkMgkJIyBjaGVjayBmb3IgbWFudGlzc2Egb2YgemVybworCWJuZS5iCQlub196cgkJIyBpZiBub3QsIGdvIG9uCisJdHN0LmwJCSVkMwkJIyBjb250aW51ZSB6ZXJvIGNoZWNrCisJYmVxLmIJCXplcl9tCQkjIGlmIHplcm8sIGdvIGRpcmVjdGx5IHRvIGJpbnN0cgorbm9fenI6CisJY2xyLmwJCSVkMQkJIyBwdXQgemVybyBpbiBkMSBmb3IgYWRkeAorCWFkZC5sCQkmMHgwMDAwMDA4MCwlZDMJIyBpbmMgYXQgYml0IDcKKwlhZGR4LmwJCSVkMSwlZDIJCSMgY29udGludWUgaW5jCisJYW5kLmwJCSYweGZmZmZmZjgwLCVkMwkjIHN0cmlwIG9mZiBsc2Igbm90IHVzZWQgYnkgODgyCit6ZXJfbToKKwltb3YubAkJJWQ0LCVkMAkJIyBwdXQgTEVOIGluIGQwIGZvciBiaW5zdHIgY2FsbAorCWFkZHEubAkJJjMsJWEwCQkjIGEwIHBvaW50cyB0byBNMTYgYnl0ZSBpbiByZXN1bHQKKwlic3IJCWJpbnN0cgkJIyBjYWxsIGJpbnN0ciB0byBjb252ZXJ0IG1hbnQKKworCisjIEExNS4gQ29udmVydCB0aGUgZXhwb25lbnQgdG8gYmNkLgorIyAgICAgIEFzIGluIEExNCBhYm92ZSwgdGhlIGV4cCBpcyBjb252ZXJ0ZWQgdG8gYmNkIGFuZCB0aGUKKyMgICAgICBkaWdpdHMgYXJlIHN0b3JlZCBpbiB0aGUgZmluYWwgc3RyaW5nLgorIworIyAgICAgIERpZ2l0cyBhcmUgc3RvcmVkIGluIExfU0NSMShhNikgb24gcmV0dXJuIGZyb20gQklOREVDIGFzOgorIworIwkgMzIgICAgICAgICAgICAgICAxNiAxNSAgICAgICAgICAgICAgICAwCisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCXwgIDAgfCBlMyB8IGUyIHwgZTEgfCBlNCB8ICBYIHwgIFggfCAgWCB8CisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIEFuZCBhcmUgbW92ZWQgaW50byB0aGVpciBwcm9wZXIgcGxhY2VzIGluIEZQX1NDUjAuICBJZiBkaWdpdCBlNAorIyBpcyBub24temVybywgT1BFUlIgaXMgc2lnbmFsZWQuICBJbiBhbGwgY2FzZXMsIGFsbCA0IGRpZ2l0cyBhcmUKKyMgd3JpdHRlbiBhcyBzcGVjaWZpZWQgaW4gdGhlIDg4MS84ODIgbWFudWFsIGZvciBwYWNrZWQgZGVjaW1hbC4KKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCUlucHV0L091dHB1dAorIwlkMDogeC9MRU4gY2FsbCB0byBiaW5zdHIgLSBmaW5hbCBpcyAwCisjCWQxOiB4L3NjcmF0Y2ggKDApO3NoaWZ0IGNvdW50IGZvciBmaW5hbCBleHBvbmVudCBwYWNraW5nCisjCWQyOiB4L21zIDMyLWJpdHMgb2YgZXhwIGZyYWN0aW9uL3NjcmF0Y2gKKyMJZDM6IHgvbHMgMzItYml0cyBvZiBleHAgZnJhY3Rpb24KKyMJZDQ6IExFTi9VbmNoYW5nZWQKKyMJZDU6IElDVFI6TEFNQkRBL0xBTUJEQTpJQ1RSCisjCWQ2OiBJTE9HCisjCWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKKyMJYTA6IHB0ciB0byByZXN1bHQgc3RyaW5nL3B0ciB0byBMX1NDUjEoYTYpCisjCWExOiBwdHIgdG8gUFRFTnh4IGFycmF5L1VuY2hhbmdlZAorIwlhMjogcHRyIHRvIEZQX1NDUjEoYTYpL1VuY2hhbmdlZAorIwlmcDA6IGFicyhZSU5UKSBhZGp1c3RlZC9mbG9hdChJTE9HKQorIwlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKKyMJZnAyOiAxMF5MRU4vVW5jaGFuZ2VkCisjCUZfU0NSMTpXb3JrIGFyZWEgZm9yIGZpbmFsIHJlc3VsdC9CQ0QgcmVzdWx0CisjCUZfU0NSMjpZIHdpdGggb3JpZ2luYWwgZXhwb25lbnQvSUxPRy8xMF40CisjCUxfU0NSMTpvcmlnaW5hbCBVU0VSX0ZQQ1IvRXhwb25lbnQgZGlnaXRzIG9uIHJldHVybiBmcm9tIGJpbnN0cgorIwlMX1NDUjI6Zmlyc3Qgd29yZCBvZiBYIHBhY2tlZC9VbmNoYW5nZWQKKworQTE1X3N0OgorCXRzdC5iCQlCSU5ERUNfRkxHKCVhNikJIyBjaGVjayBmb3IgZGVub3JtCisJYmVxLmIJCW5vdF9kZW5vcm0KKwlmdGVzdC54CQklZnAwCQkjIHRlc3QgZm9yIHplcm8KKwlmYmVxLncJCWRlbl96ZXJvCSMgaWYgemVybywgdXNlIGstZmFjdG9yIG9yIDQ5MzMKKwlmbW92LmwJCSVkNiwlZnAwCSMgZmxvYXQgSUxPRworCWZhYnMueAkJJWZwMAkJIyBnZXQgYWJzIG9mIElMT0cKKwlicmEuYgkJY29udnJ0CitkZW5femVybzoKKwl0c3QubAkJJWQ3CQkjIGNoZWNrIHNpZ24gb2YgdGhlIGstZmFjdG9yCisJYmx0LmIJCXVzZV9pbG9nCSMgaWYgbmVnYXRpdmUsIHVzZSBJTE9HCisJZm1vdi5zCQlGNDkzMyglcGMpLCVmcDAJIyBmb3JjZSBleHBvbmVudCB0byA0OTMzCisJYnJhLmIJCWNvbnZydAkJIyBkbyBpdAordXNlX2lsb2c6CisJZm1vdi5sCQklZDYsJWZwMAkjIGZsb2F0IElMT0cKKwlmYWJzLngJCSVmcDAJCSMgZ2V0IGFicyBvZiBJTE9HCisJYnJhLmIJCWNvbnZydAorbm90X2Rlbm9ybToKKwlmdGVzdC54CQklZnAwCQkjIHRlc3QgZm9yIHplcm8KKwlmYm5lcS53CQlub3RfemVybwkjIGlmIHplcm8sIGZvcmNlIGV4cG9uZW50CisJZm1vdi5zCQlGT05FKCVwYyksJWZwMAkjIGZvcmNlIGV4cG9uZW50IHRvIDEKKwlicmEuYgkJY29udnJ0CQkjIGRvIGl0Citub3RfemVybzoKKwlmbW92LmwJCSVkNiwlZnAwCSMgZmxvYXQgSUxPRworCWZhYnMueAkJJWZwMAkJIyBnZXQgYWJzIG9mIElMT0cKK2NvbnZydDoKKwlmZGl2LngJCTI0KCVhMSksJWZwMAkjIGNvbXB1dGUgSUxPRy8xMF40CisJZm1vdi54CQklZnAwLEZQX1NDUjEoJWE2KQkjIHN0b3JlIGZwMCBpbiBtZW1vcnkKKwltb3YubAkJNCglYTIpLCVkMgkjIG1vdmUgd29yZCAyIHRvIGQyCisJbW92LmwJCTgoJWEyKSwlZDMJIyBtb3ZlIHdvcmQgMyB0byBkMworCW1vdi53CQkoJWEyKSwlZDAJIyBtb3ZlIGV4cCB0byBkMAorCWJlcS5iCQl4X2xvb3BfZmluCSMgaWYgemVybywgc2tpcCB0aGUgc2hpZnQKKwlzdWIudwkJJjB4M2ZmZCwlZDAJIyBzdWJ0cmFjdCBvZmYgYmlhcworCW5lZy53CQklZDAJCSMgbWFrZSBleHAgcG9zaXRpdmUKK3hfbG9vcDoKKwlsc3IubAkJJjEsJWQyCQkjIHNoaWZ0IGQyOmQzIHJpZ2h0CisJcm94ci5sCQkmMSwlZDMJCSMgdGhlIG51bWJlciBvZiBwbGFjZXMKKwlkYmYudwkJJWQwLHhfbG9vcAkjIGdpdmVuIGluIGQwCit4X2xvb3BfZmluOgorCWNsci5sCQklZDEJCSMgcHV0IHplcm8gaW4gZDEgZm9yIGFkZHgKKwlhZGQubAkJJjB4MDAwMDAwODAsJWQzCSMgaW5jIGF0IGJpdCA2CisJYWRkeC5sCQklZDEsJWQyCQkjIGNvbnRpbnVlIGluYworCWFuZC5sCQkmMHhmZmZmZmY4MCwlZDMJIyBzdHJpcCBvZmYgbHNiIG5vdCB1c2VkIGJ5IDg4MgorCW1vdi5sCQkmNCwlZDAJCSMgcHV0IDQgaW4gZDAgZm9yIGJpbnN0ciBjYWxsCisJbGVhLmwJCUxfU0NSMSglYTYpLCVhMAkjIGEwIGlzIHB0ciB0byBMX1NDUjEgZm9yIGV4cCBkaWdpdHMKKwlic3IJCWJpbnN0cgkJIyBjYWxsIGJpbnN0ciB0byBjb252ZXJ0IGV4cAorCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDAJIyBsb2FkIExfU0NSMSBsd29yZCB0byBkMAorCW1vdi5sCQkmMTIsJWQxCQkjIHVzZSBkMSBmb3Igc2hpZnQgY291bnQKKwlsc3IubAkJJWQxLCVkMAkJIyBzaGlmdCBkMCByaWdodCBieSAxMgorCWJmaW5zCQklZDAsRlBfU0NSMCglYTYpeyY0OiYxMn0JIyBwdXQgZTM6ZTI6ZTEgaW4gRlBfU0NSMAorCWxzci5sCQklZDEsJWQwCQkjIHNoaWZ0IGQwIHJpZ2h0IGJ5IDEyCisJYmZpbnMJCSVkMCxGUF9TQ1IwKCVhNil7JjE2OiY0fQkjIHB1dCBlNCBpbiBGUF9TQ1IwCisJdHN0LmIJCSVkMAkJIyBjaGVjayBpZiBlNCBpcyB6ZXJvCisJYmVxLmIJCUExNl9zdAkJIyBpZiB6ZXJvLCBza2lwIHJlc3QKKwlvci5sCQkmb3Bhb3BfbWFzayxVU0VSX0ZQU1IoJWE2KQkjIHNldCBPUEVSUiAmIEFJT1AgaW4gVVNFUl9GUFNSCisKKworIyBBMTYuIFdyaXRlIHNpZ24gYml0cyB0byBmaW5hbCBzdHJpbmcuCisjCSAgIFNpZ21hIGlzIGJpdCAzMSBvZiBpbml0aWFsIHZhbHVlOyBSSE8gaXMgYml0IDMxIG9mIGQ2IChJTE9HKS4KKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCUlucHV0L091dHB1dAorIwlkMDogeC9zY3JhdGNoIC0gZmluYWwgaXMgeAorIwlkMjogeC94CisjCWQzOiB4L3gKKyMJZDQ6IExFTi9VbmNoYW5nZWQKKyMJZDU6IElDVFI6TEFNQkRBL0xBTUJEQTpJQ1RSCisjCWQ2OiBJTE9HL0lMT0cgYWRqdXN0ZWQKKyMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAorIwlhMDogcHRyIHRvIExfU0NSMShhNikvVW5jaGFuZ2VkCisjCWExOiBwdHIgdG8gUFRFTnh4IGFycmF5L1VuY2hhbmdlZAorIwlhMjogcHRyIHRvIEZQX1NDUjEoYTYpL1VuY2hhbmdlZAorIwlmcDA6IGZsb2F0KElMT0cpL1VuY2hhbmdlZAorIwlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKKyMJZnAyOiAxMF5MRU4vVW5jaGFuZ2VkCisjCUZfU0NSMTpCQ0QgcmVzdWx0IHdpdGggY29ycmVjdCBzaWducworIwlGX1NDUjI6SUxPRy8xMF40CisjCUxfU0NSMTpFeHBvbmVudCBkaWdpdHMgb24gcmV0dXJuIGZyb20gYmluc3RyCisjCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBMTZfc3Q6CisJY2xyLmwJCSVkMAkJIyBjbHIgZDAgZm9yIGNvbGxlY3Rpb24gb2Ygc2lnbnMKKwlhbmQuYgkJJjB4MGYsRlBfU0NSMCglYTYpCSMgY2xlYXIgZmlyc3QgbmliYmxlIG9mIEZQX1NDUjAKKwl0c3QubAkJTF9TQ1IyKCVhNikJIyBjaGVjayBzaWduIG9mIG9yaWdpbmFsIG1hbnRpc3NhCisJYmdlLmIJCW1hbnRfcAkJIyBpZiBwb3MsIGRvbid0IHNldCBTTQorCW1vdi5sCQkmMiwlZDAJCSMgbW92ZSAyIGluIHRvIGQwIGZvciBTTQorbWFudF9wOgorCXRzdC5sCQklZDYJCSMgY2hlY2sgc2lnbiBvZiBJTE9HCisJYmdlLmIJCXdyX3NnbgkJIyBpZiBwb3MsIGRvbid0IHNldCBTRQorCWFkZHEubAkJJjEsJWQwCQkjIHNldCBiaXQgMCBpbiBkMCBmb3IgU0UKK3dyX3NnbjoKKwliZmlucwkJJWQwLEZQX1NDUjAoJWE2KXsmMDomMn0JIyBpbnNlcnQgU00gYW5kIFNFIGludG8gRlBfU0NSMAorCisjIENsZWFuIHVwIGFuZCByZXN0b3JlIGFsbCByZWdpc3RlcnMgdXNlZC4KKworCWZtb3YubAkJJjAsJWZwc3IJIyBjbGVhciBwb3NzaWJsZSBpbmV4Mi9haW5leCBiaXRzCisJZm1vdm0ueAkJKCVzcCkrLCYweGUwCSMgIHslZnAwLSVmcDJ9CisJbW92bS5sCQkoJXNwKSssJjB4NGZjCSMgIHslZDItJWQ3LyVhMn0KKwlydHMKKworCWdsb2JhbAkJUFRFTlJOCitQVEVOUk46CisJbG9uZwkJMHg0MDAyMDAwMCwweEEwMDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDEKKwlsb25nCQkweDQwMDUwMDAwLDB4QzgwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMgorCWxvbmcJCTB4NDAwQzAwMDAsMHg5QzQwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiA0CisJbG9uZwkJMHg0MDE5MDAwMCwweEJFQkMyMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDgKKwlsb25nCQkweDQwMzQwMDAwLDB4OEUxQkM5QkYsMHgwNDAwMDAwMAkjIDEwIF4gMTYKKwlsb25nCQkweDQwNjkwMDAwLDB4OURDNUFEQTgsMHgyQjcwQjU5RQkjIDEwIF4gMzIKKwlsb25nCQkweDQwRDMwMDAwLDB4QzI3ODFGNDksMHhGRkNGQTZENQkjIDEwIF4gNjQKKwlsb25nCQkweDQxQTgwMDAwLDB4OTNCQTQ3QzksMHg4MEU5OENFMAkjIDEwIF4gMTI4CisJbG9uZwkJMHg0MzUxMDAwMCwweEFBN0VFQkZCLDB4OURGOURFOEUJIyAxMCBeIDI1NgorCWxvbmcJCTB4NDZBMzAwMDAsMHhFMzE5QTBBRSwweEE2MEU5MUM3CSMgMTAgXiA1MTIKKwlsb25nCQkweDRENDgwMDAwLDB4Qzk3Njc1ODYsMHg4MTc1MEMxNwkjIDEwIF4gMTAyNAorCWxvbmcJCTB4NUE5MjAwMDAsMHg5RThCM0I1RCwweEM1M0Q1REU1CSMgMTAgXiAyMDQ4CisJbG9uZwkJMHg3NTI1MDAwMCwweEM0NjA1MjAyLDB4OEEyMDk3OUIJIyAxMCBeIDQwOTYKKworCWdsb2JhbAkJUFRFTlJQCitQVEVOUlA6CisJbG9uZwkJMHg0MDAyMDAwMCwweEEwMDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDEKKwlsb25nCQkweDQwMDUwMDAwLDB4QzgwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMgorCWxvbmcJCTB4NDAwQzAwMDAsMHg5QzQwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiA0CisJbG9uZwkJMHg0MDE5MDAwMCwweEJFQkMyMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDgKKwlsb25nCQkweDQwMzQwMDAwLDB4OEUxQkM5QkYsMHgwNDAwMDAwMAkjIDEwIF4gMTYKKwlsb25nCQkweDQwNjkwMDAwLDB4OURDNUFEQTgsMHgyQjcwQjU5RQkjIDEwIF4gMzIKKwlsb25nCQkweDQwRDMwMDAwLDB4QzI3ODFGNDksMHhGRkNGQTZENgkjIDEwIF4gNjQKKwlsb25nCQkweDQxQTgwMDAwLDB4OTNCQTQ3QzksMHg4MEU5OENFMAkjIDEwIF4gMTI4CisJbG9uZwkJMHg0MzUxMDAwMCwweEFBN0VFQkZCLDB4OURGOURFOEUJIyAxMCBeIDI1NgorCWxvbmcJCTB4NDZBMzAwMDAsMHhFMzE5QTBBRSwweEE2MEU5MUM3CSMgMTAgXiA1MTIKKwlsb25nCQkweDRENDgwMDAwLDB4Qzk3Njc1ODYsMHg4MTc1MEMxOAkjIDEwIF4gMTAyNAorCWxvbmcJCTB4NUE5MjAwMDAsMHg5RThCM0I1RCwweEM1M0Q1REU1CSMgMTAgXiAyMDQ4CisJbG9uZwkJMHg3NTI1MDAwMCwweEM0NjA1MjAyLDB4OEEyMDk3OUIJIyAxMCBeIDQwOTYKKworCWdsb2JhbAkJUFRFTlJNCitQVEVOUk06CisJbG9uZwkJMHg0MDAyMDAwMCwweEEwMDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDEKKwlsb25nCQkweDQwMDUwMDAwLDB4QzgwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMgorCWxvbmcJCTB4NDAwQzAwMDAsMHg5QzQwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiA0CisJbG9uZwkJMHg0MDE5MDAwMCwweEJFQkMyMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDgKKwlsb25nCQkweDQwMzQwMDAwLDB4OEUxQkM5QkYsMHgwNDAwMDAwMAkjIDEwIF4gMTYKKwlsb25nCQkweDQwNjkwMDAwLDB4OURDNUFEQTgsMHgyQjcwQjU5RAkjIDEwIF4gMzIKKwlsb25nCQkweDQwRDMwMDAwLDB4QzI3ODFGNDksMHhGRkNGQTZENQkjIDEwIF4gNjQKKwlsb25nCQkweDQxQTgwMDAwLDB4OTNCQTQ3QzksMHg4MEU5OENERgkjIDEwIF4gMTI4CisJbG9uZwkJMHg0MzUxMDAwMCwweEFBN0VFQkZCLDB4OURGOURFOEQJIyAxMCBeIDI1NgorCWxvbmcJCTB4NDZBMzAwMDAsMHhFMzE5QTBBRSwweEE2MEU5MUM2CSMgMTAgXiA1MTIKKwlsb25nCQkweDRENDgwMDAwLDB4Qzk3Njc1ODYsMHg4MTc1MEMxNwkjIDEwIF4gMTAyNAorCWxvbmcJCTB4NUE5MjAwMDAsMHg5RThCM0I1RCwweEM1M0Q1REU0CSMgMTAgXiAyMDQ4CisJbG9uZwkJMHg3NTI1MDAwMCwweEM0NjA1MjAyLDB4OEEyMDk3OUEJIyAxMCBeIDQwOTYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBiaW5zdHIoKTogQ29udmVydHMgYSA2NC1iaXQgYmluYXJ5IGludGVnZXIgdG8gYmNkLgkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWQyOmQzID0gNjQtYml0IGJpbmFyeSBpbnRlZ2VyCQkJCQkjCisjCWQwICAgID0gZGVzaXJlZCBsZW5ndGggKExFTikJCQkJCSMKKyMJYTAgICAgPSBwb2ludGVyIHRvIHN0YXJ0IGluIG1lbW9yeSBmb3IgYmNkIGNoYXJhY3RlcnMJCSMKKyMJCShUaGlzIHBvaW50ZXIgbXVzdCBwb2ludCB0byBieXRlIDQgb2YgdGhlIGZpcnN0CQkjCisjCQkgbHdvcmQgb2YgdGhlIHBhY2tlZCBkZWNpbWFsIG1lbW9yeSBzdHJpbmcuKQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJYTAgPSBwb2ludGVyIHRvIExFTiBiY2QgZGlnaXRzIHJlcHJlc2VudGluZyB0aGUgNjQtYml0IGludGVnZXIuCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoZSA2NC1iaXQgYmluYXJ5IGlzIGFzc3VtZWQgdG8gaGF2ZSBhIGRlY2ltYWwgcG9pbnQgYmVmb3JlCSMKKyMJYml0IDYzLiAgVGhlIGZyYWN0aW9uIGlzIG11bHRpcGxpZWQgYnkgMTAgdXNpbmcgYSBtdWwgYnkgMgkjCisjCXNoaWZ0IGFuZCBhIG11bCBieSA4IHNoaWZ0LiAgVGhlIGJpdHMgc2hpZnRlZCBvdXQgb2YgdGhlCSMKKyMJbXNiIGZvcm0gYSBkZWNpbWFsIGRpZ2l0LiAgVGhpcyBwcm9jZXNzIGlzIGl0ZXJhdGVkIHVudGlsCSMKKyMJTEVOIGRpZ2l0cyBhcmUgZm9ybWVkLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEExLiBJbml0IGQ3IHRvIDEuICBENyBpcyB0aGUgYnl0ZSBkaWdpdCBjb3VudGVyLCBhbmQgaWYgMSwgdGhlCSMKKyMgICAgIGRpZ2l0IGZvcm1lZCB3aWxsIGJlIGFzc3VtZWQgdGhlIGxlYXN0IHNpZ25pZmljYW50LiAgVGhpcyBpcwkjCisjICAgICB0byBmb3JjZSB0aGUgZmlyc3QgYnl0ZSBmb3JtZWQgdG8gaGF2ZSBhIDAgaW4gdGhlIHVwcGVyIDQgYml0cy4JIworIwkJCQkJCQkJCSMKKyMgQTIuIEJlZ2lubmluZyBvZiB0aGUgbG9vcDoJCQkJCQkjCisjICAgICBDb3B5IHRoZSBmcmFjdGlvbiBpbiBkMjpkMyB0byBkNDpkNS4JCQkJIworIwkJCQkJCQkJCSMKKyMgQTMuIE11bHRpcGx5IHRoZSBmcmFjdGlvbiBpbiBkMjpkMyBieSA4IHVzaW5nIGJpdC1maWVsZAkJIworIyAgICAgZXh0cmFjdHMgYW5kIHNoaWZ0cy4gIFRoZSB0aHJlZSBtc2JzIGZyb20gZDIgd2lsbCBnbyBpbnRvIGQxLgkjCisjCQkJCQkJCQkJIworIyBBNC4gTXVsdGlwbHkgdGhlIGZyYWN0aW9uIGluIGQ0OmQ1IGJ5IDIgdXNpbmcgc2hpZnRzLiAgVGhlIG1zYgkjCisjICAgICB3aWxsIGJlIGNvbGxlY3RlZCBieSB0aGUgY2FycnkuCQkJCQkjCisjCQkJCQkJCQkJIworIyBBNS4gQWRkIHVzaW5nIHRoZSBjYXJyeSB0aGUgNjQtYml0IHF1YW50aXRpZXMgaW4gZDI6ZDMgYW5kIGQ0OmQ1CSMKKyMgICAgIGludG8gZDI6ZDMuICBEMSB3aWxsIGNvbnRhaW4gdGhlIGJjZCBkaWdpdCBmb3JtZWQuCQkjCisjCQkJCQkJCQkJIworIyBBNi4gVGVzdCBkNy4gIElmIHplcm8sIHRoZSBkaWdpdCBmb3JtZWQgaXMgdGhlIG1zIGRpZ2l0LiAgSWYgbm9uLQkjCisjICAgICB6ZXJvLCBpdCBpcyB0aGUgbHMgZGlnaXQuICBQdXQgdGhlIGRpZ2l0IGluIGl0cyBwbGFjZSBpbiB0aGUJIworIyAgICAgdXBwZXIgd29yZCBvZiBkMC4gIElmIGl0IGlzIHRoZSBscyBkaWdpdCwgd3JpdGUgdGhlIHdvcmQJCSMKKyMgICAgIGZyb20gZDAgdG8gbWVtb3J5LgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEE3LiBEZWNyZW1lbnQgZDYgKExFTiBjb3VudGVyKSBhbmQgcmVwZWF0IHRoZSBsb29wIHVudGlsIHplcm8uCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMJSW1wbGVtZW50YXRpb24gTm90ZXM6CisjCisjCVRoZSByZWdpc3RlcnMgYXJlIHVzZWQgYXMgZm9sbG93czoKKyMKKyMJCWQwOiBMRU4gY291bnRlcgorIwkJZDE6IHRlbXAgdXNlZCB0byBmb3JtIHRoZSBkaWdpdAorIwkJZDI6IHVwcGVyIDMyLWJpdHMgb2YgZnJhY3Rpb24gZm9yIG11bCBieSA4CisjCQlkMzogbG93ZXIgMzItYml0cyBvZiBmcmFjdGlvbiBmb3IgbXVsIGJ5IDgKKyMJCWQ0OiB1cHBlciAzMi1iaXRzIG9mIGZyYWN0aW9uIGZvciBtdWwgYnkgMgorIwkJZDU6IGxvd2VyIDMyLWJpdHMgb2YgZnJhY3Rpb24gZm9yIG11bCBieSAyCisjCQlkNjogdGVtcCBmb3IgYml0LWZpZWxkIGV4dHJhY3RzCisjCQlkNzogYnl0ZSBkaWdpdCBmb3JtYXRpb24gd29yZDtkaWdpdCBjb3VudCB7MCwxfQorIwkJYTA6IHBvaW50ZXIgaW50byBtZW1vcnkgZm9yIHBhY2tlZCBiY2Qgc3RyaW5nIGZvcm1hdGlvbgorIworCisJZ2xvYmFsCQliaW5zdHIKK2JpbnN0cjoKKwltb3ZtLmwJCSYweGZmMDAsLSglc3ApCSMgIHslZDAtJWQ3fQorCisjCisjIEExOiBJbml0IGQ3CisjCisJbW92LmwJCSYxLCVkNwkJIyBpbml0IGQ3IGZvciBzZWNvbmQgZGlnaXQKKwlzdWJxLmwJCSYxLCVkMAkJIyBmb3IgZGJmIGQwIHdvdWxkIGhhdmUgTEVOKzEgcGFzc2VzCisjCisjIEEyLiBDb3B5IGQyOmQzIHRvIGQ0OmQ1LiAgU3RhcnQgbG9vcC4KKyMKK2xvb3A6CisJbW92LmwJCSVkMiwlZDQJCSMgY29weSB0aGUgZnJhY3Rpb24gYmVmb3JlIG11bHMKKwltb3YubAkJJWQzLCVkNQkJIyB0byBkNDpkNQorIworIyBBMy4gTXVsdGlwbHkgZDI6ZDMgYnkgODsgZXh0cmFjdCBtc2JzIGludG8gZDEuCisjCisJYmZleHR1CQklZDJ7JjA6JjN9LCVkMQkjIGNvcHkgMyBtc2JzIG9mIGQyIGludG8gZDEKKwlhc2wubAkJJjMsJWQyCQkjIHNoaWZ0IGQyIGxlZnQgYnkgMyBwbGFjZXMKKwliZmV4dHUJCSVkM3smMDomM30sJWQ2CSMgY29weSAzIG1zYnMgb2YgZDMgaW50byBkNgorCWFzbC5sCQkmMywlZDMJCSMgc2hpZnQgZDMgbGVmdCBieSAzIHBsYWNlcworCW9yLmwJCSVkNiwlZDIJCSMgb3IgaW4gbXNicyBmcm9tIGQzIGludG8gZDIKKyMKKyMgQTQuIE11bHRpcGx5IGQ0OmQ1IGJ5IDI7IGFkZCBjYXJyeSBvdXQgdG8gZDEuCisjCisJYXNsLmwJCSYxLCVkNQkJIyBtdWwgZDUgYnkgMgorCXJveGwubAkJJjEsJWQ0CQkjIG11bCBkNCBieSAyCisJc3dhcAkJJWQ2CQkjIHB1dCAwIGluIGQ2IGxvd2VyIHdvcmQKKwlhZGR4LncJCSVkNiwlZDEJCSMgYWRkIGluIGV4dGVuZCBmcm9tIG11bCBieSAyCisjCisjIEE1LiBBZGQgbXVsIGJ5IDggdG8gbXVsIGJ5IDIuICBEMSBjb250YWlucyB0aGUgZGlnaXQgZm9ybWVkLgorIworCWFkZC5sCQklZDUsJWQzCQkjIGFkZCBsb3dlciAzMiBiaXRzCisJbm9wCQkJCSMgRVJSQVRBIEZJWCAjMTMgKFJldi4gMS4yIDYvNi85MCkKKwlhZGR4LmwJCSVkNCwlZDIJCSMgYWRkIHdpdGggZXh0ZW5kIHVwcGVyIDMyIGJpdHMKKwlub3AJCQkJIyBFUlJBVEEgRklYICMxMyAoUmV2LiAxLjIgNi82LzkwKQorCWFkZHgudwkJJWQ2LCVkMQkJIyBhZGQgaW4gZXh0ZW5kIGZyb20gYWRkIHRvIGQxCisJc3dhcAkJJWQ2CQkjIHdpdGggZDYgPSAwOyBwdXQgMCBpbiB1cHBlciB3b3JkCisjCisjIEE2LiBUZXN0IGQ3IGFuZCBicmFuY2guCisjCisJdHN0LncJCSVkNwkJIyBpZiB6ZXJvLCBzdG9yZSBkaWdpdCAmIHRvIGxvb3AKKwliZXEuYgkJZmlyc3RfZAkJIyBpZiBub24temVybywgZm9ybSBieXRlICYgd3JpdGUKK3NlY19kOgorCXN3YXAJCSVkNwkJIyBicmluZyBmaXJzdCBkaWdpdCB0byB3b3JkIGQ3YgorCWFzbC53CQkmNCwlZDcJCSMgZmlyc3QgZGlnaXQgaW4gdXBwZXIgNCBiaXRzIGQ3YgorCWFkZC53CQklZDEsJWQ3CQkjIGFkZCBpbiBscyBkaWdpdCB0byBkN2IKKwltb3YuYgkJJWQ3LCglYTApKwkjIHN0b3JlIGQ3YiBieXRlIGluIG1lbW9yeQorCXN3YXAJCSVkNwkJIyBwdXQgTEVOIGNvdW50ZXIgaW4gd29yZCBkN2EKKwljbHIudwkJJWQ3CQkjIHNldCBkN2EgdG8gc2lnbmFsIG5vIGRpZ2l0cyBkb25lCisJZGJmLncJCSVkMCxsb29wCSMgZG8gbG9vcCBzb21lIG1vcmUhCisJYnJhLmIJCWVuZF9ic3RyCSMgZmluaXNoZWQsIHNvIGV4aXQKK2ZpcnN0X2Q6CisJc3dhcAkJJWQ3CQkjIHB1dCBkaWdpdCB3b3JkIGluIGQ3YgorCW1vdi53CQklZDEsJWQ3CQkjIHB1dCBuZXcgZGlnaXQgaW4gZDdiCisJc3dhcAkJJWQ3CQkjIHB1dCBMRU4gY291bnRlciBpbiB3b3JkIGQ3YQorCWFkZHEudwkJJjEsJWQ3CQkjIHNldCBkN2EgdG8gc2lnbmFsIGZpcnN0IGRpZ2l0IGRvbmUKKwlkYmYudwkJJWQwLGxvb3AJIyBkbyBsb29wIHNvbWUgbW9yZSEKKwlzd2FwCQklZDcJCSMgcHV0IGxhc3QgZGlnaXQgaW4gc3RyaW5nCisJbHNsLncJCSY0LCVkNwkJIyBtb3ZlIGl0IHRvIHVwcGVyIDQgYml0cworCW1vdi5iCQklZDcsKCVhMCkrCSMgc3RvcmUgaXQgaW4gbWVtb3J5IHN0cmluZworIworIyBDbGVhbiB1cCBhbmQgcmV0dXJuIHdpdGggcmVzdWx0IGluIGZwMC4KKyMKK2VuZF9ic3RyOgorCW1vdm0ubAkJKCVzcCkrLCYweGZmCSMgIHslZDAtJWQ3fQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZhY2NfaW5fYigpOiBkbWVtX3JlYWRfYnl0ZSBmYWlsZWQJCQkJIworIwlmYWNjX2luX3coKTogZG1lbV9yZWFkX3dvcmQgZmFpbGVkCQkJCSMKKyMJZmFjY19pbl9sKCk6IGRtZW1fcmVhZF9sb25nIGZhaWxlZAkJCQkjCisjCWZhY2NfaW5fZCgpOiBkbWVtX3JlYWQgb2YgZGJsIHByZWMgZmFpbGVkCQkJIworIwlmYWNjX2luX3goKTogZG1lbV9yZWFkIG9mIGV4dCBwcmVjIGZhaWxlZAkJCSMKKyMJCQkJCQkJCQkjCisjCWZhY2Nfb3V0X2IoKTogZG1lbV93cml0ZV9ieXRlIGZhaWxlZAkJCQkjCisjCWZhY2Nfb3V0X3coKTogZG1lbV93cml0ZV93b3JkIGZhaWxlZAkJCQkjCisjCWZhY2Nfb3V0X2woKTogZG1lbV93cml0ZV9sb25nIGZhaWxlZAkJCQkjCisjCWZhY2Nfb3V0X2QoKTogZG1lbV93cml0ZSBvZiBkYmwgcHJlYyBmYWlsZWQJCQkjCisjCWZhY2Nfb3V0X3goKTogZG1lbV93cml0ZSBvZiBleHQgcHJlYyBmYWlsZWQJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfcmVhbF9hY2Nlc3MoKSAtIGV4aXQgdGhyb3VnaCBhY2Nlc3MgZXJyb3IgaGFuZGxlcgkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRmxvdyBqdW1wcyBoZXJlIHdoZW4gYW4gRlAgZGF0YSBmZXRjaCBjYWxsIGdldHMgYW4gZXJyb3IJIworIyByZXN1bHQuIFRoaXMgbWVhbnMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2FudHMgYW4gYWNjZXNzIGVycm9yIGZyYW1lCSMKKyMgbWFkZSBvdXQgb2YgdGhlIGN1cnJlbnQgZXhjZXB0aW9uIHN0YWNrIGZyYW1lLgkJCSMKKyMJU28sIHdlIGZpcnN0IGNhbGwgcmVzdG9yZSgpIHdoaWNoIG1ha2VzIHN1cmUgdGhhdCBhbnkgdXBkYXRlZAkjCisjIC0oYW4pKyByZWdpc3RlciBnZXRzIHJldHVybmVkIHRvIGl0cyBwcmUtZXhjZXB0aW9uIHZhbHVlIGFuZCB0aGVuCSMKKyMgd2UgY2hhbmdlIHRoZSBzdGFjayB0byBhbiBhY2Nlc3MgZXJyb3Igc3RhY2sgZnJhbWUuCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZmFjY19pbl9iOgorCW1vdnEubAkJJjB4MSwlZDAJCQkjIG9uZSBieXRlCisJYnNyLncJCXJlc3RvcmUJCQkJIyBmaXggQW4KKworCW1vdi53CQkmMHgwMTIxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKKwlicmEudwkJZmFjY19maW5pc2gKKworZmFjY19pbl93OgorCW1vdnEubAkJJjB4MiwlZDAJCQkjIHR3byBieXRlcworCWJzci53CQlyZXN0b3JlCQkJCSMgZml4IEFuCisKKwltb3YudwkJJjB4MDE0MSxFWENfVk9GRiglYTYpCQkjIHNldCBGU0xXCisJYnJhLmIJCWZhY2NfZmluaXNoCisKK2ZhY2NfaW5fbDoKKwltb3ZxLmwJCSYweDQsJWQwCQkJIyBmb3VyIGJ5dGVzCisJYnNyLncJCXJlc3RvcmUJCQkJIyBmaXggQW4KKworCW1vdi53CQkmMHgwMTAxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKKwlicmEuYgkJZmFjY19maW5pc2gKKworZmFjY19pbl9kOgorCW1vdnEubAkJJjB4OCwlZDAJCQkjIGVpZ2h0IGJ5dGVzCisJYnNyLncJCXJlc3RvcmUJCQkJIyBmaXggQW4KKworCW1vdi53CQkmMHgwMTYxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKKwlicmEuYgkJZmFjY19maW5pc2gKKworZmFjY19pbl94OgorCW1vdnEubAkJJjB4YywlZDAJCQkjIHR3ZWx2ZSBieXRlcworCWJzci53CQlyZXN0b3JlCQkJCSMgZml4IEFuCisKKwltb3YudwkJJjB4MDE2MSxFWENfVk9GRiglYTYpCQkjIHNldCBGU0xXCisJYnJhLmIJCWZhY2NfZmluaXNoCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZmFjY19vdXRfYjoKKwltb3ZxLmwJCSYweDEsJWQwCQkJIyBvbmUgYnl0ZQorCWJzci53CQlyZXN0b3JlCQkJCSMgcmVzdG9yZSBBbgorCisJbW92LncJCSYweDAwYTEsRVhDX1ZPRkYoJWE2KQkJIyBzZXQgRlNMVworCWJyYS5iCQlmYWNjX2ZpbmlzaAorCitmYWNjX291dF93OgorCW1vdnEubAkJJjB4MiwlZDAJCQkjIHR3byBieXRlcworCWJzci53CQlyZXN0b3JlCQkJCSMgcmVzdG9yZSBBbgorCisJbW92LncJCSYweDAwYzEsRVhDX1ZPRkYoJWE2KQkJIyBzZXQgRlNMVworCWJyYS5iCQlmYWNjX2ZpbmlzaAorCitmYWNjX291dF9sOgorCW1vdnEubAkJJjB4NCwlZDAJCQkjIGZvdXIgYnl0ZXMKKwlic3IudwkJcmVzdG9yZQkJCQkjIHJlc3RvcmUgQW4KKworCW1vdi53CQkmMHgwMDgxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKKwlicmEuYgkJZmFjY19maW5pc2gKKworZmFjY19vdXRfZDoKKwltb3ZxLmwJCSYweDgsJWQwCQkJIyBlaWdodCBieXRlcworCWJzci53CQlyZXN0b3JlCQkJCSMgcmVzdG9yZSBBbgorCisJbW92LncJCSYweDAwZTEsRVhDX1ZPRkYoJWE2KQkJIyBzZXQgRlNMVworCWJyYS5iCQlmYWNjX2ZpbmlzaAorCitmYWNjX291dF94OgorCW1vdi5sCQkmMHhjLCVkMAkJCSMgdHdlbHZlIGJ5dGVzCisJYnNyLncJCXJlc3RvcmUJCQkJIyByZXN0b3JlIEFuCisKKwltb3YudwkJJjB4MDBlMSxFWENfVk9GRiglYTYpCQkjIHNldCBGU0xXCisKKyMgaGVyZSdzIHdoZXJlIHdlIGFjdHVhbGx5IGNyZWF0ZSB0aGUgYWNjZXNzIGVycm9yIGZyYW1lIGZyb20gdGhlCisjIGN1cnJlbnQgZXhjZXB0aW9uIHN0YWNrIGZyYW1lLgorZmFjY19maW5pc2g6CisJbW92LmwJCVVTRVJfRlBJQVIoJWE2KSxFWENfUEMoJWE2KSAjIHN0b3JlIGN1cnJlbnQgUEMKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CisKKwltb3YubAkJKCVzcCksLSglc3ApCQkjIHN0b3JlIFNSLCBoaShQQykKKwltb3YubAkJMHg4KCVzcCksMHg0KCVzcCkJIyBzdG9yZSBsbyhQQykKKwltb3YubAkJMHhjKCVzcCksMHg4KCVzcCkJIyBzdG9yZSBFQQorCW1vdi5sCQkmMHgwMDAwMDAwMSwweGMoJXNwKQkjIHN0b3JlIEZTTFcKKwltb3YudwkJMHg2KCVzcCksMHhjKCVzcCkJIyBmaXggRlNMVyAoc2l6ZSkKKwltb3YudwkJJjB4NDAwOCwweDYoJXNwKQkjIHN0b3JlIHZvZmYKKworCWJ0c3QJCSYweDUsKCVzcCkJCSMgc3VwZXJ2aXNvciBvciB1c2VyIG1vZGU/CisJYmVxLmIJCWZhY2Nfb3V0MgkJIyB1c2VyCisJYnNldAkJJjB4MiwweGQoJXNwKQkJIyBzZXQgc3VwZXJ2aXNvciBUTSBiaXQKKworZmFjY19vdXQyOgorCWJyYS5sCQlfcmVhbF9hY2Nlc3MKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgaWYgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzaW5nIG1vZGUgd2FzIHByZWRlY3JlbWVudCBvciBwb3N0aW5jcmVtZW50LAorIyB0aGUgZW11bGF0aW9uIGhhcyBhbHJlYWR5IGNoYW5nZWQgaXRzIHZhbHVlIHRvIHRoZSBjb3JyZWN0IHBvc3QtCisjIGluc3RydWN0aW9uIHZhbHVlLiBidXQgc2luY2Ugd2UncmUgZXhpdGluZyB0byB0aGUgYWNjZXNzIGVycm9yCisjIGhhbmRsZXIsIHRoZW4gQU4gbXVzdCBiZSByZXR1cm5lZCB0byBpdHMgcHJlLWluc3RydWN0aW9uIHZhbHVlLgorIyB3ZSBkbyB0aGF0IGhlcmUuCityZXN0b3JlOgorCW1vdi5iCQlFWENfT1BXT1JEKzB4MSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MzgsJWQxCQkjIGV4dHJhY3Qgb3Btb2RlCisJY21waS5iCQklZDEsJjB4MTgJCSMgcG9zdGluYz8KKwliZXEudwkJcmVzdF9pbmMKKwljbXBpLmIJCSVkMSwmMHgyMAkJIyBwcmVkZWM/CisJYmVxLncJCXJlc3RfZGVjCisJcnRzCisKK3Jlc3RfaW5jOgorCW1vdi5iCQlFWENfT1BXT1JEKzB4MSglYTYpLCVkMQorCWFuZGkudwkJJjB4MDAwNywlZDEJCSMgZmV0Y2ggQW4KKworCW1vdi53CQkodGJsX3Jlc3RfaW5jLmIsJXBjLCVkMS53KjIpLCVkMQorCWptcAkJKHRibF9yZXN0X2luYy5iLCVwYywlZDEudyoxKQorCit0YmxfcmVzdF9pbmM6CisJc2hvcnQJCXJpX2EwIC0gdGJsX3Jlc3RfaW5jCisJc2hvcnQJCXJpX2ExIC0gdGJsX3Jlc3RfaW5jCisJc2hvcnQJCXJpX2EyIC0gdGJsX3Jlc3RfaW5jCisJc2hvcnQJCXJpX2EzIC0gdGJsX3Jlc3RfaW5jCisJc2hvcnQJCXJpX2E0IC0gdGJsX3Jlc3RfaW5jCisJc2hvcnQJCXJpX2E1IC0gdGJsX3Jlc3RfaW5jCisJc2hvcnQJCXJpX2E2IC0gdGJsX3Jlc3RfaW5jCisJc2hvcnQJCXJpX2E3IC0gdGJsX3Jlc3RfaW5jCisKK3JpX2EwOgorCXN1Yi5sCQklZDAsRVhDX0RSRUdTKzB4OCglYTYpCSMgZml4IHN0YWNrZWQgYTAKKwlydHMKK3JpX2ExOgorCXN1Yi5sCQklZDAsRVhDX0RSRUdTKzB4YyglYTYpCSMgZml4IHN0YWNrZWQgYTEKKwlydHMKK3JpX2EyOgorCXN1Yi5sCQklZDAsJWEyCQkJIyBmaXggYTIKKwlydHMKK3JpX2EzOgorCXN1Yi5sCQklZDAsJWEzCQkJIyBmaXggYTMKKwlydHMKK3JpX2E0OgorCXN1Yi5sCQklZDAsJWE0CQkJIyBmaXggYTQKKwlydHMKK3JpX2E1OgorCXN1Yi5sCQklZDAsJWE1CQkJIyBmaXggYTUKKwlydHMKK3JpX2E2OgorCXN1Yi5sCQklZDAsKCVhNikJCSMgZml4IHN0YWNrZWQgYTYKKwlydHMKKyMgaWYgaXQncyBhIGZtb3ZlIG91dCBpbnN0cnVjdGlvbiwgd2UgZG9uJ3QgaGF2ZSB0byBmaXggYTcKKyMgYmVjYXVzZSB3ZSBoYWRuJ3QgY2hhbmdlZCBpdCB5ZXQuIGlmIGl0J3MgYW4gb3BjbGFzcyB0d28KKyMgaW5zdHJ1Y3Rpb24gKGRhdGEgbW92ZWQgaW4pIGFuZCB0aGUgZXhjZXB0aW9uIHdhcyBpbiBzdXBlcnZpc29yCisjIG1vZGUsIHRoZW4gYWxzbyBhbHNvIHdhc24ndCB1cGRhdGVkLiBpZiBpdCB3YXMgdXNlciBtb2RlLCB0aGVuCisjIHJlc3RvcmUgdGhlIGNvcnJlY3QgYTcgd2hpY2ggaXMgaW4gdGhlIFVTUCBjdXJyZW50bHkuCityaV9hNzoKKwljbXBpLmIJCUVYQ19WT0ZGKCVhNiksJjB4MzAJIyBtb3ZlIGluIG9yIG91dD8KKwlibmUuYgkJcmlfYTdfZG9uZQkJIyBvdXQKKworCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikJIyB1c2VyIG9yIHN1cGVydmlzb3I/CisJYm5lLmIJCXJpX2E3X2RvbmUJCSMgc3VwZXJ2aXNvcgorCW1vdmMJCSV1c3AsJWEwCQkjIHJlc3RvcmUgVVNQCisJc3ViLmwJCSVkMCwlYTAKKwltb3ZjCQklYTAsJXVzcAorcmlfYTdfZG9uZToKKwlydHMKKworIyBuZWVkIHRvIGludmVydCBhZGp1c3RtZW50IHZhbHVlIGlmIHRoZSA8ZWE+IHdhcyBwcmVkZWMKK3Jlc3RfZGVjOgorCW5lZy5sCQklZDAKKwlicmEuYgkJcmVzdF9pbmMKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvZnRlc3QuUyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvZnRlc3QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWRjYmFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9mdGVzdC5TCkBAIC0wLDAgKzEsMTQ1NiBAQAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitNT1RPUk9MQSBNSUNST1BST0NFU1NPUiAmIE1FTU9SWSBURUNITk9MT0dZIEdST1VQCitNNjgwMDAgSGktUGVyZm9ybWFuY2UgTWljcm9wcm9jZXNzb3IgRGl2aXNpb24KK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlCitQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAorCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RIRSBTT0ZUV0FSRSBpcyBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzIGFuZCB3aXRob3V0IHdhcnJhbnR5LgorVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK01PVE9ST0xBIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCithbmQgYW55IHdhcnJhbnR5IGFnYWluc3QgaW5mcmluZ2VtZW50IHdpdGggcmVnYXJkIHRvIHRoZSBTT0ZUV0FSRQorKElOQ0xVRElORyBBTlkgTU9ESUZJRUQgVkVSU0lPTlMgVEhFUkVPRikgYW5kIGFueSBhY2NvbXBhbnlpbmcgd3JpdHRlbiBtYXRlcmlhbHMuCisKK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitJTiBOTyBFVkVOVCBTSEFMTCBNT1RPUk9MQSBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEJVU0lORVNTIFBST0ZJVFMsCitCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIE9USEVSIFBFQ1VOSUFSWSBMT1NTKQorQVJJU0lORyBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLgorTW90b3JvbGEgYXNzdW1lcyBubyByZXNwb25zaWJpbGl0eSBmb3IgdGhlIG1haW50ZW5hbmNlIGFuZCBzdXBwb3J0IG9mIHRoZSBTT0ZUV0FSRS4KKworWW91IGFyZSBoZXJlYnkgZ3JhbnRlZCBhIGNvcHlyaWdodCBsaWNlbnNlIHRvIHVzZSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGUgU09GVFdBUkUKK3NvIGxvbmcgYXMgdGhpcyBlbnRpcmUgbm90aWNlIGlzIHJldGFpbmVkIHdpdGhvdXQgYWx0ZXJhdGlvbiBpbiBhbnkgbW9kaWZpZWQgYW5kL29yCityZWRpc3RyaWJ1dGVkIHZlcnNpb25zLCBhbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KK05vIGxpY2Vuc2VzIGFyZSBncmFudGVkIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UgdW5kZXIgYW55IHBhdGVudHMKK29yIHRyYWRlbWFya3Mgb2YgTW90b3JvbGEsIEluYy4KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzZXQJU1JFR1MsCQktNjQKK3NldAlJUkVHUywJCS0xMjgKK3NldAlJRlBSRUdTLAktMjI0CitzZXQJU0ZQUkVHUywJLTMyMAorc2V0CUlGUENSRUdTLAktMzMyCitzZXQJU0ZQQ1JFR1MsCS0zNDQKK3NldAlJQ0NSLAkJLTM0Ngorc2V0CVNDQ1IsCQktMzQ4CitzZXQJVEVTVENUUiwJLTM1Mgorc2V0CURBVEEsCQktMzg0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworVEVTVFRPUDoKKwlicmEubAkJXzA2MFRFU1RTXworCXNob3J0CQkweDAwMDAKKworCWJyYS5sCQlfMDYwVEVTVFNfdW5pbXAKKwlzaG9ydAkJMHgwMDAwCisKKwlicmEubAkJXzA2MFRFU1RTX2VuYWJsZQorCXNob3J0CQkweDAwMDAKKworc3RhcnRfc3RyOgorCXN0cmluZwkJIlRlc3RpbmcgNjgwNjAgRlBTUCBzdGFydGVkOlxuIgorCitzdGFydF9zdHJfdW5pbXA6CisJc3RyaW5nCQkiVGVzdGluZyA2ODA2MCBGUFNQIHVuaW1wbGVtZW50ZWQgaW5zdHJ1Y3Rpb24gc3RhcnRlZDpcbiIKKworc3RhcnRfc3RyX2VuYWJsZToKKwlzdHJpbmcJCSJUZXN0aW5nIDY4MDYwIEZQU1AgZXhjZXB0aW9uIGVuYWJsZWQgc3RhcnRlZDpcbiIKKworcGFzc19zdHI6CisJc3RyaW5nCQkicGFzc2VkXG4iCisKK2ZhaWxfc3RyOgorCXN0cmluZwkJIiBmYWlsZWRcbiIKKworCWFsaWduCQkweDQKK2Noa190ZXN0OgorCXRzdC5sCQklZDAKKwlibmUuYgkJdGVzdF9mYWlsCit0ZXN0X3Bhc3M6CisJcGVhCQlwYXNzX3N0ciglcGMpCisJYnNyLmwJCV9wcmludF9zdHIKKwlhZGRxLmwJCSYweDQsJXNwCisJcnRzCit0ZXN0X2ZhaWw6CisJbW92LmwJCSVkMSwtKCVzcCkKKwlic3IubAkJX3ByaW50X251bQorCWFkZHEubAkJJjB4NCwlc3AKKworCXBlYQkJZmFpbF9zdHIoJXBjKQorCWJzci5sCQlfcHJpbnRfc3RyCisJYWRkcS5sCQkmMHg0LCVzcAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK18wNjBURVNUU186CisJbGluawkJJWE2LCYtMzg0CisKKwltb3ZtLmwJCSYweDNmM2MsLSglc3ApCisJZm1vdm0ueAkJJjB4ZmYsLSglc3ApCisKKwlwZWEJCXN0YXJ0X3N0ciglcGMpCisJYnNyLmwJCV9wcmludF9zdHIKKwlhZGRxLmwJCSYweDQsJXNwCisKKyMjIyBlZmZhZGQKKwljbHIubAkJVEVTVENUUiglYTYpCisJcGVhCQllZmZhZGRfc3RyKCVwYykKKwlic3IubAkJX3ByaW50X3N0cgorCWFkZHEubAkJJjB4NCwlc3AKKworCWJzci5sCQllZmZhZGRfMAorCisJYnNyLmwJCWNoa190ZXN0CisKKyMjIyB1bnN1cHAKKwljbHIubAkJVEVTVENUUiglYTYpCisJcGVhCQl1bnN1cHBfc3RyKCVwYykKKwlic3IubAkJX3ByaW50X3N0cgorCWFkZHEubAkJJjB4NCwlc3AKKworCWJzci5sCQl1bnN1cHBfMAorCisJYnNyLmwJCWNoa190ZXN0CisKKyMjIyBvdmZsIG5vbi1tYXNrYWJsZQorCWNsci5sCQlURVNUQ1RSKCVhNikKKwlwZWEJCW92Zmxfbm1fc3RyKCVwYykKKwlic3IubAkJX3ByaW50X3N0cgorCWJzci5sCQlvdmZsX25tXzAKKworCWJzci5sCQljaGtfdGVzdAorCisjIyMgdW5mbCBub24tbWFza2FibGUKKwljbHIubAkJVEVTVENUUiglYTYpCisJcGVhCQl1bmZsX25tX3N0ciglcGMpCisJYnNyLmwJCV9wcmludF9zdHIKKwlic3IubAkJdW5mbF9ubV8wCisKKwlic3IubAkJY2hrX3Rlc3QKKworCW1vdm0ubAkJKCVzcCkrLCYweDNjZmMKKwlmbW92bS54CQkoJXNwKSssJjB4ZmYKKworCXVubGsJCSVhNgorCXJ0cworCitfMDYwVEVTVFNfdW5pbXA6CisJbGluawkJJWE2LCYtMzg0CisKKwltb3ZtLmwJCSYweDNmM2MsLSglc3ApCisJZm1vdm0ueAkJJjB4ZmYsLSglc3ApCisKKwlwZWEJCXN0YXJ0X3N0cl91bmltcCglcGMpCisJYnNyLmwJCV9wcmludF9zdHIKKwlhZGRxLmwJCSYweDQsJXNwCisKKyMjIyB1bmltcAorCWNsci5sCQlURVNUQ1RSKCVhNikKKwlwZWEJCXVuaW1wX3N0ciglcGMpCisJYnNyLmwJCV9wcmludF9zdHIKKwlhZGRxLmwJCSYweDQsJXNwCisKKwlic3IubAkJdW5pbXBfMAorCisJYnNyLmwJCWNoa190ZXN0CisKKwltb3ZtLmwJCSglc3ApKywmMHgzY2ZjCisJZm1vdm0ueAkJKCVzcCkrLCYweGZmCisKKwl1bmxrCQklYTYKKwlydHMKKworXzA2MFRFU1RTX2VuYWJsZToKKwlsaW5rCQklYTYsJi0zODQKKworCW1vdm0ubAkJJjB4M2YzYywtKCVzcCkKKwlmbW92bS54CQkmMHhmZiwtKCVzcCkKKworCXBlYQkJc3RhcnRfc3RyX2VuYWJsZSglcGMpCisJYnNyLmwJCV9wcmludF9zdHIKKwlhZGRxLmwJCSYweDQsJXNwCisKKyMjIyBzbmFuCisJY2xyLmwJCVRFU1RDVFIoJWE2KQorCXBlYQkJc25hbl9zdHIoJXBjKQorCWJzci5sCQlfcHJpbnRfc3RyCisJYnNyLmwJCXNuYW5fMAorCisJYnNyLmwJCWNoa190ZXN0CisKKyMjIyBvcGVycgorCWNsci5sCQlURVNUQ1RSKCVhNikKKwlwZWEJCW9wZXJyX3N0ciglcGMpCisJYnNyLmwJCV9wcmludF9zdHIKKwlic3IubAkJb3BlcnJfMAorCisJYnNyLmwJCWNoa190ZXN0CisKKyMjIyBvdmZsCisJY2xyLmwJCVRFU1RDVFIoJWE2KQorCXBlYQkJb3ZmbF9zdHIoJXBjKQorCWJzci5sCQlfcHJpbnRfc3RyCisJYnNyLmwJCW92ZmxfMAorCisJYnNyLmwJCWNoa190ZXN0CisKKyMjIyB1bmZsCisJY2xyLmwJCVRFU1RDVFIoJWE2KQorCXBlYQkJdW5mbF9zdHIoJXBjKQorCWJzci5sCQlfcHJpbnRfc3RyCisJYnNyLmwJCXVuZmxfMAorCisJYnNyLmwJCWNoa190ZXN0CisKKyMjIyBkegorCWNsci5sCQlURVNUQ1RSKCVhNikKKwlwZWEJCWR6X3N0ciglcGMpCisJYnNyLmwJCV9wcmludF9zdHIKKwlic3IubAkJZHpfMAorCisJYnNyLmwJCWNoa190ZXN0CisKKyMjIyBpbmV4YWN0CisJY2xyLmwJCVRFU1RDVFIoJWE2KQorCXBlYQkJaW5leF9zdHIoJXBjKQorCWJzci5sCQlfcHJpbnRfc3RyCisJYnNyLmwJCWluZXhfMAorCisJYnNyLmwJCWNoa190ZXN0CisKKwltb3ZtLmwJCSglc3ApKywmMHgzY2ZjCisJZm1vdm0ueAkJKCVzcCkrLCYweGZmCisKKwl1bmxrCQklYTYKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordW5pbXBfc3RyOgorCXN0cmluZwkJIlx0VW5pbXBsZW1lbnRlZCBGUCBpbnN0cnVjdGlvbnMuLi4iCisKKwlhbGlnbgkJMHg0Cit1bmltcF8wOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisJZm1vdm0ueAkJREVGX0ZQUkVHUyglcGMpLCYweGZmCisJZm1vdm0ubAkJREVGX0ZQQ1JFR1MoJXBjKSwlZnBjciwlZnBzciwlZnBpYXIKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsSUZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLElGUENSRUdTKCVhNikKKworCW1vdi5sCQkmMHg0MDAwMDAwMCxEQVRBKzB4MCglYTYpCisJbW92LmwJCSYweGM5MGZkYWEyLERBVEErMHg0KCVhNikKKwltb3YubAkJJjB4MjE2OGMyMzUsREFUQSsweDgoJWE2KQorCisJbW92LncJCSYweDAwMDAsJWNjCit1bmltcF8wX3BjOgorCWZzaW4ueAkJREFUQSglYTYpLCVmcDAKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixTRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsU0ZQQ1JFR1MoJWE2KQorCisJbW92LmwJCSYweGJmYmYwMDAwLElGUFJFR1MrMHgwKCVhNikKKwltb3YubAkJJjB4ODAwMDAwMDAsSUZQUkVHUysweDQoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxJRlBSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweDA4MDAwMjA4LElGUENSRUdTKzB4NCglYTYpCisJbGVhCQl1bmltcF8wX3BjKCVwYyksJWEwCisJbW92LmwJCSVhMCxJRlBDUkVHUysweDgoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwlic3IubAkJY2hrZnByZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCit1bmltcF8xOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisJZm1vdm0ueAkJREVGX0ZQUkVHUyglcGMpLCYweGZmCisJZm1vdm0ubAkJREVGX0ZQQ1JFR1MoJXBjKSwlZnBjciwlZnBzciwlZnBpYXIKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsSUZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLElGUENSRUdTKCVhNikKKworCW1vdi5sCQkmMHgzZmZlMDAwMCxEQVRBKzB4MCglYTYpCisJbW92LmwJCSYweGM5MGZkYWEyLERBVEErMHg0KCVhNikKKwltb3YubAkJJjB4MjE2OGMyMzUsREFUQSsweDgoJWE2KQorCisJbW92LncJCSYweDAwMDAsJWNjCit1bmltcF8xX3BjOgorCWZ0YW4ueAkJREFUQSglYTYpLCVmcDAKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixTRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsU0ZQQ1JFR1MoJWE2KQorCisJbW92LmwJCSYweDNmZmYwMDAwLElGUFJFR1MrMHgwKCVhNikKKwltb3YubAkJJjB4ODAwMDAwMDAsSUZQUkVHUysweDQoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxJRlBSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweDAwMDAwMjA4LElGUENSRUdTKzB4NCglYTYpCisJbGVhCQl1bmltcF8xX3BjKCVwYyksJWEwCisJbW92LmwJCSVhMCxJRlBDUkVHUysweDgoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwlic3IubAkJY2hrZnByZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisjIGZtb3ZlY3IKK3VuaW1wXzI6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixJRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsSUZQQ1JFR1MoJWE2KQorCisJbW92LncJCSYweDAwMDAsJWNjCit1bmltcF8yX3BjOgorCWZtb3Zjci54CSYweDMxLCVmcDAKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixTRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsU0ZQQ1JFR1MoJWE2KQorCisJbW92LmwJCSYweDQwMDAwMDAwLElGUFJFR1MrMHgwKCVhNikKKwltb3YubAkJJjB4OTM1ZDhkZGQsSUZQUkVHUysweDQoJWE2KQorCW1vdi5sCQkmMHhhYWE4YWMxNyxJRlBSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweDAwMDAwMjA4LElGUENSRUdTKzB4NCglYTYpCisJbGVhCQl1bmltcF8yX3BjKCVwYyksJWEwCisJbW92LmwJCSVhMCxJRlBDUkVHUysweDgoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwlic3IubAkJY2hrZnByZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisjIGZzY2MKK3VuaW1wXzM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJZm1vdi5sCQkmMHgwZjAwMDAwMCwlZnBzcgorCW1vdi5sCQkmMHgwMCwlZDcKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsSUZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLElGUENSRUdTKCVhNikKKworCW1vdi53CQkmMHgwMDAwLCVjYwordW5pbXBfM19wYzoKKwlmc2d0CQklZDcKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixTRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsU0ZQQ1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwZjAwODA4MCxJRlBDUkVHUysweDQoJWE2KQorCWxlYQkJdW5pbXBfM19wYyglcGMpLCVhMAorCW1vdi5sCQklYTAsSUZQQ1JFR1MrMHg4KCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJYnNyLmwJCWNoa2ZwcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworIyBmZGJjYwordW5pbXBfNDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCWZtb3ZtLngJCURFRl9GUFJFR1MoJXBjKSwmMHhmZgorCWZtb3ZtLmwJCURFRl9GUENSRUdTKCVwYyksJWZwY3IsJWZwc3IsJWZwaWFyCisKKwlmbW92LmwJCSYweDBmMDAwMDAwLCVmcHNyCisJbW92LmwJCSYweDIsJWQ3CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLElGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixJRlBDUkVHUyglYTYpCisKKwltb3YudwkJJjB4MDAwMCwlY2MKK3VuaW1wXzRfcGM6CisJZmRiZ3QudwkJJWQ3LHVuaW1wXzRfcGMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixTRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsU0ZQQ1JFR1MoJWE2KQorCW1vdi53CQkmMHhmZmZmLElSRUdTKzI4KzIoJWE2KQorCW1vdi5sCQkmMHgwZjAwODA4MCxJRlBDUkVHUysweDQoJWE2KQorCWxlYQkJdW5pbXBfNF9wYyglcGMpLCVhMAorCW1vdi5sCQklYTAsSUZQQ1JFR1MrMHg4KCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJYnNyLmwJCWNoa2ZwcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworIyBmdHJhcGNjCit1bmltcF81OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisJZm1vdm0ueAkJREVGX0ZQUkVHUyglcGMpLCYweGZmCisJZm1vdm0ubAkJREVGX0ZQQ1JFR1MoJXBjKSwlZnBjciwlZnBzciwlZnBpYXIKKworCWZtb3YubAkJJjB4MGYwMDAwMDAsJWZwc3IKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsSUZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLElGUENSRUdTKCVhNikKKworCW1vdi53CQkmMHgwMDAwLCVjYwordW5pbXBfNV9wYzoKKwlmdHBndC5sCQkmMHhhYmNkZWYwMQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLFNGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixTRlBDUkVHUyglYTYpCisJbW92LmwJCSYweDBmMDA4MDgwLElGUENSRUdTKzB4NCglYTYpCisJbGVhCQl1bmltcF81X3BjKCVwYyksJWEwCisJbW92LmwJCSVhMCxJRlBDUkVHUysweDgoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwlic3IubAkJY2hrZnByZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJY2xyLmwJCSVkMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZWZmYWRkX3N0cjoKKwlzdHJpbmcJCSJcdFVuaW1wbGVtZW50ZWQgPGVhPi4uLiIKKworCWFsaWduCQkweDQKK2VmZmFkZF8wOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisJZm1vdm0ueAkJREVGX0ZQUkVHUyglcGMpLCYweGZmCisJZm1vdm0ubAkJREVGX0ZQQ1JFR1MoJXBjKSwlZnBjciwlZnBzciwlZnBpYXIKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsSUZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLElGUENSRUdTKCVhNikKKworCWZtb3YuYgkJJjB4MiwlZnAwCisKKwltb3YudwkJJjB4MDAwMCwlY2MKK2VmZmFkZF8wX3BjOgorCWZtdWwueAkJJjB4YzAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwLCVmcDAKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixTRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsU0ZQQ1JFR1MoJWE2KQorCisJbW92LmwJCSYweGMwMDEwMDAwLElGUFJFR1MrMHgwKCVhNikKKwltb3YubAkJJjB4ODAwMDAwMDAsSUZQUkVHUysweDQoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxJRlBSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweDA4MDAwMDAwLElGUENSRUdTKzB4NCglYTYpCisJbGVhCQllZmZhZGRfMF9wYyglcGMpLCVhMAorCW1vdi5sCQklYTAsSUZQQ1JFR1MrMHg4KCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJYnNyLmwJCWNoa2ZwcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWZmYWRkXzE6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixJRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsSUZQQ1JFR1MoJWE2KQorCisJbW92LncJCSYweDAwMDAsJWNjCitlZmZhZGRfMV9wYzoKKwlmYWJzLnAJCSYweGMxMjMwMDAxMjM0NTY3ODkxMjM0NTY3OCwlZnAwCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsU0ZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFNGUENSRUdTKCVhNikKKworCW1vdi5sCQkmMHgzZTY2MDAwMCxJRlBSRUdTKzB4MCglYTYpCisJbW92LmwJCSYweGQwZWQyM2U4LElGUFJFR1MrMHg0KCVhNikKKwltb3YubAkJJjB4ZDE0MDM1YmMsSUZQUkVHUysweDgoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDEwOCxJRlBDUkVHUysweDQoJWE2KQorCWxlYQkJZWZmYWRkXzFfcGMoJXBjKSwlYTAKKwltb3YubAkJJWEwLElGUENSRUdTKzB4OCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWJzci5sCQljaGtmcHJlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2Ztb3ZtbF8wOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisJZm1vdm0ueAkJREVGX0ZQUkVHUyglcGMpLCYweGZmCisJZm1vdm0ubAkJREVGX0ZQQ1JFR1MoJXBjKSwlZnBjciwlZnBzciwlZnBpYXIKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsSUZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLElGUENSRUdTKCVhNikKKworCWZtb3ZtLmwJCSYweGZmZmZmZmZmZmZmZmZmZmYsJWZwY3IsJWZwc3IKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixTRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsU0ZQQ1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwZmZmMCxJRlBDUkVHUysweDAoJWE2KQorCW1vdi5sCQkmMHgwZmZmZmZmOCxJRlBDUkVHUysweDQoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwlic3IubAkJY2hrZnByZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitmbW92bWxfMToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCWZtb3ZtLngJCURFRl9GUFJFR1MoJXBjKSwmMHhmZgorCWZtb3ZtLmwJCURFRl9GUENSRUdTKCVwYyksJWZwY3IsJWZwc3IsJWZwaWFyCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLElGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixJRlBDUkVHUyglYTYpCisKKwlmbW92bS5sCQkmMHhmZmZmZmZmZmZmZmZmZmZmLCVmcGNyLCVmcGlhcgorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLFNGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixTRlBDUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDBmZmYwLElGUENSRUdTKzB4MCglYTYpCisJbW92LmwJCSYweGZmZmZmZmZmLElGUENSRUdTKzB4OCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWJzci5sCQljaGtmcHJlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2Ztb3ZtbF8yOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisJZm1vdm0ueAkJREVGX0ZQUkVHUyglcGMpLCYweGZmCisJZm1vdm0ubAkJREVGX0ZQQ1JFR1MoJXBjKSwlZnBjciwlZnBzciwlZnBpYXIKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsSUZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLElGUENSRUdTKCVhNikKKworCWZtb3ZtLmwJCSYweGZmZmZmZmZmZmZmZmZmZmYsJWZwc3IsJWZwaWFyCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsU0ZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFNGUENSRUdTKCVhNikKKwltb3YubAkJJjB4MGZmZmZmZjgsSUZQQ1JFR1MrMHg0KCVhNikKKwltb3YubAkJJjB4ZmZmZmZmZmYsSUZQQ1JFR1MrMHg4KCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJYnNyLmwJCWNoa2ZwcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZm1vdm1sXzM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixJRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsSUZQQ1JFR1MoJWE2KQorCisJZm1vdm0ubAkJJjB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLFNGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixTRlBDUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDBmZmYwLElGUENSRUdTKzB4MCglYTYpCisJbW92LmwJCSYweDBmZmZmZmY4LElGUENSRUdTKzB4NCglYTYpCisJbW92LmwJCSYweGZmZmZmZmZmLElGUENSRUdTKzB4OCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWJzci5sCQljaGtmcHJlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKyMgZm1vdm14IGR5bmFtaWMKK2Ztb3ZteF8wOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisJZm1vdm0ueAkJREVGX0ZQUkVHUyglcGMpLCYweGZmCisJZm1vdm0ubAkJREVGX0ZQQ1JFR1MoJXBjKSwlZnBjciwlZnBzciwlZnBpYXIKKworCWZtb3YuYgkJJjB4MSwlZnAwCisJZm1vdi5iCQkmMHgyLCVmcDEKKwlmbW92LmIJCSYweDMsJWZwMgorCWZtb3YuYgkJJjB4NCwlZnAzCisJZm1vdi5iCQkmMHg1LCVmcDQKKwlmbW92LmIJCSYweDYsJWZwNQorCWZtb3YuYgkJJjB4NywlZnA2CisJZm1vdi5iCQkmMHg4LCVmcDcKKworCWZtb3YubAkJJjB4MCwlZnBpYXIKKwltb3YubAkJJjB4ZmZmZmZmYWEsJWQwCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLElGUENSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixJRlBSRUdTKCVhNikKKworCW1vdi53CQkmMHgwMDAwLCVjYworCisJZm1vdm0ueAkJJWQwLC0oJXNwKQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKworCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixTRlBDUkVHUyglYTYpCisKKwlmbW92LnMJCSYweDdmODAwMDAwLCVmcDEKKwlmbW92LnMJCSYweDdmODAwMDAwLCVmcDMKKwlmbW92LnMJCSYweDdmODAwMDAwLCVmcDUKKwlmbW92LnMJCSYweDdmODAwMDAwLCVmcDcKKworCWZtb3YueAkJKCVzcCkrLCVmcDEKKwlmbW92LngJCSglc3ApKywlZnAzCisJZm1vdi54CQkoJXNwKSssJWZwNQorCWZtb3YueAkJKCVzcCkrLCVmcDcKKworCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsU0ZQUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWJzci5sCQljaGtmcHJlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2Ztb3ZteF8xOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisJZm1vdm0ueAkJREVGX0ZQUkVHUyglcGMpLCYweGZmCisJZm1vdm0ubAkJREVGX0ZQQ1JFR1MoJXBjKSwlZnBjciwlZnBzciwlZnBpYXIKKworCWZtb3YuYgkJJjB4MSwlZnAwCisJZm1vdi5iCQkmMHgyLCVmcDEKKwlmbW92LmIJCSYweDMsJWZwMgorCWZtb3YuYgkJJjB4NCwlZnAzCisJZm1vdi5iCQkmMHg1LCVmcDQKKwlmbW92LmIJCSYweDYsJWZwNQorCWZtb3YuYgkJJjB4NywlZnA2CisJZm1vdi5iCQkmMHg4LCVmcDcKKworCWZtb3YueAkJJWZwNiwtKCVzcCkKKwlmbW92LngJCSVmcDQsLSglc3ApCisJZm1vdi54CQklZnAyLC0oJXNwKQorCWZtb3YueAkJJWZwMCwtKCVzcCkKKworCWZtb3ZtLngJCSYweGZmLElGUFJFR1MoJWE2KQorCisJZm1vdi5zCQkmMHg3ZjgwMDAwMCwlZnA2CisJZm1vdi5zCQkmMHg3ZjgwMDAwMCwlZnA0CisJZm1vdi5zCQkmMHg3ZjgwMDAwMCwlZnAyCisJZm1vdi5zCQkmMHg3ZjgwMDAwMCwlZnAwCisKKwlmbW92LmwJCSYweDAsJWZwaWFyCisJZm1vdi5sCQkmMHgwLCVmcHNyCisJbW92LmwJCSYweGZmZmZmZmFhLCVkMAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixJRlBDUkVHUyglYTYpCisKKwltb3YudwkJJjB4MDAwMCwlY2MKKworCWZtb3ZtLngJCSglc3ApKywlZDAKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsU0ZQQ1JFR1MoJWE2KQorCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixTRlBSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJYnNyLmwJCWNoa2ZwcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZm1vdm14XzI6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJZm1vdi5iCQkmMHgxLCVmcDAKKwlmbW92LmIJCSYweDIsJWZwMQorCWZtb3YuYgkJJjB4MywlZnAyCisJZm1vdi5iCQkmMHg0LCVmcDMKKwlmbW92LmIJCSYweDUsJWZwNAorCWZtb3YuYgkJJjB4NiwlZnA1CisJZm1vdi5iCQkmMHg3LCVmcDYKKwlmbW92LmIJCSYweDgsJWZwNworCisJZm1vdi5sCQkmMHgwLCVmcGlhcgorCW1vdi5sCQkmMHhmZmZmZmYwMCwlZDAKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsSUZQQ1JFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLElGUFJFR1MoJWE2KQorCisJbW92LncJCSYweDAwMDAsJWNjCisKKwlmbW92bS54CQklZDAsLSglc3ApCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFNGUENSRUdTKCVhNikKKworCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsU0ZQUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWJzci5sCQljaGtmcHJlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwljbHIubAkJJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgVGhpcyB0ZXN0IHdpbGwgdGFrZSBhIG5vbi1tYXNrYWJsZSBvdmVyZmxvdyBkaXJlY3RseS4KK292Zmxfbm1fc3RyOgorCXN0cmluZwkJIlx0Tm9uLW1hc2thYmxlIG92ZXJmbG93Li4uIgorCisJYWxpZ24JCTB4NAorb3ZmbF9ubV8wOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisJZm1vdm0ueAkJREVGX0ZQUkVHUyglcGMpLCYweGZmCisJZm1vdm0ubAkJREVGX0ZQQ1JFR1MoJXBjKSwlZnBjciwlZnBzciwlZnBpYXIKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsSUZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLElGUENSRUdTKCVhNikKKworCWZtb3YuYgkJJjB4MiwlZnAwCisJbW92LmwJCSYweDdmZmUwMDAwLERBVEErMHgwKCVhNikKKwltb3YubAkJJjB4ODAwMDAwMDAsREFUQSsweDQoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxEQVRBKzB4OCglYTYpCisKKwltb3YudwkJJjB4MDAwMCwlY2MKK292Zmxfbm1fMF9wYzoKKwlmbXVsLngJCURBVEEoJWE2KSwlZnAwCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsU0ZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFNGUENSRUdTKCVhNikKKworCW1vdi5sCQkmMHg3ZmZmMDAwMCxJRlBSRUdTKzB4MCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLElGUFJFR1MrMHg0KCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDAsSUZQUkVHUysweDgoJWE2KQorCW1vdi5sCQkmMHgwMjAwMTA0OCxJRlBDUkVHUysweDQoJWE2KQorCWxlYQkJb3ZmbF9ubV8wX3BjKCVwYyksJWEwCisJbW92LmwJCSVhMCxJRlBDUkVHUysweDgoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwlic3IubAkJY2hrZnByZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJY2xyLmwJCSVkMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMgdGVzdCB3aWxsIHRha2UgYW4gb3ZlcmZsb3cgZGlyZWN0bHkuCitvdmZsX3N0cjoKKwlzdHJpbmcJCSJcdEVuYWJsZWQgb3ZlcmZsb3cuLi4iCisKKwlhbGlnbgkJMHg0CitvdmZsXzA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixJRlBSRUdTKCVhNikKKwlmbW92LmwJCSYweDAwMDAxMDAwLCVmcGNyCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLElGUENSRUdTKCVhNikKKworCWZtb3YuYgkJJjB4MiwlZnAwCisJbW92LmwJCSYweDdmZmUwMDAwLERBVEErMHgwKCVhNikKKwltb3YubAkJJjB4ODAwMDAwMDAsREFUQSsweDQoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxEQVRBKzB4OCglYTYpCisKKwltb3YudwkJJjB4MDAwMCwlY2MKK292ZmxfMF9wYzoKKwlmbXVsLngJCURBVEEoJWE2KSwlZnAwCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsU0ZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFNGUENSRUdTKCVhNikKKworCW1vdi5sCQkmMHg3ZmZmMDAwMCxJRlBSRUdTKzB4MCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLElGUFJFR1MrMHg0KCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDAsSUZQUkVHUysweDgoJWE2KQorCW1vdi5sCQkmMHgwMjAwMTA0OCxJRlBDUkVHUysweDQoJWE2KQorCWxlYQkJb3ZmbF8wX3BjKCVwYyksJWEwCisJbW92LmwJCSVhMCxJRlBDUkVHUysweDgoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwlic3IubAkJY2hrZnByZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJY2xyLmwJCSVkMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGlzIHRlc3Qgd2lsbCB0YWtlIGFuIHVuZGVyZmxvdyBkaXJlY3RseS4KK3VuZmxfc3RyOgorCXN0cmluZwkJIlx0RW5hYmxlZCB1bmRlcmZsb3cuLi4iCisKKwlhbGlnbgkJMHg0Cit1bmZsXzA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixJRlBSRUdTKCVhNikKKwlmbW92LmwJCSYweDAwMDAwODAwLCVmcGNyCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLElGUENSRUdTKCVhNikKKworCW1vdi5sCQkmMHgwMDAwMDAwMCxEQVRBKzB4MCglYTYpCisJbW92LmwJCSYweDgwMDAwMDAwLERBVEErMHg0KCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDAsREFUQSsweDgoJWE2KQorCWZtb3ZtLngJCURBVEEoJWE2KSwmMHg4MAorCisJbW92LncJCSYweDAwMDAsJWNjCit1bmZsXzBfcGM6CisJZmRpdi5iCQkmMHgyLCVmcDAKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixTRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsU0ZQQ1JFR1MoJWE2KQorCisJbW92LmwJCSYweDAwMDAwMDAwLElGUFJFR1MrMHgwKCVhNikKKwltb3YubAkJJjB4NDAwMDAwMDAsSUZQUkVHUysweDQoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxJRlBSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweDAwMDAwODAwLElGUENSRUdTKzB4NCglYTYpCisJbGVhCQl1bmZsXzBfcGMoJXBjKSwlYTAKKwltb3YubAkJJWEwLElGUENSRUdTKzB4OCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWJzci5sCQljaGtmcHJlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwljbHIubAkJJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMgdGVzdCB3aWxsIHRha2UgYSBub24tbWFza2FibGUgdW5kZXJmbG93IGRpcmVjdGx5LgordW5mbF9ubV9zdHI6CisJc3RyaW5nCQkiXHROb24tbWFza2FibGUgdW5kZXJmbG93Li4uIgorCisJYWxpZ24JCTB4NAordW5mbF9ubV8wOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisJZm1vdm0ueAkJREVGX0ZQUkVHUyglcGMpLCYweGZmCisJZm1vdm0ubAkJREVGX0ZQQ1JFR1MoJXBjKSwlZnBjciwlZnBzciwlZnBpYXIKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsSUZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLElGUENSRUdTKCVhNikKKworCW1vdi5sCQkmMHgwMDAwMDAwMCxEQVRBKzB4MCglYTYpCisJbW92LmwJCSYweDgwMDAwMDAwLERBVEErMHg0KCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDAsREFUQSsweDgoJWE2KQorCWZtb3ZtLngJCURBVEEoJWE2KSwmMHg4MAorCisJbW92LncJCSYweDAwMDAsJWNjCit1bmZsX25tXzBfcGM6CisJZmRpdi5iCQkmMHgyLCVmcDAKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixTRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsU0ZQQ1JFR1MoJWE2KQorCisJbW92LmwJCSYweDAwMDAwMDAwLElGUFJFR1MrMHgwKCVhNikKKwltb3YubAkJJjB4NDAwMDAwMDAsSUZQUkVHUysweDQoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxJRlBSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweDAwMDAwODAwLElGUENSRUdTKzB4NCglYTYpCisJbGVhCQl1bmZsX25tXzBfcGMoJXBjKSwlYTAKKwltb3YubAkJJWEwLElGUENSRUdTKzB4OCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWJzci5sCQljaGtmcHJlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwljbHIubAkJJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpbmV4X3N0cjoKKwlzdHJpbmcJCSJcdEVuYWJsZWQgaW5leGFjdC4uLiIKKworCWFsaWduCQkweDQKK2luZXhfMDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCWZtb3ZtLngJCURFRl9GUFJFR1MoJXBjKSwmMHhmZgorCWZtb3ZtLmwJCURFRl9GUENSRUdTKCVwYyksJWZwY3IsJWZwc3IsJWZwaWFyCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLElGUFJFR1MoJWE2KQorCWZtb3YubAkJJjB4MDAwMDAyMDAsJWZwY3IJCSMgZW5hYmxlIGluZXhhY3QKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsSUZQQ1JFR1MoJWE2KQorCisJbW92LmwJCSYweDUwMDAwMDAwLERBVEErMHgwKCVhNikKKwltb3YubAkJJjB4ODAwMDAwMDAsREFUQSsweDQoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxEQVRBKzB4OCglYTYpCisJZm1vdm0ueAkJREFUQSglYTYpLCYweDgwCisKKwltb3YudwkJJjB4MDAwMCwlY2MKK2luZXhfMF9wYzoKKwlmYWRkLmIJCSYweDIsJWZwMAorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLFNGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixTRlBDUkVHUyglYTYpCisKKwltb3YubAkJJjB4NTAwMDAwMDAsSUZQUkVHUysweDAoJWE2KQorCW1vdi5sCQkmMHg4MDAwMDAwMCxJRlBSRUdTKzB4NCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLElGUFJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4MDAwMDAyMDgsSUZQQ1JFR1MrMHg0KCVhNikKKwlsZWEJCWluZXhfMF9wYyglcGMpLCVhMAorCW1vdi5sCQklYTAsSUZQQ1JFR1MrMHg4KCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJYnNyLmwJCWNoa2ZwcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWNsci5sCQklZDAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3NuYW5fc3RyOgorCXN0cmluZwkJIlx0RW5hYmxlZCBTTkFOLi4uIgorCisJYWxpZ24JCTB4NAorc25hbl8wOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisJZm1vdm0ueAkJREVGX0ZQUkVHUyglcGMpLCYweGZmCisJZm1vdm0ubAkJREVGX0ZQQ1JFR1MoJXBjKSwlZnBjciwlZnBzciwlZnBpYXIKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsSUZQUkVHUyglYTYpCisJZm1vdi5sCQkmMHgwMDAwNDAwMCwlZnBjcgkJIyBlbmFibGUgU05BTgorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixJRlBDUkVHUyglYTYpCisKKwltb3YubAkJJjB4ZmZmZjAwMDAsREFUQSsweDAoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxEQVRBKzB4NCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAxLERBVEErMHg4KCVhNikKKwlmbW92bS54CQlEQVRBKCVhNiksJjB4ODAKKworCW1vdi53CQkmMHgwMDAwLCVjYworc25hbl8wX3BjOgorCWZhZGQuYgkJJjB4MiwlZnAwCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsU0ZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFNGUENSRUdTKCVhNikKKworCW1vdi5sCQkmMHhmZmZmMDAwMCxJRlBSRUdTKzB4MCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLElGUFJFR1MrMHg0KCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDEsSUZQUkVHUysweDgoJWE2KQorCW1vdi5sCQkmMHgwOTAwNDA4MCxJRlBDUkVHUysweDQoJWE2KQorCWxlYQkJc25hbl8wX3BjKCVwYyksJWEwCisJbW92LmwJCSVhMCxJRlBDUkVHUysweDgoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwlic3IubAkJY2hrZnByZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJY2xyLmwJCSVkMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworb3BlcnJfc3RyOgorCXN0cmluZwkJIlx0RW5hYmxlZCBPUEVSUi4uLiIKKworCWFsaWduCQkweDQKK29wZXJyXzA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixJRlBSRUdTKCVhNikKKwlmbW92LmwJCSYweDAwMDAyMDAwLCVmcGNyCQkjIGVuYWJsZSBPUEVSUgorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixJRlBDUkVHUyglYTYpCisKKwltb3YubAkJJjB4ZmZmZjAwMDAsREFUQSsweDAoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxEQVRBKzB4NCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLERBVEErMHg4KCVhNikKKwlmbW92bS54CQlEQVRBKCVhNiksJjB4ODAKKworCW1vdi53CQkmMHgwMDAwLCVjYworb3BlcnJfMF9wYzoKKwlmYWRkLnMJCSYweDdmODAwMDAwLCVmcDAKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixTRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsU0ZQQ1JFR1MoJWE2KQorCisJbW92LmwJCSYweGZmZmYwMDAwLElGUFJFR1MrMHgwKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDAsSUZQUkVHUysweDQoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxJRlBSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweDAxMDAyMDgwLElGUENSRUdTKzB4NCglYTYpCisJbGVhCQlvcGVycl8wX3BjKCVwYyksJWEwCisJbW92LmwJCSVhMCxJRlBDUkVHUysweDgoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwlic3IubAkJY2hrZnByZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJY2xyLmwJCSVkMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZHpfc3RyOgorCXN0cmluZwkJIlx0RW5hYmxlZCBEWi4uLiIKKworCWFsaWduCQkweDQKK2R6XzA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixJRlBSRUdTKCVhNikKKwlmbW92LmwJCSYweDAwMDAwNDAwLCVmcGNyCQkjIGVuYWJsZSBEWgorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixJRlBDUkVHUyglYTYpCisKKwltb3YubAkJJjB4NDAwMDAwMDAsREFUQSsweDAoJWE2KQorCW1vdi5sCQkmMHg4MDAwMDAwMCxEQVRBKzB4NCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLERBVEErMHg4KCVhNikKKwlmbW92bS54CQlEQVRBKCVhNiksJjB4ODAKKworCW1vdi53CQkmMHgwMDAwLCVjYworZHpfMF9wYzoKKwlmZGl2LmIJCSYweDAsJWZwMAorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLFNGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixTRlBDUkVHUyglYTYpCisKKwltb3YubAkJJjB4NDAwMDAwMDAsSUZQUkVHUysweDAoJWE2KQorCW1vdi5sCQkmMHg4MDAwMDAwMCxJRlBSRUdTKzB4NCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLElGUFJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4MDIwMDA0MTAsSUZQQ1JFR1MrMHg0KCVhNikKKwlsZWEJCWR6XzBfcGMoJXBjKSwlYTAKKwltb3YubAkJJWEwLElGUENSRUdTKzB4OCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWJzci5sCQljaGtmcHJlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwljbHIubAkJJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit1bnN1cHBfc3RyOgorCXN0cmluZwkJIlx0VW5pbXBsZW1lbnRlZCBkYXRhIHR5cGUvZm9ybWF0Li4uIgorCisjIGFuIHVubm9ybWFsaXplZCBudW1iZXIKKwlhbGlnbgkJMHg0Cit1bnN1cHBfMDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCWZtb3ZtLngJCURFRl9GUFJFR1MoJXBjKSwmMHhmZgorCWZtb3ZtLmwJCURFRl9GUENSRUdTKCVwYyksJWZwY3IsJWZwc3IsJWZwaWFyCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLElGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixJRlBDUkVHUyglYTYpCisKKwltb3YubAkJJjB4YzAzZjAwMDAsREFUQSsweDAoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxEQVRBKzB4NCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAxLERBVEErMHg4KCVhNikKKwlmbW92LmIJCSYweDIsJWZwMAorCW1vdi53CQkmMHgwMDAwLCVjYwordW5zdXBwXzBfcGM6CisJZm11bC54CQlEQVRBKCVhNiksJWZwMAorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCWZtb3ZtLngJCSYweGZmLFNGUFJFR1MoJWE2KQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixTRlBDUkVHUyglYTYpCisKKwltb3YubAkJJjB4YzAwMTAwMDAsSUZQUkVHUysweDAoJWE2KQorCW1vdi5sCQkmMHg4MDAwMDAwMCxJRlBSRUdTKzB4NCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLElGUFJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4MDgwMDAwMDAsSUZQQ1JFR1MrMHg0KCVhNikKKwlsZWEJCXVuc3VwcF8wX3BjKCVwYyksJWEwCisJbW92LmwJCSVhMCxJRlBDUkVHUysweDgoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwlic3IubAkJY2hrZnByZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisjIGEgZGVub3JtYWxpemVkIG51bWJlcgordW5zdXBwXzE6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwlmbW92bS54CQlERUZfRlBSRUdTKCVwYyksJjB4ZmYKKwlmbW92bS5sCQlERUZfRlBDUkVHUyglcGMpLCVmcGNyLCVmcHNyLCVmcGlhcgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixJRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsSUZQQ1JFR1MoJWE2KQorCisJbW92LmwJCSYweDgwMDAwMDAwLERBVEErMHgwKCVhNikKKwltb3YubAkJJjB4MDEwMDAwMDAsREFUQSsweDQoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxEQVRBKzB4OCglYTYpCisJZm1vdi5sCQkmMHg3ZmZmZmZmZiwlZnAwCisKKwltb3YudwkJJjB4MDAwMCwlY2MKK3Vuc3VwcF8xX3BjOgorCWZtdWwueAkJREFUQSglYTYpLCVmcDAKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwlmbW92bS54CQkmMHhmZixTRlBSRUdTKCVhNikKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsU0ZQQ1JFR1MoJWE2KQorCisJbW92LmwJCSYweDgwMTcwMDAwLElGUFJFR1MrMHgwKCVhNikKKwltb3YubAkJJjB4ZmZmZmZmZmUsSUZQUkVHUysweDQoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMCxJRlBSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweDA4MDAwMDAwLElGUENSRUdTKzB4NCglYTYpCisJbGVhCQl1bnN1cHBfMV9wYyglcGMpLCVhMAorCW1vdi5sCQklYTAsSUZQQ1JFR1MrMHg4KCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJYnNyLmwJCWNoa2ZwcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworIyBwYWNrZWQKK3Vuc3VwcF8yOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisJZm1vdm0ueAkJREVGX0ZQUkVHUyglcGMpLCYweGZmCisJZm1vdm0ubAkJREVGX0ZQQ1JFR1MoJXBjKSwlZnBjciwlZnBzciwlZnBpYXIKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsSUZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLElGUENSRUdTKCVhNikKKworCW1vdi5sCQkmMHhjMTIzMDAwMSxEQVRBKzB4MCglYTYpCisJbW92LmwJCSYweDIzNDU2Nzg5LERBVEErMHg0KCVhNikKKwltb3YubAkJJjB4MTIzNDU2NzgsREFUQSsweDgoJWE2KQorCisJbW92LncJCSYweDAwMDAsJWNjCit1bnN1cHBfMl9wYzoKKwlmYWJzLnAJCURBVEEoJWE2KSwlZnAwCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJZm1vdm0ueAkJJjB4ZmYsU0ZQUkVHUyglYTYpCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFNGUENSRUdTKCVhNikKKworCW1vdi5sCQkmMHgzZTY2MDAwMCxJRlBSRUdTKzB4MCglYTYpCisJbW92LmwJCSYweGQwZWQyM2U4LElGUFJFR1MrMHg0KCVhNikKKwltb3YubAkJJjB4ZDE0MDM1YmMsSUZQUkVHUysweDgoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDEwOCxJRlBDUkVHUysweDQoJWE2KQorCWxlYQkJdW5zdXBwXzJfcGMoJXBjKSwlYTAKKwltb3YubAkJJWEwLElGUENSRUdTKzB4OCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWJzci5sCQljaGtmcHJlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwljbHIubAkJJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjaGtyZWdzOgorCWxlYQkJSVJFR1MoJWE2KSwlYTAKKwlsZWEJCVNSRUdTKCVhNiksJWExCisJbW92LmwJCSYxNCwlZDAKK2Noa3JlZ3NfbG9vcDoKKwljbXAubAkJKCVhMCkrLCglYTEpKworCWJuZS5sCQljaGtyZWdzX2Vycm9yCisJZGJyYS53CQklZDAsY2hrcmVnc19sb29wCisKKwltb3YudwkJSUNDUiglYTYpLCVkMAorCW1vdi53CQlTQ0NSKCVhNiksJWQxCisJY21wLncJCSVkMCwlZDEKKwlibmUubAkJY2hrcmVnc19lcnJvcgorCisJY2xyLmwJCSVkMAorCXJ0cworCitjaGtyZWdzX2Vycm9yOgorCW1vdnEubAkJJjB4MSwlZDAKKwlydHMKKworZXJyb3I6CisJbW92LmwJCVRFU1RDVFIoJWE2KSwlZDEKKwltb3ZxLmwJCSYweDEsJWQwCisJcnRzCisKK2Noa2ZwcmVnczoKKwlsZWEJCUlGUFJFR1MoJWE2KSwlYTAKKwlsZWEJCVNGUFJFR1MoJWE2KSwlYTEKKwltb3YubAkJJjIzLCVkMAorY2hrZnByZWdzX2xvb3A6CisJY21wLmwJCSglYTApKywoJWExKSsKKwlibmUubAkJY2hrZnByZWdzX2Vycm9yCisJZGJyYS53CQklZDAsY2hrZnByZWdzX2xvb3AKKworCWxlYQkJSUZQQ1JFR1MoJWE2KSwlYTAKKwlsZWEJCVNGUENSRUdTKCVhNiksJWExCisJY21wLmwJCSglYTApKywoJWExKSsKKwlibmUubAkJY2hrZnByZWdzX2Vycm9yCisJY21wLmwJCSglYTApKywoJWExKSsKKwlibmUubAkJY2hrZnByZWdzX2Vycm9yCisJY21wLmwJCSglYTApKywoJWExKSsKKwlibmUubAkJY2hrZnByZWdzX2Vycm9yCisKKwljbHIubAkJJWQwCisJcnRzCisKK2Noa2ZwcmVnc19lcnJvcjoKKwltb3ZxLmwJCSYweDEsJWQwCisJcnRzCisKK0RFRl9SRUdTOgorCWxvbmcJCTB4YWNhY2FjYWMsIDB4YWNhY2FjYWMsIDB4YWNhY2FjYWMsIDB4YWNhY2FjYWMKKwlsb25nCQkweGFjYWNhY2FjLCAweGFjYWNhY2FjLCAweGFjYWNhY2FjLCAweGFjYWNhY2FjCisKKwlsb25nCQkweGFjYWNhY2FjLCAweGFjYWNhY2FjLCAweGFjYWNhY2FjLCAweGFjYWNhY2FjCisJbG9uZwkJMHhhY2FjYWNhYywgMHhhY2FjYWNhYywgMHhhY2FjYWNhYywgMHhhY2FjYWNhYworCitERUZfRlBSRUdTOgorCWxvbmcJCTB4N2ZmZjAwMDAsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYKKwlsb25nCQkweDdmZmYwMDAwLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmCisJbG9uZwkJMHg3ZmZmMDAwMCwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZgorCWxvbmcJCTB4N2ZmZjAwMDAsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYKKwlsb25nCQkweDdmZmYwMDAwLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmCisJbG9uZwkJMHg3ZmZmMDAwMCwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZgorCWxvbmcJCTB4N2ZmZjAwMDAsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYKKwlsb25nCQkweDdmZmYwMDAwLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmCisKK0RFRl9GUENSRUdTOgorCWxvbmcJCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK19wcmludF9zdHI6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKFRFU1RUT1AtMHg4MCsweDAsJXBjKSwlZDAKKwlwZWEJCShURVNUVE9QLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKK19wcmludF9udW06CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKFRFU1RUT1AtMHg4MCsweDQsJXBjKSwlZDAKKwlwZWEJCShURVNUVE9QLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9pbHNwLlMgYi9hcmNoL202OGsvaWZwc3AwNjAvc3JjL2lsc3AuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmE3NDIyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9pbHNwLlMKQEAgLTAsMCArMSw5MzIgQEAKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorTU9UT1JPTEEgTUlDUk9QUk9DRVNTT1IgJiBNRU1PUlkgVEVDSE5PTE9HWSBHUk9VUAorTTY4MDAwIEhpLVBlcmZvcm1hbmNlIE1pY3JvcHJvY2Vzc29yIERpdmlzaW9uCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZQorUHJvZHVjdGlvbiBSZWxlYXNlIFAxLjAwIC0tIE9jdG9iZXIgMTAsIDE5OTQKKworTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IKkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUSEUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitNT1RPUk9MQSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0hFVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorYW5kIGFueSB3YXJyYW50eSBhZ2FpbnN0IGluZnJpbmdlbWVudCB3aXRoIHJlZ2FyZCB0byB0aGUgU09GVFdBUkUKKyhJTkNMVURJTkcgQU5ZIE1PRElGSUVEIFZFUlNJT05TIFRIRVJFT0YpIGFuZCBhbnkgYWNjb21wYW55aW5nIHdyaXR0ZW4gbWF0ZXJpYWxzLgorCitUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorSU4gTk8gRVZFTlQgU0hBTEwgTU9UT1JPTEEgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUyBQUk9GSVRTLAorQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIEJVU0lORVNTIElORk9STUFUSU9OLCBPUiBPVEhFUiBQRUNVTklBUlkgTE9TUykKK0FSSVNJTkcgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTT0ZUV0FSRS4KK01vdG9yb2xhIGFzc3VtZXMgbm8gcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBtYWludGVuYW5jZSBhbmQgc3VwcG9ydCBvZiB0aGUgU09GVFdBUkUuCisKK1lvdSBhcmUgaGVyZWJ5IGdyYW50ZWQgYSBjb3B5cmlnaHQgbGljZW5zZSB0byB1c2UsIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNPRlRXQVJFCitzbyBsb25nIGFzIHRoaXMgZW50aXJlIG5vdGljZSBpcyByZXRhaW5lZCB3aXRob3V0IGFsdGVyYXRpb24gaW4gYW55IG1vZGlmaWVkIGFuZC9vcgorcmVkaXN0cmlidXRlZCB2ZXJzaW9ucywgYW5kIHRoYXQgc3VjaCBtb2RpZmllZCB2ZXJzaW9ucyBhcmUgY2xlYXJseSBpZGVudGlmaWVkIGFzIHN1Y2guCitObyBsaWNlbnNlcyBhcmUgZ3JhbnRlZCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlIHVuZGVyIGFueSBwYXRlbnRzCitvciB0cmFkZW1hcmtzIG9mIE1vdG9yb2xhLCBJbmMuCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyMgbGl0b3AuczoKKyMJVGhpcyBmaWxlIGlzIGFwcGVuZGVkIHRvIHRoZSB0b3Agb2YgdGhlIDA2MEZQTFNQIHBhY2thZ2UKKyMgYW5kIGNvbnRhaW5zIHRoZSBlbnRyeSBwb2ludHMgaW50byB0aGUgcGFja2FnZS4gVGhlIHVzZXIsIGluCisjIGVmZmVjdCwgYnJhbmNoZXMgdG8gb25lIG9mIHRoZSBicmFuY2ggdGFibGUgZW50cmllcyBsb2NhdGVkIGhlcmUuCisjCisKKwlicmEubAlfMDYwTFNQX19pZGl2czY0XworCXNob3J0CTB4MDAwMAorCWJyYS5sCV8wNjBMU1BfX2lkaXZ1NjRfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfMDYwTFNQX19pbXVsczY0XworCXNob3J0CTB4MDAwMAorCWJyYS5sCV8wNjBMU1BfX2ltdWx1NjRfCisJc2hvcnQJMHgwMDAwCisKKwlicmEubAlfMDYwTFNQX19jbXAyX0FiXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV8wNjBMU1BfX2NtcDJfQXdfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJXzA2MExTUF9fY21wMl9BbF8KKwlzaG9ydAkweDAwMDAKKwlicmEubAlfMDYwTFNQX19jbXAyX0RiXworCXNob3J0CTB4MDAwMAorCWJyYS5sCV8wNjBMU1BfX2NtcDJfRHdfCisJc2hvcnQJMHgwMDAwCisJYnJhLmwJXzA2MExTUF9fY21wMl9EbF8KKwlzaG9ydAkweDAwMDAKKworIyBsZWF2ZSByb29tIGZvciBmdXR1cmUgcG9zc2libGUgYWRpdGlvbnMuCisJYWxpZ24JMHgyMDAKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfMDYwTFNQX19pZGl2dTY0XygpOiBFbXVsYXRlIDY0LWJpdCB1bnNpZ25lZCBkaXYgaW5zdHJ1Y3Rpb24uCSMKKyMJXzA2MExTUF9faWRpdnM2NF8oKTogRW11bGF0ZSA2NC1iaXQgc2lnbmVkIGRpdiBpbnN0cnVjdGlvbi4JIworIwkJCQkJCQkJCSMKKyMJVGhpcyBpcyB0aGUgbGlicmFyeSB2ZXJzaW9uIHdoaWNoIGlzIGFjY2Vzc2VkIGFzIGEgc3Vicm91dGluZQkjCisjCWFuZCB0aGVyZWZvcmUgZG9lcyBub3Qgd29yayBleGFjdGx5IGxpa2UgdGhlIDY4MFgwIGRpdntzLHV9LmwJIworIwk2NC1iaXQgZGl2aWRlIGluc3RydWN0aW9uLgkJCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZS4JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCTB4NChzcCkgID0gZGl2aXNvcgkJCQkJCSMKKyMJMHg4KHNwKSAgPSBoaShkaXZpZGVuZCkJCQkJCQkjCisjCTB4YyhzcCkgID0gbG8oZGl2aWRlbmQpCQkJCQkJIworIwkweDEwKHNwKSA9IHBvaW50ZXIgdG8gbG9jYXRpb24gdG8gcGxhY2UgcXVvdGllbnQvcmVtYWluZGVyCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCTB4MTAoc3ApID0gcG9pbnRzIHRvIGxvY2F0aW9uIG9mIHJlbWFpbmRlci9xdW90aWVudC4JCSMKKyMJCSAgIHJlbWFpbmRlciBpcyBpbiBmaXJzdCBsb25nd29yZCwgcXVvdGllbnQgaXMgaW4gMm5kLgkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJZiB0aGUgb3BlcmFuZHMgYXJlIHNpZ25lZCwgbWFrZSB0aGVtIHVuc2lnbmVkIGFuZCBzYXZlIHRoZQkjCisjIHNpZ24gaW5mbyBmb3IgbGF0ZXIuIFNlcGFyYXRlIG91dCBzcGVjaWFsIGNhc2VzIGxpa2UgZGl2aWRlLWJ5LXplcm8JIworIyBvciAzMi1iaXQgZGl2aWRlcyBpZiBwb3NzaWJsZS4gRWxzZSwgdXNlIGEgc3BlY2lhbCBtYXRoIGFsZ29yaXRobQkjCisjIHRvIGNhbGN1bGF0ZSB0aGUgcmVzdWx0LgkJCQkJCSMKKyMJUmVzdG9yZSBzaWduIGluZm8gaWYgc2lnbmVkIGluc3RydWN0aW9uLiBTZXQgdGhlIGNvbmRpdGlvbgkjCisjIGNvZGVzIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBmaW5hbCAicnRzIi4gSWYgdGhlIGRpdmlzb3Igd2FzIGVxdWFsIHRvCSMKKyMgemVybywgdGhlbiBwZXJmb3JtIGEgZGl2aWRlLWJ5LXplcm8gdXNpbmcgYSAxNi1iaXQgaW1wbGVtZW50ZWQJIworIyBkaXZpZGUgaW5zdHJ1Y3Rpb24uIFRoaXMgd2F5LCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBjYW4gcmVjb3JkIHRoYXQJIworIyB0aGUgZXZlbnQgb2NjdXJyZWQgZXZlbiB0aG91Z2ggaXQgbWF5IG5vdCBwb2ludCB0byB0aGUgY29ycmVjdCBwbGFjZS4JIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc2V0CVBPU05FRywJCS0xCitzZXQJTkRJVklTT1IsCS0yCitzZXQJTkRJVklERU5ELAktMworc2V0CUREU0VDT05ELAktNAorc2V0CURETk9STUFMLAktOAorc2V0CUREUVVPVElFTlQsCS0xMgorc2V0CURJVjY0X0NDLAktMTYKKworIyMjIyMjIyMjIworIyBkaXZzLmwgIworIyMjIyMjIyMjIworCWdsb2JhbAkJXzA2MExTUF9faWRpdnM2NF8KK18wNjBMU1BfX2lkaXZzNjRfOgorIyBQUk9MT0dVRSBCRUdJTiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWxpbmsudwkJJWE2LCYtMTYKKwltb3ZtLmwJCSYweDNmMDAsLSglc3ApCQkjIHNhdmUgZDItZDcKKyMJZm1vdm0ubAkJJjB4MCwtKCVzcCkJCSMgc2F2ZSBubyBmcHJlZ3MKKyMgUFJPTE9HVUUgRU5EICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCW1vdi53CQklY2MsRElWNjRfQ0MoJWE2KQorCXN0CQlQT1NORUcoJWE2KQkJIyBzaWduZWQgb3BlcmF0aW9uCisJYnJhLmIJCWxkaXY2NF9jb250CisKKyMjIyMjIyMjIyMKKyMgZGl2dS5sICMKKyMjIyMjIyMjIyMKKwlnbG9iYWwJCV8wNjBMU1BfX2lkaXZ1NjRfCitfMDYwTFNQX19pZGl2dTY0XzoKKyMgUFJPTE9HVUUgQkVHSU4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlsaW5rLncJCSVhNiwmLTE2CisJbW92bS5sCQkmMHgzZjAwLC0oJXNwKQkJIyBzYXZlIGQyLWQ3CisjCWZtb3ZtLmwJCSYweDAsLSglc3ApCQkjIHNhdmUgbm8gZnByZWdzCisjIFBST0xPR1VFIEVORCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwltb3YudwkJJWNjLERJVjY0X0NDKCVhNikKKwlzZgkJUE9TTkVHKCVhNikJCSMgdW5zaWduZWQgb3BlcmF0aW9uCisKK2xkaXY2NF9jb250OgorCW1vdi5sCQkweDgoJWE2KSwlZDcJCSMgZmV0Y2ggZGl2aXNvcgorCisJYmVxLncJCWxkaXY2NGVxMAkJIyBkaXZpc29yIGlzID0gMCEhIQorCisJbW92LmwJCTB4YyglYTYpLCAlZDUJCSMgZ2V0IGRpdmlkZW5kIGhpCisJbW92LmwJCTB4MTAoJWE2KSwgJWQ2CQkjIGdldCBkaXZpZGVuZCBsbworCisjIHNlcGFyYXRlIHNpZ25lZCBhbmQgdW5zaWduZWQgZGl2aWRlCisJdHN0LmIJCVBPU05FRyglYTYpCQkjIHNpZ25lZCBvciB1bnNpZ25lZD8KKwliZXEuYgkJbGRzcGVjaWFsY2FzZXMJCSMgdXNlIHBvc2l0aXZlIGRpdmlkZQorCisjIHNhdmUgdGhlIHNpZ24gb2YgdGhlIGRpdmlzb3IKKyMgbWFrZSBkaXZpc29yIHVuc2lnbmVkIGlmIGl0J3MgbmVnYXRpdmUKKwl0c3QubAkJJWQ3CQkJIyBjaGsgc2lnbiBvZiBkaXZpc29yCisJc2x0CQlORElWSVNPUiglYTYpCQkjIHNhdmUgc2lnbiBvZiBkaXZpc29yCisJYnBsLmIJCWxkc2duZGl2aWRlbmQKKwluZWcubAkJJWQ3CQkJIyBjb21wbGVtZW50IG5lZ2F0aXZlIGRpdmlzb3IKKworIyBzYXZlIHRoZSBzaWduIG9mIHRoZSBkaXZpZGVuZAorIyBtYWtlIGRpdmlkZW5kIHVuc2lnbmVkIGlmIGl0J3MgbmVnYXRpdmUKK2xkc2duZGl2aWRlbmQ6CisJdHN0LmwJCSVkNQkJCSMgY2hrIHNpZ24gb2YgaGkoZGl2aWRlbmQpCisJc2x0CQlORElWSURFTkQoJWE2KQkJIyBzYXZlIHNpZ24gb2YgZGl2aWRlbmQKKwlicGwuYgkJbGRzcGVjaWFsY2FzZXMKKworCW1vdi53CQkmMHgwLCAlY2MJCSMgY2xlYXIgJ1gnIGNjIGJpdAorCW5lZ3gubAkJJWQ2CQkJIyBjb21wbGVtZW50IHNpZ25lZCBkaXZpZGVuZAorCW5lZ3gubAkJJWQ1CisKKyMgZXh0cmFjdCBzb21lIHNwZWNpYWwgY2FzZXM6CisjCS0gaXMgKGRpdmlkZW5kID09IDApID8KKyMJLSBpcyAoaGkoZGl2aWRlbmQpID09IDAgJiYgKGRpdmlzb3IgPD0gbG8oZGl2aWRlbmQpKSkgPyAoMzItYml0IGRpdikKK2xkc3BlY2lhbGNhc2VzOgorCXRzdC5sCQklZDUJCQkjIGlzIChoaShkaXZpZGVuZCkgPT0gMCkKKwlibmUuYgkJbGRub3JtYWxkaXZpZGUJCSMgbm8sIHNvIHRyeSBpdCB0aGUgbG9uZyB3YXkKKworCXRzdC5sCQklZDYJCQkjIGlzIChsbyhkaXZpZGVuZCkgPT0gMCksIHRvbworCWJlcS53CQlsZGRvbmUJCQkjIHllcywgc28gKGRpdmlkZW5kID09IDApCisKKwljbXAubAkJJWQ3LCVkNgkJCSMgaXMgKGRpdmlzb3IgPD0gbG8oZGl2aWRlbmQpKQorCWJscy5iCQlsZDMyYml0ZGl2aWRlCQkjIHllcywgc28gdXNlIDMyIGJpdCBkaXZpZGUKKworCWV4ZwkJJWQ1LCVkNgkJCSMgcSA9IDAsIHIgPSBkaXZpZGVuZAorCWJyYS53CQlsZGl2ZmluaXNoCQkjIGNhbid0IGRpdmlkZSwgd2UncmUgZG9uZS4KKworbGQzMmJpdGRpdmlkZToKKwl0ZGl2dS5sCQklZDcsICVkNTolZDYJCSMgaXQncyBvbmx5IGEgMzIvMzIgYml0IGRpdiEKKworCWJyYS5iCQlsZGl2ZmluaXNoCisKK2xkbm9ybWFsZGl2aWRlOgorIyBsYXN0IHNwZWNpYWwgY2FzZToKKyMJLSBpcyBoaShkaXZpZGVuZCkgPj0gZGl2aXNvciA/IGlmIHllcywgdGhlbiBvdmVyZmxvdworCWNtcC5sCQklZDcsJWQ1CisJYmxzLmIJCWxkZG92ZgkJCSMgYW5zd2VyIHdvbid0IGZpdCBpbiAzMiBiaXRzCisKKyMgcGVyZm9ybSB0aGUgZGl2aWRlIGFsZ29yaXRobToKKwlic3IubAkJbGRjbGFzc2ljYWwJCSMgZG8gaW50IGRpdmlkZQorCisjIHNlcGFyYXRlIGludG8gc2lnbmVkIGFuZCB1bnNpZ25lZCBmaW5pc2hlcy4KK2xkaXZmaW5pc2g6CisJdHN0LmIJCVBPU05FRyglYTYpCQkjIGRvIGRpdnMsIGRpdnUgc2VwYXJhdGVseQorCWJlcS5iCQlsZGRvbmUJCQkjIGRpdnUgaGFzIG5vIHByb2Nlc3NpbmchISEKKworIyBpdCB3YXMgYSBkaXZzLmwsIHNvIGNjb2RlIHNldHRpbmcgaXMgYSBsaXR0bGUgbW9yZSBjb21wbGljYXRlZC4uLgorCXRzdC5iCQlORElWSURFTkQoJWE2KQkJIyByZW1haW5kZXIgaGFzIHNhbWUgc2lnbgorCWJlcS5iCQlsZGNjCQkJIyBhcyBkaXZpZGVuZC4KKwluZWcubAkJJWQ1CQkJIyBzZ24ocmVtKSA9IHNnbihkaXZpZGVuZCkKK2xkY2M6CisJbW92LmIJCU5ESVZJU09SKCVhNiksICVkMAorCWVvci5iCQklZDAsIE5ESVZJREVORCglYTYpCSMgY2hrIGlmIHF1b3RpZW50IGlzIG5lZ2F0aXZlCisJYmVxLmIJCWxkcXBvcwkJCSMgYnJhbmNoIHRvIHF1b3QgcG9zaXRpdmUKKworIyAweDgwMDAwMDAwIGlzIHRoZSBsYXJnZXN0IG51bWJlciByZXByZXNlbnRhYmxlIGFzIGEgMzItYml0IG5lZ2F0aXZlCisjIG51bWJlci4gdGhlIG5lZ2F0aXZlIG9mIDB4ODAwMDAwMDAgaXMgMHg4MDAwMDAwMC4KKwljbXBpLmwJCSVkNiwgJjB4ODAwMDAwMDAJIyB3aWxsICgtcXVvdCkgZml0IGluIDMyIGJpdHM/CisJYmhpLmIJCWxkZG92ZgorCisJbmVnLmwJCSVkNgkJCSMgbWFrZSAoLXF1b3QpIDIncyBjb21wCisKKwlicmEuYgkJbGRkb25lCisKK2xkcXBvczoKKwlidHN0CQkmMHgxZiwgJWQ2CQkjIHdpbGwgKCtxdW90KSBmaXQgaW4gMzIgYml0cz8KKwlibmUuYgkJbGRkb3ZmCisKK2xkZG9uZToKKyMgaWYgdGhlIHJlZ2lzdGVyIG51bWJlcnMgYXJlIHRoZSBzYW1lLCBvbmx5IHRoZSBxdW90aWVudCBnZXRzIHNhdmVkLgorIyBzbywgaWYgd2UgYWx3YXlzIHNhdmUgdGhlIHF1b3RpZW50IHNlY29uZCwgd2Ugc2F2ZSBvdXJzZWx2ZXMgYSBjbXAmYmVxCisJYW5kaS53CQkmMHgxMCxESVY2NF9DQyglYTYpCisJbW92LncJCURJVjY0X0NDKCVhNiksJWNjCisJdHN0LmwJCSVkNgkJCSMgbWF5IHNldCAnTicgY2NvZGUgYml0CisKKyMgaGVyZSwgdGhlIHJlc3VsdCBpcyBpbiBkMSBhbmQgZDAuIHRoZSBjdXJyZW50IHN0cmF0ZWd5IGlzIHRvIHNhdmUKKyMgdGhlIHZhbHVlcyBhdCB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieSBhMC4KKyMgdXNlIG1vdm0gaGVyZSB0byBub3QgZGlzdHVyYiB0aGUgY29uZGl0aW9uIGNvZGVzLgorbGRleGl0OgorCW1vdm0ubAkJJjB4MDA2MCwoWzB4MTQsJWE2XSkJIyBzYXZlIHJlc3VsdAorCisjIEVQSUxPR1VFIEJFR0lOICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCWZtb3ZtLmwJCSglc3ApKywmMHgwCQkjIHJlc3RvcmUgbm8gZnByZWdzCisJbW92bS5sCQkoJXNwKSssJjB4MDBmYwkJIyByZXN0b3JlIGQyLWQ3CisJdW5sawkJJWE2CisjIEVQSUxPR1VFIEVORCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlydHMKKworIyB0aGUgcmVzdWx0IHNob3VsZCBiZSB0aGUgdW5jaGFuZ2VkIGRpdmlkZW5kCitsZGRvdmY6CisJbW92LmwJCTB4YyglYTYpLCAlZDUJCSMgZ2V0IGRpdmlkZW5kIGhpCisJbW92LmwJCTB4MTAoJWE2KSwgJWQ2CQkjIGdldCBkaXZpZGVuZCBsbworCisJYW5kaS53CQkmMHgxYyxESVY2NF9DQyglYTYpCisJb3JpLncJCSYweDAyLERJVjY0X0NDKCVhNikJIyBzZXQgJ1YnIGNjb2RlIGJpdAorCW1vdi53CQlESVY2NF9DQyglYTYpLCVjYworCisJYnJhLmIJCWxkZXhpdAorCitsZGl2NjRlcTA6CisJbW92LmwJCTB4YyglYTYpLChbMHgxNCwlYTZdKQorCW1vdi5sCQkweDEwKCVhNiksKFsweDE0LCVhNl0sMHg0KQorCisJbW92LncJCURJVjY0X0NDKCVhNiksJWNjCisKKyMgRVBJTE9HVUUgQkVHSU4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJZm1vdm0ubAkJKCVzcCkrLCYweDAJCSMgcmVzdG9yZSBubyBmcHJlZ3MKKwltb3ZtLmwJCSglc3ApKywmMHgwMGZjCQkjIHJlc3RvcmUgZDItZDcKKwl1bmxrCQklYTYKKyMgRVBJTE9HVUUgRU5EICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWRpdnUudwkJJjB4MCwlZDAJCSMgZm9yY2UgYSBkaXZieXplcm8gZXhjZXB0aW9uCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaGlzIHJvdXRpbmUgdXNlcyB0aGUgJ2NsYXNzaWNhbCcgQWxnb3JpdGhtIEQgZnJvbSBEb25hbGQgS251dGgncwkjCisjIEFydCBvZiBDb21wdXRlciBQcm9ncmFtbWluZywgdm9sIElJLCBTZW1pbnVtZXJpY2FsIEFsZ29yaXRobXMuCSMKKyMgRm9yIHRoaXMgaW1wbGVtZW50YXRpb24gYj0yKioxNiwgYW5kIHRoZSB0YXJnZXQgaXMgVTFVMlUzVTQvVjFWMiwJIworIyB3aGVyZSBVLFYgYXJlIHdvcmRzIG9mIHRoZSBxdWFkd29yZCBkaXZpZGVuZCBhbmQgbG9uZ3dvcmQgZGl2aXNvciwJIworIyBhbmQgVTEsIFYxIGFyZSB0aGUgbW9zdCBzaWduaWZpY2FudCB3b3Jkcy4JCQkJIworIwkJCQkJCQkJCSMKKyMgVGhlIG1vc3Qgc2lnLiBsb25nd29yZCBvZiB0aGUgNjQgYml0IGRpdmlkZW5kIG11c3QgYmUgaW4gJWQ1LCBsZWFzdAkjCisjIGluICVkNi4gVGhlIGRpdmlzb3IgbXVzdCBiZSBpbiB0aGUgdmFyaWFibGUgZGRpdmlzb3IsIGFuZCB0aGUJCSMKKyMgc2lnbmVkL3Vuc2lnbmVkIGZsYWcgZGR1c2lnbiBtdXN0IGJlIHNldCAoMD11bnNpZ25lZCwxPXNpZ25lZCkuCSMKKyMgVGhlIHF1b3RpZW50IGlzIHJldHVybmVkIGluICVkNiwgcmVtYWluZGVyIGluICVkNSwgdW5sZXNzIHRoZQkJIworIyB2IChvdmVyZmxvdykgYml0IGlzIHNldCBpbiB0aGUgc2F2ZWQgJWNjci4gSWYgb3ZlcmZsb3csIHRoZSBkaXZpZGVuZAkjCisjIGlzIHVuY2hhbmdlZC4JCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2xkY2xhc3NpY2FsOgorIyBpZiB0aGUgZGl2aXNvciBtc3cgaXMgMCwgdXNlIHNpbXBsZXIgYWxnb3JpdGhtIHRoZW4gdGhlIGZ1bGwgYmxvd24KKyMgb25lIGF0IGRka251dGg6CisKKwljbXBpLmwJCSVkNywgJjB4ZmZmZgorCWJoaS5iCQlsZGRrbnV0aAkJIyBnbyB1c2UgRC4gS251dGggYWxnb3JpdGhtCisKKyMgU2luY2UgdGhlIGRpdmlzb3IgaXMgb25seSBhIHdvcmQgKGFuZCBsYXJnZXIgdGhhbiB0aGUgbXNsdyBvZiB0aGUgZGl2aWRlbmQpLAorIyBhIHNpbXBsZXIgYWxnb3JpdGhtIG1heSBiZSB1c2VkIDoKKyMgSW4gdGhlIGdlbmVyYWwgY2FzZSwgZm91ciBxdW90aWVudCB3b3JkcyB3b3VsZCBiZSBjcmVhdGVkIGJ5CisjIGRpdmlkaW5nIHRoZSBkaXZpc29yIHdvcmQgaW50byBlYWNoIGRpdmlkZW5kIHdvcmQuIEluIHRoaXMgY2FzZSwKKyMgdGhlIGZpcnN0IHR3byBxdW90aWVudCB3b3JkcyBtdXN0IGJlIHplcm8sIG9yIG92ZXJmbG93IHdvdWxkIG9jY3VyLgorIyBTaW5jZSB3ZSBhbHJlYWR5IGNoZWNrZWQgdGhpcyBjYXNlIGFib3ZlLCB3ZSBjYW4gdHJlYXQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQKKyMgbG9uZ3dvcmQgb2YgdGhlIGRpdmlkZW5kIGFzICgwKSByZW1haW5kZXIgKHNlZSBLbnV0aCkgYW5kIG1lcmVseSBjb21wbGV0ZQorIyB0aGUgbGFzdCB0d28gZGl2aXNpb25zIHRvIGdldCBhIHF1b3RpZW50IGxvbmd3b3JkIGFuZCB3b3JkIHJlbWFpbmRlcjoKKworCWNsci5sCQklZDEKKwlzd2FwCQklZDUJCQkjIHNhbWUgYXMgcipiIGlmIHByZXZpb3VzIHN0ZXAgcnFkCisJc3dhcAkJJWQ2CQkJIyBnZXQgdTMgdG8gbHN3IHBvc2l0aW9uCisJbW92LncJCSVkNiwgJWQ1CQkjIHJiICsgdTMKKworCWRpdnUudwkJJWQ3LCAlZDUKKworCW1vdi53CQklZDUsICVkMQkJIyBmaXJzdCBxdW90aWVudCB3b3JkCisJc3dhcAkJJWQ2CQkJIyBnZXQgdTQKKwltb3YudwkJJWQ2LCAlZDUJCSMgcmIgKyB1NAorCisJZGl2dS53CQklZDcsICVkNQorCisJc3dhcAkJJWQxCisJbW92LncJCSVkNSwgJWQxCQkjIDJuZCBxdW90aWVudCAnZGlnaXQnCisJY2xyLncJCSVkNQorCXN3YXAJCSVkNQkJCSMgbm93IHJlbWFpbmRlcgorCW1vdi5sCQklZDEsICVkNgkJIyBhbmQgcXVvdGllbnQKKworCXJ0cworCitsZGRrbnV0aDoKKyMgSW4gdGhpcyBhbGdvcml0aG0sIHRoZSBkaXZpc29yIGlzIHRyZWF0ZWQgYXMgYSAyIGRpZ2l0ICh3b3JkKSBudW1iZXIKKyMgd2hpY2ggaXMgZGl2aWRlZCBpbnRvIGEgMyBkaWdpdCAod29yZCkgZGl2aWRlbmQgdG8gZ2V0IG9uZSBxdW90aWVudAorIyBkaWdpdCAod29yZCkuIEFmdGVyIHN1YnRyYWN0aW9uLCB0aGUgZGl2aWRlbmQgaXMgc2hpZnRlZCBhbmQgdGhlCisjIHByb2Nlc3MgcmVwZWF0ZWQuIEJlZm9yZSBiZWdpbm5pbmcsIHRoZSBkaXZpc29yIGFuZCBxdW90aWVudCBhcmUKKyMgJ25vcm1hbGl6ZWQnIHNvIHRoYXQgdGhlIHByb2Nlc3Mgb2YgZXN0aW1hdGluZyB0aGUgcXVvdGllbnQgZGlnaXQKKyMgd2lsbCB5aWVsZCB2ZXJpZmlhYmx5IGNvcnJlY3QgcmVzdWx0cy4uCisKKwljbHIubAkJREROT1JNQUwoJWE2KQkJIyBjb3VudCBvZiBzaGlmdHMgZm9yIG5vcm1hbGl6YXRpb24KKwljbHIuYgkJRERTRUNPTkQoJWE2KQkJIyBjbGVhciBmbGFnIGZvciBxdW90aWVudCBkaWdpdHMKKwljbHIubAkJJWQxCQkJIyAlZDEgd2lsbCBob2xkIHRyaWFsIHF1b3RpZW50CitsZGRuY2hrOgorCWJ0c3QJCSYzMSwgJWQ3CQkjIG11c3Qgd2Ugbm9ybWFsaXplPyBmaXJzdCB3b3JkIG9mCisJYm5lLmIJCWxkZG5vcm1hbGl6ZWQJCSMgZGl2aXNvciAoVjEpIG11c3QgYmUgPj0gNjU1MzYvMgorCWFkZHEubAkJJjB4MSwgREROT1JNQUwoJWE2KQkjIGNvdW50IG5vcm1hbGl6YXRpb24gc2hpZnRzCisJbHNsLmwJCSYweDEsICVkNwkJIyBzaGlmdCB0aGUgZGl2aXNvcgorCWxzbC5sCQkmMHgxLCAlZDYJCSMgc2hpZnQgdTQsdTMgd2l0aCBvdmVyZmxvdyB0byB1MgorCXJveGwubAkJJjB4MSwgJWQ1CQkjIHNoaWZ0IHUxLHUyCisJYnJhLncJCWxkZG5jaGsKK2xkZG5vcm1hbGl6ZWQ6CisKKyMgTm93IGNhbGN1bGF0ZSBhbiBlc3RpbWF0ZSBvZiB0aGUgcXVvdGllbnQgd29yZHMgKG1zdyBmaXJzdCwgdGhlbiBsc3cpLgorIyBUaGUgY29tbWVudHMgdXNlIHN1YnNjcmlwdHMgZm9yIHRoZSBmaXJzdCBxdW90aWVudCBkaWdpdCBkZXRlcm1pbmF0aW9uLgorCW1vdi5sCQklZDcsICVkMwkJIyBkaXZpc29yCisJbW92LmwJCSVkNSwgJWQyCQkjIGRpdmlkZW5kIG1zbHcKKwlzd2FwCQklZDIKKwlzd2FwCQklZDMKKwljbXAudwkJJWQyLCAlZDMJCSMgVjEgPSBVMSA/CisJYm5lLmIJCWxkZHFjYWxjMQorCW1vdi53CQkmMHhmZmZmLCAlZDEJCSMgdXNlIG1heCB0cmlhbCBxdW90aWVudCB3b3JkCisJYnJhLmIJCWxkZGFkajAKK2xkZHFjYWxjMToKKwltb3YubAkJJWQ1LCAlZDEKKworCWRpdnUudwkJJWQzLCAlZDEJCSMgdXNlIHF1b3RpZW50IG9mIG1zbHcvbXN3CisKKwlhbmRpLmwJCSYweDAwMDBmZmZmLCAlZDEJIyB6ZXJvIGFueSByZW1haW5kZXIKK2xkZGFkajA6CisKKyMgbm93IHRlc3QgdGhlIHRyaWFsIHF1b3RpZW50IGFuZCBhZGp1c3QuIFRoaXMgc3RlcCBwbHVzIHRoZQorIyBub3JtYWxpemF0aW9uIGFzc3VyZXMgKGFjY29yZGluZyB0byBLbnV0aCkgdGhhdCB0aGUgdHJpYWwKKyMgcXVvdGllbnQgd2lsbCBiZSBhdCB3b3JzdCAxIHRvbyBsYXJnZS4KKwltb3YubAkJJWQ2LCAtKCVzcCkKKwljbHIudwkJJWQ2CQkJIyB3b3JkIHUzIGxlZnQKKwlzd2FwCQklZDYJCQkjIGluIGxzdyBwb3NpdGlvbgorbGRkYWRqMTogbW92LmwJCSVkNywgJWQzCisJbW92LmwJCSVkMSwgJWQyCisJbXVsdS53CQklZDcsICVkMgkJIyBWMnEKKwlzd2FwCQklZDMKKwltdWx1LncJCSVkMSwgJWQzCQkjIFYxcQorCW1vdi5sCQklZDUsICVkNAkJIyBVMVUyCisJc3ViLmwJCSVkMywgJWQ0CQkjIFUxVTIgLSBWMXEKKworCXN3YXAJCSVkNAorCisJbW92LncJCSVkNCwlZDAKKwltb3YudwkJJWQ2LCVkNAkJCSMgaW5zZXJ0IGxvd2VyIHdvcmQgKFUzKQorCisJdHN0LncJCSVkMAkJCSMgaXMgdXBwZXIgd29yZCBzZXQ/CisJYm5lLncJCWxkZGFkamQxCisKKyMJYWRkLmwJCSVkNiwgJWQ0CQkjIChVMVUyIC0gVjFxKSArIFUzCisKKwljbXAubAkJJWQyLCAlZDQKKwlibHMuYgkJbGRkYWRqZDEJCSMgaXMgVjJxID4gKFUxVTItVjFxKSArIFUzID8KKwlzdWJxLmwJCSYweDEsICVkMQkJIyB5ZXMsIGRlY3JlbWVudCBhbmQgcmVjaGVjaworCWJyYS5iCQlsZGRhZGoxCitsZGRhZGpkMToKKyMgbm93IHRlc3QgdGhlIHdvcmQgYnkgbXVsdGlwbHlpbmcgaXQgYnkgdGhlIGRpdmlzb3IgKFYxVjIpIGFuZCBjb21wYXJpbmcKKyMgdGhlIDMgZGlnaXQgKHdvcmQpIHJlc3VsdCB3aXRoIHRoZSBjdXJyZW50IGRpdmlkZW5kIHdvcmRzCisJbW92LmwJCSVkNSwgLSglc3ApCQkjIHNhdmUgJWQ1ICglZDYgYWxyZWFkeSBzYXZlZCkKKwltb3YubAkJJWQxLCAlZDYKKwlzd2FwCQklZDYJCQkjIHNoaWZ0IGFuc3dlciB0byBtcyAzIHdvcmRzCisJbW92LmwJCSVkNywgJWQ1CisJYnNyLmwJCWxkbW0yCisJbW92LmwJCSVkNSwgJWQyCQkjIG5vdyAlZDIsJWQzIGFyZSB0cmlhbCpkaXZpc29yCisJbW92LmwJCSVkNiwgJWQzCisJbW92LmwJCSglc3ApKywgJWQ1CQkjIHJlc3RvcmUgZGl2aWRlbmQKKwltb3YubAkJKCVzcCkrLCAlZDYKKwlzdWIubAkJJWQzLCAlZDYKKwlzdWJ4LmwJCSVkMiwgJWQ1CQkjIHN1YnRyYWN0IGRvdWJsZSBwcmVjaXNpb24KKwliY2MJCWxkZDJuZAkJCSMgbm8gY2FycnksIGRvIG5leHQgcXVvdGllbnQgZGlnaXQKKwlzdWJxLmwJCSYweDEsICVkMQkJIyBxIGlzIG9uZSB0b28gbGFyZ2UKKyMgbmVlZCB0byBhZGQgYmFjayBkaXZpc29yIGxvbmd3b3JkIHRvIGN1cnJlbnQgbXMgMyBkaWdpdHMgb2YgZGl2aWRlbmQKKyMgLSBhY2NvcmRpbmcgdG8gS251dGgsIHRoaXMgaXMgZG9uZSBvbmx5IDIgb3V0IG9mIDY1NTM2IHRpbWVzIGZvciByYW5kb20KKyMgZGl2aXNvciwgZGl2aWRlbmQgc2VsZWN0aW9uLgorCWNsci5sCQklZDIKKwltb3YubAkJJWQ3LCAlZDMKKwlzd2FwCQklZDMKKwljbHIudwkJJWQzCQkJIyAlZDMgbm93IGxzIHdvcmQgb2YgZGl2aXNvcgorCWFkZC5sCQklZDMsICVkNgkJIyBhbGlnbmVkIHdpdGggM3JkIHdvcmQgb2YgZGl2aWRlbmQKKwlhZGR4LmwJCSVkMiwgJWQ1CisJbW92LmwJCSVkNywgJWQzCisJY2xyLncJCSVkMwkJCSMgJWQzIG5vdyBtcyB3b3JkIG9mIGRpdmlzb3IKKwlzd2FwCQklZDMJCQkjIGFsaWduZWQgd2l0aCAybmQgd29yZCBvZiBkaXZpZGVuZAorCWFkZC5sCQklZDMsICVkNQorbGRkMm5kOgorCXRzdC5iCQlERFNFQ09ORCglYTYpCSMgYm90aCBxIHdvcmRzIGRvbmU/CisJYm5lLmIJCWxkZHJlbWFpbgorIyBmaXJzdCBxdW90aWVudCBkaWdpdCBub3cgY29ycmVjdC4gc3RvcmUgZGlnaXQgYW5kIHNoaWZ0IHRoZQorIyAoc3VidHJhY3RlZCkgZGl2aWRlbmQKKwltb3YudwkJJWQxLCBERFFVT1RJRU5UKCVhNikKKwljbHIubAkJJWQxCisJc3dhcAkJJWQ1CisJc3dhcAkJJWQ2CisJbW92LncJCSVkNiwgJWQ1CisJY2xyLncJCSVkNgorCXN0CQlERFNFQ09ORCglYTYpCQkjIHNlY29uZCBkaWdpdAorCWJyYS53CQlsZGRub3JtYWxpemVkCitsZGRyZW1haW46CisjIGFkZCAybmQgd29yZCB0byBxdW90aWVudCwgZ2V0IHRoZSByZW1haW5kZXIuCisJbW92LncJCSVkMSwgRERRVU9USUVOVCsyKCVhNikKKyMgc2hpZnQgZG93biBvbmUgd29yZC9kaWdpdCB0byByZW5vcm1hbGl6ZSByZW1haW5kZXIuCisJbW92LncJCSVkNSwgJWQ2CisJc3dhcAkJJWQ2CisJc3dhcAkJJWQ1CisJbW92LmwJCURETk9STUFMKCVhNiksICVkNwkjIGdldCBub3JtIHNoaWZ0IGNvdW50CisJYmVxLmIJCWxkZHJuCisJc3VicS5sCQkmMHgxLCAlZDcJCSMgc2V0IGZvciBsb29wIGNvdW50CitsZGRubHA6CisJbHNyLmwJCSYweDEsICVkNQkJIyBzaGlmdCBpbnRvICVkNgorCXJveHIubAkJJjB4MSwgJWQ2CisJZGJmCQklZDcsIGxkZG5scAorbGRkcm46CisJbW92LmwJCSVkNiwgJWQ1CQkjIHJlbWFpbmRlcgorCW1vdi5sCQlERFFVT1RJRU5UKCVhNiksICVkNgkjIHF1b3RpZW50CisKKwlydHMKK2xkbW0yOgorIyBmYWN0b3JzIGZvciB0aGUgMzJYMzItPjY0IG11bHRpcGxpY2F0aW9uIGFyZSBpbiAlZDUgYW5kICVkNi4KKyMgcmV0dXJucyA2NCBiaXQgcmVzdWx0IGluICVkNSAoaGkpICVkNihsbykuCisjIGRlc3Ryb3lzICVkMiwlZDMsJWQ0LgorCisjIG11bHRpcGx5IGhpLGxvIHdvcmRzIG9mIGVhY2ggZmFjdG9yIHRvIGdldCA0IGludGVybWVkaWF0ZSBwcm9kdWN0cworCW1vdi5sCQklZDYsICVkMgorCW1vdi5sCQklZDYsICVkMworCW1vdi5sCQklZDUsICVkNAorCXN3YXAJCSVkMworCXN3YXAJCSVkNAorCW11bHUudwkJJWQ1LCAlZDYJCSMgJWQ2IDwtIGxzdypsc3cKKwltdWx1LncJCSVkMywgJWQ1CQkjICVkNSA8LSBtc3ctZGVzdCpsc3ctc291cmNlCisJbXVsdS53CQklZDQsICVkMgkJIyAlZDIgPC0gbXN3LXNvdXJjZSpsc3ctZGVzdAorCW11bHUudwkJJWQ0LCAlZDMJCSMgJWQzIDwtIG1zdyptc3cKKyMgbm93IHVzZSBzd2FwIGFuZCBhZGR4IHRvIGNvbnNvbGlkYXRlIHRvIHR3byBsb25nd29yZHMKKwljbHIubAkJJWQ0CisJc3dhcAkJJWQ2CisJYWRkLncJCSVkNSwgJWQ2CQkjIGFkZCBtc3cgb2YgbCpsIHRvIGxzdyBvZiBtKmwgcHJvZHVjdAorCWFkZHgudwkJJWQ0LCAlZDMJCSMgYWRkIGFueSBjYXJyeSB0byBtKm0gcHJvZHVjdAorCWFkZC53CQklZDIsICVkNgkJIyBhZGQgaW4gbHN3IG9mIG90aGVyIG0qbCBwcm9kdWN0CisJYWRkeC53CQklZDQsICVkMwkJIyBhZGQgYW55IGNhcnJ5IHRvIG0qbSBwcm9kdWN0CisJc3dhcAkJJWQ2CQkJIyAlZDYgaXMgbG93IDMyIGJpdHMgb2YgZmluYWwgcHJvZHVjdAorCWNsci53CQklZDUKKwljbHIudwkJJWQyCQkJIyBsc3cgb2YgdHdvIG1peGVkIHByb2R1Y3RzIHVzZWQsCisJc3dhcAkJJWQ1CQkJIyBub3cgdXNlIG1zd3Mgb2YgbG9uZ3dvcmRzCisJc3dhcAkJJWQyCisJYWRkLmwJCSVkMiwgJWQ1CisJYWRkLmwJCSVkMywgJWQ1CSMgJWQ1IG5vdyBtcyAzMiBiaXRzIG9mIGZpbmFsIHByb2R1Y3QKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfMDYwTFNQX19pbXVsdTY0XygpOiBFbXVsYXRlIDY0LWJpdCB1bnNpZ25lZCBtdWwgaW5zdHJ1Y3Rpb24JIworIwlfMDYwTFNQX19pbXVsczY0XygpOiBFbXVsYXRlIDY0LWJpdCBzaWduZWQgbXVsIGluc3RydWN0aW9uLgkjCisjCQkJCQkJCQkJIworIwlUaGlzIGlzIHRoZSBsaWJyYXJ5IHZlcnNpb24gd2hpY2ggaXMgYWNjZXNzZWQgYXMgYSBzdWJyb3V0aW5lCSMKKyMJYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCB3b3JrIGV4YWN0bHkgbGlrZSB0aGUgNjgwWDAgbXVse3MsdX0ubAkjCisjCTY0LWJpdCBtdWx0aXBseSBpbnN0cnVjdGlvbi4JCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCTB4NChzcCkgPSBtdWx0aXBsaWVyCQkJCQkJIworIwkweDgoc3ApID0gbXVsdGlwbGljYW5kCQkJCQkJIworIwkweGMoc3ApID0gcG9pbnRlciB0byBsb2NhdGlvbiB0byBwbGFjZSA2NC1iaXQgcmVzdWx0CQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkweGMoc3ApID0gcG9pbnRzIHRvIGxvY2F0aW9uIG9mIDY0LWJpdCByZXN1bHQJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlQZXJmb3JtIHRoZSBtdWx0aXBseSBpbiBwaWVjZXMgdXNpbmcgMTZ4MTYtPjMyIHVuc2lnbmVkCQkjCisjIG11bHRpcGxpZXMgYW5kICJhZGQiIGluc3RydWN0aW9ucy4JCQkJCSMKKyMJU2V0IHRoZSBjb25kaXRpb24gY29kZXMgYXMgYXBwcm9wcmlhdGUgYmVmb3JlIHBlcmZvcm1pbmcgYW4JIworIyAicnRzIi4JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3NldCBNVUw2NF9DQywgLTQKKworCWdsb2JhbAkJXzA2MExTUF9faW11bHU2NF8KK18wNjBMU1BfX2ltdWx1NjRfOgorCisjIFBST0xPR1VFIEJFR0lOICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJbGluay53CQklYTYsJi00CisJbW92bS5sCQkmMHgzODAwLC0oJXNwKQkJIyBzYXZlIGQyLWQ0CisjCWZtb3ZtLmwJCSYweDAsLSglc3ApCQkjIHNhdmUgbm8gZnByZWdzCisjIFBST0xPR1VFIEVORCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwltb3YudwkJJWNjLE1VTDY0X0NDKCVhNikJIyBzYXZlIGluY29taW5nIGNjb2RlcworCisJbW92LmwJCTB4OCglYTYpLCVkMAkJIyBzdG9yZSBtdWx0aXBsaWVyIGluIGQwCisJYmVxLncJCW11bHU2NF96ZXJvCQkjIGhhbmRsZSB6ZXJvIHNlcGFyYXRlbHkKKworCW1vdi5sCQkweGMoJWE2KSwlZDEJCSMgZ2V0IG11bHRpcGxpY2FuZCBpbiBkMQorCWJlcS53CQltdWx1NjRfemVybwkJIyBoYW5kbGUgemVybyBzZXBhcmF0ZWx5CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJNjMJCQkgICAzMgkJCQkwCSMKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCQkJIworIwl8IGhpKG1wbGllcikgKiBoaShtcGxpY2FuZCl8CQkJCQkjCisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JCQkJCSMKKyMJCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JCQkjCisjCQkgICAgIHwgaGkobXBsaWVyKSAqIGxvKG1wbGljYW5kKSB8CQkJIworIwkJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCSMKKyMJCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JCQkjCisjCQkgICAgIHwgbG8obXBsaWVyKSAqIGhpKG1wbGljYW5kKSB8CQkJIworIwkJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCSMKKyMJICB8CQkJICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JIworIwktLXwtLQkJCSAgIHwgbG8obXBsaWVyKSAqIGxvKG1wbGljYW5kKSB8CSMKKyMJICB8CQkJICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JIworIwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQkjCisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSMKKyMJfAloaShyZXN1bHQpCSAgIHwJICAgIGxvKHJlc3VsdCkgICAgICAgICB8CSMKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbXVsdTY0X2FsZzoKKyMgbG9hZCB0ZW1wIHJlZ2lzdGVycyB3aXRoIG9wZXJhbmRzCisJbW92LmwJCSVkMCwlZDIJCQkjIG1yIGluIGQyCisJbW92LmwJCSVkMCwlZDMJCQkjIG1yIGluIGQzCisJbW92LmwJCSVkMSwlZDQJCQkjIG1kIGluIGQ0CisJc3dhcAkJJWQzCQkJIyBoaShtcikgaW4gbG8gZDMKKwlzd2FwCQklZDQJCQkjIGhpKG1kKSBpbiBsbyBkNAorCisjIGNvbXBsZXRlIG5lY2Vzc2FyeSBtdWx0aXBsaWVzOgorCW11bHUudwkJJWQxLCVkMAkJCSMgWzFdIGxvKG1yKSAqIGxvKG1kKQorCW11bHUudwkJJWQzLCVkMQkJCSMgWzJdIGhpKG1yKSAqIGxvKG1kKQorCW11bHUudwkJJWQ0LCVkMgkJCSMgWzNdIGxvKG1yKSAqIGhpKG1kKQorCW11bHUudwkJJWQ0LCVkMwkJCSMgWzRdIGhpKG1yKSAqIGhpKG1kKQorCisjIGFkZCBsbyBwb3J0aW9ucyBvZiBbMl0sWzNdIHRvIGhpIHBvcnRpb24gb2YgWzFdLgorIyBhZGQgY2FycmllcyBwcm9kdWNlZCBmcm9tIHRoZXNlIGFkZHMgdG8gWzRdLgorIyBsbyhbMV0pIGlzIHRoZSBmaW5hbCBsbyAxNiBiaXRzIG9mIHRoZSByZXN1bHQuCisJY2xyLmwJCSVkNAkJCSMgbG9hZCBkNCB3LyB6ZXJvIHZhbHVlCisJc3dhcAkJJWQwCQkJIyBoaShbMV0pIDw9PT4gbG8oWzFdKQorCWFkZC53CQklZDEsJWQwCQkJIyBoaShbMV0pICsgbG8oWzJdKQorCWFkZHgubAkJJWQ0LCVkMwkJCSMgICAgWzRdICArIGNhcnJ5CisJYWRkLncJCSVkMiwlZDAJCQkjIGhpKFsxXSkgKyBsbyhbM10pCisJYWRkeC5sCQklZDQsJWQzCQkJIyAgICBbNF0gICsgY2FycnkKKwlzd2FwCQklZDAJCQkjIGxvKFsxXSkgPD09PiBoaShbMV0pCisKKyMgbG8gcG9ydGlvbnMgb2YgWzJdLFszXSBoYXZlIGJlZW4gYWRkZWQgaW4gdG8gZmluYWwgcmVzdWx0LgorIyBub3csIGNsZWFyIGxvLCBwdXQgaGkgaW4gbG8gcmVnLCBhbmQgYWRkIHRvIFs0XQorCWNsci53CQklZDEJCQkjIGNsZWFyIGxvKFsyXSkKKwljbHIudwkJJWQyCQkJIyBjbGVhciBoaShbM10pCisJc3dhcAkJJWQxCQkJIyBoaShbMl0pIGluIGxvIGQxCisJc3dhcAkJJWQyCQkJIyBoaShbM10pIGluIGxvIGQyCisJYWRkLmwJCSVkMiwlZDEJCQkjICAgIFs0XSAgKyBoaShbMl0pCisJYWRkLmwJCSVkMywlZDEJCQkjICAgIFs0XSAgKyBoaShbM10pCisKKyMgbm93LCBncmFiIHRoZSBjb25kaXRpb24gY29kZXMuIG9ubHkgb25lIHRoYXQgY2FuIGJlIHNldCBpcyAnTicuCisjICdOJyBDQU4gYmUgc2V0IGlmIHRoZSBvcGVyYXRpb24gaXMgdW5zaWduZWQgaWYgYml0IDYzIGlzIHNldC4KKwltb3YudwkJTVVMNjRfQ0MoJWE2KSwlZDQKKwlhbmRpLmIJCSYweDEwLCVkNAkJIyBrZWVwIG9sZCAnWCcgYml0CisJdHN0LmwJCSVkMQkJCSMgbWF5IHNldCAnTicgYml0CisJYnBsLmIJCW11bHU2NF9kZG9uZQorCW9yaS5iCQkmMHg4LCVkNAkJIyBzZXQgJ04nIGJpdAorbXVsdTY0X2Rkb25lOgorCW1vdi53CQklZDQsJWNjCisKKyMgaGVyZSwgdGhlIHJlc3VsdCBpcyBpbiBkMSBhbmQgZDAuIHRoZSBjdXJyZW50IHN0cmF0ZWd5IGlzIHRvIHNhdmUKKyMgdGhlIHZhbHVlcyBhdCB0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieSBhMC4KKyMgdXNlIG1vdm0gaGVyZSB0byBub3QgZGlzdHVyYiB0aGUgY29uZGl0aW9uIGNvZGVzLgorbXVsdTY0X2VuZDoKKwlleGcJCSVkMSwlZDAKKwltb3ZtLmwJCSYweDAwMDMsKFsweDEwLCVhNl0pCQkjIHNhdmUgcmVzdWx0CisKKyMgRVBJTE9HVUUgQkVHSU4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJZm1vdm0ubAkJKCVzcCkrLCYweDAJCSMgcmVzdG9yZSBubyBmcHJlZ3MKKwltb3ZtLmwJCSglc3ApKywmMHgwMDFjCQkjIHJlc3RvcmUgZDItZDQKKwl1bmxrCQklYTYKKyMgRVBJTE9HVUUgRU5EICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCXJ0cworCisjIG9uZSBvciBib3RoIG9mIHRoZSBvcGVyYW5kcyBpcyB6ZXJvIHNvIHRoZSByZXN1bHQgaXMgYWxzbyB6ZXJvLgorIyBzYXZlIHRoZSB6ZXJvIHJlc3VsdCB0byB0aGUgcmVnaXN0ZXIgZmlsZSBhbmQgc2V0IHRoZSAnWicgY2NvZGUgYml0LgorbXVsdTY0X3plcm86CisJY2xyLmwJCSVkMAorCWNsci5sCQklZDEKKworCW1vdi53CQlNVUw2NF9DQyglYTYpLCVkNAorCWFuZGkuYgkJJjB4MTAsJWQ0CisJb3JpLmIJCSYweDQsJWQ0CisJbW92LncJCSVkNCwlY2MJCQkjIHNldCAnWicgY2NvZGUgYml0CisKKwlicmEuYgkJbXVsdTY0X2VuZAorCisjIyMjIyMjIyMjCisjIG11bHMubCAjCisjIyMjIyMjIyMjCisJZ2xvYmFsCQlfMDYwTFNQX19pbXVsczY0XworXzA2MExTUF9faW11bHM2NF86CisKKyMgUFJPTE9HVUUgQkVHSU4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlsaW5rLncJCSVhNiwmLTQKKwltb3ZtLmwJCSYweDNjMDAsLSglc3ApCQkjIHNhdmUgZDItZDUKKyMJZm1vdm0ubAkJJjB4MCwtKCVzcCkJCSMgc2F2ZSBubyBmcHJlZ3MKKyMgUFJPTE9HVUUgRU5EICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCW1vdi53CQklY2MsTVVMNjRfQ0MoJWE2KQkjIHNhdmUgaW5jb21pbmcgY2NvZGVzCisKKwltb3YubAkJMHg4KCVhNiksJWQwCQkjIHN0b3JlIG11bHRpcGxpZXIgaW4gZDAKKwliZXEuYgkJbXVsdTY0X3plcm8JCSMgaGFuZGxlIHplcm8gc2VwYXJhdGVseQorCisJbW92LmwJCTB4YyglYTYpLCVkMQkJIyBnZXQgbXVsdGlwbGljYW5kIGluIGQxCisJYmVxLmIJCW11bHU2NF96ZXJvCQkjIGhhbmRsZSB6ZXJvIHNlcGFyYXRlbHkKKworCWNsci5iCQklZDUJCQkjIGNsZWFyIHNpZ24gdGFnCisJdHN0LmwJCSVkMAkJCSMgaXMgbXVsdGlwbGllciBuZWdhdGl2ZT8KKwliZ2UuYgkJbXVsczY0X2Noa19tZF9zZ24JIyBubworCW5lZy5sCQklZDAJCQkjIG1ha2UgbXVsdGlwbGllciBwb3NpdGl2ZQorCisJb3JpLmIJCSYweDEsJWQ1CQkjIHNhdmUgbXVsdGlwbGllciBzZ24KKworIyB0aGUgcmVzdWx0IHNpZ24gaXMgdGhlIGV4Y2x1c2l2ZSBvciBvZiB0aGUgb3BlcmFuZCBzaWduIGJpdHMuCittdWxzNjRfY2hrX21kX3NnbjoKKwl0c3QubAkJJWQxCQkJIyBpcyBtdWx0aXBsaWNhbmQgbmVnYXRpdmU/CisJYmdlLmIJCW11bHM2NF9hbGcJCSMgbm8KKwluZWcubAkJJWQxCQkJIyBtYWtlIG11bHRpcGxpY2FuZCBwb3NpdGl2ZQorCisJZW9yaS5iCQkmMHgxLCVkNQkJIyBjYWxjdWxhdGUgY29ycmVjdCBzaWduCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJNjMJCQkgICAzMgkJCQkwCSMKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCQkJIworIwl8IGhpKG1wbGllcikgKiBoaShtcGxpY2FuZCl8CQkJCQkjCisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JCQkJCSMKKyMJCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JCQkjCisjCQkgICAgIHwgaGkobXBsaWVyKSAqIGxvKG1wbGljYW5kKSB8CQkJIworIwkJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCSMKKyMJCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JCQkjCisjCQkgICAgIHwgbG8obXBsaWVyKSAqIGhpKG1wbGljYW5kKSB8CQkJIworIwkJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCSMKKyMJICB8CQkJICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JIworIwktLXwtLQkJCSAgIHwgbG8obXBsaWVyKSAqIGxvKG1wbGljYW5kKSB8CSMKKyMJICB8CQkJICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JIworIwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQkjCisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSMKKyMJfAloaShyZXN1bHQpCSAgIHwJICAgIGxvKHJlc3VsdCkgICAgICAgICB8CSMKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbXVsczY0X2FsZzoKKyMgbG9hZCB0ZW1wIHJlZ2lzdGVycyB3aXRoIG9wZXJhbmRzCisJbW92LmwJCSVkMCwlZDIJCQkjIG1yIGluIGQyCisJbW92LmwJCSVkMCwlZDMJCQkjIG1yIGluIGQzCisJbW92LmwJCSVkMSwlZDQJCQkjIG1kIGluIGQ0CisJc3dhcAkJJWQzCQkJIyBoaShtcikgaW4gbG8gZDMKKwlzd2FwCQklZDQJCQkjIGhpKG1kKSBpbiBsbyBkNAorCisjIGNvbXBsZXRlIG5lY2Vzc2FyeSBtdWx0aXBsaWVzOgorCW11bHUudwkJJWQxLCVkMAkJCSMgWzFdIGxvKG1yKSAqIGxvKG1kKQorCW11bHUudwkJJWQzLCVkMQkJCSMgWzJdIGhpKG1yKSAqIGxvKG1kKQorCW11bHUudwkJJWQ0LCVkMgkJCSMgWzNdIGxvKG1yKSAqIGhpKG1kKQorCW11bHUudwkJJWQ0LCVkMwkJCSMgWzRdIGhpKG1yKSAqIGhpKG1kKQorCisjIGFkZCBsbyBwb3J0aW9ucyBvZiBbMl0sWzNdIHRvIGhpIHBvcnRpb24gb2YgWzFdLgorIyBhZGQgY2FycmllcyBwcm9kdWNlZCBmcm9tIHRoZXNlIGFkZHMgdG8gWzRdLgorIyBsbyhbMV0pIGlzIHRoZSBmaW5hbCBsbyAxNiBiaXRzIG9mIHRoZSByZXN1bHQuCisJY2xyLmwJCSVkNAkJCSMgbG9hZCBkNCB3LyB6ZXJvIHZhbHVlCisJc3dhcAkJJWQwCQkJIyBoaShbMV0pIDw9PT4gbG8oWzFdKQorCWFkZC53CQklZDEsJWQwCQkJIyBoaShbMV0pICsgbG8oWzJdKQorCWFkZHgubAkJJWQ0LCVkMwkJCSMgICAgWzRdICArIGNhcnJ5CisJYWRkLncJCSVkMiwlZDAJCQkjIGhpKFsxXSkgKyBsbyhbM10pCisJYWRkeC5sCQklZDQsJWQzCQkJIyAgICBbNF0gICsgY2FycnkKKwlzd2FwCQklZDAJCQkjIGxvKFsxXSkgPD09PiBoaShbMV0pCisKKyMgbG8gcG9ydGlvbnMgb2YgWzJdLFszXSBoYXZlIGJlZW4gYWRkZWQgaW4gdG8gZmluYWwgcmVzdWx0LgorIyBub3csIGNsZWFyIGxvLCBwdXQgaGkgaW4gbG8gcmVnLCBhbmQgYWRkIHRvIFs0XQorCWNsci53CQklZDEJCQkjIGNsZWFyIGxvKFsyXSkKKwljbHIudwkJJWQyCQkJIyBjbGVhciBoaShbM10pCisJc3dhcAkJJWQxCQkJIyBoaShbMl0pIGluIGxvIGQxCisJc3dhcAkJJWQyCQkJIyBoaShbM10pIGluIGxvIGQyCisJYWRkLmwJCSVkMiwlZDEJCQkjICAgIFs0XSAgKyBoaShbMl0pCisJYWRkLmwJCSVkMywlZDEJCQkjICAgIFs0XSAgKyBoaShbM10pCisKKwl0c3QuYgkJJWQ1CQkJIyBzaG91bGQgcmVzdWx0IGJlIHNpZ25lZD8KKwliZXEuYgkJbXVsczY0X2RvbmUJCSMgbm8KKworIyByZXN1bHQgc2hvdWxkIGJlIGEgc2lnbmVkIG5lZ2F0aXZlIG51bWJlci4KKyMgY29tcHV0ZSAyJ3MgY29tcGxlbWVudCBvZiB0aGUgdW5zaWduZWQgbnVtYmVyOgorIyAgIC1uZWdhdGUgYWxsIGJpdHMgYW5kIGFkZCAxCittdWxzNjRfbmVnOgorCW5vdC5sCQklZDAJCQkjIG5lZ2F0ZSBsbyhyZXN1bHQpIGJpdHMKKwlub3QubAkJJWQxCQkJIyBuZWdhdGUgaGkocmVzdWx0KSBiaXRzCisJYWRkcS5sCQkmMSwlZDAJCQkjIGFkZCAxIHRvIGxvKHJlc3VsdCkKKwlhZGR4LmwJCSVkNCwlZDEJCQkjIGFkZCBjYXJyeSB0byBoaShyZXN1bHQpCisKK211bHM2NF9kb25lOgorCW1vdi53CQlNVUw2NF9DQyglYTYpLCVkNAorCWFuZGkuYgkJJjB4MTAsJWQ0CQkjIGtlZXAgb2xkICdYJyBiaXQKKwl0c3QubAkJJWQxCQkJIyBtYXkgc2V0ICdOJyBiaXQKKwlicGwuYgkJbXVsczY0X2Rkb25lCisJb3JpLmIJCSYweDgsJWQ0CQkjIHNldCAnTicgYml0CittdWxzNjRfZGRvbmU6CisJbW92LncJCSVkNCwlY2MKKworIyBoZXJlLCB0aGUgcmVzdWx0IGlzIGluIGQxIGFuZCBkMC4gdGhlIGN1cnJlbnQgc3RyYXRlZ3kgaXMgdG8gc2F2ZQorIyB0aGUgdmFsdWVzIGF0IHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IGEwLgorIyB1c2UgbW92bSBoZXJlIHRvIG5vdCBkaXN0dXJiIHRoZSBjb25kaXRpb24gY29kZXMuCittdWxzNjRfZW5kOgorCWV4ZwkJJWQxLCVkMAorCW1vdm0ubAkJJjB4MDAwMywoWzB4MTAsJWE2XSkJIyBzYXZlIHJlc3VsdCBhdCAoYTApCisKKyMgRVBJTE9HVUUgQkVHSU4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJZm1vdm0ubAkJKCVzcCkrLCYweDAJCSMgcmVzdG9yZSBubyBmcHJlZ3MKKwltb3ZtLmwJCSglc3ApKywmMHgwMDNjCQkjIHJlc3RvcmUgZDItZDUKKwl1bmxrCQklYTYKKyMgRVBJTE9HVUUgRU5EICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCXJ0cworCisjIG9uZSBvciBib3RoIG9mIHRoZSBvcGVyYW5kcyBpcyB6ZXJvIHNvIHRoZSByZXN1bHQgaXMgYWxzbyB6ZXJvLgorIyBzYXZlIHRoZSB6ZXJvIHJlc3VsdCB0byB0aGUgcmVnaXN0ZXIgZmlsZSBhbmQgc2V0IHRoZSAnWicgY2NvZGUgYml0LgorbXVsczY0X3plcm86CisJY2xyLmwJCSVkMAorCWNsci5sCQklZDEKKworCW1vdi53CQlNVUw2NF9DQyglYTYpLCVkNAorCWFuZGkuYgkJJjB4MTAsJWQ0CisJb3JpLmIJCSYweDQsJWQ0CisJbW92LncJCSVkNCwlY2MJCQkjIHNldCAnWicgY2NvZGUgYml0CisKKwlicmEuYgkJbXVsczY0X2VuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV8wNjBMU1BfX2NtcDJfQWJfKCk6IEVtdWxhdGUgImNtcDIuYiBBbiw8ZWE+Ii4JCQkjCisjCV8wNjBMU1BfX2NtcDJfQXdfKCk6IEVtdWxhdGUgImNtcDIudyBBbiw8ZWE+Ii4JCQkjCisjCV8wNjBMU1BfX2NtcDJfQWxfKCk6IEVtdWxhdGUgImNtcDIubCBBbiw8ZWE+Ii4JCQkjCisjCV8wNjBMU1BfX2NtcDJfRGJfKCk6IEVtdWxhdGUgImNtcDIuYiBEbiw8ZWE+Ii4JCQkjCisjCV8wNjBMU1BfX2NtcDJfRHdfKCk6IEVtdWxhdGUgImNtcDIudyBEbiw8ZWE+Ii4JCQkjCisjCV8wNjBMU1BfX2NtcDJfRGxfKCk6IEVtdWxhdGUgImNtcDIubCBEbiw8ZWE+Ii4JCQkjCisjCQkJCQkJCQkJIworIwlUaGlzIGlzIHRoZSBsaWJyYXJ5IHZlcnNpb24gd2hpY2ggaXMgYWNjZXNzZWQgYXMgYSBzdWJyb3V0aW5lCSMKKyMJYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCB3b3JrIGV4YWN0bHkgbGlrZSB0aGUgNjgwWDAgImNtcDIiCSMKKyMJaW5zdHJ1Y3Rpb24uCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCTB4NChzcCkgPSBSbgkJCQkJCQkjCisjCTB4OChzcCkgPSBwb2ludGVyIHRvIGJvdW5kYXJ5IHBhaXIJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJY2MgPSBjb25kaXRpb24gY29kZXMgYXJlIHNldCBjb3JyZWN0bHkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSW4gdGhlIGludGVyZXN0IG9mIHNpbXBsaWNpdHksIGFsbCBvcGVyYW5kcyBhcmUgY29udmVydGVkIHRvCSMKKyMgbG9uZ3dvcmQgc2l6ZSB3aGV0aGVyIHRoZSBvcGVyYXRpb24gaXMgYnl0ZSwgd29yZCwgb3IgbG9uZy4gVGhlCSMKKyMgYm91bmRzIGFyZSBzaWduIGV4dGVuZGVkIGFjY29yZGluZ2x5LiBJZiBSbiBpcyBhIGRhdGEgcmVnc2l0ZXIsIFJuIGlzICMKKyMgYWxzbyBzaWduIGV4dGVuZGVkLiBJZiBSbiBpcyBhbiBhZGRyZXNzIHJlZ2lzdGVyLCBpdCBuZWVkIG5vdCBiZSBzaWduICMKKyMgZXh0ZW5kZWQgc2luY2UgdGhlIGZ1bGwgcmVnaXN0ZXIgaXMgYWx3YXlzIHVzZWQuCQkJIworIwlUaGUgY29uZGl0aW9uIGNvZGVzIGFyZSBzZXQgY29ycmVjdGx5IGJlZm9yZSB0aGUgZmluYWwgInJ0cyIuCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3NldAlDTVAyX0NDLAktNAorCisJZ2xvYmFsCQlfMDYwTFNQX19jbXAyX0FiXworXzA2MExTUF9fY21wMl9BYl86CisKKyMgUFJPTE9HVUUgQkVHSU4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlsaW5rLncJCSVhNiwmLTQKKwltb3ZtLmwJCSYweDM4MDAsLSglc3ApCQkjIHNhdmUgZDItZDQKKyMJZm1vdm0ubAkJJjB4MCwtKCVzcCkJCSMgc2F2ZSBubyBmcHJlZ3MKKyMgUFJPTE9HVUUgRU5EICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCW1vdi53CQklY2MsQ01QMl9DQyglYTYpCisJbW92LmwJCTB4OCglYTYpLCAlZDIJCSMgZ2V0IHJlZ3ZhbAorCisJbW92LmIJCShbMHhjLCVhNl0sMHgwKSwlZDAKKwltb3YuYgkJKFsweGMsJWE2XSwweDEpLCVkMQorCisJZXh0Yi5sCQklZDAJCQkjIHNpZ24gZXh0ZW5kIGxvIGJuZAorCWV4dGIubAkJJWQxCQkJIyBzaWduIGV4dGVuZCBoaSBibmQKKwlicmEudwkJbF9jbXAyX2NtcAkJIyBnbyBkbyB0aGUgY29tcGFyZSBlbXVsYXRpb24KKworCWdsb2JhbAkJXzA2MExTUF9fY21wMl9Bd18KK18wNjBMU1BfX2NtcDJfQXdfOgorCisjIFBST0xPR1VFIEJFR0lOICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJbGluay53CQklYTYsJi00CisJbW92bS5sCQkmMHgzODAwLC0oJXNwKQkJIyBzYXZlIGQyLWQ0CisjCWZtb3ZtLmwJCSYweDAsLSglc3ApCQkjIHNhdmUgbm8gZnByZWdzCisjIFBST0xPR1VFIEVORCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwltb3YudwkJJWNjLENNUDJfQ0MoJWE2KQorCW1vdi5sCQkweDgoJWE2KSwgJWQyCQkjIGdldCByZWd2YWwKKworCW1vdi53CQkoWzB4YywlYTZdLDB4MCksJWQwCisJbW92LncJCShbMHhjLCVhNl0sMHgyKSwlZDEKKworCWV4dC5sCQklZDAJCQkjIHNpZ24gZXh0ZW5kIGxvIGJuZAorCWV4dC5sCQklZDEJCQkjIHNpZ24gZXh0ZW5kIGhpIGJuZAorCWJyYS53CQlsX2NtcDJfY21wCQkjIGdvIGRvIHRoZSBjb21wYXJlIGVtdWxhdGlvbgorCisJZ2xvYmFsCQlfMDYwTFNQX19jbXAyX0FsXworXzA2MExTUF9fY21wMl9BbF86CisKKyMgUFJPTE9HVUUgQkVHSU4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlsaW5rLncJCSVhNiwmLTQKKwltb3ZtLmwJCSYweDM4MDAsLSglc3ApCQkjIHNhdmUgZDItZDQKKyMJZm1vdm0ubAkJJjB4MCwtKCVzcCkJCSMgc2F2ZSBubyBmcHJlZ3MKKyMgUFJPTE9HVUUgRU5EICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCW1vdi53CQklY2MsQ01QMl9DQyglYTYpCisJbW92LmwJCTB4OCglYTYpLCAlZDIJCSMgZ2V0IHJlZ3ZhbAorCisJbW92LmwJCShbMHhjLCVhNl0sMHgwKSwlZDAKKwltb3YubAkJKFsweGMsJWE2XSwweDQpLCVkMQorCWJyYS53CQlsX2NtcDJfY21wCQkjIGdvIGRvIHRoZSBjb21wYXJlIGVtdWxhdGlvbgorCisJZ2xvYmFsCQlfMDYwTFNQX19jbXAyX0RiXworXzA2MExTUF9fY21wMl9EYl86CisKKyMgUFJPTE9HVUUgQkVHSU4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlsaW5rLncJCSVhNiwmLTQKKwltb3ZtLmwJCSYweDM4MDAsLSglc3ApCQkjIHNhdmUgZDItZDQKKyMJZm1vdm0ubAkJJjB4MCwtKCVzcCkJCSMgc2F2ZSBubyBmcHJlZ3MKKyMgUFJPTE9HVUUgRU5EICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCW1vdi53CQklY2MsQ01QMl9DQyglYTYpCisJbW92LmwJCTB4OCglYTYpLCAlZDIJCSMgZ2V0IHJlZ3ZhbAorCisJbW92LmIJCShbMHhjLCVhNl0sMHgwKSwlZDAKKwltb3YuYgkJKFsweGMsJWE2XSwweDEpLCVkMQorCisJZXh0Yi5sCQklZDAJCQkjIHNpZ24gZXh0ZW5kIGxvIGJuZAorCWV4dGIubAkJJWQxCQkJIyBzaWduIGV4dGVuZCBoaSBibmQKKworIyBvcGVyYXRpb24gaXMgYSBkYXRhIHJlZ2lzdGVyIGNvbXBhcmUuCisjIHNpZ24gZXh0ZW5kIGJ5dGUgdG8gbG9uZyBzbyB3ZSBjYW4gZG8gc2ltcGxlIGxvbmd3b3JkIGNvbXBhcmVzLgorCWV4dGIubAkJJWQyCQkJIyBzaWduIGV4dGVuZCBkYXRhIGJ5dGUKKwlicmEudwkJbF9jbXAyX2NtcAkJIyBnbyBkbyB0aGUgY29tcGFyZSBlbXVsYXRpb24KKworCWdsb2JhbAkJXzA2MExTUF9fY21wMl9Ed18KK18wNjBMU1BfX2NtcDJfRHdfOgorCisjIFBST0xPR1VFIEJFR0lOICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJbGluay53CQklYTYsJi00CisJbW92bS5sCQkmMHgzODAwLC0oJXNwKQkJIyBzYXZlIGQyLWQ0CisjCWZtb3ZtLmwJCSYweDAsLSglc3ApCQkjIHNhdmUgbm8gZnByZWdzCisjIFBST0xPR1VFIEVORCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwltb3YudwkJJWNjLENNUDJfQ0MoJWE2KQorCW1vdi5sCQkweDgoJWE2KSwgJWQyCQkjIGdldCByZWd2YWwKKworCW1vdi53CQkoWzB4YywlYTZdLDB4MCksJWQwCisJbW92LncJCShbMHhjLCVhNl0sMHgyKSwlZDEKKworCWV4dC5sCQklZDAJCQkjIHNpZ24gZXh0ZW5kIGxvIGJuZAorCWV4dC5sCQklZDEJCQkjIHNpZ24gZXh0ZW5kIGhpIGJuZAorCisjIG9wZXJhdGlvbiBpcyBhIGRhdGEgcmVnaXN0ZXIgY29tcGFyZS4KKyMgc2lnbiBleHRlbmQgd29yZCB0byBsb25nIHNvIHdlIGNhbiBkbyBzaW1wbGUgbG9uZ3dvcmQgY29tcGFyZXMuCisJZXh0LmwJCSVkMgkJCSMgc2lnbiBleHRlbmQgZGF0YSB3b3JkCisJYnJhLncJCWxfY21wMl9jbXAJCSMgZ28gZW11bGF0ZSBjb21wYXJlCisKKwlnbG9iYWwJCV8wNjBMU1BfX2NtcDJfRGxfCitfMDYwTFNQX19jbXAyX0RsXzoKKworIyBQUk9MT0dVRSBCRUdJTiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWxpbmsudwkJJWE2LCYtNAorCW1vdm0ubAkJJjB4MzgwMCwtKCVzcCkJCSMgc2F2ZSBkMi1kNAorIwlmbW92bS5sCQkmMHgwLC0oJXNwKQkJIyBzYXZlIG5vIGZwcmVncworIyBQUk9MT0dVRSBFTkQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJbW92LncJCSVjYyxDTVAyX0NDKCVhNikKKwltb3YubAkJMHg4KCVhNiksICVkMgkJIyBnZXQgcmVndmFsCisKKwltb3YubAkJKFsweGMsJWE2XSwweDApLCVkMAorCW1vdi5sCQkoWzB4YywlYTZdLDB4NCksJWQxCisKKyMKKyMgVG8gc2V0IHRoZSBjY29kZXMgY29ycmVjdGx5OgorIwkoMSkgc2F2ZSAnWicgYml0IGZyb20gKFJuIC0gbG8pCisjCSgyKSBzYXZlICdaJyBhbmQgJ04nIGJpdHMgZnJvbSAoKGhpIC0gbG8pIC0gKFJuIC0gaGkpKQorIwkoMykga2VlcCAnWCcsICdOJywgYW5kICdWJyBmcm9tIGJlZm9yZSBpbnN0cnVjdGlvbgorIwkoNCkgY29tYmluZSBjY29kZXMKKyMKK2xfY21wMl9jbXA6CisJc3ViLmwJCSVkMCwgJWQyCQkjIChSbiAtIGxvKQorCW1vdi53CQklY2MsICVkMwkJIyBmZXRjaCByZXN1bHRpbmcgY2NvZGVzCisJYW5kaS5iCQkmMHg0LCAlZDMJCSMga2VlcCAnWicgYml0CisJc3ViLmwJCSVkMCwgJWQxCQkjIChoaSAtIGxvKQorCWNtcC5sCQklZDEsJWQyCQkJIyAoKGhpIC0gbG8pIC0gKFJuIC0gaGkpKQorCisJbW92LncJCSVjYywgJWQ0CQkjIGZldGNoIHJlc3VsdGluZyBjY29kZXMKKwlvci5iCQklZDQsICVkMwkJIyBjb21iaW5lIHcvIGVhcmxpZXIgY2NvZGVzCisJYW5kaS5iCQkmMHg1LCAlZDMJCSMga2VlcCAnWicgYW5kICdOJworCisJbW92LncJCUNNUDJfQ0MoJWE2KSwgJWQ0CSMgZmV0Y2ggb2xkIGNjb2RlcworCWFuZGkuYgkJJjB4MWEsICVkNAkJIyBrZWVwICdYJywnTicsJ1YnIGJpdHMKKwlvci5iCQklZDMsICVkNAkJIyBpbnNlcnQgbmV3IGNjb2RlcworCW1vdi53CQklZDQsJWNjCQkJIyBzYXZlIG5ldyBjY29kZXMKKworIyBFUElMT0dVRSBCRUdJTiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwlmbW92bS5sCQkoJXNwKSssJjB4MAkJIyByZXN0b3JlIG5vIGZwcmVncworCW1vdm0ubAkJKCVzcCkrLCYweDAwMWMJCSMgcmVzdG9yZSBkMi1kNAorCXVubGsJCSVhNgorIyBFUElMT0dVRSBFTkQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJcnRzCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvc3JjL2lzcC5TIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9pc3AuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjY5MDkxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9pc3AuUwpAQCAtMCwwICsxLDQyOTkgQEAKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorTU9UT1JPTEEgTUlDUk9QUk9DRVNTT1IgJiBNRU1PUlkgVEVDSE5PTE9HWSBHUk9VUAorTTY4MDAwIEhpLVBlcmZvcm1hbmNlIE1pY3JvcHJvY2Vzc29yIERpdmlzaW9uCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZQorUHJvZHVjdGlvbiBSZWxlYXNlIFAxLjAwIC0tIE9jdG9iZXIgMTAsIDE5OTQKKworTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IKkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUSEUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitNT1RPUk9MQSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0hFVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorYW5kIGFueSB3YXJyYW50eSBhZ2FpbnN0IGluZnJpbmdlbWVudCB3aXRoIHJlZ2FyZCB0byB0aGUgU09GVFdBUkUKKyhJTkNMVURJTkcgQU5ZIE1PRElGSUVEIFZFUlNJT05TIFRIRVJFT0YpIGFuZCBhbnkgYWNjb21wYW55aW5nIHdyaXR0ZW4gbWF0ZXJpYWxzLgorCitUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorSU4gTk8gRVZFTlQgU0hBTEwgTU9UT1JPTEEgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUyBQUk9GSVRTLAorQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIEJVU0lORVNTIElORk9STUFUSU9OLCBPUiBPVEhFUiBQRUNVTklBUlkgTE9TUykKK0FSSVNJTkcgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTT0ZUV0FSRS4KK01vdG9yb2xhIGFzc3VtZXMgbm8gcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBtYWludGVuYW5jZSBhbmQgc3VwcG9ydCBvZiB0aGUgU09GVFdBUkUuCisKK1lvdSBhcmUgaGVyZWJ5IGdyYW50ZWQgYSBjb3B5cmlnaHQgbGljZW5zZSB0byB1c2UsIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNPRlRXQVJFCitzbyBsb25nIGFzIHRoaXMgZW50aXJlIG5vdGljZSBpcyByZXRhaW5lZCB3aXRob3V0IGFsdGVyYXRpb24gaW4gYW55IG1vZGlmaWVkIGFuZC9vcgorcmVkaXN0cmlidXRlZCB2ZXJzaW9ucywgYW5kIHRoYXQgc3VjaCBtb2RpZmllZCB2ZXJzaW9ucyBhcmUgY2xlYXJseSBpZGVudGlmaWVkIGFzIHN1Y2guCitObyBsaWNlbnNlcyBhcmUgZ3JhbnRlZCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlIHVuZGVyIGFueSBwYXRlbnRzCitvciB0cmFkZW1hcmtzIG9mIE1vdG9yb2xhLCBJbmMuCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyMgaXJlYWwuczoKKyMJVGhpcyBmaWxlIGlzIGFwcGVuZGVkIHRvIHRoZSB0b3Agb2YgdGhlIDA2MElTUCBwYWNrYWdlCisjIGFuZCBjb250YWlucyB0aGUgZW50cnkgcG9pbnRzIGludG8gdGhlIHBhY2thZ2UuIFRoZSB1c2VyLCBpbgorIyBlZmZlY3QsIGJyYW5jaGVzIHRvIG9uZSBvZiB0aGUgYnJhbmNoIHRhYmxlIGVudHJpZXMgbG9jYXRlZAorIyBhZnRlciBfMDYwSVNQX1RBQkxFLgorIwlBbHNvLCBzdWJyb3V0aW5lIHN0dWJzIGV4aXN0IGluIHRoaXMgZmlsZSAoX2lzcF9kb25lIGZvcgorIyBleGFtcGxlKSB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5IHRoZSBJU1AgcGFja2FnZSBpdHNlbGYgaW4gb3JkZXIKKyMgdG8gY2FsbCBhIGdpdmVuIHJvdXRpbmUuIFRoZSBzdHViIHJvdXRpbmUgYWN0dWFsbHkgcGVyZm9ybXMgdGhlCisjIGNhbGxvdXQuIFRoZSBJU1AgY29kZSBkb2VzIGEgImJzciIgdG8gdGhlIHN0dWIgcm91dGluZS4gVGhpcworIyBleHRyYSBsYXllciBvZiBoaWVyYXJjaHkgYWRkcyBhIHNsaWdodCBwZXJmb3JtYW5jZSBwZW5hbHR5IGJ1dAorIyBpdCBtYWtlcyB0aGUgSVNQIGNvZGUgZWFzaWVyIHRvIHJlYWQgYW5kIG1vcmUgbWFpbmF0aW5hYmxlLgorIworCitzZXQJX29mZl9jaGssCTB4MDAKK3NldAlfb2ZmX2RpdmJ5emVybywJMHgwNAorc2V0CV9vZmZfdHJhY2UsCTB4MDgKK3NldAlfb2ZmX2FjY2VzcywJMHgwYworc2V0CV9vZmZfZG9uZSwJMHgxMAorCitzZXQJX29mZl9jYXMsCTB4MTQKK3NldAlfb2ZmX2NhczIsCTB4MTgKK3NldAlfb2ZmX2xvY2ssCTB4MWMKK3NldAlfb2ZmX3VubG9jaywJMHgyMAorCitzZXQJX29mZl9pbXIsCTB4NDAKK3NldAlfb2ZmX2RtciwJMHg0NAorc2V0CV9vZmZfZG13LAkweDQ4CitzZXQJX29mZl9pcncsCTB4NGMKK3NldAlfb2ZmX2lybCwJMHg1MAorc2V0CV9vZmZfZHJiLAkweDU0CitzZXQJX29mZl9kcncsCTB4NTgKK3NldAlfb2ZmX2RybCwJMHg1Yworc2V0CV9vZmZfZHdiLAkweDYwCitzZXQJX29mZl9kd3csCTB4NjQKK3NldAlfb2ZmX2R3bCwJMHg2OAorCitfMDYwSVNQX1RBQkxFOgorCisjIEhlcmUncyB0aGUgdGFibGUgb2YgRU5UUlkgUE9JTlRTIGZvciB0aG9zZSBsaW5raW5nIHRoZSBwYWNrYWdlLgorCWJyYS5sCQlfaXNwX3VuaW1wCisJc2hvcnQJCTB4MDAwMAorCisJYnJhLmwJCV9pc3BfY2FzCisJc2hvcnQJCTB4MDAwMAorCisJYnJhLmwJCV9pc3BfY2FzMgorCXNob3J0CQkweDAwMDAKKworCWJyYS5sCQlfaXNwX2Nhc19maW5pc2gKKwlzaG9ydAkJMHgwMDAwCisKKwlicmEubAkJX2lzcF9jYXMyX2ZpbmlzaAorCXNob3J0CQkweDAwMDAKKworCWJyYS5sCQlfaXNwX2Nhc19pbnJhbmdlCisJc2hvcnQJCTB4MDAwMAorCisJYnJhLmwJCV9pc3BfY2FzX3Rlcm1pbmF0ZQorCXNob3J0CQkweDAwMDAKKworCWJyYS5sCQlfaXNwX2Nhc19yZXN0YXJ0CisJc2hvcnQJCTB4MDAwMAorCisJc3BhY2UJCTY0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX3JlYWxfY2hrCitfcmVhbF9jaGs6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2NoaywlcGMpLCVkMAorCXBlYS5sCQkoXzA2MElTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfcmVhbF9kaXZieXplcm8KK19yZWFsX2RpdmJ5emVybzoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MElTUF9UQUJMRS0weDgwK19vZmZfZGl2Ynl6ZXJvLCVwYyksJWQwCisJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9yZWFsX3RyYWNlCitfcmVhbF90cmFjZToKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MElTUF9UQUJMRS0weDgwK19vZmZfdHJhY2UsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX3JlYWxfYWNjZXNzCitfcmVhbF9hY2Nlc3M6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2FjY2VzcywlcGMpLCVkMAorCXBlYS5sCQkoXzA2MElTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfaXNwX2RvbmUKK19pc3BfZG9uZToKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MElTUF9UQUJMRS0weDgwK19vZmZfZG9uZSwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MElTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX3JlYWxfY2FzCitfcmVhbF9jYXM6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2NhcywlcGMpLCVkMAorCXBlYS5sCQkoXzA2MElTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfcmVhbF9jYXMyCitfcmVhbF9jYXMyOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwSVNQX1RBQkxFLTB4ODArX29mZl9jYXMyLCVwYyksJWQwCisJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9yZWFsX2xvY2tfcGFnZQorX3JlYWxfbG9ja19wYWdlOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwSVNQX1RBQkxFLTB4ODArX29mZl9sb2NrLCVwYyksJWQwCisJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9yZWFsX3VubG9ja19wYWdlCitfcmVhbF91bmxvY2tfcGFnZToKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MElTUF9UQUJMRS0weDgwK19vZmZfdW5sb2NrLCVwYyksJWQwCisJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfaW1lbV9yZWFkCitfaW1lbV9yZWFkOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwSVNQX1RBQkxFLTB4ODArX29mZl9pbXIsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2RtZW1fcmVhZAorX2RtZW1fcmVhZDoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MElTUF9UQUJMRS0weDgwK19vZmZfZG1yLCVwYyksJWQwCisJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9kbWVtX3dyaXRlCitfZG1lbV93cml0ZToKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MElTUF9UQUJMRS0weDgwK19vZmZfZG13LCVwYyksJWQwCisJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9pbWVtX3JlYWRfd29yZAorX2ltZW1fcmVhZF93b3JkOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwSVNQX1RBQkxFLTB4ODArX29mZl9pcncsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2ltZW1fcmVhZF9sb25nCitfaW1lbV9yZWFkX2xvbmc6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2lybCwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MElTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfZG1lbV9yZWFkX2J5dGUKK19kbWVtX3JlYWRfYnl0ZToKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MElTUF9UQUJMRS0weDgwK19vZmZfZHJiLCVwYyksJWQwCisJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9kbWVtX3JlYWRfd29yZAorX2RtZW1fcmVhZF93b3JkOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwSVNQX1RBQkxFLTB4ODArX29mZl9kcncsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2RtZW1fcmVhZF9sb25nCitfZG1lbV9yZWFkX2xvbmc6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2RybCwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MElTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfZG1lbV93cml0ZV9ieXRlCitfZG1lbV93cml0ZV9ieXRlOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwSVNQX1RBQkxFLTB4ODArX29mZl9kd2IsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2RtZW1fd3JpdGVfd29yZAorX2RtZW1fd3JpdGVfd29yZDoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MElTUF9UQUJMRS0weDgwK19vZmZfZHd3LCVwYyksJWQwCisJcGVhLmwJCShfMDYwSVNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9kbWVtX3dyaXRlX2xvbmcKK19kbWVtX3dyaXRlX2xvbmc6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBJU1BfVEFCTEUtMHg4MCtfb2ZmX2R3bCwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MElTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisjCisjIFRoaXMgZmlsZSBjb250YWlucyBhIHNldCBvZiBkZWZpbmUgc3RhdGVtZW50cyBmb3IgY29uc3RhbnRzCisjIGluIG9yZWRlciB0byBwcm9tb3RlIHJlYWRhYmlsaXR5IHdpdGhpbiB0aGUgY29yZSBjb2RlIGl0c2VsZi4KKyMKKworc2V0IExPQ0FMX1NJWkUsCQk5NgkJCSMgc3RhY2sgZnJhbWUgc2l6ZShieXRlcykKK3NldCBMViwJCQktTE9DQUxfU0laRQkJIyBzdGFjayBvZmZzZXQKKworc2V0IEVYQ19JU1IsCQkweDQJCQkjIHN0YWNrIHN0YXR1cyByZWdpc3Rlcgorc2V0IEVYQ19JUEMsCQkweDYJCQkjIHN0YWNrIHBjCitzZXQgRVhDX0lWT0ZGLAkJMHhhCQkJIyBzdGFja2VkIHZlY3RvciBvZmZzZXQKKworc2V0IEVYQ19BUkVHUywJCUxWKzY0CQkJIyBvZmZzZXQgb2YgYWxsIGFkZHJlc3MgcmVncworc2V0IEVYQ19EUkVHUywJCUxWKzMyCQkJIyBvZmZzZXQgb2YgYWxsIGRhdGEgcmVncworCitzZXQgRVhDX0E3LAkJRVhDX0FSRUdTKyg3KjQpCQkjIG9mZnNldCBvZiBhNworc2V0IEVYQ19BNiwJCUVYQ19BUkVHUysoNio0KQkJIyBvZmZzZXQgb2YgYTYKK3NldCBFWENfQTUsCQlFWENfQVJFR1MrKDUqNCkJCSMgb2Zmc2V0IG9mIGE1CitzZXQgRVhDX0E0LAkJRVhDX0FSRUdTKyg0KjQpCQkjIG9mZnNldCBvZiBhNAorc2V0IEVYQ19BMywJCUVYQ19BUkVHUysoMyo0KQkJIyBvZmZzZXQgb2YgYTMKK3NldCBFWENfQTIsCQlFWENfQVJFR1MrKDIqNCkJCSMgb2Zmc2V0IG9mIGEyCitzZXQgRVhDX0ExLAkJRVhDX0FSRUdTKygxKjQpCQkjIG9mZnNldCBvZiBhMQorc2V0IEVYQ19BMCwJCUVYQ19BUkVHUysoMCo0KQkJIyBvZmZzZXQgb2YgYTAKK3NldCBFWENfRDcsCQlFWENfRFJFR1MrKDcqNCkJCSMgb2Zmc2V0IG9mIGQ3CitzZXQgRVhDX0Q2LAkJRVhDX0RSRUdTKyg2KjQpCQkjIG9mZnNldCBvZiBkNgorc2V0IEVYQ19ENSwJCUVYQ19EUkVHUysoNSo0KQkJIyBvZmZzZXQgb2YgZDUKK3NldCBFWENfRDQsCQlFWENfRFJFR1MrKDQqNCkJCSMgb2Zmc2V0IG9mIGQ0CitzZXQgRVhDX0QzLAkJRVhDX0RSRUdTKygzKjQpCQkjIG9mZnNldCBvZiBkMworc2V0IEVYQ19EMiwJCUVYQ19EUkVHUysoMio0KQkJIyBvZmZzZXQgb2YgZDIKK3NldCBFWENfRDEsCQlFWENfRFJFR1MrKDEqNCkJCSMgb2Zmc2V0IG9mIGQxCitzZXQgRVhDX0QwLAkJRVhDX0RSRUdTKygwKjQpCQkjIG9mZnNldCBvZiBkMAorCitzZXQgRVhDX1RFTVAsCQlMVisxNgkJCSMgb2Zmc2V0IG9mIHRlbXAgc3RhY2sgc3BhY2UKKworc2V0IEVYQ19TQVZWQUwsCQlMVisxMgkJCSMgb2Zmc2V0IG9mIG9sZCBhcmVnIHZhbHVlCitzZXQgRVhDX1NBVlJFRywJCUxWKzExCQkJIyBvZmZzZXQgb2Ygb2xkIGFyZWcgaW5kZXgKKworc2V0IFNQQ09ORF9GTEcsCQlMVisxMAkJCSMgb2Zmc2V0IG9mIHNwYyBjb25kaXRpb24gZmxnCisKK3NldCBFWENfQ0MsCQlMVis4CQkJIyBvZmZzZXQgb2YgY2MgcmVnaXN0ZXIKK3NldCBFWENfRVhUV1BUUiwJTFYrNAkJCSMgb2Zmc2V0IG9mIGN1cnJlbnQgUEMKK3NldCBFWENfRVhUV09SRCwJTFYrMgkJCSMgb2Zmc2V0IG9mIGN1cnJlbnQgZXh0IG9wd29yZAorc2V0IEVYQ19PUFdPUkQsCQlMViswCQkJIyBvZmZzZXQgb2YgY3VycmVudCBvcHdvcmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNQZWNpYWwgQ09ORGl0aW9uIEZMYUdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc2V0IG1pYTdfZmxnLAkJMHgwNAkJCSMgKGE3KSsgZmxhZworc2V0IG1kYTdfZmxnLAkJMHgwOAkJCSMgLShhNykgZmxhZworc2V0IGljaGtfZmxnLAkJMHgxMAkJCSMgY2hrIGV4Y2VwdGlvbiBmbGFnCitzZXQgaWRieXpfZmxnLAkJMHgyMAkJCSMgZGl2Ynl6ZXJvIGZsYWcKK3NldCByZXN0b3JlX2ZsZywJMHg0MAkJCSMgcmVzdG9yZSAtKGFuKSsgZmxhZworc2V0IGltbWVkX2ZsZywJCTB4ODAJCQkjIGltbWVkaWF0ZSBkYXRhIGZsYWcKKworc2V0IG1pYTdfYml0LAkJMHgyCQkJIyAoYTcpKyBiaXQKK3NldCBtZGE3X2JpdCwJCTB4MwkJCSMgLShhNykgYml0CitzZXQgaWNoa19iaXQsCQkweDQJCQkjIGNoayBleGNlcHRpb24gYml0CitzZXQgaWRieXpfYml0LAkJMHg1CQkJIyBkaXZieXplcm8gYml0CitzZXQgcmVzdG9yZV9iaXQsCTB4NgkJCSMgcmVzdG9yZSAtKGE3KSsgYml0CitzZXQgaW1tZWRfYml0LAkJMHg3CQkJIyBpbW1lZGlhdGUgZGF0YSBiaXQKKworIyMjIyMjIyMjCisjIE1pc2MuICMKKyMjIyMjIyMjIworc2V0IEJZVEUsCQkxCQkJIyBsZW4oYnl0ZSkgPT0gMSBieXRlCitzZXQgV09SRCwJCTIJCQkjIGxlbih3b3JkKSA9PSAyIGJ5dGVzCitzZXQgTE9ORywJCTQJCQkjIGxlbihsb25nd29yZCkgPT0gNCBieXRlcworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9pc3BfdW5pbXAoKTogMDYwSVNQIGVudHJ5IHBvaW50IGZvciBVbmltcGxlbWVudGVkIEluc3RydWN0aW9uCSMKKyMJCQkJCQkJCQkjCisjCVRoaXMgaGFuZGxlciBzaG91bGQgYmUgdGhlIGZpcnN0IGNvZGUgZXhlY3V0ZWQgdXBvbiB0YWtpbmcgdGhlCSMKKyMJIlVuaW1wbGVtZW50ZWQgSW50ZWdlciBJbnN0cnVjdGlvbiIgZXhjZXB0aW9uIGluIGFuIG9wZXJhdGluZwkjCisjCXN5c3RlbS4JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9pbWVtX3JlYWRfe3dvcmQsbG9uZ30oKSAtIHJlYWQgaW5zdHJ1Y3Rpb24gd29yZC9sb25nd29yZAkjCisjCV9tdWw2NCgpIC0gZW11bGF0ZSA2NC1iaXQgbXVsdGlwbHkJCQkJIworIwlfZGl2NjQoKSAtIGVtdWxhdGUgNjQtYml0IGRpdmlkZQkJCQkjCisjCV9tb3ZlcGVyaXBoZXJhbCgpIC0gZW11bGF0ZSAibW92ZXAiCQkJCSMKKyMJX2NvbXBhbmRzZXQoKSAtIGVtdWxhdGUgbWlzYWxpZ25lZCAiY2FzIgkJCSMKKyMJX2NvbXBhbmRzZXQyKCkgLSBlbXVsYXRlICJjYXMyIgkJCQkJIworIwlfY2hrMl9jbXAyKCkgLSBlbXVsYXRlICJjbXAyIiBhbmQgImNoazIiCQkJIworIwlfaXNwX2RvbmUoKSAtICJjYWxsb3V0IiBmb3Igbm9ybWFsIGZpbmFsIGV4aXQJCQkjCisjCV9yZWFsX3RyYWNlKCkgLSAiY2FsbG91dCIgZm9yIFRyYWNlIGV4Y2VwdGlvbgkJCSMKKyMJX3JlYWxfY2hrKCkgLSAiY2FsbG91dCIgZm9yIENoayBleGNlcHRpb24JCQkjCisjCV9yZWFsX2RpdmJ5emVybygpIC0gImNhbGxvdXQiIGZvciBEWiBleGNlcHRpb24JCQkjCisjCV9yZWFsX2FjY2VzcygpIC0gImNhbGxvdXQiIGZvciBhY2Nlc3MgZXJyb3IgZXhjZXB0aW9uCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgdGhlIFVuaW1wIEludCBJbnN0ciBzdGFjayBmcmFtZQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJZiBUcmFjZSBleGNlcHRpb246CQkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgY2hhbmdlZCB0byBjb250YWluIFRyYWNlIGV4YyBzdGFjayBmcmFtZQkjCisjCUlmIENoayBleGNlcHRpb246CQkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgY2hhbmdlZCB0byBjb250YWluIENoayBleGMgc3RhY2sgZnJhbWUJIworIwlJZiBEWiBleGNlcHRpb246CQkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgY2hhbmdlZCB0byBjb250YWluIERaIGV4YyBzdGFjayBmcmFtZQkjCisjCUlmIGFjY2VzcyBlcnJvciBleGNlcHRpb246CQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBjaGFuZ2VkIHRvIGNvbnRhaW4gYWNjZXNzIGVyciBleGMgc3RrIGZyYW1lCSMKKyMJRWxzZToJCQkJCQkJCSMKKyMJLSBSZXN1bHRzIHNhdmVkIGFzIGFwcHJvcHJpYXRlCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGlzIGhhbmRsZXIgZmV0Y2hlcyB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24gbG9uZ3dvcmQgZnJvbQkjCisjIG1lbW9yeSBhbmQgZGVjb2RlcyBpdCB0byBkZXRlcm1pbmUgd2hpY2ggb2YgdGhlIHVuaW1wbGVtZW50ZWQJCSMKKyMgaW50ZWdlciBpbnN0cnVjdGlvbnMgY2F1c2VkIHRoaXMgZXhjZXB0aW9uLiBUaGlzIGhhbmRsZXIgdGhlbiBjYWxscwkjCisjIG9uZSBvZiBfbXVsNjQoKSwgX2RpdjY0KCksIF9tb3ZlcGVyaXBoZXJhbCgpLCBfY29tcGFuZHNldCgpLAkJIworIyBfY29tcGFuZHNldDIoKSwgb3IgX2NoazJfY21wMigpIGFzIGFwcHJvcHJpYXRlLgkJCSMKKyMJU29tZSBvZiB0aGVzZSBpbnN0cnVjdGlvbnMsIGJ5IHRoZWlyIG5hdHVyZSwgbWF5IHByb2R1Y2Ugb3RoZXIJIworIyB0eXBlcyBvZiBleGNlcHRpb25zLiAiZGl2IiBjYW4gcHJvZHVjZSBhIGRpdmlkZS1ieS16ZXJvIGV4Y2VwdGlvbiwJIworIyBhbmQgImNoazIiIGNhbiBjYXVzZSBhICJDaGsiIGV4Y2VwdGlvbi4gSW4gYm90aCBjYXNlcywgdGhlIGN1cnJlbnQJIworIyBleGNlcHRpb24gc3RhY2sgZnJhbWUgbXVzdCBiZSBjb252ZXJ0ZWQgdG8gYW4gZXhjZXB0aW9uIHN0YWNrIGZyYW1lCSMKKyMgb2YgdGhlIGNvcnJlY3QgZXhjZXB0aW9uIHR5cGUgYW5kIGFuIGV4aXQgbXVzdCBiZSBtYWRlIHRocm91Z2gJIworIyBfcmVhbF9kaXZieXplcm8oKSBvciBfcmVhbF9jaGsoKSBhcyBhcHByb3ByaWF0ZS4gSW4gYWRkaXRpb24sIGFsbAkjCisjIGluc3RydWN0aW9ucyBtYXkgYmUgZXhlY3V0aW5nIHdoaWxlIFRyYWNlIGlzIGVuYWJsZWQuIElmIHNvLCB0aGVuCSMKKyMgYSBUcmFjZSBleGNlcHRpb24gc3RhY2sgZnJhbWUgbXVzdCBiZSBjcmVhdGVkIGFuZCBhbiBleGl0IG1hZGUJIworIyB0aHJvdWdoIF9yZWFsX3RyYWNlKCkuCQkJCQkJIworIwlNZWFud2hpbGUsIGlmIGFueSByZWFkIG9yIHdyaXRlIHRvIG1lbW9yeSB1c2luZyB0aGUJCSMKKyMgX21lbV97cmVhZCx3cml0ZX0oKSAiY2FsbG91dCJzIHJldHVybnMgYSBmYWlsaW5nIHZhbHVlLCB0aGVuIGFuCSMKKyMgYWNjZXNzIGVycm9yIGZyYW1lIG11c3QgYmUgY3JlYXRlZCBhbmQgYW4gZXhpdCBtYWRlIHRocm91Z2gJCSMKKyMgX3JlYWxfYWNjZXNzKCkuCQkJCQkJCSMKKyMJSWYgbm9uZSBvZiB0aGVzZSBvY2N1ciwgdGhlbiBhIG5vcm1hbCBleGl0IGlzIG1hZGUgdGhyb3VnaAkjCisjIF9pc3BfZG9uZSgpLgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJVGhpcyBoYW5kbGVyLCB1cG9uIGVudHJ5LCBzYXZlcyBhbG1vc3QgYWxsIHVzZXItdmlzaWJsZQkJIworIyBhZGRyZXNzIGFuZCBkYXRhIHJlZ2lzdGVycyB0byB0aGUgc3RhY2suIEFsdGhvdWdoIHRoaXMgbWF5IHNlZW0gdG8JIworIyBjYXVzZSBleGNlc3MgbWVtb3J5IHRyYWZmaWMsIGl0IHdhcyBmb3VuZCB0aGF0IGR1ZSB0byBoYXZpbmcgdG8JIworIyBhY2Nlc3MgdGhlc2UgcmVnaXN0ZXIgZmlsZXMgZm9yIHRoaW5ncyBsaWtlIGRhdGEgcmV0cmlldmFsIGFuZCA8ZWE+CSMKKyMgY2FsY3VsYXRpb25zLCBpdCB3YXMgbW9yZSBlZmZpY2llbnQgdG8gaGF2ZSB0aGVtIG9uIHRoZSBzdGFjayB3aGVyZQkjCisjIHRoZXkgY291bGQgYmUgYWNjZXNzZWQgYnkgaW5kZXhpbmcgcmF0aGVyIHRoYW4gdG8gbWFrZSBzdWJyb3V0aW5lCSMKKyMgY2FsbHMgdG8gcmV0cmlldmUgYSByZWdpc3RlciBvZiBhIHBhcnRpY3VsYXIgaW5kZXguCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2lzcF91bmltcAorX2lzcF91bmltcDoKKwlsaW5rLncJCSVhNiwmLUxPQ0FMX1NJWkUJIyBjcmVhdGUgcm9vbSBmb3Igc3RhY2sgZnJhbWUKKworCW1vdm0ubAkJJjB4M2ZmZixFWENfRFJFR1MoJWE2KQkjIHN0b3JlIGQwLWQ3L2EwLWE1CisJbW92LmwJCSglYTYpLEVYQ19BNiglYTYpCSMgc3RvcmUgYTYKKworCWJ0c3QJCSYweDUsRVhDX0lTUiglYTYpCSMgZnJvbSBzIG9yIHUgbW9kZT8KKwlibmUuYgkJdWllaF9zCQkJIyBzdXBlcnZpc29yIG1vZGUKK3VpZWhfdToKKwltb3YubAkJJXVzcCwlYTAJCSMgZmV0Y2ggdXNlciBzdGFjayBwb2ludGVyCisJbW92LmwJCSVhMCxFWENfQTcoJWE2KQkJIyBzdG9yZSBhNworCWJyYS5iCQl1aWVoX2NvbnQKK3VpZWhfczoKKwlsZWEJCTB4YyglYTYpLCVhMAorCW1vdi5sCQklYTAsRVhDX0E3KCVhNikJCSMgc3RvcmUgY29ycmVjdGVkIHNwCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordWllaF9jb250OgorCWNsci5iCQlTUENPTkRfRkxHKCVhNikJCSMgY2xlYXIgInNwZWNpYWwgY2FzZSIgZmxhZworCisJbW92LncJCUVYQ19JU1IoJWE2KSxFWENfQ0MoJWE2KSAjIHN0b3JlIGNjIGNvcHkgb24gc3RhY2sKKwltb3YubAkJRVhDX0lQQyglYTYpLEVYQ19FWFRXUFRSKCVhNikgIyBzdG9yZSBleHR3cHRyIG9uIHN0YWNrCisKKyMKKyMgZmV0Y2ggdGhlIG9wd29yZCBhbmQgZmlyc3QgZXh0ZW5zaW9uIHdvcmQgcG9pbnRlZCB0byBieSB0aGUgc3RhY2tlZCBwYworIyBhbmQgc3RvcmUgdGhlbSB0byB0aGUgc3RhY2sgZm9yIG5vdworIworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBvcHdvcmQgJiBleHR3b3JkCisJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikJIyBzdG9yZSBleHR3b3JkIG9uIHN0YWNrCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBtdWxzLmwJMDEwMCAxMTAwIDAwIHw8ZWE+fAkwKioqIDExMDAgMDAwMCAwKioqCQkjCisjIG11bHUubAkwMTAwIDExMDAgMDAgfDxlYT58CTAqKiogMDEwMCAwMDAwIDAqKioJCSMKKyMJCQkJCQkJCQkjCisjIGRpdnMubAkwMTAwIDExMDAgMDEgfDxlYT58CTAqKiogMTEwMCAwMDAwIDAqKioJCSMKKyMgZGl2dS5sCTAxMDAgMTEwMCAwMSB8PGVhPnwJMCoqKiAwMTAwIDAwMDAgMCoqKgkJIworIwkJCQkJCQkJCSMKKyMgbW92ZXAudyBtMnIJMDAwMCAqKioxIDAwIDAwMSoqKgl8IDxkaXNwbGFjZW1lbnQ+ICB8CQkjCisjIG1vdmVwLmwgbTJyCTAwMDAgKioqMSAwMSAwMDEqKioJfCA8ZGlzcGxhY2VtZW50PiAgfAkJIworIyBtb3ZlcC53IHIybQkwMDAwICoqKjEgMTAgMDAxKioqCXwgPGRpc3BsYWNlbWVudD4gIHwJCSMKKyMgbW92ZXAubCByMm0JMDAwMCAqKioxIDExIDAwMSoqKgl8IDxkaXNwbGFjZW1lbnQ+ICB8CQkjCisjCQkJCQkJCQkJIworIyBjYXMudwkJMDAwMCAxMTAwIDExIHw8ZWE+fAkwMDAwIDAwMCogKiowMCAwKioqCQkjCisjIGNhcy5sCQkwMDAwIDExMTAgMTEgfDxlYT58CTAwMDAgMDAwKiAqKjAwIDAqKioJCSMKKyMJCQkJCQkJCQkjCisjIGNhczIudwkwMDAwIDExMDAgMTEgMTExMTAwCSoqKiogMDAwKiAqKjAwIDAqKioJCSMKKyMJCQkJCSoqKiogMDAwKiAqKjAwIDAqKioJCSMKKyMgY2FzMi5sCTAwMDAgMTExMCAxMSAxMTExMDAJKioqKiAwMDAqICoqMDAgMCoqKgkJIworIwkJCQkJKioqKiAwMDAqICoqMDAgMCoqKgkJIworIwkJCQkJCQkJCSMKKyMgY2hrMi5iCTAwMDAgMDAwMCAxMSB8PGVhPnwJKioqKiAxMDAwIDAwMDAgMDAwMAkJIworIyBjaGsyLncJMDAwMCAwMDEwIDExIHw8ZWE+fAkqKioqIDEwMDAgMDAwMCAwMDAwCQkjCisjIGNoazIubAkwMDAwIDAxMDAgMTEgfDxlYT58CSoqKiogMTAwMCAwMDAwIDAwMDAJCSMKKyMJCQkJCQkJCQkjCisjIGNtcDIuYgkwMDAwIDAwMDAgMTEgfDxlYT58CSoqKiogMDAwMCAwMDAwIDAwMDAJCSMKKyMgY21wMi53CTAwMDAgMDAxMCAxMSB8PGVhPnwJKioqKiAwMDAwIDAwMDAgMDAwMAkJIworIyBjbXAyLmwJMDAwMCAwMTAwIDExIHw8ZWE+fAkqKioqIDAwMDAgMDAwMCAwMDAwCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgdXNpbmcgYml0IDE0IG9mIHRoZSBvcGVyYXRpb24gd29yZCwgc2VwYXJhdGUgaW50byAyIGdyb3VwczoKKyMgKGdyb3VwMSkgbXVsNjQsIGRpdjY0CisjIChncm91cDIpIG1vdmVwLCBjaGsyLCBjbXAyLCBjYXMyLCBjYXMKKyMKKwlidHN0CQkmMHgxZSwlZDAJCSMgZ3JvdXAxIG9yIGdyb3VwMgorCWJlcS5iCQl1aWVoX2dyb3VwMgkJIyBnbyBoYW5kbGUgZ3JvdXAyCisKKyMKKyMgbm93LCB3LyBncm91cDEsIG1ha2UgbXVsNjQncyBkZWNvZGUgdGhlIGZhc3Rlc3Qgc2luY2UgaXQgd2lsbAorIyBtb3N0IGxpa2VseSBiZSB1c2VkIHRoZSBtb3N0LgorIwordWllaF9ncm91cDE6CisJYnRzdAkJJjB4MTYsJWQwCQkjIHRlc3QgZm9yIGRpdjY0CisJYm5lLmIJCXVpZWhfZGl2NjQJCSMgZ28gaGFuZGxlIGRpdjY0CisKK3VpZWhfbXVsNjQ6CisjIG11bDY0KCkgbWF5IHVzZSAoKSsgYWRkcmVzc2luZyBhbmQgbWF5LCB0aGVyZWZvcmUsIGFsdGVyIGE3CisKKwlic3IubAkJX211bDY0CQkJIyBfbXVsNjQoKQorCisJYnRzdAkJJjB4NSxFWENfSVNSKCVhNikJIyBzdXBlcnZpc29yIG1vZGU/CisJYmVxLncJCXVpZWhfZG9uZQorCWJ0c3QJCSZtaWE3X2JpdCxTUENPTkRfRkxHKCVhNikgIyB3YXMgYTcgY2hhbmdlZD8KKwliZXEudwkJdWllaF9kb25lCQkjIG5vCisJYnRzdAkJJjB4NyxFWENfSVNSKCVhNikJIyBpcyB0cmFjZSBlbmFibGVkPworCWJuZS53CQl1aWVoX3RyYWNlX2E3CQkjIHllcworCWJyYS53CQl1aWVoX2E3CQkJIyBubworCit1aWVoX2RpdjY0OgorIyBkaXY2NCgpIG1heSB1c2UgKCkrIGFkZHJlc3NpbmcgYW5kIG1heSwgdGhlcmVmb3JlLCBhbHRlciBhNy4KKyMgZGl2NjQoKSBtYXkgdGFrZSBhIGRpdmlkZSBieSB6ZXJvIGV4Y2VwdGlvbi4KKworCWJzci5sCQlfZGl2NjQJCQkjIF9kaXY2NCgpCisKKyMgaGVyZSwgd2Ugc29ydCBvdXQgYWxsIG9mIHRoZSBzcGVjaWFsIGNhc2VzIHRoYXQgbWF5IGhhdmUgaGFwcGVuZWQuCisJYnRzdAkJJm1pYTdfYml0LFNQQ09ORF9GTEcoJWE2KSAjIHdhcyBhNyBjaGFuZ2VkPworCWJuZS5iCQl1aWVoX2RpdjY0X2E3CQkjIHllcwordWllaF9kaXY2NF9kYnl6OgorCWJ0c3QJCSZpZGJ5el9iaXQsU1BDT05EX0ZMRyglYTYpICMgZGlkIGRpdmlkZS1ieS16ZXJvIG9jY3VyPworCWJuZS53CQl1aWVoX2RpdmJ5emVybwkJIyB5ZXMKKwlicmEudwkJdWllaF9kb25lCQkjIG5vCit1aWVoX2RpdjY0X2E3OgorCWJ0c3QJCSYweDUsRVhDX0lTUiglYTYpCSMgc3VwZXJ2aXNvciBtb2RlPworCWJlcS5iCQl1aWVoX2RpdjY0X2RieXoJCSMgbm8KKyMgaGVyZSwgYTcgaGFzIGJlZW4gaW5jcmVtZW50ZWQgYnkgNCBieXRlcyBpbiBzdXBlcnZpc29yIG1vZGUuIHdlIHN0aWxsCisjIG1heSBoYXZlIHRoZSBmb2xsb3dpbmcgMyBjYXNlczoKKyMJKGkpCShhNykrCisjCShpaSkJKGE3KSs7IHRyYWNlCisjCShpaWkpCShhNykrOyBkaXZpZGUtYnktemVybworIworCWJ0c3QJCSZpZGJ5el9iaXQsU1BDT05EX0ZMRyglYTYpICMgZGlkIGRpdmlkZS1ieS16ZXJvIG9jY3VyPworCWJuZS53CQl1aWVoX2RpdmJ5emVyb19hNwkjIHllcworCXRzdC5iCQlFWENfSVNSKCVhNikJCSMgbm87IGlzIHRyYWNlIGVuYWJsZWQ/CisJYm1pLncJCXVpZWhfdHJhY2VfYTcJCSMgeWVzCisJYnJhLncJCXVpZWhfYTcJCQkjIG5vCisKKyMKKyMgbm93LCB3LyBncm91cDIsIG1ha2UgbW92ZXAncyBkZWNvZGUgdGhlIGZhc3Rlc3Qgc2luY2UgaXQgd2lsbAorIyBtb3N0IGxpa2VseSBiZSB1c2VkIHRoZSBtb3N0LgorIwordWllaF9ncm91cDI6CisJYnRzdAkJJjB4MTgsJWQwCQkjIHRlc3QgZm9yIG5vdCBtb3ZlcAorCWJlcS5iCQl1aWVoX25vdF9tb3ZlcAorCisKKwlic3IubAkJX21vdmVwZXJpcGhlcmFsCQkjIF9tb3ZlcCgpCisJYnJhLncJCXVpZWhfZG9uZQorCit1aWVoX25vdF9tb3ZlcDoKKwlidHN0CQkmMHgxYiwlZDAJCSMgdGVzdCBmb3IgY2hrMixjbXAyCisJYmVxLmIJCXVpZWhfY2hrMmNtcDIJCSMgZ28gaGFuZGxlIGNoazIsY21wMgorCisJc3dhcAkJJWQwCQkJIyBwdXQgb3B3b3JkIGluIGxvIHdvcmQKKwljbXBpLmIJCSVkMCwmMHhmYwkJIyB0ZXN0IGZvciBjYXMyCisJYmVxLmIJCXVpZWhfY2FzMgkJIyBnbyBoYW5kbGUgY2FzMgorCit1aWVoX2NhczoKKworCWJzci5sCQlfY29tcGFuZHNldAkJIyBfY2FzKCkKKworIyB0aGUgY2FzZXMgb2YgImNhcyBEYyxEdSwoYTcpKyIgYW5kICJjYXMgRGMsRHUsLShhNykiIHVzZWQgZnJvbSBzdXBlcnZpc29yCisjIG1vZGUgYXJlIHNpbXBseSBub3QgY29uc2lkZXJlZCB2YWxpZCBhbmQgdGhlcmVmb3JlIGFyZSBub3QgaGFuZGxlZC4KKworCWJyYS53CQl1aWVoX2RvbmUKKwordWllaF9jYXMyOgorCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCQkjIHJlYWQgZXh0ZW5zaW9uIHdvcmQKKworCXRzdC5sCQklZDEJCQkjIGlmZXRjaCBlcnJvcj8KKwlibmUudwkJaXNwX2lhY2MJCSMgeWVzCisKKwlic3IubAkJX2NvbXBhbmRzZXQyCQkjIF9jYXMyKCkKKwlicmEudwkJdWllaF9kb25lCisKK3VpZWhfY2hrMmNtcDI6CisjIGNoazIgbWF5IHRha2UgYSBjaGsgZXhjZXB0aW9uCisKKwlic3IubAkJX2NoazJfY21wMgkJIyBfY2hrMl9jbXAyKCkKKworIyBoZXJlIHdlIGNoZWNrIHRvIHNlZSBpZiBhIGNoayB0cmFwIHNob3VsZCBiZSB0YWtlbgorCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZpY2hrX2ZsZworCWJuZS53CQl1aWVoX2RvbmUKKwlicmEuYgkJdWllaF9jaGtfdHJhcAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyB0aGUgcmVxdWlyZWQgZW11bGF0aW9uIGhhcyBiZWVuIGNvbXBsZXRlZC4gbm93LCBjbGVhbiB1cCB0aGUgbmVjZXNzYXJ5IHN0YWNrCisjIGluZm8gYW5kIHByZXBhcmUgZm9yIHJ0ZQorIwordWllaF9kb25lOgorCW1vdi5iCQlFWENfQ0MrMSglYTYpLEVYQ19JU1IrMSglYTYpICMgaW5zZXJ0IG5ldyBjY29kZXMKKworIyBpZiBleGNlcHRpb24gb2NjdXJyZWQgaW4gdXNlciBtb2RlLCB0aGVuIHdlIGhhdmUgdG8gcmVzdG9yZSBhNyBpbiBjYXNlIGl0CisjIGNoYW5nZWQuIHdlIGRvbid0IGhhdmUgdG8gdXBkYXRlIGE3ICBmb3Igc3VwZXJ2aXNvciBtb3NlIGJlY2F1c2UgdGhhdCBjYXNlCisjIGRvZXNuJ3QgZmxvdyB0aHJvdWdoIGhlcmUKKwlidHN0CQkmMHg1LEVYQ19JU1IoJWE2KQkjIHVzZXIgb3Igc3VwZXJ2aXNvcj8KKwlibmUuYgkJdWllaF9maW5pc2gJCSMgc3VwZXJ2aXNvcgorCisJbW92LmwJCUVYQ19BNyglYTYpLCVhMAkJIyBmZXRjaCB1c2VyIHN0YWNrIHBvaW50ZXIKKwltb3YubAkJJWEwLCV1c3AJCSMgcmVzdG9yZSBpdAorCit1aWVoX2ZpbmlzaDoKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDNmZmYJIyByZXN0b3JlIGQwLWQ3L2EwLWE1CisKKwlidHN0CQkmMHg3LEVYQ19JU1IoJWE2KQkjIGlzIHRyYWNlIG1vZGUgb24/CisJYm5lLmIJCXVpZWhfdHJhY2UJCSMgeWVzO2dvIGhhbmRsZSB0cmFjZSBtb2RlCisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSxFWENfSVBDKCVhNikgIyBuZXcgcGMgb24gc3RhY2sgZnJhbWUKKwltb3YubAkJRVhDX0E2KCVhNiksKCVhNikJIyBwcmVwYXJlIG5ldyBhNiBmb3IgdW5saW5rCisJdW5sawkJJWE2CQkJIyB1bmxpbmsgc3RhY2sgZnJhbWUKKwlicmEubAkJX2lzcF9kb25lCisKKyMKKyMgVGhlIGluc3RydWN0aW9uIHRoYXQgd2FzIGp1c3QgZW11bGF0ZWQgd2FzIGFsc28gYmVpbmcgdHJhY2VkLiBUaGUgdHJhY2UKKyMgdHJhcCBmb3IgdGhpcyBpbnN0cnVjdGlvbiB3aWxsIGJlIGxvc3QgdW5sZXNzIHdlIGp1bXAgdG8gdGhlIHRyYWNlIGhhbmRsZXIuCisjIFNvLCBoZXJlIHdlIGNyZWF0ZSBhIFRyYWNlIEV4Y2VwdGlvbiBmb3JtYXQgbnVtYmVyIHR3byBleGNlcHRpb24gc3RhY2sKKyMgZnJhbWUgZnJvbSB0aGUgVW5pbXBsZW1lbnRlZCBJbnRlZ2VyIEludHJ1Y3Rpb24gRXhjZXB0aW9uIHN0YWNrIGZyYW1lCisjIGZvcm1hdCBudW1iZXIgemVybyBhbmQganVtcCB0byB0aGUgdXNlciBzdXBwbGllZCBob29rICJfcmVhbF90cmFjZSgpIi4KKyMKKyMJCSAgIFVJRUggRlJBTUUJCSAgIFRSQUNFIEZSQU1FCisjCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkJKiAweDAgKiAgMHgwZjQJKgkqICAgIEN1cnJlbnQJKgorIwkJKioqKioqKioqKioqKioqKioJKiAgICAgIFBDCSoKKyMJCSogICAgQ3VycmVudAkqCSoqKioqKioqKioqKioqKioqCisjCQkqICAgICAgUEMJKgkqIDB4MiAqICAweDAyNAkqCisjCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkJKiAgICAgIFNSCSoJKiAgICAgTmV4dAkqCisjCQkqKioqKioqKioqKioqKioqKgkqICAgICAgUEMJKgorIwkgICAgICAtPiogICAgIE9sZAkqCSoqKioqKioqKioqKioqKioqCisjICBmcm9tIGxpbmsgLS0+KiAgICAgIEE2CSoJKiAgICAgIFNSCSoKKyMJICAgICAgICAqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkgICAgICAgLyogICAgICBBNwkqCSogICAgICBOZXcJKiA8LS0gZm9yIGZpbmFsIHVubGluaworIwkgICAgICAvICoJCSoJKiAgICAgIEE2CSoKKyMgbGluayBmcmFtZSA8ICAqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkgICAgICBcIH4JCX4JfgkJfgorIwkgICAgICAgXCoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCit1aWVoX3RyYWNlOgorCW1vdi5sCQlFWENfQTYoJWE2KSwtMHg0KCVhNikKKwltb3YudwkJRVhDX0lTUiglYTYpLDB4MCglYTYpCisJbW92LmwJCUVYQ19JUEMoJWE2KSwweDgoJWE2KQorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLDB4MiglYTYpCisJbW92LncJCSYweDIwMjQsMHg2KCVhNikKKwlzdWIubAkJJjB4NCwlYTYKKwl1bmxrCQklYTYKKwlicmEubAkJX3JlYWxfdHJhY2UKKworIworIwkgICBVSUVIIEZSQU1FCQkgICAgQ0hLIEZSQU1FCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSogMHgwICogIDB4MGY0CSoJKiAgICBDdXJyZW50CSoKKyMJKioqKioqKioqKioqKioqKioJKiAgICAgIFBDCSoKKyMJKiAgICBDdXJyZW50CSoJKioqKioqKioqKioqKioqKioKKyMJKiAgICAgIFBDCSoJKiAweDIgKiAgMHgwMTgJKgorIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkqICAgICAgU1IJKgkqICAgICBOZXh0CSoKKyMJKioqKioqKioqKioqKioqKioJKiAgICAgIFBDCSoKKyMJICAgICg0IHdvcmRzKQkJKioqKioqKioqKioqKioqKioKKyMJCQkJKiAgICAgIFNSCSoKKyMJCQkJKioqKioqKioqKioqKioqKioKKyMJCQkJICAgICg2IHdvcmRzKQorIworIyB0aGUgY2hrMiBpbnN0cnVjdGlvbiBzaG91bGQgdGFrZSBhIGNoayB0cmFwLiBzbywgaGVyZSB3ZSBtdXN0IGNyZWF0ZSBhCisjIGNoayBzdGFjayBmcmFtZSBmcm9tIGFuIHVuaW1wbGVtZW50ZWQgaW50ZWdlciBpbnN0cnVjdGlvbiBleGNlcHRpb24gZnJhbWUKKyMgYW5kIGp1bXAgdG8gdGhlIHVzZXIgc3VwcGxpZWQgZW50cnkgcG9pbnQgIl9yZWFsX2NoaygpIi4KKyMKK3VpZWhfY2hrX3RyYXA6CisJbW92LmIJCUVYQ19DQysxKCVhNiksRVhDX0lTUisxKCVhNikgIyBpbnNlcnQgbmV3IGNjb2RlcworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4M2ZmZgkjIHJlc3RvcmUgZDAtZDcvYTAtYTUKKworCW1vdi53CQlFWENfSVNSKCVhNiksKCVhNikJIyBwdXQgbmV3IFNSIG9uIHN0YWNrCisJbW92LmwJCUVYQ19JUEMoJWE2KSwweDgoJWE2KQkjIHB1dCAiQ3VycmVudCBQQyIgb24gc3RhY2sKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwweDIoJWE2KSAjIHB1dCAiTmV4dCBQQyIgb24gc3RhY2sKKwltb3YudwkJJjB4MjAxOCwweDYoJWE2KQkjIHB1dCBWZWN0b3IgT2Zmc2V0IG9uIHN0YWNrCisKKwltb3YubAkJRVhDX0E2KCVhNiksJWE2CQkjIHJlc3RvcmUgYTYKKwlhZGQubAkJJkxPQ0FMX1NJWkUsJXNwCQkjIGNsZWFyIHN0YWNrIGZyYW1lCisKKwlicmEubAkJX3JlYWxfY2hrCisKKyMKKyMJICAgVUlFSCBGUkFNRQkJIERJVkJZWkVSTyBGUkFNRQorIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkqIDB4MCAqICAweDBmNAkqCSogICAgQ3VycmVudAkqCisjCSoqKioqKioqKioqKioqKioqCSogICAgICBQQwkqCisjCSogICAgQ3VycmVudAkqCSoqKioqKioqKioqKioqKioqCisjCSogICAgICBQQwkqCSogMHgyICogIDB4MDE0CSoKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJKiAgICAgIFNSCSoJKiAgICAgTmV4dAkqCisjCSoqKioqKioqKioqKioqKioqCSogICAgICBQQwkqCisjCSAgICAoNCB3b3JkcykJCSoqKioqKioqKioqKioqKioqCisjCQkJCSogICAgICBTUgkqCisjCQkJCSoqKioqKioqKioqKioqKioqCisjCQkJCSAgICAoNiB3b3JkcykKKyMKKyMgdGhlIGRpdmlkZSBpbnN0cnVjdGlvbiBzaG91bGQgdGFrZSBhbiBpbnRlZ2VyIGRpdmlkZSBieSB6ZXJvIHRyYXAuIHNvLCBoZXJlCisjIHdlIG11c3QgY3JlYXRlIGEgZGl2Ynl6ZXJvIHN0YWNrIGZyYW1lIGZyb20gYW4gdW5pbXBsZW1lbnRlZCBpbnRlZ2VyCisjIGluc3RydWN0aW9uIGV4Y2VwdGlvbiBmcmFtZSBhbmQganVtcCB0byB0aGUgdXNlciBzdXBwbGllZCBlbnRyeSBwb2ludAorIyAiX3JlYWxfZGl2Ynl6ZXJvKCkiLgorIwordWllaF9kaXZieXplcm86CisJbW92LmIJCUVYQ19DQysxKCVhNiksRVhDX0lTUisxKCVhNikgIyBpbnNlcnQgbmV3IGNjb2RlcworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4M2ZmZgkjIHJlc3RvcmUgZDAtZDcvYTAtYTUKKworCW1vdi53CQlFWENfSVNSKCVhNiksKCVhNikJIyBwdXQgbmV3IFNSIG9uIHN0YWNrCisJbW92LmwJCUVYQ19JUEMoJWE2KSwweDgoJWE2KQkjIHB1dCAiQ3VycmVudCBQQyIgb24gc3RhY2sKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwweDIoJWE2KSAjIHB1dCAiTmV4dCBQQyIgb24gc3RhY2sKKwltb3YudwkJJjB4MjAxNCwweDYoJWE2KQkjIHB1dCBWZWN0b3IgT2Zmc2V0IG9uIHN0YWNrCisKKwltb3YubAkJRVhDX0E2KCVhNiksJWE2CQkjIHJlc3RvcmUgYTYKKwlhZGQubAkJJkxPQ0FMX1NJWkUsJXNwCQkjIGNsZWFyIHN0YWNrIGZyYW1lCisKKwlicmEubAkJX3JlYWxfZGl2Ynl6ZXJvCisKKyMKKyMJCQkJIERJVkJZWkVSTyBGUkFNRQorIwkJCQkqKioqKioqKioqKioqKioqKgorIwkJCQkqICAgIEN1cnJlbnQJKgorIwkgICBVSUVIIEZSQU1FCQkqICAgICAgUEMJKgorIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkqIDB4MCAqICAweDBmNAkqCSogMHgyICogMHgwMTQJKgorIwkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkqICAgIEN1cnJlbnQJKgkqICAgICBOZXh0CSoKKyMJKiAgICAgIFBDCSoJKiAgICAgIFBDCSoKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJKiAgICAgIFNSCSoJKiAgICAgIFNSCSoKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJICAgICg0IHdvcmRzKQkJICAgICg2IHdvcmRzKQorIworIyB0aGUgZGl2aWRlIGluc3RydWN0aW9uIHNob3VsZCB0YWtlIGFuIGludGVnZXIgZGl2aWRlIGJ5IHplcm8gdHJhcC4gc28sIGhlcmUKKyMgd2UgbXVzdCBjcmVhdGUgYSBkaXZieXplcm8gc3RhY2sgZnJhbWUgZnJvbSBhbiB1bmltcGxlbWVudGVkIGludGVnZXIKKyMgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9uIGZyYW1lIGFuZCBqdW1wIHRvIHRoZSB1c2VyIHN1cHBsaWVkIGVudHJ5IHBvaW50CisjICJfcmVhbF9kaXZieXplcm8oKSIuCisjCisjIEhvd2V2ZXIsIHdlIG11c3QgYWxzbyBkZWFsIHdpdGggdGhlIGZhY3QgdGhhdCAoYTcpKyB3YXMgdXNlZCBmcm9tIHN1cGVydmlzb3IKKyMgbW9kZSwgdGhlcmVieSBzaGlmdGluZyB0aGUgc3RhY2sgZnJhbWUgdXAgNCBieXRlcy4KKyMKK3VpZWhfZGl2Ynl6ZXJvX2E3OgorCW1vdi5iCQlFWENfQ0MrMSglYTYpLEVYQ19JU1IrMSglYTYpICMgaW5zZXJ0IG5ldyBjY29kZXMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDNmZmYJIyByZXN0b3JlIGQwLWQ3L2EwLWE1CisKKwltb3YubAkJRVhDX0lQQyglYTYpLDB4YyglYTYpCSMgcHV0ICJDdXJyZW50IFBDIiBvbiBzdGFjaworCW1vdi53CQkmMHgyMDE0LDB4YSglYTYpCSMgcHV0IFZlY3RvciBPZmZzZXQgb24gc3RhY2sKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwweDYoJWE2KSAjIHB1dCAiTmV4dCBQQyIgb24gc3RhY2sKKworCW1vdi5sCQlFWENfQTYoJWE2KSwlYTYJCSMgcmVzdG9yZSBhNgorCWFkZC5sCQkmNCtMT0NBTF9TSVpFLCVzcAkjIGNsZWFyIHN0YWNrIGZyYW1lCisKKwlicmEubAkJX3JlYWxfZGl2Ynl6ZXJvCisKKyMKKyMJCQkJICAgVFJBQ0UgRlJBTUUKKyMJCQkJKioqKioqKioqKioqKioqKioKKyMJCQkJKiAgICBDdXJyZW50CSoKKyMJICAgVUlFSCBGUkFNRQkJKiAgICAgIFBDCSoKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJKiAweDAgKiAgMHgwZjQJKgkqIDB4MiAqIDB4MDI0CSoKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJKiAgICBDdXJyZW50CSoJKiAgICAgTmV4dAkqCisjCSogICAgICBQQwkqCSogICAgICBQQwkqCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSogICAgICBTUgkqCSogICAgICBTUgkqCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSAgICAoNCB3b3JkcykJCSAgICAoNiB3b3JkcykKKyMKKyMKKyMgVGhlIGluc3RydWN0aW9uIHRoYXQgd2FzIGp1c3QgZW11bGF0ZWQgd2FzIGFsc28gYmVpbmcgdHJhY2VkLiBUaGUgdHJhY2UKKyMgdHJhcCBmb3IgdGhpcyBpbnN0cnVjdGlvbiB3aWxsIGJlIGxvc3QgdW5sZXNzIHdlIGp1bXAgdG8gdGhlIHRyYWNlIGhhbmRsZXIuCisjIFNvLCBoZXJlIHdlIGNyZWF0ZSBhIFRyYWNlIEV4Y2VwdGlvbiBmb3JtYXQgbnVtYmVyIHR3byBleGNlcHRpb24gc3RhY2sKKyMgZnJhbWUgZnJvbSB0aGUgVW5pbXBsZW1lbnRlZCBJbnRlZ2VyIEludHJ1Y3Rpb24gRXhjZXB0aW9uIHN0YWNrIGZyYW1lCisjIGZvcm1hdCBudW1iZXIgemVybyBhbmQganVtcCB0byB0aGUgdXNlciBzdXBwbGllZCBob29rICJfcmVhbF90cmFjZSgpIi4KKyMKKyMgSG93ZXZlciwgd2UgbXVzdCBhbHNvIGRlYWwgd2l0aCB0aGUgZmFjdCB0aGF0IChhNykrIHdhcyB1c2VkIGZyb20gc3VwZXJ2aXNvcgorIyBtb2RlLCB0aGVyZWJ5IHNoaWZ0aW5nIHRoZSBzdGFjayBmcmFtZSB1cCA0IGJ5dGVzLgorIwordWllaF90cmFjZV9hNzoKKwltb3YuYgkJRVhDX0NDKzEoJWE2KSxFWENfSVNSKzEoJWE2KSAjIGluc2VydCBuZXcgY2NvZGVzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgzZmZmCSMgcmVzdG9yZSBkMC1kNy9hMC1hNQorCisJbW92LmwJCUVYQ19JUEMoJWE2KSwweGMoJWE2KQkjIHB1dCAiQ3VycmVudCBQQyIgb24gc3RhY2sKKwltb3YudwkJJjB4MjAyNCwweGEoJWE2KQkjIHB1dCBWZWN0b3IgT2Zmc2V0IG9uIHN0YWNrCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksMHg2KCVhNikgIyBwdXQgIk5leHQgUEMiIG9uIHN0YWNrCisKKwltb3YubAkJRVhDX0E2KCVhNiksJWE2CQkjIHJlc3RvcmUgYTYKKwlhZGQubAkJJjQrTE9DQUxfU0laRSwlc3AJIyBjbGVhciBzdGFjayBmcmFtZQorCisJYnJhLmwJCV9yZWFsX3RyYWNlCisKKyMKKyMJCQkJICAgVUlFSCBGUkFNRQorIwkJCQkqKioqKioqKioqKioqKioqKgorIwkJCQkqIDB4MCAqIDB4MGY0CSoKKyMJICAgVUlFSCBGUkFNRQkJKioqKioqKioqKioqKioqKioKKyMJKioqKioqKioqKioqKioqKioJKiAgICAgTmV4dAkqCisjCSogMHgwICogIDB4MGY0CSoJKiAgICAgIFBDCSoKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJKiAgICBDdXJyZW50CSoJKiAgICAgIFNSCSoKKyMJKiAgICAgIFBDCSoJKioqKioqKioqKioqKioqKioKKyMJKioqKioqKioqKioqKioqKioJICAgICg0IHdvcmRzKQorIwkqICAgICAgU1IJKgorIwkqKioqKioqKioqKioqKioqKgorIwkgICAgKDQgd29yZHMpCit1aWVoX2E3OgorCW1vdi5iCQlFWENfQ0MrMSglYTYpLEVYQ19JU1IrMSglYTYpICMgaW5zZXJ0IG5ldyBjY29kZXMKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDNmZmYJIyByZXN0b3JlIGQwLWQ3L2EwLWE1CisKKwltb3YudwkJJjB4MDBmNCwweGUoJWE2KQkjIHB1dCBWZWN0b3IgT2Zmc2V0IG9uIHN0YWNrCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksMHhhKCVhNikgIyBwdXQgIk5leHQgUEMiIG9uIHN0YWNrCisJbW92LncJCUVYQ19JU1IoJWE2KSwweDgoJWE2KQkjIHB1dCBTUiBvbiBzdGFjaworCisJbW92LmwJCUVYQ19BNiglYTYpLCVhNgkJIyByZXN0b3JlIGE2CisJYWRkLmwJCSY4K0xPQ0FMX1NJWkUsJXNwCSMgY2xlYXIgc3RhY2sgZnJhbWUKKwlicmEubAkJX2lzcF9kb25lCisKKyMjIyMjIyMjIyMKKworIyB0aGlzIGlzIHRoZSBleGl0IHBvaW50IGlmIGEgZGF0YSByZWFkIG9yIHdyaXRlIGZhaWxzLgorIyBhMCA9IGZhaWxpbmcgYWRkcmVzcworIyBkMCA9IGZzbHcKK2lzcF9kYWNjOgorCW1vdi5sCQklYTAsKCVhNikJCSMgc2F2ZSBhZGRyZXNzCisJbW92LmwJCSVkMCwtMHg0KCVhNikJCSMgc2F2ZSBwYXJ0aWFsIGZzbHcKKworCWxlYQkJLTY0KCVhNiksJXNwCisJbW92bS5sCQkoJXNwKSssJjB4N2ZmZgkJIyByZXN0b3JlIGQwLWQ3L2EwLWE2CisKKwltb3YubAkJMHhjKCVzcCksLSglc3ApCQkjIG1vdmUgdm9mZixoaShwYykKKwltb3YubAkJMHg0KCVzcCksMHgxMCglc3ApCSMgc3RvcmUgZnNsdworCW1vdi5sCQkweGMoJXNwKSwweDQoJXNwKQkjIHN0b3JlIHNyLGxvKHBjKQorCW1vdi5sCQkweDgoJXNwKSwweGMoJXNwKQkjIHN0b3JlIGFkZHJlc3MKKwltb3YubAkJKCVzcCkrLDB4NCglc3ApCQkjIHN0b3JlIHZvZmYsaGkocGMpCisJbW92LncJCSYweDQwMDgsMHg2KCVzcCkJIyBzdG9yZSBuZXcgdm9mZgorCisJYnJhLmIJCWlzcF9hY2NfZXhpdAorCisjIHRoaXMgaXMgdGhlIGV4aXQgcG9pbnQgaWYgYW4gaW5zdHJ1Y3Rpb24gd29yZCByZWFkIGZhaWxzLgorIyBGU0xXOgorIwltaXNhbGlnbmVkID0gdHJ1ZQorIwlyZWFkID0gdHJ1ZQorIwlzaXplID0gd29yZAorIwlpbnN0cnVjdGlvbiA9IHRydWUKKyMJc29mdHdhcmUgZW11bGF0aW9uIGVycm9yID0gdHJ1ZQoraXNwX2lhY2M6CisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgzZmZmCSMgcmVzdG9yZSBkMC1kNy9hMC1hNQorCXVubGsJCSVhNgkJCSMgdW5saW5rIGZyYW1lCisJc3ViLncJCSYweDgsJXNwCQkjIG1ha2Ugcm9vbSBmb3IgYWNjIGZyYW1lCisJbW92LmwJCTB4OCglc3ApLCglc3ApCQkjIHN0b3JlIHNyLGxvKHBjKQorCW1vdi53CQkweGMoJXNwKSwweDQoJXNwKQkjIHN0b3JlIGhpKHBjKQorCW1vdi53CQkmMHg0MDA4LDB4Niglc3ApCSMgc3RvcmUgbmV3IHZvZmYKKwltb3YubAkJMHgyKCVzcCksMHg4KCVzcCkJIyBzdG9yZSBhZGRyZXNzICg9cGMpCisJbW92LmwJCSYweDA5NDI4MDAxLDB4Yyglc3ApCSMgc3RvcmUgZnNsdworCitpc3BfYWNjX2V4aXQ6CisJYnRzdAkJJjB4NSwoJXNwKQkJIyB1c2VyIG9yIHN1cGVydmlzb3I/CisJYmVxLmIJCWlzcF9hY2NfZXhpdDIJCSMgdXNlcgorCWJzZXQJCSYweDIsMHhkKCVzcCkJCSMgc2V0IHN1cGVydmlzb3IgVE0gYml0Citpc3BfYWNjX2V4aXQyOgorCWJyYS5sCQlfcmVhbF9hY2Nlc3MKKworIyBpZiB0aGUgYWRkcmVzc2luZyBtb2RlIHdhcyAoYW4pKyBvciAtKGFuKSwgdGhlIGFkZHJlc3MgcmVnaXN0ZXIgbXVzdAorIyBiZSByZXN0b3JlZCB0byBpdHMgcHJlLWV4Y2VwdGlvbiB2YWx1ZSBiZWZvcmUgZW50ZXJpbmcgX3JlYWxfYWNjZXNzLgoraXNwX3Jlc3RvcmU6CisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJnJlc3RvcmVfZmxnICMgZG8gd2UgbmVlZCBhIHJlc3RvcmU/CisJYm5lLmIJCWlzcF9yZXN0b3JlX2RvbmUJIyBubworCWNsci5sCQklZDAKKwltb3YuYgkJRVhDX1NBVlJFRyglYTYpLCVkMAkjIHJlZ25vIHRvIHJlc3RvcmUKKwltb3YubAkJRVhDX1NBVlZBTCglYTYpLChFWENfQVJFR1MsJWE2LCVkMC5sKjQpICMgcmVzdG9yZSB2YWx1ZQoraXNwX3Jlc3RvcmVfZG9uZToKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfY2FsY19lYSgpOiByb3V0aW5lIHRvIGNhbGN1bGF0ZSBlZmZlY3RpdmUgYWRkcmVzcwkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2ltZW1fcmVhZF93b3JkKCkgLSByZWFkIGluc3RydWN0aW9uIHdvcmQJCQkjCisjCV9pbWVtX3JlYWRfbG9uZygpIC0gcmVhZCBpbnN0cnVjdGlvbiBsb25nd29yZAkJCSMKKyMJX2RtZW1fcmVhZF9sb25nKCkgLSByZWFkIGRhdGEgbG9uZ3dvcmQgKGZvciBtZW1vcnkgaW5kaXJlY3QpCSMKKyMJaXNwX2lhY2MoKSAtIGhhbmRsZSBpbnN0cnVjdGlvbiBhY2Nlc3MgZXJyb3IgZXhjZXB0aW9uCQkjCisjCWlzcF9kYWNjKCkgLSBoYW5kbGUgZGF0YSBhY2Nlc3MgZXJyb3IgZXhjZXB0aW9uCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZDAgPSBudW1iZXIgb2YgYnl0ZXMgcmVsYXRlZCB0byBlZmZlY3RpdmUgYWRkcmVzcyAodyxsKQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSWYgZXhpdGluZyB0aHJvdWdoIGlzcF9kYWNjLi4uCQkJCQkjCisjCQlhMCA9IGZhaWxpbmcgYWRkcmVzcwkJCQkJIworIwkJZDAgPSBGU0xXCQkJCQkJIworIwllbHNpZiBleGl0aW5nIHRob3VnaCBpc3BfaWFjYy4uLgkJCQkjCisjCQlub25lCQkJCQkJCSMKKyMJZWxzZQkJCQkJCQkJIworIwkJYTAgPSBlZmZlY3RpdmUgYWRkcmVzcwkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhlIGVmZmVjdGl2ZSBhZGRyZXNzIHR5cGUgaXMgZGVjb2RlZCBmcm9tIHRoZSBvcHdvcmQgcmVzaWRpbmcJIworIyBvbiB0aGUgc3RhY2suIEEganVtcCB0YWJsZSBpcyB1c2VkIHRvIHZlY3RvciB0byBhIHJvdXRpbmUgZm9yIHRoZQkjCisjIGFwcHJvcHJpYXRlIG1vZGUuIFNpbmNlIG5vbmUgb2YgdGhlIGVtdWxhdGVkIGludGVnZXIgaW5zdHJ1Y3Rpb25zCSMKKyMgdXNlcyBieXRlLXNpemVkIG9wZXJhbmRzLCBvbmx5IGhhbmRsZSB3b3JkIGFuZCBsb25nIG9wZXJhdGlvbnMuCSMKKyMJCQkJCQkJCQkjCisjCURuLEFuCS0gc2hvdWxkbid0IGVudGVyIGhlcmUJCQkJCSMKKyMJKEFuKQktIGZldGNoIEFuIHZhbHVlIGZyb20gc3RhY2sJCQkJIworIwktKEFuKQktIGZldGNoIEFuIHZhbHVlIGZyb20gc3RhY2s7IHJldHVybiBkZWNyIHZhbHVlOwkJIworIwkJICBwbGFjZSBkZWNyIHZhbHVlIG9uIHN0YWNrOyBzdG9yZSBvbGQgdmFsdWUgaW4gY2FzZSBvZgkjCisjCQkgIGZ1dHVyZSBhY2Nlc3MgZXJyb3I7IGlmIC0oYTcpLCBzZXQgbWRhN19mbGcgaW4JIworIwkJICBTUENPTkRfRkxHCQkJCQkJIworIwkoQW4pKwktIGZldGNoIEFuIHZhbHVlIGZyb20gc3RhY2s7IHJldHVybiB2YWx1ZTsJCSMKKyMJCSAgcGxhY2UgaW5jciB2YWx1ZSBvbiBzdGFjazsgc3RvcmUgb2xkIHZhbHVlIGluIGNhc2Ugb2YJIworIwkJICBmdXR1cmUgYWNjZXNzIGVycm9yOyBpZiAoYTcpKywgc2V0IG1pYTdfZmxnIGluCSMKKyMJCSAgU1BDT05EX0ZMRwkJCQkJCSMKKyMJKGQxNixBbikgLSBmZXRjaCBBbiB2YWx1ZSBmcm9tIHN0YWNrOyByZWFkIGQxNiB1c2luZwkJIworIwkJICBfaW1lbV9yZWFkX3dvcmQoKTsgZmV0Y2ggbWF5IGZhaWwgLT4gYnJhbmNoIHRvCSMKKyMJCSAgaXNwX2lhY2MoKQkJCQkJCSMKKyMJKHh4eCkudywoeHh4KS5sIC0gdXNlIF9pbWVtX3JlYWRfe3dvcmQsbG9uZ30oKSB0byBmZXRjaAkJIworIwkJICBhZGRyZXNzOyBmZXRjaCBtYXkgZmFpbAkJCQkjCisjCSM8ZGF0YT4gLSByZXR1cm4gYWRkcmVzcyBvZiBpbW1lZGlhdGUgdmFsdWU7IHNldCBpbW1lZF9mbGcJIworIwkJICBpbiBTUENPTkRfRkxHCQkJCQkJIworIwkoZDE2LFBDKSAtIGZldGNoIHN0YWNrZWQgUEMgdmFsdWU7IHJlYWQgZDE2IHVzaW5nCQkjCisjCQkgIF9pbWVtX3JlYWRfd29yZCgpOyBmZXRjaCBtYXkgZmFpbCAtPiBicmFuY2ggdG8JIworIwkJICBpc3BfaWFjYygpCQkJCQkJIworIwlldmVyeXRoaW5nIGVsc2UgLSByZWFkIG5lZWRlZCBkaXNwbGFjZW1lbnRzIGFzIGFwcHJvcHJpYXRlIHcvCSMKKyMJCSAgX2ltZW1fcmVhZF97d29yZCxsb25nfSgpOyByZWFkIG1heSBmYWlsOyBpZiBtZW1vcnkJIworIwkJICBpbmRpcmVjdCwgcmVhZCBpbmRpcmVjdCBhZGRyZXNzIHVzaW5nCQkJIworIwkJICBfZG1lbV9yZWFkX2xvbmcoKSB3aGljaCBtYXkgYWxzbyBmYWlsCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2NhbGNfZWEKK19jYWxjX2VhOgorCW1vdi5sCQklZDAsJWEwCQkJIyBtb3ZlICMgYnl0ZXMgdG8gYTAKKworIyBNT0RFIGFuZCBSRUcgYXJlIHRha2VuIGZyb20gdGhlIEVYQ19PUFdPUkQuCisJbW92LncJCUVYQ19PUFdPUkQoJWE2KSwlZDAJIyBmZXRjaCBvcGNvZGUgd29yZAorCW1vdi53CQklZDAsJWQxCQkJIyBtYWtlIGEgY29weQorCisJYW5kaS53CQkmMHgzZiwlZDAJCSMgZXh0cmFjdCBtb2RlIGZpZWxkCisJYW5kaS5sCQkmMHg3LCVkMQkJIyBleHRyYWN0IHJlZyAgZmllbGQKKworIyBqdW1wIHRvIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIGZvciBlYWNoIHtNT0RFLFJFR30gcGFpci4KKwltb3YudwkJKHRibF9lYV9tb2RlLmIsJXBjLCVkMC53KjIpLCAlZDAgIyBmZXRjaCBqbXAgZGlzdGFuY2UKKwlqbXAJCSh0YmxfZWFfbW9kZS5iLCVwYywlZDAudyoxKSAjIGptcCB0byBjb3JyZWN0IGVhIG1vZGUKKworCXN3YmVnCQkmNjQKK3RibF9lYV9tb2RlOgorCXNob3J0CQl0YmxfZWFfbW9kZQktCXRibF9lYV9tb2RlCisJc2hvcnQJCXRibF9lYV9tb2RlCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJdGJsX2VhX21vZGUJLQl0YmxfZWFfbW9kZQorCXNob3J0CQl0YmxfZWFfbW9kZQktCXRibF9lYV9tb2RlCisJc2hvcnQJCXRibF9lYV9tb2RlCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJdGJsX2VhX21vZGUJLQl0YmxfZWFfbW9kZQorCXNob3J0CQl0YmxfZWFfbW9kZQktCXRibF9lYV9tb2RlCisJc2hvcnQJCXRibF9lYV9tb2RlCS0JdGJsX2VhX21vZGUKKworCXNob3J0CQl0YmxfZWFfbW9kZQktCXRibF9lYV9tb2RlCisJc2hvcnQJCXRibF9lYV9tb2RlCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJdGJsX2VhX21vZGUJLQl0YmxfZWFfbW9kZQorCXNob3J0CQl0YmxfZWFfbW9kZQktCXRibF9lYV9tb2RlCisJc2hvcnQJCXRibF9lYV9tb2RlCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJdGJsX2VhX21vZGUJLQl0YmxfZWFfbW9kZQorCXNob3J0CQl0YmxfZWFfbW9kZQktCXRibF9lYV9tb2RlCisJc2hvcnQJCXRibF9lYV9tb2RlCS0JdGJsX2VhX21vZGUKKworCXNob3J0CQlhZGRyX2luZF9hMAktCXRibF9lYV9tb2RlCisJc2hvcnQJCWFkZHJfaW5kX2ExCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJYWRkcl9pbmRfYTIJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlhZGRyX2luZF9hMwktCXRibF9lYV9tb2RlCisJc2hvcnQJCWFkZHJfaW5kX2E0CS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJYWRkcl9pbmRfYTUJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlhZGRyX2luZF9hNgktCXRibF9lYV9tb2RlCisJc2hvcnQJCWFkZHJfaW5kX2E3CS0JdGJsX2VhX21vZGUKKworCXNob3J0CQlhZGRyX2luZF9wX2EwCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJYWRkcl9pbmRfcF9hMQktCXRibF9lYV9tb2RlCisJc2hvcnQJCWFkZHJfaW5kX3BfYTIJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlhZGRyX2luZF9wX2EzCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJYWRkcl9pbmRfcF9hNAktCXRibF9lYV9tb2RlCisJc2hvcnQJCWFkZHJfaW5kX3BfYTUJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlhZGRyX2luZF9wX2E2CS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJYWRkcl9pbmRfcF9hNwktCXRibF9lYV9tb2RlCisKKwlzaG9ydAkJYWRkcl9pbmRfbV9hMAkJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlhZGRyX2luZF9tX2ExCQktCXRibF9lYV9tb2RlCisJc2hvcnQJCWFkZHJfaW5kX21fYTIJCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJYWRkcl9pbmRfbV9hMwkJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlhZGRyX2luZF9tX2E0CQktCXRibF9lYV9tb2RlCisJc2hvcnQJCWFkZHJfaW5kX21fYTUJCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJYWRkcl9pbmRfbV9hNgkJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlhZGRyX2luZF9tX2E3CQktCXRibF9lYV9tb2RlCisKKwlzaG9ydAkJYWRkcl9pbmRfZGlzcF9hMAktCXRibF9lYV9tb2RlCisJc2hvcnQJCWFkZHJfaW5kX2Rpc3BfYTEJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlhZGRyX2luZF9kaXNwX2EyCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJYWRkcl9pbmRfZGlzcF9hMwktCXRibF9lYV9tb2RlCisJc2hvcnQJCWFkZHJfaW5kX2Rpc3BfYTQJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlhZGRyX2luZF9kaXNwX2E1CS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJYWRkcl9pbmRfZGlzcF9hNgktCXRibF9lYV9tb2RlCisJc2hvcnQJCWFkZHJfaW5kX2Rpc3BfYTcJLQl0YmxfZWFfbW9kZQorCisJc2hvcnQJCV9hZGRyX2luZF9leHQJCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJX2FkZHJfaW5kX2V4dAkJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlfYWRkcl9pbmRfZXh0CQktCXRibF9lYV9tb2RlCisJc2hvcnQJCV9hZGRyX2luZF9leHQJCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJX2FkZHJfaW5kX2V4dAkJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlfYWRkcl9pbmRfZXh0CQktCXRibF9lYV9tb2RlCisJc2hvcnQJCV9hZGRyX2luZF9leHQJCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJX2FkZHJfaW5kX2V4dAkJLQl0YmxfZWFfbW9kZQorCisJc2hvcnQJCWFic19zaG9ydAkJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlhYnNfbG9uZwkJLQl0YmxfZWFfbW9kZQorCXNob3J0CQlwY19pbmQJCQktCXRibF9lYV9tb2RlCisJc2hvcnQJCXBjX2luZF9leHQJCS0JdGJsX2VhX21vZGUKKwlzaG9ydAkJaW1tZWRpYXRlCQktCXRibF9lYV9tb2RlCisJc2hvcnQJCXRibF9lYV9tb2RlCQktCXRibF9lYV9tb2RlCisJc2hvcnQJCXRibF9lYV9tb2RlCQktCXRibF9lYV9tb2RlCisJc2hvcnQJCXRibF9lYV9tb2RlCQktCXRibF9lYV9tb2RlCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3Q6IChBbikgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2FkZHJfaW5kX2EwOgorCW1vdi5sCQlFWENfQTAoJWE2KSwlYTAJCSMgR2V0IGN1cnJlbnQgYTAKKwlydHMKKworYWRkcl9pbmRfYTE6CisJbW92LmwJCUVYQ19BMSglYTYpLCVhMAkJIyBHZXQgY3VycmVudCBhMQorCXJ0cworCithZGRyX2luZF9hMjoKKwltb3YubAkJRVhDX0EyKCVhNiksJWEwCQkjIEdldCBjdXJyZW50IGEyCisJcnRzCisKK2FkZHJfaW5kX2EzOgorCW1vdi5sCQlFWENfQTMoJWE2KSwlYTAJCSMgR2V0IGN1cnJlbnQgYTMKKwlydHMKKworYWRkcl9pbmRfYTQ6CisJbW92LmwJCUVYQ19BNCglYTYpLCVhMAkJIyBHZXQgY3VycmVudCBhNAorCXJ0cworCithZGRyX2luZF9hNToKKwltb3YubAkJRVhDX0E1KCVhNiksJWEwCQkjIEdldCBjdXJyZW50IGE1CisJcnRzCisKK2FkZHJfaW5kX2E2OgorCW1vdi5sCQlFWENfQTYoJWE2KSwlYTAJCSMgR2V0IGN1cnJlbnQgYTYKKwlydHMKKworYWRkcl9pbmRfYTc6CisJbW92LmwJCUVYQ19BNyglYTYpLCVhMAkJIyBHZXQgY3VycmVudCBhNworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0IHcvIHBvc3RpbmNyZW1lbnQ6IChBbikrICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCithZGRyX2luZF9wX2EwOgorCW1vdi5sCQklYTAsJWQwCQkJIyBjb3B5IG5vLiBieXRlcworCW1vdi5sCQlFWENfQTAoJWE2KSwlYTAJCSMgbG9hZCBjdXJyZW50IHZhbHVlCisJYWRkLmwJCSVhMCwlZDAJCQkjIGluY3JlbWVudAorCW1vdi5sCQklZDAsRVhDX0EwKCVhNikJCSMgc2F2ZSBpbmNyZW1lbnRlZCB2YWx1ZQorCisJbW92LmwJCSVhMCxFWENfU0FWVkFMKCVhNikJIyBzYXZlIGluIGNhc2Ugb2YgYWNjZXNzIGVycm9yCisJbW92LmIJCSYweDAsRVhDX1NBVlJFRyglYTYpCSMgc2F2ZSByZWdubywgdG9vCisJbW92LmIJCSZyZXN0b3JlX2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgZmxhZworCXJ0cworCithZGRyX2luZF9wX2ExOgorCW1vdi5sCQklYTAsJWQwCQkJIyBjb3B5IG5vLiBieXRlcworCW1vdi5sCQlFWENfQTEoJWE2KSwlYTAJCSMgbG9hZCBjdXJyZW50IHZhbHVlCisJYWRkLmwJCSVhMCwlZDAJCQkjIGluY3JlbWVudAorCW1vdi5sCQklZDAsRVhDX0ExKCVhNikJCSMgc2F2ZSBpbmNyZW1lbnRlZCB2YWx1ZQorCisJbW92LmwJCSVhMCxFWENfU0FWVkFMKCVhNikJIyBzYXZlIGluIGNhc2Ugb2YgYWNjZXNzIGVycm9yCisJbW92LmIJCSYweDEsRVhDX1NBVlJFRyglYTYpCSMgc2F2ZSByZWdubywgdG9vCisJbW92LmIJCSZyZXN0b3JlX2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgZmxhZworCXJ0cworCithZGRyX2luZF9wX2EyOgorCW1vdi5sCQklYTAsJWQwCQkJIyBjb3B5IG5vLiBieXRlcworCW1vdi5sCQlFWENfQTIoJWE2KSwlYTAJCSMgbG9hZCBjdXJyZW50IHZhbHVlCisJYWRkLmwJCSVhMCwlZDAJCQkjIGluY3JlbWVudAorCW1vdi5sCQklZDAsRVhDX0EyKCVhNikJCSMgc2F2ZSBpbmNyZW1lbnRlZCB2YWx1ZQorCisJbW92LmwJCSVhMCxFWENfU0FWVkFMKCVhNikJIyBzYXZlIGluIGNhc2Ugb2YgYWNjZXNzIGVycm9yCisJbW92LmIJCSYweDIsRVhDX1NBVlJFRyglYTYpCSMgc2F2ZSByZWdubywgdG9vCisJbW92LmIJCSZyZXN0b3JlX2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgZmxhZworCXJ0cworCithZGRyX2luZF9wX2EzOgorCW1vdi5sCQklYTAsJWQwCQkJIyBjb3B5IG5vLiBieXRlcworCW1vdi5sCQlFWENfQTMoJWE2KSwlYTAJCSMgbG9hZCBjdXJyZW50IHZhbHVlCisJYWRkLmwJCSVhMCwlZDAJCQkjIGluY3JlbWVudAorCW1vdi5sCQklZDAsRVhDX0EzKCVhNikJCSMgc2F2ZSBpbmNyZW1lbnRlZCB2YWx1ZQorCisJbW92LmwJCSVhMCxFWENfU0FWVkFMKCVhNikJIyBzYXZlIGluIGNhc2Ugb2YgYWNjZXNzIGVycm9yCisJbW92LmIJCSYweDMsRVhDX1NBVlJFRyglYTYpCSMgc2F2ZSByZWdubywgdG9vCisJbW92LmIJCSZyZXN0b3JlX2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgZmxhZworCXJ0cworCithZGRyX2luZF9wX2E0OgorCW1vdi5sCQklYTAsJWQwCQkJIyBjb3B5IG5vLiBieXRlcworCW1vdi5sCQlFWENfQTQoJWE2KSwlYTAJCSMgbG9hZCBjdXJyZW50IHZhbHVlCisJYWRkLmwJCSVhMCwlZDAJCQkjIGluY3JlbWVudAorCW1vdi5sCQklZDAsRVhDX0E0KCVhNikJCSMgc2F2ZSBpbmNyZW1lbnRlZCB2YWx1ZQorCisJbW92LmwJCSVhMCxFWENfU0FWVkFMKCVhNikJIyBzYXZlIGluIGNhc2Ugb2YgYWNjZXNzIGVycm9yCisJbW92LmIJCSYweDQsRVhDX1NBVlJFRyglYTYpCSMgc2F2ZSByZWdubywgdG9vCisJbW92LmIJCSZyZXN0b3JlX2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgZmxhZworCXJ0cworCithZGRyX2luZF9wX2E1OgorCW1vdi5sCQklYTAsJWQwCQkJIyBjb3B5IG5vLiBieXRlcworCW1vdi5sCQlFWENfQTUoJWE2KSwlYTAJCSMgbG9hZCBjdXJyZW50IHZhbHVlCisJYWRkLmwJCSVhMCwlZDAJCQkjIGluY3JlbWVudAorCW1vdi5sCQklZDAsRVhDX0E1KCVhNikJCSMgc2F2ZSBpbmNyZW1lbnRlZCB2YWx1ZQorCisJbW92LmwJCSVhMCxFWENfU0FWVkFMKCVhNikJIyBzYXZlIGluIGNhc2Ugb2YgYWNjZXNzIGVycm9yCisJbW92LmIJCSYweDUsRVhDX1NBVlJFRyglYTYpCSMgc2F2ZSByZWdubywgdG9vCisJbW92LmIJCSZyZXN0b3JlX2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgZmxhZworCXJ0cworCithZGRyX2luZF9wX2E2OgorCW1vdi5sCQklYTAsJWQwCQkJIyBjb3B5IG5vLiBieXRlcworCW1vdi5sCQlFWENfQTYoJWE2KSwlYTAJCSMgbG9hZCBjdXJyZW50IHZhbHVlCisJYWRkLmwJCSVhMCwlZDAJCQkjIGluY3JlbWVudAorCW1vdi5sCQklZDAsRVhDX0E2KCVhNikJCSMgc2F2ZSBpbmNyZW1lbnRlZCB2YWx1ZQorCisJbW92LmwJCSVhMCxFWENfU0FWVkFMKCVhNikJIyBzYXZlIGluIGNhc2Ugb2YgYWNjZXNzIGVycm9yCisJbW92LmIJCSYweDYsRVhDX1NBVlJFRyglYTYpCSMgc2F2ZSByZWdubywgdG9vCisJbW92LmIJCSZyZXN0b3JlX2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgZmxhZworCXJ0cworCithZGRyX2luZF9wX2E3OgorCW1vdi5iCQkmbWlhN19mbGcsU1BDT05EX0ZMRyglYTYpICMgc2V0ICJzcGVjaWFsIGNhc2UiIGZsYWcKKworCW1vdi5sCQklYTAsJWQwCQkJIyBjb3B5IG5vLiBieXRlcworCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAJCSMgbG9hZCBjdXJyZW50IHZhbHVlCisJYWRkLmwJCSVhMCwlZDAJCQkjIGluY3JlbWVudAorCW1vdi5sCQklZDAsRVhDX0E3KCVhNikJCSMgc2F2ZSBpbmNyZW1lbnRlZCB2YWx1ZQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3Qgdy8gcHJlZGVjcmVtZW50OiAtKEFuKSAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCithZGRyX2luZF9tX2EwOgorCW1vdi5sCQlFWENfQTAoJWE2KSwlZDAJCSMgR2V0IGN1cnJlbnQgYTAKKwltb3YubAkJJWQwLEVYQ19TQVZWQUwoJWE2KQkjIHNhdmUgaW4gY2FzZSBvZiBhY2Nlc3MgZXJyb3IKKwlzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50CisJbW92LmwJCSVkMCxFWENfQTAoJWE2KQkJIyBTYXZlIGRlY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCisJbW92LmIJCSYweDAsRVhDX1NBVlJFRyglYTYpCSMgc2F2ZSByZWdubywgdG9vCisJbW92LmIJCSZyZXN0b3JlX2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgZmxhZworCXJ0cworCithZGRyX2luZF9tX2ExOgorCW1vdi5sCQlFWENfQTEoJWE2KSwlZDAJCSMgR2V0IGN1cnJlbnQgYTEKKwltb3YubAkJJWQwLEVYQ19TQVZWQUwoJWE2KQkjIHNhdmUgaW4gY2FzZSBvZiBhY2Nlc3MgZXJyb3IKKwlzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50CisJbW92LmwJCSVkMCxFWENfQTEoJWE2KQkJIyBTYXZlIGRlY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCisJbW92LmIJCSYweDEsRVhDX1NBVlJFRyglYTYpCSMgc2F2ZSByZWdubywgdG9vCisJbW92LmIJCSZyZXN0b3JlX2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgZmxhZworCXJ0cworCithZGRyX2luZF9tX2EyOgorCW1vdi5sCQlFWENfQTIoJWE2KSwlZDAJCSMgR2V0IGN1cnJlbnQgYTIKKwltb3YubAkJJWQwLEVYQ19TQVZWQUwoJWE2KQkjIHNhdmUgaW4gY2FzZSBvZiBhY2Nlc3MgZXJyb3IKKwlzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50CisJbW92LmwJCSVkMCxFWENfQTIoJWE2KQkJIyBTYXZlIGRlY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCisJbW92LmIJCSYweDIsRVhDX1NBVlJFRyglYTYpCSMgc2F2ZSByZWdubywgdG9vCisJbW92LmIJCSZyZXN0b3JlX2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgZmxhZworCXJ0cworCithZGRyX2luZF9tX2EzOgorCW1vdi5sCQlFWENfQTMoJWE2KSwlZDAJCSMgR2V0IGN1cnJlbnQgYTMKKwltb3YubAkJJWQwLEVYQ19TQVZWQUwoJWE2KQkjIHNhdmUgaW4gY2FzZSBvZiBhY2Nlc3MgZXJyb3IKKwlzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50CisJbW92LmwJCSVkMCxFWENfQTMoJWE2KQkJIyBTYXZlIGRlY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCisJbW92LmIJCSYweDMsRVhDX1NBVlJFRyglYTYpCSMgc2F2ZSByZWdubywgdG9vCisJbW92LmIJCSZyZXN0b3JlX2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgZmxhZworCXJ0cworCithZGRyX2luZF9tX2E0OgorCW1vdi5sCQlFWENfQTQoJWE2KSwlZDAJCSMgR2V0IGN1cnJlbnQgYTQKKwltb3YubAkJJWQwLEVYQ19TQVZWQUwoJWE2KQkjIHNhdmUgaW4gY2FzZSBvZiBhY2Nlc3MgZXJyb3IKKwlzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50CisJbW92LmwJCSVkMCxFWENfQTQoJWE2KQkJIyBTYXZlIGRlY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCisJbW92LmIJCSYweDQsRVhDX1NBVlJFRyglYTYpCSMgc2F2ZSByZWdubywgdG9vCisJbW92LmIJCSZyZXN0b3JlX2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgZmxhZworCXJ0cworCithZGRyX2luZF9tX2E1OgorCW1vdi5sCQlFWENfQTUoJWE2KSwlZDAJCSMgR2V0IGN1cnJlbnQgYTUKKwltb3YubAkJJWQwLEVYQ19TQVZWQUwoJWE2KQkjIHNhdmUgaW4gY2FzZSBvZiBhY2Nlc3MgZXJyb3IKKwlzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50CisJbW92LmwJCSVkMCxFWENfQTUoJWE2KQkJIyBTYXZlIGRlY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCisJbW92LmIJCSYweDUsRVhDX1NBVlJFRyglYTYpCSMgc2F2ZSByZWdubywgdG9vCisJbW92LmIJCSZyZXN0b3JlX2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgZmxhZworCXJ0cworCithZGRyX2luZF9tX2E2OgorCW1vdi5sCQlFWENfQTYoJWE2KSwlZDAJCSMgR2V0IGN1cnJlbnQgYTYKKwltb3YubAkJJWQwLEVYQ19TQVZWQUwoJWE2KQkjIHNhdmUgaW4gY2FzZSBvZiBhY2Nlc3MgZXJyb3IKKwlzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50CisJbW92LmwJCSVkMCxFWENfQTYoJWE2KQkJIyBTYXZlIGRlY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCisJbW92LmIJCSYweDYsRVhDX1NBVlJFRyglYTYpCSMgc2F2ZSByZWdubywgdG9vCisJbW92LmIJCSZyZXN0b3JlX2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgZmxhZworCXJ0cworCithZGRyX2luZF9tX2E3OgorCW1vdi5iCQkmbWRhN19mbGcsU1BDT05EX0ZMRyglYTYpICMgc2V0ICJzcGVjaWFsIGNhc2UiIGZsYWcKKworCW1vdi5sCQlFWENfQTcoJWE2KSwlZDAJCSMgR2V0IGN1cnJlbnQgYTcKKwlzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50CisJbW92LmwJCSVkMCxFWENfQTcoJWE2KQkJIyBTYXZlIGRlY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0IHcvIGRpc3BsYWNlbWVudDogKGQxNiwgQW4pICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCithZGRyX2luZF9kaXNwX2EwOgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAorCisJdHN0LmwJCSVkMQkJCSMgaWZldGNoIGVycm9yPworCWJuZS5sCQlpc3BfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKwlhZGQubAkJRVhDX0EwKCVhNiksJWEwCQkjIGEwICsgZDE2CisJcnRzCisKK2FkZHJfaW5kX2Rpc3BfYTE6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCisKKwl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CisJYm5lLmwJCWlzcF9pYWNjCQkjIHllcworCisJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCWFkZC5sCQlFWENfQTEoJWE2KSwlYTAJCSMgYTEgKyBkMTYKKwlydHMKKworYWRkcl9pbmRfZGlzcF9hMjoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKKworCXRzdC5sCQklZDEJCQkjIGlmZXRjaCBlcnJvcj8KKwlibmUubAkJaXNwX2lhY2MJCSMgeWVzCisKKwltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CisJYWRkLmwJCUVYQ19BMiglYTYpLCVhMAkJIyBhMiArIGQxNgorCXJ0cworCithZGRyX2luZF9kaXNwX2EzOgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAorCisJdHN0LmwJCSVkMQkJCSMgaWZldGNoIGVycm9yPworCWJuZS5sCQlpc3BfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKwlhZGQubAkJRVhDX0EzKCVhNiksJWEwCQkjIGEzICsgZDE2CisJcnRzCisKK2FkZHJfaW5kX2Rpc3BfYTQ6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCisKKwl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CisJYm5lLmwJCWlzcF9pYWNjCQkjIHllcworCisJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCWFkZC5sCQlFWENfQTQoJWE2KSwlYTAJCSMgYTQgKyBkMTYKKwlydHMKKworYWRkcl9pbmRfZGlzcF9hNToKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKKworCXRzdC5sCQklZDEJCQkjIGlmZXRjaCBlcnJvcj8KKwlibmUubAkJaXNwX2lhY2MJCSMgeWVzCisKKwltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CisJYWRkLmwJCUVYQ19BNSglYTYpLCVhMAkJIyBhNSArIGQxNgorCXJ0cworCithZGRyX2luZF9kaXNwX2E2OgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAorCisJdHN0LmwJCSVkMQkJCSMgaWZldGNoIGVycm9yPworCWJuZS5sCQlpc3BfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKwlhZGQubAkJRVhDX0E2KCVhNiksJWEwCQkjIGE2ICsgZDE2CisJcnRzCisKK2FkZHJfaW5kX2Rpc3BfYTc6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCisKKwl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CisJYm5lLmwJCWlzcF9pYWNjCQkjIHllcworCisJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCWFkZC5sCQlFWENfQTcoJWE2KSwlYTAJCSMgYTcgKyBkMTYKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3Qgdy8gaW5kZXgoOC1iaXQgZGlzcGxhY2VtZW50KTogKGRuLCBBbiwgWG4pICMKKyMgICAgIiAgICAgICAiICAgICAgICAgIiAgICB3LyAgICIgIChiYXNlIGRpc3BsYWNlbWVudCk6IChiZCwgQW4sIFhuKSAgIworIyBNZW1vcnkgaW5kaXJlY3QgcG9zdGluZGV4ZWQ6IChbYmQsIEFuXSwgWG4sIG9kKQkJICAgICAgICMKKyMgTWVtb3J5IGluZGlyZWN0IHByZWluZGV4ZWQ6IChbYmQsIEFuLCBYbl0sIG9kKQkJICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworX2FkZHJfaW5kX2V4dDoKKwltb3YubAkJJWQxLC0oJXNwKQorCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCQkjIGZldGNoIGV4dHdvcmQgaW4gZDAKKworCXRzdC5sCQklZDEJCQkjIGlmZXRjaCBlcnJvcj8KKwlibmUubAkJaXNwX2lhY2MJCSMgeWVzCisKKwltb3YubAkJKCVzcCkrLCVkMQorCisJbW92LmwJCShFWENfQVJFR1MsJWE2LCVkMS53KjQpLCVhMCAjIHB1dCBiYXNlIGluIGEwCisKKwlidHN0CQkmMHg4LCVkMAorCWJlcS5iCQlhZGRyX2luZF9pbmRleF84Yml0CSMgZm9yIGV4dCB3b3JkIG9yIG5vdD8KKworCW1vdm0ubAkJJjB4M2MwMCwtKCVzcCkJCSMgc2F2ZSBkMi1kNQorCisJbW92LmwJCSVkMCwlZDUJCQkjIHB1dCBleHR3b3JkIGluIGQ1CisJbW92LmwJCSVhMCwlZDMJCQkjIHB1dCBiYXNlIGluIGQzCisKKwlicmEubAkJY2FsY19tZW1faW5kCQkjIGNhbGMgbWVtb3J5IGluZGlyZWN0CisKK2FkZHJfaW5kX2luZGV4XzhiaXQ6CisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBvbGQgZDIKKworCW1vdi5sCQklZDAsJWQxCisJcm9sLncJCSYweDQsJWQxCisJYW5kaS53CQkmMHhmLCVkMQkJIyBleHRyYWN0IGluZGV4IHJlZ25vCisKKwltb3YubAkJKEVYQ19EUkVHUywlYTYsJWQxLncqNCksJWQxICMgZmV0Y2ggaW5kZXggcmVnIHZhbHVlCisKKwlidHN0CQkmMHhiLCVkMAkJIyBpcyBpdCB3b3JkIG9yIGxvbmc/CisJYm5lLmIJCWFpaThfbG9uZworCWV4dC5sCQklZDEJCQkjIHNpZ24gZXh0ZW5kIHdvcmQgaW5kZXgKK2FpaThfbG9uZzoKKwltb3YubAkJJWQwLCVkMgorCXJvbC53CQkmMHg3LCVkMgorCWFuZGkubAkJJjB4MywlZDIJCSMgZXh0cmFjdCBzY2FsZSB2YWx1ZQorCisJbHNsLmwJCSVkMiwlZDEJCQkjIHNoaWZ0IGluZGV4IGJ5IHNjYWxlCisKKwlleHRiLmwJCSVkMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CisJYWRkLmwJCSVkMSwlZDAJCQkjIGluZGV4ICsgZGlzcAorCWFkZC5sCQklZDAsJWEwCQkJIyBBbiArIChpbmRleCArIGRpc3ApCisKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIG9sZCBkMgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEltbWVkaWF0ZTogIzxkYXRhPiAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHdvcmQsIGxvbmc6IDxlYT4gb2YgdGhlIGRhdGEgaXMgdGhlIGN1cnJlbnQgZXh0ZW5zaW9uIHdvcmQJCSMKKyMJcG9pbnRlciB2YWx1ZS4gbmV3IGV4dGVuc2lvbiB3b3JkIHBvaW50ZXIgaXMgc2ltcGx5IHRoZSBvbGQJIworIwlwbHVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGRhdGEgdHlwZSgyIG9yIDQpLgkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaW1tZWRpYXRlOgorCW1vdi5iCQkmaW1tZWRfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCBpbW1lZGlhdGUgZmxhZworCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggZXh0ZW5zaW9uIHdvcmQgcHRyCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBYnNvbHV0ZSBzaG9ydDogKFhYWCkuVyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2Fic19zaG9ydDoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQJCSMgZmV0Y2ggc2hvcnQgYWRkcmVzcworCisJdHN0LmwJCSVkMQkJCSMgaWZldGNoIGVycm9yPworCWJuZS5sCQlpc3BfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyByZXR1cm4gPGVhPiBpbiBhMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBYnNvbHV0ZSBsb25nOiAoWFhYKS5MICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCithYnNfbG9uZzoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggbG9uZyBhZGRyZXNzCisKKwl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CisJYm5lLmwJCWlzcF9pYWNjCQkjIHllcworCisJbW92LmwJCSVkMCwlYTAJCQkjIHJldHVybiA8ZWE+IGluIGEwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUHJvZ3JhbSBjb3VudGVyIGluZGlyZWN0IHcvIGRpc3BsYWNlbWVudDogKGQxNiwgUEMpICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3BjX2luZDoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQJCSMgZmV0Y2ggd29yZCBkaXNwbGFjZW1lbnQKKworCXRzdC5sCQklZDEJCQkjIGlmZXRjaCBlcnJvcj8KKwlibmUubAkJaXNwX2lhY2MJCSMgeWVzCisKKwltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CisKKwlhZGQubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBwYyArIGQxNgorCisjIF9pbWVtX3JlYWRfd29yZCgpIGluY3JlYXNlZCB0aGUgZXh0d3B0ciBieSAyLiBuZWVkIHRvIGFkanVzdCBoZXJlLgorCXN1YnEubAkJJjB4MiwlYTAJCSMgYWRqdXN0IDxlYT4KKworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFBDIGluZGlyZWN0IHcvIGluZGV4KDgtYml0IGRpc3BsYWNlbWVudCk6IChkOCwgUEMsIEFuKSAjCisjICIgICAgICIgICAgIHcvICAgIiAgKGJhc2UgZGlzcGxhY2VtZW50KTogKGJkLCBQQywgQW4pICAjCisjIFBDIG1lbW9yeSBpbmRpcmVjdCBwb3N0aW5kZXhlZDogKFtiZCwgUENdLCBYbiwgb2QpICAgICAjCisjIFBDIG1lbW9yeSBpbmRpcmVjdCBwcmVpbmRleGVkOiAoW2JkLCBQQywgWG5dLCBvZCkgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitwY19pbmRfZXh0OgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAkJIyBmZXRjaCBleHQgd29yZAorCisJdHN0LmwJCSVkMQkJCSMgaWZldGNoIGVycm9yPworCWJuZS5sCQlpc3BfaWFjYwkJIyB5ZXMKKworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIHB1dCBiYXNlIGluIGEwCisJc3VicS5sCQkmMHgyLCVhMAkJIyBhZGp1c3QgYmFzZQorCisJYnRzdAkJJjB4OCwlZDAJCSMgaXMgZGlzcCBvbmx5IDggYml0cz8KKwliZXEuYgkJcGNfaW5kX2luZGV4XzhiaXQJIyB5ZXMKKworIyB0aGUgaW5kZXhlZCBhZGRyZXNzaW5nIG1vZGUgdXNlcyBhIGJhc2UgZGlzcGxhY2VtZW50IG9mIHNpemUKKyMgd29yZCBvciBsb25nCisJbW92bS5sCQkmMHgzYzAwLC0oJXNwKQkJIyBzYXZlIGQyLWQ1CisKKwltb3YubAkJJWQwLCVkNQkJCSMgcHV0IGV4dHdvcmQgaW4gZDUKKwltb3YubAkJJWEwLCVkMwkJCSMgcHV0IGJhc2UgaW4gZDMKKworCWJyYS5sCQljYWxjX21lbV9pbmQJCSMgY2FsYyBtZW1vcnkgaW5kaXJlY3QKKworcGNfaW5kX2luZGV4XzhiaXQ6CisJbW92LmwJCSVkMiwtKCVzcCkJCSMgY3JlYXRlIGEgdGVtcCByZWdpc3RlcgorCisJbW92LmwJCSVkMCwlZDEJCQkjIG1ha2UgZXh0d29yZCBjb3B5CisJcm9sLncJCSYweDQsJWQxCQkjIHJvdGF0ZSByZWcgbnVtIGludG8gcGxhY2UKKwlhbmRpLncJCSYweGYsJWQxCQkjIGV4dHJhY3QgcmVnaXN0ZXIgbnVtYmVyCisKKwltb3YubAkJKEVYQ19EUkVHUywlYTYsJWQxLncqNCksJWQxICMgZmV0Y2ggaW5kZXggcmVnIHZhbHVlCisKKwlidHN0CQkmMHhiLCVkMAkJIyBpcyBpbmRleCB3b3JkIG9yIGxvbmc/CisJYm5lLmIJCXBpaThfbG9uZwkJIyBsb25nCisJZXh0LmwJCSVkMQkJCSMgc2lnbiBleHRlbmQgd29yZCBpbmRleAorcGlpOF9sb25nOgorCW1vdi5sCQklZDAsJWQyCQkJIyBtYWtlIGV4dHdvcmQgY29weQorCXJvbC53CQkmMHg3LCVkMgkJIyByb3RhdGUgc2NhbGUgdmFsdWUgaW50byBwbGFjZQorCWFuZGkubAkJJjB4MywlZDIJCSMgZXh0cmFjdCBzY2FsZSB2YWx1ZQorCisJbHNsLmwJCSVkMiwlZDEJCQkjIHNoaWZ0IGluZGV4IGJ5IHNjYWxlCisKKwlleHRiLmwJCSVkMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CisJYWRkLmwJCSVkMSwlZDAJCQkjIGluZGV4ICsgZGlzcAorCWFkZC5sCQklZDAsJWEwCQkJIyBBbiArIChpbmRleCArIGRpc3ApCisKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIHRlbXAgcmVnaXN0ZXIKKworCXJ0cworCisjIGE1ID0gZXhjX2V4dHdwdHIJKGdsb2JhbCB0byB1YWVoKQorIyBhNCA9IGV4Y19vcHdvcmQJKGdsb2JhbCB0byB1YWVoKQorIyBhMyA9IGV4Y19kcmVncwkoZ2xvYmFsIHRvIHVhZWgpCisKKyMgZDIgPSBpbmRleAkJKGludGVybmFsICIgICAgICIgICAgKQorIyBkMyA9IGJhc2UJCShpbnRlcm5hbCAiICAgICAiICAgICkKKyMgZDQgPSBvZAkJKGludGVybmFsICIgICAgICIgICAgKQorIyBkNSA9IGV4dHdvcmQJCShpbnRlcm5hbCAiICAgICAiICAgICkKK2NhbGNfbWVtX2luZDoKKwlidHN0CQkmMHg2LCVkNQkJIyBpcyB0aGUgaW5kZXggc3VwcHJlc3NlZD8KKwliZXEuYgkJY2FsY19pbmRleAorCWNsci5sCQklZDIJCQkjIHllcywgc28gaW5kZXggPSAwCisJYnJhLmIJCWJhc2Vfc3VwcF9jaworY2FsY19pbmRleDoKKwliZmV4dHUJCSVkNXsmMTY6JjR9LCVkMgorCW1vdi5sCQkoRVhDX0RSRUdTLCVhNiwlZDIudyo0KSwlZDIKKwlidHN0CQkmMHhiLCVkNQkJIyBpcyBpbmRleCB3b3JkIG9yIGxvbmc/CisJYm5lLmIJCW5vX2V4dAorCWV4dC5sCQklZDIKK25vX2V4dDoKKwliZmV4dHUJCSVkNXsmMjE6JjJ9LCVkMAorCWxzbC5sCQklZDAsJWQyCitiYXNlX3N1cHBfY2s6CisJYnRzdAkJJjB4NywlZDUJCSMgaXMgdGhlIGJkIHN1cHByZXNzZWQ/CisJYmVxLmIJCW5vX2Jhc2Vfc3VwCisJY2xyLmwJCSVkMworbm9fYmFzZV9zdXA6CisJYmZleHR1CQklZDV7JjI2OiYyfSwlZDAJIyBnZXQgYmQgc2l6ZQorIwliZXEubAkJX2Vycm9yCQkJIyBpZiAoc2l6ZSA9PSAwKSBpdCdzIHJlc2VydmVkCisJY21waS5iCQklZDAsJjIKKwlibHQuYgkJbm9fYmQKKwliZXEuYgkJZ2V0X3dvcmRfYmQKKworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZworCisJdHN0LmwJCSVkMQkJCSMgaWZldGNoIGVycm9yPworCWJuZS5sCQlpc3BfaWFjYwkJIyB5ZXMKKworCWJyYS5iCQljaGtfaW5kCitnZXRfd29yZF9iZDoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKKworCXRzdC5sCQklZDEJCQkjIGlmZXRjaCBlcnJvcj8KKwlibmUubAkJaXNwX2lhY2MJCSMgeWVzCisKKwlleHQubAkJJWQwCQkJIyBzaWduIGV4dGVuZCBiZAorCitjaGtfaW5kOgorCWFkZC5sCQklZDAsJWQzCQkJIyBiYXNlICs9IGJkCitub19iZDoKKwliZmV4dHUJCSVkNXsmMzA6JjJ9LCVkMAkJIyBpcyBvZCBzdXBwcmVzc2VkPworCWJlcS53CQlhaWlfYmQKKwljbXBpLmIJCSVkMCwmMHgyCisJYmx0LmIJCW51bGxfb2QKKwliZXEuYgkJd29yZF9vZAorCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCisKKwl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CisJYm5lLmwJCWlzcF9pYWNjCQkjIHllcworCisJYnJhLmIJCWFkZF90aGVtCisKK3dvcmRfb2Q6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCisKKwl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CisJYm5lLmwJCWlzcF9pYWNjCQkjIHllcworCisJZXh0LmwJCSVkMAkJCSMgc2lnbiBleHRlbmQgb2QKKwlicmEuYgkJYWRkX3RoZW0KKworbnVsbF9vZDoKKwljbHIubAkJJWQwCithZGRfdGhlbToKKwltb3YubAkJJWQwLCVkNAorCWJ0c3QJCSYweDIsJWQ1CQkjIHByZSBvciBwb3N0IGluZGV4aW5nPworCWJlcS5iCQlwcmVfaW5kZXhlZAorCisJbW92LmwJCSVkMywlYTAKKwlic3IubAkJX2RtZW1fcmVhZF9sb25nCisKKwl0c3QubAkJJWQxCQkJIyBkZmV0Y2ggZXJyb3I/CisJYm5lLmIJCWNhbGNfZWFfZXJyCQkjIHllcworCisJYWRkLmwJCSVkMiwlZDAJCQkjIDxlYT4gKz0gaW5kZXgKKwlhZGQubAkJJWQ0LCVkMAkJCSMgPGVhPiArPSBvZAorCWJyYS5iCQlkb25lX2VhCisKK3ByZV9pbmRleGVkOgorCWFkZC5sCQklZDIsJWQzCQkJIyBwcmVpbmRleGluZworCW1vdi5sCQklZDMsJWEwCisJYnNyLmwJCV9kbWVtX3JlYWRfbG9uZworCisJdHN0LmwJCSVkMQkJCSMgaWZldGNoIGVycm9yPworCWJuZS5iCQljYWxjX2VhX2VycgkJIyB5ZXMKKworCWFkZC5sCQklZDQsJWQwCQkJIyBlYSArPSBvZAorCWJyYS5iCQlkb25lX2VhCisKK2FpaV9iZDoKKwlhZGQubAkJJWQyLCVkMwkJCSMgZWEgPSAoYmFzZSArIGJkKSArIGluZGV4CisJbW92LmwJCSVkMywlZDAKK2RvbmVfZWE6CisJbW92LmwJCSVkMCwlYTAKKworCW1vdm0ubAkJKCVzcCkrLCYweDAwM2MJCSMgcmVzdG9yZSBkMi1kNQorCXJ0cworCisjIGlmIGRtZW1fcmVhZF9sb25nKCkgcmV0dXJucyBhIGZhaWwgbWVzc2FnZSBpbiBkMSwgdGhlIHBhY2thZ2UKKyMgbXVzdCBjcmVhdGUgYW4gYWNjZXNzIGVycm9yIGZyYW1lLiBoZXJlLCB3ZSBwYXNzIGEgc2tlbGV0b24gZnNsdworIyBhbmQgdGhlIGZhaWxpbmcgYWRkcmVzcyB0byB0aGUgcm91dGluZSB0aGF0IGNyZWF0ZXMgdGhlIG5ldyBmcmFtZS4KKyMgRlNMVzoKKyMJcmVhZCA9IHRydWUKKyMJc2l6ZSA9IGxvbmd3b3JkCisjCVRNID0gZGF0YQorIwlzb2Z0d2FyZSBlbXVsYXRpb24gZXJyb3IgPSB0cnVlCitjYWxjX2VhX2VycjoKKwltb3YubAkJJWQzLCVhMAkJCSMgcGFzcyBmYWlsaW5nIGFkZHJlc3MKKwltb3YubAkJJjB4MDEwMTAwMDEsJWQwCQkjIHBhc3MgZnNsdworCWJyYS5sCQlpc3BfZGFjYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCV9tb3ZlcGVyaXBoZXJhbCgpOiByb3V0aW5lIHRvIGVtdWxhdGUgbW92ZXAgaW5zdHJ1Y3Rpb24JCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCV9kbWVtX3JlYWRfYnl0ZSgpIC0gcmVhZCBieXRlIGZyb20gbWVtb3J5CQkJIworIwlfZG1lbV93cml0ZV9ieXRlKCkgLSB3cml0ZSBieXRlIHRvIG1lbW9yeQkJCSMKKyMJaXNwX2RhY2MoKSAtIGhhbmRsZSBkYXRhIGFjY2VzcyBlcnJvciBleGNlcHRpb24JCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlub25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlJZiBleGl0aW5nIHRocm91Z2ggaXNwX2RhY2MuLi4JCQkJCSMKKyMJCWEwID0gZmFpbGluZyBhZGRyZXNzCQkJCQkjCisjCQlkMCA9IEZTTFcJCQkJCQkjCisjCWVsc2UJCQkJCQkJCSMKKyMJCW5vbmUJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRGVjb2RlIHRoZSBtb3ZlcCBpbnN0cnVjdGlvbiB3b3JkcyBzdG9yZWQgYXQgRVhDX09QV09SRCBhbmQJIworIyBlaXRoZXIgcmVhZCBvciB3cml0ZSB0aGUgcmVxdWlyZWQgYnl0ZXMgZnJvbS90byBtZW1vcnkuIFVzZSB0aGUJIworIyBfZG1lbV97cmVhZCx3cml0ZX1fYnl0ZSgpIHJvdXRpbmVzLiBJZiBvbmUgb2YgdGhlIG1lbW9yeSByb3V0aW5lcwkjCisjIHJldHVybnMgYSBmYWlsaW5nIHZhbHVlLCB3ZSBtdXN0IHBhc3MgdGhlIGZhaWxpbmcgYWRkcmVzcyBhbmQJYSBGU0xXCSMKKyMgdG8gdGhlIF9pc3BfZGFjYygpIHJvdXRpbmUuCQkJCQkJIworIwlTaW5jZSB0aGlzIGluc3RydWN0aW9uIGlzIHVzZWQgdG8gYWNjZXNzIHBlcmlwaGVyYWxzLCBtYWtlIHN1cmUJIworIyB0byBvbmx5IGFjY2VzcyB0aGUgcmVxdWlyZWQgYnl0ZXMuCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbW92ZXAuKHcsbCkJRHgsKGQsQXkpICMKKyMgbW92ZXAuKHcsbCkJKGQsQXkpLER4ICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX21vdmVwZXJpcGhlcmFsCitfbW92ZXBlcmlwaGVyYWw6CisJbW92LncJCUVYQ19PUFdPUkQoJWE2KSwlZDEJIyBmZXRjaCB0aGUgb3Bjb2RlIHdvcmQKKworCW1vdi5iCQklZDEsJWQwCisJYW5kLncJCSYweDcsJWQwCQkjIGV4dHJhY3QgQXkgZnJvbSBvcGNvZGUgd29yZAorCisJbW92LmwJCShFWENfQVJFR1MsJWE2LCVkMC53KjQpLCVhMCAjIGZldGNoIGF5CisKKwlhZGQudwkJRVhDX0VYVFdPUkQoJWE2KSwlYTAJIyBhZGQ6IGFuICsgc2duX2V4dChkaXNwKQorCisJYnRzdAkJJjB4NywlZDEJCSMgKHJlZyAyIG1lbSkgb3IgKG1lbSAyIHJlZykKKwliZXEudwkJbWVtMnJlZworCisjIHJlZzJtZW06IGZldGNoIGR4LCB0aGVuIHdyaXRlIGl0IHRvIG1lbW9yeQorcmVnMm1lbToKKwltb3YudwkJJWQxLCVkMAorCXJvbC53CQkmMHg3LCVkMAorCWFuZC53CQkmMHg3LCVkMAkJIyBleHRyYWN0IER4IGZyb20gb3Bjb2RlIHdvcmQKKworCW1vdi5sCQkoRVhDX0RSRUdTLCVhNiwlZDAudyo0KSwgJWQwICMgZmV0Y2ggZHgKKworCWJ0c3QJCSYweDYsJWQxCQkjIHdvcmQgb3IgbG9uZyBvcGVyYXRpb24/CisJYmVxLmIJCXIybXd0cmFucworCisjIGEwID0gZHN0IGFkZHIKKyMgZDAgPSBEeAorcjJtbHRyYW5zOgorCW1vdi5sCQklZDAsJWQyCQkJIyBzdG9yZSBkYXRhCisJbW92LmwJCSVhMCwlYTIJCQkjIHN0b3JlIGFkZHIKKwlyb2wubAkJJjB4OCwlZDIKKwltb3YubAkJJWQyLCVkMAorCisJYnNyLmwJCV9kbWVtX3dyaXRlX2J5dGUJIyBvcyAgOiB3cml0ZSBoaQorCisJdHN0LmwJCSVkMQkJCSMgZGZldGNoIGVycm9yPworCWJuZS53CQltb3ZwX3dyaXRlX2VycgkJIyB5ZXMKKworCWFkZC53CQkmMHgyLCVhMgkJIyBpbmNyIGFkZHIKKwltb3YubAkJJWEyLCVhMAorCXJvbC5sCQkmMHg4LCVkMgorCW1vdi5sCQklZDIsJWQwCisKKwlic3IubAkJX2RtZW1fd3JpdGVfYnl0ZQkjIG9zICA6IHdyaXRlIGxvCisKKwl0c3QubAkJJWQxCQkJIyBkZmV0Y2ggZXJyb3I/CisJYm5lLncJCW1vdnBfd3JpdGVfZXJyCQkjIHllcworCisJYWRkLncJCSYweDIsJWEyCQkjIGluY3IgYWRkcgorCW1vdi5sCQklYTIsJWEwCisJcm9sLmwJCSYweDgsJWQyCisJbW92LmwJCSVkMiwlZDAKKworCWJzci5sCQlfZG1lbV93cml0ZV9ieXRlCSMgb3MgIDogd3JpdGUgbG8KKworCXRzdC5sCQklZDEJCQkjIGRmZXRjaCBlcnJvcj8KKwlibmUudwkJbW92cF93cml0ZV9lcnIJCSMgeWVzCisKKwlhZGQudwkJJjB4MiwlYTIJCSMgaW5jciBhZGRyCisJbW92LmwJCSVhMiwlYTAKKwlyb2wubAkJJjB4OCwlZDIKKwltb3YubAkJJWQyLCVkMAorCisJYnNyLmwJCV9kbWVtX3dyaXRlX2J5dGUJIyBvcyAgOiB3cml0ZSBsbworCisJdHN0LmwJCSVkMQkJCSMgZGZldGNoIGVycm9yPworCWJuZS53CQltb3ZwX3dyaXRlX2VycgkJIyB5ZXMKKworCXJ0cworCisjIGEwID0gZHN0IGFkZHIKKyMgZDAgPSBEeAorcjJtd3RyYW5zOgorCW1vdi5sCQklZDAsJWQyCQkJIyBzdG9yZSBkYXRhCisJbW92LmwJCSVhMCwlYTIJCQkjIHN0b3JlIGFkZHIKKwlsc3IudwkJJjB4OCwlZDAKKworCWJzci5sCQlfZG1lbV93cml0ZV9ieXRlCSMgb3MgIDogd3JpdGUgaGkKKworCXRzdC5sCQklZDEJCQkjIGRmZXRjaCBlcnJvcj8KKwlibmUudwkJbW92cF93cml0ZV9lcnIJCSMgeWVzCisKKwlhZGQudwkJJjB4MiwlYTIKKwltb3YubAkJJWEyLCVhMAorCW1vdi5sCQklZDIsJWQwCisKKwlic3IubAkJX2RtZW1fd3JpdGVfYnl0ZQkjIG9zICA6IHdyaXRlIGxvCisKKwl0c3QubAkJJWQxCQkJIyBkZmV0Y2ggZXJyb3I/CisJYm5lLncJCW1vdnBfd3JpdGVfZXJyCQkjIHllcworCisJcnRzCisKKyMgbWVtMnJlZzogcmVhZCBieXRlcyBmcm9tIG1lbW9yeS4KKyMgZGV0ZXJtaW5lcyB0aGUgZGVzdCByZWdpc3RlciwgYW5kIHRoZW4gd3JpdGVzIHRoZSBieXRlcyBpbnRvIGl0LgorbWVtMnJlZzoKKwlidHN0CQkmMHg2LCVkMQkJIyB3b3JkIG9yIGxvbmcgb3BlcmF0aW9uPworCWJlcS5iCQltMnJ3dHJhbnMKKworIyBhMCA9IGRzdCBhZGRyCittMnJsdHJhbnM6CisJbW92LmwJCSVhMCwlYTIJCQkjIHN0b3JlIGFkZHIKKworCWJzci5sCQlfZG1lbV9yZWFkX2J5dGUJCSMgcmVhZCBmaXJzdCBieXRlCisKKwl0c3QubAkJJWQxCQkJIyBkZmV0Y2ggZXJyb3I/CisJYm5lLncJCW1vdnBfcmVhZF9lcnIJCSMgeWVzCisKKwltb3YubAkJJWQwLCVkMgorCisJYWRkLncJCSYweDIsJWEyCQkjIGluY3IgYWRkciBieSAyIGJ5dGVzCisJbW92LmwJCSVhMiwlYTAKKworCWJzci5sCQlfZG1lbV9yZWFkX2J5dGUJCSMgcmVhZCBzZWNvbmQgYnl0ZQorCisJdHN0LmwJCSVkMQkJCSMgZGZldGNoIGVycm9yPworCWJuZS53CQltb3ZwX3JlYWRfZXJyCQkjIHllcworCisJbHNsLncJCSYweDgsJWQyCisJbW92LmIJCSVkMCwlZDIJCQkjIGFwcGVuZCBieXRlcworCisJYWRkLncJCSYweDIsJWEyCQkjIGluY3IgYWRkciBieSAyIGJ5dGVzCisJbW92LmwJCSVhMiwlYTAKKworCWJzci5sCQlfZG1lbV9yZWFkX2J5dGUJCSMgcmVhZCBzZWNvbmQgYnl0ZQorCisJdHN0LmwJCSVkMQkJCSMgZGZldGNoIGVycm9yPworCWJuZS53CQltb3ZwX3JlYWRfZXJyCQkjIHllcworCisJbHNsLmwJCSYweDgsJWQyCisJbW92LmIJCSVkMCwlZDIJCQkjIGFwcGVuZCBieXRlcworCisJYWRkLncJCSYweDIsJWEyCQkjIGluY3IgYWRkciBieSAyIGJ5dGVzCisJbW92LmwJCSVhMiwlYTAKKworCWJzci5sCQlfZG1lbV9yZWFkX2J5dGUJCSMgcmVhZCBzZWNvbmQgYnl0ZQorCisJdHN0LmwJCSVkMQkJCSMgZGZldGNoIGVycm9yPworCWJuZS53CQltb3ZwX3JlYWRfZXJyCQkjIHllcworCisJbHNsLmwJCSYweDgsJWQyCisJbW92LmIJCSVkMCwlZDIJCQkjIGFwcGVuZCBieXRlcworCisJbW92LmIJCUVYQ19PUFdPUkQoJWE2KSwlZDEKKwlsc3IuYgkJJjB4MSwlZDEKKwlhbmQudwkJJjB4NywlZDEJCSMgZXh0cmFjdCBEeCBmcm9tIG9wY29kZSB3b3JkCisKKwltb3YubAkJJWQyLChFWENfRFJFR1MsJWE2LCVkMS53KjQpICMgc3RvcmUgZHgKKworCXJ0cworCisjIGEwID0gZHN0IGFkZHIKK20ycnd0cmFuczoKKwltb3YubAkJJWEwLCVhMgkJCSMgc3RvcmUgYWRkcgorCisJYnNyLmwJCV9kbWVtX3JlYWRfYnl0ZQkJIyByZWFkIGZpcnN0IGJ5dGUKKworCXRzdC5sCQklZDEJCQkjIGRmZXRjaCBlcnJvcj8KKwlibmUudwkJbW92cF9yZWFkX2VycgkJIyB5ZXMKKworCW1vdi5sCQklZDAsJWQyCisKKwlhZGQudwkJJjB4MiwlYTIJCSMgaW5jciBhZGRyIGJ5IDIgYnl0ZXMKKwltb3YubAkJJWEyLCVhMAorCisJYnNyLmwJCV9kbWVtX3JlYWRfYnl0ZQkJIyByZWFkIHNlY29uZCBieXRlCisKKwl0c3QubAkJJWQxCQkJIyBkZmV0Y2ggZXJyb3I/CisJYm5lLncJCW1vdnBfcmVhZF9lcnIJCSMgeWVzCisKKwlsc2wudwkJJjB4OCwlZDIKKwltb3YuYgkJJWQwLCVkMgkJCSMgYXBwZW5kIGJ5dGVzCisKKwltb3YuYgkJRVhDX09QV09SRCglYTYpLCVkMQorCWxzci5iCQkmMHgxLCVkMQorCWFuZC53CQkmMHg3LCVkMQkJIyBleHRyYWN0IER4IGZyb20gb3Bjb2RlIHdvcmQKKworCW1vdi53CQklZDIsKEVYQ19EUkVHUysyLCVhNiwlZDEudyo0KSAjIHN0b3JlIGR4CisKKwlydHMKKworIyBpZiBkbWVtX3tyZWFkLHdyaXRlfV9ieXRlKCkgcmV0dXJucyBhIGZhaWwgbWVzc2FnZSBpbiBkMSwgdGhlIHBhY2thZ2UKKyMgbXVzdCBjcmVhdGUgYW4gYWNjZXNzIGVycm9yIGZyYW1lLiBoZXJlLCB3ZSBwYXNzIGEgc2tlbGV0b24gZnNsdworIyBhbmQgdGhlIGZhaWxpbmcgYWRkcmVzcyB0byB0aGUgcm91dGluZSB0aGF0IGNyZWF0ZXMgdGhlIG5ldyBmcmFtZS4KKyMgRlNMVzoKKyMJd3JpdGUgPSB0cnVlCisjCXNpemUgPSBieXRlCisjCVRNID0gZGF0YQorIwlzb2Z0d2FyZSBlbXVsYXRpb24gZXJyb3IgPSB0cnVlCittb3ZwX3dyaXRlX2VycjoKKwltb3YubAkJJWEyLCVhMAkJCSMgcGFzcyBmYWlsaW5nIGFkZHJlc3MKKwltb3YubAkJJjB4MDBhMTAwMDEsJWQwCQkjIHBhc3MgZnNsdworCWJyYS5sCQlpc3BfZGFjYworCisjIEZTTFc6CisjCXJlYWQgPSB0cnVlCisjCXNpemUgPSBieXRlCisjCVRNID0gZGF0YQorIwlzb2Z0d2FyZSBlbXVsYXRpb24gZXJyb3IgPSB0cnVlCittb3ZwX3JlYWRfZXJyOgorCW1vdi5sCQklYTIsJWEwCQkJIyBwYXNzIGZhaWxpbmcgYWRkcmVzcworCW1vdi5sCQkmMHgwMTIxMDAwMSwlZDAJCSMgcGFzcyBmc2x3CisJYnJhLmwJCWlzcF9kYWNjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2NoazJfY21wMigpOiByb3V0aW5lIHRvIGVtdWxhdGUgY2hrMi9jbXAyIGluc3RydWN0aW9ucwkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2NhbGNfZWEoKTogY2FsY3VsYXRlIGVmZmVjdGl2ZSBhZGRyZXNzCQkJCSMKKyMJX2RtZW1fcmVhZF9sb25nKCk6IHJlYWQgb3BlcmFuZHMJCQkJIworIwlfZG1lbV9yZWFkX3dvcmQoKTogcmVhZCBvcGVyYW5kcwkJCQkjCisjCWlzcF9kYWNjKCk6IGhhbmRsZSBkYXRhIGFjY2VzcyBlcnJvciBleGNlcHRpb24JCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlub25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJZiBleGl0aW5nIHRocm91Z2ggaXNwX2RhY2MuLi4JCQkJCSMKKyMJCWEwID0gZmFpbGluZyBhZGRyZXNzCQkJCQkjCisjCQlkMCA9IEZTTFcJCQkJCQkjCisjCWVsc2UJCQkJCQkJCSMKKyMJCW5vbmUJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRmlyc3QsIGNhbGN1bGF0ZSB0aGUgZWZmZWN0aXZlIGFkZHJlc3MsIHRoZW4gZmV0Y2ggdGhlIGJ5dGUsCSMKKyMgd29yZCwgb3IgbG9uZ3dvcmQgc2l6ZWQgb3BlcmFuZHMuIFRoZW4sIGluIHRoZSBpbnRlcmVzdCBvZgkJIworIyBzaW1wbGljaXR5LCBhbGwgb3BlcmFuZHMgYXJlIGNvbnZlcnRlZCB0byBsb25nd29yZCBzaXplIHdoZXRoZXIgdGhlCSMKKyMgb3BlcmF0aW9uIGlzIGJ5dGUsIHdvcmQsIG9yIGxvbmcuIFRoZSBib3VuZHMgYXJlIHNpZ24gZXh0ZW5kZWQJIworIyBhY2NvcmRpbmdseS4gSWYgUm4gaXMgYSBkYXRhIHJlZ3NpdGVyLCBSbiBpcyBhbHNvIHNpZ24gZXh0ZW5kZWQuIElmCSMKKyMgUm4gaXMgYW4gYWRkcmVzcyByZWdpc3RlciwgaXQgbmVlZCBub3QgYmUgc2lnbiBleHRlbmRlZCBzaW5jZSB0aGUJIworIyBmdWxsIHJlZ2lzdGVyIGlzIGFsd2F5cyB1c2VkLgkJCQkJCSMKKyMJVGhlIGNvbXBhcmlzb25zIGFyZSBtYWRlIGFuZCB0aGUgY29uZGl0aW9uIGNvZGVzIGNhbGN1bGF0ZWQuCSMKKyMgSWYgdGhlIGluc3RydWN0aW9uIGlzIGNoazIgYW5kIHRoZSBSbiB2YWx1ZSBpcyBvdXQtb2YtYm91bmRzLCBzZXQJIworIyB0aGUgaWNoa19mbGcgaW4gU1BDT05EX0ZMRy4JCQkJCQkjCisjCUlmIHRoZSBtZW1vcnkgZmV0Y2ggcmV0dXJucyBhIGZhaWxpbmcgdmFsdWUsIHBhc3MgdGhlIGZhaWxpbmcJIworIyBhZGRyZXNzIGFuZCBGU0xXIHRvIHRoZSBpc3BfZGFjYygpIHJvdXRpbmUuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCV9jaGsyX2NtcDIKK19jaGsyX2NtcDI6CisKKyMgcGFzc2luZyBzaXplIHBhcmFtZXRlciBkb2Vzbid0IG1hdHRlciBzaW5jZSBjaGsyICYgY21wMiBjYW4ndCBkbworIyBlaXRoZXIgcHJlZGVjcmVtZW50LCBwb3N0aW5jcmVtZW50LCBvciBpbW1lZGlhdGUuCisJYnNyLmwJCV9jYWxjX2VhCQkjIGNhbGN1bGF0ZSA8ZWE+CisKKwltb3YuYgkJRVhDX0VYVFdPUkQoJWE2KSwgJWQwCSMgZmV0Y2ggaGkgZXh0ZW5zaW9uIHdvcmQKKwlyb2wuYgkJJjB4NCwgJWQwCQkjIHJvdGF0ZSByZWcgYml0cyBpbnRvIGxvCisJYW5kLncJCSYweGYsICVkMAkJIyBleHRyYWN0IHJlZyBiaXRzCisKKwltb3YubAkJKEVYQ19EUkVHUywlYTYsJWQwLncqNCksICVkMiAjIGdldCByZWd2YWwKKworCWNtcGkuYgkJRVhDX09QV09SRCglYTYpLCAmMHgyCSMgd2hhdCBzaXplIGlzIG9wZXJhdGlvbj8KKwlibHQuYgkJY2hrMl9jbXAyX2J5dGUJCSMgc2l6ZSA9PSBieXRlCisJYmVxLmIJCWNoazJfY21wMl93b3JkCQkjIHNpemUgPT0gd29yZAorCisjIHRoZSBib3VuZHMgYXJlIGxvbmd3b3JkIHNpemUuIGNhbGwgcm91dGluZSB0byByZWFkIHRoZSBsb3dlcgorIyBib3VuZCBpbnRvIGQwIGFuZCB0aGUgaGlnaGVyIGJvdW5kIGludG8gZDEuCitjaGsyX2NtcDJfbG9uZzoKKwltb3YubAkJJWEwLCVhMgkJCSMgc2F2ZSBjb3B5IG9mIDxlYT4KKwlic3IubAkJX2RtZW1fcmVhZF9sb25nCQkjIGZldGNoIGxvbmcgbG93ZXIgYm91bmQKKworCXRzdC5sCQklZDEJCQkjIGRmZXRjaCBlcnJvcj8KKwlibmUudwkJY2hrMl9jbXAyX2Vycl9sCQkjIHllcworCisJbW92LmwJCSVkMCwlZDMJCQkjIHNhdmUgbG9uZyBsb3dlciBib3VuZAorCWFkZHEubAkJJjB4NCwlYTIKKwltb3YubAkJJWEyLCVhMAkJCSMgcGFzcyA8ZWE+IG9mIGxvbmcgdXBwZXIgYm91bmQKKwlic3IubAkJX2RtZW1fcmVhZF9sb25nCQkjIGZldGNoIGxvbmcgdXBwZXIgYm91bmQKKworCXRzdC5sCQklZDEJCQkjIGRmZXRjaCBlcnJvcj8KKwlibmUudwkJY2hrMl9jbXAyX2Vycl9sCQkjIHllcworCisJbW92LmwJCSVkMCwlZDEJCQkjIGxvbmcgdXBwZXIgYm91bmQgaW4gZDEKKwltb3YubAkJJWQzLCVkMAkJCSMgbG9uZyBsb3dlciBib3VuZCBpbiBkMAorCWJyYS53CQljaGsyX2NtcDJfY29tcGFyZQkjIGdvIGRvIHRoZSBjb21wYXJlIGVtdWxhdGlvbgorCisjIHRoZSBib3VuZHMgYXJlIHdvcmQgc2l6ZS4gZmV0Y2ggdGhlbSBpbiBvbmUgc3Vicm91dGluZSBjYWxsIGJ5CisjIHJlYWRpbmcgYSBsb25nd29yZC4gc2lnbiBleHRlbmQgYm90aC4gaWYgaXQncyBhIGRhdGEgb3BlcmF0aW9uLAorIyBzaWduIGV4dGVuZCBSbiB0byBsb25nLCBhbHNvLgorY2hrMl9jbXAyX3dvcmQ6CisJbW92LmwJCSVhMCwlYTIKKwlic3IubAkJX2RtZW1fcmVhZF9sb25nCQkjIGZldGNoIDIgd29yZCBib3VuZHMKKworCXRzdC5sCQklZDEJCQkjIGRmZXRjaCBlcnJvcj8KKwlibmUudwkJY2hrMl9jbXAyX2Vycl9sCQkjIHllcworCisJbW92LncJCSVkMCwgJWQxCQkjIHBsYWNlIGhpIGluICVkMQorCXN3YXAJCSVkMAkJCSMgcGxhY2UgbG8gaW4gJWQwCisKKwlleHQubAkJJWQwCQkJIyBzaWduIGV4dGVuZCBsbyBibmQKKwlleHQubAkJJWQxCQkJIyBzaWduIGV4dGVuZCBoaSBibmQKKworCWJ0c3QJCSYweDcsIEVYQ19FWFRXT1JEKCVhNikJIyBhZGRyZXNzIGNvbXBhcmU/CisJYm5lLncJCWNoazJfY21wMl9jb21wYXJlCSMgeWVzOyBkb24ndCBzaWduIGV4dGVuZAorCisjIG9wZXJhdGlvbiBpcyBhIGRhdGEgcmVnaXN0ZXIgY29tcGFyZS4KKyMgc2lnbiBleHRlbmQgd29yZCB0byBsb25nIHNvIHdlIGNhbiBkbyBzaW1wbGUgbG9uZ3dvcmQgY29tcGFyZXMuCisJZXh0LmwJCSVkMgkJCSMgc2lnbiBleHRlbmQgZGF0YSB3b3JkCisJYnJhLncJCWNoazJfY21wMl9jb21wYXJlCSMgZ28gZW11bGF0ZSBjb21wYXJlCisKKyMgdGhlIGJvdW5kcyBhcmUgYnl0ZSBzaXplLiBmZXRjaCB0aGVtIGluIG9uZSBzdWJyb3V0aW5lIGNhbGwgYnkKKyMgcmVhZGluZyBhIHdvcmQuIHNpZ24gZXh0ZW5kIGJvdGguIGlmIGl0J3MgYSBkYXRhIG9wZXJhdGlvbiwKKyMgc2lnbiBleHRlbmQgUm4gdG8gbG9uZywgYWxzby4KK2NoazJfY21wMl9ieXRlOgorCW1vdi5sCQklYTAsJWEyCisJYnNyLmwJCV9kbWVtX3JlYWRfd29yZAkJIyBmZXRjaCAyIGJ5dGUgYm91bmRzCisKKwl0c3QubAkJJWQxCQkJIyBkZmV0Y2ggZXJyb3I/CisJYm5lLncJCWNoazJfY21wMl9lcnJfdwkJIyB5ZXMKKworCW1vdi5iCQklZDAsICVkMQkJIyBwbGFjZSBoaSBpbiAlZDEKKwlsc3IudwkJJjB4OCwgJWQwCQkjIHBsYWNlIGxvIGluICVkMAorCisJZXh0Yi5sCQklZDAJCQkjIHNpZ24gZXh0ZW5kIGxvIGJuZAorCWV4dGIubAkJJWQxCQkJIyBzaWduIGV4dGVuZCBoaSBibmQKKworCWJ0c3QJCSYweDcsIEVYQ19FWFRXT1JEKCVhNikJIyBhZGRyZXNzIGNvbXBhcmU/CisJYm5lLmIJCWNoazJfY21wMl9jb21wYXJlCSMgeWVzOyBkb24ndCBzaWduIGV4dGVuZAorCisjIG9wZXJhdGlvbiBpcyBhIGRhdGEgcmVnaXN0ZXIgY29tcGFyZS4KKyMgc2lnbiBleHRlbmQgYnl0ZSB0byBsb25nIHNvIHdlIGNhbiBkbyBzaW1wbGUgbG9uZ3dvcmQgY29tcGFyZXMuCisJZXh0Yi5sCQklZDIJCQkjIHNpZ24gZXh0ZW5kIGRhdGEgYnl0ZQorCisjCisjIFRvIHNldCB0aGUgY2NvZGVzIGNvcnJlY3RseToKKyMJKDEpIHNhdmUgJ1onIGJpdCBmcm9tIChSbiAtIGxvKQorIwkoMikgc2F2ZSAnWicgYW5kICdOJyBiaXRzIGZyb20gKChoaSAtIGxvKSAtIChSbiAtIGhpKSkKKyMJKDMpIGtlZXAgJ1gnLCAnTicsIGFuZCAnVicgZnJvbSBiZWZvcmUgaW5zdHJ1Y3Rpb24KKyMJKDQpIGNvbWJpbmUgY2NvZGVzCisjCitjaGsyX2NtcDJfY29tcGFyZToKKwlzdWIubAkJJWQwLCAlZDIJCSMgKFJuIC0gbG8pCisJbW92LncJCSVjYywgJWQzCQkjIGZldGNoIHJlc3VsdGluZyBjY29kZXMKKwlhbmRpLmIJCSYweDQsICVkMwkJIyBrZWVwICdaJyBiaXQKKwlzdWIubAkJJWQwLCAlZDEJCSMgKGhpIC0gbG8pCisJY21wLmwJCSVkMSwlZDIJCQkjICgoaGkgLSBsbykgLSAoUm4gLSBoaSkpCisKKwltb3YudwkJJWNjLCAlZDQJCSMgZmV0Y2ggcmVzdWx0aW5nIGNjb2RlcworCW9yLmIJCSVkNCwgJWQzCQkjIGNvbWJpbmUgdy8gZWFybGllciBjY29kZXMKKwlhbmRpLmIJCSYweDUsICVkMwkJIyBrZWVwICdaJyBhbmQgJ04nCisKKwltb3YudwkJRVhDX0NDKCVhNiksICVkNAkjIGZldGNoIG9sZCBjY29kZXMKKwlhbmRpLmIJCSYweDFhLCAlZDQJCSMga2VlcCAnWCcsJ04nLCdWJyBiaXRzCisJb3IuYgkJJWQzLCAlZDQJCSMgaW5zZXJ0IG5ldyBjY29kZXMKKwltb3YudwkJJWQ0LCBFWENfQ0MoJWE2KQkjIHNhdmUgbmV3IGNjb2RlcworCisJYnRzdAkJJjB4MywgRVhDX0VYVFdPUkQoJWE2KQkjIHNlcGFyYXRlIGNoazIsY21wMgorCWJuZS5iCQljaGsyX2ZpbmlzaAkJIyBpdCdzIGEgY2hrMgorCisJcnRzCisKKyMgdGhpcyBjb2RlIGhhbmRsZXMgdGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIGNoazIgYW5kIGNtcDIuIGNoazIgd291bGQKKyMgaGF2ZSB0cmFwcGVkIG91dCBpZiB0aGUgdmFsdWUgd2FzIG91dCBvZiBib3VuZHMuIHdlIGNoZWNrIHRoaXMgYnkgc2VlaW5nCisjIGlmIHRoZSAnTicgYml0IHdhcyBzZXQgYnkgdGhlIG9wZXJhdGlvbi4KK2NoazJfZmluaXNoOgorCWJ0c3QJCSYweDAsICVkNAkJIyBpcyAnTicgYml0IHNldD8KKwlibmUuYgkJY2hrMl90cmFwCQkjIHllcztjaGsyIHNob3VsZCB0cmFwCisJcnRzCitjaGsyX3RyYXA6CisJbW92LmIJCSZpY2hrX2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgInNwZWNpYWwgY2FzZSIgZmxhZworCXJ0cworCisjIGlmIGRtZW1fcmVhZF97bG9uZyx3b3JkfSgpIHJldHVybnMgYSBmYWlsIG1lc3NhZ2UgaW4gZDEsIHRoZSBwYWNrYWdlCisjIG11c3QgY3JlYXRlIGFuIGFjY2VzcyBlcnJvciBmcmFtZS4gaGVyZSwgd2UgcGFzcyBhIHNrZWxldG9uIGZzbHcKKyMgYW5kIHRoZSBmYWlsaW5nIGFkZHJlc3MgdG8gdGhlIHJvdXRpbmUgdGhhdCBjcmVhdGVzIHRoZSBuZXcgZnJhbWUuCisjIEZTTFc6CisjCXJlYWQgPSB0cnVlCisjCXNpemUgPSBsb25nd29yZAorIwlUTSA9IGRhdGEKKyMJc29mdHdhcmUgZW11bGF0aW9uIGVycm9yID0gdHJ1ZQorY2hrMl9jbXAyX2Vycl9sOgorCW1vdi5sCQklYTIsJWEwCQkJIyBwYXNzIGZhaWxpbmcgYWRkcmVzcworCW1vdi5sCQkmMHgwMTAxMDAwMSwlZDAJCSMgcGFzcyBmc2x3CisJYnJhLmwJCWlzcF9kYWNjCisKKyMgRlNMVzoKKyMJcmVhZCA9IHRydWUKKyMJc2l6ZSA9IHdvcmQKKyMJVE0gPSBkYXRhCisjCXNvZnR3YXJlIGVtdWxhdGlvbiBlcnJvciA9IHRydWUKK2NoazJfY21wMl9lcnJfdzoKKwltb3YubAkJJWEyLCVhMAkJCSMgcGFzcyBmYWlsaW5nIGFkZHJlc3MKKwltb3YubAkJJjB4MDE0MTAwMDEsJWQwCQkjIHBhc3MgZnNsdworCWJyYS5sCQlpc3BfZGFjYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9kaXY2NCgpOiByb3V0aW5lIHRvIGVtdWxhdGUgZGl2e3Usc30ubCA8ZWE+LERyOkRxCQkjCisjCQkJCQkJCTY0LzMyLT4zMnI6MzJxCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9jYWxjX2VhKCkgLSBjYWxjdWxhdGUgZWZmZWN0aXZlIGFkZHJlc3MJCQkjCisjCWlzcF9pYWNjKCkgLSBoYW5kbGUgaW5zdHJ1Y3Rpb24gYWNjZXNzIGVycm9yIGV4Y2VwdGlvbgkJIworIwlpc3BfZGFjYygpIC0gaGFuZGxlIGRhdGEgYWNjZXNzIGVycm9yIGV4Y2VwdGlvbgkJCSMKKyMJaXNwX3Jlc3RvcmUoKSAtIHJlc3RvcmUgQW4gb24gYWNjZXNzIGVycm9yIHcvIC0oKSBvciAoKSsJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJbm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSWYgZXhpdGluZyB0aHJvdWdoIGlzcF9kYWNjLi4uCQkJCQkjCisjCQlhMCA9IGZhaWxpbmcgYWRkcmVzcwkJCQkJIworIwkJZDAgPSBGU0xXCQkJCQkJIworIwllbHNlCQkJCQkJCQkjCisjCQlub25lCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUZpcnN0LCBkZWNvZGUgdGhlIG9wZXJhbmQgbG9jYXRpb24uIElmIGl0J3MgaW4gRG4sIGZldGNoIGZyb20JIworIyB0aGUgc3RhY2suIElmIGl0J3MgaW4gbWVtb3J5LCB1c2UgX2NhbGNfZWEoKSB0byBjYWxjdWxhdGUgdGhlCQkjCisjIGVmZmVjdGl2ZSBhZGRyZXNzLiBVc2UgX2RtZW1fcmVhZF9sb25nKCkgdG8gZmV0Y2ggYXQgdGhhdCBhZGRyZXNzLgkjCisjIFVubGVzcyB0aGUgb3BlcmFuZCBpcyBpbW1lZGlhdGUgZGF0YS4gVGhlbiB1c2UgX2ltZW1fcmVhZF9sb25nKCkuCSMKKyMgU2VuZCBmYWlsdXJlcyB0byBpc3BfZGFjYygpIG9yIGlzcF9pYWNjKCkgYXMgYXBwcm9wcmlhdGUuCQkjCisjCUlmIHRoZSBvcGVyYW5kcyBhcmUgc2lnbmVkLCBtYWtlIHRoZW0gdW5zaWduZWQgYW5kIHNhdmUJdGhlCSMKKyMgc2lnbiBpbmZvIGZvciBsYXRlci4gU2VwYXJhdGUgb3V0IHNwZWNpYWwgY2FzZXMgbGlrZSBkaXZpZGUtYnktemVybwkjCisjIG9yIDMyLWJpdCBkaXZpZGVzIGlmIHBvc3NpYmxlLiBFbHNlLCB1c2UgYSBzcGVjaWFsIG1hdGggYWxnb3JpdGhtCSMKKyMgdG8gY2FsY3VsYXRlIHRoZSByZXN1bHQuCQkJCQkJIworIwlSZXN0b3JlIHNpZ24gaW5mbyBpZiBzaWduZWQgaW5zdHJ1Y3Rpb24uIFNldCB0aGUgY29uZGl0aW9uCSMKKyMgY29kZXMuIFNldCBpZGJ5el9mbGcgaW4gU1BDT05EX0ZMRyBpZiBkaXZpc29yIHdhcyB6ZXJvLiBTdG9yZSB0aGUJIworIyBxdW90aWVudCBhbmQgcmVtYWluZGVyIGluIHRoZSBhcHByb3ByaWF0ZSBkYXRhIHJlZ2lzdGVycyBvbiB0aGUgc3RhY2suIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc2V0CU5ESVZJU09SLAlFWENfVEVNUCsweDAKK3NldAlORElWSURFTkQsCUVYQ19URU1QKzB4MQorc2V0CU5EUlNBVkUsCUVYQ19URU1QKzB4Mgorc2V0CU5EUVNBVkUsCUVYQ19URU1QKzB4NAorc2V0CUREU0VDT05ELAlFWENfVEVNUCsweDYKK3NldAlERFFVT1RJRU5ULAlFWENfVEVNUCsweDgKK3NldAlERE5PUk1BTCwJRVhDX1RFTVArMHhjCisKKwlnbG9iYWwJCV9kaXY2NAorIyMjIyMjIyMjIyMjIworIyBkaXYodSxzKWwgIworIyMjIyMjIyMjIyMjIworX2RpdjY0OgorCW1vdi5iCQlFWENfT1BXT1JEKzEoJWE2KSwgJWQwCisJYW5kaS5iCQkmMHgzOCwgJWQwCQkjIGV4dHJhY3Qgc3JjIG1vZGUKKworCWJuZS53CQlkY29udHJvbG1vZGVsX3MJCSMgJWRuIGRlc3Qgb3IgY29udHJvbCBtb2RlPworCisJbW92LmIJCUVYQ19PUFdPUkQrMSglYTYpLCAlZDAJIyBleHRyYWN0IERuIGZyb20gb3Bjb2RlCisJYW5kaS53CQkmMHg3LCAlZDAKKwltb3YubAkJKEVYQ19EUkVHUywlYTYsJWQwLncqNCksICVkNyAjIGZldGNoIGRpdmlzb3IgZnJvbSByZWdpc3RlcgorCitkZ290c3JjbDoKKwliZXEudwkJZGl2NjRlcTAJCSMgZGl2aXNvciBpcyA9IDAhISEKKworCW1vdi5iCQlFWENfRVhUV09SRCsxKCVhNiksICVkMAkjIGV4dHJhY3QgRHIgZnJvbSBleHR3b3JkCisJbW92LmIJCUVYQ19FWFRXT1JEKCVhNiksICVkMQkjIGV4dHJhY3QgRHEgZnJvbSBleHR3b3JkCisJYW5kLncJCSYweDcsICVkMAorCWxzci5iCQkmMHg0LCAlZDEKKwlhbmQudwkJJjB4NywgJWQxCisJbW92LncJCSVkMCwgTkRSU0FWRSglYTYpCSMgc2F2ZSBEciBmb3IgbGF0ZXIKKwltb3YudwkJJWQxLCBORFFTQVZFKCVhNikJIyBzYXZlIERxIGZvciBsYXRlcgorCisjIGZldGNoICVkciBhbmQgJWRxIGRpcmVjdGx5IG9mZiBzdGFjayBzaW5jZSBhbGwgcmVncyBhcmUgc2F2ZWQgdGhlcmUKKwltb3YubAkJKEVYQ19EUkVHUywlYTYsJWQwLncqNCksICVkNSAjIGdldCBkaXZpZGVuZCBoaQorCW1vdi5sCQkoRVhDX0RSRUdTLCVhNiwlZDEudyo0KSwgJWQ2ICMgZ2V0IGRpdmlkZW5kIGxvCisKKyMgc2VwYXJhdGUgc2lnbmVkIGFuZCB1bnNpZ25lZCBkaXZpZGUKKwlidHN0CQkmMHgzLCBFWENfRVhUV09SRCglYTYpCSMgc2lnbmVkIG9yIHVuc2lnbmVkPworCWJlcS5iCQlkc3BlY2lhbGNhc2VzCQkjIHVzZSBwb3NpdGl2ZSBkaXZpZGUKKworIyBzYXZlIHRoZSBzaWduIG9mIHRoZSBkaXZpc29yCisjIG1ha2UgZGl2aXNvciB1bnNpZ25lZCBpZiBpdCdzIG5lZ2F0aXZlCisJdHN0LmwJCSVkNwkJCSMgY2hrIHNpZ24gb2YgZGl2aXNvcgorCXNsdAkJTkRJVklTT1IoJWE2KQkJIyBzYXZlIHNpZ24gb2YgZGl2aXNvcgorCWJwbC5iCQlkc2duZGl2aWRlbmQKKwluZWcubAkJJWQ3CQkJIyBjb21wbGVtZW50IG5lZ2F0aXZlIGRpdmlzb3IKKworIyBzYXZlIHRoZSBzaWduIG9mIHRoZSBkaXZpZGVuZAorIyBtYWtlIGRpdmlkZW5kIHVuc2lnbmVkIGlmIGl0J3MgbmVnYXRpdmUKK2RzZ25kaXZpZGVuZDoKKwl0c3QubAkJJWQ1CQkJIyBjaGsgc2lnbiBvZiBoaShkaXZpZGVuZCkKKwlzbHQJCU5ESVZJREVORCglYTYpCQkjIHNhdmUgc2lnbiBvZiBkaXZpZGVuZAorCWJwbC5iCQlkc3BlY2lhbGNhc2VzCisKKwltb3YudwkJJjB4MCwgJWNjCQkjIGNsZWFyICdYJyBjYyBiaXQKKwluZWd4LmwJCSVkNgkJCSMgY29tcGxlbWVudCBzaWduZWQgZGl2aWRlbmQKKwluZWd4LmwJCSVkNQorCisjIGV4dHJhY3Qgc29tZSBzcGVjaWFsIGNhc2VzOgorIwktIGlzIChkaXZpZGVuZCA9PSAwKSA/CisjCS0gaXMgKGhpKGRpdmlkZW5kKSA9PSAwICYmIChkaXZpc29yIDw9IGxvKGRpdmlkZW5kKSkpID8gKDMyLWJpdCBkaXYpCitkc3BlY2lhbGNhc2VzOgorCXRzdC5sCQklZDUJCQkjIGlzIChoaShkaXZpZGVuZCkgPT0gMCkKKwlibmUuYgkJZG5vcm1hbGRpdmlkZQkJIyBubywgc28gdHJ5IGl0IHRoZSBsb25nIHdheQorCisJdHN0LmwJCSVkNgkJCSMgaXMgKGxvKGRpdmlkZW5kKSA9PSAwKSwgdG9vCisJYmVxLncJCWRkb25lCQkJIyB5ZXMsIHNvIChkaXZpZGVuZCA9PSAwKQorCisJY21wLmwJCSVkNywlZDYJCQkjIGlzIChkaXZpc29yIDw9IGxvKGRpdmlkZW5kKSkKKwlibHMuYgkJZDMyYml0ZGl2aWRlCQkjIHllcywgc28gdXNlIDMyIGJpdCBkaXZpZGUKKworCWV4ZwkJJWQ1LCVkNgkJCSMgcSA9IDAsIHIgPSBkaXZpZGVuZAorCWJyYS53CQlkaXZmaW5pc2gJCSMgY2FuJ3QgZGl2aWRlLCB3ZSdyZSBkb25lLgorCitkMzJiaXRkaXZpZGU6CisJdGRpdnUubAkJJWQ3LCAlZDU6JWQ2CQkjIGl0J3Mgb25seSBhIDMyLzMyIGJpdCBkaXYhCisKKwlicmEuYgkJZGl2ZmluaXNoCisKK2Rub3JtYWxkaXZpZGU6CisjIGxhc3Qgc3BlY2lhbCBjYXNlOgorIwktIGlzIGhpKGRpdmlkZW5kKSA+PSBkaXZpc29yID8gaWYgeWVzLCB0aGVuIG92ZXJmbG93CisJY21wLmwJCSVkNywlZDUKKwlibHMuYgkJZGRvdmYJCQkjIGFuc3dlciB3b24ndCBmaXQgaW4gMzIgYml0cworCisjIHBlcmZvcm0gdGhlIGRpdmlkZSBhbGdvcml0aG06CisJYnNyLmwJCWRjbGFzc2ljYWwJCSMgZG8gaW50IGRpdmlkZQorCisjIHNlcGFyYXRlIGludG8gc2lnbmVkIGFuZCB1bnNpZ25lZCBmaW5pc2hlcy4KK2RpdmZpbmlzaDoKKwlidHN0CQkmMHgzLCBFWENfRVhUV09SRCglYTYpCSMgZG8gZGl2cywgZGl2dSBzZXBhcmF0ZWx5CisJYmVxLmIJCWRkb25lCQkJIyBkaXZ1IGhhcyBubyBwcm9jZXNzaW5nISEhCisKKyMgaXQgd2FzIGEgZGl2cy5sLCBzbyBjY29kZSBzZXR0aW5nIGlzIGEgbGl0dGxlIG1vcmUgY29tcGxpY2F0ZWQuLi4KKwl0c3QuYgkJTkRJVklERU5EKCVhNikJCSMgcmVtYWluZGVyIGhhcyBzYW1lIHNpZ24KKwliZXEuYgkJZGNjCQkJIyBhcyBkaXZpZGVuZC4KKwluZWcubAkJJWQ1CQkJIyBzZ24ocmVtKSA9IHNnbihkaXZpZGVuZCkKK2RjYzoKKwltb3YuYgkJTkRJVklTT1IoJWE2KSwgJWQwCisJZW9yLmIJCSVkMCwgTkRJVklERU5EKCVhNikJIyBjaGsgaWYgcXVvdGllbnQgaXMgbmVnYXRpdmUKKwliZXEuYgkJZHFwb3MJCQkjIGJyYW5jaCB0byBxdW90IHBvc2l0aXZlCisKKyMgMHg4MDAwMDAwMCBpcyB0aGUgbGFyZ2VzdCBudW1iZXIgcmVwcmVzZW50YWJsZSBhcyBhIDMyLWJpdCBuZWdhdGl2ZQorIyBudW1iZXIuIHRoZSBuZWdhdGl2ZSBvZiAweDgwMDAwMDAwIGlzIDB4ODAwMDAwMDAuCisJY21waS5sCQklZDYsICYweDgwMDAwMDAwCSMgd2lsbCAoLXF1b3QpIGZpdCBpbiAzMiBiaXRzPworCWJoaS5iCQlkZG92ZgorCisJbmVnLmwJCSVkNgkJCSMgbWFrZSAoLXF1b3QpIDIncyBjb21wCisKKwlicmEuYgkJZGRvbmUKKworZHFwb3M6CisJYnRzdAkJJjB4MWYsICVkNgkJIyB3aWxsICgrcXVvdCkgZml0IGluIDMyIGJpdHM/CisJYm5lLmIJCWRkb3ZmCisKK2Rkb25lOgorIyBhdCB0aGlzIHBvaW50LCByZXN1bHQgaXMgbm9ybWFsIHNvIGNjb2RlcyBhcmUgc2V0IGJhc2VkIG9uIHJlc3VsdC4KKwltb3YudwkJRVhDX0NDKCVhNiksICVjYworCXRzdC5sCQklZDYJCQkjIHNldCAlY2NvZGUgYml0cworCW1vdi53CQklY2MsIEVYQ19DQyglYTYpCisKKwltb3YudwkJTkRSU0FWRSglYTYpLCAlZDAJIyBnZXQgRHIgb2ZmIHN0YWNrCisJbW92LncJCU5EUVNBVkUoJWE2KSwgJWQxCSMgZ2V0IERxIG9mZiBzdGFjaworCisjIGlmIHRoZSByZWdpc3RlciBudW1iZXJzIGFyZSB0aGUgc2FtZSwgb25seSB0aGUgcXVvdGllbnQgZ2V0cyBzYXZlZC4KKyMgc28sIGlmIHdlIGFsd2F5cyBzYXZlIHRoZSBxdW90aWVudCBzZWNvbmQsIHdlIHNhdmUgb3Vyc2VsdmVzIGEgY21wJmJlcQorCW1vdi5sCQklZDUsIChFWENfRFJFR1MsJWE2LCVkMC53KjQpICMgc2F2ZSByZW1haW5kZXIKKwltb3YubAkJJWQ2LCAoRVhDX0RSRUdTLCVhNiwlZDEudyo0KSAjIHNhdmUgcXVvdGllbnQKKworCXJ0cworCitkZG92ZjoKKwlic2V0CQkmMHgxLCBFWENfQ0MrMSglYTYpCSMgJ1YnIHNldCBvbiBvdmVyZmxvdworCWJjbHIJCSYweDAsIEVYQ19DQysxKCVhNikJIyAnQycgY2xlYXJlZCBvbiBvdmVyZmxvdworCisJcnRzCisKK2RpdjY0ZXEwOgorCWFuZGkuYgkJJjB4MWUsIEVYQ19DQysxKCVhNikJIyBjbGVhciAnQycgYml0IG9uIGRpdmJ5emVybworCW9yaS5iCQkmaWRieXpfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCAic3BlY2lhbCBjYXNlIiBmbGFnCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaGlzIHJvdXRpbmUgdXNlcyB0aGUgJ2NsYXNzaWNhbCcgQWxnb3JpdGhtIEQgZnJvbSBEb25hbGQgS251dGgncwkjCisjIEFydCBvZiBDb21wdXRlciBQcm9ncmFtbWluZywgdm9sIElJLCBTZW1pbnVtZXJpY2FsIEFsZ29yaXRobXMuCSMKKyMgRm9yIHRoaXMgaW1wbGVtZW50YXRpb24gYj0yKioxNiwgYW5kIHRoZSB0YXJnZXQgaXMgVTFVMlUzVTQvVjFWMiwJIworIyB3aGVyZSBVLFYgYXJlIHdvcmRzIG9mIHRoZSBxdWFkd29yZCBkaXZpZGVuZCBhbmQgbG9uZ3dvcmQgZGl2aXNvciwJIworIyBhbmQgVTEsIFYxIGFyZSB0aGUgbW9zdCBzaWduaWZpY2FudCB3b3Jkcy4JCQkJIworIwkJCQkJCQkJCSMKKyMgVGhlIG1vc3Qgc2lnLiBsb25nd29yZCBvZiB0aGUgNjQgYml0IGRpdmlkZW5kIG11c3QgYmUgaW4gJWQ1LCBsZWFzdAkjCisjIGluICVkNi4gVGhlIGRpdmlzb3IgbXVzdCBiZSBpbiB0aGUgdmFyaWFibGUgZGRpdmlzb3IsIGFuZCB0aGUJCSMKKyMgc2lnbmVkL3Vuc2lnbmVkIGZsYWcgZGR1c2lnbiBtdXN0IGJlIHNldCAoMD11bnNpZ25lZCwxPXNpZ25lZCkuCSMKKyMgVGhlIHF1b3RpZW50IGlzIHJldHVybmVkIGluICVkNiwgcmVtYWluZGVyIGluICVkNSwgdW5sZXNzIHRoZQkJIworIyB2IChvdmVyZmxvdykgYml0IGlzIHNldCBpbiB0aGUgc2F2ZWQgJWNjci4gSWYgb3ZlcmZsb3csIHRoZSBkaXZpZGVuZAkjCisjIGlzIHVuY2hhbmdlZC4JCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2RjbGFzc2ljYWw6CisjIGlmIHRoZSBkaXZpc29yIG1zdyBpcyAwLCB1c2Ugc2ltcGxlciBhbGdvcml0aG0gdGhlbiB0aGUgZnVsbCBibG93bgorIyBvbmUgYXQgZGRrbnV0aDoKKworCWNtcGkubAkJJWQ3LCAmMHhmZmZmCisJYmhpLmIJCWRka251dGgJCQkjIGdvIHVzZSBELiBLbnV0aCBhbGdvcml0aG0KKworIyBTaW5jZSB0aGUgZGl2aXNvciBpcyBvbmx5IGEgd29yZCAoYW5kIGxhcmdlciB0aGFuIHRoZSBtc2x3IG9mIHRoZSBkaXZpZGVuZCksCisjIGEgc2ltcGxlciBhbGdvcml0aG0gbWF5IGJlIHVzZWQgOgorIyBJbiB0aGUgZ2VuZXJhbCBjYXNlLCBmb3VyIHF1b3RpZW50IHdvcmRzIHdvdWxkIGJlIGNyZWF0ZWQgYnkKKyMgZGl2aWRpbmcgdGhlIGRpdmlzb3Igd29yZCBpbnRvIGVhY2ggZGl2aWRlbmQgd29yZC4gSW4gdGhpcyBjYXNlLAorIyB0aGUgZmlyc3QgdHdvIHF1b3RpZW50IHdvcmRzIG11c3QgYmUgemVybywgb3Igb3ZlcmZsb3cgd291bGQgb2NjdXIuCisjIFNpbmNlIHdlIGFscmVhZHkgY2hlY2tlZCB0aGlzIGNhc2UgYWJvdmUsIHdlIGNhbiB0cmVhdCB0aGUgbW9zdCBzaWduaWZpY2FudAorIyBsb25nd29yZCBvZiB0aGUgZGl2aWRlbmQgYXMgKDApIHJlbWFpbmRlciAoc2VlIEtudXRoKSBhbmQgbWVyZWx5IGNvbXBsZXRlCisjIHRoZSBsYXN0IHR3byBkaXZpc2lvbnMgdG8gZ2V0IGEgcXVvdGllbnQgbG9uZ3dvcmQgYW5kIHdvcmQgcmVtYWluZGVyOgorCisJY2xyLmwJCSVkMQorCXN3YXAJCSVkNQkJCSMgc2FtZSBhcyByKmIgaWYgcHJldmlvdXMgc3RlcCBycWQKKwlzd2FwCQklZDYJCQkjIGdldCB1MyB0byBsc3cgcG9zaXRpb24KKwltb3YudwkJJWQ2LCAlZDUJCSMgcmIgKyB1MworCisJZGl2dS53CQklZDcsICVkNQorCisJbW92LncJCSVkNSwgJWQxCQkjIGZpcnN0IHF1b3RpZW50IHdvcmQKKwlzd2FwCQklZDYJCQkjIGdldCB1NAorCW1vdi53CQklZDYsICVkNQkJIyByYiArIHU0CisKKwlkaXZ1LncJCSVkNywgJWQ1CisKKwlzd2FwCQklZDEKKwltb3YudwkJJWQ1LCAlZDEJCSMgMm5kIHF1b3RpZW50ICdkaWdpdCcKKwljbHIudwkJJWQ1CisJc3dhcAkJJWQ1CQkJIyBub3cgcmVtYWluZGVyCisJbW92LmwJCSVkMSwgJWQ2CQkjIGFuZCBxdW90aWVudAorCisJcnRzCisKK2Rka251dGg6CisjIEluIHRoaXMgYWxnb3JpdGhtLCB0aGUgZGl2aXNvciBpcyB0cmVhdGVkIGFzIGEgMiBkaWdpdCAod29yZCkgbnVtYmVyCisjIHdoaWNoIGlzIGRpdmlkZWQgaW50byBhIDMgZGlnaXQgKHdvcmQpIGRpdmlkZW5kIHRvIGdldCBvbmUgcXVvdGllbnQKKyMgZGlnaXQgKHdvcmQpLiBBZnRlciBzdWJ0cmFjdGlvbiwgdGhlIGRpdmlkZW5kIGlzIHNoaWZ0ZWQgYW5kIHRoZQorIyBwcm9jZXNzIHJlcGVhdGVkLiBCZWZvcmUgYmVnaW5uaW5nLCB0aGUgZGl2aXNvciBhbmQgcXVvdGllbnQgYXJlCisjICdub3JtYWxpemVkJyBzbyB0aGF0IHRoZSBwcm9jZXNzIG9mIGVzdGltYXRpbmcgdGhlIHF1b3RpZW50IGRpZ2l0CisjIHdpbGwgeWllbGQgdmVyaWZpYWJseSBjb3JyZWN0IHJlc3VsdHMuLgorCisJY2xyLmwJCURETk9STUFMKCVhNikJCSMgY291bnQgb2Ygc2hpZnRzIGZvciBub3JtYWxpemF0aW9uCisJY2xyLmIJCUREU0VDT05EKCVhNikJCSMgY2xlYXIgZmxhZyBmb3IgcXVvdGllbnQgZGlnaXRzCisJY2xyLmwJCSVkMQkJCSMgJWQxIHdpbGwgaG9sZCB0cmlhbCBxdW90aWVudAorZGRuY2hrOgorCWJ0c3QJCSYzMSwgJWQ3CQkjIG11c3Qgd2Ugbm9ybWFsaXplPyBmaXJzdCB3b3JkIG9mCisJYm5lLmIJCWRkbm9ybWFsaXplZAkJIyBkaXZpc29yIChWMSkgbXVzdCBiZSA+PSA2NTUzNi8yCisJYWRkcS5sCQkmMHgxLCBERE5PUk1BTCglYTYpCSMgY291bnQgbm9ybWFsaXphdGlvbiBzaGlmdHMKKwlsc2wubAkJJjB4MSwgJWQ3CQkjIHNoaWZ0IHRoZSBkaXZpc29yCisJbHNsLmwJCSYweDEsICVkNgkJIyBzaGlmdCB1NCx1MyB3aXRoIG92ZXJmbG93IHRvIHUyCisJcm94bC5sCQkmMHgxLCAlZDUJCSMgc2hpZnQgdTEsdTIKKwlicmEudwkJZGRuY2hrCitkZG5vcm1hbGl6ZWQ6CisKKyMgTm93IGNhbGN1bGF0ZSBhbiBlc3RpbWF0ZSBvZiB0aGUgcXVvdGllbnQgd29yZHMgKG1zdyBmaXJzdCwgdGhlbiBsc3cpLgorIyBUaGUgY29tbWVudHMgdXNlIHN1YnNjcmlwdHMgZm9yIHRoZSBmaXJzdCBxdW90aWVudCBkaWdpdCBkZXRlcm1pbmF0aW9uLgorCW1vdi5sCQklZDcsICVkMwkJIyBkaXZpc29yCisJbW92LmwJCSVkNSwgJWQyCQkjIGRpdmlkZW5kIG1zbHcKKwlzd2FwCQklZDIKKwlzd2FwCQklZDMKKwljbXAudwkJJWQyLCAlZDMJCSMgVjEgPSBVMSA/CisJYm5lLmIJCWRkcWNhbGMxCisJbW92LncJCSYweGZmZmYsICVkMQkJIyB1c2UgbWF4IHRyaWFsIHF1b3RpZW50IHdvcmQKKwlicmEuYgkJZGRhZGowCitkZHFjYWxjMToKKwltb3YubAkJJWQ1LCAlZDEKKworCWRpdnUudwkJJWQzLCAlZDEJCSMgdXNlIHF1b3RpZW50IG9mIG1zbHcvbXN3CisKKwlhbmRpLmwJCSYweDAwMDBmZmZmLCAlZDEJIyB6ZXJvIGFueSByZW1haW5kZXIKK2RkYWRqMDoKKworIyBub3cgdGVzdCB0aGUgdHJpYWwgcXVvdGllbnQgYW5kIGFkanVzdC4gVGhpcyBzdGVwIHBsdXMgdGhlCisjIG5vcm1hbGl6YXRpb24gYXNzdXJlcyAoYWNjb3JkaW5nIHRvIEtudXRoKSB0aGF0IHRoZSB0cmlhbAorIyBxdW90aWVudCB3aWxsIGJlIGF0IHdvcnN0IDEgdG9vIGxhcmdlLgorCW1vdi5sCQklZDYsIC0oJXNwKQorCWNsci53CQklZDYJCQkjIHdvcmQgdTMgbGVmdAorCXN3YXAJCSVkNgkJCSMgaW4gbHN3IHBvc2l0aW9uCitkZGFkajE6IG1vdi5sCQklZDcsICVkMworCW1vdi5sCQklZDEsICVkMgorCW11bHUudwkJJWQ3LCAlZDIJCSMgVjJxCisJc3dhcAkJJWQzCisJbXVsdS53CQklZDEsICVkMwkJIyBWMXEKKwltb3YubAkJJWQ1LCAlZDQJCSMgVTFVMgorCXN1Yi5sCQklZDMsICVkNAkJIyBVMVUyIC0gVjFxCisKKwlzd2FwCQklZDQKKworCW1vdi53CQklZDQsJWQwCisJbW92LncJCSVkNiwlZDQJCQkjIGluc2VydCBsb3dlciB3b3JkIChVMykKKworCXRzdC53CQklZDAJCQkjIGlzIHVwcGVyIHdvcmQgc2V0PworCWJuZS53CQlkZGFkamQxCisKKyMJYWRkLmwJCSVkNiwgJWQ0CQkjIChVMVUyIC0gVjFxKSArIFUzCisKKwljbXAubAkJJWQyLCAlZDQKKwlibHMuYgkJZGRhZGpkMQkJCSMgaXMgVjJxID4gKFUxVTItVjFxKSArIFUzID8KKwlzdWJxLmwJCSYweDEsICVkMQkJIyB5ZXMsIGRlY3JlbWVudCBhbmQgcmVjaGVjaworCWJyYS5iCQlkZGFkajEKK2RkYWRqZDE6CisjIG5vdyB0ZXN0IHRoZSB3b3JkIGJ5IG11bHRpcGx5aW5nIGl0IGJ5IHRoZSBkaXZpc29yIChWMVYyKSBhbmQgY29tcGFyaW5nCisjIHRoZSAzIGRpZ2l0ICh3b3JkKSByZXN1bHQgd2l0aCB0aGUgY3VycmVudCBkaXZpZGVuZCB3b3JkcworCW1vdi5sCQklZDUsIC0oJXNwKQkJIyBzYXZlICVkNSAoJWQ2IGFscmVhZHkgc2F2ZWQpCisJbW92LmwJCSVkMSwgJWQ2CisJc3dhcAkJJWQ2CQkJIyBzaGlmdCBhbnN3ZXIgdG8gbXMgMyB3b3JkcworCW1vdi5sCQklZDcsICVkNQorCWJzci5sCQlkbW0yCisJbW92LmwJCSVkNSwgJWQyCQkjIG5vdyAlZDIsJWQzIGFyZSB0cmlhbCpkaXZpc29yCisJbW92LmwJCSVkNiwgJWQzCisJbW92LmwJCSglc3ApKywgJWQ1CQkjIHJlc3RvcmUgZGl2aWRlbmQKKwltb3YubAkJKCVzcCkrLCAlZDYKKwlzdWIubAkJJWQzLCAlZDYKKwlzdWJ4LmwJCSVkMiwgJWQ1CQkjIHN1YnRyYWN0IGRvdWJsZSBwcmVjaXNpb24KKwliY2MJCWRkMm5kCQkJIyBubyBjYXJyeSwgZG8gbmV4dCBxdW90aWVudCBkaWdpdAorCXN1YnEubAkJJjB4MSwgJWQxCQkjIHEgaXMgb25lIHRvbyBsYXJnZQorIyBuZWVkIHRvIGFkZCBiYWNrIGRpdmlzb3IgbG9uZ3dvcmQgdG8gY3VycmVudCBtcyAzIGRpZ2l0cyBvZiBkaXZpZGVuZAorIyAtIGFjY29yZGluZyB0byBLbnV0aCwgdGhpcyBpcyBkb25lIG9ubHkgMiBvdXQgb2YgNjU1MzYgdGltZXMgZm9yIHJhbmRvbQorIyBkaXZpc29yLCBkaXZpZGVuZCBzZWxlY3Rpb24uCisJY2xyLmwJCSVkMgorCW1vdi5sCQklZDcsICVkMworCXN3YXAJCSVkMworCWNsci53CQklZDMJCQkjICVkMyBub3cgbHMgd29yZCBvZiBkaXZpc29yCisJYWRkLmwJCSVkMywgJWQ2CQkjIGFsaWduZWQgd2l0aCAzcmQgd29yZCBvZiBkaXZpZGVuZAorCWFkZHgubAkJJWQyLCAlZDUKKwltb3YubAkJJWQ3LCAlZDMKKwljbHIudwkJJWQzCQkJIyAlZDMgbm93IG1zIHdvcmQgb2YgZGl2aXNvcgorCXN3YXAJCSVkMwkJCSMgYWxpZ25lZCB3aXRoIDJuZCB3b3JkIG9mIGRpdmlkZW5kCisJYWRkLmwJCSVkMywgJWQ1CitkZDJuZDoKKwl0c3QuYgkJRERTRUNPTkQoJWE2KQkJIyBib3RoIHEgd29yZHMgZG9uZT8KKwlibmUuYgkJZGRyZW1haW4KKyMgZmlyc3QgcXVvdGllbnQgZGlnaXQgbm93IGNvcnJlY3QuIHN0b3JlIGRpZ2l0IGFuZCBzaGlmdCB0aGUKKyMgKHN1YnRyYWN0ZWQpIGRpdmlkZW5kCisJbW92LncJCSVkMSwgRERRVU9USUVOVCglYTYpCisJY2xyLmwJCSVkMQorCXN3YXAJCSVkNQorCXN3YXAJCSVkNgorCW1vdi53CQklZDYsICVkNQorCWNsci53CQklZDYKKwlzdAkJRERTRUNPTkQoJWE2KQkJIyBzZWNvbmQgZGlnaXQKKwlicmEudwkJZGRub3JtYWxpemVkCitkZHJlbWFpbjoKKyMgYWRkIDJuZCB3b3JkIHRvIHF1b3RpZW50LCBnZXQgdGhlIHJlbWFpbmRlci4KKwltb3YudwkJJWQxLCBERFFVT1RJRU5UKzIoJWE2KQorIyBzaGlmdCBkb3duIG9uZSB3b3JkL2RpZ2l0IHRvIHJlbm9ybWFsaXplIHJlbWFpbmRlci4KKwltb3YudwkJJWQ1LCAlZDYKKwlzd2FwCQklZDYKKwlzd2FwCQklZDUKKwltb3YubAkJREROT1JNQUwoJWE2KSwgJWQ3CSMgZ2V0IG5vcm0gc2hpZnQgY291bnQKKwliZXEuYgkJZGRybgorCXN1YnEubAkJJjB4MSwgJWQ3CQkjIHNldCBmb3IgbG9vcCBjb3VudAorZGRubHA6CisJbHNyLmwJCSYweDEsICVkNQkJIyBzaGlmdCBpbnRvICVkNgorCXJveHIubAkJJjB4MSwgJWQ2CisJZGJmCQklZDcsIGRkbmxwCitkZHJuOgorCW1vdi5sCQklZDYsICVkNQkJIyByZW1haW5kZXIKKwltb3YubAkJRERRVU9USUVOVCglYTYpLCAlZDYJIyBxdW90aWVudAorCisJcnRzCitkbW0yOgorIyBmYWN0b3JzIGZvciB0aGUgMzJYMzItPjY0IG11bHRpcGxpY2F0aW9uIGFyZSBpbiAlZDUgYW5kICVkNi4KKyMgcmV0dXJucyA2NCBiaXQgcmVzdWx0IGluICVkNSAoaGkpICVkNihsbykuCisjIGRlc3Ryb3lzICVkMiwlZDMsJWQ0LgorCisjIG11bHRpcGx5IGhpLGxvIHdvcmRzIG9mIGVhY2ggZmFjdG9yIHRvIGdldCA0IGludGVybWVkaWF0ZSBwcm9kdWN0cworCW1vdi5sCQklZDYsICVkMgorCW1vdi5sCQklZDYsICVkMworCW1vdi5sCQklZDUsICVkNAorCXN3YXAJCSVkMworCXN3YXAJCSVkNAorCW11bHUudwkJJWQ1LCAlZDYJCSMgJWQ2IDwtIGxzdypsc3cKKwltdWx1LncJCSVkMywgJWQ1CQkjICVkNSA8LSBtc3ctZGVzdCpsc3ctc291cmNlCisJbXVsdS53CQklZDQsICVkMgkJIyAlZDIgPC0gbXN3LXNvdXJjZSpsc3ctZGVzdAorCW11bHUudwkJJWQ0LCAlZDMJCSMgJWQzIDwtIG1zdyptc3cKKyMgbm93IHVzZSBzd2FwIGFuZCBhZGR4IHRvIGNvbnNvbGlkYXRlIHRvIHR3byBsb25nd29yZHMKKwljbHIubAkJJWQ0CisJc3dhcAkJJWQ2CisJYWRkLncJCSVkNSwgJWQ2CQkjIGFkZCBtc3cgb2YgbCpsIHRvIGxzdyBvZiBtKmwgcHJvZHVjdAorCWFkZHgudwkJJWQ0LCAlZDMJCSMgYWRkIGFueSBjYXJyeSB0byBtKm0gcHJvZHVjdAorCWFkZC53CQklZDIsICVkNgkJIyBhZGQgaW4gbHN3IG9mIG90aGVyIG0qbCBwcm9kdWN0CisJYWRkeC53CQklZDQsICVkMwkJIyBhZGQgYW55IGNhcnJ5IHRvIG0qbSBwcm9kdWN0CisJc3dhcAkJJWQ2CQkJIyAlZDYgaXMgbG93IDMyIGJpdHMgb2YgZmluYWwgcHJvZHVjdAorCWNsci53CQklZDUKKwljbHIudwkJJWQyCQkJIyBsc3cgb2YgdHdvIG1peGVkIHByb2R1Y3RzIHVzZWQsCisJc3dhcAkJJWQ1CQkJIyBub3cgdXNlIG1zd3Mgb2YgbG9uZ3dvcmRzCisJc3dhcAkJJWQyCisJYWRkLmwJCSVkMiwgJWQ1CisJYWRkLmwJCSVkMywgJWQ1CQkjICVkNSBub3cgbXMgMzIgYml0cyBvZiBmaW5hbCBwcm9kdWN0CisJcnRzCisKKyMjIyMjIyMjIyMKK2Rjb250cm9sbW9kZWxfczoKKwltb3ZxLmwJCSZMT05HLCVkMAorCWJzci5sCQlfY2FsY19lYQkJIyBjYWxjIDxlYT4KKworCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZpbW1lZF9mbGcgIyBpbW1lZGlhdGUgYWRkcmVzc2luZyBtb2RlPworCWJlcS5iCQlkaW1tZWQJCQkjIHllcworCisJbW92LmwJCSVhMCwlYTIKKwlic3IubAkJX2RtZW1fcmVhZF9sb25nCQkjIGZldGNoIGRpdmlzb3IgZnJvbSA8ZWE+CisKKwl0c3QubAkJJWQxCQkJIyBkZmV0Y2ggZXJyb3I/CisJYm5lLmIJCWRpdjY0X2VycgkJIyB5ZXMKKworCW1vdi5sCQklZDAsICVkNworCWJyYS53CQlkZ290c3JjbAorCisjIHdlIGhhdmUgdG8gc3BsaXQgb3V0IGltbWVkaWF0ZSBkYXRhIGhlcmUgYmVjYXVzZSBpdCBtdXN0IGJlIHJlYWQgdXNpbmcKKyMgaW1lbV9yZWFkKCkgaW5zdGVhZCBvZiBkbWVtX3JlYWQoKS4gdGhpcyBiZWNvbWVzIGVzcGVjaWFsbHkgaW1wb3J0YW50CisjIGlmIHRoZSBmZXRjaCBydW5zIGludG8gc29tZSBkZWFkbHkgZmF1bHQuCitkaW1tZWQ6CisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIHJlYWQgaW1tZWRpYXRlIHZhbHVlCisKKwl0c3QubAkJJWQxCQkJIyBpZmV0Y2ggZXJyb3I/CisJYm5lLmwJCWlzcF9pYWNjCQkjIHllcworCisJbW92LmwJCSVkMCwlZDcKKwlicmEudwkJZGdvdHNyY2wKKworIyMjIyMjIyMjIworCisjIGlmIGRtZW1fcmVhZF9sb25nKCkgcmV0dXJucyBhIGZhaWwgbWVzc2FnZSBpbiBkMSwgdGhlIHBhY2thZ2UKKyMgbXVzdCBjcmVhdGUgYW4gYWNjZXNzIGVycm9yIGZyYW1lLiBoZXJlLCB3ZSBwYXNzIGEgc2tlbGV0b24gZnNsdworIyBhbmQgdGhlIGZhaWxpbmcgYWRkcmVzcyB0byB0aGUgcm91dGluZSB0aGF0IGNyZWF0ZXMgdGhlIG5ldyBmcmFtZS4KKyMgYWxzbywgd2UgY2FsbCBpc3BfcmVzdG9yZSBpbiBjYXNlIHRoZSBlZmZlY3RpdmUgYWRkcmVzc2luZyBtb2RlIHdhcworIyAoYW4pKyBvciAtKGFuKSBpbiB3aGljaCBjYXNlIHRoZSBwcmV2aW91cyAiYW4iIHZhbHVlIG11c3QgYmUgcmVzdG9yZWQuCisjIEZTTFc6CisjCXJlYWQgPSB0cnVlCisjCXNpemUgPSBsb25nd29yZAorIwlUTSA9IGRhdGEKKyMJc29mdHdhcmUgZW11bGF0aW9uIGVycm9yID0gdHJ1ZQorZGl2NjRfZXJyOgorCWJzci5sCQlpc3BfcmVzdG9yZQkJIyByZXN0b3JlIGFkZHIgcmVnCisJbW92LmwJCSVhMiwlYTAJCQkjIHBhc3MgZmFpbGluZyBhZGRyZXNzCisJbW92LmwJCSYweDAxMDEwMDAxLCVkMAkJIyBwYXNzIGZzbHcKKwlicmEubAkJaXNwX2RhY2MKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfbXVsNjQoKTogcm91dGluZSB0byBlbXVsYXRlIG11bHt1LHN9LmwgPGVhPixEaDpEbCAzMngzMi0+NjQJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2NhbGNfZWEoKSAtIGNhbGN1bGF0ZSBlZmZlY3RpdmUgYWRkcmVzcwkJCSMKKyMJaXNwX2lhY2MoKSAtIGhhbmRsZSBpbnN0cnVjdGlvbiBhY2Nlc3MgZXJyb3IgZXhjZXB0aW9uCQkjCisjCWlzcF9kYWNjKCkgLSBoYW5kbGUgZGF0YSBhY2Nlc3MgZXJyb3IgZXhjZXB0aW9uCQkJIworIwlpc3BfcmVzdG9yZSgpIC0gcmVzdG9yZSBBbiBvbiBhY2Nlc3MgZXJyb3Igdy8gLSgpIG9yICgpKwkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlub25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJZiBleGl0aW5nIHRocm91Z2ggaXNwX2RhY2MuLi4JCQkJCSMKKyMJCWEwID0gZmFpbGluZyBhZGRyZXNzCQkJCQkjCisjCQlkMCA9IEZTTFcJCQkJCQkjCisjCWVsc2UJCQkJCQkJCSMKKyMJCW5vbmUJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRmlyc3QsIGRlY29kZSB0aGUgb3BlcmFuZCBsb2NhdGlvbi4gSWYgaXQncyBpbiBEbiwgZmV0Y2ggZnJvbQkjCisjIHRoZSBzdGFjay4gSWYgaXQncyBpbiBtZW1vcnksIHVzZSBfY2FsY19lYSgpIHRvIGNhbGN1bGF0ZSB0aGUJCSMKKyMgZWZmZWN0aXZlIGFkZHJlc3MuIFVzZSBfZG1lbV9yZWFkX2xvbmcoKSB0byBmZXRjaCBhdCB0aGF0IGFkZHJlc3MuCSMKKyMgVW5sZXNzIHRoZSBvcGVyYW5kIGlzIGltbWVkaWF0ZSBkYXRhLiBUaGVuIHVzZSBfaW1lbV9yZWFkX2xvbmcoKS4JIworIyBTZW5kIGZhaWx1cmVzIHRvIGlzcF9kYWNjKCkgb3IgaXNwX2lhY2MoKSBhcyBhcHByb3ByaWF0ZS4JCSMKKyMJSWYgdGhlIG9wZXJhbmRzIGFyZSBzaWduZWQsIG1ha2UgdGhlbSB1bnNpZ25lZCBhbmQgc2F2ZSB0aGUJIworIyBzaWduIGluZm8gZm9yIGxhdGVyLiBQZXJmb3JtIHRoZSBtdWx0aXBsaWNhdGlvbiB1c2luZyAxNngxNi0+MzIJIworIyB1bnNpZ25lZCBtdWx0aXBsaWVzIGFuZCAiYWRkIiBpbnN0cnVjdGlvbnMuIFN0b3JlIHRoZSBoaWdoIGFuZCBsb3cJIworIyBwb3J0aW9ucyBvZiB0aGUgcmVzdWx0IGluIHRoZSBhcHByb3ByaWF0ZSBkYXRhIHJlZ2lzdGVycyBvbiB0aGUJIworIyBzdGFjay4gQ2FsY3VsYXRlIHRoZSBjb25kaXRpb24gY29kZXMsIGFsc28uCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMKKyMgbXVsKHUscylsICMKKyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCV9tdWw2NAorX211bDY0OgorCW1vdi5iCQlFWENfT1BXT1JEKzEoJWE2KSwgJWQwCSMgZXh0cmFjdCBzcmMge21vZGUscmVnfQorCWNtcGkuYgkJJWQwLCAmMHg3CQkjIGlzIHNyYyBtb2RlIERuIG9yIG90aGVyPworCWJndC53CQltdWw2NF9tZW1vcAkJIyBzcmMgaXMgaW4gbWVtb3J5CisKKyMgbXVsdGlwbGllciBvcGVyYW5kIGluIHRoZSBkYXRhIHJlZ2lzdGVyIGZpbGUuCisjIG11c3QgZXh0cmFjdCB0aGUgcmVnaXN0ZXIgbnVtYmVyIGFuZCBmZXRjaCB0aGUgb3BlcmFuZCBmcm9tIHRoZSBzdGFjay4KK211bDY0X3JlZ29wOgorCWFuZGkudwkJJjB4NywgJWQwCQkjIGV4dHJhY3QgRG4KKwltb3YubAkJKEVYQ19EUkVHUywlYTYsJWQwLncqNCksICVkMyAjIGZldGNoIG11bHRpcGxpZXIKKworIyBtdWx0aXBsaWVyIGlzIGluICVkMy4gbm93LCBleHRyYWN0IERsIGFuZCBEaCBmaWVsZHMgYW5kIGZldGNoIHRoZQorIyBtdWx0aXBsaWNhbmQgZnJvbSB0aGUgZGF0YSByZWdpc3RlciBzcGVjaWZpZWQgYnkgRGwuCittdWw2NF9tdWx0aXBsaWNhbmQ6CisJbW92LncJCUVYQ19FWFRXT1JEKCVhNiksICVkMgkjIGZldGNoIGV4dCB3b3JkCisJY2xyLncJCSVkMQkJCSMgY2xlYXIgRGggcmVnCisJbW92LmIJCSVkMiwgJWQxCQkjIGdyYWIgRGgKKwlyb2wudwkJJjB4NCwgJWQyCQkjIGFsaWduIERsIGJ5dGUKKwlhbmRpLncJCSYweDcsICVkMgkJIyBleHRyYWN0IERsCisKKwltb3YubAkJKEVYQ19EUkVHUywlYTYsJWQyLncqNCksICVkNCAjIGdldCBtdWx0aXBsaWNhbmQKKworIyBjaGVjayBmb3IgdGhlIGNhc2Ugb2YgInplcm8iIHJlc3VsdCBlYXJseQorCXRzdC5sCQklZDQJCQkjIHRlc3QgbXVsdGlwbGljYW5kCisJYmVxLncJCW11bDY0X3plcm8JCSMgaGFuZGxlIHplcm8gc2VwYXJhdGVseQorCXRzdC5sCQklZDMJCQkjIHRlc3QgbXVsdGlwbGllcgorCWJlcS53CQltdWw2NF96ZXJvCQkjIGhhbmRsZSB6ZXJvIHNlcGFyYXRlbHkKKworIyBtdWx0aXBsaWVyIGlzIGluICVkMyBhbmQgbXVsdGlwbGljYW5kIGlzIGluICVkNC4KKyMgaWYgdGhlIG9wZXJhdGlvbiBpcyB0byBiZSBzaWduZWQsIHRoZW4gdGhlIG9wZXJhbmRzIGFyZSBjb252ZXJ0ZWQKKyMgdG8gdW5zaWduZWQgYW5kIHRoZSByZXN1bHQgc2lnbiBpcyBzYXZlZCBmb3IgdGhlIGVuZC4KKwljbHIuYgkJRVhDX1RFTVAoJWE2KQkJIyBjbGVhciB0ZW1wIHNwYWNlCisJYnRzdAkJJjB4MywgRVhDX0VYVFdPUkQoJWE2KQkjIHNpZ25lZCBvciB1bnNpZ25lZD8KKwliZXEuYgkJbXVsNjRfYWxnCQkjIHVuc2lnbmVkOyBza2lwIHNnbiBjYWxjCisKKwl0c3QubAkJJWQzCQkJIyBpcyBtdWx0aXBsaWVyIG5lZ2F0aXZlPworCWJnZS5iCQltdWw2NF9jaGtfbWRfc2duCSMgbm8KKwluZWcubAkJJWQzCQkJIyBtYWtlIG11bHRpcGxpZXIgcG9zaXRpdmUKKwlvcmkuYgkJJjB4MSwgRVhDX1RFTVAoJWE2KQkjIHNhdmUgbXVsdGlwbGllciBzZ24KKworIyB0aGUgcmVzdWx0IHNpZ24gaXMgdGhlIGV4Y2x1c2l2ZSBvciBvZiB0aGUgb3BlcmFuZCBzaWduIGJpdHMuCittdWw2NF9jaGtfbWRfc2duOgorCXRzdC5sCQklZDQJCQkjIGlzIG11bHRpcGxpY2FuZCBuZWdhdGl2ZT8KKwliZ2UuYgkJbXVsNjRfYWxnCQkjIG5vCisJbmVnLmwJCSVkNAkJCSMgbWFrZSBtdWx0aXBsaWNhbmQgcG9zaXRpdmUKKwllb3JpLmIJCSYweDEsIEVYQ19URU1QKCVhNikJIyBjYWxjdWxhdGUgY29ycmVjdCBzaWduCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJNjMJCQkgICAzMgkJCQkwCSMKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCQkJIworIwl8IGhpKG1wbGllcikgKiBoaShtcGxpY2FuZCl8CQkJCQkjCisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JCQkJCSMKKyMJCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JCQkjCisjCQkgICAgIHwgaGkobXBsaWVyKSAqIGxvKG1wbGljYW5kKSB8CQkJIworIwkJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCSMKKyMJCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JCQkjCisjCQkgICAgIHwgbG8obXBsaWVyKSAqIGhpKG1wbGljYW5kKSB8CQkJIworIwkJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJCSMKKyMJICB8CQkJICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JIworIwktLXwtLQkJCSAgIHwgbG8obXBsaWVyKSAqIGxvKG1wbGljYW5kKSB8CSMKKyMJICB8CQkJICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JIworIwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQkjCisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSMKKyMJfAloaShyZXN1bHQpCSAgIHwJICAgIGxvKHJlc3VsdCkgICAgICAgICB8CSMKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbXVsNjRfYWxnOgorIyBsb2FkIHRlbXAgcmVnaXN0ZXJzIHdpdGggb3BlcmFuZHMKKwltb3YubAkJJWQzLCAlZDUJCSMgbXIgaW4gJWQ1CisJbW92LmwJCSVkMywgJWQ2CQkjIG1yIGluICVkNgorCW1vdi5sCQklZDQsICVkNwkJIyBtZCBpbiAlZDcKKwlzd2FwCQklZDYJCQkjIGhpKG1yKSBpbiBsbyAlZDYKKwlzd2FwCQklZDcJCQkjIGhpKG1kKSBpbiBsbyAlZDcKKworIyBjb21wbGV0ZSBuZWNlc3NhcnkgbXVsdGlwbGllczoKKwltdWx1LncJCSVkNCwgJWQzCQkjIFsxXSBsbyhtcikgKiBsbyhtZCkKKwltdWx1LncJCSVkNiwgJWQ0CQkjIFsyXSBoaShtcikgKiBsbyhtZCkKKwltdWx1LncJCSVkNywgJWQ1CQkjIFszXSBsbyhtcikgKiBoaShtZCkKKwltdWx1LncJCSVkNywgJWQ2CQkjIFs0XSBoaShtcikgKiBoaShtZCkKKworIyBhZGQgbG8gcG9ydGlvbnMgb2YgWzJdLFszXSB0byBoaSBwb3J0aW9uIG9mIFsxXS4KKyMgYWRkIGNhcnJpZXMgcHJvZHVjZWQgZnJvbSB0aGVzZSBhZGRzIHRvIFs0XS4KKyMgbG8oWzFdKSBpcyB0aGUgZmluYWwgbG8gMTYgYml0cyBvZiB0aGUgcmVzdWx0LgorCWNsci5sCQklZDcJCQkjIGxvYWQgJWQ3IHcvIHplcm8gdmFsdWUKKwlzd2FwCQklZDMJCQkjIGhpKFsxXSkgPD09PiBsbyhbMV0pCisJYWRkLncJCSVkNCwgJWQzCQkjIGhpKFsxXSkgKyBsbyhbMl0pCisJYWRkeC5sCQklZDcsICVkNgkJIyAgICBbNF0gICsgY2FycnkKKwlhZGQudwkJJWQ1LCAlZDMJCSMgaGkoWzFdKSArIGxvKFszXSkKKwlhZGR4LmwJCSVkNywgJWQ2CQkjICAgIFs0XSAgKyBjYXJyeQorCXN3YXAJCSVkMwkJCSMgbG8oWzFdKSA8PT0+IGhpKFsxXSkKKworIyBsbyBwb3J0aW9ucyBvZiBbMl0sWzNdIGhhdmUgYmVlbiBhZGRlZCBpbiB0byBmaW5hbCByZXN1bHQuCisjIG5vdywgY2xlYXIgbG8sIHB1dCBoaSBpbiBsbyByZWcsIGFuZCBhZGQgdG8gWzRdCisJY2xyLncJCSVkNAkJCSMgY2xlYXIgbG8oWzJdKQorCWNsci53CQklZDUJCQkjIGNsZWFyIGhpKFszXSkKKwlzd2FwCQklZDQJCQkjIGhpKFsyXSkgaW4gbG8gJWQ0CisJc3dhcAkJJWQ1CQkJIyBoaShbM10pIGluIGxvICVkNQorCWFkZC5sCQklZDUsICVkNAkJIyAgICBbNF0gICsgaGkoWzJdKQorCWFkZC5sCQklZDYsICVkNAkJIyAgICBbNF0gICsgaGkoWzNdKQorCisjIHVuc2lnbmVkIHJlc3VsdCBpcyBub3cgaW4geyVkNCwlZDN9CisJdHN0LmIJCUVYQ19URU1QKCVhNikJCSMgc2hvdWxkIHJlc3VsdCBiZSBzaWduZWQ/CisJYmVxLmIJCW11bDY0X2RvbmUJCSMgbm8KKworIyByZXN1bHQgc2hvdWxkIGJlIGEgc2lnbmVkIG5lZ2F0aXZlIG51bWJlci4KKyMgY29tcHV0ZSAyJ3MgY29tcGxlbWVudCBvZiB0aGUgdW5zaWduZWQgbnVtYmVyOgorIyAgIC1uZWdhdGUgYWxsIGJpdHMgYW5kIGFkZCAxCittdWw2NF9uZWc6CisJbm90LmwJCSVkMwkJCSMgbmVnYXRlIGxvKHJlc3VsdCkgYml0cworCW5vdC5sCQklZDQJCQkjIG5lZ2F0ZSBoaShyZXN1bHQpIGJpdHMKKwlhZGRxLmwJCSYxLCAlZDMJCQkjIGFkZCAxIHRvIGxvKHJlc3VsdCkKKwlhZGR4LmwJCSVkNywgJWQ0CQkjIGFkZCBjYXJyeSB0byBoaShyZXN1bHQpCisKKyMgdGhlIHJlc3VsdCBpcyBzYXZlZCB0byB0aGUgcmVnaXN0ZXIgZmlsZS4KKyMgZm9yICcwNDAgY29tcGF0aWJpbGl0eSwgaWYgRGwgPT0gRGggdGhlbiBvbmx5IHRoZSBoaShyZXN1bHQpIGlzCisjIHNhdmVkLiBzbywgc2F2aW5nIGhpIGFmdGVyIGxvIGFjY29tcGxpc2hlcyB0aGlzIHdpdGhvdXQgbmVlZCB0bworIyBjaGVjayBEbCxEaCBlcXVhbGl0eS4KK211bDY0X2RvbmU6CisJbW92LmwJCSVkMywgKEVYQ19EUkVHUywlYTYsJWQyLncqNCkgIyBzYXZlIGxvKHJlc3VsdCkKKwltb3YudwkJJjB4MCwgJWNjCisJbW92LmwJCSVkNCwgKEVYQ19EUkVHUywlYTYsJWQxLncqNCkgIyBzYXZlIGhpKHJlc3VsdCkKKworIyBub3csIGdyYWIgdGhlIGNvbmRpdGlvbiBjb2Rlcy4gb25seSBvbmUgdGhhdCBjYW4gYmUgc2V0IGlzICdOJy4KKyMgJ04nIENBTiBiZSBzZXQgaWYgdGhlIG9wZXJhdGlvbiBpcyB1bnNpZ25lZCBpZiBiaXQgNjMgaXMgc2V0LgorCW1vdi53CQklY2MsICVkNwkJIyBmZXRjaCAlY2NyIHRvIHNlZSBpZiAnTicgc2V0CisJYW5kaS5iCQkmMHg4LCAlZDcJCSMgZXh0cmFjdCAnTicgYml0CisKK211bDY0X2Njb2RlX3NldDoKKwltb3YuYgkJRVhDX0NDKzEoJWE2KSwgJWQ2CSMgZmV0Y2ggcHJldmlvdXMgJWNjcgorCWFuZGkuYgkJJjB4MTAsICVkNgkJIyBhbGwgYnV0ICdYJyBiaXQgY2hhbmdlcworCisJb3IuYgkJJWQ3LCAlZDYJCSMgZ3JvdXAgJ1gnIGFuZCAnTicKKwltb3YuYgkJJWQ2LCBFWENfQ0MrMSglYTYpCSMgc2F2ZSBuZXcgJWNjcgorCisJcnRzCisKKyMgb25lIG9yIGJvdGggb2YgdGhlIG9wZXJhbmRzIGlzIHplcm8gc28gdGhlIHJlc3VsdCBpcyBhbHNvIHplcm8uCisjIHNhdmUgdGhlIHplcm8gcmVzdWx0IHRvIHRoZSByZWdpc3RlciBmaWxlIGFuZCBzZXQgdGhlICdaJyBjY29kZSBiaXQuCittdWw2NF96ZXJvOgorCWNsci5sCQkoRVhDX0RSRUdTLCVhNiwlZDIudyo0KSAjIHNhdmUgbG8ocmVzdWx0KQorCWNsci5sCQkoRVhDX0RSRUdTLCVhNiwlZDEudyo0KSAjIHNhdmUgaGkocmVzdWx0KQorCisJbW92cS5sCQkmMHg0LCAlZDcJCSMgc2V0ICdaJyBjY29kZSBiaXQKKwlicmEuYgkJbXVsNjRfY2NvZGVfc2V0CQkjIGZpbmlzaCBjY29kZSBzZXQKKworIyMjIyMjIyMjIworCisjIG11bHRpcGxpZXIgb3BlcmFuZCBpcyBpbiBtZW1vcnkgYXQgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzLgorIyBtdXN0IGNhbGN1bGF0ZSB0aGUgPGVhPiBhbmQgZ28gZmV0Y2ggdGhlIDMyLWJpdCBvcGVyYW5kLgorbXVsNjRfbWVtb3A6CisJbW92cS5sCQkmTE9ORywgJWQwCQkjIHBhc3MgIyBvZiBieXRlcworCWJzci5sCQlfY2FsY19lYQkJIyBjYWxjdWxhdGUgPGVhPgorCisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJmltbWVkX2ZsZyAjIGltbWVkaWF0ZSBhZGRyZXNzaW5nIG1vZGU/CisJYmVxLmIJCW11bDY0X2ltbWVkCQkjIHllcworCisJbW92LmwJCSVhMCwlYTIKKwlic3IubAkJX2RtZW1fcmVhZF9sb25nCQkjIGZldGNoIHNyYyBmcm9tIGFkZHIgKCVhMCkKKworCXRzdC5sCQklZDEJCQkjIGRmZXRjaCBlcnJvcj8KKwlibmUudwkJbXVsNjRfZXJyCQkjIHllcworCisJbW92LmwJCSVkMCwgJWQzCQkjIHN0b3JlIG11bHRpcGxpZXIgaW4gJWQzCisKKwlicmEudwkJbXVsNjRfbXVsdGlwbGljYW5kCisKKyMgd2UgaGF2ZSB0byBzcGxpdCBvdXQgaW1tZWRpYXRlIGRhdGEgaGVyZSBiZWNhdXNlIGl0IG11c3QgYmUgcmVhZCB1c2luZworIyBpbWVtX3JlYWQoKSBpbnN0ZWFkIG9mIGRtZW1fcmVhZCgpLiB0aGlzIGJlY29tZXMgZXNwZWNpYWxseSBpbXBvcnRhbnQKKyMgaWYgdGhlIGZldGNoIHJ1bnMgaW50byBzb21lIGRlYWRseSBmYXVsdC4KK211bDY0X2ltbWVkOgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyByZWFkIGltbWVkaWF0ZSB2YWx1ZQorCisJdHN0LmwJCSVkMQkJCSMgaWZldGNoIGVycm9yPworCWJuZS5sCQlpc3BfaWFjYwkJIyB5ZXMKKworCW1vdi5sCQklZDAsJWQzCisJYnJhLncJCW11bDY0X211bHRpcGxpY2FuZAorCisjIyMjIyMjIyMjCisKKyMgaWYgZG1lbV9yZWFkX2xvbmcoKSByZXR1cm5zIGEgZmFpbCBtZXNzYWdlIGluIGQxLCB0aGUgcGFja2FnZQorIyBtdXN0IGNyZWF0ZSBhbiBhY2Nlc3MgZXJyb3IgZnJhbWUuIGhlcmUsIHdlIHBhc3MgYSBza2VsZXRvbiBmc2x3CisjIGFuZCB0aGUgZmFpbGluZyBhZGRyZXNzIHRvIHRoZSByb3V0aW5lIHRoYXQgY3JlYXRlcyB0aGUgbmV3IGZyYW1lLgorIyBhbHNvLCB3ZSBjYWxsIGlzcF9yZXN0b3JlIGluIGNhc2UgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzaW5nIG1vZGUgd2FzCisjIChhbikrIG9yIC0oYW4pIGluIHdoaWNoIGNhc2UgdGhlIHByZXZpb3VzICJhbiIgdmFsdWUgbXVzdCBiZSByZXN0b3JlZC4KKyMgRlNMVzoKKyMJcmVhZCA9IHRydWUKKyMJc2l6ZSA9IGxvbmd3b3JkCisjCVRNID0gZGF0YQorIwlzb2Z0d2FyZSBlbXVsYXRpb24gZXJyb3IgPSB0cnVlCittdWw2NF9lcnI6CisJYnNyLmwJCWlzcF9yZXN0b3JlCQkjIHJlc3RvcmUgYWRkciByZWcKKwltb3YubAkJJWEyLCVhMAkJCSMgcGFzcyBmYWlsaW5nIGFkZHJlc3MKKwltb3YubAkJJjB4MDEwMTAwMDEsJWQwCQkjIHBhc3MgZnNsdworCWJyYS5sCQlpc3BfZGFjYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9jb21wYW5kc2V0MigpOiByb3V0aW5lIHRvIGVtdWxhdGUgY2FzMigpCQkJIworIwkJCShpbnRlcm5hbCB0byBwYWNrYWdlKQkJCQkjCisjCQkJCQkJCQkJIworIwlfaXNwX2NhczJfZmluaXNoKCk6IHN0b3JlIGNjb2Rlcywgc3RvcmUgY29tcGFyZSByZWdzCQkjCisjCQkJICAgIChleHRlcm5hbCB0byBwYWNrYWdlKQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9yZWFsX2xvY2tfcGFnZSgpIC0gImNhbGxvdXQiIHRvIGxvY2sgb3AncyBwYWdlIGZyb20gcGFnZS1vdXRzCSMKKyMJX2Nhc190ZXJtaW5hdGUyKCkgLSBhY2Nlc3MgZXJyb3IgZXhpdAkJCQkjCisjCV9yZWFsX2NhczIoKSAtICJjYWxsb3V0IiB0byBjb3JlIGNhczIgZW11bGF0aW9uIGNvZGUJCSMKKyMJX3JlYWxfdW5sb2NrX3BhZ2UoKSAtICJjYWxsb3V0IiB0byB1bmxvY2sgcGFnZQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjIF9jb21wYW5kc2V0MigpOgkJCQkJCQkjCisjCWQwID0gaW5zdHJ1Y3Rpb24gZXh0ZW5zaW9uIHdvcmQJCQkJCSMKKyMJCQkJCQkJCQkjCisjIF9pc3BfY2FzMl9maW5pc2goKToJCQkJCQkJIworIwlzZWUgY2FzMiBjb3JlIGVtdWxhdGlvbiBjb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIyBfY29tcGFuZHNldDIoKToJCQkJCQkJIworIwlzZWUgY2FzMiBjb3JlIGVtdWxhdGlvbiBjb2RlCQkJCQkjCisjCQkJCQkJCQkJIworIyBfaXNwX2Nhc19maW5pc2goKToJCQkJCQkJIworIwlOb25lIChyZWdpc3RlciBmaWxlIG9yIG1lbXJveSBjaGFuZ2VkIGFzIGFwcHJvcHJpYXRlKQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMgY29tcGFuZHNldDIoKToJCQkJCQkJIworIwlEZWNvZGUgdGhlIGluc3RydWN0aW9uIGFuZCBmZXRjaCB0aGUgYXBwcm9wcmlhdGUgVXBkYXRlIGFuZAkjCisjIENvbXBhcmUgb3BlcmFuZHMuIFRoZW4gY2FsbCB0aGUgImNhbGxvdXQiIF9yZWFsX2xvY2tfcGFnZSgpIGZvciBlYWNoCSMKKyMgbWVtb3J5IG9wZXJhbmQgYWRkcmVzcyBzbyB0aGF0IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGNhbiBrZWVwIHRoZXNlCSMKKyMgcGFnZXMgZnJvbSBiZWluZyBwYWdlZCBvdXQuIElmIGVpdGhlciBfcmVhbF9sb2NrX3BhZ2UoKSBmYWlscywgZXhpdAkjCisjIHRocm91Z2ggX2Nhc190ZXJtaW5hdGUyKCkuIERvbid0IGZvcmdldCB0byB1bmxvY2sgdGhlIDFzdCBsb2NrZWQgcGFnZQkjCisjIHVzaW5nIF9yZWFsX3VubG9ja19wYWdlZCgpIGlmIHRoZSAybmQgbG9jay1wYWdlIGZhaWxzLgkJIworIyBGaW5hbGx5LCBicmFuY2ggdG8gdGhlIGNvcmUgY2FzMiBlbXVsYXRpb24gY29kZSBieSBjYWxsaW5nIHRoZQkjCisjICJjYWxsb3V0IiBfcmVhbF9jYXMyKCkuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgX2lzcF9jYXMyX2ZpbmlzaCgpOgkJCQkJCQkjCisjCVJlLXBlcmZvcm0gdGhlIGNvbXBhcmlzb24gc28gd2UgY2FuIGRldGVybWluZSB0aGUgY29uZGl0aW9uCSMKKyMgY29kZXMgd2hpY2ggd2VyZSB0b28gbXVjaCB0cm91YmxlIHRvIGtlZXAgYXJvdW5kIGR1cmluZyB0aGUgbG9ja2VkCSMKKyMgZW11bGF0aW9uLiBUaGVuIHVubG9jayBlYWNoIG9wZXJhbmRzIHBhZ2UgYnkgY2FsbGluZyB0aGUgImNhbGxvdXQiCSMKKyMgX3JlYWxfdW5sb2NrX3BhZ2UoKS4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc2V0IEFERFIxLAlFWENfVEVNUCsweGMKK3NldCBBRERSMiwJRVhDX1RFTVArMHgwCitzZXQgREMyLAlFWENfVEVNUCsweGEKK3NldCBEQzEsCUVYQ19URU1QKzB4OAorCisJZ2xvYmFsCQlfY29tcGFuZHNldDIKK19jb21wYW5kc2V0MjoKKwltb3YubAkJJWQwLEVYQ19URU1QKzB4NCglYTYpCQkjIHN0b3JlIGZvciBwb3NzaWJsZSByZXN0YXJ0CisJbW92LmwJCSVkMCwlZDEJCQkjIGV4dGVuc2lvbiB3b3JkIGluIGQwCisKKwlyb2wudwkJJjB4NCwlZDAKKwlhbmRpLncJCSYweGYsJWQwCQkjIGV4dHJhY3QgUm4yCisJbW92LmwJCShFWENfRFJFR1MsJWE2LCVkMC53KjQpLCVhMSAjIGZldGNoIEFERFIyCisJbW92LmwJCSVhMSxBRERSMiglYTYpCisKKwltb3YubAkJJWQxLCVkMAorCisJbHNyLncJCSYweDYsJWQxCisJYW5kaS53CQkmMHg3LCVkMQkJIyBleHRyYWN0IER1MgorCW1vdi5sCQkoRVhDX0RSRUdTLCVhNiwlZDEudyo0KSwlZDUgIyBmZXRjaCBVcGRhdGUyIE9wCisKKwlhbmRpLncJCSYweDcsJWQwCQkjIGV4dHJhY3QgRGMyCisJbW92LmwJCShFWENfRFJFR1MsJWE2LCVkMC53KjQpLCVkMyAjIGZldGNoIENvbXBhcmUyIE9wCisJbW92LncJCSVkMCxEQzIoJWE2KQorCisJbW92LncJCUVYQ19FWFRXT1JEKCVhNiksJWQwCisJbW92LmwJCSVkMCwlZDEKKworCXJvbC53CQkmMHg0LCVkMAorCWFuZGkudwkJJjB4ZiwlZDAJCSMgZXh0cmFjdCBSbjEKKwltb3YubAkJKEVYQ19EUkVHUywlYTYsJWQwLncqNCksJWEwICMgZmV0Y2ggQUREUjEKKwltb3YubAkJJWEwLEFERFIxKCVhNikKKworCW1vdi5sCQklZDEsJWQwCisKKwlsc3IudwkJJjB4NiwlZDEKKwlhbmRpLncJCSYweDcsJWQxCQkjIGV4dHJhY3QgRHUxCisJbW92LmwJCShFWENfRFJFR1MsJWE2LCVkMS53KjQpLCVkNCAjIGZldGNoIFVwZGF0ZTEgT3AKKworCWFuZGkudwkJJjB4NywlZDAJCSMgZXh0cmFjdCBEYzEKKwltb3YubAkJKEVYQ19EUkVHUywlYTYsJWQwLncqNCksJWQyICMgZmV0Y2ggQ29tcGFyZTEgT3AKKwltb3YudwkJJWQwLERDMSglYTYpCisKKwlidHN0CQkmMHgxLEVYQ19PUFdPUkQoJWE2KQkjIHdvcmQgb3IgbG9uZz8KKwlzbmUJCSVkNworCisJYnRzdAkJJjB4NSxFWENfSVNSKCVhNikJIyB1c2VyIG9yIHN1cGVydmlzb3I/CisJc25lCQklZDYKKworCW1vdi5sCQklYTAsJWEyCisJbW92LmwJCSVhMSwlYTMKKworCW1vdi5sCQklZDcsJWQxCQkJIyBwYXNzIHNpemUKKwltb3YubAkJJWQ2LCVkMAkJCSMgcGFzcyBtb2RlCisJYnNyLmwJCV9yZWFsX2xvY2tfcGFnZQkJIyBsb2NrIHBhZ2UKKwltb3YubAkJJWEyLCVhMAorCXRzdC5sCQklZDAJCQkjIGVycm9yPworCWJuZS5sCQlfY2FzX3Rlcm1pbmF0ZTIJCSMgeWVzCisKKwltb3YubAkJJWQ3LCVkMQkJCSMgcGFzcyBzaXplCisJbW92LmwJCSVkNiwlZDAJCQkjIHBhc3MgbW9kZQorCW1vdi5sCQklYTMsJWEwCQkJIyBwYXNzIGFkZHIKKwlic3IubAkJX3JlYWxfbG9ja19wYWdlCQkjIGxvY2sgcGFnZQorCW1vdi5sCQklYTMsJWEwCisJdHN0LmwJCSVkMAkJCSMgZXJyb3I/CisJYm5lLmIJCWNhc19wcmV0ZXJtCQkjIHllcworCisJbW92LmwJCSVhMiwlYTAKKwltb3YubAkJJWEzLCVhMQorCisJYnJhLmwJCV9yZWFsX2NhczIKKworIyBpZiB0aGUgMm5kIGxvY2sgYXR0ZW1wdCBmYWlscywgdGhlbiB3ZSBtdXN0IHN0aWxsIHVubG9jayB0aGUKKyMgZmlyc3QgcGFnZShzKS4KK2Nhc19wcmV0ZXJtOgorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgRlNMVworCW1vdi5sCQklZDcsJWQxCQkJIyBwYXNzIHNpemUKKwltb3YubAkJJWQ2LCVkMAkJCSMgcGFzcyBtb2RlCisJbW92LmwJCSVhMiwlYTAJCQkjIHBhc3MgQUREUjEKKwlic3IubAkJX3JlYWxfdW5sb2NrX3BhZ2UJIyB1bmxvY2sgZmlyc3QgcGFnZShzKQorCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgRlNMVworCW1vdi5sCQklYTMsJWEwCQkJIyBwYXNzIGZhaWxpbmcgYWRkcgorCWJyYS5sCQlfY2FzX3Rlcm1pbmF0ZTIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfaXNwX2NhczJfZmluaXNoCitfaXNwX2NhczJfZmluaXNoOgorCWJ0c3QJCSYweDEsRVhDX09QV09SRCglYTYpCisJYm5lLmIJCWNhczJfZmluaXNoX2wKKworCW1vdi53CQlFWENfQ0MoJWE2KSwlY2MJCSMgbG9hZCBvbGQgY2NvZGVzCisJY21wLncJCSVkMCwlZDIKKwlibmUuYgkJY2FzMl9maW5pc2hfd19zYXZlCisJY21wLncJCSVkMSwlZDMKK2NhczJfZmluaXNoX3dfc2F2ZToKKwltb3YudwkJJWNjLEVYQ19DQyglYTYpCQkjIHNhdmUgbmV3IGNjb2RlcworCisJdHN0LmIJCSVkNAkJCSMgdXBkYXRlIGNvbXBhcmUgcmVnPworCWJuZS5iCQljYXMyX2ZpbmlzaF93X2RvbmUJIyBubworCisJbW92LncJCURDMiglYTYpLCVkMwkJIyBmZXRjaCBEYzIKKwltb3YudwkJJWQxLCgyK0VYQ19EUkVHUywlYTYsJWQzLncqNCkgIyBzdG9yZSBuZXcgQ29tcGFyZTIgT3AKKworCW1vdi53CQlEQzEoJWE2KSwlZDIJCSMgZmV0Y2ggRGMxCisJbW92LncJCSVkMCwoMitFWENfRFJFR1MsJWE2LCVkMi53KjQpICMgc3RvcmUgbmV3IENvbXBhcmUxIE9wCisKK2NhczJfZmluaXNoX3dfZG9uZToKKwlidHN0CQkmMHg1LEVYQ19JU1IoJWE2KQorCXNuZQkJJWQyCisJbW92LmwJCSVkMiwlZDAJCQkjIHBhc3MgbW9kZQorCXNmCQklZDEJCQkjIHBhc3Mgc2l6ZQorCW1vdi5sCQlBRERSMSglYTYpLCVhMAkJIyBwYXNzIEFERFIxCisJYnNyLmwJCV9yZWFsX3VubG9ja19wYWdlCSMgdW5sb2NrIHBhZ2UKKworCW1vdi5sCQklZDIsJWQwCQkJIyBwYXNzIG1vZGUKKwlzZgkJJWQxCQkJIyBwYXNzIHNpemUKKwltb3YubAkJQUREUjIoJWE2KSwlYTAJCSMgcGFzcyBBRERSMgorCWJzci5sCQlfcmVhbF91bmxvY2tfcGFnZQkjIHVubG9jayBwYWdlCisJcnRzCisKK2NhczJfZmluaXNoX2w6CisJbW92LncJCUVYQ19DQyglYTYpLCVjYwkJIyBsb2FkIG9sZCBjY29kZXMKKwljbXAubAkJJWQwLCVkMgorCWJuZS5iCQljYXMyX2ZpbmlzaF9sX3NhdmUKKwljbXAubAkJJWQxLCVkMworY2FzMl9maW5pc2hfbF9zYXZlOgorCW1vdi53CQklY2MsRVhDX0NDKCVhNikJCSMgc2F2ZSBuZXcgY2NvZGVzCisKKwl0c3QuYgkJJWQ0CQkJIyB1cGRhdGUgY29tcGFyZSByZWc/CisJYm5lLmIJCWNhczJfZmluaXNoX2xfZG9uZQkjIG5vCisKKwltb3YudwkJREMyKCVhNiksJWQzCQkjIGZldGNoIERjMgorCW1vdi5sCQklZDEsKEVYQ19EUkVHUywlYTYsJWQzLncqNCkgIyBzdG9yZSBuZXcgQ29tcGFyZTIgT3AKKworCW1vdi53CQlEQzEoJWE2KSwlZDIJCSMgZmV0Y2ggRGMxCisJbW92LmwJCSVkMCwoRVhDX0RSRUdTLCVhNiwlZDIudyo0KSAjIHN0b3JlIG5ldyBDb21wYXJlMSBPcAorCitjYXMyX2ZpbmlzaF9sX2RvbmU6CisJYnRzdAkJJjB4NSxFWENfSVNSKCVhNikKKwlzbmUJCSVkMgorCW1vdi5sCQklZDIsJWQwCQkJIyBwYXNzIG1vZGUKKwlzdAkJJWQxCQkJIyBwYXNzIHNpemUKKwltb3YubAkJQUREUjEoJWE2KSwlYTAJCSMgcGFzcyBBRERSMQorCWJzci5sCQlfcmVhbF91bmxvY2tfcGFnZQkjIHVubG9jayBwYWdlCisKKwltb3YubAkJJWQyLCVkMAkJCSMgcGFzcyBtb2RlCisJc3QJCSVkMQkJCSMgcGFzcyBzaXplCisJbW92LmwJCUFERFIyKCVhNiksJWEwCQkjIHBhc3MgQUREUjIKKwlic3IubAkJX3JlYWxfdW5sb2NrX3BhZ2UJIyB1bmxvY2sgcGFnZQorCXJ0cworCisjIyMjIyMjIworCWdsb2JhbAkJY3JfY2FzMgorY3JfY2FzMjoKKwltb3YubAkJRVhDX1RFTVArMHg0KCVhNiksJWQwCisJYnJhLncJCV9jb21wYW5kc2V0MgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9jb21wYW5kc2V0KCk6IHJvdXRpbmUgdG8gZW11bGF0ZSBjYXMgdy8gbWlzYWxpZ25lZCA8ZWE+CSMKKyMJCSAgICAgICAoaW50ZXJuYWwgdG8gcGFja2FnZSkJCQkJIworIwlfaXNwX2Nhc19maW5pc2goKTogcm91dGluZSBjYWxsZWQgd2hlbiBjYXMgZW11bGF0aW9uIGNvbXBsZXRlcwkjCisjCQkJICAgKGV4dGVybmFsIGFuZCBpbnRlcm5hbCB0byBwYWNrYWdlKQkJIworIwlfaXNwX2Nhc19yZXN0YXJ0KCk6IHJlc3RhcnQgY2FzIGVtdWxhdGlvbiBhZnRlciBhIGZhdWx0CQkjCisjCQkJICAgIChleHRlcm5hbCB0byBwYWNrYWdlKQkJCSMKKyMJX2lzcF9jYXNfdGVybWluYXRlKCk6IGNyZWF0ZSBhY2Nlc3MgZXJyb3Igc3RhY2sgZnJhbWUgb24gZmF1bHQJIworIwkJCSAgICAgIChleHRlcm5hbCBhbmQgaW50ZXJuYWwgdG8gcGFja2FnZSkJIworIwlfaXNwX2Nhc19pbnJhbmdlKCk6IGNoZWNrcyB3aGV0aGVyIGluc3RyIGFkZGVzcyBpcyB3aXRoaW4gcmFuZ2UJIworIwkJCSAgICBvZiBjb3JlIGNhcy9jYXMyZW11bGF0aW9uIGNvZGUJCSMKKyMJCQkgICAgKGV4dGVybmFsIHRvIHBhY2thZ2UpCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2NhbGNfZWEoKTogY2FsY3VsYXRlIGVmZmVjdGl2ZSBhZGRyZXNzCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjIGNvbXBhbmRzZXQoKToJCQkJCQkJCSMKKyMJbm9uZQkJCQkJCQkJIworIyBfaXNwX2Nhc19yZXN0YXJ0KCk6CQkJCQkJCSMKKyMJZDYgPSBwcmV2aW91cyBzZmMvZGZjCQkJCQkJIworIyBfaXNwX2Nhc19maW5pc2goKToJCQkJCQkJIworIyBfaXNwX2Nhc190ZXJtaW5hdGUoKToJCQkJCQkJIworIwlhMCA9IGZhaWxpbmcgYWRkcmVzcwkJCQkJCSMKKyMJZDAgPSBGU0xXCQkJCQkJCSMKKyMJZDYgPSBwcmV2aW91cyBzZmMvZGZjCQkJCQkJIworIyBfaXNwX2Nhc19pbnJhbmdlKCk6CQkJCQkJCSMKKyMJYTAgPSBpbnN0cnVjdGlvbiBhZGRyZXNzIHRvIGJlIGNoZWNrZWQJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMgY29tcGFuZHNldCgpOgkJCQkJCQkJIworIwkJbm9uZQkJCQkJCQkjCisjIF9pc3BfY2FzX3Jlc3RhcnQoKToJCQkJCQkJIworIwlhMCA9IGVmZmVjdGl2ZSBhZGRyZXNzCQkJCQkJIworIwlkNyA9IHdvcmQgb3IgbG9uZ3dvcmQgZmxhZwkJCQkJIworIyBfaXNwX2Nhc19maW5pc2goKToJCQkJCQkJIworIwlhMCA9IGVmZmVjdGl2ZSBhZGRyZXNzCQkJCQkJIworIyBfaXNwX2Nhc190ZXJtaW5hdGUoKToJCQkJCQkJIworIwlpbml0aWFsIHJlZ2lzdGVyIHNldCBiZWZvcmUgZW11bGF0aW9uIGV4Y2VwdGlvbgkJCSMKKyMgX2lzcF9jYXNfaW5yYW5nZSgpOgkJCQkJCQkjCisjCWQwID0gMCA9PiBpbiByYW5nZTsgLTEgPT4gb3V0IG9mIHJhbmdlCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCQkJCQkJCQkJIworIyBjb21wYW5kc2V0KCk6CQkJCQkJCQkjCisjCUZpcnN0LCBjYWxjdWxhdGUgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzLiBUaGVuLCBkZWNvZGUgdGhlCSMKKyMgaW5zdHJ1Y3Rpb24gd29yZCBhbmQgZmV0Y2ggdGhlICJjb21wYXJlIiAoREMpIGFuZCAidXBkYXRlIiAoRHUpCSMKKyMgb3BlcmFuZHMuCQkJCQkJCQkjCisjCU5leHQsIGNhbGwgdGhlIGV4dGVybmFsIHJvdXRpbmUgX3JlYWxfbG9ja19wYWdlKCkgc28gdGhhdCB0aGUJIworIyBvcGVyYXRpbmcgc3lzdGVtIGNhbiBrZWVwIHRoaXMgcGFnZSBmcm9tIGJlaW5nIHBhZ2VkIG91dCB3aGlsZSB3ZSdyZQkjCisjIGluIHRoaXMgcm91dGluZS4gSWYgdGhpcyBjYWxsIGZhaWxzLCBqdW1wIHRvIF9jYXNfdGVybWluYXRlMigpLgkjCisjCVRoZSByb3V0aW5lIHRoZW4gYnJhbmNoZXMgdG8gX3JlYWxfY2FzKCkuIFRoaXMgZXh0ZXJuYWwgcm91dGluZQkjCisjIHRoYXQgYWN0dWFsbHkgZW11bGF0ZXMgY2FzIGNhbiBiZSBzdXBwbGllZCBieSB0aGUgZXh0ZXJuYWwgb3Mgb3IJIworIyBtYWRlIHRvIHBvaW50IGRpcmVjdGx5IGJhY2sgaW50byB0aGUgMDYwSVNQIHdoaWNoIGhhcyBhIHJvdXRpbmUgZm9yCSMKKyMgdGhpcyBwdXJwb3NlLgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgX2lzcF9jYXNfZmluaXNoKCk6CQkJCQkJCSMKKyMJRWl0aGVyIHdheSwgYWZ0ZXIgZW11bGF0aW9uLCB0aGUgcGFja2FnZSBpcyByZS1lbnRlcmVkIGF0CSMKKyMgX2lzcF9jYXNfZmluaXNoKCkuIFRoaXMgcm91dGluZSByZS1jb21wYXJlcyB0aGUgb3BlcmFuZHMgaW4gb3JkZXIgdG8JIworIyBzZXQgdGhlIGNvbmRpdGlvbiBjb2Rlcy4gRmluYWxseSwgdGhlc2Ugcm91dGluZXMgd2lsbCBjYWxsCQkjCisjIF9yZWFsX3VubG9ja19wYWdlKCkgaW4gb3JkZXIgdG8gdW5sb2NrIHRoZSBwYWdlcyB0aGF0IHdlcmUgcHJldmlvdXNseQkjCisjIGxvY2tlZC4JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIF9pc3BfY2FzX3Jlc3RhcnQoKToJCQkJCQkJIworIwlUaGlzIHJvdXRpbmUgY2FuIGJlIGVudGVyZWQgZnJvbSBhbiBhY2Nlc3MgZXJyb3IgaGFuZGxlciB3aGVyZQkjCisjIHRoZSBlbXVsYXRpb24gc2VxdWVuY2Ugc2hvdWxkIGJlIHJlLXN0YXJ0ZWQgZnJvbSB0aGUgYmVnaW5uaW5nLgkjCisjCQkJCQkJCQkJIworIyBfaXNwX2Nhc190ZXJtaW5hdGUoKToJCQkJCQkJIworIwlUaGlzIHJvdXRpbmUgY2FuIGJlIGVudGVyZWQgZnJvbSBhbiBhY2Nlc3MgZXJyb3IgaGFuZGxlciB3aGVyZQkjCisjIGFuIGVtdWxhdGlvbiBvcGVyYW5kIGFjY2VzcyBmYWlsZWQgYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdvdWxkCSMKKyMgbGlrZSBhbiBhY2Nlc3MgZXJyb3Igc3RhY2sgZnJhbWUgY3JlYXRlZCBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50CSMKKyMgdW5pbXBsZW1lbnRlZCBpbnRlZ2VyIGluc3RydWN0aW9uIGZyYW1lLgkJCQkjCisjCUFsc28sIHRoZSBwYWNrYWdlIGVudGVycyBoZXJlIGlmIGEgY2FsbCB0byBfcmVhbF9sb2NrX3BhZ2UoKQkjCisjIGZhaWxzLgkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgX2lzcF9jYXNfaW5yYW5nZSgpOgkJCQkJCQkjCisjCUNoZWNrcyB0byBzZWUgd2hldGhlciB0aGUgaW5zdHJ1Y3Rpb24gYWRkcmVzcyBwYXNzZWQgdG8gaXQgaW4JIworIyBhMCBpcyB3aXRoaW4gdGhlIHNvZnR3YXJlIHBhY2thZ2UgY2FzL2NhczIgZW11bGF0aW9uIHJvdXRpbmVzLiBUaGlzCSMKKyMgY2FuIGJlIGhlbHBmdWwgZm9yIGFuIG9wZXJhdGluZyBzeXN0ZW0gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gYWNjZXNzCSMKKyMgZXJyb3IgZHVyaW5nIGVtdWxhdGlvbiB3YXMgZHVlIHRvIGEgY2FzL2NhczIgZW11bGF0aW9uIGFjY2Vzcy4JIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc2V0IERDLAkJRVhDX1RFTVArMHg4CitzZXQgQUREUiwJRVhDX1RFTVArMHg0CisKKwlnbG9iYWwJCV9jb21wYW5kc2V0CitfY29tcGFuZHNldDoKKwlidHN0CQkmMHgxLEVYQ19PUFdPUkQoJWE2KQkjIHdvcmQgb3IgbG9uZyBvcGVyYXRpb24/CisJYm5lLmIJCWNvbXBhbmRzZXRsCQkjIGxvbmcKKworY29tcGFuZHNldHc6CisJbW92cS5sCQkmMHgyLCVkMAkJIyBzaXplID0gMiBieXRlcworCWJzci5sCQlfY2FsY19lYQkJIyBhMCA9IGNhbGN1bGF0ZWQgPGVhPgorCW1vdi5sCQklYTAsQUREUiglYTYpCQkjIHNhdmUgPGVhPiBmb3IgcG9zc2libGUgcmVzdGFydAorCXNmCQklZDcJCQkjIGNsZWFyIGQ3IGZvciB3b3JkIHNpemUKKwlicmEuYgkJY29tcGFuZHNldGZldGNoCisKK2NvbXBhbmRzZXRsOgorCW1vdnEubAkJJjB4NCwlZDAJCSMgc2l6ZSA9IDQgYnl0ZXMKKwlic3IubAkJX2NhbGNfZWEJCSMgYTAgPSBjYWxjdWxhdGVkIDxlYT4KKwltb3YubAkJJWEwLEFERFIoJWE2KQkJIyBzYXZlIDxlYT4gZm9yIHBvc3NpYmxlIHJlc3RhcnQKKwlzdAkJJWQ3CQkJIyBzZXQgZDcgZm9yIGxvbmd3b3JkIHNpemUKKworY29tcGFuZHNldGZldGNoOgorCW1vdi53CQlFWENfRVhUV09SRCglYTYpLCVkMAkjIGZldGNoIGNhcyBleHRlbnNpb24gd29yZAorCW1vdi5sCQklZDAsJWQxCQkJIyBtYWtlIGEgY29weQorCisJbHNyLncJCSYweDYsJWQwCisJYW5kaS53CQkmMHg3LCVkMAkJIyBleHRyYWN0IER1CisJbW92LmwJCShFWENfRFJFR1MsJWE2LCVkMC53KjQpLCVkMiAjIGdldCB1cGRhdGUgb3BlcmFuZAorCisJYW5kaS53CQkmMHg3LCVkMQkJIyBleHRyYWN0IERjCisJbW92LmwJCShFWENfRFJFR1MsJWE2LCVkMS53KjQpLCVkNCAjIGdldCBjb21wYXJlIG9wZXJhbmQKKwltb3YudwkJJWQxLERDKCVhNikJCSMgc2F2ZSBEYworCisJYnRzdAkJJjB4NSxFWENfSVNSKCVhNikJIyB3aGljaCBtb2RlIGZvciBleGNlcHRpb24/CisJc25lCQklZDYJCQkjIHNldCBvbiBzdXBlcnZpc29yIG1vZGUKKworCW1vdi5sCQklYTAsJWEyCQkJIyBzYXZlIHRlbXBvcmFyaWx5CisJbW92LmwJCSVkNywlZDEJCQkjIHBhc3Mgc2l6ZQorCW1vdi5sCQklZDYsJWQwCQkJIyBwYXNzIG1vZGUKKwlic3IubAkJX3JlYWxfbG9ja19wYWdlCQkjIGxvY2sgcGFnZQorCXRzdC5sCQklZDAJCQkjIGRpZCBlcnJvciBvY2N1cj8KKwlibmUudwkJX2Nhc190ZXJtaW5hdGUyCQkjIHllcywgY2xlYW4gdXAgdGhlIG1lc3MKKwltb3YubAkJJWEyLCVhMAkJCSMgcGFzcyBhZGRyIGluIGEwCisKKwlicmEubAkJX3JlYWxfY2FzCisKKyMjIyMjIyMjCisJZ2xvYmFsCQlfaXNwX2Nhc19maW5pc2gKK19pc3BfY2FzX2ZpbmlzaDoKKwlidHN0CQkmMHgxLEVYQ19PUFdPUkQoJWE2KQorCWJuZS5iCQljYXNfZmluaXNoX2wKKworIyBqdXN0IGRvIHRoZSBjb21wYXJlIGFnYWluIHNpbmNlIGl0J3MgZmFzdGVyIHRoYW4gc2F2aW5nIHRoZSBjY29kZXMKKyMgZnJvbSB0aGUgbG9ja2VkIHJvdXRpbmUuLi4KK2Nhc19maW5pc2hfdzoKKwltb3YudwkJRVhDX0NDKCVhNiksJWNjCQkjIHJlc3RvcmUgY2MKKwljbXAudwkJJWQwLCVkNAkJCSMgZG8gd29yZCBjb21wYXJlCisJbW92LncJCSVjYyxFWENfQ0MoJWE2KQkJIyBzYXZlIGNjCisKKwl0c3QuYgkJJWQxCQkJIyB1cGRhdGUgY29tcGFyZSByZWc/CisJYm5lLmIJCWNhc19maW5pc2hfd19kb25lCSMgbm8KKworCW1vdi53CQlEQyglYTYpLCVkMworCW1vdi53CQklZDAsKEVYQ19EUkVHUysyLCVhNiwlZDMudyo0KSAjIERjID0gZGVzdGluYXRpb24KKworY2FzX2ZpbmlzaF93X2RvbmU6CisJbW92LmwJCUFERFIoJWE2KSwlYTAJCSMgcGFzcyBhZGRyCisJc2YJCSVkMQkJCSMgcGFzcyBzaXplCisJYnRzdAkJJjB4NSxFWENfSVNSKCVhNikKKwlzbmUJCSVkMAkJCSMgcGFzcyBtb2RlCisJYnNyLmwJCV9yZWFsX3VubG9ja19wYWdlCSMgdW5sb2NrIHBhZ2UKKwlydHMKKworIyBqdXN0IGRvIHRoZSBjb21wYXJlIGFnYWluIHNpbmNlIGl0J3MgZmFzdGVyIHRoYW4gc2F2aW5nIHRoZSBjY29kZXMKKyMgZnJvbSB0aGUgbG9ja2VkIHJvdXRpbmUuLi4KK2Nhc19maW5pc2hfbDoKKwltb3YudwkJRVhDX0NDKCVhNiksJWNjCQkjIHJlc3RvcmUgY2MKKwljbXAubAkJJWQwLCVkNAkJCSMgZG8gbG9uZ3dvcmQgY29tcGFyZQorCW1vdi53CQklY2MsRVhDX0NDKCVhNikJCSMgc2F2ZSBjYworCisJdHN0LmIJCSVkMQkJCSMgdXBkYXRlIGNvbXBhcmUgcmVnPworCWJuZS5iCQljYXNfZmluaXNoX2xfZG9uZQkjIG5vCisKKwltb3YudwkJREMoJWE2KSwlZDMKKwltb3YubAkJJWQwLChFWENfRFJFR1MsJWE2LCVkMy53KjQpICMgRGMgPSBkZXN0aW5hdGlvbgorCitjYXNfZmluaXNoX2xfZG9uZToKKwltb3YubAkJQUREUiglYTYpLCVhMAkJIyBwYXNzIGFkZHIKKwlzdAkJJWQxCQkJIyBwYXNzIHNpemUKKwlidHN0CQkmMHg1LEVYQ19JU1IoJWE2KQorCXNuZQkJJWQwCQkJIyBwYXNzIG1vZGUKKwlic3IubAkJX3JlYWxfdW5sb2NrX3BhZ2UJIyB1bmxvY2sgcGFnZQorCXJ0cworCisjIyMjIyMjIworCisJZ2xvYmFsCQlfaXNwX2Nhc19yZXN0YXJ0CitfaXNwX2Nhc19yZXN0YXJ0OgorCW1vdi5sCQklZDYsJXNmYwkJIyByZXN0b3JlIHByZXZpb3VzIHNmYworCW1vdi5sCQklZDYsJWRmYwkJIyByZXN0b3JlIHByZXZpb3VzIGRmYworCisJY21waS5iCQlFWENfT1BXT1JEKzEoJWE2KSwmMHhmYwkjIGNhcyBvciBjYXMyPworCWJlcS5sCQljcl9jYXMyCQkJIyBjYXMyCitjcl9jYXM6CisJbW92LmwJCUFERFIoJWE2KSwlYTAJCSMgbG9hZCA8ZWE+CisJYnRzdAkJJjB4MSxFWENfT1BXT1JEKCVhNikJIyB3b3JkIG9yIGxvbmcgb3BlcmF0aW9uPworCXNuZQkJJWQ3CQkJIyBzZXQgZDcgYWNjb3JkaW5nbHkKKwlicmEudwkJY29tcGFuZHNldGZldGNoCisKKyMjIyMjIyMjCisKKyMgQXQgdGhpcyBzdGFnZSwgaXQgd291bGQgYmUgbmljZSBpZiBkMCBoZWxkIHRoZSBGU0xXLgorCWdsb2JhbAkJX2lzcF9jYXNfdGVybWluYXRlCitfaXNwX2Nhc190ZXJtaW5hdGU6CisJbW92LmwJCSVkNiwlc2ZjCQkjIHJlc3RvcmUgcHJldmlvdXMgc2ZjCisJbW92LmwJCSVkNiwlZGZjCQkjIHJlc3RvcmUgcHJldmlvdXMgZGZjCisKKwlnbG9iYWwJCV9jYXNfdGVybWluYXRlMgorX2Nhc190ZXJtaW5hdGUyOgorCW1vdi5sCQklYTAsJWEyCQkJIyBjb3B5IGZhaWxpbmcgYWRkciB0byBhMgorCisJbW92LmwJCSVkMCwtKCVzcCkKKwlic3IubAkJaXNwX3Jlc3RvcmUJCSMgcmVzdG9yZSBBbiAoaWYgKCkrIG9yIC0oKSkKKwltb3YubAkJKCVzcCkrLCVkMAorCisJYWRkcS5sCQkmMHg0LCVzcAkJIyByZW1vdmUgc3ViIHJldHVybiBhZGRyCisJc3VicS5sCQkmMHg4LCVzcAkJIyBtYWtlIHJvb20gZm9yIGJpZ2dlciBzdGFjaworCXN1YnEubAkJJjB4OCwlYTYJCSMgc2hpZnQgZnJhbWUgcHRyIGRvd24sIHRvbworCW1vdi5sCQkmMjYsJWQxCQkJIyB3YW50IHRvIG1vdmUgNTEgbG9uZ3dvcmRzCisJbGVhCQkweDgoJXNwKSwlYTAJCSMgZ2V0IGFkZHJlc3Mgb2Ygb2xkIHN0YWNrCisJbGVhCQkweDAoJXNwKSwlYTEJCSMgZ2V0IGFkZHJlc3Mgb2YgbmV3IHN0YWNrCitjYXNfdGVybV9jb250OgorCW1vdi5sCQkoJWEwKSssKCVhMSkrCQkjIG1vdmUgYSBsb25nd29yZAorCWRicmEudwkJJWQxLGNhc190ZXJtX2NvbnQJIyBrZWVwIGdvaW5nCisKKwltb3YudwkJJjB4NDAwOCxFWENfSVZPRkYoJWE2KQkjIHB1dCBuZXcgc3RrIGZtdCwgdm9mZgorCW1vdi5sCQklYTIsRVhDX0lWT0ZGKzB4MiglYTYpCSMgcHV0IGZhdWx0aW5nIGFkZHIgb24gc3RhY2sKKwltb3YubAkJJWQwLEVYQ19JVk9GRisweDYoJWE2KQkjIHB1dCBGU0xXIG9uIHN0YWNrCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgzZmZmCSMgcmVzdG9yZSB1c2VyIHJlZ3MKKwl1bmxrCQklYTYJCQkjIHVubGluayBzdGFjayBmcmFtZQorCWJyYS5sCQlfcmVhbF9hY2Nlc3MKKworIyMjIyMjIyMKKworCWdsb2JhbAkJX2lzcF9jYXNfaW5yYW5nZQorX2lzcF9jYXNfaW5yYW5nZToKKwljbHIubAkJJWQwCQkJIyBjbGVhciByZXR1cm4gcmVzdWx0CisJbGVhCQlfQ0FTSEkoJXBjKSwlYTEJCSMgbG9hZCBlbmQgb2YgQ0FTIGNvcmUgY29kZQorCWNtcC5sCQklYTEsJWEwCQkJIyBpcyBQQyBpbiByYW5nZT8KKwlibHQuYgkJY2luX25vCQkJIyBubworCWxlYQkJX0NBU0xPKCVwYyksJWExCQkjIGxvYWQgYmVnaW4gb2YgQ0FTIGNvcmUgY29kZQorCWNtcC5sCQklYTAsJWExCQkJIyBpcyBQQyBpbiByYW5nZT8KKwlibHQuYgkJY2luX25vCQkJIyBubworCXJ0cwkJCQkJIyB5ZXM7IHJldHVybiBkMCA9IDAKK2Npbl9ubzoKKwltb3YubAkJJi0weDEsJWQwCQkjIG91dCBvZiByYW5nZTsgcmV0dXJuIGQwID0gLTEKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaGlzIGlzIHRoZSBzdGFydCBvZiB0aGUgY2FzIGFuZCBjYXMyICJjb3JlIiBlbXVsYXRpb24gY29kZS4JIworIyBUaGlzIGlzIHRoZSBzZWN0aW9uIHRoYXQgbWF5IG5lZWQgdG8gYmUgcmVwbGFjZWQgYnkgdGhlIGhvc3QJIworIyBPUyBpZiBpdCBpcyB0b28gb3BlcmF0aW5nIHN5c3RlbS1zcGVjaWZpYy4JCQkjCisjIFBsZWFzZSByZWZlciB0byB0aGUgcGFja2FnZSBkb2N1bWVudGF0aW9uIHRvIHNlZSBob3cgdG8JIworIyAicmVwbGFjZSIgdGhpcyBzZWN0aW9uLCBpZiBuZWNlc3NhcnkuCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyAgICAgICAjIyMjIyMgICAgICAjIyAgICAgICMjIyMjIyAgICAgIyMjIworIyAgICAgICAjCSAgICMgICMgICAgICMgICAgICAgICAjICAgICMKKyMJIwkgICMjIyMjIyAgICAjIyMjIyMgICAgICAgICMKKyMJIwkgICMgICAgIyAgICAgICAgICMgICAgICAjCisjICAgICAgICMjIyMjIyAgICAjICAgICMgICAgIyMjIyMjICAgICMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9pc3BfY2FzMigpOiAiY29yZSIgZW11bGF0aW9uIGNvZGUgZm9yIHRoZSBjYXMyIGluc3RydWN0aW9uCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9pc3BfY2FzMl9maW5pc2goKSAtIG9ubHkgZXhpdCBwb2ludCBmb3IgdGhpcyBlbXVsYXRpb24gY29kZTsJIworIwkJCSAgICAgZG8gY2xlYW4tdXA7IGNhbGN1bGF0ZSBjY29kZXM7IHN0b3JlCSMKKyMJCQkgICAgIENvbXBhcmUgT3BzIGlmIGFwcHJvcHJpYXRlLgkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJKnNlZSBjaGFydCBiZWxvdyoJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkqc2VlIGNoYXJ0IGJlbG93KgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCSgxKSBNYWtlIHNldmVyYWwgY29waWVzIG9mIHRoZSBlZmZlY3RpdmUgYWRkcmVzcy4JCSMKKyMJKDIpIFNhdmUgY3VycmVudCBTUjsgVGhlbiBtYXNrIG9mZiBhbGwgbWFza2FibGUgaW50ZXJydXB0cy4JIworIwkoMykgU2F2ZSBjdXJyZW50IFNGQy9ERkMgKEFTU1VNRUQgVE8gQkUgRVFVQUwhISEpOyBUaGVuIHNldAkjCisjCSAgICBhY2NvcmRpbmcgdG8gd2hldGhlciBleGNlcHRpb24gb2NjdXJyZWQgaW4gdXNlciBvcgkJIworIwkgICAgc3VwZXJ2aXNvciBtb2RlLgkJCQkJCSMKKyMJKDQpIFVzZSAicGxwYXciIGluc3RydWN0aW9uIHRvIHByZS1sb2FkIEFUQyB3aXRoIGVmZmVjdGl2ZQkjCisjCSAgICBhZGRyZXNzIHBhZ2VzKHMpLiBUSElTIFNIT1VMRCBOT1QgRkFVTFQhISEgVGhlIHJlbGV2YW50CSMKKyMJICAgIHBhZ2Uocykgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIG1hZGUgcmVzaWRlbnQgcHJpb3IgdG8JIworIwkgICAgZW50ZXJpbmcgdGhpcyByb3V0aW5lLgkJCQkJIworIwkoNSkgUHVzaCB0aGUgb3BlcmFuZCBsaW5lcyBmcm9tIHRoZSBjYWNoZSB3LyAiY3B1c2hsIi4JCSMKKyMJICAgIEluIHRoZSA2ODA0MCwgdGhpcyB3YXMgZG9uZSB3aXRoaW4gdGhlIGxvY2tlZCByZWdpb24uIEluCSMKKyMJICAgIHRoZSA2ODA2MCwgaXQgaXMgZG9uZSBvdXRzaWRlIG9mIHRoZSBsb2NrZWQgcmVnaW9uLgkJIworIwkoNikgVXNlICJwbHBhciIgaW5zdHJ1Y3Rpb24gdG8gZG8gYSByZS1sb2FkIG9mIEFUQyBlbnRyaWVzIGZvcgkjCisjCSAgICBBRERSMSBzaW5jZSBBRERSMiBlbnRyaWVzIG1heSBoYXZlIHB1c2hlZCBBRERSMSBvdXQgb2YgdGhlCSMKKyMJICAgIEFUQy4JCQkJCQkJIworIwkoNykgUHJlLWZldGNoIHRoZSBjb3JlIGVtdWxhdGlvbiBpbnN0cnVjdGlvbnMgYnkgZXhlY3V0aW5nCSMKKyMJICAgIG9uZSBicmFuY2ggd2l0aGluIGVhY2ggcGh5c2ljYWwgbGluZSAoMTYgYnl0ZXMpIG9mIHRoZSBjb2RlCSMKKyMJICAgIGJlZm9yZSBhY3R1YWxseSBleGVjdXRpbmcgdGhlIGNvZGUuCQkJCSMKKyMJKDgpIExvYWQgdGhlIEJVU0NSIHcvIHRoZSBidXMgbG9jayB2YWx1ZS4JCQkjCisjCSg5KSBGZXRjaCB0aGUgc291cmNlIG9wZXJhbmRzIHVzaW5nICJtb3ZlcyIuCQkJIworIwkoMTApRG8gdGhlIGNvbXBhcmVzLiBJZiBib3RoIGVxdWFsLCBnbyB0byBzdGVwICgxMykuCQkjCisjCSgxMSlVbmVxdWFsLiBObyB1cGRhdGUgb2NjdXJzLiBCdXQsIHdlIGRvIHdyaXRlIHRoZSBEU1QxIG9wCSMKKyMJICAgIGJhY2sgdG8gaXRzZWxmIChhcyB3LyB0aGUgJzA0MCkgc28gd2UgY2FuIGdyYWNlZnVsbHkgdW5sb2NrCSMKKyMJICAgIHRoZSBidXMgKGFuZCBhc3NlcnQgTE9DS0UqKSB1c2luZyBCVVNDUiBhbmQgdGhlIGZpbmFsIG1vdmUuCSMKKyMJKDEyKUV4aXQuCQkJCQkJCSMKKyMJKDEzKVdyaXRlIHVwZGF0ZSBvcGVyYW5kIHRvIHRoZSBEU1QgbG9jYXRpb25zLiBVc2UgQlVTQ1IgdG8JIworIwkgICAgYXNzZXJ0IExPQ0tFKiBmb3IgdGhlIGZpbmFsIHdyaXRlIG9wZXJhdGlvbi4JCSMKKyMJKDE0KUV4aXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCVRoZSBhbGdvcml0aG0gaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQgc2xpZ2h0bHkgZGlmZmVyZW50bHkJIworIyBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIG9wZXJhdGlvbiBhbmQgdGhlIG1pc2FsaWdubWVudCBvZiB0aGUJIworIyBvcGVyYW5kcy4gQSBtaXNhbGlnbmVkIG9wZXJhbmQgbXVzdCBiZSB3cml0dGVuIGluIGFsaWduZWQgY2h1bmtzIG9yCSMKKyMgZWxzZSB0aGUgQlVTQ1IgcmVnaXN0ZXIgY29udHJvbCBnZXRzIGNvbmZ1c2VkLgkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRISVMgSVMgVEhFIFNUQVRFIE9GIFRIRSBJTlRFR0VSIFJFR0lTVEVSIEZJTEUgVVBPTgkJIworIyBFTlRFUklORyBfaXNwX2NhczIoKS4JCQkJCQkjCisjCQkJCQkJCQkjCisjIEQwID0geHh4eHh4eHgJCQkJCQkJIworIyBEMSA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgRDIgPSBjbXAgb3BlcmFuZCAxCQkJCQkJIworIyBEMyA9IGNtcCBvcGVyYW5kIDIJCQkJCQkjCisjIEQ0ID0gdXBkYXRlIG9wZXIgMQkJCQkJCSMKKyMgRDUgPSB1cGRhdGUgb3BlciAyCQkJCQkJIworIyBENiA9ICd4eHh4eHhmZiBpZiBzdXBlcnZpc29yIG1vZGU7ICd4eHh4eHgwMCBpZiB1c2VyIG1vZGUJIworIyBENyA9ICd4eHh4eHhmZiBpZiBsb25nd29yZCBvcGVyYXRpb247ICd4eHh4eHgwMCBpZiB3b3JkCSMKKyMgQTAgPSBBRERSMQkJCQkJCQkjCisjIEExID0gQUREUjIJCQkJCQkJIworIyBBMiA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTMgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEE0ID0geHh4eHh4eHgJCQkJCQkJIworIyBBNSA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTYgPSBmcmFtZSBwb2ludGVyCQkJCQkJIworIyBBNyA9IHN0YWNrIHBvaW50ZXIJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCWFsaWduCQkweDEwMDAKKyMgYmVnaW5uaW5nIGxhYmVsIHVzZWQgYnkgX2lzcF9jYXNfaW5yYW5nZSgpCisJZ2xvYmFsCQlfQ0FTTE8KK19DQVNMTzoKKworCWdsb2JhbAkJX2lzcF9jYXMyCitfaXNwX2NhczI6CisJdHN0LmIJCSVkNgkJCSMgdXNlciBvciBzdXBlcnZpc29yIG1vZGU/CisJYm5lLmIJCWNhczJfc3VwZXJ2aXNvcgkJIyBzdXBlcnZpc29yCitjYXMyX3VzZXI6CisJbW92cS5sCQkmMHgxLCVkMAkJIyBsb2FkIHVzZXIgZGF0YSBmYworCWJyYS5iCQljYXMyX2NvbnQKK2NhczJfc3VwZXJ2aXNvcjoKKwltb3ZxLmwJCSYweDUsJWQwCQkjIGxvYWQgc3VwZXJ2aXNvciBkYXRhIGZjCitjYXMyX2NvbnQ6CisJdHN0LmIJCSVkNwkJCSMgd29yZCBvciBsb25nd29yZD8KKwliZXEudwkJY2FzMncJCQkjIHdvcmQKKworIyMjIworY2FzMmw6CisJbW92LmwJCSVhMCwlYTIJCQkjIGNvcHkgQUREUjEKKwltb3YubAkJJWExLCVhMwkJCSMgY29weSBBRERSMgorCW1vdi5sCQklYTAsJWE0CQkJIyBjb3B5IEFERFIxCisJbW92LmwJCSVhMSwlYTUJCQkjIGNvcHkgQUREUjIKKworCWFkZHEubAkJJjB4MywlYTQJCSMgQUREUjErMworCWFkZHEubAkJJjB4MywlYTUJCSMgQUREUjIrMworCW1vdi5sCQklYTIsJWQxCQkJIyBBRERSMQorCisjIG1hc2sgaW50ZXJydXB0cyBsZXZlbHMgMC02LiBzYXZlIG9sZCBtYXNrIHZhbHVlLgorCW1vdi53CQklc3IsJWQ3CQkJIyBzYXZlIGN1cnJlbnQgU1IKKwlvcmkudwkJJjB4MDcwMCwlc3IJCSMgaW5oaWJpdCBpbnRlcnJ1cHRzCisKKyMgbG9hZCB0aGUgU0ZDIGFuZCBERkMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgbW9kZS4KKwltb3ZjCQklc2ZjLCVkNgkJIyBzYXZlIG9sZCBTRkMvREZDCisJbW92YwkJJWQwLCVzZmMJCSMgc3RvcmUgbmV3IFNGQworCW1vdmMJCSVkMCwlZGZjCQkjIHN0b3JlIG5ldyBERkMKKworIyBwcmUtbG9hZCB0aGUgb3BlcmFuZCBBVEMuIG5vIHBhZ2UgZmF1bHRzIHNob3VsZCBvY2N1ciBoZXJlIGJlY2F1c2UKKyMgX3JlYWxfbG9ja19wYWdlKCkgc2hvdWxkIGhhdmUgdGFrZW4gY2FyZSBvZiB0aGlzLgorCXBscGF3CQkoJWEyKQkJCSMgbG9hZCBhdGMgZm9yIEFERFIxCisJcGxwYXcJCSglYTQpCQkJIyBsb2FkIGF0YyBmb3IgQUREUjErMworCXBscGF3CQkoJWEzKQkJCSMgbG9hZCBhdGMgZm9yIEFERFIyCisJcGxwYXcJCSglYTUpCQkJIyBsb2FkIGF0YyBmb3IgQUREUjIrMworCisjIHB1c2ggdGhlIG9wZXJhbmQgbGluZXMgZnJvbSB0aGUgY2FjaGUgaWYgdGhleSBleGlzdC4KKwljcHVzaGwJCSVkYywoJWEyKQkJIyBwdXNoIGxpbmUgZm9yIEFERFIxCisJY3B1c2hsCQklZGMsKCVhNCkJCSMgcHVzaCBsaW5lIGZvciBBRERSMSszCisJY3B1c2hsCQklZGMsKCVhMykJCSMgcHVzaCBsaW5lIGZvciBBRERSMgorCWNwdXNobAkJJWRjLCglYTUpCQkjIHB1c2ggbGluZSBmb3IgQUREUjIrMgorCisJbW92LmwJCSVkMSwlYTIJCQkjIEFERFIxCisJYWRkcS5sCQkmMHgzLCVkMQorCW1vdi5sCQklZDEsJWE0CQkJIyBBRERSMSszCisjIGlmIEFERFIxIHdhcyBBVEMgcmVzaWRlbnQgYmVmb3JlIHRoZSBhYm92ZSAicGxwYXciIGFuZCB3YXMgZXhlY3V0ZWQKKyMgYW5kIGl0IHdhcyB0aGUgbmV4dCBlbnRyeSBzY2hlZHVsZWQgZm9yIHJlcGxhY2VtZW50IGFuZCBBRERSMgorIyBzaGFyZXMgdGhlIHNhbWUgc2V0LCB0aGVuIHRoZSAicGxwYXciIGZvciBBRERSMiBjYW4gcHVzaCB0aGUgQUREUjEKKyMgZW50cmllcyBmcm9tIHRoZSBBVEMuIHNvLCB3ZSBkbyBhIHNlY29uZCBzZXQgb2YgInBscGEicy4KKwlwbHBhcgkJKCVhMikJCQkjIGxvYWQgYXRjIGZvciBBRERSMQorCXBscGFyCQkoJWE0KQkJCSMgbG9hZCBhdGMgZm9yIEFERFIxKzMKKworIyBsb2FkIHRoZSBCVVNDUiB2YWx1ZXMuCisJbW92LmwJCSYweDgwMDAwMDAwLCVhMgkJIyBhc3NlcnQgTE9DSyogYnVzY3IgdmFsdWUKKwltb3YubAkJJjB4YTAwMDAwMDAsJWEzCQkjIGFzc2VydCBMT0NLRSogYnVzY3IgdmFsdWUKKwltb3YubAkJJjB4MDAwMDAwMDAsJWE0CQkjIGJ1c2NyIHVubG9jayB2YWx1ZQorCisjIHRoZXJlIGFyZSB0aHJlZSBwb3NzaWJsZSBtaXMtYWxpZ25lZCBjYXNlcyBmb3IgbG9uZ3dvcmQgY2FzLiB0aGV5CisjIGFyZSBzZXBhcmF0ZWQgYmVjYXVzZSB0aGUgZmluYWwgd3JpdGUgd2hpY2ggYXNzZXJ0cyBMT0NLRSogbXVzdAorIyBiZSBhbGlnbmVkLgorCW1vdi5sCQklYTAsJWQwCQkJIyBpcyBBRERSMSBtaXNhbGlnbmVkPworCWFuZGkuYgkJJjB4MywlZDAKKwliZXEuYgkJQ0FTMkxfRU5URVIJCSMgbm8KKwljbXBpLmIJCSVkMCwmMHgyCisJYmVxLncJCUNBUzJMMl9FTlRFUgkJIyB5ZXM7IHdvcmQgbWlzYWxpZ25lZAorCWJyYS53CQlDQVMyTDNfRU5URVIJCSMgeWVzOyBieXRlIG1pc2FsaWduZWQKKworIworIyBEMCA9IGRzdCBvcGVyYW5kIDEgPC0KKyMgRDEgPSBkc3Qgb3BlcmFuZCAyIDwtCisjIEQyID0gY21wIG9wZXJhbmQgMQorIyBEMyA9IGNtcCBvcGVyYW5kIDIKKyMgRDQgPSB1cGRhdGUgb3BlciAxCisjIEQ1ID0gdXBkYXRlIG9wZXIgMgorIyBENiA9IG9sZCBTRkMvREZDCisjIEQ3ID0gb2xkIFNSCisjIEEwID0gQUREUjEKKyMgQTEgPSBBRERSMgorIyBBMiA9IGJ1cyBMT0NLKiAgdmFsdWUKKyMgQTMgPSBidXMgTE9DS0UqIHZhbHVlCisjIEE0ID0gYnVzIHVubG9jayB2YWx1ZQorIyBBNSA9IHh4eHh4eHh4CisjCisJYWxpZ24JCTB4MTAKK0NBUzJMX1NUQVJUOgorCW1vdmMJCSVhMiwlYnVzY3IJCSMgYXNzZXJ0IExPQ0sqCisJbW92cy5sCQkoJWExKSwlZDEJCSMgZmV0Y2ggRGVzdDJbMzE6MF0KKwltb3ZzLmwJCSglYTApLCVkMAkJIyBmZXRjaCBEZXN0MVszMTowXQorCWJyYS5iCQlDQVMyTF9DT05UCitDQVMyTF9FTlRFUjoKKwlicmEuYgkJfisxNgorCitDQVMyTF9DT05UOgorCWNtcC5sCQklZDAsJWQyCQkJIyBEZXN0MSAtIENvbXBhcmUxCisJYm5lLmIJCUNBUzJMX05PVVBEQVRFCisJY21wLmwJCSVkMSwlZDMJCQkjIERlc3QyIC0gQ29tcGFyZTIKKwlibmUuYgkJQ0FTMkxfTk9VUERBVEUKKwltb3ZzLmwJCSVkNSwoJWExKQkJIyBVcGRhdGUyWzMxOjBdIC0+IERFU1QyCisJYnJhLmIJCUNBUzJMX1VQREFURQorCWJyYS5iCQl+KzE2CisKK0NBUzJMX1VQREFURToKKwltb3ZjCQklYTMsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKKwltb3ZzLmwJCSVkNCwoJWEwKQkJIyBVcGRhdGUxWzMxOjBdIC0+IERFU1QxCisJbW92YwkJJWE0LCVidXNjcgkJIyB1bmxvY2sgdGhlIGJ1cworCWJyYS5iCQljYXMybF91cGRhdGVfZG9uZQorCWJyYS5iCQl+KzE2CisKK0NBUzJMX05PVVBEQVRFOgorCW1vdmMJCSVhMywlYnVzY3IJCSMgYXNzZXJ0IExPQ0tFKgorCW1vdnMubAkJJWQwLCglYTApCQkjIERlc3QxWzMxOjBdIC0+IERFU1QxCisJbW92YwkJJWE0LCVidXNjcgkJIyB1bmxvY2sgdGhlIGJ1cworCWJyYS5iCQljYXMybF9ub3VwZGF0ZV9kb25lCisJYnJhLmIJCX4rMTYKKworQ0FTMkxfRklMTEVSOgorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCWJyYS5iCQlDQVMyTF9TVEFSVAorCisjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRISVMgTVVTVCBCRSBUSEUgU1RBVEUgT0YgVEhFIElOVEVHRVIgUkVHSVNURVIgRklMRSBVUE9OCSMKKyMgRU5URVJJTkcgX2lzcF9jYXMyKCkuCQkJCQkJIworIwkJCQkJCQkJIworIyBEMCA9IGRlc3RpbmF0aW9uWzMxOjBdIG9wZXJhbmQgMQkJCQkjCisjIEQxID0gZGVzdGluYXRpb25bMzE6MF0gb3BlcmFuZCAyCQkJCSMKKyMgRDIgPSBjbXBbMzE6MF0gb3BlcmFuZCAxCQkJCQkjCisjIEQzID0gY21wWzMxOjBdIG9wZXJhbmQgMgkJCQkJIworIyBENCA9ICd4eHh4eHgxMSAtPiBubyByZWcgdXBkYXRlOyAneHh4eHh4MDAgLT4gdXBkYXRlIHJlcXVpcmVkCSMKKyMgRDUgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEQ2ID0geHh4eHh4eHgJCQkJCQkJIworIyBENyA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTAgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEExID0geHh4eHh4eHgJCQkJCQkJIworIyBBMiA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTMgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEE0ID0geHh4eHh4eHgJCQkJCQkJIworIyBBNSA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTYgPSBmcmFtZSBwb2ludGVyCQkJCQkJIworIyBBNyA9IHN0YWNrIHBvaW50ZXIJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjYXMybF9ub3VwZGF0ZV9kb25lOgorCisjIHJlc3RvcmUgcHJldmlvdXMgU0ZDL0RGQyB2YWx1ZS4KKwltb3ZjCQklZDYsJXNmYwkJIyByZXN0b3JlIG9sZCBTRkMKKwltb3ZjCQklZDYsJWRmYwkJIyByZXN0b3JlIG9sZCBERkMKKworIyByZXN0b3JlIHByZXZpb3VzIGludGVycnVwdCBtYXNrIGxldmVsLgorCW1vdi53CQklZDcsJXNyCQkJIyByZXN0b3JlIG9sZCBTUgorCisJc2YJCSVkNAkJCSMgaW5kaWNhdGUgbm8gdXBkYXRlIHdhcyBkb25lCisJYnJhLmwJCV9pc3BfY2FzMl9maW5pc2gKKworY2FzMmxfdXBkYXRlX2RvbmU6CisKKyMgcmVzdG9yZSBwcmV2aW91cyBTRkMvREZDIHZhbHVlLgorCW1vdmMJCSVkNiwlc2ZjCQkjIHJlc3RvcmUgb2xkIFNGQworCW1vdmMJCSVkNiwlZGZjCQkjIHJlc3RvcmUgb2xkIERGQworCisjIHJlc3RvcmUgcHJldmlvdXMgaW50ZXJydXB0IG1hc2sgbGV2ZWwuCisJbW92LncJCSVkNywlc3IJCQkjIHJlc3RvcmUgb2xkIFNSCisKKwlzdAkJJWQ0CQkJIyBpbmRpY2F0ZSB1cGRhdGUgd2FzIGRvbmUKKwlicmEubAkJX2lzcF9jYXMyX2ZpbmlzaAorIyMjIworCisJYWxpZ24JCTB4MTAKK0NBUzJMMl9TVEFSVDoKKwltb3ZjCQklYTIsJWJ1c2NyCQkjIGFzc2VydCBMT0NLKgorCW1vdnMubAkJKCVhMSksJWQxCQkjIGZldGNoIERlc3QyWzMxOjBdCisJbW92cy5sCQkoJWEwKSwlZDAJCSMgZmV0Y2ggRGVzdDFbMzE6MF0KKwlicmEuYgkJQ0FTMkwyX0NPTlQKK0NBUzJMMl9FTlRFUjoKKwlicmEuYgkJfisxNgorCitDQVMyTDJfQ09OVDoKKwljbXAubAkJJWQwLCVkMgkJCSMgRGVzdDEgLSBDb21wYXJlMQorCWJuZS5iCQlDQVMyTDJfTk9VUERBVEUKKwljbXAubAkJJWQxLCVkMwkJCSMgRGVzdDIgLSBDb21wYXJlMgorCWJuZS5iCQlDQVMyTDJfTk9VUERBVEUKKwltb3ZzLmwJCSVkNSwoJWExKQkJIyBVcGRhdGUyWzMxOjBdIC0+IERlc3QyCisJYnJhLmIJCUNBUzJMMl9VUERBVEUKKwlicmEuYgkJfisxNgorCitDQVMyTDJfVVBEQVRFOgorCXN3YXAJCSVkNAkJCSMgZ2V0IFVwZGF0ZTFbMzE6MTZdCisJbW92cy53CQklZDQsKCVhMCkrCQkjIFVwZGF0ZTFbMzE6MTZdIC0+IERFU1QxCisJbW92YwkJJWEzLCVidXNjcgkJIyBhc3NlcnQgTE9DS0UqCisJc3dhcAkJJWQ0CQkJIyBnZXQgVXBkYXRlMVsxNTowXQorCWJyYS5iCQlDQVMyTDJfVVBEQVRFMgorCWJyYS5iCQl+KzE2CisKK0NBUzJMMl9VUERBVEUyOgorCW1vdnMudwkJJWQ0LCglYTApCQkjIFVwZGF0ZTFbMTU6MF0gLT4gREVTVDErMHgyCisJbW92YwkJJWE0LCVidXNjcgkJIyB1bmxvY2sgdGhlIGJ1cworCWJyYS53CQljYXMybF91cGRhdGVfZG9uZQorCW5vcAorCWJyYS5iCQl+KzE2CisKK0NBUzJMMl9OT1VQREFURToKKwlzd2FwCQklZDAJCQkjIGdldCBEZXN0MVszMToxNl0KKwltb3ZzLncJCSVkMCwoJWEwKSsJCSMgRGVzdDFbMzE6MTZdIC0+IERFU1QxCisJbW92YwkJJWEzLCVidXNjcgkJIyBhc3NlcnQgTE9DS0UqCisJc3dhcAkJJWQwCQkJIyBnZXQgRGVzdDFbMTU6MF0KKwlicmEuYgkJQ0FTMkwyX05PVVBEQVRFMgorCWJyYS5iCQl+KzE2CisKK0NBUzJMMl9OT1VQREFURTI6CisJbW92cy53CQklZDAsKCVhMCkJCSMgRGVzdDFbMTU6MF0gLT4gREVTVDErMHgyCisJbW92YwkJJWE0LCVidXNjcgkJIyB1bmxvY2sgdGhlIGJ1cworCWJyYS53CQljYXMybF9ub3VwZGF0ZV9kb25lCisJbm9wCisJYnJhLmIJCX4rMTYKKworQ0FTMkwyX0ZJTExFUjoKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlicmEuYgkJQ0FTMkwyX1NUQVJUCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJYWxpZ24JCTB4MTAKK0NBUzJMM19TVEFSVDoKKwltb3ZjCQklYTIsJWJ1c2NyCQkjIGFzc2VydCBMT0NLKgorCW1vdnMubAkJKCVhMSksJWQxCQkjIGZldGNoIERlc3QyWzMxOjBdCisJbW92cy5sCQkoJWEwKSwlZDAJCSMgZmV0Y2ggRGVzdDFbMzE6MF0KKwlicmEuYgkJQ0FTMkwzX0NPTlQKK0NBUzJMM19FTlRFUjoKKwlicmEuYgkJfisxNgorCitDQVMyTDNfQ09OVDoKKwljbXAubAkJJWQwLCVkMgkJCSMgRGVzdDEgLSBDb21wYXJlMQorCWJuZS5iCQlDQVMyTDNfTk9VUERBVEUKKwljbXAubAkJJWQxLCVkMwkJCSMgRGVzdDIgLSBDb21wYXJlMgorCWJuZS5iCQlDQVMyTDNfTk9VUERBVEUKKwltb3ZzLmwJCSVkNSwoJWExKQkJIyBVcGRhdGUyWzMxOjBdIC0+IERFU1QyCisJYnJhLmIJCUNBUzJMM19VUERBVEUKKwlicmEuYgkJfisxNgorCitDQVMyTDNfVVBEQVRFOgorCXJvbC5sCQkmMHg4LCVkNAkJIyBnZXQgVXBkYXRlMVszMToyNF0KKwltb3ZzLmIJCSVkNCwoJWEwKSsJCSMgVXBkYXRlMVszMToyNF0gLT4gREVTVDEKKwlzd2FwCQklZDQJCQkjIGdldCBVcGRhdGUxWzIzOjhdCisJbW92cy53CQklZDQsKCVhMCkrCQkjIFVwZGF0ZTFbMjM6OF0gLT4gREVTVDErMHgxCisJYnJhLmIJCUNBUzJMM19VUERBVEUyCisJYnJhLmIJCX4rMTYKKworQ0FTMkwzX1VQREFURTI6CisJcm9sLmwJCSYweDgsJWQ0CQkjIGdldCBVcGRhdGUxWzc6MF0KKwltb3ZjCQklYTMsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKKwltb3ZzLmIJCSVkNCwoJWEwKQkJIyBVcGRhdGUxWzc6MF0gLT4gREVTVDErMHgzCisJYnJhLmIJCUNBUzJMM19VUERBVEUzCisJbm9wCisJYnJhLmIJCX4rMTYKKworQ0FTMkwzX1VQREFURTM6CisJbW92YwkJJWE0LCVidXNjcgkJIyB1bmxvY2sgdGhlIGJ1cworCWJyYS53CQljYXMybF91cGRhdGVfZG9uZQorCW5vcAorCW5vcAorCW5vcAorCWJyYS5iCQl+KzE2CisKK0NBUzJMM19OT1VQREFURToKKwlyb2wubAkJJjB4OCwlZDAJCSMgZ2V0IERlc3QxWzMxOjI0XQorCW1vdnMuYgkJJWQwLCglYTApKwkJIyBEZXN0MVszMToyNF0gLT4gREVTVDEKKwlzd2FwCQklZDAJCQkjIGdldCBEZXN0MVsyMzo4XQorCW1vdnMudwkJJWQwLCglYTApKwkJIyBEZXN0MVsyMzo4XSAtPiBERVNUMSsweDEKKwlicmEuYgkJQ0FTMkwzX05PVVBEQVRFMgorCWJyYS5iCQl+KzE2CisKK0NBUzJMM19OT1VQREFURTI6CisJcm9sLmwJCSYweDgsJWQwCQkjIGdldCBEZXN0MVs3OjBdCisJbW92YwkJJWEzLCVidXNjcgkJIyBhc3NlcnQgTE9DS0UqCisJbW92cy5iCQklZDAsKCVhMCkJCSMgVXBkYXRlMVs3OjBdIC0+IERFU1QxKzB4MworCWJyYS5iCQlDQVMyTDNfTk9VUERBVEUzCisJbm9wCisJYnJhLmIJCX4rMTYKKworQ0FTMkwzX05PVVBEQVRFMzoKKwltb3ZjCQklYTQsJWJ1c2NyCQkjIHVubG9jayB0aGUgYnVzCisJYnJhLncJCWNhczJsX25vdXBkYXRlX2RvbmUKKwlub3AKKwlub3AKKwlub3AKKwlicmEuYgkJfisxNAorCitDQVMyTDNfRklMTEVSOgorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCWJyYS53CQlDQVMyTDNfU1RBUlQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjYXMydzoKKwltb3YubAkJJWEwLCVhMgkJCSMgY29weSBBRERSMQorCW1vdi5sCQklYTEsJWEzCQkJIyBjb3B5IEFERFIyCisJbW92LmwJCSVhMCwlYTQJCQkjIGNvcHkgQUREUjEKKwltb3YubAkJJWExLCVhNQkJCSMgY29weSBBRERSMgorCisJYWRkcS5sCQkmMHgxLCVhNAkJIyBBRERSMSsxCisJYWRkcS5sCQkmMHgxLCVhNQkJIyBBRERSMisxCisJbW92LmwJCSVhMiwlZDEJCQkjIEFERFIxCisKKyMgbWFzayBpbnRlcnJ1cHQgbGV2ZWxzIDAtNi4gc2F2ZSBvbGQgbWFzayB2YWx1ZS4KKwltb3YudwkJJXNyLCVkNwkJCSMgc2F2ZSBjdXJyZW50IFNSCisJb3JpLncJCSYweDA3MDAsJXNyCQkjIGluaGliaXQgaW50ZXJydXB0cworCisjIGxvYWQgdGhlIFNGQyBhbmQgREZDIHdpdGggdGhlIGFwcHJvcHJpYXRlIG1vZGUuCisJbW92YwkJJXNmYywlZDYJCSMgc2F2ZSBvbGQgU0ZDL0RGQworCW1vdmMJCSVkMCwlc2ZjCQkjIHN0b3JlIG5ldyBTRkMKKwltb3ZjCQklZDAsJWRmYwkJIyBzdG9yZSBuZXcgREZDCisKKyMgcHJlLWxvYWQgdGhlIG9wZXJhbmQgQVRDLiBubyBwYWdlIGZhdWx0cyBzaG91bGQgb2NjdXIgYmVjYXVzZQorIyBfcmVhbF9sb2NrX3BhZ2UoKSBzaG91bGQgaGF2ZSB0YWtlbiBjYXJlIG9mIHRoaXMuCisJcGxwYXcJCSglYTIpCQkJIyBsb2FkIGF0YyBmb3IgQUREUjEKKwlwbHBhdwkJKCVhNCkJCQkjIGxvYWQgYXRjIGZvciBBRERSMSsxCisJcGxwYXcJCSglYTMpCQkJIyBsb2FkIGF0YyBmb3IgQUREUjIKKwlwbHBhdwkJKCVhNSkJCQkjIGxvYWQgYXRjIGZvciBBRERSMisxCisKKyMgcHVzaCB0aGUgb3BlcmFuZCBjYWNoZSBsaW5lcyBmcm9tIHRoZSBjYWNoZSBpZiB0aGV5IGV4aXN0LgorCWNwdXNobAkJJWRjLCglYTIpCQkjIHB1c2ggbGluZSBmb3IgQUREUjEKKwljcHVzaGwJCSVkYywoJWE0KQkJIyBwdXNoIGxpbmUgZm9yIEFERFIxKzEKKwljcHVzaGwJCSVkYywoJWEzKQkJIyBwdXNoIGxpbmUgZm9yIEFERFIyCisJY3B1c2hsCQklZGMsKCVhNSkJCSMgcHVzaCBsaW5lIGZvciBBRERSMisxCisKKwltb3YubAkJJWQxLCVhMgkJCSMgQUREUjEKKwlhZGRxLmwJCSYweDMsJWQxCisJbW92LmwJCSVkMSwlYTQJCQkjIEFERFIxKzMKKyMgaWYgQUREUjEgd2FzIEFUQyByZXNpZGVudCBiZWZvcmUgdGhlIGFib3ZlICJwbHBhdyIgYW5kIHdhcyBleGVjdXRlZAorIyBhbmQgaXQgd2FzIHRoZSBuZXh0IGVudHJ5IHNjaGVkdWxlZCBmb3IgcmVwbGFjZW1lbnQgYW5kIEFERFIyCisjIHNoYXJlcyB0aGUgc2FtZSBzZXQsIHRoZW4gdGhlICJwbHBhdyIgZm9yIEFERFIyIGNhbiBwdXNoIHRoZSBBRERSMQorIyBlbnRyaWVzIGZyb20gdGhlIEFUQy4gc28sIHdlIGRvIGEgc2Vjb25kIHNldCBvZiAicGxwYSJzLgorCXBscGFyCQkoJWEyKQkJCSMgbG9hZCBhdGMgZm9yIEFERFIxCisJcGxwYXIJCSglYTQpCQkJIyBsb2FkIGF0YyBmb3IgQUREUjErMworCisjIGxvYWQgdGhlIEJVU0NSIHZhbHVlcy4KKwltb3YubAkJJjB4ODAwMDAwMDAsJWEyCQkjIGFzc2VydCBMT0NLKiBidXNjciB2YWx1ZQorCW1vdi5sCQkmMHhhMDAwMDAwMCwlYTMJCSMgYXNzZXJ0IExPQ0tFKiBidXNjciB2YWx1ZQorCW1vdi5sCQkmMHgwMDAwMDAwMCwlYTQJCSMgYnVzY3IgdW5sb2NrIHZhbHVlCisKKyMgdGhlcmUgYXJlIHR3byBwb3NzaWJsZSBtaXMtYWxpZ25lZCBjYXNlcyBmb3Igd29yZCBjYXMuIHRoZXkKKyMgYXJlIHNlcGFyYXRlZCBiZWNhdXNlIHRoZSBmaW5hbCB3cml0ZSB3aGljaCBhc3NlcnRzIExPQ0tFKiBtdXN0CisjIGJlIGFsaWduZWQuCisJbW92LmwJCSVhMCwlZDAJCQkjIGlzIEFERFIxIG1pc2FsaWduZWQ/CisJYnRzdAkJJjB4MCwlZDAKKwlibmUudwkJQ0FTMlcyX0VOVEVSCQkjIHllcworCWJyYS5iCQlDQVMyV19FTlRFUgkJIyBubworCisjCisjIEQwID0gZHN0IG9wZXJhbmQgMSA8LQorIyBEMSA9IGRzdCBvcGVyYW5kIDIgPC0KKyMgRDIgPSBjbXAgb3BlcmFuZCAxCisjIEQzID0gY21wIG9wZXJhbmQgMgorIyBENCA9IHVwZGF0ZSBvcGVyIDEKKyMgRDUgPSB1cGRhdGUgb3BlciAyCisjIEQ2ID0gb2xkIFNGQy9ERkMKKyMgRDcgPSBvbGQgU1IKKyMgQTAgPSBBRERSMQorIyBBMSA9IEFERFIyCisjIEEyID0gYnVzIExPQ0sqICB2YWx1ZQorIyBBMyA9IGJ1cyBMT0NLRSogdmFsdWUKKyMgQTQgPSBidXMgdW5sb2NrIHZhbHVlCisjIEE1ID0geHh4eHh4eHgKKyMKKwlhbGlnbgkJMHgxMAorQ0FTMldfU1RBUlQ6CisJbW92YwkJJWEyLCVidXNjcgkJIyBhc3NlcnQgTE9DSyoKKwltb3ZzLncJCSglYTEpLCVkMQkJIyBmZXRjaCBEZXN0MlsxNTowXQorCW1vdnMudwkJKCVhMCksJWQwCQkjIGZldGNoIERlc3QxWzE1OjBdCisJYnJhLmIJCUNBUzJXX0NPTlQyCitDQVMyV19FTlRFUjoKKwlicmEuYgkJfisxNgorCitDQVMyV19DT05UMjoKKwljbXAudwkJJWQwLCVkMgkJCSMgRGVzdDEgLSBDb21wYXJlMQorCWJuZS5iCQlDQVMyV19OT1VQREFURQorCWNtcC53CQklZDEsJWQzCQkJIyBEZXN0MiAtIENvbXBhcmUyCisJYm5lLmIJCUNBUzJXX05PVVBEQVRFCisJbW92cy53CQklZDUsKCVhMSkJCSMgVXBkYXRlMlsxNTowXSAtPiBERVNUMgorCWJyYS5iCQlDQVMyV19VUERBVEUKKwlicmEuYgkJfisxNgorCitDQVMyV19VUERBVEU6CisJbW92YwkJJWEzLCVidXNjcgkJIyBhc3NlcnQgTE9DS0UqCisJbW92cy53CQklZDQsKCVhMCkJCSMgVXBkYXRlMVsxNTowXSAtPiBERVNUMQorCW1vdmMJCSVhNCwlYnVzY3IJCSMgdW5sb2NrIHRoZSBidXMKKwlicmEuYgkJY2FzMndfdXBkYXRlX2RvbmUKKwlicmEuYgkJfisxNgorCitDQVMyV19OT1VQREFURToKKwltb3ZjCQklYTMsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKKwltb3ZzLncJCSVkMCwoJWEwKQkJIyBEZXN0MVsxNTowXSAtPiBERVNUMQorCW1vdmMJCSVhNCwlYnVzY3IJCSMgdW5sb2NrIHRoZSBidXMKKwlicmEuYgkJY2FzMndfbm91cGRhdGVfZG9uZQorCWJyYS5iCQl+KzE2CisKK0NBUzJXX0ZJTExFUjoKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlicmEuYgkJQ0FTMldfU1RBUlQKKworIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUSElTIE1VU1QgQkUgVEhFIFNUQVRFIE9GIFRIRSBJTlRFR0VSIFJFR0lTVEVSIEZJTEUgVVBPTgkjCisjIEVOVEVSSU5HIF9pc3BfY2FzMigpLgkJCQkJCSMKKyMJCQkJCQkJCSMKKyMgRDAgPSBkZXN0aW5hdGlvblsxNTowXSBvcGVyYW5kIDEJCQkJIworIyBEMSA9IGRlc3RpbmF0aW9uWzE1OjBdIG9wZXJhbmQgMgkJCQkjCisjIEQyID0gY21wWzE1OjBdIG9wZXJhbmQgMQkJCQkJIworIyBEMyA9IGNtcFsxNTowXSBvcGVyYW5kIDIJCQkJCSMKKyMgRDQgPSAneHh4eHh4MTEgLT4gbm8gcmVnIHVwZGF0ZTsgJ3h4eHh4eDAwIC0+IHVwZGF0ZSByZXF1aXJlZAkjCisjIEQ1ID0geHh4eHh4eHgJCQkJCQkJIworIyBENiA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgRDcgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEEwID0geHh4eHh4eHgJCQkJCQkJIworIyBBMSA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTIgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEEzID0geHh4eHh4eHgJCQkJCQkJIworIyBBNCA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTUgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEE2ID0gZnJhbWUgcG9pbnRlcgkJCQkJCSMKKyMgQTcgPSBzdGFjayBwb2ludGVyCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2FzMndfbm91cGRhdGVfZG9uZToKKworIyByZXN0b3JlIHByZXZpb3VzIFNGQy9ERkMgdmFsdWUuCisJbW92YwkJJWQ2LCVzZmMJCSMgcmVzdG9yZSBvbGQgU0ZDCisJbW92YwkJJWQ2LCVkZmMJCSMgcmVzdG9yZSBvbGQgREZDCisKKyMgcmVzdG9yZSBwcmV2aW91cyBpbnRlcnJ1cHQgbWFzayBsZXZlbC4KKwltb3YudwkJJWQ3LCVzcgkJCSMgcmVzdG9yZSBvbGQgU1IKKworCXNmCQklZDQJCQkjIGluZGljYXRlIG5vIHVwZGF0ZSB3YXMgZG9uZQorCWJyYS5sCQlfaXNwX2NhczJfZmluaXNoCisKK2NhczJ3X3VwZGF0ZV9kb25lOgorCisjIHJlc3RvcmUgcHJldmlvdXMgU0ZDL0RGQyB2YWx1ZS4KKwltb3ZjCQklZDYsJXNmYwkJIyByZXN0b3JlIG9sZCBTRkMKKwltb3ZjCQklZDYsJWRmYwkJIyByZXN0b3JlIG9sZCBERkMKKworIyByZXN0b3JlIHByZXZpb3VzIGludGVycnVwdCBtYXNrIGxldmVsLgorCW1vdi53CQklZDcsJXNyCQkJIyByZXN0b3JlIG9sZCBTUgorCisJc3QJCSVkNAkJCSMgaW5kaWNhdGUgdXBkYXRlIHdhcyBkb25lCisJYnJhLmwJCV9pc3BfY2FzMl9maW5pc2gKKyMjIyMKKworCWFsaWduCQkweDEwCitDQVMyVzJfU1RBUlQ6CisJbW92YwkJJWEyLCVidXNjcgkJIyBhc3NlcnQgTE9DSyoKKwltb3ZzLncJCSglYTEpLCVkMQkJIyBmZXRjaCBEZXN0MlsxNTowXQorCW1vdnMudwkJKCVhMCksJWQwCQkjIGZldGNoIERlc3QxWzE1OjBdCisJYnJhLmIJCUNBUzJXMl9DT05UMgorQ0FTMlcyX0VOVEVSOgorCWJyYS5iCQl+KzE2CisKK0NBUzJXMl9DT05UMjoKKwljbXAudwkJJWQwLCVkMgkJCSMgRGVzdDEgLSBDb21wYXJlMQorCWJuZS5iCQlDQVMyVzJfTk9VUERBVEUKKwljbXAudwkJJWQxLCVkMwkJCSMgRGVzdDIgLSBDb21wYXJlMgorCWJuZS5iCQlDQVMyVzJfTk9VUERBVEUKKwltb3ZzLncJCSVkNSwoJWExKQkJIyBVcGRhdGUyWzE1OjBdIC0+IERFU1QyCisJYnJhLmIJCUNBUzJXMl9VUERBVEUKKwlicmEuYgkJfisxNgorCitDQVMyVzJfVVBEQVRFOgorCXJvci5sCQkmMHg4LCVkNAkJIyBnZXQgVXBkYXRlMVsxNTo4XQorCW1vdnMuYgkJJWQ0LCglYTApKwkJIyBVcGRhdGUxWzE1OjhdIC0+IERFU1QxCisJbW92YwkJJWEzLCVidXNjcgkJIyBhc3NlcnQgTE9DS0UqCisJcm9sLmwJCSYweDgsJWQ0CQkjIGdldCBVcGRhdGUxWzc6MF0KKwlicmEuYgkJQ0FTMlcyX1VQREFURTIKKwlicmEuYgkJfisxNgorCitDQVMyVzJfVVBEQVRFMjoKKwltb3ZzLmIJCSVkNCwoJWEwKQkJIyBVcGRhdGUxWzc6MF0gLT4gREVTVDErMHgxCisJbW92YwkJJWE0LCVidXNjcgkJIyB1bmxvY2sgdGhlIGJ1cworCWJyYS53CQljYXMyd191cGRhdGVfZG9uZQorCW5vcAorCWJyYS5iCQl+KzE2CisKK0NBUzJXMl9OT1VQREFURToKKwlyb3IubAkJJjB4OCwlZDAJCSMgZ2V0IERlc3QxWzE1OjhdCisJbW92cy5iCQklZDAsKCVhMCkrCQkjIERlc3QxWzE1OjhdIC0+IERFU1QxCisJbW92YwkJJWEzLCVidXNjcgkJIyBhc3NlcnQgTE9DS0UqCisJcm9sLmwJCSYweDgsJWQwCQkjIGdldCBEZXN0MVs3OjBdCisJYnJhLmIJCUNBUzJXMl9OT1VQREFURTIKKwlicmEuYgkJfisxNgorCitDQVMyVzJfTk9VUERBVEUyOgorCW1vdnMuYgkJJWQwLCglYTApCQkjIERlc3QxWzc6MF0gLT4gREVTVDErMHgxCisJbW92YwkJJWE0LCVidXNjcgkJIyB1bmxvY2sgdGhlIGJ1cworCWJyYS53CQljYXMyd19ub3VwZGF0ZV9kb25lCisJbm9wCisJYnJhLmIJCX4rMTYKKworQ0FTMlcyX0ZJTExFUjoKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlicmEuYgkJQ0FTMlcyX1NUQVJUCisKKyMgICAgICAgIyMjIyMjICAgICAgIyMgICAgICAjIyMjIyMKKyMgICAgICAgIwkgICAjICAjICAgICAjCisjCSMJICAjIyMjIyMgICAgIyMjIyMjCisjCSMJICAjICAgICMgICAgICAgICAjCisjICAgICAgICMjIyMjIyAgICAjICAgICMgICAgIyMjIyMjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2lzcF9jYXMoKTogImNvcmUiIGVtdWxhdGlvbiBjb2RlIGZvciB0aGUgY2FzIGluc3RydWN0aW9uCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9pc3BfY2FzX2ZpbmlzaCgpIC0gb25seSBleGl0IHBvaW50IGZvciB0aGlzIGVtdWxhdGlvbiBjb2RlOwkjCisjCQkJICAgIGRvIGNsZWFuLXVwCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkqc2VlIGVudHJ5IGNoYXJ0IGJlbG93KgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCSpzZWUgZXhpdCBjaGFydCBiZWxvdyoJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkoMSkgTWFrZSBzZXZlcmFsIGNvcGllcyBvZiB0aGUgZWZmZWN0aXZlIGFkZHJlc3MuCQkjCisjCSgyKSBTYXZlIGN1cnJlbnQgU1I7IFRoZW4gbWFzayBvZmYgYWxsIG1hc2thYmxlIGludGVycnVwdHMuCSMKKyMJKDMpIFNhdmUgY3VycmVudCBERkMvU0ZDIChBU1NVTUVEIFRPIEJFIEVRVUFMISEhKTsgVGhlbiBzZXQJIworIwkgICAgU0ZDL0RGQyBhY2NvcmRpbmcgdG8gd2hldGhlciBleGNlcHRpb24gb2NjdXJyZWQgaW4gdXNlciBvcgkjCisjCSAgICBzdXBlcnZpc29yIG1vZGUuCQkJCQkJIworIwkoNCkgVXNlICJwbHBhdyIgaW5zdHJ1Y3Rpb24gdG8gcHJlLWxvYWQgQVRDIHdpdGggZWZlY3RpdmUJIworIwkgICAgYWRkcmVzcyBwYWdlKHMpLiBUSElTIFNIT1VMRCBOT1QgRkFVTFQhISEgVGhlIHJlbGV2YW50CSMKKyMJICAgIHBhZ2Uocykgc2hvdWxkIGhhdmUgYmVlbiBtYWRlIHJlc2lkZW50IHByaW9yIHRvIGVudGVyaW5nCSMKKyMJICAgIHRoaXMgcm91dGluZS4JCQkJCQkjCisjCSg1KSBQdXNoIHRoZSBvcGVyYW5kIGxpbmVzIGZyb20gdGhlIGNhY2hlIHcvICJjcHVzaGwiLgkJIworIwkgICAgSW4gdGhlIDY4MDQwLCB0aGlzIHdhcyBkb25lIHdpdGhpbiB0aGUgbG9ja2VkIHJlZ2lvbi4gSW4JIworIwkgICAgdGhlIDY4MDYwLCBpdCBpcyBkb25lIG91dHNpZGUgb2YgdGhlIGxvY2tlZCByZWdpb24uCQkjCisjCSg2KSBQcmUtZmV0Y2ggdGhlIGNvcmUgZW11bGF0aW9uIGluc3RydWN0aW9ucyBieSBleGVjdXRpbmcgb25lCSMKKyMJICAgIGJyYW5jaCB3aXRoaW4gZWFjaCBwaHlzaWNhbCBsaW5lICgxNiBieXRlcykgb2YgdGhlIGNvZGUJIworIwkgICAgYmVmb3JlIGFjdHVhbGx5IGV4ZWN1dGluZyB0aGUgY29kZS4JCQkJIworIwkoNykgTG9hZCB0aGUgQlVTQ1Igd2l0aCB0aGUgYnVzIGxvY2sgdmFsdWUuCQkJIworIwkoOCkgRmV0Y2ggdGhlIHNvdXJjZSBvcGVyYW5kLgkJCQkJIworIwkoOSkgRG8gdGhlIGNvbXBhcmUuIElmIGVxdWFsLCBnbyB0byBzdGVwICgxMikuCQkJIworIwkoMTApVW5lcXVhbC4gTm8gdXBkYXRlIG9jY3Vycy4gQnV0LCB3ZSBkbyB3cml0ZSB0aGUgRFNUIG9wIGJhY2sJIworIwkgICAgdG8gaXRzZWxmIChhcyB3LyB0aGUgJzA0MCkgc28gd2UgY2FuIGdyYWNlZnVsbHkgdW5sb2NrCSMKKyMJICAgIHRoZSBidXMgKGFuZCBhc3NlcnQgTE9DS0UqKSB1c2luZyBCVVNDUiBhbmQgdGhlIGZpbmFsIG1vdmUuCSMKKyMJKDExKUV4aXQuCQkJCQkJCSMKKyMJKDEyKVdyaXRlIHVwZGF0ZSBvcGVyYW5kIHRvIHRoZSBEU1QgbG9jYXRpb24uIFVzZSBCVVNDUiB0bwkjCisjCSAgICBhc3NlcnQgTE9DS0UqIGZvciB0aGUgZmluYWwgd3JpdGUgb3BlcmF0aW9uLgkJIworIwkoMTMpRXhpdC4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJVGhlIGFsZ29yaXRobSBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZCBzbGlnaHRseSBkaWZmZXJlbnRseQkjCisjIGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiB0aGUgb3BlcmF0aW9uIGFuZCB0aGUgbWlzYWxpZ25tZW50IG9mIHRoZQkjCisjIG9wZXJhbmQuIEEgbWlzYWxpZ25lZCBvcGVyYW5kIG11c3QgYmUgd3JpdHRlbiBpbiBhbGlnbmVkIGNodW5rcyBvcgkjCisjIGVsc2UgdGhlIEJVU0NSIHJlZ2lzdGVyIGNvbnRyb2wgZ2V0cyBjb25mdXNlZC4JCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVEhJUyBJUyBUSEUgU1RBVEUgT0YgVEhFIElOVEVHRVIgUkVHSVNURVIgRklMRSBVUE9OCSMKKyMgRU5URVJJTkcgX2lzcF9jYXMoKS4JCQkJCSMKKyMJCQkJCQkJIworIyBEMCA9IHh4eHh4eHh4CQkJCQkJIworIyBEMSA9IHh4eHh4eHh4CQkJCQkJIworIyBEMiA9IHVwZGF0ZSBvcGVyYW5kCQkJCQkjCisjIEQzID0geHh4eHh4eHgJCQkJCQkjCisjIEQ0ID0gY29tcGFyZSBvcGVyYW5kCQkJCQkjCisjIEQ1ID0geHh4eHh4eHgJCQkJCQkjCisjIEQ2ID0gc3VwZXJ2aXNvciAoJ3h4eHh4eGZmKSBvciB1c2VyIG1vZGUgKCd4eHh4eHgwMCkJIworIyBENyA9IGxvbmd3b3JkICgneHh4eHh4ZmYpIG9yIHdvcmQgc2l6ZSAoJ3h4eHh4eDAwKQkjCisjIEEwID0gQUREUgkJCQkJCSMKKyMgQTEgPSB4eHh4eHh4eAkJCQkJCSMKKyMgQTIgPSB4eHh4eHh4eAkJCQkJCSMKKyMgQTMgPSB4eHh4eHh4eAkJCQkJCSMKKyMgQTQgPSB4eHh4eHh4eAkJCQkJCSMKKyMgQTUgPSB4eHh4eHh4eAkJCQkJCSMKKyMgQTYgPSBmcmFtZSBwb2ludGVyCQkJCQkjCisjIEE3ID0gc3RhY2sgcG9pbnRlcgkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCV9pc3BfY2FzCitfaXNwX2NhczoKKwl0c3QuYgkJJWQ2CQkJIyB1c2VyIG9yIHN1cGVydmlzb3IgbW9kZT8KKwlibmUuYgkJY2FzX3N1cGVyCQkjIHN1cGVydmlzb3IKK2Nhc191c2VyOgorCW1vdnEubAkJJjB4MSwlZDAJCSMgbG9hZCB1c2VyIGRhdGEgZmMKKwlicmEuYgkJY2FzX2NvbnQKK2Nhc19zdXBlcjoKKwltb3ZxLmwJCSYweDUsJWQwCQkjIGxvYWQgc3VwZXJ2aXNvciBkYXRhIGZjCisKK2Nhc19jb250OgorCXRzdC5iCQklZDcJCQkjIHdvcmQgb3IgbG9uZ3dvcmQ/CisJYm5lLncJCWNhc2wJCQkjIGxvbmd3b3JkCisKKyMjIyMKK2Nhc3c6CisJbW92LmwJCSVhMCwlYTEJCQkjIG1ha2UgY29weSBmb3IgcGxwYXcxCisJbW92LmwJCSVhMCwlYTIJCQkjIG1ha2UgY29weSBmb3IgcGxwYXcyCisJYWRkcS5sCQkmMHgxLCVhMgkJIyBwbHBhdzIgcG9pbnRzIHRvIGVuZCBvZiB3b3JkCisKKwltb3YubAkJJWQyLCVkMwkJCSMgZDMgPSB1cGRhdGVbNzowXQorCWxzci53CQkmMHg4LCVkMgkJIyBkMiA9IHVwZGF0ZVsxNTo4XQorCisjIG1hc2sgaW50ZXJydXB0IGxldmVscyAwLTYuIHNhdmUgb2xkIG1hc2sgdmFsdWUuCisJbW92LncJCSVzciwlZDcJCQkjIHNhdmUgY3VycmVudCBTUgorCW9yaS53CQkmMHgwNzAwLCVzcgkJIyBpbmhpYml0IGludGVycnVwdHMKKworIyBsb2FkIHRoZSBTRkMgYW5kIERGQyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBtb2RlLgorCW1vdmMJCSVzZmMsJWQ2CQkjIHNhdmUgb2xkIFNGQy9ERkMKKwltb3ZjCQklZDAsJXNmYwkJIyBsb2FkIG5ldyBzZmMKKwltb3ZjCQklZDAsJWRmYwkJIyBsb2FkIG5ldyBkZmMKKworIyBwcmUtbG9hZCB0aGUgb3BlcmFuZCBBVEMuIG5vIHBhZ2UgZmF1bHRzIHNob3VsZCBvY2N1ciBoZXJlIGJlY2F1c2UKKyMgX3JlYWxfbG9ja19wYWdlKCkgc2hvdWxkIGhhdmUgdGFrZW4gY2FyZSBvZiB0aGlzLgorCXBscGF3CQkoJWExKQkJCSMgbG9hZCBhdGMgZm9yIEFERFIKKwlwbHBhdwkJKCVhMikJCQkjIGxvYWQgYXRjIGZvciBBRERSKzEKKworIyBwdXNoIHRoZSBvcGVyYW5kIGxpbmVzIGZyb20gdGhlIGNhY2hlIGlmIHRoZXkgZXhpc3QuCisJY3B1c2hsCQklZGMsKCVhMSkJCSMgcHVzaCBkaXJ0eSBkYXRhCisJY3B1c2hsCQklZGMsKCVhMikJCSMgcHVzaCBkaXJ0eSBkYXRhCisKKyMgbG9hZCB0aGUgQlVTQ1IgdmFsdWVzLgorCW1vdi5sCQkmMHg4MDAwMDAwMCwlYTEJCSMgYXNzZXJ0IExPQ0sqIGJ1c2NyIHZhbHVlCisJbW92LmwJCSYweGEwMDAwMDAwLCVhMgkJIyBhc3NlcnQgTE9DS0UqIGJ1c2NyIHZhbHVlCisJbW92LmwJCSYweDAwMDAwMDAwLCVhMwkJIyBidXNjciB1bmxvY2sgdmFsdWUKKworIyBwcmUtbG9hZCB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUgZm9yIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtLgorIyB0aGlzIHdpbGwgbWluaW1pemUgdGhlIG51bWJlciBvZiBjeWNsZXMgdGhhdCBMT0NLKiB3aWxsIGJlIGFzc2VydGVkLgorCWJyYS5iCQlDQVNXX0VOVEVSCQkjIHN0YXJ0IHByZS1sb2FkaW5nIGljYWNoZQorCisjCisjIEQwID0gZHN0IG9wZXJhbmQgPC0KKyMgRDEgPSB1cGRhdGVbMTU6OF0gb3BlcmFuZAorIyBEMiA9IHVwZGF0ZVs3OjBdICBvcGVyYW5kCisjIEQzID0geHh4eHh4eHgKKyMgRDQgPSBjb21wYXJlWzE1OjBdIG9wZXJhbmQKKyMgRDUgPSB4eHh4eHh4eAorIyBENiA9IG9sZCBTRkMvREZDCisjIEQ3ID0gb2xkIFNSCisjIEEwID0gQUREUgorIyBBMSA9IGJ1cyBMT0NLKiAgdmFsdWUKKyMgQTIgPSBidXMgTE9DS0UqIHZhbHVlCisjIEEzID0gYnVzIHVubG9jayB2YWx1ZQorIyBBNCA9IHh4eHh4eHh4CisjIEE1ID0geHh4eHh4eHgKKyMKKwlhbGlnbgkJMHgxMAorQ0FTV19TVEFSVDoKKwltb3ZjCQklYTEsJWJ1c2NyCQkjIGFzc2VydCBMT0NLKgorCW1vdnMudwkJKCVhMCksJWQwCQkjIGZldGNoIERlc3RbMTU6MF0KKwljbXAudwkJJWQwLCVkNAkJCSMgRGVzdCAtIENvbXBhcmUKKwlibmUuYgkJQ0FTV19OT1VQREFURQorCWJyYS5iCQlDQVNXX1VQREFURQorQ0FTV19FTlRFUjoKKwlicmEuYgkJfisxNgorCitDQVNXX1VQREFURToKKwltb3ZzLmIJCSVkMiwoJWEwKSsJCSMgVXBkYXRlWzE1OjhdIC0+IERFU1QKKwltb3ZjCQklYTIsJWJ1c2NyCQkjIGFzc2VydCBMT0NLRSoKKwltb3ZzLmIJCSVkMywoJWEwKQkJIyBVcGRhdGVbNzowXSAtPiBERVNUKzB4MQorCWJyYS5iCQlDQVNXX1VQREFURTIKKwlicmEuYgkJfisxNgorCitDQVNXX1VQREFURTI6CisJbW92YwkJJWEzLCVidXNjcgkJIyB1bmxvY2sgdGhlIGJ1cworCWJyYS5iCQljYXN3X3VwZGF0ZV9kb25lCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJYnJhLmIJCX4rMTYKKworQ0FTV19OT1VQREFURToKKwlyb3IubAkJJjB4OCwlZDAJCSMgZ2V0IERlc3RbMTU6OF0KKwltb3ZzLmIJCSVkMCwoJWEwKSsJCSMgRGVzdFsxNTo4XSAtPiBERVNUCisJbW92YwkJJWEyLCVidXNjcgkJIyBhc3NlcnQgTE9DS0UqCisJcm9sLmwJCSYweDgsJWQwCQkjIGdldCBEZXN0Wzc6MF0KKwlicmEuYgkJQ0FTV19OT1VQREFURTIKKwlicmEuYgkJfisxNgorCitDQVNXX05PVVBEQVRFMjoKKwltb3ZzLmIJCSVkMCwoJWEwKQkJIyBEZXN0Wzc6MF0gLT4gREVTVCsweDEKKwltb3ZjCQklYTMsJWJ1c2NyCQkjIHVubG9jayB0aGUgYnVzCisJYnJhLmIJCWNhc3dfbm91cGRhdGVfZG9uZQorCW5vcAorCW5vcAorCWJyYS5iCQl+KzE2CisKK0NBU1dfRklMTEVSOgorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCW5vcAorCWJyYS5iCQlDQVNXX1NUQVJUCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRISVMgTVVTVCBCRSBUSEUgU1RBVEUgT0YgVEhFIElOVEVHRVIgUkVHSVNURVIgRklMRSBVUE9OCSMKKyMgQ0FMTElORyBfaXNwX2Nhc19maW5pc2goKS4JCQkJCSMKKyMJCQkJCQkJCSMKKyMgRDAgPSBkZXN0aW5hdGlvblsxNTowXSBvcGVyYW5kCQkJCSMKKyMgRDEgPSAneHh4eHh4MTEgLT4gbm8gcmVnIHVwZGF0ZTsgJ3h4eHh4eDAwIC0+IHVwZGF0ZSByZXF1aXJlZAkjCisjIEQyID0geHh4eHh4eHgJCQkJCQkJIworIyBEMyA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgRDQgPSBjb21wYXJlWzE1OjBdIG9wZXJhbmQJCQkJCSMKKyMgRDUgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEQ2ID0geHh4eHh4eHgJCQkJCQkJIworIyBENyA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTAgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEExID0geHh4eHh4eHgJCQkJCQkJIworIyBBMiA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTMgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEE0ID0geHh4eHh4eHgJCQkJCQkJIworIyBBNSA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTYgPSBmcmFtZSBwb2ludGVyCQkJCQkJIworIyBBNyA9IHN0YWNrIHBvaW50ZXIJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjYXN3X25vdXBkYXRlX2RvbmU6CisKKyMgcmVzdG9yZSBwcmV2aW91cyBTRkMvREZDIHZhbHVlLgorCW1vdmMJCSVkNiwlc2ZjCQkjIHJlc3RvcmUgb2xkIFNGQworCW1vdmMJCSVkNiwlZGZjCQkjIHJlc3RvcmUgb2xkIERGQworCisjIHJlc3RvcmUgcHJldmlvdXMgaW50ZXJydXB0IG1hc2sgbGV2ZWwuCisJbW92LncJCSVkNywlc3IJCQkjIHJlc3RvcmUgb2xkIFNSCisKKwlzZgkJJWQxCQkJIyBpbmRpY2F0ZSBubyB1cGRhdGUgd2FzIGRvbmUKKwlicmEubAkJX2lzcF9jYXNfZmluaXNoCisKK2Nhc3dfdXBkYXRlX2RvbmU6CisKKyMgcmVzdG9yZSBwcmV2aW91cyBTRkMvREZDIHZhbHVlLgorCW1vdmMJCSVkNiwlc2ZjCQkjIHJlc3RvcmUgb2xkIFNGQworCW1vdmMJCSVkNiwlZGZjCQkjIHJlc3RvcmUgb2xkIERGQworCisjIHJlc3RvcmUgcHJldmlvdXMgaW50ZXJydXB0IG1hc2sgbGV2ZWwuCisJbW92LncJCSVkNywlc3IJCQkjIHJlc3RvcmUgb2xkIFNSCisKKwlzdAkJJWQxCQkJIyBpbmRpY2F0ZSB1cGRhdGUgd2FzIGRvbmUKKwlicmEubAkJX2lzcF9jYXNfZmluaXNoCisKKyMjIyMjIyMjIyMjIyMjIyMKKworIyB0aGVyZSBhcmUgdHdvIHBvc3NpYmxlIG1pcy1hbGlnbmVkIGNhc2VzIGZvciBsb25nd29yZCBjYXMuIHRoZXkKKyMgYXJlIHNlcGFyYXRlZCBiZWNhdXNlIHRoZSBmaW5hbCB3cml0ZSB3aGljaCBhc3NlcnRzIExPQ0tFKiBtdXN0CisjIGJlIGFuIGFsaWduZWQgd3JpdGUuCitjYXNsOgorCW1vdi5sCQklYTAsJWExCQkJIyBtYWtlIGNvcHkgZm9yIHBscGF3MQorCW1vdi5sCQklYTAsJWEyCQkJIyBtYWtlIGNvcHkgZm9yIHBscGF3MgorCWFkZHEubAkJJjB4MywlYTIJCSMgcGxwYXcyIHBvaW50cyB0byBlbmQgb2YgbG9uZ3dvcmQKKworCW1vdi5sCQklYTAsJWQxCQkJIyBieXRlIG9yIHdvcmQgbWlzYWxpZ25lZD8KKwlidHN0CQkmMHgwLCVkMQorCWJuZS53CQljYXNsMgkJCSMgYnl0ZSBtaXNhbGlnbmVkCisKKwltb3YubAkJJWQyLCVkMwkJCSMgZDMgPSB1cGRhdGVbMTU6MF0KKwlzd2FwCQklZDIJCQkjIGQyID0gdXBkYXRlWzMxOjE2XQorCisjIG1hc2sgaW50ZXJydXB0cyBsZXZlbHMgMC02LiBzYXZlIG9sZCBtYXNrIHZhbHVlLgorCW1vdi53CQklc3IsJWQ3CQkJIyBzYXZlIGN1cnJlbnQgU1IKKwlvcmkudwkJJjB4MDcwMCwlc3IJCSMgaW5oaWJpdCBpbnRlcnJ1cHRzCisKKyMgbG9hZCB0aGUgU0ZDIGFuZCBERkMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgbW9kZS4KKwltb3ZjCQklc2ZjLCVkNgkJIyBzYXZlIG9sZCBTRkMvREZDCisJbW92YwkJJWQwLCVzZmMJCSMgbG9hZCBuZXcgc2ZjCisJbW92YwkJJWQwLCVkZmMJCSMgbG9hZCBuZXcgZGZjCisKKyMgcHJlLWxvYWQgdGhlIG9wZXJhbmQgQVRDLiBubyBwYWdlIGZhdWx0cyBzaG91bGQgb2NjdXIgaGVyZSBiZWNhdXNlCisjIF9yZWFsX2xvY2tfcGFnZSgpIHNob3VsZCBoYXZlIHRha2VuIGNhcmUgb2YgdGhpcy4KKwlwbHBhdwkJKCVhMSkJCQkjIGxvYWQgYXRjIGZvciBBRERSCisJcGxwYXcJCSglYTIpCQkJIyBsb2FkIGF0YyBmb3IgQUREUiszCisKKyMgcHVzaCB0aGUgb3BlcmFuZCBsaW5lcyBmcm9tIHRoZSBjYWNoZSBpZiB0aGV5IGV4aXN0LgorCWNwdXNobAkJJWRjLCglYTEpCQkjIHB1c2ggZGlydHkgZGF0YQorCWNwdXNobAkJJWRjLCglYTIpCQkjIHB1c2ggZGlydHkgZGF0YQorCisjIGxvYWQgdGhlIEJVU0NSIHZhbHVlcy4KKwltb3YubAkJJjB4ODAwMDAwMDAsJWExCQkjIGFzc2VydCBMT0NLKiBidXNjciB2YWx1ZQorCW1vdi5sCQkmMHhhMDAwMDAwMCwlYTIJCSMgYXNzZXJ0IExPQ0tFKiBidXNjciB2YWx1ZQorCW1vdi5sCQkmMHgwMDAwMDAwMCwlYTMJCSMgYnVzY3IgdW5sb2NrIHZhbHVlCisKKwlicmEuYgkJQ0FTTF9FTlRFUgkJIyBzdGFydCBwcmUtbG9hZGluZyBpY2FjaGUKKworIworIyBEMCA9IGRzdCBvcGVyYW5kIDwtCisjIEQxID0geHh4eHh4eHgKKyMgRDIgPSB1cGRhdGVbMzE6MTZdIG9wZXJhbmQKKyMgRDMgPSB1cGRhdGVbMTU6MF0gIG9wZXJhbmQKKyMgRDQgPSBjb21wYXJlWzMxOjBdIG9wZXJhbmQKKyMgRDUgPSB4eHh4eHh4eAorIyBENiA9IG9sZCBTRkMvREZDCisjIEQ3ID0gb2xkIFNSCisjIEEwID0gQUREUgorIyBBMSA9IGJ1cyBMT0NLKiAgdmFsdWUKKyMgQTIgPSBidXMgTE9DS0UqIHZhbHVlCisjIEEzID0gYnVzIHVubG9jayB2YWx1ZQorIyBBNCA9IHh4eHh4eHh4CisjIEE1ID0geHh4eHh4eHgKKyMKKwlhbGlnbgkJMHgxMAorQ0FTTF9TVEFSVDoKKwltb3ZjCQklYTEsJWJ1c2NyCQkjIGFzc2VydCBMT0NLKgorCW1vdnMubAkJKCVhMCksJWQwCQkjIGZldGNoIERlc3RbMzE6MF0KKwljbXAubAkJJWQwLCVkNAkJCSMgRGVzdCAtIENvbXBhcmUKKwlibmUuYgkJQ0FTTF9OT1VQREFURQorCWJyYS5iCQlDQVNMX1VQREFURQorQ0FTTF9FTlRFUjoKKwlicmEuYgkJfisxNgorCitDQVNMX1VQREFURToKKwltb3ZzLncJCSVkMiwoJWEwKSsJCSMgVXBkYXRlWzMxOjE2XSAtPiBERVNUCisJbW92YwkJJWEyLCVidXNjcgkJIyBhc3NlcnQgTE9DS0UqCisJbW92cy53CQklZDMsKCVhMCkJCSMgVXBkYXRlWzE1OjBdIC0+IERFU1QrMHgyCisJYnJhLmIJCUNBU0xfVVBEQVRFMgorCWJyYS5iCQl+KzE2CisKK0NBU0xfVVBEQVRFMjoKKwltb3ZjCQklYTMsJWJ1c2NyCQkjIHVubG9jayB0aGUgYnVzCisJYnJhLmIJCWNhc2xfdXBkYXRlX2RvbmUKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlicmEuYgkJfisxNgorCitDQVNMX05PVVBEQVRFOgorCXN3YXAJCSVkMAkJCSMgZ2V0IERlc3RbMzE6MTZdCisJbW92cy53CQklZDAsKCVhMCkrCQkjIERlc3RbMzE6MTZdIC0+IERFU1QKKwlzd2FwCQklZDAJCQkjIGdldCBEZXN0WzE1OjBdCisJbW92YwkJJWEyLCVidXNjcgkJIyBhc3NlcnQgTE9DS0UqCisJYnJhLmIJCUNBU0xfTk9VUERBVEUyCisJYnJhLmIJCX4rMTYKKworQ0FTTF9OT1VQREFURTI6CisJbW92cy53CQklZDAsKCVhMCkJCSMgRGVzdFsxNTowXSAtPiBERVNUKzB4MgorCW1vdmMJCSVhMywlYnVzY3IJCSMgdW5sb2NrIHRoZSBidXMKKwlicmEuYgkJY2FzbF9ub3VwZGF0ZV9kb25lCisJbm9wCisJbm9wCisJYnJhLmIJCX4rMTYKKworQ0FTTF9GSUxMRVI6CisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJYnJhLmIJCUNBU0xfU1RBUlQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVEhJUyBNVVNUIEJFIFRIRSBTVEFURSBPRiBUSEUgSU5URUdFUiBSRUdJU1RFUiBGSUxFIFVQT04JIworIyBDQUxMSU5HIF9pc3BfY2FzX2ZpbmlzaCgpLgkJCQkJIworIwkJCQkJCQkJIworIyBEMCA9IGRlc3RpbmF0aW9uWzMxOjBdIG9wZXJhbmQJCQkJIworIyBEMSA9ICd4eHh4eHgxMSAtPiBubyByZWcgdXBkYXRlOyAneHh4eHh4MDAgLT4gdXBkYXRlIHJlcXVpcmVkCSMKKyMgRDIgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEQzID0geHh4eHh4eHgJCQkJCQkJIworIyBENCA9IGNvbXBhcmVbMzE6MF0gb3BlcmFuZAkJCQkJIworIyBENSA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgRDYgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEQ3ID0geHh4eHh4eHgJCQkJCQkJIworIyBBMCA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTEgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEEyID0geHh4eHh4eHgJCQkJCQkJIworIyBBMyA9IHh4eHh4eHh4CQkJCQkJCSMKKyMgQTQgPSB4eHh4eHh4eAkJCQkJCQkjCisjIEE1ID0geHh4eHh4eHgJCQkJCQkJIworIyBBNiA9IGZyYW1lIHBvaW50ZXIJCQkJCQkjCisjIEE3ID0gc3RhY2sgcG9pbnRlcgkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Nhc2xfbm91cGRhdGVfZG9uZToKKworIyByZXN0b3JlIHByZXZpb3VzIFNGQy9ERkMgdmFsdWUuCisJbW92YwkJJWQ2LCVzZmMJCSMgcmVzdG9yZSBvbGQgU0ZDCisJbW92YwkJJWQ2LCVkZmMJCSMgcmVzdG9yZSBvbGQgREZDCisKKyMgcmVzdG9yZSBwcmV2aW91cyBpbnRlcnJ1cHQgbWFzayBsZXZlbC4KKwltb3YudwkJJWQ3LCVzcgkJCSMgcmVzdG9yZSBvbGQgU1IKKworCXNmCQklZDEJCQkjIGluZGljYXRlIG5vIHVwZGF0ZSB3YXMgZG9uZQorCWJyYS5sCQlfaXNwX2Nhc19maW5pc2gKKworY2FzbF91cGRhdGVfZG9uZToKKworIyByZXN0b3JlIHByZXZpb3VzIFNGQy9ERkMgdmFsdWUuCisJbW92YwkJJWQ2LCVzZmMJCSMgcmVzdG9yZSBvbGQgU0ZDCisJbW92YwkJJWQ2LCVkZmMJCSMgcmVzdG9yZSBvbGQgREZDCisKKyMgcmVzdG9yZSBwcmV2aW91cyBpbnRlcnJ1cHRzIG1hc2sgbGV2ZWwuCisJbW92LncJCSVkNywlc3IJCQkjIHJlc3RvcmUgb2xkIFNSCisKKwlzdAkJJWQxCQkJIyBpbmRpY2F0ZSB1cGRhdGUgd2FzIGRvbmUKKwlicmEubAkJX2lzcF9jYXNfZmluaXNoCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworY2FzbDI6CisJbW92LmwJCSVkMiwlZDUJCQkjIGQ1ID0gVXBkYXRlWzc6MF0KKwlsc3IubAkJJjB4OCwlZDIKKwltb3YubAkJJWQyLCVkMwkJCSMgZDMgPSBVcGRhdGVbMjM6OF0KKwlzd2FwCQklZDIJCQkjIGQyID0gVXBkYXRlWzMxOjI0XQorCisjIG1hc2sgaW50ZXJydXB0cyBsZXZlbHMgMC02LiBzYXZlIG9sZCBtYXNrIHZhbHVlLgorCW1vdi53CQklc3IsJWQ3CQkJIyBzYXZlIGN1cnJlbnQgU1IKKwlvcmkudwkJJjB4MDcwMCwlc3IJCSMgaW5oaWJpdCBpbnRlcnJ1cHRzCisKKyMgbG9hZCB0aGUgU0ZDIGFuZCBERkMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgbW9kZS4KKwltb3ZjCQklc2ZjLCVkNgkJIyBzYXZlIG9sZCBTRkMvREZDCisJbW92YwkJJWQwLCVzZmMJCSMgbG9hZCBuZXcgc2ZjCisJbW92YwkJJWQwLCVkZmMJCSMgbG9hZCBuZXcgZGZjCisKKyMgcHJlLWxvYWQgdGhlIG9wZXJhbmQgQVRDLiBubyBwYWdlIGZhdWx0cyBzaG91bGQgb2NjdXIgaGVyZSBiZWNhdXNlCisjIF9yZWFsX2xvY2tfcGFnZSgpIHNob3VsZCBoYXZlIHRha2VuIGNhcmUgb2YgdGhpcyBhbHJlYWR5LgorCXBscGF3CQkoJWExKQkJCSMgbG9hZCBhdGMgZm9yIEFERFIKKwlwbHBhdwkJKCVhMikJCQkjIGxvYWQgYXRjIGZvciBBRERSKzMKKworIyBwdWNoIHRoZSBvcGVyYW5kIGxpbmVzIGZyb20gdGhlIGNhY2hlIGlmIHRoZXkgZXhpc3QuCisJY3B1c2hsCQklZGMsKCVhMSkJCSMgcHVzaCBkaXJ0eSBkYXRhCisJY3B1c2hsCQklZGMsKCVhMikJCSMgcHVzaCBkaXJ0eSBkYXRhCisKKyMgbG9hZCB0aGUgQlVTQ1IgdmFsdWVzLgorCW1vdi5sCQkmMHg4MDAwMDAwMCwlYTEJCSMgYXNzZXJ0IExPQ0sqIGJ1c2NyIHZhbHVlCisJbW92LmwJCSYweGEwMDAwMDAwLCVhMgkJIyBhc3NlcnQgTE9DS0UqIGJ1c2NyIHZhbHVlCisJbW92LmwJCSYweDAwMDAwMDAwLCVhMwkJIyBidXNjciB1bmxvY2sgdmFsdWUKKworIyBwcmUtbG9hZCB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUgZm9yIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtLgorIyB0aGlzIHdpbGwgbWluaW1pemUgdGhlIG51bWJlciBvZiBjeWNsZXMgdGhhdCBMT0NLKiB3aWxsIGJlIGFzc2VydGVkLgorCWJyYS5iCQlDQVNMMl9FTlRFUgkJIyBzdGFydCBwcmUtbG9hZGluZyBpY2FjaGUKKworIworIyBEMCA9IGRzdCBvcGVyYW5kIDwtCisjIEQxID0geHh4eHh4eHgKKyMgRDIgPSB1cGRhdGVbMzE6MjRdIG9wZXJhbmQKKyMgRDMgPSB1cGRhdGVbMjM6OF0gIG9wZXJhbmQKKyMgRDQgPSBjb21wYXJlWzMxOjBdIG9wZXJhbmQKKyMgRDUgPSB1cGRhdGVbNzowXSAgb3BlcmFuZAorIyBENiA9IG9sZCBTRkMvREZDCisjIEQ3ID0gb2xkIFNSCisjIEEwID0gQUREUgorIyBBMSA9IGJ1cyBMT0NLKiAgdmFsdWUKKyMgQTIgPSBidXMgTE9DS0UqIHZhbHVlCisjIEEzID0gYnVzIHVubG9jayB2YWx1ZQorIyBBNCA9IHh4eHh4eHh4CisjIEE1ID0geHh4eHh4eHgKKyMKKwlhbGlnbgkJMHgxMAorQ0FTTDJfU1RBUlQ6CisJbW92YwkJJWExLCVidXNjcgkJIyBhc3NlcnQgTE9DSyoKKwltb3ZzLmwJCSglYTApLCVkMAkJIyBmZXRjaCBEZXN0WzMxOjBdCisJY21wLmwJCSVkMCwlZDQJCQkjIERlc3QgLSBDb21wYXJlCisJYm5lLmIJCUNBU0wyX05PVVBEQVRFCisJYnJhLmIJCUNBU0wyX1VQREFURQorQ0FTTDJfRU5URVI6CisJYnJhLmIJCX4rMTYKKworQ0FTTDJfVVBEQVRFOgorCW1vdnMuYgkJJWQyLCglYTApKwkJIyBVcGRhdGVbMzE6MjRdIC0+IERFU1QKKwltb3ZzLncJCSVkMywoJWEwKSsJCSMgVXBkYXRlWzIzOjhdIC0+IERFU1QrMHgxCisJbW92YwkJJWEyLCVidXNjcgkJIyBhc3NlcnQgTE9DS0UqCisJYnJhLmIJCUNBU0wyX1VQREFURTIKKwlicmEuYgkJfisxNgorCitDQVNMMl9VUERBVEUyOgorCW1vdnMuYgkJJWQ1LCglYTApCQkjIFVwZGF0ZVs3OjBdIC0+IERFU1QrMHgzCisJbW92YwkJJWEzLCVidXNjcgkJIyB1bmxvY2sgdGhlIGJ1cworCWJyYS53CQljYXNsX3VwZGF0ZV9kb25lCisJbm9wCisJYnJhLmIJCX4rMTYKKworQ0FTTDJfTk9VUERBVEU6CisJcm9sLmwJCSYweDgsJWQwCQkjIGdldCBEZXN0WzMxOjI0XQorCW1vdnMuYgkJJWQwLCglYTApKwkJIyBEZXN0WzMxOjI0XSAtPiBERVNUCisJc3dhcAkJJWQwCQkJIyBnZXQgRGVzdFsyMzo4XQorCW1vdnMudwkJJWQwLCglYTApKwkJIyBEZXN0WzIzOjhdIC0+IERFU1QrMHgxCisJYnJhLmIJCUNBU0wyX05PVVBEQVRFMgorCWJyYS5iCQl+KzE2CisKK0NBU0wyX05PVVBEQVRFMjoKKwlyb2wubAkJJjB4OCwlZDAJCSMgZ2V0IERlc3RbNzowXQorCW1vdmMJCSVhMiwlYnVzY3IJCSMgYXNzZXJ0IExPQ0tFKgorCW1vdnMuYgkJJWQwLCglYTApCQkjIERlc3RbNzowXSAtPiBERVNUKzB4MworCWJyYS5iCQlDQVNMMl9OT1VQREFURTMKKwlub3AKKwlicmEuYgkJfisxNgorCitDQVNMMl9OT1VQREFURTM6CisJbW92YwkJJWEzLCVidXNjcgkJIyB1bmxvY2sgdGhlIGJ1cworCWJyYS53CQljYXNsX25vdXBkYXRlX2RvbmUKKwlub3AKKwlub3AKKwlub3AKKwlicmEuYgkJfisxNgorCitDQVNMMl9GSUxMRVI6CisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJbm9wCisJYnJhLmIJCUNBU0wyX1NUQVJUCisKKyMjIyMKKyMjIyMKKyMgZW5kIGxhYmVsIHVzZWQgYnkgX2lzcF9jYXNfaW5yYW5nZSgpCisJZ2xvYmFsCQlfQ0FTSEkKK19DQVNISToKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvaXRlc3QuUyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvaXRlc3QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTRhMzBjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9pdGVzdC5TCkBAIC0wLDAgKzEsNjM4NiBAQAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitNT1RPUk9MQSBNSUNST1BST0NFU1NPUiAmIE1FTU9SWSBURUNITk9MT0dZIEdST1VQCitNNjgwMDAgSGktUGVyZm9ybWFuY2UgTWljcm9wcm9jZXNzb3IgRGl2aXNpb24KK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlCitQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAorCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RIRSBTT0ZUV0FSRSBpcyBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzIGFuZCB3aXRob3V0IHdhcnJhbnR5LgorVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK01PVE9ST0xBIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCithbmQgYW55IHdhcnJhbnR5IGFnYWluc3QgaW5mcmluZ2VtZW50IHdpdGggcmVnYXJkIHRvIHRoZSBTT0ZUV0FSRQorKElOQ0xVRElORyBBTlkgTU9ESUZJRUQgVkVSU0lPTlMgVEhFUkVPRikgYW5kIGFueSBhY2NvbXBhbnlpbmcgd3JpdHRlbiBtYXRlcmlhbHMuCisKK1RvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCitJTiBOTyBFVkVOVCBTSEFMTCBNT1RPUk9MQSBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEJVU0lORVNTIFBST0ZJVFMsCitCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIE9USEVSIFBFQ1VOSUFSWSBMT1NTKQorQVJJU0lORyBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLgorTW90b3JvbGEgYXNzdW1lcyBubyByZXNwb25zaWJpbGl0eSBmb3IgdGhlIG1haW50ZW5hbmNlIGFuZCBzdXBwb3J0IG9mIHRoZSBTT0ZUV0FSRS4KKworWW91IGFyZSBoZXJlYnkgZ3JhbnRlZCBhIGNvcHlyaWdodCBsaWNlbnNlIHRvIHVzZSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGUgU09GVFdBUkUKK3NvIGxvbmcgYXMgdGhpcyBlbnRpcmUgbm90aWNlIGlzIHJldGFpbmVkIHdpdGhvdXQgYWx0ZXJhdGlvbiBpbiBhbnkgbW9kaWZpZWQgYW5kL29yCityZWRpc3RyaWJ1dGVkIHZlcnNpb25zLCBhbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KK05vIGxpY2Vuc2VzIGFyZSBncmFudGVkIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UgdW5kZXIgYW55IHBhdGVudHMKK29yIHRyYWRlbWFya3Mgb2YgTW90b3JvbGEsIEluYy4KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzZXQJU1JFR1MsCQktNjQKK3NldAlJUkVHUywJCS0xMjgKK3NldAlTQ0NSLAkJLTEzMAorc2V0CUlDQ1IsCQktMTMyCitzZXQJVEVTVENUUiwJLTEzNgorc2V0CUVBTUVNLAkJLTE0MAorc2V0CUVBU1RPUkUsCS0xNDQKK3NldAlEQVRBLAkJLTE2MAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK1RFU1RUT1A6CisJYnJhLmwJCV8wNjBURVNUU18KKworc3RhcnRfc3RyOgorCXN0cmluZwkJIlRlc3RpbmcgNjgwNjAgSVNQIHN0YXJ0ZWQ6XG4iCisKK3Bhc3Nfc3RyOgorCXN0cmluZwkJInBhc3NlZFxuIgorZmFpbF9zdHI6CisJc3RyaW5nCQkiIGZhaWxlZFxuIgorCisJYWxpZ24JCTB4NAorY2hrX3Rlc3Q6CisJdHN0LmwJCSVkMAorCWJuZS5iCQl0ZXN0X2ZhaWwKK3Rlc3RfcGFzczoKKwlwZWEJCXBhc3Nfc3RyKCVwYykKKwlic3IubAkJX3ByaW50X3N0cgorCWFkZHEubAkJJjB4NCwlc3AKKwlydHMKK3Rlc3RfZmFpbDoKKwltb3YubAkJJWQxLC0oJXNwKQorCWJzci5sCQlfcHJpbnRfbnVtCisJYWRkcS5sCQkmMHg0LCVzcAorCisJcGVhCQlmYWlsX3N0ciglcGMpCisJYnNyLmwJCV9wcmludF9zdHIKKwlhZGRxLmwJCSYweDQsJXNwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworXzA2MFRFU1RTXzoKKwlsaW5rCQklYTYsJi0xNjAKKworCW1vdm0ubAkJJjB4M2YzYywtKCVzcCkKKworCXBlYQkJc3RhcnRfc3RyKCVwYykKKwlic3IubAkJX3ByaW50X3N0cgorCWFkZHEubAkJJjB4NCwlc3AKKworIyMjIG11bAorCWNsci5sCQlURVNUQ1RSKCVhNikKKwlwZWEJCW11bHVsX3N0ciglcGMpCisJYnNyLmwJCV9wcmludF9zdHIKKwlhZGRxLmwJCSYweDQsJXNwCisKKwlic3IubAkJbXVsdWxfMAorCisJYnNyLmwJCWNoa190ZXN0CisKKyMjIyBkaXYKKwljbHIubAkJVEVTVENUUiglYTYpCisJcGVhCQlkaXZ1bF9zdHIoJXBjKQorCWJzci5sCQlfcHJpbnRfc3RyCisJYWRkcS5sCQkmMHg0LCVzcAorCisJYnNyLmwJCWRpdnVsXzAKKworCWJzci5sCQljaGtfdGVzdAorCisjIyMgY21wMgorCWNsci5sCQlURVNUQ1RSKCVhNikKKwlwZWEJCWNtcDJfc3RyKCVwYykKKwlic3IubAkJX3ByaW50X3N0cgorCWFkZHEubAkJJjB4NCwlc3AKKworCWJzci5sCQljbXAyXzEKKworCWJzci5sCQljaGtfdGVzdAorCisjIyMgbW92cAorCWNsci5sCQlURVNUQ1RSKCVhNikKKwlwZWEJCW1vdnBfc3RyKCVwYykKKwlic3IubAkJX3ByaW50X3N0cgorCWFkZHEubAkJJjB4NCwlc3AKKworCWJzci5sCQltb3ZwXzAKKworCWJzci5sCQljaGtfdGVzdAorCisjIyMgZWEKKwljbHIubAkJVEVTVENUUiglYTYpCisJcGVhCQllYV9zdHIoJXBjKQorCWJzci5sCQlfcHJpbnRfc3RyCisJYWRkcS5sCQkmMHg0LCVzcAorCisJbW92LmwJCSYweDIsRUFNRU0oJWE2KQorCWJzci5sCQllYV8wCisKKwlic3IubAkJY2hrX3Rlc3QKKworIyMjIGNhcworCWNsci5sCQlURVNUQ1RSKCVhNikKKwlwZWEJCWNhc19zdHIoJXBjKQorCWJzci5sCQlfcHJpbnRfc3RyCisJYWRkcS5sCQkmMHg0LCVzcAorCisJYnNyLmwJCWNhczAKKworCWJzci5sCQljaGtfdGVzdAorCisjIyMgY2FzMgorCWNsci5sCQlURVNUQ1RSKCVhNikKKwlwZWEJCWNhczJfc3RyKCVwYykKKwlic3IubAkJX3ByaW50X3N0cgorCWFkZHEubAkJJjB4NCwlc3AKKworCWJzci5sCQljYXMyMAorCisJYnNyLmwJCWNoa190ZXN0CisKKyMjIworCW1vdm0ubAkJKCVzcCkrLCYweDNjZmMKKworCXVubGsJCSVhNgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCittdWx1bF9zdHI6CisJc3RyaW5nCQkiXHQ2NC1iaXQgbXVsdGlwbHkuLi4iCisKKwlhbGlnbgkJMHg0CittdWx1bF8wOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQxCisJbW92LmwJCSYweDk5OTk5OTk5LCVkMgorCW1vdi5sCQkmMHg4ODg4ODg4OCwlZDMKKworCW1vdi53CQkmMHgwMDA0LElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSVkMSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJY2xyLmwJCUlSRUdTKzB4OCglYTYpCisJY2xyLmwJCUlSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworbXVsdWxfMToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSYweDc3Nzc3Nzc3LCVkMQorCW1vdi5sCQkmMHg5OTk5OTk5OSwlZDIKKwltb3YubAkJJjB4MDAwMDAwMDAsJWQzCisKKwltb3YudwkJJjB4MDAwNCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQklZDEsJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCWNsci5sCQlJUkVHUysweDgoJWE2KQorCWNsci5sCQlJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK211bHVsXzI6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQkmMHgwMDAwMDAxMCwlZDEKKwltb3YubAkJJjB4NjY2NjY2NjYsJWQyCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQklZDEsJWQyOiVkMgorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNixJUkVHUysweDgoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK211bHVsXzM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQkmMHg1NTU1NTU1NSwlZDEKKwltb3YubAkJJjB4MDAwMDAwMDAsJWQyCisJbW92LmwJCSYweDAwMDAwMDAzLCVkMworCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJJWQxLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDAsSVJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4ZmZmZmZmZmYsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCittdWx1bF80OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJjB4NDAwMDAwMDAsJWQxCisJbW92LmwJCSYweDAwMDAwMDAwLCVkMgorCW1vdi5sCQkmMHgwMDAwMDAwNCwlZDMKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSVkMSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDAxLElSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworbXVsdWxfNToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSYweGZmZmZmZmZmLCVkMQorCW1vdi5sCQkmMHgwMDAwMDAwMCwlZDIKKwltb3YubAkJJjB4ZmZmZmZmZmYsJWQzCisKKwltb3YudwkJJjB4MDAwOCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQklZDEsJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHhmZmZmZmZmZSxJUkVHUysweDgoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMSxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK211bHVsXzY6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQkmMHg4MDAwMDAwMCwlZDEKKwltb3YubAkJJjB4MDAwMDAwMDAsJWQyCisJbW92LmwJCSYweGZmZmZmZmZmLCVkMworCisJbW92LncJCSYweDAwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltdWxzLmwJCSVkMSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDAwLElSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweDgwMDAwMDAwLElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworbXVsdWxfNzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSYweDgwMDAwMDAwLCVkMQorCW1vdi5sCQkmMHgwMDAwMDAwMCwlZDIKKwltb3YubAkJJjB4MDAwMDAwMDEsJWQzCisKKwltb3YudwkJJjB4MDAwOCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbXVscy5sCQklZDEsJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHhmZmZmZmZmZixJUkVHUysweDgoJWE2KQorCW1vdi5sCQkmMHg4MDAwMDAwMCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK211bHVsXzg6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQkmMHgwMDAwMDAwMSwlZDEKKwltb3YubAkJJjB4MDAwMDAwMDAsJWQyCisJbW92LmwJCSYweDgwMDAwMDAwLCVkMworCisJbW92LncJCSYweDAwMDgsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCW11bHMubAkJJWQxLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4ZmZmZmZmZmYsSVJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4ODAwMDAwMDAsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJbW92LmwJCVRFU1RDVFIoJWE2KSwlZDEKKwljbHIubAkJJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCittb3ZwX3N0cjoKKwlzdHJpbmcJIlx0bW92ZXAuLi4iCisKKwlhbGlnbgkweDQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbW92ZXAudwklZDAsKDB4MCwlYTApICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK21vdnBfMDoKKwlhZGRxLmwJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQlEQVRBKCVhNiksJWEwCisJbW92LncJJjB4YWFhYSwlZDAKKwljbHIuYgkweDAoJWEwKQorCWNsci5iCTB4MiglYTApCisKKwltb3YudwkmMHgwMDFmLElDQ1IoJWE2KQorCW1vdi53CSYweDAwMWYsJWNjCisJbW92bS5sCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbW92cC53CSVkMCwoMHgwLCVhMCkKKworCW1vdi53CSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJJjB4N2ZmZixTUkVHUyglYTYpCisKKwltb3YuYgkweDIoJWEwKSwlZDEKKwlsc2wudwkmMHg4LCVkMQorCW1vdi5iCTB4MCglYTApLCVkMQorCisJY21wLncJJWQwLCVkMQorCWJuZS5sCWVycm9yCisKKwlic3IubAljaGtyZWdzCisJdHN0LmIJJWQwCisJYm5lLmwJZXJyb3IKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBtb3ZlcC53CSVkMCwoMHgwLCVhMCkgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbW92cF8xOgorCWFkZHEubAkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCURBVEErMHg0KCVhNiksJWEwCisJbW92LncJJjB4YWFhYSwlZDAKKwljbHIubAktMHg0KCVhMCkKKwljbHIubAkoJWEwKQorCWNsci5sCTB4NCglYTApCisKKwltb3YudwkmMHgwMDFmLElDQ1IoJWE2KQorCW1vdi53CSYweDAwMWYsJWNjCisJbW92bS5sCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbW92cC53CSVkMCwoMHgwLCVhMCkKKworCW1vdi53CSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJJjB4N2ZmZixTUkVHUyglYTYpCisKKwl0c3QubAktMHg0KCVhMCkKKwlibmUubAllcnJvcgorCXRzdC5sCTB4NCglYTApCisJYm5lLmwJZXJyb3IKKwljbXBpLmwJKCVhMCksJjB4YWEwMGFhMDAKKwlibmUubAllcnJvcgorCisJYnNyLmwJY2hrcmVncworCXRzdC5iCSVkMAorCWJuZS5sCWVycm9yCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIG1vdmVwLncJJWQwLCgweDAsJWEwKQkJCSAgICAjCisjCS0gdGhpcyB0ZXN0IGhhcyAlY2MgaW5pdGlhbGx5IGVxdWFsIHRvIHplcm8gIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK21vdnBfMjoKKwlhZGRxLmwJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQlEQVRBKCVhNiksJWEwCisJbW92LncJJjB4YWFhYSwlZDAKKwljbHIuYgkweDAoJWEwKQorCWNsci5iCTB4MiglYTApCisKKwltb3YudwkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CSYweDAwMDAsJWNjCisJbW92bS5sCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbW92cC53CSVkMCwoMHgwLCVhMCkKKworCW1vdi53CSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJJjB4N2ZmZixTUkVHUyglYTYpCisKKwltb3YuYgkweDIoJWEwKSwlZDEKKwlsc2wudwkmMHg4LCVkMQorCW1vdi5iCTB4MCglYTApLCVkMQorCisJY21wLncJJWQwLCVkMQorCWJuZS5sCWVycm9yCisKKwlic3IubAljaGtyZWdzCisJdHN0LmIJJWQwCisJYm5lLmwJZXJyb3IKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBtb3ZlcC53CSgweDAsJWEwKSwlZDAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbW92cF8zOgorCWFkZHEubAkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCURBVEEoJWE2KSwlYTAKKwltb3YuYgkmMHhhYSwweDAoJWEwKQorCW1vdi5iCSYweGFhLDB4MiglYTApCisKKwltb3YudwkmMHgwMDFmLElDQ1IoJWE2KQorCW1vdi53CSYweDAwMWYsJWNjCisJbW92bS5sCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbW92cC53CSgweDAsJWEwKSwlZDAKKworCW1vdi53CSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJJjB4N2ZmZixTUkVHUyglYTYpCisJbW92LncJJjB4YWFhYSxJUkVHUysweDIoJWE2KQorCisJbW92LncJJjB4YWFhYSwlZDEKKworCWNtcC53CSVkMCwlZDEKKwlibmUubAllcnJvcgorCisJYnNyLmwJY2hrcmVncworCXRzdC5iCSVkMAorCWJuZS5sCWVycm9yCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbW92ZXAubAklZDAsKDB4MCwlYTApICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK21vdnBfNDoKKwlhZGRxLmwJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQlEQVRBKCVhNiksJWEwCisJbW92LmwJJjB4YWFhYWFhYWEsJWQwCisJY2xyLmIJMHgwKCVhMCkKKwljbHIuYgkweDIoJWEwKQorCWNsci5iCTB4NCglYTApCisJY2xyLmIJMHg2KCVhMCkKKworCW1vdi53CSYweDAwMWYsSUNDUiglYTYpCisJbW92LncJJjB4MDAxZiwlY2MKKwltb3ZtLmwJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltb3ZwLmwJJWQwLCgweDAsJWEwKQorCisJbW92LncJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkmMHg3ZmZmLFNSRUdTKCVhNikKKworCW1vdi5iCTB4NiglYTApLCVkMQorCWxzbC5sCSYweDgsJWQxCisJbW92LmIJMHg0KCVhMCksJWQxCisJbHNsLmwJJjB4OCwlZDEKKwltb3YuYgkweDIoJWEwKSwlZDEKKwlsc2wubAkmMHg4LCVkMQorCW1vdi5iCTB4MCglYTApLCVkMQorCisJY21wLmwJJWQwLCVkMQorCWJuZS5sCWVycm9yCisKKwlic3IubAljaGtyZWdzCisJdHN0LmIJJWQwCisJYm5lLmwJZXJyb3IKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBtb3ZlcC5sCSVkMCwoMHgwLCVhMCkgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbW92cF81OgorCWFkZHEubAkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCURBVEErMHg0KCVhNiksJWEwCisJbW92LmwJJjB4YWFhYWFhYWEsJWQwCisJY2xyLmwJLTB4NCglYTApCisJY2xyLmwJKCVhMCkKKwljbHIubAkweDQoJWEwKQorCWNsci5sCTB4OCglYTApCisKKwltb3YudwkmMHgwMDFmLElDQ1IoJWE2KQorCW1vdi53CSYweDAwMWYsJWNjCisJbW92bS5sCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbW92cC5sCSVkMCwoMHgwLCVhMCkKKworCW1vdi53CSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJJjB4N2ZmZixTUkVHUyglYTYpCisKKwl0c3QubAktMHg0KCVhMCkKKwlibmUubAllcnJvcgorCXRzdC5sCTB4OCglYTApCisJYm5lLmwJZXJyb3IKKwljbXBpLmwJKCVhMCksJjB4YWEwMGFhMDAKKwlibmUubAllcnJvcgorCWNtcGkubAkweDQoJWEwKSwmMHhhYTAwYWEwMAorCWJuZS5sCWVycm9yCisKKwlic3IubAljaGtyZWdzCisJdHN0LmIJJWQwCisJYm5lLmwJZXJyb3IKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBtb3ZlcC5sCSgweDAsJWEwKSwlZDAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbW92cF82OgorCWFkZHEubAkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCURBVEEoJWE2KSwlYTAKKwltb3YuYgkmMHhhYSwweDAoJWEwKQorCW1vdi5iCSYweGFhLDB4MiglYTApCisJbW92LmIJJjB4YWEsMHg0KCVhMCkKKwltb3YuYgkmMHhhYSwweDYoJWEwKQorCisJbW92LncJJjB4MDAxZixJQ0NSKCVhNikKKwltb3YudwkmMHgwMDFmLCVjYworCW1vdm0ubAkmMHg3ZmZmLElSRUdTKCVhNikKKworCW1vdnAubAkoMHgwLCVhMCksJWQwCisKKwltb3YudwklY2MsU0NDUiglYTYpCisJbW92bS5sCSYweDdmZmYsU1JFR1MoJWE2KQorCW1vdi5sCSYweGFhYWFhYWFhLElSRUdTKCVhNikKKworCW1vdi5sCSYweGFhYWFhYWFhLCVkMQorCisJY21wLmwJJWQwLCVkMQorCWJuZS5sCWVycm9yCisKKwlic3IubAljaGtyZWdzCisJdHN0LmIJJWQwCisJYm5lLmwJZXJyb3IKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBtb3ZlcC53CSVkNywoMHgwLCVhMCkgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbW92cF83OgorCWFkZHEubAkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCURBVEEoJWE2KSwlYTAKKwltb3YudwkmMHhhYWFhLCVkNworCWNsci5iCTB4MCglYTApCisJY2xyLmIJMHgyKCVhMCkKKworCW1vdi53CSYweDAwMWYsSUNDUiglYTYpCisJbW92LncJJjB4MDAxZiwlY2MKKwltb3ZtLmwJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltb3ZwLncJJWQ3LCgweDAsJWEwKQorCisJbW92LncJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkmMHg3ZmZmLFNSRUdTKCVhNikKKworCW1vdi5iCTB4MiglYTApLCVkMQorCWxzbC53CSYweDgsJWQxCisJbW92LmIJMHgwKCVhMCksJWQxCisKKwljbXAudwklZDcsJWQxCisJYm5lLmwJZXJyb3IKKworCWJzci5sCWNoa3JlZ3MKKwl0c3QuYgklZDAKKwlibmUubAllcnJvcgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIG1vdmVwLncJKDB4MCwlYTApLCVkNyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCittb3ZwXzg6CisJYWRkcS5sCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJREFUQSglYTYpLCVhMAorCW1vdi5iCSYweGFhLDB4MCglYTApCisJbW92LmIJJjB4YWEsMHgyKCVhMCkKKworCW1vdi53CSYweDAwMWYsSUNDUiglYTYpCisJbW92LncJJjB4MDAxZiwlY2MKKwltb3ZtLmwJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltb3ZwLncJKDB4MCwlYTApLCVkNworCisJbW92LncJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkmMHg3ZmZmLFNSRUdTKCVhNikKKwltb3YudwkmMHhhYWFhLElSRUdTKzMwKCVhNikKKworCW1vdi53CSYweGFhYWEsJWQxCisKKwljbXAudwklZDcsJWQxCisJYm5lLmwJZXJyb3IKKworCWJzci5sCWNoa3JlZ3MKKwl0c3QuYgklZDAKKwlibmUubAllcnJvcgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIG1vdmVwLncJJWQwLCgweDAsJWEwKSAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCittb3ZwXzk6CisJYWRkcS5sCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJREFUQSglYTYpLCVhMAorCW1vdi53CSYweGFhYWEsJWQwCisJY2xyLmIJMHgwKCVhMCkKKwljbHIuYgkweDIoJWEwKQorCisJbW92LncJJjB4MDAxZixJQ0NSKCVhNikKKwltb3YudwkmMHgwMDFmLCVjYworCW1vdm0ubAkmMHg3ZmZmLElSRUdTKCVhNikKKworCW1vdnAudwklZDAsKDB4MCwlYTApCisKKwltb3YudwklY2MsU0NDUiglYTYpCisJbW92bS5sCSYweDdmZmYsU1JFR1MoJWE2KQorCisJbW92LmIJMHgyKCVhMCksJWQxCisJbHNsLncJJjB4OCwlZDEKKwltb3YuYgkweDAoJWEwKSwlZDEKKworCWNtcC53CSVkMCwlZDEKKwlibmUubAllcnJvcgorCisJYnNyLmwJY2hrcmVncworCXRzdC5iCSVkMAorCWJuZS5sCWVycm9yCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbW92ZXAudwklZDAsKDB4OCwlYTApICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK21vdnBfMTA6CisJYWRkcS5sCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJREFUQSglYTYpLCVhMAorCW1vdi53CSYweGFhYWEsJWQwCisJY2xyLmIJMHgwKzB4OCglYTApCisJY2xyLmIJMHgyKzB4OCglYTApCisKKwltb3YudwkmMHgwMDFmLElDQ1IoJWE2KQorCW1vdi53CSYweDFmLCVjYworCW1vdm0ubAkmMHg3ZmZmLElSRUdTKCVhNikKKworCW1vdnAudwklZDAsKDB4OCwlYTApCisKKwltb3YudwklY2MsU0NDUiglYTYpCisJbW92bS5sCSYweDdmZmYsU1JFR1MoJWE2KQorCisJbW92LmIJMHgyKzB4OCglYTApLCVkMQorCWxzbC53CSYweDgsJWQxCisJbW92LmIJMHgwKzB4OCglYTApLCVkMQorCisJY21wLncJJWQwLCVkMQorCWJuZS5sCWVycm9yCisKKwlic3IubAljaGtyZWdzCisJdHN0LmIJJWQwCisJYm5lLmwJZXJyb3IKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBtb3ZlcC53CSgweDgsJWEwKSwlZDAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbW92cF8xMToKKwlhZGRxLmwJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQlEQVRBKCVhNiksJWEwCisJbW92LmIJJjB4YWEsMHgwKzB4OCglYTApCisJbW92LmIJJjB4YWEsMHgyKzB4OCglYTApCisKKwltb3YudwkmMHgwMDFmLElDQ1IoJWE2KQorCW1vdi53CSYweDFmLCVjYworCW1vdm0ubAkmMHg3ZmZmLElSRUdTKCVhNikKKworCW1vdnAudwkoMHg4LCVhMCksJWQwCisKKwltb3YudwklY2MsU0NDUiglYTYpCisJbW92bS5sCSYweDdmZmYsU1JFR1MoJWE2KQorCW1vdi53CSYweGFhYWEsSVJFR1MrMHgyKCVhNikKKworCW1vdi53CSYweGFhYWEsJWQxCisKKwljbXAudwklZDAsJWQxCisJYm5lLmwJZXJyb3IKKworCWJzci5sCWNoa3JlZ3MKKwl0c3QuYgklZDAKKwlibmUubAllcnJvcgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIG1vdmVwLmwJJWQwLCgweDgsJWEwKSAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCittb3ZwXzEyOgorCWFkZHEubAkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCURBVEEoJWE2KSwlYTAKKwltb3YubAkmMHhhYWFhYWFhYSwlZDAKKwljbHIuYgkweDArMHg4KCVhMCkKKwljbHIuYgkweDIrMHg4KCVhMCkKKwljbHIuYgkweDQrMHg4KCVhMCkKKwljbHIuYgkweDYrMHg4KCVhMCkKKworCW1vdi53CSYweDAwMWYsSUNDUiglYTYpCisJbW92LncJJjB4MWYsJWNjCisJbW92bS5sCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbW92cC5sCSVkMCwoMHg4LCVhMCkKKworCW1vdi53CSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJJjB4N2ZmZixTUkVHUyglYTYpCisKKwltb3YuYgkweDYrMHg4KCVhMCksJWQxCisJbHNsLmwJJjB4OCwlZDEKKwltb3YuYgkweDQrMHg4KCVhMCksJWQxCisJbHNsLmwJJjB4OCwlZDEKKwltb3YuYgkweDIrMHg4KCVhMCksJWQxCisJbHNsLmwJJjB4OCwlZDEKKwltb3YuYgkweDArMHg4KCVhMCksJWQxCisKKwljbXAubAklZDAsJWQxCisJYm5lLmwJZXJyb3IKKworCWJzci5sCWNoa3JlZ3MKKwl0c3QuYgklZDAKKwlibmUubAllcnJvcgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIG1vdmVwLmwJKDB4OCwlYTApLCVkMCAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCittb3ZwXzEzOgorCWFkZHEubAkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCURBVEEoJWE2KSwlYTAKKwltb3YuYgkmMHhhYSwweDArMHg4KCVhMCkKKwltb3YuYgkmMHhhYSwweDIrMHg4KCVhMCkKKwltb3YuYgkmMHhhYSwweDQrMHg4KCVhMCkKKwltb3YuYgkmMHhhYSwweDYrMHg4KCVhMCkKKworCW1vdi53CSYweDAwMWYsSUNDUiglYTYpCisJbW92LncJJjB4MWYsJWNjCisJbW92bS5sCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbW92cC5sCSgweDgsJWEwKSwlZDAKKworCW1vdi53CSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJJjB4N2ZmZixTUkVHUyglYTYpCisJbW92LmwJJjB4YWFhYWFhYWEsSVJFR1MoJWE2KQorCisJbW92LmwJJjB4YWFhYWFhYWEsJWQxCisKKwljbXAubAklZDAsJWQxCisJYm5lLmwJZXJyb3IKKworCWJzci5sCWNoa3JlZ3MKKwl0c3QuYgklZDAKKwlibmUubAllcnJvcgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBtb3ZlcC53CSVkMCwoLTB4OCwlYTApICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCittb3ZwXzE0OgorCWFkZHEubAkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCURBVEErMHg4KCVhNiksJWEwCisJbW92LncJJjB4YWFhYSwlZDAKKwljbHIuYgkweDAtMHg4KCVhMCkKKwljbHIuYgkweDItMHg4KCVhMCkKKworCW1vdi53CSYweDAwMWYsSUNDUiglYTYpCisJbW92LncJJjB4MWYsJWNjCisJbW92bS5sCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbW92cC53CSVkMCwoLTB4OCwlYTApCisKKwltb3YudwklY2MsU0NDUiglYTYpCisJbW92bS5sCSYweDdmZmYsU1JFR1MoJWE2KQorCisJbW92LmIJMHgyLTB4OCglYTApLCVkMQorCWxzbC53CSYweDgsJWQxCisJbW92LmIJMHgwLTB4OCglYTApLCVkMQorCisJY21wLncJJWQwLCVkMQorCWJuZS5sCWVycm9yCisKKwlic3IubAljaGtyZWdzCisJdHN0LmIJJWQwCisJYm5lLmwJZXJyb3IKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbW92ZXAudwkoLTB4OCwlYTApLCVkMCAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbW92cF8xNToKKwlhZGRxLmwJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQlEQVRBKzB4OCglYTYpLCVhMAorCW1vdi5iCSYweGFhLDB4MC0weDgoJWEwKQorCW1vdi5iCSYweGFhLDB4Mi0weDgoJWEwKQorCisJbW92LncJJjB4MDAxZixJQ0NSKCVhNikKKwltb3YudwkmMHgxZiwlY2MKKwltb3ZtLmwJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltb3ZwLncJKC0weDgsJWEwKSwlZDAKKworCW1vdi53CSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJJjB4N2ZmZixTUkVHUyglYTYpCisJbW92LncJJjB4YWFhYSxJUkVHUysweDIoJWE2KQorCisJbW92LncJJjB4YWFhYSwlZDEKKworCWNtcC53CSVkMCwlZDEKKwlibmUubAllcnJvcgorCisJYnNyLmwJY2hrcmVncworCXRzdC5iCSVkMAorCWJuZS5sCWVycm9yCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIG1vdmVwLmwJJWQwLCgtMHg4LCVhMCkgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK21vdnBfMTY6CisJYWRkcS5sCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJREFUQSsweDgoJWE2KSwlYTAKKwltb3YubAkmMHhhYWFhYWFhYSwlZDAKKwljbHIuYgkweDAtMHg4KCVhMCkKKwljbHIuYgkweDItMHg4KCVhMCkKKwljbHIuYgkweDQtMHg4KCVhMCkKKwljbHIuYgkweDgtMHg4KCVhMCkKKworCW1vdi53CSYweDAwMWYsSUNDUiglYTYpCisJbW92LncJJjB4MWYsJWNjCisJbW92bS5sCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbW92cC5sCSVkMCwoLTB4OCwlYTApCisKKwltb3YudwklY2MsU0NDUiglYTYpCisJbW92bS5sCSYweDdmZmYsU1JFR1MoJWE2KQorCisJbW92LmIJMHg2LTB4OCglYTApLCVkMQorCWxzbC5sCSYweDgsJWQxCisJbW92LmIJMHg0LTB4OCglYTApLCVkMQorCWxzbC5sCSYweDgsJWQxCisJbW92LmIJMHgyLTB4OCglYTApLCVkMQorCWxzbC5sCSYweDgsJWQxCisJbW92LmIJMHgwLTB4OCglYTApLCVkMQorCisJY21wLmwJJWQwLCVkMQorCWJuZS5sCWVycm9yCisKKwlic3IubAljaGtyZWdzCisJdHN0LmIJJWQwCisJYm5lLmwJZXJyb3IKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbW92ZXAubAkoLTB4OCwlYTApLCVkMCAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbW92cF8xNzoKKwlhZGRxLmwJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQlEQVRBKzB4OCglYTYpLCVhMAorCW1vdi5iCSYweGFhLDB4MC0weDgoJWEwKQorCW1vdi5iCSYweGFhLDB4Mi0weDgoJWEwKQorCW1vdi5iCSYweGFhLDB4NC0weDgoJWEwKQorCW1vdi5iCSYweGFhLDB4OC0weDgoJWEwKQorCisJbW92LncJJjB4MDAxZixJQ0NSKCVhNikKKwltb3YudwkmMHgxZiwlY2MKKwltb3ZtLmwJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltb3ZwLmwJKC0weDgsJWEwKSwlZDAKKworCW1vdi53CSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJJjB4N2ZmZixTUkVHUyglYTYpCisJbW92LmwJJjB4YWFhYWFhYWEsSVJFR1MoJWE2KQorCisJbW92LmwJJjB4YWFhYWFhYWEsJWQxCisKKwljbXAubAklZDAsJWQxCisJYm5lLmwJZXJyb3IKKworCWJzci5sCWNoa3JlZ3MKKwl0c3QuYgklZDAKKwlibmUubAllcnJvcgorCisJbW92LmwJVEVTVENUUiglYTYpLCVkMQorCWNsci5sCSVkMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkaXZ1bF9zdHI6CisJc3RyaW5nCQkiXHQ2NC1iaXQgZGl2aWRlLi4uIgorCisJYWxpZ24JCTB4NAorZGl2dWxfMDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKyMJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworIwljbHIubAkJJWQxCisjCW1vdi5sCQkmMHg5OTk5OTk5OSwlZDIKKyMJbW92LmwJCSYweDg4ODg4ODg4LCVkMworCisjCW1vdi53CQkmMHgwMDFlLElDQ1IoJWE2KQorIwltb3YudwkJJjB4MDAxZiwlY2MKKyMJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworIwlkaXZ1LmwJCSVkMSwlZDI6JWQzCisKKyMJbW92LncJCSVjYyxTQ0NSKCVhNikKKyMJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworIwlic3IubAkJY2hrcmVncworIwl0c3QuYgkJJWQwCisjCWJuZS5sCQllcnJvcgorCitkaXZ1bF8xOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJjB4MDAwMDAwMDEsJWQxCisJbW92LmwJCSYweDAwMDAwMDAwLCVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMCwlZDMKKworCW1vdi53CQkmMHgwMDE0LElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDFmLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwlkaXZ1LmwJCSVkMSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZGl2dWxfMjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSYweDQ0NDQ0NDQ0LCVkMQorCW1vdi5sCQkmMHgwMDAwMDAwMCwlZDIKKwltb3YubAkJJjB4NTU1NTU1NTUsJWQzCisKKwltb3YudwkJJjB4MDAxMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAxZiwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJZGl2dS5sCQklZDEsJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgxMTExMTExMSxJUkVHUysweDgoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwMSxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2RpdnVsXzM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQkmMHg1NTU1NTU1NSwlZDEKKwltb3YubAkJJjB4MDAwMDAwMDAsJWQyCisJbW92LmwJCSYweDQ0NDQ0NDQ0LCVkMworCisJbW92LncJCSYweDAwMTQsSUNDUiglYTYpCisJbW92LncJCSYweDAwMWYsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWRpdnUubAkJJWQxLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4NDQ0NDQ0NDQsSVJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDAsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitkaXZ1bF80OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJjB4MTExMTExMTEsJWQxCisJbW92LmwJCSYweDQ0NDQ0NDQ0LCVkMgorCW1vdi5sCQkmMHg0NDQ0NDQ0NCwlZDMKKworCW1vdi53CQkmMHgwMDFlLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDFkLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwlkaXZ1LmwJCSVkMSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZGl2dWxfNToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSYweGZmZmZmZmZlLCVkMQorCW1vdi5sCQkmMHgwMDAwMDAwMSwlZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisKKwltb3YudwkJJjB4MDAxZSxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAxZCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJZGl2cy5sCQklZDEsJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2RpdnVsXzY6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQkmMHhmZmZmZmZmZSwlZDEKKwltb3YubAkJJjB4MDAwMDAwMDEsJWQyCisJbW92LmwJCSYweDAwMDAwMDAwLCVkMworCisJbW92LncJCSYweDAwMTgsSUNDUiglYTYpCisJbW92LncJCSYweDAwMWQsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWRpdnMubAkJJWQxLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDAsSVJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4ODAwMDAwMDAsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitkaXZ1bF83OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQxCisJbW92LmwJCSYweDAwMDAwMDAxLCVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMCwlZDMKKworCW1vdi53CQkmMHgwMDFlLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDFkLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwlkaXZzLmwJCSVkMSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZGl2dWxfODoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSYweGZmZmZmZmZmLCVkMQorCW1vdi5sCQkmMHhmZmZmZmZmZSwlZDIKKwltb3YubAkJJjB4ZmZmZmZmZmYsJWQzCisKKwltb3YudwkJJjB4MDAwOCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJZGl2dS5sCQklZDEsJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2RpdnVsXzk6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQkmMHhmZmZmZmZmZiwlZDEKKwltb3YubAkJJjB4ZmZmZmZmZmUsJWQyCisJbW92LmwJCSYweGZmZmZmZmZmLCVkMworCisJbW92LncJCSYweDAwMDgsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWRpdnUubAkJJjB4ZmZmZmZmZmYsJWQyOiVkMgorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHhmZmZmZmZmZixJUkVHUysweDgoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2RpdnVsXzEwOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJjB4MDAwMGZmZmYsJWQxCisJbW92LmwJCSYweDAwMDAwMDAxLCVkMgorCW1vdi5sCQkmMHg1NTU1NTU1NSwlZDMKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwlkaXZ1LmwJCSVkMSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDBhYWFiLElSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweDAwMDE1NTU2LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCW1vdi5sCQlURVNUQ1RSKCVhNiksJWQxCisJY2xyLmwJCSVkMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjYXNfc3RyOgorCXN0cmluZwkJIlx0Y2FzLi4uIgorCisJYWxpZ24JCTB4NAorY2FzMDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCQlEQVRBKzB4MSglYTYpLCVhMAorCisJbW92LncJCSYweGFhYWEsKCVhMCkKKworCW1vdi53CQkmMHhhYWFhLCVkMQorCW1vdi53CQkmMHhiYmJiLCVkMgorCisJbW92LncJCSYweDAwMTQsSUNDUiglYTYpCisJbW92LncJCSYweDAwMTAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNhcy53CQklZDEsJWQyLCglYTApCQkJIyBEYyxEdSw8ZWE+CisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdi53CQkoJWEwKSwlZDMKKwltb3YudwkJJjB4YmJiYixJUkVHUysweGMrMHgyKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2NhczE6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQkJREFUQSsweDEoJWE2KSwlYTAKKworCW1vdi53CQkmMHhlZWVlLCglYTApCisKKwltb3YudwkJJjB4MDAwMGFhYWEsJWQxCisJbW92LncJCSYweDAwMDBiYmJiLCVkMgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNhcy53CQklZDEsJWQyLCglYTApCQkJIyBEYyxEdSw8ZWE+CisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdi53CQkoJWEwKSwlZDMKKwltb3YudwkJJjB4ZWVlZSxJUkVHUysweDQrMHgyKCVhNikKKwltb3YudwkJJjB4ZWVlZSxJUkVHUysweGMrMHgyKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2NhczI6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQkJREFUQSsweDIoJWE2KSwlYTAKKworCW1vdi5sCQkmMHhhYWFhYWFhYSwoJWEwKQorCisJbW92LmwJCSYweGFhYWFhYWFhLCVkMQorCW1vdi5sCQkmMHhiYmJiYmJiYiwlZDIKKworCW1vdi53CQkmMHgwMDA0LElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljYXMubAkJJWQxLCVkMiwoJWEwKQkJCSMgRGMsRHUsPGVhPgorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3YubAkJKCVhMCksJWQzCisJbW92LmwJCSYweGJiYmJiYmJiLElSRUdTKzB4YyglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjYXMzOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJCURBVEErMHgyKCVhNiksJWEwCisKKwltb3YubAkJJjB4ZWVlZWVlZWUsKCVhMCkKKworCW1vdi5sCQkmMHhhYWFhYWFhYSwlZDEKKwltb3YubAkJJjB4YmJiYmJiYmIsJWQyCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY2FzLmwJCSVkMSwlZDIsKCVhMCkJCQkjIERjLER1LDxlYT4KKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92LmwJCSglYTApLCVkMworCW1vdi5sCQkmMHhlZWVlZWVlZSxJUkVHUysweDQoJWE2KQorCW1vdi5sCQkmMHhlZWVlZWVlZSxJUkVHUysweGMoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY2FzNDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCQlEQVRBKzB4MSglYTYpLCVhMAorCisJbW92LmwJCSYweGFhYWFhYWFhLCglYTApCisKKwltb3YubAkJJjB4YWFhYWFhYWEsJWQxCisJbW92LmwJCSYweGJiYmJiYmJiLCVkMgorCisJbW92LncJCSYweDAwMDQsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNhcy5sCQklZDEsJWQyLCglYTApCQkJIyBEYyxEdSw8ZWE+CisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdi5sCQkoJWEwKSwlZDMKKwltb3YubAkJJjB4YmJiYmJiYmIsSVJFR1MrMHhjKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2NhczU6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQkJREFUQSsweDEoJWE2KSwlYTAKKworCW1vdi5sCQkmMHg3ZmZmZmZmZiwoJWEwKQorCisJbW92LmwJCSYweDgwMDAwMDAwLCVkMQorCW1vdi5sCQkmMHhiYmJiYmJiYiwlZDIKKworCW1vdi53CQkmMHgwMDFiLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDEwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljYXMubAkJJWQxLCVkMiwoJWEwKQkJCSMgRGMsRHUsPGVhPgorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3YubAkJKCVhMCksJWQzCisJbW92LmwJCSYweDdmZmZmZmZmLElSRUdTKzB4NCglYTYpCisJbW92LmwJCSYweDdmZmZmZmZmLElSRUdTKzB4YyglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisJbW92LmwJCVRFU1RDVFIoJWE2KSwlZDEKKwljbHIubAkJJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NhczJfc3RyOgorCXN0cmluZwkJIlx0Y2FzMi4uLiIKKworCWFsaWduCQkweDQKK2NhczIwOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJCURBVEErMHgwKCVhNiksJWEwCisJbGVhCQlEQVRBKzB4NCglYTYpLCVhMQorCisJbW92LmwJCSYweGFhYWFhYWFhLCglYTApCisJbW92LmwJCSYweGJiYmJiYmJiLCglYTEpCisKKwltb3YubAkJJjB4YWFhYWFhYWEsJWQxCisJbW92LmwJCSYweGJiYmJiYmJiLCVkMgorCW1vdi5sCQkmMHhjY2NjY2NjYywlZDMKKwltb3YubAkJJjB4ZGRkZGRkZGQsJWQ0CisKKwltb3YudwkJJjB4MDAxNCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAxMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY2FzMi5sCQklZDE6JWQyLCVkMzolZDQsKCVhMCk6KCVhMSkJIyBEYzE6RGMyLER1MTpEdTIsKFJuMSk6KFJuMikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92LmwJCSglYTApLCVkNQorCW1vdi5sCQkoJWExKSwlZDYKKwltb3YubAkJJjB4Y2NjY2NjY2MsSVJFR1MrMHgxNCglYTYpCisJbW92LmwJCSYweGRkZGRkZGRkLElSRUdTKzB4MTgoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY2FzMjE6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQkJREFUQSsweDEoJWE2KSwlYTAKKwlsZWEJCURBVEErMHg1KCVhNiksJWExCisKKwltb3YubAkJJjB4YWFhYWFhYWEsKCVhMCkKKwltb3YubAkJJjB4YmJiYmJiYmIsKCVhMSkKKworCW1vdi5sCQkmMHhhYWFhYWFhYSwlZDEKKwltb3YubAkJJjB4YmJiYmJiYmIsJWQyCisJbW92LmwJCSYweGNjY2NjY2NjLCVkMworCW1vdi5sCQkmMHhkZGRkZGRkZCwlZDQKKworCW1vdi53CQkmMHgwMDE0LElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDEwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljYXMyLmwJCSVkMTolZDIsJWQzOiVkNCwoJWEwKTooJWExKQkjIERjMTpEYzIsRHUxOkR1MiwoUm4xKTooUm4yKQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3YubAkJKCVhMCksJWQ1CisJbW92LmwJCSglYTEpLCVkNgorCW1vdi5sCQkmMHhjY2NjY2NjYyxJUkVHUysweDE0KCVhNikKKwltb3YubAkJJjB4ZGRkZGRkZGQsSVJFR1MrMHgxOCglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjYXMyMjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCQlEQVRBKzB4MiglYTYpLCVhMAorCWxlYQkJREFUQSsweDYoJWE2KSwlYTEKKworCW1vdi5sCQkmMHhhYWFhYWFhYSwoJWEwKQorCW1vdi5sCQkmMHhiYmJiYmJiYiwoJWExKQorCisJbW92LmwJCSYweGFhYWFhYWFhLCVkMQorCW1vdi5sCQkmMHhiYmJiYmJiYiwlZDIKKwltb3YubAkJJjB4Y2NjY2NjY2MsJWQzCisJbW92LmwJCSYweGRkZGRkZGRkLCVkNAorCisJbW92LncJCSYweDAwMTQsSUNDUiglYTYpCisJbW92LncJCSYweDAwMTAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNhczIubAkJJWQxOiVkMiwlZDM6JWQ0LCglYTApOiglYTEpCSMgRGMxOkRjMixEdTE6RHUyLChSbjEpOihSbjIpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdi5sCQkoJWEwKSwlZDUKKwltb3YubAkJKCVhMSksJWQ2CisJbW92LmwJCSYweGNjY2NjY2NjLElSRUdTKzB4MTQoJWE2KQorCW1vdi5sCQkmMHhkZGRkZGRkZCxJUkVHUysweDE4KCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2NhczIzOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJCURBVEErMHgwKCVhNiksJWEwCisJbGVhCQlEQVRBKzB4NCglYTYpLCVhMQorCisJbW92LmwJCSYweGVlZWVlZWVlLCglYTApCisJbW92LmwJCSYweGJiYmJiYmJiLCglYTEpCisKKwltb3YubAkJJjB4YWFhYWFhYWEsJWQxCisJbW92LmwJCSYweGJiYmJiYmJiLCVkMgorCW1vdi5sCQkmMHhjY2NjY2NjYywlZDMKKwltb3YubAkJJjB4ZGRkZGRkZGQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY2FzMi5sCQklZDE6JWQyLCVkMzolZDQsKCVhMCk6KCVhMSkJIyBEYzE6RGMyLER1MTpEdTIsKFJuMSk6KFJuMikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92LmwJCSglYTApLCVkNQorCW1vdi5sCQkoJWExKSwlZDYKKwltb3YubAkJJjB4ZWVlZWVlZWUsSVJFR1MrMHg0KCVhNikKKwltb3YubAkJJjB4YmJiYmJiYmIsSVJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4ZWVlZWVlZWUsSVJFR1MrMHgxNCglYTYpCisJbW92LmwJCSYweGJiYmJiYmJiLElSRUdTKzB4MTgoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY2FzMjQ6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQkJREFUQSsweDEoJWE2KSwlYTAKKwlsZWEJCURBVEErMHg1KCVhNiksJWExCisKKwltb3YubAkJJjB4ZWVlZWVlZWUsKCVhMCkKKwltb3YubAkJJjB4YmJiYmJiYmIsKCVhMSkKKworCW1vdi5sCQkmMHhhYWFhYWFhYSwlZDEKKwltb3YubAkJJjB4YmJiYmJiYmIsJWQyCisJbW92LmwJCSYweGNjY2NjY2NjLCVkMworCW1vdi5sCQkmMHhkZGRkZGRkZCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljYXMyLmwJCSVkMTolZDIsJWQzOiVkNCwoJWEwKTooJWExKQkjIERjMTpEYzIsRHUxOkR1MiwoUm4xKTooUm4yKQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3YubAkJKCVhMCksJWQ1CisJbW92LmwJCSglYTEpLCVkNgorCW1vdi5sCQkmMHhlZWVlZWVlZSxJUkVHUysweDQoJWE2KQorCW1vdi5sCQkmMHhiYmJiYmJiYixJUkVHUysweDgoJWE2KQorCW1vdi5sCQkmMHhlZWVlZWVlZSxJUkVHUysweDE0KCVhNikKKwltb3YubAkJJjB4YmJiYmJiYmIsSVJFR1MrMHgxOCglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjYXMyNToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCQlEQVRBKzB4MiglYTYpLCVhMAorCWxlYQkJREFUQSsweDYoJWE2KSwlYTEKKworCW1vdi5sCQkmMHhlZWVlZWVlZSwoJWEwKQorCW1vdi5sCQkmMHhiYmJiYmJiYiwoJWExKQorCisJbW92LmwJCSYweGFhYWFhYWFhLCVkMQorCW1vdi5sCQkmMHhiYmJiYmJiYiwlZDIKKwltb3YubAkJJjB4Y2NjY2NjY2MsJWQzCisJbW92LmwJCSYweGRkZGRkZGRkLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNhczIubAkJJWQxOiVkMiwlZDM6JWQ0LCglYTApOiglYTEpCSMgRGMxOkRjMixEdTE6RHUyLChSbjEpOihSbjIpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdi5sCQkoJWEwKSwlZDUKKwltb3YubAkJKCVhMSksJWQ2CisJbW92LmwJCSYweGVlZWVlZWVlLElSRUdTKzB4NCglYTYpCisJbW92LmwJCSYweGJiYmJiYmJiLElSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweGVlZWVlZWVlLElSRUdTKzB4MTQoJWE2KQorCW1vdi5sCQkmMHhiYmJiYmJiYixJUkVHUysweDE4KCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2NhczI2OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJCURBVEErMHgwKCVhNiksJWEwCisJbGVhCQlEQVRBKzB4NCglYTYpLCVhMQorCisJbW92LmwJCSYweGFhYWFhYWFhLCglYTApCisJbW92LmwJCSYweGVlZWVlZWVlLCglYTEpCisKKwltb3YubAkJJjB4YWFhYWFhYWEsJWQxCisJbW92LmwJCSYweGJiYmJiYmJiLCVkMgorCW1vdi5sCQkmMHhjY2NjY2NjYywlZDMKKwltb3YubAkJJjB4ZGRkZGRkZGQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY2FzMi5sCQklZDE6JWQyLCVkMzolZDQsKCVhMCk6KCVhMSkJIyBEYzE6RGMyLER1MTpEdTIsKFJuMSk6KFJuMikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92LmwJCSglYTApLCVkNQorCW1vdi5sCQkoJWExKSwlZDYKKwltb3YubAkJJjB4YWFhYWFhYWEsSVJFR1MrMHg0KCVhNikKKwltb3YubAkJJjB4ZWVlZWVlZWUsSVJFR1MrMHg4KCVhNikKKwltb3YubAkJJjB4YWFhYWFhYWEsSVJFR1MrMHgxNCglYTYpCisJbW92LmwJCSYweGVlZWVlZWVlLElSRUdTKzB4MTgoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY2FzMjc6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWxlYQkJREFUQSsweDEoJWE2KSwlYTAKKwlsZWEJCURBVEErMHg1KCVhNiksJWExCisKKwltb3YubAkJJjB4YWFhYWFhYWEsKCVhMCkKKwltb3YubAkJJjB4ZWVlZWVlZWUsKCVhMSkKKworCW1vdi5sCQkmMHhhYWFhYWFhYSwlZDEKKwltb3YubAkJJjB4YmJiYmJiYmIsJWQyCisJbW92LmwJCSYweGNjY2NjY2NjLCVkMworCW1vdi5sCQkmMHhkZGRkZGRkZCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljYXMyLmwJCSVkMTolZDIsJWQzOiVkNCwoJWEwKTooJWExKQkjIERjMTpEYzIsRHUxOkR1MiwoUm4xKTooUm4yKQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3YubAkJKCVhMCksJWQ1CisJbW92LmwJCSglYTEpLCVkNgorCW1vdi5sCQkmMHhhYWFhYWFhYSxJUkVHUysweDQoJWE2KQorCW1vdi5sCQkmMHhlZWVlZWVlZSxJUkVHUysweDgoJWE2KQorCW1vdi5sCQkmMHhhYWFhYWFhYSxJUkVHUysweDE0KCVhNikKKwltb3YubAkJJjB4ZWVlZWVlZWUsSVJFR1MrMHgxOCglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjYXMyODoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbGVhCQlEQVRBKzB4MiglYTYpLCVhMAorCWxlYQkJREFUQSsweDYoJWE2KSwlYTEKKworCW1vdi5sCQkmMHhhYWFhYWFhYSwoJWEwKQorCW1vdi5sCQkmMHg3ZmZmZmZmZiwoJWExKQorCisJbW92LmwJCSYweGFhYWFhYWFhLCVkMQorCW1vdi5sCQkmMHg4MDAwMDAwMCwlZDIKKwltb3YubAkJJjB4Y2NjY2NjY2MsJWQzCisJbW92LmwJCSYweGRkZGRkZGRkLCVkNAorCisJbW92LncJCSYweDAwMGIsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNhczIubAkJJWQxOiVkMiwlZDM6JWQ0LCglYTApOiglYTEpCSMgRGMxOkRjMixEdTE6RHUyLChSbjEpOihSbjIpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdi5sCQkoJWEwKSwlZDUKKwltb3YubAkJKCVhMSksJWQ2CisJbW92LmwJCSYweGFhYWFhYWFhLElSRUdTKzB4NCglYTYpCisJbW92LmwJCSYweDdmZmZmZmZmLElSRUdTKzB4OCglYTYpCisJbW92LmwJCSYweGFhYWFhYWFhLElSRUdTKzB4MTQoJWE2KQorCW1vdi5sCQkmMHg3ZmZmZmZmZixJUkVHUysweDE4KCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2NhczI5OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJCURBVEErMHgwKCVhNiksJWEwCisJbGVhCQlEQVRBKzB4NCglYTYpLCVhMQorCisJbW92LncJCSYweGFhYWEsKCVhMCkKKwltb3YudwkJJjB4YmJiYiwoJWExKQorCisJbW92LncJCSYweGFhYWEsJWQxCisJbW92LncJCSYweGJiYmIsJWQyCisJbW92LncJCSYweGNjY2MsJWQzCisJbW92LncJCSYweGRkZGQsJWQ0CisKKwltb3YudwkJJjB4MDAxNCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAxMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY2FzMi53CQklZDE6JWQyLCVkMzolZDQsKCVhMCk6KCVhMSkJIyBEYzE6RGMyLER1MTpEdTIsKFJuMSk6KFJuMikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92LncJCSglYTApLCVkNQorCW1vdi53CQkoJWExKSwlZDYKKwltb3YudwkJJjB4Y2NjYyxJUkVHUysweDE0KzB4MiglYTYpCisJbW92LncJCSYweGRkZGQsSVJFR1MrMHgxOCsweDIoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY2FzMjEwOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJCURBVEErMHgxKCVhNiksJWEwCisJbGVhCQlEQVRBKzB4NSglYTYpLCVhMQorCisJbW92LncJCSYweGFhYWEsKCVhMCkKKwltb3YudwkJJjB4YmJiYiwoJWExKQorCisJbW92LncJCSYweGFhYWEsJWQxCisJbW92LncJCSYweGJiYmIsJWQyCisJbW92LncJCSYweGNjY2MsJWQzCisJbW92LncJCSYweGRkZGQsJWQ0CisKKwltb3YudwkJJjB4MDAwNCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY2FzMi53CQklZDE6JWQyLCVkMzolZDQsKCVhMCk6KCVhMSkJIyBEYzE6RGMyLER1MTpEdTIsKFJuMSk6KFJuMikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92LncJCSglYTApLCVkNQorCW1vdi53CQkoJWExKSwlZDYKKwltb3YudwkJJjB4Y2NjYyxJUkVHUysweDE0KzB4MiglYTYpCisJbW92LncJCSYweGRkZGQsSVJFR1MrMHgxOCsweDIoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY2FzMjExOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJCURBVEErMHgwKCVhNiksJWEwCisJbGVhCQlEQVRBKzB4NCglYTYpLCVhMQorCisJbW92LncJCSYweGVlZWUsKCVhMCkKKwltb3YudwkJJjB4YmJiYiwoJWExKQorCisJbW92LncJCSYweGFhYWEsJWQxCisJbW92LncJCSYweGJiYmIsJWQyCisJbW92LncJCSYweGNjY2MsJWQzCisJbW92LncJCSYweGRkZGQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY2FzMi53CQklZDE6JWQyLCVkMzolZDQsKCVhMCk6KCVhMSkJIyBEYzE6RGMyLER1MTpEdTIsKFJuMSk6KFJuMikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92LncJCSglYTApLCVkNQorCW1vdi53CQkoJWExKSwlZDYKKwltb3YudwkJJjB4ZWVlZSxJUkVHUysweDQrMHgyKCVhNikKKwltb3YudwkJJjB4YmJiYixJUkVHUysweDgrMHgyKCVhNikKKwltb3YudwkJJjB4ZWVlZSxJUkVHUysweDE0KzB4MiglYTYpCisJbW92LncJCSYweGJiYmIsSVJFR1MrMHgxOCsweDIoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY2FzMjEyOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJCURBVEErMHgxKCVhNiksJWEwCisJbGVhCQlEQVRBKzB4NSglYTYpLCVhMQorCisJbW92LncJCSYweGVlZWUsKCVhMCkKKwltb3YudwkJJjB4YmJiYiwoJWExKQorCisJbW92LncJCSYweGFhYWEsJWQxCisJbW92LncJCSYweGJiYmIsJWQyCisJbW92LncJCSYweGNjY2MsJWQzCisJbW92LncJCSYweGRkZGQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY2FzMi53CQklZDE6JWQyLCVkMzolZDQsKCVhMCk6KCVhMSkJIyBEYzE6RGMyLER1MTpEdTIsKFJuMSk6KFJuMikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92LncJCSglYTApLCVkNQorCW1vdi53CQkoJWExKSwlZDYKKwltb3YudwkJJjB4ZWVlZSxJUkVHUysweDQrMHgyKCVhNikKKwltb3YudwkJJjB4YmJiYixJUkVHUysweDgrMHgyKCVhNikKKwltb3YudwkJJjB4ZWVlZSxJUkVHUysweDE0KzB4MiglYTYpCisJbW92LncJCSYweGJiYmIsSVJFR1MrMHgxOCsweDIoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY2FzMjEzOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJCURBVEErMHgwKCVhNiksJWEwCisJbGVhCQlEQVRBKzB4NCglYTYpLCVhMQorCisJbW92LncJCSYweGFhYWEsKCVhMCkKKwltb3YudwkJJjB4ZWVlZSwoJWExKQorCisJbW92LncJCSYweGFhYWEsJWQxCisJbW92LncJCSYweGJiYmIsJWQyCisJbW92LncJCSYweGNjY2MsJWQzCisJbW92LncJCSYweGRkZGQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY2FzMi53CQklZDE6JWQyLCVkMzolZDQsKCVhMCk6KCVhMSkJIyBEYzE6RGMyLER1MTpEdTIsKFJuMSk6KFJuMikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92LncJCSglYTApLCVkNQorCW1vdi53CQkoJWExKSwlZDYKKwltb3YudwkJJjB4YWFhYSxJUkVHUysweDQrMHgyKCVhNikKKwltb3YudwkJJjB4ZWVlZSxJUkVHUysweDgrMHgyKCVhNikKKwltb3YudwkJJjB4YWFhYSxJUkVHUysweDE0KzB4MiglYTYpCisJbW92LncJCSYweGVlZWUsSVJFR1MrMHgxOCsweDIoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY2FzMjE0OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwlsZWEJCURBVEErMHgxKCVhNiksJWEwCisJbGVhCQlEQVRBKzB4NSglYTYpLCVhMQorCisJbW92LncJCSYweGFhYWEsKCVhMCkKKwltb3YudwkJJjB4N2ZmZiwoJWExKQorCisJbW92LncJCSYweGFhYWEsJWQxCisJbW92LncJCSYweDgwMDAsJWQyCisJbW92LncJCSYweGNjY2MsJWQzCisJbW92LncJCSYweGRkZGQsJWQ0CisKKwltb3YudwkJJjB4MDAxYixJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAxMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY2FzMi53CQklZDE6JWQyLCVkMzolZDQsKCVhMCk6KCVhMSkJIyBEYzE6RGMyLER1MTpEdTIsKFJuMSk6KFJuMikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92LncJCSglYTApLCVkNQorCW1vdi53CQkoJWExKSwlZDYKKwltb3YudwkJJjB4YWFhYSxJUkVHUysweDQrMHgyKCVhNikKKwltb3YudwkJJjB4N2ZmZixJUkVHUysweDgrMHgyKCVhNikKKwltb3YudwkJJjB4YWFhYSxJUkVHUysweDE0KzB4MiglYTYpCisJbW92LncJCSYweDdmZmYsSVJFR1MrMHgxOCsweDIoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCW1vdi5sCQlURVNUQ1RSKCVhNiksJWQxCisJY2xyLmwJCSVkMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjbXAyX3N0cjoKKwlzdHJpbmcJCSJcdGNtcDIsY2hrMi4uLiIKKworCWFsaWduCQkweDQKKyMgdW5zaWduZWQgLSBzbWFsbCxzbWFsbAorY21wMl8xOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YudwkJJjB4MjA0MCxEQVRBKCVhNikKKwltb3YubAkJJjB4MTExMTExMjAsJWQxCisKKwltb3YudwkJJjB4MDAwNCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY21wMi5iCQklZDEsREFUQSglYTYpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY21wMl8yOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YudwkJJjB4MjA0MCxEQVRBKCVhNikKKwltb3YubAkJJjB4MDAwMDAwNDAsJWExCisKKwltb3YudwkJJjB4MDAwNCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY21wMi5iCQklYTEsREFUQSglYTYpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY21wMl8zOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YudwkJJjB4MjA0MCxEQVRBKCVhNikKKwltb3YubAkJJjB4MTExMTExMzAsJWQxCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY2hrMi5iCQlEQVRBKCVhNiksJWQxCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY21wMl80OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YudwkJJjB4MjA0MCxEQVRBKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMTAsJWExCisKKwltb3YudwkJJjB4MDAwMSxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY21wMi5iCQklYTEsREFUQSglYTYpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY21wMl81OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YudwkJJjB4MjA0MCxEQVRBKCVhNikKKwltb3YubAkJJjB4MTExMTExNTAsJWQxCisKKwltb3YudwkJJjB4MDAwMSxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY21wMi5iCQklZDEsREFUQSglYTYpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY21wMl82OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YudwkJJjB4MjA0MCxEQVRBKCVhNikKKwltb3YubAkJJjB4MDAwMDAwOTAsJWExCisKKwltb3YudwkJJjB4MDAwMSxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY21wMi5iCQklYTEsREFUQSglYTYpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworIyB1bnNpZ25lZCAtIHNtYWxsLGxhcmdlCitjbXAyXzc6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQkmMHgyMDAwYTAwMCxEQVRBKCVhNikKKwltb3YubAkJJjB4MTExMTIwMDAsJWQxCisKKwltb3YudwkJJjB4MDAwNCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY21wMi53CQklZDEsREFUQSglYTYpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY21wMl84OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJjB4MjAwMGEwMDAsREFUQSglYTYpCisJbW92LmwJCSYweGZmZmZhMDAwLCVhMQorCisJbW92LncJCSYweDAwMDQsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNtcDIudwkJJWExLERBVEEoJWE2KQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2NtcDJfOToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSYweDIwMDBhMDAwLERBVEEoJWE2KQorCW1vdi5sCQkmMHgxMTExMzAwMCwlZDEKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljaGsyLncJCURBVEEoJWE2KSwlZDEKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjbXAyXzEwOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJjB4MjAwMGEwMDAsREFUQSglYTYpCisJbW92LmwJCSYweGZmZmY5MDAwLCVhMQorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNtcDIudwkJJWExLERBVEEoJWE2KQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2NtcDJfMTE6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQkmMHgyMDAwYTAwMCxEQVRBKCVhNikKKwltb3YubAkJJjB4MTExMTEwMDAsJWQxCisKKwltb3YudwkJJjB4MDAwMSxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY21wMi53CQklZDEsREFUQSglYTYpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY21wMl8xMjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSYweDIwMDBhMDAwLERBVEEoJWE2KQorCW1vdi5sCQkmMHhmZmZmYjAwMCwlYTEKKworCW1vdi53CQkmMHgwMDAxLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljbXAyLncJCSVhMSxEQVRBKCVhNikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCisjIHVuc2lnbmVkIC0gbGFyZ2UsbGFyZ2UKK2NtcDJfMTM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQkmMHhhMDAwMDAwMCxEQVRBKCVhNikKKwltb3YubAkJJjB4YzAwMDAwMDAsREFUQSsweDQoJWE2KQorCW1vdi5sCQkmMHhhMDAwMDAwMCwlZDEKKworCW1vdi53CQkmMHgwMDBjLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDA4LCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljbXAyLmwJCSVkMSxEQVRBKCVhNikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjbXAyXzE0OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJjB4YTAwMDAwMDAsREFUQSglYTYpCisJbW92LmwJCSYweGMwMDAwMDAwLERBVEErMHg0KCVhNikKKwltb3YubAkJJjB4YzAwMDAwMDAsJWExCisKKwltb3YudwkJJjB4MDAwYyxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwOCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY21wMi5sCQklYTEsREFUQSglYTYpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY21wMl8xNToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSYweGEwMDAwMDAwLERBVEEoJWE2KQorCW1vdi5sCQkmMHhjMDAwMDAwMCxEQVRBKzB4NCglYTYpCisJbW92LmwJCSYweGIwMDAwMDAwLCVkMQorCisJbW92LncJCSYweDAwMDgsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDgsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNoazIubAkJREFUQSglYTYpLCVkMQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2NtcDJfMTY6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQkmMHhhMDAwMDAwMCxEQVRBKCVhNikKKwltb3YubAkJJjB4YzAwMDAwMDAsREFUQSsweDQoJWE2KQorCW1vdi5sCQkmMHgxMDAwMDAwMCwlYTEKKworCW1vdi53CQkmMHgwMDA5LElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDA4LCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljbXAyLmwJCSVhMSxEQVRBKCVhNikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjbXAyXzE3OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJjB4YTAwMDAwMDAsREFUQSglYTYpCisJbW92LmwJCSYweGMwMDAwMDAwLERBVEErMHg0KCVhNikKKwltb3YubAkJJjB4OTAwMDAwMDAsJWQxCisKKwltb3YudwkJJjB4MDAwOSxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwOCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY21wMi5sCQklZDEsREFUQSglYTYpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY21wMl8xODoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSYweGEwMDAwMDAwLERBVEEoJWE2KQorCW1vdi5sCQkmMHhjMDAwMDAwMCxEQVRBKzB4NCglYTYpCisJbW92LmwJCSYweGQwMDAwMDAwLCVhMQorCisJbW92LncJCSYweDAwMDksSUNDUiglYTYpCisJbW92LncJCSYweDAwMDgsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNtcDIubAkJJWExLERBVEEoJWE2KQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKyMgc2lnbmVkIC0gbmVnYXRpdmUscG9zaXRpdmUKK2NtcDJfMTk6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi53CQkmMHhhMDQwLERBVEEoJWE2KQorCW1vdi5sCQkmMHgxMTExMTFhMCwlZDEKKworCW1vdi53CQkmMHgwMDA0LElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljbXAyLmIJCSVkMSxEQVRBKCVhNikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjbXAyXzIwOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YudwkJJjB4YTA0MCxEQVRBKCVhNikKKwltb3YubAkJJjB4MDAwMDAwNDAsJWExCisKKwltb3YudwkJJjB4MDAwNCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY2hrMi5iCQlEQVRBKCVhNiksJWExCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY21wMl8yMToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LncJCSYweGEwNDAsREFUQSglYTYpCisJbW92LmwJCSYweDExMTExMWIwLCVkMQorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNtcDIuYgkJJWQxLERBVEEoJWE2KQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2NtcDJfMjI6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi53CQkmMHhhMDQwLERBVEEoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAxMCwlYTEKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljbXAyLmIJCSVhMSxEQVRBKCVhNikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjbXAyXzIzOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YudwkJJjB4YTA0MCxEQVRBKCVhNikKKwltb3YubAkJJjB4MTExMTExOTAsJWQxCisKKwltb3YudwkJJjB4MDAwMSxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY21wMi5iCQklZDEsREFUQSglYTYpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY21wMl8yNDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LncJCSYweGEwNDAsREFUQSglYTYpCisJbW92LmwJCSYweDAwMDAwMDUwLCVhMQorCisJbW92LncJCSYweDAwMDEsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNtcDIuYgkJJWExLERBVEEoJWE2KQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKyMgc2lnbmVkIC0gbmVnYXRpdmUsbmVnYXRpdmUKK2NtcDJfMjU6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi53CQkmMHhhMGMwLERBVEEoJWE2KQorCW1vdi5sCQkmMHgxMTExMTFhMCwlZDEKKworCW1vdi53CQkmMHgwMDA0LElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljbXAyLmIJCSVkMSxEQVRBKCVhNikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjbXAyXzI2OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YudwkJJjB4YTBjMCxEQVRBKCVhNikKKwltb3YubAkJJjB4ZmZmZmZmYzAsJWExCisKKwltb3YudwkJJjB4MDAwNCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY21wMi5iCQklYTEsREFUQSglYTYpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY21wMl8yNzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LncJCSYweGEwYzAsREFUQSglYTYpCisJbW92LmwJCSYweDExMTExMWIwLCVkMQorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNoazIuYgkJREFUQSglYTYpLCVkMQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2NtcDJfMjg6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi53CQkmMHhhMGMwLERBVEEoJWE2KQorCW1vdi5sCQkmMHgxMTExMTE5MCwlYTEKKworCW1vdi53CQkmMHgwMDAxLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwljbXAyLmIJCSVhMSxEQVRBKCVhNikKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitjbXAyXzI5OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YudwkJJjB4YTBjMCxEQVRBKCVhNikKKwltb3YubAkJJjB4MTExMTExZDAsJWQxCisKKwltb3YudwkJJjB4MDAwMSxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJY21wMi5iCQklZDEsREFUQSglYTYpCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworY21wMl8zMDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LncJCSYweGEwYzAsREFUQSglYTYpCisJbW92LmwJCSYweDAwMDAwMDUwLCVhMQorCisJbW92LncJCSYweDAwMWIsSUNDUiglYTYpCisJbW92LncJCSYweDAwMWYsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCWNtcDIuYgkJJWExLERBVEEoJWE2KQorCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwltb3YubAkJVEVTVENUUiglYTYpLCVkMQorCWNsci5sCQklZDAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZWFfc3RyOgorCXN0cmluZwkJIlx0RWZmZWN0aXZlIGFkZHJlc3Nlcy4uLiIKKworCWFsaWduCQkweDQKK2VhXzA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKCVhMCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzE6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKCVhMCkrLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKwlsZWEJCUVBTUVNKzB4NCglYTYpLCVhMAorCW1vdi5sCQklYTAsSVJFR1MrMHgyMCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSsweDQoJWE2KSwlYTAKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCS0oJWEwKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCW1vdi5sCQklYTAsSVJFR1MrMHgyMCglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKzB4MTAwMCglYTYpLCVhMAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKC0weDEwMDAsJWEwKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfNDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglYTYpLCVhMAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAwMCwlYTApLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV81OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworIwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisjCWNsci5sCQklZDIKKyMJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCisjCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorIwltb3YudwkJJjB4MDAwMCwlY2MKKyMJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworIwltdWx1LmwJCUVBTUVNLncsJWQyOiVkMworCisjCW1vdi53CQklY2MsU0NDUiglYTYpCisjCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisjCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisjCWJzci5sCQljaGtyZWdzCisjCXRzdC5iCQklZDAKKyMJYm5lLmwJCWVycm9yCisKK2VhXzY6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisjCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKyMJY2xyLmwJCSVkMgorIwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisKKyMJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisjCW1vdi53CQkmMHgwMDAwLCVjYworIwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisjCW11bHUubAkJRUFNRU0ubCwlZDI6JWQzCisKKyMJbW92LncJCSVjYyxTQ0NSKCVhNikKKyMJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKyMJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKyMJYnNyLmwJCWNoa3JlZ3MKKyMJdHN0LmIJCSVkMAorIwlibmUubAkJZXJyb3IKKworZWFfNzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSYweDAwMDAwMDAyLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV84OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCWJyYS5iCQllYV84X25leHQKK2VhXzhfbWVtOgorCWxvbmcJCTB4MDAwMDAwMDIKK2VhXzhfbmV4dDoKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShlYV84X21lbS53LCVwYyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzk6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0rMHg0KCVhNiksJWExCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQktKCVhMSksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCWxlYQkJRUFNRU0oJWE2KSwlYTAKKwltb3YubAkJJWEwLElSRUdTKzB4MjQoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEwOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKzB4NCglYTYpLCVhMgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJLSglYTIpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSVhMCxJUkVHUysweDI4KCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSsweDQoJWE2KSwlYTMKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCS0oJWEzKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCW1vdi5sCQklYTAsSVJFR1MrMHgyYyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTI6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0rMHg0KCVhNiksJWE0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQktKCVhNCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCWxlYQkJRUFNRU0oJWE2KSwlYTAKKwltb3YubAkJJWEwLElSRUdTKzB4MzAoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEzOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKzB4NCglYTYpLCVhNQorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJLSglYTUpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSVhMCxJUkVHUysweDM0KCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xNDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSVhNiwlYTEKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSsweDQoJWExKSwlYTYKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWExKQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTEpCisKKwltdWx1LmwJCS0oJWE2KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWExKQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTEpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTEpCisJbGVhCQlFQU1FTSglYTEpLCVhMAorCW1vdi5sCQklYTAsSVJFR1MrMHgzOCglYTEpCisKKwltb3YubAkJJWExLCVhNgorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzE1OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwltb3YubAkJJWE3LCVhMAorCWxlYQkJRUFNRU0rMHg0KCVhNiksJWE3CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQktKCVhNyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCWxlYQkJRUFNRU0oJWE2KSwlYTEKKwltb3YubAkJJWExLElSRUdTKzB4M2MoJWE2KQorCisJbW92LmwJCSVhMCwlYTcKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTY6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCW1vdi5sCQkmLTB4MTAsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoMHgxMC5iLCVhMCwlZDQudyoxKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTc6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCW1vdi5sCQkmLTB4OCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSgweDEwLmIsJWEwLCVkNC53KjIpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xODoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSYtMHg0LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAuYiwlYTAsJWQ0LncqNCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzE5OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTAKKwltb3YubAkJJi0weDIsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoMHgxMC5iLCVhMCwlZDQudyo4KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMjA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCW1vdi5sCQkmLTB4MTAsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoMHgxMC5iLCVhMCwlZDQubCoxKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMjE6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCW1vdi5sCQkmLTB4OCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSgweDEwLmIsJWEwLCVkNC5sKjIpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8yMjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSYtMHg0LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAuYiwlYTAsJWQ0LmwqNCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzIzOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTAKKwltb3YubAkJJi0weDIsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoMHgxMC5iLCVhMCwlZDQubCo4KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMjQ6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCW1vdi5sCQkmLTB4MiwlYTQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSgweDEwLmIsJWEwLCVhNC5sKjgpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8yNToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSYweDIsJWE0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoLTB4MTAuYiwlYTAsJWE0LmwqOCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzI2OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTEKKwltb3YubAkJJi0weDEwLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAuYiwlYTEsJWQ0LncqMSksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzI3OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTIKKwltb3YubAkJJi0weDEwLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAuYiwlYTIsJWQ0LncqMSksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzI4OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTMKKwltb3YubAkJJi0weDEwLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAuYiwlYTMsJWQ0LncqMSksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzI5OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTQKKwltb3YubAkJJi0weDEwLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAuYiwlYTQsJWQ0LncqMSksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzMwOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTUKKwltb3YubAkJJi0weDEwLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAuYiwlYTUsJWQ0LncqMSksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzMxOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJWE2LCVhMQorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhMSksJWE2CisJbW92LmwJCSYtMHgxMCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWExKQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTEpCisKKwltdWx1LmwJCSgweDEwLmIsJWE2LCVkNC53KjEpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTEpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhMSkKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhMSkKKworCW1vdi5sCQklYTEsJWE2CisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMzI6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbW92LmwJCSVhNywlYTAKKwlsZWEJCUVBTUVNKCVhNiksJWE3CisJbW92LmwJCSYtMHgxMCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSgweDEwLmIsJWE3LCVkNC53KjEpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCW1vdi5sCQklYTAsJWE3CisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzMzOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTEKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSglYTEpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8zNDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEyCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoJWEyKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMzU6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMworCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKCVhMyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzM2OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSglYTQpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8zNzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWE1CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoJWE1KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMzg6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQklYTYsJWExCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWExKSwlYTYKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWExKQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTEpCisKKwltdWx1LmwJCSglYTYpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTEpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhMSkKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhMSkKKworCW1vdi5sCQklYTEsJWE2CisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMzk6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbW92LmwJCSVhNywlYTAKKwlsZWEJCUVBTUVNKCVhNiksJWE3CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoJWE3KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwltb3YubAkJJWEwLCVhNworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV80MDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWExCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoJWExKSssJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCWxlYQkJRUFNRU0rMHg0KCVhNiksJWEwCisJbW92LmwJCSVhMCxJUkVHUysweDI0KCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV80MToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEyCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoJWEyKSssJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCWxlYQkJRUFNRU0rMHg0KCVhNiksJWEwCisJbW92LmwJCSVhMCxJUkVHUysweDI4KCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV80MjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEzCisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoJWEzKSssJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCWxlYQkJRUFNRU0rMHg0KCVhNiksJWEwCisJbW92LmwJCSVhMCxJUkVHUysweDJjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV80MzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWE0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoJWE0KSssJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCWxlYQkJRUFNRU0rMHg0KCVhNiksJWEwCisJbW92LmwJCSVhMCxJUkVHUysweDMwKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV80NDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWE1CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoJWE1KSssJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCWxlYQkJRUFNRU0rMHg0KCVhNiksJWEwCisJbW92LmwJCSVhMCxJUkVHUysweDM0KCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV80NToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSVhNiwlYTEKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTEpLCVhNgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTEpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhMSkKKworCW11bHUubAkJKCVhNikrLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTEpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhMSkKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhMSkKKwlsZWEJCUVBTUVNKzB4NCglYTEpLCVhMAorCW1vdi5sCQklYTAsSVJFR1MrMHgzOCglYTEpCisKKwltb3YubAkJJWExLCVhNgorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzQ2OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCW1vdi5sCQklYTcsJWEwCisJbGVhCQlFQU1FTSglYTYpLCVhNworCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKCVhNykrLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKwlsZWEJCUVBTUVNKzB4NCglYTYpLCVhMQorCW1vdi5sCQklYTEsSVJFR1MrMHgzYyglYTYpCisKKwltb3YubAkJJWEwLCVhNworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV80NzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglYTYpLCVhMQorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAwMCwlYTEpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV80ODoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglYTYpLCVhMgorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAwMCwlYTIpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV80OToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglYTYpLCVhMworCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAwMCwlYTMpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV81MDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglYTYpLCVhNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAwMCwlYTQpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV81MToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglYTYpLCVhNQorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAwMCwlYTUpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV81MjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSVhNiwlYTEKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDEwMDAoJWExKSwlYTYKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWExKQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTEpCisKKwltdWx1LmwJCSgweDEwMDAsJWE2KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWExKQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTEpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTEpCisKKwltb3YubAkJJWExLCVhNgorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzUzOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCW1vdi5sCQklYTcsJWEwCisJbGVhCQlFQU1FTS0weDEwMDAoJWE2KSwlYTcKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSgweDEwMDAsJWE3KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwltb3YubAkJJWEwLCVhNworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV81NDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKzB4MTAwMCglYTYpLCVhMAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKC0weDEwMDAsJWEwKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfNTU6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJYnJhLmIJCWVhXzU1X25leHQKKworZWFfNTVfZGF0YToKKwlsb25nCQkweDAwMDAwMDAyCitlYV81NV9uZXh0OgorCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKGVhXzU1X2RhdGEudywlcGMpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV81NjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEzCisJbW92LmwJCSYtMHgxMCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSgweDEwLncsJWEzLCVkNC53KjEpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV81NzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEzCisJbW92LmwJCSYtMHg4LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAudywlYTMsJWQ0LncqMiksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzU4OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTMKKwltb3YubAkJJi0weDQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoMHgxMC53LCVhMywlZDQudyo0KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfNTk6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMworCW1vdi5sCQkmLTB4MiwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSgweDEwLncsJWEzLCVkNC53KjgpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV82MDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEzCisJbW92LmwJCSYtMHgxMCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSgweDEwLncsJWEzLCVkNC5sKjEpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV82MToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEzCisJbW92LmwJCSYtMHg4LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKDB4MTAudywlYTMsJWQ0LmwqMiksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzYyOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTMKKwltb3YubAkJJi0weDQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoMHgxMC53LCVhMywlZDQubCo0KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfNjM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMworCW1vdi5sCQkmLTB4MiwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSgweDEwLncsJWEzLCVkNC5sKjgpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV82NDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEzCisJbW92LmwJCSYweDIsJWE0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoLTB4MTAudywlYTMsJWE0LmwqOCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzY1OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTMKKwltb3YubAkJJjB4MiwlYTQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCSgweDAwLncsJWEzLCV6YTQubCo4KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfNjY6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMworCW1vdi5sCQklYTMsJWE0CisJYWRkLmwJCSYweDEwLCVhNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKC0weDEwLncsJXphMywlYTQubCoxKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfNjc6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMworCW1vdi5sCQkmMHgyLCVhNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKC0weDEwLmwsJWEzLCVhNC5sKjgpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV82ODoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwlicmEuYgkJZWFfNjhfbmV4dAorZWFfNjhfbWVtOgorCWxvbmcJCTB4MDAwMDAwMDIKK2VhXzY4X25leHQ6CisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMworCW1vdi5sCQkmLTB4MTAsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoZWFfNjhfbWVtKzB4MTAudywlcGMsJWQ0LncqMSksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzY5OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCWJyYS5iCQllYV82OV9uZXh0CitlYV82OV9tZW06CisJbG9uZwkJMHgwMDAwMDAwMgorZWFfNjlfbmV4dDoKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSYtMHg4LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKGVhXzY5X21lbSsweDEwLncsJXBjLCVkNC53KjIpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV83MDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwlicmEuYgkJZWFfNzBfbmV4dAorZWFfNzBfbWVtOgorCWxvbmcJCTB4MDAwMDAwMDIKK2VhXzcwX25leHQ6CisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCW1vdi5sCQkmLTB4NCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShlYV83MF9tZW0rMHgxMC53LCVwYywlZDQudyo0KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfNzE6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJYnJhLmIJCWVhXzcxX25leHQKK2VhXzcxX21lbToKKwlsb25nCQkweDAwMDAwMDAyCitlYV83MV9uZXh0OgorCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTAKKwltb3YubAkJJi0weDIsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoZWFfNzFfbWVtKzB4MTAudywlcGMsJWQ0LncqOCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzcyOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCWJyYS5iCQllYV83Ml9uZXh0CitlYV83Ml9tZW06CisJbG9uZwkJMHgwMDAwMDAwMgorZWFfNzJfbmV4dDoKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSYtMHgxMCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShlYV83Ml9tZW0rMHgxMC53LCVwYywlZDQubCoxKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfNzM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJYnJhLmIJCWVhXzczX25leHQKK2VhXzczX21lbToKKwlsb25nCQkweDAwMDAwMDAyCitlYV83M19uZXh0OgorCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTAKKwltb3YubAkJJi0weDgsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweDdmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoZWFfNzNfbWVtKzB4MTAudywlcGMsJWQ0LmwqMiksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweDdmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzc0OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCWJyYS5iCQllYV83NF9uZXh0CitlYV83NF9tZW06CisJbG9uZwkJMHgwMDAwMDAwMgorZWFfNzRfbmV4dDoKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSYtMHg0LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHg3ZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKGVhXzc0X21lbSsweDEwLncsJXBjLCVkNC5sKjQpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHg3ZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV83NToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwlicmEuYgkJZWFfNzVfbmV4dAorZWFfNzVfbWVtOgorCWxvbmcJCTB4MDAwMDAwMDIKK2VhXzc1X25leHQ6CisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCW1vdi5sCQkmLTB4MiwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4N2ZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShlYV83NV9tZW0rMHgxMC53LCVwYywlZDQubCo4KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4N2ZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfNzY6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJYnJhLmIJCWVhXzc2X25leHQKK2VhXzc2X21lbToKKwlsb25nCQkweDAwMDAwMDAyCitlYV83Nl9uZXh0OgorCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTMKKwltb3YubAkJJi0weDIsJWE0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoZWFfNzZfbWVtKzB4MTAudywlcGMsJWE0LmwqOCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzc3OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCWJyYS5iCQllYV83N19uZXh0CitlYV83N19tZW06CisJbG9uZwkJMHgwMDAwMDAwMgorZWFfNzdfbmV4dDoKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEzCisJbW92LmwJCSYweDIsJWE0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoZWFfNzdfbWVtKzB4MDAudywlcGMsJXphNC5sKjgpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV83ODoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKyMJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworIwljbHIubAkJJWQyCisjCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKyMJbGVhCQlFQU1FTSwlYTMKKyMJbW92LmwJCSVhMywlYTQKKyMJYWRkLmwJCSYweDEwLCVhNAorCisjCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorIwltb3YudwkJJjB4MDAwMCwlY2MKKyMJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworIwltdWx1LmwJCShFQU1FTS0weDEwLncsJXpwYywlYTQubCoxKSwlZDI6JWQzCisKKyMJbW92LncJCSVjYyxTQ0NSKCVhNikKKyMJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKyMJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKyMJYnNyLmwJCWNoa3JlZ3MKKyMJdHN0LmIJCSVkMAorIwlibmUubAkJZXJyb3IKKworZWFfNzk6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSwlYTMKKwltb3YubAkJJjB4MiwlYTQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShlYV83OV9tZW0tMHgxMC5sLCVwYywlYTQubCo4KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlicmEuYgkJZWFfNzlfbmV4dAorZWFfNzlfbWVtOgorCWxvbmcJCTB4MDAwMDAwMDIKK2VhXzc5X25leHQ6CisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfODA6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJYnJhLmIJCWVhXzgwX25leHQKK2VhXzgwX21lbToKKwlsb25nCQkweDAwMDAwMDAyCitlYV84MF9uZXh0OgorCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTEKKwltb3YubAkJJi0weDEwLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKGVhXzgwX21lbSsweDEwLmIsJXBjLCVkNC53KjEpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV84MToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwlicmEuYgkJZWFfODFfbmV4dAorZWFfODFfbWVtOgorCWxvbmcJCTB4MDAwMDAwMDIKK2VhXzgxX25leHQ6CisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCW1vdi5sCQkmLTB4OCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShlYV84MV9tZW0rMHgxMC5iLCVwYywlZDQudyoyKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfODI6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJYnJhLmIJCWVhXzgyX25leHQKK2VhXzgyX21lbToKKwlsb25nCQkweDAwMDAwMDAyCitlYV84Ml9uZXh0OgorCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTAKKwltb3YubAkJJi0weDQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoZWFfODJfbWVtKzB4MTAuYiwlcGMsJWQ0LncqNCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzgzOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCWJyYS5iCQllYV84M19uZXh0CitlYV84M19tZW06CisJbG9uZwkJMHgwMDAwMDAwMgorZWFfODNfbmV4dDoKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSYtMHgyLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKGVhXzgzX21lbSsweDEwLmIsJXBjLCVkNC53KjgpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV84NDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwlicmEuYgkJZWFfODRfbmV4dAorZWFfODRfbWVtOgorCWxvbmcJCTB4MDAwMDAwMDIKK2VhXzg0X25leHQ6CisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCW1vdi5sCQkmLTB4MTAsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoZWFfODRfbWVtKzB4MTAuYiwlcGMsJWQ0LmwqMSksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzg1OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCWJyYS5iCQllYV84NV9uZXh0CitlYV84NV9tZW06CisJbG9uZwkJMHgwMDAwMDAwMgorZWFfODVfbmV4dDoKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVhNiksJWEwCisJbW92LmwJCSYtMHg4LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKGVhXzg1X21lbSsweDEwLmIsJXBjLCVkNC5sKjIpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV84NjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwlicmEuYgkJZWFfODZfbmV4dAorZWFfODZfbWVtOgorCWxvbmcJCTB4MDAwMDAwMDIKK2VhXzg2X25leHQ6CisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglYTYpLCVhMAorCW1vdi5sCQkmLTB4NCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShlYV84Nl9tZW0rMHgxMC5iLCVwYywlZDQubCo0KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfODc6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJYnJhLmIJCWVhXzg3X25leHQKK2VhXzg3X21lbToKKwlsb25nCQkweDAwMDAwMDAyCitlYV84N19uZXh0OgorCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTAKKwltb3YubAkJJi0weDIsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoZWFfODdfbWVtKzB4MTAuYiwlcGMsJWQ0LmwqOCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzg4OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWE2KSwlYTAKKwltb3YubAkJJi0weDIsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoZWFfODhfbWVtKzB4MTAuYiwlcGMsJWQ0LmwqOCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnJhLmIJCWVhXzg4X25leHQKK2VhXzg4X21lbToKKwlsb25nCQkweDAwMDAwMDAyCitlYV84OF9uZXh0OgorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzg5OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgxMDAwKCVhNiksJWEzCisJbGVhCQlFQVNUT1JFKCVhNiksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCW1vdi5sCQkmLTB4MTAsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoWzB4MTAudywlYTQsJWQ0LncqMV0sMHgxMDAwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV85MDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglYTYpLCVhMworCWxlYQkJRUFTVE9SRSglYTYpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJi0weDgsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoWzB4MTAudywlYTQsJWQ0LncqMl0sMHgxMDAwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV85MToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglYTYpLCVhMworCWxlYQkJRUFTVE9SRSglYTYpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJi0weDQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoWzB4MTAudywlYTQsJWQ0LncqNF0sMHgxMDAwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV85MjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglYTYpLCVhMworCWxlYQkJRUFTVE9SRSglYTYpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJi0weDIsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoWzB4MTAudywlYTQsJWQ0LncqOF0sMHgxMDAwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV85MzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglYTYpLCVhMworCWxlYQkJRUFTVE9SRSglYTYpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJi0weDEwLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFsweDEwLncsJWE0LCVkNC5sKjFdLDB4MTAwMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfOTQ6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDEwMDAoJWE2KSwlYTMKKwlsZWEJCUVBU1RPUkUoJWE2KSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJbW92LmwJCSYtMHg4LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFsweDEwLncsJWE0LCVkNC5sKjJdLDB4MTAwMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfOTU6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDEwMDAoJWE2KSwlYTMKKwlsZWEJCUVBU1RPUkUoJWE2KSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJbW92LmwJCSYtMHg0LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFsweDEwLncsJWE0LCVkNC5sKjRdLDB4MTAwMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfOTY6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDEwMDAoJWE2KSwlYTMKKwlsZWEJCUVBU1RPUkUoJWE2KSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJbW92LmwJCSYtMHgyLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFsweDEwLncsJWE0LCVkNC5sKjhdLDB4MTAwMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfOTc6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDEwMDAoJWE2KSwlYTMKKwlsZWEJCUVBU1RPUkUoJWE2KSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJbW92LmwJCSYtMHgyLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFsweDEwLmwsJWE0LCVkNC5sKjhdLDB4MTAwMC5sKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfOTg6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDEwMDAoJWE2KSwlYTMKKwlsZWEJCUVBU1RPUkUoJWE2KSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJbW92LmwJCSYtMHgyLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFsweDAwLmwsJWE0LCV6ZDQubCo4XSwweDEwMDAubCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzk5OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgxMDAwKCVhNiksJWEzCisJbGVhCQlFQVNUT1JFKCVhNiksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCW1vdi5sCQkmLTB4MiwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbJWE0LCV6ZDQubCo4XSwweDEwMDAubCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEwMDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglYTYpLCVhMworCWxlYQkJRUFTVE9SRSglYTYpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJi0weDEwLCVkNAorCWFkZC5sCQklYTQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoWzB4MTAubCwlemE0LCVkNC5sKjFdLDB4MTAwMC5sKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTAxOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworIwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisjCWNsci5sCQklZDIKKyMJbW92LmwJCSYweDAwMDAwMDAyLCVkMworIwlsZWEJCUVBTUVNKCVhNiksJWEzCisjCWxlYQkJRUFTVE9SRSglYTYpLCVhNAorIwltb3YubAkJJWEzLCglYTQpCisjCW1vdi5sCQkmLTB4MTAsJWQ0CisKKyMJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisjCW1vdi53CQkmMHgwMDAwLCVjYworIwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisjCW11bHUubAkJKFtFQVNUT1JFLmwsJXphNCwlemQ0LmwqMV0pLCVkMjolZDMKKworIwltb3YudwkJJWNjLFNDQ1IoJWE2KQorIwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorIwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworIwlic3IubAkJY2hrcmVncworIwl0c3QuYgkJJWQwCisjCWJuZS5sCQllcnJvcgorCitlYV8xMDI6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQklYTYsJWExCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0rMHgxMDAwKCVhMSksJWEzCisJbGVhCQlFQVNUT1JFKCVhMSksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCW1vdi5sCQkmLTB4MiwlYTYKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWExKQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTEpCisKKwltdWx1LmwJCShbMHgxMC53LCVhNCwlYTYubCo4XSwtMHgxMDAwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTEpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhMSkKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhMSkKKworCW1vdi5sCQklYTEsJWE2CisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTAzOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJWE2LCVhMQorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKzB4MTAwMCglYTEpLCVhMworCWxlYQkJRUFTVE9SRSglYTEpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJjB4MiwlYTYKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWExKQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTEpCisKKwltdWx1LmwJCShbLTB4MTAudywlYTQsJWE2LmwqOF0sLTB4MTAwMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWExKQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTEpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTEpCisKKwltb3YubAkJJWExLCVhNgorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEwNDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MjAoJWE2KSwlYTMKKwlsZWEJCUVBU1RPUkUoJWE2KSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJc3ViLmwJCSYweDEwLCVhNAorCW1vdi5sCQkmMHgxMCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbMHgxMC53LCVhNF0sJWQ0LncqMSwweDEwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMDU6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDIwKCVhNiksJWEzCisJbGVhCQlFQVNUT1JFKCVhNiksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCXN1Yi5sCQkmMHgxMCwlYTQKKwltb3YubAkJJjB4OCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbMHgxMC53LCVhNF0sJWQ0LncqMiwweDEwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMDY6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDIwKCVhNiksJWEzCisJbGVhCQlFQVNUT1JFKCVhNiksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCXN1Yi5sCQkmMHgxMCwlYTQKKwltb3YubAkJJjB4NCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbMHgxMC53LCVhNF0sJWQ0LncqNCwweDEwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMDc6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDIwKCVhNiksJWEzCisJbGVhCQlFQVNUT1JFKCVhNiksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCXN1Yi5sCQkmMHgxMCwlYTQKKwltb3YubAkJJjB4MiwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbMHgxMC53LCVhNF0sJWQ0LncqOCwweDEwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMDg6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDIwKCVhNiksJWEzCisJbGVhCQlFQVNUT1JFKCVhNiksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCXN1Yi5sCQkmMHgxMCwlYTQKKwltb3YubAkJJjB4MTAsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoWzB4MTAudywlYTRdLCVkNC5sKjEsMHgxMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTA5OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgyMCglYTYpLCVhMworCWxlYQkJRUFTVE9SRSglYTYpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwlzdWIubAkJJjB4MTAsJWE0CisJbW92LmwJCSYweDgsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoWzB4MTAudywlYTRdLCVkNC53KjIsMHgxMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTEwOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgyMCglYTYpLCVhMworCWxlYQkJRUFTVE9SRSglYTYpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwlzdWIubAkJJjB4MTAsJWE0CisJbW92LmwJCSYweDQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoWzB4MTAudywlYTRdLCVkNC5sKjQsMHgxMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTExOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgyMCglYTYpLCVhMworCWxlYQkJRUFTVE9SRSglYTYpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwlzdWIubAkJJjB4MTAsJWE0CisJbW92LmwJCSYweDIsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoWzB4MTAudywlYTRdLCVkNC5sKjgsMHgxMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTEyOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgyMCglYTYpLCVhMworCWxlYQkJRUFTVE9SRSglYTYpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwlzdWIubAkJJjB4MTAsJWE0CisJbW92LmwJCSYweDIsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoWzB4MTAubCwlYTRdLCVkNC5sKjgsMHgxMC5sKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTEzOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgyMCglYTYpLCVhMworCWxlYQkJRUFTVE9SRSglYTYpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJjB4MiwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbMHgwMC5sLCVhNF0sJXpkNC5sKjgsMHgyMC5sKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTE0OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJWE3LCVhMAorCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDIwKCVhNiksJWEzCisJbGVhCQlFQVNUT1JFKCVhNiksJWE3CisJbW92LmwJCSVhMywoJWE3KQorCW1vdi5sCQkmMHgyMCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbJWE3XSwlZDQubCoxKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwltb3YubAkJJWEwLCVhNworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMTU6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisjCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKyMJY2xyLmwJCSVkMgorIwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisjCWxlYQkJRUFNRU0tMHgyMCglcGMpLCVhMworIwlsZWEJCUVBU1RPUkUoJXBjKSwlYTQKKyMJbW92LmwJCSVhMywoJWE0KQorIwltb3YubAkJJjB4MiwlZDQKKworIwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKyMJbW92LncJCSYweDAwMDAsJWNjCisjCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKyMJbXVsdS5sCQkoW0VBU1RPUkUubCwlemE0XSwlemQ0LmwqOCwweDIwLmwpLCVkMjolZDMKKworIwltb3YudwkJJWNjLFNDQ1IoJWE2KQorIwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorIwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworIwlic3IubAkJY2hrcmVncworIwl0c3QuYgkJJWQwCisjCWJuZS5sCQllcnJvcgorCitlYV8xMTY6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCW1vdi5sCQklYTYsJWExCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0oJWExKSwlYTMKKwlsZWEJCUVBU1RPUkUoJWExKSwlYTYKKwltb3YubAkJJWEzLCglYTYpCisJYWRkLmwJCSYweDEwLCVhNgorCW1vdi5sCQkmLTB4MiwlYTUKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWExKQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTEpCisKKwltdWx1LmwJCShbLTB4MTAudywlYTZdLCVhNS5sKjgsMHgxMC5sKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWExKQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTEpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTEpCisKKwltb3YubAkJJWExLCVhNgorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKKwltb3YubAkJVEVTVENUUiglYTYpLCVkMQorCWNsci5sCQklZDAKKwlydHMKKworZWFfMTE3OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgxMDAwKCVwYyksJWEzCisJbGVhCQlFQVNUT1JFKCVwYyksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCW1vdi5sCQkmLTB4MTAsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUrMHgxMC53LCVwYywlZDQudyoxXSwweDEwMDAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzExODoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglcGMpLCVhMworCWxlYQkJRUFTVE9SRSglcGMpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJi0weDgsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUrMHgxMC53LCVwYywlZDQudyoyXSwweDEwMDAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzExOToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglcGMpLCVhMworCWxlYQkJRUFTVE9SRSglcGMpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJi0weDQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUrMHgxMC53LCVwYywlZDQudyo0XSwweDEwMDAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEyMDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglcGMpLCVhMworCWxlYQkJRUFTVE9SRSglcGMpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJi0weDIsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUrMHgxMC53LCVwYywlZDQudyo4XSwweDEwMDAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEyMToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglcGMpLCVhMworCWxlYQkJRUFTVE9SRSglcGMpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJi0weDEwLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFtFQVNUT1JFKzB4MTAudywlcGMsJWQ0LmwqMV0sMHgxMDAwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMjI6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDEwMDAoJXBjKSwlYTMKKwlsZWEJCUVBU1RPUkUoJXBjKSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJbW92LmwJCSYtMHg4LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFtFQVNUT1JFKzB4MTAudywlcGMsJWQ0LmwqMl0sMHgxMDAwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMjM6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDEwMDAoJXBjKSwlYTMKKwlsZWEJCUVBU1RPUkUoJXBjKSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJbW92LmwJCSYtMHg0LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFtFQVNUT1JFKzB4MTAudywlcGMsJWQ0LmwqNF0sMHgxMDAwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMjQ6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDEwMDAoJXBjKSwlYTMKKwlsZWEJCUVBU1RPUkUoJXBjKSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJbW92LmwJCSYtMHgyLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFtFQVNUT1JFKzB4MTAudywlcGMsJWQ0LmwqOF0sMHgxMDAwLncpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMjU6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDEwMDAoJXBjKSwlYTMKKwlsZWEJCUVBU1RPUkUoJXBjKSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJbW92LmwJCSYtMHgyLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKwltdWx1LmwJCShbRUFTVE9SRSsweDEwLmwsJXBjLCVkNC5sKjhdLDB4MTAwMC5sKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTI2OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgxMDAwKCVwYyksJWEzCisJbGVhCQlFQVNUT1JFKCVwYyksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCW1vdi5sCQkmLTB4MiwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbRUFTVE9SRSsweDAwLmwsJXBjLCV6ZDQubCo4XSwweDEwMDAubCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEyNzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MTAwMCglcGMpLCVhMworCWxlYQkJRUFTVE9SRSglcGMpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJWE0LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFslenBjLCVkNC5sKjFdLDB4MTAwMC5sKSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTI4OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgxMDAwKCVwYyksJWEzCisJbGVhCQlFQVNUT1JFKCVwYyksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCW1vdi5sCQkmLTB4MTAsJWQ0CisJYWRkLmwJCSVhNCwlZDQKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbMHgxMC5sLCV6cGMsJWQ0LmwqMV0sMHgxMDAwLmwpLCVkMjolZDMKKworCW1vdi53CQklY2MsU0NDUiglYTYpCisJbW92bS5sCQkmMHhmZmZmLFNSRUdTKCVhNikKKwltb3YubAkJJjB4MDAwMDAwMDQsSVJFR1MrMHhjKCVhNikKKworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMjk6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKCVwYyksJWEzCisJbGVhCQlFQVNUT1JFKCVwYyksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCW1vdi5sCQkmLTB4MTAsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUubCwlenBjLCV6ZDQubCoxXSksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEzMDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNKzB4MTAwMCglcGMpLCVhMworCWxlYQkJRUFTVE9SRSglcGMpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwltb3YubAkJJjB4MiwlYTYKKworCW1vdi53CQkmMHgwMDAwLElDQ1IoJWE2KQorCW1vdi53CQkmMHgwMDAwLCVjYworCW1vdm0ubAkJJjB4ZmZmZixJUkVHUyglYTYpCisKKwltdWx1LmwJCShbRUFTVE9SRS0weDEwLncsJXBjLCVhNi5sKjhdLC0weDEwMDAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEzMToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJbW92LmwJCSVhNywlYTAKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0rMHgxMDAwKCVwYyksJWEzCisJbGVhCQlFQVNUT1JFKCVwYyksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCW1vdi5sCQkmMHgyLCVhNworCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFtFQVNUT1JFLTB4MTAudywlcGMsJWE3LmwqOF0sLTB4MTAwMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwltb3YubAkJJWEwLCVhNworCWJzci5sCQljaGtyZWdzCisJdHN0LmIJCSVkMAorCWJuZS5sCQllcnJvcgorCitlYV8xMzI6CisJYWRkcS5sCQkmMHgxLFRFU1RDVFIoJWE2KQorCisJbW92bS5sCQlERUZfUkVHUyglcGMpLCYweDNmZmYKKworCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTS0weDIwKCVwYyksJWEzCisJbGVhCQlFQVNUT1JFKCVwYyksJWE0CisJbW92LmwJCSVhMywoJWE0KQorCXN1Yi5sCQkmMHgxMCwlYTQKKwltb3YubAkJJjB4MTAsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUudywlcGNdLCVkNC53KjEsMHgxMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTMzOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgyMCglcGMpLCVhMworCWxlYQkJRUFTVE9SRSglcGMpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwlzdWIubAkJJjB4MTAsJWE0CisJbW92LmwJCSYweDgsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUudywlcGNdLCVkNC53KjIsMHgxMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTM0OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgyMCglcGMpLCVhMworCWxlYQkJRUFTVE9SRSglcGMpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwlzdWIubAkJJjB4MTAsJWE0CisJbW92LmwJCSYweDQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUudywlcGNdLCVkNC53KjQsMHgxMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTM1OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgyMCglcGMpLCVhMworCWxlYQkJRUFTVE9SRSglcGMpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwlzdWIubAkJJjB4MTAsJWE0CisJbW92LmwJCSYweDIsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUudywlcGNdLCVkNC53KjgsMHgxMC53KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTM2OgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwljbHIubAkJJWQyCisJbW92LmwJCSYweDAwMDAwMDAyLCVkMworCWxlYQkJRUFNRU0tMHgyMCglcGMpLCVhMworCWxlYQkJRUFTVE9SRSglcGMpLCVhNAorCW1vdi5sCQklYTMsKCVhNCkKKwlzdWIubAkJJjB4MTAsJWE0CisJbW92LmwJCSYweDEwLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFtFQVNUT1JFLncsJXBjXSwlZDQubCoxLDB4MTAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEzNzoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MjAoJXBjKSwlYTMKKwlsZWEJCUVBU1RPUkUoJXBjKSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJc3ViLmwJCSYweDEwLCVhNAorCW1vdi5sCQkmMHg4LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFtFQVNUT1JFLncsJXBjXSwlZDQudyoyLDB4MTAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEzODoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MjAoJXBjKSwlYTMKKwlsZWEJCUVBU1RPUkUoJXBjKSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJc3ViLmwJCSYweDEwLCVhNAorCW1vdi5sCQkmMHg0LCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFtFQVNUT1JFLncsJXBjXSwlZDQubCo0LDB4MTAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzEzOToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MjAoJXBjKSwlYTMKKwlsZWEJCUVBU1RPUkUoJXBjKSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJc3ViLmwJCSYweDEwLCVhNAorCW1vdi5sCQkmMHgyLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFtFQVNUT1JFLncsJXBjXSwlZDQubCo4LDB4MTAudyksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzE0MDoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MjAoJXBjKSwlYTMKKwlsZWEJCUVBU1RPUkUoJXBjKSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJc3ViLmwJCSYweDEwLCVhNAorCW1vdi5sCQkmMHgyLCVkNAorCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFtFQVNUT1JFLmwsJXBjXSwlZDQubCo4LDB4MTAubCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzE0MToKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MjAoJXBjKSwlYTMKKwlsZWEJCUVBU1RPUkUoJXBjKSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJbW92LmwJCSYweDIsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUubCwlcGNdLCV6ZDQubCo4LDB4MjAubCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJYnNyLmwJCWNoa3JlZ3MKKwl0c3QuYgkJJWQwCisJYm5lLmwJCWVycm9yCisKK2VhXzE0MjoKKwlhZGRxLmwJCSYweDEsVEVTVENUUiglYTYpCisKKwltb3ZtLmwJCURFRl9SRUdTKCVwYyksJjB4M2ZmZgorCisJY2xyLmwJCSVkMgorCW1vdi5sCQkmMHgwMDAwMDAwMiwlZDMKKwlsZWEJCUVBTUVNLTB4MjAoJXBjKSwlYTMKKwlsZWEJCUVBU1RPUkUoJXBjKSwlYTQKKwltb3YubAkJJWEzLCglYTQpCisJbW92LmwJCSYweDQsJWQ0CisKKwltb3YudwkJJjB4MDAwMCxJQ0NSKCVhNikKKwltb3YudwkJJjB4MDAwMCwlY2MKKwltb3ZtLmwJCSYweGZmZmYsSVJFR1MoJWE2KQorCisJbXVsdS5sCQkoW0VBU1RPUkUubCwlenBjXSwlZDQubCo4KSwlZDI6JWQzCisKKwltb3YudwkJJWNjLFNDQ1IoJWE2KQorCW1vdm0ubAkJJjB4ZmZmZixTUkVHUyglYTYpCisJbW92LmwJCSYweDAwMDAwMDA0LElSRUdTKzB4YyglYTYpCisKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworZWFfMTQzOgorCWFkZHEubAkJJjB4MSxURVNUQ1RSKCVhNikKKworCW1vdm0ubAkJREVGX1JFR1MoJXBjKSwmMHgzZmZmCisKKwltb3YubAkJJWE3LCVhMAorCWNsci5sCQklZDIKKwltb3YubAkJJjB4MDAwMDAwMDIsJWQzCisJbGVhCQlFQU1FTSglcGMpLCVhMworCWxlYQkJRUFTVE9SRSglcGMpLCVhNgorCW1vdi5sCQklYTMsKCVhNikKKwlhZGQubAkJJjB4MTAsJWE2CisJbW92LmwJCSYtMHgyLCVhNworCisJbW92LncJCSYweDAwMDAsSUNDUiglYTYpCisJbW92LncJCSYweDAwMDAsJWNjCisJbW92bS5sCQkmMHhmZmZmLElSRUdTKCVhNikKKworCW11bHUubAkJKFtFQVNUT1JFLncsJXBjXSwlYTcubCo4LDB4MTAubCksJWQyOiVkMworCisJbW92LncJCSVjYyxTQ0NSKCVhNikKKwltb3ZtLmwJCSYweGZmZmYsU1JFR1MoJWE2KQorCW1vdi5sCQkmMHgwMDAwMDAwNCxJUkVHUysweGMoJWE2KQorCisJbW92LmwJCSVhMCwlYTcKKwlic3IubAkJY2hrcmVncworCXRzdC5iCQklZDAKKwlibmUubAkJZXJyb3IKKworCWNsci5sCQklZDAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitjaGtyZWdzOgorCWxlYQkJSVJFR1MoJWE2KSwlYTAKKwlsZWEJCVNSRUdTKCVhNiksJWExCisJbW92LmwJCSYxNCwlZDAKK2Noa3JlZ3NfbG9vcDoKKwljbXAubAkJKCVhMCkrLCglYTEpKworCWJuZS5sCQljaGtyZWdzX2Vycm9yCisJZGJyYS53CQklZDAsY2hrcmVnc19sb29wCisKKwltb3YudwkJSUNDUiglYTYpLCVkMAorCW1vdi53CQlTQ0NSKCVhNiksJWQxCisJY21wLncJCSVkMCwlZDEKKwlibmUubAkJY2hrcmVnc19lcnJvcgorCisJY2xyLmwJCSVkMAorCXJ0cworCitjaGtyZWdzX2Vycm9yOgorCW1vdnEubAkJJjB4MSwlZDAKKwlydHMKKworZXJyb3I6CisJbW92LmwJCVRFU1RDVFIoJWE2KSwlZDEKKwltb3ZxLmwJCSYweDEsJWQwCisJcnRzCisKK0RFRl9SRUdTOgorCWxvbmcJCTB4YWNhY2FjYWMsIDB4YWNhY2FjYWMsIDB4YWNhY2FjYWMsIDB4YWNhY2FjYWMKKwlsb25nCQkweGFjYWNhY2FjLCAweGFjYWNhY2FjLCAweGFjYWNhY2FjLCAweGFjYWNhY2FjCisKKwlsb25nCQkweGFjYWNhY2FjLCAweGFjYWNhY2FjLCAweGFjYWNhY2FjLCAweGFjYWNhY2FjCisJbG9uZwkJMHhhY2FjYWNhYywgMHhhY2FjYWNhYywgMHhhY2FjYWNhYywgMHhhY2FjYWNhYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworX3ByaW50X3N0cjoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoVEVTVFRPUC0weDgwKzB4MCwlcGMpLCVkMAorCXBlYQkJKFRFU1RUT1AtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworX3ByaW50X251bToKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoVEVTVFRPUC0weDgwKzB4NCwlcGMpLCVkMAorCXBlYQkJKFRFU1RUT1AtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvc3JjL3BmcHNwLlMgYi9hcmNoL202OGsvaWZwc3AwNjAvc3JjL3BmcHNwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM5OTdjNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvcGZwc3AuUwpAQCAtMCwwICsxLDE0NzQ1IEBACit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK01PVE9ST0xBIE1JQ1JPUFJPQ0VTU09SICYgTUVNT1JZIFRFQ0hOT0xPR1kgR1JPVVAKK002ODAwMCBIaS1QZXJmb3JtYW5jZSBNaWNyb3Byb2Nlc3NvciBEaXZpc2lvbgorTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UKK1Byb2R1Y3Rpb24gUmVsZWFzZSBQMS4wMCAtLSBPY3RvYmVyIDEwLCAxOTk0CisKK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlIENvcHlyaWdodCCpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVEhFIFNPRlRXQVJFIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMgYW5kIHdpdGhvdXQgd2FycmFudHkuCitUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LAorTU9UT1JPTEEgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK2FuZCBhbnkgd2FycmFudHkgYWdhaW5zdCBpbmZyaW5nZW1lbnQgd2l0aCByZWdhcmQgdG8gdGhlIFNPRlRXQVJFCisoSU5DTFVESU5HIEFOWSBNT0RJRklFRCBWRVJTSU9OUyBUSEVSRU9GKSBhbmQgYW55IGFjY29tcGFueWluZyB3cml0dGVuIG1hdGVyaWFscy4KKworVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKK0lOIE5PIEVWRU5UIFNIQUxMIE1PVE9ST0xBIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgorKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgQlVTSU5FU1MgUFJPRklUUywKK0JVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBCVVNJTkVTUyBJTkZPUk1BVElPTiwgT1IgT1RIRVIgUEVDVU5JQVJZIExPU1MpCitBUklTSU5HIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU09GVFdBUkUuCitNb3Rvcm9sYSBhc3N1bWVzIG5vIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgbWFpbnRlbmFuY2UgYW5kIHN1cHBvcnQgb2YgdGhlIFNPRlRXQVJFLgorCitZb3UgYXJlIGhlcmVieSBncmFudGVkIGEgY29weXJpZ2h0IGxpY2Vuc2UgdG8gdXNlLCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoZSBTT0ZUV0FSRQorc28gbG9uZyBhcyB0aGlzIGVudGlyZSBub3RpY2UgaXMgcmV0YWluZWQgd2l0aG91dCBhbHRlcmF0aW9uIGluIGFueSBtb2RpZmllZCBhbmQvb3IKK3JlZGlzdHJpYnV0ZWQgdmVyc2lvbnMsIGFuZCB0aGF0IHN1Y2ggbW9kaWZpZWQgdmVyc2lvbnMgYXJlIGNsZWFybHkgaWRlbnRpZmllZCBhcyBzdWNoLgorTm8gbGljZW5zZXMgYXJlIGdyYW50ZWQgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZSB1bmRlciBhbnkgcGF0ZW50cworb3IgdHJhZGVtYXJrcyBvZiBNb3Rvcm9sYSwgSW5jLgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisjIGZyZWFsLnM6CisjCVRoaXMgZmlsZSBpcyBhcHBlbmRlZCB0byB0aGUgdG9wIG9mIHRoZSAwNjBGUFNQIHBhY2thZ2UKKyMgYW5kIGNvbnRhaW5zIHRoZSBlbnRyeSBwb2ludHMgaW50byB0aGUgcGFja2FnZS4gVGhlIHVzZXIsIGluCisjIGVmZmVjdCwgYnJhbmNoZXMgdG8gb25lIG9mIHRoZSBicmFuY2ggdGFibGUgZW50cmllcyBsb2NhdGVkCisjIGFmdGVyIF8wNjBGUFNQX1RBQkxFLgorIwlBbHNvLCBzdWJyb3V0aW5lIHN0dWJzIGV4aXN0IGluIHRoaXMgZmlsZSAoX2Zwc3BfZG9uZSBmb3IKKyMgZXhhbXBsZSkgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSB0aGUgRlBTUCBwYWNrYWdlIGl0c2VsZiBpbiBvcmRlcgorIyB0byBjYWxsIGEgZ2l2ZW4gcm91dGluZS4gVGhlIHN0dWIgcm91dGluZSBhY3R1YWxseSBwZXJmb3JtcyB0aGUKKyMgY2FsbG91dC4gVGhlIEZQU1AgY29kZSBkb2VzIGEgImJzciIgdG8gdGhlIHN0dWIgcm91dGluZS4gVGhpcworIyBleHRyYSBsYXllciBvZiBoaWVyYXJjaHkgYWRkcyBhIHNsaWdodCBwZXJmb3JtYW5jZSBwZW5hbHR5IGJ1dAorIyBpdCBtYWtlcyB0aGUgRlBTUCBjb2RlIGVhc2llciB0byByZWFkIGFuZCBtb3JlIG1haW5hdGluYWJsZS4KKyMKKworc2V0CV9vZmZfYnN1biwJMHgwMAorc2V0CV9vZmZfc25hbiwJMHgwNAorc2V0CV9vZmZfb3BlcnIsCTB4MDgKK3NldAlfb2ZmX292ZmwsCTB4MGMKK3NldAlfb2ZmX3VuZmwsCTB4MTAKK3NldAlfb2ZmX2R6LAkweDE0CitzZXQJX29mZl9pbmV4LAkweDE4CitzZXQJX29mZl9mbGluZSwJMHgxYworc2V0CV9vZmZfZnB1X2RpcywJMHgyMAorc2V0CV9vZmZfdHJhcCwJMHgyNAorc2V0CV9vZmZfdHJhY2UsCTB4MjgKK3NldAlfb2ZmX2FjY2VzcywJMHgyYworc2V0CV9vZmZfZG9uZSwJMHgzMAorCitzZXQJX29mZl9pbXIsCTB4NDAKK3NldAlfb2ZmX2RtciwJMHg0NAorc2V0CV9vZmZfZG13LAkweDQ4CitzZXQJX29mZl9pcncsCTB4NGMKK3NldAlfb2ZmX2lybCwJMHg1MAorc2V0CV9vZmZfZHJiLAkweDU0CitzZXQJX29mZl9kcncsCTB4NTgKK3NldAlfb2ZmX2RybCwJMHg1Yworc2V0CV9vZmZfZHdiLAkweDYwCitzZXQJX29mZl9kd3csCTB4NjQKK3NldAlfb2ZmX2R3bCwJMHg2OAorCitfMDYwRlBTUF9UQUJMRToKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgSGVyZSdzIHRoZSB0YWJsZSBvZiBFTlRSWSBQT0lOVFMgZm9yIHRob3NlIGxpbmtpbmcgdGhlIHBhY2thZ2UuCisJYnJhLmwJCV9mcHNwX3NuYW4KKwlzaG9ydAkJMHgwMDAwCisJYnJhLmwJCV9mcHNwX29wZXJyCisJc2hvcnQJCTB4MDAwMAorCWJyYS5sCQlfZnBzcF9vdmZsCisJc2hvcnQJCTB4MDAwMAorCWJyYS5sCQlfZnBzcF91bmZsCisJc2hvcnQJCTB4MDAwMAorCWJyYS5sCQlfZnBzcF9kegorCXNob3J0CQkweDAwMDAKKwlicmEubAkJX2Zwc3BfaW5leAorCXNob3J0CQkweDAwMDAKKwlicmEubAkJX2Zwc3BfZmxpbmUKKwlzaG9ydAkJMHgwMDAwCisJYnJhLmwJCV9mcHNwX3Vuc3VwcAorCXNob3J0CQkweDAwMDAKKwlicmEubAkJX2Zwc3BfZWZmYWRkCisJc2hvcnQJCTB4MDAwMAorCisJc3BhY2UJCTU2CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJX2Zwc3BfZG9uZQorX2Zwc3BfZG9uZToKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2RvbmUsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9yZWFsX292ZmwKK19yZWFsX292Zmw6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9vdmZsLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfcmVhbF91bmZsCitfcmVhbF91bmZsOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfdW5mbCwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX3JlYWxfaW5leAorX3JlYWxfaW5leDoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2luZXgsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9yZWFsX2JzdW4KK19yZWFsX2JzdW46CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9ic3VuLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfcmVhbF9vcGVycgorX3JlYWxfb3BlcnI6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9vcGVyciwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX3JlYWxfc25hbgorX3JlYWxfc25hbjoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX3NuYW4sJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9yZWFsX2R6CitfcmVhbF9kejoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2R6LCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfcmVhbF9mbGluZQorX3JlYWxfZmxpbmU6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9mbGluZSwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX3JlYWxfZnB1X2Rpc2FibGVkCitfcmVhbF9mcHVfZGlzYWJsZWQ6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9mcHVfZGlzLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfcmVhbF90cmFwCitfcmVhbF90cmFwOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfdHJhcCwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX3JlYWxfdHJhY2UKK19yZWFsX3RyYWNlOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfdHJhY2UsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9yZWFsX2FjY2VzcworX3JlYWxfYWNjZXNzOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfYWNjZXNzLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2ltZW1fcmVhZAorX2ltZW1fcmVhZDoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2ltciwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2RtZW1fcmVhZAorX2RtZW1fcmVhZDoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2RtciwlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2RtZW1fd3JpdGUKK19kbWVtX3dyaXRlOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZG13LCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfaW1lbV9yZWFkX3dvcmQKK19pbWVtX3JlYWRfd29yZDoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2lydywlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2ltZW1fcmVhZF9sb25nCitfaW1lbV9yZWFkX2xvbmc6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9pcmwsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9kbWVtX3JlYWRfYnl0ZQorX2RtZW1fcmVhZF9ieXRlOgorCW1vdi5sCQklZDAsLSglc3ApCisJbW92LmwJCShfMDYwRlBTUF9UQUJMRS0weDgwK19vZmZfZHJiLCVwYyksJWQwCisJcGVhLmwJCShfMDYwRlBTUF9UQUJMRS0weDgwLCVwYywlZDApCisJbW92LmwJCTB4NCglc3ApLCVkMAorCXJ0ZAkJJjB4NAorCisJZ2xvYmFsCQlfZG1lbV9yZWFkX3dvcmQKK19kbWVtX3JlYWRfd29yZDoKKwltb3YubAkJJWQwLC0oJXNwKQorCW1vdi5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCtfb2ZmX2RydywlcGMpLCVkMAorCXBlYS5sCQkoXzA2MEZQU1BfVEFCTEUtMHg4MCwlcGMsJWQwKQorCW1vdi5sCQkweDQoJXNwKSwlZDAKKwlydGQJCSYweDQKKworCWdsb2JhbAkJX2RtZW1fcmVhZF9sb25nCitfZG1lbV9yZWFkX2xvbmc6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9kcmwsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9kbWVtX3dyaXRlX2J5dGUKK19kbWVtX3dyaXRlX2J5dGU6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9kd2IsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9kbWVtX3dyaXRlX3dvcmQKK19kbWVtX3dyaXRlX3dvcmQ6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9kd3csJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKwlnbG9iYWwJCV9kbWVtX3dyaXRlX2xvbmcKK19kbWVtX3dyaXRlX2xvbmc6CisJbW92LmwJCSVkMCwtKCVzcCkKKwltb3YubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODArX29mZl9kd2wsJXBjKSwlZDAKKwlwZWEubAkJKF8wNjBGUFNQX1RBQkxFLTB4ODAsJXBjLCVkMCkKKwltb3YubAkJMHg0KCVzcCksJWQwCisJcnRkCQkmMHg0CisKKyMKKyMgVGhpcyBmaWxlIGNvbnRhaW5zIGEgc2V0IG9mIGRlZmluZSBzdGF0ZW1lbnRzIGZvciBjb25zdGFudHMKKyMgaW4gb3JkZXIgdG8gcHJvbW90ZSByZWFkYWJpbGl0eSB3aXRoaW4gdGhlIGNvcmVjb2RlIGl0c2VsZi4KKyMKKworc2V0IExPQ0FMX1NJWkUsCQkxOTIJCQkjIHN0YWNrIGZyYW1lIHNpemUoYnl0ZXMpCitzZXQgTFYsCQkJLUxPQ0FMX1NJWkUJCSMgc3RhY2sgb2Zmc2V0CisKK3NldCBFWENfU1IsCQkweDQJCQkjIHN0YWNrIHN0YXR1cyByZWdpc3Rlcgorc2V0IEVYQ19QQywJCTB4NgkJCSMgc3RhY2sgcGMKK3NldCBFWENfVk9GRiwJCTB4YQkJCSMgc3RhY2tlZCB2ZWN0b3Igb2Zmc2V0CitzZXQgRVhDX0VBLAkJMHhjCQkJIyBzdGFja2VkIDxlYT4KKworc2V0IEVYQ19GUCwJCTB4MAkJCSMgZnJhbWUgcG9pbnRlcgorCitzZXQgRVhDX0FSRUdTLAkJLTY4CQkJIyBvZmZzZXQgb2YgYWxsIGFkZHJlc3MgcmVncworc2V0IEVYQ19EUkVHUywJCS0xMDAJCQkjIG9mZnNldCBvZiBhbGwgZGF0YSByZWdzCitzZXQgRVhDX0ZQUkVHUywJCS0zNgkJCSMgb2Zmc2V0IG9mIGFsbCBmcCByZWdzCisKK3NldCBFWENfQTcsCQlFWENfQVJFR1MrKDcqNCkJCSMgb2Zmc2V0IG9mIHNhdmVkIGE3CitzZXQgT0xEX0E3LAkJRVhDX0FSRUdTKyg2KjQpCQkjIGV4dHJhIGNvcHkgb2Ygc2F2ZWQgYTcKK3NldCBFWENfQTYsCQlFWENfQVJFR1MrKDYqNCkJCSMgb2Zmc2V0IG9mIHNhdmVkIGE2CitzZXQgRVhDX0E1LAkJRVhDX0FSRUdTKyg1KjQpCitzZXQgRVhDX0E0LAkJRVhDX0FSRUdTKyg0KjQpCitzZXQgRVhDX0EzLAkJRVhDX0FSRUdTKygzKjQpCitzZXQgRVhDX0EyLAkJRVhDX0FSRUdTKygyKjQpCitzZXQgRVhDX0ExLAkJRVhDX0FSRUdTKygxKjQpCitzZXQgRVhDX0EwLAkJRVhDX0FSRUdTKygwKjQpCitzZXQgRVhDX0Q3LAkJRVhDX0RSRUdTKyg3KjQpCitzZXQgRVhDX0Q2LAkJRVhDX0RSRUdTKyg2KjQpCitzZXQgRVhDX0Q1LAkJRVhDX0RSRUdTKyg1KjQpCitzZXQgRVhDX0Q0LAkJRVhDX0RSRUdTKyg0KjQpCitzZXQgRVhDX0QzLAkJRVhDX0RSRUdTKygzKjQpCitzZXQgRVhDX0QyLAkJRVhDX0RSRUdTKygyKjQpCitzZXQgRVhDX0QxLAkJRVhDX0RSRUdTKygxKjQpCitzZXQgRVhDX0QwLAkJRVhDX0RSRUdTKygwKjQpCisKK3NldCBFWENfRlAwLAkJRVhDX0ZQUkVHUysoMCoxMikJIyBvZmZzZXQgb2Ygc2F2ZWQgZnAwCitzZXQgRVhDX0ZQMSwJCUVYQ19GUFJFR1MrKDEqMTIpCSMgb2Zmc2V0IG9mIHNhdmVkIGZwMQorc2V0IEVYQ19GUDIsCQlFWENfRlBSRUdTKygyKjEyKQkjIG9mZnNldCBvZiBzYXZlZCBmcDIgKG5vdCB1c2VkKQorCitzZXQgRlBfU0NSMSwJCUxWKzgwCQkJIyBmcCBzY3JhdGNoIDEKK3NldCBGUF9TQ1IxX0VYLAkJRlBfU0NSMSswCitzZXQgRlBfU0NSMV9TR04sCUZQX1NDUjErMgorc2V0IEZQX1NDUjFfSEksCQlGUF9TQ1IxKzQKK3NldCBGUF9TQ1IxX0xPLAkJRlBfU0NSMSs4CisKK3NldCBGUF9TQ1IwLAkJTFYrNjgJCQkjIGZwIHNjcmF0Y2ggMAorc2V0IEZQX1NDUjBfRVgsCQlGUF9TQ1IwKzAKK3NldCBGUF9TQ1IwX1NHTiwJRlBfU0NSMCsyCitzZXQgRlBfU0NSMF9ISSwJCUZQX1NDUjArNAorc2V0IEZQX1NDUjBfTE8sCQlGUF9TQ1IwKzgKKworc2V0IEZQX0RTVCwJCUxWKzU2CQkJIyBmcCBkZXN0aW5hdGlvbiBvcGVyYW5kCitzZXQgRlBfRFNUX0VYLAkJRlBfRFNUKzAKK3NldCBGUF9EU1RfU0dOLAkJRlBfRFNUKzIKK3NldCBGUF9EU1RfSEksCQlGUF9EU1QrNAorc2V0IEZQX0RTVF9MTywJCUZQX0RTVCs4CisKK3NldCBGUF9TUkMsCQlMVis0NAkJCSMgZnAgc291cmNlIG9wZXJhbmQKK3NldCBGUF9TUkNfRVgsCQlGUF9TUkMrMAorc2V0IEZQX1NSQ19TR04sCQlGUF9TUkMrMgorc2V0IEZQX1NSQ19ISSwJCUZQX1NSQys0CitzZXQgRlBfU1JDX0xPLAkJRlBfU1JDKzgKKworc2V0IFVTRVJfRlBJQVIsCQlMVis0MAkJCSMgRlAgaW5zdHIgYWRkcmVzcyByZWdpc3RlcgorCitzZXQgVVNFUl9GUFNSLAkJTFYrMzYJCQkjIEZQIHN0YXR1cyByZWdpc3Rlcgorc2V0IEZQU1JfQ0MsCQlVU0VSX0ZQU1IrMAkJIyBGUFNSIGNvbmRpdGlvbiBjb2Rlcworc2V0IEZQU1JfUUJZVEUsCQlVU0VSX0ZQU1IrMQkJIyBGUFNSIHFvdXRpZW50IGJ5dGUKK3NldCBGUFNSX0VYQ0VQVCwJVVNFUl9GUFNSKzIJCSMgRlBTUiBleGNlcHRpb24gc3RhdHVzIGJ5dGUKK3NldCBGUFNSX0FFWENFUFQsCVVTRVJfRlBTUiszCQkjIEZQU1IgYWNjcnVlZCBleGNlcHRpb24gYnl0ZQorCitzZXQgVVNFUl9GUENSLAkJTFYrMzIJCQkjIEZQIGNvbnRyb2wgcmVnaXN0ZXIKK3NldCBGUENSX0VOQUJMRSwJVVNFUl9GUENSKzIJCSMgRlBDUiBleGNlcHRpb24gZW5hYmxlCitzZXQgRlBDUl9NT0RFLAkJVVNFUl9GUENSKzMJCSMgRlBDUiByb3VuZGluZyBtb2RlIGNvbnRyb2wKKworc2V0IExfU0NSMywJCUxWKzI4CQkJIyBpbnRlZ2VyIHNjcmF0Y2ggMworc2V0IExfU0NSMiwJCUxWKzI0CQkJIyBpbnRlZ2VyIHNjcmF0Y2ggMgorc2V0IExfU0NSMSwJCUxWKzIwCQkJIyBpbnRlZ2VyIHNjcmF0Y2ggMQorCitzZXQgU1RPUkVfRkxHLAkJTFYrMTkJCQkjIGZsYWc6IG9wZXJhbmQgc3RvcmUgKGllLiBub3QgZmNtcC9mdHN0KQorCitzZXQgRVhDX1RFTVAyLAkJTFYrMjQJCQkjIHRlbXBvcmFyeSBzcGFjZQorc2V0IEVYQ19URU1QLAkJTFYrMTYJCQkjIHRlbXBvcmFyeSBzcGFjZQorCitzZXQgRFRBRywJCUxWKzE1CQkJIyBkZXN0aW5hdGlvbiBvcGVyYW5kIHR5cGUKK3NldCBTVEFHLAkJTFYrMTQJCQkjIHNvdXJjZSBvcGVyYW5kIHR5cGUKKworc2V0IFNQQ09ORF9GTEcsCQlMVisxMAkJCSMgZmxhZzogc3BlY2lhbCBjYXNlIChzZWUgYmVsb3cpCisKK3NldCBFWENfQ0MsCQlMVis4CQkJIyBzYXZlZCBjb25kaXRpb24gY29kZXMKK3NldCBFWENfRVhUV1BUUiwJTFYrNAkJCSMgc2F2ZWQgY3VycmVudCBQQyAoYWN0aXZlKQorc2V0IEVYQ19FWFRXT1JELAlMVisyCQkJIyBzYXZlZCBleHRlbnNpb24gd29yZAorc2V0IEVYQ19DTURSRUcsCQlMVisyCQkJIyBzYXZlZCBleHRlbnNpb24gd29yZAorc2V0IEVYQ19PUFdPUkQsCQlMViswCQkJIyBzYXZlZCBvcGVyYXRpb24gd29yZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEhlbHBmdWwgbWFjcm9zCisKK3NldCBGVEVNUCwJCTAJCQkjIG9mZnNldHMgd2l0aGluIGFuCitzZXQgRlRFTVBfRVgsCQkwCQkJIyBleHRlbmRlZCBwcmVjaXNpb24KK3NldCBGVEVNUF9TR04sCQkyCQkJIyB2YWx1ZSBzYXZlZCBpbiBtZW1vcnkuCitzZXQgRlRFTVBfSEksCQk0CitzZXQgRlRFTVBfTE8sCQk4CitzZXQgRlRFTVBfR1JTLAkJMTIKKworc2V0IExPQ0FMLAkJMAkJCSMgb2Zmc2V0cyB3aXRoaW4gYW4KK3NldCBMT0NBTF9FWCwJCTAJCQkjIGV4dGVuZGVkIHByZWNpc2lvbgorc2V0IExPQ0FMX1NHTiwJCTIJCQkjIHZhbHVlIHNhdmVkIGluIG1lbW9yeS4KK3NldCBMT0NBTF9ISSwJCTQKK3NldCBMT0NBTF9MTywJCTgKK3NldCBMT0NBTF9HUlMsCQkxMgorCitzZXQgRFNULAkJMAkJCSMgb2Zmc2V0cyB3aXRoaW4gYW4KK3NldCBEU1RfRVgsCQkwCQkJIyBleHRlbmRlZCBwcmVjaXNpb24KK3NldCBEU1RfSEksCQk0CQkJIyB2YWx1ZSBzYXZlZCBpbiBtZW1vcnkuCitzZXQgRFNUX0xPLAkJOAorCitzZXQgU1JDLAkJMAkJCSMgb2Zmc2V0cyB3aXRoaW4gYW4KK3NldCBTUkNfRVgsCQkwCQkJIyBleHRlbmRlZCBwcmVjaXNpb24KK3NldCBTUkNfSEksCQk0CQkJIyB2YWx1ZSBzYXZlZCBpbiBtZW1vcnkuCitzZXQgU1JDX0xPLAkJOAorCitzZXQgU0dMX0xPLAkJMHgzZjgxCQkJIyBtaW4gc2dsIHByZWMgZXhwb25lbnQKK3NldCBTR0xfSEksCQkweDQwN2UJCQkjIG1heCBzZ2wgcHJlYyBleHBvbmVudAorc2V0IERCTF9MTywJCTB4M2MwMQkJCSMgbWluIGRibCBwcmVjIGV4cG9uZW50CitzZXQgREJMX0hJLAkJMHg0M2ZlCQkJIyBtYXggZGJsIHByZWMgZXhwb25lbnQKK3NldCBFWFRfTE8sCQkweDAJCQkjIG1pbiBleHQgcHJlYyBleHBvbmVudAorc2V0IEVYVF9ISSwJCTB4N2ZmZQkJCSMgbWF4IGV4dCBwcmVjIGV4cG9uZW50CisKK3NldCBFWFRfQklBUywJCTB4M2ZmZgkJCSMgZXh0ZW5kZWQgcHJlY2lzaW9uIGJpYXMKK3NldCBTR0xfQklBUywJCTB4MDA3ZgkJCSMgc2luZ2xlIHByZWNpc2lvbiBiaWFzCitzZXQgREJMX0JJQVMsCQkweDAzZmYJCQkjIGRvdWJsZSBwcmVjaXNpb24gYmlhcworCitzZXQgTk9STSwJCTB4MDAJCQkjIG9wZXJhbmQgdHlwZSBmb3IgU1RBRy9EVEFHCitzZXQgWkVSTywJCTB4MDEJCQkjIG9wZXJhbmQgdHlwZSBmb3IgU1RBRy9EVEFHCitzZXQgSU5GLAkJMHgwMgkJCSMgb3BlcmFuZCB0eXBlIGZvciBTVEFHL0RUQUcKK3NldCBRTkFOLAkJMHgwMwkJCSMgb3BlcmFuZCB0eXBlIGZvciBTVEFHL0RUQUcKK3NldCBERU5PUk0sCQkweDA0CQkJIyBvcGVyYW5kIHR5cGUgZm9yIFNUQUcvRFRBRworc2V0IFNOQU4sCQkweDA1CQkJIyBvcGVyYW5kIHR5cGUgZm9yIFNUQUcvRFRBRworc2V0IFVOTk9STSwJCTB4MDYJCQkjIG9wZXJhbmQgdHlwZSBmb3IgU1RBRy9EVEFHCisKKyMjIyMjIyMjIyMjIyMjIyMjIworIyBGUFNSL0ZQQ1IgYml0cyAjCisjIyMjIyMjIyMjIyMjIyMjIyMKK3NldCBuZWdfYml0LAkJMHgzCQkJIyBuZWdhdGl2ZSByZXN1bHQKK3NldCB6X2JpdCwJCTB4MgkJCSMgemVybyByZXN1bHQKK3NldCBpbmZfYml0LAkJMHgxCQkJIyBpbmZpbml0ZSByZXN1bHQKK3NldCBuYW5fYml0LAkJMHgwCQkJIyBOQU4gcmVzdWx0CisKK3NldCBxX3NuX2JpdCwJCTB4NwkJCSMgc2lnbiBiaXQgb2YgcXVvdGllbnQgYnl0ZQorCitzZXQgYnN1bl9iaXQsCQk3CQkJIyBicmFuY2ggb24gdW5vcmRlcmVkCitzZXQgc25hbl9iaXQsCQk2CQkJIyBzaWduYWxsaW5nIE5BTgorc2V0IG9wZXJyX2JpdCwJCTUJCQkjIG9wZXJhbmQgZXJyb3IKK3NldCBvdmZsX2JpdCwJCTQJCQkjIG92ZXJmbG93CitzZXQgdW5mbF9iaXQsCQkzCQkJIyB1bmRlcmZsb3cKK3NldCBkel9iaXQsCQkyCQkJIyBkaXZpZGUgYnkgemVybworc2V0IGluZXgyX2JpdCwJCTEJCQkjIGluZXhhY3QgcmVzdWx0IDIKK3NldCBpbmV4MV9iaXQsCQkwCQkJIyBpbmV4YWN0IHJlc3VsdCAxCisKK3NldCBhaW9wX2JpdCwJCTcJCQkjIGFjY3J1ZWQgaW5leGFjdCBvcGVyYXRpb24gYml0CitzZXQgYW92ZmxfYml0LAkJNgkJCSMgYWNjcnVlZCBvdmVyZmxvdyBiaXQKK3NldCBhdW5mbF9iaXQsCQk1CQkJIyBhY2NydWVkIHVuZGVyZmxvdyBiaXQKK3NldCBhZHpfYml0LAkJNAkJCSMgYWNjcnVlZCBkeiBiaXQKK3NldCBhaW5leF9iaXQsCQkzCQkJIyBhY2NydWVkIGluZXhhY3QgYml0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEZQU1IgaW5kaXZpZHVhbCBiaXQgbWFza3MgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3NldCBuZWdfbWFzaywJCTB4MDgwMDAwMDAJCSMgbmVnYXRpdmUgYml0IG1hc2sgKGx3KQorc2V0IGluZl9tYXNrLAkJMHgwMjAwMDAwMAkJIyBpbmZpbml0eSBiaXQgbWFzayAobHcpCitzZXQgel9tYXNrLAkJMHgwNDAwMDAwMAkJIyB6ZXJvIGJpdCBtYXNrIChsdykKK3NldCBuYW5fbWFzaywJCTB4MDEwMDAwMDAJCSMgbmFuIGJpdCBtYXNrIChsdykKKworc2V0IG5lZ19ibWFzaywJCTB4MDgJCQkjIG5lZ2F0aXZlIGJpdCBtYXNrIChieXRlKQorc2V0IGluZl9ibWFzaywJCTB4MDIJCQkjIGluZmluaXR5IGJpdCBtYXNrIChieXRlKQorc2V0IHpfYm1hc2ssCQkweDA0CQkJIyB6ZXJvIGJpdCBtYXNrIChieXRlKQorc2V0IG5hbl9ibWFzaywJCTB4MDEJCQkjIG5hbiBiaXQgbWFzayAoYnl0ZSkKKworc2V0IGJzdW5fbWFzaywJCTB4MDAwMDgwMDAJCSMgYnN1biBleGNlcHRpb24gbWFzaworc2V0IHNuYW5fbWFzaywJCTB4MDAwMDQwMDAJCSMgc25hbiBleGNlcHRpb24gbWFzaworc2V0IG9wZXJyX21hc2ssCQkweDAwMDAyMDAwCQkjIG9wZXJyIGV4Y2VwdGlvbiBtYXNrCitzZXQgb3ZmbF9tYXNrLAkJMHgwMDAwMTAwMAkJIyBvdmVyZmxvdyBleGNlcHRpb24gbWFzaworc2V0IHVuZmxfbWFzaywJCTB4MDAwMDA4MDAJCSMgdW5kZXJmbG93IGV4Y2VwdGlvbiBtYXNrCitzZXQgZHpfbWFzaywJCTB4MDAwMDA0MDAJCSMgZHogZXhjZXB0aW9uIG1hc2sKK3NldCBpbmV4Ml9tYXNrLAkJMHgwMDAwMDIwMAkJIyBpbmV4MiBleGNlcHRpb24gbWFzaworc2V0IGluZXgxX21hc2ssCQkweDAwMDAwMTAwCQkjIGluZXgxIGV4Y2VwdGlvbiBtYXNrCisKK3NldCBhaW9wX21hc2ssCQkweDAwMDAwMDgwCQkjIGFjY3J1ZWQgaWxsZWdhbCBvcGVyYXRpb24KK3NldCBhb3ZmbF9tYXNrLAkJMHgwMDAwMDA0MAkJIyBhY2NydWVkIG92ZXJmbG93CitzZXQgYXVuZmxfbWFzaywJCTB4MDAwMDAwMjAJCSMgYWNjcnVlZCB1bmRlcmZsb3cKK3NldCBhZHpfbWFzaywJCTB4MDAwMDAwMTAJCSMgYWNjcnVlZCBkaXZpZGUgYnkgemVybworc2V0IGFpbmV4X21hc2ssCQkweDAwMDAwMDA4CQkjIGFjY3J1ZWQgaW5leGFjdAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBGUFNSIGNvbWJpbmF0aW9ucyB1c2VkIGluIHRoZSBGUFNQICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzZXQgZHppbmZfbWFzaywJCWluZl9tYXNrK2R6X21hc2srYWR6X21hc2sKK3NldCBvcG5hbl9tYXNrLAkJbmFuX21hc2srb3BlcnJfbWFzaythaW9wX21hc2sKK3NldCBuemlfbWFzaywJCTB4MDFmZmZmZmYJCSNjbGVhcnMgTiwgWiwgYW5kIEkKK3NldCB1bmZpbnhfbWFzaywJdW5mbF9tYXNrK2luZXgyX21hc2srYXVuZmxfbWFzaythaW5leF9tYXNrCitzZXQgdW5mMmlueF9tYXNrLAl1bmZsX21hc2sraW5leDJfbWFzaythaW5leF9tYXNrCitzZXQgb3ZmaW54X21hc2ssCW92ZmxfbWFzaytpbmV4Ml9tYXNrK2FvdmZsX21hc2srYWluZXhfbWFzaworc2V0IGlueDFhX21hc2ssCQlpbmV4MV9tYXNrK2FpbmV4X21hc2sKK3NldCBpbngyYV9tYXNrLAkJaW5leDJfbWFzaythaW5leF9tYXNrCitzZXQgc25hbmlvcF9tYXNrLAluYW5fbWFzaytzbmFuX21hc2srYWlvcF9tYXNrCitzZXQgc25hbmlvcDJfbWFzaywJc25hbl9tYXNrK2Fpb3BfbWFzaworc2V0IG5hbmlvcF9tYXNrLAluYW5fbWFzaythaW9wX21hc2sKK3NldCBuZWdpbmZfbWFzaywJbmVnX21hc2sraW5mX21hc2sKK3NldCBpbmZhaW9wX21hc2ssCWluZl9tYXNrK2Fpb3BfbWFzaworc2V0IG5lZ3pfbWFzaywJCW5lZ19tYXNrK3pfbWFzaworc2V0IG9wYW9wX21hc2ssCQlvcGVycl9tYXNrK2Fpb3BfbWFzaworc2V0IHVuZmxfaW54X21hc2ssCXVuZmxfbWFzaythdW5mbF9tYXNrK2FpbmV4X21hc2sKK3NldCBvdmZsX2lueF9tYXNrLAlvdmZsX21hc2srYW92ZmxfbWFzaythaW5leF9tYXNrCisKKyMjIyMjIyMjIworIyBtaXNjLiAjCisjIyMjIyMjIyMKK3NldCBybmRfc3RreV9iaXQsCTI5CQkJIyBzdGt5IGJpdCBwb3MgaW4gbG9uZ3dvcmQKKworc2V0IHNpZ25fYml0LAkJMHg3CQkJIyBzaWduIGJpdAorc2V0IHNpZ25hbl9iaXQsCQkweDYJCQkjIHNpZ25hbGxpbmcgbmFuIGJpdAorCitzZXQgc2dsX3RocmVzaCwJCTB4M2Y4MQkJCSMgbWluaW11bSBzZ2wgZXhwb25lbnQKK3NldCBkYmxfdGhyZXNoLAkJMHgzYzAxCQkJIyBtaW5pbXVtIGRibCBleHBvbmVudAorCitzZXQgeF9tb2RlLAkJMHgwCQkJIyBleHRlbmRlZCBwcmVjaXNpb24KK3NldCBzX21vZGUsCQkweDQJCQkjIHNpbmdsZSBwcmVjaXNpb24KK3NldCBkX21vZGUsCQkweDgJCQkjIGRvdWJsZSBwcmVjaXNpb24KKworc2V0IHJuX21vZGUsCQkweDAJCQkjIHJvdW5kLXRvLW5lYXJlc3QKK3NldCByel9tb2RlLAkJMHgxCQkJIyByb3VuZC10by16ZXJvCitzZXQgcm1fbW9kZSwJCTB4MgkJCSMgcm91bmQtdHAtbWludXMtaW5maW5pdHkKK3NldCBycF9tb2RlLAkJMHgzCQkJIyByb3VuZC10by1wbHVzLWluZmluaXR5CisKK3NldCBtYW50aXNzYWxlbiwJNjQJCQkjIGxlbmd0aCBvZiBtYW50aXNzYSBpbiBiaXRzCisKK3NldCBCWVRFLAkJMQkJCSMgbGVuKGJ5dGUpID09IDEgYnl0ZQorc2V0IFdPUkQsCQkyCQkJIyBsZW4od29yZCkgPT0gMiBieXRlcworc2V0IExPTkcsCQk0CQkJIyBsZW4obG9uZ3dvcmQpID09IDIgYnl0ZXMKKworc2V0IEJTVU5fVkVDLAkJMHhjMAkJCSMgYnN1biAgICB2ZWN0b3Igb2Zmc2V0CitzZXQgSU5FWF9WRUMsCQkweGM0CQkJIyBpbmV4YWN0IHZlY3RvciBvZmZzZXQKK3NldCBEWl9WRUMsCQkweGM4CQkJIyBkeiAgICAgIHZlY3RvciBvZmZzZXQKK3NldCBVTkZMX1ZFQywJCTB4Y2MJCQkjIHVuZmwgICAgdmVjdG9yIG9mZnNldAorc2V0IE9QRVJSX1ZFQywJCTB4ZDAJCQkjIG9wZXJyICAgdmVjdG9yIG9mZnNldAorc2V0IE9WRkxfVkVDLAkJMHhkNAkJCSMgb3ZmbCAgICB2ZWN0b3Igb2Zmc2V0CitzZXQgU05BTl9WRUMsCQkweGQ4CQkJIyBzbmFuICAgIHZlY3RvciBvZmZzZXQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNQZWNpYWwgQ09ORGl0aW9uIEZMYUdzICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc2V0IGZ0cmFwY2NfZmxnLAkweDAxCQkJIyBmbGFnIGJpdDogZnRyYXBjYyBleGNlcHRpb24KK3NldCBmYnN1bl9mbGcsCQkweDAyCQkJIyBmbGFnIGJpdDogYnN1biBleGNlcHRpb24KK3NldCBtaWE3X2ZsZywJCTB4MDQJCQkjIGZsYWcgYml0OiAoYTcpKyA8ZWE+CitzZXQgbWRhN19mbGcsCQkweDA4CQkJIyBmbGFnIGJpdDogLShhNykgPGVhPgorc2V0IGZtb3ZtX2ZsZywJCTB4NDAJCQkjIGZsYWcgYml0OiBmbW92bSBpbnN0cnVjdGlvbgorc2V0IGltbWVkX2ZsZywJCTB4ODAJCQkjIGZsYWcgYml0OiAmPGRhdGE+IDxlYT4KKworc2V0IGZ0cmFwY2NfYml0LAkweDAKK3NldCBmYnN1bl9iaXQsCQkweDEKK3NldCBtaWE3X2JpdCwJCTB4Mgorc2V0IG1kYTdfYml0LAkJMHgzCitzZXQgaW1tZWRfYml0LAkJMHg3CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVFJBTlNDRU5ERU5UQUwgIkxBU1QtT1AiIEZMQUdTICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3NldCBGTVVMX09QLAkJMHgwCQkJIyBmbXVsIGluc3RyIHBlcmZvcm1lZCBsYXN0CitzZXQgRkRJVl9PUCwJCTB4MQkJCSMgZmRpdiBwZXJmb3JtZWQgbGFzdAorc2V0IEZBRERfT1AsCQkweDIJCQkjIGZhZGQgcGVyZm9ybWVkIGxhc3QKK3NldCBGTU9WX09QLAkJMHgzCQkJIyBmbW92IHBlcmZvcm1lZCBsYXN0CisKKyMjIyMjIyMjIyMjIyMKKyMgQ09OU1RBTlRTICMKKyMjIyMjIyMjIyMjIyMKK1QxOglsb25nCQkweDQwQzYyRDM4LDB4RDNENjQ2MzQJIyAxNjM4MSBMT0cyIExFQUQKK1QyOglsb25nCQkweDNENkY5MEFFLDB4QjFFNzVDQzcJIyAxNjM4MSBMT0cyIFRSQUlMCisKK1BJOglsb25nCQkweDQwMDAwMDAwLDB4QzkwRkRBQTIsMHgyMTY4QzIzNSwweDAwMDAwMDAwCitQSUJZMjoJbG9uZwkJMHgzRkZGMDAwMCwweEM5MEZEQUEyLDB4MjE2OEMyMzUsMHgwMDAwMDAwMAorCitUV09CWVBJOgorCWxvbmcJCTB4M0ZFNDVGMzAsMHg2REM5Qzg4MworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9mcHNwX292ZmwoKTogMDYwRlBTUCBlbnRyeSBwb2ludCBmb3IgRlAgT3ZlcmZsb3cgZXhjZXB0aW9uLgkjCisjCQkJCQkJCQkJIworIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIHRoZQkjCisjCUZQIE92ZXJmbG93IGV4Y2VwdGlvbiBpbiBhbiBvcGVyYXRpbmcgc3lzdGVtLgkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9pbWVtX3JlYWRfbG9uZygpIC0gcmVhZCBpbnN0cnVjdGlvbiBsb25nd29yZAkJCSMKKyMJZml4X3NrZXdlZF9vcHMoKSAtIGFkanVzdCBzcmMgb3BlcmFuZCBpbiBmc2F2ZSBmcmFtZQkJIworIwlzZXRfdGFnX3goKSAtIGRldGVybWluZSBvcHR5cGUgb2Ygc3JjL2RzdCBvcGVyYW5kcwkJIworIwlzdG9yZV9mcHJlZygpIC0gc3RvcmUgb3BjbGFzcyAwIG9yIDIgcmVzdWx0IHRvIEZQIHJlZ2ZpbGUJIworIwl1bm5vcm1fZml4KCkgLSBjaGFuZ2UgVU5OT1JNIG9wZXJhbmRzIHRvIE5PUk0gb3IgWkVSTwkJIworIwlsb2FkX2ZwbjIoKSAtIGxvYWQgZHN0IG9wZXJhbmQgZnJvbSBGUCByZWdmaWxlCQkJIworIwlmb3V0KCkgLSBlbXVsYXRlIGFuIG9wY2xhc3MgMyBpbnN0cnVjdGlvbgkJCSMKKyMJdGJsX3Vuc3VwcCAtIGFkZCBvZiB0YWJsZSBvZiBlbXVsYXRpb24gcm91dGluZXMgZm9yIG9wY2xhc3MgMCwyCSMKKyMJX2Zwc3BfZG9uZSgpIC0gImNhbGxvdXQiIGZvciAwNjBGUFNQIGV4aXQgKGFsbCB3b3JrIGRvbmUhKQkjCisjCV9yZWFsX292ZmwoKSAtICJjYWxsb3V0IiBmb3IgT3ZlcmZsb3cgZXhjZXB0aW9uIGVuYWJsZWQgY29kZQkjCisjCV9yZWFsX2luZXgoKSAtICJjYWxsb3V0IiBmb3IgSW5leGFjdCBleGNlcHRpb24gZW5hYmxlZCBjb2RlCSMKKyMJX3JlYWxfdHJhY2UoKSAtICJjYWxsb3V0IiBmb3IgVHJhY2UgZXhjZXB0aW9uIGNvZGUJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBjb250YWlucyB0aGUgRlAgT3ZmbCBleGNlcHRpb24gc3RhY2sgZnJhbWUJIworIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgc291cmNlIG9wZXJhbmQJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlPdmVyZmxvdyBFeGNlcHRpb24gZW5hYmxlZDoJCQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIHVuY2hhbmdlZAkJCQkJIworIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgYWRqdXN0ZWQgc3JjIG9wIGZvciBvcGNsYXNzIDAsMgkjCisjCU92ZXJmbG93IEV4Y2VwdGlvbiBkaXNhYmxlZDoJCQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIHVuY2hhbmdlZAkJCQkJIworIwktIFRoZSAiZXhjZXB0aW9uIHByZXNlbnQiIGZsYWcgaW4gdGhlIGZzYXZlIGZyYW1lIGlzIGNsZWFyZWQJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJT24gdGhlIDA2MCwgaWYgYW4gRlAgb3ZlcmZsb3cgaXMgcHJlc2VudCBhcyB0aGUgcmVzdWx0IG9mIGFueQkjCisjIGluc3RydWN0aW9uLCB0aGUgMDYwIHdpbGwgdGFrZSBhbiBvdmVyZmxvdyBleGNlcHRpb24gd2hldGhlciB0aGUJIworIyBleGNlcHRpb24gaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUgRlBDUi4gRm9yIHRoZSBkaXNhYmxlZCBjYXNlLAkjCisjIFRoaXMgaGFuZGxlciBlbXVsYXRlcyB0aGUgaW5zdHJ1Y3Rpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGNvcnJlY3QJIworIyBkZWZhdWx0IHJlc3VsdCBzaG91bGQgYmUgZm9yIHRoZSBvcGVyYXRpb24uIFRoaXMgZGVmYXVsdCByZXN1bHQgaXMJIworIyB0aGVuIHN0b3JlZCBpbiBlaXRoZXIgdGhlIEZQIHJlZ2ZpbGUsIGRhdGEgcmVnZmlsZSwgb3IgbWVtb3J5LgkjCisjIEZpbmFsbHksIHRoZSBoYW5kbGVyIGV4aXRzIHRocm91Z2ggdGhlICJjYWxsb3V0IiBfZnBzcF9kb25lKCkJCSMKKyMgZGVub3RpbmcgdGhhdCBubyBleGNlcHRpb25hbCBjb25kaXRpb25zIGV4aXN0IHdpdGhpbiB0aGUgbWFjaGluZS4JIworIwlJZiB0aGUgZXhjZXB0aW9uIGlzIGVuYWJsZWQsIHRoZW4gdGhpcyBoYW5kbGVyIG11c3QgY3JlYXRlIHRoZQkjCisjIGV4Y2VwdGlvbmFsIG9wZXJhbmQgYW5kIHBsYXZlIGl0IGluIHRoZSBmc2F2ZSBzdGF0ZSBmcmFtZSwgYW5kIHN0b3JlCSMKKyMgdGhlIGRlZmF1bHQgcmVzdWx0IChvbmx5IGlmIHRoZSBpbnN0cnVjdGlvbiBpcyBvcGNsYXNzIDMpLiBGb3IJIworIyBleGNlcHRpb25zIGVuYWJsZWQsIHRoaXMgaGFuZGxlciBtdXN0IGV4aXQgdGhyb3VnaCB0aGUgImNhbGxvdXQiCSMKKyMgX3JlYWxfb3ZmbCgpIHNvIHRoYXQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZW5hYmxlZCBvdmVyZmxvdyBoYW5kbGVyCSMKKyMgY2FuIGhhbmRsZSB0aGlzIGNhc2UuCQkJCQkJCSMKKyMJVHdvIG90aGVyIGNvbmRpdGlvbnMgZXhpc3QuIEZpcnN0LCBpZiBvdmVyZmxvdyB3YXMgZGlzYWJsZWQJIworIyBidXQgdGhlIGluZXhhY3QgZXhjZXB0aW9uIHdhcyBlbmFibGVkLCB0aGlzIGhhbmRsZXIgbXVzdCBleGl0CQkjCisjIHRocm91Z2ggdGhlICJjYWxsb3V0IiBfcmVhbF9pbmV4KCkgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSByZXN1bHQJIworIyB3YXMgaW5leGFjdC4JCQkJCQkJCSMKKyMJQWxzbywgaW4gdGhlIGNhc2Ugb2YgYW4gb3BjbGFzcyB0aHJlZSBpbnN0cnVjdGlvbiB3aGVyZQkJIworIyBvdmVyZmxvdyB3YXMgZGlzYWJsZWQgYW5kIHRoZSB0cmFjZSBleGNlcHRpb24gd2FzIGVuYWJsZWQsIHRoaXMJIworIyBoYW5kbGVyIG11c3QgZXhpdCB0aHJvdWdoIHRoZSAiY2FsbG91dCIgX3JlYWxfdHJhY2UoKS4JCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCV9mcHNwX292ZmwKK19mcHNwX292Zmw6CisKKyMkIwlzdWIubAkJJjI0LCVzcAkJCSMgbWFrZSByb29tIGZvciBzcmMvZHN0CisKKwlsaW5rLncJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCisKKwlmc2F2ZQkJRlBfU1JDKCVhNikJCSMgZ3JhYiB0aGUgImJ1c3kiIGZyYW1lCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlBSRUdTKCVhNikJIyBzYXZlIGZwMC1mcDEgb24gc3RhY2sKKworIyB0aGUgRlBJQVIgaG9sZHMgdGhlICJjdXJyZW50IFBDIiBvZiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24KKwltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19FWFRXUFRSKCVhNikKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggdGhlIGluc3RydWN0aW9uIHdvcmRzCisJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlidHN0CQkmMHg1LEVYQ19DTURSRUcoJWE2KQkjIGlzIGluc3RyIGFuIGZtb3ZlIG91dD8KKwlibmUudwkJZm92Zmxfb3V0CisKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKKwlic3IubAkJZml4X3NrZXdlZF9vcHMJCSMgZml4IHNyYyBvcAorCisjIHNpbmNlLCBJIGJlbGlldmUsIG9ubHkgTk9STXMgYW5kIERFTk9STXMgY2FuIGNvbWUgdGhyb3VnaCBoZXJlLAorIyBtYXliZSB3ZSBjYW4gYXZvaWQgdGhlIHN1YnJvdXRpbmUgY2FsbC4KKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCisJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQorCW1vdi5iCQklZDAsU1RBRyglYTYpCQkjIG1heWJlIE5PUk0sREVOT1JNCisKKyMgYml0IGZpdmUgb2YgdGhlIGZwIGV4dGVuc2lvbiB3b3JkIHNlcGFyYXRlcyB0aGUgbW9uYWRpYyBhbmQgZHlhZGljIG9wZXJhdGlvbnMKKyMgdGhhdCBjYW4gcGFzcyB0aHJvdWdoIGZwc3Bfb3ZmbCgpLiByZW1lbWJlciB0aGF0IGZjbXAsIGZ0c3QsIGFuZCBmc2luY29zCisjIHdpbGwgbmV2ZXIgdGFrZSB0aGlzIGV4Y2VwdGlvbi4KKwlidHN0CQkmMHg1LDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3BlcmF0aW9uIG1vbmFkaWMgb3IgZHlhZGljPworCWJlcS5iCQlmb3ZmbF9leHRyYWN0CQkjIG1vbmFkaWMKKworCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAgIyBkeWFkaWM7IGxvYWQgZHN0IHJlZworCWJzci5sCQlsb2FkX2ZwbjIJCSMgbG9hZCBkc3QgaW50byBGUF9EU1QKKworCWxlYQkJRlBfRFNUKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBkc3Qgb3AKKwlic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCisJY21waS5iCQklZDAsJlVOTk9STQkJIyBpcyBvcGVyYW5kIGFuIFVOTk9STT8KKwlibmUuYgkJZm92Zmxfb3AyX2RvbmUJCSMgbm8KKwlic3IubAkJdW5ub3JtX2ZpeAkJIyB5ZXM7IGNvbnZlcnQgdG8gTk9STSxERU5PUk0sb3IgWkVSTworZm92Zmxfb3AyX2RvbmU6CisJbW92LmIJCSVkMCxEVEFHKCVhNikJCSMgc2F2ZSBkc3Qgb3B0eXBlIHRhZworCitmb3ZmbF9leHRyYWN0OgorCisjJCMJbW92LmwJCUZQX1NSQ19FWCglYTYpLFRSQVBfU1JDT1BfRVgoJWE2KQorIyQjCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSxUUkFQX1NSQ09QX0hJKCVhNikKKyMkIwltb3YubAkJRlBfU1JDX0xPKCVhNiksVFJBUF9TUkNPUF9MTyglYTYpCisjJCMJbW92LmwJCUZQX0RTVF9FWCglYTYpLFRSQVBfRFNUT1BfRVgoJWE2KQorIyQjCW1vdi5sCQlGUF9EU1RfSEkoJWE2KSxUUkFQX0RTVE9QX0hJKCVhNikKKyMkIwltb3YubAkJRlBfRFNUX0xPKCVhNiksVFJBUF9EU1RPUF9MTyglYTYpCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIHByZWMvbW9kZQorCisJbW92LmIJCTErRVhDX0NNRFJFRyglYTYpLCVkMQorCWFuZGkudwkJJjB4MDA3ZiwlZDEJCSMgZXh0cmFjdCBleHRlbnNpb24KKworCWFuZGkubAkJJjB4MDBmZjAxZmYsVVNFUl9GUFNSKCVhNikgIyB6ZXJvIGFsbCBidXQgYWNjdXJlZCBmaWVsZAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gY3VycmVudCBjb250cm9sIHJlZ3MKKwlmbW92LmwJCSYweDAsJWZwc3IKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJbGVhCQlGUF9EU1QoJWE2KSwlYTEKKworIyBtYXliZSB3ZSBjYW4gbWFrZSB0aGVzZSBlbnRyeSBwb2ludHMgT05MWSB0aGUgT1ZGTCBlbnRyeSBwb2ludHMgb2YgZWFjaCByb3V0aW5lLgorCW1vdi5sCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEudyo0KSwlZDEgIyBmZXRjaCByb3V0aW5lIGFkZHIKKwlqc3IJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS5sKjEpCisKKyMgdGhlIG9wZXJhdGlvbiBoYXMgYmVlbiBlbXVsYXRlZC4gdGhlIHJlc3VsdCBpcyBpbiBmcDAuCisjIHRoZSBFWE9QLCBpZiBhbiBleGNlcHRpb24gb2NjdXJyZWQsIGlzIGluIGZwMS4KKyMgd2UgbXVzdCBzYXZlIHRoZSBkZWZhdWx0IHJlc3VsdCByZWdhcmRsZXNzIG9mIHdoZXRoZXIKKyMgdHJhcHMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMAorCWJzci5sCQlzdG9yZV9mcHJlZworCisjIHRoZSBleGNlcHRpb25hbCBwb3NzaWJpbGl0aWVzIHdlIGhhdmUgbGVmdCBvdXJzZWx2ZXMgd2l0aCBhcmUgT05MWSBvdmVyZmxvdworIyBhbmQgaW5leGFjdC4gYW5kLCB0aGUgaW5leGFjdCBpcyBzdWNoIHRoYXQgb3ZlcmZsb3cgb2NjdXJyZWQgYW5kIHdhcyBkaXNhYmxlZAorIyBidXQgaW5leGFjdCB3YXMgZW5hYmxlZC4KKwlidHN0CQkmb3ZmbF9iaXQsRlBDUl9FTkFCTEUoJWE2KQorCWJuZS5iCQlmb3ZmbF9vdmZsX29uCisKKwlidHN0CQkmaW5leDJfYml0LEZQQ1JfRU5BQkxFKCVhNikKKwlibmUuYgkJZm92ZmxfaW5leF9vbgorCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYKKyMkIwlhZGQubAkJJjI0LCVzcAorCWJyYS5sCQlfZnBzcF9kb25lCisKKyMgb3ZlcmZsb3cgaXMgZW5hYmxlZCBBTkQgb3ZlcmZsb3csIG9mIGNvdXJzZSwgb2NjdXJyZWQuIHNvLCB3ZSBoYXZlIHRoZSBFWE9QCisjIGluIGZwMS4gbm93LCBzaW1wbHkganVtcCB0byBfcmVhbF9vdmZsKCkhCitmb3ZmbF9vdmZsX29uOgorCWZtb3ZtLngJCSYweDQwLEZQX1NSQyglYTYpCSMgc2F2ZSBFWE9QIChmcDEpIHRvIHN0YWNrCisKKwltb3YudwkJJjB4ZTAwNSwyK0ZQX1NSQyglYTYpCSMgc2F2ZSBleGMgc3RhdHVzCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIGRvIHRoaXMgYWZ0ZXIgZm1vdm0sb3RoZXIgZjxvcD5zIQorCisJdW5sawkJJWE2CisKKwlicmEubAkJX3JlYWxfb3ZmbAorCisjIG92ZXJmbG93IG9jY3VycmVkIGJ1dCBpcyBkaXNhYmxlZC4gbWVhbndoaWxlLCBpbmV4YWN0IGlzIGVuYWJsZWQuIHRoZXJlZm9yZSwKKyMgd2UgbXVzdCBqdW1wIHRvIHJlYWxfaW5leCgpLgorZm92ZmxfaW5leF9vbjoKKworCWZtb3ZtLngJCSYweDQwLEZQX1NSQyglYTYpCSMgc2F2ZSBFWE9QIChmcDEpIHRvIHN0YWNrCisKKwltb3YuYgkJJjB4YzQsMStFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4YzQKKwltb3YudwkJJjB4ZTAwMSwyK0ZQX1NSQyglYTYpCSMgc2F2ZSBleGMgc3RhdHVzCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIGRvIHRoaXMgYWZ0ZXIgZm1vdm0sb3RoZXIgZjxvcD5zIQorCisJdW5sawkJJWE2CisKKwlicmEubAkJX3JlYWxfaW5leAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2ZvdmZsX291dDoKKworCisjJCMJbW92LmwJCUZQX1NSQ19FWCglYTYpLFRSQVBfU1JDT1BfRVgoJWE2KQorIyQjCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSxUUkFQX1NSQ09QX0hJKCVhNikKKyMkIwltb3YubAkJRlBfU1JDX0xPKCVhNiksVFJBUF9TUkNPUF9MTyglYTYpCisKKyMgdGhlIHNyYyBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYSBOT1JNKCEpLCBzbyB0YWcgaXQgYXMgc3VjaAorCW1vdi5iCQkmTk9STSxTVEFHKCVhNikJCSMgc2V0IHNyYyBvcHR5cGUgdGFnCisKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIHByZWMvbW9kZQorCisJYW5kLmwJCSYweGZmZmYwMGZmLFVTRVJfRlBTUiglYTYpICMgemVybyBhbGwgYnV0IGFjY3VyZWQgZmllbGQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIGN1cnJlbnQgY29udHJvbCByZWdzCisJZm1vdi5sCQkmMHgwLCVmcHNyCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMgb3BlcmFuZAorCisJYnNyLmwJCWZvdXQKKworCWJ0c3QJCSZvdmZsX2JpdCxGUENSX0VOQUJMRSglYTYpCisJYm5lLncJCWZvdmZsX292Zmxfb24KKworCWJ0c3QJCSZpbmV4Ml9iaXQsRlBDUl9FTkFCTEUoJWE2KQorCWJuZS53CQlmb3ZmbF9pbmV4X29uCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgorIyQjCWFkZC5sCQkmMjQsJXNwCisKKwlidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPworCWJlcS5sCQlfZnBzcF9kb25lCQkjIG5vCisKKwlmbW92LmwJCSVmcGlhciwweDgoJXNwKQkJIyAiQ3VycmVudCBQQyIgaXMgaW4gRlBJQVIKKwltb3YudwkJJjB4MjAyNCwweDYoJXNwKQkjIHN0ayBmbXQgPSAweDI7IHZvZmYgPSAweDAyNAorCWJyYS5sCQlfcmVhbF90cmFjZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9mcHNwX3VuZmwoKTogMDYwRlBTUCBlbnRyeSBwb2ludCBmb3IgRlAgVW5kZXJmbG93IGV4Y2VwdGlvbi4JIworIwkJCQkJCQkJCSMKKyMJVGhpcyBoYW5kbGVyIHNob3VsZCBiZSB0aGUgZmlyc3QgY29kZSBleGVjdXRlZCB1cG9uIHRha2luZyB0aGUJIworIwlGUCBVbmRlcmZsb3cgZXhjZXB0aW9uIGluIGFuIG9wZXJhdGluZyBzeXN0ZW0uCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2ltZW1fcmVhZF9sb25nKCkgLSByZWFkIGluc3RydWN0aW9uIGxvbmd3b3JkCQkJIworIwlmaXhfc2tld2VkX29wcygpIC0gYWRqdXN0IHNyYyBvcGVyYW5kIGluIGZzYXZlIGZyYW1lCQkjCisjCXNldF90YWdfeCgpIC0gZGV0ZXJtaW5lIG9wdHlwZSBvZiBzcmMvZHN0IG9wZXJhbmRzCQkjCisjCXN0b3JlX2ZwcmVnKCkgLSBzdG9yZSBvcGNsYXNzIDAgb3IgMiByZXN1bHQgdG8gRlAgcmVnZmlsZQkjCisjCXVubm9ybV9maXgoKSAtIGNoYW5nZSBVTk5PUk0gb3BlcmFuZHMgdG8gTk9STSBvciBaRVJPCQkjCisjCWxvYWRfZnBuMigpIC0gbG9hZCBkc3Qgb3BlcmFuZCBmcm9tIEZQIHJlZ2ZpbGUJCQkjCisjCWZvdXQoKSAtIGVtdWxhdGUgYW4gb3BjbGFzcyAzIGluc3RydWN0aW9uCQkJIworIwl0YmxfdW5zdXBwIC0gYWRkIG9mIHRhYmxlIG9mIGVtdWxhdGlvbiByb3V0aW5lcyBmb3Igb3BjbGFzcyAwLDIJIworIwlfZnBzcF9kb25lKCkgLSAiY2FsbG91dCIgZm9yIDA2MEZQU1AgZXhpdCAoYWxsIHdvcmsgZG9uZSEpCSMKKyMJX3JlYWxfb3ZmbCgpIC0gImNhbGxvdXQiIGZvciBPdmVyZmxvdyBleGNlcHRpb24gZW5hYmxlZCBjb2RlCSMKKyMJX3JlYWxfaW5leCgpIC0gImNhbGxvdXQiIGZvciBJbmV4YWN0IGV4Y2VwdGlvbiBlbmFibGVkIGNvZGUJIworIwlfcmVhbF90cmFjZSgpIC0gImNhbGxvdXQiIGZvciBUcmFjZSBleGNlcHRpb24gY29kZQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIHRoZSBGUCBVbmZsIGV4Y2VwdGlvbiBzdGFjayBmcmFtZQkjCisjCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBzb3VyY2Ugb3BlcmFuZAkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVVuZGVyZmxvdyBFeGNlcHRpb24gZW5hYmxlZDoJCQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIHVuY2hhbmdlZAkJCQkJIworIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgYWRqdXN0ZWQgc3JjIG9wIGZvciBvcGNsYXNzIDAsMgkjCisjCVVuZGVyZmxvdyBFeGNlcHRpb24gZGlzYWJsZWQ6CQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBpcyB1bmNoYW5nZWQJCQkJCSMKKyMJLSBUaGUgImV4Y2VwdGlvbiBwcmVzZW50IiBmbGFnIGluIHRoZSBmc2F2ZSBmcmFtZSBpcyBjbGVhcmVkCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU9uIHRoZSAwNjAsIGlmIGFuIEZQIHVuZGVyZmxvdyBpcyBwcmVzZW50IGFzIHRoZSByZXN1bHQgb2YgYW55CSMKKyMgaW5zdHJ1Y3Rpb24sIHRoZSAwNjAgd2lsbCB0YWtlIGFuIHVuZGVyZmxvdyBleGNlcHRpb24gd2hldGhlciB0aGUJIworIyBleGNlcHRpb24gaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUgRlBDUi4gRm9yIHRoZSBkaXNhYmxlZCBjYXNlLAkjCisjIFRoaXMgaGFuZGxlciBlbXVsYXRlcyB0aGUgaW5zdHJ1Y3Rpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGNvcnJlY3QJIworIyBkZWZhdWx0IHJlc3VsdCBzaG91bGQgYmUgZm9yIHRoZSBvcGVyYXRpb24uIFRoaXMgZGVmYXVsdCByZXN1bHQgaXMJIworIyB0aGVuIHN0b3JlZCBpbiBlaXRoZXIgdGhlIEZQIHJlZ2ZpbGUsIGRhdGEgcmVnZmlsZSwgb3IgbWVtb3J5LgkjCisjIEZpbmFsbHksIHRoZSBoYW5kbGVyIGV4aXRzIHRocm91Z2ggdGhlICJjYWxsb3V0IiBfZnBzcF9kb25lKCkJCSMKKyMgZGVub3RpbmcgdGhhdCBubyBleGNlcHRpb25hbCBjb25kaXRpb25zIGV4aXN0IHdpdGhpbiB0aGUgbWFjaGluZS4JIworIwlJZiB0aGUgZXhjZXB0aW9uIGlzIGVuYWJsZWQsIHRoZW4gdGhpcyBoYW5kbGVyIG11c3QgY3JlYXRlIHRoZQkjCisjIGV4Y2VwdGlvbmFsIG9wZXJhbmQgYW5kIHBsYXZlIGl0IGluIHRoZSBmc2F2ZSBzdGF0ZSBmcmFtZSwgYW5kIHN0b3JlCSMKKyMgdGhlIGRlZmF1bHQgcmVzdWx0IChvbmx5IGlmIHRoZSBpbnN0cnVjdGlvbiBpcyBvcGNsYXNzIDMpLiBGb3IJIworIyBleGNlcHRpb25zIGVuYWJsZWQsIHRoaXMgaGFuZGxlciBtdXN0IGV4aXQgdGhyb3VnaCB0aGUgImNhbGxvdXQiCSMKKyMgX3JlYWxfdW5mbCgpIHNvIHRoYXQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZW5hYmxlZCBvdmVyZmxvdyBoYW5kbGVyCSMKKyMgY2FuIGhhbmRsZSB0aGlzIGNhc2UuCQkJCQkJCSMKKyMJVHdvIG90aGVyIGNvbmRpdGlvbnMgZXhpc3QuIEZpcnN0LCBpZiB1bmRlcmZsb3cgd2FzIGRpc2FibGVkCSMKKyMgYnV0IHRoZSBpbmV4YWN0IGV4Y2VwdGlvbiB3YXMgZW5hYmxlZCBhbmQgdGhlIHJlc3VsdCB3YXMgaW5leGFjdCwJIworIyB0aGlzIGhhbmRsZXIgbXVzdCBleGl0IHRocm91Z2ggdGhlICJjYWxsb3V0IiBfcmVhbF9pbmV4KCkuCQkjCisjIHdhcyBpbmV4YWN0LgkJCQkJCQkJIworIwlBbHNvLCBpbiB0aGUgY2FzZSBvZiBhbiBvcGNsYXNzIHRocmVlIGluc3RydWN0aW9uIHdoZXJlCQkjCisjIHVuZGVyZmxvdyB3YXMgZGlzYWJsZWQgYW5kIHRoZSB0cmFjZSBleGNlcHRpb24gd2FzIGVuYWJsZWQsIHRoaXMJIworIyBoYW5kbGVyIG11c3QgZXhpdCB0aHJvdWdoIHRoZSAiY2FsbG91dCIgX3JlYWxfdHJhY2UoKS4JCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCV9mcHNwX3VuZmwKK19mcHNwX3VuZmw6CisKKyMkIwlzdWIubAkJJjI0LCVzcAkJCSMgbWFrZSByb29tIGZvciBzcmMvZHN0CisKKwlsaW5rLncJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCisKKwlmc2F2ZQkJRlBfU1JDKCVhNikJCSMgZ3JhYiB0aGUgImJ1c3kiIGZyYW1lCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlBSRUdTKCVhNikJIyBzYXZlIGZwMC1mcDEgb24gc3RhY2sKKworIyB0aGUgRlBJQVIgaG9sZHMgdGhlICJjdXJyZW50IFBDIiBvZiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24KKwltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19FWFRXUFRSKCVhNikKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggdGhlIGluc3RydWN0aW9uIHdvcmRzCisJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlidHN0CQkmMHg1LEVYQ19DTURSRUcoJWE2KQkjIGlzIGluc3RyIGFuIGZtb3ZlIG91dD8KKwlibmUudwkJZnVuZmxfb3V0CisKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKKwlic3IubAkJZml4X3NrZXdlZF9vcHMJCSMgZml4IHNyYyBvcAorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHNyYyBvcAorCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQkJIyBtYXliZSBOT1JNLERFTk9STQorCisjIGJpdCBmaXZlIG9mIHRoZSBmcCBleHQgd29yZCBzZXBhcmF0ZXMgdGhlIG1vbmFkaWMgYW5kIGR5YWRpYyBvcGVyYXRpb25zCisjIHRoYXQgY2FuIHBhc3MgdGhyb3VnaCBmcHNwX3VuZmwoKS4gcmVtZW1iZXIgdGhhdCBmY21wLCBhbmQgZnRzdAorIyB3aWxsIG5ldmVyIHRha2UgdGhpcyBleGNlcHRpb24uCisJYnRzdAkJJjB4NSwxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wIG1vbmFkaWMgb3IgZHlhZGljPworCWJlcS5iCQlmdW5mbF9leHRyYWN0CQkjIG1vbmFkaWMKKworIyBub3csIHdoYXQncyBsZWZ0IHRoYXQncyBub3QgZHlhZGljIGlzIGZzaW5jb3MuIHdlIGNhbiBkaXN0aW5ndWlzaCBpdAorIyBmcm9tIGFsbCBkeWFkaWNzIGJ5IHRoZSAnMDExMHh4eCBwYXR0ZXJuCisJYnRzdAkJJjB4NCwxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wIGFuIGZzaW5jb3M/CisJYm5lLmIJCWZ1bmZsX2V4dHJhY3QJCSMgeWVzCisKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwICMgZHlhZGljOyBsb2FkIGRzdCByZWcKKwlic3IubAkJbG9hZF9mcG4yCQkjIGxvYWQgZHN0IGludG8gRlBfRFNUCisKKwlsZWEJCUZQX0RTVCglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gZHN0IG9wCisJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQorCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgb3BlcmFuZCBhbiBVTk5PUk0/CisJYm5lLmIJCWZ1bmZsX29wMl9kb25lCQkjIG5vCisJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBjb252ZXJ0IHRvIE5PUk0sREVOT1JNLG9yIFpFUk8KK2Z1bmZsX29wMl9kb25lOgorCW1vdi5iCQklZDAsRFRBRyglYTYpCQkjIHNhdmUgZHN0IG9wdHlwZSB0YWcKKworZnVuZmxfZXh0cmFjdDoKKworIyQjCW1vdi5sCQlGUF9TUkNfRVgoJWE2KSxUUkFQX1NSQ09QX0VYKCVhNikKKyMkIwltb3YubAkJRlBfU1JDX0hJKCVhNiksVFJBUF9TUkNPUF9ISSglYTYpCisjJCMJbW92LmwJCUZQX1NSQ19MTyglYTYpLFRSQVBfU1JDT1BfTE8oJWE2KQorIyQjCW1vdi5sCQlGUF9EU1RfRVgoJWE2KSxUUkFQX0RTVE9QX0VYKCVhNikKKyMkIwltb3YubAkJRlBfRFNUX0hJKCVhNiksVFJBUF9EU1RPUF9ISSglYTYpCisjJCMJbW92LmwJCUZQX0RTVF9MTyglYTYpLFRSQVBfRFNUT1BfTE8oJWE2KQorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBwcmVjL21vZGUKKworCW1vdi5iCQkxK0VYQ19DTURSRUcoJWE2KSwlZDEKKwlhbmRpLncJCSYweDAwN2YsJWQxCQkjIGV4dHJhY3QgZXh0ZW5zaW9uCisKKwlhbmRpLmwJCSYweDAwZmYwMWZmLFVTRVJfRlBTUiglYTYpCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBjdXJyZW50IGNvbnRyb2wgcmVncworCWZtb3YubAkJJjB4MCwlZnBzcgorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlsZWEJCUZQX0RTVCglYTYpLCVhMQorCisjIG1heWJlIHdlIGNhbiBtYWtlIHRoZXNlIGVudHJ5IHBvaW50cyBPTkxZIHRoZSBPVkZMIGVudHJ5IHBvaW50cyBvZiBlYWNoIHJvdXRpbmUuCisJbW92LmwJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS53KjQpLCVkMSAjIGZldGNoIHJvdXRpbmUgYWRkcgorCWpzcgkJKHRibF91bnN1cHAubCwlcGMsJWQxLmwqMSkKKworCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAKKwlic3IubAkJc3RvcmVfZnByZWcKKworIyBUaGUgYDA2MCBGUFUgbXVsdGlwbGllciBoYXJkd2FyZSBpcyBzdWNoIHRoYXQgaWYgdGhlIHJlc3VsdCBvZiBhCisjIG11bHRpcGx5IG9wZXJhdGlvbiBpcyB0aGUgc21hbGxlc3QgcG9zc2libGUgbm9ybWFsaXplZCBudW1iZXIKKyMgKDB4MDAwMDAwMDBfODAwMDAwMDBfMDAwMDAwMDApLCB0aGVuIHRoZSBtYWNoaW5lIHdpbGwgdGFrZSBhbgorIyB1bmRlcmZsb3cgZXhjZXB0aW9uLiBTaW5jZSB0aGlzIGlzIGluY29ycmVjdCwgd2UgbmVlZCB0byBjaGVjaworIyBpZiBvdXIgZW11bGF0aW9uLCBhZnRlciByZS1kb2luZyB0aGUgb3BlcmF0aW9uLCBkZWNpZGVkIHRoYXQKKyMgbm8gdW5kZXJmbG93IHdhcyBjYWxsZWQgZm9yLiBXZSBkbyB0aGVzZSBjaGVja3Mgb25seSBpbgorIyBmdW5mbF97dW5mbCxpbmV4fV9vbigpIGJlY2F1c2Ugdy8gYm90aCBleGNlcHRpb25zIGRpc2FibGVkLCB0aGlzCisjIHNwZWNpYWwgY2FzZSB3aWxsIHNpbXBseSBleGl0IGdyYWNlZnVsbHkgd2l0aCB0aGUgY29ycmVjdCByZXN1bHQuCisKKyMgdGhlIGV4Y2VwdGlvbmFsIHBvc3NpYmlsaXRpZXMgd2UgaGF2ZSBsZWZ0IG91cnNlbHZlcyB3aXRoIGFyZSBPTkxZIG92ZXJmbG93CisjIGFuZCBpbmV4YWN0LiBhbmQsIHRoZSBpbmV4YWN0IGlzIHN1Y2ggdGhhdCBvdmVyZmxvdyBvY2N1cnJlZCBhbmQgd2FzIGRpc2FibGVkCisjIGJ1dCBpbmV4YWN0IHdhcyBlbmFibGVkLgorCWJ0c3QJCSZ1bmZsX2JpdCxGUENSX0VOQUJMRSglYTYpCisJYm5lLmIJCWZ1bmZsX3VuZmxfb24KKworZnVuZmxfY2hraW5leDoKKwlidHN0CQkmaW5leDJfYml0LEZQQ1JfRU5BQkxFKCVhNikKKwlibmUuYgkJZnVuZmxfaW5leF9vbgorCitmdW5mbF9leGl0OgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CisjJCMJYWRkLmwJCSYyNCwlc3AKKwlicmEubAkJX2Zwc3BfZG9uZQorCisjIG92ZXJmbG93IGlzIGVuYWJsZWQgQU5EIG92ZXJmbG93LCBvZiBjb3Vyc2UsIG9jY3VycmVkLiBzbywgd2UgaGF2ZSB0aGUgRVhPUAorIyBpbiBmcDEgKGRvbid0IGZvcmdldCB0byBzYXZlIGZwMCkuIHdoYXQgdG8gZG8gbm93PworIyB3ZWxsLCB3ZSBzaW1wbHkgaGF2ZSB0byBnZXQgdG8gZ28gdG8gX3JlYWxfdW5mbCgpIQorZnVuZmxfdW5mbF9vbjoKKworIyBUaGUgYDA2MCBGUFUgbXVsdGlwbGllciBoYXJkd2FyZSBpcyBzdWNoIHRoYXQgaWYgdGhlIHJlc3VsdCBvZiBhCisjIG11bHRpcGx5IG9wZXJhdGlvbiBpcyB0aGUgc21hbGxlc3QgcG9zc2libGUgbm9ybWFsaXplZCBudW1iZXIKKyMgKDB4MDAwMDAwMDBfODAwMDAwMDBfMDAwMDAwMDApLCB0aGVuIHRoZSBtYWNoaW5lIHdpbGwgdGFrZSBhbgorIyB1bmRlcmZsb3cgZXhjZXB0aW9uLiBTaW5jZSB0aGlzIGlzIGluY29ycmVjdCwgd2UgY2hlY2sgaGVyZSB0byBzZWUKKyMgaWYgb3VyIGVtdWxhdGlvbiwgYWZ0ZXIgcmUtZG9pbmcgdGhlIG9wZXJhdGlvbiwgZGVjaWRlZCB0aGF0CisjIG5vIHVuZGVyZmxvdyB3YXMgY2FsbGVkIGZvci4KKwlidHN0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KQorCWJlcS53CQlmdW5mbF9jaGtpbmV4CisKK2Z1bmZsX3VuZmxfb24yOgorCWZtb3ZtLngJCSYweDQwLEZQX1NSQyglYTYpCSMgc2F2ZSBFWE9QIChmcDEpIHRvIHN0YWNrCisKKwltb3YudwkJJjB4ZTAwMywyK0ZQX1NSQyglYTYpCSMgc2F2ZSBleGMgc3RhdHVzCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIGRvIHRoaXMgYWZ0ZXIgZm1vdm0sb3RoZXIgZjxvcD5zIQorCisJdW5sawkJJWE2CisKKwlicmEubAkJX3JlYWxfdW5mbAorCisjIHVuZGVmbG93IG9jY3VycmVkIGJ1dCBpcyBkaXNhYmxlZC4gbWVhbndoaWxlLCBpbmV4YWN0IGlzIGVuYWJsZWQuIHRoZXJlZm9yZSwKKyMgd2UgbXVzdCBqdW1wIHRvIHJlYWxfaW5leCgpLgorZnVuZmxfaW5leF9vbjoKKworIyBUaGUgYDA2MCBGUFUgbXVsdGlwbGllciBoYXJkd2FyZSBpcyBzdWNoIHRoYXQgaWYgdGhlIHJlc3VsdCBvZiBhCisjIG11bHRpcGx5IG9wZXJhdGlvbiBpcyB0aGUgc21hbGxlc3QgcG9zc2libGUgbm9ybWFsaXplZCBudW1iZXIKKyMgKDB4MDAwMDAwMDBfODAwMDAwMDBfMDAwMDAwMDApLCB0aGVuIHRoZSBtYWNoaW5lIHdpbGwgdGFrZSBhbgorIyB1bmRlcmZsb3cgZXhjZXB0aW9uLgorIyBCdXQsIHdoZXRoZXIgYm9ndXMgb3Igbm90LCBpZiBpbmV4YWN0IGlzIGVuYWJsZWQgQU5EIGl0IG9jY3VycmVkLAorIyB0aGVuIHdlIGhhdmUgdG8gYnJhbmNoIHRvIHJlYWxfaW5leC4KKworCWJ0c3QJCSZpbmV4Ml9iaXQsRlBTUl9FWENFUFQoJWE2KQorCWJlcS53CQlmdW5mbF9leGl0CisKK2Z1bmZsX2luZXhfb24yOgorCisJZm1vdm0ueAkJJjB4NDAsRlBfU1JDKCVhNikJIyBzYXZlIEVYT1AgdG8gc3RhY2sKKworCW1vdi5iCQkmMHhjNCwxK0VYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhjNAorCW1vdi53CQkmMHhlMDAxLDIrRlBfU1JDKCVhNikJIyBzYXZlIGV4YyBzdGF0dXMKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgZG8gdGhpcyBhZnRlciBmbW92bSxvdGhlciBmPG9wPnMhCisKKwl1bmxrCQklYTYKKworCWJyYS5sCQlfcmVhbF9pbmV4CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmdW5mbF9vdXQ6CisKKworIyQjCW1vdi5sCQlGUF9TUkNfRVgoJWE2KSxUUkFQX1NSQ09QX0VYKCVhNikKKyMkIwltb3YubAkJRlBfU1JDX0hJKCVhNiksVFJBUF9TUkNPUF9ISSglYTYpCisjJCMJbW92LmwJCUZQX1NSQ19MTyglYTYpLFRSQVBfU1JDT1BfTE8oJWE2KQorCisjIHRoZSBzcmMgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGEgTk9STSghKSwgc28gdGFnIGl0IGFzIHN1Y2gKKwltb3YuYgkJJk5PUk0sU1RBRyglYTYpCQkjIHNldCBzcmMgb3B0eXBlIHRhZworCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzIHJuZCBwcmVjL21vZGUKKworCWFuZC5sCQkmMHhmZmZmMDBmZixVU0VSX0ZQU1IoJWE2KSAjIHplcm8gYWxsIGJ1dCBhY2N1cmVkIGZpZWxkCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBjdXJyZW50IGNvbnRyb2wgcmVncworCWZtb3YubAkJJjB4MCwlZnBzcgorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzcyBwdHIgdG8gc3JjIG9wZXJhbmQKKworCWJzci5sCQlmb3V0CisKKwlidHN0CQkmdW5mbF9iaXQsRlBDUl9FTkFCTEUoJWE2KQorCWJuZS53CQlmdW5mbF91bmZsX29uMgorCisJYnRzdAkJJmluZXgyX2JpdCxGUENSX0VOQUJMRSglYTYpCisJYm5lLncJCWZ1bmZsX2luZXhfb24yCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgorIyQjCWFkZC5sCQkmMjQsJXNwCisKKwlidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPworCWJlcS5sCQlfZnBzcF9kb25lCQkjIG5vCisKKwlmbW92LmwJCSVmcGlhciwweDgoJXNwKQkJIyAiQ3VycmVudCBQQyIgaXMgaW4gRlBJQVIKKwltb3YudwkJJjB4MjAyNCwweDYoJXNwKQkjIHN0ayBmbXQgPSAweDI7IHZvZmYgPSAweDAyNAorCWJyYS5sCQlfcmVhbF90cmFjZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9mcHNwX3Vuc3VwcCgpOiAwNjBGUFNQIGVudHJ5IHBvaW50IGZvciBGUCAiVW5pbXBsZW1lbnRlZAkjCisjCQkgICAgICAgIERhdGEgVHlwZSIgZXhjZXB0aW9uLgkJCQkjCisjCQkJCQkJCQkJIworIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIHRoZQkjCisjCUZQIFVuaW1wbGVtZW50ZWQgRGF0YSBUeXBlIGV4Y2VwdGlvbiBpbiBhbiBvcGVyYXRpbmcgc3lzdGVtLgkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfaW1lbV9yZWFkX3t3b3JkLGxvbmd9KCkgLSByZWFkIGluc3RydWN0aW9uIHdvcmQvbG9uZ3dvcmQJIworIwlmaXhfc2tld2VkX29wcygpIC0gYWRqdXN0IHNyYyBvcGVyYW5kIGluIGZzYXZlIGZyYW1lCQkjCisjCXNldF90YWdfeCgpIC0gZGV0ZXJtaW5lIG9wdHlwZSBvZiBzcmMvZHN0IG9wZXJhbmRzCQkjCisjCXN0b3JlX2ZwcmVnKCkgLSBzdG9yZSBvcGNsYXNzIDAgb3IgMiByZXN1bHQgdG8gRlAgcmVnZmlsZQkjCisjCXVubm9ybV9maXgoKSAtIGNoYW5nZSBVTk5PUk0gb3BlcmFuZHMgdG8gTk9STSBvciBaRVJPCQkjCisjCWxvYWRfZnBuMigpIC0gbG9hZCBkc3Qgb3BlcmFuZCBmcm9tIEZQIHJlZ2ZpbGUJCQkjCisjCWxvYWRfZnBuMSgpIC0gbG9hZCBzcmMgb3BlcmFuZCBmcm9tIEZQIHJlZ2ZpbGUJCQkjCisjCWZvdXQoKSAtIGVtdWxhdGUgYW4gb3BjbGFzcyAzIGluc3RydWN0aW9uCQkJIworIwl0YmxfdW5zdXBwIC0gYWRkIG9mIHRhYmxlIG9mIGVtdWxhdGlvbiByb3V0aW5lcyBmb3Igb3BjbGFzcyAwLDIJIworIwlfcmVhbF9pbmV4KCkgLSAiY2FsbG91dCIgdG8gb3BlcmF0aW5nIHN5c3RlbSBpbmV4YWN0IGhhbmRsZXIJIworIwlfZnBzcF9kb25lKCkgLSAiY2FsbG91dCIgZm9yIGV4aXQ7IHdvcmsgYWxsIGRvbmUJCSMKKyMJX3JlYWxfdHJhY2UoKSAtICJjYWxsb3V0IiBmb3IgVHJhY2UgZW5hYmxlZCBleGNlcHRpb24JCSMKKyMJZnVuaW1wX3NrZXcoKSAtIGFkanVzdCBmc2F2ZSBzcmMgb3BzIHRvICJpbmNvcnJlY3QiIHZhbHVlCSMKKyMJX3JlYWxfc25hbigpIC0gImNhbGxvdXQiIGZvciBTTkFOIGV4Y2VwdGlvbgkJCSMKKyMJX3JlYWxfb3BlcnIoKSAtICJjYWxsb3V0IiBmb3IgT1BFUlIgZXhjZXB0aW9uCQkJIworIwlfcmVhbF9vdmZsKCkgLSAiY2FsbG91dCIgZm9yIE9WRkwgZXhjZXB0aW9uCQkJIworIwlfcmVhbF91bmZsKCkgLSAiY2FsbG91dCIgZm9yIFVORkwgZXhjZXB0aW9uCQkJIworIwlnZXRfcGFja2VkKCkgLSBmZXRjaCBwYWNrZWQgb3BlcmFuZCBmcm9tIG1lbW9yeQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBjb250YWlucyB0aGUgIlVuaW1wIERhdGEgVHlwZSIgc3RrIGZyYW1lCSMKKyMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIHNzcmMgb3AgKGZvciBVTk5PUk0vREVOT1JNKQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJZiBJbmV4YWN0IGV4Y2VwdGlvbiAob3BjbGFzcyAzKToJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhbiBJbmV4YWN0IGV4Y2VwdGlvbiBzdGsgZnJhbWUJIworIwlJZiBTTkFOIGV4Y2VwdGlvbiAob3BjbGFzcyAzKToJCQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIGNoYW5nZWQgdG8gYW4gU05BTiBleGNlcHRpb24gc3RrIGZyYW1lCSMKKyMJSWYgT1BFUlIgZXhjZXB0aW9uIChvcGNsYXNzIDMpOgkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhbiBPUEVSUiBleGNlcHRpb24gc3RrIGZyYW1lCSMKKyMJSWYgT1ZGTCBleGNlcHRpb24gKG9wY2xhc3MgMyk6CQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBpcyBjaGFuZ2VkIHRvIGFuIE9WRkwgZXhjZXB0aW9uIHN0ayBmcmFtZQkjCisjCUlmIFVORkwgZXhjZXB0aW9uIChvcGNsYXNzIDMpOgkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhbiBVTkZMIGV4Y2VwdGlvbiBzdGFjayBmcmFtZQkjCisjCUlmIFRyYWNlIGV4Y2VwdGlvbiBlbmFibGVkOgkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhIFRyYWNlIGV4Y2VwdGlvbiBzdGFjayBmcmFtZQkjCisjCUVsc2U6IChub3JtYWwgY2FzZSkJCQkJCQkjCisjCS0gQ29ycmVjdCByZXN1bHQgaGFzIGJlZW4gc3RvcmVkIGFzIGFwcHJvcHJpYXRlCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVHdvIG1haW4gaW5zdHJ1Y3Rpb24gdHlwZXMgY2FuIGVudGVyIGhlcmU6ICgxKSBERU5PUk0gb3IgVU5OT1JNCSMKKyMgdW5pbXBsZW1lbnRlZCBkYXRhIHR5cGVzLiBUaGVzZSBjYW4gYmUgZWl0aGVyIG9wY2xhc3MgMCwyIG9yIDMJIworIyBpbnN0cnVjdGlvbnMsIGFuZCAoMikgUEFDS0VEIHVuaW1wbGVtZW50ZWQgZGF0YSBmb3JtYXQgaW5zdHJ1Y3Rpb25zCSMKKyMgYWxzbyBvZiBvcGNsYXNzZXMgMCwyLCBvciAzLgkJCQkJCSMKKyMJRm9yIFVOTk9STS9ERU5PUk0gb3BjbGFzcyAwIGFuZCAyLCB0aGUgaGFuZGxlciBmZXRjaGVzIHRoZSBzcmMJIworIyBvcGVyYW5kIGZyb20gdGhlIGZzYXZlIHN0YXRlIGZyYW1lIGFuZCB0aGUgZHN0IG9wZXJhbmQgKGlmIGR5YWRpYykJIworIyBmcm9tIHRoZSBGUCByZWdpc3RlciBmaWxlLiBUaGUgaW5zdHJ1Y3Rpb24gaXMgdGhlbiBlbXVsYXRlZCBieQkjCisjIGNob29zaW5nIGFuIGVtdWxhdGlvbiByb3V0aW5lIGZyb20gYSB0YWJsZSBvZiByb3V0aW5lcyBpbmRleGVkIGJ5CSMKKyMgaW5zdHJ1Y3Rpb24gdHlwZS4gT25jZSB0aGUgaW5zdHJ1Y3Rpb24gaGFzIGJlZW4gZW11bGF0ZWQgYW5kIHJlc3VsdAkjCisjIHNhdmVkLCB0aGVuIHdlIGNoZWNrIHRvIHNlZSBpZiBhbnkgZW5hYmxlZCBleGNlcHRpb25zIHJlc3VsdGVkIGZyb20JIworIyBpbnN0cnVjdGlvbiBlbXVsYXRpb24uIElmIG5vbmUsIHRoZW4gd2UgZXhpdCB0aHJvdWdoIHRoZSAiY2FsbG91dCIJIworIyBfZnBzcF9kb25lKCkuIElmIHRoZXJlIGlzIGFuIGVuYWJsZWQgRlAgZXhjZXB0aW9uLCB0aGVuIHdlIGluc2VydAkjCisjIHRoaXMgZXhjZXB0aW9uIGludG8gdGhlIEZQVSBpbiB0aGUgZnNhdmUgc3RhdGUgZnJhbWUgYW5kIHRoZW4gZXhpdAkjCisjIHRocm91Z2ggX2Zwc3BfZG9uZSgpLgkJCQkJCQkjCisjCVBBQ0tFRCBvcGNsYXNzIDAgYW5kIDIgaXMgc2ltaWxhciBpbiBob3cgdGhlIGluc3RydWN0aW9uIGlzCSMKKyMgZW11bGF0ZWQgYW5kIGV4Y2VwdGlvbnMgaGFuZGxlZC4gVGhlIGRpZmZlcmVuY2VzIG9jY3VyIGluIGhvdyB0aGUJIworIyBoYW5kbGVyIGxvYWRzIHRoZSBwYWNrZWQgb3AgKGJ5IGNhbGxpbmcgZ2V0X3BhY2tlZCgpIHJvdXRpbmUpIGFuZAkjCisjIGJ5IHRoZSBmYWN0IHRoYXQgYSBUcmFjZSBleGNlcHRpb24gY291bGQgYmUgcGVuZGluZyBmb3IgUEFDS0VEIG9wcy4JIworIyBJZiBhIFRyYWNlIGV4Y2VwdGlvbiBpcyBwZW5kaW5nLCB0aGVuIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiBzdGFjawkjCisjIGZyYW1lIGlzIGNoYW5nZWQgdG8gYSBUcmFjZSBleGNlcHRpb24gc3RhY2sgZnJhbWUgYW5kIGFuIGV4aXQgaXMJIworIyBtYWRlIHRocm91Z2ggX3JlYWxfdHJhY2UoKS4JCQkJCQkjCisjCUZvciBVTk5PUk0vREVOT1JNIG9wY2xhc3MgMywgdGhlIGFjdHVhbCBtb3ZlIG91dCB0byBtZW1vcnkgaXMJIworIyBwZXJmb3JtZWQgYnkgY2FsbGluZyB0aGUgcm91dGluZSBmb3V0KCkuIElmIG5vIGV4Y2VwdGlvbiBzaG91bGQgb2NjdXIJIworIyBhcyB0aGUgcmVzdWx0IG9mIGVtdWxhdGlvbiwgdGhlbiBhbiBleGl0IGVpdGhlciBvY2N1cnMgdGhyb3VnaAkjCisjIF9mcHNwX2RvbmUoKSBvciB0aHJvdWdoIF9yZWFsX3RyYWNlKCkgaWYgYSBUcmFjZSBleGNlcHRpb24gaXMgcGVuZGluZwkjCisjIChhIFRyYWNlIHN0YWNrIGZyYW1lIG11c3QgYmUgY3JlYXRlZCBoZXJlLCB0b28pLiBJZiBhbiBGUCBleGNlcHRpb24JIworIyBzaG91bGQgb2NjdXIsIHRoZW4gd2UgbXVzdCBjcmVhdGUgYW4gZXhjZXB0aW9uIHN0YWNrIGZyYW1lIG9mIHRoYXQJIworIyB0eXBlIGFuZCBqdW1wIHRvIGVpdGhlciBfcmVhbF9zbmFuKCksIF9yZWFsX29wZXJyKCksIF9yZWFsX2luZXgoKSwJIworIyBfcmVhbF91bmZsKCksIG9yIF9yZWFsX292ZmwoKSBhcyBhcHByb3ByaWF0ZS4gUEFDS0VEIG9wY2xhc3MgMwkjCisjIGVtdWxhdGlvbiBpcyBwZXJmb3JtZWQgaW4gYSBzaW1pbGFyIG1hbm5lci4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyAoMSkgREVOT1JNIGFuZCBVTk5PUk0gKHVuaW1wbGVtZW50ZWQpIGRhdGEgdHlwZXM6CisjCisjCQkJCXBvc3QtaW5zdHJ1Y3Rpb24KKyMJCQkJKioqKioqKioqKioqKioqKioKKyMJCQkJKiAgICAgIEVBCSoKKyMJIHByZS1pbnN0cnVjdGlvbgkqCQkqCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSogMHgwICogIDB4MGRjICAqCSogMHgzICogIDB4MGRjICAqCisjCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCSogICAgIE5leHQJKgkqICAgICBOZXh0CSoKKyMJKiAgICAgIFBDCSoJKiAgICAgIFBDCSoKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJKiAgICAgIFNSCSoJKiAgICAgIFNSCSoKKyMJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMKKyMgKDIpIFBBQ0tFRCBmb3JtYXQgKHVuc3VwcG9ydGVkKSBvcGNsYXNzZXMgdHdvIGFuZCB0aHJlZToKKyMJKioqKioqKioqKioqKioqKioKKyMJKiAgICAgIEVBCSoKKyMJKgkJKgorIwkqKioqKioqKioqKioqKioqKgorIwkqIDB4MiAqICAweDBkYwkqCisjCSoqKioqKioqKioqKioqKioqCisjCSogICAgIE5leHQJKgorIwkqICAgICAgUEMJKgorIwkqKioqKioqKioqKioqKioqKgorIwkqICAgICAgU1IJKgorIwkqKioqKioqKioqKioqKioqKgorIworCWdsb2JhbAkJX2Zwc3BfdW5zdXBwCitfZnBzcF91bnN1cHA6CisKKwlsaW5rLncJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCisKKwlmc2F2ZQkJRlBfU1JDKCVhNikJCSMgc2F2ZSBmcCBzdGF0ZQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCWZtb3ZtLmwJCSVmcGNyLCVmcHNyLCVmcGlhcixVU0VSX0ZQQ1IoJWE2KSAjIHNhdmUgY3RybCByZWdzCisJZm1vdm0ueAkJJjB4YzAsRVhDX0ZQUkVHUyglYTYpCSMgc2F2ZSBmcDAtZnAxIG9uIHN0YWNrCisKKwlidHN0CQkmMHg1LEVYQ19TUiglYTYpCSMgdXNlciBvciBzdXBlcnZpc29yIG1vZGU/CisJYm5lLmIJCWZ1X3MKK2Z1X3U6CisJbW92LmwJCSV1c3AsJWEwCQkjIGZldGNoIHVzZXIgc3RhY2sgcG9pbnRlcgorCW1vdi5sCQklYTAsRVhDX0E3KCVhNikJCSMgc2F2ZSBvbiBzdGFjaworCWJyYS5iCQlmdV9jb250CisjIGlmIHRoZSBleGNlcHRpb24gaXMgYW4gb3BjbGFzcyB6ZXJvIG9yIHR3byB1bmltcGxlbWVudGVkIGRhdGEgdHlwZQorIyBleGNlcHRpb24sIHRoZW4gdGhlIGE3JyBjYWxjdWxhdGVkIGhlcmUgaXMgd3Jvbmcgc2luY2UgaXQgZG9lc24ndAorIyBzdGFjayBhbiBlYS4gaG93ZXZlciwgd2UgZG9uJ3QgbmVlZCBhbiBhNycgZm9yIHRoaXMgY2FzZSBhbnl3YXlzLgorZnVfczoKKwlsZWEJCTB4NCtFWENfRUEoJWE2KSwlYTAJIyBsb2FkIG9sZCBhNycKKwltb3YubAkJJWEwLEVYQ19BNyglYTYpCQkjIHNhdmUgb24gc3RhY2sKKworZnVfY29udDoKKworIyB0aGUgRlBJQVIgaG9sZHMgdGhlICJjdXJyZW50IFBDIiBvZiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24KKyMgdGhlIEZQSUFSIHNob3VsZCBiZSBzZXQgY29ycmVjdGx5IGZvciBBTEwgZXhjZXB0aW9ucyBwYXNzaW5nIHRocm91Z2gKKyMgdGhpcyBwb2ludC4KKwltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19FWFRXUFRSKCVhNikKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcJCSMgZmV0Y2ggdGhlIGluc3RydWN0aW9uIHdvcmRzCisJbW92LmwJCSVkMCxFWENfT1BXT1JEKCVhNikJIyBzdG9yZSBPUFdPUkQgYW5kIEVYVFdPUkQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJY2xyLmIJCVNQQ09ORF9GTEcoJWE2KQkJIyBjbGVhciBzcGVjaWFsIGNvbmRpdGlvbiBmbGFnCisKKyMgU2VwYXJhdGUgb3BjbGFzcyB0aHJlZSAoZnBuLXRvLW1lbSkgb3BzIHNpbmNlIHRoZXkgaGF2ZSBhIGRpZmZlcmVudAorIyBzdGFjayBmcmFtZSBhbmQgcHJvdG9jb2wuCisJYnRzdAkJJjB4NSxFWENfQ01EUkVHKCVhNikJIyBpcyBpdCBhbiBmbW92ZSBvdXQ/CisJYm5lLncJCWZ1X291dAkJCSMgeWVzCisKKyMgU2VwYXJhdGUgcGFja2VkIG9wY2xhc3MgdHdvIGluc3RydWN0aW9ucy4KKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmMDomNn0sJWQwCisJY21waS5iCQklZDAsJjB4MTMKKwliZXEudwkJZnVfaW5fcGFjaworCisKKyMgSSdtIG5vdCBzdXJlIGF0IHRoaXMgcG9pbnQgd2hhdCBGUFNSIGJpdHMgYXJlIHZhbGlkIGZvciB0aGlzIGluc3RydWN0aW9uLgorIyBzbywgc2luY2UgdGhlIGVtdWxhdGlvbiByb3V0aW5lcyByZS1jcmVhdGUgdGhlbSBhbnl3YXlzLCB6ZXJvIGV4Y2VwdGlvbiBmaWVsZAorCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikgIyB6ZXJvIGV4Y2VwdGlvbiBmaWVsZAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gY3VycmVudCBjb250cm9sIHJlZ3MKKwlmbW92LmwJCSYweDAsJWZwc3IKKworIyBPcGNsYXNzIHR3byB3LyBtZW1vcnktdG8tZnBuIG9wZXJhdGlvbiB3aWxsIGhhdmUgYW4gaW5jb3JyZWN0IGV4dGVuZGVkCisjIHByZWNpc2lvbiBmb3JtYXQgaWYgdGhlIHNyYyBmb3JtYXQgd2FzIHNpbmdsZSBvciBkb3VibGUgYW5kIHRoZQorIyBzb3VyY2UgZGF0YSB0eXBlIHdhcyBhbiBJTkYsIE5BTiwgREVOT1JNLCBvciBVTk5PUk0KKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBpbnB1dAorCWJzci5sCQlmaXhfc2tld2VkX29wcworCisjIHdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgc3JjIG9wZXJhbmQgb3IgdGhlIGRzdCBvcGVyYW5kIChvciBib3RoKSBpcyB0aGUKKyMgVU5OT1JNIG9yIERFTk9STS4gY2FsbCB0aGUgZnVuY3Rpb24gdGhhdCB0YWdzIHRoZSBvcGVyYW5kIHR5cGUuIGlmIHRoZQorIyBpbnB1dCBpcyBhbiBVTk5PUk0sIHRoZW4gY29udmVydCBpdCB0byBhIE5PUk0sIERFTk9STSwgb3IgWkVSTy4KKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCisJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQorCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgb3BlcmFuZCBhbiBVTk5PUk0/CisJYm5lLmIJCWZ1X29wMgkJCSMgbm8KKwlic3IubAkJdW5ub3JtX2ZpeAkJIyB5ZXM7IGNvbnZlcnQgdG8gTk9STSxERU5PUk0sb3IgWkVSTworCitmdV9vcDI6CisJbW92LmIJCSVkMCxTVEFHKCVhNikJCSMgc2F2ZSBzcmMgb3B0eXBlIHRhZworCisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMCAjIGR5YWRpYzsgbG9hZCBkc3QgcmVnCisKKyMgYml0IGZpdmUgb2YgdGhlIGZwIGV4dGVuc2lvbiB3b3JkIHNlcGFyYXRlcyB0aGUgbW9uYWRpYyBhbmQgZHlhZGljIG9wZXJhdGlvbnMKKyMgYXQgdGhpcyBwb2ludAorCWJ0c3QJCSYweDUsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcGVyYXRpb24gbW9uYWRpYyBvciBkeWFkaWM/CisJYmVxLmIJCWZ1X2V4dHJhY3QJCSMgbW9uYWRpYworCWNtcGkuYgkJMStFWENfQ01EUkVHKCVhNiksJjB4M2EJIyBpcyBvcGVyYXRpb24gYW4gZnRzdD8KKwliZXEuYgkJZnVfZXh0cmFjdAkJIyB5ZXMsIHNvIGl0J3MgbW9uYWRpYywgdG9vCisKKwlic3IubAkJbG9hZF9mcG4yCQkjIGxvYWQgZHN0IGludG8gRlBfRFNUCisKKwlsZWEJCUZQX0RTVCglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gZHN0IG9wCisJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQorCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgb3BlcmFuZCBhbiBVTk5PUk0/CisJYm5lLmIJCWZ1X29wMl9kb25lCQkjIG5vCisJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBjb252ZXJ0IHRvIE5PUk0sREVOT1JNLG9yIFpFUk8KK2Z1X29wMl9kb25lOgorCW1vdi5iCQklZDAsRFRBRyglYTYpCQkjIHNhdmUgZHN0IG9wdHlwZSB0YWcKKworZnVfZXh0cmFjdDoKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIGZldGNoIHJuZCBtb2RlL3ByZWMKKworCWJmZXh0dQkJMStFWENfQ01EUkVHKCVhNil7JjE6Jjd9LCVkMSAjIGV4dHJhY3QgZXh0ZW5zaW9uCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWxlYQkJRlBfRFNUKCVhNiksJWExCisKKwltb3YubAkJKHRibF91bnN1cHAubCwlcGMsJWQxLmwqNCksJWQxICMgZmV0Y2ggcm91dGluZSBhZGRyCisJanNyCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEubCoxKQorCisjCisjIEV4Y2VwdGlvbnMgaW4gb3JkZXIgb2YgcHJlY2VkZW5jZToKKyMJQlNVTgk6IG5vbmUKKyMJU05BTgk6IGFsbCBkeWFkaWMgb3BzCisjCU9QRVJSCTogZnNxcnQoLU5PUk0pCisjCU9WRkwJOiBhbGwgZXhjZXB0IGZ0c3QsZmNtcAorIwlVTkZMCTogYWxsIGV4Y2VwdCBmdHN0LGZjbXAKKyMJRFoJOiBmZGl2CisjCUlORVgyCTogYWxsIGV4Y2VwdCBmdHN0LGZjbXAKKyMJSU5FWDEJOiBub25lIChwYWNrZWQgZG9lc24ndCBnbyB0aHJvdWdoIGhlcmUpCisjCisKKyMgd2UgZGV0ZXJtaW5lIHRoZSBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbihpZiBhbnkpIHNldCBieSB0aGUKKyMgZW11bGF0aW9uIHJvdXRpbmUgdGhhdCBoYXMgYWxzbyBiZWVuIGVuYWJsZWQgYnkgdGhlIHVzZXIuCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQwCSMgZmV0Y2ggZXhjZXB0aW9ucyBzZXQKKwlibmUuYgkJZnVfaW5fZW5hCQkjIHNvbWUgYXJlIGVuYWJsZWQKKworZnVfaW5fY29udDoKKyMgZmNtcCBhbmQgZnRzdCBkbyBub3Qgc3RvcmUgYW55IHJlc3VsdC4KKwltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQwCSMgZmV0Y2ggZXh0ZW5zaW9uCisJYW5kaS5iCQkmMHgzOCwlZDAJCSMgZXh0cmFjdCBiaXRzIDMtNQorCWNtcGkuYgkJJWQwLCYweDM4CQkjIGlzIGluc3RyIGZjbXAgb3IgZnRzdD8KKwliZXEuYgkJZnVfaW5fZXhpdAkJIyB5ZXMKKworCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAgIyBkeWFkaWM7IGxvYWQgZHN0IHJlZworCWJzci5sCQlzdG9yZV9mcHJlZwkJIyBzdG9yZSB0aGUgcmVzdWx0CisKK2Z1X2luX2V4aXQ6CisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgorCisJYnJhLmwJCV9mcHNwX2RvbmUKKworZnVfaW5fZW5hOgorCWFuZC5iCQlGUFNSX0VYQ0VQVCglYTYpLCVkMAkjIGtlZXAgb25seSBvbmVzIGVuYWJsZWQKKwliZmZmbwkJJWQweyYyNDomOH0sJWQwCQkjIGZpbmQgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24KKwlibmUuYgkJZnVfaW5fZXhjCQkjIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBzZXQKKworIworIyBObyBleGNlcHRpb25zIG9jY3VycmVkIHRoYXQgd2VyZSBhbHNvIGVuYWJsZWQuIE5vdzoKKyMKKyMJaWYgKE9WRkwgJiYgb3ZmbF9kaXNhYmxlZCAmJiBpbmV4YWN0X2VuYWJsZWQpIHsKKyMJICAgIGJyYW5jaCB0byBfcmVhbF9pbmV4KCkgKGV2ZW4gaWYgdGhlIHJlc3VsdCB3YXMgZXhhY3QhKTsKKyMJfSBlbHNlIHsKKyMJICAgIHNhdmUgdGhlIHJlc3VsdCBpbiB0aGUgcHJvcGVyIGZwIHJlZyAodW5sZXNzIHRoZSBvcCBpcyBmY21wIG9yIGZ0c3QpOworIwkgICAgcmV0dXJuOworIwl9CisjCisJYnRzdAkJJm92ZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyB3YXMgb3ZlcmZsb3cgc2V0PworCWJlcS5iCQlmdV9pbl9jb250CQkjIG5vCisKK2Z1X2luX292ZmxjaGs6CisJYnRzdAkJJmluZXgyX2JpdCxGUENSX0VOQUJMRSglYTYpICMgd2FzIGluZXhhY3QgZW5hYmxlZD8KKwliZXEuYgkJZnVfaW5fY29udAkJIyBubworCWJyYS53CQlmdV9pbl9leGNfb3ZmbAkJIyBnbyBpbnNlcnQgb3ZlcmZsb3cgZnJhbWUKKworIworIyBBbiBleGNlcHRpb24gb2NjdXJyZWQgYW5kIHRoYXQgZXhjZXB0aW9uIHdhcyBlbmFibGVkOgorIworIwlzaGlmdCBlbmFibGVkIGV4Y2VwdGlvbiBmaWVsZCBpbnRvIGxvIGJ5dGUgb2YgZDA7CisjCWlmICgoKElORVgyIHx8IElORVgxKSAmJiBpbmV4X2VuYWJsZWQgJiYgT1ZGTCAmJiBvdmZsX2Rpc2FibGVkKSB8fAorIwkgICAgKChJTkVYMiB8fCBJTkVYMSkgJiYgaW5leF9lbmFibGVkICYmIFVORkwgJiYgdW5mbF9kaXNhYmxlZCkpIHsKKyMJCS8qCisjCQkgKiB0aGlzIGlzIHRoZSBjYXNlIHdoZXJlIHdlIG11c3QgY2FsbCBfcmVhbF9pbmV4KCkgbm93IG9yIGVsc2UKKyMJCSAqIHRoZXJlIHdpbGwgYmUgbm8gb3RoZXIgd2F5IHRvIHBhc3MgaXQgdGhlIGV4Y2VwdGlvbmFsIG9wZXJhbmQKKyMJCSAqLworIwkJY2FsbCBfcmVhbF9pbmV4KCk7CisjCX0gZWxzZSB7CisjCQlyZXN0b3JlIGV4YyBzdGF0ZSAoU05BTnx8T1BFUlJ8fE9WRkx8fFVORkx8fERafHxJTkVYKSBpbnRvIHRoZSBGUFU7CisjCX0KKyMKK2Z1X2luX2V4YzoKKwlzdWJpLmwJCSYyNCwlZDAJCQkjIGZpeCBvZmZzZXQgdG8gYmUgMC04CisJY21waS5iCQklZDAsJjB4NgkJIyBpcyBleGNlcHRpb24gSU5FWD8gKDYpCisJYm5lLmIJCWZ1X2luX2V4Y19leGl0CQkjIG5vCisKKyMgdGhlIGVuYWJsZWQgZXhjZXB0aW9uIHdhcyBpbmV4YWN0CisJYnRzdAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBkaWQgZGlzYWJsZWQgdW5kZXJmbG93IG9jY3VyPworCWJuZS53CQlmdV9pbl9leGNfdW5mbAkJIyB5ZXMKKwlidHN0CQkmb3ZmbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGRpZCBkaXNhYmxlZCBvdmVyZmxvdyBvY2N1cj8KKwlibmUudwkJZnVfaW5fZXhjX292ZmwJCSMgeWVzCisKKyMgaGVyZSwgd2UgaW5zZXJ0IHRoZSBjb3JyZWN0IGZzYXZlIHN0YXR1cyB2YWx1ZSBpbnRvIHRoZSBmc2F2ZSBmcmFtZSBmb3IgdGhlCisjIGNvcnJlc3BvbmRpbmcgZXhjZXB0aW9uLiB0aGUgb3BlcmFuZCBpbiB0aGUgZnNhdmUgZnJhbWUgc2hvdWxkIGJlIHRoZSBvcmlnaW5hbAorIyBzcmMgb3BlcmFuZC4KK2Z1X2luX2V4Y19leGl0OgorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgZDAKKwlic3IubAkJZnVuaW1wX3NrZXcJCSMgc2tldyBzZ2wgb3IgZGJsIGlucHV0cworCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgZDAKKworCW1vdi53CQkodGJsX2V4Y2VwdC5iLCVwYywlZDAudyoyKSwyK0ZQX1NSQyglYTYpICMgY3JlYXRlIGV4YyBzdGF0dXMKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgcmVzdG9yZSBzcmMgb3AKKworCXVubGsJCSVhNgorCisJYnJhLmwJCV9mcHNwX2RvbmUKKwordGJsX2V4Y2VwdDoKKwlzaG9ydAkJMHhlMDAwLDB4ZTAwNiwweGUwMDQsMHhlMDA1CisJc2hvcnQJCTB4ZTAwMywweGUwMDIsMHhlMDAxLDB4ZTAwMQorCitmdV9pbl9leGNfdW5mbDoKKwltb3YudwkJJjB4NCwlZDAKKwlicmEuYgkJZnVfaW5fZXhjX2V4aXQKK2Z1X2luX2V4Y19vdmZsOgorCW1vdi53CQkmMHgwMywlZDAKKwlicmEuYgkJZnVfaW5fZXhjX2V4aXQKKworIyBJZiB0aGUgaW5wdXQgb3BlcmFuZCB0byB0aGlzIG9wZXJhdGlvbiB3YXMgb3BjbGFzcyB0d28gYW5kIGEgc2luZ2xlCisjIG9yIGRvdWJsZSBwcmVjaXNpb24gZGVub3JtLCBpbmYsIG9yIG5hbiwgdGhlIG9wZXJhbmQgbmVlZHMgdG8gYmUKKyMgImNvcnJlY3RlZCIgaW4gb3JkZXIgdG8gaGF2ZSB0aGUgcHJvcGVyIGVxdWl2YWxlbnQgZXh0ZW5kZWQgcHJlY2lzaW9uCisjIG51bWJlci4KKwlnbG9iYWwJCWZpeF9za2V3ZWRfb3BzCitmaXhfc2tld2VkX29wczoKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmMDomNn0sJWQwICMgZXh0cmFjdCBvcGNsYXNzLHNyYyBmbXQKKwljbXBpLmIJCSVkMCwmMHgxMQkJIyBpcyBjbGFzcyA9IDIgJiBmbXQgPSBzZ2w/CisJYmVxLmIJCWZzb19zZ2wJCQkjIHllcworCWNtcGkuYgkJJWQwLCYweDE1CQkjIGlzIGNsYXNzID0gMiAmIGZtdCA9IGRibD8KKwliZXEuYgkJZnNvX2RibAkJCSMgeWVzCisJcnRzCQkJCQkjIG5vCisKK2Zzb19zZ2w6CisJbW92LncJCUxPQ0FMX0VYKCVhMCksJWQwCSMgZmV0Y2ggc3JjIGV4cG9uZW50CisJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBzdHJpcCBzaWduCisJY21waS53CQklZDAsJjB4M2Y4MAkJIyBpcyB8ZXhwfCA9PSAkM2Y4MD8KKwliZXEuYgkJZnNvX3NnbF9kbnJtX3plcm8JIyB5ZXMKKwljbXBpLncJCSVkMCwmMHg0MDdmCQkjIG5vOyBpcyB8ZXhwfCA9PSAkNDA3Zj8KKwliZXEuYgkJZnNvX2luZm5hbgkJIyB5ZXMKKwlydHMJCQkJCSMgbm8KKworZnNvX3NnbF9kbnJtX3plcm86CisJYW5kaS5sCQkmMHg3ZmZmZmZmZixMT0NBTF9ISSglYTApICMgY2xlYXIgai1iaXQKKwliZXEuYgkJZnNvX3plcm8JCSMgaXQncyBhIHNrZXdlZCB6ZXJvCitmc29fc2dsX2Rucm06CisjIGhlcmUsIHdlIGNvdW50IG9uIG5vcm0gbm90IHRvIGFsdGVyIGEwLi4uCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSBtYW50aXNzYQorCW5lZy53CQklZDAJCQkjIC1zaGZ0IGFtdAorCWFkZGkudwkJJjB4M2Y4MSwlZDAJCSMgYWRqdXN0IG5ldyBleHBvbmVudAorCWFuZGkudwkJJjB4ODAwMCxMT0NBTF9FWCglYTApCSMgY2xlYXIgb2xkIGV4cG9uZW50CisJb3IudwkJJWQwLExPQ0FMX0VYKCVhMCkJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJcnRzCisKK2Zzb196ZXJvOgorCWFuZGkudwkJJjB4ODAwMCxMT0NBTF9FWCglYTApCSMgY2xlYXIgYm9ndXMgZXhwb25lbnQKKwlydHMKKworZnNvX2luZm5hbjoKKwlhbmRpLmIJCSYweDdmLExPQ0FMX0hJKCVhMCkJIyBjbGVhciBqLWJpdAorCW9yaS53CQkmMHg3ZmZmLExPQ0FMX0VYKCVhMCkJIyBtYWtlIGV4cG9uZW50ID0gJDdmZmYKKwlydHMKKworZnNvX2RibDoKKwltb3YudwkJTE9DQUxfRVgoJWEwKSwlZDAJIyBmZXRjaCBzcmMgZXhwb25lbnQKKwlhbmRpLncJCSYweDdmZmYsJWQwCQkjIHN0cmlwIHNpZ24KKwljbXBpLncJCSVkMCwmMHgzYzAwCQkjIGlzIHxleHB8ID09ICQzYzAwPworCWJlcS5iCQlmc29fZGJsX2Rucm1femVybwkjIHllcworCWNtcGkudwkJJWQwLCYweDQzZmYJCSMgbm87IGlzIHxleHB8ID09ICQ0M2ZmPworCWJlcS5iCQlmc29faW5mbmFuCQkjIHllcworCXJ0cwkJCQkJIyBubworCitmc29fZGJsX2Rucm1femVybzoKKwlhbmRpLmwJCSYweDdmZmZmZmZmLExPQ0FMX0hJKCVhMCkgIyBjbGVhciBqLWJpdAorCWJuZS5iCQlmc29fZGJsX2Rucm0JCSMgaXQncyBhIHNrZXdlZCBkZW5vcm0KKwl0c3QubAkJTE9DQUxfTE8oJWEwKQkJIyBpcyBpdCBhIHplcm8/CisJYmVxLmIJCWZzb196ZXJvCQkjIHllcworZnNvX2RibF9kbnJtOgorIyBoZXJlLCB3ZSBjb3VudCBvbiBub3JtIG5vdCB0byBhbHRlciBhMC4uLgorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgbWFudGlzc2EKKwluZWcudwkJJWQwCQkJIyAtc2hmdCBhbXQKKwlhZGRpLncJCSYweDNjMDEsJWQwCQkjIGFkanVzdCBuZXcgZXhwb25lbnQKKwlhbmRpLncJCSYweDgwMDAsTE9DQUxfRVgoJWEwKQkjIGNsZWFyIG9sZCBleHBvbmVudAorCW9yLncJCSVkMCxMT0NBTF9FWCglYTApCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIGZtb3ZlIG91dCB0b29rIGFuIHVuaW1wbGVtZW50ZWQgZGF0YSB0eXBlIGV4Y2VwdGlvbi4KKyMgdGhlIHNyYyBvcGVyYW5kIGlzIGluIEZQX1NSQy4gQ2FsbCBfZm91dCgpIHRvIHdyaXRlIG91dCB0aGUgcmVzdWx0IGFuZAorIyB0byBkZXRlcm1pbmUgd2hpY2ggZXhjZXB0aW9ucywgaWYgYW55LCB0byB0YWtlLgorZnVfb3V0OgorCisjIFNlcGFyYXRlIHBhY2tlZCBtb3ZlIG91dHMgZnJvbSB0aGUgVU5OT1JNIGFuZCBERU5PUk0gbW92ZSBvdXRzLgorCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyYzOiYzfSwlZDAKKwljbXBpLmIJCSVkMCwmMHgzCisJYmVxLncJCWZ1X291dF9wYWNrCisJY21waS5iCQklZDAsJjB4NworCWJlcS53CQlmdV9vdXRfcGFjaworCisKKyMgSSdtIG5vdCBzdXJlIGF0IHRoaXMgcG9pbnQgd2hhdCBGUFNSIGJpdHMgYXJlIHZhbGlkIGZvciB0aGlzIGluc3RydWN0aW9uLgorIyBzbywgc2luY2UgdGhlIGVtdWxhdGlvbiByb3V0aW5lcyByZS1jcmVhdGUgdGhlbSBhbnl3YXlzLCB6ZXJvIGV4Y2VwdGlvbiBmaWVsZC4KKyMgZm1vdmUgb3V0IGRvZXNuJ3QgYWZmZWN0IGNjb2Rlcy4KKwlhbmQubAkJJjB4ZmZmZjAwZmYsVVNFUl9GUFNSKCVhNikgIyB6ZXJvIGV4Y2VwdGlvbiBmaWVsZAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIHplcm8gY3VycmVudCBjb250cm9sIHJlZ3MKKwlmbW92LmwJCSYweDAsJWZwc3IKKworIyB0aGUgc3JjIGNhbiBPTkxZIGJlIGEgREVOT1JNIG9yIGFuIFVOTk9STSEgc28sIGRvbid0IG1ha2UgYW55IGJpZyBzdWJyb3V0aW5lCisjIGNhbGwgaGVyZS4ganVzdCBmaWd1cmUgb3V0IHdoYXQgaXQgaXMuLi4KKwltb3YudwkJRlBfU1JDX0VYKCVhNiksJWQwCSMgZ2V0IGV4cG9uZW50CisJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBzdHJpcCBzaWduCisJYmVxLmIJCWZ1X291dF9kZW5vcm0JCSMgaXQncyBhIERFTk9STQorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlic3IubAkJdW5ub3JtX2ZpeAkJIyB5ZXM7IGZpeCBpdAorCisJbW92LmIJCSVkMCxTVEFHKCVhNikKKworCWJyYS5iCQlmdV9vdXRfY29udAorZnVfb3V0X2Rlbm9ybToKKwltb3YuYgkJJkRFTk9STSxTVEFHKCVhNikKK2Z1X291dF9jb250OgorCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBmZXRjaCBybmQgbW9kZS9wcmVjCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMgb3BlcmFuZAorCisJbW92LmwJCSglYTYpLEVYQ19BNiglYTYpCSMgaW4gY2FzZSBhNiBjaGFuZ2VzCisJYnNyLmwJCWZvdXQJCQkjIGNhbGwgZm1vdmUgb3V0IHJvdXRpbmUKKworIyBFeGNlcHRpb25zIGluIG9yZGVyIG9mIHByZWNlZGVuY2U6CisjCUJTVU4JOiBub25lCisjCVNOQU4JOiBub25lCisjCU9QRVJSCTogZm1vdmUue2IsdyxsfSBvdXQgb2YgbGFyZ2UgVU5OT1JNCisjCU9WRkwJOiBmbW92ZS57cyxkfQorIwlVTkZMCTogZm1vdmUue3MsZCx4fQorIwlEWgk6IG5vbmUKKyMJSU5FWDIJOiBhbGwKKyMJSU5FWDEJOiBub25lIChwYWNrZWQgZG9lc24ndCB0cmF2ZWwgdGhyb3VnaCBoZXJlKQorCisjIGRldGVybWluZSB0aGUgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24oaWYgYW55KSBzZXQgYnkgdGhlCisjIGVtdWxhdGlvbiByb3V0aW5lIHRoYXQgaGFzIGFsc28gYmVlbiBlbmFibGVkIGJ5IHRoZSB1c2VyLgorCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMAkjIGZldGNoIGV4Y2VwdGlvbnMgZW5hYmxlZAorCWJuZS53CQlmdV9vdXRfZW5hCQkjIHNvbWUgYXJlIGVuYWJsZWQKKworZnVfb3V0X2RvbmU6CisKKwltb3YubAkJRVhDX0E2KCVhNiksKCVhNikJIyBpbiBjYXNlIGE2IGNoYW5nZWQKKworIyBvbiBleHRlbmRlZCBwcmVjaXNpb24gb3BjbGFzcyB0aHJlZSBpbnN0cnVjdGlvbnMgdXNpbmcgcHJlLWRlY3JlbWVudCBvcgorIyBwb3N0LWluY3JlbWVudCBhZGRyZXNzaW5nIG1vZGUsIHRoZSBhZGRyZXNzIHJlZ2lzdGVyIGlzIG5vdCB1cGRhdGVkLiBpcyB0aGUKKyMgYWRkcmVzcyByZWdpc3RlciB3YXMgdGhlIHN0YWNrIHBvaW50ZXIgdXNlZCBmcm9tIHVzZXIgbW9kZSwgdGhlbiBsZXQncyB1cGRhdGUKKyMgaXQgaGVyZS4gaWYgaXQgd2FzIHVzZWQgZnJvbSBzdXBlcnZpc29yIG1vZGUsIHRoZW4gd2UgaGF2ZSB0byBoYW5kbGUgdGhpcworIyBhcyBhIHNwZWNpYWwgY2FzZS4KKwlidHN0CQkmMHg1LEVYQ19TUiglYTYpCisJYm5lLmIJCWZ1X291dF9kb25lX3MKKworCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAJCSMgcmVzdG9yZSBhNworCW1vdi5sCQklYTAsJXVzcAorCitmdV9vdXRfZG9uZV9jb250OgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CisKKwlidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPworCWJuZS5iCQlmdV9vdXRfdHJhY2UJCSMgeWVzCisKKwlicmEubAkJX2Zwc3BfZG9uZQorCisjIGlzIHRoZSBlYSBtb2RlIHByZS1kZWNyZW1lbnQgb2YgdGhlIHN0YWNrIHBvaW50ZXIgZnJvbSBzdXBlcnZpc29yIG1vZGU/CisjICgiZm1vdi54IGZwbSwtKGE3KSIpIGlmIHNvLAorZnVfb3V0X2RvbmVfczoKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcKKwlibmUuYgkJZnVfb3V0X2RvbmVfY29udAorCisjIHRoZSBleHRlbmRlZCBwcmVjaXNpb24gcmVzdWx0IGlzIHN0aWxsIGluIGZwMC4gYnV0LCB3ZSBuZWVkIHRvIHNhdmUgaXQKKyMgc29tZXdoZXJlIG9uIHRoZSBzdGFjayB1bnRpbCB3ZSBjYW4gY29weSBpdCB0byBpdHMgZmluYWwgcmVzdGluZyBwbGFjZS4KKyMgaGVyZSwgd2UncmUgY291bnRpbmcgb24gdGhlIHRvcCBvZiB0aGUgc3RhY2sgdG8gYmUgdGhlIG9sZCBwbGFjZS1ob2xkZXJzCisjIGZvciBmcDAvZnAxIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIHJlc3RvcmVkLiB0aGF0IHdheSwgd2UgY2FuIHdyaXRlCisjIG92ZXIgdGhvc2UgZGVzdGluYXRpb25zIHdpdGggdGhlIHNoaWZ0ZWQgc3RhY2sgZnJhbWUuCisJZm1vdm0ueAkJJjB4ODAsRlBfU1JDKCVhNikJIyBwdXQgYW5zd2VyIG9uIHN0YWNrCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCW1vdi5sCQkoJWE2KSwlYTYJCSMgcmVzdG9yZSBmcmFtZSBwb2ludGVyCisKKwltb3YubAkJTE9DQUxfU0laRStFWENfU1IoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUi0weGMoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFKzIrRVhDX1BDKCVzcCksTE9DQUxfU0laRSsyK0VYQ19QQy0weGMoJXNwKQorCisjIG5vdywgY29weSB0aGUgcmVzdWx0IHRvIHRoZSBwcm9wZXIgcGxhY2Ugb24gdGhlIHN0YWNrCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfU1JDX0VYKCVzcCksTE9DQUxfU0laRStFWENfU1IrMHgwKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStGUF9TUkNfSEkoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUisweDQoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX1NSQ19MTyglc3ApLExPQ0FMX1NJWkUrRVhDX1NSKzB4OCglc3ApCisKKwlhZGQubAkJJkxPQ0FMX1NJWkUtMHg4LCVzcAorCisJYnRzdAkJJjB4NywoJXNwKQorCWJuZS5iCQlmdV9vdXRfdHJhY2UKKworCWJyYS5sCQlfZnBzcF9kb25lCisKK2Z1X291dF9lbmE6CisJYW5kLmIJCUZQU1JfRVhDRVBUKCVhNiksJWQwCSMga2VlcCBvbmx5IG9uZXMgZW5hYmxlZAorCWJmZmZvCQklZDB7JjI0OiY4fSwlZDAJCSMgZmluZCBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbgorCWJuZS5iCQlmdV9vdXRfZXhjCQkjIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBzZXQKKworIyBubyBleGNlcHRpb25zIHdlcmUgc2V0LgorIyBpZiBhIGRpc2FibGVkIG92ZXJmbG93IG9jY3VycmVkIGFuZCBpbmV4YWN0IHdhcyBlbmFibGVkIGJ1dCB0aGUgcmVzdWx0CisjIHdhcyBleGFjdCwgdGhlbiBhIGJyYW5jaCB0byBfcmVhbF9pbmV4KCkgaXMgbWFkZS4KKwlidHN0CQkmb3ZmbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHdhcyBvdmVyZmxvdyBzZXQ/CisJYmVxLncJCWZ1X291dF9kb25lCQkjIG5vCisKK2Z1X291dF9vdmZsY2hrOgorCWJ0c3QJCSZpbmV4Ml9iaXQsRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBpbmV4YWN0IGVuYWJsZWQ/CisJYmVxLncJCWZ1X291dF9kb25lCQkjIG5vCisJYnJhLncJCWZ1X2luZXgJCQkjIHllcworCisjCisjIFRoZSBmcCBtb3ZlIG91dCB0aGF0IHRvb2sgdGhlICJVbmltcGxlbWVudGVkIERhdGEgVHlwZSIgZXhjZXB0aW9uIHdhcworIyBiZWluZyB0cmFjZWQuIFNpbmNlIHRoZSBzdGFjayBmcmFtZXMgYXJlIHNpbWlsYXIsIGdldCB0aGUgImN1cnJlbnQiIFBDCisjIGZyb20gRlBJQVIgYW5kIHB1dCBpdCBpbiB0aGUgdHJhY2Ugc3RhY2sgZnJhbWUgdGhlbiBqdW1wIHRvIF9yZWFsX3RyYWNlKCkuCisjCisjCQkgIFVOU1VQUCBGUkFNRQkJICAgVFJBQ0UgRlJBTUUKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCQkqICAgICAgRUEJKgkqICAgIEN1cnJlbnQJKgorIwkJKgkJKgkqICAgICAgUEMJKgorIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJCSogMHgzICogIDB4MGRjCSoJKiAweDIgKiAgMHgwMjQJKgorIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJCSogICAgIE5leHQJKgkqICAgICBOZXh0CSoKKyMJCSogICAgICBQQwkqCSogICAgICBQQwkqCisjCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkJKiAgICAgIFNSCSoJKiAgICAgIFNSCSoKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCitmdV9vdXRfdHJhY2U6CisJbW92LncJCSYweDIwMjQsMHg2KCVzcCkKKwlmbW92LmwJCSVmcGlhciwweDgoJXNwKQorCWJyYS5sCQlfcmVhbF90cmFjZQorCisjIGFuIGV4Y2VwdGlvbiBvY2N1cnJlZCBhbmQgdGhhdCBleGNlcHRpb24gd2FzIGVuYWJsZWQuCitmdV9vdXRfZXhjOgorCXN1YmkubAkJJjI0LCVkMAkJCSMgZml4IG9mZnNldCB0byBiZSAwLTgKKworIyB3ZSBkb24ndCBtZXNzIHdpdGggdGhlIGV4aXN0aW5nIGZzYXZlIGZyYW1lLiBqdXN0IHJlLWluc2VydCBpdCBhbmQKKyMganVtcCB0byB0aGUgIl9yZWFsX3t9KCkiIGhhbmRsZXIuLi4KKwltb3YudwkJKHRibF9mdV9vdXQuYiwlcGMsJWQwLncqMiksJWQwCisJam1wCQkodGJsX2Z1X291dC5iLCVwYywlZDAudyoxKQorCisJc3diZWcJCSYweDgKK3RibF9mdV9vdXQ6CisJc2hvcnQJCXRibF9mdV9vdXQJLSB0YmxfZnVfb3V0CSMgQlNVTiBjYW4ndCBoYXBwZW4KKwlzaG9ydAkJdGJsX2Z1X291dAktIHRibF9mdV9vdXQJIyBTTkFOIGNhbid0IGhhcHBlbgorCXNob3J0CQlmdV9vcGVycgktIHRibF9mdV9vdXQJIyBPUEVSUgorCXNob3J0CQlmdV9vdmZsCQktIHRibF9mdV9vdXQJIyBPVkZMCisJc2hvcnQJCWZ1X3VuZmwJCS0gdGJsX2Z1X291dAkjIFVORkwKKwlzaG9ydAkJdGJsX2Z1X291dAktIHRibF9mdV9vdXQJIyBEWiBjYW4ndCBoYXBwZW4KKwlzaG9ydAkJZnVfaW5leAkJLSB0YmxfZnVfb3V0CSMgSU5FWDIKKwlzaG9ydAkJdGJsX2Z1X291dAktIHRibF9mdV9vdXQJIyBJTkVYMSB3b24ndCBtYWtlIGl0IGhlcmUKKworIyBmb3Igc25hbixvcGVycixvdmZsLHVuZmwsIHNyYyBvcCBpcyBzdGlsbCBpbiBGUF9TUkMgc28ganVzdAorIyBmcmVzdG9yZSBpdC4KK2Z1X3NuYW46CisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwltb3YudwkJJjB4MzBkOCxFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4ZDgKKwltb3YudwkJJjB4ZTAwNiwyK0ZQX1NSQyglYTYpCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQorCisJdW5sawkJJWE2CisKKworCWJyYS5sCQlfcmVhbF9zbmFuCisKK2Z1X29wZXJyOgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJbW92LncJCSYweDMwZDAsRVhDX1ZPRkYoJWE2KQkjIHZlY3RvciBvZmZzZXQgPSAweGQwCisJbW92LncJCSYweGUwMDQsMitGUF9TUkMoJWE2KQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikKKworCXVubGsJCSVhNgorCisKKwlicmEubAkJX3JlYWxfb3BlcnIKKworZnVfb3ZmbDoKKwlmbW92bS54CQkmMHg0MCxGUF9TUkMoJWE2KQkjIHNhdmUgRVhPUCB0byB0aGUgc3RhY2sKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJbW92LncJCSYweDMwZDQsRVhDX1ZPRkYoJWE2KQkjIHZlY3RvciBvZmZzZXQgPSAweGQ0CisJbW92LncJCSYweGUwMDUsMitGUF9TUkMoJWE2KQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgcmVzdG9yZSBFWE9QCisKKwl1bmxrCQklYTYKKworCWJyYS5sCQlfcmVhbF9vdmZsCisKKyMgdW5kZXJmbG93IGNhbiBoYXBwZW4gZm9yIGV4dGVuZGVkIHByZWNpc2lvbi4gZXh0ZW5kZWQgcHJlY2lzaW9uIG9wY2xhc3MKKyMgdGhyZWUgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9ucyBkb24ndCB1cGRhdGUgdGhlIHN0YWNrIHBvaW50ZXIuIHNvLCBpZiB0aGUKKyMgZXhjZXB0aW9uIG9jY3VycmVkIGZyb20gdXNlciBtb2RlLCB0aGVuIHNpbXBseSB1cGRhdGUgYTcgYW5kIGV4aXQgbm9ybWFsbHkuCisjIGlmIHRoZSBleGNlcHRpb24gb2NjdXJyZWQgZnJvbSBzdXBlcnZpc29yIG1vZGUsIGNoZWNrIGlmCitmdV91bmZsOgorCW1vdi5sCQlFWENfQTYoJWE2KSwoJWE2KQkjIHJlc3RvcmUgYTYKKworCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikKKwlibmUudwkJZnVfdW5mbF9zCisKKwltb3YubAkJRVhDX0E3KCVhNiksJWEwCQkjIHJlc3RvcmUgYTcgd2hldGhlciB3ZSBuZWVkCisJbW92LmwJCSVhMCwldXNwCQkjIHRvIG9yIG5vdC4uLgorCitmdV91bmZsX2NvbnQ6CisJZm1vdm0ueAkJJjB4NDAsRlBfU1JDKCVhNikJIyBzYXZlIEVYT1AgdG8gdGhlIHN0YWNrCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCW1vdi53CQkmMHgzMGNjLEVYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhjYworCW1vdi53CQkmMHhlMDAzLDIrRlBfU1JDKCVhNikKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIHJlc3RvcmUgRVhPUAorCisJdW5sawkJJWE2CisKKwlicmEubAkJX3JlYWxfdW5mbAorCitmdV91bmZsX3M6CisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnICMgd2FzIHRoZSA8ZWE+IG1vZGUgLShzcCk/CisJYm5lLmIJCWZ1X3VuZmxfY29udAorCisjIHRoZSBleHRlbmRlZCBwcmVjaXNpb24gcmVzdWx0IGlzIHN0aWxsIGluIGZwMC4gYnV0LCB3ZSBuZWVkIHRvIHNhdmUgaXQKKyMgc29tZXdoZXJlIG9uIHRoZSBzdGFjayB1bnRpbCB3ZSBjYW4gY29weSBpdCB0byBpdHMgZmluYWwgcmVzdGluZyBwbGFjZQorIyAod2hlcmUgdGhlIGV4YyBmcmFtZSBpcyBjdXJyZW50bHkpLiBtYWtlIHN1cmUgaXQncyBub3QgYXQgdGhlIHRvcCBvZiB0aGUKKyMgZnJhbWUgb3IgaXQgd2lsbCBnZXQgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgZXhjIHN0YWNrIGZyYW1lIGlzIHNoaWZ0ZWQgImRvd24iLgorCWZtb3ZtLngJCSYweDgwLEZQX1NSQyglYTYpCSMgcHV0IGFuc3dlciBvbiBzdGFjaworCWZtb3ZtLngJCSYweDQwLEZQX0RTVCglYTYpCSMgcHV0IEVYT1Agb24gc3RhY2sKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJbW92LncJCSYweDMwY2MsRVhDX1ZPRkYoJWE2KQkjIHZlY3RvciBvZmZzZXQgPSAweGNjCisJbW92LncJCSYweGUwMDMsMitGUF9EU1QoJWE2KQorCisJZnJlc3RvcmUJRlBfRFNUKCVhNikJCSMgcmVzdG9yZSBFWE9QCisKKwltb3YubAkJKCVhNiksJWE2CQkjIHJlc3RvcmUgZnJhbWUgcG9pbnRlcgorCisJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX1NSKCVzcCksTE9DQUxfU0laRStFWENfU1ItMHhjKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRSsyK0VYQ19QQyglc3ApLExPQ0FMX1NJWkUrMitFWENfUEMtMHhjKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStFWENfRUEoJXNwKSxMT0NBTF9TSVpFK0VYQ19FQS0weGMoJXNwKQorCisjIG5vdywgY29weSB0aGUgcmVzdWx0IHRvIHRoZSBwcm9wZXIgcGxhY2Ugb24gdGhlIHN0YWNrCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfU1JDX0VYKCVzcCksTE9DQUxfU0laRStFWENfU1IrMHgwKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStGUF9TUkNfSEkoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUisweDQoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX1NSQ19MTyglc3ApLExPQ0FMX1NJWkUrRVhDX1NSKzB4OCglc3ApCisKKwlhZGQubAkJJkxPQ0FMX1NJWkUtMHg4LCVzcAorCisJYnJhLmwJCV9yZWFsX3VuZmwKKworIyBmbW92ZSBpbiBhbmQgb3V0IGVudGVyIGhlcmUuCitmdV9pbmV4OgorCWZtb3ZtLngJCSYweDQwLEZQX1NSQyglYTYpCSMgc2F2ZSBFWE9QIHRvIHRoZSBzdGFjaworCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwltb3YudwkJJjB4MzBjNCxFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4YzQKKwltb3YudwkJJjB4ZTAwMSwyK0ZQX1NSQyglYTYpCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIEVYT1AKKworCXVubGsJCSVhNgorCisKKwlicmEubAkJX3JlYWxfaW5leAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmdV9pbl9wYWNrOgorCisKKyMgSSdtIG5vdCBzdXJlIGF0IHRoaXMgcG9pbnQgd2hhdCBGUFNSIGJpdHMgYXJlIHZhbGlkIGZvciB0aGlzIGluc3RydWN0aW9uLgorIyBzbywgc2luY2UgdGhlIGVtdWxhdGlvbiByb3V0aW5lcyByZS1jcmVhdGUgdGhlbSBhbnl3YXlzLCB6ZXJvIGV4Y2VwdGlvbiBmaWVsZAorCWFuZGkubAkJJjB4MGZmMDBmZixVU0VSX0ZQU1IoJWE2KSAjIHplcm8gZXhjZXB0aW9uIGZpZWxkCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBjdXJyZW50IGNvbnRyb2wgcmVncworCWZtb3YubAkJJjB4MCwlZnBzcgorCisJYnNyLmwJCWdldF9wYWNrZWQJCSMgZmV0Y2ggcGFja2VkIHNyYyBvcGVyYW5kCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMKKwlic3IubAkJc2V0X3RhZ194CQkjIHNldCBzcmMgb3B0eXBlIHRhZworCisJbW92LmIJCSVkMCxTVEFHKCVhNikJCSMgc2F2ZSBzcmMgb3B0eXBlIHRhZworCisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMCAjIGR5YWRpYzsgbG9hZCBkc3QgcmVnCisKKyMgYml0IGZpdmUgb2YgdGhlIGZwIGV4dGVuc2lvbiB3b3JkIHNlcGFyYXRlcyB0aGUgbW9uYWRpYyBhbmQgZHlhZGljIG9wZXJhdGlvbnMKKyMgYXQgdGhpcyBwb2ludAorCWJ0c3QJCSYweDUsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcGVyYXRpb24gbW9uYWRpYyBvciBkeWFkaWM/CisJYmVxLmIJCWZ1X2V4dHJhY3RfcAkJIyBtb25hZGljCisJY21waS5iCQkxK0VYQ19DTURSRUcoJWE2KSwmMHgzYQkjIGlzIG9wZXJhdGlvbiBhbiBmdHN0PworCWJlcS5iCQlmdV9leHRyYWN0X3AJCSMgeWVzLCBzbyBpdCdzIG1vbmFkaWMsIHRvbworCisJYnNyLmwJCWxvYWRfZnBuMgkJIyBsb2FkIGRzdCBpbnRvIEZQX0RTVAorCisJbGVhCQlGUF9EU1QoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIGRzdCBvcAorCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKKwljbXBpLmIJCSVkMCwmVU5OT1JNCQkjIGlzIG9wZXJhbmQgYW4gVU5OT1JNPworCWJuZS5iCQlmdV9vcDJfZG9uZV9wCQkjIG5vCisJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBjb252ZXJ0IHRvIE5PUk0sREVOT1JNLG9yIFpFUk8KK2Z1X29wMl9kb25lX3A6CisJbW92LmIJCSVkMCxEVEFHKCVhNikJCSMgc2F2ZSBkc3Qgb3B0eXBlIHRhZworCitmdV9leHRyYWN0X3A6CisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBmZXRjaCBybmQgbW9kZS9wcmVjCisKKwliZmV4dHUJCTErRVhDX0NNRFJFRyglYTYpeyYxOiY3fSwlZDEgIyBleHRyYWN0IGV4dGVuc2lvbgorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlsZWEJCUZQX0RTVCglYTYpLCVhMQorCisJbW92LmwJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS5sKjQpLCVkMSAjIGZldGNoIHJvdXRpbmUgYWRkcgorCWpzcgkJKHRibF91bnN1cHAubCwlcGMsJWQxLmwqMSkKKworIworIyBFeGNlcHRpb25zIGluIG9yZGVyIG9mIHByZWNlZGVuY2U6CisjCUJTVU4JOiBub25lCisjCVNOQU4JOiBhbGwgZHlhZGljIG9wcworIwlPUEVSUgk6IGZzcXJ0KC1OT1JNKQorIwlPVkZMCTogYWxsIGV4Y2VwdCBmdHN0LGZjbXAKKyMJVU5GTAk6IGFsbCBleGNlcHQgZnRzdCxmY21wCisjCURaCTogZmRpdgorIwlJTkVYMgk6IGFsbCBleGNlcHQgZnRzdCxmY21wCisjCUlORVgxCTogYWxsCisjCisKKyMgd2UgZGV0ZXJtaW5lIHRoZSBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbihpZiBhbnkpIHNldCBieSB0aGUKKyMgZW11bGF0aW9uIHJvdXRpbmUgdGhhdCBoYXMgYWxzbyBiZWVuIGVuYWJsZWQgYnkgdGhlIHVzZXIuCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQwCSMgZmV0Y2ggZXhjZXB0aW9ucyBlbmFibGVkCisJYm5lLncJCWZ1X2luX2VuYV9wCQkjIHNvbWUgYXJlIGVuYWJsZWQKKworZnVfaW5fY29udF9wOgorIyBmY21wIGFuZCBmdHN0IGRvIG5vdCBzdG9yZSBhbnkgcmVzdWx0LgorCW1vdi5iCQkxK0VYQ19DTURSRUcoJWE2KSwlZDAJIyBmZXRjaCBleHRlbnNpb24KKwlhbmRpLmIJCSYweDM4LCVkMAkJIyBleHRyYWN0IGJpdHMgMy01CisJY21waS5iCQklZDAsJjB4MzgJCSMgaXMgaW5zdHIgZmNtcCBvciBmdHN0PworCWJlcS5iCQlmdV9pbl9leGl0X3AJCSMgeWVzCisKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwICMgZHlhZGljOyBsb2FkIGRzdCByZWcKKwlic3IubAkJc3RvcmVfZnByZWcJCSMgc3RvcmUgdGhlIHJlc3VsdAorCitmdV9pbl9leGl0X3A6CisKKwlidHN0CQkmMHg1LEVYQ19TUiglYTYpCSMgdXNlciBvciBzdXBlcnZpc29yPworCWJuZS53CQlmdV9pbl9leGl0X3NfcAkJIyBzdXBlcnZpc29yCisKKwltb3YubAkJRVhDX0E3KCVhNiksJWEwCQkjIHVwZGF0ZSB1c2VyIGE3CisJbW92LmwJCSVhMCwldXNwCisKK2Z1X2luX2V4aXRfY29udF9wOgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CQkJIyB1bnJhdmVsIHN0YWNrIGZyYW1lCisKKwlidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPworCWJuZS53CQlmdV90cmFjZV9wCQkjIHllcworCisJYnJhLmwJCV9mcHNwX2RvbmUJCSMgZXhpdCB0byBvcworCisjIHRoZSBleGNlcHRpb24gb2NjdXJyZWQgaW4gc3VwZXJ2aXNvciBtb2RlLiBjaGVjayB0byBzZWUgaWYgdGhlCisjIGFkZHJlc3NpbmcgbW9kZSB3YXMgKGE3KSsuIGlmIHNvLCB3ZSdsbCBuZWVkIHRvIHNoaWZ0IHRoZQorIyBzdGFjayBmcmFtZSAidXAiLgorZnVfaW5fZXhpdF9zX3A6CisJYnRzdAkJJm1pYTdfYml0LFNQQ09ORF9GTEcoJWE2KSAjIHdhcyBlYSBtb2RlIChhNykrCisJYmVxLmIJCWZ1X2luX2V4aXRfY29udF9wCSMgbm8KKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwL2ZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CQkJIyB1bnJhdmVsIHN0YWNrIGZyYW1lCisKKyMgc2hpZnQgdGhlIHN0YWNrIGZyYW1lICJ1cCIuIHdlIGRvbid0IHJlYWxseSBjYXJlIGFib3V0IHRoZSA8ZWE+IGZpZWxkLgorCW1vdi5sCQkweDQoJXNwKSwweDEwKCVzcCkKKwltb3YubAkJMHgwKCVzcCksMHhjKCVzcCkKKwlhZGQubAkJJjB4Yywlc3AKKworCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2Ugb24/CisJYm5lLncJCWZ1X3RyYWNlX3AJCSMgeWVzCisKKwlicmEubAkJX2Zwc3BfZG9uZQkJIyBleGl0IHRvIG9zCisKK2Z1X2luX2VuYV9wOgorCWFuZC5iCQlGUFNSX0VYQ0VQVCglYTYpLCVkMAkjIGtlZXAgb25seSBvbmVzIGVuYWJsZWQgJiBzZXQKKwliZmZmbwkJJWQweyYyNDomOH0sJWQwCQkjIGZpbmQgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24KKwlibmUuYgkJZnVfaW5fZXhjX3AJCSMgYXQgbGVhc3Qgb25lIHdhcyBzZXQKKworIworIyBObyBleGNlcHRpb25zIG9jY3VycmVkIHRoYXQgd2VyZSBhbHNvIGVuYWJsZWQuIE5vdzoKKyMKKyMJaWYgKE9WRkwgJiYgb3ZmbF9kaXNhYmxlZCAmJiBpbmV4YWN0X2VuYWJsZWQpIHsKKyMJICAgIGJyYW5jaCB0byBfcmVhbF9pbmV4KCkgKGV2ZW4gaWYgdGhlIHJlc3VsdCB3YXMgZXhhY3QhKTsKKyMJfSBlbHNlIHsKKyMJICAgIHNhdmUgdGhlIHJlc3VsdCBpbiB0aGUgcHJvcGVyIGZwIHJlZyAodW5sZXNzIHRoZSBvcCBpcyBmY21wIG9yIGZ0c3QpOworIwkgICAgcmV0dXJuOworIwl9CisjCisJYnRzdAkJJm92ZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyB3YXMgb3ZlcmZsb3cgc2V0PworCWJlcS53CQlmdV9pbl9jb250X3AJCSMgbm8KKworZnVfaW5fb3ZmbGNoa19wOgorCWJ0c3QJCSZpbmV4Ml9iaXQsRlBDUl9FTkFCTEUoJWE2KSAjIHdhcyBpbmV4YWN0IGVuYWJsZWQ/CisJYmVxLncJCWZ1X2luX2NvbnRfcAkJIyBubworCWJyYS53CQlmdV9pbl9leGNfb3ZmbF9wCSMgZG8gX3JlYWxfaW5leCgpIG5vdworCisjCisjIEFuIGV4Y2VwdGlvbiBvY2N1cnJlZCBhbmQgdGhhdCBleGNlcHRpb24gd2FzIGVuYWJsZWQ6CisjCisjCXNoaWZ0IGVuYWJsZWQgZXhjZXB0aW9uIGZpZWxkIGludG8gbG8gYnl0ZSBvZiBkMDsKKyMJaWYgKCgoSU5FWDIgfHwgSU5FWDEpICYmIGluZXhfZW5hYmxlZCAmJiBPVkZMICYmIG92ZmxfZGlzYWJsZWQpIHx8CisjCSAgICAoKElORVgyIHx8IElORVgxKSAmJiBpbmV4X2VuYWJsZWQgJiYgVU5GTCAmJiB1bmZsX2Rpc2FibGVkKSkgeworIwkJLyoKKyMJCSAqIHRoaXMgaXMgdGhlIGNhc2Ugd2hlcmUgd2UgbXVzdCBjYWxsIF9yZWFsX2luZXgoKSBub3cgb3IgZWxzZQorIwkJICogdGhlcmUgd2lsbCBiZSBubyBvdGhlciB3YXkgdG8gcGFzcyBpdCB0aGUgZXhjZXB0aW9uYWwgb3BlcmFuZAorIwkJICovCisjCQljYWxsIF9yZWFsX2luZXgoKTsKKyMJfSBlbHNlIHsKKyMJCXJlc3RvcmUgZXhjIHN0YXRlIChTTkFOfHxPUEVSUnx8T1ZGTHx8VU5GTHx8RFp8fElORVgpIGludG8gdGhlIEZQVTsKKyMJfQorIworZnVfaW5fZXhjX3A6CisJc3ViaS5sCQkmMjQsJWQwCQkJIyBmaXggb2Zmc2V0IHRvIGJlIDAtOAorCWNtcGkuYgkJJWQwLCYweDYJCSMgaXMgZXhjZXB0aW9uIElORVg/ICg2IG9yIDcpCisJYmx0LmIJCWZ1X2luX2V4Y19leGl0X3AJIyBubworCisjIHRoZSBlbmFibGVkIGV4Y2VwdGlvbiB3YXMgaW5leGFjdAorCWJ0c3QJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgZGlkIGRpc2FibGVkIHVuZGVyZmxvdyBvY2N1cj8KKwlibmUudwkJZnVfaW5fZXhjX3VuZmxfcAkjIHllcworCWJ0c3QJCSZvdmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgZGlkIGRpc2FibGVkIG92ZXJmbG93IG9jY3VyPworCWJuZS53CQlmdV9pbl9leGNfb3ZmbF9wCSMgeWVzCisKKyMgaGVyZSwgd2UgaW5zZXJ0IHRoZSBjb3JyZWN0IGZzYXZlIHN0YXR1cyB2YWx1ZSBpbnRvIHRoZSBmc2F2ZSBmcmFtZSBmb3IgdGhlCisjIGNvcnJlc3BvbmRpbmcgZXhjZXB0aW9uLiB0aGUgb3BlcmFuZCBpbiB0aGUgZnNhdmUgZnJhbWUgc2hvdWxkIGJlIHRoZSBvcmlnaW5hbAorIyBzcmMgb3BlcmFuZC4KKyMgYXMgYSByZW1pbmRlciBmb3IgZnV0dXJlIHByZWRpY3RlZCBwYWluIGFuZCBhZ29ueSwgd2UgYXJlIHBhc3NpbmcgaW4gZnNhdmUgdGhlCisjICJub24tc2tld2VkIiBvcGVyYW5kIGZvciBjYXNlcyBvZiBzZ2wgYW5kIGRibCBzcmMgSU5GcyxOQU5zLCBhbmQgREVOT1JNcy4KKyMgdGhpcyBpcyBJTkNPUlJFQ1QgZm9yIGVuYWJsZWQgU05BTiB3aGljaCB3b3VsZCBnaXZlIHRvIHRoZSB1c2VyIHRoZSBza2V3ZWQgU05BTiEhIQorZnVfaW5fZXhjX2V4aXRfcDoKKwlidHN0CQkmMHg1LEVYQ19TUiglYTYpCSMgdXNlciBvciBzdXBlcnZpc29yPworCWJuZS53CQlmdV9pbl9leGNfZXhpdF9zX3AJIyBzdXBlcnZpc29yCisKKwltb3YubAkJRVhDX0E3KCVhNiksJWEwCQkjIHVwZGF0ZSB1c2VyIGE3CisJbW92LmwJCSVhMCwldXNwCisKK2Z1X2luX2V4Y19leGl0X2NvbnRfcDoKKwltb3YudwkJKHRibF9leGNlcHRfcC5iLCVwYywlZDAudyoyKSwyK0ZQX1NSQyglYTYpCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIHJlc3RvcmUgc3JjIG9wCisKKwl1bmxrCQklYTYKKworCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2UgZW5hYmxlZD8KKwlibmUudwkJZnVfdHJhY2VfcAkJIyB5ZXMKKworCWJyYS5sCQlfZnBzcF9kb25lCisKK3RibF9leGNlcHRfcDoKKwlzaG9ydAkJMHhlMDAwLDB4ZTAwNiwweGUwMDQsMHhlMDA1CisJc2hvcnQJCTB4ZTAwMywweGUwMDIsMHhlMDAxLDB4ZTAwMQorCitmdV9pbl9leGNfb3ZmbF9wOgorCW1vdi53CQkmMHgzLCVkMAorCWJyYS53CQlmdV9pbl9leGNfZXhpdF9wCisKK2Z1X2luX2V4Y191bmZsX3A6CisJbW92LncJCSYweDQsJWQwCisJYnJhLncJCWZ1X2luX2V4Y19leGl0X3AKKworZnVfaW5fZXhjX2V4aXRfc19wOgorCWJ0c3QJCSZtaWE3X2JpdCxTUENPTkRfRkxHKCVhNikKKwliZXEuYgkJZnVfaW5fZXhjX2V4aXRfY29udF9wCisKKwltb3YudwkJKHRibF9leGNlcHRfcC5iLCVwYywlZDAudyoyKSwyK0ZQX1NSQyglYTYpCisKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCQkjIHJlc3RvcmUgc3JjIG9wCisKKwl1bmxrCQklYTYJCQkjIHVucmF2ZWwgc3RhY2sgZnJhbWUKKworIyBzaGlmdCBzdGFjayBmcmFtZSAidXAiLiB3aG8gY2FyZXMgYWJvdXQgPGVhPiBmaWVsZC4KKwltb3YubAkJMHg0KCVzcCksMHgxMCglc3ApCisJbW92LmwJCTB4MCglc3ApLDB4Yyglc3ApCisJYWRkLmwJCSYweGMsJXNwCisKKwlidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPworCWJuZS5iCQlmdV90cmFjZV9wCQkjIHllcworCisJYnJhLmwJCV9mcHNwX2RvbmUJCSMgZXhpdCB0byBvcworCisjCisjIFRoZSBvcGNsYXNzIHR3byBQQUNLRUQgaW5zdHJ1Y3Rpb24gdGhhdCB0b29rIGFuICJVbmltcGxlbWVudGVkIERhdGEgVHlwZSIKKyMgZXhjZXB0aW9uIHdhcyBiZWluZyB0cmFjZWQuIE1ha2UgdGhlICJjdXJyZW50IiBQQyB0aGUgRlBJQVIgYW5kIHB1dCBpdCBpbiB0aGUKKyMgdHJhY2Ugc3RhY2sgZnJhbWUgdGhlbiBqdW1wIHRvIF9yZWFsX3RyYWNlKCkuCisjCisjCQkgIFVOU1VQUCBGUkFNRQkJICAgVFJBQ0UgRlJBTUUKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCQkqICAgICAgRUEJKgkqICAgIEN1cnJlbnQJKgorIwkJKgkJKgkqICAgICAgUEMJKgorIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKKyMJCSogMHgyICoJMHgwZGMJKgkqIDB4MiAqICAweDAyNAkqCisjCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkJKiAgICAgTmV4dAkqCSogICAgIE5leHQJKgorIwkJKiAgICAgIFBDCSoJKiAgICAgIFBDCSoKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCQkqICAgICAgU1IJKgkqICAgICAgU1IJKgorIwkJKioqKioqKioqKioqKioqKioJKioqKioqKioqKioqKioqKioKK2Z1X3RyYWNlX3A6CisJbW92LncJCSYweDIwMjQsMHg2KCVzcCkKKwlmbW92LmwJCSVmcGlhciwweDgoJXNwKQorCisJYnJhLmwJCV9yZWFsX3RyYWNlCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmdV9vdXRfcGFjazoKKworCisjIEknbSBub3Qgc3VyZSBhdCB0aGlzIHBvaW50IHdoYXQgRlBTUiBiaXRzIGFyZSB2YWxpZCBmb3IgdGhpcyBpbnN0cnVjdGlvbi4KKyMgc28sIHNpbmNlIHRoZSBlbXVsYXRpb24gcm91dGluZXMgcmUtY3JlYXRlIHRoZW0gYW55d2F5cywgemVybyBleGNlcHRpb24gZmllbGQuCisjIGZtb3ZlIG91dCBkb2Vzbid0IGFmZmVjdCBjY29kZXMuCisJYW5kLmwJCSYweGZmZmYwMGZmLFVTRVJfRlBTUiglYTYpICMgemVybyBleGNlcHRpb24gZmllbGQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyB6ZXJvIGN1cnJlbnQgY29udHJvbCByZWdzCisJZm1vdi5sCQkmMHgwLCVmcHNyCisKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwCisJYnNyLmwJCWxvYWRfZnBuMQorCisjIHVubGlrZSBvdGhlciBvcGNsYXNzIDMsIHVuaW1wbGVtZW50ZWQgZGF0YSB0eXBlIGV4Y2VwdGlvbnMsIHBhY2tlZCBtdXN0IGJlCisjIGFibGUgdG8gZGV0ZWN0IGFsbCBvcGVyYW5kIHR5cGVzLgorCWxlYQkJRlBfU1JDKCVhNiksJWEwCisJYnNyLmwJCXNldF90YWdfeAkJIyB0YWcgdGhlIG9wZXJhbmQgdHlwZQorCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgb3BlcmFuZCBhbiBVTk5PUk0/CisJYm5lLmIJCWZ1X29wMl9wCQkjIG5vCisJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBjb252ZXJ0IHRvIE5PUk0sREVOT1JNLG9yIFpFUk8KKworZnVfb3AyX3A6CisJbW92LmIJCSVkMCxTVEFHKCVhNikJCSMgc2F2ZSBzcmMgb3B0eXBlIHRhZworCisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBmZXRjaCBybmQgbW9kZS9wcmVjCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMgb3BlcmFuZAorCisJbW92LmwJCSglYTYpLEVYQ19BNiglYTYpCSMgaW4gY2FzZSBhNiBjaGFuZ2VzCisJYnNyLmwJCWZvdXQJCQkjIGNhbGwgZm1vdmUgb3V0IHJvdXRpbmUKKworIyBFeGNlcHRpb25zIGluIG9yZGVyIG9mIHByZWNlZGVuY2U6CisjCUJTVU4JOiBubworIwlTTkFOCTogeWVzCisjCU9QRVJSCTogaWYgKChrX2ZhY3RvciA+ICsxNykgfHwgKGRlYy4gZXhwIGV4Y2VlZHMgMyBkaWdpdHMpKQorIwlPVkZMCTogbm8KKyMJVU5GTAk6IG5vCisjCURaCTogbm8KKyMJSU5FWDIJOiB5ZXMKKyMJSU5FWDEJOiBubworCisjIGRldGVybWluZSB0aGUgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24oaWYgYW55KSBzZXQgYnkgdGhlCisjIGVtdWxhdGlvbiByb3V0aW5lIHRoYXQgaGFzIGFsc28gYmVlbiBlbmFibGVkIGJ5IHRoZSB1c2VyLgorCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMAkjIGZldGNoIGV4Y2VwdGlvbnMgZW5hYmxlZAorCWJuZS53CQlmdV9vdXRfZW5hX3AJCSMgc29tZSBhcmUgZW5hYmxlZAorCitmdV9vdXRfZXhpdF9wOgorCW1vdi5sCQlFWENfQTYoJWE2KSwoJWE2KQkjIHJlc3RvcmUgYTYKKworCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikJIyB1c2VyIG9yIHN1cGVydmlzb3I/CisJYm5lLmIJCWZ1X291dF9leGl0X3NfcAkJIyBzdXBlcnZpc29yCisKKwltb3YubAkJRVhDX0E3KCVhNiksJWEwCQkjIHVwZGF0ZSB1c2VyIGE3CisJbW92LmwJCSVhMCwldXNwCisKK2Z1X291dF9leGl0X2NvbnRfcDoKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgkJCSMgdW5yYXZlbCBzdGFjayBmcmFtZQorCisJYnRzdAkJJjB4NywoJXNwKQkJIyBpcyB0cmFjZSBvbj8KKwlibmUudwkJZnVfdHJhY2VfcAkJIyB5ZXMKKworCWJyYS5sCQlfZnBzcF9kb25lCQkjIGV4aXQgdG8gb3MKKworIyB0aGUgZXhjZXB0aW9uIG9jY3VycmVkIGluIHN1cGVydmlzb3IgbW9kZS4gY2hlY2sgdG8gc2VlIGlmIHRoZQorIyBhZGRyZXNzaW5nIG1vZGUgd2FzIC0oYTcpLiBpZiBzbywgd2UnbGwgbmVlZCB0byBzaGlmdCB0aGUKKyMgc3RhY2sgZnJhbWUgImRvd24iLgorZnVfb3V0X2V4aXRfc19wOgorCWJ0c3QJCSZtZGE3X2JpdCxTUENPTkRfRkxHKCVhNikgIyB3YXMgZWEgbW9kZSAtKGE3KQorCWJlcS5iCQlmdV9vdXRfZXhpdF9jb250X3AJIyBubworCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwltb3YubAkJKCVhNiksJWE2CQkjIHJlc3RvcmUgZnJhbWUgcG9pbnRlcgorCisJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX1NSKCVzcCksTE9DQUxfU0laRStFWENfU1ItMHhjKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRSsyK0VYQ19QQyglc3ApLExPQ0FMX1NJWkUrMitFWENfUEMtMHhjKCVzcCkKKworIyBub3csIGNvcHkgdGhlIHJlc3VsdCB0byB0aGUgcHJvcGVyIHBsYWNlIG9uIHRoZSBzdGFjaworCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9FWCglc3ApLExPQ0FMX1NJWkUrRVhDX1NSKzB4MCglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfRFNUX0hJKCVzcCksTE9DQUxfU0laRStFWENfU1IrMHg0KCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfTE8oJXNwKSxMT0NBTF9TSVpFK0VYQ19TUisweDgoJXNwKQorCisJYWRkLmwJCSZMT0NBTF9TSVpFLTB4OCwlc3AKKworCWJ0c3QJCSYweDcsKCVzcCkKKwlibmUudwkJZnVfdHJhY2VfcAorCisJYnJhLmwJCV9mcHNwX2RvbmUKKworZnVfb3V0X2VuYV9wOgorCWFuZC5iCQlGUFNSX0VYQ0VQVCglYTYpLCVkMAkjIGtlZXAgb25seSBvbmVzIGVuYWJsZWQKKwliZmZmbwkJJWQweyYyNDomOH0sJWQwCQkjIGZpbmQgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24KKwliZXEudwkJZnVfb3V0X2V4aXRfcAorCisJbW92LmwJCUVYQ19BNiglYTYpLCglYTYpCSMgcmVzdG9yZSBhNgorCisjIGFuIGV4Y2VwdGlvbiBvY2N1cnJlZCBhbmQgdGhhdCBleGNlcHRpb24gd2FzIGVuYWJsZWQuCisjIHRoZSBvbmx5IGV4Y2VwdGlvbiBwb3NzaWJsZSBvbiBwYWNrZWQgbW92ZSBvdXQgYXJlIElORVgsIE9QRVJSLCBhbmQgU05BTi4KK2Z1X291dF9leGNfcDoKKwljbXBpLmIJCSVkMCwmMHgxYQorCWJndC53CQlmdV9pbmV4X3AyCisJYmVxLncJCWZ1X29wZXJyX3AKKworZnVfc25hbl9wOgorCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikKKwlibmUuYgkJZnVfc25hbl9zX3AKKworCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAKKwltb3YubAkJJWEwLCV1c3AKKwlicmEudwkJZnVfc25hbgorCitmdV9zbmFuX3NfcDoKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcKKwlibmUudwkJZnVfc25hbgorCisjIHRoZSBpbnN0cnVjdGlvbiB3YXMgImZtb3ZlLnAgZnBuLC0oYTcpIiBmcm9tIHN1cGVydmlzb3IgbW9kZS4KKyMgdGhlIHN0cmF0ZWd5IGlzIHRvIG1vdmUgdGhlIGV4Y2VwdGlvbiBmcmFtZSAiZG93biIgMTIgYnl0ZXMuIHRoZW4sIHdlCisjIGNhbiBzdG9yZSB0aGUgZGVmYXVsdCByZXN1bHQgd2hlcmUgdGhlIGV4Y2VwdGlvbiBmcmFtZSB3YXMuCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwltb3YudwkJJjB4MzBkOCxFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4ZDAKKwltb3YudwkJJjB4ZTAwNiwyK0ZQX1NSQyglYTYpCSMgc2V0IGZzYXZlIHN0YXR1cworCisJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgcmVzdG9yZSBzcmMgb3BlcmFuZAorCisJbW92LmwJCSglYTYpLCVhNgkJIyByZXN0b3JlIGZyYW1lIHBvaW50ZXIKKworCW1vdi5sCQlMT0NBTF9TSVpFK0VYQ19TUiglc3ApLExPQ0FMX1NJWkUrRVhDX1NSLTB4Yyglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrMitFWENfUEMoJXNwKSxMT0NBTF9TSVpFKzIrRVhDX1BDLTB4Yyglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX0VBKCVzcCksTE9DQUxfU0laRStFWENfRUEtMHhjKCVzcCkKKworIyBub3csIHdlIGNvcHkgdGhlIGRlZmF1bHQgcmVzdWx0IHRvIGl0cyBwcm9wZXIgbG9jYXRpb24KKwltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfRVgoJXNwKSxMT0NBTF9TSVpFKzB4NCglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfRFNUX0hJKCVzcCksTE9DQUxfU0laRSsweDgoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9MTyglc3ApLExPQ0FMX1NJWkUrMHhjKCVzcCkKKworCWFkZC5sCQkmTE9DQUxfU0laRS0weDgsJXNwCisKKworCWJyYS5sCQlfcmVhbF9zbmFuCisKK2Z1X29wZXJyX3A6CisJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQorCWJuZS53CQlmdV9vcGVycl9wX3MKKworCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAKKwltb3YubAkJJWEwLCV1c3AKKwlicmEudwkJZnVfb3BlcnIKKworZnVfb3BlcnJfcF9zOgorCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtZGE3X2ZsZworCWJuZS53CQlmdV9vcGVycgorCisjIHRoZSBpbnN0cnVjdGlvbiB3YXMgImZtb3ZlLnAgZnBuLC0oYTcpIiBmcm9tIHN1cGVydmlzb3IgbW9kZS4KKyMgdGhlIHN0cmF0ZWd5IGlzIHRvIG1vdmUgdGhlIGV4Y2VwdGlvbiBmcmFtZSAiZG93biIgMTIgYnl0ZXMuIHRoZW4sIHdlCisjIGNhbiBzdG9yZSB0aGUgZGVmYXVsdCByZXN1bHQgd2hlcmUgdGhlIGV4Y2VwdGlvbiBmcmFtZSB3YXMuCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAvZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwltb3YudwkJJjB4MzBkMCxFWENfVk9GRiglYTYpCSMgdmVjdG9yIG9mZnNldCA9IDB4ZDAKKwltb3YudwkJJjB4ZTAwNCwyK0ZQX1NSQyglYTYpCSMgc2V0IGZzYXZlIHN0YXR1cworCisJZnJlc3RvcmUJRlBfU1JDKCVhNikJCSMgcmVzdG9yZSBzcmMgb3BlcmFuZAorCisJbW92LmwJCSglYTYpLCVhNgkJIyByZXN0b3JlIGZyYW1lIHBvaW50ZXIKKworCW1vdi5sCQlMT0NBTF9TSVpFK0VYQ19TUiglc3ApLExPQ0FMX1NJWkUrRVhDX1NSLTB4Yyglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrMitFWENfUEMoJXNwKSxMT0NBTF9TSVpFKzIrRVhDX1BDLTB4Yyglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX0VBKCVzcCksTE9DQUxfU0laRStFWENfRUEtMHhjKCVzcCkKKworIyBub3csIHdlIGNvcHkgdGhlIGRlZmF1bHQgcmVzdWx0IHRvIGl0cyBwcm9wZXIgbG9jYXRpb24KKwltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfRVgoJXNwKSxMT0NBTF9TSVpFKzB4NCglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfRFNUX0hJKCVzcCksTE9DQUxfU0laRSsweDgoJXNwKQorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9MTyglc3ApLExPQ0FMX1NJWkUrMHhjKCVzcCkKKworCWFkZC5sCQkmTE9DQUxfU0laRS0weDgsJXNwCisKKworCWJyYS5sCQlfcmVhbF9vcGVycgorCitmdV9pbmV4X3AyOgorCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikKKwlibmUudwkJZnVfaW5leF9zX3AyCisKKwltb3YubAkJRVhDX0E3KCVhNiksJWEwCisJbW92LmwJCSVhMCwldXNwCisJYnJhLncJCWZ1X2luZXgKKworZnVfaW5leF9zX3AyOgorCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtZGE3X2ZsZworCWJuZS53CQlmdV9pbmV4CisKKyMgdGhlIGluc3RydWN0aW9uIHdhcyAiZm1vdmUucCBmcG4sLShhNykiIGZyb20gc3VwZXJ2aXNvciBtb2RlLgorIyB0aGUgc3RyYXRlZ3kgaXMgdG8gbW92ZSB0aGUgZXhjZXB0aW9uIGZyYW1lICJkb3duIiAxMiBieXRlcy4gdGhlbiwgd2UKKyMgY2FuIHN0b3JlIHRoZSBkZWZhdWx0IHJlc3VsdCB3aGVyZSB0aGUgZXhjZXB0aW9uIGZyYW1lIHdhcy4KKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC9mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCW1vdi53CQkmMHgzMGM0LEVYQ19WT0ZGKCVhNikJIyB2ZWN0b3Igb2Zmc2V0ID0gMHhjNAorCW1vdi53CQkmMHhlMDAxLDIrRlBfU1JDKCVhNikJIyBzZXQgZnNhdmUgc3RhdHVzCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIHNyYyBvcGVyYW5kCisKKwltb3YubAkJKCVhNiksJWE2CQkjIHJlc3RvcmUgZnJhbWUgcG9pbnRlcgorCisJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX1NSKCVzcCksTE9DQUxfU0laRStFWENfU1ItMHhjKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRSsyK0VYQ19QQyglc3ApLExPQ0FMX1NJWkUrMitFWENfUEMtMHhjKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStFWENfRUEoJXNwKSxMT0NBTF9TSVpFK0VYQ19FQS0weGMoJXNwKQorCisjIG5vdywgd2UgY29weSB0aGUgZGVmYXVsdCByZXN1bHQgdG8gaXRzIHByb3BlciBsb2NhdGlvbgorCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX0RTVF9FWCglc3ApLExPQ0FMX1NJWkUrMHg0KCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStGUF9EU1RfSEkoJXNwKSxMT0NBTF9TSVpFKzB4OCglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfRFNUX0xPKCVzcCksTE9DQUxfU0laRSsweGMoJXNwKQorCisJYWRkLmwJCSZMT0NBTF9TSVpFLTB4OCwlc3AKKworCisJYnJhLmwJCV9yZWFsX2luZXgKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIGlmIHdlJ3JlIHN0dWZmaW5nIGEgc291cmNlIG9wZXJhbmQgYmFjayBpbnRvIGFuIGZzYXZlIGZyYW1lIHRoZW4gd2UKKyMgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBmb3Igc2luZ2xlIG9yIGRvdWJsZSBzb3VyY2Ugb3BlcmFuZHMgdGhhdCB0aGUKKyMgZm9ybWF0IHN0dWZmZWQgaXMgYXMgd2VpcmQgYXMgdGhlIGhhcmR3YXJlIHVzdWFsbHkgbWFrZXMgaXQuCisjCisJZ2xvYmFsCQlmdW5pbXBfc2tldworZnVuaW1wX3NrZXc6CisJYmZleHR1CQlFWENfRVhUV09SRCglYTYpeyYzOiYzfSwlZDAgIyBleHRyYWN0IHNyYyBzcGVjaWZpZXIKKwljbXBpLmIJCSVkMCwmMHgxCQkjIHdhcyBzcmMgc2dsPworCWJlcS5iCQlmdW5pbXBfc2tld19zZ2wJCSMgeWVzCisJY21waS5iCQklZDAsJjB4NQkJIyB3YXMgc3JjIGRibD8KKwliZXEuYgkJZnVuaW1wX3NrZXdfZGJsCQkjIHllcworCXJ0cworCitmdW5pbXBfc2tld19zZ2w6CisJbW92LncJCUZQX1NSQ19FWCglYTYpLCVkMAkjIGZldGNoIERFTk9STSBleHBvbmVudAorCWFuZGkudwkJJjB4N2ZmZiwlZDAJCSMgc3RyaXAgc2lnbgorCWJlcS5iCQlmdW5pbXBfc2tld19zZ2xfbm90CisJY21waS53CQklZDAsJjB4M2Y4MAorCWJndC5iCQlmdW5pbXBfc2tld19zZ2xfbm90CisJbmVnLncJCSVkMAkJCSMgbWFrZSBleHBvbmVudCBuZWdhdGl2ZQorCWFkZGkudwkJJjB4M2Y4MSwlZDAJCSMgZmluZCBhbXQgdG8gc2hpZnQKKwltb3YubAkJRlBfU1JDX0hJKCVhNiksJWQxCSMgZmV0Y2ggREVOT1JNIGhpKG1hbikKKwlsc3IubAkJJWQwLCVkMQkJCSMgc2hpZnQgaXQKKwlic2V0CQkmMzEsJWQxCQkJIyBzZXQgai1iaXQKKwltb3YubAkJJWQxLEZQX1NSQ19ISSglYTYpCSMgaW5zZXJ0IG5ldyBoaShtYW4pCisJYW5kaS53CQkmMHg4MDAwLEZQX1NSQ19FWCglYTYpCSMgY2xlYXIgb2xkIGV4cG9uZW50CisJb3JpLncJCSYweDNmODAsRlBfU1JDX0VYKCVhNikJIyBpbnNlcnQgbmV3ICJza2V3ZWQiIGV4cG9uZW50CitmdW5pbXBfc2tld19zZ2xfbm90OgorCXJ0cworCitmdW5pbXBfc2tld19kYmw6CisJbW92LncJCUZQX1NSQ19FWCglYTYpLCVkMAkjIGZldGNoIERFTk9STSBleHBvbmVudAorCWFuZGkudwkJJjB4N2ZmZiwlZDAJCSMgc3RyaXAgc2lnbgorCWJlcS5iCQlmdW5pbXBfc2tld19kYmxfbm90CisJY21waS53CQklZDAsJjB4M2MwMAorCWJndC5iCQlmdW5pbXBfc2tld19kYmxfbm90CisKKwl0c3QuYgkJRlBfU1JDX0VYKCVhNikJCSMgbWFrZSAiaW50ZXJuYWwgZm9ybWF0IgorCXNtaS5iCQkweDIrRlBfU1JDKCVhNikKKwltb3YudwkJJWQwLEZQX1NSQ19FWCglYTYpCSMgaW5zZXJ0IGV4cG9uZW50IHdpdGggY2xlYXJlZCBzaWduCisJY2xyLmwJCSVkMAkJCSMgY2xlYXIgZyxyLHMKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzIHB0ciB0byBzcmMgb3AKKwltb3YudwkJJjB4M2MwMSwlZDEJCSMgcGFzcyBkZW5vcm0gdGhyZXNob2xkCisJYnNyLmwJCWRucm1fbHAJCQkjIGRlbm9ybSBpdAorCW1vdi53CQkmMHgzYzAwLCVkMAkJIyBuZXcgZXhwb25lbnQKKwl0c3QuYgkJMHgyK0ZQX1NSQyglYTYpCQkjIGlzIHNpZ24gc2V0PworCWJlcS5iCQlmc3NfZGJsX2Rlbm9ybV9kb25lCSMgbm8KKwlic2V0CQkmMTUsJWQwCQkJIyBzZXQgc2lnbgorZnNzX2RibF9kZW5vcm1fZG9uZToKKwlic2V0CQkmMHg3LEZQX1NSQ19ISSglYTYpCSMgc2V0IGotYml0CisJbW92LncJCSVkMCxGUF9TUkNfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKK2Z1bmltcF9za2V3X2RibF9ub3Q6CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwlnbG9iYWwJCV9tZW1fd3JpdGUyCitfbWVtX3dyaXRlMjoKKwlidHN0CQkmMHg1LEVYQ19TUiglYTYpCisJYmVxLmwJCV9kbWVtX3dyaXRlCisJbW92LmwJCTB4MCglYTApLEZQX0RTVF9FWCglYTYpCisJbW92LmwJCTB4NCglYTApLEZQX0RTVF9ISSglYTYpCisJbW92LmwJCTB4OCglYTApLEZQX0RTVF9MTyglYTYpCisJY2xyLmwJCSVkMQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9mcHNwX2VmZmFkZCgpOiAwNjBGUFNQIGVudHJ5IHBvaW50IGZvciBGUCAiVW5pbXBsZW1lbnRlZAkjCisjCQkJZWZmZWN0aXZlIGFkZHJlc3MiIGV4Y2VwdGlvbi4JCQkjCisjCQkJCQkJCQkJIworIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIHRoZQkjCisjCUZQIFVuaW1wbGVtZW50ZWQgRWZmZWN0aXZlIEFkZHJlc3MgZXhjZXB0aW9uIGluIGFuIG9wZXJhdGluZwkjCisjCXN5c3RlbS4JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9pbWVtX3JlYWRfbG9uZygpIC0gcmVhZCBpbnN0cnVjdGlvbiBsb25nd29yZAkJCSMKKyMJZml4X3NrZXdlZF9vcHMoKSAtIGFkanVzdCBzcmMgb3BlcmFuZCBpbiBmc2F2ZSBmcmFtZQkJIworIwlzZXRfdGFnX3goKSAtIGRldGVybWluZSBvcHR5cGUgb2Ygc3JjL2RzdCBvcGVyYW5kcwkJIworIwlzdG9yZV9mcHJlZygpIC0gc3RvcmUgb3BjbGFzcyAwIG9yIDIgcmVzdWx0IHRvIEZQIHJlZ2ZpbGUJIworIwl1bm5vcm1fZml4KCkgLSBjaGFuZ2UgVU5OT1JNIG9wZXJhbmRzIHRvIE5PUk0gb3IgWkVSTwkJIworIwlsb2FkX2ZwbjIoKSAtIGxvYWQgZHN0IG9wZXJhbmQgZnJvbSBGUCByZWdmaWxlCQkJIworIwl0YmxfdW5zdXBwIC0gYWRkIG9mIHRhYmxlIG9mIGVtdWxhdGlvbiByb3V0aW5lcyBmb3Igb3BjbGFzcyAwLDIJIworIwlkZWNiaW4oKSAtIGNvbnZlcnQgcGFja2VkIGRhdGEgdG8gRlAgYmluYXJ5IGRhdGEJCSMKKyMJX3JlYWxfZnB1X2Rpc2FibGVkKCkgLSAiY2FsbG91dCIgZm9yICJGUFUgZGlzYWJsZWQiIGV4Y2VwdGlvbgkjCisjCV9yZWFsX2FjY2VzcygpIC0gImNhbGxvdXQiIGZvciBhY2Nlc3MgZXJyb3IgZXhjZXB0aW9uCQkjCisjCV9tZW1fcmVhZCgpIC0gcmVhZCBleHRlbmRlZCBpbW1lZGlhdGUgb3BlcmFuZCBmcm9tIG1lbW9yeQkjCisjCV9mcHNwX2RvbmUoKSAtICJjYWxsb3V0IiBmb3IgZXhpdDsgd29yayBhbGwgZG9uZQkJIworIwlfcmVhbF90cmFjZSgpIC0gImNhbGxvdXQiIGZvciBUcmFjZSBlbmFibGVkIGV4Y2VwdGlvbgkJIworIwlmbW92bV9keW5hbWljKCkgLSBlbXVsYXRlIGR5bmFtaWMgZm1vdm0gaW5zdHJ1Y3Rpb24JCSMKKyMJZm1vdm1fY3RybCgpIC0gZW11bGF0ZSBmbW92bSBjb250cm9sIGluc3RydWN0aW9uCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgdGhlICJVbmltcGxlbWVudGVkIDxlYT4iIHN0ayBmcmFtZQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlJZiBhY2Nlc3MgZXJyb3I6CQkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhbiBhY2Nlc3MgZXJyb3Igc3RhY2sgZnJhbWUJIworIwlJZiBGUFUgZGlzYWJsZWQ6CQkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgY2hhbmdlZCB0byBhbiBGUFUgZGlzYWJsZWQgc3RhY2sgZnJhbWUJIworIwlJZiBUcmFjZSBleGNlcHRpb24gZW5hYmxlZDoJCQkJCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIGNoYW5nZWQgdG8gYSBUcmFjZSBleGNlcHRpb24gc3RhY2sgZnJhbWUJIworIwlFbHNlOiAobm9ybWFsIGNhc2UpCQkJCQkJIworIwktIE5vbmUgKGNvcnJlY3QgcmVzdWx0IGhhcyBiZWVuIHN0b3JlZCBhcyBhcHByb3ByaWF0ZSkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoaXMgZXhjZXB0aW9uIGhhbmRsZXMgMyB0eXBlcyBvZiBvcGVyYXRpb25zOgkJCSMKKyMgKDEpIEZQIEluc3RydWN0aW9ucyB1c2luZyBleHRlbmRlZCBwcmVjaXNpb24gb3IgcGFja2VkIGltbWVkaWF0ZQkjCisjICAgICBhZGRyZXNzaW5nIG1vZGUuCQkJCQkJCSMKKyMgKDIpIFRoZSAiZm1vdm0ueCIgaW5zdHJ1Y3Rpb24gdy8gZHluYW1pYyByZWdpc3RlciBzcGVjaWZpY2F0aW9uLgkjCisjICgzKSBUaGUgImZtb3ZtLmwiIGluc3RydWN0aW9uIHcvIDIgb3IgMyBjb250cm9sIHJlZ2lzdGVycy4JCSMKKyMJCQkJCQkJCQkjCisjCUZvciBpbW1lZGlhdGUgZGF0YSBvcGVyYXRpb25zLCB0aGUgZGF0YSBpcyByZWFkIGluIHcvIGEJCSMKKyMgX21lbV9yZWFkKCkgImNhbGxvdXQiLCBjb252ZXJ0ZWQgdG8gRlAgYmluYXJ5IChpZiBwYWNrZWQpLCBhbmQgdXNlZAkjCisjIGFzIHRoZSBzb3VyY2Ugb3BlcmFuZCB0byB0aGUgaW5zdHJ1Y3Rpb24gc3BlY2lmaWVkIGJ5IHRoZSBpbnN0cnVjdGlvbgkjCisjIHdvcmQuIElmIG5vIEZQIGV4Y2VwdGlvbiBzaG91bGQgYmUgcmVwb3J0ZWQgYWRzIGEgcmVzdWx0IG9mIHRoZQkjCisjIGVtdWxhdGlvbiwgdGhlbiB0aGUgcmVzdWx0IGlzIHN0b3JlZCB0byB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgYW5kCSMKKyMgdGhlIGhhbmRsZXIgZXhpdHMgdGhyb3VnaCBfZnBzcF9kb25lKCkuIElmIGFuIGVuYWJsZWQgZXhjIGhhcyBiZWVuCSMKKyMgc2lnbmFsbGVkIGFzIGEgcmVzdWx0IG9mIGVtdWxhdGlvbiwgdGhlbiBhbiBmc2F2ZSBzdGF0ZSBmcmFtZQkJIworIyBjb3JyZXNwb25kaW5nIHRvIHRoZSBGUCBleGNlcHRpb24gdHlwZSBtdXN0IGJlIGVudGVyZWQgaW50byB0aGUgMDYwCSMKKyMgRlBVIGJlZm9yZSBleGl0aW5nLiBJbiBlaXRoZXIgdGhlIGVuYWJsZWQgb3IgZGlzYWJsZWQgY2FzZXMsIHdlCSMKKyMgbXVzdCBhbHNvIGNoZWNrIGlmIGEgVHJhY2UgZXhjZXB0aW9uIGlzIHBlbmRpbmcsIGluIHdoaWNoIGNhc2UsIHdlCSMKKyMgbXVzdCBjcmVhdGUgYSBUcmFjZSBleGNlcHRpb24gc3RhY2sgZnJhbWUgZnJvbSB0aGUgY3VycmVudCBleGNlcHRpb24JIworIyBzdGFjayBmcmFtZS4gSWYgbm8gVHJhY2UgaXMgcGVuZGluZywgd2Ugc2ltcGx5IGV4aXQgdGhyb3VnaAkJIworIyBfZnBzcF9kb25lKCkuCQkJCQkJCQkjCisjCUZvciAiZm1vdm0ueCIsIGNhbGwgdGhlIHJvdXRpbmUgZm1vdm1fZHluYW1pYygpIHdoaWNoIHdpbGwJIworIyBkZWNvZGUgYW5kIGVtdWxhdGUgdGhlIGluc3RydWN0aW9uLiBObyBGUCBleGNlcHRpb25zIGNhbiBiZSBwZW5kaW5nCSMKKyMgYXMgYSByZXN1bHQgb2YgdGhpcyBvcGVyYXRpb24gZW11bGF0aW9uLiBBIFRyYWNlIGV4Y2VwdGlvbiBjYW4gYmUJIworIyBwZW5kaW5nLCB0aG91Z2gsIHdoaWNoIG1lYW5zIHRoZSBjdXJyZW50IHN0YWNrIGZyYW1lIG11c3QgYmUgY2hhbmdlZAkjCisjIHRvIGEgVHJhY2Ugc3RhY2sgZnJhbWUgYW5kIGFuIGV4aXQgbWFkZSB0aHJvdWdoIF9yZWFsX3RyYWNlKCkuCSMKKyMgRm9yIHRoZSBjYXNlIG9mICJmbW92bS54IERuLC0oYTcpIiwgd2hlcmUgdGhlIG9mZmVuZGluZyBpbnN0cnVjdGlvbgkjCisjIHdhcyBleGVjdXRlZCBmcm9tIHN1cGVydmlzb3IgbW9kZSwgdGhpcyBoYW5kbGVyIG11c3Qgc3RvcmUgdGhlIEZQCSMKKyMgcmVnaXN0ZXIgZmlsZSB2YWx1ZXMgdG8gdGhlIHN5c3RlbSBzdGFjayBieSBpdHNlbGYgc2luY2UJCSMKKyMgZm1vdm1fZHluYW1pYygpIGNhbid0IGhhbmRsZSB0aGlzLiBBIG5vcm1hbCBleGl0IGlzIG1hZGUgdGhyb3VnaAkjCisjIGZwc3BfZG9uZSgpLgkJCQkJCQkJIworIwlGb3IgImZtb3ZtLmwiLCBmbW92bV9jdHJsKCkgaXMgdXNlZCB0byBlbXVsYXRlIHRoZSBpbnN0cnVjdGlvbi4JIworIyBBZ2FpbiwgYSBUcmFjZSBleGNlcHRpb24gbWF5IGJlIHBlbmRpbmcgYW5kIGFuIGV4aXQgbWFkZSB0aHJvdWdoCSMKKyMgX3JlYWxfdHJhY2UoKS4gRWxzZSwgYSBub3JtYWwgZXhpdCBpcyBtYWRlIHRocm91Z2ggX2Zwc3BfZG9uZSgpLgkjCisjCQkJCQkJCQkJIworIwlCZWZvcmUgYW55IG9mIHRoZSBhYm92ZSBpcyBhdHRlbXB0ZWQsIGl0IG11c3QgYmUgY2hlY2tlZCB0bwkjCisjIHNlZSBpZiB0aGUgRlBVIGlzIGRpc2FibGVkLiBTaW5jZSB0aGUgIlVuaW1wIDxlYT4iIGV4Y2VwdGlvbiBpcyB0YWtlbgkjCisjIGJlZm9yZSB0aGUgIkZQVSBkaXNhYmxlZCIgZXhjZXB0aW9uLCBidXQgdGhlICJGUFUgZGlzYWJsZWQiIGV4Y2VwdGlvbgkjCisjIGhhcyBoaWdoZXIgcHJpb3JpdHksIHdlIGNoZWNrIHRoZSBkaXNhYmxlZCBiaXQgaW4gdGhlIFBDUi4gSWYgc2V0LAkjCisjIHRoZW4gd2UgbXVzdCBjcmVhdGUgYW4gOCB3b3JkICJGUFUgZGlzYWJsZWQiIGV4Y2VwdGlvbiBzdGFjayBmcmFtZQkjCisjIGZyb20gdGhlIGN1cnJlbnQgNCB3b3JkIGV4Y2VwdGlvbiBzdGFjayBmcmFtZS4gVGhpcyBpbmNsdWRlcwkJIworIyByZXByb2R1Y2luZyB0aGUgZWZmZWN0aXZlIGFkZHJlc3Mgb2YgdGhlIGluc3RydWN0aW9uIHRvIHB1dCBvbiB0aGUJIworIyBuZXcgc3RhY2sgZnJhbWUuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCUluIHRoZSBwcm9jZXNzIG9mIGFsbCBlbXVsYXRpb24gd29yaywgaWYgYSBfbWVtX3JlYWQoKQkJIworIyAiY2FsbG91dCIgcmV0dXJucyBhIGZhaWxpbmcgcmVzdWx0IGluZGljYXRpbmcgYW4gYWNjZXNzIGVycm9yLCB0aGVuCSMKKyMgd2UgbXVzdCBjcmVhdGUgYW4gYWNjZXNzIGVycm9yIHN0YWNrIGZyYW1lIGZyb20gdGhlIGN1cnJlbnQgc3RhY2sJIworIyBmcmFtZS4gVGhpcyBpbmZvcm1hdGlvbiBpbmNsdWRlcyBhIGZhdWx0aW5nIGFkZHJlc3MgYW5kIGEgZmF1bHQtCSMKKyMgc3RhdHVzLWxvbmd3b3JkLiBUaGVzZSBhcmUgY3JlYXRlZCB3aXRoaW4gdGhpcyBoYW5kbGVyLgkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2Zwc3BfZWZmYWRkCitfZnBzcF9lZmZhZGQ6CisKKyMgVGhpcyBleGNlcHRpb24gdHlwZSB0YWtlcyBwcmlvcml0eSBvdmVyIHRoZSAiTGluZSBGIEVtdWxhdG9yIgorIyBleGNlcHRpb24uIFRoZXJlZm9yZSwgdGhlIEZQVSBjb3VsZCBiZSBkaXNhYmxlZCB3aGVuIGVudGVyaW5nIGhlcmUuCisjIFNvLCB3ZSBtdXN0IGNoZWNrIHRvIHNlZSBpZiBpdCdzIGRpc2FibGVkIGFuZCBoYW5kbGUgdGhhdCBjYXNlIHNlcGFyYXRlbHkuCisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBkMAorCW1vdmMJCSVwY3IsJWQwCQkjIGxvYWQgcHJvYyBjcgorCWJ0c3QJCSYweDEsJWQwCQkjIGlzIEZQVSBkaXNhYmxlZD8KKwlibmUudwkJaWVhX2Rpc2FibGVkCQkjIHllcworCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJlc3RvcmUgZDAKKworCWxpbmsJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlBSRUdTKCVhNikJIyBzYXZlIGZwMC1mcDEgb24gc3RhY2sKKworIyBQQyBvZiBpbnN0cnVjdGlvbiB0aGF0IHRvb2sgdGhlIGV4Y2VwdGlvbiBpcyB0aGUgUEMgaW4gdGhlIGZyYW1lCisJbW92LmwJCUVYQ19QQyglYTYpLEVYQ19FWFRXUFRSKCVhNikKKworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCB0aGUgaW5zdHJ1Y3Rpb24gd29yZHMKKwltb3YubAkJJWQwLEVYQ19PUFdPUkQoJWE2KQkjIHN0b3JlIE9QV09SRCBhbmQgRVhUV09SRAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwl0c3QudwkJJWQwCQkJIyBpcyBvcGVyYXRpb24gZm1vdmVtPworCWJtaS53CQlpZWFfZm1vdm0JCSMgeWVzCisKKyMKKyMgaGVyZSwgd2Ugd2lsbCBoYXZlOgorIwlmYWJzCWZkYWJzCWZzYWJzCQlmYWNvcwkJZm1vZAorIwlmYWRkCWZkYWRkCWZzYWRkCQlmYXNpbgkJZnJlbQorIwlmY21wCQkJCWZhdGFuCQlmc2NhbGUKKyMJZmRpdglmZGRpdglmc2RpdgkJZmF0YW5oCQlmc2luCisjCWZpbnQJCQkJZmNvcwkJZnNpbmNvcworIwlmaW50cnoJCQkJZmNvc2gJCWZzaW5oCisjCWZtb3ZlCWZkbW92ZQlmc21vdmUJCWZldG94CQlmdGFuCisjCWZtdWwJZmRtdWwJZnNtdWwJCWZldG94bTEJCWZ0YW5oCisjCWZuZWcJZmRuZWcJZnNuZWcJCWZnZXRleHAJCWZ0ZW50b3gKKyMJZnNnbGRpdgkJCQlmZ2V0bWFuCQlmdHdvdG94CisjCWZzZ2xtdWwJCQkJZmxvZzEwCisjCWZzcXJ0CQkJCWZsb2cyCisjCWZzdWIJZmRzdWIJZnNzdWIJCWZsb2duCisjCWZ0c3QJCQkJZmxvZ25wMQorIyB3aGljaCBjYW4gYWxsIHVzZSBmPG9wPi57eCxwfQorIyBzbywgbm93IGl0J3MgaW1tZWRpYXRlIGRhdGEgZXh0ZW5kZWQgcHJlY2lzaW9uIEFORCBQQUNLRUQgRk9STUFUIQorIworaWVhX29wOgorCWFuZGkubAkJJjB4MDBmZjAwZmYsVVNFUl9GUFNSKCVhNikKKworCWJ0c3QJCSYweGEsJWQwCQkjIGlzIHNyYyBmbXQgeCBvciBwPworCWJuZS5iCQlpZWFfb3BfcGFjawkJIyBwYWNrZWQKKworCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgcGFzczogcHRyIHRvICM8ZGF0YT4KKwlsZWEJCUZQX1NSQyglYTYpLCVhMQkJIyBwYXNzOiBwdHIgdG8gc3VwZXIgYWRkcgorCW1vdi5sCQkmMHhjLCVkMAkJIyBwYXNzOiAxMiBieXRlcworCWJzci5sCQlfaW1lbV9yZWFkCQkjIHJlYWQgZXh0ZW5kZWQgaW1tZWRpYXRlCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLncJCWllYV9pYWNjCQkjIHllcworCisJYnJhLmIJCWllYV9vcF9zZXRzcmMKKworaWVhX29wX3BhY2s6CisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gIzxkYXRhPgorCWxlYQkJRlBfU1JDKCVhNiksJWExCQkjIHBhc3M6IHB0ciB0byBzdXBlciBkc3QKKwltb3YubAkJJjB4YywlZDAJCSMgcGFzczogMTIgYnl0ZXMKKwlic3IubAkJX2ltZW1fcmVhZAkJIyByZWFkIHBhY2tlZCBvcGVyYW5kCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLncJCWllYV9pYWNjCQkjIHllcworCisjIFRoZSBwYWNrZWQgb3BlcmFuZCBpcyBhbiBJTkYgb3IgYSBOQU4gaWYgdGhlIGV4cG9uZW50IGZpZWxkIGlzIGFsbCBvbmVzLgorCWJmZXh0dQkJRlBfU1JDKCVhNil7JjE6JjE1fSwlZDAJIyBnZXQgZXhwCisJY21waS53CQklZDAsJjB4N2ZmZgkJIyBJTkYgb3IgTkFOPworCWJlcS5iCQlpZWFfb3Bfc2V0c3JjCQkjIG9wZXJhbmQgaXMgYW4gSU5GIG9yIE5BTgorCisjIFRoZSBwYWNrZWQgb3BlcmFuZCBpcyBhIHplcm8gaWYgdGhlIG1hbnRpc3NhIGlzIGFsbCB6ZXJvLCBlbHNlIGl0J3MKKyMgYSBub3JtYWwgcGFja2VkIG9wLgorCW1vdi5iCQkzK0ZQX1NSQyglYTYpLCVkMAkjIGdldCBieXRlIDQKKwlhbmRpLmIJCSYweDBmLCVkMAkJIyBjbGVhciBhbGwgYnV0IGxhc3QgbnliYmxlCisJYm5lLmIJCWllYV9vcF9ncF9ub3Rfc3BlYwkjIG5vdCBhIHplcm8KKwl0c3QubAkJRlBfU1JDX0hJKCVhNikJCSMgaXMgbHcgMiB6ZXJvPworCWJuZS5iCQlpZWFfb3BfZ3Bfbm90X3NwZWMJIyBub3QgYSB6ZXJvCisJdHN0LmwJCUZQX1NSQ19MTyglYTYpCQkjIGlzIGx3IDMgemVybz8KKwliZXEuYgkJaWVhX29wX3NldHNyYwkJIyBvcGVyYW5kIGlzIGEgWkVSTworaWVhX29wX2dwX25vdF9zcGVjOgorCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBwYWNrZWQgb3AKKwlic3IubAkJZGVjYmluCQkJIyBjb252ZXJ0IHRvIGV4dGVuZGVkCisJZm1vdm0ueAkJJjB4ODAsRlBfU1JDKCVhNikJIyBtYWtlIHRoaXMgdGhlIHNyY29wCisKK2llYV9vcF9zZXRzcmM6CisJYWRkaS5sCQkmMHhjLEVYQ19FWFRXUFRSKCVhNikJIyB1cGRhdGUgZXh0ZW5zaW9uIHdvcmQgcG9pbnRlcgorCisjIEZQX1NSQyBub3cgaG9sZHMgdGhlIHNyYyBvcGVyYW5kLgorCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKKwlic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCisJbW92LmIJCSVkMCxTVEFHKCVhNikJCSMgY291bGQgYmUgQU5ZVEhJTkchISEKKwljbXBpLmIJCSVkMCwmVU5OT1JNCQkjIGlzIG9wZXJhbmQgYW4gVU5OT1JNPworCWJuZS5iCQlpZWFfb3BfZ2V0ZHN0CQkjIG5vCisJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBjb252ZXJ0IHRvIE5PUk0vREVOT1JNL1pFUk8KKwltb3YuYgkJJWQwLFNUQUcoJWE2KQkJIyBzZXQgbmV3IG9wdHlwZSB0YWcKK2llYV9vcF9nZXRkc3Q6CisJY2xyLmIJCVNUT1JFX0ZMRyglYTYpCQkjIGNsZWFyICJzdG9yZSByZXN1bHQiIGJvb2xlYW4KKworCWJ0c3QJCSYweDUsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcGVyYXRpb24gbW9uYWRpYyBvciBkeWFkaWM/CisJYmVxLmIJCWllYV9vcF9leHRyYWN0CQkjIG1vbmFkaWMKKwlidHN0CQkmMHg0LDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3BlcmF0aW9uIGZzaW5jb3MsZnRzdCxmY21wPworCWJuZS5iCQlpZWFfb3Bfc3BlYwkJIyB5ZXMKKworaWVhX29wX2xvYWRkc3Q6CisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMCAjIGZldGNoIGRzdCByZWdubworCWJzci5sCQlsb2FkX2ZwbjIJCSMgbG9hZCBkc3Qgb3BlcmFuZAorCisJbGVhCQlGUF9EU1QoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIGRzdCBvcAorCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLERUQUcoJWE2KQkJIyBjb3VsZCBiZSBBTllUSElORyEhIQorCWNtcGkuYgkJJWQwLCZVTk5PUk0JCSMgaXMgb3BlcmFuZCBhbiBVTk5PUk0/CisJYm5lLmIJCWllYV9vcF9leHRyYWN0CQkjIG5vCisJYnNyLmwJCXVubm9ybV9maXgJCSMgeWVzOyBjb252ZXJ0IHRvIE5PUk0vREVOT1JNL1pFUk8KKwltb3YuYgkJJWQwLERUQUcoJWE2KQkJIyBzZXQgbmV3IG9wdHlwZSB0YWcKKwlicmEuYgkJaWVhX29wX2V4dHJhY3QKKworIyB0aGUgb3BlcmF0aW9uIGlzIGZzaW5jb3MsIGZ0c3QsIG9yIGZjbXAuIG9ubHkgZmNtcCBpcyBkeWFkaWMKK2llYV9vcF9zcGVjOgorCWJ0c3QJCSYweDMsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcGVyYXRpb24gZnNpbmNvcz8KKwliZXEuYgkJaWVhX29wX2V4dHJhY3QJCSMgeWVzCisjIG5vdywgd2UncmUgbGVmdCB3aXRoIGZ0c3QgYW5kIGZjbXAuIHNvLCBmaXJzdCBsZXQncyB0YWcgdGhlbSBzbyB0aGF0IHRoZXkgZG9uJ3QKKyMgc3RvcmUgYSByZXN1bHQuIHRoZW4sIG9ubHkgZmNtcCB3aWxsIGJyYW5jaCBiYWNrIGFuZCBwaWNrIHVwIGEgZHN0IG9wZXJhbmQuCisJc3QJCVNUT1JFX0ZMRyglYTYpCQkjIGRvbid0IHN0b3JlIGEgZmluYWwgcmVzdWx0CisJYnRzdAkJJjB4MSwxK0VYQ19DTURSRUcoJWE2KQkjIGlzIG9wZXJhdGlvbiBmY21wPworCWJlcS5iCQlpZWFfb3BfbG9hZGRzdAkJIyB5ZXMKKworaWVhX29wX2V4dHJhY3Q6CisJY2xyLmwJCSVkMAorCW1vdi5iCQlGUENSX01PREUoJWE2KSwlZDAJIyBwYXNzOiBybmQgbW9kZSxwcmVjCisKKwltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQxCisJYW5kaS53CQkmMHgwMDdmLCVkMQkJIyBleHRyYWN0IGV4dGVuc2lvbgorCisJZm1vdi5sCQkmMHgwLCVmcGNyCisJZm1vdi5sCQkmMHgwLCVmcHNyCisKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAorCWxlYQkJRlBfRFNUKCVhNiksJWExCisKKwltb3YubAkJKHRibF91bnN1cHAubCwlcGMsJWQxLncqNCksJWQxICMgZmV0Y2ggcm91dGluZSBhZGRyCisJanNyCQkodGJsX3Vuc3VwcC5sLCVwYywlZDEubCoxKQorCisjCisjIEV4Y2VwdGlvbnMgaW4gb3JkZXIgb2YgcHJlY2VkZW5jZToKKyMJQlNVTgk6IG5vbmUKKyMJU05BTgk6IGFsbCBvcGVyYXRpb25zCisjCU9QRVJSCTogYWxsIHJlZy1yZWcgb3IgbWVtLXJlZyBvcGVyYXRpb25zIHRoYXQgY2FuIG5vcm1hbGx5IG9wZXJyCisjCU9WRkwJOiBzYW1lIGFzIE9QRVJSCisjCVVORkwJOiBzYW1lIGFzIE9QRVJSCisjCURaCTogc2FtZSBhcyBPUEVSUgorIwlJTkVYMgk6IHNhbWUgYXMgT1BFUlIKKyMJSU5FWDEJOiBhbGwgcGFja2VkIGltbWVkaWF0ZSBvcGVyYXRpb25zCisjCisKKyMgd2UgZGV0ZXJtaW5lIHRoZSBoaWdoZXN0IHByaW9yaXR5IGV4Y2VwdGlvbihpZiBhbnkpIHNldCBieSB0aGUKKyMgZW11bGF0aW9uIHJvdXRpbmUgdGhhdCBoYXMgYWxzbyBiZWVuIGVuYWJsZWQgYnkgdGhlIHVzZXIuCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQwCSMgZmV0Y2ggZXhjZXB0aW9ucyBlbmFibGVkCisJYm5lLmIJCWllYV9vcF9lbmEJCSMgc29tZSBhcmUgZW5hYmxlZAorCisjIG5vdywgd2Ugc2F2ZSB0aGUgcmVzdWx0LCB1bmxlc3MsIG9mIGNvdXJzZSwgdGhlIG9wZXJhdGlvbiB3YXMgZnRzdCBvciBmY21wLgorIyB0aGVzZSBkb24ndCBzYXZlIHJlc3VsdHMuCitpZWFfb3Bfc2F2ZToKKwl0c3QuYgkJU1RPUkVfRkxHKCVhNikJCSMgZG9lcyB0aGlzIG9wIHN0b3JlIGEgcmVzdWx0PworCWJuZS5iCQlpZWFfb3BfZXhpdDEJCSMgZXhpdCB3aXRoIG5vIGZyZXN0b3JlCisKK2llYV9vcF9zdG9yZToKKwliZmV4dHUJCUVYQ19DTURSRUcoJWE2KXsmNjomM30sJWQwICMgZmV0Y2ggZHN0IHJlZ25vCisJYnNyLmwJCXN0b3JlX2ZwcmVnCQkjIHN0b3JlIHRoZSByZXN1bHQKKworaWVhX29wX2V4aXQxOgorCW1vdi5sCQlFWENfUEMoJWE2KSxVU0VSX0ZQSUFSKCVhNikgIyBzZXQgRlBJQVIgdG8gIkN1cnJlbnQgUEMiCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksRVhDX1BDKCVhNikgIyBzZXQgIk5leHQgUEMiIGluIGV4YyBmcmFtZQorCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwl1bmxrCQklYTYJCQkjIHVucmF2ZWwgdGhlIGZyYW1lCisKKwlidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPworCWJuZS53CQlpZWFfb3BfdHJhY2UJCSMgeWVzCisKKwlicmEubAkJX2Zwc3BfZG9uZQkJIyBleGl0IHRvIG9zCisKK2llYV9vcF9lbmE6CisJYW5kLmIJCUZQU1JfRVhDRVBUKCVhNiksJWQwCSMga2VlcCBvbmx5IG9uZXMgZW5hYmxlIGFuZCBzZXQKKwliZmZmbwkJJWQweyYyNDomOH0sJWQwCQkjIGZpbmQgaGlnaGVzdCBwcmlvcml0eSBleGNlcHRpb24KKwlibmUuYgkJaWVhX29wX2V4YwkJIyBhdCBsZWFzdCBvbmUgd2FzIHNldAorCisjIG5vIGV4Y2VwdGlvbiBvY2N1cnJlZC4gbm93LCBkaWQgYSBkaXNhYmxlZCwgZXhhY3Qgb3ZlcmZsb3cgb2NjdXIgd2l0aCBpbmV4YWN0CisjIGVuYWJsZWQ/IGlmIHNvLCB0aGVuIHdlIGhhdmUgdG8gc3R1ZmYgYW4gb3ZlcmZsb3cgZnJhbWUgaW50byB0aGUgRlBVLgorCWJ0c3QJCSZvdmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgZGlkIG92ZXJmbG93IG9jY3VyPworCWJlcS5iCQlpZWFfb3Bfc2F2ZQorCitpZWFfb3Bfb3ZmbDoKKwlidHN0CQkmaW5leDJfYml0LEZQQ1JfRU5BQkxFKCVhNikgIyBpcyBpbmV4YWN0IGVuYWJsZWQ/CisJYmVxLmIJCWllYV9vcF9zdG9yZQkJIyBubworCWJyYS5iCQlpZWFfb3BfZXhjX292ZmwJCSMgeWVzCisKKyMgYW4gZW5hYmxlZCBleGNlcHRpb24gb2NjdXJyZWQuIHdlIGhhdmUgdG8gaW5zZXJ0IHRoZSBleGNlcHRpb24gdHlwZSBiYWNrIGludG8KKyMgdGhlIG1hY2hpbmUuCitpZWFfb3BfZXhjOgorCXN1YmkubAkJJjI0LCVkMAkJCSMgZml4IG9mZnNldCB0byBiZSAwLTgKKwljbXBpLmIJCSVkMCwmMHg2CQkjIGlzIGV4Y2VwdGlvbiBJTkVYPworCWJuZS5iCQlpZWFfb3BfZXhjX2ZvcmNlCSMgbm8KKworIyB0aGUgZW5hYmxlZCBleGNlcHRpb24gd2FzIGluZXhhY3QuIHNvLCBpZiBpdCBvY2N1cnMgd2l0aCBhbiBvdmVyZmxvdworIyBvciB1bmRlcmZsb3cgdGhhdCB3YXMgZGlzYWJsZWQsIHRoZW4gd2UgaGF2ZSB0byBmb3JjZSBhbiBvdmVyZmxvdyBvcgorIyB1bmRlcmZsb3cgZnJhbWUuCisJYnRzdAkJJm92ZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBkaWQgb3ZlcmZsb3cgb2NjdXI/CisJYm5lLmIJCWllYV9vcF9leGNfb3ZmbAkJIyB5ZXMKKwlidHN0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGRpZCB1bmRlcmZsb3cgb2NjdXI/CisJYm5lLmIJCWllYV9vcF9leGNfdW5mbAkJIyB5ZXMKKworaWVhX29wX2V4Y19mb3JjZToKKwltb3YudwkJKHRibF9pZWFfZXhjZXB0LmIsJXBjLCVkMC53KjIpLDIrRlBfU1JDKCVhNikKKwlicmEuYgkJaWVhX29wX2V4aXQyCQkjIGV4aXQgd2l0aCBmcmVzdG9yZQorCit0YmxfaWVhX2V4Y2VwdDoKKwlzaG9ydAkJMHhlMDAyLCAweGUwMDYsIDB4ZTAwNCwgMHhlMDA1CisJc2hvcnQJCTB4ZTAwMywgMHhlMDAyLCAweGUwMDEsIDB4ZTAwMQorCitpZWFfb3BfZXhjX292Zmw6CisJbW92LncJCSYweGUwMDUsMitGUF9TUkMoJWE2KQorCWJyYS5iCQlpZWFfb3BfZXhpdDIKKworaWVhX29wX2V4Y191bmZsOgorCW1vdi53CQkmMHhlMDAzLDIrRlBfU1JDKCVhNikKKworaWVhX29wX2V4aXQyOgorCW1vdi5sCQlFWENfUEMoJWE2KSxVU0VSX0ZQSUFSKCVhNikgIyBzZXQgRlBJQVIgdG8gIkN1cnJlbnQgUEMiCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksRVhDX1BDKCVhNikgIyBzZXQgIk5leHQgUEMiIGluIGV4YyBmcmFtZQorCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQkJIyByZXN0b3JlIGV4Y2VwdGlvbmFsIHN0YXRlCisKKwl1bmxrCQklYTYJCQkjIHVucmF2ZWwgdGhlIGZyYW1lCisKKwlidHN0CQkmMHg3LCglc3ApCQkjIGlzIHRyYWNlIG9uPworCWJuZS5iCQlpZWFfb3BfdHJhY2UJCSMgeWVzCisKKwlicmEubAkJX2Zwc3BfZG9uZQkJIyBleGl0IHRvIG9zCisKKyMKKyMgVGhlIG9wY2xhc3MgdHdvIGluc3RydWN0aW9uIHRoYXQgdG9vayBhbiAiVW5pbXBsZW1lbnRlZCBFZmZlY3RpdmUgQWRkcmVzcyIKKyMgZXhjZXB0aW9uIHdhcyBiZWluZyB0cmFjZWQuIE1ha2UgdGhlICJjdXJyZW50IiBQQyB0aGUgRlBJQVIgYW5kIHB1dCBpdCBpbgorIyB0aGUgdHJhY2Ugc3RhY2sgZnJhbWUgdGhlbiBqdW1wIHRvIF9yZWFsX3RyYWNlKCkuCisjCisjCQkgVU5JTVAgRUEgRlJBTUUJCSAgIFRSQUNFIEZSQU1FCisjCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkJKiAweDAgKiAgMHgwZjAJKgkqICAgIEN1cnJlbnQJKgorIwkJKioqKioqKioqKioqKioqKioJKiAgICAgIFBDCSoKKyMJCSogICAgQ3VycmVudAkqCSoqKioqKioqKioqKioqKioqCisjCQkqICAgICAgUEMJKgkqIDB4MiAqICAweDAyNAkqCisjCQkqKioqKioqKioqKioqKioqKgkqKioqKioqKioqKioqKioqKgorIwkJKiAgICAgIFNSCSoJKiAgICAgTmV4dAkqCisjCQkqKioqKioqKioqKioqKioqKgkqICAgICAgUEMJKgorIwkJCQkJKioqKioqKioqKioqKioqKioKKyMJCQkJCSogICAgICBTUgkqCisjCQkJCQkqKioqKioqKioqKioqKioqKgoraWVhX29wX3RyYWNlOgorCW1vdi5sCQkoJXNwKSwtKCVzcCkJCSMgc2hpZnQgc3RhY2sgZnJhbWUgImRvd24iCisJbW92LncJCTB4OCglc3ApLDB4NCglc3ApCisJbW92LncJCSYweDIwMjQsMHg2KCVzcCkJIyBzdGsgZm10ID0gMHgyOyB2b2ZmID0gMHgwMjQKKwlmbW92LmwJCSVmcGlhciwweDgoJXNwKQkJIyAiQ3VycmVudCBQQyIgaXMgaW4gRlBJQVIKKworCWJyYS5sCQlfcmVhbF90cmFjZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitpZWFfZm1vdm06CisJYnRzdAkJJjE0LCVkMAkJCSMgY3RybCBvciBkYXRhIHJlZworCWJlcS53CQlpZWFfZm1vdm1fY3RybAorCitpZWFfZm1vdm1fZGF0YToKKworCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikJIyB1c2VyIG9yIHN1cGVydmlzb3IgbW9kZQorCWJuZS5iCQlpZWFfZm1vdm1fZGF0YV9zCisKK2llYV9mbW92bV9kYXRhX3U6CisJbW92LmwJCSV1c3AsJWEwCisJbW92LmwJCSVhMCxFWENfQTcoJWE2KQkJIyBzdG9yZSBjdXJyZW50IGE3CisJYnNyLmwJCWZtb3ZtX2R5bmFtaWMJCSMgZG8gZHluYW1pYyBmbW92bQorCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAJCSMgbG9hZCBwb3NzaWJseSBuZXcgYTcKKwltb3YubAkJJWEwLCV1c3AJCSMgdXBkYXRlIHVzcAorCWJyYS53CQlpZWFfZm1vdm1fZXhpdAorCitpZWFfZm1vdm1fZGF0YV9zOgorCWNsci5iCQlTUENPTkRfRkxHKCVhNikKKwlsZWEJCTB4MitFWENfVk9GRiglYTYpLCVhMAorCW1vdi5sCQklYTAsRVhDX0E3KCVhNikKKwlic3IubAkJZm1vdm1fZHluYW1pYwkJIyBkbyBkeW5hbWljIGZtb3ZtCisKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcKKwliZXEudwkJaWVhX2Ztb3ZtX2RhdGFfcHJlZGVjCisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1pYTdfZmxnCisJYm5lLncJCWllYV9mbW92bV9leGl0CisKKyMgcmlnaHQgbm93LCBkMCA9IHRoZSBzaXplLgorIyB0aGUgZGF0YSBoYXMgYmVlbiBmZXRjaGVkIGZyb20gdGhlIHN1cGVydmlzb3Igc3RhY2ssIGJ1dCB3ZSBoYXZlIG5vdAorIyBpbmNyZW1lbnRlZCB0aGUgc3RhY2sgcG9pbnRlciBieSB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyIG9mIGJ5dGVzLgorIyBkbyBpdCBoZXJlLgoraWVhX2Ztb3ZtX2RhdGFfcG9zdGluYzoKKwlidHN0CQkmMHg3LEVYQ19TUiglYTYpCisJYm5lLmIJCWllYV9mbW92bV9kYXRhX3BpX3RyYWNlCisKKwltb3YudwkJRVhDX1NSKCVhNiksKEVYQ19TUiwlYTYsJWQwKQorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLChFWENfUEMsJWE2LCVkMCkKKwltb3YudwkJJjB4MDBmMCwoRVhDX1ZPRkYsJWE2LCVkMCkKKworCWxlYQkJKEVYQ19TUiwlYTYsJWQwKSwlYTAKKwltb3YubAkJJWEwLEVYQ19TUiglYTYpCisKKwlmbW92bS54CQlFWENfRlAwKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgorCW1vdi5sCQkoJXNwKSssJXNwCisJYnJhLmwJCV9mcHNwX2RvbmUKKworaWVhX2Ztb3ZtX2RhdGFfcGlfdHJhY2U6CisJbW92LncJCUVYQ19TUiglYTYpLChFWENfU1ItMHg0LCVhNiwlZDApCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksKEVYQ19QQy0weDQsJWE2LCVkMCkKKwltb3YudwkJJjB4MjAyNCwoRVhDX1ZPRkYtMHg0LCVhNiwlZDApCisJbW92LmwJCUVYQ19QQyglYTYpLChFWENfVk9GRisweDItMHg0LCVhNiwlZDApCisKKwlsZWEJCShFWENfU1ItMHg0LCVhNiwlZDApLCVhMAorCW1vdi5sCQklYTAsRVhDX1NSKCVhNikKKworCWZtb3ZtLngJCUVYQ19GUDAoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CisJbW92LmwJCSglc3ApKywlc3AKKwlicmEubAkJX3JlYWxfdHJhY2UKKworIyByaWdodCBub3csIGQxID0gc2l6ZSBhbmQgZDAgPSB0aGUgc3RyZy4KK2llYV9mbW92bV9kYXRhX3ByZWRlYzoKKwltb3YuYgkJJWQxLEVYQ19WT0ZGKCVhNikJIyBzdG9yZSBzdHJnCisJbW92LmIJCSVkMCwweDErRVhDX1ZPRkYoJWE2KQkjIHN0b3JlIHNpemUKKworCWZtb3ZtLngJCUVYQ19GUDAoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJbW92LmwJCSglYTYpLC0oJXNwKQkJIyBtYWtlIGEgY29weSBvZiBhNgorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgZDAKKwltb3YubAkJJWQxLC0oJXNwKQkJIyBzYXZlIGQxCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksLSglc3ApCSMgbWFrZSBhIGNvcHkgb2YgTmV4dCBQQworCisJY2xyLmwJCSVkMAorCW1vdi5iCQkweDErRVhDX1ZPRkYoJWE2KSwlZDAJIyBmZXRjaCBzaXplCisJbmVnLmwJCSVkMAkJCSMgZ2V0IG5lZ2F0aXZlIG9mIHNpemUKKworCWJ0c3QJCSYweDcsRVhDX1NSKCVhNikJIyBpcyB0cmFjZSBlbmFibGVkPworCWJlcS5iCQlpZWFfZm1vdm1fZGF0YV9wMgorCisJbW92LncJCUVYQ19TUiglYTYpLChFWENfU1ItMHg0LCVhNiwlZDApCisJbW92LmwJCUVYQ19QQyglYTYpLChFWENfVk9GRi0weDIsJWE2LCVkMCkKKwltb3YubAkJKCVzcCkrLChFWENfUEMtMHg0LCVhNiwlZDApCisJbW92LncJCSYweDIwMjQsKEVYQ19WT0ZGLTB4NCwlYTYsJWQwKQorCisJcGVhCQkoJWE2LCVkMCkJCSMgY3JlYXRlIGZpbmFsIHNwCisJYnJhLmIJCWllYV9mbW92bV9kYXRhX3AzCisKK2llYV9mbW92bV9kYXRhX3AyOgorCW1vdi53CQlFWENfU1IoJWE2KSwoRVhDX1NSLCVhNiwlZDApCisJbW92LmwJCSglc3ApKywoRVhDX1BDLCVhNiwlZDApCisJbW92LncJCSYweDAwZjAsKEVYQ19WT0ZGLCVhNiwlZDApCisKKwlwZWEJCSgweDQsJWE2LCVkMCkJCSMgY3JlYXRlIGZpbmFsIHNwCisKK2llYV9mbW92bV9kYXRhX3AzOgorCWNsci5sCQklZDEKKwltb3YuYgkJRVhDX1ZPRkYoJWE2KSwlZDEJIyBmZXRjaCBzdHJnCisKKwl0c3QuYgkJJWQxCisJYnBsLmIJCWZtXzEKKwlmbW92bS54CQkmMHg4MCwoMHg0KzB4OCwlYTYsJWQwKQorCWFkZGkubAkJJjB4YywlZDAKK2ZtXzE6CisJbHNsLmIJCSYweDEsJWQxCisJYnBsLmIJCWZtXzIKKwlmbW92bS54CQkmMHg0MCwoMHg0KzB4OCwlYTYsJWQwKQorCWFkZGkubAkJJjB4YywlZDAKK2ZtXzI6CisJbHNsLmIJCSYweDEsJWQxCisJYnBsLmIJCWZtXzMKKwlmbW92bS54CQkmMHgyMCwoMHg0KzB4OCwlYTYsJWQwKQorCWFkZGkubAkJJjB4YywlZDAKK2ZtXzM6CisJbHNsLmIJCSYweDEsJWQxCisJYnBsLmIJCWZtXzQKKwlmbW92bS54CQkmMHgxMCwoMHg0KzB4OCwlYTYsJWQwKQorCWFkZGkubAkJJjB4YywlZDAKK2ZtXzQ6CisJbHNsLmIJCSYweDEsJWQxCisJYnBsLmIJCWZtXzUKKwlmbW92bS54CQkmMHgwOCwoMHg0KzB4OCwlYTYsJWQwKQorCWFkZGkubAkJJjB4YywlZDAKK2ZtXzU6CisJbHNsLmIJCSYweDEsJWQxCisJYnBsLmIJCWZtXzYKKwlmbW92bS54CQkmMHgwNCwoMHg0KzB4OCwlYTYsJWQwKQorCWFkZGkubAkJJjB4YywlZDAKK2ZtXzY6CisJbHNsLmIJCSYweDEsJWQxCisJYnBsLmIJCWZtXzcKKwlmbW92bS54CQkmMHgwMiwoMHg0KzB4OCwlYTYsJWQwKQorCWFkZGkubAkJJjB4YywlZDAKK2ZtXzc6CisJbHNsLmIJCSYweDEsJWQxCisJYnBsLmIJCWZtX2VuZAorCWZtb3ZtLngJCSYweDAxLCgweDQrMHg4LCVhNiwlZDApCitmbV9lbmQ6CisJbW92LmwJCTB4NCglc3ApLCVkMQorCW1vdi5sCQkweDgoJXNwKSwlZDAKKwltb3YubAkJMHhjKCVzcCksJWE2CisJbW92LmwJCSglc3ApKywlc3AKKworCWJ0c3QJCSYweDcsKCVzcCkJCSMgaXMgdHJhY2UgZW5hYmxlZD8KKwliZXEubAkJX2Zwc3BfZG9uZQorCWJyYS5sCQlfcmVhbF90cmFjZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitpZWFfZm1vdm1fY3RybDoKKworCWJzci5sCQlmbW92bV9jdHJsCQkjIGxvYWQgY3RybCByZWdzCisKK2llYV9mbW92bV9leGl0OgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJYnRzdAkJJjB4NyxFWENfU1IoJWE2KQkjIGlzIHRyYWNlIG9uPworCWJuZS5iCQlpZWFfZm1vdm1fdHJhY2UJCSMgeWVzCisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSxFWENfUEMoJWE2KSAjIHNldCBOZXh0IFBDCisKKwl1bmxrCQklYTYJCQkjIHVucmF2ZWwgdGhlIGZyYW1lCisKKwlicmEubAkJX2Zwc3BfZG9uZQkJIyBleGl0IHRvIG9zCisKKyMKKyMgVGhlIGNvbnRyb2wgcmVnIGluc3RydWN0aW9uIHRoYXQgdG9vayBhbiAiVW5pbXBsZW1lbnRlZCBFZmZlY3RpdmUgQWRkcmVzcyIKKyMgZXhjZXB0aW9uIHdhcyBiZWluZyB0cmFjZWQuIFRoZSAiQ3VycmVudCBQQyIgZm9yIHRoZSB0cmFjZSBmcmFtZSBpcyB0aGUKKyMgUEMgc3RhY2tlZCBmb3IgVW5pbXAgRUEuIFRoZSAiTmV4dCBQQyIgaXMgaW4gRVhDX0VYVFdQVFIuCisjIEFmdGVyIGZpeGluZyB0aGUgc3RhY2sgZnJhbWUsIGp1bXAgdG8gX3JlYWxfdHJhY2UoKS4KKyMKKyMJCSBVTklNUCBFQSBGUkFNRQkJICAgVFJBQ0UgRlJBTUUKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCQkqIDB4MCAqICAweDBmMAkqCSogICAgQ3VycmVudAkqCisjCQkqKioqKioqKioqKioqKioqKgkqICAgICAgUEMJKgorIwkJKiAgICBDdXJyZW50CSoJKioqKioqKioqKioqKioqKioKKyMJCSogICAgICBQQwkqCSogMHgyICogIDB4MDI0CSoKKyMJCSoqKioqKioqKioqKioqKioqCSoqKioqKioqKioqKioqKioqCisjCQkqICAgICAgU1IJKgkqICAgICBOZXh0CSoKKyMJCSoqKioqKioqKioqKioqKioqCSogICAgICBQQwkqCisjCQkJCQkqKioqKioqKioqKioqKioqKgorIwkJCQkJKiAgICAgIFNSCSoKKyMJCQkJCSoqKioqKioqKioqKioqKioqCisjIHRoaXMgYWluJ3QgYSBwcmV0dHkgc29sdXRpb24sIGJ1dCBpdCB3b3JrczoKKyMgLXJlc3RvcmUgYTYgKG5vdCB3aXRoIHVubGspCisjIC1zaGlmdCBzdGFjayBmcmFtZSBkb3duIG92ZXIgd2hlcmUgb2xkIGE2IHVzZWQgdG8gYmUKKyMgLWFkZCBMT0NBTF9TSVpFIHRvIHN0YWNrIHBvaW50ZXIKK2llYV9mbW92bV90cmFjZToKKwltb3YubAkJKCVhNiksJWE2CQkjIHJlc3RvcmUgZnJhbWUgcG9pbnRlcgorCW1vdi53CQlFWENfU1IrTE9DQUxfU0laRSglc3ApLDB4MCtMT0NBTF9TSVpFKCVzcCkKKwltb3YubAkJRVhDX1BDK0xPQ0FMX1NJWkUoJXNwKSwweDgrTE9DQUxfU0laRSglc3ApCisJbW92LmwJCUVYQ19FWFRXUFRSK0xPQ0FMX1NJWkUoJXNwKSwweDIrTE9DQUxfU0laRSglc3ApCisJbW92LncJCSYweDIwMjQsMHg2K0xPQ0FMX1NJWkUoJXNwKSAjIHN0ayBmbXQgPSAweDI7IHZvZmYgPSAweDAyNAorCWFkZC5sCQkmTE9DQUxfU0laRSwlc3AJCSMgY2xlYXIgc3RhY2sgZnJhbWUKKworCWJyYS5sCQlfcmVhbF90cmFjZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoZSBGUFUgaXMgZGlzYWJsZWQgYW5kIHNvIHdlIHNob3VsZCByZWFsbHkgaGF2ZSB0YWtlbiB0aGUgIkxpbmUKKyMgRiBFbXVsYXRvciIgZXhjZXB0aW9uLiBTbywgaGVyZSB3ZSBjcmVhdGUgYW4gOC13b3JkIHN0YWNrIGZyYW1lCisjIGZyb20gb3VyIDQtd29yZCBzdGFjayBmcmFtZS4gVGhpcyBtZWFucyB3ZSBtdXN0IGNhbGN1bGF0ZSB0aGUgbGVuZ3RoCisjIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiB0byBnZXQgdGhlICJuZXh0IFBDIi4gVGhpcyBpcyB0cml2aWFsIGZvcgorIyBpbW1lZGlhdGUgb3BlcmFuZHMgYnV0IHJlcXVpcmVzIHNvbWUgZXh0cmEgd29yayBmb3IgZm1vdm0gZHluYW1pYworIyB3aGljaCBjYW4gdXNlIG1vc3QgYWRkcmVzc2luZyBtb2Rlcy4KK2llYV9kaXNhYmxlZDoKKwltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIGQwCisKKwlsaW5rCQklYTYsJi1MT0NBTF9TSVpFCSMgaW5pdCBzdGFjayBmcmFtZQorCisJbW92bS5sCQkmMHgwMzAzLEVYQ19EUkVHUyglYTYpCSMgc2F2ZSBkMC1kMS9hMC1hMQorCisjIFBDIG9mIGluc3RydWN0aW9uIHRoYXQgdG9vayB0aGUgZXhjZXB0aW9uIGlzIHRoZSBQQyBpbiB0aGUgZnJhbWUKKwltb3YubAkJRVhDX1BDKCVhNiksRVhDX0VYVFdQVFIoJWE2KQorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCB0aGUgaW5zdHJ1Y3Rpb24gd29yZHMKKwltb3YubAkJJWQwLEVYQ19PUFdPUkQoJWE2KQkjIHN0b3JlIE9QV09SRCBhbmQgRVhUV09SRAorCisJdHN0LncJCSVkMAkJCSMgaXMgaW5zdHIgZm1vdm0/CisJYm1pLmIJCWllYV9kaXNfZm1vdm0JCSMgeWVzCisjIGluc3RydWN0aW9uIGlzIHVzaW5nIGFuIGV4dGVuZGVkIHByZWNpc2lvbiBpbW1lZGlhdGUgb3BlcmFuZC4gdGhlcmVmb3JlLAorIyB0aGUgdG90YWwgaW5zdHJ1Y3Rpb24gbGVuZ3RoIGlzIDE2IGJ5dGVzLgoraWVhX2Rpc19pbW1lZDoKKwltb3YubAkJJjB4MTAsJWQwCQkjIDE2IGJ5dGVzIG9mIGluc3RydWN0aW9uCisJYnJhLmIJCWllYV9kaXNfY29udAoraWVhX2Rpc19mbW92bToKKwlidHN0CQkmMHhlLCVkMAkJIyBpcyBpbnN0ciBmbW92bSBjdHJsCisJYm5lLmIJCWllYV9kaXNfZm1vdm1fZGF0YQkjIG5vCisjIHRoZSBpbnN0cnVjdGlvbiBpcyBhIGZtb3ZtLmwgd2l0aCAyIG9yIDMgcmVnaXN0ZXJzLgorCWJmZXh0dQkJJWQweyYxOTomM30sJWQxCisJbW92LmwJCSYweGMsJWQwCisJY21waS5iCQklZDEsJjB4NwkJIyBtb3ZlIGFsbCByZWdzPworCWJuZS5iCQlpZWFfZGlzX2NvbnQKKwlhZGRxLmwJCSYweDQsJWQwCisJYnJhLmIJCWllYV9kaXNfY29udAorIyB0aGUgaW5zdHJ1Y3Rpb24gaXMgYW4gZm1vdm0ueCBkeW5hbWljIHdoaWNoIGNhbiB1c2UgbWFueSBhZGRyZXNzaW5nCisjIG1vZGVzIGFuZCB0aHVzIGNhbiBoYXZlIHNldmVyYWwgZGlmZmVyZW50IHRvdGFsIGluc3RydWN0aW9uIGxlbmd0aHMuCisjIGNhbGwgZm1vdm1fY2FsY19lYSB3aGljaCB3aWxsIGdvIHRocm91Z2ggdGhlIGVhIGNhbGMgcHJvY2VzcyBhbmQsCisjIGFzIGEgYnktcHJvZHVjdCwgd2lsbCB0ZWxsIHVzIGhvdyBsb25nIHRoZSBpbnN0cnVjdGlvbiBpcy4KK2llYV9kaXNfZm1vdm1fZGF0YToKKwljbHIubAkJJWQwCisJYnNyLmwJCWZtb3ZtX2NhbGNfZWEKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlZDAKKwlzdWIubAkJRVhDX1BDKCVhNiksJWQwCitpZWFfZGlzX2NvbnQ6CisJbW92LncJCSVkMCxFWENfVk9GRiglYTYpCSMgc3RvcmUgc3RhY2sgc2hpZnQgdmFsdWUKKworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgorCisjIGhlcmUsIHdlIGFjdHVhbGx5IGNyZWF0ZSB0aGUgOC13b3JkIGZyYW1lIGZyb20gdGhlIDQtd29yZCBmcmFtZSwKKyMgd2l0aCB0aGUgIm5leHQgUEMiIGFzIGFkZGl0aW9uYWwgaW5mby4KKyMgdGhlIDxlYT4gZmllbGQgaXMgbGV0IGFzIHVuZGVmaW5lZC4KKwlzdWJxLmwJCSYweDgsJXNwCQkjIG1ha2Ugcm9vbSBmb3IgbmV3IHN0YWNrCisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBkMAorCW1vdi53CQkweGMoJXNwKSwweDQoJXNwKQkjIG1vdmUgU1IKKwltb3YubAkJMHhlKCVzcCksMHg2KCVzcCkJIyBtb3ZlIEN1cnJlbnQgUEMKKwljbHIubAkJJWQwCisJbW92LncJCTB4MTIoJXNwKSwlZDAKKwltb3YubAkJMHg2KCVzcCksMHgxMCglc3ApCSMgbW92ZSBDdXJyZW50IFBDCisJYWRkLmwJCSVkMCwweDYoJXNwKQkJIyBtYWtlIE5leHQgUEMKKwltb3YudwkJJjB4NDAyYywweGEoJXNwKQkjIGluc2VydCBvZmZzZXQsZnJhbWUgZm9ybWF0CisJbW92LmwJCSglc3ApKywlZDAJCSMgcmVzdG9yZSBkMAorCisJYnJhLmwJCV9yZWFsX2ZwdV9kaXNhYmxlZAorCisjIyMjIyMjIyMjCisKK2llYV9pYWNjOgorCW1vdmMJCSVwY3IsJWQwCisJYnRzdAkJJjB4MSwlZDAKKwlibmUuYgkJaWVhX2lhY2NfY29udAorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxIG9uIHN0YWNrCitpZWFfaWFjY19jb250OgorCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCXVubGsJCSVhNgorCisJc3VicS53CQkmMHg4LCVzcAkJIyBtYWtlIHN0YWNrIGZyYW1lIGJpZ2dlcgorCW1vdi5sCQkweDgoJXNwKSwoJXNwKQkJIyBzdG9yZSBTUixoaShQQykKKwltb3YudwkJMHhjKCVzcCksMHg0KCVzcCkJIyBzdG9yZSBsbyhQQykKKwltb3YudwkJJjB4NDAwOCwweDYoJXNwKQkjIHN0b3JlIHZvZmYKKwltb3YubAkJMHgyKCVzcCksMHg4KCVzcCkJIyBzdG9yZSBlYQorCW1vdi5sCQkmMHgwOTQyODAwMSwweGMoJXNwKQkjIHN0b3JlIGZzbHcKKworaWVhX2FjY19kb25lOgorCWJ0c3QJCSYweDUsKCVzcCkJCSMgdXNlciBvciBzdXBlcnZpc29yIG1vZGU/CisJYmVxLmIJCWllYV9hY2NfZG9uZTIJCSMgdXNlcgorCWJzZXQJCSYweDIsMHhkKCVzcCkJCSMgc2V0IHN1cGVydmlzb3IgVE0gYml0CisKK2llYV9hY2NfZG9uZTI6CisJYnJhLmwJCV9yZWFsX2FjY2VzcworCitpZWFfZGFjYzoKKwlsZWEJCS1MT0NBTF9TSVpFKCVhNiksJXNwCisKKwltb3ZjCQklcGNyLCVkMQorCWJ0c3QJCSYweDEsJWQxCisJYm5lLmIJCWllYV9kYWNjX2NvbnQKKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEgb24gc3RhY2sKKwlmbW92bS5sCQlMT0NBTF9TSVpFK1VTRVJfRlBDUiglc3ApLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCitpZWFfZGFjY19jb250OgorCW1vdi5sCQkoJWE2KSwlYTYKKworCW1vdi5sCQkweDQrTE9DQUxfU0laRSglc3ApLC0weDgrMHg0K0xPQ0FMX1NJWkUoJXNwKQorCW1vdi53CQkweDgrTE9DQUxfU0laRSglc3ApLC0weDgrMHg4K0xPQ0FMX1NJWkUoJXNwKQorCW1vdi53CQkmMHg0MDA4LC0weDgrMHhhK0xPQ0FMX1NJWkUoJXNwKQorCW1vdi5sCQklYTAsLTB4OCsweGMrTE9DQUxfU0laRSglc3ApCisJbW92LncJCSVkMCwtMHg4KzB4MTArTE9DQUxfU0laRSglc3ApCisJbW92LncJCSYweDAwMDEsLTB4OCsweDEyK0xPQ0FMX1NJWkUoJXNwKQorCisJbW92bS5sCQlMT0NBTF9TSVpFK0VYQ19EUkVHUyglc3ApLCYweDAzMDMgIyByZXN0b3JlIGQwLWQxL2EwLWExCisJYWRkLncJCSZMT0NBTF9TSVpFLTB4NCwlc3AKKworCWJyYS5iCQlpZWFfYWNjX2RvbmUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfZnBzcF9vcGVycigpOiAwNjBGUFNQIGVudHJ5IHBvaW50IGZvciBGUCBPcGVyciBleGNlcHRpb24uCSMKKyMJCQkJCQkJCQkjCisjCVRoaXMgaGFuZGxlciBzaG91bGQgYmUgdGhlIGZpcnN0IGNvZGUgZXhlY3V0ZWQgdXBvbiB0YWtpbmcgdGhlCSMKKyMJRlAgT3BlcmFuZCBFcnJvciBleGNlcHRpb24gaW4gYW4gb3BlcmF0aW5nIHN5c3RlbS4JCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9pbWVtX3JlYWRfbG9uZygpIC0gcmVhZCBpbnN0cnVjdGlvbiBsb25nd29yZAkJCSMKKyMJZml4X3NrZXdlZF9vcHMoKSAtIGFkanVzdCBzcmMgb3BlcmFuZCBpbiBmc2F2ZSBmcmFtZQkJIworIwlfcmVhbF9vcGVycigpIC0gImNhbGxvdXQiIHRvIG9wZXJhdGluZyBzeXN0ZW0gb3BlcnIgaGFuZGxlcgkjCisjCV9kbWVtX3dyaXRlX3tieXRlLHdvcmQsbG9uZ30oKSAtIHN0b3JlIGRhdGEgdG8gbWVtIChvcGNsYXNzIDMpCSMKKyMJc3RvcmVfZHJlZ197Yix3LGx9KCkgLSBzdG9yZSBkYXRhIHRvIGRhdGEgcmVnZmlsZSAob3BjbGFzcyAzKQkjCisjCWZhY2Nfb3V0X3tiLHcsbH0oKSAtIHN0b3JlIHRvIG1lbW9yeSB0b29rIGFjY2VzcyBlcnJvciAob3BjbCAzKQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgdGhlIEZQIE9wZXJyIGV4Y2VwdGlvbiBmcmFtZQkjCisjCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBzb3VyY2Ugb3BlcmFuZAkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vIGFjY2VzcyBlcnJvcjoJCQkJCQkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBpcyB1bmNoYW5nZWQJCQkJCSMKKyMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIGFkanVzdGVkIHNyYyBvcCBmb3Igb3BjbGFzcyAwLDIJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSW4gYSBzeXN0ZW0gd2hlcmUgdGhlIEZQIE9wZXJyIGV4Y2VwdGlvbiBpcyBlbmFibGVkLCB0aGUgZ29hbAkjCisjIGlzIHRvIGdldCB0byB0aGUgaGFuZGxlciBzcGVjaWZpZWQgYXQgX3JlYWxfb3BlcnIoKS4gQnV0LCBvbiB0aGUgMDYwLAkjCisjIGZvciBvcGNsYXNzIHplcm8gYW5kIHR3byBpbnN0cnVjdGlvbiB0YWtpbmcgdGhpcyBleGNlcHRpb24sIHRoZQkjCisjIGlucHV0IG9wZXJhbmQgaW4gdGhlIGZzYXZlIGZyYW1lIG1heSBiZSBpbmNvcnJlY3QgZm9yIHNvbWUgY2FzZXMJIworIyBhbmQgbmVlZHMgdG8gYmUgY29ycmVjdGVkLiBUaGlzIGhhbmRsZXIgY2FsbHMgZml4X3NrZXdlZF9vcHMoKSB0bwkjCisjIGRvIGp1c3QgdGhpcyBhbmQgdGhlbiBleGl0cyB0aHJvdWdoIF9yZWFsX29wZXJyKCkuCQkJIworIwlGb3Igb3BjbGFzcyAzIGluc3RydWN0aW9ucywgdGhlIDA2MCBkb2Vzbid0IHN0b3JlIHRoZSBkZWZhdWx0CSMKKyMgb3BlcnIgcmVzdWx0IG91dCB0byBtZW1vcnkgb3IgZGF0YSByZWdpc3RlciBmaWxlIGFzIGl0IHNob3VsZC4JIworIyBUaGlzIGNvZGUgbXVzdCBlbXVsYXRlIHRoZSBtb3ZlIG91dCBiZWZvcmUgZmluYWxseSBleGl0aW5nIHRocm91Z2gJIworIyBfcmVhbF9pbmV4KCkuIFRoZSBtb3ZlIG91dCwgaWYgdG8gbWVtb3J5LCBpcyBwZXJmb3JtZWQgdXNpbmcJCSMKKyMgX21lbV93cml0ZSgpICJjYWxsb3V0IiByb3V0aW5lcyB0aGF0IG1heSByZXR1cm4gYSBmYWlsaW5nIHJlc3VsdC4JIworIyBJbiB0aGlzIHNwZWNpYWwgY2FzZSwgdGhlIGhhbmRsZXIgbXVzdCBleGl0IHRocm91Z2ggZmFjY19vdXQoKQkjCisjIHdoaWNoIGNyZWF0ZXMgYW4gYWNjZXNzIGVycm9yIHN0YWNrIGZyYW1lIGZyb20gdGhlIGN1cnJlbnQgb3BlcnIJIworIyBzdGFjayBmcmFtZS4JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCV9mcHNwX29wZXJyCitfZnBzcF9vcGVycjoKKworCWxpbmsudwkJJWE2LCYtTE9DQUxfU0laRQkjIGluaXQgc3RhY2sgZnJhbWUKKworCWZzYXZlCQlGUF9TUkMoJWE2KQkJIyBncmFiIHRoZSAiYnVzeSIgZnJhbWUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUFJFR1MoJWE2KQkjIHNhdmUgZnAwLWZwMSBvbiBzdGFjaworCisjIHRoZSBGUElBUiBob2xkcyB0aGUgImN1cnJlbnQgUEMiIG9mIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbgorCW1vdi5sCQlVU0VSX0ZQSUFSKCVhNiksRVhDX0VYVFdQVFIoJWE2KQorCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIHRoZSBpbnN0cnVjdGlvbiB3b3JkcworCW1vdi5sCQklZDAsRVhDX09QV09SRCglYTYpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJYnRzdAkJJjEzLCVkMAkJCSMgaXMgaW5zdHIgYW4gZm1vdmUgb3V0PworCWJuZS5iCQlmb3BlcnJfb3V0CQkjIGZtb3ZlIG91dAorCisKKyMgaGVyZSwgd2Ugc2ltcGx5IHNlZSBpZiB0aGUgb3BlcmFuZCBpbiB0aGUgZnNhdmUgZnJhbWUgbmVlZHMgdG8gYmUgInVuc2tld2VkIi4KKyMgdGhpcyB3b3VsZCBiZSB0aGUgY2FzZSBmb3Igb3BjbGFzcyB0d28gb3BlcmF0aW9ucyB3aXRoIGEgc291cmNlIGluZmluaXR5IG9yCisjIGRlbm9ybSBvcGVyYW5kIGluIHRoZSBzZ2wgb3IgZGJsIGZvcm1hdC4gTkFOcyBhbHNvIGJlY29tZSBza2V3ZWQsIGJ1dCBjYW4ndAorIyBjYXVzZSBhbiBvcGVyciBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciB0aGVtIGhlcmUuCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHNyYyBvcAorCWJzci5sCQlmaXhfc2tld2VkX29wcwkJIyBmaXggc3JjIG9wCisKK2ZvcGVycl9leGl0OgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikKKworCXVubGsJCSVhNgorCWJyYS5sCQlfcmVhbF9vcGVycgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyB0aGUgaGFyZHdhcmUgZG9lcyBub3Qgc2F2ZSB0aGUgZGVmYXVsdCByZXN1bHQgdG8gbWVtb3J5IG9uIGVuYWJsZWQKKyMgb3BlcmFuZCBlcnJvciBleGNlcHRpb25zLiB3ZSBkbyB0aGlzIGhlcmUgYmVmb3JlIHBhc3NpbmcgY29udHJvbCB0bworIyB0aGUgdXNlciBvcGVyYW5kIGVycm9yIGhhbmRsZXIuCisjCisjIGJ5dGUsIHdvcmQsIGFuZCBsb25nIGRlc3RpbmF0aW9uIGZvcm1hdCBvcGVyYXRpb25zIGNhbiBwYXNzCisjIHRocm91Z2ggaGVyZS4gd2Ugc2ltcGx5IG5lZWQgdG8gdGVzdCB0aGUgc2lnbiBvZiB0aGUgc3JjCisjIG9wZXJhbmQgYW5kIHNhdmUgdGhlIGFwcHJvcHJpYXRlIG1pbmltdW0gb3IgbWF4aW11bSBpbnRlZ2VyIHZhbHVlCisjIHRvIHRoZSBlZmZlY3RpdmUgYWRkcmVzcyBhcyBwb2ludGVkIHRvIGJ5IHRoZSBzdGFja2VkIGVmZmVjdGl2ZSBhZGRyZXNzLgorIworIyBhbHRob3VnaCBwYWNrZWQgb3BjbGFzcyB0aHJlZSBvcGVyYXRpb25zIGNhbiB0YWtlIG9wZXJhbmQgZXJyb3IKKyMgZXhjZXB0aW9ucywgdGhleSB3b24ndCBwYXNzIHRocm91Z2ggaGVyZSBzaW5jZSB0aGV5IGFyZSBjYXVnaHQKKyMgZmlyc3QgYnkgdGhlIHVuc3VwcG9ydGVkIGRhdGEgZm9ybWF0IGV4Y2VwdGlvbiBoYW5kbGVyLiB0aGF0IGhhbmRsZXIKKyMgc2VuZHMgdGhlbSBkaXJlY3RseSB0byBfcmVhbF9vcGVycigpIGlmIG5lY2Vzc2FyeS4KKyMKK2ZvcGVycl9vdXQ6CisKKwltb3YudwkJRlBfU1JDX0VYKCVhNiksJWQxCSMgZmV0Y2ggZXhwb25lbnQKKwlhbmRpLncJCSYweDdmZmYsJWQxCisJY21waS53CQklZDEsJjB4N2ZmZgorCWJuZS5iCQlmb3BlcnJfb3V0X25vdF9xbmFuCisjIHRoZSBvcGVyYW5kIGlzIGVpdGhlciBhbiBpbmZpbml0eSBvciBhIFFOQU4uCisJdHN0LmwJCUZQX1NSQ19MTyglYTYpCisJYm5lLmIJCWZvcGVycl9vdXRfcW5hbgorCW1vdi5sCQlGUF9TUkNfSEkoJWE2KSwlZDEKKwlhbmRpLmwJCSYweDdmZmZmZmZmLCVkMQorCWJlcS5iCQlmb3BlcnJfb3V0X25vdF9xbmFuCitmb3BlcnJfb3V0X3FuYW46CisJbW92LmwJCUZQX1NSQ19ISSglYTYpLExfU0NSMSglYTYpCisJYnJhLmIJCWZvcGVycl9vdXRfam1wCisKK2ZvcGVycl9vdXRfbm90X3FuYW46CisJbW92LmwJCSYweDdmZmZmZmZmLCVkMQorCXRzdC5iCQlGUF9TUkNfRVgoJWE2KQorCWJwbC5iCQlmb3BlcnJfb3V0X25vdF9xbmFuMgorCWFkZHEubAkJJjB4MSwlZDEKK2ZvcGVycl9vdXRfbm90X3FuYW4yOgorCW1vdi5sCQklZDEsTF9TQ1IxKCVhNikKKworZm9wZXJyX291dF9qbXA6CisJYmZleHR1CQklZDB7JjE5OiYzfSwlZDAJCSMgZXh0cmFjdCBkc3QgZm9ybWF0IGZpZWxkCisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgPGVhPiBtb2RlLHJlZworCW1vdi53CQkodGJsX29wZXJyLmIsJXBjLCVkMC53KjIpLCVhMAorCWptcAkJKHRibF9vcGVyci5iLCVwYywlYTApCisKK3RibF9vcGVycjoKKwlzaG9ydAkJZm9wZXJyX291dF9sIC0gdGJsX29wZXJyICMgbG9uZyB3b3JkIGludGVnZXIKKwlzaG9ydAkJdGJsX29wZXJyICAgIC0gdGJsX29wZXJyICMgc2dsIHByZWMgc2hvdWxkbid0IGhhcHBlbgorCXNob3J0CQl0Ymxfb3BlcnIgICAgLSB0Ymxfb3BlcnIgIyBleHQgcHJlYyBzaG91bGRuJ3QgaGFwcGVuCisJc2hvcnQJCWZvcGVycl9leGl0ICAtIHRibF9vcGVyciAjIHBhY2tlZCB3b24ndCBlbnRlciBoZXJlCisJc2hvcnQJCWZvcGVycl9vdXRfdyAtIHRibF9vcGVyciAjIHdvcmQgaW50ZWdlcgorCXNob3J0CQl0Ymxfb3BlcnIgICAgLSB0Ymxfb3BlcnIgIyBkYmwgcHJlYyBzaG91bGRuJ3QgaGFwcGVuCisJc2hvcnQJCWZvcGVycl9vdXRfYiAtIHRibF9vcGVyciAjIGJ5dGUgaW50ZWdlcgorCXNob3J0CQl0Ymxfb3BlcnIgICAgLSB0Ymxfb3BlcnIgIyBwYWNrZWQgd29uJ3QgZW50ZXIgaGVyZQorCitmb3BlcnJfb3V0X2I6CisJbW92LmIJCUxfU0NSMSglYTYpLCVkMAkJIyBsb2FkIHBvc2l0aXZlIGRlZmF1bHQgcmVzdWx0CisJY21waS5iCQklZDEsJjB4NwkJIyBpcyA8ZWE+IG1vZGUgYSBkYXRhIHJlZz8KKwlibGUuYgkJZm9wZXJyX291dF9iX3NhdmVfZG4JIyB5ZXMKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHBhc3M6IDxlYT4gb2YgZGVmYXVsdCByZXN1bHQKKwlic3IubAkJX2RtZW1fd3JpdGVfYnl0ZQkjIHdyaXRlIHRoZSBkZWZhdWx0IHJlc3VsdAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF9iCQkjIHllcworCisJYnJhLncJCWZvcGVycl9leGl0Citmb3BlcnJfb3V0X2Jfc2F2ZV9kbjoKKwlhbmRpLncJCSYweDAwMDcsJWQxCisJYnNyLmwJCXN0b3JlX2RyZWdfYgkJIyBzdG9yZSByZXN1bHQgdG8gcmVnZmlsZQorCWJyYS53CQlmb3BlcnJfZXhpdAorCitmb3BlcnJfb3V0X3c6CisJbW92LncJCUxfU0NSMSglYTYpLCVkMAkJIyBsb2FkIHBvc2l0aXZlIGRlZmF1bHQgcmVzdWx0CisJY21waS5iCQklZDEsJjB4NwkJIyBpcyA8ZWE+IG1vZGUgYSBkYXRhIHJlZz8KKwlibGUuYgkJZm9wZXJyX291dF93X3NhdmVfZG4JIyB5ZXMKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHBhc3M6IDxlYT4gb2YgZGVmYXVsdCByZXN1bHQKKwlic3IubAkJX2RtZW1fd3JpdGVfd29yZAkjIHdyaXRlIHRoZSBkZWZhdWx0IHJlc3VsdAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF93CQkjIHllcworCisJYnJhLncJCWZvcGVycl9leGl0Citmb3BlcnJfb3V0X3dfc2F2ZV9kbjoKKwlhbmRpLncJCSYweDAwMDcsJWQxCisJYnNyLmwJCXN0b3JlX2RyZWdfdwkJIyBzdG9yZSByZXN1bHQgdG8gcmVnZmlsZQorCWJyYS53CQlmb3BlcnJfZXhpdAorCitmb3BlcnJfb3V0X2w6CisJbW92LmwJCUxfU0NSMSglYTYpLCVkMAkJIyBsb2FkIHBvc2l0aXZlIGRlZmF1bHQgcmVzdWx0CisJY21waS5iCQklZDEsJjB4NwkJIyBpcyA8ZWE+IG1vZGUgYSBkYXRhIHJlZz8KKwlibGUuYgkJZm9wZXJyX291dF9sX3NhdmVfZG4JIyB5ZXMKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHBhc3M6IDxlYT4gb2YgZGVmYXVsdCByZXN1bHQKKwlic3IubAkJX2RtZW1fd3JpdGVfbG9uZwkjIHdyaXRlIHRoZSBkZWZhdWx0IHJlc3VsdAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF9sCQkjIHllcworCisJYnJhLncJCWZvcGVycl9leGl0Citmb3BlcnJfb3V0X2xfc2F2ZV9kbjoKKwlhbmRpLncJCSYweDAwMDcsJWQxCisJYnNyLmwJCXN0b3JlX2RyZWdfbAkJIyBzdG9yZSByZXN1bHQgdG8gcmVnZmlsZQorCWJyYS53CQlmb3BlcnJfZXhpdAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9mcHNwX3NuYW4oKTogMDYwRlBTUCBlbnRyeSBwb2ludCBmb3IgRlAgU05BTiBleGNlcHRpb24uCSMKKyMJCQkJCQkJCQkjCisjCVRoaXMgaGFuZGxlciBzaG91bGQgYmUgdGhlIGZpcnN0IGNvZGUgZXhlY3V0ZWQgdXBvbiB0YWtpbmcgdGhlCSMKKyMJRlAgU2lnbmFsbGluZyBOQU4gZXhjZXB0aW9uIGluIGFuIG9wZXJhdGluZyBzeXN0ZW0uCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfaW1lbV9yZWFkX2xvbmcoKSAtIHJlYWQgaW5zdHJ1Y3Rpb24gbG9uZ3dvcmQJCQkjCisjCWZpeF9za2V3ZWRfb3BzKCkgLSBhZGp1c3Qgc3JjIG9wZXJhbmQgaW4gZnNhdmUgZnJhbWUJCSMKKyMJX3JlYWxfc25hbigpIC0gImNhbGxvdXQiIHRvIG9wZXJhdGluZyBzeXN0ZW0gU05BTiBoYW5kbGVyCSMKKyMJX2RtZW1fd3JpdGVfe2J5dGUsd29yZCxsb25nfSgpIC0gc3RvcmUgZGF0YSB0byBtZW0gKG9wY2xhc3MgMykJIworIwlzdG9yZV9kcmVnX3tiLHcsbH0oKSAtIHN0b3JlIGRhdGEgdG8gZGF0YSByZWdmaWxlIChvcGNsYXNzIDMpCSMKKyMJZmFjY19vdXRfe2IsdyxsLGQseH0oKSAtIHN0b3JlIHRvIG1lbSB0b29rIGFjYyBlcnJvciAob3BjbCAzKQkjCisjCV9jYWxjX2VhX2ZvdXQoKSAtIGZpeCBBbiBpZiA8ZWE+IGlzIC0oKSBvciAoKSs7IGFsc28gZ2V0IDxlYT4JIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIHRoZSBGUCBTTkFOIGV4Y2VwdGlvbiBmcmFtZQkJIworIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgc291cmNlIG9wZXJhbmQJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlObyBhY2Nlc3MgZXJyb3I6CQkJCQkJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgdW5jaGFuZ2VkCQkJCQkjCisjCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBhZGp1c3RlZCBzcmMgb3AgZm9yIG9wY2xhc3MgMCwyCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUluIGEgc3lzdGVtIHdoZXJlIHRoZSBGUCBTTkFOIGV4Y2VwdGlvbiBpcyBlbmFibGVkLCB0aGUgZ29hbAkjCisjIGlzIHRvIGdldCB0byB0aGUgaGFuZGxlciBzcGVjaWZpZWQgYXQgX3JlYWxfc25hbigpLiBCdXQsIG9uIHRoZSAwNjAsCSMKKyMgZm9yIG9wY2xhc3MgemVybyBhbmQgdHdvIGluc3RydWN0aW9ucyB0YWtpbmcgdGhpcyBleGNlcHRpb24sIHRoZQkjCisjIGlucHV0IG9wZXJhbmQgaW4gdGhlIGZzYXZlIGZyYW1lIG1heSBiZSBpbmNvcnJlY3QgZm9yIHNvbWUgY2FzZXMJIworIyBhbmQgbmVlZHMgdG8gYmUgY29ycmVjdGVkLiBUaGlzIGhhbmRsZXIgY2FsbHMgZml4X3NrZXdlZF9vcHMoKSB0bwkjCisjIGRvIGp1c3QgdGhpcyBhbmQgdGhlbiBleGl0cyB0aHJvdWdoIF9yZWFsX3NuYW4oKS4JCQkjCisjCUZvciBvcGNsYXNzIDMgaW5zdHJ1Y3Rpb25zLCB0aGUgMDYwIGRvZXNuJ3Qgc3RvcmUgdGhlIGRlZmF1bHQJIworIyBTTkFOIHJlc3VsdCBvdXQgdG8gbWVtb3J5IG9yIGRhdGEgcmVnaXN0ZXIgZmlsZSBhcyBpdCBzaG91bGQuCQkjCisjIFRoaXMgY29kZSBtdXN0IGVtdWxhdGUgdGhlIG1vdmUgb3V0IGJlZm9yZSBmaW5hbGx5IGV4aXRpbmcgdGhyb3VnaAkjCisjIF9yZWFsX3NuYW4oKS4gVGhlIG1vdmUgb3V0LCBpZiB0byBtZW1vcnksIGlzIHBlcmZvcm1lZCB1c2luZwkJIworIyBfbWVtX3dyaXRlKCkgImNhbGxvdXQiIHJvdXRpbmVzIHRoYXQgbWF5IHJldHVybiBhIGZhaWxpbmcgcmVzdWx0LgkjCisjIEluIHRoaXMgc3BlY2lhbCBjYXNlLCB0aGUgaGFuZGxlciBtdXN0IGV4aXQgdGhyb3VnaCBmYWNjX291dCgpCSMKKyMgd2hpY2ggY3JlYXRlcyBhbiBhY2Nlc3MgZXJyb3Igc3RhY2sgZnJhbWUgZnJvbSB0aGUgY3VycmVudCBTTkFOCSMKKyMgc3RhY2sgZnJhbWUuCQkJCQkJCQkjCisjCUZvciB0aGUgY2FzZSBvZiBhbiBleHRlbmRlZCBwcmVjaXNpb24gb3BjbGFzcyAzIGluc3RydWN0aW9uLAkjCisjIGlmIHRoZSBlZmZlY3RpdmUgYWRkcmVzc2luZyBtb2RlIHdhcyAtKCkgb3IgKCkrLCB0aGVuIHRoZSBhZGRyZXNzCSMKKyMgcmVnaXN0ZXIgbXVzdCBnZXQgdXBkYXRlZCBieSBjYWxsaW5nIF9jYWxjX2VhX2ZvdXQoKS4gSWYgdGhlIDxlYT4JIworIyB3YXMgLShhNykgZnJvbSBzdXBlcnZpc29yIG1vZGUsIHRoZW4gdGhlIGV4Y2VwdGlvbiBmcmFtZSBjdXJyZW50bHkJIworIyBvbiB0aGUgc3lzdGVtIHN0YWNrIG11c3QgYmUgY2FyZWZ1bGx5IG1vdmVkICJkb3duIiB0byBtYWtlIHJvb20JIworIyBmb3IgdGhlIG9wZXJhbmQgYmVpbmcgbW92ZWQuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2Zwc3Bfc25hbgorX2Zwc3Bfc25hbjoKKworCWxpbmsudwkJJWE2LCYtTE9DQUxfU0laRQkjIGluaXQgc3RhY2sgZnJhbWUKKworCWZzYXZlCQlGUF9TUkMoJWE2KQkJIyBncmFiIHRoZSAiYnVzeSIgZnJhbWUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUFJFR1MoJWE2KQkjIHNhdmUgZnAwLWZwMSBvbiBzdGFjaworCisjIHRoZSBGUElBUiBob2xkcyB0aGUgImN1cnJlbnQgUEMiIG9mIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbgorCW1vdi5sCQlVU0VSX0ZQSUFSKCVhNiksRVhDX0VYVFdQVFIoJWE2KQorCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIHRoZSBpbnN0cnVjdGlvbiB3b3JkcworCW1vdi5sCQklZDAsRVhDX09QV09SRCglYTYpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJYnRzdAkJJjEzLCVkMAkJCSMgaXMgaW5zdHIgYW4gZm1vdmUgb3V0PworCWJuZS53CQlmc25hbl9vdXQJCSMgZm1vdmUgb3V0CisKKworIyBoZXJlLCB3ZSBzaW1wbHkgc2VlIGlmIHRoZSBvcGVyYW5kIGluIHRoZSBmc2F2ZSBmcmFtZSBuZWVkcyB0byBiZSAidW5za2V3ZWQiLgorIyB0aGlzIHdvdWxkIGJlIHRoZSBjYXNlIGZvciBvcGNsYXNzIHR3byBvcGVyYXRpb25zIHdpdGggYSBzb3VyY2UgaW5maW5pdHkgb3IKKyMgZGVub3JtIG9wZXJhbmQgaW4gdGhlIHNnbCBvciBkYmwgZm9ybWF0LiBOQU5zIGFsc28gYmVjb21lIHNrZXdlZCBhbmQgbXVzdCBiZQorIyBmaXhlZCBoZXJlLgorCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBzcmMgb3AKKwlic3IubAkJZml4X3NrZXdlZF9vcHMJCSMgZml4IHNyYyBvcAorCitmc25hbl9leGl0OgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikKKworCXVubGsJCSVhNgorCWJyYS5sCQlfcmVhbF9zbmFuCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIHRoZSBoYXJkd2FyZSBkb2VzIG5vdCBzYXZlIHRoZSBkZWZhdWx0IHJlc3VsdCB0byBtZW1vcnkgb24gZW5hYmxlZAorIyBzbmFuIGV4Y2VwdGlvbnMuIHdlIGRvIHRoaXMgaGVyZSBiZWZvcmUgcGFzc2luZyBjb250cm9sIHRvCisjIHRoZSB1c2VyIHNuYW4gaGFuZGxlci4KKyMKKyMgYnl0ZSwgd29yZCwgbG9uZywgYW5kIHBhY2tlZCBkZXN0aW5hdGlvbiBmb3JtYXQgb3BlcmF0aW9ucyBjYW4gcGFzcworIyB0aHJvdWdoIGhlcmUuIHNpbmNlIHBhY2tlZCBmb3JtYXQgb3BlcmF0aW9ucyBhbHJlYWR5IHdlcmUgaGFuZGxlZCBieQorIyBmcHNwX3Vuc3VwcCgpLCB0aGVuIHdlIG5lZWQgdG8gZG8gbm90aGluZyBlbHNlIGZvciB0aGVtIGhlcmUuCisjIGZvciBieXRlLCB3b3JkLCBhbmQgbG9uZywgd2Ugc2ltcGx5IG5lZWQgdG8gdGVzdCB0aGUgc2lnbiBvZiB0aGUgc3JjCisjIG9wZXJhbmQgYW5kIHNhdmUgdGhlIGFwcHJvcHJpYXRlIG1pbmltdW0gb3IgbWF4aW11bSBpbnRlZ2VyIHZhbHVlCisjIHRvIHRoZSBlZmZlY3RpdmUgYWRkcmVzcyBhcyBwb2ludGVkIHRvIGJ5IHRoZSBzdGFja2VkIGVmZmVjdGl2ZSBhZGRyZXNzLgorIworZnNuYW5fb3V0OgorCisJYmZleHR1CQklZDB7JjE5OiYzfSwlZDAJCSMgZXh0cmFjdCBkc3QgZm9ybWF0IGZpZWxkCisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgPGVhPiBtb2RlLHJlZworCW1vdi53CQkodGJsX3NuYW4uYiwlcGMsJWQwLncqMiksJWEwCisJam1wCQkodGJsX3NuYW4uYiwlcGMsJWEwKQorCit0Ymxfc25hbjoKKwlzaG9ydAkJZnNuYW5fb3V0X2wgLSB0Ymxfc25hbiAjIGxvbmcgd29yZCBpbnRlZ2VyCisJc2hvcnQJCWZzbmFuX291dF9zIC0gdGJsX3NuYW4gIyBzZ2wgcHJlYyBzaG91bGRuJ3QgaGFwcGVuCisJc2hvcnQJCWZzbmFuX291dF94IC0gdGJsX3NuYW4gIyBleHQgcHJlYyBzaG91bGRuJ3QgaGFwcGVuCisJc2hvcnQJCXRibF9zbmFuICAgIC0gdGJsX3NuYW4gIyBwYWNrZWQgbmVlZHMgbm8gaGVscAorCXNob3J0CQlmc25hbl9vdXRfdyAtIHRibF9zbmFuICMgd29yZCBpbnRlZ2VyCisJc2hvcnQJCWZzbmFuX291dF9kIC0gdGJsX3NuYW4gIyBkYmwgcHJlYyBzaG91bGRuJ3QgaGFwcGVuCisJc2hvcnQJCWZzbmFuX291dF9iIC0gdGJsX3NuYW4gIyBieXRlIGludGVnZXIKKwlzaG9ydAkJdGJsX3NuYW4gICAgLSB0Ymxfc25hbiAjIHBhY2tlZCBuZWVkcyBubyBoZWxwCisKK2ZzbmFuX291dF9iOgorCW1vdi5iCQlGUF9TUkNfSEkoJWE2KSwlZDAJIyBsb2FkIHVwcGVyIGJ5dGUgb2YgU05BTgorCWJzZXQJCSY2LCVkMAkJCSMgc2V0IFNOQU4gYml0CisJY21waS5iCQklZDEsJjB4NwkJIyBpcyA8ZWE+IG1vZGUgYSBkYXRhIHJlZz8KKwlibGUuYgkJZnNuYW5fb3V0X2JfZG4JCSMgeWVzCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBwYXNzOiA8ZWE+IG9mIGRlZmF1bHQgcmVzdWx0CisJYnNyLmwJCV9kbWVtX3dyaXRlX2J5dGUJIyB3cml0ZSB0aGUgZGVmYXVsdCByZXN1bHQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfYgkJIyB5ZXMKKworCWJyYS53CQlmc25hbl9leGl0Citmc25hbl9vdXRfYl9kbjoKKwlhbmRpLncJCSYweDAwMDcsJWQxCisJYnNyLmwJCXN0b3JlX2RyZWdfYgkJIyBzdG9yZSByZXN1bHQgdG8gcmVnZmlsZQorCWJyYS53CQlmc25hbl9leGl0CisKK2ZzbmFuX291dF93OgorCW1vdi53CQlGUF9TUkNfSEkoJWE2KSwlZDAJIyBsb2FkIHVwcGVyIHdvcmQgb2YgU05BTgorCWJzZXQJCSYxNCwlZDAJCQkjIHNldCBTTkFOIGJpdAorCWNtcGkuYgkJJWQxLCYweDcJCSMgaXMgPGVhPiBtb2RlIGEgZGF0YSByZWc/CisJYmxlLmIJCWZzbmFuX291dF93X2RuCQkjIHllcworCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgcGFzczogPGVhPiBvZiBkZWZhdWx0IHJlc3VsdAorCWJzci5sCQlfZG1lbV93cml0ZV93b3JkCSMgd3JpdGUgdGhlIGRlZmF1bHQgcmVzdWx0CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X3cJCSMgeWVzCisKKwlicmEudwkJZnNuYW5fZXhpdAorZnNuYW5fb3V0X3dfZG46CisJYW5kaS53CQkmMHgwMDA3LCVkMQorCWJzci5sCQlzdG9yZV9kcmVnX3cJCSMgc3RvcmUgcmVzdWx0IHRvIHJlZ2ZpbGUKKwlicmEudwkJZnNuYW5fZXhpdAorCitmc25hbl9vdXRfbDoKKwltb3YubAkJRlBfU1JDX0hJKCVhNiksJWQwCSMgbG9hZCB1cHBlciBsb25nd29yZCBvZiBTTkFOCisJYnNldAkJJjMwLCVkMAkJCSMgc2V0IFNOQU4gYml0CisJY21waS5iCQklZDEsJjB4NwkJIyBpcyA8ZWE+IG1vZGUgYSBkYXRhIHJlZz8KKwlibGUuYgkJZnNuYW5fb3V0X2xfZG4JCSMgeWVzCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBwYXNzOiA8ZWE+IG9mIGRlZmF1bHQgcmVzdWx0CisJYnNyLmwJCV9kbWVtX3dyaXRlX2xvbmcJIyB3cml0ZSB0aGUgZGVmYXVsdCByZXN1bHQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfbAkJIyB5ZXMKKworCWJyYS53CQlmc25hbl9leGl0Citmc25hbl9vdXRfbF9kbjoKKwlhbmRpLncJCSYweDAwMDcsJWQxCisJYnNyLmwJCXN0b3JlX2RyZWdfbAkJIyBzdG9yZSByZXN1bHQgdG8gcmVnZmlsZQorCWJyYS53CQlmc25hbl9leGl0CisKK2ZzbmFuX291dF9zOgorCWNtcGkuYgkJJWQxLCYweDcJCSMgaXMgPGVhPiBtb2RlIGEgZGF0YSByZWc/CisJYmxlLmIJCWZzbmFuX291dF9kX2RuCQkjIHllcworCW1vdi5sCQlGUF9TUkNfRVgoJWE2KSwlZDAJIyBmZXRjaCBTTkFOIHNpZ24KKwlhbmRpLmwJCSYweDgwMDAwMDAwLCVkMAkJIyBrZWVwIHNpZ24KKwlvcmkubAkJJjB4N2ZjMDAwMDAsJWQwCQkjIGluc2VydCBuZXcgZXhwb25lbnQsU05BTiBiaXQKKwltb3YubAkJRlBfU1JDX0hJKCVhNiksJWQxCSMgbG9hZCBtYW50aXNzYQorCWxzci5sCQkmMHg4LCVkMQkJIyBzaGlmdCBtYW50aXNzYSBmb3Igc2dsCisJb3IubAkJJWQxLCVkMAkJCSMgY3JlYXRlIHNnbCBTTkFOCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBwYXNzOiA8ZWE+IG9mIGRlZmF1bHQgcmVzdWx0CisJYnNyLmwJCV9kbWVtX3dyaXRlX2xvbmcJIyB3cml0ZSB0aGUgZGVmYXVsdCByZXN1bHQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfbAkJIyB5ZXMKKworCWJyYS53CQlmc25hbl9leGl0Citmc25hbl9vdXRfZF9kbjoKKwltb3YubAkJRlBfU1JDX0VYKCVhNiksJWQwCSMgZmV0Y2ggU05BTiBzaWduCisJYW5kaS5sCQkmMHg4MDAwMDAwMCwlZDAJCSMga2VlcCBzaWduCisJb3JpLmwJCSYweDdmYzAwMDAwLCVkMAkJIyBpbnNlcnQgbmV3IGV4cG9uZW50LFNOQU4gYml0CisJbW92LmwJCSVkMSwtKCVzcCkKKwltb3YubAkJRlBfU1JDX0hJKCVhNiksJWQxCSMgbG9hZCBtYW50aXNzYQorCWxzci5sCQkmMHg4LCVkMQkJIyBzaGlmdCBtYW50aXNzYSBmb3Igc2dsCisJb3IubAkJJWQxLCVkMAkJCSMgY3JlYXRlIHNnbCBTTkFOCisJbW92LmwJCSglc3ApKywlZDEKKwlhbmRpLncJCSYweDAwMDcsJWQxCisJYnNyLmwJCXN0b3JlX2RyZWdfbAkJIyBzdG9yZSByZXN1bHQgdG8gcmVnZmlsZQorCWJyYS53CQlmc25hbl9leGl0CisKK2ZzbmFuX291dF9kOgorCW1vdi5sCQlGUF9TUkNfRVgoJWE2KSwlZDAJIyBmZXRjaCBTTkFOIHNpZ24KKwlhbmRpLmwJCSYweDgwMDAwMDAwLCVkMAkJIyBrZWVwIHNpZ24KKwlvcmkubAkJJjB4N2ZmODAwMDAsJWQwCQkjIGluc2VydCBuZXcgZXhwb25lbnQsU05BTiBiaXQKKwltb3YubAkJRlBfU1JDX0hJKCVhNiksJWQxCSMgbG9hZCBoaSBtYW50aXNzYQorCW1vdi5sCQklZDAsRlBfU0NSMF9FWCglYTYpCSMgc3RvcmUgdG8gdGVtcCBzcGFjZQorCW1vdi5sCQkmMTEsJWQwCQkJIyBsb2FkIHNoaWZ0IGFtdAorCWxzci5sCQklZDAsJWQxCisJb3IubAkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGNyZWF0ZSBkYmwgaGkKKwltb3YubAkJRlBfU1JDX0hJKCVhNiksJWQxCSMgbG9hZCBoaSBtYW50aXNzYQorCWFuZGkubAkJJjB4MDAwMDA3ZmYsJWQxCisJcm9yLmwJCSVkMCwlZDEKKwltb3YubAkJJWQxLEZQX1NDUjBfSEkoJWE2KQkjIHN0b3JlIHRvIHRlbXAgc3BhY2UKKwltb3YubAkJRlBfU1JDX0xPKCVhNiksJWQxCSMgbG9hZCBsbyBtYW50aXNzYQorCWxzci5sCQklZDAsJWQxCisJb3IubAkJJWQxLEZQX1NDUjBfSEkoJWE2KQkjIGNyZWF0ZSBkYmwgbG8KKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gb3BlcmFuZAorCW1vdi5sCQlFWENfRUEoJWE2KSwlYTEJCSMgcGFzczogZHN0IGFkZHIKKwltb3ZxLmwJCSYweDgsJWQwCQkjIHBhc3M6IHNpemUgb2YgOCBieXRlcworCWJzci5sCQlfZG1lbV93cml0ZQkJIyB3cml0ZSB0aGUgZGVmYXVsdCByZXN1bHQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfZAkJIyB5ZXMKKworCWJyYS53CQlmc25hbl9leGl0CisKKyMgZm9yIGV4dGVuZGVkIHByZWNpc2lvbiwgaWYgdGhlIGFkZHJlc3NpbmcgbW9kZSBpcyBwcmUtZGVjcmVtZW50IG9yCisjIHBvc3QtaW5jcmVtZW50LCB0aGVuIHRoZSBhZGRyZXNzIHJlZ2lzdGVyIGRpZCBub3QgZ2V0IHVwZGF0ZWQuCisjIGluIGFkZGl0aW9uLCBmb3IgcHJlLWRlY3JlbWVudCwgdGhlIHN0YWNrZWQgPGVhPiBpcyBpbmNvcnJlY3QuCitmc25hbl9vdXRfeDoKKwljbHIuYgkJU1BDT05EX0ZMRyglYTYpCQkjIGNsZWFyIHNwZWNpYWwgY2FzZSBmbGFnCisKKwltb3YudwkJRlBfU1JDX0VYKCVhNiksRlBfU0NSMF9FWCglYTYpCisJY2xyLncJCTIrRlBfU0NSMCglYTYpCisJbW92LmwJCUZQX1NSQ19ISSglYTYpLCVkMAorCWJzZXQJCSYzMCwlZDAKKwltb3YubAkJJWQwLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlGUF9TUkNfTE8oJWE2KSxGUF9TQ1IwX0xPKCVhNikKKworCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikJIyBzdXBlcnZpc29yIG1vZGUgZXhjZXB0aW9uPworCWJuZS5iCQlmc25hbl9vdXRfeF9zCQkjIHllcworCisJbW92LmwJCSV1c3AsJWEwCQkjIGZldGNoIHVzZXIgc3RhY2sgcG9pbnRlcgorCW1vdi5sCQklYTAsRVhDX0E3KCVhNikJCSMgc2F2ZSBvbiBzdGFjayBmb3IgY2FsY19lYSgpCisJbW92LmwJCSglYTYpLEVYQ19BNiglYTYpCisKKwlic3IubAkJX2NhbGNfZWFfZm91dAkJIyBmaW5kIHRoZSBjb3JyZWN0IGVhLHVwZGF0ZSBBbgorCW1vdi5sCQklYTAsJWExCisJbW92LmwJCSVhMCxFWENfRUEoJWE2KQkJIyBzdGFjayBjb3JyZWN0IDxlYT4KKworCW1vdi5sCQlFWENfQTcoJWE2KSwlYTAKKwltb3YubAkJJWEwLCV1c3AJCSMgcmVzdG9yZSB1c2VyIHN0YWNrIHBvaW50ZXIKKwltb3YubAkJRVhDX0E2KCVhNiksKCVhNikKKworZnNuYW5fb3V0X3hfc2F2ZToKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gb3BlcmFuZAorCW1vdnEubAkJJjB4YywlZDAJCSMgcGFzczogc2l6ZSBvZiBleHRlbmRlZAorCWJzci5sCQlfZG1lbV93cml0ZQkJIyB3cml0ZSB0aGUgZGVmYXVsdCByZXN1bHQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfeAkJIyB5ZXMKKworCWJyYS53CQlmc25hbl9leGl0CisKK2ZzbmFuX291dF94X3M6CisJbW92LmwJCSglYTYpLEVYQ19BNiglYTYpCisKKwlic3IubAkJX2NhbGNfZWFfZm91dAkJIyBmaW5kIHRoZSBjb3JyZWN0IGVhLHVwZGF0ZSBBbgorCW1vdi5sCQklYTAsJWExCisJbW92LmwJCSVhMCxFWENfRUEoJWE2KQkJIyBzdGFjayBjb3JyZWN0IDxlYT4KKworCW1vdi5sCQlFWENfQTYoJWE2KSwoJWE2KQorCisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnICMgaXMgPGVhPiBtb2RlIC0oYTcpPworCWJuZS5iCQlmc25hbl9vdXRfeF9zYXZlCSMgbm8KKworIyB0aGUgb3BlcmF0aW9uIHdhcyAiZm1vdmUueCBTTkFOLC0oYTcpIiBmcm9tIHN1cGVydmlzb3IgbW9kZS4KKwlmbW92bS54CQlFWENfRlBSRUdTKCVhNiksJjB4YzAJIyByZXN0b3JlIGZwMC1mcDEKKwlmbW92bS5sCQlVU0VSX0ZQQ1IoJWE2KSwlZnBjciwlZnBzciwlZnBpYXIgIyByZXN0b3JlIGN0cmwgcmVncworCW1vdm0ubAkJRVhDX0RSRUdTKCVhNiksJjB4MDMwMwkjIHJlc3RvcmUgZDAtZDEvYTAtYTEKKworCWZyZXN0b3JlCUZQX1NSQyglYTYpCisKKwltb3YubAkJRVhDX0E2KCVhNiksJWE2CQkjIHJlc3RvcmUgZnJhbWUgcG9pbnRlcgorCisJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX1NSKCVzcCksTE9DQUxfU0laRStFWENfU1ItMHhjKCVzcCkKKwltb3YubAkJTE9DQUxfU0laRStFWENfUEMrMHgyKCVzcCksTE9DQUxfU0laRStFWENfUEMrMHgyLTB4Yyglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRVhDX0VBKCVzcCksTE9DQUxfU0laRStFWENfRUEtMHhjKCVzcCkKKworCW1vdi5sCQlMT0NBTF9TSVpFK0ZQX1NDUjBfRVgoJXNwKSxMT0NBTF9TSVpFK0VYQ19TUiglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfU0NSMF9ISSglc3ApLExPQ0FMX1NJWkUrRVhDX1BDKzB4Miglc3ApCisJbW92LmwJCUxPQ0FMX1NJWkUrRlBfU0NSMF9MTyglc3ApLExPQ0FMX1NJWkUrRVhDX0VBKCVzcCkKKworCWFkZC5sCQkmTE9DQUxfU0laRS0weDgsJXNwCisKKwlicmEubAkJX3JlYWxfc25hbgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9mcHNwX2luZXgoKTogMDYwRlBTUCBlbnRyeSBwb2ludCBmb3IgRlAgSW5leGFjdCBleGNlcHRpb24uCSMKKyMJCQkJCQkJCQkjCisjCVRoaXMgaGFuZGxlciBzaG91bGQgYmUgdGhlIGZpcnN0IGNvZGUgZXhlY3V0ZWQgdXBvbiB0YWtpbmcgdGhlCSMKKyMJRlAgSW5leGFjdCBleGNlcHRpb24gaW4gYW4gb3BlcmF0aW5nIHN5c3RlbS4JCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfaW1lbV9yZWFkX2xvbmcoKSAtIHJlYWQgaW5zdHJ1Y3Rpb24gbG9uZ3dvcmQJCQkjCisjCWZpeF9za2V3ZWRfb3BzKCkgLSBhZGp1c3Qgc3JjIG9wZXJhbmQgaW4gZnNhdmUgZnJhbWUJCSMKKyMJc2V0X3RhZ194KCkgLSBkZXRlcm1pbmUgb3B0eXBlIG9mIHNyYy9kc3Qgb3BlcmFuZHMJCSMKKyMJc3RvcmVfZnByZWcoKSAtIHN0b3JlIG9wY2xhc3MgMCBvciAyIHJlc3VsdCB0byBGUCByZWdmaWxlCSMKKyMJdW5ub3JtX2ZpeCgpIC0gY2hhbmdlIFVOTk9STSBvcGVyYW5kcyB0byBOT1JNIG9yIFpFUk8JCSMKKyMJbG9hZF9mcG4yKCkgLSBsb2FkIGRzdCBvcGVyYW5kIGZyb20gRlAgcmVnZmlsZQkJCSMKKyMJc21vdmNyKCkgLSBlbXVsYXRlIGFuICJmbW92Y3IiIGluc3RydWN0aW9uCQkJIworIwlmb3V0KCkgLSBlbXVsYXRlIGFuIG9wY2xhc3MgMyBpbnN0cnVjdGlvbgkJCSMKKyMJdGJsX3Vuc3VwcCAtIGFkZCBvZiB0YWJsZSBvZiBlbXVsYXRpb24gcm91dGluZXMgZm9yIG9wY2xhc3MgMCwyCSMKKyMJX3JlYWxfaW5leCgpIC0gImNhbGxvdXQiIHRvIG9wZXJhdGluZyBzeXN0ZW0gaW5leGFjdCBoYW5kbGVyCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCS0gVGhlIHN5c3RlbSBzdGFjayBjb250YWlucyB0aGUgRlAgSW5leGFjdCBleGNlcHRpb24gZnJhbWUJIworIwktIFRoZSBmc2F2ZSBmcmFtZSBjb250YWlucyB0aGUgc291cmNlIG9wZXJhbmQJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgaXMgdW5jaGFuZ2VkCQkJCQkjCisjCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBhZGp1c3RlZCBzcmMgb3AgZm9yIG9wY2xhc3MgMCwyCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUluIGEgc3lzdGVtIHdoZXJlIHRoZSBGUCBJbmV4YWN0IGV4Y2VwdGlvbiBpcyBlbmFibGVkLCB0aGUgZ29hbAkjCisjIGlzIHRvIGdldCB0byB0aGUgaGFuZGxlciBzcGVjaWZpZWQgYXQgX3JlYWxfaW5leCgpLiBCdXQsIG9uIHRoZSAwNjAsCSMKKyMgZm9yIG9wY2xhc3MgemVybyBhbmQgdHdvIGluc3RydWN0aW9uIHRha2luZyB0aGlzIGV4Y2VwdGlvbiwgdGhlCSMKKyMgaGFyZHdhcmUgZG9lc24ndCBzdG9yZSB0aGUgY29ycmVjdCByZXN1bHQgdG8gdGhlIGRlc3RpbmF0aW9uIEZQCSMKKyMgcmVnaXN0ZXIgYXMgZGlkIHRoZSAnMDQwIGFuZCAnODgxLzIuIFRoaXMgaGFuZGxlciBtdXN0IGVtdWxhdGUgdGhlCSMKKyMgaW5zdHJ1Y3Rpb24gaW4gb3JkZXIgdG8gZ2V0IHRoaXMgdmFsdWUgYW5kIHRoZW4gc3RvcmUgaXQgdG8gdGhlCSMKKyMgY29ycmVjdCByZWdpc3RlciBiZWZvcmUgY2FsbGluZyBfcmVhbF9pbmV4KCkuCQkJCSMKKyMJRm9yIG9wY2xhc3MgMyBpbnN0cnVjdGlvbnMsIHRoZSAwNjAgZG9lc24ndCBzdG9yZSB0aGUgZGVmYXVsdAkjCisjIGluZXhhY3QgcmVzdWx0IG91dCB0byBtZW1vcnkgb3IgZGF0YSByZWdpc3RlciBmaWxlIGFzIGl0IHNob3VsZC4JIworIyBUaGlzIGNvZGUgbXVzdCBlbXVsYXRlIHRoZSBtb3ZlIG91dCBieSBjYWxsaW5nIGZvdXQoKSBiZWZvcmUgZmluYWxseQkjCisjIGV4aXRpbmcgdGhyb3VnaCBfcmVhbF9pbmV4KCkuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2Zwc3BfaW5leAorX2Zwc3BfaW5leDoKKworCWxpbmsudwkJJWE2LCYtTE9DQUxfU0laRQkjIGluaXQgc3RhY2sgZnJhbWUKKworCWZzYXZlCQlGUF9TUkMoJWE2KQkJIyBncmFiIHRoZSAiYnVzeSIgZnJhbWUKKworCW1vdm0ubAkJJjB4MDMwMyxFWENfRFJFR1MoJWE2KQkjIHNhdmUgZDAtZDEvYTAtYTEKKwlmbW92bS5sCQklZnBjciwlZnBzciwlZnBpYXIsVVNFUl9GUENSKCVhNikgIyBzYXZlIGN0cmwgcmVncworCWZtb3ZtLngJCSYweGMwLEVYQ19GUFJFR1MoJWE2KQkjIHNhdmUgZnAwLWZwMSBvbiBzdGFjaworCisjIHRoZSBGUElBUiBob2xkcyB0aGUgImN1cnJlbnQgUEMiIG9mIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbgorCW1vdi5sCQlVU0VSX0ZQSUFSKCVhNiksRVhDX0VYVFdQVFIoJWE2KQorCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIHRoZSBpbnN0cnVjdGlvbiB3b3JkcworCW1vdi5sCQklZDAsRVhDX09QV09SRCglYTYpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJYnRzdAkJJjEzLCVkMAkJCSMgaXMgaW5zdHIgYW4gZm1vdmUgb3V0PworCWJuZS53CQlmaW5leF9vdXQJCSMgZm1vdmUgb3V0CisKKworIyB0aGUgaGFyZHdhcmUsIGZvciAiZmFicyIgYW5kICJmbmVnIiB3LyBhIGxvbmcgc291cmNlIGZvcm1hdCwgcHV0cyB0aGUKKyMgbG9uZ3dvcmQgaW50ZWdlciBkaXJlY3RseSBpbnRvIHRoZSB1cHBlciBsb25nd29yZCBvZiB0aGUgbWFudGlzc2EgYWxvbmcKKyMgdy8gYW4gZXhwb25lbnQgdmFsdWUgb2YgMHg0MDFlLiB3ZSBjb252ZXJ0IHRoaXMgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGhlcmUuCisJYmZleHR1CQklZDB7JjE5OiYzfSwlZDAJCSMgZmV0Y2ggaW5zdHIgc2l6ZQorCWJuZS5iCQlmaW5leF9jb250CQkjIGluc3RyIHNpemUgaXMgbm90IGxvbmcKKwljbXBpLncJCUZQX1NSQ19FWCglYTYpLCYweDQwMWUJIyBpcyBleHBvbmVudCAweDQwMWU/CisJYm5lLmIJCWZpbmV4X2NvbnQJCSMgbm8KKwlmbW92LmwJCSYweDAsJWZwY3IKKwlmbW92LmwJCUZQX1NSQ19ISSglYTYpLCVmcDAJIyBsb2FkIGludGVnZXIgc3JjCisJZm1vdi54CQklZnAwLEZQX1NSQyglYTYpCSMgc3RvcmUgaW50ZWdlciBhcyBleHRlbmRlZCBwcmVjaXNpb24KKwltb3YudwkJJjB4ZTAwMSwweDIrRlBfU1JDKCVhNikKKworZmluZXhfY29udDoKKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCisJYnNyLmwJCWZpeF9za2V3ZWRfb3BzCQkjIGZpeCBzcmMgb3AKKworIyBIZXJlLCB3ZSB6ZXJvIHRoZSBjY29kZSBhbmQgZXhjZXB0aW9uIGJ5dGUgZmllbGQgc2luY2Ugd2UncmUgZ29pbmcgdG8KKyMgZW11bGF0ZSB0aGUgd2hvbGUgaW5zdHJ1Y3Rpb24uIE5vdGljZSwgdGhvdWdoLCB0aGF0IHdlIGRvbid0IGtpbGwgdGhlCisjIElORVgxIGJpdC4gVGhpcyBpcyBiZWNhdXNlIGEgcGFja2VkIG9wIGhhcyBsb25nIHNpbmNlIGJlZW4gY29udmVydGVkCisjIHRvIGV4dGVuZGVkIGJlZm9yZSBhcnJpdmluZyBoZXJlLiBUaGVyZWZvcmUsIHdlIG5lZWQgdG8gcmV0YWluIHRoZQorIyBJTkVYMSBiaXQgZnJvbSB3aGVuIHRoZSBvcGVyYW5kIHdhcyBmaXJzdCBjb252ZXJ0ZWQuCisJYW5kaS5sCQkmMHgwMGZmMDFmZixVU0VSX0ZQU1IoJWE2KSAjIHplcm8gYWxsIGJ1dCBhY2N1cmVkIGZpZWxkCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgemVybyBjdXJyZW50IGNvbnRyb2wgcmVncworCWZtb3YubAkJJjB4MCwlZnBzcgorCisJYmZleHR1CQlFWENfRVhUV09SRCglYTYpeyYwOiY2fSwlZDEgIyBleHRyYWN0IHVwcGVyIDYgb2YgY21kcmVnCisJY21waS5iCQklZDEsJjB4MTcJCSMgaXMgb3AgYW4gZm1vdmVjcj8KKwliZXEudwkJZmluZXhfZm1vdmNyCQkjIHllcworCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIHNyYyBvcAorCWJzci5sCQlzZXRfdGFnX3gJCSMgdGFnIHRoZSBvcGVyYW5kIHR5cGUKKwltb3YuYgkJJWQwLFNUQUcoJWE2KQkJIyBtYXliZSBOT1JNLERFTk9STQorCisjIGJpdHMgZm91ciBhbmQgZml2ZSBvZiB0aGUgZnAgZXh0ZW5zaW9uIHdvcmQgc2VwYXJhdGUgdGhlIG1vbmFkaWMgYW5kIGR5YWRpYworIyBvcGVyYXRpb25zIHRoYXQgY2FuIHBhc3MgdGhyb3VnaCBmcHNwX2luZXgoKS4gcmVtZW1iZXIgdGhhdCBmY21wIGFuZCBmdHN0CisjIHdpbGwgbmV2ZXIgdGFrZSB0aGlzIGV4Y2VwdGlvbiwgYnV0IGZzaW5jb3Mgd2lsbC4KKwlidHN0CQkmMHg1LDErRVhDX0NNRFJFRyglYTYpCSMgaXMgb3BlcmF0aW9uIG1vbmFkaWMgb3IgZHlhZGljPworCWJlcS5iCQlmaW5leF9leHRyYWN0CQkjIG1vbmFkaWMKKworCWJ0c3QJCSYweDQsMStFWENfQ01EUkVHKCVhNikJIyBpcyBvcGVyYXRpb24gYW4gZnNpbmNvcz8KKwlibmUuYgkJZmluZXhfZXh0cmFjdAkJIyB5ZXMKKworCWJmZXh0dQkJRVhDX0NNRFJFRyglYTYpeyY2OiYzfSwlZDAgIyBkeWFkaWM7IGxvYWQgZHN0IHJlZworCWJzci5sCQlsb2FkX2ZwbjIJCSMgbG9hZCBkc3QgaW50byBGUF9EU1QKKworCWxlYQkJRlBfRFNUKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBkc3Qgb3AKKwlic3IubAkJc2V0X3RhZ194CQkjIHRhZyB0aGUgb3BlcmFuZCB0eXBlCisJY21waS5iCQklZDAsJlVOTk9STQkJIyBpcyBvcGVyYW5kIGFuIFVOTk9STT8KKwlibmUuYgkJZmluZXhfb3AyX2RvbmUJCSMgbm8KKwlic3IubAkJdW5ub3JtX2ZpeAkJIyB5ZXM7IGNvbnZlcnQgdG8gTk9STSxERU5PUk0sb3IgWkVSTworZmluZXhfb3AyX2RvbmU6CisJbW92LmIJCSVkMCxEVEFHKCVhNikJCSMgc2F2ZSBkc3Qgb3B0eXBlIHRhZworCitmaW5leF9leHRyYWN0OgorCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgcHJlYy9tb2RlCisKKwltb3YuYgkJMStFWENfQ01EUkVHKCVhNiksJWQxCisJYW5kaS53CQkmMHgwMDdmLCVkMQkJIyBleHRyYWN0IGV4dGVuc2lvbgorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwlsZWEJCUZQX0RTVCglYTYpLCVhMQorCisJbW92LmwJCSh0YmxfdW5zdXBwLmwsJXBjLCVkMS53KjQpLCVkMSAjIGZldGNoIHJvdXRpbmUgYWRkcgorCWpzcgkJKHRibF91bnN1cHAubCwlcGMsJWQxLmwqMSkKKworIyB0aGUgb3BlcmF0aW9uIGhhcyBiZWVuIGVtdWxhdGVkLiB0aGUgcmVzdWx0IGlzIGluIGZwMC4KK2ZpbmV4X3NhdmU6CisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjY6JjN9LCVkMAorCWJzci5sCQlzdG9yZV9mcHJlZworCitmaW5leF9leGl0OgorCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJZnJlc3RvcmUJRlBfU1JDKCVhNikKKworCXVubGsJCSVhNgorCWJyYS5sCQlfcmVhbF9pbmV4CisKK2ZpbmV4X2Ztb3ZjcjoKKwljbHIubAkJJWQwCisJbW92LmIJCUZQQ1JfTU9ERSglYTYpLCVkMAkjIHBhc3Mgcm5kIHByZWMsbW9kZQorCW1vdi5iCQkxK0VYQ19DTURSRUcoJWE2KSwlZDEKKwlhbmRpLmwJCSYweDAwMDAwMDdmLCVkMQkJIyBwYXNzIHJvbSBvZmZzZXQKKwlic3IubAkJc21vdmNyCisJYnJhLmIJCWZpbmV4X3NhdmUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgdGhlIGhhcmR3YXJlIGRvZXMgbm90IHNhdmUgdGhlIGRlZmF1bHQgcmVzdWx0IHRvIG1lbW9yeSBvbiBlbmFibGVkCisjIGluZXhhY3QgZXhjZXB0aW9ucy4gd2UgZG8gdGhpcyBoZXJlIGJlZm9yZSBwYXNzaW5nIGNvbnRyb2wgdG8KKyMgdGhlIHVzZXIgaW5leGFjdCBoYW5kbGVyLgorIworIyBieXRlLCB3b3JkLCBhbmQgbG9uZyBkZXN0aW5hdGlvbiBmb3JtYXQgb3BlcmF0aW9ucyBjYW4gcGFzcworIyB0aHJvdWdoIGhlcmUuIHNvIGNhbiBkb3VibGUgYW5kIHNpbmdsZSBwcmVjaXNpb24uCisjIGFsdGhvdWdoIHBhY2tlZCBvcGNsYXNzIHRocmVlIG9wZXJhdGlvbnMgY2FuIHRha2UgaW5leGFjdAorIyBleGNlcHRpb25zLCB0aGV5IHdvbid0IHBhc3MgdGhyb3VnaCBoZXJlIHNpbmNlIHRoZXkgYXJlIGNhdWdodAorIyBmaXJzdCBieSB0aGUgdW5zdXBwb3J0ZWQgZGF0YSBmb3JtYXQgZXhjZXB0aW9uIGhhbmRsZXIuIHRoYXQgaGFuZGxlcgorIyBzZW5kcyB0aGVtIGRpcmVjdGx5IHRvIF9yZWFsX2luZXgoKSBpZiBuZWNlc3NhcnkuCisjCitmaW5leF9vdXQ6CisKKwltb3YuYgkJJk5PUk0sU1RBRyglYTYpCQkjIHNyYyBpcyBhIE5PUk0KKworCWNsci5sCQklZDAKKwltb3YuYgkJRlBDUl9NT0RFKCVhNiksJWQwCSMgcGFzcyBybmQgcHJlYyxtb2RlCisKKwlhbmRpLmwJCSYweGZmZmYwMGZmLFVTRVJfRlBTUiglYTYpICMgemVybyBleGNlcHRpb24gZmllbGQKKworCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3MgcHRyIHRvIHNyYyBvcGVyYW5kCisKKwlic3IubAkJZm91dAkJCSMgc3RvcmUgdGhlIGRlZmF1bHQgcmVzdWx0CisKKwlicmEuYgkJZmluZXhfZXhpdAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9mcHNwX2R6KCk6IDA2MEZQU1AgZW50cnkgcG9pbnQgZm9yIEZQIERaIGV4Y2VwdGlvbi4JCSMKKyMJCQkJCQkJCQkjCisjCVRoaXMgaGFuZGxlciBzaG91bGQgYmUgdGhlIGZpcnN0IGNvZGUgZXhlY3V0ZWQgdXBvbiB0YWtpbmcJIworIwl0aGUgRlAgRFogZXhjZXB0aW9uIGluIGFuIG9wZXJhdGluZyBzeXN0ZW0uCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2ltZW1fcmVhZF9sb25nKCkgLSByZWFkIGluc3RydWN0aW9uIGxvbmd3b3JkIGZyb20gbWVtb3J5CSMKKyMJZml4X3NrZXdlZF9vcHMoKSAtIGFkanVzdCBmc2F2ZSBvcGVyYW5kCQkJCSMKKyMJX3JlYWxfZHooKSAtICJjYWxsb3V0IiBleGl0IHBvaW50IGZyb20gRlAgRFogaGFuZGxlcgkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIHRoZSBGUCBEWiBleGNlcHRpb24gc3RhY2suCQkjCisjCS0gVGhlIGZzYXZlIGZyYW1lIGNvbnRhaW5zIHRoZSBzb3VyY2Ugb3BlcmFuZC4JCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwktIFRoZSBzeXN0ZW0gc3RhY2sgY29udGFpbnMgdGhlIEZQIERaIGV4Y2VwdGlvbiBzdGFjay4JCSMKKyMJLSBUaGUgZnNhdmUgZnJhbWUgY29udGFpbnMgdGhlIGFkanVzdGVkIHNvdXJjZSBvcGVyYW5kLgkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSW4gYSBzeXN0ZW0gd2hlcmUgdGhlIERaIGV4Y2VwdGlvbiBpcyBlbmFibGVkLCB0aGUgZ29hbCBpcyB0bwkjCisjIGdldCB0byB0aGUgaGFuZGxlciBzcGVjaWZpZWQgYXQgX3JlYWxfZHooKS4gQnV0LCBvbiB0aGUgMDYwLCB3aGVuIHRoZQkjCisjIGV4Y2VwdGlvbiBpcyB0YWtlbiwgdGhlIGlucHV0IG9wZXJhbmQgaW4gdGhlIGZzYXZlIHN0YXRlIGZyYW1lIG1heQkjCisjIGJlIGluY29ycmVjdCBmb3Igc29tZSBjYXNlcyBhbmQgbmVlZCB0byBiZSBhZGp1c3RlZC4gU28sIHRoaXMgcGFja2FnZQkjCisjIGFkanVzdHMgdGhlIG9wZXJhbmQgdXNpbmcgZml4X3NrZXdlZF9vcHMoKSBhbmQgdGhlbiBicmFuY2hlcyB0bwkjCisjIF9yZWFsX2R6KCkuCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlfZnBzcF9kegorX2Zwc3BfZHo6CisKKwlsaW5rLncJCSVhNiwmLUxPQ0FMX1NJWkUJIyBpbml0IHN0YWNrIGZyYW1lCisKKwlmc2F2ZQkJRlBfU1JDKCVhNikJCSMgZ3JhYiB0aGUgImJ1c3kiIGZyYW1lCisKKwltb3ZtLmwJCSYweDAzMDMsRVhDX0RSRUdTKCVhNikJIyBzYXZlIGQwLWQxL2EwLWExCisJZm1vdm0ubAkJJWZwY3IsJWZwc3IsJWZwaWFyLFVTRVJfRlBDUiglYTYpICMgc2F2ZSBjdHJsIHJlZ3MKKwlmbW92bS54CQkmMHhjMCxFWENfRlBSRUdTKCVhNikJIyBzYXZlIGZwMC1mcDEgb24gc3RhY2sKKworIyB0aGUgRlBJQVIgaG9sZHMgdGhlICJjdXJyZW50IFBDIiBvZiB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24KKwltb3YubAkJVVNFUl9GUElBUiglYTYpLEVYQ19FWFRXUFRSKCVhNikKKworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCB0aGUgaW5zdHJ1Y3Rpb24gd29yZHMKKwltb3YubAkJJWQwLEVYQ19PUFdPUkQoJWE2KQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjIGhlcmUsIHdlIHNpbXBseSBzZWUgaWYgdGhlIG9wZXJhbmQgaW4gdGhlIGZzYXZlIGZyYW1lIG5lZWRzIHRvIGJlICJ1bnNrZXdlZCIuCisjIHRoaXMgd291bGQgYmUgdGhlIGNhc2UgZm9yIG9wY2xhc3MgdHdvIG9wZXJhdGlvbnMgd2l0aCBhIHNvdXJjZSB6ZXJvCisjIGluIHRoZSBzZ2wgb3IgZGJsIGZvcm1hdC4KKwlsZWEJCUZQX1NSQyglYTYpLCVhMAkJIyBwYXNzOiBwdHIgdG8gc3JjIG9wCisJYnNyLmwJCWZpeF9za2V3ZWRfb3BzCQkjIGZpeCBzcmMgb3AKKworZmR6X2V4aXQ6CisJZm1vdm0ueAkJRVhDX0ZQUkVHUyglYTYpLCYweGMwCSMgcmVzdG9yZSBmcDAtZnAxCisJZm1vdm0ubAkJVVNFUl9GUENSKCVhNiksJWZwY3IsJWZwc3IsJWZwaWFyICMgcmVzdG9yZSBjdHJsIHJlZ3MKKwltb3ZtLmwJCUVYQ19EUkVHUyglYTYpLCYweDAzMDMJIyByZXN0b3JlIGQwLWQxL2EwLWExCisKKwlmcmVzdG9yZQlGUF9TUkMoJWE2KQorCisJdW5sawkJJWE2CisJYnJhLmwJCV9yZWFsX2R6CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2Zwc3BfZmxpbmUoKTogMDYwRlBTUCBlbnRyeSBwb2ludCBmb3IgIkxpbmUgRiBlbXVsYXRvciIJIworIwkJICAgICAgIGV4Y2VwdGlvbiB3aGVuIHRoZSAicmVkdWNlZCIgdmVyc2lvbiBvZiB0aGUJIworIwkJICAgICAgIEZQU1AgaXMgaW1wbGVtZW50ZWQgdGhhdCBkb2VzIG5vdCBlbXVsYXRlCSMKKyMJCSAgICAgICBGUCB1bmltcGxlbWVudGVkIGluc3RydWN0aW9ucy4JCQkjCisjCQkJCQkJCQkJIworIwlUaGlzIGhhbmRsZXIgc2hvdWxkIGJlIHRoZSBmaXJzdCBjb2RlIGV4ZWN1dGVkIHVwb24gdGFraW5nIGEJIworIwkiTGluZSBGIEVtdWxhdG9yIiBleGNlcHRpb24gaW4gYW4gb3BlcmF0aW5nIHN5c3RlbSBpbnRlZ3JhdGluZwkjCisjCXRoZSByZWR1Y2VkIHZlcnNpb24gb2YgMDYwRlBTUC4JCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9yZWFsX2ZwdV9kaXNhYmxlZCgpIC0gSGFuZGxlICJGUFUgZGlzYWJsZWQiIGV4Y2VwdGlvbnMJCSMKKyMJX3JlYWxfZmxpbmUoKSAtIEhhbmRsZSBhbGwgb3RoZXIgY2FzZXMgKHRyZWF0ZWQgZXF1YWxseSkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGNvbnRhaW5zIGEgIkxpbmUgRiBFbXVsYXRvciIgZXhjZXB0aW9uCSMKKyMJICBzdGFjayBmcmFtZS4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJLSBUaGUgc3lzdGVtIHN0YWNrIGlzIHVuY2hhbmdlZC4JCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJV2hlbiBhICJMaW5lIEYgRW11bGF0b3IiIGV4Y2VwdGlvbiBvY2N1cnMgaW4gYSBzeXN0ZW0gd2hlcmUJIworIyAiRlBVIFVuaW1wbGVtZW50ZWQiIGluc3RydWN0aW9ucyB3aWxsIG5vdCBiZSBlbXVsYXRlZCwgdGhlIGV4Y2VwdGlvbgkjCisjIGNhbiBvY2N1ciBiZWNhdXNlIHRoZW4gRlBVIGlzIGRpc2FibGVkIG9yIHRoZSBpbnN0cnVjdGlvbiBpcyB0byBiZQkjCisjIGNsYXNzaWZlZCBhcyAiTGluZSBGIi4gVGhpcyBtb2R1bGUgZGV0ZXJtaW5lcyB3aGljaCBjYXNlIGV4aXN0cyBhbmQJIworIyBjYWxscyB0aGUgYXBwcm9wcmlhdGUgImNhbGxvdXQiLgkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2Zwc3BfZmxpbmUKK19mcHNwX2ZsaW5lOgorCisjIGNoZWNrIHRvIHNlZSBpZiB0aGUgRlBVIGlzIGRpc2FibGVkLiBpZiBzbywganVtcCB0byB0aGUgT1MgZW50cnkKKyMgcG9pbnQgZm9yIHRoYXQgY29uZGl0aW9uLgorCWNtcGkudwkJMHg2KCVzcCksJjB4NDAyYworCWJlcS5sCQlfcmVhbF9mcHVfZGlzYWJsZWQKKworCWJyYS5sCQlfcmVhbF9mbGluZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9kY2FsY19lYSgpOiBjYWxjIGNvcnJlY3QgPGVhPiBmcm9tIDxlYT4gc3RhY2tlZCBvbiBleGNlcHRpb24JIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJaW5jX2FyZWcoKSAtIGluY3JlbWVudCBhbiBhZGRyZXNzIHJlZ2lzdGVyCQkJIworIwlkZWNfYXJlZygpIC0gZGVjcmVtZW50IGFuIGFkZHJlc3MgcmVnaXN0ZXIJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IG51bWJlciBvZiBieXRlcyB0byBhZGp1c3QgPGVhPiBieQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIyAiRHVtbXkiIENBTEN1bGF0ZSBFZmZlY3RpdmUgQWRkcmVzczoJCQkJCSMKKyMJVGhlIHN0YWNrZWQgPGVhPiBmb3IgRlAgdW5pbXBsZW1lbnRlZCBpbnN0cnVjdGlvbnMgYW5kIG9wY2xhc3MJIworIwl0d28gcGFja2VkIGluc3RydWN0aW9ucyBpcyBjb3JyZWN0IHdpdGggdGhlIGV4Y2VwdGlvbiBvZi4uLgkjCisjCQkJCQkJCQkJIworIwkxKSAtKEFuKSAgIDogVGhlIHJlZ2lzdGVyIGlzIG5vdCB1cGRhdGVkIHJlZ2FyZGxlc3Mgb2Ygc2l6ZS4JIworIwkJICAgICBBbHNvLCBmb3IgZXh0ZW5kZWQgcHJlY2lzaW9uIGFuZCBwYWNrZWQsIHRoZQkjCisjCQkgICAgIHN0YWNrZWQgPGVhPiB2YWx1ZSBpcyA4IGJ5dGVzIHRvbyBiaWcJCSMKKyMJMikgKEFuKSsgICA6IFRoZSByZWdpc3RlciBpcyBub3QgdXBkYXRlZC4JCQkjCisjCTMpICM8ZGF0YT4gOiBUaGUgdXBwZXIgbG9uZ3dvcmQgb2YgdGhlIGltbWVkaWF0ZSBvcGVyYW5kIGlzCSMKKyMJCSAgICAgc3RhY2tlZCBiLHcsbCBhbmQgcyBzaXplcyBhcmUgY29tcGxldGVseSBzdGFja2VkLgkjCisjCQkgICAgIGQseCwgYW5kIHAgYXJlIG5vdC4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJX2RjYWxjX2VhCitfZGNhbGNfZWE6CisJbW92LmwJCSVkMCwgJWEwCQkjIG1vdmUgIyBieXRlcyB0byAlYTAKKworCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwgJWQwCSMgZmV0Y2ggb3Bjb2RlIHdvcmQKKwltb3YubAkJJWQwLCAlZDEJCSMgbWFrZSBhIGNvcHkKKworCWFuZGkudwkJJjB4MzgsICVkMAkJIyBleHRyYWN0IG1vZGUgZmllbGQKKwlhbmRpLmwJCSYweDcsICVkMQkJIyBleHRyYWN0IHJlZyAgZmllbGQKKworCWNtcGkuYgkJJWQwLCYweDE4CQkjIGlzIG1vZGUgKEFuKSsgPworCWJlcS5iCQlkY2VhX3BpCQkJIyB5ZXMKKworCWNtcGkuYgkJJWQwLCYweDIwCQkjIGlzIG1vZGUgLShBbikgPworCWJlcS5iCQlkY2VhX3BkCQkJIyB5ZXMKKworCW9yLncJCSVkMSwlZDAJCQkjIGNvbmNhdCBtb2RlLHJlZworCWNtcGkuYgkJJWQwLCYweDNjCQkjIGlzIG1vZGUgIzxkYXRhPj8KKworCWJlcS5iCQlkY2VhX2ltbQkJIyB5ZXMKKworCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgcmV0dXJuIDxlYT4KKwlydHMKKworIyBuZWVkIHRvIHNldCBpbW1lZGlhdGUgZGF0YSBmbGFnIGhlcmUgc2luY2Ugd2UnbGwgbmVlZCB0byBkbworIyBhbiBpbWVtX3JlYWQgdG8gZmV0Y2ggdGhpcyBsYXRlci4KK2RjZWFfaW1tOgorCW1vdi5iCQkmaW1tZWRfZmxnLFNQQ09ORF9GTEcoJWE2KQorCWxlYQkJKFtVU0VSX0ZQSUFSLCVhNl0sMHg0KSwlYTAgIyBubzsgcmV0dXJuIDxlYT4KKwlydHMKKworIyBoZXJlLCB0aGUgPGVhPiBpcyBzdGFja2VkIGNvcnJlY3RseS4gaG93ZXZlciwgd2UgbXVzdCB1cGRhdGUgdGhlCisjIGFkZHJlc3MgcmVnaXN0ZXIuLi4KK2RjZWFfcGk6CisJbW92LmwJCSVhMCwlZDAJCQkjIHBhc3MgYW10IHRvIGluYyBieQorCWJzci5sCQlpbmNfYXJlZwkJIyBpbmMgYWRkciByZWdpc3RlcgorCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAorCXJ0cworCisjIHRoZSA8ZWE+IGlzIHN0YWNrZWQgY29ycmVjdGx5IGZvciBhbGwgYnV0IGV4dGVuZGVkIGFuZCBwYWNrZWQgd2hpY2gKKyMgdGhlIDxlYT5zIGFyZSA4IGJ5dGVzIHRvbyBsYXJnZS4KKyMgaXQgd291bGQgbWFrZSBubyBzZW5zZSB0byBoYXZlIGEgcHJlLWRlY3JlbWVudCB0byBhNyBpbiBzdXBlcnZpc29yCisjIG1vZGUgc28gd2UgZG9uJ3QgZXZlbiB3b3JyeSBhYm91dCB0aGlzIHRyaWNreSBjYXNlIGhlcmUgOiApCitkY2VhX3BkOgorCW1vdi5sCQklYTAsJWQwCQkJIyBwYXNzIGFtdCB0byBkZWMgYnkKKwlic3IubAkJZGVjX2FyZWcJCSMgZGVjIGFkZHIgcmVnaXN0ZXIKKworCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgc3RhY2tlZCA8ZWE+IGlzIGNvcnJlY3QKKworCWNtcGkuYgkJJWQwLCYweGMJCSMgaXMgb3BzaXplIGV4dCBvciBwYWNrZWQ/CisJYmVxLmIJCWRjZWFfcGQyCQkjIHllcworCXJ0cworZGNlYV9wZDI6CisJc3ViLmwJCSYweDgsJWEwCQkjIGNvcnJlY3QgPGVhPgorCW1vdi5sCQklYTAsRVhDX0VBKCVhNikJCSMgcHV0IGNvcnJlY3QgPGVhPiBvbiBzdGFjaworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9jYWxjX2VhX2ZvdXQoKTogY2FsY3VsYXRlIGNvcnJlY3Qgc3RhY2tlZCA8ZWE+IGZvciBleHRlbmRlZAkjCisjCQkJIGFuZCBwYWNrZWQgZGF0YSBvcGNsYXNzIDMgb3BlcmF0aW9ucy4JCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcmV0dXJuIGNvcnJlY3QgZWZmZWN0aXZlIGFkZHJlc3MJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRm9yIG9wY2xhc3MgMyBleHRlbmRlZCBhbmQgcGFja2VkIGRhdGEgb3BlcmF0aW9ucywgdGhlIDxlYT4JIworIyBzdGFja2VkIGZvciB0aGUgZXhjZXB0aW9uIGlzIGluY29ycmVjdCBmb3IgLShhbikgYW5kIChhbikrIGFkZHJlc3NpbmcJIworIyBtb2Rlcy4gQWxzbywgd2hpbGUgd2UncmUgYXQgaXQsIHRoZSBpbmRleCByZWdpc3RlciBpdHNlbGYgbXVzdCBnZXQJIworIyB1cGRhdGVkLgkJCQkJCQkJIworIwlTbywgZm9yIC0oYW4pLCB3ZSBtdXN0IHN1YnRyYWN0IDggb2ZmIG9mIHRoZSBzdGFja2VkIDxlYT4gdmFsdWUJIworIyBhbmQgcmV0dXJuIHRoYXQgdmFsdWUgYXMgdGhlIGNvcnJlY3QgPGVhPiBhbmQgc3RvcmUgdGhhdCB2YWx1ZSBpbiBBbi4JIworIyBGb3IgKGFuKSssIHRoZSBzdGFja2VkIDxlYT4gaXMgY29ycmVjdCBidXQgd2UgbXVzdCBhZGp1c3QgQW4gYnkgKzEyLgkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoaXMgY2FsY19lYSBpcyBjdXJyZW50bHkgdXNlZCB0byByZXRyaWV2ZSB0aGUgY29ycmVjdCA8ZWE+CisjIGZvciBmbW92ZSBvdXRzIG9mIHR5cGUgZXh0ZW5kZWQgYW5kIHBhY2tlZC4KKwlnbG9iYWwJCV9jYWxjX2VhX2ZvdXQKK19jYWxjX2VhX2ZvdXQ6CisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMAkjIGZldGNoIG9wY29kZSB3b3JkCisJbW92LmwJCSVkMCwlZDEJCQkjIG1ha2UgYSBjb3B5CisKKwlhbmRpLncJCSYweDM4LCVkMAkJIyBleHRyYWN0IG1vZGUgZmllbGQKKwlhbmRpLmwJCSYweDcsJWQxCQkjIGV4dHJhY3QgcmVnICBmaWVsZAorCisJY21waS5iCQklZDAsJjB4MTgJCSMgaXMgbW9kZSAoQW4pKyA/CisJYmVxLmIJCWNlYWZfcGkJCQkjIHllcworCisJY21waS5iCQklZDAsJjB4MjAJCSMgaXMgbW9kZSAtKEFuKSA/CisJYmVxLncJCWNlYWZfcGQJCQkjIHllcworCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAorCXJ0cworCisjIChBbikrIDogZXh0ZW5kZWQgYW5kIHBhY2tlZCBmbW92ZSBvdXQKKyMJOiBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAorIwk6ICJBbiIgbm90IHVwZGF0ZWQKK2NlYWZfcGk6CisJbW92LncJCSh0YmxfY2VhZl9waS5iLCVwYywlZDEudyoyKSwlZDEKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCisJam1wCQkodGJsX2NlYWZfcGkuYiwlcGMsJWQxLncqMSkKKworCXN3YmVnCQkmMHg4Cit0YmxfY2VhZl9waToKKwlzaG9ydAkJY2VhZl9waTAgLSB0YmxfY2VhZl9waQorCXNob3J0CQljZWFmX3BpMSAtIHRibF9jZWFmX3BpCisJc2hvcnQJCWNlYWZfcGkyIC0gdGJsX2NlYWZfcGkKKwlzaG9ydAkJY2VhZl9waTMgLSB0YmxfY2VhZl9waQorCXNob3J0CQljZWFmX3BpNCAtIHRibF9jZWFmX3BpCisJc2hvcnQJCWNlYWZfcGk1IC0gdGJsX2NlYWZfcGkKKwlzaG9ydAkJY2VhZl9waTYgLSB0YmxfY2VhZl9waQorCXNob3J0CQljZWFmX3BpNyAtIHRibF9jZWFmX3BpCisKK2NlYWZfcGkwOgorCWFkZGkubAkJJjB4YyxFWENfRFJFR1MrMHg4KCVhNikKKwlydHMKK2NlYWZfcGkxOgorCWFkZGkubAkJJjB4YyxFWENfRFJFR1MrMHhjKCVhNikKKwlydHMKK2NlYWZfcGkyOgorCWFkZC5sCQkmMHhjLCVhMgorCXJ0cworY2VhZl9waTM6CisJYWRkLmwJCSYweGMsJWEzCisJcnRzCitjZWFmX3BpNDoKKwlhZGQubAkJJjB4YywlYTQKKwlydHMKK2NlYWZfcGk1OgorCWFkZC5sCQkmMHhjLCVhNQorCXJ0cworY2VhZl9waTY6CisJYWRkaS5sCQkmMHhjLEVYQ19BNiglYTYpCisJcnRzCitjZWFmX3BpNzoKKwltb3YuYgkJJm1pYTdfZmxnLFNQQ09ORF9GTEcoJWE2KQorCWFkZGkubAkJJjB4YyxFWENfQTcoJWE2KQorCXJ0cworCisjIC0oQW4pIDogZXh0ZW5kZWQgYW5kIHBhY2tlZCBmbW92ZSBvdXQKKyMJOiBzdGFja2VkIDxlYT4gPSBhY3R1YWwgPGVhPiArIDgKKyMJOiAiQW4iIG5vdCB1cGRhdGVkCitjZWFmX3BkOgorCW1vdi53CQkodGJsX2NlYWZfcGQuYiwlcGMsJWQxLncqMiksJWQxCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAorCXN1Yi5sCQkmMHg4LCVhMAorCXN1Yi5sCQkmMHg4LEVYQ19FQSglYTYpCisJam1wCQkodGJsX2NlYWZfcGQuYiwlcGMsJWQxLncqMSkKKworCXN3YmVnCQkmMHg4Cit0YmxfY2VhZl9wZDoKKwlzaG9ydAkJY2VhZl9wZDAgLSB0YmxfY2VhZl9wZAorCXNob3J0CQljZWFmX3BkMSAtIHRibF9jZWFmX3BkCisJc2hvcnQJCWNlYWZfcGQyIC0gdGJsX2NlYWZfcGQKKwlzaG9ydAkJY2VhZl9wZDMgLSB0YmxfY2VhZl9wZAorCXNob3J0CQljZWFmX3BkNCAtIHRibF9jZWFmX3BkCisJc2hvcnQJCWNlYWZfcGQ1IC0gdGJsX2NlYWZfcGQKKwlzaG9ydAkJY2VhZl9wZDYgLSB0YmxfY2VhZl9wZAorCXNob3J0CQljZWFmX3BkNyAtIHRibF9jZWFmX3BkCisKK2NlYWZfcGQwOgorCW1vdi5sCQklYTAsRVhDX0RSRUdTKzB4OCglYTYpCisJcnRzCitjZWFmX3BkMToKKwltb3YubAkJJWEwLEVYQ19EUkVHUysweGMoJWE2KQorCXJ0cworY2VhZl9wZDI6CisJbW92LmwJCSVhMCwlYTIKKwlydHMKK2NlYWZfcGQzOgorCW1vdi5sCQklYTAsJWEzCisJcnRzCitjZWFmX3BkNDoKKwltb3YubAkJJWEwLCVhNAorCXJ0cworY2VhZl9wZDU6CisJbW92LmwJCSVhMCwlYTUKKwlydHMKK2NlYWZfcGQ2OgorCW1vdi5sCQklYTAsRVhDX0E2KCVhNikKKwlydHMKK2NlYWZfcGQ3OgorCW1vdi5sCQklYTAsRVhDX0E3KCVhNikKKwltb3YuYgkJJm1kYTdfZmxnLFNQQ09ORF9GTEcoJWE2KQorCXJ0cworCisjCisjIFRoaXMgdGFibGUgaG9sZHMgdGhlIG9mZnNldHMgb2YgdGhlIGVtdWxhdGlvbiByb3V0aW5lcyBmb3IgZWFjaCBpbmRpdmlkdWFsCisjIG1hdGggb3BlcmF0aW9uIHJlbGF0aXZlIHRvIHRoZSBhZGRyZXNzIG9mIHRoaXMgdGFibGUuIEluY2x1ZGVkIGFyZQorIyByb3V0aW5lcyBsaWtlIGZhZGQvZm11bC9mYWJzLiBUaGUgdHJhbnNjZW5kZW50YWxzIEFSRSBOT1QuIFRoaXMgaXMgYmVjYXVzZQorIyB0aGlzIHRhYmxlIGlzIGZvciB0aGUgdmVyc2lvbiBpZiB0aGUgMDYwRlBTUCB3aXRob3V0IHRyYW5zY2VuZGVudGFscy4KKyMgVGhlIGxvY2F0aW9uIHdpdGhpbiB0aGUgdGFibGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZXh0ZW5zaW9uIGJpdHMgb2YgdGhlCisjIG9wZXJhdGlvbiBsb25nd29yZC4KKyMKKworCXN3YmVnCQkmMTA5Cit0YmxfdW5zdXBwOgorCWxvbmcJCWZpbgkJLSB0YmxfdW5zdXBwCSMgMDA6IGZtb3ZlCisJbG9uZwkJZmludAkJLSB0YmxfdW5zdXBwCSMgMDE6IGZpbnQKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDAyOiBmc2luaAorCWxvbmcJCWZpbnRyegkJLSB0YmxfdW5zdXBwCSMgMDM6IGZpbnRyegorCWxvbmcJCWZzcXJ0CQktIHRibF91bnN1cHAJIyAwNDogZnNxcnQKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMDY6IGZsb2ducDEKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMDg6IGZldG94bTEKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDA5OiBmdGFuaAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMGE6IGZhdGFuCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDBjOiBmYXNpbgorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMGQ6IGZhdGFuaAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMGU6IGZzaW4KKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDBmOiBmdGFuCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAxMDogZmV0b3gKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDExOiBmdHdvdG94CisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAxMjogZnRlbnRveAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAxNDogZmxvZ24KKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDE1OiBmbG9nMTAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDE2OiBmbG9nMgorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJZmFicwkJLSB0YmxfdW5zdXBwCSMgMTg6IGZhYnMKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDE5OiBmY29zaAorCWxvbmcJCWZuZWcJCS0gdGJsX3Vuc3VwcAkjIDFhOiBmbmVnCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDFjOiBmYWNvcworCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMWQ6IGZjb3MKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDFlOiBmZ2V0ZXhwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAxZjogZmdldG1hbgorCWxvbmcJCWZkaXYJCS0gdGJsX3Vuc3VwcAkjIDIwOiBmZGl2CisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAyMTogZm1vZAorCWxvbmcJCWZhZGQJCS0gdGJsX3Vuc3VwcAkjIDIyOiBmYWRkCisJbG9uZwkJZm11bAkJLSB0YmxfdW5zdXBwCSMgMjM6IGZtdWwKKwlsb25nCQlmc2dsZGl2CQktIHRibF91bnN1cHAJIyAyNDogZnNnbGRpdgorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMjU6IGZyZW0KKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDI2OiBmc2NhbGUKKwlsb25nCQlmc2dsbXVsCQktIHRibF91bnN1cHAJIyAyNzogZnNnbG11bAorCWxvbmcJCWZzdWIJCS0gdGJsX3Vuc3VwcAkjIDI4OiBmc3ViCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDMwOiBmc2luY29zCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAzMTogZnNpbmNvcworCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMzI6IGZzaW5jb3MKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDMzOiBmc2luY29zCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAzNDogZnNpbmNvcworCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCSMgMzU6IGZzaW5jb3MKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAkjIDM2OiBmc2luY29zCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAJIyAzNzogZnNpbmNvcworCWxvbmcJCWZjbXAJCS0gdGJsX3Vuc3VwcAkjIDM4OiBmY21wCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmdHN0CQktIHRibF91bnN1cHAJIyAzYTogZnRzdAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmc2luCQktIHRibF91bnN1cHAJIyA0MDogZnNtb3ZlCisJbG9uZwkJZnNzcXJ0CQktIHRibF91bnN1cHAJIyA0MTogZnNzcXJ0CisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZkaW4JCS0gdGJsX3Vuc3VwcAkjIDQ0OiBmZG1vdmUKKwlsb25nCQlmZHNxcnQJCS0gdGJsX3Vuc3VwcAkjIDQ1OiBmZHNxcnQKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmc2FicwkJLSB0YmxfdW5zdXBwCSMgNTg6IGZzYWJzCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmc25lZwkJLSB0YmxfdW5zdXBwCSMgNWE6IGZzbmVnCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmZGFicwkJLSB0YmxfdW5zdXBwCSMgNWM6IGZkYWJzCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmZG5lZwkJLSB0YmxfdW5zdXBwCSMgNWU6IGZkbmVnCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmc2RpdgkJLSB0YmxfdW5zdXBwCSMgNjA6IGZzZGl2CisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQlmc2FkZAkJLSB0YmxfdW5zdXBwCSMgNjI6IGZzYWRkCisJbG9uZwkJZnNtdWwJCS0gdGJsX3Vuc3VwcAkjIDYzOiBmc211bAorCWxvbmcJCWZkZGl2CQktIHRibF91bnN1cHAJIyA2NDogZmRkaXYKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZkYWRkCQktIHRibF91bnN1cHAJIyA2NjogZmRhZGQKKwlsb25nCQlmZG11bAkJLSB0YmxfdW5zdXBwCSMgNjc6IGZkbXVsCisJbG9uZwkJZnNzdWIJCS0gdGJsX3Vuc3VwcAkjIDY4OiBmc3N1YgorCWxvbmcJCXRibF91bnN1cHAJLSB0YmxfdW5zdXBwCisJbG9uZwkJdGJsX3Vuc3VwcAktIHRibF91bnN1cHAKKwlsb25nCQl0YmxfdW5zdXBwCS0gdGJsX3Vuc3VwcAorCWxvbmcJCWZkc3ViCQktIHRibF91bnN1cHAJIyA2YzogZmRzdWIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBZGQgdGhpcyBoZXJlIHNvIG5vbi1mcCBtb2R1bGVzIGNhbiBjb21waWxlLgorIyAoc21vdmNyIGlzIGNhbGxlZCBmcm9tIGZwc3BfaW5leC4pCisJZ2xvYmFsCQlzbW92Y3IKK3Ntb3ZjcjoKKwlicmEuYgkJc21vdmNyCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZm1vdm1fZHluYW1pYygpOiBlbXVsYXRlICJmbW92bSIgZHluYW1pYyBpbnN0cnVjdGlvbgkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZmV0Y2hfZHJlZygpIC0gZmV0Y2ggZGF0YSByZWdpc3RlcgkJCQkjCisjCXtpLGQsfW1lbV9yZWFkKCkgLSBmZXRjaCBkYXRhIGZyb20gbWVtb3J5CQkJIworIwlfbWVtX3dyaXRlKCkgLSB3cml0ZSBkYXRhIHRvIG1lbW9yeQkJCQkjCisjCWllYV9pYWNjKCkgLSBpbnN0cnVjdGlvbiBtZW1vcnkgYWNjZXNzIGVycm9yIG9jY3VycmVkCQkjCisjCWllYV9kYWNjKCkgLSBkYXRhIG1lbW9yeSBhY2Nlc3MgZXJyb3Igb2NjdXJyZWQJCQkjCisjCXJlc3RvcmUoKSAtIHJlc3RvcmUgQW4gaW5kZXggcmVncyBpZiBhY2Nlc3MgZXJyb3Igb2NjdXJyZWQJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSWYgaW5zdHIgaXMgImZtb3ZtIERuLC0oQTcpIiBmcm9tIHN1cGVydmlzb3IgbW9kZSwJCSMKKyMJCWQwID0gc2l6ZSBvZiBkdW1wCQkJCQkjCisjCQlkMSA9IERuCQkJCQkJCSMKKyMJRWxzZSBpZiBpbnN0cnVjdGlvbiBhY2Nlc3MgZXJyb3IsCQkJCSMKKyMJCWQwID0gRlNMVwkJCQkJCSMKKyMJRWxzZSBpZiBkYXRhIGFjY2VzcyBlcnJvciwJCQkJCSMKKyMJCWQwID0gRlNMVwkJCQkJCSMKKyMJCWEwID0gYWRkcmVzcyBvZiBmYXVsdAkJCQkJIworIwlFbHNlCQkJCQkJCQkjCisjCQlub25lLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGUgZWZmZWN0aXZlIGFkZHJlc3MgbXVzdCBiZSBjYWxjdWxhdGVkIHNpbmNlIHRoaXMgaXMgZW50ZXJlZAkjCisjIGZyb20gYW4gIlVuaW1wbGVtZW50ZWQgRWZmZWN0aXZlIEFkZHJlc3MiIGV4Y2VwdGlvbiBoYW5kbGVyLiBTbywgd2UJIworIyBoYXZlIG91ciBvd24gZmNhbGNfZWEoKSByb3V0aW5lIGhlcmUuIElmIGFuIGFjY2VzcyBlcnJvciBpcyBmbGFnZ2VkCSMKKyMgYnkgYSBfe2ksZCx9bWVtX3JlYWQoKSBjYWxsLCB3ZSBtdXN0IGV4aXQgdGhyb3VnaCB0aGUgc3BlY2lhbAkJIworIyBoYW5kbGVyLgkJCQkJCQkJIworIwlUaGUgZGF0YSByZWdpc3RlciBpcyBkZXRlcm1pbmVkIGFuZCBpdHMgdmFsdWUgbG9hZGVkIHRvIGdldCB0aGUJIworIyBzdHJpbmcgb2YgRlAgcmVnaXN0ZXJzIGFmZmVjdGVkLiBUaGlzIHZhbHVlIGlzIHVzZWQgYXMgYW4gaW5kZXggaW50bwkjCisjIGEgbG9va3VwIHRhYmxlIHN1Y2ggdGhhdCB3ZSBjYW4gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYnl0ZXMJCSMKKyMgaW52b2x2ZWQuCQkJCQkJCQkjCisjCUlmIHRoZSBpbnN0cnVjdGlvbiBpcyAiZm1vdm0ueCA8ZWE+LERuIiwgYSBfbWVtX3JlYWQoKSBpcyB1c2VkCSMKKyMgdG8gcmVhZCBpbiBhbGwgRlAgdmFsdWVzLiBBZ2FpbiwgX21lbV9yZWFkKCkgbWF5IGZhaWwgYW5kIHJlcXVpcmUgYQkjCisjIHNwZWNpYWwgZXhpdC4JCQkJCQkJCSMKKyMJSWYgdGhlIGluc3RydWN0aW9uIGlzICJmbW92bS54IEROLDxlYT4iLCBhIF9tZW1fd3JpdGUoKSBpcyB1c2VkCSMKKyMgdG8gd3JpdGUgYWxsIEZQIHZhbHVlcy4gX21lbV93cml0ZSgpIG1heSBhbHNvIGZhaWwuCQkJIworIwlJZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgImZtb3ZtLnggRE4sLShhNykiIGZyb20gc3VwZXJ2aXNvciBtb2RlLAkjCisjIHRoZW4gd2UgcmV0dXJuIHRoZSBzaXplIG9mIHRoZSBkdW1wIGFuZCB0aGUgc3RyaW5nIHRvIHRoZSBjYWxsZXIJIworIyBzbyB0aGF0IHRoZSBtb3ZlIGNhbiBvY2N1ciBvdXRzaWRlIG9mIHRoaXMgcm91dGluZS4gVGhpcyBzcGVjaWFsCSMKKyMgY2FzZSBpcyByZXF1aXJlZCBzbyB0aGF0IG1vdmVzIHRvIHRoZSBzeXN0ZW0gc3RhY2sgYXJlIGhhbmRsZWQJIworIyBjb3JyZWN0bHkuCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBEWU5BTUlDOgkJCQkJCQkJIworIwlmbW92bS54CWRuLCA8ZWE+CQkJCQkJIworIwlmbW92bS54CTxlYT4sIGRuCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJICAgICAgPFdPUkQgMT4JCSAgICAgIDxXT1JEMj4JCQkJIworIwkxMTExIDAwMTAgMDAgfDxlYT58CTExQCYgMTAwMCAwJCQkIDAwMDAJCQkjCisjCQkJCQkJCQkJIworIwkmID0gKDApOiBwcmVkZWNyZW1lbnQgYWRkcmVzc2luZyBtb2RlCQkJCSMKKyMJICAgICgxKTogcG9zdGluY3JlbWVudCBvciBjb250cm9sIGFkZHJlc3NpbmcgbW9kZQkJIworIwlAID0gKDApOiBtb3ZlIGxpc3RlZCByZWdzIGZyb20gbWVtb3J5IHRvIHRoZSBGUFUJCSMKKyMJICAgICgxKTogbW92ZSBsaXN0ZWQgcmVncyBmcm9tIHRoZSBGUFUgdG8gbWVtb3J5CQkjCisjCSQkJCAgICA6IGluZGV4IG9mIGRhdGEgcmVnaXN0ZXIgaG9sZGluZyByZWcgc2VsZWN0IG1hc2sJCSMKKyMJCQkJCQkJCQkjCisjIE5PVEVTOgkJCQkJCQkJIworIwlJZiB0aGUgZGF0YSByZWdpc3RlciBob2xkcyBhIHplcm8sIHRoZW4gdGhlCQkJIworIwlpbnN0cnVjdGlvbiBpcyBhIG5vcC4JCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlmbW92bV9keW5hbWljCitmbW92bV9keW5hbWljOgorCisjIGV4dHJhY3QgdGhlIGRhdGEgcmVnaXN0ZXIgaW4gd2hpY2ggdGhlIGJpdCBzdHJpbmcgcmVzaWRlcy4uLgorCW1vdi5iCQkxK0VYQ19FWFRXT1JEKCVhNiksJWQxCSMgZmV0Y2ggZXh0d29yZAorCWFuZGkudwkJJjB4NzAsJWQxCQkjIGV4dHJhY3QgcmVnIGJpdHMKKwlsc3IuYgkJJjB4NCwlZDEJCSMgc2hpZnQgaW50byBsbyBiaXRzCisKKyMgZmV0Y2ggdGhlIGJpdCBzdHJpbmcgaW50byBkMC4uLgorCWJzci5sCQlmZXRjaF9kcmVnCQkjIGZldGNoIHJlZyBzdHJpbmcKKworCWFuZGkubAkJJjB4MDAwMDAwZmYsJWQwCQkjIGtlZXAgb25seSBsbyBieXRlCisKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIHN0cmcKKwltb3YuYgkJKHRibF9mbW92bV9zaXplLncsJXBjLCVkMCksJWQwCisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzaXplCisJYnNyLmwJCWZtb3ZtX2NhbGNfZWEJCSMgY2FsY3VsYXRlIDxlYT4KKwltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIHNpemUKKwltb3YubAkJKCVzcCkrLCVkMQkJIyByZXN0b3JlIHN0cmcKKworIyBpZiB0aGUgYml0IHN0cmluZyBpcyBhIHplcm8sIHRoZW4gdGhlIG9wZXJhdGlvbiBpcyBhIG5vLW9wCisjIGJ1dCwgbWFrZSBzdXJlIHRoYXQgd2UndmUgY2FsY3VsYXRlZCBlYSBhbmQgYWR2YW5jZWQgdGhlIG9wd29yZCBwb2ludGVyCisJYmVxLncJCWZtb3ZtX2RhdGFfZG9uZQorCisjIHNlcGFyYXRlIG1vdmUgaW5zIGZyb20gbW92ZSBvdXRzLi4uCisJYnRzdAkJJjB4NSxFWENfRVhUV09SRCglYTYpCSMgaXMgaXQgYSBtb3ZlIGluIG9yIG91dD8KKwliZXEudwkJZm1vdm1fZGF0YV9pbgkJIyBpdCdzIGEgbW92ZSBvdXQKKworIyMjIyMjIyMjIyMjIworIyBNT1ZFIE9VVDogIworIyMjIyMjIyMjIyMjIworZm1vdm1fZGF0YV9vdXQ6CisJYnRzdAkJJjB4NCxFWENfRVhUV09SRCglYTYpCSMgY29udHJvbCBvciBwcmVkZWNyZW1lbnQ/CisJYm5lLncJCWZtb3ZtX291dF9jdHJsCQkjIGNvbnRyb2wKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZm1vdm1fb3V0X3ByZWRlYzoKKyMgZm9yIHByZWRlY3JlbWVudCBtb2RlLCB0aGUgYml0IHN0cmluZyBpcyB0aGUgb3Bwb3NpdGUgb2YgYm90aCBjb250cm9sCisjIG9wZXJhdGlvbnMgYW5kIHBvc3RpbmNyZW1lbnQgbW9kZS4gKGJpdDcgPSBGUDcgLi4uIGJpdDAgPSBGUDApCisjIGhlcmUsIHdlIGNvbnZlcnQgaXQgdG8gYmUganVzdCBsaWtlIHRoZSBvdGhlcnMuLi4KKwltb3YuYgkJKHRibF9mbW92bV9jb252ZXJ0LncsJXBjLCVkMS53KjEpLCVkMQorCisJYnRzdAkJJjB4NSxFWENfU1IoJWE2KQkjIHVzZXIgb3Igc3VwZXJ2aXNvciBtb2RlPworCWJlcS5iCQlmbW92bV9vdXRfY3RybAkJIyB1c2VyCisKK2Ztb3ZtX291dF9wcmVkZWNfczoKKwljbXBpLmIJCVNQQ09ORF9GTEcoJWE2KSwmbWRhN19mbGcgIyBpcyA8ZWE+IG1vZGUgLShhNyk/CisJYm5lLmIJCWZtb3ZtX291dF9jdHJsCisKKyMgdGhlIG9wZXJhdGlvbiB3YXMgdW5mb3J0dW5hdGVseSBhbjogZm1vdm0ueCBkbiwtKHNwKQorIyBjYWxsZWQgZnJvbSBzdXBlcnZpc29yIG1vZGUuCisjIHdlJ3JlIGFsc28gcGFzc2luZyAic2l6ZSIgYW5kICJzdHJnIiBiYWNrIHRvIHRoZSBjYWxsaW5nIHJvdXRpbmUKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZm1vdm1fb3V0X2N0cmw6CisJbW92LmwJCSVhMCwlYTEJCQkjIG1vdmUgPGVhPiB0byBhMQorCisJc3ViLmwJCSVkMCwlc3AJCQkjIHN1YnRyYWN0IHNpemUgb2YgZHVtcAorCWxlYQkJKCVzcCksJWEwCisKKwl0c3QuYgkJJWQxCQkJIyBzaG91bGQgRlAwIGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9vdXRfY3RybF9mcDEJIyBubworCisJbW92LmwJCTB4MCtFWENfRlAwKCVhNiksKCVhMCkrCSMgeWVzCisJbW92LmwJCTB4NCtFWENfRlAwKCVhNiksKCVhMCkrCisJbW92LmwJCTB4OCtFWENfRlAwKCVhNiksKCVhMCkrCisKK2Ztb3ZtX291dF9jdHJsX2ZwMToKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQMSBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fb3V0X2N0cmxfZnAyCSMgbm8KKworCW1vdi5sCQkweDArRVhDX0ZQMSglYTYpLCglYTApKwkjIHllcworCW1vdi5sCQkweDQrRVhDX0ZQMSglYTYpLCglYTApKworCW1vdi5sCQkweDgrRVhDX0ZQMSglYTYpLCglYTApKworCitmbW92bV9vdXRfY3RybF9mcDI6CisJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDIgYmUgbW92ZWQ/CisJYnBsLmIJCWZtb3ZtX291dF9jdHJsX2ZwMwkjIG5vCisKKwlmbW92bS54CQkmMHgyMCwoJWEwKQkJIyB5ZXMKKwlhZGQubAkJJjB4YywlYTAKKworZm1vdm1fb3V0X2N0cmxfZnAzOgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlAzIGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9vdXRfY3RybF9mcDQJIyBubworCisJZm1vdm0ueAkJJjB4MTAsKCVhMCkJCSMgeWVzCisJYWRkLmwJCSYweGMsJWEwCisKK2Ztb3ZtX291dF9jdHJsX2ZwNDoKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNCBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fb3V0X2N0cmxfZnA1CSMgbm8KKworCWZtb3ZtLngJCSYweDA4LCglYTApCQkjIHllcworCWFkZC5sCQkmMHhjLCVhMAorCitmbW92bV9vdXRfY3RybF9mcDU6CisJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDUgYmUgbW92ZWQ/CisJYnBsLmIJCWZtb3ZtX291dF9jdHJsX2ZwNgkjIG5vCisKKwlmbW92bS54CQkmMHgwNCwoJWEwKQkJIyB5ZXMKKwlhZGQubAkJJjB4YywlYTAKKworZm1vdm1fb3V0X2N0cmxfZnA2OgorCWxzbC5iCQkmMHgxLCVkMQkJIyBzaG91bGQgRlA2IGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9vdXRfY3RybF9mcDcJIyBubworCisJZm1vdm0ueAkJJjB4MDIsKCVhMCkJCSMgeWVzCisJYWRkLmwJCSYweGMsJWEwCisKK2Ztb3ZtX291dF9jdHJsX2ZwNzoKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNyBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fb3V0X2N0cmxfZG9uZQkjIG5vCisKKwlmbW92bS54CQkmMHgwMSwoJWEwKQkJIyB5ZXMKKwlhZGQubAkJJjB4YywlYTAKKworZm1vdm1fb3V0X2N0cmxfZG9uZToKKwltb3YubAkJJWExLExfU0NSMSglYTYpCisKKwlsZWEJCSglc3ApLCVhMAkJIyBwYXNzOiBzdXBlcnZpc29yIHNyYworCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgc2l6ZQorCWJzci5sCQlfZG1lbV93cml0ZQkJIyBjb3B5IGRhdGEgdG8gdXNlciBtZW0KKworCW1vdi5sCQkoJXNwKSssJWQwCisJYWRkLmwJCSVkMCwlc3AJCQkjIGNsZWFyIGZwcmVnIGRhdGEgZnJvbSBzdGFjaworCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBlcnI/CisJYm5lLncJCWZtb3ZtX291dF9lcnIJCSMgeWVzCisKKwlydHMKKworIyMjIyMjIyMjIyMjCisjIE1PVkUgSU46ICMKKyMjIyMjIyMjIyMjIworZm1vdm1fZGF0YV9pbjoKKwltb3YubAkJJWEwLExfU0NSMSglYTYpCisKKwlzdWIubAkJJWQwLCVzcAkJCSMgbWFrZSByb29tIGZvciBmcHJlZ3MKKwlsZWEJCSglc3ApLCVhMQorCisJbW92LmwJCSVkMSwtKCVzcCkJCSMgc2F2ZSBiaXQgc3RyaW5nIGZvciBsYXRlcgorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgIyBvZiBieXRlcworCisJYnNyLmwJCV9kbWVtX3JlYWQJCSMgY29weSBkYXRhIGZyb20gdXNlciBtZW0KKworCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJldHJpZXZlICMgb2YgYnl0ZXMKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkZmV0Y2ggZmFpbD8KKwlibmUudwkJZm1vdm1faW5fZXJyCQkjIHllcworCisJbW92LmwJCSglc3ApKywlZDEJCSMgbG9hZCBiaXQgc3RyaW5nCisKKwlsZWEJCSglc3ApLCVhMAkJIyBhZGRyIG9mIHN0YWNrCisKKwl0c3QuYgkJJWQxCQkJIyBzaG91bGQgRlAwIGJlIG1vdmVkPworCWJwbC5iCQlmbW92bV9kYXRhX2luX2ZwMQkjIG5vCisKKwltb3YubAkJKCVhMCkrLDB4MCtFWENfRlAwKCVhNikJIyB5ZXMKKwltb3YubAkJKCVhMCkrLDB4NCtFWENfRlAwKCVhNikKKwltb3YubAkJKCVhMCkrLDB4OCtFWENfRlAwKCVhNikKKworZm1vdm1fZGF0YV9pbl9mcDE6CisJbHNsLmIJCSYweDEsJWQxCQkjIHNob3VsZCBGUDEgYmUgbW92ZWQ/CisJYnBsLmIJCWZtb3ZtX2RhdGFfaW5fZnAyCSMgbm8KKworCW1vdi5sCQkoJWEwKSssMHgwK0VYQ19GUDEoJWE2KQkjIHllcworCW1vdi5sCQkoJWEwKSssMHg0K0VYQ19GUDEoJWE2KQorCW1vdi5sCQkoJWEwKSssMHg4K0VYQ19GUDEoJWE2KQorCitmbW92bV9kYXRhX2luX2ZwMjoKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQMiBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fZGF0YV9pbl9mcDMJIyBubworCisJZm1vdm0ueAkJKCVhMCkrLCYweDIwCQkjIHllcworCitmbW92bV9kYXRhX2luX2ZwMzoKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQMyBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fZGF0YV9pbl9mcDQJIyBubworCisJZm1vdm0ueAkJKCVhMCkrLCYweDEwCQkjIHllcworCitmbW92bV9kYXRhX2luX2ZwNDoKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNCBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fZGF0YV9pbl9mcDUJIyBubworCisJZm1vdm0ueAkJKCVhMCkrLCYweDA4CQkjIHllcworCitmbW92bV9kYXRhX2luX2ZwNToKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNSBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fZGF0YV9pbl9mcDYJIyBubworCisJZm1vdm0ueAkJKCVhMCkrLCYweDA0CQkjIHllcworCitmbW92bV9kYXRhX2luX2ZwNjoKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNiBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fZGF0YV9pbl9mcDcJIyBubworCisJZm1vdm0ueAkJKCVhMCkrLCYweDAyCQkjIHllcworCitmbW92bV9kYXRhX2luX2ZwNzoKKwlsc2wuYgkJJjB4MSwlZDEJCSMgc2hvdWxkIEZQNyBiZSBtb3ZlZD8KKwlicGwuYgkJZm1vdm1fZGF0YV9pbl9kb25lCSMgbm8KKworCWZtb3ZtLngJCSglYTApKywmMHgwMQkJIyB5ZXMKKworZm1vdm1fZGF0YV9pbl9kb25lOgorCWFkZC5sCQklZDAsJXNwCQkJIyByZW1vdmUgZnByZWdzIGZyb20gc3RhY2sKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitmbW92bV9kYXRhX2RvbmU6CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIHRhYmxlIGluZGV4ZWQgYnkgdGhlIG9wZXJhdGlvbidzIGJpdCBzdHJpbmcgdGhhdCBnaXZlcyB0aGUgbnVtYmVyCisjIG9mIGJ5dGVzIHRoYXQgd2lsbCBiZSBtb3ZlZC4KKyMKKyMgbnVtYmVyIG9mIGJ5dGVzID0gKCMgb2YgMSdzIGluIGJpdCBzdHJpbmcpICogMTIoYnl0ZXMvZnByZWcpCisjCit0YmxfZm1vdm1fc2l6ZToKKwlieXRlCTB4MDAsMHgwYywweDBjLDB4MTgsMHgwYywweDE4LDB4MTgsMHgyNAorCWJ5dGUJMHgwYywweDE4LDB4MTgsMHgyNCwweDE4LDB4MjQsMHgyNCwweDMwCisJYnl0ZQkweDBjLDB4MTgsMHgxOCwweDI0LDB4MTgsMHgyNCwweDI0LDB4MzAKKwlieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYworCWJ5dGUJMHgwYywweDE4LDB4MTgsMHgyNCwweDE4LDB4MjQsMHgyNCwweDMwCisJYnl0ZQkweDE4LDB4MjQsMHgyNCwweDMwLDB4MjQsMHgzMCwweDMwLDB4M2MKKwlieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYworCWJ5dGUJMHgyNCwweDMwLDB4MzAsMHgzYywweDMwLDB4M2MsMHgzYywweDQ4CisJYnl0ZQkweDBjLDB4MTgsMHgxOCwweDI0LDB4MTgsMHgyNCwweDI0LDB4MzAKKwlieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYworCWJ5dGUJMHgxOCwweDI0LDB4MjQsMHgzMCwweDI0LDB4MzAsMHgzMCwweDNjCisJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKKwlieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYworCWJ5dGUJMHgyNCwweDMwLDB4MzAsMHgzYywweDMwLDB4M2MsMHgzYywweDQ4CisJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKKwlieXRlCTB4MzAsMHgzYywweDNjLDB4NDgsMHgzYywweDQ4LDB4NDgsMHg1NAorCWJ5dGUJMHgwYywweDE4LDB4MTgsMHgyNCwweDE4LDB4MjQsMHgyNCwweDMwCisJYnl0ZQkweDE4LDB4MjQsMHgyNCwweDMwLDB4MjQsMHgzMCwweDMwLDB4M2MKKwlieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYworCWJ5dGUJMHgyNCwweDMwLDB4MzAsMHgzYywweDMwLDB4M2MsMHgzYywweDQ4CisJYnl0ZQkweDE4LDB4MjQsMHgyNCwweDMwLDB4MjQsMHgzMCwweDMwLDB4M2MKKwlieXRlCTB4MjQsMHgzMCwweDMwLDB4M2MsMHgzMCwweDNjLDB4M2MsMHg0OAorCWJ5dGUJMHgyNCwweDMwLDB4MzAsMHgzYywweDMwLDB4M2MsMHgzYywweDQ4CisJYnl0ZQkweDMwLDB4M2MsMHgzYywweDQ4LDB4M2MsMHg0OCwweDQ4LDB4NTQKKwlieXRlCTB4MTgsMHgyNCwweDI0LDB4MzAsMHgyNCwweDMwLDB4MzAsMHgzYworCWJ5dGUJMHgyNCwweDMwLDB4MzAsMHgzYywweDMwLDB4M2MsMHgzYywweDQ4CisJYnl0ZQkweDI0LDB4MzAsMHgzMCwweDNjLDB4MzAsMHgzYywweDNjLDB4NDgKKwlieXRlCTB4MzAsMHgzYywweDNjLDB4NDgsMHgzYywweDQ4LDB4NDgsMHg1NAorCWJ5dGUJMHgyNCwweDMwLDB4MzAsMHgzYywweDMwLDB4M2MsMHgzYywweDQ4CisJYnl0ZQkweDMwLDB4M2MsMHgzYywweDQ4LDB4M2MsMHg0OCwweDQ4LDB4NTQKKwlieXRlCTB4MzAsMHgzYywweDNjLDB4NDgsMHgzYywweDQ4LDB4NDgsMHg1NAorCWJ5dGUJMHgzYywweDQ4LDB4NDgsMHg1NCwweDQ4LDB4NTQsMHg1NCwweDYwCisKKyMKKyMgdGFibGUgdG8gY29udmVydCBhIHByZS1kZWNyZW1lbnQgYml0IHN0cmluZyBpbnRvIGEgcG9zdC1pbmNyZW1lbnQKKyMgb3IgY29udHJvbCBiaXQgc3RyaW5nLgorIyBleDoJMHgwMAk9PT4JMHgwMAorIwkweDAxCT09PgkweDgwCisjCTB4MDIJPT0+CTB4NDAKKyMJCS4KKyMJCS4KKyMJMHhmZAk9PT4JMHhiZgorIwkweGZlCT09PgkweDdmCisjCTB4ZmYJPT0+CTB4ZmYKKyMKK3RibF9mbW92bV9jb252ZXJ0OgorCWJ5dGUJMHgwMCwweDgwLDB4NDAsMHhjMCwweDIwLDB4YTAsMHg2MCwweGUwCisJYnl0ZQkweDEwLDB4OTAsMHg1MCwweGQwLDB4MzAsMHhiMCwweDcwLDB4ZjAKKwlieXRlCTB4MDgsMHg4OCwweDQ4LDB4YzgsMHgyOCwweGE4LDB4NjgsMHhlOAorCWJ5dGUJMHgxOCwweDk4LDB4NTgsMHhkOCwweDM4LDB4YjgsMHg3OCwweGY4CisJYnl0ZQkweDA0LDB4ODQsMHg0NCwweGM0LDB4MjQsMHhhNCwweDY0LDB4ZTQKKwlieXRlCTB4MTQsMHg5NCwweDU0LDB4ZDQsMHgzNCwweGI0LDB4NzQsMHhmNAorCWJ5dGUJMHgwYywweDhjLDB4NGMsMHhjYywweDJjLDB4YWMsMHg2YywweGVjCisJYnl0ZQkweDFjLDB4OWMsMHg1YywweGRjLDB4M2MsMHhiYywweDdjLDB4ZmMKKwlieXRlCTB4MDIsMHg4MiwweDQyLDB4YzIsMHgyMiwweGEyLDB4NjIsMHhlMgorCWJ5dGUJMHgxMiwweDkyLDB4NTIsMHhkMiwweDMyLDB4YjIsMHg3MiwweGYyCisJYnl0ZQkweDBhLDB4OGEsMHg0YSwweGNhLDB4MmEsMHhhYSwweDZhLDB4ZWEKKwlieXRlCTB4MWEsMHg5YSwweDVhLDB4ZGEsMHgzYSwweGJhLDB4N2EsMHhmYQorCWJ5dGUJMHgwNiwweDg2LDB4NDYsMHhjNiwweDI2LDB4YTYsMHg2NiwweGU2CisJYnl0ZQkweDE2LDB4OTYsMHg1NiwweGQ2LDB4MzYsMHhiNiwweDc2LDB4ZjYKKwlieXRlCTB4MGUsMHg4ZSwweDRlLDB4Y2UsMHgyZSwweGFlLDB4NmUsMHhlZQorCWJ5dGUJMHgxZSwweDllLDB4NWUsMHhkZSwweDNlLDB4YmUsMHg3ZSwweGZlCisJYnl0ZQkweDAxLDB4ODEsMHg0MSwweGMxLDB4MjEsMHhhMSwweDYxLDB4ZTEKKwlieXRlCTB4MTEsMHg5MSwweDUxLDB4ZDEsMHgzMSwweGIxLDB4NzEsMHhmMQorCWJ5dGUJMHgwOSwweDg5LDB4NDksMHhjOSwweDI5LDB4YTksMHg2OSwweGU5CisJYnl0ZQkweDE5LDB4OTksMHg1OSwweGQ5LDB4MzksMHhiOSwweDc5LDB4ZjkKKwlieXRlCTB4MDUsMHg4NSwweDQ1LDB4YzUsMHgyNSwweGE1LDB4NjUsMHhlNQorCWJ5dGUJMHgxNSwweDk1LDB4NTUsMHhkNSwweDM1LDB4YjUsMHg3NSwweGY1CisJYnl0ZQkweDBkLDB4OGQsMHg0ZCwweGNkLDB4MmQsMHhhZCwweDZkLDB4ZWQKKwlieXRlCTB4MWQsMHg5ZCwweDVkLDB4ZGQsMHgzZCwweGJkLDB4N2QsMHhmZAorCWJ5dGUJMHgwMywweDgzLDB4NDMsMHhjMywweDIzLDB4YTMsMHg2MywweGUzCisJYnl0ZQkweDEzLDB4OTMsMHg1MywweGQzLDB4MzMsMHhiMywweDczLDB4ZjMKKwlieXRlCTB4MGIsMHg4YiwweDRiLDB4Y2IsMHgyYiwweGFiLDB4NmIsMHhlYgorCWJ5dGUJMHgxYiwweDliLDB4NWIsMHhkYiwweDNiLDB4YmIsMHg3YiwweGZiCisJYnl0ZQkweDA3LDB4ODcsMHg0NywweGM3LDB4MjcsMHhhNywweDY3LDB4ZTcKKwlieXRlCTB4MTcsMHg5NywweDU3LDB4ZDcsMHgzNywweGI3LDB4NzcsMHhmNworCWJ5dGUJMHgwZiwweDhmLDB4NGYsMHhjZiwweDJmLDB4YWYsMHg2ZiwweGVmCisJYnl0ZQkweDFmLDB4OWYsMHg1ZiwweGRmLDB4M2YsMHhiZiwweDdmLDB4ZmYKKworCWdsb2JhbAkJZm1vdm1fY2FsY19lYQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgX2Ztb3ZtX2NhbGNfZWE6IGNhbGN1bGF0ZSBlZmZlY3RpdmUgYWRkcmVzcyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZm1vdm1fY2FsY19lYToKKwltb3YubAkJJWQwLCVhMAkJCSMgbW92ZSAjIGJ5dGVzIHRvIGEwCisKKyMgY3VycmVudGx5LCBNT0RFIGFuZCBSRUcgYXJlIHRha2VuIGZyb20gdGhlIEVYQ19PUFdPUkQuIHRoaXMgY291bGQgYmUKKyMgZWFzaWx5IGNoYW5nZWQgaWYgdGhleSB3ZXJlIGlucHV0cyBwYXNzZWQgaW4gcmVnaXN0ZXJzLgorCW1vdi53CQlFWENfT1BXT1JEKCVhNiksJWQwCSMgZmV0Y2ggb3Bjb2RlIHdvcmQKKwltb3YudwkJJWQwLCVkMQkJCSMgbWFrZSBhIGNvcHkKKworCWFuZGkudwkJJjB4M2YsJWQwCQkjIGV4dHJhY3QgbW9kZSBmaWVsZAorCWFuZGkubAkJJjB4NywlZDEJCSMgZXh0cmFjdCByZWcgIGZpZWxkCisKKyMganVtcCB0byB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbiBmb3IgZWFjaCB7TU9ERSxSRUd9IHBhaXIuCisJbW92LncJCSh0YmxfZmVhX21vZGUuYiwlcGMsJWQwLncqMiksJWQwICMgZmV0Y2ggam1wIGRpc3RhbmNlCisJam1wCQkodGJsX2ZlYV9tb2RlLmIsJXBjLCVkMC53KjEpICMgam1wIHRvIGNvcnJlY3QgZWEgbW9kZQorCisJc3diZWcJCSY2NAordGJsX2ZlYV9tb2RlOgorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCisJc2hvcnQJCWZhZGRyX2luZF9hMAktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfYTEJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2EyCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9hMwktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfYTQJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2E1CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9hNgktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfYTcJLQl0YmxfZmVhX21vZGUKKworCXNob3J0CQlmYWRkcl9pbmRfcF9hMAktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfcF9hMQktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfcF9hMgktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfcF9hMwktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfcF9hNAktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfcF9hNQktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfcF9hNgktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfcF9hNwktCXRibF9mZWFfbW9kZQorCisJc2hvcnQJCWZhZGRyX2luZF9tX2EwCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9tX2ExCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9tX2EyCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9tX2EzCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9tX2E0CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9tX2E1CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9tX2E2CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9tX2E3CS0JdGJsX2ZlYV9tb2RlCisKKwlzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTAJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTEJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTIJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTMJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTQJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTYJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2Rpc3BfYTcJLQl0YmxfZmVhX21vZGUKKworCXNob3J0CQlmYWRkcl9pbmRfZXh0CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9leHQJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2V4dAktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZXh0CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9leHQJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJZmFkZHJfaW5kX2V4dAktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmYWRkcl9pbmRfZXh0CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhZGRyX2luZF9leHQJLQl0YmxfZmVhX21vZGUKKworCXNob3J0CQlmYWJzX3Nob3J0CS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCWZhYnNfbG9uZwktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmcGNfaW5kCQktCXRibF9mZWFfbW9kZQorCXNob3J0CQlmcGNfaW5kX2V4dAktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKwlzaG9ydAkJdGJsX2ZlYV9tb2RlCS0JdGJsX2ZlYV9tb2RlCisJc2hvcnQJCXRibF9mZWFfbW9kZQktCXRibF9mZWFfbW9kZQorCXNob3J0CQl0YmxfZmVhX21vZGUJLQl0YmxfZmVhX21vZGUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdDogKEFuKSAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZmFkZHJfaW5kX2EwOgorCW1vdi5sCQlFWENfRFJFR1MrMHg4KCVhNiksJWEwCSMgR2V0IGN1cnJlbnQgYTAKKwlydHMKKworZmFkZHJfaW5kX2ExOgorCW1vdi5sCQlFWENfRFJFR1MrMHhjKCVhNiksJWEwCSMgR2V0IGN1cnJlbnQgYTEKKwlydHMKKworZmFkZHJfaW5kX2EyOgorCW1vdi5sCQklYTIsJWEwCQkJIyBHZXQgY3VycmVudCBhMgorCXJ0cworCitmYWRkcl9pbmRfYTM6CisJbW92LmwJCSVhMywlYTAJCQkjIEdldCBjdXJyZW50IGEzCisJcnRzCisKK2ZhZGRyX2luZF9hNDoKKwltb3YubAkJJWE0LCVhMAkJCSMgR2V0IGN1cnJlbnQgYTQKKwlydHMKKworZmFkZHJfaW5kX2E1OgorCW1vdi5sCQklYTUsJWEwCQkJIyBHZXQgY3VycmVudCBhNQorCXJ0cworCitmYWRkcl9pbmRfYTY6CisJbW92LmwJCSglYTYpLCVhMAkJIyBHZXQgY3VycmVudCBhNgorCXJ0cworCitmYWRkcl9pbmRfYTc6CisJbW92LmwJCUVYQ19BNyglYTYpLCVhMAkJIyBHZXQgY3VycmVudCBhNworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0IHcvIHBvc3RpbmNyZW1lbnQ6IChBbikrICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmYWRkcl9pbmRfcF9hMDoKKwltb3YubAkJRVhDX0RSRUdTKzB4OCglYTYpLCVkMAkjIEdldCBjdXJyZW50IGEwCisJbW92LmwJCSVkMCwlZDEKKwlhZGQubAkJJWEwLCVkMQkJCSMgSW5jcmVtZW50CisJbW92LmwJCSVkMSxFWENfRFJFR1MrMHg4KCVhNikJIyBTYXZlIGluY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCitmYWRkcl9pbmRfcF9hMToKKwltb3YubAkJRVhDX0RSRUdTKzB4YyglYTYpLCVkMAkjIEdldCBjdXJyZW50IGExCisJbW92LmwJCSVkMCwlZDEKKwlhZGQubAkJJWEwLCVkMQkJCSMgSW5jcmVtZW50CisJbW92LmwJCSVkMSxFWENfRFJFR1MrMHhjKCVhNikJIyBTYXZlIGluY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCitmYWRkcl9pbmRfcF9hMjoKKwltb3YubAkJJWEyLCVkMAkJCSMgR2V0IGN1cnJlbnQgYTIKKwltb3YubAkJJWQwLCVkMQorCWFkZC5sCQklYTAsJWQxCQkJIyBJbmNyZW1lbnQKKwltb3YubAkJJWQxLCVhMgkJCSMgU2F2ZSBpbmNyIHZhbHVlCisJbW92LmwJCSVkMCwlYTAKKwlydHMKKworZmFkZHJfaW5kX3BfYTM6CisJbW92LmwJCSVhMywlZDAJCQkjIEdldCBjdXJyZW50IGEzCisJbW92LmwJCSVkMCwlZDEKKwlhZGQubAkJJWEwLCVkMQkJCSMgSW5jcmVtZW50CisJbW92LmwJCSVkMSwlYTMJCQkjIFNhdmUgaW5jciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisJcnRzCisKK2ZhZGRyX2luZF9wX2E0OgorCW1vdi5sCQklYTQsJWQwCQkJIyBHZXQgY3VycmVudCBhNAorCW1vdi5sCQklZDAsJWQxCisJYWRkLmwJCSVhMCwlZDEJCQkjIEluY3JlbWVudAorCW1vdi5sCQklZDEsJWE0CQkJIyBTYXZlIGluY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCitmYWRkcl9pbmRfcF9hNToKKwltb3YubAkJJWE1LCVkMAkJCSMgR2V0IGN1cnJlbnQgYTUKKwltb3YubAkJJWQwLCVkMQorCWFkZC5sCQklYTAsJWQxCQkJIyBJbmNyZW1lbnQKKwltb3YubAkJJWQxLCVhNQkJCSMgU2F2ZSBpbmNyIHZhbHVlCisJbW92LmwJCSVkMCwlYTAKKwlydHMKKworZmFkZHJfaW5kX3BfYTY6CisJbW92LmwJCSglYTYpLCVkMAkJIyBHZXQgY3VycmVudCBhNgorCW1vdi5sCQklZDAsJWQxCisJYWRkLmwJCSVhMCwlZDEJCQkjIEluY3JlbWVudAorCW1vdi5sCQklZDEsKCVhNikJCSMgU2F2ZSBpbmNyIHZhbHVlCisJbW92LmwJCSVkMCwlYTAKKwlydHMKKworZmFkZHJfaW5kX3BfYTc6CisJbW92LmIJCSZtaWE3X2ZsZyxTUENPTkRfRkxHKCVhNikgIyBzZXQgInNwZWNpYWwgY2FzZSIgZmxhZworCisJbW92LmwJCUVYQ19BNyglYTYpLCVkMAkJIyBHZXQgY3VycmVudCBhNworCW1vdi5sCQklZDAsJWQxCisJYWRkLmwJCSVhMCwlZDEJCQkjIEluY3JlbWVudAorCW1vdi5sCQklZDEsRVhDX0E3KCVhNikJCSMgU2F2ZSBpbmNyIHZhbHVlCisJbW92LmwJCSVkMCwlYTAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0IHcvIHByZWRlY3JlbWVudDogLShBbikgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZmFkZHJfaW5kX21fYTA6CisJbW92LmwJCUVYQ19EUkVHUysweDgoJWE2KSwlZDAJIyBHZXQgY3VycmVudCBhMAorCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKKwltb3YubAkJJWQwLEVYQ19EUkVHUysweDgoJWE2KQkjIFNhdmUgZGVjciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisJcnRzCisKK2ZhZGRyX2luZF9tX2ExOgorCW1vdi5sCQlFWENfRFJFR1MrMHhjKCVhNiksJWQwCSMgR2V0IGN1cnJlbnQgYTEKKwlzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50CisJbW92LmwJCSVkMCxFWENfRFJFR1MrMHhjKCVhNikJIyBTYXZlIGRlY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCitmYWRkcl9pbmRfbV9hMjoKKwltb3YubAkJJWEyLCVkMAkJCSMgR2V0IGN1cnJlbnQgYTIKKwlzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50CisJbW92LmwJCSVkMCwlYTIJCQkjIFNhdmUgZGVjciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisJcnRzCisKK2ZhZGRyX2luZF9tX2EzOgorCW1vdi5sCQklYTMsJWQwCQkJIyBHZXQgY3VycmVudCBhMworCXN1Yi5sCQklYTAsJWQwCQkJIyBEZWNyZW1lbnQKKwltb3YubAkJJWQwLCVhMwkJCSMgU2F2ZSBkZWNyIHZhbHVlCisJbW92LmwJCSVkMCwlYTAKKwlydHMKKworZmFkZHJfaW5kX21fYTQ6CisJbW92LmwJCSVhNCwlZDAJCQkjIEdldCBjdXJyZW50IGE0CisJc3ViLmwJCSVhMCwlZDAJCQkjIERlY3JlbWVudAorCW1vdi5sCQklZDAsJWE0CQkJIyBTYXZlIGRlY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCitmYWRkcl9pbmRfbV9hNToKKwltb3YubAkJJWE1LCVkMAkJCSMgR2V0IGN1cnJlbnQgYTUKKwlzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50CisJbW92LmwJCSVkMCwlYTUJCQkjIFNhdmUgZGVjciB2YWx1ZQorCW1vdi5sCQklZDAsJWEwCisJcnRzCisKK2ZhZGRyX2luZF9tX2E2OgorCW1vdi5sCQkoJWE2KSwlZDAJCSMgR2V0IGN1cnJlbnQgYTYKKwlzdWIubAkJJWEwLCVkMAkJCSMgRGVjcmVtZW50CisJbW92LmwJCSVkMCwoJWE2KQkJIyBTYXZlIGRlY3IgdmFsdWUKKwltb3YubAkJJWQwLCVhMAorCXJ0cworCitmYWRkcl9pbmRfbV9hNzoKKwltb3YuYgkJJm1kYTdfZmxnLFNQQ09ORF9GTEcoJWE2KSAjIHNldCAic3BlY2lhbCBjYXNlIiBmbGFnCisKKwltb3YubAkJRVhDX0E3KCVhNiksJWQwCQkjIEdldCBjdXJyZW50IGE3CisJc3ViLmwJCSVhMCwlZDAJCQkjIERlY3JlbWVudAorCW1vdi5sCQklZDAsRVhDX0E3KCVhNikJCSMgU2F2ZSBkZWNyIHZhbHVlCisJbW92LmwJCSVkMCwlYTAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdCB3LyBkaXNwbGFjZW1lbnQ6IChkMTYsIEFuKSAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZmFkZHJfaW5kX2Rpc3BfYTA6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCisJYWRkLmwJCUVYQ19EUkVHUysweDgoJWE2KSwlYTAJIyBhMCArIGQxNgorCXJ0cworCitmYWRkcl9pbmRfZGlzcF9hMToKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CisKKwlhZGQubAkJRVhDX0RSRUdTKzB4YyglYTYpLCVhMAkjIGExICsgZDE2CisJcnRzCisKK2ZhZGRyX2luZF9kaXNwX2EyOgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKworCWFkZC5sCQklYTIsJWEwCQkJIyBhMiArIGQxNgorCXJ0cworCitmYWRkcl9pbmRfZGlzcF9hMzoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CisKKwlhZGQubAkJJWEzLCVhMAkJCSMgYTMgKyBkMTYKKwlydHMKKworZmFkZHJfaW5kX2Rpc3BfYTQ6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LncJCSVkMCwlYTAJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCisJYWRkLmwJCSVhNCwlYTAJCQkjIGE0ICsgZDE2CisJcnRzCisKK2ZhZGRyX2luZF9kaXNwX2E1OgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKworCWFkZC5sCQklYTUsJWEwCQkJIyBhNSArIGQxNgorCXJ0cworCitmYWRkcl9pbmRfZGlzcF9hNjoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YudwkJJWQwLCVhMAkJCSMgc2lnbiBleHRlbmQgZGlzcGxhY2VtZW50CisKKwlhZGQubAkJKCVhNiksJWEwCQkjIGE2ICsgZDE2CisJcnRzCisKK2ZhZGRyX2luZF9kaXNwX2E3OgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKworCWFkZC5sCQlFWENfQTcoJWE2KSwlYTAJCSMgYTcgKyBkMTYKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3Qgdy8gaW5kZXgoOC1iaXQgZGlzcGxhY2VtZW50KTogKGQ4LCBBbiwgWG4pICMKKyMgICAgIiAgICAgICAiICAgICAgICAgIiAgICB3LyAgICIgIChiYXNlIGRpc3BsYWNlbWVudCk6IChiZCwgQW4sIFhuKSAgIworIyBNZW1vcnkgaW5kaXJlY3QgcG9zdGluZGV4ZWQ6IChbYmQsIEFuXSwgWG4sIG9kKQkJICAgICAgICMKKyMgTWVtb3J5IGluZGlyZWN0IHByZWluZGV4ZWQ6IChbYmQsIEFuLCBYbl0sIG9kKQkJICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZmFkZHJfaW5kX2V4dDoKKwlhZGRxLmwJCSYweDgsJWQxCisJYnNyLmwJCWZldGNoX2RyZWcJCSMgZmV0Y2ggYmFzZSBhcmVnCisJbW92LmwJCSVkMCwtKCVzcCkKKworCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAkJIyBmZXRjaCBleHR3b3JkIGluIGQwCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LmwJCSglc3ApKywlYTAKKworCWJ0c3QJCSYweDgsJWQwCisJYm5lLncJCWZjYWxjX21lbV9pbmQKKworCW1vdi5sCQklZDAsTF9TQ1IxKCVhNikJCSMgaG9sZCBvcHdvcmQKKworCW1vdi5sCQklZDAsJWQxCisJcm9sLncJCSYweDQsJWQxCisJYW5kaS53CQkmMHhmLCVkMQkJIyBleHRyYWN0IGluZGV4IHJlZ25vCisKKyMgY291bnQgb24gZmV0Y2hfZHJlZygpIG5vdCB0byBhbHRlciBhMC4uLgorCWJzci5sCQlmZXRjaF9kcmVnCQkjIGZldGNoIGluZGV4CisKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LmwJCUxfU0NSMSglYTYpLCVkMgkJIyBmZXRjaCBvcHdvcmQKKworCWJ0c3QJCSYweGIsJWQyCQkjIGlzIGl0IHdvcmQgb3IgbG9uZz8KKwlibmUuYgkJZmFpaThfbG9uZworCWV4dC5sCQklZDAJCQkjIHNpZ24gZXh0ZW5kIHdvcmQgaW5kZXgKK2ZhaWk4X2xvbmc6CisJbW92LmwJCSVkMiwlZDEKKwlyb2wudwkJJjB4NywlZDEKKwlhbmRpLmwJCSYweDMsJWQxCQkjIGV4dHJhY3Qgc2NhbGUgdmFsdWUKKworCWxzbC5sCQklZDEsJWQwCQkJIyBzaGlmdCBpbmRleCBieSBzY2FsZQorCisJZXh0Yi5sCQklZDIJCQkjIHNpZ24gZXh0ZW5kIGRpc3BsYWNlbWVudAorCWFkZC5sCQklZDIsJWQwCQkJIyBpbmRleCArIGRpc3AKKwlhZGQubAkJJWQwLCVhMAkJCSMgQW4gKyAoaW5kZXggKyBkaXNwKQorCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBvbGQgZDIKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFic29sdXRlIHNob3J0OiAoWFhYKS5XICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZmFic19zaG9ydDoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQJCSMgZmV0Y2ggc2hvcnQgYWRkcmVzcworCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyByZXR1cm4gPGVhPiBpbiBhMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBYnNvbHV0ZSBsb25nOiAoWFhYKS5MICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmYWJzX2xvbmc6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIGxvbmcgYWRkcmVzcworCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi5sCQklZDAsJWEwCQkJIyByZXR1cm4gPGVhPiBpbiBhMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFByb2dyYW0gY291bnRlciBpbmRpcmVjdCB3LyBkaXNwbGFjZW1lbnQ6IChkMTYsIFBDKSAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmcGNfaW5kOgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDIsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfd29yZAkJIyBmZXRjaCB3b3JkIGRpc3BsYWNlbWVudAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi53CQklZDAsJWEwCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKworCWFkZC5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIHBjICsgZDE2CisKKyMgX2ltZW1fcmVhZF93b3JkKCkgaW5jcmVhc2VkIHRoZSBleHR3cHRyIGJ5IDIuIG5lZWQgdG8gYWRqdXN0IGhlcmUuCisJc3VicS5sCQkmMHgyLCVhMAkJIyBhZGp1c3QgPGVhPgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFBDIGluZGlyZWN0IHcvIGluZGV4KDgtYml0IGRpc3BsYWNlbWVudCk6IChkOCwgUEMsIEFuKSAjCisjICIgICAgICIgICAgIHcvICAgIiAgKGJhc2UgZGlzcGxhY2VtZW50KTogKGJkLCBQQywgQW4pICAjCisjIFBDIG1lbW9yeSBpbmRpcmVjdCBwb3N0aW5kZXhlZDogKFtiZCwgUENdLCBYbiwgb2QpICAgICAjCisjIFBDIG1lbW9yeSBpbmRpcmVjdCBwcmVpbmRleGVkOiAoW2JkLCBQQywgWG5dLCBvZCkgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmcGNfaW5kX2V4dDoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQJCSMgZmV0Y2ggZXh0IHdvcmQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBwdXQgYmFzZSBpbiBhMAorCXN1YnEubAkJJjB4MiwlYTAJCSMgYWRqdXN0IGJhc2UKKworCWJ0c3QJCSYweDgsJWQwCQkjIGlzIGRpc3Agb25seSA4IGJpdHM/CisJYm5lLncJCWZjYWxjX21lbV9pbmQJCSMgY2FsYyBtZW1vcnkgaW5kaXJlY3QKKworCW1vdi5sCQklZDAsTF9TQ1IxKCVhNikJCSMgc3RvcmUgb3B3b3JkCisKKwltb3YubAkJJWQwLCVkMQkJCSMgbWFrZSBleHR3b3JkIGNvcHkKKwlyb2wudwkJJjB4NCwlZDEJCSMgcm90YXRlIHJlZyBudW0gaW50byBwbGFjZQorCWFuZGkudwkJJjB4ZiwlZDEJCSMgZXh0cmFjdCByZWdpc3RlciBudW1iZXIKKworIyBjb3VudCBvbiBmZXRjaF9kcmVnKCkgbm90IHRvIGFsdGVyIGEwLi4uCisJYnNyLmwJCWZldGNoX2RyZWcJCSMgZmV0Y2ggaW5kZXgKKworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YubAkJTF9TQ1IxKCVhNiksJWQyCQkjIGZldGNoIG9wd29yZAorCisJYnRzdAkJJjB4YiwlZDIJCSMgaXMgaW5kZXggd29yZCBvciBsb25nPworCWJuZS5iCQlmcGlpOF9sb25nCQkjIGxvbmcKKwlleHQubAkJJWQwCQkJIyBzaWduIGV4dGVuZCB3b3JkIGluZGV4CitmcGlpOF9sb25nOgorCW1vdi5sCQklZDIsJWQxCisJcm9sLncJCSYweDcsJWQxCQkjIHJvdGF0ZSBzY2FsZSB2YWx1ZSBpbnRvIHBsYWNlCisJYW5kaS5sCQkmMHgzLCVkMQkJIyBleHRyYWN0IHNjYWxlIHZhbHVlCisKKwlsc2wubAkJJWQxLCVkMAkJCSMgc2hpZnQgaW5kZXggYnkgc2NhbGUKKworCWV4dGIubAkJJWQyCQkJIyBzaWduIGV4dGVuZCBkaXNwbGFjZW1lbnQKKwlhZGQubAkJJWQyLCVkMAkJCSMgZGlzcCArIGluZGV4CisJYWRkLmwJCSVkMCwlYTAJCQkjIEFuICsgKGluZGV4ICsgZGlzcCkKKworCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgdGVtcCByZWdpc3RlcgorCXJ0cworCisjIGQyID0gaW5kZXgKKyMgZDMgPSBiYXNlCisjIGQ0ID0gb2QKKyMgZDUgPSBleHR3b3JkCitmY2FsY19tZW1faW5kOgorCWJ0c3QJCSYweDYsJWQwCQkjIGlzIHRoZSBpbmRleCBzdXBwcmVzc2VkPworCWJlcS5iCQlmY2FsY19pbmRleAorCisJbW92bS5sCQkmMHgzYzAwLC0oJXNwKQkJIyBzYXZlIGQyLWQ1CisKKwltb3YubAkJJWQwLCVkNQkJCSMgcHV0IGV4dHdvcmQgaW4gZDUKKwltb3YubAkJJWEwLCVkMwkJCSMgcHV0IGJhc2UgaW4gZDMKKworCWNsci5sCQklZDIJCQkjIHllcywgc28gaW5kZXggPSAwCisJYnJhLmIJCWZiYXNlX3N1cHBfY2sKKworIyBpbmRleDoKK2ZjYWxjX2luZGV4OgorCW1vdi5sCQklZDAsTF9TQ1IxKCVhNikJCSMgc2F2ZSBkMCAob3B3b3JkKQorCWJmZXh0dQkJJWQweyYxNjomNH0sJWQxCQkjIGZldGNoIGRyZWcgaW5kZXgKKwlic3IubAkJZmV0Y2hfZHJlZworCisJbW92bS5sCQkmMHgzYzAwLC0oJXNwKQkJIyBzYXZlIGQyLWQ1CisJbW92LmwJCSVkMCwlZDIJCQkjIHB1dCBpbmRleCBpbiBkMgorCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDUKKwltb3YubAkJJWEwLCVkMworCisJYnRzdAkJJjB4YiwlZDUJCSMgaXMgaW5kZXggd29yZCBvciBsb25nPworCWJuZS5iCQlmbm9fZXh0CisJZXh0LmwJCSVkMgorCitmbm9fZXh0OgorCWJmZXh0dQkJJWQ1eyYyMTomMn0sJWQwCisJbHNsLmwJCSVkMCwlZDIKKworIyBiYXNlIGFkZHJlc3MgKHBhc3NlZCBhcyBwYXJhbWV0ZXIgaW4gZDMpOgorIyB3ZSBjbGVhciB0aGUgdmFsdWUgaGVyZSBpZiBpdCBzaG91bGQgYWN0dWFsbHkgYmUgc3VwcHJlc3NlZC4KK2ZiYXNlX3N1cHBfY2s6CisJYnRzdAkJJjB4NywlZDUJCSMgaXMgdGhlIGJkIHN1cHByZXNzZWQ/CisJYmVxLmIJCWZub19iYXNlX3N1cAorCWNsci5sCQklZDMKKworIyBiYXNlIGRpc3BsYWNlbWVudDoKK2Zub19iYXNlX3N1cDoKKwliZmV4dHUJCSVkNXsmMjY6JjJ9LCVkMAkJIyBnZXQgYmQgc2l6ZQorIwliZXEubAkJZm1vdm1fZXJyb3IJCSMgaWYgKHNpemUgPT0gMCkgaXQncyByZXNlcnZlZAorCisJY21waS5iCQklZDAsJjB4MgorCWJsdC5iCQlmbm9fYmQKKwliZXEuYgkJZmdldF93b3JkX2JkCisKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHg0LEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX2xvbmcKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJZmNlYV9pYWNjCQkjIHllcworCisJYnJhLmIJCWZjaGtfaW5kCisKK2ZnZXRfd29yZF9iZDoKKwltb3YubAkJRVhDX0VYVFdQVFIoJWE2KSwlYTAJIyBmZXRjaCBpbnN0cnVjdGlvbiBhZGRyCisJYWRkcS5sCQkmMHgyLEVYQ19FWFRXUFRSKCVhNikJIyBpbmNyIGluc3RydWN0aW9uIHB0cgorCWJzci5sCQlfaW1lbV9yZWFkX3dvcmQKKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJZmNlYV9pYWNjCQkjIHllcworCisJZXh0LmwJCSVkMAkJCSMgc2lnbiBleHRlbmQgYmQKKworZmNoa19pbmQ6CisJYWRkLmwJCSVkMCwlZDMJCQkjIGJhc2UgKz0gYmQKKworIyBvdXRlciBkaXNwbGFjZW1lbnQ6Citmbm9fYmQ6CisJYmZleHR1CQklZDV7JjMwOiYyfSwlZDAJCSMgaXMgb2Qgc3VwcHJlc3NlZD8KKwliZXEudwkJZmFpaV9iZAorCisJY21waS5iCQklZDAsJjB4MgorCWJsdC5iCQlmbnVsbF9vZAorCWJlcS5iCQlmd29yZF9vZAorCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWZjZWFfaWFjYwkJIyB5ZXMKKworCWJyYS5iCQlmYWRkX3RoZW0KKworZndvcmRfb2Q6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4MixFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF93b3JkCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWZjZWFfaWFjYwkJIyB5ZXMKKworCWV4dC5sCQklZDAJCQkjIHNpZ24gZXh0ZW5kIG9kCisJYnJhLmIJCWZhZGRfdGhlbQorCitmbnVsbF9vZDoKKwljbHIubAkJJWQwCisKK2ZhZGRfdGhlbToKKwltb3YubAkJJWQwLCVkNAorCisJYnRzdAkJJjB4MiwlZDUJCSMgcHJlIG9yIHBvc3QgaW5kZXhpbmc/CisJYmVxLmIJCWZwcmVfaW5kZXhlZAorCisJbW92LmwJCSVkMywlYTAKKwlic3IubAkJX2RtZW1fcmVhZF9sb25nCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZGZldGNoIGZhaWw/CisJYm5lLncJCWZjZWFfZXJyCQkjIHllcworCisJYWRkLmwJCSVkMiwlZDAJCQkjIDxlYT4gKz0gaW5kZXgKKwlhZGQubAkJJWQ0LCVkMAkJCSMgPGVhPiArPSBvZAorCWJyYS5iCQlmZG9uZV9lYQorCitmcHJlX2luZGV4ZWQ6CisJYWRkLmwJCSVkMiwlZDMJCQkjIHByZWluZGV4aW5nCisJbW92LmwJCSVkMywlYTAKKwlic3IubAkJX2RtZW1fcmVhZF9sb25nCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZGZldGNoIGZhaWw/CisJYm5lLncJCWZjZWFfZXJyCQkjIHllcworCisJYWRkLmwJCSVkNCwlZDAJCQkjIGVhICs9IG9kCisJYnJhLmIJCWZkb25lX2VhCisKK2ZhaWlfYmQ6CisJYWRkLmwJCSVkMiwlZDMJCQkjIGVhID0gKGJhc2UgKyBiZCkgKyBpbmRleAorCW1vdi5sCQklZDMsJWQwCitmZG9uZV9lYToKKwltb3YubAkJJWQwLCVhMAorCisJbW92bS5sCQkoJXNwKSssJjB4MDAzYwkJIyByZXN0b3JlIGQyLWQ1CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZmNlYV9lcnI6CisJbW92LmwJCSVkMywlYTAKKworCW1vdm0ubAkJKCVzcCkrLCYweDAwM2MJCSMgcmVzdG9yZSBkMi1kNQorCW1vdi53CQkmMHgwMTAxLCVkMAorCWJyYS5sCQlpZWFfZGFjYworCitmY2VhX2lhY2M6CisJbW92bS5sCQkoJXNwKSssJjB4MDAzYwkJIyByZXN0b3JlIGQyLWQ1CisJYnJhLmwJCWllYV9pYWNjCisKK2Ztb3ZtX291dF9lcnI6CisJYnNyLmwJCXJlc3RvcmUKKwltb3YudwkJJjB4MDBlMSwlZDAKKwlicmEuYgkJZm1vdm1fZXJyCisKK2Ztb3ZtX2luX2VycjoKKwlic3IubAkJcmVzdG9yZQorCW1vdi53CQkmMHgwMTYxLCVkMAorCitmbW92bV9lcnI6CisJbW92LmwJCUxfU0NSMSglYTYpLCVhMAorCWJyYS5sCQlpZWFfZGFjYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZtb3ZtX2N0cmwoKTogZW11bGF0ZSBmbW92bS5sIG9mIGNvbnRyb2wgcmVnaXN0ZXJzIGluc3RyCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9pbWVtX3JlYWRfbG9uZygpIC0gcmVhZCBsb25nd29yZCBmcm9tIG1lbW9yeQkJCSMKKyMJaWVhX2lhY2MoKSAtIF9pbWVtX3JlYWRfbG9uZygpIGZhaWxlZDsgZXJyb3IgcmVjb3ZlcnkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUlmIF9pbWVtX3JlYWRfbG9uZygpIGRvZXNuJ3QgZmFpbDoJCQkJIworIwkJVVNFUl9GUENSKGE2KSAgPSBuZXcgRlBDUiB2YWx1ZQkJCQkjCisjCQlVU0VSX0ZQU1IoYTYpICA9IG5ldyBGUFNSIHZhbHVlCQkJCSMKKyMJCVVTRVJfRlBJQVIoYTYpID0gbmV3IEZQSUFSIHZhbHVlCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRGVjb2RlIHRoZSBpbnN0cnVjdGlvbiB0eXBlIGJ5IGxvb2tpbmcgYXQgdGhlIGV4dGVuc2lvbiB3b3JkCSMKKyMgaW4gb3JkZXIgdG8gc2VlIGhvdyBtYW55IGNvbnRyb2wgcmVnaXN0ZXJzIHRvIGZldGNoIGZyb20gbWVtb3J5LgkjCisjIEZldGNoIHRoZW0gdXNpbmcgX2ltZW1fcmVhZF9sb25nKCkuIElmIHRoaXMgZmV0Y2ggZmFpbHMsIGV4aXQgdGhyb3VnaAkjCisjIHRoZSBzcGVjaWFsIGFjY2VzcyBlcnJvciBleGl0IGhhbmRsZXIgaWVhX2lhY2MoKS4JCQkjCisjCQkJCQkJCQkJIworIyBJbnN0cnVjdGlvbiB3b3JkIGRlY29kaW5nOgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCWZtb3ZlbS5sICM8ZGF0YT4sIHtGUElBUiZ8RlBDUiZ8RlBTUn0JCQkJIworIwkJCQkJCQkJCSMKKyMJCVdPUkQxCQkJV09SRDIJCQkJIworIwkxMTExIDAwMTAgMDAgMTExMTAwCTEwMCQgJCQwMCAwMDAwIDAwMDAJCQkjCisjCQkJCQkJCQkJIworIwkkJCQgKDEwMCk6IEZQQ1IJCQkJCQkJIworIwkgICAgKDAxMCk6IEZQU1IJCQkJCQkJIworIwkgICAgKDAwMSk6IEZQSUFSCQkJCQkJIworIwkgICAgKDAwMCk6IEZQSUFSCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJZm1vdm1fY3RybAorZm1vdm1fY3RybDoKKwltb3YuYgkJRVhDX0VYVFdPUkQoJWE2KSwlZDAJIyBmZXRjaCByZWcgc2VsZWN0IGJpdHMKKwljbXBpLmIJCSVkMCwmMHg5YwkJIyBmcGNyICYgZnBzciAmIGZwaWFyID8KKwliZXEudwkJZmN0cmxfaW5fNwkJIyB5ZXMKKwljbXBpLmIJCSVkMCwmMHg5OAkJIyBmcGNyICYgZnBzciA/CisJYmVxLncJCWZjdHJsX2luXzYJCSMgeWVzCisJY21waS5iCQklZDAsJjB4OTQJCSMgZnBjciAmIGZwaWFyID8KKwliZXEuYgkJZmN0cmxfaW5fNQkJIyB5ZXMKKworIyBmbW92ZW0ubCAjPGRhdGE+LCBmcHNyL2ZwaWFyCitmY3RybF9pbl8zOgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBGUFNSIGZyb20gbWVtCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LmwJCSVkMCxVU0VSX0ZQU1IoJWE2KQkjIHN0b3JlIG5ldyBGUFNSIHRvIHN0YWNrCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQSUFSIGZyb20gbWVtCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LmwJCSVkMCxVU0VSX0ZQSUFSKCVhNikJIyBzdG9yZSBuZXcgRlBJQVIgdG8gc3RhY2sKKwlydHMKKworIyBmbW92ZW0ubCAjPGRhdGE+LCBmcGNyL2ZwaWFyCitmY3RybF9pbl81OgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBGUENSIGZyb20gbWVtCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LmwJCSVkMCxVU0VSX0ZQQ1IoJWE2KQkjIHN0b3JlIG5ldyBGUENSIHRvIHN0YWNrCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQSUFSIGZyb20gbWVtCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LmwJCSVkMCxVU0VSX0ZQSUFSKCVhNikJIyBzdG9yZSBuZXcgRlBJQVIgdG8gc3RhY2sKKwlydHMKKworIyBmbW92ZW0ubCAjPGRhdGE+LCBmcGNyL2Zwc3IKK2ZjdHJsX2luXzY6CisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQQ1IgZnJvbSBtZW0KKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YubAkJJWQwLFVTRVJfRlBDUiglYTYpCSMgc3RvcmUgbmV3IEZQQ1IgdG8gbWVtCisJbW92LmwJCUVYQ19FWFRXUFRSKCVhNiksJWEwCSMgZmV0Y2ggaW5zdHJ1Y3Rpb24gYWRkcgorCWFkZHEubAkJJjB4NCxFWENfRVhUV1BUUiglYTYpCSMgaW5jciBpbnN0cnVjdGlvbiBwdHIKKwlic3IubAkJX2ltZW1fcmVhZF9sb25nCQkjIGZldGNoIEZQU1IgZnJvbSBtZW0KKworCXRzdC5sCQklZDEJCQkjIGRpZCBpZmV0Y2ggZmFpbD8KKwlibmUubAkJaWVhX2lhY2MJCSMgeWVzCisKKwltb3YubAkJJWQwLFVTRVJfRlBTUiglYTYpCSMgc3RvcmUgbmV3IEZQU1IgdG8gbWVtCisJcnRzCisKKyMgZm1vdmVtLmwgIzxkYXRhPiwgZnBjci9mcHNyL2ZwaWFyCitmY3RybF9pbl83OgorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBGUENSIGZyb20gbWVtCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LmwJCSVkMCxVU0VSX0ZQQ1IoJWE2KQkjIHN0b3JlIG5ldyBGUENSIHRvIG1lbQorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBGUFNSIGZyb20gbWVtCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgaWZldGNoIGZhaWw/CisJYm5lLmwJCWllYV9pYWNjCQkjIHllcworCisJbW92LmwJCSVkMCxVU0VSX0ZQU1IoJWE2KQkjIHN0b3JlIG5ldyBGUFNSIHRvIG1lbQorCW1vdi5sCQlFWENfRVhUV1BUUiglYTYpLCVhMAkjIGZldGNoIGluc3RydWN0aW9uIGFkZHIKKwlhZGRxLmwJCSYweDQsRVhDX0VYVFdQVFIoJWE2KQkjIGluY3IgaW5zdHJ1Y3Rpb24gcHRyCisJYnNyLmwJCV9pbWVtX3JlYWRfbG9uZwkJIyBmZXRjaCBGUElBUiBmcm9tIG1lbQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGlmZXRjaCBmYWlsPworCWJuZS5sCQlpZWFfaWFjYwkJIyB5ZXMKKworCW1vdi5sCQklZDAsVVNFUl9GUElBUiglYTYpCSMgc3RvcmUgbmV3IEZQSUFSIHRvIG1lbQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWFkZHN1Yl9zY2FsZXIyKCk6IHNjYWxlIGlucHV0cyB0byBmYWRkL2ZzdWIgc3VjaCB0aGF0IG5vCSMKKyMJCQkgIE9WRkwvVU5GTCBleGNlcHRpb25zIHdpbGwgcmVzdWx0CQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlub3JtKCkgLSBub3JtYWxpemUgbWFudGlzc2EgYWZ0ZXIgYWRqdXN0aW5nIGV4cG9uZW50CQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGUF9TUkMoYTYpID0gZnAgb3AxKHNyYykJCQkJCSMKKyMJRlBfRFNUKGE2KSA9IGZwIG9wMihkc3QpCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGUF9TUkMoYTYpID0gZnAgb3AxIHNjYWxlZChzcmMpCQkJCQkjCisjCUZQX0RTVChhNikgPSBmcCBvcDIgc2NhbGVkKGRzdCkJCQkJCSMKKyMJZDAgICAgICAgICA9IHNjYWxlIGFtb3VudAkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSWYgdGhlIERTVCBleHBvbmVudCBpcyA+IHRoZSBTUkMgZXhwb25lbnQsIHNldCB0aGUgRFNUIGV4cG9uZW50CSMKKyMgZXF1YWwgdG8gMHgzZmZmIGFuZCBzY2FsZSB0aGUgU1JDIGV4cG9uZW50IGJ5IHRoZSB2YWx1ZSB0aGF0IHRoZQkjCisjIERTVCBleHBvbmVudCB3YXMgc2NhbGVkIGJ5LiBJZiB0aGUgU1JDIGV4cG9uZW50IGlzIGdyZWF0ZXIgb3IgZXF1YWwsCSMKKyMgZG8gdGhlIG9wcG9zaXRlLiBSZXR1cm4gdGhpcyBzY2FsZSBmYWN0b3IgaW4gZDAuCQkJIworIwlJZiB0aGUgdHdvIGV4cG9uZW50cyBkaWZmZXIgYnkgPiB0aGUgbnVtYmVyIG9mIG1hbnRpc3NhIGJpdHMJIworIyBwbHVzIHR3bywgdGhlbiBzZXQgdGhlIHNtYWxsZXN0IGV4cG9uZW50IHRvIGEgdmVyeSBzbWFsbCB2YWx1ZSBhcyBhCSMKKyMgcXVpY2sgc2hvcnRjdXQuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWFkZHN1Yl9zY2FsZXIyCithZGRzdWJfc2NhbGVyMjoKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCURTVF9ISSglYTEpLEZQX1NDUjFfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMV9MTyglYTYpCisJbW92LncJCVNSQ19FWCglYTApLCVkMAorCW1vdi53CQlEU1RfRVgoJWExKSwlZDEKKwltb3YudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQorCW1vdi53CQklZDEsRlBfU0NSMV9FWCglYTYpCisKKwlhbmRpLncJCSYweDdmZmYsJWQwCisJYW5kaS53CQkmMHg3ZmZmLCVkMQorCW1vdi53CQklZDAsTF9TQ1IxKCVhNikJCSMgc3RvcmUgc3JjIGV4cG9uZW50CisJbW92LncJCSVkMSwyK0xfU0NSMSglYTYpCSMgc3RvcmUgZHN0IGV4cG9uZW50CisKKwljbXAudwkJJWQwLCAlZDEJCSMgaXMgc3JjIGV4cCA+PSBkc3QgZXhwPworCWJnZS5sCQlzcmNfZXhwX2dlMgorCisjIGRzdCBleHAgaXMgPiAgc3JjIGV4cDsgc2NhbGUgZHN0IHRvIGV4cCA9IDB4M2ZmZgorZHN0X2V4cF9ndDI6CisJYnNyLmwJCXNjYWxlX3RvX3plcm9fZHN0CisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzY2FsZSBmYWN0b3IKKworCWNtcGkuYgkJU1RBRyglYTYpLCZERU5PUk0JIyBpcyBkc3QgZGVub3JtYWxpemVkPworCWJuZS5iCQljbXBleHAxMgorCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSB0aGUgZGVub3JtOyByZXN1bHQgaXMgbmV3IGV4cAorCW5lZy53CQklZDAJCQkjIG5ldyBleHAgPSAtKHNoZnQgdmFsKQorCW1vdi53CQklZDAsTF9TQ1IxKCVhNikJCSMgaW5zZXQgbmV3IGV4cAorCitjbXBleHAxMjoKKwltb3YudwkJMitMX1NDUjEoJWE2KSwlZDAKKwlzdWJpLncJCSZtYW50aXNzYWxlbisyLCVkMAkjIHN1YnRyYWN0IG1hbnRpc3NhbGVuKzIgZnJvbSBsYXJnZXIgZXhwCisKKwljbXAudwkJJWQwLExfU0NSMSglYTYpCQkjIGlzIGRpZmZlcmVuY2UgPj0gbGVuKG1hbnRpc3NhKSsyPworCWJnZS5iCQlxdWlja19zY2FsZTEyCisKKwltb3YudwkJTF9TQ1IxKCVhNiksJWQwCisJYWRkLncJCTB4Miglc3ApLCVkMAkJIyBzY2FsZSBzcmMgZXhwb25lbnQgYnkgc2NhbGUgZmFjdG9yCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEKKwlhbmQudwkJJjB4ODAwMCwlZDEKKwlvci53CQklZDEsJWQwCQkJIyBjb25jYXQge3NnbixuZXcgZXhwfQorCW1vdi53CQklZDAsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBkc3QgZXhwb25lbnQKKworCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJldHVybiBTQ0FMRSBmYWN0b3IKKwlydHMKKworcXVpY2tfc2NhbGUxMjoKKwlhbmRpLncJCSYweDgwMDAsRlBfU0NSMF9FWCglYTYpCSMgemVybyBzcmMgZXhwb25lbnQKKwlic2V0CQkmMHgwLDErRlBfU0NSMF9FWCglYTYpCSMgc2V0IGV4cCA9IDEKKworCW1vdi5sCQkoJXNwKSssJWQwCQkjIHJldHVybiBTQ0FMRSBmYWN0b3IKKwlydHMKKworIyBzcmMgZXhwIGlzID49IGRzdCBleHA7IHNjYWxlIHNyYyB0byBleHAgPSAweDNmZmYKK3NyY19leHBfZ2UyOgorCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYworCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgc2NhbGUgZmFjdG9yCisKKwljbXBpLmIJCURUQUcoJWE2KSwmREVOT1JNCSMgaXMgZHN0IGRlbm9ybWFsaXplZD8KKwlibmUuYgkJY21wZXhwMjIKKwlsZWEJCUZQX1NDUjEoJWE2KSwlYTAKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIHRoZSBkZW5vcm07IHJlc3VsdCBpcyBuZXcgZXhwCisJbmVnLncJCSVkMAkJCSMgbmV3IGV4cCA9IC0oc2hmdCB2YWwpCisJbW92LncJCSVkMCwyK0xfU0NSMSglYTYpCSMgaW5zZXQgbmV3IGV4cAorCitjbXBleHAyMjoKKwltb3YudwkJTF9TQ1IxKCVhNiksJWQwCisJc3ViaS53CQkmbWFudGlzc2FsZW4rMiwlZDAJIyBzdWJ0cmFjdCBtYW50aXNzYWxlbisyIGZyb20gbGFyZ2VyIGV4cAorCisJY21wLncJCSVkMCwyK0xfU0NSMSglYTYpCSMgaXMgZGlmZmVyZW5jZSA+PSBsZW4obWFudGlzc2EpKzI/CisJYmdlLmIJCXF1aWNrX3NjYWxlMjIKKworCW1vdi53CQkyK0xfU0NSMSglYTYpLCVkMAorCWFkZC53CQkweDIoJXNwKSwlZDAJCSMgc2NhbGUgZHN0IGV4cG9uZW50IGJ5IHNjYWxlIGZhY3RvcgorCW1vdi53CQlGUF9TQ1IxX0VYKCVhNiksJWQxCisJYW5kaS53CQkmMHg4MDAwLCVkMQorCW9yLncJCSVkMSwlZDAJCQkjIGNvbmNhdCB7c2duLG5ldyBleHB9CisJbW92LncJCSVkMCxGUF9TQ1IxX0VYKCVhNikJIyBpbnNlcnQgbmV3IGRzdCBleHBvbmVudAorCisJbW92LmwJCSglc3ApKywlZDAJCSMgcmV0dXJuIFNDQUxFIGZhY3RvcgorCXJ0cworCitxdWlja19zY2FsZTIyOgorCWFuZGkudwkJJjB4ODAwMCxGUF9TQ1IxX0VYKCVhNikJIyB6ZXJvIGRzdCBleHBvbmVudAorCWJzZXQJCSYweDAsMStGUF9TQ1IxX0VYKCVhNikJIyBzZXQgZXhwID0gMQorCisJbW92LmwJCSglc3ApKywlZDAJCSMgcmV0dXJuIFNDQUxFIGZhY3RvcgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXNjYWxlX3RvX3plcm9fc3JjKCk6IHNjYWxlIHRoZSBleHBvbmVudCBvZiBleHRlbmRlZCBwcmVjaXNpb24JIworIwkJCSAgICAgdmFsdWUgYXQgRlBfU0NSMChhNikuCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJbm9ybSgpIC0gbm9ybWFsaXplIHRoZSBtYW50aXNzYSBpZiB0aGUgb3BlcmFuZCB3YXMgYSBERU5PUk0JIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRlBfU0NSMChhNikgPSBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZCB0byBiZSBzY2FsZWQJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUZQX1NDUjAoYTYpID0gc2NhbGVkIGV4dGVuZGVkIHByZWNpc2lvbiBvcGVyYW5kCQkJIworIwlkMAkgICAgPSBzY2FsZSB2YWx1ZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJU2V0IHRoZSBleHBvbmVudCBvZiB0aGUgaW5wdXQgb3BlcmFuZCB0byAweDNmZmYuIFNhdmUgdGhlIHZhbHVlCSMKKyMgb2YgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgb3JpZ2luYWwgYW5kIG5ldyBleHBvbmVudC4gVGhlbiwJIworIyBub3JtYWxpemUgdGhlIG9wZXJhbmQgaWYgaXQgd2FzIGEgREVOT1JNLiBBZGQgdGhpcyBub3JtYWxpemF0aW9uCSMKKyMgdmFsdWUgdG8gdGhlIHByZXZpb3VzIHZhbHVlLiBSZXR1cm4gdGhlIHJlc3VsdC4JCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzY2FsZV90b196ZXJvX3NyYworc2NhbGVfdG9femVyb19zcmM6CisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBleHRyYWN0IG9wZXJhbmQncyB7c2duLGV4cH0KKwltb3YudwkJJWQxLCVkMAkJCSMgbWFrZSBhIGNvcHkKKworCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgZXh0cmFjdCBvcGVyYW5kJ3MgZXhwb25lbnQKKworCWFuZGkudwkJJjB4ODAwMCwlZDAJCSMgZXh0cmFjdCBvcGVyYW5kJ3Mgc2duCisJb3IudwkJJjB4M2ZmZiwlZDAJCSMgaW5zZXJ0IG5ldyBvcGVyYW5kJ3MgZXhwb25lbnQoPTApCisKKwltb3YudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBiaWFzZWQgZXhwb25lbnQKKworCWNtcGkuYgkJU1RBRyglYTYpLCZERU5PUk0JIyBpcyBvcGVyYW5kIG5vcm1hbGl6ZWQ/CisJYmVxLmIJCXN0enNfZGVub3JtCQkjIG5vcm1hbGl6ZSB0aGUgREVOT1JNCisKK3N0enNfbm9ybToKKwltb3YubAkJJjB4M2ZmZiwlZDAKKwlzdWIubAkJJWQxLCVkMAkJCSMgc2NhbGUgPSBCSUFTICsgKC1leHApCisKKwlydHMKKworc3R6c19kZW5vcm06CisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzcyBwdHIgdG8gc3JjIG9wCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSBkZW5vcm0KKwluZWcubAkJJWQwCQkJIyBuZXcgZXhwb25lbnQgPSAtKHNoZnQgdmFsKQorCW1vdi5sCQklZDAsJWQxCQkJIyBwcmVwYXJlIGZvciBvcF9ub3JtIGNhbGwKKwlicmEuYgkJc3R6c19ub3JtCQkjIGZpbmlzaCBzY2FsaW5nCisKKyMjIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXNjYWxlX3NxcnQoKTogc2NhbGUgdGhlIGlucHV0IG9wZXJhbmQgZXhwb25lbnQgc28gYSBzdWJzZXF1ZW50CSMKKyMJCSAgICAgIGZzcXJ0IG9wZXJhdGlvbiB3b24ndCB0YWtlIGFuIGV4Y2VwdGlvbi4JCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCW5vcm0oKSAtIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EgaWYgdGhlIG9wZXJhbmQgd2FzIGEgREVOT1JNCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUZQX1NDUjAoYTYpID0gZXh0ZW5kZWQgcHJlY2lzaW9uIG9wZXJhbmQgdG8gYmUgc2NhbGVkCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGUF9TQ1IwKGE2KSA9IHNjYWxlZCBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZAkJCSMKKyMJZDAJICAgID0gc2NhbGUgdmFsdWUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUlmIHRoZSBpbnB1dCBvcGVyYW5kIGlzIGEgREVOT1JNLCBub3JtYWxpemUgaXQuCQkJIworIwlJZiB0aGUgZXhwb25lbnQgb2YgdGhlIGlucHV0IG9wZXJhbmQgaXMgZXZlbiwgc2V0IHRoZSBleHBvbmVudAkjCisjIHRvIDB4M2ZmZSBhbmQgcmV0dXJuIGEgc2NhbGUgZmFjdG9yIG9mICIoZXhwLTB4M2ZmZSkvMiIuIElmIHRoZQkjCisjIGV4cG9uZW50IG9mIHRoZSBpbnB1dCBvcGVyYW5kIGlzIG9mZiwgc2V0IHRoZSBleHBvbmVudCB0byBveDNmZmYgYW5kCSMKKyMgcmV0dXJuIGEgc2NhbGUgZmFjdG9yIG9mICIoZXhwLTB4M2ZmZikvMiIuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXNjYWxlX3NxcnQKK3NjYWxlX3NxcnQ6CisJY21waS5iCQlTVEFHKCVhNiksJkRFTk9STQkjIGlzIG9wZXJhbmQgbm9ybWFsaXplZD8KKwliZXEuYgkJc3NfZGVub3JtCQkjIG5vcm1hbGl6ZSB0aGUgREVOT1JNCisKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGV4dHJhY3Qgb3BlcmFuZCdzIHtzZ24sZXhwfQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgZXh0cmFjdCBvcGVyYW5kJ3MgZXhwb25lbnQKKworCWFuZGkudwkJJjB4ODAwMCxGUF9TQ1IwX0VYKCVhNikJIyBleHRyYWN0IG9wZXJhbmQncyBzZ24KKworCWJ0c3QJCSYweDAsJWQxCQkjIGlzIGV4cCBldmVuIG9yIG9kZD8KKwliZXEuYgkJc3Nfbm9ybV9ldmVuCisKKwlvcmkudwkJJjB4M2ZmZixGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IG9wZXJhbmQncyBleHBvbmVudCg9MCkKKworCW1vdi5sCQkmMHgzZmZmLCVkMAorCXN1Yi5sCQklZDEsJWQwCQkJIyBzY2FsZSA9IEJJQVMgKyAoLWV4cCkKKwlhc3IubAkJJjB4MSwlZDAJCSMgZGl2aWRlIHNjYWxlIGZhY3RvciBieSAyCisJcnRzCisKK3NzX25vcm1fZXZlbjoKKwlvcmkudwkJJjB4M2ZmZSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IG9wZXJhbmQncyBleHBvbmVudCg9MCkKKworCW1vdi5sCQkmMHgzZmZlLCVkMAorCXN1Yi5sCQklZDEsJWQwCQkJIyBzY2FsZSA9IEJJQVMgKyAoLWV4cCkKKwlhc3IubAkJJjB4MSwlZDAJCSMgZGl2aWRlIHNjYWxlIGZhY3RvciBieSAyCisJcnRzCisKK3NzX2Rlbm9ybToKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzIHB0ciB0byBzcmMgb3AKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIGRlbm9ybQorCisJYnRzdAkJJjB4MCwlZDAJCSMgaXMgZXhwIGV2ZW4gb3Igb2RkPworCWJlcS5iCQlzc19kZW5vcm1fZXZlbgorCisJb3JpLncJCSYweDNmZmYsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBvcGVyYW5kJ3MgZXhwb25lbnQoPTApCisKKwlhZGQubAkJJjB4M2ZmZiwlZDAKKwlhc3IubAkJJjB4MSwlZDAJCSMgZGl2aWRlIHNjYWxlIGZhY3RvciBieSAyCisJcnRzCisKK3NzX2Rlbm9ybV9ldmVuOgorCW9yaS53CQkmMHgzZmZlLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgb3BlcmFuZCdzIGV4cG9uZW50KD0wKQorCisJYWRkLmwJCSYweDNmZmUsJWQwCisJYXNyLmwJCSYweDEsJWQwCQkjIGRpdmlkZSBzY2FsZSBmYWN0b3IgYnkgMgorCXJ0cworCisjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlzY2FsZV90b196ZXJvX2RzdCgpOiBzY2FsZSB0aGUgZXhwb25lbnQgb2YgZXh0ZW5kZWQgcHJlY2lzaW9uCSMKKyMJCQkgICAgIHZhbHVlIGF0IEZQX1NDUjEoYTYpLgkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCW5vcm0oKSAtIG5vcm1hbGl6ZSB0aGUgbWFudGlzc2EgaWYgdGhlIG9wZXJhbmQgd2FzIGEgREVOT1JNCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUZQX1NDUjEoYTYpID0gZXh0ZW5kZWQgcHJlY2lzaW9uIG9wZXJhbmQgdG8gYmUgc2NhbGVkCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGUF9TQ1IxKGE2KSA9IHNjYWxlZCBleHRlbmRlZCBwcmVjaXNpb24gb3BlcmFuZAkJCSMKKyMJZDAJICAgID0gc2NhbGUgdmFsdWUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVNldCB0aGUgZXhwb25lbnQgb2YgdGhlIGlucHV0IG9wZXJhbmQgdG8gMHgzZmZmLiBTYXZlIHRoZSB2YWx1ZQkjCisjIG9mIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG9yaWdpbmFsIGFuZCBuZXcgZXhwb25lbnQuIFRoZW4sCSMKKyMgbm9ybWFsaXplIHRoZSBvcGVyYW5kIGlmIGl0IHdhcyBhIERFTk9STS4gQWRkIHRoaXMgbm9ybWFsaXphdGlvbgkjCisjIHZhbHVlIHRvIHRoZSBwcmV2aW91cyB2YWx1ZS4gUmV0dXJuIHRoZSByZXN1bHQuCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc2NhbGVfdG9femVyb19kc3QKK3NjYWxlX3RvX3plcm9fZHN0OgorCW1vdi53CQlGUF9TQ1IxX0VYKCVhNiksJWQxCSMgZXh0cmFjdCBvcGVyYW5kJ3Mge3NnbixleHB9CisJbW92LncJCSVkMSwlZDAJCQkjIG1ha2UgYSBjb3B5CisKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIGV4dHJhY3Qgb3BlcmFuZCdzIGV4cG9uZW50CisKKwlhbmRpLncJCSYweDgwMDAsJWQwCQkjIGV4dHJhY3Qgb3BlcmFuZCdzIHNnbgorCW9yLncJCSYweDNmZmYsJWQwCQkjIGluc2VydCBuZXcgb3BlcmFuZCdzIGV4cG9uZW50KD0wKQorCisJbW92LncJCSVkMCxGUF9TQ1IxX0VYKCVhNikJIyBpbnNlcnQgYmlhc2VkIGV4cG9uZW50CisKKwljbXBpLmIJCURUQUcoJWE2KSwmREVOT1JNCSMgaXMgb3BlcmFuZCBub3JtYWxpemVkPworCWJlcS5iCQlzdHpkX2Rlbm9ybQkJIyBub3JtYWxpemUgdGhlIERFTk9STQorCitzdHpkX25vcm06CisJbW92LmwJCSYweDNmZmYsJWQwCisJc3ViLmwJCSVkMSwlZDAJCQkjIHNjYWxlID0gQklBUyArICgtZXhwKQorCXJ0cworCitzdHpkX2Rlbm9ybToKKwlsZWEJCUZQX1NDUjEoJWE2KSwlYTAJIyBwYXNzIHB0ciB0byBkc3Qgb3AKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIGRlbm9ybQorCW5lZy5sCQklZDAJCQkjIG5ldyBleHBvbmVudCA9IC0oc2hmdCB2YWwpCisJbW92LmwJCSVkMCwlZDEJCQkjIHByZXBhcmUgZm9yIG9wX25vcm0gY2FsbAorCWJyYS5iCQlzdHpkX25vcm0JCSMgZmluaXNoIHNjYWxpbmcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlyZXNfcW5hbigpOiByZXR1cm4gZGVmYXVsdCByZXN1bHQgdy8gUU5BTiBvcGVyYW5kIGZvciBkeWFkaWMJIworIwlyZXNfc25hbigpOiByZXR1cm4gZGVmYXVsdCByZXN1bHQgdy8gU05BTiBvcGVyYW5kIGZvciBkeWFkaWMJIworIwlyZXNfcW5hbl8xb3AoKTogcmV0dXJuIGRmbHQgcmVzdWx0IHcvIFFOQU4gb3BlcmFuZCBmb3IgbW9uYWRpYwkjCisjCXJlc19zbmFuXzFvcCgpOiByZXR1cm4gZGZsdCByZXN1bHQgdy8gU05BTiBvcGVyYW5kIGZvciBtb25hZGljCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUZQX1NSQyhhNikgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzcmMgb3BlcmFuZAkJIworIwlGUF9EU1QoYTYpID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gZHN0IG9wZXJhbmQJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IGRlZmF1bHQgcmVzdWx0CQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSWYgZWl0aGVyIG9wZXJhbmQgKGJ1dCBub3QgYm90aCBvcGVyYW5kcykgb2YgYW4gb3BlcmF0aW9uIGlzIGEJIworIyBub25zaWduYWxsaW5nIE5BTiwgdGhlbiB0aGF0IE5BTiBpcyByZXR1cm5lZCBhcyB0aGUgcmVzdWx0LiBJZiBib3RoCSMKKyMgb3BlcmFuZHMgYXJlIG5vbnNpZ25hbGxpbmcgTkFOcywgdGhlbiB0aGUgZGVzdGluYXRpb24gb3BlcmFuZAkJIworIyBub25zaWduYWxsaW5nIE5BTiBpcyByZXR1cm5lZCBhcyB0aGUgcmVzdWx0LgkJCQkjCisjCUlmIGVpdGhlciBvcGVyYW5kIHRvIGFuIG9wZXJhdGlvbiBpcyBhIHNpZ25hbGxpbmcgTkFOIChTTkFOKSwJIworIyB0aGVuLCB0aGUgU05BTiBiaXQgaXMgc2V0IGluIHRoZSBGUFNSIEVYQyBieXRlLiBJZiB0aGUgU05BTiB0cmFwCSMKKyMgZW5hYmxlIGJpdCBpcyBzZXQgaW4gdGhlIEZQQ1IsIHRoZW4gdGhlIHRyYXAgaXMgdGFrZW4gYW5kIHRoZQkJIworIyBkZXN0aW5hdGlvbiBpcyBub3QgbW9kaWZpZWQuIElmIHRoZSBTTkFOIHRyYXAgZW5hYmxlIGJpdCBpcyBub3Qgc2V0LAkjCisjIHRoZW4gdGhlIFNOQU4gaXMgY29udmVydGVkIHRvIGEgbm9uc2lnbmFsbGluZyBOQU4gKGJ5IHNldHRpbmcgdGhlCSMKKyMgU05BTiBiaXQgaW4gdGhlIG9wZXJhbmQgdG8gb25lKSwgYW5kIHRoZSBvcGVyYXRpb24gY29udGludWVzIGFzCSMKKyMgZGVzY3JpYmVkIGluIHRoZSBwcmVjZWRpbmcgcGFyYWdyYXBoLCBmb3Igbm9uc2lnbmFsbGluZyBOQU5zLgkJIworIwlNYWtlIHN1cmUgdGhlIGFwcHJvcHJpYXRlIEZQU1IgYml0cyBhcmUgc2V0IGJlZm9yZSBleGl0aW5nLgkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlyZXNfcW5hbgorCWdsb2JhbAkJcmVzX3NuYW4KK3Jlc19xbmFuOgorcmVzX3NuYW46CisJY21wLmIJCURUQUcoJWE2KSwgJlNOQU4JIyBpcyB0aGUgZHN0IGFuIFNOQU4/CisJYmVxLmIJCWRzdF9zbmFuMgorCWNtcC5iCQlEVEFHKCVhNiksICZRTkFOCSMgaXMgdGhlIGRzdCBhICBRTkFOPworCWJlcS5iCQlkc3RfcW5hbjIKK3NyY19uYW46CisJY21wLmIJCVNUQUcoJWE2KSwgJlFOQU4KKwliZXEuYgkJc3JjX3FuYW4yCisJZ2xvYmFsCQlyZXNfc25hbl8xb3AKK3Jlc19zbmFuXzFvcDoKK3NyY19zbmFuMjoKKwlic2V0CQkmMHg2LCBGUF9TUkNfSEkoJWE2KQkjIHNldCBTTkFOIGJpdAorCW9yLmwJCSZuYW5fbWFzaythaW9wX21hc2src25hbl9tYXNrLCBVU0VSX0ZQU1IoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksICVhMAorCWJyYS5iCQluYW5fY29tcAorCWdsb2JhbAkJcmVzX3FuYW5fMW9wCityZXNfcW5hbl8xb3A6CitzcmNfcW5hbjI6CisJb3IubAkJJm5hbl9tYXNrLCBVU0VSX0ZQU1IoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksICVhMAorCWJyYS5iCQluYW5fY29tcAorZHN0X3NuYW4yOgorCW9yLmwJCSZuYW5fbWFzaythaW9wX21hc2src25hbl9tYXNrLCBVU0VSX0ZQU1IoJWE2KQorCWJzZXQJCSYweDYsIEZQX0RTVF9ISSglYTYpCSMgc2V0IFNOQU4gYml0CisJbGVhCQlGUF9EU1QoJWE2KSwgJWEwCisJYnJhLmIJCW5hbl9jb21wCitkc3RfcW5hbjI6CisJbGVhCQlGUF9EU1QoJWE2KSwgJWEwCisJY21wLmIJCVNUQUcoJWE2KSwgJlNOQU4KKwlibmUJCW5hbl9kb25lCisJb3IubAkJJmFpb3BfbWFzaytzbmFuX21hc2ssIFVTRVJfRlBTUiglYTYpCituYW5fZG9uZToKKwlvci5sCQkmbmFuX21hc2ssIFVTRVJfRlBTUiglYTYpCituYW5fY29tcDoKKwlidHN0CQkmMHg3LCBGVEVNUF9FWCglYTApCSMgaXMgTkFOIG5lZz8KKwliZXEuYgkJbmFuX25vdF9uZWcKKwlvci5sCQkmbmVnX21hc2ssIFVTRVJfRlBTUiglYTYpCituYW5fbm90X25lZzoKKwlmbW92bS54CQkoJWEwKSwgJjB4ODAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlyZXNfb3BlcnIoKTogcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGR1cmluZyBvcGVyYW5kIGVycm9yCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSBkZWZhdWx0IG9wZXJhbmQgZXJyb3IgcmVzdWx0CQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUFuIG5vbnNpZ25hbGxpbmcgTkFOIGlzIHJldHVybmVkIGFzIHRoZSBkZWZhdWx0IHJlc3VsdCB3aGVuCSMKKyMgYW4gb3BlcmFuZCBlcnJvciBvY2N1cnMgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXM6CQkJIworIwkJCQkJCQkJCSMKKyMJTXVsdGlwbHk6IChJbmZpbml0eSB4IFplcm8pCQkJCQkjCisjCURpdmlkZSAgOiAoWmVybyAvIFplcm8pIHx8IChJbmZpbml0eSAvIEluZmluaXR5KQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJcmVzX29wZXJyCityZXNfb3BlcnI6CisJb3IubAkJJm5hbl9tYXNrK29wZXJyX21hc2srYWlvcF9tYXNrLCBVU0VSX0ZQU1IoJWE2KQorCWZtb3ZtLngJCW5hbl9yZXR1cm4oJXBjKSwgJjB4ODAKKwlydHMKKworbmFuX3JldHVybjoKKwlsb25nCQkweDdmZmYwMDAwLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2Rlbm9ybSgpOiBkZW5vcm1hbGl6ZSBhbiBpbnRlcm1lZGlhdGUgcmVzdWx0CQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJYTAgPSBwb2ludHMgdG8gdGhlIG9wZXJhbmQgdG8gYmUgZGVub3JtYWxpemVkCQkJIworIwkJKGluIHRoZSBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQpCQkJIworIwkJCQkJCQkJCSMKKyMJZDAgPSByb3VuZGluZyBwcmVjaXNpb24JCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gdGhlIGRlbm9ybWFsaXplZCByZXN1bHQJCQkJIworIwkJKGluIHRoZSBpbnRlcm5hbCBleHRlbmRlZCBmb3JtYXQpCQkJIworIwkJCQkJCQkJCSMKKyMJZDAgPSBndWFyZCxyb3VuZCxzdGlja3kJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlBY2NvcmRpbmcgdG8gdGhlIGV4cG9uZW50IHVuZGVyZmxvdyB0aHJlc2hvbGQgZm9yIHRoZSBnaXZlbgkjCisjIHByZWNpc2lvbiwgc2hpZnQgdGhlIG1hbnRpc3NhIGJpdHMgdG8gdGhlIHJpZ2h0IGluIG9yZGVyIHJhaXNlIHRoZQkjCisjIGV4cG9uZW50IG9mIHRoZSBvcGVyYW5kIHRvIHRoZSB0aHJlc2hvbGQgdmFsdWUuIFdoaWxlIHNoaWZ0aW5nIHRoZQkjCisjIG1hbnRpc3NhIGJpdHMgcmlnaHQsIG1haW50YWluIHRoZSB2YWx1ZSBvZiB0aGUgZ3VhcmQsIHJvdW5kLCBhbmQJIworIyBzdGlja3kgYml0cy4JCQkJCQkJCSMKKyMgb3RoZXIgbm90ZXM6CQkJCQkJCQkjCisjCSgxKSBfZGVub3JtKCkgaXMgY2FsbGVkIGJ5IHRoZSB1bmRlcmZsb3cgcm91dGluZXMJCSMKKyMJKDIpIF9kZW5vcm0oKSBkb2VzIE5PVCBhZmZlY3QgdGhlIHN0YXR1cyByZWdpc3RlcgkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyB0YWJsZSBvZiBleHBvbmVudCB0aHJlc2hvbGQgdmFsdWVzIGZvciBlYWNoIHByZWNpc2lvbgorIwordGJsX3RocmVzaDoKKwlzaG9ydAkJMHgwCisJc2hvcnQJCXNnbF90aHJlc2gKKwlzaG9ydAkJZGJsX3RocmVzaAorCisJZ2xvYmFsCQlfZGVub3JtCitfZGVub3JtOgorIworIyBMb2FkIHRoZSBleHBvbmVudCB0aHJlc2hvbGQgZm9yIHRoZSBwcmVjaXNpb24gc2VsZWN0ZWQgYW5kIGNoZWNrCisjIHRvIHNlZSBpZiAodGhyZXNob2xkIC0gZXhwb25lbnQpIGlzID4gNjUgaW4gd2hpY2ggY2FzZSB3ZSBjYW4KKyMgc2ltcGx5IGNhbGN1bGF0ZSB0aGUgc3RpY2t5IGJpdCBhbmQgemVybyB0aGUgbWFudGlzc2EuIG90aGVyd2lzZQorIyB3ZSBoYXZlIHRvIGNhbGwgdGhlIGRlbm9ybWFsaXphdGlvbiByb3V0aW5lLgorIworCWxzci5iCQkmMHgyLCAlZDAJCSMgc2hpZnQgcHJlYyB0byBsbyBiaXRzCisJbW92LncJCSh0YmxfdGhyZXNoLmIsJXBjLCVkMC53KjIpLCAlZDEgIyBsb2FkIHByZWMgdGhyZXNob2xkCisJbW92LncJCSVkMSwgJWQwCQkjIGNvcHkgZDEgaW50byBkMAorCXN1Yi53CQlGVEVNUF9FWCglYTApLCAlZDAJIyBkaWZmID0gdGhyZXNob2xkIC0gZXhwCisJY21waS53CQklZDAsICY2NgkJIyBpcyBkaWZmID4gNjU/IChtYW50ICsgZyxyIGJpdHMpCisJYnBsLmIJCWRlbm9ybV9zZXRfc3RreQkJIyB5ZXM7IGp1c3QgY2FsYyBzdGlja3kKKworCWNsci5sCQklZDAJCQkjIGNsZWFyIGcscixzCisJYnRzdAkJJmluZXgyX2JpdCwgRlBTUl9FWENFUFQoJWE2KSAjIHllczsgd2FzIElORVgyIHNldD8KKwliZXEuYgkJZGVub3JtX2NhbGwJCSMgbm87IGRvbid0IGNoYW5nZSBhbnl0aGluZworCWJzZXQJCSYyOSwgJWQwCQkjIHllczsgc2V0IHN0aWNreSBiaXQKKworZGVub3JtX2NhbGw6CisJYnNyLmwJCWRucm1fbHAJCQkjIGRlbm9ybWFsaXplIHRoZSBudW1iZXIKKwlydHMKKworIworIyBhbGwgYml0IHdvdWxkIGhhdmUgYmVlbiBzaGlmdGVkIG9mZiBkdXJpbmcgdGhlIGRlbm9ybSBzbyBzaW1wbHkKKyMgY2FsY3VsYXRlIGlmIHRoZSBzdGlja3kgc2hvdWxkIGJlIHNldCBhbmQgY2xlYXIgdGhlIGVudGlyZSBtYW50aXNzYS4KKyMKK2Rlbm9ybV9zZXRfc3RreToKKwltb3YubAkJJjB4MjAwMDAwMDAsICVkMAkjIHNldCBzdGlja3kgYml0IGluIHJldHVybiB2YWx1ZQorCW1vdi53CQklZDEsIEZURU1QX0VYKCVhMCkJIyBsb2FkIGV4cCB3aXRoIHRocmVzaG9sZAorCWNsci5sCQlGVEVNUF9ISSglYTApCQkjIHNldCBkMSA9IDAgKG1zIG1hbnRpc3NhKQorCWNsci5sCQlGVEVNUF9MTyglYTApCQkjIHNldCBkMiA9IDAgKG1zIG1hbnRpc3NhKQorCXJ0cworCisjCQkJCQkJCQkJIworIyBkbnJtX2xwKCk6IG5vcm1hbGl6ZSBleHBvbmVudC9tYW50aXNzYSB0byBzcGVjaWZpZWQgdGhyZXNoaG9sZAkjCisjCQkJCQkJCQkJIworIyBJTlBVVDoJCQkJCQkJCSMKKyMJJWEwCSAgIDogcG9pbnRzIHRvIHRoZSBvcGVyYW5kIHRvIGJlIGRlbm9ybWFsaXplZAkJIworIwklZDB7MzE6Mjl9IDogaW5pdGlhbCBndWFyZCxyb3VuZCxzdGlja3kJCQkJIworIwklZDF7MTU6MH0gIDogZGVub3JtYWxpemF0aW9uIHRocmVzaG9sZAkJCQkjCisjIE9VVFBVVDoJCQkJCQkJCSMKKyMJJWEwCSAgIDogcG9pbnRzIHRvIHRoZSBkZW5vcm1hbGl6ZWQgb3BlcmFuZAkJCSMKKyMJJWQwezMxOjI5fSA6IGZpbmFsIGd1YXJkLHJvdW5kLHN0aWNreQkJCQkjCisjCQkJCQkJCQkJIworCisjICoqKiBMb2NhbCBFcXVhdGVzICoqKiAjCitzZXQJR1JTLAkJTF9TQ1IyCQkJIyBnLHIscyB0ZW1wIHN0b3JhZ2UKK3NldAlGVEVNUF9MTzIsCUxfU0NSMQkJCSMgRlRFTVBfTE8gY29weQorCisJZ2xvYmFsCQlkbnJtX2xwCitkbnJtX2xwOgorCisjCisjIG1ha2UgYSBjb3B5IG9mIEZURU1QX0xPIGFuZCBwbGFjZSB0aGUgZyxyLHMgYml0cyBkaXJlY3RseSBhZnRlciBpdAorIyBpbiBtZW1vcnkgc28gYXMgdG8gbWFrZSB0aGUgYml0ZmllbGQgZXh0cmFjdGlvbiBmb3IgZGVub3JtYWxpemF0aW9uIGVhc2llci4KKyMKKwltb3YubAkJRlRFTVBfTE8oJWEwKSwgRlRFTVBfTE8yKCVhNikgIyBtYWtlIEZURU1QX0xPIGNvcHkKKwltb3YubAkJJWQwLCBHUlMoJWE2KQkJIyBwbGFjZSBnLHIscyBhZnRlciBpdAorCisjCisjIGNoZWNrIHRvIHNlZSBob3cgbXVjaCBsZXNzIHRoYW4gdGhlIHVuZGVyZmxvdyB0aHJlc2hvbGQgdGhlIG9wZXJhbmQKKyMgZXhwb25lbnQgaXMuCisjCisJbW92LmwJCSVkMSwgJWQwCQkjIGNvcHkgdGhlIGRlbm9ybSB0aHJlc2hvbGQKKwlzdWIudwkJRlRFTVBfRVgoJWEwKSwgJWQxCSMgZDEgPSB0aHJlc2hvbGQgLSB1bnMgZXhwb25lbnQKKwlibGUuYgkJZG5ybV9ub19scAkJIyBkMSA8PSAwCisJY21waS53CQklZDEsICYweDIwCQkjIGlzICggMCA8PSBkMSA8IDMyKSA/CisJYmx0LmIJCWNhc2VfMQkJCSMgeWVzCisJY21waS53CQklZDEsICYweDQwCQkjIGlzICgzMiA8PSBkMSA8IDY0KSA/CisJYmx0LmIJCWNhc2VfMgkJCSMgeWVzCisJYnJhLncJCWNhc2VfMwkJCSMgKGQxID49IDY0KQorCisjCisjIE5vIG5vcm1hbGl6YXRpb24gbmVjZXNzYXJ5CisjCitkbnJtX25vX2xwOgorCW1vdi5sCQlHUlMoJWE2KSwgJWQwCQkjIHJlc3RvcmUgb3JpZ2luYWwgZyxyLHMKKwlydHMKKworIworIyBjYXNlICgwPGQxPDMyKQorIworIyAlZDAgPSBkZW5vcm0gdGhyZXNob2xkCisjICVkMSA9ICJuIiA9IGFtdCB0byBzaGlmdAorIworIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJfCAgICAgRlRFTVBfSEkJICB8CUZURU1QX0xPICAgICB8Z3JzMDAwLi4uLi4uLi4uMDAwfAorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJPC0oMzIgLSBuKS0+PC0obiktPjwtKDMyIC0gbiktPjwtKG4pLT48LSgzMiAtIG4pLT48LShuKS0+CisjCVwJICAgXAkJICAgICAgXAkJCSBcCisjCSBcCSAgICBcCQkgICAgICAgXAkJICBcCisjCSAgXAkgICAgIFwJCQlcCQkgICBcCisjCSAgIFwJICAgICAgXAkJCSBcCQkgICAgXAorIwkgICAgXAkgICAgICAgXAkJICBcCQkgICAgIFwKKyMJICAgICBcCQlcCQkgICBcCQkgICAgICBcCisjCSAgICAgIFwJCSBcCQkgICAgXAkJICAgICAgIFwKKyMJICAgICAgIFwJICBcCQkgICAgIFwJCQlcCisjCTwtKG4pLT48LSgzMiAtIG4pLT48LS0tLS0tKDMyKS0tLS0tLS0+PC0tLS0tLSgzMiktLS0tLS0tPgorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJfDAuLi4uLjB8IE5FV19ISSAgfCAgTkVXX0ZURU1QX0xPICAgICB8Z3JzCQl8CisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworY2FzZV8xOgorCW1vdi5sCQklZDIsIC0oJXNwKQkJIyBjcmVhdGUgdGVtcCBzdG9yYWdlCisKKwltb3YudwkJJWQwLCBGVEVNUF9FWCglYTApCSMgZXhwb25lbnQgPSBkZW5vcm0gdGhyZXNob2xkCisJbW92LmwJCSYzMiwgJWQwCisJc3ViLncJCSVkMSwgJWQwCQkjICVkMCA9IDMyIC0gJWQxCisKKwljbXBpLncJCSVkMSwgJjI5CQkjIGlzIHNoZnQgYW10ID49IDI5CisJYmx0LmIJCWNhc2UxX2V4dHJhY3QJCSMgbm87IG5vIGZpeCBuZWVkZWQKKwltb3YuYgkJR1JTKCVhNiksICVkMgorCW9yLmIJCSVkMiwgMytGVEVNUF9MTzIoJWE2KQorCitjYXNlMV9leHRyYWN0OgorCWJmZXh0dQkJRlRFTVBfSEkoJWEwKXsmMDolZDB9LCAlZDIgIyAlZDIgPSBuZXcgRlRFTVBfSEkKKwliZmV4dHUJCUZURU1QX0hJKCVhMCl7JWQwOiYzMn0sICVkMSAjICVkMSA9IG5ldyBGVEVNUF9MTworCWJmZXh0dQkJRlRFTVBfTE8yKCVhNil7JWQwOiYzMn0sICVkMCAjICVkMCA9IG5ldyBHLFIsUworCisJbW92LmwJCSVkMiwgRlRFTVBfSEkoJWEwKQkjIHN0b3JlIG5ldyBGVEVNUF9ISQorCW1vdi5sCQklZDEsIEZURU1QX0xPKCVhMCkJIyBzdG9yZSBuZXcgRlRFTVBfTE8KKworCWJmdHN0CQklZDB7JjI6JjMwfQkJIyB3ZXJlIGJpdHMgc2hpZnRlZCBvZmY/CisJYmVxLmIJCWNhc2UxX3N0aWNreV9jbGVhcgkjIG5vOyBnbyBmaW5pc2gKKwlic2V0CQkmcm5kX3N0a3lfYml0LCAlZDAJIyB5ZXM7IHNldCBzdGlja3kgYml0CisKK2Nhc2UxX3N0aWNreV9jbGVhcjoKKwlhbmQubAkJJjB4ZTAwMDAwMDAsICVkMAkjIGNsZWFyIGFsbCBidXQgRyxSLFMKKwltb3YubAkJKCVzcCkrLCAlZDIJCSMgcmVzdG9yZSB0ZW1wIHJlZ2lzdGVyCisJcnRzCisKKyMKKyMgY2FzZSAoMzI8PWQxPDY0KQorIworIyAlZDAgPSBkZW5vcm0gdGhyZXNob2xkCisjICVkMSA9ICJuIiA9IGFtdCB0byBzaGlmdAorIworIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJfCAgICAgRlRFTVBfSEkJICB8CUZURU1QX0xPICAgICB8Z3JzMDAwLi4uLi4uLi4uMDAwfAorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJPC0oMzIgLSBuKS0+PC0obiktPjwtKDMyIC0gbiktPjwtKG4pLT48LSgzMiAtIG4pLT48LShuKS0+CisjCVwJICAgXAkJICAgICAgXAorIwkgXAkgICAgXAkJICAgICAgIFwKKyMJICBcCSAgICAgXAkJCS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJICAgXAkgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLQkJICAgXAorIwkgICAgLS0tLS0tLS0tLS0tLS0tLS0tLQkJICBcCQkgICAgXAorIwkJCSAgICAgICBcCSAgIFwJCSAgICAgXAorIwkJCQlcCSAgICBcCQkgICAgICBcCisjCQkJCSBcCSAgICAgXAkJICAgICAgIFwKKyMJPC0tLS0tLS0oMzIpLS0tLS0tPjwtKG4pLT48LSgzMiAtIG4pLT48LS0tLS0tKDMyKS0tLS0tLS0+CisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwl8MC4uLi4uLi4uLi4uLi4uLjB8MC4uLi4wfCBORVdfTE8gICAgIHxncnMJCXwKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCitjYXNlXzI6CisJbW92LmwJCSVkMiwgLSglc3ApCQkjIGNyZWF0ZSB0ZW1wIHN0b3JhZ2UKKworCW1vdi53CQklZDAsIEZURU1QX0VYKCVhMCkJIyBleHBvbmVudCA9IGRlbm9ybSB0aHJlc2hvbGQKKwlzdWJpLncJCSYweDIwLCAlZDEJCSMgJWQxIG5vdyBiZXR3ZWVuIDAgYW5kIDMyCisJbW92LmwJCSYweDIwLCAlZDAKKwlzdWIudwkJJWQxLCAlZDAJCSMgJWQwID0gMzIgLSAlZDEKKworIyBzdWJ0bGUgc3RlcCBoZXJlOyBvciBpbiB0aGUgZyxyLHMgYXQgdGhlIGJvdHRvbSBvZiBGVEVNUF9MTyB0byBtaW5pbWl6ZQorIyB0aGUgbnVtYmVyIG9mIGJpdHMgdG8gY2hlY2sgZm9yIHRoZSBzdGlja3kgZGV0ZWN0LgorIyBpdCBvbmx5IHBsYXlzIGEgcm9sZSBpbiBzaGlmdCBhbW91bnRzIG9mIDYxLTYzLgorCW1vdi5iCQlHUlMoJWE2KSwgJWQyCisJb3IuYgkJJWQyLCAzK0ZURU1QX0xPMiglYTYpCisKKwliZmV4dHUJCUZURU1QX0hJKCVhMCl7JjA6JWQwfSwgJWQyICMgJWQyID0gbmV3IEZURU1QX0xPCisJYmZleHR1CQlGVEVNUF9ISSglYTApeyVkMDomMzJ9LCAlZDEgIyAlZDEgPSBuZXcgRyxSLFMKKworCWJmdHN0CQklZDF7JjI6JjMwfQkJIyB3ZXJlIGFueSBiaXRzIHNoaWZ0ZWQgb2ZmPworCWJuZS5iCQljYXNlMl9zZXRfc3RpY2t5CSMgeWVzOyBzZXQgc3RpY2t5IGJpdAorCWJmdHN0CQlGVEVNUF9MTzIoJWE2KXslZDA6JjMxfQkjIHdlcmUgYW55IGJpdHMgc2hpZnRlZCBvZmY/CisJYm5lLmIJCWNhc2UyX3NldF9zdGlja3kJIyB5ZXM7IHNldCBzdGlja3kgYml0CisKKwltb3YubAkJJWQxLCAlZDAJCSMgbW92ZSBuZXcgRyxSLFMgdG8gJWQwCisJYnJhLmIJCWNhc2UyX2VuZAorCitjYXNlMl9zZXRfc3RpY2t5OgorCW1vdi5sCQklZDEsICVkMAkJIyBtb3ZlIG5ldyBHLFIsUyB0byAlZDAKKwlic2V0CQkmcm5kX3N0a3lfYml0LCAlZDAJIyBzZXQgc3RpY2t5IGJpdAorCitjYXNlMl9lbmQ6CisJY2xyLmwJCUZURU1QX0hJKCVhMCkJCSMgc3RvcmUgRlRFTVBfSEkgPSAwCisJbW92LmwJCSVkMiwgRlRFTVBfTE8oJWEwKQkjIHN0b3JlIEZURU1QX0xPCisJYW5kLmwJCSYweGUwMDAwMDAwLCAlZDAJIyBjbGVhciBhbGwgYnV0IEcsUixTCisKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIHRlbXAgcmVnaXN0ZXIKKwlydHMKKworIworIyBjYXNlIChkMT49NjQpCisjCisjICVkMCA9IGRlbm9ybSB0aHJlc2hvbGQKKyMgJWQxID0gYW10IHRvIHNoaWZ0CisjCitjYXNlXzM6CisJbW92LncJCSVkMCwgRlRFTVBfRVgoJWEwKQkjIGluc2VydCBkZW5vcm0gdGhyZXNob2xkCisKKwljbXBpLncJCSVkMSwgJjY1CQkjIGlzIHNoaWZ0IGFtdCA+IDY1PworCWJsdC5iCQljYXNlM182NAkJIyBubzsgaXQncyA9PSA2NAorCWJlcS5iCQljYXNlM182NQkJIyBubzsgaXQncyA9PSA2NQorCisjCisjIGNhc2UgKGQxPjY1KQorIworIyBTaGlmdCB2YWx1ZSBpcyA+IDY1IGFuZCBvdXQgb2YgcmFuZ2UuIEFsbCBiaXRzIGFyZSBzaGlmdGVkIG9mZi4KKyMgUmV0dXJuIGEgemVybyBtYW50aXNzYSB3aXRoIHRoZSBzdGlja3kgYml0IHNldAorIworCWNsci5sCQlGVEVNUF9ISSglYTApCQkjIGNsZWFyIGhpKG1hbnRpc3NhKQorCWNsci5sCQlGVEVNUF9MTyglYTApCQkjIGNsZWFyIGxvKG1hbnRpc3NhKQorCW1vdi5sCQkmMHgyMDAwMDAwMCwgJWQwCSMgc2V0IHN0aWNreSBiaXQKKwlydHMKKworIworIyBjYXNlIChkMSA9PSA2NCkKKyMKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCXwgICAgIEZURU1QX0hJCSAgfAlGVEVNUF9MTyAgICAgfGdyczAwMC4uLi4uLi4uLjAwMHwKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCTwtLS0tLS0tKDMyKS0tLS0tLT4KKyMJXAkJICAgXAorIwkgXAkJICAgIFwKKyMJICBcCQkgICAgIFwKKyMJICAgXAkJICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQkgICAgXAorIwkJCQkJICAgXAkJICAgICBcCisjCQkJCQkgICAgXAkJICAgICAgXAorIwkJCQkJICAgICBcCQkgICAgICAgXAorIwkJCQkJICAgICAgPC0tLS0tLS0oMzIpLS0tLS0tPgorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJfDAuLi4uLi4uLi4uLi4uLi4wfDAuLi4uLi4uLi4uLi4uLi4uMHxncnMJCXwKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCitjYXNlM182NDoKKwltb3YubAkJRlRFTVBfSEkoJWEwKSwgJWQwCSMgZmV0Y2ggaGkobWFudGlzc2EpCisJbW92LmwJCSVkMCwgJWQxCQkjIG1ha2UgYSBjb3B5CisJYW5kLmwJCSYweGMwMDAwMDAwLCAlZDAJIyBleHRyYWN0IEcsUgorCWFuZC5sCQkmMHgzZmZmZmZmZiwgJWQxCSMgZXh0cmFjdCBvdGhlciBiaXRzCisKKwlicmEuYgkJY2FzZTNfY29tcGxldGUKKworIworIyBjYXNlIChkMSA9PSA2NSkKKyMKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCXwgICAgIEZURU1QX0hJCSAgfAlGVEVNUF9MTyAgICAgfGdyczAwMC4uLi4uLi4uLjAwMHwKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCTwtLS0tLS0tKDMyKS0tLS0tLT4KKyMJXAkJICAgXAorIwkgXAkJICAgIFwKKyMJICBcCQkgICAgIFwKKyMJICAgXAkJICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkJICAgIFwKKyMJCQkJCSAgICBcCQkgICAgIFwKKyMJCQkJCSAgICAgXAkJICAgICAgXAorIwkJCQkJICAgICAgXAkJICAgICAgIFwKKyMJCQkJCSAgICAgICA8LS0tLS0tLSgzMSktLS0tLT4KKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCXwwLi4uLi4uLi4uLi4uLi4uMHwwLi4uLi4uLi4uLi4uLi4uLjB8MHJzCQl8CisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworY2FzZTNfNjU6CisJbW92LmwJCUZURU1QX0hJKCVhMCksICVkMAkjIGZldGNoIGhpKG1hbnRpc3NhKQorCWFuZC5sCQkmMHg4MDAwMDAwMCwgJWQwCSMgZXh0cmFjdCBSIGJpdAorCWxzci5sCQkmMHgxLCAlZDAJCSMgc2hpZnQgaGlnaCBiaXQgaW50byBSIGJpdAorCWFuZC5sCQkmMHg3ZmZmZmZmZiwgJWQxCSMgZXh0cmFjdCBvdGhlciBiaXRzCisKK2Nhc2UzX2NvbXBsZXRlOgorIyBsYXN0IG9wZXJhdGlvbiBkb25lIHdhcyBhbiAiYW5kIiBvZiB0aGUgYml0cyBzaGlmdGVkIG9mZiBzbyB0aGUgY29uZGl0aW9uCisjIGNvZGVzIGFyZSBhbHJlYWR5IHNldCBzbyBicmFuY2ggYWNjb3JkaW5nbHkuCisJYm5lLmIJCWNhc2UzX3NldF9zdGlja3kJIyB5ZXM7IGdvIHNldCBuZXcgc3RpY2t5CisJdHN0LmwJCUZURU1QX0xPKCVhMCkJCSMgd2VyZSBhbnkgYml0cyBzaGlmdGVkIG9mZj8KKwlibmUuYgkJY2FzZTNfc2V0X3N0aWNreQkjIHllczsgZ28gc2V0IG5ldyBzdGlja3kKKwl0c3QuYgkJR1JTKCVhNikJCSMgd2VyZSBhbnkgYml0cyBzaGlmdGVkIG9mZj8KKwlibmUuYgkJY2FzZTNfc2V0X3N0aWNreQkjIHllczsgZ28gc2V0IG5ldyBzdGlja3kKKworIworIyBubyBiaXRzIHdlcmUgc2hpZnRlZCBvZmYgc28gZG9uJ3Qgc2V0IHRoZSBzdGlja3kgYml0LgorIyB0aGUgZ3VhcmQgYW5kCisjIHRoZSBlbnRpcmUgbWFudGlzc2EgaXMgemVyby4KKyMKKwljbHIubAkJRlRFTVBfSEkoJWEwKQkJIyBjbGVhciBoaShtYW50aXNzYSkKKwljbHIubAkJRlRFTVBfTE8oJWEwKQkJIyBjbGVhciBsbyhtYW50aXNzYSkKKwlydHMKKworIworIyBzb21lIGJpdHMgd2VyZSBzaGlmdGVkIG9mZiBzbyBzZXQgdGhlIHN0aWNreSBiaXQuCisjIHRoZSBlbnRpcmUgbWFudGlzc2EgaXMgemVyby4KKyMKK2Nhc2UzX3NldF9zdGlja3k6CisJYnNldAkJJnJuZF9zdGt5X2JpdCwlZDAJIyBzZXQgbmV3IHN0aWNreSBiaXQKKwljbHIubAkJRlRFTVBfSEkoJWEwKQkJIyBjbGVhciBoaShtYW50aXNzYSkKKwljbHIubAkJRlRFTVBfTE8oJWEwKQkJIyBjbGVhciBsbyhtYW50aXNzYSkKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfcm91bmQoKTogcm91bmQgcmVzdWx0IGFjY29yZGluZyB0byBwcmVjaXNpb24vbW9kZQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAJICA9IHB0ciB0byBpbnB1dCBvcGVyYW5kIGluIGludGVybmFsIGV4dGVuZGVkIGZvcm1hdAkjCisjCWQxKGhpKSAgICA9IGNvbnRhaW5zIHJvdW5kaW5nIHByZWNpc2lvbjoJCQkjCisjCQkJZXh0ID0gJDAwMDB4eHh4CQkJCQkjCisjCQkJc2dsID0gJDAwMDR4eHh4CQkJCQkjCisjCQkJZGJsID0gJDAwMDh4eHh4CQkJCQkjCisjCWQxKGxvKQkgID0gY29udGFpbnMgcm91bmRpbmcgbW9kZToJCQkJIworIwkJCVJOICA9ICR4eHh4MDAwMAkJCQkJIworIwkJCVJaICA9ICR4eHh4MDAwMQkJCQkJIworIwkJCVJNICA9ICR4eHh4MDAwMgkJCQkJIworIwkJCVJQICA9ICR4eHh4MDAwMwkJCQkJIworIwlkMHszMToyOX0gPSBjb250YWlucyB0aGUgZyxyLHMgYml0cyAoZXh0ZW5kZWQpCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIHJvdW5kZWQgcmVzdWx0CQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlPbiByZXR1cm4gdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkgYTAgaXMgY29ycmVjdGx5IHJvdW5kZWQsCSMKKyMJYTAgaXMgcHJlc2VydmVkIGFuZCB0aGUgZy1yLXMgYml0cyBpbiBkMCBhcmUgY2xlYXJlZC4JCSMKKyMJVGhlIHJlc3VsdCBpcyBub3QgdHlwZWQgLSB0aGUgdGFnIGZpZWxkIGlzIGludmFsaWQuICBUaGUJIworIwlyZXN1bHQgaXMgc3RpbGwgaW4gdGhlIGludGVybmFsIGV4dGVuZGVkIGZvcm1hdC4JCSMKKyMJCQkJCQkJCQkjCisjCVRoZSBJTkVYIGJpdCBvZiBVU0VSX0ZQU1Igd2lsbCBiZSBzZXQgaWYgdGhlIHJvdW5kZWQgcmVzdWx0IHdhcwkjCisjCWluZXhhY3QgKGkuZS4gaWYgYW55IG9mIHRoZSBnLXItcyBiaXRzIHdlcmUgc2V0KS4JCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCV9yb3VuZAorX3JvdW5kOgorIworIyBleHRfZ3JzKCkgbG9va3MgYXQgdGhlIHJvdW5kaW5nIHByZWNpc2lvbiBhbmQgc2V0cyB0aGUgYXBwcm9wcmlhdGUKKyMgRyxSLFMgYml0cy4KKyMgSWYgKEcsUixTID09IDApIHRoZW4gcmVzdWx0IGlzIGV4YWN0IGFuZCByb3VuZCBpcyBkb25lLCBlbHNlIHNldAorIyB0aGUgaW5leCBmbGFnIGluIHN0YXR1cyByZWcgYW5kIGNvbnRpbnVlLgorIworCWJzci5sCQlleHRfZ3JzCQkJIyBleHRyYWN0IEcsUixTCisKKwl0c3QubAkJJWQwCQkJIyBhcmUgRyxSLFMgemVybz8KKwliZXEudwkJdHJ1bmNhdGUJCSMgeWVzOyByb3VuZCBpcyBjb21wbGV0ZQorCisJb3IudwkJJmlueDJhX21hc2ssIDIrVVNFUl9GUFNSKCVhNikgIyBzZXQgaW5leDIvYWluZXgKKworIworIyBVc2Ugcm91bmRpbmcgbW9kZSBhcyBhbiBpbmRleCBpbnRvIGEganVtcCB0YWJsZSBmb3IgdGhlc2UgbW9kZXMuCisjIEFsbCBvZiB0aGUgZm9sbG93aW5nIGFzc3VtZXMgZ3JzICE9IDAuCisjCisJbW92LncJCSh0YmxfbW9kZS5iLCVwYywlZDEudyoyKSwgJWExICMgbG9hZCBqdW1wIG9mZnNldAorCWptcAkJKHRibF9tb2RlLmIsJXBjLCVhMSkJIyBqbXAgdG8gcm5kIG1vZGUgaGFuZGxlcgorCit0YmxfbW9kZToKKwlzaG9ydAkJcm5kX25lYXIgLSB0YmxfbW9kZQorCXNob3J0CQl0cnVuY2F0ZSAtIHRibF9tb2RlCSMgUlogYWx3YXlzIHRydW5jYXRlcworCXNob3J0CQlybmRfbW51cyAtIHRibF9tb2RlCisJc2hvcnQJCXJuZF9wbHVzIC0gdGJsX21vZGUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJUk9VTkQgUExVUyBJTkZJTklUWQkJCQkJIworIwkJCQkJCQkJIworIwlJZiBzaWduIG9mIGZwIG51bWJlciA9IDAgKHBvc2l0aXZlKSwgdGhlbiBhZGQgMSB0byBsLgkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworcm5kX3BsdXM6CisJdHN0LmIJCUZURU1QX1NHTiglYTApCQkjIGNoZWNrIGZvciBzaWduCisJYm1pLncJCXRydW5jYXRlCQkjIGlmIHBvc2l0aXZlIHRoZW4gdHJ1bmNhdGUKKworCW1vdi5sCQkmMHhmZmZmZmZmZiwgJWQwCSMgZm9yY2UgZyxyLHMgdG8gYmUgYWxsIGYncworCXN3YXAJCSVkMQkJCSMgc2V0IHVwIGQxIGZvciByb3VuZCBwcmVjLgorCisJY21waS5iCQklZDEsICZzX21vZGUJCSMgaXMgcHJlYyA9IHNnbD8KKwliZXEudwkJYWRkX3NnbAkJCSMgeWVzCisJYmd0LncJCWFkZF9kYmwJCQkjIG5vOyBpdCdzIGRibAorCWJyYS53CQlhZGRfZXh0CQkJIyBubzsgaXQncyBleHQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMJUk9VTkQgTUlOVVMgSU5GSU5JVFkJCQkJCSMKKyMJCQkJCQkJCSMKKyMJSWYgc2lnbiBvZiBmcCBudW1iZXIgPSAxIChuZWdhdGl2ZSksIHRoZW4gYWRkIDEgdG8gbC4JIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3JuZF9tbnVzOgorCXRzdC5iCQlGVEVNUF9TR04oJWEwKQkJIyBjaGVjayBmb3Igc2lnbgorCWJwbC53CQl0cnVuY2F0ZQkJIyBpZiBuZWdhdGl2ZSB0aGVuIHRydW5jYXRlCisKKwltb3YubAkJJjB4ZmZmZmZmZmYsICVkMAkjIGZvcmNlIGcscixzIHRvIGJlIGFsbCBmJ3MKKwlzd2FwCQklZDEJCQkjIHNldCB1cCBkMSBmb3Igcm91bmQgcHJlYy4KKworCWNtcGkuYgkJJWQxLCAmc19tb2RlCQkjIGlzIHByZWMgPSBzZ2w/CisJYmVxLncJCWFkZF9zZ2wJCQkjIHllcworCWJndC53CQlhZGRfZGJsCQkJIyBubzsgaXQncyBkYmwKKwlicmEudwkJYWRkX2V4dAkJCSMgbm87IGl0J3MgZXh0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCVJPVU5EIE5FQVJFU1QJCQkJCQkjCisjCQkJCQkJCQkjCisjCUlmIChnPTEpLCB0aGVuIGFkZCAxIHRvIGwgYW5kIGlmIChyPXM9MCksIHRoZW4gY2xlYXIgbAkjCisjCU5vdGUgdGhhdCB0aGlzIHdpbGwgcm91bmQgdG8gZXZlbiBpbiBjYXNlIG9mIGEgdGllLgkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworcm5kX25lYXI6CisJYXNsLmwJCSYweDEsICVkMAkJIyBzaGlmdCBnLWJpdCB0byBjLWJpdAorCWJjYy53CQl0cnVuY2F0ZQkJIyBpZiAoZz0xKSB0aGVuCisKKwlzd2FwCQklZDEJCQkjIHNldCB1cCBkMSBmb3Igcm91bmQgcHJlYy4KKworCWNtcGkuYgkJJWQxLCAmc19tb2RlCQkjIGlzIHByZWMgPSBzZ2w/CisJYmVxLncJCWFkZF9zZ2wJCQkjIHllcworCWJndC53CQlhZGRfZGJsCQkJIyBubzsgaXQncyBkYmwKKwlicmEudwkJYWRkX2V4dAkJCSMgbm87IGl0J3MgZXh0CisKKyMgKioqIExPQ0FMIEVRVUFURVMgKioqCitzZXQJYWRfMV9zZ2wsCTB4MDAwMDAxMDAJIyBjb25zdGFudCB0byBhZGQgMSB0byBsLWJpdCBpbiBzZ2wgcHJlYworc2V0CWFkXzFfZGJsLAkweDAwMDAwODAwCSMgY29uc3RhbnQgdG8gYWRkIDEgdG8gbC1iaXQgaW4gZGJsIHByZWMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwlBREQgU0lOR0xFCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2FkZF9zZ2w6CisJYWRkLmwJCSZhZF8xX3NnbCwgRlRFTVBfSEkoJWEwKQorCWJjYy5iCQlzY2NfY2xyCQkJIyBubyBtYW50aXNzYSBvdmVyZmxvdworCXJveHIudwkJRlRFTVBfSEkoJWEwKQkJIyBzaGlmdCB2LWJpdCBiYWNrIGluCisJcm94ci53CQlGVEVNUF9ISSsyKCVhMCkJCSMgc2hpZnQgdi1iaXQgYmFjayBpbgorCWFkZC53CQkmMHgxLCBGVEVNUF9FWCglYTApCSMgYW5kIGluY3IgZXhwb25lbnQKK3NjY19jbHI6CisJdHN0LmwJCSVkMAkJCSMgdGVzdCBmb3IgcnMgPSAwCisJYm5lLmIJCXNnbF9kb25lCisJYW5kLncJCSYweGZlMDAsIEZURU1QX0hJKzIoJWEwKSAjIGNsZWFyIHRoZSBsLWJpdAorc2dsX2RvbmU6CisJYW5kLmwJCSYweGZmZmZmZjAwLCBGVEVNUF9ISSglYTApICMgdHJ1bmNhdGUgYml0cyBiZXlvbmQgc2dsIGxpbWl0CisJY2xyLmwJCUZURU1QX0xPKCVhMCkJCSMgY2xlYXIgZDIKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIwlBREQgRVhURU5ERUQJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworYWRkX2V4dDoKKwlhZGRxLmwJCSYxLEZURU1QX0xPKCVhMCkJIyBhZGQgMSB0byBsLWJpdAorCWJjYy5iCQl4Y2NfY2xyCQkJIyB0ZXN0IGZvciBjYXJyeSBvdXQKKwlhZGRxLmwJCSYxLEZURU1QX0hJKCVhMCkJIyBwcm9wYWdhdGUgY2FycnkKKwliY2MuYgkJeGNjX2NscgorCXJveHIudwkJRlRFTVBfSEkoJWEwKQkJIyBtYW50IGlzIDAgc28gcmVzdG9yZSB2LWJpdAorCXJveHIudwkJRlRFTVBfSEkrMiglYTApCQkjIG1hbnQgaXMgMCBzbyByZXN0b3JlIHYtYml0CisJcm94ci53CQlGVEVNUF9MTyglYTApCisJcm94ci53CQlGVEVNUF9MTysyKCVhMCkKKwlhZGQudwkJJjB4MSxGVEVNUF9FWCglYTApCSMgYW5kIGluYyBleHAKK3hjY19jbHI6CisJdHN0LmwJCSVkMAkJCSMgdGVzdCBycyA9IDAKKwlibmUuYgkJYWRkX2V4dF9kb25lCisJYW5kLmIJCSYweGZlLEZURU1QX0xPKzMoJWEwKQkjIGNsZWFyIHRoZSBsIGJpdAorYWRkX2V4dF9kb25lOgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCUFERCBET1VCTEUJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworYWRkX2RibDoKKwlhZGQubAkJJmFkXzFfZGJsLCBGVEVNUF9MTyglYTApICMgYWRkIDEgdG8gbHNiCisJYmNjLmIJCWRjY19jbHIJCQkjIG5vIGNhcnJ5CisJYWRkcS5sCQkmMHgxLCBGVEVNUF9ISSglYTApCSMgcHJvcGFnYXRlIGNhcnJ5CisJYmNjLmIJCWRjY19jbHIJCQkjIG5vIGNhcnJ5CisKKwlyb3hyLncJCUZURU1QX0hJKCVhMCkJCSMgbWFudCBpcyAwIHNvIHJlc3RvcmUgdi1iaXQKKwlyb3hyLncJCUZURU1QX0hJKzIoJWEwKQkJIyBtYW50IGlzIDAgc28gcmVzdG9yZSB2LWJpdAorCXJveHIudwkJRlRFTVBfTE8oJWEwKQorCXJveHIudwkJRlRFTVBfTE8rMiglYTApCisJYWRkcS53CQkmMHgxLCBGVEVNUF9FWCglYTApCSMgaW5jciBleHBvbmVudAorZGNjX2NscjoKKwl0c3QubAkJJWQwCQkJIyB0ZXN0IGZvciBycyA9IDAKKwlibmUuYgkJZGJsX2RvbmUKKwlhbmQudwkJJjB4ZjAwMCwgRlRFTVBfTE8rMiglYTApICMgY2xlYXIgdGhlIGwtYml0CisKK2RibF9kb25lOgorCWFuZC5sCQkmMHhmZmZmZjgwMCxGVEVNUF9MTyglYTApICMgdHJ1bmNhdGUgYml0cyBiZXlvbmQgZGJsIGxpbWl0CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUcnVuY2F0ZSBhbGwgb3RoZXIgYml0cyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3RydW5jYXRlOgorCXN3YXAJCSVkMQkJCSMgc2VsZWN0IHJuZCBwcmVjCisKKwljbXBpLmIJCSVkMSwgJnNfbW9kZQkJIyBpcyBwcmVjIHNnbD8KKwliZXEudwkJc2dsX2RvbmUJCSMgeWVzCisJYmd0LmIJCWRibF9kb25lCQkjIG5vOyBpdCdzIGRibAorCXJ0cwkJCQkJIyBubzsgaXQncyBleHQKKworCisjCisjIGV4dF9ncnMoKTogZXh0cmFjdCBndWFyZCwgcm91bmQgYW5kIHN0aWNreSBiaXRzIGFjY29yZGluZyB0bworIwkgICAgIHJvdW5kaW5nIHByZWNpc2lvbi4KKyMKKyMgSU5QVVQKKyMJZDAJICAgPSBleHRlbmRlZCBwcmVjaXNpb24gZyxyLHMgKGluIGQwezMxOjI5fSkKKyMJZDEJICAgPSB7UFJFQyxST1VORH0KKyMgT1VUUFVUCisjCWQwezMxOjI5fSAgPSBndWFyZCwgcm91bmQsIHN0aWNreQorIworIyBUaGUgZXh0X2dycyBleHRyYWN0IHRoZSBndWFyZC9yb3VuZC9zdGlja3kgYml0cyBhY2NvcmRpbmcgdG8gdGhlCisjIHNlbGVjdGVkIHJvdW5kaW5nIHByZWNpc2lvbi4gSXQgaXMgY2FsbGVkIGJ5IHRoZSByb3VuZCBzdWJyb3V0aW5lCisjIG9ubHkuICBBbGwgcmVnaXN0ZXJzIGV4Y2VwdCBkMCBhcmUga2VwdCBpbnRhY3QuIGQwIGJlY29tZXMgYW4KKyMgdXBkYXRlZCBndWFyZCxyb3VuZCxzdGlja3kgaW4gZDB7MzE6Mjl9CisjCisjIE5vdGVzOiB0aGUgZXh0X2dycyB1c2VzIHRoZSByb3VuZCBQUkVDLCBhbmQgdGhlcmVmb3JlIGhhcyB0byBzd2FwIGQxCisjCSBwcmlvciB0byB1c2FnZSwgYW5kIG5lZWRzIHRvIHJlc3RvcmUgZDEgdG8gb3JpZ2luYWwuIHRoaXMKKyMJIHJvdXRpbmUgaXMgdGlnaHRseSB0aWVkIHRvIHRoZSByb3VuZCByb3V0aW5lIGFuZCBub3QgbWVhbnQgdG8KKyMJIHVwaG9sZCBzdGFuZGFyZCBzdWJyb3V0aW5lIGNhbGxpbmcgcHJhY3RpY2VzLgorIworCitleHRfZ3JzOgorCXN3YXAJCSVkMQkJCSMgaGF2ZSBkMS53IHBvaW50IHRvIHJvdW5kIHByZWNpc2lvbgorCXRzdC5iCQklZDEJCQkjIGlzIHJuZCBwcmVjID0gZXh0ZW5kZWQ/CisJYm5lLmIJCWV4dF9ncnNfbm90X2V4dAkJIyBubzsgZ28gaGFuZGxlIHNnbCBvciBkYmwKKworIworIyAlZDAgYWN0dWFsbHkgYWxyZWFkeSBob2xkIGcscixzIHNpbmNlIF9yb3VuZCgpIGhhZCBpdCBiZWZvcmUgY2FsbGluZworIyB0aGlzIGZ1bmN0aW9uLiBzbywgYXMgbG9uZyBhcyB3ZSBkb24ndCBkaXN0dXJiIGl0LCB3ZSBhcmUgInJldHVybmluZyIgaXQuCisjCitleHRfZ3JzX2V4dDoKKwlzd2FwCQklZDEJCQkjIHllczsgcmV0dXJuIHRvIGNvcnJlY3QgcG9zaXRpb25zCisJcnRzCisKK2V4dF9ncnNfbm90X2V4dDoKKwltb3ZtLmwJCSYweDMwMDAsIC0oJXNwKQkJIyBtYWtlIHNvbWUgdGVtcCByZWdpc3RlcnMge2QyL2QzfQorCisJY21waS5iCQklZDEsICZzX21vZGUJCSMgaXMgcm5kIHByZWMgPSBzZ2w/CisJYm5lLmIJCWV4dF9ncnNfZGJsCQkjIG5vOyBnbyBoYW5kbGUgZGJsCisKKyMKKyMgc2dsOgorIwk5NgkJNjQJICA0MAkzMgkJMAorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwl8IEVYUAl8WFhYWFhYWHwJICB8eHgJfAkJfGdyc3wKKyMJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJCQk8LS0oMjQpLS0tPm5uXAkJCSAgIC8KKyMJCQkJICAgZWUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCQkJCSAgIHd3CQl8CisjCQkJCQkJdgorIwkJCQkgICBncgkgICBuZXcgc3RpY2t5CisjCitleHRfZ3JzX3NnbDoKKwliZmV4dHUJCUZURU1QX0hJKCVhMCl7JjI0OiYyfSwgJWQzICMgc2dsIHByZWMuIGctciBhcmUgMiBiaXRzIHJpZ2h0CisJbW92LmwJCSYzMCwgJWQyCQkjIG9mIHRoZSBzZ2wgcHJlYy4gbGltaXRzCisJbHNsLmwJCSVkMiwgJWQzCQkjIHNoaWZ0IGctciBiaXRzIHRvIE1TQiBvZiBkMworCW1vdi5sCQlGVEVNUF9ISSglYTApLCAlZDIJIyBnZXQgd29yZCAyIGZvciBzLWJpdCB0ZXN0CisJYW5kLmwJCSYweDAwMDAwMDNmLCAlZDIJIyBzIGJpdCBpcyB0aGUgb3Igb2YgYWxsIG90aGVyCisJYm5lLmIJCWV4dF9ncnNfc3Rfc3RreQkJIyBiaXRzIHRvIHRoZSByaWdodCBvZiBnLXIKKwl0c3QubAkJRlRFTVBfTE8oJWEwKQkJIyB0ZXN0IGxvd2VyIG1hbnRpc3NhCisJYm5lLmIJCWV4dF9ncnNfc3Rfc3RreQkJIyBpZiBhbnkgYXJlIHNldCwgc2V0IHN0aWNreQorCXRzdC5sCQklZDAJCQkjIHRlc3Qgb3JpZ2luYWwgZyxyLHMKKwlibmUuYgkJZXh0X2dyc19zdF9zdGt5CQkjIGlmIGFueSBhcmUgc2V0LCBzZXQgc3RpY2t5CisJYnJhLmIJCWV4dF9ncnNfZW5kX3NkCQkjIGlmIHdvcmRzIDMgYW5kIDQgYXJlIGNsciwgZXhpdAorCisjCisjIGRibDoKKyMJOTYJCTY0CQkzMgkgMTEJMAorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwl8IEVYUAl8WFhYWFhYWHwJCXwJIHx4eAl8Z3JzfAorIwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIwkJCQkJCSAgbm5cCSAgICAvCisjCQkJCQkJICBlZSAtLS0tLS0tCisjCQkJCQkJICB3dwl8CisjCQkJCQkJCXYKKyMJCQkJCQkgIGdyCW5ldyBzdGlja3kKKyMKK2V4dF9ncnNfZGJsOgorCWJmZXh0dQkJRlRFTVBfTE8oJWEwKXsmMjE6JjJ9LCAlZDMgIyBkYmwtcHJlYy4gZy1yIGFyZSAyIGJpdHMgcmlnaHQKKwltb3YubAkJJjMwLCAlZDIJCSMgb2YgdGhlIGRibCBwcmVjLiBsaW1pdHMKKwlsc2wubAkJJWQyLCAlZDMJCSMgc2hpZnQgZy1yIGJpdHMgdG8gdGhlIE1TQiBvZiBkMworCW1vdi5sCQlGVEVNUF9MTyglYTApLCAlZDIJIyBnZXQgbG93ZXIgbWFudGlzc2EgIGZvciBzLWJpdCB0ZXN0CisJYW5kLmwJCSYweDAwMDAwMWZmLCAlZDIJIyBzIGJpdCBpcyB0aGUgb3ItaW5nIG9mIGFsbAorCWJuZS5iCQlleHRfZ3JzX3N0X3N0a3kJCSMgb3RoZXIgYml0cyB0byB0aGUgcmlnaHQgb2YgZy1yCisJdHN0LmwJCSVkMAkJCSMgdGVzdCB3b3JkIG9yaWdpbmFsIGcscixzCisJYm5lLmIJCWV4dF9ncnNfc3Rfc3RreQkJIyBpZiBhbnkgYXJlIHNldCwgc2V0IHN0aWNreQorCWJyYS5iCQlleHRfZ3JzX2VuZF9zZAkJIyBpZiBjbGVhciwgZXhpdAorCitleHRfZ3JzX3N0X3N0a3k6CisJYnNldAkJJnJuZF9zdGt5X2JpdCwgJWQzCSMgc2V0IHN0aWNreSBiaXQKK2V4dF9ncnNfZW5kX3NkOgorCW1vdi5sCQklZDMsICVkMAkJIyByZXR1cm4gZ3JzIHRvIGQwCisKKwltb3ZtLmwJCSglc3ApKywgJjB4YwkJIyByZXN0b3JlIHNjcmF0Y2ggcmVnaXN0ZXJzIHtkMi9kM30KKworCXN3YXAJCSVkMQkJCSMgcmVzdG9yZSBkMSB0byBvcmlnaW5hbAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIG5vcm0oKTogbm9ybWFsaXplIHRoZSBtYW50aXNzYSBvZiBhbiBleHRlbmRlZCBwcmVjaXNpb24gaW5wdXQuIHRoZQkjCisjCSAgaW5wdXQgb3BlcmFuZCBzaG91bGQgbm90IGJlIG5vcm1hbGl6ZWQgYWxyZWFkeS4JCSMKKyMJCQkJCQkJCQkjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCW5vcm0oKQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJbm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJYTAgPSBwb2ludGVyIGZwIGV4dGVuZGVkIHByZWNpc2lvbiBvcGVyYW5kIHRvIG5vcm1hbGl6ZQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJZDAgPSBudW1iZXIgb2YgYml0IHBvc2l0aW9ucyB0aGUgbWFudGlzc2Egd2FzIHNoaWZ0ZWQJCSMKKyMJYTAgPSB0aGUgaW5wdXQgb3BlcmFuZCdzIG1hbnRpc3NhIGlzIG5vcm1hbGl6ZWQ7IHRoZSBleHBvbmVudAkjCisjCSAgICAgaXMgdW5jaGFuZ2VkLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJZ2xvYmFsCQlub3JtCitub3JtOgorCW1vdi5sCQklZDIsIC0oJXNwKQkJIyBjcmVhdGUgc29tZSB0ZW1wIHJlZ3MKKwltb3YubAkJJWQzLCAtKCVzcCkKKworCW1vdi5sCQlGVEVNUF9ISSglYTApLCAlZDAJIyBsb2FkIGhpKG1hbnRpc3NhKQorCW1vdi5sCQlGVEVNUF9MTyglYTApLCAlZDEJIyBsb2FkIGxvKG1hbnRpc3NhKQorCisJYmZmZm8JCSVkMHsmMDomMzJ9LCAlZDIJIyBob3cgbWFueSBwbGFjZXMgdG8gc2hpZnQ/CisJYmVxLmIJCW5vcm1fbG8JCQkjIGhpKG1hbikgaXMgYWxsIHplcm9lcyEKKworbm9ybV9oaToKKwlsc2wubAkJJWQyLCAlZDAJCSMgbGVmdCBzaGlmdCBoaShtYW4pCisJYmZleHR1CQklZDF7JjA6JWQyfSwgJWQzCSMgZXh0cmFjdCBsbyBiaXRzCisKKwlvci5sCQklZDMsICVkMAkJIyBjcmVhdGUgaGkobWFuKQorCWxzbC5sCQklZDIsICVkMQkJIyBjcmVhdGUgbG8obWFuKQorCisJbW92LmwJCSVkMCwgRlRFTVBfSEkoJWEwKQkjIHN0b3JlIG5ldyBoaShtYW4pCisJbW92LmwJCSVkMSwgRlRFTVBfTE8oJWEwKQkjIHN0b3JlIG5ldyBsbyhtYW4pCisKKwltb3YubAkJJWQyLCAlZDAJCSMgcmV0dXJuIHNoaWZ0IGFtb3VudAorCisJbW92LmwJCSglc3ApKywgJWQzCQkjIHJlc3RvcmUgdGVtcCByZWdzCisJbW92LmwJCSglc3ApKywgJWQyCisKKwlydHMKKworbm9ybV9sbzoKKwliZmZmbwkJJWQxeyYwOiYzMn0sICVkMgkjIGhvdyBtYW55IHBsYWNlcyB0byBzaGlmdD8KKwlsc2wubAkJJWQyLCAlZDEJCSMgc2hpZnQgbG8obWFuKQorCWFkZC5sCQkmMzIsICVkMgkJIyBhZGQgMzIgdG8gc2hmdCBhbW91bnQKKworCW1vdi5sCQklZDEsIEZURU1QX0hJKCVhMCkJIyBzdG9yZSBoaShtYW4pCisJY2xyLmwJCUZURU1QX0xPKCVhMCkJCSMgbG8obWFuKSBpcyBub3cgemVybworCisJbW92LmwJCSVkMiwgJWQwCQkjIHJldHVybiBzaGlmdCBhbW91bnQKKworCW1vdi5sCQkoJXNwKSssICVkMwkJIyByZXN0b3JlIHRlbXAgcmVncworCW1vdi5sCQkoJXNwKSssICVkMgorCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgdW5ub3JtX2ZpeCgpOiAtIGNoYW5nZXMgYW4gVU5OT1JNIHRvIG9uZSBvZiBOT1JNLCBERU5PUk0sIG9yIFpFUk8JIworIwkJLSByZXR1cm5zIGNvcnJlc3BvbmRpbmcgb3B0eXBlIHRhZwkJCSMKKyMJCQkJCQkJCQkjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXVubm9ybV9maXgoKQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlub3JtKCkgLSBub3JtYWxpemUgdGhlIG1hbnRpc3NhCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIworIwlhMCA9IHBvaW50ZXIgdG8gdW5ub3JtYWxpemVkIGV4dGVuZGVkIHByZWNpc2lvbiBudW1iZXIJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWQwID0gb3B0eXBlIHRhZyAtIGlzIGNvcnJlY3RlZCB0byBvbmUgb2YgTk9STSwgREVOT1JNLCBvciBaRVJPCSMKKyMJYTAgPSBpbnB1dCBvcGVyYW5kIGhhcyBiZWVuIGNvbnZlcnRlZCB0byBhIG5vcm0sIGRlbm9ybSwgb3IJIworIwkgICAgIHplcm87IGJvdGggdGhlIGV4cG9uZW50IGFuZCBtYW50aXNzYSBhcmUgY2hhbmdlZC4JCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXVubm9ybV9maXgKK3Vubm9ybV9maXg6CisJYmZmZm8JCUZURU1QX0hJKCVhMCl7JjA6JjMyfSwgJWQwICMgaG93IG1hbnkgc2hpZnRzIGFyZSBuZWVkZWQ/CisJYm5lLmIJCXVubm9ybV9zaGlmdAkJIyBoaShtYW4pIGlzIG5vdCBhbGwgemVyb2VzCisKKyMKKyMgaGkobWFuKSBpcyBhbGwgemVyb2VzIHNvIHNlZSBpZiBhbnkgYml0cyBpbiBsbyhtYW4pIGFyZSBzZXQKKyMKK3Vubm9ybV9jaGtfbG86CisJYmZmZm8JCUZURU1QX0xPKCVhMCl7JjA6JjMyfSwgJWQwICMgaXMgb3BlcmFuZCByZWFsbHkgYSB6ZXJvPworCWJlcS53CQl1bm5vcm1femVybwkJIyB5ZXMKKworCWFkZC53CQkmMzIsICVkMAkJIyBubzsgZml4IHNoaWZ0IGRpc3RhbmNlCisKKyMKKyMgZDAgPSAjIHNoaWZ0cyBuZWVkZWQgZm9yIGNvbXBsZXRlIG5vcm1hbGl6YXRpb24KKyMKK3Vubm9ybV9zaGlmdDoKKwljbHIubAkJJWQxCQkJIyBjbGVhciB0b3Agd29yZAorCW1vdi53CQlGVEVNUF9FWCglYTApLCAlZDEJIyBleHRyYWN0IGV4cG9uZW50CisJYW5kLncJCSYweDdmZmYsICVkMQkJIyBzdHJpcCBvZmYgc2duCisKKwljbXAudwkJJWQwLCAlZDEJCSMgd2lsbCBkZW5vcm0gcHVzaCBleHAgPCAwPworCWJndC5iCQl1bm5vcm1fbnJtX3plcm8JCSMgeWVzOyBkZW5vcm0gb25seSB1bnRpbCBleHAgPSAwCisKKyMKKyMgZXhwb25lbnQgd291bGQgbm90IGdvIDwgMC4gdGhlcmVmb3JlLCBudW1iZXIgc3RheXMgbm9ybWFsaXplZAorIworCXN1Yi53CQklZDAsICVkMQkJIyBzaGlmdCBleHBvbmVudCB2YWx1ZQorCW1vdi53CQlGVEVNUF9FWCglYTApLCAlZDAJIyBsb2FkIG9sZCBleHBvbmVudAorCWFuZC53CQkmMHg4MDAwLCAlZDAJCSMgc2F2ZSBvbGQgc2lnbgorCW9yLncJCSVkMCwgJWQxCQkjIHtzZ24sbmV3IGV4cH0KKwltb3YudwkJJWQxLCBGVEVNUF9FWCglYTApCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSBVTk5PUk0KKworCW1vdi5iCQkmTk9STSwgJWQwCQkjIHJldHVybiBuZXcgb3B0eXBlIHRhZworCXJ0cworCisjCisjIGV4cG9uZW50IHdvdWxkIGdvIDwgMCwgc28gb25seSBkZW5vcm1hbGl6ZSB1bnRpbCBleHAgPSAwCisjCit1bm5vcm1fbnJtX3plcm86CisJY21wLmIJCSVkMSwgJjMyCQkjIGlzIGV4cCA8PSAzMj8KKwliZ3QuYgkJdW5ub3JtX25ybV96ZXJvX2xyZwkjIG5vOyBnbyBoYW5kbGUgbGFyZ2UgZXhwb25lbnQKKworCWJmZXh0dQkJRlRFTVBfSEkoJWEwKXslZDE6JjMyfSwgJWQwICMgZXh0cmFjdCBuZXcgaGkobWFuKQorCW1vdi5sCQklZDAsIEZURU1QX0hJKCVhMCkJIyBzYXZlIG5ldyBoaShtYW4pCisKKwltb3YubAkJRlRFTVBfTE8oJWEwKSwgJWQwCSMgZmV0Y2ggb2xkIGxvKG1hbikKKwlsc2wubAkJJWQxLCAlZDAJCSMgZXh0cmFjdCBuZXcgbG8obWFuKQorCW1vdi5sCQklZDAsIEZURU1QX0xPKCVhMCkJIyBzYXZlIG5ldyBsbyhtYW4pCisKKwlhbmQudwkJJjB4ODAwMCwgRlRFTVBfRVgoJWEwKQkjIHNldCBleHAgPSAwCisKKwltb3YuYgkJJkRFTk9STSwgJWQwCQkjIHJldHVybiBuZXcgb3B0eXBlIHRhZworCXJ0cworCisjCisjIG9ubHkgbWFudGlzc2EgYml0cyBzZXQgYXJlIGluIGxvKG1hbikKKyMKK3Vubm9ybV9ucm1femVyb19scmc6CisJc3ViLncJCSYzMiwgJWQxCQkjIGFkanVzdCBzaGZ0IGFtdCBieSAzMgorCisJbW92LmwJCUZURU1QX0xPKCVhMCksICVkMAkjIGZldGNoIG9sZCBsbyhtYW4pCisJbHNsLmwJCSVkMSwgJWQwCQkjIGxlZnQgc2hpZnQgbG8obWFuKQorCisJbW92LmwJCSVkMCwgRlRFTVBfSEkoJWEwKQkjIHN0b3JlIG5ldyBoaShtYW4pCisJY2xyLmwJCUZURU1QX0xPKCVhMCkJCSMgbG8obWFuKSA9IDAKKworCWFuZC53CQkmMHg4MDAwLCBGVEVNUF9FWCglYTApCSMgc2V0IGV4cCA9IDAKKworCW1vdi5iCQkmREVOT1JNLCAlZDAJCSMgcmV0dXJuIG5ldyBvcHR5cGUgdGFnCisJcnRzCisKKyMKKyMgd2hvbGUgbWFudGlzc2EgaXMgemVybyBzbyB0aGlzIFVOTk9STSBpcyBhY3R1YWxseSBhIHplcm8KKyMKK3Vubm9ybV96ZXJvOgorCWFuZC53CQkmMHg4MDAwLCBGVEVNUF9FWCglYTApCSMgZm9yY2UgZXhwb25lbnQgdG8gemVybworCisJbW92LmIJCSZaRVJPLCAlZDAJCSMgZml4IG9wdHlwZSB0YWcKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlzZXRfdGFnX3goKTogcmV0dXJuIHRoZSBvcHR5cGUgb2YgdGhlIGlucHV0IGV4dCBmcCBudW1iZXIJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBvcGVyYW5kCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZDAgPSB2YWx1ZSBvZiB0eXBlIHRhZwkJCQkJCSMKKyMJCW9uZSBvZjogTk9STSwgSU5GLCBRTkFOLCBTTkFOLCBERU5PUk0sIFVOTk9STSwgWkVSTwkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlTaW1wbHkgdGVzdCB0aGUgZXhwb25lbnQsIGotYml0LCBhbmQgbWFudGlzc2EgdmFsdWVzIHRvCQkjCisjIGRldGVybWluZSB0aGUgdHlwZSBvZiBvcGVyYW5kLgkJCQkJIworIwlJZiBpdCdzIGFuIHVubm9ybWFsaXplZCB6ZXJvLCBhbHRlciB0aGUgb3BlcmFuZCBhbmQgZm9yY2UgaXQJIworIyB0byBiZSBhIG5vcm1hbCB6ZXJvLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzZXRfdGFnX3gKK3NldF90YWdfeDoKKwltb3YudwkJRlRFTVBfRVgoJWEwKSwgJWQwCSMgZXh0cmFjdCBleHBvbmVudAorCWFuZGkudwkJJjB4N2ZmZiwgJWQwCQkjIHN0cmlwIG9mZiBzaWduCisJY21waS53CQklZDAsICYweDdmZmYJCSMgaXMgKEVYUCA9PSBNQVgpPworCWJlcS5iCQlpbmZfb3JfbmFuX3gKK25vdF9pbmZfb3JfbmFuX3g6CisJYnRzdAkJJjB4NyxGVEVNUF9ISSglYTApCisJYmVxLmIJCW5vdF9ub3JtX3gKK2lzX25vcm1feDoKKwltb3YuYgkJJk5PUk0sICVkMAorCXJ0cworbm90X25vcm1feDoKKwl0c3QudwkJJWQwCQkJIyBpcyBleHBvbmVudCA9IDA/CisJYm5lLmIJCWlzX3Vubm9ybV94Citub3RfdW5ub3JtX3g6CisJdHN0LmwJCUZURU1QX0hJKCVhMCkKKwlibmUuYgkJaXNfZGVub3JtX3gKKwl0c3QubAkJRlRFTVBfTE8oJWEwKQorCWJuZS5iCQlpc19kZW5vcm1feAoraXNfemVyb194OgorCW1vdi5iCQkmWkVSTywgJWQwCisJcnRzCitpc19kZW5vcm1feDoKKwltb3YuYgkJJkRFTk9STSwgJWQwCisJcnRzCisjIG11c3QgZGlzdGluZ3Vpc2ggbm93ICJVbm5vcm1hbGl6ZWQgemVyb2VzIiB3aGljaCB3ZQorIyBtdXN0IGNvbnZlcnQgdG8gemVyby4KK2lzX3Vubm9ybV94OgorCXRzdC5sCQlGVEVNUF9ISSglYTApCisJYm5lLmIJCWlzX3Vubm9ybV9yZWdfeAorCXRzdC5sCQlGVEVNUF9MTyglYTApCisJYm5lLmIJCWlzX3Vubm9ybV9yZWdfeAorIyBpdCdzIGFuICJ1bm5vcm1hbGl6ZWQgemVybyIuIGxldCdzIGNvbnZlcnQgaXQgdG8gYW4gYWN0dWFsIHplcm8uLi4KKwlhbmRpLncJCSYweDgwMDAsRlRFTVBfRVgoJWEwKQkjIGNsZWFyIGV4cG9uZW50CisJbW92LmIJCSZaRVJPLCAlZDAKKwlydHMKK2lzX3Vubm9ybV9yZWdfeDoKKwltb3YuYgkJJlVOTk9STSwgJWQwCisJcnRzCitpbmZfb3JfbmFuX3g6CisJdHN0LmwJCUZURU1QX0xPKCVhMCkKKwlibmUuYgkJaXNfbmFuX3gKKwltb3YubAkJRlRFTVBfSEkoJWEwKSwgJWQwCisJYW5kLmwJCSYweDdmZmZmZmZmLCAlZDAJIyBtc2IgaXMgYSBkb24ndCBjYXJlIQorCWJuZS5iCQlpc19uYW5feAoraXNfaW5mX3g6CisJbW92LmIJCSZJTkYsICVkMAorCXJ0cworaXNfbmFuX3g6CisJYnRzdAkJJjB4NiwgRlRFTVBfSEkoJWEwKQorCWJlcS5iCQlpc19zbmFuX3gKKwltb3YuYgkJJlFOQU4sICVkMAorCXJ0cworaXNfc25hbl94OgorCW1vdi5iCQkmU05BTiwgJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJc2V0X3RhZ19kKCk6IHJldHVybiB0aGUgb3B0eXBlIG9mIHRoZSBpbnB1dCBkYmwgZnAgbnVtYmVyCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRzIHRvIGRvdWJsZSBwcmVjaXNpb24gb3BlcmFuZAkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IHZhbHVlIG9mIHR5cGUgdGFnCQkJCQkJIworIwkJb25lIG9mOiBOT1JNLCBJTkYsIFFOQU4sIFNOQU4sIERFTk9STSwgWkVSTwkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJU2ltcGx5IHRlc3QgdGhlIGV4cG9uZW50LCBqLWJpdCwgYW5kIG1hbnRpc3NhIHZhbHVlcyB0bwkJIworIyBkZXRlcm1pbmUgdGhlIHR5cGUgb2Ygb3BlcmFuZC4JCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXNldF90YWdfZAorc2V0X3RhZ19kOgorCW1vdi5sCQlGVEVNUCglYTApLCAlZDAKKwltb3YubAkJJWQwLCAlZDEKKworCWFuZGkubAkJJjB4N2ZmMDAwMDAsICVkMAorCWJlcS5iCQl6ZXJvX29yX2Rlbm9ybV9kCisKKwljbXBpLmwJCSVkMCwgJjB4N2ZmMDAwMDAKKwliZXEuYgkJaW5mX29yX25hbl9kCisKK2lzX25vcm1fZDoKKwltb3YuYgkJJk5PUk0sICVkMAorCXJ0cworemVyb19vcl9kZW5vcm1fZDoKKwlhbmQubAkJJjB4MDAwZmZmZmYsICVkMQorCWJuZQkJaXNfZGVub3JtX2QKKwl0c3QubAkJNCtGVEVNUCglYTApCisJYm5lCQlpc19kZW5vcm1fZAoraXNfemVyb19kOgorCW1vdi5iCQkmWkVSTywgJWQwCisJcnRzCitpc19kZW5vcm1fZDoKKwltb3YuYgkJJkRFTk9STSwgJWQwCisJcnRzCitpbmZfb3JfbmFuX2Q6CisJYW5kLmwJCSYweDAwMGZmZmZmLCAlZDEKKwlibmUJCWlzX25hbl9kCisJdHN0LmwJCTQrRlRFTVAoJWEwKQorCWJuZQkJaXNfbmFuX2QKK2lzX2luZl9kOgorCW1vdi5iCQkmSU5GLCAlZDAKKwlydHMKK2lzX25hbl9kOgorCWJ0c3QJCSYxOSwgJWQxCisJYm5lCQlpc19xbmFuX2QKK2lzX3NuYW5fZDoKKwltb3YuYgkJJlNOQU4sICVkMAorCXJ0cworaXNfcW5hbl9kOgorCW1vdi5iCQkmUU5BTiwgJWQwCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJc2V0X3RhZ19zKCk6IHJldHVybiB0aGUgb3B0eXBlIG9mIHRoZSBpbnB1dCBzZ2wgZnAgbnVtYmVyCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBzaW5nbGUgcHJlY2lzaW9uIG9wZXJhbmQJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IHZhbHVlIG9mIHR5cGUgdGFnCQkJCQkJIworIwkJb25lIG9mOiBOT1JNLCBJTkYsIFFOQU4sIFNOQU4sIERFTk9STSwgWkVSTwkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJU2ltcGx5IHRlc3QgdGhlIGV4cG9uZW50LCBqLWJpdCwgYW5kIG1hbnRpc3NhIHZhbHVlcyB0bwkJIworIyBkZXRlcm1pbmUgdGhlIHR5cGUgb2Ygb3BlcmFuZC4JCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXNldF90YWdfcworc2V0X3RhZ19zOgorCW1vdi5sCQlGVEVNUCglYTApLCAlZDAKKwltb3YubAkJJWQwLCAlZDEKKworCWFuZGkubAkJJjB4N2Y4MDAwMDAsICVkMAorCWJlcS5iCQl6ZXJvX29yX2Rlbm9ybV9zCisKKwljbXBpLmwJCSVkMCwgJjB4N2Y4MDAwMDAKKwliZXEuYgkJaW5mX29yX25hbl9zCisKK2lzX25vcm1fczoKKwltb3YuYgkJJk5PUk0sICVkMAorCXJ0cworemVyb19vcl9kZW5vcm1fczoKKwlhbmQubAkJJjB4MDA3ZmZmZmYsICVkMQorCWJuZQkJaXNfZGVub3JtX3MKK2lzX3plcm9fczoKKwltb3YuYgkJJlpFUk8sICVkMAorCXJ0cworaXNfZGVub3JtX3M6CisJbW92LmIJCSZERU5PUk0sICVkMAorCXJ0cworaW5mX29yX25hbl9zOgorCWFuZC5sCQkmMHgwMDdmZmZmZiwgJWQxCisJYm5lCQlpc19uYW5fcworaXNfaW5mX3M6CisJbW92LmIJCSZJTkYsICVkMAorCXJ0cworaXNfbmFuX3M6CisJYnRzdAkJJjIyLCAlZDEKKwlibmUJCWlzX3FuYW5fcworaXNfc25hbl9zOgorCW1vdi5iCQkmU05BTiwgJWQwCisJcnRzCitpc19xbmFuX3M6CisJbW92LmIJCSZRTkFOLCAlZDAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwl1bmZfcmVzKCk6IHJvdXRpbmUgdG8gcHJvZHVjZSBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQgb2YgYQkjCisjCQkgICBzY2FsZWQgZXh0ZW5kZWQgcHJlY2lzaW9uIG51bWJlcjsgdGhpcyBpcyB1c2VkIGJ5CSMKKyMJCSAgIGZhZGQvZmRpdi9mbXVsL2V0Yy4gZW11bGF0aW9uIHJvdXRpbmVzLgkJIworIwl1bmZfcmVzNCgpOiBzYW1lIGFzIGFib3ZlIGJ1dCBmb3IgZnNnbG11bC9mc2dsZGl2IHdoaWNoIHVzZQkjCisjCQkgICAgc2luZ2xlIHJvdW5kIHByZWMgYW5kIGV4dGVuZGVkIHByZWMgbW9kZS4JCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCV9kZW5vcm0oKSAtIGRlbm9ybWFsaXplIGFjY29yZGluZyB0byBzY2FsZSBmYWN0b3IJCSMKKyMJX3JvdW5kKCkgLSByb3VuZCBkZW5vcm1hbGl6ZWQgbnVtYmVyIGFjY29yZGluZyB0byBybmQgcHJlYwkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzb24gb3BlcmFuZAkJCSMKKyMJZDAgPSBzY2FsZSBmYWN0b3IJCQkJCQkjCisjCWQxID0gcm91bmRpbmcgcHJlY2lzaW9uL21vZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uCSMKKyMJZDAuYiA9IHJlc3VsdCBGUFNSX2NjIHdoaWNoIGNhbGxlciBtYXkgb3IgbWF5IG5vdCB3YW50IHRvIHNhdmUJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJQ29udmVydCB0aGUgaW5wdXQgb3BlcmFuZCB0byAiaW50ZXJuYWwgZm9ybWF0IiB3aGljaCBtZWFucyB0aGUJIworIyBleHBvbmVudCBpcyBleHRlbmRlZCB0byAxNiBiaXRzIGFuZCB0aGUgc2lnbiBpcyBzdG9yZWQgaW4gdGhlIHVudXNlZAkjCisjIHBvcnRpb24gb2YgdGhlIGV4dGVuZGVkIHByZWNpc29uIG9wZXJhbmQuIERlbm9ybWFsaXplIHRoZSBudW1iZXIJIworIyBhY2NvcmRpbmcgdG8gdGhlIHNjYWxlIGZhY3RvciBwYXNzZWQgaW4gZDAuIFRoZW4sIHJvdW5kIHRoZQkJIworIyBkZW5vcm1hbGl6ZWQgcmVzdWx0LgkJCQkJCQkjCisjCVNldCB0aGUgRlBTUl9leGMgYml0cyBhcyBhcHByb3ByaWF0ZSBidXQgcmV0dXJuIHRoZSBjYyBiaXRzIGluCSMKKyMgZDAgaW4gY2FzZSB0aGUgY2FsbGVyIGRvZXNuJ3Qgd2FudCB0byBzYXZlIHRoZW0gKGFzIGlzIHRoZSBjYXNlIGZvcgkjCisjIGZtb3ZlIG91dCkuCQkJCQkJCQkjCisjCXVuZl9yZXM0KCkgZm9yIGZzZ2xtdWwvZnNnbGRpdiBmb3JjZXMgdGhlIGRlbm9ybSB0byBleHRlbmRlZAkjCisjIHByZWNpc2lvbiBhbmQgdGhlIHJvdW5kaW5nIG1vZGUgdG8gc2luZ2xlLgkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCWdsb2JhbAkJdW5mX3JlcwordW5mX3JlczoKKwltb3YubAkJJWQxLCAtKCVzcCkJCSMgc2F2ZSBybmQgcHJlYyxtb2RlIG9uIHN0YWNrCisKKwlidHN0CQkmMHg3LCBGVEVNUF9FWCglYTApCSMgbWFrZSAiaW50ZXJuYWwiIGZvcm1hdAorCXNuZQkJRlRFTVBfU0dOKCVhMCkKKworCW1vdi53CQlGVEVNUF9FWCglYTApLCAlZDEJIyBleHRyYWN0IGV4cG9uZW50CisJYW5kLncJCSYweDdmZmYsICVkMQorCXN1Yi53CQklZDAsICVkMQorCW1vdi53CQklZDEsIEZURU1QX0VYKCVhMCkJIyBpbnNlcnQgMTYgYml0IGV4cG9uZW50CisKKwltb3YubAkJJWEwLCAtKCVzcCkJCSMgc2F2ZSBvcGVyYW5kIHB0ciBkdXJpbmcgY2FsbHMKKworCW1vdi5sCQkweDQoJXNwKSwlZDAJCSMgcGFzcyBybmQgcHJlYy4KKwlhbmRpLncJCSYweDAwYzAsJWQwCisJbHNyLncJCSYweDQsJWQwCisJYnNyLmwJCV9kZW5vcm0JCQkjIGRlbm9ybSByZXN1bHQKKworCW1vdi5sCQkoJXNwKSwlYTAKKwltb3YudwkJMHg2KCVzcCksJWQxCQkjIGxvYWQgcHJlYzptb2RlIGludG8gJWQxCisJYW5kaS53CQkmMHhjMCwlZDEJCSMgZXh0cmFjdCBybmQgcHJlYworCWxzci53CQkmMHg0LCVkMQorCXN3YXAJCSVkMQorCW1vdi53CQkweDYoJXNwKSwlZDEKKwlhbmRpLncJCSYweDMwLCVkMQorCWxzci53CQkmMHg0LCVkMQorCWJzci5sCQlfcm91bmQJCQkjIHJvdW5kIHRoZSBkZW5vcm0KKworCW1vdi5sCQkoJXNwKSssICVhMAorCisjIHJlc3VsdCBpcyBub3cgcm91bmRlZCBwcm9wZXJseS4gY29udmVydCBiYWNrIHRvIG5vcm1hbCBmb3JtYXQKKwliY2xyCQkmMHg3LCBGVEVNUF9FWCglYTApCSMgY2xlYXIgc2duIGZpcnN0OyBtYXkgaGF2ZSByZXNpZHVlCisJdHN0LmIJCUZURU1QX1NHTiglYTApCQkjIGlzICJpbnRlcm5hbCByZXN1bHQiIHNpZ24gc2V0PworCWJlcS5iCQl1bmZfcmVzX2Noa2lmemVybwkjIG5vOyByZXN1bHQgaXMgcG9zaXRpdmUKKwlic2V0CQkmMHg3LCBGVEVNUF9FWCglYTApCSMgc2V0IHJlc3VsdCBzZ24KKwljbHIuYgkJRlRFTVBfU0dOKCVhMCkJCSMgY2xlYXIgdGVtcCBzaWduCisKKyMgdGhlIG51bWJlciBtYXkgaGF2ZSBiZWNvbWUgemVybyBhZnRlciByb3VuZGluZy4gc2V0IGNjb2RlcyBhY2NvcmRpbmdseS4KK3VuZl9yZXNfY2hraWZ6ZXJvOgorCWNsci5sCQklZDAKKwl0c3QubAkJRlRFTVBfSEkoJWEwKQkJIyBpcyB2YWx1ZSBub3cgYSB6ZXJvPworCWJuZS5iCQl1bmZfcmVzX2NvbnQJCSMgbm8KKwl0c3QubAkJRlRFTVBfTE8oJWEwKQorCWJuZS5iCQl1bmZfcmVzX2NvbnQJCSMgbm8KKyMJYnNldAkJJnpfYml0LCBGUFNSX0NDKCVhNikJIyB5ZXM7IHNldCB6ZXJvIGNjb2RlIGJpdAorCWJzZXQJCSZ6X2JpdCwgJWQwCQkjIHllczsgc2V0IHplcm8gY2NvZGUgYml0CisKK3VuZl9yZXNfY29udDoKKworIworIyBjYW4gaW5leDEgYWxzbyBiZSBzZXQgYWxvbmcgd2l0aCB1bmZsIGFuZCBpbmV4Mj8/PworIworIyB3ZSBrbm93IHRoYXQgdW5kZXJmbG93IGhhcyBvY2N1cnJlZC4gYXVuZmwgc2hvdWxkIGJlIHNldCBpZiBJTkVYMiBpcyBhbHNvIHNldC4KKyMKKwlidHN0CQkmaW5leDJfYml0LCBGUFNSX0VYQ0VQVCglYTYpICMgaXMgSU5FWDIgc2V0PworCWJlcS5iCQl1bmZfcmVzX2VuZAkJIyBubworCWJzZXQJCSZhdW5mbF9iaXQsIEZQU1JfQUVYQ0VQVCglYTYpICMgeWVzOyBzZXQgYXVuZmwKKwordW5mX3Jlc19lbmQ6CisJYWRkLmwJCSYweDQsICVzcAkJIyBjbGVhciBzdGFjaworCXJ0cworCisjIHVuZl9yZXMoKSBmb3IgZnNnbG11bCgpIGFuZCBmc2dsZGl2KCkuCisJZ2xvYmFsCQl1bmZfcmVzNAordW5mX3JlczQ6CisJbW92LmwJCSVkMSwtKCVzcCkJCSMgc2F2ZSBybmQgcHJlYyxtb2RlIG9uIHN0YWNrCisKKwlidHN0CQkmMHg3LEZURU1QX0VYKCVhMCkJIyBtYWtlICJpbnRlcm5hbCIgZm9ybWF0CisJc25lCQlGVEVNUF9TR04oJWEwKQorCisJbW92LncJCUZURU1QX0VYKCVhMCksJWQxCSMgZXh0cmFjdCBleHBvbmVudAorCWFuZC53CQkmMHg3ZmZmLCVkMQorCXN1Yi53CQklZDAsJWQxCisJbW92LncJCSVkMSxGVEVNUF9FWCglYTApCSMgaW5zZXJ0IDE2IGJpdCBleHBvbmVudAorCisJbW92LmwJCSVhMCwtKCVzcCkJCSMgc2F2ZSBvcGVyYW5kIHB0ciBkdXJpbmcgY2FsbHMKKworCWNsci5sCQklZDAJCQkjIGZvcmNlIHJuZCBwcmVjID0gZXh0CisJYnNyLmwJCV9kZW5vcm0JCQkjIGRlbm9ybSByZXN1bHQKKworCW1vdi5sCQkoJXNwKSwlYTAKKwltb3YudwkJJnNfbW9kZSwlZDEJCSMgZm9yY2Ugcm5kIHByZWMgPSBzZ2wKKwlzd2FwCQklZDEKKwltb3YudwkJMHg2KCVzcCksJWQxCQkjIGxvYWQgcm5kIG1vZGUKKwlhbmRpLncJCSYweDMwLCVkMQkJIyBleHRyYWN0IHJuZCBwcmVjCisJbHNyLncJCSYweDQsJWQxCisJYnNyLmwJCV9yb3VuZAkJCSMgcm91bmQgdGhlIGRlbm9ybQorCisJbW92LmwJCSglc3ApKywlYTAKKworIyByZXN1bHQgaXMgbm93IHJvdW5kZWQgcHJvcGVybHkuIGNvbnZlcnQgYmFjayB0byBub3JtYWwgZm9ybWF0CisJYmNscgkJJjB4NyxGVEVNUF9FWCglYTApCSMgY2xlYXIgc2duIGZpcnN0OyBtYXkgaGF2ZSByZXNpZHVlCisJdHN0LmIJCUZURU1QX1NHTiglYTApCQkjIGlzICJpbnRlcm5hbCByZXN1bHQiIHNpZ24gc2V0PworCWJlcS5iCQl1bmZfcmVzNF9jaGtpZnplcm8JIyBubzsgcmVzdWx0IGlzIHBvc2l0aXZlCisJYnNldAkJJjB4NyxGVEVNUF9FWCglYTApCSMgc2V0IHJlc3VsdCBzZ24KKwljbHIuYgkJRlRFTVBfU0dOKCVhMCkJCSMgY2xlYXIgdGVtcCBzaWduCisKKyMgdGhlIG51bWJlciBtYXkgaGF2ZSBiZWNvbWUgemVybyBhZnRlciByb3VuZGluZy4gc2V0IGNjb2RlcyBhY2NvcmRpbmdseS4KK3VuZl9yZXM0X2Noa2lmemVybzoKKwljbHIubAkJJWQwCisJdHN0LmwJCUZURU1QX0hJKCVhMCkJCSMgaXMgdmFsdWUgbm93IGEgemVybz8KKwlibmUuYgkJdW5mX3JlczRfY29udAkJIyBubworCXRzdC5sCQlGVEVNUF9MTyglYTApCisJYm5lLmIJCXVuZl9yZXM0X2NvbnQJCSMgbm8KKyMJYnNldAkJJnpfYml0LEZQU1JfQ0MoJWE2KQkjIHllczsgc2V0IHplcm8gY2NvZGUgYml0CisJYnNldAkJJnpfYml0LCVkMAkJIyB5ZXM7IHNldCB6ZXJvIGNjb2RlIGJpdAorCit1bmZfcmVzNF9jb250OgorCisjCisjIGNhbiBpbmV4MSBhbHNvIGJlIHNldCBhbG9uZyB3aXRoIHVuZmwgYW5kIGluZXgyPz8/CisjCisjIHdlIGtub3cgdGhhdCB1bmRlcmZsb3cgaGFzIG9jY3VycmVkLiBhdW5mbCBzaG91bGQgYmUgc2V0IGlmIElORVgyIGlzIGFsc28gc2V0LgorIworCWJ0c3QJCSZpbmV4Ml9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGlzIElORVgyIHNldD8KKwliZXEuYgkJdW5mX3JlczRfZW5kCQkjIG5vCisJYnNldAkJJmF1bmZsX2JpdCxGUFNSX0FFWENFUFQoJWE2KSAjIHllczsgc2V0IGF1bmZsCisKK3VuZl9yZXM0X2VuZDoKKwlhZGQubAkJJjB4NCwlc3AJCSMgY2xlYXIgc3RhY2sKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlvdmZfcmVzKCk6IHJvdXRpbmUgdG8gcHJvZHVjZSB0aGUgZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQgb2YJIworIwkJICAgYW4gb3ZlcmZsb3dpbmcgbnVtYmVyLgkJCQkjCisjCW92Zl9yZXMyKCk6IHNhbWUgYXMgYWJvdmUgYnV0IHRoZSBybmQgbW9kZS9wcmVjIGFyZSBwYXNzZWQJIworIwkJICAgIGRpZmZlcmVudGx5LgkJCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJbm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZDEuYgk9ICctMScgPT4gKC0pOyAnMCcgPT4gKCspCQkJCSMKKyMgICBvdmZfcmVzKCk6CQkJCQkJCQkjCisjCWQwCT0gcm5kIG1vZGUvcHJlYwkJCQkJCSMKKyMgICBvdmZfcmVzMigpOgkJCQkJCQkJIworIwloaShkMCkJPSBybmQgcHJlYwkJCQkJCSMKKyMJbG8oZDApCT0gcm5kIG1vZGUJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMAk9IHBvaW50cyB0byBleHRlbmRlZCBwcmVjaXNpb24gcmVzdWx0CQkJIworIwlkMC5iCT0gY29uZGl0aW9uIGNvZGUgYml0cwkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJVGhlIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0IGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBzaWduIG9mCSMKKyMgdGhlIHJlc3VsdCBhbmQgdGhlIHJvdW5kaW5nIG1vZGUvcHJlYyBpbiBlZmZlY3QuIFRoZXNlIGJpdHMgYXJlCSMKKyMgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyIHRvIGNyZWF0ZSBhbiBpbmRleCBpbnRvIHRoZSBkZWZhdWx0IHJlc3VsdAkjCisjIHRhYmxlLiBBIHBvaW50ZXIgdG8gdGhlIGNvcnJlY3QgcmVzdWx0IGlzIHJldHVybmVkIGluIGEwLiBUaGUJCSMKKyMgcmVzdWx0aW5nIGNvbmRpdGlvbiBjb2RlcyBhcmUgcmV0dXJuZWQgaW4gZDAgaW4gY2FzZSB0aGUgY2FsbGVyCSMKKyMgZG9lc24ndCB3YW50IEZQU1JfY2MgYWx0ZXJlZCAoYXMgaXMgdGhlIGNhc2UgZm9yIGZtb3ZlIG91dCkuCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlvdmZfcmVzCitvdmZfcmVzOgorCWFuZGkudwkJJjB4MTAsJWQxCQkjIGtlZXAgcmVzdWx0IHNpZ24KKwlsc3IuYgkJJjB4NCwlZDAJCSMgc2hpZnQgcHJlYy9tb2RlCisJb3IuYgkJJWQwLCVkMQkJCSMgY29uY2F0IHRoZSB0d28KKwltb3YudwkJJWQxLCVkMAkJCSMgbWFrZSBhIGNvcHkKKwlsc2wuYgkJJjB4MSwlZDEJCSMgbXVsdGlwbHkgZDEgYnkgMgorCWJyYS5iCQlvdmZfcmVzX2xvYWQKKworCWdsb2JhbAkJb3ZmX3JlczIKK292Zl9yZXMyOgorCWFuZC53CQkmMHgxMCwgJWQxCQkjIGtlZXAgcmVzdWx0IHNpZ24KKwlvci5iCQklZDAsICVkMQkJIyBpbnNlcnQgcm5kIG1vZGUKKwlzd2FwCQklZDAKKwlvci5iCQklZDAsICVkMQkJIyBpbnNlcnQgcm5kIHByZWMKKwltb3YudwkJJWQxLCAlZDAJCSMgbWFrZSBhIGNvcHkKKwlsc2wuYgkJJjB4MSwgJWQxCQkjIHNoaWZ0IGxlZnQgYnkgMQorCisjCisjIHVzZSB0aGUgcm91bmRpbmcgbW9kZSwgcHJlY2lzaW9uLCBhbmQgcmVzdWx0IHNpZ24gYXMgaW4gaW5kZXggaW50byB0aGUKKyMgdHdvIHRhYmxlcyBiZWxvdyB0byBmZXRjaCB0aGUgZGVmYXVsdCByZXN1bHQgYW5kIHRoZSByZXN1bHQgY2NvZGVzLgorIworb3ZmX3Jlc19sb2FkOgorCW1vdi5iCQkodGJsX292ZmxfY2MuYiwlcGMsJWQwLncqMSksICVkMCAjIGZldGNoIHJlc3VsdCBjY29kZXMKKwlsZWEJCSh0Ymxfb3ZmbF9yZXN1bHQuYiwlcGMsJWQxLncqOCksICVhMCAjIHJldHVybiByZXN1bHQgcHRyCisKKwlydHMKKwordGJsX292ZmxfY2M6CisJYnl0ZQkJMHgyLCAweDAsIDB4MCwgMHgyCisJYnl0ZQkJMHgyLCAweDAsIDB4MCwgMHgyCisJYnl0ZQkJMHgyLCAweDAsIDB4MCwgMHgyCisJYnl0ZQkJMHgwLCAweDAsIDB4MCwgMHgwCisJYnl0ZQkJMHgyKzB4OCwgMHg4LCAweDIrMHg4LCAweDgKKwlieXRlCQkweDIrMHg4LCAweDgsIDB4MisweDgsIDB4OAorCWJ5dGUJCTB4MisweDgsIDB4OCwgMHgyKzB4OCwgMHg4CisKK3RibF9vdmZsX3Jlc3VsdDoKKwlsb25nCQkweDdmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgK0lORjsgUk4KKwlsb25nCQkweDdmZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZmZmZiwweDAwMDAwMDAwICMgK0VYVDsgUloKKwlsb25nCQkweDdmZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZmZmZiwweDAwMDAwMDAwICMgK0VYVDsgUk0KKwlsb25nCQkweDdmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgK0lORjsgUlAKKworCWxvbmcJCTB4N2ZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyArSU5GOyBSTgorCWxvbmcJCTB4NDA3ZTAwMDAsMHhmZmZmZmYwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyArU0dMOyBSWgorCWxvbmcJCTB4NDA3ZTAwMDAsMHhmZmZmZmYwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyArU0dMOyBSTQorCWxvbmcJCTB4N2ZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyArSU5GOyBSUAorCisJbG9uZwkJMHg3ZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjICtJTkY7IFJOCisJbG9uZwkJMHg0M2ZlMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmY4MDAsMHgwMDAwMDAwMCAjICtEQkw7IFJaCisJbG9uZwkJMHg0M2ZlMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmY4MDAsMHgwMDAwMDAwMCAjICtEQkw7IFJNCisJbG9uZwkJMHg3ZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjICtJTkY7IFJQCisKKwlsb25nCQkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJbG9uZwkJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCWxvbmcJCTB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwlsb25nCQkweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisKKwlsb25nCQkweGZmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgLUlORjsgUk4KKwlsb25nCQkweGZmZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZmZmZiwweDAwMDAwMDAwICMgLUVYVDsgUloKKwlsb25nCQkweGZmZmYwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwICMgLUlORjsgUk0KKwlsb25nCQkweGZmZmUwMDAwLDB4ZmZmZmZmZmYsMHhmZmZmZmZmZiwweDAwMDAwMDAwICMgLUVYVDsgUlAKKworCWxvbmcJCTB4ZmZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyAtSU5GOyBSTgorCWxvbmcJCTB4YzA3ZTAwMDAsMHhmZmZmZmYwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyAtU0dMOyBSWgorCWxvbmcJCTB4ZmZmZjAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyAtSU5GOyBSTQorCWxvbmcJCTB4YzA3ZTAwMDAsMHhmZmZmZmYwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAgIyAtU0dMOyBSUAorCisJbG9uZwkJMHhmZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjIC1JTkY7IFJOCisJbG9uZwkJMHhjM2ZlMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmY4MDAsMHgwMDAwMDAwMCAjIC1EQkw7IFJaCisJbG9uZwkJMHhmZmZmMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCAjIC1JTkY7IFJNCisJbG9uZwkJMHhjM2ZlMDAwMCwweGZmZmZmZmZmLDB4ZmZmZmY4MDAsMHgwMDAwMDAwMCAjIC1EQkw7IFJQCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZm91dCgpOiBtb3ZlIGZyb20gZnAgcmVnaXN0ZXIgdG8gbWVtb3J5IG9yIGRhdGEgcmVnaXN0ZXIJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX3JvdW5kKCkgLSBuZWVkZWQgdG8gY3JlYXRlIEVYT1AgZm9yIHNnbC9kYmwgcHJlY2lzaW9uCQkjCisjCW5vcm0oKSAtIG5lZWRlZCB0byBjcmVhdGUgRVhPUCBmb3IgZXh0ZW5kZWQgcHJlY2lzaW9uCQkjCisjCW92Zl9yZXMoKSAtIGNyZWF0ZSBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdCBmb3Igc2dsL2RibCBwcmVjaXNpb24jCisjCXVuZl9yZXMoKSAtIGNyZWF0ZSBkZWZhdWx0IHVuZGVyZmxvdyByZXN1bHQgZm9yIHNnbC9kYmwgcHJlYy4JIworIwlkc3RfZGJsKCkgLSBjcmVhdGUgcm91bmRlZCBkYmwgcHJlY2lzaW9uIHJlc3VsdC4JCSMKKyMJZHN0X3NnbCgpIC0gY3JlYXRlIHJvdW5kZWQgc2dsIHByZWNpc2lvbiByZXN1bHQuCQkjCisjCWZldGNoX2RyZWcoKSAtIGZldGNoIGR5bmFtaWMgay1mYWN0b3IgcmVnIGZvciBwYWNrZWQuCQkjCisjCWJpbmRlYygpIC0gY29udmVydCBGUCBiaW5hcnkgbnVtYmVyIHRvIHBhY2tlZCBudW1iZXIuCQkjCisjCV9tZW1fd3JpdGUoKSAtIHdyaXRlIGRhdGEgdG8gbWVtb3J5LgkJCQkjCisjCV9tZW1fd3JpdGUyKCkgLSB3cml0ZSBkYXRhIHRvIG1lbW9yeSB1bmxlc3Mgc3VwdiBtb2RlIC0oYTcpIGV4Yy4jCisjCV9kbWVtX3dyaXRlX3tieXRlLHdvcmQsbG9uZ30oKSAtIHdyaXRlIGRhdGEgdG8gbWVtb3J5LgkJIworIwlzdG9yZV9kcmVnX3tiLHcsbH0oKSAtIHN0b3JlIGRhdGEgdG8gZGF0YSByZWdpc3RlciBmaWxlLgkjCisjCWZhY2Nfb3V0X3tiLHcsbCxkLHh9KCkgLSBkYXRhIGFjY2VzcyBlcnJvciBvY2N1cnJlZC4JCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKKyMJZDAgPSByb3VuZCBwcmVjLG1vZGUJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgOiBpbnRlcm1lZGlhdGUgdW5kZXJmbG93IG9yIG92ZXJmbG93IHJlc3VsdCBpZgkJIworIwkgICAgICBPVkZML1VORkwgb2NjdXJyZWQgZm9yIGEgc2dsIG9yIGRibCBvcGVyYW5kCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUaGlzIHJvdXRpbmUgaXMgYWNjZXNzZWQgYnkgbWFueSBoYW5kbGVycyB0aGF0IG5lZWQgdG8gZG8gYW4JIworIyBvcGNsYXNzIHRocmVlIG1vdmUgb2YgYW4gb3BlcmFuZCBvdXQgdG8gbWVtb3J5LgkJCSMKKyMJRGVjb2RlIGFuIGZtb3ZlIG91dCAob3BjbGFzcyAzKSBpbnN0cnVjdGlvbiB0byBkZXRlcm1pbmUgaWYJIworIyBpdCdzIGIsdyxsLHMsZCx4LCBvciBwIGluIHNpemUuIGIsdyxsIGNhbiBiZSBzdG9yZWQgdG8gZWl0aGVyIGEgZGF0YQkjCisjIHJlZ2lzdGVyIG9yIG1lbW9yeS4gVGhlIGFsZ29yaXRobSB1c2VzIGEgc3RhbmRhcmQgImZtb3ZlIiB0byBjcmVhdGUJIworIyB0aGUgcm91bmRlZCByZXN1bHQuIEFsc28sIHNpbmNlIGV4Y2VwdGlvbnMgYXJlIGRpc2FibGVkLCB0aGlzIGFsc28JIworIyBjcmVhdGUgdGhlIGNvcnJlY3QgT1BFUlIgZGVmYXVsdCByZXN1bHQgaWYgYXBwcm9wcmlhdGUuCQkjCisjCUZvciBzZ2wgb3IgZGJsIHByZWNpc2lvbiwgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGNhbiBvY2N1ci4gSWYJIworIyBlaXRoZXIgb2NjdXJzIGFuZCBpcyBlbmFibGVkLCB0aGUgRVhPUC4JCQkJIworIwlGb3IgZXh0ZW5kZWQgcHJlY2lzaW9uLCB0aGUgc3RhY2tlZCA8ZWE+IG11c3QgYmUgZml4ZWQgYWxvbmcJIworIyB3LyB0aGUgYWRkcmVzcyBpbmRleCByZWdpc3RlciBhcyBhcHByb3ByaWF0ZSB3LyBfY2FsY19lYV9mb3V0KCkuIElmCSMKKyMgdGhlIHNvdXJjZSBpcyBhIGRlbm9ybSBhbmQgaWYgdW5kZXJmbG93IGlzIGVuYWJsZWQsIGFuIEVYT1AgbXVzdCBiZQkjCisjIGNyZWF0ZWQuCQkJCQkJCQkjCisjCUZvciBwYWNrZWQsIHRoZSBrLWZhY3RvciBtdXN0IGJlIGZldGNoZWQgZnJvbSB0aGUgaW5zdHJ1Y3Rpb24JIworIyB3b3JkIG9yIGEgZGF0YSByZWdpc3Rlci4gVGhlIDxlYT4gbXVzdCBiZSBmaXhlZCBhcyB3LyBleHRlbmRlZAkjCisjIHByZWNpc2lvbi4gVGhlbiwgYmluZGVjKCkgaXMgY2FsbGVkIHRvIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUJCSMKKyMgcGFja2VkIHJlc3VsdC4JCQkJCQkJIworIwlJZiBhdCBhbnkgdGltZSBhbiBhY2Nlc3MgZXJyb3IgaXMgZmxhZ2dlZCBieSBvbmUgb2YgdGhlIG1vdmUtCSMKKyMgdG8tbWVtb3J5IHJvdXRpbmVzLCB0aGVuIGEgc3BlY2lhbCBleGl0IG11c3QgYmUgbWFkZSBzbyB0aGF0IHRoZQkjCisjIGFjY2VzcyBlcnJvciBjYW4gYmUgaGFuZGxlZCBwcm9wZXJseS4JCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZvdXQKK2ZvdXQ6CisJYmZleHR1CQlFWENfQ01EUkVHKCVhNil7JjM6JjN9LCVkMSAjIGV4dHJhY3QgZHN0IGZtdAorCW1vdi53CQkodGJsX2ZvdXQuYiwlcGMsJWQxLncqMiksJWExICMgdXNlIGFzIGluZGV4CisJam1wCQkodGJsX2ZvdXQuYiwlcGMsJWExKQkjIGp1bXAgdG8gcm91dGluZQorCisJc3diZWcJCSYweDgKK3RibF9mb3V0OgorCXNob3J0CQlmb3V0X2xvbmcJLQl0YmxfZm91dAorCXNob3J0CQlmb3V0X3NnbAktCXRibF9mb3V0CisJc2hvcnQJCWZvdXRfZXh0CS0JdGJsX2ZvdXQKKwlzaG9ydAkJZm91dF9wYWNrCS0JdGJsX2ZvdXQKKwlzaG9ydAkJZm91dF93b3JkCS0JdGJsX2ZvdXQKKwlzaG9ydAkJZm91dF9kYmwJLQl0YmxfZm91dAorCXNob3J0CQlmb3V0X2J5dGUJLQl0YmxfZm91dAorCXNob3J0CQlmb3V0X3BhY2sJLQl0YmxfZm91dAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBmbW92ZS5iIG91dCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgT25seSAiVW5pbXBsZW1lbnRlZCBEYXRhIFR5cGUiIGV4Y2VwdGlvbnMgZW50ZXIgaGVyZS4gVGhlIG9wZXJhbmQKKyMgaXMgZWl0aGVyIGEgREVOT1JNIG9yIGEgTk9STS4KK2ZvdXRfYnl0ZToKKwl0c3QuYgkJU1RBRyglYTYpCQkjIGlzIG9wZXJhbmQgbm9ybWFsaXplZD8KKwlibmUuYgkJZm91dF9ieXRlX2Rlbm9ybQkjIG5vCisKKwlmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyBsb2FkIHZhbHVlCisKK2ZvdXRfYnl0ZV9ub3JtOgorCWZtb3YubAkJJWQwLCVmcGNyCQkjIGluc2VydCBybmQgcHJlYyxtb2RlCisKKwlmbW92LmIJCSVmcDAsJWQwCQkjIGV4ZWMgbW92ZSBvdXQgdy8gY29ycmVjdCBybmQgbW9kZQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBmZXRjaCBGUFNSCisJb3IudwkJJWQxLDIrVVNFUl9GUFNSKCVhNikJIyBzYXZlIG5ldyBleGMsYWNjcnVlZCBiaXRzCisKKwltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBkc3QgbW9kZQorCWFuZGkuYgkJJjB4MzgsJWQxCQkjIGlzIG1vZGUgPT0gMD8gKERyZWcgZHN0KQorCWJlcS5iCQlmb3V0X2J5dGVfZG4JCSMgbXVzdCBzYXZlIHRvIGludGVnZXIgcmVnZmlsZQorCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAorCWJzci5sCQlfZG1lbV93cml0ZV9ieXRlCSMgd3JpdGUgYnl0ZQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF9iCQkjIHllcworCisJcnRzCisKK2ZvdXRfYnl0ZV9kbjoKKwltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBEbgorCWFuZGkudwkJJjB4NywlZDEKKwlic3IubAkJc3RvcmVfZHJlZ19iCisJcnRzCisKK2ZvdXRfYnl0ZV9kZW5vcm06CisJbW92LmwJCVNSQ19FWCglYTApLCVkMQorCWFuZGkubAkJJjB4ODAwMDAwMDAsJWQxCQkjIGtlZXAgREVOT1JNIHNpZ24KKwlvcmkubAkJJjB4MDA4MDAwMDAsJWQxCQkjIG1ha2Ugc21hbGxlc3Qgc2dsCisJZm1vdi5zCQklZDEsJWZwMAorCWJyYS5iCQlmb3V0X2J5dGVfbm9ybQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBmbW92ZS53IG91dCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgT25seSAiVW5pbXBsZW1lbnRlZCBEYXRhIFR5cGUiIGV4Y2VwdGlvbnMgZW50ZXIgaGVyZS4gVGhlIG9wZXJhbmQKKyMgaXMgZWl0aGVyIGEgREVOT1JNIG9yIGEgTk9STS4KK2ZvdXRfd29yZDoKKwl0c3QuYgkJU1RBRyglYTYpCQkjIGlzIG9wZXJhbmQgbm9ybWFsaXplZD8KKwlibmUuYgkJZm91dF93b3JkX2Rlbm9ybQkjIG5vCisKKwlmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyBsb2FkIHZhbHVlCisKK2ZvdXRfd29yZF9ub3JtOgorCWZtb3YubAkJJWQwLCVmcGNyCQkjIGluc2VydCBybmQgcHJlYzptb2RlCisKKwlmbW92LncJCSVmcDAsJWQwCQkjIGV4ZWMgbW92ZSBvdXQgdy8gY29ycmVjdCBybmQgbW9kZQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBmZXRjaCBGUFNSCisJb3IudwkJJWQxLDIrVVNFUl9GUFNSKCVhNikJIyBzYXZlIG5ldyBleGMsYWNjcnVlZCBiaXRzCisKKwltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBkc3QgbW9kZQorCWFuZGkuYgkJJjB4MzgsJWQxCQkjIGlzIG1vZGUgPT0gMD8gKERyZWcgZHN0KQorCWJlcS5iCQlmb3V0X3dvcmRfZG4JCSMgbXVzdCBzYXZlIHRvIGludGVnZXIgcmVnZmlsZQorCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAorCWJzci5sCQlfZG1lbV93cml0ZV93b3JkCSMgd3JpdGUgd29yZAorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF93CQkjIHllcworCisJcnRzCisKK2ZvdXRfd29yZF9kbjoKKwltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBEbgorCWFuZGkudwkJJjB4NywlZDEKKwlic3IubAkJc3RvcmVfZHJlZ193CisJcnRzCisKK2ZvdXRfd29yZF9kZW5vcm06CisJbW92LmwJCVNSQ19FWCglYTApLCVkMQorCWFuZGkubAkJJjB4ODAwMDAwMDAsJWQxCQkjIGtlZXAgREVOT1JNIHNpZ24KKwlvcmkubAkJJjB4MDA4MDAwMDAsJWQxCQkjIG1ha2Ugc21hbGxlc3Qgc2dsCisJZm1vdi5zCQklZDEsJWZwMAorCWJyYS5iCQlmb3V0X3dvcmRfbm9ybQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBmbW92ZS5sIG91dCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgT25seSAiVW5pbXBsZW1lbnRlZCBEYXRhIFR5cGUiIGV4Y2VwdGlvbnMgZW50ZXIgaGVyZS4gVGhlIG9wZXJhbmQKKyMgaXMgZWl0aGVyIGEgREVOT1JNIG9yIGEgTk9STS4KK2ZvdXRfbG9uZzoKKwl0c3QuYgkJU1RBRyglYTYpCQkjIGlzIG9wZXJhbmQgbm9ybWFsaXplZD8KKwlibmUuYgkJZm91dF9sb25nX2Rlbm9ybQkjIG5vCisKKwlmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyBsb2FkIHZhbHVlCisKK2ZvdXRfbG9uZ19ub3JtOgorCWZtb3YubAkJJWQwLCVmcGNyCQkjIGluc2VydCBybmQgcHJlYzptb2RlCisKKwlmbW92LmwJCSVmcDAsJWQwCQkjIGV4ZWMgbW92ZSBvdXQgdy8gY29ycmVjdCBybmQgbW9kZQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBmZXRjaCBGUFNSCisJb3IudwkJJWQxLDIrVVNFUl9GUFNSKCVhNikJIyBzYXZlIG5ldyBleGMsYWNjcnVlZCBiaXRzCisKK2ZvdXRfbG9uZ193cml0ZToKKwltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBkc3QgbW9kZQorCWFuZGkuYgkJJjB4MzgsJWQxCQkjIGlzIG1vZGUgPT0gMD8gKERyZWcgZHN0KQorCWJlcS5iCQlmb3V0X2xvbmdfZG4JCSMgbXVzdCBzYXZlIHRvIGludGVnZXIgcmVnZmlsZQorCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAorCWJzci5sCQlfZG1lbV93cml0ZV9sb25nCSMgd3JpdGUgbG9uZworCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF9sCQkjIHllcworCisJcnRzCisKK2ZvdXRfbG9uZ19kbjoKKwltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBEbgorCWFuZGkudwkJJjB4NywlZDEKKwlic3IubAkJc3RvcmVfZHJlZ19sCisJcnRzCisKK2ZvdXRfbG9uZ19kZW5vcm06CisJbW92LmwJCVNSQ19FWCglYTApLCVkMQorCWFuZGkubAkJJjB4ODAwMDAwMDAsJWQxCQkjIGtlZXAgREVOT1JNIHNpZ24KKwlvcmkubAkJJjB4MDA4MDAwMDAsJWQxCQkjIG1ha2Ugc21hbGxlc3Qgc2dsCisJZm1vdi5zCQklZDEsJWZwMAorCWJyYS5iCQlmb3V0X2xvbmdfbm9ybQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBmbW92ZS54IG91dCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgT25seSAiVW5pbXBsZW1lbnRlZCBEYXRhIFR5cGUiIGV4Y2VwdGlvbnMgZW50ZXIgaGVyZS4gVGhlIG9wZXJhbmQKKyMgaXMgZWl0aGVyIGEgREVOT1JNIG9yIGEgTk9STS4KKyMgVGhlIERFTk9STSBjYXVzZXMgYW4gVW5kZXJmbG93IGV4Y2VwdGlvbi4KK2ZvdXRfZXh0OgorCisjIHdlIGNvcHkgdGhlIGV4dGVuZGVkIHByZWNpc2lvbiByZXN1bHQgdG8gRlBfU0NSMCBzbyB0aGF0IHRoZSByZXNlcnZlZAorIyAxNi1iaXQgZmllbGQgZ2V0cyB6ZXJvZWQuIHdlIGRvIHRoaXMgc2luY2Ugd2UgcHJvbWlzZSBub3QgdG8gZGlzdHVyYgorIyB3aGF0J3MgYXQgU1JDKGEwKS4KKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJY2xyLncJCTIrRlBfU0NSMF9FWCglYTYpCSMgY2xlYXIgcmVzZXJ2ZWQgZmllbGQKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCisJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgcmV0dXJuIHJlc3VsdAorCisJYnNyLmwJCV9jYWxjX2VhX2ZvdXQJCSMgZml4IHN0YWNrZWQgPGVhPgorCisJbW92LmwJCSVhMCwlYTEJCQkjIHBhc3M6IGRzdCBhZGRyCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogc3JjIGFkZHIKKwltb3YubAkJJjB4YywlZDAJCSMgcGFzczogb3BzaXplIGlzIDEyIGJ5dGVzCisKKyMgd2UgbXVzdCBub3QgeWV0IHdyaXRlIHRoZSBleHRlbmRlZCBwcmVjaXNpb24gZGF0YSB0byB0aGUgc3RhY2sKKyMgaW4gdGhlIHByZS1kZWNyZW1lbnQgY2FzZSBmcm9tIHN1cGVydmlzb3IgbW9kZSBvciBlbHNlIHdlJ2xsIGNvcnJ1cHQKKyMgdGhlIHN0YWNrIGZyYW1lLiBzbywgbGVhdmUgaXQgaW4gRlBfU1JDIGZvciBub3cgYW5kIGRlYWwgd2l0aCBpdCBsYXRlci4uLgorCWNtcGkuYgkJU1BDT05EX0ZMRyglYTYpLCZtZGE3X2ZsZworCWJlcS5iCQlmb3V0X2V4dF9hNworCisJYnNyLmwJCV9kbWVtX3dyaXRlCQkjIHdyaXRlIGV4dCBwcmVjIG51bWJlciB0byBtZW1vcnkKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUudwkJZm91dF9leHRfZXJyCQkjIHllcworCisJdHN0LmIJCVNUQUcoJWE2KQkJIyBpcyBvcGVyYW5kIG5vcm1hbGl6ZWQ/CisJYm5lLmIJCWZvdXRfZXh0X2Rlbm9ybQkJIyBubworCXJ0cworCisjIHRoZSBudW1iZXIgaXMgYSBERU5PUk0uIG11c3Qgc2V0IHRoZSB1bmRlcmZsb3cgZXhjZXB0aW9uIGJpdAorZm91dF9leHRfZGVub3JtOgorCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZGVyZmxvdyBleGMgYml0CisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDAKKwlhbmRpLmIJCSYweDBhLCVkMAkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZm91dF9leHRfZXhjCQkjIHllcworCXJ0cworCisjIHdlIGRvbid0IHdhbnQgdG8gZG8gdGhlIHdyaXRlIGlmIHRoZSBleGNlcHRpb24gb2NjdXJyZWQgaW4gc3VwZXJ2aXNvciBtb2RlCisjIHNvIF9tZW1fd3JpdGUyKCkgaGFuZGxlcyB0aGlzIGZvciB1cy4KK2ZvdXRfZXh0X2E3OgorCWJzci5sCQlfbWVtX3dyaXRlMgkJIyB3cml0ZSBleHQgcHJlYyBudW1iZXIgdG8gbWVtb3J5CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLncJCWZvdXRfZXh0X2VycgkJIyB5ZXMKKworCXRzdC5iCQlTVEFHKCVhNikJCSMgaXMgb3BlcmFuZCBub3JtYWxpemVkPworCWJuZS5iCQlmb3V0X2V4dF9kZW5vcm0JCSMgbm8KKwlydHMKKworZm91dF9leHRfZXhjOgorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgdGhlIG1hbnRpc3NhCisJbmVnLncJCSVkMAkJCSMgbmV3IGV4cCA9IC0oc2hmdCBhbXQpCisJYW5kaS53CQkmMHg3ZmZmLCVkMAorCWFuZGkudwkJJjB4ODAwMCxGUF9TQ1IwX0VYKCVhNikJIyBrZWVwIG9ubHkgb2xkIHNpZ24KKwlvci53CQklZDAsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCXJ0cworCitmb3V0X2V4dF9lcnI6CisJbW92LmwJCUVYQ19BNiglYTYpLCglYTYpCSMgZml4IHN0YWNrZWQgYTYKKwlicmEubAkJZmFjY19vdXRfeAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGZtb3ZlLnMgb3V0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmb3V0X3NnbDoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmc19tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IHNnbCBwcmVjCisJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzYXZlIHJuZCBwcmVjLG1vZGUgb24gc3RhY2sKKworIworIyBvcGVyYW5kIGlzIGEgbm9ybWFsaXplZCBudW1iZXIuIGZpcnN0LCB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIG1vdmUgb3V0CisjIHdvdWxkIGNhdXNlIGVpdGhlciBhbiB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cuIHRoZXNlIGNhc2VzIGFyZSBoYW5kbGVkCisjIHNlcGFyYXRlbHkuIG90aGVyd2lzZSwgc2V0IHRoZSBGUENSIHRvIHRoZSBwcm9wZXIgcm91bmRpbmcgbW9kZSBhbmQKKyMgZXhlY3V0ZSB0aGUgbW92ZS4KKyMKKwltb3YudwkJU1JDX0VYKCVhMCksJWQwCQkjIGV4dHJhY3QgZXhwb25lbnQKKwlhbmRpLncJCSYweDdmZmYsJWQwCQkjIHN0cmlwIHNpZ24KKworCWNtcGkudwkJJWQwLCZTR0xfSEkJCSMgd2lsbCBvcGVyYW5kIG92ZXJmbG93PworCWJndC53CQlmb3V0X3NnbF9vdmZsCQkjIHllczsgZ28gaGFuZGxlIE9WRkwKKwliZXEudwkJZm91dF9zZ2xfbWF5X292ZmwJIyBtYXliZTsgZ28gaGFuZGxlIHBvc3NpYmxlIE9WRkwKKwljbXBpLncJCSVkMCwmU0dMX0xPCQkjIHdpbGwgb3BlcmFuZCB1bmRlcmZsb3c/CisJYmx0LncJCWZvdXRfc2dsX3VuZmwJCSMgeWVzOyBnbyBoYW5kbGUgdW5kZXJmbG93CisKKyMKKyMgTk9STXMoaW4gcmFuZ2UpIGNhbiBiZSBzdG9yZWQgb3V0IGJ5IGEgc2ltcGxlICJmbW92LnMiCisjIFVubm9ybWFsaXplZCBpbnB1dHMgY2FuIGNvbWUgdGhyb3VnaCB0aGlzIHBvaW50LgorIworZm91dF9zZ2xfZXhnOgorCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIGZldGNoIGZvcCBmcm9tIHN0YWNrCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZm1vdi5zCQklZnAwLCVkMAkJIyBzdG9yZSBkb2VzIGNvbnZlcnQgYW5kIHJvdW5kCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgorCisJb3IudwkJJWQxLDIrVVNFUl9GUFNSKCVhNikJIyBzZXQgcG9zc2libGUgaW5leDIvYWluZXgKKworZm91dF9zZ2xfZXhnX3dyaXRlOgorCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IGRzdCBtb2RlCisJYW5kaS5iCQkmMHgzOCwlZDEJCSMgaXMgbW9kZSA9PSAwPyAoRHJlZyBkc3QpCisJYmVxLmIJCWZvdXRfc2dsX2V4Z193cml0ZV9kbgkjIG11c3Qgc2F2ZSB0byBpbnRlZ2VyIHJlZ2ZpbGUKKworCW1vdi5sCQlFWENfRUEoJWE2KSwlYTAJCSMgc3RhY2tlZCA8ZWE+IGlzIGNvcnJlY3QKKwlic3IubAkJX2RtZW1fd3JpdGVfbG9uZwkjIHdyaXRlIGxvbmcKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfbAkJIyB5ZXMKKworCXJ0cworCitmb3V0X3NnbF9leGdfd3JpdGVfZG46CisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgRG4KKwlhbmRpLncJCSYweDcsJWQxCisJYnNyLmwJCXN0b3JlX2RyZWdfbAorCXJ0cworCisjCisjIGhlcmUsIHdlIGtub3cgdGhhdCB0aGUgb3BlcmFuZCB3b3VsZCBVTkZMIGlmIG1vdmVkIG91dCB0byBzaW5nbGUgcHJlYywKKyMgc28sIGRlbm9ybSBhbmQgcm91bmQgYW5kIHRoZW4gdXNlIGdlbmVyaWMgc3RvcmUgc2luZ2xlIHJvdXRpbmUgdG8KKyMgd3JpdGUgdGhlIHZhbHVlIHRvIG1lbW9yeS4KKyMKK2ZvdXRfc2dsX3VuZmw6CisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgVU5GTAorCisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJbW92LmwJCSVhMCwtKCVzcCkKKworCWNsci5sCQklZDAJCQkjIHBhc3M6IFMuRi4gPSAwCisKKwljbXBpLmIJCVNUQUcoJWE2KSwmREVOT1JNCSMgZmV0Y2ggc3JjIG9wdHlwZSB0YWcKKwlibmUuYgkJZm91dF9zZ2xfdW5mbF9jb250CSMgbGV0IERFTk9STXMgZmFsbCB0aHJvdWdoCisKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIHRoZSBERU5PUk0KKworZm91dF9zZ2xfdW5mbF9jb250OgorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBvcGVyYW5kCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGMgZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CisKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gZm9wCisJYnNyLmwJCWRzdF9zZ2wJCQkjIGNvbnZlcnQgdG8gc2luZ2xlIHByZWMKKworCW1vdi5iCQkxK0VYQ19PUFdPUkQoJWE2KSwlZDEJIyBleHRyYWN0IGRzdCBtb2RlCisJYW5kaS5iCQkmMHgzOCwlZDEJCSMgaXMgbW9kZSA9PSAwPyAoRHJlZyBkc3QpCisJYmVxLmIJCWZvdXRfc2dsX3VuZmxfZG4JIyBtdXN0IHNhdmUgdG8gaW50ZWdlciByZWdmaWxlCisKKwltb3YubAkJRVhDX0VBKCVhNiksJWEwCQkjIHN0YWNrZWQgPGVhPiBpcyBjb3JyZWN0CisJYnNyLmwJCV9kbWVtX3dyaXRlX2xvbmcJIyB3cml0ZSBsb25nCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLmwJCWZhY2Nfb3V0X2wJCSMgeWVzCisKKwlicmEuYgkJZm91dF9zZ2xfdW5mbF9jaGtleGMKKworZm91dF9zZ2xfdW5mbF9kbjoKKwltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBEbgorCWFuZGkudwkJJjB4NywlZDEKKwlic3IubAkJc3RvcmVfZHJlZ19sCisKK2ZvdXRfc2dsX3VuZmxfY2hrZXhjOgorCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MGEsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS53CQlmb3V0X3NkX2V4Y191bmZsCSMgeWVzCisJYWRkcS5sCQkmMHg0LCVzcAorCXJ0cworCisjCisjIGl0J3MgZGVmaW5pdGVseSBhbiBvdmVyZmxvdyBzbyBjYWxsIG92Zl9yZXMgdG8gZ2V0IHRoZSBjb3JyZWN0IGFuc3dlcgorIworZm91dF9zZ2xfb3ZmbDoKKwl0c3QuYgkJMytTUkNfSEkoJWEwKQkJIyBpcyByZXN1bHQgaW5leGFjdD8KKwlibmUuYgkJZm91dF9zZ2xfb3ZmbF9pbmV4MgorCXRzdC5sCQlTUkNfTE8oJWEwKQkJIyBpcyByZXN1bHQgaW5leGFjdD8KKwlibmUuYgkJZm91dF9zZ2xfb3ZmbF9pbmV4MgorCW9yaS53CQkmb3ZmbF9pbnhfbWFzaywyK1VTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKKwlicmEuYgkJZm91dF9zZ2xfb3ZmbF9jb250Citmb3V0X3NnbF9vdmZsX2luZXgyOgorCW9yaS53CQkmb3ZmaW54X21hc2ssMitVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4L2luZXgyCisKK2ZvdXRfc2dsX292ZmxfY29udDoKKwltb3YubAkJJWEwLC0oJXNwKQorCisjIGNhbGwgb3ZmX3JlcygpIHcvIHNnbCBwcmVjIGFuZCB0aGUgY29ycmVjdCBybmQgbW9kZSB0byBjcmVhdGUgdGhlIGRlZmF1bHQKKyMgb3ZlcmZsb3cgcmVzdWx0LiBET04nVCBzYXZlIHRoZSByZXR1cm5lZCBjY29kZXMgZnJvbSBvdmZfcmVzKCkgc2luY2UKKyMgZm1vdmUgb3V0IGRvZXNuJ3QgYWx0ZXIgdGhlbS4KKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgb3BlcmFuZCBuZWdhdGl2ZT8KKwlzbWkJCSVkMQkJCSMgc2V0IGlmIHNvCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzOiBzZ2wgcHJlYyxybmQgbW9kZQorCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjIE9WRkwgcmVzdWx0CisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgbG9hZCBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdAorCWZtb3YucwkJJWZwMCwlZDAJCSMgc3RvcmUgdG8gc2luZ2xlCisKKwltb3YuYgkJMStFWENfT1BXT1JEKCVhNiksJWQxCSMgZXh0cmFjdCBkc3QgbW9kZQorCWFuZGkuYgkJJjB4MzgsJWQxCQkjIGlzIG1vZGUgPT0gMD8gKERyZWcgZHN0KQorCWJlcS5iCQlmb3V0X3NnbF9vdmZsX2RuCSMgbXVzdCBzYXZlIHRvIGludGVnZXIgcmVnZmlsZQorCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMAkJIyBzdGFja2VkIDxlYT4gaXMgY29ycmVjdAorCWJzci5sCQlfZG1lbV93cml0ZV9sb25nCSMgd3JpdGUgbG9uZworCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF9sCQkjIHllcworCisJYnJhLmIJCWZvdXRfc2dsX292ZmxfY2hrZXhjCisKK2ZvdXRfc2dsX292ZmxfZG46CisJbW92LmIJCTErRVhDX09QV09SRCglYTYpLCVkMQkjIGV4dHJhY3QgRG4KKwlhbmRpLncJCSYweDcsJWQxCisJYnNyLmwJCXN0b3JlX2RyZWdfbAorCitmb3V0X3NnbF9vdmZsX2Noa2V4YzoKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDBhLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUudwkJZm91dF9zZF9leGNfb3ZmbAkjIHllcworCWFkZHEubAkJJjB4NCwlc3AKKwlydHMKKworIworIyBtb3ZlIG91dCBNQVkgb3ZlcmZsb3c6CisjICgxKSBmb3JjZSB0aGUgZXhwIHRvIDB4M2ZmZgorIyAoMikgZG8gYSBtb3ZlIHcvIGFwcHJvcHJpYXRlIHJuZCBtb2RlCisjICgzKSBpZiBleHAgc3RpbGwgZXF1YWxzIHplcm8sIHRoZW4gaW5zZXJ0IG9yaWdpbmFsIGV4cG9uZW50CisjCWZvciB0aGUgY29ycmVjdCByZXN1bHQuCisjICAgICBpZiBleHAgbm93IGVxdWFscyBvbmUsIHRoZW4gaXQgb3ZlcmZsb3dlZCBzbyBjYWxsIG92Zl9yZXMuCisjCitmb3V0X3NnbF9tYXlfb3ZmbDoKKwltb3YudwkJU1JDX0VYKCVhMCksJWQxCQkjIGZldGNoIGN1cnJlbnQgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBpdCxjbGVhciBleHAKKwlvcmkudwkJJjB4M2ZmZiwlZDEJCSMgaW5zZXJ0IGV4cCA9IDAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBzY2FsZWQgZXhwCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KSAjIGNvcHkgaGkobWFuKQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikgIyBjb3B5IGxvKG1hbikKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZm1vdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGZvcmNlIGZvcCB0byBiZSByb3VuZGVkCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCWZhYnMueAkJJWZwMAkJCSMgbmVlZCBhYnNvbHV0ZSB2YWx1ZQorCWZjbXAuYgkJJWZwMCwmMHgyCQkjIGRpZCBleHBvbmVudCBpbmNyZWFzZT8KKwlmYmx0LncJCWZvdXRfc2dsX2V4ZwkJIyBubzsgZ28gZmluaXNoIE5PUk0KKwlicmEudwkJZm91dF9zZ2xfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdworCisjIyMjIyMjIyMjIyMjIyMjCisKK2ZvdXRfc2RfZXhjX3VuZmw6CisJbW92LmwJCSglc3ApKywlYTAKKworCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCisJY21waS5iCQlTVEFHKCVhNiksJkRFTk9STQkjIHdhcyBzcmMgYSBERU5PUk0/CisJYm5lLmIJCWZvdXRfc2RfZXhjX2NvbnQJIyBubworCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCisJYnNyLmwJCW5vcm0KKwluZWcubAkJJWQwCisJYW5kaS53CQkmMHg3ZmZmLCVkMAorCWJmaW5zCQklZDAsRlBfU0NSMF9FWCglYTYpeyYxOiYxNX0KKwlicmEuYgkJZm91dF9zZF9leGNfY29udAorCitmb3V0X3NkX2V4YzoKK2ZvdXRfc2RfZXhjX292Zmw6CisJbW92LmwJCSglc3ApKywlYTAJCSMgcmVzdG9yZSBhMAorCisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisKK2ZvdXRfc2RfZXhjX2NvbnQ6CisJYmNscgkJJjB4NyxGUF9TQ1IwX0VYKCVhNikJIyBjbGVhciBzaWduIGJpdAorCXNuZS5iCQkyK0ZQX1NDUjBfRVgoJWE2KQkjIHNldCBpbnRlcm5hbCBzaWduIGJpdAorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBERU5PUk0KKworCW1vdi5iCQkzK0xfU0NSMyglYTYpLCVkMQorCWxzci5iCQkmMHg0LCVkMQorCWFuZGkudwkJJjB4MGMsJWQxCisJc3dhcAkJJWQxCisJbW92LmIJCTMrTF9TQ1IzKCVhNiksJWQxCisJbHNyLmIJCSYweDQsJWQxCisJYW5kaS53CQkmMHgwMywlZDEKKwljbHIubAkJJWQwCQkJIyBwYXNzOiB6ZXJvIGcscixzCisJYnNyLmwJCV9yb3VuZAkJCSMgcm91bmQgdGhlIERFTk9STQorCisJdHN0LmIJCTIrRlBfU0NSMF9FWCglYTYpCSMgaXMgRVhPUCBuZWdhdGl2ZT8KKwliZXEuYgkJZm91dF9zZF9leGNfZG9uZQkjIG5vCisJYnNldAkJJjB4NyxGUF9TQ1IwX0VYKCVhNikJIyB5ZXMKKworZm91dF9zZF9leGNfZG9uZToKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZm1vdmUuZCBvdXQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZm91dF9kYmw6CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKKwlvcmkuYgkJJmRfbW9kZSoweDEwLCVkMAkjIGluc2VydCBkYmwgcHJlYworCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc2F2ZSBybmQgcHJlYyxtb2RlIG9uIHN0YWNrCisKKyMKKyMgb3BlcmFuZCBpcyBhIG5vcm1hbGl6ZWQgbnVtYmVyLiBmaXJzdCwgd2UgY2hlY2sgdG8gc2VlIGlmIHRoZSBtb3ZlIG91dAorIyB3b3VsZCBjYXVzZSBlaXRoZXIgYW4gdW5kZXJmbG93IG9yIG92ZXJmbG93LiB0aGVzZSBjYXNlcyBhcmUgaGFuZGxlZAorIyBzZXBhcmF0ZWx5LiBvdGhlcndpc2UsIHNldCB0aGUgRlBDUiB0byB0aGUgcHJvcGVyIHJvdW5kaW5nIG1vZGUgYW5kCisjIGV4ZWN1dGUgdGhlIG1vdmUuCisjCisJbW92LncJCVNSQ19FWCglYTApLCVkMAkJIyBleHRyYWN0IGV4cG9uZW50CisJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBzdHJpcCBzaWduCisKKwljbXBpLncJCSVkMCwmREJMX0hJCQkjIHdpbGwgb3BlcmFuZCBvdmVyZmxvdz8KKwliZ3QudwkJZm91dF9kYmxfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBPVkZMCisJYmVxLncJCWZvdXRfZGJsX21heV9vdmZsCSMgbWF5YmU7IGdvIGhhbmRsZSBwb3NzaWJsZSBPVkZMCisJY21waS53CQklZDAsJkRCTF9MTwkJIyB3aWxsIG9wZXJhbmQgdW5kZXJmbG93PworCWJsdC53CQlmb3V0X2RibF91bmZsCQkjIHllczsgZ28gaGFuZGxlIHVuZGVyZmxvdworCisjCisjIE5PUk1zKGluIHJhbmdlKSBjYW4gYmUgc3RvcmVkIG91dCBieSBhIHNpbXBsZSAiZm1vdi5kIgorIyBVbm5vcm1hbGl6ZWQgaW5wdXRzIGNhbiBjb21lIHRocm91Z2ggdGhpcyBwb2ludC4KKyMKK2ZvdXRfZGJsX2V4ZzoKKwlmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyBmZXRjaCBmb3AgZnJvbSBzdGFjaworCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZtb3YuZAkJJWZwMCxMX1NDUjEoJWE2KQkjIHN0b3JlIGRvZXMgY29udmVydCBhbmQgcm91bmQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZm1vdi5sCQklZnBzciwlZDAJCSMgc2F2ZSBGUFNSCisKKwlvci53CQklZDAsMitVU0VSX0ZQU1IoJWE2KQkjIHNldCBwb3NzaWJsZSBpbmV4Mi9haW5leAorCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMQkJIyBwYXNzOiBkc3QgYWRkcgorCWxlYQkJTF9TQ1IxKCVhNiksJWEwCQkjIHBhc3M6IHNyYyBhZGRyCisJbW92cS5sCQkmMHg4LCVkMAkJIyBwYXNzOiBvcHNpemUgaXMgOCBieXRlcworCWJzci5sCQlfZG1lbV93cml0ZQkJIyBzdG9yZSBkYmwgZm9wIHRvIG1lbW9yeQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF9kCQkjIHllcworCisJcnRzCQkJCQkjIG5vOyBzbyB3ZSdyZSBmaW5pc2hlZAorCisjCisjIGhlcmUsIHdlIGtub3cgdGhhdCB0aGUgb3BlcmFuZCB3b3VsZCBVTkZMIGlmIG1vdmVkIG91dCB0byBkb3VibGUgcHJlYywKKyMgc28sIGRlbm9ybSBhbmQgcm91bmQgYW5kIHRoZW4gdXNlIGdlbmVyaWMgc3RvcmUgZG91YmxlIHJvdXRpbmUgdG8KKyMgd3JpdGUgdGhlIHZhbHVlIHRvIG1lbW9yeS4KKyMKK2ZvdXRfZGJsX3VuZmw6CisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgVU5GTAorCisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJbW92LmwJCSVhMCwtKCVzcCkKKworCWNsci5sCQklZDAJCQkjIHBhc3M6IFMuRi4gPSAwCisKKwljbXBpLmIJCVNUQUcoJWE2KSwmREVOT1JNCSMgZmV0Y2ggc3JjIG9wdHlwZSB0YWcKKwlibmUuYgkJZm91dF9kYmxfdW5mbF9jb250CSMgbGV0IERFTk9STXMgZmFsbCB0aHJvdWdoCisKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAKKwlic3IubAkJbm9ybQkJCSMgbm9ybWFsaXplIHRoZSBERU5PUk0KKworZm91dF9kYmxfdW5mbF9jb250OgorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBvcGVyYW5kCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGMgZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CisKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gZm9wCisJYnNyLmwJCWRzdF9kYmwJCQkjIGNvbnZlcnQgdG8gc2luZ2xlIHByZWMKKwltb3YubAkJJWQwLExfU0NSMSglYTYpCisJbW92LmwJCSVkMSxMX1NDUjIoJWE2KQorCisJbW92LmwJCUVYQ19FQSglYTYpLCVhMQkJIyBwYXNzOiBkc3QgYWRkcgorCWxlYQkJTF9TQ1IxKCVhNiksJWEwCQkjIHBhc3M6IHNyYyBhZGRyCisJbW92cS5sCQkmMHg4LCVkMAkJIyBwYXNzOiBvcHNpemUgaXMgOCBieXRlcworCWJzci5sCQlfZG1lbV93cml0ZQkJIyBzdG9yZSBkYmwgZm9wIHRvIG1lbW9yeQorCisJdHN0LmwJCSVkMQkJCSMgZGlkIGRzdG9yZSBmYWlsPworCWJuZS5sCQlmYWNjX291dF9kCQkjIHllcworCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgwYSwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLncJCWZvdXRfc2RfZXhjX3VuZmwJIyB5ZXMKKwlhZGRxLmwJCSYweDQsJXNwCisJcnRzCisKKyMKKyMgaXQncyBkZWZpbml0ZWx5IGFuIG92ZXJmbG93IHNvIGNhbGwgb3ZmX3JlcyB0byBnZXQgdGhlIGNvcnJlY3QgYW5zd2VyCisjCitmb3V0X2RibF9vdmZsOgorCW1vdi53CQkyK1NSQ19MTyglYTApLCVkMAorCWFuZGkudwkJJjB4N2ZmLCVkMAorCWJuZS5iCQlmb3V0X2RibF9vdmZsX2luZXgyCisKKwlvcmkudwkJJm92ZmxfaW54X21hc2ssMitVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4CisJYnJhLmIJCWZvdXRfZGJsX292ZmxfY29udAorZm91dF9kYmxfb3ZmbF9pbmV4MjoKKwlvcmkudwkJJm92ZmlueF9tYXNrLDIrVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leC9pbmV4MgorCitmb3V0X2RibF9vdmZsX2NvbnQ6CisJbW92LmwJCSVhMCwtKCVzcCkKKworIyBjYWxsIG92Zl9yZXMoKSB3LyBkYmwgcHJlYyBhbmQgdGhlIGNvcnJlY3Qgcm5kIG1vZGUgdG8gY3JlYXRlIHRoZSBkZWZhdWx0CisjIG92ZXJmbG93IHJlc3VsdC4gRE9OJ1Qgc2F2ZSB0aGUgcmV0dXJuZWQgY2NvZGVzIGZyb20gb3ZmX3JlcygpIHNpbmNlCisjIGZtb3ZlIG91dCBkb2Vzbid0IGFsdGVyIHRoZW0uCisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CisJc21pCQklZDEJCQkjIHNldCBpZiBzbworCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzczogZGJsIHByZWMscm5kIG1vZGUKKwlic3IubAkJb3ZmX3JlcwkJCSMgY2FsYyBPVkZMIHJlc3VsdAorCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIGxvYWQgZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQKKwlmbW92LmQJCSVmcDAsTF9TQ1IxKCVhNikJIyBzdG9yZSB0byBkb3VibGUKKworCW1vdi5sCQlFWENfRUEoJWE2KSwlYTEJCSMgcGFzczogZHN0IGFkZHIKKwlsZWEJCUxfU0NSMSglYTYpLCVhMAkJIyBwYXNzOiBzcmMgYWRkcgorCW1vdnEubAkJJjB4OCwlZDAJCSMgcGFzczogb3BzaXplIGlzIDggYnl0ZXMKKwlic3IubAkJX2RtZW1fd3JpdGUJCSMgc3RvcmUgZGJsIGZvcCB0byBtZW1vcnkKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUubAkJZmFjY19vdXRfZAkJIyB5ZXMKKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MGEsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS53CQlmb3V0X3NkX2V4Y19vdmZsCSMgeWVzCisJYWRkcS5sCQkmMHg0LCVzcAorCXJ0cworCisjCisjIG1vdmUgb3V0IE1BWSBvdmVyZmxvdzoKKyMgKDEpIGZvcmNlIHRoZSBleHAgdG8gMHgzZmZmCisjICgyKSBkbyBhIG1vdmUgdy8gYXBwcm9wcmlhdGUgcm5kIG1vZGUKKyMgKDMpIGlmIGV4cCBzdGlsbCBlcXVhbHMgemVybywgdGhlbiBpbnNlcnQgb3JpZ2luYWwgZXhwb25lbnQKKyMJZm9yIHRoZSBjb3JyZWN0IHJlc3VsdC4KKyMgICAgIGlmIGV4cCBub3cgZXF1YWxzIG9uZSwgdGhlbiBpdCBvdmVyZmxvd2VkIHNvIGNhbGwgb3ZmX3Jlcy4KKyMKK2ZvdXRfZGJsX21heV9vdmZsOgorCW1vdi53CQlTUkNfRVgoJWEwKSwlZDEJCSMgZmV0Y2ggY3VycmVudCBzaWduCisJYW5kaS53CQkmMHg4MDAwLCVkMQkJIyBrZWVwIGl0LGNsZWFyIGV4cAorCW9yaS53CQkmMHgzZmZmLCVkMQkJIyBpbnNlcnQgZXhwID0gMAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IHNjYWxlZCBleHAKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpICMgY29weSBoaShtYW4pCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KSAjIGNvcHkgbG8obWFuKQorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmbW92LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZm9yY2UgZm9wIHRvIGJlIHJvdW5kZWQKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJZmFicy54CQklZnAwCQkJIyBuZWVkIGFic29sdXRlIHZhbHVlCisJZmNtcC5iCQklZnAwLCYweDIJCSMgZGlkIGV4cG9uZW50IGluY3JlYXNlPworCWZibHQudwkJZm91dF9kYmxfZXhnCQkjIG5vOyBnbyBmaW5pc2ggTk9STQorCWJyYS53CQlmb3V0X2RibF9vdmZsCQkjIHllczsgZ28gaGFuZGxlIG92ZXJmbG93CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZHN0X2RibCgpOiBjcmVhdGUgZG91YmxlIHByZWNpc2lvbiB2YWx1ZSBmcm9tIGV4dGVuZGVkIHByZWMuCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBzb3VyY2Ugb3BlcmFuZCBpbiBleHRlbmRlZCBwcmVjaXNpb24JCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gaGkoZG91YmxlIHByZWNpc2lvbiByZXN1bHQpCQkJCSMKKyMJZDEgPSBsbyhkb3VibGUgcHJlY2lzaW9uIHJlc3VsdCkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJCQkJCQkJCQkjCisjICBDaGFuZ2VzIGV4dGVuZGVkIHByZWNpc2lvbiB0byBkb3VibGUgcHJlY2lzaW9uLgkJCSMKKyMgIE5vdGU6IG5vIGF0dGVtcHQgaXMgbWFkZSB0byByb3VuZCB0aGUgZXh0ZW5kZWQgdmFsdWUgdG8gZG91YmxlLgkjCisjCWRibF9zaWduID0gZXh0X3NpZ24JCQkJCQkjCisjCWRibF9leHAgPSBleHRfZXhwIC0gJDNmZmYoZXh0IGJpYXMpICsgJDdmZihkYmwgYmlhcykJCSMKKyMJZ2V0IHJpZCBvZiBleHQgaW50ZWdlciBiaXQJCQkJCSMKKyMJZGJsX21hbnQgPSBleHRfbWFudHs2MjoxMn0JCQkJCSMKKyMJCQkJCQkJCQkjCisjCQktLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tCSMKKyMgIGV4dGVuZGVkIC0+ICB8c3wgICAgZXhwICAgIHwgICB8MXwgbXMgbWFudCAgIHwgICAgfCBscyBtYW50ICAgICB8CSMKKyMJCS0tLS0tLS0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0JIworIwkJIDk1CSAgICA2NCAgICA2MyA2MgkgICAgICAzMiAgICAgIDMxICAgICAxMQkgIDAJIworIwkJCQkgICAgIHwJCQkgICAgIHwJCSMKKyMJCQkJICAgICB8CQkJICAgICB8CQkjCisjCQkJCSAgICAgfAkJCSAgICAgfAkJIworIwkJCSAgICAgICAgICAgICB2CQkJICAgICB2CQkjCisjCQkJICAgICAgLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tCQkjCisjICBkb3VibGUgICAtPgkJICAgICAgfHN8ZXhwfCBtYW50ICB8ICAgfCAgbWFudCAgICAgICB8CQkjCisjCQkJICAgICAgLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tCQkjCisjCQkJICAgICAgNjMgICAgIDUxICAgMzIgICAzMQkgICAgICAgMAkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkc3RfZGJsOgorCWNsci5sCQklZDAJCQkjIGNsZWFyIGQwCisJbW92LncJCUZURU1QX0VYKCVhMCksJWQwCSMgZ2V0IGV4cG9uZW50CisJc3ViaS53CQkmRVhUX0JJQVMsJWQwCQkjIHN1YnRyYWN0IGV4dGVuZGVkIHByZWNpc2lvbiBiaWFzCisJYWRkaS53CQkmREJMX0JJQVMsJWQwCQkjIGFkZCBkb3VibGUgcHJlY2lzaW9uIGJpYXMKKwl0c3QuYgkJRlRFTVBfSEkoJWEwKQkJIyBpcyBudW1iZXIgYSBkZW5vcm0/CisJYm1pLmIJCWRzdF9nZXRfZHVwcGVyCQkjIG5vCisJc3VicS53CQkmMHgxLCVkMAkJIyB5ZXM7IGRlbm9ybSBiaWFzID0gREJMX0JJQVMgLSAxCitkc3RfZ2V0X2R1cHBlcjoKKwlzd2FwCQklZDAJCQkjIGQwIG5vdyBpbiB1cHBlciB3b3JkCisJbHNsLmwJCSYweDQsJWQwCQkjIGQwIGluIHByb3BlciBwbGFjZSBmb3IgZGJsIHByZWMgZXhwCisJdHN0LmIJCUZURU1QX0VYKCVhMCkJCSMgdGVzdCBzaWduCisJYnBsLmIJCWRzdF9nZXRfZG1hbgkJIyBpZiBwb3N0aXZlLCBnbyBwcm9jZXNzIG1hbnRpc3NhCisJYnNldAkJJjB4MWYsJWQwCQkjIGlmIG5lZ2F0aXZlLCBzZXQgc2lnbgorZHN0X2dldF9kbWFuOgorCW1vdi5sCQlGVEVNUF9ISSglYTApLCVkMQkjIGdldCBtcyBtYW50aXNzYQorCWJmZXh0dQkJJWQxeyYxOiYyMH0sJWQxCQkjIGdldCB1cHBlciAyMCBiaXRzIG9mIG1zCisJb3IubAkJJWQxLCVkMAkJCSMgcHV0IHRoZXNlIGJpdHMgaW4gbXMgd29yZCBvZiBkb3VibGUKKwltb3YubAkJJWQwLExfU0NSMSglYTYpCQkjIHB1dCB0aGUgbmV3IGV4cCBiYWNrIG9uIHRoZSBzdGFjaworCW1vdi5sCQlGVEVNUF9ISSglYTApLCVkMQkjIGdldCBtcyBtYW50aXNzYQorCW1vdi5sCQkmMjEsJWQwCQkJIyBsb2FkIHNoaWZ0IGNvdW50CisJbHNsLmwJCSVkMCwlZDEJCQkjIHB1dCBsb3dlciAxMSBiaXRzIGluIHVwcGVyIGJpdHMKKwltb3YubAkJJWQxLExfU0NSMiglYTYpCQkjIGJ1aWxkIGxvd2VyIGx3b3JkIGluIG1lbW9yeQorCW1vdi5sCQlGVEVNUF9MTyglYTApLCVkMQkjIGdldCBscyBtYW50aXNzYQorCWJmZXh0dQkJJWQxeyYwOiYyMX0sJWQwCQkjIGdldCBscyAyMSBiaXRzIG9mIGRvdWJsZQorCW1vdi5sCQlMX1NDUjIoJWE2KSwlZDEKKwlvci5sCQklZDAsJWQxCQkJIyBwdXQgdGhlbSBpbiBkb3VibGUgcmVzdWx0CisJbW92LmwJCUxfU0NSMSglYTYpLCVkMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWRzdF9zZ2woKTogY3JlYXRlIHNpbmdsZSBwcmVjaXNpb24gdmFsdWUgZnJvbSBleHRlbmRlZCBwcmVjCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gc291cmNlIG9wZXJhbmQgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IHNpbmdsZSBwcmVjaXNpb24gcmVzdWx0CQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkJCQkJCQkJCSMKKyMgQ2hhbmdlcyBleHRlbmRlZCBwcmVjaXNpb24gdG8gc2luZ2xlIHByZWNpc2lvbi4JCQkjCisjCXNnbF9zaWduID0gZXh0X3NpZ24JCQkJCQkjCisjCXNnbF9leHAgPSBleHRfZXhwIC0gJDNmZmYoZXh0IGJpYXMpICsgJDdmKHNnbCBiaWFzKQkJIworIwlnZXQgcmlkIG9mIGV4dCBpbnRlZ2VyIGJpdAkJCQkJIworIwlzZ2xfbWFudCA9IGV4dF9tYW50ezYyOjEyfQkJCQkJIworIwkJCQkJCQkJCSMKKyMJCS0tLS0tLS0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0JIworIyAgZXh0ZW5kZWQgLT4gIHxzfCAgICBleHAgICAgfCAgIHwxfCBtcyBtYW50ICAgfCAgICB8IGxzIG1hbnQgICAgIHwJIworIwkJLS0tLS0tLS0tLS0tLS0tICAgLS0tLS0tLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLQkjCisjCQkgOTUJICAgIDY0ICAgIDYzIDYyCSAgIDQwIDMyICAgICAgMzEgICAgIDEyCSAgMAkjCisjCQkJCSAgICAgfAkgICB8CQkJCSMKKyMJCQkJICAgICB8CSAgIHwJCQkJIworIwkJCQkgICAgIHwJICAgfAkJCQkjCisjCQkJICAgICAgICAgICAgIHYgICAgIHYJCQkJIworIwkJCSAgICAgIC0tLS0tLS0tLS0tLS0tLQkJCQkjCisjICBzaW5nbGUgICAtPgkJICAgICAgfHN8ZXhwfCBtYW50ICB8CQkJCSMKKyMJCQkgICAgICAtLS0tLS0tLS0tLS0tLS0JCQkJIworIwkJCSAgICAgIDMxICAgICAyMiAgICAgMAkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkc3Rfc2dsOgorCWNsci5sCQklZDAKKwltb3YudwkJRlRFTVBfRVgoJWEwKSwlZDAJIyBnZXQgZXhwb25lbnQKKwlzdWJpLncJCSZFWFRfQklBUywlZDAJCSMgc3VidHJhY3QgZXh0ZW5kZWQgcHJlY2lzaW9uIGJpYXMKKwlhZGRpLncJCSZTR0xfQklBUywlZDAJCSMgYWRkIHNpbmdsZSBwcmVjaXNpb24gYmlhcworCXRzdC5iCQlGVEVNUF9ISSglYTApCQkjIGlzIG51bWJlciBhIGRlbm9ybT8KKwlibWkuYgkJZHN0X2dldF9zdXBwZXIJCSMgbm8KKwlzdWJxLncJCSYweDEsJWQwCQkjIHllczsgZGVub3JtIGJpYXMgPSBTR0xfQklBUyAtIDEKK2RzdF9nZXRfc3VwcGVyOgorCXN3YXAJCSVkMAkJCSMgcHV0IGV4cCBpbiB1cHBlciB3b3JkIG9mIGQwCisJbHNsLmwJCSYweDcsJWQwCQkjIHNoaWZ0IGl0IGludG8gc2luZ2xlIGV4cCBiaXRzCisJdHN0LmIJCUZURU1QX0VYKCVhMCkJCSMgdGVzdCBzaWduCisJYnBsLmIJCWRzdF9nZXRfc21hbgkJIyBpZiBwb3NpdGl2ZSwgY29udGludWUKKwlic2V0CQkmMHgxZiwlZDAJCSMgaWYgbmVnYXRpdmUsIHB1dCBpbiBzaWduIGZpcnN0Citkc3RfZ2V0X3NtYW46CisJbW92LmwJCUZURU1QX0hJKCVhMCksJWQxCSMgZ2V0IG1zIG1hbnRpc3NhCisJYW5kaS5sCQkmMHg3ZmZmZmYwMCwlZDEJCSMgZ2V0IHVwcGVyIDIzIGJpdHMgb2YgbXMKKwlsc3IubAkJJjB4OCwlZDEJCSMgYW5kIHB1dCB0aGVtIGZsdXNoIHJpZ2h0CisJb3IubAkJJWQxLCVkMAkJCSMgcHV0IHRoZXNlIGJpdHMgaW4gbXMgd29yZCBvZiBzaW5nbGUKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitmb3V0X3BhY2s6CisJYnNyLmwJCV9jYWxjX2VhX2ZvdXQJCSMgZmV0Y2ggdGhlIDxlYT4KKwltb3YubAkJJWEwLC0oJXNwKQorCisJbW92LmIJCVNUQUcoJWE2KSwlZDAJCSMgZmV0Y2ggaW5wdXQgdHlwZQorCWJuZS53CQlmb3V0X3BhY2tfbm90X25vcm0JIyBpbnB1dCBpcyBub3QgTk9STQorCitmb3V0X3BhY2tfbm9ybToKKwlidHN0CQkmMHg0LEVYQ19DTURSRUcoJWE2KQkjIHN0YXRpYyBvciBkeW5hbWljPworCWJlcS5iCQlmb3V0X3BhY2tfcwkJIyBzdGF0aWMKKworZm91dF9wYWNrX2Q6CisJbW92LmIJCTErRVhDX0NNRFJFRyglYTYpLCVkMQkjIGZldGNoIGR5bmFtaWMgcmVnCisJbHNyLmIJCSYweDQsJWQxCisJYW5kaS53CQkmMHg3LCVkMQorCisJYnNyLmwJCWZldGNoX2RyZWcJCSMgZmV0Y2ggRG4gdy8gay1mYWN0b3IKKworCWJyYS5iCQlmb3V0X3BhY2tfdHlwZQorZm91dF9wYWNrX3M6CisJbW92LmIJCTErRVhDX0NNRFJFRyglYTYpLCVkMAkjIGZldGNoIHN0YXRpYyBmaWVsZAorCitmb3V0X3BhY2tfdHlwZToKKwliZmV4dHMJCSVkMHsmMjU6Jjd9LCVkMAkJIyBleHRyYWN0IGstZmFjdG9yCisJbW92LmwJJWQwLC0oJXNwKQorCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAJCSMgcGFzczogcHRyIHRvIGlucHV0CisKKyMgYmluZGVjIGlzIGN1cnJlbnRseSBzY3JhbWJsaW5nIEZQX1NSQyBmb3IgZGVub3JtIGlucHV0cy4KKyMgd2UnbGwgaGF2ZSB0byBjaGFuZ2UgdGhpcywgYnV0IGZvciBub3csIHRvdWdoIGx1Y2shISEKKwlic3IubAkJYmluZGVjCQkJIyBjb252ZXJ0IHhwcmVjIHRvIHBhY2tlZAorCisjCWFuZGkubAkJJjB4Y2ZmZjAwMGYsRlBfU0NSMCglYTYpICMgY2xlYXIgdW51c2VkIGZpZWxkcworCWFuZGkubAkJJjB4Y2ZmZmYwMGYsRlBfU0NSMCglYTYpICMgY2xlYXIgdW51c2VkIGZpZWxkcworCisJbW92LmwJKCVzcCkrLCVkMAorCisJdHN0LmIJCTMrRlBfU0NSMF9FWCglYTYpCisJYm5lLmIJCWZvdXRfcGFja19zZXQKKwl0c3QubAkJRlBfU0NSMF9ISSglYTYpCisJYm5lLmIJCWZvdXRfcGFja19zZXQKKwl0c3QubAkJRlBfU0NSMF9MTyglYTYpCisJYm5lLmIJCWZvdXRfcGFja19zZXQKKworIyBhZGQgdGhlIGV4dHJhIGNvbmRpdGlvbiB0aGF0IG9ubHkgaWYgdGhlIGstZmFjdG9yIHdhcyB6ZXJvLCB0b28sIHNob3VsZAorIyB3ZSB6ZXJvIHRoZSBleHBvbmVudAorCXRzdC5sCQklZDAKKwlibmUuYgkJZm91dF9wYWNrX3NldAorIyAibWFudGlzc2EiIGlzIGFsbCB6ZXJvIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGFuc3dlciBpcyB6ZXJvLiBidXQsIHRoZSAnMDQwCisjIGFsZ29yaXRobSBhbGxvd3MgdGhlIGV4cG9uZW50IHRvIGJlIG5vbi16ZXJvLiB0aGUgODgxLzIgZG8gbm90LiB0aGVyZWZvcmUsCisjIGlmIHRoZSBtYW50aXNzYSBpcyB6ZXJvLCBJIHdpbGwgemVybyB0aGUgZXhwb25lbnQsIHRvby4KKyMgdGhlIHF1ZXN0aW9uIG5vdyBpcyB3aGV0aGVyIHRoZSBleHBvbmVudHMgc2lnbiBiaXQgaXMgYWxsb3dlZCB0byBiZSBub24temVybworIyBmb3IgYSB6ZXJvLCBhbHNvLi4uCisJYW5kaS53CQkmMHhmMDAwLEZQX1NDUjAoJWE2KQorCitmb3V0X3BhY2tfc2V0OgorCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCSMgcGFzczogc3JjIGFkZHIKKworZm91dF9wYWNrX3dyaXRlOgorCW1vdi5sCQkoJXNwKSssJWExCQkjIHBhc3M6IGRzdCBhZGRyCisJbW92LmwJCSYweGMsJWQwCQkjIHBhc3M6IG9wc2l6ZSBpcyAxMiBieXRlcworCisJY21waS5iCQlTUENPTkRfRkxHKCVhNiksJm1kYTdfZmxnCisJYmVxLmIJCWZvdXRfcGFja19hNworCisJYnNyLmwJCV9kbWVtX3dyaXRlCQkjIHdyaXRlIGV4dCBwcmVjIG51bWJlciB0byBtZW1vcnkKKworCXRzdC5sCQklZDEJCQkjIGRpZCBkc3RvcmUgZmFpbD8KKwlibmUudwkJZm91dF9leHRfZXJyCQkjIHllcworCisJcnRzCisKKyMgd2UgZG9uJ3Qgd2FudCB0byBkbyB0aGUgd3JpdGUgaWYgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBzdXBlcnZpc29yIG1vZGUKKyMgc28gX21lbV93cml0ZTIoKSBoYW5kbGVzIHRoaXMgZm9yIHVzLgorZm91dF9wYWNrX2E3OgorCWJzci5sCQlfbWVtX3dyaXRlMgkJIyB3cml0ZSBleHQgcHJlYyBudW1iZXIgdG8gbWVtb3J5CisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZHN0b3JlIGZhaWw/CisJYm5lLncJCWZvdXRfZXh0X2VycgkJIyB5ZXMKKworCXJ0cworCitmb3V0X3BhY2tfbm90X25vcm06CisJY21waS5iCQklZDAsJkRFTk9STQkJIyBpcyBpdCBhIERFTk9STT8KKwliZXEudwkJZm91dF9wYWNrX25vcm0JCSMgeWVzCisJbGVhCQlGUF9TUkMoJWE2KSwlYTAKKwljbHIudwkJMitGUF9TUkNfRVgoJWE2KQorCWNtcGkuYgkJJWQwLCZTTkFOCQkjIGlzIGl0IGFuIFNOQU4/CisJYmVxLmIJCWZvdXRfcGFja19zbmFuCQkjIHllcworCWJyYS5iCQlmb3V0X3BhY2tfd3JpdGUJCSMgbm8KKworZm91dF9wYWNrX3NuYW46CisJb3JpLncJCSZzbmFuaW9wMl9tYXNrLEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgU05BTi9BSU9QCisJYnNldAkJJjB4NixGUF9TUkNfSEkoJWE2KQkjIHNldCBzbmFuIGJpdAorCWJyYS5iCQlmb3V0X3BhY2tfd3JpdGUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmbXVsKCk6IGVtdWxhdGVzIHRoZSBmbXVsIGluc3RydWN0aW9uCQkJCSMKKyMJZnNtdWwoKTogZW11bGF0ZXMgdGhlIGZzbXVsIGluc3RydWN0aW9uCQkJCSMKKyMJZmRtdWwoKTogZW11bGF0ZXMgdGhlIGZkbXVsIGluc3RydWN0aW9uCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXNjYWxlX3RvX3plcm9fc3JjKCkgLSBzY2FsZSBzcmMgZXhwb25lbnQgdG8gemVybwkJIworIwlzY2FsZV90b196ZXJvX2RzdCgpIC0gc2NhbGUgZHN0IGV4cG9uZW50IHRvIHplcm8JCSMKKyMJdW5mX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdAkJCSMKKyMJb3ZmX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0CQkJIworIwlyZXNfcW5hbigpIC0gcmV0dXJuIFFOQU4gcmVzdWx0CQkJCQkjCisjCXJlc19zbmFuKCkgLSByZXR1cm4gU05BTiByZXN1bHQJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKKyMJYTEgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBkZXN0aW5hdGlvbiBvcGVyYW5kCQkjCisjCWQwICBybmQgcHJlYyxtb2RlCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gcmVzdWx0CQkJCQkJCSMKKyMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlIYW5kbGUgTkFOcywgaW5maW5pdGllcywgYW5kIHplcm9lcyBhcyBzcGVjaWFsIGNhc2VzLiBEaXZpZGUJIworIyBub3Jtcy9kZW5vcm1zIGludG8gZXh0L3NnbC9kYmwgcHJlY2lzaW9uLgkJCQkjCisjCUZvciBub3Jtcy9kZW5vcm1zLCBzY2FsZSB0aGUgZXhwb25lbnRzIHN1Y2ggdGhhdCBhIG11bHRpcGx5CSMKKyMgaW5zdHJ1Y3Rpb24gd29uJ3QgY2F1c2UgYW4gZXhjZXB0aW9uLiBVc2UgdGhlIHJlZ3VsYXIgZm11bCB0bwkJIworIyBjb21wdXRlIGEgcmVzdWx0LiBDaGVjayBpZiB0aGUgcmVndWxhciBvcGVyYW5kcyB3b3VsZCBoYXZlIHRha2VuCSMKKyMgYW4gZXhjZXB0aW9uLiBJZiBzbywgcmV0dXJuIHRoZSBkZWZhdWx0IG92ZXJmbG93L3VuZGVyZmxvdyByZXN1bHQJIworIyBhbmQgcmV0dXJuIHRoZSBFWE9QIGlmIGV4Y2VwdGlvbnMgYXJlIGVuYWJsZWQuIEVsc2UsIHNjYWxlIHRoZQkjCisjIHJlc3VsdCBvcGVyYW5kIHRvIHRoZSBwcm9wZXIgZXhwb25lbnQuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlhbGlnbgkJMHgxMAordGJsX2ZtdWxfb3ZmbDoKKwlsb25nCQkweDNmZmYgLSAweDdmZmUJCSMgZXh0X21heAorCWxvbmcJCTB4M2ZmZiAtIDB4NDA3ZQkJIyBzZ2xfbWF4CisJbG9uZwkJMHgzZmZmIC0gMHg0M2ZlCQkjIGRibF9tYXgKK3RibF9mbXVsX3VuZmw6CisJbG9uZwkJMHgzZmZmICsgMHgwMDAxCQkjIGV4dF91bmZsCisJbG9uZwkJMHgzZmZmIC0gMHgzZjgwCQkjIHNnbF91bmZsCisJbG9uZwkJMHgzZmZmIC0gMHgzYzAwCQkjIGRibF91bmZsCisKKwlnbG9iYWwJCWZzbXVsCitmc211bDoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmc19tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IHNnbCBwcmVjCisJYnJhLmIJCWZtdWwKKworCWdsb2JhbAkJZmRtdWwKK2ZkbXVsOgorCWFuZGkuYgkJJjB4MzAsJWQwCisJb3JpLmIJCSZkX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgZGJsIHByZWMKKworCWdsb2JhbAkJZm11bAorZm11bDoKKwltb3YubAkJJWQwLExfU0NSMyglYTYpCQkjIHN0b3JlIHJuZCBpbmZvCisKKwljbHIudwkJJWQxCisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwlsc2wuYgkJJjB4MywlZDEKKwlvci5iCQlTVEFHKCVhNiksJWQxCQkjIGNvbWJpbmUgc3JjIHRhZ3MKKwlibmUudwkJZm11bF9ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAorCitmbXVsX25vcm06CisJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjFfRVgoJWE2KQorCW1vdi5sCQlEU1RfSEkoJWExKSxGUF9TQ1IxX0hJKCVhNikKKwltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMV9MTyglYTYpCisKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKworCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIHNjYWxlIHNyYyBleHBvbmVudAorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgc2NhbGUgZmFjdG9yIDEKKworCWJzci5sCQlzY2FsZV90b196ZXJvX2RzdAkjIHNjYWxlIGRzdCBleHBvbmVudAorCisJYWRkLmwJCSVkMCwoJXNwKQkJIyBTQ0FMRV9GQUNUT1IgPSBzY2FsZTEgKyBzY2FsZTIKKworCW1vdi53CQkyK0xfU0NSMyglYTYpLCVkMQkjIGZldGNoIHByZWNpc2lvbgorCWxzci5iCQkmMHg2LCVkMQkJIyBzaGlmdCB0byBsbyBiaXRzCisJbW92LmwJCSglc3ApKywlZDAJCSMgbG9hZCBTLkYuCisJY21wLmwJCSVkMCwodGJsX2ZtdWxfb3ZmbC53LCVwYywlZDEudyo0KSAjIHdvdWxkIHJlc3VsdCBvdmZsPworCWJlcS53CQlmbXVsX21heV9vdmZsCQkjIHJlc3VsdCBtYXkgcm5kIHRvIG92ZXJmbG93CisJYmx0LncJCWZtdWxfb3ZmbAkJIyByZXN1bHQgd2lsbCBvdmVyZmxvdworCisJY21wLmwJCSVkMCwodGJsX2ZtdWxfdW5mbC53LCVwYywlZDEudyo0KSAjIHdvdWxkIHJlc3VsdCB1bmZsPworCWJlcS53CQlmbXVsX21heV91bmZsCQkjIHJlc3VsdCBtYXkgcm5kIHRvIG5vIHVuZmwKKwliZ3QudwkJZm11bF91bmZsCQkjIHJlc3VsdCB3aWxsIHVuZGVyZmxvdworCisjCisjIE5PUk1BTDoKKyMgLSB0aGUgcmVzdWx0IG9mIHRoZSBtdWx0aXBseSBvcGVyYXRpb24gd2lsbCBuZWl0aGVyIG92ZXJmbG93IG5vciB1bmRlcmZsb3cuCisjIC0gZG8gdGhlIG11bHRpcGx5IHRvIHRoZSBwcm9wZXIgcHJlY2lzaW9uIGFuZCByb3VuZGluZyBtb2RlLgorIyAtIHNjYWxlIHRoZSByZXN1bHQgZXhwb25lbnQgdXNpbmcgdGhlIHNjYWxlIGZhY3Rvci4gaWYgYm90aCBvcGVyYW5kcyB3ZXJlCisjIG5vcm1hbGl6ZWQgdGhlbiB3ZSByZWFsbHkgZG9uJ3QgbmVlZCB0byBnbyB0aHJvdWdoIHRoaXMgc2NhbGluZy4gYnV0IGZvciBub3csCisjIHRoaXMgd2lsbCBkby4KKyMKK2ZtdWxfbm9ybWFsOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wZXJhbmQKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBtdWx0aXBseQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKK2ZtdWxfbm9ybWFsX2V4aXQ6CisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAorCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQge3NnbixleHB9CisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgT1ZFUkZMT1c6CisjIC0gdGhlIHJlc3VsdCBvZiB0aGUgbXVsdGlwbHkgb3BlcmF0aW9uIGlzIGFuIG92ZXJmbG93LgorIyAtIGRvIHRoZSBtdWx0aXBseSB0byB0aGUgcHJvcGVyIHByZWNpc2lvbiBhbmQgcm91bmRpbmcgbW9kZSBpbiBvcmRlciB0bworIyBzZXQgdGhlIGluZXhhY3QgYml0cy4KKyMgLSBjYWxjdWxhdGUgdGhlIGRlZmF1bHQgcmVzdWx0IGFuZCByZXR1cm4gaXQgaW4gZnAwLgorIyAtIGlmIG92ZXJmbG93IG9yIGluZXhhY3QgaXMgZW5hYmxlZCwgd2UgbmVlZCBhIG11bHRpcGx5IHJlc3VsdCByb3VuZGVkIHRvCisjIGV4dGVuZGVkIHByZWNpc2lvbi4gaWYgdGhlIG9yaWdpbmFsIG9wZXJhdGlvbiB3YXMgZXh0ZW5kZWQsIHRoZW4gd2UgaGF2ZSB0aGlzCisjIHJlc3VsdC4gaWYgdGhlIG9yaWdpbmFsIG9wZXJhdGlvbiB3YXMgc2luZ2xlIG9yIGRvdWJsZSwgd2UgaGF2ZSB0byBkbyBhbm90aGVyCisjIG11bHRpcGx5IHVzaW5nIGV4dGVuZGVkIHByZWNpc2lvbiBhbmQgdGhlIGNvcnJlY3Qgcm91bmRpbmcgbW9kZS4gdGhlIHJlc3VsdAorIyBvZiB0aGlzIG9wZXJhdGlvbiB0aGVuIGhhcyBpdHMgZXhwb25lbnQgc2NhbGVkIGJ5IC0weDYwMDAgdG8gY3JlYXRlIHRoZQorIyBleGNlcHRpb25hbCBvcGVyYW5kLgorIworZm11bF9vdmZsOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wZXJhbmQKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBtdWx0aXBseQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKyMgc2F2ZSBzZXR0aW5nIHRoaXMgdW50aWwgbm93IGJlY2F1c2UgdGhpcyBpcyB3aGVyZSBmbXVsX21heV9vdmZsIG1heSBqdW1wIGluCitmbXVsX292ZmxfdHN0OgorCW9yLmwJCSZvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmbXVsX292ZmxfZW5hCQkjIHllcworCisjIGNhbGN1bGF0ZSB0aGUgZGVmYXVsdCByZXN1bHQKK2ZtdWxfb3ZmbF9kaXM6CisJYnRzdAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgaXMgcmVzdWx0IG5lZ2F0aXZlPworCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzcyBybmQgcHJlYyxtb2RlCisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQorCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBPVkZMIGlzIGVuYWJsZWQ7IENyZWF0ZSBFWE9QOgorIyAtIGlmIHByZWNpc2lvbiBpcyBleHRlbmRlZCwgdGhlbiB3ZSBoYXZlIHRoZSBFWE9QLiBzaW1wbHkgYmlhcyB0aGUgZXhwb25lbnQKKyMgd2l0aCBhbiBleHRyYSAtMHg2MDAwLiBpZiB0aGUgcHJlY2lzaW9uIGlzIHNpbmdsZSBvciBkb3VibGUsIHdlIG5lZWQgdG8KKyMgY2FsY3VsYXRlIGEgcmVzdWx0IHJvdW5kZWQgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uLgorIworZm11bF9vdmZsX2VuYToKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHhjMCwlZDEJCSMgdGVzdCB0aGUgcm5kIHByZWMKKwlibmUuYgkJZm11bF9vdmZsX2VuYV9zZAkjIGl0J3Mgc2dsIG9yIGRibAorCitmbXVsX292ZmxfZW5hX2NvbnQ6CisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgbW92ZSByZXN1bHQgdG8gc3RhY2sKKworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi53CQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJc3ViaS5sCQkmMHg2MDAwLCVkMQkJIyBzdWJ0cmFjdCBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQkJIyBjbGVhciBzaWduIGJpdAorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCWJyYS5iCQlmbXVsX292ZmxfZGlzCisKK2ZtdWxfb3ZmbF9lbmFfc2Q6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3BlcmFuZAorCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4MzAsJWQxCQkjIGtlZXAgcm5kIG1vZGUgb25seQorCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisKKwlmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBtdWx0aXBseQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlicmEuYgkJZm11bF9vdmZsX2VuYV9jb250CisKKyMKKyMgbWF5IE9WRVJGTE9XOgorIyAtIHRoZSByZXN1bHQgb2YgdGhlIG11bHRpcGx5IG9wZXJhdGlvbiBNQVkgb3ZlcmZsb3cuCisjIC0gZG8gdGhlIG11bHRpcGx5IHRvIHRoZSBwcm9wZXIgcHJlY2lzaW9uIGFuZCByb3VuZGluZyBtb2RlIGluIG9yZGVyIHRvCisjIHNldCB0aGUgaW5leGFjdCBiaXRzLgorIyAtIGNhbGN1bGF0ZSB0aGUgZGVmYXVsdCByZXN1bHQgYW5kIHJldHVybiBpdCBpbiBmcDAuCisjCitmbXVsX21heV9vdmZsOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZm11bC54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgbXVsdGlwbHkKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCisJZmFicy54CQklZnAwLCVmcDEJCSMgbWFrZSBhIGNvcHkgb2YgcmVzdWx0CisJZmNtcC5iCQklZnAxLCYweDIJCSMgaXMgfHJlc3VsdHwgPj0gMi5iPworCWZiZ2UudwkJZm11bF9vdmZsX3RzdAkJIyB5ZXM7IG92ZXJmbG93IGhhcyBvY2N1cnJlZAorCisjIG5vLCBpdCBkaWRuJ3Qgb3ZlcmZsb3c7IHdlIGhhdmUgY29ycmVjdCByZXN1bHQKKwlicmEudwkJZm11bF9ub3JtYWxfZXhpdAorCisjCisjIFVOREVSRkxPVzoKKyMgLSB0aGUgcmVzdWx0IG9mIHRoZSBtdWx0aXBseSBvcGVyYXRpb24gaXMgYW4gdW5kZXJmbG93LgorIyAtIGRvIHRoZSBtdWx0aXBseSB0byB0aGUgcHJvcGVyIHByZWNpc2lvbiBhbmQgcm91bmRpbmcgbW9kZSBpbiBvcmRlciB0bworIyBzZXQgdGhlIGluZXhhY3QgYml0cy4KKyMgLSBjYWxjdWxhdGUgdGhlIGRlZmF1bHQgcmVzdWx0IGFuZCByZXR1cm4gaXQgaW4gZnAwLgorIyAtIGlmIG92ZXJmbG93IG9yIGluZXhhY3QgaXMgZW5hYmxlZCwgd2UgbmVlZCBhIG11bHRpcGx5IHJlc3VsdCByb3VuZGVkIHRvCisjIGV4dGVuZGVkIHByZWNpc2lvbi4gaWYgdGhlIG9yaWdpbmFsIG9wZXJhdGlvbiB3YXMgZXh0ZW5kZWQsIHRoZW4gd2UgaGF2ZSB0aGlzCisjIHJlc3VsdC4gaWYgdGhlIG9yaWdpbmFsIG9wZXJhdGlvbiB3YXMgc2luZ2xlIG9yIGRvdWJsZSwgd2UgaGF2ZSB0byBkbyBhbm90aGVyCisjIG11bHRpcGx5IHVzaW5nIGV4dGVuZGVkIHByZWNpc2lvbiBhbmQgdGhlIGNvcnJlY3Qgcm91bmRpbmcgbW9kZS4gdGhlIHJlc3VsdAorIyBvZiB0aGlzIG9wZXJhdGlvbiB0aGVuIGhhcyBpdHMgZXhwb25lbnQgc2NhbGVkIGJ5IC0weDYwMDAgdG8gY3JlYXRlIHRoZQorIyBleGNlcHRpb25hbCBvcGVyYW5kLgorIworZm11bF91bmZsOgorCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZmwgZXhjIGJpdAorCisjIGZvciBmdW4sIGxldCdzIHVzZSBvbmx5IGV4dGVuZGVkIHByZWNpc2lvbiwgcm91bmQgdG8gemVyby4gdGhlbiwgbGV0CisjIHRoZSB1bmZfcmVzKCkgcm91dGluZSBmaWd1cmUgb3V0IGFsbCB0aGUgcmVzdC4KKyMgd2lsbCB3ZSBnZXQgdGhlIGNvcnJlY3QgYW5zd2VyLgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wZXJhbmQKKworCWZtb3YubAkJJnJ6X21vZGUqMHgxMCwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZtdWwueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIG11bHRpcGx5CisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MGIsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmbXVsX3VuZmxfZW5hCQkjIHllcworCitmbXVsX3VuZmxfZGlzOgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyB1bmZfcmVzMiBtYXkgaGF2ZSBzZXQgJ1onCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIFVORkwgaXMgZW5hYmxlZC4KKyMKK2ZtdWxfdW5mbF9lbmE6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AKKworCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CisJYm5lLmIJCWZtdWxfdW5mbF9lbmFfc2QJIyBubywgc2dsIG9yIGRibAorCisjIGlmIHRoZSBybmQgbW9kZSBpcyBhbnl0aGluZyBidXQgUlosIHRoZW4gd2UgaGF2ZSB0byByZS1kbyB0aGUgYWJvdmUKKyMgbXVsdGlwbGljYXRpb24gYmVjdWFzZSB3ZSB1c2VkIFJaIGZvciBhbGwuCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKK2ZtdWxfdW5mbF9lbmFfY29udDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZm11bC54CQlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgbXVsdGlwbHkKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlmbW92bS54CQkmMHg0MCxGUF9TQ1IwKCVhNikJIyBzYXZlIHJlc3VsdCB0byBzdGFjaworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJYWRkaS5sCQkmMHg2MDAwLCVkMQkJIyBhZGQgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlicmEudwkJZm11bF91bmZsX2RpcworCitmbXVsX3VuZmxfZW5hX3NkOgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDMwLCVkMQkJIyB1c2Ugb25seSBybmQgbW9kZQorCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisKKwlicmEuYgkJZm11bF91bmZsX2VuYV9jb250CisKKyMgTUFZIFVOREVSRkxPVzoKKyMgLXVzZSB0aGUgY29ycmVjdCByb3VuZGluZyBtb2RlIGFuZCBwcmVjaXNpb24uIHRoaXMgY29kZSBmYXZvcnMgb3BlcmF0aW9ucworIyB0aGF0IGRvIG5vdCB1bmRlcmZsb3cuCitmbXVsX21heV91bmZsOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wZXJhbmQKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmbXVsLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBtdWx0aXBseQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwlmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKKwlmY21wLmIJCSVmcDEsJjB4MgkJIyBpcyB8cmVzdWx0fCA+IDIuYj8KKwlmYmd0LncJCWZtdWxfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCisJZmJsdC53CQlmbXVsX3VuZmwJCSMgeWVzOyB1bmRlcmZsb3cgb2NjdXJyZWQKKworIworIyB3ZSBzdGlsbCBkb24ndCBrbm93IGlmIHVuZGVyZmxvdyBvY2N1cnJlZC4gcmVzdWx0IGlzIH4gZXF1YWwgdG8gMi4gYnV0LAorIyB3ZSBkb24ndCBrbm93IGlmIHRoZSByZXN1bHQgd2FzIGFuIHVuZGVyZmxvdyB0aGF0IHJvdW5kZWQgdXAgdG8gYSAyIG9yCisjIGEgbm9ybWFsaXplZCBudW1iZXIgdGhhdCByb3VuZGVkIGRvd24gdG8gYSAyLiBzbywgcmVkbyB0aGUgZW50aXJlIG9wZXJhdGlvbgorIyB1c2luZyBSWiBhcyB0aGUgcm91bmRpbmcgbW9kZSB0byBzZWUgd2hhdCB0aGUgcHJlLXJvdW5kZWQgcmVzdWx0IGlzLgorIyB0aGlzIGNhc2Ugc2hvdWxkIGJlIHJlbGF0aXZlbHkgcmFyZS4KKyMKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcGVyYW5kCisKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHhjMCwlZDEJCSMga2VlcCBybmQgcHJlYworCW9yaS5iCQkmcnpfbW9kZSoweDEwLCVkMQkjIGluc2VydCBSWgorCisJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZm11bC54CQlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgbXVsdGlwbHkKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZmFicy54CQklZnAxCQkJIyBtYWtlIGFic29sdXRlIHZhbHVlCisJZmNtcC5iCQklZnAxLCYweDIJCSMgaXMgfHJlc3VsdHwgPCAyLmI/CisJZmJnZS53CQlmbXVsX25vcm1hbF9leGl0CSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCWJyYS53CQlmbXVsX3VuZmwJCSMgeWVzLCB1bmRlcmZsb3cgb2NjdXJyZWQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBNdWx0aXBseTogaW5wdXRzIGFyZSBub3QgYm90aCBub3JtYWxpemVkOyB3aGF0IGFyZSB0aGV5PworIworZm11bF9ub3Rfbm9ybToKKwltb3YudwkJKHRibF9mbXVsX29wLmIsJXBjLCVkMS53KjIpLCVkMQorCWptcAkJKHRibF9mbXVsX29wLmIsJXBjLCVkMS53KQorCisJc3diZWcJCSY0OAordGJsX2ZtdWxfb3A6CisJc2hvcnQJCWZtdWxfbm9ybQktIHRibF9mbXVsX29wICMgTk9STSB4IE5PUk0KKwlzaG9ydAkJZm11bF96ZXJvCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggWkVSTworCXNob3J0CQlmbXVsX2luZl9zcmMJLSB0YmxfZm11bF9vcCAjIE5PUk0geCBJTkYKKwlzaG9ydAkJZm11bF9yZXNfcW5hbgktIHRibF9mbXVsX29wICMgTk9STSB4IFFOQU4KKwlzaG9ydAkJZm11bF9ub3JtCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggREVOT1JNCisJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIE5PUk0geCBTTkFOCisJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIworCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKKworCXNob3J0CQlmbXVsX3plcm8JLSB0YmxfZm11bF9vcCAjIFpFUk8geCBOT1JNCisJc2hvcnQJCWZtdWxfemVybwktIHRibF9mbXVsX29wICMgWkVSTyB4IFpFUk8KKwlzaG9ydAkJZm11bF9yZXNfb3BlcnIJLSB0YmxfZm11bF9vcCAjIFpFUk8geCBJTkYKKwlzaG9ydAkJZm11bF9yZXNfcW5hbgktIHRibF9mbXVsX29wICMgWkVSTyB4IFFOQU4KKwlzaG9ydAkJZm11bF96ZXJvCS0gdGJsX2ZtdWxfb3AgIyBaRVJPIHggREVOT1JNCisJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIFpFUk8geCBTTkFOCisJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIworCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKKworCXNob3J0CQlmbXVsX2luZl9kc3QJLSB0YmxfZm11bF9vcCAjIElORiB4IE5PUk0KKwlzaG9ydAkJZm11bF9yZXNfb3BlcnIJLSB0YmxfZm11bF9vcCAjIElORiB4IFpFUk8KKwlzaG9ydAkJZm11bF9pbmZfZHN0CS0gdGJsX2ZtdWxfb3AgIyBJTkYgeCBJTkYKKwlzaG9ydAkJZm11bF9yZXNfcW5hbgktIHRibF9mbXVsX29wICMgSU5GIHggUU5BTgorCXNob3J0CQlmbXVsX2luZl9kc3QJLSB0YmxfZm11bF9vcCAjIElORiB4IERFTk9STQorCXNob3J0CQlmbXVsX3Jlc19zbmFuCS0gdGJsX2ZtdWxfb3AgIyBJTkYgeCBTTkFOCisJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIworCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKKworCXNob3J0CQlmbXVsX3Jlc19xbmFuCS0gdGJsX2ZtdWxfb3AgIyBRTkFOIHggTk9STQorCXNob3J0CQlmbXVsX3Jlc19xbmFuCS0gdGJsX2ZtdWxfb3AgIyBRTkFOIHggWkVSTworCXNob3J0CQlmbXVsX3Jlc19xbmFuCS0gdGJsX2ZtdWxfb3AgIyBRTkFOIHggSU5GCisJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIFFOQU4geCBRTkFOCisJc2hvcnQJCWZtdWxfcmVzX3FuYW4JLSB0YmxfZm11bF9vcCAjIFFOQU4geCBERU5PUk0KKwlzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgUU5BTiB4IFNOQU4KKwlzaG9ydAkJdGJsX2ZtdWxfb3AJLSB0YmxfZm11bF9vcCAjCisJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIworCisJc2hvcnQJCWZtdWxfbm9ybQktIHRibF9mbXVsX29wICMgTk9STSB4IE5PUk0KKwlzaG9ydAkJZm11bF96ZXJvCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggWkVSTworCXNob3J0CQlmbXVsX2luZl9zcmMJLSB0YmxfZm11bF9vcCAjIE5PUk0geCBJTkYKKwlzaG9ydAkJZm11bF9yZXNfcW5hbgktIHRibF9mbXVsX29wICMgTk9STSB4IFFOQU4KKwlzaG9ydAkJZm11bF9ub3JtCS0gdGJsX2ZtdWxfb3AgIyBOT1JNIHggREVOT1JNCisJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIE5PUk0geCBTTkFOCisJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIworCXNob3J0CQl0YmxfZm11bF9vcAktIHRibF9mbXVsX29wICMKKworCXNob3J0CQlmbXVsX3Jlc19zbmFuCS0gdGJsX2ZtdWxfb3AgIyBTTkFOIHggTk9STQorCXNob3J0CQlmbXVsX3Jlc19zbmFuCS0gdGJsX2ZtdWxfb3AgIyBTTkFOIHggWkVSTworCXNob3J0CQlmbXVsX3Jlc19zbmFuCS0gdGJsX2ZtdWxfb3AgIyBTTkFOIHggSU5GCisJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIFNOQU4geCBRTkFOCisJc2hvcnQJCWZtdWxfcmVzX3NuYW4JLSB0YmxfZm11bF9vcCAjIFNOQU4geCBERU5PUk0KKwlzaG9ydAkJZm11bF9yZXNfc25hbgktIHRibF9mbXVsX29wICMgU05BTiB4IFNOQU4KKwlzaG9ydAkJdGJsX2ZtdWxfb3AJLSB0YmxfZm11bF9vcCAjCisJc2hvcnQJCXRibF9mbXVsX29wCS0gdGJsX2ZtdWxfb3AgIworCitmbXVsX3Jlc19vcGVycjoKKwlicmEubAkJcmVzX29wZXJyCitmbXVsX3Jlc19zbmFuOgorCWJyYS5sCQlyZXNfc25hbgorZm11bF9yZXNfcW5hbjoKKwlicmEubAkJcmVzX3FuYW4KKworIworIyBNdWx0aXBseTogKFplcm8geCBaZXJvKSB8fCAoWmVybyB4IG5vcm0pIHx8IChaZXJvIHggZGVub3JtKQorIworCWdsb2JhbAkJZm11bF96ZXJvCQkjIGdsb2JhbCBmb3IgZnNnbG11bAorZm11bF96ZXJvOgorCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDAJCSMgZXhjbHVzaXZlIG9yIHRoZSBzaWducworCW1vdi5iCQlEU1RfRVgoJWExKSwlZDEKKwllb3IuYgkJJWQwLCVkMQorCWJwbC5iCQlmbXVsX3plcm9fcAkJIyByZXN1bHQgWkVSTyBpcyBwb3MuCitmbXVsX3plcm9fbjoKKwlmbW92LnMJCSYweDgwMDAwMDAwLCVmcDAJIyBsb2FkIC1aRVJPCisJbW92LmIJCSZ6X2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgWi9OCisJcnRzCitmbXVsX3plcm9fcDoKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyBsb2FkICtaRVJPCisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaCisJcnRzCisKKyMKKyMgTXVsdGlwbHk6IChpbmYgeCBpbmYpIHx8IChpbmYgeCBub3JtKSB8fCAoaW5mIHggZGVub3JtKQorIworIyBOb3RlOiBUaGUgai1iaXQgZm9yIGFuIGluZmluaXR5IGlzIGEgZG9uJ3QtY2FyZS4gSG93ZXZlciwgdG8gYmUKKyMgc3RyaWN0bHkgY29tcGF0aWJsZSB3LyB0aGUgNjg4ODEvODgyLCB3ZSBtYWtlIHN1cmUgdG8gcmV0dXJuIGFuCisjIElORiB3LyB0aGUgai1iaXQgc2V0IGlmIHRoZSBpbnB1dCBJTkYgai1iaXQgd2FzIHNldC4gRGVzdGluYXRpb24KKyMgSU5GcyB0YWtlIHByaW9yaXR5LgorIworCWdsb2JhbAkJZm11bF9pbmZfZHN0CQkjIGdsb2JhbCBmb3IgZnNnbG11bAorZm11bF9pbmZfZHN0OgorCWZtb3ZtLngJCURTVCglYTEpLCYweDgwCQkjIHJldHVybiBJTkYgcmVzdWx0IGluIGZwMAorCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDAJCSMgZXhjbHVzaXZlIG9yIHRoZSBzaWducworCW1vdi5iCQlEU1RfRVgoJWExKSwlZDEKKwllb3IuYgkJJWQwLCVkMQorCWJwbC5iCQlmbXVsX2luZl9kc3RfcAkJIyByZXN1bHQgSU5GIGlzIHBvcy4KK2ZtdWxfaW5mX2RzdF9uOgorCWZhYnMueAkJJWZwMAkJCSMgY2xlYXIgcmVzdWx0IHNpZ24KKwlmbmVnLngJCSVmcDAJCQkjIHNldCByZXN1bHQgc2lnbgorCW1vdi5iCQkmaW5mX2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgSU5GL04KKwlydHMKK2ZtdWxfaW5mX2RzdF9wOgorCWZhYnMueAkJJWZwMAkJCSMgY2xlYXIgcmVzdWx0IHNpZ24KKwltb3YuYgkJJmluZl9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgSU5GCisJcnRzCisKKwlnbG9iYWwJCWZtdWxfaW5mX3NyYwkJIyBnbG9iYWwgZm9yIGZzZ2xtdWwKK2ZtdWxfaW5mX3NyYzoKKwlmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gSU5GIHJlc3VsdCBpbiBmcDAKKwltb3YuYgkJU1JDX0VYKCVhMCksJWQwCQkjIGV4Y2x1c2l2ZSBvciB0aGUgc2lnbnMKKwltb3YuYgkJRFNUX0VYKCVhMSksJWQxCisJZW9yLmIJCSVkMCwlZDEKKwlicGwuYgkJZm11bF9pbmZfZHN0X3AJCSMgcmVzdWx0IElORiBpcyBwb3MuCisJYnJhLmIJCWZtdWxfaW5mX2RzdF9uCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZmluKCk6IGVtdWxhdGVzIHRoZSBmbW92ZSBpbnN0cnVjdGlvbgkJCQkjCisjCWZzaW4oKTogZW11bGF0ZXMgdGhlIGZzbW92ZSBpbnN0cnVjdGlvbgkJCQkjCisjCWZkaW4oKTogZW11bGF0ZXMgdGhlIGZkbW92ZSBpbnN0cnVjdGlvbgkJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlub3JtKCkgLSBub3JtYWxpemUgbWFudGlzc2EgZm9yIEVYT1Agb24gZGVub3JtCQkJIworIwlzY2FsZV90b196ZXJvX3NyYygpIC0gc2NhbGUgc3JjIGV4cG9uZW50IHRvIHplcm8JCSMKKyMJb3ZmX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0CQkJIworIwl1bmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CQkJIworIwlyZXNfcW5hbl8xb3AoKSAtIHJldHVybiBRTkFOIHJlc3VsdAkJCQkjCisjCXJlc19zbmFuXzFvcCgpIC0gcmV0dXJuIFNOQU4gcmVzdWx0CQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKKyMJZDAgPSByb3VuZCBwcmVjL21vZGUJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSByZXN1bHQJCQkJCQkJIworIwlmcDEgPSBFWE9QIChpZiBleGNlcHRpb24gb2NjdXJyZWQpCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUhhbmRsZSBOQU5zLCBpbmZpbml0aWVzLCBhbmQgemVyb2VzIGFzIHNwZWNpYWwgY2FzZXMuIERpdmlkZQkjCisjIG5vcm1zIGludG8gZXh0ZW5kZWQsIHNpbmdsZSwgYW5kIGRvdWJsZSBwcmVjaXNpb24uCQkJIworIwlOb3JtcyBjYW4gYmUgZW11bGF0ZWQgdy8gYSByZWd1bGFyIGZtb3ZlIGluc3RydWN0aW9uLiBGb3IJIworIyBzZ2wvZGJsLCBtdXN0IHNjYWxlIGV4cG9uZW50IGFuZCBwZXJmb3JtIGFuICJmbW92ZSIuIENoZWNrIHRvIHNlZQkjCisjIGlmIHRoZSByZXN1bHQgd291bGQgaGF2ZSBvdmVyZmxvd2VkL3VuZGVyZmxvd2VkLiBJZiBzbywgdXNlIHVuZl9yZXMoKQkjCisjIG9yIG92Zl9yZXMoKSB0byByZXR1cm4gdGhlIGRlZmF1bHQgcmVzdWx0LiBBbHNvIHJldHVybiBFWE9QIGlmCSMKKyMgZXhjZXB0aW9uIGlzIGVuYWJsZWQuIElmIG5vIGV4Y2VwdGlvbiwgcmV0dXJuIHRoZSBkZWZhdWx0IHJlc3VsdC4JIworIwlVbm5vcm1zIGRvbid0IHBhc3MgdGhyb3VnaCBoZXJlLgkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlmc2luCitmc2luOgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWNpc2lvbgorCWJyYS5iCQlmaW4KKworCWdsb2JhbAkJZmRpbgorZmRpbjoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmZF9tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IGRibCBwcmVjaXNpb24KKworCWdsb2JhbAkJZmluCitmaW46CisJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzdG9yZSBybmQgaW5mbworCisJbW92LmIJCVNUQUcoJWE2KSwlZDEJCSMgZmV0Y2ggc3JjIG9wdHlwZSB0YWcKKwlibmUudwkJZmluX25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CisKKyMKKyMgRlAgTU9WRSBJTjogTk9STXMgYW5kIERFTk9STXMgT05MWSEKKyMKK2Zpbl9ub3JtOgorCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUudwkJZmluX25vdF9leHQJCSMgbm8sIHNvIGdvIGhhbmRsZSBkYmwgb3Igc2dsCisKKyMKKyMgcHJlY2lzaW9uIHNlbGVjdGVkIGlzIGV4dGVuZGVkLiBzby4uLndlIGNhbm5vdCBnZXQgYW4gdW5kZXJmbG93CisjIG9yIG92ZXJmbG93IGJlY2F1c2Ugb2Ygcm91bmRpbmcgdG8gdGhlIGNvcnJlY3QgcHJlY2lzaW9uLiBzby4uLgorIyBza2lwIHRoZSBzY2FsaW5nIGFuZCB1bnNjYWxpbmcuLi4KKyMKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgdGhlIG9wZXJhbmQgbmVnYXRpdmU/CisJYnBsLmIJCWZpbl9ub3JtX2RvbmUJCSMgbm8KKwlic2V0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyB5ZXMsIHNvIHNldCAnTicgY2NvZGUgYml0CitmaW5fbm9ybV9kb25lOgorCWZtb3ZtLngJCVNSQyglYTApLCYweDgwCQkjIHJldHVybiByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgZm9yIGFuIGV4dGVuZGVkIHByZWNpc2lvbiBERU5PUk0sIHRoZSBVTkZMIGV4Y2VwdGlvbiBiaXQgaXMgc2V0CisjIHRoZSBhY2NydWVkIGJpdCBpcyBOT1Qgc2V0IGluIHRoaXMgaW5zdGFuY2Uobm8gaW5leGFjdG5lc3MhKQorIworZmluX2Rlbm9ybToKKwlhbmRpLmIJCSYweGMwLCVkMAkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CisJYm5lLncJCWZpbl9ub3RfZXh0CQkjIG5vLCBzbyBnbyBoYW5kbGUgZGJsIG9yIHNnbAorCisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIHRoZSBvcGVyYW5kIG5lZ2F0aXZlPworCWJwbC5iCQlmaW5fZGVub3JtX2RvbmUJCSMgbm8KKwlic2V0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyB5ZXMsIHNvIHNldCAnTicgY2NvZGUgYml0CitmaW5fZGVub3JtX2RvbmU6CisJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlidHN0CQkmdW5mbF9iaXQsRlBDUl9FTkFCTEUoJWE2KSAjIGlzIFVORkwgZW5hYmxlZD8KKwlibmUuYgkJZmluX2Rlbm9ybV91bmZsX2VuYQkjIHllcworCXJ0cworCisjCisjIHRoZSBpbnB1dCBpcyBhbiBleHRlbmRlZCBERU5PUk0gYW5kIHVuZGVyZmxvdyBpcyBlbmFibGVkIGluIHRoZSBGUENSLgorIyBub3JtYWxpemUgdGhlIG1hbnRpc3NhIGFuZCBhZGQgdGhlIGJpYXMgb2YgMHg2MDAwIHRvIHRoZSByZXN1bHRpbmcgbmVnYXRpdmUKKyMgZXhwb25lbnQgYW5kIGluc2VydCBiYWNrIGludG8gdGhlIG9wZXJhbmQuCisjCitmaW5fZGVub3JtX3VuZmxfZW5hOgorCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHB0ciB0byBvcGVyYW5kCisJYnNyLmwJCW5vcm0JCQkjIG5vcm1hbGl6ZSByZXN1bHQKKwluZWcudwkJJWQwCQkJIyBuZXcgZXhwb25lbnQgPSAtKHNoZnQgdmFsKQorCWFkZGkudwkJJjB4NjAwMCwlZDAJCSMgYWRkIG5ldyBiaWFzIHRvIGV4cG9uZW50CisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCBvbGQgc2lnbixleHAKKwlhbmRpLncJCSYweDgwMDAsJWQxCQkjIGtlZXAgb2xkIHNpZ24KKwlhbmRpLncJCSYweDdmZmYsJWQwCQkjIGNsZWFyIHNpZ24gcG9zaXRpb24KKwlvci53CQklZDEsJWQwCQkJIyBjb25jYXQgbmV3IGV4byxvbGQgc2lnbgorCW1vdi53CQklZDAsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCXJ0cworCisjCisjIG9wZXJhbmQgaXMgdG8gYmUgcm91bmRlZCB0byBzaW5nbGUgb3IgZG91YmxlIHByZWNpc2lvbgorIworZmluX25vdF9leHQ6CisJY21waS5iCQklZDAsJnNfbW9kZSoweDEwCSMgc2VwYXJhdGUgc2dsL2RibCBwcmVjCisJYm5lLmIJCWZpbl9kYmwKKworIworIyBvcGVyYW5kIGlzIHRvIGJlIHJvdW5kZWQgdG8gc2luZ2xlIHByZWNpc2lvbgorIworZmluX3NnbDoKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwlic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCisKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4M2Y4MAkjIHdpbGwgbW92ZSBpbiB1bmRlcmZsb3c/CisJYmdlLncJCWZpbl9zZF91bmZsCQkjIHllczsgZ28gaGFuZGxlIHVuZGVyZmxvdworCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0MDdlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PworCWJlcS53CQlmaW5fc2RfbWF5X292ZmwJCSMgbWF5YmU7IGdvIGNoZWNrCisJYmx0LncJCWZpbl9zZF9vdmZsCQkjIHllczsgZ28gaGFuZGxlIG92ZXJmbG93CisKKyMKKyMgb3BlcmFuZCB3aWxsIE5PVCBvdmVyZmxvdyBvciB1bmRlcmZsb3cgd2hlbiBtb3ZlZCBpbnRvIHRoZSBmcCByZWcgZmlsZQorIworZmluX3NkX25vcm1hbDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZm1vdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gbW92ZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmaW5fc2Rfbm9ybWFsX2V4aXQ6CisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQge3NnbixleHB9CisJbW92LncJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlvci53CQklZDEsJWQyCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cG9uZW50CisJbW92LncJCSVkMixGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24KKyMKK2Zpbl9kYmw6CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgY2FsY3VsYXRlIHNjYWxlIGZhY3RvcgorCisJY21waS5sCQklZDAsJjB4M2ZmZi0weDNjMDAJIyB3aWxsIG1vdmUgaW4gdW5kZXJmbG93PworCWJnZS53CQlmaW5fc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4NDNmZQkjIHdpbGwgbW92ZSBpbiBvdmVyZmxvdz8KKwliZXEudwkJZmluX3NkX21heV9vdmZsCQkjIG1heWJlOyBnbyBjaGVjaworCWJsdC53CQlmaW5fc2Rfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdworCWJyYS53CQlmaW5fc2Rfbm9ybWFsCQkjIG5vOyBobyBoYW5kbGUgbm9ybWFsaXplZCBvcAorCisjCisjIG9wZXJhbmQgV0lMTCB1bmRlcmZsb3cgd2hlbiBtb3ZlZCBpbiB0byB0aGUgZnAgcmVnaXN0ZXIgZmlsZQorIworZmluX3NkX3VuZmw6CisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CisKKwl0c3QuYgkJRlBfU0NSMF9FWCglYTYpCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CisJYnBsLmIJCWZpbl9zZF91bmZsX3RzdAorCWJzZXQJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIHNldCAnTicgY2NvZGUgYml0CisKKyMgaWYgdW5kZXJmbG93IG9yIGluZXhhY3QgaXMgZW5hYmxlZCwgdGhlbiBnbyBjYWxjdWxhdGUgdGhlIEVYT1AgZmlyc3QuCitmaW5fc2RfdW5mbF90c3Q6CisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgwYiwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZpbl9zZF91bmZsX2VuYQkJIyB5ZXMKKworZmluX3NkX3VuZmxfZGlzOgorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyB1bmZfcmVzIG1heSBoYXZlIHNldCAnWicKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgb3BlcmFuZCB3aWxsIHVuZGVyZmxvdyBBTkQgdW5kZXJmbG93IG9yIGluZXhhY3QgaXMgZW5hYmxlZC4KKyMgdGhlcmVmb3JlLCB3ZSBtdXN0IHJldHVybiB0aGUgcmVzdWx0IHJvdW5kZWQgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uLgorIworZmluX3NkX3VuZmxfZW5hOgorCW1vdi5sCQlGUF9TQ1IwX0hJKCVhNiksRlBfU0NSMV9ISSglYTYpCisJbW92LmwJCUZQX1NDUjBfTE8oJWE2KSxGUF9TQ1IxX0xPKCVhNikKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQgY3VycmVudCBleHBvbmVudAorCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi53CQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBzdWJ0cmFjdCBzY2FsZSBmYWN0b3IKKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGV4dHJhY3Qgb2xkIHNpZ24KKwlhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBuZXcgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEKKwlvci53CQklZDEsJWQyCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDIsRlBfU0NSMV9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlicmEuYgkJZmluX3NkX3VuZmxfZGlzCisKKyMKKyMgb3BlcmFuZCBXSUxMIG92ZXJmbG93LgorIworZmluX3NkX292Zmw6CisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworCWZtb3YueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIG1vdmUKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworZmluX3NkX292ZmxfdHN0OgorCW9yLmwJCSZvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmaW5fc2Rfb3ZmbF9lbmEJCSMgeWVzCisKKyMKKyMgT1ZGTCBpcyBub3QgZW5hYmxlZDsgdGhlcmVmb3JlLCB3ZSBtdXN0IGNyZWF0ZSB0aGUgZGVmYXVsdCByZXN1bHQgYnkKKyMgY2FsbGluZyBvdmZfcmVzKCkuCisjCitmaW5fc2Rfb3ZmbF9kaXM6CisJYnRzdAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgaXMgcmVzdWx0IG5lZ2F0aXZlPworCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzczogcHJlYyxtb2RlCisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQorCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBPVkZMIGlzIGVuYWJsZWQuCisjIHRoZSBJTkVYMiBiaXQgaGFzIGFscmVhZHkgYmVlbiB1cGRhdGVkIGJ5IHRoZSByb3VuZCB0byB0aGUgY29ycmVjdCBwcmVjaXNpb24uCisjIG5vdywgcm91bmQgdG8gZXh0ZW5kZWQoYW5kIGRvbid0IGFsdGVyIHRoZSBGUFNSKS4KKyMKK2Zpbl9zZF9vdmZsX2VuYToKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCXN1Yi5sCQkmMHg2MDAwLCVkMQkJIyBzdWJ0cmFjdCBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQorCW9yLncJCSVkMiwlZDEKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJYnJhLmIJCWZpbl9zZF9vdmZsX2RpcworCisjCisjIHRoZSBtb3ZlIGluIE1BWSBvdmVyZmxvdy4gc28uLi4KKyMKK2Zpbl9zZF9tYXlfb3ZmbDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZm1vdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gdGhlIG1vdmUKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCisJZmFicy54CQklZnAwLCVmcDEJCSMgbWFrZSBhIGNvcHkgb2YgcmVzdWx0CisJZmNtcC5iCQklZnAxLCYweDIJCSMgaXMgfHJlc3VsdHwgPj0gMi5iPworCWZiZ2UudwkJZmluX3NkX292ZmxfdHN0CQkjIHllczsgb3ZlcmZsb3cgaGFzIG9jY3VycmVkCisKKyMgbm8sIGl0IGRpZG4ndCBvdmVyZmxvdzsgd2UgaGF2ZSBjb3JyZWN0IHJlc3VsdAorCWJyYS53CQlmaW5fc2Rfbm9ybWFsX2V4aXQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBvcGVyYW5kIGlzIG5vdCBhIE5PUk06IGNoZWNrIGl0cyBvcHR5cGUgYW5kIGJyYW5jaCBhY2NvcmRpbmdseQorIworZmluX25vdF9ub3JtOgorCWNtcGkuYgkJJWQxLCZERU5PUk0JCSMgd2VlZCBvdXQgREVOT1JNCisJYmVxLncJCWZpbl9kZW5vcm0KKwljbXBpLmIJCSVkMSwmU05BTgkJIyB3ZWVkIG91dCBTTkFOcworCWJlcS5sCQlyZXNfc25hbl8xb3AKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyB3ZWVkIG91dCBRTkFOcworCWJlcS5sCQlyZXNfcW5hbl8xb3AKKworIworIyBkbyB0aGUgZm1vdmUgaW47IGF0IHRoaXMgcG9pbnQsIG9ubHkgcG9zc2libGUgb3BzIGFyZSBaRVJPIGFuZCBJTkYuCisjIHVzZSBmbW92IHRvIGRldGVybWluZSBjY29kZXMuCisjIHByZWM6bW9kZSBzaG91bGQgYmUgemVybyBhdCB0aGlzIHBvaW50IGJ1dCBpdCB3b24ndCBhZmZlY3QgYW5zd2VyIGFueXdheXMuCisjCisJZm1vdi54CQlTUkMoJWEwKSwlZnAwCQkjIGRvIGZtb3ZlIGluCisJZm1vdi5sCQklZnBzciwlZDAJCSMgbm8gZXhjZXB0aW9ucyBwb3NzaWJsZQorCXJvbC5sCQkmMHg4LCVkMAkJIyBwdXQgY2NvZGVzIGluIGxvIGJ5dGUKKwltb3YuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIGluc2VydCBjb3JyZWN0IGNjb2RlcworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZkaXYoKTogZW11bGF0ZXMgdGhlIGZkaXYgaW5zdHJ1Y3Rpb24JCQkJIworIwlmc2RpdigpOiBlbXVsYXRlcyB0aGUgZnNkaXYgaW5zdHJ1Y3Rpb24JCQkJIworIwlmZGRpdigpOiBlbXVsYXRlcyB0aGUgZmRkaXYgaW5zdHJ1Y3Rpb24JCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJc2NhbGVfdG9femVyb19zcmMoKSAtIHNjYWxlIHNyYyBleHBvbmVudCB0byB6ZXJvCQkjCisjCXNjYWxlX3RvX3plcm9fZHN0KCkgLSBzY2FsZSBkc3QgZXhwb25lbnQgdG8gemVybwkJIworIwl1bmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CQkJIworIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCisjCXJlc19xbmFuKCkgLSByZXR1cm4gUU5BTiByZXN1bHQJCQkJCSMKKyMJcmVzX3NuYW4oKSAtIHJldHVybiBTTkFOIHJlc3VsdAkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlhMSA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGRlc3RpbmF0aW9uIG9wZXJhbmQJCSMKKyMJZDAgIHJuZCBwcmVjLG1vZGUJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSByZXN1bHQJCQkJCQkJIworIwlmcDEgPSBFWE9QIChpZiBleGNlcHRpb24gb2NjdXJyZWQpCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUhhbmRsZSBOQU5zLCBpbmZpbml0aWVzLCBhbmQgemVyb2VzIGFzIHNwZWNpYWwgY2FzZXMuIERpdmlkZQkjCisjIG5vcm1zL2Rlbm9ybXMgaW50byBleHQvc2dsL2RibCBwcmVjaXNpb24uCQkJCSMKKyMJRm9yIG5vcm1zL2Rlbm9ybXMsIHNjYWxlIHRoZSBleHBvbmVudHMgc3VjaCB0aGF0IGEgZGl2aWRlCSMKKyMgaW5zdHJ1Y3Rpb24gd29uJ3QgY2F1c2UgYW4gZXhjZXB0aW9uLiBVc2UgdGhlIHJlZ3VsYXIgZmRpdiB0bwkJIworIyBjb21wdXRlIGEgcmVzdWx0LiBDaGVjayBpZiB0aGUgcmVndWxhciBvcGVyYW5kcyB3b3VsZCBoYXZlIHRha2VuCSMKKyMgYW4gZXhjZXB0aW9uLiBJZiBzbywgcmV0dXJuIHRoZSBkZWZhdWx0IG92ZXJmbG93L3VuZGVyZmxvdyByZXN1bHQJIworIyBhbmQgcmV0dXJuIHRoZSBFWE9QIGlmIGV4Y2VwdGlvbnMgYXJlIGVuYWJsZWQuIEVsc2UsIHNjYWxlIHRoZQkjCisjIHJlc3VsdCBvcGVyYW5kIHRvIHRoZSBwcm9wZXIgZXhwb25lbnQuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlhbGlnbgkJMHgxMAordGJsX2ZkaXZfdW5mbDoKKwlsb25nCQkweDNmZmYgLSAweDAwMDAJCSMgZXh0X3VuZmwKKwlsb25nCQkweDNmZmYgLSAweDNmODEJCSMgc2dsX3VuZmwKKwlsb25nCQkweDNmZmYgLSAweDNjMDEJCSMgZGJsX3VuZmwKKwordGJsX2ZkaXZfb3ZmbDoKKwlsb25nCQkweDNmZmYgLSAweDdmZmUJCSMgZXh0IG92ZXJmbG93IGV4cG9uZW50CisJbG9uZwkJMHgzZmZmIC0gMHg0MDdlCQkjIHNnbCBvdmVyZmxvdyBleHBvbmVudAorCWxvbmcJCTB4M2ZmZiAtIDB4NDNmZQkJIyBkYmwgb3ZlcmZsb3cgZXhwb25lbnQKKworCWdsb2JhbAkJZnNkaXYKK2ZzZGl2OgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWMKKwlicmEuYgkJZmRpdgorCisJZ2xvYmFsCQlmZGRpdgorZmRkaXY6CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKKwlvcmkuYgkJJmRfbW9kZSoweDEwLCVkMAkjIGluc2VydCBkYmwgcHJlYworCisJZ2xvYmFsCQlmZGl2CitmZGl2OgorCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KKworCWNsci53CQklZDEKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWxzbC5iCQkmMHgzLCVkMQorCW9yLmIJCVNUQUcoJWE2KSwlZDEJCSMgY29tYmluZSBzcmMgdGFncworCisJYm5lLncJCWZkaXZfbm90X25vcm0JCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworIworIyBESVZJREU6IE5PUk1zIGFuZCBERU5PUk1zIE9OTFkhCisjCitmZGl2X25vcm06CisJbW92LncJCURTVF9FWCglYTEpLEZQX1NDUjFfRVgoJWE2KQorCW1vdi5sCQlEU1RfSEkoJWExKSxGUF9TQ1IxX0hJKCVhNikKKwltb3YubAkJRFNUX0xPKCVhMSksRlBfU0NSMV9MTyglYTYpCisKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKworCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIHNjYWxlIHNyYyBleHBvbmVudAorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgc2NhbGUgZmFjdG9yIDEKKworCWJzci5sCQlzY2FsZV90b196ZXJvX2RzdAkjIHNjYWxlIGRzdCBleHBvbmVudAorCisJbmVnLmwJCSglc3ApCQkJIyBTQ0FMRSBGQUNUT1IgPSBzY2FsZTEgLSBzY2FsZTIKKwlhZGQubAkJJWQwLCglc3ApCisKKwltb3YudwkJMitMX1NDUjMoJWE2KSwlZDEJIyBmZXRjaCBwcmVjaXNpb24KKwlsc3IuYgkJJjB4NiwlZDEJCSMgc2hpZnQgdG8gbG8gYml0cworCW1vdi5sCQkoJXNwKSssJWQwCQkjIGxvYWQgUy5GLgorCWNtcC5sCQklZDAsKHRibF9mZGl2X292ZmwuYiwlcGMsJWQxLncqNCkgIyB3aWxsIHJlc3VsdCBvdmVyZmxvdz8KKwlibGUudwkJZmRpdl9tYXlfb3ZmbAkJIyByZXN1bHQgd2lsbCBvdmVyZmxvdworCisJY21wLmwJCSVkMCwodGJsX2ZkaXZfdW5mbC53LCVwYywlZDEudyo0KSAjIHdpbGwgcmVzdWx0IHVuZGVyZmxvdz8KKwliZXEudwkJZmRpdl9tYXlfdW5mbAkJIyBtYXliZQorCWJndC53CQlmZGl2X3VuZmwJCSMgeWVzOyBnbyBoYW5kbGUgdW5kZXJmbG93CisKK2ZkaXZfbm9ybWFsOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2F2ZSBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZkaXYueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBwZXJmb3JtIGRpdmlkZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmZGl2X25vcm1hbF9leGl0OgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIHJlc3VsdCBvbiBzdGFjaworCW1vdi5sCQklZDIsLSglc3ApCQkjIHN0b3JlIGQyCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBsb2FkIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlydHMKKwordGJsX2ZkaXZfb3ZmbDI6CisJbG9uZwkJMHg3ZmZmCisJbG9uZwkJMHg0MDdmCisJbG9uZwkJMHg0M2ZmCisKK2ZkaXZfbm9fb3ZmbDoKKwltb3YubAkJKCVzcCkrLCVkMAkJIyByZXN0b3JlIHNjYWxlIGZhY3RvcgorCWJyYS5iCQlmZGl2X25vcm1hbF9leGl0CisKK2ZkaXZfbWF5X292Zmw6CisJbW92LmwJCSVkMCwtKCVzcCkJCSMgc2F2ZSBzY2FsZSBmYWN0b3IKKworCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgc2V0IEZQU1IKKworCWZkaXYueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIGRpdmlkZQorCisJZm1vdi5sCQklZnBzciwlZDAKKwlmbW92LmwJCSYweDAsJWZwY3IKKworCW9yLmwJCSVkMCxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWCxOCisKKwlmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSByZXN1bHQgdG8gc3RhY2sKKwltb3YudwkJKCVzcCksJWQwCQkjIGZldGNoIG5ldyBleHBvbmVudAorCWFkZC5sCQkmMHhjLCVzcAkJIyBjbGVhciByZXN1bHQgZnJvbSBzdGFjaworCWFuZGkubAkJJjB4N2ZmZiwlZDAJCSMgc3RyaXAgc2lnbgorCXN1Yi5sCQkoJXNwKSwlZDAJCSMgYWRkIHNjYWxlIGZhY3RvcgorCWNtcC5sCQklZDAsKHRibF9mZGl2X292ZmwyLmIsJXBjLCVkMS53KjQpCisJYmx0LmIJCWZkaXZfbm9fb3ZmbAorCW1vdi5sCQkoJXNwKSssJWQwCisKK2ZkaXZfb3ZmbF90c3Q6CisJb3IubAkJJm92ZmxfaW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAorCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgxMywlZDEJCSMgaXMgT1ZGTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZkaXZfb3ZmbF9lbmEJCSMgeWVzCisKK2ZkaXZfb3ZmbF9kaXM6CisJYnRzdAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgaXMgcmVzdWx0IG5lZ2F0aXZlPworCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzcyBwcmVjOnJuZAorCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IElORiBpZiBhcHBsaWNhYmxlCisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCitmZGl2X292ZmxfZW5hOgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CisJYm5lLmIJCWZkaXZfb3ZmbF9lbmFfc2QJIyBubywgZG8gc2dsIG9yIGRibAorCitmZGl2X292ZmxfZW5hX2NvbnQ6CisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgbW92ZSByZXN1bHQgdG8gc3RhY2sKKworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi53CQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJc3ViaS5sCQkmMHg2MDAwLCVkMQkJIyBzdWJ0cmFjdCBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQkJIyBjbGVhciBzaWduIGJpdAorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCWJyYS5iCQlmZGl2X292ZmxfZGlzCisKK2ZkaXZfb3ZmbF9lbmFfc2Q6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3BlcmFuZAorCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4MzAsJWQxCQkjIGtlZXAgcm5kIG1vZGUKKwlmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgorCisJZmRpdi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgZGl2aWRlCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWJyYS5iCQlmZGl2X292ZmxfZW5hX2NvbnQKKworZmRpdl91bmZsOgorCWJzZXQJCSZ1bmZsX2JpdCxGUFNSX0VYQ0VQVCglYTYpICMgc2V0IHVuZmwgZXhjIGJpdAorCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJJnJ6X21vZGUqMHgxMCwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZkaXYueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIGRpdmlkZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZmRpdl91bmZsX2VuYQkJIyB5ZXMKKworZmRpdl91bmZsX2RpczoKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0CisKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiByZXN1bHQgYWRkcgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEJCSMgcGFzczogcm5kIHByZWMsbW9kZQorCWJzci5sCQl1bmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgJ1onIG1heSBoYXZlIGJlZW4gc2V0CisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIFVORkwgaXMgZW5hYmxlZC4KKyMKK2ZkaXZfdW5mbF9lbmE6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AKKworCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CisJYm5lLmIJCWZkaXZfdW5mbF9lbmFfc2QJIyBubywgc2dsIG9yIGRibAorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKK2ZkaXZfdW5mbF9lbmFfY29udDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZmRpdi54CQlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgZGl2aWRlCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJZm1vdm0ueAkJJjB4NDAsRlBfU0NSMCglYTYpCSMgc2F2ZSByZXN1bHQgdG8gc3RhY2sKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvZXIKKwlhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlicmEudwkJZmRpdl91bmZsX2RpcworCitmZGl2X3VuZmxfZW5hX3NkOgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDMwLCVkMQkJIyB1c2Ugb25seSBybmQgbW9kZQorCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisKKwlicmEuYgkJZmRpdl91bmZsX2VuYV9jb250CisKKyMKKyMgdGhlIGRpdmlkZSBvcGVyYXRpb24gTUFZIHVuZGVyZmxvdzoKKyMKK2ZkaXZfbWF5X3VuZmw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmZGl2LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBkaXZpZGUKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCisJZmFicy54CQklZnAwLCVmcDEJCSMgbWFrZSBhIGNvcHkgb2YgcmVzdWx0CisJZmNtcC5iCQklZnAxLCYweDEJCSMgaXMgfHJlc3VsdHwgPiAxLmI/CisJZmJndC53CQlmZGl2X25vcm1hbF9leGl0CSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCWZibHQudwkJZmRpdl91bmZsCQkjIHllczsgdW5kZXJmbG93IG9jY3VycmVkCisKKyMKKyMgd2Ugc3RpbGwgZG9uJ3Qga25vdyBpZiB1bmRlcmZsb3cgb2NjdXJyZWQuIHJlc3VsdCBpcyB+IGVxdWFsIHRvIDEuIGJ1dCwKKyMgd2UgZG9uJ3Qga25vdyBpZiB0aGUgcmVzdWx0IHdhcyBhbiB1bmRlcmZsb3cgdGhhdCByb3VuZGVkIHVwIHRvIGEgMQorIyBvciBhIG5vcm1hbGl6ZWQgbnVtYmVyIHRoYXQgcm91bmRlZCBkb3duIHRvIGEgMS4gc28sIHJlZG8gdGhlIGVudGlyZQorIyBvcGVyYXRpb24gdXNpbmcgUlogYXMgdGhlIHJvdW5kaW5nIG1vZGUgdG8gc2VlIHdoYXQgdGhlIHByZS1yb3VuZGVkCisjIHJlc3VsdCBpcy4gdGhpcyBjYXNlIHNob3VsZCBiZSByZWxhdGl2ZWx5IHJhcmUuCisjCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AgaW50byBmcDEKKworCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBrZWVwIHJuZCBwcmVjCisJb3JpLmIJCSZyel9tb2RlKjB4MTAsJWQxCSMgaW5zZXJ0IFJaCisKKwlmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmZGl2LngJCUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBkaXZpZGUKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZmFicy54CQklZnAxCQkJIyBtYWtlIGFic29sdXRlIHZhbHVlCisJZmNtcC5iCQklZnAxLCYweDEJCSMgaXMgfHJlc3VsdHwgPCAxLmI/CisJZmJnZS53CQlmZGl2X25vcm1hbF9leGl0CSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCWJyYS53CQlmZGl2X3VuZmwJCSMgeWVzOyB1bmRlcmZsb3cgb2NjdXJyZWQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIERpdmlkZTogaW5wdXRzIGFyZSBub3QgYm90aCBub3JtYWxpemVkOyB3aGF0IGFyZSB0aGV5PworIworZmRpdl9ub3Rfbm9ybToKKwltb3YudwkJKHRibF9mZGl2X29wLmIsJXBjLCVkMS53KjIpLCVkMQorCWptcAkJKHRibF9mZGl2X29wLmIsJXBjLCVkMS53KjEpCisKKwlzd2JlZwkJJjQ4Cit0YmxfZmRpdl9vcDoKKwlzaG9ydAkJZmRpdl9ub3JtCS0gdGJsX2ZkaXZfb3AgIyBOT1JNIC8gTk9STQorCXNob3J0CQlmZGl2X2luZl9sb2FkCS0gdGJsX2ZkaXZfb3AgIyBOT1JNIC8gWkVSTworCXNob3J0CQlmZGl2X3plcm9fbG9hZAktIHRibF9mZGl2X29wICMgTk9STSAvIElORgorCXNob3J0CQlmZGl2X3Jlc19xbmFuCS0gdGJsX2ZkaXZfb3AgIyBOT1JNIC8gUU5BTgorCXNob3J0CQlmZGl2X25vcm0JLSB0YmxfZmRpdl9vcCAjIE5PUk0gLyBERU5PUk0KKwlzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgTk9STSAvIFNOQU4KKwlzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCisJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIworCisJc2hvcnQJCWZkaXZfemVyb19sb2FkCS0gdGJsX2ZkaXZfb3AgIyBaRVJPIC8gTk9STQorCXNob3J0CQlmZGl2X3Jlc19vcGVycgktIHRibF9mZGl2X29wICMgWkVSTyAvIFpFUk8KKwlzaG9ydAkJZmRpdl96ZXJvX2xvYWQJLSB0YmxfZmRpdl9vcCAjIFpFUk8gLyBJTkYKKwlzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgWkVSTyAvIFFOQU4KKwlzaG9ydAkJZmRpdl96ZXJvX2xvYWQJLSB0YmxfZmRpdl9vcCAjIFpFUk8gLyBERU5PUk0KKwlzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgWkVSTyAvIFNOQU4KKwlzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCisJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIworCisJc2hvcnQJCWZkaXZfaW5mX2RzdAktIHRibF9mZGl2X29wICMgSU5GIC8gTk9STQorCXNob3J0CQlmZGl2X2luZl9kc3QJLSB0YmxfZmRpdl9vcCAjIElORiAvIFpFUk8KKwlzaG9ydAkJZmRpdl9yZXNfb3BlcnIJLSB0YmxfZmRpdl9vcCAjIElORiAvIElORgorCXNob3J0CQlmZGl2X3Jlc19xbmFuCS0gdGJsX2ZkaXZfb3AgIyBJTkYgLyBRTkFOCisJc2hvcnQJCWZkaXZfaW5mX2RzdAktIHRibF9mZGl2X29wICMgSU5GIC8gREVOT1JNCisJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIElORiAvIFNOQU4KKwlzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCisJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIworCisJc2hvcnQJCWZkaXZfcmVzX3FuYW4JLSB0YmxfZmRpdl9vcCAjIFFOQU4gLyBOT1JNCisJc2hvcnQJCWZkaXZfcmVzX3FuYW4JLSB0YmxfZmRpdl9vcCAjIFFOQU4gLyBaRVJPCisJc2hvcnQJCWZkaXZfcmVzX3FuYW4JLSB0YmxfZmRpdl9vcCAjIFFOQU4gLyBJTkYKKwlzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgUU5BTiAvIFFOQU4KKwlzaG9ydAkJZmRpdl9yZXNfcW5hbgktIHRibF9mZGl2X29wICMgUU5BTiAvIERFTk9STQorCXNob3J0CQlmZGl2X3Jlc19zbmFuCS0gdGJsX2ZkaXZfb3AgIyBRTkFOIC8gU05BTgorCXNob3J0CQl0YmxfZmRpdl9vcAktIHRibF9mZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCisKKwlzaG9ydAkJZmRpdl9ub3JtCS0gdGJsX2ZkaXZfb3AgIyBERU5PUk0gLyBOT1JNCisJc2hvcnQJCWZkaXZfaW5mX2xvYWQJLSB0YmxfZmRpdl9vcCAjIERFTk9STSAvIFpFUk8KKwlzaG9ydAkJZmRpdl96ZXJvX2xvYWQJLSB0YmxfZmRpdl9vcCAjIERFTk9STSAvIElORgorCXNob3J0CQlmZGl2X3Jlc19xbmFuCS0gdGJsX2ZkaXZfb3AgIyBERU5PUk0gLyBRTkFOCisJc2hvcnQJCWZkaXZfbm9ybQktIHRibF9mZGl2X29wICMgREVOT1JNIC8gREVOT1JNCisJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIERFTk9STSAvIFNOQU4KKwlzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCisJc2hvcnQJCXRibF9mZGl2X29wCS0gdGJsX2ZkaXZfb3AgIworCisJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIFNOQU4gLyBOT1JNCisJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIFNOQU4gLyBaRVJPCisJc2hvcnQJCWZkaXZfcmVzX3NuYW4JLSB0YmxfZmRpdl9vcCAjIFNOQU4gLyBJTkYKKwlzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgU05BTiAvIFFOQU4KKwlzaG9ydAkJZmRpdl9yZXNfc25hbgktIHRibF9mZGl2X29wICMgU05BTiAvIERFTk9STQorCXNob3J0CQlmZGl2X3Jlc19zbmFuCS0gdGJsX2ZkaXZfb3AgIyBTTkFOIC8gU05BTgorCXNob3J0CQl0YmxfZmRpdl9vcAktIHRibF9mZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZkaXZfb3AJLSB0YmxfZmRpdl9vcCAjCisKK2ZkaXZfcmVzX3FuYW46CisJYnJhLmwJCXJlc19xbmFuCitmZGl2X3Jlc19zbmFuOgorCWJyYS5sCQlyZXNfc25hbgorZmRpdl9yZXNfb3BlcnI6CisJYnJhLmwJCXJlc19vcGVycgorCisJZ2xvYmFsCQlmZGl2X3plcm9fbG9hZAkJIyBnbG9iYWwgZm9yIGZzZ2xkaXYKK2ZkaXZfemVyb19sb2FkOgorCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDAJCSMgcmVzdWx0IHNpZ24gaXMgZXhjbHVzaXZlCisJbW92LmIJCURTVF9FWCglYTEpLCVkMQkJIyBvciBvZiBpbnB1dCBzaWducy4KKwllb3IuYgkJJWQwLCVkMQorCWJwbC5iCQlmZGl2X3plcm9fbG9hZF9wCSMgcmVzdWx0IGlzIHBvc2l0aXZlCisJZm1vdi5zCQkmMHg4MDAwMDAwMCwlZnAwCSMgbG9hZCBhIC1aRVJPCisJbW92LmIJCSZ6X2JtYXNrK25lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgWi9OCisJcnRzCitmZGl2X3plcm9fbG9hZF9wOgorCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIGxvYWQgYSArWkVSTworCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgWgorCXJ0cworCisjCisjIFRoZSBkZXN0aW5hdGlvbiB3YXMgSW4gUmFuZ2UgYW5kIHRoZSBzb3VyY2Ugd2FzIGEgWkVSTy4gVGhlIHJlc3VsdCwKKyMgdGhlcmVmb3JlLCBpcyBhbiBJTkYgdy8gdGhlIHByb3BlciBzaWduLgorIyBTbywgZGV0ZXJtaW5lIHRoZSBzaWduIGFuZCByZXR1cm4gYSBuZXcgSU5GICh3LyB0aGUgai1iaXQgY2xlYXJlZCkuCisjCisJZ2xvYmFsCQlmZGl2X2luZl9sb2FkCQkjIGdsb2JhbCBmb3IgZnNnbGRpdgorZmRpdl9pbmZfbG9hZDoKKwlvcmkudwkJJmR6X21hc2srYWR6X21hc2ssMitVU0VSX0ZQU1IoJWE2KSAjIG5vOyBzZXQgRFovQURaCisJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBsb2FkIGJvdGggc2lnbnMKKwltb3YuYgkJRFNUX0VYKCVhMSksJWQxCisJZW9yLmIJCSVkMCwlZDEKKwlicGwuYgkJZmRpdl9pbmZfbG9hZF9wCQkjIHJlc3VsdCBpcyBwb3NpdGl2ZQorCWZtb3YucwkJJjB4ZmY4MDAwMDAsJWZwMAkjIG1ha2UgcmVzdWx0IC1JTkYKKwltb3YuYgkJJmluZl9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IElORi9OCisJcnRzCitmZGl2X2luZl9sb2FkX3A6CisJZm1vdi5zCQkmMHg3ZjgwMDAwMCwlZnAwCSMgbWFrZSByZXN1bHQgK0lORgorCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYKKwlydHMKKworIworIyBUaGUgZGVzdGluYXRpb24gd2FzIGFuIElORiB3LyBhbiBJbiBSYW5nZSBvciBaRVJPIHNvdXJjZSwgdGhlIHJlc3VsdCBpcworIyBhbiBJTkYgdy8gdGhlIHByb3BlciBzaWduLgorIyBUaGUgNjg4ODEvODgyIHJldHVybnMgdGhlIGRlc3RpbmF0aW9uIElORiB3LyB0aGUgbmV3IHNpZ24oaWYgdGhlIGotYml0IG9mIHRoZQorIyBkc3QgSU5GIGlzIHNldCwgdGhlbiB0aGVuIGotYml0IG9mIHRoZSByZXN1bHQgSU5GIGlzIGFsc28gc2V0KS4KKyMKKwlnbG9iYWwJCWZkaXZfaW5mX2RzdAkJIyBnbG9iYWwgZm9yIGZzZ2xkaXYKK2ZkaXZfaW5mX2RzdDoKKwltb3YuYgkJRFNUX0VYKCVhMSksJWQwCQkjIGxvYWQgYm90aCBzaWducworCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDEKKwllb3IuYgkJJWQwLCVkMQorCWJwbC5iCQlmZGl2X2luZl9kc3RfcAkJIyByZXN1bHQgaXMgcG9zaXRpdmUKKworCWZtb3ZtLngJCURTVCglYTEpLCYweDgwCQkjIHJldHVybiByZXN1bHQgaW4gZnAwCisJZmFicy54CQklZnAwCQkJIyBjbGVhciBzaWduIGJpdAorCWZuZWcueAkJJWZwMAkJCSMgc2V0IHNpZ24gYml0CisJbW92LmIJCSZpbmZfYm1hc2srbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCBJTkYvTkVHCisJcnRzCisKK2ZkaXZfaW5mX2RzdF9wOgorCWZtb3ZtLngJCURTVCglYTEpLCYweDgwCQkjIHJldHVybiByZXN1bHQgaW4gZnAwCisJZmFicy54CQklZnAwCQkJIyByZXR1cm4gcG9zaXRpdmUgSU5GCisJbW92LmIJCSZpbmZfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IElORgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZuZWcoKTogZW11bGF0ZXMgdGhlIGZuZWcgaW5zdHJ1Y3Rpb24JCQkJIworIwlmc25lZygpOiBlbXVsYXRlcyB0aGUgZnNuZWcgaW5zdHJ1Y3Rpb24JCQkJIworIwlmZG5lZygpOiBlbXVsYXRlcyB0aGUgZmRuZWcgaW5zdHJ1Y3Rpb24JCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJbm9ybSgpIC0gbm9ybWFsaXplIGEgZGVub3JtIHRvIHByb3ZpZGUgRVhPUAkJCSMKKyMJc2NhbGVfdG9femVyb19zcmMoKSAtIHNjYWxlIHNnbC9kYmwgc291cmNlIGV4cG9uZW50CQkjCisjCW92Zl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdAkJCSMKKyMJdW5mX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdAkJCSMKKyMJcmVzX3FuYW5fMW9wKCkgLSByZXR1cm4gUU5BTiByZXN1bHQJCQkJIworIwlyZXNfc25hbl8xb3AoKSAtIHJldHVybiBTTkFOIHJlc3VsdAkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCisjCWQwID0gcm5kIHByZWMsbW9kZQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IHJlc3VsdAkJCQkJCQkjCisjCWZwMSA9IEVYT1AgKGlmIGV4Y2VwdGlvbiBvY2N1cnJlZCkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSGFuZGxlIE5BTnMsIHplcm9lcywgYW5kIGluZmluaXRpZXMgYXMgc3BlY2lhbCBjYXNlcy4gU2VwYXJhdGUJIworIyBub3Jtcy9kZW5vcm1zIGludG8gZXh0L3NnbC9kYmwgcHJlY2lzaW9ucy4gRXh0ZW5kZWQgcHJlY2lzaW9uIGNhbiBiZQkjCisjIGVtdWxhdGVkIGJ5IHNpbXBseSBzZXR0aW5nIHNpZ24gYml0LiBTZ2wvZGJsIG9wZXJhbmRzIG11c3QgYmUgc2NhbGVkCSMKKyMgYW5kIGFuIGFjdHVhbCBmbmVnIHBlcmZvcm1lZCB0byBzZWUgaWYgb3ZlcmZsb3cvdW5kZXJmbG93IHdvdWxkIGhhdmUJIworIyBvY2N1cnJlZC4gSWYgc28sIHJldHVybiBkZWZhdWx0IHVuZGVyZmxvdy9vdmVyZmxvdyByZXN1bHQuIEVsc2UsCSMKKyMgc2NhbGUgdGhlIHJlc3VsdCBleHBvbmVudCBhbmQgcmV0dXJuIHJlc3VsdC4gRlBTUiBnZXRzIHNldCBiYXNlZCBvbgkjCisjIHRoZSByZXN1bHQgdmFsdWUuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZzbmVnCitmc25lZzoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmc19tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IHNnbCBwcmVjaXNpb24KKwlicmEuYgkJZm5lZworCisJZ2xvYmFsCQlmZG5lZworZmRuZWc6CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKKwlvcmkuYgkJJmRfbW9kZSoweDEwLCVkMAkjIGluc2VydCBkYmwgcHJlYworCisJZ2xvYmFsCQlmbmVnCitmbmVnOgorCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJuZS53CQlmbmVnX25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CisKKyMKKyMgTkVHQVRFIFNJR04gOiBub3JtcyBhbmQgZGVub3JtcyBPTkxZIQorIworZm5lZ19ub3JtOgorCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUudwkJZm5lZ19ub3RfZXh0CQkjIG5vOyBnbyBoYW5kbGUgc2dsIG9yIGRibAorCisjCisjIHByZWNpc2lvbiBzZWxlY3RlZCBpcyBleHRlbmRlZC4gc28uLi53ZSBjYW4gbm90IGdldCBhbiB1bmRlcmZsb3cKKyMgb3Igb3ZlcmZsb3cgYmVjYXVzZSBvZiByb3VuZGluZyB0byB0aGUgY29ycmVjdCBwcmVjaXNpb24uIHNvLi4uCisjIHNraXAgdGhlIHNjYWxpbmcgYW5kIHVuc2NhbGluZy4uLgorIworCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJbW92LncJCVNSQ19FWCglYTApLCVkMAorCWVvcmkudwkJJjB4ODAwMCwlZDAJCSMgbmVnYXRlIHNpZ24KKwlicGwuYgkJZm5lZ19ub3JtX2xvYWQJCSMgc2lnbiBpcyBwb3NpdGl2ZQorCW1vdi5iCQkmbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnTicgY2NvZGUgYml0CitmbmVnX25vcm1fbG9hZDoKKwltb3YudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgZm9yIGFuIGV4dGVuZGVkIHByZWNpc2lvbiBERU5PUk0sIHRoZSBVTkZMIGV4Y2VwdGlvbiBiaXQgaXMgc2V0CisjIHRoZSBhY2NydWVkIGJpdCBpcyBOT1Qgc2V0IGluIHRoaXMgaW5zdGFuY2Uobm8gaW5leGFjdG5lc3MhKQorIworZm5lZ19kZW5vcm06CisJYW5kaS5iCQkmMHhjMCwlZDAJCSMgaXMgcHJlY2lzaW9uIGV4dGVuZGVkPworCWJuZS5iCQlmbmVnX25vdF9leHQJCSMgbm87IGdvIGhhbmRsZSBzZ2wgb3IgZGJsCisKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKworCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJbW92LncJCVNSQ19FWCglYTApLCVkMAorCWVvcmkudwkJJjB4ODAwMCwlZDAJCSMgbmVnYXRlIHNpZ24KKwlicGwuYgkJZm5lZ19kZW5vcm1fZG9uZQkjIG5vCisJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgeWVzLCBzZXQgJ04nIGNjb2RlIGJpdAorZm5lZ19kZW5vcm1fZG9uZToKKwltb3YudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKworCWJ0c3QJCSZ1bmZsX2JpdCxGUENSX0VOQUJMRSglYTYpICMgaXMgVU5GTCBlbmFibGVkPworCWJuZS5iCQlmbmVnX2V4dF91bmZsX2VuYQkjIHllcworCXJ0cworCisjCisjIHRoZSBpbnB1dCBpcyBhbiBleHRlbmRlZCBERU5PUk0gYW5kIHVuZGVyZmxvdyBpcyBlbmFibGVkIGluIHRoZSBGUENSLgorIyBub3JtYWxpemUgdGhlIG1hbnRpc3NhIGFuZCBhZGQgdGhlIGJpYXMgb2YgMHg2MDAwIHRvIHRoZSByZXN1bHRpbmcgbmVnYXRpdmUKKyMgZXhwb25lbnQgYW5kIGluc2VydCBiYWNrIGludG8gdGhlIG9wZXJhbmQuCisjCitmbmVnX2V4dF91bmZsX2VuYToKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gb3BlcmFuZAorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgcmVzdWx0CisJbmVnLncJCSVkMAkJCSMgbmV3IGV4cG9uZW50ID0gLShzaGZ0IHZhbCkKKwlhZGRpLncJCSYweDYwMDAsJWQwCQkjIGFkZCBuZXcgYmlhcyB0byBleHBvbmVudAorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2ggb2xkIHNpZ24sZXhwCisJYW5kaS53CQkmMHg4MDAwLCVkMQkJIyBrZWVwIG9sZCBzaWduCisJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBjbGVhciBzaWduIHBvc2l0aW9uCisJb3IudwkJJWQxLCVkMAkJCSMgY29uY2F0IG9sZCBzaWduLCBuZXcgZXhwb25lbnQKKwltb3YudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlydHMKKworIworIyBvcGVyYW5kIGlzIGVpdGhlciBzaW5nbGUgb3IgZG91YmxlCisjCitmbmVnX25vdF9leHQ6CisJY21waS5iCQklZDAsJnNfbW9kZSoweDEwCSMgc2VwYXJhdGUgc2dsL2RibCBwcmVjCisJYm5lLmIJCWZuZWdfZGJsCisKKyMKKyMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIHNpbmdsZSBwcmVjaXNpb24KKyMKK2ZuZWdfc2dsOgorCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIGNhbGN1bGF0ZSBzY2FsZSBmYWN0b3IKKworCWNtcGkubAkJJWQwLCYweDNmZmYtMHgzZjgwCSMgd2lsbCBtb3ZlIGluIHVuZGVyZmxvdz8KKwliZ2UudwkJZm5lZ19zZF91bmZsCQkjIHllczsgZ28gaGFuZGxlIHVuZGVyZmxvdworCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0MDdlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PworCWJlcS53CQlmbmVnX3NkX21heV9vdmZsCSMgbWF5YmU7IGdvIGNoZWNrCisJYmx0LncJCWZuZWdfc2Rfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdworCisjCisjIG9wZXJhbmQgd2lsbCBOT1Qgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IHdoZW4gbW92ZWQgaW4gdG8gdGhlIGZwIHJlZyBmaWxlCisjCitmbmVnX3NkX25vcm1hbDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZm5lZy54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gbmVnYXRpb24KKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgorCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworZm5lZ19zZF9ub3JtYWxfZXhpdDoKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCBzZ24sZXhwCisJbW92LncJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlvci53CQklZDEsJWQyCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDIsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIG9wZXJhbmQgaXMgdG8gYmUgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uCisjCitmbmVnX2RibDoKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwlic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCisKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4M2MwMAkjIHdpbGwgbW92ZSBpbiB1bmRlcmZsb3c/CisJYmdlLmIJCWZuZWdfc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4NDNmZQkjIHdpbGwgbW92ZSBpbiBvdmVyZmxvdz8KKwliZXEudwkJZm5lZ19zZF9tYXlfb3ZmbAkjIG1heWJlOyBnbyBjaGVjaworCWJsdC53CQlmbmVnX3NkX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKKwlicmEudwkJZm5lZ19zZF9ub3JtYWwJCSMgbm87IGhvIGhhbmRsZSBub3JtYWxpemVkIG9wCisKKyMKKyMgb3BlcmFuZCBXSUxMIHVuZGVyZmxvdyB3aGVuIG1vdmVkIGluIHRvIHRoZSBmcCByZWdpc3RlciBmaWxlCisjCitmbmVnX3NkX3VuZmw6CisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CisKKwllb3JpLmIJCSYweDgwLEZQX1NDUjBfRVgoJWE2KQkjIG5lZ2F0ZSBzaWduCisJYnBsLmIJCWZuZWdfc2RfdW5mbF90c3QKKwlic2V0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBzZXQgJ04nIGNjb2RlIGJpdAorCisjIGlmIHVuZGVyZmxvdyBvciBpbmV4YWN0IGlzIGVuYWJsZWQsIGdvIGNhbGN1bGF0ZSBFWE9QIGZpcnN0LgorZm5lZ19zZF91bmZsX3RzdDoKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZm5lZ19zZF91bmZsX2VuYQkjIHllcworCitmbmVnX3NkX3VuZmxfZGlzOgorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyB1bmZfcmVzIG1heSBoYXZlIHNldCAnWicKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgb3BlcmFuZCB3aWxsIHVuZGVyZmxvdyBBTkQgdW5kZXJmbG93IGlzIGVuYWJsZWQuCisjIHRoZXJlZm9yZSwgd2UgbXVzdCByZXR1cm4gdGhlIHJlc3VsdCByb3VuZGVkIHRvIGV4dGVuZGVkIHByZWNpc2lvbi4KKyMKK2ZuZWdfc2RfdW5mbF9lbmE6CisJbW92LmwJCUZQX1NDUjBfSEkoJWE2KSxGUF9TQ1IxX0hJKCVhNikKKwltb3YubAkJRlBfU0NSMF9MTyglYTYpLEZQX1NDUjFfTE8oJWE2KQorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCBjdXJyZW50IGV4cG9uZW50CisKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIHN1YnRyYWN0IHNjYWxlIGZhY3RvcgorCWFkZGkubAkJJjB4NjAwMCwlZDEJCSMgYWRkIG5ldyBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBuZXcgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSxGUF9TQ1IxX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cAorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlicmEuYgkJZm5lZ19zZF91bmZsX2RpcworCisjCisjIG9wZXJhbmQgV0lMTCBvdmVyZmxvdy4KKyMKK2ZuZWdfc2Rfb3ZmbDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZm5lZy54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gbmVnYXRpb24KKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBGUFNSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworZm5lZ19zZF9vdmZsX3RzdDoKKwlvci5sCQkmb3ZmbF9pbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4CisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDEzLCVkMQkJIyBpcyBPVkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZm5lZ19zZF9vdmZsX2VuYQkjIHllcworCisjCisjIE9WRkwgaXMgbm90IGVuYWJsZWQ7IHRoZXJlZm9yZSwgd2UgbXVzdCBjcmVhdGUgdGhlIGRlZmF1bHQgcmVzdWx0IGJ5CisjIGNhbGxpbmcgb3ZmX3JlcygpLgorIworZm5lZ19zZF9vdmZsX2RpczoKKwlidHN0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBpcyByZXN1bHQgbmVnYXRpdmU/CisJc25lCQklZDEJCQkjIHNldCBzaWduIHBhcmFtIGFjY29yZGluZ2x5CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzOiBwcmVjLG1vZGUKKwlic3IubAkJb3ZmX3JlcwkJCSMgY2FsY3VsYXRlIGRlZmF1bHQgcmVzdWx0CisJb3IuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYsTiBpZiBhcHBsaWNhYmxlCisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIE9WRkwgaXMgZW5hYmxlZC4KKyMgdGhlIElORVgyIGJpdCBoYXMgYWxyZWFkeSBiZWVuIHVwZGF0ZWQgYnkgdGhlIHJvdW5kIHRvIHRoZSBjb3JyZWN0IHByZWNpc2lvbi4KKyMgbm93LCByb3VuZCB0byBleHRlbmRlZChhbmQgZG9uJ3QgYWx0ZXIgdGhlIEZQU1IpLgorIworZm5lZ19zZF9vdmZsX2VuYToKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCXN1YmkubAkJJjB4NjAwMCwlZDEJCSMgc3VidHJhY3QgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgc2lnbixleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJYnJhLmIJCWZuZWdfc2Rfb3ZmbF9kaXMKKworIworIyB0aGUgbW92ZSBpbiBNQVkgdW5kZXJmbG93LiBzby4uLgorIworZm5lZ19zZF9tYXlfb3ZmbDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZm5lZy54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gbmVnYXRpb24KKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCisJZmFicy54CQklZnAwLCVmcDEJCSMgbWFrZSBhIGNvcHkgb2YgcmVzdWx0CisJZmNtcC5iCQklZnAxLCYweDIJCSMgaXMgfHJlc3VsdHwgPj0gMi5iPworCWZiZ2UudwkJZm5lZ19zZF9vdmZsX3RzdAkjIHllczsgb3ZlcmZsb3cgaGFzIG9jY3VycmVkCisKKyMgbm8sIGl0IGRpZG4ndCBvdmVyZmxvdzsgd2UgaGF2ZSBjb3JyZWN0IHJlc3VsdAorCWJyYS53CQlmbmVnX3NkX25vcm1hbF9leGl0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgaW5wdXQgaXMgbm90IG5vcm1hbGl6ZWQ7IHdoYXQgaXMgaXQ/CisjCitmbmVnX25vdF9ub3JtOgorCWNtcGkuYgkJJWQxLCZERU5PUk0JCSMgd2VlZCBvdXQgREVOT1JNCisJYmVxLncJCWZuZWdfZGVub3JtCisJY21waS5iCQklZDEsJlNOQU4JCSMgd2VlZCBvdXQgU05BTgorCWJlcS5sCQlyZXNfc25hbl8xb3AKKwljbXBpLmIJCSVkMSwmUU5BTgkJIyB3ZWVkIG91dCBRTkFOCisJYmVxLmwJCXJlc19xbmFuXzFvcAorCisjCisjIGRvIHRoZSBmbmVnOyBhdCB0aGlzIHBvaW50LCBvbmx5IHBvc3NpYmxlIG9wcyBhcmUgWkVSTyBhbmQgSU5GLgorIyB1c2UgZm5lZyB0byBkZXRlcm1pbmUgY2NvZGVzLgorIyBwcmVjOm1vZGUgc2hvdWxkIGJlIHplcm8gYXQgdGhpcyBwb2ludCBidXQgaXQgd29uJ3QgYWZmZWN0IGFuc3dlciBhbnl3YXlzLgorIworCWZuZWcueAkJU1JDX0VYKCVhMCksJWZwMAkjIGRvIGZuZWcKKwlmbW92LmwJCSVmcHNyLCVkMAorCXJvbC5sCQkmMHg4LCVkMAkJIyBwdXQgY2NvZGVzIGluIGxvIGJ5dGUKKwltb3YuYgkJJWQwLEZQU1JfQ0MoJWE2KQkjIGluc2VydCBjb3JyZWN0IGNjb2RlcworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZ0c3QoKTogZW11bGF0ZXMgdGhlIGZ0ZXN0IGluc3RydWN0aW9uCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXJlc3tzLHF9bmFuXzFvcCgpIC0gc2V0IE5BTiByZXN1bHQgZm9yIG1vbmFkaWMgaW5zdHJ1Y3Rpb24JIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJbm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJQ2hlY2sgdGhlIHNvdXJjZSBvcGVyYW5kIHRhZyAoU1RBRykgYW5kIHNldCB0aGUgRlBDUiBhY2NvcmRpbmcJIworIyB0byB0aGUgb3BlcmFuZCB0eXBlIGFuZCBzaWduLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZ0c3QKK2Z0c3Q6CisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwlibmUuYgkJZnRzdF9ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAorCisjCisjIE5vcm06CisjCitmdHN0X25vcm06CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CisJYm1pLmIJCWZ0c3Rfbm9ybV9tCQkjIHllcworCXJ0cworZnRzdF9ub3JtX206CisJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKKwlydHMKKworIworIyBpbnB1dCBpcyBub3Qgbm9ybWFsaXplZDsgd2hhdCBpcyBpdD8KKyMKK2Z0c3Rfbm90X25vcm06CisJY21waS5iCQklZDEsJlpFUk8JCSMgd2VlZCBvdXQgWkVSTworCWJlcS5iCQlmdHN0X3plcm8KKwljbXBpLmIJCSVkMSwmSU5GCQkjIHdlZWQgb3V0IElORgorCWJlcS5iCQlmdHN0X2luZgorCWNtcGkuYgkJJWQxLCZTTkFOCQkjIHdlZWQgb3V0IFNOQU4KKwliZXEubAkJcmVzX3NuYW5fMW9wCisJY21waS5iCQklZDEsJlFOQU4JCSMgd2VlZCBvdXQgUU5BTgorCWJlcS5sCQlyZXNfcW5hbl8xb3AKKworIworIyBEZW5vcm06CisjCitmdHN0X2Rlbm9ybToKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgb3BlcmFuZCBuZWdhdGl2ZT8KKwlibWkuYgkJZnRzdF9kZW5vcm1fbQkJIyB5ZXMKKwlydHMKK2Z0c3RfZGVub3JtX206CisJbW92LmIJCSZuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdOJyBjY29kZSBiaXQKKwlydHMKKworIworIyBJbmZpbml0eToKKyMKK2Z0c3RfaW5mOgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBvcGVyYW5kIG5lZ2F0aXZlPworCWJtaS5iCQlmdHN0X2luZl9tCQkjIHllcworZnRzdF9pbmZfcDoKKwltb3YuYgkJJmluZl9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ0knIGNjb2RlIGJpdAorCXJ0cworZnRzdF9pbmZfbToKKwltb3YuYgkJJmluZl9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0ICdJJywnTicgY2NvZGUgYml0cworCXJ0cworCisjCisjIFplcm86CisjCitmdHN0X3plcm86CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CisJYm1pLmIJCWZ0c3RfemVyb19tCQkjIHllcworZnRzdF96ZXJvX3A6CisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnTicgY2NvZGUgYml0CisJcnRzCitmdHN0X3plcm9fbToKKwltb3YuYgkJJnpfYm1hc2srbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicsJ04nIGNjb2RlIGJpdHMKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmaW50KCk6IGVtdWxhdGVzIHRoZSBmaW50IGluc3RydWN0aW9uCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXJlc197cyxxfW5hbl8xb3AoKSAtIHNldCBOQU4gcmVzdWx0IGZvciBtb25hZGljIG9wZXJhdGlvbgkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCisjCWQwID0gcm91bmQgcHJlY2lzaW9uL21vZGUJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IHJlc3VsdAkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlTZXBhcmF0ZSBhY2NvcmRpbmcgdG8gb3BlcmFuZCB0eXBlLiBVbm5vcm1zIGRvbid0IHBhc3MgdGhyb3VnaAkjCisjIGhlcmUuIEZvciBub3JtcywgbG9hZCB0aGUgcm91bmRpbmcgbW9kZS9wcmVjLCBleGVjdXRlIGEgImZpbnQiLCB0aGVuCSMKKyMgc3RvcmUgdGhlIHJlc3VsdGluZyBGUFNSIGJpdHMuCQkJCQkjCisjCUZvciBkZW5vcm1zLCBmb3JjZSB0aGUgai1iaXQgdG8gYSBvbmUgYW5kIGRvIHRoZSBzYW1lIGFzIGZvcgkjCisjIG5vcm1zLiBEZW5vcm1zIGFyZSBzbyBsb3cgdGhhdCB0aGUgYW5zd2VyIHdpbGwgZWl0aGVyIGJlIGEgemVybyBvciBhCSMKKyMgb25lLgkJCQkJCQkJCSMKKyMJRm9yIHplcm9lcy9pbmZzL05BTnMsIHJldHVybiB0aGUgc2FtZSB3aGlsZSBzZXR0aW5nIHRoZSBGUFNSCSMKKyMgYXMgYXBwcm9wcmlhdGUuCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZpbnQKK2ZpbnQ6CisJbW92LmIJCVNUQUcoJWE2KSwlZDEKKwlibmUuYgkJZmludF9ub3Rfbm9ybQkJIyBvcHRpbWl6ZSBvbiBub24tbm9ybSBpbnB1dAorCisjCisjIE5vcm06CisjCitmaW50X25vcm06CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgc2V0IHByZWMgPSBleHQKKworCWZtb3YubAkJJWQwLCVmcGNyCQkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZpbnQueAkJU1JDKCVhMCksJWZwMAkJIyBleGVjdXRlIGZpbnQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZm1vdi5sCQklZnBzciwlZDAJCSMgc2F2ZSBGUFNSCisJb3IubAkJJWQwLFVTRVJfRlBTUiglYTYpCSMgc2V0IGV4Y2VwdGlvbiBiaXRzCisKKwlydHMKKworIworIyBpbnB1dCBpcyBub3Qgbm9ybWFsaXplZDsgd2hhdCBpcyBpdD8KKyMKK2ZpbnRfbm90X25vcm06CisJY21waS5iCQklZDEsJlpFUk8JCSMgd2VlZCBvdXQgWkVSTworCWJlcS5iCQlmaW50X3plcm8KKwljbXBpLmIJCSVkMSwmSU5GCQkjIHdlZWQgb3V0IElORgorCWJlcS5iCQlmaW50X2luZgorCWNtcGkuYgkJJWQxLCZERU5PUk0JCSMgd2VlZCBvdXQgREVOT1JNCisJYmVxLmIJCWZpbnRfZGVub3JtCisJY21waS5iCQklZDEsJlNOQU4JCSMgd2VlZCBvdXQgU05BTgorCWJlcS5sCQlyZXNfc25hbl8xb3AKKwlicmEubAkJcmVzX3FuYW5fMW9wCQkjIHdlZWQgb3V0IFFOQU4KKworIworIyBEZW5vcm06CisjCisjIGZvciBERU5PUk1zLCB0aGUgcmVzdWx0IHdpbGwgYmUgZWl0aGVyICgrLy0pWkVSTyBvciAoKy8tKTEuCisjIGFsc28sIHRoZSBJTkVYMiBhbmQgQUlORVggZXhjZXB0aW9uIGJpdHMgd2lsbCBiZSBzZXQuCisjIHNvLCB3ZSBjb3VsZCBlaXRoZXIgc2V0IHRoZXNlIG1hbnVhbGx5IG9yIGZvcmNlIHRoZSBERU5PUk0KKyMgdG8gYSB2ZXJ5IHNtYWxsIE5PUk0gYW5kIHNoaXAgaXQgdG8gdGhlIE5PUk0gcm91dGluZS4KKyMgSSBkbyB0aGUgbGF0dGVyLgorIworZmludF9kZW5vcm06CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KSAjIGNvcHkgc2lnbiwgemVybyBleHAKKwltb3YuYgkJJjB4ODAsRlBfU0NSMF9ISSglYTYpCSMgZm9yY2UgREVOT1JNID09PiBzbWFsbCBOT1JNCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCisJYnJhLmIJCWZpbnRfbm9ybQorCisjCisjIFplcm86CisjCitmaW50X3plcm86CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIFpFUk8gbmVnYXRpdmU/CisJYm1pLmIJCWZpbnRfemVyb19tCQkjIHllcworZmludF96ZXJvX3A6CisJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgcmV0dXJuICtaRVJPIGluIGZwMAorCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ1onIGNjb2RlIGJpdAorCXJ0cworZmludF96ZXJvX206CisJZm1vdi5zCQkmMHg4MDAwMDAwMCwlZnAwCSMgcmV0dXJuIC1aRVJPIGluIGZwMAorCW1vdi5iCQkmel9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0ICdaJywnTicgY2NvZGUgYml0cworCXJ0cworCisjCisjIEluZmluaXR5OgorIworZmludF9pbmY6CisJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgSU5GIG5lZ2F0aXZlPworCWJtaS5iCQlmaW50X2luZl9tCQkjIHllcworZmludF9pbmZfcDoKKwltb3YuYgkJJmluZl9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ0knIGNjb2RlIGJpdAorCXJ0cworZmludF9pbmZfbToKKwltb3YuYgkJJmluZl9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0ICdOJywnSScgY2NvZGUgYml0cworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZpbnRyeigpOiBlbXVsYXRlcyB0aGUgZmludHJ6IGluc3RydWN0aW9uCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJcmVzX3tzLHF9bmFuXzFvcCgpIC0gc2V0IE5BTiByZXN1bHQgZm9yIG1vbmFkaWMgb3BlcmF0aW9uCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKKyMJZDAgPSByb3VuZCBwcmVjaXNpb24vbW9kZQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gcmVzdWx0CQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVNlcGFyYXRlIGFjY29yZGluZyB0byBvcGVyYW5kIHR5cGUuIFVubm9ybXMgZG9uJ3QgcGFzcyB0aHJvdWdoCSMKKyMgaGVyZS4gRm9yIG5vcm1zLCBsb2FkIHRoZSByb3VuZGluZyBtb2RlL3ByZWMsIGV4ZWN1dGUgYSAiZmludHJ6IiwJIworIyB0aGVuIHN0b3JlIHRoZSByZXN1bHRpbmcgRlBTUiBiaXRzLgkJCQkJIworIwlGb3IgZGVub3JtcywgZm9yY2UgdGhlIGotYml0IHRvIGEgb25lIGFuZCBkbyB0aGUgc2FtZSBhcyBmb3IJIworIyBub3Jtcy4gRGVub3JtcyBhcmUgc28gbG93IHRoYXQgdGhlIGFuc3dlciB3aWxsIGVpdGhlciBiZSBhIHplcm8gb3IgYQkjCisjIG9uZS4JCQkJCQkJCQkjCisjCUZvciB6ZXJvZXMvaW5mcy9OQU5zLCByZXR1cm4gdGhlIHNhbWUgd2hpbGUgc2V0dGluZyB0aGUgRlBTUgkjCisjIGFzIGFwcHJvcHJpYXRlLgkJCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlmaW50cnoKK2ZpbnRyejoKKwltb3YuYgkJU1RBRyglYTYpLCVkMQorCWJuZS5iCQlmaW50cnpfbm90X25vcm0JCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworIworIyBOb3JtOgorIworZmludHJ6X25vcm06CisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZpbnRyei54CVNSQyglYTApLCVmcDAJCSMgZXhlY3V0ZSBmaW50cnoKKworCWZtb3YubAkJJWZwc3IsJWQwCQkjIHNhdmUgRlBTUgorCW9yLmwJCSVkMCxVU0VSX0ZQU1IoJWE2KQkjIHNldCBleGNlcHRpb24gYml0cworCisJcnRzCisKKyMKKyMgaW5wdXQgaXMgbm90IG5vcm1hbGl6ZWQ7IHdoYXQgaXMgaXQ/CisjCitmaW50cnpfbm90X25vcm06CisJY21waS5iCQklZDEsJlpFUk8JCSMgd2VlZCBvdXQgWkVSTworCWJlcS5iCQlmaW50cnpfemVybworCWNtcGkuYgkJJWQxLCZJTkYJCSMgd2VlZCBvdXQgSU5GCisJYmVxLmIJCWZpbnRyel9pbmYKKwljbXBpLmIJCSVkMSwmREVOT1JNCQkjIHdlZWQgb3V0IERFTk9STQorCWJlcS5iCQlmaW50cnpfZGVub3JtCisJY21waS5iCQklZDEsJlNOQU4JCSMgd2VlZCBvdXQgU05BTgorCWJlcS5sCQlyZXNfc25hbl8xb3AKKwlicmEubAkJcmVzX3FuYW5fMW9wCQkjIHdlZWQgb3V0IFFOQU4KKworIworIyBEZW5vcm06CisjCisjIGZvciBERU5PUk1zLCB0aGUgcmVzdWx0IHdpbGwgYmUgKCsvLSlaRVJPLgorIyBhbHNvLCB0aGUgSU5FWDIgYW5kIEFJTkVYIGV4Y2VwdGlvbiBiaXRzIHdpbGwgYmUgc2V0LgorIyBzbywgd2UgY291bGQgZWl0aGVyIHNldCB0aGVzZSBtYW51YWxseSBvciBmb3JjZSB0aGUgREVOT1JNCisjIHRvIGEgdmVyeSBzbWFsbCBOT1JNIGFuZCBzaGlwIGl0IHRvIHRoZSBOT1JNIHJvdXRpbmUuCisjIEkgZG8gdGhlIGxhdHRlci4KKyMKK2ZpbnRyel9kZW5vcm06CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KSAjIGNvcHkgc2lnbiwgemVybyBleHAKKwltb3YuYgkJJjB4ODAsRlBfU0NSMF9ISSglYTYpCSMgZm9yY2UgREVOT1JNID09PiBzbWFsbCBOT1JNCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCisJYnJhLmIJCWZpbnRyel9ub3JtCisKKyMKKyMgWmVybzoKKyMKK2ZpbnRyel96ZXJvOgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBaRVJPIG5lZ2F0aXZlPworCWJtaS5iCQlmaW50cnpfemVyb19tCQkjIHllcworZmludHJ6X3plcm9fcDoKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyByZXR1cm4gK1pFUk8gaW4gZnAwCisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicgY2NvZGUgYml0CisJcnRzCitmaW50cnpfemVyb19tOgorCWZtb3YucwkJJjB4ODAwMDAwMDAsJWZwMAkjIHJldHVybiAtWkVSTyBpbiBmcDAKKwltb3YuYgkJJnpfYm1hc2srbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCAnWicsJ04nIGNjb2RlIGJpdHMKKwlydHMKKworIworIyBJbmZpbml0eToKKyMKK2ZpbnRyel9pbmY6CisJZm1vdm0ueAkJU1JDKCVhMCksJjB4ODAJCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwl0c3QuYgkJU1JDX0VYKCVhMCkJCSMgaXMgSU5GIG5lZ2F0aXZlPworCWJtaS5iCQlmaW50cnpfaW5mX20JCSMgeWVzCitmaW50cnpfaW5mX3A6CisJbW92LmIJCSZpbmZfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdJJyBjY29kZSBiaXQKKwlydHMKK2ZpbnRyel9pbmZfbToKKwltb3YuYgkJJmluZl9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0ICdOJywnSScgY2NvZGUgYml0cworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZhYnMoKTogIGVtdWxhdGVzIHRoZSBmYWJzIGluc3RydWN0aW9uCQkJCSMKKyMJZnNhYnMoKTogZW11bGF0ZXMgdGhlIGZzYWJzIGluc3RydWN0aW9uCQkJCSMKKyMJZmRhYnMoKTogZW11bGF0ZXMgdGhlIGZkYWJzIGluc3RydWN0aW9uCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCW5vcm0oKSAtIG5vcm1hbGl6ZSBkZW5vcm0gbWFudGlzc2EgdG8gcHJvdmlkZSBFWE9QCQkjCisjCXNjYWxlX3RvX3plcm9fc3JjKCkgLSBtYWtlIGV4cG9uZW50LiA9IDA7IGdldCBzY2FsZSBmYWN0b3IJIworIwl1bmZfcmVzKCkgLSBjYWxjdWxhdGUgdW5kZXJmbG93IHJlc3VsdAkJCQkjCisjCW92Zl9yZXMoKSAtIGNhbGN1bGF0ZSBvdmVyZmxvdyByZXN1bHQJCQkJIworIwlyZXNfe3MscX1uYW5fMW9wKCkgLSBzZXQgTkFOIHJlc3VsdCBmb3IgbW9uYWRpYyBvcGVyYXRpb24JIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlkMCA9IHJuZCBwcmVjaXNpb24vbW9kZQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWZwMCA9IHJlc3VsdAkJCQkJCQkjCisjCWZwMSA9IEVYT1AgKGlmIGV4Y2VwdGlvbiBvY2N1cnJlZCkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSGFuZGxlIE5BTnMsIGluZmluaXRpZXMsIGFuZCB6ZXJvZXMgYXMgc3BlY2lhbCBjYXNlcy4gRGl2aWRlCSMKKyMgbm9ybXMgaW50byBleHRlbmRlZCwgc2luZ2xlLCBhbmQgZG91YmxlIHByZWNpc2lvbi4JCQkjCisjCVNpbXBseSBjbGVhciBzaWduIGZvciBleHRlbmRlZCBwcmVjaXNpb24gbm9ybS4gRXh0IHByZWMgZGVub3JtCSMKKyMgZ2V0cyBhbiBFWE9QIGNyZWF0ZWQgZm9yIGl0IHNpbmNlIGl0J3MgYW4gdW5kZXJmbG93LgkJCSMKKyMJRG91YmxlIGFuZCBzaW5nbGUgcHJlY2lzaW9uIGNhbiBvdmVyZmxvdyBhbmQgdW5kZXJmbG93LiBGaXJzdCwJIworIyBzY2FsZSB0aGUgb3BlcmFuZCBzdWNoIHRoYXQgdGhlIGV4cG9uZW50IGlzIHplcm8uIFBlcmZvcm0gYW4gImZhYnMiCSMKKyMgdXNpbmcgdGhlIGNvcnJlY3Qgcm5kIG1vZGUvcHJlYy4gQ2hlY2sgdG8gc2VlIGlmIHRoZSBvcmlnaW5hbAkJIworIyBleHBvbmVudCB3b3VsZCB0YWtlIGFuIGV4Y2VwdGlvbi4gSWYgc28sIHVzZSB1bmZfcmVzKCkgb3Igb3ZmX3JlcygpCSMKKyMgdG8gY2FsY3VsYXRlIHRoZSBkZWZhdWx0IHJlc3VsdC4gQWxzbywgY3JlYXRlIHRoZSBFWE9QIGZvciB0aGUJIworIyBleGNlcHRpb25hbCBjYXNlLiBJZiBubyBleGNlcHRpb24gc2hvdWxkIG9jY3VyLCBpbnNlcnQgdGhlIGNvcnJlY3QJIworIyByZXN1bHQgZXhwb25lbnQgYW5kIHJldHVybi4JCQkJCQkjCisjCVVubm9ybXMgZG9uJ3QgcGFzcyB0aHJvdWdoIGhlcmUuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZzYWJzCitmc2FiczoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmc19tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IHNnbCBwcmVjaXNpb24KKwlicmEuYgkJZmFicworCisJZ2xvYmFsCQlmZGFicworZmRhYnM6CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKKwlvcmkuYgkJJmRfbW9kZSoweDEwLCVkMAkjIGluc2VydCBkYmwgcHJlY2lzaW9uCisKKwlnbG9iYWwJCWZhYnMKK2ZhYnM6CisJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzdG9yZSBybmQgaW5mbworCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYm5lLncJCWZhYnNfbm90X25vcm0JCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworIworIyBBQlNPTFVURSBWQUxVRTogbm9ybXMgYW5kIGRlbm9ybXMgT05MWSEKKyMKK2ZhYnNfbm9ybToKKwlhbmRpLmIJCSYweGMwLCVkMAkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CisJYm5lLmIJCWZhYnNfbm90X2V4dAkJIyBubzsgZ28gaGFuZGxlIHNnbCBvciBkYmwKKworIworIyBwcmVjaXNpb24gc2VsZWN0ZWQgaXMgZXh0ZW5kZWQuIHNvLi4ud2UgY2FuIG5vdCBnZXQgYW4gdW5kZXJmbG93CisjIG9yIG92ZXJmbG93IGJlY2F1c2Ugb2Ygcm91bmRpbmcgdG8gdGhlIGNvcnJlY3QgcHJlY2lzaW9uLiBzby4uLgorIyBza2lwIHRoZSBzY2FsaW5nIGFuZCB1bnNjYWxpbmcuLi4KKyMKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCW1vdi53CQlTUkNfRVgoJWEwKSwlZDEKKwliY2xyCQkmMTUsJWQxCQkJIyBmb3JjZSBhYnNvbHV0ZSB2YWx1ZQorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IGV4cG9uZW50CisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBmb3IgYW4gZXh0ZW5kZWQgcHJlY2lzaW9uIERFTk9STSwgdGhlIFVORkwgZXhjZXB0aW9uIGJpdCBpcyBzZXQKKyMgdGhlIGFjY3J1ZWQgYml0IGlzIE5PVCBzZXQgaW4gdGhpcyBpbnN0YW5jZShubyBpbmV4YWN0bmVzcyEpCisjCitmYWJzX2Rlbm9ybToKKwlhbmRpLmIJCSYweGMwLCVkMAkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CisJYm5lLmIJCWZhYnNfbm90X2V4dAkJIyBubworCisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CisKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCW1vdi53CQlTUkNfRVgoJWEwKSwlZDAKKwliY2xyCQkmMTUsJWQwCQkJIyBjbGVhciBzaWduCisJbW92LncJCSVkMCxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgZXhwb25lbnQKKworCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKworCWJ0c3QJCSZ1bmZsX2JpdCxGUENSX0VOQUJMRSglYTYpICMgaXMgVU5GTCBlbmFibGVkPworCWJuZS5iCQlmYWJzX2V4dF91bmZsX2VuYQorCXJ0cworCisjCisjIHRoZSBpbnB1dCBpcyBhbiBleHRlbmRlZCBERU5PUk0gYW5kIHVuZGVyZmxvdyBpcyBlbmFibGVkIGluIHRoZSBGUENSLgorIyBub3JtYWxpemUgdGhlIG1hbnRpc3NhIGFuZCBhZGQgdGhlIGJpYXMgb2YgMHg2MDAwIHRvIHRoZSByZXN1bHRpbmcgbmVnYXRpdmUKKyMgZXhwb25lbnQgYW5kIGluc2VydCBiYWNrIGludG8gdGhlIG9wZXJhbmQuCisjCitmYWJzX2V4dF91bmZsX2VuYToKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiBwdHIgdG8gb3BlcmFuZAorCWJzci5sCQlub3JtCQkJIyBub3JtYWxpemUgcmVzdWx0CisJbmVnLncJCSVkMAkJCSMgbmV3IGV4cG9uZW50ID0gLShzaGZ0IHZhbCkKKwlhZGRpLncJCSYweDYwMDAsJWQwCQkjIGFkZCBuZXcgYmlhcyB0byBleHBvbmVudAorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2ggb2xkIHNpZ24sZXhwCisJYW5kaS53CQkmMHg4MDAwLCVkMQkJIyBrZWVwIG9sZCBzaWduCisJYW5kaS53CQkmMHg3ZmZmLCVkMAkJIyBjbGVhciBzaWduIHBvc2l0aW9uCisJb3IudwkJJWQxLCVkMAkJCSMgY29uY2F0IG9sZCBzaWduLCBuZXcgZXhwb25lbnQKKwltb3YudwkJJWQwLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlydHMKKworIworIyBvcGVyYW5kIGlzIGVpdGhlciBzaW5nbGUgb3IgZG91YmxlCisjCitmYWJzX25vdF9leHQ6CisJY21waS5iCQklZDAsJnNfbW9kZSoweDEwCSMgc2VwYXJhdGUgc2dsL2RibCBwcmVjCisJYm5lLmIJCWZhYnNfZGJsCisKKyMKKyMgb3BlcmFuZCBpcyB0byBiZSByb3VuZGVkIHRvIHNpbmdsZSBwcmVjaXNpb24KKyMKK2ZhYnNfc2dsOgorCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCWJzci5sCQlzY2FsZV90b196ZXJvX3NyYwkjIGNhbGN1bGF0ZSBzY2FsZSBmYWN0b3IKKworCWNtcGkubAkJJWQwLCYweDNmZmYtMHgzZjgwCSMgd2lsbCBtb3ZlIGluIHVuZGVyZmxvdz8KKwliZ2UudwkJZmFic19zZF91bmZsCQkjIHllczsgZ28gaGFuZGxlIHVuZGVyZmxvdworCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0MDdlCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PworCWJlcS53CQlmYWJzX3NkX21heV9vdmZsCSMgbWF5YmU7IGdvIGNoZWNrCisJYmx0LncJCWZhYnNfc2Rfb3ZmbAkJIyB5ZXM7IGdvIGhhbmRsZSBvdmVyZmxvdworCisjCisjIG9wZXJhbmQgd2lsbCBOT1Qgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IHdoZW4gbW92ZWQgaW4gdG8gdGhlIGZwIHJlZyBmaWxlCisjCitmYWJzX3NkX25vcm1hbDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZmFicy54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gYWJzb2x1dGUKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgorCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworZmFic19zZF9ub3JtYWxfZXhpdDoKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgb3V0IHJlc3VsdAorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCBzZ24sZXhwCisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlvci53CQklZDEsJWQyCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDIsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIG9wZXJhbmQgaXMgdG8gYmUgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uCisjCitmYWJzX2RibDoKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCVNSQ19ISSglYTApLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlTUkNfTE8oJWEwKSxGUF9TQ1IwX0xPKCVhNikKKwlic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCisKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4M2MwMAkjIHdpbGwgbW92ZSBpbiB1bmRlcmZsb3c/CisJYmdlLmIJCWZhYnNfc2RfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4NDNmZQkjIHdpbGwgbW92ZSBpbiBvdmVyZmxvdz8KKwliZXEudwkJZmFic19zZF9tYXlfb3ZmbAkjIG1heWJlOyBnbyBjaGVjaworCWJsdC53CQlmYWJzX3NkX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKKwlicmEudwkJZmFic19zZF9ub3JtYWwJCSMgbm87IGhvIGhhbmRsZSBub3JtYWxpemVkIG9wCisKKyMKKyMgb3BlcmFuZCBXSUxMIHVuZGVyZmxvdyB3aGVuIG1vdmVkIGluIHRvIHRoZSBmcCByZWdpc3RlciBmaWxlCisjCitmYWJzX3NkX3VuZmw6CisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CisKKwliY2xyCQkmMHg3LEZQX1NDUjBfRVgoJWE2KQkjIGZvcmNlIGFic29sdXRlIHZhbHVlCisKKyMgaWYgdW5kZXJmbG93IG9yIGluZXhhY3QgaXMgZW5hYmxlZCwgZ28gY2FsY3VsYXRlIEVYT1AgZmlyc3QuCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgwYiwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZhYnNfc2RfdW5mbF9lbmEJIyB5ZXMKKworZmFic19zZF91bmZsX2RpczoKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiByZXN1bHQgYWRkcgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEJCSMgcGFzczogcm5kIHByZWMsbW9kZQorCWJzci5sCQl1bmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IHBvc3NpYmxlICdaJyBjY29kZQorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBvcGVyYW5kIHdpbGwgdW5kZXJmbG93IEFORCB1bmRlcmZsb3cgaXMgZW5hYmxlZC4KKyMgdGhlcmVmb3JlLCB3ZSBtdXN0IHJldHVybiB0aGUgcmVzdWx0IHJvdW5kZWQgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uLgorIworZmFic19zZF91bmZsX2VuYToKKwltb3YubAkJRlBfU0NSMF9ISSglYTYpLEZQX1NDUjFfSEkoJWE2KQorCW1vdi5sCQlGUF9TQ1IwX0xPKCVhNiksRlBfU0NSMV9MTyglYTYpCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBsb2FkIGN1cnJlbnQgZXhwb25lbnQKKworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgc3VidHJhY3Qgc2NhbGUgZmFjdG9yCisJYWRkaS5sCQkmMHg2MDAwLCVkMQkJIyBhZGQgbmV3IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG5ldyBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjFfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWJyYS5iCQlmYWJzX3NkX3VuZmxfZGlzCisKKyMKKyMgb3BlcmFuZCBXSUxMIG92ZXJmbG93LgorIworZmFic19zZF9vdmZsOgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmYWJzLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBhYnNvbHV0ZQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIEZQU1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmYWJzX3NkX292ZmxfdHN0OgorCW9yLmwJCSZvdmZsX2lueF9tYXNrLFVTRVJfRlBTUiglYTYpICMgc2V0IG92ZmwvYW92ZmwvYWluZXgKKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MTMsJWQxCQkjIGlzIE9WRkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmYWJzX3NkX292ZmxfZW5hCSMgeWVzCisKKyMKKyMgT1ZGTCBpcyBub3QgZW5hYmxlZDsgdGhlcmVmb3JlLCB3ZSBtdXN0IGNyZWF0ZSB0aGUgZGVmYXVsdCByZXN1bHQgYnkKKyMgY2FsbGluZyBvdmZfcmVzKCkuCisjCitmYWJzX3NkX292ZmxfZGlzOgorCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZT8KKwlzbmUJCSVkMQkJCSMgc2V0IHNpZ24gcGFyYW0gYWNjb3JkaW5nbHkKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3M6IHByZWMsbW9kZQorCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IElORixOIGlmIGFwcGxpY2FibGUKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgT1ZGTCBpcyBlbmFibGVkLgorIyB0aGUgSU5FWDIgYml0IGhhcyBhbHJlYWR5IGJlZW4gdXBkYXRlZCBieSB0aGUgcm91bmQgdG8gdGhlIGNvcnJlY3QgcHJlY2lzaW9uLgorIyBub3csIHJvdW5kIHRvIGV4dGVuZGVkKGFuZCBkb24ndCBhbHRlciB0aGUgRlBTUikuCisjCitmYWJzX3NkX292ZmxfZW5hOgorCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJc3ViaS5sCQkmMHg2MDAwLCVkMQkJIyBzdWJ0cmFjdCBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBzaWduLGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlicmEuYgkJZmFic19zZF9vdmZsX2RpcworCisjCisjIHRoZSBtb3ZlIGluIE1BWSB1bmRlcmZsb3cuIHNvLi4uCisjCitmYWJzX3NkX21heV9vdmZsOgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmYWJzLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBhYnNvbHV0ZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwlmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKKwlmY21wLmIJCSVmcDEsJjB4MgkJIyBpcyB8cmVzdWx0fCA+PSAyLmI/CisJZmJnZS53CQlmYWJzX3NkX292ZmxfdHN0CSMgeWVzOyBvdmVyZmxvdyBoYXMgb2NjdXJyZWQKKworIyBubywgaXQgZGlkbid0IG92ZXJmbG93OyB3ZSBoYXZlIGNvcnJlY3QgcmVzdWx0CisJYnJhLncJCWZhYnNfc2Rfbm9ybWFsX2V4aXQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBpbnB1dCBpcyBub3Qgbm9ybWFsaXplZDsgd2hhdCBpcyBpdD8KKyMKK2ZhYnNfbm90X25vcm06CisJY21waS5iCQklZDEsJkRFTk9STQkJIyB3ZWVkIG91dCBERU5PUk0KKwliZXEudwkJZmFic19kZW5vcm0KKwljbXBpLmIJCSVkMSwmU05BTgkJIyB3ZWVkIG91dCBTTkFOCisJYmVxLmwJCXJlc19zbmFuXzFvcAorCWNtcGkuYgkJJWQxLCZRTkFOCQkjIHdlZWQgb3V0IFFOQU4KKwliZXEubAkJcmVzX3FuYW5fMW9wCisKKwlmYWJzLngJCVNSQyglYTApLCVmcDAJCSMgZm9yY2UgYWJzb2x1dGUgdmFsdWUKKworCWNtcGkuYgkJJWQxLCZJTkYJCSMgd2VlZCBvdXQgSU5GCisJYmVxLmIJCWZhYnNfaW5mCitmYWJzX3plcm86CisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicgY2NvZGUgYml0CisJcnRzCitmYWJzX2luZjoKKwltb3YuYgkJJmluZl9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ0knIGNjb2RlIGJpdAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZjbXAoKTogZnAgY29tcGFyZSBvcCByb3V0aW5lCQkJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlyZXNfcW5hbigpIC0gcmV0dXJuIFFOQU4gcmVzdWx0CQkJCQkjCisjCXJlc19zbmFuKCkgLSByZXR1cm4gU05BTiByZXN1bHQJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKKyMJYTEgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBkZXN0aW5hdGlvbiBvcGVyYW5kCQkjCisjCWQwID0gcm91bmQgcHJlYy9tb2RlCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSGFuZGxlIE5BTnMgYW5kIGRlbm9ybXMgYXMgc3BlY2lhbCBjYXNlcy4gRm9yIGV2ZXJ5dGhpbmcgZWxzZSwJIworIyBqdXN0IHVzZSB0aGUgYWN0dWFsIGZjbXAgaW5zdHJ1Y3Rpb24gdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBjb25kaXRpb24JIworIyBjb2Rlcy4JCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZjbXAKK2ZjbXA6CisJY2xyLncJCSVkMQorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJbHNsLmIJCSYweDMsJWQxCisJb3IuYgkJU1RBRyglYTYpLCVkMQorCWJuZS5iCQlmY21wX25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CisKKyMKKyMgQ09NUEFSRSBGUCBPUHMgOiBOT1JNcywgWkVST3MsIElORnMsIGFuZCAiY29ycmVjdGVkIiBERU5PUk1zCisjCitmY21wX25vcm06CisJZm1vdm0ueAkJRFNUKCVhMSksJjB4ODAJCSMgbG9hZCBkc3Qgb3AKKworCWZjbXAueAkJJWZwMCxTUkMoJWEwKQkJIyBkbyBjb21wYXJlCisKKwlmbW92LmwJCSVmcHNyLCVkMAkJIyBzYXZlIEZQU1IKKwlyb2wubAkJJjB4OCwlZDAJCSMgZXh0cmFjdCBjY29kZSBiaXRzCisJbW92LmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgY2NvZGUgYml0cyhubyBleGMgYml0cyBhcmUgc2V0KQorCisJcnRzCisKKyMKKyMgZmNtcDogaW5wdXRzIGFyZSBub3QgYm90aCBub3JtYWxpemVkOyB3aGF0IGFyZSB0aGV5PworIworZmNtcF9ub3Rfbm9ybToKKwltb3YudwkJKHRibF9mY21wX29wLmIsJXBjLCVkMS53KjIpLCVkMQorCWptcAkJKHRibF9mY21wX29wLmIsJXBjLCVkMS53KjEpCisKKwlzd2JlZwkJJjQ4Cit0YmxfZmNtcF9vcDoKKwlzaG9ydAkJZmNtcF9ub3JtCS0gdGJsX2ZjbXBfb3AgIyBOT1JNIC0gTk9STQorCXNob3J0CQlmY21wX25vcm0JLSB0YmxfZmNtcF9vcCAjIE5PUk0gLSBaRVJPCisJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgTk9STSAtIElORgorCXNob3J0CQlmY21wX3Jlc19xbmFuCS0gdGJsX2ZjbXBfb3AgIyBOT1JNIC0gUU5BTgorCXNob3J0CQlmY21wX25ybV9kbnJtCS0gdGJsX2ZjbXBfb3AgIyBOT1JNIC0gREVOT1JNCisJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIE5PUk0gLSBTTkFOCisJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIworCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKKworCXNob3J0CQlmY21wX25vcm0JLSB0YmxfZmNtcF9vcCAjIFpFUk8gLSBOT1JNCisJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgWkVSTyAtIFpFUk8KKwlzaG9ydAkJZmNtcF9ub3JtCS0gdGJsX2ZjbXBfb3AgIyBaRVJPIC0gSU5GCisJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIFpFUk8gLSBRTkFOCisJc2hvcnQJCWZjbXBfZG5ybV9zCS0gdGJsX2ZjbXBfb3AgIyBaRVJPIC0gREVOT1JNCisJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIFpFUk8gLSBTTkFOCisJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIworCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKKworCXNob3J0CQlmY21wX25vcm0JLSB0YmxfZmNtcF9vcCAjIElORiAtIE5PUk0KKwlzaG9ydAkJZmNtcF9ub3JtCS0gdGJsX2ZjbXBfb3AgIyBJTkYgLSBaRVJPCisJc2hvcnQJCWZjbXBfbm9ybQktIHRibF9mY21wX29wICMgSU5GIC0gSU5GCisJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIElORiAtIFFOQU4KKwlzaG9ydAkJZmNtcF9kbnJtX3MJLSB0YmxfZmNtcF9vcCAjIElORiAtIERFTk9STQorCXNob3J0CQlmY21wX3Jlc19zbmFuCS0gdGJsX2ZjbXBfb3AgIyBJTkYgLSBTTkFOCisJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIworCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKKworCXNob3J0CQlmY21wX3Jlc19xbmFuCS0gdGJsX2ZjbXBfb3AgIyBRTkFOIC0gTk9STQorCXNob3J0CQlmY21wX3Jlc19xbmFuCS0gdGJsX2ZjbXBfb3AgIyBRTkFOIC0gWkVSTworCXNob3J0CQlmY21wX3Jlc19xbmFuCS0gdGJsX2ZjbXBfb3AgIyBRTkFOIC0gSU5GCisJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIFFOQU4gLSBRTkFOCisJc2hvcnQJCWZjbXBfcmVzX3FuYW4JLSB0YmxfZmNtcF9vcCAjIFFOQU4gLSBERU5PUk0KKwlzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgUU5BTiAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCisJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIworCisJc2hvcnQJCWZjbXBfZG5ybV9ucm0JLSB0YmxfZmNtcF9vcCAjIERFTk9STSAtIE5PUk0KKwlzaG9ydAkJZmNtcF9kbnJtX2QJLSB0YmxfZmNtcF9vcCAjIERFTk9STSAtIFpFUk8KKwlzaG9ydAkJZmNtcF9kbnJtX2QJLSB0YmxfZmNtcF9vcCAjIERFTk9STSAtIElORgorCXNob3J0CQlmY21wX3Jlc19xbmFuCS0gdGJsX2ZjbXBfb3AgIyBERU5PUk0gLSBRTkFOCisJc2hvcnQJCWZjbXBfZG5ybV9zZAktIHRibF9mY21wX29wICMgREVOT1JNIC0gREVOT1JNCisJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIERFTk9STSAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCisJc2hvcnQJCXRibF9mY21wX29wCS0gdGJsX2ZjbXBfb3AgIworCisJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIFNOQU4gLSBOT1JNCisJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIFNOQU4gLSBaRVJPCisJc2hvcnQJCWZjbXBfcmVzX3NuYW4JLSB0YmxfZmNtcF9vcCAjIFNOQU4gLSBJTkYKKwlzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgU05BTiAtIFFOQU4KKwlzaG9ydAkJZmNtcF9yZXNfc25hbgktIHRibF9mY21wX29wICMgU05BTiAtIERFTk9STQorCXNob3J0CQlmY21wX3Jlc19zbmFuCS0gdGJsX2ZjbXBfb3AgIyBTTkFOIC0gU05BTgorCXNob3J0CQl0YmxfZmNtcF9vcAktIHRibF9mY21wX29wICMKKwlzaG9ydAkJdGJsX2ZjbXBfb3AJLSB0YmxfZmNtcF9vcCAjCisKKyMgdW5saWtlIGFsbCBvdGhlciBmdW5jdGlvbnMgZm9yIFFOQU4gYW5kIFNOQU4sIGZjbXAgZG9lcyBOT1Qgc2V0IHRoZQorIyAnTicgYml0IGZvciBhIG5lZ2F0aXZlIFFOQU4gb3IgU05BTiBpbnB1dCBzbyB3ZSBtdXN0IHNxdWVsY2ggaXQgaGVyZS4KK2ZjbXBfcmVzX3FuYW46CisJYnNyLmwJCXJlc19xbmFuCisJYW5kaS5iCQkmMHhmNyxGUFNSX0NDKCVhNikKKwlydHMKK2ZjbXBfcmVzX3NuYW46CisJYnNyLmwJCXJlc19zbmFuCisJYW5kaS5iCQkmMHhmNyxGUFNSX0NDKCVhNikKKwlydHMKKworIworIyBERU5PUk1zIGFyZSBhIGxpdHRsZSBtb3JlIGRpZmZpY3VsdC4KKyMgSWYgeW91IGhhdmUgYSAyIERFTk9STXMsIHRoZW4geW91IGNhbiBqdXN0IGZvcmNlIHRoZSBqLWJpdCB0byBhIG9uZQorIyBhbmQgdXNlIHRoZSBmY21wX25vcm0gcm91dGluZS4KKyMgSWYgeW91IGhhdmUgYSBERU5PUk0gYW5kIGFuIElORiBvciBaRVJPLCBqdXN0IGZvcmNlIHRoZSBERU5PUk0ncyBqLWJpdCB0byBhIG9uZQorIyBhbmQgdXNlIHRoZSBmY21wX25vcm0gcm91dGluZS4KKyMgSWYgeW91IGhhdmUgYSBERU5PUk0gYW5kIGEgTk9STSB3aXRoIG9wcG9zaXRlIHNpZ25zLCB0aGVuIHVzZSBmY21wX25vcm0sIGFsc28uCisjIEJ1dCB3aXRoIGEgREVOT1JNIGFuZCBhIE5PUk0gb2YgdGhlIHNhbWUgc2lnbiwgdGhlIG5lZyBiaXQgaXMgc2V0IGlmIHRoZQorIyAoMSkgc2lnbnMgYXJlICgrKSBhbmQgdGhlIERFTk9STSBpcyB0aGUgZHN0IG9yCisjICgyKSBzaWducyBhcmUgKC0pIGFuZCB0aGUgREVOT1JNIGlzIHRoZSBzcmMKKyMKKworZmNtcF9kbnJtX3M6CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSwlZDAKKwlic2V0CQkmMzEsJWQwCQkJIyBERU5PUk0gc3JjOyBtYWtlIGludG8gc21hbGwgbm9ybQorCW1vdi5sCQklZDAsRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCWxlYQkJRlBfU0NSMCglYTYpLCVhMAorCWJyYS53CQlmY21wX25vcm0KKworZmNtcF9kbnJtX2Q6CisJbW92LmwJCURTVF9FWCglYTEpLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlEU1RfSEkoJWExKSwlZDAKKwlic2V0CQkmMzEsJWQwCQkJIyBERU5PUk0gc3JjOyBtYWtlIGludG8gc21hbGwgbm9ybQorCW1vdi5sCQklZDAsRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCURTVF9MTyglYTEpLEZQX1NDUjBfTE8oJWE2KQorCWxlYQkJRlBfU0NSMCglYTYpLCVhMQorCWJyYS53CQlmY21wX25vcm0KKworZmNtcF9kbnJtX3NkOgorCW1vdi53CQlEU1RfRVgoJWExKSxGUF9TQ1IxX0VYKCVhNikKKwltb3YudwkJU1JDX0VYKCVhMCksRlBfU0NSMF9FWCglYTYpCisJbW92LmwJCURTVF9ISSglYTEpLCVkMAorCWJzZXQJCSYzMSwlZDAJCQkjIERFTk9STSBkc3Q7IG1ha2UgaW50byBzbWFsbCBub3JtCisJbW92LmwJCSVkMCxGUF9TQ1IxX0hJKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksJWQwCisJYnNldAkJJjMxLCVkMAkJCSMgREVOT1JNIGRzdDsgbWFrZSBpbnRvIHNtYWxsIG5vcm0KKwltb3YubAkJJWQwLEZQX1NDUjBfSEkoJWE2KQorCW1vdi5sCQlEU1RfTE8oJWExKSxGUF9TQ1IxX0xPKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJbGVhCQlGUF9TQ1IxKCVhNiksJWExCisJbGVhCQlGUF9TQ1IwKCVhNiksJWEwCisJYnJhLncJCWZjbXBfbm9ybQorCitmY21wX25ybV9kbnJtOgorCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDAJCSMgZGV0ZXJtaW5lIGlmIGxpa2Ugc2lnbnMKKwltb3YuYgkJRFNUX0VYKCVhMSksJWQxCisJZW9yLmIJCSVkMCwlZDEKKwlibWkudwkJZmNtcF9kbnJtX3MKKworIyBzaWducyBhcmUgdGhlIHNhbWUsIHNvIG11c3QgZGV0ZXJtaW5lIHRoZSBhbnN3ZXIgb3Vyc2VsdmVzLgorCXRzdC5iCQklZDAJCQkjIGlzIHNyYyBvcCBuZWdhdGl2ZT8KKwlibWkuYgkJZmNtcF9ucm1fZG5ybV9tCQkjIHllcworCXJ0cworZmNtcF9ucm1fZG5ybV9tOgorCW1vdi5iCQkmbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCAnWicgY2NvZGUgYml0CisJcnRzCisKK2ZjbXBfZG5ybV9ucm06CisJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBkZXRlcm1pbmUgaWYgbGlrZSBzaWducworCW1vdi5iCQlEU1RfRVgoJWExKSwlZDEKKwllb3IuYgkJJWQwLCVkMQorCWJtaS53CQlmY21wX2Rucm1fZAorCisjIHNpZ25zIGFyZSB0aGUgc2FtZSwgc28gbXVzdCBkZXRlcm1pbmUgdGhlIGFuc3dlciBvdXJzZWx2ZXMuCisJdHN0LmIJCSVkMAkJCSMgaXMgc3JjIG9wIG5lZ2F0aXZlPworCWJwbC5iCQlmY21wX2Rucm1fbnJtX20JCSMgbm8KKwlydHMKK2ZjbXBfZG5ybV9ucm1fbToKKwltb3YuYgkJJm5lZ19ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ1onIGNjb2RlIGJpdAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZzZ2xtdWwoKTogZW11bGF0ZXMgdGhlIGZzZ2xtdWwgaW5zdHJ1Y3Rpb24JCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlzY2FsZV90b196ZXJvX3NyYygpIC0gc2NhbGUgc3JjIGV4cG9uZW50IHRvIHplcm8JCSMKKyMJc2NhbGVfdG9femVyb19kc3QoKSAtIHNjYWxlIGRzdCBleHBvbmVudCB0byB6ZXJvCQkjCisjCXVuZl9yZXM0KCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0IGZvciBzZ2xvcAkJIworIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCisjCXJlc19xbmFuKCkgLSByZXR1cm4gUU5BTiByZXN1bHQJCQkJCSMKKyMJcmVzX3NuYW4oKSAtIHJldHVybiBTTkFOIHJlc3VsdAkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlhMSA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGRlc3RpbmF0aW9uIG9wZXJhbmQJCSMKKyMJZDAgIHJuZCBwcmVjLG1vZGUJCQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmcDAgPSByZXN1bHQJCQkJCQkJIworIwlmcDEgPSBFWE9QIChpZiBleGNlcHRpb24gb2NjdXJyZWQpCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUhhbmRsZSBOQU5zLCBpbmZpbml0aWVzLCBhbmQgemVyb2VzIGFzIHNwZWNpYWwgY2FzZXMuIERpdmlkZQkjCisjIG5vcm1zL2Rlbm9ybXMgaW50byBleHQvc2dsL2RibCBwcmVjaXNpb24uCQkJCSMKKyMJRm9yIG5vcm1zL2Rlbm9ybXMsIHNjYWxlIHRoZSBleHBvbmVudHMgc3VjaCB0aGF0IGEgbXVsdGlwbHkJIworIyBpbnN0cnVjdGlvbiB3b24ndCBjYXVzZSBhbiBleGNlcHRpb24uIFVzZSB0aGUgcmVndWxhciBmc2dsbXVsIHRvCSMKKyMgY29tcHV0ZSBhIHJlc3VsdC4gQ2hlY2sgaWYgdGhlIHJlZ3VsYXIgb3BlcmFuZHMgd291bGQgaGF2ZSB0YWtlbgkjCisjIGFuIGV4Y2VwdGlvbi4gSWYgc28sIHJldHVybiB0aGUgZGVmYXVsdCBvdmVyZmxvdy91bmRlcmZsb3cgcmVzdWx0CSMKKyMgYW5kIHJldHVybiB0aGUgRVhPUCBpZiBleGNlcHRpb25zIGFyZSBlbmFibGVkLiBFbHNlLCBzY2FsZSB0aGUJIworIyByZXN1bHQgb3BlcmFuZCB0byB0aGUgcHJvcGVyIGV4cG9uZW50LgkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlmc2dsbXVsCitmc2dsbXVsOgorCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KKworCWNsci53CQklZDEKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWxzbC5iCQkmMHgzLCVkMQorCW9yLmIJCVNUQUcoJWE2KSwlZDEKKworCWJuZS53CQlmc2dsbXVsX25vdF9ub3JtCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworZnNnbG11bF9ub3JtOgorCW1vdi53CQlEU1RfRVgoJWExKSxGUF9TQ1IxX0VYKCVhNikKKwltb3YubAkJRFNUX0hJKCVhMSksRlBfU0NSMV9ISSglYTYpCisJbW92LmwJCURTVF9MTyglYTEpLEZQX1NDUjFfTE8oJWE2KQorCisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisKKwlic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBzY2FsZSBleHBvbmVudAorCW1vdi5sCQklZDAsLSglc3ApCQkjIHNhdmUgc2NhbGUgZmFjdG9yIDEKKworCWJzci5sCQlzY2FsZV90b196ZXJvX2RzdAkjIHNjYWxlIGRzdCBleHBvbmVudAorCisJYWRkLmwJCSglc3ApKywlZDAJCSMgU0NBTEVfRkFDVE9SID0gc2NhbGUxICsgc2NhbGUyCisKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4N2ZmZQkjIHdvdWxkIHJlc3VsdCBvdmZsPworCWJlcS53CQlmc2dsbXVsX21heV9vdmZsCSMgcmVzdWx0IG1heSBybmQgdG8gb3ZlcmZsb3cKKwlibHQudwkJZnNnbG11bF9vdmZsCQkjIHJlc3VsdCB3aWxsIG92ZXJmbG93CisKKwljbXBpLmwJCSVkMCwmMHgzZmZmKzB4MDAwMQkjIHdvdWxkIHJlc3VsdCB1bmZsPworCWJlcS53CQlmc2dsbXVsX21heV91bmZsCSMgcmVzdWx0IG1heSBybmQgdG8gbm8gdW5mbAorCWJndC53CQlmc2dsbXVsX3VuZmwJCSMgcmVzdWx0IHdpbGwgdW5kZXJmbG93CisKK2ZzZ2xtdWxfbm9ybWFsOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNnbG11bC54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgbXVsdGlwbHkKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmc2dsbXVsX25vcm1hbF9leGl0OgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBsb2FkIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlydHMKKworZnNnbG11bF9vdmZsOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNnbG11bC54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgbXVsdGlwbHkKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmc2dsbXVsX292ZmxfdHN0OgorCisjIHNhdmUgc2V0dGluZyB0aGlzIHVudGlsIG5vdyBiZWNhdXNlIHRoaXMgaXMgd2hlcmUgZnNnbG11bF9tYXlfb3ZmbCBtYXkganVtcCBpbgorCW9yLmwJCSZvdmZsX2lueF9tYXNrLCBVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4CisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDEzLCVkMQkJIyBpcyBPVkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZnNnbG11bF9vdmZsX2VuYQkjIHllcworCitmc2dsbXVsX292ZmxfZGlzOgorCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZT8KKwlzbmUJCSVkMQkJCSMgc2V0IHNpZ24gcGFyYW0gYWNjb3JkaW5nbHkKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3MgcHJlYzpybmQKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBmb3JjZSBwcmVjID0gZXh0CisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQorCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworZnNnbG11bF9vdmZsX2VuYToKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBtb3ZlIHJlc3VsdCB0byBzdGFjaworCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9CisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlzdWJpLmwJCSYweDYwMDAsJWQxCQkjIHN1YnRyYWN0IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJYnJhLmIJCWZzZ2xtdWxfb3ZmbF9kaXMKKworZnNnbG11bF9tYXlfb3ZmbDoKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZzZ2xtdWwueAlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgc2dsIG11bHRpcGx5CisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIHN0YXR1cworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworCWZhYnMueAkJJWZwMCwlZnAxCQkjIG1ha2UgYSBjb3B5IG9mIHJlc3VsdAorCWZjbXAuYgkJJWZwMSwmMHgyCQkjIGlzIHxyZXN1bHR8ID49IDIuYj8KKwlmYmdlLncJCWZzZ2xtdWxfb3ZmbF90c3QJIyB5ZXM7IG92ZXJmbG93IGhhcyBvY2N1cnJlZAorCisjIG5vLCBpdCBkaWRuJ3Qgb3ZlcmZsb3c7IHdlIGhhdmUgY29ycmVjdCByZXN1bHQKKwlicmEudwkJZnNnbG11bF9ub3JtYWxfZXhpdAorCitmc2dsbXVsX3VuZmw6CisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CisKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAorCisJZm1vdi5sCQkmcnpfbW9kZSoweDEwLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNnbG11bC54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgbXVsdGlwbHkKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgwYiwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZzZ2xtdWxfdW5mbF9lbmEJIyB5ZXMKKworZnNnbG11bF91bmZsX2RpczoKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0CisKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiByZXN1bHQgYWRkcgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEJCSMgcGFzczogcm5kIHByZWMsbW9kZQorCWJzci5sCQl1bmZfcmVzNAkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgJ1onIGJpdCBtYXkgaGF2ZSBiZWVuIHNldAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBVTkZMIGlzIGVuYWJsZWQuCisjCitmc2dsbXVsX3VuZmxfZW5hOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNnbG11bC54CUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBzZ2wgbXVsdGlwbHkKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlmbW92bS54CQkmMHg0MCxGUF9TQ1IwKCVhNikJIyBzYXZlIHJlc3VsdCB0byBzdGFjaworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGZldGNoIHtzZ24sZXhwfQorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCWFuZGkudwkJJjB4ODAwMCwlZDIJCSMga2VlcCBvbGQgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJYWRkaS5sCQkmMHg2MDAwLCVkMQkJIyBhZGQgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDEsRlBfU0NSMF9FWCglYTYpCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCW1vdi5sCQkoJXNwKSssJWQyCQkjIHJlc3RvcmUgZDIKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlicmEudwkJZnNnbG11bF91bmZsX2RpcworCitmc2dsbXVsX21heV91bmZsOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNnbG11bC54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzZ2wgbXVsdGlwbHkKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCisJZmFicy54CQklZnAwLCVmcDEJCSMgbWFrZSBhIGNvcHkgb2YgcmVzdWx0CisJZmNtcC5iCQklZnAxLCYweDIJCSMgaXMgfHJlc3VsdHwgPiAyLmI/CisJZmJndC53CQlmc2dsbXVsX25vcm1hbF9leGl0CSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCWZibHQudwkJZnNnbG11bF91bmZsCQkjIHllczsgdW5kZXJmbG93IG9jY3VycmVkCisKKyMKKyMgd2Ugc3RpbGwgZG9uJ3Qga25vdyBpZiB1bmRlcmZsb3cgb2NjdXJyZWQuIHJlc3VsdCBpcyB+IGVxdWFsIHRvIDIuIGJ1dCwKKyMgd2UgZG9uJ3Qga25vdyBpZiB0aGUgcmVzdWx0IHdhcyBhbiB1bmRlcmZsb3cgdGhhdCByb3VuZGVkIHVwIHRvIGEgMiBvcgorIyBhIG5vcm1hbGl6ZWQgbnVtYmVyIHRoYXQgcm91bmRlZCBkb3duIHRvIGEgMi4gc28sIHJlZG8gdGhlIGVudGlyZSBvcGVyYXRpb24KKyMgdXNpbmcgUlogYXMgdGhlIHJvdW5kaW5nIG1vZGUgdG8gc2VlIHdoYXQgdGhlIHByZS1yb3VuZGVkIHJlc3VsdCBpcy4KKyMgdGhpcyBjYXNlIHNob3VsZCBiZSByZWxhdGl2ZWx5IHJhcmUuCisjCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AgaW50byBmcDEKKworCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBrZWVwIHJuZCBwcmVjCisJb3JpLmIJCSZyel9tb2RlKjB4MTAsJWQxCSMgaW5zZXJ0IFJaCisKKwlmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc2dsbXVsLngJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIHNnbCBtdWx0aXBseQorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmYWJzLngJCSVmcDEJCQkjIG1ha2UgYWJzb2x1dGUgdmFsdWUKKwlmY21wLmIJCSVmcDEsJjB4MgkJIyBpcyB8cmVzdWx0fCA8IDIuYj8KKwlmYmdlLncJCWZzZ2xtdWxfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCisJYnJhLncJCWZzZ2xtdWxfdW5mbAkJIyB5ZXMsIHVuZGVyZmxvdyBvY2N1cnJlZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBTaW5nbGUgUHJlY2lzaW9uIE11bHRpcGx5OiBpbnB1dHMgYXJlIG5vdCBib3RoIG5vcm1hbGl6ZWQ7IHdoYXQgYXJlIHRoZXk/CisjCitmc2dsbXVsX25vdF9ub3JtOgorCW1vdi53CQkodGJsX2ZzZ2xtdWxfb3AuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX2ZzZ2xtdWxfb3AuYiwlcGMsJWQxLncqMSkKKworCXN3YmVnCQkmNDgKK3RibF9mc2dsbXVsX29wOgorCXNob3J0CQlmc2dsbXVsX25vcm0JCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggTk9STQorCXNob3J0CQlmc2dsbXVsX3plcm8JCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggWkVSTworCXNob3J0CQlmc2dsbXVsX2luZl9zcmMJCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggSU5GCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3FuYW4JLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBRTkFOCisJc2hvcnQJCWZzZ2xtdWxfbm9ybQkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBERU5PUk0KKwlzaG9ydAkJZnNnbG11bF9yZXNfc25hbgktIHRibF9mc2dsbXVsX29wICMgTk9STSB4IFNOQU4KKwlzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIworCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCisKKwlzaG9ydAkJZnNnbG11bF96ZXJvCQktIHRibF9mc2dsbXVsX29wICMgWkVSTyB4IE5PUk0KKwlzaG9ydAkJZnNnbG11bF96ZXJvCQktIHRibF9mc2dsbXVsX29wICMgWkVSTyB4IFpFUk8KKwlzaG9ydAkJZnNnbG11bF9yZXNfb3BlcnIJLSB0YmxfZnNnbG11bF9vcCAjIFpFUk8geCBJTkYKKwlzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgWkVSTyB4IFFOQU4KKwlzaG9ydAkJZnNnbG11bF96ZXJvCQktIHRibF9mc2dsbXVsX29wICMgWkVSTyB4IERFTk9STQorCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBaRVJPIHggU05BTgorCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCisJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKKworCXNob3J0CQlmc2dsbXVsX2luZl9kc3QJCS0gdGJsX2ZzZ2xtdWxfb3AgIyBJTkYgeCBOT1JNCisJc2hvcnQJCWZzZ2xtdWxfcmVzX29wZXJyCS0gdGJsX2ZzZ2xtdWxfb3AgIyBJTkYgeCBaRVJPCisJc2hvcnQJCWZzZ2xtdWxfaW5mX2RzdAkJLSB0YmxfZnNnbG11bF9vcCAjIElORiB4IElORgorCXNob3J0CQlmc2dsbXVsX3Jlc19xbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBJTkYgeCBRTkFOCisJc2hvcnQJCWZzZ2xtdWxfaW5mX2RzdAkJLSB0YmxfZnNnbG11bF9vcCAjIElORiB4IERFTk9STQorCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBJTkYgeCBTTkFOCisJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKKwlzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIworCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3FuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFFOQU4geCBOT1JNCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3FuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFFOQU4geCBaRVJPCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3FuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFFOQU4geCBJTkYKKwlzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgUU5BTiB4IFFOQU4KKwlzaG9ydAkJZnNnbG11bF9yZXNfcW5hbgktIHRibF9mc2dsbXVsX29wICMgUU5BTiB4IERFTk9STQorCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBRTkFOIHggU05BTgorCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCisJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKKworCXNob3J0CQlmc2dsbXVsX25vcm0JCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggTk9STQorCXNob3J0CQlmc2dsbXVsX3plcm8JCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggWkVSTworCXNob3J0CQlmc2dsbXVsX2luZl9zcmMJCS0gdGJsX2ZzZ2xtdWxfb3AgIyBOT1JNIHggSU5GCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3FuYW4JLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBRTkFOCisJc2hvcnQJCWZzZ2xtdWxfbm9ybQkJLSB0YmxfZnNnbG11bF9vcCAjIE5PUk0geCBERU5PUk0KKwlzaG9ydAkJZnNnbG11bF9yZXNfc25hbgktIHRibF9mc2dsbXVsX29wICMgTk9STSB4IFNOQU4KKwlzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIworCXNob3J0CQl0YmxfZnNnbG11bF9vcAkJLSB0YmxfZnNnbG11bF9vcCAjCisKKwlzaG9ydAkJZnNnbG11bF9yZXNfc25hbgktIHRibF9mc2dsbXVsX29wICMgU05BTiB4IE5PUk0KKwlzaG9ydAkJZnNnbG11bF9yZXNfc25hbgktIHRibF9mc2dsbXVsX29wICMgU05BTiB4IFpFUk8KKwlzaG9ydAkJZnNnbG11bF9yZXNfc25hbgktIHRibF9mc2dsbXVsX29wICMgU05BTiB4IElORgorCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBTTkFOIHggUU5BTgorCXNob3J0CQlmc2dsbXVsX3Jlc19zbmFuCS0gdGJsX2ZzZ2xtdWxfb3AgIyBTTkFOIHggREVOT1JNCisJc2hvcnQJCWZzZ2xtdWxfcmVzX3NuYW4JLSB0YmxfZnNnbG11bF9vcCAjIFNOQU4geCBTTkFOCisJc2hvcnQJCXRibF9mc2dsbXVsX29wCQktIHRibF9mc2dsbXVsX29wICMKKwlzaG9ydAkJdGJsX2ZzZ2xtdWxfb3AJCS0gdGJsX2ZzZ2xtdWxfb3AgIworCitmc2dsbXVsX3Jlc19vcGVycjoKKwlicmEubAkJcmVzX29wZXJyCitmc2dsbXVsX3Jlc19zbmFuOgorCWJyYS5sCQlyZXNfc25hbgorZnNnbG11bF9yZXNfcW5hbjoKKwlicmEubAkJcmVzX3FuYW4KK2ZzZ2xtdWxfemVybzoKKwlicmEubAkJZm11bF96ZXJvCitmc2dsbXVsX2luZl9zcmM6CisJYnJhLmwJCWZtdWxfaW5mX3NyYworZnNnbG11bF9pbmZfZHN0OgorCWJyYS5sCQlmbXVsX2luZl9kc3QKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmc2dsZGl2KCk6IGVtdWxhdGVzIHRoZSBmc2dsZGl2IGluc3RydWN0aW9uCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJc2NhbGVfdG9femVyb19zcmMoKSAtIHNjYWxlIHNyYyBleHBvbmVudCB0byB6ZXJvCQkjCisjCXNjYWxlX3RvX3plcm9fZHN0KCkgLSBzY2FsZSBkc3QgZXhwb25lbnQgdG8gemVybwkJIworIwl1bmZfcmVzNCgpIC0gcmV0dXJuIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdCBmb3Igc2dsb3AJCSMKKyMJb3ZmX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0CQkJIworIwlyZXNfcW5hbigpIC0gcmV0dXJuIFFOQU4gcmVzdWx0CQkJCQkjCisjCXJlc19zbmFuKCkgLSByZXR1cm4gU05BTiByZXN1bHQJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWEwID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gc291cmNlIG9wZXJhbmQJCSMKKyMJYTEgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBkZXN0aW5hdGlvbiBvcGVyYW5kCQkjCisjCWQwICBybmQgcHJlYyxtb2RlCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gcmVzdWx0CQkJCQkJCSMKKyMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlIYW5kbGUgTkFOcywgaW5maW5pdGllcywgYW5kIHplcm9lcyBhcyBzcGVjaWFsIGNhc2VzLiBEaXZpZGUJIworIyBub3Jtcy9kZW5vcm1zIGludG8gZXh0L3NnbC9kYmwgcHJlY2lzaW9uLgkJCQkjCisjCUZvciBub3Jtcy9kZW5vcm1zLCBzY2FsZSB0aGUgZXhwb25lbnRzIHN1Y2ggdGhhdCBhIGRpdmlkZQkjCisjIGluc3RydWN0aW9uIHdvbid0IGNhdXNlIGFuIGV4Y2VwdGlvbi4gVXNlIHRoZSByZWd1bGFyIGZzZ2xkaXYgdG8JIworIyBjb21wdXRlIGEgcmVzdWx0LiBDaGVjayBpZiB0aGUgcmVndWxhciBvcGVyYW5kcyB3b3VsZCBoYXZlIHRha2VuCSMKKyMgYW4gZXhjZXB0aW9uLiBJZiBzbywgcmV0dXJuIHRoZSBkZWZhdWx0IG92ZXJmbG93L3VuZGVyZmxvdyByZXN1bHQJIworIyBhbmQgcmV0dXJuIHRoZSBFWE9QIGlmIGV4Y2VwdGlvbnMgYXJlIGVuYWJsZWQuIEVsc2UsIHNjYWxlIHRoZQkjCisjIHJlc3VsdCBvcGVyYW5kIHRvIHRoZSBwcm9wZXIgZXhwb25lbnQuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZzZ2xkaXYKK2ZzZ2xkaXY6CisJbW92LmwJCSVkMCxMX1NDUjMoJWE2KQkJIyBzdG9yZSBybmQgaW5mbworCisJY2xyLncJCSVkMQorCW1vdi5iCQlEVEFHKCVhNiksJWQxCisJbHNsLmIJCSYweDMsJWQxCisJb3IuYgkJU1RBRyglYTYpLCVkMQkJIyBjb21iaW5lIHNyYyB0YWdzCisKKwlibmUudwkJZnNnbGRpdl9ub3Rfbm9ybQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CisKKyMKKyMgRElWSURFOiBOT1JNcyBhbmQgREVOT1JNcyBPTkxZIQorIworZnNnbGRpdl9ub3JtOgorCW1vdi53CQlEU1RfRVgoJWExKSxGUF9TQ1IxX0VYKCVhNikKKwltb3YubAkJRFNUX0hJKCVhMSksRlBfU0NSMV9ISSglYTYpCisJbW92LmwJCURTVF9MTyglYTEpLEZQX1NDUjFfTE8oJWE2KQorCisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisKKwlic3IubAkJc2NhbGVfdG9femVyb19zcmMJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yIDEKKwltb3YubAkJJWQwLC0oJXNwKQkJIyBzYXZlIHNjYWxlIGZhY3RvciAxCisKKwlic3IubAkJc2NhbGVfdG9femVyb19kc3QJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yIDIKKworCW5lZy5sCQkoJXNwKQkJCSMgUy5GLiA9IHNjYWxlMSAtIHNjYWxlMgorCWFkZC5sCQklZDAsKCVzcCkKKworCW1vdi53CQkyK0xfU0NSMyglYTYpLCVkMQkjIGZldGNoIHByZWNpc2lvbixtb2RlCisJbHNyLmIJCSYweDYsJWQxCisJbW92LmwJCSglc3ApKywlZDAKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4N2ZmZQorCWJsZS53CQlmc2dsZGl2X21heV9vdmZsCisKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4MDAwMAkjIHdpbGwgcmVzdWx0IHVuZGVyZmxvdz8KKwliZXEudwkJZnNnbGRpdl9tYXlfdW5mbAkjIG1heWJlCisJYmd0LncJCWZzZ2xkaXZfdW5mbAkJIyB5ZXM7IGdvIGhhbmRsZSB1bmRlcmZsb3cKKworZnNnbGRpdl9ub3JtYWw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzYXZlIEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNnbGRpdi54CUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBzZ2wgZGl2aWRlCisKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIEZQU1IKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKK2ZzZ2xkaXZfbm9ybWFsX2V4aXQ6CisJZm1vdm0ueAkJJjB4ODAsRlBfU0NSMCglYTYpCSMgc3RvcmUgcmVzdWx0IG9uIHN0YWNrCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgbG9hZCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiByZXN1bHQgaW4gZnAwCisJcnRzCisKK2ZzZ2xkaXZfbWF5X292Zmw6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBzZXQgRlBTUgorCisJZnNnbGRpdi54CUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBkaXZpZGUKKworCWZtb3YubAkJJWZwc3IsJWQxCisJZm1vdi5sCQkmMHgwLCVmcGNyCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgsTgorCisJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgcmVzdWx0IHRvIHN0YWNrCisJbW92LncJCSglc3ApLCVkMQkJIyBmZXRjaCBuZXcgZXhwb25lbnQKKwlhZGQubAkJJjB4Yywlc3AJCSMgY2xlYXIgcmVzdWx0CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwljbXAubAkJJWQxLCYweDdmZmYJCSMgZGlkIGRpdmlkZSBvdmVyZmxvdz8KKwlibHQuYgkJZnNnbGRpdl9ub3JtYWxfZXhpdAorCitmc2dsZGl2X292ZmxfdHN0OgorCW9yLncJCSZvdmZsX2lueF9tYXNrLDIrVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAorCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgxMywlZDEJCSMgaXMgT1ZGTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZzZ2xkaXZfb3ZmbF9lbmEJIyB5ZXMKKworZnNnbGRpdl9vdmZsX2RpczoKKwlidHN0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBpcyByZXN1bHQgbmVnYXRpdmUKKwlzbmUJCSVkMQkJCSMgc2V0IHNpZ24gcGFyYW0gYWNjb3JkaW5nbHkKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3MgcHJlYzpybmQKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBraWxsIHByZWNpc2lvbgorCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IElORiBpZiBhcHBsaWNhYmxlCisJZm1vdm0ueAkJKCVhMCksJjB4ODAJCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCitmc2dsZGl2X292ZmxfZW5hOgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIG1vdmUgcmVzdWx0IHRvIHN0YWNrCisKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCXN1YmkubAkJJjB4NjAwMCwlZDEJCSMgc3VidHJhY3QgbmV3IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCQkjIGNsZWFyIG1zIGJpdAorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBvbGQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSxGUF9TQ1IwX0VYKCVhNikJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg0MAkjIHJldHVybiBFWE9QIGluIGZwMQorCWJyYS5iCQlmc2dsZGl2X292ZmxfZGlzCisKK2ZzZ2xkaXZfdW5mbDoKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKworCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCSZyel9tb2RlKjB4MTAsJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc2dsZGl2LngJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIHNnbCBkaXZpZGUKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgwYiwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZzZ2xkaXZfdW5mbF9lbmEJIyB5ZXMKKworZnNnbGRpdl91bmZsX2RpczoKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0CisKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiByZXN1bHQgYWRkcgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEJCSMgcGFzczogcm5kIHByZWMsbW9kZQorCWJzci5sCQl1bmZfcmVzNAkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgJ1onIGJpdCBtYXkgaGF2ZSBiZWVuIHNldAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBVTkZMIGlzIGVuYWJsZWQuCisjCitmc2dsZGl2X3VuZmxfZW5hOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNnbGRpdi54CUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBzZ2wgZGl2aWRlCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJZm1vdm0ueAkJJjB4NDAsRlBfU0NSMCglYTYpCSMgc2F2ZSByZXN1bHQgdG8gc3RhY2sKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCWFkZGkubAkJJjB4NjAwMCwlZDEJCSMgYWRkIGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCQkjIGNsZWFyIHRvcCBiaXQKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgb2xkIHNpZ24sIG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJYnJhLmIJCWZzZ2xkaXZfdW5mbF9kaXMKKworIworIyB0aGUgZGl2aWRlIG9wZXJhdGlvbiBNQVkgdW5kZXJmbG93OgorIworZnNnbGRpdl9tYXlfdW5mbDoKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZzZ2xkaXYueAlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgc2dsIGRpdmlkZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwlmYWJzLngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKKwlmY21wLmIJCSVmcDEsJjB4MQkJIyBpcyB8cmVzdWx0fCA+IDEuYj8KKwlmYmd0LncJCWZzZ2xkaXZfbm9ybWFsX2V4aXQJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCisJZmJsdC53CQlmc2dsZGl2X3VuZmwJCSMgeWVzOyB1bmRlcmZsb3cgb2NjdXJyZWQKKworIworIyB3ZSBzdGlsbCBkb24ndCBrbm93IGlmIHVuZGVyZmxvdyBvY2N1cnJlZC4gcmVzdWx0IGlzIH4gZXF1YWwgdG8gMS4gYnV0LAorIyB3ZSBkb24ndCBrbm93IGlmIHRoZSByZXN1bHQgd2FzIGFuIHVuZGVyZmxvdyB0aGF0IHJvdW5kZWQgdXAgdG8gYSAxCisjIG9yIGEgbm9ybWFsaXplZCBudW1iZXIgdGhhdCByb3VuZGVkIGRvd24gdG8gYSAxLiBzbywgcmVkbyB0aGUgZW50aXJlCisjIG9wZXJhdGlvbiB1c2luZyBSWiBhcyB0aGUgcm91bmRpbmcgbW9kZSB0byBzZWUgd2hhdCB0aGUgcHJlLXJvdW5kZWQKKyMgcmVzdWx0IGlzLiB0aGlzIGNhc2Ugc2hvdWxkIGJlIHJlbGF0aXZlbHkgcmFyZS4KKyMKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcCBpbnRvICVmcDEKKworCWNsci5sCQklZDEJCQkjIGNsZWFyIHNjcmF0Y2ggcmVnaXN0ZXIKKwlvcmkuYgkJJnJ6X21vZGUqMHgxMCwlZDEJIyBmb3JjZSBSWiBybmQgbW9kZQorCisJZm1vdi5sCQklZDEsJWZwY3IJCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNnbGRpdi54CUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBzZ2wgZGl2aWRlCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWZhYnMueAkJJWZwMQkJCSMgbWFrZSBhYnNvbHV0ZSB2YWx1ZQorCWZjbXAuYgkJJWZwMSwmMHgxCQkjIGlzIHxyZXN1bHR8IDwgMS5iPworCWZiZ2UudwkJZnNnbGRpdl9ub3JtYWxfZXhpdAkjIG5vOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKKwlicmEudwkJZnNnbGRpdl91bmZsCQkjIHllczsgdW5kZXJmbG93IG9jY3VycmVkCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBEaXZpZGU6IGlucHV0cyBhcmUgbm90IGJvdGggbm9ybWFsaXplZDsgd2hhdCBhcmUgdGhleT8KKyMKK2ZzZ2xkaXZfbm90X25vcm06CisJbW92LncJCSh0YmxfZnNnbGRpdl9vcC5iLCVwYywlZDEudyoyKSwlZDEKKwlqbXAJCSh0YmxfZnNnbGRpdl9vcC5iLCVwYywlZDEudyoxKQorCisJc3diZWcJCSY0OAordGJsX2ZzZ2xkaXZfb3A6CisJc2hvcnQJCWZzZ2xkaXZfbm9ybQkJLSB0YmxfZnNnbGRpdl9vcCAjIE5PUk0gLyBOT1JNCisJc2hvcnQJCWZzZ2xkaXZfaW5mX2xvYWQJLSB0YmxfZnNnbGRpdl9vcCAjIE5PUk0gLyBaRVJPCisJc2hvcnQJCWZzZ2xkaXZfemVyb19sb2FkCS0gdGJsX2ZzZ2xkaXZfb3AgIyBOT1JNIC8gSU5GCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIE5PUk0gLyBRTkFOCisJc2hvcnQJCWZzZ2xkaXZfbm9ybQkJLSB0YmxfZnNnbGRpdl9vcCAjIE5PUk0gLyBERU5PUk0KKwlzaG9ydAkJZnNnbGRpdl9yZXNfc25hbgktIHRibF9mc2dsZGl2X29wICMgTk9STSAvIFNOQU4KKwlzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIworCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCisKKwlzaG9ydAkJZnNnbGRpdl96ZXJvX2xvYWQJLSB0YmxfZnNnbGRpdl9vcCAjIFpFUk8gLyBOT1JNCisJc2hvcnQJCWZzZ2xkaXZfcmVzX29wZXJyCS0gdGJsX2ZzZ2xkaXZfb3AgIyBaRVJPIC8gWkVSTworCXNob3J0CQlmc2dsZGl2X3plcm9fbG9hZAktIHRibF9mc2dsZGl2X29wICMgWkVSTyAvIElORgorCXNob3J0CQlmc2dsZGl2X3Jlc19xbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBaRVJPIC8gUU5BTgorCXNob3J0CQlmc2dsZGl2X3plcm9fbG9hZAktIHRibF9mc2dsZGl2X29wICMgWkVSTyAvIERFTk9STQorCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBaRVJPIC8gU05BTgorCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCisJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKKworCXNob3J0CQlmc2dsZGl2X2luZl9kc3QJCS0gdGJsX2ZzZ2xkaXZfb3AgIyBJTkYgLyBOT1JNCisJc2hvcnQJCWZzZ2xkaXZfaW5mX2RzdAkJLSB0YmxfZnNnbGRpdl9vcCAjIElORiAvIFpFUk8KKwlzaG9ydAkJZnNnbGRpdl9yZXNfb3BlcnIJLSB0YmxfZnNnbGRpdl9vcCAjIElORiAvIElORgorCXNob3J0CQlmc2dsZGl2X3Jlc19xbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBJTkYgLyBRTkFOCisJc2hvcnQJCWZzZ2xkaXZfaW5mX2RzdAkJLSB0YmxfZnNnbGRpdl9vcCAjIElORiAvIERFTk9STQorCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBJTkYgLyBTTkFOCisJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIworCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFFOQU4gLyBOT1JNCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFFOQU4gLyBaRVJPCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3FuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFFOQU4gLyBJTkYKKwlzaG9ydAkJZnNnbGRpdl9yZXNfcW5hbgktIHRibF9mc2dsZGl2X29wICMgUU5BTiAvIFFOQU4KKwlzaG9ydAkJZnNnbGRpdl9yZXNfcW5hbgktIHRibF9mc2dsZGl2X29wICMgUU5BTiAvIERFTk9STQorCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBRTkFOIC8gU05BTgorCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCisJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKKworCXNob3J0CQlmc2dsZGl2X25vcm0JCS0gdGJsX2ZzZ2xkaXZfb3AgIyBERU5PUk0gLyBOT1JNCisJc2hvcnQJCWZzZ2xkaXZfaW5mX2xvYWQJLSB0YmxfZnNnbGRpdl9vcCAjIERFTk9STSAvIFpFUk8KKwlzaG9ydAkJZnNnbGRpdl96ZXJvX2xvYWQJLSB0YmxfZnNnbGRpdl9vcCAjIERFTk9STSAvIElORgorCXNob3J0CQlmc2dsZGl2X3Jlc19xbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBERU5PUk0gLyBRTkFOCisJc2hvcnQJCWZzZ2xkaXZfbm9ybQkJLSB0YmxfZnNnbGRpdl9vcCAjIERFTk9STSAvIERFTk9STQorCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBERU5PUk0gLyBTTkFOCisJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKKwlzaG9ydAkJdGJsX2ZzZ2xkaXZfb3AJCS0gdGJsX2ZzZ2xkaXZfb3AgIworCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3NuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFNOQU4gLyBOT1JNCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3NuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFNOQU4gLyBaRVJPCisJc2hvcnQJCWZzZ2xkaXZfcmVzX3NuYW4JLSB0YmxfZnNnbGRpdl9vcCAjIFNOQU4gLyBJTkYKKwlzaG9ydAkJZnNnbGRpdl9yZXNfc25hbgktIHRibF9mc2dsZGl2X29wICMgU05BTiAvIFFOQU4KKwlzaG9ydAkJZnNnbGRpdl9yZXNfc25hbgktIHRibF9mc2dsZGl2X29wICMgU05BTiAvIERFTk9STQorCXNob3J0CQlmc2dsZGl2X3Jlc19zbmFuCS0gdGJsX2ZzZ2xkaXZfb3AgIyBTTkFOIC8gU05BTgorCXNob3J0CQl0YmxfZnNnbGRpdl9vcAkJLSB0YmxfZnNnbGRpdl9vcCAjCisJc2hvcnQJCXRibF9mc2dsZGl2X29wCQktIHRibF9mc2dsZGl2X29wICMKKworZnNnbGRpdl9yZXNfcW5hbjoKKwlicmEubAkJcmVzX3FuYW4KK2ZzZ2xkaXZfcmVzX3NuYW46CisJYnJhLmwJCXJlc19zbmFuCitmc2dsZGl2X3Jlc19vcGVycjoKKwlicmEubAkJcmVzX29wZXJyCitmc2dsZGl2X2luZl9sb2FkOgorCWJyYS5sCQlmZGl2X2luZl9sb2FkCitmc2dsZGl2X3plcm9fbG9hZDoKKwlicmEubAkJZmRpdl96ZXJvX2xvYWQKK2ZzZ2xkaXZfaW5mX2RzdDoKKwlicmEubAkJZmRpdl9pbmZfZHN0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZmFkZCgpOiBlbXVsYXRlcyB0aGUgZmFkZCBpbnN0cnVjdGlvbgkJCQkjCisjCWZzYWRkKCk6IGVtdWxhdGVzIHRoZSBmYWRkIGluc3RydWN0aW9uCQkJCSMKKyMJZmRhZGQoKTogZW11bGF0ZXMgdGhlIGZkYWRkIGluc3RydWN0aW9uCQkJCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWFkZHN1Yl9zY2FsZXIyKCkgLSBzY2FsZSB0aGUgb3BlcmFuZHMgc28gdGhleSB3b24ndCB0YWtlIGV4YwkjCisjCW92Zl9yZXMoKSAtIHJldHVybiBkZWZhdWx0IG92ZXJmbG93IHJlc3VsdAkJCSMKKyMJdW5mX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgdW5kZXJmbG93IHJlc3VsdAkJCSMKKyMJcmVzX3FuYW4oKSAtIHNldCBRTkFOIHJlc3VsdAkJCQkJIworIwlyZXNfc25hbigpIC0gc2V0IFNOQU4gcmVzdWx0CQkJCQkjCisjCXJlc19vcGVycigpIC0gc2V0IE9QRVJSIHJlc3VsdAkJCQkJIworIwlzY2FsZV90b196ZXJvX3NyYygpIC0gc2V0IHNyYyBvcGVyYW5kIGV4cG9uZW50IGVxdWFsIHRvIHplcm8JIworIwlzY2FsZV90b196ZXJvX2RzdCgpIC0gc2V0IGRzdCBvcGVyYW5kIGV4cG9uZW50IGVxdWFsIHRvIHplcm8JIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlhMSA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIGRlc3RpbmF0aW9uIG9wZXJhbmQJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IHJlc3VsdAkJCQkJCQkjCisjCWZwMSA9IEVYT1AgKGlmIGV4Y2VwdGlvbiBvY2N1cnJlZCkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSGFuZGxlIE5BTnMsIGluZmluaXRpZXMsIGFuZCB6ZXJvZXMgYXMgc3BlY2lhbCBjYXNlcy4gRGl2aWRlCSMKKyMgbm9ybXMgaW50byBleHRlbmRlZCwgc2luZ2xlLCBhbmQgZG91YmxlIHByZWNpc2lvbi4JCQkjCisjCURvIGFkZGl0aW9uIGFmdGVyIHNjYWxpbmcgZXhwb25lbnRzIHN1Y2ggdGhhdCBleGNlcHRpb24gd29uJ3QJIworIyBvY2N1ci4gVGhlbiwgY2hlY2sgcmVzdWx0IGV4cG9uZW50IHRvIHNlZSBpZiBleGNlcHRpb24gd291bGQgaGF2ZQkjCisjIG9jY3VycmVkLiBJZiBzbywgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGFuZCBtYXliZSBFWE9QLiBFbHNlLCBpbnNlcnQJIworIyB0aGUgY29ycmVjdCByZXN1bHQgZXhwb25lbnQgYW5kIHJldHVybi4gU2V0IEZQU1IgYml0cyBhcyBhcHByb3ByaWF0ZS4JIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJZnNhZGQKK2ZzYWRkOgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZzX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgc2dsIHByZWMKKwlicmEuYgkJZmFkZAorCisJZ2xvYmFsCQlmZGFkZAorZmRhZGQ6CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKKwlvcmkuYgkJJmRfbW9kZSoweDEwLCVkMAkjIGluc2VydCBkYmwgcHJlYworCisJZ2xvYmFsCQlmYWRkCitmYWRkOgorCW1vdi5sCQklZDAsTF9TQ1IzKCVhNikJCSMgc3RvcmUgcm5kIGluZm8KKworCWNsci53CQklZDEKKwltb3YuYgkJRFRBRyglYTYpLCVkMQorCWxzbC5iCQkmMHgzLCVkMQorCW9yLmIJCVNUQUcoJWE2KSwlZDEJCSMgY29tYmluZSBzcmMgdGFncworCisJYm5lLncJCWZhZGRfbm90X25vcm0JCSMgb3B0aW1pemUgb24gbm9uLW5vcm0gaW5wdXQKKworIworIyBBREQ6IG5vcm1zIGFuZCBkZW5vcm1zCisjCitmYWRkX25vcm06CisJYnNyLmwJCWFkZHN1Yl9zY2FsZXIyCQkjIHNjYWxlIGV4cG9uZW50cworCitmYWRkX3plcm9fZW50cnk6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmYWRkLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBhZGQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZm1vdi5sCQklZnBzciwlZDEJCSMgZmV0Y2ggSU5FWDIsTixaCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIGV4YyBhbmQgY2NvZGUgYml0cworCisJZmJlcS53CQlmYWRkX3plcm9fZXhpdAkJIyBpZiByZXN1bHQgaXMgemVybywgZW5kIG5vdworCisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCisJZm1vdm0ueAkJJjB4MDEsLSglc3ApCQkjIHNhdmUgcmVzdWx0IHRvIHN0YWNrCisKKwltb3YudwkJMitMX1NDUjMoJWE2KSwlZDEKKwlsc3IuYgkJJjB4NiwlZDEKKworCW1vdi53CQkoJXNwKSwlZDIJCSMgZmV0Y2ggbmV3IHNpZ24sIGV4cAorCWFuZGkubAkJJjB4N2ZmZiwlZDIJCSMgc3RyaXAgc2lnbgorCXN1Yi5sCQklZDAsJWQyCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisKKwljbXAubAkJJWQyLCh0YmxfZmFkZF9vdmZsLmIsJXBjLCVkMS53KjQpICMgaXMgaXQgYW4gb3ZlcmZsb3c/CisJYmdlLmIJCWZhZGRfb3ZmbAkJIyB5ZXMKKworCWNtcC5sCQklZDIsKHRibF9mYWRkX3VuZmwuYiwlcGMsJWQxLncqNCkgIyBpcyBpdCBhbiB1bmRlcmZsb3c/CisJYmx0LncJCWZhZGRfdW5mbAkJIyB5ZXMKKwliZXEudwkJZmFkZF9tYXlfdW5mbAkJIyBtYXliZTsgZ28gZmluZCBvdXQKKworZmFkZF9ub3JtYWw6CisJbW92LncJCSglc3ApLCVkMQorCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBzaWduCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IHNpZ24sbmV3IGV4cAorCW1vdi53CQklZDEsKCVzcCkJCSMgaW5zZXJ0IG5ldyBleHBvbmVudAorCisJZm1vdm0ueAkJKCVzcCkrLCYweDgwCQkjIHJldHVybiByZXN1bHQgaW4gZnAwCisKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJcnRzCisKK2ZhZGRfemVyb19leGl0OgorIwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyByZXR1cm4gemVybyBpbiBmcDAKKwlydHMKKwordGJsX2ZhZGRfb3ZmbDoKKwlsb25nCQkweDdmZmYJCQkjIGV4dCBvdmZsCisJbG9uZwkJMHg0MDdmCQkJIyBzZ2wgb3ZmbAorCWxvbmcJCTB4NDNmZgkJCSMgZGJsIG92ZmwKKwordGJsX2ZhZGRfdW5mbDoKKwlsb25nCSAgICAgICAgMHgwMDAwCQkJIyBleHQgdW5mbAorCWxvbmcJCTB4M2Y4MQkJCSMgc2dsIHVuZmwKKwlsb25nCQkweDNjMDEJCQkjIGRibCB1bmZsCisKK2ZhZGRfb3ZmbDoKKwlvci5sCQkmb3ZmbF9pbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4CisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDEzLCVkMQkJIyBpcyBPVkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZmFkZF9vdmZsX2VuYQkJIyB5ZXMKKworCWFkZC5sCQkmMHhjLCVzcAorZmFkZF9vdmZsX2RpczoKKwlidHN0CQkmbmVnX2JpdCxGUFNSX0NDKCVhNikJIyBpcyByZXN1bHQgbmVnYXRpdmU/CisJc25lCQklZDEJCQkjIHNldCBzaWduIHBhcmFtIGFjY29yZGluZ2x5CisJbW92LmwJCUxfU0NSMyglYTYpLCVkMAkJIyBwYXNzIHByZWM6cm5kCisJYnNyLmwJCW92Zl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgSU5GLE4gaWYgYXBwbGljYWJsZQorCWZtb3ZtLngJCSglYTApLCYweDgwCQkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJcnRzCisKK2ZhZGRfb3ZmbF9lbmE6CisJbW92LmIJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZmFkZF9vdmZsX2VuYV9zZAkjIG5vOyBwcmVjID0gc2dsIG9yIGRibAorCitmYWRkX292ZmxfZW5hX2NvbnQ6CisJbW92LncJCSglc3ApLCVkMQorCWFuZGkudwkJJjB4ODAwMCwlZDEJCSMga2VlcCBzaWduCisJc3ViaS5sCQkmMHg2MDAwLCVkMgkJIyBhZGQgZXh0cmEgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDIKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgc2lnbixuZXcgZXhwCisJbW92LncJCSVkMSwoJXNwKQkJIyBpbnNlcnQgbmV3IGV4cG9uZW50CisKKwlmbW92bS54CQkoJXNwKSssJjB4NDAJCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJYnJhLmIJCWZhZGRfb3ZmbF9kaXMKKworZmFkZF9vdmZsX2VuYV9zZDoKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4ODAJIyBsb2FkIGRzdCBvcAorCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4MzAsJWQxCQkjIGtlZXAgcm5kIG1vZGUKKwlmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgorCisJZmFkZC54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgYWRkCisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJYWRkLmwJCSYweGMsJXNwCisJZm1vdm0ueAkJJjB4MDEsLSglc3ApCisJYnJhLmIJCWZhZGRfb3ZmbF9lbmFfY29udAorCitmYWRkX3VuZmw6CisJYnNldAkJJnVuZmxfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBzZXQgdW5mbCBleGMgYml0CisKKwlhZGQubAkJJjB4Yywlc3AKKworCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCSZyel9tb2RlKjB4MTAsJWZwY3IJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmYWRkLngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBhZGQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWCxOCisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDBiLCVkMQkJIyBpcyBVTkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZmFkZF91bmZsX2VuYQkJIyB5ZXMKKworZmFkZF91bmZsX2RpczoKKwlmbW92bS54CQkmMHg4MCxGUF9TQ1IwKCVhNikJIyBzdG9yZSBvdXQgcmVzdWx0CisKKwlsZWEJCUZQX1NDUjAoJWE2KSwlYTAJIyBwYXNzOiByZXN1bHQgYWRkcgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEJCSMgcGFzczogcm5kIHByZWMsbW9kZQorCWJzci5sCQl1bmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgJ1onIGJpdCBtYXkgaGF2ZSBiZWVuIHNldAorCWZtb3ZtLngJCUZQX1NDUjAoJWE2KSwmMHg4MAkjIHJldHVybiBkZWZhdWx0IHJlc3VsdCBpbiBmcDAKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJcnRzCisKK2ZhZGRfdW5mbF9lbmE6CisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgbG9hZCBkc3Qgb3AKKworCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CisJYm5lLmIJCWZhZGRfdW5mbF9lbmFfc2QJIyBubzsgc2dsIG9yIGRibAorCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKK2ZhZGRfdW5mbF9lbmFfY29udDoKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZmFkZC54CQlGUF9TQ1IwKCVhNiksJWZwMQkjIGV4ZWN1dGUgbXVsdGlwbHkKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlmbW92bS54CQkmMHg0MCxGUF9TQ1IwKCVhNikJIyBzYXZlIHJlc3VsdCB0byBzdGFjaworCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9CisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlhZGRpLmwJCSYweDYwMDAsJWQxCQkjIGFkZCBuZXcgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEJCSMgY2xlYXIgdG9wIGJpdAorCW9yLncJCSVkMiwlZDEJCQkjIGNvbmNhdCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlicmEudwkJZmFkZF91bmZsX2RpcworCitmYWRkX3VuZmxfZW5hX3NkOgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDMwLCVkMQkJIyB1c2Ugb25seSBybmQgbW9kZQorCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisKKwlicmEuYgkJZmFkZF91bmZsX2VuYV9jb250CisKKyMKKyMgcmVzdWx0IGlzIGVxdWFsIHRvIHRoZSBzbWFsbGVzdCBub3JtYWxpemVkIG51bWJlciBpbiB0aGUgc2VsZWN0ZWQgcHJlY2lzaW9uCisjIGlmIHRoZSBwcmVjaXNpb24gaXMgZXh0ZW5kZWQsIHRoaXMgcmVzdWx0IGNvdWxkIG5vdCBoYXZlIGNvbWUgZnJvbSBhbgorIyB1bmRlcmZsb3cgdGhhdCByb3VuZGVkIHVwLgorIworZmFkZF9tYXlfdW5mbDoKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHhjMCwlZDEKKwliZXEudwkJZmFkZF9ub3JtYWwJCSMgeWVzOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKKworCW1vdi5sCQkweDQoJXNwKSwlZDEJCSMgZXh0cmFjdCBoaShtYW4pCisJY21waS5sCQklZDEsJjB4ODAwMDAwMDAJCSMgaXMgaGkobWFuKSA9IDB4ODAwMDAwMDA/CisJYm5lLncJCWZhZGRfbm9ybWFsCQkjIG5vOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKKworCXRzdC5sCQkweDgoJXNwKQkJIyBpcyBsbyhtYW4pID0gMHgwPworCWJuZS53CQlmYWRkX25vcm1hbAkJIyBubzsgbm8gdW5kZXJmbG93IG9jY3VycmVkCisKKwlidHN0CQkmaW5leDJfYml0LEZQU1JfRVhDRVBUKCVhNikgIyBpcyBJTkVYMiBzZXQ/CisJYmVxLncJCWZhZGRfbm9ybWFsCQkjIG5vOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKKworIworIyBvaywgc28gbm93IHRoZSByZXN1bHQgaGFzIGEgZXhwb25lbnQgZXF1YWwgdG8gdGhlIHNtYWxsZXN0IG5vcm1hbGl6ZWQKKyMgZXhwb25lbnQgZm9yIHRoZSBzZWxlY3RlZCBwcmVjaXNpb24uIGFsc28sIHRoZSBtYW50aXNzYSBpcyBlcXVhbCB0bworIyAweDgwMDAwMDAwMDAwMDAwMDAgYW5kIHRoaXMgbWFudGlzc2EgaXMgdGhlIHJlc3VsdCBvZiByb3VuZGluZyBub24temVybworIyBnLHIscy4KKyMgbm93LCB3ZSBtdXN0IGRldGVybWluZSB3aGV0aGVyIHRoZSBwcmUtcm91bmRlZCByZXN1bHQgd2FzIGFuIHVuZGVyZmxvdworIyByb3VuZGVkICJ1cCIgb3IgYSBub3JtYWxpemVkIG51bWJlciByb3VuZGVkICJkb3duIi4KKyMgc28sIHdlIGRvIHRoaXMgYmUgcmUtZXhlY3V0aW5nIHRoZSBhZGQgdXNpbmcgUlogYXMgdGhlIHJvdW5kaW5nIG1vZGUgYW5kCisjIHNlZWluZyBpZiB0aGUgbmV3IHJlc3VsdCBpcyBzbWFsbGVyIG9yIGVxdWFsIHRvIHRoZSBjdXJyZW50IHJlc3VsdC4KKyMKKwlmbW92bS54CQlGUF9TQ1IxKCVhNiksJjB4NDAJIyBsb2FkIGRzdCBvcCBpbnRvIGZwMQorCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGtlZXAgcm5kIHByZWMKKwlvcmkuYgkJJnJ6X21vZGUqMHgxMCwlZDEJIyBpbnNlcnQgcm5kIG1vZGUKKwlmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmYWRkLngJCUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBhZGQKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlmYWJzLngJCSVmcDAJCQkjIGNvbXBhcmUgYWJzb2x1dGUgdmFsdWVzCisJZmFicy54CQklZnAxCisJZmNtcC54CQklZnAwLCVmcDEJCSMgaXMgZmlyc3QgcmVzdWx0ID4gc2Vjb25kPworCisJZmJndC53CQlmYWRkX3VuZmwJCSMgeWVzOyBpdCdzIGFuIHVuZGVyZmxvdworCWJyYS53CQlmYWRkX25vcm1hbAkJIyBubzsgaXQncyBub3QgYW4gdW5kZXJmbG93CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgQWRkOiBpbnB1dHMgYXJlIG5vdCBib3RoIG5vcm1hbGl6ZWQ7IHdoYXQgYXJlIHRoZXk/CisjCitmYWRkX25vdF9ub3JtOgorCW1vdi53CQkodGJsX2ZhZGRfb3AuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX2ZhZGRfb3AuYiwlcGMsJWQxLncqMSkKKworCXN3YmVnCQkmNDgKK3RibF9mYWRkX29wOgorCXNob3J0CQlmYWRkX25vcm0JLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBOT1JNCisJc2hvcnQJCWZhZGRfemVyb19zcmMJLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBaRVJPCisJc2hvcnQJCWZhZGRfaW5mX3NyYwktIHRibF9mYWRkX29wICMgTk9STSArIElORgorCXNob3J0CQlmYWRkX3Jlc19xbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgUU5BTgorCXNob3J0CQlmYWRkX25vcm0JLSB0YmxfZmFkZF9vcCAjIE5PUk0gKyBERU5PUk0KKwlzaG9ydAkJZmFkZF9yZXNfc25hbgktIHRibF9mYWRkX29wICMgTk9STSArIFNOQU4KKwlzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCisJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIworCisJc2hvcnQJCWZhZGRfemVyb19kc3QJLSB0YmxfZmFkZF9vcCAjIFpFUk8gKyBOT1JNCisJc2hvcnQJCWZhZGRfemVyb18yCS0gdGJsX2ZhZGRfb3AgIyBaRVJPICsgWkVSTworCXNob3J0CQlmYWRkX2luZl9zcmMJLSB0YmxfZmFkZF9vcCAjIFpFUk8gKyBJTkYKKwlzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgTk9STSArIFFOQU4KKwlzaG9ydAkJZmFkZF96ZXJvX2RzdAktIHRibF9mYWRkX29wICMgWkVSTyArIERFTk9STQorCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBOT1JNICsgU05BTgorCXNob3J0CQl0YmxfZmFkZF9vcAktIHRibF9mYWRkX29wICMKKwlzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCisKKwlzaG9ydAkJZmFkZF9pbmZfZHN0CS0gdGJsX2ZhZGRfb3AgIyBJTkYgKyBOT1JNCisJc2hvcnQJCWZhZGRfaW5mX2RzdAktIHRibF9mYWRkX29wICMgSU5GICsgWkVSTworCXNob3J0CQlmYWRkX2luZl8yCS0gdGJsX2ZhZGRfb3AgIyBJTkYgKyBJTkYKKwlzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgTk9STSArIFFOQU4KKwlzaG9ydAkJZmFkZF9pbmZfZHN0CS0gdGJsX2ZhZGRfb3AgIyBJTkYgKyBERU5PUk0KKwlzaG9ydAkJZmFkZF9yZXNfc25hbgktIHRibF9mYWRkX29wICMgTk9STSArIFNOQU4KKwlzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCisJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIworCisJc2hvcnQJCWZhZGRfcmVzX3FuYW4JLSB0YmxfZmFkZF9vcCAjIFFOQU4gKyBOT1JNCisJc2hvcnQJCWZhZGRfcmVzX3FuYW4JLSB0YmxfZmFkZF9vcCAjIFFOQU4gKyBaRVJPCisJc2hvcnQJCWZhZGRfcmVzX3FuYW4JLSB0YmxfZmFkZF9vcCAjIFFOQU4gKyBJTkYKKwlzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgUU5BTiArIFFOQU4KKwlzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgUU5BTiArIERFTk9STQorCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBRTkFOICsgU05BTgorCXNob3J0CQl0YmxfZmFkZF9vcAktIHRibF9mYWRkX29wICMKKwlzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCisKKwlzaG9ydAkJZmFkZF9ub3JtCS0gdGJsX2ZhZGRfb3AgIyBERU5PUk0gKyBOT1JNCisJc2hvcnQJCWZhZGRfemVyb19zcmMJLSB0YmxfZmFkZF9vcCAjIERFTk9STSArIFpFUk8KKwlzaG9ydAkJZmFkZF9pbmZfc3JjCS0gdGJsX2ZhZGRfb3AgIyBERU5PUk0gKyBJTkYKKwlzaG9ydAkJZmFkZF9yZXNfcW5hbgktIHRibF9mYWRkX29wICMgTk9STSArIFFOQU4KKwlzaG9ydAkJZmFkZF9ub3JtCS0gdGJsX2ZhZGRfb3AgIyBERU5PUk0gKyBERU5PUk0KKwlzaG9ydAkJZmFkZF9yZXNfc25hbgktIHRibF9mYWRkX29wICMgTk9STSArIFNOQU4KKwlzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCisJc2hvcnQJCXRibF9mYWRkX29wCS0gdGJsX2ZhZGRfb3AgIworCisJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIFNOQU4gKyBOT1JNCisJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIFNOQU4gKyBaRVJPCisJc2hvcnQJCWZhZGRfcmVzX3NuYW4JLSB0YmxfZmFkZF9vcCAjIFNOQU4gKyBJTkYKKwlzaG9ydAkJZmFkZF9yZXNfc25hbgktIHRibF9mYWRkX29wICMgU05BTiArIFFOQU4KKwlzaG9ydAkJZmFkZF9yZXNfc25hbgktIHRibF9mYWRkX29wICMgU05BTiArIERFTk9STQorCXNob3J0CQlmYWRkX3Jlc19zbmFuCS0gdGJsX2ZhZGRfb3AgIyBTTkFOICsgU05BTgorCXNob3J0CQl0YmxfZmFkZF9vcAktIHRibF9mYWRkX29wICMKKwlzaG9ydAkJdGJsX2ZhZGRfb3AJLSB0YmxfZmFkZF9vcCAjCisKK2ZhZGRfcmVzX3FuYW46CisJYnJhLmwJCXJlc19xbmFuCitmYWRkX3Jlc19zbmFuOgorCWJyYS5sCQlyZXNfc25hbgorCisjCisjIGJvdGggb3BlcmFuZHMgYXJlIFpFUk9lcworIworZmFkZF96ZXJvXzI6CisJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBhcmUgdGhlIHNpZ25zIG9wcG9zaXRlCisJbW92LmIJCURTVF9FWCglYTEpLCVkMQorCWVvci5iCQklZDAsJWQxCisJYm1pLncJCWZhZGRfemVyb18yX2Noa19ybQkjIHdlZWQgb3V0ICgtWkVSTykrKCtaRVJPKQorCisjIHRoZSBzaWducyBhcmUgdGhlIHNhbWUuIHNvIGRldGVybWluZSB3aGV0aGVyIHRoZXkgYXJlIHBvc2l0aXZlIG9yIG5lZ2F0aXZlCisjIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlbHkgc2lnbmVkIHplcm8uCisJdHN0LmIJCSVkMAkJCSMgYXJlIFpFUk9lcyBwb3NpdGl2ZSBvciBuZWdhdGl2ZT8KKwlibWkuYgkJZmFkZF96ZXJvX3JtCQkjIG5lZ2F0aXZlCisJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgcmV0dXJuICtaRVJPCisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaCisJcnRzCisKKyMKKyMgdGhlIFpFUk9lcyBoYXZlIG9wcG9zaXRlIHNpZ25zOgorIyAtIHRoZXJlZm9yZSwgd2UgcmV0dXJuICtaRVJPIGlmIHRoZSByb3VuZGluZyBtb2RlcyBhcmUgUk4sUlosIG9yIFJQLgorIyAtIC1aRVJPIGlzIHJldHVybmVkIGluIHRoZSBjYXNlIG9mIFJNLgorIworZmFkZF96ZXJvXzJfY2hrX3JtOgorCW1vdi5iCQkzK0xfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4MzAsJWQxCQkjIGV4dHJhY3Qgcm5kIG1vZGUKKwljbXBpLmIJCSVkMSwmcm1fbW9kZSoweDEwCSMgaXMgcm5kIG1vZGUgPT0gUk0/CisJYmVxLmIJCWZhZGRfemVyb19ybQkJIyB5ZXMKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyByZXR1cm4gK1pFUk8KKwltb3YuYgkJJnpfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0IFoKKwlydHMKKworZmFkZF96ZXJvX3JtOgorCWZtb3YucwkJJjB4ODAwMDAwMDAsJWZwMAkjIHJldHVybiAtWkVSTworCW1vdi5iCQkmbmVnX2JtYXNrK3pfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IE5FRy9aCisJcnRzCisKKyMKKyMgb25lIG9wZXJhbmQgaXMgYSBaRVJPIGFuZCB0aGUgb3RoZXIgaXMgYSBERU5PUk0gb3IgTk9STS4gc2NhbGUKKyMgdGhlIERFTk9STSBvciBOT1JNIGFuZCBqdW1wIHRvIHRoZSByZWd1bGFyIGZhZGQgcm91dGluZS4KKyMKK2ZhZGRfemVyb19kc3Q6CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgc2NhbGUgdGhlIG9wZXJhbmQKKwljbHIudwkJRlBfU0NSMV9FWCglYTYpCisJY2xyLmwJCUZQX1NDUjFfSEkoJWE2KQorCWNsci5sCQlGUF9TQ1IxX0xPKCVhNikKKwlicmEudwkJZmFkZF96ZXJvX2VudHJ5CQkjIGdvIGV4ZWN1dGUgZmFkZAorCitmYWRkX3plcm9fc3JjOgorCW1vdi53CQlEU1RfRVgoJWExKSxGUF9TQ1IxX0VYKCVhNikKKwltb3YubAkJRFNUX0hJKCVhMSksRlBfU0NSMV9ISSglYTYpCisJbW92LmwJCURTVF9MTyglYTEpLEZQX1NDUjFfTE8oJWE2KQorCWJzci5sCQlzY2FsZV90b196ZXJvX2RzdAkjIHNjYWxlIHRoZSBvcGVyYW5kCisJY2xyLncJCUZQX1NDUjBfRVgoJWE2KQorCWNsci5sCQlGUF9TQ1IwX0hJKCVhNikKKwljbHIubAkJRlBfU0NSMF9MTyglYTYpCisJYnJhLncJCWZhZGRfemVyb19lbnRyeQkJIyBnbyBleGVjdXRlIGZhZGQKKworIworIyBib3RoIG9wZXJhbmRzIGFyZSBJTkZzLiBhbiBPUEVSUiB3aWxsIHJlc3VsdCBpZiB0aGUgSU5GcyBoYXZlCisjIGRpZmZlcmVudCBzaWducy4gZWxzZSwgYW4gSU5GIG9mIHRoZSBzYW1lIHNpZ24gaXMgcmV0dXJuZWQKKyMKK2ZhZGRfaW5mXzI6CisJbW92LmIJCVNSQ19FWCglYTApLCVkMAkJIyBleGNsdXNpdmUgb3IgdGhlIHNpZ25zCisJbW92LmIJCURTVF9FWCglYTEpLCVkMQorCWVvci5iCQklZDEsJWQwCisJYm1pLmwJCXJlc19vcGVycgkJIyB3ZWVkIG91dCAoLUlORikrKCtJTkYpCisKKyMgb2ssIHNvIGl0J3Mgbm90IGFuIE9QRVJSLiBidXQsIHdlIGRvIGhhdmUgdG8gcmVtZW1iZXIgdG8gcmV0dXJuIHRoZQorIyBzcmMgSU5GIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgODgxLzg4MiBnZXRzIHRoZSBqLWJpdCBmcm9tLi4uCisKKyMKKyMgb3BlcmFuZHMgYXJlIElORiBhbmQgb25lIG9mIHtaRVJPLCBJTkYsIERFTk9STSwgTk9STX0KKyMKK2ZhZGRfaW5mX3NyYzoKKwlmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gc3JjIElORgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBJTkYgcG9zaXRpdmU/CisJYnBsLmIJCWZhZGRfaW5mX2RvbmUJCSMgeWVzOyB3ZSdyZSBkb25lCisJbW92LmIJCSZuZWdfYm1hc2sraW5mX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCBJTkYvTkVHCisJcnRzCisKKyMKKyMgb3BlcmFuZHMgYXJlIElORiBhbmQgb25lIG9mIHtaRVJPLCBJTkYsIERFTk9STSwgTk9STX0KKyMKK2ZhZGRfaW5mX2RzdDoKKwlmbW92bS54CQlEU1QoJWExKSwmMHg4MAkJIyByZXR1cm4gZHN0IElORgorCXRzdC5iCQlEU1RfRVgoJWExKQkJIyBpcyBJTkYgcG9zaXRpdmU/CisJYnBsLmIJCWZhZGRfaW5mX2RvbmUJCSMgeWVzOyB3ZSdyZSBkb25lCisJbW92LmIJCSZuZWdfYm1hc2sraW5mX2JtYXNrLEZQU1JfQ0MoJWE2KSAjIHNldCBJTkYvTkVHCisJcnRzCisKK2ZhZGRfaW5mX2RvbmU6CisJbW92LmIJCSZpbmZfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IElORgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZzdWIoKTogZW11bGF0ZXMgdGhlIGZzdWIgaW5zdHJ1Y3Rpb24JCQkJIworIwlmc3N1YigpOiBlbXVsYXRlcyB0aGUgZnNzdWIgaW5zdHJ1Y3Rpb24JCQkJIworIwlmZHN1YigpOiBlbXVsYXRlcyB0aGUgZmRzdWIgaW5zdHJ1Y3Rpb24JCQkJIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYWRkc3ViX3NjYWxlcjIoKSAtIHNjYWxlIHRoZSBvcGVyYW5kcyBzbyB0aGV5IHdvbid0IHRha2UgZXhjCSMKKyMJb3ZmX3JlcygpIC0gcmV0dXJuIGRlZmF1bHQgb3ZlcmZsb3cgcmVzdWx0CQkJIworIwl1bmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CQkJIworIwlyZXNfcW5hbigpIC0gc2V0IFFOQU4gcmVzdWx0CQkJCQkjCisjCXJlc19zbmFuKCkgLSBzZXQgU05BTiByZXN1bHQJCQkJCSMKKyMJcmVzX29wZXJyKCkgLSBzZXQgT1BFUlIgcmVzdWx0CQkJCQkjCisjCXNjYWxlX3RvX3plcm9fc3JjKCkgLSBzZXQgc3JjIG9wZXJhbmQgZXhwb25lbnQgZXF1YWwgdG8gemVybwkjCisjCXNjYWxlX3RvX3plcm9fZHN0KCkgLSBzZXQgZHN0IG9wZXJhbmQgZXhwb25lbnQgZXF1YWwgdG8gemVybwkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gZXh0ZW5kZWQgcHJlY2lzaW9uIHNvdXJjZSBvcGVyYW5kCQkjCisjCWExID0gcG9pbnRlciB0byBleHRlbmRlZCBwcmVjaXNpb24gZGVzdGluYXRpb24gb3BlcmFuZAkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gcmVzdWx0CQkJCQkJCSMKKyMJZnAxID0gRVhPUCAoaWYgZXhjZXB0aW9uIG9jY3VycmVkKQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlIYW5kbGUgTkFOcywgaW5maW5pdGllcywgYW5kIHplcm9lcyBhcyBzcGVjaWFsIGNhc2VzLiBEaXZpZGUJIworIyBub3JtcyBpbnRvIGV4dGVuZGVkLCBzaW5nbGUsIGFuZCBkb3VibGUgcHJlY2lzaW9uLgkJCSMKKyMJRG8gc3VidHJhY3Rpb24gYWZ0ZXIgc2NhbGluZyBleHBvbmVudHMgc3VjaCB0aGF0IGV4Y2VwdGlvbiB3b24ndCMKKyMgb2NjdXIuIFRoZW4sIGNoZWNrIHJlc3VsdCBleHBvbmVudCB0byBzZWUgaWYgZXhjZXB0aW9uIHdvdWxkIGhhdmUJIworIyBvY2N1cnJlZC4gSWYgc28sIHJldHVybiBkZWZhdWx0IHJlc3VsdCBhbmQgbWF5YmUgRVhPUC4gRWxzZSwgaW5zZXJ0CSMKKyMgdGhlIGNvcnJlY3QgcmVzdWx0IGV4cG9uZW50IGFuZCByZXR1cm4uIFNldCBGUFNSIGJpdHMgYXMgYXBwcm9wcmlhdGUuCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCWZzc3ViCitmc3N1YjoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmc19tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IHNnbCBwcmVjCisJYnJhLmIJCWZzdWIKKworCWdsb2JhbAkJZmRzdWIKK2Zkc3ViOgorCWFuZGkuYgkJJjB4MzAsJWQwCQkjIGNsZWFyIHJuZCBwcmVjCisJb3JpLmIJCSZkX21vZGUqMHgxMCwlZDAJIyBpbnNlcnQgZGJsIHByZWMKKworCWdsb2JhbAkJZnN1YgorZnN1YjoKKwltb3YubAkJJWQwLExfU0NSMyglYTYpCQkjIHN0b3JlIHJuZCBpbmZvCisKKwljbHIudwkJJWQxCisJbW92LmIJCURUQUcoJWE2KSwlZDEKKwlsc2wuYgkJJjB4MywlZDEKKwlvci5iCQlTVEFHKCVhNiksJWQxCQkjIGNvbWJpbmUgc3JjIHRhZ3MKKworCWJuZS53CQlmc3ViX25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CisKKyMKKyMgU1VCOiBub3JtcyBhbmQgZGVub3JtcworIworZnN1Yl9ub3JtOgorCWJzci5sCQlhZGRzdWJfc2NhbGVyMgkJIyBzY2FsZSBleHBvbmVudHMKKworZnN1Yl96ZXJvX2VudHJ5OgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCWZtb3YubAkJTF9TQ1IzKCVhNiksJWZwY3IJIyBzZXQgRlBDUgorCisJZnN1Yi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgc3VidHJhY3QKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisJZm1vdi5sCQklZnBzciwlZDEJCSMgZmV0Y2ggSU5FWDIsIE4sIFoKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgZXhjIGFuZCBjY29kZSBiaXRzCisKKwlmYmVxLncJCWZzdWJfemVyb19leGl0CQkjIGlmIHJlc3VsdCB6ZXJvLCBlbmQgbm93CisKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisKKwlmbW92bS54CQkmMHgwMSwtKCVzcCkJCSMgc2F2ZSByZXN1bHQgdG8gc3RhY2sKKworCW1vdi53CQkyK0xfU0NSMyglYTYpLCVkMQorCWxzci5iCQkmMHg2LCVkMQorCisJbW92LncJCSglc3ApLCVkMgkJIyBmZXRjaCBuZXcgZXhwb25lbnQKKwlhbmRpLmwJCSYweDdmZmYsJWQyCQkjIHN0cmlwIHNpZ24KKwlzdWIubAkJJWQwLCVkMgkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCisJY21wLmwJCSVkMiwodGJsX2ZzdWJfb3ZmbC5iLCVwYywlZDEudyo0KSAjIGlzIGl0IGFuIG92ZXJmbG93PworCWJnZS5iCQlmc3ViX292ZmwJCSMgeWVzCisKKwljbXAubAkJJWQyLCh0YmxfZnN1Yl91bmZsLmIsJXBjLCVkMS53KjQpICMgaXMgaXQgYW4gdW5kZXJmbG93PworCWJsdC53CQlmc3ViX3VuZmwJCSMgeWVzCisJYmVxLncJCWZzdWJfbWF5X3VuZmwJCSMgbWF5YmU7IGdvIGZpbmQgb3V0CisKK2ZzdWJfbm9ybWFsOgorCW1vdi53CQkoJXNwKSwlZDEKKwlhbmRpLncJCSYweDgwMDAsJWQxCQkjIGtlZXAgc2lnbgorCW9yLncJCSVkMiwlZDEJCQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YudwkJJWQxLCglc3ApCQkjIGluc2VydCBuZXcgZXhwb25lbnQKKworCWZtb3ZtLngJCSglc3ApKywmMHg4MAkJIyByZXR1cm4gcmVzdWx0IGluIGZwMAorCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCXJ0cworCitmc3ViX3plcm9fZXhpdDoKKyMJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgcmV0dXJuIHplcm8gaW4gZnAwCisJcnRzCisKK3RibF9mc3ViX292Zmw6CisJbG9uZwkJMHg3ZmZmCQkJIyBleHQgb3ZmbAorCWxvbmcJCTB4NDA3ZgkJCSMgc2dsIG92ZmwKKwlsb25nCQkweDQzZmYJCQkjIGRibCBvdmZsCisKK3RibF9mc3ViX3VuZmw6CisJbG9uZwkgICAgICAgIDB4MDAwMAkJCSMgZXh0IHVuZmwKKwlsb25nCQkweDNmODEJCQkjIHNnbCB1bmZsCisJbG9uZwkJMHgzYzAxCQkJIyBkYmwgdW5mbAorCitmc3ViX292Zmw6CisJb3IubAkJJm92ZmxfaW54X21hc2ssVVNFUl9GUFNSKCVhNikgIyBzZXQgb3ZmbC9hb3ZmbC9haW5leAorCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgxMywlZDEJCSMgaXMgT1ZGTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZzdWJfb3ZmbF9lbmEJCSMgeWVzCisKKwlhZGQubAkJJjB4Yywlc3AKK2ZzdWJfb3ZmbF9kaXM6CisJYnRzdAkJJm5lZ19iaXQsRlBTUl9DQyglYTYpCSMgaXMgcmVzdWx0IG5lZ2F0aXZlPworCXNuZQkJJWQxCQkJIyBzZXQgc2lnbiBwYXJhbSBhY2NvcmRpbmdseQorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDAJCSMgcGFzcyBwcmVjOnJuZAorCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IElORixOIGlmIGFwcGxpY2FibGUKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCXJ0cworCitmc3ViX292ZmxfZW5hOgorCW1vdi5iCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweGMwLCVkMQkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CisJYm5lLmIJCWZzdWJfb3ZmbF9lbmFfc2QJIyBubworCitmc3ViX292ZmxfZW5hX2NvbnQ6CisJbW92LncJCSglc3ApLCVkMQkJIyBmZXRjaCB7c2duLGV4cH0KKwlhbmRpLncJCSYweDgwMDAsJWQxCQkjIGtlZXAgc2lnbgorCXN1YmkubAkJJjB4NjAwMCwlZDIJCSMgc3VidHJhY3QgbmV3IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQyCQkjIGNsZWFyIHRvcCBiaXQKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgc2lnbixleHAKKwltb3YudwkJJWQxLCglc3ApCQkjIGluc2VydCBuZXcgZXhwb25lbnQKKworCWZtb3ZtLngJCSglc3ApKywmMHg0MAkJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlicmEuYgkJZnN1Yl9vdmZsX2RpcworCitmc3ViX292ZmxfZW5hX3NkOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg4MAkjIGxvYWQgZHN0IG9wCisKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHgzMCwlZDEJCSMgY2xlYXIgcm5kIHByZWMKKwlmbW92LmwJCSVkMSwlZnBjcgkJIyBzZXQgRlBDUgorCisJZnN1Yi54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIGV4ZWN1dGUgc3VidHJhY3QKKworCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlhZGQubAkJJjB4Yywlc3AKKwlmbW92bS54CQkmMHgwMSwtKCVzcCkKKwlicmEuYgkJZnN1Yl9vdmZsX2VuYV9jb250CisKK2ZzdWJfdW5mbDoKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKworCWFkZC5sCQkmMHhjLCVzcAorCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDgwCSMgbG9hZCBkc3Qgb3AKKworCWZtb3YubAkJJnJ6X21vZGUqMHgxMCwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZzdWIueAkJRlBfU0NSMCglYTYpLCVmcDAJIyBleGVjdXRlIHN1YnRyYWN0CisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgc3RhdHVzCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikKKworCW1vdi5iCQlGUENSX0VOQUJMRSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MGIsJWQxCQkjIGlzIFVORkwgb3IgSU5FWCBlbmFibGVkPworCWJuZS5iCQlmc3ViX3VuZmxfZW5hCQkjIHllcworCitmc3ViX3VuZmxfZGlzOgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyAnWicgbWF5IGhhdmUgYmVlbiBzZXQKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4ODAJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCXJ0cworCitmc3ViX3VuZmxfZW5hOgorCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAorCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4YzAsJWQxCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZnN1Yl91bmZsX2VuYV9zZAkjIG5vCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworZnN1Yl91bmZsX2VuYV9jb250OgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisKKwlmc3ViLngJCUZQX1NDUjAoJWE2KSwlZnAxCSMgZXhlY3V0ZSBzdWJ0cmFjdAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKworCWZtb3ZtLngJCSYweDQwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIHJlc3VsdCB0byBzdGFjaworCW1vdi53CQlGUF9TQ1IwX0VYKCVhNiksJWQxCSMgZmV0Y2gge3NnbixleHB9CisJbW92LmwJCSVkMSwlZDIJCQkjIG1ha2UgYSBjb3B5CisJYW5kaS5sCQkmMHg3ZmZmLCVkMQkJIyBzdHJpcCBzaWduCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJc3ViLmwJCSVkMCwlZDEJCQkjIGFkZCBzY2FsZSBmYWN0b3IKKwlhZGRpLmwJCSYweDYwMDAsJWQxCQkjIHN1YnRyYWN0IG5ldyBiaWFzCisJYW5kaS53CQkmMHg3ZmZmLCVkMQkJIyBjbGVhciB0b3AgYml0CisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IHNnbixleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwlicmEudwkJZnN1Yl91bmZsX2RpcworCitmc3ViX3VuZmxfZW5hX3NkOgorCW1vdi5sCQlMX1NDUjMoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDMwLCVkMQkJIyBjbGVhciBybmQgcHJlYworCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisKKwlicmEuYgkJZnN1Yl91bmZsX2VuYV9jb250CisKKyMKKyMgcmVzdWx0IGlzIGVxdWFsIHRvIHRoZSBzbWFsbGVzdCBub3JtYWxpemVkIG51bWJlciBpbiB0aGUgc2VsZWN0ZWQgcHJlY2lzaW9uCisjIGlmIHRoZSBwcmVjaXNpb24gaXMgZXh0ZW5kZWQsIHRoaXMgcmVzdWx0IGNvdWxkIG5vdCBoYXZlIGNvbWUgZnJvbSBhbgorIyB1bmRlcmZsb3cgdGhhdCByb3VuZGVkIHVwLgorIworZnN1Yl9tYXlfdW5mbDoKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHhjMCwlZDEJCSMgZmV0Y2ggcm5kIHByZWMKKwliZXEudwkJZnN1Yl9ub3JtYWwJCSMgeWVzOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKKworCW1vdi5sCQkweDQoJXNwKSwlZDEKKwljbXBpLmwJCSVkMSwmMHg4MDAwMDAwMAkJIyBpcyBoaShtYW4pID0gMHg4MDAwMDAwMD8KKwlibmUudwkJZnN1Yl9ub3JtYWwJCSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCisJdHN0LmwJCTB4OCglc3ApCQkjIGlzIGxvKG1hbikgPSAweDA/CisJYm5lLncJCWZzdWJfbm9ybWFsCQkjIG5vOyBubyB1bmRlcmZsb3cgb2NjdXJyZWQKKworCWJ0c3QJCSZpbmV4Ml9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIGlzIElORVgyIHNldD8KKwliZXEudwkJZnN1Yl9ub3JtYWwJCSMgbm87IG5vIHVuZGVyZmxvdyBvY2N1cnJlZAorCisjCisjIG9rLCBzbyBub3cgdGhlIHJlc3VsdCBoYXMgYSBleHBvbmVudCBlcXVhbCB0byB0aGUgc21hbGxlc3Qgbm9ybWFsaXplZAorIyBleHBvbmVudCBmb3IgdGhlIHNlbGVjdGVkIHByZWNpc2lvbi4gYWxzbywgdGhlIG1hbnRpc3NhIGlzIGVxdWFsIHRvCisjIDB4ODAwMDAwMDAwMDAwMDAwMCBhbmQgdGhpcyBtYW50aXNzYSBpcyB0aGUgcmVzdWx0IG9mIHJvdW5kaW5nIG5vbi16ZXJvCisjIGcscixzLgorIyBub3csIHdlIG11c3QgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHByZS1yb3VuZGVkIHJlc3VsdCB3YXMgYW4gdW5kZXJmbG93CisjIHJvdW5kZWQgInVwIiBvciBhIG5vcm1hbGl6ZWQgbnVtYmVyIHJvdW5kZWQgImRvd24iLgorIyBzbywgd2UgZG8gdGhpcyBiZSByZS1leGVjdXRpbmcgdGhlIGFkZCB1c2luZyBSWiBhcyB0aGUgcm91bmRpbmcgbW9kZSBhbmQKKyMgc2VlaW5nIGlmIHRoZSBuZXcgcmVzdWx0IGlzIHNtYWxsZXIgb3IgZXF1YWwgdG8gdGhlIGN1cnJlbnQgcmVzdWx0LgorIworCWZtb3ZtLngJCUZQX1NDUjEoJWE2KSwmMHg0MAkjIGxvYWQgZHN0IG9wIGludG8gZnAxCisKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQxCisJYW5kaS5iCQkmMHhjMCwlZDEJCSMga2VlcCBybmQgcHJlYworCW9yaS5iCQkmcnpfbW9kZSoweDEwLCVkMQkjIGluc2VydCBybmQgbW9kZQorCWZtb3YubAkJJWQxLCVmcGNyCQkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZzdWIueAkJRlBfU0NSMCglYTYpLCVmcDEJIyBleGVjdXRlIHN1YnRyYWN0CisKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJZmFicy54CQklZnAwCQkJIyBjb21wYXJlIGFic29sdXRlIHZhbHVlcworCWZhYnMueAkJJWZwMQorCWZjbXAueAkJJWZwMCwlZnAxCQkjIGlzIGZpcnN0IHJlc3VsdCA+IHNlY29uZD8KKworCWZiZ3QudwkJZnN1Yl91bmZsCQkjIHllczsgaXQncyBhbiB1bmRlcmZsb3cKKwlicmEudwkJZnN1Yl9ub3JtYWwJCSMgbm87IGl0J3Mgbm90IGFuIHVuZGVyZmxvdworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIFN1YjogaW5wdXRzIGFyZSBub3QgYm90aCBub3JtYWxpemVkOyB3aGF0IGFyZSB0aGV5PworIworZnN1Yl9ub3Rfbm9ybToKKwltb3YudwkJKHRibF9mc3ViX29wLmIsJXBjLCVkMS53KjIpLCVkMQorCWptcAkJKHRibF9mc3ViX29wLmIsJXBjLCVkMS53KjEpCisKKwlzd2JlZwkJJjQ4Cit0YmxfZnN1Yl9vcDoKKwlzaG9ydAkJZnN1Yl9ub3JtCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gTk9STQorCXNob3J0CQlmc3ViX3plcm9fc3JjCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gWkVSTworCXNob3J0CQlmc3ViX2luZl9zcmMJLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBJTkYKKwlzaG9ydAkJZnN1Yl9yZXNfcW5hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFFOQU4KKwlzaG9ydAkJZnN1Yl9ub3JtCS0gdGJsX2ZzdWJfb3AgIyBOT1JNIC0gREVOT1JNCisJc2hvcnQJCWZzdWJfcmVzX3NuYW4JLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBTTkFOCisJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIworCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKKworCXNob3J0CQlmc3ViX3plcm9fZHN0CS0gdGJsX2ZzdWJfb3AgIyBaRVJPIC0gTk9STQorCXNob3J0CQlmc3ViX3plcm9fMgktIHRibF9mc3ViX29wICMgWkVSTyAtIFpFUk8KKwlzaG9ydAkJZnN1Yl9pbmZfc3JjCS0gdGJsX2ZzdWJfb3AgIyBaRVJPIC0gSU5GCisJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBRTkFOCisJc2hvcnQJCWZzdWJfemVyb19kc3QJLSB0YmxfZnN1Yl9vcCAjIFpFUk8gLSBERU5PUk0KKwlzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgTk9STSAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZzdWJfb3AJLSB0YmxfZnN1Yl9vcCAjCisJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIworCisJc2hvcnQJCWZzdWJfaW5mX2RzdAktIHRibF9mc3ViX29wICMgSU5GIC0gTk9STQorCXNob3J0CQlmc3ViX2luZl9kc3QJLSB0YmxfZnN1Yl9vcCAjIElORiAtIFpFUk8KKwlzaG9ydAkJZnN1Yl9pbmZfMgktIHRibF9mc3ViX29wICMgSU5GIC0gSU5GCisJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBRTkFOCisJc2hvcnQJCWZzdWJfaW5mX2RzdAktIHRibF9mc3ViX29wICMgSU5GIC0gREVOT1JNCisJc2hvcnQJCWZzdWJfcmVzX3NuYW4JLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBTTkFOCisJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIworCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKKworCXNob3J0CQlmc3ViX3Jlc19xbmFuCS0gdGJsX2ZzdWJfb3AgIyBRTkFOIC0gTk9STQorCXNob3J0CQlmc3ViX3Jlc19xbmFuCS0gdGJsX2ZzdWJfb3AgIyBRTkFOIC0gWkVSTworCXNob3J0CQlmc3ViX3Jlc19xbmFuCS0gdGJsX2ZzdWJfb3AgIyBRTkFOIC0gSU5GCisJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIFFOQU4gLSBRTkFOCisJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIFFOQU4gLSBERU5PUk0KKwlzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgUU5BTiAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZzdWJfb3AJLSB0YmxfZnN1Yl9vcCAjCisJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIworCisJc2hvcnQJCWZzdWJfbm9ybQktIHRibF9mc3ViX29wICMgREVOT1JNIC0gTk9STQorCXNob3J0CQlmc3ViX3plcm9fc3JjCS0gdGJsX2ZzdWJfb3AgIyBERU5PUk0gLSBaRVJPCisJc2hvcnQJCWZzdWJfaW5mX3NyYwktIHRibF9mc3ViX29wICMgREVOT1JNIC0gSU5GCisJc2hvcnQJCWZzdWJfcmVzX3FuYW4JLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBRTkFOCisJc2hvcnQJCWZzdWJfbm9ybQktIHRibF9mc3ViX29wICMgREVOT1JNIC0gREVOT1JNCisJc2hvcnQJCWZzdWJfcmVzX3NuYW4JLSB0YmxfZnN1Yl9vcCAjIE5PUk0gLSBTTkFOCisJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIworCXNob3J0CQl0YmxfZnN1Yl9vcAktIHRibF9mc3ViX29wICMKKworCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBTTkFOIC0gTk9STQorCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBTTkFOIC0gWkVSTworCXNob3J0CQlmc3ViX3Jlc19zbmFuCS0gdGJsX2ZzdWJfb3AgIyBTTkFOIC0gSU5GCisJc2hvcnQJCWZzdWJfcmVzX3NuYW4JLSB0YmxfZnN1Yl9vcCAjIFNOQU4gLSBRTkFOCisJc2hvcnQJCWZzdWJfcmVzX3NuYW4JLSB0YmxfZnN1Yl9vcCAjIFNOQU4gLSBERU5PUk0KKwlzaG9ydAkJZnN1Yl9yZXNfc25hbgktIHRibF9mc3ViX29wICMgU05BTiAtIFNOQU4KKwlzaG9ydAkJdGJsX2ZzdWJfb3AJLSB0YmxfZnN1Yl9vcCAjCisJc2hvcnQJCXRibF9mc3ViX29wCS0gdGJsX2ZzdWJfb3AgIworCitmc3ViX3Jlc19xbmFuOgorCWJyYS5sCQlyZXNfcW5hbgorZnN1Yl9yZXNfc25hbjoKKwlicmEubAkJcmVzX3NuYW4KKworIworIyBib3RoIG9wZXJhbmRzIGFyZSBaRVJPZXMKKyMKK2ZzdWJfemVyb18yOgorCW1vdi5iCQlTUkNfRVgoJWEwKSwlZDAKKwltb3YuYgkJRFNUX0VYKCVhMSksJWQxCisJZW9yLmIJCSVkMSwlZDAKKwlicGwuYgkJZnN1Yl96ZXJvXzJfY2hrX3JtCisKKyMgdGhlIHNpZ25zIGFyZSBvcHBvc2l0ZSwgc28sIHJldHVybiBhIFpFUk8gdy8gdGhlIHNpZ24gb2YgdGhlIGRzdCBaRVJPCisJdHN0LmIJCSVkMAkJCSMgaXMgZHN0IG5lZ2F0aXZlPworCWJtaS5iCQlmc3ViX3plcm9fMl9ybQkJIyB5ZXMKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyBubzsgcmV0dXJuICtaRVJPCisJbW92LmIJCSZ6X2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaCisJcnRzCisKKyMKKyMgdGhlIFpFUk9lcyBoYXZlIHRoZSBzYW1lIHNpZ25zOgorIyAtIHRoZXJlZm9yZSwgd2UgcmV0dXJuICtaRVJPIGlmIHRoZSByb3VuZGluZyBtb2RlIGlzIFJOLFJaLCBvciBSUAorIyAtIC1aRVJPIGlzIHJldHVybmVkIGluIHRoZSBjYXNlIG9mIFJNLgorIworZnN1Yl96ZXJvXzJfY2hrX3JtOgorCW1vdi5iCQkzK0xfU0NSMyglYTYpLCVkMQorCWFuZGkuYgkJJjB4MzAsJWQxCQkjIGV4dHJhY3Qgcm5kIG1vZGUKKwljbXBpLmIJCSVkMSwmcm1fbW9kZSoweDEwCSMgaXMgcm5kIG1vZGUgPSBSTT8KKwliZXEuYgkJZnN1Yl96ZXJvXzJfcm0JCSMgeWVzCisJZm1vdi5zCQkmMHgwMDAwMDAwMCwlZnAwCSMgbm87IHJldHVybiArWkVSTworCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgWgorCXJ0cworCitmc3ViX3plcm9fMl9ybToKKwlmbW92LnMJCSYweDgwMDAwMDAwLCVmcDAJIyByZXR1cm4gLVpFUk8KKwltb3YuYgkJJnpfYm1hc2srbmVnX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBaL05FRworCXJ0cworCisjCisjIG9uZSBvcGVyYW5kIGlzIGEgWkVSTyBhbmQgdGhlIG90aGVyIGlzIGEgREVOT1JNIG9yIGEgTk9STS4KKyMgc2NhbGUgdGhlIERFTk9STSBvciBOT1JNIGFuZCBqdW1wIHRvIHRoZSByZWd1bGFyIGZzdWIgcm91dGluZS4KKyMKK2ZzdWJfemVyb19kc3Q6CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisJYnNyLmwJCXNjYWxlX3RvX3plcm9fc3JjCSMgc2NhbGUgdGhlIG9wZXJhbmQKKwljbHIudwkJRlBfU0NSMV9FWCglYTYpCisJY2xyLmwJCUZQX1NDUjFfSEkoJWE2KQorCWNsci5sCQlGUF9TQ1IxX0xPKCVhNikKKwlicmEudwkJZnN1Yl96ZXJvX2VudHJ5CQkjIGdvIGV4ZWN1dGUgZnN1YgorCitmc3ViX3plcm9fc3JjOgorCW1vdi53CQlEU1RfRVgoJWExKSxGUF9TQ1IxX0VYKCVhNikKKwltb3YubAkJRFNUX0hJKCVhMSksRlBfU0NSMV9ISSglYTYpCisJbW92LmwJCURTVF9MTyglYTEpLEZQX1NDUjFfTE8oJWE2KQorCWJzci5sCQlzY2FsZV90b196ZXJvX2RzdAkjIHNjYWxlIHRoZSBvcGVyYW5kCisJY2xyLncJCUZQX1NDUjBfRVgoJWE2KQorCWNsci5sCQlGUF9TQ1IwX0hJKCVhNikKKwljbHIubAkJRlBfU0NSMF9MTyglYTYpCisJYnJhLncJCWZzdWJfemVyb19lbnRyeQkJIyBnbyBleGVjdXRlIGZzdWIKKworIworIyBib3RoIG9wZXJhbmRzIGFyZSBJTkZzLiBhbiBPUEVSUiB3aWxsIHJlc3VsdCBpZiB0aGUgSU5GcyBoYXZlIHRoZQorIyBzYW1lIHNpZ25zLiBlbHNlLAorIworZnN1Yl9pbmZfMjoKKwltb3YuYgkJU1JDX0VYKCVhMCksJWQwCQkjIGV4Y2x1c2l2ZSBvciB0aGUgc2lnbnMKKwltb3YuYgkJRFNUX0VYKCVhMSksJWQxCisJZW9yLmIJCSVkMSwlZDAKKwlicGwubAkJcmVzX29wZXJyCQkjIHdlZWQgb3V0ICgtSU5GKSsoK0lORikKKworIyBvaywgc28gaXQncyBub3QgYW4gT1BFUlIuIGJ1dCB3ZSBkbyBoYXZlIHRvIHJlbWVtYmVyIHRvIHJldHVybgorIyB0aGUgc3JjIElORiBzaW5jZSB0aGF0J3Mgd2hlcmUgdGhlIDg4MS84ODIgZ2V0cyB0aGUgai1iaXQuCisKK2ZzdWJfaW5mX3NyYzoKKwlmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gc3JjIElORgorCWZuZWcueAkJJWZwMAkJCSMgaW52ZXJ0IHNpZ24KKwlmYmdlLncJCWZzdWJfaW5mX2RvbmUJCSMgc2lnbiBpcyBub3cgcG9zaXRpdmUKKwltb3YuYgkJJm5lZ19ibWFzaytpbmZfYm1hc2ssRlBTUl9DQyglYTYpICMgc2V0IElORi9ORUcKKwlydHMKKworZnN1Yl9pbmZfZHN0OgorCWZtb3ZtLngJCURTVCglYTEpLCYweDgwCQkjIHJldHVybiBkc3QgSU5GCisJdHN0LmIJCURTVF9FWCglYTEpCQkjIGlzIElORiBuZWdhdGl2ZT8KKwlicGwuYgkJZnN1Yl9pbmZfZG9uZQkJIyBubworCW1vdi5iCQkmbmVnX2JtYXNrK2luZl9ibWFzayxGUFNSX0NDKCVhNikgIyBzZXQgSU5GL05FRworCXJ0cworCitmc3ViX2luZl9kb25lOgorCW1vdi5iCQkmaW5mX2JtYXNrLEZQU1JfQ0MoJWE2KQkjIHNldCBJTkYKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlmc3FydCgpOiBlbXVsYXRlcyB0aGUgZnNxcnQgaW5zdHJ1Y3Rpb24JCQkJIworIwlmc3NxcnQoKTogZW11bGF0ZXMgdGhlIGZzc3FydCBpbnN0cnVjdGlvbgkJCSMKKyMJZmRzcXJ0KCk6IGVtdWxhdGVzIHRoZSBmZHNxcnQgaW5zdHJ1Y3Rpb24JCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlzY2FsZV9zcXJ0KCkgLSBzY2FsZSB0aGUgc291cmNlIG9wZXJhbmQJCQkJIworIwl1bmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCB1bmRlcmZsb3cgcmVzdWx0CQkJIworIwlvdmZfcmVzKCkgLSByZXR1cm4gZGVmYXVsdCBvdmVyZmxvdyByZXN1bHQJCQkjCisjCXJlc19xbmFuXzFvcCgpIC0gcmV0dXJuIFFOQU4gcmVzdWx0CQkJCSMKKyMJcmVzX3NuYW5fMW9wKCkgLSByZXR1cm4gU05BTiByZXN1bHQJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIGV4dGVuZGVkIHByZWNpc2lvbiBzb3VyY2Ugb3BlcmFuZAkJIworIwlkMCAgcm5kIHByZWMsbW9kZQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IHJlc3VsdAkJCQkJCQkjCisjCWZwMSA9IEVYT1AgKGlmIGV4Y2VwdGlvbiBvY2N1cnJlZCkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSGFuZGxlIE5BTnMsIGluZmluaXRpZXMsIGFuZCB6ZXJvZXMgYXMgc3BlY2lhbCBjYXNlcy4gRGl2aWRlCSMKKyMgbm9ybXMvZGVub3JtcyBpbnRvIGV4dC9zZ2wvZGJsIHByZWNpc2lvbi4JCQkJIworIwlGb3Igbm9ybXMvZGVub3Jtcywgc2NhbGUgdGhlIGV4cG9uZW50cyBzdWNoIHRoYXQgYSBzcXJ0CQkjCisjIGluc3RydWN0aW9uIHdvbid0IGNhdXNlIGFuIGV4Y2VwdGlvbi4gVXNlIHRoZSByZWd1bGFyIGZzcXJ0IHRvCSMKKyMgY29tcHV0ZSBhIHJlc3VsdC4gQ2hlY2sgaWYgdGhlIHJlZ3VsYXIgb3BlcmFuZHMgd291bGQgaGF2ZSB0YWtlbgkjCisjIGFuIGV4Y2VwdGlvbi4gSWYgc28sIHJldHVybiB0aGUgZGVmYXVsdCBvdmVyZmxvdy91bmRlcmZsb3cgcmVzdWx0CSMKKyMgYW5kIHJldHVybiB0aGUgRVhPUCBpZiBleGNlcHRpb25zIGFyZSBlbmFibGVkLiBFbHNlLCBzY2FsZSB0aGUJIworIyByZXN1bHQgb3BlcmFuZCB0byB0aGUgcHJvcGVyIGV4cG9uZW50LgkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlmc3NxcnQKK2Zzc3FydDoKKwlhbmRpLmIJCSYweDMwLCVkMAkJIyBjbGVhciBybmQgcHJlYworCW9yaS5iCQkmc19tb2RlKjB4MTAsJWQwCSMgaW5zZXJ0IHNnbCBwcmVjaXNpb24KKwlicmEuYgkJZnNxcnQKKworCWdsb2JhbAkJZmRzcXJ0CitmZHNxcnQ6CisJYW5kaS5iCQkmMHgzMCwlZDAJCSMgY2xlYXIgcm5kIHByZWMKKwlvcmkuYgkJJmRfbW9kZSoweDEwLCVkMAkjIGluc2VydCBkYmwgcHJlY2lzaW9uCisKKwlnbG9iYWwJCWZzcXJ0Citmc3FydDoKKwltb3YubAkJJWQwLExfU0NSMyglYTYpCQkjIHN0b3JlIHJuZCBpbmZvCisJY2xyLncJCSVkMQorCW1vdi5iCQlTVEFHKCVhNiksJWQxCisJYm5lLncJCWZzcXJ0X25vdF9ub3JtCQkjIG9wdGltaXplIG9uIG5vbi1ub3JtIGlucHV0CisKKyMKKyMgU1FVQVJFIFJPT1Q6IG5vcm1zIGFuZCBkZW5vcm1zIE9OTFkhCisjCitmc3FydF9ub3JtOgorCXRzdC5iCQlTUkNfRVgoJWEwKQkJIyBpcyBvcGVyYW5kIG5lZ2F0aXZlPworCWJtaS5sCQlyZXNfb3BlcnIJCSMgeWVzCisKKwlhbmRpLmIJCSYweGMwLCVkMAkJIyBpcyBwcmVjaXNpb24gZXh0ZW5kZWQ/CisJYm5lLmIJCWZzcXJ0X25vdF9leHQJCSMgbm87IGdvIGhhbmRsZSBzZ2wgb3IgZGJsCisKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKwlmbW92LmwJCSYweDAsJWZwc3IJCSMgY2xlYXIgRlBTUgorCisJZnNxcnQueAkJKCVhMCksJWZwMAkJIyBleGVjdXRlIHNxdWFyZSByb290CisKKwlmbW92LmwJCSVmcHNyLCVkMQorCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNldCBOLElORVgKKworCXJ0cworCitmc3FydF9kZW5vcm06CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIG9wZXJhbmQgbmVnYXRpdmU/CisJYm1pLmwJCXJlc19vcGVycgkJIyB5ZXMKKworCWFuZGkuYgkJJjB4YzAsJWQwCQkjIGlzIHByZWNpc2lvbiBleHRlbmRlZD8KKwlibmUuYgkJZnNxcnRfbm90X2V4dAkJIyBubzsgZ28gaGFuZGxlIHNnbCBvciBkYmwKKworCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCisJYnNyLmwJCXNjYWxlX3NxcnQJCSMgY2FsY3VsYXRlIHNjYWxlIGZhY3RvcgorCisJYnJhLncJCWZzcXJ0X3NkX25vcm1hbAorCisjCisjIG9wZXJhbmQgaXMgZWl0aGVyIHNpbmdsZSBvciBkb3VibGUKKyMKK2ZzcXJ0X25vdF9leHQ6CisJY21waS5iCQklZDAsJnNfbW9kZSoweDEwCSMgc2VwYXJhdGUgc2dsL2RibCBwcmVjCisJYm5lLncJCWZzcXJ0X2RibAorCisjCisjIG9wZXJhbmQgaXMgdG8gYmUgcm91bmRlZCB0byBzaW5nbGUgcHJlY2lzaW9uCisjCitmc3FydF9zZ2w6CisJbW92LncJCVNSQ19FWCglYTApLEZQX1NDUjBfRVgoJWE2KQorCW1vdi5sCQlTUkNfSEkoJWEwKSxGUF9TQ1IwX0hJKCVhNikKKwltb3YubAkJU1JDX0xPKCVhMCksRlBfU0NSMF9MTyglYTYpCisKKwlic3IubAkJc2NhbGVfc3FydAkJIyBjYWxjdWxhdGUgc2NhbGUgZmFjdG9yCisKKwljbXBpLmwJCSVkMCwmMHgzZmZmLTB4M2Y4MQkjIHdpbGwgbW92ZSBpbiB1bmRlcmZsb3c/CisJYmVxLncJCWZzcXJ0X3NkX21heV91bmZsCisJYmd0LncJCWZzcXJ0X3NkX3VuZmwJCSMgeWVzOyBnbyBoYW5kbGUgdW5kZXJmbG93CisJY21waS5sCQklZDAsJjB4M2ZmZi0weDQwN2YJIyB3aWxsIG1vdmUgaW4gb3ZlcmZsb3c/CisJYmVxLncJCWZzcXJ0X3NkX21heV9vdmZsCSMgbWF5YmU7IGdvIGNoZWNrCisJYmx0LncJCWZzcXJ0X3NkX292ZmwJCSMgeWVzOyBnbyBoYW5kbGUgb3ZlcmZsb3cKKworIworIyBvcGVyYW5kIHdpbGwgTk9UIG92ZXJmbG93IG9yIHVuZGVyZmxvdyB3aGVuIG1vdmVkIGluIHRvIHRoZSBmcCByZWcgZmlsZQorIworZnNxcnRfc2Rfbm9ybWFsOgorCWZtb3YubAkJJjB4MCwlZnBzcgkJIyBjbGVhciBGUFNSCisJZm1vdi5sCQlMX1NDUjMoJWE2KSwlZnBjcgkjIHNldCBGUENSCisKKwlmc3FydC54CQlGUF9TQ1IwKCVhNiksJWZwMAkjIHBlcmZvcm0gYWJzb2x1dGUKKworCWZtb3YubAkJJWZwc3IsJWQxCQkjIHNhdmUgRlBTUgorCWZtb3YubAkJJjB4MCwlZnBjcgkJIyBjbGVhciBGUENSCisKKwlvci5sCQklZDEsVVNFUl9GUFNSKCVhNikJIyBzYXZlIElORVgyLE4KKworZnNxcnRfc2Rfbm9ybWFsX2V4aXQ6CisJbW92LmwJCSVkMiwtKCVzcCkJCSMgc2F2ZSBkMgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKKwltb3YudwkJRlBfU0NSMF9FWCglYTYpLCVkMQkjIGxvYWQgc2duLGV4cAorCW1vdi5sCQklZDEsJWQyCQkJIyBtYWtlIGEgY29weQorCWFuZGkubAkJJjB4N2ZmZiwlZDEJCSMgc3RyaXAgc2lnbgorCXN1Yi5sCQklZDAsJWQxCQkJIyBhZGQgc2NhbGUgZmFjdG9yCisJYW5kaS53CQkmMHg4MDAwLCVkMgkJIyBrZWVwIG9sZCBzaWduCisJb3IudwkJJWQxLCVkMgkJCSMgY29uY2F0IG9sZCBzaWduLG5ldyBleHAKKwltb3YudwkJJWQyLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIHJlc3VsdCBpbiBmcDAKKwlydHMKKworIworIyBvcGVyYW5kIGlzIHRvIGJlIHJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbgorIworZnNxcnRfZGJsOgorCW1vdi53CQlTUkNfRVgoJWEwKSxGUF9TQ1IwX0VYKCVhNikKKwltb3YubAkJU1JDX0hJKCVhMCksRlBfU0NSMF9ISSglYTYpCisJbW92LmwJCVNSQ19MTyglYTApLEZQX1NDUjBfTE8oJWE2KQorCisJYnNyLmwJCXNjYWxlX3NxcnQJCSMgY2FsY3VsYXRlIHNjYWxlIGZhY3RvcgorCisJY21waS5sCQklZDAsJjB4M2ZmZi0weDNjMDEJIyB3aWxsIG1vdmUgaW4gdW5kZXJmbG93PworCWJlcS53CQlmc3FydF9zZF9tYXlfdW5mbAorCWJndC5iCQlmc3FydF9zZF91bmZsCQkjIHllczsgZ28gaGFuZGxlIHVuZGVyZmxvdworCWNtcGkubAkJJWQwLCYweDNmZmYtMHg0M2ZmCSMgd2lsbCBtb3ZlIGluIG92ZXJmbG93PworCWJlcS53CQlmc3FydF9zZF9tYXlfb3ZmbAkjIG1heWJlOyBnbyBjaGVjaworCWJsdC53CQlmc3FydF9zZF9vdmZsCQkjIHllczsgZ28gaGFuZGxlIG92ZXJmbG93CisJYnJhLncJCWZzcXJ0X3NkX25vcm1hbAkJIyBubzsgaG8gaGFuZGxlIG5vcm1hbGl6ZWQgb3AKKworIyB3ZSdyZSBvbiB0aGUgbGluZSBoZXJlIGFuZCB0aGUgZGlzdGluZ3Vpc2luZyBjaGFyYWN0ZXJpc3RpYyBpcyB3aGV0aGVyCisjIHRoZSBleHBvbmVudCBpcyAzZmZmIG9yIDNmZmUuIGlmIGl0J3MgM2ZmZSwgdGhlbiBpdCdzIGEgc2FmZSBudW1iZXIKKyMgZWxzZXdpc2UgZmFsbCB0aHJvdWdoIHRvIHVuZGVyZmxvdy4KK2ZzcXJ0X3NkX21heV91bmZsOgorCWJ0c3QJCSYweDAsMStGUF9TQ1IwX0VYKCVhNikJIyBpcyBleHBvbmVudCAweDNmZmY/CisJYm5lLncJCWZzcXJ0X3NkX25vcm1hbAkJIyB5ZXMsIHNvIG5vIHVuZGVyZmxvdworCisjCisjIG9wZXJhbmQgV0lMTCB1bmRlcmZsb3cgd2hlbiBtb3ZlZCBpbiB0byB0aGUgZnAgcmVnaXN0ZXIgZmlsZQorIworZnNxcnRfc2RfdW5mbDoKKwlic2V0CQkmdW5mbF9iaXQsRlBTUl9FWENFUFQoJWE2KSAjIHNldCB1bmZsIGV4YyBiaXQKKworCWZtb3YubAkJJnJ6X21vZGUqMHgxMCwlZnBjcgkjIHNldCBGUENSCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKworCWZzcXJ0LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgZXhlY3V0ZSBzcXVhcmUgcm9vdAorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKyMgaWYgdW5kZXJmbG93IG9yIGluZXhhY3QgaXMgZW5hYmxlZCwgZ28gY2FsY3VsYXRlIEVYT1AgZmlyc3QuCisJbW92LmIJCUZQQ1JfRU5BQkxFKCVhNiksJWQxCisJYW5kaS5iCQkmMHgwYiwlZDEJCSMgaXMgVU5GTCBvciBJTkVYIGVuYWJsZWQ/CisJYm5lLmIJCWZzcXJ0X3NkX3VuZmxfZW5hCSMgeWVzCisKK2ZzcXJ0X3NkX3VuZmxfZGlzOgorCWZtb3ZtLngJCSYweDgwLEZQX1NDUjAoJWE2KQkjIHN0b3JlIG91dCByZXN1bHQKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAkjIHBhc3M6IHJlc3VsdCBhZGRyCisJbW92LmwJCUxfU0NSMyglYTYpLCVkMQkJIyBwYXNzOiBybmQgcHJlYyxtb2RlCisJYnNyLmwJCXVuZl9yZXMJCQkjIGNhbGN1bGF0ZSBkZWZhdWx0IHJlc3VsdAorCW9yLmIJCSVkMCxGUFNSX0NDKCVhNikJIyBzZXQgcG9zc2libGUgJ1onIGNjb2RlCisJZm1vdm0ueAkJRlBfU0NSMCglYTYpLCYweDgwCSMgcmV0dXJuIGRlZmF1bHQgcmVzdWx0IGluIGZwMAorCXJ0cworCisjCisjIG9wZXJhbmQgd2lsbCB1bmRlcmZsb3cgQU5EIHVuZGVyZmxvdyBpcyBlbmFibGVkLgorIyB0aGVyZWZvcmUsIHdlIG11c3QgcmV0dXJuIHRoZSByZXN1bHQgcm91bmRlZCB0byBleHRlbmRlZCBwcmVjaXNpb24uCisjCitmc3FydF9zZF91bmZsX2VuYToKKwltb3YubAkJRlBfU0NSMF9ISSglYTYpLEZQX1NDUjFfSEkoJWE2KQorCW1vdi5sCQlGUF9TQ1IwX0xPKCVhNiksRlBfU0NSMV9MTyglYTYpCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBsb2FkIGN1cnJlbnQgZXhwb25lbnQKKworCW1vdi5sCQklZDIsLSglc3ApCQkjIHNhdmUgZDIKKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgc3VidHJhY3Qgc2NhbGUgZmFjdG9yCisJYWRkaS5sCQkmMHg2MDAwLCVkMQkJIyBhZGQgbmV3IGJpYXMKKwlhbmRpLncJCSYweDdmZmYsJWQxCisJb3IudwkJJWQyLCVkMQkJCSMgY29uY2F0IG5ldyBzaWduLG5ldyBleHAKKwltb3YudwkJJWQxLEZQX1NDUjFfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwCisJZm1vdm0ueAkJRlBfU0NSMSglYTYpLCYweDQwCSMgcmV0dXJuIEVYT1AgaW4gZnAxCisJbW92LmwJCSglc3ApKywlZDIJCSMgcmVzdG9yZSBkMgorCWJyYS5iCQlmc3FydF9zZF91bmZsX2RpcworCisjCisjIG9wZXJhbmQgV0lMTCBvdmVyZmxvdy4KKyMKK2ZzcXJ0X3NkX292Zmw6CisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworCWZzcXJ0LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBzcXVhcmUgcm9vdAorCisJZm1vdi5sCQkmMHgwLCVmcGNyCQkjIGNsZWFyIEZQQ1IKKwlmbW92LmwJCSVmcHNyLCVkMQkJIyBzYXZlIEZQU1IKKworCW9yLmwJCSVkMSxVU0VSX0ZQU1IoJWE2KQkjIHNhdmUgSU5FWDIsTgorCitmc3FydF9zZF9vdmZsX3RzdDoKKwlvci5sCQkmb3ZmbF9pbnhfbWFzayxVU0VSX0ZQU1IoJWE2KSAjIHNldCBvdmZsL2FvdmZsL2FpbmV4CisKKwltb3YuYgkJRlBDUl9FTkFCTEUoJWE2KSwlZDEKKwlhbmRpLmIJCSYweDEzLCVkMQkJIyBpcyBPVkZMIG9yIElORVggZW5hYmxlZD8KKwlibmUuYgkJZnNxcnRfc2Rfb3ZmbF9lbmEJIyB5ZXMKKworIworIyBPVkZMIGlzIG5vdCBlbmFibGVkOyB0aGVyZWZvcmUsIHdlIG11c3QgY3JlYXRlIHRoZSBkZWZhdWx0IHJlc3VsdCBieQorIyBjYWxsaW5nIG92Zl9yZXMoKS4KKyMKK2ZzcXJ0X3NkX292ZmxfZGlzOgorCWJ0c3QJCSZuZWdfYml0LEZQU1JfQ0MoJWE2KQkjIGlzIHJlc3VsdCBuZWdhdGl2ZT8KKwlzbmUJCSVkMQkJCSMgc2V0IHNpZ24gcGFyYW0gYWNjb3JkaW5nbHkKKwltb3YubAkJTF9TQ1IzKCVhNiksJWQwCQkjIHBhc3M6IHByZWMsbW9kZQorCWJzci5sCQlvdmZfcmVzCQkJIyBjYWxjdWxhdGUgZGVmYXVsdCByZXN1bHQKKwlvci5iCQklZDAsRlBTUl9DQyglYTYpCSMgc2V0IElORixOIGlmIGFwcGxpY2FibGUKKwlmbW92bS54CQkoJWEwKSwmMHg4MAkJIyByZXR1cm4gZGVmYXVsdCByZXN1bHQgaW4gZnAwCisJcnRzCisKKyMKKyMgT1ZGTCBpcyBlbmFibGVkLgorIyB0aGUgSU5FWDIgYml0IGhhcyBhbHJlYWR5IGJlZW4gdXBkYXRlZCBieSB0aGUgcm91bmQgdG8gdGhlIGNvcnJlY3QgcHJlY2lzaW9uLgorIyBub3csIHJvdW5kIHRvIGV4dGVuZGVkKGFuZCBkb24ndCBhbHRlciB0aGUgRlBTUikuCisjCitmc3FydF9zZF9vdmZsX2VuYToKKwltb3YubAkJJWQyLC0oJXNwKQkJIyBzYXZlIGQyCisJbW92LncJCUZQX1NDUjBfRVgoJWE2KSwlZDEJIyBmZXRjaCB7c2duLGV4cH0KKwltb3YubAkJJWQxLCVkMgkJCSMgbWFrZSBhIGNvcHkKKwlhbmRpLmwJCSYweDdmZmYsJWQxCQkjIHN0cmlwIHNpZ24KKwlhbmRpLncJCSYweDgwMDAsJWQyCQkjIGtlZXAgb2xkIHNpZ24KKwlzdWIubAkJJWQwLCVkMQkJCSMgYWRkIHNjYWxlIGZhY3RvcgorCXN1YmkubAkJJjB4NjAwMCwlZDEJCSMgc3VidHJhY3QgYmlhcworCWFuZGkudwkJJjB4N2ZmZiwlZDEKKwlvci53CQklZDIsJWQxCQkJIyBjb25jYXQgc2lnbixleHAKKwltb3YudwkJJWQxLEZQX1NDUjBfRVgoJWE2KQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwlmbW92bS54CQlGUF9TQ1IwKCVhNiksJjB4NDAJIyByZXR1cm4gRVhPUCBpbiBmcDEKKwltb3YubAkJKCVzcCkrLCVkMgkJIyByZXN0b3JlIGQyCisJYnJhLmIJCWZzcXJ0X3NkX292ZmxfZGlzCisKKyMKKyMgdGhlIG1vdmUgaW4gTUFZIHVuZGVyZmxvdy4gc28uLi4KKyMKK2ZzcXJ0X3NkX21heV9vdmZsOgorCWJ0c3QJCSYweDAsMStGUF9TQ1IwX0VYKCVhNikJIyBpcyBleHBvbmVudCAweDNmZmY/CisJYm5lLncJCWZzcXJ0X3NkX292ZmwJCSMgeWVzLCBzbyBvdmVyZmxvdworCisJZm1vdi5sCQkmMHgwLCVmcHNyCQkjIGNsZWFyIEZQU1IKKwlmbW92LmwJCUxfU0NSMyglYTYpLCVmcGNyCSMgc2V0IEZQQ1IKKworCWZzcXJ0LngJCUZQX1NDUjAoJWE2KSwlZnAwCSMgcGVyZm9ybSBhYnNvbHV0ZQorCisJZm1vdi5sCQklZnBzciwlZDEJCSMgc2F2ZSBzdGF0dXMKKwlmbW92LmwJCSYweDAsJWZwY3IJCSMgY2xlYXIgRlBDUgorCisJb3IubAkJJWQxLFVTRVJfRlBTUiglYTYpCSMgc2F2ZSBJTkVYMixOCisKKwlmbW92LngJCSVmcDAsJWZwMQkJIyBtYWtlIGEgY29weSBvZiByZXN1bHQKKwlmY21wLmIJCSVmcDEsJjB4MQkJIyBpcyB8cmVzdWx0fCA+PSAxLmI/CisJZmJnZS53CQlmc3FydF9zZF9vdmZsX3RzdAkjIHllczsgb3ZlcmZsb3cgaGFzIG9jY3VycmVkCisKKyMgbm8sIGl0IGRpZG4ndCBvdmVyZmxvdzsgd2UgaGF2ZSBjb3JyZWN0IHJlc3VsdAorCWJyYS53CQlmc3FydF9zZF9ub3JtYWxfZXhpdAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjIGlucHV0IGlzIG5vdCBub3JtYWxpemVkOyB3aGF0IGlzIGl0PworIworZnNxcnRfbm90X25vcm06CisJY21waS5iCQklZDEsJkRFTk9STQkJIyB3ZWVkIG91dCBERU5PUk0KKwliZXEudwkJZnNxcnRfZGVub3JtCisJY21waS5iCQklZDEsJlpFUk8JCSMgd2VlZCBvdXQgWkVSTworCWJlcS5iCQlmc3FydF96ZXJvCisJY21waS5iCQklZDEsJklORgkJIyB3ZWVkIG91dCBJTkYKKwliZXEuYgkJZnNxcnRfaW5mCisJY21waS5iCQklZDEsJlNOQU4JCSMgd2VlZCBvdXQgU05BTgorCWJlcS5sCQlyZXNfc25hbl8xb3AKKwlicmEubAkJcmVzX3FuYW5fMW9wCisKKyMKKyMJZnNxcnQoKzApID0gKzAKKyMJZnNxcnQoLTApID0gLTAKKyMJZnNxcnQoK0lORikgPSArSU5GCisjCWZzcXJ0KC1JTkYpID0gT1BFUlIKKyMKK2ZzcXJ0X3plcm86CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIFpFUk8gcG9zaXRpdmUgb3IgbmVnYXRpdmU/CisJYm1pLmIJCWZzcXJ0X3plcm9fbQkJIyBuZWdhdGl2ZQorZnNxcnRfemVyb19wOgorCWZtb3YucwkJJjB4MDAwMDAwMDAsJWZwMAkjIHJldHVybiArWkVSTworCW1vdi5iCQkmel9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ1onIGNjb2RlIGJpdAorCXJ0cworZnNxcnRfemVyb19tOgorCWZtb3YucwkJJjB4ODAwMDAwMDAsJWZwMAkjIHJldHVybiAtWkVSTworCW1vdi5iCQkmel9ibWFzaytuZWdfYm1hc2ssRlBTUl9DQyglYTYpCSMgc2V0ICdaJywnTicgY2NvZGUgYml0cworCXJ0cworCitmc3FydF9pbmY6CisJdHN0LmIJCVNSQ19FWCglYTApCQkjIGlzIElORiBwb3NpdGl2ZSBvciBuZWdhdGl2ZT8KKwlibWkubAkJcmVzX29wZXJyCQkjIG5lZ2F0aXZlCitmc3FydF9pbmZfcDoKKwlmbW92bS54CQlTUkMoJWEwKSwmMHg4MAkJIyByZXR1cm4gK0lORiBpbiBmcDAKKwltb3YuYgkJJmluZl9ibWFzayxGUFNSX0NDKCVhNikJIyBzZXQgJ0knIGNjb2RlIGJpdAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZldGNoX2RyZWcoKTogZmV0Y2ggcmVnaXN0ZXIgYWNjb3JkaW5nIHRvIGluZGV4IGluIGQxCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMSA9IGluZGV4IG9mIHJlZ2lzdGVyIHRvIGZldGNoIGZyb20JCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZDAgPSB2YWx1ZSBvZiByZWdpc3RlciBmZXRjaGVkCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlBY2NvcmRpbmcgdG8gdGhlIGluZGV4IHZhbHVlIGluIGQxIHdoaWNoIGNhbiByYW5nZSBmcm9tIHplcm8JIworIyB0byBmaWZ0ZWVuLCBsb2FkIHRoZSBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyIGZpbGUgdmFsdWUgKHdoZXJlCQkjCisjIGFkZHJlc3MgcmVnaXN0ZXIgaW5kZXhlcyBzdGFydCBhdCA4KS4gRDAvRDEvQTAvQTEvQTYvQTcgYXJlIG9uIHRoZQkjCisjIHN0YWNrLiBUaGUgcmVzdCBzaG91bGQgc3RpbGwgYmUgaW4gdGhlaXIgb3JpZ2luYWwgcGxhY2VzLgkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyB0aGlzIHJvdXRpbmUgbGVhdmVzIGQxIGludGFjdCBmb3Igc3Vic2VxdWVudCBzdG9yZV9kcmVnIGNhbGxzLgorCWdsb2JhbAkJZmV0Y2hfZHJlZworZmV0Y2hfZHJlZzoKKwltb3YudwkJKHRibF9mZHJlZy5iLCVwYywlZDEudyoyKSwlZDAKKwlqbXAJCSh0YmxfZmRyZWcuYiwlcGMsJWQwLncqMSkKKwordGJsX2ZkcmVnOgorCXNob3J0CQlmZHJlZzAgLSB0YmxfZmRyZWcKKwlzaG9ydAkJZmRyZWcxIC0gdGJsX2ZkcmVnCisJc2hvcnQJCWZkcmVnMiAtIHRibF9mZHJlZworCXNob3J0CQlmZHJlZzMgLSB0YmxfZmRyZWcKKwlzaG9ydAkJZmRyZWc0IC0gdGJsX2ZkcmVnCisJc2hvcnQJCWZkcmVnNSAtIHRibF9mZHJlZworCXNob3J0CQlmZHJlZzYgLSB0YmxfZmRyZWcKKwlzaG9ydAkJZmRyZWc3IC0gdGJsX2ZkcmVnCisJc2hvcnQJCWZkcmVnOCAtIHRibF9mZHJlZworCXNob3J0CQlmZHJlZzkgLSB0YmxfZmRyZWcKKwlzaG9ydAkJZmRyZWdhIC0gdGJsX2ZkcmVnCisJc2hvcnQJCWZkcmVnYiAtIHRibF9mZHJlZworCXNob3J0CQlmZHJlZ2MgLSB0YmxfZmRyZWcKKwlzaG9ydAkJZmRyZWdkIC0gdGJsX2ZkcmVnCisJc2hvcnQJCWZkcmVnZSAtIHRibF9mZHJlZworCXNob3J0CQlmZHJlZ2YgLSB0YmxfZmRyZWcKKworZmRyZWcwOgorCW1vdi5sCQlFWENfRFJFR1MrMHgwKCVhNiksJWQwCisJcnRzCitmZHJlZzE6CisJbW92LmwJCUVYQ19EUkVHUysweDQoJWE2KSwlZDAKKwlydHMKK2ZkcmVnMjoKKwltb3YubAkJJWQyLCVkMAorCXJ0cworZmRyZWczOgorCW1vdi5sCQklZDMsJWQwCisJcnRzCitmZHJlZzQ6CisJbW92LmwJCSVkNCwlZDAKKwlydHMKK2ZkcmVnNToKKwltb3YubAkJJWQ1LCVkMAorCXJ0cworZmRyZWc2OgorCW1vdi5sCQklZDYsJWQwCisJcnRzCitmZHJlZzc6CisJbW92LmwJCSVkNywlZDAKKwlydHMKK2ZkcmVnODoKKwltb3YubAkJRVhDX0RSRUdTKzB4OCglYTYpLCVkMAorCXJ0cworZmRyZWc5OgorCW1vdi5sCQlFWENfRFJFR1MrMHhjKCVhNiksJWQwCisJcnRzCitmZHJlZ2E6CisJbW92LmwJCSVhMiwlZDAKKwlydHMKK2ZkcmVnYjoKKwltb3YubAkJJWEzLCVkMAorCXJ0cworZmRyZWdjOgorCW1vdi5sCQklYTQsJWQwCisJcnRzCitmZHJlZ2Q6CisJbW92LmwJCSVhNSwlZDAKKwlydHMKK2ZkcmVnZToKKwltb3YubAkJKCVhNiksJWQwCisJcnRzCitmZHJlZ2Y6CisJbW92LmwJCUVYQ19BNyglYTYpLCVkMAorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXN0b3JlX2RyZWdfbCgpOiBzdG9yZSBsb25nd29yZCB0byBkYXRhIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBkMQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IGxvbmdvd3JkIHZhbHVlIHRvIHN0b3JlCQkJCQkjCisjCWQxID0gaW5kZXggb2YgcmVnaXN0ZXIgdG8gZmV0Y2ggZnJvbQkJCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkoZGF0YSByZWdpc3RlciBpcyB1cGRhdGVkKQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJQWNjb3JkaW5nIHRvIHRoZSBpbmRleCB2YWx1ZSBpbiBkMSwgc3RvcmUgdGhlIGxvbmd3b3JkIHZhbHVlCSMKKyMgaW4gZDAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZGF0YSByZWdpc3Rlci4gRDAvRDEgYXJlIG9uIHRoZSBzdGFjawkjCisjIHdoaWxlIHRoZSByZXN0IGFyZSBpbiB0aGVpciBpbml0aWFsIHBsYWNlcy4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc3RvcmVfZHJlZ19sCitzdG9yZV9kcmVnX2w6CisJbW92LncJCSh0Ymxfc2RyZWdsLmIsJXBjLCVkMS53KjIpLCVkMQorCWptcAkJKHRibF9zZHJlZ2wuYiwlcGMsJWQxLncqMSkKKwordGJsX3NkcmVnbDoKKwlzaG9ydAkJc2RyZWdsMCAtIHRibF9zZHJlZ2wKKwlzaG9ydAkJc2RyZWdsMSAtIHRibF9zZHJlZ2wKKwlzaG9ydAkJc2RyZWdsMiAtIHRibF9zZHJlZ2wKKwlzaG9ydAkJc2RyZWdsMyAtIHRibF9zZHJlZ2wKKwlzaG9ydAkJc2RyZWdsNCAtIHRibF9zZHJlZ2wKKwlzaG9ydAkJc2RyZWdsNSAtIHRibF9zZHJlZ2wKKwlzaG9ydAkJc2RyZWdsNiAtIHRibF9zZHJlZ2wKKwlzaG9ydAkJc2RyZWdsNyAtIHRibF9zZHJlZ2wKKworc2RyZWdsMDoKKwltb3YubAkJJWQwLEVYQ19EUkVHUysweDAoJWE2KQorCXJ0cworc2RyZWdsMToKKwltb3YubAkJJWQwLEVYQ19EUkVHUysweDQoJWE2KQorCXJ0cworc2RyZWdsMjoKKwltb3YubAkJJWQwLCVkMgorCXJ0cworc2RyZWdsMzoKKwltb3YubAkJJWQwLCVkMworCXJ0cworc2RyZWdsNDoKKwltb3YubAkJJWQwLCVkNAorCXJ0cworc2RyZWdsNToKKwltb3YubAkJJWQwLCVkNQorCXJ0cworc2RyZWdsNjoKKwltb3YubAkJJWQwLCVkNgorCXJ0cworc2RyZWdsNzoKKwltb3YubAkJJWQwLCVkNworCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCXN0b3JlX2RyZWdfdygpOiBzdG9yZSB3b3JkIHRvIGRhdGEgcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IGQxCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gd29yZCB2YWx1ZSB0byBzdG9yZQkJCQkJIworIwlkMSA9IGluZGV4IG9mIHJlZ2lzdGVyIHRvIGZldGNoIGZyb20JCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJKGRhdGEgcmVnaXN0ZXIgaXMgdXBkYXRlZCkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUFjY29yZGluZyB0byB0aGUgaW5kZXggdmFsdWUgaW4gZDEsIHN0b3JlIHRoZSB3b3JkIHZhbHVlCSMKKyMgaW4gZDAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZGF0YSByZWdpc3Rlci4gRDAvRDEgYXJlIG9uIHRoZSBzdGFjawkjCisjIHdoaWxlIHRoZSByZXN0IGFyZSBpbiB0aGVpciBpbml0aWFsIHBsYWNlcy4JCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJc3RvcmVfZHJlZ193CitzdG9yZV9kcmVnX3c6CisJbW92LncJCSh0Ymxfc2RyZWd3LmIsJXBjLCVkMS53KjIpLCVkMQorCWptcAkJKHRibF9zZHJlZ3cuYiwlcGMsJWQxLncqMSkKKwordGJsX3NkcmVndzoKKwlzaG9ydAkJc2RyZWd3MCAtIHRibF9zZHJlZ3cKKwlzaG9ydAkJc2RyZWd3MSAtIHRibF9zZHJlZ3cKKwlzaG9ydAkJc2RyZWd3MiAtIHRibF9zZHJlZ3cKKwlzaG9ydAkJc2RyZWd3MyAtIHRibF9zZHJlZ3cKKwlzaG9ydAkJc2RyZWd3NCAtIHRibF9zZHJlZ3cKKwlzaG9ydAkJc2RyZWd3NSAtIHRibF9zZHJlZ3cKKwlzaG9ydAkJc2RyZWd3NiAtIHRibF9zZHJlZ3cKKwlzaG9ydAkJc2RyZWd3NyAtIHRibF9zZHJlZ3cKKworc2RyZWd3MDoKKwltb3YudwkJJWQwLDIrRVhDX0RSRUdTKzB4MCglYTYpCisJcnRzCitzZHJlZ3cxOgorCW1vdi53CQklZDAsMitFWENfRFJFR1MrMHg0KCVhNikKKwlydHMKK3NkcmVndzI6CisJbW92LncJCSVkMCwlZDIKKwlydHMKK3NkcmVndzM6CisJbW92LncJCSVkMCwlZDMKKwlydHMKK3NkcmVndzQ6CisJbW92LncJCSVkMCwlZDQKKwlydHMKK3NkcmVndzU6CisJbW92LncJCSVkMCwlZDUKKwlydHMKK3NkcmVndzY6CisJbW92LncJCSVkMCwlZDYKKwlydHMKK3NkcmVndzc6CisJbW92LncJCSVkMCwlZDcKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlzdG9yZV9kcmVnX2IoKTogc3RvcmUgYnl0ZSB0byBkYXRhIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBkMQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IGJ5dGUgdmFsdWUgdG8gc3RvcmUJCQkJCSMKKyMJZDEgPSBpbmRleCBvZiByZWdpc3RlciB0byBmZXRjaCBmcm9tCQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCShkYXRhIHJlZ2lzdGVyIGlzIHVwZGF0ZWQpCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlBY2NvcmRpbmcgdG8gdGhlIGluZGV4IHZhbHVlIGluIGQxLCBzdG9yZSB0aGUgYnl0ZSB2YWx1ZQkjCisjIGluIGQwIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEgcmVnaXN0ZXIuIEQwL0QxIGFyZSBvbiB0aGUgc3RhY2sJIworIyB3aGlsZSB0aGUgcmVzdCBhcmUgaW4gdGhlaXIgaW5pdGlhbCBwbGFjZXMuCQkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwlnbG9iYWwJCXN0b3JlX2RyZWdfYgorc3RvcmVfZHJlZ19iOgorCW1vdi53CQkodGJsX3NkcmVnYi5iLCVwYywlZDEudyoyKSwlZDEKKwlqbXAJCSh0Ymxfc2RyZWdiLmIsJXBjLCVkMS53KjEpCisKK3RibF9zZHJlZ2I6CisJc2hvcnQJCXNkcmVnYjAgLSB0Ymxfc2RyZWdiCisJc2hvcnQJCXNkcmVnYjEgLSB0Ymxfc2RyZWdiCisJc2hvcnQJCXNkcmVnYjIgLSB0Ymxfc2RyZWdiCisJc2hvcnQJCXNkcmVnYjMgLSB0Ymxfc2RyZWdiCisJc2hvcnQJCXNkcmVnYjQgLSB0Ymxfc2RyZWdiCisJc2hvcnQJCXNkcmVnYjUgLSB0Ymxfc2RyZWdiCisJc2hvcnQJCXNkcmVnYjYgLSB0Ymxfc2RyZWdiCisJc2hvcnQJCXNkcmVnYjcgLSB0Ymxfc2RyZWdiCisKK3NkcmVnYjA6CisJbW92LmIJCSVkMCwzK0VYQ19EUkVHUysweDAoJWE2KQorCXJ0cworc2RyZWdiMToKKwltb3YuYgkJJWQwLDMrRVhDX0RSRUdTKzB4NCglYTYpCisJcnRzCitzZHJlZ2IyOgorCW1vdi5iCQklZDAsJWQyCisJcnRzCitzZHJlZ2IzOgorCW1vdi5iCQklZDAsJWQzCisJcnRzCitzZHJlZ2I0OgorCW1vdi5iCQklZDAsJWQ0CisJcnRzCitzZHJlZ2I1OgorCW1vdi5iCQklZDAsJWQ1CisJcnRzCitzZHJlZ2I2OgorCW1vdi5iCQklZDAsJWQ2CisJcnRzCitzZHJlZ2I3OgorCW1vdi5iCQklZDAsJWQ3CisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgWERFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJaW5jX2FyZWcoKTogaW5jcmVtZW50IGFuIGFkZHJlc3MgcmVnaXN0ZXIgYnkgdGhlIHZhbHVlIGluIGQwCSMKKyMJCQkJCQkJCQkjCisjIFhSRUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCU5vbmUJCQkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWQwID0gYW1vdW50IHRvIGluY3JlbWVudCBieQkJCQkJIworIwlkMSA9IGluZGV4IG9mIGFkZHJlc3MgcmVnaXN0ZXIgdG8gaW5jcmVtZW50CQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJKGFkZHJlc3MgcmVnaXN0ZXIgaXMgdXBkYXRlZCkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVR5cGljYWxseSB1c2VkIGZvciBhbiBpbnN0cnVjdGlvbiB3LyBhIHBvc3QtaW5jcmVtZW50IDxlYT4sCSMKKyMgdGhpcyByb3V0aW5lIGFkZHMgdGhlIGluY3JlbWVudCB2YWx1ZSBpbiBkMCB0byB0aGUgYWRkcmVzcyByZWdpc3RlcgkjCisjIHNwZWNpZmllZCBieSBkMS4gQTAvQTEvQTYvQTcgcmVzaWRlIG9uIHRoZSBzdGFjay4gVGhlIHJlc3QgcmVzaWRlCSMKKyMgaW4gdGhlaXIgb3JpZ2luYWwgcGxhY2VzLgkJCQkJCSMKKyMJRm9yIGE3LCBpZiB0aGUgaW5jcmVtZW50IGFtb3VudCBpcyBvbmUsIHRoZW4gd2UgaGF2ZSB0bwkJIworIyBpbmNyZW1lbnQgYnkgdHdvLiBGb3IgYW55IGE3IHVwZGF0ZSwgc2V0IHRoZSBtaWE3X2ZsYWcgc28gdGhhdCBpZgkjCisjIGFuIGFjY2VzcyBlcnJvciBleGNlcHRpb24gb2NjdXJzIGxhdGVyIGluIGVtdWxhdGlvbiwgdGhpcyBhZGRyZXNzCSMKKyMgcmVnaXN0ZXIgdXBkYXRlIGNhbiBiZSB1bmRvbmUuCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlpbmNfYXJlZworaW5jX2FyZWc6CisJbW92LncJCSh0YmxfaWFyZWcuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX2lhcmVnLmIsJXBjLCVkMS53KjEpCisKK3RibF9pYXJlZzoKKwlzaG9ydAkJaWFyZWcwIC0gdGJsX2lhcmVnCisJc2hvcnQJCWlhcmVnMSAtIHRibF9pYXJlZworCXNob3J0CQlpYXJlZzIgLSB0YmxfaWFyZWcKKwlzaG9ydAkJaWFyZWczIC0gdGJsX2lhcmVnCisJc2hvcnQJCWlhcmVnNCAtIHRibF9pYXJlZworCXNob3J0CQlpYXJlZzUgLSB0YmxfaWFyZWcKKwlzaG9ydAkJaWFyZWc2IC0gdGJsX2lhcmVnCisJc2hvcnQJCWlhcmVnNyAtIHRibF9pYXJlZworCitpYXJlZzA6CWFkZC5sCQklZDAsRVhDX0RSRUdTKzB4OCglYTYpCisJcnRzCitpYXJlZzE6CWFkZC5sCQklZDAsRVhDX0RSRUdTKzB4YyglYTYpCisJcnRzCitpYXJlZzI6CWFkZC5sCQklZDAsJWEyCisJcnRzCitpYXJlZzM6CWFkZC5sCQklZDAsJWEzCisJcnRzCitpYXJlZzQ6CWFkZC5sCQklZDAsJWE0CisJcnRzCitpYXJlZzU6CWFkZC5sCQklZDAsJWE1CisJcnRzCitpYXJlZzY6CWFkZC5sCQklZDAsKCVhNikKKwlydHMKK2lhcmVnNzoJbW92LmIJCSZtaWE3X2ZsZyxTUENPTkRfRkxHKCVhNikKKwljbXBpLmIJCSVkMCwmMHgxCisJYmVxLmIJCWlhcmVnN2IKKwlhZGQubAkJJWQwLEVYQ19BNyglYTYpCisJcnRzCitpYXJlZzdiOgorCWFkZHEubAkJJjB4MixFWENfQTcoJWE2KQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWRlY19hcmVnKCk6IGRlY3JlbWVudCBhbiBhZGRyZXNzIHJlZ2lzdGVyIGJ5IHRoZSB2YWx1ZSBpbiBkMAkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IGFtb3VudCB0byBkZWNyZW1lbnQgYnkJCQkJCSMKKyMJZDEgPSBpbmRleCBvZiBhZGRyZXNzIHJlZ2lzdGVyIHRvIGRlY3JlbWVudAkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCShhZGRyZXNzIHJlZ2lzdGVyIGlzIHVwZGF0ZWQpCQkJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlUeXBpY2FsbHkgdXNlZCBmb3IgYW4gaW5zdHJ1Y3Rpb24gdy8gYSBwcmUtZGVjcmVtZW50IDxlYT4sCSMKKyMgdGhpcyByb3V0aW5lIGFkZHMgdGhlIGRlY3JlbWVudCB2YWx1ZSBpbiBkMCB0byB0aGUgYWRkcmVzcyByZWdpc3RlcgkjCisjIHNwZWNpZmllZCBieSBkMS4gQTAvQTEvQTYvQTcgcmVzaWRlIG9uIHRoZSBzdGFjay4gVGhlIHJlc3QgcmVzaWRlCSMKKyMgaW4gdGhlaXIgb3JpZ2luYWwgcGxhY2VzLgkJCQkJCSMKKyMJRm9yIGE3LCBpZiB0aGUgZGVjcmVtZW50IGFtb3VudCBpcyBvbmUsIHRoZW4gd2UgaGF2ZSB0bwkJIworIyBkZWNyZW1lbnQgYnkgdHdvLiBGb3IgYW55IGE3IHVwZGF0ZSwgc2V0IHRoZSBtZGE3X2ZsYWcgc28gdGhhdCBpZgkjCisjIGFuIGFjY2VzcyBlcnJvciBleGNlcHRpb24gb2NjdXJzIGxhdGVyIGluIGVtdWxhdGlvbiwgdGhpcyBhZGRyZXNzCSMKKyMgcmVnaXN0ZXIgdXBkYXRlIGNhbiBiZSB1bmRvbmUuCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlkZWNfYXJlZworZGVjX2FyZWc6CisJbW92LncJCSh0YmxfZGFyZWcuYiwlcGMsJWQxLncqMiksJWQxCisJam1wCQkodGJsX2RhcmVnLmIsJXBjLCVkMS53KjEpCisKK3RibF9kYXJlZzoKKwlzaG9ydAkJZGFyZWcwIC0gdGJsX2RhcmVnCisJc2hvcnQJCWRhcmVnMSAtIHRibF9kYXJlZworCXNob3J0CQlkYXJlZzIgLSB0YmxfZGFyZWcKKwlzaG9ydAkJZGFyZWczIC0gdGJsX2RhcmVnCisJc2hvcnQJCWRhcmVnNCAtIHRibF9kYXJlZworCXNob3J0CQlkYXJlZzUgLSB0YmxfZGFyZWcKKwlzaG9ydAkJZGFyZWc2IC0gdGJsX2RhcmVnCisJc2hvcnQJCWRhcmVnNyAtIHRibF9kYXJlZworCitkYXJlZzA6CXN1Yi5sCQklZDAsRVhDX0RSRUdTKzB4OCglYTYpCisJcnRzCitkYXJlZzE6CXN1Yi5sCQklZDAsRVhDX0RSRUdTKzB4YyglYTYpCisJcnRzCitkYXJlZzI6CXN1Yi5sCQklZDAsJWEyCisJcnRzCitkYXJlZzM6CXN1Yi5sCQklZDAsJWEzCisJcnRzCitkYXJlZzQ6CXN1Yi5sCQklZDAsJWE0CisJcnRzCitkYXJlZzU6CXN1Yi5sCQklZDAsJWE1CisJcnRzCitkYXJlZzY6CXN1Yi5sCQklZDAsKCVhNikKKwlydHMKK2RhcmVnNzoJbW92LmIJCSZtZGE3X2ZsZyxTUENPTkRfRkxHKCVhNikKKwljbXBpLmIJCSVkMCwmMHgxCisJYmVxLmIJCWRhcmVnN2IKKwlzdWIubAkJJWQwLEVYQ19BNyglYTYpCisJcnRzCitkYXJlZzdiOgorCXN1YnEubAkJJjB4MixFWENfQTcoJWE2KQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlsb2FkX2ZwbjEoKTogbG9hZCBGUCByZWdpc3RlciB2YWx1ZSBpbnRvIEZQX1NSQyhhNikuCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IGluZGV4IG9mIEZQIHJlZ2lzdGVyIHRvIGxvYWQJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRlBfU1JDKGE2KSA9IHZhbHVlIGxvYWRlZCBmcm9tIEZQIHJlZ2lzdGVyIGZpbGUJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlVc2luZyB0aGUgaW5kZXggaW4gZDAsIGxvYWQgRlBfU1JDKGE2KSB3aXRoIGEgbnVtYmVyIGZyb20gdGhlCSMKKyMgRlAgcmVnaXN0ZXIgZmlsZS4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJbG9hZF9mcG4xCitsb2FkX2ZwbjE6CisJbW92LncJCSh0YmxfbG9hZF9mcG4xLmIsJXBjLCVkMC53KjIpLCAlZDAKKwlqbXAJCSh0YmxfbG9hZF9mcG4xLmIsJXBjLCVkMC53KjEpCisKK3RibF9sb2FkX2ZwbjE6CisJc2hvcnQJCWxvYWRfZnBuMV8wIC0gdGJsX2xvYWRfZnBuMQorCXNob3J0CQlsb2FkX2ZwbjFfMSAtIHRibF9sb2FkX2ZwbjEKKwlzaG9ydAkJbG9hZF9mcG4xXzIgLSB0YmxfbG9hZF9mcG4xCisJc2hvcnQJCWxvYWRfZnBuMV8zIC0gdGJsX2xvYWRfZnBuMQorCXNob3J0CQlsb2FkX2ZwbjFfNCAtIHRibF9sb2FkX2ZwbjEKKwlzaG9ydAkJbG9hZF9mcG4xXzUgLSB0YmxfbG9hZF9mcG4xCisJc2hvcnQJCWxvYWRfZnBuMV82IC0gdGJsX2xvYWRfZnBuMQorCXNob3J0CQlsb2FkX2ZwbjFfNyAtIHRibF9sb2FkX2ZwbjEKKworbG9hZF9mcG4xXzA6CisJbW92LmwJCTArRVhDX0ZQMCglYTYpLCAwK0ZQX1NSQyglYTYpCisJbW92LmwJCTQrRVhDX0ZQMCglYTYpLCA0K0ZQX1NSQyglYTYpCisJbW92LmwJCTgrRVhDX0ZQMCglYTYpLCA4K0ZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCisJcnRzCitsb2FkX2ZwbjFfMToKKwltb3YubAkJMCtFWENfRlAxKCVhNiksIDArRlBfU1JDKCVhNikKKwltb3YubAkJNCtFWENfRlAxKCVhNiksIDQrRlBfU1JDKCVhNikKKwltb3YubAkJOCtFWENfRlAxKCVhNiksIDgrRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCAlYTAKKwlydHMKK2xvYWRfZnBuMV8yOgorCWZtb3ZtLngJCSYweDIwLCBGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksICVhMAorCXJ0cworbG9hZF9mcG4xXzM6CisJZm1vdm0ueAkJJjB4MTAsIEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCisJcnRzCitsb2FkX2ZwbjFfNDoKKwlmbW92bS54CQkmMHgwOCwgRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCAlYTAKKwlydHMKK2xvYWRfZnBuMV81OgorCWZtb3ZtLngJCSYweDA0LCBGUF9TUkMoJWE2KQorCWxlYQkJRlBfU1JDKCVhNiksICVhMAorCXJ0cworbG9hZF9mcG4xXzY6CisJZm1vdm0ueAkJJjB4MDIsIEZQX1NSQyglYTYpCisJbGVhCQlGUF9TUkMoJWE2KSwgJWEwCisJcnRzCitsb2FkX2ZwbjFfNzoKKwlmbW92bS54CQkmMHgwMSwgRlBfU1JDKCVhNikKKwlsZWEJCUZQX1NSQyglYTYpLCAlYTAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlsb2FkX2ZwbjIoKTogbG9hZCBGUCByZWdpc3RlciB2YWx1ZSBpbnRvIEZQX0RTVChhNikuCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlOb25lCQkJCQkJCQkjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlkMCA9IGluZGV4IG9mIEZQIHJlZ2lzdGVyIHRvIGxvYWQJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRlBfRFNUKGE2KSA9IHZhbHVlIGxvYWRlZCBmcm9tIEZQIHJlZ2lzdGVyIGZpbGUJCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlVc2luZyB0aGUgaW5kZXggaW4gZDAsIGxvYWQgRlBfRFNUKGE2KSB3aXRoIGEgbnVtYmVyIGZyb20gdGhlCSMKKyMgRlAgcmVnaXN0ZXIgZmlsZS4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCWdsb2JhbAkJbG9hZF9mcG4yCitsb2FkX2ZwbjI6CisJbW92LncJCSh0YmxfbG9hZF9mcG4yLmIsJXBjLCVkMC53KjIpLCAlZDAKKwlqbXAJCSh0YmxfbG9hZF9mcG4yLmIsJXBjLCVkMC53KjEpCisKK3RibF9sb2FkX2ZwbjI6CisJc2hvcnQJCWxvYWRfZnBuMl8wIC0gdGJsX2xvYWRfZnBuMgorCXNob3J0CQlsb2FkX2ZwbjJfMSAtIHRibF9sb2FkX2ZwbjIKKwlzaG9ydAkJbG9hZF9mcG4yXzIgLSB0YmxfbG9hZF9mcG4yCisJc2hvcnQJCWxvYWRfZnBuMl8zIC0gdGJsX2xvYWRfZnBuMgorCXNob3J0CQlsb2FkX2ZwbjJfNCAtIHRibF9sb2FkX2ZwbjIKKwlzaG9ydAkJbG9hZF9mcG4yXzUgLSB0YmxfbG9hZF9mcG4yCisJc2hvcnQJCWxvYWRfZnBuMl82IC0gdGJsX2xvYWRfZnBuMgorCXNob3J0CQlsb2FkX2ZwbjJfNyAtIHRibF9sb2FkX2ZwbjIKKworbG9hZF9mcG4yXzA6CisJbW92LmwJCTArRVhDX0ZQMCglYTYpLCAwK0ZQX0RTVCglYTYpCisJbW92LmwJCTQrRVhDX0ZQMCglYTYpLCA0K0ZQX0RTVCglYTYpCisJbW92LmwJCTgrRVhDX0ZQMCglYTYpLCA4K0ZQX0RTVCglYTYpCisJbGVhCQlGUF9EU1QoJWE2KSwgJWEwCisJcnRzCitsb2FkX2ZwbjJfMToKKwltb3YubAkJMCtFWENfRlAxKCVhNiksIDArRlBfRFNUKCVhNikKKwltb3YubAkJNCtFWENfRlAxKCVhNiksIDQrRlBfRFNUKCVhNikKKwltb3YubAkJOCtFWENfRlAxKCVhNiksIDgrRlBfRFNUKCVhNikKKwlsZWEJCUZQX0RTVCglYTYpLCAlYTAKKwlydHMKK2xvYWRfZnBuMl8yOgorCWZtb3ZtLngJCSYweDIwLCBGUF9EU1QoJWE2KQorCWxlYQkJRlBfRFNUKCVhNiksICVhMAorCXJ0cworbG9hZF9mcG4yXzM6CisJZm1vdm0ueAkJJjB4MTAsIEZQX0RTVCglYTYpCisJbGVhCQlGUF9EU1QoJWE2KSwgJWEwCisJcnRzCitsb2FkX2ZwbjJfNDoKKwlmbW92bS54CQkmMHgwOCwgRlBfRFNUKCVhNikKKwlsZWEJCUZQX0RTVCglYTYpLCAlYTAKKwlydHMKK2xvYWRfZnBuMl81OgorCWZtb3ZtLngJCSYweDA0LCBGUF9EU1QoJWE2KQorCWxlYQkJRlBfRFNUKCVhNiksICVhMAorCXJ0cworbG9hZF9mcG4yXzY6CisJZm1vdm0ueAkJJjB4MDIsIEZQX0RTVCglYTYpCisJbGVhCQlGUF9EU1QoJWE2KSwgJWEwCisJcnRzCitsb2FkX2ZwbjJfNzoKKwlmbW92bS54CQkmMHgwMSwgRlBfRFNUKCVhNikKKwlsZWEJCUZQX0RTVCglYTYpLCAlYTAKKwlydHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBYREVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlzdG9yZV9mcHJlZygpOiBzdG9yZSBhbiBmcCB2YWx1ZSB0byB0aGUgZnByZWcgZGVzaWduYXRlZCBkMC4JIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJZnAwID0gZXh0ZW5kZWQgcHJlY2lzaW9uIHZhbHVlIHRvIHN0b3JlCQkJCSMKKyMJZDAgID0gaW5kZXggb2YgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJU3RvcmUgdGhlIHZhbHVlIGluIGZwMCB0byB0aGUgRlAgcmVnaXN0ZXIgZGVzaWduYXRlZCBieSB0aGUJIworIyB2YWx1ZSBpbiBkMC4gVGhlIEZQIG51bWJlciBjYW4gYmUgREVOT1JNIG9yIFNOQU4gc28gd2UgaGF2ZSB0byBiZQkjCisjIGNhcmVmdWwgdGhhdCB3ZSBkb24ndCB0YWtlIGFuIGV4Y2VwdGlvbiBoZXJlLgkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJZ2xvYmFsCQlzdG9yZV9mcHJlZworc3RvcmVfZnByZWc6CisJbW92LncJCSh0Ymxfc3RvcmVfZnByZWcuYiwlcGMsJWQwLncqMiksICVkMAorCWptcAkJKHRibF9zdG9yZV9mcHJlZy5iLCVwYywlZDAudyoxKQorCit0Ymxfc3RvcmVfZnByZWc6CisJc2hvcnQJCXN0b3JlX2ZwcmVnXzAgLSB0Ymxfc3RvcmVfZnByZWcKKwlzaG9ydAkJc3RvcmVfZnByZWdfMSAtIHRibF9zdG9yZV9mcHJlZworCXNob3J0CQlzdG9yZV9mcHJlZ18yIC0gdGJsX3N0b3JlX2ZwcmVnCisJc2hvcnQJCXN0b3JlX2ZwcmVnXzMgLSB0Ymxfc3RvcmVfZnByZWcKKwlzaG9ydAkJc3RvcmVfZnByZWdfNCAtIHRibF9zdG9yZV9mcHJlZworCXNob3J0CQlzdG9yZV9mcHJlZ181IC0gdGJsX3N0b3JlX2ZwcmVnCisJc2hvcnQJCXN0b3JlX2ZwcmVnXzYgLSB0Ymxfc3RvcmVfZnByZWcKKwlzaG9ydAkJc3RvcmVfZnByZWdfNyAtIHRibF9zdG9yZV9mcHJlZworCitzdG9yZV9mcHJlZ18wOgorCWZtb3ZtLngJCSYweDgwLCBFWENfRlAwKCVhNikKKwlydHMKK3N0b3JlX2ZwcmVnXzE6CisJZm1vdm0ueAkJJjB4ODAsIEVYQ19GUDEoJWE2KQorCXJ0cworc3RvcmVfZnByZWdfMjoKKwlmbW92bS54CQkmMHgwMSwgLSglc3ApCisJZm1vdm0ueAkJKCVzcCkrLCAmMHgyMAorCXJ0cworc3RvcmVfZnByZWdfMzoKKwlmbW92bS54CQkmMHgwMSwgLSglc3ApCisJZm1vdm0ueAkJKCVzcCkrLCAmMHgxMAorCXJ0cworc3RvcmVfZnByZWdfNDoKKwlmbW92bS54CQkmMHgwMSwgLSglc3ApCisJZm1vdm0ueAkJKCVzcCkrLCAmMHgwOAorCXJ0cworc3RvcmVfZnByZWdfNToKKwlmbW92bS54CQkmMHgwMSwgLSglc3ApCisJZm1vdm0ueAkJKCVzcCkrLCAmMHgwNAorCXJ0cworc3RvcmVfZnByZWdfNjoKKwlmbW92bS54CQkmMHgwMSwgLSglc3ApCisJZm1vdm0ueAkJKCVzcCkrLCAmMHgwMgorCXJ0cworc3RvcmVfZnByZWdfNzoKKwlmbW92bS54CQkmMHgwMSwgLSglc3ApCisJZm1vdm0ueAkJKCVzcCkrLCAmMHgwMQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWdldF9wYWNrZWQoKTogZmV0Y2ggYSBwYWNrZWQgb3BlcmFuZCBmcm9tIG1lbW9yeSBhbmQgdGhlbgkjCisjCQkgICAgICBjb252ZXJ0IGl0IHRvIGEgZmxvYXRpbmctcG9pbnQgYmluYXJ5IG51bWJlci4JIworIwkJCQkJCQkJCSMKKyMgWFJFRiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJX2RjYWxjX2VhKCkgLSBjYWxjdWxhdGUgdGhlIGNvcnJlY3QgPGVhPgkJCSMKKyMJX21lbV9yZWFkKCkgLSBmZXRjaCB0aGUgcGFja2VkIG9wZXJhbmQgZnJvbSBtZW1vcnkJCSMKKyMJZmFjY19pbl94KCkgLSB0aGUgZmV0Y2ggZmFpbGVkIHNvIGp1bXAgdG8gc3BlY2lhbCBleGl0IGNvZGUJIworIwlkZWNiaW4oKSAgICAtIGNvbnZlcnQgcGFja2VkIHRvIGJpbmFyeSBleHRlbmRlZCBwcmVjaXNpb24JIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJSWYgbm8gZmFpbHVyZSBvbiBfbWVtX3JlYWQoKToJCQkJCSMKKyMJRlBfU1JDKGE2KSA9IHBhY2tlZCBvcGVyYW5kIG5vdyBhcyBhIGJpbmFyeSBGUCBudW1iZXIJCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCUdldCB0aGUgY29ycmVjdCA8ZWE+IHdoaWhjIGlzIHRoZSB2YWx1ZSBvbiB0aGUgZXhjZXB0aW9uIHN0YWNrCSMKKyMgZnJhbWUgdy8gbWF5YmUgYSBjb3JyZWN0aW9uIGZhY3RvciBpZiB0aGUgPGVhPiBpcyAtKGFuKSBvciAoYW4pKy4JIworIyBUaGVuLCBmZXRjaCB0aGUgb3BlcmFuZCBmcm9tIG1lbW9yeS4gSWYgdGhlIGZldGNoIGZhaWxzLCBleGl0CQkjCisjIHRocm91Z2ggZmFjY19pbl94KCkuCQkJCQkJCSMKKyMJSWYgdGhlIHBhY2tlZCBvcGVyYW5kIGlzIGEgWkVSTyxOQU4sIG9yIElORiwgY29udmVydCBpdCB0bwkjCisjIGl0cyBiaW5hcnkgcmVwcmVzZW50YXRpb24gaGVyZS4gRWxzZSwgY2FsbCBkZWNiaW4oKSB3aGljaCB3aWxsCSMKKyMgY29udmVydCB0aGUgcGFja2VkIHZhbHVlIHRvIGFuIGV4dGVuZGVkIHByZWNpc2lvbiBiaW5hcnkgdmFsdWUuCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgdGhlIHN0YWNrZWQgPGVhPiBmb3IgcGFja2VkIGlzIGNvcnJlY3QgZXhjZXB0IGZvciAtKEFuKS4KKyMgdGhlIGJhc2UgcmVnIG11c3QgYmUgdXBkYXRlZCBmb3IgYm90aCAtKEFuKSBhbmQgKEFuKSsuCisJZ2xvYmFsCQlnZXRfcGFja2VkCitnZXRfcGFja2VkOgorCW1vdi5sCQkmMHhjLCVkMAkJIyBwYWNrZWQgaXMgMTIgYnl0ZXMKKwlic3IubAkJX2RjYWxjX2VhCQkjIGZldGNoIDxlYT47IGNvcnJlY3QgQW4KKworCWxlYQkJRlBfU1JDKCVhNiksJWExCQkjIHBhc3M6IHB0ciB0byBzdXBlciBkc3QKKwltb3YubAkJJjB4YywlZDAJCSMgcGFzczogMTIgYnl0ZXMKKwlic3IubAkJX2RtZW1fcmVhZAkJIyByZWFkIHBhY2tlZCBvcGVyYW5kCisKKwl0c3QubAkJJWQxCQkJIyBkaWQgZGZldGNoIGZhaWw/CisJYm5lLmwJCWZhY2NfaW5feAkJIyB5ZXMKKworIyBUaGUgcGFja2VkIG9wZXJhbmQgaXMgYW4gSU5GIG9yIGEgTkFOIGlmIHRoZSBleHBvbmVudCBmaWVsZCBpcyBhbGwgb25lcy4KKwliZmV4dHUJCUZQX1NSQyglYTYpeyYxOiYxNX0sJWQwCSMgZ2V0IGV4cAorCWNtcGkudwkJJWQwLCYweDdmZmYJCSMgSU5GIG9yIE5BTj8KKwlibmUuYgkJZ3BfdHJ5X3plcm8JCSMgbm8KKwlydHMJCQkJCSMgb3BlcmFuZCBpcyBhbiBJTkYgb3IgTkFOCisKKyMgVGhlIHBhY2tlZCBvcGVyYW5kIGlzIGEgemVybyBpZiB0aGUgbWFudGlzc2EgaXMgYWxsIHplcm8sIGVsc2UgaXQncworIyBhIG5vcm1hbCBwYWNrZWQgb3AuCitncF90cnlfemVybzoKKwltb3YuYgkJMytGUF9TUkMoJWE2KSwlZDAJIyBnZXQgYnl0ZSA0CisJYW5kaS5iCQkmMHgwZiwlZDAJCSMgY2xlYXIgYWxsIGJ1dCBsYXN0IG55YmJsZQorCWJuZS5iCQlncF9ub3Rfc3BlYwkJIyBub3QgYSB6ZXJvCisJdHN0LmwJCUZQX1NSQ19ISSglYTYpCQkjIGlzIGx3IDIgemVybz8KKwlibmUuYgkJZ3Bfbm90X3NwZWMJCSMgbm90IGEgemVybworCXRzdC5sCQlGUF9TUkNfTE8oJWE2KQkJIyBpcyBsdyAzIHplcm8/CisJYm5lLmIJCWdwX25vdF9zcGVjCQkjIG5vdCBhIHplcm8KKwlydHMJCQkJCSMgb3BlcmFuZCBpcyBhIFpFUk8KK2dwX25vdF9zcGVjOgorCWxlYQkJRlBfU1JDKCVhNiksJWEwCQkjIHBhc3M6IHB0ciB0byBwYWNrZWQgb3AKKwlic3IubAkJZGVjYmluCQkJIyBjb252ZXJ0IHRvIGV4dGVuZGVkCisJZm1vdm0ueAkJJjB4ODAsRlBfU1JDKCVhNikJIyBtYWtlIHRoaXMgdGhlIHNyY29wCisJcnRzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZGVjYmluKCk6IENvbnZlcnRzIG5vcm1hbGl6ZWQgcGFja2VkIGJjZCB2YWx1ZSBwb2ludGVkIHRvIGJ5IHJlZ2lzdGVyCSMKKyMJICAgIGEwIHRvIGV4dGVuZGVkLXByZWNpc2lvbiB2YWx1ZSBpbiBmcDAuCQkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJYTAgPSBwb2ludGVyIHRvIG5vcm1hbGl6ZWQgcGFja2VkIGJjZCB2YWx1ZQkJCSMKKyMJCQkJCQkJCQkjCisjIE9VVFBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZwMCA9IGV4YWN0IGZwIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYWNrZWQgYmNkIHZhbHVlLgkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRXhwZWN0ZWQgaXMgYSBub3JtYWwgYmNkIChpLmUuIG5vbi1leGNlcHRpb25hbDsgYWxsIGluZiwgemVybywJIworIwlhbmQgTmFOIG9wZXJhbmRzIGFyZSBkaXNwYXRjaGVkIHdpdGhvdXQgZW50ZXJpbmcgdGhpcyByb3V0aW5lKQkjCisjCXZhbHVlIGluIDY4ODgxLzg4MiBmb3JtYXQgYXQgbG9jYXRpb24gKGEwKS4JCQkjCisjCQkJCQkJCQkJIworIwlBMS4gQ29udmVydCB0aGUgYmNkIGV4cG9uZW50IHRvIGJpbmFyeSBieSBzdWNjZXNzaXZlIGFkZHMgYW5kCSMKKyMJbXVscy4gU2V0IHRoZSBzaWduIGFjY29yZGluZyB0byBTRS4gU3VidHJhY3QgMTYgdG8gY29tcGVuc2F0ZQkjCisjCWZvciB0aGUgbWFudGlzc2Egd2hpY2ggaXMgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgMTcgaW50ZWdlcgkjCisjCWRpZ2l0cywgcmF0aGVyIHRoYW4gMSBpbnRlZ2VyIGFuZCAxNiBmcmFjdGlvbiBkaWdpdHMuCQkjCisjCU5vdGU6IHRoaXMgb3BlcmF0aW9uIGNhbiBuZXZlciBvdmVyZmxvdy4JCQkjCisjCQkJCQkJCQkJIworIwlBMi4gQ29udmVydCB0aGUgYmNkIG1hbnRpc3NhIHRvIGJpbmFyeSBieSBzdWNjZXNzaXZlCQkjCisjCWFkZHMgYW5kIG11bHMgaW4gRlAwLiBTZXQgdGhlIHNpZ24gYWNjb3JkaW5nIHRvIFNNLgkJIworIwlUaGUgbWFudGlzc2EgZGlnaXRzIHdpbGwgYmUgY29udmVydGVkIHdpdGggdGhlIGRlY2ltYWwgcG9pbnQJIworIwlhc3N1bWVkIGZvbGxvd2luZyB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgZGlnaXQuCQkJIworIwlOb3RlOiB0aGlzIG9wZXJhdGlvbiBjYW4gbmV2ZXIgb3ZlcmZsb3cuCQkJIworIwkJCQkJCQkJCSMKKyMJQTMuIENvdW50IHRoZSBudW1iZXIgb2YgbGVhZGluZy90cmFpbGluZyB6ZXJvcyBpbiB0aGUJCSMKKyMJYmNkIHN0cmluZy4gIElmIFNFIGlzIHBvc2l0aXZlLCBjb3VudCB0aGUgbGVhZGluZyB6ZXJvczsJIworIwlpZiBuZWdhdGl2ZSwgY291bnQgdGhlIHRyYWlsaW5nIHplcm9zLiAgU2V0IHRoZSBhZGp1c3RlZAkjCisjCWV4cG9uZW50IGVxdWFsIHRvIHRoZSBleHBvbmVudCBmcm9tIEExIGFuZCB0aGUgemVybyBjb3VudAkjCisjCWFkZGVkIGlmIFNNID0gMSBhbmQgc3VidHJhY3RlZCBpZiBTTSA9IDAuICBTY2FsZSB0aGUJCSMKKyMJbWFudGlzc2EgdGhlIGVxdWl2YWxlbnQgb2YgZm9yY2luZyBpbiB0aGUgYmNkIHZhbHVlOgkJIworIwkJCQkJCQkJCSMKKyMJU00gPSAwCWEgbm9uLXplcm8gZGlnaXQgaW4gdGhlIGludGVnZXIgcG9zaXRpb24JCSMKKyMJU00gPSAxCWEgbm9uLXplcm8gZGlnaXQgaW4gTWFudDAsIGxzZCBvZiB0aGUgZnJhY3Rpb24JCSMKKyMJCQkJCQkJCQkjCisjCXRoaXMgd2lsbCBpbnN1cmUgdGhhdCBhbnkgdmFsdWUsIHJlZ2FyZGxlc3Mgb2YgaXRzCQkjCisjCXJlcHJlc2VudGF0aW9uIChleC4gMC4xRTIsIDFFMSwgMTBFMCwgMTAwRS0xKSwgaXMgY29udmVydGVkCSMKKyMJY29uc2lzdGVudGx5LgkJCQkJCQkjCisjCQkJCQkJCQkJIworIwlBNC4gQ2FsY3VsYXRlIHRoZSBmYWN0b3IgMTBeZXhwIGluIEZQMSB1c2luZyBhIHRhYmxlIG9mCQkjCisjCTEwXigyXm4pIHZhbHVlcy4gIFRvIHJlZHVjZSB0aGUgZXJyb3IgaW4gZm9ybWluZyBmYWN0b3JzCSMKKyMJZ3JlYXRlciB0aGFuIDEwXjI3LCBhIGRpcmVjdGVkIHJvdW5kaW5nIHNjaGVtZSBpcyB1c2VkIHdpdGgJIworIwl0YWJsZXMgcm91bmRlZCB0byBSTiwgUk0sIGFuZCBSUCwgYWNjb3JkaW5nIHRvIHRoZSB0YWJsZQkjCisjCWluIHRoZSBjb21tZW50cyBvZiB0aGUgcHdydGVuIHNlY3Rpb24uCQkJCSMKKyMJCQkJCQkJCQkjCisjCUE1LiBGb3JtIHRoZSBmaW5hbCBiaW5hcnkgbnVtYmVyIGJ5IHNjYWxpbmcgdGhlIG1hbnRpc3NhIGJ5CSMKKyMJdGhlIGV4cG9uZW50IGZhY3Rvci4gIFRoaXMgaXMgZG9uZSBieSBtdWx0aXBseWluZyB0aGUJCSMKKyMJbWFudGlzc2EgaW4gRlAwIGJ5IHRoZSBmYWN0b3IgaW4gRlAxIGlmIHRoZSBhZGp1c3RlZAkJIworIwlleHBvbmVudCBzaWduIGlzIHBvc2l0aXZlLCBhbmQgZGl2aWRpbmcgRlAwIGJ5IEZQMSBpZgkJIworIwlpdCBpcyBuZWdhdGl2ZS4JCQkJCQkJIworIwkJCQkJCQkJCSMKKyMJQ2xlYW4gdXAgYW5kIHJldHVybi4gQ2hlY2sgaWYgdGhlIGZpbmFsIG11bCBvciBkaXYgd2FzIGluZXhhY3QuCSMKKyMJSWYgc28sIHNldCBJTkVYMSBpbiBVU0VSX0ZQU1IuCQkJCQkjCisjCQkJCQkJCQkJIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjCisjCVBURU5STiwgUFRFTlJNLCBhbmQgUFRFTlJQIGFyZSBhcnJheXMgb2YgcG93ZXJzIG9mIDEwIHJvdW5kZWQKKyMJdG8gbmVhcmVzdCwgbWludXMsIGFuZCBwbHVzLCByZXNwZWN0aXZlbHkuICBUaGUgdGFibGVzIGluY2x1ZGUKKyMJMTAqKnsxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNTYsNTEyLDEwMjQsMjA0OCw0MDk2fS4gIE5vIHJvdW5kaW5nCisjCWlzIHJlcXVpcmVkIHVudGlsIHRoZSBwb3dlciBpcyBncmVhdGVyIHRoYW4gMjcsIGhvd2V2ZXIsIGFsbAorIwl0YWJsZXMgaW5jbHVkZSB0aGUgZmlyc3QgNSBmb3IgZWFzZSBvZiBpbmRleGluZy4KKyMKK1JUQUJMRToKKwlieXRlCQkwLDAsMCwwCisJYnl0ZQkJMiwzLDIsMworCWJ5dGUJCTIsMywzLDIKKwlieXRlCQkzLDIsMiwzCisKKwlzZXQJCUZOSUJTLDcKKwlzZXQJCUZTVFJULDAKKworCXNldAkJRVNUUlQsNAorCXNldAkJRURJR0lUUywyCisKKwlnbG9iYWwJCWRlY2JpbgorZGVjYmluOgorCW1vdi5sCQkweDAoJWEwKSxGUF9TQ1IwX0VYKCVhNikgIyBtYWtlIGEgY29weSBvZiBpbnB1dAorCW1vdi5sCQkweDQoJWEwKSxGUF9TQ1IwX0hJKCVhNikgIyBzbyB3ZSBkb24ndCBhbHRlciBpdAorCW1vdi5sCQkweDgoJWEwKSxGUF9TQ1IwX0xPKCVhNikKKworCWxlYQkJRlBfU0NSMCglYTYpLCVhMAorCisJbW92bS5sCQkmMHgzYzAwLC0oJXNwKQkJIyBzYXZlIGQyLWQ1CisJZm1vdm0ueAkJJjB4MSwtKCVzcCkJCSMgc2F2ZSBmcDEKKyMKKyMgQ2FsY3VsYXRlIGV4cG9uZW50OgorIyAgMS4gQ29weSBiY2QgdmFsdWUgaW4gbWVtb3J5IGZvciB1c2UgYXMgYSB3b3JraW5nIGNvcHkuCisjICAyLiBDYWxjdWxhdGUgYWJzb2x1dGUgdmFsdWUgb2YgZXhwb25lbnQgaW4gZDEgYnkgbXVsIGFuZCBhZGQuCisjICAzLiBDb3JyZWN0IGZvciBleHBvbmVudCBzaWduLgorIyAgNC4gU3VidHJhY3QgMTYgdG8gY29tcGVuc2F0ZSBmb3IgaW50ZXJwcmV0aW5nIHRoZSBtYW50IGFzIGFsbCBpbnRlZ2VyIGRpZ2l0cy4KKyMgICAgIChpLmUuLCBhbGwgZGlnaXRzIGFzc3VtZWQgbGVmdCBvZiB0aGUgZGVjaW1hbCBwb2ludC4pCisjCisjIFJlZ2lzdGVyIHVzYWdlOgorIworIyAgY2FsY19lOgorIwkoKikgIGQwOiB0ZW1wIGRpZ2l0IHN0b3JhZ2UKKyMJKCopICBkMTogYWNjdW11bGF0b3IgZm9yIGJpbmFyeSBleHBvbmVudAorIwkoKikgIGQyOiBkaWdpdCBjb3VudAorIwkoKikgIGQzOiBvZmZzZXQgcG9pbnRlcgorIwkoICkgIGQ0OiBmaXJzdCB3b3JkIG9mIGJjZAorIwkoICkgIGEwOiBwb2ludGVyIHRvIHdvcmtpbmcgYmNkIHZhbHVlCisjCSggKSAgYTY6IHBvaW50ZXIgdG8gb3JpZ2luYWwgYmNkIHZhbHVlCisjCSgqKSAgRlBfU0NSMTogd29ya2luZyBjb3B5IG9mIG9yaWdpbmFsIGJjZCB2YWx1ZQorIwkoKikgIExfU0NSMTogY29weSBvZiBvcmlnaW5hbCBleHBvbmVudCB3b3JkCisjCitjYWxjX2U6CisJbW92LmwJCSZFRElHSVRTLCVkMgkJIyAjIG9mIG5pYmJsZXMgKGRpZ2l0cykgaW4gZnJhY3Rpb24gcGFydAorCW1vdi5sCQkmRVNUUlQsJWQzCQkjIGNvdW50ZXIgdG8gcGljayB1cCBkaWdpdHMKKwltb3YubAkJKCVhMCksJWQ0CQkjIGdldCBmaXJzdCB3b3JkIG9mIGJjZAorCWNsci5sCQklZDEJCQkjIHplcm8gZDEgZm9yIGFjY3VtdWxhdG9yCitlX2dkOgorCW11bHUubAkJJjB4YSwlZDEJCSMgbXVsIHBhcnRpYWwgcHJvZHVjdCBieSBvbmUgZGlnaXQgcGxhY2UKKwliZmV4dHUJCSVkNHslZDM6JjR9LCVkMAkJIyBnZXQgdGhlIGRpZ2l0IGFuZCB6ZXJvIGV4dGVuZCBpbnRvIGQwCisJYWRkLmwJCSVkMCwlZDEJCQkjIGQxID0gZDEgKyBkMAorCWFkZHEuYgkJJjQsJWQzCQkJIyBhZHZhbmNlIGQzIHRvIHRoZSBuZXh0IGRpZ2l0CisJZGJmLncJCSVkMixlX2dkCQkjIGlmIHdlIGhhdmUgdXNlZCBhbGwgMyBkaWdpdHMsIGV4aXQgbG9vcAorCWJ0c3QJCSYzMCwlZDQJCQkjIGdldCBTRQorCWJlcS5iCQllX3BvcwkJCSMgZG9uJ3QgbmVnYXRlIGlmIHBvcworCW5lZy5sCQklZDEJCQkjIG5lZ2F0ZSBiZWZvcmUgc3VidHJhY3RpbmcKK2VfcG9zOgorCXN1Yi5sCQkmMTYsJWQxCQkJIyBzdWIgdG8gY29tcGVuc2F0ZSBmb3Igc2hpZnQgb2YgbWFudAorCWJnZS5iCQllX3NhdmUJCQkjIGlmIHN0aWxsIHBvcywgZG8gbm90IG5lZworCW5lZy5sCQklZDEJCQkjIG5vdyBuZWdhdGl2ZSwgbWFrZSBwb3MgYW5kIHNldCBTRQorCW9yLmwJCSYweDQwMDAwMDAwLCVkNAkJIyBzZXQgU0UgaW4gZDQsCisJb3IubAkJJjB4NDAwMDAwMDAsKCVhMCkJIyBhbmQgaW4gd29ya2luZyBiY2QKK2Vfc2F2ZToKKwltb3YubAkJJWQxLC0oJXNwKQkJIyBzYXZlIGV4cCBvbiBzdGFjaworIworIworIyBDYWxjdWxhdGUgbWFudGlzc2E6CisjICAxLiBDYWxjdWxhdGUgYWJzb2x1dGUgdmFsdWUgb2YgbWFudGlzc2EgaW4gZnAwIGJ5IG11bCBhbmQgYWRkLgorIyAgMi4gQ29ycmVjdCBmb3IgbWFudGlzc2Egc2lnbi4KKyMgICAgIChpLmUuLCBhbGwgZGlnaXRzIGFzc3VtZWQgbGVmdCBvZiB0aGUgZGVjaW1hbCBwb2ludC4pCisjCisjIFJlZ2lzdGVyIHVzYWdlOgorIworIyAgY2FsY19tOgorIwkoKikgIGQwOiB0ZW1wIGRpZ2l0IHN0b3JhZ2UKKyMJKCopICBkMTogbHdvcmQgY291bnRlcgorIwkoKikgIGQyOiBkaWdpdCBjb3VudAorIwkoKikgIGQzOiBvZmZzZXQgcG9pbnRlcgorIwkoICkgIGQ0OiB3b3JkcyAyIGFuZCAzIG9mIGJjZAorIwkoICkgIGEwOiBwb2ludGVyIHRvIHdvcmtpbmcgYmNkIHZhbHVlCisjCSggKSAgYTY6IHBvaW50ZXIgdG8gb3JpZ2luYWwgYmNkIHZhbHVlCisjCSgqKSBmcDA6IG1hbnRpc3NhIGFjY3VtdWxhdG9yCisjCSggKSAgRlBfU0NSMTogd29ya2luZyBjb3B5IG9mIG9yaWdpbmFsIGJjZCB2YWx1ZQorIwkoICkgIExfU0NSMTogY29weSBvZiBvcmlnaW5hbCBleHBvbmVudCB3b3JkCisjCitjYWxjX206CisJbW92LmwJCSYxLCVkMQkJCSMgd29yZCBjb3VudGVyLCBpbml0IHRvIDEKKwlmbW92LnMJCSYweDAwMDAwMDAwLCVmcDAJIyBhY2N1bXVsYXRvcgorIworIworIyAgU2luY2UgdGhlIHBhY2tlZCBudW1iZXIgaGFzIGEgbG9uZyB3b3JkIGJldHdlZW4gdGhlIGZpcnN0ICYgc2Vjb25kIHBhcnRzLAorIyAgZ2V0IHRoZSBpbnRlZ2VyIGRpZ2l0IHRoZW4gc2tpcCBkb3duICYgZ2V0IHRoZSByZXN0IG9mIHRoZQorIyAgbWFudGlzc2EuICBXZSB3aWxsIHVucm9sbCB0aGUgbG9vcCBvbmNlLgorIworCWJmZXh0dQkJKCVhMCl7JjI4OiY0fSwlZDAJIyBpbnRlZ2VyIHBhcnQgaXMgbHMgZGlnaXQgaW4gbG9uZyB3b3JkCisJZmFkZC5iCQklZDAsJWZwMAkJIyBhZGQgZGlnaXQgdG8gc3VtIGluIGZwMAorIworIworIyAgR2V0IHRoZSByZXN0IG9mIHRoZSBtYW50aXNzYS4KKyMKK2xvYWRsdzoKKwltb3YubAkJKCVhMCwlZDEuTCo0KSwlZDQJIyBsb2FkIG1hbnRpc3NhIGxvbnF3b3JkIGludG8gZDQKKwltb3YubAkJJkZTVFJULCVkMwkJIyBjb3VudGVyIHRvIHBpY2sgdXAgZGlnaXRzCisJbW92LmwJCSZGTklCUywlZDIJCSMgcmVzZXQgbnVtYmVyIG9mIGRpZ2l0cyBwZXIgYTAgcHRyCittZDJiOgorCWZtdWwucwkJJjB4NDEyMDAwMDAsJWZwMAkjIGZwMCA9IGZwMCAqIDEwCisJYmZleHR1CQklZDR7JWQzOiY0fSwlZDAJCSMgZ2V0IHRoZSBkaWdpdCBhbmQgemVybyBleHRlbmQKKwlmYWRkLmIJCSVkMCwlZnAwCQkjIGZwMCA9IGZwMCArIGRpZ2l0CisjCisjCisjICBJZiBhbGwgdGhlIGRpZ2l0cyAoOCkgaW4gdGhhdCBsb25nIHdvcmQgaGF2ZSBiZWVuIGNvbnZlcnRlZCAoZDI9MCksCisjICB0aGVuIGluYyBkMSAoPTIpIHRvIHBvaW50IHRvIHRoZSBuZXh0IGxvbmcgd29yZCBhbmQgcmVzZXQgZDMgdG8gMAorIyAgdG8gaW5pdGlhbGl6ZSB0aGUgZGlnaXQgb2Zmc2V0LCBhbmQgc2V0IGQyIHRvIDcgZm9yIHRoZSBkaWdpdCBjb3VudDsKKyMgIGVsc2UgY29udGludWUgd2l0aCB0aGlzIGxvbmcgd29yZC4KKyMKKwlhZGRxLmIJCSY0LCVkMwkJCSMgYWR2YW5jZSBkMyB0byB0aGUgbmV4dCBkaWdpdAorCWRiZi53CQklZDIsbWQyYgkJIyBjaGVjayBmb3IgbGFzdCBkaWdpdCBpbiB0aGlzIGx3CituZXh0bHc6CisJYWRkcS5sCQkmMSwlZDEJCQkjIGluYyBsdyBwb2ludGVyIGluIG1hbnRpc3NhCisJY21wLmwJCSVkMSwmMgkJCSMgdGVzdCBmb3IgbGFzdCBsdworCWJsZS5iCQlsb2FkbHcJCQkjIGlmIG5vdCwgZ2V0IGxhc3Qgb25lCisjCisjICBDaGVjayB0aGUgc2lnbiBvZiB0aGUgbWFudCBhbmQgbWFrZSB0aGUgdmFsdWUgaW4gZnAwIHRoZSBzYW1lIHNpZ24uCisjCittX3NpZ246CisJYnRzdAkJJjMxLCglYTApCQkjIHRlc3Qgc2lnbiBvZiB0aGUgbWFudGlzc2EKKwliZXEuYgkJYXBfc3RfegkJCSMgaWYgY2xlYXIsIGdvIHRvIGFwcGVuZC9zdHJpcCB6ZXJvcworCWZuZWcueAkJJWZwMAkJCSMgaWYgc2V0LCBuZWdhdGUgZnAwCisjCisjIEFwcGVuZC9zdHJpcCB6ZXJvczoKKyMKKyMgIEZvciBhZGp1c3RlZCBleHBvbmVudHMgd2hpY2ggaGF2ZSBhbiBhYnNvbHV0ZSB2YWx1ZSBncmVhdGVyIHRoYW4gMjcqLAorIyAgdGhpcyByb3V0aW5lIGNhbGN1bGF0ZXMgdGhlIGFtb3VudCBuZWVkZWQgdG8gbm9ybWFsaXplIHRoZSBtYW50aXNzYQorIyAgZm9yIHRoZSBhZGp1c3RlZCBleHBvbmVudC4gIFRoYXQgbnVtYmVyIGlzIHN1YnRyYWN0ZWQgZnJvbSB0aGUgZXhwCisjICBpZiB0aGUgZXhwIHdhcyBwb3NpdGl2ZSwgYW5kIGFkZGVkIGlmIGl0IHdhcyBuZWdhdGl2ZS4gIFRoZSBwdXJwb3NlCisjICBvZiB0aGlzIGlzIHRvIHJlZHVjZSB0aGUgdmFsdWUgb2YgdGhlIGV4cG9uZW50IGFuZCB0aGUgcG9zc2liaWxpdHkKKyMgIG9mIGVycm9yIGluIGNhbGN1bGF0aW9uIG9mIHB3cnRlbi4KKyMKKyMgIDEuIEJyYW5jaCBvbiB0aGUgc2lnbiBvZiB0aGUgYWRqdXN0ZWQgZXhwb25lbnQuCisjICAycC4ocG9zaXRpdmUgZXhwKQorIyAgIDIuIENoZWNrIE0xNiBhbmQgdGhlIGRpZ2l0cyBpbiBsd29yZHMgMiBhbmQgMyBpbiBkZWNlbmRpbmcgb3JkZXIuCisjICAgMy4gQWRkIG9uZSBmb3IgZWFjaCB6ZXJvIGVuY291bnRlcmVkIHVudGlsIGEgbm9uLXplcm8gZGlnaXQuCisjICAgNC4gU3VidHJhY3QgdGhlIGNvdW50IGZyb20gdGhlIGV4cC4KKyMgICA1LiBDaGVjayBpZiB0aGUgZXhwIGhhcyBjcm9zc2VkIHplcm8gaW4gIzMgYWJvdmU7IG1ha2UgdGhlIGV4cCBhYnMKKyMJICAgYW5kIHNldCBTRS4KKyMJNi4gTXVsdGlwbHkgdGhlIG1hbnRpc3NhIGJ5IDEwKipjb3VudC4KKyMgIDJuLihuZWdhdGl2ZSBleHApCisjICAgMi4gQ2hlY2sgdGhlIGRpZ2l0cyBpbiBsd29yZHMgMyBhbmQgMiBpbiBkZWNlbmRpbmcgb3JkZXIuCisjICAgMy4gQWRkIG9uZSBmb3IgZWFjaCB6ZXJvIGVuY291bnRlcmVkIHVudGlsIGEgbm9uLXplcm8gZGlnaXQuCisjICAgNC4gQWRkIHRoZSBjb3VudCB0byB0aGUgZXhwLgorIyAgIDUuIENoZWNrIGlmIHRoZSBleHAgaGFzIGNyb3NzZWQgemVybyBpbiAjMyBhYm92ZTsgY2xlYXIgU0UuCisjICAgNi4gRGl2aWRlIHRoZSBtYW50aXNzYSBieSAxMCoqY291bnQuCisjCisjICAqV2h5IDI3PyAgSWYgdGhlIGFkanVzdGVkIGV4cG9uZW50IGlzIHdpdGhpbiAtMjggPCBleHBBIDwgMjgsIHRoYW4KKyMgICBhbnkgYWRqdXN0bWVudCBkdWUgdG8gYXBwZW5kL3N0cmlwIHplcm9zIHdpbGwgZHJpdmUgdGhlIHJlc3VsdGFuZQorIyAgIGV4cG9uZW50IHRvd2FyZHMgemVyby4gIFNpbmNlIGFsbCBwd3J0ZW4gY29uc3RhbnRzIHdpdGggYSBwb3dlcgorIyAgIG9mIDI3IG9yIGxlc3MgYXJlIGV4YWN0LCB0aGVyZSBpcyBubyBuZWVkIHRvIHVzZSB0aGlzIHJvdXRpbmUgdG8KKyMgICBhdHRlbXB0IHRvIGxlc3NlbiB0aGUgcmVzdWx0YW50IGV4cG9uZW50LgorIworIyBSZWdpc3RlciB1c2FnZToKKyMKKyMgIGFwX3N0X3o6CisjCSgqKSAgZDA6IHRlbXAgZGlnaXQgc3RvcmFnZQorIwkoKikgIGQxOiB6ZXJvIGNvdW50CisjCSgqKSAgZDI6IGRpZ2l0IGNvdW50CisjCSgqKSAgZDM6IG9mZnNldCBwb2ludGVyCisjCSggKSAgZDQ6IGZpcnN0IHdvcmQgb2YgYmNkCisjCSgqKSAgZDU6IGx3b3JkIGNvdW50ZXIKKyMJKCApICBhMDogcG9pbnRlciB0byB3b3JraW5nIGJjZCB2YWx1ZQorIwkoICkgIEZQX1NDUjE6IHdvcmtpbmcgY29weSBvZiBvcmlnaW5hbCBiY2QgdmFsdWUKKyMJKCApICBMX1NDUjE6IGNvcHkgb2Ygb3JpZ2luYWwgZXhwb25lbnQgd29yZAorIworIworIyBGaXJzdCBjaGVjayB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIGV4cG9uZW50IHRvIHNlZSBpZiB0aGlzCisjIHJvdXRpbmUgaXMgbmVjZXNzYXJ5LiAgSWYgc28sIHRoZW4gY2hlY2sgdGhlIHNpZ24gb2YgdGhlIGV4cG9uZW50CisjIGFuZCBkbyBhcHBlbmQgKCspIG9yIHN0cmlwICgtKSB6ZXJvcyBhY2NvcmRpbmdseS4KKyMgVGhpcyBzZWN0aW9uIGhhbmRsZXMgYSBwb3NpdGl2ZSBhZGp1c3RlZCBleHBvbmVudC4KKyMKK2FwX3N0X3o6CisJbW92LmwJCSglc3ApLCVkMQkJIyBsb2FkIGV4cEEgZm9yIHJhbmdlIHRlc3QKKwljbXAubAkJJWQxLCYyNwkJCSMgdGVzdCBpcyB3aXRoIDI3CisJYmxlLncJCXB3cnRlbgkJCSMgaWYgYWJzKGV4cEEpIDwyOCwgc2tpcCBhcC9zdCB6ZXJvcworCWJ0c3QJCSYzMCwoJWEwKQkJIyBjaGVjayBzaWduIG9mIGV4cAorCWJuZS5iCQlhcF9zdF9uCQkJIyBpZiBuZWcsIGdvIHRvIG5lZyBzaWRlCisJY2xyLmwJCSVkMQkJCSMgemVybyBjb3VudCByZWcKKwltb3YubAkJKCVhMCksJWQ0CQkjIGxvYWQgbHdvcmQgMSB0byBkNAorCWJmZXh0dQkJJWQ0eyYyODomNH0sJWQwCQkjIGdldCBNMTYgaW4gZDAKKwlibmUuYgkJYXBfcF9meAkJCSMgaWYgTTE2IGlzIG5vbi16ZXJvLCBnbyBmaXggZXhwCisJYWRkcS5sCQkmMSwlZDEJCQkjIGluYyB6ZXJvIGNvdW50CisJbW92LmwJCSYxLCVkNQkJCSMgaW5pdCBsd29yZCBjb3VudGVyCisJbW92LmwJCSglYTAsJWQ1LkwqNCksJWQ0CSMgZ2V0IGx3b3JkIDIgdG8gZDQKKwlibmUuYgkJYXBfcF9jbAkJCSMgaWYgbHcgMiBpcyB6ZXJvLCBza2lwIGl0CisJYWRkcS5sCQkmOCwlZDEJCQkjIGFuZCBpbmMgY291bnQgYnkgOAorCWFkZHEubAkJJjEsJWQ1CQkJIyBpbmMgbHdvcmQgY291bnRlcgorCW1vdi5sCQkoJWEwLCVkNS5MKjQpLCVkNAkjIGdldCBsd29yZCAzIHRvIGQ0CithcF9wX2NsOgorCWNsci5sCQklZDMJCQkjIGluaXQgb2Zmc2V0IHJlZworCW1vdi5sCQkmNywlZDIJCQkjIGluaXQgZGlnaXQgY291bnRlcgorYXBfcF9nZDoKKwliZmV4dHUJCSVkNHslZDM6JjR9LCVkMAkJIyBnZXQgZGlnaXQKKwlibmUuYgkJYXBfcF9meAkJCSMgaWYgbm9uLXplcm8sIGdvIHRvIGZpeCBleHAKKwlhZGRxLmwJCSY0LCVkMwkJCSMgcG9pbnQgdG8gbmV4dCBkaWdpdAorCWFkZHEubAkJJjEsJWQxCQkJIyBpbmMgZGlnaXQgY291bnRlcgorCWRiZi53CQklZDIsYXBfcF9nZAkJIyBnZXQgbmV4dCBkaWdpdAorYXBfcF9meDoKKwltb3YubAkJJWQxLCVkMAkJCSMgY29weSBjb3VudGVyIHRvIGQyCisJbW92LmwJCSglc3ApLCVkMQkJIyBnZXQgYWRqdXN0ZWQgZXhwIGZyb20gbWVtb3J5CisJc3ViLmwJCSVkMCwlZDEJCQkjIHN1YnRyYWN0IGNvdW50IGZyb20gZXhwCisJYmdlLmIJCWFwX3BfZm0JCQkjIGlmIHN0aWxsIHBvcywgZ28gdG8gcHdydGVuCisJbmVnLmwJCSVkMQkJCSMgbm93IGl0cyBuZWc7IGdldCBhYnMKKwltb3YubAkJKCVhMCksJWQ0CQkjIGxvYWQgbHdvcmQgMSB0byBkNAorCW9yLmwJCSYweDQwMDAwMDAwLCVkNAkJIyBhbmQgc2V0IFNFIGluIGQ0CisJb3IubAkJJjB4NDAwMDAwMDAsKCVhMCkJIyBhbmQgaW4gbWVtb3J5CisjCisjIENhbGN1bGF0ZSB0aGUgbWFudGlzc2EgbXVsdGlwbGllciB0byBjb21wZW5zYXRlIGZvciB0aGUgc3RyaXBpbmcgb2YKKyMgemVyb3MgZnJvbSB0aGUgbWFudGlzc2EuCisjCithcF9wX2ZtOgorCWxlYS5sCQlQVEVOUk4oJXBjKSwlYTEJCSMgZ2V0IGFkZHJlc3Mgb2YgcG93ZXItb2YtdGVuIHRhYmxlCisJY2xyLmwJCSVkMwkJCSMgaW5pdCB0YWJsZSBpbmRleAorCWZtb3YucwkJJjB4M2Y4MDAwMDAsJWZwMQkjIGluaXQgZnAxIHRvIDEKKwltb3YubAkJJjMsJWQyCQkJIyBpbml0IGQyIHRvIGNvdW50IGJpdHMgaW4gY291bnRlcgorYXBfcF9lbDoKKwlhc3IubAkJJjEsJWQwCQkJIyBzaGlmdCBsc2IgaW50byBjYXJyeQorCWJjYy5iCQlhcF9wX2VuCQkJIyBpZiAxLCBtdWwgZnAxIGJ5IHB3cnRlbiBmYWN0b3IKKwlmbXVsLngJCSglYTEsJWQzKSwlZnAxCQkjIG11bCBieSAxMCoqKGQzX2JpdF9ubykKK2FwX3BfZW46CisJYWRkLmwJCSYxMiwlZDMJCQkjIGluYyBkMyB0byBuZXh0IHJ0YWJsZSBlbnRyeQorCXRzdC5sCQklZDAJCQkjIGNoZWNrIGlmIGQwIGlzIHplcm8KKwlibmUuYgkJYXBfcF9lbAkJCSMgaWYgbm90LCBnZXQgbmV4dCBiaXQKKwlmbXVsLngJCSVmcDEsJWZwMAkJIyBtdWwgbWFudGlzc2EgYnkgMTAqKihub19iaXRzX3NoaWZ0ZWQpCisJYnJhLmIJCXB3cnRlbgkJCSMgZ28gY2FsYyBwd3J0ZW4KKyMKKyMgVGhpcyBzZWN0aW9uIGhhbmRsZXMgYSBuZWdhdGl2ZSBhZGp1c3RlZCBleHBvbmVudC4KKyMKK2FwX3N0X246CisJY2xyLmwJCSVkMQkJCSMgY2xyIGNvdW50ZXIKKwltb3YubAkJJjIsJWQ1CQkJIyBzZXQgdXAgZDUgdG8gcG9pbnQgdG8gbHdvcmQgMworCW1vdi5sCQkoJWEwLCVkNS5MKjQpLCVkNAkjIGdldCBsd29yZCAzCisJYm5lLmIJCWFwX25fY2wJCQkjIGlmIG5vdCB6ZXJvLCBjaGVjayBkaWdpdHMKKwlzdWIubAkJJjEsJWQ1CQkJIyBkZWMgZDUgdG8gcG9pbnQgdG8gbHdvcmQgMgorCWFkZHEubAkJJjgsJWQxCQkJIyBpbmMgY291bnRlciBieSA4CisJbW92LmwJCSglYTAsJWQ1LkwqNCksJWQ0CSMgZ2V0IGx3b3JkIDIKK2FwX25fY2w6CisJbW92LmwJCSYyOCwlZDMJCQkjIHBvaW50IHRvIGxhc3QgZGlnaXQKKwltb3YubAkJJjcsJWQyCQkJIyBpbml0IGRpZ2l0IGNvdW50ZXIKK2FwX25fZ2Q6CisJYmZleHR1CQklZDR7JWQzOiY0fSwlZDAJCSMgZ2V0IGRpZ2l0CisJYm5lLmIJCWFwX25fZngJCQkjIGlmIG5vbi16ZXJvLCBnbyB0byBleHAgZml4CisJc3VicS5sCQkmNCwlZDMJCQkjIHBvaW50IHRvIHByZXZpb3VzIGRpZ2l0CisJYWRkcS5sCQkmMSwlZDEJCQkjIGluYyBkaWdpdCBjb3VudGVyCisJZGJmLncJCSVkMixhcF9uX2dkCQkjIGdldCBuZXh0IGRpZ2l0CithcF9uX2Z4OgorCW1vdi5sCQklZDEsJWQwCQkJIyBjb3B5IGNvdW50ZXIgdG8gZDAKKwltb3YubAkJKCVzcCksJWQxCQkjIGdldCBhZGp1c3RlZCBleHAgZnJvbSBtZW1vcnkKKwlzdWIubAkJJWQwLCVkMQkJCSMgc3VidHJhY3QgY291bnQgZnJvbSBleHAKKwliZ3QuYgkJYXBfbl9mbQkJCSMgaWYgc3RpbGwgcG9zLCBnbyBmaXggbWFudGlzc2EKKwluZWcubAkJJWQxCQkJIyB0YWtlIGFicyBvZiBleHAgYW5kIGNsciBTRQorCW1vdi5sCQkoJWEwKSwlZDQJCSMgbG9hZCBsd29yZCAxIHRvIGQ0CisJYW5kLmwJCSYweGJmZmZmZmZmLCVkNAkJIyBhbmQgY2xyIFNFIGluIGQ0CisJYW5kLmwJCSYweGJmZmZmZmZmLCglYTApCSMgYW5kIGluIG1lbW9yeQorIworIyBDYWxjdWxhdGUgdGhlIG1hbnRpc3NhIG11bHRpcGxpZXIgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIGFwcGVuZGluZyBvZgorIyB6ZXJvcyB0byB0aGUgbWFudGlzc2EuCisjCithcF9uX2ZtOgorCWxlYS5sCQlQVEVOUk4oJXBjKSwlYTEJCSMgZ2V0IGFkZHJlc3Mgb2YgcG93ZXItb2YtdGVuIHRhYmxlCisJY2xyLmwJCSVkMwkJCSMgaW5pdCB0YWJsZSBpbmRleAorCWZtb3YucwkJJjB4M2Y4MDAwMDAsJWZwMQkjIGluaXQgZnAxIHRvIDEKKwltb3YubAkJJjMsJWQyCQkJIyBpbml0IGQyIHRvIGNvdW50IGJpdHMgaW4gY291bnRlcgorYXBfbl9lbDoKKwlhc3IubAkJJjEsJWQwCQkJIyBzaGlmdCBsc2IgaW50byBjYXJyeQorCWJjYy5iCQlhcF9uX2VuCQkJIyBpZiAxLCBtdWwgZnAxIGJ5IHB3cnRlbiBmYWN0b3IKKwlmbXVsLngJCSglYTEsJWQzKSwlZnAxCQkjIG11bCBieSAxMCoqKGQzX2JpdF9ubykKK2FwX25fZW46CisJYWRkLmwJCSYxMiwlZDMJCQkjIGluYyBkMyB0byBuZXh0IHJ0YWJsZSBlbnRyeQorCXRzdC5sCQklZDAJCQkjIGNoZWNrIGlmIGQwIGlzIHplcm8KKwlibmUuYgkJYXBfbl9lbAkJCSMgaWYgbm90LCBnZXQgbmV4dCBiaXQKKwlmZGl2LngJCSVmcDEsJWZwMAkJIyBkaXYgbWFudGlzc2EgYnkgMTAqKihub19iaXRzX3NoaWZ0ZWQpCisjCisjCisjIENhbGN1bGF0ZSBwb3dlci1vZi10ZW4gZmFjdG9yIGZyb20gYWRqdXN0ZWQgYW5kIHNoaWZ0ZWQgZXhwb25lbnQuCisjCisjIFJlZ2lzdGVyIHVzYWdlOgorIworIyAgcHdydGVuOgorIwkoKikgIGQwOiB0ZW1wCisjCSggKSAgZDE6IGV4cG9uZW50CisjCSgqKSAgZDI6IHtGUENSWzY6NV0sU00sU0V9IGFzIGluZGV4IGluIFJUQUJMRTsgdGVtcAorIwkoKikgIGQzOiBGUENSIHdvcmsgY29weQorIwkoICkgIGQ0OiBmaXJzdCB3b3JkIG9mIGJjZAorIwkoKikgIGExOiBSVEFCTEUgcG9pbnRlcgorIyAgY2FsY19wOgorIwkoKikgIGQwOiB0ZW1wCisjCSggKSAgZDE6IGV4cG9uZW50CisjCSgqKSAgZDM6IFBXUlR4eCB0YWJsZSBpbmRleAorIwkoICkgIGEwOiBwb2ludGVyIHRvIHdvcmtpbmcgY29weSBvZiBiY2QKKyMJKCopICBhMTogUFdSVHh4IHBvaW50ZXIKKyMJKCopIGZwMTogcG93ZXItb2YtdGVuIGFjY3VtdWxhdG9yCisjCisjIFB3cnRlbiBjYWxjdWxhdGVzIHRoZSBleHBvbmVudCBmYWN0b3IgaW4gdGhlIHNlbGVjdGVkIHJvdW5kaW5nIG1vZGUKKyMgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgdGFibGU6CisjCisjCVNpZ24gb2YgTWFudCAgU2lnbiBvZiBFeHAgIFJvdW5kaW5nIE1vZGUgIFBXUlRFTiBSb3VuZGluZyBNb2RlCisjCisjCUFOWQkgIEFOWQlSTglSTgorIworIwkgKwkgICArCVJQCVJQCisjCSAtCSAgICsJUlAJUk0KKyMJICsJICAgLQlSUAlSTQorIwkgLQkgICAtCVJQCVJQCisjCisjCSArCSAgICsJUk0JUk0KKyMJIC0JICAgKwlSTQlSUAorIwkgKwkgICAtCVJNCVJQCisjCSAtCSAgIC0JUk0JUk0KKyMKKyMJICsJICAgKwlSWglSTQorIwkgLQkgICArCVJaCVJNCisjCSArCSAgIC0JUloJUlAKKyMJIC0JICAgLQlSWglSUAorIworIworcHdydGVuOgorCW1vdi5sCQlVU0VSX0ZQQ1IoJWE2KSwlZDMJIyBnZXQgdXNlcidzIEZQQ1IKKwliZmV4dHUJCSVkM3smMjY6JjJ9LCVkMgkJIyBpc29sYXRlIHJvdW5kaW5nIG1vZGUgYml0cworCW1vdi5sCQkoJWEwKSwlZDQJCSMgcmVsb2FkIDFzdCBiY2Qgd29yZCB0byBkNAorCWFzbC5sCQkmMiwlZDIJCQkjIGZvcm1hdCBkMiB0byBiZQorCWJmZXh0dQkJJWQ0eyYwOiYyfSwlZDAJCSMge0ZQQ1JbNl0sRlBDUls1XSxTTSxTRX0KKwlhZGQubAkJJWQwLCVkMgkJCSMgaW4gZDIgYXMgaW5kZXggaW50byBSVEFCTEUKKwlsZWEubAkJUlRBQkxFKCVwYyksJWExCQkjIGxvYWQgcnRhYmxlIGJhc2UKKwltb3YuYgkJKCVhMSwlZDIpLCVkMAkJIyBsb2FkIG5ldyByb3VuZGluZyBiaXRzIGZyb20gdGFibGUKKwljbHIubAkJJWQzCQkJIyBjbGVhciBkMyB0byBmb3JjZSBubyBleGMgYW5kIGV4dGVuZGVkCisJYmZpbnMJCSVkMCwlZDN7JjI2OiYyfQkJIyBzdHVmZiBuZXcgcm91bmRpbmcgYml0cyBpbiBGUENSCisJZm1vdi5sCQklZDMsJWZwY3IJCSMgd3JpdGUgbmV3IEZQQ1IKKwlhc3IubAkJJjEsJWQwCQkJIyB3cml0ZSBjb3JyZWN0IFBURU54eCB0YWJsZQorCWJjYy5iCQlub3RfcnAJCQkjIHRvIGExCisJbGVhLmwJCVBURU5SUCglcGMpLCVhMQkJIyBpdCBpcyBSUAorCWJyYS5iCQljYWxjX3AJCQkjIGdvIHRvIGluaXQgc2VjdGlvbgorbm90X3JwOgorCWFzci5sCQkmMSwlZDAJCQkjIGtlZXAgY2hlY2tpbmcKKwliY2MuYgkJbm90X3JtCisJbGVhLmwJCVBURU5STSglcGMpLCVhMQkJIyBpdCBpcyBSTQorCWJyYS5iCQljYWxjX3AJCQkjIGdvIHRvIGluaXQgc2VjdGlvbgorbm90X3JtOgorCWxlYS5sCQlQVEVOUk4oJXBjKSwlYTEJCSMgaXQgaXMgUk4KK2NhbGNfcDoKKwltb3YubAkJJWQxLCVkMAkJCSMgY29weSBleHAgdG8gZDA7dXNlIGQwCisJYnBsLmIJCW5vX25lZwkJCSMgaWYgZXhwIGlzIG5lZ2F0aXZlLAorCW5lZy5sCQklZDAJCQkjIGludmVydCBpdAorCW9yLmwJCSYweDQwMDAwMDAwLCglYTApCSMgYW5kIHNldCBTRSBiaXQKK25vX25lZzoKKwljbHIubAkJJWQzCQkJIyB0YWJsZSBpbmRleAorCWZtb3YucwkJJjB4M2Y4MDAwMDAsJWZwMQkjIGluaXQgZnAxIHRvIDEKK2VfbG9vcDoKKwlhc3IubAkJJjEsJWQwCQkJIyBzaGlmdCBuZXh0IGJpdCBpbnRvIGNhcnJ5CisJYmNjLmIJCWVfbmV4dAkJCSMgaWYgemVybywgc2tpcCB0aGUgbXVsCisJZm11bC54CQkoJWExLCVkMyksJWZwMQkJIyBtdWwgYnkgMTAqKihkM19iaXRfbm8pCitlX25leHQ6CisJYWRkLmwJCSYxMiwlZDMJCQkjIGluYyBkMyB0byBuZXh0IHJ0YWJsZSBlbnRyeQorCXRzdC5sCQklZDAJCQkjIGNoZWNrIGlmIGQwIGlzIHplcm8KKwlibmUuYgkJZV9sb29wCQkJIyBub3QgemVybywgY29udGludWUgc2hpZnRpbmcKKyMKKyMKKyMgIENoZWNrIHRoZSBzaWduIG9mIHRoZSBhZGp1c3RlZCBleHAgYW5kIG1ha2UgdGhlIHZhbHVlIGluIGZwMCB0aGUKKyMgIHNhbWUgc2lnbi4gSWYgdGhlIGV4cCB3YXMgcG9zIHRoZW4gbXVsdGlwbHkgZnAxKmZwMDsKKyMgIGVsc2UgZGl2aWRlIGZwMC9mcDEuCisjCisjIFJlZ2lzdGVyIFVzYWdlOgorIyAgbm9ybToKKyMJKCApICBhMDogcG9pbnRlciB0byB3b3JraW5nIGJjZCB2YWx1ZQorIwkoKikgZnAwOiBtYW50aXNzYSBhY2N1bXVsYXRvcgorIwkoICkgZnAxOiBzY2FsaW5nIGZhY3RvciAtIDEwKiooYWJzKGV4cCkpCisjCitwbm9ybToKKwlidHN0CQkmMzAsKCVhMCkJCSMgdGVzdCB0aGUgc2lnbiBvZiB0aGUgZXhwb25lbnQKKwliZXEuYgkJbXVsCQkJIyBpZiBjbGVhciwgZ28gdG8gbXVsdGlwbHkKK2RpdjoKKwlmZGl2LngJCSVmcDEsJWZwMAkJIyBleHAgaXMgbmVnYXRpdmUsIHNvIGRpdmlkZSBtYW50IGJ5IGV4cAorCWJyYS5iCQllbmRfZGVjCittdWw6CisJZm11bC54CQklZnAxLCVmcDAJCSMgZXhwIGlzIHBvc2l0aXZlLCBzbyBtdWx0aXBseSBieSBleHAKKyMKKyMKKyMgQ2xlYW4gdXAgYW5kIHJldHVybiB3aXRoIHJlc3VsdCBpbiBmcDAuCisjCisjIElmIHRoZSBmaW5hbCBtdWwvZGl2IGluIGRlY2JpbiBpbmN1cnJlZCBhbiBpbmV4IGV4Y2VwdGlvbiwKKyMgaXQgd2lsbCBiZSBpbmV4MiwgYnV0IHdpbGwgYmUgcmVwb3J0ZWQgYXMgaW5leDEgYnkgZ2V0X29wLgorIworZW5kX2RlYzoKKwlmbW92LmwJCSVmcHNyLCVkMAkJIyBnZXQgc3RhdHVzIHJlZ2lzdGVyCisJYmNscgkJJmluZXgyX2JpdCs4LCVkMAkjIHRlc3QgZm9yIGluZXgyIGFuZCBjbGVhciBpdAorCWJlcS5iCQlub19leGMJCQkjIHNraXAgdGhpcyBpZiBubyBleGMKKwlvcmkudwkJJmlueDFhX21hc2ssMitVU0VSX0ZQU1IoJWE2KSAjIHNldCBJTkVYMS9BSU5FWAorbm9fZXhjOgorCWFkZC5sCQkmMHg0LCVzcAkJIyBjbGVhciAxIGx3IHBhcmFtCisJZm1vdm0ueAkJKCVzcCkrLCYweDQwCQkjIHJlc3RvcmUgZnAxCisJbW92bS5sCQkoJXNwKSssJjB4M2MJCSMgcmVzdG9yZSBkMi1kNQorCWZtb3YubAkJJjB4MCwlZnBjcgorCWZtb3YubAkJJjB4MCwlZnBzcgorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGJpbmRlYygpOiBDb252ZXJ0cyBhbiBpbnB1dCBpbiBleHRlbmRlZCBwcmVjaXNpb24gZm9ybWF0IHRvIGJjZCBmb3JtYXQjCisjCQkJCQkJCQkJIworIyBJTlBVVCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlhMCA9IHBvaW50ZXIgdG8gdGhlIGlucHV0IGV4dGVuZGVkIHByZWNpc2lvbiB2YWx1ZSBpbiBtZW1vcnkuCSMKKyMJICAgICB0aGUgaW5wdXQgbWF5IGJlIGVpdGhlciBub3JtYWxpemVkLCB1bm5vcm1hbGl6ZWQsIG9yCSMKKyMJICAgICBkZW5vcm1hbGl6ZWQuCQkJCQkJIworIwlkMCA9IGNvbnRhaW5zIHRoZSBrLWZhY3RvciBzaWduLWV4dGVuZGVkIHRvIDMyLWJpdHMuCQkjCisjCQkJCQkJCQkJIworIyBPVVRQVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlGUF9TQ1IwKGE2KSA9IGJjZCBmb3JtYXQgcmVzdWx0IG9uIHRoZSBzdGFjay4JCQkjCisjCQkJCQkJCQkJIworIyBBTEdPUklUSE0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwkJCQkJCQkJCSMKKyMJQTEuCVNldCBSTSBhbmQgc2l6ZSBleHQ7ICBTZXQgU0lHTUEgPSBzaWduIG9mIGlucHV0LgkjCisjCQlUaGUgay1mYWN0b3IgaXMgc2F2ZWQgZm9yIHVzZSBpbiBkNy4gQ2xlYXIgdGhlCQkjCisjCQlCSU5ERUNfRkxHIGZvciBzZXBhcmF0aW5nIG5vcm1hbGl6ZWQvZGVub3JtYWxpemVkCSMKKyMJCWlucHV0LiAgSWYgaW5wdXQgaXMgdW5ub3JtYWxpemVkIG9yIGRlbm9ybWFsaXplZCwJIworIwkJbm9ybWFsaXplIGl0LgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCUEyLglTZXQgWCA9IGFicyhpbnB1dCkuCQkJCQkjCisjCQkJCQkJCQkJIworIwlBMy4JQ29tcHV0ZSBJTE9HLgkJCQkJCSMKKyMJCUlMT0cgaXMgdGhlIGxvZyBiYXNlIDEwIG9mIHRoZSBpbnB1dCB2YWx1ZS4gIEl0IGlzCSMKKyMJCWFwcHJveGltYXRlZCBieSBhZGRpbmcgZSArIDAuZiB3aGVuIHRoZSBvcmlnaW5hbAkjCisjCQl2YWx1ZSBpcyB2aWV3ZWQgYXMgMl5eZSAqIDEuZiBpbiBleHRlbmRlZCBwcmVjaXNpb24uCSMKKyMJCVRoaXMgdmFsdWUgaXMgc3RvcmVkIGluIGQ2LgkJCQkjCisjCQkJCQkJCQkJIworIwlBNC4JQ2xyIElORVggYml0LgkJCQkJCSMKKyMJCVRoZSBvcGVyYXRpb24gaW4gQTMgYWJvdmUgbWF5IGhhdmUgc2V0IElORVgyLgkJIworIwkJCQkJCQkJCSMKKyMJQTUuCVNldCBJQ1RSID0gMDsJCQkJCQkjCisjCQlJQ1RSIGlzIGEgZmxhZyB1c2VkIGluIEExMy4gIEl0IG11c3QgYmUgc2V0IGJlZm9yZSB0aGUJIworIwkJbG9vcCBlbnRyeSBBNi4JCQkJCQkjCisjCQkJCQkJCQkJIworIwlBNi4JQ2FsY3VsYXRlIExFTi4JCQkJCQkjCisjCQlMRU4gaXMgdGhlIG51bWJlciBvZiBkaWdpdHMgdG8gYmUgZGlzcGxheWVkLiAgVGhlCSMKKyMJCWstZmFjdG9yIGNhbiBkaWN0YXRlIGVpdGhlciB0aGUgdG90YWwgbnVtYmVyIG9mIGRpZ2l0cywJIworIwkJaWYgaXQgaXMgYSBwb3NpdGl2ZSBudW1iZXIsIG9yIHRoZSBudW1iZXIgb2YgZGlnaXRzCSMKKyMJCWFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IHdoaWNoIGFyZSB0byBiZSBpbmNsdWRlZCBhcwkjCisjCQlzaWduaWZpY2FudC4gIFNlZSB0aGUgNjg4ODIgbWFudWFsIGZvciBleGFtcGxlcy4JIworIwkJSWYgTEVOIGlzIGNvbXB1dGVkIHRvIGJlIGdyZWF0ZXIgdGhhbiAxNywgc2V0IE9QRVJSIGluCSMKKyMJCVVTRVJfRlBTUi4gIExFTiBpcyBzdG9yZWQgaW4gZDQuCQkJIworIwkJCQkJCQkJCSMKKyMJQTcuCUNhbGN1bGF0ZSBTQ0FMRS4JCQkJCSMKKyMJCVNDQUxFIGlzIGVxdWFsIHRvIDEwXklTQ0FMRSwgd2hlcmUgSVNDQUxFIGlzIHRoZSBudW1iZXIJIworIwkJb2YgZGVjaW1hbCBwbGFjZXMgbmVlZGVkIHRvIGluc3VyZSBMRU4gaW50ZWdlciBkaWdpdHMJIworIwkJaW4gdGhlIG91dHB1dCBiZWZvcmUgY29udmVyc2lvbiB0byBiY2QuIExBTUJEQSBpcyB0aGUJIworIwkJc2lnbiBvZiBJU0NBTEUsIHVzZWQgaW4gQTkuIEZwMSBjb250YWlucwkJIworIwkJMTBeXihhYnMoSVNDQUxFKSkgdXNpbmcgYSByb3VuZGluZyBtb2RlIHdoaWNoIGlzIGEJIworIwkJZnVuY3Rpb24gb2YgdGhlIG9yaWdpbmFsIHJvdW5kaW5nIG1vZGUgYW5kIHRoZSBzaWducwkjCisjCQlvZiBJU0NBTEUgYW5kIFguICBBIHRhYmxlIGlzIGdpdmVuIGluIHRoZSBjb2RlLgkJIworIwkJCQkJCQkJCSMKKyMJQTguCUNsciBJTkVYOyBGb3JjZSBSWi4JCQkJCSMKKyMJCVRoZSBvcGVyYXRpb24gaW4gQTMgYWJvdmUgbWF5IGhhdmUgc2V0IElORVgyLgkJIworIwkJUlogbW9kZSBpcyBmb3JjZWQgZm9yIHRoZSBzY2FsaW5nIG9wZXJhdGlvbiB0byBpbnN1cmUJIworIwkJb25seSBvbmUgcm91bmRpbmcgZXJyb3IuICBUaGUgZ3JzIGJpdHMgYXJlIGNvbGxlY3RlZCBpbiAjCisjCQl0aGUgSU5FWCBmbGFnIGZvciB1c2UgaW4gQTEwLgkJCQkjCisjCQkJCQkJCQkJIworIwlBOS4JU2NhbGUgWCAtPiBZLgkJCQkJCSMKKyMJCVRoZSBtYW50aXNzYSBpcyBzY2FsZWQgdG8gdGhlIGRlc2lyZWQgbnVtYmVyIG9mCQkjCisjCQlzaWduaWZpY2FudCBkaWdpdHMuICBUaGUgZXhjZXNzIGRpZ2l0cyBhcmUgY29sbGVjdGVkCSMKKyMJCWluIElORVgyLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCUExMC4JT3IgaW4gSU5FWC4JCQkJCQkjCisjCQlJZiBJTkVYIGlzIHNldCwgcm91bmQgZXJyb3Igb2NjdXJyZWQuICBUaGlzIGlzCQkjCisjCQljb21wZW5zYXRlZCBmb3IgYnkgJ29yLWluZycgaW4gdGhlIElORVgyIGZsYWcgdG8JIworIwkJdGhlIGxzYiBvZiBZLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjCUExMS4JUmVzdG9yZSBvcmlnaW5hbCBGUENSOyBzZXQgc2l6ZSBleHQuCQkJIworIwkJUGVyZm9ybSBGSU5UIG9wZXJhdGlvbiBpbiB0aGUgdXNlcidzIHJvdW5kaW5nIG1vZGUuCSMKKyMJCUtlZXAgdGhlIHNpemUgdG8gZXh0ZW5kZWQuCQkJCSMKKyMJCQkJCQkJCQkjCisjCUExMi4JQ2FsY3VsYXRlIFlJTlQgPSBGSU5UKFkpIGFjY29yZGluZyB0byB1c2VyJ3Mgcm91bmRpbmcJIworIwkJbW9kZS4gIFRoZSBGUFNQIHJvdXRpbmUgc2ludGQwIGlzIHVzZWQuICBUaGUgb3V0cHV0CSMKKyMJCWlzIGluIGZwMC4JCQkJCQkjCisjCQkJCQkJCQkJIworIwlBMTMuCUNoZWNrIGZvciBMRU4gZGlnaXRzLgkJCQkJIworIwkJSWYgdGhlIGludCBvcGVyYXRpb24gcmVzdWx0cyBpbiBtb3JlIHRoYW4gTEVOIGRpZ2l0cywJIworIwkJb3IgbGVzcyB0aGFuIExFTiAtMSBkaWdpdHMsIGFkanVzdCBJTE9HIGFuZCByZXBlYXQgZnJvbQkjCisjCQlBNi4gIFRoaXMgdGVzdCBvY2N1cnMgb25seSBvbiB0aGUgZmlyc3QgcGFzcy4gIElmIHRoZQkjCisjCQlyZXN1bHQgaXMgZXhhY3RseSAxMF5MRU4sIGRlY3JlbWVudCBJTE9HIGFuZCBkaXZpZGUJIworIwkJdGhlIG1hbnRpc3NhIGJ5IDEwLgkJCQkJIworIwkJCQkJCQkJCSMKKyMJQTE0LglDb252ZXJ0IHRoZSBtYW50aXNzYSB0byBiY2QuCQkJCSMKKyMJCVRoZSBiaW5zdHIgcm91dGluZSBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlIExFTiBkaWdpdAkjCisjCQltYW50aXNzYSB0byBiY2QgaW4gbWVtb3J5LiAgVGhlIGlucHV0IHRvIGJpbnN0ciBpcwkjCisjCQl0byBiZSBhIGZyYWN0aW9uOyBpLmUuIChtYW50aXNzYSkvMTBeTEVOIGFuZCBhZGp1c3RlZAkjCisjCQlzdWNoIHRoYXQgdGhlIGRlY2ltYWwgcG9pbnQgaXMgdG8gdGhlIGxlZnQgb2YgYml0IDYzLgkjCisjCQlUaGUgYmNkIGRpZ2l0cyBhcmUgc3RvcmVkIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uIGluCSMKKyMJCXRoZSBmaW5hbCBzdHJpbmcgYXJlYSBpbiBtZW1vcnkuCQkJIworIwkJCQkJCQkJCSMKKyMJQTE1LglDb252ZXJ0IHRoZSBleHBvbmVudCB0byBiY2QuCQkJCSMKKyMJCUFzIGluIEExNCBhYm92ZSwgdGhlIGV4cCBpcyBjb252ZXJ0ZWQgdG8gYmNkIGFuZCB0aGUJIworIwkJZGlnaXRzIGFyZSBzdG9yZWQgaW4gdGhlIGZpbmFsIHN0cmluZy4JCQkjCisjCQlUZXN0IHRoZSBsZW5ndGggb2YgdGhlIGZpbmFsIGV4cG9uZW50IHN0cmluZy4gIElmIHRoZQkjCisjCQlsZW5ndGggaXMgNCwgc2V0IG9wZXJyLgkJCQkJIworIwkJCQkJCQkJCSMKKyMJQTE2LglXcml0ZSBzaWduIGJpdHMgdG8gZmluYWwgc3RyaW5nLgkJCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3NldAlCSU5ERUNfRkxHLAlFWENfVEVNUAkjIERFTk9STSBmbGFnCisKKyMgQ29uc3RhbnRzIGluIGV4dGVuZGVkIHByZWNpc2lvbgorUExPRzI6CisJbG9uZwkJMHgzRkZEMDAwMCwweDlBMjA5QTg0LDB4RkJDRkY3OTgsMHgwMDAwMDAwMAorUExPRzJVUDE6CisJbG9uZwkJMHgzRkZEMDAwMCwweDlBMjA5QTg0LDB4RkJDRkY3OTksMHgwMDAwMDAwMAorCisjIENvbnN0YW50cyBpbiBzaW5nbGUgcHJlY2lzaW9uCitGT05FOgorCWxvbmcJCTB4M0Y4MDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKK0ZUV086CisJbG9uZwkJMHg0MDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorRlRFTjoKKwlsb25nCQkweDQxMjAwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCitGNDkzMzoKKwlsb25nCQkweDQ1OUEyODAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisKK1JCRFRCTDoKKwlieXRlCQkwLDAsMCwwCisJYnl0ZQkJMywzLDIsMgorCWJ5dGUJCTMsMiwyLDMKKwlieXRlCQkyLDMsMywyCisKKyMJSW1wbGVtZW50YXRpb24gTm90ZXM6CisjCisjCVRoZSByZWdpc3RlcnMgYXJlIHVzZWQgYXMgZm9sbG93czoKKyMKKyMJCWQwOiBzY3JhdGNoOyBMRU4gaW5wdXQgdG8gYmluc3RyCisjCQlkMTogc2NyYXRjaAorIwkJZDI6IHVwcGVyIDMyLWJpdHMgb2YgbWFudGlzc2EgZm9yIGJpbnN0cgorIwkJZDM6IHNjcmF0Y2g7bG93ZXIgMzItYml0cyBvZiBtYW50aXNzYSBmb3IgYmluc3RyCisjCQlkNDogTEVOCisjCQlkNTogTEFNQkRBL0lDVFIKKyMJCWQ2OiBJTE9HCisjCQlkNzogay1mYWN0b3IKKyMJCWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvZmluYWwgcmVzdWx0CisjCQlhMTogc2NyYXRjaCBwb2ludGVyCisjCQlhMjogcG9pbnRlciB0byBGUF9YOyBhYnMob3JpZ2luYWwgdmFsdWUpIGluIGV4dAorIwkJZnAwOiBzY3JhdGNoCisjCQlmcDE6IHNjcmF0Y2gKKyMJCWZwMjogc2NyYXRjaAorIwkJRl9TQ1IxOgorIwkJRl9TQ1IyOgorIwkJTF9TQ1IxOgorIwkJTF9TQ1IyOgorCisJZ2xvYmFsCQliaW5kZWMKK2JpbmRlYzoKKwltb3ZtLmwJCSYweDNmMjAsLSglc3ApCSMgIHslZDItJWQ3LyVhMn0KKwlmbW92bS54CQkmMHg3LC0oJXNwKQkjICB7JWZwMC0lZnAyfQorCisjIEExLiBTZXQgUk0gYW5kIHNpemUgZXh0LiBTZXQgU0lHTUEgPSBzaWduIGlucHV0OworIyAgICAgVGhlIGstZmFjdG9yIGlzIHNhdmVkIGZvciB1c2UgaW4gZDcuICBDbGVhciBCSU5ERUNfRkxHIGZvcgorIyAgICAgc2VwYXJhdGluZyAgbm9ybWFsaXplZC9kZW5vcm1hbGl6ZWQgaW5wdXQuICBJZiB0aGUgaW5wdXQKKyMgICAgIGlzIGEgZGVub3JtYWxpemVkIG51bWJlciwgc2V0IHRoZSBCSU5ERUNfRkxHIG1lbW9yeSB3b3JkCisjICAgICB0byBzaWduYWwgZGVub3JtLiAgSWYgdGhlIGlucHV0IGlzIHVubm9ybWFsaXplZCwgbm9ybWFsaXplCisjICAgICB0aGUgaW5wdXQgYW5kIHRlc3QgZm9yIGRlbm9ybWFsaXplZCByZXN1bHQuCisjCisJZm1vdi5sCQkmcm1fbW9kZSoweDEwLCVmcGNyCSMgc2V0IFJNIGFuZCBleHQKKwltb3YubAkJKCVhMCksTF9TQ1IyKCVhNikJIyBzYXZlIGV4cG9uZW50IGZvciBzaWduIGNoZWNrCisJbW92LmwJCSVkMCwlZDcJCSMgbW92ZSBrLWZhY3RvciB0byBkNworCisJY2xyLmIJCUJJTkRFQ19GTEcoJWE2KQkjIGNsciBub3JtL2Rlbm9ybSBmbGFnCisJY21waS5iCQlTVEFHKCVhNiksJkRFTk9STSAjIGlzIGlucHV0IGEgREVOT1JNPworCWJuZS53CQlBMl9zdHIJCSMgbm87IGlucHV0IGlzIGEgTk9STQorCisjCisjIE5vcm1hbGl6ZSB0aGUgZGVub3JtCisjCit1bl9kZV9ub3JtOgorCW1vdi53CQkoJWEwKSwlZDAKKwlhbmQudwkJJjB4N2ZmZiwlZDAJIyBzdHJpcCBzaWduIG9mIG5vcm1hbGl6ZWQgZXhwCisJbW92LmwJCTQoJWEwKSwlZDEKKwltb3YubAkJOCglYTApLCVkMgorbm9ybV9sb29wOgorCXN1Yi53CQkmMSwlZDAKKwlsc2wubAkJJjEsJWQyCisJcm94bC5sCQkmMSwlZDEKKwl0c3QubAkJJWQxCisJYmdlLmIJCW5vcm1fbG9vcAorIworIyBUZXN0IGlmIHRoZSBub3JtYWxpemVkIGlucHV0IGlzIGRlbm9ybWFsaXplZAorIworCXRzdC53CQklZDAKKwliZ3QuYgkJcG9zX2V4cAkJIyBpZiBncmVhdGVyIHRoYW4gemVybywgaXQgaXMgYSBub3JtCisJc3QJCUJJTkRFQ19GTEcoJWE2KQkjIHNldCBmbGFnIGZvciBkZW5vcm0KK3Bvc19leHA6CisJYW5kLncJCSYweDdmZmYsJWQwCSMgc3RyaXAgc2lnbiBvZiBub3JtYWxpemVkIGV4cAorCW1vdi53CQklZDAsKCVhMCkKKwltb3YubAkJJWQxLDQoJWEwKQorCW1vdi5sCQklZDIsOCglYTApCisKKyMgQTIuIFNldCBYID0gYWJzKGlucHV0KS4KKyMKK0EyX3N0cjoKKwltb3YubAkJKCVhMCksRlBfU0NSMSglYTYpCSMgbW92ZSBpbnB1dCB0byB3b3JrIHNwYWNlCisJbW92LmwJCTQoJWEwKSxGUF9TQ1IxKzQoJWE2KQkjIG1vdmUgaW5wdXQgdG8gd29yayBzcGFjZQorCW1vdi5sCQk4KCVhMCksRlBfU0NSMSs4KCVhNikJIyBtb3ZlIGlucHV0IHRvIHdvcmsgc3BhY2UKKwlhbmQubAkJJjB4N2ZmZmZmZmYsRlBfU0NSMSglYTYpCSMgY3JlYXRlIGFicyhYKQorCisjIEEzLiBDb21wdXRlIElMT0cuCisjICAgICBJTE9HIGlzIHRoZSBsb2cgYmFzZSAxMCBvZiB0aGUgaW5wdXQgdmFsdWUuICBJdCBpcyBhcHByb3gtCisjICAgICBpbWF0ZWQgYnkgYWRkaW5nIGUgKyAwLmYgd2hlbiB0aGUgb3JpZ2luYWwgdmFsdWUgaXMgdmlld2VkCisjICAgICBhcyAyXl5lICogMS5mIGluIGV4dGVuZGVkIHByZWNpc2lvbi4gIFRoaXMgdmFsdWUgaXMgc3RvcmVkCisjICAgICBpbiBkNi4KKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCUlucHV0L091dHB1dAorIwlkMDogay1mYWN0b3IvZXhwb25lbnQKKyMJZDI6IHgveAorIwlkMzogeC94CisjCWQ0OiB4L3gKKyMJZDU6IHgveAorIwlkNjogeC9JTE9HCisjCWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKKyMJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9maW5hbCByZXN1bHQKKyMJYTE6IHgveAorIwlhMjogeC94CisjCWZwMDogeC9mbG9hdChJTE9HKQorIwlmcDE6IHgveAorIwlmcDI6IHgveAorIwlGX1NDUjE6eC94CisjCUZfU0NSMjpBYnMoWCkvQWJzKFgpIHdpdGggJDNmZmYgZXhwb25lbnQKKyMJTF9TQ1IxOngveAorIwlMX1NDUjI6Zmlyc3Qgd29yZCBvZiBYIHBhY2tlZC9VbmNoYW5nZWQKKworCXRzdC5iCQlCSU5ERUNfRkxHKCVhNikJIyBjaGVjayBmb3IgZGVub3JtCisJYmVxLmIJCUEzX2NvbnQJCSMgaWYgY2xyLCBjb250aW51ZSB3aXRoIG5vcm0KKwltb3YubAkJJi00OTMzLCVkNgkjIGZvcmNlIElMT0cgPSAtNDkzMworCWJyYS5iCQlBNF9zdHIKK0EzX2NvbnQ6CisJbW92LncJCUZQX1NDUjEoJWE2KSwlZDAJIyBtb3ZlIGV4cCB0byBkMAorCW1vdi53CQkmMHgzZmZmLEZQX1NDUjEoJWE2KQkjIHJlcGxhY2UgZXhwb25lbnQgd2l0aCAweDNmZmYKKwlmbW92LngJCUZQX1NDUjEoJWE2KSwlZnAwCSMgbm93IGZwMCBoYXMgMS5mCisJc3ViLncJCSYweDNmZmYsJWQwCSMgc3RyaXAgb2ZmIGJpYXMKKwlmYWRkLncJCSVkMCwlZnAwCSMgYWRkIGluIGV4cAorCWZzdWIucwkJRk9ORSglcGMpLCVmcDAJIyBzdWJ0cmFjdCBvZmYgMS4wCisJZmJnZS53CQlwb3NfcmVzCQkjIGlmIHBvcywgYnJhbmNoCisJZm11bC54CQlQTE9HMlVQMSglcGMpLCVmcDAJIyBpZiBuZWcsIG11bCBieSBMT0cyVVAxCisJZm1vdi5sCQklZnAwLCVkNgkjIHB1dCBJTE9HIGluIGQ2IGFzIGEgbHdvcmQKKwlicmEuYgkJQTRfc3RyCQkjIGdvIG1vdmUgb3V0IElMT0cKK3Bvc19yZXM6CisJZm11bC54CQlQTE9HMiglcGMpLCVmcDAJIyBpZiBwb3MsIG11bCBieSBMT0cyCisJZm1vdi5sCQklZnAwLCVkNgkjIHB1dCBJTE9HIGluIGQ2IGFzIGEgbHdvcmQKKworCisjIEE0LiBDbHIgSU5FWCBiaXQuCisjICAgICBUaGUgb3BlcmF0aW9uIGluIEEzIGFib3ZlIG1heSBoYXZlIHNldCBJTkVYMi4KKworQTRfc3RyOgorCWZtb3YubAkJJjAsJWZwc3IJIyB6ZXJvIGFsbCBvZiBmcHNyIC0gbm90aGluZyBuZWVkZWQKKworCisjIEE1LiBTZXQgSUNUUiA9IDA7CisjICAgICBJQ1RSIGlzIGEgZmxhZyB1c2VkIGluIEExMy4gIEl0IG11c3QgYmUgc2V0IGJlZm9yZSB0aGUKKyMgICAgIGxvb3AgZW50cnkgQTYuIFRoZSBsb3dlciB3b3JkIG9mIGQ1IGlzIHVzZWQgZm9yIElDVFIuCisKKwljbHIudwkJJWQ1CQkjIGNsZWFyIElDVFIKKworIyBBNi4gQ2FsY3VsYXRlIExFTi4KKyMgICAgIExFTiBpcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyB0byBiZSBkaXNwbGF5ZWQuICBUaGUgay1mYWN0b3IKKyMgICAgIGNhbiBkaWN0YXRlIGVpdGhlciB0aGUgdG90YWwgbnVtYmVyIG9mIGRpZ2l0cywgaWYgaXQgaXMKKyMgICAgIGEgcG9zaXRpdmUgbnVtYmVyLCBvciB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUKKyMgICAgIG9yaWdpbmFsIGRlY2ltYWwgcG9pbnQgd2hpY2ggYXJlIHRvIGJlIGluY2x1ZGVkIGFzCisjICAgICBzaWduaWZpY2FudC4gIFNlZSB0aGUgNjg4ODIgbWFudWFsIGZvciBleGFtcGxlcy4KKyMgICAgIElmIExFTiBpcyBjb21wdXRlZCB0byBiZSBncmVhdGVyIHRoYW4gMTcsIHNldCBPUEVSUiBpbgorIyAgICAgVVNFUl9GUFNSLiAgTEVOIGlzIHN0b3JlZCBpbiBkNC4KKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCUlucHV0L091dHB1dAorIwlkMDogZXhwb25lbnQvVW5jaGFuZ2VkCisjCWQyOiB4L3gvc2NyYXRjaAorIwlkMzogeC94CisjCWQ0OiBleGMgcGljdHVyZS9MRU4KKyMJZDU6IElDVFIvVW5jaGFuZ2VkCisjCWQ2OiBJTE9HL1VuY2hhbmdlZAorIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCisjCWEwOiBwdHIgZm9yIG9yaWdpbmFsIG9wZXJhbmQvZmluYWwgcmVzdWx0CisjCWExOiB4L3gKKyMJYTI6IHgveAorIwlmcDA6IGZsb2F0KElMT0cpL1VuY2hhbmdlZAorIwlmcDE6IHgveAorIwlmcDI6IHgveAorIwlGX1NDUjE6eC94CisjCUZfU0NSMjpBYnMoWCkgd2l0aCAkM2ZmZiBleHBvbmVudC9VbmNoYW5nZWQKKyMJTF9TQ1IxOngveAorIwlMX1NDUjI6Zmlyc3Qgd29yZCBvZiBYIHBhY2tlZC9VbmNoYW5nZWQKKworQTZfc3RyOgorCXRzdC5sCQklZDcJCSMgYnJhbmNoIG9uIHNpZ24gb2YgaworCWJsZS5iCQlrX25lZwkJIyBpZiBrIDw9IDAsIExFTiA9IElMT0cgKyAxIC0gaworCW1vdi5sCQklZDcsJWQ0CQkjIGlmIGsgPiAwLCBMRU4gPSBrCisJYnJhLmIJCWxlbl9jawkJIyBza2lwIHRvIExFTiBjaGVjawora19uZWc6CisJbW92LmwJCSVkNiwlZDQJCSMgZmlyc3QgbG9hZCBJTE9HIHRvIGQ0CisJc3ViLmwJCSVkNywlZDQJCSMgc3VidHJhY3Qgb2ZmIGsKKwlhZGRxLmwJCSYxLCVkNAkJIyBhZGQgaW4gdGhlIDEKK2xlbl9jazoKKwl0c3QubAkJJWQ0CQkjIExFTiBjaGVjazogYnJhbmNoIG9uIHNpZ24gb2YgTEVOCisJYmxlLmIJCUxFTl9uZwkJIyBpZiBuZWcsIHNldCBMRU4gPSAxCisJY21wLmwJCSVkNCwmMTcJCSMgdGVzdCBpZiBMRU4gPiAxNworCWJsZS5iCQlBN19zdHIJCSMgaWYgbm90LCBmb3JnZXQgaXQKKwltb3YubAkJJjE3LCVkNAkJIyBzZXQgbWF4IExFTiA9IDE3CisJdHN0LmwJCSVkNwkJIyBpZiBuZWdhdGl2ZSwgbmV2ZXIgc2V0IE9QRVJSCisJYmxlLmIJCUE3X3N0cgkJIyBpZiBwb3NpdGl2ZSwgY29udGludWUKKwlvci5sCQkmb3Bhb3BfbWFzayxVU0VSX0ZQU1IoJWE2KQkjIHNldCBPUEVSUiAmIEFJT1AgaW4gVVNFUl9GUFNSCisJYnJhLmIJCUE3X3N0cgkJIyBmaW5pc2hlZCBoZXJlCitMRU5fbmc6CisJbW92LmwJCSYxLCVkNAkJIyBtaW4gTEVOIGlzIDEKKworCisjIEE3LiBDYWxjdWxhdGUgU0NBTEUuCisjICAgICBTQ0FMRSBpcyBlcXVhbCB0byAxMF5JU0NBTEUsIHdoZXJlIElTQ0FMRSBpcyB0aGUgbnVtYmVyCisjICAgICBvZiBkZWNpbWFsIHBsYWNlcyBuZWVkZWQgdG8gaW5zdXJlIExFTiBpbnRlZ2VyIGRpZ2l0cworIyAgICAgaW4gdGhlIG91dHB1dCBiZWZvcmUgY29udmVyc2lvbiB0byBiY2QuIExBTUJEQSBpcyB0aGUgc2lnbgorIyAgICAgb2YgSVNDQUxFLCB1c2VkIGluIEE5LiAgRnAxIGNvbnRhaW5zIDEwXl4oYWJzKElTQ0FMRSkpIHVzaW5nCisjICAgICB0aGUgcm91bmRpbmcgbW9kZSBhcyBnaXZlbiBpbiB0aGUgZm9sbG93aW5nIHRhYmxlIChzZWUKKyMgICAgIENvb25lbiwgcC4gNy4yMyBhcyByZWYuOyBob3dldmVyLCB0aGUgU0NBTEUgdmFyaWFibGUgaXMKKyMgICAgIG9mIG9wcG9zaXRlIHNpZ24gaW4gYmluZGVjLnNhIGZyb20gQ29vbmVuKS4KKyMKKyMJSW5pdGlhbAkJCQkJVVNFCisjCUZQQ1JbNjo1XQlMQU1CREEJU0lHTihYKQkJRlBDUls2OjVdCisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMJIFJOCTAwCSAgIDAJICAgMAkJMDAvMAlSTgorIwkgUk4JMDAJICAgMAkgICAxCQkwMC8wCVJOCisjCSBSTgkwMAkgICAxCSAgIDAJCTAwLzAJUk4KKyMJIFJOCTAwCSAgIDEJICAgMQkJMDAvMAlSTgorIwkgUloJMDEJICAgMAkgICAwCQkxMS8zCVJQCisjCSBSWgkwMQkgICAwCSAgIDEJCTExLzMJUlAKKyMJIFJaCTAxCSAgIDEJICAgMAkJMTAvMglSTQorIwkgUloJMDEJICAgMQkgICAxCQkxMC8yCVJNCisjCSBSTQkxMAkgICAwCSAgIDAJCTExLzMJUlAKKyMJIFJNCTEwCSAgIDAJICAgMQkJMTAvMglSTQorIwkgUk0JMTAJICAgMQkgICAwCQkxMC8yCVJNCisjCSBSTQkxMAkgICAxCSAgIDEJCTExLzMJUlAKKyMJIFJQCTExCSAgIDAJICAgMAkJMTAvMglSTQorIwkgUlAJMTEJICAgMAkgICAxCQkxMS8zCVJQCisjCSBSUAkxMQkgICAxCSAgIDAJCTExLzMJUlAKKyMJIFJQCTExCSAgIDEJICAgMQkJMTAvMglSTQorIworIyBSZWdpc3RlciB1c2FnZToKKyMJSW5wdXQvT3V0cHV0CisjCWQwOiBleHBvbmVudC9zY3JhdGNoIC0gZmluYWwgaXMgMAorIwlkMjogeC8wIG9yIDI0IGZvciBBOQorIwlkMzogeC9zY3JhdGNoIC0gb2Zmc2V0IHB0ciBpbnRvIFBURU5STSBhcnJheQorIwlkNDogTEVOL1VuY2hhbmdlZAorIwlkNTogMC9JQ1RSOkxBTUJEQQorIwlkNjogSUxPRy9JTE9HIG9yIGsgaWYgKChrPD0wKSYoSUxPRzxrKSkKKyMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAorIwlhMDogcHRyIGZvciBvcmlnaW5hbCBvcGVyYW5kL2ZpbmFsIHJlc3VsdAorIwlhMTogeC9wdHIgdG8gUFRFTlJNIGFycmF5CisjCWEyOiB4L3gKKyMJZnAwOiBmbG9hdChJTE9HKS9VbmNoYW5nZWQKKyMJZnAxOiB4LzEwXklTQ0FMRQorIwlmcDI6IHgveAorIwlGX1NDUjE6eC94CisjCUZfU0NSMjpBYnMoWCkgd2l0aCAkM2ZmZiBleHBvbmVudC9VbmNoYW5nZWQKKyMJTF9TQ1IxOngveAorIwlMX1NDUjI6Zmlyc3Qgd29yZCBvZiBYIHBhY2tlZC9VbmNoYW5nZWQKKworQTdfc3RyOgorCXRzdC5sCQklZDcJCSMgdGVzdCBzaWduIG9mIGsKKwliZ3QuYgkJa19wb3MJCSMgaWYgcG9zIGFuZCA+IDAsIHNraXAgdGhpcworCWNtcC5sCQklZDcsJWQ2CQkjIHRlc3QgayAtIElMT0cKKwlibHQuYgkJa19wb3MJCSMgaWYgSUxPRyA+PSBrLCBza2lwIHRoaXMKKwltb3YubAkJJWQ3LCVkNgkJIyBpZiAoKGs8MCkgJiAoSUxPRyA8IGspKSBJTE9HID0gawora19wb3M6CisJbW92LmwJCSVkNiwlZDAJCSMgY2FsYyBJTE9HICsgMSAtIExFTiBpbiBkMAorCWFkZHEubAkJJjEsJWQwCQkjIGFkZCB0aGUgMQorCXN1Yi5sCQklZDQsJWQwCQkjIHN1YiBvZmYgTEVOCisJc3dhcAkJJWQ1CQkjIHVzZSB1cHBlciB3b3JkIG9mIGQ1IGZvciBMQU1CREEKKwljbHIudwkJJWQ1CQkjIHNldCBpdCB6ZXJvIGluaXRpYWxseQorCWNsci53CQklZDIJCSMgc2V0IHVwIGQyIGZvciB2ZXJ5IHNtYWxsIGNhc2UKKwl0c3QubAkJJWQwCQkjIHRlc3Qgc2lnbiBvZiBJU0NBTEUKKwliZ2UuYgkJaXNjYWxlCQkjIGlmIHBvcywgc2tpcCBuZXh0IGluc3QKKwlhZGRxLncJCSYxLCVkNQkJIyBpZiBuZWcsIHNldCBMQU1CREEgdHJ1ZQorCWNtcC5sCQklZDAsJjB4ZmZmZmVjZDQJIyB0ZXN0IGlzY2FsZSA8PSAtNDkwOAorCWJndC5iCQlub19pbmYJCSMgaWYgZmFsc2UsIHNraXAgcmVzdAorCWFkZC5sCQkmMjQsJWQwCQkjIGFkZCBpbiAyNCB0byBpc2NhbGUKKwltb3YubAkJJjI0LCVkMgkJIyBwdXQgMjQgaW4gZDIgZm9yIEE5Citub19pbmY6CisJbmVnLmwJCSVkMAkJIyBhbmQgdGFrZSBhYnMgb2YgSVNDQUxFCitpc2NhbGU6CisJZm1vdi5zCQlGT05FKCVwYyksJWZwMQkjIGluaXQgZnAxIHRvIDEKKwliZmV4dHUJCVVTRVJfRlBDUiglYTYpeyYyNjomMn0sJWQxCSMgZ2V0IGluaXRpYWwgcm1vZGUgYml0cworCWxzbC53CQkmMSwlZDEJCSMgcHV0IHRoZW0gaW4gYml0cyAyOjEKKwlhZGQudwkJJWQ1LCVkMQkJIyBhZGQgaW4gTEFNQkRBCisJbHNsLncJCSYxLCVkMQkJIyBwdXQgdGhlbSBpbiBiaXRzIDM6MQorCXRzdC5sCQlMX1NDUjIoJWE2KQkjIHRlc3Qgc2lnbiBvZiBvcmlnaW5hbCB4CisJYmdlLmIJCXhfcG9zCQkjIGlmIHBvcywgZG9uJ3Qgc2V0IGJpdCAwCisJYWRkcS5sCQkmMSwlZDEJCSMgaWYgbmVnLCBzZXQgYml0IDAKK3hfcG9zOgorCWxlYS5sCQlSQkRUQkwoJXBjKSwlYTIJIyBsb2FkIHJiZHRibCBiYXNlCisJbW92LmIJCSglYTIsJWQxKSwlZDMJIyBsb2FkIGQzIHdpdGggbmV3IHJtb2RlCisJbHNsLmwJCSY0LCVkMwkJIyBwdXQgYml0cyBpbiBwcm9wZXIgcG9zaXRpb24KKwlmbW92LmwJCSVkMywlZnBjcgkjIGxvYWQgYml0cyBpbnRvIGZwdQorCWxzci5sCQkmNCwlZDMJCSMgcHV0IGJpdHMgaW4gcHJvcGVyIHBvc2l0aW9uCisJdHN0LmIJCSVkMwkJIyBkZWNvZGUgbmV3IHJtb2RlIGZvciBwdGVuIHRhYmxlCisJYm5lLmIJCW5vdF9ybgkJIyBpZiB6ZXJvLCBpdCBpcyBSTgorCWxlYS5sCQlQVEVOUk4oJXBjKSwlYTEJIyBsb2FkIGExIHdpdGggUk4gdGFibGUgYmFzZQorCWJyYS5iCQlybW9kZQkJIyBleGl0IGRlY29kZQorbm90X3JuOgorCWxzci5iCQkmMSwlZDMJCSMgZ2V0IGxzYiBpbiBjYXJyeQorCWJjYy5iCQlub3RfcnAyCQkjIGlmIGNhcnJ5IGNsZWFyLCBpdCBpcyBSTQorCWxlYS5sCQlQVEVOUlAoJXBjKSwlYTEJIyBsb2FkIGExIHdpdGggUlAgdGFibGUgYmFzZQorCWJyYS5iCQlybW9kZQkJIyBleGl0IGRlY29kZQorbm90X3JwMjoKKwlsZWEubAkJUFRFTlJNKCVwYyksJWExCSMgbG9hZCBhMSB3aXRoIFJNIHRhYmxlIGJhc2UKK3Jtb2RlOgorCWNsci5sCQklZDMJCSMgY2xyIHRhYmxlIGluZGV4CitlX2xvb3AyOgorCWxzci5sCQkmMSwlZDAJCSMgc2hpZnQgbmV4dCBiaXQgaW50byBjYXJyeQorCWJjYy5iCQllX25leHQyCQkjIGlmIHplcm8sIHNraXAgdGhlIG11bAorCWZtdWwueAkJKCVhMSwlZDMpLCVmcDEJIyBtdWwgYnkgMTAqKihkM19iaXRfbm8pCitlX25leHQyOgorCWFkZC5sCQkmMTIsJWQzCQkjIGluYyBkMyB0byBuZXh0IHB3cnRlbiB0YWJsZSBlbnRyeQorCXRzdC5sCQklZDAJCSMgdGVzdCBpZiBJU0NBTEUgaXMgemVybworCWJuZS5iCQllX2xvb3AyCQkjIGlmIG5vdCwgbG9vcAorCisjIEE4LiBDbHIgSU5FWDsgRm9yY2UgUlouCisjICAgICBUaGUgb3BlcmF0aW9uIGluIEEzIGFib3ZlIG1heSBoYXZlIHNldCBJTkVYMi4KKyMgICAgIFJaIG1vZGUgaXMgZm9yY2VkIGZvciB0aGUgc2NhbGluZyBvcGVyYXRpb24gdG8gaW5zdXJlCisjICAgICBvbmx5IG9uZSByb3VuZGluZyBlcnJvci4gIFRoZSBncnMgYml0cyBhcmUgY29sbGVjdGVkIGluCisjICAgICB0aGUgSU5FWCBmbGFnIGZvciB1c2UgaW4gQTEwLgorIworIyBSZWdpc3RlciB1c2FnZToKKyMJSW5wdXQvT3V0cHV0CisKKwlmbW92LmwJCSYwLCVmcHNyCSMgY2xyIElORVgKKwlmbW92LmwJCSZyel9tb2RlKjB4MTAsJWZwY3IJIyBzZXQgUlogcm91bmRpbmcgbW9kZQorCisjIEE5LiBTY2FsZSBYIC0+IFkuCisjICAgICBUaGUgbWFudGlzc2EgaXMgc2NhbGVkIHRvIHRoZSBkZXNpcmVkIG51bWJlciBvZiBzaWduaWZpY2FudAorIyAgICAgZGlnaXRzLiAgVGhlIGV4Y2VzcyBkaWdpdHMgYXJlIGNvbGxlY3RlZCBpbiBJTkVYMi4gSWYgbXVsLAorIyAgICAgQ2hlY2sgZDIgZm9yIGV4Y2VzcyAxMCBleHBvbmVudGlhbCB2YWx1ZS4gIElmIG5vdCB6ZXJvLAorIyAgICAgdGhlIGlzY2FsZSB2YWx1ZSB3b3VsZCBoYXZlIGNhdXNlZCB0aGUgcHdydGVuIGNhbGN1bGF0aW9uCisjICAgICB0byBvdmVyZmxvdy4gIE9ubHkgYSBuZWdhdGl2ZSBpc2NhbGUgY2FuIGNhdXNlIHRoaXMsIHNvCisjICAgICBtdWx0aXBseSBieSAxMF4oZDIpLCB3aGljaCBpcyBub3cgb25seSBhbGxvd2VkIHRvIGJlIDI0LAorIyAgICAgd2l0aCBhIG11bHRpcGx5IGJ5IDEwXjggYW5kIDEwXjE2LCB3aGljaCBpcyBleGFjdCBzaW5jZQorIyAgICAgMTBeMjQgaXMgZXhhY3QuICBJZiB0aGUgaW5wdXQgd2FzIGRlbm9ybWFsaXplZCwgd2UgbXVzdAorIyAgICAgY3JlYXRlIGEgYnVzeSBzdGFjayBmcmFtZSB3aXRoIHRoZSBtdWwgY29tbWFuZCBhbmQgdGhlCisjICAgICB0d28gb3BlcmFuZHMsIGFuZCBhbGxvdyB0aGUgZnB1IHRvIGNvbXBsZXRlIHRoZSBtdWx0aXBseS4KKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCUlucHV0L091dHB1dAorIwlkMDogRlBDUiB3aXRoIFJaIG1vZGUvVW5jaGFuZ2VkCisjCWQyOiAwIG9yIDI0L3VuY2hhbmdlZAorIwlkMzogeC94CisjCWQ0OiBMRU4vVW5jaGFuZ2VkCisjCWQ1OiBJQ1RSOkxBTUJEQQorIwlkNjogSUxPRy9VbmNoYW5nZWQKKyMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAorIwlhMDogcHRyIGZvciBvcmlnaW5hbCBvcGVyYW5kL2ZpbmFsIHJlc3VsdAorIwlhMTogcHRyIHRvIFBURU5STSBhcnJheS9VbmNoYW5nZWQKKyMJYTI6IHgveAorIwlmcDA6IGZsb2F0KElMT0cpL1ggYWRqdXN0ZWQgZm9yIFNDQUxFIChZKQorIwlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKKyMJZnAyOiB4L3gKKyMJRl9TQ1IxOngveAorIwlGX1NDUjI6QWJzKFgpIHdpdGggJDNmZmYgZXhwb25lbnQvVW5jaGFuZ2VkCisjCUxfU0NSMTp4L3gKKyMJTF9TQ1IyOmZpcnN0IHdvcmQgb2YgWCBwYWNrZWQvVW5jaGFuZ2VkCisKK0E5X3N0cjoKKwlmbW92LngJCSglYTApLCVmcDAJIyBsb2FkIFggZnJvbSBtZW1vcnkKKwlmYWJzLngJCSVmcDAJCSMgdXNlIGFicyhYKQorCXRzdC53CQklZDUJCSMgTEFNQkRBIGlzIGluIGxvd2VyIHdvcmQgb2YgZDUKKwlibmUuYgkJc2NfbXVsCQkjIGlmIG5lZyAoTEFNQkRBID0gMSksIHNjYWxlIGJ5IG11bAorCWZkaXYueAkJJWZwMSwlZnAwCSMgY2FsY3VsYXRlIFggLyBTQ0FMRSAtPiBZIHRvIGZwMAorCWJyYS53CQlBMTBfc3QJCSMgYnJhbmNoIHRvIEExMAorCitzY19tdWw6CisJdHN0LmIJCUJJTkRFQ19GTEcoJWE2KQkjIGNoZWNrIGZvciBkZW5vcm0KKwliZXEudwkJQTlfbm9ybQkJIyBpZiBub3JtLCBjb250aW51ZSB3aXRoIG11bAorCisjIGZvciBERU5PUk0sIHdlIG11c3QgY2FsY3VsYXRlOgorIwlmcDAgPSBpbnB1dF9vcCAqIDEwXklTQ0FMRSAqIDEwXjI0CisjIHNpbmNlIHRoZSBpbnB1dCBvcGVyYW5kIGlzIGEgREVOT1JNLCB3ZSBjYW4ndCBtdWx0aXBseSBpdCBkaXJlY3RseS4KKyMgc28sIHdlIGRvIHRoZSBtdWx0aXBsaWNhdGlvbiBvZiB0aGUgZXhwb25lbnRzIGFuZCBtYW50aXNzYXMgc2VwYXJhdGVseS4KKyMgaW4gdGhpcyB3YXksIHdlIGF2b2lkIHVuZGVyZmxvdyBvbiBpbnRlcm1lZGlhdGUgc3RhZ2VzIG9mIHRoZQorIyBtdWx0aXBsaWNhdGlvbiBhbmQgZ3VhcmFudGVlIGEgcmVzdWx0IHdpdGhvdXQgZXhjZXB0aW9uLgorCWZtb3ZtLngJCSYweDIsLSglc3ApCSMgc2F2ZSAxMF5JU0NBTEUgdG8gc3RhY2sKKworCW1vdi53CQkoJXNwKSwlZDMJIyBncmFiIGV4cG9uZW50CisJYW5kaS53CQkmMHg3ZmZmLCVkMwkjIGNsZWFyIHNpZ24KKwlvcmkudwkJJjB4ODAwMCwoJWEwKQkjIG1ha2UgREVOT1JNIGV4cCBuZWdhdGl2ZQorCWFkZC53CQkoJWEwKSwlZDMJIyBhZGQgREVOT1JNIGV4cCB0byAxMF5JU0NBTEUgZXhwCisJc3ViaS53CQkmMHgzZmZmLCVkMwkjIHN1YnRyYWN0IEJJQVMKKwlhZGQudwkJMzYoJWExKSwlZDMKKwlzdWJpLncJCSYweDNmZmYsJWQzCSMgc3VidHJhY3QgQklBUworCWFkZC53CQk0OCglYTEpLCVkMworCXN1YmkudwkJJjB4M2ZmZiwlZDMJIyBzdWJ0cmFjdCBCSUFTCisKKwlibWkudwkJc2NfbXVsX2VycgkjIGlzIHJlc3VsdCBpcyBERU5PUk0sIHB1bnQhISEKKworCWFuZGkudwkJJjB4ODAwMCwoJXNwKQkjIGtlZXAgc2lnbgorCW9yLncJCSVkMywoJXNwKQkjIGluc2VydCBuZXcgZXhwb25lbnQKKwlhbmRpLncJCSYweDdmZmYsKCVhMCkJIyBjbGVhciBzaWduIGJpdCBvbiBERU5PUk0gYWdhaW4KKwltb3YubAkJMHg4KCVhMCksLSglc3ApICMgcHV0IGlucHV0IG9wIG1hbnRpc3NhIG9uIHN0aworCW1vdi5sCQkweDQoJWEwKSwtKCVzcCkKKwltb3YubAkJJjB4M2ZmZjAwMDAsLSglc3ApICMgZm9yY2UgZXhwIHRvIHplcm8KKwlmbW92bS54CQkoJXNwKSssJjB4ODAJIyBsb2FkIG5vcm1hbGl6ZWQgREVOT1JNIGludG8gZnAwCisJZm11bC54CQkoJXNwKSssJWZwMAorCisjCWZtdWwueAkzNiglYTEpLCVmcDAJIyBtdWx0aXBseSBmcDAgYnkgMTBeOAorIwlmbXVsLngJNDgoJWExKSwlZnAwCSMgbXVsdGlwbHkgZnAwIGJ5IDEwXjE2CisJbW92LmwJCTM2KzgoJWExKSwtKCVzcCkgIyBnZXQgMTBeOCBtYW50aXNzYQorCW1vdi5sCQkzNis0KCVhMSksLSglc3ApCisJbW92LmwJCSYweDNmZmYwMDAwLC0oJXNwKSAjIGZvcmNlIGV4cCB0byB6ZXJvCisJbW92LmwJCTQ4KzgoJWExKSwtKCVzcCkgIyBnZXQgMTBeMTYgbWFudGlzc2EKKwltb3YubAkJNDgrNCglYTEpLC0oJXNwKQorCW1vdi5sCQkmMHgzZmZmMDAwMCwtKCVzcCkjIGZvcmNlIGV4cCB0byB6ZXJvCisJZm11bC54CQkoJXNwKSssJWZwMAkjIG11bHRpcGx5IGZwMCBieSAxMF44CisJZm11bC54CQkoJXNwKSssJWZwMAkjIG11bHRpcGx5IGZwMCBieSAxMF4xNgorCWJyYS5iCQlBMTBfc3QKKworc2NfbXVsX2VycjoKKwlicmEuYgkJc2NfbXVsX2VycgorCitBOV9ub3JtOgorCXRzdC53CQklZDIJCSMgdGVzdCBmb3Igc21hbGwgZXhwIGNhc2UKKwliZXEuYgkJQTlfY29uCQkjIGlmIHplcm8sIGNvbnRpbnVlIGFzIG5vcm1hbAorCWZtdWwueAkJMzYoJWExKSwlZnAwCSMgbXVsdGlwbHkgZnAwIGJ5IDEwXjgKKwlmbXVsLngJCTQ4KCVhMSksJWZwMAkjIG11bHRpcGx5IGZwMCBieSAxMF4xNgorQTlfY29uOgorCWZtdWwueAkJJWZwMSwlZnAwCSMgY2FsY3VsYXRlIFggKiBTQ0FMRSAtPiBZIHRvIGZwMAorCisjIEExMC4gT3IgaW4gSU5FWC4KKyMgICAgICBJZiBJTkVYIGlzIHNldCwgcm91bmQgZXJyb3Igb2NjdXJyZWQuICBUaGlzIGlzIGNvbXBlbnNhdGVkCisjICAgICAgZm9yIGJ5ICdvci1pbmcnIGluIHRoZSBJTkVYMiBmbGFnIHRvIHRoZSBsc2Igb2YgWS4KKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCUlucHV0L091dHB1dAorIwlkMDogRlBDUiB3aXRoIFJaIG1vZGUvRlBTUiB3aXRoIElORVgyIGlzb2xhdGVkCisjCWQyOiB4L3gKKyMJZDM6IHgveAorIwlkNDogTEVOL1VuY2hhbmdlZAorIwlkNTogSUNUUjpMQU1CREEKKyMJZDY6IElMT0cvVW5jaGFuZ2VkCisjCWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKKyMJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9maW5hbCByZXN1bHQKKyMJYTE6IHB0ciB0byBQVEVOeHggYXJyYXkvVW5jaGFuZ2VkCisjCWEyOiB4L3B0ciB0byBGUF9TQ1IxKGE2KQorIwlmcDA6IFkvWSB3aXRoIGxzYiBhZGp1c3RlZAorIwlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKKyMJZnAyOiB4L3gKKworQTEwX3N0OgorCWZtb3YubAkJJWZwc3IsJWQwCSMgZ2V0IEZQU1IKKwlmbW92LngJCSVmcDAsRlBfU0NSMSglYTYpCSMgbW92ZSBZIHRvIG1lbW9yeQorCWxlYS5sCQlGUF9TQ1IxKCVhNiksJWEyCSMgbG9hZCBhMiB3aXRoIHB0ciB0byBGUF9TQ1IxCisJYnRzdAkJJjksJWQwCQkjIGNoZWNrIGlmIElORVgyIHNldAorCWJlcS5iCQlBMTFfc3QJCSMgaWYgY2xlYXIsIHNraXAgcmVzdAorCW9yLmwJCSYxLDgoJWEyKQkjIG9yIGluIDEgdG8gbHNiIG9mIG1hbnRpc3NhCisJZm1vdi54CQlGUF9TQ1IxKCVhNiksJWZwMAkjIHdyaXRlIGFkanVzdGVkIFkgYmFjayB0byBmcHUKKworCisjIEExMS4gUmVzdG9yZSBvcmlnaW5hbCBGUENSOyBzZXQgc2l6ZSBleHQuCisjICAgICAgUGVyZm9ybSBGSU5UIG9wZXJhdGlvbiBpbiB0aGUgdXNlcidzIHJvdW5kaW5nIG1vZGUuICBLZWVwCisjICAgICAgdGhlIHNpemUgdG8gZXh0ZW5kZWQuICBUaGUgc2ludGRvIGVudHJ5IHBvaW50IGluIHRoZSBzaW50CisjICAgICAgcm91dGluZSBleHBlY3RzIHRoZSBGUENSIHZhbHVlIHRvIGJlIGluIFVTRVJfRlBDUiBmb3IKKyMgICAgICBtb2RlIGFuZCBwcmVjaXNpb24uICBUaGUgb3JpZ2luYWwgRlBDUiBpcyBzYXZlZCBpbiBMX1NDUjEuCisKK0ExMV9zdDoKKwltb3YubAkJVVNFUl9GUENSKCVhNiksTF9TQ1IxKCVhNikJIyBzYXZlIGl0IGZvciBsYXRlcgorCWFuZC5sCQkmMHgwMDAwMDAzMCxVU0VSX0ZQQ1IoJWE2KQkjIHNldCBzaXplIHRvIGV4dCwKKyMJCQkJCTtibG9jayBleGNlcHRpb25zCisKKworIyBBMTIuIENhbGN1bGF0ZSBZSU5UID0gRklOVChZKSBhY2NvcmRpbmcgdG8gdXNlcidzIHJvdW5kaW5nIG1vZGUuCisjICAgICAgVGhlIEZQU1Agcm91dGluZSBzaW50ZDAgaXMgdXNlZC4gIFRoZSBvdXRwdXQgaXMgaW4gZnAwLgorIworIyBSZWdpc3RlciB1c2FnZToKKyMJSW5wdXQvT3V0cHV0CisjCWQwOiBGUFNSIHdpdGggQUlORVggY2xlYXJlZC9GUENSIHdpdGggc2l6ZSBzZXQgdG8gZXh0CisjCWQyOiB4L3gvc2NyYXRjaAorIwlkMzogeC94CisjCWQ0OiBMRU4vVW5jaGFuZ2VkCisjCWQ1OiBJQ1RSOkxBTUJEQS9VbmNoYW5nZWQKKyMJZDY6IElMT0cvVW5jaGFuZ2VkCisjCWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKKyMJYTA6IHB0ciBmb3Igb3JpZ2luYWwgb3BlcmFuZC9zcmMgcHRyIGZvciBzaW50ZG8KKyMJYTE6IHB0ciB0byBQVEVOeHggYXJyYXkvVW5jaGFuZ2VkCisjCWEyOiBwdHIgdG8gRlBfU0NSMShhNikvVW5jaGFuZ2VkCisjCWE2OiB0ZW1wIHBvaW50ZXIgdG8gRlBfU0NSMShhNikgLSBvcmlnIHZhbHVlIHNhdmVkIGFuZCByZXN0b3JlZAorIwlmcDA6IFkvWUlOVAorIwlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKKyMJZnAyOiB4L3gKKyMJRl9TQ1IxOngveAorIwlGX1NDUjI6WSBhZGp1c3RlZCBmb3IgaW5leC9ZIHdpdGggb3JpZ2luYWwgZXhwb25lbnQKKyMJTF9TQ1IxOngvb3JpZ2luYWwgVVNFUl9GUENSCisjCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBMTJfc3Q6CisJbW92bS5sCSYweGMwYzAsLSglc3ApCSMgc2F2ZSByZWdzIHVzZWQgYnkgc2ludGQwCSB7JWQwLSVkMS8lYTAtJWExfQorCW1vdi5sCUxfU0NSMSglYTYpLC0oJXNwKQorCW1vdi5sCUxfU0NSMiglYTYpLC0oJXNwKQorCisJbGVhLmwJCUZQX1NDUjEoJWE2KSwlYTAJIyBhMCBpcyBwdHIgdG8gRlBfU0NSMShhNikKKwlmbW92LngJCSVmcDAsKCVhMCkJIyBtb3ZlIFkgdG8gbWVtb3J5IGF0IEZQX1NDUjEoYTYpCisJdHN0LmwJCUxfU0NSMiglYTYpCSMgdGVzdCBzaWduIG9mIG9yaWdpbmFsIG9wZXJhbmQKKwliZ2UuYgkJZG9fZmludDEyCQkjIGlmIHBvcywgdXNlIFkKKwlvci5sCQkmMHg4MDAwMDAwMCwoJWEwKQkjIGlmIG5lZywgdXNlIC1ZCitkb19maW50MTI6CisJbW92LmwJVVNFUl9GUFNSKCVhNiksLSglc3ApCisjCWJzcglzaW50ZG8JCSMgc2ludCByb3V0aW5lIHJldHVybnMgaW50IGluIGZwMAorCisJZm1vdi5sCVVTRVJfRlBDUiglYTYpLCVmcGNyCisJZm1vdi5sCSYweDAsJWZwc3IJCQkjIGNsZWFyIHRoZSBBRVhDIGJpdHMhISEKKyMjCW1vdi5sCQlVU0VSX0ZQQ1IoJWE2KSwlZDAJIyBleHQgcHJlYy9rZWVwIHJuZCBtb2RlCisjIwlhbmRpLmwJCSYweDAwMDAwMDMwLCVkMAorIyMJZm1vdi5sCQklZDAsJWZwY3IKKwlmaW50LngJCUZQX1NDUjEoJWE2KSwlZnAwCSMgZG8gZmludCgpCisJZm1vdi5sCSVmcHNyLCVkMAorCW9yLncJJWQwLEZQU1JfRVhDRVBUKCVhNikKKyMjCWZtb3YubAkJJjB4MCwlZnBjcgorIyMJZm1vdi5sCQklZnBzciwlZDAJCSMgZG9uJ3Qga2VlcCBjY29kZXMKKyMjCW9yLncJCSVkMCxGUFNSX0VYQ0VQVCglYTYpCisKKwltb3YuYgkoJXNwKSxVU0VSX0ZQU1IoJWE2KQorCWFkZC5sCSY0LCVzcAorCisJbW92LmwJKCVzcCkrLExfU0NSMiglYTYpCisJbW92LmwJKCVzcCkrLExfU0NSMSglYTYpCisJbW92bS5sCSglc3ApKywmMHgzMDMJIyByZXN0b3JlIHJlZ3MgdXNlZCBieSBzaW50CSB7JWQwLSVkMS8lYTAtJWExfQorCisJbW92LmwJTF9TQ1IyKCVhNiksRlBfU0NSMSglYTYpCSMgcmVzdG9yZSBvcmlnaW5hbCBleHBvbmVudAorCW1vdi5sCUxfU0NSMSglYTYpLFVTRVJfRlBDUiglYTYpCSMgcmVzdG9yZSB1c2VyJ3MgRlBDUgorCisjIEExMy4gQ2hlY2sgZm9yIExFTiBkaWdpdHMuCisjICAgICAgSWYgdGhlIGludCBvcGVyYXRpb24gcmVzdWx0cyBpbiBtb3JlIHRoYW4gTEVOIGRpZ2l0cywKKyMgICAgICBvciBsZXNzIHRoYW4gTEVOIC0xIGRpZ2l0cywgYWRqdXN0IElMT0cgYW5kIHJlcGVhdCBmcm9tCisjICAgICAgQTYuICBUaGlzIHRlc3Qgb2NjdXJzIG9ubHkgb24gdGhlIGZpcnN0IHBhc3MuICBJZiB0aGUKKyMgICAgICByZXN1bHQgaXMgZXhhY3RseSAxMF5MRU4sIGRlY3JlbWVudCBJTE9HIGFuZCBkaXZpZGUKKyMgICAgICB0aGUgbWFudGlzc2EgYnkgMTAuICBUaGUgY2FsY3VsYXRpb24gb2YgMTBeTEVOIGNhbm5vdAorIyAgICAgIGJlIGluZXhhY3QsIHNpbmNlIGFsbCBwb3dlcnMgb2YgdGVuIHVwdG8gMTBeMjcgYXJlIGV4YWN0CisjICAgICAgaW4gZXh0ZW5kZWQgcHJlY2lzaW9uLCBzbyB0aGUgdXNlIG9mIGEgcHJldmlvdXMgcG93ZXItb2YtdGVuCisjICAgICAgdGFibGUgd2lsbCBpbnRyb2R1Y2Ugbm8gZXJyb3IuCisjCisjCisjIFJlZ2lzdGVyIHVzYWdlOgorIwlJbnB1dC9PdXRwdXQKKyMJZDA6IEZQQ1Igd2l0aCBzaXplIHNldCB0byBleHQvc2NyYXRjaCBmaW5hbCA9IDAKKyMJZDI6IHgveAorIwlkMzogeC9zY3JhdGNoIGZpbmFsID0geAorIwlkNDogTEVOL0xFTiBhZGp1c3RlZAorIwlkNTogSUNUUjpMQU1CREEvTEFNQkRBOklDVFIKKyMJZDY6IElMT0cvSUxPRyBhZGp1c3RlZAorIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCisjCWEwOiBwb2ludGVyIGludG8gbWVtb3J5IGZvciBwYWNrZWQgYmNkIHN0cmluZyBmb3JtYXRpb24KKyMJYTE6IHB0ciB0byBQVEVOeHggYXJyYXkvVW5jaGFuZ2VkCisjCWEyOiBwdHIgdG8gRlBfU0NSMShhNikvVW5jaGFuZ2VkCisjCWZwMDogaW50IHBvcnRpb24gb2YgWS9hYnMoWUlOVCkgYWRqdXN0ZWQKKyMJZnAxOiAxMF5JU0NBTEUvVW5jaGFuZ2VkCisjCWZwMjogeC8xMF5MRU4KKyMJRl9TQ1IxOngveAorIwlGX1NDUjI6WSB3aXRoIG9yaWdpbmFsIGV4cG9uZW50L1VuY2hhbmdlZAorIwlMX1NDUjE6b3JpZ2luYWwgVVNFUl9GUENSL1VuY2hhbmdlZAorIwlMX1NDUjI6Zmlyc3Qgd29yZCBvZiBYIHBhY2tlZC9VbmNoYW5nZWQKKworQTEzX3N0OgorCXN3YXAJCSVkNQkJIyBwdXQgSUNUUiBpbiBsb3dlciB3b3JkIG9mIGQ1CisJdHN0LncJCSVkNQkJIyBjaGVjayBpZiBJQ1RSID0gMAorCWJuZQkJbm90X3pyCQkjIGlmIG5vbi16ZXJvLCBnbyB0byBzZWNvbmQgdGVzdAorIworIyBDb21wdXRlIDEwXihMRU4tMSkKKyMKKwlmbW92LnMJCUZPTkUoJXBjKSwlZnAyCSMgaW5pdCBmcDIgdG8gMS4wCisJbW92LmwJCSVkNCwlZDAJCSMgcHV0IExFTiBpbiBkMAorCXN1YnEubAkJJjEsJWQwCQkjIGQwID0gTEVOIC0xCisJY2xyLmwJCSVkMwkJIyBjbHIgdGFibGUgaW5kZXgKK2xfbG9vcDoKKwlsc3IubAkJJjEsJWQwCQkjIHNoaWZ0IG5leHQgYml0IGludG8gY2FycnkKKwliY2MuYgkJbF9uZXh0CQkjIGlmIHplcm8sIHNraXAgdGhlIG11bAorCWZtdWwueAkJKCVhMSwlZDMpLCVmcDIJIyBtdWwgYnkgMTAqKihkM19iaXRfbm8pCitsX25leHQ6CisJYWRkLmwJCSYxMiwlZDMJCSMgaW5jIGQzIHRvIG5leHQgcHdydGVuIHRhYmxlIGVudHJ5CisJdHN0LmwJCSVkMAkJIyB0ZXN0IGlmIExFTiBpcyB6ZXJvCisJYm5lLmIJCWxfbG9vcAkJIyBpZiBub3QsIGxvb3AKKyMKKyMgMTBeTEVOLTEgaXMgY29tcHV0ZWQgZm9yIHRoaXMgdGVzdCBhbmQgQTE0LiAgSWYgdGhlIGlucHV0IHdhcworIyBkZW5vcm1hbGl6ZWQsIGNoZWNrIG9ubHkgdGhlIGNhc2UgaW4gd2hpY2ggWUlOVCA+IDEwXkxFTi4KKyMKKwl0c3QuYgkJQklOREVDX0ZMRyglYTYpCSMgY2hlY2sgaWYgaW5wdXQgd2FzIG5vcm0KKwliZXEuYgkJQTEzX2NvbgkJIyBpZiBub3JtLCBjb250aW51ZSB3aXRoIGNoZWNraW5nCisJZmFicy54CQklZnAwCQkjIHRha2UgYWJzIG9mIFlJTlQKKwlicmEJCXRlc3RfMgorIworIyBDb21wYXJlIGFicyhZSU5UKSB0byAxMF4oTEVOLTEpIGFuZCAxMF5MRU4KKyMKK0ExM19jb246CisJZmFicy54CQklZnAwCQkjIHRha2UgYWJzIG9mIFlJTlQKKwlmY21wLngJCSVmcDAsJWZwMgkjIGNvbXBhcmUgYWJzKFlJTlQpIHdpdGggMTBeKExFTi0xKQorCWZiZ2UudwkJdGVzdF8yCQkjIGlmIGdyZWF0ZXIsIGRvIG5leHQgdGVzdAorCXN1YnEubAkJJjEsJWQ2CQkjIHN1YnRyYWN0IDEgZnJvbSBJTE9HCisJbW92LncJCSYxLCVkNQkJIyBzZXQgSUNUUgorCWZtb3YubAkJJnJtX21vZGUqMHgxMCwlZnBjcgkjIHNldCBybW9kZSB0byBSTQorCWZtdWwucwkJRlRFTiglcGMpLCVmcDIJIyBjb21wdXRlIDEwXkxFTgorCWJyYS53CQlBNl9zdHIJCSMgcmV0dXJuIHRvIEE2IGFuZCByZWNvbXB1dGUgWUlOVAordGVzdF8yOgorCWZtdWwucwkJRlRFTiglcGMpLCVmcDIJIyBjb21wdXRlIDEwXkxFTgorCWZjbXAueAkJJWZwMCwlZnAyCSMgY29tcGFyZSBhYnMoWUlOVCkgd2l0aCAxMF5MRU4KKwlmYmx0LncJCUExNF9zdAkJIyBpZiBsZXNzLCBhbGwgaXMgb2ssIGdvIHRvIEExNAorCWZiZ3QudwkJZml4X2V4CQkjIGlmIGdyZWF0ZXIsIGZpeCBhbmQgcmVkbworCWZkaXYucwkJRlRFTiglcGMpLCVmcDAJIyBpZiBlcXVhbCwgZGl2aWRlIGJ5IDEwCisJYWRkcS5sCQkmMSwlZDYJCSMgYW5kIGluYyBJTE9HCisJYnJhLmIJCUExNF9zdAkJIyBhbmQgY29udGludWUgZWxzZXdoZXJlCitmaXhfZXg6CisJYWRkcS5sCQkmMSwlZDYJCSMgaW5jcmVtZW50IElMT0cgYnkgMQorCW1vdi53CQkmMSwlZDUJCSMgc2V0IElDVFIKKwlmbW92LmwJCSZybV9tb2RlKjB4MTAsJWZwY3IJIyBzZXQgcm1vZGUgdG8gUk0KKwlicmEudwkJQTZfc3RyCQkjIHJldHVybiB0byBBNiBhbmQgcmVjb21wdXRlIFlJTlQKKyMKKyMgU2luY2UgSUNUUiA8PiAwLCB3ZSBoYXZlIGFscmVhZHkgYmVlbiB0aHJvdWdoIG9uZSBhZGp1c3RtZW50LAorIyBhbmQgc2hvdWxkbid0IGhhdmUgYW5vdGhlcjsgdGhpcyBpcyB0byBjaGVjayBpZiBhYnMoWUlOVCkgPSAxMF5MRU4KKyMgMTBeTEVOIGlzIGFnYWluIGNvbXB1dGVkIHVzaW5nIHdoYXRldmVyIHRhYmxlIGlzIGluIGExIHNpbmNlIHRoZQorIyB2YWx1ZSBjYWxjdWxhdGVkIGNhbm5vdCBiZSBpbmV4YWN0LgorIworbm90X3pyOgorCWZtb3YucwkJRk9ORSglcGMpLCVmcDIJIyBpbml0IGZwMiB0byAxLjAKKwltb3YubAkJJWQ0LCVkMAkJIyBwdXQgTEVOIGluIGQwCisJY2xyLmwJCSVkMwkJIyBjbHIgdGFibGUgaW5kZXgKK3pfbG9vcDoKKwlsc3IubAkJJjEsJWQwCQkjIHNoaWZ0IG5leHQgYml0IGludG8gY2FycnkKKwliY2MuYgkJel9uZXh0CQkjIGlmIHplcm8sIHNraXAgdGhlIG11bAorCWZtdWwueAkJKCVhMSwlZDMpLCVmcDIJIyBtdWwgYnkgMTAqKihkM19iaXRfbm8pCit6X25leHQ6CisJYWRkLmwJCSYxMiwlZDMJCSMgaW5jIGQzIHRvIG5leHQgcHdydGVuIHRhYmxlIGVudHJ5CisJdHN0LmwJCSVkMAkJIyB0ZXN0IGlmIExFTiBpcyB6ZXJvCisJYm5lLmIJCXpfbG9vcAkJIyBpZiBub3QsIGxvb3AKKwlmYWJzLngJCSVmcDAJCSMgZ2V0IGFicyhZSU5UKQorCWZjbXAueAkJJWZwMCwlZnAyCSMgY2hlY2sgaWYgYWJzKFlJTlQpID0gMTBeTEVOCisJZmJuZXEudwkJQTE0X3N0CQkjIGlmIG5vdCwgc2tpcCB0aGlzCisJZmRpdi5zCQlGVEVOKCVwYyksJWZwMAkjIGRpdmlkZSBhYnMoWUlOVCkgYnkgMTAKKwlhZGRxLmwJCSYxLCVkNgkJIyBhbmQgaW5jIElMT0cgYnkgMQorCWFkZHEubAkJJjEsJWQ0CQkjIGFuZCBpbmMgTEVOCisJZm11bC5zCQlGVEVOKCVwYyksJWZwMgkjIGlmIExFTisrLCB0aGUgZ2V0IDEwXl5MRU4KKworIyBBMTQuIENvbnZlcnQgdGhlIG1hbnRpc3NhIHRvIGJjZC4KKyMgICAgICBUaGUgYmluc3RyIHJvdXRpbmUgaXMgdXNlZCB0byBjb252ZXJ0IHRoZSBMRU4gZGlnaXQKKyMgICAgICBtYW50aXNzYSB0byBiY2QgaW4gbWVtb3J5LiAgVGhlIGlucHV0IHRvIGJpbnN0ciBpcworIyAgICAgIHRvIGJlIGEgZnJhY3Rpb247IGkuZS4gKG1hbnRpc3NhKS8xMF5MRU4gYW5kIGFkanVzdGVkCisjICAgICAgc3VjaCB0aGF0IHRoZSBkZWNpbWFsIHBvaW50IGlzIHRvIHRoZSBsZWZ0IG9mIGJpdCA2My4KKyMgICAgICBUaGUgYmNkIGRpZ2l0cyBhcmUgc3RvcmVkIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uIGluCisjICAgICAgdGhlIGZpbmFsIHN0cmluZyBhcmVhIGluIG1lbW9yeS4KKyMKKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCUlucHV0L091dHB1dAorIwlkMDogeC9MRU4gY2FsbCB0byBiaW5zdHIgLSBmaW5hbCBpcyAwCisjCWQxOiB4LzAKKyMJZDI6IHgvbXMgMzItYml0cyBvZiBtYW50IG9mIGFicyhZSU5UKQorIwlkMzogeC9scyAzMi1iaXRzIG9mIG1hbnQgb2YgYWJzKFlJTlQpCisjCWQ0OiBMRU4vVW5jaGFuZ2VkCisjCWQ1OiBJQ1RSOkxBTUJEQS9MQU1CREE6SUNUUgorIwlkNjogSUxPRworIwlkNzogay1mYWN0b3IvVW5jaGFuZ2VkCisjCWEwOiBwb2ludGVyIGludG8gbWVtb3J5IGZvciBwYWNrZWQgYmNkIHN0cmluZyBmb3JtYXRpb24KKyMJICAgIC9wdHIgdG8gZmlyc3QgbWFudGlzc2EgYnl0ZSBpbiByZXN1bHQgc3RyaW5nCisjCWExOiBwdHIgdG8gUFRFTnh4IGFycmF5L1VuY2hhbmdlZAorIwlhMjogcHRyIHRvIEZQX1NDUjEoYTYpL1VuY2hhbmdlZAorIwlmcDA6IGludCBwb3J0aW9uIG9mIFkvYWJzKFlJTlQpIGFkanVzdGVkCisjCWZwMTogMTBeSVNDQUxFL1VuY2hhbmdlZAorIwlmcDI6IDEwXkxFTi9VbmNoYW5nZWQKKyMJRl9TQ1IxOngvV29yayBhcmVhIGZvciBmaW5hbCByZXN1bHQKKyMJRl9TQ1IyOlkgd2l0aCBvcmlnaW5hbCBleHBvbmVudC9VbmNoYW5nZWQKKyMJTF9TQ1IxOm9yaWdpbmFsIFVTRVJfRlBDUi9VbmNoYW5nZWQKKyMJTF9TQ1IyOmZpcnN0IHdvcmQgb2YgWCBwYWNrZWQvVW5jaGFuZ2VkCisKK0ExNF9zdDoKKwlmbW92LmwJCSZyel9tb2RlKjB4MTAsJWZwY3IJIyBmb3JjZSByeiBmb3IgY29udmVyc2lvbgorCWZkaXYueAkJJWZwMiwlZnAwCSMgZGl2aWRlIGFicyhZSU5UKSBieSAxMF5MRU4KKwlsZWEubAkJRlBfU0NSMCglYTYpLCVhMAorCWZtb3YueAkJJWZwMCwoJWEwKQkjIG1vdmUgYWJzKFlJTlQpLzEwXkxFTiB0byBtZW1vcnkKKwltb3YubAkJNCglYTApLCVkMgkjIG1vdmUgMm5kIHdvcmQgb2YgRlBfUkVTIHRvIGQyCisJbW92LmwJCTgoJWEwKSwlZDMJIyBtb3ZlIDNyZCB3b3JkIG9mIEZQX1JFUyB0byBkMworCWNsci5sCQk0KCVhMCkJCSMgemVybyB3b3JkIDIgb2YgRlBfUkVTCisJY2xyLmwJCTgoJWEwKQkJIyB6ZXJvIHdvcmQgMyBvZiBGUF9SRVMKKwltb3YubAkJKCVhMCksJWQwCSMgbW92ZSBleHBvbmVudCB0byBkMAorCXN3YXAJCSVkMAkJIyBwdXQgZXhwb25lbnQgaW4gbG93ZXIgd29yZAorCWJlcS5iCQlub19zZnQJCSMgaWYgemVybywgZG9uJ3Qgc2hpZnQKKwlzdWIubAkJJjB4M2ZmZCwlZDAJIyBzdWIgYmlhcyBsZXNzIDIgdG8gbWFrZSBmcmFjdAorCXRzdC5sCQklZDAJCSMgY2hlY2sgaWYgPiAxCisJYmd0LmIJCW5vX3NmdAkJIyBpZiBzbywgZG9uJ3Qgc2hpZnQKKwluZWcubAkJJWQwCQkjIG1ha2UgZXhwIHBvc2l0aXZlCittX2xvb3A6CisJbHNyLmwJCSYxLCVkMgkJIyBzaGlmdCBkMjpkMyByaWdodCwgYWRkIDBzCisJcm94ci5sCQkmMSwlZDMJCSMgdGhlIG51bWJlciBvZiBwbGFjZXMKKwlkYmYudwkJJWQwLG1fbG9vcAkjIGdpdmVuIGluIGQwCitub19zZnQ6CisJdHN0LmwJCSVkMgkJIyBjaGVjayBmb3IgbWFudGlzc2Egb2YgemVybworCWJuZS5iCQlub196cgkJIyBpZiBub3QsIGdvIG9uCisJdHN0LmwJCSVkMwkJIyBjb250aW51ZSB6ZXJvIGNoZWNrCisJYmVxLmIJCXplcl9tCQkjIGlmIHplcm8sIGdvIGRpcmVjdGx5IHRvIGJpbnN0cgorbm9fenI6CisJY2xyLmwJCSVkMQkJIyBwdXQgemVybyBpbiBkMSBmb3IgYWRkeAorCWFkZC5sCQkmMHgwMDAwMDA4MCwlZDMJIyBpbmMgYXQgYml0IDcKKwlhZGR4LmwJCSVkMSwlZDIJCSMgY29udGludWUgaW5jCisJYW5kLmwJCSYweGZmZmZmZjgwLCVkMwkjIHN0cmlwIG9mZiBsc2Igbm90IHVzZWQgYnkgODgyCit6ZXJfbToKKwltb3YubAkJJWQ0LCVkMAkJIyBwdXQgTEVOIGluIGQwIGZvciBiaW5zdHIgY2FsbAorCWFkZHEubAkJJjMsJWEwCQkjIGEwIHBvaW50cyB0byBNMTYgYnl0ZSBpbiByZXN1bHQKKwlic3IJCWJpbnN0cgkJIyBjYWxsIGJpbnN0ciB0byBjb252ZXJ0IG1hbnQKKworCisjIEExNS4gQ29udmVydCB0aGUgZXhwb25lbnQgdG8gYmNkLgorIyAgICAgIEFzIGluIEExNCBhYm92ZSwgdGhlIGV4cCBpcyBjb252ZXJ0ZWQgdG8gYmNkIGFuZCB0aGUKKyMgICAgICBkaWdpdHMgYXJlIHN0b3JlZCBpbiB0aGUgZmluYWwgc3RyaW5nLgorIworIyAgICAgIERpZ2l0cyBhcmUgc3RvcmVkIGluIExfU0NSMShhNikgb24gcmV0dXJuIGZyb20gQklOREVDIGFzOgorIworIwkgMzIgICAgICAgICAgICAgICAxNiAxNSAgICAgICAgICAgICAgICAwCisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCXwgIDAgfCBlMyB8IGUyIHwgZTEgfCBlNCB8ICBYIHwgIFggfCAgWCB8CisjCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIEFuZCBhcmUgbW92ZWQgaW50byB0aGVpciBwcm9wZXIgcGxhY2VzIGluIEZQX1NDUjAuICBJZiBkaWdpdCBlNAorIyBpcyBub24temVybywgT1BFUlIgaXMgc2lnbmFsZWQuICBJbiBhbGwgY2FzZXMsIGFsbCA0IGRpZ2l0cyBhcmUKKyMgd3JpdHRlbiBhcyBzcGVjaWZpZWQgaW4gdGhlIDg4MS84ODIgbWFudWFsIGZvciBwYWNrZWQgZGVjaW1hbC4KKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCUlucHV0L091dHB1dAorIwlkMDogeC9MRU4gY2FsbCB0byBiaW5zdHIgLSBmaW5hbCBpcyAwCisjCWQxOiB4L3NjcmF0Y2ggKDApO3NoaWZ0IGNvdW50IGZvciBmaW5hbCBleHBvbmVudCBwYWNraW5nCisjCWQyOiB4L21zIDMyLWJpdHMgb2YgZXhwIGZyYWN0aW9uL3NjcmF0Y2gKKyMJZDM6IHgvbHMgMzItYml0cyBvZiBleHAgZnJhY3Rpb24KKyMJZDQ6IExFTi9VbmNoYW5nZWQKKyMJZDU6IElDVFI6TEFNQkRBL0xBTUJEQTpJQ1RSCisjCWQ2OiBJTE9HCisjCWQ3OiBrLWZhY3Rvci9VbmNoYW5nZWQKKyMJYTA6IHB0ciB0byByZXN1bHQgc3RyaW5nL3B0ciB0byBMX1NDUjEoYTYpCisjCWExOiBwdHIgdG8gUFRFTnh4IGFycmF5L1VuY2hhbmdlZAorIwlhMjogcHRyIHRvIEZQX1NDUjEoYTYpL1VuY2hhbmdlZAorIwlmcDA6IGFicyhZSU5UKSBhZGp1c3RlZC9mbG9hdChJTE9HKQorIwlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKKyMJZnAyOiAxMF5MRU4vVW5jaGFuZ2VkCisjCUZfU0NSMTpXb3JrIGFyZWEgZm9yIGZpbmFsIHJlc3VsdC9CQ0QgcmVzdWx0CisjCUZfU0NSMjpZIHdpdGggb3JpZ2luYWwgZXhwb25lbnQvSUxPRy8xMF40CisjCUxfU0NSMTpvcmlnaW5hbCBVU0VSX0ZQQ1IvRXhwb25lbnQgZGlnaXRzIG9uIHJldHVybiBmcm9tIGJpbnN0cgorIwlMX1NDUjI6Zmlyc3Qgd29yZCBvZiBYIHBhY2tlZC9VbmNoYW5nZWQKKworQTE1X3N0OgorCXRzdC5iCQlCSU5ERUNfRkxHKCVhNikJIyBjaGVjayBmb3IgZGVub3JtCisJYmVxLmIJCW5vdF9kZW5vcm0KKwlmdGVzdC54CQklZnAwCQkjIHRlc3QgZm9yIHplcm8KKwlmYmVxLncJCWRlbl96ZXJvCSMgaWYgemVybywgdXNlIGstZmFjdG9yIG9yIDQ5MzMKKwlmbW92LmwJCSVkNiwlZnAwCSMgZmxvYXQgSUxPRworCWZhYnMueAkJJWZwMAkJIyBnZXQgYWJzIG9mIElMT0cKKwlicmEuYgkJY29udnJ0CitkZW5femVybzoKKwl0c3QubAkJJWQ3CQkjIGNoZWNrIHNpZ24gb2YgdGhlIGstZmFjdG9yCisJYmx0LmIJCXVzZV9pbG9nCSMgaWYgbmVnYXRpdmUsIHVzZSBJTE9HCisJZm1vdi5zCQlGNDkzMyglcGMpLCVmcDAJIyBmb3JjZSBleHBvbmVudCB0byA0OTMzCisJYnJhLmIJCWNvbnZydAkJIyBkbyBpdAordXNlX2lsb2c6CisJZm1vdi5sCQklZDYsJWZwMAkjIGZsb2F0IElMT0cKKwlmYWJzLngJCSVmcDAJCSMgZ2V0IGFicyBvZiBJTE9HCisJYnJhLmIJCWNvbnZydAorbm90X2Rlbm9ybToKKwlmdGVzdC54CQklZnAwCQkjIHRlc3QgZm9yIHplcm8KKwlmYm5lcS53CQlub3RfemVybwkjIGlmIHplcm8sIGZvcmNlIGV4cG9uZW50CisJZm1vdi5zCQlGT05FKCVwYyksJWZwMAkjIGZvcmNlIGV4cG9uZW50IHRvIDEKKwlicmEuYgkJY29udnJ0CQkjIGRvIGl0Citub3RfemVybzoKKwlmbW92LmwJCSVkNiwlZnAwCSMgZmxvYXQgSUxPRworCWZhYnMueAkJJWZwMAkJIyBnZXQgYWJzIG9mIElMT0cKK2NvbnZydDoKKwlmZGl2LngJCTI0KCVhMSksJWZwMAkjIGNvbXB1dGUgSUxPRy8xMF40CisJZm1vdi54CQklZnAwLEZQX1NDUjEoJWE2KQkjIHN0b3JlIGZwMCBpbiBtZW1vcnkKKwltb3YubAkJNCglYTIpLCVkMgkjIG1vdmUgd29yZCAyIHRvIGQyCisJbW92LmwJCTgoJWEyKSwlZDMJIyBtb3ZlIHdvcmQgMyB0byBkMworCW1vdi53CQkoJWEyKSwlZDAJIyBtb3ZlIGV4cCB0byBkMAorCWJlcS5iCQl4X2xvb3BfZmluCSMgaWYgemVybywgc2tpcCB0aGUgc2hpZnQKKwlzdWIudwkJJjB4M2ZmZCwlZDAJIyBzdWJ0cmFjdCBvZmYgYmlhcworCW5lZy53CQklZDAJCSMgbWFrZSBleHAgcG9zaXRpdmUKK3hfbG9vcDoKKwlsc3IubAkJJjEsJWQyCQkjIHNoaWZ0IGQyOmQzIHJpZ2h0CisJcm94ci5sCQkmMSwlZDMJCSMgdGhlIG51bWJlciBvZiBwbGFjZXMKKwlkYmYudwkJJWQwLHhfbG9vcAkjIGdpdmVuIGluIGQwCit4X2xvb3BfZmluOgorCWNsci5sCQklZDEJCSMgcHV0IHplcm8gaW4gZDEgZm9yIGFkZHgKKwlhZGQubAkJJjB4MDAwMDAwODAsJWQzCSMgaW5jIGF0IGJpdCA2CisJYWRkeC5sCQklZDEsJWQyCQkjIGNvbnRpbnVlIGluYworCWFuZC5sCQkmMHhmZmZmZmY4MCwlZDMJIyBzdHJpcCBvZmYgbHNiIG5vdCB1c2VkIGJ5IDg4MgorCW1vdi5sCQkmNCwlZDAJCSMgcHV0IDQgaW4gZDAgZm9yIGJpbnN0ciBjYWxsCisJbGVhLmwJCUxfU0NSMSglYTYpLCVhMAkjIGEwIGlzIHB0ciB0byBMX1NDUjEgZm9yIGV4cCBkaWdpdHMKKwlic3IJCWJpbnN0cgkJIyBjYWxsIGJpbnN0ciB0byBjb252ZXJ0IGV4cAorCW1vdi5sCQlMX1NDUjEoJWE2KSwlZDAJIyBsb2FkIExfU0NSMSBsd29yZCB0byBkMAorCW1vdi5sCQkmMTIsJWQxCQkjIHVzZSBkMSBmb3Igc2hpZnQgY291bnQKKwlsc3IubAkJJWQxLCVkMAkJIyBzaGlmdCBkMCByaWdodCBieSAxMgorCWJmaW5zCQklZDAsRlBfU0NSMCglYTYpeyY0OiYxMn0JIyBwdXQgZTM6ZTI6ZTEgaW4gRlBfU0NSMAorCWxzci5sCQklZDEsJWQwCQkjIHNoaWZ0IGQwIHJpZ2h0IGJ5IDEyCisJYmZpbnMJCSVkMCxGUF9TQ1IwKCVhNil7JjE2OiY0fQkjIHB1dCBlNCBpbiBGUF9TQ1IwCisJdHN0LmIJCSVkMAkJIyBjaGVjayBpZiBlNCBpcyB6ZXJvCisJYmVxLmIJCUExNl9zdAkJIyBpZiB6ZXJvLCBza2lwIHJlc3QKKwlvci5sCQkmb3Bhb3BfbWFzayxVU0VSX0ZQU1IoJWE2KQkjIHNldCBPUEVSUiAmIEFJT1AgaW4gVVNFUl9GUFNSCisKKworIyBBMTYuIFdyaXRlIHNpZ24gYml0cyB0byBmaW5hbCBzdHJpbmcuCisjCSAgIFNpZ21hIGlzIGJpdCAzMSBvZiBpbml0aWFsIHZhbHVlOyBSSE8gaXMgYml0IDMxIG9mIGQ2IChJTE9HKS4KKyMKKyMgUmVnaXN0ZXIgdXNhZ2U6CisjCUlucHV0L091dHB1dAorIwlkMDogeC9zY3JhdGNoIC0gZmluYWwgaXMgeAorIwlkMjogeC94CisjCWQzOiB4L3gKKyMJZDQ6IExFTi9VbmNoYW5nZWQKKyMJZDU6IElDVFI6TEFNQkRBL0xBTUJEQTpJQ1RSCisjCWQ2OiBJTE9HL0lMT0cgYWRqdXN0ZWQKKyMJZDc6IGstZmFjdG9yL1VuY2hhbmdlZAorIwlhMDogcHRyIHRvIExfU0NSMShhNikvVW5jaGFuZ2VkCisjCWExOiBwdHIgdG8gUFRFTnh4IGFycmF5L1VuY2hhbmdlZAorIwlhMjogcHRyIHRvIEZQX1NDUjEoYTYpL1VuY2hhbmdlZAorIwlmcDA6IGZsb2F0KElMT0cpL1VuY2hhbmdlZAorIwlmcDE6IDEwXklTQ0FMRS9VbmNoYW5nZWQKKyMJZnAyOiAxMF5MRU4vVW5jaGFuZ2VkCisjCUZfU0NSMTpCQ0QgcmVzdWx0IHdpdGggY29ycmVjdCBzaWducworIwlGX1NDUjI6SUxPRy8xMF40CisjCUxfU0NSMTpFeHBvbmVudCBkaWdpdHMgb24gcmV0dXJuIGZyb20gYmluc3RyCisjCUxfU0NSMjpmaXJzdCB3b3JkIG9mIFggcGFja2VkL1VuY2hhbmdlZAorCitBMTZfc3Q6CisJY2xyLmwJCSVkMAkJIyBjbHIgZDAgZm9yIGNvbGxlY3Rpb24gb2Ygc2lnbnMKKwlhbmQuYgkJJjB4MGYsRlBfU0NSMCglYTYpCSMgY2xlYXIgZmlyc3QgbmliYmxlIG9mIEZQX1NDUjAKKwl0c3QubAkJTF9TQ1IyKCVhNikJIyBjaGVjayBzaWduIG9mIG9yaWdpbmFsIG1hbnRpc3NhCisJYmdlLmIJCW1hbnRfcAkJIyBpZiBwb3MsIGRvbid0IHNldCBTTQorCW1vdi5sCQkmMiwlZDAJCSMgbW92ZSAyIGluIHRvIGQwIGZvciBTTQorbWFudF9wOgorCXRzdC5sCQklZDYJCSMgY2hlY2sgc2lnbiBvZiBJTE9HCisJYmdlLmIJCXdyX3NnbgkJIyBpZiBwb3MsIGRvbid0IHNldCBTRQorCWFkZHEubAkJJjEsJWQwCQkjIHNldCBiaXQgMCBpbiBkMCBmb3IgU0UKK3dyX3NnbjoKKwliZmlucwkJJWQwLEZQX1NDUjAoJWE2KXsmMDomMn0JIyBpbnNlcnQgU00gYW5kIFNFIGludG8gRlBfU0NSMAorCisjIENsZWFuIHVwIGFuZCByZXN0b3JlIGFsbCByZWdpc3RlcnMgdXNlZC4KKworCWZtb3YubAkJJjAsJWZwc3IJIyBjbGVhciBwb3NzaWJsZSBpbmV4Mi9haW5leCBiaXRzCisJZm1vdm0ueAkJKCVzcCkrLCYweGUwCSMgIHslZnAwLSVmcDJ9CisJbW92bS5sCQkoJXNwKSssJjB4NGZjCSMgIHslZDItJWQ3LyVhMn0KKwlydHMKKworCWdsb2JhbAkJUFRFTlJOCitQVEVOUk46CisJbG9uZwkJMHg0MDAyMDAwMCwweEEwMDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDEKKwlsb25nCQkweDQwMDUwMDAwLDB4QzgwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMgorCWxvbmcJCTB4NDAwQzAwMDAsMHg5QzQwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiA0CisJbG9uZwkJMHg0MDE5MDAwMCwweEJFQkMyMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDgKKwlsb25nCQkweDQwMzQwMDAwLDB4OEUxQkM5QkYsMHgwNDAwMDAwMAkjIDEwIF4gMTYKKwlsb25nCQkweDQwNjkwMDAwLDB4OURDNUFEQTgsMHgyQjcwQjU5RQkjIDEwIF4gMzIKKwlsb25nCQkweDQwRDMwMDAwLDB4QzI3ODFGNDksMHhGRkNGQTZENQkjIDEwIF4gNjQKKwlsb25nCQkweDQxQTgwMDAwLDB4OTNCQTQ3QzksMHg4MEU5OENFMAkjIDEwIF4gMTI4CisJbG9uZwkJMHg0MzUxMDAwMCwweEFBN0VFQkZCLDB4OURGOURFOEUJIyAxMCBeIDI1NgorCWxvbmcJCTB4NDZBMzAwMDAsMHhFMzE5QTBBRSwweEE2MEU5MUM3CSMgMTAgXiA1MTIKKwlsb25nCQkweDRENDgwMDAwLDB4Qzk3Njc1ODYsMHg4MTc1MEMxNwkjIDEwIF4gMTAyNAorCWxvbmcJCTB4NUE5MjAwMDAsMHg5RThCM0I1RCwweEM1M0Q1REU1CSMgMTAgXiAyMDQ4CisJbG9uZwkJMHg3NTI1MDAwMCwweEM0NjA1MjAyLDB4OEEyMDk3OUIJIyAxMCBeIDQwOTYKKworCWdsb2JhbAkJUFRFTlJQCitQVEVOUlA6CisJbG9uZwkJMHg0MDAyMDAwMCwweEEwMDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDEKKwlsb25nCQkweDQwMDUwMDAwLDB4QzgwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMgorCWxvbmcJCTB4NDAwQzAwMDAsMHg5QzQwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiA0CisJbG9uZwkJMHg0MDE5MDAwMCwweEJFQkMyMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDgKKwlsb25nCQkweDQwMzQwMDAwLDB4OEUxQkM5QkYsMHgwNDAwMDAwMAkjIDEwIF4gMTYKKwlsb25nCQkweDQwNjkwMDAwLDB4OURDNUFEQTgsMHgyQjcwQjU5RQkjIDEwIF4gMzIKKwlsb25nCQkweDQwRDMwMDAwLDB4QzI3ODFGNDksMHhGRkNGQTZENgkjIDEwIF4gNjQKKwlsb25nCQkweDQxQTgwMDAwLDB4OTNCQTQ3QzksMHg4MEU5OENFMAkjIDEwIF4gMTI4CisJbG9uZwkJMHg0MzUxMDAwMCwweEFBN0VFQkZCLDB4OURGOURFOEUJIyAxMCBeIDI1NgorCWxvbmcJCTB4NDZBMzAwMDAsMHhFMzE5QTBBRSwweEE2MEU5MUM3CSMgMTAgXiA1MTIKKwlsb25nCQkweDRENDgwMDAwLDB4Qzk3Njc1ODYsMHg4MTc1MEMxOAkjIDEwIF4gMTAyNAorCWxvbmcJCTB4NUE5MjAwMDAsMHg5RThCM0I1RCwweEM1M0Q1REU1CSMgMTAgXiAyMDQ4CisJbG9uZwkJMHg3NTI1MDAwMCwweEM0NjA1MjAyLDB4OEEyMDk3OUIJIyAxMCBeIDQwOTYKKworCWdsb2JhbAkJUFRFTlJNCitQVEVOUk06CisJbG9uZwkJMHg0MDAyMDAwMCwweEEwMDAwMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDEKKwlsb25nCQkweDQwMDUwMDAwLDB4QzgwMDAwMDAsMHgwMDAwMDAwMAkjIDEwIF4gMgorCWxvbmcJCTB4NDAwQzAwMDAsMHg5QzQwMDAwMCwweDAwMDAwMDAwCSMgMTAgXiA0CisJbG9uZwkJMHg0MDE5MDAwMCwweEJFQkMyMDAwLDB4MDAwMDAwMDAJIyAxMCBeIDgKKwlsb25nCQkweDQwMzQwMDAwLDB4OEUxQkM5QkYsMHgwNDAwMDAwMAkjIDEwIF4gMTYKKwlsb25nCQkweDQwNjkwMDAwLDB4OURDNUFEQTgsMHgyQjcwQjU5RAkjIDEwIF4gMzIKKwlsb25nCQkweDQwRDMwMDAwLDB4QzI3ODFGNDksMHhGRkNGQTZENQkjIDEwIF4gNjQKKwlsb25nCQkweDQxQTgwMDAwLDB4OTNCQTQ3QzksMHg4MEU5OENERgkjIDEwIF4gMTI4CisJbG9uZwkJMHg0MzUxMDAwMCwweEFBN0VFQkZCLDB4OURGOURFOEQJIyAxMCBeIDI1NgorCWxvbmcJCTB4NDZBMzAwMDAsMHhFMzE5QTBBRSwweEE2MEU5MUM2CSMgMTAgXiA1MTIKKwlsb25nCQkweDRENDgwMDAwLDB4Qzk3Njc1ODYsMHg4MTc1MEMxNwkjIDEwIF4gMTAyNAorCWxvbmcJCTB4NUE5MjAwMDAsMHg5RThCM0I1RCwweEM1M0Q1REU0CSMgMTAgXiAyMDQ4CisJbG9uZwkJMHg3NTI1MDAwMCwweEM0NjA1MjAyLDB4OEEyMDk3OUEJIyAxMCBeIDQwOTYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBiaW5zdHIoKTogQ29udmVydHMgYSA2NC1iaXQgYmluYXJ5IGludGVnZXIgdG8gYmNkLgkJCSMKKyMJCQkJCQkJCQkjCisjIElOUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAjCisjCWQyOmQzID0gNjQtYml0IGJpbmFyeSBpbnRlZ2VyCQkJCQkjCisjCWQwICAgID0gZGVzaXJlZCBsZW5ndGggKExFTikJCQkJCSMKKyMJYTAgICAgPSBwb2ludGVyIHRvIHN0YXJ0IGluIG1lbW9yeSBmb3IgYmNkIGNoYXJhY3RlcnMJCSMKKyMJCShUaGlzIHBvaW50ZXIgbXVzdCBwb2ludCB0byBieXRlIDQgb2YgdGhlIGZpcnN0CQkjCisjCQkgbHdvcmQgb2YgdGhlIHBhY2tlZCBkZWNpbWFsIG1lbW9yeSBzdHJpbmcuKQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICMKKyMJYTAgPSBwb2ludGVyIHRvIExFTiBiY2QgZGlnaXRzIHJlcHJlc2VudGluZyB0aGUgNjQtYml0IGludGVnZXIuCSMKKyMJCQkJCQkJCQkjCisjIEFMR09SSVRITSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCVRoZSA2NC1iaXQgYmluYXJ5IGlzIGFzc3VtZWQgdG8gaGF2ZSBhIGRlY2ltYWwgcG9pbnQgYmVmb3JlCSMKKyMJYml0IDYzLiAgVGhlIGZyYWN0aW9uIGlzIG11bHRpcGxpZWQgYnkgMTAgdXNpbmcgYSBtdWwgYnkgMgkjCisjCXNoaWZ0IGFuZCBhIG11bCBieSA4IHNoaWZ0LiAgVGhlIGJpdHMgc2hpZnRlZCBvdXQgb2YgdGhlCSMKKyMJbXNiIGZvcm0gYSBkZWNpbWFsIGRpZ2l0LiAgVGhpcyBwcm9jZXNzIGlzIGl0ZXJhdGVkIHVudGlsCSMKKyMJTEVOIGRpZ2l0cyBhcmUgZm9ybWVkLgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEExLiBJbml0IGQ3IHRvIDEuICBENyBpcyB0aGUgYnl0ZSBkaWdpdCBjb3VudGVyLCBhbmQgaWYgMSwgdGhlCSMKKyMgICAgIGRpZ2l0IGZvcm1lZCB3aWxsIGJlIGFzc3VtZWQgdGhlIGxlYXN0IHNpZ25pZmljYW50LiAgVGhpcyBpcwkjCisjICAgICB0byBmb3JjZSB0aGUgZmlyc3QgYnl0ZSBmb3JtZWQgdG8gaGF2ZSBhIDAgaW4gdGhlIHVwcGVyIDQgYml0cy4JIworIwkJCQkJCQkJCSMKKyMgQTIuIEJlZ2lubmluZyBvZiB0aGUgbG9vcDoJCQkJCQkjCisjICAgICBDb3B5IHRoZSBmcmFjdGlvbiBpbiBkMjpkMyB0byBkNDpkNS4JCQkJIworIwkJCQkJCQkJCSMKKyMgQTMuIE11bHRpcGx5IHRoZSBmcmFjdGlvbiBpbiBkMjpkMyBieSA4IHVzaW5nIGJpdC1maWVsZAkJIworIyAgICAgZXh0cmFjdHMgYW5kIHNoaWZ0cy4gIFRoZSB0aHJlZSBtc2JzIGZyb20gZDIgd2lsbCBnbyBpbnRvIGQxLgkjCisjCQkJCQkJCQkJIworIyBBNC4gTXVsdGlwbHkgdGhlIGZyYWN0aW9uIGluIGQ0OmQ1IGJ5IDIgdXNpbmcgc2hpZnRzLiAgVGhlIG1zYgkjCisjICAgICB3aWxsIGJlIGNvbGxlY3RlZCBieSB0aGUgY2FycnkuCQkJCQkjCisjCQkJCQkJCQkJIworIyBBNS4gQWRkIHVzaW5nIHRoZSBjYXJyeSB0aGUgNjQtYml0IHF1YW50aXRpZXMgaW4gZDI6ZDMgYW5kIGQ0OmQ1CSMKKyMgICAgIGludG8gZDI6ZDMuICBEMSB3aWxsIGNvbnRhaW4gdGhlIGJjZCBkaWdpdCBmb3JtZWQuCQkjCisjCQkJCQkJCQkJIworIyBBNi4gVGVzdCBkNy4gIElmIHplcm8sIHRoZSBkaWdpdCBmb3JtZWQgaXMgdGhlIG1zIGRpZ2l0LiAgSWYgbm9uLQkjCisjICAgICB6ZXJvLCBpdCBpcyB0aGUgbHMgZGlnaXQuICBQdXQgdGhlIGRpZ2l0IGluIGl0cyBwbGFjZSBpbiB0aGUJIworIyAgICAgdXBwZXIgd29yZCBvZiBkMC4gIElmIGl0IGlzIHRoZSBscyBkaWdpdCwgd3JpdGUgdGhlIHdvcmQJCSMKKyMgICAgIGZyb20gZDAgdG8gbWVtb3J5LgkJCQkJCSMKKyMJCQkJCQkJCQkjCisjIEE3LiBEZWNyZW1lbnQgZDYgKExFTiBjb3VudGVyKSBhbmQgcmVwZWF0IHRoZSBsb29wIHVudGlsIHplcm8uCSMKKyMJCQkJCQkJCQkjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMJSW1wbGVtZW50YXRpb24gTm90ZXM6CisjCisjCVRoZSByZWdpc3RlcnMgYXJlIHVzZWQgYXMgZm9sbG93czoKKyMKKyMJCWQwOiBMRU4gY291bnRlcgorIwkJZDE6IHRlbXAgdXNlZCB0byBmb3JtIHRoZSBkaWdpdAorIwkJZDI6IHVwcGVyIDMyLWJpdHMgb2YgZnJhY3Rpb24gZm9yIG11bCBieSA4CisjCQlkMzogbG93ZXIgMzItYml0cyBvZiBmcmFjdGlvbiBmb3IgbXVsIGJ5IDgKKyMJCWQ0OiB1cHBlciAzMi1iaXRzIG9mIGZyYWN0aW9uIGZvciBtdWwgYnkgMgorIwkJZDU6IGxvd2VyIDMyLWJpdHMgb2YgZnJhY3Rpb24gZm9yIG11bCBieSAyCisjCQlkNjogdGVtcCBmb3IgYml0LWZpZWxkIGV4dHJhY3RzCisjCQlkNzogYnl0ZSBkaWdpdCBmb3JtYXRpb24gd29yZDtkaWdpdCBjb3VudCB7MCwxfQorIwkJYTA6IHBvaW50ZXIgaW50byBtZW1vcnkgZm9yIHBhY2tlZCBiY2Qgc3RyaW5nIGZvcm1hdGlvbgorIworCisJZ2xvYmFsCQliaW5zdHIKK2JpbnN0cjoKKwltb3ZtLmwJCSYweGZmMDAsLSglc3ApCSMgIHslZDAtJWQ3fQorCisjCisjIEExOiBJbml0IGQ3CisjCisJbW92LmwJCSYxLCVkNwkJIyBpbml0IGQ3IGZvciBzZWNvbmQgZGlnaXQKKwlzdWJxLmwJCSYxLCVkMAkJIyBmb3IgZGJmIGQwIHdvdWxkIGhhdmUgTEVOKzEgcGFzc2VzCisjCisjIEEyLiBDb3B5IGQyOmQzIHRvIGQ0OmQ1LiAgU3RhcnQgbG9vcC4KKyMKK2xvb3A6CisJbW92LmwJCSVkMiwlZDQJCSMgY29weSB0aGUgZnJhY3Rpb24gYmVmb3JlIG11bHMKKwltb3YubAkJJWQzLCVkNQkJIyB0byBkNDpkNQorIworIyBBMy4gTXVsdGlwbHkgZDI6ZDMgYnkgODsgZXh0cmFjdCBtc2JzIGludG8gZDEuCisjCisJYmZleHR1CQklZDJ7JjA6JjN9LCVkMQkjIGNvcHkgMyBtc2JzIG9mIGQyIGludG8gZDEKKwlhc2wubAkJJjMsJWQyCQkjIHNoaWZ0IGQyIGxlZnQgYnkgMyBwbGFjZXMKKwliZmV4dHUJCSVkM3smMDomM30sJWQ2CSMgY29weSAzIG1zYnMgb2YgZDMgaW50byBkNgorCWFzbC5sCQkmMywlZDMJCSMgc2hpZnQgZDMgbGVmdCBieSAzIHBsYWNlcworCW9yLmwJCSVkNiwlZDIJCSMgb3IgaW4gbXNicyBmcm9tIGQzIGludG8gZDIKKyMKKyMgQTQuIE11bHRpcGx5IGQ0OmQ1IGJ5IDI7IGFkZCBjYXJyeSBvdXQgdG8gZDEuCisjCisJYXNsLmwJCSYxLCVkNQkJIyBtdWwgZDUgYnkgMgorCXJveGwubAkJJjEsJWQ0CQkjIG11bCBkNCBieSAyCisJc3dhcAkJJWQ2CQkjIHB1dCAwIGluIGQ2IGxvd2VyIHdvcmQKKwlhZGR4LncJCSVkNiwlZDEJCSMgYWRkIGluIGV4dGVuZCBmcm9tIG11bCBieSAyCisjCisjIEE1LiBBZGQgbXVsIGJ5IDggdG8gbXVsIGJ5IDIuICBEMSBjb250YWlucyB0aGUgZGlnaXQgZm9ybWVkLgorIworCWFkZC5sCQklZDUsJWQzCQkjIGFkZCBsb3dlciAzMiBiaXRzCisJbm9wCQkJCSMgRVJSQVRBIEZJWCAjMTMgKFJldi4gMS4yIDYvNi85MCkKKwlhZGR4LmwJCSVkNCwlZDIJCSMgYWRkIHdpdGggZXh0ZW5kIHVwcGVyIDMyIGJpdHMKKwlub3AJCQkJIyBFUlJBVEEgRklYICMxMyAoUmV2LiAxLjIgNi82LzkwKQorCWFkZHgudwkJJWQ2LCVkMQkJIyBhZGQgaW4gZXh0ZW5kIGZyb20gYWRkIHRvIGQxCisJc3dhcAkJJWQ2CQkjIHdpdGggZDYgPSAwOyBwdXQgMCBpbiB1cHBlciB3b3JkCisjCisjIEE2LiBUZXN0IGQ3IGFuZCBicmFuY2guCisjCisJdHN0LncJCSVkNwkJIyBpZiB6ZXJvLCBzdG9yZSBkaWdpdCAmIHRvIGxvb3AKKwliZXEuYgkJZmlyc3RfZAkJIyBpZiBub24temVybywgZm9ybSBieXRlICYgd3JpdGUKK3NlY19kOgorCXN3YXAJCSVkNwkJIyBicmluZyBmaXJzdCBkaWdpdCB0byB3b3JkIGQ3YgorCWFzbC53CQkmNCwlZDcJCSMgZmlyc3QgZGlnaXQgaW4gdXBwZXIgNCBiaXRzIGQ3YgorCWFkZC53CQklZDEsJWQ3CQkjIGFkZCBpbiBscyBkaWdpdCB0byBkN2IKKwltb3YuYgkJJWQ3LCglYTApKwkjIHN0b3JlIGQ3YiBieXRlIGluIG1lbW9yeQorCXN3YXAJCSVkNwkJIyBwdXQgTEVOIGNvdW50ZXIgaW4gd29yZCBkN2EKKwljbHIudwkJJWQ3CQkjIHNldCBkN2EgdG8gc2lnbmFsIG5vIGRpZ2l0cyBkb25lCisJZGJmLncJCSVkMCxsb29wCSMgZG8gbG9vcCBzb21lIG1vcmUhCisJYnJhLmIJCWVuZF9ic3RyCSMgZmluaXNoZWQsIHNvIGV4aXQKK2ZpcnN0X2Q6CisJc3dhcAkJJWQ3CQkjIHB1dCBkaWdpdCB3b3JkIGluIGQ3YgorCW1vdi53CQklZDEsJWQ3CQkjIHB1dCBuZXcgZGlnaXQgaW4gZDdiCisJc3dhcAkJJWQ3CQkjIHB1dCBMRU4gY291bnRlciBpbiB3b3JkIGQ3YQorCWFkZHEudwkJJjEsJWQ3CQkjIHNldCBkN2EgdG8gc2lnbmFsIGZpcnN0IGRpZ2l0IGRvbmUKKwlkYmYudwkJJWQwLGxvb3AJIyBkbyBsb29wIHNvbWUgbW9yZSEKKwlzd2FwCQklZDcJCSMgcHV0IGxhc3QgZGlnaXQgaW4gc3RyaW5nCisJbHNsLncJCSY0LCVkNwkJIyBtb3ZlIGl0IHRvIHVwcGVyIDQgYml0cworCW1vdi5iCQklZDcsKCVhMCkrCSMgc3RvcmUgaXQgaW4gbWVtb3J5IHN0cmluZworIworIyBDbGVhbiB1cCBhbmQgcmV0dXJuIHdpdGggcmVzdWx0IGluIGZwMC4KKyMKK2VuZF9ic3RyOgorCW1vdm0ubAkJKCVzcCkrLCYweGZmCSMgIHslZDAtJWQ3fQorCXJ0cworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFhERUYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgkjCisjCWZhY2NfaW5fYigpOiBkbWVtX3JlYWRfYnl0ZSBmYWlsZWQJCQkJIworIwlmYWNjX2luX3coKTogZG1lbV9yZWFkX3dvcmQgZmFpbGVkCQkJCSMKKyMJZmFjY19pbl9sKCk6IGRtZW1fcmVhZF9sb25nIGZhaWxlZAkJCQkjCisjCWZhY2NfaW5fZCgpOiBkbWVtX3JlYWQgb2YgZGJsIHByZWMgZmFpbGVkCQkJIworIwlmYWNjX2luX3goKTogZG1lbV9yZWFkIG9mIGV4dCBwcmVjIGZhaWxlZAkJCSMKKyMJCQkJCQkJCQkjCisjCWZhY2Nfb3V0X2IoKTogZG1lbV93cml0ZV9ieXRlIGZhaWxlZAkJCQkjCisjCWZhY2Nfb3V0X3coKTogZG1lbV93cml0ZV93b3JkIGZhaWxlZAkJCQkjCisjCWZhY2Nfb3V0X2woKTogZG1lbV93cml0ZV9sb25nIGZhaWxlZAkJCQkjCisjCWZhY2Nfb3V0X2QoKTogZG1lbV93cml0ZSBvZiBkYmwgcHJlYyBmYWlsZWQJCQkjCisjCWZhY2Nfb3V0X3goKTogZG1lbV93cml0ZSBvZiBleHQgcHJlYyBmYWlsZWQJCQkjCisjCQkJCQkJCQkJIworIyBYUkVGICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJIworIwlfcmVhbF9hY2Nlc3MoKSAtIGV4aXQgdGhyb3VnaCBhY2Nlc3MgZXJyb3IgaGFuZGxlcgkJIworIwkJCQkJCQkJCSMKKyMgSU5QVVQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgT1VUUFVUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJTm9uZQkJCQkJCQkJIworIwkJCQkJCQkJCSMKKyMgQUxHT1JJVEhNICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCSMKKyMJRmxvdyBqdW1wcyBoZXJlIHdoZW4gYW4gRlAgZGF0YSBmZXRjaCBjYWxsIGdldHMgYW4gZXJyb3IJIworIyByZXN1bHQuIFRoaXMgbWVhbnMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2FudHMgYW4gYWNjZXNzIGVycm9yIGZyYW1lCSMKKyMgbWFkZSBvdXQgb2YgdGhlIGN1cnJlbnQgZXhjZXB0aW9uIHN0YWNrIGZyYW1lLgkJCSMKKyMJU28sIHdlIGZpcnN0IGNhbGwgcmVzdG9yZSgpIHdoaWNoIG1ha2VzIHN1cmUgdGhhdCBhbnkgdXBkYXRlZAkjCisjIC0oYW4pKyByZWdpc3RlciBnZXRzIHJldHVybmVkIHRvIGl0cyBwcmUtZXhjZXB0aW9uIHZhbHVlIGFuZCB0aGVuCSMKKyMgd2UgY2hhbmdlIHRoZSBzdGFjayB0byBhbiBhY2Nlc3MgZXJyb3Igc3RhY2sgZnJhbWUuCQkJIworIwkJCQkJCQkJCSMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZmFjY19pbl9iOgorCW1vdnEubAkJJjB4MSwlZDAJCQkjIG9uZSBieXRlCisJYnNyLncJCXJlc3RvcmUJCQkJIyBmaXggQW4KKworCW1vdi53CQkmMHgwMTIxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKKwlicmEudwkJZmFjY19maW5pc2gKKworZmFjY19pbl93OgorCW1vdnEubAkJJjB4MiwlZDAJCQkjIHR3byBieXRlcworCWJzci53CQlyZXN0b3JlCQkJCSMgZml4IEFuCisKKwltb3YudwkJJjB4MDE0MSxFWENfVk9GRiglYTYpCQkjIHNldCBGU0xXCisJYnJhLmIJCWZhY2NfZmluaXNoCisKK2ZhY2NfaW5fbDoKKwltb3ZxLmwJCSYweDQsJWQwCQkJIyBmb3VyIGJ5dGVzCisJYnNyLncJCXJlc3RvcmUJCQkJIyBmaXggQW4KKworCW1vdi53CQkmMHgwMTAxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKKwlicmEuYgkJZmFjY19maW5pc2gKKworZmFjY19pbl9kOgorCW1vdnEubAkJJjB4OCwlZDAJCQkjIGVpZ2h0IGJ5dGVzCisJYnNyLncJCXJlc3RvcmUJCQkJIyBmaXggQW4KKworCW1vdi53CQkmMHgwMTYxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKKwlicmEuYgkJZmFjY19maW5pc2gKKworZmFjY19pbl94OgorCW1vdnEubAkJJjB4YywlZDAJCQkjIHR3ZWx2ZSBieXRlcworCWJzci53CQlyZXN0b3JlCQkJCSMgZml4IEFuCisKKwltb3YudwkJJjB4MDE2MSxFWENfVk9GRiglYTYpCQkjIHNldCBGU0xXCisJYnJhLmIJCWZhY2NfZmluaXNoCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZmFjY19vdXRfYjoKKwltb3ZxLmwJCSYweDEsJWQwCQkJIyBvbmUgYnl0ZQorCWJzci53CQlyZXN0b3JlCQkJCSMgcmVzdG9yZSBBbgorCisJbW92LncJCSYweDAwYTEsRVhDX1ZPRkYoJWE2KQkJIyBzZXQgRlNMVworCWJyYS5iCQlmYWNjX2ZpbmlzaAorCitmYWNjX291dF93OgorCW1vdnEubAkJJjB4MiwlZDAJCQkjIHR3byBieXRlcworCWJzci53CQlyZXN0b3JlCQkJCSMgcmVzdG9yZSBBbgorCisJbW92LncJCSYweDAwYzEsRVhDX1ZPRkYoJWE2KQkJIyBzZXQgRlNMVworCWJyYS5iCQlmYWNjX2ZpbmlzaAorCitmYWNjX291dF9sOgorCW1vdnEubAkJJjB4NCwlZDAJCQkjIGZvdXIgYnl0ZXMKKwlic3IudwkJcmVzdG9yZQkJCQkjIHJlc3RvcmUgQW4KKworCW1vdi53CQkmMHgwMDgxLEVYQ19WT0ZGKCVhNikJCSMgc2V0IEZTTFcKKwlicmEuYgkJZmFjY19maW5pc2gKKworZmFjY19vdXRfZDoKKwltb3ZxLmwJCSYweDgsJWQwCQkJIyBlaWdodCBieXRlcworCWJzci53CQlyZXN0b3JlCQkJCSMgcmVzdG9yZSBBbgorCisJbW92LncJCSYweDAwZTEsRVhDX1ZPRkYoJWE2KQkJIyBzZXQgRlNMVworCWJyYS5iCQlmYWNjX2ZpbmlzaAorCitmYWNjX291dF94OgorCW1vdi5sCQkmMHhjLCVkMAkJCSMgdHdlbHZlIGJ5dGVzCisJYnNyLncJCXJlc3RvcmUJCQkJIyByZXN0b3JlIEFuCisKKwltb3YudwkJJjB4MDBlMSxFWENfVk9GRiglYTYpCQkjIHNldCBGU0xXCisKKyMgaGVyZSdzIHdoZXJlIHdlIGFjdHVhbGx5IGNyZWF0ZSB0aGUgYWNjZXNzIGVycm9yIGZyYW1lIGZyb20gdGhlCisjIGN1cnJlbnQgZXhjZXB0aW9uIHN0YWNrIGZyYW1lLgorZmFjY19maW5pc2g6CisJbW92LmwJCVVTRVJfRlBJQVIoJWE2KSxFWENfUEMoJWE2KSAjIHN0b3JlIGN1cnJlbnQgUEMKKworCWZtb3ZtLngJCUVYQ19GUFJFR1MoJWE2KSwmMHhjMAkjIHJlc3RvcmUgZnAwLWZwMQorCWZtb3ZtLmwJCVVTRVJfRlBDUiglYTYpLCVmcGNyLCVmcHNyLCVmcGlhciAjIHJlc3RvcmUgY3RybCByZWdzCisJbW92bS5sCQlFWENfRFJFR1MoJWE2KSwmMHgwMzAzCSMgcmVzdG9yZSBkMC1kMS9hMC1hMQorCisJdW5sawkJJWE2CisKKwltb3YubAkJKCVzcCksLSglc3ApCQkjIHN0b3JlIFNSLCBoaShQQykKKwltb3YubAkJMHg4KCVzcCksMHg0KCVzcCkJIyBzdG9yZSBsbyhQQykKKwltb3YubAkJMHhjKCVzcCksMHg4KCVzcCkJIyBzdG9yZSBFQQorCW1vdi5sCQkmMHgwMDAwMDAwMSwweGMoJXNwKQkjIHN0b3JlIEZTTFcKKwltb3YudwkJMHg2KCVzcCksMHhjKCVzcCkJIyBmaXggRlNMVyAoc2l6ZSkKKwltb3YudwkJJjB4NDAwOCwweDYoJXNwKQkjIHN0b3JlIHZvZmYKKworCWJ0c3QJCSYweDUsKCVzcCkJCSMgc3VwZXJ2aXNvciBvciB1c2VyIG1vZGU/CisJYmVxLmIJCWZhY2Nfb3V0MgkJIyB1c2VyCisJYnNldAkJJjB4MiwweGQoJXNwKQkJIyBzZXQgc3VwZXJ2aXNvciBUTSBiaXQKKworZmFjY19vdXQyOgorCWJyYS5sCQlfcmVhbF9hY2Nlc3MKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgaWYgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzaW5nIG1vZGUgd2FzIHByZWRlY3JlbWVudCBvciBwb3N0aW5jcmVtZW50LAorIyB0aGUgZW11bGF0aW9uIGhhcyBhbHJlYWR5IGNoYW5nZWQgaXRzIHZhbHVlIHRvIHRoZSBjb3JyZWN0IHBvc3QtCisjIGluc3RydWN0aW9uIHZhbHVlLiBidXQgc2luY2Ugd2UncmUgZXhpdGluZyB0byB0aGUgYWNjZXNzIGVycm9yCisjIGhhbmRsZXIsIHRoZW4gQU4gbXVzdCBiZSByZXR1cm5lZCB0byBpdHMgcHJlLWluc3RydWN0aW9uIHZhbHVlLgorIyB3ZSBkbyB0aGF0IGhlcmUuCityZXN0b3JlOgorCW1vdi5iCQlFWENfT1BXT1JEKzB4MSglYTYpLCVkMQorCWFuZGkuYgkJJjB4MzgsJWQxCQkjIGV4dHJhY3Qgb3Btb2RlCisJY21waS5iCQklZDEsJjB4MTgJCSMgcG9zdGluYz8KKwliZXEudwkJcmVzdF9pbmMKKwljbXBpLmIJCSVkMSwmMHgyMAkJIyBwcmVkZWM/CisJYmVxLncJCXJlc3RfZGVjCisJcnRzCisKK3Jlc3RfaW5jOgorCW1vdi5iCQlFWENfT1BXT1JEKzB4MSglYTYpLCVkMQorCWFuZGkudwkJJjB4MDAwNywlZDEJCSMgZmV0Y2ggQW4KKworCW1vdi53CQkodGJsX3Jlc3RfaW5jLmIsJXBjLCVkMS53KjIpLCVkMQorCWptcAkJKHRibF9yZXN0X2luYy5iLCVwYywlZDEudyoxKQorCit0YmxfcmVzdF9pbmM6CisJc2hvcnQJCXJpX2EwIC0gdGJsX3Jlc3RfaW5jCisJc2hvcnQJCXJpX2ExIC0gdGJsX3Jlc3RfaW5jCisJc2hvcnQJCXJpX2EyIC0gdGJsX3Jlc3RfaW5jCisJc2hvcnQJCXJpX2EzIC0gdGJsX3Jlc3RfaW5jCisJc2hvcnQJCXJpX2E0IC0gdGJsX3Jlc3RfaW5jCisJc2hvcnQJCXJpX2E1IC0gdGJsX3Jlc3RfaW5jCisJc2hvcnQJCXJpX2E2IC0gdGJsX3Jlc3RfaW5jCisJc2hvcnQJCXJpX2E3IC0gdGJsX3Jlc3RfaW5jCisKK3JpX2EwOgorCXN1Yi5sCQklZDAsRVhDX0RSRUdTKzB4OCglYTYpCSMgZml4IHN0YWNrZWQgYTAKKwlydHMKK3JpX2ExOgorCXN1Yi5sCQklZDAsRVhDX0RSRUdTKzB4YyglYTYpCSMgZml4IHN0YWNrZWQgYTEKKwlydHMKK3JpX2EyOgorCXN1Yi5sCQklZDAsJWEyCQkJIyBmaXggYTIKKwlydHMKK3JpX2EzOgorCXN1Yi5sCQklZDAsJWEzCQkJIyBmaXggYTMKKwlydHMKK3JpX2E0OgorCXN1Yi5sCQklZDAsJWE0CQkJIyBmaXggYTQKKwlydHMKK3JpX2E1OgorCXN1Yi5sCQklZDAsJWE1CQkJIyBmaXggYTUKKwlydHMKK3JpX2E2OgorCXN1Yi5sCQklZDAsKCVhNikJCSMgZml4IHN0YWNrZWQgYTYKKwlydHMKKyMgaWYgaXQncyBhIGZtb3ZlIG91dCBpbnN0cnVjdGlvbiwgd2UgZG9uJ3QgaGF2ZSB0byBmaXggYTcKKyMgYmVjYXVzZSB3ZSBoYWRuJ3QgY2hhbmdlZCBpdCB5ZXQuIGlmIGl0J3MgYW4gb3BjbGFzcyB0d28KKyMgaW5zdHJ1Y3Rpb24gKGRhdGEgbW92ZWQgaW4pIGFuZCB0aGUgZXhjZXB0aW9uIHdhcyBpbiBzdXBlcnZpc29yCisjIG1vZGUsIHRoZW4gYWxzbyBhbHNvIHdhc24ndCB1cGRhdGVkLiBpZiBpdCB3YXMgdXNlciBtb2RlLCB0aGVuCisjIHJlc3RvcmUgdGhlIGNvcnJlY3QgYTcgd2hpY2ggaXMgaW4gdGhlIFVTUCBjdXJyZW50bHkuCityaV9hNzoKKwljbXBpLmIJCUVYQ19WT0ZGKCVhNiksJjB4MzAJIyBtb3ZlIGluIG9yIG91dD8KKwlibmUuYgkJcmlfYTdfZG9uZQkJIyBvdXQKKworCWJ0c3QJCSYweDUsRVhDX1NSKCVhNikJIyB1c2VyIG9yIHN1cGVydmlzb3I/CisJYm5lLmIJCXJpX2E3X2RvbmUJCSMgc3VwZXJ2aXNvcgorCW1vdmMJCSV1c3AsJWEwCQkjIHJlc3RvcmUgVVNQCisJc3ViLmwJCSVkMCwlYTAKKwltb3ZjCQklYTAsJXVzcAorcmlfYTdfZG9uZToKKwlydHMKKworIyBuZWVkIHRvIGludmVydCBhZGp1c3RtZW50IHZhbHVlIGlmIHRoZSA8ZWE+IHdhcyBwcmVkZWMKK3Jlc3RfZGVjOgorCW5lZy5sCQklZDAKKwlicmEuYgkJcmVzdF9pbmMKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL202OGsva2VybmVsL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ODkyNWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsva2VybmVsL01ha2VmaWxlCkBAIC0wLDAgKzEsMTggQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCisjCisKK2lmbmRlZiBDT05GSUdfU1VOMworICBleHRyYS15IDo9IGhlYWQubworZWxzZQorICBleHRyYS15IDo9IHN1bjMtaGVhZC5vCitlbmRpZgorZXh0cmEteQkrPSB2bWxpbnV4LmxkcworCitvYmoteQkJOj0gZW50cnkubyBwcm9jZXNzLm8gdHJhcHMubyBpbnRzLm8gc2lnbmFsLm8gcHRyYWNlLm8gXAorCQkJc3lzX202OGsubyB0aW1lLm8gc2VtYXBob3JlLm8gc2V0dXAubyBtNjhrX2tzeW1zLm8KKworb2JqLSQoQ09ORklHX1BDSSkJKz0gYmlvczMyLm8KK29iai0kKENPTkZJR19NT0RVTEVTKQkrPSBtb2R1bGUubworCitFWFRSQV9BRkxBR1MgOj0gLXRyYWRpdGlvbmFsCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL202OGsva2VybmVsL2FzbS1vZmZzZXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VlMzMxNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyB1c2VkIHRvIGdlbmVyYXRlIGRlZmluaXRpb25zIG5lZWRlZCBieQorICogYXNzZW1ibHkgbGFuZ3VhZ2UgbW9kdWxlcy4KKyAqCisgKiBXZSB1c2UgdGhlIHRlY2huaXF1ZSB1c2VkIGluIHRoZSBPU0YgTWFjaCBrZXJuZWwgY29kZToKKyAqIGdlbmVyYXRlIGFzbSBzdGF0ZW1lbnRzIGNvbnRhaW5pbmcgI2RlZmluZXMsCisgKiBjb21waWxlIHRoaXMgZmlsZSB0byBhc3NlbWJsZXIsIGFuZCB0aGVuIGV4dHJhY3QgdGhlCisgKiAjZGVmaW5lcyBmcm9tIHRoZSBhc3NlbWJseS1sYW5ndWFnZSBvdXRwdXQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FtaWdhaHcuaD4KKyNpbmNsdWRlIDxsaW51eC9mb250Lmg+CisKKyNkZWZpbmUgREVGSU5FKHN5bSwgdmFsKSBcCisJYXNtIHZvbGF0aWxlKCJcbi0+IiAjc3ltICIgJTAgIiAjdmFsIDogOiAiaSIgKHZhbCkpCisKK2ludCBtYWluKHZvaWQpCit7CisJLyogb2Zmc2V0cyBpbnRvIHRoZSB0YXNrIHN0cnVjdCAqLworCURFRklORShUQVNLX1NUQVRFLCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHN0YXRlKSk7CisJREVGSU5FKFRBU0tfRkxBR1MsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgZmxhZ3MpKTsKKwlERUZJTkUoVEFTS19QVFJBQ0UsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgcHRyYWNlKSk7CisJREVGSU5FKFRBU0tfV09SSywgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQud29yaykpOworCURFRklORShUQVNLX05FRURSRVNDSEVELCBvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHRocmVhZC53b3JrLm5lZWRfcmVzY2hlZCkpOworCURFRklORShUQVNLX1NZU0NBTExfVFJBQ0UsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLndvcmsuc3lzY2FsbF90cmFjZSkpOworCURFRklORShUQVNLX1NJR1BFTkRJTkcsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLndvcmsuc2lncGVuZGluZykpOworCURFRklORShUQVNLX05PVElGWV9SRVNVTUUsIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLndvcmsubm90aWZ5X3Jlc3VtZSkpOworCURFRklORShUQVNLX1RIUkVBRCwgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQpKTsKKwlERUZJTkUoVEFTS19NTSwgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBtbSkpOworCURFRklORShUQVNLX0FDVElWRV9NTSwgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCBhY3RpdmVfbW0pKTsKKworCS8qIG9mZnNldHMgaW50byB0aGUgdGhyZWFkIHN0cnVjdCAqLworCURFRklORShUSFJFQURfS1NQLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX3N0cnVjdCwga3NwKSk7CisJREVGSU5FKFRIUkVBRF9VU1AsIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfc3RydWN0LCB1c3ApKTsKKwlERUZJTkUoVEhSRUFEX1NSLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX3N0cnVjdCwgc3IpKTsKKwlERUZJTkUoVEhSRUFEX0ZTLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX3N0cnVjdCwgZnMpKTsKKwlERUZJTkUoVEhSRUFEX0NSUCwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9zdHJ1Y3QsIGNycCkpOworCURFRklORShUSFJFQURfRVNQMCwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9zdHJ1Y3QsIGVzcDApKTsKKwlERUZJTkUoVEhSRUFEX0ZQUkVHLCBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX3N0cnVjdCwgZnApKTsKKwlERUZJTkUoVEhSRUFEX0ZQQ05UTCwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9zdHJ1Y3QsIGZwY250bCkpOworCURFRklORShUSFJFQURfRlBTVEFURSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9zdHJ1Y3QsIGZwc3RhdGUpKTsKKworCS8qIG9mZnNldHMgaW50byB0aGUgcHRfcmVncyAqLworCURFRklORShQVF9EMCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQwKSk7CisJREVGSU5FKFBUX09SSUdfRDAsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBvcmlnX2QwKSk7CisJREVGSU5FKFBUX0QxLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDEpKTsKKwlERUZJTkUoUFRfRDIsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkMikpOworCURFRklORShQVF9EMywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQzKSk7CisJREVGSU5FKFBUX0Q0LCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDQpKTsKKwlERUZJTkUoUFRfRDUsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkNSkpOworCURFRklORShQVF9BMCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGEwKSk7CisJREVGSU5FKFBUX0ExLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgYTEpKTsKKwlERUZJTkUoUFRfQTIsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBhMikpOworCURFRklORShQVF9QQywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHBjKSk7CisJREVGSU5FKFBUX1NSLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgc3IpKTsKKwkvKiBiaXRmaWVsZHMgYXJlIGEgYml0IGRpZmZpY3VsdCAqLworCURFRklORShQVF9WRUNUT1IsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBwYykgKyA0KTsKKworCS8qIG9mZnNldHMgaW50byB0aGUgaXJxX2hhbmRsZXIgc3RydWN0ICovCisJREVGSU5FKElSUV9IQU5ETEVSLCBvZmZzZXRvZihzdHJ1Y3QgaXJxX25vZGUsIGhhbmRsZXIpKTsKKwlERUZJTkUoSVJRX0RFVklELCBvZmZzZXRvZihzdHJ1Y3QgaXJxX25vZGUsIGRldl9pZCkpOworCURFRklORShJUlFfTkVYVCwgb2Zmc2V0b2Yoc3RydWN0IGlycV9ub2RlLCBuZXh0KSk7CisKKwkvKiBvZmZzZXRzIGludG8gdGhlIGtlcm5lbF9zdGF0IHN0cnVjdCAqLworCURFRklORShTVEFUX0lSUSwgb2Zmc2V0b2Yoc3RydWN0IGtlcm5lbF9zdGF0LCBpcnFzKSk7CisKKwkvKiBvZmZzZXRzIGludG8gdGhlIGlycV9jcHVzdGF0X3Qgc3RydWN0ICovCisJREVGSU5FKENQVVNUQVRfU09GVElSUV9QRU5ESU5HLCBvZmZzZXRvZihpcnFfY3B1c3RhdF90LCBfX3NvZnRpcnFfcGVuZGluZykpOworCisJLyogb2Zmc2V0cyBpbnRvIHRoZSBiaV9yZWNvcmQgc3RydWN0ICovCisJREVGSU5FKEJJUl9UQUcsIG9mZnNldG9mKHN0cnVjdCBiaV9yZWNvcmQsIHRhZykpOworCURFRklORShCSVJfU0laRSwgb2Zmc2V0b2Yoc3RydWN0IGJpX3JlY29yZCwgc2l6ZSkpOworCURFRklORShCSVJfREFUQSwgb2Zmc2V0b2Yoc3RydWN0IGJpX3JlY29yZCwgZGF0YSkpOworCisJLyogb2Zmc2V0cyBpbnRvIGZvbnRfZGVzYyAoZHJpdmVycy92aWRlby9jb25zb2xlL2ZvbnQuaCkgKi8KKwlERUZJTkUoRk9OVF9ERVNDX0lEWCwgb2Zmc2V0b2Yoc3RydWN0IGZvbnRfZGVzYywgaWR4KSk7CisJREVGSU5FKEZPTlRfREVTQ19OQU1FLCBvZmZzZXRvZihzdHJ1Y3QgZm9udF9kZXNjLCBuYW1lKSk7CisJREVGSU5FKEZPTlRfREVTQ19XSURUSCwgb2Zmc2V0b2Yoc3RydWN0IGZvbnRfZGVzYywgd2lkdGgpKTsKKwlERUZJTkUoRk9OVF9ERVNDX0hFSUdIVCwgb2Zmc2V0b2Yoc3RydWN0IGZvbnRfZGVzYywgaGVpZ2h0KSk7CisJREVGSU5FKEZPTlRfREVTQ19EQVRBLCBvZmZzZXRvZihzdHJ1Y3QgZm9udF9kZXNjLCBkYXRhKSk7CisJREVGSU5FKEZPTlRfREVTQ19QUkVGLCBvZmZzZXRvZihzdHJ1Y3QgZm9udF9kZXNjLCBwcmVmKSk7CisKKwkvKiBzaWduYWwgZGVmaW5lcyAqLworCURFRklORShTSUdTRUdWLCBTSUdTRUdWKTsKKwlERUZJTkUoU0VHVl9NQVBFUlIsIFNFR1ZfTUFQRVJSKTsKKwlERUZJTkUoU0lHVFJBUCwgU0lHVFJBUCk7CisJREVGSU5FKFRSQVBfVFJBQ0UsIFRSQVBfVFJBQ0UpOworCisJLyogb2Zmc2V0cyBpbnRvIHRoZSBjdXN0b20gc3RydWN0ICovCisJREVGSU5FKENVU1RPTUJBU0UsICZjdXN0b20pOworCURFRklORShDX0lOVEVOQVIsIG9mZnNldG9mKHN0cnVjdCBDVVNUT00sIGludGVuYXIpKTsKKwlERUZJTkUoQ19JTlRSRVFSLCBvZmZzZXRvZihzdHJ1Y3QgQ1VTVE9NLCBpbnRyZXFyKSk7CisJREVGSU5FKENfSU5URU5BLCBvZmZzZXRvZihzdHJ1Y3QgQ1VTVE9NLCBpbnRlbmEpKTsKKwlERUZJTkUoQ19JTlRSRVEsIG9mZnNldG9mKHN0cnVjdCBDVVNUT00sIGludHJlcSkpOworCURFRklORShDX1NFUkRBVFIsIG9mZnNldG9mKHN0cnVjdCBDVVNUT00sIHNlcmRhdHIpKTsKKwlERUZJTkUoQ19TRVJEQVQsIG9mZnNldG9mKHN0cnVjdCBDVVNUT00sIHNlcmRhdCkpOworCURFRklORShDX1NFUlBFUiwgb2Zmc2V0b2Yoc3RydWN0IENVU1RPTSwgc2VycGVyKSk7CisJREVGSU5FKENJQUFCQVNFLCAmY2lhYSk7CisJREVGSU5FKENJQUJCQVNFLCAmY2lhYik7CisJREVGSU5FKENfUFJBLCBvZmZzZXRvZihzdHJ1Y3QgQ0lBLCBwcmEpKTsKKwlERUZJTkUoWlRXT0JBU0UsIHpUd29CYXNlKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9iaW9zMzIuYyBiL2FyY2gvbTY4ay9rZXJuZWwvYmlvczMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkwMTY4NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvYmlvczMyLmMKQEAgLTAsMCArMSw1MTUgQEAKKy8qCisgKiBiaW9zMzIuYyAtIFBDSSBCSU9TIGZ1bmN0aW9ucyBmb3IgbTY4ayBzeXN0ZW1zLgorICoKKyAqIFdyaXR0ZW4gYnkgV291dCBLbGFyZW4uCisgKgorICogQmFzZWQgb24gdGhlIERFQyBBbHBoYSBiaW9zMzIuYyBieSBEYXZlIFJ1c2xpbmcgYW5kIERhdmlkIE1vc2Jlcmdlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaWYgMAorIyBkZWZpbmUgREJHX0RFVlMoYXJncykJCXByaW50ayBhcmdzCisjZWxzZQorIyBkZWZpbmUgREJHX0RFVlMoYXJncykKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BDSQorCisvKgorICogUENJIHN1cHBvcnQgZm9yIExpbnV4L202OGsuIEN1cnJlbnRseSBvbmx5IHRoZSBIYWRlcyBpcyBzdXBwb3J0ZWQuCisgKgorICogVGhlIHN1cHBvcnQgZm9yIFBDSSBicmlkZ2VzIGluIHRoZSBERUMgQWxwaGEgdmVyc2lvbiBoYXMKKyAqIGJlZW4gcmVtb3ZlZCBpbiB0aGlzIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3BjaS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNkZWZpbmUgS0IJCTEwMjQKKyNkZWZpbmUgTUIJCSgxMDI0KktCKQorI2RlZmluZSBHQgkJKDEwMjQqTUIpCisKKyNkZWZpbmUgTUFKT1JfUkVWCTAKKyNkZWZpbmUgTUlOT1JfUkVWCTUKKworLyoKKyAqIEFsaWduIFZBTCB0byBBTElHTiwgd2hpY2ggbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4KKyAqLworCisjZGVmaW5lIEFMSUdOKHZhbCxhbGlnbikJKCgodmFsKSArICgoYWxpZ24pIC0gMSkpICYgfigoYWxpZ24pIC0gMSkpCisKKy8qCisgKiBPZmZzZXRzIHJlbGF0aXZlIHRvIHRoZSBJL08gYW5kIG1lbW9yeSBiYXNlIGFkZHJlc3NlcyBmcm9tIHdoZXJlIHJlc291cmNlcworICogYXJlIGFsbG9jYXRlZC4KKyAqLworCisjZGVmaW5lIElPX0FMTE9DX09GRlNFVAkJMHgwMDAwNDAwMAorI2RlZmluZSBNRU1fQUxMT0NfT0ZGU0VUCTB4MDQwMDAwMDAKKworLyoKKyAqIERlY2xhcmF0aW9ucyBvZiBoYXJkd2FyZSBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbnMuCisgKi8KKworZXh0ZXJuIHN0cnVjdCBwY2lfYnVzX2luZm8gKmluaXRfaGFkZXNfcGNpKHZvaWQpOworCisvKgorICogQnVzIGluZm8gc3RydWN0dXJlIG9mIHRoZSBQQ0kgYnVzLiBBIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUgaXMKKyAqIHB1dCBpbiB0aGUgc3lzZGF0YSBtZW1iZXIgb2YgdGhlIHBjaV9idXMgc3RydWN0dXJlLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2J1c19pbmZvICpidXNfaW5mbzsKKworc3RhdGljIGludCBwY2lfbW9kaWZ5ID0gMTsJCS8qIElmIHNldCwgbGF5b3V0IHRoZSBQQ0kgYnVzIG91cnNlbGYuICovCitzdGF0aWMgaW50IHNraXBfdmdhOwkJCS8qIElmIHNldCBkbyBub3QgbW9kaWZ5IGJhc2UgYWRkcmVzc2VzCisJCQkJCSAgIG9mIHZnYSBjYXJkcy4qLworc3RhdGljIGludCBkaXNhYmxlX3BjaV9idXJzdDsJCS8qIElmIHNldCBkbyBub3QgYWxsb3cgUENJIGJ1cnN0cy4gKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBpb19iYXNlOworc3RhdGljIHVuc2lnbmVkIGludCBtZW1fYmFzZTsKKworLyoKKyAqIHN0YXRpYyB2b2lkIGRpc2FibGVfZGV2KHN0cnVjdCBwY2lfZGV2ICpkZXYpCisgKgorICogRGlzYWJsZSBQQ0kgZGV2aWNlIERFViBzbyB0aGF0IGl0IGRvZXMgbm90IHJlc3BvbmQgdG8gSS9PIG9yIG1lbW9yeQorICogYWNjZXNzZXMuCisgKgorICogUGFyYW1ldGVyczoKKyAqCisgKiBkZXYJLSBkZXZpY2UgdG8gZGlzYWJsZS4KKyAqLworCitzdGF0aWMgdm9pZCBfX2luaXQgZGlzYWJsZV9kZXYoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBzaG9ydCBjbWQ7CisKKwlpZiAoKChkZXYtPmNsYXNzID4+IDggPT0gUENJX0NMQVNTX05PVF9ERUZJTkVEX1ZHQSkgfHwKKwkgICAgIChkZXYtPmNsYXNzID4+IDggPT0gUENJX0NMQVNTX0RJU1BMQVlfVkdBKSB8fAorCSAgICAgKGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfRElTUExBWV9YR0EpKSAmJiBza2lwX3ZnYSkKKwkJcmV0dXJuOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7CisKKwljbWQgJj0gKH5QQ0lfQ09NTUFORF9JTyAmIH5QQ0lfQ09NTUFORF9NRU1PUlkgJiB+UENJX0NPTU1BTkRfTUFTVEVSKTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgY21kKTsKK30KKworLyoKKyAqIHN0YXRpYyB2b2lkIGxheW91dF9kZXYoc3RydWN0IHBjaV9kZXYgKmRldikKKyAqCisgKiBMYXlvdXQgbWVtb3J5IGFuZCBJL08gZm9yIGEgZGV2aWNlLgorICoKKyAqIFBhcmFtZXRlcnM6CisgKgorICogZGV2aWNlCS0gZGV2aWNlIHRvIGxheW91dCBtZW1vcnkgYW5kIEkvTyBmb3IuCisgKi8KKworc3RhdGljIHZvaWQgX19pbml0IGxheW91dF9kZXYoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBzaG9ydCBjbWQ7CisJdW5zaWduZWQgaW50IGJhc2UsIG1hc2ssIHNpemUsIHJlZzsKKwl1bnNpZ25lZCBpbnQgYWxpZ250bzsKKwlpbnQgaTsKKworCS8qCisJICogU2tpcCB2aWRlbyBjYXJkcyBpZiByZXF1ZXN0ZWQuCisJICovCisKKwlpZiAoKChkZXYtPmNsYXNzID4+IDggPT0gUENJX0NMQVNTX05PVF9ERUZJTkVEX1ZHQSkgfHwKKwkgICAgIChkZXYtPmNsYXNzID4+IDggPT0gUENJX0NMQVNTX0RJU1BMQVlfVkdBKSB8fAorCSAgICAgKGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfRElTUExBWV9YR0EpKSAmJiBza2lwX3ZnYSkKKwkJcmV0dXJuOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7CisKKwlmb3IgKHJlZyA9IFBDSV9CQVNFX0FERFJFU1NfMCwgaSA9IDA7IHJlZyA8PSBQQ0lfQkFTRV9BRERSRVNTXzU7IHJlZyArPSA0LCBpKyspCisJeworCQkvKgorCQkgKiBGaWd1cmUgb3V0IGhvdyBtdWNoIHNwYWNlIGFuZCBvZiB3aGF0IHR5cGUgdGhpcworCQkgKiBkZXZpY2Ugd2FudHMuCisJCSAqLworCisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCByZWcsIDB4ZmZmZmZmZmYpOworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCByZWcsICZiYXNlKTsKKworCQlpZiAoIWJhc2UpCisJCXsKKwkJCS8qIHRoaXMgYmFzZS1hZGRyZXNzIHJlZ2lzdGVyIGlzIHVudXNlZCAqLworCQkJZGV2LT5yZXNvdXJjZVtpXS5zdGFydCA9IDA7CisJCQlkZXYtPnJlc291cmNlW2ldLmVuZCA9IDA7CisJCQlkZXYtPnJlc291cmNlW2ldLmZsYWdzID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogV2UndmUgcmVhZCB0aGUgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyIGJhY2sgYWZ0ZXIKKwkJICogd3JpdGluZyBhbGwgb25lcyBhbmQgc28gbm93IHdlIG11c3QgZGVjb2RlIGl0LgorCQkgKi8KKworCQlpZiAoYmFzZSAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pCisJCXsKKwkJCS8qCisJCQkgKiBJL08gc3BhY2UgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyLgorCQkJICovCisKKwkJCWNtZCB8PSBQQ0lfQ09NTUFORF9JTzsKKworCQkJYmFzZSAmPSBQQ0lfQkFTRV9BRERSRVNTX0lPX01BU0s7CisJCQltYXNrID0gKH5iYXNlIDw8IDEpIHwgMHgxOworCQkJc2l6ZSA9IChtYXNrICYgYmFzZSkgJiAweGZmZmZmZmZmOworCisJCQkvKgorCQkJICogQWxpZ24gdG8gbXVsdGlwbGUgb2Ygc2l6ZSBvZiBtaW5pbXVtIGJhc2UuCisJCQkgKi8KKworCQkJYWxpZ250byA9IG1heF90KHVuc2lnbmVkIGludCwgMHgwNDAsIHNpemUpOworCQkJYmFzZSA9IEFMSUdOKGlvX2Jhc2UsIGFsaWdudG8pOworCQkJaW9fYmFzZSA9IGJhc2UgKyBzaXplOworCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHJlZywgYmFzZSB8IFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pOworCisJCQlkZXYtPnJlc291cmNlW2ldLnN0YXJ0ID0gYmFzZTsKKwkJCWRldi0+cmVzb3VyY2VbaV0uZW5kID0gZGV2LT5yZXNvdXJjZVtpXS5zdGFydCArIHNpemUgLSAxOworCQkJZGV2LT5yZXNvdXJjZVtpXS5mbGFncyA9IElPUkVTT1VSQ0VfSU8gfCBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPOworCisJCQlEQkdfREVWUygoImxheW91dF9kZXY6IElPIGFkZHJlc3M6ICVsWFxuIiwgYmFzZSkpOworCQl9CisJCWVsc2UKKwkJeworCQkJdW5zaWduZWQgaW50IHR5cGU7CisKKwkJCS8qCisJCQkgKiBNZW1vcnkgc3BhY2UgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyLgorCQkJICovCisKKwkJCWNtZCB8PSBQQ0lfQ09NTUFORF9NRU1PUlk7CisJCQl0eXBlID0gYmFzZSAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfTUFTSzsKKwkJCWJhc2UgJj0gUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSzsKKwkJCW1hc2sgPSAofmJhc2UgPDwgMSkgfCAweDE7CisJCQlzaXplID0gKG1hc2sgJiBiYXNlKSAmIDB4ZmZmZmZmZmY7CisJCQlzd2l0Y2ggKHR5cGUpCisJCQl7CisJCQljYXNlIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfMzI6CisJCQljYXNlIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfNjQ6CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV8xTToKKwkJCQlwcmludGsoImJpb3MzMiBXQVJOSU5HOiBzbG90ICVkLCBmdW5jdGlvbiAlZCAiCisJCQkJICAgICAgICJyZXF1ZXN0cyBtZW1vcnkgYmVsb3cgMU1CLS0tZG9uJ3QgIgorCQkJCSAgICAgICAia25vdyBob3cgdG8gZG8gdGhhdC5cbiIsCisJCQkJICAgICAgIFBDSV9TTE9UKGRldi0+ZGV2Zm4pLAorCQkJCSAgICAgICBQQ0lfRlVOQyhkZXYtPmRldmZuKSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qCisJCQkgKiBBbGlnbiB0byBtdWx0aXBsZSBvZiBzaXplIG9mIG1pbmltdW0gYmFzZS4KKwkJCSAqLworCisJCQlhbGlnbnRvID0gbWF4X3QodW5zaWduZWQgaW50LCAweDEwMDAsIHNpemUpOworCQkJYmFzZSA9IEFMSUdOKG1lbV9iYXNlLCBhbGlnbnRvKTsKKwkJCW1lbV9iYXNlID0gYmFzZSArIHNpemU7CisJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcmVnLCBiYXNlKTsKKworCQkJZGV2LT5yZXNvdXJjZVtpXS5zdGFydCA9IGJhc2U7CisJCQlkZXYtPnJlc291cmNlW2ldLmVuZCA9IGRldi0+cmVzb3VyY2VbaV0uc3RhcnQgKyBzaXplIC0gMTsKKwkJCWRldi0+cmVzb3VyY2VbaV0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKworCQkJaWYgKHR5cGUgPT0gUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NCkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIDY0LWJpdCBhZGRyZXNzLCBzZXQgdGhlIGhpZ2hlc3QgMzIgYml0cworCQkJCSAqIHRvIHplcm8uCisJCQkJICovCisKKwkJCQlyZWcgKz0gNDsKKwkJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcmVnLCAwKTsKKworCQkJCWkrKzsKKwkJCQlkZXYtPnJlc291cmNlW2ldLnN0YXJ0ID0gMDsKKwkJCQlkZXYtPnJlc291cmNlW2ldLmVuZCA9IDA7CisJCQkJZGV2LT5yZXNvdXJjZVtpXS5mbGFncyA9IDA7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIEVuYWJsZSBkZXZpY2U6CisJICovCisKKwlpZiAoZGV2LT5jbGFzcyA+PiA4ID09IFBDSV9DTEFTU19OT1RfREVGSU5FRCB8fAorCSAgICBkZXYtPmNsYXNzID4+IDggPT0gUENJX0NMQVNTX05PVF9ERUZJTkVEX1ZHQSB8fAorCSAgICBkZXYtPmNsYXNzID4+IDggPT0gUENJX0NMQVNTX0RJU1BMQVlfVkdBIHx8CisJICAgIGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfRElTUExBWV9YR0EpCisJeworCQkvKgorCQkgKiBBbGwgb2YgdGhlc2UgKG1heSkgaGF2ZSBJL08gc2NhdHRlcmVkIGFsbCBhcm91bmQKKwkJICogYW5kIG1heSBub3QgdXNlIGkvby1iYXNlIGFkZHJlc3MgcmVnaXN0ZXJzIGF0IGFsbC4KKwkJICogU28gd2UganVzdCBoYXZlIHRvIGFsd2F5cyBlbmFibGUgSS9PIHRvIHRoZXNlCisJCSAqIGRldmljZXMuCisJCSAqLworCQljbWQgfD0gUENJX0NPTU1BTkRfSU87CisJfQorCisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsIGNtZCB8IFBDSV9DT01NQU5EX01BU1RFUik7CisKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgKGRpc2FibGVfcGNpX2J1cnN0KSA/IDAgOiAzMik7CisKKwlpZiAoYnVzX2luZm8gIT0gTlVMTCkKKwkJYnVzX2luZm8tPmNvbmZfZGV2aWNlKGRldik7CS8qIE1hY2hpbmUgZGVwZW5kZW50IGNvbmZpZ3VyYXRpb24uICovCisKKwlEQkdfREVWUygoImxheW91dF9kZXY6IGJ1cyAlZCAgc2xvdCAweCV4ICBWSUQgMHgleCAgRElEIDB4JXggIGNsYXNzIDB4JXhcbiIsCisJCSAgZGV2LT5idXMtPm51bWJlciwgUENJX1NMT1QoZGV2LT5kZXZmbiksIGRldi0+dmVuZG9yLCBkZXYtPmRldmljZSwgZGV2LT5jbGFzcykpOworfQorCisvKgorICogc3RhdGljIHZvaWQgbGF5b3V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQorICoKKyAqIExheW91dCBtZW1vcnkgYW5kIEkvTyBmb3IgYWxsIGRldmljZXMgb24gdGhlIGdpdmVuIGJ1cy4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICoKKyAqIGJ1cwktIGJ1cy4KKyAqLworCitzdGF0aWMgdm9pZCBfX2luaXQgbGF5b3V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXVuc2lnbmVkIGludCBiaW8sIGJtZW07CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKworCURCR19ERVZTKCgibGF5b3V0X2J1czogc3RhcnRpbmcgYnVzICVkXG4iLCBidXMtPm51bWJlcikpOworCisJaWYgKCFidXMtPmRldmljZXMgJiYgIWJ1cy0+Y2hpbGRyZW4pCisJCXJldHVybjsKKworCS8qCisJICogQWxpZ24gdGhlIGN1cnJlbnQgYmFzZXMgb24gYXBwcm9wcmlhdGUgYm91bmRhcmllcyAoNEsgZm9yCisJICogSU8gYW5kIDFNQiBmb3IgbWVtb3J5KS4KKwkgKi8KKworCWJpbyA9IGlvX2Jhc2UgPSBBTElHTihpb19iYXNlLCA0KktCKTsKKwlibWVtID0gbWVtX2Jhc2UgPSBBTElHTihtZW1fYmFzZSwgMSpNQik7CisKKwkvKgorCSAqIFBDSSBkZXZpY2VzIG1pZ2h0IGhhdmUgYmVlbiBzZXR1cCBieSBhIFBDSSBCSU9TIGVtdWxhdGlvbgorCSAqIHJ1bm5pbmcgdW5kZXIgVE9TLiBJbiB0aGVzZSBjYXNlcyB0aGVyZSBpcyBhCisJICogd2luZG93IGR1cmluZyB3aGljaCB0d28gZGV2aWNlcyBtYXkgaGF2ZSBhbiBvdmVybGFwcGluZworCSAqIGFkZHJlc3MgcmFuZ2UuIFRvIGF2b2lkIHRoaXMgY2F1c2luZyB0cm91YmxlLCB3ZSBmaXJzdAorCSAqIHR1cm4gb2ZmIHRoZSBJL08gYW5kIG1lbW9yeSBhZGRyZXNzIGRlY29kZXJzIGZvciBhbGwgUENJCisJICogZGV2aWNlcy4gIFRoZXknbGwgYmUgcmUtZW5hYmxlZCBvbmx5IG9uY2UgYWxsIGFkZHJlc3MKKwkgKiBkZWNvZGVycyBhcmUgcHJvZ3JhbW1lZCBjb25zaXN0ZW50bHkuCisJICovCisKKwlEQkdfREVWUygoImxheW91dF9idXM6IGRpc2FibGVfZGV2IGZvciBidXMgJWRcbiIsIGJ1cy0+bnVtYmVyKSk7CisKKwlmb3IgKGRldiA9IGJ1cy0+ZGV2aWNlczsgZGV2OyBkZXYgPSBkZXYtPnNpYmxpbmcpCisJeworCQlpZiAoKGRldi0+Y2xhc3MgPj4gMTYgIT0gUENJX0JBU0VfQ0xBU1NfQlJJREdFKSB8fAorCQkgICAgKGRldi0+Y2xhc3MgPj4gOCA9PSBQQ0lfQ0xBU1NfQlJJREdFX1BDTUNJQSkpCisJCQlkaXNhYmxlX2RldihkZXYpOworCX0KKworCS8qCisJICogQWxsb2NhdGUgc3BhY2UgdG8gZWFjaCBkZXZpY2U6CisJICovCisKKwlEQkdfREVWUygoImxheW91dF9idXM6IHN0YXJ0aW5nIGJ1cyAlZCBkZXZpY2VzXG4iLCBidXMtPm51bWJlcikpOworCisJZm9yIChkZXYgPSBidXMtPmRldmljZXM7IGRldjsgZGV2ID0gZGV2LT5zaWJsaW5nKQorCXsKKwkJaWYgKChkZXYtPmNsYXNzID4+IDE2ICE9IFBDSV9CQVNFX0NMQVNTX0JSSURHRSkgfHwKKwkJICAgIChkZXYtPmNsYXNzID4+IDggPT0gUENJX0NMQVNTX0JSSURHRV9QQ01DSUEpKQorCQkJbGF5b3V0X2RldihkZXYpOworCX0KKworCURCR19ERVZTKCgibGF5b3V0X2J1czogYnVzICVkIGZpbmlzaGVkXG4iLCBidXMtPm51bWJlcikpOworfQorCisvKgorICogc3RhdGljIHZvaWQgcGNpYmlvc19maXh1cCh2b2lkKQorICoKKyAqIExheW91dCBtZW1vcnkgYW5kIEkvTyBvZiBhbGwgZGV2aWNlcyBvbiB0aGUgUENJIGJ1cyBpZiAncGNpX21vZGlmeScgaXMKKyAqIHRydWUuIFRoaXMgbWlnaHQgYmUgbmVjZXNzYXJ5IGJlY2F1c2Ugbm90IGV2ZXJ5IG02OGsgbWFjaGluZSB3aXRoIGEgUENJCisgKiBidXMgaGFzIGEgUENJIEJJT1MuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCByaWdodCBhZnRlcgorICogcGNpX3NjYW5fYnVzKCkgaW4gcGNpYmlvc19pbml0KCkuCisgKi8KKworc3RhdGljIHZvaWQgX19pbml0IHBjaWJpb3NfZml4dXAodm9pZCkKK3sKKwlpZiAocGNpX21vZGlmeSkKKwl7CisJCS8qCisJCSAqIFNldCBiYXNlIGFkZHJlc3NlcyBmb3IgYWxsb2NhdGlvbiBvZiBJL08gYW5kIG1lbW9yeSBzcGFjZS4KKwkJICovCisKKwkJaW9fYmFzZSA9IGJ1c19pbmZvLT5pb19zcGFjZS5zdGFydCArIElPX0FMTE9DX09GRlNFVDsKKwkJbWVtX2Jhc2UgPSBidXNfaW5mby0+bWVtX3NwYWNlLnN0YXJ0ICsgTUVNX0FMTE9DX09GRlNFVDsKKworCQkvKgorCQkgKiBTY2FuIHRoZSB0cmVlLCBhbGxvY2F0aW5nIFBDSSBtZW1vcnkgYW5kIEkvTyBzcGFjZS4KKwkJICovCisKKwkJbGF5b3V0X2J1cyhwY2lfYnVzX2IocGNpX3Jvb3QubmV4dCkpOworCX0KKworCS8qCisJICogRml4IGludGVycnVwdCBhc3NpZ25tZW50cywgZXRjLgorCSAqLworCisJYnVzX2luZm8tPmZpeHVwKHBjaV9tb2RpZnkpOworfQorCisvKgorICogc3RhdGljIHZvaWQgcGNpYmlvc19jbGFpbV9yZXNvdXJjZXMoc3RydWN0IHBjaV9idXMgKmJ1cykKKyAqCisgKiBDbGFpbSBhbGwgcmVzb3VyY2VzIHRoYXQgYXJlIGFzc2lnbmVkIHRvIGRldmljZXMgb24gdGhlIGdpdmVuIGJ1cy4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICoKKyAqIGJ1cwktIGJ1cy4KKyAqLworCitzdGF0aWMgdm9pZCBfX2luaXQgcGNpYmlvc19jbGFpbV9yZXNvdXJjZXMoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCWludCBpOworCisJd2hpbGUgKGJ1cykKKwl7CisJCWZvciAoZGV2ID0gYnVzLT5kZXZpY2VzOyAoZGV2ICE9IE5VTEwpOyBkZXYgPSBkZXYtPnNpYmxpbmcpCisJCXsKKwkJCWZvciAoaSA9IDA7IGkgPCBQQ0lfTlVNX1JFU09VUkNFUzsgaSsrKQorCQkJeworCQkJCXN0cnVjdCByZXNvdXJjZSAqciA9ICZkZXYtPnJlc291cmNlW2ldOworCQkJCXN0cnVjdCByZXNvdXJjZSAqcHI7CisJCQkJc3RydWN0IHBjaV9idXNfaW5mbyAqYnVzX2luZm8gPSAoc3RydWN0IHBjaV9idXNfaW5mbyAqKSBkZXYtPnN5c2RhdGE7CisKKwkJCQlpZiAoKHItPnN0YXJ0ID09IDApIHx8IChyLT5wYXJlbnQgIT0gTlVMTCkpCisJCQkJCWNvbnRpbnVlOworI2lmIDEKKwkJCQlpZiAoci0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQorCQkJCQlwciA9ICZidXNfaW5mby0+aW9fc3BhY2U7CisJCQkJZWxzZQorCQkJCQlwciA9ICZidXNfaW5mby0+bWVtX3NwYWNlOworI2Vsc2UKKwkJCQlpZiAoci0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKQorCQkJCQlwciA9ICZpb3BvcnRfcmVzb3VyY2U7CisJCQkJZWxzZQorCQkJCQlwciA9ICZpb21lbV9yZXNvdXJjZTsKKyNlbmRpZgorCQkJCWlmIChyZXF1ZXN0X3Jlc291cmNlKHByLCByKSA8IDApCisJCQkJeworCQkJCQlwcmludGsoS0VSTl9FUlIgIlBDSTogQWRkcmVzcyBzcGFjZSBjb2xsaXNpb24gb24gcmVnaW9uICVkIG9mIGRldmljZSAlc1xuIiwgaSwgZGV2LT5uYW1lKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoYnVzLT5jaGlsZHJlbikKKwkJCXBjaWJpb3NfY2xhaW1fcmVzb3VyY2VzKGJ1cy0+Y2hpbGRyZW4pOworCisJCWJ1cyA9IGJ1cy0+bmV4dDsKKwl9Cit9CisKKy8qCisgKiBpbnQgcGNpYmlvc19hc3NpZ25fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGkpCisgKgorICogQXNzaWduIGEgbmV3IGFkZHJlc3MgdG8gYSBQQ0kgcmVzb3VyY2UuCisgKgorICogUGFyYW1ldGVyczoKKyAqCisgKiBkZXYJLSBkZXZpY2UuCisgKiBpCS0gcmVzb3VyY2UuCisgKgorICogUmVzdWx0OiAwIGlmIHN1Y2Nlc3NmdWwuCisgKi8KKworaW50IF9faW5pdCBwY2liaW9zX2Fzc2lnbl9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSAmZGV2LT5yZXNvdXJjZVtpXTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnByID0gcGNpX2ZpbmRfcGFyZW50X3Jlc291cmNlKGRldiwgcik7CisJdW5zaWduZWQgbG9uZyBzaXplID0gci0+ZW5kICsgMTsKKworCWlmICghcHIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKKwl7CisJCWlmIChzaXplID4gMHgxMDApCisJCQlyZXR1cm4gLUVGQklHOworCisJCWlmIChhbGxvY2F0ZV9yZXNvdXJjZShwciwgciwgc2l6ZSwgYnVzX2luZm8tPmlvX3NwYWNlLnN0YXJ0ICsKKwkJCQkgICAgICBJT19BTExPQ19PRkZTRVQsICBidXNfaW5mby0+aW9fc3BhY2UuZW5kLCAxMDI0KSkKKwkJCXJldHVybiAtRUJVU1k7CisJfQorCWVsc2UKKwl7CisJCWlmIChhbGxvY2F0ZV9yZXNvdXJjZShwciwgciwgc2l6ZSwgYnVzX2luZm8tPm1lbV9zcGFjZS5zdGFydCArCisJCQkJICAgICAgTUVNX0FMTE9DX09GRlNFVCwgYnVzX2luZm8tPm1lbV9zcGFjZS5lbmQsIHNpemUpKQorCQkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAoaSA8IDYpCisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzAgKyA0ICogaSwgci0+c3RhcnQpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19pbml0IHBjaWJpb3NfZml4dXBfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwl2b2lkICpzeXNkYXRhOworCisJc3lzZGF0YSA9IChidXMtPnBhcmVudCkgPyBidXMtPnBhcmVudC0+c3lzZGF0YSA6IGJ1cy0+c3lzZGF0YTsKKworCWZvciAoZGV2ID0gYnVzLT5kZXZpY2VzOyAoZGV2ICE9IE5VTEwpOyBkZXYgPSBkZXYtPnNpYmxpbmcpCisJCWRldi0+c3lzZGF0YSA9IHN5c2RhdGE7Cit9CisKK3ZvaWQgX19pbml0IHBjaWJpb3NfaW5pdCh2b2lkKQoreworCXByaW50aygiTGludXgvbTY4ayBQQ0kgQklPUzMyIHJldmlzaW9uICV4LiUwMnhcbiIsIE1BSk9SX1JFViwgTUlOT1JfUkVWKTsKKworCWJ1c19pbmZvID0gTlVMTDsKKyNpZmRlZiBDT05GSUdfSEFERVMKKwlpZiAoTUFDSF9JU19IQURFUykKKwkJYnVzX2luZm8gPSBpbml0X2hhZGVzX3BjaSgpOworI2VuZGlmCisJaWYgKGJ1c19pbmZvICE9IE5VTEwpCisJeworCQlwcmludGsoIlBDSTogUHJvYmluZyBQQ0kgaGFyZHdhcmVcbiIpOworCQlwY2lfc2Nhbl9idXMoMCwgYnVzX2luZm8tPm02OGtfcGNpX29wcywgYnVzX2luZm8pOworCQlwY2liaW9zX2ZpeHVwKCk7CisJCXBjaWJpb3NfY2xhaW1fcmVzb3VyY2VzKHBjaV9yb290KTsKKwl9CisJZWxzZQorCQlwcmludGsoIlBDSTogTm8gUENJIGJ1cyBkZXRlY3RlZFxuIik7Cit9CisKK2NoYXIgKiBfX2luaXQgcGNpYmlvc19zZXR1cChjaGFyICpzdHIpCit7CisJaWYgKCFzdHJjbXAoc3RyLCAibm9tb2RpZnkiKSkKKwl7CisJCXBjaV9tb2RpZnkgPSAwOworCQlyZXR1cm4gTlVMTDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChzdHIsICJza2lwdmdhIikpCisJeworCQlza2lwX3ZnYSA9IDE7CisJCXJldHVybiBOVUxMOworCX0KKwllbHNlIGlmICghc3RyY21wKHN0ciwgIm5vYnVyc3QiKSkKKwl7CisJCWRpc2FibGVfcGNpX2J1cnN0ID0gMTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHN0cjsKK30KKyNlbmRpZiAvKiBDT05GSUdfUENJICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL2VudHJ5LlMgYi9hcmNoL202OGsva2VybmVsL2VudHJ5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk2NDAxNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvZW50cnkuUwpAQCAtMCwwICsxLDcxMiBAQAorLyogLSotIG1vZGU6IGFzbSAtKi0KKyAqCisgKiAgbGludXgvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TCisgKgorICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBSRUFETUUubGVnYWwgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBMaW51eC9tNjhrIHN1cHBvcnQgYnkgSGFtaXNoIE1hY2RvbmFsZAorICoKKyAqIDY4MDYwIGZpeGVzIGJ5IEplc3BlciBTa292CisgKgorICovCisKKy8qCisgKiBlbnRyeS5TICBjb250YWlucyB0aGUgc3lzdGVtLWNhbGwgYW5kIGZhdWx0IGxvdy1sZXZlbCBoYW5kbGluZyByb3V0aW5lcy4KKyAqIFRoaXMgYWxzbyBjb250YWlucyB0aGUgdGltZXItaW50ZXJydXB0IGhhbmRsZXIsIGFzIHdlbGwgYXMgYWxsIGludGVycnVwdHMKKyAqIGFuZCBmYXVsdHMgdGhhdCBjYW4gcmVzdWx0IGluIGEgdGFzay1zd2l0Y2guCisgKgorICogTk9URTogVGhpcyBjb2RlIGhhbmRsZXMgc2lnbmFsLXJlY29nbml0aW9uLCB3aGljaCBoYXBwZW5zIGV2ZXJ5IHRpbWUKKyAqIGFmdGVyIGEgdGltZXItaW50ZXJydXB0IGFuZCBhZnRlciBlYWNoIHN5c3RlbSBjYWxsLgorICoKKyAqLworCisvKgorICogMTIvMDMvOTYgSmVzOiBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IG02OGsgc2luZ2xlLWNwdSBzeXN0ZW1zLCBzbworICogICAgICAgICAgICAgICBhbGwgcG9pbnRlcnMgdGhhdCB1c2VkIHRvIGJlICdjdXJyZW50JyBhcmUgbm93IGVudHJ5CisgKiAgICAgICAgICAgICAgIG51bWJlciAwIGluIHRoZSAnY3VycmVudF9zZXQnIGxpc3QuCisgKgorICogIDYvMDUvMDAgUlo6CSBhZGRlZGQgd3JpdGViYWNrIGNvbXBsZXRpb24gYWZ0ZXIgcmV0dXJuIGZyb20gc2lnaGFuZGxlcgorICoJCSBmb3IgNjgwNDAKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9lbnRyeS5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorCisjaW5jbHVkZSA8YXNtL29mZnNldHMuaD4KKworLmdsb2JsIHN5c3RlbV9jYWxsLCBidXNlcnIsIHRyYXAKKy5nbG9ibCByZXN1bWUsIHJldF9mcm9tX2V4Y2VwdGlvbgorLmdsb2JsIHJldF9mcm9tX3NpZ25hbAorLmdsb2JsIGludGhhbmRsZXIsIHN5c19jYWxsX3RhYmxlCisuZ2xvYmwgc3lzX2ZvcmssIHN5c19jbG9uZSwgc3lzX3Zmb3JrCisuZ2xvYmwgcmV0X2Zyb21faW50ZXJydXB0LCBiYWRfaW50ZXJydXB0CisKKy50ZXh0CitFTlRSWShidXNlcnIpCisJU0FWRV9BTExfSU5UCisJR0VUX0NVUlJFTlQoJWQwKQorCW1vdmVsCSVzcCwlc3BALQkJfCBzdGFjayBmcmFtZSBwb2ludGVyIGFyZ3VtZW50CisJYnNybAlidXNlcnJfYworCWFkZHFsCSM0LCVzcAorCWpyYQlyZXRfZnJvbV9leGNlcHRpb24KKworRU5UUlkodHJhcCkKKwlTQVZFX0FMTF9JTlQKKwlHRVRfQ1VSUkVOVCglZDApCisJbW92ZWwJJXNwLCVzcEAtCQl8IHN0YWNrIGZyYW1lIHBvaW50ZXIgYXJndW1lbnQKKwlic3JsCXRyYXBfYworCWFkZHFsCSM0LCVzcAorCWpyYQlyZXRfZnJvbV9leGNlcHRpb24KKworCXwgQWZ0ZXIgYSBmb3JrIHdlIGp1bXAgaGVyZSBkaXJlY3RseSBmcm9tIHJlc3VtZSwKKwl8IHNvIHRoYXQgJWQxIGNvbnRhaW5zIHRoZSBwcmV2aW91cyB0YXNrCisJfCBzY2hlZHVsZV90YWlsIG5vdyB1c2VkIHJlZ2FyZGxlc3Mgb2YgQ09ORklHX1NNUAorRU5UUlkocmV0X2Zyb21fZm9yaykKKwltb3ZlbAklZDEsJXNwQC0KKwlqc3IJc2NoZWR1bGVfdGFpbAorCWFkZHFsCSM0LCVzcAorCWpyYQlyZXRfZnJvbV9leGNlcHRpb24KKworYmFkc3lzOgorCW1vdmVsCSMtRU5PU1lTLCVzcEAoUFRfRDApCisJanJhCXJldF9mcm9tX2V4Y2VwdGlvbgorCitkb190cmFjZToKKwltb3ZlbAkjLUVOT1NZUywlc3BAKFBUX0QwKQl8IG5lZWRlZCBmb3Igc3RyYWNlCisJc3VicWwJIzQsJXNwCisJU0FWRV9TV0lUQ0hfU1RBQ0sKKwlqYnNyCXN5c2NhbGxfdHJhY2UKKwlSRVNUT1JFX1NXSVRDSF9TVEFDSworCWFkZHFsCSM0LCVzcAorCW1vdmVsCSVzcEAoUFRfT1JJR19EMCksJWQxCisJbW92ZWwJIy1FTk9TWVMsJWQwCisJY21wbAkjTlJfc3lzY2FsbHMsJWQxCisJamNjCTFmCisJamJzcglAKHN5c19jYWxsX3RhYmxlLCVkMTpsOjQpQCgwKQorMToJbW92ZWwJJWQwLCVzcEAoUFRfRDApCQl8IHNhdmUgdGhlIHJldHVybiB2YWx1ZQorCXN1YnFsCSM0LCVzcAkJCXwgZHVtbXkgcmV0dXJuIGFkZHJlc3MKKwlTQVZFX1NXSVRDSF9TVEFDSworCWpic3IJc3lzY2FsbF90cmFjZQorCityZXRfZnJvbV9zaWduYWw6CisJUkVTVE9SRV9TV0lUQ0hfU1RBQ0sKKwlhZGRxbAkjNCwlc3AKKy8qIG9uIDY4MDQwIGNvbXBsZXRlIHBlbmRpbmcgd3JpdGViYWNrcyBpZiBhbnkgKi8KKyNpZmRlZiBDT05GSUdfTTY4MDQwCisJYmZleHR1CSVzcEAoUFRfVkVDVE9SKXsjMCwjNH0sJWQwCisJc3VicWwJIzcsJWQwCQkJCXwgYnVzIGVycm9yIGZyYW1lID8KKwlqYm5lCTFmCisJbW92ZWwJJXNwLCVzcEAtCisJamJzcgliZXJyXzA0MGNsZWFudXAKKwlhZGRxbAkjNCwlc3AKKzE6CisjZW5kaWYKKwlqcmEJcmV0X2Zyb21fZXhjZXB0aW9uCisKK0VOVFJZKHN5c3RlbV9jYWxsKQorCVNBVkVfQUxMX1NZUworCisJR0VUX0NVUlJFTlQoJWQxKQorCXwgc2F2ZSB0b3Agb2YgZnJhbWUKKwltb3ZlbAklc3AsJWN1cnB0ckAoVEFTS19USFJFQUQrVEhSRUFEX0VTUDApCisKKwl0c3RiCSVjdXJwdHJAKFRBU0tfU1lTQ0FMTF9UUkFDRSkKKwlqbmUJZG9fdHJhY2UKKwljbXBsCSNOUl9zeXNjYWxscywlZDAKKwlqY2MJYmFkc3lzCisJamJzcglAKHN5c19jYWxsX3RhYmxlLCVkMDpsOjQpQCgwKQorCW1vdmVsCSVkMCwlc3BAKFBUX0QwKQkJfCBzYXZlIHRoZSByZXR1cm4gdmFsdWUKKworCXxvcml3CSMweDA3MDAsJXNyCisJbW92ZWwJJWN1cnB0ckAoVEFTS19XT1JLKSwlZDAKKwlqbmUJc3lzY2FsbF9leGl0X3dvcmsKKzE6CVJFU1RPUkVfQUxMCisKK3N5c2NhbGxfZXhpdF93b3JrOgorCWJ0c3QJIzUsJXNwQChQVF9TUikJCXwgY2hlY2sgaWYgcmV0dXJuaW5nIHRvIGtlcm5lbAorCWJuZXMJMWIJCQl8IGlmIHNvLCBza2lwIHJlc2NoZWQsIHNpZ25hbHMKKwl0c3R3CSVkMAorCWplcQlkb19zaWduYWxfcmV0dXJuCisJdHN0YgklZDAKKwlqbmUJZG9fZGVsYXllZF90cmFjZQorCisJcGVhCXJlc3VtZV91c2Vyc3BhY2UKKwlqbXAJc2NoZWR1bGUKKworcmV0X2Zyb21fZXhjZXB0aW9uOgorCWJ0c3QJIzUsJXNwQChQVF9TUikJCXwgY2hlY2sgaWYgcmV0dXJuaW5nIHRvIGtlcm5lbAorCWJuZXMJMWYJCQl8IGlmIHNvLCBza2lwIHJlc2NoZWQsIHNpZ25hbHMKKwl8IG9ubHkgYWxsb3cgaW50ZXJydXB0cyB3aGVuIHdlIGFyZSByZWFsbHkgdGhlIGxhc3Qgb25lIG9uIHRoZQorCXwga2VybmVsIHN0YWNrLCBvdGhlcndpc2Ugc3RhY2sgb3ZlcmZsb3cgY2FuIG9jY3VyIGR1cmluZworCXwgaGVhdnkgaW50ZXJydXB0IGxvYWQKKwlhbmR3CSNBTExPV0lOVCwlc3IKKworcmVzdW1lX3VzZXJzcGFjZToKKwltb3ZlbAklY3VycHRyQChUQVNLX1dPUkspLCVkMAorCWxzcmwJIzgsJWQwCisJam5lCWV4aXRfd29yaworMToJUkVTVE9SRV9BTEwKKworZXhpdF93b3JrOgorCXwgc2F2ZSB0b3Agb2YgZnJhbWUKKwltb3ZlbAklc3AsJWN1cnB0ckAoVEFTS19USFJFQUQrVEhSRUFEX0VTUDApCisJdHN0YgklZDAKKwlqZXEJZG9fc2lnbmFsX3JldHVybgorCisJcGVhCXJlc3VtZV91c2Vyc3BhY2UKKwlqbXAJc2NoZWR1bGUKKworZG9fc2lnbmFsX3JldHVybjoKKwl8YW5kdwkjQUxMT1dJTlQsJXNyCisJc3VicWwJIzQsJXNwCQkJfCBkdW1teSByZXR1cm4gYWRkcmVzcworCVNBVkVfU1dJVENIX1NUQUNLCisJcGVhCSVzcEAoU1dJVENIX1NUQUNLX1NJWkUpCisJY2xybAklc3BALQorCWJzcmwJZG9fc2lnbmFsCisJYWRkcWwJIzgsJXNwCisJUkVTVE9SRV9TV0lUQ0hfU1RBQ0sKKwlhZGRxbAkjNCwlc3AKKwlqYnJhCXJlc3VtZV91c2Vyc3BhY2UKKworZG9fZGVsYXllZF90cmFjZToKKwliY2xyCSM3LCVzcEAoUFRfU1IpCQl8IGNsZWFyIHRyYWNlIGJpdCBpbiBTUgorCXBlYQkxCQkJfCBzZW5kIFNJR1RSQVAKKwltb3ZlbAklY3VycHRyLCVzcEAtCisJcGVhCUxTSUdUUkFQCisJamJzcglzZW5kX3NpZworCWFkZHFsCSM4LCVzcAorCWFkZHFsCSM0LCVzcAorCWpicmEJcmVzdW1lX3VzZXJzcGFjZQorCisKKyNpZiAwCisjaWZkZWYgQ09ORklHX0FNSUdBCithbWlfaW50aGFuZGxlcjoKKwlhZGRxbAkjMSxpcnFfc3RhdCtDUFVTVEFUX0xPQ0FMX0lSUV9DT1VOVAorCVNBVkVfQUxMX0lOVAorCUdFVF9DVVJSRU5UKCVkMCkKKworCWJmZXh0dQklc3BAKFBUX1ZFQ1RPUil7IzQsIzEyfSwlZDAKKwltb3ZlbAklZDAsJWEwCisJYWRkcWwJIzEsJWEwQChrc3RhdCtTVEFUX0lSUS1WRUNPRkYoVkVDX1NQVVIpKQorCW1vdmVsCSVhMEAoYXV0b2lycV9saXN0LVZFQ09GRihWRUNfU1BVUikpLCVhMAorCit8IGFtaWdhIHZlY3RvciBpbnQgaGFuZGxlciBnZXQgdGhlIHJlcSBtYXNrIGluc3RlYWQgb2YgaXJxIHZlY3RvcgorCWxlYQlDVVNUT01CQVNFLCVhMQorCW1vdmV3CSVhMUAoQ19JTlRSRVFSKSwlZDAKKwlhbmR3CSVhMUAoQ19JTlRFTkFSKSwlZDAKKworfCBwcmVwYXJlIHN0YWNrIChwdXNoIGZyYW1lIHBvaW50ZXIsIGRldl9pZCAmIHJlcSBtYXNrKQorCXBlYQklc3BACisJbW92ZWwJJWEwQChJUlFfREVWSUQpLCVzcEAtCisJbW92ZWwJJWQwLCVzcEAtCisJcGVhCSVwY0AocmV0X2Zyb21faW50ZXJydXB0OncpCisJamJyYQlAKElSUV9IQU5ETEVSLCVhMClAKDApCisKK0VOVFJZKG5taV9oYW5kbGVyKQorCXJ0ZQorI2VuZGlmCisjZW5kaWYKKworLyoKKyoqIFRoaXMgaXMgdGhlIG1haW4gaW50ZXJydXB0IGhhbmRsZXIsIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHByb2Nlc3NfaW50KCkKKyovCitpbnRoYW5kbGVyOgorCVNBVkVfQUxMX0lOVAorCUdFVF9DVVJSRU5UKCVkMCkKKwlhZGRxYgkjMSwlY3VycHRyQChUQVNLX0lORk8rVElORk9fUFJFRU1QVCsyKQorCQkJCQl8ICBwdXQgZXhjZXB0aW9uICMgaW4gZDAKKwliZmV4dHUgJXNwQChQVF9WRUNUT1IpeyM0LCMxMH0sJWQwCisKKwltb3ZlbAklc3AsJXNwQC0KKwltb3ZlbAklZDAsJXNwQC0JCXwgIHB1dCB2ZWN0b3IgIyBvbiBzdGFjaworI2lmIGRlZmluZWQoTUFDSF9RNDBfT05MWSkgJiYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9GRCkKKwlidHN0YgkjNCwweGZmMDAwMDAwCQl8IFE0MCBmbG9wcHkgbmVlZHMgdmVyeSBzcGVjaWFsIHRyZWF0bWVudCAuLi4KKwlqYmVxCTFmCisJYnRzdGIJIzMsMHhmZjAwMDAwNAorCWpiZXEJMWYKKwlqYnNyCWZsb3BweV9oYXJkaW50CisJamJyYQkzZgorMToKKyNlbmRpZgorCWpic3IJcHJvY2Vzc19pbnQJCXwgIHByb2Nlc3MgdGhlIElSUQorMzoJYWRkcWwJIzgsJXNwCQkJfCAgcG9wIHBhcmFtZXRlcnMgb2ZmIHN0YWNrCisKK3JldF9mcm9tX2ludGVycnVwdDoKKwlzdWJxYgkjMSwlY3VycHRyQChUQVNLX0lORk8rVElORk9fUFJFRU1QVCsyKQorCWplcQkxZgorMjoKKwlSRVNUT1JFX0FMTAorMToKKwltb3ZlcQkjKH5BTExPV0lOVD4+OCkmMHhmZiwlZDAKKwlhbmRiCSVzcEAoUFRfU1IpLCVkMAorCWpuZQkyYgorCisJLyogY2hlY2sgaWYgd2UgbmVlZCB0byBkbyBzb2Z0d2FyZSBpbnRlcnJ1cHRzICovCisJdHN0bAlpcnFfc3RhdCtDUFVTVEFUX1NPRlRJUlFfUEVORElORworCWplcQlyZXRfZnJvbV9leGNlcHRpb24KKwlwZWEJcmV0X2Zyb21fZXhjZXB0aW9uCisJanJhCWRvX3NvZnRpcnEKKworCisvKiBIYW5kbGVyIGZvciB1bmluaXRpYWxpemVkIGFuZCBzcHVyaW91cyBpbnRlcnJ1cHRzICovCisKK2JhZF9pbnRlcnJ1cHQ6CisJYWRkcWwJIzEsbnVtX3NwdXJpb3VzCisJcnRlCisKK0VOVFJZKHN5c19mb3JrKQorCVNBVkVfU1dJVENIX1NUQUNLCisJcGVhCSVzcEAoU1dJVENIX1NUQUNLX1NJWkUpCisJamJzcgltNjhrX2ZvcmsKKwlhZGRxbAkjNCwlc3AKKwlSRVNUT1JFX1NXSVRDSF9TVEFDSworCXJ0cworCitFTlRSWShzeXNfY2xvbmUpCisJU0FWRV9TV0lUQ0hfU1RBQ0sKKwlwZWEJJXNwQChTV0lUQ0hfU1RBQ0tfU0laRSkKKwlqYnNyCW02OGtfY2xvbmUKKwlhZGRxbAkjNCwlc3AKKwlSRVNUT1JFX1NXSVRDSF9TVEFDSworCXJ0cworCitFTlRSWShzeXNfdmZvcmspCisJU0FWRV9TV0lUQ0hfU1RBQ0sKKwlwZWEJJXNwQChTV0lUQ0hfU1RBQ0tfU0laRSkKKwlqYnNyCW02OGtfdmZvcmsKKwlhZGRxbAkjNCwlc3AKKwlSRVNUT1JFX1NXSVRDSF9TVEFDSworCXJ0cworCitFTlRSWShzeXNfc2lnc3VzcGVuZCkKKwlTQVZFX1NXSVRDSF9TVEFDSworCXBlYQklc3BAKFNXSVRDSF9TVEFDS19TSVpFKQorCWpic3IJZG9fc2lnc3VzcGVuZAorCWFkZHFsCSM0LCVzcAorCVJFU1RPUkVfU1dJVENIX1NUQUNLCisJcnRzCisKK0VOVFJZKHN5c19ydF9zaWdzdXNwZW5kKQorCVNBVkVfU1dJVENIX1NUQUNLCisJcGVhCSVzcEAoU1dJVENIX1NUQUNLX1NJWkUpCisJamJzcglkb19ydF9zaWdzdXNwZW5kCisJYWRkcWwJIzQsJXNwCisJUkVTVE9SRV9TV0lUQ0hfU1RBQ0sKKwlydHMKKworRU5UUlkoc3lzX3NpZ3JldHVybikKKwlTQVZFX1NXSVRDSF9TVEFDSworCWpic3IJZG9fc2lncmV0dXJuCisJUkVTVE9SRV9TV0lUQ0hfU1RBQ0sKKwlydHMKKworRU5UUlkoc3lzX3J0X3NpZ3JldHVybikKKwlTQVZFX1NXSVRDSF9TVEFDSworCWpic3IJZG9fcnRfc2lncmV0dXJuCisJUkVTVE9SRV9TV0lUQ0hfU1RBQ0sKKwlydHMKKworcmVzdW1lOgorCS8qCisJICogQmV3YXJlIC0gd2hlbiBlbnRlcmluZyByZXN1bWUsIHByZXYgKHRoZSBjdXJyZW50IHRhc2spIGlzCisJICogaW4gYTAsIG5leHQgKHRoZSBuZXcgdGFzaykgaXMgaW4gYTEsc28gZG9uJ3QgY2hhbmdlIHRoZXNlCisJICogcmVnaXN0ZXJzIHVudGlsIHRoZWlyIGNvbnRlbnRzIGFyZSBubyBsb25nZXIgbmVlZGVkLgorCSAqLworCisJLyogc2F2ZSBzciAqLworCW1vdmV3CSVzciwlYTBAKFRBU0tfVEhSRUFEK1RIUkVBRF9TUikKKworCS8qIHNhdmUgZnMgKHNmYywlZGZjKSAobWF5IGJlIHBvaW50aW5nIHRvIGtlcm5lbCBtZW1vcnkpICovCisJbW92ZWMJJXNmYywlZDAKKwltb3ZldwklZDAsJWEwQChUQVNLX1RIUkVBRCtUSFJFQURfRlMpCisKKwkvKiBzYXZlIHVzcCAqLworCS8qIGl0IGlzIGJldHRlciB0byB1c2UgYSBtb3ZlbCBoZXJlIGluc3RlYWQgb2YgYSBtb3ZldyA4KikgKi8KKwltb3ZlYwkldXNwLCVkMAorCW1vdmVsCSVkMCwlYTBAKFRBU0tfVEhSRUFEK1RIUkVBRF9VU1ApCisKKwkvKiBzYXZlIG5vbi1zY3JhdGNoIHJlZ2lzdGVycyBvbiBzdGFjayAqLworCVNBVkVfU1dJVENIX1NUQUNLCisKKwkvKiBzYXZlIGN1cnJlbnQga2VybmVsIHN0YWNrIHBvaW50ZXIgKi8KKwltb3ZlbAklc3AsJWEwQChUQVNLX1RIUkVBRCtUSFJFQURfS1NQKQorCisJLyogc2F2ZSBmbG9hdGluZyBwb2ludCBjb250ZXh0ICovCisjaWZuZGVmIENPTkZJR19NNjhLRlBVX0VNVV9PTkxZCisjaWZkZWYgQ09ORklHX002OEtGUFVfRU1VCisJdHN0bAltNjhrX2ZwdXR5cGUKKwlqZXEJM2YKKyNlbmRpZgorCWZzYXZlCSVhMEAoVEFTS19USFJFQUQrVEhSRUFEX0ZQU1RBVEUpCisKKyNpZiBkZWZpbmVkKENPTkZJR19NNjgwNjApCisjaWYgIWRlZmluZWQoQ1BVX002ODA2MF9PTkxZKQorCWJ0c3QJIzMsbTY4a19jcHV0eXBlKzMKKwliZXFzCTFmCisjZW5kaWYKKwkvKiBUaGUgMDYwIEZQVSBrZWVwcyBzdGF0dXMgaW4gYml0cyAxNS04IG9mIHRoZSBmaXJzdCBsb25nd29yZCAqLworCXRzdGIJJWEwQChUQVNLX1RIUkVBRCtUSFJFQURfRlBTVEFURSsyKQorCWplcQkzZgorI2lmICFkZWZpbmVkKENQVV9NNjgwNjBfT05MWSkKKwlqcmEJMmYKKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19NNjgwNjAgKi8KKyNpZiAhZGVmaW5lZChDUFVfTTY4MDYwX09OTFkpCisxOgl0c3RiCSVhMEAoVEFTS19USFJFQUQrVEhSRUFEX0ZQU1RBVEUpCisJamVxCTNmCisjZW5kaWYKKzI6CWZtb3ZlbXgJJWZwMC0lZnA3LCVhMEAoVEFTS19USFJFQUQrVEhSRUFEX0ZQUkVHKQorCWZtb3ZlbWwJJWZwY3IvJWZwc3IvJWZwaWFyLCVhMEAoVEFTS19USFJFQUQrVEhSRUFEX0ZQQ05UTCkKKzM6CisjZW5kaWYJLyogQ09ORklHX002OEtGUFVfRU1VX09OTFkgKi8KKwkvKiBSZXR1cm4gcHJldmlvdXMgdGFzayBpbiAlZDEgKi8KKwltb3ZlbAklY3VycHRyLCVkMQorCisJLyogc3dpdGNoIHRvIG5ldyB0YXNrIChhMSBjb250YWlucyBuZXcgdGFzaykgKi8KKwltb3ZlbAklYTEsJWN1cnB0cgorCisJLyogcmVzdG9yZSBmbG9hdGluZyBwb2ludCBjb250ZXh0ICovCisjaWZuZGVmIENPTkZJR19NNjhLRlBVX0VNVV9PTkxZCisjaWZkZWYgQ09ORklHX002OEtGUFVfRU1VCisJdHN0bAltNjhrX2ZwdXR5cGUKKwlqZXEJNGYKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX002ODA2MCkKKyNpZiAhZGVmaW5lZChDUFVfTTY4MDYwX09OTFkpCisJYnRzdAkjMyxtNjhrX2NwdXR5cGUrMworCWJlcXMJMWYKKyNlbmRpZgorCS8qIFRoZSAwNjAgRlBVIGtlZXBzIHN0YXR1cyBpbiBiaXRzIDE1LTggb2YgdGhlIGZpcnN0IGxvbmd3b3JkICovCisJdHN0YgklYTFAKFRBU0tfVEhSRUFEK1RIUkVBRF9GUFNUQVRFKzIpCisJamVxCTNmCisjaWYgIWRlZmluZWQoQ1BVX002ODA2MF9PTkxZKQorCWpyYQkyZgorI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX002ODA2MCAqLworI2lmICFkZWZpbmVkKENQVV9NNjgwNjBfT05MWSkKKzE6CXRzdGIJJWExQChUQVNLX1RIUkVBRCtUSFJFQURfRlBTVEFURSkKKwlqZXEJM2YKKyNlbmRpZgorMjoJZm1vdmVteAklYTFAKFRBU0tfVEhSRUFEK1RIUkVBRF9GUFJFRyksJWZwMC0lZnA3CisJZm1vdmVtbAklYTFAKFRBU0tfVEhSRUFEK1RIUkVBRF9GUENOVEwpLCVmcGNyLyVmcHNyLyVmcGlhcgorMzoJZnJlc3RvcmUgJWExQChUQVNLX1RIUkVBRCtUSFJFQURfRlBTVEFURSkKKzQ6CisjZW5kaWYJLyogQ09ORklHX002OEtGUFVfRU1VX09OTFkgKi8KKworCS8qIHJlc3RvcmUgdGhlIGtlcm5lbCBzdGFjayBwb2ludGVyICovCisJbW92ZWwJJWExQChUQVNLX1RIUkVBRCtUSFJFQURfS1NQKSwlc3AKKworCS8qIHJlc3RvcmUgbm9uLXNjcmF0Y2ggcmVnaXN0ZXJzICovCisJUkVTVE9SRV9TV0lUQ0hfU1RBQ0sKKworCS8qIHJlc3RvcmUgdXNlciBzdGFjayBwb2ludGVyICovCisJbW92ZWwJJWExQChUQVNLX1RIUkVBRCtUSFJFQURfVVNQKSwlYTAKKwltb3ZlbAklYTAsJXVzcAorCisJLyogcmVzdG9yZSBmcyAoc2ZjLCVkZmMpICovCisJbW92ZXcJJWExQChUQVNLX1RIUkVBRCtUSFJFQURfRlMpLCVhMAorCW1vdmVjCSVhMCwlc2ZjCisJbW92ZWMJJWEwLCVkZmMKKworCS8qIHJlc3RvcmUgc3RhdHVzIHJlZ2lzdGVyICovCisJbW92ZXcJJWExQChUQVNLX1RIUkVBRCtUSFJFQURfU1IpLCVzcgorCisJcnRzCisKKy5kYXRhCitBTElHTgorc3lzX2NhbGxfdGFibGU6CisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogMCAgLSAgb2xkICJzZXR1cCgpIiBzeXN0ZW0gY2FsbCovCisJLmxvbmcgc3lzX2V4aXQKKwkubG9uZyBzeXNfZm9yaworCS5sb25nIHN5c19yZWFkCisJLmxvbmcgc3lzX3dyaXRlCisJLmxvbmcgc3lzX29wZW4JCS8qIDUgKi8KKwkubG9uZyBzeXNfY2xvc2UKKwkubG9uZyBzeXNfd2FpdHBpZAorCS5sb25nIHN5c19jcmVhdAorCS5sb25nIHN5c19saW5rCisJLmxvbmcgc3lzX3VubGluawkvKiAxMCAqLworCS5sb25nIHN5c19leGVjdmUKKwkubG9uZyBzeXNfY2hkaXIKKwkubG9uZyBzeXNfdGltZQorCS5sb25nIHN5c19ta25vZAorCS5sb25nIHN5c19jaG1vZAkJLyogMTUgKi8KKwkubG9uZyBzeXNfY2hvd24xNgorCS5sb25nIHN5c19uaV9zeXNjYWxsCQkJCS8qIG9sZCBicmVhayBzeXNjYWxsIGhvbGRlciAqLworCS5sb25nIHN5c19zdGF0CisJLmxvbmcgc3lzX2xzZWVrCisJLmxvbmcgc3lzX2dldHBpZAkvKiAyMCAqLworCS5sb25nIHN5c19tb3VudAorCS5sb25nIHN5c19vbGR1bW91bnQKKwkubG9uZyBzeXNfc2V0dWlkMTYKKwkubG9uZyBzeXNfZ2V0dWlkMTYKKwkubG9uZyBzeXNfc3RpbWUJCS8qIDI1ICovCisJLmxvbmcgc3lzX3B0cmFjZQorCS5sb25nIHN5c19hbGFybQorCS5sb25nIHN5c19mc3RhdAorCS5sb25nIHN5c19wYXVzZQorCS5sb25nIHN5c191dGltZQkJLyogMzAgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJCQkvKiBvbGQgc3R0eSBzeXNjYWxsIGhvbGRlciAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCQkJCS8qIG9sZCBndHR5IHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgc3lzX2FjY2VzcworCS5sb25nIHN5c19uaWNlCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogMzUgKi8JLyogb2xkIGZ0aW1lIHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgc3lzX3N5bmMKKwkubG9uZyBzeXNfa2lsbAorCS5sb25nIHN5c19yZW5hbWUKKwkubG9uZyBzeXNfbWtkaXIKKwkubG9uZyBzeXNfcm1kaXIJCS8qIDQwICovCisJLmxvbmcgc3lzX2R1cAorCS5sb25nIHN5c19waXBlCisJLmxvbmcgc3lzX3RpbWVzCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogb2xkIHByb2Ygc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfYnJrCQkvKiA0NSAqLworCS5sb25nIHN5c19zZXRnaWQxNgorCS5sb25nIHN5c19nZXRnaWQxNgorCS5sb25nIHN5c19zaWduYWwKKwkubG9uZyBzeXNfZ2V0ZXVpZDE2CisJLmxvbmcgc3lzX2dldGVnaWQxNgkvKiA1MCAqLworCS5sb25nIHN5c19hY2N0CisJLmxvbmcgc3lzX3Vtb3VudAkJCQkvKiByZWN5Y2xlZCBuZXZlciB1c2VkIHBoeXMoKSAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCQkJCS8qIG9sZCBsb2NrIHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgc3lzX2lvY3RsCisJLmxvbmcgc3lzX2ZjbnRsCQkvKiA1NSAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCQkJCS8qIG9sZCBtcHggc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfc2V0cGdpZAorCS5sb25nIHN5c19uaV9zeXNjYWxsCQkJCS8qIG9sZCB1bGltaXQgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAorCS5sb25nIHN5c191bWFzawkJLyogNjAgKi8KKwkubG9uZyBzeXNfY2hyb290CisJLmxvbmcgc3lzX3VzdGF0CisJLmxvbmcgc3lzX2R1cDIKKwkubG9uZyBzeXNfZ2V0cHBpZAorCS5sb25nIHN5c19nZXRwZ3JwCS8qIDY1ICovCisJLmxvbmcgc3lzX3NldHNpZAorCS5sb25nIHN5c19zaWdhY3Rpb24KKwkubG9uZyBzeXNfc2dldG1hc2sKKwkubG9uZyBzeXNfc3NldG1hc2sKKwkubG9uZyBzeXNfc2V0cmV1aWQxNgkvKiA3MCAqLworCS5sb25nIHN5c19zZXRyZWdpZDE2CisJLmxvbmcgc3lzX3NpZ3N1c3BlbmQKKwkubG9uZyBzeXNfc2lncGVuZGluZworCS5sb25nIHN5c19zZXRob3N0bmFtZQorCS5sb25nIHN5c19zZXRybGltaXQJLyogNzUgKi8KKwkubG9uZyBzeXNfb2xkX2dldHJsaW1pdAorCS5sb25nIHN5c19nZXRydXNhZ2UKKwkubG9uZyBzeXNfZ2V0dGltZW9mZGF5CisJLmxvbmcgc3lzX3NldHRpbWVvZmRheQorCS5sb25nIHN5c19nZXRncm91cHMxNgkvKiA4MCAqLworCS5sb25nIHN5c19zZXRncm91cHMxNgorCS5sb25nIG9sZF9zZWxlY3QKKwkubG9uZyBzeXNfc3ltbGluaworCS5sb25nIHN5c19sc3RhdAorCS5sb25nIHN5c19yZWFkbGluawkvKiA4NSAqLworCS5sb25nIHN5c191c2VsaWIKKwkubG9uZyBzeXNfc3dhcG9uCisJLmxvbmcgc3lzX3JlYm9vdAorCS5sb25nIG9sZF9yZWFkZGlyCisJLmxvbmcgb2xkX21tYXAJCS8qIDkwICovCisJLmxvbmcgc3lzX211bm1hcAorCS5sb25nIHN5c190cnVuY2F0ZQorCS5sb25nIHN5c19mdHJ1bmNhdGUKKwkubG9uZyBzeXNfZmNobW9kCisJLmxvbmcgc3lzX2ZjaG93bjE2CS8qIDk1ICovCisJLmxvbmcgc3lzX2dldHByaW9yaXR5CisJLmxvbmcgc3lzX3NldHByaW9yaXR5CisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogb2xkIHByb2ZpbCBzeXNjYWxsIGhvbGRlciAqLworCS5sb25nIHN5c19zdGF0ZnMKKwkubG9uZyBzeXNfZnN0YXRmcwkvKiAxMDAgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJCQkvKiBpb3Blcm0gZm9yIGkzODYgKi8KKwkubG9uZyBzeXNfc29ja2V0Y2FsbAorCS5sb25nIHN5c19zeXNsb2cKKwkubG9uZyBzeXNfc2V0aXRpbWVyCisJLmxvbmcgc3lzX2dldGl0aW1lcgkvKiAxMDUgKi8KKwkubG9uZyBzeXNfbmV3c3RhdAorCS5sb25nIHN5c19uZXdsc3RhdAorCS5sb25nIHN5c19uZXdmc3RhdAorCS5sb25nIHN5c19uaV9zeXNjYWxsCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogMTEwICovCS8qIGlvcGwgZm9yIGkzODYgKi8KKwkubG9uZyBzeXNfdmhhbmd1cAorCS5sb25nIHN5c19uaV9zeXNjYWxsCQkJCS8qIG9ic29sZXRlIGlkbGUoKSBzeXNjYWxsICovCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogdm04Nm9sZCBmb3IgaTM4NiAqLworCS5sb25nIHN5c193YWl0NAorCS5sb25nIHN5c19zd2Fwb2ZmCS8qIDExNSAqLworCS5sb25nIHN5c19zeXNpbmZvCisJLmxvbmcgc3lzX2lwYworCS5sb25nIHN5c19mc3luYworCS5sb25nIHN5c19zaWdyZXR1cm4KKwkubG9uZyBzeXNfY2xvbmUJCS8qIDEyMCAqLworCS5sb25nIHN5c19zZXRkb21haW5uYW1lCisJLmxvbmcgc3lzX25ld3VuYW1lCisJLmxvbmcgc3lzX2NhY2hlZmx1c2gJCQkJLyogbW9kaWZ5X2xkdCBmb3IgaTM4NiAqLworCS5sb25nIHN5c19hZGp0aW1leAorCS5sb25nIHN5c19tcHJvdGVjdAkvKiAxMjUgKi8KKwkubG9uZyBzeXNfc2lncHJvY21hc2sKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogb2xkICJjcmVhdGVfbW9kdWxlIiAqLworCS5sb25nIHN5c19pbml0X21vZHVsZQorCS5sb25nIHN5c19kZWxldGVfbW9kdWxlCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogMTMwIC0gb2xkICJnZXRfa2VybmVsX3N5bXMiICovCisJLmxvbmcgc3lzX3F1b3RhY3RsCisJLmxvbmcgc3lzX2dldHBnaWQKKwkubG9uZyBzeXNfZmNoZGlyCisJLmxvbmcgc3lzX2JkZmx1c2gKKwkubG9uZyBzeXNfc3lzZnMJCS8qIDEzNSAqLworCS5sb25nIHN5c19wZXJzb25hbGl0eQorCS5sb25nIHN5c19uaV9zeXNjYWxsCQkJCS8qIGZvciBhZnNfc3lzY2FsbCAqLworCS5sb25nIHN5c19zZXRmc3VpZDE2CisJLmxvbmcgc3lzX3NldGZzZ2lkMTYKKwkubG9uZyBzeXNfbGxzZWVrCS8qIDE0MCAqLworCS5sb25nIHN5c19nZXRkZW50cworCS5sb25nIHN5c19zZWxlY3QKKwkubG9uZyBzeXNfZmxvY2sKKwkubG9uZyBzeXNfbXN5bmMKKwkubG9uZyBzeXNfcmVhZHYJCS8qIDE0NSAqLworCS5sb25nIHN5c193cml0ZXYKKwkubG9uZyBzeXNfZ2V0c2lkCisJLmxvbmcgc3lzX2ZkYXRhc3luYworCS5sb25nIHN5c19zeXNjdGwKKwkubG9uZyBzeXNfbWxvY2sJCS8qIDE1MCAqLworCS5sb25nIHN5c19tdW5sb2NrCisJLmxvbmcgc3lzX21sb2NrYWxsCisJLmxvbmcgc3lzX211bmxvY2thbGwKKwkubG9uZyBzeXNfc2NoZWRfc2V0cGFyYW0KKwkubG9uZyBzeXNfc2NoZWRfZ2V0cGFyYW0JLyogMTU1ICovCisJLmxvbmcgc3lzX3NjaGVkX3NldHNjaGVkdWxlcgorCS5sb25nIHN5c19zY2hlZF9nZXRzY2hlZHVsZXIKKwkubG9uZyBzeXNfc2NoZWRfeWllbGQKKwkubG9uZyBzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAorCS5sb25nIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWluICAvKiAxNjAgKi8KKwkubG9uZyBzeXNfc2NoZWRfcnJfZ2V0X2ludGVydmFsCisJLmxvbmcgc3lzX25hbm9zbGVlcAorCS5sb25nIHN5c19tcmVtYXAKKwkubG9uZyBzeXNfc2V0cmVzdWlkMTYKKwkubG9uZyBzeXNfZ2V0cmVzdWlkMTYJLyogMTY1ICovCisJLmxvbmcgc3lzX2dldHBhZ2VzaXplCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCS8qIG9sZCBzeXNfcXVlcnlfbW9kdWxlICovCisJLmxvbmcgc3lzX3BvbGwKKwkubG9uZyBzeXNfbmZzc2VydmN0bAorCS5sb25nIHN5c19zZXRyZXNnaWQxNgkvKiAxNzAgKi8KKwkubG9uZyBzeXNfZ2V0cmVzZ2lkMTYKKwkubG9uZyBzeXNfcHJjdGwKKwkubG9uZyBzeXNfcnRfc2lncmV0dXJuCisJLmxvbmcgc3lzX3J0X3NpZ2FjdGlvbgorCS5sb25nIHN5c19ydF9zaWdwcm9jbWFzawkvKiAxNzUgKi8KKwkubG9uZyBzeXNfcnRfc2lncGVuZGluZworCS5sb25nIHN5c19ydF9zaWd0aW1lZHdhaXQKKwkubG9uZyBzeXNfcnRfc2lncXVldWVpbmZvCisJLmxvbmcgc3lzX3J0X3NpZ3N1c3BlbmQKKwkubG9uZyBzeXNfcHJlYWQ2NAkvKiAxODAgKi8KKwkubG9uZyBzeXNfcHdyaXRlNjQKKwkubG9uZyBzeXNfbGNob3duMTY7CisJLmxvbmcgc3lzX2dldGN3ZAorCS5sb25nIHN5c19jYXBnZXQKKwkubG9uZyBzeXNfY2Fwc2V0CS8qIDE4NSAqLworCS5sb25nIHN5c19zaWdhbHRzdGFjaworCS5sb25nIHN5c19zZW5kZmlsZQorCS5sb25nIHN5c19uaV9zeXNjYWxsCQkJCS8qIHN0cmVhbXMxICovCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogc3RyZWFtczIgKi8KKwkubG9uZyBzeXNfdmZvcmsJCS8qIDE5MCAqLworCS5sb25nIHN5c19nZXRybGltaXQKKwkubG9uZyBzeXNfbW1hcDIKKwkubG9uZyBzeXNfdHJ1bmNhdGU2NAorCS5sb25nIHN5c19mdHJ1bmNhdGU2NAorCS5sb25nIHN5c19zdGF0NjQJLyogMTk1ICovCisJLmxvbmcgc3lzX2xzdGF0NjQKKwkubG9uZyBzeXNfZnN0YXQ2NAorCS5sb25nIHN5c19jaG93bgorCS5sb25nIHN5c19nZXR1aWQKKwkubG9uZyBzeXNfZ2V0Z2lkCS8qIDIwMCAqLworCS5sb25nIHN5c19nZXRldWlkCisJLmxvbmcgc3lzX2dldGVnaWQKKwkubG9uZyBzeXNfc2V0cmV1aWQKKwkubG9uZyBzeXNfc2V0cmVnaWQKKwkubG9uZyBzeXNfZ2V0Z3JvdXBzCS8qIDIwNSAqLworCS5sb25nIHN5c19zZXRncm91cHMKKwkubG9uZyBzeXNfZmNob3duCisJLmxvbmcgc3lzX3NldHJlc3VpZAorCS5sb25nIHN5c19nZXRyZXN1aWQKKwkubG9uZyBzeXNfc2V0cmVzZ2lkCS8qIDIxMCAqLworCS5sb25nIHN5c19nZXRyZXNnaWQKKwkubG9uZyBzeXNfbGNob3duCisJLmxvbmcgc3lzX3NldHVpZAorCS5sb25nIHN5c19zZXRnaWQKKwkubG9uZyBzeXNfc2V0ZnN1aWQJLyogMjE1ICovCisJLmxvbmcgc3lzX3NldGZzZ2lkCisJLmxvbmcgc3lzX3Bpdm90X3Jvb3QKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAorCS5sb25nIHN5c19uaV9zeXNjYWxsCisJLmxvbmcgc3lzX2dldGRlbnRzNjQJLyogMjIwICovCisJLmxvbmcgc3lzX2dldHRpZAorCS5sb25nIHN5c190a2lsbAorCS5sb25nIHN5c19zZXR4YXR0cgorCS5sb25nIHN5c19sc2V0eGF0dHIKKwkubG9uZyBzeXNfZnNldHhhdHRyCS8qIDIyNSAqLworCS5sb25nIHN5c19nZXR4YXR0cgorCS5sb25nIHN5c19sZ2V0eGF0dHIKKwkubG9uZyBzeXNfZmdldHhhdHRyCisJLmxvbmcgc3lzX2xpc3R4YXR0cgorCS5sb25nIHN5c19sbGlzdHhhdHRyCS8qIDIzMCAqLworCS5sb25nIHN5c19mbGlzdHhhdHRyCisJLmxvbmcgc3lzX3JlbW92ZXhhdHRyCisJLmxvbmcgc3lzX2xyZW1vdmV4YXR0cgorCS5sb25nIHN5c19mcmVtb3ZleGF0dHIKKwkubG9uZyBzeXNfZnV0ZXgJCS8qIDIzNSAqLworCS5sb25nIHN5c19zZW5kZmlsZTY0CisJLmxvbmcgc3lzX21pbmNvcmUKKwkubG9uZyBzeXNfbWFkdmlzZQorCS5sb25nIHN5c19mY250bDY0CisJLmxvbmcgc3lzX3JlYWRhaGVhZAkvKiAyNDAgKi8KKwkubG9uZyBzeXNfaW9fc2V0dXAKKwkubG9uZyBzeXNfaW9fZGVzdHJveQorCS5sb25nIHN5c19pb19nZXRldmVudHMKKwkubG9uZyBzeXNfaW9fc3VibWl0CisJLmxvbmcgc3lzX2lvX2NhbmNlbAkvKiAyNDUgKi8KKwkubG9uZyBzeXNfZmFkdmlzZTY0CisJLmxvbmcgc3lzX2V4aXRfZ3JvdXAKKwkubG9uZyBzeXNfbG9va3VwX2Rjb29raWUKKwkubG9uZyBzeXNfZXBvbGxfY3JlYXRlCisJLmxvbmcgc3lzX2Vwb2xsX2N0bAkvKiAyNTAgKi8KKwkubG9uZyBzeXNfZXBvbGxfd2FpdAorCS5sb25nIHN5c19yZW1hcF9maWxlX3BhZ2VzCisJLmxvbmcgc3lzX3NldF90aWRfYWRkcmVzcworCS5sb25nIHN5c190aW1lcl9jcmVhdGUKKwkubG9uZyBzeXNfdGltZXJfc2V0dGltZQkvKiAyNTUgKi8KKwkubG9uZyBzeXNfdGltZXJfZ2V0dGltZQorCS5sb25nIHN5c190aW1lcl9nZXRvdmVycnVuCisJLmxvbmcgc3lzX3RpbWVyX2RlbGV0ZQorCS5sb25nIHN5c19jbG9ja19zZXR0aW1lCisJLmxvbmcgc3lzX2Nsb2NrX2dldHRpbWUJLyogMjYwICovCisJLmxvbmcgc3lzX2Nsb2NrX2dldHJlcworCS5sb25nIHN5c19jbG9ja19uYW5vc2xlZXAKKwkubG9uZyBzeXNfc3RhdGZzNjQKKwkubG9uZyBzeXNfZnN0YXRmczY0CisJLmxvbmcgc3lzX3Rna2lsbAkvKiAyNjUgKi8KKwkubG9uZyBzeXNfdXRpbWVzCisJLmxvbmcgc3lzX2ZhZHZpc2U2NF82NAorCS5sb25nIHN5c19tYmluZAkKKwkubG9uZyBzeXNfZ2V0X21lbXBvbGljeQorCS5sb25nIHN5c19zZXRfbWVtcG9saWN5CS8qIDI3MCAqLworCS5sb25nIHN5c19tcV9vcGVuCisJLmxvbmcgc3lzX21xX3VubGluaworCS5sb25nIHN5c19tcV90aW1lZHNlbmQKKwkubG9uZyBzeXNfbXFfdGltZWRyZWNlaXZlCisJLmxvbmcgc3lzX21xX25vdGlmeQkvKiAyNzUgKi8KKwkubG9uZyBzeXNfbXFfZ2V0c2V0YXR0cgorCS5sb25nIHN5c193YWl0aWQKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBmb3Igc3lzX3ZzZXJ2ZXIgKi8KKwkubG9uZyBzeXNfYWRkX2tleQorCS5sb25nIHN5c19yZXF1ZXN0X2tleQkvKiAyODAgKi8KKwkubG9uZyBzeXNfa2V5Y3RsCisKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvaGVhZC5TIGIvYXJjaC9tNjhrL2tlcm5lbC9oZWFkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NkNmRlMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvaGVhZC5TCkBAIC0wLDAgKzEsMzk0MCBAQAorLyogLSotIG1vZGU6IGFzbSAtKi0KKyoqCisqKiBoZWFkLlMgLS0gVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBpbml0aWFsIGJvb3QgY29kZSBmb3IgdGhlCisqKgkgICAgIExpbnV4LzY4ayBrZXJuZWwuCisqKgorKiogQ29weXJpZ2h0IDE5OTMgYnkgSGFtaXNoIE1hY2RvbmFsZAorKioKKyoqIDY4MDQwIGZpeGVzIGJ5IE1pY2hhZWwgUmF1c2NoCisqKiA2ODA2MCBmaXhlcyBieSBSb21hbiBIb2RlaworKiogTU1VIGNsZWFudXAgYnkgUmFuZHkgVGhlbGVuCisqKiBGaW5hbCBNTVUgY2xlYW51cCBieSBSb21hbiBaaXBwZWwKKyoqCisqKiBBdGFyaSBzdXBwb3J0IGJ5IEFuZHJlYXMgU2Nod2FiLCB1c2luZyBpZGVhcyBvZiBSb2JlcnQgZGUgVnJpZXMKKyoqIGFuZCBCam9lcm4gQnJhdWVsCisqKiBWTUUgU3VwcG9ydCBieSBSaWNoYXJkIEhpcnN0CisqKgorKiogOTQvMTEvMTQgQW5kcmVhcyBTY2h3YWI6IHB1dCBrZXJuZWwgYXQgUEFHRVNJWkUKKyoqIDk0LzExLzE4IEFuZHJlYXMgU2Nod2FiOiByZW1vdmUgaWRlbnRpdHkgbWFwcGluZyBvZiBTVFJBTSBmb3IgQXRhcmkKKyoqICsrIEJqb2VybiAmIFJvbWFuOiBBVEFSSS02ODA0MCBzdXBwb3J0IGZvciB0aGUgTWVkdXNhCisqKiA5NS8xMS8xOCBSaWNoYXJkIEhpcnN0OiBBZGRlZCBNVk1FMTY2IHN1cHBvcnQKKyoqIDk2LzA0LzI2IEd1ZW50aGVyIEtlbGxldGVyOiBmaXhlZCBpZGVudGl0eSBtYXBwaW5nIGZvciBGYWxjb24gd2l0aAorKioJCQkgICAgICBNYWdudW0tIGFuZCBGWC1hbHRlcm5hdGUgcmFtCisqKiA5OC8wNC8yNSBQaGlsIEJsdW5kZWxsOiBhZGRlZCBIUDMwMCBzdXBwb3J0CisqKiAxOTk4LzA4LzMwIERhdmlkIEtpbHplcjogQWRkZWQgc3VwcG9ydCBmb3IgZm9udF9kZXNjIHN0cnVjdHVyZXMKKyoqICAgICAgICAgICAgZm9yIGxpbnV4LTIuMS4xMTUKKyoqIDkvMDIvMTEgIFJpY2hhcmQgWmlkbGlja3k6IGFkZGVkIFE0MCBzdXBwb3J0IChpbml0aWFsIHZlc2lvbiA5OS8wMS8wMSkKKyoqIDIwMDQvMDUvMTMgS2FycyBkZSBKb25nOiBGaW5hbGlzZWQgSFAzMDAgc3VwcG9ydAorKioKKyoqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisqKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgUkVBRE1FLmxlZ2FsIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyoqIGZvciBtb3JlIGRldGFpbHMuCisqKgorKi8KKworLyoKKyAqIExpbnV4IHN0YXJ0dXAgY29kZS4KKyAqCisgKiBBdCB0aGlzIHBvaW50LCB0aGUgYm9vdCBsb2FkZXIgaGFzOgorICogRGlzYWJsZWQgaW50ZXJydXB0cworICogRGlzYWJsZWQgY2FjaGVzCisgKiBQdXQgdXMgaW4gc3VwZXJ2aXNvciBzdGF0ZS4KKyAqCisgKiBUaGUga2VybmVsIHNldHVwIGNvZGUgdGFrZXMgdGhlIGZvbGxvd2luZyBzdGVwczoKKyAqIC4gIFJhaXNlIGludGVycnVwdCBsZXZlbAorICogLiAgU2V0IHVwIGluaXRpYWwga2VybmVsIG1lbW9yeSBtYXBwaW5nLgorICogICAgLiAgVGhpcyBzZXRzIHVwIGEgbWFwcGluZyBvZiB0aGUgNE0gb2YgbWVtb3J5IHRoZSBrZXJuZWwgaXMgbG9jYXRlZCBpbi4KKyAqICAgIC4gIEl0IGFsc28gZG9lcyBhIG1hcHBpbmcgb2YgYW55IGluaXRpYWwgbWFjaGluZSBzcGVjaWZpYyBhcmVhcy4KKyAqIC4gIEVuYWJsZSB0aGUgTU1VCisgKiAuICBFbmFibGUgY2FjaGUgbWVtb3JpZXMKKyAqIC4gIEp1bXAgdG8ga2VybmVsIHN0YXJ0dXAKKyAqCisgKiBNdWNoIG9mIHRoZSBmaWxlIHJlc3RydWN0dXJpbmcgd2FzIHRvIGFjY29tcGxpc2g6CisgKiAxKSBSZW1vdmUgcmVnaXN0ZXIgZGVwZW5kZW5jeSB0aHJvdWdoLW91dCB0aGUgZmlsZS4KKyAqIDIpIEluY3JlYXNlIHVzZSBvZiBzdWJyb3V0aW5lcyB0byBwZXJmb3JtIGZ1bmN0aW9ucworICogMykgSW5jcmVhc2UgcmVhZGFiaWxpdHkgb2YgdGhlIGNvZGUKKyAqCisgKiBPZiBjb3Vyc2UsIHJlYWRhYmlsaXR5IGlzIGEgc3ViamVjdGl2ZSBpc3N1ZSwgc28gaXQgd2lsbCBuZXZlciBiZQorICogYXJndWVkIHRoYXQgdGhhdCBnb2FsIHdhcyBhY2NvbXBsaXNoZWQuICBJdCB3YXMgbWVyZWx5IGEgZ29hbC4KKyAqIEEga2V5IHdheSB0byBoZWxwIG1ha2UgY29kZSBtb3JlIHJlYWRhYmxlIGlzIHRvIGdpdmUgZ29vZAorICogZG9jdW1lbnRhdGlvbi4gIFNvLCB0aGUgZmlyc3QgdGhpbmcgeW91IHdpbGwgZmluZCBpcyBleGF1c3RpdmUKKyAqIHdyaXRlLXVwcyBvbiB0aGUgc3RydWN0dXJlIG9mIHRoZSBmaWxlLCBhbmQgdGhlIGZlYXR1cmVzIG9mIHRoZQorICogZnVuY3Rpb25hbCBzdWJyb3V0aW5lcy4KKyAqCisgKiBHZW5lcmFsIFN0cnVjdHVyZToKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLQorICoJV2l0aG91dCBhIGRvdWJ0IHRoZSBzaW5nbGUgbGFyZ2VzdCBjaHVuayBvZiBoZWFkLlMgaXMgc3BlbnQKKyAqIG1hcHBpbmcgdGhlIGtlcm5lbCBhbmQgSS9PIHBoeXNpY2FsIHNwYWNlIGludG8gdGhlIGxvZ2ljYWwgcmFuZ2UKKyAqIGZvciB0aGUga2VybmVsLgorICoJVGhlcmUgYXJlIG5ldyBzdWJyb3V0aW5lcyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHRvIG1ha2UgTU1VCisgKiBzdXBwb3J0IGNsZWFuZXIgYW5kIGVhc2llciB0byB1bmRlcnN0YW5kLgorICoJRmlyc3QsIHlvdSB3aWxsIGZpbmQgYSByb3V0aW5lIGNhbGwgIm1tdV9tYXAiIHdoaWNoIG1hcHMKKyAqIGEgbG9naWNhbCB0byBhIHBoeXNpY2FsIHJlZ2lvbiBmb3Igc29tZSBsZW5ndGggZ2l2ZW4gYSBjYWNoZQorICogdHlwZSBvbiBiZWhhbGYgb2YgdGhlIGNhbGxlci4gIFRoaXMgcm91dGluZSBtYWtlcyB3cml0aW5nIHRoZQorICogYWN0dWFsIHBlci1tYWNoaW5lIHNwZWNpZmljIGNvZGUgdmVyeSBzaW1wbGUuCisgKglBIGNlbnRyYWwgcGFydCBvZiB0aGUgY29kZSwgYnV0IG5vdCBhIHN1YnJvdXRpbmUgaW4gaXRzZWxmLAorICogaXMgdGhlIG1tdV9pbml0IGNvZGUgd2hpY2ggaXMgYnJva2VuIGRvd24gaW50byBtYXBwaW5nIHRoZSBrZXJuZWwKKyAqICh0aGUgc2FtZSBmb3IgYWxsIG1hY2hpbmVzKSBhbmQgbWFwcGluZyBtYWNoaW5lLXNwZWNpZmljIEkvTworICogcmVnaW9ucy4KKyAqCUFsc28sIHRoZXJlIHdpbGwgYmUgYSBkZXNjcmlwdGlvbiBvZiBlbmdhZ2luZyB0aGUgTU1VIGFuZAorICogY2FjaGVzLgorICoJWW91IHdpbGwgbm90aWNlIHRoYXQgdGhlcmUgaXMgYSBjaHVuayBvZiBjb2RlIHdoaWNoCisgKiBjYW4gZW1pdCB0aGUgZW50aXJlIE1NVSBtYXBwaW5nIG9mIHRoZSBtYWNoaW5lLiAgVGhpcyBpcyBwcmVzZW50CisgKiBvbmx5IGluIGRlYnVnIG1vZGVzIGFuZCBjYW4gYmUgdmVyeSBoZWxwZnVsLgorICoJRnVydGhlciwgdGhlcmUgaXMgYSBuZXcgY29uc29sZSBkcml2ZXIgaW4gaGVhZC5TIHRoYXQgaXMKKyAqIGFsc28gb25seSBlbmdhZ2VkIGluIGRlYnVnIG1vZGUuICBDdXJyZW50bHksIGl0J3Mgb25seSBzdXBwb3J0ZWQKKyAqIG9uIHRoZSBNYWNpbnRvc2ggY2xhc3Mgb2YgbWFjaGluZXMuICBIb3dldmVyLCBpdCBpcyBob3BlZCB0aGF0CisgKiBvdGhlcnMgd2lsbCBwbHVnLWluIHN1cHBvcnQgZm9yIHNwZWNpZmljIG1hY2hpbmVzLgorICoKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqCisgKiBtbXVfbWFwCisgKiAtLS0tLS0tCisgKgltbXVfbWFwIHdhcyB3cml0dGVuIGZvciB0d28ga2V5IHJlYXNvbnMuICBGaXJzdCwgaXQgd2FzIGNsZWFyCisgKiB0aGF0IGl0IHdhcyB2ZXJ5IGRpZmZpY3VsdCB0byByZWFkIHRoZSBwcmV2aW91cyBjb2RlIGZvciBtYXBwaW5nCisgKiByZWdpb25zIG9mIG1lbW9yeS4gIFNlY29uZCwgdGhlIE1hY2ludG9zaCByZXF1aXJlZCBzdWNoIGV4dGVuc2l2ZQorICogbWVtb3J5IGFsbG9jYXRpb25zIHRoYXQgaXQgZGlkbid0IG1ha2Ugc2Vuc2UgdG8gcHJvcGFnYXRlIHRoZQorICogZXhpc3RpbmcgY29kZSBhbnkgZnVydGhlci4KKyAqCW1tdV9tYXAgcmVxdWlyZXMgc29tZSBwYXJhbWV0ZXJzOgorICoKKyAqCW1tdV9tYXAgKGxvZ2ljYWwsIHBoeXNpY2FsLCBsZW5ndGgsIGNhY2hlX3R5cGUpCisgKgorICoJV2hpbGUgdGhpcyBlc3NlbnRpYWxseSBkZXNjcmliZXMgdGhlIGZ1bmN0aW9uIGluIHRoZSBhYnN0cmFjdCwgeW91J2xsCisgKiBmaW5kIG1vcmUgaW5kZXB0aCBkZXNjcmlwdGlvbiBvZiBvdGhlciBwYXJhbWV0ZXJzIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBzaXRlLgorICoKKyAqIG1tdV9nZXRfcm9vdF90YWJsZV9lbnRyeQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBtbXVfZ2V0X3B0cl90YWJsZV9lbnRyeQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIG1tdV9nZXRfcGFnZV90YWJsZV9lbnRyeQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICoJVGhlc2Ugcm91dGluZXMgYXJlIHVzZWQgYnkgb3RoZXIgbW11IHJvdXRpbmVzIHRvIGdldCBhIHBvaW50ZXIgaW50bworICogYSB0YWJsZSwgaWYgbmVjZXNzYXJ5IGEgbmV3IHRhYmxlIGlzIGFsbG9jYXRlZC4gVGhlc2Ugcm91dGluZXMgYXJlIHdvcmtpbmcKKyAqIGJhc2ljYWxseSBsaWtlIHBtZF9hbGxvYygpIGFuZCBwdGVfYWxsb2MoKSBpbiA8YXNtL3BndGFibGUuaD4uIFRoZSByb290CisgKiB0YWJsZSBuZWVkcyBvZiBjb3Vyc2Ugb25seSB0byBiZSBhbGxvY2F0ZWQgb25jZSBpbiBtbXVfZ2V0X3Jvb3RfdGFibGVfZW50cnksCisgKiBzbyB0aGF0IGhlcmUgYWxzbyBzb21lIG1tdSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBpcyBkb25lLiBUaGUgc2Vjb25kIHBhZ2UKKyAqIGF0IHRoZSBzdGFydCBvZiB0aGUga2VybmVsICh0aGUgZmlyc3QgcGFnZSBpcyB1bm1hcHBlZCBsYXRlcikgaXMgdXNlZCBmb3IKKyAqIHRoZSBrZXJuZWxfcGdfZGlyLiBJdCBtdXN0IGJlIGF0IGEgcG9zaXRpb24ga25vd24gYXQgbGluayB0aW1lIChhcyBpdCdzIHVzZWQKKyAqIHRvIGluaXRpYWxpemUgdGhlIGluaXQgdGFzayBzdHJ1Y3QpIGFuZCBzaW5jZSBpdCBuZWVkcyBzcGVjaWFsIGNhY2hlCisgKiBzZXR0aW5ncywgaXQncyB0aGUgZWFzaWVzdCB0byB1c2UgdGhpcyBwYWdlLCB0aGUgcmVzdCBvZiB0aGUgcGFnZSBpcyB1c2VkCisgKiBmb3IgZnVydGhlciBwb2ludGVyIHRhYmxlcy4KKyAqIG1tdV9nZXRfcGFnZV90YWJsZV9lbnRyeSBhbGxvY2F0ZXMgYWx3YXlzIGEgd2hvbGUgcGFnZSBmb3IgcGFnZSB0YWJsZXMsIHRoaXMKKyAqIG1lYW5zIDEwMjQgcGFnZXMgYW5kIHNvIDRNQiBvZiBtZW1vcnkgY2FuIGJlIG1hcHBlZC4gSXQgZG9lc24ndCBtYWtlIHNlbnNlCisgKiB0byBtYW5hZ2UgcGFnZSB0YWJsZXMgaW4gc21hbGxlciBwaWVjZXMgYXMgbmVhcmx5IGFsbCBtYXBwaW5ncyBoYXZlIHRoYXQKKyAqIHNpemUuCisgKgorICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICoKKyAqCisgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKgorICogbW11X2VuZ2FnZQorICogLS0tLS0tLS0tLQorICoJVGhhbmtzIHRvIGEgc21hbGwgaGVscGluZyByb3V0aW5lIGVuYWJsaW5nIHRoZSBtbXUgZ290IHF1aXRlIHNpbXBsZQorICogYW5kIHRoZXJlIGlzIG9ubHkgb25lIHdheSBsZWZ0LiBtbXVfZW5nYWdlIG1ha2VzIGEgY29tcGxldGUgYSBuZXcgbWFwcGluZworICogdGhhdCBvbmx5IGluY2x1ZGVzIHRoZSBhYnNvbHV0ZSBuZWNlc3NhcnkgdG8gYmUgYWJsZSB0byBqdW1wIHRvIHRoZSBmaW5hbAorICogcG9zdGlvbiBhbmQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgbWFwcGluZy4KKyAqIEFzIHRoaXMgY29kZSBkb2Vzbid0IG5lZWQgYSB0cmFuc3BhcmVudCB0cmFuc2xhdGlvbiByZWdpc3RlciBhbnltb3JlIHRoaXMKKyAqIG1lYW5zIGFsbCByZWdpc3RlcnMgYXJlIGZyZWUgdG8gYmUgdXNlZCBieSBtYWNoaW5lcyB0aGF0IG5lZWRzIHRoZW0gZm9yCisgKiBvdGhlciBwdXJwb3Nlcy4KKyAqCisgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKgorICogbW11X3ByaW50CisgKiAtLS0tLS0tLS0KKyAqCVRoaXMgYWxnb3JpdGhtIHdpbGwgcHJpbnQgb3V0IHRoZSBwYWdlIHRhYmxlcyBvZiB0aGUgc3lzdGVtIGFzCisgKiBhcHByb3ByaWF0ZSBmb3IgYW4gMDMwIG9yIGFuIDA0MC4gIFRoaXMgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKKyAqIGFuZCBhcyBzdWNoIGlzIGVuY2xvc2VkIGluICNpZmRlZiBNTVVfUFJJTlQvI2VuZGlmIGNsYXVzZXMuCisgKgorICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICoKKyAqIGNvbnNvbGVfaW5pdAorICogLS0tLS0tLS0tLS0tCisgKglUaGUgY29uc29sZSBpcyBhbHNvIGFibGUgdG8gYmUgdHVybmVkIG9mZi4gIFRoZSBjb25zb2xlIGluIGhlYWQuUworICogaXMgc3BlY2lmaWNhbGx5IGZvciBkZWJ1Z2dpbmcgYW5kIGNhbiBiZSB2ZXJ5IHVzZWZ1bC4gIEl0IGlzIHN1cnJvdW5kZWQgYnkKKyAqICNpZmRlZiBDT05TT0xFLyNlbmRpZiBjbGF1c2VzIHNvIGl0IGRvZXNuJ3QgaGF2ZSB0byBzaGlwIGluIGtub3duLWdvb2QKKyAqIGtlcm5lbHMuICBJdCdzIGJhc2ljIGFsZ29yaXRobSBpcyB0byBkZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlIHNjcmVlbgorICogKGluIGhlaWdodC93aWR0aCBhbmQgYml0IGRlcHRoKSBhbmQgdGhlbiB1c2UgdGhhdCBpbmZvcm1hdGlvbiBmb3IKKyAqIGRpc3BsYXlpbmcgYW4gOHg4IGZvbnQgb3IgYW4gOHgxNiAod2lkdGh4aGVpZ2h0KS4gIEkgcHJlZmVyIHRoZSA4eDggZm9yCisgKiBkZWJ1Z2dpbmcgc28gSSBjYW4gc2VlIG1vcmUgZ29vZCBkYXRhLiAgQnV0IGl0IHdhcyB0cml2aWFsIHRvIGFkZCBzdXBwb3J0CisgKiBmb3IgYm90aCBmb250cywgc28gSSBpbmNsdWRlZCBpdC4KKyAqCUFsc28sIHRoZSBhbGdvcml0aG0gZm9yIHBsb3R0aW5nIHBpeGVscyBpcyBhYnN0cmFjdGVkIHNvIHRoYXQgaW4KKyAqIHRoZW9yeSBvdGhlciBwbGF0Zm9ybXMgY291bGQgYWRkIHN1cHBvcnQgZm9yIGRpZmZlcmVudCBraW5kcyBvZiBmcmFtZQorICogYnVmZmVycy4gIFRoaXMgY291bGQgYmUgdmVyeSB1c2VmdWwuCisgKgorICogY29uc29sZV9wdXRfcGVuZ3VpbgorICogLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJQW4gaW1wb3J0YW50IHBhcnQgb2YgYW55IExpbnV4IGJyaW5nIHVwIGlzIHRoZSBwZW5ndWluIGFuZCB0aGVyZSdzCisgKiBub3RoaW5nIGxpa2UgZ2V0dGluZyB0aGUgUGVuZ3VpbiBvbiB0aGUgc2NyZWVuISAgVGhpcyBhbGdvcml0aG0gd2lsbCB3b3JrCisgKiBvbiBhbnkgbWFjaGluZSBmb3Igd2hpY2ggdGhlcmUgaXMgYSBjb25zb2xlX3Bsb3RfcGl4ZWwuCisgKgorICogY29uc29sZV9zY3JvbGwKKyAqIC0tLS0tLS0tLS0tLS0tCisgKglNeSBob3BlIGlzIHRoYXQgdGhlIHNjcm9sbCBhbGdvcml0aG0gZG9lcyB0aGUgcmlnaHQgdGhpbmcgb24gdGhlCisgKiB2YXJpb3VzIHBsYXRmb3JtcywgYnV0IGl0IHdvdWxkbid0IGJlIGhhcmQgdG8gYWRkIHRoZSB0ZXN0IGNvbmRpdGlvbnMKKyAqIGFuZCBuZXcgY29kZSBpZiBpdCBkb2Vzbid0LgorICoKKyAqIGNvbnNvbGVfcHV0YworICogLS0tLS0tLS0tLS0tLQorICoKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqCisgKglSZWdpc3RlciB1c2FnZSBoYXMgZ3JlYXRseSBzaW1wbGlmaWVkIHdpdGhpbiBoZWFkLlMuIEV2ZXJ5IHN1YnJvdXRpbmUKKyAqIHNhdmVzIGFuZCByZXN0b3JlcyBhbGwgcmVnaXN0ZXJzIHRoYXQgaXQgbW9kaWZpZXMgKGV4Y2VwdCBpdCByZXR1cm5zIGEKKyAqIHZhbHVlIGluIHRoZXJlIG9mIGNvdXJzZSkuIFNvIHRoZSBvbmx5IHJlZ2lzdGVyIHRoYXQgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIGlzIHRoZSBzdGFjayBwb2ludGVyLgorICogQWxsIG90aGVyIGluaXQgY29kZSBhbmQgZGF0YSBpcyBub3cgcGxhY2VkIGluIHRoZSBpbml0IHNlY3Rpb24sIHNvIGl0IHdpbGwKKyAqIGJlIGF1dG9tYXRpY2FsbHkgZnJlZWQgYXQgdGhlIGVuZCBvZiB0aGUga2VybmVsIGluaXRpYWxpemF0aW9uLgorICoKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqCisgKiBvcHRpb25zCisgKiAtLS0tLS0tCisgKglUaGVyZSBhcmUgbWFueSBvcHRpb25zIGF2YWlsYWJsZSBpbiBhIGJ1aWxkIG9mIHRoaXMgZmlsZS4gIEkndmUKKyAqIHRha2VuIHRoZSB0aW1lIHRvIGRlc2NyaWJlIHRoZW0gaGVyZSB0byBzYXZlIHlvdSB0aGUgdGltZSBvZiBzZWFyY2hpbmcKKyAqIGZvciB0aGVtIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZXkgbWVhbi4KKyAqCisgKiBDT05GSUdfeHh4OglUaGVzZSBhcmUgdGhlIG9idmlvdXMgbWFjaGluZSBjb25maWd1cmF0aW9uIGRlZmluZXMgY3JlYXRlZAorICogZHVyaW5nIGNvbmZpZ3VyYXRpb24uICBUaGVzZSBhcmUgZGVmaW5lZCBpbiBpbmNsdWRlL2xpbnV4L2F1dG9jb25mLmguCisgKgorICogQ09OU09MRToJVGhlcmUgaXMgc3VwcG9ydCBmb3IgaGVhZC5TIGNvbnNvbGUgaW4gdGhpcyBmaWxlLiAgVGhpcworICogY29uc29sZSBjYW4gdGFsayB0byBhIE1hYyBmcmFtZSBidWZmZXIsIGJ1dCBjb3VsZCBlYXNpbHkgYmUgZXh0cmFwb2xhdGVkCisgKiB0byBleHRlbmQgaXQgdG8gc3VwcG9ydCBvdGhlciBwbGF0Zm9ybXMuCisgKgorICogVEVTVF9NTVU6CVRoaXMgaXMgYSB0ZXN0IGhhcm5lc3MgZm9yIHJ1bm5pbmcgb24gYW55IGdpdmVuIG1hY2hpbmUgYnV0CisgKiBnZXR0aW5nIGFuIE1NVSBkdW1wIGZvciBhbm90aGVyIGNsYXNzIG9mIG1hY2hpbmUuICBUaGUgY2xhc3NlcyBvZiBtYWNoaW5lcworICogdGhhdCBjYW4gYmUgdGVzdGVkIGFyZSBhbnkgb2YgdGhlIG1ha2VzIChBdGFyaSwgQW1pZ2EsIE1hYywgVk1FLCBldGMuKQorICogYW5kIGFueSBvZiB0aGUgbW9kZWxzICgwMzAsIDA0MCwgMDYwLCBldGMuKS4KKyAqCisgKglOT1RFOglURVNUX01NVSBpcyBOT1QgcGVybWFuZW50ISAgSXQgaXMgc2NoZWR1bGVkIHRvIGJlIHJlbW92ZWQKKyAqCQlXaGVuIGhlYWQuUyBib290cyBvbiBBdGFyaSwgQW1pZ2EsIE1hY2ludG9zaCwgYW5kIFZNRQorICoJCW1hY2hpbmVzLiAgQXQgdGhhdCBwb2ludCB0aGUgdW5kZXJseWluZyBsb2dpYyB3aWxsIGJlCisgKgkJYmVsaWV2ZWQgdG8gYmUgc29saWQgZW5vdWdoIHRvIGJlIHRydXN0ZWQsIGFuZCBURVNUX01NVQorICoJCWNhbiBiZSBkcm9wcGVkLiAgRG8gbm90ZSB0aGF0IHRoYXQgd2lsbCBjbGVhbiB1cCB0aGUKKyAqCQloZWFkLlMgY29kZSBzaWduaWZpY2FudGx5IGFzIGxhcmdlIGJsb2NrcyBvZiAjaWYvI2Vsc2UKKyAqCQljbGF1c2VzIGNhbiBiZSByZW1vdmVkLgorICoKKyAqIE1NVV9OT0NBQ0hFX0tFUk5FTDoJT24gdGhlIE1hY2ludG9zaCBwbGF0Zm9ybSB0aGVyZSB3YXMgYW4gaW5xdWlyeSBpbnRvCisgKiBkZXRlcm1pbmcgd2h5IGRldmljZXMgZG9uJ3QgYXBwZWFyIHRvIHdvcmsuICBBIHRlc3QgY2FzZSB3YXMgdG8gcmVtb3ZlCisgKiB0aGUgY2FjaGVhYmlsaXR5IG9mIHRoZSBrZXJuZWwgYml0cy4KKyAqCisgKiBNTVVfUFJJTlQ6CVRoZXJlIGlzIGEgcm91dGluZSBidWlsdCBpbnRvIGhlYWQuUyB0aGF0IGNhbiBkaXNwbGF5IHRoZQorICogTU1VIGRhdGEgc3RydWN0dXJlcy4gIEl0IG91dHB1dHMgaXRzIHJlc3VsdCB0aHJvdWdoIHRoZSBzZXJpYWxfcHV0YworICogaW50ZXJmYWNlLiAgU28gd2hlcmUgZXZlciB0aGF0IHdpbmRzIHVwIGRyaXZpbmcgZGF0YSwgdGhhdCdzIHdoZXJlIHRoZQorICogbW11IHN0cnVjdCB3aWxsIGFwcGVhci4gIE9uIHRoZSBNYWNpbnRvc2ggdGhhdCdzIHR5cGljYWxseSB0aGUgY29uc29sZS4KKyAqCisgKiBTRVJJQUxfREVCVUc6CVRoZXJlIGFyZSBhIHNlcmllcyBvZiBwdXRjKCkgbWFjcm8gc3RhdGVtZW50cworICogc2NhdHRlcmVkIHRocm91Z2ggb3V0IHRoZSBjb2RlIHRvIGdpdmUgcHJvZ3Jlc3Mgb2Ygc3RhdHVzIHRvIHRoZQorICogcGVyc29uIHNpdHRpbmcgYXQgdGhlIGNvbnNvbGUuICBUaGlzIGNvbnN0YW50IGRldGVybWluZXMgd2hldGhlciB0aG9zZQorICogYXJlIHVzZWQuCisgKgorICogREVCVUc6CVRoaXMgaXMgdGhlIHN0YW5kYXJkIERFQlVHIGZsYWcgdGhhdCBjYW4gYmUgc2V0IGZvciBidWlsZGluZworICoJCXRoZSBrZXJuZWwuICBJdCBoYXMgdGhlIGVmZmVjdCBhZGRpbmcgYWRkaXRpb25hbCB0ZXN0cyBpbnRvCisgKgkJdGhlIGNvZGUuCisgKgorICogRk9OVF82eDExOgorICogRk9OVF84eDg6CisgKiBGT05UXzh4MTY6CisgKgkJSW4gdGhlb3J5IHRoZXNlIGNvdWxkIGJlIGRldGVybWluZWQgYXQgcnVuIHRpbWUgb3IgaGFuZGVkCisgKgkJb3ZlciBieSB0aGUgYm9vdGVyLiAgQnV0LCBsZXQncyBiZSByZWFsLCBpdCdzIGEgZmluZSBoYXJkCisgKgkJY29kZWQgdmFsdWUuICAoQnV0LCB5b3Ugd2lsbCBub3RpY2UgdGhlIGNvZGUgaXMgcnVuLXRpbWUKKyAqCQlmbGV4aWJsZSEpICBBIHBvaW50ZXIgdG8gdGhlIGZvbnQncyBzdHJ1Y3QgZm9udF9kZXNjCisgKgkJaXMga2VwdCBsb2NhbGx5IGluIExjb25zb2xlX2ZvbnQuICBJdCBpcyB1c2VkIHRvIGRldGVybWluZQorICoJCWZvbnQgc2l6ZSBpbmZvcm1hdGlvbiBkeW5hbWljYWxseS4KKyAqCisgKiBBdGFyaSBjb25zdGFudHM6CisgKiBVU0VfUFJJTlRFUjoJVXNlIHRoZSBwcmludGVyIHBvcnQgZm9yIHNlcmlhbCBkZWJ1Zy4KKyAqIFVTRV9TQ0NfQjoJVXNlIHRoZSBTQ0MgcG9ydCBBIChTZXJpYWwyKSBmb3Igc2VyaWFsIGRlYnVnLgorICogVVNFX1NDQ19BOglVc2UgdGhlIFNDQyBwb3J0IEIgKE1vZGVtMikgZm9yIHNlcmlhbCBkZWJ1Zy4KKyAqIFVTRV9NRlA6CVVzZSB0aGUgU1QtTUZQIHBvcnQgKE1vZGVtMSkgZm9yIHNlcmlhbCBkZWJ1Zy4KKyAqCisgKiBNYWNpbnRvc2ggY29uc3RhbnRzOgorICogTUFDX1NFUklBTF9ERUJVRzoJVHVybnMgb24gc2VyaWFsIGRlYnVnIG91dHB1dCBmb3IgdGhlIE1hY2ludG9zaC4KKyAqIE1BQ19VU0VfU0NDX0E6CVVzZSB0aGUgU0NDIHBvcnQgQSAobW9kZW0pIGZvciBzZXJpYWwgZGVidWcuCisgKiBNQUNfVVNFX1NDQ19COglVc2UgdGhlIFNDQyBwb3J0IEIgKHByaW50ZXIpIGZvciBzZXJpYWwgZGVidWcgKGRlZmF1bHQpLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9lbnRyeS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vb2Zmc2V0cy5oPgorCisjaWZkZWYgQ09ORklHX01BQworCisjaW5jbHVkZSA8YXNtL21hY2h3Lmg+CisKKy8qCisgKiBNYWNpbnRvc2ggY29uc29sZSBzdXBwb3J0CisgKi8KKworI2RlZmluZSBDT05TT0xFCisjZGVmaW5lIENPTlNPTEVfUEVOR1VJTgorCisvKgorICogTWFjaW50b3NoIHNlcmlhbCBkZWJ1ZyBzdXBwb3J0OyBvdXRwdXRzIGJvb3QgaW5mbyB0byB0aGUgcHJpbnRlcgorICogICBhbmQvb3IgbW9kZW0gc2VyaWFsIHBvcnRzCisgKi8KKyN1bmRlZiBNQUNfU0VSSUFMX0RFQlVHCisKKy8qCisgKiBNYWNpbnRvc2ggc2VyaWFsIGRlYnVnIHBvcnQgc2VsZWN0aW9uOyBkZWZpbmUgb25lIG9yIGJvdGg7CisgKiAgIHJlcXVpcmVzIE1BQ19TRVJJQUxfREVCVUcgdG8gYmUgZGVmaW5lZAorICovCisjZGVmaW5lIE1BQ19VU0VfU0NDX0EJCS8qIE1hY2ludG9zaCBtb2RlbSBzZXJpYWwgcG9ydCAqLworI2RlZmluZSBNQUNfVVNFX1NDQ19CCQkvKiBNYWNpbnRvc2ggcHJpbnRlciBzZXJpYWwgcG9ydCAqLworCisjZW5kaWYJLyogQ09ORklHX01BQyAqLworCisjdW5kZWYgTU1VX1BSSU5UCisjdW5kZWYgTU1VX05PQ0FDSEVfS0VSTkVMCisjZGVmaW5lIFNFUklBTF9ERUJVRworI3VuZGVmIERFQlVHCisKKy8qCisgKiBGb3IgdGhlIGhlYWQuUyBjb25zb2xlLCB0aGVyZSBhcmUgdGhyZWUgc3VwcG9ydGVkIGZvbnRzLCA2eDExLCA4eDE2IGFuZCA4eDguCisgKiBUaGUgOHg4IGZvbnQgaXMgaGFyZGVyIHRvIHJlYWQgYnV0IGZpdHMgbW9yZSBvbiB0aGUgc2NyZWVuLgorICovCisjZGVmaW5lIEZPTlRfOHg4CS8qIGRlZmF1bHQgKi8KKy8qICNkZWZpbmUgRk9OVF84eDE2ICovCS8qIDJuZCBjaG9pY2UgKi8KKy8qICNkZWZpbmUgRk9OVF82eDExICovCS8qIDNyZCBjaG9pY2UgKi8KKworLmdsb2JsIGtlcm5lbF9wZ19kaXIKKy5nbG9ibCBhdmFpbG1lbQorLmdsb2JsIG02OGtfcGd0YWJsZV9jYWNoZW1vZGUKKy5nbG9ibCBtNjhrX3N1cGVydmlzb3JfY2FjaGVtb2RlCisjaWZkZWYgQ09ORklHX01WTUUxNngKKy5nbG9ibCBtdm1lX2JkaWQKKyNlbmRpZgorI2lmZGVmIENPTkZJR19RNDAKKy5nbG9ibCBxNDBfbWVtX2NwdHIKKyNlbmRpZgorCitDUFVUWVBFXzA0MAk9IDEJLyogaW5kaWNhdGVzIGFuIDA0MCAqLworQ1BVVFlQRV8wNjAJPSAyCS8qIGluZGljYXRlcyBhbiAwNjAgKi8KK0NQVVRZUEVfMDQ2MAk9IDMJLyogaWYgZWl0aGVyIGFib3ZlIGFyZSBzZXQsIHRoaXMgaXMgc2V0ICovCitDUFVUWVBFXzAyMAk9IDQJLyogaW5kaWNhdGVzIGFuIDAyMCAqLworCisvKiBUcmFuc2xhdGlvbiBjb250cm9sIHJlZ2lzdGVyICovCitUQ19FTkFCTEUgPSAweDgwMDAKK1RDX1BBR0U4SyA9IDB4NDAwMAorVENfUEFHRTRLID0gMHgwMDAwCisKKy8qIFRyYW5zcGFyZW50IHRyYW5zbGF0aW9uIHJlZ2lzdGVycyAqLworVFRSX0VOQUJMRQk9IDB4ODAwMAkvKiBlbmFibGUgdHJhbnNwYXJlbnQgdHJhbnNsYXRpb24gKi8KK1RUUl9BTllNT0RFCT0gMHg0MDAwCS8qIHVzZXIgYW5kIGtlcm5lbCBtb2RlIGFjY2VzcyAqLworVFRSX0tFUk5FTE1PREUJPSAweDIwMDAJLyogb25seSBrZXJuZWwgbW9kZSBhY2Nlc3MgKi8KK1RUUl9VU0VSTU9ERQk9IDB4MDAwMAkvKiBvbmx5IHVzZXIgbW9kZSBhY2Nlc3MgKi8KK1RUUl9DSQkJPSAweDA0MDAJLyogaW5oaWJpdCBjYWNoZSAqLworVFRSX1JXCQk9IDB4MDIwMAkvKiByZWFkL3dyaXRlIG1vZGUgKi8KK1RUUl9SV00JCT0gMHgwMTAwCS8qIHJlYWQvd3JpdGUgbWFzayAqLworVFRSX0ZDQjIJPSAweDAwNDAJLyogZnVuY3Rpb24gY29kZSBiYXNlIGJpdCAyICovCitUVFJfRkNCMQk9IDB4MDAyMAkvKiBmdW5jdGlvbiBjb2RlIGJhc2UgYml0IDEgKi8KK1RUUl9GQ0IwCT0gMHgwMDEwCS8qIGZ1bmN0aW9uIGNvZGUgYmFzZSBiaXQgMCAqLworVFRSX0ZDTTIJPSAweDAwMDQJLyogZnVuY3Rpb24gY29kZSBtYXNrIGJpdCAyICovCitUVFJfRkNNMQk9IDB4MDAwMgkvKiBmdW5jdGlvbiBjb2RlIG1hc2sgYml0IDEgKi8KK1RUUl9GQ00wCT0gMHgwMDAxCS8qIGZ1bmN0aW9uIGNvZGUgbWFzayBiaXQgMCAqLworCisvKiBDYWNoZSBDb250cm9sIHJlZ2lzdGVycyAqLworQ0M2X0VOQUJMRV9ECT0gMHg4MDAwMDAwMAkvKiBlbmFibGUgZGF0YSBjYWNoZSAoNjgwWzQ2XTApICovCitDQzZfRlJFRVpFX0QJPSAweDQwMDAwMDAwCS8qIGZyZWV6ZSBkYXRhIGNhY2hlICg2ODA2MCkgKi8KK0NDNl9FTkFCTEVfU0IJPSAweDIwMDAwMDAwCS8qIGVuYWJsZSBzdG9yZSBidWZmZXIgKDY4MDYwKSAqLworQ0M2X1BVU0hfRFBJCT0gMHgxMDAwMDAwMAkvKiBkaXNhYmxlIENQVVNIIGludmFsaWRhdGlvbiAoNjgwNjApICovCitDQzZfSEFMRl9ECT0gMHgwODAwMDAwMAkvKiBoYWxmLWNhY2hlIG1vZGUgZm9yIGRhdGEgY2FjaGUgKDY4MDYwKSAqLworQ0M2X0VOQUJMRV9CCT0gMHgwMDgwMDAwMAkvKiBlbmFibGUgYnJhbmNoIGNhY2hlICg2ODA2MCkgKi8KK0NDNl9DTFJBX0IJPSAweDAwNDAwMDAwCS8qIGNsZWFyIGFsbCBlbnRyaWVzIGluIGJyYW5jaCBjYWNoZSAoNjgwNjApICovCitDQzZfQ0xSVV9CCT0gMHgwMDIwMDAwMAkvKiBjbGVhciB1c2VyIGVudHJpZXMgaW4gYnJhbmNoIGNhY2hlICg2ODA2MCkgKi8KK0NDNl9FTkFCTEVfSQk9IDB4MDAwMDgwMDAJLyogZW5hYmxlIGluc3RydWN0aW9uIGNhY2hlICg2ODBbNDZdMCkgKi8KK0NDNl9GUkVFWkVfSQk9IDB4MDAwMDQwMDAJLyogZnJlZXplIGluc3RydWN0aW9uIGNhY2hlICg2ODA2MCkgKi8KK0NDNl9IQUxGX0kJPSAweDAwMDAyMDAwCS8qIGhhbGYtY2FjaGUgbW9kZSBmb3IgaW5zdHJ1Y3Rpb24gY2FjaGUgKDY4MDYwKSAqLworQ0MzX0FMTE9DX1dSSVRFCT0gMHgwMDAwMjAwMAkvKiB3cml0ZSBhbGxvY2F0ZSBtb2RlKDY4MDMwKSAqLworQ0MzX0VOQUJMRV9EQgk9IDB4MDAwMDEwMDAJLyogZW5hYmxlIGRhdGEgYnVyc3QgKDY4MDMwKSAqLworQ0MzX0NMUl9ECT0gMHgwMDAwMDgwMAkvKiBjbGVhciBkYXRhIGNhY2hlICg2ODAzMCkgKi8KK0NDM19DTFJFX0QJPSAweDAwMDAwNDAwCS8qIGNsZWFyIGVudHJ5IGluIGRhdGEgY2FjaGUgKDY4MDMwKSAqLworQ0MzX0ZSRUVaRV9ECT0gMHgwMDAwMDIwMAkvKiBmcmVlemUgZGF0YSBjYWNoZSAoNjgwMzApICovCitDQzNfRU5BQkxFX0QJPSAweDAwMDAwMTAwCS8qIGVuYWJsZSBkYXRhIGNhY2hlICg2ODAzMCkgKi8KK0NDM19FTkFCTEVfSUIJPSAweDAwMDAwMDEwCS8qIGVuYWJsZSBpbnN0cnVjdGlvbiBidXJzdCAoNjgwMzApICovCitDQzNfQ0xSX0kJPSAweDAwMDAwMDA4CS8qIGNsZWFyIGluc3RydWN0aW9uIGNhY2hlICg2ODAzMCkgKi8KK0NDM19DTFJFX0kJPSAweDAwMDAwMDA0CS8qIGNsZWFyIGVudHJ5IGluIGluc3RydWN0aW9uIGNhY2hlICg2ODAzMCkgKi8KK0NDM19GUkVFWkVfSQk9IDB4MDAwMDAwMDIJLyogZnJlZXplIGluc3RydWN0aW9uIGNhY2hlICg2ODAzMCkgKi8KK0NDM19FTkFCTEVfSQk9IDB4MDAwMDAwMDEJLyogZW5hYmxlIGluc3RydWN0aW9uIGNhY2hlICg2ODAzMCkgKi8KKworLyogTWlzY2VsbGFuZW91cyBkZWZpbml0aW9ucyAqLworUEFHRVNJWkUJPSA0MDk2CitQQUdFU0hJRlQJPSAxMgorCitST09UX1RBQkxFX1NJWkUJPSAxMjgKK1BUUl9UQUJMRV9TSVpFCT0gMTI4CitQQUdFX1RBQkxFX1NJWkUJPSA2NAorUk9PVF9JTkRFWF9TSElGVCA9IDI1CitQVFJfSU5ERVhfU0hJRlQgID0gMTgKK1BBR0VfSU5ERVhfU0hJRlQgPSAxMgorCisjaWZkZWYgREVCVUcKKy8qIFdoZW4gZGVidWdnaW5nIHVzZSByZWFkYWJsZSBuYW1lcyBmb3IgbGFiZWxzICovCisjaWZkZWYgX19TVERDX18KKyNkZWZpbmUgTChuYW1lKSAuaGVhZC5TLiMjbmFtZQorI2Vsc2UKKyNkZWZpbmUgTChuYW1lKSAuaGVhZC5TLi8qKi9uYW1lCisjZW5kaWYKKyNlbHNlCisjaWZkZWYgX19TVERDX18KKyNkZWZpbmUgTChuYW1lKSAuTCMjbmFtZQorI2Vsc2UKKyNkZWZpbmUgTChuYW1lKSAuTC8qKi9uYW1lCisjZW5kaWYKKyNlbmRpZgorCisvKiBUaGUgX19JTklUREFUQSBzdHVmZiBpcyBhIG5vLW9wIHdoZW4gZnRyYWNlIG9yIGtnZGIgYXJlIHR1cm5lZCBvbiAqLworI2lmbmRlZiBfX0lOSVREQVRBCisjZGVmaW5lIF9fSU5JVERBVEEJLmRhdGEKKyNkZWZpbmUgX19GSU5JVAkJLnByZXZpb3VzCisjZW5kaWYKKworLyogU2V2ZXJhbCBtYWNyb3MgdG8gbWFrZSB0aGUgd3JpdGluZyBvZiBzdWJyb3V0aW5lcyBlYXNpZXI6CisgKiAtIGZ1bmNfc3RhcnQgbWFya3MgdGhlIGJlZ2lubmluZyBvZiB0aGUgcm91dGluZSB3aGljaCBzZXR1cHMgdGhlIGZyYW1lCisgKiAgIHJlZ2lzdGVyIGFuZCBzYXZlcyB0aGUgcmVnaXN0ZXJzLCBpdCBhbHNvIGRlZmluZXMgYW5vdGhlciBtYWNybworICogICB0byBhdXRvbWF0aWNhbGx5IHJlc3RvcmUgdGhlIHJlZ2lzdGVycyBhZ2Fpbi4KKyAqIC0gZnVuY19yZXR1cm4gbWFya3MgdGhlIGVuZCBvZiB0aGUgcm91dGluZSBhbmQgc2ltcGx5IGNhbGxzIHRoZSBwcmVwYXJlZAorICogICBtYWNybyB0byByZXN0b3JlIHJlZ2lzdGVycyBhbmQganVtcCBiYWNrIHRvIHRoZSBjYWxsZXIuCisgKiAtIGZ1bmNfZGVmaW5lIGdlbmVyYXRlcyBhbm90aGVyIG1hY3JvIHRvIGF1dG9tYXRpY2FsbHkgcHV0IGFyZ3VtZW50cworICogICBvbnRvIHRoZSBzdGFjayBjYWxsIHRoZSBzdWJyb3V0aW5lIGFuZCBjbGVhbnVwIHRoZSBzdGFjayBhZ2Fpbi4KKyAqLworCisvKiBXaXRoaW4gc3Vicm91dGluZXMgdGhlc2UgbWFjcm9zIGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgYXJndW1lbnRzCisgKiBvbiB0aGUgc3RhY2suIFdpdGggU1RBQ0sgc29tZSBhbGxvY2F0ZWQgbWVtb3J5IG9uIHRoZSBzdGFjayBjYW4gYmUKKyAqIGFjY2Vzc2VkIGFuZCBBUkcwIHBvaW50cyB0byB0aGUgcmV0dXJuIGFkZHJlc3MgKHVzZWQgYnkgbW11X2VuZ2FnZSkuCisgKi8KKyNkZWZpbmUJU1RBQ0sJJWE2QChzdGFja3N0YXJ0KQorI2RlZmluZSBBUkcwCSVhNkAoNCkKKyNkZWZpbmUgQVJHMQklYTZAKDgpCisjZGVmaW5lIEFSRzIJJWE2QCgxMikKKyNkZWZpbmUgQVJHMwklYTZAKDE2KQorI2RlZmluZSBBUkc0CSVhNkAoMjApCisKKy5tYWNybwlmdW5jX3N0YXJ0CW5hbWUsc2F2ZXJlZ3Msc3RhY2s9MAorTChcbmFtZSk6CisJbGlua3cJJWE2LCMtXHN0YWNrCisJbW92ZW1sCVxzYXZlcmVncywlc3BALQorLnNldAlzdGFja3N0YXJ0LC1cc3RhY2sKKworLm1hY3JvCWZ1bmNfcmV0dXJuX1xuYW1lCisJbW92ZW1sCSVzcEArLFxzYXZlcmVncworCXVubGsJJWE2CisJcnRzCisuZW5kbQorLmVuZG0KKworLm1hY3JvCWZ1bmNfcmV0dXJuCW5hbWUKKwlmdW5jX3JldHVybl9cbmFtZQorLmVuZG0KKworLm1hY3JvCWZ1bmNfY2FsbAluYW1lCisJamJzcglMKFxuYW1lKQorLmVuZG0KKworLm1hY3JvCW1vdmVfc3RhY2sJbnIsYXJnMSxhcmcyLGFyZzMsYXJnNAorLmlmCVxucgorCW1vdmVfc3RhY2sJIihcbnItMSkiLFxhcmcyLFxhcmczLFxhcmc0CisJbW92ZWwJXGFyZzEsJXNwQC0KKy5lbmRpZgorLmVuZG0KKworLm1hY3JvCWZ1bmNfZGVmaW5lCW5hbWUsbnI9MAorLm1hY3JvCVxuYW1lCWFyZzEsYXJnMixhcmczLGFyZzQKKwltb3ZlX3N0YWNrCVxucixcYXJnMSxcYXJnMixcYXJnMyxcYXJnNAorCWZ1bmNfY2FsbAlcbmFtZQorLmlmCVxucgorCWxlYQklc3BAKFxucio0KSwlc3AKKy5lbmRpZgorLmVuZG0KKy5lbmRtCisKK2Z1bmNfZGVmaW5lCW1tdV9tYXAsNAorZnVuY19kZWZpbmUJbW11X21hcF90dCw0CitmdW5jX2RlZmluZQltbXVfZml4dXBfcGFnZV9tbXVfY2FjaGUsMQorZnVuY19kZWZpbmUJbW11X3RlbXBfbWFwLDIKK2Z1bmNfZGVmaW5lCW1tdV9lbmdhZ2UKK2Z1bmNfZGVmaW5lCW1tdV9nZXRfcm9vdF90YWJsZV9lbnRyeSwxCitmdW5jX2RlZmluZQltbXVfZ2V0X3B0cl90YWJsZV9lbnRyeSwyCitmdW5jX2RlZmluZQltbXVfZ2V0X3BhZ2VfdGFibGVfZW50cnksMgorZnVuY19kZWZpbmUJbW11X3ByaW50CitmdW5jX2RlZmluZQlnZXRfbmV3X3BhZ2UKKyNpZiBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKQorZnVuY19kZWZpbmUJc2V0X2xlZHMKKyNlbmRpZgorCisubWFjcm8JbW11X21hcF9lcQlhcmcxLGFyZzIsYXJnMworCW1tdV9tYXAJXGFyZzEsXGFyZzEsXGFyZzIsXGFyZzMKKy5lbmRtCisKKy5tYWNybwlnZXRfYmlfcmVjb3JkCXJlY29yZAorCXBlYQlccmVjb3JkCisJZnVuY19jYWxsCWdldF9iaV9yZWNvcmQKKwlhZGRxbAkjNCwlc3AKKy5lbmRtCisKK2Z1bmNfZGVmaW5lCXNlcmlhbF9wdXRjLDEKK2Z1bmNfZGVmaW5lCWNvbnNvbGVfcHV0YywxCisKK2Z1bmNfZGVmaW5lCWNvbnNvbGVfaW5pdAorZnVuY19kZWZpbmUJY29uc29sZV9wdXRfc3RhdHMKK2Z1bmNfZGVmaW5lCWNvbnNvbGVfcHV0X3Blbmd1aW4KK2Z1bmNfZGVmaW5lCWNvbnNvbGVfcGxvdF9waXhlbCwzCitmdW5jX2RlZmluZQljb25zb2xlX3Njcm9sbAorCisubWFjcm8JcHV0YwljaAorI2lmIGRlZmluZWQoQ09OU09MRSkgfHwgZGVmaW5lZChTRVJJQUxfREVCVUcpCisJcGVhCVxjaAorI2VuZGlmCisjaWZkZWYgQ09OU09MRQorCWZ1bmNfY2FsbAljb25zb2xlX3B1dGMKKyNlbmRpZgorI2lmZGVmIFNFUklBTF9ERUJVRworCWZ1bmNfY2FsbAlzZXJpYWxfcHV0YworI2VuZGlmCisjaWYgZGVmaW5lZChDT05TT0xFKSB8fCBkZWZpbmVkKFNFUklBTF9ERUJVRykKKwlhZGRxbAkjNCwlc3AKKyNlbmRpZgorLmVuZG0KKworLm1hY3JvCWRwdXRjCWNoCisjaWZkZWYgREVCVUcKKwlwdXRjCVxjaAorI2VuZGlmCisuZW5kbQorCitmdW5jX2RlZmluZQlwdXRuLDEKKworLm1hY3JvCWRwdXRuCW5yCisjaWZkZWYgREVCVUcKKwlwdXRuCVxucgorI2VuZGlmCisuZW5kbQorCisubWFjcm8JcHV0cwkJc3RyaW5nCisjaWYgZGVmaW5lZChDT05TT0xFKSB8fCBkZWZpbmVkKFNFUklBTF9ERUJVRykKKwlfX0lOSVREQVRBCisuTHN0clxAOgorCS5zdHJpbmcJIlxzdHJpbmciCisJX19GSU5JVAorCXBlYQklcGNAKC5Mc3RyXEApCisJZnVuY19jYWxsCXB1dHMKKwlhZGRxbAkjNCwlc3AKKyNlbmRpZgorLmVuZG0KKworLm1hY3JvCWRwdXRzCXN0cmluZworI2lmZGVmIERFQlVHCisJcHV0cwkiXHN0cmluZyIKKyNlbmRpZgorLmVuZG0KKworI2RlZmluZSBpc19ub3RfYW1pZ2EobGFiKSBjbXBsICZNQUNIX0FNSUdBLCVwY0AobTY4a19tYWNodHlwZSk7IGpuZSBsYWIKKyNkZWZpbmUgaXNfbm90X2F0YXJpKGxhYikgY21wbCAmTUFDSF9BVEFSSSwlcGNAKG02OGtfbWFjaHR5cGUpOyBqbmUgbGFiCisjZGVmaW5lIGlzX25vdF9tYWMobGFiKSBjbXBsICZNQUNIX01BQywlcGNAKG02OGtfbWFjaHR5cGUpOyBqbmUgbGFiCisjZGVmaW5lIGlzX25vdF9tdm1lMTQ3KGxhYikgY21wbCAmTUFDSF9NVk1FMTQ3LCVwY0AobTY4a19tYWNodHlwZSk7IGpuZSBsYWIKKyNkZWZpbmUgaXNfbm90X212bWUxNngobGFiKSBjbXBsICZNQUNIX01WTUUxNngsJXBjQChtNjhrX21hY2h0eXBlKTsgam5lIGxhYgorI2RlZmluZSBpc19ub3RfYnZtZTYwMDAobGFiKSBjbXBsICZNQUNIX0JWTUU2MDAwLCVwY0AobTY4a19tYWNodHlwZSk7IGpuZSBsYWIKKyNkZWZpbmUgaXNfbXZtZTE0NyhsYWIpIGNtcGwgJk1BQ0hfTVZNRTE0NywlcGNAKG02OGtfbWFjaHR5cGUpOyBqZXEgbGFiCisjZGVmaW5lIGlzX212bWUxNngobGFiKSBjbXBsICZNQUNIX01WTUUxNngsJXBjQChtNjhrX21hY2h0eXBlKTsgamVxIGxhYgorI2RlZmluZSBpc19idm1lNjAwMChsYWIpIGNtcGwgJk1BQ0hfQlZNRTYwMDAsJXBjQChtNjhrX21hY2h0eXBlKTsgamVxIGxhYgorI2RlZmluZSBpc19ub3RfaHAzMDAobGFiKSBjbXBsICZNQUNIX0hQMzAwLCVwY0AobTY4a19tYWNodHlwZSk7IGpuZSBsYWIKKyNkZWZpbmUgaXNfbm90X2Fwb2xsbyhsYWIpIGNtcGwgJk1BQ0hfQVBPTExPLCVwY0AobTY4a19tYWNodHlwZSk7IGpuZSBsYWIKKyNkZWZpbmUgaXNfbm90X3E0MChsYWIpIGNtcGwgJk1BQ0hfUTQwLCVwY0AobTY4a19tYWNodHlwZSk7IGpuZSBsYWIKKyNkZWZpbmUgaXNfbm90X3N1bjN4KGxhYikgY21wbCAmTUFDSF9TVU4zWCwlcGNAKG02OGtfbWFjaHR5cGUpOyBqbmUgbGFiCisKKyNkZWZpbmUgaGFzbnRfbGVkcyhsYWIpIGNtcGwgJk1BQ0hfSFAzMDAsJXBjQChtNjhrX21hY2h0eXBlKTsgXAorCQkJamVxIDQyZjsgXAorCQkJY21wbCAmTUFDSF9BUE9MTE8sJXBjQChtNjhrX21hY2h0eXBlKTsgXAorCQkJam5lIGxhYiA7XAorCQk0MjpcCisKKyNkZWZpbmUgaXNfMDQwX29yXzA2MChsYWIpCWJ0c3QgJkNQVVRZUEVfMDQ2MCwlcGNAKEwoY3B1dHlwZSkrMyk7IGpuZSBsYWIKKyNkZWZpbmUgaXNfbm90XzA0MF9vcl8wNjAobGFiKQlidHN0ICZDUFVUWVBFXzA0NjAsJXBjQChMKGNwdXR5cGUpKzMpOyBqZXEgbGFiCisjZGVmaW5lIGlzXzA0MChsYWIpCQlidHN0ICZDUFVUWVBFXzA0MCwlcGNAKEwoY3B1dHlwZSkrMyk7IGpuZSBsYWIKKyNkZWZpbmUgaXNfMDYwKGxhYikJCWJ0c3QgJkNQVVRZUEVfMDYwLCVwY0AoTChjcHV0eXBlKSszKTsgam5lIGxhYgorI2RlZmluZSBpc19ub3RfMDYwKGxhYikJCWJ0c3QgJkNQVVRZUEVfMDYwLCVwY0AoTChjcHV0eXBlKSszKTsgamVxIGxhYgorI2RlZmluZSBpc18wMjAobGFiKQkJYnRzdCAmQ1BVVFlQRV8wMjAsJXBjQChMKGNwdXR5cGUpKzMpOyBqbmUgbGFiCisjZGVmaW5lIGlzX25vdF8wMjAobGFiKQkJYnRzdCAmQ1BVVFlQRV8wMjAsJXBjQChMKGNwdXR5cGUpKzMpOyBqZXEgbGFiCisKKy8qIE9uIHRoZSBIUDMwMCB3ZSB1c2UgdGhlIG9uLWJvYXJkIExFRHMgZm9yIGRlYnVnIG91dHB1dCBiZWZvcmUKKyAgIHRoZSBjb25zb2xlIGlzIHJ1bm5pbmcuICBXcml0aW5nIGEgMSBiaXQgdHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgTEVECisgICBfb2ZmXyAtIG9uIHRoZSAzNDAgYml0IDcgaXMgdG93YXJkcyB0aGUgYmFjayBwYW5lbCBvZiB0aGUgbWFjaGluZS4gICovCisubWFjcm8JbGVkcwltYXNrCisjaWYgZGVmaW5lZChDT05GSUdfSFAzMDApIHx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykKKwloYXNudF9sZWRzKC5MbGVkXEApCisJcGVhCVxtYXNrCisJZnVuY19jYWxsCXNldF9sZWRzCisJYWRkcWwJIzQsJXNwCisuTGxlZFxAOgorI2VuZGlmCisuZW5kbQorCisudGV4dAorRU5UUlkoX3N0ZXh0KQorLyoKKyAqIFZlcnNpb24gbnVtYmVycyBvZiB0aGUgYm9vdGluZm8gaW50ZXJmYWNlCisgKiBUaGUgYXJlYSBmcm9tIF9zdGV4dCB0byBfc3RhcnQgd2lsbCBsYXRlciBiZSB1c2VkIGFzIGtlcm5lbCBwb2ludGVyIHRhYmxlCisgKi8KKwlicmFzCTFmCS8qIEp1bXAgb3ZlciBib290aW5mbyB2ZXJzaW9uIG51bWJlcnMgKi8KKworCS5sb25nCUJPT1RJTkZPVl9NQUdJQworCS5sb25nCU1BQ0hfQU1JR0EsIEFNSUdBX0JPT1RJX1ZFUlNJT04KKwkubG9uZwlNQUNIX0FUQVJJLCBBVEFSSV9CT09USV9WRVJTSU9OCisJLmxvbmcJTUFDSF9NVk1FMTQ3LCBNVk1FMTQ3X0JPT1RJX1ZFUlNJT04KKwkubG9uZwlNQUNIX01WTUUxNngsIE1WTUUxNnhfQk9PVElfVkVSU0lPTgorCS5sb25nCU1BQ0hfQlZNRTYwMDAsIEJWTUU2MDAwX0JPT1RJX1ZFUlNJT04KKwkubG9uZwlNQUNIX01BQywgTUFDX0JPT1RJX1ZFUlNJT04KKwkubG9uZwlNQUNIX1E0MCwgUTQwX0JPT1RJX1ZFUlNJT04KKwkubG9uZwlNQUNIX0hQMzAwLCBIUDMwMF9CT09USV9WRVJTSU9OCisJLmxvbmcJMAorMToJanJhCV9fc3RhcnQKKworLmVxdQlrZXJuZWxfcGdfZGlyLF9zdGV4dAorCisuZXF1CS4sX3N0ZXh0K1BBR0VTSVpFCisKK0VOVFJZKF9zdGFydCkKKwlqcmEJX19zdGFydAorX19JTklUCitFTlRSWShfX3N0YXJ0KQorLyoKKyAqIFNldHVwIGluaXRpYWwgc3RhY2sgcG9pbnRlcgorICovCisJbGVhCSVwY0AoX3N0ZXh0KSwlc3AKKworLyoKKyAqIFJlY29yZCB0aGUgQ1BVIGFuZCBtYWNoaW5lIHR5cGUuCisgKi8KKwlnZXRfYmlfcmVjb3JkCUJJX01BQ0hUWVBFCisJbGVhCSVwY0AobTY4a19tYWNodHlwZSksJWExCisJbW92ZWwJJWEwQCwlYTFACisKKwlnZXRfYmlfcmVjb3JkCUJJX0ZQVVRZUEUKKwlsZWEJJXBjQChtNjhrX2ZwdXR5cGUpLCVhMQorCW1vdmVsCSVhMEAsJWExQAorCisJZ2V0X2JpX3JlY29yZAlCSV9NTVVUWVBFCisJbGVhCSVwY0AobTY4a19tbXV0eXBlKSwlYTEKKwltb3ZlbAklYTBALCVhMUAKKworCWdldF9iaV9yZWNvcmQJQklfQ1BVVFlQRQorCWxlYQklcGNAKG02OGtfY3B1dHlwZSksJWExCisJbW92ZWwJJWEwQCwlYTFACisKKwlsZWRzCTB4MQorCisjaWZkZWYgQ09ORklHX01BQworLyoKKyAqIEZvciBNYWNpbnRvc2gsIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBkaXNwbGF5IHBhcmFtZXRlcnMgZWFybHkgKGF0IGxlYXN0CisgKiB3aGlsZSBkZWJ1Z2dpbmcgaXQpLgorICovCisKKwlpc19ub3RfbWFjKEwodGVzdF9ub3RtYWMpKQorCisJZ2V0X2JpX3JlY29yZAlCSV9NQUNfVkFERFIKKwlsZWEJJXBjQChMKG1hY192aWRlb2Jhc2UpKSwlYTEKKwltb3ZlbAklYTBALCVhMUAKKworCWdldF9iaV9yZWNvcmQJQklfTUFDX1ZERVBUSAorCWxlYQklcGNAKEwobWFjX3ZpZGVvZGVwdGgpKSwlYTEKKwltb3ZlbAklYTBALCVhMUAKKworCWdldF9iaV9yZWNvcmQJQklfTUFDX1ZESU0KKwlsZWEJJXBjQChMKG1hY19kaW1lbnNpb25zKSksJWExCisJbW92ZWwJJWEwQCwlYTFACisKKwlnZXRfYmlfcmVjb3JkCUJJX01BQ19WUk9XCisJbGVhCSVwY0AoTChtYWNfcm93Ynl0ZXMpKSwlYTEKKwltb3ZlbAklYTBALCVhMUAKKworI2lmZGVmIE1BQ19TRVJJQUxfREVCVUcKKwlnZXRfYmlfcmVjb3JkCUJJX01BQ19TQ0NCQVNFCisJbGVhCSVwY0AoTChtYWNfc2NjYmFzZSkpLCVhMQorCW1vdmVsCSVhMEAsJWExQAorI2VuZGlmIC8qIE1BQ19TRVJJQUxfREVCVUcgKi8KKworI2lmIDAKKwkvKgorCSAqIENsZWFyIHRoZSBzY3JlZW4KKwkgKi8KKwlsZWEJJXBjQChMKG1hY192aWRlb2Jhc2UpKSwlYTAKKwltb3ZlbAklYTBALCVhMQorCWxlYQklcGNAKEwobWFjX2RpbWVuc2lvbnMpKSwlYTAKKwltb3ZlbAklYTBALCVkMQorCXN3YXAJJWQxCQkvKiAjcm93cyBpcyBoaWdoIGJ5dGVzICovCisJYW5kbAkjMHhGRkZGLCVkMQkvKiByb3dzICovCisJc3VibAkjMTAsJWQxCisJbGVhCSVwY0AoTChtYWNfcm93Ynl0ZXMpKSwlYTAKK2xvb3B5MjoKKwltb3ZlbAklYTBALCVkMAorCXN1YnFsCSMxLCVkMAorbG9vcHgyOgorCW1vdmViCSMweDU1LCAlYTFAKworCWRicmEJJWQwLGxvb3B4MgorCWRicmEJJWQxLGxvb3B5MgorI2VuZGlmCisKK0wodGVzdF9ub3RtYWMpOgorI2VuZGlmIC8qIENPTkZJR19NQUMgKi8KKworCisvKgorICogVGhlcmUgYXJlIHVsdGltYXRlbHkgdHdvIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiB3ZSB3YW50IGZvciBhbGwga2luZHMgb2YKKyAqIHByb2Nlc3NvcnMgQ3B1VHlwZSBhbmQgQ2FjaGVCaXRzLiAgVGhlIENQVVRZUEUgd2FzIHBhc3NlZCBpbiBmcm9tIGJvb3RlcgorICogYW5kIGlzIGNvbnZlcnRlZCBoZXJlIGZyb20gYSBib290ZXIgdHlwZSBkZWZpbml0aW9uIHRvIGEgc2VwYXJhdGUgYml0CisgKiBudW1iZXIgd2hpY2ggYWxsb3dzIGZvciB0aGUgc3RhbmRhcmQgaXNfMHgwIG1hY3JvIHRlc3RzLgorICovCisJbW92ZWwJJXBjQChtNjhrX2NwdXR5cGUpLCVkMAorCS8qCisJICogQXNzdW1lIGl0J3MgYW4gMDMwCisJICovCisJY2xybAklZDEKKworCS8qCisJICogVGVzdCB0aGUgQm9vdEluZm8gY3B1dHlwZSBmb3IgMDYwCisJICovCisJYnRzdAkjQ1BVQl82ODA2MCwlZDAKKwlqZXEJMWYKKwlic2V0CSNDUFVUWVBFXzA2MCwlZDEKKwlic2V0CSNDUFVUWVBFXzA0NjAsJWQxCisJanJhCTNmCisxOgorCS8qCisJICogVGVzdCB0aGUgQm9vdEluZm8gY3B1dHlwZSBmb3IgMDQwCisJICovCisJYnRzdAkjQ1BVQl82ODA0MCwlZDAKKwlqZXEJMmYKKwlic2V0CSNDUFVUWVBFXzA0MCwlZDEKKwlic2V0CSNDUFVUWVBFXzA0NjAsJWQxCisJanJhCTNmCisyOgorCS8qCisJICogVGVzdCB0aGUgQm9vdEluZm8gY3B1dHlwZSBmb3IgMDIwCisJICovCisJYnRzdAkjQ1BVQl82ODAyMCwlZDAKKwlqZXEJM2YKKwlic2V0CSNDUFVUWVBFXzAyMCwlZDEKKwlqcmEJM2YKKzM6CisJLyoKKwkgKiBSZWNvcmQgdGhlIGNwdSB0eXBlCisJICovCisJbGVhCSVwY0AoTChjcHV0eXBlKSksJWEwCisJbW92ZWwJJWQxLCVhMEAKKworCS8qCisJICogTk9URToKKwkgKgorCSAqIE5vdyB0aGUgbWFjcm9zIGFyZSB2YWxpZDoKKwkgKglpc18wNDBfb3JfMDYwCisJICoJaXNfbm90XzA0MF9vcl8wNjAKKwkgKglpc18wNDAKKwkgKglpc18wNjAKKwkgKglpc19ub3RfMDYwCisJICovCisKKwkvKgorCSAqIERldGVybWluZSB0aGUgY2FjaGUgbW9kZSBmb3IgcGFnZXMgaG9sZGluZyBNTVUgdGFibGVzCisJICogYW5kIGZvciBzdXBlcnZpc29yIG1vZGUsIHVudXNlZCBmb3IgJzAyMCBhbmQgJzAzMAorCSAqLworCWNscmwJJWQwCisJY2xybAklZDEKKworCWlzX25vdF8wNDBfb3JfMDYwKEwoc2F2ZV9jYWNoZXR5cGUpKQorCisJLyoKKwkgKiAnMDQwIG9yICcwNjAKKwkgKiBkMSA6PSBjYWNoZWFibGUgd3JpdGUtdGhyb3VnaAorCSAqIE5PVEU6IFRoZSA2ODA0MCBtYW51YWwgc3Ryb25nbHkgcmVjb21tZW5kcyBub24tY2FjaGVkIGZvciBNTVUgdGFibGVzLAorCSAqIGJ1dCB3ZSBoYXZlIGJlZW4gdXNpbmcgd3JpdGUtdGhyb3VnaCBzaW5jZSBhdCBsZWFzdCAyLjAuMjkgc28gSQorCSAqIGd1ZXNzIGl0IGlzIE9LLgorCSAqLworI2lmZGVmIENPTkZJR18wNjBfV1JJVEVUSFJPVUdICisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgNjgwNjAgYm9hcmQgdXNpbmcgZHJpdmVycyB3aXRoIGNhY2hlIGNvaGVyZW5jeQorCSAqIHByb2JsZW1zLCB0aGVuIHN1cGVydmlzb3IgbWVtb3J5IGFjY2Vzc2VzIG5lZWQgdG8gYmUgd3JpdGUtdGhyb3VnaAorCSAqIGFsc287IG90aGVyd2lzZSwgd2Ugd2FudCBjb3B5YmFjay4KKwkgKi8KKworCWlzX25vdF8wNjAoMWYpCisJbW92ZWwJI19QQUdFX0NBQ0hFMDQwVywlZDAKKwlqcmEJTChzYXZlX2NhY2hldHlwZSkKKyNlbmRpZiAvKiBDT05GSUdfMDYwX1dSSVRFVEhST1VHSCAqLworMToKKwltb3ZldwkjX1BBR0VfQ0FDSEUwNDAsJWQwCisKKwltb3ZlbAkjX1BBR0VfQ0FDSEUwNDBXLCVkMQorCitMKHNhdmVfY2FjaGV0eXBlKToKKwkvKiBTYXZlIGNhY2hlIG1vZGUgZm9yIHN1cGVydmlzb3IgbW9kZSBhbmQgcGFnZSB0YWJsZXMKKwkgKi8KKwlsZWEJJXBjQChtNjhrX3N1cGVydmlzb3JfY2FjaGVtb2RlKSwlYTAKKwltb3ZlbAklZDAsJWEwQAorCWxlYQklcGNAKG02OGtfcGd0YWJsZV9jYWNoZW1vZGUpLCVhMAorCW1vdmVsCSVkMSwlYTBACisKKy8qCisgKiByYWlzZSBpbnRlcnJ1cHQgbGV2ZWwKKyAqLworCW1vdmV3CSMweDI3MDAsJXNyCisKKy8qCisgICBJZiBydW5uaW5nIG9uIGFuIEF0YXJpLCBkZXRlcm1pbmUgdGhlIEkvTyBiYXNlIG9mIHRoZQorICAgc2VyaWFsIHBvcnQgYW5kIHRlc3QgaWYgd2UgYXJlIHJ1bm5pbmcgb24gYSBNZWR1c2Egb3IgSGFkZXMuCisgICBUaGlzIHRlc3QgaXMgbmVjZXNzYXJ5IGhlcmUsIGJlY2F1c2Ugb24gdGhlIEhhZGVzIHRoZSBzZXJpYWwKKyAgIHBvcnQgaXMgb25seSBhY2Nlc3NpYmxlIGluIHRoZSBoaWdoIEkvTyBtZW1vcnkgYXJlYS4KKworICAgVGhlIHRlc3Qgd2hldGhlciBpdCBpcyBhIE1lZHVzYSBpcyBkb25lIGJ5IHdyaXRpbmcgdG8gdGhlIGJ5dGUgYXQKKyAgIHBoeXMuIDB4MC4gVGhpcyBzaG91bGQgcmVzdWx0IGluIGEgYnVzIGVycm9yIG9uIGFsbCBvdGhlciBtYWNoaW5lcy4KKworICAgLi4uc2hvdWxkLCBidXQgZG9lc24ndC4gVGhlIEFmdGVyYnVybmVyMDQwIGZvciB0aGUgRmFsY29uIGhhcyB0aGUKKyAgIHNhbWUgYmVoYXZpb3VyICgweDAuLjB4NyBhcmUgbm8gUk9NIHNoYWRvdykuIFNvIHdlIGhhdmUgdG8gZG8KKyAgIGFub3RoZXIgdGVzdCB0byBkaXN0aW5ndWlzaCBNZWR1c2EgYW5kIEFCMDQwLiBUaGlzIGlzIGEKKyAgIHJlYWQgYXR0ZW1wdCBmb3IgMHgwMGZmODJmZSBwaHlzLiB0aGF0IHNob3VsZCBidXMgZXJyb3Igb24gYSBGYWxjb24KKyAgICgrQUIwNDApLCBidXQgaXMgaW4gdGhlIHJhbmdlIHdoZXJlIHRoZSBNZWR1c2EgYWx3YXlzIGFzc2VydHMgRFRBQ0suCisKKyAgIFRoZSB0ZXN0IGZvciB0aGUgSGFkZXMgaXMgZG9uZSBieSByZWFkaW5nIGFkZHJlc3MgMHhiMDAwMDAwMC4gVGhpcworICAgc2hvdWxkIGdpdmUgYSBidXMgZXJyb3Igb24gdGhlIE1lZHVzYS4KKyAqLworCisjaWZkZWYgQ09ORklHX0FUQVJJCisJaXNfbm90X2F0YXJpKEwobm90eXBldGVzdCkpCisKKwkvKiBnZXQgc3BlY2lhbCBtYWNoaW5lIHR5cGUgKE1lZHVzYS9IYWRlcy9BQjQwKSAqLworCW1vdmVxCSMwLCVkMyAvKiBkZWZhdWx0IGlmIHRhZyBkb2Vzbid0IGV4aXN0ICovCisJZ2V0X2JpX3JlY29yZAlCSV9BVEFSSV9NQ0hfVFlQRQorCXRzdGwJJWQwCisJamJtaQkxZgorCW1vdmVsCSVhMEAsJWQzCisJbGVhCSVwY0AoYXRhcmlfbWNoX3R5cGUpLCVhMAorCW1vdmVsCSVkMywlYTBACisxOgorCS8qIE9uIHRoZSBIYWRlcywgdGhlIGlvYmFzZSBtdXN0IGJlIHNldCB1cCBiZWZvcmUgb3BlbmluZyB0aGUKKwkgKiBzZXJpYWwgcG9ydC4gVGhlcmUgYXJlIG5vIEkvTyByZWdzIGF0IDB4MDBmZnh4eHggYXQgYWxsLiAqLworCW1vdmVxCSMwLCVkMAorCWNtcGwJI0FUQVJJX01BQ0hfSEFERVMsJWQzCisJamJuZQkxZgorCW1vdmVsCSMweGZmMDAwMDAwLCVkMAkJLyogSGFkZXMgSS9PIGJhc2UgYWRkcjogMHhmZjAwMDAwMCAqLworMToJbGVhICAgICAlcGNAKEwoaW9iYXNlKSksJWEwCisJbW92ZWwgICAlZDAsJWEwQAorCitMKG5vdHlwZXRlc3QpOgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVk1FCisJaXNfbXZtZTE0NyhMKGdldHZtZXR5cGUpKQorCWlzX2J2bWU2MDAwKEwoZ2V0dm1ldHlwZSkpCisJaXNfbm90X212bWUxNngoTChndnRkb25lKSkKKworCS8qIFNlZSBpZiB0aGUgbG9hZGVyIGhhcyBzcGVjaWZpZWQgdGhlIEJJX1ZNRV9UWVBFIHRhZy4gIFJlY2VudAorCSAqIHZlcnNpb25zIG9mIFZNRUxJTE8gYW5kIFRGVFBMSUxPIGRvIHRoaXMuICBXZSBoYXZlIHRvIGRvIHRoaXMKKwkgKiBlYXJseSBzbyB3ZSBrbm93IGhvdyB0byBoYW5kbGUgY29uc29sZSBvdXRwdXQuICBJZiB0aGUgdGFnCisJICogZG9lc24ndCBleGlzdCB0aGVuIHdlIHVzZSB0aGUgQnVnIGZvciBvdXRwdXQgb24gTVZNRTE2eC4KKwkgKi8KK0woZ2V0dm1ldHlwZSk6CisJZ2V0X2JpX3JlY29yZAlCSV9WTUVfVFlQRQorCXRzdGwJJWQwCisJamJtaQkxZgorCW1vdmVsCSVhMEAsJWQzCisJbGVhCSVwY0Aodm1lX2JyZHR5cGUpLCVhMAorCW1vdmVsCSVkMywlYTBACisxOgorI2lmZGVmIENPTkZJR19NVk1FMTZ4CisJaXNfbm90X212bWUxNngoTChndnRkb25lKSkKKworCS8qIE5lZWQgdG8gZ2V0IHRoZSBCUkRfSUQgaW5mbyB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gMTYyLCAxNjcsCisJICogZXRjLiAgVGhpcyBpcyBhdmFpbGFibGUgYXMgYSBCSV9WTUVfQlJESU5GTyB0YWcgd2l0aCBsYXRlcgorCSAqIHZlcnNpb25zIG9mIFZNRUxJTE8gYW5kIFRGVFBMSUxPLCBvdGhlcndpc2Ugd2UgY2FsbCB0aGUgQnVnLgorCSAqLworCWdldF9iaV9yZWNvcmQJQklfVk1FX0JSRElORk8KKwl0c3RsCSVkMAorCWpwbAkxZgorCisJLyogR2V0IHBvaW50ZXIgdG8gYm9hcmQgSUQgZGF0YSBmcm9tIEJ1ZyAqLworCW1vdmVsCSVkMiwlc3BALQorCXRyYXAJIzE1CisJLndvcmQJMHg3MAkJLyogdHJhcCAweDcwIC0gLkJSRF9JRCAqLworCW1vdmVsCSVzcEArLCVhMAorMToKKwlsZWEJJXBjQChtdm1lX2JkaWQpLCVhMQorCS8qIFN0cnVjdHVyZSBpcyAzMiBieXRlcyBsb25nICovCisJbW92ZWwJJWEwQCssJWExQCsKKwltb3ZlbAklYTBAKywlYTFAKworCW1vdmVsCSVhMEArLCVhMUArCisJbW92ZWwJJWEwQCssJWExQCsKKwltb3ZlbAklYTBAKywlYTFAKworCW1vdmVsCSVhMEArLCVhMUArCisJbW92ZWwJJWEwQCssJWExQCsKKwltb3ZlbAklYTBAKywlYTFAKworI2VuZGlmCisKK0woZ3Z0ZG9uZSk6CisKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hQMzAwCisJaXNfbm90X2hwMzAwKEwobm90aHApKQorCisJLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBVQVJUIGZvciBzZXJpYWwgZGVidWdnaW5nICovCisJZ2V0X2JpX3JlY29yZAlCSV9IUDMwMF9VQVJUX0FERFIKKwl0c3RsCSVkMAorCWpibWkJMWYKKwltb3ZlbAklYTBALCVkMworCWxlYQklcGNAKEwodWFydGJhc2UpKSwlYTAKKwltb3ZlbAklZDMsJWEwQAorCWdldF9iaV9yZWNvcmQJQklfSFAzMDBfVUFSVF9TQ09ERQorCXRzdGwJJWQwCisJamJtaQkxZgorCW1vdmVsCSVhMEAsJWQzCisJbGVhCSVwY0AoTCh1YXJ0X3Njb2RlKSksJWEwCisJbW92ZWwJJWQzLCVhMEAKKzE6CitMKG5vdGhwKToKKyNlbmRpZgorCisvKgorICogSW5pdGlhbGl6ZSBzZXJpYWwgcG9ydAorICovCisJamJzcglMKHNlcmlhbF9pbml0KQorCisvKgorICogSW5pdGlhbGl6ZSBjb25zb2xlCisgKi8KKyNpZmRlZiBDT05GSUdfTUFDCisJaXNfbm90X21hYyhMKG5vY29uKSkKKyNpZmRlZiBDT05TT0xFCisJY29uc29sZV9pbml0CisjaWZkZWYgQ09OU09MRV9QRU5HVUlOCisJY29uc29sZV9wdXRfcGVuZ3VpbgorI2VuZGlmCS8qIENPTlNPTEVfUEVOR1VJTiAqLworCWNvbnNvbGVfcHV0X3N0YXRzCisjZW5kaWYJLyogQ09OU09MRSAqLworTChub2Nvbik6CisjZW5kaWYJLyogQ09ORklHX01BQyAqLworCisKKwlwdXRjCSdcbicKKwlwdXRjCSdBJworCWxlZHMJMHgyCisJZHB1dG4JJXBjQChMKGNwdXR5cGUpKQorCWRwdXRuCSVwY0AobTY4a19zdXBlcnZpc29yX2NhY2hlbW9kZSkKKwlkcHV0bgklcGNAKG02OGtfcGd0YWJsZV9jYWNoZW1vZGUpCisJZHB1dGMJJ1xuJworCisvKgorICogU2F2ZSBwaHlzaWNhbCBzdGFydCBhZGRyZXNzIG9mIGtlcm5lbAorICovCisJbGVhCSVwY0AoTChwaHlzX2tlcm5lbF9zdGFydCkpLCVhMAorCWxlYQklcGNAKF9zdGV4dCksJWExCisJc3VibAkjX3N0ZXh0LCVhMQorCWFkZGwJI1BBR0VfT0ZGU0VULCVhMQorCW1vdmVsCSVhMSwlYTBACisKKwlwdXRjCSdCJworCisJbGVkcwkweDQKKworLyoKKyAqCW1tdV9pbml0CisgKgorICoJVGhpcyBibG9jayBvZiBjb2RlIGRvZXMgd2hhdCdzIG5lY2Vzc2FyeSB0byBtYXAgaW4gdGhlIHZhcmlvdXMga2luZHMKKyAqCW9mIG1hY2hpbmVzIGZvciBleGVjdXRpb24gb2YgTGludXguCisgKglGaXJzdCBtYXAgdGhlIGZpcnN0IDQgTUIgb2Yga2VybmVsIGNvZGUgJiBkYXRhCisgKi8KKworCW1tdV9tYXAJI1BBR0VfT0ZGU0VULCVwY0AoTChwaHlzX2tlcm5lbF9zdGFydCkpLCM0KjEwMjQqMTAyNCxcCisJCSVwY0AobTY4a19zdXBlcnZpc29yX2NhY2hlbW9kZSkKKworCXB1dGMJJ0MnCisKKyNpZmRlZiBDT05GSUdfQU1JR0EKKworTChtbXVfaW5pdF9hbWlnYSk6CisKKwlpc19ub3RfYW1pZ2EoTChtbXVfaW5pdF9ub3RfYW1pZ2EpKQorLyoKKyAqIG1tdV9pbml0X2FtaWdhCisgKi8KKworCXB1dGMJJ0QnCisKKwlpc19ub3RfMDQwX29yXzA2MCgxZikKKworCS8qCisJICogMDQwOiBNYXAgdGhlIDE2TWVnIHJhbmdlIHBoeXNpY2FsIDB4MCB1cHRvIGxvZ2ljYWwgMHg4MDAwLjAwMDAKKwkgKi8KKwltbXVfbWFwCQkjMHg4MDAwMDAwMCwjMCwjMHgwMTAwMDAwMCwjX1BBR0VfTk9DQUNIRV9TCisJLyoKKwkgKiBNYXAgdGhlIFpvcnJvIElJSSBJL08gc3BhY2Ugd2l0aCB0cmFuc3BhcmVudCB0cmFuc2xhdGlvbgorCSAqIGZvciBmcmFtZSBidWZmZXIgbWVtb3J5IGV0Yy4KKwkgKi8KKwltbXVfbWFwX3R0CSMxLCMweDQwMDAwMDAwLCMweDIwMDAwMDAwLCNfUEFHRV9OT0NBQ0hFX1MKKworCWpicmEJTChtbXVfaW5pdF9kb25lKQorCisxOgorCS8qCisJICogMDMwOglNYXAgdGhlIDMyTWVnIHJhbmdlIHBoeXNpY2FsIDB4MCB1cHRvIGxvZ2ljYWwgMHg4MDAwLjAwMDAKKwkgKi8KKwltbXVfbWFwCQkjMHg4MDAwMDAwMCwjMCwjMHgwMjAwMDAwMCwjX1BBR0VfTk9DQUNIRTAzMAorCW1tdV9tYXBfdHQJIzEsIzB4NDAwMDAwMDAsIzB4MjAwMDAwMDAsI19QQUdFX05PQ0FDSEUwMzAKKworCWpicmEJTChtbXVfaW5pdF9kb25lKQorCitMKG1tdV9pbml0X25vdF9hbWlnYSk6CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BVEFSSQorCitMKG1tdV9pbml0X2F0YXJpKToKKworCWlzX25vdF9hdGFyaShMKG1tdV9pbml0X25vdF9hdGFyaSkpCisKKwlwdXRjCSdFJworCisvKiBPbiB0aGUgQXRhcmksIHdlIG1hcCB0aGUgSS9PIHJlZ2lvbiAocGh5cy4gMHgwMGZmeHh4eCkgYnkgbWFwcGluZworICAgdGhlIGxhc3QgMTYgTUIgb2YgdmlydHVhbCBhZGRyZXNzIHNwYWNlIHRvIHRoZSBmaXJzdCAxNiBNQiAoaS5lLgorICAgMHhmZnh4eHh4eCAtPiAweDAweHh4eHh4KS4gRm9yIHRoaXMsIGFuIGFkZGl0aW9uYWwgcG9pbnRlciB0YWJsZSBpcworICAgbmVlZGVkLiBJL08gcmFuZ2VzIGFyZSBtYXJrZWQgbm9uLWNhY2hhYmxlLgorCisgICBGb3IgdGhlIE1lZHVzYSBpdCBpcyBiZXR0ZXIgdG8gbWFwIHRoZSBJL08gcmVnaW9uIHRyYW5zcGFyZW50bHkKKyAgIChpLmUuIDB4ZmZ4eHh4eHggLT4gMHhmZnh4eHh4eCksIGJlY2F1c2Ugc29tZSBJL08gcmVnaXN0ZXJzIGFyZQorICAgYWNjZXNzaWJsZSBvbmx5IGluIHRoZSBoaWdoIGFyZWEuCisKKyAgIE9uIHRoZSBIYWRlcyBhbGwgSS9PIHJlZ2lzdGVycyBhcmUgb25seSBhY2Nlc3NpYmxlIGluIHRoZSBoaWdoCisgICBhcmVhLgorKi8KKworCS8qIEkvTyBiYXNlIGFkZHIgZm9yIG5vbi1NZWR1c2EsIG5vbi1IYWRlczogMHgwMDAwMDAwMCAqLworCW1vdmVxCSMwLCVkMAorCW1vdmVsCSVwY0AoYXRhcmlfbWNoX3R5cGUpLCVkMworCWNtcGwJI0FUQVJJX01BQ0hfTUVEVVNBLCVkMworCWpiZXEJMmYKKwljbXBsCSNBVEFSSV9NQUNIX0hBREVTLCVkMworCWpibmUJMWYKKzI6CW1vdmVsCSMweGZmMDAwMDAwLCVkMCAvKiBNZWR1c2EvSGFkZXMgYmFzZSBhZGRyOiAweGZmMDAwMDAwICovCisxOgltb3ZlbAklZDAsJWQzCisKKwlpc18wNDBfb3JfMDYwKEwoc3BhdGE2ODA0MCkpCisKKwkvKiBNYXAgZXZlcnl0aGluZyBub24tY2FjaGVhYmxlLCB0aG91Z2ggbm90IGFsbCBwYXJ0cyByZWFsbHkKKwkgKiBuZWVkIHRvIGRpc2FibGUgY2FjaGVzIChjcnVjaWFsIG9ubHkgZm9yIDB4ZmY4MDAwLi4weGZmZmZmZgorCSAqIChzdGFuZGFyZCBJL08pIGFuZCAweGYwMDAwMC4uMHhmM2ZmZmYgKElERSkpLiBUaGUgcmVtYWluZGVyCisJICogaXNuJ3QgcmVhbGx5IHVzZWQsIGV4Y2VwdCBmb3Igc29tZXRpbWVzIHBlZWtpbmcgaW50byB0aGUKKwkgKiBST01zIChtaXJyb3IgYXQgcGh5cy4gMHgwKSwgc28gY2FjaGluZyBpc24ndCBuZWNlc3NhcnkgZm9yCisJICogdGhpcy4gKi8KKwltbXVfbWFwCSMweGZmMDAwMDAwLCVkMywjMHgwMTAwMDAwMCwjX1BBR0VfTk9DQUNIRTAzMAorCisJamJyYQlMKG1tdV9pbml0X2RvbmUpCisKK0woc3BhdGE2ODA0MCk6CisKKwltbXVfbWFwCSMweGZmMDAwMDAwLCVkMywjMHgwMTAwMDAwMCwjX1BBR0VfTk9DQUNIRV9TCisKKwlqYnJhCUwobW11X2luaXRfZG9uZSkKKworTChtbXVfaW5pdF9ub3RfYXRhcmkpOgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUTQwCisJaXNfbm90X3E0MChMKG5vdHE0MCkpCisJLyoKKwkgKiBhZGQgdHJhbnNwYXJlbnQgbWFwcGluZyBmb3IgMHhmZjAwIDAwMDAgLSAweGZmZmYgZmZmZgorCSAqIG5vbi1jYWNoZWQgc2VyaWFsaXplZCBldGMuLgorCSAqIHRoaXMgaW5jbHVkZXMgbWFzdGVyIGNoaXAsIERBQywgUlRDIGFuZCBJU0EgcG9ydHMKKwkgKiAweGZlMDAwMDAwLTB4ZmVmZmZmZmYgaXMgZm9yIHNjcmVlbiBhbmQgUk9NCisJICovCisKKwlwdXRjICAgICdRJworCisJbW11X21hcF90dAkjMCwjMHhmZTAwMDAwMCwjMHgwMTAwMDAwMCwjX1BBR0VfQ0FDSEUwNDBXCisJbW11X21hcF90dAkjMSwjMHhmZjAwMDAwMCwjMHgwMTAwMDAwMCwjX1BBR0VfTk9DQUNIRV9TCisKKwlqYnJhCUwobW11X2luaXRfZG9uZSkKKworTChub3RxNDApOgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSFAzMDAKKwlpc19ub3RfaHAzMDAoTChub3RocDMwMCkpCisKKwkvKiBPbiB0aGUgSFAzMDAsIHdlIG1hcCB0aGUgUk9NLCBJTlRJTyBhbmQgRElPIHJlZ2lvbnMgKHBoeXMuIDB4MDB4eHh4eHgpCisJICogYnkgbWFwcGluZyAzMk1CIChvbiAwMjAvMDMwKSBvciAxNiBNQiAob24gMDQwKSBmcm9tIDB4ZjB4eHh4eHggLT4gMHgwMHh4eHh4eCkuCisJICogVGhlIFJPTSBtYXBwaW5nIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBMRURzIGFyZSBtYXBwZWQgdGhlcmUgdG9vLgorCSAqLworCisJaXNfMDQwKDFmKQorCisJLyoKKwkgKiAwMzA6IE1hcCB0aGUgMzJNZWcgcmFuZ2UgcGh5c2ljYWwgMHgwIHVwdG8gbG9naWNhbCAweGYwMDAuMDAwMAorCSAqLworCW1tdV9tYXAJIzB4ZjAwMDAwMDAsIzAsIzB4MDIwMDAwMDAsI19QQUdFX05PQ0FDSEUwMzAKKworCWpicmEJTChtbXVfaW5pdF9kb25lKQorCisxOgorCS8qCisJICogMDQwOiBNYXAgdGhlIDE2TWVnIHJhbmdlIHBoeXNpY2FsIDB4MCB1cHRvIGxvZ2ljYWwgMHhmMDAwLjAwMDAKKwkgKi8KKwltbXVfbWFwICMweGYwMDAwMDAwLCMwLCMweDAxMDAwMDAwLCNfUEFHRV9OT0NBQ0hFX1MKKworCWpicmEJTChtbXVfaW5pdF9kb25lKQorCitMKG5vdGhwMzAwKToKKyNlbmRpZiAvKiBDT05GSUdfSFAzMDAgKi8KKworI2lmZGVmIENPTkZJR19NVk1FMTQ3CisKKwlpc19ub3RfbXZtZTE0NyhMKG5vdDE0NykpCisKKwkvKgorCSAqIE9uIE1WTUUxNDcgd2UgaGF2ZSBhbHJlYWR5IGNyZWF0ZWQga2VybmVsIHBhZ2UgdGFibGVzIGZvcgorCSAqIDRNQiBvZiBSQU0gYXQgYWRkcmVzcyAwLCBzbyBub3cgbmVlZCB0byBkbyBhIHRyYW5zcGFyZW50CisJICogbWFwcGluZyBvZiB0aGUgdG9wIG9mIG1lbW9yeSBzcGFjZS4gIE1ha2UgaXQgMC41R0J5dGUgZm9yIG5vdywKKwkgKiBzbyB3ZSBjYW4gYWNjZXNzIG9uLWJvYXJkIGkvbyBhcmVhcy4KKwkgKi8KKworCW1tdV9tYXBfdHQJIzEsIzB4ZTAwMDAwMDAsIzB4MjAwMDAwMDAsI19QQUdFX05PQ0FDSEUwMzAKKworCWpicmEJTChtbXVfaW5pdF9kb25lKQorCitMKG5vdDE0Nyk6CisjZW5kaWYgLyogQ09ORklHX01WTUUxNDcgKi8KKworI2lmZGVmIENPTkZJR19NVk1FMTZ4CisKKwlpc19ub3RfbXZtZTE2eChMKG5vdDE2eCkpCisKKwkvKgorCSAqIE9uIE1WTUUxNnggd2UgaGF2ZSBhbHJlYWR5IGNyZWF0ZWQga2VybmVsIHBhZ2UgdGFibGVzIGZvcgorCSAqIDRNQiBvZiBSQU0gYXQgYWRkcmVzcyAwLCBzbyBub3cgbmVlZCB0byBkbyBhIHRyYW5zcGFyZW50CisJICogbWFwcGluZyBvZiB0aGUgdG9wIG9mIG1lbW9yeSBzcGFjZS4gIE1ha2UgaXQgMC41R0J5dGUgZm9yIG5vdy4KKwkgKiBTdXBlcnZpc29yIG9ubHkgYWNjZXNzLCBzbyB0cmFuc3BhcmVudCBtYXBwaW5nIGRvZXNuJ3QKKwkgKiBjbGFzaCB3aXRoIFVzZXIgY29kZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuCisJICogdGhpcyBjb3ZlcnMgSU8gZGV2aWNlcywgUFJPTSBhbmQgU1JBTS4gIFRoZSBQUk9NIGFuZCBTUkFNCisJICogbWFwcGluZyBpcyBuZWVkZWQgdG8gYWxsb3cgMTY3QnVnIHRvIHJ1bi4KKwkgKiBJTyBpcyBpbiB0aGUgcmFuZ2UgMHhmZmYwMDAwMCB0byAweGZmZmVmZmZmLgorCSAqIFBST00gaXMgMHhmZjgwMDAwMC0+MHhmZmJmZmZmZiBhbmQgU1JBTSBpcworCSAqIDB4ZmZlMDAwMDAtPjB4ZmZlMWZmZmYuCisJICovCisKKwltbXVfbWFwX3R0CSMxLCMweGUwMDAwMDAwLCMweDIwMDAwMDAwLCNfUEFHRV9OT0NBQ0hFX1MKKworCWpicmEJTChtbXVfaW5pdF9kb25lKQorCitMKG5vdDE2eCk6CisjZW5kaWYJLyogQ09ORklHX01WTUUxNjIgfCBDT05GSUdfTVZNRTE2NyAqLworCisjaWZkZWYgQ09ORklHX0JWTUU2MDAwCisKKwlpc19ub3RfYnZtZTYwMDAoTChub3Q2MDAwKSkKKworCS8qCisJICogT24gQlZNRTYwMDAgd2UgaGF2ZSBhbHJlYWR5IGNyZWF0ZWQga2VybmVsIHBhZ2UgdGFibGVzIGZvcgorCSAqIDRNQiBvZiBSQU0gYXQgYWRkcmVzcyAwLCBzbyBub3cgbmVlZCB0byBkbyBhIHRyYW5zcGFyZW50CisJICogbWFwcGluZyBvZiB0aGUgdG9wIG9mIG1lbW9yeSBzcGFjZS4gIE1ha2UgaXQgMC41R0J5dGUgZm9yIG5vdywKKwkgKiBzbyB3ZSBjYW4gYWNjZXNzIG9uLWJvYXJkIGkvbyBhcmVhcy4KKwkgKiBTdXBlcnZpc29yIG9ubHkgYWNjZXNzLCBzbyB0cmFuc3BhcmVudCBtYXBwaW5nIGRvZXNuJ3QKKwkgKiBjbGFzaCB3aXRoIFVzZXIgY29kZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuCisJICovCisKKwltbXVfbWFwX3R0CSMxLCMweGUwMDAwMDAwLCMweDIwMDAwMDAwLCNfUEFHRV9OT0NBQ0hFX1MKKworCWpicmEJTChtbXVfaW5pdF9kb25lKQorCitMKG5vdDYwMDApOgorI2VuZGlmIC8qIENPTkZJR19CVk1FNjAwMCAqLworCisvKgorICogbW11X2luaXRfbWFjCisgKgorICogVGhlIE1hY2ludG9zaCBtYXBwaW5ncyBhcmUgbGVzcyBjbGVhci4KKyAqCisgKiBFdmVuIGFzIG9mIHRoaXMgd3JpdGluZywgaXQgaXMgdW5jbGVhciBob3cgdGhlCisgKiBNYWNpbnRvc2ggbWFwcGluZ3Mgd2lsbCBiZSBkb25lLiAgSG93ZXZlciwgYXMKKyAqIHRoZSBmaXJzdCBhdXRob3Igb2YgdGhpcyBjb2RlIEknbSBwcm9wb3NpbmcgdGhlCisgKiBmb2xsb3dpbmcgbW9kZWw6CisgKgorICogTWFwIHRoZSBrZXJuZWwgKHRoYXQncyBhbHJlYWR5IGRvbmUpLAorICogTWFwIHRoZSBJL08gKG9uIG1vc3QgbWFjaGluZXMgdGhhdCdzIHRoZQorICogMHg1MDAwLjAwMDAgLi4uIDB4NTMwMC4wMDAwIHJhbmdlLAorICogTWFwIHRoZSB2aWRlbyBmcmFtZSBidWZmZXIgdXNpbmcgYXMgZmV3IHBhZ2VzCisgKiBhcyBhYnNvbHV0ZWx5ICh0aGlzIHJlcXVpcmVtZW50IG1vc3RseSBzdGVtcyBmcm9tCisgKiB0aGUgZmFjdCB0aGF0IHdoZW4gdGhlIGZyYW1lIGJ1ZmZlciBpcyBhdAorICogMHgwMDAwLjAwMDAgdGhlbiB3ZSBrbm93IHRoZXJlIGlzIHZhbGlkIFJBTSBqdXN0CisgKiBhYm92ZSB0aGUgc2NyZWVuIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byB3YXN0ZSEpLgorICoKKyAqIEJ5IHRoZSB3YXksIGlmIHRoZSBmcmFtZSBidWZmZXIgaXMgYXQgMHgwMDAwLjAwMDAKKyAqIHRoZW4gdGhlIE1hY2ludG9zaCBpcyBrbm93biBhcyBhbiBSQlYgYmFzZWQgTWFjLgorICoKKyAqIEJ5IHRoZSB3YXkgMiwgdGhlIGNvZGUgY3VycmVudGx5IG1hcHMgaW4gYSBidW5jaCBvZgorICogcmVnaW9ucy4gIEJ1dCBJJ2QgbGlrZSB0byBjdXQgdGhhdCBvdXQuICAoQW5kIG1vdmUgbW9zdAorICogb2YgdGhlIG1hcHBpbmdzIHVwIGludG8gdGhlIGtlcm5lbCBwcm9wZXIgLi4uIG9yIG9ubHkKKyAqIG1hcCB3aGF0J3MgbmVjZXNzYXJ5LikKKyAqLworCisjaWZkZWYgQ09ORklHX01BQworCitMKG1tdV9pbml0X21hYyk6CisKKwlpc19ub3RfbWFjKEwobW11X2luaXRfbm90X21hYykpCisKKwlwdXRjCSdGJworCisJaXNfbm90XzA0MF9vcl8wNjAoMWYpCisKKwltb3ZlcQkjX1BBR0VfTk9DQUNIRV9TLCVkMworCWpicmEJMmYKKzE6CisJbW92ZXEJI19QQUdFX05PQ0FDSEUwMzAsJWQzCisyOgorCS8qCisJICogTWFjIE5vdGU6IHNjcmVlbiBhZGRyZXNzIG9mIGxvZ2ljYWwgMHhGMDAwLjAwMDAgLT4gPHNjcmVlbiBwaHlzaWNhbD4KKwkgKgkgICAgIHdlIHNpbXBseSBtYXAgdGhlIDRNQiB0aGF0IGNvbnRhaW5zIHRoZSB2aWRlb21lbQorCSAqLworCisJbW92ZWwJI1ZJREVPTUVNTUFTSywlZDAKKwlhbmRsCSVwY0AoTChtYWNfdmlkZW9iYXNlKSksJWQwCisKKwltbXVfbWFwCQkjVklERU9NRU1CQVNFLCVkMCwjVklERU9NRU1TSVpFLCVkMworCS8qIFJPTSBmcm9tIDQwMDAgMDAwMCB0byA0MjAwIDAwMDAgKG9ubHkgZm9yIG1hY19yZXNldCgpKSAqLworCW1tdV9tYXBfZXEJIzB4NDAwMDAwMDAsIzB4MDIwMDAwMDAsJWQzCisJLyogSU8gZGV2aWNlcyAoaW5jbC4gc2VyaWFsIHBvcnQpIGZyb20gNTAwMCAwMDAwIHRvIDUzMDAgMDAwMCAqLworCW1tdV9tYXBfZXEJIzB4NTAwMDAwMDAsIzB4MDMwMDAwMDAsJWQzCisJLyogTnVidXMgc2xvdCBzcGFjZSAodmlkZW8gYXQgMHhGMDAwMDAwMCwgcm9tIGF0IDB4RjBGODAwMDApICovCisJbW11X21hcF90dAkjMSwjMHhmODAwMDAwMCwjMHgwODAwMDAwMCwlZDMKKworCWpicmEJTChtbXVfaW5pdF9kb25lKQorCitMKG1tdV9pbml0X25vdF9tYWMpOgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU1VOM1gKKwlpc19ub3Rfc3VuM3goTChub3RzdW4zeCkpCisKKwkvKiBvaCwgdGhlIHBhaW4uLiAgV2UncmUgZ29ubmEgd2FudCB0aGUgcHJvbSBjb2RlIGFmdGVyCisJICogc3RhcnRpbmcgdGhlIE1NVSwgc28gd2UgY29weSB0aGUgbWFwcGluZ3MsIHRyYW5zbGF0aW5nCisJICogZnJvbSA4ayAtPiA0ayBwYWdlcyBhcyB3ZSBnby4KKwkgKi8KKworCS8qIGNvcHkgbWFwcyBmcm9tIDB4ZmVlMDAwMDAgdG8gMHhmZjAwMDAwMCAqLworCW1vdmVsCSMweGZlZTAwMDAwLCAlZDAKKwltb3ZlcQkjUk9PVF9JTkRFWF9TSElGVCwgJWQxCisJbHNybAklZDEsJWQwCisJbW11X2dldF9yb290X3RhYmxlX2VudHJ5CSVkMAorCisJbW92ZWwJIzB4ZmVlMDAwMDAsICVkMAorCW1vdmVxCSNQVFJfSU5ERVhfU0hJRlQsICVkMQorCWxzcmwJJWQxLCVkMAorCWFuZGwJI1BUUl9UQUJMRV9TSVpFLTEsICVkMAorCW1tdV9nZXRfcHRyX3RhYmxlX2VudHJ5CQklYTAsJWQwCisKKwltb3ZlbAkjMHhmZWUwMDAwMCwgJWQwCisJbW92ZXEJI1BBR0VfSU5ERVhfU0hJRlQsICVkMQorCWxzcmwJJWQxLCVkMAorCWFuZGwJI1BBR0VfVEFCTEVfU0laRS0xLCAlZDAKKwltbXVfZ2V0X3BhZ2VfdGFibGVfZW50cnkJJWEwLCVkMAorCisJLyogdGhpcyBpcyB3aGVyZSB0aGUgcHJvbSBwYWdlIHRhYmxlIGxpdmVzICovCisJbW92ZWwJMHhmZWZlMDBkNCwgJWExCisJbW92ZWwJJWExQCwgJWExCisKKwltb3ZlbAkjKCgweDIwMDAwMCA+PiAxMyktMSksICVkMQorCisxOgorCW1vdmVsCSVhMUArLCAlZDMKKwltb3ZlbAklZDMsJWEwQCsKKwlhZGRsCSMweDEwMDAsJWQzCisJbW92ZWwJJWQzLCVhMEArCisKKwlkYnJhCSVkMSwxYgorCisJLyogc2V0dXAgdHQxIGZvciBJL08gKi8KKwltbXVfbWFwX3R0CSMxLCMweDQwMDAwMDAwLCMweDQwMDAwMDAwLCNfUEFHRV9OT0NBQ0hFX1MKKwlqYnJhCUwobW11X2luaXRfZG9uZSkKKworTChub3RzdW4zeCk6CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUE9MTE8KKwlpc19ub3RfYXBvbGxvKEwobm90YXBvbGxvKSkKKworCXB1dGMJJ1AnCisJbW11X21hcCAgICAgICAgICMweDgwMDAwMDAwLCMwLCMweDAyMDAwMDAwLCNfUEFHRV9OT0NBQ0hFMDMwCisKK0wobm90YXBvbGxvKToKKwlqYnJhCUwobW11X2luaXRfZG9uZSkKKyNlbmRpZgorCitMKG1tdV9pbml0X2RvbmUpOgorCisJcHV0YwknRycKKwlsZWRzCTB4OAorCisvKgorICogbW11X2ZpeHVwCisgKgorICogT24gdGhlIDA0MCBjbGFzcyBtYWNoaW5lcywgYWxsIHBhZ2VzIHRoYXQgYXJlIHVzZWQgZm9yIHRoZQorICogbW11IGhhdmUgdG8gYmUgZml4ZWQgdXAuIEFjY29yZGluZyB0byBNb3Rvcm9sYSwgcGFnZXMgaG9sZGluZyBtbXUKKyAqIHRhYmxlcyBzaG91bGQgYmUgbm9uLWNhY2hlYWJsZSBvbiBhICcwNDAgYW5kIHdyaXRlLXRocm91Z2ggb24gYQorICogJzA2MC4gQnV0IGFuYWx5c2lzIG9mIHRoZSByZWFzb25zIGZvciB0aGlzLCBhbmQgcHJhY3RpY2FsCisgKiBleHBlcmllbmNlLCBzaG93ZWQgdGhhdCB3cml0ZS10aHJvdWdoIGFsc28gd29ya3Mgb24gYSAnMDQwLgorICoKKyAqIEFsbG9jYXRlZCBtZW1vcnkgc28gZmFyIGdvZXMgZnJvbSBrZXJuZWxfZW5kIHRvIG1lbW9yeV9zdGFydCB0aGF0CisgKiBpcyB1c2VkIGZvciBhbGwga2luZCBvZiB0YWJsZXMsIGZvciB0aGF0IHRoZSBjYWNoZSBhdHRyaWJ1dGVzCisgKiBhcmUgbm93IGZpeGVkLgorICovCitMKG1tdV9maXh1cCk6CisKKwlpc19ub3RfMDQwX29yXzA2MChMKG1tdV9maXh1cF9kb25lKSkKKworI2lmZGVmIE1NVV9OT0NBQ0hFX0tFUk5FTAorCWpicmEJTChtbXVfZml4dXBfZG9uZSkKKyNlbmRpZgorCisJLyogZmlyc3QgZml4IHRoZSBwYWdlIGF0IHRoZSBzdGFydCBvZiB0aGUga2VybmVsLCB0aGF0CisJICogY29udGFpbnMgYWxzbyBrZXJuZWxfcGdfZGlyLgorCSAqLworCW1vdmVsCSVwY0AoTChwaHlzX2tlcm5lbF9zdGFydCkpLCVkMAorCXN1YmwJI1BBR0VfT0ZGU0VULCVkMAorCWxlYQklcGNAKF9zdGV4dCksJWEwCisJc3VibAklZDAsJWEwCisJbW11X2ZpeHVwX3BhZ2VfbW11X2NhY2hlCSVhMAorCisJbW92ZWwJJXBjQChMKGtlcm5lbF9lbmQpKSwlYTAKKwlzdWJsCSVkMCwlYTAKKwltb3ZlbAklcGNAKEwobWVtb3J5X3N0YXJ0KSksJWExCisJc3VibAklZDAsJWExCisJYnJhCTJmCisxOgorCW1tdV9maXh1cF9wYWdlX21tdV9jYWNoZQklYTAKKwlhZGR3CSNQQUdFU0laRSwlYTAKKzI6CisJY21wbAklYTAsJWExCisJamd0CTFiCisKK0wobW11X2ZpeHVwX2RvbmUpOgorCisjaWZkZWYgTU1VX1BSSU5UCisJbW11X3ByaW50CisjZW5kaWYKKworLyoKKyAqIG1tdV9lbmdhZ2UKKyAqCisgKiBUaGlzIGNodW5rIG9mIGNvZGUgcGVyZm9ybXMgdGhlIGdydWVzb21lIHRhc2sgb2YgZW5nYWdpbmcgdGhlIE1NVS4KKyAqIFRoZSByZWFzb24gaXRzIGdydWVzb21lIGlzIGJlY2F1c2Ugd2hlbiB0aGUgTU1VIGJlY29tZXMgZW5nYWdlZCBpdAorICogbWFwcyBsb2dpY2FsIGFkZHJlc3NlcyB0byBwaHlzaWNhbCBhZGRyZXNzZXMuICBUaGUgUHJvZ3JhbSBDb3VudGVyCisgKiByZWdpc3RlciBpcyB0aGVuIHBhc3NlZCB0aHJvdWdoIHRoZSBNTVUgYmVmb3JlIHRoZSBuZXh0IGluc3RydWN0aW9uCisgKiBpcyBmZXRjaGVkICh0aGUgaW5zdHJ1Y3Rpb24gZm9sbG93aW5nIHRoZSBlbmdhZ2UgTU1VIGluc3RydWN0aW9uKS4KKyAqIFRoaXMgbWF5IG1lYW4gb25lIG9mIHR3byB0aGluZ3M6CisgKiAxLiBUaGUgUHJvZ3JhbSBDb3VudGVyIGZhbGxzIHdpdGhpbiB0aGUgbG9naWNhbCBhZGRyZXNzIHNwYWNlIG9mCisgKiAgICB0aGUga2VybmVsIG9mIHdoaWNoIHRoZXJlIGFyZSB0d28gc3ViLXBvc3NpYmlsaXRpZXM6CisgKiAgICBBLiBUaGUgUEMgbWFwcyB0byB0aGUgY29ycmVjdCBpbnN0cnVjdGlvbiAobG9naWNhbCBQQyA9PSBwaHlzaWNhbAorICogICAgICAgY29kZSBsb2NhdGlvbiksIG9yCisgKiAgICBCLiBUaGUgUEMgZG9lcyBub3QgbWFwIHRocm91Z2ggYW5kIHRoZSBwcm9jZXNzb3Igd2lsbCByZWFkIHNvbWUKKyAqICAgICAgIGRhdGEgKG9yIGluc3RydWN0aW9uKSB3aGljaCBpcyBub3QgdGhlIGxvZ2ljYWxseSBuZXh0IGluc3RyLgorICogICAgQXMgeW91IGNhbiBpbWFnaW5lLCBBIGlzIGdvb2QgYW5kIEIgaXMgYmFkLgorICogQWx0ZXJuYXRpdmVseSwKKyAqIDIuIFRoZSBQcm9ncmFtIENvdW50ZXIgZG9lcyBub3QgbWFwIHRocm91Z2ggdGhlIE1NVS4gIFRoZSBwcm9jZXNzb3IKKyAqICAgIHdpbGwgdGFrZSBhIEJ1cyBFcnJvci4KKyAqIENsZWFybHksIDIgaXMgYmFkLgorICogSXQgZG9lc24ndCB0YWtlIGEgd2l6IGtpZCB0byBmaWd1cmUgeW91IHdhbnQgMS5BLgorICogVGhpcyBjb2RlIGNyZWF0ZXMgdGhhdCBwb3NzaWJpbGl0eS4KKyAqIFRoZXJlIGFyZSB0d28gcG9zc2libGUgMS5BLiBzdGF0ZXMgKHdlIG5vdyBpZ25vcmUgdGhlIG90aGVyIGFib3ZlIHN0YXRlcyk6CisgKiBBLiBUaGUga2VybmVsIGlzIGxvY2F0ZWQgYXQgcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3NlZCB0aGUgc2FtZSBhcworICogICAgdGhlIGxvZ2ljYWwgbWVtb3J5IGZvciB0aGUga2VybmVsLCBpLmUuLCAweDAxMDAwLgorICogQi4gVGhlIGtlcm5lbCBpcyBsb2NhdGVkIHNvbWUgd2hlcmUgZWxzZS4gIGUuZy4sIDB4MDQwMC4wMDAwCisgKgorICogICAgVW5kZXIgc29tZSBjb25kaXRpb25zIHRoZSBNYWNpbnRvc2ggY2FuIGxvb2sgbGlrZSBBIG9yIEIuCisgKiBbQSBmcmllbmQgYW5kIEkgb25jZSBub3RlZCB0aGF0IEFwcGxlIGhhcmR3YXJlIGVuZ2luZWVycyBzaG91bGQgYmUKKyAqIHdhY2tlZCB0d2ljZSBlYWNoIGRheTogb25jZSB3aGVuIHRoZXkgc2hvdyB1cCBhdCB3b3JrIChhcyBpbiwgV2hhY2shLAorICogIlRoaXMgaXMgZm9yIHRoZSBzY3Jld3kgaGFyZHdhcmUgd2Uga25vdyB5b3UncmUgZ29pbmcgdG8gZGVzaWduIHRvZGF5LiIpLAorICogYW5kIGFsc28gYXQgdGhlIGVuZCBvZiB0aGUgZGF5IChhcyBpbiwgV2hhY2shICJJIGRvbid0IGtub3cgd2hhdAorICogeW91IGRlc2lnbmVkIHRvZGF5LCBidXQgSSdtIHN1cmUgaXQgd2Fzbid0IGdvb2QuIikuIC0tIHJzdF0KKyAqCisgKiBUaGlzIGNvZGUgd29ya3Mgb24gdGhlIGZvbGxvd2luZyBwcmVtaXNlOgorICogSWYgdGhlIGtlcm5lbCBzdGFydCAoJWQ1KSBpcyB3aXRoaW4gdGhlIGZpcnN0IDE2IE1lZyBvZiBSQU0sCisgKiB0aGVuIGNyZWF0ZSBhIG1hcHBpbmcgZm9yIHRoZSBrZXJuZWwgYXQgbG9naWNhbCAweDgwMDAuMDAwMCB0bworICogdGhlIHBoeXNpY2FsIGxvY2F0aW9uIG9mIHRoZSBwYy4gIEFuZCwgY3JlYXRlIGEgdHJhbnNwYXJlbnQKKyAqIHRyYW5zbGF0aW9uIHJlZ2lzdGVyIGZvciB0aGUgZmlyc3QgMTYgTWVnLiAgVGhlbiwgYWZ0ZXIgdGhlIE1NVQorICogaXMgZW5nYWdlZCwgdGhlIFBDIGNhbiBiZSBtb3ZlZCB1cCBpbnRvIHRoZSAweDgwMDAuMDAwMCByYW5nZQorICogYW5kIHRoZW4gdGhlIHRyYW5zcGFyZW50IHRyYW5zbGF0aW9uIGNhbiBiZSB0dXJuZWQgb2ZmIGFuZCB0aGVuCisgKiB0aGUgUEMgY2FuIGp1bXAgdG8gdGhlIGNvcnJlY3QgbG9naWNhbCBsb2NhdGlvbiBhbmQgaXQgd2lsbCBiZQorICogaG9tZSAoZmluYWxseSkuICBUaGlzIGlzIGVzc2VudGlhbGx5IHRoZSBjb2RlIHRoYXQgdGhlIEFtaWdhIHVzZWQKKyAqIHRvIHVzZS4gIE5vdywgaXQncyBnZW5lcmFsaXplZCBmb3IgYWxsIHByb2Nlc3NvcnMuICBXaGljaCBtZWFucworICogdGhhdCBhIGZyZXNoIChidXQgdGVtcG9yYXJ5KSBtYXBwaW5nIGhhcyB0byBiZSBjcmVhdGVkLiAgVGhlIG1hcHBpbmcKKyAqIGlzIG1hZGUgaW4gcGFnZSAwIChhbiBhcyBvZiB5ZXQgdW51c2VkIGxvY2F0aW9uIC0tIGV4Y2VwdCBmb3IgdGhlCisgKiBzdGFjayEpLiAgVGhpcyB0ZW1wb3JhcnkgbWFwcGluZyB3aWxsIG9ubHkgcmVxdWlyZSAxIHBvaW50ZXIgdGFibGUKKyAqIGFuZCBhIHNpbmdsZSBwYWdlIHRhYmxlIChpdCBjYW4gbWFwIDI1NkspLgorICoKKyAqIE9LLCBhbHRlcm5hdGl2ZWx5LCBpbWFnaW5lIHRoYXQgdGhlIFByb2dyYW0gQ291bnRlciBpcyBub3Qgd2l0aGluCisgKiB0aGUgZmlyc3QgMTYgTWVnLiAgVGhlbiwganVzdCB1c2UgVHJhbnNwYXJlbnQgVHJhbnNsYXRpb24gcmVnaXN0ZXJzCisgKiB0byBkbyB0aGUgcmlnaHQgdGhpbmcuCisgKgorICogTGFzdCwgaWYgX3N0YXJ0IGlzIGFscmVhZHkgYXQgMHgwMTAwMCwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgc3BlY2lhbAorICogdG8gZG8gKGluIG90aGVyIHdvcmRzLCBpbiBhIGRlZ2VuZXJhdGUgY2FzZSBvZiB0aGUgZmlyc3QgY2FzZSBhYm92ZSwKKyAqIGRvIG5vdGhpbmcpLgorICoKKyAqIExldCdzIGRvIGl0LgorICoKKyAqCisgKi8KKworCXB1dGMJJ0gnCisKKwltbXVfZW5nYWdlCisKKy8qCisgKiBBZnRlciB0aGlzIHBvaW50IG5vIG5ldyBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZAorICogdGhlIHN0YXJ0IG9mIGF2YWlsYWJsZSBtZW1vcnkgaXMgc3RvcmVkIGluIGF2YWlsbWVtLgorICogKFRoZSBib290bWVtIGFsbG9jYXRvciByZXF1aXJlcyBub3cgdGhlIHBoeXNpY2FsbCBhZGRyZXNzLikKKyAqLworCisJbW92ZWwJTChtZW1vcnlfc3RhcnQpLGF2YWlsbWVtCisKKyNpZmRlZiBDT05GSUdfQU1JR0EKKwlpc19ub3RfYW1pZ2EoMWYpCisJLyogZml4dXAgdGhlIEFtaWdhIGN1c3RvbSByZWdpc3RlciBsb2NhdGlvbiBiZWZvcmUgcHJpbnRpbmcgKi8KKwljbHJsCUwoY3VzdG9tKQorMToKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FUQVJJCisJaXNfbm90X2F0YXJpKDFmKQorCS8qIGZpeHVwIHRoZSBBdGFyaSBpb2Jhc2UgcmVnaXN0ZXIgbG9jYXRpb24gYmVmb3JlIHByaW50aW5nICovCisJbW92ZWwJIzB4ZmYwMDAwMDAsTChpb2Jhc2UpCisxOgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDCisJaXNfbm90X21hYygxZikKKwltb3ZlbAkjflZJREVPTUVNTUFTSywlZDAKKwlhbmRsCUwobWFjX3ZpZGVvYmFzZSksJWQwCisJYWRkbAkjVklERU9NRU1CQVNFLCVkMAorCW1vdmVsCSVkMCxMKG1hY192aWRlb2Jhc2UpCisjaWYgZGVmaW5lZChDT05TT0xFKQorCW1vdmVsCSVwY0AoTChwaHlzX2tlcm5lbF9zdGFydCkpLCVkMAorCXN1YmwJI1BBR0VfT0ZGU0VULCVkMAorCXN1YmwJJWQwLEwoY29uc29sZV9mb250KQorCXN1YmwJJWQwLEwoY29uc29sZV9mb250X2RhdGEpCisjZW5kaWYKKyNpZmRlZiBNQUNfU0VSSUFMX0RFQlVHCisJb3JsCSMweDUwMDAwMDAwLEwobWFjX3NjY2Jhc2UpCisjZW5kaWYKKzE6CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19IUDMwMAorCWlzX25vdF9ocDMwMCgxZikKKwkvKgorCSAqIEZpeCB1cCB0aGUgaW9iYXNlIHJlZ2lzdGVyIHRvIHBvaW50IHRvIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlIExFRHMuCisJICovCisJbW92ZWwJIzB4ZjAwMDAwMDAsTChpb2Jhc2UpCisKKwkvKgorCSAqIEVuZXJnaXNlIHRoZSBGUFUgYW5kIGNhY2hlcy4KKwkgKi8KKwlpc18wNDAoMWYpCisJbW92ZWwJIzB4NjAsMHhmMDVmNDAwYworCWpicmEJMmYKKworCS8qCisJICogMDQwOiBzbGlnaHRseSBkaWZmZXJlbnQsIGFwcGFyZW50bHkuCisJICovCisxOgltb3ZldwkjMCwweGYwNWY0MDBlCisJbW92ZXcJIzB4NjQsMHhmMDVmNDAwZQorMjoKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NVTjNYCisJaXNfbm90X3N1bjN4KDFmKQorCisJLyogZW5hYmxlIGNvcHJvICovCisJb3JpdwkjMHg0MDAwLDB4NjEwMDAwMDAKKzE6CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUE9MTE8KKwlpc19ub3RfYXBvbGxvKDFmKQorCisJLyoKKwkgKiBGaXggdXAgdGhlIGlvYmFzZSBiZWZvcmUgcHJpbnRpbmcKKwkgKi8KKwltb3ZlbAkjMHg4MDAwMDAwMCxMKGlvYmFzZSkKKzE6CisjZW5kaWYKKworCXB1dGMJJ0knCisJbGVkcwkweDEwCisKKy8qCisgKiBFbmFibGUgY2FjaGVzCisgKi8KKworCWlzX25vdF8wNDBfb3JfMDYwKEwoY2FjaGVfbm90XzY4MDQ2MCkpCisKK0woY2FjaGU2ODA0NjApOgorCS5jaGlwCTY4MDQwCisJbm9wCisJY3B1c2hhCSViYworCW5vcAorCisJaXNfMDYwKEwoY2FjaGU2ODA2MCkpCisKKwltb3ZlbAkjQ0M2X0VOQUJMRV9EK0NDNl9FTkFCTEVfSSwlZDAKKwkvKiBNTVUgc3R1ZmYgd29ya3MgaW4gY29weWJhY2sgbW9kZSBub3csIHNvIGVuYWJsZSB0aGUgY2FjaGUgKi8KKwltb3ZlYwklZDAsJWNhY3IKKwlqcmEJTChjYWNoZV9kb25lKQorCitMKGNhY2hlNjgwNjApOgorCW1vdmVsCSNDQzZfRU5BQkxFX0QrQ0M2X0VOQUJMRV9JK0NDNl9FTkFCTEVfU0IrQ0M2X1BVU0hfRFBJK0NDNl9FTkFCTEVfQitDQzZfQ0xSQV9CLCVkMAorCS8qIE1NVSBzdHVmZiB3b3JrcyBpbiBjb3B5YmFjayBtb2RlIG5vdywgc28gZW5hYmxlIHRoZSBjYWNoZSAqLworCW1vdmVjCSVkMCwlY2FjcgorCS8qIGVuYWJsZSBzdXBlcnNjYWxhciBkaXNwYXRjaCBpbiBQQ1IgKi8KKwltb3ZlcQkjMSwlZDAKKwkuY2hpcAk2ODA2MAorCW1vdmVjCSVkMCwlcGNyCisKKwlqYnJhCUwoY2FjaGVfZG9uZSkKK0woY2FjaGVfbm90XzY4MDQ2MCk6CitMKGNhY2hlNjgwMzApOgorCS5jaGlwCTY4MDMwCisJbW92ZWwJI0NDM19FTkFCTEVfREIrQ0MzX0NMUl9EK0NDM19FTkFCTEVfRCtDQzNfRU5BQkxFX0lCK0NDM19DTFJfSStDQzNfRU5BQkxFX0ksJWQwCisJbW92ZWMJJWQwLCVjYWNyCisKKwlqcmEJTChjYWNoZV9kb25lKQorCS5jaGlwCTY4aworTChjYWNoZV9kb25lKToKKworCXB1dGMJJ0onCisKKy8qCisgKiBTZXR1cCBpbml0aWFsIHN0YWNrIHBvaW50ZXIKKyAqLworCWxlYQlpbml0X3Rhc2ssJWN1cnB0cgorCWxlYQlpbml0X3RocmVhZF91bmlvbitUSFJFQURfU0laRSwlc3AKKworCXB1dGMJJ0snCisKKwlzdWJsCSVhNiwlYTYJCS8qIGNsZWFyIGE2IGZvciBnZGIgKi8KKworLyoKKyAqIFRoZSBuZXcgNjRiaXQgcHJpbnRmIHN1cHBvcnQgcmVxdWlyZXMgYW4gZWFybHkgZXhjZXB0aW9uIGluaXRpYWxpemF0aW9uLgorICovCisJamJzcgliYXNlX3RyYXBfaW5pdAorCisvKiBqdW1wIHRvIHRoZSBrZXJuZWwgc3RhcnQgKi8KKworCXB1dGMJJ1xuJworCWxlZHMJMHg1NQorCisJamJzcglzdGFydF9rZXJuZWwKKworLyoKKyAqIEZpbmQgYSB0YWcgcmVjb3JkIGluIHRoZSBib290aW5mbyBzdHJ1Y3R1cmUKKyAqIFRoZSBib290aW5mbyBzdHJ1Y3R1cmUgaXMgbG9jYXRlZCByaWdodCBhZnRlciB0aGUga2VybmVsIGJzcworICogUmV0dXJuczogZDA6IHNpemUgKC0xIGlmIG5vdCBmb3VuZCkKKyAqICAgICAgICAgIGEwOiBkYXRhIHBvaW50ZXIgKGVuZC1vZi1yZWNvcmRzIGlmIG5vdCBmb3VuZCkKKyAqLworZnVuY19zdGFydAlnZXRfYmlfcmVjb3JkLCVkMQorCisJbW92ZWwJQVJHMSwlZDAKKwlsZWEJJXBjQChfZW5kKSwlYTAKKzE6CXRzdHcJJWEwQChCSVJfVEFHKQorCWplcQkzZgorCWNtcHcJJWEwQChCSVJfVEFHKSwlZDAKKwlqZXEJMmYKKwlhZGR3CSVhMEAoQklSX1NJWkUpLCVhMAorCWpyYQkxYgorMjoJbW92ZXEJIzAsJWQwCisJbW92ZXcJJWEwQChCSVJfU0laRSksJWQwCisJbGVhCSVhMEAoQklSX0RBVEEpLCVhMAorCWpyYQk0ZgorMzoJbW92ZXEJIy0xLCVkMAorCWxlYQklYTBAKEJJUl9TSVpFKSwlYTAKKzQ6CitmdW5jX3JldHVybglnZXRfYmlfcmVjb3JkCisKKworLyoKKyAqCU1NVSBJbml0aWFsaXphdGlvbiBCZWdpbnMgSGVyZQorICoKKyAqCVRoZSBzdHJ1Y3R1cmUgb2YgdGhlIE1NVSB0YWJsZXMgb24gdGhlIDY4ayBtYWNoaW5lcworICoJaXMgdGh1czoKKyAqCVJvb3QgVGFibGUKKyAqCQlMb2dpY2FsIGFkZHJlc3NlcyBhcmUgdHJhbnNsYXRlZCB0aHJvdWdoCisgKglhIGhpZXJhcmNoaWNhbCB0cmFuc2xhdGlvbiBtZWNoYW5pc20gd2hlcmUgdGhlIGhpZ2gtb3JkZXIKKyAqCXNldmVuIGJpdHMgb2YgdGhlIGxvZ2ljYWwgYWRkcmVzcyAoTEEpIGFyZSB1c2VkIGFzIGFuCisgKglpbmRleCBpbnRvIHRoZSAicm9vdCB0YWJsZS4iICBFYWNoIGVudHJ5IGluIHRoZSByb290CisgKgl0YWJsZSBoYXMgYSBiaXQgd2hpY2ggc3BlY2lmaWVzIGlmIGl0J3MgYSB2YWxpZCBwb2ludGVyIHRvIGEKKyAqCXBvaW50ZXIgdGFibGUuICBFYWNoIGVudHJ5IGRlZmluZXMgYSAzMktNZWcgcmFuZ2Ugb2YgbWVtb3J5LgorICoJSWYgYW4gZW50cnkgaXMgaW52YWxpZCB0aGVuIHRoYXQgbG9naWNhbCByYW5nZSBvZiAzMk0gaXMKKyAqCWludmFsaWQgYW5kIHJlZmVyZW5jZXMgdG8gdGhhdCByYW5nZSBvZiBtZW1vcnkgKHdoZW4gdGhlIE1NVQorICoJaXMgZW5hYmxlZCkgd2lsbCBmYXVsdC4gIElmIHRoZSBlbnRyeSBpcyB2YWxpZCwgdGhlbiBpdCBkb2VzCisgKglvbmUgb2YgdHdvIHRoaW5ncy4gIE9uIDA0MC8wNjAgY2xhc3MgbWFjaGluZXMsIGl0IHBvaW50cyB0bworICoJYSBwb2ludGVyIHRhYmxlIHdoaWNoIHRoZW4gZGVzY3JpYmVzIG1vcmUgZmluZWx5IHRoZSBtZW1vcnkKKyAqCXdpdGhpbiB0aGF0IDMyTSByYW5nZS4gIE9uIDAyMC8wMzAgY2xhc3MgbWFjaGluZXMsIGEgdGVjaG5pcXVlCisgKgljYWxsZWQgImVhcmx5IHRlcm1pbmF0aW5nIGRlc2NyaXB0b3JzIiBhcmUgdXNlZC4gIFRoaXMgdGVjaG5pcXVlCisgKglhbGxvd3MgYW4gZW50aXJlIDMyTWVnIHRvIGJlIGRlc2NyaWJlZCBieSBhIHNpbmdsZSBlbnRyeSBpbiB0aGUKKyAqCXJvb3QgdGFibGUuICBUaHVzLCB0aGlzIGVudHJ5IGluIHRoZSByb290IHRhYmxlLCBjb250YWlucyB0aGUKKyAqCXBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSBvciBJL08gYXQgdGhlIGxvZ2ljYWwgYWRkcmVzcworICoJd2hpY2ggdGhlIGVudHJ5IHJlcHJlc2VudHMgYW5kIGl0IGFsc28gY29udGFpbnMgdGhlIG5lY2Vzc2FyeQorICoJY2FjaGUgYml0cyBmb3IgdGhpcyByZWdpb24uCisgKgorICoJUG9pbnRlciBUYWJsZXMKKyAqCQlQZXIgdGhlIFJvb3QgVGFibGUsIHRoZXJlIHdpbGwgYmUgb25lIG9yIG1vcmUKKyAqCXBvaW50ZXIgdGFibGVzLiAgRWFjaCBwb2ludGVyIHRhYmxlIGRlZmluZXMgYSAzMk0gcmFuZ2UuCisgKglOb3QgYWxsIG9mIHRoZSAzMk0gcmFuZ2UgbmVlZCBiZSBkZWZpbmVkLiAgQWdhaW4sIHRoZSBuZXh0CisgKglzZXZlbiBiaXRzIG9mIHRoZSBsb2dpY2FsIGFkZHJlc3MgYXJlIHVzZWQgYW4gaW5kZXggaW50bworICoJdGhlIHBvaW50ZXIgdGFibGUgdG8gcG9pbnQgdG8gcGFnZSB0YWJsZXMgKGlmIHRoZSBwb2ludGVyCisgKglpcyB2YWxpZCkuICBUaGVyZSB3aWxsIHVuZG91YnRlZGx5IGJlIG1vcmUgdGhhbiBvbmUKKyAqCXBvaW50ZXIgdGFibGUgZm9yIHRoZSBrZXJuZWwgYmVjYXVzZSBlYWNoIHBvaW50ZXIgdGFibGUKKyAqCWRlZmluZXMgYSByYW5nZSBvZiBvbmx5IDMyTS4gIFZhbGlkIHBvaW50ZXIgdGFibGUgZW50cmllcworICoJcG9pbnQgdG8gcGFnZSB0YWJsZXMsIG9yIGFyZSBlYXJseSB0ZXJtaW5hdGluZyBlbnRyaWVzCisgKgl0aGVtc2VsdmVzLgorICoKKyAqCVBhZ2UgVGFibGVzCisgKgkJUGVyIHRoZSBQb2ludGVyIFRhYmxlcywgZWFjaCBwYWdlIHRhYmxlIGVudHJ5IHBvaW50cworICoJdG8gdGhlIHBoeXNpY2FsIHBhZ2UgaW4gbWVtb3J5IHRoYXQgc3VwcG9ydHMgdGhlIGxvZ2ljYWwKKyAqCWFkZHJlc3MgdGhhdCB0cmFuc2xhdGVzIHRvIHRoZSBwYXJ0aWN1bGFyIGluZGV4LgorICoKKyAqCUluIHNob3J0LCB0aGUgTG9naWNhbCBBZGRyZXNzIGdldHMgdHJhbnNsYXRlZCBhcyBmb2xsb3dzOgorICoJCWJpdHMgMzEuLjI2IC0gaW5kZXggaW50byB0aGUgUm9vdCBUYWJsZQorICoJCWJpdHMgMjUuLjE4IC0gaW5kZXggaW50byB0aGUgUG9pbnRlciBUYWJsZQorICoJCWJpdHMgMTcuLjEyIC0gaW5kZXggaW50byB0aGUgUGFnZSBUYWJsZQorICoJCWJpdHMgMTEuLjAgIC0gb2Zmc2V0IGludG8gYSBwYXJ0aWN1bGFyIDRLIHBhZ2UKKyAqCisgKglUaGUgYWxnb3JpdGhtcyB3aGljaCBmb2xsb3dzIGRvIG9uZSB0aGluZzogdGhleSBhYnN0cmFjdAorICoJdGhlIE1NVSBoYXJkd2FyZS4gIEZvciBleGFtcGxlLCB0aGVyZSBhcmUgdGhyZWUga2luZHMgb2YKKyAqCWNhY2hlIHNldHRpbmdzIHRoYXQgYXJlIHJlbGV2YW50LiAgRWl0aGVyLCBtZW1vcnkgaXMKKyAqCWJlaW5nIG1hcHBlZCBpbiB3aGljaCBjYXNlIGl0IGlzIGVpdGhlciBLZXJuZWwgQ29kZSAob3IKKyAqCXRoZSBSYW1EaXNrKSBvciBpdCBpcyBNTVUgZGF0YS4gIE9uIHRoZSAwMzAsIHRoZSBNTVUgZGF0YQorICoJb3B0aW9uIGFsc28gZGVzY3JpYmVzIHRoZSBrZXJuZWwuICBPciwgSS9PIGlzIGJlaW5nIG1hcHBlZAorICoJaW4gd2hpY2ggY2FzZSBpdCBoYXMgaXRzIG93biBraW5kIG9mIGNhY2hlIGJpdHMuICBUaGVyZQorICoJYXJlIGNvbnN0YW50cyB3aGljaCBhYnN0cmFjdCB0aGVzZSBub3Rpb25zIGZyb20gdGhlIGNvZGUgdGhhdAorICoJYWN0dWFsbHkgbWFrZXMgdGhlIGNhbGwgdG8gbWFwIHNvbWUgcmFuZ2Ugb2YgbWVtb3J5LgorICoKKyAqCisgKgorICovCisKKyNpZmRlZiBNTVVfUFJJTlQKKy8qCisgKgltbXVfcHJpbnQKKyAqCisgKglUaGlzIGFsZ29yaXRobSB3aWxsIHByaW50IG91dCB0aGUgY3VycmVudCBNTVUgbWFwcGluZ3MuCisgKgorICoJSW5wdXQ6CisgKgkJJWE1IHBvaW50cyB0byB0aGUgcm9vdCB0YWJsZS4gIEV2ZXJ5dGhpbmcgZWxzZSBpcyBjYWxjdWxhdGVkCisgKgkJCWZyb20gdGhpcy4KKyAqLworCisjZGVmaW5lIG1tdV9uZXh0X3ZhbGlkCQkwCisjZGVmaW5lIG1tdV9zdGFydF9sb2dpY2FsCTQKKyNkZWZpbmUgbW11X25leHRfbG9naWNhbAk4CisjZGVmaW5lIG1tdV9zdGFydF9waHlzaWNhbAkxMgorI2RlZmluZSBtbXVfbmV4dF9waHlzaWNhbAkxNgorCisjZGVmaW5lIE1NVV9QUklOVF9JTlZBTElECQktMQorI2RlZmluZSBNTVVfUFJJTlRfVkFMSUQJCQkxCisjZGVmaW5lIE1NVV9QUklOVF9VTklOSVRFRAkJMAorCisjZGVmaW5lIHB1dFpjKHosbikJCWpibmUgMWY7IHB1dGMgejsgamJyYSAyZjsgMTogcHV0YyBuOyAyOgorCitmdW5jX3N0YXJ0CW1tdV9wcmludCwlYTAtJWE2LyVkMC0lZDcKKworCW1vdmVsCSVwY0AoTChrZXJuZWxfcGdkaXJfcHRyKSksJWE1CisJbGVhCSVwY0AoTChtbXVfcHJpbnRfZGF0YSkpLCVhMAorCW1vdmVsCSNNTVVfUFJJTlRfVU5JTklURUQsJWEwQChtbXVfbmV4dF92YWxpZCkKKworCWlzX25vdF8wNDBfb3JfMDYwKG1tdV8wMzBfcHJpbnQpCisKK21tdV8wNDBfcHJpbnQ6CisJcHV0cwkiXG5NTVUwNDBcbiIKKwlwdXRzCSJycDoiCisJcHV0bgklYTUKKwlwdXRjCSdcbicKKyNpZiAwCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nICNpZi8jZW5kaWYgYmxvY2sgaXMgYSB0aWdodCBhbGdvcml0aG0gZm9yIGR1bXBpbmcgdGhlIDA0MAorCSAqIE1NVSBNYXAgaW4gZ29yeSBkZXRhaWwuICBJdCByZWFsbHkgaXNuJ3QgdGhhdCBwcmFjdGljYWwgdW5sZXNzIHRoZQorCSAqIE1NVSBNYXAgYWxnb3JpdGhtIGFwcGVhcnMgdG8gZ28gYXdyeSBhbmQgeW91IG5lZWQgdG8gZGVidWcgaXQgYXQgdGhlCisJICogZW50cnkgcGVyIGVudHJ5IGxldmVsLgorCSAqLworCW1vdmVsCSNST09UX1RBQkxFX1NJWkUsJWQ1CisjaWYgMAorCW1vdmVsCSVhNUArLCVkNwkJfCBCdXJuIGFuIGVudHJ5IHRvIHNraXAgdGhlIGtlcm5lbCBtYXBwaW5ncywKKwlzdWJxbAkjMSwlZDUJCQl8IHRoZXkgKG1pZ2h0KSB3b3JrCisjZW5kaWYKKzE6CXRzdGwJJWQ1CisJamJlcQltbXVfcHJpbnRfZG9uZQorCXN1YnEJIzEsJWQ1CisJbW92ZWwJJWE1QCssJWQ3CisJYnRzdAkjMSwlZDcKKwlqYmVxCTFiCisKKzI6CXB1dG4JJWQ3CisJYW5kaWwJIzB4RkZGRkZFMDAsJWQ3CisJbW92ZWwJJWQ3LCVhNAorCW1vdmVsCSNQVFJfVEFCTEVfU0laRSwlZDQKKwlwdXRjCScgJworMzoJdHN0bAklZDQKKwlqYmVxCTExZgorCXN1YnEJIzEsJWQ0CisJbW92ZWwJJWE0QCssJWQ3CisJYnRzdAkjMSwlZDcKKwlqYmVxCTNiCisKKzQ6CXB1dG4JJWQ3CisJYW5kaWwJIzB4RkZGRkZGMDAsJWQ3CisJbW92ZWwJJWQ3LCVhMworCW1vdmVsCSNQQUdFX1RBQkxFX1NJWkUsJWQzCis1Ogltb3ZlbAkjOCwlZDIKKzY6CXRzdGwJJWQzCisJamJlcQkzMWYKKwlzdWJxCSMxLCVkMworCW1vdmVsCSVhM0ArLCVkNgorCWJ0c3QJIzAsJWQ2CisJamJlcQk2YgorNzoJdHN0bAklZDIKKwlqYmVxCThmCisJc3VicQkjMSwlZDIKKwlwdXRjCScgJworCWpicmEJOTFmCis4OglwdXRjCSdcbicKKwltb3ZlbAkjOCsxKzgrMSsxLCVkMgorOToJcHV0YwknICcKKwlkYnJhCSVkMiw5YgorCW1vdmVsCSM3LCVkMgorOTE6CXB1dG4JJWQ2CisJamJyYQk2YgorCiszMToJcHV0YwknXG4nCisJbW92ZWwJIzgrMSwlZDIKKzMyOglwdXRjCScgJworCWRicmEJJWQyLDMyYgorCWpicmEJM2IKKworMTE6CXB1dGMJJ1xuJworCWpicmEJMWIKKyNlbmRpZiAvKiBNTVUgMDQwIER1bXBpbmcgY29kZSB0aGF0J3MgZ29yeSBhbmQgZGV0YWlsZWQgKi8KKworCWxlYQklcGNAKGtlcm5lbF9wZ19kaXIpLCVhNQorCW1vdmVsCSVhNSwlYTAJCQkvKiBhMCBoYXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHJvb3QgdGFibGUgcHRyICovCisJbW92ZWwJIzB4MDAwMDAwMDAsJWE0CQkvKiBsb2dpY2FsIGFkZHJlc3MgKi8KKwltb3ZlcWwJIzAsJWQwCis0MDoKKwkvKiBJbmNyZW1lbnQgdGhlIGxvZ2ljYWwgYWRkcmVzcyBhbmQgcHJlc2VydmUgaW4gZDUgKi8KKwltb3ZlbAklYTQsJWQ1CisJYWRkaWwJI1BBR0VTSVpFPDwxMywlZDUKKwltb3ZlbAklYTBAKywlZDYKKwlidHN0CSMxLCVkNgorCWpibmUJNDFmCisJamJzcgltbXVfcHJpbnRfdHVwbGVfaW52YWxpZGF0ZQorCWpicmEJNDhmCis0MToKKwltb3ZlbAkjMCwlZDEKKwlhbmRpbAkjMHhmZmZmZmUwMCwlZDYKKwltb3ZlbAklZDYsJWExCis0MjoKKwltb3ZlbAklYTQsJWQ1CisJYWRkaWwJI1BBR0VTSVpFPDw2LCVkNQorCW1vdmVsCSVhMUArLCVkNgorCWJ0c3QJIzEsJWQ2CisJamJuZQk0M2YKKwlqYnNyCW1tdV9wcmludF90dXBsZV9pbnZhbGlkYXRlCisJamJyYQk0N2YKKzQzOgorCW1vdmVsCSMwLCVkMgorCWFuZGlsCSMweGZmZmZmZjAwLCVkNgorCW1vdmVsCSVkNiwlYTIKKzQ0OgorCW1vdmVsCSVhNCwlZDUKKwlhZGRpbAkjUEFHRVNJWkUsJWQ1CisJbW92ZWwJJWEyQCssJWQ2CisJYnRzdAkjMCwlZDYKKwlqYm5lCTQ1ZgorCWpic3IJbW11X3ByaW50X3R1cGxlX2ludmFsaWRhdGUKKwlqYnJhCTQ2ZgorNDU6CisJbW92ZW1sCSVkMC0lZDEsJXNwQC0KKwltb3ZlbAklYTQsJWQwCisJbW92ZWwJJWQ2LCVkMQorCWFuZGlsCSMweGZmZmZmNGUwLCVkMQorCWxlYQklcGNAKG1tdV8wNDBfcHJpbnRfZmxhZ3MpLCVhNgorCWpic3IJbW11X3ByaW50X3R1cGxlCisJbW92ZW1sCSVzcEArLCVkMC0lZDEKKzQ2OgorCW1vdmVsCSVkNSwlYTQKKwlhZGRxCSMxLCVkMgorCWNtcGliCSM2NCwlZDIKKwlqYm5lCTQ0YgorNDc6CisJbW92ZWwJJWQ1LCVhNAorCWFkZHEJIzEsJWQxCisJY21waWIJIzEyOCwlZDEKKwlqYm5lCTQyYgorNDg6CisJbW92ZWwJJWQ1LCVhNAkJCS8qIG1vdmUgdG8gdGhlIG5leHQgbG9naWNhbCBhZGRyZXNzICovCisJYWRkcQkjMSwlZDAKKwljbXBpYgkjMTI4LCVkMAorCWpibmUJNDBiCisKKwkuY2hpcAk2ODA0MAorCW1vdmVjCSVkdHQxLCVkMAorCW1vdmVsCSVkMCwlZDEKKwlhbmRpdwkjMHg4MDAwLCVkMQkJLyogaXMgaXQgdmFsaWQgPyAqLworCWpiZXEJMWYJCQkvKiBObywgYmFpbCBvdXQgKi8KKworCW1vdmVsCSVkMCwlZDEKKwlhbmRpbAkjMHhmZjAwMDAwMCwlZDEJCS8qIEdldCB0aGUgYWRkcmVzcyAqLworCXB1dG4JJWQxCisJcHV0cwkiPT0iCisJcHV0bgklZDEKKworCW1vdmVsCSVkMCwlZDYKKwlqYnNyCW1tdV8wNDBfcHJpbnRfZmxhZ3NfdHQKKzE6CisJbW92ZWMJJWR0dDAsJWQwCisJbW92ZWwJJWQwLCVkMQorCWFuZGl3CSMweDgwMDAsJWQxCQkvKiBpcyBpdCB2YWxpZCA/ICovCisJamJlcQkxZgkJCS8qIE5vLCBiYWlsIG91dCAqLworCisJbW92ZWwJJWQwLCVkMQorCWFuZGlsCSMweGZmMDAwMDAwLCVkMQkJLyogR2V0IHRoZSBhZGRyZXNzICovCisJcHV0bgklZDEKKwlwdXRzCSI9PSIKKwlwdXRuCSVkMQorCisJbW92ZWwJJWQwLCVkNgorCWpic3IJbW11XzA0MF9wcmludF9mbGFnc190dAorMToKKwkuY2hpcAk2OGsKKworCWpicmEJbW11X3ByaW50X2RvbmUKKworbW11XzA0MF9wcmludF9mbGFnczoKKwlidHN0bAkjMTAsJWQ2CisJcHV0WmMoJyAnLCdHJykJLyogZ2xvYmFsIGJpdCAqLworCWJ0c3RsCSM3LCVkNgorCXB1dFpjKCcgJywnUycpCS8qIHN1cGVydmlzb3IgYml0ICovCittbXVfMDQwX3ByaW50X2ZsYWdzX3R0OgorCWJ0c3RsCSM2LCVkNgorCWpibmUJM2YKKwlwdXRjCSdDJworCWJ0c3RsCSM1LCVkNgorCXB1dFpjKCd3JywnYycpCS8qIHdyaXRlIHRocm91Z2ggb3IgY29weS1iYWNrICovCisJamJyYQk0ZgorMzoKKwlwdXRjCSdOJworCWJ0c3RsCSM1LCVkNgorCXB1dFpjKCdzJywnICcpCS8qIHNlcmlhbGl6ZWQgbm9uLWNhY2hlYWJsZSwgb3Igbm9uLWNhY2hlYWJsZSAqLworNDoKKwlydHMKKworbW11XzAzMF9wcmludF9mbGFnczoKKwlidHN0bAkjNiwlZDYKKwlwdXRaYygnQycsJ0knKQkvKiB3cml0ZSB0aHJvdWdoIG9yIGNvcHktYmFjayAqLworCXJ0cworCittbXVfMDMwX3ByaW50OgorCXB1dHMJIlxuTU1VMDMwXG4iCisJcHV0cwkiXG5ycDoiCisJcHV0bgklYTUKKwlwdXRjCSdcbicKKwltb3ZlbAklYTUsJWQwCisJYW5kaWwJIzB4ZmZmZmZmZjAsJWQwCisJbW92ZWwJJWQwLCVhMAorCW1vdmVsCSMweDAwMDAwMDAwLCVhNAkJLyogbG9naWNhbCBhZGRyZXNzICovCisJbW92ZWwJIzAsJWQwCiszMDoKKwltb3ZlbAklYTQsJWQ1CisJYWRkaWwJI1BBR0VTSVpFPDwxMywlZDUKKwltb3ZlbAklYTBAKywlZDYKKwlidHN0CSMxLCVkNgkJCS8qIGlzIGl0IGEgdGFibGUgcHRyPyAqLworCWpibmUJMzFmCQkJLyogeWVzICovCisJYnRzdAkjMCwlZDYJCQkvKiBpcyBpdCBlYXJseSB0ZXJtaW5hdGluZz8gKi8KKwlqYmVxCTFmCQkJLyogbm8gKi8KKwlqYnNyCW1tdV8wMzBfcHJpbnRfaGVscGVyCisJamJyYQkzOGYKKzE6CisJamJzcgltbXVfcHJpbnRfdHVwbGVfaW52YWxpZGF0ZQorCWpicmEJMzhmCiszMToKKwltb3ZlbAkjMCwlZDEKKwlhbmRpbAkjMHhmZmZmZmZmMCwlZDYKKwltb3ZlbAklZDYsJWExCiszMjoKKwltb3ZlbAklYTQsJWQ1CisJYWRkaWwJI1BBR0VTSVpFPDw2LCVkNQorCW1vdmVsCSVhMUArLCVkNgorCWJ0c3QJIzEsJWQ2CQkJLyogaXMgaXQgYSB0YWJsZSBwdHI/ICovCisJamJuZQkzM2YJCQkvKiB5ZXMgKi8KKwlidHN0CSMwLCVkNgkJCS8qIGlzIGl0IGEgcGFnZSBkZXNjcmlwdG9yPyAqLworCWpiZXEJMWYJCQkvKiBubyAqLworCWpic3IJbW11XzAzMF9wcmludF9oZWxwZXIKKwlqYnJhCTM3ZgorMToKKwlqYnNyCW1tdV9wcmludF90dXBsZV9pbnZhbGlkYXRlCisJamJyYQkzN2YKKzMzOgorCW1vdmVsCSMwLCVkMgorCWFuZGlsCSMweGZmZmZmZmYwLCVkNgorCW1vdmVsCSVkNiwlYTIKKzM0OgorCW1vdmVsCSVhNCwlZDUKKwlhZGRpbAkjUEFHRVNJWkUsJWQ1CisJbW92ZWwJJWEyQCssJWQ2CisJYnRzdAkjMCwlZDYKKwlqYm5lCTM1ZgorCWpic3IJbW11X3ByaW50X3R1cGxlX2ludmFsaWRhdGUKKwlqYnJhCTM2ZgorMzU6CisJamJzcgltbXVfMDMwX3ByaW50X2hlbHBlcgorMzY6CisJbW92ZWwJJWQ1LCVhNAorCWFkZHEJIzEsJWQyCisJY21waWIJIzY0LCVkMgorCWpibmUJMzRiCiszNzoKKwltb3ZlbAklZDUsJWE0CisJYWRkcQkjMSwlZDEKKwljbXBpYgkjMTI4LCVkMQorCWpibmUJMzJiCiszODoKKwltb3ZlbAklZDUsJWE0CQkJLyogbW92ZSB0byB0aGUgbmV4dCBsb2dpY2FsIGFkZHJlc3MgKi8KKwlhZGRxCSMxLCVkMAorCWNtcGliCSMxMjgsJWQwCisJamJuZQkzMGIKKworbW11X3ByaW50X2RvbmU6CisJcHV0cwkiXG5cbiIKKworZnVuY19yZXR1cm4JbW11X3ByaW50CisKKworbW11XzAzMF9wcmludF9oZWxwZXI6CisJbW92ZW1sCSVkMC0lZDEsJXNwQC0KKwltb3ZlbAklYTQsJWQwCisJbW92ZWwJJWQ2LCVkMQorCWxlYQklcGNAKG1tdV8wMzBfcHJpbnRfZmxhZ3MpLCVhNgorCWpic3IJbW11X3ByaW50X3R1cGxlCisJbW92ZW1sCSVzcEArLCVkMC0lZDEKKwlydHMKKworbW11X3ByaW50X3R1cGxlX2ludmFsaWRhdGU6CisJbW92ZW1sCSVhMC8lZDcsJXNwQC0KKworCWxlYQklcGNAKEwobW11X3ByaW50X2RhdGEpKSwlYTAKKwl0c3RsCSVhMEAobW11X25leHRfdmFsaWQpCisJamJtaQltbXVfcHJpbnRfdHVwbGVfaW52YWxpZGF0ZV9leGl0CisKKwltb3ZlbAkjTU1VX1BSSU5UX0lOVkFMSUQsJWEwQChtbXVfbmV4dF92YWxpZCkKKworCXB1dG4JJWE0CisKKwlwdXRzCSIjI1xuIgorCittbXVfcHJpbnRfdHVwbGVfaW52YWxpZGF0ZV9leGl0OgorCW1vdmVtbAklc3BAKywlYTAvJWQ3CisJcnRzCisKKworbW11X3ByaW50X3R1cGxlOgorCW1vdmVtbAklZDAtJWQ3LyVhMCwlc3BALQorCisJbGVhCSVwY0AoTChtbXVfcHJpbnRfZGF0YSkpLCVhMAorCisJdHN0bAklYTBAKG1tdV9uZXh0X3ZhbGlkKQorCWpibGUJbW11X3ByaW50X3R1cGxlX3ByaW50CisKKwljbXBsCSVhMEAobW11X25leHRfcGh5c2ljYWwpLCVkMQorCWpiZXEJbW11X3ByaW50X3R1cGxlX2luY3JlbWVudAorCittbXVfcHJpbnRfdHVwbGVfcHJpbnQ6CisJcHV0bgklZDAKKwlwdXRzCSItPiIKKwlwdXRuCSVkMQorCisJbW92ZWwJJWQxLCVkNgorCWpic3IJJWE2QAorCittbXVfcHJpbnRfdHVwbGVfcmVjb3JkOgorCW1vdmVsCSNNTVVfUFJJTlRfVkFMSUQsJWEwQChtbXVfbmV4dF92YWxpZCkKKworCW1vdmVsCSVkMSwlYTBAKG1tdV9uZXh0X3BoeXNpY2FsKQorCittbXVfcHJpbnRfdHVwbGVfaW5jcmVtZW50OgorCW1vdmVsCSVkNSwlZDcKKwlzdWJsCSVhNCwlZDcKKwlhZGRsCSVkNywlYTBAKG1tdV9uZXh0X3BoeXNpY2FsKQorCittbXVfcHJpbnRfdHVwbGVfZXhpdDoKKwltb3ZlbWwJJXNwQCssJWQwLSVkNy8lYTAKKwlydHMKKworbW11X3ByaW50X21hY2hpbmVfY3B1X3R5cGVzOgorCXB1dHMJIm1hY2hpbmU6ICIKKworCWlzX25vdF9hbWlnYSgxZikKKwlwdXRzCSJhbWlnYSIKKwlqYnJhCTlmCisxOgorCWlzX25vdF9hdGFyaSgyZikKKwlwdXRzCSJhdGFyaSIKKwlqYnJhCTlmCisyOgorCWlzX25vdF9tYWMoM2YpCisJcHV0cwkibWFjaW50b3NoIgorCWpicmEJOWYKKzM6CXB1dHMJInVua25vd24iCis5OglwdXRjCSdcbicKKworCXB1dHMJImNwdXR5cGU6IDAiCisJaXNfbm90XzA2MCgxZikKKwlwdXRjCSc2JworCWpicmEJOWYKKzE6CisJaXNfbm90XzA0MF9vcl8wNjAoMmYpCisJcHV0YwknNCcKKwlqYnJhCTlmCisyOglwdXRjCSczJworOToJcHV0YwknMCcKKwlwdXRjCSdcbicKKworCXJ0cworI2VuZGlmIC8qIE1NVV9QUklOVCAqLworCisvKgorICogbW11X21hcF90dAorICoKKyAqIFRoaXMgaXMgYSBzcGVjaWZpYyBmdW5jdGlvbiB3aGljaCB3b3JrcyBvbiBhbGwgNjgweDAgbWFjaGluZXMuCisgKiBPbiAwMzAsIDA0MCAmIDA2MCBpdCB3aWxsIGF0dGVtcHQgdG8gdXNlIFRyYW5zcGFyZW50IFRyYW5zbGF0aW9uCisgKiByZWdpc3RlcnMgKHR0MSkuCisgKiBPbiAwMjAgaXQgd2lsbCBjYWxsIHRoZSBzdGFuZGFyZCBtbXVfbWFwIHdoaWNoIHdpbGwgdXNlIGVhcmx5CisgKiB0ZXJtaW5hdGluZyBkZXNjcmlwdG9ycy4KKyAqLworZnVuY19zdGFydAltbXVfbWFwX3R0LCVkMC8lZDEvJWEwLDQKKworCWRwdXRzCSJtbXVfbWFwX3R0OiIKKwlkcHV0bglBUkcxCisJZHB1dG4JQVJHMgorCWRwdXRuCUFSRzMKKwlkcHV0bglBUkc0CisJZHB1dGMJJ1xuJworCisJaXNfMDIwKEwoZG9fbWFwKSkKKworCS8qIEV4dHJhY3QgdGhlIGhpZ2hlc3QgYml0IHNldAorCSAqLworCWJmZmZvCUFSRzN7IzAsIzMyfSwlZDEKKwljbXB3CSM4LCVkMQorCWpjYwlMKGRvX21hcCkKKworCS8qIEFuZCBnZXQgdGhlIG1hc2sKKwkgKi8KKwltb3ZlcQkjLTEsJWQwCisJbHNybAklZDEsJWQwCisJbHNybAkjMSwlZDAKKworCS8qIE1hc2sgdGhlIGFkZHJlc3MKKwkgKi8KKwltb3ZlbAklZDAsJWQxCisJbm90bAklZDEKKwlhbmRsCUFSRzIsJWQxCisKKwkvKiBHZW5lcmF0ZSB0aGUgdXBwZXIgMTZiaXQgb2YgdGhlIHR0IHJlZ2lzdGVyCisJICovCisJbHNybAkjOCwlZDAKKwlvcmwJJWQwLCVkMQorCWNscncJJWQxCisKKwlpc18wNDBfb3JfMDYwKEwobW11X21hcF90dF8wNDApKQorCisJLyogc2V0IDAzMCBzcGVjaWZpYyBiaXRzIChyZWFkL3dyaXRlIGFjY2VzcyBmb3Igc3VwZXJ2aXNvciBtb2RlCisJICogKGhpZ2hlc3QgZnVuY3Rpb24gY29kZSBzZXQsIGxvd2VyIHR3byBiaXRzIG1hc2tlZCkpCisJICovCisJb3J3CSNUVFJfRU5BQkxFK1RUUl9SV00rVFRSX0ZDQjIrVFRSX0ZDTTErVFRSX0ZDTTAsJWQxCisJbW92ZWwJQVJHNCwlZDAKKwlidHN0CSM2LCVkMAorCWplcQkxZgorCW9ydwkjVFRSX0NJLCVkMQorCisxOglsZWEJU1RBQ0ssJWEwCisJZHB1dG4JJWQxCisJbW92ZWwJJWQxLCVhMEAKKwkuY2hpcAk2ODAzMAorCXRzdGwJQVJHMQorCWpuZQkxZgorCXBtb3ZlCSVhMEAsJXR0MAorCWpyYQkyZgorMToJcG1vdmUJJWEwQCwldHQxCisyOgkuY2hpcAk2OGsKKwlqcmEJTChtbXVfbWFwX3R0X2RvbmUpCisKKwkvKiBzZXQgMDQwIHNwZWNpZmljIGJpdHMKKwkgKi8KK0wobW11X21hcF90dF8wNDApOgorCW9ydwkjVFRSX0VOQUJMRStUVFJfS0VSTkVMTU9ERSwlZDEKKwlvcmwJQVJHNCwlZDEKKwlkcHV0bgklZDEKKworCS5jaGlwCTY4MDQwCisJdHN0bAlBUkcxCisJam5lCTFmCisJbW92ZWMJJWQxLCVpdHQwCisJbW92ZWMJJWQxLCVkdHQwCisJanJhCTJmCisxOgltb3ZlYwklZDEsJWl0dDEKKwltb3ZlYwklZDEsJWR0dDEKKzI6CS5jaGlwCTY4aworCisJanJhCUwobW11X21hcF90dF9kb25lKQorCitMKGRvX21hcCk6CisJbW11X21hcF9lcQlBUkcyLEFSRzMsQVJHNAorCitMKG1tdV9tYXBfdHRfZG9uZSk6CisKK2Z1bmNfcmV0dXJuCW1tdV9tYXBfdHQKKworLyoKKyAqCW1tdV9tYXAKKyAqCisgKglUaGlzIHJvdXRpbmUgd2lsbCBtYXAgYSByYW5nZSBvZiBtZW1vcnkgdXNpbmcgYSBwb2ludGVyCisgKgl0YWJsZSBhbmQgYWxsb2NhdGluZyB0aGUgcGFnZXMgb24gdGhlIGZseSBmcm9tIHRoZSBrZXJuZWwuCisgKglUaGUgcG9pbnRlciB0YWJsZSBkb2VzIG5vdCBoYXZlIHRvIGJlIGFscmVhZHkgbGlua2VkIGludG8KKyAqCXRoZSByb290IHRhYmxlLCB0aGlzIHJvdXRpbmUgd2lsbCBkbyB0aGF0IGlmIG5lY2Vzc2FyeS4KKyAqCisgKglOT1RFCisgKglUaGlzIHJvdXRpbmUgd2lsbCBhc3NlcnQgZmFpbHVyZSBhbmQgdXNlIHRoZSBzZXJpYWxfcHV0YworICoJcm91dGluZXMgaW4gdGhlIGNhc2Ugb2YgYSBydW4tdGltZSBlcnJvci4gIEZvciBleGFtcGxlLAorICoJaWYgdGhlIGFkZHJlc3MgaXMgYWxyZWFkeSBtYXBwZWQuCisgKgorICoJTk9URS0yCisgKglUaGlzIHJvdXRpbmUgd2lsbCB1c2UgZWFybHkgdGVybWluYXRpbmcgZGVzY3JpcHRvcnMKKyAqCXdoZXJlIHBvc3NpYmxlIGZvciB0aGUgNjgwMjArNjg4NTEgYW5kIDY4MDMwIHR5cGUKKyAqCXByb2Nlc3NvcnMuCisgKi8KK2Z1bmNfc3RhcnQJbW11X21hcCwlZDAtJWQ0LyVhMC0lYTQKKworCWRwdXRzCSJcbm1tdV9tYXA6IgorCWRwdXRuCUFSRzEKKwlkcHV0bglBUkcyCisJZHB1dG4JQVJHMworCWRwdXRuCUFSRzQKKwlkcHV0YwknXG4nCisKKwkvKiBHZXQgbG9naWNhbCBhZGRyZXNzIGFuZCByb3VuZCBpdCBkb3duIHRvIDI1NktCCisJICovCisJbW92ZWwJQVJHMSwlZDAKKwlhbmRsCSMtKFBBR0VTSVpFKlBBR0VfVEFCTEVfU0laRSksJWQwCisJbW92ZWwJJWQwLCVhMworCisJLyogR2V0IHRoZSBlbmQgYWRkcmVzcworCSAqLworCW1vdmVsCUFSRzEsJWE0CisJYWRkbAlBUkczLCVhNAorCXN1YnFsCSMxLCVhNAorCisJLyogR2V0IHBoeXNpY2FsIGFkZHJlc3MgYW5kIHJvdW5kIGl0IGRvd24gdG8gMjU2S0IKKwkgKi8KKwltb3ZlbAlBUkcyLCVkMAorCWFuZGwJIy0oUEFHRVNJWkUqUEFHRV9UQUJMRV9TSVpFKSwlZDAKKwltb3ZlbAklZDAsJWEyCisKKwkvKiBBZGQgcGFnZSBhdHRyaWJ1dGVzIHRvIHRoZSBwaHlzaWNhbCBhZGRyZXNzCisJICovCisJbW92ZWwJQVJHNCwlZDAKKwlvcncJI19QQUdFX1BSRVNFTlQrX1BBR0VfQUNDRVNTRUQrX1BBR0VfRElSVFksJWQwCisJYWRkdwklZDAsJWEyCisKKwlkcHV0bgklYTIKKwlkcHV0bgklYTMKKwlkcHV0bgklYTQKKworCWlzX25vdF8wNDBfb3JfMDYwKEwobW11X21hcF8wMzApKQorCisJYWRkdwkjX1BBR0VfR0xPQkFMMDQwLCVhMgorLyoKKyAqCU1NVSAwNDAgJiAwNjAgU3VwcG9ydAorICoKKyAqCVRoZSBNTVUgdXNhZ2UgZm9yIHRoZSAwNDAgYW5kIDA2MCBpcyBkaWZmZXJlbnQgZW5vdWdoIGZyb20KKyAqCXRoZSAwMzAgYW5kIDY4ODUxIHRoYXQgdGhlcmUgaXMgc2VwYXJhdGUgY29kZS4gIFRoaXMgY29tbWVudAorICoJYmxvY2sgZGVzY3JpYmVzIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsZ29yaXRobXMgYnVpbHQgYnkKKyAqCXRoaXMgY29kZS4KKyAqCisgKglUaGUgMDQwIGRvZXMgbm90IHN1cHBvcnQgZWFybHkgdGVybWluYXRpbmcgZGVzY3JpcHRvcnMsIGFzCisgKgl0aGUgMDMwIGRvZXMuICBUaGVyZWZvcmUsIGEgdGhpcmQgbGV2ZWwgb2YgdGFibGUgaXMgbmVlZGVkCisgKglmb3IgdGhlIDA0MCwgYW5kIHRoYXQgd291bGQgYmUgdGhlIHBhZ2UgdGFibGUuICBJbiBMaW51eCwKKyAqCXBhZ2UgdGFibGVzIGFyZSBhbGxvY2F0ZWQgZGlyZWN0bHkgZnJvbSB0aGUgbWVtb3J5IGFib3ZlIHRoZQorICoJa2VybmVsLgorICoKKyAqLworCitMKG1tdV9tYXBfMDQwKToKKwkvKiBDYWxjdWxhdGUgdGhlIG9mZnNldCBpbnRvIHRoZSByb290IHRhYmxlCisJICovCisJbW92ZWwJJWEzLCVkMAorCW1vdmVxCSNST09UX0lOREVYX1NISUZULCVkMQorCWxzcmwJJWQxLCVkMAorCW1tdV9nZXRfcm9vdF90YWJsZV9lbnRyeQklZDAKKworCS8qIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IGludG8gdGhlIHBvaW50ZXIgdGFibGUKKwkgKi8KKwltb3ZlbAklYTMsJWQwCisJbW92ZXEJI1BUUl9JTkRFWF9TSElGVCwlZDEKKwlsc3JsCSVkMSwlZDAKKwlhbmRsCSNQVFJfVEFCTEVfU0laRS0xLCVkMAorCW1tdV9nZXRfcHRyX3RhYmxlX2VudHJ5CQklYTAsJWQwCisKKwkvKiBDYWxjdWxhdGUgdGhlIG9mZnNldCBpbnRvIHRoZSBwYWdlIHRhYmxlCisJICovCisJbW92ZWwJJWEzLCVkMAorCW1vdmVxCSNQQUdFX0lOREVYX1NISUZULCVkMQorCWxzcmwJJWQxLCVkMAorCWFuZGwJI1BBR0VfVEFCTEVfU0laRS0xLCVkMAorCW1tdV9nZXRfcGFnZV90YWJsZV9lbnRyeQklYTAsJWQwCisKKwkvKiBUaGUgcGFnZSB0YWJsZSBlbnRyeSBtdXN0IG5vdCBubyBiZSBidXN5CisJICovCisJdHN0bAklYTBACisJam5lCUwobW11X21hcF9lcnJvcikKKworCS8qIERvIHRoZSBtYXBwaW5nIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVycworCSAqLworCW1vdmVsCSVhMiwlYTBACisyOgorCWFkZHcJI1BBR0VTSVpFLCVhMgorCWFkZHcJI1BBR0VTSVpFLCVhMworCisJLyogUmVhZHkgd2l0aCBtYXBwaW5nPworCSAqLworCWxlYQklYTNAKC0xKSwlYTAKKwljbXBsCSVhMCwlYTQKKwlqaGkJTChtbXVfbWFwXzA0MCkKKwlqcmEJTChtbXVfbWFwX2RvbmUpCisKK0wobW11X21hcF8wMzApOgorCS8qIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IGludG8gdGhlIHJvb3QgdGFibGUKKwkgKi8KKwltb3ZlbAklYTMsJWQwCisJbW92ZXEJI1JPT1RfSU5ERVhfU0hJRlQsJWQxCisJbHNybAklZDEsJWQwCisJbW11X2dldF9yb290X3RhYmxlX2VudHJ5CSVkMAorCisJLyogQ2hlY2sgaWYgbG9naWNhbCBhZGRyZXNzIDMyTUIgYWxpZ25lZCwKKwkgKiBzbyB3ZSBjYW4gdHJ5IHRvIG1hcCBpdCBvbmNlCisJICovCisJbW92ZWwJJWEzLCVkMAorCWFuZGwJIyhQVFJfVEFCTEVfU0laRSpQQUdFX1RBQkxFX1NJWkUqUEFHRVNJWkUtMSkmKC1ST09UX1RBQkxFX1NJWkUpLCVkMAorCWpuZQkxZgorCisJLyogSXMgdGhlcmUgZW5vdWdoIHRvIG1hcCBmb3IgMzJNQiBhdCBvbmNlCisJICovCisJbGVhCSVhM0AoUFRSX1RBQkxFX1NJWkUqUEFHRV9UQUJMRV9TSVpFKlBBR0VTSVpFLTEpLCVhMQorCWNtcGwJJWExLCVhNAorCWpjcwkxZgorCisJYWRkcWwJIzEsJWExCisKKwkvKiBUaGUgcm9vdCB0YWJsZSBlbnRyeSBtdXN0IG5vdCBubyBiZSBidXN5CisJICovCisJdHN0bAklYTBACisJam5lCUwobW11X21hcF9lcnJvcikKKworCS8qIERvIHRoZSBtYXBwaW5nIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVycworCSAqLworCWRwdXRzCSJlYXJseSB0ZXJtMSIKKwlkcHV0bgklYTIKKwlkcHV0bgklYTMKKwlkcHV0bgklYTEKKwlkcHV0YwknXG4nCisJbW92ZWwJJWEyLCVhMEAKKworCW1vdmVsCSVhMSwlYTMKKwlsZWEJJWEyQChQVFJfVEFCTEVfU0laRSpQQUdFX1RBQkxFX1NJWkUqUEFHRVNJWkUpLCVhMgorCWpyYQlMKG1tdV9tYXBuZXh0XzAzMCkKKzE6CisJLyogQ2FsY3VsYXRlIHRoZSBvZmZzZXQgaW50byB0aGUgcG9pbnRlciB0YWJsZQorCSAqLworCW1vdmVsCSVhMywlZDAKKwltb3ZlcQkjUFRSX0lOREVYX1NISUZULCVkMQorCWxzcmwJJWQxLCVkMAorCWFuZGwJI1BUUl9UQUJMRV9TSVpFLTEsJWQwCisJbW11X2dldF9wdHJfdGFibGVfZW50cnkJCSVhMCwlZDAKKworCS8qIFRoZSBwb2ludGVyIHRhYmxlIGVudHJ5IG11c3Qgbm90IG5vIGJlIGJ1c3kKKwkgKi8KKwl0c3RsCSVhMEAKKwlqbmUJTChtbXVfbWFwX2Vycm9yKQorCisJLyogRG8gdGhlIG1hcHBpbmcgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXJzCisJICovCisJZHB1dHMJImVhcmx5IHRlcm0yIgorCWRwdXRuCSVhMgorCWRwdXRuCSVhMworCWRwdXRjCSdcbicKKwltb3ZlbAklYTIsJWEwQAorCisJYWRkbAkjUEFHRV9UQUJMRV9TSVpFKlBBR0VTSVpFLCVhMgorCWFkZGwJI1BBR0VfVEFCTEVfU0laRSpQQUdFU0laRSwlYTMKKworTChtbXVfbWFwbmV4dF8wMzApOgorCS8qIFJlYWR5IHdpdGggbWFwcGluZz8KKwkgKi8KKwlsZWEJJWEzQCgtMSksJWEwCisJY21wbAklYTAsJWE0CisJamhpCUwobW11X21hcF8wMzApCisJanJhCUwobW11X21hcF9kb25lKQorCitMKG1tdV9tYXBfZXJyb3IpOgorCisJZHB1dHMJIm1tdV9tYXAgZXJyb3I6IgorCWRwdXRuCSVhMgorCWRwdXRuCSVhMworCWRwdXRjCSdcbicKKworTChtbXVfbWFwX2RvbmUpOgorCitmdW5jX3JldHVybgltbXVfbWFwCisKKy8qCisgKgltbXVfZml4dXAKKyAqCisgKglPbiB0aGUgMDQwIGNsYXNzIG1hY2hpbmVzLCBhbGwgcGFnZXMgdGhhdCBhcmUgdXNlZCBmb3IgdGhlCisgKgltbXUgaGF2ZSB0byBiZSBmaXhlZCB1cC4KKyAqLworCitmdW5jX3N0YXJ0CW1tdV9maXh1cF9wYWdlX21tdV9jYWNoZSwlZDAvJWEwCisKKwlkcHV0cwkibW11X2ZpeHVwX3BhZ2VfbW11X2NhY2hlIgorCWRwdXRuCUFSRzEKKworCS8qIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IGludG8gdGhlIHJvb3QgdGFibGUKKwkgKi8KKwltb3ZlbAlBUkcxLCVkMAorCW1vdmVxCSNST09UX0lOREVYX1NISUZULCVkMQorCWxzcmwJJWQxLCVkMAorCW1tdV9nZXRfcm9vdF90YWJsZV9lbnRyeQklZDAKKworCS8qIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IGludG8gdGhlIHBvaW50ZXIgdGFibGUKKwkgKi8KKwltb3ZlbAlBUkcxLCVkMAorCW1vdmVxCSNQVFJfSU5ERVhfU0hJRlQsJWQxCisJbHNybAklZDEsJWQwCisJYW5kbAkjUFRSX1RBQkxFX1NJWkUtMSwlZDAKKwltbXVfZ2V0X3B0cl90YWJsZV9lbnRyeQkJJWEwLCVkMAorCisJLyogQ2FsY3VsYXRlIHRoZSBvZmZzZXQgaW50byB0aGUgcGFnZSB0YWJsZQorCSAqLworCW1vdmVsCUFSRzEsJWQwCisJbW92ZXEJI1BBR0VfSU5ERVhfU0hJRlQsJWQxCisJbHNybAklZDEsJWQwCisJYW5kbAkjUEFHRV9UQUJMRV9TSVpFLTEsJWQwCisJbW11X2dldF9wYWdlX3RhYmxlX2VudHJ5CSVhMCwlZDAKKworCW1vdmVsCSVhMEAsJWQwCisJYW5kaWwJI19DQUNIRU1BU0swNDAsJWQwCisJb3JsCSVwY0AobTY4a19wZ3RhYmxlX2NhY2hlbW9kZSksJWQwCisJbW92ZWwJJWQwLCVhMEAKKworCWRwdXRjCSdcbicKKworZnVuY19yZXR1cm4JbW11X2ZpeHVwX3BhZ2VfbW11X2NhY2hlCisKKy8qCisgKgltbXVfdGVtcF9tYXAKKyAqCisgKgljcmVhdGUgYSB0ZW1wb3JhcnkgbWFwcGluZyB0byBlbmFibGUgdGhlIG1tdSwKKyAqCXRoaXMgd2UgZG9uJ3QgbmVlZCBhbnkgdHJhbnNwYXJhdGlvbiB0cmFuc2xhdGlvbiB0cmlja3MuCisgKi8KKworZnVuY19zdGFydAltbXVfdGVtcF9tYXAsJWQwLyVkMS8lYTAvJWExCisKKwlkcHV0cwkibW11X3RlbXBfbWFwIgorCWRwdXRuCUFSRzEKKwlkcHV0bglBUkcyCisJZHB1dGMJJ1xuJworCisJbGVhCSVwY0AoTCh0ZW1wX21tYXBfbWVtKSksJWExCisKKwkvKiBDYWxjdWxhdGUgdGhlIG9mZnNldCBpbiB0aGUgcm9vdCB0YWJsZQorCSAqLworCW1vdmVsCUFSRzIsJWQwCisJbW92ZXEJI1JPT1RfSU5ERVhfU0hJRlQsJWQxCisJbHNybAklZDEsJWQwCisJbW11X2dldF9yb290X3RhYmxlX2VudHJ5CSVkMAorCisJLyogQ2hlY2sgaWYgdGhlIHRhYmxlIGlzIHRlbXBvcmFyeSBhbGxvY2F0ZWQsIHNvIHdlIGhhdmUgdG8gcmV1c2UgaXQKKwkgKi8KKwltb3ZlbAklYTBALCVkMAorCWNtcGwJJXBjQChMKG1lbW9yeV9zdGFydCkpLCVkMAorCWpjYwkxZgorCisJLyogVGVtcG9yYXJ5IGFsbG9jYXRlIGEgcHRyIHRhYmxlIGFuZCBpbnNlcnQgaXQgaW50byB0aGUgcm9vdCB0YWJsZQorCSAqLworCW1vdmVsCSVhMUAsJWQwCisJYWRkbAkjUFRSX1RBQkxFX1NJWkUqNCwlYTFACisJb3J3CSNfUEFHRV9UQUJMRStfUEFHRV9BQ0NFU1NFRCwlZDAKKwltb3ZlbAklZDAsJWEwQAorCWRwdXRzCSIgKG5ldykiCisxOgorCWRwdXRuCSVkMAorCS8qIE1hc2sgdGhlIHJvb3QgdGFibGUgZW50cnkgZm9yIHRoZSBwdHIgdGFibGUKKwkgKi8KKwlhbmR3CSMtUk9PVF9UQUJMRV9TSVpFLCVkMAorCW1vdmVsCSVkMCwlYTAKKworCS8qIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IGludG8gdGhlIHBvaW50ZXIgdGFibGUKKwkgKi8KKwltb3ZlbAlBUkcyLCVkMAorCW1vdmVxCSNQVFJfSU5ERVhfU0hJRlQsJWQxCisJbHNybAklZDEsJWQwCisJYW5kbAkjUFRSX1RBQkxFX1NJWkUtMSwlZDAKKwlsZWEJJWEwQCglZDAqNCksJWEwCisJZHB1dG4JJWEwCisKKwkvKiBDaGVjayBpZiBhIHRlbXBvcmFyeSBwYWdlIHRhYmxlIGlzIGFscmVhZHkgYWxsb2NhdGVkCisJICovCisJbW92ZWwJJWEwQCwlZDAKKwlqbmUJMWYKKworCS8qIFRlbXBvcmFyeSBhbGxvY2F0ZSBhIHBhZ2UgdGFibGUgYW5kIGluc2VydCBpdCBpbnRvIHRoZSBwdHIgdGFibGUKKwkgKi8KKwltb3ZlbAklYTFALCVkMAorCS8qIFRoZSA1MTIgc2hvdWxkIGJlIFBBR0VfVEFCTEVfU0laRSo0LCBidXQgdGhhdCB2aW9sYXRlcyB0aGUKKwkgICBhbGlnbm1lbnQgcmVzdHJpY3Rpb24gZm9yIHBvaW50ZXIgdGFibGVzIG9uIHRoZSAnMFs0Nl0wLiAgKi8KKwlhZGRsCSM1MTIsJWExQAorCW9ydwkjX1BBR0VfVEFCTEUrX1BBR0VfQUNDRVNTRUQsJWQwCisJbW92ZWwJJWQwLCVhMEAKKwlkcHV0cwkiIChuZXcpIgorMToKKwlkcHV0bgklZDAKKwkvKiBNYXNrIHRoZSBwdHIgdGFibGUgZW50cnkgZm9yIHRoZSBwYWdlIHRhYmxlCisJICovCisJYW5kdwkjLVBUUl9UQUJMRV9TSVpFLCVkMAorCW1vdmVsCSVkMCwlYTAKKworCS8qIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IGludG8gdGhlIHBhZ2UgdGFibGUKKwkgKi8KKwltb3ZlbAlBUkcyLCVkMAorCW1vdmVxCSNQQUdFX0lOREVYX1NISUZULCVkMQorCWxzcmwJJWQxLCVkMAorCWFuZGwJI1BBR0VfVEFCTEVfU0laRS0xLCVkMAorCWxlYQklYTBAKCVkMCo0KSwlYTAKKwlkcHV0bgklYTAKKworCS8qIEluc2VydCB0aGUgYWRkcmVzcyBpbnRvIHRoZSBwYWdlIHRhYmxlCisJICovCisJbW92ZWwJQVJHMSwlZDAKKwlhbmR3CSMtUEFHRVNJWkUsJWQwCisJb3J3CSNfUEFHRV9QUkVTRU5UK19QQUdFX0FDQ0VTU0VEK19QQUdFX0RJUlRZLCVkMAorCW1vdmVsCSVkMCwlYTBACisJZHB1dG4JJWQwCisKKwlkcHV0YwknXG4nCisKK2Z1bmNfcmV0dXJuCW1tdV90ZW1wX21hcAorCitmdW5jX3N0YXJ0CW1tdV9lbmdhZ2UsJWQwLSVkMi8lYTAtJWEzCisKKwltb3ZlcQkjUk9PVF9UQUJMRV9TSVpFLTEsJWQwCisJLyogVGVtcG9yYXJpbHkgdXNlIGEgZGlmZmVyZW50IHJvb3QgdGFibGUuICAqLworCWxlYQklcGNAKEwoa2VybmVsX3BnZGlyX3B0cikpLCVhMAorCW1vdmVsCSVhMEAsJWEyCisJbW92ZWwJJXBjQChMKG1lbW9yeV9zdGFydCkpLCVhMQorCW1vdmVsCSVhMSwlYTBACisJbW92ZWwJJWEyLCVhMAorMToKKwltb3ZlbAklYTBAKywlYTFAKworCWRicmEJJWQwLDFiCisKKwlsZWEJJXBjQChMKHRlbXBfbW1hcF9tZW0pKSwlYTAKKwltb3ZlbAklYTEsJWEwQAorCisJbW92ZXcJI1BBR0VTSVpFLTEsJWQwCisxOgorCWNscmwJJWExQCsKKwlkYnJhCSVkMCwxYgorCisJbGVhCSVwY0AoMWIpLCVhMAorCW1vdmVsCSMxYiwlYTEKKwkvKiBTa2lwIHRlbXAgbWFwcGluZ3MgaWYgcGh5cyA9PSB2aXJ0ICovCisJY21wbAklYTAsJWExCisJamVxCTFmCisKKwltbXVfdGVtcF9tYXAJJWEwLCVhMAorCW1tdV90ZW1wX21hcAklYTAsJWExCisKKwlhZGR3CSNQQUdFU0laRSwlYTAKKwlhZGR3CSNQQUdFU0laRSwlYTEKKwltbXVfdGVtcF9tYXAJJWEwLCVhMAorCW1tdV90ZW1wX21hcAklYTAsJWExCisxOgorCW1vdmVsCSVwY0AoTChtZW1vcnlfc3RhcnQpKSwlYTMKKwltb3ZlbAklcGNAKEwocGh5c19rZXJuZWxfc3RhcnQpKSwlZDIKKworCWlzX25vdF8wNDBfb3JfMDYwKEwobW11X2VuZ2FnZV8wMzApKQorCitMKG1tdV9lbmdhZ2VfMDQwKToKKwkuY2hpcAk2ODA0MAorCW5vcAorCWNpbnZhCSViYworCW5vcAorCXBmbHVzaGEKKwlub3AKKwltb3ZlYwklYTMsJXNycAorCW1vdmVsCSNUQ19FTkFCTEUrVENfUEFHRTRLLCVkMAorCW1vdmVjCSVkMCwldGMJCS8qIGVuYWJsZSB0aGUgTU1VICovCisJam1wCTFmOmwKKzE6CW5vcAorCW1vdmVjCSVhMiwlc3JwCisJbm9wCisJY2ludmEJJWJjCisJbm9wCisJcGZsdXNoYQorCS5jaGlwCTY4aworCWpyYQlMKG1tdV9lbmdhZ2VfY2xlYW51cCkKKworTChtbXVfZW5nYWdlXzAzMF90ZW1wKToKKwkuc3BhY2UJMTIKK0wobW11X2VuZ2FnZV8wMzApOgorCS5jaGlwCTY4MDMwCisJbGVhCSVwY0AoTChtbXVfZW5nYWdlXzAzMF90ZW1wKSksJWEwCisJbW92ZWwJIzB4ODAwMDAwMDIsJWEwQAorCW1vdmVsCSVhMywlYTBAKDQpCisJbW92ZWwJIzB4MDgwOCwlZDAKKwltb3ZlYwklZDAsJWNhY3IKKwlwbW92ZQklYTBALCVzcnAKKwlwZmx1c2hhCisJLyoKKwkgKiBlbmFibGUsc3VwZXIgcm9vdCBlbmFibGUsNDA5NiBieXRlIHBhZ2VzLDcgYml0IHJvb3QgaW5kZXgsCisJICogNyBiaXQgcG9pbnRlciBpbmRleCwgNiBiaXQgcGFnZSB0YWJsZSBpbmRleC4KKwkgKi8KKwltb3ZlbAkjMHg4MmMwNzc2MCwlYTBAKDgpCisJcG1vdmUJJWEwQCg4KSwldGMJLyogZW5hYmxlIHRoZSBNTVUgKi8KKwlqbXAJMWY6bAorMToJbW92ZWwJJWEyLCVhMEAoNCkKKwltb3ZlbAkjMHgwODA4LCVkMAorCW1vdmVjCSVkMCwlY2FjcgorCXBtb3ZlCSVhMEAsJXNycAorCXBmbHVzaGEKKwkuY2hpcAk2OGsKKworTChtbXVfZW5nYWdlX2NsZWFudXApOgorCXN1YmwJI1BBR0VfT0ZGU0VULCVkMgorCXN1YmwJJWQyLCVhMgorCW1vdmVsCSVhMixMKGtlcm5lbF9wZ2Rpcl9wdHIpCisJc3VibAklZDIsJWZwCisJc3VibAklZDIsJXNwCisJc3VibAklZDIsQVJHMAorCitmdW5jX3JldHVybgltbXVfZW5nYWdlCisKK2Z1bmNfc3RhcnQJbW11X2dldF9yb290X3RhYmxlX2VudHJ5LCVkMC8lYTEKKworI2lmIDAKKwlkcHV0cwkibW11X2dldF9yb290X3RhYmxlX2VudHJ5OiIKKwlkcHV0bglBUkcxCisJZHB1dHMJIiA9IgorI2VuZGlmCisKKwltb3ZlbAklcGNAKEwoa2VybmVsX3BnZGlyX3B0cikpLCVhMAorCXRzdGwJJWEwCisJam5lCTJmCisKKwlkcHV0cwkiXG5tbXVfaW5pdDoiCisKKwkvKiBGaW5kIHRoZSBzdGFydCBvZiBmcmVlIG1lbW9yeSwgZ2V0X2JpX3JlY29yZCBkb2VzIHRoaXMgZm9yIHVzLAorCSAqIGFzIHRoZSBib290aW5mbyBzdHJ1Y3R1cmUgaXMgbG9jYXRlZCBkaXJlY3RseSBiZWhpbmQgdGhlIGtlcm5lbAorCSAqIGFuZCBhbmQgd2Ugc2ltcGx5IHNlYXJjaCBmb3IgdGhlIGxhc3QgZW50cnkuCisJICovCisJZ2V0X2JpX3JlY29yZAlCSV9MQVNUCisJYWRkdwkjUEFHRVNJWkUtMSwlYTAKKwltb3ZlbAklYTAsJWQwCisJYW5kdwkjLVBBR0VTSVpFLCVkMAorCisJZHB1dG4JJWQwCisKKwlsZWEJJXBjQChMKG1lbW9yeV9zdGFydCkpLCVhMAorCW1vdmVsCSVkMCwlYTBACisJbGVhCSVwY0AoTChrZXJuZWxfZW5kKSksJWEwCisJbW92ZWwJJWQwLCVhMEAKKworCS8qIHdlIGhhdmUgdG8gcmV0dXJuIHRoZSBmaXJzdCBwYWdlIGF0IF9zdGV4dCBzaW5jZSB0aGUgaW5pdCBjb2RlCisJICogaW4gbW0vaW5pdC5jIHNpbXBseSBleHBlY3RzIGtlcm5lbF9wZ19kaXIgdGhlcmUsIHRoZSByZXN0IG9mCisJICogcGFnZSBpcyB1c2VkIGZvciBmdXJ0aGVyIHB0ciB0YWJsZXMgaW4gZ2V0X3B0cl90YWJsZS4KKwkgKi8KKwlsZWEJJXBjQChfc3RleHQpLCVhMAorCWxlYQklcGNAKEwobW11X2NhY2hlZF9wb2ludGVyX3RhYmxlcykpLCVhMQorCW1vdmVsCSVhMCwlYTFACisJYWRkbAkjUk9PVF9UQUJMRV9TSVpFKjQsJWExQAorCisJbGVhCSVwY0AoTChtbXVfbnVtX3BvaW50ZXJfdGFibGVzKSksJWExCisJYWRkcWwJIzEsJWExQAorCisJLyogY2xlYXIgdGhlIHBhZ2UKKwkgKi8KKwltb3ZlbAklYTAsJWExCisJbW92ZXcJI1BBR0VTSVpFLzQtMSwlZDAKKzE6CisJY2xybAklYTFAKworCWRicmEJJWQwLDFiCisKKwlsZWEJJXBjQChMKGtlcm5lbF9wZ2Rpcl9wdHIpKSwlYTEKKwltb3ZlbAklYTAsJWExQAorCisJZHB1dG4JJWEwCisJZHB1dGMJJ1xuJworMjoKKwltb3ZlbAlBUkcxLCVkMAorCWxlYQklYTBAKCVkMCo0KSwlYTAKKworI2lmIDAKKwlkcHV0bgklYTAKKwlkcHV0YwknXG4nCisjZW5kaWYKKworZnVuY19yZXR1cm4JbW11X2dldF9yb290X3RhYmxlX2VudHJ5CisKKworCitmdW5jX3N0YXJ0CW1tdV9nZXRfcHRyX3RhYmxlX2VudHJ5LCVkMC8lYTEKKworI2lmIDAKKwlkcHV0cwkibW11X2dldF9wdHJfdGFibGVfZW50cnk6IgorCWRwdXRuCUFSRzEKKwlkcHV0bglBUkcyCisJZHB1dHMJIiA9IgorI2VuZGlmCisKKwltb3ZlbAlBUkcxLCVhMAorCW1vdmVsCSVhMEAsJWQwCisJam5lCTJmCisKKwkvKiBLZWVwIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgcG9pbnRlciB0YWJsZXMgd2UgdXNlCisJICovCisJZHB1dHMJIlxubW11X2dldF9uZXdfcHRyX3RhYmxlOiIKKwlsZWEJJXBjQChMKG1tdV9udW1fcG9pbnRlcl90YWJsZXMpKSwlYTAKKwltb3ZlbAklYTBALCVkMAorCWFkZHFsCSMxLCVhMEAKKworCS8qIFNlZSBpZiB0aGVyZSBpcyBhIGZyZWUgcG9pbnRlciB0YWJsZSBpbiBvdXIgY2FjaGUgb2YgcG9pbnRlciB0YWJsZXMKKwkgKi8KKwlsZWEJJXBjQChMKG1tdV9jYWNoZWRfcG9pbnRlcl90YWJsZXMpKSwlYTEKKwlhbmR3CSM3LCVkMAorCWpuZQkxZgorCisJLyogR2V0IGEgbmV3IHBvaW50ZXIgdGFibGUgcGFnZSBmcm9tIGFib3ZlIHRoZSBrZXJuZWwgbWVtb3J5CisJICovCisJZ2V0X25ld19wYWdlCisJbW92ZWwJJWEwLCVhMUAKKzE6CisJLyogVGhlcmUgaXMgYW4gdW51c2VkIHBvaW50ZXIgdGFibGUgaW4gb3VyIGNhY2hlLi4uIHVzZSBpdAorCSAqLworCW1vdmVsCSVhMUAsJWQwCisJYWRkbAkjUFRSX1RBQkxFX1NJWkUqNCwlYTFACisKKwlkcHV0bgklZDAKKwlkcHV0YwknXG4nCisKKwkvKiBJbnNlcnQgdGhlIG5ldyBwb2ludGVyIHRhYmxlIGludG8gdGhlIHJvb3QgdGFibGUKKwkgKi8KKwltb3ZlbAlBUkcxLCVhMAorCW9ydwkjX1BBR0VfVEFCTEUrX1BBR0VfQUNDRVNTRUQsJWQwCisJbW92ZWwJJWQwLCVhMEAKKzI6CisJLyogRXh0cmFjdCB0aGUgcG9pbnRlciB0YWJsZSBlbnRyeQorCSAqLworCWFuZHcJIy1QVFJfVEFCTEVfU0laRSwlZDAKKwltb3ZlbAklZDAsJWEwCisJbW92ZWwJQVJHMiwlZDAKKwlsZWEJJWEwQCglZDAqNCksJWEwCisKKyNpZiAwCisJZHB1dG4JJWEwCisJZHB1dGMJJ1xuJworI2VuZGlmCisKK2Z1bmNfcmV0dXJuCW1tdV9nZXRfcHRyX3RhYmxlX2VudHJ5CisKKworZnVuY19zdGFydAltbXVfZ2V0X3BhZ2VfdGFibGVfZW50cnksJWQwLyVhMQorCisjaWYgMAorCWRwdXRzCSJtbXVfZ2V0X3BhZ2VfdGFibGVfZW50cnk6IgorCWRwdXRuCUFSRzEKKwlkcHV0bglBUkcyCisJZHB1dHMJIiA9IgorI2VuZGlmCisKKwltb3ZlbAlBUkcxLCVhMAorCW1vdmVsCSVhMEAsJWQwCisJam5lCTJmCisKKwkvKiBJZiB0aGUgcGFnZSB0YWJsZSBlbnRyeSBkb2Vzbid0IGV4aXN0LCB3ZSBhbGxvY2F0ZSBhIGNvbXBsZXRlIG5ldworCSAqIHBhZ2UgYW5kIHVzZSBpdCBhcyBvbmUgY29udGludWVzIGJpZyBwYWdlIHRhYmxlIHdoaWNoIGNhbiBjb3ZlcgorCSAqIDRNQiBvZiBtZW1vcnksIG5lYXJseSBhbG1vc3QgYWxsIG1hcHBpbmdzIGhhdmUgdGhhdCBhbGlnbm1lbnQuCisJICovCisJZ2V0X25ld19wYWdlCisJYWRkdwkjX1BBR0VfVEFCTEUrX1BBR0VfQUNDRVNTRUQsJWEwCisKKwkvKiBhbGlnbiBwb2ludGVyIHRhYmxlIGVudHJ5IGZvciBhIHBhZ2Ugb2YgcGFnZSB0YWJsZXMKKwkgKi8KKwltb3ZlbAlBUkcxLCVkMAorCWFuZHcJIy0oUEFHRVNJWkUvUEFHRV9UQUJMRV9TSVpFKSwlZDAKKwltb3ZlbAklZDAsJWExCisKKwkvKiBJbnNlcnQgdGhlIHBhZ2UgdGFibGVzIGludG8gdGhlIHBvaW50ZXIgZW50cmllcworCSAqLworCW1vdmVxCSNQQUdFU0laRS9QQUdFX1RBQkxFX1NJWkUvNC0xLCVkMAorMToKKwltb3ZlbAklYTAsJWExQCsKKwlsZWEJJWEwQChQQUdFX1RBQkxFX1NJWkUqNCksJWEwCisJZGJyYQklZDAsMWIKKworCS8qIE5vdyB3ZSBjYW4gZ2V0IHRoZSBpbml0aWFsaXplZCBwb2ludGVyIHRhYmxlIGVudHJ5CisJICovCisJbW92ZWwJQVJHMSwlYTAKKwltb3ZlbAklYTBALCVkMAorMjoKKwkvKiBFeHRyYWN0IHRoZSBwYWdlIHRhYmxlIGVudHJ5CisJICovCisJYW5kdwkjLVBBR0VfVEFCTEVfU0laRSwlZDAKKwltb3ZlbAklZDAsJWEwCisJbW92ZWwJQVJHMiwlZDAKKwlsZWEJJWEwQCglZDAqNCksJWEwCisKKyNpZiAwCisJZHB1dG4JJWEwCisJZHB1dGMJJ1xuJworI2VuZGlmCisKK2Z1bmNfcmV0dXJuCW1tdV9nZXRfcGFnZV90YWJsZV9lbnRyeQorCisvKgorICoJZ2V0X25ld19wYWdlCisgKgorICoJUmV0dXJuIGEgbmV3IHBhZ2UgZnJvbSB0aGUgbWVtb3J5IHN0YXJ0IGFuZCBjbGVhciBpdC4KKyAqLworZnVuY19zdGFydAlnZXRfbmV3X3BhZ2UsJWQwLyVhMQorCisJZHB1dHMJIlxuZ2V0X25ld19wYWdlOiIKKworCS8qIGFsbG9jYXRlIHRoZSBwYWdlIGFuZCBhZGp1c3QgbWVtb3J5X3N0YXJ0CisJICovCisJbGVhCSVwY0AoTChtZW1vcnlfc3RhcnQpKSwlYTAKKwltb3ZlbAklYTBALCVhMQorCWFkZGwJI1BBR0VTSVpFLCVhMEAKKworCS8qIGNsZWFyIHRoZSBuZXcgcGFnZQorCSAqLworCW1vdmVsCSVhMSwlYTAKKwltb3ZldwkjUEFHRVNJWkUvNC0xLCVkMAorMToKKwljbHJsCSVhMUArCisJZGJyYQklZDAsMWIKKworCWRwdXRuCSVhMAorCWRwdXRjCSdcbicKKworZnVuY19yZXR1cm4JZ2V0X25ld19wYWdlCisKKworCisvKgorICogRGVidWcgb3V0cHV0IHN1cHBvcnQKKyAqIEF0YXJpYW5zIGhhdmUgYSBjaG9pY2UgYmV0d2VlbiB0aGUgcGFyYWxsZWwgcG9ydCwgdGhlIHNlcmlhbCBwb3J0CisgKiBmcm9tIHRoZSBNRlAgb3IgYSBzZXJpYWwgcG9ydCBvZiB0aGUgU0NDCisgKi8KKworI2lmZGVmIENPTkZJR19NQUMKKworTChzY2NfaW5pdGFibGVfbWFjKToKKwkuYnl0ZQk5LDEyCQkvKiBSZXNldCAqLworCS5ieXRlCTQsMHg0NAkJLyogeDE2LCAxIHN0b3BiaXQsIG5vIHBhcml0eSAqLworCS5ieXRlCTMsMHhjMAkJLyogcmVjZWl2ZXI6IDggYnBjICovCisJLmJ5dGUJNSwweGUyCQkvKiB0cmFuc21pdHRlcjogOCBicGMsIGFzc2VydCBkdHIvcnRzICovCisJLmJ5dGUJOSwwCQkvKiBubyBpbnRlcnJ1cHRzICovCisJLmJ5dGUJMTAsMAkJLyogTlJaICovCisJLmJ5dGUJMTEsMHg1MAkJLyogdXNlIGJhdWQgcmF0ZSBnZW5lcmF0b3IgKi8KKwkuYnl0ZQkxMiwxMCwxMywwCS8qIDk2MDAgYmF1ZCAqLworCS5ieXRlCTE0LDEJCS8qIEJhdWQgcmF0ZSBnZW5lcmF0b3IgZW5hYmxlICovCisJLmJ5dGUJMywweGMxCQkvKiBlbmFibGUgcmVjZWl2ZXIgKi8KKwkuYnl0ZQk1LDB4ZWEJCS8qIGVuYWJsZSB0cmFuc21pdHRlciAqLworCS5ieXRlCS0xCisJLmV2ZW4KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FUQVJJCisvKiAjZGVmaW5lIFVTRV9QUklOVEVSICovCisvKiAjZGVmaW5lIFVTRV9TQ0NfQiAqLworLyogI2RlZmluZSBVU0VfU0NDX0EgKi8KKyNkZWZpbmUgVVNFX01GUAorCisjaWYgZGVmaW5lZChVU0VfU0NDX0EpIHx8IGRlZmluZWQoVVNFX1NDQ19CKQorI2RlZmluZSBVU0VfU0NDCisvKiBJbml0aWFsaXNhdGlvbiB0YWJsZSBmb3IgU0NDICovCitMKHNjY19pbml0YWJsZSk6CisJLmJ5dGUJOSwxMgkJLyogUmVzZXQgKi8KKwkuYnl0ZQk0LDB4NDQJCS8qIHgxNiwgMSBzdG9wYml0LCBubyBwYXJpdHkgKi8KKwkuYnl0ZQkzLDB4YzAJCS8qIHJlY2VpdmVyOiA4IGJwYyAqLworCS5ieXRlCTUsMHhlMgkJLyogdHJhbnNtaXR0ZXI6IDggYnBjLCBhc3NlcnQgZHRyL3J0cyAqLworCS5ieXRlCTksMAkJLyogbm8gaW50ZXJydXB0cyAqLworCS5ieXRlCTEwLDAJCS8qIE5SWiAqLworCS5ieXRlCTExLDB4NTAJCS8qIHVzZSBiYXVkIHJhdGUgZ2VuZXJhdG9yICovCisJLmJ5dGUJMTIsMjQsMTMsMAkvKiA5NjAwIGJhdWQgKi8KKwkuYnl0ZQkxNCwyLDE0LDMJLyogdXNlIG1hc3RlciBjbG9jayBmb3IgQlJHLCBlbmFibGUgKi8KKwkuYnl0ZQkzLDB4YzEJCS8qIGVuYWJsZSByZWNlaXZlciAqLworCS5ieXRlCTUsMHhlYQkJLyogZW5hYmxlIHRyYW5zbWl0dGVyICovCisJLmJ5dGUJLTEKKwkuZXZlbgorI2VuZGlmCisKKyNpZmRlZiBVU0VfUFJJTlRFUgorCitMUFNHX1NFTEVDVAk9IDB4ZmY4ODAwCitMUFNHX1JFQUQJPSAweGZmODgwMAorTFBTR19XUklURQk9IDB4ZmY4ODAyCitMUFNHX0lPX0EJPSAxNAorTFBTR19JT19CCT0gMTUKK0xQU0dfQ09OVFJPTAk9IDcKK0xTVE1GUF9HUElQCT0gMHhmZmZhMDEKK0xTVE1GUF9ERFIJPSAweGZmZmEwNQorTFNUTUZQX0lFUkIJPSAweGZmZmEwOQorCisjZWxpZiBkZWZpbmVkKFVTRV9TQ0NfQikKKworTFNDQ19DVFJMCT0gMHhmZjhjODUKK0xTQ0NfREFUQQk9IDB4ZmY4Yzg3CisKKyNlbGlmIGRlZmluZWQoVVNFX1NDQ19BKQorCitMU0NDX0NUUkwJPSAweGZmOGM4MQorTFNDQ19EQVRBCT0gMHhmZjhjODMKKworI2VsaWYgZGVmaW5lZChVU0VfTUZQKQorCitMTUZQX1VDUiAgICAgPSAweGZmZmEyOQorTE1GUF9URENEUiAgID0gMHhmZmZhMWQKK0xNRlBfVEREUiAgICA9IDB4ZmZmYTI1CitMTUZQX1RTUiAgICAgPSAweGZmZmEyZAorTE1GUF9VRFIgICAgID0gMHhmZmZhMmYKKworI2VuZGlmCisjZW5kaWYJLyogQ09ORklHX0FUQVJJICovCisKKy8qCisgKiBTZXJpYWwgcG9ydCBvdXRwdXQgc3VwcG9ydC4KKyAqLworCisvKgorICogSW5pdGlhbGl6ZSBzZXJpYWwgcG9ydCBoYXJkd2FyZSBmb3IgOTYwMC84LzEKKyAqLworZnVuY19zdGFydAlzZXJpYWxfaW5pdCwlZDAvJWQxLyVhMC8lYTEKKwkvKgorCSAqCVNvbWUgb2YgdGhlIHJlZ2lzdGVyIHVzYWdlIHRoYXQgZm9sbG93cworCSAqCUNPTkZJR19BTUlHQQorCSAqCQlhMCA9IHBvaW50ZXIgdG8gYm9vdCBpbmZvIHJlY29yZAorCSAqCQlkMCA9IGJvb3QgaW5mbyBvZmZzZXQKKwkgKglDT05GSUdfQVRBUkkKKwkgKgkJYTAgPSBhZGRyZXNzIG9mIFNDQworCSAqCQlhMSA9IExpb2Jhc2UgYWRkcmVzcy9hZGRyZXNzIG9mIHNjY19pbml0YWJsZQorCSAqCQlkMCA9IGluaXQgZGF0YSBmb3Igc2VyaWFsIHBvcnQKKwkgKglDT05GSUdfTUFDCisJICoJCWEwID0gYWRkcmVzcyBvZiBTQ0MKKwkgKgkJYTEgPSBhZGRyZXNzIG9mIHNjY19pbml0YWJsZV9tYWMKKwkgKgkJZDAgPSBpbml0IGRhdGEgZm9yIHNlcmlhbCBwb3J0CisJICovCisKKyNpZmRlZiBDT05GSUdfQU1JR0EKKyNkZWZpbmUgU0VSSUFMX0RUUgk3CisjZGVmaW5lIFNFUklBTF9DTlRSTAlDSUFCQkFTRStDX1BSQQorCisJaXNfbm90X2FtaWdhKDFmKQorCWxlYQklcGNAKEwoY3VzdG9tKSksJWEwCisJbW92ZWwJIy1aVFdPQkFTRSwlYTBACisJYmNscgkjU0VSSUFMX0RUUixTRVJJQUxfQ05UUkwtWlRXT0JBU0UKKwlnZXRfYmlfcmVjb3JkCUJJX0FNSUdBX1NFUlBFUgorCW1vdmV3CSVhMEAsQ1VTVE9NQkFTRStDX1NFUlBFUi1aVFdPQkFTRQorfAltb3ZldwkjNjEsQ1VTVE9NQkFTRStDX1NFUlBFUi1aVFdPQkFTRQorMToKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BVEFSSQorCWlzX25vdF9hdGFyaSg0ZikKKwltb3ZlbAklcGNAKEwoaW9iYXNlKSksJWExCisjaWYgZGVmaW5lZChVU0VfUFJJTlRFUikKKwliY2xyCSMwLCVhMUAoTFNUTUZQX0lFUkIpCisJYmNscgkjMCwlYTFAKExTVE1GUF9ERFIpCisJbW92ZWIJI0xQU0dfQ09OVFJPTCwlYTFAKExQU0dfU0VMRUNUKQorCW1vdmViCSMweGZmLCVhMUAoTFBTR19XUklURSkKKwltb3ZlYgkjTFBTR19JT19CLCVhMUAoTFBTR19TRUxFQ1QpCisJY2xyYgklYTFAKExQU0dfV1JJVEUpCisJbW92ZWIJI0xQU0dfSU9fQSwlYTFAKExQU0dfU0VMRUNUKQorCW1vdmViCSVhMUAoTFBTR19SRUFEKSwlZDAKKwlic2V0CSM1LCVkMAorCW1vdmViCSVkMCwlYTFAKExQU0dfV1JJVEUpCisjZWxpZiBkZWZpbmVkKFVTRV9TQ0MpCisJbGVhCSVhMUAoTFNDQ19DVFJMKSwlYTAKKwlsZWEJJXBjQChMKHNjY19pbml0YWJsZSkpLCVhMQorMjoJbW92ZWIJJWExQCssJWQwCisJam1pCTNmCisJbW92ZWIJJWQwLCVhMEAKKwltb3ZlYgklYTFAKywlYTBACisJanJhCTJiCiszOgljbHJiCSVhMEAKKyNlbGlmIGRlZmluZWQoVVNFX01GUCkKKwliY2xyCSMxLCVhMUAoTE1GUF9UU1IpCisJbW92ZWIgICAjMHg4OCwlYTFAKExNRlBfVUNSKQorCWFuZGIJIzB4NzAsJWExQChMTUZQX1REQ0RSKQorCW1vdmViICAgIzIsJWExQChMTUZQX1RERFIpCisJb3JiCSMxLCVhMUAoTE1GUF9URENEUikKKwlic2V0CSMxLCVhMUAoTE1GUF9UU1IpCisjZW5kaWYKKwlqcmEJTChzZXJpYWxfaW5pdF9kb25lKQorNDoKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NQUMKKwlpc19ub3RfbWFjKEwoc2VyaWFsX2luaXRfbm90X21hYykpCisjaWZkZWYgTUFDX1NFUklBTF9ERUJVRworI2lmICFkZWZpbmVkKE1BQ19VU0VfU0NDX0EpICYmICFkZWZpbmVkKE1BQ19VU0VfU0NDX0IpCisjZGVmaW5lIE1BQ19VU0VfU0NDX0IKKyNlbmRpZgorI2RlZmluZSBtYWNfc2NjX2NoYV9iX2N0cmxfb2Zmc2V0CTB4MAorI2RlZmluZSBtYWNfc2NjX2NoYV9hX2N0cmxfb2Zmc2V0CTB4MgorI2RlZmluZSBtYWNfc2NjX2NoYV9iX2RhdGFfb2Zmc2V0CTB4NAorI2RlZmluZSBtYWNfc2NjX2NoYV9hX2RhdGFfb2Zmc2V0CTB4NgorCisjaWZkZWYgTUFDX1VTRV9TQ0NfQQorCS8qIEluaXRpYWxpemUgY2hhbm5lbCBBICovCisJbW92ZWwJJXBjQChMKG1hY19zY2NiYXNlKSksJWEwCisJbGVhCSVwY0AoTChzY2NfaW5pdGFibGVfbWFjKSksJWExCis1Ogltb3ZlYgklYTFAKywlZDAKKwlqbWkJNmYKKwltb3ZlYgklZDAsJWEwQChtYWNfc2NjX2NoYV9hX2N0cmxfb2Zmc2V0KQorCW1vdmViCSVhMUArLCVhMEAobWFjX3NjY19jaGFfYV9jdHJsX29mZnNldCkKKwlqcmEJNWIKKzY6CisjZW5kaWYJLyogTUFDX1VTRV9TQ0NfQSAqLworCisjaWZkZWYgTUFDX1VTRV9TQ0NfQgorCS8qIEluaXRpYWxpemUgY2hhbm5lbCBCICovCisjaWZuZGVmIE1BQ19VU0VfU0NDX0EJLyogTG9hZCBtYWNfc2NjYmFzZSBvbmx5IGlmIG5lZWRlZCAqLworCW1vdmVsCSVwY0AoTChtYWNfc2NjYmFzZSkpLCVhMAorI2VuZGlmCS8qIE1BQ19VU0VfU0NDX0EgKi8KKwlsZWEJJXBjQChMKHNjY19pbml0YWJsZV9tYWMpKSwlYTEKKzc6CW1vdmViCSVhMUArLCVkMAorCWptaQk4ZgorCW1vdmViCSVkMCwlYTBAKG1hY19zY2NfY2hhX2JfY3RybF9vZmZzZXQpCisJbW92ZWIJJWExQCssJWEwQChtYWNfc2NjX2NoYV9iX2N0cmxfb2Zmc2V0KQorCWpyYQk3YgorODoKKyNlbmRpZgkvKiBNQUNfVVNFX1NDQ19CICovCisjZW5kaWYJLyogTUFDX1NFUklBTF9ERUJVRyAqLworCisJanJhCUwoc2VyaWFsX2luaXRfZG9uZSkKK0woc2VyaWFsX2luaXRfbm90X21hYyk6CisjZW5kaWYJLyogQ09ORklHX01BQyAqLworCisjaWZkZWYgQ09ORklHX1E0MAorCWlzX25vdF9xNDAoMmYpCisvKiBkZWJ1ZyBvdXRwdXQgZ29lcyBpbnRvIFNSQU0sIHNvIHdlIGRvbid0IGRvIGl0IHVubGVzcyByZXF1ZXN0ZWQKKyAgIC0gY2hlY2sgZm9yICclTFgkJyBzaWduYXR1cmUgaW4gU1JBTSAgICovCisJbGVhCSVwY0AocTQwX21lbV9jcHRyKSwlYTEKKwltb3ZlLmwJIzB4ZmYwMjAwMTAsJWExQCAgLyogbXVzdCBiZSBpbml0ZWQgLSBhbHNvIHVzZWQgYnkgZGVidWc9bWVtICovCisJbW92ZS5sCSMweGZmMDIwMDAwLCVhMQorCWNtcC5iCSMnJScsJWExQAorCWJuZQkyZgkvKm5vZGJnKi8KKwlhZGRxLncJIzQsJWExCisJY21wLmIJIydMJywlYTFACisJYm5lCTJmCS8qbm9kYmcqLworCWFkZHEudwkjNCwlYTEKKwljbXAuYgkjJ1gnLCVhMUAKKwlibmUJMmYJLypub2RiZyovCisJYWRkcS53CSM0LCVhMQorCWNtcC5iCSMnJCcsJWExQAorCWJuZQkyZgkvKm5vZGJnKi8KKwkvKiBzaWduYXR1cmUgT0sgKi8KKwlsZWEJJXBjQChMKHE0MF9kb19kZWJ1ZykpLCVhMQorCXRhcwklYTFACisvKm5vZGJnOiBxNDBfZG9fZGVidWcgaXMgMCBieSBkZWZhdWx0Ki8KKzI6CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUE9MTE8KKy8qIFdlIGNvdW50IG9uIHRoZSBQUk9NIGluaXRpYWxpemluZyBTSU8xICovCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19IUDMwMAorLyogV2UgY291bnQgb24gdGhlIGJvb3QgbG9hZGVyIGluaXRpYWxpc2luZyB0aGUgVUFSVCAqLworI2VuZGlmCisKK0woc2VyaWFsX2luaXRfZG9uZSk6CitmdW5jX3JldHVybglzZXJpYWxfaW5pdAorCisvKgorICogT3V0cHV0IGNoYXJhY3RlciBvbiBzZXJpYWwgcG9ydC4KKyAqLworZnVuY19zdGFydAlzZXJpYWxfcHV0YywlZDAvJWQxLyVhMC8lYTEKKworCW1vdmVsCUFSRzEsJWQwCisJY21waWIJIydcbicsJWQwCisJamJuZQkxZgorCisJLyogQSBsaXR0bGUgc2FmZSByZWN1cnNpb24gaXMgZ29vZCBmb3IgdGhlIHNvdWwgKi8KKwlzZXJpYWxfcHV0YwkjJ1xyJworMToKKworI2lmZGVmIENPTkZJR19BTUlHQQorCWlzX25vdF9hbWlnYSgyZikKKwlhbmR3CSMweDAwZmYsJWQwCisJb3JpdwkjMHgwMTAwLCVkMAorCW1vdmVsCSVwY0AoTChjdXN0b20pKSwlYTAKKwltb3ZldwklZDAsJWEwQChDVVNUT01CQVNFK0NfU0VSREFUKQorMToJbW92ZXcJJWEwQChDVVNUT01CQVNFK0NfU0VSREFUUiksJWQwCisJYW5kdwkjMHgyMDAwLCVkMAorCWplcQkxYgorCWpyYQlMKHNlcmlhbF9wdXRjX2RvbmUpCisyOgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDCisJaXNfbm90X21hYyg1ZikKKworI2lmZGVmIE1BQ19TRVJJQUxfREVCVUcKKworI2lmZGVmIE1BQ19VU0VfU0NDX0EKKwltb3ZlbAklcGNAKEwobWFjX3NjY2Jhc2UpKSwlYTEKKzM6CWJ0c3QJIzIsJWExQChtYWNfc2NjX2NoYV9hX2N0cmxfb2Zmc2V0KQorCWplcQkzYgorCW1vdmViCSVkMCwlYTFAKG1hY19zY2NfY2hhX2FfZGF0YV9vZmZzZXQpCisjZW5kaWYJLyogTUFDX1VTRV9TQ0NfQSAqLworCisjaWZkZWYgTUFDX1VTRV9TQ0NfQgorI2lmbmRlZiBNQUNfVVNFX1NDQ19BCS8qIExvYWQgbWFjX3NjY2Jhc2Ugb25seSBpZiBuZWVkZWQgKi8KKwltb3ZlbAklcGNAKEwobWFjX3NjY2Jhc2UpKSwlYTEKKyNlbmRpZgkvKiBNQUNfVVNFX1NDQ19BICovCis0OglidHN0CSMyLCVhMUAobWFjX3NjY19jaGFfYl9jdHJsX29mZnNldCkKKwlqZXEJNGIKKwltb3ZlYgklZDAsJWExQChtYWNfc2NjX2NoYV9iX2RhdGFfb2Zmc2V0KQorI2VuZGlmCS8qIE1BQ19VU0VfU0NDX0IgKi8KKworI2VuZGlmCS8qIE1BQ19TRVJJQUxfREVCVUcgKi8KKworCWpyYQlMKHNlcmlhbF9wdXRjX2RvbmUpCis1OgorI2VuZGlmCS8qIENPTkZJR19NQUMgKi8KKworI2lmZGVmIENPTkZJR19BVEFSSQorCWlzX25vdF9hdGFyaSg0ZikKKwltb3ZlbAklcGNAKEwoaW9iYXNlKSksJWExCisjaWYgZGVmaW5lZChVU0VfUFJJTlRFUikKKzM6CWJ0c3QJIzAsJWExQChMU1RNRlBfR1BJUCkKKwlqbmUJM2IKKwltb3ZlYgkjTFBTR19JT19CLCVhMUAoTFBTR19TRUxFQ1QpCisJbW92ZWIJJWQwLCVhMUAoTFBTR19XUklURSkKKwltb3ZlYgkjTFBTR19JT19BLCVhMUAoTFBTR19TRUxFQ1QpCisJbW92ZWIJJWExQChMUFNHX1JFQUQpLCVkMAorCWJjbHIJIzUsJWQwCisJbW92ZWIJJWQwLCVhMUAoTFBTR19XUklURSkKKwlub3AKKwlub3AKKwlic2V0CSM1LCVkMAorCW1vdmViCSVkMCwlYTFAKExQU0dfV1JJVEUpCisjZWxpZiBkZWZpbmVkKFVTRV9TQ0MpCiszOglidHN0CSMyLCVhMUAoTFNDQ19DVFJMKQorCWplcQkzYgorCW1vdmViCSVkMCwlYTFAKExTQ0NfREFUQSkKKyNlbGlmIGRlZmluZWQoVVNFX01GUCkKKzM6CWJ0c3QJIzcsJWExQChMTUZQX1RTUikKKwlqZXEJM2IKKwltb3ZlYgklZDAsJWExQChMTUZQX1VEUikKKyNlbmRpZgorCWpyYQlMKHNlcmlhbF9wdXRjX2RvbmUpCis0OgorI2VuZGlmCS8qIENPTkZJR19BVEFSSSAqLworCisjaWZkZWYgQ09ORklHX01WTUUxNDcKKwlpc19ub3RfbXZtZTE0NygyZikKKzE6CWJ0c3QJIzIsTTE0N19TQ0NfQ1RSTF9BCisJamVxCTFiCisJbW92ZWIJJWQwLE0xNDdfU0NDX0RBVEFfQQorCWpicmEJTChzZXJpYWxfcHV0Y19kb25lKQorMjoKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01WTUUxNngKKwlpc19ub3RfbXZtZTE2eCgyZikKKwkvKgorCSAqIElmIHRoZSBsb2FkZXIgZ2F2ZSB1cyBhIGJvYXJkIHR5cGUgdGhlbiB3ZSBjYW4gdXNlIHRoYXQgdG8KKwkgKiBzZWxlY3QgYW4gYXBwcm9wcmlhdGUgb3V0cHV0IHJvdXRpbmU7IG90aGVyd2lzZSB3ZSBqdXN0IHVzZQorCSAqIHRoZSBCdWcgY29kZS4gIElmIHdlIGhhZXYgdG8gdXNlIHRoZSBCdWcgdGhhdCBtZWFucyB0aGUgQnVnCisJICogd29ya3NwYWNlIGhhcyB0byBiZSB2YWxpZCwgd2hpY2ggbWVhbnMgdGhlIEJ1ZyBoYXMgdG8gdXNlCisJICogdGhlIFNSQU0sIHdoaWNoIGlzIG5vbi1zdGFuZGFyZC4KKwkgKi8KKwltb3ZlbWwJJWQwLSVkNy8lYTItJWE2LCVzcEAtCisJbW92ZWwJdm1lX2JyZHR5cGUsJWQxCisJamVxCTFmCQkJfCBObyB0YWcgLSB1c2UgdGhlIEJ1ZworCWNtcGkJI1ZNRV9UWVBFX01WTUUxNjIsJWQxCisJamVxCTZmCisJY21waQkjVk1FX1RZUEVfTVZNRTE3MiwlZDEKKwlqbmUJNWYKKwkvKiAxNjIvMTcyOyBpdCdzIGFuIFNDQyAqLworNjoJYnRzdAkjMixNMTYyX1NDQ19DVFJMX0EKKwlub3AKKwlub3AKKwlub3AKKwlqZXEJNmIKKwltb3ZlYgkjOCxNMTYyX1NDQ19DVFJMX0EKKwlub3AKKwlub3AKKwlub3AKKwltb3ZlYgklZDAsTTE2Ml9TQ0NfQ1RSTF9BCisJanJhCTNmCis1OgorCS8qIDE2Ni8xNjcvMTc3OyBpdCdzIGEgQ0QyNDAxICovCisJbW92ZWIJIzAsTTE2N19DWUNBUgorCW1vdmViCU0xNjdfQ1lJRVIsJWQyCisJbW92ZWIJIzB4MDIsTTE2N19DWUlFUgorNzoKKwlidHN0CSM1LE0xNjdfUENTQ0NUSUNSCisJamVxCTdiCisJbW92ZWIJTTE2N19QQ1RQSUFDS1IsJWQxCisJbW92ZWIJTTE2N19DWUxJQ1IsJWQxCisJamVxCThmCisJbW92ZWIJIzB4MDgsTTE2N19DWVRFT0lSCisJanJhCTdiCis4OgorCW1vdmViCSVkMCxNMTY3X0NZVERSCisJbW92ZWIJIzAsTTE2N19DWVRFT0lSCisJbW92ZWIJJWQyLE0xNjdfQ1lJRVIKKwlqcmEJM2YKKzE6CisJbW92ZWIJJWQwLCVzcEAtCisJdHJhcAkjMTUKKwkud29yZAkweDAwMjAJLyogVFJBUCAweDAyMCAqLworMzoKKwltb3ZlbWwJJXNwQCssJWQwLSVkNy8lYTItJWE2CisJamJyYQlMKHNlcmlhbF9wdXRjX2RvbmUpCisyOgorI2VuZGlmIC8qIENPTkZJR19NVk1FMTZ4ICovCisKKyNpZmRlZiBDT05GSUdfQlZNRTYwMDAKKwlpc19ub3RfYnZtZTYwMDAoMmYpCisJLyoKKwkgKiBUaGUgQlZNRTYwMDAgbWFjaGluZSBoYXMgYSBzZXJpYWwgcG9ydCAuLi4KKwkgKi8KKzE6CWJ0c3QJIzIsQlZNRV9TQ0NfQ1RSTF9BCisJamVxCTFiCisJbW92ZWIJJWQwLEJWTUVfU0NDX0RBVEFfQQorCWpicmEJTChzZXJpYWxfcHV0Y19kb25lKQorMjoKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NVTjNYCisJaXNfbm90X3N1bjN4KDJmKQorCW1vdmVsCSVkMCwtKCVzcCkKKwltb3ZlbAkweEZFRkUwMDE4LCVhMQorCWpic3IJKCVhMSkKKwlhZGRxCSM0LCVzcAorCWpicmEJTChzZXJpYWxfcHV0Y19kb25lKQorMjoKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1E0MAorCWlzX25vdF9xNDAoMmYpCisJdHN0LmwJJXBjQChMKHE0MF9kb19kZWJ1ZykpCS8qIG9ubHkgZGVidWcgaWYgcmVxdWVzdGVkICovCisJYmVxCTJmCisJbGVhCSVwY0AocTQwX21lbV9jcHRyKSwlYTEKKwltb3ZlLmwJJWExQCwlYTAKKwltb3ZlLmIJJWQwLCVhMEAKKwlhZGRxLmwJIzQsJWEwCisJbW92ZS5sCSVhMCwlYTFACisJamJyYSAgICBMKHNlcmlhbF9wdXRjX2RvbmUpCisyOgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVBPTExPCisJaXNfbm90X2Fwb2xsbygyZikKKwltb3ZsICAgICVwY0AoTChpb2Jhc2UpKSwlYTEKKwltb3ZlYgklZDAsJWExQChMVEhSQjApCisxOiAgICAgIG1vdmViICAgJWExQChMU1JCMCksJWQwCisJYW5kYgkjMHg0LCVkMAorCWJlcQkxYgorCWpicmEJTChzZXJpYWxfcHV0Y19kb25lKQorMjoKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hQMzAwCisJaXNfbm90X2hwMzAwKDNmKQorCW1vdmwgICAgJXBjQChMKGlvYmFzZSkpLCVhMQorCWFkZGwJJXBjQChMKHVhcnRiYXNlKSksJWExCisJbW92ZWwJJXBjQChMKHVhcnRfc2NvZGUpKSwlZDEJLyogQ2hlY2sgdGhlIHNjb2RlICovCisJam1pCTNmCQkJLyogVW5zZXQ/IEV4aXQgKi8KKwljbXBpCSMyNTYsJWQxCQkvKiBBUENJIHNjb2RlPyAqLworCWplcQkyZgorMTogICAgICBtb3ZlYiAgICVhMUAoRENBTFNSKSwlZDEJLyogT3V0cHV0IHRvIERDQSAqLworCWFuZGIJIzB4MjAsJWQxCisJYmVxCTFiCisJbW92ZWIJJWQwLCVhMUAoRENBREFUQSkKKwlqYnJhCUwoc2VyaWFsX3B1dGNfZG9uZSkKKzI6CW1vdmViCSVhMUAoQVBDSUxTUiksJWQxCS8qIE91dHB1dCB0byBBUENJICovCisJYW5kYgkjMHgyMCwlZDEKKwliZXEJMmIKKwltb3ZlYgklZDAsJWExQChBUENJREFUQSkKKwlqYnJhCUwoc2VyaWFsX3B1dGNfZG9uZSkKKzM6CisjZW5kaWYKKwkKK0woc2VyaWFsX3B1dGNfZG9uZSk6CitmdW5jX3JldHVybglzZXJpYWxfcHV0YworCisvKgorICogT3V0cHV0IGEgc3RyaW5nLgorICovCitmdW5jX3N0YXJ0CXB1dHMsJWQwLyVhMAorCisJbW92ZWwJQVJHMSwlYTAKKwlqcmEJMmYKKzE6CisjaWZkZWYgQ09OU09MRQorCWNvbnNvbGVfcHV0YwklZDAKKyNlbmRpZgorI2lmZGVmIFNFUklBTF9ERUJVRworCXNlcmlhbF9wdXRjCSVkMAorI2VuZGlmCisyOgltb3ZlYgklYTBAKywlZDAKKwlqbmUJMWIKKworZnVuY19yZXR1cm4JcHV0cworCisvKgorICogT3V0cHV0IG51bWJlciBpbiBoZXggbm90YXRpb24uCisgKi8KKworZnVuY19zdGFydAlwdXRuLCVkMC0lZDIKKworCXB1dGMJJyAnCisKKwltb3ZlbAlBUkcxLCVkMAorCW1vdmVxCSM3LCVkMQorMToJcm9sbAkjNCwlZDAKKwltb3ZlCSVkMCwlZDIKKwlhbmRiCSMweDBmLCVkMgorCWFkZGIJIycwJywlZDIKKwljbXBiCSMnOScsJWQyCisJamxzCTJmCisJYWRkYgkjJ0EnLSgnOScrMSksJWQyCisyOgorI2lmZGVmIENPTlNPTEUKKwljb25zb2xlX3B1dGMJJWQyCisjZW5kaWYKKyNpZmRlZiBTRVJJQUxfREVCVUcKKwlzZXJpYWxfcHV0YwklZDIKKyNlbmRpZgorCWRicmEJJWQxLDFiCisKK2Z1bmNfcmV0dXJuCXB1dG4KKworI2lmZGVmIENPTkZJR19NQUMKKy8qCisgKgltYWNfc2VyaWFsX3ByaW50CisgKgorICoJVGhpcyByb3V0aW5lIHRha2VzIGl0cyBwYXJhbWV0ZXJzIG9uIHRoZSBzdGFjay4gIEl0IHRoZW4KKyAqCXR1cm5zIGFyb3VuZCBhbmQgY2FsbHMgdGhlIGludGVybmFsIHJvdXRpbmUuICBUaGlzIHJvdXRpbmUKKyAqCWlzIHVzZWQgdW50aWwgdGhlIExpbnV4IGNvbnNvbGUgZHJpdmVyIGluaXRpYWxpemVzIGl0c2VsZi4KKyAqCisgKglUaGUgY2FsbGluZyBwYXJhbWV0ZXJzIGFyZToKKyAqCQl2b2lkIG1hY19zZXJpYWxfcHJpbnQoY29uc3QgY2hhciAqc3RyKTsKKyAqCisgKglUaGlzIHJvdXRpbmUgZG9lcyBOT1QgdW5kZXJzdGFuZCB2YXJpYWJsZSBhcmd1bWVudHMgb25seQorICoJc2ltcGxlIHN0cmluZ3MhCisgKi8KK0VOVFJZKG1hY19zZXJpYWxfcHJpbnQpCisJbW92ZW1sCSVkMC8lYTAsJXNwQC0KKyNpZiAxCisJbW92ZQklc3IsJXNwQC0KKwlvcmkJIzB4MDcwMCwlc3IKKyNlbmRpZgorCW1vdmVsCSVzcEAoMTApLCVhMAkJLyogZmV0Y2ggcGFyYW1ldGVyICovCisJanJhCTJmCisxOglzZXJpYWxfcHV0YwklZDAKKzI6CW1vdmViCSVhMEArLCVkMAorCWpuZQkxYgorI2lmIDEKKwltb3ZlCSVzcEArLCVzcgorI2VuZGlmCisJbW92ZW1sCSVzcEArLCVkMC8lYTAKKwlydHMKKyNlbmRpZiAvKiBDT05GSUdfTUFDICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKQorZnVuY19zdGFydAlzZXRfbGVkcywlZDAvJWEwCisJbW92ZWwJQVJHMSwlZDAKKyNpZmRlZiBDT05GSUdfSFAzMDAKKwlpc19ub3RfaHAzMDAoMWYpCisJbW92ZWwJJXBjQChMKGlvYmFzZSkpLCVhMAorCW1vdmViCSVkMCwlYTBAKDB4MWZmZmYpCisJanJhCTJmCisjZW5kaWYKKzE6CisjaWZkZWYgQ09ORklHX0FQT0xMTworCW1vdmVsICAgJXBjQChMKGlvYmFzZSkpLCVhMAorCWxzbGwgICAgIzgsJWQwCisJZW9ydyAgICAjMHhmZjAwLCVkMAorCW1vdmViCSVkMCwlYTBAKExDUFVDVFJMKQorI2VuZGlmCisyOgorZnVuY19yZXR1cm4Jc2V0X2xlZHMKKyNlbmRpZgorCisjaWZkZWYgQ09OU09MRQorLyoKKyAqCUZvciBjb250aW51aXR5LCBzZWUgdGhlIGRhdGEgYWxpZ25tZW50CisgKgl0byB3aGljaCB0aGlzIHN0cnVjdHVyZSBpcyB0aWVkLgorICovCisjZGVmaW5lIExjb25zb2xlX3N0cnVjdF9jdXJfY29sdW1uCTAKKyNkZWZpbmUgTGNvbnNvbGVfc3RydWN0X2N1cl9yb3cJCTQKKyNkZWZpbmUgTGNvbnNvbGVfc3RydWN0X251bV9jb2x1bW5zCTgKKyNkZWZpbmUgTGNvbnNvbGVfc3RydWN0X251bV9yb3dzCTEyCisjZGVmaW5lIExjb25zb2xlX3N0cnVjdF9sZWZ0X2VkZ2UJMTYKKyNkZWZpbmUgTGNvbnNvbGVfc3RydWN0X3Blbmd1aW5fcHV0YwkyMAorCitmdW5jX3N0YXJ0CWNvbnNvbGVfaW5pdCwlYTAtJWE0LyVkMC0lZDcKKwkvKgorCSAqCVNvbWUgb2YgdGhlIHJlZ2lzdGVyIHVzYWdlIHRoYXQgZm9sbG93cworCSAqCQlhMCA9IHBvaW50ZXIgdG8gYm9vdF9pbmZvCisJICoJCWExID0gcG9pbnRlciB0byBzY3JlZW4KKwkgKgkJYTIgPSBwb2ludGVyIHRvIExjb25zb2xlX2dsb2JhbHMKKwkgKgkJZDMgPSBwaXhlbCB3aWR0aCBvZiBzY3JlZW4KKwkgKgkJZDQgPSBwaXhlbCBoZWlnaHQgb2Ygc2NyZWVuCisJICoJCShkMyxkNCkgfj0gKHgseSkgb2YgYSBwb2ludCBqdXN0IGJlbG93CisJICoJCQlhbmQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBzY3JlZW4KKwkgKgkJCU5PVCBvbiB0aGUgc2NyZWVuIQorCSAqCQlkNSA9IG51bWJlciBvZiBieXRlcyBwZXIgc2NhbiBsaW5lCisJICoJCWQ2ID0gbnVtYmVyIG9mIGJ5dGVzIG9uIHRoZSBlbnRpcmUgc2NyZWVuCisJICovCisKKwlsZWEJJXBjQChMKGNvbnNvbGVfZ2xvYmFscykpLCVhMgorCW1vdmVsCSVwY0AoTChtYWNfdmlkZW9iYXNlKSksJWExCisJbW92ZWwJJXBjQChMKG1hY19yb3dieXRlcykpLCVkNQorCW1vdmVsCSVwY0AoTChtYWNfZGltZW5zaW9ucykpLCVkMwkvKiAtPiBsb3cgYnl0ZSAqLworCW1vdmVsCSVkMywlZDQKKwlzd2FwCSVkNAkJLyogLT4gaGlnaCBieXRlICovCisJYW5kbAkjMHhmZmZmLCVkMwkvKiBkMyA9IHNjcmVlbiB3aWR0aCBpbiBwaXhlbHMgKi8KKwlhbmRsCSMweGZmZmYsJWQ0CS8qIGQ0ID0gc2NyZWVuIGhlaWdodCBpbiBwaXhlbHMgKi8KKworCW1vdmVsCSVkNSwlZDYKK3wJc3VibAkjMjAsJWQ2CisJbXVsdWwJJWQ0LCVkNgkJLyogc2NhbiBsaW5lIGJ5dGVzIHggbnVtIHNjYW4gbGluZXMgKi8KKwlkaXZ1bAkjOCwlZDYJCS8qIHdlJ2xsIGNsZWFyIDggYnl0ZXMgYXQgYSB0aW1lICovCisJbW92ZXEJIy0xLCVkMAkJLyogTWFjX2JsYWNrICovCisJc3VicQkjMSwlZDYKKworTChjb25zb2xlX2NsZWFyX2xvb3ApOgorCW1vdmVsCSVkMCwlYTFAKworCW1vdmVsCSVkMCwlYTFAKworCWRicmEJJWQ2LEwoY29uc29sZV9jbGVhcl9sb29wKQorCisJLyogQ2FsY3VsYXRlIGZvbnQgc2l6ZSAqLworCisjaWYgICBkZWZpbmVkKEZPTlRfOHg4KSAmJiBkZWZpbmVkKENPTkZJR19GT05UXzh4OCkKKwlsZWEJJXBjQChmb250X3ZnYV84eDgpLCVhMAorI2VsaWYgZGVmaW5lZChGT05UXzh4MTYpICYmIGRlZmluZWQoQ09ORklHX0ZPTlRfOHgxNikKKwlsZWEJJXBjQChmb250X3ZnYV84eDE2KSwlYTAKKyNlbGlmIGRlZmluZWQoRk9OVF82eDExKSAmJiBkZWZpbmVkKENPTkZJR19GT05UXzZ4MTEpCisJbGVhCSVwY0AoZm9udF92Z2FfNngxMSksJWEwCisjZWxpZiBkZWZpbmVkKENPTkZJR19GT05UXzh4OCkgLyogZGVmYXVsdCAqLworCWxlYQklcGNAKGZvbnRfdmdhXzh4OCksJWEwCisjZWxzZSAvKiBubyBjb21waWxlZC1pbiBmb250ICovCisJbGVhCTAsJWEwCisjZW5kaWYKKworCS8qCisJICoJQXQgdGhpcyBwb2ludCB3ZSBtYWtlIGEgc2hpZnQgaW4gcmVnaXN0ZXIgdXNhZ2UKKwkgKglhMSA9IGFkZHJlc3Mgb2YgY29uc29sZV9mb250IHBvaW50ZXIKKwkgKi8KKwlsZWEJJXBjQChMKGNvbnNvbGVfZm9udCkpLCVhMQorCW1vdmVsCSVhMCwlYTFACS8qIHN0b3JlIHBvaW50ZXIgdG8gc3RydWN0IGZiY29uX2ZvbnRfZGVzYyBpbiBjb25zb2xlX2ZvbnQgKi8KKwl0c3RsCSVhMAorCWplcQkxZgorCWxlYQklcGNAKEwoY29uc29sZV9mb250X2RhdGEpKSwlYTQKKwltb3ZlbAklYTBAKEZPTlRfREVTQ19EQVRBKSwlZDAKKwlzdWJsCSNMKGNvbnNvbGVfZm9udCksJWExCisJYWRkbAklYTEsJWQwCisJbW92ZWwJJWQwLCVhNEAKKworCS8qCisJICoJQ2FsY3VsYXRlIGdsb2JhbCBtYXhzCisJICoJTm90ZSAtIHdlIGNhbiB1c2UgZWl0aGVyIGFuCisJICoJOCB4IDE2IG9yIDggeCA4IGNoYXJhY3RlciBmb250CisJICoJNiB4IDExIGFsc28gc3VwcG9ydGVkCisJICovCisJCS8qIEFTU0VSVDogYTAgPSBjb250ZW50cyBvZiBMY29uc29sZV9mb250ICovCisJbW92ZWwJJWQzLCVkMAkJCQkvKiBzY3JlZW4gd2lkdGggaW4gcGl4ZWxzICovCisJZGl2dWwJJWEwQChGT05UX0RFU0NfV0lEVEgpLCVkMAkvKiBkMCA9IG1heCBudW0gY2hhcnMgcGVyIHJvdyAqLworCisJbW92ZWwJJWQ0LCVkMQkJCQkvKiBzY3JlZW4gaGVpZ2h0IGluIHBpeGVscyAqLworCWRpdnVsCSVhMEAoRk9OVF9ERVNDX0hFSUdIVCksJWQxCS8qIGQxID0gbWF4IG51bSByb3dzICovCisKKwltb3ZlbAklZDAsJWEyQChMY29uc29sZV9zdHJ1Y3RfbnVtX2NvbHVtbnMpCisJbW92ZWwJJWQxLCVhMkAoTGNvbnNvbGVfc3RydWN0X251bV9yb3dzKQorCisJLyoKKwkgKglDbGVhciB0aGUgY3VycmVudCByb3cgYW5kIGNvbHVtbgorCSAqLworCWNscmwJJWEyQChMY29uc29sZV9zdHJ1Y3RfY3VyX2NvbHVtbikKKwljbHJsCSVhMkAoTGNvbnNvbGVfc3RydWN0X2N1cl9yb3cpCisJY2xybAklYTJAKExjb25zb2xlX3N0cnVjdF9sZWZ0X2VkZ2UpCisKKwkvKgorCSAqIEluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlCisJICovCisxOgorZnVuY19yZXR1cm4JY29uc29sZV9pbml0CisKK2Z1bmNfc3RhcnQJY29uc29sZV9wdXRfc3RhdHMsJWEwLyVkNworCS8qCisJICoJU29tZSBvZiB0aGUgcmVnaXN0ZXIgdXNhZ2UgdGhhdCBmb2xsb3dzCisJICoJCWEwID0gcG9pbnRlciB0byBib290X2luZm8KKwkgKgkJZDcgPSB2YWx1ZSBvZiBib290X2luZm8gZmllbGRzCisJICovCisJcHV0cwkiXG5NYWNMaW51eFxuXG4iCisKKyNpZmRlZiBTRVJJQUxfREVCVUcKKwlwdXRzCSIgdmlkYWRkcjoiCisJcHV0bgklcGNAKEwobWFjX3ZpZGVvYmFzZSkpCQkvKiB2aWRlbyBhZGRyLiAqLworCisJcHV0cwkiXG4gIF9zdGV4dDoiCisJbGVhCSVwY0AoX3N0ZXh0KSwlYTAKKwlwdXRuCSVhMAorCisJcHV0cwkiXG5ib290aW5mbzoiCisJbGVhCSVwY0AoX2VuZCksJWEwCisJcHV0bgklYTAKKworCXB1dHMJIlxuY3B1aWQ6IgorCXB1dG4JJXBjQChMKGNwdXR5cGUpKQorCXB1dGMJJ1xuJworCisjaWZkZWYgTUFDX1NFUklBTF9ERUJVRworCXB1dG4JJXBjQChMKG1hY19zY2NiYXNlKSkKKwlwdXRjCSdcbicKKyNlbmRpZgorIyAgaWYgZGVmaW5lZChNTVVfUFJJTlQpCisJamJzcgltbXVfcHJpbnRfbWFjaGluZV9jcHVfdHlwZXMKKyMgIGVuZGlmIC8qIE1NVV9QUklOVCAqLworI2VuZGlmIC8qIFNFUklBTF9ERUJVRyAqLworCitmdW5jX3JldHVybgljb25zb2xlX3B1dF9zdGF0cworCisjaWZkZWYgQ09OU09MRV9QRU5HVUlOCitmdW5jX3N0YXJ0CWNvbnNvbGVfcHV0X3Blbmd1aW4sJWEwLSVhMS8lZDAtJWQ3CisJLyoKKwkgKglHZXQgJ3RoYXRfcGVuZ3Vpbicgb250byB0aGUgc2NyZWVuIGluIHRoZSB1cHBlciByaWdodCBjb3JuZXIKKwkgKglwZW5ndWluIGlzIDY0IHggNzQgcGl4ZWxzLCBhbGlnbiBhZ2FpbnN0IHJpZ2h0IGVkZ2Ugb2Ygc2NyZWVuCisJICovCisJbGVhCSVwY0AoTChtYWNfZGltZW5zaW9ucykpLCVhMAorCW1vdmVsCSVhMEAsJWQwCisJYW5kaWwJIzB4ZmZmZiwlZDAKKwlzdWJpbAkjNjQsJWQwCQkvKiBzbnVnIHVwIGFnYWluc3QgdGhlIHJpZ2h0IGVkZ2UgKi8KKwljbHJsCSVkMQkJLyogc3RhcnQgYXQgdGhlIHRvcCAqLworCW1vdmVsCSM3MywlZDcKKwlsZWEJJXBjQChMKHRoYXRfcGVuZ3VpbikpLCVhMQorTChjb25zb2xlX3Blbmd1aW5fcm93KToKKwltb3ZlbAkjMzEsJWQ2CitMKGNvbnNvbGVfcGVuZ3Vpbl9waXhlbF9wYWlyKToKKwltb3ZlYgklYTFALCVkMgorCWxzcmIJIzQsJWQyCisJY29uc29sZV9wbG90X3BpeGVsICVkMCwlZDEsJWQyCisJYWRkcQkjMSwlZDAKKwltb3ZlYgklYTFAKywlZDIKKwljb25zb2xlX3Bsb3RfcGl4ZWwgJWQwLCVkMSwlZDIKKwlhZGRxCSMxLCVkMAorCWRicmEJJWQ2LEwoY29uc29sZV9wZW5ndWluX3BpeGVsX3BhaXIpCisKKwlzdWJpbAkjNjQsJWQwCisJYWRkcQkjMSwlZDEKKwlkYnJhCSVkNyxMKGNvbnNvbGVfcGVuZ3Vpbl9yb3cpCisKK2Z1bmNfcmV0dXJuCWNvbnNvbGVfcHV0X3Blbmd1aW4KKworLyogaW5jbHVkZSBwZW5ndWluIGJpdG1hcCAqLworTCh0aGF0X3Blbmd1aW4pOgorI2luY2x1ZGUgIi4uL21hYy9tYWNfcGVuZ3Vpbi5TIgorI2VuZGlmCisKKwkvKgorCSAqIENhbGN1bGF0ZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcworCSAqCW91dHB1dAlhMSA9IGRlc3QKKwkgKgkJYTIgPSBzb3VyY2UKKwkgKi8KKworZnVuY19zdGFydAljb25zb2xlX3Njcm9sbCwlYTAtJWE0LyVkMC0lZDcKKwlsZWEJJXBjQChMKG1hY192aWRlb2Jhc2UpKSwlYTAKKwltb3ZlbAklYTBALCVhMQorCW1vdmVsCSVhMSwlYTIKKwlsZWEJJXBjQChMKG1hY19yb3dieXRlcykpLCVhMAorCW1vdmVsCSVhMEAsJWQ1CisJbW92ZWwJJXBjQChMKGNvbnNvbGVfZm9udCkpLCVhMAorCXRzdGwJJWEwCisJamVxCTFmCisJbXVsdWwJJWEwQChGT05UX0RFU0NfSEVJR0hUKSwlZDUJLyogYWNjb3VudCBmb3IgIyBzY2FuIGxpbmVzIHBlciBjaGFyYWN0ZXIgKi8KKwlhZGRhbAklZDUsJWEyCisKKwkvKgorCSAqIEdldCBkaW1lbnNpb25zCisJICovCisJbGVhCSVwY0AoTChtYWNfZGltZW5zaW9ucykpLCVhMAorCW1vdmVsCSVhMEAsJWQzCisJbW92ZWwJJWQzLCVkNAorCXN3YXAJJWQ0CisJYW5kbAkjMHhmZmZmLCVkMwkvKiBkMyA9IHNjcmVlbiB3aWR0aCBpbiBwaXhlbHMgKi8KKwlhbmRsCSMweGZmZmYsJWQ0CS8qIGQ0ID0gc2NyZWVuIGhlaWdodCBpbiBwaXhlbHMgKi8KKworCS8qCisJICogQ2FsY3VsYXRlIG51bWJlciBvZiBieXRlcyB0byBtb3ZlCisJICovCisJbGVhCSVwY0AoTChtYWNfcm93Ynl0ZXMpKSwlYTAKKwltb3ZlbAklYTBALCVkNgorCW1vdmVsCSVwY0AoTChjb25zb2xlX2ZvbnQpKSwlYTAKKwlzdWJsCSVhMEAoRk9OVF9ERVNDX0hFSUdIVCksJWQ0CS8qIHdlJ3JlIG5vdCBzY3JvbGxpbmcgdGhlIHRvcCByb3chICovCisJbXVsdWwJJWQ0LCVkNgkJLyogc2NhbiBsaW5lIGJ5dGVzIHggbnVtIHNjYW4gbGluZXMgKi8KKwlkaXZ1bAkjMzIsJWQ2CQkvKiB3ZSdsbCBtb3ZlIDggbG9uZ3MgYXQgYSB0aW1lICovCisJc3VicQkjMSwlZDYKKworTChjb25zb2xlX3Njcm9sbF9sb29wKToKKwltb3ZlbAklYTJAKywlYTFAKworCW1vdmVsCSVhMkArLCVhMUArCisJbW92ZWwJJWEyQCssJWExQCsKKwltb3ZlbAklYTJAKywlYTFAKworCW1vdmVsCSVhMkArLCVhMUArCisJbW92ZWwJJWEyQCssJWExQCsKKwltb3ZlbAklYTJAKywlYTFAKworCW1vdmVsCSVhMkArLCVhMUArCisJZGJyYQklZDYsTChjb25zb2xlX3Njcm9sbF9sb29wKQorCisJbGVhCSVwY0AoTChtYWNfcm93Ynl0ZXMpKSwlYTAKKwltb3ZlbAklYTBALCVkNgorCW1vdmVsCSVwY0AoTChjb25zb2xlX2ZvbnQpKSwlYTAKKwltdWx1bAklYTBAKEZPTlRfREVTQ19IRUlHSFQpLCVkNgkvKiBzY2FuIGxpbmUgYnl0ZXMgeCBmb250IGhlaWdodCAqLworCWRpdnVsCSMzMiwlZDYJCQkvKiB3ZSdsbCBtb3ZlIDggd29yZHMgYXQgYSB0aW1lICovCisJc3VicQkjMSwlZDYKKworCW1vdmVxCSMtMSwlZDAKK0woY29uc29sZV9zY3JvbGxfY2xlYXJfbG9vcCk6CisJbW92ZWwJJWQwLCVhMUArCisJbW92ZWwJJWQwLCVhMUArCisJbW92ZWwJJWQwLCVhMUArCisJbW92ZWwJJWQwLCVhMUArCisJbW92ZWwJJWQwLCVhMUArCisJbW92ZWwJJWQwLCVhMUArCisJbW92ZWwJJWQwLCVhMUArCisJbW92ZWwJJWQwLCVhMUArCisJZGJyYQklZDYsTChjb25zb2xlX3Njcm9sbF9jbGVhcl9sb29wKQorCisxOgorZnVuY19yZXR1cm4JY29uc29sZV9zY3JvbGwKKworCitmdW5jX3N0YXJ0CWNvbnNvbGVfcHV0YywlYTAvJWExLyVkMC0lZDcKKworCWlzX25vdF9tYWMoTChjb25zb2xlX2V4aXQpKQorCXRzdGwJJXBjQChMKGNvbnNvbGVfZm9udCkpCisJamVxCUwoY29uc29sZV9leGl0KQorCisJLyogT3V0cHV0IGNoYXJhY3RlciBpbiBkNyBvbiBjb25zb2xlLgorCSAqLworCW1vdmVsCUFSRzEsJWQ3CisJY21waWIJIydcbicsJWQ3CisJamJuZQkxZgorCisJLyogQSBsaXR0bGUgc2FmZSByZWN1cnNpb24gaXMgZ29vZCBmb3IgdGhlIHNvdWwgKi8KKwljb25zb2xlX3B1dGMJIydccicKKzE6CisJbGVhCSVwY0AoTChjb25zb2xlX2dsb2JhbHMpKSwlYTAKKworCWNtcGliCSMxMCwlZDcKKwlqbmUJTChjb25zb2xlX25vdF9sZikKKwltb3ZlbAklYTBAKExjb25zb2xlX3N0cnVjdF9jdXJfcm93KSwlZDAKKwlhZGRpbAkjMSwlZDAKKwltb3ZlbAklZDAsJWEwQChMY29uc29sZV9zdHJ1Y3RfY3VyX3JvdykKKwltb3ZlbAklYTBAKExjb25zb2xlX3N0cnVjdF9udW1fcm93cyksJWQxCisJY21wbAklZDEsJWQwCisJamNzCTFmCisJc3ViaWwJIzEsJWQwCisJbW92ZWwJJWQwLCVhMEAoTGNvbnNvbGVfc3RydWN0X2N1cl9yb3cpCisJY29uc29sZV9zY3JvbGwKKzE6CisJanJhCUwoY29uc29sZV9leGl0KQorCitMKGNvbnNvbGVfbm90X2xmKToKKwljbXBpYgkjMTMsJWQ3CisJam5lCUwoY29uc29sZV9ub3RfY3IpCisJY2xybAklYTBAKExjb25zb2xlX3N0cnVjdF9jdXJfY29sdW1uKQorCWpyYQlMKGNvbnNvbGVfZXhpdCkKKworTChjb25zb2xlX25vdF9jcik6CisJY21waWIJIzEsJWQ3CisJam5lCUwoY29uc29sZV9ub3RfaG9tZSkKKwljbHJsCSVhMEAoTGNvbnNvbGVfc3RydWN0X2N1cl9yb3cpCisJY2xybAklYTBAKExjb25zb2xlX3N0cnVjdF9jdXJfY29sdW1uKQorCWpyYQlMKGNvbnNvbGVfZXhpdCkKKworLyoKKyAqCUF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IHRoZSAlZDcgY2hhcmFjdGVyIGlzIGdvaW5nIHRvIGJlCisgKglyZW5kZXJlZCBvbiB0aGUgc2NyZWVuLiAgUmVnaXN0ZXIgdXNhZ2UgaXMgLQorICoJCWEwID0gcG9pbnRlciB0byBjb25zb2xlIGdsb2JhbHMKKyAqCQlhMSA9IGZvbnQgZGF0YQorICoJCWQwID0gY3Vyc29yIGNvbHVtbgorICoJCWQxID0gY3Vyc29yIHJvdyB0byBkcmF3IHRoZSBjaGFyYWN0ZXIKKyAqCQlkNyA9IGNoYXJhY3RlciBudW1iZXIKKyAqLworTChjb25zb2xlX25vdF9ob21lKToKKwltb3ZlbAklYTBAKExjb25zb2xlX3N0cnVjdF9jdXJfY29sdW1uKSwlZDAKKwlhZGRxbAkjMSwlYTBAKExjb25zb2xlX3N0cnVjdF9jdXJfY29sdW1uKQorCW1vdmVsCSVhMEAoTGNvbnNvbGVfc3RydWN0X251bV9jb2x1bW5zKSwlZDEKKwljbXBsCSVkMSwlZDAKKwlqY3MJMWYKKwljb25zb2xlX3B1dGMJIydcbicJLyogcmVjdXJzaW9uIGlzIE9LISAqLworMToKKwltb3ZlbAklYTBAKExjb25zb2xlX3N0cnVjdF9jdXJfcm93KSwlZDEKKworCS8qCisJICoJQXQgdGhpcyBwb2ludCB3ZSBtYWtlIGEgc2hpZnQgaW4gcmVnaXN0ZXIgdXNhZ2UKKwkgKglhMCA9IGFkZHJlc3Mgb2YgcG9pbnRlciB0byBmb250IGRhdGEgKGZiY29uX2ZvbnRfZGVzYykKKwkgKi8KKwltb3ZlbAklcGNAKEwoY29uc29sZV9mb250KSksJWEwCisJbW92ZWwJJXBjQChMKGNvbnNvbGVfZm9udF9kYXRhKSksJWExCS8qIExvYWQgZmJjb25fZm9udF9kZXNjLmRhdGEgaW50byBhMSAqLworCWFuZGwJIzB4MDAwMDAwZmYsJWQ3CisJCS8qIEFTU0VSVDogYTAgPSBjb250ZW50cyBvZiBMY29uc29sZV9mb250ICovCisJbXVsdWwJJWEwQChGT05UX0RFU0NfSEVJR0hUKSwlZDcJLyogZDcgPSBpbmRleCBpbnRvIGZvbnQgZGF0YSAqLworCWFkZGwJJWQ3LCVhMQkJCS8qIGExID0gcG9pbnRzIHRvIGNoYXIgaW1hZ2UgKi8KKworCS8qCisJICoJQXQgdGhpcyBwb2ludCB3ZSBtYWtlIGEgc2hpZnQgaW4gcmVnaXN0ZXIgdXNhZ2UKKwkgKglkMCA9IHBpeGVsIGNvb3JkaW5hdGUsIHgKKwkgKglkMSA9IHBpeGVsIGNvb3JkaW5hdGUsIHkKKwkgKglkMiA9IChiaXQgMCkgMS8wIGZvciB3aGl0ZS9ibGFjayAoISkgcGl4ZWwgb24gc2NyZWVuCisJICoJZDMgPSBmb250IHNjYW4gbGluZSBkYXRhICg4IHBpeGVscykKKwkgKglkNiA9IGNvdW50IGRvd24gZm9yIHRoZSBmb250J3MgcGl4ZWwgd2lkdGggKDgpCisJICoJZDcgPSBjb3VudCBkb3duIGZvciB0aGUgZm9udCdzIHBpeGVsIGNvdW50IGluIGhlaWdodAorCSAqLworCQkvKiBBU1NFUlQ6IGEwID0gY29udGVudHMgb2YgTGNvbnNvbGVfZm9udCAqLworCW11bHVsCSVhMEAoRk9OVF9ERVNDX1dJRFRIKSwlZDAKKwltdWx1bAklYTBAKEZPTlRfREVTQ19IRUlHSFQpLCVkMQorCW1vdmVsCSVhMEAoRk9OVF9ERVNDX0hFSUdIVCksJWQ3CS8qIExvYWQgZmJjb25fZm9udF9kZXNjLmhlaWdodCBpbnRvIGQ3ICovCisJc3VicQkjMSwlZDcKK0woY29uc29sZV9yZWFkX2NoYXJfc2NhbmxpbmUpOgorCW1vdmViCSVhMUArLCVkMworCisJCS8qIEFTU0VSVDogYTAgPSBjb250ZW50cyBvZiBMY29uc29sZV9mb250ICovCisJbW92ZWwJJWEwQChGT05UX0RFU0NfV0lEVEgpLCVkNgkvKiBMb2FkIGZiY29uX2ZvbnRfZGVzYy53aWR0aCBpbnRvIGQ2ICovCisJc3VicWwJIzEsJWQ2CisKK0woY29uc29sZV9kb19mb250X3NjYW5saW5lKToKKwlsc2xiCSMxLCVkMworCXNjc2IJJWQyCQkvKiBjb252ZXJ0IDEgYml0IGludG8gYSBieXRlICovCisJY29uc29sZV9wbG90X3BpeGVsICVkMCwlZDEsJWQyCisJYWRkcQkjMSwlZDAKKwlkYnJhCSVkNixMKGNvbnNvbGVfZG9fZm9udF9zY2FubGluZSkKKworCQkvKiBBU1NFUlQ6IGEwID0gY29udGVudHMgb2YgTGNvbnNvbGVfZm9udCAqLworCXN1YmwJJWEwQChGT05UX0RFU0NfV0lEVEgpLCVkMAorCWFkZHEJIzEsJWQxCisJZGJyYQklZDcsTChjb25zb2xlX3JlYWRfY2hhcl9zY2FubGluZSkKKworTChjb25zb2xlX2V4aXQpOgorZnVuY19yZXR1cm4JY29uc29sZV9wdXRjCisKKwkvKgorCSAqCUlucHV0OgorCSAqCQlkMCA9IHggY29vcmRpbmF0ZQorCSAqCQlkMSA9IHkgY29vcmRpbmF0ZQorCSAqCQlkMiA9IChiaXQgMCkgMS8wIGZvciB3aGl0ZS9ibGFjayAoISkKKwkgKglBbGwgcmVnaXN0ZXJzIGFyZSBwcmVzZXJ2ZWQKKwkgKi8KK2Z1bmNfc3RhcnQJY29uc29sZV9wbG90X3BpeGVsLCVhMC0lYTEvJWQwLSVkNAorCisJbW92ZWwJJXBjQChMKG1hY192aWRlb2Jhc2UpKSwlYTEKKwltb3ZlbAklcGNAKEwobWFjX3ZpZGVvZGVwdGgpKSwlZDMKKwltb3ZlbAlBUkcxLCVkMAorCW1vdmVsCUFSRzIsJWQxCisJbXVsdWwJJXBjQChMKG1hY19yb3dieXRlcykpLCVkMQorCW1vdmVsCUFSRzMsJWQyCisKKwkvKgorCSAqCVJlZ2lzdGVyIHVzYWdlOgorCSAqCQlkMCA9IHggY29vcmQgYmVjb21lcyBieXRlIG9mZnNldCBpbnRvIGZyYW1lIGJ1ZmZlcgorCSAqCQlkMSA9IHkgY29vcmQKKwkgKgkJZDIgPSBibGFjayBvciB3aGl0ZSAoMC8xKQorCSAqCQlkMyA9IHZpZGVvIGRlcHRoCisJICoJCWQ0ID0gdGVtcCBvZiB4IChkMCkgZm9yIG1hbnkgYml0IGRlcHRocworCSAqLworTCh0ZXN0XzFiaXQpOgorCWNtcGIJIzEsJWQzCisJamJuZQlMKHRlc3RfMmJpdCkKKwltb3ZlbAklZDAsJWQ0CQkvKiB3ZSBuZWVkIHRoZSBsb3cgb3JkZXIgMyBiaXRzISAqLworCWRpdnVsCSM4LCVkMAorCWFkZGFsCSVkMCwlYTEKKwlhZGRhbAklZDEsJWExCisJYW5kYgkjNywlZDQKKwllb3JiCSM3LCVkNAkJLyogcmV2ZXJzZSB0aGUgeC1jb29yZGluYXRlIHcvIHNjcmVlbi1iaXQgIyAqLworCWFuZGIJIzEsJWQyCisJamJuZQlMKHdoaXRlXzEpCisJYnNldGIJJWQ0LCVhMUAKKwlqYnJhCUwoY29uc29sZV9wbG90X3BpeGVsX2V4aXQpCitMKHdoaXRlXzEpOgorCWJjbHJiCSVkNCwlYTFACisJamJyYQlMKGNvbnNvbGVfcGxvdF9waXhlbF9leGl0KQorCitMKHRlc3RfMmJpdCk6CisJY21wYgkjMiwlZDMKKwlqYm5lCUwodGVzdF80Yml0KQorCW1vdmVsCSVkMCwlZDQJCS8qIHdlIG5lZWQgdGhlIGxvdyBvcmRlciAyIGJpdHMhICovCisJZGl2dWwJIzQsJWQwCisJYWRkYWwJJWQwLCVhMQorCWFkZGFsCSVkMSwlYTEKKwlhbmRiCSMzLCVkNAorCWVvcmIJIzMsJWQ0CQkvKiByZXZlcnNlIHRoZSB4LWNvb3JkaW5hdGUgdy8gc2NyZWVuLWJpdCAjICovCisJbHNsbAkjMSwlZDQJCS8qICEgKi8KKwlhbmRiCSMxLCVkMgorCWpibmUJTCh3aGl0ZV8yKQorCWJzZXRiCSVkNCwlYTFACisJYWRkcQkjMSwlZDQKKwlic2V0YgklZDQsJWExQAorCWpicmEJTChjb25zb2xlX3Bsb3RfcGl4ZWxfZXhpdCkKK0wod2hpdGVfMik6CisJYmNscmIJJWQ0LCVhMUAKKwlhZGRxCSMxLCVkNAorCWJjbHJiCSVkNCwlYTFACisJamJyYQlMKGNvbnNvbGVfcGxvdF9waXhlbF9leGl0KQorCitMKHRlc3RfNGJpdCk6CisJY21wYgkjNCwlZDMKKwlqYm5lCUwodGVzdF84Yml0KQorCW1vdmVsCSVkMCwlZDQJCS8qIHdlIG5lZWQgdGhlIGxvdyBvcmRlciBiaXQhICovCisJZGl2dWwJIzIsJWQwCisJYWRkYWwJJWQwLCVhMQorCWFkZGFsCSVkMSwlYTEKKwlhbmRiCSMxLCVkNAorCWVvcmIJIzEsJWQ0CisJbHNsbAkjMiwlZDQJCS8qICEgKi8KKwlhbmRiCSMxLCVkMgorCWpibmUJTCh3aGl0ZV80KQorCWJzZXRiCSVkNCwlYTFACisJYWRkcQkjMSwlZDQKKwlic2V0YgklZDQsJWExQAorCWFkZHEJIzEsJWQ0CisJYnNldGIJJWQ0LCVhMUAKKwlhZGRxCSMxLCVkNAorCWJzZXRiCSVkNCwlYTFACisJamJyYQlMKGNvbnNvbGVfcGxvdF9waXhlbF9leGl0KQorTCh3aGl0ZV80KToKKwliY2xyYgklZDQsJWExQAorCWFkZHEJIzEsJWQ0CisJYmNscmIJJWQ0LCVhMUAKKwlhZGRxCSMxLCVkNAorCWJjbHJiCSVkNCwlYTFACisJYWRkcQkjMSwlZDQKKwliY2xyYgklZDQsJWExQAorCWpicmEJTChjb25zb2xlX3Bsb3RfcGl4ZWxfZXhpdCkKKworTCh0ZXN0XzhiaXQpOgorCWNtcGIJIzgsJWQzCisJamJuZQlMKHRlc3RfMTZiaXQpCisJYWRkYWwJJWQwLCVhMQorCWFkZGFsCSVkMSwlYTEKKwlhbmRiCSMxLCVkMgorCWpibmUJTCh3aGl0ZV84KQorCW1vdmViCSMweGZmLCVhMUAKKwlqYnJhCUwoY29uc29sZV9wbG90X3BpeGVsX2V4aXQpCitMKHdoaXRlXzgpOgorCWNscmIJJWExQAorCWpicmEJTChjb25zb2xlX3Bsb3RfcGl4ZWxfZXhpdCkKKworTCh0ZXN0XzE2Yml0KToKKwljbXBiCSMxNiwlZDMKKwlqYm5lCUwoY29uc29sZV9wbG90X3BpeGVsX2V4aXQpCisJYWRkYWwJJWQwLCVhMQorCWFkZGFsCSVkMCwlYTEKKwlhZGRhbAklZDEsJWExCisJYW5kYgkjMSwlZDIKKwlqYm5lCUwod2hpdGVfMTYpCisJY2xydwklYTFACisJamJyYQlMKGNvbnNvbGVfcGxvdF9waXhlbF9leGl0KQorTCh3aGl0ZV8xNik6CisJbW92ZXcJIzB4MGZmZiwlYTFACisJamJyYQlMKGNvbnNvbGVfcGxvdF9waXhlbF9leGl0KQorCitMKGNvbnNvbGVfcGxvdF9waXhlbF9leGl0KToKK2Z1bmNfcmV0dXJuCWNvbnNvbGVfcGxvdF9waXhlbAorI2VuZGlmIC8qIENPTlNPTEUgKi8KKworI2lmIDAKKy8qCisgKiBUaGlzIGlzIHNvbWUgb2xkIGNvZGUgbHlpbmcgYXJvdW5kLiAgSSBkb24ndCBiZWxpZXZlCisgKiBpdCdzIHVzZWQgb3IgaW1wb3J0YW50IGFueW1vcmUuICBNeSBndWVzcyBpcyBpdCBjb250cmlidXRlZAorICogdG8gZ2V0dGluZyB0byB0aGlzIHBvaW50LCBidXQgaXQncyBkb25lIGZvciBub3cuCisgKiBJdCB3YXMgc3RpbGwgaW4gdGhlIDIuMS43NyBoZWFkLlMsIHNvIGl0J3Mgc3RpbGwgaGVyZS4KKyAqIChBbmQgc3RpbGwgbm90IHVzZWQhKQorICovCitMKHNob3d0ZXN0KToKKwltb3ZlbWwJJWEwLyVkNywlc3BALQorCXB1dHMJIkE9IgorCXB1dG4JJWExCisKKwkubG9uZwkweGYwMTE5ZjE1CQl8IHB0ZXN0cgkjNSwlYTFALCM3LCVhMAorCisJcHV0cwkiREE9IgorCXB1dG4JJWEwCisKKwlwdXRzCSJEPSIKKwlwdXRuCSVhMEAKKworCXB1dHMJIlM9IgorCWxlYQklcGNAKEwobW11KSksJWEwCisJLmxvbmcJMHhmMDEwNjIwMAkJfCBwbW92ZQkJJXBzciwlYTBACisJY2xybAklZDcKKwltb3ZldwklYTBALCVkNworCXB1dG4JJWQ3CisKKwlwdXRjCSdcbicKKwltb3ZlbWwJJXNwQCssJWEwLyVkNworCXJ0cworI2VuZGlmCS8qIDAgKi8KKworX19JTklUREFUQQorCS5hbGlnbgk0CisKKyNpZiBkZWZpbmVkKENPTkZJR19BVEFSSSkgfHwgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKQorTChjdXN0b20pOgorTChpb2Jhc2UpOgorCS5sb25nIDAKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05TT0xFKQorTChjb25zb2xlX2dsb2JhbHMpOgorCS5sb25nCTAJCS8qIGN1cnNvciBjb2x1bW4gKi8KKwkubG9uZwkwCQkvKiBjdXJzb3Igcm93ICovCisJLmxvbmcJMAkJLyogbWF4IG51bSBjb2x1bW5zICovCisJLmxvbmcJMAkJLyogbWF4IG51bSByb3dzICovCisJLmxvbmcJMAkJLyogbGVmdCBlZGdlICovCisJLmxvbmcJMAkJLyogbWFjIHB1dGMgKi8KK0woY29uc29sZV9mb250KToKKwkubG9uZwkwCQkvKiBwb2ludGVyIHRvIGNvbnNvbGUgZm9udCAoc3RydWN0IGZvbnRfZGVzYykgKi8KK0woY29uc29sZV9mb250X2RhdGEpOgorCS5sb25nCTAJCS8qIHBvaW50ZXIgdG8gY29uc29sZSBmb250IGRhdGEgKi8KKyNlbmRpZiAvKiBDT05TT0xFICovCisKKyNpZiBkZWZpbmVkKE1NVV9QUklOVCkKK0wobW11X3ByaW50X2RhdGEpOgorCS5sb25nCTAJCS8qIHZhbGlkIGZsYWcgKi8KKwkubG9uZwkwCQkvKiBzdGFydCBsb2dpY2FsICovCisJLmxvbmcJMAkJLyogbmV4dCBsb2dpY2FsICovCisJLmxvbmcJMAkJLyogc3RhcnQgcGh5c2ljYWwgKi8KKwkubG9uZwkwCQkvKiBuZXh0IHBoeXNpY2FsICovCisjZW5kaWYgLyogTU1VX1BSSU5UICovCisKK0woY3B1dHlwZSk6CisJLmxvbmcJMAorTChtbXVfY2FjaGVkX3BvaW50ZXJfdGFibGVzKToKKwkubG9uZwkwCitMKG1tdV9udW1fcG9pbnRlcl90YWJsZXMpOgorCS5sb25nCTAKK0wocGh5c19rZXJuZWxfc3RhcnQpOgorCS5sb25nCTAKK0woa2VybmVsX2VuZCk6CisJLmxvbmcJMAorTChtZW1vcnlfc3RhcnQpOgorCS5sb25nCTAKK0woa2VybmVsX3BnZGlyX3B0cik6CisJLmxvbmcJMAorTCh0ZW1wX21tYXBfbWVtKToKKwkubG9uZwkwCisKKyNpZiBkZWZpbmVkIChDT05GSUdfTVZNRTE0NykKK00xNDdfU0NDX0NUUkxfQSA9IDB4ZmZmZTMwMDIKK00xNDdfU0NDX0RBVEFfQSA9IDB4ZmZmZTMwMDMKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoQ09ORklHX01WTUUxNngpCitNMTYyX1NDQ19DVFJMX0EgPSAweGZmZjQ1MDA1CitNMTY3X0NZQ0FSID0gMHhmZmY0NTBlZQorTTE2N19DWUlFUiA9IDB4ZmZmNDUwMTEKK00xNjdfQ1lMSUNSID0gMHhmZmY0NTAyNgorTTE2N19DWVRFT0lSID0gMHhmZmY0NTA4NQorTTE2N19DWVREUiA9IDB4ZmZmNDUwZjgKK00xNjdfUENTQ0NUSUNSID0gMHhmZmY0MjAxZQorTTE2N19QQ1RQSUFDS1IgPSAweGZmZjQyMDI1CisjZW5kaWYKKworI2lmIGRlZmluZWQgKENPTkZJR19CVk1FNjAwMCkKK0JWTUVfU0NDX0NUUkxfQQk9IDB4ZmZiMDAwMGIKK0JWTUVfU0NDX0RBVEFfQQk9IDB4ZmZiMDAwMGYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfTUFDKQorTChtYWNfYm9vdGVyX2RhdGEpOgorCS5sb25nCTAKK0wobWFjX3ZpZGVvYmFzZSk6CisJLmxvbmcJMAorTChtYWNfdmlkZW9kZXB0aCk6CisJLmxvbmcJMAorTChtYWNfZGltZW5zaW9ucyk6CisJLmxvbmcJMAorTChtYWNfcm93Ynl0ZXMpOgorCS5sb25nCTAKKyNpZmRlZiBNQUNfU0VSSUFMX0RFQlVHCitMKG1hY19zY2NiYXNlKToKKwkubG9uZwkwCisjZW5kaWYgLyogTUFDX1NFUklBTF9ERUJVRyAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChDT05GSUdfQVBPTExPKQorTFNSQjAgICAgICAgID0gMHgxMDQxMgorTFRIUkIwICAgICAgID0gMHgxMDQxNgorTENQVUNUUkwgICAgID0gMHgxMDEwMAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19IUDMwMCkKK0RDQURBVEEJICAgICA9IDB4MTEKK0RDQUxTUgkgICAgID0gMHgxYgorQVBDSURBVEEgICAgID0gMHgwMAorQVBDSUxTUiAgICAgID0gMHgxNAorTCh1YXJ0YmFzZSk6CisJLmxvbmcJMAorTCh1YXJ0X3Njb2RlKToKKwkubG9uZwktMQorI2VuZGlmCisKK19fRklOSVQKKwkuZGF0YQorCS5hbGlnbgk0CisKK2F2YWlsbWVtOgorCS5sb25nCTAKK202OGtfcGd0YWJsZV9jYWNoZW1vZGU6CisJLmxvbmcJMAorbTY4a19zdXBlcnZpc29yX2NhY2hlbW9kZToKKwkubG9uZwkwCisjaWYgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkKK212bWVfYmRpZDoKKwkubG9uZwkwLDAsMCwwLDAsMCwwLDAKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1E0MCkKK3E0MF9tZW1fY3B0cjoKKwkubG9uZwkwCitMKHE0MF9kb19kZWJ1Zyk6CisJLmxvbmcJMAorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL2ludHMuYyBiL2FyY2gvbTY4ay9rZXJuZWwvaW50cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNGQzMjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsva2VybmVsL2ludHMuYwpAQCAtMCwwICsxLDI4MSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvbTY4ay9rZXJuZWwvaW50cy5jIC0tIExpbnV4L202OGsgZ2VuZXJhbCBpbnRlcnJ1cHQgaGFuZGxpbmcgY29kZQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAwNy8wMy85NjogVGltZXIgaW5pdGlhbGl6YXRpb24sIGFuZCB0aHVzIG1hY2hfc2NoZWRfaW5pdCgpLAorICogICAgICAgICAgIHJlbW92ZWQgZnJvbSByZXF1ZXN0X2lycSgpIGFuZCBtb3ZlZCB0byBpbml0X3RpbWUoKS4KKyAqICAgICAgICAgICBXZSBzaG91bGQgdGhlcmVmb3JlIGNvbnNpZGVyIHJlbmFtaW5nIG91ciBhZGRfaXNyKCkgYW5kCisgKiAgICAgICAgICAgcmVtb3ZlX2lzcigpIHRvIHJlcXVlc3RfaXJxKCkgYW5kIGZyZWVfaXJxKCkKKyAqICAgICAgICAgICByZXNwZWN0aXZlbHksIHNvIHRoZXkgYXJlIGNvbXBsaWFudCB3aXRoIHRoZSBvdGhlcgorICogICAgICAgICAgIGFyY2hpdGVjdHVyZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9KZXMKKyAqIDExLzA3Lzk2OiBDaGFuZ2VkIGFsbCBhZGRfL3JlbW92ZV9pc3IoKSB0byByZXF1ZXN0Xy9mcmVlX2lycSgpIGNhbGxzLgorICogICAgICAgICAgIFJlbW92ZWQgaXJxIGxpc3Qgc3VwcG9ydCwgaWYgYW55IG1hY2hpbmUgbmVlZHMgYW4gaXJxIHNlcnZlcgorICogICAgICAgICAgIGl0IG11c3QgaW1wbGVtZW50IHRoaXMgaXRzZWxmIChhcyBpdCdzIGFscmVhZHkgZG9uZSksIGluc3RlYWQKKyAqICAgICAgICAgICBvbmx5IGRlZmF1bHQgaGFuZGxlciBhcmUgdXNlZCB3aXRoIG1hY2hfZGVmYXVsdF9oYW5kbGVyLgorICogICAgICAgICAgIHJlcXVlc3RfaXJxIGdvdCBzb21lIGZsYWdzIGRpZmZlcmVudCBmcm9tIG90aGVyIGFyY2hpdGVjdHVyZXM6CisgKiAgICAgICAgICAgLSBJUlFfRkxHX1JFUExBQ0UgOiBSZXBsYWNlIGFuIGV4aXN0aW5nIGhhbmRsZXIgKHRoZSBkZWZhdWx0IG9uZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHJlcGxhY2VkIHdpdGhvdXQgdGhpcyBmbGFnKQorICogICAgICAgICAgIC0gSVJRX0ZMR19MT0NLIDogaGFuZGxlciBjYW4ndCBiZSByZXBsYWNlZAorICogICAgICAgICAgIFRoZXJlIGFyZSBvdGhlciBtYWNoaW5lIGRlcGVuZGluZyBmbGFncywgc2VlIHRoZXJlCisgKiAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gcmVwbGFjZSBhIGRlZmF1bHQgaGFuZGxlciB5b3Ugc2hvdWxkIGtub3cgd2hhdAorICogICAgICAgICAgIHlvdSdyZSBkb2luZywgc2luY2UgaXQgbWlnaHQgaGFuZGxlIGRpZmZlcmVudCBvdGhlciBpcnEgc291cmNlcworICogICAgICAgICAgIHdoaWNoIG11c3QgYmUgc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9Sb21hbiBaaXBwZWwKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKworI2lmZGVmIENPTkZJR19RNDAKKyNpbmNsdWRlIDxhc20vcTQwaW50cy5oPgorI2VuZGlmCisKKy8qIHRhYmxlIGZvciBzeXN0ZW0gaW50ZXJydXB0IGhhbmRsZXJzICovCitzdGF0aWMgaXJxX2hhbmRsZXJfdCBpcnFfbGlzdFtTWVNfSVJRU107CisKK3N0YXRpYyBjb25zdCBjaGFyICpkZWZhdWx0X25hbWVzW1NZU19JUlFTXSA9IHsKKwlbMF0gPSAic3B1cmlvdXMgaW50IiwKKwlbMV0gPSAiaW50MSBoYW5kbGVyIiwKKwlbMl0gPSAiaW50MiBoYW5kbGVyIiwKKwlbM10gPSAiaW50MyBoYW5kbGVyIiwKKwlbNF0gPSAiaW50NCBoYW5kbGVyIiwKKwlbNV0gPSAiaW50NSBoYW5kbGVyIiwKKwlbNl0gPSAiaW50NiBoYW5kbGVyIiwKKwlbN10gPSAiaW50NyBoYW5kbGVyIgorfTsKKworLyogVGhlIG51bWJlciBvZiBzcHVyaW91cyBpbnRlcnJ1cHRzICovCit2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbnVtX3NwdXJpb3VzOworCisjZGVmaW5lIE5VTV9JUlFfTk9ERVMgMTAwCitzdGF0aWMgaXJxX25vZGVfdCBub2Rlc1tOVU1fSVJRX05PREVTXTsKKworc3RhdGljIHZvaWQgZHVtbXlfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKK3N0YXRpYyB2b2lkIGR1bW15X2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpOworc3RhdGljIGludCBkdW1teV9yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLAorCQlpcnFyZXR1cm5fdCAoKmhhbmRsZXIpIChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCk7CitzdGF0aWMgdm9pZCBkdW1teV9mcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpOworCit2b2lkICgqZW5hYmxlX2lycSkgKHVuc2lnbmVkIGludCkgPSBkdW1teV9lbmFibGVfaXJxOwordm9pZCAoKmRpc2FibGVfaXJxKSAodW5zaWduZWQgaW50KSA9IGR1bW15X2Rpc2FibGVfaXJxOworCitpbnQgKCptYWNoX3JlcXVlc3RfaXJxKSAodW5zaWduZWQgaW50LCBpcnFyZXR1cm5fdCAoKikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcsIGNvbnN0IGNoYXIgKiwgdm9pZCAqKSA9IGR1bW15X3JlcXVlc3RfaXJxOwordm9pZCAoKm1hY2hfZnJlZV9pcnEpICh1bnNpZ25lZCBpbnQsIHZvaWQgKikgPSBkdW1teV9mcmVlX2lycTsKKwordm9pZCBpbml0X2lycV9wcm9jKHZvaWQpOworCisvKgorICogdm9pZCBpbml0X0lSUSh2b2lkKQorICoKKyAqIFBhcmFtZXRlcnM6CU5vbmUKKyAqCisgKiBSZXR1cm5zOglOb3RoaW5nCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGR1cmluZyBrZXJuZWwgc3RhcnR1cCB0byBpbml0aWFsaXplCisgKiB0aGUgSVJRIGhhbmRsaW5nIHJvdXRpbmVzLgorICovCisKK3ZvaWQgX19pbml0IGluaXRfSVJRKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgU1lTX0lSUVM7IGkrKykgeworCQlpZiAobWFjaF9kZWZhdWx0X2hhbmRsZXIpCisJCQlpcnFfbGlzdFtpXS5oYW5kbGVyID0gKCptYWNoX2RlZmF1bHRfaGFuZGxlcilbaV07CisJCWlycV9saXN0W2ldLmZsYWdzICAgPSAwOworCQlpcnFfbGlzdFtpXS5kZXZfaWQgID0gTlVMTDsKKwkJaXJxX2xpc3RbaV0uZGV2bmFtZSA9IGRlZmF1bHRfbmFtZXNbaV07CisJfQorCisJZm9yIChpID0gMDsgaSA8IE5VTV9JUlFfTk9ERVM7IGkrKykKKwkJbm9kZXNbaV0uaGFuZGxlciA9IE5VTEw7CisKKwltYWNoX2luaXRfSVJRICgpOworfQorCitpcnFfbm9kZV90ICpuZXdfaXJxX25vZGUodm9pZCkKK3sKKwlpcnFfbm9kZV90ICpub2RlOworCXNob3J0IGk7CisKKwlmb3IgKG5vZGUgPSBub2RlcywgaSA9IE5VTV9JUlFfTk9ERVMtMTsgaSA+PSAwOyBub2RlKyssIGktLSkKKwkJaWYgKCFub2RlLT5oYW5kbGVyKQorCQkJcmV0dXJuIG5vZGU7CisKKwlwcmludGsgKCJuZXdfaXJxX25vZGU6IG91dCBvZiBub2Rlc1xuIik7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBXZSB3aWxsIGtlZXAgdGhlc2UgZnVuY3Rpb25zIHVudGlsIEkgaGF2ZSBjb252aW5jZWQgTGludXMgdG8gbW92ZQorICogdGhlIGRlY2xhcmF0aW9uIG9mIHRoZW0gZnJvbSBpbmNsdWRlL2xpbnV4L3NjaGVkLmggdG8KKyAqIGluY2x1ZGUvYXNtL2lycS5oLgorICovCitpbnQgcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGlycSwKKwkJaXJxcmV0dXJuX3QgKCpoYW5kbGVyKSAoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAorCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpCit7CisJcmV0dXJuIG1hY2hfcmVxdWVzdF9pcnEoaXJxLCBoYW5kbGVyLCBmbGFncywgZGV2bmFtZSwgZGV2X2lkKTsKK30KKworRVhQT1JUX1NZTUJPTChyZXF1ZXN0X2lycSk7CisKK3ZvaWQgZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCW1hY2hfZnJlZV9pcnEoaXJxLCBkZXZfaWQpOworfQorCitFWFBPUlRfU1lNQk9MKGZyZWVfaXJxKTsKKworaW50IGNwdV9yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLAorICAgICAgICAgICAgICAgICAgICBpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKQoreworCWlmIChpcnEgPCBJUlExIHx8IGlycSA+IElSUTcpIHsKKwkJcHJpbnRrKCIlczogSW5jb3JyZWN0IElSUSAlZCBmcm9tICVzXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBpcnEsIGRldm5hbWUpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworI2lmIDAKKwlpZiAoIShpcnFfbGlzdFtpcnFdLmZsYWdzICYgSVJRX0ZMR19TVEQpKSB7CisJCWlmIChpcnFfbGlzdFtpcnFdLmZsYWdzICYgSVJRX0ZMR19MT0NLKSB7CisJCQlwcmludGsoIiVzOiBJUlEgJWQgZnJvbSAlcyBpcyBub3QgcmVwbGFjZWFibGVcbiIsCisJCQkgICAgICAgX19GVU5DVElPTl9fLCBpcnEsIGlycV9saXN0W2lycV0uZGV2bmFtZSk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCWlmICghKGZsYWdzICYgSVJRX0ZMR19SRVBMQUNFKSkgeworCQkJcHJpbnRrKCIlczogJXMgY2FuJ3QgcmVwbGFjZSBJUlEgJWQgZnJvbSAlc1xuIiwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGRldm5hbWUsIGlycSwgaXJxX2xpc3RbaXJxXS5kZXZuYW1lKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisjZW5kaWYKKworCWlycV9saXN0W2lycV0uaGFuZGxlciA9IGhhbmRsZXI7CisJaXJxX2xpc3RbaXJxXS5mbGFncyAgID0gZmxhZ3M7CisJaXJxX2xpc3RbaXJxXS5kZXZfaWQgID0gZGV2X2lkOworCWlycV9saXN0W2lycV0uZGV2bmFtZSA9IGRldm5hbWU7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgY3B1X2ZyZWVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlpZiAoaXJxIDwgSVJRMSB8fCBpcnEgPiBJUlE3KSB7CisJCXByaW50aygiJXM6IEluY29ycmVjdCBJUlEgJWRcbiIsIF9fRlVOQ1RJT05fXywgaXJxKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpcnFfbGlzdFtpcnFdLmRldl9pZCAhPSBkZXZfaWQpCisJCXByaW50aygiJXM6IFJlbW92aW5nIHByb2JhYmx5IHdyb25nIElSUSAlZCBmcm9tICVzXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBpcnEsIGlycV9saXN0W2lycV0uZGV2bmFtZSk7CisKKwlpcnFfbGlzdFtpcnFdLmhhbmRsZXIgPSAoKm1hY2hfZGVmYXVsdF9oYW5kbGVyKVtpcnFdOworCWlycV9saXN0W2lycV0uZmxhZ3MgICA9IDA7CisJaXJxX2xpc3RbaXJxXS5kZXZfaWQgID0gTlVMTDsKKwlpcnFfbGlzdFtpcnFdLmRldm5hbWUgPSBkZWZhdWx0X25hbWVzW2lycV07Cit9CisKKy8qCisgKiBEbyB3ZSBuZWVkIHRoZXNlIHByb2JlIGZ1bmN0aW9ucyBvbiB0aGUgbTY4az8KKyAqCisgKiAgLi4uIG1heSBiZSB1c2VmdWwgd2l0aCBJU0EgZGV2aWNlcworICovCit1bnNpZ25lZCBsb25nIHByb2JlX2lycV9vbiAodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfUTQwCisJaWYgKE1BQ0hfSVNfUTQwKQorCQlyZXR1cm4gcTQwX3Byb2JlX2lycV9vbigpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0wocHJvYmVfaXJxX29uKTsKKworaW50IHByb2JlX2lycV9vZmYgKHVuc2lnbmVkIGxvbmcgaXJxcykKK3sKKyNpZmRlZiBDT05GSUdfUTQwCisJaWYgKE1BQ0hfSVNfUTQwKQorCQlyZXR1cm4gcTQwX3Byb2JlX2lycV9vZmYoaXJxcyk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChwcm9iZV9pcnFfb2ZmKTsKKworc3RhdGljIHZvaWQgZHVtbXlfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXByaW50aygiY2FsbGluZyB1bmluaXRpYWxpemVkIGVuYWJsZV9pcnEoKVxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGR1bW15X2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJcHJpbnRrKCJjYWxsaW5nIHVuaW5pdGlhbGl6ZWQgZGlzYWJsZV9pcnEoKVxuIik7Cit9CisKK3N0YXRpYyBpbnQgZHVtbXlfcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGlycSwKKwkJaXJxcmV0dXJuX3QgKCpoYW5kbGVyKSAoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAorCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpCit7CisJcHJpbnRrKCJjYWxsaW5nIHVuaW5pdGlhbGl6ZWQgcmVxdWVzdF9pcnEoKVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR1bW15X2ZyZWVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlwcmludGsoImNhbGxpbmcgdW5pbml0aWFsaXplZCBkaXNhYmxlX2lycSgpXG4iKTsKK30KKworYXNtbGlua2FnZSB2b2lkIHByb2Nlc3NfaW50KHVuc2lnbmVkIGxvbmcgdmVjLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJaWYgKHZlYyA+PSBWRUNfSU5UMSAmJiB2ZWMgPD0gVkVDX0lOVDcgJiYgIU1BQ0hfSVNfQlZNRTYwMDApIHsKKwkJdmVjIC09IFZFQ19TUFVSOworCQlrc3RhdF9jcHUoMCkuaXJxc1t2ZWNdKys7CisJCWlycV9saXN0W3ZlY10uaGFuZGxlcih2ZWMsIGlycV9saXN0W3ZlY10uZGV2X2lkLCBmcCk7CisJfSBlbHNlIHsKKwkJaWYgKG1hY2hfcHJvY2Vzc19pbnQpCisJCQltYWNoX3Byb2Nlc3NfaW50KHZlYywgZnApOworCQllbHNlCisJCQlwYW5pYygiQ2FuJ3QgcHJvY2VzcyBpbnRlcnJ1cHQgdmVjdG9yICVsZFxuIiwgdmVjKTsKKwkJcmV0dXJuOworCX0KK30KKworaW50IHNob3dfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCit7CisJaW50IGkgPSAqKGxvZmZfdCAqKSB2OworCisJLyogYXV0b3ZlY3RvciBpbnRlcnJ1cHRzICovCisJaWYgKGkgPCBTWVNfSVJRUykgeworCQlpZiAobWFjaF9kZWZhdWx0X2hhbmRsZXIpIHsKKwkJCXNlcV9wcmludGYocCwgImF1dG8gJTJkOiAlMTB1ICIsIGksCisJCQkgICAgICAgICAgICAgICBpID8ga3N0YXRfY3B1KDApLmlycXNbaV0gOiBudW1fc3B1cmlvdXMpOworCQkJc2VxX3B1dHMocCwgIiAgIik7CisJCQlzZXFfcHJpbnRmKHAsICIlc1xuIiwgaXJxX2xpc3RbaV0uZGV2bmFtZSk7CisJCX0KKwl9IGVsc2UgaWYgKGkgPT0gU1lTX0lSUVMpCisJCW1hY2hfZ2V0X2lycV9saXN0KHAsIHYpOworCXJldHVybiAwOworfQorCit2b2lkIGluaXRfaXJxX3Byb2Modm9pZCkKK3sKKwkvKiBJbnNlcnQgL3Byb2MvaXJxIGRyaXZlciBoZXJlICovCit9CisKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvbTY4a19rc3ltcy5jIGIvYXJjaC9tNjhrL2tlcm5lbC9tNjhrX2tzeW1zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU4MzdlMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvbTY4a19rc3ltcy5jCkBAIC0wLDAgKzEsODggQEAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGZjb3JlLmg+CisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KKworYXNtbGlua2FnZSBsb25nIGxvbmcgX19hc2hsZGkzIChsb25nIGxvbmcsIGludCk7Cithc21saW5rYWdlIGxvbmcgbG9uZyBfX2FzaHJkaTMgKGxvbmcgbG9uZywgaW50KTsKK2FzbWxpbmthZ2UgbG9uZyBsb25nIF9fbHNocmRpMyAobG9uZyBsb25nLCBpbnQpOworYXNtbGlua2FnZSBsb25nIGxvbmcgX19tdWxkaTMgKGxvbmcgbG9uZywgbG9uZyBsb25nKTsKK2V4dGVybiBjaGFyIG02OGtfZGVidWdfZGV2aWNlW107CisKK2V4dGVybiB2b2lkIGR1bXBfdGhyZWFkKHN0cnVjdCBwdF9yZWdzICosIHN0cnVjdCB1c2VyICopOworCisvKiBwbGF0Zm9ybSBkZXBlbmRlbnQgc3VwcG9ydCAqLworCitFWFBPUlRfU1lNQk9MKG02OGtfbWFjaHR5cGUpOworRVhQT1JUX1NZTUJPTChtNjhrX2NwdXR5cGUpOworRVhQT1JUX1NZTUJPTChtNjhrX2lzMDQwb3IwNjApOworRVhQT1JUX1NZTUJPTChtNjhrX3JlYWxudW1fbWVtb3J5KTsKK0VYUE9SVF9TWU1CT0wobTY4a19tZW1vcnkpOworI2lmbmRlZiBDT05GSUdfU1VOMworRVhQT1JUX1NZTUJPTChjYWNoZV9wdXNoKTsKK0VYUE9SVF9TWU1CT0woY2FjaGVfY2xlYXIpOworI2lmbmRlZiBDT05GSUdfU0lOR0xFX01FTU9SWV9DSFVOSworRVhQT1JUX1NZTUJPTChtbV92dG9wKTsKK0VYUE9SVF9TWU1CT0wobW1fcHRvdik7CitFWFBPUlRfU1lNQk9MKG1tX2VuZF9vZl9jaHVuayk7CisjZWxzZQorRVhQT1JUX1NZTUJPTChtNjhrX21lbW9mZnNldCk7CisjZW5kaWYgLyogIUNPTkZJR19TSU5HTEVfTUVNT1JZX0NIVU5LICovCitFWFBPUlRfU1lNQk9MKF9faW9yZW1hcCk7CitFWFBPUlRfU1lNQk9MKGlvdW5tYXApOworRVhQT1JUX1NZTUJPTChrZXJuZWxfc2V0X2NhY2hlbW9kZSk7CisjZW5kaWYgLyogIUNPTkZJR19TVU4zICovCitFWFBPUlRfU1lNQk9MKG02OGtfZGVidWdfZGV2aWNlKTsKK0VYUE9SVF9TWU1CT0wobWFjaF9od2Nsayk7CitFWFBPUlRfU1lNQk9MKG1hY2hfZ2V0X3NzKTsKK0VYUE9SVF9TWU1CT0wobWFjaF9nZXRfcnRjX3BsbCk7CitFWFBPUlRfU1lNQk9MKG1hY2hfc2V0X3J0Y19wbGwpOworI2lmZGVmIENPTkZJR19JTlBVVF9NNjhLX0JFRVBfTU9EVUxFCitFWFBPUlRfU1lNQk9MKG1hY2hfYmVlcCk7CisjZW5kaWYKK0VYUE9SVF9TWU1CT0woZHVtcF9mcHUpOworRVhQT1JUX1NZTUJPTChkdW1wX3RocmVhZCk7CitFWFBPUlRfU1lNQk9MKHN0cm5sZW4pOworRVhQT1JUX1NZTUJPTChzdHJyY2hyKTsKK0VYUE9SVF9TWU1CT0woc3Ryc3RyKTsKK0VYUE9SVF9TWU1CT0woc3RycGJyayk7CitFWFBPUlRfU1lNQk9MKGVuYWJsZV9pcnEpOworRVhQT1JUX1NZTUJPTChkaXNhYmxlX2lycSk7CitFWFBPUlRfU1lNQk9MKGtlcm5lbF90aHJlYWQpOworI2lmZGVmIENPTkZJR19WTUUKK0VYUE9SVF9TWU1CT0wodm1lX2JyZHR5cGUpOworI2VuZGlmCisKKy8qIFRoZSBmb2xsb3dpbmcgYXJlIHNwZWNpYWwgYmVjYXVzZSB0aGV5J3JlIG5vdCBjYWxsZWQKKyAgIGV4cGxpY2l0bHkgKHRoZSBDIGNvbXBpbGVyIGdlbmVyYXRlcyB0aGVtKS4gIEZvcnR1bmF0ZWx5LAorICAgdGhlaXIgaW50ZXJmYWNlIGlzbid0IGdvbm5hIGNoYW5nZSBhbnkgdGltZSBzb29uIG5vdywgc28KKyAgIGl0J3MgT0sgdG8gbGVhdmUgaXQgb3V0IG9mIHZlcnNpb24gY29udHJvbC4gICovCitFWFBPUlRfU1lNQk9MKF9fYXNobGRpMyk7CitFWFBPUlRfU1lNQk9MKF9fYXNocmRpMyk7CitFWFBPUlRfU1lNQk9MKF9fbHNocmRpMyk7CitFWFBPUlRfU1lNQk9MKG1lbWNweSk7CitFWFBPUlRfU1lNQk9MKG1lbXNldCk7CitFWFBPUlRfU1lNQk9MKG1lbWNtcCk7CitFWFBPUlRfU1lNQk9MKG1lbXNjYW4pOworRVhQT1JUX1NZTUJPTChfX211bGRpMyk7CisKK0VYUE9SVF9TWU1CT0woX19kb3duX2ZhaWxlZCk7CitFWFBPUlRfU1lNQk9MKF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZSk7CitFWFBPUlRfU1lNQk9MKF9fZG93bl9mYWlsZWRfdHJ5bG9jayk7CitFWFBPUlRfU1lNQk9MKF9fdXBfd2FrZXVwKTsKKworRVhQT1JUX1NZTUJPTChnZXRfd2NoYW4pOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvbTY4ay9rZXJuZWwvbW9kdWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IxYTJmZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvbW9kdWxlLmMKQEAgLTAsMCArMSwxMjggQEAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVsb2FkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2lmIDAKKyNkZWZpbmUgREVCVUdQIHByaW50aworI2Vsc2UKKyNkZWZpbmUgREVCVUdQKGZtdC4uLikKKyNlbmRpZgorCit2b2lkICptb2R1bGVfYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQoreworCWlmIChzaXplID09IDApCisJCXJldHVybiBOVUxMOworCXJldHVybiB2bWFsbG9jKHNpemUpOworfQorCisKKy8qIEZyZWUgbWVtb3J5IHJldHVybmVkIGZyb20gbW9kdWxlX2FsbG9jICovCit2b2lkIG1vZHVsZV9mcmVlKHN0cnVjdCBtb2R1bGUgKm1vZCwgdm9pZCAqbW9kdWxlX3JlZ2lvbikKK3sKKwl2ZnJlZShtb2R1bGVfcmVnaW9uKTsKKwkvKiBGSVhNRTogSWYgbW9kdWxlX3JlZ2lvbiA9PSBtb2QtPmluaXRfcmVnaW9uLCB0cmltIGV4Y2VwdGlvbgorICAgICAgICAgICB0YWJsZSBlbnRyaWVzLiAqLworfQorCisvKiBXZSBkb24ndCBuZWVkIGFueXRoaW5nIHNwZWNpYWwuICovCitpbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqaGRyLAorCQkJICAgICAgRWxmX1NoZHIgKnNlY2hkcnMsCisJCQkgICAgICBjaGFyICpzZWNzdHJpbmdzLAorCQkJICAgICAgc3RydWN0IG1vZHVsZSAqbW9kKQoreworCXJldHVybiAwOworfQorCitpbnQgYXBwbHlfcmVsb2NhdGUoRWxmMzJfU2hkciAqc2VjaGRycywKKwkJICAgY29uc3QgY2hhciAqc3RydGFiLAorCQkgICB1bnNpZ25lZCBpbnQgc3ltaW5kZXgsCisJCSAgIHVuc2lnbmVkIGludCByZWxzZWMsCisJCSAgIHN0cnVjdCBtb2R1bGUgKm1lKQoreworCXVuc2lnbmVkIGludCBpOworCUVsZjMyX1JlbCAqcmVsID0gKHZvaWQgKilzZWNoZHJzW3JlbHNlY10uc2hfYWRkcjsKKwlFbGYzMl9TeW0gKnN5bTsKKwl1aW50MzJfdCAqbG9jYXRpb247CisKKwlERUJVR1AoIkFwcGx5aW5nIHJlbG9jYXRlIHNlY3Rpb24gJXUgdG8gJXVcbiIsIHJlbHNlYywKKwkgICAgICAgc2VjaGRyc1tyZWxzZWNdLnNoX2luZm8pOworCWZvciAoaSA9IDA7IGkgPCBzZWNoZHJzW3JlbHNlY10uc2hfc2l6ZSAvIHNpemVvZigqcmVsKTsgaSsrKSB7CisJCS8qIFRoaXMgaXMgd2hlcmUgdG8gbWFrZSB0aGUgY2hhbmdlICovCisJCWxvY2F0aW9uID0gKHZvaWQgKilzZWNoZHJzW3NlY2hkcnNbcmVsc2VjXS5zaF9pbmZvXS5zaF9hZGRyCisJCQkrIHJlbFtpXS5yX29mZnNldDsKKwkJLyogVGhpcyBpcyB0aGUgc3ltYm9sIGl0IGlzIHJlZmVycmluZyB0by4gIE5vdGUgdGhhdCBhbGwKKwkJICAgdW5kZWZpbmVkIHN5bWJvbHMgaGF2ZSBiZWVuIHJlc29sdmVkLiAgKi8KKwkJc3ltID0gKEVsZjMyX1N5bSAqKXNlY2hkcnNbc3ltaW5kZXhdLnNoX2FkZHIKKwkJCSsgRUxGMzJfUl9TWU0ocmVsW2ldLnJfaW5mbyk7CisKKwkJc3dpdGNoIChFTEYzMl9SX1RZUEUocmVsW2ldLnJfaW5mbykpIHsKKwkJY2FzZSBSXzY4S18zMjoKKwkJCS8qIFdlIGFkZCB0aGUgdmFsdWUgaW50byB0aGUgbG9jYXRpb24gZ2l2ZW4gKi8KKwkJCSpsb2NhdGlvbiArPSBzeW0tPnN0X3ZhbHVlOworCQkJYnJlYWs7CisJCWNhc2UgUl82OEtfUEMzMjoKKwkJCS8qIEFkZCB0aGUgdmFsdWUsIHN1YnRyYWN0IGl0cyBwb3N0aXRpb24gKi8KKwkJCSpsb2NhdGlvbiArPSBzeW0tPnN0X3ZhbHVlIC0gKHVpbnQzMl90KWxvY2F0aW9uOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9FUlIgIm1vZHVsZSAlczogVW5rbm93biByZWxvY2F0aW9uOiAldVxuIiwKKwkJCSAgICAgICBtZS0+bmFtZSwgRUxGMzJfUl9UWVBFKHJlbFtpXS5yX2luZm8pKTsKKwkJCXJldHVybiAtRU5PRVhFQzsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGFwcGx5X3JlbG9jYXRlX2FkZChFbGYzMl9TaGRyICpzZWNoZHJzLAorCQkgICAgICAgY29uc3QgY2hhciAqc3RydGFiLAorCQkgICAgICAgdW5zaWduZWQgaW50IHN5bWluZGV4LAorCQkgICAgICAgdW5zaWduZWQgaW50IHJlbHNlYywKKwkJICAgICAgIHN0cnVjdCBtb2R1bGUgKm1lKQoreworCXVuc2lnbmVkIGludCBpOworCUVsZjMyX1JlbGEgKnJlbCA9ICh2b2lkICopc2VjaGRyc1tyZWxzZWNdLnNoX2FkZHI7CisJRWxmMzJfU3ltICpzeW07CisJdWludDMyX3QgKmxvY2F0aW9uOworCisJREVCVUdQKCJBcHBseWluZyByZWxvY2F0ZV9hZGQgc2VjdGlvbiAldSB0byAldVxuIiwgcmVsc2VjLAorCSAgICAgICBzZWNoZHJzW3JlbHNlY10uc2hfaW5mbyk7CisJZm9yIChpID0gMDsgaSA8IHNlY2hkcnNbcmVsc2VjXS5zaF9zaXplIC8gc2l6ZW9mKCpyZWwpOyBpKyspIHsKKwkJLyogVGhpcyBpcyB3aGVyZSB0byBtYWtlIHRoZSBjaGFuZ2UgKi8KKwkJbG9jYXRpb24gPSAodm9pZCAqKXNlY2hkcnNbc2VjaGRyc1tyZWxzZWNdLnNoX2luZm9dLnNoX2FkZHIKKwkJCSsgcmVsW2ldLnJfb2Zmc2V0OworCQkvKiBUaGlzIGlzIHRoZSBzeW1ib2wgaXQgaXMgcmVmZXJyaW5nIHRvLiAgTm90ZSB0aGF0IGFsbAorCQkgICB1bmRlZmluZWQgc3ltYm9scyBoYXZlIGJlZW4gcmVzb2x2ZWQuICAqLworCQlzeW0gPSAoRWxmMzJfU3ltICopc2VjaGRyc1tzeW1pbmRleF0uc2hfYWRkcgorCQkJKyBFTEYzMl9SX1NZTShyZWxbaV0ucl9pbmZvKTsKKworCQlzd2l0Y2ggKEVMRjMyX1JfVFlQRShyZWxbaV0ucl9pbmZvKSkgeworCQljYXNlIFJfNjhLXzMyOgorCQkJLyogV2UgYWRkIHRoZSB2YWx1ZSBpbnRvIHRoZSBsb2NhdGlvbiBnaXZlbiAqLworCQkJKmxvY2F0aW9uID0gcmVsW2ldLnJfYWRkZW5kICsgc3ltLT5zdF92YWx1ZTsKKwkJCWJyZWFrOworCQljYXNlIFJfNjhLX1BDMzI6CisJCQkvKiBBZGQgdGhlIHZhbHVlLCBzdWJ0cmFjdCBpdHMgcG9zdGl0aW9uICovCisJCQkqbG9jYXRpb24gPSByZWxbaV0ucl9hZGRlbmQgKyBzeW0tPnN0X3ZhbHVlIC0gKHVpbnQzMl90KWxvY2F0aW9uOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9FUlIgIm1vZHVsZSAlczogVW5rbm93biByZWxvY2F0aW9uOiAldVxuIiwKKwkJCSAgICAgICBtZS0+bmFtZSwgRUxGMzJfUl9UWVBFKHJlbFtpXS5yX2luZm8pKTsKKwkJCXJldHVybiAtRU5PRVhFQzsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworaW50IG1vZHVsZV9maW5hbGl6ZShjb25zdCBFbGZfRWhkciAqaGRyLAorCQkgICAgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsCisJCSAgICBzdHJ1Y3QgbW9kdWxlICptZSkKK3sKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtb2R1bGVfYXJjaF9jbGVhbnVwKHN0cnVjdCBtb2R1bGUgKm1vZCkKK3sKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNiMDQzZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0wLDAgKzEsNDA1IEBACisvKgorICogIGxpbnV4L2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NSAgSGFtaXNoIE1hY2RvbmFsZAorICoKKyAqICA2ODA2MCBmaXhlcyBieSBKZXNwZXIgU2tvdgorICovCisKKy8qCisgKiBUaGlzIGZpbGUgaGFuZGxlcyB0aGUgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwYXJ0cyBvZiBwcm9jZXNzIGhhbmRsaW5nLi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdXNlci5oPgorI2luY2x1ZGUgPGxpbnV4L2Eub3V0Lmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdF90YXNrLmg+CisjaW5jbHVkZSA8bGludXgvbXF1ZXVlLmg+CisKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisKKy8qCisgKiBJbml0aWFsIHRhc2svdGhyZWFkIHN0cnVjdHVyZS4gTWFrZSB0aGlzIGEgcGVyLWFyY2hpdGVjdHVyZSB0aGluZywKKyAqIGJlY2F1c2UgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgdGVuZCB0byBoYXZlIGRpZmZlcmVudAorICogYWxpZ25tZW50IHJlcXVpcmVtZW50cyBhbmQgcG90ZW50aWFsbHkgZGlmZmVyZW50IGluaXRpYWwKKyAqIHNldHVwLgorICovCitzdGF0aWMgc3RydWN0IGZzX3N0cnVjdCBpbml0X2ZzID0gSU5JVF9GUzsKK3N0YXRpYyBzdHJ1Y3QgZmlsZXNfc3RydWN0IGluaXRfZmlsZXMgPSBJTklUX0ZJTEVTOworc3RhdGljIHN0cnVjdCBzaWduYWxfc3RydWN0IGluaXRfc2lnbmFscyA9IElOSVRfU0lHTkFMUyhpbml0X3NpZ25hbHMpOworc3RhdGljIHN0cnVjdCBzaWdoYW5kX3N0cnVjdCBpbml0X3NpZ2hhbmQgPSBJTklUX1NJR0hBTkQoaW5pdF9zaWdoYW5kKTsKK3N0cnVjdCBtbV9zdHJ1Y3QgaW5pdF9tbSA9IElOSVRfTU0oaW5pdF9tbSk7CisKK0VYUE9SVF9TWU1CT0woaW5pdF9tbSk7CisKK3VuaW9uIHRocmVhZF91bmlvbiBpbml0X3RocmVhZF91bmlvbgorX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLmRhdGEuaW5pdF90YXNrIiksIGFsaWduZWQoVEhSRUFEX1NJWkUpKSkKKyAgICAgICA9IHsgSU5JVF9USFJFQURfSU5GTyhpbml0X3Rhc2spIH07CisKKy8qIGluaXRpYWwgdGFzayBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCB0YXNrX3N0cnVjdCBpbml0X3Rhc2sgPSBJTklUX1RBU0soaW5pdF90YXNrKTsKKworRVhQT1JUX1NZTUJPTChpbml0X3Rhc2spOworCithc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTsKKworCisvKgorICogUmV0dXJuIHNhdmVkIFBDIGZyb20gYSBibG9ja2VkIHRocmVhZAorICovCit1bnNpZ25lZCBsb25nIHRocmVhZF9zYXZlZF9wYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdyA9IChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopdHNrLT50aHJlYWQua3NwOworCS8qIENoZWNrIHdoZXRoZXIgdGhlIHRocmVhZCBpcyBibG9ja2VkIGluIHJlc3VtZSgpICovCisJaWYgKGluX3NjaGVkX2Z1bmN0aW9ucyhzdy0+cmV0cGMpKQorCQlyZXR1cm4gKCh1bnNpZ25lZCBsb25nICopc3ctPmE2KVsxXTsKKwllbHNlCisJCXJldHVybiBzdy0+cmV0cGM7Cit9CisKKy8qCisgKiBUaGUgaWRsZSBsb29wIG9uIGFuIG02OGsuLgorICovCit2b2lkIGRlZmF1bHRfaWRsZSh2b2lkKQoreworCWlmICghbmVlZF9yZXNjaGVkKCkpCisjaWYgZGVmaW5lZChNQUNIX0FUQVJJX09OTFkpICYmICFkZWZpbmVkKENPTkZJR19IQURFUykKKwkJLyogYmxvY2sgb3V0IEhTWU5DIG9uIHRoZSBhdGFyaSAoZmFsY29uKSAqLworCQlfX2FzbV9fKCJzdG9wICMweDIyMDAiIDogOiA6ICJjYyIpOworI2Vsc2UKKwkJX19hc21fXygic3RvcCAjMHgyMDAwIiA6IDogOiAiY2MiKTsKKyNlbmRpZgorfQorCit2b2lkICgqaWRsZSkodm9pZCkgPSBkZWZhdWx0X2lkbGU7CisKKy8qCisgKiBUaGUgaWRsZSB0aHJlYWQuIFRoZXJlJ3Mgbm8gdXNlZnVsIHdvcmsgdG8gYmUKKyAqIGRvbmUsIHNvIGp1c3QgdHJ5IHRvIGNvbnNlcnZlIHBvd2VyIGFuZCBoYXZlIGEKKyAqIGxvdyBleGl0IGxhdGVuY3kgKGllIHNpdCBpbiBhIGxvb3Agd2FpdGluZyBmb3IKKyAqIHNvbWVib2R5IHRvIHNheSB0aGF0IHRoZXknZCBsaWtlIHRvIHJlc2NoZWR1bGUpCisgKi8KK3ZvaWQgY3B1X2lkbGUodm9pZCkKK3sKKwkvKiBlbmRsZXNzIGlkbGUgbG9vcCB3aXRoIG5vIHByaW9yaXR5IGF0IGFsbCAqLworCXdoaWxlICgxKSB7CisJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpCisJCQlpZGxlKCk7CisJCXNjaGVkdWxlKCk7CisJfQorfQorCit2b2lkIG1hY2hpbmVfcmVzdGFydChjaGFyICogX191bnVzZWQpCit7CisJaWYgKG1hY2hfcmVzZXQpCisJCW1hY2hfcmVzZXQoKTsKKwlmb3IgKDs7KTsKK30KKworRVhQT1JUX1NZTUJPTChtYWNoaW5lX3Jlc3RhcnQpOworCit2b2lkIG1hY2hpbmVfaGFsdCh2b2lkKQoreworCWlmIChtYWNoX2hhbHQpCisJCW1hY2hfaGFsdCgpOworCWZvciAoOzspOworfQorCitFWFBPUlRfU1lNQk9MKG1hY2hpbmVfaGFsdCk7CisKK3ZvaWQgbWFjaGluZV9wb3dlcl9vZmYodm9pZCkKK3sKKwlpZiAobWFjaF9wb3dlcl9vZmYpCisJCW1hY2hfcG93ZXJfb2ZmKCk7CisJZm9yICg7Oyk7Cit9CisKK0VYUE9SVF9TWU1CT0wobWFjaGluZV9wb3dlcl9vZmYpOworCit2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCit7CisJcHJpbnRrKCJcbiIpOworCXByaW50aygiRm9ybWF0ICUwMnggIFZlY3RvcjogJTA0eCAgUEM6ICUwOGx4ICBTdGF0dXM6ICUwNHggICAgJXNcbiIsCisJICAgICAgIHJlZ3MtPmZvcm1hdCwgcmVncy0+dmVjdG9yLCByZWdzLT5wYywgcmVncy0+c3IsIHByaW50X3RhaW50ZWQoKSk7CisJcHJpbnRrKCJPUklHX0QwOiAlMDhseCAgRDA6ICUwOGx4ICBBMjogJTA4bHggIEExOiAlMDhseFxuIiwKKwkgICAgICAgcmVncy0+b3JpZ19kMCwgcmVncy0+ZDAsIHJlZ3MtPmEyLCByZWdzLT5hMSk7CisJcHJpbnRrKCJBMDogJTA4bHggIEQ1OiAlMDhseCAgRDQ6ICUwOGx4XG4iLAorCSAgICAgICByZWdzLT5hMCwgcmVncy0+ZDUsIHJlZ3MtPmQ0KTsKKwlwcmludGsoIkQzOiAlMDhseCAgRDI6ICUwOGx4ICBEMTogJTA4bHhcbiIsCisJICAgICAgIHJlZ3MtPmQzLCByZWdzLT5kMiwgcmVncy0+ZDEpOworCWlmICghKHJlZ3MtPnNyICYgUFNfUykpCisJCXByaW50aygiVVNQOiAlMDhseFxuIiwgcmR1c3AoKSk7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBrZXJuZWwgdGhyZWFkCisgKi8KK2ludCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCWludCBwaWQ7CisJbW1fc2VnbWVudF90IGZzOworCisJZnMgPSBnZXRfZnMoKTsKKwlzZXRfZnMgKEtFUk5FTF9EUyk7CisKKwl7CisJcmVnaXN0ZXIgbG9uZyByZXR2YWwgX19hc21fXyAoImQwIik7CisJcmVnaXN0ZXIgbG9uZyBjbG9uZV9hcmcgX19hc21fXyAoImQxIikgPSBmbGFncyB8IENMT05FX1ZNIHwgQ0xPTkVfVU5UUkFDRUQ7CisKKwlyZXR2YWwgPSBfX05SX2Nsb25lOworCV9fYXNtX18gX192b2xhdGlsZV9fCisJICAoImNscmwgJSVkMlxuXHQiCisJICAgInRyYXAgIzBcblx0IgkJLyogTGludXgvbTY4ayBzeXN0ZW0gY2FsbCAqLworCSAgICJ0c3RsICUwXG5cdCIJCS8qIGNoaWxkIG9yIHBhcmVudCAqLworCSAgICJqbmUgMWZcblx0IgkJCS8qIHBhcmVudCAtIGp1bXAgKi8KKwkgICAibGVhICUlc3BAKCVjNyksJTZcblx0IgkvKiByZWxvYWQgY3VycmVudCAqLworCSAgICJtb3ZlbCAlNkAsJTZcblx0IgorCSAgICJtb3ZlbCAlMywlJXNwQC1cblx0IgkvKiBwdXNoIGFyZ3VtZW50ICovCisJICAgImpzciAlNEBcblx0IgkJLyogY2FsbCBmbiAqLworCSAgICJtb3ZlbCAlMCwlJWQxXG5cdCIJCS8qIHBhc3MgZXhpdCB2YWx1ZSAqLworCSAgICJtb3ZlbCAlMiwlJWQwXG5cdCIJCS8qIGV4aXQgKi8KKwkgICAidHJhcCAjMFxuIgorCSAgICIxOiIKKwkgICA6ICIrZCIgKHJldHZhbCkKKwkgICA6ICJpIiAoX19OUl9jbG9uZSksICJpIiAoX19OUl9leGl0KSwKKwkgICAgICJyIiAoYXJnKSwgImEiIChmbiksICJkIiAoY2xvbmVfYXJnKSwgInIiIChjdXJyZW50KSwKKwkgICAgICJpIiAoLVRIUkVBRF9TSVpFKQorCSAgIDogImQyIik7CisKKwlwaWQgPSByZXR2YWw7CisJfQorCisJc2V0X2ZzIChmcyk7CisJcmV0dXJuIHBpZDsKK30KKwordm9pZCBmbHVzaF90aHJlYWQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHplcm8gPSAwOworCXNldF9mcyhVU0VSX0RTKTsKKwljdXJyZW50LT50aHJlYWQuZnMgPSBfX1VTRVJfRFM7CisJaWYgKCFGUFVfSVNfRU1VKQorCQlhc20gdm9sYXRpbGUgKCIuY2hpcCA2OGsvNjg4ODFcblx0IgorCQkJICAgICAgImZyZXN0b3JlICUwQFxuXHQiCisJCQkgICAgICAiLmNoaXAgNjhrIiA6IDogImEiICgmemVybykpOworfQorCisvKgorICogIm02OGtfZm9yaygpIi4uIEJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlLCB0aGUKKyAqIG5vbi12b2xhdGlsZSByZWdpc3RlcnMgaGF2ZSBhbHNvIGJlZW4gc2F2ZWQgb24gdGhlCisgKiBzdGFjay4gV2UgZG8gc29tZSB1Z2x5IHBvaW50ZXIgc3R1ZmYgaGVyZS4uIChzZWUKKyAqIGFsc28gY29weV90aHJlYWQpCisgKi8KKworYXNtbGlua2FnZSBpbnQgbTY4a19mb3JrKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiBkb19mb3JrKFNJR0NITEQsIHJkdXNwKCksIHJlZ3MsIDAsIE5VTEwsIE5VTEwpOworfQorCithc21saW5rYWdlIGludCBtNjhrX3Zmb3JrKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiBkb19mb3JrKENMT05FX1ZGT1JLIHwgQ0xPTkVfVk0gfCBTSUdDSExELCByZHVzcCgpLCByZWdzLCAwLAorCQkgICAgICAgTlVMTCwgTlVMTCk7Cit9CisKK2FzbWxpbmthZ2UgaW50IG02OGtfY2xvbmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFnczsKKwl1bnNpZ25lZCBsb25nIG5ld3NwOworCWludCAqcGFyZW50X3RpZHB0ciwgKmNoaWxkX3RpZHB0cjsKKworCS8qIHN5c2NhbGwyIHB1dHMgY2xvbmVfZmxhZ3MgaW4gZDEgYW5kIHVzcCBpbiBkMiAqLworCWNsb25lX2ZsYWdzID0gcmVncy0+ZDE7CisJbmV3c3AgPSByZWdzLT5kMjsKKwlwYXJlbnRfdGlkcHRyID0gKGludCAqKXJlZ3MtPmQzOworCWNoaWxkX3RpZHB0ciA9IChpbnQgKilyZWdzLT5kNDsKKwlpZiAoIW5ld3NwKQorCQluZXdzcCA9IHJkdXNwKCk7CisJcmV0dXJuIGRvX2ZvcmsoY2xvbmVfZmxhZ3MsIG5ld3NwLCByZWdzLCAwLAorCQkgICAgICAgcGFyZW50X3RpZHB0ciwgY2hpbGRfdGlkcHRyKTsKK30KKworaW50IGNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCisJCSB1bnNpZ25lZCBsb25nIHVudXNlZCwKKwkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqIHAsIHN0cnVjdCBwdF9yZWdzICogcmVncykKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqIGNoaWxkcmVnczsKKwlzdHJ1Y3Qgc3dpdGNoX3N0YWNrICogY2hpbGRzdGFjaywgKnN0YWNrOworCXVuc2lnbmVkIGxvbmcgc3RhY2tfb2Zmc2V0LCAqcmV0cDsKKworCXN0YWNrX29mZnNldCA9IFRIUkVBRF9TSVpFIC0gc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKTsKKwljaGlsZHJlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKikgKCh1bnNpZ25lZCBsb25nKSAocC0+dGhyZWFkX2luZm8pICsgc3RhY2tfb2Zmc2V0KTsKKworCSpjaGlsZHJlZ3MgPSAqcmVnczsKKwljaGlsZHJlZ3MtPmQwID0gMDsKKworCXJldHAgPSAoKHVuc2lnbmVkIGxvbmcgKikgcmVncyk7CisJc3RhY2sgPSAoKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKikgcmV0cCkgLSAxOworCisJY2hpbGRzdGFjayA9ICgoc3RydWN0IHN3aXRjaF9zdGFjayAqKSBjaGlsZHJlZ3MpIC0gMTsKKwkqY2hpbGRzdGFjayA9ICpzdGFjazsKKwljaGlsZHN0YWNrLT5yZXRwYyA9ICh1bnNpZ25lZCBsb25nKXJldF9mcm9tX2Zvcms7CisKKwlwLT50aHJlYWQudXNwID0gdXNwOworCXAtPnRocmVhZC5rc3AgPSAodW5zaWduZWQgbG9uZyljaGlsZHN0YWNrOworCS8qCisJICogTXVzdCBzYXZlIHRoZSBjdXJyZW50IFNGQy9ERkMgdmFsdWUsIE5PVCB0aGUgdmFsdWUgd2hlbgorCSAqIHRoZSBwYXJlbnQgd2FzIGxhc3QgZGVzY2hlZHVsZWQgLSBSR0ggIDEwLTA4LTk2CisJICovCisJcC0+dGhyZWFkLmZzID0gZ2V0X2ZzKCkuc2VnOworCisJaWYgKCFGUFVfSVNfRU1VKSB7CisJCS8qIENvcHkgdGhlIGN1cnJlbnQgZnB1IHN0YXRlICovCisJCWFzbSB2b2xhdGlsZSAoImZzYXZlICUwIiA6IDogIm0iIChwLT50aHJlYWQuZnBzdGF0ZVswXSkgOiAibWVtb3J5Iik7CisKKwkJaWYgKCFDUFVfSVNfMDYwID8gcC0+dGhyZWFkLmZwc3RhdGVbMF0gOiBwLT50aHJlYWQuZnBzdGF0ZVsyXSkKKwkJICBhc20gdm9sYXRpbGUgKCJmbW92ZW14ICUvZnAwLSUvZnA3LCUwXG5cdCIKKwkJCQkiZm1vdmVtbCAlL2ZwaWFyLyUvZnBjci8lL2Zwc3IsJTEiCisJCQkJOiA6ICJtIiAocC0+dGhyZWFkLmZwWzBdKSwgIm0iIChwLT50aHJlYWQuZnBjbnRsWzBdKQorCQkJCTogIm1lbW9yeSIpOworCQkvKiBSZXN0b3JlIHRoZSBzdGF0ZSBpbiBjYXNlIHRoZSBmcHUgd2FzIGJ1c3kgKi8KKwkJYXNtIHZvbGF0aWxlICgiZnJlc3RvcmUgJTAiIDogOiAibSIgKHAtPnRocmVhZC5mcHN0YXRlWzBdKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIEZpbGwgaW4gdGhlIGZwdSBzdHJ1Y3R1cmUgZm9yIGEgY29yZSBkdW1wLiAgKi8KKworaW50IGR1bXBfZnB1IChzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHVzZXJfbTY4a2ZwX3N0cnVjdCAqZnB1KQoreworCWNoYXIgZnB1c3RhdGVbMjE2XTsKKworCWlmIChGUFVfSVNfRU1VKSB7CisJCWludCBpOworCisJCW1lbWNweShmcHUtPmZwY250bCwgY3VycmVudC0+dGhyZWFkLmZwY250bCwgMTIpOworCQltZW1jcHkoZnB1LT5mcHJlZ3MsIGN1cnJlbnQtPnRocmVhZC5mcCwgOTYpOworCQkvKiBDb252ZXJ0IGludGVybmFsIGZwdSByZWcgcmVwcmVzZW50YXRpb24KKwkJICogaW50byBsb25nIGRvdWJsZSBmb3JtYXQKKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCAyNDsgaSArPSAzKQorCQkJZnB1LT5mcHJlZ3NbaV0gPSAoKGZwdS0+ZnByZWdzW2ldICYgMHhmZmZmMDAwMCkgPDwgMTUpIHwKKwkJCSAgICAgICAgICAgICAgICAgKChmcHUtPmZwcmVnc1tpXSAmIDB4MDAwMGZmZmYpIDw8IDE2KTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogRmlyc3QgZHVtcCB0aGUgZnB1IGNvbnRleHQgdG8gYXZvaWQgcHJvdG9jb2wgdmlvbGF0aW9uLiAgKi8KKwlhc20gdm9sYXRpbGUgKCJmc2F2ZSAlMCIgOjogIm0iIChmcHVzdGF0ZVswXSkgOiAibWVtb3J5Iik7CisJaWYgKCFDUFVfSVNfMDYwID8gIWZwdXN0YXRlWzBdIDogIWZwdXN0YXRlWzJdKQorCQlyZXR1cm4gMDsKKworCWFzbSB2b2xhdGlsZSAoImZtb3ZlbSAlL2ZwaWFyLyUvZnBjci8lL2Zwc3IsJTAiCisJCTo6ICJtIiAoZnB1LT5mcGNudGxbMF0pCisJCTogIm1lbW9yeSIpOworCWFzbSB2b2xhdGlsZSAoImZtb3ZlbXggJS9mcDAtJS9mcDcsJTAiCisJCTo6ICJtIiAoZnB1LT5mcHJlZ3NbMF0pCisJCTogIm1lbW9yeSIpOworCXJldHVybiAxOworfQorCisvKgorICogZmlsbCBpbiB0aGUgdXNlciBzdHJ1Y3R1cmUgZm9yIGEgY29yZSBkdW1wLi4KKyAqLwordm9pZCBkdW1wX3RocmVhZChzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIHN0cnVjdCB1c2VyICogZHVtcCkKK3sKKwlzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdzsKKworLyogY2hhbmdlZCB0aGUgc2l6ZSBjYWxjdWxhdGlvbnMgLSBzaG91bGQgaG9wZWZ1bGx5IHdvcmsgYmV0dGVyLiBsYnQgKi8KKwlkdW1wLT5tYWdpYyA9IENNQUdJQzsKKwlkdW1wLT5zdGFydF9jb2RlID0gMDsKKwlkdW1wLT5zdGFydF9zdGFjayA9IHJkdXNwKCkgJiB+KFBBR0VfU0laRSAtIDEpOworCWR1bXAtPnVfdHNpemUgPSAoKHVuc2lnbmVkIGxvbmcpIGN1cnJlbnQtPm1tLT5lbmRfY29kZSkgPj4gUEFHRV9TSElGVDsKKwlkdW1wLT51X2RzaXplID0gKCh1bnNpZ25lZCBsb25nKSAoY3VycmVudC0+bW0tPmJyayArCisJCQkJCSAgKFBBR0VfU0laRS0xKSkpID4+IFBBR0VfU0hJRlQ7CisJZHVtcC0+dV9kc2l6ZSAtPSBkdW1wLT51X3RzaXplOworCWR1bXAtPnVfc3NpemUgPSAwOworCisJaWYgKGR1bXAtPnN0YXJ0X3N0YWNrIDwgVEFTS19TSVpFKQorCQlkdW1wLT51X3NzaXplID0gKCh1bnNpZ25lZCBsb25nKSAoVEFTS19TSVpFIC0gZHVtcC0+c3RhcnRfc3RhY2spKSA+PiBQQUdFX1NISUZUOworCisJZHVtcC0+dV9hcjAgPSAoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QgKikoKGludCkmZHVtcC0+cmVncyAtIChpbnQpZHVtcCk7CisJc3cgPSAoKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKilyZWdzKSAtIDE7CisJZHVtcC0+cmVncy5kMSA9IHJlZ3MtPmQxOworCWR1bXAtPnJlZ3MuZDIgPSByZWdzLT5kMjsKKwlkdW1wLT5yZWdzLmQzID0gcmVncy0+ZDM7CisJZHVtcC0+cmVncy5kNCA9IHJlZ3MtPmQ0OworCWR1bXAtPnJlZ3MuZDUgPSByZWdzLT5kNTsKKwlkdW1wLT5yZWdzLmQ2ID0gc3ctPmQ2OworCWR1bXAtPnJlZ3MuZDcgPSBzdy0+ZDc7CisJZHVtcC0+cmVncy5hMCA9IHJlZ3MtPmEwOworCWR1bXAtPnJlZ3MuYTEgPSByZWdzLT5hMTsKKwlkdW1wLT5yZWdzLmEyID0gcmVncy0+YTI7CisJZHVtcC0+cmVncy5hMyA9IHN3LT5hMzsKKwlkdW1wLT5yZWdzLmE0ID0gc3ctPmE0OworCWR1bXAtPnJlZ3MuYTUgPSBzdy0+YTU7CisJZHVtcC0+cmVncy5hNiA9IHN3LT5hNjsKKwlkdW1wLT5yZWdzLmQwID0gcmVncy0+ZDA7CisJZHVtcC0+cmVncy5vcmlnX2QwID0gcmVncy0+b3JpZ19kMDsKKwlkdW1wLT5yZWdzLnN0a2FkaiA9IHJlZ3MtPnN0a2FkajsKKwlkdW1wLT5yZWdzLnNyID0gcmVncy0+c3I7CisJZHVtcC0+cmVncy5wYyA9IHJlZ3MtPnBjOworCWR1bXAtPnJlZ3MuZm10dmVjID0gKHJlZ3MtPmZvcm1hdCA8PCAxMikgfCByZWdzLT52ZWN0b3I7CisJLyogZHVtcCBmbG9hdGluZyBwb2ludCBzdHVmZiAqLworCWR1bXAtPnVfZnB2YWxpZCA9IGR1bXBfZnB1IChyZWdzLCAmZHVtcC0+bTY4a2ZwKTsKK30KKworLyoKKyAqIHN5c19leGVjdmUoKSBleGVjdXRlcyBhIG5ldyBwcm9ncmFtLgorICovCithc21saW5rYWdlIGludCBzeXNfZXhlY3ZlKGNoYXIgKm5hbWUsIGNoYXIgKiphcmd2LCBjaGFyICoqZW52cCkKK3sKKwlpbnQgZXJyb3I7CisJY2hhciAqIGZpbGVuYW1lOworCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gKHN0cnVjdCBwdF9yZWdzICopICZuYW1lOworCisJbG9ja19rZXJuZWwoKTsKKwlmaWxlbmFtZSA9IGdldG5hbWUobmFtZSk7CisJZXJyb3IgPSBQVFJfRVJSKGZpbGVuYW1lKTsKKwlpZiAoSVNfRVJSKGZpbGVuYW1lKSkKKwkJZ290byBvdXQ7CisJZXJyb3IgPSBkb19leGVjdmUoZmlsZW5hbWUsIGFyZ3YsIGVudnAsIHJlZ3MpOworCXB1dG5hbWUoZmlsZW5hbWUpOworb3V0OgorCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZwLCBwYzsKKwl1bnNpZ25lZCBsb25nIHN0YWNrX3BhZ2U7CisJaW50IGNvdW50ID0gMDsKKwlpZiAoIXAgfHwgcCA9PSBjdXJyZW50IHx8IHAtPnN0YXRlID09IFRBU0tfUlVOTklORykKKwkJcmV0dXJuIDA7CisKKwlzdGFja19wYWdlID0gKHVuc2lnbmVkIGxvbmcpKHAtPnRocmVhZF9pbmZvKTsKKwlmcCA9ICgoc3RydWN0IHN3aXRjaF9zdGFjayAqKXAtPnRocmVhZC5rc3ApLT5hNjsKKwlkbyB7CisJCWlmIChmcCA8IHN0YWNrX3BhZ2Urc2l6ZW9mKHN0cnVjdCB0aHJlYWRfaW5mbykgfHwKKwkJICAgIGZwID49IDgxODQrc3RhY2tfcGFnZSkKKwkJCXJldHVybiAwOworCQlwYyA9ICgodW5zaWduZWQgbG9uZyAqKWZwKVsxXTsKKwkJaWYgKCFpbl9zY2hlZF9mdW5jdGlvbnMocGMpKQorCQkJcmV0dXJuIHBjOworCQlmcCA9ICoodW5zaWduZWQgbG9uZyAqKSBmcDsKKwl9IHdoaWxlIChjb3VudCsrIDwgMTYpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJlYjUzMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvcHRyYWNlLmMKQEAgLTAsMCArMSwzOTMgQEAKKy8qCisgKiAgbGludXgvYXJjaC9tNjhrL2tlcm5lbC9wdHJhY2UuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTQgYnkgSGFtaXNoIE1hY2RvbmFsZAorICogIFRha2VuIGZyb20gbGludXgva2VybmVsL3B0cmFjZS5jIGFuZCBtb2RpZmllZCBmb3IgTTY4MHgwLgorICogIGxpbnV4L2tlcm5lbC9wdHJhY2UuYyBpcyBieSBSb3NzIEJpcm8gMS8yMy85MiwgZWRpdGVkIGJ5IExpbnVzIFRvcnZhbGRzCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YKKyAqIHRoaXMgYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKy8qCisgKiBkb2VzIG5vdCB5ZXQgY2F0Y2ggc2lnbmFscyBzZW50IHdoZW4gdGhlIGNoaWxkIGRpZXMuCisgKiBpbiBleGl0LmMgb3IgaW4gc2lnbmFsLmMuCisgKi8KKworLyogZGV0ZXJtaW5lcyB3aGljaCBiaXRzIGluIHRoZSBTUiB0aGUgdXNlciBoYXMgYWNjZXNzIHRvLiAqLworLyogMSA9IGFjY2VzcyAwID0gbm8gYWNjZXNzICovCisjZGVmaW5lIFNSX01BU0sgMHgwMDFmCisKKy8qIHNldHMgdGhlIHRyYWNlIGJpdHMuICovCisjZGVmaW5lIFRSQUNFX0JJVFMgMHg4MDAwCisKKy8qIEZpbmQgdGhlIHN0YWNrIG9mZnNldCBmb3IgYSByZWdpc3RlciwgcmVsYXRpdmUgdG8gdGhyZWFkLmVzcDAuICovCisjZGVmaW5lIFBUX1JFRyhyZWcpCSgobG9uZykmKChzdHJ1Y3QgcHRfcmVncyAqKTApLT5yZWcpCisjZGVmaW5lIFNXX1JFRyhyZWcpCSgobG9uZykmKChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopMCktPnJlZyBcCisJCQkgLSBzaXplb2Yoc3RydWN0IHN3aXRjaF9zdGFjaykpCisvKiBNYXBwaW5nIGZyb20gUFRfeHh4IHRvIHRoZSBzdGFjayBvZmZzZXQgYXQgd2hpY2ggdGhlIHJlZ2lzdGVyIGlzCisgICBzYXZlZC4gIE5vdGljZSB0aGF0IHVzcCBoYXMgbm8gc3RhY2stc2xvdCBhbmQgbmVlZHMgdG8gYmUgdHJlYXRlZAorICAgc3BlY2lhbGx5IChzZWUgZ2V0X3JlZy9wdXRfcmVnIGJlbG93KS4gKi8KK3N0YXRpYyBpbnQgcmVnb2ZmW10gPSB7CisJWzBdCT0gUFRfUkVHKGQxKSwKKwlbMV0JPSBQVF9SRUcoZDIpLAorCVsyXQk9IFBUX1JFRyhkMyksCisJWzNdCT0gUFRfUkVHKGQ0KSwKKwlbNF0JPSBQVF9SRUcoZDUpLAorCVs1XQk9IFNXX1JFRyhkNiksCisJWzZdCT0gU1dfUkVHKGQ3KSwKKwlbN10JPSBQVF9SRUcoYTApLAorCVs4XQk9IFBUX1JFRyhhMSksCisJWzldCT0gUFRfUkVHKGEyKSwKKwlbMTBdCT0gU1dfUkVHKGEzKSwKKwlbMTFdCT0gU1dfUkVHKGE0KSwKKwlbMTJdCT0gU1dfUkVHKGE1KSwKKwlbMTNdCT0gU1dfUkVHKGE2KSwKKwlbMTRdCT0gUFRfUkVHKGQwKSwKKwlbMTVdCT0gLTEsCisJWzE2XQk9IFBUX1JFRyhvcmlnX2QwKSwKKwlbMTddCT0gUFRfUkVHKHNyKSwKKwlbMThdCT0gUFRfUkVHKHBjKSwKK307CisKKy8qCisgKiBHZXQgY29udGVudHMgb2YgcmVnaXN0ZXIgUkVHTk8gaW4gdGFzayBUQVNLLgorICovCitzdGF0aWMgaW5saW5lIGxvbmcgZ2V0X3JlZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCByZWdubykKK3sKKwl1bnNpZ25lZCBsb25nICphZGRyOworCisJaWYgKHJlZ25vID09IFBUX1VTUCkKKwkJYWRkciA9ICZ0YXNrLT50aHJlYWQudXNwOworCWVsc2UgaWYgKHJlZ25vIDwgc2l6ZW9mKHJlZ29mZikvc2l6ZW9mKHJlZ29mZlswXSkpCisJCWFkZHIgPSAodW5zaWduZWQgbG9uZyAqKSh0YXNrLT50aHJlYWQuZXNwMCArIHJlZ29mZltyZWdub10pOworCWVsc2UKKwkJcmV0dXJuIDA7CisJcmV0dXJuICphZGRyOworfQorCisvKgorICogV3JpdGUgY29udGVudHMgb2YgcmVnaXN0ZXIgUkVHTk8gaW4gdGFzayBUQVNLLgorICovCitzdGF0aWMgaW5saW5lIGludCBwdXRfcmVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHJlZ25vLAorCQkJICB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJdW5zaWduZWQgbG9uZyAqYWRkcjsKKworCWlmIChyZWdubyA9PSBQVF9VU1ApCisJCWFkZHIgPSAmdGFzay0+dGhyZWFkLnVzcDsKKwllbHNlIGlmIChyZWdubyA8IHNpemVvZihyZWdvZmYpL3NpemVvZihyZWdvZmZbMF0pKQorCQlhZGRyID0gKHVuc2lnbmVkIGxvbmcgKikgKHRhc2stPnRocmVhZC5lc3AwICsgcmVnb2ZmW3JlZ25vXSk7CisJZWxzZQorCQlyZXR1cm4gLTE7CisJKmFkZHIgPSBkYXRhOworCXJldHVybiAwOworfQorCisvKgorICogQ2FsbGVkIGJ5IGtlcm5lbC9wdHJhY2UuYyB3aGVuIGRldGFjaGluZy4uCisgKgorICogTWFrZSBzdXJlIHRoZSBzaW5nbGUgc3RlcCBiaXQgaXMgbm90IHNldC4KKyAqLwordm9pZCBwdHJhY2VfZGlzYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCS8qIG1ha2Ugc3VyZSB0aGUgc2luZ2xlIHN0ZXAgYml0IGlzIG5vdCBzZXQuICovCisJdG1wID0gZ2V0X3JlZyhjaGlsZCwgUFRfU1IpICYgfihUUkFDRV9CSVRTIDw8IDE2KTsKKwlwdXRfcmVnKGNoaWxkLCBQVF9TUiwgdG1wKTsKKwljaGlsZC0+dGhyZWFkLndvcmsuZGVsYXllZF90cmFjZSA9IDA7CisJY2hpbGQtPnRocmVhZC53b3JrLnN5c2NhbGxfdHJhY2UgPSAwOworfQorCithc21saW5rYWdlIGludCBzeXNfcHRyYWNlKGxvbmcgcmVxdWVzdCwgbG9uZyBwaWQsIGxvbmcgYWRkciwgbG9uZyBkYXRhKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQ7CisJaW50IHJldDsKKworCWxvY2tfa2VybmVsKCk7CisJcmV0ID0gLUVQRVJNOworCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9UUkFDRU1FKSB7CisJCS8qIGFyZSB3ZSBhbHJlYWR5IGJlaW5nIHRyYWNlZD8gKi8KKwkJaWYgKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpCisJCQlnb3RvIG91dDsKKwkJLyogc2V0IHRoZSBwdHJhY2UgYml0IGluIHRoZSBwcm9jZXNzIGZsYWdzLiAqLworCQljdXJyZW50LT5wdHJhY2UgfD0gUFRfUFRSQUNFRDsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXQ7CisJfQorCXJldCA9IC1FU1JDSDsKKwlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCWNoaWxkID0gZmluZF90YXNrX2J5X3BpZChwaWQpOworCWlmIChjaGlsZCkKKwkJZ2V0X3Rhc2tfc3RydWN0KGNoaWxkKTsKKwlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJaWYgKCFjaGlsZCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSAtRVBFUk07CisJaWYgKHBpZCA9PSAxKQkJLyogeW91IG1heSBub3QgbWVzcyB3aXRoIGluaXQgKi8KKwkJZ290byBvdXRfdHNrOworCisJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX0FUVEFDSCkgeworCQlyZXQgPSBwdHJhY2VfYXR0YWNoKGNoaWxkKTsKKwkJZ290byBvdXRfdHNrOworCX0KKworCXJldCA9IHB0cmFjZV9jaGVja19hdHRhY2goY2hpbGQsIHJlcXVlc3QgPT0gUFRSQUNFX0tJTEwpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF90c2s7CisKKwlzd2l0Y2ggKHJlcXVlc3QpIHsKKwkvKiB3aGVuIEkgYW5kIEQgc3BhY2UgYXJlIHNlcGFyYXRlLCB0aGVzZSB3aWxsIG5lZWQgdG8gYmUgZml4ZWQuICovCisJCWNhc2UgUFRSQUNFX1BFRUtURVhUOiAvKiByZWFkIHdvcmQgYXQgbG9jYXRpb24gYWRkci4gKi8KKwkJY2FzZSBQVFJBQ0VfUEVFS0RBVEE6IHsKKwkJCXVuc2lnbmVkIGxvbmcgdG1wOworCQkJaW50IGNvcGllZDsKKworCQkJY29waWVkID0gYWNjZXNzX3Byb2Nlc3Nfdm0oY2hpbGQsIGFkZHIsICZ0bXAsIHNpemVvZih0bXApLCAwKTsKKwkJCXJldCA9IC1FSU87CisJCQlpZiAoY29waWVkICE9IHNpemVvZih0bXApKQorCQkJCWJyZWFrOworCQkJcmV0ID0gcHV0X3VzZXIodG1wLCh1bnNpZ25lZCBsb25nICopIGRhdGEpOworCQkJYnJlYWs7CisJCX0KKworCS8qIHJlYWQgdGhlIHdvcmQgYXQgbG9jYXRpb24gYWRkciBpbiB0aGUgVVNFUiBhcmVhLiAqLworCQljYXNlIFBUUkFDRV9QRUVLVVNSOiB7CisJCQl1bnNpZ25lZCBsb25nIHRtcDsKKworCQkJcmV0ID0gLUVJTzsKKwkJCWlmICgoYWRkciAmIDMpIHx8IGFkZHIgPCAwIHx8CisJCQkgICAgYWRkciA+IHNpemVvZihzdHJ1Y3QgdXNlcikgLSAzKQorCQkJCWJyZWFrOworCisJCQl0bXAgPSAwOyAgLyogRGVmYXVsdCByZXR1cm4gY29uZGl0aW9uICovCisJCQlhZGRyID0gYWRkciA+PiAyOyAvKiB0ZW1wb3JhcnkgaGFjay4gKi8KKwkJCXJldCA9IC1FSU87CisJCQlpZiAoYWRkciA8IDE5KSB7CisJCQkJdG1wID0gZ2V0X3JlZyhjaGlsZCwgYWRkcik7CisJCQkJaWYgKGFkZHIgPT0gUFRfU1IpCisJCQkJCXRtcCA+Pj0gMTY7CisJCQl9IGVsc2UgaWYgKGFkZHIgPj0gMjEgJiYgYWRkciA8IDQ5KSB7CisJCQkJdG1wID0gY2hpbGQtPnRocmVhZC5mcFthZGRyIC0gMjFdOworI2lmZGVmIENPTkZJR19NNjhLRlBVX0VNVQorCQkJCS8qIENvbnZlcnQgaW50ZXJuYWwgZnB1IHJlZyByZXByZXNlbnRhdGlvbgorCQkJCSAqIGludG8gbG9uZyBkb3VibGUgZm9ybWF0CisJCQkJICovCisJCQkJaWYgKEZQVV9JU19FTVUgJiYgKGFkZHIgPCA0NSkgJiYgIShhZGRyICUgMykpCisJCQkJCXRtcCA9ICgodG1wICYgMHhmZmZmMDAwMCkgPDwgMTUpIHwKKwkJCQkJICAgICAgKCh0bXAgJiAweDAwMDBmZmZmKSA8PCAxNik7CisjZW5kaWYKKwkJCX0gZWxzZQorCQkJCWJyZWFrOworCQkJcmV0ID0gcHV0X3VzZXIodG1wLCh1bnNpZ25lZCBsb25nICopIGRhdGEpOworCQkJYnJlYWs7CisJCX0KKworICAgICAgLyogd2hlbiBJIGFuZCBEIHNwYWNlIGFyZSBzZXBhcmF0ZSwgdGhpcyB3aWxsIGhhdmUgdG8gYmUgZml4ZWQuICovCisJCWNhc2UgUFRSQUNFX1BPS0VURVhUOiAvKiB3cml0ZSB0aGUgd29yZCBhdCBsb2NhdGlvbiBhZGRyLiAqLworCQljYXNlIFBUUkFDRV9QT0tFREFUQToKKwkJCXJldCA9IDA7CisJCQlpZiAoYWNjZXNzX3Byb2Nlc3Nfdm0oY2hpbGQsIGFkZHIsICZkYXRhLCBzaXplb2YoZGF0YSksIDEpID09IHNpemVvZihkYXRhKSkKKwkJCQlicmVhazsKKwkJCXJldCA9IC1FSU87CisJCQlicmVhazsKKworCQljYXNlIFBUUkFDRV9QT0tFVVNSOiAvKiB3cml0ZSB0aGUgd29yZCBhdCBsb2NhdGlvbiBhZGRyIGluIHRoZSBVU0VSIGFyZWEgKi8KKwkJCXJldCA9IC1FSU87CisJCQlpZiAoKGFkZHIgJiAzKSB8fCBhZGRyIDwgMCB8fAorCQkJICAgIGFkZHIgPiBzaXplb2Yoc3RydWN0IHVzZXIpIC0gMykKKwkJCQlicmVhazsKKworCQkJYWRkciA9IGFkZHIgPj4gMjsgLyogdGVtcG9yYXJ5IGhhY2suICovCisKKwkJCWlmIChhZGRyID09IFBUX1NSKSB7CisJCQkJZGF0YSAmPSBTUl9NQVNLOworCQkJCWRhdGEgPDw9IDE2OworCQkJCWRhdGEgfD0gZ2V0X3JlZyhjaGlsZCwgUFRfU1IpICYgfihTUl9NQVNLIDw8IDE2KTsKKwkJCX0KKwkJCWlmIChhZGRyIDwgMTkpIHsKKwkJCQlpZiAocHV0X3JlZyhjaGlsZCwgYWRkciwgZGF0YSkpCisJCQkJCWJyZWFrOworCQkJCXJldCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoYWRkciA+PSAyMSAmJiBhZGRyIDwgNDgpCisJCQl7CisjaWZkZWYgQ09ORklHX002OEtGUFVfRU1VCisJCQkJLyogQ29udmVydCBsb25nIGRvdWJsZSBmb3JtYXQKKwkJCQkgKiBpbnRvIGludGVybmFsIGZwdSByZWcgcmVwcmVzZW50YXRpb24KKwkJCQkgKi8KKwkJCQlpZiAoRlBVX0lTX0VNVSAmJiAoYWRkciA8IDQ1KSAmJiAhKGFkZHIgJSAzKSkgeworCQkJCQlkYXRhID0gKHVuc2lnbmVkIGxvbmcpZGF0YSA8PCAxNTsKKwkJCQkJZGF0YSA9IChkYXRhICYgMHhmZmZmMDAwMCkgfAorCQkJCQkgICAgICAgKChkYXRhICYgMHgwMDAwZmZmZikgPj4gMSk7CisJCQkJfQorI2VuZGlmCisJCQkJY2hpbGQtPnRocmVhZC5mcFthZGRyIC0gMjFdID0gZGF0YTsKKwkJCQlyZXQgPSAwOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBQVFJBQ0VfU1lTQ0FMTDogLyogY29udGludWUgYW5kIHN0b3AgYXQgbmV4dCAocmV0dXJuIGZyb20pIHN5c2NhbGwgKi8KKwkJY2FzZSBQVFJBQ0VfQ09OVDogeyAvKiByZXN0YXJ0IGFmdGVyIHNpZ25hbC4gKi8KKwkJCWxvbmcgdG1wOworCisJCQlyZXQgPSAtRUlPOworCQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID4gX05TSUcpCisJCQkJYnJlYWs7CisJCQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCkgeworCQkJCQljaGlsZC0+dGhyZWFkLndvcmsuc3lzY2FsbF90cmFjZSA9IH4wOworCQkJfSBlbHNlIHsKKwkJCQkJY2hpbGQtPnRocmVhZC53b3JrLnN5c2NhbGxfdHJhY2UgPSAwOworCQkJfQorCQkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7CisJCQkvKiBtYWtlIHN1cmUgdGhlIHNpbmdsZSBzdGVwIGJpdCBpcyBub3Qgc2V0LiAqLworCQkJdG1wID0gZ2V0X3JlZyhjaGlsZCwgUFRfU1IpICYgfihUUkFDRV9CSVRTIDw8IDE2KTsKKwkJCXB1dF9yZWcoY2hpbGQsIFBUX1NSLCB0bXApOworCQkJY2hpbGQtPnRocmVhZC53b3JrLmRlbGF5ZWRfdHJhY2UgPSAwOworCQkJd2FrZV91cF9wcm9jZXNzKGNoaWxkKTsKKwkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQorCisvKgorICogbWFrZSB0aGUgY2hpbGQgZXhpdC4gIEJlc3QgSSBjYW4gZG8gaXMgc2VuZCBpdCBhIHNpZ2tpbGwuCisgKiBwZXJoYXBzIGl0IHNob3VsZCBiZSBwdXQgaW4gdGhlIHN0YXR1cyB0aGF0IGl0IHdhbnRzIHRvCisgKiBleGl0LgorICovCisJCWNhc2UgUFRSQUNFX0tJTEw6IHsKKwkJCWxvbmcgdG1wOworCisJCQlyZXQgPSAwOworCQkJaWYgKGNoaWxkLT5leGl0X3N0YXRlID09IEVYSVRfWk9NQklFKSAvKiBhbHJlYWR5IGRlYWQgKi8KKwkJCQlicmVhazsKKwkJCWNoaWxkLT5leGl0X2NvZGUgPSBTSUdLSUxMOworCS8qIG1ha2Ugc3VyZSB0aGUgc2luZ2xlIHN0ZXAgYml0IGlzIG5vdCBzZXQuICovCisJCQl0bXAgPSBnZXRfcmVnKGNoaWxkLCBQVF9TUikgJiB+KFRSQUNFX0JJVFMgPDwgMTYpOworCQkJcHV0X3JlZyhjaGlsZCwgUFRfU1IsIHRtcCk7CisJCQljaGlsZC0+dGhyZWFkLndvcmsuZGVsYXllZF90cmFjZSA9IDA7CisJCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOworCQkJYnJlYWs7CisJCX0KKworCQljYXNlIFBUUkFDRV9TSU5HTEVTVEVQOiB7ICAvKiBzZXQgdGhlIHRyYXAgZmxhZy4gKi8KKwkJCWxvbmcgdG1wOworCisJCQlyZXQgPSAtRUlPOworCQkJaWYgKCh1bnNpZ25lZCBsb25nKSBkYXRhID4gX05TSUcpCisJCQkJYnJlYWs7CisJCQljaGlsZC0+dGhyZWFkLndvcmsuc3lzY2FsbF90cmFjZSA9IDA7CisJCQl0bXAgPSBnZXRfcmVnKGNoaWxkLCBQVF9TUikgfCAoVFJBQ0VfQklUUyA8PCAxNik7CisJCQlwdXRfcmVnKGNoaWxkLCBQVF9TUiwgdG1wKTsKKwkJCWNoaWxkLT50aHJlYWQud29yay5kZWxheWVkX3RyYWNlID0gMTsKKworCQkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7CisJLyogZ2l2ZSBpdCBhIGNoYW5jZSB0byBydW4uICovCisJCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBQVFJBQ0VfREVUQUNIOgkvKiBkZXRhY2ggYSBwcm9jZXNzIHRoYXQgd2FzIGF0dGFjaGVkLiAqLworCQkJcmV0ID0gcHRyYWNlX2RldGFjaChjaGlsZCwgZGF0YSk7CisJCQlicmVhazsKKworCQljYXNlIFBUUkFDRV9HRVRSRUdTOiB7IC8qIEdldCBhbGwgZ3AgcmVncyBmcm9tIHRoZSBjaGlsZC4gKi8KKwkJCWludCBpOworCQkJdW5zaWduZWQgbG9uZyB0bXA7CisJCQlmb3IgKGkgPSAwOyBpIDwgMTk7IGkrKykgeworCQkJICAgIHRtcCA9IGdldF9yZWcoY2hpbGQsIGkpOworCQkJICAgIGlmIChpID09IFBUX1NSKQorCQkJCXRtcCA+Pj0gMTY7CisJCQkgICAgaWYgKHB1dF91c2VyKHRtcCwgKHVuc2lnbmVkIGxvbmcgKikgZGF0YSkpIHsKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJCWJyZWFrOworCQkJICAgIH0KKwkJCSAgICBkYXRhICs9IHNpemVvZihsb25nKTsKKwkJCX0KKwkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCWNhc2UgUFRSQUNFX1NFVFJFR1M6IHsgLyogU2V0IGFsbCBncCByZWdzIGluIHRoZSBjaGlsZC4gKi8KKwkJCWludCBpOworCQkJdW5zaWduZWQgbG9uZyB0bXA7CisJCQlmb3IgKGkgPSAwOyBpIDwgMTk7IGkrKykgeworCQkJICAgIGlmIChnZXRfdXNlcih0bXAsICh1bnNpZ25lZCBsb25nICopIGRhdGEpKSB7CisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQlicmVhazsKKwkJCSAgICB9CisJCQkgICAgaWYgKGkgPT0gUFRfU1IpIHsKKwkJCQl0bXAgJj0gU1JfTUFTSzsKKwkJCQl0bXAgPDw9IDE2OworCQkJCXRtcCB8PSBnZXRfcmVnKGNoaWxkLCBQVF9TUikgJiB+KFNSX01BU0sgPDwgMTYpOworCQkJICAgIH0KKwkJCSAgICBwdXRfcmVnKGNoaWxkLCBpLCB0bXApOworCQkJICAgIGRhdGEgKz0gc2l6ZW9mKGxvbmcpOworCQkJfQorCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBQVFJBQ0VfR0VURlBSRUdTOiB7IC8qIEdldCB0aGUgY2hpbGQgRlBVIHN0YXRlLiAqLworCQkJcmV0ID0gMDsKKwkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgKilkYXRhLCAmY2hpbGQtPnRocmVhZC5mcCwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgdXNlcl9tNjhrZnBfc3RydWN0KSkpCisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBQVFJBQ0VfU0VURlBSRUdTOiB7IC8qIFNldCB0aGUgY2hpbGQgRlBVIHN0YXRlLiAqLworCQkJcmV0ID0gMDsKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmY2hpbGQtPnRocmVhZC5mcCwgKHZvaWQgKilkYXRhLAorCQkJCQkgICBzaXplb2Yoc3RydWN0IHVzZXJfbTY4a2ZwX3N0cnVjdCkpKQorCQkJCXJldCA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCisJCWRlZmF1bHQ6CisJCQlyZXQgPSBwdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7CisJCQlicmVhazsKKwl9CitvdXRfdHNrOgorCXB1dF90YXNrX3N0cnVjdChjaGlsZCk7CitvdXQ6CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7Cit9CisKK2FzbWxpbmthZ2Ugdm9pZCBzeXNjYWxsX3RyYWNlKHZvaWQpCit7CisJaWYgKCFjdXJyZW50LT50aHJlYWQud29yay5kZWxheWVkX3RyYWNlICYmCisJICAgICFjdXJyZW50LT50aHJlYWQud29yay5zeXNjYWxsX3RyYWNlKQorCQlyZXR1cm47CisJcHRyYWNlX25vdGlmeShTSUdUUkFQIHwgKChjdXJyZW50LT5wdHJhY2UgJiBQVF9UUkFDRVNZU0dPT0QpCisJCQkJID8gMHg4MCA6IDApKTsKKwkvKgorCSAqIHRoaXMgaXNuJ3QgdGhlIHNhbWUgYXMgY29udGludWluZyB3aXRoIGEgc2lnbmFsLCBidXQgaXQgd2lsbCBkbworCSAqIGZvciBub3JtYWwgdXNlLiAgc3RyYWNlIG9ubHkgY29udGludWVzIHdpdGggYSBzaWduYWwgaWYgdGhlCisJICogc3RvcHBpbmcgc2lnbmFsIGlzIG5vdCBTSUdUUkFQLiAgLWJybAorCSAqLworCWlmIChjdXJyZW50LT5leGl0X2NvZGUpIHsKKwkJc2VuZF9zaWcoY3VycmVudC0+ZXhpdF9jb2RlLCBjdXJyZW50LCAxKTsKKwkJY3VycmVudC0+ZXhpdF9jb2RlID0gMDsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3NlbWFwaG9yZS5jIGIvYXJjaC9tNjhrL2tlcm5lbC9zZW1hcGhvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWJiNzliCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9zZW1hcGhvcmUuYwpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqICBHZW5lcmljIHNlbWFwaG9yZSBjb2RlLiBCdXllciBiZXdhcmUuIERvIHlvdXIgb3duCisgKiBzcGVjaWZpYyBjaGFuZ2VzIGluIDxhc20vc2VtYXBob3JlLWhlbHBlci5oPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLWhlbHBlci5oPgorCisjaWZuZGVmIENPTkZJR19STVdfSU5TTlMKK3NwaW5sb2NrX3Qgc2VtYXBob3JlX3dha2VfbG9jazsKKyNlbmRpZgorCisvKgorICogU2VtYXBob3JlcyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgYSB0d28td2F5IGNvdW50ZXI6CisgKiBUaGUgImNvdW50IiB2YXJpYWJsZSBpcyBkZWNyZW1lbnRlZCBmb3IgZWFjaCBwcm9jZXNzCisgKiB0aGF0IHRyaWVzIHRvIHNsZWVwLCB3aGlsZSB0aGUgIndha2luZyIgdmFyaWFibGUgaXMKKyAqIGluY3JlbWVudGVkIHdoZW4gdGhlICJ1cCgpIiBjb2RlIGdvZXMgdG8gd2FrZSB1cCB3YWl0aW5nCisgKiBwcm9jZXNzZXMuCisgKgorICogTm90YWJseSwgdGhlIGlubGluZSAidXAoKSIgYW5kICJkb3duKCkiIGZ1bmN0aW9ucyBjYW4KKyAqIGVmZmljaWVudGx5IHRlc3QgaWYgdGhleSBuZWVkIHRvIGRvIGFueSBleHRyYSB3b3JrICh1cAorICogbmVlZHMgdG8gZG8gc29tZXRoaW5nIG9ubHkgaWYgY291bnQgd2FzIG5lZ2F0aXZlIGJlZm9yZQorICogdGhlIGluY3JlbWVudCBvcGVyYXRpb24uCisgKgorICogd2FraW5nX25vbl96ZXJvKCkgKGZyb20gYXNtL3NlbWFwaG9yZS5oKSBtdXN0IGV4ZWN1dGUKKyAqIGF0b21pY2FsbHkuCisgKgorICogV2hlbiBfX3VwKCkgaXMgY2FsbGVkLCB0aGUgY291bnQgd2FzIG5lZ2F0aXZlIGJlZm9yZQorICogaW5jcmVtZW50aW5nIGl0LCBhbmQgd2UgbmVlZCB0byB3YWtlIHVwIHNvbWVib2R5LgorICoKKyAqIFRoaXMgcm91dGluZSBhZGRzIG9uZSB0byB0aGUgY291bnQgb2YgcHJvY2Vzc2VzIHRoYXQgbmVlZCB0bworICogd2FrZSB1cCBhbmQgZXhpdC4gIEFMTCB3YWl0aW5nIHByb2Nlc3NlcyBhY3R1YWxseSB3YWtlIHVwIGJ1dAorICogb25seSB0aGUgb25lIHRoYXQgZ2V0cyB0byB0aGUgIndha2luZyIgZmllbGQgZmlyc3Qgd2lsbCBnYXRlCisgKiB0aHJvdWdoIGFuZCBhY3F1aXJlIHRoZSBzZW1hcGhvcmUuICBUaGUgb3RoZXJzIHdpbGwgZ28gYmFjaworICogdG8gc2xlZXAuCisgKgorICogTm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSBjYWxsZWQgd2hlbiB0aGVyZSBpcworICogY29udGVudGlvbiBvbiB0aGUgbG9jaywgYW5kIGFzIHN1Y2ggYWxsIHRoaXMgaXMgdGhlCisgKiAibm9uLWNyaXRpY2FsIiBwYXJ0IG9mIHRoZSB3aG9sZSBzZW1hcGhvcmUgYnVzaW5lc3MuIFRoZQorICogY3JpdGljYWwgcGFydCBpcyB0aGUgaW5saW5lIHN0dWZmIGluIDxhc20vc2VtYXBob3JlLmg+CisgKiB3aGVyZSB3ZSB3YW50IHRvIGF2b2lkIGFueSBleHRyYSBqdW1wcyBhbmQgY2FsbHMuCisgKi8KK3ZvaWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCit7CisJd2FrZV9vbmVfbW9yZShzZW0pOworCXdha2VfdXAoJnNlbS0+d2FpdCk7Cit9CisKKy8qCisgKiBQZXJmb3JtIHRoZSAiZG93biIgZnVuY3Rpb24uICBSZXR1cm4gemVybyBmb3Igc2VtYXBob3JlIGFjcXVpcmVkLAorICogcmV0dXJuIG5lZ2F0aXZlIGZvciBzaWduYWxsZWQgb3V0IG9mIHRoZSBmdW5jdGlvbi4KKyAqCisgKiBJZiBjYWxsZWQgZnJvbSBfX2Rvd24sIHRoZSByZXR1cm4gaXMgaWdub3JlZCBhbmQgdGhlIHdhaXQgbG9vcCBpcworICogbm90IGludGVycnVwdGlibGUuICBUaGlzIG1lYW5zIHRoYXQgYSB0YXNrIHdhaXRpbmcgb24gYSBzZW1hcGhvcmUKKyAqIHVzaW5nICJkb3duKCkiIGNhbm5vdCBiZSBraWxsZWQgdW50aWwgc29tZW9uZSBkb2VzIGFuICJ1cCgpIiBvbgorICogdGhlIHNlbWFwaG9yZS4KKyAqCisgKiBJZiBjYWxsZWQgZnJvbSBfX2Rvd25faW50ZXJydXB0aWJsZSwgdGhlIHJldHVybiB2YWx1ZSBnZXRzIGNoZWNrZWQKKyAqIHVwb24gcmV0dXJuLiAgSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBuZWdhdGl2ZSB0aGVuIHRoZSB0YXNrIGNvbnRpbnVlcworICogd2l0aCB0aGUgbmVnYXRpdmUgdmFsdWUgaW4gdGhlIHJldHVybiByZWdpc3RlciAoaXQgY2FuIGJlIHRlc3RlZCBieQorICogdGhlIGNhbGxlcikuCisgKgorICogRWl0aGVyIGZvcm0gbWF5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCAidXAoKSIuCisgKgorICovCisKKworI2RlZmluZSBET1dOX0hFQUQodGFza19zdGF0ZSkJCQkJCQlcCisJCQkJCQkJCQlcCisJCQkJCQkJCQlcCisJY3VycmVudC0+c3RhdGUgPSAodGFza19zdGF0ZSk7CQkJCQlcCisJYWRkX3dhaXRfcXVldWUoJnNlbS0+d2FpdCwgJndhaXQpOwkJCQlcCisJCQkJCQkJCQlcCisJLyoJCQkJCQkJCVwKKwkgKiBPaywgd2UncmUgc2V0IHVwLiAgc2VtLT5jb3VudCBpcyBrbm93biB0byBiZSBsZXNzIHRoYW4gemVybwlcCisJICogc28gd2UgbXVzdCB3YWl0LgkJCQkJCVwKKwkgKgkJCQkJCQkJXAorCSAqIFdlIGNhbiBsZXQgZ28gdGhlIGxvY2sgZm9yIHB1cnBvc2VzIG9mIHdhaXRpbmcuCQlcCisJICogV2UgcmUtYWNxdWlyZSBpdCBhZnRlciBhd2FraW5nIHNvIGFzIHRvIHByb3RlY3QJCVwKKwkgKiBhbGwgc2VtYXBob3JlIG9wZXJhdGlvbnMuCQkJCQlcCisJICoJCQkJCQkJCVwKKwkgKiBJZiAidXAoKSIgaXMgY2FsbGVkIGJlZm9yZSB3ZSBjYWxsIHdha2luZ19ub25femVybygpIHRoZW4JXAorCSAqIHdlIHdpbGwgY2F0Y2ggaXQgcmlnaHQgYXdheS4gIElmIGl0IGlzIGNhbGxlZCBsYXRlciB0aGVuCVwKKwkgKiB3ZSB3aWxsIGhhdmUgdG8gZ28gdGhyb3VnaCBhIHdha2V1cCBjeWNsZSB0byBjYXRjaCBpdC4JXAorCSAqCQkJCQkJCQlcCisJICogTXVsdGlwbGUgd2FpdGVycyBjb250ZW5kIGZvciB0aGUgc2VtYXBob3JlIGxvY2sgdG8gc2VlCVwKKwkgKiB3aG8gZ2V0cyB0byBnYXRlIHRocm91Z2ggYW5kIHdobyBoYXMgdG8gd2FpdCBzb21lIG1vcmUuCVwKKwkgKi8JCQkJCQkJCVwKKwlmb3IgKDs7KSB7CisKKyNkZWZpbmUgRE9XTl9UQUlMKHRhc2tfc3RhdGUpCQkJXAorCQljdXJyZW50LT5zdGF0ZSA9ICh0YXNrX3N0YXRlKTsJXAorCX0JCQkJCVwKKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsJCVwKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmc2VtLT53YWl0LCAmd2FpdCk7CisKK3ZvaWQgX19zY2hlZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKK3sKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworCURPV05fSEVBRChUQVNLX1VOSU5URVJSVVBUSUJMRSkKKwlpZiAod2FraW5nX25vbl96ZXJvKHNlbSkpCisJCWJyZWFrOworCXNjaGVkdWxlKCk7CisJRE9XTl9UQUlMKFRBU0tfVU5JTlRFUlJVUFRJQkxFKQorfQorCitpbnQgX19zY2hlZCBfX2Rvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCWludCByZXQgPSAwOworCisJRE9XTl9IRUFEKFRBU0tfSU5URVJSVVBUSUJMRSkKKworCXJldCA9IHdha2luZ19ub25femVyb19pbnRlcnJ1cHRpYmxlKHNlbSwgY3VycmVudCk7CisJaWYgKHJldCkKKwl7CisJCWlmIChyZXQgPT0gMSkKKwkJCS8qIHJldCAhPSAwIG9ubHkgaWYgd2UgZ2V0IGludGVycnVwdGVkIC1hcmNhICovCisJCQlyZXQgPSAwOworCQlicmVhazsKKwl9CisJc2NoZWR1bGUoKTsKKwlET1dOX1RBSUwoVEFTS19JTlRFUlJVUFRJQkxFKQorCXJldHVybiByZXQ7Cit9CisKK2ludCBfX2Rvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQoreworCXJldHVybiB3YWtpbmdfbm9uX3plcm9fdHJ5bG9jayhzZW0pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9tNjhrL2tlcm5lbC9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2Y2E5OTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsva2VybmVsL3NldHVwLmMKQEAgLTAsMCArMSw1NDUgQEAKKy8qCisgKiAgbGludXgvYXJjaC9tNjhrL2tlcm5lbC9zZXR1cC5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NSAgSGFtaXNoIE1hY2RvbmFsZAorICovCisKKy8qCisgKiBUaGlzIGZpbGUgaGFuZGxlcyB0aGUgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBwYXJ0cyBvZiBzeXN0ZW0gc2V0dXAKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KKworI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2lmZGVmIENPTkZJR19BTUlHQQorI2luY2x1ZGUgPGFzbS9hbWlnYWh3Lmg+CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVRBUkkKKyNpbmNsdWRlIDxhc20vYXRhcmlody5oPgorI2luY2x1ZGUgPGFzbS9hdGFyaV9zdHJhbS5oPgorI2VuZGlmCisjaWZkZWYgQ09ORklHX1NVTjNYCisjaW5jbHVkZSA8YXNtL2R2bWEuaD4KKyNlbmRpZgorCit1bnNpZ25lZCBsb25nIG02OGtfbWFjaHR5cGU7Cit1bnNpZ25lZCBsb25nIG02OGtfY3B1dHlwZTsKK3Vuc2lnbmVkIGxvbmcgbTY4a19mcHV0eXBlOwordW5zaWduZWQgbG9uZyBtNjhrX21tdXR5cGU7CisjaWZkZWYgQ09ORklHX1ZNRQordW5zaWduZWQgbG9uZyB2bWVfYnJkdHlwZTsKKyNlbmRpZgorCitpbnQgbTY4a19pczA0MG9yMDYwOworCitleHRlcm4gaW50IGVuZDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGF2YWlsbWVtOworCitpbnQgbTY4a19udW1fbWVtb3J5OworaW50IG02OGtfcmVhbG51bV9tZW1vcnk7Cit1bnNpZ25lZCBsb25nIG02OGtfbWVtb2Zmc2V0Oworc3RydWN0IG1lbV9pbmZvIG02OGtfbWVtb3J5W05VTV9NRU1JTkZPXTsKKworc3RhdGljIHN0cnVjdCBtZW1faW5mbyBtNjhrX3JhbWRpc2s7CisKK3N0YXRpYyBjaGFyIG02OGtfY29tbWFuZF9saW5lW0NMX1NJWkVdOworCitjaGFyIG02OGtfZGVidWdfZGV2aWNlWzZdID0gIiI7CisKK3ZvaWQgKCptYWNoX3NjaGVkX2luaXQpIChpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSkgX19pbml0ZGF0YSA9IE5VTEw7CisvKiBtYWNoaW5lIGRlcGVuZGVudCBpcnEgZnVuY3Rpb25zICovCit2b2lkICgqbWFjaF9pbml0X0lSUSkgKHZvaWQpIF9faW5pdGRhdGEgPSBOVUxMOworaXJxcmV0dXJuX3QgKCooKm1hY2hfZGVmYXVsdF9oYW5kbGVyKVtdKSAoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOwordm9pZCAoKm1hY2hfZ2V0X21vZGVsKSAoY2hhciAqbW9kZWwpOworaW50ICgqbWFjaF9nZXRfaGFyZHdhcmVfbGlzdCkgKGNoYXIgKmJ1ZmZlcik7CitpbnQgKCptYWNoX2dldF9pcnFfbGlzdCkgKHN0cnVjdCBzZXFfZmlsZSAqLCB2b2lkICopOworaXJxcmV0dXJuX3QgKCptYWNoX3Byb2Nlc3NfaW50KSAoaW50LCBzdHJ1Y3QgcHRfcmVncyAqKTsKKy8qIG1hY2hpbmUgZGVwZW5kZW50IHRpbWVyIGZ1bmN0aW9ucyAqLwordW5zaWduZWQgbG9uZyAoKm1hY2hfZ2V0dGltZW9mZnNldCkgKHZvaWQpOworaW50ICgqbWFjaF9od2NsaykgKGludCwgc3RydWN0IHJ0Y190aW1lKik7CitpbnQgKCptYWNoX3NldF9jbG9ja19tbXNzKSAodW5zaWduZWQgbG9uZyk7Cit1bnNpZ25lZCBpbnQgKCptYWNoX2dldF9zcykodm9pZCk7CitpbnQgKCptYWNoX2dldF9ydGNfcGxsKShzdHJ1Y3QgcnRjX3BsbF9pbmZvICopOworaW50ICgqbWFjaF9zZXRfcnRjX3BsbCkoc3RydWN0IHJ0Y19wbGxfaW5mbyAqKTsKK3ZvaWQgKCptYWNoX3Jlc2V0KSggdm9pZCApOwordm9pZCAoKm1hY2hfaGFsdCkoIHZvaWQgKTsKK3ZvaWQgKCptYWNoX3Bvd2VyX29mZikoIHZvaWQgKTsKK2xvbmcgbWFjaF9tYXhfZG1hX2FkZHJlc3MgPSAweDAwZmZmZmZmOyAvKiBkZWZhdWx0IHNldCB0byB0aGUgbG93ZXIgMTZNQiAqLworI2lmIGRlZmluZWQoQ09ORklHX0FNSUdBX0ZMT1BQWSkgfHwgZGVmaW5lZChDT05GSUdfQVRBUklfRkxPUFBZKQordm9pZCAoKm1hY2hfZmxvcHB5X3NldHVwKSAoY2hhciAqLCBpbnQgKikgX19pbml0ZGF0YSA9IE5VTEw7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCit2b2lkICgqbWFjaF9oZWFydGJlYXQpIChpbnQpOworRVhQT1JUX1NZTUJPTChtYWNoX2hlYXJ0YmVhdCk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTTY4S19MMl9DQUNIRQordm9pZCAoKm1hY2hfbDJfZmx1c2gpIChpbnQpOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfSU5QVVRfTTY4S19CRUVQKSB8fCBkZWZpbmVkKENPTkZJR19JTlBVVF9NNjhLX0JFRVBfTU9EVUxFKQordm9pZCAoKm1hY2hfYmVlcCkodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfSVNBKSAmJiBkZWZpbmVkKE1VTFRJX0lTQSkKK2ludCBpc2FfdHlwZTsKK2ludCBpc2Ffc2V4OworI2VuZGlmCisKK2V4dGVybiBpbnQgYW1pZ2FfcGFyc2VfYm9vdGluZm8oY29uc3Qgc3RydWN0IGJpX3JlY29yZCAqKTsKK2V4dGVybiBpbnQgYXRhcmlfcGFyc2VfYm9vdGluZm8oY29uc3Qgc3RydWN0IGJpX3JlY29yZCAqKTsKK2V4dGVybiBpbnQgbWFjX3BhcnNlX2Jvb3RpbmZvKGNvbnN0IHN0cnVjdCBiaV9yZWNvcmQgKik7CitleHRlcm4gaW50IHE0MF9wYXJzZV9ib290aW5mbyhjb25zdCBzdHJ1Y3QgYmlfcmVjb3JkICopOworZXh0ZXJuIGludCBidm1lNjAwMF9wYXJzZV9ib290aW5mbyhjb25zdCBzdHJ1Y3QgYmlfcmVjb3JkICopOworZXh0ZXJuIGludCBtdm1lMTZ4X3BhcnNlX2Jvb3RpbmZvKGNvbnN0IHN0cnVjdCBiaV9yZWNvcmQgKik7CitleHRlcm4gaW50IG12bWUxNDdfcGFyc2VfYm9vdGluZm8oY29uc3Qgc3RydWN0IGJpX3JlY29yZCAqKTsKK2V4dGVybiBpbnQgaHAzMDBfcGFyc2VfYm9vdGluZm8oY29uc3Qgc3RydWN0IGJpX3JlY29yZCAqKTsKKworZXh0ZXJuIHZvaWQgY29uZmlnX2FtaWdhKHZvaWQpOworZXh0ZXJuIHZvaWQgY29uZmlnX2F0YXJpKHZvaWQpOworZXh0ZXJuIHZvaWQgY29uZmlnX21hYyh2b2lkKTsKK2V4dGVybiB2b2lkIGNvbmZpZ19zdW4zKHZvaWQpOworZXh0ZXJuIHZvaWQgY29uZmlnX2Fwb2xsbyh2b2lkKTsKK2V4dGVybiB2b2lkIGNvbmZpZ19tdm1lMTQ3KHZvaWQpOworZXh0ZXJuIHZvaWQgY29uZmlnX212bWUxNngodm9pZCk7CitleHRlcm4gdm9pZCBjb25maWdfYnZtZTYwMDAodm9pZCk7CitleHRlcm4gdm9pZCBjb25maWdfaHAzMDAodm9pZCk7CitleHRlcm4gdm9pZCBjb25maWdfcTQwKHZvaWQpOworZXh0ZXJuIHZvaWQgY29uZmlnX3N1bjN4KHZvaWQpOworCitleHRlcm4gdm9pZCBtYWNfZGVidWdnaW5nX3Nob3J0IChpbnQsIHNob3J0KTsKK2V4dGVybiB2b2lkIG1hY19kZWJ1Z2dpbmdfbG9uZyAgKGludCwgbG9uZyk7CisKKyNkZWZpbmUgTUFTS18yNTZLIDB4ZmZmYzAwMDAKKworZXh0ZXJuIHZvaWQgcGFnaW5nX2luaXQodm9pZCk7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBtNjhrX3BhcnNlX2Jvb3RpbmZvKGNvbnN0IHN0cnVjdCBiaV9yZWNvcmQgKnJlY29yZCkKK3sKKyAgICB3aGlsZSAocmVjb3JkLT50YWcgIT0gQklfTEFTVCkgeworCWludCB1bmtub3duID0gMDsKKwljb25zdCB1bnNpZ25lZCBsb25nICpkYXRhID0gcmVjb3JkLT5kYXRhOworCXN3aXRjaCAocmVjb3JkLT50YWcpIHsKKwkgICAgY2FzZSBCSV9NQUNIVFlQRToKKwkgICAgY2FzZSBCSV9DUFVUWVBFOgorCSAgICBjYXNlIEJJX0ZQVVRZUEU6CisJICAgIGNhc2UgQklfTU1VVFlQRToKKwkJLyogQWxyZWFkeSBzZXQgdXAgYnkgaGVhZC5TICovCisJCWJyZWFrOworCisJICAgIGNhc2UgQklfTUVNQ0hVTks6CisJCWlmIChtNjhrX251bV9tZW1vcnkgPCBOVU1fTUVNSU5GTykgeworCQkgICAgbTY4a19tZW1vcnlbbTY4a19udW1fbWVtb3J5XS5hZGRyID0gZGF0YVswXTsKKwkJICAgIG02OGtfbWVtb3J5W202OGtfbnVtX21lbW9yeV0uc2l6ZSA9IGRhdGFbMV07CisJCSAgICBtNjhrX251bV9tZW1vcnkrKzsKKwkJfSBlbHNlCisJCSAgICBwcmludGsoIm02OGtfcGFyc2VfYm9vdGluZm86IHRvbyBtYW55IG1lbW9yeSBjaHVua3NcbiIpOworCQlicmVhazsKKworCSAgICBjYXNlIEJJX1JBTURJU0s6CisJCW02OGtfcmFtZGlzay5hZGRyID0gZGF0YVswXTsKKwkJbTY4a19yYW1kaXNrLnNpemUgPSBkYXRhWzFdOworCQlicmVhazsKKworCSAgICBjYXNlIEJJX0NPTU1BTkRfTElORToKKwkJc3RybGNweShtNjhrX2NvbW1hbmRfbGluZSwgKGNvbnN0IGNoYXIgKilkYXRhLCBzaXplb2YobTY4a19jb21tYW5kX2xpbmUpKTsKKwkJYnJlYWs7CisKKwkgICAgZGVmYXVsdDoKKwkJaWYgKE1BQ0hfSVNfQU1JR0EpCisJCSAgICB1bmtub3duID0gYW1pZ2FfcGFyc2VfYm9vdGluZm8ocmVjb3JkKTsKKwkJZWxzZSBpZiAoTUFDSF9JU19BVEFSSSkKKwkJICAgIHVua25vd24gPSBhdGFyaV9wYXJzZV9ib290aW5mbyhyZWNvcmQpOworCQllbHNlIGlmIChNQUNIX0lTX01BQykKKwkJICAgIHVua25vd24gPSBtYWNfcGFyc2VfYm9vdGluZm8ocmVjb3JkKTsKKwkJZWxzZSBpZiAoTUFDSF9JU19RNDApCisJCSAgICB1bmtub3duID0gcTQwX3BhcnNlX2Jvb3RpbmZvKHJlY29yZCk7CisJCWVsc2UgaWYgKE1BQ0hfSVNfQlZNRTYwMDApCisJCSAgICB1bmtub3duID0gYnZtZTYwMDBfcGFyc2VfYm9vdGluZm8ocmVjb3JkKTsKKwkJZWxzZSBpZiAoTUFDSF9JU19NVk1FMTZ4KQorCQkgICAgdW5rbm93biA9IG12bWUxNnhfcGFyc2VfYm9vdGluZm8ocmVjb3JkKTsKKwkJZWxzZSBpZiAoTUFDSF9JU19NVk1FMTQ3KQorCQkgICAgdW5rbm93biA9IG12bWUxNDdfcGFyc2VfYm9vdGluZm8ocmVjb3JkKTsKKwkJZWxzZSBpZiAoTUFDSF9JU19IUDMwMCkKKwkJICAgIHVua25vd24gPSBocDMwMF9wYXJzZV9ib290aW5mbyhyZWNvcmQpOworCQllbHNlCisJCSAgICB1bmtub3duID0gMTsKKwl9CisJaWYgKHVua25vd24pCisJICAgIHByaW50aygibTY4a19wYXJzZV9ib290aW5mbzogdW5rbm93biB0YWcgMHglMDR4IGlnbm9yZWRcbiIsCisJCSAgIHJlY29yZC0+dGFnKTsKKwlyZWNvcmQgPSAoc3RydWN0IGJpX3JlY29yZCAqKSgodW5zaWduZWQgbG9uZylyZWNvcmQrcmVjb3JkLT5zaXplKTsKKyAgICB9CisKKyAgICBtNjhrX3JlYWxudW1fbWVtb3J5ID0gbTY4a19udW1fbWVtb3J5OworI2lmZGVmIENPTkZJR19TSU5HTEVfTUVNT1JZX0NIVU5LCisgICAgaWYgKG02OGtfbnVtX21lbW9yeSA+IDEpIHsKKwlwcmludGsoIklnbm9yaW5nIGxhc3QgJWkgY2h1bmtzIG9mIHBoeXNpY2FsIG1lbW9yeVxuIiwKKwkgICAgICAgKG02OGtfbnVtX21lbW9yeSAtIDEpKTsKKwltNjhrX251bV9tZW1vcnkgPSAxOworICAgIH0KKyAgICBtNjhrX21lbW9mZnNldCA9IG02OGtfbWVtb3J5WzBdLmFkZHItUEFHRV9PRkZTRVQ7CisjZW5kaWYKK30KKwordm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQoreworCWV4dGVybiBpbnQgX2V0ZXh0LCBfZWRhdGEsIF9lbmQ7CisjaWZuZGVmIENPTkZJR19TVU4zCisJdW5zaWduZWQgbG9uZyBlbmRtZW0sIHN0YXJ0bWVtOworI2VuZGlmCisJaW50IGk7CisJY2hhciAqcCwgKnE7CisKKwkvKiBUaGUgYm9vdGluZm8gaXMgbG9jYXRlZCByaWdodCBhZnRlciB0aGUga2VybmVsIGJzcyAqLworCW02OGtfcGFyc2VfYm9vdGluZm8oKGNvbnN0IHN0cnVjdCBiaV9yZWNvcmQgKikmX2VuZCk7CisKKwlpZiAoQ1BVX0lTXzA0MCkKKwkJbTY4a19pczA0MG9yMDYwID0gNDsKKwllbHNlIGlmIChDUFVfSVNfMDYwKQorCQltNjhrX2lzMDQwb3IwNjAgPSA2OworCisJLyogRklYTUU6IG02OGtfZnB1dHlwZSBpcyBwYXNzZWQgaW4gYnkgUGVuZ3VpbiBib290ZXIsIHdoaWNoIGNhbgorCSAqIGJlIGNvbmZ1c2VkIGJ5IHNvZnR3YXJlIEZQVSBlbXVsYXRpb24uIEJFV0FSRS4KKwkgKiBXZSBzaG91bGQgcmVhbGx5IGRvIG91ciBvd24gRlBVIGNoZWNrIGF0IHN0YXJ0dXAuCisJICogW3doYXQgZG8gd2UgZG8gd2l0aCBidWdneSA2OExDMDQwcz8gaWYgd2UgaGF2ZSBwcm9ibGVtcworCSAqICB3aXRoIHRoZW0sIHdlIHNob3VsZCBhZGQgYSB0ZXN0IHRvIGNoZWNrX2J1Z3MoKSBiZWxvd10gKi8KKyNpZm5kZWYgQ09ORklHX002OEtGUFVfRU1VX09OTFkKKwkvKiBjbGVhciB0aGUgZnB1IGlmIHdlIGhhdmUgb25lICovCisJaWYgKG02OGtfZnB1dHlwZSAmIChGUFVfNjg4ODF8RlBVXzY4ODgyfEZQVV82ODA0MHxGUFVfNjgwNjApKSB7CisJCXZvbGF0aWxlIGludCB6ZXJvID0gMDsKKwkJYXNtIF9fdm9sYXRpbGVfXyAoImZyZXN0b3JlICUwIiA6IDogIm0iICh6ZXJvKSk7CisJfQorI2VuZGlmCisKKwlpZiAoQ1BVX0lTXzA2MCkgeworCQl1MzIgcGNyOworCisJCWFzbSAoIi5jaGlwIDY4MDYwOyBtb3ZlYyAlJXBjciwlMDsgLmNoaXAgNjhrIgorCQkgICAgIDogIj1kIiAocGNyKSk7CisJCWlmICgoKHBjciA+PiA4KSAmIDB4ZmYpIDw9IDUpIHsKKwkJCXByaW50aygiRW5hYmxpbmcgd29ya2Fyb3VuZCBmb3IgZXJyYXRhIEkxNFxuIik7CisJCQlhc20gKCIuY2hpcCA2ODA2MDsgbW92ZWMgJTAsJSVwY3I7IC5jaGlwIDY4ayIKKwkJCSAgICAgOiA6ICJkIiAocGNyIHwgMHgyMCkpOworCQl9CisJfQorCisJaW5pdF9tbS5zdGFydF9jb2RlID0gUEFHRV9PRkZTRVQ7CisJaW5pdF9tbS5lbmRfY29kZSA9ICh1bnNpZ25lZCBsb25nKSAmX2V0ZXh0OworCWluaXRfbW0uZW5kX2RhdGEgPSAodW5zaWduZWQgbG9uZykgJl9lZGF0YTsKKwlpbml0X21tLmJyayA9ICh1bnNpZ25lZCBsb25nKSAmX2VuZDsKKworCSpjbWRsaW5lX3AgPSBtNjhrX2NvbW1hbmRfbGluZTsKKwltZW1jcHkoc2F2ZWRfY29tbWFuZF9saW5lLCAqY21kbGluZV9wLCBDTF9TSVpFKTsKKworCS8qIFBhcnNlIHRoZSBjb21tYW5kIGxpbmUgZm9yIGFyY2gtc3BlY2lmaWMgb3B0aW9ucy4KKwkgKiBGb3IgdGhlIG02OGssIHRoaXMgaXMgY3VycmVudGx5IG9ubHkgImRlYnVnPXh4eCIgdG8gZW5hYmxlIHByaW50aW5nCisJICogY2VydGFpbiBrZXJuZWwgbWVzc2FnZXMgdG8gc29tZSBtYWNoaW5lLXNwZWNpZmljIGRldmljZS4KKwkgKi8KKwlmb3IoIHAgPSAqY21kbGluZV9wOyBwICYmICpwOyApIHsKKwkgICAgaSA9IDA7CisJICAgIGlmICghc3RybmNtcCggcCwgImRlYnVnPSIsIDYgKSkgeworCQlzdHJsY3B5KCBtNjhrX2RlYnVnX2RldmljZSwgcCs2LCBzaXplb2YobTY4a19kZWJ1Z19kZXZpY2UpICk7CisJCWlmICgocSA9IHN0cmNociggbTY4a19kZWJ1Z19kZXZpY2UsICcgJyApKSkgKnEgPSAwOworCQlpID0gMTsKKwkgICAgfQorI2lmZGVmIENPTkZJR19BVEFSSQorCSAgICAvKiBUaGlzIG9wdGlvbiBtdXN0IGJlIHBhcnNlZCB2ZXJ5IGVhcmx5ICovCisJICAgIGlmICghc3RybmNtcCggcCwgInN3aXRjaGVzPSIsIDkgKSkgeworCQlleHRlcm4gdm9pZCBhdGFyaV9zd2l0Y2hlc19zZXR1cCggY29uc3QgY2hhciAqLCBpbnQgKTsKKwkJYXRhcmlfc3dpdGNoZXNfc2V0dXAoIHArOSwgKHEgPSBzdHJjaHIoIHArOSwgJyAnICkpID8KKwkJCQkgICAgICAgICAgIChxIC0gKHArOSkpIDogc3RybGVuKHArOSkgKTsKKwkJaSA9IDE7CisJICAgIH0KKyNlbmRpZgorCisJICAgIGlmIChpKSB7CisJCS8qIG9wdGlvbiBwcm9jZXNzZWQsIGRlbGV0ZSBpdCAqLworCQlpZiAoKHEgPSBzdHJjaHIoIHAsICcgJyApKSkKKwkJICAgIHN0cmNweSggcCwgcSsxICk7CisJCWVsc2UKKwkJICAgICpwID0gMDsKKwkgICAgfSBlbHNlIHsKKwkJaWYgKChwID0gc3RyY2hyKCBwLCAnICcgKSkpICsrcDsKKwkgICAgfQorCX0KKworCXN3aXRjaCAobTY4a19tYWNodHlwZSkgeworI2lmZGVmIENPTkZJR19BTUlHQQorCSAgICBjYXNlIE1BQ0hfQU1JR0E6CisJCWNvbmZpZ19hbWlnYSgpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BVEFSSQorCSAgICBjYXNlIE1BQ0hfQVRBUkk6CisJCWNvbmZpZ19hdGFyaSgpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NQUMKKwkgICAgY2FzZSBNQUNIX01BQzoKKwkJY29uZmlnX21hYygpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TVU4zCisJICAgIGNhc2UgTUFDSF9TVU4zOgorCQljb25maWdfc3VuMygpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUE9MTE8KKwkgICAgY2FzZSBNQUNIX0FQT0xMTzoKKwkJY29uZmlnX2Fwb2xsbygpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NVk1FMTQ3CisJICAgIGNhc2UgTUFDSF9NVk1FMTQ3OgorCQljb25maWdfbXZtZTE0NygpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NVk1FMTZ4CisJICAgIGNhc2UgTUFDSF9NVk1FMTZ4OgorCQljb25maWdfbXZtZTE2eCgpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19CVk1FNjAwMAorCSAgICBjYXNlIE1BQ0hfQlZNRTYwMDA6CisJCWNvbmZpZ19idm1lNjAwMCgpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19IUDMwMAorCSAgICBjYXNlIE1BQ0hfSFAzMDA6CisJCWNvbmZpZ19ocDMwMCgpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19RNDAKKwkgICAgY2FzZSBNQUNIX1E0MDoKKwkgICAgICAgIGNvbmZpZ19xNDAoKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU1VOM1gKKwkgICAgY2FzZSBNQUNIX1NVTjNYOgorCQljb25maWdfc3VuM3goKTsKKwkJYnJlYWs7CisjZW5kaWYKKwkgICAgZGVmYXVsdDoKKwkJcGFuaWMgKCJObyBjb25maWd1cmF0aW9uIHNldHVwIik7CisJfQorCisjaWZuZGVmIENPTkZJR19TVU4zCisJc3RhcnRtZW09IG02OGtfbWVtb3J5WzBdLmFkZHI7CisJZW5kbWVtID0gc3RhcnRtZW0gKyBtNjhrX21lbW9yeVswXS5zaXplOworCWhpZ2hfbWVtb3J5ID0gKHZvaWQgKilQQUdFX09GRlNFVDsKKwlmb3IgKGkgPSAwOyBpIDwgbTY4a19udW1fbWVtb3J5OyBpKyspIHsKKwkJbTY4a19tZW1vcnlbaV0uc2l6ZSAmPSBNQVNLXzI1Nks7CisJCWlmIChtNjhrX21lbW9yeVtpXS5hZGRyIDwgc3RhcnRtZW0pCisJCQlzdGFydG1lbSA9IG02OGtfbWVtb3J5W2ldLmFkZHI7CisJCWlmIChtNjhrX21lbW9yeVtpXS5hZGRyK202OGtfbWVtb3J5W2ldLnNpemUgPiBlbmRtZW0pCisJCQllbmRtZW0gPSBtNjhrX21lbW9yeVtpXS5hZGRyK202OGtfbWVtb3J5W2ldLnNpemU7CisJCWhpZ2hfbWVtb3J5ICs9IG02OGtfbWVtb3J5W2ldLnNpemU7CisJfQorCisJYXZhaWxtZW0gKz0gaW5pdF9ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCBhdmFpbG1lbSA+PiBQQUdFX1NISUZULAorCQkJCSAgICAgIHN0YXJ0bWVtID4+IFBBR0VfU0hJRlQsIGVuZG1lbSA+PiBQQUdFX1NISUZUKTsKKworCWZvciAoaSA9IDA7IGkgPCBtNjhrX251bV9tZW1vcnk7IGkrKykKKwkJZnJlZV9ib290bWVtKG02OGtfbWVtb3J5W2ldLmFkZHIsIG02OGtfbWVtb3J5W2ldLnNpemUpOworCisJcmVzZXJ2ZV9ib290bWVtKG02OGtfbWVtb3J5WzBdLmFkZHIsIGF2YWlsbWVtIC0gbTY4a19tZW1vcnlbMF0uYWRkcik7CisKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKKwlpZiAobTY4a19yYW1kaXNrLnNpemUpIHsKKwkJcmVzZXJ2ZV9ib290bWVtKG02OGtfcmFtZGlzay5hZGRyLCBtNjhrX3JhbWRpc2suc2l6ZSk7CisJCWluaXRyZF9zdGFydCA9ICh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydChtNjhrX3JhbWRpc2suYWRkcik7CisJCWluaXRyZF9lbmQgPSBpbml0cmRfc3RhcnQgKyBtNjhrX3JhbWRpc2suc2l6ZTsKKwkJcHJpbnRrICgiaW5pdHJkOiAlMDhseCAtICUwOGx4XG4iLCBpbml0cmRfc3RhcnQsIGluaXRyZF9lbmQpOworCX0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FUQVJJCisJaWYgKE1BQ0hfSVNfQVRBUkkpCisJCWF0YXJpX3N0cmFtX3Jlc2VydmVfcGFnZXMoKHZvaWQgKilhdmFpbG1lbSk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU1VOM1gKKwlpZiAoTUFDSF9JU19TVU4zWCkgeworCQlkdm1hX2luaXQoKTsKKwl9CisjZW5kaWYKKworI2VuZGlmIC8qICFDT05GSUdfU1VOMyAqLworCisJcGFnaW5nX2luaXQoKTsKKworLyogc2V0IElTQSBkZWZzIGVhcmx5IGFzIHBvc3NpYmxlICovCisjaWYgZGVmaW5lZChDT05GSUdfSVNBKSAmJiBkZWZpbmVkKE1VTFRJX0lTQSkKKyNpZiBkZWZpbmVkKENPTkZJR19RNDApCisJaWYgKE1BQ0hfSVNfUTQwKSB7CisJICAgIGlzYV90eXBlID0gUTQwX0lTQTsKKwkgICAgaXNhX3NleCA9IDA7CisJfQorI2VsaWYgZGVmaW5lZChDT05GSUdfR0cyKQorCWlmIChNQUNIX0lTX0FNSUdBICYmIEFNSUdBSFdfUFJFU0VOVChHRzJfSVNBKSl7CisJICAgIGlzYV90eXBlID0gR0cyX0lTQTsKKwkgICAgaXNhX3NleCA9IDA7CisJfQorI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0FfUENNQ0lBKQorCWlmIChNQUNIX0lTX0FNSUdBICYmIEFNSUdBSFdfUFJFU0VOVChQQ01DSUEpKXsKKwkgICAgaXNhX3R5cGUgPSBBR19JU0E7CisJICAgIGlzYV9zZXggPSAxOworCX0KKyNlbmRpZgorI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKyAgICBjb25zdCBjaGFyICpjcHUsICptbXUsICpmcHU7CisgICAgdW5zaWduZWQgbG9uZyBjbG9ja2ZyZXEsIGNsb2NrZmFjdG9yOworCisjZGVmaW5lIExPT1BfQ1lDTEVTXzY4MDIwCSg4KQorI2RlZmluZSBMT09QX0NZQ0xFU182ODAzMAkoOCkKKyNkZWZpbmUgTE9PUF9DWUNMRVNfNjgwNDAJKDMpCisjZGVmaW5lIExPT1BfQ1lDTEVTXzY4MDYwCSgxKQorCisgICAgaWYgKENQVV9JU18wMjApIHsKKwljcHUgPSAiNjgwMjAiOworCWNsb2NrZmFjdG9yID0gTE9PUF9DWUNMRVNfNjgwMjA7CisgICAgfSBlbHNlIGlmIChDUFVfSVNfMDMwKSB7CisJY3B1ID0gIjY4MDMwIjsKKwljbG9ja2ZhY3RvciA9IExPT1BfQ1lDTEVTXzY4MDMwOworICAgIH0gZWxzZSBpZiAoQ1BVX0lTXzA0MCkgeworCWNwdSA9ICI2ODA0MCI7CisJY2xvY2tmYWN0b3IgPSBMT09QX0NZQ0xFU182ODA0MDsKKyAgICB9IGVsc2UgaWYgKENQVV9JU18wNjApIHsKKwljcHUgPSAiNjgwNjAiOworCWNsb2NrZmFjdG9yID0gTE9PUF9DWUNMRVNfNjgwNjA7CisgICAgfSBlbHNlIHsKKwljcHUgPSAiNjgweDAiOworCWNsb2NrZmFjdG9yID0gMDsKKyAgICB9CisKKyNpZmRlZiBDT05GSUdfTTY4S0ZQVV9FTVVfT05MWQorICAgIGZwdT0ibm9uZShzb2Z0IGZsb2F0KSI7CisjZWxzZQorICAgIGlmIChtNjhrX2ZwdXR5cGUgJiBGUFVfNjg4ODEpCisJZnB1ID0gIjY4ODgxIjsKKyAgICBlbHNlIGlmIChtNjhrX2ZwdXR5cGUgJiBGUFVfNjg4ODIpCisJZnB1ID0gIjY4ODgyIjsKKyAgICBlbHNlIGlmIChtNjhrX2ZwdXR5cGUgJiBGUFVfNjgwNDApCisJZnB1ID0gIjY4MDQwIjsKKyAgICBlbHNlIGlmIChtNjhrX2ZwdXR5cGUgJiBGUFVfNjgwNjApCisJZnB1ID0gIjY4MDYwIjsKKyAgICBlbHNlIGlmIChtNjhrX2ZwdXR5cGUgJiBGUFVfU1VORlBBKQorCWZwdSA9ICJTdW4gRlBBIjsKKyAgICBlbHNlCisJZnB1ID0gIm5vbmUiOworI2VuZGlmCisKKyAgICBpZiAobTY4a19tbXV0eXBlICYgTU1VXzY4ODUxKQorCW1tdSA9ICI2ODg1MSI7CisgICAgZWxzZSBpZiAobTY4a19tbXV0eXBlICYgTU1VXzY4MDMwKQorCW1tdSA9ICI2ODAzMCI7CisgICAgZWxzZSBpZiAobTY4a19tbXV0eXBlICYgTU1VXzY4MDQwKQorCW1tdSA9ICI2ODA0MCI7CisgICAgZWxzZSBpZiAobTY4a19tbXV0eXBlICYgTU1VXzY4MDYwKQorCW1tdSA9ICI2ODA2MCI7CisgICAgZWxzZSBpZiAobTY4a19tbXV0eXBlICYgTU1VX1NVTjMpCisJbW11ID0gIlN1bi0zIjsKKyAgICBlbHNlIGlmIChtNjhrX21tdXR5cGUgJiBNTVVfQVBPTExPKQorCW1tdSA9ICJBcG9sbG8iOworICAgIGVsc2UKKwltbXUgPSAidW5rbm93biI7CisKKyAgICBjbG9ja2ZyZXEgPSBsb29wc19wZXJfamlmZnkqSFoqY2xvY2tmYWN0b3I7CisKKyAgICBzZXFfcHJpbnRmKG0sICJDUFU6XHRcdCVzXG4iCisJCSAgICJNTVU6XHRcdCVzXG4iCisJCSAgICJGUFU6XHRcdCVzXG4iCisJCSAgICJDbG9ja2luZzpcdCVsdS4lMWx1TUh6XG4iCisJCSAgICJCb2dvTWlwczpcdCVsdS4lMDJsdVxuIgorCQkgICAiQ2FsaWJyYXRpb246XHQlbHUgbG9vcHNcbiIsCisJCSAgIGNwdSwgbW11LCBmcHUsCisJCSAgIGNsb2NrZnJlcS8xMDAwMDAwLChjbG9ja2ZyZXEvMTAwMDAwKSUxMCwKKwkJICAgbG9vcHNfcGVyX2ppZmZ5Lyg1MDAwMDAvSFopLChsb29wc19wZXJfamlmZnkvKDUwMDAvSFopKSUxMDAsCisJCSAgIGxvb3BzX3Blcl9qaWZmeSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICpjX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCit7CisJcmV0dXJuICpwb3MgPCAxID8gKHZvaWQgKikxIDogTlVMTDsKK30KK3N0YXRpYyB2b2lkICpjX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwkrKypwb3M7CisJcmV0dXJuIE5VTEw7Cit9CitzdGF0aWMgdm9pZCBjX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworfQorc3RydWN0IHNlcV9vcGVyYXRpb25zIGNwdWluZm9fb3AgPSB7CisJLnN0YXJ0ID0JY19zdGFydCwKKwkubmV4dCA9CQljX25leHQsCisJLnN0b3AgPQkJY19zdG9wLAorCS5zaG93ID0JCXNob3dfY3B1aW5mbywKK307CisKK2ludCBnZXRfaGFyZHdhcmVfbGlzdChjaGFyICpidWZmZXIpCit7CisgICAgaW50IGxlbiA9IDA7CisgICAgY2hhciBtb2RlbFs4MF07CisgICAgdW5zaWduZWQgbG9uZyBtZW07CisgICAgaW50IGk7CisKKyAgICBpZiAobWFjaF9nZXRfbW9kZWwpCisJbWFjaF9nZXRfbW9kZWwobW9kZWwpOworICAgIGVsc2UKKwlzdHJjcHkobW9kZWwsICJVbmtub3duIG02OGsiKTsKKworICAgIGxlbiArPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICJNb2RlbDpcdFx0JXNcbiIsIG1vZGVsKTsKKyAgICBmb3IgKG1lbSA9IDAsIGkgPSAwOyBpIDwgbTY4a19udW1fbWVtb3J5OyBpKyspCisJbWVtICs9IG02OGtfbWVtb3J5W2ldLnNpemU7CisgICAgbGVuICs9IHNwcmludGYoYnVmZmVyK2xlbiwgIlN5c3RlbSBNZW1vcnk6XHQlbGRLXG4iLCBtZW0+PjEwKTsKKworICAgIGlmIChtYWNoX2dldF9oYXJkd2FyZV9saXN0KQorCWxlbiArPSBtYWNoX2dldF9oYXJkd2FyZV9saXN0KGJ1ZmZlcitsZW4pOworCisgICAgcmV0dXJuKGxlbik7Cit9CisKKworI2lmIGRlZmluZWQoQ09ORklHX0FNSUdBX0ZMT1BQWSkgfHwgZGVmaW5lZChDT05GSUdfQVRBUklfRkxPUFBZKQordm9pZCBfX2luaXQgZmxvcHB5X3NldHVwKGNoYXIgKnN0ciwgaW50ICppbnRzKQoreworCWlmIChtYWNoX2Zsb3BweV9zZXR1cCkKKwkJbWFjaF9mbG9wcHlfc2V0dXAgKHN0ciwgaW50cyk7Cit9CisKKyNlbmRpZgorCit2b2lkIGNoZWNrX2J1Z3Modm9pZCkKK3sKKyNpZm5kZWYgQ09ORklHX002OEtGUFVfRU1VCisJaWYgKG02OGtfZnB1dHlwZSA9PSAwKSB7CisJCXByaW50ayggS0VSTl9FTUVSRyAiKioqIFlPVSBETyBOT1QgSEFWRSBBIEZMT0FUSU5HIFBPSU5UIFVOSVQsICIKKwkJCQkiV0hJQ0ggSVMgUkVRVUlSRUQgQlkgTElOVVgvTTY4SyAqKipcbiIgKTsKKwkJcHJpbnRrKCBLRVJOX0VNRVJHICJVcGdyYWRlIHlvdXIgaGFyZHdhcmUgb3Igam9pbiB0aGUgRlBVICIKKwkJCQkiZW11bGF0aW9uIHByb2plY3RcbiIgKTsKKwkJcGFuaWMoICJubyBGUFUiICk7CisJfQorI2VuZGlmIC8qICFDT05GSUdfTTY4S0ZQVV9FTVUgKi8KK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL202OGsva2VybmVsL3NpZ25hbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNjM2YTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsva2VybmVsL3NpZ25hbC5jCkBAIC0wLDAgKzEsMTAyNSBAQAorLyoKKyAqICBsaW51eC9hcmNoL202OGsva2VybmVsL3NpZ25hbC5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoKKyAqIExpbnV4L202OGsgc3VwcG9ydCBieSBIYW1pc2ggTWFjZG9uYWxkCisgKgorICogNjgwNjAgZml4ZXMgYnkgSmVzcGVyIFNrb3YKKyAqCisgKiAxOTk3LTEyLTAxICBNb2RpZmllZCBmb3IgUE9TSVguMWIgc2lnbmFscyBieSBBbmRyZWFzIFNjaHdhYgorICoKKyAqIG1hdGhlbXUgc3VwcG9ydCBieSBSb21hbiBaaXBwZWwKKyAqICAoTm90ZTogZnBzdGF0ZSBpbiB0aGUgc2lnbmFsIGNvbnRleHQgaXMgY29tcGxldGVseSBpZ25vcmVkIGZvciB0aGUgZW11bGF0b3IKKyAqICAgICAgICAgYW5kIHRoZSBpbnRlcm5hbCBmbG9hdGluZyBwb2ludCBmb3JtYXQgaXMgcHV0IG9uIHN0YWNrKQorICovCisKKy8qCisgKiArK3JvbWFuICgwNy8wOS85Nik6IGltcGxlbWVudGVkIHNpZ25hbCBzdGFja3MgKHNwZWNpYWxseSBmb3IgdG9zZW11IG9uCisgKiBBdGFyaSA6LSkgQ3VycmVudCBsaW1pdGF0aW9uOiBPbmx5IG9uZSBzaWdzdGFjayBjYW4gYmUgYWN0aXZlIGF0IG9uZSB0aW1lLgorICogSWYgYSBzZWNvbmQgc2lnbmFsIHdpdGggU0FfT05TVEFDSyBzZXQgYXJyaXZlcyB3aGlsZSB3b3JraW5nIG9uIGEgc2lnc3RhY2ssCisgKiBTQV9PTlNUQUNLIGlzIGlnbm9yZWQuIFRoaXMgYmVoYXZpb3VyIGF2b2lkcyBsb3RzIG9mIHRyb3VibGUgd2l0aCBuZXN0ZWQKKyAqIHNpZ25hbCBoYW5kbGVycyEKKyAqLworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaHVpZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvYmluZm10cy5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS91Y29udGV4dC5oPgorCisjZGVmaW5lIF9CTE9DS0FCTEUgKH4oc2lnbWFzayhTSUdLSUxMKSB8IHNpZ21hc2soU0lHU1RPUCkpKQorCithc21saW5rYWdlIGludCBkb19zaWduYWwoc2lnc2V0X3QgKm9sZHNldCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCitjb25zdCBpbnQgZnJhbWVfZXh0cmFfc2l6ZXNbMTZdID0geworICBbMV0JPSAtMSwgLyogc2l6ZW9mKCgoc3RydWN0IGZyYW1lICopMCktPnVuLmZtdDEpLCAqLworICBbMl0JPSBzaXplb2YoKChzdHJ1Y3QgZnJhbWUgKikwKS0+dW4uZm10MiksCisgIFszXQk9IHNpemVvZigoKHN0cnVjdCBmcmFtZSAqKTApLT51bi5mbXQzKSwKKyAgWzRdCT0gc2l6ZW9mKCgoc3RydWN0IGZyYW1lICopMCktPnVuLmZtdDQpLAorICBbNV0JPSAtMSwgLyogc2l6ZW9mKCgoc3RydWN0IGZyYW1lICopMCktPnVuLmZtdDUpLCAqLworICBbNl0JPSAtMSwgLyogc2l6ZW9mKCgoc3RydWN0IGZyYW1lICopMCktPnVuLmZtdDYpLCAqLworICBbN10JPSBzaXplb2YoKChzdHJ1Y3QgZnJhbWUgKikwKS0+dW4uZm10NyksCisgIFs4XQk9IC0xLCAvKiBzaXplb2YoKChzdHJ1Y3QgZnJhbWUgKikwKS0+dW4uZm10OCksICovCisgIFs5XQk9IHNpemVvZigoKHN0cnVjdCBmcmFtZSAqKTApLT51bi5mbXQ5KSwKKyAgWzEwXQk9IHNpemVvZigoKHN0cnVjdCBmcmFtZSAqKTApLT51bi5mbXRhKSwKKyAgWzExXQk9IHNpemVvZigoKHN0cnVjdCBmcmFtZSAqKTApLT51bi5mbXRiKSwKKyAgWzEyXQk9IC0xLCAvKiBzaXplb2YoKChzdHJ1Y3QgZnJhbWUgKikwKS0+dW4uZm10YyksICovCisgIFsxM10JPSAtMSwgLyogc2l6ZW9mKCgoc3RydWN0IGZyYW1lICopMCktPnVuLmZtdGQpLCAqLworICBbMTRdCT0gLTEsIC8qIHNpemVvZigoKHN0cnVjdCBmcmFtZSAqKTApLT51bi5mbXRlKSwgKi8KKyAgWzE1XQk9IC0xLCAvKiBzaXplb2YoKChzdHJ1Y3QgZnJhbWUgKikwKS0+dW4uZm10ZiksICovCit9OworCisvKgorICogQXRvbWljYWxseSBzd2FwIGluIHRoZSBuZXcgc2lnbmFsIG1hc2ssIGFuZCB3YWl0IGZvciBhIHNpZ25hbC4KKyAqLworYXNtbGlua2FnZSBpbnQgZG9fc2lnc3VzcGVuZChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlvbGRfc2lnc2V0X3QgbWFzayA9IHJlZ3MtPmQzOworCXNpZ3NldF90IHNhdmVzZXQ7CisKKwltYXNrICY9IF9CTE9DS0FCTEU7CisJc2F2ZXNldCA9IGN1cnJlbnQtPmJsb2NrZWQ7CisJc2lnaW5pdHNldCgmY3VycmVudC0+YmxvY2tlZCwgbWFzayk7CisJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKKworCXJlZ3MtPmQwID0gLUVJTlRSOworCXdoaWxlICgxKSB7CisJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCQlzY2hlZHVsZSgpOworCQlpZiAoZG9fc2lnbmFsKCZzYXZlc2V0LCByZWdzKSkKKwkJCXJldHVybiAtRUlOVFI7CisJfQorfQorCithc21saW5rYWdlIGludAorZG9fcnRfc2lnc3VzcGVuZChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzaWdzZXRfdCAqdW5ld3NldCA9IChzaWdzZXRfdCAqKXJlZ3MtPmQxOworCXNpemVfdCBzaWdzZXRzaXplID0gKHNpemVfdClyZWdzLT5kMjsKKwlzaWdzZXRfdCBzYXZlc2V0LCBuZXdzZXQ7CisKKwkvKiBYWFg6IERvbid0IHByZWNsdWRlIGhhbmRsaW5nIGRpZmZlcmVudCBzaXplZCBzaWdzZXRfdCdzLiAgKi8KKwlpZiAoc2lnc2V0c2l6ZSAhPSBzaXplb2Yoc2lnc2V0X3QpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmbmV3c2V0LCB1bmV3c2V0LCBzaXplb2YobmV3c2V0KSkpCisJCXJldHVybiAtRUZBVUxUOworCXNpZ2RlbHNldG1hc2soJm5ld3NldCwgfl9CTE9DS0FCTEUpOworCisJc2F2ZXNldCA9IGN1cnJlbnQtPmJsb2NrZWQ7CisJY3VycmVudC0+YmxvY2tlZCA9IG5ld3NldDsKKwlyZWNhbGNfc2lncGVuZGluZygpOworCisJcmVncy0+ZDAgPSAtRUlOVFI7CisJd2hpbGUgKDEpIHsKKwkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisJCXNjaGVkdWxlKCk7CisJCWlmIChkb19zaWduYWwoJnNhdmVzZXQsIHJlZ3MpKQorCQkJcmV0dXJuIC1FSU5UUjsKKwl9Cit9CisKK2FzbWxpbmthZ2UgaW50CitzeXNfc2lnYWN0aW9uKGludCBzaWcsIGNvbnN0IHN0cnVjdCBvbGRfc2lnYWN0aW9uICphY3QsCisJICAgICAgc3RydWN0IG9sZF9zaWdhY3Rpb24gKm9hY3QpCit7CisJc3RydWN0IGtfc2lnYWN0aW9uIG5ld19rYSwgb2xkX2thOworCWludCByZXQ7CisKKwlpZiAoYWN0KSB7CisJCW9sZF9zaWdzZXRfdCBtYXNrOworCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgYWN0LCBzaXplb2YoKmFjdCkpIHx8CisJCSAgICBfX2dldF91c2VyKG5ld19rYS5zYS5zYV9oYW5kbGVyLCAmYWN0LT5zYV9oYW5kbGVyKSB8fAorCQkgICAgX19nZXRfdXNlcihuZXdfa2Euc2Euc2FfcmVzdG9yZXIsICZhY3QtPnNhX3Jlc3RvcmVyKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlfX2dldF91c2VyKG5ld19rYS5zYS5zYV9mbGFncywgJmFjdC0+c2FfZmxhZ3MpOworCQlfX2dldF91c2VyKG1hc2ssICZhY3QtPnNhX21hc2spOworCQlzaWdpbml0c2V0KCZuZXdfa2Euc2Euc2FfbWFzaywgbWFzayk7CisJfQorCisJcmV0ID0gZG9fc2lnYWN0aW9uKHNpZywgYWN0ID8gJm5ld19rYSA6IE5VTEwsIG9hY3QgPyAmb2xkX2thIDogTlVMTCk7CisKKwlpZiAoIXJldCAmJiBvYWN0KSB7CisJCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgb2FjdCwgc2l6ZW9mKCpvYWN0KSkgfHwKKwkJICAgIF9fcHV0X3VzZXIob2xkX2thLnNhLnNhX2hhbmRsZXIsICZvYWN0LT5zYV9oYW5kbGVyKSB8fAorCQkgICAgX19wdXRfdXNlcihvbGRfa2Euc2Euc2FfcmVzdG9yZXIsICZvYWN0LT5zYV9yZXN0b3JlcikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJX19wdXRfdXNlcihvbGRfa2Euc2Euc2FfZmxhZ3MsICZvYWN0LT5zYV9mbGFncyk7CisJCV9fcHV0X3VzZXIob2xkX2thLnNhLnNhX21hc2suc2lnWzBdLCAmb2FjdC0+c2FfbWFzayk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworYXNtbGlua2FnZSBpbnQKK3N5c19zaWdhbHRzdGFjayhjb25zdCBzdGFja190ICp1c3MsIHN0YWNrX3QgKnVvc3MpCit7CisJcmV0dXJuIGRvX3NpZ2FsdHN0YWNrKHVzcywgdW9zcywgcmR1c3AoKSk7Cit9CisKKworLyoKKyAqIERvIGEgc2lnbmFsIHJldHVybjsgdW5kbyB0aGUgc2lnbmFsIHN0YWNrLgorICoKKyAqIEtlZXAgdGhlIHJldHVybiBjb2RlIG9uIHRoZSBzdGFjayBxdWFkd29yZCBhbGlnbmVkIQorICogVGhhdCBtYWtlcyB0aGUgY2FjaGUgZmx1c2ggYmVsb3cgZWFzaWVyLgorICovCisKK3N0cnVjdCBzaWdmcmFtZQoreworCWNoYXIgKnByZXRjb2RlOworCWludCBzaWc7CisJaW50IGNvZGU7CisJc3RydWN0IHNpZ2NvbnRleHQgKnBzYzsKKwljaGFyIHJldGNvZGVbOF07CisJdW5zaWduZWQgbG9uZyBleHRyYW1hc2tbX05TSUdfV09SRFMtMV07CisJc3RydWN0IHNpZ2NvbnRleHQgc2M7Cit9OworCitzdHJ1Y3QgcnRfc2lnZnJhbWUKK3sKKwljaGFyICpwcmV0Y29kZTsKKwlpbnQgc2lnOworCXN0cnVjdCBzaWdpbmZvICpwaW5mbzsKKwl2b2lkICpwdWM7CisJY2hhciByZXRjb2RlWzhdOworCXN0cnVjdCBzaWdpbmZvIGluZm87CisJc3RydWN0IHVjb250ZXh0IHVjOworfTsKKworCitzdGF0aWMgdW5zaWduZWQgY2hhciBmcHVfdmVyc2lvbjsJLyogdmVyc2lvbiBudW1iZXIgb2YgZnB1LCBzZXQgYnkgc2V0dXBfZnJhbWUgKi8KKworc3RhdGljIGlubGluZSBpbnQgcmVzdG9yZV9mcHVfc3RhdGUoc3RydWN0IHNpZ2NvbnRleHQgKnNjKQoreworCWludCBlcnIgPSAxOworCisJaWYgKEZQVV9JU19FTVUpIHsKKwkgICAgLyogcmVzdG9yZSByZWdpc3RlcnMgKi8KKwkgICAgbWVtY3B5KGN1cnJlbnQtPnRocmVhZC5mcGNudGwsIHNjLT5zY19mcGNudGwsIDEyKTsKKwkgICAgbWVtY3B5KGN1cnJlbnQtPnRocmVhZC5mcCwgc2MtPnNjX2ZwcmVncywgMjQpOworCSAgICByZXR1cm4gMDsKKwl9CisKKwlpZiAoQ1BVX0lTXzA2MCA/IHNjLT5zY19mcHN0YXRlWzJdIDogc2MtPnNjX2Zwc3RhdGVbMF0pIHsKKwkgICAgLyogVmVyaWZ5IHRoZSBmcmFtZSBmb3JtYXQuICAqLworCSAgICBpZiAoIUNQVV9JU18wNjAgJiYgKHNjLT5zY19mcHN0YXRlWzBdICE9IGZwdV92ZXJzaW9uKSkKKwkJZ290byBvdXQ7CisJICAgIGlmIChDUFVfSVNfMDIwX09SXzAzMCkgeworCQlpZiAobTY4a19mcHV0eXBlICYgRlBVXzY4ODgxICYmCisJCSAgICAhKHNjLT5zY19mcHN0YXRlWzFdID09IDB4MTggfHwgc2MtPnNjX2Zwc3RhdGVbMV0gPT0gMHhiNCkpCisJCSAgICBnb3RvIG91dDsKKwkJaWYgKG02OGtfZnB1dHlwZSAmIEZQVV82ODg4MiAmJgorCQkgICAgIShzYy0+c2NfZnBzdGF0ZVsxXSA9PSAweDM4IHx8IHNjLT5zY19mcHN0YXRlWzFdID09IDB4ZDQpKQorCQkgICAgZ290byBvdXQ7CisJICAgIH0gZWxzZSBpZiAoQ1BVX0lTXzA0MCkgeworCQlpZiAoIShzYy0+c2NfZnBzdGF0ZVsxXSA9PSAweDAwIHx8CisgICAgICAgICAgICAgICAgICAgICAgc2MtPnNjX2Zwc3RhdGVbMV0gPT0gMHgyOCB8fAorICAgICAgICAgICAgICAgICAgICAgIHNjLT5zY19mcHN0YXRlWzFdID09IDB4NjApKQorCQkgICAgZ290byBvdXQ7CisJICAgIH0gZWxzZSBpZiAoQ1BVX0lTXzA2MCkgeworCQlpZiAoIShzYy0+c2NfZnBzdGF0ZVszXSA9PSAweDAwIHx8CisgICAgICAgICAgICAgICAgICAgICAgc2MtPnNjX2Zwc3RhdGVbM10gPT0gMHg2MCB8fAorCQkgICAgICBzYy0+c2NfZnBzdGF0ZVszXSA9PSAweGUwKSkKKwkJICAgIGdvdG8gb3V0OworCSAgICB9IGVsc2UKKwkJZ290byBvdXQ7CisKKwkgICAgX19hc21fXyB2b2xhdGlsZSAoIi5jaGlwIDY4ay82ODg4MVxuXHQiCisJCQkgICAgICAiZm1vdmVteCAlMCwlJWZwMC0lJWZwMVxuXHQiCisJCQkgICAgICAiZm1vdmVtbCAlMSwlJWZwY3IvJSVmcHNyLyUlZnBpYXJcblx0IgorCQkJICAgICAgIi5jaGlwIDY4ayIKKwkJCSAgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJICAgICAgOiAibSIgKCpzYy0+c2NfZnByZWdzKSwgIm0iICgqc2MtPnNjX2ZwY250bCkpOworCX0KKwlfX2FzbV9fIHZvbGF0aWxlICgiLmNoaXAgNjhrLzY4ODgxXG5cdCIKKwkJCSAgImZyZXN0b3JlICUwXG5cdCIKKwkJCSAgIi5jaGlwIDY4ayIgOiA6ICJtIiAoKnNjLT5zY19mcHN0YXRlKSk7CisJZXJyID0gMDsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKyNkZWZpbmUgRlBDT05URVhUX1NJWkUJMjE2CisjZGVmaW5lIHVjX2Zwc3RhdGUJdWNfZmlsbGVyWzBdCisjZGVmaW5lIHVjX2Zvcm1hdHZlYwl1Y19maWxsZXJbRlBDT05URVhUX1NJWkUvNF0KKyNkZWZpbmUgdWNfZXh0cmEJdWNfZmlsbGVyW0ZQQ09OVEVYVF9TSVpFLzQrMV0KKworc3RhdGljIGlubGluZSBpbnQgcnRfcmVzdG9yZV9mcHVfc3RhdGUoc3RydWN0IHVjb250ZXh0ICp1YykKK3sKKwl1bnNpZ25lZCBjaGFyIGZwc3RhdGVbRlBDT05URVhUX1NJWkVdOworCWludCBjb250ZXh0X3NpemUgPSBDUFVfSVNfMDYwID8gOCA6IDA7CisJZnByZWdzZXRfdCBmcHJlZ3M7CisJaW50IGVyciA9IDE7CisKKwlpZiAoRlBVX0lTX0VNVSkgeworCQkvKiByZXN0b3JlIGZwdSBjb250cm9sIHJlZ2lzdGVyICovCisJCWlmIChfX2NvcHlfZnJvbV91c2VyKGN1cnJlbnQtPnRocmVhZC5mcGNudGwsCisJCQkJdWMtPnVjX21jb250ZXh0LmZwcmVncy5mX2ZwY250bCwgMTIpKQorCQkJZ290byBvdXQ7CisJCS8qIHJlc3RvcmUgYWxsIG90aGVyIGZwdSByZWdpc3RlciAqLworCQlpZiAoX19jb3B5X2Zyb21fdXNlcihjdXJyZW50LT50aHJlYWQuZnAsCisJCQkJdWMtPnVjX21jb250ZXh0LmZwcmVncy5mX2ZwcmVncywgOTYpKQorCQkJZ290byBvdXQ7CisJCXJldHVybiAwOworCX0KKworCWlmIChfX2dldF91c2VyKCoobG9uZyAqKWZwc3RhdGUsIChsb25nICopJnVjLT51Y19mcHN0YXRlKSkKKwkJZ290byBvdXQ7CisJaWYgKENQVV9JU18wNjAgPyBmcHN0YXRlWzJdIDogZnBzdGF0ZVswXSkgeworCQlpZiAoIUNQVV9JU18wNjApCisJCQljb250ZXh0X3NpemUgPSBmcHN0YXRlWzFdOworCQkvKiBWZXJpZnkgdGhlIGZyYW1lIGZvcm1hdC4gICovCisJCWlmICghQ1BVX0lTXzA2MCAmJiAoZnBzdGF0ZVswXSAhPSBmcHVfdmVyc2lvbikpCisJCQlnb3RvIG91dDsKKwkJaWYgKENQVV9JU18wMjBfT1JfMDMwKSB7CisJCQlpZiAobTY4a19mcHV0eXBlICYgRlBVXzY4ODgxICYmCisJCQkgICAgIShjb250ZXh0X3NpemUgPT0gMHgxOCB8fCBjb250ZXh0X3NpemUgPT0gMHhiNCkpCisJCQkJZ290byBvdXQ7CisJCQlpZiAobTY4a19mcHV0eXBlICYgRlBVXzY4ODgyICYmCisJCQkgICAgIShjb250ZXh0X3NpemUgPT0gMHgzOCB8fCBjb250ZXh0X3NpemUgPT0gMHhkNCkpCisJCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAoQ1BVX0lTXzA0MCkgeworCQkJaWYgKCEoY29udGV4dF9zaXplID09IDB4MDAgfHwKKwkJCSAgICAgIGNvbnRleHRfc2l6ZSA9PSAweDI4IHx8CisJCQkgICAgICBjb250ZXh0X3NpemUgPT0gMHg2MCkpCisJCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAoQ1BVX0lTXzA2MCkgeworCQkJaWYgKCEoZnBzdGF0ZVszXSA9PSAweDAwIHx8CisJCQkgICAgICBmcHN0YXRlWzNdID09IDB4NjAgfHwKKwkJCSAgICAgIGZwc3RhdGVbM10gPT0gMHhlMCkpCisJCQkJZ290byBvdXQ7CisJCX0gZWxzZQorCQkJZ290byBvdXQ7CisJCWlmIChfX2NvcHlfZnJvbV91c2VyKCZmcHJlZ3MsICZ1Yy0+dWNfbWNvbnRleHQuZnByZWdzLAorCQkJCSAgICAgc2l6ZW9mKGZwcmVncykpKQorCQkJZ290byBvdXQ7CisJCV9fYXNtX18gdm9sYXRpbGUgKCIuY2hpcCA2OGsvNjg4ODFcblx0IgorCQkJCSAgImZtb3ZlbXggJTAsJSVmcDAtJSVmcDdcblx0IgorCQkJCSAgImZtb3ZlbWwgJTEsJSVmcGNyLyUlZnBzci8lJWZwaWFyXG5cdCIKKwkJCQkgICIuY2hpcCA2OGsiCisJCQkJICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCQkgIDogIm0iICgqZnByZWdzLmZfZnByZWdzKSwKKwkJCQkgICAgIm0iICgqZnByZWdzLmZfZnBjbnRsKSk7CisJfQorCWlmIChjb250ZXh0X3NpemUgJiYKKwkgICAgX19jb3B5X2Zyb21fdXNlcihmcHN0YXRlICsgNCwgKGxvbmcgKikmdWMtPnVjX2Zwc3RhdGUgKyAxLAorCQkJICAgICBjb250ZXh0X3NpemUpKQorCQlnb3RvIG91dDsKKwlfX2FzbV9fIHZvbGF0aWxlICgiLmNoaXAgNjhrLzY4ODgxXG5cdCIKKwkJCSAgImZyZXN0b3JlICUwXG5cdCIKKwkJCSAgIi5jaGlwIDY4ayIgOiA6ICJtIiAoKmZwc3RhdGUpKTsKKwllcnIgPSAwOworCitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3Jlc3RvcmVfc2lnY29udGV4dChzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHNpZ2NvbnRleHQgKnVzYywgdm9pZCAqZnAsCisJCSAgIGludCAqcGQwKQoreworCWludCBmc2l6ZSwgZm9ybWF0dmVjOworCXN0cnVjdCBzaWdjb250ZXh0IGNvbnRleHQ7CisJaW50IGVycjsKKworCS8qIGdldCBwcmV2aW91cyBjb250ZXh0ICovCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjb250ZXh0LCB1c2MsIHNpemVvZihjb250ZXh0KSkpCisJCWdvdG8gYmFkZnJhbWU7CisKKwkvKiByZXN0b3JlIHBhc3NlZCByZWdpc3RlcnMgKi8KKwlyZWdzLT5kMSA9IGNvbnRleHQuc2NfZDE7CisJcmVncy0+YTAgPSBjb250ZXh0LnNjX2EwOworCXJlZ3MtPmExID0gY29udGV4dC5zY19hMTsKKwlyZWdzLT5zciA9IChyZWdzLT5zciAmIDB4ZmYwMCkgfCAoY29udGV4dC5zY19zciAmIDB4ZmYpOworCXJlZ3MtPnBjID0gY29udGV4dC5zY19wYzsKKwlyZWdzLT5vcmlnX2QwID0gLTE7CQkvKiBkaXNhYmxlIHN5c2NhbGwgY2hlY2tzICovCisJd3J1c3AoY29udGV4dC5zY191c3ApOworCWZvcm1hdHZlYyA9IGNvbnRleHQuc2NfZm9ybWF0dmVjOworCXJlZ3MtPmZvcm1hdCA9IGZvcm1hdHZlYyA+PiAxMjsKKwlyZWdzLT52ZWN0b3IgPSBmb3JtYXR2ZWMgJiAweGZmZjsKKworCWVyciA9IHJlc3RvcmVfZnB1X3N0YXRlKCZjb250ZXh0KTsKKworCWZzaXplID0gZnJhbWVfZXh0cmFfc2l6ZXNbcmVncy0+Zm9ybWF0XTsKKwlpZiAoZnNpemUgPCAwKSB7CisJCS8qCisJCSAqIHVzZXIgcHJvY2VzcyB0cnlpbmcgdG8gcmV0dXJuIHdpdGggd2VpcmQgZnJhbWUgZm9ybWF0CisJCSAqLworI2lmZGVmIERFQlVHCisJCXByaW50aygidXNlciBwcm9jZXNzIHJldHVybmluZyB3aXRoIHdlaXJkIGZyYW1lIGZvcm1hdFxuIik7CisjZW5kaWYKKwkJZ290byBiYWRmcmFtZTsKKwl9CisKKwkvKiBPSy4JTWFrZSByb29tIG9uIHRoZSBzdXBlcnZpc29yIHN0YWNrIGZvciB0aGUgZXh0cmEganVuaywKKwkgKiBpZiBuZWNlc3NhcnkuCisJICovCisKKwlpZiAoZnNpemUpIHsKKwkJc3RydWN0IHN3aXRjaF9zdGFjayAqc3cgPSAoc3RydWN0IHN3aXRjaF9zdGFjayAqKXJlZ3MgLSAxOworCQlyZWdzLT5kMCA9IGNvbnRleHQuc2NfZDA7CisjZGVmaW5lIGZyYW1lX29mZnNldCAoc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKStzaXplb2Yoc3RydWN0IHN3aXRjaF9zdGFjaykpCisJCV9fYXNtX18gX192b2xhdGlsZV9fCisJCQkoIiAgIG1vdmVsICUwLCUvYTBcblx0IgorCQkJICIgICBzdWJsICUxLCUvYTBcblx0IiAgICAgLyogbWFrZSByb29tIG9uIHN0YWNrICovCisJCQkgIiAgIG1vdmVsICUvYTAsJS9zcFxuXHQiICAvKiBzZXQgc3RhY2sgcG9pbnRlciAqLworCQkJIC8qIG1vdmUgc3dpdGNoX3N0YWNrIGFuZCBwdF9yZWdzICovCisJCQkgIjE6IG1vdmVsICUwQCssJS9hMEArXG5cdCIKKwkJCSAiICAgZGJyYSAlMiwxYlxuXHQiCisJCQkgIiAgIGxlYSAlL3NwQCglYzMpLCUvYTBcblx0IiAvKiBhZGQgb2Zmc2V0IG9mIGZtdCAqLworCQkJICIgICBsc3JsICAjMiwlMVxuXHQiCisJCQkgIiAgIHN1YnFsICMxLCUxXG5cdCIKKwkJCSAiMjogbW92ZXNsICU0QCssJTJcblx0IgorCQkJICIzOiBtb3ZlbCAlMiwlL2EwQCtcblx0IgorCQkJICIgICBkYnJhICUxLDJiXG5cdCIKKwkJCSAiICAgYnJhbCByZXRfZnJvbV9zaWduYWxcbiIKKwkJCSAiNDpcbiIKKwkJCSAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCQkJICIgICAuYWxpZ24gNFxuIgorCQkJICIgICAubG9uZyAyYiw0YlxuIgorCQkJICIgICAubG9uZyAzYiw0YlxuIgorCQkJICIucHJldmlvdXMiCisJCQkgOiAvKiBubyBvdXRwdXRzLCBpdCBkb2Vzbid0IGV2ZXIgcmV0dXJuICovCisJCQkgOiAiYSIgKHN3KSwgImQiIChmc2l6ZSksICJkIiAoZnJhbWVfb2Zmc2V0LzQtMSksCisJCQkgICAibiIgKGZyYW1lX29mZnNldCksICJhIiAoZnApCisJCQkgOiAiYTAiKTsKKyN1bmRlZiBmcmFtZV9vZmZzZXQKKwkJLyoKKwkJICogSWYgd2UgZXZlciBnZXQgaGVyZSBhbiBleGNlcHRpb24gb2NjdXJyZWQgd2hpbGUKKwkJICogYnVpbGRpbmcgdGhlIGFib3ZlIHN0YWNrLWZyYW1lLgorCQkgKi8KKwkJZ290byBiYWRmcmFtZTsKKwl9CisKKwkqcGQwID0gY29udGV4dC5zY19kMDsKKwlyZXR1cm4gZXJyOworCitiYWRmcmFtZToKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3J0X3Jlc3RvcmVfdWNvbnRleHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3LAorCQkgICAgc3RydWN0IHVjb250ZXh0ICp1YywgaW50ICpwZDApCit7CisJaW50IGZzaXplLCB0ZW1wOworCWdyZWdfdCAqZ3JlZ3MgPSB1Yy0+dWNfbWNvbnRleHQuZ3JlZ3M7CisJdW5zaWduZWQgbG9uZyB1c3A7CisJaW50IGVycjsKKworCWVyciA9IF9fZ2V0X3VzZXIodGVtcCwgJnVjLT51Y19tY29udGV4dC52ZXJzaW9uKTsKKwlpZiAodGVtcCAhPSBNQ09OVEVYVF9WRVJTSU9OKQorCQlnb3RvIGJhZGZyYW1lOworCS8qIHJlc3RvcmUgcGFzc2VkIHJlZ2lzdGVycyAqLworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPmQwLCAmZ3JlZ3NbMF0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPmQxLCAmZ3JlZ3NbMV0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPmQyLCAmZ3JlZ3NbMl0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPmQzLCAmZ3JlZ3NbM10pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPmQ0LCAmZ3JlZ3NbNF0pOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPmQ1LCAmZ3JlZ3NbNV0pOworCWVyciB8PSBfX2dldF91c2VyKHN3LT5kNiwgJmdyZWdzWzZdKTsKKwllcnIgfD0gX19nZXRfdXNlcihzdy0+ZDcsICZncmVnc1s3XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+YTAsICZncmVnc1s4XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+YTEsICZncmVnc1s5XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocmVncy0+YTIsICZncmVnc1sxMF0pOworCWVyciB8PSBfX2dldF91c2VyKHN3LT5hMywgJmdyZWdzWzExXSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIoc3ctPmE0LCAmZ3JlZ3NbMTJdKTsKKwllcnIgfD0gX19nZXRfdXNlcihzdy0+YTUsICZncmVnc1sxM10pOworCWVyciB8PSBfX2dldF91c2VyKHN3LT5hNiwgJmdyZWdzWzE0XSk7CisJZXJyIHw9IF9fZ2V0X3VzZXIodXNwLCAmZ3JlZ3NbMTVdKTsKKwl3cnVzcCh1c3ApOworCWVyciB8PSBfX2dldF91c2VyKHJlZ3MtPnBjLCAmZ3JlZ3NbMTZdKTsKKwllcnIgfD0gX19nZXRfdXNlcih0ZW1wLCAmZ3JlZ3NbMTddKTsKKwlyZWdzLT5zciA9IChyZWdzLT5zciAmIDB4ZmYwMCkgfCAodGVtcCAmIDB4ZmYpOworCXJlZ3MtPm9yaWdfZDAgPSAtMTsJCS8qIGRpc2FibGUgc3lzY2FsbCBjaGVja3MgKi8KKwllcnIgfD0gX19nZXRfdXNlcih0ZW1wLCAmdWMtPnVjX2Zvcm1hdHZlYyk7CisJcmVncy0+Zm9ybWF0ID0gdGVtcCA+PiAxMjsKKwlyZWdzLT52ZWN0b3IgPSB0ZW1wICYgMHhmZmY7CisKKwllcnIgfD0gcnRfcmVzdG9yZV9mcHVfc3RhdGUodWMpOworCisJaWYgKGRvX3NpZ2FsdHN0YWNrKCZ1Yy0+dWNfc3RhY2ssIE5VTEwsIHVzcCkgPT0gLUVGQVVMVCkKKwkJZ290byBiYWRmcmFtZTsKKworCWZzaXplID0gZnJhbWVfZXh0cmFfc2l6ZXNbcmVncy0+Zm9ybWF0XTsKKwlpZiAoZnNpemUgPCAwKSB7CisJCS8qCisJCSAqIHVzZXIgcHJvY2VzcyB0cnlpbmcgdG8gcmV0dXJuIHdpdGggd2VpcmQgZnJhbWUgZm9ybWF0CisJCSAqLworI2lmZGVmIERFQlVHCisJCXByaW50aygidXNlciBwcm9jZXNzIHJldHVybmluZyB3aXRoIHdlaXJkIGZyYW1lIGZvcm1hdFxuIik7CisjZW5kaWYKKwkJZ290byBiYWRmcmFtZTsKKwl9CisKKwkvKiBPSy4JTWFrZSByb29tIG9uIHRoZSBzdXBlcnZpc29yIHN0YWNrIGZvciB0aGUgZXh0cmEganVuaywKKwkgKiBpZiBuZWNlc3NhcnkuCisJICovCisKKwlpZiAoZnNpemUpIHsKKyNkZWZpbmUgZnJhbWVfb2Zmc2V0IChzaXplb2Yoc3RydWN0IHB0X3JlZ3MpK3NpemVvZihzdHJ1Y3Qgc3dpdGNoX3N0YWNrKSkKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18KKwkJCSgiICAgbW92ZWwgJTAsJS9hMFxuXHQiCisJCQkgIiAgIHN1YmwgJTEsJS9hMFxuXHQiICAgICAvKiBtYWtlIHJvb20gb24gc3RhY2sgKi8KKwkJCSAiICAgbW92ZWwgJS9hMCwlL3NwXG5cdCIgIC8qIHNldCBzdGFjayBwb2ludGVyICovCisJCQkgLyogbW92ZSBzd2l0Y2hfc3RhY2sgYW5kIHB0X3JlZ3MgKi8KKwkJCSAiMTogbW92ZWwgJTBAKywlL2EwQCtcblx0IgorCQkJICIgICBkYnJhICUyLDFiXG5cdCIKKwkJCSAiICAgbGVhICUvc3BAKCVjMyksJS9hMFxuXHQiIC8qIGFkZCBvZmZzZXQgb2YgZm10ICovCisJCQkgIiAgIGxzcmwgICMyLCUxXG5cdCIKKwkJCSAiICAgc3VicWwgIzEsJTFcblx0IgorCQkJICIyOiBtb3Zlc2wgJTRAKywlMlxuXHQiCisJCQkgIjM6IG1vdmVsICUyLCUvYTBAK1xuXHQiCisJCQkgIiAgIGRicmEgJTEsMmJcblx0IgorCQkJICIgICBicmFsIHJldF9mcm9tX3NpZ25hbFxuIgorCQkJICI0OlxuIgorCQkJICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJCQkgIiAgIC5hbGlnbiA0XG4iCisJCQkgIiAgIC5sb25nIDJiLDRiXG4iCisJCQkgIiAgIC5sb25nIDNiLDRiXG4iCisJCQkgIi5wcmV2aW91cyIKKwkJCSA6IC8qIG5vIG91dHB1dHMsIGl0IGRvZXNuJ3QgZXZlciByZXR1cm4gKi8KKwkJCSA6ICJhIiAoc3cpLCAiZCIgKGZzaXplKSwgImQiIChmcmFtZV9vZmZzZXQvNC0xKSwKKwkJCSAgICJuIiAoZnJhbWVfb2Zmc2V0KSwgImEiICgmdWMtPnVjX2V4dHJhKQorCQkJIDogImEwIik7CisjdW5kZWYgZnJhbWVfb2Zmc2V0CisJCS8qCisJCSAqIElmIHdlIGV2ZXIgZ2V0IGhlcmUgYW4gZXhjZXB0aW9uIG9jY3VycmVkIHdoaWxlCisJCSAqIGJ1aWxkaW5nIHRoZSBhYm92ZSBzdGFjay1mcmFtZS4KKwkJICovCisJCWdvdG8gYmFkZnJhbWU7CisJfQorCisJKnBkMCA9IHJlZ3MtPmQwOworCXJldHVybiBlcnI7CisKK2JhZGZyYW1lOgorCXJldHVybiAxOworfQorCithc21saW5rYWdlIGludCBkb19zaWdyZXR1cm4odW5zaWduZWQgbG9uZyBfX3VudXNlZCkKK3sKKwlzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdyA9IChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopICZfX3VudXNlZDsKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IChzdHJ1Y3QgcHRfcmVncyAqKSAoc3cgKyAxKTsKKwl1bnNpZ25lZCBsb25nIHVzcCA9IHJkdXNwKCk7CisJc3RydWN0IHNpZ2ZyYW1lICpmcmFtZSA9IChzdHJ1Y3Qgc2lnZnJhbWUgKikodXNwIC0gNCk7CisJc2lnc2V0X3Qgc2V0OworCWludCBkMDsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpKQorCQlnb3RvIGJhZGZyYW1lOworCWlmIChfX2dldF91c2VyKHNldC5zaWdbMF0sICZmcmFtZS0+c2Muc2NfbWFzaykgfHwKKwkgICAgKF9OU0lHX1dPUkRTID4gMSAmJgorCSAgICAgX19jb3B5X2Zyb21fdXNlcigmc2V0LnNpZ1sxXSwgJmZyYW1lLT5leHRyYW1hc2ssCisJCQkgICAgICBzaXplb2YoZnJhbWUtPmV4dHJhbWFzaykpKSkKKwkJZ290byBiYWRmcmFtZTsKKworCXNpZ2RlbHNldG1hc2soJnNldCwgfl9CTE9DS0FCTEUpOworCWN1cnJlbnQtPmJsb2NrZWQgPSBzZXQ7CisJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKKworCWlmIChyZXN0b3JlX3NpZ2NvbnRleHQocmVncywgJmZyYW1lLT5zYywgZnJhbWUgKyAxLCAmZDApKQorCQlnb3RvIGJhZGZyYW1lOworCXJldHVybiBkMDsKKworYmFkZnJhbWU6CisJZm9yY2Vfc2lnKFNJR1NFR1YsIGN1cnJlbnQpOworCXJldHVybiAwOworfQorCithc21saW5rYWdlIGludCBkb19ydF9zaWdyZXR1cm4odW5zaWduZWQgbG9uZyBfX3VudXNlZCkKK3sKKwlzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdyA9IChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopICZfX3VudXNlZDsKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IChzdHJ1Y3QgcHRfcmVncyAqKSAoc3cgKyAxKTsKKwl1bnNpZ25lZCBsb25nIHVzcCA9IHJkdXNwKCk7CisJc3RydWN0IHJ0X3NpZ2ZyYW1lICpmcmFtZSA9IChzdHJ1Y3QgcnRfc2lnZnJhbWUgKikodXNwIC0gNCk7CisJc2lnc2V0X3Qgc2V0OworCWludCBkMDsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpKQorCQlnb3RvIGJhZGZyYW1lOworCWlmIChfX2NvcHlfZnJvbV91c2VyKCZzZXQsICZmcmFtZS0+dWMudWNfc2lnbWFzaywgc2l6ZW9mKHNldCkpKQorCQlnb3RvIGJhZGZyYW1lOworCisJc2lnZGVsc2V0bWFzaygmc2V0LCB+X0JMT0NLQUJMRSk7CisJY3VycmVudC0+YmxvY2tlZCA9IHNldDsKKwlyZWNhbGNfc2lncGVuZGluZygpOworCisJaWYgKHJ0X3Jlc3RvcmVfdWNvbnRleHQocmVncywgc3csICZmcmFtZS0+dWMsICZkMCkpCisJCWdvdG8gYmFkZnJhbWU7CisJcmV0dXJuIGQwOworCitiYWRmcmFtZToKKwlmb3JjZV9zaWcoU0lHU0VHViwgY3VycmVudCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgdXAgYSBzaWduYWwgZnJhbWUuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHNhdmVfZnB1X3N0YXRlKHN0cnVjdCBzaWdjb250ZXh0ICpzYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKEZQVV9JU19FTVUpIHsKKwkJLyogc2F2ZSByZWdpc3RlcnMgKi8KKwkJbWVtY3B5KHNjLT5zY19mcGNudGwsIGN1cnJlbnQtPnRocmVhZC5mcGNudGwsIDEyKTsKKwkJbWVtY3B5KHNjLT5zY19mcHJlZ3MsIGN1cnJlbnQtPnRocmVhZC5mcCwgMjQpOworCQlyZXR1cm47CisJfQorCisJX19hc21fXyB2b2xhdGlsZSAoIi5jaGlwIDY4ay82ODg4MVxuXHQiCisJCQkgICJmc2F2ZSAlMFxuXHQiCisJCQkgICIuY2hpcCA2OGsiCisJCQkgIDogOiAibSIgKCpzYy0+c2NfZnBzdGF0ZSkgOiAibWVtb3J5Iik7CisKKwlpZiAoQ1BVX0lTXzA2MCA/IHNjLT5zY19mcHN0YXRlWzJdIDogc2MtPnNjX2Zwc3RhdGVbMF0pIHsKKwkJZnB1X3ZlcnNpb24gPSBzYy0+c2NfZnBzdGF0ZVswXTsKKwkJaWYgKENQVV9JU18wMjBfT1JfMDMwICYmCisJCSAgICByZWdzLT52ZWN0b3IgPj0gKFZFQ19GUEJSVUMgKiA0KSAmJgorCQkgICAgcmVncy0+dmVjdG9yIDw9IChWRUNfRlBOQU4gKiA0KSkgeworCQkJLyogQ2xlYXIgcGVuZGluZyBleGNlcHRpb24gaW4gNjg4ODIgaWRsZSBmcmFtZSAqLworCQkJaWYgKCoodW5zaWduZWQgc2hvcnQgKikgc2MtPnNjX2Zwc3RhdGUgPT0gMHgxZjM4KQorCQkJCXNjLT5zY19mcHN0YXRlWzB4MzhdIHw9IDEgPDwgMzsKKwkJfQorCQlfX2FzbV9fIHZvbGF0aWxlICgiLmNoaXAgNjhrLzY4ODgxXG5cdCIKKwkJCQkgICJmbW92ZW14ICUlZnAwLSUlZnAxLCUwXG5cdCIKKwkJCQkgICJmbW92ZW1sICUlZnBjci8lJWZwc3IvJSVmcGlhciwlMVxuXHQiCisJCQkJICAiLmNoaXAgNjhrIgorCQkJCSAgOiAiPW0iICgqc2MtPnNjX2ZwcmVncyksCisJCQkJICAgICI9bSIgKCpzYy0+c2NfZnBjbnRsKQorCQkJCSAgOiAvKiBubyBpbnB1dHMgKi8KKwkJCQkgIDogIm1lbW9yeSIpOworCX0KK30KKworc3RhdGljIGlubGluZSBpbnQgcnRfc2F2ZV9mcHVfc3RhdGUoc3RydWN0IHVjb250ZXh0ICp1Yywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgY2hhciBmcHN0YXRlW0ZQQ09OVEVYVF9TSVpFXTsKKwlpbnQgY29udGV4dF9zaXplID0gQ1BVX0lTXzA2MCA/IDggOiAwOworCWludCBlcnIgPSAwOworCisJaWYgKEZQVV9JU19FTVUpIHsKKwkJLyogc2F2ZSBmcHUgY29udHJvbCByZWdpc3RlciAqLworCQllcnIgfD0gY29weV90b191c2VyKHVjLT51Y19tY29udGV4dC5mcHJlZ3MuZl9mcGNudGwsCisJCQkJY3VycmVudC0+dGhyZWFkLmZwY250bCwgMTIpOworCQkvKiBzYXZlIGFsbCBvdGhlciBmcHUgcmVnaXN0ZXIgKi8KKwkJZXJyIHw9IGNvcHlfdG9fdXNlcih1Yy0+dWNfbWNvbnRleHQuZnByZWdzLmZfZnByZWdzLAorCQkJCWN1cnJlbnQtPnRocmVhZC5mcCwgOTYpOworCQlyZXR1cm4gZXJyOworCX0KKworCV9fYXNtX18gdm9sYXRpbGUgKCIuY2hpcCA2OGsvNjg4ODFcblx0IgorCQkJICAiZnNhdmUgJTBcblx0IgorCQkJICAiLmNoaXAgNjhrIgorCQkJICA6IDogIm0iICgqZnBzdGF0ZSkgOiAibWVtb3J5Iik7CisKKwllcnIgfD0gX19wdXRfdXNlcigqKGxvbmcgKilmcHN0YXRlLCAobG9uZyAqKSZ1Yy0+dWNfZnBzdGF0ZSk7CisJaWYgKENQVV9JU18wNjAgPyBmcHN0YXRlWzJdIDogZnBzdGF0ZVswXSkgeworCQlmcHJlZ3NldF90IGZwcmVnczsKKwkJaWYgKCFDUFVfSVNfMDYwKQorCQkJY29udGV4dF9zaXplID0gZnBzdGF0ZVsxXTsKKwkJZnB1X3ZlcnNpb24gPSBmcHN0YXRlWzBdOworCQlpZiAoQ1BVX0lTXzAyMF9PUl8wMzAgJiYKKwkJICAgIHJlZ3MtPnZlY3RvciA+PSAoVkVDX0ZQQlJVQyAqIDQpICYmCisJCSAgICByZWdzLT52ZWN0b3IgPD0gKFZFQ19GUE5BTiAqIDQpKSB7CisJCQkvKiBDbGVhciBwZW5kaW5nIGV4Y2VwdGlvbiBpbiA2ODg4MiBpZGxlIGZyYW1lICovCisJCQlpZiAoKih1bnNpZ25lZCBzaG9ydCAqKSBmcHN0YXRlID09IDB4MWYzOCkKKwkJCQlmcHN0YXRlWzB4MzhdIHw9IDEgPDwgMzsKKwkJfQorCQlfX2FzbV9fIHZvbGF0aWxlICgiLmNoaXAgNjhrLzY4ODgxXG5cdCIKKwkJCQkgICJmbW92ZW14ICUlZnAwLSUlZnA3LCUwXG5cdCIKKwkJCQkgICJmbW92ZW1sICUlZnBjci8lJWZwc3IvJSVmcGlhciwlMVxuXHQiCisJCQkJICAiLmNoaXAgNjhrIgorCQkJCSAgOiAiPW0iICgqZnByZWdzLmZfZnByZWdzKSwKKwkJCQkgICAgIj1tIiAoKmZwcmVncy5mX2ZwY250bCkKKwkJCQkgIDogLyogbm8gaW5wdXRzICovCisJCQkJICA6ICJtZW1vcnkiKTsKKwkJZXJyIHw9IGNvcHlfdG9fdXNlcigmdWMtPnVjX21jb250ZXh0LmZwcmVncywgJmZwcmVncywKKwkJCQkgICAgc2l6ZW9mKGZwcmVncykpOworCX0KKwlpZiAoY29udGV4dF9zaXplKQorCQllcnIgfD0gY29weV90b191c2VyKChsb25nICopJnVjLT51Y19mcHN0YXRlICsgMSwgZnBzdGF0ZSArIDQsCisJCQkJICAgIGNvbnRleHRfc2l6ZSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfc2lnY29udGV4dChzdHJ1Y3Qgc2lnY29udGV4dCAqc2MsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJICAgICB1bnNpZ25lZCBsb25nIG1hc2spCit7CisJc2MtPnNjX21hc2sgPSBtYXNrOworCXNjLT5zY191c3AgPSByZHVzcCgpOworCXNjLT5zY19kMCA9IHJlZ3MtPmQwOworCXNjLT5zY19kMSA9IHJlZ3MtPmQxOworCXNjLT5zY19hMCA9IHJlZ3MtPmEwOworCXNjLT5zY19hMSA9IHJlZ3MtPmExOworCXNjLT5zY19zciA9IHJlZ3MtPnNyOworCXNjLT5zY19wYyA9IHJlZ3MtPnBjOworCXNjLT5zY19mb3JtYXR2ZWMgPSByZWdzLT5mb3JtYXQgPDwgMTIgfCByZWdzLT52ZWN0b3I7CisJc2F2ZV9mcHVfc3RhdGUoc2MsIHJlZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBydF9zZXR1cF91Y29udGV4dChzdHJ1Y3QgdWNvbnRleHQgKnVjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdyA9IChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopcmVncyAtIDE7CisJZ3JlZ190ICpncmVncyA9IHVjLT51Y19tY29udGV4dC5ncmVnczsKKwlpbnQgZXJyID0gMDsKKworCWVyciB8PSBfX3B1dF91c2VyKE1DT05URVhUX1ZFUlNJT04sICZ1Yy0+dWNfbWNvbnRleHQudmVyc2lvbik7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+ZDAsICZncmVnc1swXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+ZDEsICZncmVnc1sxXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+ZDIsICZncmVnc1syXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+ZDMsICZncmVnc1szXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+ZDQsICZncmVnc1s0XSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+ZDUsICZncmVnc1s1XSk7CisJZXJyIHw9IF9fcHV0X3VzZXIoc3ctPmQ2LCAmZ3JlZ3NbNl0pOworCWVyciB8PSBfX3B1dF91c2VyKHN3LT5kNywgJmdyZWdzWzddKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5hMCwgJmdyZWdzWzhdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5hMSwgJmdyZWdzWzldKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5hMiwgJmdyZWdzWzEwXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIoc3ctPmEzLCAmZ3JlZ3NbMTFdKTsKKwllcnIgfD0gX19wdXRfdXNlcihzdy0+YTQsICZncmVnc1sxMl0pOworCWVyciB8PSBfX3B1dF91c2VyKHN3LT5hNSwgJmdyZWdzWzEzXSk7CisJZXJyIHw9IF9fcHV0X3VzZXIoc3ctPmE2LCAmZ3JlZ3NbMTRdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZHVzcCgpLCAmZ3JlZ3NbMTVdKTsKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT5wYywgJmdyZWdzWzE2XSk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+c3IsICZncmVnc1sxN10pOworCWVyciB8PSBfX3B1dF91c2VyKChyZWdzLT5mb3JtYXQgPDwgMTIpIHwgcmVncy0+dmVjdG9yLCAmdWMtPnVjX2Zvcm1hdHZlYyk7CisJZXJyIHw9IHJ0X3NhdmVfZnB1X3N0YXRlKHVjLCByZWdzKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHVzaF9jYWNoZSAodW5zaWduZWQgbG9uZyB2YWRkcikKK3sKKwkvKgorCSAqIFVzaW5nIHRoZSBvbGQgY2FjaGVfcHVzaF92KCkgd2FzIHJlYWxseSBhIGJpZyB3YXN0ZS4KKwkgKgorCSAqIFdoYXQgd2UgYXJlIHRyeWluZyB0byBkbyBpcyB0byBmbHVzaCA4IGJ5dGVzIHRvIHJhbS4KKwkgKiBGbHVzaGluZyAyIGNhY2hlIGxpbmVzIG9mIDE2IGJ5dGVzIGlzIG11Y2ggY2hlYXBlciB0aGFuCisJICogZmx1c2hpbmcgMSBvciAyIHBhZ2VzLCBhcyBwcmV2aW91c2x5IGRvbmUgaW4KKwkgKiBjYWNoZV9wdXNoX3YoKS4KKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSmVzCisJICovCisJaWYgKENQVV9JU18wNDApIHsKKwkJdW5zaWduZWQgbG9uZyB0ZW1wOworCisJCV9fYXNtX18gX192b2xhdGlsZV9fICgiLmNoaXAgNjgwNDBcblx0IgorCQkJCSAgICAgICJub3Bcblx0IgorCQkJCSAgICAgICJwdGVzdHIgKCUxKVxuXHQiCisJCQkJICAgICAgIm1vdmVjICUlbW11c3IsJTBcblx0IgorCQkJCSAgICAgICIuY2hpcCA2OGsiCisJCQkJICAgICAgOiAiPXIiICh0ZW1wKQorCQkJCSAgICAgIDogImEiICh2YWRkcikpOworCisJCXRlbXAgJj0gUEFHRV9NQVNLOworCQl0ZW1wIHw9IHZhZGRyICYgflBBR0VfTUFTSzsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIi5jaGlwIDY4MDQwXG5cdCIKKwkJCQkgICAgICAibm9wXG5cdCIKKwkJCQkgICAgICAiY3B1c2hsICUlYmMsKCUwKVxuXHQiCisJCQkJICAgICAgIi5jaGlwIDY4ayIKKwkJCQkgICAgICA6IDogImEiICh0ZW1wKSk7CisJfQorCWVsc2UgaWYgKENQVV9JU18wNjApIHsKKwkJdW5zaWduZWQgbG9uZyB0ZW1wOworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIi5jaGlwIDY4MDYwXG5cdCIKKwkJCQkgICAgICAicGxwYXIgKCUwKVxuXHQiCisJCQkJICAgICAgIi5jaGlwIDY4ayIKKwkJCQkgICAgICA6ICI9YSIgKHRlbXApCisJCQkJICAgICAgOiAiMCIgKHZhZGRyKSk7CisJCV9fYXNtX18gX192b2xhdGlsZV9fICgiLmNoaXAgNjgwNjBcblx0IgorCQkJCSAgICAgICJjcHVzaGwgJSViYywoJTApXG5cdCIKKwkJCQkgICAgICAiLmNoaXAgNjhrIgorCQkJCSAgICAgIDogOiAiYSIgKHRlbXApKTsKKwl9CisJZWxzZSB7CisJCS8qCisJCSAqIDY4MDMwLzY4MDIwIGhhdmUgbm8gd3JpdGViYWNrIGNhY2hlOworCQkgKiBzdGlsbCBuZWVkIHRvIGNsZWFyIGljYWNoZS4KKwkJICogTm90ZSB0aGF0IHZhZGRyIGlzIGd1YXJhbnRlZWQgdG8gYmUgbG9uZyB3b3JkIGFsaWduZWQuCisJCSAqLworCQl1bnNpZ25lZCBsb25nIHRlbXA7CisJCWFzbSB2b2xhdGlsZSAoIm1vdmVjICUlY2FjciwlMCIgOiAiPXIiICh0ZW1wKSk7CisJCXRlbXAgKz0gNDsKKwkJYXNtIHZvbGF0aWxlICgibW92ZWMgJTAsJSVjYWFyXG5cdCIKKwkJCSAgICAgICJtb3ZlYyAlMSwlJWNhY3IiCisJCQkgICAgICA6IDogInIiICh2YWRkciksICJyIiAodGVtcCkpOworCQlhc20gdm9sYXRpbGUgKCJtb3ZlYyAlMCwlJWNhYXJcblx0IgorCQkJICAgICAgIm1vdmVjICUxLCUlY2FjciIKKwkJCSAgICAgIDogOiAiciIgKHZhZGRyICsgNCksICJyIiAodGVtcCkpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkICoKK2dldF9zaWdmcmFtZShzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgc2l6ZV90IGZyYW1lX3NpemUpCit7CisJdW5zaWduZWQgbG9uZyB1c3A7CisKKwkvKiBEZWZhdWx0IHRvIHVzaW5nIG5vcm1hbCBzdGFjay4gICovCisJdXNwID0gcmR1c3AoKTsKKworCS8qIFRoaXMgaXMgdGhlIFgvT3BlbiBzYW5jdGlvbmVkIHNpZ25hbCBzdGFjayBzd2l0Y2hpbmcuICAqLworCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9PTlNUQUNLKSB7CisJCWlmICghb25fc2lnX3N0YWNrKHVzcCkpCisJCQl1c3AgPSBjdXJyZW50LT5zYXNfc3Nfc3AgKyBjdXJyZW50LT5zYXNfc3Nfc2l6ZTsKKwl9CisJcmV0dXJuICh2b2lkICopKCh1c3AgLSBmcmFtZV9zaXplKSAmIC04VUwpOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9mcmFtZSAoaW50IHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwKKwkJCSBzaWdzZXRfdCAqc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgc2lnZnJhbWUgKmZyYW1lOworCWludCBmc2l6ZSA9IGZyYW1lX2V4dHJhX3NpemVzW3JlZ3MtPmZvcm1hdF07CisJc3RydWN0IHNpZ2NvbnRleHQgY29udGV4dDsKKwlpbnQgZXJyID0gMDsKKworCWlmIChmc2l6ZSA8IDApIHsKKyNpZmRlZiBERUJVRworCQlwcmludGsgKCJzZXR1cF9mcmFtZTogVW5rbm93biBmcmFtZSBmb3JtYXQgJSN4XG4iLAorCQkJcmVncy0+Zm9ybWF0KTsKKyNlbmRpZgorCQlnb3RvIGdpdmVfc2lnc2VndjsKKwl9CisKKwlmcmFtZSA9IGdldF9zaWdmcmFtZShrYSwgcmVncywgc2l6ZW9mKCpmcmFtZSkgKyBmc2l6ZSk7CisKKwlpZiAoZnNpemUpIHsKKwkJZXJyIHw9IGNvcHlfdG9fdXNlciAoZnJhbWUgKyAxLCByZWdzICsgMSwgZnNpemUpOworCQlyZWdzLT5zdGthZGogPSBmc2l6ZTsKKwl9CisKKwllcnIgfD0gX19wdXRfdXNlcigoY3VycmVudF90aHJlYWRfaW5mbygpLT5leGVjX2RvbWFpbgorCQkJICAgJiYgY3VycmVudF90aHJlYWRfaW5mbygpLT5leGVjX2RvbWFpbi0+c2lnbmFsX2ludm1hcAorCQkJICAgJiYgc2lnIDwgMzIKKwkJCSAgID8gY3VycmVudF90aHJlYWRfaW5mbygpLT5leGVjX2RvbWFpbi0+c2lnbmFsX2ludm1hcFtzaWddCisJCQkgICA6IHNpZyksCisJCQkgICZmcmFtZS0+c2lnKTsKKworCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPnZlY3RvciwgJmZyYW1lLT5jb2RlKTsKKwllcnIgfD0gX19wdXRfdXNlcigmZnJhbWUtPnNjLCAmZnJhbWUtPnBzYyk7CisKKwlpZiAoX05TSUdfV09SRFMgPiAxKQorCQllcnIgfD0gY29weV90b191c2VyKGZyYW1lLT5leHRyYW1hc2ssICZzZXQtPnNpZ1sxXSwKKwkJCQkgICAgc2l6ZW9mKGZyYW1lLT5leHRyYW1hc2spKTsKKworCXNldHVwX3NpZ2NvbnRleHQoJmNvbnRleHQsIHJlZ3MsIHNldC0+c2lnWzBdKTsKKwllcnIgfD0gY29weV90b191c2VyICgmZnJhbWUtPnNjLCAmY29udGV4dCwgc2l6ZW9mKGNvbnRleHQpKTsKKworCS8qIFNldCB1cCB0byByZXR1cm4gZnJvbSB1c2Vyc3BhY2UuICAqLworCWVyciB8PSBfX3B1dF91c2VyKGZyYW1lLT5yZXRjb2RlLCAmZnJhbWUtPnByZXRjb2RlKTsKKwkvKiBtb3ZlcSAjLGQwOyB0cmFwICMwICovCisJZXJyIHw9IF9fcHV0X3VzZXIoMHg3MDAwNGU0MCArIChfX05SX3NpZ3JldHVybiA8PCAxNiksCisJCQkgIChsb25nICopKGZyYW1lLT5yZXRjb2RlKSk7CisKKwlpZiAoZXJyKQorCQlnb3RvIGdpdmVfc2lnc2VndjsKKworCXB1c2hfY2FjaGUgKCh1bnNpZ25lZCBsb25nKSAmZnJhbWUtPnJldGNvZGUpOworCisJLyogU2V0IHVwIHJlZ2lzdGVycyBmb3Igc2lnbmFsIGhhbmRsZXIgKi8KKwl3cnVzcCAoKHVuc2lnbmVkIGxvbmcpIGZyYW1lKTsKKwlyZWdzLT5wYyA9ICh1bnNpZ25lZCBsb25nKSBrYS0+c2Euc2FfaGFuZGxlcjsKKworYWRqdXN0X3N0YWNrOgorCS8qIFByZXBhcmUgdG8gc2tpcCBvdmVyIHRoZSBleHRyYSBzdHVmZiBpbiB0aGUgZXhjZXB0aW9uIGZyYW1lLiAgKi8KKwlpZiAocmVncy0+c3RrYWRqKSB7CisJCXN0cnVjdCBwdF9yZWdzICp0cmVncyA9CisJCQkoc3RydWN0IHB0X3JlZ3MgKikoKHVsb25nKXJlZ3MgKyByZWdzLT5zdGthZGopOworI2lmZGVmIERFQlVHCisJCXByaW50aygiUGVyZm9ybWluZyBzdGFja2FkanVzdD0lMDR4XG4iLCByZWdzLT5zdGthZGopOworI2VuZGlmCisJCS8qIFRoaXMgbXVzdCBiZSBjb3BpZWQgd2l0aCBkZWNyZWFzaW5nIGFkZHJlc3NlcyB0bworICAgICAgICAgICAgICAgICAgIGhhbmRsZSBvdmVybGFwcy4gICovCisJCXRyZWdzLT52ZWN0b3IgPSAwOworCQl0cmVncy0+Zm9ybWF0ID0gMDsKKwkJdHJlZ3MtPnBjID0gcmVncy0+cGM7CisJCXRyZWdzLT5zciA9IHJlZ3MtPnNyOworCX0KKwlyZXR1cm47CisKK2dpdmVfc2lnc2VndjoKKwlmb3JjZV9zaWdzZWd2KHNpZywgY3VycmVudCk7CisJZ290byBhZGp1c3Rfc3RhY2s7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX3J0X2ZyYW1lIChpbnQgc2lnLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLCBzaWdpbmZvX3QgKmluZm8sCisJCQkgICAgc2lnc2V0X3QgKnNldCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHJ0X3NpZ2ZyYW1lICpmcmFtZTsKKwlpbnQgZnNpemUgPSBmcmFtZV9leHRyYV9zaXplc1tyZWdzLT5mb3JtYXRdOworCWludCBlcnIgPSAwOworCisJaWYgKGZzaXplIDwgMCkgeworI2lmZGVmIERFQlVHCisJCXByaW50ayAoInNldHVwX2ZyYW1lOiBVbmtub3duIGZyYW1lIGZvcm1hdCAlI3hcbiIsCisJCQlyZWdzLT5mb3JtYXQpOworI2VuZGlmCisJCWdvdG8gZ2l2ZV9zaWdzZWd2OworCX0KKworCWZyYW1lID0gZ2V0X3NpZ2ZyYW1lKGthLCByZWdzLCBzaXplb2YoKmZyYW1lKSk7CisKKwlpZiAoZnNpemUpIHsKKwkJZXJyIHw9IGNvcHlfdG9fdXNlciAoJmZyYW1lLT51Yy51Y19leHRyYSwgcmVncyArIDEsIGZzaXplKTsKKwkJcmVncy0+c3RrYWRqID0gZnNpemU7CisJfQorCisJZXJyIHw9IF9fcHV0X3VzZXIoKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZXhlY19kb21haW4KKwkJCSAgICYmIGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZXhlY19kb21haW4tPnNpZ25hbF9pbnZtYXAKKwkJCSAgICYmIHNpZyA8IDMyCisJCQkgICA/IGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZXhlY19kb21haW4tPnNpZ25hbF9pbnZtYXBbc2lnXQorCQkJICAgOiBzaWcpLAorCQkJICAmZnJhbWUtPnNpZyk7CisJZXJyIHw9IF9fcHV0X3VzZXIoJmZyYW1lLT5pbmZvLCAmZnJhbWUtPnBpbmZvKTsKKwllcnIgfD0gX19wdXRfdXNlcigmZnJhbWUtPnVjLCAmZnJhbWUtPnB1Yyk7CisJZXJyIHw9IGNvcHlfc2lnaW5mb190b191c2VyKCZmcmFtZS0+aW5mbywgaW5mbyk7CisKKwkvKiBDcmVhdGUgdGhlIHVjb250ZXh0LiAgKi8KKwllcnIgfD0gX19wdXRfdXNlcigwLCAmZnJhbWUtPnVjLnVjX2ZsYWdzKTsKKwllcnIgfD0gX19wdXRfdXNlcigwLCAmZnJhbWUtPnVjLnVjX2xpbmspOworCWVyciB8PSBfX3B1dF91c2VyKCh2b2lkICopY3VycmVudC0+c2FzX3NzX3NwLAorCQkJICAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NwKTsKKwllcnIgfD0gX19wdXRfdXNlcihzYXNfc3NfZmxhZ3MocmR1c3AoKSksCisJCQkgICZmcmFtZS0+dWMudWNfc3RhY2suc3NfZmxhZ3MpOworCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnQtPnNhc19zc19zaXplLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NpemUpOworCWVyciB8PSBydF9zZXR1cF91Y29udGV4dCgmZnJhbWUtPnVjLCByZWdzKTsKKwllcnIgfD0gY29weV90b191c2VyICgmZnJhbWUtPnVjLnVjX3NpZ21hc2ssIHNldCwgc2l6ZW9mKCpzZXQpKTsKKworCS8qIFNldCB1cCB0byByZXR1cm4gZnJvbSB1c2Vyc3BhY2UuICAqLworCWVyciB8PSBfX3B1dF91c2VyKGZyYW1lLT5yZXRjb2RlLCAmZnJhbWUtPnByZXRjb2RlKTsKKwkvKiBtb3ZlcSAjLGQwOyBub3RiIGQwOyB0cmFwICMwICovCisJZXJyIHw9IF9fcHV0X3VzZXIoMHg3MDAwNDYwMCArICgoX19OUl9ydF9zaWdyZXR1cm4gXiAweGZmKSA8PCAxNiksCisJCQkgIChsb25nICopKGZyYW1lLT5yZXRjb2RlICsgMCkpOworCWVyciB8PSBfX3B1dF91c2VyKDB4NGU0MCwgKHNob3J0ICopKGZyYW1lLT5yZXRjb2RlICsgNCkpOworCisJaWYgKGVycikKKwkJZ290byBnaXZlX3NpZ3NlZ3Y7CisKKwlwdXNoX2NhY2hlICgodW5zaWduZWQgbG9uZykgJmZyYW1lLT5yZXRjb2RlKTsKKworCS8qIFNldCB1cCByZWdpc3RlcnMgZm9yIHNpZ25hbCBoYW5kbGVyICovCisJd3J1c3AgKCh1bnNpZ25lZCBsb25nKSBmcmFtZSk7CisJcmVncy0+cGMgPSAodW5zaWduZWQgbG9uZykga2EtPnNhLnNhX2hhbmRsZXI7CisKK2FkanVzdF9zdGFjazoKKwkvKiBQcmVwYXJlIHRvIHNraXAgb3ZlciB0aGUgZXh0cmEgc3R1ZmYgaW4gdGhlIGV4Y2VwdGlvbiBmcmFtZS4gICovCisJaWYgKHJlZ3MtPnN0a2FkaikgeworCQlzdHJ1Y3QgcHRfcmVncyAqdHJlZ3MgPQorCQkJKHN0cnVjdCBwdF9yZWdzICopKCh1bG9uZylyZWdzICsgcmVncy0+c3RrYWRqKTsKKyNpZmRlZiBERUJVRworCQlwcmludGsoIlBlcmZvcm1pbmcgc3RhY2thZGp1c3Q9JTA0eFxuIiwgcmVncy0+c3RrYWRqKTsKKyNlbmRpZgorCQkvKiBUaGlzIG11c3QgYmUgY29waWVkIHdpdGggZGVjcmVhc2luZyBhZGRyZXNzZXMgdG8KKyAgICAgICAgICAgICAgICAgICBoYW5kbGUgb3ZlcmxhcHMuICAqLworCQl0cmVncy0+dmVjdG9yID0gMDsKKwkJdHJlZ3MtPmZvcm1hdCA9IDA7CisJCXRyZWdzLT5wYyA9IHJlZ3MtPnBjOworCQl0cmVncy0+c3IgPSByZWdzLT5zcjsKKwl9CisJcmV0dXJuOworCitnaXZlX3NpZ3NlZ3Y6CisJZm9yY2Vfc2lnc2VndihzaWcsIGN1cnJlbnQpOworCWdvdG8gYWRqdXN0X3N0YWNrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2hhbmRsZV9yZXN0YXJ0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLCBpbnQgaGFzX2hhbmRsZXIpCit7CisJc3dpdGNoIChyZWdzLT5kMCkgeworCWNhc2UgLUVSRVNUQVJUTk9IQU5EOgorCQlpZiAoIWhhc19oYW5kbGVyKQorCQkJZ290byBkb19yZXN0YXJ0OworCQlyZWdzLT5kMCA9IC1FSU5UUjsKKwkJYnJlYWs7CisKKwljYXNlIC1FUkVTVEFSVFNZUzoKKwkJaWYgKGhhc19oYW5kbGVyICYmICEoa2EtPnNhLnNhX2ZsYWdzICYgU0FfUkVTVEFSVCkpIHsKKwkJCXJlZ3MtPmQwID0gLUVJTlRSOworCQkJYnJlYWs7CisJCX0KKwkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgLUVSRVNUQVJUTk9JTlRSOgorCWRvX3Jlc3RhcnQ6CisJCXJlZ3MtPmQwID0gcmVncy0+b3JpZ19kMDsKKwkJcmVncy0+cGMgLT0gMjsKKwkJYnJlYWs7CisJfQorfQorCit2b2lkIHB0cmFjZV9zaWduYWxfZGVsaXZlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCAqY29va2llKQoreworCWlmIChyZWdzLT5vcmlnX2QwIDwgMCkKKwkJcmV0dXJuOworCXN3aXRjaCAocmVncy0+ZDApIHsKKwljYXNlIC1FUkVTVEFSVE5PSEFORDoKKwljYXNlIC1FUkVTVEFSVFNZUzoKKwljYXNlIC1FUkVTVEFSVE5PSU5UUjoKKwkJcmVncy0+ZDAgPSByZWdzLT5vcmlnX2QwOworCQlyZWdzLT5vcmlnX2QwID0gLTE7CisJCXJlZ3MtPnBjIC09IDI7CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIE9LLCB3ZSdyZSBpbnZva2luZyBhIGhhbmRsZXIKKyAqLworc3RhdGljIHZvaWQKK2hhbmRsZV9zaWduYWwoaW50IHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc2lnaW5mb190ICppbmZvLAorCSAgICAgIHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCS8qIGFyZSB3ZSBmcm9tIGEgc3lzdGVtIGNhbGw/ICovCisJaWYgKHJlZ3MtPm9yaWdfZDAgPj0gMCkKKwkJLyogSWYgc28sIGNoZWNrIHN5c3RlbSBjYWxsIHJlc3RhcnRpbmcuLiAqLworCQloYW5kbGVfcmVzdGFydChyZWdzLCBrYSwgMSk7CisKKwkvKiBzZXQgdXAgdGhlIHN0YWNrIGZyYW1lICovCisJaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX1NJR0lORk8pCisJCXNldHVwX3J0X2ZyYW1lKHNpZywga2EsIGluZm8sIG9sZHNldCwgcmVncyk7CisJZWxzZQorCQlzZXR1cF9mcmFtZShzaWcsIGthLCBvbGRzZXQsIHJlZ3MpOworCisJaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX09ORVNIT1QpCisJCWthLT5zYS5zYV9oYW5kbGVyID0gU0lHX0RGTDsKKworCXNpZ29yc2V0cygmY3VycmVudC0+YmxvY2tlZCwmY3VycmVudC0+YmxvY2tlZCwma2EtPnNhLnNhX21hc2spOworCWlmICghKGthLT5zYS5zYV9mbGFncyAmIFNBX05PREVGRVIpKQorCQlzaWdhZGRzZXQoJmN1cnJlbnQtPmJsb2NrZWQsc2lnKTsKKwlyZWNhbGNfc2lncGVuZGluZygpOworfQorCisvKgorICogTm90ZSB0aGF0ICdpbml0JyBpcyBhIHNwZWNpYWwgcHJvY2VzczogaXQgZG9lc24ndCBnZXQgc2lnbmFscyBpdCBkb2Vzbid0CisgKiB3YW50IHRvIGhhbmRsZS4gVGh1cyB5b3UgY2Fubm90IGtpbGwgaW5pdCBldmVuIHdpdGggYSBTSUdLSUxMIGV2ZW4gYnkKKyAqIG1pc3Rha2UuCisgKi8KK2FzbWxpbmthZ2UgaW50IGRvX3NpZ25hbChzaWdzZXRfdCAqb2xkc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzaWdpbmZvX3QgaW5mbzsKKwlzdHJ1Y3Qga19zaWdhY3Rpb24ga2E7CisJaW50IHNpZ25yOworCisJY3VycmVudC0+dGhyZWFkLmVzcDAgPSAodW5zaWduZWQgbG9uZykgcmVnczsKKworCWlmICghb2xkc2V0KQorCQlvbGRzZXQgPSAmY3VycmVudC0+YmxvY2tlZDsKKworCXNpZ25yID0gZ2V0X3NpZ25hbF90b19kZWxpdmVyKCZpbmZvLCAma2EsIHJlZ3MsIE5VTEwpOworCWlmIChzaWduciA+IDApIHsKKwkJLyogV2hlZSEgIEFjdHVhbGx5IGRlbGl2ZXIgdGhlIHNpZ25hbC4gICovCisJCWhhbmRsZV9zaWduYWwoc2lnbnIsICZrYSwgJmluZm8sIG9sZHNldCwgcmVncyk7CisJCXJldHVybiAxOworCX0KKworCS8qIERpZCB3ZSBjb21lIGZyb20gYSBzeXN0ZW0gY2FsbD8gKi8KKwlpZiAocmVncy0+b3JpZ19kMCA+PSAwKQorCQkvKiBSZXN0YXJ0IHRoZSBzeXN0ZW0gY2FsbCAtIG5vIGhhbmRsZXJzIHByZXNlbnQgKi8KKwkJaGFuZGxlX3Jlc3RhcnQocmVncywgTlVMTCwgMCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvc3VuMy1oZWFkLlMgYi9hcmNoL202OGsva2VybmVsL3N1bjMtaGVhZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZmQ2OWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsva2VybmVsL3N1bjMtaGVhZC5TCkBAIC0wLDAgKzEsMTA0IEBACisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisjaW5jbHVkZSA8YXNtL2VudHJ5Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vY29udHJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vc3VuMy1oZWFkLmg+CisKK1BTTF9ISUdISVBMICAgICA9IDB4MjcwMAorTkJTRyAgICAgICAgICAgID0gMHgyMDAwMAorSUNBQ0hFX09OTFkJPSAweDAwMDAwMDA5CitDQUNIRVNfT0ZGCT0gMHgwMDAwMDAwOAl8IGFjdHVhbGx5IGEgY2xlYXIgYW5kIGRpc2FibGUgLS1tCisjZGVmaW5lIE1BU19TVEFDSyBJTlRfU1RBQ0sKK1JPT1RfVEFCTEVfU0laRSA9IDEyOAorUEFHRVNJWkUJPSA4MTkyCitTVU4zX0lOVkFMSURfUE1FRyA9IDI1NQorLmdsb2JsIGJvb3R1cF91c2VyX3N0YWNrCisuZ2xvYmwgYm9vdHVwX2tlcm5lbF9zdGFjaworLmdsb2JsIHBnMAorLmdsb2JsIHN3YXBwZXJfcGdfZGlyCisuZ2xvYmwga2VybmVsX3BtZF90YWJsZQorLmdsb2JsIGF2YWlsbWVtCisuZ2xvYmFsIG02OGtfcGd0YWJsZV9jYWNoZW1vZGUKKy5nbG9iYWwga3B0Cit8IHRvZG86IGFsbCB0aGVzZSBzaG91bGQgYmUgaW4gYnNzIQorc3dhcHBlcl9wZ19kaXI6ICAgICAgICAgICAgICAgIC5za2lwIDB4MjAwMAorcGcwOiAgICAgICAgICAgICAgICAgICAgICAgICAgIC5za2lwIDB4MjAwMAora2VybmVsX3BtZF90YWJsZTogICAgICAgICAgICAgIC5za2lwIDB4MjAwMAorCisuZ2xvYmwga2VybmVsX3BnX2RpcgorLmVxdSAgICBrZXJuZWxfcGdfZGlyLGtlcm5lbF9wbWRfdGFibGUKKworCS5zZWN0aW9uIC5oZWFkCitFTlRSWShfc3RleHQpCitFTlRSWShfc3RhcnQpCisKKy8qIEZpcnN0bHksIGRpc2FibGUgaW50ZXJydXB0cyBhbmQgc2V0IHVwIGZ1bmN0aW9uIGNvZGVzLiAqLworCW1vdmV3CSNQU0xfSElHSElQTCwgJXNyCisJbW92ZXEJI0ZDX0NPTlRST0wsICVkMAorCW1vdmVjCSVkMCwgJXNmYworCW1vdmVjCSVkMCwgJWRmYworCisvKiBNYWtlIHN1cmUgd2UncmUgaW4gY29udGV4dCB6ZXJvLiAqLworCW1vdmVxCSMwLCAlZDAKKwltb3ZzYgklZDAsIEFDX0NPTlRFWFQKKworLyogbWFwIGV2ZXJ5dGhpbmcgdGhlIGJvb3Rsb2FkZXIgbGVmdCB1cyBpbnRvIGhpZ2ggbWVtb3J5LCBjbGVhbiB1cCB0aGUKKyAgIGV4Y2VzcyBsYXRlciAqLworCWxlYQkoQUNfU0VHTUFQKzApLCVhMAorCWxlYQkoQUNfU0VHTUFQK0tFUk5CQVNFKSwlYTEKKzE6CisJbW92c2IJJWEwQCwgJWQxCisJbW92c2IJJWQxLCAlYTFACisJY21waWIJI1NVTjNfSU5WQUxJRF9QTUVHLCAlZDEKKwliZXEJMmYKKwlhZGRsCSNOQlNHLCVhMAorCWFkZGwJI05CU0csJWExCisJam1wCTFiCisKKzI6CisKKy8qIERpc2FibGUgY2FjaGVzIGFuZCBqdW1wIHRvIGhpZ2ggY29kZS4gKi8KKwltb3ZlcQkjSUNBQ0hFX09OTFksJWQwCXwgQ2FjaGUgZGlzYWJsZWQgdW50aWwgd2UncmUgcmVhZHkgdG8gZW5hYmxlIGl0CisJbW92YwklZDAsICVjYWNyCXwgICBpcyB0aGlzIHRoZSByaWdodCB2YWx1ZT8gKHllcyAtLW0pCisJam1wCTFmOmwKKworLyogRm9sbG93aW5nIGNvZGUgZXhlY3V0ZXMgYXQgaGlnaCBhZGRyZXNzZXMgKDB4RTAwMHh4eCkuICovCisxOglsZWEJaW5pdF90YXNrLCVjdXJwdHIJCQl8IGdldCBpbml0aWFsIHRocmVhZC4uLgorCWxlYQlpbml0X3RocmVhZF91bmlvbitUSFJFQURfU0laRSwlc3AJfCAuLi5hbmQgaXRzIHN0YWNrLgorCisvKiBjb3B5IGJvb3RpbmZvIHJlY29yZHMgZnJvbSB0aGUgbG9hZGVyIHRvIF9lbmQgKi8KKwlsZWEJX2VuZCwgJWExCisJbGVhCUJJX1NUQVJULCAlYTAKKwkvKiBudW1iZXIgb2YgbG9uZ3MgdG8gY29weSAqLworCW1vdmVsCSVhMEAsICVkMAorMToJYWRkbAkjNCwgJWEwCisJbW92ZWwgICAlYTBALCAlYTFACisJYWRkbAkjNCwgJWExCisJZGJmCSVkMCwgMWIKKworLyogUG9pbnQgTVNQIGF0IGFuIGludmFsaWQgcGFnZSB0byB0cmFwIGlmIGl0J3MgdXNlZC4gLS1tICovCisJbW92bAkjKFBBR0VTSVpFKSwlZDAKKwltb3ZjCSVkMCwlbXNwCisJbW92ZXEJIy0xLCVkMAorCW1vdnNiCSVkMCwoQUNfU0VHTUFQKzB4MCkKKworCWpic3IJc3VuM19pbml0CisKKwlqYnNyCWJhc2VfdHJhcF9pbml0CisKKyAgICAgICAgamJzciAgICBzdGFydF9rZXJuZWwKKwl0cmFwCSMxNQorCisgICAgICAgIC5kYXRhCisgICAgICAgIC5ldmVuCitrcHQ6CisgICAgICAgIC5sb25nIDAKK2F2YWlsbWVtOgorICAgICAgICAubG9uZyAwCit8IHRvZG86IHJlbW92ZSBuZXh0IHR3by4gLS1tCitpc19tZWR1c2E6CisgICAgICAgIC5sb25nIDAKK202OGtfcGd0YWJsZV9jYWNoZW1vZGU6CisgICAgICAgIC5sb25nIDAKKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9zeXNfbTY4ay5jIGIvYXJjaC9tNjhrL2tlcm5lbC9zeXNfbTY4ay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZDdiNzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsva2VybmVsL3N5c19tNjhrLmMKQEAgLTAsMCArMSw2NzEgQEAKKy8qCisgKiBsaW51eC9hcmNoL202OGsva2VybmVsL3N5c19tNjhrLmMKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdmFyaW91cyByYW5kb20gc3lzdGVtIGNhbGxzIHRoYXQKKyAqIGhhdmUgYSBub24tc3RhbmRhcmQgY2FsbGluZyBzZXF1ZW5jZSBvbiB0aGUgTGludXgvbTY4aworICogcGxhdGZvcm0uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2VtLmg+CisjaW5jbHVkZSA8bGludXgvbXNnLmg+CisjaW5jbHVkZSA8bGludXgvc2htLmg+CisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWN0bC5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9pcGMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisvKgorICogc3lzX3BpcGUoKSBpcyB0aGUgbm9ybWFsIEMgY2FsbGluZyBzdGFuZGFyZCBmb3IgY3JlYXRpbmcKKyAqIGEgcGlwZS4gSXQncyBub3QgdGhlIHdheSB1bml4IHRyYWRpdGlvbmFsbHkgZG9lcyB0aGlzLCB0aG91Z2guCisgKi8KK2FzbWxpbmthZ2UgaW50IHN5c19waXBlKHVuc2lnbmVkIGxvbmcgKiBmaWxkZXMpCit7CisJaW50IGZkWzJdOworCWludCBlcnJvcjsKKworCWVycm9yID0gZG9fcGlwZShmZCk7CisJaWYgKCFlcnJvcikgeworCQlpZiAoY29weV90b191c2VyKGZpbGRlcywgZmQsIDIqc2l6ZW9mKGludCkpKQorCQkJZXJyb3IgPSAtRUZBVUxUOworCX0KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qIGNvbW1vbiBjb2RlIGZvciBvbGQgYW5kIG5ldyBtbWFwcyAqLworc3RhdGljIGlubGluZSBsb25nIGRvX21tYXAyKAorCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisJdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCXVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgcGdvZmYpCit7CisJaW50IGVycm9yID0gLUVCQURGOworCXN0cnVjdCBmaWxlICogZmlsZSA9IE5VTEw7CisKKwlmbGFncyAmPSB+KE1BUF9FWEVDVVRBQkxFIHwgTUFQX0RFTllXUklURSk7CisJaWYgKCEoZmxhZ3MgJiBNQVBfQU5PTllNT1VTKSkgeworCQlmaWxlID0gZmdldChmZCk7CisJCWlmICghZmlsZSkKKwkJCWdvdG8gb3V0OworCX0KKworCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJZXJyb3IgPSBkb19tbWFwX3Bnb2ZmKGZpbGUsIGFkZHIsIGxlbiwgcHJvdCwgZmxhZ3MsIHBnb2ZmKTsKKwl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKworCWlmIChmaWxlKQorCQlmcHV0KGZpbGUpOworb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworYXNtbGlua2FnZSBsb25nIHN5c19tbWFwMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAorCXVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKKwl1bnNpZ25lZCBsb25nIGZkLCB1bnNpZ25lZCBsb25nIHBnb2ZmKQoreworCXJldHVybiBkb19tbWFwMihhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBmZCwgcGdvZmYpOworfQorCisvKgorICogUGVyZm9ybSB0aGUgc2VsZWN0KG5kLCBpbiwgb3V0LCBleCwgdHYpIGFuZCBtbWFwKCkgc3lzdGVtCisgKiBjYWxscy4gTGludXgvbTY4ayBjbG9uZWQgTGludXgvaTM4Niwgd2hpY2ggZGlkbid0IHVzZSB0byBiZSBhYmxlIHRvCisgKiBoYW5kbGUgbW9yZSB0aGFuIDQgc3lzdGVtIGNhbGwgcGFyYW1ldGVycywgc28gdGhlc2Ugc3lzdGVtIGNhbGxzCisgKiB1c2VkIGEgbWVtb3J5IGJsb2NrIGZvciBwYXJhbWV0ZXIgcGFzc2luZy4uCisgKi8KKworc3RydWN0IG1tYXBfYXJnX3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgbGVuOworCXVuc2lnbmVkIGxvbmcgcHJvdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmQ7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7Cit9OworCithc21saW5rYWdlIGludCBvbGRfbW1hcChzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0ICphcmcpCit7CisJc3RydWN0IG1tYXBfYXJnX3N0cnVjdCBhOworCWludCBlcnJvciA9IC1FRkFVTFQ7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmEsIGFyZywgc2l6ZW9mKGEpKSkKKwkJZ290byBvdXQ7CisKKwllcnJvciA9IC1FSU5WQUw7CisJaWYgKGEub2Zmc2V0ICYgflBBR0VfTUFTSykKKwkJZ290byBvdXQ7CisKKwlhLmZsYWdzICY9IH4oTUFQX0VYRUNVVEFCTEUgfCBNQVBfREVOWVdSSVRFKTsKKworCWVycm9yID0gZG9fbW1hcDIoYS5hZGRyLCBhLmxlbiwgYS5wcm90LCBhLmZsYWdzLCBhLmZkLCBhLm9mZnNldCA+PiBQQUdFX1NISUZUKTsKK291dDoKKwlyZXR1cm4gZXJyb3I7Cit9CisKKyNpZiAwCitzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0NjQgeworCV9fdTMyIGFkZHI7CisJX191MzIgbGVuOworCV9fdTMyIHByb3Q7CisJX191MzIgZmxhZ3M7CisJX191NjQgb2Zmc2V0OyAvKiA2NCBiaXRzICovCisJX191MzIgZmQ7Cit9OworCithc21saW5rYWdlIGxvbmcgc3lzX21tYXA2NChzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0NjQgKmFyZykKK3sKKwlpbnQgZXJyb3IgPSAtRUZBVUxUOworCXN0cnVjdCBmaWxlICogZmlsZSA9IE5VTEw7CisJc3RydWN0IG1tYXBfYXJnX3N0cnVjdDY0IGE7CisJdW5zaWduZWQgbG9uZyBwZ29mZjsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYSwgYXJnLCBzaXplb2YoYSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICgobG9uZylhLm9mZnNldCAmIH5QQUdFX01BU0spCisJCXJldHVybiAtRUlOVkFMOworCisJcGdvZmYgPSBhLm9mZnNldCA+PiBQQUdFX1NISUZUOworCWlmICgoYS5vZmZzZXQgPj4gUEFHRV9TSElGVCkgIT0gcGdvZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCEoYS5mbGFncyAmIE1BUF9BTk9OWU1PVVMpKSB7CisJCWVycm9yID0gLUVCQURGOworCQlmaWxlID0gZmdldChhLmZkKTsKKwkJaWYgKCFmaWxlKQorCQkJZ290byBvdXQ7CisJfQorCWEuZmxhZ3MgJj0gfihNQVBfRVhFQ1VUQUJMRSB8IE1BUF9ERU5ZV1JJVEUpOworCisJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwllcnJvciA9IGRvX21tYXBfcGdvZmYoZmlsZSwgYS5hZGRyLCBhLmxlbiwgYS5wcm90LCBhLmZsYWdzLCBwZ29mZik7CisJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJaWYgKGZpbGUpCisJCWZwdXQoZmlsZSk7CitvdXQ6CisJcmV0dXJuIGVycm9yOworfQorI2VuZGlmCisKK3N0cnVjdCBzZWxfYXJnX3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBuOworCWZkX3NldCAqaW5wLCAqb3V0cCwgKmV4cDsKKwlzdHJ1Y3QgdGltZXZhbCAqdHZwOworfTsKKworYXNtbGlua2FnZSBpbnQgb2xkX3NlbGVjdChzdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QgKmFyZykKK3sKKwlzdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QgYTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYSwgYXJnLCBzaXplb2YoYSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwkvKiBzeXNfc2VsZWN0KCkgZG9lcyB0aGUgYXBwcm9wcmlhdGUga2VybmVsIGxvY2tpbmcgKi8KKwlyZXR1cm4gc3lzX3NlbGVjdChhLm4sIGEuaW5wLCBhLm91dHAsIGEuZXhwLCBhLnR2cCk7Cit9CisKKy8qCisgKiBzeXNfaXBjKCkgaXMgdGhlIGRlLW11bHRpcGxleGVyIGZvciB0aGUgU3lzViBJUEMgY2FsbHMuLgorICoKKyAqIFRoaXMgaXMgcmVhbGx5IGhvcnJpYmx5IHVnbHkuCisgKi8KK2FzbWxpbmthZ2UgaW50IHN5c19pcGMgKHVpbnQgY2FsbCwgaW50IGZpcnN0LCBpbnQgc2Vjb25kLAorCQkJaW50IHRoaXJkLCB2b2lkICpwdHIsIGxvbmcgZmlmdGgpCit7CisJaW50IHZlcnNpb24sIHJldDsKKworCXZlcnNpb24gPSBjYWxsID4+IDE2OyAvKiBoYWNrIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisJY2FsbCAmPSAweGZmZmY7CisKKwlpZiAoY2FsbCA8PSBTRU1DVEwpCisJCXN3aXRjaCAoY2FsbCkgeworCQljYXNlIFNFTU9QOgorCQkJcmV0dXJuIHN5c19zZW1vcCAoZmlyc3QsIChzdHJ1Y3Qgc2VtYnVmICopcHRyLCBzZWNvbmQpOworCQljYXNlIFNFTUdFVDoKKwkJCXJldHVybiBzeXNfc2VtZ2V0IChmaXJzdCwgc2Vjb25kLCB0aGlyZCk7CisJCWNhc2UgU0VNQ1RMOiB7CisJCQl1bmlvbiBzZW11biBmb3VydGg7CisJCQlpZiAoIXB0cikKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmIChnZXRfdXNlcihmb3VydGguX19wYWQsICh2b2lkICoqKSBwdHIpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIHN5c19zZW1jdGwgKGZpcnN0LCBzZWNvbmQsIHRoaXJkLCBmb3VydGgpOworCQkJfQorCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FTk9TWVM7CisJCX0KKwlpZiAoY2FsbCA8PSBNU0dDVEwpCisJCXN3aXRjaCAoY2FsbCkgeworCQljYXNlIE1TR1NORDoKKwkJCXJldHVybiBzeXNfbXNnc25kIChmaXJzdCwgKHN0cnVjdCBtc2didWYgKikgcHRyLAorCQkJCQkgIHNlY29uZCwgdGhpcmQpOworCQljYXNlIE1TR1JDVjoKKwkJCXN3aXRjaCAodmVyc2lvbikgeworCQkJY2FzZSAwOiB7CisJCQkJc3RydWN0IGlwY19rbHVkZ2UgdG1wOworCQkJCWlmICghcHRyKQorCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQlpZiAoY29weV9mcm9tX3VzZXIgKCZ0bXAsCisJCQkJCQkgICAgKHN0cnVjdCBpcGNfa2x1ZGdlICopcHRyLAorCQkJCQkJICAgIHNpemVvZiAodG1wKSkpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCXJldHVybiBzeXNfbXNncmN2IChmaXJzdCwgdG1wLm1zZ3AsIHNlY29uZCwKKwkJCQkJCSAgIHRtcC5tc2d0eXAsIHRoaXJkKTsKKwkJCQl9CisJCQlkZWZhdWx0OgorCQkJCXJldHVybiBzeXNfbXNncmN2IChmaXJzdCwKKwkJCQkJCSAgIChzdHJ1Y3QgbXNnYnVmICopIHB0ciwKKwkJCQkJCSAgIHNlY29uZCwgZmlmdGgsIHRoaXJkKTsKKwkJCX0KKwkJY2FzZSBNU0dHRVQ6CisJCQlyZXR1cm4gc3lzX21zZ2dldCAoKGtleV90KSBmaXJzdCwgc2Vjb25kKTsKKwkJY2FzZSBNU0dDVEw6CisJCQlyZXR1cm4gc3lzX21zZ2N0bCAoZmlyc3QsIHNlY29uZCwKKwkJCQkJICAgKHN0cnVjdCBtc3FpZF9kcyAqKSBwdHIpOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FTk9TWVM7CisJCX0KKwlpZiAoY2FsbCA8PSBTSE1DVEwpCisJCXN3aXRjaCAoY2FsbCkgeworCQljYXNlIFNITUFUOgorCQkJc3dpdGNoICh2ZXJzaW9uKSB7CisJCQlkZWZhdWx0OiB7CisJCQkJdWxvbmcgcmFkZHI7CisJCQkJcmV0ID0gZG9fc2htYXQgKGZpcnN0LCAoY2hhciAqKSBwdHIsCisJCQkJCQkgc2Vjb25kLCAmcmFkZHIpOworCQkJCWlmIChyZXQpCisJCQkJCXJldHVybiByZXQ7CisJCQkJcmV0dXJuIHB1dF91c2VyIChyYWRkciwgKHVsb25nICopIHRoaXJkKTsKKwkJCX0KKwkJCX0KKwkJY2FzZSBTSE1EVDoKKwkJCXJldHVybiBzeXNfc2htZHQgKChjaGFyICopcHRyKTsKKwkJY2FzZSBTSE1HRVQ6CisJCQlyZXR1cm4gc3lzX3NobWdldCAoZmlyc3QsIHNlY29uZCwgdGhpcmQpOworCQljYXNlIFNITUNUTDoKKwkJCXJldHVybiBzeXNfc2htY3RsIChmaXJzdCwgc2Vjb25kLAorCQkJCQkgICAoc3RydWN0IHNobWlkX2RzICopIHB0cik7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVOT1NZUzsKKwkJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qIENvbnZlcnQgdmlydHVhbCAodXNlcikgYWRkcmVzcyBWQUREUiB0byBwaHlzaWNhbCBhZGRyZXNzIFBBRERSICovCisjZGVmaW5lIHZpcnRfdG9fcGh5c18wNDAodmFkZHIpCQkJCQkJXAorKHsJCQkJCQkJCQlcCisgIHVuc2lnbmVkIGxvbmcgX21tdXNyLCBfcGFkZHI7CQkJCQkJXAorCQkJCQkJCQkJXAorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIi5jaGlwIDY4MDQwXG5cdCIJCQkJXAorCQkJInB0ZXN0ciAoJTEpXG5cdCIJCQkJXAorCQkJIm1vdmVjICUlbW11c3IsJTBcblx0IgkJCQlcCisJCQkiLmNoaXAgNjhrIgkJCQkJXAorCQkJOiAiPXIiIChfbW11c3IpCQkJCQlcCisJCQk6ICJhIiAodmFkZHIpKTsJCQkJCVwKKyAgX3BhZGRyID0gKF9tbXVzciAmIE1NVV9SXzA0MCkgPyAoX21tdXNyICYgUEFHRV9NQVNLKSA6IDA7CQlcCisgIF9wYWRkcjsJCQkJCQkJCVwKK30pCisKK3N0YXRpYyBpbmxpbmUgaW50CitjYWNoZV9mbHVzaF8wNDAgKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IHNjb3BlLCBpbnQgY2FjaGUsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworICB1bnNpZ25lZCBsb25nIHBhZGRyLCBpOworCisgIHN3aXRjaCAoc2NvcGUpCisgICAgeworICAgIGNhc2UgRkxVU0hfU0NPUEVfQUxMOgorICAgICAgc3dpdGNoIChjYWNoZSkKKwl7CisJY2FzZSBGTFVTSF9DQUNIRV9EQVRBOgorCSAgLyogVGhpcyBub3AgaXMgbmVlZGVkIGZvciBzb21lIGJyb2tlbiB2ZXJzaW9ucyBvZiB0aGUgNjgwNDAuICAqLworCSAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJub3Bcblx0IgorCQkJCSIuY2hpcCA2ODA0MFxuXHQiCisJCQkJImNwdXNoYSAlZGNcblx0IgorCQkJCSIuY2hpcCA2OGsiKTsKKwkgIGJyZWFrOworCWNhc2UgRkxVU0hfQ0FDSEVfSU5TTjoKKwkgIF9fYXNtX18gX192b2xhdGlsZV9fICgibm9wXG5cdCIKKwkJCQkiLmNoaXAgNjgwNDBcblx0IgorCQkJCSJjcHVzaGEgJWljXG5cdCIKKwkJCQkiLmNoaXAgNjhrIik7CisJICBicmVhazsKKwlkZWZhdWx0OgorCWNhc2UgRkxVU0hfQ0FDSEVfQk9USDoKKwkgIF9fYXNtX18gX192b2xhdGlsZV9fICgibm9wXG5cdCIKKwkJCQkiLmNoaXAgNjgwNDBcblx0IgorCQkJCSJjcHVzaGEgJWJjXG5cdCIKKwkJCQkiLmNoaXAgNjhrIik7CisJICBicmVhazsKKwl9CisgICAgICBicmVhazsKKworICAgIGNhc2UgRkxVU0hfU0NPUEVfTElORToKKyAgICAgIC8qIEZpbmQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IG1hcHBlZCBwYWdlIGluIHRoZQorCSBhZGRyZXNzIHJhbmdlLiAgKi8KKyAgICAgIGlmICgocGFkZHIgPSB2aXJ0X3RvX3BoeXNfMDQwKGFkZHIpKSkgeworICAgICAgICBwYWRkciArPSBhZGRyICYgfihQQUdFX01BU0sgfCAxNSk7CisgICAgICAgIGxlbiA9IChsZW4gKyAoYWRkciAmIDE1KSArIDE1KSA+PiA0OworICAgICAgfSBlbHNlIHsKKwl1bnNpZ25lZCBsb25nIHRtcCA9IFBBR0VfU0laRSAtIChhZGRyICYgflBBR0VfTUFTSyk7CisKKwlpZiAobGVuIDw9IHRtcCkKKwkgIHJldHVybiAwOworCWFkZHIgKz0gdG1wOworCWxlbiAtPSB0bXA7CisJdG1wID0gUEFHRV9TSVpFOworCWZvciAoOzspCisJICB7CisJICAgIGlmICgocGFkZHIgPSB2aXJ0X3RvX3BoeXNfMDQwKGFkZHIpKSkKKwkgICAgICBicmVhazsKKwkgICAgaWYgKGxlbiA8PSB0bXApCisJICAgICAgcmV0dXJuIDA7CisJICAgIGFkZHIgKz0gdG1wOworCSAgICBsZW4gLT0gdG1wOworCSAgfQorCWxlbiA9IChsZW4gKyAxNSkgPj4gNDsKKyAgICAgIH0KKyAgICAgIGkgPSAoUEFHRV9TSVpFIC0gKHBhZGRyICYgflBBR0VfTUFTSykpID4+IDQ7CisgICAgICB3aGlsZSAobGVuLS0pCisJeworCSAgc3dpdGNoIChjYWNoZSkKKwkgICAgeworCSAgICBjYXNlIEZMVVNIX0NBQ0hFX0RBVEE6CisJICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJub3Bcblx0IgorCQkJCSAgICAiLmNoaXAgNjgwNDBcblx0IgorCQkJCSAgICAiY3B1c2hsICUlZGMsKCUwKVxuXHQiCisJCQkJICAgICIuY2hpcCA2OGsiCisJCQkJICAgIDogOiAiYSIgKHBhZGRyKSk7CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgRkxVU0hfQ0FDSEVfSU5TTjoKKwkgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm5vcFxuXHQiCisJCQkJICAgICIuY2hpcCA2ODA0MFxuXHQiCisJCQkJICAgICJjcHVzaGwgJSVpYywoJTApXG5cdCIKKwkJCQkgICAgIi5jaGlwIDY4ayIKKwkJCQkgICAgOiA6ICJhIiAocGFkZHIpKTsKKwkgICAgICBicmVhazsKKwkgICAgZGVmYXVsdDoKKwkgICAgY2FzZSBGTFVTSF9DQUNIRV9CT1RIOgorCSAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgibm9wXG5cdCIKKwkJCQkgICAgIi5jaGlwIDY4MDQwXG5cdCIKKwkJCQkgICAgImNwdXNobCAlJWJjLCglMClcblx0IgorCQkJCSAgICAiLmNoaXAgNjhrIgorCQkJCSAgICA6IDogImEiIChwYWRkcikpOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICBpZiAoIS0taSAmJiBsZW4pCisJICAgIHsKKwkgICAgICAvKgorCSAgICAgICAqIE5vIG5lZWQgdG8gcGFnZSBhbGlnbiBoZXJlIHNpbmNlIGl0IGlzIGRvbmUgYnkKKwkgICAgICAgKiB2aXJ0X3RvX3BoeXNfMDQwKCkuCisJICAgICAgICovCisJICAgICAgYWRkciArPSBQQUdFX1NJWkU7CisJICAgICAgaSA9IFBBR0VfU0laRSAvIDE2OworCSAgICAgIC8qIFJlY29tcHV0ZSBwaHlzaWNhbCBhZGRyZXNzIHdoZW4gY3Jvc3NpbmcgYSBwYWdlCisJICAgICAgICAgYm91bmRhcnkuICovCisJICAgICAgZm9yICg7OykKKwkJeworCQkgIGlmICgocGFkZHIgPSB2aXJ0X3RvX3BoeXNfMDQwKGFkZHIpKSkKKwkJICAgIGJyZWFrOworCQkgIGlmIChsZW4gPD0gaSkKKwkJICAgIHJldHVybiAwOworCQkgIGxlbiAtPSBpOworCQkgIGFkZHIgKz0gUEFHRV9TSVpFOworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgcGFkZHIgKz0gMTY7CisJfQorICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgIGNhc2UgRkxVU0hfU0NPUEVfUEFHRToKKyAgICAgIGxlbiArPSAoYWRkciAmIH5QQUdFX01BU0spICsgKFBBR0VfU0laRSAtIDEpOworICAgICAgZm9yIChsZW4gPj49IFBBR0VfU0hJRlQ7IGxlbi0tOyBhZGRyICs9IFBBR0VfU0laRSkKKwl7CisJICBpZiAoIShwYWRkciA9IHZpcnRfdG9fcGh5c18wNDAoYWRkcikpKQorCSAgICBjb250aW51ZTsKKwkgIHN3aXRjaCAoY2FjaGUpCisJICAgIHsKKwkgICAgY2FzZSBGTFVTSF9DQUNIRV9EQVRBOgorCSAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgibm9wXG5cdCIKKwkJCQkgICAgIi5jaGlwIDY4MDQwXG5cdCIKKwkJCQkgICAgImNwdXNocCAlJWRjLCglMClcblx0IgorCQkJCSAgICAiLmNoaXAgNjhrIgorCQkJCSAgICA6IDogImEiIChwYWRkcikpOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIEZMVVNIX0NBQ0hFX0lOU046CisJICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJub3Bcblx0IgorCQkJCSAgICAiLmNoaXAgNjgwNDBcblx0IgorCQkJCSAgICAiY3B1c2hwICUlaWMsKCUwKVxuXHQiCisJCQkJICAgICIuY2hpcCA2OGsiCisJCQkJICAgIDogOiAiYSIgKHBhZGRyKSk7CisJICAgICAgYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJICAgIGNhc2UgRkxVU0hfQ0FDSEVfQk9USDoKKwkgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm5vcFxuXHQiCisJCQkJICAgICIuY2hpcCA2ODA0MFxuXHQiCisJCQkJICAgICJjcHVzaHAgJSViYywoJTApXG5cdCIKKwkJCQkgICAgIi5jaGlwIDY4ayIKKwkJCQkgICAgOiA6ICJhIiAocGFkZHIpKTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgdmlydF90b19waHlzXzA2MCh2YWRkcikJCQkJXAorKHsJCQkJCQkJXAorICB1bnNpZ25lZCBsb25nIHBhZGRyOwkJCQkJXAorICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIi5jaGlwIDY4MDYwXG5cdCIJCVwKKwkJCSJwbHBhciAoJTApXG5cdCIJCVwKKwkJCSIuY2hpcCA2OGsiCQkJXAorCQkJOiAiPWEiIChwYWRkcikJCQlcCisJCQk6ICIwIiAodmFkZHIpKTsJCQlcCisgIChwYWRkcik7IC8qIFhYWCAqLwkJCQkJXAorfSkKKworc3RhdGljIGlubGluZSBpbnQKK2NhY2hlX2ZsdXNoXzA2MCAodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgc2NvcGUsIGludCBjYWNoZSwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisgIHVuc2lnbmVkIGxvbmcgcGFkZHIsIGk7CisKKyAgLyoKKyAgICogNjgwNjAgbWFudWFsIHNheXM6CisgICAqICBjcHVzaCAlZGMgOiBmbHVzaCBEQywgcmVtYWlucyB2YWxpZCAod2l0aCBvdXIgJWNhY3Igc2V0dXApCisgICAqICBjcHVzaCAlaWMgOiBpbnZhbGlkYXRlIElDCisgICAqICBjcHVzaCAlYmMgOiBmbHVzaCBEQyArIGludmFsaWRhdGUgSUMKKyAgICovCisgIHN3aXRjaCAoc2NvcGUpCisgICAgeworICAgIGNhc2UgRkxVU0hfU0NPUEVfQUxMOgorICAgICAgc3dpdGNoIChjYWNoZSkKKwl7CisJY2FzZSBGTFVTSF9DQUNIRV9EQVRBOgorCSAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIuY2hpcCA2ODA2MFxuXHQiCisJCQkJImNwdXNoYSAlZGNcblx0IgorCQkJCSIuY2hpcCA2OGsiKTsKKwkgIGJyZWFrOworCWNhc2UgRkxVU0hfQ0FDSEVfSU5TTjoKKwkgIF9fYXNtX18gX192b2xhdGlsZV9fICgiLmNoaXAgNjgwNjBcblx0IgorCQkJCSJjcHVzaGEgJWljXG5cdCIKKwkJCQkiLmNoaXAgNjhrIik7CisJICBicmVhazsKKwlkZWZhdWx0OgorCWNhc2UgRkxVU0hfQ0FDSEVfQk9USDoKKwkgIF9fYXNtX18gX192b2xhdGlsZV9fICgiLmNoaXAgNjgwNjBcblx0IgorCQkJCSJjcHVzaGEgJWJjXG5cdCIKKwkJCQkiLmNoaXAgNjhrIik7CisJICBicmVhazsKKwl9CisgICAgICBicmVhazsKKworICAgIGNhc2UgRkxVU0hfU0NPUEVfTElORToKKyAgICAgIC8qIEZpbmQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IG1hcHBlZCBwYWdlIGluIHRoZQorCSBhZGRyZXNzIHJhbmdlLiAgKi8KKyAgICAgIGxlbiArPSBhZGRyICYgMTU7CisgICAgICBhZGRyICY9IC0xNjsKKyAgICAgIGlmICghKHBhZGRyID0gdmlydF90b19waHlzXzA2MChhZGRyKSkpIHsKKwl1bnNpZ25lZCBsb25nIHRtcCA9IFBBR0VfU0laRSAtIChhZGRyICYgflBBR0VfTUFTSyk7CisKKwlpZiAobGVuIDw9IHRtcCkKKwkgIHJldHVybiAwOworCWFkZHIgKz0gdG1wOworCWxlbiAtPSB0bXA7CisJdG1wID0gUEFHRV9TSVpFOworCWZvciAoOzspCisJICB7CisJICAgIGlmICgocGFkZHIgPSB2aXJ0X3RvX3BoeXNfMDYwKGFkZHIpKSkKKwkgICAgICBicmVhazsKKwkgICAgaWYgKGxlbiA8PSB0bXApCisJICAgICAgcmV0dXJuIDA7CisJICAgIGFkZHIgKz0gdG1wOworCSAgICBsZW4gLT0gdG1wOworCSAgfQorICAgICAgfQorICAgICAgbGVuID0gKGxlbiArIDE1KSA+PiA0OworICAgICAgaSA9IChQQUdFX1NJWkUgLSAocGFkZHIgJiB+UEFHRV9NQVNLKSkgPj4gNDsKKyAgICAgIHdoaWxlIChsZW4tLSkKKwl7CisJICBzd2l0Y2ggKGNhY2hlKQorCSAgICB7CisJICAgIGNhc2UgRkxVU0hfQ0FDSEVfREFUQToKKwkgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIi5jaGlwIDY4MDYwXG5cdCIKKwkJCQkgICAgImNwdXNobCAlJWRjLCglMClcblx0IgorCQkJCSAgICAiLmNoaXAgNjhrIgorCQkJCSAgICA6IDogImEiIChwYWRkcikpOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIEZMVVNIX0NBQ0hFX0lOU046CisJICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIuY2hpcCA2ODA2MFxuXHQiCisJCQkJICAgICJjcHVzaGwgJSVpYywoJTApXG5cdCIKKwkJCQkgICAgIi5jaGlwIDY4ayIKKwkJCQkgICAgOiA6ICJhIiAocGFkZHIpKTsKKwkgICAgICBicmVhazsKKwkgICAgZGVmYXVsdDoKKwkgICAgY2FzZSBGTFVTSF9DQUNIRV9CT1RIOgorCSAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiLmNoaXAgNjgwNjBcblx0IgorCQkJCSAgICAiY3B1c2hsICUlYmMsKCUwKVxuXHQiCisJCQkJICAgICIuY2hpcCA2OGsiCisJCQkJICAgIDogOiAiYSIgKHBhZGRyKSk7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIGlmICghLS1pICYmIGxlbikKKwkgICAgeworCisJICAgICAgLyoKKwkgICAgICAgKiBXZSBqdXN0IHdhbnQgdG8ganVtcCB0byB0aGUgZmlyc3QgY2FjaGUgbGluZQorCSAgICAgICAqIGluIHRoZSBuZXh0IHBhZ2UuCisJICAgICAgICovCisJICAgICAgYWRkciArPSBQQUdFX1NJWkU7CisJICAgICAgYWRkciAmPSBQQUdFX01BU0s7CisKKwkgICAgICBpID0gUEFHRV9TSVpFIC8gMTY7CisJICAgICAgLyogUmVjb21wdXRlIHBoeXNpY2FsIGFkZHJlc3Mgd2hlbiBjcm9zc2luZyBhIHBhZ2UKKwkgICAgICAgICBib3VuZGFyeS4gKi8KKwkgICAgICBmb3IgKDs7KQorCSAgICAgICAgeworCSAgICAgICAgICBpZiAoKHBhZGRyID0gdmlydF90b19waHlzXzA2MChhZGRyKSkpCisJICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgIGlmIChsZW4gPD0gaSkKKwkgICAgICAgICAgICByZXR1cm4gMDsKKwkgICAgICAgICAgbGVuIC09IGk7CisJICAgICAgICAgIGFkZHIgKz0gUEFHRV9TSVpFOworCSAgICAgICAgfQorCSAgICB9CisJICBlbHNlCisJICAgIHBhZGRyICs9IDE2OworCX0KKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICBjYXNlIEZMVVNIX1NDT1BFX1BBR0U6CisgICAgICBsZW4gKz0gKGFkZHIgJiB+UEFHRV9NQVNLKSArIChQQUdFX1NJWkUgLSAxKTsKKyAgICAgIGFkZHIgJj0gUEFHRV9NQVNLOwkvKiBXb3JrYXJvdW5kIGZvciBidWcgaW4gc29tZQorCQkJCSAgIHJldmlzaW9ucyBvZiB0aGUgNjgwNjAgKi8KKyAgICAgIGZvciAobGVuID4+PSBQQUdFX1NISUZUOyBsZW4tLTsgYWRkciArPSBQQUdFX1NJWkUpCisJeworCSAgaWYgKCEocGFkZHIgPSB2aXJ0X3RvX3BoeXNfMDYwKGFkZHIpKSkKKwkgICAgY29udGludWU7CisJICBzd2l0Y2ggKGNhY2hlKQorCSAgICB7CisJICAgIGNhc2UgRkxVU0hfQ0FDSEVfREFUQToKKwkgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIi5jaGlwIDY4MDYwXG5cdCIKKwkJCQkgICAgImNwdXNocCAlJWRjLCglMClcblx0IgorCQkJCSAgICAiLmNoaXAgNjhrIgorCQkJCSAgICA6IDogImEiIChwYWRkcikpOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIEZMVVNIX0NBQ0hFX0lOU046CisJICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIuY2hpcCA2ODA2MFxuXHQiCisJCQkJICAgICJjcHVzaHAgJSVpYywoJTApXG5cdCIKKwkJCQkgICAgIi5jaGlwIDY4ayIKKwkJCQkgICAgOiA6ICJhIiAocGFkZHIpKTsKKwkgICAgICBicmVhazsKKwkgICAgZGVmYXVsdDoKKwkgICAgY2FzZSBGTFVTSF9DQUNIRV9CT1RIOgorCSAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiLmNoaXAgNjgwNjBcblx0IgorCQkJCSAgICAiY3B1c2hwICUlYmMsKCUwKVxuXHQiCisJCQkJICAgICIuY2hpcCA2OGsiCisJCQkJICAgIDogOiAiYSIgKHBhZGRyKSk7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwl9CisgICAgICBicmVhazsKKyAgICB9CisgIHJldHVybiAwOworfQorCisvKiBzeXNfY2FjaGVmbHVzaCAtLSBmbHVzaCAocGFydCBvZikgdGhlIHByb2Nlc3NvciBjYWNoZS4gICovCithc21saW5rYWdlIGludAorc3lzX2NhY2hlZmx1c2ggKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IHNjb3BlLCBpbnQgY2FjaGUsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCWludCByZXQgPSAtRUlOVkFMOworCisJbG9ja19rZXJuZWwoKTsKKwlpZiAoc2NvcGUgPCBGTFVTSF9TQ09QRV9MSU5FIHx8IHNjb3BlID4gRkxVU0hfU0NPUEVfQUxMIHx8CisJICAgIGNhY2hlICYgfkZMVVNIX0NBQ0hFX0JPVEgpCisJCWdvdG8gb3V0OworCisJaWYgKHNjb3BlID09IEZMVVNIX1NDT1BFX0FMTCkgeworCQkvKiBPbmx5IHRoZSBzdXBlcnVzZXIgbWF5IGV4cGxpY2l0bHkgZmx1c2ggdGhlIHdob2xlIGNhY2hlLiAqLworCQlyZXQgPSAtRVBFUk07CisJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCS8qCisJCSAqIFZlcmlmeSB0aGF0IHRoZSBzcGVjaWZpZWQgYWRkcmVzcyByZWdpb24gYWN0dWFsbHkgYmVsb25ncworCQkgKiB0byB0aGlzIHByb2Nlc3MuCisJCSAqLworCQl2bWEgPSBmaW5kX3ZtYSAoY3VycmVudC0+bW0sIGFkZHIpOworCQlyZXQgPSAtRUlOVkFMOworCQkvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICAqLworCQlpZiAoYWRkciArIGxlbiA8IGFkZHIpCisJCQlnb3RvIG91dDsKKwkJaWYgKHZtYSA9PSBOVUxMIHx8IGFkZHIgPCB2bWEtPnZtX3N0YXJ0IHx8IGFkZHIgKyBsZW4gPiB2bWEtPnZtX2VuZCkKKwkJCWdvdG8gb3V0OworCX0KKworCWlmIChDUFVfSVNfMDIwX09SXzAzMCkgeworCQlpZiAoc2NvcGUgPT0gRkxVU0hfU0NPUEVfTElORSAmJiBsZW4gPCAyNTYpIHsKKwkJCXVuc2lnbmVkIGxvbmcgY2FjcjsKKwkJCV9fYXNtX18gKCJtb3ZlYyAlJWNhY3IsICUwIiA6ICI9ciIgKGNhY3IpKTsKKwkJCWlmIChjYWNoZSAmIEZMVVNIX0NBQ0hFX0lOU04pCisJCQkJY2FjciB8PSA0OworCQkJaWYgKGNhY2hlICYgRkxVU0hfQ0FDSEVfREFUQSkKKwkJCQljYWNyIHw9IDB4NDAwOworCQkJbGVuID4+PSAyOworCQkJd2hpbGUgKGxlbi0tKSB7CisJCQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZlYyAlMSwgJSVjYWFyXG5cdCIKKwkJCQkJCSAgICAgICJtb3ZlYyAlMCwgJSVjYWNyIgorCQkJCQkJICAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkJCQkgICAgICA6ICJyIiAoY2FjciksICJyIiAoYWRkcikpOworCQkJCWFkZHIgKz0gNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIEZsdXNoIHRoZSB3aG9sZSBjYWNoZSwgZXZlbiBpZiBwYWdlIGdyYW51bGFyaXR5IHJlcXVlc3RlZC4gKi8KKwkJCXVuc2lnbmVkIGxvbmcgY2FjcjsKKwkJCV9fYXNtX18gKCJtb3ZlYyAlJWNhY3IsICUwIiA6ICI9ciIgKGNhY3IpKTsKKwkJCWlmIChjYWNoZSAmIEZMVVNIX0NBQ0hFX0lOU04pCisJCQkJY2FjciB8PSA4OworCQkJaWYgKGNhY2hlICYgRkxVU0hfQ0FDSEVfREFUQSkKKwkJCQljYWNyIHw9IDB4ODAwOworCQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZlYyAlMCwgJSVjYWNyIiA6IDogInIiIChjYWNyKSk7CisJCX0KKwkJcmV0ID0gMDsKKwkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkgICAgLyoKKwkgICAgICogMDQwIG9yIDA2MDogZG9uJ3QgYmxpbmRseSB0cnVzdCAnc2NvcGUnLCBzb21lb25lIGNvdWxkCisJICAgICAqIHRyeSB0byBmbHVzaCBhIGZldyBtZWdzIG9mIG1lbW9yeS4KKwkgICAgICovCisKKwkgICAgaWYgKGxlbj49MypQQUdFX1NJWkUgJiYgc2NvcGU8RkxVU0hfU0NPUEVfUEFHRSkKKwkgICAgICAgIHNjb3BlPUZMVVNIX1NDT1BFX1BBR0U7CisJICAgIGlmIChsZW4+PTEwKlBBR0VfU0laRSAmJiBzY29wZTxGTFVTSF9TQ09QRV9BTEwpCisJICAgICAgICBzY29wZT1GTFVTSF9TQ09QRV9BTEw7CisJICAgIGlmIChDUFVfSVNfMDQwKSB7CisJCXJldCA9IGNhY2hlX2ZsdXNoXzA0MCAoYWRkciwgc2NvcGUsIGNhY2hlLCBsZW4pOworCSAgICB9IGVsc2UgaWYgKENQVV9JU18wNjApIHsKKwkJcmV0ID0gY2FjaGVfZmx1c2hfMDYwIChhZGRyLCBzY29wZSwgY2FjaGUsIGxlbik7CisJICAgIH0KKwl9CitvdXQ6CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7Cit9CisKK2FzbWxpbmthZ2UgaW50IHN5c19nZXRwYWdlc2l6ZSh2b2lkKQoreworCXJldHVybiBQQUdFX1NJWkU7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3RpbWUuYyBiL2FyY2gvbTY4ay9rZXJuZWwvdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0N2UxOTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsva2VybmVsL3RpbWUuYwpAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqICBsaW51eC9hcmNoL202OGsva2VybmVsL3RpbWUuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTUgIExpbnVzIFRvcnZhbGRzCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBtNjhrLXNwZWNpZmljIHRpbWUgaGFuZGxpbmcgZGV0YWlscy4KKyAqIE1vc3Qgb2YgdGhlIHN0dWZmIGlzIGxvY2F0ZWQgaW4gdGhlIG1hY2hpbmUgc3BlY2lmaWMgZmlsZXMuCisgKgorICogMTk5Ny0wOS0xMAlVcGRhdGVkIE5UUCBjb2RlIGFjY29yZGluZyB0byB0ZWNobmljYWwgbWVtb3JhbmR1bSBKYW4gJzk2CisgKgkJIkEgS2VybmVsIE1vZGVsIGZvciBQcmVjaXNpb24gVGltZWtlZXBpbmciIGJ5IERhdmUgTWlsbHMKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+IC8qIENPTkZJR19IRUFSVEJFQVQgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KKwordTY0IGppZmZpZXNfNjQgPSBJTklUSUFMX0pJRkZJRVM7CisKK0VYUE9SVF9TWU1CT0woamlmZmllc182NCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IHNldF9ydGNfbW1zcyh1bnNpZ25lZCBsb25nIG5vd3RpbWUpCit7CisgIGlmIChtYWNoX3NldF9jbG9ja19tbXNzKQorICAgIHJldHVybiBtYWNoX3NldF9jbG9ja19tbXNzIChub3d0aW1lKTsKKyAgcmV0dXJuIC0xOworfQorCisvKgorICogdGltZXJfaW50ZXJydXB0KCkgbmVlZHMgdG8ga2VlcCB1cCB0aGUgcmVhbC10aW1lIGNsb2NrLAorICogYXMgd2VsbCBhcyBjYWxsIHRoZSAiZG9fdGltZXIoKSIgcm91dGluZSBldmVyeSBjbG9ja3RpY2sKKyAqLworc3RhdGljIGlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkdW1teSwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQoreworCWRvX3RpbWVyKHJlZ3MpOworI2lmbmRlZiBDT05GSUdfU01QCisJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKHJlZ3MpKTsKKyNlbmRpZgorCXByb2ZpbGVfdGljayhDUFVfUFJPRklMSU5HLCByZWdzKTsKKworI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKKwkvKiB1c2UgcG93ZXIgTEVEIGFzIGEgaGVhcnRiZWF0IGluc3RlYWQgLS0gbXVjaCBtb3JlIHVzZWZ1bAorCSAgIGZvciBkZWJ1Z2dpbmcgLS0gYmFzZWQgb24gdGhlIHZlcnNpb24gZm9yIFBSZVAgYnkgQ29ydCAqLworCS8qIGFjdHMgbGlrZSBhbiBhY3R1YWwgaGVhcnQgYmVhdCAtLSBpZSB0aHVtcC10aHVtcC1wYXVzZS4uLiAqLworCWlmIChtYWNoX2hlYXJ0YmVhdCkgeworCSAgICBzdGF0aWMgdW5zaWduZWQgY250ID0gMCwgcGVyaW9kID0gMCwgZGlzdCA9IDA7CisKKwkgICAgaWYgKGNudCA9PSAwIHx8IGNudCA9PSBkaXN0KQorCQltYWNoX2hlYXJ0YmVhdCggMSApOworCSAgICBlbHNlIGlmIChjbnQgPT0gNyB8fCBjbnQgPT0gZGlzdCs3KQorCQltYWNoX2hlYXJ0YmVhdCggMCApOworCisJICAgIGlmICgrK2NudCA+IHBlcmlvZCkgeworCQljbnQgPSAwOworCQkvKiBUaGUgaHlwZXJib2xpYyBmdW5jdGlvbiBiZWxvdyBtb2RpZmllcyB0aGUgaGVhcnRiZWF0IHBlcmlvZAorCQkgKiBsZW5ndGggaW4gZGVwZW5kZW5jeSBvZiB0aGUgY3VycmVudCAoNW1pbikgbG9hZC4gSXQgZ29lcworCQkgKiB0aHJvdWdoIHRoZSBwb2ludHMgZigwKT0xMjYsIGYoMSk9ODYsIGYoNSk9NTEsCisJCSAqIGYoaW5mKS0+MzAuICovCisJCXBlcmlvZCA9ICgoNjcyPDxGU0hJRlQpLyg1KmF2ZW5ydW5bMF0rKDc8PEZTSElGVCkpKSArIDMwOworCQlkaXN0ID0gcGVyaW9kIC8gNDsKKwkgICAgfQorCX0KKyNlbmRpZiAvKiBDT05GSUdfSEVBUlRCRUFUICovCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCit2b2lkIHRpbWVfaW5pdCh2b2lkKQoreworCXN0cnVjdCBydGNfdGltZSB0aW1lOworCisJaWYgKG1hY2hfaHdjbGspIHsKKwkJbWFjaF9od2NsaygwLCAmdGltZSk7CisKKwkJaWYgKCh0aW1lLnRtX3llYXIgKz0gMTkwMCkgPCAxOTcwKQorCQkJdGltZS50bV95ZWFyICs9IDEwMDsKKwkJeHRpbWUudHZfc2VjID0gbWt0aW1lKHRpbWUudG1feWVhciwgdGltZS50bV9tb24sIHRpbWUudG1fbWRheSwKKwkJCQkgICAgICB0aW1lLnRtX2hvdXIsIHRpbWUudG1fbWluLCB0aW1lLnRtX3NlYyk7CisJCXh0aW1lLnR2X25zZWMgPSAwOworCX0KKwl3YWxsX3RvX21vbm90b25pYy50dl9zZWMgPSAteHRpbWUudHZfc2VjOworCisJbWFjaF9zY2hlZF9pbml0KHRpbWVyX2ludGVycnVwdCk7Cit9CisKKy8qCisgKiBUaGlzIHZlcnNpb24gb2YgZ2V0dGltZW9mZGF5IGhhcyBuZWFyIG1pY3Jvc2Vjb25kIHJlc29sdXRpb24uCisgKi8KK3ZvaWQgZG9fZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0dikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWV4dGVybiB1bnNpZ25lZCBsb25nIHdhbGxfamlmZmllczsKKwl1bnNpZ25lZCBsb25nIHNlcTsKKwl1bnNpZ25lZCBsb25nIHVzZWMsIHNlYywgbG9zdDsKKwl1bnNpZ25lZCBsb25nIG1heF9udHBfdGljayA9IHRpY2tfdXNlYyAtIHRpY2thZGo7CisKKwlkbyB7CisJCXNlcSA9IHJlYWRfc2VxYmVnaW5faXJxc2F2ZSgmeHRpbWVfbG9jaywgZmxhZ3MpOworCisJCXVzZWMgPSBtYWNoX2dldHRpbWVvZmZzZXQoKTsKKwkJbG9zdCA9IGppZmZpZXMgLSB3YWxsX2ppZmZpZXM7CisKKwkJLyoKKwkJICogSWYgdGltZV9hZGp1c3QgaXMgbmVnYXRpdmUgdGhlbiBOVFAgaXMgc2xvd2luZyB0aGUgY2xvY2sKKwkJICogc28gbWFrZSBzdXJlIG5vdCB0byBnbyBpbnRvIG5leHQgcG9zc2libGUgaW50ZXJ2YWwuCisJCSAqIEJldHRlciB0byBsb3NlIHNvbWUgYWNjdXJhY3kgdGhhbiBoYXZlIHRpbWUgZ28gYmFja3dhcmRzLi4KKwkJICovCisJCWlmICh1bmxpa2VseSh0aW1lX2FkanVzdCA8IDApKSB7CisJCQl1c2VjID0gbWluKHVzZWMsIG1heF9udHBfdGljayk7CisKKwkJCWlmIChsb3N0KQorCQkJCXVzZWMgKz0gbG9zdCAqIG1heF9udHBfdGljazsKKwkJfQorCQllbHNlIGlmICh1bmxpa2VseShsb3N0KSkKKwkJCXVzZWMgKz0gbG9zdCAqIHRpY2tfdXNlYzsKKworCQlzZWMgPSB4dGltZS50dl9zZWM7CisJCXVzZWMgKz0geHRpbWUudHZfbnNlYy8xMDAwOworCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnlfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgc2VxLCBmbGFncykpOworCisKKwl3aGlsZSAodXNlYyA+PSAxMDAwMDAwKSB7CisJCXVzZWMgLT0gMTAwMDAwMDsKKwkJc2VjKys7CisJfQorCisJdHYtPnR2X3NlYyA9IHNlYzsKKwl0di0+dHZfdXNlYyA9IHVzZWM7Cit9CisKK0VYUE9SVF9TWU1CT0woZG9fZ2V0dGltZW9mZGF5KTsKKworaW50IGRvX3NldHRpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnR2KQoreworCXRpbWVfdCB3dG1fc2VjLCBzZWMgPSB0di0+dHZfc2VjOworCWxvbmcgd3RtX25zZWMsIG5zZWMgPSB0di0+dHZfbnNlYzsKKwlleHRlcm4gdW5zaWduZWQgbG9uZyB3YWxsX2ppZmZpZXM7CisKKwlpZiAoKHVuc2lnbmVkIGxvbmcpdHYtPnR2X25zZWMgPj0gTlNFQ19QRVJfU0VDKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdyaXRlX3NlcWxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKKwkvKiBUaGlzIGlzIHJldm9sdGluZy4gV2UgbmVlZCB0byBzZXQgdGhlIHh0aW1lLnR2X25zZWMKKwkgKiBjb3JyZWN0bHkuIEhvd2V2ZXIsIHRoZSB2YWx1ZSBpbiB0aGlzIGxvY2F0aW9uIGlzCisJICogaXMgdmFsdWUgYXQgdGhlIGxhc3QgdGljay4KKwkgKiBEaXNjb3ZlciB3aGF0IGNvcnJlY3Rpb24gZ2V0dGltZW9mZGF5CisJICogd291bGQgaGF2ZSBkb25lLCBhbmQgdGhlbiB1bmRvIGl0IQorCSAqLworCW5zZWMgLT0gMTAwMCAqIChtYWNoX2dldHRpbWVvZmZzZXQoKSArCisJCQkoamlmZmllcyAtIHdhbGxfamlmZmllcykgKiAoMTAwMDAwMCAvIEhaKSk7CisKKwl3dG1fc2VjICA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyArICh4dGltZS50dl9zZWMgLSBzZWMpOworCXd0bV9uc2VjID0gd2FsbF90b19tb25vdG9uaWMudHZfbnNlYyArICh4dGltZS50dl9uc2VjIC0gbnNlYyk7CisKKwlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmeHRpbWUsIHNlYywgbnNlYyk7CisJc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLCB3dG1fc2VjLCB3dG1fbnNlYyk7CisKKwl0aW1lX2FkanVzdCA9IDA7CQkvKiBzdG9wIGFjdGl2ZSBhZGp0aW1lKCkgKi8KKwl0aW1lX3N0YXR1cyB8PSBTVEFfVU5TWU5DOworCXRpbWVfbWF4ZXJyb3IgPSBOVFBfUEhBU0VfTElNSVQ7CisJdGltZV9lc3RlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKKwl3cml0ZV9zZXF1bmxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKKwljbG9ja193YXNfc2V0KCk7CisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0woZG9fc2V0dGltZW9mZGF5KTsKKworLyoKKyAqIFNjaGVkdWxlciBjbG9jayAtIHJldHVybnMgY3VycmVudCB0aW1lIGluIG5zIHVuaXRzLgorICovCit1bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfY2xvY2sodm9pZCkKK3sKKyAgICAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZylqaWZmaWVzKigxMDAwMDAwMDAwL0haKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9tNjhrL2tlcm5lbC90cmFwcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYjM2ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsva2VybmVsL3RyYXBzLmMKQEAgLTAsMCArMSwxMjI3IEBACisvKgorICogIGxpbnV4L2FyY2gvbTY4ay9rZXJuZWwvdHJhcHMuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTMsIDE5OTQgYnkgSGFtaXNoIE1hY2RvbmFsZAorICoKKyAqICA2ODA0MCBmaXhlcyBieSBNaWNoYWVsIFJhdXNjaAorICogIDY4MDQwIGZpeGVzIGJ5IE1hcnRpbiBBcGVsCisgKiAgNjgwNDAgZml4ZXMgYW5kIHdyaXRlYmFjayBieSBSaWNoYXJkIFppZGxpY2t5CisgKiAgNjgwNjAgZml4ZXMgYnkgUm9tYW4gSG9kZWsKKyAqICA2ODA2MCBmaXhlcyBieSBKZXNwZXIgU2tvdgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKgorICogU2V0cyB1cCBhbGwgZXhjZXB0aW9uIHZlY3RvcnMKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Eub3V0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNlci5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9mcHUuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3NpZ2luZm8uaD4KKworLyogYXNzZW1ibGVyIHJvdXRpbmVzICovCithc21saW5rYWdlIHZvaWQgc3lzdGVtX2NhbGwodm9pZCk7Cithc21saW5rYWdlIHZvaWQgYnVzZXJyKHZvaWQpOworYXNtbGlua2FnZSB2b2lkIHRyYXAodm9pZCk7Cithc21saW5rYWdlIHZvaWQgaW50aGFuZGxlcih2b2lkKTsKK2FzbWxpbmthZ2Ugdm9pZCBubWloYW5kbGVyKHZvaWQpOworI2lmZGVmIENPTkZJR19NNjhLRlBVX0VNVQorYXNtbGlua2FnZSB2b2lkIGZwdV9lbXUodm9pZCk7CisjZW5kaWYKKworZV92ZWN0b3IgdmVjdG9yc1syNTZdID0geworCVtWRUNfQlVTRVJSXQk9IGJ1c2VyciwKKwlbVkVDX0FERFJFUlJdCT0gdHJhcCwKKwlbVkVDX0lMTEVHQUxdCT0gdHJhcCwKKwlbVkVDX1pFUk9ESVZdCT0gdHJhcCwKKwlbVkVDX0NIS10JPSB0cmFwLAorCVtWRUNfVFJBUF0JPSB0cmFwLAorCVtWRUNfUFJJVl0JPSB0cmFwLAorCVtWRUNfVFJBQ0VdCT0gdHJhcCwKKwlbVkVDX0xJTkUxMF0JPSB0cmFwLAorCVtWRUNfTElORTExXQk9IHRyYXAsCisJW1ZFQ19SRVNWMTJdCT0gdHJhcCwKKwlbVkVDX0NPUFJPQ10JPSB0cmFwLAorCVtWRUNfRk9STUFUXQk9IHRyYXAsCisJW1ZFQ19VTklOVF0JPSB0cmFwLAorCVtWRUNfUkVTVjE2XQk9IHRyYXAsCisJW1ZFQ19SRVNWMTddCT0gdHJhcCwKKwlbVkVDX1JFU1YxOF0JPSB0cmFwLAorCVtWRUNfUkVTVjE5XQk9IHRyYXAsCisJW1ZFQ19SRVNWMjBdCT0gdHJhcCwKKwlbVkVDX1JFU1YyMV0JPSB0cmFwLAorCVtWRUNfUkVTVjIyXQk9IHRyYXAsCisJW1ZFQ19SRVNWMjNdCT0gdHJhcCwKKwlbVkVDX1NQVVJdCT0gaW50aGFuZGxlciwKKwlbVkVDX0lOVDFdCT0gaW50aGFuZGxlciwKKwlbVkVDX0lOVDJdCT0gaW50aGFuZGxlciwKKwlbVkVDX0lOVDNdCT0gaW50aGFuZGxlciwKKwlbVkVDX0lOVDRdCT0gaW50aGFuZGxlciwKKwlbVkVDX0lOVDVdCT0gaW50aGFuZGxlciwKKwlbVkVDX0lOVDZdCT0gaW50aGFuZGxlciwKKwlbVkVDX0lOVDddCT0gaW50aGFuZGxlciwKKwlbVkVDX1NZU10JPSBzeXN0ZW1fY2FsbCwKKwlbVkVDX1RSQVAxXQk9IHRyYXAsCisJW1ZFQ19UUkFQMl0JPSB0cmFwLAorCVtWRUNfVFJBUDNdCT0gdHJhcCwKKwlbVkVDX1RSQVA0XQk9IHRyYXAsCisJW1ZFQ19UUkFQNV0JPSB0cmFwLAorCVtWRUNfVFJBUDZdCT0gdHJhcCwKKwlbVkVDX1RSQVA3XQk9IHRyYXAsCisJW1ZFQ19UUkFQOF0JPSB0cmFwLAorCVtWRUNfVFJBUDldCT0gdHJhcCwKKwlbVkVDX1RSQVAxMF0JPSB0cmFwLAorCVtWRUNfVFJBUDExXQk9IHRyYXAsCisJW1ZFQ19UUkFQMTJdCT0gdHJhcCwKKwlbVkVDX1RSQVAxM10JPSB0cmFwLAorCVtWRUNfVFJBUDE0XQk9IHRyYXAsCisJW1ZFQ19UUkFQMTVdCT0gdHJhcCwKK307CisKKy8qIG5taSBoYW5kbGVyIGZvciB0aGUgQW1pZ2EgKi8KK2FzbSgiLnRleHRcbiIKKyAgICBfX0FMSUdOX1NUUiAiXG4iCisgICAgIm5taWhhbmRsZXI6IHJ0ZSIpOworCisvKgorICogdGhpcyBtdXN0IGJlIGNhbGxlZCB2ZXJ5IGVhcmx5IGFzIHRoZSBrZXJuZWwgbWlnaHQKKyAqIHVzZSBzb21lIGluc3RydWN0aW9uIHRoYXQgYXJlIGVtdWxhdGVkIG9uIHRoZSAwNjAKKyAqLwordm9pZCBfX2luaXQgYmFzZV90cmFwX2luaXQodm9pZCkKK3sKKwlpZihNQUNIX0lTX1NVTjNYKSB7CisJCWV4dGVybiBlX3ZlY3RvciAqc3VuM3hfcHJvbV92YnI7CisKKwkJX19hc21fXyB2b2xhdGlsZSAoIm1vdmVjICUldmJyLCAlMCIgOiAiPXIiICgodm9pZCopc3VuM3hfcHJvbV92YnIpKTsKKwl9CisKKwkvKiBzZXR1cCB0aGUgZXhjZXB0aW9uIHZlY3RvciB0YWJsZSAqLworCV9fYXNtX18gdm9sYXRpbGUgKCJtb3ZlYyAlMCwlJXZiciIgOiA6ICJyIiAoKHZvaWQqKXZlY3RvcnMpKTsKKworCWlmIChDUFVfSVNfMDYwKSB7CisJCS8qIHNldCB1cCBJU1AgZW50cnkgcG9pbnRzICovCisJCWFzbWxpbmthZ2Ugdm9pZCB1bmltcF92ZWModm9pZCkgYXNtICgiXzA2MF9pc3BfdW5pbXAiKTsKKworCQl2ZWN0b3JzW1ZFQ19VTklNUElJXSA9IHVuaW1wX3ZlYzsKKwl9Cit9CisKK3ZvaWQgX19pbml0IHRyYXBfaW5pdCAodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDQ4OyBpIDwgNjQ7IGkrKykKKwkJaWYgKCF2ZWN0b3JzW2ldKQorCQkJdmVjdG9yc1tpXSA9IHRyYXA7CisKKwlmb3IgKGkgPSA2NDsgaSA8IDI1NjsgaSsrKQorCQl2ZWN0b3JzW2ldID0gaW50aGFuZGxlcjsKKworI2lmZGVmIENPTkZJR19NNjhLRlBVX0VNVQorCWlmIChGUFVfSVNfRU1VKQorCQl2ZWN0b3JzW1ZFQ19MSU5FMTFdID0gZnB1X2VtdTsKKyNlbmRpZgorCisJaWYgKENQVV9JU18wNDAgJiYgIUZQVV9JU19FTVUpIHsKKwkJLyogc2V0IHVwIEZQU1AgZW50cnkgcG9pbnRzICovCisJCWFzbWxpbmthZ2Ugdm9pZCBkel92ZWModm9pZCkgYXNtICgiZHoiKTsKKwkJYXNtbGlua2FnZSB2b2lkIGluZXhfdmVjKHZvaWQpIGFzbSAoImluZXgiKTsKKwkJYXNtbGlua2FnZSB2b2lkIG92ZmxfdmVjKHZvaWQpIGFzbSAoIm92ZmwiKTsKKwkJYXNtbGlua2FnZSB2b2lkIHVuZmxfdmVjKHZvaWQpIGFzbSAoInVuZmwiKTsKKwkJYXNtbGlua2FnZSB2b2lkIHNuYW5fdmVjKHZvaWQpIGFzbSAoInNuYW4iKTsKKwkJYXNtbGlua2FnZSB2b2lkIG9wZXJyX3ZlYyh2b2lkKSBhc20gKCJvcGVyciIpOworCQlhc21saW5rYWdlIHZvaWQgYnN1bl92ZWModm9pZCkgYXNtICgiYnN1biIpOworCQlhc21saW5rYWdlIHZvaWQgZmxpbmVfdmVjKHZvaWQpIGFzbSAoImZsaW5lIik7CisJCWFzbWxpbmthZ2Ugdm9pZCB1bnN1cHBfdmVjKHZvaWQpIGFzbSAoInVuc3VwcCIpOworCisJCXZlY3RvcnNbVkVDX0ZQRElWWl0gPSBkel92ZWM7CisJCXZlY3RvcnNbVkVDX0ZQSVJdID0gaW5leF92ZWM7CisJCXZlY3RvcnNbVkVDX0ZQT1ZFUl0gPSBvdmZsX3ZlYzsKKwkJdmVjdG9yc1tWRUNfRlBVTkRFUl0gPSB1bmZsX3ZlYzsKKwkJdmVjdG9yc1tWRUNfRlBOQU5dID0gc25hbl92ZWM7CisJCXZlY3RvcnNbVkVDX0ZQT0VdID0gb3BlcnJfdmVjOworCQl2ZWN0b3JzW1ZFQ19GUEJSVUNdID0gYnN1bl92ZWM7CisJCXZlY3RvcnNbVkVDX0xJTkUxMV0gPSBmbGluZV92ZWM7CisJCXZlY3RvcnNbVkVDX0ZQVU5TVVBdID0gdW5zdXBwX3ZlYzsKKwl9CisKKwlpZiAoQ1BVX0lTXzA2MCAmJiAhRlBVX0lTX0VNVSkgeworCQkvKiBzZXQgdXAgSUZQU1AgZW50cnkgcG9pbnRzICovCisJCWFzbWxpbmthZ2Ugdm9pZCBzbmFuX3ZlYyh2b2lkKSBhc20gKCJfMDYwX2Zwc3Bfc25hbiIpOworCQlhc21saW5rYWdlIHZvaWQgb3BlcnJfdmVjKHZvaWQpIGFzbSAoIl8wNjBfZnBzcF9vcGVyciIpOworCQlhc21saW5rYWdlIHZvaWQgb3ZmbF92ZWModm9pZCkgYXNtICgiXzA2MF9mcHNwX292ZmwiKTsKKwkJYXNtbGlua2FnZSB2b2lkIHVuZmxfdmVjKHZvaWQpIGFzbSAoIl8wNjBfZnBzcF91bmZsIik7CisJCWFzbWxpbmthZ2Ugdm9pZCBkel92ZWModm9pZCkgYXNtICgiXzA2MF9mcHNwX2R6Iik7CisJCWFzbWxpbmthZ2Ugdm9pZCBpbmV4X3ZlYyh2b2lkKSBhc20gKCJfMDYwX2Zwc3BfaW5leCIpOworCQlhc21saW5rYWdlIHZvaWQgZmxpbmVfdmVjKHZvaWQpIGFzbSAoIl8wNjBfZnBzcF9mbGluZSIpOworCQlhc21saW5rYWdlIHZvaWQgdW5zdXBwX3ZlYyh2b2lkKSBhc20gKCJfMDYwX2Zwc3BfdW5zdXBwIik7CisJCWFzbWxpbmthZ2Ugdm9pZCBlZmZhZGRfdmVjKHZvaWQpIGFzbSAoIl8wNjBfZnBzcF9lZmZhZGQiKTsKKworCQl2ZWN0b3JzW1ZFQ19GUE5BTl0gPSBzbmFuX3ZlYzsKKwkJdmVjdG9yc1tWRUNfRlBPRV0gPSBvcGVycl92ZWM7CisJCXZlY3RvcnNbVkVDX0ZQT1ZFUl0gPSBvdmZsX3ZlYzsKKwkJdmVjdG9yc1tWRUNfRlBVTkRFUl0gPSB1bmZsX3ZlYzsKKwkJdmVjdG9yc1tWRUNfRlBESVZaXSA9IGR6X3ZlYzsKKwkJdmVjdG9yc1tWRUNfRlBJUl0gPSBpbmV4X3ZlYzsKKwkJdmVjdG9yc1tWRUNfTElORTExXSA9IGZsaW5lX3ZlYzsKKwkJdmVjdG9yc1tWRUNfRlBVTlNVUF0gPSB1bnN1cHBfdmVjOworCQl2ZWN0b3JzW1ZFQ19VTklNUEVBXSA9IGVmZmFkZF92ZWM7CisJfQorCisgICAgICAgIC8qIGlmIHJ1bm5pbmcgb24gYW4gYW1pZ2EsIG1ha2UgdGhlIE5NSSBpbnRlcnJ1cHQgZG8gbm90aGluZyAqLworCWlmIChNQUNIX0lTX0FNSUdBKSB7CisJCXZlY3RvcnNbVkVDX0lOVDddID0gbm1paGFuZGxlcjsKKwl9Cit9CisKKworc3RhdGljIGNvbnN0IGNoYXIgKnZlY19uYW1lc1tdID0geworCVtWRUNfUkVTRVRTUF0JPSAiUkVTRVQgU1AiLAorCVtWRUNfUkVTRVRQQ10JPSAiUkVTRVQgUEMiLAorCVtWRUNfQlVTRVJSXQk9ICJCVVMgRVJST1IiLAorCVtWRUNfQUREUkVSUl0JPSAiQUREUkVTUyBFUlJPUiIsCisJW1ZFQ19JTExFR0FMXQk9ICJJTExFR0FMIElOU1RSVUNUSU9OIiwKKwlbVkVDX1pFUk9ESVZdCT0gIlpFUk8gRElWSURFIiwKKwlbVkVDX0NIS10JPSAiQ0hLIiwKKwlbVkVDX1RSQVBdCT0gIlRSQVBjYyIsCisJW1ZFQ19QUklWXQk9ICJQUklWSUxFR0UgVklPTEFUSU9OIiwKKwlbVkVDX1RSQUNFXQk9ICJUUkFDRSIsCisJW1ZFQ19MSU5FMTBdCT0gIkxJTkUgMTAxMCIsCisJW1ZFQ19MSU5FMTFdCT0gIkxJTkUgMTExMSIsCisJW1ZFQ19SRVNWMTJdCT0gIlVOQVNTSUdORUQgUkVTRVJWRUQgMTIiLAorCVtWRUNfQ09QUk9DXQk9ICJDT1BST0NFU1NPUiBQUk9UT0NPTCBWSU9MQVRJT04iLAorCVtWRUNfRk9STUFUXQk9ICJGT1JNQVQgRVJST1IiLAorCVtWRUNfVU5JTlRdCT0gIlVOSU5JVElBTElaRUQgSU5URVJSVVBUIiwKKwlbVkVDX1JFU1YxNl0JPSAiVU5BU1NJR05FRCBSRVNFUlZFRCAxNiIsCisJW1ZFQ19SRVNWMTddCT0gIlVOQVNTSUdORUQgUkVTRVJWRUQgMTciLAorCVtWRUNfUkVTVjE4XQk9ICJVTkFTU0lHTkVEIFJFU0VSVkVEIDE4IiwKKwlbVkVDX1JFU1YxOV0JPSAiVU5BU1NJR05FRCBSRVNFUlZFRCAxOSIsCisJW1ZFQ19SRVNWMjBdCT0gIlVOQVNTSUdORUQgUkVTRVJWRUQgMjAiLAorCVtWRUNfUkVTVjIxXQk9ICJVTkFTU0lHTkVEIFJFU0VSVkVEIDIxIiwKKwlbVkVDX1JFU1YyMl0JPSAiVU5BU1NJR05FRCBSRVNFUlZFRCAyMiIsCisJW1ZFQ19SRVNWMjNdCT0gIlVOQVNTSUdORUQgUkVTRVJWRUQgMjMiLAorCVtWRUNfU1BVUl0JPSAiU1BVUklPVVMgSU5URVJSVVBUIiwKKwlbVkVDX0lOVDFdCT0gIkxFVkVMIDEgSU5UIiwKKwlbVkVDX0lOVDJdCT0gIkxFVkVMIDIgSU5UIiwKKwlbVkVDX0lOVDNdCT0gIkxFVkVMIDMgSU5UIiwKKwlbVkVDX0lOVDRdCT0gIkxFVkVMIDQgSU5UIiwKKwlbVkVDX0lOVDVdCT0gIkxFVkVMIDUgSU5UIiwKKwlbVkVDX0lOVDZdCT0gIkxFVkVMIDYgSU5UIiwKKwlbVkVDX0lOVDddCT0gIkxFVkVMIDcgSU5UIiwKKwlbVkVDX1NZU10JPSAiU1lTQ0FMTCIsCisJW1ZFQ19UUkFQMV0JPSAiVFJBUCAjMSIsCisJW1ZFQ19UUkFQMl0JPSAiVFJBUCAjMiIsCisJW1ZFQ19UUkFQM10JPSAiVFJBUCAjMyIsCisJW1ZFQ19UUkFQNF0JPSAiVFJBUCAjNCIsCisJW1ZFQ19UUkFQNV0JPSAiVFJBUCAjNSIsCisJW1ZFQ19UUkFQNl0JPSAiVFJBUCAjNiIsCisJW1ZFQ19UUkFQN10JPSAiVFJBUCAjNyIsCisJW1ZFQ19UUkFQOF0JPSAiVFJBUCAjOCIsCisJW1ZFQ19UUkFQOV0JPSAiVFJBUCAjOSIsCisJW1ZFQ19UUkFQMTBdCT0gIlRSQVAgIzEwIiwKKwlbVkVDX1RSQVAxMV0JPSAiVFJBUCAjMTEiLAorCVtWRUNfVFJBUDEyXQk9ICJUUkFQICMxMiIsCisJW1ZFQ19UUkFQMTNdCT0gIlRSQVAgIzEzIiwKKwlbVkVDX1RSQVAxNF0JPSAiVFJBUCAjMTQiLAorCVtWRUNfVFJBUDE1XQk9ICJUUkFQICMxNSIsCisJW1ZFQ19GUEJSVUNdCT0gIkZQQ1AgQlNVTiIsCisJW1ZFQ19GUElSXQk9ICJGUENQIElORVhBQ1QiLAorCVtWRUNfRlBESVZaXQk9ICJGUENQIERJViBCWSAwIiwKKwlbVkVDX0ZQVU5ERVJdCT0gIkZQQ1AgVU5ERVJGTE9XIiwKKwlbVkVDX0ZQT0VdCT0gIkZQQ1AgT1BFUkFORCBFUlJPUiIsCisJW1ZFQ19GUE9WRVJdCT0gIkZQQ1AgT1ZFUkZMT1ciLAorCVtWRUNfRlBOQU5dCT0gIkZQQ1AgU05BTiIsCisJW1ZFQ19GUFVOU1VQXQk9ICJGUENQIFVOU1VQUE9SVEVEIE9QRVJBVElPTiIsCisJW1ZFQ19NTVVDRkddCT0gIk1NVSBDT05GSUdVUkFUSU9OIEVSUk9SIiwKKwlbVkVDX01NVUlMTF0JPSAiTU1VIElMTEVHQUwgT1BFUkFUSU9OIEVSUk9SIiwKKwlbVkVDX01NVUFDQ10JPSAiTU1VIEFDQ0VTUyBMRVZFTCBWSU9MQVRJT04gRVJST1IiLAorCVtWRUNfUkVTVjU5XQk9ICJVTkFTU0lHTkVEIFJFU0VSVkVEIDU5IiwKKwlbVkVDX1VOSU1QRUFdCT0gIlVOQVNTSUdORUQgUkVTRVJWRUQgNjAiLAorCVtWRUNfVU5JTVBJSV0JPSAiVU5BU1NJR05FRCBSRVNFUlZFRCA2MSIsCisJW1ZFQ19SRVNWNjJdCT0gIlVOQVNTSUdORUQgUkVTRVJWRUQgNjIiLAorCVtWRUNfUkVTVjYzXQk9ICJVTkFTU0lHTkVEIFJFU0VSVkVEIDYzIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpzcGFjZV9uYW1lc1tdID0geworCVswXQkJPSAiU3BhY2UgMCIsCisJW1VTRVJfREFUQV0JPSAiVXNlciBEYXRhIiwKKwlbVVNFUl9QUk9HUkFNXQk9ICJVc2VyIFByb2dyYW0iLAorI2lmbmRlZiBDT05GSUdfU1VOMworCVszXQkJPSAiU3BhY2UgMyIsCisjZWxzZQorCVtGQ19DT05UUk9MXQk9ICJDb250cm9sIiwKKyNlbmRpZgorCVs0XQkJPSAiU3BhY2UgNCIsCisJW1NVUEVSX0RBVEFdCT0gIlN1cGVyIERhdGEiLAorCVtTVVBFUl9QUk9HUkFNXQk9ICJTdXBlciBQcm9ncmFtIiwKKwlbQ1BVX1NQQUNFXQk9ICJDUFUiCit9OworCit2b2lkIGRpZV9pZl9rZXJuZWwoY2hhciAqLHN0cnVjdCBwdF9yZWdzICosaW50KTsKK2FzbWxpbmthZ2UgaW50IGRvX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlKTsKK2ludCBzZW5kX2ZhdWx0X3NpZyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKK2FzbWxpbmthZ2Ugdm9pZCB0cmFwX2Moc3RydWN0IGZyYW1lICpmcCk7CisKKyNpZiBkZWZpbmVkIChDT05GSUdfTTY4MDYwKQorc3RhdGljIGlubGluZSB2b2lkIGFjY2Vzc19lcnJvcjA2MCAoc3RydWN0IGZyYW1lICpmcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZzbHcgPSBmcC0+dW4uZm10NC5wYzsgLyogaXMgcmVhbGx5IEZTTFcgZm9yIGFjY2VzcyBlcnJvciAqLworCisjaWZkZWYgREVCVUcKKwlwcmludGsoImZzbHc9JSNseCwgZmE9JSNseFxuIiwgZnNsdywgZnAtPnVuLmZtdDQuZWZmYWRkcik7CisjZW5kaWYKKworCWlmIChmc2x3ICYgTU1VMDYwX0JQRSkgeworCQkvKiBicmFuY2ggcHJlZGljdGlvbiBlcnJvciAtPiBjbGVhciBicmFuY2ggY2FjaGUgKi8KKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZlYyAlL2NhY3IsJS9kMFxuXHQiCisJCQkJICAgICAgIm9ybCAgICMweDAwNDAwMDAwLCUvZDBcblx0IgorCQkJCSAgICAgICJtb3ZlYyAlL2QwLCUvY2FjciIKKwkJCQkgICAgICA6IDogOiAiZDAiICk7CisJCS8qIHJldHVybiBpZiB0aGVyZSdzIG5vIG90aGVyIGVycm9yICovCisJCWlmICghKGZzbHcgJiBNTVUwNjBfRVJSX0JJVFMpICYmICEoZnNsdyAmIE1NVTA2MF9TRUUpKQorCQkJcmV0dXJuOworCX0KKworCWlmIChmc2x3ICYgKE1NVTA2MF9ERVNDX0VSUiB8IE1NVTA2MF9XUCB8IE1NVTA2MF9TUCkpIHsKKwkJdW5zaWduZWQgbG9uZyBlcnJvcmNvZGU7CisJCXVuc2lnbmVkIGxvbmcgYWRkciA9IGZwLT51bi5mbXQ0LmVmZmFkZHI7CisKKwkJaWYgKGZzbHcgJiBNTVUwNjBfTUEpCisJCQlhZGRyID0gKGFkZHIgKyBQQUdFX1NJWkUgLSAxKSAmIFBBR0VfTUFTSzsKKworCQllcnJvcmNvZGUgPSAxOworCQlpZiAoZnNsdyAmIE1NVTA2MF9ERVNDX0VSUikgeworCQkJX19mbHVzaF90bGIwNDBfb25lKGFkZHIpOworCQkJZXJyb3Jjb2RlID0gMDsKKwkJfQorCQlpZiAoZnNsdyAmIE1NVTA2MF9XKQorCQkJZXJyb3Jjb2RlIHw9IDI7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRrKCJlcnJvcmNvZGUgPSAlZFxuIiwgZXJyb3Jjb2RlICk7CisjZW5kaWYKKwkJZG9fcGFnZV9mYXVsdCgmZnAtPnB0cmVncywgYWRkciwgZXJyb3Jjb2RlKTsKKwl9IGVsc2UgaWYgKGZzbHcgJiAoTU1VMDYwX1NFRSkpeworCQkvKiBTb2Z0d2FyZSBFbXVsYXRpb24gRXJyb3IuCisJCSAqIGZhdWx0IGR1cmluZyBtZW1fcmVhZC9tZW1fd3JpdGUgaW4gaWZwc3AwNjAvb3MuUworCQkgKi8KKwkJc2VuZF9mYXVsdF9zaWcoJmZwLT5wdHJlZ3MpOworCX0gZWxzZSBpZiAoIShmc2x3ICYgKE1NVTA2MF9SRXxNTVUwNjBfV0UpKSB8fAorCQkgICBzZW5kX2ZhdWx0X3NpZygmZnAtPnB0cmVncykgPiAwKSB7CisJCXByaW50aygicGM9JSNseCwgZmE9JSNseFxuIiwgZnAtPnB0cmVncy5wYywgZnAtPnVuLmZtdDQuZWZmYWRkcik7CisJCXByaW50ayggIjY4MDYwIGFjY2VzcyBlcnJvciwgZnNsdz0lbHhcbiIsIGZzbHcgKTsKKwkJdHJhcF9jKCBmcCApOworCX0KK30KKyNlbmRpZiAvKiBDT05GSUdfTTY4MDYwICovCisKKyNpZiBkZWZpbmVkIChDT05GSUdfTTY4MDQwKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHByb2JlMDQwKGludCBpc3dyaXRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCB3YnMpCit7CisJdW5zaWduZWQgbG9uZyBtbXVzcjsKKwltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7CisKKwlzZXRfZnMoTUFLRV9NTV9TRUcod2JzKSk7CisKKwlpZiAoaXN3cml0ZSkKKwkJYXNtIHZvbGF0aWxlICgiLmNoaXAgNjgwNDA7IHB0ZXN0dyAoJTApOyAuY2hpcCA2OGsiIDogOiAiYSIgKGFkZHIpKTsKKwllbHNlCisJCWFzbSB2b2xhdGlsZSAoIi5jaGlwIDY4MDQwOyBwdGVzdHIgKCUwKTsgLmNoaXAgNjhrIiA6IDogImEiIChhZGRyKSk7CisKKwlhc20gdm9sYXRpbGUgKCIuY2hpcCA2ODA0MDsgbW92ZWMgJSVtbXVzciwlMDsgLmNoaXAgNjhrIiA6ICI9ciIgKG1tdXNyKSk7CisKKwlzZXRfZnMob2xkX2ZzKTsKKworCXJldHVybiBtbXVzcjsKK30KKworc3RhdGljIGlubGluZSBpbnQgZG9fMDQwd3JpdGViYWNrMSh1bnNpZ25lZCBzaG9ydCB3YnMsIHVuc2lnbmVkIGxvbmcgd2JhLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgd2JkKQoreworCWludCByZXMgPSAwOworCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKKworCS8qIHNldF9mcyBjYW4gbm90IGJlIG1vdmVkLCBvdGhlcndpc2UgcHV0X3VzZXIoKSBtYXkgb29wcyAqLworCXNldF9mcyhNQUtFX01NX1NFRyh3YnMpKTsKKworCXN3aXRjaCAod2JzICYgV0JTSVpfMDQwKSB7CisJY2FzZSBCQV9TSVpFX0JZVEU6CisJCXJlcyA9IHB1dF91c2VyKHdiZCAmIDB4ZmYsIChjaGFyICopd2JhKTsKKwkJYnJlYWs7CisJY2FzZSBCQV9TSVpFX1dPUkQ6CisJCXJlcyA9IHB1dF91c2VyKHdiZCAmIDB4ZmZmZiwgKHNob3J0ICopd2JhKTsKKwkJYnJlYWs7CisJY2FzZSBCQV9TSVpFX0xPTkc6CisJCXJlcyA9IHB1dF91c2VyKHdiZCwgKGludCAqKXdiYSk7CisJCWJyZWFrOworCX0KKworCS8qIHNldF9mcyBjYW4gbm90IGJlIG1vdmVkLCBvdGhlcndpc2UgcHV0X3VzZXIoKSBtYXkgb29wcyAqLworCXNldF9mcyhvbGRfZnMpOworCisKKyNpZmRlZiBERUJVRworCXByaW50aygiZG9fMDQwd3JpdGViYWNrMSwgcmVzPSVkXG4iLHJlcyk7CisjZW5kaWYKKworCXJldHVybiByZXM7Cit9CisKKy8qIGFmdGVyIGFuIGV4Y2VwdGlvbiBpbiBhIHdyaXRlYmFjayB0aGUgc3RhY2sgZnJhbWUgY29ycmVzcG9uZGluZworICogdG8gdGhhdCBleGNlcHRpb24gaXMgZGlzY2FyZGVkLCBzZXQgYSBmZXcgYml0cyBpbiB0aGUgb2xkIGZyYW1lCisgKiB0byBzaW11bGF0ZSB3aGF0IGl0IHNob3VsZCBsb29rIGxpa2UKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZpeF94ZnJhbWUwNDAoc3RydWN0IGZyYW1lICpmcCwgdW5zaWduZWQgbG9uZyB3YmEsIHVuc2lnbmVkIHNob3J0IHdicykKK3sKKwlmcC0+dW4uZm10Ny5mYWRkciA9IHdiYTsKKwlmcC0+dW4uZm10Ny5zc3cgPSB3YnMgJiAweGZmOworCWlmICh3YmEgIT0gY3VycmVudC0+dGhyZWFkLmZhZGRyKQorCSAgICBmcC0+dW4uZm10Ny5zc3cgfD0gTUFfMDQwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG9fMDQwd3JpdGViYWNrcyhzdHJ1Y3QgZnJhbWUgKmZwKQoreworCWludCByZXMgPSAwOworI2lmIDAKKwlpZiAoZnAtPnVuLmZtdDcud2IxcyAmIFdCVl8wNDApCisJCXByaW50aygiYWNjZXNzX2Vycm9yMDQwOiBjYW5ub3QgaGFuZGxlIDFzdCB3cml0ZWJhY2suIG9vcHMuXG4iKTsKKyNlbmRpZgorCisJaWYgKChmcC0+dW4uZm10Ny53YjJzICYgV0JWXzA0MCkgJiYKKwkgICAgIShmcC0+dW4uZm10Ny53YjJzICYgV0JUVF8wNDApKSB7CisJCXJlcyA9IGRvXzA0MHdyaXRlYmFjazEoZnAtPnVuLmZtdDcud2IycywgZnAtPnVuLmZtdDcud2IyYSwKKwkJCQkgICAgICAgZnAtPnVuLmZtdDcud2IyZCk7CisJCWlmIChyZXMpCisJCQlmaXhfeGZyYW1lMDQwKGZwLCBmcC0+dW4uZm10Ny53YjJhLCBmcC0+dW4uZm10Ny53YjJzKTsKKwkJZWxzZQorCQkJZnAtPnVuLmZtdDcud2IycyA9IDA7CisJfQorCisJLyogZG8gdGhlIDJuZCB3YiBvbmx5IGlmIHRoZSBmaXJzdCBvbmUgd2FzIHN1Y2Nlc3NmdWwgKGV4Y2VwdCBmb3IgYSBrZXJuZWwgd2IpICovCisJaWYgKGZwLT51bi5mbXQ3LndiM3MgJiBXQlZfMDQwICYmICghcmVzIHx8IGZwLT51bi5mbXQ3LndiM3MgJiA0KSkgeworCQlyZXMgPSBkb18wNDB3cml0ZWJhY2sxKGZwLT51bi5mbXQ3LndiM3MsIGZwLT51bi5mbXQ3LndiM2EsCisJCQkJICAgICAgIGZwLT51bi5mbXQ3LndiM2QpOworCQlpZiAocmVzKQorCQkgICAgeworCQkJZml4X3hmcmFtZTA0MChmcCwgZnAtPnVuLmZtdDcud2IzYSwgZnAtPnVuLmZtdDcud2Izcyk7CisKKwkJCWZwLT51bi5mbXQ3LndiMnMgPSBmcC0+dW4uZm10Ny53YjNzOworCQkJZnAtPnVuLmZtdDcud2IzcyAmPSAofldCVl8wNDApOworCQkJZnAtPnVuLmZtdDcud2IyYSA9IGZwLT51bi5mbXQ3LndiM2E7CisJCQlmcC0+dW4uZm10Ny53YjJkID0gZnAtPnVuLmZtdDcud2IzZDsKKwkJICAgIH0KKwkJZWxzZQorCQkJZnAtPnVuLmZtdDcud2IzcyA9IDA7CisJfQorCisJaWYgKHJlcykKKwkJc2VuZF9mYXVsdF9zaWcoJmZwLT5wdHJlZ3MpOworfQorCisvKgorICogY2FsbGVkIGZyb20gc2lncmV0dXJuKCksIG11c3QgZW5zdXJlIHVzZXJzcGFjZSBjb2RlIGRpZG4ndAorICogbWFuaXB1bGF0ZSBleGNlcHRpb24gZnJhbWUgdG8gY2lyY3VtdmVudCBwcm90ZWN0aW9uLCB0aGVuIGNvbXBsZXRlCisgKiBwZW5kaW5nIHdyaXRlYmFja3MKKyAqIHdlIGp1c3QgY2xlYXIgVE0yIHRvIHR1cm4gaXQgaW50byBhbiB1c2Vyc3BhY2UgYWNjZXNzCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCBiZXJyXzA0MGNsZWFudXAoc3RydWN0IGZyYW1lICpmcCkKK3sKKwlmcC0+dW4uZm10Ny53YjJzICY9IH40OworCWZwLT51bi5mbXQ3LndiM3MgJj0gfjQ7CisKKwlkb18wNDB3cml0ZWJhY2tzKGZwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFjY2Vzc19lcnJvcjA0MChzdHJ1Y3QgZnJhbWUgKmZwKQoreworCXVuc2lnbmVkIHNob3J0IHNzdyA9IGZwLT51bi5mbXQ3LnNzdzsKKwl1bnNpZ25lZCBsb25nIG1tdXNyOworCisjaWZkZWYgREVCVUcKKwlwcmludGsoInNzdz0lI3gsIGZhPSUjbHhcbiIsIHNzdywgZnAtPnVuLmZtdDcuZmFkZHIpOworICAgICAgICBwcmludGsoIndiMXM9JSN4LCB3YjJzPSUjeCwgd2Izcz0lI3hcbiIsIGZwLT51bi5mbXQ3LndiMXMsCisJCWZwLT51bi5mbXQ3LndiMnMsIGZwLT51bi5mbXQ3LndiM3MpOworCXByaW50ayAoIndiMmE9JWx4LCB3YjNhPSVseCwgd2IyZD0lbHgsIHdiM2Q9JWx4XG4iLAorCQlmcC0+dW4uZm10Ny53YjJhLCBmcC0+dW4uZm10Ny53YjNhLAorCQlmcC0+dW4uZm10Ny53YjJkLCBmcC0+dW4uZm10Ny53YjNkKTsKKyNlbmRpZgorCisJaWYgKHNzdyAmIEFUQ18wNDApIHsKKwkJdW5zaWduZWQgbG9uZyBhZGRyID0gZnAtPnVuLmZtdDcuZmFkZHI7CisJCXVuc2lnbmVkIGxvbmcgZXJyb3Jjb2RlOworCisJCS8qCisJCSAqIFRoZSBNTVUgc3RhdHVzIGhhcyB0byBiZSBkZXRlcm1pbmVkIEFGVEVSIHRoZSBhZGRyZXNzCisJCSAqIGhhcyBiZWVuIGNvcnJlY3RlZCBpZiB0aGVyZSB3YXMgYSBtaXNhbGlnbmVkIGFjY2VzcyAoTUEpLgorCQkgKi8KKwkJaWYgKHNzdyAmIE1BXzA0MCkKKwkJCWFkZHIgPSAoYWRkciArIDcpICYgLTg7CisKKwkJLyogTU1VIGVycm9yLCBnZXQgdGhlIE1NVVNSIGluZm8gZm9yIHRoaXMgYWNjZXNzICovCisJCW1tdXNyID0gcHJvYmUwNDAoIShzc3cgJiBSV18wNDApLCBhZGRyLCBzc3cpOworI2lmZGVmIERFQlVHCisJCXByaW50aygibW11c3IgPSAlbHhcbiIsIG1tdXNyKTsKKyNlbmRpZgorCQllcnJvcmNvZGUgPSAxOworCQlpZiAoIShtbXVzciAmIE1NVV9SXzA0MCkpIHsKKwkJCS8qIGNsZWFyIHRoZSBpbnZhbGlkIGF0YyBlbnRyeSAqLworCQkJX19mbHVzaF90bGIwNDBfb25lKGFkZHIpOworCQkJZXJyb3Jjb2RlID0gMDsKKwkJfQorCisJCS8qIGRlc3BpdGUgd2hhdCBkb2N1bWVudGF0aW9uIHNlZW1zIHRvIHNheSwgUk1XCisJCSAqIGFjY2Vzc2VzIGhhdmUgYWx3YXlzIGJvdGggdGhlIExLIGFuZCBSVyBiaXRzIHNldCAqLworCQlpZiAoIShzc3cgJiBSV18wNDApIHx8IChzc3cgJiBMS18wNDApKQorCQkJZXJyb3Jjb2RlIHw9IDI7CisKKwkJaWYgKGRvX3BhZ2VfZmF1bHQoJmZwLT5wdHJlZ3MsIGFkZHIsIGVycm9yY29kZSkpIHsKKyNpZmRlZiBERUJVRworCQkgICAgICAgIHByaW50aygiZG9fcGFnZV9mYXVsdCgpICE9MCBcbiIpOworI2VuZGlmCisJCQlpZiAodXNlcl9tb2RlKCZmcC0+cHRyZWdzKSl7CisJCQkJLyogZGVsYXkgd3JpdGViYWNrcyBhZnRlciBzaWduYWwgZGVsaXZlcnkgKi8KKyNpZmRlZiBERUJVRworCQkJICAgICAgICBwcmludGsoIi4uIHdhcyB1c2VybW9kZSAtIHJldHVyblxuIik7CisjZW5kaWYKKwkJCQlyZXR1cm47CisJCQl9CisJCQkvKiBkaXNhYmxlIHdyaXRlYmFjayBpbnRvIHVzZXIgc3BhY2UgZnJvbSBrZXJuZWwKKwkJCSAqIChpZiBkb19wYWdlX2ZhdWx0IGRpZG4ndCBmaXggdGhlIG1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgd3JpdGViYWNrIHdvbid0IGRvIGdvb2QpCisJCQkgKi8KKyNpZmRlZiBERUJVRworCQkJcHJpbnRrKCIuLiBkaXNhYmxpbmcgd2IyXG4iKTsKKyNlbmRpZgorCQkJaWYgKGZwLT51bi5mbXQ3LndiMmEgPT0gZnAtPnVuLmZtdDcuZmFkZHIpCisJCQkJZnAtPnVuLmZtdDcud2IycyAmPSB+V0JWXzA0MDsKKwkJfQorCX0gZWxzZSBpZiAoc2VuZF9mYXVsdF9zaWcoJmZwLT5wdHJlZ3MpID4gMCkgeworCQlwcmludGsoIjY4MDQwIGFjY2VzcyBlcnJvciwgc3N3PSV4XG4iLCBzc3cpOworCQl0cmFwX2MoZnApOworCX0KKworCWRvXzA0MHdyaXRlYmFja3MoZnApOworfQorI2VuZGlmIC8qIENPTkZJR19NNjgwNDAgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NVTjMpCisjaW5jbHVkZSA8YXNtL3N1bjNtbXUuaD4KKworZXh0ZXJuIGludCBtbXVfZW11X2hhbmRsZV9mYXVsdCAodW5zaWduZWQgbG9uZywgaW50LCBpbnQpOworCisvKiBzdW4zIHZlcnNpb24gb2YgYnVzX2Vycm9yMDMwICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBidXNfZXJyb3IwMzAgKHN0cnVjdCBmcmFtZSAqZnApCit7CisJdW5zaWduZWQgY2hhciBidXNlcnJfdHlwZSA9IHN1bjNfZ2V0X2J1c2VyciAoKTsKKwl1bnNpZ25lZCBsb25nIGFkZHIsIGVycm9yY29kZTsKKwl1bnNpZ25lZCBzaG9ydCBzc3cgPSBmcC0+dW4uZm10Yi5zc3c7CisJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX3N1bjNfbWFwX3Rlc3Rfc3RhcnQsIF9zdW4zX21hcF90ZXN0X2VuZDsKKworI2lmZGVmIERFQlVHCisJaWYgKHNzdyAmIChGQyB8IEZCKSkKKwkJcHJpbnRrICgiSW5zdHJ1Y3Rpb24gZmF1bHQgYXQgJSMwMTBseFxuIiwKKwkJCXNzdyAmIEZDID8KKwkJCWZwLT5wdHJlZ3MuZm9ybWF0ID09IDB4YSA/IGZwLT5wdHJlZ3MucGMgKyAyIDogZnAtPnVuLmZtdGIuYmFkZHIgLSAyCisJCQk6CisJCQlmcC0+cHRyZWdzLmZvcm1hdCA9PSAweGEgPyBmcC0+cHRyZWdzLnBjICsgNCA6IGZwLT51bi5mbXRiLmJhZGRyKTsKKwlpZiAoc3N3ICYgREYpCisJCXByaW50ayAoIkRhdGEgJXMgZmF1bHQgYXQgJSMwMTBseCBpbiAlcyAocGM9JSNseClcbiIsCisJCQlzc3cgJiBSVyA/ICJyZWFkIiA6ICJ3cml0ZSIsCisJCQlmcC0+dW4uZm10Yi5kYWRkciwKKwkJCXNwYWNlX25hbWVzW3NzdyAmIERGQ10sIGZwLT5wdHJlZ3MucGMpOworI2VuZGlmCisKKwkvKgorCSAqIENoZWNrIGlmIHRoaXMgcGFnZSBzaG91bGQgYmUgZGVtYW5kLW1hcHBlZC4gVGhpcyBuZWVkcyB0byBnbyBiZWZvcmUKKwkgKiB0aGUgdGVzdGluZyBmb3IgYSBiYWQga2VybmVsLXNwYWNlIGFjY2VzcyAoZGVtYW5kLW1hcHBpbmcgYXBwbGllcworCSAqIHRvIGtlcm5lbCBhY2Nlc3NlcyB0b28pLgorCSAqLworCisJaWYgKChzc3cgJiBERikKKwkgICAgJiYgKGJ1c2Vycl90eXBlICYgKFNVTjNfQlVTRVJSX1BST1RFUlIgfCBTVU4zX0JVU0VSUl9JTlZBTElEKSkpIHsKKwkJaWYgKG1tdV9lbXVfaGFuZGxlX2ZhdWx0IChmcC0+dW4uZm10Yi5kYWRkciwgc3N3ICYgUlcsIDApKQorCQkJcmV0dXJuOworCX0KKworCS8qIENoZWNrIGZvciBrZXJuZWwtc3BhY2UgcGFnZWZhdWx0IChCQUQpLiAqLworCWlmIChmcC0+cHRyZWdzLnNyICYgUFNfUykgeworCQkvKiBrZXJuZWwgZmF1bHQgbXVzdCBiZSBhIGRhdGEgZmF1bHQgdG8gdXNlciBzcGFjZSAqLworCQlpZiAoISAoKHNzdyAmIERGKSAmJiAoKHNzdyAmIERGQykgPT0gVVNFUl9EQVRBKSkpIHsKKwkJICAgICAvLyB0cnkgY2hlY2tpbmcgdGhlIGtlcm5lbCBtYXBwaW5ncyBiZWZvcmUgc3VycmVuZGVyCisJCSAgICAgaWYgKG1tdV9lbXVfaGFuZGxlX2ZhdWx0IChmcC0+dW4uZm10Yi5kYWRkciwgc3N3ICYgUlcsIDEpKQorCQkJICByZXR1cm47CisJCQkvKiBpbnN0cnVjdGlvbiBmYXVsdCBvciBrZXJuZWwgZGF0YSBmYXVsdCEgKi8KKwkJCWlmIChzc3cgJiAoRkMgfCBGQikpCisJCQkJcHJpbnRrICgiSW5zdHJ1Y3Rpb24gZmF1bHQgYXQgJSMwMTBseFxuIiwKKwkJCQkJZnAtPnB0cmVncy5wYyk7CisJCQlpZiAoc3N3ICYgREYpIHsKKwkJCQkvKiB3YXMgdGhpcyBmYXVsdCBpbmN1cnJlZCB0ZXN0aW5nIGJ1cyBtYXBwaW5ncz8gKi8KKwkJCQlpZigoZnAtPnB0cmVncy5wYyA+PSAodW5zaWduZWQgbG9uZykmX3N1bjNfbWFwX3Rlc3Rfc3RhcnQpICYmCisJCQkJICAgKGZwLT5wdHJlZ3MucGMgPD0gKHVuc2lnbmVkIGxvbmcpJl9zdW4zX21hcF90ZXN0X2VuZCkpIHsKKwkJCQkJc2VuZF9mYXVsdF9zaWcoJmZwLT5wdHJlZ3MpOworCQkJCQlyZXR1cm47CisJCQkJfQorCisJCQkJcHJpbnRrICgiRGF0YSAlcyBmYXVsdCBhdCAlIzAxMGx4IGluICVzIChwYz0lI2x4KVxuIiwKKwkJCQkJc3N3ICYgUlcgPyAicmVhZCIgOiAid3JpdGUiLAorCQkJCQlmcC0+dW4uZm10Yi5kYWRkciwKKwkJCQkJc3BhY2VfbmFtZXNbc3N3ICYgREZDXSwgZnAtPnB0cmVncy5wYyk7CisJCQl9CisJCQlwcmludGsgKCJCQUQgS0VSTkVMIEJVU0VSUlxuIik7CisKKwkJCWRpZV9pZl9rZXJuZWwoIk9vcHMiLCAmZnAtPnB0cmVncywwKTsKKwkJCWZvcmNlX3NpZyhTSUdLSUxMLCBjdXJyZW50KTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHVzZXIgZmF1bHQgKi8KKwkJaWYgKCEoc3N3ICYgKEZDIHwgRkIpKSAmJiAhKHNzdyAmIERGKSkKKwkJCS8qIG5vdCBhbiBpbnN0cnVjdGlvbiBmYXVsdCBvciBkYXRhIGZhdWx0ISBCQUQgKi8KKwkJCXBhbmljICgiVVNFUiBCVVNFUlIgdy9vIGluc3RydWN0aW9uIG9yIGRhdGEgZmF1bHQiKTsKKwl9CisKKworCS8qIEZpcnN0IGhhbmRsZSB0aGUgZGF0YSBmYXVsdCwgaWYgYW55LiAgKi8KKwlpZiAoc3N3ICYgREYpIHsKKwkJYWRkciA9IGZwLT51bi5mbXRiLmRhZGRyOworCisvLyBlcnJvcmNvZGUgYml0IDA6CTAgLT4gbm8gcGFnZQkJMSAtPiBwcm90ZWN0aW9uIGZhdWx0CisvLyBlcnJvcmNvZGUgYml0IDE6CTAgLT4gcmVhZCBmYXVsdAkJMSAtPiB3cml0ZSBmYXVsdAorCisvLyAoYnVzZXJyX3R5cGUgJiBTVU4zX0JVU0VSUl9QUk9URVJSKQktPiBwcm90ZWN0aW9uIGZhdWx0CisvLyAoYnVzZXJyX3R5cGUgJiBTVU4zX0JVU0VSUl9JTlZBTElEKQktPiBpbnZhbGlkIHBhZ2UgZmF1bHQKKworCQlpZiAoYnVzZXJyX3R5cGUgJiBTVU4zX0JVU0VSUl9QUk9URVJSKQorCQkJZXJyb3Jjb2RlID0gMHgwMTsKKwkJZWxzZSBpZiAoYnVzZXJyX3R5cGUgJiBTVU4zX0JVU0VSUl9JTlZBTElEKQorCQkJZXJyb3Jjb2RlID0gMHgwMDsKKwkJZWxzZSB7CisjaWZkZWYgREVCVUcKKwkJCXByaW50ayAoIioqKiB1bmV4cGVjdGVkIGJ1c2ZhdWx0IHR5cGU9JSMwNHhcbiIsIGJ1c2Vycl90eXBlKTsKKwkJCXByaW50ayAoImludmFsaWQgJXMgYWNjZXNzIGF0ICUjbHggZnJvbSBwYyAlI2x4XG4iLAorCQkJCSEoc3N3ICYgUlcpID8gIndyaXRlIiA6ICJyZWFkIiwgYWRkciwKKwkJCQlmcC0+cHRyZWdzLnBjKTsKKyNlbmRpZgorCQkJZGllX2lmX2tlcm5lbCAoIk9vcHMiLCAmZnAtPnB0cmVncywgYnVzZXJyX3R5cGUpOworCQkJZm9yY2Vfc2lnIChTSUdCVVMsIGN1cnJlbnQpOworCQkJcmV0dXJuOworCQl9CisKKy8vdG9kbzogd3RmIGlzIFJNIGJpdD8gLS1tCisJCWlmICghKHNzdyAmIFJXKSB8fCBzc3cgJiBSTSkKKwkJCWVycm9yY29kZSB8PSAweDAyOworCisJCS8qIEhhbmRsZSBwYWdlIGZhdWx0LiAqLworCQlkb19wYWdlX2ZhdWx0ICgmZnAtPnB0cmVncywgYWRkciwgZXJyb3Jjb2RlKTsKKworCQkvKiBSZXRyeSB0aGUgZGF0YSBmYXVsdCBub3cuICovCisJCXJldHVybjsKKwl9CisKKwkvKiBOb3cgaGFuZGxlIHRoZSBpbnN0cnVjdGlvbiBmYXVsdC4gKi8KKworCS8qIEdldCB0aGUgZmF1bHQgYWRkcmVzcy4gKi8KKwlpZiAoZnAtPnB0cmVncy5mb3JtYXQgPT0gMHhBKQorCQlhZGRyID0gZnAtPnB0cmVncy5wYyArIDQ7CisJZWxzZQorCQlhZGRyID0gZnAtPnVuLmZtdGIuYmFkZHI7CisJaWYgKHNzdyAmIEZDKQorCQlhZGRyIC09IDI7CisKKwlpZiAoYnVzZXJyX3R5cGUgJiBTVU4zX0JVU0VSUl9JTlZBTElEKSB7CisJCWlmICghbW11X2VtdV9oYW5kbGVfZmF1bHQgKGZwLT51bi5mbXRiLmRhZGRyLCAxLCAwKSkKKwkJCWRvX3BhZ2VfZmF1bHQgKCZmcC0+cHRyZWdzLCBhZGRyLCAwKTsKKyAgICAgICB9IGVsc2UgeworI2lmZGVmIERFQlVHCisJCXByaW50ayAoInByb3RlY3Rpb24gZmF1bHQgb24gaW5zbiBhY2Nlc3MgKHNlZ3YpLlxuIik7CisjZW5kaWYKKwkJZm9yY2Vfc2lnIChTSUdTRUdWLCBjdXJyZW50KTsKKyAgICAgICB9Cit9CisjZWxzZQorI2lmIGRlZmluZWQoQ1BVX002ODAyMF9PUl9NNjgwMzApCitzdGF0aWMgaW5saW5lIHZvaWQgYnVzX2Vycm9yMDMwIChzdHJ1Y3QgZnJhbWUgKmZwKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IHRlbXA7CisJdW5zaWduZWQgc2hvcnQgbW11c3I7CisJdW5zaWduZWQgbG9uZyBhZGRyLCBlcnJvcmNvZGU7CisJdW5zaWduZWQgc2hvcnQgc3N3ID0gZnAtPnVuLmZtdGIuc3N3OworI2lmZGVmIERFQlVHCisJdW5zaWduZWQgbG9uZyBkZXNjOworCisJcHJpbnRrICgicGlkID0gJXggICIsIGN1cnJlbnQtPnBpZCk7CisJcHJpbnRrICgiU1NXPSUjMDZ4ICAiLCBzc3cpOworCisJaWYgKHNzdyAmIChGQyB8IEZCKSkKKwkJcHJpbnRrICgiSW5zdHJ1Y3Rpb24gZmF1bHQgYXQgJSMwMTBseFxuIiwKKwkJCXNzdyAmIEZDID8KKwkJCWZwLT5wdHJlZ3MuZm9ybWF0ID09IDB4YSA/IGZwLT5wdHJlZ3MucGMgKyAyIDogZnAtPnVuLmZtdGIuYmFkZHIgLSAyCisJCQk6CisJCQlmcC0+cHRyZWdzLmZvcm1hdCA9PSAweGEgPyBmcC0+cHRyZWdzLnBjICsgNCA6IGZwLT51bi5mbXRiLmJhZGRyKTsKKwlpZiAoc3N3ICYgREYpCisJCXByaW50ayAoIkRhdGEgJXMgZmF1bHQgYXQgJSMwMTBseCBpbiAlcyAocGM9JSNseClcbiIsCisJCQlzc3cgJiBSVyA/ICJyZWFkIiA6ICJ3cml0ZSIsCisJCQlmcC0+dW4uZm10Yi5kYWRkciwKKwkJCXNwYWNlX25hbWVzW3NzdyAmIERGQ10sIGZwLT5wdHJlZ3MucGMpOworI2VuZGlmCisKKwkvKiArK2FuZHJlYXM6IElmIGEgZGF0YSBmYXVsdCBhbmQgYW4gaW5zdHJ1Y3Rpb24gZmF1bHQgaGFwcGVuCisJICAgYXQgdGhlIHNhbWUgdGltZSBtYXAgaW4gYm90aCBwYWdlcy4gICovCisKKwkvKiBGaXJzdCBoYW5kbGUgdGhlIGRhdGEgZmF1bHQsIGlmIGFueS4gICovCisJaWYgKHNzdyAmIERGKSB7CisJCWFkZHIgPSBmcC0+dW4uZm10Yi5kYWRkcjsKKworI2lmZGVmIERFQlVHCisJCWFzbSB2b2xhdGlsZSAoInB0ZXN0ciAlMywlMkAsIzcsJTBcblx0IgorCQkJICAgICAgInBtb3ZlICUlcHNyLCUxQCIKKwkJCSAgICAgIDogIj1hJiIgKGRlc2MpCisJCQkgICAgICA6ICJhIiAoJnRlbXApLCAiYSIgKGFkZHIpLCAiZCIgKHNzdykpOworI2Vsc2UKKwkJYXNtIHZvbGF0aWxlICgicHRlc3RyICUyLCUxQCwjN1xuXHQiCisJCQkgICAgICAicG1vdmUgJSVwc3IsJTBAIgorCQkJICAgICAgOiA6ICJhIiAoJnRlbXApLCAiYSIgKGFkZHIpLCAiZCIgKHNzdykpOworI2VuZGlmCisJCW1tdXNyID0gdGVtcDsKKworI2lmZGVmIERFQlVHCisJCXByaW50aygibW11c3IgaXMgJSN4IGZvciBhZGRyICUjbHggaW4gdGFzayAlcFxuIiwKKwkJICAgICAgIG1tdXNyLCBhZGRyLCBjdXJyZW50KTsKKwkJcHJpbnRrKCJkZXNjcmlwdG9yIGFkZHJlc3MgaXMgJSNseCwgY29udGVudHMgJSNseFxuIiwKKwkJICAgICAgIF9fdmEoZGVzYyksICoodW5zaWduZWQgbG9uZyAqKV9fdmEoZGVzYykpOworI2VuZGlmCisKKwkJZXJyb3Jjb2RlID0gKG1tdXNyICYgTU1VX0kpID8gMCA6IDE7CisJCWlmICghKHNzdyAmIFJXKSB8fCAoc3N3ICYgUk0pKQorCQkJZXJyb3Jjb2RlIHw9IDI7CisKKwkJaWYgKG1tdXNyICYgKE1NVV9JIHwgTU1VX1dQKSkgeworCQkJaWYgKHNzdyAmIDQpIHsKKwkJCQlwcmludGsoIkRhdGEgJXMgZmF1bHQgYXQgJSMwMTBseCBpbiAlcyAocGM9JSNseClcbiIsCisJCQkJICAgICAgIHNzdyAmIFJXID8gInJlYWQiIDogIndyaXRlIiwKKwkJCQkgICAgICAgZnAtPnVuLmZtdGIuZGFkZHIsCisJCQkJICAgICAgIHNwYWNlX25hbWVzW3NzdyAmIERGQ10sIGZwLT5wdHJlZ3MucGMpOworCQkJCWdvdG8gYnVzZXJyOworCQkJfQorCQkJLyogRG9uJ3QgdHJ5IHRvIGRvIGFueXRoaW5nIGZ1cnRoZXIgaWYgYW4gZXhjZXB0aW9uIHdhcworCQkJICAgaGFuZGxlZC4gKi8KKwkJCWlmIChkb19wYWdlX2ZhdWx0ICgmZnAtPnB0cmVncywgYWRkciwgZXJyb3Jjb2RlKSA8IDApCisJCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKCEobW11c3IgJiBNTVVfSSkpIHsKKwkJCS8qIHByb2JhYmx5IGEgMDIwIGNhcyBmYXVsdCAqLworCQkJaWYgKCEoc3N3ICYgUk0pICYmIHNlbmRfZmF1bHRfc2lnKCZmcC0+cHRyZWdzKSA+IDApCisJCQkJcHJpbnRrKCJ1bmV4cGVjdGVkIGJ1cyBlcnJvciAoJSN4LCUjeClcbiIsIHNzdywgbW11c3IpOworCQl9IGVsc2UgaWYgKG1tdXNyICYgKE1NVV9CfE1NVV9MfE1NVV9TKSkgeworCQkJcHJpbnRrKCJpbnZhbGlkICVzIGFjY2VzcyBhdCAlI2x4IGZyb20gcGMgJSNseFxuIiwKKwkJCSAgICAgICAhKHNzdyAmIFJXKSA/ICJ3cml0ZSIgOiAicmVhZCIsIGFkZHIsCisJCQkgICAgICAgZnAtPnB0cmVncy5wYyk7CisJCQlkaWVfaWZfa2VybmVsKCJPb3BzIiwmZnAtPnB0cmVncyxtbXVzcik7CisJCQlmb3JjZV9zaWcoU0lHU0VHViwgY3VycmVudCk7CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CisjaWYgMAorCQkJc3RhdGljIHZvbGF0aWxlIGxvbmcgdGxvbmc7CisjZW5kaWYKKworCQkJcHJpbnRrKCJ3ZWlyZCAlcyBhY2Nlc3MgYXQgJSNseCBmcm9tIHBjICUjbHggKHNzdyBpcyAlI3gpXG4iLAorCQkJICAgICAgICEoc3N3ICYgUlcpID8gIndyaXRlIiA6ICJyZWFkIiwgYWRkciwKKwkJCSAgICAgICBmcC0+cHRyZWdzLnBjLCBzc3cpOworCQkJYXNtIHZvbGF0aWxlICgicHRlc3RyICMxLCUxQCwjMFxuXHQiCisJCQkJICAgICAgInBtb3ZlICUlcHNyLCUwQCIKKwkJCQkgICAgICA6IC8qIG5vIG91dHB1dHMgKi8KKwkJCQkgICAgICA6ICJhIiAoJnRlbXApLCAiYSIgKGFkZHIpKTsKKwkJCW1tdXNyID0gdGVtcDsKKworCQkJcHJpbnRrICgibGV2ZWwgMCBtbXVzciBpcyAlI3hcbiIsIG1tdXNyKTsKKyNpZiAwCisJCQlhc20gdm9sYXRpbGUgKCJwbW92ZSAlJXR0MCwlMEAiCisJCQkJICAgICAgOiAvKiBubyBvdXRwdXRzICovCisJCQkJICAgICAgOiAiYSIgKCZ0bG9uZykpOworCQkJcHJpbnRrKCJ0dDAgaXMgJSNseCwgIiwgdGxvbmcpOworCQkJYXNtIHZvbGF0aWxlICgicG1vdmUgJSV0dDEsJTBAIgorCQkJCSAgICAgIDogLyogbm8gb3V0cHV0cyAqLworCQkJCSAgICAgIDogImEiICgmdGxvbmcpKTsKKwkJCXByaW50aygidHQxIGlzICUjbHhcbiIsIHRsb25nKTsKKyNlbmRpZgorI2lmZGVmIERFQlVHCisJCQlwcmludGsoIlVua25vd24gU0lHU0VHViAtIDFcbiIpOworI2VuZGlmCisJCQlkaWVfaWZfa2VybmVsKCJPb3BzIiwmZnAtPnB0cmVncyxtbXVzcik7CisJCQlmb3JjZV9zaWcoU0lHU0VHViwgY3VycmVudCk7CisJCQlyZXR1cm47CisJCX0KKworCQkvKiBzZXR1cCBhbiBBVEMgZW50cnkgZm9yIHRoZSBhY2Nlc3MgYWJvdXQgdG8gYmUgcmV0cmllZCAqLworCQlpZiAoIShzc3cgJiBSVykgfHwgKHNzdyAmIFJNKSkKKwkJCWFzbSB2b2xhdGlsZSAoInBsb2FkdyAlMSwlMEAiIDogLyogbm8gb3V0cHV0cyAqLworCQkJCSAgICAgIDogImEiIChhZGRyKSwgImQiIChzc3cpKTsKKwkJZWxzZQorCQkJYXNtIHZvbGF0aWxlICgicGxvYWRyICUxLCUwQCIgOiAvKiBubyBvdXRwdXRzICovCisJCQkJICAgICAgOiAiYSIgKGFkZHIpLCAiZCIgKHNzdykpOworCX0KKworCS8qIE5vdyBoYW5kbGUgdGhlIGluc3RydWN0aW9uIGZhdWx0LiAqLworCisJaWYgKCEoc3N3ICYgKEZDfEZCKSkpCisJCXJldHVybjsKKworCWlmIChmcC0+cHRyZWdzLnNyICYgUFNfUykgeworCQlwcmludGsoIkluc3RydWN0aW9uIGZhdWx0IGF0ICUjMDEwbHhcbiIsCisJCQlmcC0+cHRyZWdzLnBjKTsKKwlidXNlcnI6CisJCXByaW50ayAoIkJBRCBLRVJORUwgQlVTRVJSXG4iKTsKKwkJZGllX2lmX2tlcm5lbCgiT29wcyIsJmZwLT5wdHJlZ3MsMCk7CisJCWZvcmNlX3NpZyhTSUdLSUxMLCBjdXJyZW50KTsKKwkJcmV0dXJuOworCX0KKworCS8qIGdldCB0aGUgZmF1bHQgYWRkcmVzcyAqLworCWlmIChmcC0+cHRyZWdzLmZvcm1hdCA9PSAxMCkKKwkJYWRkciA9IGZwLT5wdHJlZ3MucGMgKyA0OworCWVsc2UKKwkJYWRkciA9IGZwLT51bi5mbXRiLmJhZGRyOworCWlmIChzc3cgJiBGQykKKwkJYWRkciAtPSAyOworCisJaWYgKChzc3cgJiBERikgJiYgKChhZGRyIF4gZnAtPnVuLmZtdGIuZGFkZHIpICYgUEFHRV9NQVNLKSA9PSAwKQorCQkvKiBJbnNuIGZhdWx0IG9uIHNhbWUgcGFnZSBhcyBkYXRhIGZhdWx0LiAgQnV0IHdlCisJCSAgIHNob3VsZCBzdGlsbCBjcmVhdGUgdGhlIEFUQyBlbnRyeS4gICovCisJCWdvdG8gY3JlYXRlX2F0Y19lbnRyeTsKKworI2lmZGVmIERFQlVHCisJYXNtIHZvbGF0aWxlICgicHRlc3RyICMxLCUyQCwjNywlMFxuXHQiCisJCSAgICAgICJwbW92ZSAlJXBzciwlMUAiCisJCSAgICAgIDogIj1hJiIgKGRlc2MpCisJCSAgICAgIDogImEiICgmdGVtcCksICJhIiAoYWRkcikpOworI2Vsc2UKKwlhc20gdm9sYXRpbGUgKCJwdGVzdHIgIzEsJTFALCM3XG5cdCIKKwkJICAgICAgInBtb3ZlICUlcHNyLCUwQCIKKwkJICAgICAgOiA6ICJhIiAoJnRlbXApLCAiYSIgKGFkZHIpKTsKKyNlbmRpZgorCW1tdXNyID0gdGVtcDsKKworI2lmZGVmIERFQlVHCisJcHJpbnRrICgibW11c3IgaXMgJSN4IGZvciBhZGRyICUjbHggaW4gdGFzayAlcFxuIiwKKwkJbW11c3IsIGFkZHIsIGN1cnJlbnQpOworCXByaW50ayAoImRlc2NyaXB0b3IgYWRkcmVzcyBpcyAlI2x4LCBjb250ZW50cyAlI2x4XG4iLAorCQlfX3ZhKGRlc2MpLCAqKHVuc2lnbmVkIGxvbmcgKilfX3ZhKGRlc2MpKTsKKyNlbmRpZgorCisJaWYgKG1tdXNyICYgTU1VX0kpCisJCWRvX3BhZ2VfZmF1bHQgKCZmcC0+cHRyZWdzLCBhZGRyLCAwKTsKKwllbHNlIGlmIChtbXVzciAmIChNTVVfQnxNTVVfTHxNTVVfUykpIHsKKwkJcHJpbnRrICgiaW52YWxpZCBpbnNuIGFjY2VzcyBhdCAlI2x4IGZyb20gcGMgJSNseFxuIiwKKwkJCWFkZHIsIGZwLT5wdHJlZ3MucGMpOworI2lmZGVmIERFQlVHCisJCXByaW50aygiVW5rbm93biBTSUdTRUdWIC0gMlxuIik7CisjZW5kaWYKKwkJZGllX2lmX2tlcm5lbCgiT29wcyIsJmZwLT5wdHJlZ3MsbW11c3IpOworCQlmb3JjZV9zaWcoU0lHU0VHViwgY3VycmVudCk7CisJCXJldHVybjsKKwl9CisKK2NyZWF0ZV9hdGNfZW50cnk6CisJLyogc2V0dXAgYW4gQVRDIGVudHJ5IGZvciB0aGUgYWNjZXNzIGFib3V0IHRvIGJlIHJldHJpZWQgKi8KKwlhc20gdm9sYXRpbGUgKCJwbG9hZHIgIzIsJTBAIiA6IC8qIG5vIG91dHB1dHMgKi8KKwkJICAgICAgOiAiYSIgKGFkZHIpKTsKK30KKyNlbmRpZiAvKiBDUFVfTTY4MDIwX09SX002ODAzMCAqLworI2VuZGlmIC8qICFDT05GSUdfU1VOMyAqLworCithc21saW5rYWdlIHZvaWQgYnVzZXJyX2Moc3RydWN0IGZyYW1lICpmcCkKK3sKKwkvKiBPbmx5IHNldCBlc3AwIGlmIGNvbWluZyBmcm9tIHVzZXIgbW9kZSAqLworCWlmICh1c2VyX21vZGUoJmZwLT5wdHJlZ3MpKQorCQljdXJyZW50LT50aHJlYWQuZXNwMCA9ICh1bnNpZ25lZCBsb25nKSBmcDsKKworI2lmZGVmIERFQlVHCisJcHJpbnRrICgiKioqIEJ1cyBFcnJvciAqKiogRm9ybWF0IGlzICV4XG4iLCBmcC0+cHRyZWdzLmZvcm1hdCk7CisjZW5kaWYKKworCXN3aXRjaCAoZnAtPnB0cmVncy5mb3JtYXQpIHsKKyNpZiBkZWZpbmVkIChDT05GSUdfTTY4MDYwKQorCWNhc2UgNDoJCQkJLyogNjgwNjAgYWNjZXNzIGVycm9yICovCisJICBhY2Nlc3NfZXJyb3IwNjAgKGZwKTsKKwkgIGJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZCAoQ09ORklHX002ODA0MCkKKwljYXNlIDB4NzoJCQkvKiA2ODA0MCBhY2Nlc3MgZXJyb3IgKi8KKwkgIGFjY2Vzc19lcnJvcjA0MCAoZnApOworCSAgYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkIChDUFVfTTY4MDIwX09SX002ODAzMCkKKwljYXNlIDB4YToKKwljYXNlIDB4YjoKKwkgIGJ1c19lcnJvcjAzMCAoZnApOworCSAgYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCSAgZGllX2lmX2tlcm5lbCgiYmFkIGZyYW1lIGZvcm1hdCIsJmZwLT5wdHJlZ3MsMCk7CisjaWZkZWYgREVCVUcKKwkgIHByaW50aygiVW5rbm93biBTSUdTRUdWIC0gNFxuIik7CisjZW5kaWYKKwkgIGZvcmNlX3NpZyhTSUdTRUdWLCBjdXJyZW50KTsKKwl9Cit9CisKKworc3RhdGljIGludCBrc3RhY2tfZGVwdGhfdG9fcHJpbnQgPSA0ODsKKwordm9pZCBzaG93X3RyYWNlKHVuc2lnbmVkIGxvbmcgKnN0YWNrKQoreworCXVuc2lnbmVkIGxvbmcgKmVuZHN0YWNrOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlpbnQgaTsKKworCXByaW50aygiQ2FsbCBUcmFjZToiKTsKKwlhZGRyID0gKHVuc2lnbmVkIGxvbmcpc3RhY2sgKyBUSFJFQURfU0laRSAtIDE7CisJZW5kc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKShhZGRyICYgLVRIUkVBRF9TSVpFKTsKKwlpID0gMDsKKwl3aGlsZSAoc3RhY2sgKyAxIDw9IGVuZHN0YWNrKSB7CisJCWFkZHIgPSAqc3RhY2srKzsKKwkJLyoKKwkJICogSWYgdGhlIGFkZHJlc3MgaXMgZWl0aGVyIGluIHRoZSB0ZXh0IHNlZ21lbnQgb2YgdGhlCisJCSAqIGtlcm5lbCwgb3IgaW4gdGhlIHJlZ2lvbiB3aGljaCBjb250YWlucyB2bWFsbG9jJ2VkCisJCSAqIG1lbW9yeSwgaXQgKm1heSogYmUgdGhlIGFkZHJlc3Mgb2YgYSBjYWxsaW5nCisJCSAqIHJvdXRpbmU7IGlmIHNvLCBwcmludCBpdCBzbyB0aGF0IHNvbWVvbmUgdHJhY2luZworCQkgKiBkb3duIHRoZSBjYXVzZSBvZiB0aGUgY3Jhc2ggd2lsbCBiZSBhYmxlIHRvIGZpZ3VyZQorCQkgKiBvdXQgdGhlIGNhbGwgcGF0aCB0aGF0IHdhcyB0YWtlbi4KKwkJICovCisJCWlmIChfX2tlcm5lbF90ZXh0X2FkZHJlc3MoYWRkcikpIHsKKyNpZm5kZWYgQ09ORklHX0tBTExTWU1TCisJCQlpZiAoaSAlIDUgPT0gMCkKKwkJCQlwcmludGsoIlxuICAgICAgICIpOworI2VuZGlmCisJCQlwcmludGsoIiBbPCUwOGx4Pl0iLCBhZGRyKTsKKwkJCXByaW50X3N5bWJvbCgiICVzXG4iLCBhZGRyKTsKKwkJCWkrKzsKKwkJfQorCX0KKwlwcmludGsoIlxuIik7Cit9CisKK3ZvaWQgc2hvd19yZWdpc3RlcnMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGZyYW1lICpmcCA9IChzdHJ1Y3QgZnJhbWUgKilyZWdzOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlpbnQgaTsKKworCWFkZHIgPSAodW5zaWduZWQgbG9uZykmZnAtPnVuOworCXByaW50aygiRnJhbWUgZm9ybWF0PSVYICIsIGZwLT5wdHJlZ3MuZm9ybWF0KTsKKwlzd2l0Y2ggKGZwLT5wdHJlZ3MuZm9ybWF0KSB7CisJY2FzZSAweDI6CisJICAgIHByaW50aygiaW5zdHIgYWRkcj0lMDhseFxuIiwgZnAtPnVuLmZtdDIuaWFkZHIpOworCSAgICBhZGRyICs9IHNpemVvZihmcC0+dW4uZm10Mik7CisJICAgIGJyZWFrOworCWNhc2UgMHgzOgorCSAgICBwcmludGsoImVmZiBhZGRyPSUwOGx4XG4iLCBmcC0+dW4uZm10My5lZmZhZGRyKTsKKwkgICAgYWRkciArPSBzaXplb2YoZnAtPnVuLmZtdDMpOworCSAgICBicmVhazsKKwljYXNlIDB4NDoKKwkgICAgcHJpbnRrKChDUFVfSVNfMDYwID8gImZhdWx0IGFkZHI9JTA4bHggZnNsdz0lMDhseFxuIgorCQkgICAgOiAiZWZmIGFkZHI9JTA4bHggcGM9JTA4bHhcbiIpLAorCQkgICBmcC0+dW4uZm10NC5lZmZhZGRyLCBmcC0+dW4uZm10NC5wYyk7CisJICAgIGFkZHIgKz0gc2l6ZW9mKGZwLT51bi5mbXQ0KTsKKwkgICAgYnJlYWs7CisJY2FzZSAweDc6CisJICAgIHByaW50aygiZWZmIGFkZHI9JTA4bHggc3N3PSUwNHggZmFkZHI9JTA4bHhcbiIsCisJCSAgIGZwLT51bi5mbXQ3LmVmZmFkZHIsIGZwLT51bi5mbXQ3LnNzdywgZnAtPnVuLmZtdDcuZmFkZHIpOworCSAgICBwcmludGsoIndiIDEgc3RhdC9hZGRyL2RhdGE6ICUwNHggJTA4bHggJTA4bHhcbiIsCisJCSAgIGZwLT51bi5mbXQ3LndiMXMsIGZwLT51bi5mbXQ3LndiMWEsIGZwLT51bi5mbXQ3LndiMWRwZDApOworCSAgICBwcmludGsoIndiIDIgc3RhdC9hZGRyL2RhdGE6ICUwNHggJTA4bHggJTA4bHhcbiIsCisJCSAgIGZwLT51bi5mbXQ3LndiMnMsIGZwLT51bi5mbXQ3LndiMmEsIGZwLT51bi5mbXQ3LndiMmQpOworCSAgICBwcmludGsoIndiIDMgc3RhdC9hZGRyL2RhdGE6ICUwNHggJTA4bHggJTA4bHhcbiIsCisJCSAgIGZwLT51bi5mbXQ3LndiM3MsIGZwLT51bi5mbXQ3LndiM2EsIGZwLT51bi5mbXQ3LndiM2QpOworCSAgICBwcmludGsoInB1c2ggZGF0YTogJTA4bHggJTA4bHggJTA4bHggJTA4bHhcbiIsCisJCSAgIGZwLT51bi5mbXQ3LndiMWRwZDAsIGZwLT51bi5mbXQ3LnBkMSwgZnAtPnVuLmZtdDcucGQyLAorCQkgICBmcC0+dW4uZm10Ny5wZDMpOworCSAgICBhZGRyICs9IHNpemVvZihmcC0+dW4uZm10Nyk7CisJICAgIGJyZWFrOworCWNhc2UgMHg5OgorCSAgICBwcmludGsoImluc3RyIGFkZHI9JTA4bHhcbiIsIGZwLT51bi5mbXQ5LmlhZGRyKTsKKwkgICAgYWRkciArPSBzaXplb2YoZnAtPnVuLmZtdDkpOworCSAgICBicmVhazsKKwljYXNlIDB4YToKKwkgICAgcHJpbnRrKCJzc3c9JTA0eCBpc2M9JTA0eCBpc2I9JTA0eCBkYWRkcj0lMDhseCBkb2J1Zj0lMDhseFxuIiwKKwkJICAgZnAtPnVuLmZtdGEuc3N3LCBmcC0+dW4uZm10YS5pc2MsIGZwLT51bi5mbXRhLmlzYiwKKwkJICAgZnAtPnVuLmZtdGEuZGFkZHIsIGZwLT51bi5mbXRhLmRvYnVmKTsKKwkgICAgYWRkciArPSBzaXplb2YoZnAtPnVuLmZtdGEpOworCSAgICBicmVhazsKKwljYXNlIDB4YjoKKwkgICAgcHJpbnRrKCJzc3c9JTA0eCBpc2M9JTA0eCBpc2I9JTA0eCBkYWRkcj0lMDhseCBkb2J1Zj0lMDhseFxuIiwKKwkJICAgZnAtPnVuLmZtdGIuc3N3LCBmcC0+dW4uZm10Yi5pc2MsIGZwLT51bi5mbXRiLmlzYiwKKwkJICAgZnAtPnVuLmZtdGIuZGFkZHIsIGZwLT51bi5mbXRiLmRvYnVmKTsKKwkgICAgcHJpbnRrKCJiYWRkcj0lMDhseCBkaWJ1Zj0lMDhseCB2ZXI9JXhcbiIsCisJCSAgIGZwLT51bi5mbXRiLmJhZGRyLCBmcC0+dW4uZm10Yi5kaWJ1ZiwgZnAtPnVuLmZtdGIudmVyKTsKKwkgICAgYWRkciArPSBzaXplb2YoZnAtPnVuLmZtdGIpOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBwcmludGsoIlxuIik7CisJfQorCXNob3dfc3RhY2soTlVMTCwgKHVuc2lnbmVkIGxvbmcgKilhZGRyKTsKKworCXByaW50aygiQ29kZTogIik7CisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJCXByaW50aygiJTA0eCAiLCAweGZmZmYgJiAoKHNob3J0ICopIGZwLT5wdHJlZ3MucGMpW2ldKTsKKwlwcmludGsgKCJcbiIpOworfQorCit2b2lkIHNob3dfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nICpzdGFjaykKK3sKKwl1bnNpZ25lZCBsb25nICplbmRzdGFjazsKKwlpbnQgaTsKKworCWlmICghc3RhY2spIHsKKwkJaWYgKHRhc2spCisJCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nICopdGFzay0+dGhyZWFkLmVzcDA7CisJCWVsc2UKKwkJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKikmc3RhY2s7CisJfQorCWVuZHN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKikoKCh1bnNpZ25lZCBsb25nKXN0YWNrICsgVEhSRUFEX1NJWkUgLSAxKSAmIC1USFJFQURfU0laRSk7CisKKwlwcmludGsoIlN0YWNrIGZyb20gJTA4bHg6IiwgKHVuc2lnbmVkIGxvbmcpc3RhY2spOworCWZvciAoaSA9IDA7IGkgPCBrc3RhY2tfZGVwdGhfdG9fcHJpbnQ7IGkrKykgeworCQlpZiAoc3RhY2sgKyAxID4gZW5kc3RhY2spCisJCQlicmVhazsKKwkJaWYgKGkgJSA4ID09IDApCisJCQlwcmludGsoIlxuICAgICAgICIpOworCQlwcmludGsoIiAlMDhseCIsICpzdGFjaysrKTsKKwl9CisJcHJpbnRrKCJcbiIpOworCXNob3dfdHJhY2Uoc3RhY2spOworfQorCisvKgorICogVGhlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBiYWNrdHJhY2UgZ2VuZXJhdG9yCisgKi8KK3ZvaWQgZHVtcF9zdGFjayh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc3RhY2s7CisKKwlzaG93X3RyYWNlKCZzdGFjayk7Cit9CisKK0VYUE9SVF9TWU1CT0woZHVtcF9zdGFjayk7CisKK3ZvaWQgYmFkX3N1cGVyX3RyYXAgKHN0cnVjdCBmcmFtZSAqZnApCit7CisJY29uc29sZV92ZXJib3NlKCk7CisJaWYgKGZwLT5wdHJlZ3MudmVjdG9yIDwgNCpzaXplb2YodmVjX25hbWVzKS9zaXplb2YodmVjX25hbWVzWzBdKSkKKwkJcHJpbnRrICgiKioqICVzICoqKiAgIEZPUk1BVD0lWFxuIiwKKwkJCXZlY19uYW1lc1soZnAtPnB0cmVncy52ZWN0b3IpID4+IDJdLAorCQkJZnAtPnB0cmVncy5mb3JtYXQpOworCWVsc2UKKwkJcHJpbnRrICgiKioqIEV4Y2VwdGlvbiAlZCAqKiogICBGT1JNQVQ9JVhcbiIsCisJCQkoZnAtPnB0cmVncy52ZWN0b3IpID4+IDIsCisJCQlmcC0+cHRyZWdzLmZvcm1hdCk7CisJaWYgKGZwLT5wdHJlZ3MudmVjdG9yID4+IDIgPT0gVkVDX0FERFJFUlIgJiYgQ1BVX0lTXzAyMF9PUl8wMzApIHsKKwkJdW5zaWduZWQgc2hvcnQgc3N3ID0gZnAtPnVuLmZtdGIuc3N3OworCisJCXByaW50ayAoIlNTVz0lIzA2eCAgIiwgc3N3KTsKKworCQlpZiAoc3N3ICYgUkMpCisJCQlwcmludGsgKCJQaXBlIHN0YWdlIEMgaW5zdHJ1Y3Rpb24gZmF1bHQgYXQgJSMwMTBseFxuIiwKKwkJCQkoZnAtPnB0cmVncy5mb3JtYXQpID09IDB4QSA/CisJCQkJZnAtPnB0cmVncy5wYyArIDIgOiBmcC0+dW4uZm10Yi5iYWRkciAtIDIpOworCQlpZiAoc3N3ICYgUkIpCisJCQlwcmludGsgKCJQaXBlIHN0YWdlIEIgaW5zdHJ1Y3Rpb24gZmF1bHQgYXQgJSMwMTBseFxuIiwKKwkJCQkoZnAtPnB0cmVncy5mb3JtYXQpID09IDB4QSA/CisJCQkJZnAtPnB0cmVncy5wYyArIDQgOiBmcC0+dW4uZm10Yi5iYWRkcik7CisJCWlmIChzc3cgJiBERikKKwkJCXByaW50ayAoIkRhdGEgJXMgZmF1bHQgYXQgJSMwMTBseCBpbiAlcyAocGM9JSNseClcbiIsCisJCQkJc3N3ICYgUlcgPyAicmVhZCIgOiAid3JpdGUiLAorCQkJCWZwLT51bi5mbXRiLmRhZGRyLCBzcGFjZV9uYW1lc1tzc3cgJiBERkNdLAorCQkJCWZwLT5wdHJlZ3MucGMpOworCX0KKwlwcmludGsgKCJDdXJyZW50IHByb2Nlc3MgaWQgaXMgJWRcbiIsIGN1cnJlbnQtPnBpZCk7CisJZGllX2lmX2tlcm5lbCgiQkFEIEtFUk5FTCBUUkFQIiwgJmZwLT5wdHJlZ3MsIDApOworfQorCithc21saW5rYWdlIHZvaWQgdHJhcF9jKHN0cnVjdCBmcmFtZSAqZnApCit7CisJaW50IHNpZzsKKwlzaWdpbmZvX3QgaW5mbzsKKworCWlmIChmcC0+cHRyZWdzLnNyICYgUFNfUykgeworCQlpZiAoKGZwLT5wdHJlZ3MudmVjdG9yID4+IDIpID09IFZFQ19UUkFDRSkgeworCQkJLyogdHJhY2VkIGEgdHJhcHBpbmcgaW5zdHJ1Y3Rpb24gKi8KKwkJCWN1cnJlbnQtPnB0cmFjZSB8PSBQVF9EVFJBQ0U7CisJCX0gZWxzZQorCQkJYmFkX3N1cGVyX3RyYXAoZnApOworCQlyZXR1cm47CisJfQorCisJLyogc2VuZCB0aGUgYXBwcm9wcmlhdGUgc2lnbmFsIHRvIHRoZSB1c2VyIHByb2dyYW0gKi8KKwlzd2l0Y2ggKChmcC0+cHRyZWdzLnZlY3RvcikgPj4gMikgeworCSAgICBjYXNlIFZFQ19BRERSRVJSOgorCQlpbmZvLnNpX2NvZGUgPSBCVVNfQURSQUxOOworCQlzaWcgPSBTSUdCVVM7CisJCWJyZWFrOworCSAgICBjYXNlIFZFQ19JTExFR0FMOgorCSAgICBjYXNlIFZFQ19MSU5FMTA6CisJICAgIGNhc2UgVkVDX0xJTkUxMToKKwkJaW5mby5zaV9jb2RlID0gSUxMX0lMTE9QQzsKKwkJc2lnID0gU0lHSUxMOworCQlicmVhazsKKwkgICAgY2FzZSBWRUNfUFJJVjoKKwkJaW5mby5zaV9jb2RlID0gSUxMX1BSVk9QQzsKKwkJc2lnID0gU0lHSUxMOworCQlicmVhazsKKwkgICAgY2FzZSBWRUNfQ09QUk9DOgorCQlpbmZvLnNpX2NvZGUgPSBJTExfQ09QUk9DOworCQlzaWcgPSBTSUdJTEw7CisJCWJyZWFrOworCSAgICBjYXNlIFZFQ19UUkFQMToKKwkgICAgY2FzZSBWRUNfVFJBUDI6CisJICAgIGNhc2UgVkVDX1RSQVAzOgorCSAgICBjYXNlIFZFQ19UUkFQNDoKKwkgICAgY2FzZSBWRUNfVFJBUDU6CisJICAgIGNhc2UgVkVDX1RSQVA2OgorCSAgICBjYXNlIFZFQ19UUkFQNzoKKwkgICAgY2FzZSBWRUNfVFJBUDg6CisJICAgIGNhc2UgVkVDX1RSQVA5OgorCSAgICBjYXNlIFZFQ19UUkFQMTA6CisJICAgIGNhc2UgVkVDX1RSQVAxMToKKwkgICAgY2FzZSBWRUNfVFJBUDEyOgorCSAgICBjYXNlIFZFQ19UUkFQMTM6CisJICAgIGNhc2UgVkVDX1RSQVAxNDoKKwkJaW5mby5zaV9jb2RlID0gSUxMX0lMTFRSUDsKKwkJc2lnID0gU0lHSUxMOworCQlicmVhazsKKwkgICAgY2FzZSBWRUNfRlBCUlVDOgorCSAgICBjYXNlIFZFQ19GUE9FOgorCSAgICBjYXNlIFZFQ19GUE5BTjoKKwkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVElOVjsKKwkJc2lnID0gU0lHRlBFOworCQlicmVhazsKKwkgICAgY2FzZSBWRUNfRlBJUjoKKwkJaW5mby5zaV9jb2RlID0gRlBFX0ZMVFJFUzsKKwkJc2lnID0gU0lHRlBFOworCQlicmVhazsKKwkgICAgY2FzZSBWRUNfRlBESVZaOgorCQlpbmZvLnNpX2NvZGUgPSBGUEVfRkxURElWOworCQlzaWcgPSBTSUdGUEU7CisJCWJyZWFrOworCSAgICBjYXNlIFZFQ19GUFVOREVSOgorCQlpbmZvLnNpX2NvZGUgPSBGUEVfRkxUVU5EOworCQlzaWcgPSBTSUdGUEU7CisJCWJyZWFrOworCSAgICBjYXNlIFZFQ19GUE9WRVI6CisJCWluZm8uc2lfY29kZSA9IEZQRV9GTFRPVkY7CisJCXNpZyA9IFNJR0ZQRTsKKwkJYnJlYWs7CisJICAgIGNhc2UgVkVDX1pFUk9ESVY6CisJCWluZm8uc2lfY29kZSA9IEZQRV9JTlRESVY7CisJCXNpZyA9IFNJR0ZQRTsKKwkJYnJlYWs7CisJICAgIGNhc2UgVkVDX0NISzoKKwkgICAgY2FzZSBWRUNfVFJBUDoKKwkJaW5mby5zaV9jb2RlID0gRlBFX0lOVE9WRjsKKwkJc2lnID0gU0lHRlBFOworCQlicmVhazsKKwkgICAgY2FzZSBWRUNfVFJBQ0U6CQkvKiBwdHJhY2Ugc2luZ2xlIHN0ZXAgKi8KKwkJaW5mby5zaV9jb2RlID0gVFJBUF9UUkFDRTsKKwkJc2lnID0gU0lHVFJBUDsKKwkJYnJlYWs7CisJICAgIGNhc2UgVkVDX1RSQVAxNToJCS8qIGJyZWFrcG9pbnQgKi8KKwkJaW5mby5zaV9jb2RlID0gVFJBUF9CUktQVDsKKwkJc2lnID0gU0lHVFJBUDsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCWluZm8uc2lfY29kZSA9IElMTF9JTExPUEM7CisJCXNpZyA9IFNJR0lMTDsKKwkJYnJlYWs7CisJfQorCWluZm8uc2lfc2lnbm8gPSBzaWc7CisJaW5mby5zaV9lcnJubyA9IDA7CisJc3dpdGNoIChmcC0+cHRyZWdzLmZvcm1hdCkgeworCSAgICBkZWZhdWx0OgorCQlpbmZvLnNpX2FkZHIgPSAodm9pZCAqKSBmcC0+cHRyZWdzLnBjOworCQlicmVhazsKKwkgICAgY2FzZSAyOgorCQlpbmZvLnNpX2FkZHIgPSAodm9pZCAqKSBmcC0+dW4uZm10Mi5pYWRkcjsKKwkJYnJlYWs7CisJICAgIGNhc2UgNzoKKwkJaW5mby5zaV9hZGRyID0gKHZvaWQgKikgZnAtPnVuLmZtdDcuZWZmYWRkcjsKKwkJYnJlYWs7CisJICAgIGNhc2UgOToKKwkJaW5mby5zaV9hZGRyID0gKHZvaWQgKikgZnAtPnVuLmZtdDkuaWFkZHI7CisJCWJyZWFrOworCSAgICBjYXNlIDEwOgorCQlpbmZvLnNpX2FkZHIgPSAodm9pZCAqKSBmcC0+dW4uZm10YS5kYWRkcjsKKwkJYnJlYWs7CisJICAgIGNhc2UgMTE6CisJCWluZm8uc2lfYWRkciA9ICh2b2lkICopIGZwLT51bi5mbXRiLmRhZGRyOworCQlicmVhazsKKwl9CisJZm9yY2Vfc2lnX2luZm8gKHNpZywgJmluZm8sIGN1cnJlbnQpOworfQorCit2b2lkIGRpZV9pZl9rZXJuZWwgKGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKmZwLCBpbnQgbnIpCit7CisJaWYgKCEoZnAtPnNyICYgUFNfUykpCisJCXJldHVybjsKKworCWNvbnNvbGVfdmVyYm9zZSgpOworCXByaW50aygiJXM6ICUwOHhcbiIsc3RyLG5yKTsKKwlwcmludF9tb2R1bGVzKCk7CisJcHJpbnRrKCJQQzogWzwlMDhseD5dIixmcC0+cGMpOworCXByaW50X3N5bWJvbCgiICVzXG4iLCBmcC0+cGMpOworCXByaW50aygiXG5TUjogJTA0eCAgU1A6ICVwICBhMjogJTA4bHhcbiIsCisJICAgICAgIGZwLT5zciwgZnAsIGZwLT5hMik7CisJcHJpbnRrKCJkMDogJTA4bHggICAgZDE6ICUwOGx4ICAgIGQyOiAlMDhseCAgICBkMzogJTA4bHhcbiIsCisJICAgICAgIGZwLT5kMCwgZnAtPmQxLCBmcC0+ZDIsIGZwLT5kMyk7CisJcHJpbnRrKCJkNDogJTA4bHggICAgZDU6ICUwOGx4ICAgIGEwOiAlMDhseCAgICBhMTogJTA4bHhcbiIsCisJICAgICAgIGZwLT5kNCwgZnAtPmQ1LCBmcC0+YTAsIGZwLT5hMSk7CisKKwlwcmludGsoIlByb2Nlc3MgJXMgKHBpZDogJWQsIHN0YWNrcGFnZT0lMDhseClcbiIsCisJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgUEFHRV9TSVpFKyh1bnNpZ25lZCBsb25nKWN1cnJlbnQpOworCXNob3dfc3RhY2soTlVMTCwgKHVuc2lnbmVkIGxvbmcgKilmcCk7CisJZG9fZXhpdChTSUdTRUdWKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGlmIGFuIGVycm9yIG9jY3VyIHdoaWxlIGFjY2Vzc2luZworICogdXNlci1zcGFjZSBmcm9tIHRoZSBmcHNwMDQwIGNvZGUuCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCBmcHNwMDQwX2RpZSh2b2lkKQoreworCWRvX2V4aXQoU0lHU0VHVik7Cit9CisKKyNpZmRlZiBDT05GSUdfTTY4S0ZQVV9FTVUKK2FzbWxpbmthZ2Ugdm9pZCBmcGVtdV9zaWduYWwoaW50IHNpZ25hbCwgaW50IGNvZGUsIHZvaWQgKmFkZHIpCit7CisJc2lnaW5mb190IGluZm87CisKKwlpbmZvLnNpX3NpZ25vID0gc2lnbmFsOworCWluZm8uc2lfZXJybm8gPSAwOworCWluZm8uc2lfY29kZSA9IGNvZGU7CisJaW5mby5zaV9hZGRyID0gYWRkcjsKKwlmb3JjZV9zaWdfaW5mbyhzaWduYWwsICZpbmZvLCBjdXJyZW50KTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN0ZC5sZHMgYi9hcmNoL202OGsva2VybmVsL3ZtbGludXgtc3RkLmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTg2NTRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN0ZC5sZHMKQEAgLTAsMCArMSw5NSBAQAorLyogbGQgc2NyaXB0IHRvIG1ha2UgbTY4ayBMaW51eCBrZXJuZWwgKi8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CisKK09VVFBVVF9GT1JNQVQoImVsZjMyLW02OGsiLCAiZWxmMzItbTY4ayIsICJlbGYzMi1tNjhrIikKK09VVFBVVF9BUkNIKG02OGspCitFTlRSWShfc3RhcnQpCitqaWZmaWVzID0gamlmZmllc182NCArIDQ7CitTRUNUSU9OUworeworICAuID0gMHgxMDAwOworICBfdGV4dCA9IC47CQkJLyogVGV4dCBhbmQgcmVhZC1vbmx5IGRhdGEgKi8KKyAgLnRleHQgOiB7CisJKigudGV4dCkKKwlTQ0hFRF9URVhUCisJKiguZml4dXApCisJKiguZ251Lndhcm5pbmcpCisJfSA6dGV4dCA9IDB4NGU3NQorCisgIC4gPSBBTElHTigxNik7CQkvKiBFeGNlcHRpb24gdGFibGUgKi8KKyAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKKyAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CisgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKKworICBST0RBVEEKKworICBfZXRleHQgPSAuOwkJCS8qIEVuZCBvZiB0ZXh0IHNlY3Rpb24gKi8KKworICAuZGF0YSA6IHsJCQkvKiBEYXRhICovCisJKiguZGF0YSkKKwlDT05TVFJVQ1RPUlMKKwl9CisKKyAgLmJzcyA6IHsgKiguYnNzKSB9CQkvKiBCU1MgKi8KKworICAuID0gQUxJR04oMTYpOworICAuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCA6IHsgKiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkgfSA6ZGF0YQorCisgIF9lZGF0YSA9IC47CQkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLworCisgIC8qIHdpbGwgYmUgZnJlZWQgYWZ0ZXIgaW5pdCAqLworICAuID0gQUxJR04oNDA5Nik7CQkvKiBJbml0IGNvZGUgYW5kIGRhdGEgKi8KKyAgX19pbml0X2JlZ2luID0gLjsKKyAgLmluaXQudGV4dCA6IHsKKwlfc2luaXR0ZXh0ID0gLjsKKwkqKC5pbml0LnRleHQpCisJX2Vpbml0dGV4dCA9IC47CisgIH0KKyAgLmluaXQuZGF0YSA6IHsgKiguaW5pdC5kYXRhKSB9CisgIC4gPSBBTElHTigxNik7CisgIF9fc2V0dXBfc3RhcnQgPSAuOworICAuaW5pdC5zZXR1cCA6IHsgKiguaW5pdC5zZXR1cCkgfQorICBfX3NldHVwX2VuZCA9IC47CisgIF9faW5pdGNhbGxfc3RhcnQgPSAuOworICAuaW5pdGNhbGwuaW5pdCA6IHsKKwkqKC5pbml0Y2FsbDEuaW5pdCkKKwkqKC5pbml0Y2FsbDIuaW5pdCkKKwkqKC5pbml0Y2FsbDMuaW5pdCkKKwkqKC5pbml0Y2FsbDQuaW5pdCkKKwkqKC5pbml0Y2FsbDUuaW5pdCkKKwkqKC5pbml0Y2FsbDYuaW5pdCkKKwkqKC5pbml0Y2FsbDcuaW5pdCkKKyAgfQorICBfX2luaXRjYWxsX2VuZCA9IC47CisgIF9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKKyAgLmNvbl9pbml0Y2FsbC5pbml0IDogeyAqKC5jb25faW5pdGNhbGwuaW5pdCkgfQorICBfX2Nvbl9pbml0Y2FsbF9lbmQgPSAuOworICBTRUNVUklUWV9JTklUCisgIC4gPSBBTElHTig4MTkyKTsKKyAgX19pbml0cmFtZnNfc3RhcnQgPSAuOworICAuaW5pdC5yYW1mcyA6IHsgKiguaW5pdC5yYW1mcykgfQorICBfX2luaXRyYW1mc19lbmQgPSAuOworICAuID0gQUxJR04oODE5Mik7CisgIF9faW5pdF9lbmQgPSAuOworCisgIC5kYXRhLmluaXRfdGFzayA6IHsgKiguZGF0YS5pbml0X3Rhc2spIH0JLyogVGhlIGluaXRpYWwgdGFzayBhbmQga2VybmVsIHN0YWNrICovCisKKyAgX2VuZCA9IC4gOworCisgIC8qIFNlY3Rpb25zIHRvIGJlIGRpc2NhcmRlZCAqLworICAvRElTQ0FSRC8gOiB7CisJKiguZXhpdC50ZXh0KQorCSooLmV4aXQuZGF0YSkKKwkqKC5leGl0Y2FsbC5leGl0KQorCX0KKworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFic3RyIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAwIDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAwIDogeyAqKC5zdGFiLmV4Y2xzdHIpIH0KKyAgLnN0YWIuaW5kZXggMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50IDAgOiB7ICooLmNvbW1lbnQpIH0KK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdW4zLmxkcyBiL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC1zdW4zLmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzM3ZThkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4LXN1bjMubGRzCkBAIC0wLDAgKzEsOTUgQEAKKy8qIGxkIHNjcmlwdCB0byBtYWtlIG02OGsgTGludXgga2VybmVsICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgorCitPVVRQVVRfRk9STUFUKCJlbGYzMi1tNjhrIiwgImVsZjMyLW02OGsiLCAiZWxmMzItbTY4ayIpCitPVVRQVVRfQVJDSChtNjhrKQorRU5UUlkoX3N0YXJ0KQoramlmZmllcyA9IGppZmZpZXNfNjQgKyA0OworU0VDVElPTlMKK3sKKyAgLiA9IDB4RTAwNDAwMDsKKyAgX3RleHQgPSAuOwkJCS8qIFRleHQgYW5kIHJlYWQtb25seSBkYXRhICovCisgIC50ZXh0IDogeworCSooLmhlYWQpCisJKigudGV4dCkKKwlTQ0hFRF9URVhUCisJKiguZml4dXApCisJKiguZ251Lndhcm5pbmcpCisJfSA6dGV4dCA9IDB4NGU3NQorCVJPREFUQQorCisgIF9ldGV4dCA9IC47CQkJLyogRW5kIG9mIHRleHQgc2VjdGlvbiAqLworCisgIC5kYXRhIDogewkJCS8qIERhdGEgKi8KKwkqKC5kYXRhKQorCUNPTlNUUlVDVE9SUworCS4gPSBBTElHTigxNik7CQkvKiBFeGNlcHRpb24gdGFibGUgKi8KKwlfX3N0YXJ0X19fZXhfdGFibGUgPSAuOworCSooX19leF90YWJsZSkKKwlfX3N0b3BfX19leF90YWJsZSA9IC47CisJfSA6ZGF0YQorICAvKiBFbmQgb2YgZGF0YSBnb2VzICpoZXJlKiBzbyB0aGF0IGZyZWVpbmcgaW5pdCBjb2RlIHdvcmtzIHByb3Blcmx5LiAqLworICBfZWRhdGEgPSAuOworCisgIC8qIHdpbGwgYmUgZnJlZWQgYWZ0ZXIgaW5pdCAqLworICAuID0gQUxJR04oODE5Mik7CS8qIEluaXQgY29kZSBhbmQgZGF0YSAqLworX19pbml0X2JlZ2luID0gLjsKKwkuaW5pdC50ZXh0IDogeworCQlfc2luaXR0ZXh0ID0gLjsKKwkJKiguaW5pdC50ZXh0KQorCQlfZWluaXR0ZXh0ID0gLjsKKwl9CisJLmluaXQuZGF0YSA6IHsgKiguaW5pdC5kYXRhKSB9CisJLiA9IEFMSUdOKDE2KTsKKwlfX3NldHVwX3N0YXJ0ID0gLjsKKwkuaW5pdC5zZXR1cCA6IHsgKiguaW5pdC5zZXR1cCkgfQorCV9fc2V0dXBfZW5kID0gLjsKKwlfX2luaXRjYWxsX3N0YXJ0ID0gLjsKKwkuaW5pdGNhbGwuaW5pdCA6IHsKKwkJKiguaW5pdGNhbGwxLmluaXQpCisJCSooLmluaXRjYWxsMi5pbml0KQorCQkqKC5pbml0Y2FsbDMuaW5pdCkKKwkJKiguaW5pdGNhbGw0LmluaXQpCisJCSooLmluaXRjYWxsNS5pbml0KQorCQkqKC5pbml0Y2FsbDYuaW5pdCkKKwkJKiguaW5pdGNhbGw3LmluaXQpCisJfQorCV9faW5pdGNhbGxfZW5kID0gLjsKKwlfX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47CisJLmNvbl9pbml0Y2FsbC5pbml0IDogeyAqKC5jb25faW5pdGNhbGwuaW5pdCkgfQorCV9fY29uX2luaXRjYWxsX2VuZCA9IC47CisJU0VDVVJJVFlfSU5JVAorCS4gPSBBTElHTig4MTkyKTsKKwlfX2luaXRyYW1mc19zdGFydCA9IC47CisJLmluaXQucmFtZnMgOiB7ICooLmluaXQucmFtZnMpIH0KKwlfX2luaXRyYW1mc19lbmQgPSAuOworCS4gPSBBTElHTig4MTkyKTsKKwlfX2luaXRfZW5kID0gLjsKKwkuaW5pdC50YXNrIDogeyAqKGluaXRfdGFzaykgfQorCisKKyAgLmJzcyA6IHsgKiguYnNzKSB9CQkvKiBCU1MgKi8KKworICBfZW5kID0gLiA7CisKKyAgLyogU2VjdGlvbnMgdG8gYmUgZGlzY2FyZGVkICovCisgIC9ESVNDQVJELyA6IHsKKwkqKC5leGl0LnRleHQpCisJKiguZXhpdC5kYXRhKQorCSooLmV4aXRjYWxsLmV4aXQpCisJfQorCisgIC5jcmFwIDogeworCS8qIFN0YWJzIGRlYnVnZ2luZyBzZWN0aW9ucy4gICovCisJKiguc3RhYikKKwkqKC5zdGFic3RyKQorCSooLnN0YWIuZXhjbCkKKwkqKC5zdGFiLmV4Y2xzdHIpCisJKiguc3RhYi5pbmRleCkKKwkqKC5zdGFiLmluZGV4c3RyKQorCSooLmNvbW1lbnQpCisJKigubm90ZSkKKyAgfQorCit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL202OGsva2VybmVsL3ZtbGludXgubGRzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk3YjkyNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMCwwICsxLDExIEBACisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CitQSERSUworeworICB0ZXh0IFBUX0xPQUQgRklMRUhEUiBQSERSUyBGTEFHUyAoNyk7CisgIGRhdGEgUFRfTE9BRCBGTEFHUyAoNyk7Cit9CisjaWZkZWYgQ09ORklHX1NVTjMKKyNpbmNsdWRlICJ2bWxpbnV4LXN1bjMubGRzIgorI2Vsc2UKKyNpbmNsdWRlICJ2bWxpbnV4LXN0ZC5sZHMiCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9saWIvTWFrZWZpbGUgYi9hcmNoL202OGsvbGliL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YjZkYmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbGliL01ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAorIworIyBNYWtlZmlsZSBmb3IgbTY4ay1zcGVjaWZpYyBsaWJyYXJ5IGZpbGVzLi4KKyMKKworRVhUUkFfQUZMQUdTIDo9IC10cmFkaXRpb25hbAorCitsaWIteQkJOj0gYXNobGRpMy5vIGFzaHJkaTMubyBsc2hyZGkzLm8gbXVsZGkzLm8gXAorCQkJY2hlY2tzdW0ubyBtZW1jbXAubyBtZW1jcHkubyBtZW1zZXQubyBzZW1hcGhvcmUubwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2xpYi9hc2hsZGkzLmMgYi9hcmNoL202OGsvbGliL2FzaGxkaTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzI5ZjMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2xpYi9hc2hsZGkzLmMKQEAgLTAsMCArMSw2MiBAQAorLyogYXNocmRpMy5jIGV4dHJhY3RlZCBmcm9tIGdjYy0yLjk1LjIvbGliZ2NjMi5jIHdoaWNoIGlzOiAqLworLyogQ29weXJpZ2h0IChDKSAxOTg5LCA5Mi05OCwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIENDLgorCitHTlUgQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHTlUgQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHTlUgQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisjZGVmaW5lIEJJVFNfUEVSX1VOSVQgOAorCit0eXBlZGVmCQkgaW50IFNJdHlwZQlfX2F0dHJpYnV0ZV9fICgobW9kZSAoU0kpKSk7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBVU0l0eXBlCV9fYXR0cmlidXRlX18gKChtb2RlIChTSSkpKTsKK3R5cGVkZWYJCSBpbnQgREl0eXBlCV9fYXR0cmlidXRlX18gKChtb2RlIChESSkpKTsKK3R5cGVkZWYgaW50IHdvcmRfdHlwZSBfX2F0dHJpYnV0ZV9fICgobW9kZSAoX193b3JkX18pKSk7CisKK3N0cnVjdCBESXN0cnVjdCB7U0l0eXBlIGhpZ2gsIGxvdzt9OworCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdCBESXN0cnVjdCBzOworICBESXR5cGUgbGw7Cit9IERJdW5pb247CisKK0RJdHlwZQorX19hc2hsZGkzIChESXR5cGUgdSwgd29yZF90eXBlIGIpCit7CisgIERJdW5pb24gdzsKKyAgd29yZF90eXBlIGJtOworICBESXVuaW9uIHV1OworCisgIGlmIChiID09IDApCisgICAgcmV0dXJuIHU7CisKKyAgdXUubGwgPSB1OworCisgIGJtID0gKHNpemVvZiAoU0l0eXBlKSAqIEJJVFNfUEVSX1VOSVQpIC0gYjsKKyAgaWYgKGJtIDw9IDApCisgICAgeworICAgICAgdy5zLmxvdyA9IDA7CisgICAgICB3LnMuaGlnaCA9IChVU0l0eXBlKXV1LnMubG93IDw8IC1ibTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBVU0l0eXBlIGNhcnJpZXMgPSAoVVNJdHlwZSl1dS5zLmxvdyA+PiBibTsKKyAgICAgIHcucy5sb3cgPSAoVVNJdHlwZSl1dS5zLmxvdyA8PCBiOworICAgICAgdy5zLmhpZ2ggPSAoKFVTSXR5cGUpdXUucy5oaWdoIDw8IGIpIHwgY2FycmllczsKKyAgICB9CisKKyAgcmV0dXJuIHcubGw7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbGliL2FzaHJkaTMuYyBiL2FyY2gvbTY4ay9saWIvYXNocmRpMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZWE1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbGliL2FzaHJkaTMuYwpAQCAtMCwwICsxLDYzIEBACisvKiBhc2hyZGkzLmMgZXh0cmFjdGVkIGZyb20gZ2NjLTIuNy4yL2xpYmdjYzIuYyB3aGljaCBpczogKi8KKy8qIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIENDLgorCitHTlUgQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHTlUgQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHTlUgQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisjZGVmaW5lIEJJVFNfUEVSX1VOSVQgOAorCit0eXBlZGVmCQkgaW50IFNJdHlwZQlfX2F0dHJpYnV0ZV9fICgobW9kZSAoU0kpKSk7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBVU0l0eXBlCV9fYXR0cmlidXRlX18gKChtb2RlIChTSSkpKTsKK3R5cGVkZWYJCSBpbnQgREl0eXBlCV9fYXR0cmlidXRlX18gKChtb2RlIChESSkpKTsKK3R5cGVkZWYgaW50IHdvcmRfdHlwZSBfX2F0dHJpYnV0ZV9fICgobW9kZSAoX193b3JkX18pKSk7CisKK3N0cnVjdCBESXN0cnVjdCB7U0l0eXBlIGhpZ2gsIGxvdzt9OworCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdCBESXN0cnVjdCBzOworICBESXR5cGUgbGw7Cit9IERJdW5pb247CisKK0RJdHlwZQorX19hc2hyZGkzIChESXR5cGUgdSwgd29yZF90eXBlIGIpCit7CisgIERJdW5pb24gdzsKKyAgd29yZF90eXBlIGJtOworICBESXVuaW9uIHV1OworCisgIGlmIChiID09IDApCisgICAgcmV0dXJuIHU7CisKKyAgdXUubGwgPSB1OworCisgIGJtID0gKHNpemVvZiAoU0l0eXBlKSAqIEJJVFNfUEVSX1VOSVQpIC0gYjsKKyAgaWYgKGJtIDw9IDApCisgICAgeworICAgICAgLyogdy5zLmhpZ2ggPSAxLi4xIG9yIDAuLjAgKi8KKyAgICAgIHcucy5oaWdoID0gdXUucy5oaWdoID4+IChzaXplb2YgKFNJdHlwZSkgKiBCSVRTX1BFUl9VTklUIC0gMSk7CisgICAgICB3LnMubG93ID0gdXUucy5oaWdoID4+IC1ibTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBVU0l0eXBlIGNhcnJpZXMgPSAoVVNJdHlwZSl1dS5zLmhpZ2ggPDwgYm07CisgICAgICB3LnMuaGlnaCA9IHV1LnMuaGlnaCA+PiBiOworICAgICAgdy5zLmxvdyA9ICgoVVNJdHlwZSl1dS5zLmxvdyA+PiBiKSB8IGNhcnJpZXM7CisgICAgfQorCisgIHJldHVybiB3LmxsOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2xpYi9jaGVja3N1bS5jIGIvYXJjaC9tNjhrL2xpYi9jaGVja3N1bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNWM1NDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbGliL2NoZWNrc3VtLmMKQEAgLTAsMCArMSw0MjIgQEAKKy8qCisgKiBJTkVUCQlBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVgKKyAqCQlvcGVyYXRpbmcgc3lzdGVtLiAgSU5FVCBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgIEJTRCBTb2NrZXQKKyAqCQlpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqCisgKgkJSVAvVENQL1VEUCBjaGVja3N1bW1pbmcgcm91dGluZXMKKyAqCisgKiBBdXRob3JzOglKb3JnZSBDd2lrLCA8am9yZ2VAbGFzZXIuc2F0bGluay5uZXQ+CisgKgkJQXJudCBHdWxicmFuZHNlbiwgPGFndWxicmFAbnZnLnVuaXQubm8+CisgKgkJVG9tIE1heSwgPGZ0b21AbmV0Y29tLmNvbT4KKyAqCQlBbmRyZWFzIFNjaHdhYiwgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KKyAqCQlMb3RzIG9mIGNvZGUgbW92ZWQgZnJvbSB0Y3AuYyBhbmQgaXAuYzsgc2VlIHRob3NlIGZpbGVzCisgKgkJZm9yIG1vcmUgbmFtZXMuCisgKgorICogMDMvMDIvOTYJSmVzIFNvcmVuc2VuLCBBbmRyZWFzIFNjaHdhYiwgUm9tYW4gSG9kZWs6CisgKgkJRml4ZWQgc29tZSBuYXN0eSBidWdzLCBjYXVzaW5nIHNvbWUgaG9ycmlibGUgY3Jhc2hlcy4KKyAqCQlBOiBBdCBzb21lIHBvaW50cywgdGhlIHN1bSAoJTApIHdhcyB1c2VkIGFzCisgKgkJbGVuZ3RoLWNvdW50ZXIgaW5zdGVhZCBvZiB0aGUgbGVuZ3RoIGNvdW50ZXIKKyAqCQkoJTEpLiBUaGFua3MgdG8gUm9tYW4gSG9kZWsgZm9yIHBvaW50aW5nIHRoaXMgb3V0LgorICoJCUI6IEdDQyBzZWVtcyB0byBtZXNzIHVwIGlmIG9uZSB1c2VzIHRvbyBtYW55CisgKgkJZGF0YS1yZWdpc3RlcnMgdG8gaG9sZCBpbnB1dCB2YWx1ZXMgYW5kIG9uZSB0cmllcyB0bworICoJCXNwZWNpZnkgZDAgYW5kIGQxIGFzIHNjcmF0Y2ggcmVnaXN0ZXJzLiBMZXR0aW5nIGdjYworICoJCWNob29zZSB0aGVzZSByZWdpc3RlcnMgaXRzZWxmIHNvbHZlcyB0aGUgcHJvYmxlbS4KKyAqCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAxOTk4LzgvMzEJQW5kcmVhcyBTY2h3YWI6CisgKgkJWmVybyBvdXQgcmVzdCBvZiBidWZmZXIgb24gZXhjZXB0aW9uIGluCisgKgkJY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KKworLyoKKyAqIGNvbXB1dGVzIGEgcGFydGlhbCBjaGVja3N1bSwgZS5nLiBmb3IgVENQL1VEUCBmcmFnbWVudHMKKyAqLworCit1bnNpZ25lZCBpbnQKK2NzdW1fcGFydGlhbCAoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDEsIHRtcDI7CisJICAvKgorCSAgICogRXhwZXJpbWVudHMgd2l0aCBldGhlcm5ldCBhbmQgc2xpcCBjb25uZWN0aW9ucyBzaG93IHRoYXQgYnVmZgorCSAgICogaXMgYWxpZ25lZCBvbiBlaXRoZXIgYSAyLWJ5dGUgb3IgNC1ieXRlIGJvdW5kYXJ5LgorCSAgICovCisJX19hc21fXygibW92ZWwgJTIsJTNcblx0IgorCQkiYnRzdCAjMSwlM1xuXHQiCS8qIENoZWNrIGFsaWdubWVudCAqLworCQkiamVxIDJmXG5cdCIKKwkJInN1YnFsICMyLCUxXG5cdCIJLyogYnVmZiU0PT0yOiB0cmVhdCBmaXJzdCB3b3JkICovCisJCSJqZ3QgMWZcblx0IgorCQkiYWRkcWwgIzIsJTFcblx0IgkvKiBsZW4gd2FzID09IDIsIHRyZWF0IG9ubHkgcmVzdCAqLworCQkianJhIDRmXG4iCisJICAgICAiMTpcdCIKKwkJImFkZHcgJTJAKywlMFxuXHQiCS8qIGFkZCBmaXJzdCB3b3JkIHRvIHN1bSAqLworCQkiY2xybCAlM1xuXHQiCisJCSJhZGR4bCAlMywlMFxuIgkJLyogYWRkIFggYml0ICovCisJICAgICAiMjpcdCIKKwkJLyogdW5yb2xsZWQgbG9vcCBmb3IgdGhlIG1haW4gcGFydDogZG8gOCBsb25ncyBhdCBvbmNlICovCisJCSJtb3ZlbCAlMSwlM1xuXHQiCS8qIHNhdmUgbGVuIGluIHRtcDEgKi8KKwkJImxzcmwgIzUsJTFcblx0IgkvKiBsZW4vMzIgKi8KKwkJImplcSAyZlxuXHQiCQkvKiBub3QgZW5vdWdoLi4uICovCisJCSJzdWJxbCAjMSwlMVxuIgorCSAgICAgIjE6XHQiCisJCSJtb3ZlbCAlMkArLCU0XG5cdCIKKwkJImFkZHhsICU0LCUwXG5cdCIKKwkJIm1vdmVsICUyQCssJTRcblx0IgorCQkiYWRkeGwgJTQsJTBcblx0IgorCQkibW92ZWwgJTJAKywlNFxuXHQiCisJCSJhZGR4bCAlNCwlMFxuXHQiCisJCSJtb3ZlbCAlMkArLCU0XG5cdCIKKwkJImFkZHhsICU0LCUwXG5cdCIKKwkJIm1vdmVsICUyQCssJTRcblx0IgorCQkiYWRkeGwgJTQsJTBcblx0IgorCQkibW92ZWwgJTJAKywlNFxuXHQiCisJCSJhZGR4bCAlNCwlMFxuXHQiCisJCSJtb3ZlbCAlMkArLCU0XG5cdCIKKwkJImFkZHhsICU0LCUwXG5cdCIKKwkJIm1vdmVsICUyQCssJTRcblx0IgorCQkiYWRkeGwgJTQsJTBcblx0IgorCQkiZGJyYSAlMSwxYlxuXHQiCisJCSJjbHJsICU0XG5cdCIKKwkJImFkZHhsICU0LCUwXG5cdCIJLyogYWRkIFggYml0ICovCisJCSJjbHJ3ICUxXG5cdCIKKwkJInN1YnFsICMxLCUxXG5cdCIKKwkJImpjYyAxYlxuIgorCSAgICAgIjI6XHQiCisJCSJtb3ZlbCAlMywlMVxuXHQiCS8qIHJlc3RvcmUgbGVuIGZyb20gdG1wMSAqLworCQkiYW5kdyAjMHgxYywlM1xuXHQiCS8qIG51bWJlciBvZiByZXN0IGxvbmdzICovCisJCSJqZXEgNGZcblx0IgorCQkibHNydyAjMiwlM1xuXHQiCisJCSJzdWJxdyAjMSwlM1xuIgorCSAgICAgIjM6XHQiCisJCS8qIGxvb3AgZm9yIHJlc3QgbG9uZ3MgKi8KKwkJIm1vdmVsICUyQCssJTRcblx0IgorCQkiYWRkeGwgJTQsJTBcblx0IgorCQkiZGJyYSAlMywzYlxuXHQiCisJCSJjbHJsICU0XG5cdCIKKwkJImFkZHhsICU0LCUwXG4iCQkvKiBhZGQgWCBiaXQgKi8KKwkgICAgICI0Olx0IgorCQkvKiBub3cgY2hlY2sgZm9yIHJlc3QgYnl0ZXMgdGhhdCBkbyBub3QgZml0IGludG8gbG9uZ3MgKi8KKwkJImFuZHcgIzMsJTFcblx0IgorCQkiamVxIDdmXG5cdCIKKwkJImNscmwgJTRcblx0IgkJLyogY2xlYXIgdG1wMiBmb3IgcmVzdCBieXRlcyAqLworCQkic3VicXcgIzIsJTFcblx0IgorCQkiamx0IDVmXG5cdCIKKwkJIm1vdmV3ICUyQCssJTRcblx0IgkvKiBoYXZlIHJlc3QgPj0gMjogZ2V0IHdvcmQgKi8KKwkJInN3YXAgJTRcblx0IgkJLyogaW50byBiaXRzIDE2Li4zMSAqLworCQkidHN0dyAlMVxuXHQiCQkvKiBhbm90aGVyIGJ5dGU/ICovCisJCSJqZXEgNmZcbiIKKwkgICAgICI1Olx0IgorCQkibW92ZWIgJTJALCU0XG5cdCIJLyogaGF2ZSBvZGQgcmVzdDogZ2V0IGJ5dGUgKi8KKwkJImxzbHcgIzgsJTRcblx0IgkvKiBpbnRvIGJpdHMgOC4uMTU7IDE2Li4zMSB1bnRvdWNoZWQgKi8KKwkgICAgICI2Olx0IgorCQkiYWRkbCAlNCwlMFxuXHQiCS8qIG5vdyBhZGQgcmVzdCBsb25nIHRvIHN1bSAqLworCQkiY2xybCAlNFxuXHQiCisJCSJhZGR4bCAlNCwlMFxuIgkJLyogYWRkIFggYml0ICovCisJICAgICAiNzpcdCIKKwkJOiAiPWQiIChzdW0pLCAiPWQiIChsZW4pLCAiPWEiIChidWZmKSwKKwkJICAiPSZkIiAodG1wMSksICI9JmQiICh0bXAyKQorCQk6ICIwIiAoc3VtKSwgIjEiIChsZW4pLCAiMiIgKGJ1ZmYpCisJICAgICk7CisJcmV0dXJuKHN1bSk7Cit9CisKK0VYUE9SVF9TWU1CT0woY3N1bV9wYXJ0aWFsKTsKKworCisvKgorICogY29weSBmcm9tIHVzZXIgc3BhY2Ugd2hpbGUgY2hlY2tzdW1taW5nLCB3aXRoIGV4Y2VwdGlvbiBoYW5kbGluZy4KKyAqLworCit1bnNpZ25lZCBpbnQKK2NzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwKKwkJCSAgICBpbnQgbGVuLCBpbnQgc3VtLCBpbnQgKmNzdW1fZXJyKQoreworCS8qCisJICogR0NDIGRvZXNuJ3QgbGlrZSBtb3JlIHRoYW4gMTAgb3BlcmFuZHMgZm9yIHRoZSBhc20KKwkgKiBzdGF0ZW1lbnRzIHNvIHdlIGhhdmUgdG8gdXNlIHRtcDIgZm9yIHRoZSBlcnJvcgorCSAqIGNvZGUuCisJICovCisJdW5zaWduZWQgbG9uZyB0bXAxLCB0bXAyOworCisJX19hc21fXygibW92ZWwgJTIsJTRcblx0IgorCQkiYnRzdCAjMSwlNFxuXHQiCS8qIENoZWNrIGFsaWdubWVudCAqLworCQkiamVxIDJmXG5cdCIKKwkJInN1YnFsICMyLCUxXG5cdCIJLyogYnVmZiU0PT0yOiB0cmVhdCBmaXJzdCB3b3JkICovCisJCSJqZ3QgMWZcblx0IgorCQkiYWRkcWwgIzIsJTFcblx0IgkvKiBsZW4gd2FzID09IDIsIHRyZWF0IG9ubHkgcmVzdCAqLworCQkianJhIDRmXG4iCisJICAgICAiMTpcbiIKKwkgICAgICIxMDpcdCIKKwkJIm1vdmVzdyAlMkArLCU0XG5cdCIJLyogYWRkIGZpcnN0IHdvcmQgdG8gc3VtICovCisJCSJhZGR3ICU0LCUwXG5cdCIKKwkJIm1vdmV3ICU0LCUzQCtcblx0IgorCQkiY2xybCAlNFxuXHQiCisJCSJhZGR4bCAlNCwlMFxuIgkJLyogYWRkIFggYml0ICovCisJICAgICAiMjpcdCIKKwkJLyogdW5yb2xsZWQgbG9vcCBmb3IgdGhlIG1haW4gcGFydDogZG8gOCBsb25ncyBhdCBvbmNlICovCisJCSJtb3ZlbCAlMSwlNFxuXHQiCS8qIHNhdmUgbGVuIGluIHRtcDEgKi8KKwkJImxzcmwgIzUsJTFcblx0IgkvKiBsZW4vMzIgKi8KKwkJImplcSAyZlxuXHQiCQkvKiBub3QgZW5vdWdoLi4uICovCisJCSJzdWJxbCAjMSwlMVxuIgorCSAgICAgIjE6XG4iCisJICAgICAiMTE6XHQiCisJCSJtb3Zlc2wgJTJAKywlNVxuXHQiCisJCSJhZGR4bCAlNSwlMFxuXHQiCisJCSJtb3ZlbCAlNSwlM0ArXG5cdCIKKwkgICAgICIxMjpcdCIKKwkJIm1vdmVzbCAlMkArLCU1XG5cdCIKKwkJImFkZHhsICU1LCUwXG5cdCIKKwkJIm1vdmVsICU1LCUzQCtcblx0IgorCSAgICAgIjEzOlx0IgorCQkibW92ZXNsICUyQCssJTVcblx0IgorCQkiYWRkeGwgJTUsJTBcblx0IgorCQkibW92ZWwgJTUsJTNAK1xuXHQiCisJICAgICAiMTQ6XHQiCisJCSJtb3Zlc2wgJTJAKywlNVxuXHQiCisJCSJhZGR4bCAlNSwlMFxuXHQiCisJCSJtb3ZlbCAlNSwlM0ArXG5cdCIKKwkgICAgICIxNTpcdCIKKwkJIm1vdmVzbCAlMkArLCU1XG5cdCIKKwkJImFkZHhsICU1LCUwXG5cdCIKKwkJIm1vdmVsICU1LCUzQCtcblx0IgorCSAgICAgIjE2Olx0IgorCQkibW92ZXNsICUyQCssJTVcblx0IgorCQkiYWRkeGwgJTUsJTBcblx0IgorCQkibW92ZWwgJTUsJTNAK1xuXHQiCisJICAgICAiMTc6XHQiCisJCSJtb3Zlc2wgJTJAKywlNVxuXHQiCisJCSJhZGR4bCAlNSwlMFxuXHQiCisJCSJtb3ZlbCAlNSwlM0ArXG5cdCIKKwkgICAgICIxODpcdCIKKwkJIm1vdmVzbCAlMkArLCU1XG5cdCIKKwkJImFkZHhsICU1LCUwXG5cdCIKKwkJIm1vdmVsICU1LCUzQCtcblx0IgorCQkiZGJyYSAlMSwxYlxuXHQiCisJCSJjbHJsICU1XG5cdCIKKwkJImFkZHhsICU1LCUwXG5cdCIJLyogYWRkIFggYml0ICovCisJCSJjbHJ3ICUxXG5cdCIKKwkJInN1YnFsICMxLCUxXG5cdCIKKwkJImpjYyAxYlxuIgorCSAgICAgIjI6XHQiCisJCSJtb3ZlbCAlNCwlMVxuXHQiCS8qIHJlc3RvcmUgbGVuIGZyb20gdG1wMSAqLworCQkiYW5kdyAjMHgxYywlNFxuXHQiCS8qIG51bWJlciBvZiByZXN0IGxvbmdzICovCisJCSJqZXEgNGZcblx0IgorCQkibHNydyAjMiwlNFxuXHQiCisJCSJzdWJxdyAjMSwlNFxuIgorCSAgICAgIjM6XG4iCisJCS8qIGxvb3AgZm9yIHJlc3QgbG9uZ3MgKi8KKwkgICAgICIxOTpcdCIKKwkJIm1vdmVzbCAlMkArLCU1XG5cdCIKKwkJImFkZHhsICU1LCUwXG5cdCIKKwkJIm1vdmVsICU1LCUzQCtcblx0IgorCQkiZGJyYSAlNCwzYlxuXHQiCisJCSJjbHJsICU1XG5cdCIKKwkJImFkZHhsICU1LCUwXG4iCQkvKiBhZGQgWCBiaXQgKi8KKwkgICAgICI0Olx0IgorCQkvKiBub3cgY2hlY2sgZm9yIHJlc3QgYnl0ZXMgdGhhdCBkbyBub3QgZml0IGludG8gbG9uZ3MgKi8KKwkJImFuZHcgIzMsJTFcblx0IgorCQkiamVxIDdmXG5cdCIKKwkJImNscmwgJTVcblx0IgkJLyogY2xlYXIgdG1wMiBmb3IgcmVzdCBieXRlcyAqLworCQkic3VicXcgIzIsJTFcblx0IgorCQkiamx0IDVmXG5cdCIKKwkgICAgICIyMDpcdCIKKwkJIm1vdmVzdyAlMkArLCU1XG5cdCIJLyogaGF2ZSByZXN0ID49IDI6IGdldCB3b3JkICovCisJCSJtb3ZldyAlNSwlM0ArXG5cdCIKKwkJInN3YXAgJTVcblx0IgkJLyogaW50byBiaXRzIDE2Li4zMSAqLworCQkidHN0dyAlMVxuXHQiCQkvKiBhbm90aGVyIGJ5dGU/ICovCisJCSJqZXEgNmZcbiIKKwkgICAgICI1OlxuIgorCSAgICAgIjIxOlx0IgorCQkibW92ZXNiICUyQCwlNVxuXHQiCS8qIGhhdmUgb2RkIHJlc3Q6IGdldCBieXRlICovCisJCSJtb3ZlYiAlNSwlM0ArXG5cdCIKKwkJImxzbHcgIzgsJTVcblx0IgkvKiBpbnRvIGJpdHMgOC4uMTU7IDE2Li4zMSB1bnRvdWNoZWQgKi8KKwkgICAgICI2Olx0IgorCQkiYWRkbCAlNSwlMFxuXHQiCS8qIG5vdyBhZGQgcmVzdCBsb25nIHRvIHN1bSAqLworCQkiY2xybCAlNVxuXHQiCisJCSJhZGR4bCAlNSwlMFxuXHQiCS8qIGFkZCBYIGJpdCAqLworCSAgICAgIjc6XHQiCisJCSJjbHJsICU1XG4iCQkvKiBubyBlcnJvciAtIGNsZWFyIHJldHVybiB2YWx1ZSAqLworCSAgICAgIjg6XG4iCisJCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCisJCSIuZXZlblxuIgorCQkvKiBJZiBhbnkgZXhjZXB0aW9uIG9jY3VycyB6ZXJvIG91dCB0aGUgcmVzdC4KKwkJICAgU2ltaWxhcml0aWVzIHdpdGggdGhlIGNvZGUgYWJvdmUgYXJlIGludGVudGlvbmFsIDotKSAqLworCSAgICAgIjkwOlx0IgorCQkiY2xydyAlM0ArXG5cdCIKKwkJIm1vdmVsICUxLCU0XG5cdCIKKwkJImxzcmwgIzUsJTFcblx0IgorCQkiamVxIDFmXG5cdCIKKwkJInN1YnFsICMxLCUxXG4iCisJICAgICAiOTE6XHQiCisJCSJjbHJsICUzQCtcbiIKKwkgICAgICI5MjpcdCIKKwkJImNscmwgJTNAK1xuIgorCSAgICAgIjkzOlx0IgorCQkiY2xybCAlM0ArXG4iCisJICAgICAiOTQ6XHQiCisJCSJjbHJsICUzQCtcbiIKKwkgICAgICI5NTpcdCIKKwkJImNscmwgJTNAK1xuIgorCSAgICAgIjk2Olx0IgorCQkiY2xybCAlM0ArXG4iCisJICAgICAiOTc6XHQiCisJCSJjbHJsICUzQCtcbiIKKwkgICAgICI5ODpcdCIKKwkJImNscmwgJTNAK1xuXHQiCisJCSJkYnJhICUxLDkxYlxuXHQiCisJCSJjbHJ3ICUxXG5cdCIKKwkJInN1YnFsICMxLCUxXG5cdCIKKwkJImpjYyA5MWJcbiIKKwkgICAgICIxOlx0IgorCQkibW92ZWwgJTQsJTFcblx0IgorCQkiYW5kdyAjMHgxYywlNFxuXHQiCisJCSJqZXEgMWZcblx0IgorCQkibHNydyAjMiwlNFxuXHQiCisJCSJzdWJxdyAjMSwlNFxuIgorCSAgICAgIjk5Olx0IgorCQkiY2xybCAlM0ArXG5cdCIKKwkJImRicmEgJTQsOTliXG5cdCIKKwkgICAgICIxOlx0IgorCQkiYW5kdyAjMywlMVxuXHQiCisJCSJqZXEgOWZcbiIKKwkgICAgICIxMDA6XHQiCisJCSJjbHJ3ICUzQCtcblx0IgorCQkidHN0dyAlMVxuXHQiCisJCSJqZXEgOWZcbiIKKwkgICAgICIxMDE6XHQiCisJCSJjbHJiICUzQCtcbiIKKwkgICAgICI5Olx0IgorI2RlZmluZSBTVFIoWCkgU1RSMShYKQorI2RlZmluZSBTVFIxKFgpICNYCisJCSJtb3ZlcSAjLSIgU1RSKEVGQVVMVCkgIiwlNVxuXHQiCisJCSJqcmEgOGJcbiIKKwkJIi5wcmV2aW91c1xuIgorCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgorCQkiLmxvbmcgMTBiLDkwYlxuIgorCQkiLmxvbmcgMTFiLDkxYlxuIgorCQkiLmxvbmcgMTJiLDkyYlxuIgorCQkiLmxvbmcgMTNiLDkzYlxuIgorCQkiLmxvbmcgMTRiLDk0YlxuIgorCQkiLmxvbmcgMTViLDk1YlxuIgorCQkiLmxvbmcgMTZiLDk2YlxuIgorCQkiLmxvbmcgMTdiLDk3YlxuIgorCQkiLmxvbmcgMThiLDk4YlxuIgorCQkiLmxvbmcgMTliLDk5YlxuIgorCQkiLmxvbmcgMjBiLDEwMGJcbiIKKwkJIi5sb25nIDIxYiwxMDFiXG4iCisJCSIucHJldmlvdXMiCisJCTogIj1kIiAoc3VtKSwgIj1kIiAobGVuKSwgIj1hIiAoc3JjKSwgIj1hIiAoZHN0KSwKKwkJICAiPSZkIiAodG1wMSksICI9ZCIgKHRtcDIpCisJCTogIjAiIChzdW0pLCAiMSIgKGxlbiksICIyIiAoc3JjKSwgIjMiIChkc3QpCisJICAgICk7CisKKwkqY3N1bV9lcnIgPSB0bXAyOworCisJcmV0dXJuKHN1bSk7Cit9CisKKy8qCisgKiBjb3B5IGZyb20ga2VybmVsIHNwYWNlIHdoaWxlIGNoZWNrc3VtbWluZywgb3RoZXJ3aXNlIGxpa2UgY3N1bV9wYXJ0aWFsCisgKi8KKwordW5zaWduZWQgaW50Citjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0LCBpbnQgbGVuLCBpbnQgc3VtKQoreworCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMjsKKwlfX2FzbV9fKCJtb3ZlbCAlMiwlNFxuXHQiCisJCSJidHN0ICMxLCU0XG5cdCIJLyogQ2hlY2sgYWxpZ25tZW50ICovCisJCSJqZXEgMmZcblx0IgorCQkic3VicWwgIzIsJTFcblx0IgkvKiBidWZmJTQ9PTI6IHRyZWF0IGZpcnN0IHdvcmQgKi8KKwkJImpndCAxZlxuXHQiCisJCSJhZGRxbCAjMiwlMVxuXHQiCS8qIGxlbiB3YXMgPT0gMiwgdHJlYXQgb25seSByZXN0ICovCisJCSJqcmEgNGZcbiIKKwkgICAgICIxOlx0IgorCQkibW92ZXcgJTJAKywlNFxuXHQiCS8qIGFkZCBmaXJzdCB3b3JkIHRvIHN1bSAqLworCQkiYWRkdyAlNCwlMFxuXHQiCisJCSJtb3ZldyAlNCwlM0ArXG5cdCIKKwkJImNscmwgJTRcblx0IgorCQkiYWRkeGwgJTQsJTBcbiIJCS8qIGFkZCBYIGJpdCAqLworCSAgICAgIjI6XHQiCisJCS8qIHVucm9sbGVkIGxvb3AgZm9yIHRoZSBtYWluIHBhcnQ6IGRvIDggbG9uZ3MgYXQgb25jZSAqLworCQkibW92ZWwgJTEsJTRcblx0IgkvKiBzYXZlIGxlbiBpbiB0bXAxICovCisJCSJsc3JsICM1LCUxXG5cdCIJLyogbGVuLzMyICovCisJCSJqZXEgMmZcblx0IgkJLyogbm90IGVub3VnaC4uLiAqLworCQkic3VicWwgIzEsJTFcbiIKKwkgICAgICIxOlx0IgorCQkibW92ZWwgJTJAKywlNVxuXHQiCisJCSJhZGR4bCAlNSwlMFxuXHQiCisJCSJtb3ZlbCAlNSwlM0ArXG5cdCIKKwkJIm1vdmVsICUyQCssJTVcblx0IgorCQkiYWRkeGwgJTUsJTBcblx0IgorCQkibW92ZWwgJTUsJTNAK1xuXHQiCisJCSJtb3ZlbCAlMkArLCU1XG5cdCIKKwkJImFkZHhsICU1LCUwXG5cdCIKKwkJIm1vdmVsICU1LCUzQCtcblx0IgorCQkibW92ZWwgJTJAKywlNVxuXHQiCisJCSJhZGR4bCAlNSwlMFxuXHQiCisJCSJtb3ZlbCAlNSwlM0ArXG5cdCIKKwkJIm1vdmVsICUyQCssJTVcblx0IgorCQkiYWRkeGwgJTUsJTBcblx0IgorCQkibW92ZWwgJTUsJTNAK1xuXHQiCisJCSJtb3ZlbCAlMkArLCU1XG5cdCIKKwkJImFkZHhsICU1LCUwXG5cdCIKKwkJIm1vdmVsICU1LCUzQCtcblx0IgorCQkibW92ZWwgJTJAKywlNVxuXHQiCisJCSJhZGR4bCAlNSwlMFxuXHQiCisJCSJtb3ZlbCAlNSwlM0ArXG5cdCIKKwkJIm1vdmVsICUyQCssJTVcblx0IgorCQkiYWRkeGwgJTUsJTBcblx0IgorCQkibW92ZWwgJTUsJTNAK1xuXHQiCisJCSJkYnJhICUxLDFiXG5cdCIKKwkJImNscmwgJTVcblx0IgorCQkiYWRkeGwgJTUsJTBcblx0IgkvKiBhZGQgWCBiaXQgKi8KKwkJImNscncgJTFcblx0IgorCQkic3VicWwgIzEsJTFcblx0IgorCQkiamNjIDFiXG4iCisJICAgICAiMjpcdCIKKwkJIm1vdmVsICU0LCUxXG5cdCIJLyogcmVzdG9yZSBsZW4gZnJvbSB0bXAxICovCisJCSJhbmR3ICMweDFjLCU0XG5cdCIJLyogbnVtYmVyIG9mIHJlc3QgbG9uZ3MgKi8KKwkJImplcSA0ZlxuXHQiCisJCSJsc3J3ICMyLCU0XG5cdCIKKwkJInN1YnF3ICMxLCU0XG4iCisJICAgICAiMzpcdCIKKwkJLyogbG9vcCBmb3IgcmVzdCBsb25ncyAqLworCQkibW92ZWwgJTJAKywlNVxuXHQiCisJCSJhZGR4bCAlNSwlMFxuXHQiCisJCSJtb3ZlbCAlNSwlM0ArXG5cdCIKKwkJImRicmEgJTQsM2Jcblx0IgorCQkiY2xybCAlNVxuXHQiCisJCSJhZGR4bCAlNSwlMFxuIgkJLyogYWRkIFggYml0ICovCisJICAgICAiNDpcdCIKKwkJLyogbm93IGNoZWNrIGZvciByZXN0IGJ5dGVzIHRoYXQgZG8gbm90IGZpdCBpbnRvIGxvbmdzICovCisJCSJhbmR3ICMzLCUxXG5cdCIKKwkJImplcSA3ZlxuXHQiCisJCSJjbHJsICU1XG5cdCIJCS8qIGNsZWFyIHRtcDIgZm9yIHJlc3QgYnl0ZXMgKi8KKwkJInN1YnF3ICMyLCUxXG5cdCIKKwkJImpsdCA1ZlxuXHQiCisJCSJtb3ZldyAlMkArLCU1XG5cdCIJLyogaGF2ZSByZXN0ID49IDI6IGdldCB3b3JkICovCisJCSJtb3ZldyAlNSwlM0ArXG5cdCIKKwkJInN3YXAgJTVcblx0IgkJLyogaW50byBiaXRzIDE2Li4zMSAqLworCQkidHN0dyAlMVxuXHQiCQkvKiBhbm90aGVyIGJ5dGU/ICovCisJCSJqZXEgNmZcbiIKKwkgICAgICI1Olx0IgorCQkibW92ZWIgJTJALCU1XG5cdCIJLyogaGF2ZSBvZGQgcmVzdDogZ2V0IGJ5dGUgKi8KKwkJIm1vdmViICU1LCUzQCtcblx0IgorCQkibHNsdyAjOCwlNVxuIgkJLyogaW50byBiaXRzIDguLjE1OyAxNi4uMzEgdW50b3VjaGVkICovCisJICAgICAiNjpcdCIKKwkJImFkZGwgJTUsJTBcblx0IgkvKiBub3cgYWRkIHJlc3QgbG9uZyB0byBzdW0gKi8KKwkJImNscmwgJTVcblx0IgorCQkiYWRkeGwgJTUsJTBcbiIJCS8qIGFkZCBYIGJpdCAqLworCSAgICAgIjc6XHQiCisJCTogIj1kIiAoc3VtKSwgIj1kIiAobGVuKSwgIj1hIiAoc3JjKSwgIj1hIiAoZHN0KSwKKwkJICAiPSZkIiAodG1wMSksICI9JmQiICh0bXAyKQorCQk6ICIwIiAoc3VtKSwgIjEiIChsZW4pLCAiMiIgKHNyYyksICIzIiAoZHN0KQorCSAgICApOworICAgIHJldHVybihzdW0pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2xpYi9sc2hyZGkzLmMgYi9hcmNoL202OGsvbGliL2xzaHJkaTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDY0NDJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2xpYi9sc2hyZGkzLmMKQEAgLTAsMCArMSw2MiBAQAorLyogbHNocmRpMy5jIGV4dHJhY3RlZCBmcm9tIGdjYy0yLjcuMi9saWJnY2MyLmMgd2hpY2ggaXM6ICovCisvKiBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBDQy4KKworR05VIENDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR05VIENDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR05VIENDOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKK0Jvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworI2RlZmluZSBCSVRTX1BFUl9VTklUIDgKKwordHlwZWRlZgkJIGludCBTSXR5cGUJX19hdHRyaWJ1dGVfXyAoKG1vZGUgKFNJKSkpOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgVVNJdHlwZQlfX2F0dHJpYnV0ZV9fICgobW9kZSAoU0kpKSk7Cit0eXBlZGVmCQkgaW50IERJdHlwZQlfX2F0dHJpYnV0ZV9fICgobW9kZSAoREkpKSk7Cit0eXBlZGVmIGludCB3b3JkX3R5cGUgX19hdHRyaWJ1dGVfXyAoKG1vZGUgKF9fd29yZF9fKSkpOworCitzdHJ1Y3QgRElzdHJ1Y3Qge1NJdHlwZSBoaWdoLCBsb3c7fTsKKwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QgRElzdHJ1Y3QgczsKKyAgREl0eXBlIGxsOworfSBESXVuaW9uOworCitESXR5cGUKK19fbHNocmRpMyAoREl0eXBlIHUsIHdvcmRfdHlwZSBiKQoreworICBESXVuaW9uIHc7CisgIHdvcmRfdHlwZSBibTsKKyAgREl1bmlvbiB1dTsKKworICBpZiAoYiA9PSAwKQorICAgIHJldHVybiB1OworCisgIHV1LmxsID0gdTsKKworICBibSA9IChzaXplb2YgKFNJdHlwZSkgKiBCSVRTX1BFUl9VTklUKSAtIGI7CisgIGlmIChibSA8PSAwKQorICAgIHsKKyAgICAgIHcucy5oaWdoID0gMDsKKyAgICAgIHcucy5sb3cgPSAoVVNJdHlwZSl1dS5zLmhpZ2ggPj4gLWJtOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIFVTSXR5cGUgY2FycmllcyA9IChVU0l0eXBlKXV1LnMuaGlnaCA8PCBibTsKKyAgICAgIHcucy5oaWdoID0gKFVTSXR5cGUpdXUucy5oaWdoID4+IGI7CisgICAgICB3LnMubG93ID0gKChVU0l0eXBlKXV1LnMubG93ID4+IGIpIHwgY2FycmllczsKKyAgICB9CisKKyAgcmV0dXJuIHcubGw7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbGliL21lbWNtcC5jIGIvYXJjaC9tNjhrL2xpYi9tZW1jbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDc5NmZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2xpYi9tZW1jbXAuYwpAQCAtMCwwICsxLDExIEBACisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworaW50IG1lbWNtcChjb25zdCB2b2lkICogY3MsY29uc3Qgdm9pZCAqIGN0LHNpemVfdCBjb3VudCkKK3sKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqc3UxLCAqc3UyOworCisgIGZvciggc3UxID0gY3MsIHN1MiA9IGN0OyAwIDwgY291bnQ7ICsrc3UxLCArK3N1MiwgY291bnQtLSkKKyAgICBpZiAoKnN1MSAhPSAqc3UyKQorICAgICAgcmV0dXJuKCgqc3UxIDwgKnN1MikgPyAtMSA6ICsxKTsKKyAgcmV0dXJuKDApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2xpYi9tZW1jcHkuYyBiL2FyY2gvbTY4ay9saWIvbWVtY3B5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlMTgxOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9saWIvbWVtY3B5LmMKQEAgLTAsMCArMSw3NSBAQAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3ZvaWQgKiBtZW1jcHkodm9pZCAqIHRvLCBjb25zdCB2b2lkICogZnJvbSwgc2l6ZV90IG4pCit7CisgIHZvaWQgKnh0byA9IHRvOworICBzaXplX3QgdGVtcCwgdGVtcDE7CisKKyAgaWYgKCFuKQorICAgIHJldHVybiB4dG87CisgIGlmICgobG9uZykgdG8gJiAxKQorICAgIHsKKyAgICAgIGNoYXIgKmN0byA9IHRvOworICAgICAgY29uc3QgY2hhciAqY2Zyb20gPSBmcm9tOworICAgICAgKmN0bysrID0gKmNmcm9tKys7CisgICAgICB0byA9IGN0bzsKKyAgICAgIGZyb20gPSBjZnJvbTsKKyAgICAgIG4tLTsKKyAgICB9CisgIGlmIChuID4gMiAmJiAobG9uZykgdG8gJiAyKQorICAgIHsKKyAgICAgIHNob3J0ICpzdG8gPSB0bzsKKyAgICAgIGNvbnN0IHNob3J0ICpzZnJvbSA9IGZyb207CisgICAgICAqc3RvKysgPSAqc2Zyb20rKzsKKyAgICAgIHRvID0gc3RvOworICAgICAgZnJvbSA9IHNmcm9tOworICAgICAgbiAtPSAyOworICAgIH0KKyAgdGVtcCA9IG4gPj4gMjsKKyAgaWYgKHRlbXApCisgICAgeworICAgICAgbG9uZyAqbHRvID0gdG87CisgICAgICBjb25zdCBsb25nICpsZnJvbSA9IGZyb207CisKKyAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJtb3ZlbCAlMiwlM1xuXHQiCisJCQkgICAiYW5kdyAgIzcsJTNcblx0IgorCQkJICAgImxzcmwgICMzLCUyXG5cdCIKKwkJCSAgICJuZWd3ICAlM1xuXHQiCisJCQkgICAiam1wICAgJSVwY0AoMWYsJTM6dzoyKVxuXHQiCisJCQkgICAiNDpcdCIKKwkJCSAgICJtb3ZlbCAlMEArLCUxQCtcblx0IgorCQkJICAgIm1vdmVsICUwQCssJTFAK1xuXHQiCisJCQkgICAibW92ZWwgJTBAKywlMUArXG5cdCIKKwkJCSAgICJtb3ZlbCAlMEArLCUxQCtcblx0IgorCQkJICAgIm1vdmVsICUwQCssJTFAK1xuXHQiCisJCQkgICAibW92ZWwgJTBAKywlMUArXG5cdCIKKwkJCSAgICJtb3ZlbCAlMEArLCUxQCtcblx0IgorCQkJICAgIm1vdmVsICUwQCssJTFAK1xuXHQiCisJCQkgICAiMTpcdCIKKwkJCSAgICJkYnJhICAlMiw0YlxuXHQiCisJCQkgICAiY2xydyAgJTJcblx0IgorCQkJICAgInN1YnFsICMxLCUyXG5cdCIKKwkJCSAgICJqcGwgICA0YlxuXHQiCisJCQkgICA6ICI9YSIgKGxmcm9tKSwgIj1hIiAobHRvKSwgIj1kIiAodGVtcCksCisJCQkgICAiPSZkIiAodGVtcDEpCisJCQkgICA6ICIwIiAobGZyb20pLCAiMSIgKGx0byksICIyIiAodGVtcCkKKwkJCSAgICk7CisgICAgICB0byA9IGx0bzsKKyAgICAgIGZyb20gPSBsZnJvbTsKKyAgICB9CisgIGlmIChuICYgMikKKyAgICB7CisgICAgICBzaG9ydCAqc3RvID0gdG87CisgICAgICBjb25zdCBzaG9ydCAqc2Zyb20gPSBmcm9tOworICAgICAgKnN0bysrID0gKnNmcm9tKys7CisgICAgICB0byA9IHN0bzsKKyAgICAgIGZyb20gPSBzZnJvbTsKKyAgICB9CisgIGlmIChuICYgMSkKKyAgICB7CisgICAgICBjaGFyICpjdG8gPSB0bzsKKyAgICAgIGNvbnN0IGNoYXIgKmNmcm9tID0gZnJvbTsKKyAgICAgICpjdG8gPSAqY2Zyb207CisgICAgfQorICByZXR1cm4geHRvOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2xpYi9tZW1zZXQuYyBiL2FyY2gvbTY4ay9saWIvbWVtc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU1ZmRiMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9saWIvbWVtc2V0LmMKQEAgLTAsMCArMSw2OCBAQAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3ZvaWQgKiBtZW1zZXQodm9pZCAqIHMsIGludCBjLCBzaXplX3QgY291bnQpCit7CisgIHZvaWQgKnhzID0gczsKKyAgc2l6ZV90IHRlbXAsIHRlbXAxOworCisgIGlmICghY291bnQpCisgICAgcmV0dXJuIHhzOworICBjICY9IDB4ZmY7CisgIGMgfD0gYyA8PCA4OworICBjIHw9IGMgPDwgMTY7CisgIGlmICgobG9uZykgcyAmIDEpCisgICAgeworICAgICAgY2hhciAqY3MgPSBzOworICAgICAgKmNzKysgPSBjOworICAgICAgcyA9IGNzOworICAgICAgY291bnQtLTsKKyAgICB9CisgIGlmIChjb3VudCA+IDIgJiYgKGxvbmcpIHMgJiAyKQorICAgIHsKKyAgICAgIHNob3J0ICpzcyA9IHM7CisgICAgICAqc3MrKyA9IGM7CisgICAgICBzID0gc3M7CisgICAgICBjb3VudCAtPSAyOworICAgIH0KKyAgdGVtcCA9IGNvdW50ID4+IDI7CisgIGlmICh0ZW1wKQorICAgIHsKKyAgICAgIGxvbmcgKmxzID0gczsKKworICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdmVsICUxLCUyXG5cdCIKKwkJCSAgICJhbmR3ICAjNywlMlxuXHQiCisJCQkgICAibHNybCAgIzMsJTFcblx0IgorCQkJICAgIm5lZ3cgICUyXG5cdCIKKwkJCSAgICJqbXAgICAlJXBjQCgyZiwlMjp3OjIpXG5cdCIKKwkJCSAgICIxOlx0IgorCQkJICAgIm1vdmVsICUzLCUwQCtcblx0IgorCQkJICAgIm1vdmVsICUzLCUwQCtcblx0IgorCQkJICAgIm1vdmVsICUzLCUwQCtcblx0IgorCQkJICAgIm1vdmVsICUzLCUwQCtcblx0IgorCQkJICAgIm1vdmVsICUzLCUwQCtcblx0IgorCQkJICAgIm1vdmVsICUzLCUwQCtcblx0IgorCQkJICAgIm1vdmVsICUzLCUwQCtcblx0IgorCQkJICAgIm1vdmVsICUzLCUwQCtcblx0IgorCQkJICAgIjI6XHQiCisJCQkgICAiZGJyYSAgJTEsMWJcblx0IgorCQkJICAgImNscncgICUxXG5cdCIKKwkJCSAgICJzdWJxbCAjMSwlMVxuXHQiCisJCQkgICAianBsICAgMWJcblx0IgorCQkJICAgOiAiPWEiIChscyksICI9ZCIgKHRlbXApLCAiPSZkIiAodGVtcDEpCisJCQkgICA6ICJkIiAoYyksICIwIiAobHMpLCAiMSIgKHRlbXApCisJCQkgICApOworICAgICAgcyA9IGxzOworICAgIH0KKyAgaWYgKGNvdW50ICYgMikKKyAgICB7CisgICAgICBzaG9ydCAqc3MgPSBzOworICAgICAgKnNzKysgPSBjOworICAgICAgcyA9IHNzOworICAgIH0KKyAgaWYgKGNvdW50ICYgMSkKKyAgICB7CisgICAgICBjaGFyICpjcyA9IHM7CisgICAgICAqY3MgPSBjOworICAgIH0KKyAgcmV0dXJuIHhzOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2xpYi9tdWxkaTMuYyBiL2FyY2gvbTY4ay9saWIvbXVsZGkzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU0ZjI3NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9saWIvbXVsZGkzLmMKQEAgLTAsMCArMSw2MyBAQAorLyogbXVsZGkzLmMgZXh0cmFjdGVkIGZyb20gZ2NjLTIuNy4yLjMvbGliZ2NjMi5jIGFuZAorCQkJICAgZ2NjLTIuNy4yLjMvbG9uZ2xvbmcuaCB3aGljaCBpczogKi8KKy8qIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIENDLgorCitHTlUgQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgorCitHTlUgQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHTlUgQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisjZGVmaW5lIEJJVFNfUEVSX1VOSVQgOAorCisjZGVmaW5lIHVtdWxfcHBtbSh3MSwgdzAsIHUsIHYpIFwKKyAgX19hc21fXyAoIm11bHUlLmwgJTMsJTE6JTAiCQkJCQkJXAorICAgICAgICAgICA6ICI9ZCIgKChVU0l0eXBlKSh3MCkpLAkJCQkJXAorICAgICAgICAgICAgICI9ZCIgKChVU0l0eXBlKSh3MSkpCQkJCQlcCisgICAgICAgICAgIDogIiUwIiAoKFVTSXR5cGUpKHUpKSwJCQkJCVwKKyAgICAgICAgICAgICAiZG1pIiAoKFVTSXR5cGUpKHYpKSkKKworI2RlZmluZSBfX3VtdWxzaWRpMyh1LCB2KSBcCisgICh7REl1bmlvbiBfX3c7CQkJCQkJCVwKKyAgICB1bXVsX3BwbW0gKF9fdy5zLmhpZ2gsIF9fdy5zLmxvdywgdSwgdik7CQkJCVwKKyAgICBfX3cubGw7IH0pCisKK3R5cGVkZWYJCSBpbnQgU0l0eXBlCV9fYXR0cmlidXRlX18gKChtb2RlIChTSSkpKTsKK3R5cGVkZWYgdW5zaWduZWQgaW50IFVTSXR5cGUJX19hdHRyaWJ1dGVfXyAoKG1vZGUgKFNJKSkpOwordHlwZWRlZgkJIGludCBESXR5cGUJX19hdHRyaWJ1dGVfXyAoKG1vZGUgKERJKSkpOwordHlwZWRlZiBpbnQgd29yZF90eXBlIF9fYXR0cmlidXRlX18gKChtb2RlIChfX3dvcmRfXykpKTsKKworc3RydWN0IERJc3RydWN0IHtTSXR5cGUgaGlnaCwgbG93O307CisKK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0IERJc3RydWN0IHM7CisgIERJdHlwZSBsbDsKK30gREl1bmlvbjsKKworREl0eXBlCitfX211bGRpMyAoREl0eXBlIHUsIERJdHlwZSB2KQoreworICBESXVuaW9uIHc7CisgIERJdW5pb24gdXUsIHZ2OworCisgIHV1LmxsID0gdSwKKyAgdnYubGwgPSB2OworCisgIHcubGwgPSBfX3VtdWxzaWRpMyAodXUucy5sb3csIHZ2LnMubG93KTsKKyAgdy5zLmhpZ2ggKz0gKChVU0l0eXBlKSB1dS5zLmxvdyAqIChVU0l0eXBlKSB2di5zLmhpZ2gKKwkgICAgICAgKyAoVVNJdHlwZSkgdXUucy5oaWdoICogKFVTSXR5cGUpIHZ2LnMubG93KTsKKworICByZXR1cm4gdy5sbDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9saWIvc2VtYXBob3JlLlMgYi9hcmNoL202OGsvbGliL3NlbWFwaG9yZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMTU2MjRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL2xpYi9zZW1hcGhvcmUuUwpAQCAtMCwwICsxLDUzIEBACisvKgorICogIGxpbnV4L2FyY2gvbTY4ay9saWIvc2VtYXBob3JlLlMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk2ICBMaW51cyBUb3J2YWxkcworICoKKyAqICBtNjhrIHZlcnNpb24gYnkgQW5kcmVhcyBTY2h3YWIKKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKworLyoKKyAqIFRoZSBzZW1hcGhvcmUgb3BlcmF0aW9ucyBoYXZlIGEgc3BlY2lhbCBjYWxsaW5nIHNlcXVlbmNlIHRoYXQKKyAqIGFsbG93IHVzIHRvIGRvIGEgc2ltcGxlciBpbi1saW5lIHZlcnNpb24gb2YgdGhlbS4gVGhlc2Ugcm91dGluZXMKKyAqIG5lZWQgdG8gY29udmVydCB0aGF0IHNlcXVlbmNlIGJhY2sgaW50byB0aGUgQyBzZXF1ZW5jZSB3aGVuCisgKiB0aGVyZSBpcyBjb250ZW50aW9uIG9uIHRoZSBzZW1hcGhvcmUuCisgKi8KK0VOVFJZKF9fZG93bl9mYWlsZWQpCisJbW92ZW1sICVhMC8lZDAvJWQxLC0oJXNwKQorCW1vdmVsICVhMSwtKCVzcCkKKwlqYnNyIF9fZG93bgorCW1vdmVsICglc3ApKywlYTEKKwltb3ZlbWwgKCVzcCkrLCVhMC8lZDAvJWQxCisJcnRzCisKK0VOVFJZKF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZSkKKwltb3ZlbCAlYTAsLSglc3ApCisJbW92ZWwgJWQxLC0oJXNwKQorCW1vdmVsICVhMSwtKCVzcCkKKwlqYnNyIF9fZG93bl9pbnRlcnJ1cHRpYmxlCisJbW92ZWwgKCVzcCkrLCVhMQorCW1vdmVsICglc3ApKywlZDEKKwltb3ZlbCAoJXNwKSssJWEwCisJcnRzCisKK0VOVFJZKF9fZG93bl9mYWlsZWRfdHJ5bG9jaykKKwltb3ZlbCAlYTAsLSglc3ApCisJbW92ZWwgJWQxLC0oJXNwKQorCW1vdmVsICVhMSwtKCVzcCkKKwlqYnNyIF9fZG93bl90cnlsb2NrCisJbW92ZWwgKCVzcCkrLCVhMQorCW1vdmVsICglc3ApKywlZDEKKwltb3ZlbCAoJXNwKSssJWEwCisJcnRzCisKK0VOVFJZKF9fdXBfd2FrZXVwKQorCW1vdmVtbCAlYTAvJWQwLyVkMSwtKCVzcCkKKwltb3ZlbCAlYTEsLSglc3ApCisJamJzciBfX3VwCisJbW92ZWwgKCVzcCkrLCVhMQorCW1vdmVtbCAoJXNwKSssJWEwLyVkMC8lZDEKKwlydHMKKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9NYWtlZmlsZSBiL2FyY2gvbTY4ay9tYWMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk1YTA5ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbWFjL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorIworIyBNYWtlZmlsZSBmb3IgTGludXggYXJjaC9tNjhrL21hYyBzb3VyY2UgZGlyZWN0b3J5CisjCisKK29iai15CQk6PSBjb25maWcubyBib290cGFyc2UubyBtYWNpbnRzLm8gaW9wLm8gdmlhLm8gb3NzLm8gcHNjLm8gXAorCQkJYmFib29uLm8gbWFjYm9pbmcubyBkZWJ1Zy5vIG1pc2MubyBtYWNfa3N5bXMubwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9iYWJvb24uYyBiL2FyY2gvbTY4ay9tYWMvYmFib29uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5YjdkZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tYWMvYmFib29uLmMKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBCYWJvb24gQ3VzdG9tIElDIE1hbmFnZW1lbnQKKyAqCisgKiBUaGUgQmFib29uIGN1c3RvbSBJQyBjb250cm9scyB0aGUgSURFLCBQQ01DSUEgYW5kIG1lZGlhIGJheSBvbiB0aGUKKyAqIFBvd2VyQm9vayAxOTAuIEl0IG11bHRpcGxleGVzIG11bHRpcGxlIGludGVycnVwdCBzb3VyY2VzIG9udG8gdGhlCisgKiBOdWJ1cyBzbG90ICRDIGludGVycnVwdC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorCisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL21hY2ludG9zaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNpbnRzLmg+CisjaW5jbHVkZSA8YXNtL21hY19iYWJvb24uaD4KKworLyogI2RlZmluZSBERUJVR19CQUJPT04gKi8KKy8qICNkZWZpbmUgREVCVUdfSVJRUyAqLworCitpbnQgYmFib29uX3ByZXNlbnQsYmFib29uX2FjdGl2ZTsKK3ZvbGF0aWxlIHN0cnVjdCBiYWJvb24gKmJhYm9vbjsKKworaXJxcmV0dXJuX3QgYmFib29uX2lycShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisKKyNpZiAwCitleHRlcm4gaW50IG1hY2lkZV9hY2tfaW50cihzdHJ1Y3QgYXRhX2NoYW5uZWwgKik7CisjZW5kaWYKKworLyoKKyAqIEJhYm9vbiBpbml0aWFsaXphdGlvbi4KKyAqLworCit2b2lkIF9faW5pdCBiYWJvb25faW5pdCh2b2lkKQoreworCWlmIChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCAhPSBNQUNfTU9ERUxfUEIxOTApIHsKKwkJYmFib29uID0gTlVMTDsKKwkJYmFib29uX3ByZXNlbnQgPSAwOworCQlyZXR1cm47CisJfQorCisJYmFib29uID0gKHN0cnVjdCBiYWJvb24gKikgQkFCT09OX0JBU0U7CisJYmFib29uX3ByZXNlbnQgPSAxOworCWJhYm9vbl9hY3RpdmUgPSAwOworCisJcHJpbnRrKCJCYWJvb24gZGV0ZWN0ZWQgYXQgJXBcbiIsIGJhYm9vbik7Cit9CisKKy8qCisgKiBSZWdpc3RlciB0aGUgQmFib29uIGludGVycnVwdCBkaXNwYXRjaGVyIG9uIG51YnVzIHNsb3QgJEMuCisgKi8KKwordm9pZCBfX2luaXQgYmFib29uX3JlZ2lzdGVyX2ludGVycnVwdHModm9pZCkKK3sKKwlyZXF1ZXN0X2lycShJUlFfTlVCVVNfQywgYmFib29uX2lycSwgSVJRX0ZMR19MT0NLfElSUV9GTEdfRkFTVCwKKwkJICAgICJiYWJvb24iLCAodm9pZCAqKSBiYWJvb24pOworfQorCisvKgorICogQmFib29uIGludGVycnVwdCBoYW5kbGVyLiBUaGlzIHdvcmtzIGEgbG90IGxpa2UgYSBWSUEuCisgKi8KKworaXJxcmV0dXJuX3QgYmFib29uX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBpcnFfYml0LGk7CisJdW5zaWduZWQgY2hhciBldmVudHM7CisKKyNpZmRlZiBERUJVR19JUlFTCisJcHJpbnRrKCJiYWJvb25faXJxOiBtYl9jb250cm9sICUwMlggbWJfaWZyICUwMlggbWJfc3RhdHVzICUwMlggYWN0aXZlICUwMlhcbiIsCisJCSh1aW50KSBiYWJvb24tPm1iX2NvbnRyb2wsICh1aW50KSBiYWJvb24tPm1iX2lmciwKKwkJKHVpbnQpIGJhYm9vbi0+bWJfc3RhdHVzLCAgYmFib29uX2FjdGl2ZSk7CisjZW5kaWYKKworCWlmICghKGV2ZW50cyA9IGJhYm9vbi0+bWJfaWZyICYgMHgwNykpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWZvciAoaSA9IDAsIGlycV9iaXQgPSAxIDsgaSA8IDMgOyBpKyssIGlycV9iaXQgPDw9IDEpIHsKKwkgICAgICAgIGlmIChldmVudHMgJiBpcnFfYml0LyogJiBiYWJvb25fYWN0aXZlKi8pIHsKKwkJCWJhYm9vbl9hY3RpdmUgJj0gfmlycV9iaXQ7CisJCQltYWNfZG9faXJxX2xpc3QoSVJRX0JBQk9PTl8wICsgaSwgcmVncyk7CisJCQliYWJvb25fYWN0aXZlIHw9IGlycV9iaXQ7CisJCQliYWJvb24tPm1iX2lmciAmPSB+aXJxX2JpdDsKKwkJfQorCX0KKyNpZiAwCisJaWYgKGJhYm9vbi0+bWJfaWZyICYgMHgwMikgbWFjaWRlX2Fja19pbnRyKE5VTEwpOworCS8qIGZvciBub3cgd2UgbmVlZCB0byBzbWFzaCBhbGwgaW50ZXJydXB0cyAqLworCWJhYm9vbi0+bWJfaWZyICY9IH5ldmVudHM7CisjZW5kaWYKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3ZvaWQgYmFib29uX2lycV9lbmFibGUoaW50IGlycSkgeworCWludCBpcnFfaWR4CT0gSVJRX0lEWChpcnEpOworCisjaWZkZWYgREVCVUdfSVJRVVNFCisJcHJpbnRrKCJiYWJvb25faXJxX2VuYWJsZSglZClcbiIsIGlycSk7CisjZW5kaWYKKwliYWJvb25fYWN0aXZlIHw9ICgxIDw8IGlycV9pZHgpOworfQorCit2b2lkIGJhYm9vbl9pcnFfZGlzYWJsZShpbnQgaXJxKSB7CisJaW50IGlycV9pZHgJPSBJUlFfSURYKGlycSk7CisKKyNpZmRlZiBERUJVR19JUlFVU0UKKwlwcmludGsoImJhYm9vbl9pcnFfZGlzYWJsZSglZClcbiIsIGlycSk7CisjZW5kaWYKKwliYWJvb25fYWN0aXZlICY9IH4oMSA8PCBpcnFfaWR4KTsKK30KKwordm9pZCBiYWJvb25faXJxX2NsZWFyKGludCBpcnEpIHsKKwlpbnQgaXJxX2lkeAk9IElSUV9JRFgoaXJxKTsKKworCWJhYm9vbi0+bWJfaWZyICY9IH4oMSA8PCBpcnFfaWR4KTsKK30KKworaW50IGJhYm9vbl9pcnFfcGVuZGluZyhpbnQgaXJxKQoreworCWludCBpcnFfaWR4CT0gSVJRX0lEWChpcnEpOworCisJcmV0dXJuIGJhYm9vbi0+bWJfaWZyICYgKDEgPDwgaXJxX2lkeCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL2Jvb3RwYXJzZS5jIGIvYXJjaC9tNjhrL21hYy9ib290cGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmQyMjM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21hYy9ib290cGFyc2UuYwpAQCAtMCwwICsxLDEyMiBAQAorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9tYWNpbnRvc2guaD4KKworLyoKKyAqCUJvb3RlciB2YXJzCisgKi8KKworaW50IGJvb3Rob3d0bzsKK2ludCBfYm9vdGhvd3RvOworCisvKgorICoJQ2FsbGVkIGVhcmx5IHRvIHBhcnNlIHRoZSBlbnZpcm9ubWVudCAocGFzc2VkIHRvIHVzIGZyb20gdGhlIGJvb3RlcikKKyAqCWludG8gYSBib290aW5mbyBzdHJ1Y3QuIFdpbGwgZGllIGFzIHNvb24gYXMgd2UgaGF2ZSBvdXIgb3duIGJvb3RlcgorICovCisKKyNkZWZpbmUgYXRvbCh4KQlzaW1wbGVfc3RydG91bCh4LE5VTEwsMCkKKwordm9pZCBwYXJzZV9ib290ZXIoY2hhciAqZW52KQoreworCWNoYXIgKm5hbWU7CisJY2hhciAqdmFsdWU7CisjaWYgMAorCXdoaWxlKDAgJiYgKmVudikKKyNlbHNlCisJd2hpbGUoKmVudikKKyNlbmRpZgorCXsKKwkJbmFtZT1lbnY7CisJCXZhbHVlPW5hbWU7CisJCXdoaWxlKCp2YWx1ZSE9Jz0nJiYqdmFsdWUpCisJCQl2YWx1ZSsrOworCQlpZigqdmFsdWU9PSc9JykKKwkJCSp2YWx1ZSsrPTA7CisJCWVudj12YWx1ZTsKKwkJd2hpbGUoKmVudikKKwkJCWVudisrOworCQllbnYrKzsKKyNpZiAwCisJCWlmKHN0cmNtcChuYW1lLCJWSURFT19BRERSIik9PTApCisJCQltYWNfbWNoLnZpZGVvYWRkcj1hdG9sKHZhbHVlKTsKKwkJaWYoc3RyY21wKG5hbWUsIlJPV19CWVRFUyIpPT0wKQorCQkJbWFjX21jaC52aWRlb3Jvdz1hdG9sKHZhbHVlKTsKKwkJaWYoc3RyY21wKG5hbWUsIlNDUkVFTl9ERVBUSCIpPT0wKQorCQkJbWFjX21jaC52aWRlb2RlcHRoPWF0b2wodmFsdWUpOworCQlpZihzdHJjbXAobmFtZSwiRElNRU5TSU9OUyIpPT0wKQorCQkJbWFjX21jaC5kaW1lbnNpb25zPWF0b2wodmFsdWUpOworI2VuZGlmCisJCWlmKHN0cmNtcChuYW1lLCJCT09UVElNRSIpPT0wKQorCQkJbWFjX2JpX2RhdGEuYm9vdHRpbWU9YXRvbCh2YWx1ZSk7CisJCWlmKHN0cmNtcChuYW1lLCJHTVRCSUFTIik9PTApCisJCQltYWNfYmlfZGF0YS5nbXRiaWFzPWF0b2wodmFsdWUpOworCQlpZihzdHJjbXAobmFtZSwiQk9PVEVSVkVSIik9PTApCisJCQltYWNfYmlfZGF0YS5ib290dmVyPWF0b2wodmFsdWUpOworCQlpZihzdHJjbXAobmFtZSwiTUFDT1NfVklERU8iKT09MCkKKwkJCW1hY19iaV9kYXRhLnZpZGVvbG9naWNhbD1hdG9sKHZhbHVlKTsKKwkJaWYoc3RyY21wKG5hbWUsIk1BQ09TX1NDQyIpPT0wKQorCQkJbWFjX2JpX2RhdGEuc2NjYmFzZT1hdG9sKHZhbHVlKTsKKwkJaWYoc3RyY21wKG5hbWUsIk1BQ0hJTkVJRCIpPT0wKQorCQkJbWFjX2JpX2RhdGEuaWQ9YXRvbCh2YWx1ZSk7CisJCWlmKHN0cmNtcChuYW1lLCJNRU1TSVpFIik9PTApCisJCQltYWNfYmlfZGF0YS5tZW1zaXplPWF0b2wodmFsdWUpOworCQlpZihzdHJjbXAobmFtZSwiU0VSSUFMX01PREVNX0ZMQUdTIik9PTApCisJCQltYWNfYmlfZGF0YS5zZXJpYWxtZj1hdG9sKHZhbHVlKTsKKwkJaWYoc3RyY21wKG5hbWUsIlNFUklBTF9NT0RFTV9IU0tJQ0xLIik9PTApCisJCQltYWNfYmlfZGF0YS5zZXJpYWxoc2s9YXRvbCh2YWx1ZSk7CisJCWlmKHN0cmNtcChuYW1lLCJTRVJJQUxfTU9ERU1fR1BJQ0xLIik9PTApCisJCQltYWNfYmlfZGF0YS5zZXJpYWxncGk9YXRvbCh2YWx1ZSk7CisJCWlmKHN0cmNtcChuYW1lLCJTRVJJQUxfUFJJTlRfRkxBR1MiKT09MCkKKwkJCW1hY19iaV9kYXRhLnByaW50bWY9YXRvbCh2YWx1ZSk7CisJCWlmKHN0cmNtcChuYW1lLCJTRVJJQUxfUFJJTlRfSFNLSUNMSyIpPT0wKQorCQkJbWFjX2JpX2RhdGEucHJpbnRoc2s9YXRvbCh2YWx1ZSk7CisJCWlmKHN0cmNtcChuYW1lLCJTRVJJQUxfUFJJTlRfR1BJQ0xLIik9PTApCisJCQltYWNfYmlfZGF0YS5wcmludGdwaT1hdG9sKHZhbHVlKTsKKwkJaWYoc3RyY21wKG5hbWUsIlBST0NFU1NPUiIpPT0wKQorCQkJbWFjX2JpX2RhdGEuY3B1aWQ9YXRvbCh2YWx1ZSk7CisJCWlmKHN0cmNtcChuYW1lLCJST01CQVNFIik9PTApCisJCQltYWNfYmlfZGF0YS5yb21iYXNlPWF0b2wodmFsdWUpOworCQlpZihzdHJjbXAobmFtZSwiVElNRURCUkEiKT09MCkKKwkJCW1hY19iaV9kYXRhLnRpbWVkYnJhPWF0b2wodmFsdWUpOworCQlpZihzdHJjbXAobmFtZSwiQURCREVMQVkiKT09MCkKKwkJCW1hY19iaV9kYXRhLmFkYmRlbGF5PWF0b2wodmFsdWUpOworCX0KKyNpZiAwCS8qIFhYWDogVE9ETyB3aXRoIG02OGtfbWFjaF8qICovCisJLyogRmlsbCBpbiB0aGUgYmFzZSBzdHVmZiAqLworCWJvb3RfaW5mby5tYWNodHlwZT1NQUNIX01BQzsKKwkvKiBSZWFkIHRoaXMgZnJvbSB0aGUgbWFjaW5mbyB3ZSBnb3QgISAqLworLyoJYm9vdF9pbmZvLmNwdXR5cGU9Q1BVXzY4MDIwfEZQVUJfNjg4ODE7Ki8KKy8qCWJvb3RfaW5mby5tZW1vcnlbMF0uYWRkcj0wOyovCisvKglib290X2luZm8ubWVtb3J5WzBdLnNpemU9KChtYWNfYmlfZGF0YS5pZD4+NykmMzEpPDwyMDsqLworCWJvb3RfaW5mby5udW1fbWVtb3J5PTE7CQkvKiBPbiBhIE1hY0lJICovCisJYm9vdF9pbmZvLnJhbWRpc2tfc2l6ZT0wOwkvKiBGb3Igbm93ICovCisJKmJvb3RfaW5mby5jb21tYW5kX2xpbmU9MDsKKyNlbmRpZgorIH0KKworCit2b2lkIHByaW50X2Jvb3RlcihjaGFyICplbnYpCit7CisJY2hhciAqbmFtZTsKKwljaGFyICp2YWx1ZTsKKwl3aGlsZSgqZW52KQorCXsKKwkJbmFtZT1lbnY7CisJCXZhbHVlPW5hbWU7CisJCXdoaWxlKCp2YWx1ZSE9Jz0nJiYqdmFsdWUpCisJCQl2YWx1ZSsrOworCQlpZigqdmFsdWU9PSc9JykKKwkJCSp2YWx1ZSsrPTA7CisJCWVudj12YWx1ZTsKKwkJd2hpbGUoKmVudikKKwkJCWVudisrOworCQllbnYrKzsKKwkJcHJpbnRrKCIlcz0lc1xuIiwgbmFtZSx2YWx1ZSk7CisJfQorIH0KKworCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL2NvbmZpZy5jIGIvYXJjaC9tNjhrL21hYy9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDE5Y2JiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21hYy9jb25maWcuYwpAQCAtMCwwICsxLDkwMiBAQAorLyoKKyAqICBsaW51eC9hcmNoL202OGsvbWFjL2NvbmZpZy5jCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGxpbnV4IHN0dWZmCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisvKiBrZXliICovCisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKy8qIGtleWIgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgorCisjZGVmaW5lIEJPT1RJTkZPX0NPTVBBVF8xXzAKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcnRjLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNpbnRvc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaW50cy5oPgorI2luY2x1ZGUgPGFzbS9tYWNody5oPgorCisjaW5jbHVkZSA8YXNtL21hY19pb3AuaD4KKyNpbmNsdWRlIDxhc20vbWFjX3ZpYS5oPgorI2luY2x1ZGUgPGFzbS9tYWNfb3NzLmg+CisjaW5jbHVkZSA8YXNtL21hY19wc2MuaD4KKworLyogTWFjIGJvb3RpbmZvIHN0cnVjdCAqLworCitzdHJ1Y3QgbWFjX2Jvb3Rlcl9kYXRhIG1hY19iaV9kYXRhOworaW50IG1hY19iaXNpemUgPSBzaXplb2YgbWFjX2JpX2RhdGE7CisKK3N0cnVjdCBtYWNfaHdfcHJlc2VudCBtYWNfaHdfcHJlc2VudDsKKworLyogTmV3IG02OGsgYm9vdGluZm8gc3R1ZmYgYW5kIHZpZGVvYmFzZSAqLworCitleHRlcm4gaW50IG02OGtfbnVtX21lbW9yeTsKK2V4dGVybiBzdHJ1Y3QgbWVtX2luZm8gbTY4a19tZW1vcnlbTlVNX01FTUlORk9dOworCitleHRlcm4gc3RydWN0IG1lbV9pbmZvIG02OGtfcmFtZGlzazsKKworZXh0ZXJuIGNoYXIgbTY4a19jb21tYW5kX2xpbmVbQ0xfU0laRV07CisKK3ZvaWQgKm1hY19lbnY7CQkvKiBMb2FkZWQgYnkgdGhlIGJvb3QgYXNtICovCisKKy8qIFRoZSBwaHlzLiB2aWRlbyBhZGRyLiAtIG1pZ2h0IGJlIGJvZ3VzIG9uIHNvbWUgbWFjaGluZXMgKi8KK3Vuc2lnbmVkIGxvbmcgbWFjX29yaWdfdmlkZW9hZGRyOworCisvKiBNYWMgc3BlY2lmaWMgdGltZXIgZnVuY3Rpb25zICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBtYWNfZ2V0dGltZW9mZnNldCAodm9pZCk7CitleHRlcm4gaW50IG1hY19od2NsayAoaW50LCBzdHJ1Y3QgcnRjX3RpbWUgKik7CitleHRlcm4gaW50IG1hY19zZXRfY2xvY2tfbW1zcyAodW5zaWduZWQgbG9uZyk7CitleHRlcm4gaW50IHNob3dfbWFjX2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICosIHZvaWQgKik7CitleHRlcm4gdm9pZCBpb3BfcHJlaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGlvcF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgdmlhX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCB2aWFfaW5pdF9jbG9jayhpcnFyZXR1cm5fdCAoKmZ1bmMpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSk7CitleHRlcm4gdm9pZCB2aWFfZmx1c2hfY2FjaGUodm9pZCk7CitleHRlcm4gdm9pZCBvc3NfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHBzY19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgYmFib29uX2luaXQodm9pZCk7CisKK2V4dGVybiB2b2lkIG1hY19ta3NvdW5kKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKKworZXh0ZXJuIHZvaWQgbnVidXNfc3dlZXBfdmlkZW8odm9pZCk7CisKKy8qIE1hYyBzcGVjaWZpYyBkZWJ1ZyBmdW5jdGlvbnMgKGluIGRlYnVnLmMpICovCitleHRlcm4gdm9pZCBtYWNfZGVidWdfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG1hY19kZWJ1Z2dpbmdfbG9uZyhpbnQsIGxvbmcpOworCitzdGF0aWMgdm9pZCBtYWNfZ2V0X21vZGVsKGNoYXIgKnN0cik7CisKK3ZvaWQgbWFjX2JhbmcoaW50IGlycSwgdm9pZCAqdmVjdG9yLCBzdHJ1Y3QgcHRfcmVncyAqcCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJSZXNldHRpbmcgLi4uXG4iKTsKKwltYWNfcmVzZXQoKTsKK30KKworc3RhdGljIHZvaWQgbWFjX3NjaGVkX2luaXQoaXJxcmV0dXJuX3QgKCp2ZWN0b3IpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSkKK3sKKwl2aWFfaW5pdF9jbG9jayh2ZWN0b3IpOworfQorCisjaWYgMAordm9pZCBtYWNfd2FpdGJ1dCAodm9pZCkKK3sKKwk7Cit9CisjZW5kaWYKKworZXh0ZXJuIGlycXJldHVybl90IG1hY19kZWZhdWx0X2hhbmRsZXIoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworCitpcnFyZXR1cm5fdCAoKm1hY19oYW5kbGVyc1s4XSkoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopPQoreworCW1hY19kZWZhdWx0X2hhbmRsZXIsCisJbWFjX2RlZmF1bHRfaGFuZGxlciwKKwltYWNfZGVmYXVsdF9oYW5kbGVyLAorCW1hY19kZWZhdWx0X2hhbmRsZXIsCisJbWFjX2RlZmF1bHRfaGFuZGxlciwKKwltYWNfZGVmYXVsdF9oYW5kbGVyLAorCW1hY19kZWZhdWx0X2hhbmRsZXIsCisJbWFjX2RlZmF1bHRfaGFuZGxlcgorfTsKKworLyoKKyAqIFBhcnNlIGEgTWFjaW50b3NoLXNwZWNpZmljIHJlY29yZCBpbiB0aGUgYm9vdGluZm8KKyAqLworCitpbnQgX19pbml0IG1hY19wYXJzZV9ib290aW5mbyhjb25zdCBzdHJ1Y3QgYmlfcmVjb3JkICpyZWNvcmQpCit7CisgICAgaW50IHVua25vd24gPSAwOworICAgIGNvbnN0IHVfbG9uZyAqZGF0YSA9IHJlY29yZC0+ZGF0YTsKKworICAgIHN3aXRjaCAocmVjb3JkLT50YWcpIHsKKwljYXNlIEJJX01BQ19NT0RFTDoKKwkgICAgbWFjX2JpX2RhdGEuaWQgPSAqZGF0YTsKKwkgICAgYnJlYWs7CisJY2FzZSBCSV9NQUNfVkFERFI6CisJICAgIG1hY19iaV9kYXRhLnZpZGVvYWRkciA9ICpkYXRhOworCSAgICBicmVhazsKKwljYXNlIEJJX01BQ19WREVQVEg6CisJICAgIG1hY19iaV9kYXRhLnZpZGVvZGVwdGggPSAqZGF0YTsKKwkgICAgYnJlYWs7CisJY2FzZSBCSV9NQUNfVlJPVzoKKwkgICAgbWFjX2JpX2RhdGEudmlkZW9yb3cgPSAqZGF0YTsKKwkgICAgYnJlYWs7CisJY2FzZSBCSV9NQUNfVkRJTToKKwkgICAgbWFjX2JpX2RhdGEuZGltZW5zaW9ucyA9ICpkYXRhOworCSAgICBicmVhazsKKwljYXNlIEJJX01BQ19WTE9HSUNBTDoKKwkgICAgbWFjX2JpX2RhdGEudmlkZW9sb2dpY2FsID0gVklERU9NRU1CQVNFICsgKCpkYXRhICYgflZJREVPTUVNTUFTSyk7CisJICAgIG1hY19vcmlnX3ZpZGVvYWRkciA9ICpkYXRhOworCSAgICBicmVhazsKKwljYXNlIEJJX01BQ19TQ0NCQVNFOgorCSAgICBtYWNfYmlfZGF0YS5zY2NiYXNlID0gKmRhdGE7CisJICAgIGJyZWFrOworCWNhc2UgQklfTUFDX0JUSU1FOgorCSAgICBtYWNfYmlfZGF0YS5ib290dGltZSA9ICpkYXRhOworCSAgICBicmVhazsKKwljYXNlIEJJX01BQ19HTVRCSUFTOgorCSAgICBtYWNfYmlfZGF0YS5nbXRiaWFzID0gKmRhdGE7CisJICAgIGJyZWFrOworCWNhc2UgQklfTUFDX01FTVNJWkU6CisJICAgIG1hY19iaV9kYXRhLm1lbXNpemUgPSAqZGF0YTsKKwkgICAgYnJlYWs7CisJY2FzZSBCSV9NQUNfQ1BVSUQ6CisJICAgIG1hY19iaV9kYXRhLmNwdWlkID0gKmRhdGE7CisJICAgIGJyZWFrOworICAgICAgICBjYXNlIEJJX01BQ19ST01CQVNFOgorCSAgICBtYWNfYmlfZGF0YS5yb21iYXNlID0gKmRhdGE7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIHVua25vd24gPSAxOworICAgIH0KKyAgICByZXR1cm4odW5rbm93bik7Cit9CisKKy8qCisgKiBGbGlwIGludG8gMjRiaXQgbW9kZSBmb3IgYW4gaW5zdGFudCAtIGZsdXNoZXMgdGhlIEwyIGNhY2hlIGNhcmQuIFdlCisgKiBoYXZlIHRvIGRpc2FibGUgaW50ZXJydXB0cyBmb3IgdGhpcy4gT3VyIElSUSBoYW5kbGVycyB3aWxsIGNyYXAKKyAqIHRoZW1zZWx2ZXMgaWYgdGhleSB0YWtlIGFuIElSUSBpbiAyNGJpdCBtb2RlIQorICovCisKK3N0YXRpYyB2b2lkIG1hY19jYWNoZV9jYXJkX2ZsdXNoKGludCB3cml0ZWJhY2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdmlhX2ZsdXNoX2NhY2hlKCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCit2b2lkIF9faW5pdCBjb25maWdfbWFjKHZvaWQpCit7CisJaWYgKCFNQUNIX0lTX01BQykgeworCSAgcHJpbnRrKEtFUk5fRVJSICJFUlJPUjogbm8gTWFjLCBidXQgY29uZmlnX21hYygpIGNhbGxlZCEhIFxuIik7CisJfQorCisJbWFjaF9zY2hlZF9pbml0ICAgICAgPSBtYWNfc2NoZWRfaW5pdDsKKwltYWNoX2luaXRfSVJRICAgICAgICA9IG1hY19pbml0X0lSUTsKKwltYWNoX3JlcXVlc3RfaXJxICAgICA9IG1hY19yZXF1ZXN0X2lycTsKKwltYWNoX2ZyZWVfaXJxICAgICAgICA9IG1hY19mcmVlX2lycTsKKwllbmFibGVfaXJxICAgICAgICAgICA9IG1hY19lbmFibGVfaXJxOworCWRpc2FibGVfaXJxICAgICAgICAgID0gbWFjX2Rpc2FibGVfaXJxOworCW1hY2hfZ2V0X21vZGVsCSA9IG1hY19nZXRfbW9kZWw7CisJbWFjaF9kZWZhdWx0X2hhbmRsZXIgPSAmbWFjX2hhbmRsZXJzOworCW1hY2hfZ2V0X2lycV9saXN0ICAgID0gc2hvd19tYWNfaW50ZXJydXB0czsKKwltYWNoX2dldHRpbWVvZmZzZXQgICA9IG1hY19nZXR0aW1lb2Zmc2V0OworI3dhcm5pbmcgbW92ZSB0byBhZGIvdmlhIGluaXQKKyNpZiAwCisJbWFjaF9od2NsayAgICAgICAgICAgPSBtYWNfaHdjbGs7CisjZW5kaWYKKwltYWNoX3NldF9jbG9ja19tbXNzCSA9IG1hY19zZXRfY2xvY2tfbW1zczsKKwltYWNoX3Jlc2V0ICAgICAgICAgICA9IG1hY19yZXNldDsKKwltYWNoX2hhbHQgICAgICAgICAgICA9IG1hY19wb3dlcm9mZjsKKwltYWNoX3Bvd2VyX29mZiAgICAgICA9IG1hY19wb3dlcm9mZjsKKyNpZmRlZiBDT05GSUdfRFVNTVlfQ09OU09MRQorCWNvbnN3aXRjaHAJICAgICAgICAgPSAmZHVtbXlfY29uOworI2VuZGlmCisJbWFjaF9tYXhfZG1hX2FkZHJlc3MgPSAweGZmZmZmZmZmOworI2lmIDAKKwltYWNoX2RlYnVnX2luaXQJID0gbWFjX2RlYnVnX2luaXQ7CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19JTlBVVF9NNjhLX0JFRVApIHx8IGRlZmluZWQoQ09ORklHX0lOUFVUX002OEtfQkVFUF9NT0RVTEUpCisgICAgICAgIG1hY2hfYmVlcCAgICAgICAgICAgID0gbWFjX21rc291bmQ7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCisjaWYgMAorCW1hY2hfaGVhcnRiZWF0ID0gbWFjX2hlYXJ0YmVhdDsKKwltYWNoX2hlYXJ0YmVhdF9pcnEgPSBJUlFfTUFDX1RJTUVSOworI2VuZGlmCisjZW5kaWYKKworCS8qCisJICogRGV0ZXJtaW5lIGhhcmR3YXJlIHByZXNlbnQKKwkgKi8KKworCW1hY19pZGVudGlmeSgpOworCW1hY19yZXBvcnRfaGFyZHdhcmUoKTsKKworCS8qIEFGQUlLIG9ubHkgdGhlIElJY2kgdGFrZXMgYSBjYWNoZSBjYXJkLiAgVGhlIElJZnggaGFzIG9uYm9hcmQKKwkgICBjYWNoZSAuLi4gc29tZW9uZSBuZWVkcyB0byBmaWd1cmUgb3V0IGhvdyB0byB0ZWxsIGlmIGl0J3Mgb24gb3IKKwkgICBub3QuICovCisKKwlpZiAobWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgPT0gTUFDX01PREVMX0lJQ0kKKwkgICAgfHwgbWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgPT0gTUFDX01PREVMX0lJRlgpIHsKKwkJbWFjaF9sMl9mbHVzaCA9IG1hY19jYWNoZV9jYXJkX2ZsdXNoOworCX0KKworCS8qCisJICogQ2hlY2sgZm9yIG1hY2hpbmUgc3BlY2lmaWMgZml4dXBzLgorCSAqLworCisjaWZkZWYgT0xEX05VQlVTX0NPREUKKwkgbnVidXNfc3dlZXBfdmlkZW8oKTsKKyNlbmRpZgorfQorCisKKy8qCisgKglNYWNpbnRvc2ggVGFibGU6IGhhcmRjb2RlZCBtb2RlbCBjb25maWd1cmF0aW9uIGRhdGEuCisgKgorICoJTXVjaCBvZiB0aGlzIHdhcyBkZWZpbmVkIGJ5IEFsYW4sIGJhc2VkIG9uIHdobyBrbm93cyB3aGF0IGRvY3MuCisgKglJJ3ZlIGFkZGVkIGEgbG90IG1vcmUsIGFuZCBzb21lIG9mIHRoYXQgd2FzIHB1cmUgZ3Vlc3N3b3JrIGJhc2VkCisgKglvbiBoYXJkd2FyZSBwYWdlcyBwcmVzZW50IG9uIHRoZSBNYWMgd2ViIHNpdGUuIFBvc3NpYmx5IHdpbGRseQorICoJaW5hY2N1cmF0ZSwgc28gbG9vayBoZXJlIGlmIGEgbmV3IE1hYyBtb2RlbCB3b24ndCBydW4uIEV4YW1wbGU6IGlmCisgKglhIE1hYyBjcmFzaGVzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBWSUExIHJlZ2lzdGVycyBoYXZlIGJlZW4gZHVtcGVkCisgKgl0byB0aGUgc2NyZWVuLCBpdCBwcm9iYWJseSBkaWVkIGF0dGVtcHRpbmcgdG8gcmVhZCBEaXJCIG9uIGEgUkJWLgorICoJTWVhbmluZyBpdCBzaG91bGQgaGF2ZSBNQUNfVklBX0lJY2kgaGVyZSA6LSkKKyAqLworCitzdHJ1Y3QgbWFjX21vZGVsICptYWNpbnRvc2hfY29uZmlnOworRVhQT1JUX1NZTUJPTChtYWNpbnRvc2hfY29uZmlnKTsKKworc3RhdGljIHN0cnVjdCBtYWNfbW9kZWwgbWFjX2RhdGFfdGFibGVbXT0KK3sKKwkvKgorCSAqCVdlJ2xsIHByZXRlbmQgdG8gYmUgYSBNYWNpbnRvc2ggSUksIHRoYXQncyBwcmV0dHkgc2FmZS4KKwkgKi8KKworCXsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSSwKKwkJLm5hbWUJCT0gIlVua25vd24iLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lJLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sCisKKwkvKgorCSAqCU9yaWdpbmFsIE1hY0lJIGhhcmR3YXJlCisJICoKKwkgKi8KKworCXsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSSwKKwkJLm5hbWUJCT0gIklJIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9JSSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlYLAorCQkubmFtZQkJPSAiSUl4IiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9JSSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlDWCwKKwkJLm5hbWUJCT0gIklJY3giLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lJLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9TRTMwLAorCQkubmFtZQkJPSAiU0UvMzAiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lJLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sCisKKwkvKgorCSAqCVdlaXJkaWZpZWQgTWFjSUkgaGFyZHdhcmUgLSBhbGwgc3VidGxleSBkaWZmZXJlbnQuIEdlZSB0aGFua3MKKwkgKglBcHBsZS4gQWxsIHRoZXNlIGJveGVzIHNlZW0gdG8gaGF2ZSBWSUEyIGluIGEgZGlmZmVyZW50IHBsYWNlIHRvCisJICoJdGhlIE1hY0lJICgrMUEwMDAgcmF0aGVyIHRoYW4gKzQwMDApCisJICogQ1NBOiBzZWUgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vdGVjaG5vdGVzL2h3L2h3XzA5Lmh0bWwKKwkgKi8KKworCXsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSUNJLAorCQkubmFtZQkJPSAiSUljaSIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfSUksCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlGWCwKKwkJLm5hbWUJCT0gIklJZngiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lPUCwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lPUCwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlTSSwKKwkJLm5hbWUJCT0gIklJc2kiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lJU0ksCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlWSSwKKwkJLm5hbWUJCT0gIklJdmkiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lJU0ksCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlWWCwKKwkJLm5hbWUJCT0gIklJdngiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lJU0ksCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LAorCisJLyoKKwkgKglDbGFzc2ljIG1vZGVscyAoZ3Vlc3Npbmc6IHNpbWlsYXIgdG8gU0UvMzAgPz8gTm9wZSwgc2ltaWxhciB0byBMQyAuLi4pCisJICovCisKKwl7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfQ0xJSSwKKwkJLm5hbWUJCT0gIkNsYXNzaWMgSUkiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lJU0ksCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfQ0NMLAorCQkubmFtZQkJPSAiQ29sb3IgQ2xhc3NpYyIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVU30sCisKKwkvKgorCSAqCVNvbWUgTWFjIExDIG1hY2hpbmVzLiBCYXNpY2FsbHkgdGhlIHNhbWUgYXMgdGhlIElJY2ksIEFEQiBsaWtlIElJc2kKKwkgKi8KKworCXsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9MQywKKwkJLm5hbWUJCT0gIkxDIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9JSVNJLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX0xDSUksCisJCS5uYW1lCQk9ICJMQyBJSSIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfSUlTSSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9MQ0lJSSwKKwkJLm5hbWUJCT0gIkxDIElJSSIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfSUlTSSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sCisKKwkvKgorCSAqCVF1YWRyYS4gVmlkZW8gaXMgYXQgMHhGOTAwMDAwMCwgdmlhIGlzIGxpa2UgYSBNYWNJSS4gV2UgbGFiZWwgaXQgZGlmZmVyZW50bHkKKwkgKglhcyBzb21lIG9mIHRoZSBzdHVmZiBjb25uZWN0ZWQgdG8gVklBMiBzZWVtcyBkaWZmZXJlbnQuIEJldHRlciBTQ1NJIGNoaXAgYW5kCisJICoJb25ib2FyZCBldGhlcm5ldCB1c2luZyBhIE5hdFNlbWkgU09OSUMgZXhjZXB0IHRoZSA2NjBBViBhbmQgODQwQVYgd2hpY2ggdXNlIGFuCisJICoJQU1EIDc5Qzk0MCAoTUFDRSkuCisJICoJVGhlIDcwMCwgOTAwIGFuZCA5NTAgaGF2ZSBzb21lIEkvTyBjaGlwcyBpbiB0aGUgd3JvbmcgcGxhY2UgdG8KKwkgKgljb25mdXNlIHVzLiBUaGUgODQwQVYgaGFzIGEgU0NTSSBsb2NhdGlvbiBvZiBpdHMgb3duIChzYW1lIGFzCisJICoJdGhlIDY2MEFWKS4KKwkgKi8KKworCXsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9RNjA1LAorCQkubmFtZQkJPSAiUXVhZHJhIDYwNSIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9RNjA1X0FDQywKKwkJLm5hbWUJCT0gIlF1YWRyYSA2MDUiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTYxMCwKKwkJLm5hbWUJCT0gIlF1YWRyYSA2MTAiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lJLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCisJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9RNjMwLAorCQkubmFtZQkJPSAiUXVhZHJhIDYzMCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCisJCS5pZGVfdHlwZQk9IE1BQ19JREVfUVVBRFJBLAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKKwkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1E2NTAsCisJCS5uYW1lCQk9ICJRdWFkcmEgNjUwIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9JSSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LAorCS8qCVRoZSBRNzAwIGRvZXMgaGF2ZSBhIE5TIFNvbmljICovCisJeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1E3MDAsCisJCS5uYW1lCQk9ICJRdWFkcmEgNzAwIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9JSSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEyLAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKKwkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1E4MDAsCisJCS5uYW1lCQk9ICJRdWFkcmEgODAwIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9JSSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTg0MCwKKwkJLm5hbWUJCT0gIlF1YWRyYSA4NDBBViIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEzLAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1BTQywKKwkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfTUFDRSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTkwMCwKKwkJLm5hbWUJCT0gIlF1YWRyYSA5MDAiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lPUCwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEyLAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lPUCwKKwkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1E5NTAsCisJCS5uYW1lCQk9ICJRdWFkcmEgOTUwIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9JT1AsCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBMiwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19JT1AsCisJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sCisKKwkvKgorCSAqCVBlcmZvcm1hIC0gbW9yZSBMQyB0eXBlIG1hY2hpbmVzCisJICovCisKKwl7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDQ2MCwKKwkJLm5hbWUJCT0gICJQZXJmb3JtYSA0NjAiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lJU0ksCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDQ3NSwKKwkJLm5hbWUJCT0gICJQZXJmb3JtYSA0NzUiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNDc1RiwKKwkJLm5hbWUJCT0gICJQZXJmb3JtYSA0NzUiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNTIwLAorCQkubmFtZQkJPSAgIlBlcmZvcm1hIDUyMCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNTUwLAorCQkubmFtZQkJPSAgIlBlcmZvcm1hIDU1MCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sCisJLyogVGhlc2UgaGF2ZSB0aGUgY29tbSBzbG90LCBhbmQgdGhlcmVmb3JlIHRoZSBwb3NzaWJpbGl0eSBvZiBTT05JQyBldGhlcm5ldCAqLworCXsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNTc1LAorCQkubmFtZQkJPSAiUGVyZm9ybWEgNTc1IiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9DVURBLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKKwkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1A1ODgsCisJCS5uYW1lCQk9ICJQZXJmb3JtYSA1ODgiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAorCQkuaWRlX3R5cGUJPSBNQUNfSURFX1FVQURSQSwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKKwkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1RWLAorCQkubmFtZQkJPSAiVFYiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNjAwLAorCQkubmFtZQkJPSAiUGVyZm9ybWEgNjAwIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9JSVNJLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwKKworCS8qCisJICoJQ2VudHJpcyAtIGp1c3QgZ3Vlc3NpbmcgYWdhaW47IG1heWJlIGxpa2UgUXVhZHJhCisJICovCisKKwkvKiBUaGUgQzYxMCBtYXkgb3IgbWF5IG5vdCBoYXZlIFNPTklDLiAgV2UgcHJvYmUgdG8gbWFrZSBzdXJlICovCisJeworCQkuaWRlbnQJCT0gTUFDX01PREVMX0M2MTAsCisJCS5uYW1lCQk9ICJDZW50cmlzIDYxMCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfSUksCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKKwkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX0M2NTAsCisJCS5uYW1lCQk9ICJDZW50cmlzIDY1MCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfSUksCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKKwkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX0M2NjAsCisJCS5uYW1lCQk9ICJDZW50cmlzIDY2MEFWIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9DVURBLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQTMsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUFNDLAorCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9NQUNFLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sCisKKwkvKgorCSAqIFRoZSBQb3dlckJvb2tzIGFsbCB0aGUgc2FtZSAiQ29tYm8iIGN1c3RvbSBJQyBmb3IgU0NTSSBhbmQgU0NDCisJICogYW5kIGEgUE1VIChpbiB0d28gdmFyaWF0aW9ucz8pIGZvciBBREIuIE1vc3Qgb2YgdGhlbSB1c2UgdGhlCisJICogUXVhZHJhLXN0eWxlIFZJQXMuIEEgZmV3IG1vZGVscyBhbHNvIGhhdmUgSURFIGZyb20gaGVsbC4KKwkgKi8KKworCXsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE0MCwKKwkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNDAiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX1BCMSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE0NSwKKwkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNDUiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX1BCMSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE1MCwKKwkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNTAiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX1BCMSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuaWRlX3R5cGUJPSBNQUNfSURFX1BCLAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNjAsCisJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTYwIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9QQjEsCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNjUsCisJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTY1IiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9QQjEsCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNjVDLAorCQkubmFtZQkJPSAiUG93ZXJCb29rIDE2NWMiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX1BCMSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE3MCwKKwkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNzAiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX1BCMSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE4MCwKKwkJLm5hbWUJCT0gIlBvd2VyQm9vayAxODAiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX1BCMSwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE4MEMsCisJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTgwYyIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIxLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTkwLAorCQkubmFtZQkJPSAiUG93ZXJCb29rIDE5MCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIyLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLmlkZV90eXBlCT0gTUFDX0lERV9CQUJPT04sCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjUyMCwKKwkJLm5hbWUJCT0gIlBvd2VyQm9vayA1MjAiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX1BCMiwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LAorCisJLyoKKwkgKiBQb3dlckJvb2sgRHVvcyBhcmUgcHJldHR5IG11Y2ggbGlrZSBub3JtYWwgUG93ZXJCb29rcworCSAqIEFsbCBvZiB0aGVzZSBwcm9iYWJseSBoYXZlIG9uYm9hcmQgU09OSUMgaW4gdGhlIERvY2sgd2hpY2gKKwkgKiBtZWFucyB3ZSdsbCBoYXZlIHRvIHByb2JlIGZvciBpdCBldmVudHVhbGx5LgorCSAqCisJICogQXJlIHRoZXNlIHJlYWxsbHkgTUFDX1ZJQV9JSWNpPyBUaGUgZGV2ZWxvcGVyIG5vdGVzIGZvciB0aGUKKwkgKiBEdW9zIHNob3cgcHJldHR5IG11Y2ggdGhlIHNhbWUgY3VzdG9tIHBhcnRzIGFzIGluIG1vc3Qgb2YKKwkgKiB0aGUgb3RoZXIgUG93ZXJCb29rcyB3aGljaCB3b3VsZCBpbXBseSBNQUNfVklBX1FVQURSQS4KKwkgKi8KKworCXsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjIxMCwKKwkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjEwIiwKKwkJLmFkYl90eXBlCT0gTUFDX0FEQl9QQjIsCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJfSwgeworCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjMwLAorCQkubmFtZQkJPSAiUG93ZXJCb29rIER1byAyMzAiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX1BCMiwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyNTAsCisJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDI1MCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIyLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjI3MEMsCisJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDI3MGMiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX1BCMiwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LCB7CisJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyODAsCisJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDI4MCIsCisJCS5hZGJfdHlwZQk9IE1BQ19BREJfUEIyLAorCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjI4MEMsCisJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDI4MGMiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX1BCMiwKKwkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwl9LAorCisJLyoKKwkgKglPdGhlciBzdHVmZiA/PworCSAqLworCXsKKwkJLmlkZW50CQk9IC0xCisJfQorfTsKKwordm9pZCBtYWNfaWRlbnRpZnkodm9pZCkKK3sKKwlzdHJ1Y3QgbWFjX21vZGVsICptOworCisJLyogUGVuZ3VpbiBkYXRhIHVzZWZ1bD8gKi8KKwlpbnQgbW9kZWwgPSBtYWNfYmlfZGF0YS5pZDsKKwlpZiAoIW1vZGVsKSB7CisJCS8qIG5vIGJvb3RpbmZvIG1vZGVsIGlkIC0+IE5ldEJTRCBib290ZXIgd2FzIHVzZWQhICovCisJCS8qIFhYWCBGSVhNRTogYnJlYWtzIGZvciBtb2RlbCA+IDMxICovCisJCW1vZGVsPShtYWNfYmlfZGF0YS5jcHVpZD4+MikmNjM7CisJCXByaW50ayAoS0VSTl9XQVJOSU5HICJObyBib290aW5mbyBtb2RlbCBJRCwgdXNpbmcgY3B1aWQgaW5zdGVhZCAoaGV5LCB1c2UgUGVuZ3VpbiEpXG4iKTsKKwl9CisKKwltYWNpbnRvc2hfY29uZmlnID0gbWFjX2RhdGFfdGFibGU7CisJZm9yIChtID0gbWFjaW50b3NoX2NvbmZpZyA7IG0tPmlkZW50ICE9IC0xIDsgbSsrKSB7CisJCWlmIChtLT5pZGVudCA9PSBtb2RlbCkgeworCQkJbWFjaW50b3NoX2NvbmZpZyA9IG07CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIFdlIG5lZWQgdG8gcHJlLWluaXQgdGhlIElPUHMsIGlmIGFueS4gT3RoZXJ3aXNlICovCisJLyogdGhlIHNlcmlhbCBjb25zb2xlIHdvbid0IHdvcmsgaWYgdGhlIHVzZXIgaGFkICAgKi8KKwkvKiB0aGUgc2VyaWFsIHBvcnRzIHNldCB0byAiRmFzdGVyIiBtb2RlIGluIE1hY09TLiAqLworCisJaW9wX3ByZWluaXQoKTsKKwltYWNfZGVidWdfaW5pdCgpOworCisJcHJpbnRrIChLRVJOX0lORk8gIkRldGVjdGVkIE1hY2ludG9zaCBtb2RlbDogJWQgXG4iLCBtb2RlbCk7CisKKwkvKgorCSAqIFJlcG9ydCBib290ZXIgZGF0YToKKwkgKi8KKwlwcmludGsgKEtFUk5fREVCVUcgIiBQZW5ndWluIGJvb3RpbmZvIGRhdGE6XG4iKTsKKwlwcmludGsgKEtFUk5fREVCVUcgIiBWaWRlbzogYWRkciAweCVseCByb3cgMHglbHggZGVwdGggJWx4IGRpbWVuc2lvbnMgJWxkIHggJWxkXG4iLAorCQltYWNfYmlfZGF0YS52aWRlb2FkZHIsIG1hY19iaV9kYXRhLnZpZGVvcm93LAorCQltYWNfYmlfZGF0YS52aWRlb2RlcHRoLCBtYWNfYmlfZGF0YS5kaW1lbnNpb25zICYgMHhGRkZGLAorCQltYWNfYmlfZGF0YS5kaW1lbnNpb25zID4+IDE2KTsKKwlwcmludGsgKEtFUk5fREVCVUcgIiBWaWRlb2xvZ2ljYWwgMHglbHggcGh5cy4gMHglbHgsIFNDQyBhdCAweCVseCBcbiIsCisJCW1hY19iaV9kYXRhLnZpZGVvbG9naWNhbCwgbWFjX29yaWdfdmlkZW9hZGRyLAorCQltYWNfYmlfZGF0YS5zY2NiYXNlKTsKKwlwcmludGsgKEtFUk5fREVCVUcgIiBCb290dGltZTogMHglbHggR01UQmlhczogMHglbHggXG4iLAorCQltYWNfYmlfZGF0YS5ib290dGltZSwgbWFjX2JpX2RhdGEuZ210Ymlhcyk7CisJcHJpbnRrIChLRVJOX0RFQlVHICIgTWFjaGluZSBJRDogJWxkIENQVWlkOiAweCVseCBtZW1vcnkgc2l6ZTogMHglbHggXG4iLAorCQltYWNfYmlfZGF0YS5pZCwgbWFjX2JpX2RhdGEuY3B1aWQsIG1hY19iaV9kYXRhLm1lbXNpemUpOworI2lmIDAKKwlwcmludGsgKCJSYW1kaXNrOiBhZGRyIDB4JWx4IHNpemUgMHglbHhcbiIsCisJCW02OGtfcmFtZGlzay5hZGRyLCBtNjhrX3JhbWRpc2suc2l6ZSk7CisjZW5kaWYKKworCS8qCisJICogVE9ETzogc2V0IHRoZSB2YXJpb3VzIGZpZWxkcyBpbiBtYWNpbnRvc2hfY29uZmlnLT5od19wcmVzZW50IGhlcmUhCisJICovCisJc3dpdGNoIChtYWNpbnRvc2hfY29uZmlnLT5zY3NpX3R5cGUpIHsKKwljYXNlIE1BQ19TQ1NJX09MRDoKKwkgIE1BQ0hXX1NFVChNQUNfU0NTSV84MCk7CisJICBicmVhazsKKwljYXNlIE1BQ19TQ1NJX1FVQURSQToKKwljYXNlIE1BQ19TQ1NJX1FVQURSQTI6CisJY2FzZSBNQUNfU0NTSV9RVUFEUkEzOgorCSAgTUFDSFdfU0VUKE1BQ19TQ1NJXzk2KTsKKwkgIGlmICgobWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgPT0gTUFDX01PREVMX1E5MDApIHx8CisJICAgICAgKG1hY2ludG9zaF9jb25maWctPmlkZW50ID09IE1BQ19NT0RFTF9ROTUwKSkKKwkgICAgTUFDSFdfU0VUKE1BQ19TQ1NJXzk2XzIpOworCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIHByaW50ayhLRVJOX1dBUk5JTkcgImNvbmZpZy5jOiB3dGY6IHVua25vd24gc2NzaSwgdXNpbmcgNTNjODBcbiIpOworCSAgTUFDSFdfU0VUKE1BQ19TQ1NJXzgwKTsKKwkgIGJyZWFrOworCisJfQorCWlvcF9pbml0KCk7CisJdmlhX2luaXQoKTsKKwlvc3NfaW5pdCgpOworCXBzY19pbml0KCk7CisJYmFib29uX2luaXQoKTsKK30KKwordm9pZCBtYWNfcmVwb3J0X2hhcmR3YXJlKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiQXBwbGUgTWFjaW50b3NoICVzXG4iLCBtYWNpbnRvc2hfY29uZmlnLT5uYW1lKTsKK30KKworc3RhdGljIHZvaWQgbWFjX2dldF9tb2RlbChjaGFyICpzdHIpCit7CisJc3RyY3B5KHN0ciwiTWFjaW50b3NoICIpOworCXN0cmNhdChzdHIsIG1hY2ludG9zaF9jb25maWctPm5hbWUpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9kZWJ1Zy5jIGIvYXJjaC9tNjhrL21hYy9kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNjJlZDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbWFjL2RlYnVnLmMKQEAgLTAsMCArMSwzOTggQEAKKy8qCisgKiBsaW51eC9hcmNoL202OGsvbWFjL2RlYnVnLmMKKyAqCisgKiBTaGFtZWxlc3NseSBzdG9sZW4gKFNDQyBjb2RlIGFuZCBnZW5lcmFsIGZyYW1ld29yaykgZnJvbToKKyAqCisgKiBsaW51eC9hcmNoL202OGsvYXRhcmkvZGVidWcuYworICoKKyAqIEF0YXJpIGRlYnVnZ2luZyBhbmQgc2VyaWFsIGNvbnNvbGUgc3R1ZmYKKyAqCisgKiBBc3NlbWJsZWQgb2YgcGFydHMgb2YgZm9ybWVyIGF0YXJpL2NvbmZpZy5jIDk3LTEyLTE4IGJ5IFJvbWFuIEhvZGVrCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjZGVmaW5lIEJPT1RJTkZPX0NPTVBBVF8xXzAKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaHcuaD4KKyNpbmNsdWRlIDxhc20vbWFjaW50cy5oPgorCitleHRlcm4gY2hhciBtNjhrX2RlYnVnX2RldmljZVtdOworCitleHRlcm4gc3RydWN0IGNvbXBhdF9ib290aW5mbyBjb21wYXRfYm9vdF9pbmZvOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBtYWNfdmlkZW9iYXNlOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWFjX3ZpZGVvZGVwdGg7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtYWNfcm93Ynl0ZXM7CisKK2V4dGVybiB2b2lkIG1hY19zZXJpYWxfcHJpbnQoY29uc3QgY2hhciAqKTsKKworI2RlZmluZSBERUJVR19IRUFEUworI3VuZGVmIERFQlVHX1NDUkVFTgorI2RlZmluZSBERUJVR19TRVJJQUwKKworLyoKKyAqIFRoZXNlIHR3byBhdXhpbGlhcnkgZGVidWcgZnVuY3Rpb25zIHNob3VsZCBnbyBhd2F5IEFTQVAuIE9ubHkgdXNhZ2U6CisgKiBiZWZvcmUgdGhlIGNvbnNvbGUgb3V0cHV0IGlzIHVwIChhZnRlciBoZWFkLlMgY29tZSBzb21lIG90aGVyIGNydWNpYWwKKyAqIHNldHVwIHJvdXRpbmVzIDotKSBpdCBwZXJtaXRzIHdyaXRpbmcgJ2RhdGEnIHRvIHRoZSBzY3JlZW4gYXMgYml0IHBhdHRlcm5zCisgKiAoZ29vZCBsdWNrIHJlYWRpbmcgdGhvc2UpLiBIZWxwZWQgdG8gZmlndXJlIHRoYXQgdGhlIGJvb3RpbmZvIGNvbnRhaW5lZAorICogZ2FyYmFnZSBkYXRhIG9uIHRoZSBhbW91bnQgYW5kIHNpemUgb2YgbWVtb3J5IGNodW5rcyAuLi4KKyAqCisgKiBUaGUgJ3BvcycgYXJndW1lbnQgbm93IHNpbXBseSBtZWFucyAnbGluZWZlZWQgYWZ0ZXIgcHJpbnQnIC4uLgorICovCisKKyNpZmRlZiBERUJVR19TQ1JFRU4KK3N0YXRpYyBpbnQgcGVuZz0wLCBsaW5lPTA7CisjZW5kaWYKKwordm9pZCBtYWNfZGVidWdnaW5nX3Nob3J0KGludCBwb3MsIHNob3J0IG51bSkKK3sKKyNpZmRlZiBERUJVR19TQ1JFRU4KKwl1bnNpZ25lZCBjaGFyICpwZW5nb2Zmc2V0OworCXVuc2lnbmVkIGNoYXIgKnBwdHI7CisJaW50IGk7CisjZW5kaWYKKworI2lmZGVmIERFQlVHX1NFUklBTAorCXByaW50aygiZGVidWc6ICVkICFcbiIsIG51bSk7CisjZW5kaWYKKworI2lmZGVmIERFQlVHX1NDUkVFTgorCWlmICghTUFDSF9JU19NQUMpIHsKKwkJLyogcHJpbnRrKCJkZWJ1ZzogJWQgIVxuIiwgbnVtKTsgKi8KKwkJcmV0dXJuOworCX0KKworCS8qIGNhbGN1bGF0ZSBjdXJyZW50IG9mZnNldCAqLworCXBlbmdvZmZzZXQ9KHVuc2lnbmVkIGNoYXIgKikobWFjX3ZpZGVvYmFzZSsoMTUwK2xpbmUqMikqbWFjX3Jvd2J5dGVzKQorCQkgICAgKzgwKnBlbmc7CisKKwlwcHRyPXBlbmdvZmZzZXQ7CisKKwlmb3IoaT0wO2k8OCpzaXplb2Yoc2hvcnQpO2krKykgLyogIyBvZiBiaXRzICovCisJeworCQkvKiAgICAgICAgdmFsdWUgICAgICAgIG1hc2sgZm9yIGJpdCBpLCByZXZlcnNlIG9yZGVyICovCisJCSpwcHRyKysgPSAobnVtICYgKCAxIDw8ICg4KnNpemVvZihzaG9ydCktaS0xKSApID8gMHhGRiA6IDB4MDApOworCX0KKworCXBlbmcrKzsKKworCWlmIChwb3MpIHsKKwkJbGluZSsrOworCQlwZW5nID0gMDsKKwl9CisjZW5kaWYKK30KKwordm9pZCBtYWNfZGVidWdnaW5nX2xvbmcoaW50IHBvcywgbG9uZyBhZGRyKQoreworI2lmZGVmIERFQlVHX1NDUkVFTgorCXVuc2lnbmVkIGNoYXIgKnBlbmdvZmZzZXQ7CisJdW5zaWduZWQgY2hhciAqcHB0cjsKKwlpbnQgaTsKKyNlbmRpZgorCisjaWZkZWYgREVCVUdfU0VSSUFMCisJcHJpbnRrKCJkZWJ1ZzogIyVsZCAhXG4iLCBhZGRyKTsKKyNlbmRpZgorCisjaWZkZWYgREVCVUdfU0NSRUVOCisJaWYgKCFNQUNIX0lTX01BQykgeworCQkvKiBwcmludGsoImRlYnVnOiAjJWxkICFcbiIsIGFkZHIpOyAqLworCQlyZXR1cm47CisJfQorCisJcGVuZ29mZnNldD0odW5zaWduZWQgY2hhciAqKShtYWNfdmlkZW9iYXNlKygxNTArbGluZSoyKSptYWNfcm93Ynl0ZXMpCisJCSAgICArODAqcGVuZzsKKworCXBwdHI9cGVuZ29mZnNldDsKKworCWZvcihpPTA7aTw4KnNpemVvZihsb25nKTtpKyspIC8qICMgb2YgYml0cyAqLworCXsKKwkJKnBwdHIrKyA9IChhZGRyICYgKCAxIDw8ICg4KnNpemVvZihsb25nKS1pLTEpICkgPyAweEZGIDogMHgwMCk7CisJfQorCisJcGVuZysrOworCisJaWYgKHBvcykgeworCQlsaW5lKys7CisJCXBlbmcgPSAwOworCX0KKyNlbmRpZgorfQorCisjaWZkZWYgREVCVUdfU0VSSUFMCisvKgorICogVE9ETzogc2VyaWFsIGRlYnVnIGNvZGUKKyAqLworCitzdHJ1Y3QgbWFjX1NDQworIHsKKyAgdV9jaGFyIGNoYV9iX2N0cmw7CisgIHVfY2hhciBjaGFyX2R1bW15MTsKKyAgdV9jaGFyIGNoYV9hX2N0cmw7CisgIHVfY2hhciBjaGFyX2R1bW15MjsKKyAgdV9jaGFyIGNoYV9iX2RhdGE7CisgIHVfY2hhciBjaGFyX2R1bW15MzsKKyAgdV9jaGFyIGNoYV9hX2RhdGE7CisgfTsKKworIyBkZWZpbmUgc2NjICgqKCh2b2xhdGlsZSBzdHJ1Y3QgbWFjX1NDQyopbWFjX2JpX2RhdGEuc2NjYmFzZSkpCisKKy8qIEZsYWcgdGhhdCBzZXJpYWwgcG9ydCBpcyBhbHJlYWR5IGluaXRpYWxpemVkIGFuZCB1c2VkICovCitpbnQgbWFjX1NDQ19pbml0X2RvbmU7CisvKiBDYW4gYmUgc2V0IHNvbWV3aGVyZSwgaWYgYSBTQ0MgbWFzdGVyIHJlc2V0IGhhcyBhbHJlYWR5IGJlIGRvbmUgYW5kIHNob3VsZAorICogbm90IGJlIHJlcGVhdGVkOyB1c2VkIGJ5IGtnZGIgKi8KK2ludCBtYWNfU0NDX3Jlc2V0X2RvbmU7CisKK3N0YXRpYyBpbnQgc2NjX3BvcnQgPSAtMTsKKworc3RhdGljIHN0cnVjdCBjb25zb2xlIG1hY19jb25zb2xlX2RyaXZlciA9IHsKKwkubmFtZSA9CQkiZGVidWciLAorCS5mbGFncyA9CUNPTl9QUklOVEJVRkZFUiwKKwkuaW5kZXggPQktMSwKK307CisKKy8qCisgKiBDcnVkZSBoYWNrIHRvIGdldCBjb25zb2xlIG91dHB1dCB0byB0aGUgc2NyZWVuIGJlZm9yZSB0aGUgZnJhbWVidWZmZXIKKyAqIGlzIGluaXRpYWxpemVkIChoYXBwZW5zIGEgbG90IGxhdGVyIGluIDIuMSEpLgorICogV2UganVzdCB1c2UgdGhlIGNvbnNvbGUgcm91dGluZXMgZGVjbGFyZWQgaW4gaGVhZC5TLCB0aGlzIHdpbGwgaW50ZXJmZXJlCisgKiB3aXRoIHJlZ3VsYXIgZnJhbWVidWZmZXIgY29uc29sZSBvdXRwdXQgYW5kIHNob3VsZCBiZSB1c2VkIGV4Y2x1c2l2ZWx5CisgKiB0byBkZWJ1ZyBrZXJuZWwgcHJvYmxlbXMgbWFuaWZlc3RpbmcgYmVmb3JlIGZyYW1lYnVmZmVyIGluaXQgKGFrYSBXU09EKQorICoKKyAqIFRvIGtlZXAgdGhpcyBoYWNrIGZyb20gaW50ZXJmZXJpbmcgd2l0aCB0aGUgcmVndWxhciBjb25zb2xlIGRyaXZlciwgZWl0aGVyCisgKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIGJlZm9yZS9vbiBmcmFtZWJ1ZmZlciBjb25zb2xlIGluaXQsIG9yIHNpbGVuY2UgdGhpcworICogZnVuY3Rpb24gYWZ0ZXIgdGhlIGZiY29uIGRyaXZlciBpcyBydW5uaW5nICh3aWxsIGxvc2UgY29uc29sZSBtZXNzYWdlcyE/KS4KKyAqIFRvIGRlYnVnIHJlYWwgZWFybHkgYnVncywgbmVlZCB0byB3cml0ZSBhICdtYWNfcmVnaXN0ZXJfY29uc29sZV9oYWNrKCknCisgKiB0aGF0IGlzIGNhbGxlZCBmcm9tIHN0YXJ0X2tlcm5lbCgpIGJlZm9yZSBzZXR1cF9hcmNoKCkgYW5kIGp1c3QgcmVnaXN0ZXJzCisgKiB0aGlzIGRyaXZlciBpZiBNYWMuCisgKi8KKwordm9pZCBtYWNfZGVidWdfY29uc29sZV93cml0ZSAoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzdHIsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJbWFjX3NlcmlhbF9wcmludChzdHIpOworfQorCisKKworLyogTWFjOiBsb29wc19wZXJfamlmZnkgbWluLiAxOTAwMCBePSAuNSB1czsgTUZQREVMQVkgd2FzIDAuNiB1cyovCisKKyNkZWZpbmUgdVNFQyAxCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYWNfc2NjYl9vdXQgKGNoYXIgYykKK3sKKyAgICBpbnQgaTsKKyAgICBkbyB7CisJZm9yKCBpID0gdVNFQzsgaSA+IDA7IC0taSApCisJCWJhcnJpZXIoKTsKKyAgICB9IHdoaWxlICghKHNjYy5jaGFfYl9jdHJsICYgMHgwNCkpOyAvKiB3YWl0IGZvciB0eCBidWYgZW1wdHkgKi8KKyAgICBmb3IoIGkgPSB1U0VDOyBpID4gMDsgLS1pICkKKwliYXJyaWVyKCk7CisgICAgc2NjLmNoYV9iX2RhdGEgPSBjOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFjX3NjY2Ffb3V0IChjaGFyIGMpCit7CisgICAgaW50IGk7CisgICAgZG8geworCWZvciggaSA9IHVTRUM7IGkgPiAwOyAtLWkgKQorCQliYXJyaWVyKCk7CisgICAgfSB3aGlsZSAoIShzY2MuY2hhX2FfY3RybCAmIDB4MDQpKTsgLyogd2FpdCBmb3IgdHggYnVmIGVtcHR5ICovCisgICAgZm9yKCBpID0gdVNFQzsgaSA+IDA7IC0taSApCisJYmFycmllcigpOworICAgIHNjYy5jaGFfYV9kYXRhID0gYzsKK30KKwordm9pZCBtYWNfc2NjYl9jb25zb2xlX3dyaXRlIChzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnN0ciwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICB3aGlsZSAoY291bnQtLSkgeworCWlmICgqc3RyID09ICdcbicpCisJICAgIG1hY19zY2NiX291dCggJ1xyJyApOworCW1hY19zY2NiX291dCggKnN0cisrICk7CisgICAgfQorfQorCit2b2lkIG1hY19zY2NhX2NvbnNvbGVfd3JpdGUgKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqc3RyLAorCQkJICAgICAgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIHdoaWxlIChjb3VudC0tKSB7CisJaWYgKCpzdHIgPT0gJ1xuJykKKwkgICAgbWFjX3NjY2Ffb3V0KCAnXHInICk7CisJbWFjX3NjY2Ffb3V0KCAqc3RyKysgKTsKKyAgICB9Cit9CisKKworLyogVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGRvIGEgcXVpY2snbidkaXJ0eSBpbml0aWFsaXphdGlvbiBvZiB0aGUgTUZQIG9yCisgKiBTQ0Mgc2VyaWFsIHBvcnRzLiBUaGV5J3JlIHVzZWQgYnkgdGhlIGRlYnVnZ2luZyBpbnRlcmZhY2UsIGtnZGIsIGFuZCB0aGUKKyAqIHNlcmlhbCBjb25zb2xlIGNvZGUuICovCisjZGVmaW5lIFNDQ0JfV1JJVEUocmVnLHZhbCkJCQkJXAorICAgIGRvIHsJCQkJCQlcCisJaW50IGk7CQkJCQkJXAorCXNjYy5jaGFfYl9jdHJsID0gKHJlZyk7CQkJCVwKKwlmb3IoIGkgPSB1U0VDOyBpID4gMDsgLS1pICkJCQlcCisJCWJhcnJpZXIoKTsJCQkJXAorCXNjYy5jaGFfYl9jdHJsID0gKHZhbCk7CQkJCVwKKwlmb3IoIGkgPSB1U0VDOyBpID4gMDsgLS1pICkJCQlcCisJCWJhcnJpZXIoKTsJCQkJXAorICAgIH0gd2hpbGUoMCkKKworI2RlZmluZSBTQ0NBX1dSSVRFKHJlZyx2YWwpCQkJCVwKKyAgICBkbyB7CQkJCQkJXAorCWludCBpOwkJCQkJCVwKKwlzY2MuY2hhX2FfY3RybCA9IChyZWcpOwkJCQlcCisJZm9yKCBpID0gdVNFQzsgaSA+IDA7IC0taSApCQkJXAorCQliYXJyaWVyKCk7CQkJCVwKKwlzY2MuY2hhX2FfY3RybCA9ICh2YWwpOwkJCQlcCisJZm9yKCBpID0gdVNFQzsgaSA+IDA7IC0taSApCQkJXAorCQliYXJyaWVyKCk7CQkJCVwKKyAgICB9IHdoaWxlKDApCisKKy8qIGxvb3BzX3Blcl9qaWZmeSBpc24ndCBpbml0aWFsaXplZCB5ZXQsIHNvIHdlIGNhbid0IHVzZSB1ZGVsYXkoKS4gVGhpcyBkb2VzIGEKKyAqIGRlbGF5IG9mIH4gNjB1cy4gKi8KKy8qIE1hYzogbG9vcHNfcGVyX2ppZmZ5IG1pbi4gMTkwMDAgXj0gLjUgdXM7IE1GUERFTEFZIHdhcyAwLjYgdXMqLworI2RlZmluZSBMT05HX0RFTEFZKCkJCQkJXAorICAgIGRvIHsJCQkJCVwKKwlpbnQgaTsJCQkJCVwKKwlmb3IoIGkgPSA2MCp1U0VDOyBpID4gMDsgLS1pICkJCVwKKwkgICAgYmFycmllcigpOwkJCQlcCisgICAgfSB3aGlsZSgwKQorCisjaWZuZGVmIENPTkZJR19TRVJJQUxfQ09OU09MRQorc3RhdGljIHZvaWQgX19pbml0IG1hY19pbml0X3NjY19wb3J0KCBpbnQgY2ZsYWcsIGludCBwb3J0ICkKKyNlbHNlCit2b2lkIG1hY19pbml0X3NjY19wb3J0KCBpbnQgY2ZsYWcsIGludCBwb3J0ICkKKyNlbmRpZgoreworCWV4dGVybiBpbnQgbWFjX1NDQ19yZXNldF9kb25lOworCisJLyoKKwkgKiBiYXVkIHJhdGVzOiAxMjAwLCAxODAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOS4yaywgMzguNGssIDU3LjZrLCAxMTUuMmsKKwkgKi8KKworCXN0YXRpYyBpbnQgY2xrc3JjX3RhYmxlWzldID0KKwkJLyogcmVnIDExOiAweDUwID0gQlJHLCAweDAwID0gUlR4QywgMHgyOCA9IFRSeEMgKi8KKwkJeyAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDAwLCAweDAwIH07CisJc3RhdGljIGludCBjbGttb2RlX3RhYmxlWzldID0KKwkJLyogcmVnIDQ6IDB4NDAgPSB4MTYsIDB4ODAgPSB4MzIsIDB4YzAgPSB4NjQgKi8KKwkJeyAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweDQwLCAweGMwLCAweDgwIH07CisJc3RhdGljIGludCBkaXZfdGFibGVbOV0gPQorCQkvKiByZWcxMiAoQlJHIGxvdykgKi8KKwkJeyA5NCwgNjIsIDQ2LCAyMiwgMTAsIDQsIDEsIDAsIDAgfTsKKworICAgIGludCBiYXVkID0gY2ZsYWcgJiBDQkFVRDsKKyAgICBpbnQgY2xrc3JjLCBjbGttb2RlLCBkaXYsIHJlZzMsIHJlZzU7CisKKyAgICBpZiAoY2ZsYWcgJiBDQkFVREVYKQorCWJhdWQgKz0gQjM4NDAwOworICAgIGlmIChiYXVkIDwgQjEyMDAgfHwgYmF1ZCA+IEIzODQwMCsyKQorCWJhdWQgPSBCOTYwMDsgLyogdXNlIGRlZmF1bHQgOTYwMGJwcyBmb3Igbm9uLWltcGxlbWVudGVkIHJhdGVzICovCisgICAgYmF1ZCAtPSBCMTIwMDsgLyogdGFibGVzIHN0YXJ0cyBhdCAxMjAwYnBzICovCisKKyAgICBjbGtzcmMgID0gY2xrc3JjX3RhYmxlW2JhdWRdOworICAgIGNsa21vZGUgPSBjbGttb2RlX3RhYmxlW2JhdWRdOworICAgIGRpdiAgICAgPSBkaXZfdGFibGVbYmF1ZF07CisKKyAgICByZWczID0gKCgoY2ZsYWcgJiBDU0laRSkgPT0gQ1M4KSA/IDB4YzAgOiAweDQwKTsKKyAgICByZWc1ID0gKCgoY2ZsYWcgJiBDU0laRSkgPT0gQ1M4KSA/IDB4NjAgOiAweDIwKSB8IDB4ODIgLyogYXNzZXJ0IERUUi9SVFMgKi87CisKKyAgICBpZiAocG9ydCA9PSAxKSB7CisJICAgICh2b2lkKXNjYy5jaGFfYl9jdHJsOwkvKiByZXNldCByZWcgcG9pbnRlciAqLworCSAgICBTQ0NCX1dSSVRFKCA5LCAweGMwICk7CS8qIHJlc2V0ICovCisJICAgIExPTkdfREVMQVkoKTsJCS8qIGV4dHJhIGRlbGF5IGFmdGVyIFdSOSBhY2Nlc3MgKi8KKwkgICAgU0NDQl9XUklURSggNCwgKGNmbGFnICYgUEFSRU5CKSA/ICgoY2ZsYWcgJiBQQVJPREQpID8gMHgwMSA6IDB4MDMpIDogMCB8CisJCQkgIDB4MDQgLyogMSBzdG9wYml0ICovIHwKKwkJCSAgY2xrbW9kZSApOworCSAgICBTQ0NCX1dSSVRFKCAzLCByZWczICk7CisJICAgIFNDQ0JfV1JJVEUoIDUsIHJlZzUgKTsKKwkgICAgU0NDQl9XUklURSggOSwgMCApOwkJLyogbm8gaW50ZXJydXB0cyAqLworCSAgICBMT05HX0RFTEFZKCk7CQkvKiBleHRyYSBkZWxheSBhZnRlciBXUjkgYWNjZXNzICovCisJICAgIFNDQ0JfV1JJVEUoIDEwLCAwICk7CS8qIE5SWiBtb2RlICovCisJICAgIFNDQ0JfV1JJVEUoIDExLCBjbGtzcmMgKTsJLyogbWFpbiBjbG9jayBzb3VyY2UgKi8KKwkgICAgU0NDQl9XUklURSggMTIsIGRpdiApOwkvKiBCUkcgdmFsdWUgKi8KKwkgICAgU0NDQl9XUklURSggMTMsIDAgKTsJCS8qIEJSRyBoaWdoIGJ5dGUgKi8KKwkgICAgU0NDQl9XUklURSggMTQsIDEgKTsKKwkgICAgU0NDQl9XUklURSggMywgcmVnMyB8IDEgKTsKKwkgICAgU0NDQl9XUklURSggNSwgcmVnNSB8IDggKTsKKyAgICB9IGVsc2UgaWYgKHBvcnQgPT0gMCkgeworCSAgICAodm9pZClzY2MuY2hhX2FfY3RybDsJLyogcmVzZXQgcmVnIHBvaW50ZXIgKi8KKwkgICAgU0NDQV9XUklURSggOSwgMHhjMCApOwkvKiByZXNldCAqLworCSAgICBMT05HX0RFTEFZKCk7CQkvKiBleHRyYSBkZWxheSBhZnRlciBXUjkgYWNjZXNzICovCisJICAgIFNDQ0FfV1JJVEUoIDQsIChjZmxhZyAmIFBBUkVOQikgPyAoKGNmbGFnICYgUEFST0REKSA/IDB4MDEgOiAweDAzKSA6IDAgfAorCQkJICAweDA0IC8qIDEgc3RvcGJpdCAqLyB8CisJCQkgIGNsa21vZGUgKTsKKwkgICAgU0NDQV9XUklURSggMywgcmVnMyApOworCSAgICBTQ0NBX1dSSVRFKCA1LCByZWc1ICk7CisJICAgIFNDQ0FfV1JJVEUoIDksIDAgKTsJCS8qIG5vIGludGVycnVwdHMgKi8KKwkgICAgTE9OR19ERUxBWSgpOwkJLyogZXh0cmEgZGVsYXkgYWZ0ZXIgV1I5IGFjY2VzcyAqLworCSAgICBTQ0NBX1dSSVRFKCAxMCwgMCApOwkvKiBOUlogbW9kZSAqLworCSAgICBTQ0NBX1dSSVRFKCAxMSwgY2xrc3JjICk7CS8qIG1haW4gY2xvY2sgc291cmNlICovCisJICAgIFNDQ0FfV1JJVEUoIDEyLCBkaXYgKTsJLyogQlJHIHZhbHVlICovCisJICAgIFNDQ0FfV1JJVEUoIDEzLCAwICk7CQkvKiBCUkcgaGlnaCBieXRlICovCisJICAgIFNDQ0FfV1JJVEUoIDE0LCAxICk7CisJICAgIFNDQ0FfV1JJVEUoIDMsIHJlZzMgfCAxICk7CisJICAgIFNDQ0FfV1JJVEUoIDUsIHJlZzUgfCA4ICk7CisgICAgfQorCisgICAgbWFjX1NDQ19yZXNldF9kb25lID0gMTsKKyAgICBtYWNfU0NDX2luaXRfZG9uZSA9IDE7Cit9CisjZW5kaWYgLyogREVCVUdfU0VSSUFMICovCisKK3ZvaWQgbWFjX2luaXRfc2NjYV9wb3J0KCBpbnQgY2ZsYWcgKQoreworCW1hY19pbml0X3NjY19wb3J0KGNmbGFnLCAwKTsKK30KKwordm9pZCBtYWNfaW5pdF9zY2NiX3BvcnQoIGludCBjZmxhZyApCit7CisJbWFjX2luaXRfc2NjX3BvcnQoY2ZsYWcsIDEpOworfQorCit2b2lkIF9faW5pdCBtYWNfZGVidWdfaW5pdCh2b2lkKQoreworI2lmZGVmIERFQlVHX1NFUklBTAorICAgIGlmICggICAhc3RyY21wKCBtNjhrX2RlYnVnX2RldmljZSwgInNlciIgICkKKyAgICAgICAgfHwgIXN0cmNtcCggbTY4a19kZWJ1Z19kZXZpY2UsICJzZXIxIiApKSB7CisJLyogTWFjIG1vZGVtIHBvcnQgKi8KKwltYWNfaW5pdF9zY2NfcG9ydCggQjk2MDB8Q1M4LCAwICk7CisJbWFjX2NvbnNvbGVfZHJpdmVyLndyaXRlID0gbWFjX3NjY2FfY29uc29sZV93cml0ZTsKKwlzY2NfcG9ydCA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCFzdHJjbXAoIG02OGtfZGVidWdfZGV2aWNlLCAic2VyMiIgKSkgeworCS8qIE1hYyBwcmludGVyIHBvcnQgKi8KKwltYWNfaW5pdF9zY2NfcG9ydCggQjk2MDB8Q1M4LCAxICk7CisJbWFjX2NvbnNvbGVfZHJpdmVyLndyaXRlID0gbWFjX3NjY2JfY29uc29sZV93cml0ZTsKKwlzY2NfcG9ydCA9IDE7CisgICAgfQorI2VuZGlmCisjaWZkZWYgREVCVUdfSEVBRFMKKyAgICBpZiAoICAgIXN0cmNtcCggbTY4a19kZWJ1Z19kZXZpY2UsICJzY24iICApCisgICAgICAgIHx8ICFzdHJjbXAoIG02OGtfZGVidWdfZGV2aWNlLCAiY29uIiApKSB7CisJLyogZGlzcGxheSwgdXNpbmcgaGVhZC5TIGNvbnNvbGUgcm91dGluZXMgKi8KKwltYWNfY29uc29sZV9kcml2ZXIud3JpdGUgPSBtYWNfZGVidWdfY29uc29sZV93cml0ZTsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAobWFjX2NvbnNvbGVfZHJpdmVyLndyaXRlKQorCXJlZ2lzdGVyX2NvbnNvbGUoJm1hY19jb25zb2xlX2RyaXZlcik7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiAgYy1pbmRlbnQtbGV2ZWw6IDQKKyAqICB0YWItd2lkdGg6IDgKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9pb3AuYyBiL2FyY2gvbTY4ay9tYWMvaW9wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg4OWJhOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tYWMvaW9wLmMKQEAgLTAsMCArMSw3MTQgQEAKKy8qCisgKiBJL08gUHJvY2Vzc29yIChJT1ApIG1hbmFnZW1lbnQKKyAqIFdyaXR0ZW4gYW5kIChDKSAxOTk5IGJ5IEpvc2h1YSBNLiBUaG9tcHNvbiAoZnVuYWhvQGp1cmFpLm9yZykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UgYW5kIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSBhbmQgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyCisgKiAgICBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICovCisKKy8qCisgKiBUaGUgSU9QIGNoaXBzIGFyZSB1c2VkIGluIHRoZSBJSWZ4IGFuZCBzb21lIFF1YWRyYXMgKDkwMCwgOTUwKSB0byBtYW5hZ2UKKyAqIHNlcmlhbCBhbmQgQURCLiBUaGV5IGFyZSBhY3R1YWxseSBhIDY1MDIgcHJvY2Vzc29yIGFuZCBzb21lIGdsdWUgbG9naWMuCisgKgorICogOTkwNDI5IChqbXQpIC0gSW5pdGlhbCBpbXBsZW1lbnRhdGlvbiwganVzdCBlbm91Z2ggdG8ga25vY2sgdGhlIFNDQyBJT1AKKyAqCQkgIGludG8gY29tcGF0aWJsZSBtb2RlIHNvIG5vYm9keSBoYXMgdG8gZmlkZGxlIHdpdGggdGhlCisgKgkJICBTZXJpYWwgU3dpdGNoIGNvbnRyb2wgcGFuZWwgYW55bW9yZS4KKyAqIDk5MDYwMyAoam10KSAtIEFkZGVkIGNvZGUgdG8gZ3JhYiB0aGUgY29ycmVjdCBJU00gSU9QIGludGVycnVwdCBmb3IgT1NTCisgKgkJICBhbmQgbm9uLU9TUyBtYWNoaW5lcyAoYXQgbGVhc3QgSSBob3BlIGl0J3MgY29ycmVjdCBvbiBhCisgKgkJICBub24tT1NTIG1hY2hpbmUgLS0gc29tZW9uZSB3aXRoIGEgUTkwMCBvciBROTUwIG5lZWRzIHRvCisgKgkJICBjaGVjayB0aGlzLikKKyAqIDk5MDYwNSAoam10KSAtIFJlYXJyYW5nZWQgdGhpbmdzIGEgYml0IHdydCBJT1AgZGV0ZWN0aW9uOyBpb3BfcHJlc2VudCBpcworICoJCSAgZ29uZSwgSU9QIGJhc2UgYWRkcmVzc2VzIGFyZSBub3cgaW4gYW4gYXJyYXkgYW5kIHRoZQorICoJCSAgZ2xvYmFsbHktdmlzaWJsZSBmdW5jdGlvbnMgdGFrZSBhbiBJT1AgbnVtYmVyIGluc3RlYWQgb2YgYW4KKyAqCQkgIGFuIGFjdHVhbCBiYXNlIGFkZHJlc3MuCisgKiA5OTA2MTAgKGptdCkgLSBGaW5pc2hlZCB0aGUgbWVzc2FnZSBwYXNzaW5nIGZyYW1ld29yayBhbmQgaXQgc2VlbXMgdG8gd29yay4KKyAqCQkgIFNlbmRpbmcgX2RlZmluaXRlbHlfIHdvcmtzOyBteSBhZGItYnVzLmMgbW9kcyBjYW4gc2VuZAorICoJCSAgbWVzc2FnZXMgYW5kIHJlY2VpdmUgdGhlIE1TR19DT01QTEVURUQgc3RhdHVzIGJhY2sgZnJvbSB0aGUKKyAqCQkgIElPUC4gVGhlIHRyaWNrIG5vdyBpcyBmaWd1cmluZyBvdXQgdGhlIG1lc3NhZ2UgZm9ybWF0cy4KKyAqIDk5MDYxMSAoam10KSAtIE1vcmUgY2xlYW51cHMuIEZpeGVkIHByb2JsZW0gd2hlcmUgdW5jbGFpbWVkIG1lc3NhZ2VzIG9uIGEKKyAqCQkgIHJlY2VpdmUgY2hhbm5lbCB3ZXJlIG5ldmVyIHByb3Blcmx5IGFja25vd2xlZGdlZC4gQnJhY2tldGVkCisgKgkJICB0aGUgcmVtYWluaW5nIGRlYnVnIHByaW50aydzIHdpdGggI2lmZGVmJ3MgYW5kIGRpc2FibGVkCisgKgkJICBkZWJ1Z2dpbmcuIEkgY2FuIG5vdyB0eXBlIG9uIHRoZSBjb25zb2xlLgorICogOTkwNjEyIChqbXQpIC0gQ29weXJpZ2h0IG5vdGljZSBhZGRlZC4gUmV3b3JrZWQgdGhlIHdheSByZXBsaWVzIGFyZSBoYW5kbGVkLgorICoJCSAgSXQgdHVybnMgb3V0IHRoYXQgcmVwbGllcyBhcmUgcGxhY2VkIGJhY2sgaW4gdGhlIHNlbmQgYnVmZmVyCisgKgkJICBmb3IgdGhhdCBjaGFubmVsOyBtZXNzYWdlcyBvbiB0aGUgcmVjZWl2ZSBjaGFubmVscyBhcmUgYWx3YXlzCisgKgkJICB1bnNvbGljaXRlZCBtZXNzYWdlcyBmcm9tIHRoZSBJT1AgKGFuZCBvdXIgcmVwbGllcyB0byB0aGVtCisgKgkJICBzaG91bGQgZ28gYmFjayBpbiB0aGUgcmVjZWl2ZSBjaGFubmVsLikgQWxzbyBhZGRlZCB0cmFja2luZworICoJCSAgb2YgZGV2aWNlIG5hbWVzIHRvIHRoZSBsaXN0ZW5lciBmdW5jdGlvbnMgYWxhIHRoZSBpbnRlcnJ1cHQKKyAqCQkgIGhhbmRsZXJzLgorICogOTkwNzI5IChqbXQpIC0gQWRkZWQgcGFzc2luZyBvZiBwdF9yZWdzIHN0cnVjdHVyZSB0byBJT1AgaGFuZGxlcnMuIFRoaXMgaXMKKyAqCQkgIHVzZWQgYnkgdGhlIG5ldyB1bmlmaWVkIEFEQiBkcml2ZXIuCisgKgorICogVE9ETzoKKyAqCisgKiBvIFNvbWV0aGluZyBzaG91bGQgYmUgcGVyaW9kaWNhbGx5IGNoZWNraW5nIGlvcF9hbGl2ZSgpIHRvIG1ha2Ugc3VyZSB0aGUKKyAqICAgSU9QIGhhc24ndCBkaWVkLgorICogbyBTb21lIG9mIHRoZSBJT1AgbWFuYWdlciByb3V0aW5lcyBuZWVkIGJldHRlciBlcnJvciBjaGVja2luZyBhbmQKKyAqICAgcmV0dXJuIGNvZGVzLiBOb3RoaW5nIG1ham9yLCBqdXN0IHByZXR0eWluZyB1cC4KKyAqLworCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElPUCBNZXNzYWdlIFBhc3NpbmcgMTAxCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFRoZSBob3N0IHRhbGtzIHRvIHRoZSBJT1BzIHVzaW5nIGEgcmF0aGVyIHNpbXBsZSBtZXNzYWdlLXBhc3Npbmcgc2NoZW1lIHZpYQorICogYSBzaGFyZWQgbWVtb3J5IGFyZWEgaW4gdGhlIElPUCBSQU0uIEVhY2ggSU9QIGhhcyBzZXZlbiAiY2hhbm5lbHMiOyBlYWNoCisgKiBjaGFubmVsIGlzIGNvbm5lY2VkIHRvIGEgc3BlY2lmaWMgc29mdHdhcmUgZHJpdmVyIG9uIHRoZSBJT1AuIEZvciBleGFtcGxlCisgKiBvbiB0aGUgU0NDIElPUCB0aGVyZSBpcyBvbmUgY2hhbm5lbCBmb3IgZWFjaCBzZXJpYWwgcG9ydC4gRWFjaCBjaGFubmVsIGhhcworICogYW4gaW5jb21pbmcgYW5kIGFuZCBvdXRnb2luZyBtZXNzYWdlIHF1ZXVlIHdpdGggYSBkZXB0aCBvZiBvbmUuCisgKgorICogQSBtZXNzYWdlIGlzIDMyIGJ5dGVzIHBsdXMgYSBzdGF0ZSBieXRlIGZvciB0aGUgY2hhbm5lbCAoTVNHX0lETEUsIE1TR19ORVcsCisgKiBNU0dfUkNWRCwgTVNHX0NPTVBMRVRFKS4gVG8gc2VuZCBhIG1lc3NhZ2UgeW91IGNvcHkgdGhlIG1lc3NhZ2UgaW50byB0aGUKKyAqIGJ1ZmZlciwgc2V0IHRoZSBzdGF0ZSB0byBNU0dfTkVXIGFuZCBzaWduYWwgdGhlIElPUCBieSBzZXR0aW5nIHRoZSBJUlEgZmxhZworICogaW4gdGhlIElPUCBjb250cm9sIHRvIDEuIFRoZSBJT1Agd2lsbCBtb3ZlIHRoZSBzdGF0ZSB0byBNU0dfUkNWRCB3aGVuIGl0CisgKiByZWNlaXZlcyB0aGUgbWVzc2FnZSBhbmQgdGhlbiB0byBNU0dfQ09NUExFVEUgd2hlbiB0aGUgbWVzc2FnZSBwcm9jZXNzaW5nCisgKiBoYXMgY29tcGxldGVkLiBJdCBpcyB0aGUgaG9zdCdzIHJlc3BvbnNpYmlsaXR5IGF0IHRoYXQgcG9pbnQgdG8gcmVhZCB0aGUKKyAqIHJlcGx5IGJhY2sgb3V0IG9mIHRoZSBzZW5kIGNoYW5uZWwgYnVmZmVyIGFuZCByZXNldCB0aGUgY2hhbm5lbCBzdGF0ZSBiYWNrCisgKiB0byBNU0dfSURMRS4KKyAqCisgKiBUbyByZWNlaXZlIG1lc3NhZ2UgZnJvbSB0aGUgSU9QIHRoZSBzYW1lIHByb2NlZHVyZSBpcyB1c2VkIGV4Y2VwdCB0aGUgcm9sZXMKKyAqIGFyZSByZXZlcnNlZC4gVGhhdCBpcywgdGhlIElPUCBwdXRzIG1lc3NhZ2UgaW4gdGhlIGNoYW5uZWwgd2l0aCBhIHN0YXRlIG9mCisgKiBNU0dfTkVXLCBhbmQgdGhlIGhvc3QgcmVjZWl2ZXMgdGhlIG1lc3NhZ2UgYW5kIG1vdmUgaXRzIHN0YXRlIHRvIE1TR19SQ1ZECisgKiBhbmQgdGhlbiB0byBNU0dfQ09NUExFVEUgd2hlbiBwcm9jZXNzaW5nIGlzIGNvbXBsZXRlZCBhbmQgdGhlIHJlcGx5IChpZiBhbnkpCisgKiBoYXMgYmVlbiBwbGFjZWQgYmFjayBpbiB0aGUgcmVjZWl2ZSBjaGFubmVsLiBUaGUgSU9QIHdpbGwgdGhlbiByZXNldCB0aGUKKyAqIGNoYW5uZWwgc3RhdGUgdG8gTVNHX0lETEUuCisgKgorICogVHdvIHNldHMgb2YgaG9zdCBpbnRlcnJ1cHRzIGFyZSBwcm92aWRlZCwgSU5UMCBhbmQgSU5UMS4gQm90aCBhcHBlYXIgb24gb25lCisgKiBpbnRlcnJ1cHQgbGV2ZWw7IHRoZXkgYXJlIGRpc3Rpbmd1aXNoZWQgYnkgYSBwYWlyIG9mIGJpdHMgaW4gdGhlIElPUCBzdGF0dXMKKyAqIHJlZ2lzdGVyLiBUaGUgSU9QIHdpbGwgcmFpc2UgSU5UMCB3aGVuIG9uZSBvciBtb3JlIG1lc3NhZ2VzIGluIHRoZSBzZW5kCisgKiBjaGFubmVscyBoYXZlIGdvbmUgdG8gdGhlIE1TR19DT01QTEVURSBzdGF0ZSBhbmQgaXQgd2lsbCByYWlzZSBJTlQxIHdoZW4gb25lCisgKiBvciBtb3JlIG1lc3NhZ2VzIG9uIHRoZSByZWNlaXZlIGNoYW5uZWxzIGhhdmUgZ29uZSB0byB0aGUgTVNHX05FVyBzdGF0ZS4KKyAqCisgKiBTaW5jZSBlYWNoIGNoYW5uZWwgaGFuZGxlcyBvbmx5IG9uZSBtZXNzYWdlIHdlIGhhdmUgdG8gaW1wbGVtZW50IGEgc21hbGwKKyAqIGludGVycnVwdC1kcml2ZW4gcXVldWUgb24gb3VyIGVuZC4gTWVzc2FnZXMgdG8gYmUgc2VudCBhcmUgcGxhY2VkIG9uIHRoZQorICogcXVldWUgZm9yIHNlbmRpbmcgYW5kIGNvbnRhaW4gYSBwb2ludGVyIHRvIGFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uLgorICogVGhlIGhhbmRsZXIgZm9yIGEgbWVzc2FnZSBpcyBjYWxsZWQgd2hlbiB0aGUgbWVzc2FnZSBzdGF0ZSBnb2VzIHRvCisgKiBNU0dfQ09NUExFVEUuCisgKgorICogRm9yIHJlY2VpdmluZyBtZXNzYWdlIHdlIG1haW50YWluIGEgbGlzdCBvZiBoYW5kbGVyIGZ1bmN0aW9ucyB0byBjYWxsIHdoZW4KKyAqIGEgbWVzc2FnZSBpcyByZWNlaXZlZCBvbiB0aGF0IElPUC9jaGFubmVsIGNvbWJpbmF0aW9uLiBUaGUgaGFuZGxlcnMgYXJlCisgKiBjYWxsZWQgbXVjaCBsaWtlIGFuIGludGVycnVwdCBoYW5kbGVyIGFuZCBhcmUgcGFzc2VkIGEgY29weSBvZiB0aGUgbWVzc2FnZQorICogZnJvbSB0aGUgSU9QLiBUaGUgbWVzc2FnZSBzdGF0ZSB3aWxsIGJlIGluIE1TR19SQ1ZEIHdoaWxlIHRoZSBoYW5kbGVyIHJ1bnM7CisgKiBpdCBpcyB0aGUgaGFuZGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGNhbGwgaW9wX2NvbXBsZXRlX21lc3NhZ2UoKSB3aGVuCisgKiBmaW5pc2hlZDsgdGhpcyBmdW5jdGlvbiBtb3ZlcyB0aGUgbWVzc2FnZSBzdGF0ZSB0byBNU0dfQ09NUExFVEUgYW5kIHNpZ25hbHMKKyAqIHRoZSBJT1AuIFRoaXMgdHdvLXN0ZXAgcHJvY2VzcyBpcyBwcm92aWRlZCB0byBhbGxvdyB0aGUgaGFuZGxlciB0byBkZWZlcgorICogbWVzc2FnZSBwcm9jZXNzaW5nIHRvIGEgYm90dG9tLWhhbGYgaGFuZGxlciBpZiB0aGUgcHJvY2Vzc2luZyB3aWxsIHRha2UKKyAqIGEgc2lnbmlmaWdhbnQgYW1vdW50IG9mIHRpbWUgKGhhbmRsZXJzIGFyZSBjYWxsZWQgYXQgaW50ZXJydXB0IHRpbWUgc28gdGhleQorICogc2hvdWxkIGV4ZWN1dGUgcXVpY2tseS4pCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaW50b3NoLmg+CisjaW5jbHVkZSA8YXNtL21hY2ludHMuaD4KKyNpbmNsdWRlIDxhc20vbWFjX2lvcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNfb3NzLmg+CisKKy8qI2RlZmluZSBERUJVR19JT1AqLworCisvKiBTZXQgdG8gbm9uZXplcm8gaWYgdGhlIElPUHMgYXJlIHByZXNlbnQuIFNldCBieSBpb3BfaW5pdCgpICovCisKK2ludCBpb3Bfc2NjX3ByZXNlbnQsaW9wX2lzbV9wcmVzZW50OworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK3N0YXRpYyBpbnQgaW9wX2dldF9wcm9jX2luZm8oY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50KTsKKyNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLworCisvKiBzdHJ1Y3R1cmUgZm9yIHRyYWNraW5nIGNoYW5uZWwgbGlzdGVuZXJzICovCisKK3N0cnVjdCBsaXN0ZW5lciB7CisJY29uc3QgY2hhciAqZGV2bmFtZTsKKwl2b2lkICgqaGFuZGxlcikoc3RydWN0IGlvcF9tc2cgKiwgc3RydWN0IHB0X3JlZ3MgKik7Cit9OworCisvKgorICogSU9QIHN0cnVjdHVyZXMgZm9yIHRoZSB0d28gSU9QcworICoKKyAqIFRoZSBTQ0MgSU9QIGNvbnRyb2xzIGJvdGggc2VyaWFsIHBvcnRzIChBIGFuZCBCKSBhcyBpdHMgdHdvIGZ1bmN0aW9ucy4KKyAqIFRoZSBJU00gSU9QIGNvbnRyb2xzIHRoZSBTV0lNIChmbG9wcHkgZHJpdmUpIGFuZCBBREIuCisgKi8KKworc3RhdGljIHZvbGF0aWxlIHN0cnVjdCBtYWNfaW9wICppb3BfYmFzZVtOVU1fSU9QU107CisKKy8qCisgKiBJT1AgbWVzc2FnZSBxdWV1ZXMKKyAqLworCitzdGF0aWMgc3RydWN0IGlvcF9tc2cgaW9wX21zZ19wb29sW05VTV9JT1BfTVNHU107CitzdGF0aWMgc3RydWN0IGlvcF9tc2cgKmlvcF9zZW5kX3F1ZXVlW05VTV9JT1BTXVtOVU1fSU9QX0NIQU5dOworc3RhdGljIHN0cnVjdCBsaXN0ZW5lciBpb3BfbGlzdGVuZXJzW05VTV9JT1BTXVtOVU1fSU9QX0NIQU5dOworCitpcnFyZXR1cm5fdCBpb3BfaXNtX2lycShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisKK2V4dGVybiB2b2lkIG9zc19pcnFfZW5hYmxlKGludCk7CisKKy8qCisgKiBQcml2YXRlIGFjY2VzcyBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGlvcF9sb2FkYWRkcih2b2xhdGlsZSBzdHJ1Y3QgbWFjX2lvcCAqaW9wLCBfX3UxNiBhZGRyKQoreworCWlvcC0+cmFtX2FkZHJfbG8gPSBhZGRyOworCWlvcC0+cmFtX2FkZHJfaGkgPSBhZGRyID4+IDg7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fdTggaW9wX3JlYWRiKHZvbGF0aWxlIHN0cnVjdCBtYWNfaW9wICppb3AsIF9fdTE2IGFkZHIpCit7CisJaW9wLT5yYW1fYWRkcl9sbyA9IGFkZHI7CisJaW9wLT5yYW1fYWRkcl9oaSA9IGFkZHIgPj4gODsKKwlyZXR1cm4gaW9wLT5yYW1fZGF0YTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBpb3Bfd3JpdGViKHZvbGF0aWxlIHN0cnVjdCBtYWNfaW9wICppb3AsIF9fdTE2IGFkZHIsIF9fdTggZGF0YSkKK3sKKwlpb3AtPnJhbV9hZGRyX2xvID0gYWRkcjsKKwlpb3AtPnJhbV9hZGRyX2hpID0gYWRkciA+PiA4OworCWlvcC0+cmFtX2RhdGEgPSBkYXRhOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGlvcF9zdG9wKHZvbGF0aWxlIHN0cnVjdCBtYWNfaW9wICppb3ApCit7CisJaW9wLT5zdGF0dXNfY3RybCAmPSB+SU9QX1JVTjsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBpb3Bfc3RhcnQodm9sYXRpbGUgc3RydWN0IG1hY19pb3AgKmlvcCkKK3sKKwlpb3AtPnN0YXR1c19jdHJsID0gSU9QX1JVTiB8IElPUF9BVVRPSU5DOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGlvcF9ieXBhc3Modm9sYXRpbGUgc3RydWN0IG1hY19pb3AgKmlvcCkKK3sKKwlpb3AtPnN0YXR1c19jdHJsIHw9IElPUF9CWVBBU1M7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgaW9wX2ludGVycnVwdCh2b2xhdGlsZSBzdHJ1Y3QgbWFjX2lvcCAqaW9wKQoreworCWlvcC0+c3RhdHVzX2N0cmwgfD0gSU9QX0lSUTsKK30KKworc3RhdGljIGludCBpb3BfYWxpdmUodm9sYXRpbGUgc3RydWN0IG1hY19pb3AgKmlvcCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gKGlvcF9yZWFkYihpb3AsIElPUF9BRERSX0FMSVZFKSA9PSAweEZGKTsKKwlpb3Bfd3JpdGViKGlvcCwgSU9QX0FERFJfQUxJVkUsIDApOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW9wX21zZyAqaW9wX2FsbG9jX21zZyh2b2lkKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlmb3IgKGkgPSAwIDsgaSA8IE5VTV9JT1BfTVNHUyA7IGkrKykgeworCQlpZiAoaW9wX21zZ19wb29sW2ldLnN0YXR1cyA9PSBJT1BfTVNHU1RBVFVTX1VOVVNFRCkgeworCQkJaW9wX21zZ19wb29sW2ldLnN0YXR1cyA9IElPUF9NU0dTVEFUVVNfV0FJVElORzsKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJCXJldHVybiAmaW9wX21zZ19wb29sW2ldOworCQl9CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBpb3BfZnJlZV9tc2coc3RydWN0IGlvcF9tc2cgKm1zZykKK3sKKwltc2ctPnN0YXR1cyA9IElPUF9NU0dTVEFUVVNfVU5VU0VEOworfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIHN0YXJ0dXAgY29kZSBiZWZvcmUgYW55dGhpbmcgZWxzZS4gSXRzIHB1cnBvc2UKKyAqIGlzIHRvIGZpbmQgYW5kIGluaXRpYWxpemUgdGhlIElPUHMgZWFybHkgaW4gdGhlIGJvb3Qgc2VxdWVuY2UsIHNvIHRoYXQKKyAqIHRoZSBzZXJpYWwgSU9QIGNhbiBiZSBwbGFjZWQgaW50byBieXBhc3MgbW9kZSBfYmVmb3JlXyB3ZSB0cnkgdG8KKyAqIGluaXRpYWxpemUgdGhlIHNlcmlhbCBjb25zb2xlLgorICovCisKK3ZvaWQgX19pbml0IGlvcF9wcmVpbml0KHZvaWQpCit7CisJaWYgKG1hY2ludG9zaF9jb25maWctPnNjY190eXBlID09IE1BQ19TQ0NfSU9QKSB7CisJCWlmIChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfSUlGWCkgeworCQkJaW9wX2Jhc2VbSU9QX05VTV9TQ0NdID0gKHN0cnVjdCBtYWNfaW9wICopIFNDQ19JT1BfQkFTRV9JSUZYOworCQl9IGVsc2UgeworCQkJaW9wX2Jhc2VbSU9QX05VTV9TQ0NdID0gKHN0cnVjdCBtYWNfaW9wICopIFNDQ19JT1BfQkFTRV9RVUFEUkE7CisJCX0KKwkJaW9wX2Jhc2VbSU9QX05VTV9TQ0NdLT5zdGF0dXNfY3RybCA9IDB4ODc7CisJCWlvcF9zY2NfcHJlc2VudCA9IDE7CisJfSBlbHNlIHsKKwkJaW9wX2Jhc2VbSU9QX05VTV9TQ0NdID0gTlVMTDsKKwkJaW9wX3NjY19wcmVzZW50ID0gMDsKKwl9CisJaWYgKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlID09IE1BQ19BREJfSU9QKSB7CisJCWlmIChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfSUlGWCkgeworCQkJaW9wX2Jhc2VbSU9QX05VTV9JU01dID0gKHN0cnVjdCBtYWNfaW9wICopIElTTV9JT1BfQkFTRV9JSUZYOworCQl9IGVsc2UgeworCQkJaW9wX2Jhc2VbSU9QX05VTV9JU01dID0gKHN0cnVjdCBtYWNfaW9wICopIElTTV9JT1BfQkFTRV9RVUFEUkE7CisJCX0KKwkJaW9wX2Jhc2VbSU9QX05VTV9JU01dLT5zdGF0dXNfY3RybCA9IDA7CisJCWlvcF9pc21fcHJlc2VudCA9IDE7CisJfSBlbHNlIHsKKwkJaW9wX2Jhc2VbSU9QX05VTV9JU01dID0gTlVMTDsKKwkJaW9wX2lzbV9wcmVzZW50ID0gMDsKKwl9Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBJT1BzLCBpZiBwcmVzZW50LgorICovCisKK3ZvaWQgX19pbml0IGlvcF9pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwlpZiAoaW9wX3NjY19wcmVzZW50KSB7CisJCXByaW50aygiSU9QOiBkZXRlY3RlZCBTQ0MgSU9QIGF0ICVwXG4iLCBpb3BfYmFzZVtJT1BfTlVNX1NDQ10pOworCX0KKwlpZiAoaW9wX2lzbV9wcmVzZW50KSB7CisJCXByaW50aygiSU9QOiBkZXRlY3RlZCBJU00gSU9QIGF0ICVwXG4iLCBpb3BfYmFzZVtJT1BfTlVNX0lTTV0pOworCQlpb3Bfc3RhcnQoaW9wX2Jhc2VbSU9QX05VTV9JU01dKTsKKwkJaW9wX2FsaXZlKGlvcF9iYXNlW0lPUF9OVU1fSVNNXSk7IC8qIGNsZWFycyB0aGUgYWxpdmUgZmxhZyAqLworCX0KKworCS8qIE1ha2UgdGhlIHdob2xlIHBvb2wgYXZhaWxhYmxlIGFuZCBlbXB0eSB0aGUgcXVldWVzICovCisKKwlmb3IgKGkgPSAwIDsgaSA8IE5VTV9JT1BfTVNHUyA7IGkrKykgeworCQlpb3BfbXNnX3Bvb2xbaV0uc3RhdHVzID0gSU9QX01TR1NUQVRVU19VTlVTRUQ7CisJfQorCisJZm9yIChpID0gMCA7IGkgPCBOVU1fSU9QX0NIQU4gOyBpKyspIHsKKwkJaW9wX3NlbmRfcXVldWVbSU9QX05VTV9TQ0NdW2ldID0gMDsKKwkJaW9wX3NlbmRfcXVldWVbSU9QX05VTV9JU01dW2ldID0gMDsKKwkJaW9wX2xpc3RlbmVyc1tJT1BfTlVNX1NDQ11baV0uZGV2bmFtZSA9IE5VTEw7CisJCWlvcF9saXN0ZW5lcnNbSU9QX05VTV9TQ0NdW2ldLmhhbmRsZXIgPSBOVUxMOworCQlpb3BfbGlzdGVuZXJzW0lPUF9OVU1fSVNNXVtpXS5kZXZuYW1lID0gTlVMTDsKKwkJaW9wX2xpc3RlbmVyc1tJT1BfTlVNX0lTTV1baV0uaGFuZGxlciA9IE5VTEw7CisJfQorCisjaWYgMAkvKiBDcmFzaGluZyBpbiAyLjQgbm93LCBub3QgeWV0IHN1cmUgd2h5LiAgIC0tam10ICovCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwljcmVhdGVfcHJvY19pbmZvX2VudHJ5KCJtYWNfaW9wIiwgMCwgJnByb2Nfcm9vdCwgaW9wX2dldF9wcm9jX2luZm8pOworI2VuZGlmCisjZW5kaWYKK30KKworLyoKKyAqIFJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIElPUHMuCisgKiBUT0RPOiBtaWdodCBiZSB3cm9uZyBmb3Igbm9uLU9TUyBtYWNoaW5lcy4gQW55b25lPworICovCisKK3ZvaWQgX19pbml0IGlvcF9yZWdpc3Rlcl9pbnRlcnJ1cHRzKHZvaWQpCit7CisJaWYgKGlvcF9pc21fcHJlc2VudCkgeworCQlpZiAob3NzX3ByZXNlbnQpIHsKKwkJCWNwdV9yZXF1ZXN0X2lycShPU1NfSVJRTEVWX0lPUElTTSwgaW9wX2lzbV9pcnEsCisJCQkJCUlSUV9GTEdfTE9DSywgIklTTSBJT1AiLAorCQkJCQkodm9pZCAqKSBJT1BfTlVNX0lTTSk7CisJCQlvc3NfaXJxX2VuYWJsZShJUlFfTUFDX0FEQik7CisJCX0gZWxzZSB7CisJCQlyZXF1ZXN0X2lycShJUlFfVklBMl8wLCBpb3BfaXNtX2lycSwKKwkJCQkJSVJRX0ZMR19MT0NLfElSUV9GTEdfRkFTVCwgIklTTSBJT1AiLAorCQkJCQkodm9pZCAqKSBJT1BfTlVNX0lTTSk7CisJCX0KKwkJaWYgKCFpb3BfYWxpdmUoaW9wX2Jhc2VbSU9QX05VTV9JU01dKSkgeworCQkJcHJpbnRrKCJJT1A6IG9oIG15IGdvZCwgdGhleSBraWxsZWQgdGhlIElTTSBJT1AhXG4iKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50aygiSU9QOiB0aGUgSVNNIElPUCBzZWVtcyB0byBiZSBhbGl2ZS5cbiIpOworCQl9CisJfQorfQorCisvKgorICogUmVnaXN0ZXIgb3IgdW5yZWdpc3RlciBhIGxpc3RlbmVyIGZvciBhIHNwZWNpZmljIElPUCBhbmQgY2hhbm5lbAorICoKKyAqIElmIHRoZSBoYW5kbGVyIHBvaW50ZXIgaXMgTlVMTCB0aGUgY3VycmVudCBsaXN0ZW5lciAoaWYgYW55KSBpcworICogdW5yZWdpc3RlcmVkLiBPdGhlcndpc2UgdGhlIG5ldyBsaXN0ZW5lciBpcyByZWdpc3RlcmVkIHByb3ZpZGVkCisgKiB0aGVyZSBpcyBubyBleGlzdGluZyBsaXN0ZW5lciByZWdpc3RlcmVkLgorICovCisKK2ludCBpb3BfbGlzdGVuKHVpbnQgaW9wX251bSwgdWludCBjaGFuLAorCQl2b2lkICgqaGFuZGxlcikoc3RydWN0IGlvcF9tc2cgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisJCWNvbnN0IGNoYXIgKmRldm5hbWUpCit7CisJaWYgKChpb3BfbnVtID49IE5VTV9JT1BTKSB8fCAhaW9wX2Jhc2VbaW9wX251bV0pIHJldHVybiAtRUlOVkFMOworCWlmIChjaGFuID49IE5VTV9JT1BfQ0hBTikgcmV0dXJuIC1FSU5WQUw7CisJaWYgKGlvcF9saXN0ZW5lcnNbaW9wX251bV1bY2hhbl0uaGFuZGxlciAmJiBoYW5kbGVyKSByZXR1cm4gLUVJTlZBTDsKKwlpb3BfbGlzdGVuZXJzW2lvcF9udW1dW2NoYW5dLmRldm5hbWUgPSBkZXZuYW1lOworCWlvcF9saXN0ZW5lcnNbaW9wX251bV1bY2hhbl0uaGFuZGxlciA9IGhhbmRsZXI7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDb21wbGV0ZSByZWNlcHRpb24gb2YgYSBtZXNzYWdlLCB3aGljaCBqdXN0IG1lYW5zIGNvcHlpbmcgdGhlIHJlcGx5CisgKiBpbnRvIHRoZSBidWZmZXIsIHNldHRpbmcgdGhlIGNoYW5uZWwgc3RhdGUgdG8gTVNHX0NPTVBMRVRFIGFuZAorICogbm90aWZ5aW5nIHRoZSBJT1AuCisgKi8KKwordm9pZCBpb3BfY29tcGxldGVfbWVzc2FnZShzdHJ1Y3QgaW9wX21zZyAqbXNnKQoreworCWludCBpb3BfbnVtID0gbXNnLT5pb3BfbnVtOworCWludCBjaGFuID0gbXNnLT5jaGFubmVsOworCWludCBpLG9mZnNldDsKKworI2lmZGVmIERFQlVHX0lPUAorCXByaW50aygiaW9wX2NvbXBsZXRlKCVwKTogaW9wICVkIGNoYW4gJWRcbiIsIG1zZywgbXNnLT5pb3BfbnVtLCBtc2ctPmNoYW5uZWwpOworI2VuZGlmCisKKwlvZmZzZXQgPSBJT1BfQUREUl9SRUNWX01TRyArIChtc2ctPmNoYW5uZWwgKiBJT1BfTVNHX0xFTik7CisKKwlmb3IgKGkgPSAwIDsgaSA8IElPUF9NU0dfTEVOIDsgaSsrLCBvZmZzZXQrKykgeworCQlpb3Bfd3JpdGViKGlvcF9iYXNlW2lvcF9udW1dLCBvZmZzZXQsIG1zZy0+cmVwbHlbaV0pOworCX0KKworCWlvcF93cml0ZWIoaW9wX2Jhc2VbaW9wX251bV0sCisJCSAgIElPUF9BRERSX1JFQ1ZfU1RBVEUgKyBjaGFuLCBJT1BfTVNHX0NPTVBMRVRFKTsKKwlpb3BfaW50ZXJydXB0KGlvcF9iYXNlW21zZy0+aW9wX251bV0pOworCisJaW9wX2ZyZWVfbXNnKG1zZyk7Cit9CisKKy8qCisgKiBBY3R1YWxseSBwdXQgYSBtZXNzYWdlIGludG8gYSBzZW5kIGNoYW5uZWwgYnVmZmVyCisgKi8KKworc3RhdGljIHZvaWQgaW9wX2RvX3NlbmQoc3RydWN0IGlvcF9tc2cgKm1zZykKK3sKKwl2b2xhdGlsZSBzdHJ1Y3QgbWFjX2lvcCAqaW9wID0gaW9wX2Jhc2VbbXNnLT5pb3BfbnVtXTsKKwlpbnQgaSxvZmZzZXQ7CisKKwlvZmZzZXQgPSBJT1BfQUREUl9TRU5EX01TRyArIChtc2ctPmNoYW5uZWwgKiBJT1BfTVNHX0xFTik7CisKKwlmb3IgKGkgPSAwIDsgaSA8IElPUF9NU0dfTEVOIDsgaSsrLCBvZmZzZXQrKykgeworCQlpb3Bfd3JpdGViKGlvcCwgb2Zmc2V0LCBtc2ctPm1lc3NhZ2VbaV0pOworCX0KKworCWlvcF93cml0ZWIoaW9wLCBJT1BfQUREUl9TRU5EX1NUQVRFICsgbXNnLT5jaGFubmVsLCBJT1BfTVNHX05FVyk7CisKKwlpb3BfaW50ZXJydXB0KGlvcCk7Cit9CisKKy8qCisgKiBIYW5kbGUgc2VuZGluZyBhIG1lc3NhZ2Ugb24gYSBjaGFubmVsIHRoYXQKKyAqIGhhcyBnb25lIGludG8gdGhlIElPUF9NU0dfQ09NUExFVEUgc3RhdGUuCisgKi8KKworc3RhdGljIHZvaWQgaW9wX2hhbmRsZV9zZW5kKHVpbnQgaW9wX251bSwgdWludCBjaGFuLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl2b2xhdGlsZSBzdHJ1Y3QgbWFjX2lvcCAqaW9wID0gaW9wX2Jhc2VbaW9wX251bV07CisJc3RydWN0IGlvcF9tc2cgKm1zZywqbXNnMjsKKwlpbnQgaSxvZmZzZXQ7CisKKyNpZmRlZiBERUJVR19JT1AKKwlwcmludGsoImlvcF9oYW5kbGVfc2VuZDogaW9wICVkIGNoYW5uZWwgJWRcbiIsIGlvcF9udW0sIGNoYW4pOworI2VuZGlmCisKKwlpb3Bfd3JpdGViKGlvcCwgSU9QX0FERFJfU0VORF9TVEFURSArIGNoYW4sIElPUF9NU0dfSURMRSk7CisKKwlpZiAoIShtc2cgPSBpb3Bfc2VuZF9xdWV1ZVtpb3BfbnVtXVtjaGFuXSkpIHJldHVybjsKKworCW1zZy0+c3RhdHVzID0gSU9QX01TR1NUQVRVU19DT01QTEVURTsKKwlvZmZzZXQgPSBJT1BfQUREUl9TRU5EX01TRyArIChjaGFuICogSU9QX01TR19MRU4pOworCWZvciAoaSA9IDAgOyBpIDwgSU9QX01TR19MRU4gOyBpKyssIG9mZnNldCsrKSB7CisJCW1zZy0+cmVwbHlbaV0gPSBpb3BfcmVhZGIoaW9wLCBvZmZzZXQpOworCX0KKwlpZiAobXNnLT5oYW5kbGVyKSAoKm1zZy0+aGFuZGxlcikobXNnLCByZWdzKTsKKwltc2cyID0gbXNnOworCW1zZyA9IG1zZy0+bmV4dDsKKwlpb3BfZnJlZV9tc2cobXNnMik7CisKKwlpb3Bfc2VuZF9xdWV1ZVtpb3BfbnVtXVtjaGFuXSA9IG1zZzsKKwlpZiAobXNnKSBpb3BfZG9fc2VuZChtc2cpOworfQorCisvKgorICogSGFuZGxlIHJlY2VwdGlvbiBvZiBhIG1lc3NhZ2Ugb24gYSBjaGFubmVsIHRoYXQgaGFzCisgKiBnb25lIGludG8gdGhlIElPUF9NU0dfTkVXIHN0YXRlLgorICovCisKK3N0YXRpYyB2b2lkIGlvcF9oYW5kbGVfcmVjdih1aW50IGlvcF9udW0sIHVpbnQgY2hhbiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdm9sYXRpbGUgc3RydWN0IG1hY19pb3AgKmlvcCA9IGlvcF9iYXNlW2lvcF9udW1dOworCWludCBpLG9mZnNldDsKKwlzdHJ1Y3QgaW9wX21zZyAqbXNnOworCisjaWZkZWYgREVCVUdfSU9QCisJcHJpbnRrKCJpb3BfaGFuZGxlX3JlY3Y6IGlvcCAlZCBjaGFubmVsICVkXG4iLCBpb3BfbnVtLCBjaGFuKTsKKyNlbmRpZgorCisJbXNnID0gaW9wX2FsbG9jX21zZygpOworCW1zZy0+aW9wX251bSA9IGlvcF9udW07CisJbXNnLT5jaGFubmVsID0gY2hhbjsKKwltc2ctPnN0YXR1cyA9IElPUF9NU0dTVEFUVVNfVU5TT0w7CisJbXNnLT5oYW5kbGVyID0gaW9wX2xpc3RlbmVyc1tpb3BfbnVtXVtjaGFuXS5oYW5kbGVyOworCisJb2Zmc2V0ID0gSU9QX0FERFJfUkVDVl9NU0cgKyAoY2hhbiAqIElPUF9NU0dfTEVOKTsKKworCWZvciAoaSA9IDAgOyBpIDwgSU9QX01TR19MRU4gOyBpKyssIG9mZnNldCsrKSB7CisJCW1zZy0+bWVzc2FnZVtpXSA9IGlvcF9yZWFkYihpb3AsIG9mZnNldCk7CisJfQorCisJaW9wX3dyaXRlYihpb3AsIElPUF9BRERSX1JFQ1ZfU1RBVEUgKyBjaGFuLCBJT1BfTVNHX1JDVkQpOworCisJLyogSWYgdGhlcmUgaXMgYSBsaXN0ZW5lciwgY2FsbCBpdCBub3cuIE90aGVyd2lzZSBjb21wbGV0ZSAqLworCS8qIHRoZSBtZXNzYWdlIG91cnNlbHZlcyB0byBhdm9pZCBwb3NzaWJsZSBzdGFsbHMuICAgICAgICAgKi8KKworCWlmIChtc2ctPmhhbmRsZXIpIHsKKwkJKCptc2ctPmhhbmRsZXIpKG1zZywgcmVncyk7CisJfSBlbHNlIHsKKyNpZmRlZiBERUJVR19JT1AKKwkJcHJpbnRrKCJpb3BfaGFuZGxlX3JlY3Y6IHVuY2xhaW1lZCBtZXNzYWdlIG9uIGlvcCAlZCBjaGFubmVsICVkXG4iLCBpb3BfbnVtLCBjaGFuKTsKKwkJcHJpbnRrKCJpb3BfaGFuZGxlX3JlY3Y6Iik7CisJCWZvciAoaSA9IDAgOyBpIDwgSU9QX01TR19MRU4gOyBpKyspIHsKKwkJCXByaW50aygiICUwMlgiLCAodWludCkgbXNnLT5tZXNzYWdlW2ldKTsKKwkJfQorCQlwcmludGsoIlxuIik7CisjZW5kaWYKKwkJaW9wX2NvbXBsZXRlX21lc3NhZ2UobXNnKTsKKwl9Cit9CisKKy8qCisgKiBTZW5kIGEgbWVzc2FnZQorICoKKyAqIFRoZSBtZXNzYWdlIGlzIHBsYWNlZCBhdCB0aGUgZW5kIG9mIHRoZSBzZW5kIHF1ZXVlLiBBZnRlcndhcmRzIGlmIHRoZQorICogY2hhbm5lbCBpcyBpZGxlIHdlIGZvcmNlIGFuIGltbWVkaWF0ZSBzZW5kIG9mIHRoZSBuZXh0IG1lc3NhZ2UgaW4gdGhlCisgKiBxdWV1ZS4KKyAqLworCitpbnQgaW9wX3NlbmRfbWVzc2FnZSh1aW50IGlvcF9udW0sIHVpbnQgY2hhbiwgdm9pZCAqcHJpdmRhdGEsCisJCSAgICAgIHVpbnQgbXNnX2xlbiwgX191OCAqbXNnX2RhdGEsCisJCSAgICAgIHZvaWQgKCpoYW5kbGVyKShzdHJ1Y3QgaW9wX21zZyAqLCBzdHJ1Y3QgcHRfcmVncyAqKSkKK3sKKwlzdHJ1Y3QgaW9wX21zZyAqbXNnLCAqcTsKKworCWlmICgoaW9wX251bSA+PSBOVU1fSU9QUykgfHwgIWlvcF9iYXNlW2lvcF9udW1dKSByZXR1cm4gLUVJTlZBTDsKKwlpZiAoY2hhbiA+PSBOVU1fSU9QX0NIQU4pIHJldHVybiAtRUlOVkFMOworCWlmIChtc2dfbGVuID4gSU9QX01TR19MRU4pIHJldHVybiAtRUlOVkFMOworCisJbXNnID0gaW9wX2FsbG9jX21zZygpOworCWlmICghbXNnKSByZXR1cm4gLUVOT01FTTsKKworCW1zZy0+bmV4dCA9IE5VTEw7CisJbXNnLT5zdGF0dXMgPSBJT1BfTVNHU1RBVFVTX1dBSVRJTkc7CisJbXNnLT5pb3BfbnVtID0gaW9wX251bTsKKwltc2ctPmNoYW5uZWwgPSBjaGFuOworCW1zZy0+Y2FsbGVyX3ByaXYgPSBwcml2ZGF0YTsKKwltZW1jcHkobXNnLT5tZXNzYWdlLCBtc2dfZGF0YSwgbXNnX2xlbik7CisJbXNnLT5oYW5kbGVyID0gaGFuZGxlcjsKKworCWlmICghKHEgPSBpb3Bfc2VuZF9xdWV1ZVtpb3BfbnVtXVtjaGFuXSkpIHsKKwkJaW9wX3NlbmRfcXVldWVbaW9wX251bV1bY2hhbl0gPSBtc2c7CisJfSBlbHNlIHsKKwkJd2hpbGUgKHEtPm5leHQpIHEgPSBxLT5uZXh0OworCQlxLT5uZXh0ID0gbXNnOworCX0KKworCWlmIChpb3BfcmVhZGIoaW9wX2Jhc2VbaW9wX251bV0sCisJICAgIElPUF9BRERSX1NFTkRfU1RBVEUgKyBjaGFuKSA9PSBJT1BfTVNHX0lETEUpIHsKKwkJaW9wX2RvX3NlbmQobXNnKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFVwbG9hZCBjb2RlIHRvIHRoZSBzaGFyZWQgUkFNIG9mIGFuIElPUC4KKyAqLworCit2b2lkIGlvcF91cGxvYWRfY29kZSh1aW50IGlvcF9udW0sIF9fdTggKmNvZGVfc3RhcnQsCisJCSAgICAgdWludCBjb2RlX2xlbiwgX191MTYgc2hhcmVkX3JhbV9zdGFydCkKK3sKKwlpZiAoKGlvcF9udW0gPj0gTlVNX0lPUFMpIHx8ICFpb3BfYmFzZVtpb3BfbnVtXSkgcmV0dXJuOworCisJaW9wX2xvYWRhZGRyKGlvcF9iYXNlW2lvcF9udW1dLCBzaGFyZWRfcmFtX3N0YXJ0KTsKKworCXdoaWxlIChjb2RlX2xlbi0tKSB7CisJCWlvcF9iYXNlW2lvcF9udW1dLT5yYW1fZGF0YSA9ICpjb2RlX3N0YXJ0Kys7CisJfQorfQorCisvKgorICogRG93bmxvYWQgY29kZSBmcm9tIHRoZSBzaGFyZWQgUkFNIG9mIGFuIElPUC4KKyAqLworCit2b2lkIGlvcF9kb3dubG9hZF9jb2RlKHVpbnQgaW9wX251bSwgX191OCAqY29kZV9zdGFydCwKKwkJICAgICAgIHVpbnQgY29kZV9sZW4sIF9fdTE2IHNoYXJlZF9yYW1fc3RhcnQpCit7CisJaWYgKChpb3BfbnVtID49IE5VTV9JT1BTKSB8fCAhaW9wX2Jhc2VbaW9wX251bV0pIHJldHVybjsKKworCWlvcF9sb2FkYWRkcihpb3BfYmFzZVtpb3BfbnVtXSwgc2hhcmVkX3JhbV9zdGFydCk7CisKKwl3aGlsZSAoY29kZV9sZW4tLSkgeworCQkqY29kZV9zdGFydCsrID0gaW9wX2Jhc2VbaW9wX251bV0tPnJhbV9kYXRhOworCX0KK30KKworLyoKKyAqIENvbXBhcmUgdGhlIGNvZGUgaW4gdGhlIHNoYXJlZCBSQU0gb2YgYW4gSU9QIHdpdGggYSBjb3B5IGluIHN5c3RlbSBtZW1vcnkKKyAqIGFuZCByZXR1cm4gMCBvbiBtYXRjaCBvciB0aGUgZmlyc3Qgbm9ubWF0Y2hpbmcgc3lzdGVtIG1lbW9yeSBhZGRyZXNzIG9uCisgKiBmYWlsdXJlLgorICovCisKK19fdTggKmlvcF9jb21wYXJlX2NvZGUodWludCBpb3BfbnVtLCBfX3U4ICpjb2RlX3N0YXJ0LAorCQkgICAgICAgdWludCBjb2RlX2xlbiwgX191MTYgc2hhcmVkX3JhbV9zdGFydCkKK3sKKwlpZiAoKGlvcF9udW0gPj0gTlVNX0lPUFMpIHx8ICFpb3BfYmFzZVtpb3BfbnVtXSkgcmV0dXJuIGNvZGVfc3RhcnQ7CisKKwlpb3BfbG9hZGFkZHIoaW9wX2Jhc2VbaW9wX251bV0sIHNoYXJlZF9yYW1fc3RhcnQpOworCisJd2hpbGUgKGNvZGVfbGVuLS0pIHsKKwkJaWYgKCpjb2RlX3N0YXJ0ICE9IGlvcF9iYXNlW2lvcF9udW1dLT5yYW1fZGF0YSkgeworCQkJcmV0dXJuIGNvZGVfc3RhcnQ7CisJCX0KKwkJY29kZV9zdGFydCsrOworCX0KKwlyZXR1cm4gKF9fdTggKikgMDsKK30KKworLyoKKyAqIEhhbmRsZSBhbiBJU00gSU9QIGludGVycnVwdAorICovCisKK2lycXJldHVybl90IGlvcF9pc21faXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdWludCBpb3BfbnVtID0gKHVpbnQpIGRldl9pZDsKKwl2b2xhdGlsZSBzdHJ1Y3QgbWFjX2lvcCAqaW9wID0gaW9wX2Jhc2VbaW9wX251bV07CisJaW50IGksc3RhdGU7CisKKyNpZmRlZiBERUJVR19JT1AKKwlwcmludGsoImlvcF9pc21faXJxOiBzdGF0dXMgPSAlMDJYXG4iLCAodWludCkgaW9wLT5zdGF0dXNfY3RybCk7CisjZW5kaWYKKworCS8qIElOVDAgaW5kaWNhdGVzIGEgc3RhdGUgY2hhbmdlIG9uIGFuIG91dGdvaW5nIG1lc3NhZ2UgY2hhbm5lbCAqLworCisJaWYgKGlvcC0+c3RhdHVzX2N0cmwgJiBJT1BfSU5UMCkgeworCQlpb3AtPnN0YXR1c19jdHJsID0gSU9QX0lOVDAgfCBJT1BfUlVOIHwgSU9QX0FVVE9JTkM7CisjaWZkZWYgREVCVUdfSU9QCisJCXByaW50aygiaW9wX2lzbV9pcnE6IG5ldyBzdGF0dXMgPSAlMDJYLCBzZW5kIHN0YXRlcyIsCisJCQkodWludCkgaW9wLT5zdGF0dXNfY3RybCk7CisjZW5kaWYKKwkJZm9yIChpID0gMCA7IGkgPCBOVU1fSU9QX0NIQU4gIDsgaSsrKSB7CisJCQlzdGF0ZSA9IGlvcF9yZWFkYihpb3AsIElPUF9BRERSX1NFTkRfU1RBVEUgKyBpKTsKKyNpZmRlZiBERUJVR19JT1AKKwkJCXByaW50aygiICUwMlgiLCBzdGF0ZSk7CisjZW5kaWYKKwkJCWlmIChzdGF0ZSA9PSBJT1BfTVNHX0NPTVBMRVRFKSB7CisJCQkJaW9wX2hhbmRsZV9zZW5kKGlvcF9udW0sIGksIHJlZ3MpOworCQkJfQorCQl9CisjaWZkZWYgREVCVUdfSU9QCisJCXByaW50aygiXG4iKTsKKyNlbmRpZgorCX0KKworCWlmIChpb3AtPnN0YXR1c19jdHJsICYgSU9QX0lOVDEpIHsJLyogSU5UMSBmb3IgaW5jb21pbmcgbXNncyAqLworCQlpb3AtPnN0YXR1c19jdHJsID0gSU9QX0lOVDEgfCBJT1BfUlVOIHwgSU9QX0FVVE9JTkM7CisjaWZkZWYgREVCVUdfSU9QCisJCXByaW50aygiaW9wX2lzbV9pcnE6IG5ldyBzdGF0dXMgPSAlMDJYLCByZWN2IHN0YXRlcyIsCisJCQkodWludCkgaW9wLT5zdGF0dXNfY3RybCk7CisjZW5kaWYKKwkJZm9yIChpID0gMCA7IGkgPCBOVU1fSU9QX0NIQU4gOyBpKyspIHsKKwkJCXN0YXRlID0gaW9wX3JlYWRiKGlvcCwgSU9QX0FERFJfUkVDVl9TVEFURSArIGkpOworI2lmZGVmIERFQlVHX0lPUAorCQkJcHJpbnRrKCIgJTAyWCIsIHN0YXRlKTsKKyNlbmRpZgorCQkJaWYgKHN0YXRlID09IElPUF9NU0dfTkVXKSB7CisJCQkJaW9wX2hhbmRsZV9yZWN2KGlvcF9udW0sIGksIHJlZ3MpOworCQkJfQorCQl9CisjaWZkZWYgREVCVUdfSU9QCisJCXByaW50aygiXG4iKTsKKyNlbmRpZgorCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCitjaGFyICppb3BfY2hhbl9zdGF0ZShpbnQgc3RhdGUpCit7CisJc3dpdGNoKHN0YXRlKSB7CisJCWNhc2UgSU9QX01TR19JRExFCTogcmV0dXJuICJpZGxlICAgICAgIjsKKwkJY2FzZSBJT1BfTVNHX05FVwk6IHJldHVybiAibmV3ICAgICAgICI7CisJCWNhc2UgSU9QX01TR19SQ1ZECTogcmV0dXJuICJyZWNlaXZlZCAgIjsKKwkJY2FzZSBJT1BfTVNHX0NPTVBMRVRFCTogcmV0dXJuICJjb21wbGV0ZWQgIjsKKwkJZGVmYXVsdAkJCTogcmV0dXJuICJ1bmtub3duICAgIjsKKwl9Cit9CisKK2ludCBpb3BfZHVtcF9vbmVfaW9wKGNoYXIgKmJ1ZiwgaW50IGlvcF9udW0sIGNoYXIgKmlvcF9uYW1lKQoreworCWludCBpLGxlbiA9IDA7CisJdm9sYXRpbGUgc3RydWN0IG1hY19pb3AgKmlvcCA9IGlvcF9iYXNlW2lvcF9udW1dOworCisJbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIiVzIElPUCBjaGFubmVsIHN0YXRlczpcblxuIiwgaW9wX25hbWUpOworCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICIjIyAgc2VuZF9zdGF0ZSAgcmVjdl9zdGF0ZSAgZGV2aWNlXG4iKTsKKwlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlmb3IgKGkgPSAwIDsgaSA8IE5VTV9JT1BfQ0hBTiA7IGkrKykgeworCQlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiJTJkICAlMTBzICAlMTBzICAlc1xuIiwgaSwKKwkJCWlvcF9jaGFuX3N0YXRlKGlvcF9yZWFkYihpb3AsIElPUF9BRERSX1NFTkRfU1RBVEUraSkpLAorCQkJaW9wX2NoYW5fc3RhdGUoaW9wX3JlYWRiKGlvcCwgSU9QX0FERFJfUkVDVl9TVEFURStpKSksCisJCQlpb3BfbGlzdGVuZXJzW2lvcF9udW1dW2ldLmhhbmRsZXI/CisJCQkJICAgICAgaW9wX2xpc3RlbmVyc1tpb3BfbnVtXVtpXS5kZXZuYW1lIDogIiIpOworCisJfQorCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICJcbiIpOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgaW9wX2dldF9wcm9jX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IHBvcywgaW50IGNvdW50KQoreworCWludCBsZW4sIGNudDsKKworCWNudCA9IDA7CisJbGVuID0gIHNwcmludGYoYnVmLCAiSU9QcyBkZXRlY3RlZDpcblxuIik7CisKKwlpZiAoaW9wX3NjY19wcmVzZW50KSB7CisJCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICJTQ0MgSU9QICglcCk6IHN0YXR1cyAlMDJYXG4iLAorCQkJCWlvcF9iYXNlW0lPUF9OVU1fU0NDXSwKKwkJCQkodWludCkgaW9wX2Jhc2VbSU9QX05VTV9TQ0NdLT5zdGF0dXNfY3RybCk7CisJfQorCWlmIChpb3BfaXNtX3ByZXNlbnQpIHsKKwkJbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIklTTSBJT1AgKCVwKTogc3RhdHVzICUwMlhcblxuIiwKKwkJCQlpb3BfYmFzZVtJT1BfTlVNX0lTTV0sCisJCQkJKHVpbnQpIGlvcF9iYXNlW0lPUF9OVU1fSVNNXS0+c3RhdHVzX2N0cmwpOworCX0KKworCWlmIChpb3Bfc2NjX3ByZXNlbnQpIHsKKwkJbGVuICs9IGlvcF9kdW1wX29uZV9pb3AoYnVmK2xlbiwgSU9QX05VTV9TQ0MsICJTQ0MiKTsKKworCX0KKworCWlmIChpb3BfaXNtX3ByZXNlbnQpIHsKKwkJbGVuICs9IGlvcF9kdW1wX29uZV9pb3AoYnVmK2xlbiwgSU9QX05VTV9JU00sICJJU00iKTsKKworCX0KKworCWlmIChsZW4gPj0gcG9zKSB7CisJCWlmICghKnN0YXJ0KSB7CisJCQkqc3RhcnQgPSBidWYgKyBwb3M7CisJCQljbnQgPSBsZW4gLSBwb3M7CisJCX0gZWxzZSB7CisJCQljbnQgKz0gbGVuOworCQl9CisJfQorCXJldHVybiAoY291bnQgPiBjbnQpID8gY250IDogY291bnQ7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9tYWNfa3N5bXMuYyBiL2FyY2gvbTY4ay9tYWMvbWFjX2tzeW1zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUzN2NlYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tYWMvbWFjX2tzeW1zLmMKQEAgLTAsMCArMSw4IEBACisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorCisvKiBTYXlzIHdoZXRoZXIgd2UncmUgdXNpbmcgQS9VWCBpbnRlcnJ1cHRzIG9yIG5vdCAqLworZXh0ZXJuIGludCB2aWFfYWx0X21hcHBpbmc7CisKK0VYUE9SVF9TWU1CT0wodmlhX2FsdF9tYXBwaW5nKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvbWFjX3Blbmd1aW4uUyBiL2FyY2gvbTY4ay9tYWMvbWFjX3Blbmd1aW4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2NlMzBiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21hYy9tYWNfcGVuZ3Vpbi5TCkBAIC0wLDAgKzEsNzUgQEAKKy5ieXRlIFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHgwMCwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4MEYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGMCwweDBGLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwRiwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4MDAsMHgwMCwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweDAwLDB4MDAsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RjAsMHhGRiwweEYwLDB4RkYsMHhGRiwweDBGLDB4RjAsMHhGMCwweDBGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEYwLDB4RkYsMHgwMCwweEZGLDB4RkYsMHgwRiwweEZGLDB4MDAsMHgwRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGMCwweEZGLDB4RjAsMHgwRiwweEZGLDB4MEYsMHhGRiwweEYwLDB4MEYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHgwRiwweEZGLDB4MDAsMHgwRiwweDBGLDB4RkYsMHhGMCwweDBGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4MEYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RjAsMHgwRiwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweDAwLDB4RkYsMHhGMCwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwRiwweEYwLDB4MDAsMHgwMCwweEZGLDB4RjAsMHgwRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjAsMHgwMCwweDBGLDB4RjAsMHhGRiwweEZGLDB4MDAsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGMCwweDAwLDB4MEYsMHhGRiwweEYwLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHgwRiwweEZGLDB4MDAsMHhGRiwweEYwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEYwLDB4MDAsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGMCwweDAwLDB4MEYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEYwLDB4RkYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweDBGLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGMCwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweDBGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4MEYsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGMCwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4RjAsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4MEYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweDBGLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHgwRiwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4MEYsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGMCwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RjAsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEYwLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4MEYsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGMCwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweDBGLDB4RkYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4RjAsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHgwRiwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEZGLDB4MEYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEYwLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweEYwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEYwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHhGMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHgwMCwweDBGLDB4RkYsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4RjAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4MDAsMHgwRiwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHhGMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweDAwLDB4MDAsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4RjAsMHgwMCwweDAwLFwKKzB4MDAsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEYwLDB4MDAsMHgwMCxcCisweDBGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweDAwLDB4MDAsXAorMHgwRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHgwMCwweDAwLFwKKzB4MEYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RjAsMHgwMCxcCisweDBGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4RjAsXAorMHgwRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHgwRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLFwKKzB4MEYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLDB4MEYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDBGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweDBGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHgwRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4RkYsMHgwRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEZGLFwKKzB4MEYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RjAsMHhGRiwweEYwLDB4MDAsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4MEYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHgwMCxcCisweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEYwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweDAwLDB4MDAsXAorMHgwRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjAsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEZGLDB4MDAsMHgwMCwweDAwLFwKKzB4MEYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEYwLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwweEYwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsXAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwweEYwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLFwKKzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEZGLDB4MDAsMHgwRiwweEZGLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCxcCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MEYsMHhGRiwweEZGLDB4RkYsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvbWFjYm9pbmcuYyBiL2FyY2gvbTY4ay9tYWMvbWFjYm9pbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM1Y2QyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21hYy9tYWNib2luZy5jCkBAIC0wLDAgKzEsMzA5IEBACisvKgorICoJTWFjIGJvbmcgbm9pc2UgZ2VuZXJhdG9yLiBOb3RlIC0gd2Ugb3VnaHQgdG8gcHV0IGEgYm9pbmd5IG5vaXNlCisgKgloZXJlIDgpCisgKgorICoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJMTYuMTEuOTg6CisgKglyZXdyb3RlIHNvbWUgZnVuY3Rpb25zLCBhZGRlZCBzdXBwb3J0IGZvciBFbmhhbmNlZCBBU0MgKFF1YWRyYXMpCisgKglhZnRlciB0aGUgTmV0QlNEIGFzYy5jIGNvbnNvbGUgYmVsbCBwYXRjaCBieSBDb2xpbiBXb29kL0ZyZWRlcmljayBCcnVjaworICoJSnVlcmdlbiBNZWxsaW5nZXIgKGp1ZXJnZW4ubWVsbGluZ2VyQHQtb25saW5lLmRlKQorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaW50b3NoLmg+CisjaW5jbHVkZSA8YXNtL21hY19hc2MuaD4KKworc3RhdGljIGludCBtYWNfYXNjX2luaXRlZDsKKy8qCisgKiBkdW1iIHRyaWFuZ3VsYXIgd2F2ZSB0YWJsZQorICovCitzdGF0aWMgX191OCBtYWNfYXNjX3dhdmVfdGFiWyAweDgwMCBdOworCisvKgorICogQWxhbidzIG9yaWdpbmFsIHNpbmUgdGFibGU7IG5lZWRzIGludGVycG9sYXRpbmcgdG8gMHg4MDAKKyAqIChoaW50OiBpbnRlcnBvbGF0ZSBvciBoYXJkd2lyZSBbMCAtPiBQaS8yWywgaXQncyBzeW1tZXRyaWMpCisgKi8KK3N0YXRpYyBjb25zdCBzaWduZWQgY2hhciBzaW5lX2RhdGFbXSA9IHsKKwkwLCAgMzksICA3NSwgIDEwMywgIDEyMSwgIDEyNywgIDEyMSwgIDEwMywgIDc1LCAgMzksCisJMCwgLTM5LCAtNzUsIC0xMDMsIC0xMjEsIC0xMjcsIC0xMjEsIC0xMDMsIC03NSwgLTM5Cit9OworCisvKgorICogd2hlcmUgdGhlIEFTQyBoaWRlcyAuLi4KKyAqLworc3RhdGljIHZvbGF0aWxlIF9fdTgqIG1hY19hc2NfcmVncyA9ICggdm9pZCogKTB4NTBGMTQwMDA7CisKKy8qCisgKiBzYW1wbGUgcmF0ZTsgaXMgdGhpcyBhIGdvb2QgZGVmYXVsdCB2YWx1ZT8KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWFjX2FzY19zYW1wbGVzcGVyc2VjID0gMTEwNTA7CitzdGF0aWMgaW50IG1hY19iZWxsX2R1cmF0aW9uOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWFjX2JlbGxfcGhhc2U7IC8qIDAuLjIqUGkgLT4gMC4uMHg4MDAgKHdhdmV0YWJsZSBzaXplKSAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWFjX2JlbGxfcGhhc2VwZXJzYW1wbGU7CisKKy8qCisgKiBzb21lIGZ1bmN0aW9uIHByb3RvcworICovCitzdGF0aWMgdm9pZCBtYWNfaW5pdF9hc2MoIHZvaWQgKTsKK3N0YXRpYyB2b2lkIG1hY19ub3NvdW5kKCB1bnNpZ25lZCBsb25nICk7CitzdGF0aWMgdm9pZCBtYWNfcXVhZHJhX3N0YXJ0X2JlbGwoIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQgKTsKK3N0YXRpYyB2b2lkIG1hY19xdWFkcmFfcmluZ19iZWxsKCB1bnNpZ25lZCBsb25nICk7CitzdGF0aWMgdm9pZCBtYWNfYXZfc3RhcnRfYmVsbCggdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCApOworc3RhdGljIHZvaWQgKCAqbWFjX3NwZWNpYWxfYmVsbCApKCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50ICk7CisKKy8qCisgKiBvdXIgdGltZXIgdG8gc3RhcnQvY29udGludWUvc3RvcCB0aGUgYmVsbAorICovCitzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgbWFjX3NvdW5kX3RpbWVyID0KKwkJVElNRVJfSU5JVElBTElaRVIobWFjX25vc291bmQsIDAsIDApOworCisvKgorICogU29ydCBvZiBpbml0aWFsaXplIHRoZSBzb3VuZCBjaGlwIChjYWxsZWQgZnJvbSBtYWNfbWtzb3VuZCBvbiB0aGUgZmlyc3QKKyAqIGJlZXApLgorICovCitzdGF0aWMgdm9pZCBtYWNfaW5pdF9hc2MoIHZvaWQgKQoreworCWludCBpOworCisJLyoKKwkgKiBkbyBzb21lIG1hY2hpbmUgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24KKwkgKiBCVFc6CisJICogdGhlIE5ldEJTRCBRdWFkcmEgcGF0Y2ggaWRlbnRpZmllcyB0aGUgRW5oYW5jZWQgQXBwbGUgU291bmQgQ2hpcCB2aWEKKwkgKgltYWNfYXNjX3JlZ3NbIDB4ODAwIF0gJiAweEYwICE9IDAKKwkgKiB0aGlzIG1ha2VzIG5vIHNlbnNlIGhlcmUsIGJlY2F1c2Ugd2UgaGF2ZSB0byBzZXQgdGhlIGRlZmF1bHQgc2FtcGxlCisJICogcmF0ZSBhbnl3YXkgaWYgd2Ugd2FudCBjb3JyZWN0IGZyZXF1ZW5jaWVzCisJICovCisJc3dpdGNoICggbWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgKQorCXsKKwkJY2FzZSBNQUNfTU9ERUxfSUlGWDoKKwkJCS8qCisJCQkgKiBUaGUgSUlmeCBpcyBhbHdheXMgc3BlY2lhbCAuLi4KKwkJCSAqLworCQkJbWFjX2FzY19yZWdzID0gKCB2b2lkKiApMHg1MDAxMDAwMDsKKwkJCWJyZWFrOworCQkJLyoKKwkJCSAqIG5vdCBzdXJlIGFib3V0IGhvdyBjb3JyZWN0IHRoaXMgbGlzdCBpcworCQkJICogbWFjaGluZXMgd2l0aCB0aGUgRUFTQyBlbmhhbmNlZCBhcHBsZSBzb3VuZCBjaGlwCisJCQkgKi8KKwkJY2FzZSBNQUNfTU9ERUxfUTYzMDoKKwkJY2FzZSBNQUNfTU9ERUxfUDQ3NToKKwkJCW1hY19zcGVjaWFsX2JlbGwgPSBtYWNfcXVhZHJhX3N0YXJ0X2JlbGw7CisJCQltYWNfYXNjX3NhbXBsZXNwZXJzZWMgPSAyMjE1MDsKKwkJCWJyZWFrOworCQljYXNlIE1BQ19NT0RFTF9DNjYwOgorCQljYXNlIE1BQ19NT0RFTF9RODQwOgorCQkJLyoKKwkJCSAqIFRoZSBRdWFkcmEgNjYwQVYgYW5kIDg0MEFWIHVzZSB0aGUgIlNpbmdlciIgY3VzdG9tIEFTSUMgZm9yIHNvdW5kIEkvTy4KKwkJCSAqIEl0IGFwcGVhcnMgdG8gYmUgc2ltaWxhciB0byB0aGUgIkFXQUNTIiBjdXN0b20gQVNJQyBpbiB0aGUgUG93ZXIgTWFjCisJCQkgKiBbNjc4XTEwMC4gIEJlY2F1c2UgU2luZ2VyIGFuZCBBV0FDUyBtYXkgaGF2ZSBhIHNpbWlsYXIgaGFyZHdhcmUKKwkJCSAqIGludGVyZmFjZSwgdGhpcyB3b3VsZCBpbXBseSB0aGF0IHRoZSBjb2RlIGluIGRyaXZlcnMvc291bmQvZG1hc291bmQuYworCQkJICogZm9yIEFXQUNTIGNvdWxkIGJlIHVzZWQgYXMgYSBiYXNpcyBmb3IgU2luZ2VyIHN1cHBvcnQuICBBbGwgd2UgaGF2ZSB0bworCQkJICogZG8gaXMgZmlndXJlIG91dCBob3cgdG8gZG8gRE1BIG9uIHRoZSA2NjBBVi84NDBBViB0aHJvdWdoIHRoZSBQU0MgYW5kCisJCQkgKiBmaWd1cmUgb3V0IHdoZXJlIHRoZSBTaW5nZXIgaGFyZHdhcmUgc2l0cyBpbiBtZW1vcnkuIChJJ2QgbG9vayBpbiB0aGUKKwkJCSAqIHZpY2luaXR5IG9mIHRoZSBBV0FDUyBsb2NhdGlvbiBpbiBhIFBvd2VyIE1hYyBbNjc4XTEwMCBmaXJzdCwgb3IgdGhlCisJCQkgKiBjdXJyZW50IGxvY2F0aW9uIG9mIHRoZSBBcHBsZSBTb3VuZCBDaGlwLS1BU0MtLWluIG90aGVyIE1hY3MuKSAgVGhlCisJCQkgKiBQb3dlciBNYWMgWzY3OF0xMDAgaW5mbyBjYW4gYmUgZm91bmQgaW4gTWtMaW51eCBNYWNoIGtlcm5lbCBzb3VyY2VzLgorCQkJICoKKwkJCSAqIFF1b3RlZCBmcm9tIEFwcGxlJ3MgVGVjaCBJbmZvIExpYnJhcnksIGFydGljbGUgbnVtYmVyIDE2NDA1OgorCQkJICogICAiQW1vbmcgZGVza3RvcCBNYWNpbnRvc2ggY29tcHV0ZXJzLCBvbmx5IHRoZSA2NjBBViwgODQwQVYsIGFuZCBQb3dlcgorCQkJICogICBNYWNpbnRvc2ggbW9kZWxzIGhhdmUgMTYtYml0IGF1ZGlvIGlucHV0IGFuZCBvdXRwdXQgY2FwYWJpbGl0eQorCQkJICogICBiZWNhdXNlIG9mIHRoZSBBVCZUIERTUDMyMTAgaGFyZHdhcmUgY2lyY3VpdHJ5IGFuZCB0aGUgMTYtYml0IFNpbmdlcgorCQkJICogICBjb2RlYyBjaXJjdWl0cnkgaW4gdGhlIEFWcy4gIFRoZSBBdWRpbyBXYXZlZm9ybSBBbXBsaWZpZXIgYW5kCisJCQkgKiAgIENvbnZlcnRlciAoQVdBQykgY2hpcCBpbiB0aGUgUG93ZXIgTWFjaW50b3NoIHBlcmZvcm1zIHRoZSBzYW1lCisJCQkgKiAgIDE2LWJpdCBJL08gZnVuY3Rpb25hbGl0eS4gIFRoZSBQb3dlckJvb2sgNTAwIHNlcmllcyBjb21wdXRlcnMKKwkJCSAqICAgc3VwcG9ydCAxNi1iaXQgc3RlcmVvIG91dHB1dCwgYnV0IG9ubHkgbW9ubyBpbnB1dC4iCisJCQkgKgorCQkJICogICBodHRwOi8vdGlsLmluZm8uYXBwbGUuY29tL3RlY2hpbmZvLm5zZi9hcnRudW0vbjE2NDA1CisJCQkgKgorCQkJICogLS1EYXZpZCBLaWx6ZXIKKwkJCSAqLworCQkJbWFjX3NwZWNpYWxfYmVsbCA9IG1hY19hdl9zdGFydF9iZWxsOworCQkJYnJlYWs7CisJCWNhc2UgTUFDX01PREVMX1E2NTA6CisJCWNhc2UgTUFDX01PREVMX1E3MDA6CisJCWNhc2UgTUFDX01PREVMX1E4MDA6CisJCWNhc2UgTUFDX01PREVMX1E5MDA6CisJCWNhc2UgTUFDX01PREVMX1E5NTA6CisJCQkvKgorCQkJICogQ3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZCEKKwkJCSAqLworCQkJbWFjX3NwZWNpYWxfYmVsbCA9IE5VTEw7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qCisJCQkgKiBFdmVyeSBzd2l0Y2ggbmVlZHMgYSBkZWZhdWx0CisJCQkgKi8KKwkJCW1hY19zcGVjaWFsX2JlbGwgPSBOVUxMOworCQkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBpbml0IHRoZSB3YXZlIHRhYmxlIHdpdGggYSBzaW1wbGUgdHJpYW5ndWxhciB3YXZlCisJICogQSBzaW5lIHdhdmUgd291bGQgc3VyZSBiZSBuaWNlciBoZXJlIC4uLgorCSAqLworCWZvciAoIGkgPSAwOyBpIDwgMHg0MDA7IGkrKyApCisJeworCQltYWNfYXNjX3dhdmVfdGFiWyBpIF0gPSBpIC8gNDsKKwkJbWFjX2FzY193YXZlX3RhYlsgaSArIDB4NDAwIF0gPSAweEZGIC0gaSAvIDQ7CisJfQorCW1hY19hc2NfaW5pdGVkID0gMTsKK30KKworLyoKKyAqIENhbGxlZCB0byBtYWtlIG5vaXNlOyBjdXJyZW50IHNpbmdsZSBlbnRyeSB0byB0aGUgYm9pbmcgZHJpdmVyLgorICogRG9lcyB0aGUgam9iIGZvciBzaW1wbGUgQVNDLCBjYWxscyBvdGhlciByb3V0aW5lcyBlbHNlLgorICogWFhYIEZpeG1lOgorICogU2hvdWxkIGJlIHNwbGl0IGludG8gYXNjX21rc291bmQsIGVhc2NfbWtzb3VuZCwgYXZfbWtzb3VuZCBhbmQKKyAqIGZ1bmN0aW9uIHBvaW50ZXIgc2V0IGluIG1hY19pbml0X2FzYyB3aGljaCB3b3VsZCBiZSBjYWxsZWQgYXQKKyAqIGluaXQgdGltZS4KKyAqIF9UaGlzXyBpcyByYXRoZXIgdWdseSAuLi4KKyAqLwordm9pZCBtYWNfbWtzb3VuZCggdW5zaWduZWQgaW50IGZyZXEsIHVuc2lnbmVkIGludCBsZW5ndGggKQoreworCV9fdTMyIGNmcmVxID0gKCBmcmVxIDw8IDUgKSAvIDQ2ODsKKwlfX3UzMiBmbGFnczsKKwlpbnQgaTsKKworCWlmICggbWFjX3NwZWNpYWxfYmVsbCA9PSBOVUxMICkKKwl7CisJCS8qIERvIG5vdGhpbmcgKi8KKwkJcmV0dXJuOworCX0KKworCWlmICggIW1hY19hc2NfaW5pdGVkICkKKwkJbWFjX2luaXRfYXNjKCk7CisKKwlpZiAoIG1hY19zcGVjaWFsX2JlbGwgKQorCXsKKwkJbWFjX3NwZWNpYWxfYmVsbCggZnJlcSwgbGVuZ3RoLCAxMjggKTsKKwkJcmV0dXJuOworCX0KKworCWlmICggZnJlcSA8IDIwIHx8IGZyZXEgPiAyMDAwMCB8fCBsZW5ndGggPT0gMCApCisJeworCQltYWNfbm9zb3VuZCggMCApOworCQlyZXR1cm47CisJfQorCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJZGVsX3RpbWVyKCAmbWFjX3NvdW5kX3RpbWVyICk7CisKKwlmb3IgKCBpID0gMDsgaSA8IDB4ODAwOyBpKysgKQorCQltYWNfYXNjX3JlZ3NbIGkgXSA9IDA7CisJZm9yICggaSA9IDA7IGkgPCAweDgwMDsgaSsrICkKKwkJbWFjX2FzY19yZWdzWyBpIF0gPSBtYWNfYXNjX3dhdmVfdGFiWyBpIF07CisKKwlmb3IgKCBpID0gMDsgaSA8IDg7IGkrKyApCisJCSooIF9fdTMyKiApKCAoIF9fdTMyICltYWNfYXNjX3JlZ3MgKyBBU0NfQ09OVFJPTCArIDB4ODE0ICsgOCAqIGkgKSA9IGNmcmVxOworCisJbWFjX2FzY19yZWdzWyAweDgwNyBdID0gMDsKKwltYWNfYXNjX3JlZ3NbIEFTQ19WT0xVTUUgXSA9IDEyODsKKwltYWNfYXNjX3JlZ3NbIDB4ODA1IF0gPSAwOworCW1hY19hc2NfcmVnc1sgMHg4MEYgXSA9IDA7CisJbWFjX2FzY19yZWdzWyBBU0NfTU9ERSBdID0gQVNDX01PREVfU0FNUExFOworCW1hY19hc2NfcmVnc1sgQVNDX0VOQUJMRSBdID0gQVNDX0VOQUJMRV9TQU1QTEU7CisKKwltYWNfc291bmRfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBsZW5ndGg7CisJYWRkX3RpbWVyKCAmbWFjX3NvdW5kX3RpbWVyICk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiByZWd1bGFyIEFTQzogc3RvcCB3aGluaW5nIC4uCisgKi8KK3N0YXRpYyB2b2lkIG1hY19ub3NvdW5kKCB1bnNpZ25lZCBsb25nIGlnbm9yZWQgKQoreworCW1hY19hc2NfcmVnc1sgQVNDX0VOQUJMRSBdID0gMDsKK30KKworLyoKKyAqIEVBU0MgZW50cnk7IGluaXQgRUFTQywgZG9uJ3QgbG9hZCB3YXZldGFibGUsIHNjaGVkdWxlICdzdGFydCB3aGluaW5nJy4KKyAqLworc3RhdGljIHZvaWQgbWFjX3F1YWRyYV9zdGFydF9iZWxsKCB1bnNpZ25lZCBpbnQgZnJlcSwgdW5zaWduZWQgaW50IGxlbmd0aCwgdW5zaWduZWQgaW50IHZvbHVtZSApCit7CisJX191MzIgZmxhZ3M7CisKKwkvKiBpZiB0aGUgYmVsbCBpcyBhbHJlYWR5IHJpbmdpbmcsIHJpbmcgbG9uZ2VyICovCisJaWYgKCBtYWNfYmVsbF9kdXJhdGlvbiA+IDAgKQorCXsKKwkJbWFjX2JlbGxfZHVyYXRpb24gKz0gbGVuZ3RoOworCQlyZXR1cm47CisJfQorCisJbWFjX2JlbGxfZHVyYXRpb24gPSBsZW5ndGg7CisJbWFjX2JlbGxfcGhhc2UgPSAwOworCW1hY19iZWxsX3BoYXNlcGVyc2FtcGxlID0gKCBmcmVxICogc2l6ZW9mKCBtYWNfYXNjX3dhdmVfdGFiICkgKSAvIG1hY19hc2Nfc2FtcGxlc3BlcnNlYzsKKwkvKiB0aGlzIGlzIHJlYXNvbmFibHkgYmlnIGZvciBzbWFsbCBmcmVxdWVuY2llcyAqLworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJLyogc2V0IHRoZSB2b2x1bWUgKi8KKwltYWNfYXNjX3JlZ3NbIDB4ODA2IF0gPSB2b2x1bWU7CisKKwkvKiBzZXQgdXAgdGhlIEFTQyByZWdpc3RlcnMgKi8KKwlpZiAoIG1hY19hc2NfcmVnc1sgMHg4MDEgXSAhPSAxICkKKwl7CisJCS8qIHNlbGVjdCBtb25vIG1vZGUgKi8KKwkJbWFjX2FzY19yZWdzWyAweDgwNyBdID0gMDsKKwkJLyogc2VsZWN0IHNhbXBsZWQgc291bmQgbW9kZSAqLworCQltYWNfYXNjX3JlZ3NbIDB4ODAyIF0gPSAwOworCQkvKiA/Pz8gKi8KKwkJbWFjX2FzY19yZWdzWyAweDgwMSBdID0gMTsKKwkJbWFjX2FzY19yZWdzWyAweDgwMyBdIHw9IDB4ODA7CisJCW1hY19hc2NfcmVnc1sgMHg4MDMgXSAmPSAweDdGOworCX0KKworCW1hY19zb3VuZF90aW1lci5mdW5jdGlvbiA9IG1hY19xdWFkcmFfcmluZ19iZWxsOworCW1hY19zb3VuZF90aW1lci5leHBpcmVzID0gamlmZmllcyArIDE7CisJYWRkX3RpbWVyKCAmbWFjX3NvdW5kX3RpbWVyICk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBFQVNDICdzdGFydC9jb250aW51ZSB3aGluaW5nJzsgSSdtIG5vdCBzdXJlIHdoeSB0aGUgYWJvdmUgZnVuY3Rpb24gZGlkbid0CisgKiBhbHJlYWR5IGxvYWQgdGhlIHdhdmUgdGFibGUsIG9yIGF0IGxlYXN0IGNhbGwgdGhpcyBvbmUuLi4KKyAqIFRoaXMgcGllY2Uga2VlcHMgcmVsb2FkaW5nIHRoZSB3YXZlIHRhYmxlIHVudGlsIGRvbmUuCisgKi8KK3N0YXRpYyB2b2lkIG1hY19xdWFkcmFfcmluZ19iZWxsKCB1bnNpZ25lZCBsb25nIGlnbm9yZWQgKQoreworCWludAlpLCBjb3VudCA9IG1hY19hc2Nfc2FtcGxlc3BlcnNlYyAvIEhaOworCV9fdTMyIGZsYWdzOworCisJLyoKKwkgKiB3ZSBuZWl0aGVyIHdhbnQgYSBzb3VuZCBidWZmZXIgb3ZlcmZsb3cgbm9yIHVuZGVyZmxvdywgc28gd2UgbmVlZCB0byBtYXRjaAorCSAqIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBwZXIgdGltZXIgaW50ZXJydXB0IGFzIGV4YWN0bHkgYXMgcG9zc2libGUuCisJICogdXNpbmcgdGhlIGFzYyBpbnRlcnJ1cHQgd2lsbCBnaXZlIGJldHRlciByZXN1bHRzIGluIHRoZSBmdXR1cmUKKwkgKiAuLi5hbmQgdGhlIHBvc3NpYmlsaXR5IHRvIHVzZSBhIHJlYWwgc2FtcGxlIChhIGJvaW5neSBub2lzZSwgbWF5YmUuLi4pCisJICovCisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlkZWxfdGltZXIoICZtYWNfc291bmRfdGltZXIgKTsKKworCWlmICggbWFjX2JlbGxfZHVyYXRpb24tLSA+IDAgKQorCXsKKwkJZm9yICggaSA9IDA7IGkgPCBjb3VudDsgaSsrICkKKwkJeworCQkJbWFjX2JlbGxfcGhhc2UgKz0gbWFjX2JlbGxfcGhhc2VwZXJzYW1wbGU7CisJCQltYWNfYXNjX3JlZ3NbIDAgXSA9IG1hY19hc2Nfd2F2ZV90YWJbIG1hY19iZWxsX3BoYXNlICYgKCBzaXplb2YoIG1hY19hc2Nfd2F2ZV90YWIgKSAtIDEgKSBdOworCQl9CisJCW1hY19zb3VuZF90aW1lci5leHBpcmVzID0gamlmZmllcyArIDE7CisJCWFkZF90aW1lciggJm1hY19zb3VuZF90aW1lciApOworCX0KKwllbHNlCisJCW1hY19hc2NfcmVnc1sgMHg4MDEgXSA9IDA7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBBViBjb2RlIC0gcGxlYXNlIGZpbGwgaW4uCisgKi8KK3N0YXRpYyB2b2lkIG1hY19hdl9zdGFydF9iZWxsKCB1bnNpZ25lZCBpbnQgZnJlcSwgdW5zaWduZWQgaW50IGxlbmd0aCwgdW5zaWduZWQgaW50IHZvbHVtZSApCit7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL21hY2ludHMuYyBiL2FyY2gvbTY4ay9tYWMvbWFjaW50cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MDk2MDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbWFjL21hY2ludHMuYwpAQCAtMCwwICsxLDc2MCBAQAorLyoKKyAqCU1hY2ludG9zaCBpbnRlcnJ1cHRzCisgKgorICogR2VuZXJhbCBkZXNpZ246CisgKiBJbiBjb250cmFyeSB0byB0aGUgQW1pZ2EgYW5kIEF0YXJpIHBsYXRmb3JtcywgdGhlIE1hYyBoYXJkd2FyZSBzZWVtcyB0bworICogZXhjbHVzaXZlbHkgdXNlIHRoZSBhdXRvdmVjdG9yIGludGVycnVwdHMgKHRoZSAnZ2VuZXJpYyBsZXZlbDAtbGV2ZWw3JworICogaW50ZXJydXB0cyB3aXRoIGV4Y2VwdGlvbiB2ZWN0b3JzIDB4MTktMHgxZikuIFRoZSBmb2xsb3dpbmcgaW50ZXJydXB0IGxldmVscworICogYXJlIHVzZWQ6CisgKgkxCS0gVklBMQorICoJCSAgLSBzbG90IDA6IG9uZSBzZWNvbmQgaW50ZXJydXB0IChDQTIpCisgKgkJICAtIHNsb3QgMTogVkJsYW5rIChDQTEpCisgKgkJICAtIHNsb3QgMjogQURCIGRhdGEgcmVhZHkgKFNSIGZ1bGwpCisgKgkJICAtIHNsb3QgMzogQURCIGRhdGEgIChDQjIpCisgKgkJICAtIHNsb3QgNDogQURCIGNsb2NrIChDQjEpCisgKgkJICAtIHNsb3QgNTogdGltZXIgMgorICoJCSAgLSBzbG90IDY6IHRpbWVyIDEKKyAqCQkgIC0gc2xvdCA3OiBzdGF0dXMgb2YgSVJROyBzaWduYWxzICdhbnkgZW5hYmxlZCBpbnQuJworICoKKyAqCTIJLSBWSUEyIG9yIFJCVgorICoJCSAgLSBzbG90IDA6IFNDU0kgRFJRIChDQTIpCisgKgkJICAtIHNsb3QgMTogTlVCVVMgSVJRIChDQTEpIG5lZWQgdG8gcmVhZCBwb3J0IEEgdG8gZmluZCB3aGljaAorICoJCSAgLSBzbG90IDI6IC9FWFAgSVJRIChvbmx5IG9uIElJY2kpCisgKgkJICAtIHNsb3QgMzogU0NTSSBJUlEgKENCMikKKyAqCQkgIC0gc2xvdCA0OiBBU0MgSVJRIChDQjEpCisgKgkJICAtIHNsb3QgNTogdGltZXIgMiAobm90IG9uIElJY2kpCisgKgkJICAtIHNsb3QgNjogdGltZXIgMSAobm90IG9uIElJY2kpCisgKgkJICAtIHNsb3QgNzogc3RhdHVzIG9mIElSUTsgc2lnbmFscyAnYW55IGVuYWJsZWQgaW50LicKKyAqCisgKgkyCS0gT1NTIChJSWZ4IG9ubHk/KQorICoJCSAgLSBzbG90IDA6IFNDU0kgaW50ZXJydXB0CisgKgkJICAtIHNsb3QgMTogU291bmQgaW50ZXJydXB0CisgKgorICogTGV2ZWxzIDMtNiB2YXJ5IGJ5IG1hY2hpbmUgdHlwZS4gRm9yIFZJQSBvciBSQlYgTWFjaW50b3NoZXM6CisgKgorICoJMwktIHVudXNlZCAoPykKKyAqCisgKgk0CS0gU0NDIChzbG90IG51bWJlciBkZXRlcm1pbmVkIGJ5IHJlYWRpbmcgUlIzIG9uIHRoZSBTU0MgaXRzZWxmKQorICoJCSAgLSBzbG90IDE6IFNDQyBjaGFubmVsIEEKKyAqCQkgIC0gc2xvdCAyOiBTQ0MgY2hhbm5lbCBCCisgKgorICoJNQktIHVudXNlZCAoPykKKyAqCQkgIFtzZXJpYWwgZXJyb3JzIG9yIHNwZWNpYWwgY29uZGl0aW9ucyBzZWVtIHRvIHJhaXNlIGxldmVsIDYKKyAqCQkgIGludGVycnVwdHMgb24gc29tZSBtb2RlbHMgKExDNHh4PyldCisgKgorICoJNgktIG9mZiBzd2l0Y2ggKD8pCisgKgorICogRm9yIE9TUyBNYWNpbnRvc2hlcyAoSUlmeCBvbmx5IGF0IHRoaXMgcG9pbnQpOgorICoKKyAqCTMJLSBOdWJ1cyBpbnRlcnJ1cHQKKyAqCQkgIC0gc2xvdCAwOiBTbG90ICQ5CisgKgkJICAtIHNsb3QgMTogU2xvdCAkQQorICoJCSAgLSBzbG90IDI6IFNsb3QgJEIKKyAqCQkgIC0gc2xvdCAzOiBTbG90ICRDCisgKgkJICAtIHNsb3QgNDogU2xvdCAkRAorICoJCSAgLSBzbG90IDU6IFNsb3QgJEUKKyAqCisgKgk0CS0gU0NDIElPUAorICoJCSAgLSBzbG90IDE6IFNDQyBjaGFubmVsIEEKKyAqCQkgIC0gc2xvdCAyOiBTQ0MgY2hhbm5lbCBCCisgKgorICoJNQktIElTTSBJT1AgKEFEQj8pCisgKgorICoJNgktIHVudXNlZAorICoKKyAqIEZvciBQU0MgTWFjaW50b3NoZXMgKDY2MEFWLCA4NDBBVik6CisgKgorICoJMwktIFBTQyBsZXZlbCAzCisgKgkJICAtIHNsb3QgMDogTUFDRQorICoKKyAqCTQJLSBQU0MgbGV2ZWwgNAorICoJCSAgLSBzbG90IDE6IFNDQyBjaGFubmVsIEEgaW50ZXJydXB0CisgKgkJICAtIHNsb3QgMjogU0NDIGNoYW5uZWwgQiBpbnRlcnJ1cHQKKyAqCQkgIC0gc2xvdCAzOiBNQUNFIERNQQorICoKKyAqCTUJLSBQU0MgbGV2ZWwgNQorICoKKyAqCTYJLSBQU0MgbGV2ZWwgNgorICoKKyAqIEZpbmFsbHkgd2UgaGF2ZSBnb29kICdvbGUgbGV2ZWwgNywgdGhlIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQ6CisgKgorICoJNwktIE5NSSAocHJvZ3JhbW1lcidzIHN3aXRjaCBvbiB0aGUgYmFjayBvZiBzb21lIE1hY3MpCisgKgkJICBBbHNvIFJBTSBwYXJpdHkgZXJyb3Igb24gbW9kZWxzIHdoaWNoIHN1cHBvcnQgaXQgKElJYywgSUlmeD8pCisgKgorICogVGhlIGN1cnJlbnQgaW50ZXJydXB0IGxvZ2ljIGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6CisgKgorICogLSBXZSBpbnN0YWxsIGRpc3BhdGNoZXJzIGZvciB0aGUgYXV0b3ZlY3RvciBpbnRlcnJ1cHRzICgxLTcpLiBUaGVzZQorICogICBkaXNwYXRjaGVycyBhcmUgcmVzcG9uc2libGUgZm9yIHF1ZXJ5aW5nIHRoZSBoYXJkd2FyZSAodGhlCisgKiAgIFZJQS9SQlYvT1NTL1BTQyBjaGlwcykgdG8gZGV0ZXJtaW5lIHRoZSBhY3R1YWwgaW50ZXJydXB0IHNvdXJjZS4gVXNpbmcKKyAqICAgdGhpcyBpbmZvcm1hdGlvbiBhIG1hY2hzcGVjIGludGVycnVwdCBudW1iZXIgaXMgZ2VuZXJhdGVkIGJ5IHBsYWNpbmcgdGhlCisgKiAgIGluZGV4IG9mIHRoZSBpbnRlcnJ1cHQgaGFyZHdhcmUgaW50byB0aGUgbG93IHRocmVlIGJpdHMgYW5kIHRoZSBvcmlnaW5hbAorICogICBhdXRvdmVjdG9yIGludGVycnVwdCBudW1iZXIgaW4gdGhlIHVwcGVyIDUgYml0cy4gVGhlIGhhbmRsZXJzIGZvciB0aGUKKyAqICAgcmVzdWx0aW5nIG1hY2hzcGVjIGludGVycnVwdCBhcmUgdGhlbiBjYWxsZWQuCisgKgorICogLSBOdWJ1cyBpcyBhIHNwZWNpYWwgY2FzZSBiZWNhdXNlIGl0cyBpbnRlcnJ1cHRzIGFyZSBoaWRkZW4gYmVoaW5kIHR3bworICogICBsYXllcnMgb2YgaGFyZHdhcmUuIE51YnVzIGludGVycnVwdHMgY29tZSBpbiBhcyBpbmRleCAxIG9uIFZJQSAjMiwKKyAqICAgd2hpY2ggdHJhbnNsYXRlcyB0byBJUlEgbnVtYmVyIDE3LiBJbiB0aGlzIHNwb3Qgd2UgaW5zdGFsbCBfYW5vdGhlcl8KKyAqICAgZGlzcGF0Y2hlci4gVGhpcyBkaXNwYXRjaGVyIGZpbmRzIHRoZSBpbnRlcnJ1cHRpbmcgc2xvdCBudW1iZXIgKDktRikgYW5kCisgKiAgIHRoZW4gZm9ybXMgYSBuZXcgbWFjaHNwZWMgaW50ZXJydXB0IG51bWJlciBhcyBhYm92ZSB3aXRoIHRoZSBzbG90IG51bWJlcgorICogICBtaW51cyA5IGluIHRoZSBsb3cgdGhyZWUgYml0cyBhbmQgdGhlIHBzZXVkby1sZXZlbCA3IGluIHRoZSB1cHBlciBmaXZlCisgKiAgIGJpdHMuICBUaGUgaGFuZGxlcnMgZm9yIHRoaXMgbmV3IG1hY2hzcGVjIGludGVycnVwdCBudW1iZXIgYXJlIHRoZW4KKyAqICAgY2FsbGVkLiBUaGlzIHB1dHMgTnVidXMgaW50ZXJydXB0cyBpbnRvIHRoZSByYW5nZSA1Ni02Mi4KKyAqCisgKiAtIFRoZSBCYWJvb24gaW50ZXJydXB0cyAodXNlZCBvbiBzb21lIFBvd2VyQm9va3MpIGFyZSBhbiBldmVuIG1vcmUgc3BlY2lhbAorICogICBjYXNlLiBUaGV5J3JlIGhpZGRlbiBiZWhpbmQgdGhlIE51YnVzIHNsb3QgJEMgaW50ZXJydXB0IHRodXMgYWRkaW5nIGEKKyAqICAgdGhpcmQgbGF5ZXIgb2YgaW5kaXJlY3Rpb24uIFdoeSBvaCB3aHkgZGlkIHRoZSBBcHBsZSBlbmdpbmVlcnMgZG8gdGhhdD8KKyAqCisgKiAtIFdlIHN1cHBvcnQgImZhc3QiIGFuZCAic2xvdyIgaGFuZGxlcnMsIGp1c3QgbGlrZSB0aGUgQW1pZ2EgcG9ydC4gVGhlCisgKiAgIGZhc3QgaGFuZGxlcnMgYXJlIGNhbGxlZCBmaXJzdCBhbmQgd2l0aCBhbGwgaW50ZXJydXB0cyBkaXNhYmxlZC4gVGhleQorICogICBhcmUgZXhwZWN0ZWQgdG8gZXhlY3V0ZSBxdWlja2x5IChoZW5jZSB0aGUgbmFtZSkuIFRoZSBzbG93IGhhbmRsZXJzIGFyZQorICogICBjYWxsZWQgbGFzdCB3aXRoIGludGVycnVwdHMgZW5hYmxlZCBhbmQgdGhlIGludGVycnVwdCBsZXZlbCByZXN0b3JlZC4KKyAqICAgVGhleSBtdXN0IHRoZXJlZm9yZSBiZSByZWVudHJhbnQuCisgKgorICogICBUT0RPOgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+IC8qIGZvciBpbnRyX2NvdW50ICovCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaHcuaD4KKyNpbmNsdWRlIDxhc20vbWFjaW50b3NoLmg+CisjaW5jbHVkZSA8YXNtL21hY192aWEuaD4KKyNpbmNsdWRlIDxhc20vbWFjX3BzYy5oPgorI2luY2x1ZGUgPGFzbS9od3Rlc3QuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaW50cy5oPgorCisjZGVmaW5lIERFQlVHX1NQVVJJT1VTCisjZGVmaW5lIFNIVVRVUF9TT05JQworCisvKgorICogVGhlIG1hY19pcnFfbGlzdCBhcnJheSBpcyBhbiBhcnJheSBvZiBsaW5rZWQgbGlzdHMgb2YgaXJxX25vZGVfdCBub2Rlcy4KKyAqIEVhY2ggbm9kZSBjb250YWlucyBvbmUgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGludGVycnVwdAorICogb2NjdXJzLCB3aXRoIGZhc3QgaGFuZGxlcnMgbGlzdGVkIGJlZm9yZSBzbG93IGhhbmRsZXJzLgorICovCisKK2lycV9ub2RlX3QgKm1hY19pcnFfbGlzdFtOVU1fTUFDX1NPVVJDRVNdOworCisvKiBTQ0MgaW50ZXJydXB0IG1hc2sgKi8KKworc3RhdGljIGludCBzY2NfbWFzazsKKworLyoKKyAqIFZJQS9SQlYgaG9va3MKKyAqLworCitleHRlcm4gdm9pZCB2aWFfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHZpYV9yZWdpc3Rlcl9pbnRlcnJ1cHRzKHZvaWQpOworZXh0ZXJuIHZvaWQgdmlhX2lycV9lbmFibGUoaW50KTsKK2V4dGVybiB2b2lkIHZpYV9pcnFfZGlzYWJsZShpbnQpOworZXh0ZXJuIHZvaWQgdmlhX2lycV9jbGVhcihpbnQpOworZXh0ZXJuIGludCAgdmlhX2lycV9wZW5kaW5nKGludCk7CisKKy8qCisgKiBPU1MgaG9va3MKKyAqLworCitleHRlcm4gaW50IG9zc19wcmVzZW50OworCitleHRlcm4gdm9pZCBvc3NfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG9zc19yZWdpc3Rlcl9pbnRlcnJ1cHRzKHZvaWQpOworZXh0ZXJuIHZvaWQgb3NzX2lycV9lbmFibGUoaW50KTsKK2V4dGVybiB2b2lkIG9zc19pcnFfZGlzYWJsZShpbnQpOworZXh0ZXJuIHZvaWQgb3NzX2lycV9jbGVhcihpbnQpOworZXh0ZXJuIGludCAgb3NzX2lycV9wZW5kaW5nKGludCk7CisKKy8qCisgKiBQU0MgaG9va3MKKyAqLworCitleHRlcm4gaW50IHBzY19wcmVzZW50OworCitleHRlcm4gdm9pZCBwc2NfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHBzY19yZWdpc3Rlcl9pbnRlcnJ1cHRzKHZvaWQpOworZXh0ZXJuIHZvaWQgcHNjX2lycV9lbmFibGUoaW50KTsKK2V4dGVybiB2b2lkIHBzY19pcnFfZGlzYWJsZShpbnQpOworZXh0ZXJuIHZvaWQgcHNjX2lycV9jbGVhcihpbnQpOworZXh0ZXJuIGludCAgcHNjX2lycV9wZW5kaW5nKGludCk7CisKKy8qCisgKiBJT1AgaG9va3MKKyAqLworCitleHRlcm4gdm9pZCBpb3BfcmVnaXN0ZXJfaW50ZXJydXB0cyh2b2lkKTsKKworLyoKKyAqIEJhYm9vbiBob29rcworICovCisKK2V4dGVybiBpbnQgYmFib29uX3ByZXNlbnQ7CisKK2V4dGVybiB2b2lkIGJhYm9vbl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgYmFib29uX3JlZ2lzdGVyX2ludGVycnVwdHModm9pZCk7CitleHRlcm4gdm9pZCBiYWJvb25faXJxX2VuYWJsZShpbnQpOworZXh0ZXJuIHZvaWQgYmFib29uX2lycV9kaXNhYmxlKGludCk7CitleHRlcm4gdm9pZCBiYWJvb25faXJxX2NsZWFyKGludCk7CitleHRlcm4gaW50ICBiYWJvb25faXJxX3BlbmRpbmcoaW50KTsKKworLyoKKyAqIFNDQyBpbnRlcnJ1cHQgcm91dGluZXMKKyAqLworCitzdGF0aWMgdm9pZCBzY2NfaXJxX2VuYWJsZShpbnQpOworc3RhdGljIHZvaWQgc2NjX2lycV9kaXNhYmxlKGludCk7CisKKy8qCisgKiBjb25zb2xlX2xvZ2xldmVsIGRldGVybWluZXMgTk1JIGhhbmRsZXIgZnVuY3Rpb24KKyAqLworCitleHRlcm4gaXJxcmV0dXJuX3QgbWFjX2JhbmcoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworaXJxcmV0dXJuX3QgbWFjX25taV9oYW5kbGVyKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2lycXJldHVybl90IG1hY19kZWJ1Z19oYW5kbGVyKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKworLyogI2RlZmluZSBERUJVR19NQUNJTlRTICovCisKK3ZvaWQgbWFjX2luaXRfSVJRKHZvaWQpCit7CisgICAgICAgIGludCBpOworCisjaWZkZWYgREVCVUdfTUFDSU5UUworCXByaW50aygibWFjX2luaXRfSVJRKCk6IFNldHRpbmcgdGhpbmdzIHVwLi4uXG4iKTsKKyNlbmRpZgorCS8qIEluaXRpYWxpemUgdGhlIElSUSBoYW5kbGVyIGxpc3RzLiBJbml0aWFsbHkgZWFjaCBsaXN0IGlzIGVtcHR5LCAqLworCisJZm9yIChpID0gMDsgaSA8IE5VTV9NQUNfU09VUkNFUzsgaSsrKSB7CisJCW1hY19pcnFfbGlzdFtpXSA9IE5VTEw7CisJfQorCisJc2NjX21hc2sgPSAwOworCisJLyogTWFrZSBzdXJlIHRoZSBTT05JQyBpbnRlcnJ1cHQgaXMgY2xlYXJlZCBvciB0aGluZ3MgZ2V0IHVnbHkgKi8KKyNpZmRlZiBTSFVUVVBfU09OSUMKKwlwcmludGsoIktpbGxpbmcgb25ib2FyZCBzb25pYy4uLiAiKTsKKwkvKiBUaGlzIGFkZHJlc3Mgc2hvdWxkIGhvcGVmdWxseSBiZSBtYXBwZWQgYWxyZWFkeSAqLworCWlmIChod3JlZ19wcmVzZW50KCh2b2lkKikoMHg1MGYwYTAwMCkpKSB7CisJCSoobG9uZyAqKSgweDUwZjBhMDE0KSA9IDB4N2ZmZkw7CisJCSoobG9uZyAqKSgweDUwZjBhMDEwKSA9IDBMOworCX0KKwlwcmludGsoIkRvbmUuXG4iKTsKKyNlbmRpZiAvKiBTSFVUVVBfU09OSUMgKi8KKworCS8qCisJICogTm93IHJlZ2lzdGVyIHRoZSBoYW5kbGVycyBmb3IgdGhlIG1hc3RlciBJUlEgaGFuZGxlcnMKKwkgKiBhdCBsZXZlbHMgMS03LiBNb3N0IG9mIHRoZSB3b3JrIGlzIGRvbmUgZWxzZXdoZXJlLgorCSAqLworCisJaWYgKG9zc19wcmVzZW50KSB7CisJCW9zc19yZWdpc3Rlcl9pbnRlcnJ1cHRzKCk7CisJfSBlbHNlIHsKKwkJdmlhX3JlZ2lzdGVyX2ludGVycnVwdHMoKTsKKwl9CisJaWYgKHBzY19wcmVzZW50KSBwc2NfcmVnaXN0ZXJfaW50ZXJydXB0cygpOworCWlmIChiYWJvb25fcHJlc2VudCkgYmFib29uX3JlZ2lzdGVyX2ludGVycnVwdHMoKTsKKwlpb3BfcmVnaXN0ZXJfaW50ZXJydXB0cygpOworCWNwdV9yZXF1ZXN0X2lycSg3LCBtYWNfbm1pX2hhbmRsZXIsIElSUV9GTEdfTE9DSywgIk5NSSIsCisJCQltYWNfbm1pX2hhbmRsZXIpOworI2lmZGVmIERFQlVHX01BQ0lOVFMKKwlwcmludGsoIm1hY19pbml0X0lSUSgpOiBEb25lIVxuIik7CisjZW5kaWYKK30KKworLyoKKyAqIFJvdXRpbmVzIHRvIHdvcmsgd2l0aCBpcnFfbm9kZV90J3Mgb24gbGlua2VkIGxpc3RzIGxpZnRlZCBmcm9tCisgKiB0aGUgQW1pZ2EgY29kZSB3cml0dGVuIGJ5IFJvbWFuIFppcHBlbC4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgbWFjX2luc2VydF9pcnEoaXJxX25vZGVfdCAqKmxpc3QsIGlycV9ub2RlX3QgKm5vZGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpcnFfbm9kZV90ICpjdXI7CisKKwlpZiAoIW5vZGUtPmRldl9pZCkKKwkJcHJpbnRrKCIlczogV2FybmluZzogZGV2X2lkIG9mICVzIGlzIHplcm9cbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIG5vZGUtPmRldm5hbWUpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJY3VyID0gKmxpc3Q7CisKKwlpZiAobm9kZS0+ZmxhZ3MgJiBJUlFfRkxHX0ZBU1QpIHsKKwkJbm9kZS0+ZmxhZ3MgJj0gfklSUV9GTEdfU0xPVzsKKwkJd2hpbGUgKGN1ciAmJiBjdXItPmZsYWdzICYgSVJRX0ZMR19GQVNUKSB7CisJCQlsaXN0ID0gJmN1ci0+bmV4dDsKKwkJCWN1ciA9IGN1ci0+bmV4dDsKKwkJfQorCX0gZWxzZSBpZiAobm9kZS0+ZmxhZ3MgJiBJUlFfRkxHX1NMT1cpIHsKKwkJd2hpbGUgKGN1cikgeworCQkJbGlzdCA9ICZjdXItPm5leHQ7CisJCQljdXIgPSBjdXItPm5leHQ7CisJCX0KKwl9IGVsc2UgeworCQl3aGlsZSAoY3VyICYmICEoY3VyLT5mbGFncyAmIElSUV9GTEdfU0xPVykpIHsKKwkJCWxpc3QgPSAmY3VyLT5uZXh0OworCQkJY3VyID0gY3VyLT5uZXh0OworCQl9CisJfQorCisJbm9kZS0+bmV4dCA9IGN1cjsKKwkqbGlzdCA9IG5vZGU7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYWNfZGVsZXRlX2lycShpcnFfbm9kZV90ICoqbGlzdCwgdm9pZCAqZGV2X2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaXJxX25vZGVfdCAqbm9kZTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWZvciAobm9kZSA9ICpsaXN0OyBub2RlOyBsaXN0ID0gJm5vZGUtPm5leHQsIG5vZGUgPSAqbGlzdCkgeworCQlpZiAobm9kZS0+ZGV2X2lkID09IGRldl9pZCkgeworCQkJKmxpc3QgPSBub2RlLT5uZXh0OworCQkJLyogTWFyayBpdCBhcyBmcmVlLiAqLworCQkJbm9kZS0+aGFuZGxlciA9IE5VTEw7CisJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXByaW50ayAoIiVzOiB0cmllZCB0byByZW1vdmUgaW52YWxpZCBpcnFcbiIsIF9fRlVOQ1RJT05fXyk7Cit9CisKKy8qCisgKiBDYWxsIGFsbCB0aGUgaGFuZGxlcnMgZm9yIGEgZ2l2ZW4gaW50ZXJydXB0LiBGYXN0IGhhbmRsZXJzIGFyZSBjYWxsZWQKKyAqIGZpcnN0IGZvbGxvd2VkIGJ5IHNsb3cgaGFuZGxlcnMuCisgKgorICogVGhpcyBjb2RlIHRha2VuIGZyb20gdGhlIG9yaWdpbmFsIEFtaWdhIGNvZGUgd3JpdHRlbiBieSBSb21hbiBaaXBwZWwuCisgKi8KKwordm9pZCBtYWNfZG9faXJxX2xpc3QoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCWlycV9ub2RlX3QgKm5vZGUsICpzbG93X25vZGVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlrc3RhdF9jcHUoMCkuaXJxc1tpcnFdKys7CisKKyNpZmRlZiBERUJVR19TUFVSSU9VUworCWlmICghbWFjX2lycV9saXN0W2lycV0gJiYgKGNvbnNvbGVfbG9nbGV2ZWwgPiA3KSkgeworCQlwcmludGsoIm1hY19kb19pcnFfbGlzdDogc3B1cmlvdXMgaW50ZXJydXB0ICVkIVxuIiwgaXJxKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCisJLyogc2VydmUgZmlyc3QgZmFzdCBhbmQgbm9ybWFsIGhhbmRsZXJzICovCisJZm9yIChub2RlID0gbWFjX2lycV9saXN0W2lycV07CisJICAgICBub2RlICYmICghKG5vZGUtPmZsYWdzICYgSVJRX0ZMR19TTE9XKSk7CisJICAgICBub2RlID0gbm9kZS0+bmV4dCkKKwkJbm9kZS0+aGFuZGxlcihpcnEsIG5vZGUtPmRldl9pZCwgZnApOworCWlmICghbm9kZSkgcmV0dXJuOworCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOworCWxvY2FsX2lycV9yZXN0b3JlKChmbGFncyAmIH4weDA3MDApIHwgKGZwLT5zciAmIDB4MDcwMCkpOworCS8qIGlmIHNsb3cgaGFuZGxlcnMgZXhpc3RzLCBzZXJ2ZSB0aGVtIG5vdyAqLworCXNsb3dfbm9kZXMgPSBub2RlOworCWZvciAoOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkgeworCQlub2RlLT5oYW5kbGVyKGlycSwgbm9kZS0+ZGV2X2lkLCBmcCk7CisJfQorfQorCisvKgorICogIG1hY19lbmFibGVfaXJxIC0gZW5hYmxlIGFuIGludGVycnVwdCBzb3VyY2UKKyAqIG1hY19kaXNhYmxlX2lycSAtIGRpc2FibGUgYW4gaW50ZXJydXB0IHNvdXJjZQorICogICBtYWNfY2xlYXJfaXJxIC0gY2xlYXJzIGEgcGVuZGluZyBpbnRlcnJ1cHQKKyAqIG1hY19wZW5kaW5nX2lycSAtIFJldHVybnMgdGhlIHBlbmRpbmcgc3RhdHVzIG9mIGFuIElSUSAobm9uemVybyA9IHBlbmRpbmcpCisgKgorICogVGhlc2Ugcm91dGluZXMgYXJlIGp1c3QgZGlzcGF0Y2hlcnMgdG8gdGhlIFZJQS9PU1MvUFNDIHJvdXRpbmVzLgorICovCisKK3ZvaWQgbWFjX2VuYWJsZV9pcnEgKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGlycV9zcmMJPSBJUlFfU1JDKGlycSk7CisKKwlzd2l0Y2goaXJxX3NyYykgeworCQljYXNlIDE6IHZpYV9pcnFfZW5hYmxlKGlycSk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQljYXNlIDc6IGlmIChvc3NfcHJlc2VudCkgeworCQkJCW9zc19pcnFfZW5hYmxlKGlycSk7CisJCQl9IGVsc2UgeworCQkJCXZpYV9pcnFfZW5hYmxlKGlycSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQljYXNlIDQ6CisJCWNhc2UgNToKKwkJY2FzZSA2OiBpZiAocHNjX3ByZXNlbnQpIHsKKwkJCQlwc2NfaXJxX2VuYWJsZShpcnEpOworCQkJfSBlbHNlIGlmIChvc3NfcHJlc2VudCkgeworCQkJCW9zc19pcnFfZW5hYmxlKGlycSk7CisJCQl9IGVsc2UgaWYgKGlycV9zcmMgPT0gNCkgeworCQkJCXNjY19pcnFfZW5hYmxlKGlycSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSA4OiBpZiAoYmFib29uX3ByZXNlbnQpIHsKKwkJCQliYWJvb25faXJxX2VuYWJsZShpcnEpOworCQkJfQorCQkJYnJlYWs7CisJfQorfQorCit2b2lkIG1hY19kaXNhYmxlX2lycSAodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgaXJxX3NyYwk9IElSUV9TUkMoaXJxKTsKKworCXN3aXRjaChpcnFfc3JjKSB7CisJCWNhc2UgMTogdmlhX2lycV9kaXNhYmxlKGlycSk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQljYXNlIDc6IGlmIChvc3NfcHJlc2VudCkgeworCQkJCW9zc19pcnFfZGlzYWJsZShpcnEpOworCQkJfSBlbHNlIHsKKwkJCQl2aWFfaXJxX2Rpc2FibGUoaXJxKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDM6CisJCWNhc2UgNDoKKwkJY2FzZSA1OgorCQljYXNlIDY6IGlmIChwc2NfcHJlc2VudCkgeworCQkJCXBzY19pcnFfZGlzYWJsZShpcnEpOworCQkJfSBlbHNlIGlmIChvc3NfcHJlc2VudCkgeworCQkJCW9zc19pcnFfZGlzYWJsZShpcnEpOworCQkJfSBlbHNlIGlmIChpcnFfc3JjID09IDQpIHsKKwkJCQlzY2NfaXJxX2Rpc2FibGUoaXJxKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDg6IGlmIChiYWJvb25fcHJlc2VudCkgeworCQkJCWJhYm9vbl9pcnFfZGlzYWJsZShpcnEpOworCQkJfQorCQkJYnJlYWs7CisJfQorfQorCit2b2lkIG1hY19jbGVhcl9pcnEoIHVuc2lnbmVkIGludCBpcnEgKQoreworCXN3aXRjaChJUlFfU1JDKGlycSkpIHsKKwkJY2FzZSAxOiB2aWFfaXJxX2NsZWFyKGlycSk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQljYXNlIDc6IGlmIChvc3NfcHJlc2VudCkgeworCQkJCW9zc19pcnFfY2xlYXIoaXJxKTsKKwkJCX0gZWxzZSB7CisJCQkJdmlhX2lycV9jbGVhcihpcnEpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJY2FzZSA0OgorCQljYXNlIDU6CisJCWNhc2UgNjogaWYgKHBzY19wcmVzZW50KSB7CisJCQkJcHNjX2lycV9jbGVhcihpcnEpOworCQkJfSBlbHNlIGlmIChvc3NfcHJlc2VudCkgeworCQkJCW9zc19pcnFfY2xlYXIoaXJxKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDg6IGlmIChiYWJvb25fcHJlc2VudCkgeworCQkJCWJhYm9vbl9pcnFfY2xlYXIoaXJxKTsKKwkJCX0KKwkJCWJyZWFrOworCX0KK30KKworaW50IG1hY19pcnFfcGVuZGluZyggdW5zaWduZWQgaW50IGlycSApCit7CisJc3dpdGNoKElSUV9TUkMoaXJxKSkgeworCQljYXNlIDE6IHJldHVybiB2aWFfaXJxX3BlbmRpbmcoaXJxKTsKKwkJY2FzZSAyOgorCQljYXNlIDc6IGlmIChvc3NfcHJlc2VudCkgeworCQkJCXJldHVybiBvc3NfaXJxX3BlbmRpbmcoaXJxKTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0dXJuIHZpYV9pcnFfcGVuZGluZyhpcnEpOworCQkJfQorCQljYXNlIDM6CisJCWNhc2UgNDoKKwkJY2FzZSA1OgorCQljYXNlIDY6IGlmIChwc2NfcHJlc2VudCkgeworCQkJCXJldHVybiBwc2NfaXJxX3BlbmRpbmcoaXJxKTsKKwkJCX0gZWxzZSBpZiAob3NzX3ByZXNlbnQpIHsKKwkJCQlyZXR1cm4gb3NzX2lycV9wZW5kaW5nKGlycSk7CisJCQl9CisJfQorCXJldHVybiAwOworfQorCisvKgorICogQWRkIGFuIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgdG8gYW4gaW50ZXJydXB0IHNvdXJjZS4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorICoKKyAqIEZJWE1FOiBZb3UgY2FuIHJlZ2lzdGVyIGludGVycnVwdHMgb24gbm9uZXhpc3RlbnQgc291cmNlIChpZSBQU0M0IG9uIGEKKyAqICAgICAgICBub24tUFNDIG1hY2hpbmUpLiBXZSBzaG91bGQgcmV0dXJuIC1FSU5WQUwgaW4gdGhvc2UgY2FzZXMuCisgKi8KKworaW50IG1hY19yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLAorCQkgICAgaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpCit7CisJaXJxX25vZGVfdCAqbm9kZTsKKworI2lmZGVmIERFQlVHX01BQ0lOVFMKKwlwcmludGsgKCIlczogaXJxICVkIHJlcXVlc3RlZCBmb3IgJXNcbiIsIF9fRlVOQ1RJT05fXywgaXJxLCBkZXZuYW1lKTsKKyNlbmRpZgorCisJaWYgKGlycSA8IFZJQTFfU09VUkNFX0JBU0UpIHsKKwkJcmV0dXJuIGNwdV9yZXF1ZXN0X2lycShpcnEsIGhhbmRsZXIsIGZsYWdzLCBkZXZuYW1lLCBkZXZfaWQpOworCX0KKworCWlmIChpcnEgPj0gTlVNX01BQ19TT1VSQ0VTKSB7CisJCXByaW50ayAoIiVzOiB1bmtub3duIGlycSAlZCByZXF1ZXN0ZWQgYnkgJXNcbiIsCisJCSAgICAgICAgX19GVU5DVElPTl9fLCBpcnEsIGRldm5hbWUpOworCX0KKworCS8qIEdldCBhIG5vZGUgYW5kIHN0aWNrIGl0IG9udG8gdGhlIHJpZ2h0IGxpc3QgKi8KKworCWlmICghKG5vZGUgPSBuZXdfaXJxX25vZGUoKSkpIHJldHVybiAtRU5PTUVNOworCisJbm9kZS0+aGFuZGxlcgk9IGhhbmRsZXI7CisJbm9kZS0+ZmxhZ3MJPSBmbGFnczsKKwlub2RlLT5kZXZfaWQJPSBkZXZfaWQ7CisJbm9kZS0+ZGV2bmFtZQk9IGRldm5hbWU7CisJbm9kZS0+bmV4dAk9IE5VTEw7CisJbWFjX2luc2VydF9pcnEoJm1hY19pcnFfbGlzdFtpcnFdLCBub2RlKTsKKworCS8qIE5vdyBlbmFibGUgdGhlIElSUSBzb3VyY2UgKi8KKworCW1hY19lbmFibGVfaXJxKGlycSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlbW92ZXMgYW4gaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBmcm9tIGFuIGludGVycnVwdCBzb3VyY2UuCisgKi8KKwordm9pZCBtYWNfZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworI2lmZGVmIERFQlVHX01BQ0lOVFMKKwlwcmludGsgKCIlczogaXJxICVkIGZyZWVkIGJ5ICVwXG4iLCBfX0ZVTkNUSU9OX18sIGlycSwgZGV2X2lkKTsKKyNlbmRpZgorCisJaWYgKGlycSA8IFZJQTFfU09VUkNFX0JBU0UpIHsKKwkJY3B1X2ZyZWVfaXJxKGlycSwgZGV2X2lkKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChpcnEgPj0gTlVNX01BQ19TT1VSQ0VTKSB7CisJCXByaW50ayAoIiVzOiB1bmtub3duIGlycSAlZCBmcmVlZFxuIiwKKwkJICAgICAgICBfX0ZVTkNUSU9OX18sIGlycSk7CisJCXJldHVybjsKKwl9CisKKwltYWNfZGVsZXRlX2lycSgmbWFjX2lycV9saXN0W2lycV0sIGRldl9pZCk7CisKKwkvKiBJZiB0aGUgbGlzdCBmb3IgdGhpcyBpbnRlcnJ1cHQgaXMgKi8KKwkvKiBlbXB0eSB0aGVuIGRpc2FibGUgdGhlIHNvdXJjZS4gICAgKi8KKworCWlmICghbWFjX2lycV9saXN0W2lycV0pIHsKKwkJbWFjX2Rpc2FibGVfaXJxKGlycSk7CisJfQorfQorCisvKgorICogR2VuZXJhdGUgYSBwcmV0dHkgbGlzdGluZyBmb3IgL3Byb2MvaW50ZXJydXB0cworICoKKyAqIEJ5IHRoZSB0aW1lIHdlJ3JlIGNhbGxlZCB0aGUgYXV0b3ZlY3RvciBpbnRlcnJ1cHQgbGlzdCBoYXMgYWxyZWFkeSBiZWVuCisgKiBnZW5lcmF0ZWQsIHNvIHdlIGp1c3QgbmVlZCB0byBkbyB0aGUgbWFjaHNwZWMgaW50ZXJydXB0cy4KKyAqCisgKiA5OTA1MDYgKGptdCkgLSByZXdyaXR0ZW4gdG8gaGFuZGxlIGNoYWluZWQgbWFjaHNwZWMgaW50ZXJydXB0IGhhbmRsZXJzLgorICogICAgICAgICAgICAgICAgQWxzbyByZW1vdmVkIGRpc3BsYXkgb2YgbnVtX3NwdXJpb3VzIGl0IGlzIGFscmVhZHkKKyAqCQkgIGRpc3BsYXllZCBmb3IgdXMgYXMgYXV0b3ZlY3RvciBpcnEgMC4KKyAqLworCitpbnQgc2hvd19tYWNfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCit7CisJaW50IGk7CisJaXJxX25vZGVfdCAqbm9kZTsKKwljaGFyICpiYXNlOworCisJLyogRG9uJ3QgZG8gTnVidXMgaW50ZXJydXB0cyBpbiB0aGlzIGxvb3A7IHdlIGRvIHRoZW0gc2VwYXJhdGVseSAgKi8KKwkvKiBiZWxvdyBzbyB0aGF0IHdlIGNhbiBwcmludCBzbG90IG51bWJlcnMgaW5zdGVhZCBvZiBJUlEgbnVtYmVycyAqLworCisJZm9yIChpID0gVklBMV9TT1VSQ0VfQkFTRSA7IGkgPCBOVU1fTUFDX1NPVVJDRVMgOyArK2kpIHsKKworCQkvKiBOb25leGlzdGFudCBpbnRlcnJ1cHQgb3Igbm90aGluZyByZWdpc3RlcmVkOyBza2lwIGl0LiAqLworCisJCWlmICgobm9kZSA9IG1hY19pcnFfbGlzdFtpXSkgPT0gTlVMTCkgY29udGludWU7CisJCWlmIChub2RlLT5mbGFncyAmIElSUV9GTEdfU1REKSBjb250aW51ZTsKKworCQliYXNlID0gIiI7CisJCXN3aXRjaChJUlFfU1JDKGkpKSB7CisJCQljYXNlIDE6IGJhc2UgPSAidmlhMSI7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6IGlmIChvc3NfcHJlc2VudCkgeworCQkJCQliYXNlID0gIm9zcyI7CisJCQkJfSBlbHNlIHsKKwkJCQkJYmFzZSA9ICJ2aWEyIjsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQljYXNlIDQ6CisJCQljYXNlIDU6CisJCQljYXNlIDY6IGlmIChwc2NfcHJlc2VudCkgeworCQkJCQliYXNlID0gInBzYyI7CisJCQkJfSBlbHNlIGlmIChvc3NfcHJlc2VudCkgeworCQkJCQliYXNlID0gIm9zcyI7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKElSUV9TUkMoaSkgPT0gNCkgYmFzZSA9ICJzY2MiOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgNzogYmFzZSA9ICJuYnVzIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgODogYmFzZSA9ICJiYm4iOworCQkJCWJyZWFrOworCQl9CisJCXNlcV9wcmludGYocCwgIiU0cyAlMmQ6ICUxMHUgIiwgYmFzZSwgaSwga3N0YXRfY3B1KDApLmlycXNbaV0pOworCisJCWRvIHsKKwkJCWlmIChub2RlLT5mbGFncyAmIElSUV9GTEdfRkFTVCkgeworCQkJCXNlcV9wdXRzKHAsICJGICIpOworCQkJfSBlbHNlIGlmIChub2RlLT5mbGFncyAmIElSUV9GTEdfU0xPVykgeworCQkJCXNlcV9wdXRzKHAsICJTICIpOworCQkJfSBlbHNlIHsKKwkJCQlzZXFfcHV0cyhwLCAiICAiKTsKKwkJCX0KKwkJCXNlcV9wcmludGYocCwgIiVzXG4iLCBub2RlLT5kZXZuYW1lKTsKKwkJCWlmICgobm9kZSA9IG5vZGUtPm5leHQpKSB7CisJCQkJc2VxX3B1dHMocCwgIiAgICAgICAgICAgICAgICAgICAgIik7CisJCQl9CisJCX0gd2hpbGUobm9kZSk7CisKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbWFjX2RlZmF1bHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworI2lmZGVmIERFQlVHX1NQVVJJT1VTCisJcHJpbnRrKCJVbmV4cGVjdGVkIElSUSAlZCBvbiBkZXZpY2UgJXBcbiIsIGlycSwgZGV2X2lkKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IG51bV9kZWJ1Z1s4XTsKKworaXJxcmV0dXJuX3QgbWFjX2RlYnVnX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAobnVtX2RlYnVnW2lycV0gPCAxMCkgeworCQlwcmludGsoIkRFQlVHOiBVbmV4cGVjdGVkIElSUSAlZFxuIiwgaXJxKTsKKwkJbnVtX2RlYnVnW2lycV0rKzsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGluX25taTsKK3N0YXRpYyB2b2xhdGlsZSBpbnQgbm1pX2hvbGQ7CisKK2lycXJldHVybl90IG1hY19ubWlfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwlpbnQgaTsKKwkvKgorCSAqIGdlbmVyYXRlIGRlYnVnIG91dHB1dCBvbiBOTUkgc3dpdGNoIGlmICdkZWJ1Zycga2VybmVsIG9wdGlvbiBnaXZlbgorCSAqIChvbmx5IHdvcmtzIHdpdGggUGVuZ3VpbiEpCisJICovCisKKwlpbl9ubWkrKzsKKwlmb3IgKGk9MDsgaTwxMDA7IGkrKykKKwkJdWRlbGF5KDEwMDApOworCisJaWYgKGluX25taSA9PSAxKSB7CisJCW5taV9ob2xkID0gMTsKKwkJcHJpbnRrKCIuLi4gcGF1c2luZywgcHJlc3MgTk1JIHRvIHJlc3VtZSAuLi4iKTsKKwl9IGVsc2UgeworCQlwcmludGsoIiBvayFcbiIpOworCQlubWlfaG9sZCA9IDA7CisJfQorCisJYmFycmllcigpOworCisJd2hpbGUgKG5taV9ob2xkID09IDEpCisJCXVkZWxheSgxMDAwKTsKKworCWlmICggY29uc29sZV9sb2dsZXZlbCA+PSA4ICkgeworI2lmIDAKKwkJc2hvd19zdGF0ZSgpOworCQlwcmludGsoIlBDOiAlMDhseFxuU1I6ICUwNHggIFNQOiAlcFxuIiwgZnAtPnBjLCBmcC0+c3IsIGZwKTsKKwkJcHJpbnRrKCJkMDogJTA4bHggICAgZDE6ICUwOGx4ICAgIGQyOiAlMDhseCAgICBkMzogJTA4bHhcbiIsCisJCSAgICAgICBmcC0+ZDAsIGZwLT5kMSwgZnAtPmQyLCBmcC0+ZDMpOworCQlwcmludGsoImQ0OiAlMDhseCAgICBkNTogJTA4bHggICAgYTA6ICUwOGx4ICAgIGExOiAlMDhseFxuIiwKKwkJICAgICAgIGZwLT5kNCwgZnAtPmQ1LCBmcC0+YTAsIGZwLT5hMSk7CisKKwkJaWYgKFNUQUNLX01BR0lDICE9ICoodW5zaWduZWQgbG9uZyAqKWN1cnJlbnQtPmtlcm5lbF9zdGFja19wYWdlKQorCQkJcHJpbnRrKCJDb3JydXB0ZWQgc3RhY2sgcGFnZVxuIik7CisJCXByaW50aygiUHJvY2VzcyAlcyAocGlkOiAlZCwgc3RhY2twYWdlPSUwOGx4KVxuIiwKKwkJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgY3VycmVudC0+a2VybmVsX3N0YWNrX3BhZ2UpOworCQlpZiAoaW50cl9jb3VudCA9PSAxKQorCQkJZHVtcF9zdGFjaygoc3RydWN0IGZyYW1lICopZnApOworI2Vsc2UKKwkJLyogcHJpbnRrKCJOTUkgIik7ICovCisjZW5kaWYKKwl9CisJaW5fbm1pLS07CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorICogU2ltcGxlIHJvdXRpbmVzIGZvciBtYXNraW5nIGFuZCB1bm1hc2tpbmcKKyAqIFNDQyBpbnRlcnJ1cHRzIGluIGNhc2VzIHdoZXJlIHRoaXMgY2FuJ3QgYmUKKyAqIGRvbmUgaW4gaGFyZHdhcmUgKG9ubHkgdGhlIFBTQyBjYW4gZG8gdGhhdC4pCisgKi8KKworc3RhdGljIHZvaWQgc2NjX2lycV9lbmFibGUoaW50IGlycSkgeworCWludCBpcnFfaWR4ICAgICA9IElSUV9JRFgoaXJxKTsKKworCXNjY19tYXNrIHw9ICgxIDw8IGlycV9pZHgpOworfQorCitzdGF0aWMgdm9pZCBzY2NfaXJxX2Rpc2FibGUoaW50IGlycSkgeworCWludCBpcnFfaWR4ICAgICA9IElSUV9JRFgoaXJxKTsKKworCXNjY19tYXNrICY9IH4oMSA8PCBpcnFfaWR4KTsKK30KKworLyoKKyAqIFNDQyBtYXN0ZXIgaW50ZXJydXB0IGhhbmRsZXIuIFdlIGhhdmUgdG8gZG8gYSBiaXQgb2YgbWFnaWMgaGVyZQorICogdG8gZmlndXJlIG91dCB3aGF0IGNoYW5uZWwgZ2F2ZSB1cyB0aGUgaW50ZXJydXB0OyBwdXR0aW5nIHRoaXMKKyAqIGhlcmUgaXMgY2xlYW5lciB0aGFuIGhhY2tpbmcgaXQgaW50byBkcml2ZXJzL2NoYXIvbWFjc2VyaWFsLmMuCisgKi8KKwordm9pZCBtYWNfc2NjX2Rpc3BhdGNoKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqc2NjID0gKHVuc2lnbmVkIGNoYXIgKikgbWFjX2JpX2RhdGEuc2NjYmFzZSArIDI7CisJdW5zaWduZWQgY2hhciByZWc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIFJlYWQgUlIzIGZyb20gdGhlIGNoaXAuIEFsd2F5cyBkbyB0aGlzIG9uIGNoYW5uZWwgQSAqLworCS8qIFRoaXMgbXVzdCBiZSBhbiBhdG9taWMgb3BlcmF0aW9uIHNvIGRpc2FibGUgaXJxcy4gICAqLworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCSpzY2MgPSAzOworCXJlZyA9ICpzY2M7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJLyogTm93IGRpc3BhdGNoLiBCaXRzIDAtMiBhcmUgZm9yIGNoYW5uZWwgQiBhbmQgKi8KKwkvKiBiaXRzIDMtNSBhcmUgZm9yIGNoYW5uZWwgQS4gV2UgY2FuIHNhZmVseSAgICAqLworCS8qIGlnbm9yZSB0aGUgcmVtYWluaW5nIGJpdHMgaGVyZS4gICAgICAgICAgICAgICovCisJLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiBOb3RlIHRoYXQgd2UncmUgaWdub3Jpbmcgc2NjX21hc2sgZm9yIG5vdy4gICAqLworCS8qIElmIHdlIGFjdHVhbGx5IG1hc2sgdGhlIGludHMgdGhlbiB3ZSB0ZW5kIHRvICovCisJLyogZ2V0IGhhbW1lcmVkIGJ5IHZlcnkgcGVyc2lzdGVudCBTQ0MgaXJxcywgICAgKi8KKwkvKiBhbmQgc2luY2UgdGhleSdyZSBhdXRvdmVjdG9yIGludGVycnVwdHMgdGhleSAqLworCS8qIHByZXR0eSBtdWNoIGtpbGwgdGhlIHN5c3RlbS4gICAgICAgICAgICAgICAgICovCisKKwlpZiAocmVnICYgMHgzOCkgbWFjX2RvX2lycV9saXN0KElSUV9TQ0NBLCByZWdzKTsKKwlpZiAocmVnICYgMHgwNykgbWFjX2RvX2lycV9saXN0KElSUV9TQ0NCLCByZWdzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvbWlzYy5jIGIvYXJjaC9tNjhrL21hYy9taXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI4MGQ3YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tYWMvbWlzYy5jCkBAIC0wLDAgKzEsNjUxIEBACisvKgorICogTWlzY2VsbGFuZW91cyBNYWM2OEstc3BlY2lmaWMgc3R1ZmYKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8bGludXgvYWRiLmg+CisjaW5jbHVkZSA8bGludXgvY3VkYS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtdS5oPgorCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcnRjLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2ludG9zaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNfdmlhLmg+CisjaW5jbHVkZSA8YXNtL21hY19vc3MuaD4KKworI2RlZmluZSBCT09USU5GT19DT01QQVRfMV8wCisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKworLyogT2Zmc2V0IGJldHdlZW4gVW5peCB0aW1lICgxOTcwLWJhc2VkKSBhbmQgTWFjIHRpbWUgKDE5MDQtYmFzZWQpICovCisKKyNkZWZpbmUgUlRDX09GRlNFVCAyMDgyODQ0ODAwCisKK2V4dGVybiBzdHJ1Y3QgbWFjX2Jvb3Rlcl9kYXRhIG1hY19iaV9kYXRhOworc3RhdGljIHZvaWQgKCpyb21fcmVzZXQpKHZvaWQpOworCisjaWZkZWYgQ09ORklHX0FEQgorLyoKKyAqIFJldHVybiB0aGUgY3VycmVudCB0aW1lIGFzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSBKYW51YXJ5IDEsIDE5MDQuCisgKi8KKworc3RhdGljIGxvbmcgYWRiX3JlYWRfdGltZSh2b2lkKQoreworCXZvbGF0aWxlIHN0cnVjdCBhZGJfcmVxdWVzdCByZXE7CisJbG9uZyB0aW1lOworCisJYWRiX3JlcXVlc3QoKHN0cnVjdCBhZGJfcmVxdWVzdCAqKSAmcmVxLCBOVUxMLAorCQkJQURCUkVRX1JBV3xBREJSRVFfU1lOQywKKwkJCTIsIENVREFfUEFDS0VULCBDVURBX0dFVF9USU1FKTsKKworCXRpbWUgPSAocmVxLnJlcGx5WzNdIDw8IDI0KSB8IChyZXEucmVwbHlbNF0gPDwgMTYpCisJCXwgKHJlcS5yZXBseVs1XSA8PCA4KSB8IHJlcS5yZXBseVs2XTsKKwlyZXR1cm4gdGltZSAtIFJUQ19PRkZTRVQ7Cit9CisKKy8qCisgKiBTZXQgdGhlIGN1cnJlbnQgc3lzdGVtIHRpbWUKKyAqLworCitzdGF0aWMgdm9pZCBhZGJfd3JpdGVfdGltZShsb25nIGRhdGEpCit7CisJdm9sYXRpbGUgc3RydWN0IGFkYl9yZXF1ZXN0IHJlcTsKKworCWRhdGEgKz0gUlRDX09GRlNFVDsKKworCWFkYl9yZXF1ZXN0KChzdHJ1Y3QgYWRiX3JlcXVlc3QgKikgJnJlcSwgTlVMTCwKKwkJCUFEQlJFUV9SQVd8QURCUkVRX1NZTkMsCisJCQk2LCBDVURBX1BBQ0tFVCwgQ1VEQV9TRVRfVElNRSwKKwkJCShkYXRhID4+IDI0KSAmIDB4RkYsIChkYXRhID4+IDE2KSAmIDB4RkYsCisJCQkoZGF0YSA+PiA4KSAmIDB4RkYsIGRhdGEgJiAweEZGKTsKK30KKworLyoKKyAqIEdldCBhIGJ5dGUgZnJvbSB0aGUgTlZSQU0KKyAqLworCitzdGF0aWMgX191OCBhZGJfcmVhZF9wcmFtKGludCBvZmZzZXQpCit7CisJdm9sYXRpbGUgc3RydWN0IGFkYl9yZXF1ZXN0IHJlcTsKKworCWFkYl9yZXF1ZXN0KChzdHJ1Y3QgYWRiX3JlcXVlc3QgKikgJnJlcSwgTlVMTCwKKwkJCUFEQlJFUV9SQVd8QURCUkVRX1NZTkMsCisJCQk0LCBDVURBX1BBQ0tFVCwgQ1VEQV9HRVRfUFJBTSwKKwkJCShvZmZzZXQgPj4gOCkgJiAweEZGLCBvZmZzZXQgJiAweEZGKTsKKwlyZXR1cm4gcmVxLnJlcGx5WzNdOworfQorCisvKgorICogV3JpdGUgYSBieXRlIHRvIHRoZSBOVlJBTQorICovCisKK3N0YXRpYyB2b2lkIGFkYl93cml0ZV9wcmFtKGludCBvZmZzZXQsIF9fdTggZGF0YSkKK3sKKwl2b2xhdGlsZSBzdHJ1Y3QgYWRiX3JlcXVlc3QgcmVxOworCisJYWRiX3JlcXVlc3QoKHN0cnVjdCBhZGJfcmVxdWVzdCAqKSAmcmVxLCBOVUxMLAorCQkJQURCUkVRX1JBV3xBREJSRVFfU1lOQywKKwkJCTUsIENVREFfUEFDS0VULCBDVURBX1NFVF9QUkFNLAorCQkJKG9mZnNldCA+PiA4KSAmIDB4RkYsIG9mZnNldCAmIDB4RkYsCisJCQlkYXRhKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfQURCICovCisKKy8qCisgKiBWSUEgUFJBTS9SVEMgYWNjZXNzIHJvdXRpbmVzCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkIGFuZAorICogdGhlIFJUQyBzaG91bGQgYmUgZW5hYmxlZC4KKyAqLworCitzdGF0aWMgX191OCB2aWFfcHJhbV9yZWFkYnl0ZSh2b2lkKQoreworCWludAlpLHJlZzsKKwlfX3U4CWRhdGE7CisKKwlyZWcgPSB2aWExW3ZCdWZCXSAmIH5WSUExQl92UlRDQ2xrOworCisJLyogU2V0IHRoZSBSVEMgZGF0YSBsaW5lIHRvIGJlIGFuIGlucHV0LiAqLworCisJdmlhMVt2RGlyQl0gJj0gflZJQTFCX3ZSVENEYXRhOworCisJLyogVGhlIGJpdHMgb2YgdGhlIGJ5dGUgY29tZSBvdXQgaW4gTVNCIG9yZGVyICovCisKKwlkYXRhID0gMDsKKwlmb3IgKGkgPSAwIDsgaSA8IDggOyBpKyspIHsKKwkJdmlhMVt2QnVmQl0gPSByZWc7CisJCXZpYTFbdkJ1ZkJdID0gcmVnIHwgVklBMUJfdlJUQ0NsazsKKwkJZGF0YSA9IChkYXRhIDw8IDEpIHwgKHZpYTFbdkJ1ZkJdICYgVklBMUJfdlJUQ0RhdGEpOworCX0KKworCS8qIFJldHVybiBSVEMgZGF0YSBsaW5lIHRvIG91dHB1dCBzdGF0ZSAqLworCisJdmlhMVt2RGlyQl0gfD0gVklBMUJfdlJUQ0RhdGE7CisKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIHZvaWQgdmlhX3ByYW1fd3JpdGVieXRlKF9fdTggZGF0YSkKK3sKKwlpbnQJaSxyZWcsYml0OworCisJcmVnID0gdmlhMVt2QnVmQl0gJiB+KFZJQTFCX3ZSVENDbGsgfCBWSUExQl92UlRDRGF0YSk7CisKKwkvKiBUaGUgYml0cyBvZiB0aGUgYnl0ZSBnbyBpbiBpbiBNU0Igb3JkZXIgKi8KKworCWZvciAoaSA9IDAgOyBpIDwgOCA7IGkrKykgeworCQliaXQgPSBkYXRhICYgMHg4MD8gMSA6IDA7CisJCWRhdGEgPDw9IDE7CisJCXZpYTFbdkJ1ZkJdID0gcmVnIHwgYml0OworCQl2aWExW3ZCdWZCXSA9IHJlZyB8IGJpdCB8IFZJQTFCX3ZSVENDbGs7CisJfQorfQorCisvKgorICogRXhlY3V0ZSBhIFZJQSBQUkFNL1JUQyBjb21tYW5kLiBGb3IgcmVhZCBjb21tYW5kcworICogZGF0YSBzaG91bGQgcG9pbnQgdG8gYSBvbmUtYnl0ZSBidWZmZXIgZm9yIHRoZQorICogcmVzdWx0aW5nIGRhdGEuIEZvciB3cml0ZSBjb21tYW5kcyBpdCBzaG91bGQgcG9pbnQKKyAqIHRvIHRoZSBkYXRhIGJ5dGUgdG8gZm9yIHRoZSBjb21tYW5kLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgYWxsIGludGVycnVwdHMgd2hpbGUgcnVubmluZy4KKyAqLworCitzdGF0aWMgdm9pZCB2aWFfcHJhbV9jb21tYW5kKGludCBjb21tYW5kLCBfX3U4ICpkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50CWlzX3JlYWQ7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKiBFbmFibGUgdGhlIFJUQyBhbmQgbWFrZSBzdXJlIHRoZSBzdHJvYmUgbGluZSBpcyBoaWdoICovCisKKwl2aWExW3ZCdWZCXSA9ICh2aWExW3ZCdWZCXSB8IFZJQTFCX3ZSVENDbGspICYgflZJQTFCX3ZSVENFbmI7CisKKwlpZiAoY29tbWFuZCAmIDB4RkYwMCkgewkJLyogZXh0ZW5kZWQgKHR3by1ieXRlKSBjb21tYW5kICovCisJCXZpYV9wcmFtX3dyaXRlYnl0ZSgoY29tbWFuZCAmIDB4RkYwMCkgPj4gOCk7CisJCXZpYV9wcmFtX3dyaXRlYnl0ZShjb21tYW5kICYgMHhGRik7CisJCWlzX3JlYWQgPSBjb21tYW5kICYgMHg4MDAwOworCX0gZWxzZSB7CQkJLyogb25lLWJ5dGUgY29tbWFuZCAqLworCQl2aWFfcHJhbV93cml0ZWJ5dGUoY29tbWFuZCk7CisJCWlzX3JlYWQgPSBjb21tYW5kICYgMHg4MDsKKwl9CisJaWYgKGlzX3JlYWQpIHsKKwkJKmRhdGEgPSB2aWFfcHJhbV9yZWFkYnl0ZSgpOworCX0gZWxzZSB7CisJCXZpYV9wcmFtX3dyaXRlYnl0ZSgqZGF0YSk7CisJfQorCisJLyogQWxsIGRvbmUsIGRpc2FibGUgdGhlIFJUQyAqLworCisJdmlhMVt2QnVmQl0gfD0gVklBMUJfdlJUQ0VuYjsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIF9fdTggdmlhX3JlYWRfcHJhbShpbnQgb2Zmc2V0KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2aWFfd3JpdGVfcHJhbShpbnQgb2Zmc2V0LCBfX3U4IGRhdGEpCit7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBpbiBzZWNvbmRzIHNpbmNlIEphbnVhcnkgMSwgMTkwNC4KKyAqCisgKiBUaGlzIG9ubHkgd29ya3Mgb24gbWFjaGluZXMgd2l0aCB0aGUgVklBLWJhc2VkIFBSQU0vUlRDLCB3aGljaAorICogaXMgYmFzaWNhbGx5IGFueSBtYWNoaW5lIHdpdGggTWFjIElJLXN0eWxlIEFEQi4KKyAqLworCitzdGF0aWMgbG9uZyB2aWFfcmVhZF90aW1lKHZvaWQpCit7CisJdW5pb24geworCQlfX3U4ICBjZGF0YVs0XTsKKwkJbG9uZyAgaWRhdGE7CisJfSByZXN1bHQsIGxhc3RfcmVzdWx0OworCWludAljdDsKKworCS8qCisJICogVGhlIE5ldEJTRCBndXlzIHNheSB0byBsb29wIHVudGlsIHlvdSBnZXQgdGhlIHNhbWUgcmVhZGluZworCSAqIHR3aWNlIGluIGEgcm93LgorCSAqLworCisJY3QgPSAwOworCWRvIHsKKwkJaWYgKCsrY3QgPiAxMCkgeworCQkJcHJpbnRrKCJ2aWFfcmVhZF90aW1lOiBjb3VsZG4ndCBnZXQgdmFsaWQgdGltZSwgIgorCQkJICAgICAgICJsYXN0IHJlYWQgPSAweCUwOGx4IGFuZCAweCUwOGx4XG4iLAorCQkJICAgICAgIGxhc3RfcmVzdWx0LmlkYXRhLCByZXN1bHQuaWRhdGEpOworCQkJYnJlYWs7CisJCX0KKworCQlsYXN0X3Jlc3VsdC5pZGF0YSA9IHJlc3VsdC5pZGF0YTsKKwkJcmVzdWx0LmlkYXRhID0gMDsKKworCQl2aWFfcHJhbV9jb21tYW5kKDB4ODEsICZyZXN1bHQuY2RhdGFbM10pOworCQl2aWFfcHJhbV9jb21tYW5kKDB4ODUsICZyZXN1bHQuY2RhdGFbMl0pOworCQl2aWFfcHJhbV9jb21tYW5kKDB4ODksICZyZXN1bHQuY2RhdGFbMV0pOworCQl2aWFfcHJhbV9jb21tYW5kKDB4OEQsICZyZXN1bHQuY2RhdGFbMF0pOworCX0gd2hpbGUgKHJlc3VsdC5pZGF0YSAhPSBsYXN0X3Jlc3VsdC5pZGF0YSk7CisKKwlyZXR1cm4gcmVzdWx0LmlkYXRhIC0gUlRDX09GRlNFVDsKK30KKworLyoKKyAqIFNldCB0aGUgY3VycmVudCB0aW1lIHRvIGEgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgSmFudWFyeSAxLCAxOTA0LgorICoKKyAqIFRoaXMgb25seSB3b3JrcyBvbiBtYWNoaW5lcyB3aXRoIHRoZSBWSUEtYmFzZWQgUFJBTS9SVEMsIHdoaWNoCisgKiBpcyBiYXNpY2FsbHkgYW55IG1hY2hpbmUgd2l0aCBNYWMgSUktc3R5bGUgQURCLgorICovCisKK3N0YXRpYyB2b2lkIHZpYV93cml0ZV90aW1lKGxvbmcgdGltZSkKK3sKKwl1bmlvbiB7CisJCV9fdTggIGNkYXRhWzRdOworCQlsb25nICBpZGF0YTsKKwl9IGRhdGE7CisJX191OAl0ZW1wOworCisJLyogQ2xlYXIgdGhlIHdyaXRlIHByb3RlY3QgYml0ICovCisKKwl0ZW1wID0gMHg1NTsKKwl2aWFfcHJhbV9jb21tYW5kKDB4MzUsICZ0ZW1wKTsKKworCWRhdGEuaWRhdGEgPSB0aW1lICsgUlRDX09GRlNFVDsKKwl2aWFfcHJhbV9jb21tYW5kKDB4MDEsICZkYXRhLmNkYXRhWzNdKTsKKwl2aWFfcHJhbV9jb21tYW5kKDB4MDUsICZkYXRhLmNkYXRhWzJdKTsKKwl2aWFfcHJhbV9jb21tYW5kKDB4MDksICZkYXRhLmNkYXRhWzFdKTsKKwl2aWFfcHJhbV9jb21tYW5kKDB4MEQsICZkYXRhLmNkYXRhWzBdKTsKKworCS8qIFNldCB0aGUgd3JpdGUgcHJvdGVjdCBiaXQgKi8KKworCXRlbXAgPSAweEQ1OworCXZpYV9wcmFtX2NvbW1hbmQoMHgzNSwgJnRlbXApOworfQorCitzdGF0aWMgdm9pZCB2aWFfc2h1dGRvd24odm9pZCkKK3sKKwlpZiAocmJ2X3ByZXNlbnQpIHsKKwkJdmlhMltyQnVmQl0gJj0gfjB4MDQ7CisJfSBlbHNlIHsKKwkJLyogRGlyZWN0aW9uIG9mIHZEaXJCIGlzIG91dHB1dCAqLworCQl2aWEyW3ZEaXJCXSB8PSAweDA0OworCQkvKiBTZW5kIGEgdmFsdWUgb2YgMCBvbiB0aGF0IGxpbmUgKi8KKwkJdmlhMlt2QnVmQl0gJj0gfjB4MDQ7CisJCW1kZWxheSgxMDAwKTsKKwl9Cit9CisKKy8qCisgKiBGSVhNRTogbm90IHN1cmUgaG93IHRoaXMgaXMgc3VwcG9zZWQgdG8gd29yayBleGFjdGx5Li4uCisgKi8KKworc3RhdGljIHZvaWQgb3NzX3NodXRkb3duKHZvaWQpCit7CisJb3NzLT5yb21fY3RybCA9IE9TU19QT1dFUk9GRjsKK30KKworI2lmZGVmIENPTkZJR19BREJfQ1VEQQorCitzdGF0aWMgdm9pZCBjdWRhX3Jlc3RhcnQodm9pZCkKK3sKKwlhZGJfcmVxdWVzdChOVUxMLCBOVUxMLCBBREJSRVFfUkFXfEFEQlJFUV9TWU5DLAorCQkJMiwgQ1VEQV9QQUNLRVQsIENVREFfUkVTRVRfU1lTVEVNKTsKK30KKworc3RhdGljIHZvaWQgY3VkYV9zaHV0ZG93bih2b2lkKQoreworCWFkYl9yZXF1ZXN0KE5VTEwsIE5VTEwsIEFEQlJFUV9SQVd8QURCUkVRX1NZTkMsCisJCQkyLCBDVURBX1BBQ0tFVCwgQ1VEQV9QT1dFUkRPV04pOworfQorCisjZW5kaWYgLyogQ09ORklHX0FEQl9DVURBICovCisKKyNpZmRlZiBDT05GSUdfQURCX1BNVQorCit2b2lkIHBtdV9yZXN0YXJ0KHZvaWQpCit7CisJYWRiX3JlcXVlc3QoTlVMTCwgTlVMTCwgQURCUkVRX1JBV3xBREJSRVFfU1lOQywKKwkJCTMsIFBNVV9QQUNLRVQsIFBNVV9TRVRfSU5UUl9NQVNLLAorCQkJUE1VX0lOVF9BREJ8UE1VX0lOVF9USUNLKTsKKworCWFkYl9yZXF1ZXN0KE5VTEwsIE5VTEwsIEFEQlJFUV9SQVd8QURCUkVRX1NZTkMsCisJCQkyLCBQTVVfUEFDS0VULCBQTVVfUkVTRVQpOworfQorCit2b2lkIHBtdV9zaHV0ZG93bih2b2lkKQoreworCWFkYl9yZXF1ZXN0KE5VTEwsIE5VTEwsIEFEQlJFUV9SQVd8QURCUkVRX1NZTkMsCisJCQkzLCBQTVVfUEFDS0VULCBQTVVfU0VUX0lOVFJfTUFTSywKKwkJCVBNVV9JTlRfQURCfFBNVV9JTlRfVElDSyk7CisKKwlhZGJfcmVxdWVzdChOVUxMLCBOVUxMLCBBREJSRVFfUkFXfEFEQlJFUV9TWU5DLAorCQkJNiwgUE1VX1BBQ0tFVCwgUE1VX1NIVVRET1dOLAorCQkJJ00nLCAnQScsICdUJywgJ1QnKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19BREJfUE1VICovCisKKy8qCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEJlbG93IHRoaXMgcG9pbnQgYXJlIHRoZSBnZW5lcmljIHJvdXRpbmVzOyB0aGV5J2xsIGRpc3BhdGNoIHRvIHRoZQorICogY29ycmVjdCByb3V0aW5lIGZvciB0aGUgaGFyZHdhcmUgb24gd2hpY2ggd2UncmUgcnVubmluZy4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3ZvaWQgbWFjX3ByYW1fcmVhZChpbnQgb2Zmc2V0LCBfX3U4ICpidWZmZXIsIGludCBsZW4pCit7CisJX191OCAoKmZ1bmMpKGludCkgPSBOVUxMOworCWludCBpOworCisJaWYgKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlID09IE1BQ19BREJfSUlTSSB8fAorCSAgICBtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSA9PSBNQUNfQURCX1BCMSB8fAorCSAgICBtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSA9PSBNQUNfQURCX1BCMiB8fAorCSAgICBtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSA9PSBNQUNfQURCX0NVREEpIHsKKyNpZmRlZiBDT05GSUdfQURCCisJCWZ1bmMgPSBhZGJfcmVhZF9wcmFtOworI2Vsc2UKKwkJcmV0dXJuOworI2VuZGlmCisJfSBlbHNlIHsKKwkJZnVuYyA9IHZpYV9yZWFkX3ByYW07CisJfQorCWZvciAoaSA9IDAgOyBpIDwgbGVuIDsgaSsrKSB7CisJCWJ1ZmZlcltpXSA9ICgqZnVuYykob2Zmc2V0KyspOworCX0KK30KKwordm9pZCBtYWNfcHJhbV93cml0ZShpbnQgb2Zmc2V0LCBfX3U4ICpidWZmZXIsIGludCBsZW4pCit7CisJdm9pZCAoKmZ1bmMpKGludCwgX191OCkgPSBOVUxMOworCWludCBpOworCisJaWYgKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlID09IE1BQ19BREJfSUlTSSB8fAorCSAgICBtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSA9PSBNQUNfQURCX1BCMSB8fAorCSAgICBtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSA9PSBNQUNfQURCX1BCMiB8fAorCSAgICBtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSA9PSBNQUNfQURCX0NVREEpIHsKKyNpZmRlZiBDT05GSUdfQURCCisJCWZ1bmMgPSBhZGJfd3JpdGVfcHJhbTsKKyNlbHNlCisJCXJldHVybjsKKyNlbmRpZgorCX0gZWxzZSB7CisJCWZ1bmMgPSB2aWFfd3JpdGVfcHJhbTsKKwl9CisJZm9yIChpID0gMCA7IGkgPCBsZW4gOyBpKyspIHsKKwkJKCpmdW5jKShvZmZzZXQrKywgYnVmZmVyW2ldKTsKKwl9Cit9CisKK3ZvaWQgbWFjX3Bvd2Vyb2ZmKHZvaWQpCit7CisJLyoKKwkgKiBNQUNfQURCX0lJU0kgbWF5IG5lZWQgdG8gYmUgbW92ZWQgdXAgaGVyZSBpZiBpdCBkb2Vzbid0IGFjdHVhbGx5CisJICogd29yayB1c2luZyB0aGUgQURCIHBhY2tldCBtZXRob2QuICAtLURhdmlkIEtpbHplcgorCSAqLworCisJaWYgKG9zc19wcmVzZW50KSB7CisJCW9zc19zaHV0ZG93bigpOworCX0gZWxzZSBpZiAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgPT0gTUFDX0FEQl9JSSkgeworCQl2aWFfc2h1dGRvd24oKTsKKyNpZmRlZiBDT05GSUdfQURCX0NVREEKKwl9IGVsc2UgaWYgKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlID09IE1BQ19BREJfQ1VEQSkgeworCQljdWRhX3NodXRkb3duKCk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQURCX1BNVQorCX0gZWxzZSBpZiAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgPT0gTUFDX0FEQl9QQjEKKwkJfHwgbWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgPT0gTUFDX0FEQl9QQjIpIHsKKwkJcG11X3NodXRkb3duKCk7CisjZW5kaWYKKwl9CisJbG9jYWxfaXJxX2VuYWJsZSgpOworCXByaW50aygiSXQgaXMgbm93IHNhZmUgdG8gdHVybiBvZmYgeW91ciBNYWNpbnRvc2guXG4iKTsKKwl3aGlsZSgxKTsKK30KKwordm9pZCBtYWNfcmVzZXQodm9pZCkKK3sKKwlpZiAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgPT0gTUFDX0FEQl9JSSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCS8qIG5lZWQgUk9NQkFTRSBpbiBib290ZXIgKi8KKwkJLyogaW5kZWVkLCBwbHVzIG5lZWQgdG8gTUFQIFRIRSBST00gISEgKi8KKworCQlpZiAobWFjX2JpX2RhdGEucm9tYmFzZSA9PSAwKQorCQkJbWFjX2JpX2RhdGEucm9tYmFzZSA9IDB4NDA4MDAwMDA7CisKKwkJLyogd29ya3Mgb24gc29tZSAqLworCQlyb21fcmVzZXQgPSAodm9pZCAqKSAobWFjX2JpX2RhdGEucm9tYmFzZSArIDB4YSk7CisKKwkJaWYgKG1hY2ludG9zaF9jb25maWctPmlkZW50ID09IE1BQ19NT0RFTF9TRTMwKSB7CisJCQkvKgorCQkJICogTVNjaDogTWFjaGluZXMga25vd24gdG8gY3Jhc2ggb24gUk9NIHJlc2V0IC4uLgorCQkJICovCisJCX0gZWxzZSB7CisJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkJCXJvbV9yZXNldCgpOworCisJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCX0KKyNpZmRlZiBDT05GSUdfQURCX0NVREEKKwl9IGVsc2UgaWYgKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlID09IE1BQ19BREJfQ1VEQSkgeworCQljdWRhX3Jlc3RhcnQoKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BREJfUE1VCisJfSBlbHNlIGlmIChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSA9PSBNQUNfQURCX1BCMQorCQl8fCBtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSA9PSBNQUNfQURCX1BCMikgeworCQlwbXVfcmVzdGFydCgpOworI2VuZGlmCisJfSBlbHNlIGlmIChDUFVfSVNfMDMwKSB7CisKKwkJLyogMDMwLXNwZWNpZmljIHJlc2V0IHJvdXRpbmUuICBUaGUgaWRlYSBpcyBnZW5lcmFsLCBidXQgdGhlCisJCSAqIHNwZWNpZmljIHJlZ2lzdGVycyB0byByZXNldCBhcmUgJzAzMC1zcGVjaWZpYy4gIFVudGlsIEkKKwkJICogaGF2ZSBhIG5vbi0wMzAgbWFjaGluZSwgSSBjYW4ndCB0ZXN0IGFueXRoaW5nIGVsc2UuCisJCSAqICAtLSBDLiBTY290dCBBbmFuaWFuIDxjYW5hbmlhbkBhbHVtbmkucHJpbmNldG9uLmVkdT4KKwkJICovCisKKwkJdW5zaWduZWQgbG9uZyByb21iYXNlID0gMHg0MDAwMDAwMDsKKworCQkvKiBtYWtlIGEgMS10by0xIG1hcHBpbmcsIHVzaW5nIHRoZSB0cmFuc3BhcmVudCB0cmFuLiByZWcuICovCisJCXVuc2lnbmVkIGxvbmcgdmlydCA9ICh1bnNpZ25lZCBsb25nKSBtYWNfcmVzZXQ7CisJCXVuc2lnbmVkIGxvbmcgcGh5cyA9IHZpcnRfdG9fcGh5cyhtYWNfcmVzZXQpOworCQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHBoeXMtdmlydDsKKwkJbG9jYWxfaXJxX2Rpc2FibGUoKTsgLyogbGV0cyBub3Qgc2NyZXcgdGhpcyB1cCwgb2s/ICovCisJCV9fYXNtX18gX192b2xhdGlsZV9fKCIuY2hpcCA2ODAzMFxuXHQiCisJCQkJICAgICAicG1vdmUgJTAsJS90dDBcblx0IgorCQkJCSAgICAgIi5jaGlwIDY4ayIKKwkJCQkgICAgIDogOiAibSIgKChwaHlzJjB4RkYwMDAwMDApfDB4ODc3NykpOworCQkvKiBOb3cganVtcCB0byBwaHlzaWNhbCBhZGRyZXNzIHNvIHdlIGNhbiBkaXNhYmxlIE1NVSAqLworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyAgICAgICAgICAgICAgICAgICAgIi5jaGlwIDY4MDMwXG5cdCIKKwkJICAgICJsZWEgJS9wY0AoMWYpLCUvYTBcblx0IgorCQkgICAgImFkZGwgJTAsJS9hMFxuXHQiLyogZml4dXAgdGFyZ2V0IGFkZHJlc3MgYW5kIHN0YWNrIHB0ciAqLworCQkgICAgImFkZGwgJTAsJS9zcFxuXHQiCisJCSAgICAicGZsdXNoYVxuXHQiCisJCSAgICAiam1wICUvYTBAXG5cdCIgLyoganVtcCBpbnRvIHBoeXNpY2FsIG1lbW9yeSAqLworCQkgICAgIjA6LmxvbmcgMFxuXHQiIC8qIGEgY29uc3RhbnQgemVyby4gKi8KKwkJICAgIC8qIE9LLiAgTm93IHJlc2V0IGV2ZXJ5dGhpbmcgYW5kIGp1bXAgdG8gcmVzZXQgdmVjdG9yLiAqLworCQkgICAgIjE6XG5cdCIKKwkJICAgICJsZWEgJS9wY0AoMGIpLCUvYTBcblx0IgorCQkgICAgInBtb3ZlICUvYTBALCAlL3RjXG5cdCIgLyogZGlzYWJsZSBtbXUgKi8KKwkJICAgICJwbW92ZSAlL2EwQCwgJS90dDBcblx0IiAvKiBkaXNhYmxlIHR0MCAqLworCQkgICAgInBtb3ZlICUvYTBALCAlL3R0MVxuXHQiIC8qIGRpc2FibGUgdHQxICovCisJCSAgICAibW92ZWwgIzAsICUvYTBcblx0IgorCQkgICAgIm1vdmVjICUvYTAsICUvdmJyXG5cdCIgLyogY2xlYXIgdmVjdG9yIGJhc2UgcmVnaXN0ZXIgKi8KKwkJICAgICJtb3ZlYyAlL2EwLCAlL2NhY3Jcblx0IiAvKiBkaXNhYmxlIGNhY2hlcyAqLworCQkgICAgIm1vdmVsICMweDA4MDgsJS9hMFxuXHQiCisJCSAgICAibW92ZWMgJS9hMCwgJS9jYWNyXG5cdCIgLyogZmx1c2ggaSZkIGNhY2hlcyAqLworCQkgICAgIm1vdmV3ICMweDI3MDAsJS9zclxuXHQiIC8qIHNldCB1cCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJICAgICJtb3ZlbCAlMUAoMHgwKSwlL2EwXG5cdCIvKiBsb2FkIGludGVycnVwdCBzdGFjayBwb2ludGVyICovCisJCSAgICAibW92ZWMgJS9hMCwgJS9pc3Bcblx0IgorCQkgICAgIm1vdmVsICUxQCgweDQpLCUvYTBcblx0IiAvKiBsb2FkIHJlc2V0IHZlY3RvciAqLworCQkgICAgInJlc2V0XG5cdCIgLyogcmVzZXQgZXh0ZXJuYWwgZGV2aWNlcyAqLworCQkgICAgImptcCAlL2EwQFxuXHQiIC8qIGp1bXAgdG8gdGhlIHJlc2V0IHZlY3RvciAqLworCQkgICAgIi5jaGlwIDY4ayIKKwkJICAgIDogOiAiciIgKG9mZnNldCksICJhIiAocm9tYmFzZSkgOiAiYTAiKTsKKwl9CisKKwkvKiBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisJcHJpbnRrICgiUmVzdGFydCBmYWlsZWQuICBQbGVhc2UgcmVzdGFydCBtYW51YWxseS5cbiIpOworCXdoaWxlKDEpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiB0cmFuc2xhdGVzIHNlY29uZHMgc2luY2UgMTk3MCBpbnRvIGEgcHJvcGVyIGRhdGUuCisgKgorICogQWxnb3JpdGhtIGNyaWJiZWQgZnJvbSBnbGliYzIuMSwgX19vZmZ0aW1lKCkuCisgKi8KKyNkZWZpbmUgU0VDU19QRVJfTUlOVVRFICg2MCkKKyNkZWZpbmUgU0VDU19QRVJfSE9VUiAgKFNFQ1NfUEVSX01JTlVURSAqIDYwKQorI2RlZmluZSBTRUNTX1BFUl9EQVkgICAoU0VDU19QRVJfSE9VUiAqIDI0KQorCitzdGF0aWMgdm9pZCB1bm1rdGltZSh1bnNpZ25lZCBsb25nIHRpbWUsIGxvbmcgb2Zmc2V0LAorCQkgICAgIGludCAqeWVhcnAsIGludCAqbW9ucCwgaW50ICpkYXlwLAorCQkgICAgIGludCAqaG91cnAsIGludCAqbWlucCwgaW50ICpzZWNwKQoreworICAgICAgICAvKiBIb3cgbWFueSBkYXlzIGNvbWUgYmVmb3JlIGVhY2ggbW9udGggKDAtMTIpLiAgKi8KKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50IF9fbW9uX3lkYXlbMl1bMTNdID0KKwl7CisJCS8qIE5vcm1hbCB5ZWFycy4gICovCisJCXsgMCwgMzEsIDU5LCA5MCwgMTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzQsIDM2NSB9LAorCQkvKiBMZWFwIHllYXJzLiAgKi8KKwkJeyAwLCAzMSwgNjAsIDkxLCAxMjEsIDE1MiwgMTgyLCAyMTMsIDI0NCwgMjc0LCAzMDUsIDMzNSwgMzY2IH0KKwl9OworCWxvbmcgaW50IGRheXMsIHJlbSwgeSwgd2RheSwgeWRheTsKKwljb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKmlwOworCisJZGF5cyA9IHRpbWUgLyBTRUNTX1BFUl9EQVk7CisJcmVtID0gdGltZSAlIFNFQ1NfUEVSX0RBWTsKKwlyZW0gKz0gb2Zmc2V0OworCXdoaWxlIChyZW0gPCAwKSB7CisJCXJlbSArPSBTRUNTX1BFUl9EQVk7CisJCS0tZGF5czsKKwl9CisJd2hpbGUgKHJlbSA+PSBTRUNTX1BFUl9EQVkpIHsKKwkJcmVtIC09IFNFQ1NfUEVSX0RBWTsKKwkJKytkYXlzOworCX0KKwkqaG91cnAgPSByZW0gLyBTRUNTX1BFUl9IT1VSOworCXJlbSAlPSBTRUNTX1BFUl9IT1VSOworCSptaW5wID0gcmVtIC8gU0VDU19QRVJfTUlOVVRFOworCSpzZWNwID0gcmVtICUgU0VDU19QRVJfTUlOVVRFOworCS8qIEphbnVhcnkgMSwgMTk3MCB3YXMgYSBUaHVyc2RheS4gKi8KKwl3ZGF5ID0gKDQgKyBkYXlzKSAlIDc7IC8qIERheSBpbiB0aGUgd2Vlay4gTm90IGN1cnJlbnRseSB1c2VkICovCisJaWYgKHdkYXkgPCAwKSB3ZGF5ICs9IDc7CisJeSA9IDE5NzA7CisKKyNkZWZpbmUgRElWKGEsIGIpICgoYSkgLyAoYikgLSAoKGEpICUgKGIpIDwgMCkpCisjZGVmaW5lIExFQVBTX1RIUlVfRU5EX09GKHkpIChESVYgKHksIDQpIC0gRElWICh5LCAxMDApICsgRElWICh5LCA0MDApKQorI2RlZmluZSBfX2lzbGVhcCh5ZWFyKQlcCisgICgoeWVhcikgJSA0ID09IDAgJiYgKCh5ZWFyKSAlIDEwMCAhPSAwIHx8ICh5ZWFyKSAlIDQwMCA9PSAwKSkKKworCXdoaWxlIChkYXlzIDwgMCB8fCBkYXlzID49IChfX2lzbGVhcCAoeSkgPyAzNjYgOiAzNjUpKQorCXsKKwkJLyogR3Vlc3MgYSBjb3JyZWN0ZWQgeWVhciwgYXNzdW1pbmcgMzY1IGRheXMgcGVyIHllYXIuICAqLworCQlsb25nIGludCB5ZyA9IHkgKyBkYXlzIC8gMzY1IC0gKGRheXMgJSAzNjUgPCAwKTsKKworCQkvKiBBZGp1c3QgREFZUyBhbmQgWSB0byBtYXRjaCB0aGUgZ3Vlc3NlZCB5ZWFyLiAgKi8KKwkJZGF5cyAtPSAoKHlnIC0geSkgKiAzNjUKKwkJCSArIExFQVBTX1RIUlVfRU5EX09GICh5ZyAtIDEpCisJCQkgLSBMRUFQU19USFJVX0VORF9PRiAoeSAtIDEpKTsKKwkJeSA9IHlnOworCX0KKwkqeWVhcnAgPSB5IC0gMTkwMDsKKwl5ZGF5ID0gZGF5czsgLyogZGF5IGluIHRoZSB5ZWFyLiAgTm90IGN1cnJlbnRseSB1c2VkLiAqLworCWlwID0gX19tb25feWRheVtfX2lzbGVhcCh5KV07CisJZm9yICh5ID0gMTE7IGRheXMgPCAobG9uZyBpbnQpIGlwW3ldOyAtLXkpCisJCWNvbnRpbnVlOworCWRheXMgLT0gaXBbeV07CisJKm1vbnAgPSB5OworCSpkYXlwID0gZGF5cyArIDE7IC8qIGRheSBpbiB0aGUgbW9udGggKi8KKwlyZXR1cm47Cit9CisKKy8qCisgKiBSZWFkL3dyaXRlIHRoZSBoYXJkd2FyZSBjbG9jay4KKyAqLworCitpbnQgbWFjX2h3Y2xrKGludCBvcCwgc3RydWN0IHJ0Y190aW1lICp0KQoreworCXVuc2lnbmVkIGxvbmcgbm93OworCisJaWYgKCFvcCkgeyAvKiByZWFkICovCisJCWlmIChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSA9PSBNQUNfQURCX0lJKSB7CisJCQlub3cgPSB2aWFfcmVhZF90aW1lKCk7CisJCX0gZWxzZQorI2lmZGVmIENPTkZJR19BREIKKwkJaWYgKChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSA9PSBNQUNfQURCX0lJU0kpIHx8CisJCQkgICAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgPT0gTUFDX0FEQl9QQjEpIHx8CisJCQkgICAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgPT0gTUFDX0FEQl9QQjIpIHx8CisJCQkgICAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgPT0gTUFDX0FEQl9DVURBKSkgeworCQkJbm93ID0gYWRiX3JlYWRfdGltZSgpOworCQl9IGVsc2UKKyNlbmRpZgorCQlpZiAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgPT0gTUFDX0FEQl9JT1ApIHsKKwkJCW5vdyA9IHZpYV9yZWFkX3RpbWUoKTsKKwkJfSBlbHNlIHsKKwkJCW5vdyA9IDA7CisJCX0KKworCQl0LT50bV93ZGF5ID0gMDsKKwkJdW5ta3RpbWUobm93LCAwLAorCQkJICZ0LT50bV95ZWFyLCAmdC0+dG1fbW9uLCAmdC0+dG1fbWRheSwKKwkJCSAmdC0+dG1faG91ciwgJnQtPnRtX21pbiwgJnQtPnRtX3NlYyk7CisJCXByaW50aygibWFjX2h3Y2xrOiByZWFkICUwNGQtJTAyZC0lLTJkICUwMmQ6JTAyZDolMDJkXG4iLAorCQkJdC0+dG1feWVhciArIDE5MDAsIHQtPnRtX21vbiArIDEsIHQtPnRtX21kYXksIHQtPnRtX2hvdXIsIHQtPnRtX21pbiwgdC0+dG1fc2VjKTsKKwl9IGVsc2UgeyAvKiB3cml0ZSAqLworCQlwcmludGsoIm1hY19od2NsazogdHJpZWQgdG8gd3JpdGUgJTA0ZC0lMDJkLSUtMmQgJTAyZDolMDJkOiUwMmRcbiIsCisJCQl0LT50bV95ZWFyICsgMTkwMCwgdC0+dG1fbW9uICsgMSwgdC0+dG1fbWRheSwgdC0+dG1faG91ciwgdC0+dG1fbWluLCB0LT50bV9zZWMpOworCisjaWYgMAkvKiBpdCB0cmFzaGVzIG15IHJ0YyAqLworCQlub3cgPSBta3RpbWUodC0+dG1feWVhciArIDE5MDAsIHQtPnRtX21vbiArIDEsIHQtPnRtX21kYXksCisJCQkgICAgIHQtPnRtX2hvdXIsIHQtPnRtX21pbiwgdC0+dG1fc2VjKTsKKworCQlpZiAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgPT0gTUFDX0FEQl9JSSkgeworCQkJdmlhX3dyaXRlX3RpbWUobm93KTsKKwkJfSBlbHNlIGlmICgobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgPT0gTUFDX0FEQl9JSVNJKSB8fAorCQkJICAgKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlID09IE1BQ19BREJfUEIxKSB8fAorCQkJICAgKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlID09IE1BQ19BREJfUEIyKSB8fAorCQkJICAgKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlID09IE1BQ19BREJfQ1VEQSkpIHsKKwkJCWFkYl93cml0ZV90aW1lKG5vdyk7CisJCX0gZWxzZSBpZiAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgPT0gTUFDX0FEQl9JT1ApIHsKKwkJCXZpYV93cml0ZV90aW1lKG5vdyk7CisJCX0KKyNlbmRpZgorCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCBtaW51dGVzL3NlY29uZHMgaW4gdGhlIGhhcmR3YXJlIGNsb2NrCisgKi8KKworaW50IG1hY19zZXRfY2xvY2tfbW1zcyAodW5zaWduZWQgbG9uZyBub3d0aW1lKQoreworCXN0cnVjdCBydGNfdGltZSBub3c7CisKKwltYWNfaHdjbGsoMCwgJm5vdyk7CisJbm93LnRtX3NlYyA9IG5vd3RpbWUgJSA2MDsKKwlub3cudG1fbWluID0gKG5vd3RpbWUgLyA2MCkgJSA2MDsKKwltYWNfaHdjbGsoMSwgJm5vdyk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvb3NzLmMgYi9hcmNoL202OGsvbWFjL29zcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMzU0NzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbWFjL29zcy5jCkBAIC0wLDAgKzEsMzAxIEBACisvKgorICoJT1NTIGhhbmRsaW5nCisgKglXcml0dGVuIGJ5IEpvc2h1YSBNLiBUaG9tcHNvbiAoZnVuYWhvQGp1cmFpLm9yZykKKyAqCisgKgorICoJVGhpcyBjaGlwIGlzIHVzZWQgaW4gdGhlIElJZnggaW4gcGxhY2Ugb2YgVklBICMyLiBJdCBhY3RzIGxpa2UgYSBmYW5jeQorICoJVklBIGNoaXAgd2l0aCBwcm9yYW1tYWJsZSBpbnRlcnJ1cHQgbGV2ZWxzLgorICoKKyAqIDk5MDUwMiAoam10KSAtIE1ham9yIHJld3JpdGUgZm9yIG5ldyBpbnRlcnJ1cHQgYXJjaGl0ZWN0dXJlIGFzIHdlbGwgYXMgc29tZQorICoJCSAgcmVjZW50IGluc2lnaHRzIGludG8gT1NTIG9wZXJhdGlvbmFsIGRldGFpbHMuCisgKiA5OTA2MTAgKGptdCkgLSBOb3cgdGFraW5nIGZ1bGxsIGFkdmFudGFnZSBvZiB0aGUgT1NTLiBJbnRlcnJ1cHRzIGFyZSBtYXBwZWQKKyAqCQkgIHRvIG1vc3RseSBtYXRjaCB0aGUgQS9VWCBpbnRlcnJ1cHQgc2NoZW1lIHN1cHBvcnRlZCBvbiB0aGUKKyAqCQkgIFZJQSBzaWRlLiBBbHNvIGFkZGVkIHN1cHBvcnQgZm9yIGVuYWJsaW5nIHRoZSBJU00gaXJxIGFnYWluCisgKgkJICBzaW5jZSB3ZSBub3cgaGF2ZSBhIGZ1bmN0aW9uYWwgSU9QIG1hbmFnZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9tYWNody5oPgorI2luY2x1ZGUgPGFzbS9tYWNpbnRvc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaW50cy5oPgorI2luY2x1ZGUgPGFzbS9tYWNfdmlhLmg+CisjaW5jbHVkZSA8YXNtL21hY19vc3MuaD4KKworaW50IG9zc19wcmVzZW50Owordm9sYXRpbGUgc3RydWN0IG1hY19vc3MgKm9zczsKKworaXJxcmV0dXJuX3Qgb3NzX2lycShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CitpcnFyZXR1cm5fdCBvc3NfbnVidXNfaXJxKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKworZXh0ZXJuIGlycXJldHVybl90IHZpYTFfaXJxKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK2V4dGVybiBpcnFyZXR1cm5fdCBtYWNfc2NjX2Rpc3BhdGNoKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKworLyoKKyAqIEluaXRpYWxpemUgdGhlIE9TUworICoKKyAqIFRoZSBPU1MgImRldGVjdGlvbiIgY29kZSBpcyBhY3R1YWxseSBpbiB2aWFfaW5pdCgpIHdoaWNoIGlzIGFsd2F5cyBjYWxsZWQKKyAqIGJlZm9yZSB1cy4gVGh1cyB3ZSBjYW4gY291bnQgb24gb3NzX3ByZXNlbnQgYmVpbmcgdmFsaWQgb24gZW50cnkuCisgKi8KKwordm9pZCBfX2luaXQgb3NzX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWlmICghb3NzX3ByZXNlbnQpIHJldHVybjsKKworCW9zcyA9IChzdHJ1Y3QgbWFjX29zcyAqKSBPU1NfQkFTRTsKKworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMuIFVubGlrZSBhIFZJQSBpdCBsb29rcyBsaWtlIHdlICAgICovCisJLyogZG8gdGhpcyBieSBzZXR0aW5nIHRoZSBzb3VyY2UncyBpbnRlcnJ1cHQgbGV2ZWwgdG8gemVyby4gKi8KKworCWZvciAoaSA9IDA7IGkgPD0gT1NTX05VTV9TT1VSQ0VTOyBpKyspIHsKKwkJb3NzLT5pcnFfbGV2ZWxbaV0gPSBPU1NfSVJRTEVWX0RJU0FCTEVEOworCX0KKwkvKiBJZiB3ZSBkaXNhYmxlIFZJQTEgaGVyZSwgd2UgbmV2ZXIgcmVhbGx5IGhhbmRsZSBpdC4uLiAqLworCW9zcy0+aXJxX2xldmVsW09TU19WSUExXSA9IE9TU19JUlFMRVZfVklBMTsKK30KKworLyoKKyAqIFJlZ2lzdGVyIHRoZSBPU1MgYW5kIE51QnVzIGludGVycnVwdCBkaXNwYXRjaGVycy4KKyAqLworCit2b2lkIF9faW5pdCBvc3NfcmVnaXN0ZXJfaW50ZXJydXB0cyh2b2lkKQoreworCWNwdV9yZXF1ZXN0X2lycShPU1NfSVJRTEVWX1NDU0ksIG9zc19pcnEsIElSUV9GTEdfTE9DSywKKwkJCSJzY3NpIiwgKHZvaWQgKikgb3NzKTsKKwljcHVfcmVxdWVzdF9pcnEoT1NTX0lSUUxFVl9JT1BTQ0MsIG1hY19zY2NfZGlzcGF0Y2gsIElSUV9GTEdfTE9DSywKKwkJCSJzY2MiLCBtYWNfc2NjX2Rpc3BhdGNoKTsKKwljcHVfcmVxdWVzdF9pcnEoT1NTX0lSUUxFVl9OVUJVUywgb3NzX251YnVzX2lycSwgSVJRX0ZMR19MT0NLLAorCQkJIm51YnVzIiwgKHZvaWQgKikgb3NzKTsKKwljcHVfcmVxdWVzdF9pcnEoT1NTX0lSUUxFVl9TT1VORCwgb3NzX2lycSwgSVJRX0ZMR19MT0NLLAorCQkJInNvdW5kIiwgKHZvaWQgKikgb3NzKTsKKwljcHVfcmVxdWVzdF9pcnEoT1NTX0lSUUxFVl9WSUExLCB2aWExX2lycSwgSVJRX0ZMR19MT0NLLAorCQkJInZpYTEiLCAodm9pZCAqKSB2aWExKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgT1NTIGZvciBOdWJ1cyBhY2Nlc3MKKyAqLworCit2b2lkIF9faW5pdCBvc3NfbnVidXNfaW5pdCh2b2lkKQoreworfQorCisvKgorICogSGFuZGxlIG1pc2NlbGxhbmVvdXMgT1NTIGludGVycnVwdHMuIFJpZ2h0IG5vdyB0aGF0J3MganVzdCBzb3VuZAorICogYW5kIFNDU0k7IGV2ZXJ5dGhpbmcgZWxzZSBpcyByb3V0ZWQgdG8gaXRzIG93biBhdXRvdmVjdG9yIElSUS4KKyAqLworCitpcnFyZXR1cm5fdCBvc3NfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGV2ZW50czsKKworCWV2ZW50cyA9IG9zcy0+aXJxX3BlbmRpbmcgJiAoT1NTX0lQX1NPVU5EfE9TU19JUF9TQ1NJKTsKKwlpZiAoIWV2ZW50cykKKwkJcmV0dXJuIElSUV9OT05FOworCisjaWZkZWYgREVCVUdfSVJRUworCWlmICgoY29uc29sZV9sb2dsZXZlbCA9PSAxMCkgJiYgIShldmVudHMgJiBPU1NfSVBfU0NTSSkpIHsKKwkJcHJpbnRrKCJvc3NfaXJxOiBpcnEgJWQgZXZlbnRzID0gMHglMDRYXG4iLCBpcnEsCisJCQkoaW50KSBvc3MtPmlycV9wZW5kaW5nKTsKKwl9CisjZW5kaWYKKwkvKiBGSVhNRTogaG93IGRvIHlvdSBjbGVhciBhIHBlbmRpbmcgSVJRPyAgICAqLworCisJaWYgKGV2ZW50cyAmIE9TU19JUF9TT1VORCkgeworCQkvKiBGSVhNRTogY2FsbCBzb3VuZCBoYW5kbGVyICovCisJCW9zcy0+aXJxX3BlbmRpbmcgJj0gfk9TU19JUF9TT1VORDsKKwl9IGVsc2UgaWYgKGV2ZW50cyAmIE9TU19JUF9TQ1NJKSB7CisJCW9zcy0+aXJxX2xldmVsW09TU19TQ1NJXSA9IE9TU19JUlFMRVZfRElTQUJMRUQ7CisJCW1hY19kb19pcnFfbGlzdChJUlFfTUFDX1NDU0ksIHJlZ3MpOworCQlvc3MtPmlycV9wZW5kaW5nICY9IH5PU1NfSVBfU0NTSTsKKwkJb3NzLT5pcnFfbGV2ZWxbT1NTX1NDU0ldID0gT1NTX0lSUUxFVl9TQ1NJOworCX0gZWxzZSB7CisJCS8qIEZJWE1FOiBlcnJvciBjaGVjayBoZXJlPyAqLworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBOdWJ1cyBJUlEgaGFuZGxlciwgT1NTIHN0eWxlCisgKgorICogVW5saWtlIHRoZSBWSUEvUkJWIHRoaXMgaXMgb24gaXRzIG93biBhdXRvdmVjdG9yIGludGVycnVwdCBsZXZlbC4KKyAqLworCitpcnFyZXR1cm5fdCBvc3NfbnVidXNfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGV2ZW50cywgaXJxX2JpdCwgaTsKKworCWV2ZW50cyA9IG9zcy0+aXJxX3BlbmRpbmcgJiBPU1NfSVBfTlVCVVM7CisJaWYgKCFldmVudHMpCisJCXJldHVybiBJUlFfTk9ORTsKKworI2lmZGVmIERFQlVHX05VQlVTX0lOVAorCWlmIChjb25zb2xlX2xvZ2xldmVsID4gNykgeworCQlwcmludGsoIm9zc19udWJ1c19pcnE6IGV2ZW50cyA9IDB4JTA0WFxuIiwgZXZlbnRzKTsKKwl9CisjZW5kaWYKKwkvKiBUaGVyZSBhcmUgb25seSBzaXggc2xvdHMgb24gdGhlIE9TUywgbm90IHNldmVuICovCisKKwlmb3IgKGkgPSAwLCBpcnFfYml0ID0gMSA7IGkgPCA2IDsgaSsrLCBpcnFfYml0IDw8PSAxKSB7CisJCWlmIChldmVudHMgJiBpcnFfYml0KSB7CisJCQlvc3MtPmlycV9sZXZlbFtpXSA9IE9TU19JUlFMRVZfRElTQUJMRUQ7CisJCQltYWNfZG9faXJxX2xpc3QoTlVCVVNfU09VUkNFX0JBU0UgKyBpLCByZWdzKTsKKwkJCW9zcy0+aXJxX3BlbmRpbmcgJj0gfmlycV9iaXQ7CisJCQlvc3MtPmlycV9sZXZlbFtpXSA9IE9TU19JUlFMRVZfTlVCVVM7CisJCX0KKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorICogRW5hYmxlIGFuIE9TUyBpbnRlcnJ1cHQKKyAqCisgKiBJdCBsb29rcyBtZXNzeSBidXQgaXQncyByYXRoZXIgc3RyYWlnaHRmb3J3YXJkLiBUaGUgc3dpdGNoKCkgc3RhdGVtZW50CisgKiBqdXN0IG1hcHMgdGhlIG1hY2hzcGVjIGludGVycnVwdCBudW1iZXJzIHRvIHRoZSByaWdodCBPU1MgaW50ZXJydXB0CisgKiBzb3VyY2UgKGlmIHRoZSBPU1MgaGFuZGxlcyB0aGF0IGludGVycnVwdCkgYW5kIHRoZW4gc2V0cyB0aGUgaW50ZXJydXB0CisgKiBsZXZlbCBmb3IgdGhhdCBzb3VyY2UgdG8gbm9uemVybywgdGh1cyBlbmFibGluZyB0aGUgaW50ZXJydXB0LgorICovCisKK3ZvaWQgb3NzX2lycV9lbmFibGUoaW50IGlycSkgeworI2lmZGVmIERFQlVHX0lSUVVTRQorCXByaW50aygib3NzX2lycV9lbmFibGUoJWQpXG4iLCBpcnEpOworI2VuZGlmCisJc3dpdGNoKGlycSkgeworCQljYXNlIElSUV9TQ0M6CisJCWNhc2UgSVJRX1NDQ0E6CisJCWNhc2UgSVJRX1NDQ0I6CisJCQlvc3MtPmlycV9sZXZlbFtPU1NfSU9QU0NDXSA9IE9TU19JUlFMRVZfSU9QU0NDOworCQkJYnJlYWs7CisJCWNhc2UgSVJRX01BQ19BREI6CisJCQlvc3MtPmlycV9sZXZlbFtPU1NfSU9QSVNNXSA9IE9TU19JUlFMRVZfSU9QSVNNOworCQkJYnJlYWs7CisJCWNhc2UgSVJRX01BQ19TQ1NJOgorCQkJb3NzLT5pcnFfbGV2ZWxbT1NTX1NDU0ldID0gT1NTX0lSUUxFVl9TQ1NJOworCQkJYnJlYWs7CisJCWNhc2UgSVJRX05VQlVTXzk6CisJCWNhc2UgSVJRX05VQlVTX0E6CisJCWNhc2UgSVJRX05VQlVTX0I6CisJCWNhc2UgSVJRX05VQlVTX0M6CisJCWNhc2UgSVJRX05VQlVTX0Q6CisJCWNhc2UgSVJRX05VQlVTX0U6CisJCQlpcnEgLT0gTlVCVVNfU09VUkNFX0JBU0U7CisJCQlvc3MtPmlycV9sZXZlbFtpcnFdID0gT1NTX0lSUUxFVl9OVUJVUzsKKwkJCWJyZWFrOworI2lmZGVmIERFQlVHX0lSUVVTRQorCQlkZWZhdWx0OgorCQkJcHJpbnRrKCIlcyB1bmtub3duIGlycSAlZFxuIixfX0ZVTkNUSU9OX18sIGlycSk7CisJCQlicmVhazsKKyNlbmRpZgorCX0KK30KKworLyoKKyAqIERpc2FibGUgYW4gT1NTIGludGVycnVwdAorICoKKyAqIFNhbWUgYXMgYWJvdmUgZXhjZXB0IHdlIHNldCB0aGUgc291cmNlJ3MgaW50ZXJydXB0IGxldmVsIHRvIHplcm8sCisgKiB0byBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQuCisgKi8KKwordm9pZCBvc3NfaXJxX2Rpc2FibGUoaW50IGlycSkgeworI2lmZGVmIERFQlVHX0lSUVVTRQorCXByaW50aygib3NzX2lycV9kaXNhYmxlKCVkKVxuIiwgaXJxKTsKKyNlbmRpZgorCXN3aXRjaChpcnEpIHsKKwkJY2FzZSBJUlFfU0NDOgorCQljYXNlIElSUV9TQ0NBOgorCQljYXNlIElSUV9TQ0NCOgorCQkJb3NzLT5pcnFfbGV2ZWxbT1NTX0lPUFNDQ10gPSBPU1NfSVJRTEVWX0RJU0FCTEVEOworCQkJYnJlYWs7CisJCWNhc2UgSVJRX01BQ19BREI6CisJCQlvc3MtPmlycV9sZXZlbFtPU1NfSU9QSVNNXSA9IE9TU19JUlFMRVZfRElTQUJMRUQ7CisJCQlicmVhazsKKwkJY2FzZSBJUlFfTUFDX1NDU0k6CisJCQlvc3MtPmlycV9sZXZlbFtPU1NfU0NTSV0gPSBPU1NfSVJRTEVWX0RJU0FCTEVEOworCQkJYnJlYWs7CisJCWNhc2UgSVJRX05VQlVTXzk6CisJCWNhc2UgSVJRX05VQlVTX0E6CisJCWNhc2UgSVJRX05VQlVTX0I6CisJCWNhc2UgSVJRX05VQlVTX0M6CisJCWNhc2UgSVJRX05VQlVTX0Q6CisJCWNhc2UgSVJRX05VQlVTX0U6CisJCQlpcnEgLT0gTlVCVVNfU09VUkNFX0JBU0U7CisJCQlvc3MtPmlycV9sZXZlbFtpcnFdID0gT1NTX0lSUUxFVl9ESVNBQkxFRDsKKwkJCWJyZWFrOworI2lmZGVmIERFQlVHX0lSUVVTRQorCQlkZWZhdWx0OgorCQkJcHJpbnRrKCIlcyB1bmtub3duIGlycSAlZFxuIiwgX19GVU5DVElPTl9fLCBpcnEpOworCQkJYnJlYWs7CisjZW5kaWYKKwl9Cit9CisKKy8qCisgKiBDbGVhciBhbiBPU1MgaW50ZXJydXB0CisgKgorICogTm90IHN1cmUgaWYgdGhpcyB3b3JrcyBvciBub3QgYnV0IGl0J3MgdGhlIG9ubHkgbWV0aG9kIEkgY291bGQKKyAqIHRoaW5rIG9mIGJhc2VkIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgbWFjX29zcyBzdHJ1Y3R1cmUuCisgKi8KKwordm9pZCBvc3NfaXJxX2NsZWFyKGludCBpcnEpIHsKKwkvKiBGSVhNRTogaG93IHRvIGRvIHRoaXMgb24gT1NTPyAqLworCXN3aXRjaChpcnEpIHsKKwkJY2FzZSBJUlFfU0NDOgorCQljYXNlIElSUV9TQ0NBOgorCQljYXNlIElSUV9TQ0NCOgorCQkJb3NzLT5pcnFfcGVuZGluZyAmPSB+T1NTX0lQX0lPUFNDQzsKKwkJCWJyZWFrOworCQljYXNlIElSUV9NQUNfQURCOgorCQkJb3NzLT5pcnFfcGVuZGluZyAmPSB+T1NTX0lQX0lPUElTTTsKKwkJCWJyZWFrOworCQljYXNlIElSUV9NQUNfU0NTSToKKwkJCW9zcy0+aXJxX3BlbmRpbmcgJj0gfk9TU19JUF9TQ1NJOworCQkJYnJlYWs7CisJCWNhc2UgSVJRX05VQlVTXzk6CisJCWNhc2UgSVJRX05VQlVTX0E6CisJCWNhc2UgSVJRX05VQlVTX0I6CisJCWNhc2UgSVJRX05VQlVTX0M6CisJCWNhc2UgSVJRX05VQlVTX0Q6CisJCWNhc2UgSVJRX05VQlVTX0U6CisJCQlpcnEgLT0gTlVCVVNfU09VUkNFX0JBU0U7CisJCQlvc3MtPmlycV9wZW5kaW5nICY9IH4oMSA8PCBpcnEpOworCQkJYnJlYWs7CisJfQorfQorCisvKgorICogQ2hlY2sgdG8gc2VlIGlmIGEgc3BlY2lmaWMgT1NTIGludGVycnVwdCBpcyBwZW5kaW5nCisgKi8KKworaW50IG9zc19pcnFfcGVuZGluZyhpbnQgaXJxKQoreworCXN3aXRjaChpcnEpIHsKKwkJY2FzZSBJUlFfU0NDOgorCQljYXNlIElSUV9TQ0NBOgorCQljYXNlIElSUV9TQ0NCOgorCQkJcmV0dXJuIG9zcy0+aXJxX3BlbmRpbmcgJiBPU1NfSVBfSU9QU0NDOworCQkJYnJlYWs7CisJCWNhc2UgSVJRX01BQ19BREI6CisJCQlyZXR1cm4gb3NzLT5pcnFfcGVuZGluZyAmIE9TU19JUF9JT1BJU007CisJCQlicmVhazsKKwkJY2FzZSBJUlFfTUFDX1NDU0k6CisJCQlyZXR1cm4gb3NzLT5pcnFfcGVuZGluZyAmIE9TU19JUF9TQ1NJOworCQkJYnJlYWs7CisJCWNhc2UgSVJRX05VQlVTXzk6CisJCWNhc2UgSVJRX05VQlVTX0E6CisJCWNhc2UgSVJRX05VQlVTX0I6CisJCWNhc2UgSVJRX05VQlVTX0M6CisJCWNhc2UgSVJRX05VQlVTX0Q6CisJCWNhc2UgSVJRX05VQlVTX0U6CisJCQlpcnEgLT0gTlVCVVNfU09VUkNFX0JBU0U7CisJCQlyZXR1cm4gb3NzLT5pcnFfcGVuZGluZyAmICgxIDw8IGlycSk7CisJCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL3BzYy5jIGIvYXJjaC9tNjhrL21hYy9wc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzIzODRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21hYy9wc2MuYwpAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqCUFwcGxlIFBlcmlwaGVyYWwgU3lzdGVtIENvbnRyb2xsZXIgKFBTQykKKyAqCisgKglUaGUgUFNDIGlzIHVzZWQgb24gdGhlIEFWIE1hY3MgdG8gY29udHJvbCBJTyBmdW5jdGlvbnMgbm90IGhhbmRsZWQKKyAqCWJ5IHRoZSBWSUFzIChFdGhlcm5ldCwgRFNQLCBTQ0MpLgorICoKKyAqIFRPIERPOgorICoKKyAqIFRyeSB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiBpbiBwSUZSNSBhbmQgcElGUjYuIFRoZXJlIHNlZW0gdG8gYmUKKyAqIHBlcnNpc2FudCBpbnRlcnJ1cHQgY29uZGl0aW9ucyBpbiB0aG9zZSByZWdpc3RlcnMgYW5kIEkgaGF2ZSBubyBpZGVhIHdoYXQKKyAqIHRoZXkgYXJlLiBHcmFudGVkIGl0IGRvZXNuJ3QgYWZmZWN0IHNpbmNlIHdlJ3JlIG5vdCBlbmFibGluZyBhbnkgaW50ZXJydXB0cworICogb24gdGhvc2UgbGV2ZWxzIGF0IHRoZSBtb21lbnQsIGJ1dCBpdCB3b3VsZCBiZSBuaWNlIHRvIGtub3cuIEkgaGF2ZSBhIGZlZWxpbmcKKyAqIHRoZXkgYXJlbid0IGFjdHVhbGx5IGludGVycnVwdCBsaW5lcyBidXQgZGF0YSBsaW5lcyAodG8gdGhlIERTUD8pCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9tYWNpbnRvc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaW50cy5oPgorI2luY2x1ZGUgPGFzbS9tYWNfcHNjLmg+CisKKyNkZWZpbmUgREVCVUdfUFNDCisKK2ludCBwc2NfcHJlc2VudDsKK3ZvbGF0aWxlIF9fdTggKnBzYzsKKworaXJxcmV0dXJuX3QgcHNjX2lycShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisKKy8qCisgKiBEZWJ1Z2dpbmcgZHVtcCwgdXNlZCBpbiB2YXJpb3VzIHBsYWNlcyB0byBzZWUgd2hhdCdzIGdvaW5nIG9uLgorICovCisKK3ZvaWQgcHNjX2RlYnVnX2R1bXAodm9pZCkKK3sKKwlpbnQJaTsKKworCWlmICghcHNjX3ByZXNlbnQpIHJldHVybjsKKwlmb3IgKGkgPSAweDMwIDsgaSA8IDB4NzAgOyBpICs9IDB4MTApIHsKKwkJcHJpbnRrKCJQU0MgIyVkOiAgSUZSID0gMHglMDJYIElFUiA9IDB4JTAyWFxuIiwKKwkJCWkgPj4gNCwKKwkJCShpbnQpIHBzY19yZWFkX2J5dGUocElGUmJhc2UgKyBpKSwKKwkJCShpbnQpIHBzY19yZWFkX2J5dGUocElFUmJhc2UgKyBpKSk7CisJfQorfQorCisvKgorICogVHJ5IHRvIGtpbGwgYWxsIERNQSBjaGFubmVscyBvbiB0aGUgUFNDLiBOb3Qgc3VyZSBob3cgdGhpcyBoaXMKKyAqIHN1cHBvc2VkIHRvIHdvcms7IHRoaXMgaXMgY29kZSBsaWZ0ZWQgZnJvbSBtYWNtYWNlLmMgYW5kIHRoZW4KKyAqIGV4cGFuZGVkIHRvIGNvdmVyIHdoYXQgSSB0aGluayBhcmUgdGhlIG90aGVyIDcgY2hhbm5lbHMuCisgKi8KKwordm9pZCBwc2NfZG1hX2RpZV9kaWVfZGllKHZvaWQpCit7CisJaW50IGk7CisKKwlwcmludGsoIktpbGxpbmcgYWxsIFBTQyBETUEgY2hhbm5lbHMuLi4iKTsKKwlmb3IgKGkgPSAwIDsgaSA8IDkgOyBpKyspIHsKKwkJcHNjX3dyaXRlX3dvcmQoUFNDX0NUTF9CQVNFICsgKGkgPDwgNCksIDB4ODgwMCk7CisJCXBzY193cml0ZV93b3JkKFBTQ19DVExfQkFTRSArIChpIDw8IDQpLCAweDEwMDApOworCQlwc2Nfd3JpdGVfd29yZChQU0NfQ01EX0JBU0UgKyAoaSA8PCA1KSwgMHgxMTAwKTsKKwkJcHNjX3dyaXRlX3dvcmQoUFNDX0NNRF9CQVNFICsgKGkgPDwgNSkgKyAweDEwLCAweDExMDApOworCX0KKwlwcmludGsoImRvbmUhXG4iKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIFBTQy4gRm9yIG5vdyB0aGlzIGp1c3QgaW52b2x2ZXMgc2h1dHRpbmcgZG93biBhbGwKKyAqIGludGVycnVwdCBzb3VyY2VzIHVzaW5nIHRoZSBJRVJzLgorICovCisKK3ZvaWQgX19pbml0IHBzY19pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwlpZiAobWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgIT0gTUFDX01PREVMX0M2NjAKKwkgJiYgbWFjaW50b3NoX2NvbmZpZy0+aWRlbnQgIT0gTUFDX01PREVMX1E4NDApCisJeworCQlwc2MgPSBOVUxMOworCQlwc2NfcHJlc2VudCA9IDA7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFRoZSBQU0MgaXMgYWx3YXlzIGF0IHRoZSBzYW1lIHNwb3QsIGJ1dCB1c2luZyBwc2MKKwkgKiBrZWVwcyB0aGluZ3MgY29uc2lzYW50IHdpdGggdGhlIHBzY194eHh4IGZ1bmN0aW9ucy4KKwkgKi8KKworCXBzYyA9ICh2b2lkICopIFBTQ19CQVNFOworCXBzY19wcmVzZW50ID0gMTsKKworCXByaW50aygiUFNDIGRldGVjdGVkIGF0ICVwXG4iLCBwc2MpOworCisJcHNjX2RtYV9kaWVfZGllX2RpZSgpOworCisjaWZkZWYgREVCVUdfUFNDCisJcHNjX2RlYnVnX2R1bXAoKTsKKyNlbmRpZgorCS8qCisJICogTWFzayBhbmQgY2xlYXIgYWxsIHBvc3NpYmxlIGludGVycnVwdHMKKwkgKi8KKworCWZvciAoaSA9IDB4MzAgOyBpIDwgMHg3MCA7IGkgKz0gMHgxMCkgeworCQlwc2Nfd3JpdGVfYnl0ZShwSUVSYmFzZSArIGksIDB4MEYpOworCQlwc2Nfd3JpdGVfYnl0ZShwSUZSYmFzZSArIGksIDB4MEYpOworCX0KK30KKworLyoKKyAqIFJlZ2lzdGVyIHRoZSBQU0MgaW50ZXJydXB0IGRpc3BhdGNoZXJzIGZvciBhdXRvdmVjdG9yIGludGVycnVwdHMgMy02LgorICovCisKK3ZvaWQgX19pbml0IHBzY19yZWdpc3Rlcl9pbnRlcnJ1cHRzKHZvaWQpCit7CisJY3B1X3JlcXVlc3RfaXJxKDMsIHBzY19pcnEsIElSUV9GTEdfTE9DSywgInBzYzMiLCAodm9pZCAqKSAweDMwKTsKKwljcHVfcmVxdWVzdF9pcnEoNCwgcHNjX2lycSwgSVJRX0ZMR19MT0NLLCAicHNjNCIsICh2b2lkICopIDB4NDApOworCWNwdV9yZXF1ZXN0X2lycSg1LCBwc2NfaXJxLCBJUlFfRkxHX0xPQ0ssICJwc2M1IiwgKHZvaWQgKikgMHg1MCk7CisJY3B1X3JlcXVlc3RfaXJxKDYsIHBzY19pcnEsIElSUV9GTEdfTE9DSywgInBzYzYiLCAodm9pZCAqKSAweDYwKTsKK30KKworLyoKKyAqIFBTQyBpbnRlcnJ1cHQgaGFuZGxlci4gSXQncyBhIGxvdCBsaWtlIHRoZSBWSUEgaW50ZXJydXB0IGhhbmRsZXIuCisgKi8KKworaXJxcmV0dXJuX3QgcHNjX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBwSUZSCT0gcElGUmJhc2UgKyAoKGludCkgZGV2X2lkKTsKKwlpbnQgcElFUgk9IHBJRVJiYXNlICsgKChpbnQpIGRldl9pZCk7CisJaW50IGJhc2VfaXJxOworCWludCBpcnFfYml0LGk7CisJdW5zaWduZWQgY2hhciBldmVudHM7CisKKwliYXNlX2lycSA9IGlycSA8PCAzOworCisjaWZkZWYgREVCVUdfSVJRUworCXByaW50aygicHNjX2lycTogaXJxICVkIHBJRlIgPSAweCUwMlggcElFUiA9IDB4JTAyWFxuIiwKKwkJaXJxLCAoaW50KSBwc2NfcmVhZF9ieXRlKHBJRlIpLCAoaW50KSBwc2NfcmVhZF9ieXRlKHBJRVIpKTsKKyNlbmRpZgorCisJZXZlbnRzID0gcHNjX3JlYWRfYnl0ZShwSUZSKSAmIHBzY19yZWFkX2J5dGUocElFUikgJiAweEY7CisJaWYgKCFldmVudHMpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWZvciAoaSA9IDAsIGlycV9iaXQgPSAxIDsgaSA8IDQgOyBpKyssIGlycV9iaXQgPDw9IDEpIHsKKwkgICAgICAgIGlmIChldmVudHMgJiBpcnFfYml0KSB7CisJCQlwc2Nfd3JpdGVfYnl0ZShwSUVSLCBpcnFfYml0KTsKKwkJCW1hY19kb19pcnFfbGlzdChiYXNlX2lycSArIGksIHJlZ3MpOworCQkJcHNjX3dyaXRlX2J5dGUocElGUiwgaXJxX2JpdCk7CisJCQlwc2Nfd3JpdGVfYnl0ZShwSUVSLCBpcnFfYml0IHwgMHg4MCk7CisJCX0KKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCit2b2lkIHBzY19pcnFfZW5hYmxlKGludCBpcnEpIHsKKwlpbnQgaXJxX3NyYwk9IElSUV9TUkMoaXJxKTsKKwlpbnQgaXJxX2lkeAk9IElSUV9JRFgoaXJxKTsKKwlpbnQgcElFUgk9IHBJRVJiYXNlICsgKGlycV9zcmMgPDwgNCk7CisKKyNpZmRlZiBERUJVR19JUlFVU0UKKwlwcmludGsoInBzY19pcnFfZW5hYmxlKCVkKVxuIiwgaXJxKTsKKyNlbmRpZgorCXBzY193cml0ZV9ieXRlKHBJRVIsICgxIDw8IGlycV9pZHgpIHwgMHg4MCk7Cit9CisKK3ZvaWQgcHNjX2lycV9kaXNhYmxlKGludCBpcnEpIHsKKwlpbnQgaXJxX3NyYwk9IElSUV9TUkMoaXJxKTsKKwlpbnQgaXJxX2lkeAk9IElSUV9JRFgoaXJxKTsKKwlpbnQgcElFUgk9IHBJRVJiYXNlICsgKGlycV9zcmMgPDwgNCk7CisKKyNpZmRlZiBERUJVR19JUlFVU0UKKwlwcmludGsoInBzY19pcnFfZGlzYWJsZSglZClcbiIsIGlycSk7CisjZW5kaWYKKwlwc2Nfd3JpdGVfYnl0ZShwSUVSLCAxIDw8IGlycV9pZHgpOworfQorCit2b2lkIHBzY19pcnFfY2xlYXIoaW50IGlycSkgeworCWludCBpcnFfc3JjCT0gSVJRX1NSQyhpcnEpOworCWludCBpcnFfaWR4CT0gSVJRX0lEWChpcnEpOworCWludCBwSUZSCT0gcElFUmJhc2UgKyAoaXJxX3NyYyA8PCA0KTsKKworCXBzY193cml0ZV9ieXRlKHBJRlIsIDEgPDwgaXJxX2lkeCk7Cit9CisKK2ludCBwc2NfaXJxX3BlbmRpbmcoaW50IGlycSkKK3sKKwlpbnQgaXJxX3NyYwk9IElSUV9TUkMoaXJxKTsKKwlpbnQgaXJxX2lkeAk9IElSUV9JRFgoaXJxKTsKKwlpbnQgcElGUgk9IHBJRVJiYXNlICsgKGlycV9zcmMgPDwgNCk7CisKKwlyZXR1cm4gcHNjX3JlYWRfYnl0ZShwSUZSKSAmICgxIDw8IGlycV9pZHgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy92aWEuYyBiL2FyY2gvbTY4ay9tYWMvdmlhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q1MjhiZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tYWMvdmlhLmMKQEAgLTAsMCArMSw2MTkgQEAKKy8qCisgKgk2NTIyIFZlcnNhdGlsZSBJbnRlcmZhY2UgQWRhcHRlciAoVklBKQorICoKKyAqCVRoZXJlIGFyZSB0d28gb2YgdGhlc2Ugb24gdGhlIE1hYyBJSS4gU29tZSBJUlEncyBhcmUgdmVjdG9yZWQKKyAqCXZpYSB0aGVtIGFzIGFyZSBhc3NvcnRlZCBiaXRzIGFuZCBib2JzIC0gZWcgUlRDLCBBREIuCisgKgorICogQ1NBOiBNb3Rvcm9sYSBzZWVtcyB0byBoYXZlIHJlbW92ZWQgZG9jdW1lbnRhdGlvbiBvbiB0aGUgNjUyMiBmcm9tCisgKiB0aGVpciB3ZWIgc2l0ZTsgdHJ5CisgKiAgICAgaHR0cDovL25lcmluaS5kcmYuY29tL3ZlY3RyZXgvb3RoZXIvdGV4dC9jaGlwcy82NTIyLworICogICAgIGh0dHA6Ly93d3cuenltdXJneS5uZXQvY2xhc3NpYy92aWMyMC92aWNkZXQxLmh0bQorICogYW5kCisgKiAgICAgaHR0cDovLzE5My4yMy4xNjguODcvbWlrcm9fbGFib3J2ZXJzdWNoZS92aWFfaW9iYXVzdGVpbi92aWE2NTIyXzEuaHRtbAorICogZm9yIGluZm8uICBBIGZ1bGwtdGV4dCB3ZWIgc2VhcmNoIG9uIDY1MjIgQU5EIFZJQSB3aWxsIHByb2JhYmx5IGFsc28KKyAqIG5ldCBzb21lIHVzZWZ1bG5lc3MuIDxjYW5hbmlhbkBhbHVtbmkucHJpbmNldG9uLmVkdT4gMjBhcHIxOTk5CisgKgorICogUFJBTS9SVEMgYWNjZXNzIGFsZ29yaXRobXMgYXJlIGZyb20gdGhlIE5ldEJTRCBSVEMgdG9vbGtpdCB2ZXJzaW9uIDEuMDhiCisgKiBieSBFcmlrIFZvZ2FuIGFuZCBhZGFwdGVkIHRvIExpbnV4IGJ5IEpvc2h1YSBNLiBUaG9tcHNvbiAoZnVuYWhvQGp1cmFpLm9yZykKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKworI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9tYWNpbnRvc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaW50cy5oPgorI2luY2x1ZGUgPGFzbS9tYWNody5oPgorI2luY2x1ZGUgPGFzbS9tYWNfdmlhLmg+CisjaW5jbHVkZSA8YXNtL21hY19wc2MuaD4KKwordm9sYXRpbGUgX191OCAqdmlhMSwgKnZpYTI7CisjaWYgMAorLyogU2VlIG5vdGUgaW4gbWFjX3ZpYS5oIGFib3V0IGhvdyB0aGlzIGlzIHBvc3NpYmx5IG5vdCB1c2VmdWwgKi8KK3ZvbGF0aWxlIGxvbmcgKnZpYV9tZW1vcnlfYm9nb249KGxvbmcgKikmdmlhX21lbW9yeV9ib2dvbjsKKyNlbmRpZgoraW50ICByYnZfcHJlc2VudCx2aWFfYWx0X21hcHBpbmc7CitfX3U4IHJidl9jbGVhcjsKKworLyoKKyAqIEdsb2JhbHMgZm9yIGFjY2Vzc2luZyB0aGUgVklBIGNoaXAgcmVnaXN0ZXJzIHdpdGhvdXQgaGF2aW5nIHRvCisgKiBjaGVjayBpZiB3ZSdyZSBoaXR0aW5nIGEgcmVhbCBWSUEgb3IgYW4gUkJWLiBOb3JtYWxseSB5b3UgY291bGQKKyAqIGp1c3QgaGl0IHRoZSBjb21iaW5lZCByZWdpc3RlciAoaWUsIHZJRVJ8cklFUikgYnV0IHRoYXQgc2VlbXMgdG8KKyAqIGJyZWFrIG9uIEFWIE1hY3MuLi5wcm9iYWJseSBiZWNhdXNlIHRoZXkgYWN0dWFsbHkgZGVjb2RlIG1vcmUgdGhhbgorICogZWlnaHQgYWRkcmVzcyBiaXRzLiBXaHkgY2FuJ3QgQXBwbGUgZW5naW5lZXJzIGF0IGxlYXN0IGJlCisgKiBfY29uc2lzdGVudGx5XyBsYXp5PyAgICAgICAgICAgICAgICAgICAgICAgICAgLSAxOTk5LTA1LTIxIChqbXQpCisgKi8KKworc3RhdGljIGludCBnSUVSLGdJRlIsZ0J1ZkEsZ0J1ZkI7CisKKy8qCisgKiBUaW1lciBkZWZzLgorICovCisKKyNkZWZpbmUgVElDS19TSVpFCQkxMDAwMAorI2RlZmluZSBNQUNfQ0xPQ0tfVElDSwkJKDc4MzMwMC9IWikJCS8qIHRpY2tzIHBlciBIWiAqLworI2RlZmluZSBNQUNfQ0xPQ0tfTE9XCQkoTUFDX0NMT0NLX1RJQ0smMHhGRikKKyNkZWZpbmUgTUFDX0NMT0NLX0hJR0gJCShNQUNfQ0xPQ0tfVElDSz4+OCkKKworc3RhdGljIGludCAgbnVidXNfYWN0aXZlOworCit2b2lkIHZpYV9kZWJ1Z19kdW1wKHZvaWQpOworaXJxcmV0dXJuX3QgdmlhMV9pcnEoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworaXJxcmV0dXJuX3QgdmlhMl9pcnEoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworaXJxcmV0dXJuX3QgdmlhX251YnVzX2lycShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7Cit2b2lkIHZpYV9pcnFfZW5hYmxlKGludCBpcnEpOwordm9pZCB2aWFfaXJxX2Rpc2FibGUoaW50IGlycSk7Cit2b2lkIHZpYV9pcnFfY2xlYXIoaW50IGlycSk7CisKK2V4dGVybiBpcnFyZXR1cm5fdCBtYWNfYmFuZyhpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CitleHRlcm4gaXJxcmV0dXJuX3QgbWFjX3NjY19kaXNwYXRjaChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CitleHRlcm4gaW50IG9zc19wcmVzZW50OworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgVklBcworICoKKyAqIEZpcnN0IHdlIGZpZ3VyZSBvdXQgd2hlcmUgdGhleSBhY3R1YWxseSBfYXJlXyBhcyB3ZWxsIGFzIHdoYXQgdHlwZSBvZgorICogVklBIHdlIGhhdmUgZm9yIFZJQTIgKGl0IGNvdWxkIGJlIGEgcmVhbCBWSUEgb3IgYW4gUkJWIG9yIGV2ZW4gYW4gT1NTLikKKyAqIFRoZW4gd2UgcHJldHR5IG11Y2ggY2xlYXIgdGhlbSBvdXQgYW5kIGRpc2FibGUgYWxsIElSUSBzb3VyY2VzLgorICoKKyAqIE5vdGU6IHRoZSBPU1MgaXMgYWN0dWFsbHkgImRldGVjdGVkIiBoZXJlIGFuZCBub3QgaW4gb3NzX2luaXQoKS4gSXQganVzdAorICoJIHNlZW1zIG1vcmUgbG9naWNhbCB0byBkbyBpdCBoZXJlIHNpbmNlIHZpYV9pbml0KCkgbmVlZHMgdG8ga25vdworICoJIHRoZXNlIHRoaW5ncyBhbnl3YXlzLgorICovCisKK3ZvaWQgX19pbml0IHZpYV9pbml0KHZvaWQpCit7CisJc3dpdGNoKG1hY2ludG9zaF9jb25maWctPnZpYV90eXBlKSB7CisKKwkJLyogSUljaSwgSUlzaSwgSUl2eCwgSUl2aSAoUDZ4eCksIExDIHNlcmllcyAqLworCisJCWNhc2UgTUFDX1ZJQV9JSWNpOgorCQkJdmlhMSA9ICh2b2lkICopIFZJQTFfQkFTRTsKKwkJCWlmIChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfSUlGWCkgeworCQkJCXZpYTIgPSBOVUxMOworCQkJCXJidl9wcmVzZW50ID0gMDsKKwkJCQlvc3NfcHJlc2VudCA9IDE7CisJCQl9IGVsc2UgeworCQkJCXZpYTIgPSAodm9pZCAqKSBSQlZfQkFTRTsKKwkJCQlyYnZfcHJlc2VudCA9IDE7CisJCQkJb3NzX3ByZXNlbnQgPSAwOworCQkJfQorCQkJaWYgKG1hY2ludG9zaF9jb25maWctPmlkZW50ID09IE1BQ19NT0RFTF9MQ0lJSSkgeworCQkJCXJidl9jbGVhciA9IDB4MDA7CisJCQl9IGVsc2UgeworCQkJCS8qIG9uIG1vc3QgUkJWcyAoJiB1bmxpa2UgdGhlIFZJQXMpLCB5b3UgICAqLworCQkJCS8qIG5lZWQgdG8gc2V0IGJpdCA3IHdoZW4geW91IHdyaXRlIHRvIElGUiAqLworCQkJCS8qIGluIG9yZGVyIGZvciB5b3VyIGNsZWFyIHRvIG9jY3VyLiAgICAgICAqLworCQkJCXJidl9jbGVhciA9IDB4ODA7CisJCQl9CisJCQlnSUVSID0gcklFUjsKKwkJCWdJRlIgPSBySUZSOworCQkJZ0J1ZkEgPSByU0lGUjsKKwkJCWdCdWZCID0gckJ1ZkI7CisJCQlicmVhazsKKworCQkvKiBRdWFkcmEgYW5kIGVhcmx5IE1hY0lJcyBhZ3JlZSBvbiB0aGUgVklBIGxvY2F0aW9ucyAqLworCisJCWNhc2UgTUFDX1ZJQV9RVUFEUkE6CisJCWNhc2UgTUFDX1ZJQV9JSToKKwkJCXZpYTEgPSAodm9pZCAqKSBWSUExX0JBU0U7CisJCQl2aWEyID0gKHZvaWQgKikgVklBMl9CQVNFOworCQkJcmJ2X3ByZXNlbnQgPSAwOworCQkJb3NzX3ByZXNlbnQgPSAwOworCQkJcmJ2X2NsZWFyID0gMHgwMDsKKwkJCWdJRVIgPSB2SUVSOworCQkJZ0lGUiA9IHZJRlI7CisJCQlnQnVmQSA9IHZCdWZBOworCQkJZ0J1ZkIgPSB2QnVmQjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcGFuaWMoIlVOS05PV04gVklBIFRZUEUiKTsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJWSUExIGF0ICVwIGlzIGEgNjUyMiBvciBjbG9uZVxuIiwgdmlhMSk7CisKKwlwcmludGsoS0VSTl9JTkZPICJWSUEyIGF0ICVwIGlzICIsIHZpYTIpOworCWlmIChyYnZfcHJlc2VudCkgeworCQlwcmludGsoS0VSTl9JTkZPICJhbiBSQlZcbiIpOworCX0gZWxzZSBpZiAob3NzX3ByZXNlbnQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiYW4gT1NTXG4iKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICJhIDY1MjIgb3IgY2xvbmVcbiIpOworCX0KKworI2lmZGVmIERFQlVHX1ZJQQorCXZpYV9kZWJ1Z19kdW1wKCk7CisjZW5kaWYKKworCS8qCisJICogU2h1dCBkb3duIGFsbCBJUlEgc291cmNlcywgcmVzZXQgdGhlIHRpbWVycywgYW5kCisJICoga2lsbCB0aGUgdGltZXIgbGF0Y2ggb24gVklBMS4KKwkgKi8KKworCXZpYTFbdklFUl0gPSAweDdGOworCXZpYTFbdklGUl0gPSAweDdGOworCXZpYTFbdlQxTExdID0gMDsKKwl2aWExW3ZUMUxIXSA9IDA7CisJdmlhMVt2VDFDTF0gPSAwOworCXZpYTFbdlQxQ0hdID0gMDsKKwl2aWExW3ZUMkNMXSA9IDA7CisJdmlhMVt2VDJDSF0gPSAwOworCXZpYTFbdkFDUl0gJj0gMHgzRjsKKworCS8qCisJICogU0UvMzA6IGRpc2FibGUgdmlkZW8gSVJRCisJICogWFhYOiB0ZXN0aW5nIGZvciBTRS8zMCBWQkwKKwkgKi8KKworCWlmIChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCA9PSBNQUNfTU9ERUxfU0UzMCkgeworCQl2aWExW3ZEaXJCXSB8PSAweDQwOworCQl2aWExW3ZCdWZCXSB8PSAweDQwOworCX0KKworCS8qCisJICogU2V0IHRoZSBSVEMgYml0cyB0byBhIGtub3duIHN0YXRlOiBhbGwgbGluZXMgdG8gb3V0cHV0cyBhbmQKKwkgKiBSVEMgZGlzYWJsZWQgKHllcyB0aGF0J3MgMCB0byBlbmFibGUgYW5kIDEgdG8gZGlzYWJsZSkuCisJICovCisKKwl2aWExW3ZEaXJCXSB8PSAoVklBMUJfdlJUQ0VuYiB8IFZJQTFCX3ZSVENDbGsgfCBWSUExQl92UlRDRGF0YSk7CisJdmlhMVt2QnVmQl0gfD0gKFZJQTFCX3ZSVENFbmIgfCBWSUExQl92UlRDQ2xrKTsKKworCS8qIEV2ZXJ5dGhpbmcgYmVsb3cgdGhpcyBwb2ludCBpcyBWSUEyL1JCViBvbmx5Li4uICovCisKKwlpZiAob3NzX3ByZXNlbnQpIHJldHVybjsKKworI2lmIDEKKwkvKiBTb21lIG1hY2hpbmVzIHN1cHBvcnQgYW4gYWx0ZXJuYXRlIElSUSBtYXBwaW5nIHRoYXQgc3ByZWFkcyAgKi8KKwkvKiBFdGhlcm5ldCBhbmQgU291bmQgb3V0IHRvIHRoZWlyIG93biBhdXRvbGV2ZWwgSVJRcyBhbmQgbW92ZXMgKi8KKwkvKiBWSUExIHRvIGxldmVsIDYuIEEvVVggdXNlcyB0aGlzIG1hcHBpbmcgYW5kIHdlIGRvIHRvby4gIE5vdGUgKi8KKwkvKiB0aGF0IHRoZSBJSWZ4IGVtdWxhdGVzIHRoaXMgYWx0ZXJuYXRlIG1hcHBpbmcgdXNpbmcgdGhlIE9TUy4gKi8KKworCXN3aXRjaChtYWNpbnRvc2hfY29uZmlnLT5pZGVudCkgeworCQljYXNlIE1BQ19NT0RFTF9DNjEwOgorCQljYXNlIE1BQ19NT0RFTF9RNjEwOgorCQljYXNlIE1BQ19NT0RFTF9DNjUwOgorCQljYXNlIE1BQ19NT0RFTF9RNjUwOgorCQljYXNlIE1BQ19NT0RFTF9RNzAwOgorCQljYXNlIE1BQ19NT0RFTF9RODAwOgorCQljYXNlIE1BQ19NT0RFTF9ROTAwOgorCQljYXNlIE1BQ19NT0RFTF9ROTUwOgorCQkJdmlhX2FsdF9tYXBwaW5nID0gMTsKKwkJCXZpYTFbdkRpckJdIHw9IDB4NDA7CisJCQl2aWExW3ZCdWZCXSAmPSB+MHg0MDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdmlhX2FsdF9tYXBwaW5nID0gMDsKKwkJCWJyZWFrOworCX0KKyNlbHNlCisJLyogVGhlIGFsZXJuYXRlIElSUSBtYXBwaW5nIHNlZW1zIHRvIGp1c3Qgbm90IHdvcmsuIEFueW9uZSB3aXRoIGEgICAqLworCS8qIHN1cHBvcnRlZCBtYWNoaW5lIGlzIHdlbGNvbWUgdG8gdGFrZSBhIHN0YWIgYXQgZml4aW5nIGl0LiBJdCAgICAgKi8KKwkvKiBfc2hvdWxkXyB3b3JrIG9uIHRoZSBmb2xsb3dpbmcgUXVhZHJhczogNjEwLDY1MCw3MDAsODAwLDkwMCw5NTAgICovCisJLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMTk5OS0wNi0xMiAoam10KSAqLworCisJdmlhX2FsdF9tYXBwaW5nID0gMDsKKyNlbmRpZgorCisJLyoKKwkgKiBOb3cgaW5pdGlhbGl6ZSBWSUEyLiBGb3IgUkJWIHdlIGp1c3Qga2lsbCBhbGwgaW50ZXJydXB0czsKKwkgKiBmb3IgYSByZWd1bGFyIFZJQSB3ZSBhbHNvIHJlc2V0IHRoZSB0aW1lcnMgYW5kIHN0dWZmLgorCSAqLworCisJdmlhMltnSUVSXSA9IDB4N0Y7CisJdmlhMltnSUZSXSA9IDB4N0YgfCByYnZfY2xlYXI7CisJaWYgKCFyYnZfcHJlc2VudCkgeworCQl2aWEyW3ZUMUxMXSA9IDA7CisJCXZpYTJbdlQxTEhdID0gMDsKKwkJdmlhMlt2VDFDTF0gPSAwOworCQl2aWEyW3ZUMUNIXSA9IDA7CisJCXZpYTJbdlQyQ0xdID0gMDsKKwkJdmlhMlt2VDJDSF0gPSAwOworCQl2aWEyW3ZBQ1JdICY9IDB4M0Y7CisJfQorfQorCisvKgorICogU3RhcnQgdGhlIDEwMCBIeiBjbG9jaworICovCisKK3ZvaWQgX19pbml0IHZpYV9pbml0X2Nsb2NrKGlycXJldHVybl90ICgqZnVuYykoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopKQoreworCXZpYTFbdkFDUl0gfD0gMHg0MDsKKwl2aWExW3ZUMUxMXSA9IE1BQ19DTE9DS19MT1c7CisJdmlhMVt2VDFMSF0gPSBNQUNfQ0xPQ0tfSElHSDsKKwl2aWExW3ZUMUNMXSA9IE1BQ19DTE9DS19MT1c7CisJdmlhMVt2VDFDSF0gPSBNQUNfQ0xPQ0tfSElHSDsKKworCXJlcXVlc3RfaXJxKElSUV9NQUNfVElNRVJfMSwgZnVuYywgSVJRX0ZMR19MT0NLLCAidGltZXIiLCBmdW5jKTsKK30KKworLyoKKyAqIFJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgZGlzcGF0Y2hlcnMgZm9yIFZJQSBvciBSQlYgbWFjaGluZXMgb25seS4KKyAqLworCit2b2lkIF9faW5pdCB2aWFfcmVnaXN0ZXJfaW50ZXJydXB0cyh2b2lkKQoreworCWlmICh2aWFfYWx0X21hcHBpbmcpIHsKKwkJY3B1X3JlcXVlc3RfaXJxKElSUV9BVVRPXzEsIHZpYTFfaXJxLAorCQkJCUlSUV9GTEdfTE9DS3xJUlFfRkxHX0ZBU1QsICJzb2Z0d2FyZSIsCisJCQkJKHZvaWQgKikgdmlhMSk7CisJCWNwdV9yZXF1ZXN0X2lycShJUlFfQVVUT182LCB2aWExX2lycSwKKwkJCQlJUlFfRkxHX0xPQ0t8SVJRX0ZMR19GQVNULCAidmlhMSIsCisJCQkJKHZvaWQgKikgdmlhMSk7CisJfSBlbHNlIHsKKwkJY3B1X3JlcXVlc3RfaXJxKElSUV9BVVRPXzEsIHZpYTFfaXJxLAorCQkJCUlSUV9GTEdfTE9DS3xJUlFfRkxHX0ZBU1QsICJ2aWExIiwKKwkJCQkodm9pZCAqKSB2aWExKTsKKyNpZiAwIC8qIGludGVyZmVyZXMgd2l0aCBzZXJpYWwgb24gc29tZSBtYWNoaW5lcyAqLworCQlpZiAoIXBzY19wcmVzZW50KSB7CisJCQljcHVfcmVxdWVzdF9pcnEoSVJRX0FVVE9fNiwgbWFjX2JhbmcsIElSUV9GTEdfTE9DSywKKwkJCQkJIk9mZiBTd2l0Y2giLCBtYWNfYmFuZyk7CisJCX0KKyNlbmRpZgorCX0KKwljcHVfcmVxdWVzdF9pcnEoSVJRX0FVVE9fMiwgdmlhMl9pcnEsIElSUV9GTEdfTE9DS3xJUlFfRkxHX0ZBU1QsCisJCQkidmlhMiIsICh2b2lkICopIHZpYTIpOworCWlmICghcHNjX3ByZXNlbnQpIHsKKwkJY3B1X3JlcXVlc3RfaXJxKElSUV9BVVRPXzQsIG1hY19zY2NfZGlzcGF0Y2gsIElSUV9GTEdfTE9DSywKKwkJCQkic2NjIiwgbWFjX3NjY19kaXNwYXRjaCk7CisJfQorCXJlcXVlc3RfaXJxKElSUV9NQUNfTlVCVVMsIHZpYV9udWJ1c19pcnEsIElSUV9GTEdfTE9DS3xJUlFfRkxHX0ZBU1QsCisJCQkibnVidXMiLCAodm9pZCAqKSB2aWEyKTsKK30KKworLyoKKyAqIERlYnVnZ2luZyBkdW1wLCB1c2VkIGluIHZhcmlvdXMgcGxhY2VzIHRvIHNlZSB3aGF0J3MgZ29pbmcgb24uCisgKi8KKwordm9pZCB2aWFfZGVidWdfZHVtcCh2b2lkKQoreworCXByaW50ayhLRVJOX0RFQlVHICJWSUExOiBERFJBID0gMHglMDJYIEREUkIgPSAweCUwMlggQUNSID0gMHglMDJYXG4iLAorCQkodWludCkgdmlhMVt2RGlyQV0sICh1aW50KSB2aWExW3ZEaXJCXSwgKHVpbnQpIHZpYTFbdkFDUl0pOworCXByaW50ayhLRVJOX0RFQlVHICIgICAgICAgICBQQ1IgPSAweCUwMlggIElGUiA9IDB4JTAyWCBJRVIgPSAweCUwMlhcbiIsCisJCSh1aW50KSB2aWExW3ZQQ1JdLCAodWludCkgdmlhMVt2SUZSXSwgKHVpbnQpIHZpYTFbdklFUl0pOworCWlmIChvc3NfcHJlc2VudCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiVklBMjogPE9TUz5cbiIpOworCX0gZWxzZSBpZiAocmJ2X3ByZXNlbnQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlZJQTI6ICBJRlIgPSAweCUwMlggIElFUiA9IDB4JTAyWFxuIiwKKwkJCSh1aW50KSB2aWEyW3JJRlJdLCAodWludCkgdmlhMltySUVSXSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIgICAgICBTSUZSID0gMHglMDJYIFNJRVIgPSAweCUwMlhcbiIsCisJCQkodWludCkgdmlhMltyU0lGUl0sICh1aW50KSB2aWEyW3JTSUVSXSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlZJQTI6IEREUkEgPSAweCUwMlggRERSQiA9IDB4JTAyWCBBQ1IgPSAweCUwMlhcbiIsCisJCQkodWludCkgdmlhMlt2RGlyQV0sICh1aW50KSB2aWEyW3ZEaXJCXSwKKwkJCSh1aW50KSB2aWEyW3ZBQ1JdKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAgICAgICAgIFBDUiA9IDB4JTAyWCAgSUZSID0gMHglMDJYIElFUiA9IDB4JTAyWFxuIiwKKwkJCSh1aW50KSB2aWEyW3ZQQ1JdLAorCQkJKHVpbnQpIHZpYTJbdklGUl0sICh1aW50KSB2aWEyW3ZJRVJdKTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGlzIGFsd2F5cyBleGVjdXRlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKgorICogVEJJOiBnZXQgdGltZSBvZmZzZXQgYmV0d2VlbiBzY2hlZHVsaW5nIHRpbWVyIHRpY2tzCisgKi8KKwordW5zaWduZWQgbG9uZyBtYWNfZ2V0dGltZW9mZnNldCAodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRpY2tzLCBvZmZzZXQgPSAwOworCisJLyogcmVhZCBWSUExIHRpbWVyIDIgY3VycmVudCB2YWx1ZSAqLworCXRpY2tzID0gdmlhMVt2VDFDTF0gfCAodmlhMVt2VDFDSF0gPDwgOCk7CisJLyogVGhlIHByb2JhYmlsaXR5IG9mIHVuZGVyZmxvdyBpcyBsZXNzIHRoYW4gMiUgKi8KKwlpZiAodGlja3MgPiBNQUNfQ0xPQ0tfVElDSyAtIE1BQ19DTE9DS19USUNLIC8gNTApCisJCS8qIENoZWNrIGZvciBwZW5kaW5nIHRpbWVyIGludGVycnVwdCBpbiBWSUExIElGUiAqLworCQlpZiAodmlhMVt2SUZSXSAmIDB4NDApIG9mZnNldCA9IFRJQ0tfU0laRTsKKworCXRpY2tzID0gTUFDX0NMT0NLX1RJQ0sgLSB0aWNrczsKKwl0aWNrcyA9IHRpY2tzICogMTAwMDBMIC8gTUFDX0NMT0NLX1RJQ0s7CisKKwlyZXR1cm4gdGlja3MgKyBvZmZzZXQ7Cit9CisKKy8qCisgKiBGbHVzaCB0aGUgTDIgY2FjaGUgb24gTWFjcyB0aGF0IGhhdmUgaXQgYnkgZmxpcHBpbmcKKyAqIHRoZSBzeXN0ZW0gaW50byAyNC1iaXQgbW9kZSBmb3IgYW4gaW5zdGFudC4KKyAqLworCit2b2lkIHZpYV9mbHVzaF9jYWNoZSh2b2lkKQoreworCXZpYTJbZ0J1ZkJdICY9IH5WSUEyQl92TW9kZTMyOworCXZpYTJbZ0J1ZkJdIHw9IFZJQTJCX3ZNb2RlMzI7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgTDIgY2FjaGUgb24gYSBJSWNpCisgKi8KKworaW50IHZpYV9nZXRfY2FjaGVfZGlzYWJsZSh2b2lkKQoreworCS8qIFNhZmVndWFyZCBhZ2FpbnN0IGJlaW5nIGNhbGxlZCBhY2NpZGVudGFsbHkgKi8KKwlpZiAoIXZpYTIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2aWFfZ2V0X2NhY2hlX2Rpc2FibGUgY2FsbGVkIG9uIGEgbm9uLVZJQSBtYWNoaW5lIVxuIik7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAoaW50KSB2aWEyW2dCdWZCXSAmIFZJQTJCX3ZDRGlzOworfQorCisvKgorICogSW5pdGlhbGl6ZSBWSUEyIGZvciBOdWJ1cyBhY2Nlc3MKKyAqLworCit2b2lkIF9faW5pdCB2aWFfbnVidXNfaW5pdCh2b2lkKQoreworCS8qIGRvbid0IHNldCBudWJ1c19hY3RpdmUgPSAwIGhlcmUsIGl0IGtpbGxzIHRoZSBCYWJvb24gKi8KKwkvKiBpbnRlcnJ1cHQgdGhhdCB3ZSd2ZSBhbHJlYWR5IHJlZ2lzdGVyZWQuCQkqLworCisJLyogdW5sb2NrIG51YnVzIHRyYW5zYWN0aW9ucyAqLworCisJaWYgKCFyYnZfcHJlc2VudCkgeworCQkvKiBzZXQgdGhlIGxpbmUgdG8gYmUgYW4gb3V0cHV0IG9uIG5vbi1SQlYgbWFjaGluZXMgKi8KKwkJaWYgKChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSAhPSBNQUNfQURCX1BCMSkgJiYKKwkJICAgKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlICE9IE1BQ19BREJfUEIyKSkgeworCQkJdmlhMlt2RGlyQl0gfD0gMHgwMjsKKwkJfQorCX0KKworCS8qIHRoaXMgc2VlbXMgdG8gYmUgYW4gQURCIGJpdCBvbiBQTVUgbWFjaGluZXMgKi8KKwkvKiBhY2NvcmRpbmcgdG8gTWtMaW51eC4gIC0tIGptdCAgICAgICAgICAgICAgICovCisKKwlpZiAoKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlICE9IE1BQ19BREJfUEIxKSAmJgorCSAgICAobWFjaW50b3NoX2NvbmZpZy0+YWRiX3R5cGUgIT0gTUFDX0FEQl9QQjIpKSB7CisJCXZpYTJbZ0J1ZkJdIHw9IDB4MDI7CisJfQorCisJLyogZGlzYWJsZSBudWJ1cyBzbG90IGludGVycnVwdHMuICovCisJaWYgKHJidl9wcmVzZW50KSB7CisJCXZpYTJbclNJRVJdID0gMHg3RjsKKwkJdmlhMltyU0lFUl0gPSBudWJ1c19hY3RpdmUgfCAweDgwOworCX0gZWxzZSB7CisJCS8qIFRoZXNlIGFyZSBBREIgYml0cyBvbiBQTVUgKi8KKwkJaWYgKChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSAhPSBNQUNfQURCX1BCMSkgJiYKKwkJICAgKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlICE9IE1BQ19BREJfUEIyKSkgeworCQkJc3dpdGNoKG1hY2ludG9zaF9jb25maWctPmlkZW50KQorCQkJeworCQkJCWNhc2UgTUFDX01PREVMX0lJOgorCQkJCWNhc2UgTUFDX01PREVMX0lJWDoKKwkJCQljYXNlIE1BQ19NT0RFTF9JSUNYOgorCQkJCWNhc2UgTUFDX01PREVMX1NFMzA6CisJCQkJCXZpYTJbdkJ1ZkFdIHw9IDB4M0Y7CisJCQkJCXZpYTJbdkRpckFdID0gfm51YnVzX2FjdGl2ZSB8IDB4YzA7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCXZpYTJbdkJ1ZkFdID0gMHhGRjsKKwkJCQkJdmlhMlt2RGlyQV0gPSB+bnVidXNfYWN0aXZlOworCQkJfQorCQl9CisJfQorfQorCisvKgorICogVGhlIGdlbmVyaWMgVklBIGludGVycnVwdCByb3V0aW5lcyAoc2hhbWVsZXNzbHkgc3RvbGVuIGZyb20gQWxhbiBDb3gncworICogdmlhNjUyMi5jIDotKSwgZGlzYWJsZS9wZW5kaW5nIG1hc2tzIGFkZGVkLgorICoKKyAqIFRoZSBuZXcgaW50ZXJydXB0IGFyY2hpdGVjdHVyZSBpbiBtYWNpbnRzLmMgdGFrZXMgY2FyZSBvZiBhIGxvdCBvZiB0aGUKKyAqIGdydW50d29yayBmb3IgdXMsIGluY2x1ZGluZyB0YWxseWluZyB0aGUgaW50ZXJydXB0cyBhbmQgY2FsbGluZyB0aGUKKyAqIGhhbmRsZXJzIG9uIHRoZSBsaW5rZWQgbGlzdC4gQWxsIHdlIG5lZWQgdG8gZG8gaGVyZSBpcyBiYXNpY2FsbHkgZ2VuZXJhdGUKKyAqIHRoZSBtYWNoc3BlYyBpbnRlcnJ1cHQgbnVtYmVyIGFmdGVyIGNsZWFyaW5nIHRoZSBpbnRlcnJ1cHQuCisgKi8KKworaXJxcmV0dXJuX3QgdmlhMV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgaXJxX2JpdCwgaTsKKwl1bnNpZ25lZCBjaGFyIGV2ZW50cywgbWFzazsKKworCW1hc2sgPSB2aWExW3ZJRVJdICYgMHg3RjsKKwlpZiAoIShldmVudHMgPSB2aWExW3ZJRlJdICYgbWFzaykpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWZvciAoaSA9IDAsIGlycV9iaXQgPSAxIDsgaSA8IDcgOyBpKyssIGlycV9iaXQgPDw9IDEpCisJCWlmIChldmVudHMgJiBpcnFfYml0KSB7CisJCQl2aWExW3ZJRVJdID0gaXJxX2JpdDsKKwkJCW1hY19kb19pcnFfbGlzdChWSUExX1NPVVJDRV9CQVNFICsgaSwgcmVncyk7CisJCQl2aWExW3ZJRlJdID0gaXJxX2JpdDsKKwkJCXZpYTFbdklFUl0gPSBpcnFfYml0IHwgMHg4MDsKKwkJfQorCisjaWYgMCAvKiBmcmVha2luJyBwbXUgaXMgZG9pbmcgd2VpcmQgc3R1ZmYgKi8KKwlpZiAoIW9zc19wcmVzZW50KSB7CisJCS8qIFRoaXMgKHN0aWxsKSBzZWVtcyB0byBiZSBuZWNlc3NhcnkgdG8gZ2V0IElERQorCQkgICB3b3JraW5nLiAgSG93ZXZlciwgaWYgeW91IGVuYWJsZSBWQkwgaW50ZXJydXB0cywKKwkJICAgeW91J3JlIHNjcmV3ZWQuLi4gKi8KKwkJLyogRklYTUU6IHNob3VsZCB3ZSBjaGVjayB0aGUgU0xPVElSUSBiaXQgYmVmb3JlCisgICAgICAgICAgICAgICAgICAgcHVsbGluZyB0aGlzIHN0dW50PyAqLworCQkvKiBObywgaXQgd29uJ3QgYmUgc2V0LiB0aGF0J3Mgd2h5IHdlJ3JlIGRvaW5nIHRoaXMuICovCisJCXZpYV9pcnFfZGlzYWJsZShJUlFfTUFDX05VQlVTKTsKKwkJdmlhX2lycV9jbGVhcihJUlFfTUFDX05VQlVTKTsKKwkJbWFjX2RvX2lycV9saXN0KElSUV9NQUNfTlVCVVMsIHJlZ3MpOworCQl2aWFfaXJxX2VuYWJsZShJUlFfTUFDX05VQlVTKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK2lycXJldHVybl90IHZpYTJfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGlycV9iaXQsIGk7CisJdW5zaWduZWQgY2hhciBldmVudHMsIG1hc2s7CisKKwltYXNrID0gdmlhMltnSUVSXSAmIDB4N0Y7CisJaWYgKCEoZXZlbnRzID0gdmlhMltnSUZSXSAmIG1hc2spKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlmb3IgKGkgPSAwLCBpcnFfYml0ID0gMSA7IGkgPCA3IDsgaSsrLCBpcnFfYml0IDw8PSAxKQorCQlpZiAoZXZlbnRzICYgaXJxX2JpdCkgeworCQkJdmlhMltnSUVSXSA9IGlycV9iaXQ7CisJCQltYWNfZG9faXJxX2xpc3QoVklBMl9TT1VSQ0VfQkFTRSArIGksIHJlZ3MpOworCQkJdmlhMltnSUZSXSA9IGlycV9iaXQgfCByYnZfY2xlYXI7CisJCQl2aWEyW2dJRVJdID0gaXJxX2JpdCB8IDB4ODA7CisJCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBEaXNwYXRjaCBOdWJ1cyBpbnRlcnJ1cHRzLiBXZSBhcmUgY2FsbGVkIGFzIGEgc2Vjb25kYXJ5IGRpc3BhdGNoIGJ5IHRoZQorICogVklBMiBkaXNwYXRjaGVyIGFzIGEgZmFzdCBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqLworCitpcnFyZXR1cm5fdCB2aWFfbnVidXNfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGlycV9iaXQsIGk7CisJdW5zaWduZWQgY2hhciBldmVudHM7CisKKwlpZiAoIShldmVudHMgPSB+dmlhMltnQnVmQV0gJiBudWJ1c19hY3RpdmUpKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlmb3IgKGkgPSAwLCBpcnFfYml0ID0gMSA7IGkgPCA3IDsgaSsrLCBpcnFfYml0IDw8PSAxKSB7CisJCWlmIChldmVudHMgJiBpcnFfYml0KSB7CisJCQl2aWFfaXJxX2Rpc2FibGUoTlVCVVNfU09VUkNFX0JBU0UgKyBpKTsKKwkJCW1hY19kb19pcnFfbGlzdChOVUJVU19TT1VSQ0VfQkFTRSArIGksIHJlZ3MpOworCQkJdmlhX2lycV9lbmFibGUoTlVCVVNfU09VUkNFX0JBU0UgKyBpKTsKKwkJfQorCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3ZvaWQgdmlhX2lycV9lbmFibGUoaW50IGlycSkgeworCWludCBpcnFfc3JjCT0gSVJRX1NSQyhpcnEpOworCWludCBpcnFfaWR4CT0gSVJRX0lEWChpcnEpOworCWludCBpcnFfYml0CT0gMSA8PCBpcnFfaWR4OworCisjaWZkZWYgREVCVUdfSVJRVVNFCisJcHJpbnRrKEtFUk5fREVCVUcgInZpYV9pcnFfZW5hYmxlKCVkKVxuIiwgaXJxKTsKKyNlbmRpZgorCisJaWYgKGlycV9zcmMgPT0gMSkgeworCQl2aWExW3ZJRVJdID0gaXJxX2JpdCB8IDB4ODA7CisJfSBlbHNlIGlmIChpcnFfc3JjID09IDIpIHsKKwkJLyoKKwkJICogU2V0IHZQQ1IgZm9yIFNDU0kgaW50ZXJydXB0cyAoYnV0IG5vdCBvbiBSQlYpCisJCSAqLworCQlpZiAoKGlycV9pZHggPT0gMCkgJiYgIXJidl9wcmVzZW50KSB7CisJCQlpZiAobWFjaW50b3NoX2NvbmZpZy0+c2NzaV90eXBlID09IE1BQ19TQ1NJX09MRCkgeworCQkJCS8qIENCMiAoSVJRKSBpbmRlcC4gaW5wdXQsIHBvc2l0aXZlIGVkZ2UgKi8KKwkJCQkvKiBDQTIgKERSUSkgaW5kZXAuIGlucHV0LCBwb3NpdGl2ZSBlZGdlICovCisJCQkJdmlhMlt2UENSXSA9IDB4NjY7CisJCQl9IGVsc2UgeworCQkJCS8qIENCMiAoSVJRKSBpbmRlcC4gaW5wdXQsIG5lZ2F0aXZlIGVkZ2UgKi8KKwkJCQkvKiBDQTIgKERSUSkgaW5kZXAuIGlucHV0LCBuZWdhdGl2ZSBlZGdlICovCisJCQkJdmlhMlt2UENSXSA9IDB4MjI7CisJCQl9CisJCX0KKwkJdmlhMltnSUVSXSA9IGlycV9iaXQgfCAweDgwOworCX0gZWxzZSBpZiAoaXJxX3NyYyA9PSA3KSB7CisJCWlmIChyYnZfcHJlc2VudCkgeworCQkJLyogZW5hYmxlIHRoZSBzbG90IGludGVycnVwdC4gU0lFUiB3b3JrcyBsaWtlIElFUi4gKi8KKwkJCXZpYTJbclNJRVJdID0gSUVSX1NFVF9CSVQoaXJxX2lkeCk7CisJCX0gZWxzZSB7CisJCQkvKiBNYWtlIHN1cmUgdGhlIGJpdCBpcyBhbiBpbnB1dCwgdG8gZW5hYmxlIHRoZSBpcnEgKi8KKwkJCS8qIEJ1dCBub3Qgb24gUG93ZXJCb29rcywgdGhhdCdzIEFEQi4uLiAqLworCQkJaWYgKChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSAhPSBNQUNfQURCX1BCMSkgJiYKKwkJCSAgIChtYWNpbnRvc2hfY29uZmlnLT5hZGJfdHlwZSAhPSBNQUNfQURCX1BCMikpIHsKKwkJCQlzd2l0Y2gobWFjaW50b3NoX2NvbmZpZy0+aWRlbnQpCisJCQkJeworCQkJCQljYXNlIE1BQ19NT0RFTF9JSToKKwkJCQkJY2FzZSBNQUNfTU9ERUxfSUlYOgorCQkJCQljYXNlIE1BQ19NT0RFTF9JSUNYOgorCQkJCQljYXNlIE1BQ19NT0RFTF9TRTMwOgorCQkJCQkJdmlhMlt2RGlyQV0gJj0gKH5pcnFfYml0IHwgMHhjMCk7CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCXZpYTJbdkRpckFdICY9IH5pcnFfYml0OworCQkJCX0KKwkJCX0KKwkJfQorCQludWJ1c19hY3RpdmUgfD0gaXJxX2JpdDsKKwl9Cit9CisKK3ZvaWQgdmlhX2lycV9kaXNhYmxlKGludCBpcnEpIHsKKwlpbnQgaXJxX3NyYwk9IElSUV9TUkMoaXJxKTsKKwlpbnQgaXJxX2lkeAk9IElSUV9JRFgoaXJxKTsKKwlpbnQgaXJxX2JpdAk9IDEgPDwgaXJxX2lkeDsKKworI2lmZGVmIERFQlVHX0lSUVVTRQorCXByaW50ayhLRVJOX0RFQlVHICJ2aWFfaXJxX2Rpc2FibGUoJWQpXG4iLCBpcnEpOworI2VuZGlmCisKKwlpZiAoaXJxX3NyYyA9PSAxKSB7CisJCXZpYTFbdklFUl0gPSBpcnFfYml0OworCX0gZWxzZSBpZiAoaXJxX3NyYyA9PSAyKSB7CisJCXZpYTJbZ0lFUl0gPSBpcnFfYml0OworCX0gZWxzZSBpZiAoaXJxX3NyYyA9PSA3KSB7CisJCWlmIChyYnZfcHJlc2VudCkgeworCQkJLyogZGlzYWJsZSB0aGUgc2xvdCBpbnRlcnJ1cHQuICBTSUVSIHdvcmtzIGxpa2UgSUVSLiAqLworCQkJdmlhMltyU0lFUl0gPSBJRVJfQ0xSX0JJVChpcnFfaWR4KTsKKwkJfSBlbHNlIHsKKwkJCS8qIGRpc2FibGUgdGhlIG51YnVzIGlycSBieSBjaGFuZ2luZyBkaXIgdG8gb3V0cHV0ICovCisJCQkvKiBleGNlcHQgb24gUE1VICovCisJCQlpZiAoKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlICE9IE1BQ19BREJfUEIxKSAmJgorCQkJICAgKG1hY2ludG9zaF9jb25maWctPmFkYl90eXBlICE9IE1BQ19BREJfUEIyKSkgeworCQkJCXZpYTJbdkRpckFdIHw9IGlycV9iaXQ7CisJCQl9CisJCX0KKwkJbnVidXNfYWN0aXZlICY9IH5pcnFfYml0OworCX0KK30KKwordm9pZCB2aWFfaXJxX2NsZWFyKGludCBpcnEpIHsKKwlpbnQgaXJxX3NyYwk9IElSUV9TUkMoaXJxKTsKKwlpbnQgaXJxX2lkeAk9IElSUV9JRFgoaXJxKTsKKwlpbnQgaXJxX2JpdAk9IDEgPDwgaXJxX2lkeDsKKworCWlmIChpcnFfc3JjID09IDEpIHsKKwkJdmlhMVt2SUZSXSA9IGlycV9iaXQ7CisJfSBlbHNlIGlmIChpcnFfc3JjID09IDIpIHsKKwkJdmlhMltnSUZSXSA9IGlycV9iaXQgfCByYnZfY2xlYXI7CisJfSBlbHNlIGlmIChpcnFfc3JjID09IDcpIHsKKwkJLyogRklYTUU6IGhtbS4uICovCisJfQorfQorCisvKgorICogUmV0dXJucyBub256ZXJvIGlmIGFuIGludGVycnVwdCBpcyBwZW5kaW5nIG9uIHRoZSBnaXZlbgorICogVklBL0lSUSBjb21iaW5hdGlvbi4KKyAqLworCitpbnQgdmlhX2lycV9wZW5kaW5nKGludCBpcnEpCit7CisJaW50IGlycV9zcmMJPSBJUlFfU1JDKGlycSk7CisJaW50IGlycV9pZHgJPSBJUlFfSURYKGlycSk7CisJaW50IGlycV9iaXQJPSAxIDw8IGlycV9pZHg7CisKKwlpZiAoaXJxX3NyYyA9PSAxKSB7CisJCXJldHVybiB2aWExW3ZJRlJdICYgaXJxX2JpdDsKKwl9IGVsc2UgaWYgKGlycV9zcmMgPT0gMikgeworCQlyZXR1cm4gdmlhMltnSUZSXSAmIGlycV9iaXQ7CisJfSBlbHNlIGlmIChpcnFfc3JjID09IDcpIHsKKwkJcmV0dXJuIH52aWEyW2dCdWZBXSAmIGlycV9iaXQ7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hdGgtZW11L01ha2VmaWxlIGIvYXJjaC9tNjhrL21hdGgtZW11L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzOTk0MDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbWF0aC1lbXUvTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KKyMKKworRVhUUkFfQUZMQUdTIDo9IC10cmFkaXRpb25hbAorCisjRVhUUkFfQUZMQUdTICs9IC1ERlBVX0VNVV9ERUJVRworI0VYVFJBX0NGTEFHUyArPSAtREZQVV9FTVVfREVCVUcKKworb2JqLXkJCTo9IGZwX2VudHJ5Lm8gZnBfc2Nhbi5vIGZwX3V0aWwubyBmcF9tb3ZlLm8gZnBfbW92ZW0ubyBcCisJCQlmcF9jb25kLm8gZnBfYXJpdGgubyBmcF9sb2cubyBmcF90cmlnLm8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9hcml0aC5jIGIvYXJjaC9tNjhrL21hdGgtZW11L2ZwX2FyaXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhmMjg2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9hcml0aC5jCkBAIC0wLDAgKzEsNzAxIEBACisvKgorCisgICBmcF9hcml0aC5jOiBmbG9hdGluZy1wb2ludCBtYXRoIHJvdXRpbmVzIGZvciB0aGUgTGludXgtbTY4aworICAgZmxvYXRpbmcgcG9pbnQgZW11bGF0b3IuCisKKyAgIENvcHlyaWdodCAoYykgMTk5OC0xOTk5IERhdmlkIEh1Z2dpbnMtRGFpbmVzLgorCisgICBTb21ld2hhdCBiYXNlZCBvbiB0aGUgQWxwaGFMaW51eCBmbG9hdGluZyBwb2ludCBlbXVsYXRvciwgYnkgRGF2aWQKKyAgIE1vc2Jlcmdlci1UYW5nLgorCisgICBZb3UgbWF5IGNvcHksIG1vZGlmeSwgYW5kIHJlZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mCisgICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgb3IgYW55IGxhdGVyIHZlcnNpb24sIGF0CisgICB5b3VyIGNvbnZlbmllbmNlLgorICovCisKKyNpbmNsdWRlICJmcF9lbXUuaCIKKyNpbmNsdWRlICJtdWx0aV9hcml0aC5oIgorI2luY2x1ZGUgImZwX2FyaXRoLmgiCisKK2NvbnN0IHN0cnVjdCBmcF9leHQgZnBfUU5hTiA9Cit7CisJLmV4cCA9IDB4N2ZmZiwKKwkubWFudCA9IHsgLm02NCA9IH4wIH0KK307CisKK2NvbnN0IHN0cnVjdCBmcF9leHQgZnBfSW5mID0KK3sKKwkuZXhwID0gMHg3ZmZmLAorfTsKKworLyogbGV0J3Mgc3RhcnQgd2l0aCB0aGUgZWFzeSBvbmVzICovCisKK3N0cnVjdCBmcF9leHQgKgorZnBfZmFicyhzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJZHByaW50KFBJTlNUUiwgImZhYnNcbiIpOworCisJZnBfbW9uYWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJZGVzdC0+c2lnbiA9IDA7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mbmVnKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwlkcHJpbnQoUElOU1RSLCAiZm5lZ1xuIik7CisKKwlmcF9tb25hZGljX2NoZWNrKGRlc3QsIHNyYyk7CisKKwlkZXN0LT5zaWduID0gIWRlc3QtPnNpZ247CisKKwlyZXR1cm4gZGVzdDsKK30KKworLyogTm93LCB0aGUgc2xpZ2h0bHkgaGFyZGVyIG9uZXMgKi8KKworLyogZnBfZmFkZDogSW1wbGVtZW50cyB0aGUga2VybmVsIG9mIHRoZSBGQURELCBGU0FERCwgRkRBREQsIEZTVUIsCisgICBGRFNVQiwgYW5kIEZDTVAgaW5zdHJ1Y3Rpb25zLiAqLworCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZhZGQoc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCWludCBkaWZmOworCisJZHByaW50KFBJTlNUUiwgImZhZGRcbiIpOworCisJZnBfZHlhZGljX2NoZWNrKGRlc3QsIHNyYyk7CisKKwlpZiAoSVNfSU5GKGRlc3QpKSB7CisJCS8qIGluZmluaXR5IC0gaW5maW5pdHkgPT0gTmFOICovCisJCWlmIChJU19JTkYoc3JjKSAmJiAoc3JjLT5zaWduICE9IGRlc3QtPnNpZ24pKQorCQkJZnBfc2V0X25hbihkZXN0KTsKKwkJcmV0dXJuIGRlc3Q7CisJfQorCWlmIChJU19JTkYoc3JjKSkgeworCQlmcF9jb3B5X2V4dChkZXN0LCBzcmMpOworCQlyZXR1cm4gZGVzdDsKKwl9CisKKwlpZiAoSVNfWkVSTyhkZXN0KSkgeworCQlpZiAoSVNfWkVSTyhzcmMpKSB7CisJCQlpZiAoc3JjLT5zaWduICE9IGRlc3QtPnNpZ24pIHsKKwkJCQlpZiAoRlBEQVRBLT5ybmQgPT0gRlBDUl9ST1VORF9STSkKKwkJCQkJZGVzdC0+c2lnbiA9IDE7CisJCQkJZWxzZQorCQkJCQlkZXN0LT5zaWduID0gMDsKKwkJCX0KKwkJfSBlbHNlCisJCQlmcF9jb3B5X2V4dChkZXN0LCBzcmMpOworCQlyZXR1cm4gZGVzdDsKKwl9CisKKwlkZXN0LT5sb3dtYW50ID0gc3JjLT5sb3dtYW50ID0gMDsKKworCWlmICgoZGlmZiA9IGRlc3QtPmV4cCAtIHNyYy0+ZXhwKSA+IDApCisJCWZwX2Rlbm9ybWFsaXplKHNyYywgZGlmZik7CisJZWxzZSBpZiAoKGRpZmYgPSAtZGlmZikgPiAwKQorCQlmcF9kZW5vcm1hbGl6ZShkZXN0LCBkaWZmKTsKKworCWlmIChkZXN0LT5zaWduID09IHNyYy0+c2lnbikgeworCQlpZiAoZnBfYWRkbWFudChkZXN0LCBzcmMpKQorCQkJaWYgKCFmcF9hZGRjYXJyeShkZXN0KSkKKwkJCQlyZXR1cm4gZGVzdDsKKwl9IGVsc2UgeworCQlpZiAoZGVzdC0+bWFudC5tNjQgPCBzcmMtPm1hbnQubTY0KSB7CisJCQlmcF9zdWJtYW50KGRlc3QsIHNyYywgZGVzdCk7CisJCQlkZXN0LT5zaWduID0gIWRlc3QtPnNpZ247CisJCX0gZWxzZQorCQkJZnBfc3VibWFudChkZXN0LCBkZXN0LCBzcmMpOworCX0KKworCXJldHVybiBkZXN0OworfQorCisvKiBmcF9mc3ViOiBJbXBsZW1lbnRzIHRoZSBrZXJuZWwgb2YgdGhlIEZTVUIsIEZTU1VCLCBhbmQgRkRTVUIKKyAgIGluc3RydWN0aW9ucy4KKworICAgUmVtZW1iZXIgdGhhdCB0aGUgYXJndW1lbnRzIGFyZSBpbiBhc3NlbWJsZXItc3ludGF4IG9yZGVyISAqLworCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZzdWIoc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCWRwcmludChQSU5TVFIsICJmc3ViICIpOworCisJc3JjLT5zaWduID0gIXNyYy0+c2lnbjsKKwlyZXR1cm4gZnBfZmFkZChkZXN0LCBzcmMpOworfQorCisKK3N0cnVjdCBmcF9leHQgKgorZnBfZmNtcChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJZHByaW50KFBJTlNUUiwgImZjbXAgIik7CisKKwlGUERBVEEtPnRlbXBbMV0gPSAqZGVzdDsKKwlzcmMtPnNpZ24gPSAhc3JjLT5zaWduOworCXJldHVybiBmcF9mYWRkKCZGUERBVEEtPnRlbXBbMV0sIHNyYyk7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZnRzdChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJZHByaW50KFBJTlNUUiwgImZ0c3RcbiIpOworCisJKHZvaWQpZGVzdDsKKworCXJldHVybiBzcmM7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZm11bChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdW5pb24gZnBfbWFudDEyOCB0ZW1wOworCWludCBleHA7CisKKwlkcHJpbnQoUElOU1RSLCAiZm11bFxuIik7CisKKwlmcF9keWFkaWNfY2hlY2soZGVzdCwgc3JjKTsKKworCS8qIGNhbGN1bGF0ZSB0aGUgY29ycmVjdCBzaWduIG5vdywgYXMgaXQncyBuZWNlc3NhcnkgZm9yIGluZmluaXRpZXMgKi8KKwlkZXN0LT5zaWduID0gc3JjLT5zaWduIF4gZGVzdC0+c2lnbjsKKworCS8qIEhhbmRsZSBpbmZpbml0aWVzICovCisJaWYgKElTX0lORihkZXN0KSkgeworCQlpZiAoSVNfWkVSTyhzcmMpKQorCQkJZnBfc2V0X25hbihkZXN0KTsKKwkJcmV0dXJuIGRlc3Q7CisJfQorCWlmIChJU19JTkYoc3JjKSkgeworCQlpZiAoSVNfWkVSTyhkZXN0KSkKKwkJCWZwX3NldF9uYW4oZGVzdCk7CisJCWVsc2UKKwkJCWZwX2NvcHlfZXh0KGRlc3QsIHNyYyk7CisJCXJldHVybiBkZXN0OworCX0KKworCS8qIE9mIGNvdXJzZSwgYXMgd2UgYWxsIGtub3csIHplcm8gKiBhbnl0aGluZyA9IHplcm8uICBZb3UgbWF5CisJICAgbm90IGhhdmUga25vd24gdGhhdCBpdCBtaWdodCBiZSBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlCisJICAgemVyby4uLiAqLworCWlmIChJU19aRVJPKGRlc3QpIHx8IElTX1pFUk8oc3JjKSkgeworCQlkZXN0LT5leHAgPSAwOworCQlkZXN0LT5tYW50Lm02NCA9IDA7CisJCWRlc3QtPmxvd21hbnQgPSAwOworCisJCXJldHVybiBkZXN0OworCX0KKworCWV4cCA9IGRlc3QtPmV4cCArIHNyYy0+ZXhwIC0gMHgzZmZlOworCisJLyogc2hpZnQgdXAgdGhlIG1hbnRpc3NhIGZvciBkZW5vcm1hbGl6ZWQgbnVtYmVycywKKwkgICBzbyB0aGF0IHRoZSBoaWdoZXN0IGJpdCBpcyBzZXQsIHRoaXMgbWFrZXMgdGhlCisJICAgc2hpZnQgb2YgdGhlIHJlc3VsdCBiZWxvdyBlYXNpZXIgKi8KKwlpZiAoKGxvbmcpZGVzdC0+bWFudC5tMzJbMF0gPj0gMCkKKwkJZXhwIC09IGZwX292ZXJub3JtYWxpemUoZGVzdCk7CisJaWYgKChsb25nKXNyYy0+bWFudC5tMzJbMF0gPj0gMCkKKwkJZXhwIC09IGZwX292ZXJub3JtYWxpemUoc3JjKTsKKworCS8qIG5vdywgZG8gYSA2NC1iaXQgbXVsdGlwbHkgd2l0aCBleHBhbnNpb24gKi8KKwlmcF9tdWx0aXBseW1hbnQoJnRlbXAsIGRlc3QsIHNyYyk7CisKKwkvKiBub3JtYWxpemUgaXQgYmFjayB0byA2NCBiaXRzIGFuZCBzdHVmZiBpdCBiYWNrIGludG8gdGhlCisJICAgZGVzdGluYXRpb24gc3RydWN0ICovCisJaWYgKChsb25nKXRlbXAubTMyWzBdID4gMCkgeworCQlleHAtLTsKKwkJZnBfcHV0bWFudDEyOChkZXN0LCAmdGVtcCwgMSk7CisJfSBlbHNlCisJCWZwX3B1dG1hbnQxMjgoZGVzdCwgJnRlbXAsIDApOworCisJaWYgKGV4cCA+PSAweDdmZmYpIHsKKwkJZnBfc2V0X292cmZsdyhkZXN0KTsKKwkJcmV0dXJuIGRlc3Q7CisJfQorCWRlc3QtPmV4cCA9IGV4cDsKKwlpZiAoZXhwIDwgMCkgeworCQlmcF9zZXRfc3IoRlBTUl9FWENfVU5GTCk7CisJCWZwX2Rlbm9ybWFsaXplKGRlc3QsIC1leHApOworCX0KKworCXJldHVybiBkZXN0OworfQorCisvKiBmcF9mZGl2OiBJbXBsZW1lbnRzIHRoZSAia2VybmVsIiBvZiB0aGUgRkRJViwgRlNESVYsIEZERElWIGFuZAorICAgRlNHTERJViBpbnN0cnVjdGlvbnMuCisKKyAgIE5vdGUgdGhhdCB0aGUgb3JkZXIgb2YgdGhlIG9wZXJhbmRzIGlzIGNvdW50ZXItaW50dWl0aXZlOiBpbnN0ZWFkCisgICBvZiBzcmMgLyBkZXN0LCB0aGUgcmVzdWx0IGlzIGFjdHVhbGx5IGRlc3QgLyBzcmMuICovCisKK3N0cnVjdCBmcF9leHQgKgorZnBfZmRpdihzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdW5pb24gZnBfbWFudDEyOCB0ZW1wOworCWludCBleHA7CisKKwlkcHJpbnQoUElOU1RSLCAiZmRpdlxuIik7CisKKwlmcF9keWFkaWNfY2hlY2soZGVzdCwgc3JjKTsKKworCS8qIGNhbGN1bGF0ZSB0aGUgY29ycmVjdCBzaWduIG5vdywgYXMgaXQncyBuZWNlc3NhcnkgZm9yIGluZmluaXRpZXMgKi8KKwlkZXN0LT5zaWduID0gc3JjLT5zaWduIF4gZGVzdC0+c2lnbjsKKworCS8qIEhhbmRsZSBpbmZpbml0aWVzICovCisJaWYgKElTX0lORihkZXN0KSkgeworCQkvKiBpbmZpbml0eSAvIGluZmluaXR5ID0gTmFOIChxdWlldCwgYXMgYWx3YXlzKSAqLworCQlpZiAoSVNfSU5GKHNyYykpCisJCQlmcF9zZXRfbmFuKGRlc3QpOworCQkvKiBpbmZpbml0eSAvIGFueXRoaW5nIGVsc2UgPSBpbmZpbml0eSAod2l0aCBhcHByb3ByYXRlIHNpZ24pICovCisJCXJldHVybiBkZXN0OworCX0KKwlpZiAoSVNfSU5GKHNyYykpIHsKKwkJLyogYW55dGhpbmcgLyBpbmZpbml0eSA9IHplcm8gKHdpdGggYXBwcm9wcmlhdGUgc2lnbikgKi8KKwkJZGVzdC0+ZXhwID0gMDsKKwkJZGVzdC0+bWFudC5tNjQgPSAwOworCQlkZXN0LT5sb3dtYW50ID0gMDsKKworCQlyZXR1cm4gZGVzdDsKKwl9CisKKwkvKiB6ZXJvZXMgKi8KKwlpZiAoSVNfWkVSTyhkZXN0KSkgeworCQkvKiB6ZXJvIC8gemVybyA9IE5hTiAqLworCQlpZiAoSVNfWkVSTyhzcmMpKQorCQkJZnBfc2V0X25hbihkZXN0KTsKKwkJLyogemVybyAvIGFueXRoaW5nIGVsc2UgPSB6ZXJvICovCisJCXJldHVybiBkZXN0OworCX0KKwlpZiAoSVNfWkVSTyhzcmMpKSB7CisJCS8qIGFueXRoaW5nIC8gemVybyA9IGluZmluaXR5ICh3aXRoIGFwcHJvcHJpYXRlIHNpZ24pICovCisJCWZwX3NldF9zcihGUFNSX0VYQ19EWik7CisJCWRlc3QtPmV4cCA9IDB4N2ZmZjsKKwkJZGVzdC0+bWFudC5tNjQgPSAwOworCisJCXJldHVybiBkZXN0OworCX0KKworCWV4cCA9IGRlc3QtPmV4cCAtIHNyYy0+ZXhwICsgMHgzZmZmOworCisJLyogc2hpZnQgdXAgdGhlIG1hbnRpc3NhIGZvciBkZW5vcm1hbGl6ZWQgbnVtYmVycywKKwkgICBzbyB0aGF0IHRoZSBoaWdoZXN0IGJpdCBpcyBzZXQsIHRoaXMgbWFrZXMgbG90cworCSAgIG9mIHRoaW5ncyBiZWxvdyBlYXNpZXIgKi8KKwlpZiAoKGxvbmcpZGVzdC0+bWFudC5tMzJbMF0gPj0gMCkKKwkJZXhwIC09IGZwX292ZXJub3JtYWxpemUoZGVzdCk7CisJaWYgKChsb25nKXNyYy0+bWFudC5tMzJbMF0gPj0gMCkKKwkJZXhwIC09IGZwX292ZXJub3JtYWxpemUoc3JjKTsKKworCS8qIG5vdywgZG8gdGhlIDY0LWJpdCBkaXZpZGUgKi8KKwlmcF9kaXZpZGVtYW50KCZ0ZW1wLCBkZXN0LCBzcmMpOworCisJLyogbm9ybWFsaXplIGl0IGJhY2sgdG8gNjQgYml0cyBhbmQgc3R1ZmYgaXQgYmFjayBpbnRvIHRoZQorCSAgIGRlc3RpbmF0aW9uIHN0cnVjdCAqLworCWlmICghdGVtcC5tMzJbMF0pIHsKKwkJZXhwLS07CisJCWZwX3B1dG1hbnQxMjgoZGVzdCwgJnRlbXAsIDMyKTsKKwl9IGVsc2UKKwkJZnBfcHV0bWFudDEyOChkZXN0LCAmdGVtcCwgMzEpOworCisJaWYgKGV4cCA+PSAweDdmZmYpIHsKKwkJZnBfc2V0X292cmZsdyhkZXN0KTsKKwkJcmV0dXJuIGRlc3Q7CisJfQorCWRlc3QtPmV4cCA9IGV4cDsKKwlpZiAoZXhwIDwgMCkgeworCQlmcF9zZXRfc3IoRlBTUl9FWENfVU5GTCk7CisJCWZwX2Rlbm9ybWFsaXplKGRlc3QsIC1leHApOworCX0KKworCXJldHVybiBkZXN0OworfQorCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZzZ2xtdWwoc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCWludCBleHA7CisKKwlkcHJpbnQoUElOU1RSLCAiZnNnbG11bFxuIik7CisKKwlmcF9keWFkaWNfY2hlY2soZGVzdCwgc3JjKTsKKworCS8qIGNhbGN1bGF0ZSB0aGUgY29ycmVjdCBzaWduIG5vdywgYXMgaXQncyBuZWNlc3NhcnkgZm9yIGluZmluaXRpZXMgKi8KKwlkZXN0LT5zaWduID0gc3JjLT5zaWduIF4gZGVzdC0+c2lnbjsKKworCS8qIEhhbmRsZSBpbmZpbml0aWVzICovCisJaWYgKElTX0lORihkZXN0KSkgeworCQlpZiAoSVNfWkVSTyhzcmMpKQorCQkJZnBfc2V0X25hbihkZXN0KTsKKwkJcmV0dXJuIGRlc3Q7CisJfQorCWlmIChJU19JTkYoc3JjKSkgeworCQlpZiAoSVNfWkVSTyhkZXN0KSkKKwkJCWZwX3NldF9uYW4oZGVzdCk7CisJCWVsc2UKKwkJCWZwX2NvcHlfZXh0KGRlc3QsIHNyYyk7CisJCXJldHVybiBkZXN0OworCX0KKworCS8qIE9mIGNvdXJzZSwgYXMgd2UgYWxsIGtub3csIHplcm8gKiBhbnl0aGluZyA9IHplcm8uICBZb3UgbWF5CisJICAgbm90IGhhdmUga25vd24gdGhhdCBpdCBtaWdodCBiZSBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlCisJICAgemVyby4uLiAqLworCWlmIChJU19aRVJPKGRlc3QpIHx8IElTX1pFUk8oc3JjKSkgeworCQlkZXN0LT5leHAgPSAwOworCQlkZXN0LT5tYW50Lm02NCA9IDA7CisJCWRlc3QtPmxvd21hbnQgPSAwOworCisJCXJldHVybiBkZXN0OworCX0KKworCWV4cCA9IGRlc3QtPmV4cCArIHNyYy0+ZXhwIC0gMHgzZmZlOworCisJLyogZG8gYSAzMi1iaXQgbXVsdGlwbHkgKi8KKwlmcF9tdWw2NChkZXN0LT5tYW50Lm0zMlswXSwgZGVzdC0+bWFudC5tMzJbMV0sCisJCSBkZXN0LT5tYW50Lm0zMlswXSAmIDB4ZmZmZmZmMDAsCisJCSBzcmMtPm1hbnQubTMyWzBdICYgMHhmZmZmZmYwMCk7CisKKwlpZiAoZXhwID49IDB4N2ZmZikgeworCQlmcF9zZXRfb3ZyZmx3KGRlc3QpOworCQlyZXR1cm4gZGVzdDsKKwl9CisJZGVzdC0+ZXhwID0gZXhwOworCWlmIChleHAgPCAwKSB7CisJCWZwX3NldF9zcihGUFNSX0VYQ19VTkZMKTsKKwkJZnBfZGVub3JtYWxpemUoZGVzdCwgLWV4cCk7CisJfQorCisJcmV0dXJuIGRlc3Q7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZnNnbGRpdihzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJaW50IGV4cDsKKwl1bnNpZ25lZCBsb25nIHF1b3QsIHJlbTsKKworCWRwcmludChQSU5TVFIsICJmc2dsZGl2XG4iKTsKKworCWZwX2R5YWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJLyogY2FsY3VsYXRlIHRoZSBjb3JyZWN0IHNpZ24gbm93LCBhcyBpdCdzIG5lY2Vzc2FyeSBmb3IgaW5maW5pdGllcyAqLworCWRlc3QtPnNpZ24gPSBzcmMtPnNpZ24gXiBkZXN0LT5zaWduOworCisJLyogSGFuZGxlIGluZmluaXRpZXMgKi8KKwlpZiAoSVNfSU5GKGRlc3QpKSB7CisJCS8qIGluZmluaXR5IC8gaW5maW5pdHkgPSBOYU4gKHF1aWV0LCBhcyBhbHdheXMpICovCisJCWlmIChJU19JTkYoc3JjKSkKKwkJCWZwX3NldF9uYW4oZGVzdCk7CisJCS8qIGluZmluaXR5IC8gYW55dGhpbmcgZWxzZSA9IGluZmluaXR5ICh3aXRoIGFwcHJvcHJhdGUgc2lnbikgKi8KKwkJcmV0dXJuIGRlc3Q7CisJfQorCWlmIChJU19JTkYoc3JjKSkgeworCQkvKiBhbnl0aGluZyAvIGluZmluaXR5ID0gemVybyAod2l0aCBhcHByb3ByaWF0ZSBzaWduKSAqLworCQlkZXN0LT5leHAgPSAwOworCQlkZXN0LT5tYW50Lm02NCA9IDA7CisJCWRlc3QtPmxvd21hbnQgPSAwOworCisJCXJldHVybiBkZXN0OworCX0KKworCS8qIHplcm9lcyAqLworCWlmIChJU19aRVJPKGRlc3QpKSB7CisJCS8qIHplcm8gLyB6ZXJvID0gTmFOICovCisJCWlmIChJU19aRVJPKHNyYykpCisJCQlmcF9zZXRfbmFuKGRlc3QpOworCQkvKiB6ZXJvIC8gYW55dGhpbmcgZWxzZSA9IHplcm8gKi8KKwkJcmV0dXJuIGRlc3Q7CisJfQorCWlmIChJU19aRVJPKHNyYykpIHsKKwkJLyogYW55dGhpbmcgLyB6ZXJvID0gaW5maW5pdHkgKHdpdGggYXBwcm9wcmlhdGUgc2lnbikgKi8KKwkJZnBfc2V0X3NyKEZQU1JfRVhDX0RaKTsKKwkJZGVzdC0+ZXhwID0gMHg3ZmZmOworCQlkZXN0LT5tYW50Lm02NCA9IDA7CisKKwkJcmV0dXJuIGRlc3Q7CisJfQorCisJZXhwID0gZGVzdC0+ZXhwIC0gc3JjLT5leHAgKyAweDNmZmY7CisKKwlkZXN0LT5tYW50Lm0zMlswXSAmPSAweGZmZmZmZjAwOworCXNyYy0+bWFudC5tMzJbMF0gJj0gMHhmZmZmZmYwMDsKKworCS8qIGRvIHRoZSAzMi1iaXQgZGl2aWRlICovCisJaWYgKGRlc3QtPm1hbnQubTMyWzBdID49IHNyYy0+bWFudC5tMzJbMF0pIHsKKwkJZnBfc3ViNjQoZGVzdC0+bWFudCwgc3JjLT5tYW50KTsKKwkJZnBfZGl2NjQocXVvdCwgcmVtLCBkZXN0LT5tYW50Lm0zMlswXSwgMCwgc3JjLT5tYW50Lm0zMlswXSk7CisJCWRlc3QtPm1hbnQubTMyWzBdID0gMHg4MDAwMDAwMCB8IChxdW90ID4+IDEpOworCQlkZXN0LT5tYW50Lm0zMlsxXSA9IChxdW90ICYgMSkgfCByZW07CS8qIG9ubHkgZm9yIHJvdW5kaW5nICovCisJfSBlbHNlIHsKKwkJZnBfZGl2NjQocXVvdCwgcmVtLCBkZXN0LT5tYW50Lm0zMlswXSwgMCwgc3JjLT5tYW50Lm0zMlswXSk7CisJCWRlc3QtPm1hbnQubTMyWzBdID0gcXVvdDsKKwkJZGVzdC0+bWFudC5tMzJbMV0gPSByZW07CQkvKiBvbmx5IGZvciByb3VuZGluZyAqLworCQlleHAtLTsKKwl9CisKKwlpZiAoZXhwID49IDB4N2ZmZikgeworCQlmcF9zZXRfb3ZyZmx3KGRlc3QpOworCQlyZXR1cm4gZGVzdDsKKwl9CisJZGVzdC0+ZXhwID0gZXhwOworCWlmIChleHAgPCAwKSB7CisJCWZwX3NldF9zcihGUFNSX0VYQ19VTkZMKTsKKwkJZnBfZGVub3JtYWxpemUoZGVzdCwgLWV4cCk7CisJfQorCisJcmV0dXJuIGRlc3Q7Cit9CisKKy8qIGZwX3JvdW5kaW50OiBJbnRlcm5hbCByb3VuZGluZyBmdW5jdGlvbiBmb3IgdXNlIGJ5IHNldmVyYWwgb2YgdGhlc2UKKyAgIGVtdWxhdGVkIGluc3RydWN0aW9ucy4KKworICAgVGhpcyBvbmUgcm91bmRzIG9mZiB0aGUgZnJhY3Rpb25hbCBwYXJ0IHVzaW5nIHRoZSByb3VuZGluZyBtb2RlCisgICBzcGVjaWZpZWQuICovCisKK3N0YXRpYyB2b2lkIGZwX3JvdW5kaW50KHN0cnVjdCBmcF9leHQgKmRlc3QsIGludCBtb2RlKQoreworCXVuaW9uIGZwX21hbnQ2NCBvbGRtYW50OworCXVuc2lnbmVkIGxvbmcgbWFzazsKKworCWlmICghZnBfbm9ybWFsaXplX2V4dChkZXN0KSkKKwkJcmV0dXJuOworCisJLyogaW5maW5pdGllcyBhbmQgemVyb2VzICovCisJaWYgKElTX0lORihkZXN0KSB8fCBJU19aRVJPKGRlc3QpKQorCQlyZXR1cm47CisKKwkvKiBmaXJzdCB0cnVuY2F0ZSB0aGUgbG93ZXIgYml0cyAqLworCW9sZG1hbnQgPSBkZXN0LT5tYW50OworCXN3aXRjaCAoZGVzdC0+ZXhwKSB7CisJY2FzZSAwIC4uLiAweDNmZmU6CisJCWRlc3QtPm1hbnQubTY0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSAweDNmZmYgLi4uIDB4NDAxZToKKwkJZGVzdC0+bWFudC5tMzJbMF0gJj0gMHhmZmZmZmZmZlUgPDwgKDB4NDAxZSAtIGRlc3QtPmV4cCk7CisJCWRlc3QtPm1hbnQubTMyWzFdID0gMDsKKwkJaWYgKG9sZG1hbnQubTY0ID09IGRlc3QtPm1hbnQubTY0KQorCQkJcmV0dXJuOworCQlicmVhazsKKwljYXNlIDB4NDAxZiAuLi4gMHg0MDNlOgorCQlkZXN0LT5tYW50Lm0zMlsxXSAmPSAweGZmZmZmZmZmVSA8PCAoMHg0MDNlIC0gZGVzdC0+ZXhwKTsKKwkJaWYgKG9sZG1hbnQubTMyWzFdID09IGRlc3QtPm1hbnQubTMyWzFdKQorCQkJcmV0dXJuOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCWZwX3NldF9zcihGUFNSX0VYQ19JTkVYMik7CisKKwkvKiBXZSBtaWdodCB3YW50IHRvIG5vcm1hbGl6ZSB1cHdhcmRzIGhlcmUuLi4gaG93ZXZlciwgc2luY2UKKwkgICB3ZSBrbm93IHRoYXQgdGhpcyBpcyBvbmx5IGNhbGxlZCBvbiB0aGUgb3V0cHV0IG9mIGZwX2ZkaXYsCisJICAgb3Igd2l0aCB0aGUgaW5wdXQgdG8gZnBfZmludCBvciBmcF9maW50cnosIGFuZCB0aGUgaW5wdXRzCisJICAgdG8gYWxsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZWl0aGVyIG5vcm1hbCBvciBkZW5vcm1hbGl6ZWQKKwkgICAobm8gc3Vibm9ybWFscyBhbGxvd2VkISksIHRoZXJlJ3MgcmVhbGx5IG5vIG5lZWQuCisKKwkgICBJbiB0aGUgY2FzZSBvZiBmcF9mZGl2LCBvYnNlcnZlIHRoYXQgMHg4MDAwMDAwMCAvIDB4ZmZmZiA9CisJICAgMHhmZmZmODAwMCwgYW5kIHRoZSBzYW1lIGhvbGRzIGZvciAxMjgtYml0IC8gNjQtYml0LiAoaS5lLiB0aGUKKwkgICBzbWFsbGVzdCBwb3NzaWJsZSBub3JtYWwgZGl2aWRlbmQgYW5kIHRoZSBsYXJnZXN0IHBvc3NpYmxlIG5vcm1hbAorCSAgIGRpdmlzb3Igd2lsbCBzdGlsbCBwcm9kdWNlIGEgbm9ybWFsIHF1b3RpZW50LCB0aGVyZWZvcmUsIChub3JtYWwKKwkgICA8PCA2NCkgLyBub3JtYWwgaXMgbm9ybWFsIGluIGFsbCBjYXNlcykgKi8KKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgRlBDUl9ST1VORF9STjoKKwkJc3dpdGNoIChkZXN0LT5leHApIHsKKwkJY2FzZSAwIC4uLiAweDNmZmQ6CisJCQlyZXR1cm47CisJCWNhc2UgMHgzZmZlOgorCQkJLyogQXMgbm90ZWQgYWJvdmUsIHRoZSBpbnB1dCBpcyBhbHdheXMgbm9ybWFsLCBzbyB0aGUKKwkJCSAgIGd1YXJkIGJpdCAoYml0IDYzKSBpcyBhbHdheXMgc2V0LiAgdGhlcmVmb3JlLCB0aGUKKwkJCSAgIG9ubHkgY2FzZSBpbiB3aGljaCB3ZSB3aWxsIE5PVCByb3VuZCB0byAxLjAgaXMgd2hlbgorCQkJICAgdGhlIGlucHV0IGlzIGV4YWN0bHkgMC41LiAqLworCQkJaWYgKG9sZG1hbnQubTY0ID09ICgxVUxMIDw8IDYzKSkKKwkJCQlyZXR1cm47CisJCQlicmVhazsKKwkJY2FzZSAweDNmZmYgLi4uIDB4NDAxZDoKKwkJCW1hc2sgPSAxIDw8ICgweDQwMWQgLSBkZXN0LT5leHApOworCQkJaWYgKCEob2xkbWFudC5tMzJbMF0gJiBtYXNrKSkKKwkJCQlyZXR1cm47CisJCQlpZiAob2xkbWFudC5tMzJbMF0gJiAobWFzayA8PCAxKSkKKwkJCQlicmVhazsKKwkJCWlmICghKG9sZG1hbnQubTMyWzBdIDw8IChkZXN0LT5leHAgLSAweDNmZmQpKSAmJgorCQkJCQkhb2xkbWFudC5tMzJbMV0pCisJCQkJcmV0dXJuOworCQkJYnJlYWs7CisJCWNhc2UgMHg0MDFlOgorCQkJaWYgKCEob2xkbWFudC5tMzJbMV0gPj0gMCkpCisJCQkJcmV0dXJuOworCQkJaWYgKG9sZG1hbnQubTMyWzBdICYgMSkKKwkJCQlicmVhazsKKwkJCWlmICghKG9sZG1hbnQubTMyWzFdIDw8IDEpKQorCQkJCXJldHVybjsKKwkJCWJyZWFrOworCQljYXNlIDB4NDAxZiAuLi4gMHg0MDNkOgorCQkJbWFzayA9IDEgPDwgKDB4NDAzZCAtIGRlc3QtPmV4cCk7CisJCQlpZiAoIShvbGRtYW50Lm0zMlsxXSAmIG1hc2spKQorCQkJCXJldHVybjsKKwkJCWlmIChvbGRtYW50Lm0zMlsxXSAmIChtYXNrIDw8IDEpKQorCQkJCWJyZWFrOworCQkJaWYgKCEob2xkbWFudC5tMzJbMV0gPDwgKGRlc3QtPmV4cCAtIDB4NDAxZCkpKQorCQkJCXJldHVybjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworCWNhc2UgRlBDUl9ST1VORF9SWjoKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWlmIChkZXN0LT5zaWduIF4gKG1vZGUgLSBGUENSX1JPVU5EX1JNKSkKKwkJCWJyZWFrOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChkZXN0LT5leHApIHsKKwljYXNlIDAgLi4uIDB4M2ZmZToKKwkJZGVzdC0+ZXhwID0gMHgzZmZmOworCQlkZXN0LT5tYW50Lm02NCA9IDFVTEwgPDwgNjM7CisJCWJyZWFrOworCWNhc2UgMHgzZmZmIC4uLiAweDQwMWU6CisJCW1hc2sgPSAxIDw8ICgweDQwMWUgLSBkZXN0LT5leHApOworCQlpZiAoZGVzdC0+bWFudC5tMzJbMF0gKz0gbWFzaykKKwkJCWJyZWFrOworCQlkZXN0LT5tYW50Lm0zMlswXSA9IDB4ODAwMDAwMDA7CisJCWRlc3QtPmV4cCsrOworCQlicmVhazsKKwljYXNlIDB4NDAxZiAuLi4gMHg0MDNlOgorCQltYXNrID0gMSA8PCAoMHg0MDNlIC0gZGVzdC0+ZXhwKTsKKwkJaWYgKGRlc3QtPm1hbnQubTMyWzFdICs9IG1hc2spCisJCQlicmVhazsKKwkJaWYgKGRlc3QtPm1hbnQubTMyWzBdICs9IDEpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJZGVzdC0+bWFudC5tMzJbMF0gPSAweDgwMDAwMDAwOworICAgICAgICAgICAgICAgIGRlc3QtPmV4cCsrOworCQlicmVhazsKKwl9Cit9CisKKy8qIG1vZHJlbV9rZXJuZWw6IEltcGxlbWVudGF0aW9uIG9mIHRoZSBGUkVNIGFuZCBGTU9EIGluc3RydWN0aW9ucworICAgKHdoaWNoIGFyZSBleGFjdGx5IHRoZSBzYW1lLCBleGNlcHQgZm9yIHRoZSByb3VuZGluZyB1c2VkIG9uIHRoZQorICAgaW50ZXJtZWRpYXRlIHZhbHVlKSAqLworCitzdGF0aWMgc3RydWN0IGZwX2V4dCAqCittb2RyZW1fa2VybmVsKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYywgaW50IG1vZGUpCit7CisJc3RydWN0IGZwX2V4dCB0bXA7CisKKwlmcF9keWFkaWNfY2hlY2soZGVzdCwgc3JjKTsKKworCS8qIEluZmluaXRpZXMgYW5kIHplcm9zICovCisJaWYgKElTX0lORihkZXN0KSB8fCBJU19aRVJPKHNyYykpIHsKKwkJZnBfc2V0X25hbihkZXN0KTsKKwkJcmV0dXJuIGRlc3Q7CisJfQorCWlmIChJU19aRVJPKGRlc3QpIHx8IElTX0lORihzcmMpKQorCQlyZXR1cm4gZGVzdDsKKworCS8qIEZJWE1FOiB0aGVyZSBpcyBhbG1vc3QgY2VydGFpbmx5IGEgc21hcnRlciB3YXkgdG8gZG8gdGhpcyAqLworCWZwX2NvcHlfZXh0KCZ0bXAsIGRlc3QpOworCWZwX2ZkaXYoJnRtcCwgc3JjKTsJCS8qIE5PVEU6IHNyYyBtaWdodCBiZSBtb2RpZmllZCAqLworCWZwX3JvdW5kaW50KCZ0bXAsIG1vZGUpOworCWZwX2ZtdWwoJnRtcCwgc3JjKTsKKwlmcF9mc3ViKGRlc3QsICZ0bXApOworCisJLyogc2V0IHRoZSBxdW90aWVudCBieXRlICovCisJZnBfc2V0X3F1b3RpZW50KChkZXN0LT5tYW50Lm02NCAmIDB4N2YpIHwgKGRlc3QtPnNpZ24gPDwgNykpOworCXJldHVybiBkZXN0OworfQorCisvKiBmcF9mbW9kOiBJbXBsZW1lbnRzIHRoZSBrZXJuZWwgb2YgdGhlIEZNT0QgaW5zdHJ1Y3Rpb24uCisKKyAgIEFnYWluLCB0aGUgYXJndW1lbnQgb3JkZXIgaXMgYmFja3dhcmRzLiAgVGhlIHJlc3VsdCwgYXMgZGVmaW5lZCBpbgorICAgdGhlIE1vdG9yb2xhIG1hbnVhbHMsIGlzOgorCisgICBmbW9kKHNyYyxkZXN0KSA9IChkZXN0IC0gKHNyYyAqIGZsb29yKGRlc3QgLyBzcmMpKSkgKi8KKworc3RydWN0IGZwX2V4dCAqCitmcF9mbW9kKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwlkcHJpbnQoUElOU1RSLCAiZm1vZFxuIik7CisJcmV0dXJuIG1vZHJlbV9rZXJuZWwoZGVzdCwgc3JjLCBGUENSX1JPVU5EX1JaKTsKK30KKworLyogZnBfZnJlbTogSW1wbGVtZW50cyB0aGUga2VybmVsIG9mIHRoZSBGUkVNIGluc3RydWN0aW9uLgorCisgICBmcmVtKHNyYyxkZXN0KSA9IChkZXN0IC0gKHNyYyAqIHJvdW5kKGRlc3QgLyBzcmMpKSkKKyAqLworCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZyZW0oc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCWRwcmludChQSU5TVFIsICJmcmVtXG4iKTsKKwlyZXR1cm4gbW9kcmVtX2tlcm5lbChkZXN0LCBzcmMsIEZQQ1JfUk9VTkRfUk4pOworfQorCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZpbnQoc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCWRwcmludChQSU5TVFIsICJmaW50XG4iKTsKKworCWZwX2NvcHlfZXh0KGRlc3QsIHNyYyk7CisKKwlmcF9yb3VuZGludChkZXN0LCBGUERBVEEtPnJuZCk7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9maW50cnooc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCWRwcmludChQSU5TVFIsICJmaW50cnpcbiIpOworCisJZnBfY29weV9leHQoZGVzdCwgc3JjKTsKKworCWZwX3JvdW5kaW50KGRlc3QsIEZQQ1JfUk9VTkRfUlopOworCisJcmV0dXJuIGRlc3Q7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZnNjYWxlKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwlpbnQgc2NhbGUsIG9sZHJvdW5kOworCisJZHByaW50KFBJTlNUUiwgImZzY2FsZVxuIik7CisKKwlmcF9keWFkaWNfY2hlY2soZGVzdCwgc3JjKTsKKworCS8qIEluZmluaXRpZXMgKi8KKwlpZiAoSVNfSU5GKHNyYykpIHsKKwkJZnBfc2V0X25hbihkZXN0KTsKKwkJcmV0dXJuIGRlc3Q7CisJfQorCWlmIChJU19JTkYoZGVzdCkpCisJCXJldHVybiBkZXN0OworCisJLyogemVyb2VzICovCisJaWYgKElTX1pFUk8oc3JjKSB8fCBJU19aRVJPKGRlc3QpKQorCQlyZXR1cm4gZGVzdDsKKworCS8qIFNvdXJjZSBleHBvbmVudCBvdXQgb2YgcmFuZ2UgKi8KKwlpZiAoc3JjLT5leHAgPj0gMHg0MDBjKSB7CisJCWZwX3NldF9vdnJmbHcoZGVzdCk7CisJCXJldHVybiBkZXN0OworCX0KKworCS8qIHNyYyBtdXN0IGJlIHJvdW5kZWQgd2l0aCByb3VuZCB0byB6ZXJvLiAqLworCW9sZHJvdW5kID0gRlBEQVRBLT5ybmQ7CisJRlBEQVRBLT5ybmQgPSBGUENSX1JPVU5EX1JaOworCXNjYWxlID0gZnBfY29udl9leHQybG9uZyhzcmMpOworCUZQREFUQS0+cm5kID0gb2xkcm91bmQ7CisKKwkvKiBuZXcgZXhwb25lbnQgKi8KKwlzY2FsZSArPSBkZXN0LT5leHA7CisKKwlpZiAoc2NhbGUgPj0gMHg3ZmZmKSB7CisJCWZwX3NldF9vdnJmbHcoZGVzdCk7CisJfSBlbHNlIGlmIChzY2FsZSA8PSAwKSB7CisJCWZwX3NldF9zcihGUFNSX0VYQ19VTkZMKTsKKwkJZnBfZGVub3JtYWxpemUoZGVzdCwgLXNjYWxlKTsKKwl9IGVsc2UKKwkJZGVzdC0+ZXhwID0gc2NhbGU7CisKKwlyZXR1cm4gZGVzdDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hdGgtZW11L2ZwX2FyaXRoLmggYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfYXJpdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2MzZjg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21hdGgtZW11L2ZwX2FyaXRoLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKworICAgZnBfYXJpdGguaDogZmxvYXRpbmctcG9pbnQgbWF0aCByb3V0aW5lcyBmb3IgdGhlIExpbnV4LW02OGsKKyAgIGZsb2F0aW5nIHBvaW50IGVtdWxhdG9yLgorCisgICBDb3B5cmlnaHQgKGMpIDE5OTggRGF2aWQgSHVnZ2lucy1EYWluZXMuCisKKyAgIFNvbWV3aGF0IGJhc2VkIG9uIHRoZSBBbHBoYUxpbnV4IGZsb2F0aW5nIHBvaW50IGVtdWxhdG9yLCBieSBEYXZpZAorICAgTW9zYmVyZ2VyLVRhbmcuCisKKyAgIFlvdSBtYXkgY29weSwgbW9kaWZ5LCBhbmQgcmVkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YKKyAgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBvciBhbnkgbGF0ZXIgdmVyc2lvbiwgYXQKKyAgIHlvdXIgY29udmVuaWVuY2UuCisKKyAqLworCisjaWZuZGVmIEZQX0FSSVRIX0gKKyNkZWZpbmUgRlBfQVJJVEhfSAorCisvKiBlYXN5IG9uZXMgKi8KK3N0cnVjdCBmcF9leHQgKgorZnBfZmFicyhzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpOworc3RydWN0IGZwX2V4dCAqCitmcF9mbmVnKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYyk7CisKKy8qIHN0cmFpZ2h0Zm9yd2FyZCBhcml0aG1ldGljICovCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZhZGQoc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKTsKK3N0cnVjdCBmcF9leHQgKgorZnBfZnN1YihzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpOworc3RydWN0IGZwX2V4dCAqCitmcF9mY21wKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYyk7CitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2Z0c3Qoc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKTsKK3N0cnVjdCBmcF9leHQgKgorZnBfZm11bChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpOworc3RydWN0IGZwX2V4dCAqCitmcF9mZGl2KHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYyk7CisKKy8qIG9uZXMgdGhhdCBkbyByb3VuZGluZyBhbmQgaW50ZWdlciBjb252ZXJzaW9ucyAqLworc3RydWN0IGZwX2V4dCAqCitmcF9mbW9kKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYyk7CitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZyZW0oc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKTsKK3N0cnVjdCBmcF9leHQgKgorZnBfZmludChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpOworc3RydWN0IGZwX2V4dCAqCitmcF9maW50cnooc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKTsKK3N0cnVjdCBmcF9leHQgKgorZnBfZnNjYWxlKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYyk7CisKKyNlbmRpZgkvKiBGUF9BUklUSF9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hdGgtZW11L2ZwX2NvbmQuUyBiL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9jb25kLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRhZThiMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9jb25kLlMKQEAgLTAsMCArMSwzMzQgQEAKKy8qCisgKiBmcF9jb25kLlMKKyAqCisgKiBDb3B5cmlnaHQgUm9tYW4gWmlwcGVsLCAxOTk3LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBlcm1pc3Npb24gbm90aWNlIGluIGl0cyBlbnRpcmV0eSwKKyAqICAgIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBTFRFUk5BVElWRUxZLCB0aGlzIHByb2R1Y3QgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlCisgKiByZXF1aXJlZCBJTlNURUFEIE9GIHRoZSBhYm92ZSByZXN0cmljdGlvbnMuICAoVGhpcyBjbGF1c2UgaXMKKyAqIG5lY2Vzc2FyeSBkdWUgdG8gYSBwb3RlbnRpYWwgYmFkIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIEdQTCBhbmQKKyAqIHRoZSByZXN0cmljdGlvbnMgY29udGFpbmVkIGluIGEgQlNELXN0eWxlIGNvcHlyaWdodC4pCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmcF9lbXUuaCIKKyNpbmNsdWRlICJmcF9kZWNvZGUuaCIKKworCS5nbG9ibAlmcF9mc2NjLCBmcF9mYmNjdywgZnBfZmJjY2wKKworI2lmZGVmIEZQVV9FTVVfREVCVUcKK2ZwX2Zub3A6CisJcHJpbnRmCVBERUNPREUsImZub3BcbiIKKwlqcmEJZnBfZW5kCisjZWxzZQorI2RlZmluZSBmcF9mbm9wIGZwX2VuZAorI2VuZGlmCisKK2ZwX2ZiY2N3OgorCXRzdC53CSVkMgorCWplcQlmcF9mbm9wCisJcHJpbnRmCVBERUNPREUsImZiY2N3ICIKKwlmcF9nZXRfcGMgJWEwCisJbGVhCSgtMiwlYTAsJWQyLncpLCVhMAorCWpyYQkxZgorCitmcF9mYmNjbDoKKwlwcmludGYJUERFQ09ERSwiZmJjY2wgIgorCWZwX2dldF9wYyAlYTAKKwltb3ZlLmwJJWQyLCVkMAorCXN3YXAJJWQwCisJZnBfZ2V0X2luc3RyX3dvcmQgJWQwLGZwX2Vycl91YTEKKwlsZWEJKC0yLCVhMCwlZDAubCksJWEwCisxOglwcmludGYJUERFQ09ERSwiJXgiLDEsJWEwCisJbW92ZS5sCSVkMiwlZDAKKwlzd2FwCSVkMAorCWpzcglmcF9jb21wdXRlX2NvbmQKKwl0c3QubAklZDAKKwlqZXEJMWYKKwlmcF9wdXRfcGMgJWEwLDEKKzE6CXByaW50ZglQREVDT0RFLCJcbiIKKwlqcmEJZnBfZW5kCisKK2ZwX2ZkYmNjOgorCXByaW50ZglQREVDT0RFLCJmZGJjYyAiCisJZnBfZ2V0X3BjICVhMQkJCQl8IGNhbGN1bGF0ZSBuZXcgcGMKKwlmcF9nZXRfaW5zdHJfd29yZCAlZDAsZnBfZXJyX3VhMQorCWFkZC53CSVkMCwlYTEKKwlmcF9kZWNvZGVfYWRkcl9yZWcKKwlwcmludGYJUERFQ09ERSwiZCVkLCV4XG4iLDIsJWQwLCVhMQorCXN3YXAJJWQxCQkJCXwgdGVzdCBjb25kaXRpb24gaW4gJWQxCisJdHN0LncJJWQxCisJam5lCTJmCisJbW92ZS5sCSVkMCwlZDEKKwlqc3IJZnBfZ2V0X2RhdGFfcmVnCisJc3VicS53CSMxLCVkMAorCWpjcwkxZgorCWZwX3B1dF9wYyAlYTEsMQorMToJanNyCWZwX3B1dF9kYXRhX3JlZworMjoJanJhCWZwX2VuZAorCit8IHNldCBmbGFncyBmb3IgZGVjb2RlIG1hY3JvcyBmb3IgZnM8Y2M+Citkb19mc2NjPTEKK2RvX25vX3BjX21vZGU9MQorCitmcF9mc2NjOgorCXByaW50ZglQREVDT0RFLCJmc2NjICIKKwltb3ZlLmwJJWQyLCVkMAorCWpzcglmcF9jb21wdXRlX2NvbmQKKwltb3ZlLncJJWQwLCVkMQorCXN3YXAJJWQxCisKKwl8IGRlY29kZSBhZGRyZXNzaW5nIG1vZGUKKwlmcF9kZWNvZGVfYWRkcl9tb2RlCisKKwkubG9uZwlmcF9kYXRhLCBmcF9mZGJjYworCS5sb25nCWZwX2luZGlyZWN0LCBmcF9wb3N0aW5jCisJLmxvbmcJZnBfcHJlZGVjciwgZnBfZGlzcDE2CisJLmxvbmcJZnBfZXh0bW9kZTAsIGZwX2V4dG1vZGUxCisKKwl8IGFkZHJlc3NpbmcgbW9kZTogZGF0YSByZWdpc3RlciBkaXJlY3QKK2ZwX2RhdGE6CisJZnBfbW9kZV9kYXRhX2RpcmVjdAorCW1vdmUudwklZDAsJWQxCQkJfCBzYXZlIHJlZ2lzdGVyIG5yCisJanNyCWZwX2dldF9kYXRhX3JlZworCXN3YXAJJWQxCisJbW92ZS5iCSVkMSwlZDAKKwlzd2FwCSVkMQorCWpzcglmcF9wdXRfZGF0YV9yZWcKKwlwcmludGYJUERFQ09ERSwiXG4iCisJanJhCWZwX2VuZAorCitmcF9pbmRpcmVjdDoKKwlmcF9tb2RlX2FkZHJfaW5kaXJlY3QKKwlqcmEJZnBfZG9fc2NjCisKK2ZwX3Bvc3RpbmM6CisJZnBfbW9kZV9hZGRyX2luZGlyZWN0X3Bvc3RpbmMKKwlqcmEJZnBfZG9fc2NjCisKK2ZwX3ByZWRlY3I6CisJZnBfbW9kZV9hZGRyX2luZGlyZWN0X3ByZWRlYworCWpyYQlmcF9kb19zY2MKKworZnBfZGlzcDE2OgorCWZwX21vZGVfYWRkcl9pbmRpcmVjdF9kaXNwMTYKKwlqcmEJZnBfZG9fc2NjCisKK2ZwX2V4dG1vZGUwOgorCWZwX21vZGVfYWRkcl9pbmRpcmVjdF9leHRtb2RlMAorCWpyYQlmcF9kb19zY2MKKworZnBfZXh0bW9kZTE6CisJYmZleHR1CSVkMnsjMTMsIzN9LCVkMAorCWptcAkoWzBmOncsJXBjLCVkMCo0XSkKKworCS5hbGlnbgk0CiswOgorCS5sb25nCWZwX2Fic29sdXRlX3Nob3J0LCBmcF9hYnNvbHV0ZV9sb25nCisJLmxvbmcJZnBfaWxsLCBmcF9pbGwJCXwgTk9URToganVtcCBoZXJlIHRvIGZ0cmFwLngKKwkubG9uZwlmcF9pbGwsIGZwX2lsbAorCS5sb25nCWZwX2lsbCwgZnBfaWxsCisKK2ZwX2Fic29sdXRlX3Nob3J0OgorCWZwX21vZGVfYWJzX3Nob3J0CisJanJhCWZwX2RvX3NjYworCitmcF9hYnNvbHV0ZV9sb25nOgorCWZwX21vZGVfYWJzX2xvbmcKK3wJanJhCWZwX2RvX3NjYworCitmcF9kb19zY2M6CisJc3dhcAklZDEKKwlwdXR1c2VyLmIgJWQxLCglYTApLGZwX2Vycl91YTEsJWEwCisJcHJpbnRmCVBERUNPREUsIlxuIgorCWpyYQlmcF9lbmQKKworCisjZGVmaW5lIHRzdF9OQU4JYnRzdCAjMjQsJWQxCisjZGVmaW5lIHRzdF9aCWJ0c3QgIzI2LCVkMQorI2RlZmluZSB0c3RfTglidHN0ICMyNywlZDEKKworZnBfY29tcHV0ZV9jb25kOgorCW1vdmUubAkoRlBEX0ZQU1IsRlBEQVRBKSwlZDEKKwlidHN0CSM0LCVkMAorCWplcQkxZgorCXRzdF9OQU4KKwlqZXEJMWYKKwlic2V0CSMxNSwlZDEKKwlic2V0CSM3LCVkMQorCW1vdmUubAklZDEsKEZQRF9GUFNSLEZQREFUQSkKKzE6CWFuZC53CSMweGYsJWQwCisJam1wCShbMGY6dywlcGMsJWQwLncqNF0pCisKKwkuYWxpZ24JNAorMDoKKwkubG9uZwlmcF9mICAsIGZwX2VxICwgZnBfb2d0LCBmcF9vZ2UKKwkubG9uZwlmcF9vbHQsIGZwX29sZSwgZnBfb2dsLCBmcF9vcgorCS5sb25nCWZwX3VuICwgZnBfdWVxLCBmcF91Z3QsIGZwX3VnZQorCS5sb25nCWZwX3VsdCwgZnBfdWxlLCBmcF9uZSAsIGZwX3QKKworZnBfZjoKKwltb3ZlcQkjMCwlZDAKKwlydHMKKworZnBfZXE6CisJbW92ZXEJIzAsJWQwCisJdHN0X1oKKwlqZXEJMWYKKwltb3ZlcQkjLTEsJWQwCisxOglydHMKKworZnBfb2d0OgorCW1vdmVxCSMwLCVkMAorCXRzdF9OQU4KKwlqbmUJMWYKKwl0c3RfWgorCWpuZQkxZgorCXRzdF9OCisJam5lCTFmCisJbW92ZXEJIy0xLCVkMAorMToJcnRzCisKK2ZwX29nZToKKwltb3ZlcQkjLTEsJWQwCisJdHN0X1oKKwlqbmUJMmYKKwl0c3RfTkFOCisJam5lCTFmCisJdHN0X04KKwlqZXEJMmYKKzE6CW1vdmVxCSMwLCVkMAorMjoJcnRzCisKK2ZwX29sdDoKKwltb3ZlcQkjMCwlZDAKKwl0c3RfTkFOCisJam5lCTFmCisJdHN0X1oKKwlqbmUJMWYKKwl0c3RfTgorCWplcQkxZgorCW1vdmVxCSMtMSwlZDAKKzE6CXJ0cworCitmcF9vbGU6CisJbW92ZXEJIy0xLCVkMAorCXRzdF9aCisJam5lCTJmCisJdHN0X05BTgorCWpuZQkxZgorCXRzdF9OCisJam5lCTJmCisxOgltb3ZlcQkjMCwlZDAKKzI6CXJ0cworCitmcF9vZ2w6CisJbW92ZXEJIzAsJWQwCisJdHN0X05BTgorCWpuZQkxZgorCXRzdF9aCisJam5lCTFmCisJbW92ZXEJIy0xLCVkMAorMToJcnRzCisKK2ZwX29yOgorCW1vdmVxCSMwLCVkMAorCXRzdF9OQU4KKwlqbmUJMWYKKwltb3ZlcQkjLTEsJWQwCisxOglydHMKKworZnBfdW46CisJbW92ZXEJIzAsJWQwCisJdHN0X05BTgorCWplcQkxZgorCW1vdmVxCSMtMSwlZDAKKwlydHMKKworZnBfdWVxOgorCW1vdmVxCSMtMSwlZDAKKwl0c3RfTkFOCisJam5lCTFmCisJdHN0X1oKKwlqbmUJMWYKKwltb3ZlcQkjMCwlZDAKKzE6CXJ0cworCitmcF91Z3Q6CisJbW92ZXEJIy0xLCVkMAorCXRzdF9OQU4KKwlqbmUJMmYKKwl0c3RfTgorCWpuZQkxZgorCXRzdF9aCisJamVxCTJmCisxOgltb3ZlcQkjMCwlZDAKKzI6CXJ0cworCitmcF91Z2U6CisJbW92ZXEJIy0xLCVkMAorCXRzdF9OQU4KKwlqbmUJMWYKKwl0c3RfWgorCWpuZQkxZgorCXRzdF9OCisJamVxCTFmCisJbW92ZXEJIzAsJWQwCisxOglydHMKKworZnBfdWx0OgorCW1vdmVxCSMtMSwlZDAKKwl0c3RfTkFOCisJam5lCTJmCisJdHN0X1oKKwlqbmUJMWYKKwl0c3RfTgorCWpuZQkyZgorMToJbW92ZXEJIzAsJWQwCisyOglydHMKKworZnBfdWxlOgorCW1vdmVxCSMtMSwlZDAKKwl0c3RfTkFOCisJam5lCTFmCisJdHN0X1oKKwlqbmUJMWYKKwl0c3RfTgorCWpuZQkxZgorCW1vdmVxCSMwLCVkMAorMToJcnRzCisKK2ZwX25lOgorCW1vdmVxCSMwLCVkMAorCXRzdF9aCisJam5lCTFmCisJbW92ZXEJIy0xLCVkMAorMToJcnRzCisKK2ZwX3Q6CisJbW92ZXEJIy0xLCVkMAorCXJ0cwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hdGgtZW11L2ZwX2RlY29kZS5oIGIvYXJjaC9tNjhrL21hdGgtZW11L2ZwX2RlY29kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1OTY3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfZGVjb2RlLmgKQEAgLTAsMCArMSw0MTcgQEAKKy8qCisgKiBmcF9kZWNvZGUuaAorICoKKyAqIENvcHlyaWdodCBSb21hbiBaaXBwZWwsIDE5OTcuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICogICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMgcHJvZHVjdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUKKyAqIHJlcXVpcmVkIElOU1RFQUQgT0YgdGhlIGFib3ZlIHJlc3RyaWN0aW9ucy4gIChUaGlzIGNsYXVzZSBpcworICogbmVjZXNzYXJ5IGR1ZSB0byBhIHBvdGVudGlhbCBiYWQgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgR1BMIGFuZAorICogdGhlIHJlc3RyaWN0aW9ucyBjb250YWluZWQgaW4gYSBCU0Qtc3R5bGUgY29weXJpZ2h0LikKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfRlBfREVDT0RFX0gKKyNkZWZpbmUgX0ZQX0RFQ09ERV9ICisKKy8qIFRoZXNlIG1hY3JvcyBkbyB0aGUgZGlydHkgd29yayBvZiB0aGUgaW5zdHIgZGVjb2RpbmcsIHNldmVyYWwgdmFyaWFibGVzCisgKiBjYW4gYmUgZGVmaW5lZCBpbiB0aGUgc291cmNlIGZpbGUgdG8gbW9kaWZ5IHRoZSB3b3JrIG9mIHRoZXNlIG1hY3JvcywKKyAqIGN1cnJlbnRseSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBhcmUgdXNlZDoKKyAqIC4uLgorICogVGhlIHJlZ2lzdGVyIHVzYWdlOgorICogZDAgLSB3aWxsIGNvbnRhaW4gc291cmNlIG9wZXJhbmQgZm9yIGRhdGEgZGlyZWN0IG1vZGUsCisgKglvdGhlcndpc2Ugc2NyYXRjaCByZWdpc3RlcgorICogZDEgLSB1cHBlciAxNmJpdCBhcmUgcmVzZXJ2ZWQgZm9yIGNhbGxlcgorICoJbG93ZXIgMTZiaXQgbWF5IGNvbnRhaW4gZnVydGhlciBhcmd1bWVudHMsCisgKglpcyBkZXN0cm95ZWQgZHVyaW5nIGRlY29kaW5nCisgKiBkMiAtIGNvbnRhaW5zIGZpcnN0IHR3byBpbnN0cnVjdGlvbiB3b3JkcywKKyAqCWZpcnN0IHdvcmQgd2lsbCBiZSB1c2VkIGZvciBleHRlbnNpb24gd29yZAorICogYTAgLSB3aWxsIHBvaW50IHRvIHNvdXJjZS9kZXN0IG9wZXJhbmQgZm9yIGFueSBpbmRpcmVjdCBtb2RlCisgKglvdGhlcndpc2Ugc2NyYXRjaCByZWdpc3RlcgorICogYTEgLSBzY3JhdGNoIHJlZ2lzdGVyCisgKiBhMiAtIGJhc2UgYWRkciB0byB0aGUgdGFzayBzdHJ1Y3R1cmUKKyAqCisgKiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IGNoZWNrIGZvciBldmVyeSBkaXNhbGxvd2VkCisgKiBhZGRyZXNzaW5nIG1vZGUgKGUuZy4gcGMgcmVsYXRpdmUgbW9kZXMgYXMgZGVzdGluYXRpb24pLCBhcyBsb25nCisgKiBhcyBpdCBvbmx5IG1lYW5zIGEgbmV3IGFkZHJlc3NpbmcgbW9kZSwgd2hpY2ggc2hvdWxkIG5vdCBhcHBlYXIKKyAqIGluIGEgcHJvZ3JhbSBhbmQgdGhhdCBkb2Vzbid0IGNyYXNoIHRoZSBlbXVsYXRpb24sIEkgdGhpbmsgaXQncworICogbm90IGEgcHJvYmxlbSB0byBhbGxvdyB0aGVzZSBtb2Rlcy4KKyAqLworCitkb19mbW92ZW09MAorZG9fZm1vdmVtX2NyPTAKK2RvX25vX3BjX21vZGU9MAorZG9fZnNjYz0wCisKK3wgZmlyc3QgZGVjb2Rpbmcgb2YgdGhlIGluc3RyIHR5cGUKK3wgdGhpcyBzZXBhcmF0ZXMgdGhlIGNvbmRpdGlvbmFsIGluc3RyCisubWFjcm8JZnBfZGVjb2RlX2NvbmRfaW5zdHJfdHlwZQorCWJmZXh0dQklZDJ7IzgsIzJ9LCVkMAorCWptcAkoWzBmOncsJXBjLCVkMCo0XSkKKworCS5hbGlnbgk0CiswOgorfAkubG9uZwkiZjxvcD4iLCJmc2NjL2ZkYmNjIgorfAkubG9uZwkiZmJjY3ciLCJmYmNjbCIKKy5lbmRtCisKK3wgc2Vjb25kIGRlY29kaW5nIG9mIHRoZSBpbnN0ciB0eXBlCit8IHRoaXMgc2VwYXJhdGVzIG1vc3QgbW92ZSBpbnN0cgorLm1hY3JvCWZwX2RlY29kZV9tb3ZlX2luc3RyX3R5cGUKKwliZmV4dHUJJWQyeyMxNiwjM30sJWQwCisJam1wCShbMGY6dywlcGMsJWQwKjRdKQorCisJLmFsaWduCTQKKzA6Cit8CS5sb25nCSJmPG9wPiBmcHgsZnB4IiwiaW52YWxpZCBpbnN0ciIKK3wJLmxvbmcJImY8b3A+IDxlYT4sZnB4IiwiZm1vdmUgZnB4LDxlYT4iCit8CS5sb25nCSJmbW92ZW0gPGVhPixmcGNyIiwiZm1vdmVtIDxlYT4sZnB4IgorfAkubG9uZwkiZm1vdmVtIGZwY3IsPGVhPiIsImZtb3ZlbSBmcHgsPGVhPiIKKy5lbmRtCisKK3wgZXh0cmFjdCB0aGUgc291cmNlIHNwZWNpZmllciwgc3BlY2lmaWVzCit8IGVpdGhlciBzb3VyY2UgZnAgcmVnaXN0ZXIgb3IgZGF0YSBmb3JtYXQKKy5tYWNybwlmcF9kZWNvZGVfc291cmNlc3BlYworCWJmZXh0dQklZDJ7IzE5LCMzfSwlZDAKKy5lbmRtCisKK3wgZGVjb2RlIGRlc3RpbmF0aW9uIGZvcm1hdCBmb3IgZm1vdmUgcmVnLGVhCisubWFjcm8JZnBfZGVjb2RlX2Rlc3RfZm9ybWF0CisJYmZleHR1CSVkMnsjMTksIzN9LCVkMAorLmVuZG0KKworfCBkZWNvZGUgc291cmNlIHJlZ2lzdGVyIGZvciBmbW92ZSByZWcsZWEKKy5tYWNybwlmcF9kZWNvZGVfc3JjX3JlZworCWJmZXh0dQklZDJ7IzIyLCMzfSwlZDAKKy5lbmRtCisKK3wgZXh0cmFjdCB0aGUgYWRkcmVzc2luZyBtb2RlCit8IGl0IGRlcGVuZHMgb24gdGhlIGluc3RyIHdoaWNoIG9mIHRoZSBtb2RlcyBpcyB2YWxpZAorLm1hY3JvCWZwX2RlY29kZV9hZGRyX21vZGUKKwliZmV4dHUJJWQyeyMxMCwjM30sJWQwCisJam1wCShbMGY6dywlcGMsJWQwKjRdKQorCisJLmFsaWduCTQKKzA6Cit8CS5sb25nCSJkYXRhIHJlZ2lzdGVyIGRpcmVjdCIsImFkZHIgcmVnaXN0ZXIgZGlyZWN0IgorfAkubG9uZwkiYWRkciByZWdpc3RlciBpbmRpcmVjdCIKK3wJLmxvbmcJImFkZHIgcmVnaXN0ZXIgaW5kaXJlY3QgcG9zdGluY3JlbWVudCIKK3wJLmxvbmcJImFkZHIgcmVnaXN0ZXIgaW5kaXJlY3QgcHJlZGVjcmVtZW50IgorfAkubG9uZwkiYWRkciByZWdpc3RlciArIGluZGV4MTYiCit8CS5sb25nCSJleHRlbnNpb24gbW9kZTEiLCJleHRlbnNpb24gbW9kZTIiCisuZW5kbQorCit8IGV4dHJhY3QgdGhlIHJlZ2lzdGVyIGZvciB0aGUgYWRkcmVzc2luZyBtb2RlCisubWFjcm8JZnBfZGVjb2RlX2FkZHJfcmVnCisJYmZleHR1CSVkMnsjMTMsIzN9LCVkMAorLmVuZG0KKworfCBkZWNvZGUgdGhlIDhiaXQgZGlwbGFjZW1lbnQgZnJvbSB0aGUgYnJpZWYgZXh0ZW5zaW9uIHdvcmQKKy5tYWNybwlmcF9kZWNvZGVfZGlzcDgKKwltb3ZlLmIJJWQyLCVkMAorCWV4dC53CSVkMAorLmVuZG0KKworfCBkZWNvZGUgdGhlIGluZGV4IG9mIHRoZSBicmllZi9mdWxsIGV4dGVuc2lvbiB3b3JkCisubWFjcm8JZnBfZGVjb2RlX2luZGV4CisJYmZleHR1CSVkMnsjMTcsIzN9LCVkMAkJfCBnZXQgdGhlIHJlZ2lzdGVyIG5yCisJYnRzdAkjMTUsJWQyCQkJfCB0ZXN0IGZvciBkYXRhL2FkZHIgcmVnaXN0ZXIKKwlqbmUJMVxAZgorCXByaW50ZglQREVDT0RFLCJkJWQiLDEsJWQwCisJanNyCWZwX2dldF9kYXRhX3JlZworCWpyYQkyXEBmCisxXEA6CXByaW50ZglQREVDT0RFLCJhJWQiLDEsJWQwCisJanNyCWZwX2dldF9hZGRyX3JlZworCW1vdmUubAklYTAsJWQwCisyXEA6CitkZWJ1ZwlsZWEJIidsJy53LCVhMCIKKwlidHN0CSMxMSwlZDIJCQl8IDE2LzMyIGJpdCBzaXplPworCWpuZQkzXEBmCitkZWJ1ZwlsZWEJIid3Jy53LCVhMCIKKwlleHQubAklZDAKKzNcQDoJcHJpbnRmCVBERUNPREUsIjolYyIsMSwlYTAKKwltb3ZlLncJJWQyLCVkMQkJCXwgc2NhbGUgZmFjdG9yCisJcm9sLncJIzcsJWQxCisJYW5kLncJIzMsJWQxCitkZWJ1Zwltb3ZlLmwJIiVkMSwtKCVzcCkiCitkZWJ1ZwlleHQubAkiJWQxIgorCXByaW50ZglQREVDT0RFLCI6JWQiLDEsJWQxCitkZWJ1Zwltb3ZlLmwJIiglc3ApKywlZDEiCisJbHNsLmwJJWQxLCVkMAorLmVuZG0KKworfCBkZWNvZGUgdGhlIGJhc2UgZGlzcGxhY2VtZW50IHNpemUKKy5tYWNybwlmcF9kZWNvZGVfYmFzZWRpc3AKKwliZmV4dHUJJWQyeyMyNiwjMn0sJWQwCisJam1wCShbMGY6dywlcGMsJWQwKjRdKQorCisJLmFsaWduCTQKKzA6Cit8CS5sb25nCSJyZXNlcnZlZCIsIm51bGwgZGlzcGxhY2VtZW50IgorfAkubG9uZwkid29yZCBkaXNwbGFjZW1lbnQiLCJsb25nIGRpc3BsYWNlbWVudCIKKy5lbmRtCisKKy5tYWNybwlmcF9kZWNvZGVfb3V0ZXJkaXNwCisJYmZleHR1CSVkMnsjMzAsIzJ9LCVkMAorCWptcAkoWzBmOncsJXBjLCVkMCo0XSkKKworCS5hbGlnbgk0CiswOgorfAkubG9uZwkibm8gbWVtb3J5IGluZGlyZWN0IGFjdGlvbi9yZXNlcnZlZCIsIm51bGwgb3V0ZXIgZGlzcGxhY2VtZW50IgorfAkubG9uZwkid29yZCBvdXRlciBkaXNwbGFjZW1lbnQiLCJsb25nIG91dGVyIGRpc3BsYWNlbWVudCIKKy5lbmRtCisKK3wgZ2V0IHRoZSBleHRlbnNpb24gd29yZCBhbmQgdGVzdCBmb3IgYnJpZWYgb3IgZnVsbCBleHRlbnNpb24gdHlwZQorLm1hY3JvCWZwX2dldF90ZXN0X2V4dHdvcmQgbGFiZWwKKwlmcF9nZXRfaW5zdHJfd29yZCAlZDIsZnBfZXJyX3VhMQorCWJ0c3QJIzgsJWQyCisJam5lCVxsYWJlbAorLmVuZG0KKworCit8IHRlc3QgaWYgJXBjIGlzIHRoZSBiYXNlIHJlZ2lzdGVyIGZvciB0aGUgaW5kaXJlY3QgYWRkciBtb2RlCisubWFjcm8JZnBfdGVzdF9iYXNlcmVnX2QxNglsYWJlbAorCWJ0c3QJIzIwLCVkMgorCWplcQlcbGFiZWwKKy5lbmRtCisKK3wgdGVzdCBpZiAlcGMgaXMgdGhlIGJhc2UgcmVnaXN0ZXIgZm9yIG9uZSBvZiB0aGUgZXh0ZW5kZWQgbW9kZXMKKy5tYWNybwlmcF90ZXN0X2Jhc2VyZWdfZXh0CWxhYmVsCisJYnRzdAkjMTksJWQyCisJamVxCVxsYWJlbAorLmVuZG0KKworLm1hY3JvCWZwX3Rlc3Rfc3VwcHJfaW5kZXggbGFiZWwKKwlidHN0CSM2LCVkMgorCWpuZQlcbGFiZWwKKy5lbmRtCisKKworfCBhZGRyZXNzaW5nIG1vZGU6IGRhdGEgcmVnaXN0ZXIgZGlyZWN0CisubWFjcm8JZnBfbW9kZV9kYXRhX2RpcmVjdAorCWZwX2RlY29kZV9hZGRyX3JlZworCXByaW50ZglQREVDT0RFLCJkJWQiLDEsJWQwCisuZW5kbQorCit8IGFkZHJlc3NpbmcgbW9kZTogYWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdAorLm1hY3JvCWZwX21vZGVfYWRkcl9pbmRpcmVjdAorCWZwX2RlY29kZV9hZGRyX3JlZworCXByaW50ZglQREVDT0RFLCIoYSVkKSIsMSwlZDAKKwlqc3IJZnBfZ2V0X2FkZHJfcmVnCisuZW5kbQorCit8IGFkanVzdCBzdGFjayBmb3IgYnl0ZSBtb3ZlcyBmcm9tL3RvIHN0YWNrCisubWFjcm8JZnBfdGVzdF9zcF9ieXRlX21vdmUKKwkuaWYJIWRvX2Ztb3ZlbQorCS5pZglkb19mc2NjCisJbW92ZS53CSM2LCVkMQorCS5lbmRpZgorCWNtcC53CSM3LCVkMAorCWpuZQkxXEBmCisJLmlmCSFkb19mc2NjCisJY21wLncJIzYsJWQxCisJam5lCTFcQGYKKwkuZW5kaWYKKwltb3ZlLncJIzQsJWQxCisxXEA6CisJLmVuZGlmCisuZW5kbQorCit8IGFkZHJlc3NpbmcgbW9kZTogYWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdCB3aXRoIHBvc3RpbmNyZW1lbnQKKy5tYWNybwlmcF9tb2RlX2FkZHJfaW5kaXJlY3RfcG9zdGluYworCWZwX2RlY29kZV9hZGRyX3JlZworCXByaW50ZglQREVDT0RFLCIoYSVkKSsiLDEsJWQwCisJZnBfdGVzdF9zcF9ieXRlX21vdmUKKwlqc3IJZnBfZ2V0X2FkZHJfcmVnCisJbW92ZS5sCSVhMCwlYTEJCQl8IHNhdmUgYWRkcgorCS5pZglkb19mbW92ZW0KKwlsZWEJKCVhMCwlZDEudyo0KSwlYTAKKwkuaWYJIWRvX2Ztb3ZlbV9jcgorCWxlYQkoJWEwLCVkMS53KjgpLCVhMAorCS5lbmRpZgorCS5lbHNlCisJYWRkLncJKGZwX2RhdGFzaXplLCVkMS53KjIpLCVhMAorCS5lbmRpZgorCWpzcglmcF9wdXRfYWRkcl9yZWcKKwltb3ZlLmwJJWExLCVhMAorLmVuZG0KKworfCBhZGRyZXNzaW5nIG1vZGU6IGFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3Qgd2l0aCBwcmVkZWNyZW1lbnQKKy5tYWNybwlmcF9tb2RlX2FkZHJfaW5kaXJlY3RfcHJlZGVjCisJZnBfZGVjb2RlX2FkZHJfcmVnCisJcHJpbnRmCVBERUNPREUsIi0oYSVkKSIsMSwlZDAKKwlmcF90ZXN0X3NwX2J5dGVfbW92ZQorCWpzcglmcF9nZXRfYWRkcl9yZWcKKwkuaWYJZG9fZm1vdmVtCisJLmlmCSFkb19mbW92ZW1fY3IKKwlsZWEJKC0xMiwlYTApLCVhMQkJfCBzZXR1cCB0byBhZGRyIG9mIDFzdCByZWcgdG8gbW92ZQorCW5lZy53CSVkMQorCWxlYQkoJWEwLCVkMS53KjQpLCVhMAorCWFkZC53CSVkMSwlZDEKKwlsZWEJKCVhMCwlZDEudyo0KSwlYTAKKwlqc3IJZnBfcHV0X2FkZHJfcmVnCisJbW92ZS5sCSVhMSwlYTAKKwkuZWxzZQorCW5lZy53CSVkMQorCWxlYQkoJWEwLCVkMS53KjQpLCVhMAorCWpzcglmcF9wdXRfYWRkcl9yZWcKKwkuZW5kaWYKKwkuZWxzZQorCXN1Yi53CShmcF9kYXRhc2l6ZSwlZDEudyoyKSwlYTAKKwlqc3IJZnBfcHV0X2FkZHJfcmVnCisJLmVuZGlmCisuZW5kbQorCit8IGFkZHJlc3NpbmcgbW9kZTogYWRkcmVzcyByZWdpc3Rlci9wcm9ncmFtbSBjb3VudGVyIGluZGlyZWN0Cit8CQkgICB3aXRoIDE2Yml0IGRpc3BsYWNlbWVudAorLm1hY3JvCWZwX21vZGVfYWRkcl9pbmRpcmVjdF9kaXNwMTYKKwkuaWYJIWRvX25vX3BjX21vZGUKKwlmcF90ZXN0X2Jhc2VyZWdfZDE2IDFmCisJcHJpbnRmCVBERUNPREUsInBjIgorCWZwX2dldF9wYyAlYTAKKwlqcmEJMmYKKwkuZW5kaWYKKzE6CWZwX2RlY29kZV9hZGRyX3JlZworCXByaW50ZglQREVDT0RFLCJhJWQiLDEsJWQwCisJanNyCWZwX2dldF9hZGRyX3JlZworMjoJZnBfZ2V0X2luc3RyX3dvcmQgJWExLGZwX2Vycl91YTEKKwlwcmludGYJUERFQ09ERSwiQCgleCkiLDEsJWExCisJYWRkLmwJJWExLCVhMAorLmVuZG0KKworfCBwZXJmb3JtIHByZWluZGV4IChpZiBJL0lTID09IDB4eCBhbmQgeHggIT0gMDApCisubWFjcm8JZnBfZG9fcHJlaW5kZXgKKwltb3ZlcQkjMywlZDAKKwlhbmQudwklZDIsJWQwCisJamVxCTFmCisJYnRzdAkjMiwlZDIKKwlqbmUJMWYKKwlwcmludGYJUERFQ09ERSwiKUAoIgorCWdldHVzZXIubCAoJWExKSwlYTEsZnBfZXJyX3VhMSwlYTEKK2RlYnVnCWpyYQkiMmYiCisxOglwcmludGYJUERFQ09ERSwiLCIKKzI6CisuZW5kbQorCit8IHBlcmZvcm0gcG9zdGluZGV4IChpZiBJL0lTID09IDF4eCkKKy5tYWNybwlmcF9kb19wb3N0aW5kZXgKKwlidHN0CSMyLCVkMgorCWplcQkxZgorCXByaW50ZglQREVDT0RFLCIpQCgiCisJZ2V0dXNlci5sICglYTEpLCVhMSxmcF9lcnJfdWExLCVhMQorZGVidWcJanJhCSIyZiIKKzE6CXByaW50ZglQREVDT0RFLCIsIgorMjoKKy5lbmRtCisKK3wgYWxsIG90aGVyIGluZGlyZWN0IGFkZHJlc3NpbmcgbW9kZXMgd2lsbCBmaW5hbGx5IGVuZCB1cCBoZXJlCisubWFjcm8JZnBfbW9kZV9hZGRyX2luZGlyZWN0X2V4dG1vZGUwCisJLmlmCSFkb19ub19wY19tb2RlCisJZnBfdGVzdF9iYXNlcmVnX2V4dCAxZgorCXByaW50ZglQREVDT0RFLCJwYyIKKwlmcF9nZXRfcGMgJWEwCisJanJhCTJmCisJLmVuZGlmCisxOglmcF9kZWNvZGVfYWRkcl9yZWcKKwlwcmludGYJUERFQ09ERSwiYSVkIiwxLCVkMAorCWpzcglmcF9nZXRfYWRkcl9yZWcKKzI6CW1vdmUubAklYTAsJWExCisJc3dhcAklZDIKKwlmcF9nZXRfdGVzdF9leHR3b3JkIDNmCisJfCBhZGRyZXNzaW5nIG1vZGU6IGFkZHJlc3MgcmVnaXN0ZXIvcHJvZ3JhbW0gY291bnRlciBpbmRpcmVjdAorCXwJCSAgIHdpdGggaW5kZXggYW5kIDhiaXQgZGlzcGxhY2VtZW50CisJZnBfZGVjb2RlX2Rpc3A4CitkZWJ1ZwlleHQubAkiJWQwIgorCXByaW50ZglQREVDT0RFLCJAKCV4LCIsMSwlZDAKKwlhZGQudwklZDAsJWExCisJZnBfZGVjb2RlX2luZGV4CisJYWRkLmwJJWQwLCVhMQorCXByaW50ZglQREVDT0RFLCIpIgorCWpyYQk5ZgorMzoJfCBhZGRyZXNzaW5nIG1vZGU6IGFkZHJlc3MgcmVnaXN0ZXIvcHJvZ3JhbW0gY291bnRlciBtZW1vcnkgaW5kaXJlY3QKKwl8CQkgICB3aXRoIGJhc2UgYW5kL29yIG91dGVyIGRpc3BsYWNlbWVudAorCWJ0c3QJIzcsJWQyCQkJfCBiYXNlIHJlZ2lzdGVyIHN1cHByZXNzZWQ/CisJamVxCTFmCisJcHJpbnRmCVBERUNPREUsIiEiCisJc3ViLmwJJWExLCVhMQorMToJcHJpbnRmCVBERUNPREUsIkAoIgorCWZwX2RlY29kZV9iYXNlZGlzcAorCisJLmxvbmcJZnBfaWxsLDFmCisJLmxvbmcJMmYsM2YKKworI2lmZGVmIEZQVV9FTVVfREVCVUcKKzE6CXByaW50ZglQREVDT0RFLCIwIgkJfCBudWxsIGJhc2UgZGlzcGxhY2VtZW50CisJanJhCTFmCisjZW5kaWYKKzI6CWZwX2dldF9pbnN0cl93b3JkICVhMCxmcF9lcnJfdWExIHwgMTZiaXQgYmFzZSBkaXNwbGFjZW1lbnQKKwlwcmludGYJUERFQ09ERSwiJXg6dyIsMSwlYTAKKwlqcmEJNGYKKzM6CWZwX2dldF9pbnN0cl9sb25nICVhMCxmcF9lcnJfdWExIHwgMzJiaXQgYmFzZSBkaXNwbGFjZW1lbnQKKwlwcmludGYJUERFQ09ERSwiJXg6bCIsMSwlYTAKKzQ6CWFkZC5sCSVhMCwlYTEKKzE6CisJZnBfZG9fcG9zdGluZGV4CisJZnBfdGVzdF9zdXBwcl9pbmRleCAxZgorCWZwX2RlY29kZV9pbmRleAorCWFkZC5sCSVkMCwlYTEKKzE6CWZwX2RvX3ByZWluZGV4CisKKwlmcF9kZWNvZGVfb3V0ZXJkaXNwCisKKwkubG9uZwk1ZiwxZgorCS5sb25nCTJmLDNmCisKKyNpZmRlZiBGUFVfRU1VX0RFQlVHCisxOglwcmludGYJUERFQ09ERSwiMCIJCXwgbnVsbCBvdXRlciBkaXNwbGFjZW1lbnQKKwlqcmEJMWYKKyNlbmRpZgorMjoJZnBfZ2V0X2luc3RyX3dvcmQgJWEwLGZwX2Vycl91YTEgfCAxNmJpdCBvdXRlciBkaXNwbGFjZW1lbnQKKwlwcmludGYJUERFQ09ERSwiJXg6dyIsMSwlYTAKKwlqcmEJNGYKKzM6CWZwX2dldF9pbnN0cl9sb25nICVhMCxmcF9lcnJfdWExIHwgMzJiaXQgb3V0ZXIgZGlzcGxhY2VtZW50CisJcHJpbnRmCVBERUNPREUsIiV4OmwiLDEsJWEwCis0OglhZGQubAklYTAsJWExCisxOgorNToJcHJpbnRmCVBERUNPREUsIikiCis5Ogltb3ZlLmwJJWExLCVhMAorCXN3YXAJJWQyCisuZW5kbQorCit8IGdldCB0aGUgYWJzb2x1dGUgc2hvcnQgYWRkcmVzcyBmcm9tIHVzZXIgc3BhY2UKKy5tYWNybwlmcF9tb2RlX2Fic19zaG9ydAorCWZwX2dldF9pbnN0cl93b3JkICVhMCxmcF9lcnJfdWExCisJcHJpbnRmCVBERUNPREUsIiV4LnciLDEsJWEwCisuZW5kbQorCit8IGdldCB0aGUgYWJzb2x1dGUgbG9uZyBhZGRyZXNzIGZyb20gdXNlciBzcGFjZQorLm1hY3JvCWZwX21vZGVfYWJzX2xvbmcKKwlmcF9nZXRfaW5zdHJfbG9uZyAlYTAsZnBfZXJyX3VhMQorCXByaW50ZglQREVDT0RFLCIleC5sIiwxLCVhMAorLmVuZG0KKworI2VuZGlmIC8qIF9GUF9ERUNPREVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hdGgtZW11L2ZwX2VtdS5oIGIvYXJjaC9tNjhrL21hdGgtZW11L2ZwX2VtdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNmVkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfZW11LmgKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBmcF9lbXUuaAorICoKKyAqIENvcHlyaWdodCBSb21hbiBaaXBwZWwsIDE5OTcuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgYW5kIHRoZSBlbnRpcmUgcGVybWlzc2lvbiBub3RpY2UgaW4gaXRzIGVudGlyZXR5LAorICogICAgaW5jbHVkaW5nIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMgcHJvZHVjdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUKKyAqIHJlcXVpcmVkIElOU1RFQUQgT0YgdGhlIGFib3ZlIHJlc3RyaWN0aW9ucy4gIChUaGlzIGNsYXVzZSBpcworICogbmVjZXNzYXJ5IGR1ZSB0byBhIHBvdGVudGlhbCBiYWQgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgR1BMIGFuZAorICogdGhlIHJlc3RyaWN0aW9ucyBjb250YWluZWQgaW4gYSBCU0Qtc3R5bGUgY29weXJpZ2h0LikKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfRlBfRU1VX0gKKyNkZWZpbmUgX0ZQX0VNVV9ICisKKyNpZmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vb2Zmc2V0cy5oPgorI2VuZGlmCisjaW5jbHVkZSA8YXNtL21hdGgtZW11Lmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgSVNfSU5GKGEpICgoYSktPmV4cCA9PSAweDdmZmYpCisjZGVmaW5lIElTX1pFUk8oYSkgKChhKS0+bWFudC5tNjQgPT0gMCkKKworCisjZGVmaW5lIGZwX3NldF9zcihiaXQpICh7CQkJCQlcCisJRlBEQVRBLT5mcHNyIHw9IDEgPDwgKGJpdCk7CQkJCVwKK30pCisKKyNkZWZpbmUgZnBfc2V0X3F1b3RpZW50KHF1b3RpZW50KSAoewkJCQlcCisJRlBEQVRBLT5mcHNyICY9IDB4ZmYwMGZmZmY7CQkJCVwKKwlGUERBVEEtPmZwc3IgfD0gKChxdW90aWVudCkgJiAweGZmKSA8PCAxNjsJCVwKK30pCisKKy8qIGxpbmthZ2UgZm9yIHNldmVyYWwgdXNlZnVsIGZ1bmN0aW9ucyAqLworCisvKiBOb3JtYWxpemUgdGhlIGV4dGVuZGVkIHN0cnVjdCwgcmV0dXJuIDAgZm9yIGEgTmFOICovCisjZGVmaW5lIGZwX25vcm1hbGl6ZV9leHQoZnByZWcpICh7CQkJCVwKKwlyZWdpc3RlciBzdHJ1Y3QgZnBfZXh0ICpyZWcgYXNtICgiYTAiKSA9IGZwcmVnOwkJXAorCXJlZ2lzdGVyIGludCByZXMgYXNtICgiZDAiKTsJCQkJXAorCQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlICgianNyIGZwX2NvbnZfZXh0MmV4dCIJCQlcCisJCQk6ICI9ZCIgKHJlcykgOiAiYSIgKHJlZykJCVwKKwkJCTogImExIiwgImQxIiwgImQyIiwgIm1lbW9yeSIpOwkJXAorCXJlczsJCQkJCQkJXAorfSkKKworI2RlZmluZSBmcF9jb3B5X2V4dChkZXN0LCBzcmMpICh7CQkJCVwKKwkqZGVzdCA9ICpzcmM7CQkJCQkJXAorfSkKKworI2RlZmluZSBmcF9tb25hZGljX2NoZWNrKGRlc3QsIHNyYykgKHsJCQkJXAorCWZwX2NvcHlfZXh0KGRlc3QsIHNyYyk7CQkJCQlcCisJaWYgKCFmcF9ub3JtYWxpemVfZXh0KGRlc3QpKQkJCQlcCisJCXJldHVybiBkZXN0OwkJCQkJXAorfSkKKworI2RlZmluZSBmcF9keWFkaWNfY2hlY2soZGVzdCwgc3JjKSAoewkJCQlcCisJaWYgKCFmcF9ub3JtYWxpemVfZXh0KGRlc3QpKQkJCQlcCisJCXJldHVybiBkZXN0OwkJCQkJXAorCWlmICghZnBfbm9ybWFsaXplX2V4dChzcmMpKSB7CQkJCVwKKwkJZnBfY29weV9leHQoZGVzdCwgc3JjKTsJCQkJXAorCQlyZXR1cm4gZGVzdDsJCQkJCVwKKwl9CQkJCQkJCVwKK30pCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZnBfZXh0IGZwX1FOYU47CitleHRlcm4gY29uc3Qgc3RydWN0IGZwX2V4dCBmcF9JbmY7CisKKyNkZWZpbmUgZnBfc2V0X25hbihkZXN0KSAoewkJCQkJXAorCWZwX3NldF9zcihGUFNSX0VYQ19PUEVSUik7CQkJCVwKKwkqZGVzdCA9IGZwX1FOYU47CQkJCQlcCit9KQorCisvKiBUT0RPIGNoZWNrIHJvdW5kaW5nIG1vZGU/ICovCisjZGVmaW5lIGZwX3NldF9vdnJmbHcoZGVzdCkgKHsJCQkJCVwKKwlmcF9zZXRfc3IoRlBTUl9FWENfT1ZGTCk7CQkJCVwKKwlkZXN0LT5leHAgPSAweDdmZmY7CQkJCQlcCisJZGVzdC0+bWFudC5tNjQgPSAwOwkJCQkJXAorfSkKKworI2RlZmluZSBmcF9jb252X2V4dDJsb25nKHNyYykgKHsJCQkJXAorCXJlZ2lzdGVyIHN0cnVjdCBmcF9leHQgKl9fc3JjIGFzbSAoImEwIikgPSBzcmM7CQlcCisJcmVnaXN0ZXIgaW50IF9fcmVzIGFzbSAoImQwIik7CQkJCVwKKwkJCQkJCQkJXAorCWFzbSB2b2xhdGlsZSAoImpzciBmcF9jb252X2V4dDJsb25nIgkJCVwKKwkJCTogIj1kIiAoX19yZXMpIDogImEiIChfX3NyYykJCVwKKwkJCTogImExIiwgImQxIiwgImQyIiwgIm1lbW9yeSIpOwkJXAorCV9fcmVzOwkJCQkJCQlcCit9KQorCisjZGVmaW5lIGZwX2NvbnZfbG9uZzJleHQoZGVzdCwgc3JjKSAoewkJCQlcCisJcmVnaXN0ZXIgc3RydWN0IGZwX2V4dCAqX19kZXN0IGFzbSAoImEwIikgPSBkZXN0OwlcCisJcmVnaXN0ZXIgaW50IF9fc3JjIGFzbSAoImQwIikgPSBzcmM7CQkJXAorCQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlICgianNyIGZwX2NvbnZfZXh0MmxvbmciCQkJXAorCQkJOiA6ICJkIiAoX19zcmMpLCAiYSIgKF9fZGVzdCkJCVwKKwkJCTogImExIiwgImQxIiwgImQyIiwgIm1lbW9yeSIpOwkJXAorfSkKKworI2Vsc2UgLyogX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBzZXQsIHJlc2V0IG9yIGNsZWFyIGEgYml0IGluIHRoZSBmcCBzdGF0dXMgcmVnaXN0ZXIKKyAqLworLm1hY3JvCWZwX3NldF9zcgliaXQKKwlic2V0CSMoXGJpdCY3KSwoRlBEX0ZQU1IrMy0oXGJpdC84KSxGUERBVEEpCisuZW5kbQorCisubWFjcm8JZnBfY2xyX3NyCWJpdAorCWJjbHIJIyhcYml0JjcpLChGUERfRlBTUiszLShcYml0LzgpLEZQREFUQSkKKy5lbmRtCisKKy5tYWNybwlmcF90c3Rfc3IJYml0CisJYnRzdAkjKFxiaXQmNyksKEZQRF9GUFNSKzMtKFxiaXQvOCksRlBEQVRBKQorLmVuZG0KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0ZQX0VNVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWF0aC1lbXUvZnBfZW50cnkuUyBiL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9lbnRyeS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYzJkOTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfZW50cnkuUwpAQCAtMCwwICsxLDMyNSBAQAorLyoKKyAqIGZwX2VtdS5TCisgKgorICogQ29weXJpZ2h0IFJvbWFuIFppcHBlbCwgMTk5Ny4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCBhbmQgdGhlIGVudGlyZSBwZXJtaXNzaW9uIG5vdGljZSBpbiBpdHMgZW50aXJldHksCisgKiAgICBpbmNsdWRpbmcgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQUxURVJOQVRJVkVMWSwgdGhpcyBwcm9kdWN0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZQorICogcmVxdWlyZWQgSU5TVEVBRCBPRiB0aGUgYWJvdmUgcmVzdHJpY3Rpb25zLiAgKFRoaXMgY2xhdXNlIGlzCisgKiBuZWNlc3NhcnkgZHVlIHRvIGEgcG90ZW50aWFsIGJhZCBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBHUEwgYW5kCisgKiB0aGUgcmVzdHJpY3Rpb25zIGNvbnRhaW5lZCBpbiBhIEJTRC1zdHlsZSBjb3B5cmlnaHQuKQorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9lbnRyeS5oPgorCisjaW5jbHVkZSAiZnBfZW11LmgiCisKKwkuZ2xvYmwJZnB1X2VtdQorCS5nbG9ibAlmcF9kZWJ1Z3ByaW50CisJLmdsb2JsCWZwX2Vycl91YTEsZnBfZXJyX3VhMgorCisJLnRleHQKK2ZwdV9lbXU6CisJU0FWRV9BTExfSU5UCisJR0VUX0NVUlJFTlQoJWQwKQorCisjaWYgZGVmaW5lZChDUFVfTTY4MDIwX09SX002ODAzMCkgJiYgZGVmaW5lZChDUFVfTTY4MDQwX09SX002ODA2MCkKKyAgICAgICAgdHN0LmwJbTY4a19pczA0MG9yMDYwCisgICAgICAgIGplcQkxZgorI2VuZGlmCisjaWYgZGVmaW5lZChDUFVfTTY4MDQwX09SX002ODA2MCkKKwltb3ZlLmwJKEZQU19QQzIsJXNwKSwoRlBTX1BDLCVzcCkKKyNlbmRpZgorMToKKwl8IGVtdWxhdGUgdGhlIGluc3RydWN0aW9uCisJanNyCWZwX3NjYW4KKworI2lmIGRlZmluZWQoQ09ORklHX002ODA2MCkKKyNpZiAhZGVmaW5lZChDUFVfTTY4MDYwX09OTFkpCisJYnRzdAkjMyxtNjhrX2NwdXR5cGUrMworCWplcQkxZgorI2VuZGlmCisJYnRzdAkjNywoRlBTX1NSLCVzcCkKKwlqbmUJZnBfc2VuZHRyYWNlMDYwCisjZW5kaWYKKzE6CisJfCBlbXVsYXRpb24gc3VjY2Vzc2Z1bD8KKwl0c3QubAklZDAKKwlqZXEJcmV0X2Zyb21fZXhjZXB0aW9uCisKKwl8IHNlbmQgc29tZSBzaWduYWwgdG8gcHJvZ3JhbSBoZXJlCisKKwlqcmEJcmV0X2Zyb21fZXhjZXB0aW9uCisKKwl8IHdlIGp1bXAgaGVyZSBhZnRlciBhbiBhY2Nlc3MgZXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGFjY2VzcworCXwgdXNlciBzcGFjZSwgd2UgY29ycmVjdCBzdGFja3BvaW50ZXIgYW5kIHNlbmQgYSBTSUdTRUdWIHRvCisJfCB0aGUgdXNlciBwcm9jZXNzCitmcF9lcnJfdWEyOgorCWFkZHEubAkjNCwlc3AKK2ZwX2Vycl91YTE6CisJYWRkcS5sCSM0LCVzcAorCW1vdmUubAklYTAsLSglc3ApCisJcGVhCVNFR1ZfTUFQRVJSCisJcGVhCVNJR1NFR1YKKwlqc3IJZnBlbXVfc2lnbmFsCisJYWRkLncJIzEyLCVzcAorCWpyYQlyZXRfZnJvbV9leGNlcHRpb24KKworI2lmIGRlZmluZWQoQ09ORklHX002ODA2MCkKKwl8IHNlbmQgYSB0cmFjZSBzaWduYWwgaWYgd2UgYXJlIGRlYnVnZ2VkCisJfCBpdCBkb2VzIG5vdCByZWFsbHkgYmVsb25nIGhlcmUsIGJ1dC4uLgorZnBfc2VuZHRyYWNlMDYwOgorCW1vdmUubAkoRlBTX1BDLCVzcCksLSglc3ApCisJcGVhCVRSQVBfVFJBQ0UKKwlwZWEJU0lHVFJBUAorCWpzcglmcGVtdV9zaWduYWwKKwlhZGQudwkjMTIsJXNwCisJanJhCXJldF9mcm9tX2V4Y2VwdGlvbgorI2VuZGlmCisKKwkuZ2xvYmwJZnBfZ2V0X2RhdGFfcmVnLCBmcF9wdXRfZGF0YV9yZWcKKwkuZ2xvYmwJZnBfZ2V0X2FkZHJfcmVnLCBmcF9wdXRfYWRkcl9yZWcKKworCXwgRW50cnkgcG9pbnRzIHRvIGdldC9wdXQgYSByZWdpc3Rlci4gU29tZSBvZiB0aGVtIGNhbiBiZSBnZXQvcHV0CisJfCBkaXJlY3RseSwgb3RoZXJzIGFyZSBvbiB0aGUgc3RhY2ssIGFzIHdlIHJlYWQvd3JpdGUgdGhlIHN0YWNrCisJfCBkaXJlY3RseSBoZXJlLCB0aGVzZSBmdW5jdGlvbiBtYXkgb25seSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4KKwl8IGluc3RydWN0aW9uIGRlY29kaW5nLCBvdGhlcndpc2UgdGhlIHN0YWNrIHBvaW50ZXIgaXMgaW5jb3JyZWN0CisJfCBhbmQgdGhlIHN0YWNrIGdldHMgY29ycnVwdGVkLgorZnBfZ2V0X2RhdGFfcmVnOgorCWptcAkoWzBmOncsJXBjLCVkMC53KjRdKQorCisJLmFsaWduCTQKKzA6CisJLmxvbmcJZnBfZ2V0X2QwLCBmcF9nZXRfZDEKKwkubG9uZwlmcF9nZXRfZDIsIGZwX2dldF9kMworCS5sb25nCWZwX2dldF9kNCwgZnBfZ2V0X2Q1CisJLmxvbmcJZnBfZ2V0X2Q2LCBmcF9nZXRfZDcKKworZnBfZ2V0X2QwOgorCW1vdmUubAkoUFRfRDArOCwlc3ApLCVkMAorCXByaW50ZglQUkVHSVNURVIsIntkMC0+JTA4eH0iLDEsJWQwCisJcnRzCisKK2ZwX2dldF9kMToKKwltb3ZlLmwJKFBUX0QxKzgsJXNwKSwlZDAKKwlwcmludGYJUFJFR0lTVEVSLCJ7ZDEtPiUwOHh9IiwxLCVkMAorCXJ0cworCitmcF9nZXRfZDI6CisJbW92ZS5sCShQVF9EMis4LCVzcCksJWQwCisJcHJpbnRmCVBSRUdJU1RFUiwie2QyLT4lMDh4fSIsMSwlZDAKKwlydHMKKworZnBfZ2V0X2QzOgorCW1vdmUubAklZDMsJWQwCisJcHJpbnRmCVBSRUdJU1RFUiwie2QzLT4lMDh4fSIsMSwlZDAKKwlydHMKKworZnBfZ2V0X2Q0OgorCW1vdmUubAklZDQsJWQwCisJcHJpbnRmCVBSRUdJU1RFUiwie2Q0LT4lMDh4fSIsMSwlZDAKKwlydHMKKworZnBfZ2V0X2Q1OgorCW1vdmUubAklZDUsJWQwCisJcHJpbnRmCVBSRUdJU1RFUiwie2Q1LT4lMDh4fSIsMSwlZDAKKwlydHMKKworZnBfZ2V0X2Q2OgorCW1vdmUubAklZDYsJWQwCisJcHJpbnRmCVBSRUdJU1RFUiwie2Q2LT4lMDh4fSIsMSwlZDAKKwlydHMKKworZnBfZ2V0X2Q3OgorCW1vdmUubAklZDcsJWQwCisJcHJpbnRmCVBSRUdJU1RFUiwie2Q3LT4lMDh4fSIsMSwlZDAKKwlydHMKKworZnBfcHV0X2RhdGFfcmVnOgorCWptcAkoWzBmOncsJXBjLCVkMS53KjRdKQorCisJLmFsaWduCTQKKzA6CisJLmxvbmcJZnBfcHV0X2QwLCBmcF9wdXRfZDEKKwkubG9uZwlmcF9wdXRfZDIsIGZwX3B1dF9kMworCS5sb25nCWZwX3B1dF9kNCwgZnBfcHV0X2Q1CisJLmxvbmcJZnBfcHV0X2Q2LCBmcF9wdXRfZDcKKworZnBfcHV0X2QwOgorCXByaW50ZglQUkVHSVNURVIsIntkMDwtJTA4eH0iLDEsJWQwCisJbW92ZS5sCSVkMCwoUFRfRDArOCwlc3ApCisJcnRzCisKK2ZwX3B1dF9kMToKKwlwcmludGYJUFJFR0lTVEVSLCJ7ZDE8LSUwOHh9IiwxLCVkMAorCW1vdmUubAklZDAsKFBUX0QxKzgsJXNwKQorCXJ0cworCitmcF9wdXRfZDI6CisJcHJpbnRmCVBSRUdJU1RFUiwie2QyPC0lMDh4fSIsMSwlZDAKKwltb3ZlLmwJJWQwLChQVF9EMis4LCVzcCkKKwlydHMKKworZnBfcHV0X2QzOgorCXByaW50ZglQUkVHSVNURVIsIntkMzwtJTA4eH0iLDEsJWQwCit8CW1vdmUubAklZDAsJWQzCisJbW92ZS5sCSVkMCwoUFRfRDMrOCwlc3ApCisJcnRzCisKK2ZwX3B1dF9kNDoKKwlwcmludGYJUFJFR0lTVEVSLCJ7ZDQ8LSUwOHh9IiwxLCVkMAorfAltb3ZlLmwJJWQwLCVkNAorCW1vdmUubAklZDAsKFBUX0Q0KzgsJXNwKQorCXJ0cworCitmcF9wdXRfZDU6CisJcHJpbnRmCVBSRUdJU1RFUiwie2Q1PC0lMDh4fSIsMSwlZDAKK3wJbW92ZS5sCSVkMCwlZDUKKwltb3ZlLmwJJWQwLChQVF9ENSs4LCVzcCkKKwlydHMKKworZnBfcHV0X2Q2OgorCXByaW50ZglQUkVHSVNURVIsIntkNjwtJTA4eH0iLDEsJWQwCisJbW92ZS5sCSVkMCwlZDYKKwlydHMKKworZnBfcHV0X2Q3OgorCXByaW50ZglQUkVHSVNURVIsIntkNzwtJTA4eH0iLDEsJWQwCisJbW92ZS5sCSVkMCwlZDcKKwlydHMKKworZnBfZ2V0X2FkZHJfcmVnOgorCWptcAkoWzBmOncsJXBjLCVkMC53KjRdKQorCisJLmFsaWduCTQKKzA6CisJLmxvbmcJZnBfZ2V0X2EwLCBmcF9nZXRfYTEKKwkubG9uZwlmcF9nZXRfYTIsIGZwX2dldF9hMworCS5sb25nCWZwX2dldF9hNCwgZnBfZ2V0X2E1CisJLmxvbmcJZnBfZ2V0X2E2LCBmcF9nZXRfYTcKKworZnBfZ2V0X2EwOgorCW1vdmUubAkoUFRfQTArOCwlc3ApLCVhMAorCXByaW50ZglQUkVHSVNURVIsInthMC0+JTA4eH0iLDEsJWEwCisJcnRzCisKK2ZwX2dldF9hMToKKwltb3ZlLmwJKFBUX0ExKzgsJXNwKSwlYTAKKwlwcmludGYJUFJFR0lTVEVSLCJ7YTEtPiUwOHh9IiwxLCVhMAorCXJ0cworCitmcF9nZXRfYTI6CisJbW92ZS5sCShQVF9BMis4LCVzcCksJWEwCisJcHJpbnRmCVBSRUdJU1RFUiwie2EyLT4lMDh4fSIsMSwlYTAKKwlydHMKKworZnBfZ2V0X2EzOgorCW1vdmUubAklYTMsJWEwCisJcHJpbnRmCVBSRUdJU1RFUiwie2EzLT4lMDh4fSIsMSwlYTAKKwlydHMKKworZnBfZ2V0X2E0OgorCW1vdmUubAklYTQsJWEwCisJcHJpbnRmCVBSRUdJU1RFUiwie2E0LT4lMDh4fSIsMSwlYTAKKwlydHMKKworZnBfZ2V0X2E1OgorCW1vdmUubAklYTUsJWEwCisJcHJpbnRmCVBSRUdJU1RFUiwie2E1LT4lMDh4fSIsMSwlYTAKKwlydHMKKworZnBfZ2V0X2E2OgorCW1vdmUubAklYTYsJWEwCisJcHJpbnRmCVBSRUdJU1RFUiwie2E2LT4lMDh4fSIsMSwlYTAKKwlydHMKKworZnBfZ2V0X2E3OgorCW1vdmUubAkldXNwLCVhMAorCXByaW50ZglQUkVHSVNURVIsInthNy0+JTA4eH0iLDEsJWEwCisJcnRzCisKK2ZwX3B1dF9hZGRyX3JlZzoKKwlqbXAJKFswZjp3LCVwYywlZDAudyo0XSkKKworCS5hbGlnbgk0CiswOgorCS5sb25nCWZwX3B1dF9hMCwgZnBfcHV0X2ExCisJLmxvbmcJZnBfcHV0X2EyLCBmcF9wdXRfYTMKKwkubG9uZwlmcF9wdXRfYTQsIGZwX3B1dF9hNQorCS5sb25nCWZwX3B1dF9hNiwgZnBfcHV0X2E3CisKK2ZwX3B1dF9hMDoKKwlwcmludGYJUFJFR0lTVEVSLCJ7YTA8LSUwOHh9IiwxLCVhMAorCW1vdmUubAklYTAsKFBUX0EwKzgsJXNwKQorCXJ0cworCitmcF9wdXRfYTE6CisJcHJpbnRmCVBSRUdJU1RFUiwie2ExPC0lMDh4fSIsMSwlYTAKKwltb3ZlLmwJJWEwLChQVF9BMSs4LCVzcCkKKwlydHMKKworZnBfcHV0X2EyOgorCXByaW50ZglQUkVHSVNURVIsInthMjwtJTA4eH0iLDEsJWEwCisJbW92ZS5sCSVhMCwoUFRfQTIrOCwlc3ApCisJcnRzCisKK2ZwX3B1dF9hMzoKKwlwcmludGYJUFJFR0lTVEVSLCJ7YTM8LSUwOHh9IiwxLCVhMAorCW1vdmUubAklYTAsJWEzCisJcnRzCisKK2ZwX3B1dF9hNDoKKwlwcmludGYJUFJFR0lTVEVSLCJ7YTQ8LSUwOHh9IiwxLCVhMAorCW1vdmUubAklYTAsJWE0CisJcnRzCisKK2ZwX3B1dF9hNToKKwlwcmludGYJUFJFR0lTVEVSLCJ7YTU8LSUwOHh9IiwxLCVhMAorCW1vdmUubAklYTAsJWE1CisJcnRzCisKK2ZwX3B1dF9hNjoKKwlwcmludGYJUFJFR0lTVEVSLCJ7YTY8LSUwOHh9IiwxLCVhMAorCW1vdmUubAklYTAsJWE2CisJcnRzCisKK2ZwX3B1dF9hNzoKKwlwcmludGYJUFJFR0lTVEVSLCJ7YTc8LSUwOHh9IiwxLCVhMAorCW1vdmUubAklYTAsJXVzcAorCXJ0cworCisJLmRhdGEKKwkuYWxpZ24JNAorCitmcF9kZWJ1Z3ByaW50OgorfAkubG9uZwlQTURFQ09ERQorCS5sb25nCVBNSU5TVFIrUE1ERUNPREUrUE1DT05WK1BNTk9STQorfAkubG9uZwlQTUNPTlYrUE1OT1JNK1BNSU5TVFIKK3wJLmxvbmcJMApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hdGgtZW11L2ZwX2xvZy5jIGIvYXJjaC9tNjhrL21hdGgtZW11L2ZwX2xvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YjRmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfbG9nLmMKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisKKyAgZnBfdHJpZy5jOiBmbG9hdGluZy1wb2ludCBtYXRoIHJvdXRpbmVzIGZvciB0aGUgTGludXgtbTY4aworICBmbG9hdGluZyBwb2ludCBlbXVsYXRvci4KKworICBDb3B5cmlnaHQgKGMpIDE5OTgtMTk5OSBEYXZpZCBIdWdnaW5zLURhaW5lcyAvIFJvbWFuIFppcHBlbC4KKworICBJIGhlcmVieSBnaXZlIHBlcm1pc3Npb24sIGZyZWUgb2YgY2hhcmdlLCB0byBjb3B5LCBtb2RpZnksIGFuZAorICByZWRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSwgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtLCBwcm92aWRlZCB0aGF0CisgIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgYXJlIGluY2x1ZGVkCisgIGluIGFsbCBzdWNoIGNvcGllcy4KKworICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWSwgUkVBTAorICBPUiBJTVBMSUVELgorCisqLworCisjaW5jbHVkZSAiZnBfZW11LmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnBfZXh0IGZwX29uZSA9Cit7CisJLmV4cCA9IDB4M2ZmZiwKK307CisKK2V4dGVybiBzdHJ1Y3QgZnBfZXh0ICpmcF9mYWRkKHN0cnVjdCBmcF9leHQgKmRlc3QsIGNvbnN0IHN0cnVjdCBmcF9leHQgKnNyYyk7CitleHRlcm4gc3RydWN0IGZwX2V4dCAqZnBfZmRpdihzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBjb25zdCBzdHJ1Y3QgZnBfZXh0ICpzcmMpOworZXh0ZXJuIHN0cnVjdCBmcF9leHQgKmZwX2ZtdWwoc3RydWN0IGZwX2V4dCAqZGVzdCwgY29uc3Qgc3RydWN0IGZwX2V4dCAqc3JjKTsKKworc3RydWN0IGZwX2V4dCAqCitmcF9mc3FydChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJc3RydWN0IGZwX2V4dCB0bXAsIHNyYzI7CisJaW50IGksIGV4cDsKKworCWRwcmludChQSU5TVFIsICJmc3FydFxuIik7CisKKwlmcF9tb25hZGljX2NoZWNrKGRlc3QsIHNyYyk7CisKKwlpZiAoSVNfWkVSTyhkZXN0KSkKKwkJcmV0dXJuIGRlc3Q7CisKKwlpZiAoZGVzdC0+c2lnbikgeworCQlmcF9zZXRfbmFuKGRlc3QpOworCQlyZXR1cm4gZGVzdDsKKwl9CisJaWYgKElTX0lORihkZXN0KSkKKwkJcmV0dXJuIGRlc3Q7CisKKwkvKgorCSAqCQkgc3FydChtKSAqIDJeKHApCSwgaWYgZSA9IDIqcAorCSAqIHNxcnQobSoyXmUpID0KKwkgKgkJIHNxcnQoMiptKSAqIDJeKHApCSwgaWYgZSA9IDIqcCArIDEKKwkgKgorCSAqIFNvIHdlIHVzZSB0aGUgbGFzdCBiaXQgb2YgdGhlIGV4cG9uZW50IHRvIGRlY2lkZSB3ZXRoZXIgdG8KKwkgKiB1c2UgdGhlIG0gb3IgMiptLgorCSAqCisJICogU2luY2Ugb25seSB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSBtYW50aXNzYSBpcyBzdG9yZWQgYW5kCisJICogdGhlIGludGVnZXIgcGFydCBpcyBhc3N1bWVkIHRvIGJlIG9uZSwgd2UgcGxhY2UgYSAxIG9yIDIgaW50bworCSAqIHRoZSBmaXhlZCBwb2ludCByZXByZXNlbnRhdGlvbi4KKwkgKi8KKwlleHAgPSBkZXN0LT5leHA7CisJZGVzdC0+ZXhwID0gMHgzRkZGOworCWlmICghKGV4cCAmIDEpKQkJLyogbG93ZXN0IGJpdCBvZiBleHBvbmVudCBpcyBzZXQgKi8KKwkJZGVzdC0+ZXhwKys7CisJZnBfY29weV9leHQoJnNyYzIsIGRlc3QpOworCisJLyoKKwkgKiBUaGUgdGF5bG9yIHJvdyBhcnJvdW5kIGEgZm9yIHNxcnQoeCkgaXM6CisJICoJc3FydCh4KSA9IHNxcnQoYSkgKyAxLygyKnNxcnQoYSkpKih4LWEpICsgUgorCSAqIFdpdGggYT0xIHRoaXMgZ2l2ZXM6CisJICoJc3FydCh4KSA9IDEgKyAxLzIqKHgtMSkKKwkgKgkJPSAxLzIqKDEreCkKKwkgKi8KKwlmcF9mYWRkKGRlc3QsICZmcF9vbmUpOworCWRlc3QtPmV4cC0tOwkJLyogKiAxLzIgKi8KKworCS8qCisJICogV2Ugbm93IGFwcGx5IHRoZSBuZXd0b24gcnVsZSB0byB0aGUgZnVuY3Rpb24KKwkgKglmKHgpIDo9IHheMiAtIHIKKwkgKiB3aGljaCBoYXMgYSBudWxsIHBvaW50IG9uIHggPSBzcXJ0KHIpLgorCSAqCisJICogSXQgZ2l2ZXM6CisJICoJeCcgOj0geCAtIGYoeCkvZicoeCkKKwkgKgkgICAgPSB4IC0gKHheMiAtcikvKDIqeCkKKwkgKgkgICAgPSB4IC0gKHggLSByL3gpLzIKKwkgKiAgICAgICAgICA9ICgyKnggLSB4ICsgci94KS8yCisJICoJICAgID0gKHggKyByL3gpLzIKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKSB7CisJCWZwX2NvcHlfZXh0KCZ0bXAsICZzcmMyKTsKKworCQlmcF9mZGl2KCZ0bXAsIGRlc3QpOworCQlmcF9mYWRkKGRlc3QsICZ0bXApOworCQlkZXN0LT5leHAtLTsKKwl9CisKKwlkZXN0LT5leHAgKz0gKGV4cCAtIDB4M0ZGRikgLyAyOworCisJcmV0dXJuIGRlc3Q7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZmV0b3htMShzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmZXRveG0xXG4iKTsKKworCWZwX21vbmFkaWNfY2hlY2soZGVzdCwgc3JjKTsKKworCWlmIChJU19aRVJPKGRlc3QpKQorCQlyZXR1cm4gZGVzdDsKKworCXJldHVybiBkZXN0OworfQorCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2ZldG94KHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwl1cHJpbnQoImZldG94XG4iKTsKKworCWZwX21vbmFkaWNfY2hlY2soZGVzdCwgc3JjKTsKKworCXJldHVybiBkZXN0OworfQorCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2Z0d290b3goc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCXVwcmludCgiZnR3b3RveFxuIik7CisKKwlmcF9tb25hZGljX2NoZWNrKGRlc3QsIHNyYyk7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mdGVudG94KHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwl1cHJpbnQoImZ0ZW50b3hcbiIpOworCisJZnBfbW9uYWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJcmV0dXJuIGRlc3Q7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZmxvZ24oc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCXVwcmludCgiZmxvZ25cbiIpOworCisJZnBfbW9uYWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJcmV0dXJuIGRlc3Q7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZmxvZ25wMShzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmbG9nbnAxXG4iKTsKKworCWZwX21vbmFkaWNfY2hlY2soZGVzdCwgc3JjKTsKKworCXJldHVybiBkZXN0OworfQorCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2Zsb2cxMChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmbG9nMTBcbiIpOworCisJZnBfbW9uYWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJcmV0dXJuIGRlc3Q7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZmxvZzIoc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCXVwcmludCgiZmxvZzJcbiIpOworCisJZnBfbW9uYWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJcmV0dXJuIGRlc3Q7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZmdldGV4cChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJZHByaW50KFBJTlNUUiwgImZnZXRleHBcbiIpOworCisJZnBfbW9uYWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJaWYgKElTX0lORihkZXN0KSkgeworCQlmcF9zZXRfbmFuKGRlc3QpOworCQlyZXR1cm4gZGVzdDsKKwl9CisJaWYgKElTX1pFUk8oZGVzdCkpCisJCXJldHVybiBkZXN0OworCisJZnBfY29udl9sb25nMmV4dChkZXN0LCAoaW50KWRlc3QtPmV4cCAtIDB4M0ZGRik7CisKKwlmcF9ub3JtYWxpemVfZXh0KGRlc3QpOworCisJcmV0dXJuIGRlc3Q7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZmdldG1hbihzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJZHByaW50KFBJTlNUUiwgImZnZXRtYW5cbiIpOworCisJZnBfbW9uYWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJaWYgKElTX1pFUk8oZGVzdCkpCisJCXJldHVybiBkZXN0OworCisJaWYgKElTX0lORihkZXN0KSkKKwkJcmV0dXJuIGRlc3Q7CisKKwlkZXN0LT5leHAgPSAweDNGRkY7CisKKwlyZXR1cm4gZGVzdDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hdGgtZW11L2ZwX21vdmUuUyBiL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9tb3ZlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFiZGY4MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9tb3ZlLlMKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBmcF9tb3ZlLlMKKyAqCisgKiBDb3B5cmlnaHQgUm9tYW4gWmlwcGVsLCAxOTk3LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBlcm1pc3Npb24gbm90aWNlIGluIGl0cyBlbnRpcmV0eSwKKyAqICAgIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBTFRFUk5BVElWRUxZLCB0aGlzIHByb2R1Y3QgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlCisgKiByZXF1aXJlZCBJTlNURUFEIE9GIHRoZSBhYm92ZSByZXN0cmljdGlvbnMuICAoVGhpcyBjbGF1c2UgaXMKKyAqIG5lY2Vzc2FyeSBkdWUgdG8gYSBwb3RlbnRpYWwgYmFkIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIEdQTCBhbmQKKyAqIHRoZSByZXN0cmljdGlvbnMgY29udGFpbmVkIGluIGEgQlNELXN0eWxlIGNvcHlyaWdodC4pCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmcF9lbXUuaCIKKyNpbmNsdWRlICJmcF9kZWNvZGUuaCIKKworZG9fbm9fcGNfbW9kZT0xCisKKwkuZ2xvYmwJZnBfZm1vdmVfZnAybWVtCisKK2ZwX2Ztb3ZlX2ZwMm1lbToKKwljbHIuYgkoMitGUERfRlBTUixGUERBVEEpCisJZnBfZGVjb2RlX2Rlc3RfZm9ybWF0CisJbW92ZS53CSVkMCwlZDEJCQl8IHN0b3JlIGRhdGEgc2l6ZSB0d2ljZSBpbiAlZDEKKwlzd2FwCSVkMQkJCXwgb25lIGNhbiBiZSB0cmFzaGVkIGJlbG93CisJbW92ZS53CSVkMCwlZDEKKyNpZmRlZiBGUFVfRU1VX0RFQlVHCisJbGVhCTBmLCVhMAorCWNsci5sCSVkMAorCW1vdmUuYgkoJWEwLCVkMS53KSwlZDAKKwlwcmludGYJUERFQ09ERSwiZm1vdmUuJWMgIiwxLCVkMAorCWZwX2RlY29kZV9zcmNfcmVnCisJcHJpbnRmCVBERUNPREUsImZwJWQsIiwxLCVkMAorCisJLmRhdGEKKzA6CS5ieXRlCSdsJywncycsJ3gnLCdwJywndycsJ2QnLCdiJywncCcKKwkucHJldmlvdXMKKyNlbmRpZgorCisJfCBlbmNvZGUgYWRkcmVzc2luZyBtb2RlIGZvciBkZXN0CisJZnBfZGVjb2RlX2FkZHJfbW9kZQorCisJLmxvbmcJZnBfZGF0YSwgZnBfaWxsCisJLmxvbmcJZnBfaW5kaXJlY3QsIGZwX3Bvc3RpbmMKKwkubG9uZwlmcF9wcmVkZWNyLCBmcF9kaXNwMTYKKwkubG9uZwlmcF9leHRtb2RlMCwgZnBfZXh0bW9kZTEKKworCXwgYWRkcmVzc2luZyBtb2RlOiBkYXRhIHJlZ2lzdGVyIGRpcmVjdAorZnBfZGF0YToKKwlmcF9tb2RlX2RhdGFfZGlyZWN0CisJbW92ZS53CSVkMCwlZDEKKwlmcF9kZWNvZGVfc3JjX3JlZworCWZwX2dldF9mcF9yZWcKKwlsZWEJKEZQRF9URU1QRlAxLEZQREFUQSksJWExCisJbW92ZS5sCSglYTApKywoJWExKSsKKwltb3ZlLmwJKCVhMCkrLCglYTEpKworCW1vdmUubAkoJWEwKSwoJWExKQorCWxlYQkoLTgsJWExKSwlYTAKKwlzd2FwCSVkMQorCW1vdmUubAklZDEsJWQyCisJcHJpbnRmCVBERUNPREUsIlxuIgorCWptcAkoWzBmOncsJXBjLCVkMS53KjRdKQorCisJLmFsaWduCTQKKzA6CisJLmxvbmcJZnBfZGF0YV9sb25nLCBmcF9kYXRhX3NpbmdsZQorCS5sb25nCWZwX2lsbCwgZnBfaWxsCisJLmxvbmcJZnBfZGF0YV93b3JkLCBmcF9pbGwKKwkubG9uZwlmcF9kYXRhX2J5dGUsIGZwX2lsbAorCitmcF9kYXRhX2J5dGU6CisJanNyCWZwX25vcm1hbGl6ZV9leHQKKwlqc3IJZnBfY29udl9leHQyYnl0ZQorCW1vdmUubAklZDAsJWQxCisJc3dhcAklZDIKKwltb3ZlLncJJWQyLCVkMAorCWpzcglmcF9nZXRfZGF0YV9yZWcKKwltb3ZlLmIJJWQxLCVkMAorCW1vdmUudwklZDIsJWQxCisJanNyCWZwX3B1dF9kYXRhX3JlZworCWpyYQlmcF9maW5hbAorCitmcF9kYXRhX3dvcmQ6CisJanNyCWZwX25vcm1hbGl6ZV9leHQKKwlqc3IJZnBfY29udl9leHQyc2hvcnQKKwltb3ZlLmwJJWQwLCVkMQorCXN3YXAJJWQyCisJbW92ZS53CSVkMiwlZDAKKwlqc3IJZnBfZ2V0X2RhdGFfcmVnCisJbW92ZS53CSVkMSwlZDAKKwltb3ZlLmwJJWQyLCVkMQorCWpzcglmcF9wdXRfZGF0YV9yZWcKKwlqcmEJZnBfZmluYWwKKworZnBfZGF0YV9sb25nOgorCWpzcglmcF9ub3JtYWxpemVfZXh0CisJanNyCWZwX2NvbnZfZXh0MmxvbmcKKwlzd2FwCSVkMgorCW1vdmUudwklZDIsJWQxCisJanNyCWZwX3B1dF9kYXRhX3JlZworCWpyYQlmcF9maW5hbAorCitmcF9kYXRhX3NpbmdsZToKKwlqc3IJZnBfbm9ybWFsaXplX2V4dAorCWpzcglmcF9jb252X2V4dDJzaW5nbGUKKwlzd2FwCSVkMgorCW1vdmUudwklZDIsJWQxCisJanNyCWZwX3B1dF9kYXRhX3JlZworCWpyYQlmcF9maW5hbAorCisJfCBhZGRyZXNzaW5nIG1vZGU6IGFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3QKK2ZwX2luZGlyZWN0OgorCWZwX21vZGVfYWRkcl9pbmRpcmVjdAorCWpyYQlmcF9wdXRkZXN0CisKKwl8IGFkZHJlc3NpbmcgbW9kZTogYWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdCB3aXRoIHBvc3RpbmNyZW1lbnQKK2ZwX3Bvc3RpbmM6CisJZnBfbW9kZV9hZGRyX2luZGlyZWN0X3Bvc3RpbmMKKwlqcmEJZnBfcHV0ZGVzdAorCisJfCBhZGRyZXNzaW5nIG1vZGU6IGFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3Qgd2l0aCBwcmVkZWNyZW1lbnQKK2ZwX3ByZWRlY3I6CisJZnBfbW9kZV9hZGRyX2luZGlyZWN0X3ByZWRlYworCWpyYQlmcF9wdXRkZXN0CisKKwl8IGFkZHJlc3NpbmcgbW9kZTogYWRkcmVzcyByZWdpc3RlciBpbmRpcmVjdCB3aXRoIDE2Yml0IGRpc3BsYWNlbWVudAorZnBfZGlzcDE2OgorCWZwX21vZGVfYWRkcl9pbmRpcmVjdF9kaXNwMTYKKwlqcmEgICAgIGZwX3B1dGRlc3QKKworZnBfZXh0bW9kZTA6CisJZnBfbW9kZV9hZGRyX2luZGlyZWN0X2V4dG1vZGUwCisJanJhCWZwX3B1dGRlc3QKKworZnBfZXh0bW9kZTE6CisJZnBfZGVjb2RlX2FkZHJfcmVnCisJam1wCShbMGY6dywlcGMsJWQwKjRdKQorCisJLmFsaWduCTQKKzA6CisJLmxvbmcJZnBfYWJzX3Nob3J0LCBmcF9hYnNfbG9uZworCS5sb25nCWZwX2lsbCwgZnBfaWxsCisJLmxvbmcJZnBfaWxsLCBmcF9pbGwKKwkubG9uZwlmcF9pbGwsIGZwX2lsbAorCitmcF9hYnNfc2hvcnQ6CisJZnBfbW9kZV9hYnNfc2hvcnQKKwlqcmEJZnBfcHV0ZGVzdAorCitmcF9hYnNfbG9uZzoKKwlmcF9tb2RlX2Fic19sb25nCisJanJhCWZwX3B1dGRlc3QKKworZnBfcHV0ZGVzdDoKKwltb3ZlLmwJJWEwLCVhMQorCWZwX2RlY29kZV9zcmNfcmVnCisJbW92ZS5sCSVkMSwlZDIJCQl8IHNhdmUgc2l6ZQorCWZwX2dldF9mcF9yZWcKKwlwcmludGYJUERFQ09ERSwiXG4iCisJYWRkcS5sCSM4LCVhMAorCW1vdmUubAkoJWEwKSwtKCVzcCkKKwltb3ZlLmwJLSglYTApLC0oJXNwKQorCW1vdmUubAktKCVhMCksLSglc3ApCisJbW92ZS5sCSVzcCwlYTAKKwlqc3IJZnBfbm9ybWFsaXplX2V4dAorCisJc3dhcAklZDIKKwlqbXAJKFswZjp3LCVwYywlZDIudyo0XSkKKworCS5hbGlnbgk0CiswOgorCS5sb25nCWZwX2Zvcm1hdF9sb25nLCBmcF9mb3JtYXRfc2luZ2xlCisJLmxvbmcJZnBfZm9ybWF0X2V4dGVuZGVkLCBmcF9mb3JtYXRfcGFja2VkCisJLmxvbmcJZnBfZm9ybWF0X3dvcmQsIGZwX2Zvcm1hdF9kb3VibGUKKwkubG9uZwlmcF9mb3JtYXRfYnl0ZSwgZnBfZm9ybWF0X3BhY2tlZAorCitmcF9mb3JtYXRfbG9uZzoKKwlqc3IJZnBfY29udl9leHQybG9uZworCXB1dHVzZXIubCAlZDAsKCVhMSksZnBfZXJyX3VhMSwlYTEKKwlqcmEJZnBfZmluaXNoX21vdmUKKworZnBfZm9ybWF0X3NpbmdsZToKKwlqc3IJZnBfY29udl9leHQyc2luZ2xlCisJcHV0dXNlci5sICVkMCwoJWExKSxmcF9lcnJfdWExLCVhMQorCWpyYQlmcF9maW5pc2hfbW92ZQorCitmcF9mb3JtYXRfZXh0ZW5kZWQ6CisJbW92ZS5sCSglYTApKywlZDAKKwlsc2wudwkjMSwlZDAKKwlsc2wubAkjNywlZDAKKwlsc2wubAkjOCwlZDAKKwlwdXR1c2VyLmwgJWQwLCglYTEpKyxmcF9lcnJfdWExLCVhMQorCW1vdmUubAkoJWEwKSssJWQwCisJcHV0dXNlci5sICVkMCwoJWExKSssZnBfZXJyX3VhMSwlYTEKKwltb3ZlLmwJKCVhMCksJWQwCisJcHV0dXNlci5sICVkMCwoJWExKSxmcF9lcnJfdWExLCVhMQorCWpyYQlmcF9maW5pc2hfbW92ZQorCitmcF9mb3JtYXRfcGFja2VkOgorCS8qIG5vdCBzdXBwb3J0ZWQgeWV0ICovCisJbGVhCSgxMiwlc3ApLCVzcAorCWpyYQlmcF9pbGwKKworZnBfZm9ybWF0X3dvcmQ6CisJanNyCWZwX2NvbnZfZXh0MnNob3J0CisJcHV0dXNlci53ICVkMCwoJWExKSxmcF9lcnJfdWExLCVhMQorCWpyYQlmcF9maW5pc2hfbW92ZQorCitmcF9mb3JtYXRfZG91YmxlOgorCWpzcglmcF9jb252X2V4dDJkb3VibGUKKwlqcmEJZnBfZmluaXNoX21vdmUKKworZnBfZm9ybWF0X2J5dGU6CisJanNyCWZwX2NvbnZfZXh0MmJ5dGUKKwlwdXR1c2VyLmIgJWQwLCglYTEpLGZwX2Vycl91YTEsJWExCit8CWpyYQlmcF9maW5pc2hfbW92ZQorCitmcF9maW5pc2hfbW92ZToKKwlsZWEJKDEyLCVzcCksJXNwCisJanJhCWZwX2ZpbmFsCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWF0aC1lbXUvZnBfbW92ZW0uUyBiL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9tb3ZlbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNTRkMzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfbW92ZW0uUwpAQCAtMCwwICsxLDM2OCBAQAorLyoKKyAqIGZwX21vdmVtLlMKKyAqCisgKiBDb3B5cmlnaHQgUm9tYW4gWmlwcGVsLCAxOTk3LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBlcm1pc3Npb24gbm90aWNlIGluIGl0cyBlbnRpcmV0eSwKKyAqICAgIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBTFRFUk5BVElWRUxZLCB0aGlzIHByb2R1Y3QgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlCisgKiByZXF1aXJlZCBJTlNURUFEIE9GIHRoZSBhYm92ZSByZXN0cmljdGlvbnMuICAoVGhpcyBjbGF1c2UgaXMKKyAqIG5lY2Vzc2FyeSBkdWUgdG8gYSBwb3RlbnRpYWwgYmFkIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIEdQTCBhbmQKKyAqIHRoZSByZXN0cmljdGlvbnMgY29udGFpbmVkIGluIGEgQlNELXN0eWxlIGNvcHlyaWdodC4pCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmcF9lbXUuaCIKKyNpbmNsdWRlICJmcF9kZWNvZGUuaCIKKworfCBzZXQgZmxhZ3MgZm9yIGRlY29kZSBtYWNyb3MgZm9yIGZtb3ZlbQorZG9fZm1vdmVtPTEKKworCS5nbG9ibAlmcF9mbW92ZW1fZnAsIGZwX2Ztb3ZlbV9jcgorCit8ICVkMSBjb250YWlucyB0aGUgbWFzayBhbmQgY291bnQgb2YgdGhlIHJlZ2lzdGVyIGxpc3QKK3wgZm9yIG90aGVyIHJlZ2lzdGVyIHVzYWdlIHNlZSBmcF9kZWNvZGUuaAorCitmcF9mbW92ZW1fZnA6CisJcHJpbnRmCVBERUNPREUsImZtb3ZlbS54ICIKKwl8IGdldCByZWdpc3RlciBsaXN0IGFuZCBjb3VudCB0aGVtCisJYnRzdAkjMTEsJWQyCisJam5lCTFmCisJYmZleHR1CSVkMnsjMjQsIzh9LCVkMAkJfCBzdGF0aWMgcmVnaXN0ZXIgbGlzdAorCWpyYQkyZgorMToJYmZleHR1CSVkMnsjMjUsIzN9LCVkMAkJfCBkeW5hbWljIHJlZ2lzdGVyIGxpc3QKKwlqc3IJZnBfZ2V0X2RhdGFfcmVnCisyOgltb3ZlLmwJJWQwLCVkMQorCXN3YXAJJWQxCisJanJhCTJmCisxOglhZGRxLncJIzEsJWQxCQkJfCBjb3VudCB0aGUgIyBvZiByZWdpc3RlcnMgaW4KKzI6CWxzci5iCSMxLCVkMAkJCXwgcmVnaXN0ZXIgbGlzdCBhbmQga2VlcCBpdCBpbiAlZDEKKwlqY3MJMWIKKwlqbmUJMmIKKwlwcmludGYJUERFQ09ERSwiIyUwOHgiLDEsJWQxCisjaWZkZWYgRlBVX0VNVV9ERUJVRworCWJ0c3QJIzEyLCVkMgorCWpuZQkxZgorCXByaW50ZglQREVDT0RFLCItIgkJfCBkZWNyZW1lbnRhbCBtb3ZlCisJanJhCTJmCisxOglwcmludGYJUERFQ09ERSwiKyIJCXwgaW5jcmVtZW50YWwgbW92ZQorMjoJYnRzdAkjMTMsJWQyCisJamVxCTFmCisJcHJpbnRmCVBERUNPREUsIi0+IgkJfCBmcHUgLT4gY3B1CisJanJhCTJmCisxOglwcmludGYJUERFQ09ERSwiPC0iCQl8IGZwdSA8LSBjcHUKKzI6CisjZW5kaWYKKworCXwgZGVjb2RlIGFkZHJlc3MgbW9kZQorCWZwX2RlY29kZV9hZGRyX21vZGUKKworCS5sb25nCWZwX2lsbCwgZnBfaWxsCisJLmxvbmcJZnByX2luZGlyZWN0LCBmcHJfcG9zdGluYworCS5sb25nCWZwcl9wcmVkZWNyLCBmcHJfZGlzcDE2CisJLmxvbmcJZnByX2V4dG1vZGUwLCBmcHJfZXh0bW9kZTEKKworCXwgYWRkcmVzc2luZyBtb2RlOiBhZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0CitmcHJfaW5kaXJlY3Q6CisJZnBfbW9kZV9hZGRyX2luZGlyZWN0CisJanJhCWZwcl9kb19tb3ZlbQorCisJfCBhZGRyZXNzaW5nIG1vZGU6IGFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3Qgd2l0aCBwb3N0aW5jcmVtZW50CitmcHJfcG9zdGluYzoKKwlmcF9tb2RlX2FkZHJfaW5kaXJlY3RfcG9zdGluYworCWpyYQlmcHJfZG9fbW92ZW0KKworZnByX3ByZWRlY3I6CisJZnBfbW9kZV9hZGRyX2luZGlyZWN0X3ByZWRlYworCWpyYQlmcHJfZG9fbW92ZW0KKworCXwgYWRkcmVzc2luZyBtb2RlOiBhZGRyZXNzIHJlZ2lzdGVyL3Byb2dyYW1tIGNvdW50ZXIgaW5kaXJlY3QKKwl8CQkgICB3aXRoIDE2Yml0IGRpc3BsYWNlbWVudAorZnByX2Rpc3AxNjoKKwlmcF9tb2RlX2FkZHJfaW5kaXJlY3RfZGlzcDE2CisJanJhCWZwcl9kb19tb3ZlbQorCitmcHJfZXh0bW9kZTA6CisJZnBfbW9kZV9hZGRyX2luZGlyZWN0X2V4dG1vZGUwCisJanJhCWZwcl9kb19tb3ZlbQorCitmcHJfZXh0bW9kZTE6CisJZnBfZGVjb2RlX2FkZHJfcmVnCisJam1wCShbMGY6dywlcGMsJWQwKjRdKQorCisJLmFsaWduCTQKKzA6CisJLmxvbmcJZnByX2Fic29sdXRlX3Nob3J0LCBmcHJfYWJzb2x1dGVfbG9uZworCS5sb25nCWZwcl9kaXNwMTYsIGZwcl9leHRtb2RlMAorCS5sb25nCWZwX2lsbCwgZnBfaWxsCisJLmxvbmcJZnBfaWxsLCBmcF9pbGwKKworZnByX2Fic29sdXRlX3Nob3J0OgorCWZwX21vZGVfYWJzX3Nob3J0CisJanJhCWZwcl9kb19tb3ZlbQorCitmcHJfYWJzb2x1dGVfbG9uZzoKKwlmcF9tb2RlX2Fic19sb25nCit8CWpyYQlmcHJfZG9fbW92ZW0KKworZnByX2RvX21vdmVtOgorCXN3YXAJJWQxCQkJfCBnZXQgZnB1IHJlZ2lzdGVyIGxpc3QKKwlsZWEJKEZQRF9GUFJFRyxGUERBVEEpLCVhMQorCW1vdmVxCSMxMiwlZDAKKwlidHN0CSMxMiwlZDIKKwlqbmUJMWYKKwlsZWEJKC0xMiwlYTEsJWQwKjgpLCVhMQorCW5lZy5sCSVkMAorMToJYnRzdAkjMTMsJWQyCisJam5lCTRmCisJfCBtb3ZlIHJlZ2lzdGVyIGZyb20gbWVtb3J5IGludG8gZnB1CisJanJhCTNmCisxOglwcmludGYJUE1PVkVNLCIoJXA+JXApIiwyLCVhMCwlYTEKKwlnZXR1c2VyLmwgKCVhMCkrLCVkMixmcF9lcnJfdWExLCVhMAorCWxzci5sCSM4LCVkMgorCWxzci5sCSM3LCVkMgorCWxzci53CSMxLCVkMgorCW1vdmUubAklZDIsKCVhMSkrCisJZ2V0dXNlci5sICglYTApKywlZDIsZnBfZXJyX3VhMSwlYTAKKwltb3ZlLmwJJWQyLCglYTEpKworCWdldHVzZXIubCAoJWEwKSwlZDIsZnBfZXJyX3VhMSwlYTAKKwltb3ZlLmwJJWQyLCglYTEpCisJc3VicS5sCSM4LCVhMAorCXN1YnEubAkjOCwlYTEKKwlhZGQubAklZDAsJWEwCisyOglhZGQubAklZDAsJWExCiszOglsc2wuYgkjMSwlZDEKKwlqY3MJMWIKKwlqbmUJMmIKKwlqcmEJNWYKKwl8IG1vdmUgcmVnaXN0ZXIgZnJvbSBmcHUgaW50byBtZW1vcnkKKzE6CXByaW50ZglQTU9WRU0sIiglcD4lcCkiLDIsJWExLCVhMAorCW1vdmUubAkoJWExKSssJWQyCisJbHNsLncJIzEsJWQyCisJbHNsLmwJIzcsJWQyCisJbHNsLmwJIzgsJWQyCisJcHV0dXNlci5sICVkMiwoJWEwKSssZnBfZXJyX3VhMSwlYTAKKwltb3ZlLmwJKCVhMSkrLCVkMgorCXB1dHVzZXIubCAlZDIsKCVhMCkrLGZwX2Vycl91YTEsJWEwCisJbW92ZS5sCSglYTEpLCVkMgorCXB1dHVzZXIubCAlZDIsKCVhMCksZnBfZXJyX3VhMSwlYTAKKwlzdWJxLmwJIzgsJWExCisJc3VicS5sCSM4LCVhMAorCWFkZC5sCSVkMCwlYTAKKzI6CWFkZC5sCSVkMCwlYTEKKzQ6CWxzbC5iCSMxLCVkMQorCWpjcwkxYgorCWpuZQkyYgorNToKKwlwcmludGYJUERFQ09ERSwiXG4iCisjaWYgMAorCWxlYQkoRlBEX0ZQUkVHLEZQREFUQSksJWEwCisJcHJpbnRmCVBNT1ZFTSwiZnA6IgorCXByaW50eAlQTU9WRU0sJWEwQCgwKQorCXByaW50eAlQTU9WRU0sJWEwQCgxMikKKwlwcmludGYJUE1PVkVNLCJcbiAgICIKKwlwcmludHgJUE1PVkVNLCVhMEAoMjQpCisJcHJpbnR4CVBNT1ZFTSwlYTBAKDM2KQorCXByaW50ZglQTU9WRU0sIlxuICAgIgorCXByaW50eAlQTU9WRU0sJWEwQCg0OCkKKwlwcmludHgJUE1PVkVNLCVhMEAoNjApCisJcHJpbnRmCVBNT1ZFTSwiXG4gICAiCisJcHJpbnR4CVBNT1ZFTSwlYTBAKDcyKQorCXByaW50eAlQTU9WRU0sJWEwQCg4NCkKKwlwcmludGYJUE1PVkVNLCJcbiIKKyNlbmRpZgorCWpyYQlmcF9lbmQKKworfCBzZXQgZmxhZ3MgZm9yIGRlY29kZSBtYWNyb3MgZm9yIGZtb3ZlbSBjb250cm9sIHJlZ2lzdGVyCitkb19mbW92ZW09MQorZG9fZm1vdmVtX2NyPTEKKworZnBfZm1vdmVtX2NyOgorCXByaW50ZglQREVDT0RFLCJmbW92ZW0uY3IgIgorCXwgZ2V0IHJlZ2lzdGVyIGxpc3QgYW5kIGNvdW50IHRoZW0KKwliZmV4dHUJJWQyeyMxOSwjM30sJWQwCisJbW92ZS5sCSVkMCwlZDEKKwlzd2FwCSVkMQorCWpyYQkyZgorMToJYWRkcS53CSMxLCVkMQorMjoJbHNyLmwJIzEsJWQwCisJamNzCTFiCisJam5lCTJiCisJcHJpbnRmCVBERUNPREUsIiMlMDh4IiwxLCVkMQorI2lmZGVmIEZQVV9FTVVfREVCVUcKKwlidHN0CSMxMywlZDIKKwlqZXEJMWYKKwlwcmludGYJUERFQ09ERSwiLT4iCQl8IGZwdSAtPiBjcHUKKwlqcmEJMmYKKzE6CXByaW50ZglQREVDT0RFLCI8LSIJCXwgZnB1IDwtIGNwdQorMjoKKyNlbmRpZgorCisJfCBkZWNvZGUgYWRkcmVzcyBtb2RlCisJZnBfZGVjb2RlX2FkZHJfbW9kZQorCisJLmxvbmcJZnBjX2RhdGEsIGZwY19hZGRyCisJLmxvbmcJZnBjX2luZGlyZWN0LCBmcGNfcG9zdGluYworCS5sb25nCWZwY19wcmVkZWNyLCBmcGNfZGlzcDE2CisJLmxvbmcJZnBjX2V4dG1vZGUwLCBmcGNfZXh0bW9kZTEKKworZnBjX2RhdGE6CisJZnBfbW9kZV9kYXRhX2RpcmVjdAorCW1vdmUudwklZDAsJWQxCisJYmZmZm8JJWQyeyMxOSwjM30sJWQwCisJc3ViLncJIzE5LCVkMAorCWxlYQkoRlBEX0ZQQ1IsRlBEQVRBLCVkMC53KjQpLCVhMQorCWJ0c3QJIzEzLCVkMgorCWpuZQkxZgorCW1vdmUudwklZDEsJWQwCisJanNyCWZwX2dldF9kYXRhX3JlZworCW1vdmUubAklZDAsKCVhMSkKKwlqcmEJZnBjX21vdmVtX2ZpbgorMToJbW92ZS5sCSglYTEpLCVkMAorCWpzcglmcF9wdXRfZGF0YV9yZWcKKwlqcmEJZnBjX21vdmVtX2ZpbgorCitmcGNfYWRkcjoKKwlmcF9kZWNvZGVfYWRkcl9yZWcKKwlwcmludGYJUERFQ09ERSwiYSVkIiwxLCVkMAorCWJ0c3QJIzEzLCVkMgorCWpuZQkxZgorCWpzcglmcF9nZXRfYWRkcl9yZWcKKwltb3ZlLmwJJWEwLChGUERfRlBJQVIsRlBEQVRBKQorCWpyYQlmcGNfbW92ZW1fZmluCisxOgltb3ZlLmwJKEZQRF9GUElBUixGUERBVEEpLCVhMAorCWpzcglmcF9wdXRfYWRkcl9yZWcKKwlqcmEJZnBjX21vdmVtX2ZpbgorCitmcGNfaW5kaXJlY3Q6CisJZnBfbW9kZV9hZGRyX2luZGlyZWN0CisJanJhCWZwY19kb19tb3ZlbQorCitmcGNfcG9zdGluYzoKKwlmcF9tb2RlX2FkZHJfaW5kaXJlY3RfcG9zdGluYworCWpyYQlmcGNfZG9fbW92ZW0KKworZnBjX3ByZWRlY3I6CisJZnBfbW9kZV9hZGRyX2luZGlyZWN0X3ByZWRlYworCWpyYQlmcGNfZG9fbW92ZW0KKworZnBjX2Rpc3AxNjoKKwlmcF9tb2RlX2FkZHJfaW5kaXJlY3RfZGlzcDE2CisJanJhCWZwY19kb19tb3ZlbQorCitmcGNfZXh0bW9kZTA6CisJZnBfbW9kZV9hZGRyX2luZGlyZWN0X2V4dG1vZGUwCisJanJhCWZwY19kb19tb3ZlbQorCitmcGNfZXh0bW9kZTE6CisJZnBfZGVjb2RlX2FkZHJfcmVnCisJam1wCShbMGY6dywlcGMsJWQwKjRdKQorCisJLmFsaWduCTQKKzA6CisJLmxvbmcJZnBjX2Fic29sdXRlX3Nob3J0LCBmcGNfYWJzb2x1dGVfbG9uZworCS5sb25nCWZwY19kaXNwMTYsIGZwY19leHRtb2RlMAorCS5sb25nCWZwY19pbW1lZGlhdGUsIGZwX2lsbAorCS5sb25nCWZwX2lsbCwgZnBfaWxsCisKK2ZwY19hYnNvbHV0ZV9zaG9ydDoKKwlmcF9tb2RlX2Fic19zaG9ydAorCWpyYQlmcGNfZG9fbW92ZW0KKworZnBjX2Fic29sdXRlX2xvbmc6CisJZnBfbW9kZV9hYnNfbG9uZworCWpyYQlmcGNfZG9fbW92ZW0KKworZnBjX2ltbWVkaWF0ZToKKwlmcF9nZXRfcGMgJWEwCisJbGVhCSglYTAsJWQxLncqNCksJWExCisJZnBfcHV0X3BjICVhMQorCXByaW50ZglQREVDT0RFLCIjaW1tIgorfAlqcmEJZnBjX2RvX21vdmVtCisjaWYgMAorCXN3YXAJJWQxCisJbHNsLmwJIzUsJWQxCisJbGVhCShGUERfRlBDUixGUERBVEEpLCVhMAorCWpyYQkzZgorMToJbW92ZS5sCSVkMCwoJWEwKQorMjoJYWRkcS5sCSM0LCVhMAorMzoJbHNsLmIJIzEsJWQxCisJamNzCTFiCisJam5lCTJiCisJanJhCWZwY19tb3ZlbV9maW4KKyNlbmRpZgorCitmcGNfZG9fbW92ZW06CisJc3dhcAklZDEJCQl8IGdldCBmcHUgcmVnaXN0ZXIgbGlzdAorCWxzbC5sCSM1LCVkMQorCWxlYQkoRlBEX0ZQQ1IsRlBEQVRBKSwlYTEKKzE6CWJ0c3QJIzEzLCVkMgorCWpuZQk0ZgorCisJfCBtb3ZlIHJlZ2lzdGVyIGZyb20gbWVtb3J5IGludG8gZnB1CisJanJhCTNmCisxOglwcmludGYJUE1PVkVNLCIoJXA+JXApIiwyLCVhMCwlYTEKKwlnZXR1c2VyLmwgKCVhMCkrLCVkMCxmcF9lcnJfdWExLCVhMAorCW1vdmUubAklZDAsKCVhMSkKKzI6CWFkZHEubAkjNCwlYTEKKzM6CWxzbC5iCSMxLCVkMQorCWpjcwkxYgorCWpuZQkyYgorCWpyYQlmcGNfbW92ZW1fZmluCisKKwl8IG1vdmUgcmVnaXN0ZXIgZnJvbSBmcHUgaW50byBtZW1vcnkKKzE6CXByaW50ZglQTU9WRU0sIiglcD4lcCkiLDIsJWExLCVhMAorCW1vdmUubAkoJWExKSwlZDAKKwlwdXR1c2VyLmwgJWQwLCglYTApKyxmcF9lcnJfdWExLCVhMAorMjoJYWRkcS5sCSM0LCVhMQorNDoJbHNsLmIJIzEsJWQxCisJamNzCTFiCisJam5lCTJiCisKK2ZwY19tb3ZlbV9maW46CisJYW5kLmwJIzB4MDAwMGZmZjAsKEZQRF9GUENSLEZQREFUQSkKKwlhbmQubAkjMHgwZmZmZmZmOCwoRlBEX0ZQU1IsRlBEQVRBKQorCW1vdmUubAkoRlBEX0ZQQ1IsRlBEQVRBKSwlZDAKKwlsc3IubAkjNCwlZDAKKwltb3ZlcQkjMywlZDEKKwlhbmQubAklZDAsJWQxCisJbW92ZS53CSVkMSwoRlBEX1JORCxGUERBVEEpCisJbHNyLmwJIzIsJWQwCisJbW92ZXEJIzMsJWQxCisJYW5kLmwJJWQwLCVkMQorCW1vdmUudwklZDEsKEZQRF9QUkVDLEZQREFUQSkKKwlwcmludGYJUERFQ09ERSwiXG4iCisjaWYgMAorCXByaW50ZglQTU9WRU0sImZwY3IgOiAlMDh4XG4iLDEsRlBEQVRBQChGUERfRlBDUikKKwlwcmludGYJUE1PVkVNLCJmcHNyIDogJTA4eFxuIiwxLEZQREFUQUAoRlBEX0ZQU1IpCisJcHJpbnRmCVBNT1ZFTSwiZnBpYXI6ICUwOHhcbiIsMSxGUERBVEFAKEZQRF9GUElBUikKKwljbHIubAklZDAKKwltb3ZlLncJKEZQRF9QUkVDLEZQREFUQSksJWQwCisJcHJpbnRmCVBNT1ZFTSwicHJlYyA6ICUwNHhcbiIsMSwlZDAKKwltb3ZlLncJKEZQRF9STkQsRlBEQVRBKSwlZDAKKwlwcmludGYJUE1PVkVNLCJybmQgIDogJTA0eFxuIiwxLCVkMAorI2VuZGlmCisJanJhCWZwX2VuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hdGgtZW11L2ZwX3NjYW4uUyBiL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9zY2FuLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQxNDZlZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9zY2FuLlMKQEAgLTAsMCArMSw0NzggQEAKKy8qCisgKiBmcF9zY2FuLlMKKyAqCisgKiBDb3B5cmlnaHQgUm9tYW4gWmlwcGVsLCAxOTk3LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBlcm1pc3Npb24gbm90aWNlIGluIGl0cyBlbnRpcmV0eSwKKyAqICAgIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBTFRFUk5BVElWRUxZLCB0aGlzIHByb2R1Y3QgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlCisgKiByZXF1aXJlZCBJTlNURUFEIE9GIHRoZSBhYm92ZSByZXN0cmljdGlvbnMuICAoVGhpcyBjbGF1c2UgaXMKKyAqIG5lY2Vzc2FyeSBkdWUgdG8gYSBwb3RlbnRpYWwgYmFkIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIEdQTCBhbmQKKyAqIHRoZSByZXN0cmljdGlvbnMgY29udGFpbmVkIGluIGEgQlNELXN0eWxlIGNvcHlyaWdodC4pCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJmcF9lbXUuaCIKKyNpbmNsdWRlICJmcF9kZWNvZGUuaCIKKworCS5nbG9ibAlmcF9zY2FuLCBmcF9kYXRhc2l6ZQorCisJLmRhdGEKKworfCAlZDIgLSBmaXJzdCB0d28gaW5zdHIgd29yZHMKK3wgJWQxIC0gb3BlcmFuZCBzaXplCisKKy8qIG9wZXJhbmQgZm9ybWF0cyBhcmU6CisKKwlMb25nID0gMCwJCWkuZS4gZm1vdmUubAorCVNpbmdsZSwJCQlpLmUuIGZtb3ZlLnMKKwlFeHRlbmRlZCwJCWkuZS4gZm1vdmUueAorCVBhY2tlZC1CQ0QsCQlpLmUuIGZtb3ZlLnAKKwlXb3JkLAkJCWkuZS4gZm1vdmUudworCURvdWJsZSwJCQlpLmUuIGZtb3ZlLmQKKyovCisKKwkudGV4dAorCit8IE9uIGVudHJ5OgorfCBGUERBVEEgLSBiYXNlIG9mIGVtdWxhdGVkIEZQVSByZWdpc3RlcnMKKworZnBfc2NhbjoKK3wgbm9ybWFsIGZwdSBpbnN0cnVjdGlvbj8gKHRoaXMgZXhjbHVkZXMgZnNhdmUvZnJlc3RvcmUpCisJZnBfZ2V0X3BjICVhMAorCXByaW50ZglQREVDT0RFLCIlMDh4OiAiLDEsJWEwCisJZ2V0dXNlci5iICglYTApLCVkMCxmcF9lcnJfdWExLCVhMAorI2lmIDEKKwljbXAuYgkjMHhmMiwlZDAJCXwgY3BpZCA9IDEKKyNlbHNlCisJY21wLmIJIzB4ZmMsJWQwCQl8IGNwaWQgPSA2CisjZW5kaWYKKwlqbmUJZnBfbm9uc3RkCit8IGZpcnN0IHR3byBpbnN0cnVjdGlvbiB3b3JkcyBhcmUga2VwdCBpbiAlZDIKKwlnZXR1c2VyLmwgKCVhMCkrLCVkMixmcF9lcnJfdWExLCVhMAorCWZwX3B1dF9wYyAlYTAKK2ZwX2RlY29kZV9jb25kOgkJCQl8IHNlcGFyYXRlIGNvbmRpdGlvbmFsIGluc3RyCisJZnBfZGVjb2RlX2NvbmRfaW5zdHJfdHlwZQorCisJLmxvbmcJZnBfZGVjb2RlX21vdmUsIGZwX2ZzY2MKKwkubG9uZwlmcF9mYmNjdywgZnBfZmJjY2wKKworZnBfZGVjb2RlX21vdmU6CQkJCXwgc2VwYXJhdGUgbW92ZSBpbnN0cgorCWZwX2RlY29kZV9tb3ZlX2luc3RyX3R5cGUKKworCS5sb25nCWZwX2ZnZW5fZnAsIGZwX2lsbAorCS5sb25nCWZwX2ZnZW5fZWEsIGZwX2Ztb3ZlX2ZwMm1lbQorCS5sb25nCWZwX2Ztb3ZlbV9jciwgZnBfZm1vdmVtX2NyCisJLmxvbmcJZnBfZm1vdmVtX2ZwLCBmcF9mbW92ZW1fZnAKKworfCBub3cgYWxsIGFyaXRobWV0aWMgaW5zdHIgYW5kIGEgZmV3IG1vdmUgaW5zdHIgYXJlIGxlZnQKK2ZwX2ZnZW5fZnA6CQkJCXwgc291cmNlIGlzIGEgZnB1IHJlZ2lzdGVyCisJY2xyLmIJKEZQRF9GUFNSKzIsRlBEQVRBKQl8IGNsZWFyIHRoZSBleGNlcHRpb24gYnl0ZQorCWZwX2RlY29kZV9zb3VyY2VzcGVjCisJcHJpbnRmCVBERUNPREUsImY8b3A+LnggZnAlZCIsMSwlZDAKKwlmcF9nZXRfZnBfcmVnCisJbGVhCShGUERfVEVNUEZQMSxGUERBVEEpLCVhMSB8IGNvcHkgc3JjIGludG8gYSB0ZW1wIGxvY2F0aW9uCisJbW92ZS5sCSglYTApKywoJWExKSsKKwltb3ZlLmwJKCVhMCkrLCglYTEpKworCW1vdmUubAkoJWEwKSwoJWExKQorCWxlYQkoLTgsJWExKSwlYTAKKwlqcmEJZnBfZ2V0ZGVzdAorCitmcF9mZ2VuX2VhOgkJCQl8IHNvdXJjZSBpcyA8ZWE+CisJY2xyLmIJKEZQRF9GUFNSKzIsRlBEQVRBKQl8IGNsZWFyIHRoZSBleGNlcHRpb24gYnl0ZQorCXwgc29ydCBvdXQgZm1vdmVjciwga2VlcCBkYXRhIHNpemUgaW4gJWQxCisJZnBfZGVjb2RlX3NvdXJjZXNwZWMKKwljbXAudwkjNywlZDAKKwlqZXEJZnBfZm1vdmVjcgorCW1vdmUudwklZDAsJWQxCQkJfCBzdG9yZSBkYXRhIHNpemUgdHdpY2UgaW4gJWQxCisJc3dhcAklZDEJCQl8IG9uZSBjYW4gYmUgdHJhc2hlZCBiZWxvdworCW1vdmUudwklZDAsJWQxCisjaWZkZWYgRlBVX0VNVV9ERUJVRworCWxlYQkwZiwlYTAKKwljbHIubAklZDAKKwltb3ZlLmIJKCVhMCwlZDEudyksJWQwCisJcHJpbnRmCVBERUNPREUsImY8b3A+LiVjICIsMSwlZDAKKworCS5kYXRhCiswOgkuYnl0ZQknbCcsJ3MnLCd4JywncCcsJ3cnLCdkJywnYicsMAorCS5wcmV2aW91cworI2VuZGlmCisKKy8qCisJZnBfZ2V0c291cmNlLCBmcF9nZXRkZXN0CisKKwliYXNpY2FsbHksIHdlIGVuZCB1cCB3aXRoIGEgcG9pbnRlciB0byB0aGUgc291cmNlIG9wZXJhbmQgaW4KKwklYTEsIGFuZCBhIHBvaW50ZXIgdG8gdGhlIGRlc3RpbmF0aW9uIG9wZXJhbmQgaW4gJWEwLiAgYm90aAorCWFyZSwgb2YgY291cnNlLCA5Ni1iaXQgZXh0ZW5kZWQgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4KKyovCisKK2ZwX2dldHNvdXJjZToKKwl8IGRlY29kZSBhZGRyZXNzaW5nIG1vZGUgZm9yIHNvdXJjZQorCWZwX2RlY29kZV9hZGRyX21vZGUKKworCS5sb25nCWZwX2RhdGEsIGZwX2lsbAorCS5sb25nCWZwX2luZGlyZWN0LCBmcF9wb3N0aW5jCisJLmxvbmcJZnBfcHJlZGVjciwgZnBfZGlzcDE2CisJLmxvbmcJZnBfZXh0bW9kZTAsIGZwX2V4dG1vZGUxCisKKwl8IGFkZHJlc3NpbmcgbW9kZTogZGF0YSByZWdpc3RlciBkaXJlY3QKK2ZwX2RhdGE6CisJZnBfbW9kZV9kYXRhX2RpcmVjdAorCWpzcglmcF9nZXRfZGF0YV9yZWcKKwlsZWEJKEZQRF9URU1QRlAxLEZQREFUQSksJWEwCisJam1wCShbMGY6dywlcGMsJWQxLncqNF0pCisKKwkuYWxpZ24JNAorMDoKKwkubG9uZwlmcF9kYXRhX2xvbmcsIGZwX2RhdGFfc2luZ2xlCisJLmxvbmcJZnBfaWxsLCBmcF9pbGwKKwkubG9uZwlmcF9kYXRhX3dvcmQsIGZwX2lsbAorCS5sb25nCWZwX2RhdGFfYnl0ZSwgZnBfaWxsCisKKwl8IGRhdGEgdHlwZXMgdGhhdCBmaXQgaW4gYW4gaW50ZWdlciBkYXRhIHJlZ2lzdGVyCitmcF9kYXRhX2J5dGU6CisJZXh0Yi5sCSVkMAorCWpyYQlmcF9kYXRhX2xvbmcKKworZnBfZGF0YV93b3JkOgorCWV4dC5sCSVkMAorCitmcF9kYXRhX2xvbmc6CisJanNyCWZwX2NvbnZfbG9uZzJleHQKKwlqcmEJZnBfZ2V0ZGVzdAorCitmcF9kYXRhX3NpbmdsZToKKwlqc3IJZnBfY29udl9zaW5nbGUyZXh0CisJanJhCWZwX2dldGRlc3QKKworCXwgYWRkcmVzc2luZyBtb2RlOiBhZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0CitmcF9pbmRpcmVjdDoKKwlmcF9tb2RlX2FkZHJfaW5kaXJlY3QKKwlqcmEJZnBfZmV0Y2hzb3VyY2UKKworCXwgYWRkcmVzc2luZyBtb2RlOiBhZGRyZXNzIHJlZ2lzdGVyIGluZGlyZWN0IHdpdGggcG9zdGluY3JlbWVudAorZnBfcG9zdGluYzoKKwlmcF9tb2RlX2FkZHJfaW5kaXJlY3RfcG9zdGluYworCWpyYQlmcF9mZXRjaHNvdXJjZQorCisJfCBhZGRyZXNzaW5nIG1vZGU6IGFkZHJlc3MgcmVnaXN0ZXIgaW5kaXJlY3Qgd2l0aCBwcmVkZWNyZW1lbnQKK2ZwX3ByZWRlY3I6CisJZnBfbW9kZV9hZGRyX2luZGlyZWN0X3ByZWRlYworCWpyYQlmcF9mZXRjaHNvdXJjZQorCisJfCBhZGRyZXNzaW5nIG1vZGU6IGFkZHJlc3MgcmVnaXN0ZXIvcHJvZ3JhbW0gY291bnRlciBpbmRpcmVjdAorCXwJCSAgIHdpdGggMTZiaXQgZGlzcGxhY2VtZW50CitmcF9kaXNwMTY6CisJZnBfbW9kZV9hZGRyX2luZGlyZWN0X2Rpc3AxNgorCWpyYQlmcF9mZXRjaHNvdXJjZQorCisJfCBhbGwgb3RoZXIgaW5kaXJlY3QgYWRkcmVzc2luZyBtb2RlcyB3aWxsIGZpbmFsbHkgZW5kIHVwIGhlcmUKK2ZwX2V4dG1vZGUwOgorCWZwX21vZGVfYWRkcl9pbmRpcmVjdF9leHRtb2RlMAorCWpyYQlmcF9mZXRjaHNvdXJjZQorCit8IGFsbCBwYyByZWxhdGl2ZSBhZGRyZXNzaW5nIG1vZGVzIGFuZCBpbW1lZGlhdGUvYWJzb2x1dGUgbW9kZXMgZW5kIHVwIGhlcmUKK3wgdGhlIGZpcnN0IG9uZXMgYXJlIHNlbnQgdG8gZnBfZXh0bW9kZTAgb3IgZnBfZGlzcDE2Cit8IGFuZCBvbmx5IHRoZSBsYXR0ZXIgYXJlIGhhbmRsZWQgaGVyZQorZnBfZXh0bW9kZTE6CisJZnBfZGVjb2RlX2FkZHJfcmVnCisJam1wCShbMGY6dywlcGMsJWQwKjRdKQorCisJLmFsaWduCTQKKzA6CisJLmxvbmcJZnBfYWJzX3Nob3J0LCBmcF9hYnNfbG9uZworCS5sb25nCWZwX2Rpc3AxNiwgZnBfZXh0bW9kZTAKKwkubG9uZwlmcF9pbW1lZGlhdGUsIGZwX2lsbAorCS5sb25nCWZwX2lsbCwgZnBfaWxsCisKKwl8IGFkZHJlc3NpbmcgbW9kZTogYWJzb2x1dGUgc2hvcnQKK2ZwX2Fic19zaG9ydDoKKwlmcF9tb2RlX2Fic19zaG9ydAorCWpyYQlmcF9mZXRjaHNvdXJjZQorCisJfCBhZGRyZXNzaW5nIG1vZGU6IGFic29sdXRlIGxvbmcKK2ZwX2Fic19sb25nOgorCWZwX21vZGVfYWJzX2xvbmcKKwlqcmEJZnBfZmV0Y2hzb3VyY2UKKworCXwgYWRkcmVzc2luZyBtb2RlOiBpbW1lZGlhdGUgZGF0YQorZnBfaW1tZWRpYXRlOgorCXByaW50ZglQREVDT0RFLCIjIgorCWZwX2dldF9wYyAlYTAKKwltb3ZlLncJKGZwX2RhdGFzaXplLCVkMS53KjIpLCVkMAorCWFkZHEudwkjMSwlZDAKKwlhbmQudwkjLTIsJWQwCisjaWZkZWYgRlBVX0VNVV9ERUJVRworCW1vdmVtLmwJJWQwLyVkMSwtKCVzcCkKKwltb3ZlbAklYTAsJWExCisJY2xyLmwJJWQxCisJanJhCTJmCisxOglnZXR1c2VyLmIgKCVhMSkrLCVkMSxmcF9lcnJfdWExLCVhMQorCXByaW50ZglQREVDT0RFLCIlMDJ4IiwxLCVkMQorMjoJZGJyYQklZDAsMWIKKwltb3ZlbS5sCSglc3ApKywlZDAvJWQxCisjZW5kaWYKKwlsZWEJKCVhMCwlZDAudyksJWExCisJZnBfcHV0X3BjICVhMQorfAlqcmEJZnBfZmV0Y2hzb3VyY2UKKworZnBfZmV0Y2hzb3VyY2U6CisJbW92ZS5sCSVhMCwlYTEKKwlzd2FwCSVkMQorCWxlYQkoRlBEX1RFTVBGUDEsRlBEQVRBKSwlYTAKKwlqbXAJKFswZjp3LCVwYywlZDEudyo0XSkKKworCS5hbGlnbgk0CiswOgkubG9uZwlmcF9sb25nLCBmcF9zaW5nbGUKKwkubG9uZwlmcF9leHQsIGZwX3BhY2sKKwkubG9uZwlmcF93b3JkLCBmcF9kb3VibGUKKwkubG9uZwlmcF9ieXRlLCBmcF9pbGwKKworZnBfbG9uZzoKKwlnZXR1c2VyLmwgKCVhMSksJWQwLGZwX2Vycl91YTEsJWExCisJanNyCWZwX2NvbnZfbG9uZzJleHQKKwlqcmEJZnBfZ2V0ZGVzdAorCitmcF9zaW5nbGU6CisJZ2V0dXNlci5sICglYTEpLCVkMCxmcF9lcnJfdWExLCVhMQorCWpzcglmcF9jb252X3NpbmdsZTJleHQKKwlqcmEJZnBfZ2V0ZGVzdAorCitmcF9leHQ6CisJZ2V0dXNlci5sICglYTEpKywlZDAsZnBfZXJyX3VhMSwlYTEKKwlsc3IubAkjOCwlZDAKKwlsc3IubAkjNywlZDAKKwlsc3IudwkjMSwlZDAKKwltb3ZlLmwJJWQwLCglYTApKworCWdldHVzZXIubCAoJWExKSssJWQwLGZwX2Vycl91YTEsJWExCisJbW92ZS5sCSVkMCwoJWEwKSsKKwlnZXR1c2VyLmwgKCVhMSksJWQwLGZwX2Vycl91YTEsJWExCisJbW92ZS5sCSVkMCwoJWEwKQorCXN1YnEubAkjOCwlYTAKKwlqcmEJZnBfZ2V0ZGVzdAorCitmcF9wYWNrOgorCS8qIG5vdCBzdXBwb3J0ZWQgeWV0ICovCisJanJhCWZwX2lsbAorCitmcF93b3JkOgorCWdldHVzZXIudyAoJWExKSwlZDAsZnBfZXJyX3VhMSwlYTEKKwlleHQubAklZDAKKwlqc3IJZnBfY29udl9sb25nMmV4dAorCWpyYQlmcF9nZXRkZXN0CisKK2ZwX2RvdWJsZToKKwlqc3IJZnBfY29udl9kb3VibGUyZXh0CisJanJhCWZwX2dldGRlc3QKKworZnBfYnl0ZToKKwlnZXR1c2VyLmIgKCVhMSksJWQwLGZwX2Vycl91YTEsJWExCisJZXh0Yi5sCSVkMAorCWpzcglmcF9jb252X2xvbmcyZXh0Cit8CWpyYQlmcF9nZXRkZXN0CisKK2ZwX2dldGRlc3Q6CisJbW92ZS5sCSVhMCwlYTEKKwliZmV4dHUJJWQyeyMyMiwjM30sJWQwCisJcHJpbnRmCVBERUNPREUsIixmcCVkXG4iLDEsJWQwCisJZnBfZ2V0X2ZwX3JlZworCW1vdmVtLmwJJWEwLyVhMSwtKCVzcCkKKwlwZWEJZnBfZmluYWxyb3VuZGluZworCWJmZXh0dQklZDJ7IzI1LCM3fSwlZDAKKwlqbXAJKFswZjp3LCVwYywlZDAqNF0pCisKKwkuYWxpZ24JNAorMDoKKwkubG9uZwlmcF9mbW92ZV9tZW0yZnAsIGZwX2ZpbnQsIGZwX2ZzaW5oLCBmcF9maW50cnoKKwkubG9uZwlmcF9mc3FydCwgZnBfaWxsLCBmcF9mbG9nbnAxLCBmcF9pbGwKKwkubG9uZwlmcF9mZXRveG0xLCBmcF9mdGFuaCwgZnBfZmF0YW4sIGZwX2lsbAorCS5sb25nCWZwX2Zhc2luLCBmcF9mYXRhbmgsIGZwX2ZzaW4sIGZwX2Z0YW4KKwkubG9uZwlmcF9mZXRveCwgZnBfZnR3b3RveCwgZnBfZnRlbnRveCwgZnBfaWxsCisJLmxvbmcJZnBfZmxvZ24sIGZwX2Zsb2cxMCwgZnBfZmxvZzIsIGZwX2lsbAorCS5sb25nCWZwX2ZhYnMsIGZwX2Zjb3NoLCBmcF9mbmVnLCBmcF9pbGwKKwkubG9uZwlmcF9mYWNvcywgZnBfZmNvcywgZnBfZmdldGV4cCwgZnBfZmdldG1hbgorCS5sb25nCWZwX2ZkaXYsIGZwX2Ztb2QsIGZwX2ZhZGQsIGZwX2ZtdWwKKwkubG9uZwlmcGFfZnNnbGRpdiwgZnBfZnJlbSwgZnBfZnNjYWxlLCBmcGFfZnNnbG11bAorCS5sb25nCWZwX2ZzdWIsIGZwX2lsbCwgZnBfaWxsLCBmcF9pbGwKKwkubG9uZwlmcF9pbGwsIGZwX2lsbCwgZnBfaWxsLCBmcF9pbGwKKwkubG9uZwlmcF9mc2luY29zMCwgZnBfZnNpbmNvczEsIGZwX2ZzaW5jb3MyLCBmcF9mc2luY29zMworCS5sb25nCWZwX2ZzaW5jb3M0LCBmcF9mc2luY29zNSwgZnBfZnNpbmNvczYsIGZwX2ZzaW5jb3M3CisJLmxvbmcJZnBfZmNtcCwgZnBfaWxsLCBmcF9mdHN0LCBmcF9pbGwKKwkubG9uZwlmcF9pbGwsIGZwX2lsbCwgZnBfaWxsLCBmcF9pbGwKKwkubG9uZwlmcF9mc21vdmUsIGZwX2Zzc3FydCwgZnBfaWxsLCBmcF9pbGwKKwkubG9uZwlmcF9mZG1vdmUsIGZwX2Zkc3FydCwgZnBfaWxsLCBmcF9pbGwKKwkubG9uZwlmcF9pbGwsIGZwX2lsbCwgZnBfaWxsLCBmcF9pbGwKKwkubG9uZwlmcF9pbGwsIGZwX2lsbCwgZnBfaWxsLCBmcF9pbGwKKwkubG9uZwlmcF9pbGwsIGZwX2lsbCwgZnBfaWxsLCBmcF9pbGwKKwkubG9uZwlmcF9pbGwsIGZwX2lsbCwgZnBfaWxsLCBmcF9pbGwKKwkubG9uZwlmcF9mc2FicywgZnBfaWxsLCBmcF9mc25lZywgZnBfaWxsCisJLmxvbmcJZnBfZmRhYnMsIGZwX2lsbCwgZnBfZmRuZWcsIGZwX2lsbAorCS5sb25nCWZwX2ZzZGl2LCBmcF9pbGwsIGZwX2ZzYWRkLCBmcF9mc211bAorCS5sb25nCWZwX2ZkZGl2LCBmcF9pbGwsIGZwX2ZkYWRkLCBmcF9mZG11bAorCS5sb25nCWZwX2Zzc3ViLCBmcF9pbGwsIGZwX2lsbCwgZnBfaWxsCisJLmxvbmcJZnBfZmRzdWIsIGZwX2lsbCwgZnBfaWxsLCBmcF9pbGwKKwkubG9uZwlmcF9pbGwsIGZwX2lsbCwgZnBfaWxsLCBmcF9pbGwKKwkubG9uZwlmcF9pbGwsIGZwX2lsbCwgZnBfaWxsLCBmcF9pbGwKKwkubG9uZwlmcF9pbGwsIGZwX2lsbCwgZnBfaWxsLCBmcF9pbGwKKwkubG9uZwlmcF9pbGwsIGZwX2lsbCwgZnBfaWxsLCBmcF9pbGwKKworCXwgSW5zdHJ1Y3Rpb25zIGZvbGxvdworCisJfCBNb3ZlIGFuIChlbXVsYXRlZCkgUk9NIGNvbnN0YW50CitmcF9mbW92ZWNyOgorCWJmZXh0dQklZDJ7IzI3LCM1fSwlZDAKKwlwcmludGYJUElOU1RSLCJmcF9mbW92ZWNyICMlZCIsMSwlZDAKKwltb3ZlLmwJJWQwLCVkMQorCWFkZC5sCSVkMCwlZDAKKwlhZGQubAklZDEsJWQwCisJbGVhCShmcF9jb25zdGFudHMsJWQwKjQpLCVhMAorCW1vdmUubAkjMHg4MDFjYzBmZiwlZDAKKwlhZGRxLmwJIzEsJWQxCisJbHNsLmwJJWQxLCVkMAorCWpjYwkxZgorCWZwX3NldF9zciBGUFNSX0VYQ19JTkVYMgkJCXwgSU5FWDIgZXhjZXB0aW9uCisxOgltb3ZlcQkjLTEyOCwlZDAJCQkJfCBjb250aW51ZSB3aXRoIGZtb3ZlCisJYW5kLmwJJWQwLCVkMgorCWpyYQlmcF9nZXRkZXN0CisKKwkuZGF0YQorCS5hbGlnbgk0CitmcF9jb25zdGFudHM6CisJLmxvbmcJMHgwMDAwNDAwMCwweGM5MGZkYWEyLDB4MjE2OGMyMzUJfCBwaQorCS5leHRlbmQJMCwwLDAsMCwwLDAsMCwwLDAsMAorCS5sb25nCTB4MDAwMDNmZmQsMHg5YTIwOWE4NCwweGZiY2ZmNzk4CXwgbG9nMTAoMikKKwkubG9uZwkweDAwMDA0MDAwLDB4YWRmODU0NTgsMHhhMmJiNGE5YQl8IGUKKwkubG9uZwkweDAwMDAzZmZmLDB4YjhhYTNiMjksMHg1YzE3ZjBiYwl8IGxvZzIoZSkKKwkubG9uZwkweDAwMDAzZmZkLDB4ZGU1YmQ4YTksMHgzNzI4NzE5NQl8IGxvZzEwKGUpCisJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAJfCAwLjAKKwkubG9uZwkweDAwMDAzZmZlLDB4YjE3MjE3ZjcsMHhkMWNmNzlhYwl8IDFuKDIpCisJLmxvbmcJMHgwMDAwNDAwMCwweDkzNWQ4ZGRkLDB4YWFhOGFjMTcJfCAxbigxMCkKKwl8IHJlYWQgdGhpcyBhcyAiMS4wICogMl4wIiAtIG5vdGUgdGhlIGhpZ2ggYml0IGluIHRoZSBtYW50aXNzYQorCS5sb25nCTB4MDAwMDNmZmYsMHg4MDAwMDAwMCwweDAwMDAwMDAwCXwgMTBeMAorCS5sb25nCTB4MDAwMDQwMDIsMHhhMDAwMDAwMCwweDAwMDAwMDAwCXwgMTBeMQorCS5sb25nCTB4MDAwMDQwMDUsMHhjODAwMDAwMCwweDAwMDAwMDAwCXwgMTBeMgorCS5sb25nCTB4MDAwMDQwMGMsMHg5YzQwMDAwMCwweDAwMDAwMDAwCXwgMTBeNAorCS5sb25nCTB4MDAwMDQwMTksMHhiZWJjMjAwMCwweDAwMDAwMDAwCXwgMTBeOAorCS5sb25nCTB4MDAwMDQwMzQsMHg4ZTFiYzliZiwweDA0MDAwMDAwCXwgMTBeMTYKKwkubG9uZwkweDAwMDA0MDY5LDB4OWRjNWFkYTgsMHgyYjcwYjU5ZQl8IDEwXjMyCisJLmxvbmcJMHgwMDAwNDBkMywweGMyNzgxZjQ5LDB4ZmZjZmE2ZDUJfCAxMF42NAorCS5sb25nCTB4MDAwMDQxYTgsMHg5M2JhNDdjOSwweDgwZTk4Y2UwCXwgMTBeMTI4CisJLmxvbmcJMHgwMDAwNDM1MSwweGFhN2VlYmZiLDB4OWRmOWRlOGUJfCAxMF4yNTYKKwkubG9uZwkweDAwMDA0NmEzLDB4ZTMxOWEwYWUsMHhhNjBlOTFjNwl8IDEwXjUxMgorCS5sb25nCTB4MDAwMDRkNDgsMHhjOTc2NzU4NiwweDgxNzUwYzE3CXwgMTBeMTAyNAorCS5sb25nCTB4MDAwMDVhOTIsMHg5ZThiM2I1ZCwweGM1M2Q1ZGU1CXwgMTBeMjA0OAorCS5sb25nCTB4MDAwMDc1MjUsMHhjNDYwNTIwMiwweDhhMjA5NzliCXwgMTBeNDA5NgorCS5wcmV2aW91cworCitmcF9mbW92ZV9tZW0yZnA6CisJcHJpbnRmCVBJTlNUUiwiZm1vdmUgJXAsJXBcbiIsMiwlYTAsJWExCisJbW92ZS5sCSglYTEpKywoJWEwKSsKKwltb3ZlLmwJKCVhMSkrLCglYTApKworCW1vdmUubAkoJWExKSwoJWEwKQorCXN1YnEubAkjOCwlYTAKKwlydHMKKworZnBhX2ZzZ2xtdWw6CisJbW92ZS5sCSNmcF9maW5hbHJvdW5kaW5nX3NpbmdsZV9mYXN0LCglc3ApCisJanJhCWZwX2ZzZ2xtdWwKKworZnBhX2ZzZ2xkaXY6CisJbW92ZS5sCSNmcF9maW5hbHJvdW5kaW5nX3NpbmdsZV9mYXN0LCglc3ApCisJanJhCWZwX2ZzZ2xkaXYKKworLm1hY3JvCWZwX2Rvc2luZ2xlcHJlYyBpbnN0cgorCXByaW50ZglQSU5TVFIsInNpbmdsZSAiCisJbW92ZS5sCSNmcF9maW5hbHJvdW5kaW5nX3NpbmdsZSwoJXNwKQorCWpyYQlcaW5zdHIKKy5lbmRtCisKKy5tYWNybwlmcF9kb2RvdWJsZXByZWMgaW5zdHIKKwlwcmludGYJUElOU1RSLCJkb3VibGUgIgorCW1vdmUubAkjZnBfZmluYWxyb3VuZGluZ19kb3VibGUsKCVzcCkKKwlqcmEJXGluc3RyCisuZW5kbQorCitmcF9mc21vdmU6CisJZnBfZG9zaW5nbGVwcmVjIGZwX2Ztb3ZlX21lbTJmcAorCitmcF9mc3NxcnQ6CisJZnBfZG9zaW5nbGVwcmVjIGZwX2ZzcXJ0CisKK2ZwX2ZkbW92ZToKKwlmcF9kb2RvdWJsZXByZWMgZnBfZm1vdmVfbWVtMmZwCisKK2ZwX2Zkc3FydDoKKwlmcF9kb2RvdWJsZXByZWMgZnBfZnNxcnQKKworZnBfZnNhYnM6CisJZnBfZG9zaW5nbGVwcmVjIGZwX2ZhYnMKKworZnBfZnNuZWc6CisJZnBfZG9zaW5nbGVwcmVjIGZwX2ZuZWcKKworZnBfZmRhYnM6CisJZnBfZG9kb3VibGVwcmVjIGZwX2ZhYnMKKworZnBfZmRuZWc6CisJZnBfZG9kb3VibGVwcmVjIGZwX2ZuZWcKKworZnBfZnNkaXY6CisJZnBfZG9zaW5nbGVwcmVjIGZwX2ZkaXYKKworZnBfZnNhZGQ6CisJZnBfZG9zaW5nbGVwcmVjIGZwX2ZhZGQKKworZnBfZnNtdWw6CisJZnBfZG9zaW5nbGVwcmVjIGZwX2ZtdWwKKworZnBfZmRkaXY6CisJZnBfZG9kb3VibGVwcmVjIGZwX2ZkaXYKKworZnBfZmRhZGQ6CisJZnBfZG9kb3VibGVwcmVjIGZwX2ZhZGQKKworZnBfZmRtdWw6CisJZnBfZG9kb3VibGVwcmVjIGZwX2ZtdWwKKworZnBfZnNzdWI6CisJZnBfZG9zaW5nbGVwcmVjIGZwX2ZzdWIKKworZnBfZmRzdWI6CisJZnBfZG9kb3VibGVwcmVjIGZwX2ZzdWIKKworZnBfbm9uc3RkOgorCWZwX2dldF9wYyAlYTAKKwlnZXR1c2VyLmwgKCVhMCksJWQwLGZwX2Vycl91YTEsJWEwCisJcHJpbnRmCSwibm9uc3RkICgoJTA4eCk9JTA4eClcbiIsMiwlYTAsJWQwCisJbW92ZXEJIy0xLCVkMAorCXJ0cworCisJLmRhdGEKKwkuYWxpZ24JNAorCisJfCBkYXRhIHNpemVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG9wZXJhbmQgZm9ybWF0cworZnBfZGF0YXNpemU6CisJLndvcmQJNCwgNCwgMTIsIDEyLCAyLCA4LCAxLCAwCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWF0aC1lbXUvZnBfdHJpZy5jIGIvYXJjaC9tNjhrL21hdGgtZW11L2ZwX3RyaWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzYxZDA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21hdGgtZW11L2ZwX3RyaWcuYwpAQCAtMCwwICsxLDE4MyBAQAorLyoKKworICBmcF90cmlnLmM6IGZsb2F0aW5nLXBvaW50IG1hdGggcm91dGluZXMgZm9yIHRoZSBMaW51eC1tNjhrCisgIGZsb2F0aW5nIHBvaW50IGVtdWxhdG9yLgorCisgIENvcHlyaWdodCAoYykgMTk5OC0xOTk5IERhdmlkIEh1Z2dpbnMtRGFpbmVzIC8gUm9tYW4gWmlwcGVsLgorCisgIEkgaGVyZWJ5IGdpdmUgcGVybWlzc2lvbiwgZnJlZSBvZiBjaGFyZ2UsIHRvIGNvcHksIG1vZGlmeSwgYW5kCisgIHJlZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlLCBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0sIHByb3ZpZGVkIHRoYXQKKyAgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBhcmUgaW5jbHVkZWQKKyAgaW4gYWxsIHN1Y2ggY29waWVzLgorCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLCBSRUFMCisgIE9SIElNUExJRUQuCisKKyovCisKKyNpbmNsdWRlICJmcF9lbXUuaCIKKyNpbmNsdWRlICJmcF90cmlnLmgiCisKK3N0cnVjdCBmcF9leHQgKgorZnBfZnNpbihzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmc2luXG4iKTsKKworCWZwX21vbmFkaWNfY2hlY2soZGVzdCwgc3JjKTsKKworCXJldHVybiBkZXN0OworfQorCitzdHJ1Y3QgZnBfZXh0ICoKK2ZwX2Zjb3Moc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCXVwcmludCgiZmNvc1xuIik7CisKKwlmcF9tb25hZGljX2NoZWNrKGRlc3QsIHNyYyk7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mdGFuKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwl1cHJpbnQoImZ0YW5cbiIpOworCisJZnBfbW9uYWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJcmV0dXJuIGRlc3Q7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZmFzaW4oc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCXVwcmludCgiZmFzaW5cbiIpOworCisJZnBfbW9uYWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJcmV0dXJuIGRlc3Q7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZmFjb3Moc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCXVwcmludCgiZmFjb3NcbiIpOworCisJZnBfbW9uYWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJcmV0dXJuIGRlc3Q7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZmF0YW4oc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCXVwcmludCgiZmF0YW5cbiIpOworCisJZnBfbW9uYWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJcmV0dXJuIGRlc3Q7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZnNpbmgoc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCXVwcmludCgiZnNpbmhcbiIpOworCisJZnBfbW9uYWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJcmV0dXJuIGRlc3Q7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZmNvc2goc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCXVwcmludCgiZmNvc2hcbiIpOworCisJZnBfbW9uYWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJcmV0dXJuIGRlc3Q7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZnRhbmgoc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCXVwcmludCgiZnRhbmhcbiIpOworCisJZnBfbW9uYWRpY19jaGVjayhkZXN0LCBzcmMpOworCisJcmV0dXJuIGRlc3Q7Cit9CisKK3N0cnVjdCBmcF9leHQgKgorZnBfZmF0YW5oKHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYykKK3sKKwl1cHJpbnQoImZhdGFuaFxuIik7CisKKwlmcF9tb25hZGljX2NoZWNrKGRlc3QsIHNyYyk7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mc2luY29zMChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmc2luY29zMFxuIik7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mc2luY29zMShzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmc2luY29zMVxuIik7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mc2luY29zMihzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmc2luY29zMlxuIik7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mc2luY29zMyhzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmc2luY29zM1xuIik7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mc2luY29zNChzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmc2luY29zNFxuIik7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mc2luY29zNShzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmc2luY29zNVxuIik7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mc2luY29zNihzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmc2luY29zNlxuIik7CisKKwlyZXR1cm4gZGVzdDsKK30KKworc3RydWN0IGZwX2V4dCAqCitmcF9mc2luY29zNyhzdHJ1Y3QgZnBfZXh0ICpkZXN0LCBzdHJ1Y3QgZnBfZXh0ICpzcmMpCit7CisJdXByaW50KCJmc2luY29zN1xuIik7CisKKwlyZXR1cm4gZGVzdDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF90cmlnLmggYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfdHJpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOGIyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfdHJpZy5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisKKyAgZnBfdHJpZy5oOiBmbG9hdGluZy1wb2ludCBtYXRoIHJvdXRpbmVzIGZvciB0aGUgTGludXgtbTY4aworICBmbG9hdGluZyBwb2ludCBlbXVsYXRvci4KKworICBDb3B5cmlnaHQgKGMpIDE5OTggRGF2aWQgSHVnZ2lucy1EYWluZXMuCisKKyAgSSBoZXJlYnkgZ2l2ZSBwZXJtaXNzaW9uLCBmcmVlIG9mIGNoYXJnZSwgdG8gY29weSwgbW9kaWZ5LCBhbmQKKyAgcmVkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUsIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSwgcHJvdmlkZWQgdGhhdAorICB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGFyZSBpbmNsdWRlZAorICBpbiBhbGwgc3VjaCBjb3BpZXMuCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIIEFCU09MVVRFTFkgTk8gV0FSUkFOVFksIFJFQUwKKyAgT1IgSU1QTElFRC4KKworKi8KKworI2lmbmRlZiBGUF9UUklHX0gKKyNkZWZpbmUgRlBfVFJJR19ICisKKyNpbmNsdWRlICJmcF9lbXUuaCIKKworLyogZmxvYXRpbmcgcG9pbnQgdHJpZ29ub21ldHJpYyBpbnN0cnVjdGlvbnM6CisKKyAgIHRoZSBhcmd1bWVudHMgdG8gdGhlc2UgYXJlIGluIHRoZSAiaW50ZXJuYWwiIGV4dGVuZGVkIGZvcm1hdCwgdGhhdAorICAgaXMsIGFuICJleHBsb2RlZCIgdmVyc2lvbiBvZiB0aGUgOTYtYml0IGV4dGVuZGVkIGZwIGZvcm1hdCB1c2VkIGJ5CisgICB0aGUgNjg4ODEuCisKKyAgIHRoZXkgcmV0dXJuIGEgc3RhdHVzIGNvZGUsIHdoaWNoIHNob3VsZCBlbmQgdXAgaW4gJWQwLCBpZiBhbGwgZ29lcworICAgd2VsbC4gICovCisKKyNlbmRpZiAvKiBGUF9UUklHX19IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWF0aC1lbXUvZnBfdXRpbC5TIGIvYXJjaC9tNjhrL21hdGgtZW11L2ZwX3V0aWwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWY3ZjAxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21hdGgtZW11L2ZwX3V0aWwuUwpAQCAtMCwwICsxLDE0NTUgQEAKKy8qCisgKiBmcF91dGlsLlMKKyAqCisgKiBDb3B5cmlnaHQgUm9tYW4gWmlwcGVsLCAxOTk3LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIGFuZCB0aGUgZW50aXJlIHBlcm1pc3Npb24gbm90aWNlIGluIGl0cyBlbnRpcmV0eSwKKyAqICAgIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBTFRFUk5BVElWRUxZLCB0aGlzIHByb2R1Y3QgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlCisgKiByZXF1aXJlZCBJTlNURUFEIE9GIHRoZSBhYm92ZSByZXN0cmljdGlvbnMuICAoVGhpcyBjbGF1c2UgaXMKKyAqIG5lY2Vzc2FyeSBkdWUgdG8gYSBwb3RlbnRpYWwgYmFkIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIEdQTCBhbmQKKyAqIHRoZSByZXN0cmljdGlvbnMgY29udGFpbmVkIGluIGEgQlNELXN0eWxlIGNvcHlyaWdodC4pCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlICJmcF9lbXUuaCIKKworLyoKKyAqIEhlcmUgYXJlIGxvdHMgb2YgY29udmVyc2lvbiBhbmQgbm9ybWFsaXphdGlvbiBmdW5jdGlvbnMgbWFpbmx5CisgKiB1c2VkIGJ5IGZwX3NjYW4uUworICogTm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgb3B0aW1pemVkIGZvciAibm9ybWFsIiBudW1iZXJzLAorICogdGhlc2UgYXJlIGhhbmRsZWQgZmlyc3QgYW5kIGV4aXQgYXMgZmFzdCBhcyBwb3NzaWJsZSwgdGhpcyBpcworICogZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIGZwX25vcm1hbGl6ZV9leHQvZnBfY29udl9leHQyZXh0LCBhcworICogaXQncyBjYWxsZWQgdmVyeSBvZnRlbi4KKyAqIFRoZSByZWdpc3RlciB1c2FnZSBpcyBvcHRpbWl6ZWQgZm9yIGZwX3NjYW4uUyBhbmQgd2hpY2ggcmVnaXN0ZXIKKyAqIGlzIGN1cnJlbnRseSBhdCB0aGF0IHRpbWUgdW51c2VkLCBiZSBjYXJlZnVsIGlmIHlvdSB3YW50IGNoYW5nZQorICogc29tZXRoaW5nIGhlcmUuICVkMCBhbmQgJWQxIGlzIGFsd2F5cyB1c2FibGUsIHNvbWV0aW1lcyAlZDIgKG9yCisgKiBvbmx5IHRoZSBsb3dlciBoYWxmKSBtb3N0IGZ1bmN0aW9uIGhhdmUgdG8gcmV0dXJuIHRoZSAlYTAKKyAqIHVubW9kaWZpZWQsIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gaW1tZWRpYXRlbHkgcmV1c2UgaXQuCisgKi8KKworCS5nbG9ibAlmcF9pbGwsIGZwX2VuZAorCisJfCBleGl0cyBmcm9tIGZwX3NjYW46CisJfCBpbGxlZ2FsIGluc3RydWN0aW9uCitmcF9pbGw6CisJcHJpbnRmCSwiZnBfaWxsZWdhbFxuIgorCXJ0cworCXwgY29tcGxldGVkIGluc3RydWN0aW9uCitmcF9lbmQ6CisJdHN0LmwJKFRBU0tfTU0tOCwlYTIpCisJam1pCTFmCisJdHN0LmwJKFRBU0tfTU0tNCwlYTIpCisJam1pCTFmCisJdHN0LmwJKFRBU0tfTU0sJWEyKQorCWpwbAkyZgorMToJcHJpbnRmCSwib29wczolcCwlcCwlcFxuIiwzLCVhMkAoVEFTS19NTS04KSwlYTJAKFRBU0tfTU0tNCksJWEyQChUQVNLX01NKQorMjoJY2xyLmwJJWQwCisJcnRzCisKKwkuZ2xvYmwJZnBfY29udl9sb25nMmV4dCwgZnBfY29udl9zaW5nbGUyZXh0CisJLmdsb2JsCWZwX2NvbnZfZG91YmxlMmV4dCwgZnBfY29udl9leHQyZXh0CisJLmdsb2JsCWZwX25vcm1hbGl6ZV9leHQsIGZwX25vcm1hbGl6ZV9kb3VibGUKKwkuZ2xvYmwJZnBfbm9ybWFsaXplX3NpbmdsZSwgZnBfbm9ybWFsaXplX3NpbmdsZV9mYXN0CisJLmdsb2JsCWZwX2NvbnZfZXh0MmRvdWJsZSwgZnBfY29udl9leHQyc2luZ2xlCisJLmdsb2JsCWZwX2NvbnZfZXh0MmxvbmcsIGZwX2NvbnZfZXh0MnNob3J0CisJLmdsb2JsCWZwX2NvbnZfZXh0MmJ5dGUKKwkuZ2xvYmwJZnBfZmluYWxyb3VuZGluZ19zaW5nbGUsIGZwX2ZpbmFscm91bmRpbmdfc2luZ2xlX2Zhc3QKKwkuZ2xvYmwJZnBfZmluYWxyb3VuZGluZ19kb3VibGUKKwkuZ2xvYmwJZnBfZmluYWxyb3VuZGluZywgZnBfZmluYWx0ZXN0LCBmcF9maW5hbAorCisvKgorICogRmlyc3Qgc2V2ZXJhbCBjb252ZXJzaW9uIGZ1bmN0aW9ucyBmcm9tIGEgc291cmNlIG9wZXJhbmQKKyAqIGludG8gdGhlIGV4dGVuZGVkIGZvcm1hdC4gTm90ZSwgdGhhdCBvbmx5IGZwX2NvbnZfZXh0MmV4dAorICogbm9ybWFsaXplcyB0aGUgbnVtYmVyIGFuZCBpcyBhbHdheXMgY2FsbGVkIGFmdGVyIHRoZSBvdGhlcgorICogY29udmVyc2lvbiBmdW5jdGlvbnMsIHdoaWNoIG9ubHkgbW92ZSB0aGUgaW5mb3JtYXRpb24gaW50bworICogZnBfZXh0IHN0cnVjdHVyZS4KKyAqLworCisJfCBmcF9jb252X2xvbmcyZXh0OgorCXwKKwl8IGFyZ3M6CSVkMCA9IHNvdXJjZSAoMzItYml0IGxvbmcpCisJfAklYTAgPSBkZXN0aW5hdGlvbiAocHRyIHRvIHN0cnVjdCBmcF9leHQpCisKK2ZwX2NvbnZfbG9uZzJleHQ6CisJcHJpbnRmCVBDT05WLCJsMmU6ICVwIC0+ICVwKCIsMiwlZDAsJWEwCisJY2xyLmwJJWQxCQkJfCBzaWduIGRlZmF1bHRzIHRvIHplcm8KKwl0c3QubAklZDAKKwlqZXEJZnBfbDJlX3plcm8JCXwgaXMgc291cmNlIHplcm8/CisJanBsCTFmCQkJfCBwb3NpdGl2ZT8KKwltb3ZlcQkjMSwlZDEKKwluZWcubAklZDAKKzE6CXN3YXAJJWQxCisJbW92ZS53CSMweDNmZmYrMzEsJWQxCisJbW92ZS5sCSVkMSwoJWEwKSsJCXwgc2V0IHNpZ24gLyBleHAKKwltb3ZlLmwJJWQwLCglYTApKwkJfCBzZXQgbWFudGlzc2EKKwljbHIubAkoJWEwKQorCXN1YnEubAkjOCwlYTAJCQl8IHJlc3RvcmUgJWEwCisJcHJpbnR4CVBDT05WLCVhMEAKKwlwcmludGYJUENPTlYsIilcbiIKKwlydHMKKwl8IHNvdXJjZSBpcyB6ZXJvCitmcF9sMmVfemVybzoKKwljbHIubAkoJWEwKSsKKwljbHIubAkoJWEwKSsKKwljbHIubAkoJWEwKQorCXN1YnEubAkjOCwlYTAKKwlwcmludHgJUENPTlYsJWEwQAorCXByaW50ZglQQ09OViwiKVxuIgorCXJ0cworCisJfCBmcF9jb252X3NpbmdsZTJleHQKKwl8IGFyZ3M6CSVkMCA9IHNvdXJjZSAoc2luZ2xlLXByZWNpc2lvbiBmcCB2YWx1ZSkKKwl8CSVhMCA9IGRlc3QgKHN0cnVjdCBmcF9leHQgKikKKworZnBfY29udl9zaW5nbGUyZXh0OgorCXByaW50ZglQQ09OViwiczJlOiAlcCAtPiAlcCgiLDIsJWQwLCVhMAorCW1vdmUubAklZDAsJWQxCisJbHNsLmwJIzgsJWQwCQkJfCBzaGlmdCBtYW50aXNzYQorCWxzci5sCSM4LCVkMQkJCXwgZXhwb25lbnQgLyBzaWduCisJbHNyLmwJIzcsJWQxCisJbHNyLncJIzgsJWQxCisJamVxCWZwX3MyZV9zbWFsbAkJfCB6ZXJvIC8gZGVub3JtYWw/CisJY21wLncJIzB4ZmYsJWQxCQl8IE5hTiAvIEluZj8KKwlqZXEJZnBfczJlX2xhcmdlCisJYnNldAkjMzEsJWQwCQkJfCBzZXQgZXhwbGl6aXQgYml0CisJYWRkLncJIzB4M2ZmZi0weDdmLCVkMQl8IHJlLWJpYXMgdGhlIGV4cG9uZW50LgorOToJbW92ZS5sCSVkMSwoJWEwKSsJCXwgZnBfZXh0LnNpZ24sIGZwX2V4dC5leHAKKwltb3ZlLmwJJWQwLCglYTApKwkJfCBoaWdoIGx3b3JkIG9mIGZwX2V4dC5tYW50CisJY2xyLmwJKCVhMCkJCQl8IGxvdyBsd29yZCA9IDAKKwlzdWJxLmwJIzgsJWEwCisJcHJpbnR4CVBDT05WLCVhMEAKKwlwcmludGYJUENPTlYsIilcbiIKKwlydHMKKwl8IHplcm9zIGFuZCBkZW5vcm1hbGl6ZWQKK2ZwX3MyZV9zbWFsbDoKKwl8IGV4cG9uZW50IGlzIHplcm8sIHNvIGV4cGxpeml0IGJpdCBpcyBhbHJlYWR5IHplcm8gdG9vCisJdHN0LmwJJWQwCisJamVxCTliCisJbW92ZS53CSMweDQwMDAtMHg3ZiwlZDEKKwlqcmEJOWIKKwl8IGluZmluaXRpZXMgYW5kIE5BTgorZnBfczJlX2xhcmdlOgorCWJjbHIJIzMxLCVkMAkJCXwgY2xlYXIgZXhwbGl6aXQgYml0CisJbW92ZS53CSMweDdmZmYsJWQxCisJanJhCTliCisKK2ZwX2NvbnZfZG91YmxlMmV4dDoKKyNpZmRlZiBGUFVfRU1VX0RFQlVHCisJZ2V0dXNlci5sICVhMUAoMCksJWQwLGZwX2Vycl91YTIsJWExCisJZ2V0dXNlci5sICVhMUAoNCksJWQxLGZwX2Vycl91YTIsJWExCisJcHJpbnRmCVBDT05WLCJkMmU6ICVwJXAgLT4gJXAoIiwzLCVkMCwlZDEsJWEwCisjZW5kaWYKKwlnZXR1c2VyLmwgKCVhMSkrLCVkMCxmcF9lcnJfdWEyLCVhMQorCW1vdmUubAklZDAsJWQxCisJbHNsLmwJIzgsJWQwCQkJfCBzaGlmdCBoaWdoIG1hbnRpc3NhCisJbHNsLmwJIzMsJWQwCisJbHNyLmwJIzgsJWQxCQkJfCBleHBvbmVudCAvIHNpZ24KKwlsc3IubAkjNywlZDEKKwlsc3IudwkjNSwlZDEKKwlqZXEJZnBfZDJlX3NtYWxsCQl8IHplcm8gLyBkZW5vcm1hbD8KKwljbXAudwkjMHg3ZmYsJWQxCQl8IE5hTiAvIEluZj8KKwlqZXEJZnBfZDJlX2xhcmdlCisJYnNldAkjMzEsJWQwCQkJfCBzZXQgZXhwbGl6aXQgYml0CisJYWRkLncJIzB4M2ZmZi0weDNmZiwlZDEJfCByZS1iaWFzIHRoZSBleHBvbmVudC4KKzk6CW1vdmUubAklZDEsKCVhMCkrCQl8IGZwX2V4dC5zaWduLCBmcF9leHQuZXhwCisJbW92ZS5sCSVkMCwoJWEwKSsKKwlnZXR1c2VyLmwgKCVhMSkrLCVkMCxmcF9lcnJfdWEyLCVhMQorCW1vdmUubAklZDAsJWQxCisJbHNsLmwJIzgsJWQwCisJbHNsLmwJIzMsJWQwCisJbW92ZS5sCSVkMCwoJWEwKQorCW1vdmVxCSMyMSwlZDAKKwlsc3IubAklZDAsJWQxCisJb3IubAklZDEsLSglYTApCisJc3VicS5sCSM0LCVhMAorCXByaW50eAlQQ09OViwlYTBACisJcHJpbnRmCVBDT05WLCIpXG4iCisJcnRzCisJfCB6ZXJvcyBhbmQgZGVub3JtYWxpemVkCitmcF9kMmVfc21hbGw6CisJfCBleHBvbmVudCBpcyB6ZXJvLCBzbyBleHBsaXppdCBiaXQgaXMgYWxyZWFkeSB6ZXJvIHRvbworCXRzdC5sCSVkMAorCWplcQk5YgorCW1vdmUudwkjMHg0MDAwLTB4M2ZmLCVkMQorCWpyYQk5YgorCXwgaW5maW5pdGllcyBhbmQgTkFOCitmcF9kMmVfbGFyZ2U6CisJYmNscgkjMzEsJWQwCQkJfCBjbGVhciBleHBsaXppdCBiaXQKKwltb3ZlLncJIzB4N2ZmZiwlZDEKKwlqcmEJOWIKKworCXwgZnBfY29udl9leHQyZXh0OgorCXwgb3JpZ2luYWxseSB1c2VkIHRvIGdldCBsb25nZG91YmxlIGZyb20gdXNlcnNwYWNlLCBub3cgaXQncworCXwgY2FsbGVkIGJlZm9yZSBhcml0aG1ldGljIG9wZXJhdGlvbnMgdG8gbWFrZSBzdXJlIHRoZSBudW1iZXIKKwl8IGlzIG5vcm1hbGl6ZWQgW21heWJlIHJlbmFtZSBpdD9dLgorCXwgYXJnczoJJWEwID0gZGVzdCAoc3RydWN0IGZwX2V4dCAqKQorCXwgcmV0dXJucyAwIGluICVkMCBmb3IgYSBOYU4sIG90aGVyd2lzZSAxCisKK2ZwX2NvbnZfZXh0MmV4dDoKKwlwcmludGYJUENPTlYsImUyZTogJXAoIiwxLCVhMAorCXByaW50eAlQQ09OViwlYTBACisJcHJpbnRmCVBDT05WLCIpLCAiCisJbW92ZS5sCSglYTApKywlZDAKKwljbXAudwkjMHg3ZmZmLCVkMAkJfCBJbmYgLyBOYU4/CisJamVxCWZwX2UyZV9sYXJnZQorCW1vdmUubAkoJWEwKSwlZDAKKwlqcGwJZnBfZTJlX3NtYWxsCQl8IHplcm8gLyBkZW5vcm0/CisJfCBUaGUgaGlnaCBiaXQgaXMgc2V0LCBzbyBub3JtYWxpemF0aW9uIGlzIGlycmVsZXZhbnQuCitmcF9lMmVfY2hlY2tyb3VuZDoKKwlzdWJxLmwJIzQsJWEwCisjaWZkZWYgQ09ORklHX002OEtGUFVfRU1VX0VYVFJBUFJFQworCW1vdmUuYgkoJWEwKSwlZDAKKwlqbmUJZnBfZTJlX3JvdW5kCisjZW5kaWYKKwlwcmludGYJUENPTlYsIiVwKCIsMSwlYTAKKwlwcmludHgJUENPTlYsJWEwQAorCXByaW50ZglQQ09OViwiKVxuIgorCW1vdmVxCSMxLCVkMAorCXJ0cworI2lmZGVmIENPTkZJR19NNjhLRlBVX0VNVV9FWFRSQVBSRUMKK2ZwX2UyZV9yb3VuZDoKKwlmcF9zZXRfc3IgRlBTUl9FWENfSU5FWDIKKwljbHIuYgkoJWEwKQorCW1vdmUudwkoRlBEX1JORCxGUERBVEEpLCVkMgorCWpuZQlmcF9lMmVfcm91bmRvdGhlcgl8ICVkMiA9PSAwLCByb3VuZCB0byBuZWFyZXN0CisJdHN0LmIJJWQwCQkJfCB0ZXN0IGd1YXJkIGJpdAorCWpwbAk5ZgkJCXwgemVybyBpcyBjbG9zZXIKKwlidHN0CSMwLCgxMSwlYTApCQl8IHRlc3QgbHNiIGJpdAorCWpuZQlmcF9lMmVfZG9yb3VuZHVwCXwgcm91bmQgdG8gaW5maW5pdHkKKwlsc2wuYgkjMSwlZDAJCQl8IGNoZWNrIGxvdyBiaXRzCisJamVxCTlmCQkJfCByb3VuZCB0byB6ZXJvCitmcF9lMmVfZG9yb3VuZHVwOgorCWFkZHEubAkjMSwoOCwlYTApCisJamNjCTlmCisJYWRkcS5sCSMxLCg0LCVhMCkKKwlqY2MJOWYKKwltb3ZlLncJIzB4ODAwMCwoNCwlYTApCisJYWRkcS53CSMxLCgyLCVhMCkKKzk6CXByaW50ZglQTk9STSwiJXAoIiwxLCVhMAorCXByaW50eAlQTk9STSwlYTBACisJcHJpbnRmCVBOT1JNLCIpXG4iCisJcnRzCitmcF9lMmVfcm91bmRvdGhlcjoKKwlzdWJxLncJIzIsJWQyCisJamNzCTliCQkJfCAlZDIgPCAyLCByb3VuZCB0byB6ZXJvCisJamhpCTFmCQkJfCAlZDIgPiAyLCByb3VuZCB0byAraW5maW5pdHkKKwl0c3QuYgkoMSwlYTApCQkJfCB0byAtaW5mCisJam5lCWZwX2UyZV9kb3JvdW5kdXAJfCBuZWdhdGl2ZSwgcm91bmQgdG8gaW5maW5pdHkKKwlqcmEJOWIJCQl8IHBvc2l0aXZlLCByb3VuZCB0byB6ZXJvCisxOgl0c3QuYgkoMSwlYTApCQkJfCB0byAraW5mCisJamVxCWZwX2UyZV9kb3JvdW5kdXAJfCBwb3NpdGl2ZSwgcm91bmQgdG8gaW5maW5pdHkKKwlqcmEJOWIJCQl8IG5lZ2F0aXZlLCByb3VuZCB0byB6ZXJvCisjZW5kaWYKKwl8IHplcm9zIGFuZCBzdWJub3JtYWxzOgorCXwgdHJ5IHRvIG5vcm1hbGl6ZSB0aGVzZSBhbnl3YXkuCitmcF9lMmVfc21hbGw6CisJam5lCWZwX2UyZV9zbWFsbDEJCXwgaGlnaCBsd29yZCB6ZXJvPworCW1vdmUubAkoNCwlYTApLCVkMAorCWpuZQlmcF9lMmVfc21hbGwyCisjaWZkZWYgQ09ORklHX002OEtGUFVfRU1VX0VYVFJBUFJFQworCWNsci5sCSVkMAorCW1vdmUuYgkoLTQsJWEwKSwlZDAKKwlqbmUJZnBfZTJlX3NtYWxsMworI2VuZGlmCisJfCBHZW51aW5lIHplcm8uCisJY2xyLncJLSglYTApCisJc3VicS5sCSMyLCVhMAorCXByaW50ZglQTk9STSwiJXAoIiwxLCVhMAorCXByaW50eAlQTk9STSwlYTBACisJcHJpbnRmCVBOT1JNLCIpXG4iCisJbW92ZXEJIzEsJWQwCisJcnRzCisJfCBkZWZpbml0ZWx5IHN1Ym5vcm1hbCwgbmVlZCB0byBzaGlmdCBhbGwgNjQgYml0cworZnBfZTJlX3NtYWxsMToKKwliZmZmbwklZDB7IzAsIzMyfSwlZDEKKwltb3ZlLncJLSglYTApLCVkMgorCXN1Yi53CSVkMSwlZDIKKwlqY2MJMWYKKwl8IFBhdGhvbG9naWNhbGx5IHNtYWxsLCBkZW5vcm1hbGl6ZS4KKwlhZGQudwklZDIsJWQxCisJY2xyLncJJWQyCisxOgltb3ZlLncJJWQyLCglYTApKworCW1vdmUudwklZDEsJWQyCisJamVxCWZwX2UyZV9jaGVja3JvdW5kCisJfCBmYW5jeSA2NC1iaXQgZG91YmxlLXNoaWZ0IGJlZ2lucyBoZXJlCisJbHNsLmwJJWQyLCVkMAorCW1vdmUubAklZDAsKCVhMCkrCisJbW92ZS5sCSglYTApLCVkMAorCW1vdmUubAklZDAsJWQxCisJbHNsLmwJJWQyLCVkMAorCW1vdmUubAklZDAsKCVhMCkKKwluZWcudwklZDIKKwlhbmQudwkjMHgxZiwlZDIKKwlsc3IubAklZDIsJWQxCisJb3IubAklZDEsLSglYTApCisjaWZkZWYgQ09ORklHX002OEtGUFVfRU1VX0VYVFJBUFJFQworZnBfZTJlX2V4dHJhMToKKwljbHIubAklZDAKKwltb3ZlLmIJKC00LCVhMCksJWQwCisJbmVnLncJJWQyCisJYWRkLncJIzI0LCVkMgorCWpjYwkxZgorCWNsci5iCSgtNCwlYTApCisJbHNsLmwJJWQyLCVkMAorCW9yLmwJJWQwLCg0LCVhMCkKKwlqcmEJZnBfZTJlX2NoZWNrcm91bmQKKzE6CWFkZHEudwkjOCwlZDIKKwlsc2wubAklZDIsJWQwCisJbW92ZS5iCSVkMCwoLTQsJWEwKQorCWxzci5sCSM4LCVkMAorCW9yLmwJJWQwLCg0LCVhMCkKKyNlbmRpZgorCWpyYQlmcF9lMmVfY2hlY2tyb3VuZAorCXwgcGF0aG9sb2dpY2FsbHkgc21hbGwgc3Vibm9ybWFsCitmcF9lMmVfc21hbGwyOgorCWJmZmZvCSVkMHsjMCwjMzJ9LCVkMQorCWFkZC53CSMzMiwlZDEKKwltb3ZlLncJLSglYTApLCVkMgorCXN1Yi53CSVkMSwlZDIKKwlqY2MJMWYKKwl8IEJleW9uZCBwYXRob2xvZ2ljYWxseSBzbWFsbCwgZGVub3JtYWxpemUuCisJYWRkLncJJWQyLCVkMQorCWNsci53CSVkMgorMToJbW92ZS53CSVkMiwoJWEwKSsKKwlleHQubAklZDEKKwlqZXEJZnBfZTJlX2NoZWNrcm91bmQKKwljbHIubAkoNCwlYTApCisJc3ViLncJIzMyLCVkMgorCWpjcwkxZgorCWxzbC5sCSVkMSwlZDAJCQl8IGxvd2VyIGx3b3JkIG5lZWRzIG9ubHkgdG8gYmUgc2hpZnRlZAorCW1vdmUubAklZDAsKCVhMCkJCXwgaW50byB0aGUgaGlnaGVyIGx3b3JkCisjaWZkZWYgQ09ORklHX002OEtGUFVfRU1VX0VYVFJBUFJFQworCWNsci5sCSVkMAorCW1vdmUuYgkoLTQsJWEwKSwlZDAKKwljbHIuYgkoLTQsJWEwKQorCW5lZy53CSVkMQorCWFkZC53CSMzMiwlZDEKKwliZmlucwklZDAsKCVhMCl7JWQxLCM4fQorI2VuZGlmCisJanJhCWZwX2UyZV9jaGVja3JvdW5kCisxOgluZWcudwklZDEJCQl8IGxvd2VyIGx3b3JkIGlzIHNwbGl0dGVkIGJldHdlZW4KKwliZmlucwklZDAsKCVhMCl7JWQxLCMzMn0JfCBoaWdoZXIgYW5kIGxvd2VyIGx3b3JkCisjaWZuZGVmIENPTkZJR19NNjhLRlBVX0VNVV9FWFRSQVBSRUMKKwlqcmEJZnBfZTJlX2NoZWNrcm91bmQKKyNlbHNlCisJbW92ZS53CSVkMSwlZDIKKwlqcmEJZnBfZTJlX2V4dHJhMQorCXwgVGhlc2UgYXJlIGV4dHJlbWVseSBzbWFsbCBudW1iZXJzLCB0aGF0IHdpbGwgbW9zdGx5IGVuZCB1cCBhcyB6ZXJvCisJfCBhbnl3YXksIHNvIHRoaXMgaXMgb25seSBpbXBvcnRhbnQgZm9yIGNvcnJlY3Qgcm91bmRpbmcuCitmcF9lMmVfc21hbGwzOgorCWJmZmZvCSVkMHsjMjQsIzh9LCVkMQorCWFkZC53CSM0MCwlZDEKKwltb3ZlLncJLSglYTApLCVkMgorCXN1Yi53CSVkMSwlZDIKKwlqY2MJMWYKKwl8IFBhdGhvbG9naWNhbGx5IHNtYWxsLCBkZW5vcm1hbGl6ZS4KKwlhZGQudwklZDIsJWQxCisJY2xyLncJJWQyCisxOgltb3ZlLncJJWQyLCglYTApKworCWV4dC5sCSVkMQorCWplcQlmcF9lMmVfY2hlY2tyb3VuZAorCWNtcC53CSM4LCVkMQorCWpjcwkyZgorMToJY2xyLmIJKC00LCVhMCkKKwlzdWIudwkjNjQsJWQxCisJamNzCTFmCisJYWRkLncJIzI0LCVkMQorCWxzbC5sCSVkMSwlZDAKKwltb3ZlLmwJJWQwLCglYTApCisJanJhCWZwX2UyZV9jaGVja3JvdW5kCisxOgluZWcudwklZDEKKwliZmlucwklZDAsKCVhMCl7JWQxLCM4fQorCWpyYQlmcF9lMmVfY2hlY2tyb3VuZAorMjoJbHNsLmwJJWQxLCVkMAorCW1vdmUuYgklZDAsKC00LCVhMCkKKwlsc3IubAkjOCwlZDAKKwltb3ZlLmIJJWQwLCg3LCVhMCkKKwlqcmEJZnBfZTJlX2NoZWNrcm91bmQKKyNlbmRpZgorMToJbW92ZS5sCSVkMCwlZDEJCQl8IGxvd2VyIGx3b3JkIGlzIHNwbGl0dGVkIGJldHdlZW4KKwlsc2wubAklZDIsJWQwCQkJfCBoaWdoZXIgYW5kIGxvd2VyIGx3b3JkCisJbW92ZS5sCSVkMCwoJWEwKQorCW1vdmUubAklZDEsJWQwCisJbmVnLncJJWQyCisJYWRkLncJIzMyLCVkMgorCWxzci5sCSVkMiwlZDAKKwltb3ZlLmwJJWQwLC0oJWEwKQorCWpyYQlmcF9lMmVfY2hlY2tyb3VuZAorCXwgSW5maW5pdGllcyBhbmQgTmFOcworZnBfZTJlX2xhcmdlOgorCW1vdmUubAkoJWEwKSssJWQwCisJam5lCTNmCisxOgl0c3QubAkoJWEwKQorCWpuZQk0ZgorCW1vdmVxCSMxLCVkMAorMjoJc3VicS5sCSM4LCVhMAorCXByaW50ZglQQ09OViwiJXAoIiwxLCVhMAorCXByaW50eAlQQ09OViwlYTBACisJcHJpbnRmCVBDT05WLCIpXG4iCisJcnRzCisJfCB3ZSBoYXZlIG1heWJlIGEgTmFOLCBzaGlmdCBvZmYgdGhlIGhpZ2hlc3QgYml0CiszOglsc2wubAkjMSwlZDAKKwlqZXEJMWIKKwl8IHdlIGhhdmUgYSBOYU4sIGNsZWFyIHRoZSByZXR1cm4gdmFsdWUKKzQ6CWNscmwJJWQwCisJanJhCTJiCisKKworLyoKKyAqIE5vcm1hbGl6YXRpb24gZnVuY3Rpb25zLiAgQ2FsbCB0aGVzZSBvbiB0aGUgb3V0cHV0IG9mIGdlbmVyYWwKKyAqIEZQIG9wZXJhdG9ycywgYW5kIGJlZm9yZSBhbnkgY29udmVyc2lvbiBpbnRvIHRoZSBkZXN0aW5hdGlvbgorICogZm9ybWF0cy4gZnBfbm9ybWFsaXplX2V4dCBoYXMgYWx3YXlzIHRvIGJlIGNhbGxlZCBmaXJzdCwgdGhlCisgKiBmb2xsb3dpbmcgY29udmVyc2lvbiBmdW5jdGlvbnMgZXhwZWN0IGFuIGFscmVhZHkgbm9ybWFsaXplZAorICogbnVtYmVyLgorICovCisKKwl8IGZwX25vcm1hbGl6ZV9leHQ6CisJfCBub3JtYWxpemUgYW4gZXh0ZW5kZWQgaW4gZXh0ZW5kZWQgKHVucGFja2VkKSBmb3JtYXQsIGJhc2ljYWxseQorCXwgaXQgZG9lcyB0aGUgc2FtZSBhcyBmcF9jb252X2V4dDJleHQsIGFkZGl0aW9uYWxseSBpdCBhbHNvIGRvZXMKKwl8IHRoZSBuZWNlc3NhcnkgcG9zdHByb2Nlc3NpbmcgY2hlY2tzLgorCXwgYXJnczoJJWEwIChzdHJ1Y3QgZnBfZXh0ICopCisJfCBOT1RFOiBpdCBkb2VzIF9ub3RfIG1vZGlmeSAlYTAvJWExIGFuZCB0aGUgdXBwZXIgd29yZCBvZiAlZDIKKworZnBfbm9ybWFsaXplX2V4dDoKKwlwcmludGYJUE5PUk0sIm5lOiAlcCgiLDEsJWEwCisJcHJpbnR4CVBOT1JNLCVhMEAKKwlwcmludGYJUE5PUk0sIiksICIKKwltb3ZlLmwJKCVhMCkrLCVkMAorCWNtcC53CSMweDdmZmYsJWQwCQl8IEluZiAvIE5hTj8KKwlqZXEJZnBfbmVfbGFyZ2UKKwltb3ZlLmwJKCVhMCksJWQwCisJanBsCWZwX25lX3NtYWxsCQl8IHplcm8gLyBkZW5vcm0/CisJfCBUaGUgaGlnaCBiaXQgaXMgc2V0LCBzbyBub3JtYWxpemF0aW9uIGlzIGlycmVsZXZhbnQuCitmcF9uZV9jaGVja3JvdW5kOgorCXN1YnEubAkjNCwlYTAKKyNpZmRlZiBDT05GSUdfTTY4S0ZQVV9FTVVfRVhUUkFQUkVDCisJbW92ZS5iCSglYTApLCVkMAorCWpuZQlmcF9uZV9yb3VuZAorI2VuZGlmCisJcHJpbnRmCVBOT1JNLCIlcCgiLDEsJWEwCisJcHJpbnR4CVBOT1JNLCVhMEAKKwlwcmludGYJUE5PUk0sIilcbiIKKwlydHMKKyNpZmRlZiBDT05GSUdfTTY4S0ZQVV9FTVVfRVhUUkFQUkVDCitmcF9uZV9yb3VuZDoKKwlmcF9zZXRfc3IgRlBTUl9FWENfSU5FWDIKKwljbHIuYgkoJWEwKQorCW1vdmUudwkoRlBEX1JORCxGUERBVEEpLCVkMgorCWpuZQlmcF9uZV9yb3VuZG90aGVyCXwgJWQyID09IDAsIHJvdW5kIHRvIG5lYXJlc3QKKwl0c3QuYgklZDAJCQl8IHRlc3QgZ3VhcmQgYml0CisJanBsCTlmCQkJfCB6ZXJvIGlzIGNsb3NlcgorCWJ0c3QJIzAsKDExLCVhMCkJCXwgdGVzdCBsc2IgYml0CisJam5lCWZwX25lX2Rvcm91bmR1cAkJfCByb3VuZCB0byBpbmZpbml0eQorCWxzbC5iCSMxLCVkMAkJCXwgY2hlY2sgbG93IGJpdHMKKwlqZXEJOWYJCQl8IHJvdW5kIHRvIHplcm8KK2ZwX25lX2Rvcm91bmR1cDoKKwlhZGRxLmwJIzEsKDgsJWEwKQorCWpjYwk5ZgorCWFkZHEubAkjMSwoNCwlYTApCisJamNjCTlmCisJYWRkcS53CSMxLCgyLCVhMCkKKwltb3ZlLncJIzB4ODAwMCwoNCwlYTApCis5OglwcmludGYJUE5PUk0sIiVwKCIsMSwlYTAKKwlwcmludHgJUE5PUk0sJWEwQAorCXByaW50ZglQTk9STSwiKVxuIgorCXJ0cworZnBfbmVfcm91bmRvdGhlcjoKKwlzdWJxLncJIzIsJWQyCisJamNzCTliCQkJfCAlZDIgPCAyLCByb3VuZCB0byB6ZXJvCisJamhpCTFmCQkJfCAlZDIgPiAyLCByb3VuZCB0byAraW5maW5pdHkKKwl0c3QuYgkoMSwlYTApCQkJfCB0byAtaW5mCisJam5lCWZwX25lX2Rvcm91bmR1cAkJfCBuZWdhdGl2ZSwgcm91bmQgdG8gaW5maW5pdHkKKwlqcmEJOWIJCQl8IHBvc2l0aXZlLCByb3VuZCB0byB6ZXJvCisxOgl0c3QuYgkoMSwlYTApCQkJfCB0byAraW5mCisJamVxCWZwX25lX2Rvcm91bmR1cAkJfCBwb3NpdGl2ZSwgcm91bmQgdG8gaW5maW5pdHkKKwlqcmEJOWIJCQl8IG5lZ2F0aXZlLCByb3VuZCB0byB6ZXJvCisjZW5kaWYKKwl8IFplcm9zIGFuZCBzdWJub3JtYWwgbnVtYmVycworCXwgVGhlc2UgYXJlIHByb2JhYmx5IG1lcmVseSBzdWJub3JtYWwsIHJhdGhlciB0aGFuICJkZW5vcm1hbGl6ZWQiCisJfCAgbnVtYmVycywgc28gd2Ugd2lsbCB0cnkgdG8gbWFrZSB0aGVtIG5vcm1hbCBhZ2Fpbi4KK2ZwX25lX3NtYWxsOgorCWpuZQlmcF9uZV9zbWFsbDEJCXwgaGlnaCBsd29yZCB6ZXJvPworCW1vdmUubAkoNCwlYTApLCVkMAorCWpuZQlmcF9uZV9zbWFsbDIKKyNpZmRlZiBDT05GSUdfTTY4S0ZQVV9FTVVfRVhUUkFQUkVDCisJY2xyLmwJJWQwCisJbW92ZS5iCSgtNCwlYTApLCVkMAorCWpuZQlmcF9uZV9zbWFsbDMKKyNlbmRpZgorCXwgR2VudWluZSB6ZXJvLgorCWNsci53CS0oJWEwKQorCXN1YnEubAkjMiwlYTAKKwlwcmludGYJUE5PUk0sIiVwKCIsMSwlYTAKKwlwcmludHgJUE5PUk0sJWEwQAorCXByaW50ZglQTk9STSwiKVxuIgorCXJ0cworCXwgU3Vibm9ybWFsLgorZnBfbmVfc21hbGwxOgorCWJmZmZvCSVkMHsjMCwjMzJ9LCVkMQorCW1vdmUudwktKCVhMCksJWQyCisJc3ViLncJJWQxLCVkMgorCWpjYwkxZgorCXwgUGF0aG9sb2dpY2FsbHkgc21hbGwsIGRlbm9ybWFsaXplLgorCWFkZC53CSVkMiwlZDEKKwljbHIudwklZDIKKwlmcF9zZXRfc3IgRlBTUl9FWENfVU5GTAorMToJbW92ZS53CSVkMiwoJWEwKSsKKwltb3ZlLncJJWQxLCVkMgorCWplcQlmcF9uZV9jaGVja3JvdW5kCisJfCBUaGlzIGlzIGV4YWN0bHkgdGhlIHNhbWUgNjQtYml0IGRvdWJsZSBzaGlmdCBhcyBzZWVuIGFib3ZlLgorCWxzbC5sCSVkMiwlZDAKKwltb3ZlLmwJJWQwLCglYTApKworCW1vdmUubAkoJWEwKSwlZDAKKwltb3ZlLmwJJWQwLCVkMQorCWxzbC5sCSVkMiwlZDAKKwltb3ZlLmwJJWQwLCglYTApCisJbmVnLncJJWQyCisJYW5kLncJIzB4MWYsJWQyCisJbHNyLmwJJWQyLCVkMQorCW9yLmwJJWQxLC0oJWEwKQorI2lmZGVmIENPTkZJR19NNjhLRlBVX0VNVV9FWFRSQVBSRUMKK2ZwX25lX2V4dHJhMToKKwljbHIubAklZDAKKwltb3ZlLmIJKC00LCVhMCksJWQwCisJbmVnLncJJWQyCisJYWRkLncJIzI0LCVkMgorCWpjYwkxZgorCWNsci5iCSgtNCwlYTApCisJbHNsLmwJJWQyLCVkMAorCW9yLmwJJWQwLCg0LCVhMCkKKwlqcmEJZnBfbmVfY2hlY2tyb3VuZAorMToJYWRkcS53CSM4LCVkMgorCWxzbC5sCSVkMiwlZDAKKwltb3ZlLmIJJWQwLCgtNCwlYTApCisJbHNyLmwJIzgsJWQwCisJb3IubAklZDAsKDQsJWEwKQorI2VuZGlmCisJanJhCWZwX25lX2NoZWNrcm91bmQKKwl8IE1heSBvciBtYXkgbm90IGJlIHN1Ym5vcm1hbCwgaWYgc28sIG9ubHkgMzIgYml0cyB0byBzaGlmdC4KK2ZwX25lX3NtYWxsMjoKKwliZmZmbwklZDB7IzAsIzMyfSwlZDEKKwlhZGQudwkjMzIsJWQxCisJbW92ZS53CS0oJWEwKSwlZDIKKwlzdWIudwklZDEsJWQyCisJamNjCTFmCisJfCBCZXlvbmQgcGF0aG9sb2dpY2FsbHkgc21hbGwsIGRlbm9ybWFsaXplLgorCWFkZC53CSVkMiwlZDEKKwljbHIudwklZDIKKwlmcF9zZXRfc3IgRlBTUl9FWENfVU5GTAorMToJbW92ZS53CSVkMiwoJWEwKSsKKwlleHQubAklZDEKKwlqZXEJZnBfbmVfY2hlY2tyb3VuZAorCWNsci5sCSg0LCVhMCkKKwlzdWIudwkjMzIsJWQxCisJamNzCTFmCisJbHNsLmwJJWQxLCVkMAkJCXwgbG93ZXIgbHdvcmQgbmVlZHMgb25seSB0byBiZSBzaGlmdGVkCisJbW92ZS5sCSVkMCwoJWEwKQkJfCBpbnRvIHRoZSBoaWdoZXIgbHdvcmQKKyNpZmRlZiBDT05GSUdfTTY4S0ZQVV9FTVVfRVhUUkFQUkVDCisJY2xyLmwJJWQwCisJbW92ZS5iCSgtNCwlYTApLCVkMAorCWNsci5iCSgtNCwlYTApCisJbmVnLncJJWQxCisJYWRkLncJIzMyLCVkMQorCWJmaW5zCSVkMCwoJWEwKXslZDEsIzh9CisjZW5kaWYKKwlqcmEJZnBfbmVfY2hlY2tyb3VuZAorMToJbmVnLncJJWQxCQkJfCBsb3dlciBsd29yZCBpcyBzcGxpdHRlZCBiZXR3ZWVuCisJYmZpbnMJJWQwLCglYTApeyVkMSwjMzJ9CXwgaGlnaGVyIGFuZCBsb3dlciBsd29yZAorI2lmbmRlZiBDT05GSUdfTTY4S0ZQVV9FTVVfRVhUUkFQUkVDCisJanJhCWZwX25lX2NoZWNrcm91bmQKKyNlbHNlCisJbW92ZS53CSVkMSwlZDIKKwlqcmEJZnBfbmVfZXh0cmExCisJfCBUaGVzZSBhcmUgZXh0cmVtZWx5IHNtYWxsIG51bWJlcnMsIHRoYXQgd2lsbCBtb3N0bHkgZW5kIHVwIGFzIHplcm8KKwl8IGFueXdheSwgc28gdGhpcyBpcyBvbmx5IGltcG9ydGFudCBmb3IgY29ycmVjdCByb3VuZGluZy4KK2ZwX25lX3NtYWxsMzoKKwliZmZmbwklZDB7IzI0LCM4fSwlZDEKKwlhZGQudwkjNDAsJWQxCisJbW92ZS53CS0oJWEwKSwlZDIKKwlzdWIudwklZDEsJWQyCisJamNjCTFmCisJfCBQYXRob2xvZ2ljYWxseSBzbWFsbCwgZGVub3JtYWxpemUuCisJYWRkLncJJWQyLCVkMQorCWNsci53CSVkMgorMToJbW92ZS53CSVkMiwoJWEwKSsKKwlleHQubAklZDEKKwlqZXEJZnBfbmVfY2hlY2tyb3VuZAorCWNtcC53CSM4LCVkMQorCWpjcwkyZgorMToJY2xyLmIJKC00LCVhMCkKKwlzdWIudwkjNjQsJWQxCisJamNzCTFmCisJYWRkLncJIzI0LCVkMQorCWxzbC5sCSVkMSwlZDAKKwltb3ZlLmwJJWQwLCglYTApCisJanJhCWZwX25lX2NoZWNrcm91bmQKKzE6CW5lZy53CSVkMQorCWJmaW5zCSVkMCwoJWEwKXslZDEsIzh9CisJanJhCWZwX25lX2NoZWNrcm91bmQKKzI6CWxzbC5sCSVkMSwlZDAKKwltb3ZlLmIJJWQwLCgtNCwlYTApCisJbHNyLmwJIzgsJWQwCisJbW92ZS5iCSVkMCwoNywlYTApCisJanJhCWZwX25lX2NoZWNrcm91bmQKKyNlbmRpZgorCXwgSW5maW5pdGllcyBhbmQgTmFOcywgYWdhaW4sIHNhbWUgYXMgYWJvdmUuCitmcF9uZV9sYXJnZToKKwltb3ZlLmwJKCVhMCkrLCVkMAorCWpuZQkzZgorMToJdHN0LmwJKCVhMCkKKwlqbmUJNGYKKzI6CXN1YnEubAkjOCwlYTAKKwlwcmludGYJUE5PUk0sIiVwKCIsMSwlYTAKKwlwcmludHgJUE5PUk0sJWEwQAorCXByaW50ZglQTk9STSwiKVxuIgorCXJ0cworCXwgd2UgaGF2ZSBtYXliZSBhIE5hTiwgc2hpZnQgb2ZmIHRoZSBoaWdoZXN0IGJpdAorMzoJbW92ZS5sCSVkMCwlZDEKKwlsc2wubAkjMSwlZDEKKwlqbmUJNGYKKwljbHIubAkoLTQsJWEwKQorCWpyYQkxYgorCXwgd2UgaGF2ZSBhIE5hTiwgdGVzdCBpZiBpdCBpcyBzaWduYWxpbmcKKzQ6CWJzZXQJIzMwLCVkMAorCWpuZQkyYgorCWZwX3NldF9zciBGUFNSX0VYQ19TTkFOCisJbW92ZS5sCSVkMCwoLTQsJWEwKQorCWpyYQkyYgorCisJfCB0aGVzZSBuZXh0IHR3byBkbyByb3VuZGluZyBhcyBwZXIgdGhlIElFRUUgc3RhbmRhcmQuCisJfCB2YWx1ZXMgZm9yIHRoZSByb3VuZGluZyBtb2RlcyBhcHBlYXIgdG8gYmU6CisJfCAwOglSb3VuZCB0byBuZWFyZXN0CisJfCAxOglSb3VuZCB0byB6ZXJvCisJfCAyOglSb3VuZCB0byAtSW5maW5pdHkKKwl8IDM6CVJvdW5kIHRvICtJbmZpbml0eQorCXwgYm90aCBmdW5jdGlvbnMgZXhwZWN0IHRoYXQgZnBfbm9ybWFsaXplIHdhcyBhbHJlYWR5CisJfCBjYWxsZWQgKGFuZCBleHRlbmRlZCBhcmd1bWVudCBpcyBhbHJlYWR5IG5vcm1hbGl6ZWQKKwl8IGFzIGZhciBhcyBwb3NzaWJsZSksIHRoZXNlIGFyZSB1c2VkIGlmIHRoZXJlIGlzIGRpZmZlcmVudAorCXwgcm91bmRpbmcgcHJlY2lzaW9uIGlzIHNlbGVjdGVkIGFuZCBiZWZvcmUgY29udmVydGluZworCXwgaW50byBzaW5nbGUvZG91YmxlCisKKwl8IGZwX25vcm1hbGl6ZV9kb3VibGU6CisJfCBub3JtYWxpemUgYW4gZXh0ZW5kZWQgd2l0aCBkb3VibGUgKDUyLWJpdCkgcHJlY2lzaW9uCisJfCBhcmdzOgkgJWEwIChzdHJ1Y3QgZnBfZXh0ICopCisKK2ZwX25vcm1hbGl6ZV9kb3VibGU6CisJcHJpbnRmCVBOT1JNLCJuZDogJXAoIiwxLCVhMAorCXByaW50eAlQTk9STSwlYTBACisJcHJpbnRmCVBOT1JNLCIpLCAiCisJbW92ZS5sCSglYTApKywlZDIKKwl0c3QudwklZDIKKwlqZXEJZnBfbmRfemVybwkJfCB6ZXJvIC8gZGVub3JtYWxpemVkCisJY21wLncJIzB4N2ZmZiwlZDIKKwlqZXEJZnBfbmRfaHVnZQkJfCBOYU4gLyBpbmZpbml0aXZlLgorCXN1Yi53CSMweDQwMDAtMHgzZmYsJWQyCXwgd2lsbCB0aGUgZXhwb25lbnQgZml0PworCWpjcwlmcF9uZF9zbWFsbAkJfCB0b28gc21hbGwuCisJY21wLncJIzB4N2ZlLCVkMgorCWpjYwlmcF9uZF9sYXJnZQkJfCB0b28gYmlnLgorCWFkZHEubAkjNCwlYTAKKwltb3ZlLmwJKCVhMCksJWQwCQl8IGxvdyBsd29yZCBvZiBtYW50aXNzYQorCXwgbm93LCByb3VuZCBvZmYgdGhlIGxvdyAxMSBiaXRzLgorZnBfbmRfcm91bmQ6CisJbW92ZXEJIzIxLCVkMQorCWxzbC5sCSVkMSwlZDAJCQl8IGtlZXAgMTEgbG93IGJpdHMuCisJam5lCWZwX25kX2NoZWNrcm91bmQJfCBBcmUgdGhleSBub24temVybz8KKwl8IG5vdGhpbmcgdG8gZG8gaGVyZQorOToJc3VicS5sCSM4LCVhMAorCXByaW50ZglQTk9STSwiJXAoIiwxLCVhMAorCXByaW50eAlQTk9STSwlYTBACisJcHJpbnRmCVBOT1JNLCIpXG4iCisJcnRzCisJfCBCZSBjYXJlZnVsIHdpdGggdGhlIFggYml0ISBJdCBjb250YWlucyB0aGUgbHNiCisJfCBmcm9tIHRoZSBzaGlmdCBhYm92ZSwgaXQgaXMgbmVlZGVkIGZvciByb3VuZCB0byBuZWFyZXN0LgorZnBfbmRfY2hlY2tyb3VuZDoKKwlmcF9zZXRfc3IgRlBTUl9FWENfSU5FWDIJfCBJTkVYMiBiaXQKKwlhbmQudwkjMHhmODAwLCgyLCVhMCkJCXwgY2xlYXIgYml0cyAwLTEwCisJbW92ZS53CShGUERfUk5ELEZQREFUQSksJWQyCXwgcm91bmRpbmcgbW9kZQorCWpuZQkyZgkJCXwgJWQyID09IDAsIHJvdW5kIHRvIG5lYXJlc3QKKwl0c3QubAklZDAJCQl8IHRlc3QgZ3VhcmQgYml0CisJanBsCTliCQkJfCB6ZXJvIGlzIGNsb3NlcgorCXwgaGVyZSB3ZSB0ZXN0IHRoZSBYIGJpdCBieSBhZGRpbmcgaXQgdG8gJWQyCisJY2xyLncJJWQyCQkJfCBmaXJzdCBzZXQgeiBiaXQsIGFkZHggb25seSBjbGVhcnMgaXQKKwlhZGR4LncJJWQyLCVkMgkJCXwgdGVzdCBsc2IgYml0CisJfCBJRUVFNzU0LXNwZWNpZmllZCAicm91bmQgdG8gZXZlbiIgYmVoYXZpb3VyLiAgSWYgdGhlIGd1YXJkCisJfCBiaXQgaXMgc2V0LCB0aGVuIHRoZSBudW1iZXIgaXMgb2RkLCBzbyByb3VuZGluZyB3b3JrcyBsaWtlCisJfCBpbiBncmFkZS1zY2hvb2wgYXJpdGhtZXRpYyAoaS5lLiAxLjUgcm91bmRzIHRvIDIuMCkKKwl8IE90aGVyd2lzZSwgYW4gZXF1YWwgZGlzdGFuY2Ugcm91bmRzIHRvd2FyZHMgemVybywgc28gYXMgbm90CisJfCB0byBwcm9kdWNlIGFuIG9kZCBudW1iZXIuICBUaGlzIGlzIHN0cmFuZ2UsIGJ1dCBpdCBpcyB3aGF0CisJfCB0aGUgc3RhbmRhcmQgc2F5cy4KKwlqbmUJZnBfbmRfZG9yb3VuZHVwCQl8IHJvdW5kIHRvIGluZmluaXR5CisJbHNsLmwJIzEsJWQwCQkJfCBjaGVjayBsb3cgYml0cworCWplcQk5YgkJCXwgcm91bmQgdG8gemVybworZnBfbmRfZG9yb3VuZHVwOgorCXwgcm91bmQgKHRoZSBtYW50aXNzYSwgdGhhdCBpcykgdG93YXJkcyBpbmZpbml0eQorCWFkZC5sCSMweDgwMCwoJWEwKQorCWpjYwk5YgkJCXwgbm8gb3ZlcmZsb3csIGdvb2QuCisJYWRkcS5sCSMxLC0oJWEwKQkJfCBleHRlbmQgdG8gaGlnaCBsd29yZAorCWpjYwkxZgkJCXwgbm8gb3ZlcmZsb3csIGdvb2QuCisJfCBZb3chIHdlIGhhdmUgbWFuYWdlZCB0byBvdmVyZmxvdyB0aGUgbWFudGlzc2EuICBTaW5jZSB0aGlzCisJfCBvbmx5IGhhcHBlbnMgd2hlbiAlZDEgd2FzIDB4ZmZmZmY4MDAsIGl0IGlzIG5vdyB6ZXJvLCBzbworCXwgcmVzZXQgdGhlIGhpZ2ggYml0LCBhbmQgaW5jcmVtZW50IHRoZSBleHBvbmVudC4KKwltb3ZlLncJIzB4ODAwMCwoJWEwKQorCWFkZHEudwkjMSwtKCVhMCkKKwljbXAudwkjMHg0M2ZmLCglYTApKwkJfCBleHBvbmVudCBub3cgb3ZlcmZsb3duPworCWplcQlmcF9uZF9sYXJnZQkJfCB5ZXMsIHNvIG1ha2UgaXQgaW5maW5pdHkuCisxOglzdWJxLmwJIzQsJWEwCisJcHJpbnRmCVBOT1JNLCIlcCgiLDEsJWEwCisJcHJpbnR4CVBOT1JNLCVhMEAKKwlwcmludGYJUE5PUk0sIilcbiIKKwlydHMKKzI6CXN1YnEudwkjMiwlZDIKKwlqY3MJOWIJCQl8ICVkMiA8IDIsIHJvdW5kIHRvIHplcm8KKwlqaGkJM2YJCQl8ICVkMiA+IDIsIHJvdW5kIHRvICtpbmZpbml0eQorCXwgUm91bmQgdG8gK0luZiBvciAtSW5mLiAgSGlnaCB3b3JkIG9mICVkMiBjb250YWlucyB0aGUKKwl8IHNpZ24gb2YgdGhlIG51bWJlciwgYnkgdGhlIHdheS4KKwlzd2FwCSVkMgkJCXwgdG8gLWluZgorCXRzdC5iCSVkMgorCWpuZQlmcF9uZF9kb3JvdW5kdXAJCXwgbmVnYXRpdmUsIHJvdW5kIHRvIGluZmluaXR5CisJanJhCTliCQkJfCBwb3NpdGl2ZSwgcm91bmQgdG8gemVybworMzoJc3dhcAklZDIJCQl8IHRvICtpbmYKKwl0c3QuYgklZDIKKwlqZXEJZnBfbmRfZG9yb3VuZHVwCQl8IHBvc2l0aXZlLCByb3VuZCB0byBpbmZpbml0eQorCWpyYQk5YgkJCXwgbmVnYXRpdmUsIHJvdW5kIHRvIHplcm8KKwl8IEV4cG9uZW50IHVuZGVyZmxvdy4gIFRyeSB0byBtYWtlIGEgZGVub3JtYWwsIGFuZCBzZXQgaXQgdG8KKwl8IHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBmcmFjdGlvbiBpZiB0aGlzIGZhaWxzLgorZnBfbmRfc21hbGw6CisJZnBfc2V0X3NyIEZQU1JfRVhDX1VORkwJCXwgc2V0IFVORkwgYml0CisJbW92ZS53CSMweDNjMDEsKC0yLCVhMCkJfCAyKiotMTAyMgorCW5lZy53CSVkMgkJCXwgZGVncmVlIG9mIHVuZGVyZmxvdworCWNtcC53CSMzMiwlZDIJCQl8IHNpbmdsZSBvciBkb3VibGUgc2hpZnQ/CisJamNjCTFmCisJfCBBZ2FpbiwgYW5vdGhlciA2NC1iaXQgZG91YmxlIHNoaWZ0LgorCW1vdmUubAkoJWEwKSwlZDAKKwltb3ZlLmwJJWQwLCVkMQorCWxzci5sCSVkMiwlZDAKKwltb3ZlLmwJJWQwLCglYTApKworCW1vdmUubAkoJWEwKSwlZDAKKwlsc3IubAklZDIsJWQwCisJbmVnLncJJWQyCisJYWRkLncJIzMyLCVkMgorCWxzbC5sCSVkMiwlZDEKKwlvci5sCSVkMSwlZDAKKwltb3ZlLmwJKCVhMCksJWQxCisJbW92ZS5sCSVkMCwoJWEwKQorCXwgQ2hlY2sgdG8gc2VlIGlmIHdlIHNoaWZ0ZWQgb2ZmIGFueSBzaWduaWZpY2FudCBiaXRzCisJbHNsLmwJJWQyLCVkMQorCWplcQlmcF9uZF9yb3VuZAkJfCBOb3BlLCByb3VuZC4KKwlic2V0CSMwLCVkMAkJCXwgWWVzLCBzbyBzZXQgdGhlICJzdGlja3kgYml0Ii4KKwlqcmEJZnBfbmRfcm91bmQJCXwgTm93LCByb3VuZC4KKwl8IEFub3RoZXIgNjQtYml0IHNpbmdsZSBzaGlmdCBhbmQgc3RvcmUKKzE6CXN1Yi53CSMzMiwlZDIKKwljbXAudwkjMzIsJWQyCQkJfCBEbyB3ZSByZWFsbHkgbmVlZCB0byBzaGlmdD8KKwlqY2MJMmYJCQl8IE5vLCB0aGUgbnVtYmVyIGlzIHRvbyBzbWFsbC4KKwltb3ZlLmwJKCVhMCksJWQwCisJY2xyLmwJKCVhMCkrCisJbW92ZS5sCSVkMCwlZDEKKwlsc3IubAklZDIsJWQwCisJbmVnLncJJWQyCisJYWRkLncJIzMyLCVkMgorCXwgQWdhaW4sIGNoZWNrIHRvIHNlZSBpZiB3ZSBzaGlmdGVkIG9mZiBhbnkgc2lnbmlmaWNhbnQgYml0cy4KKwl0c3QubAkoJWEwKQorCWplcQkxZgorCWJzZXQJIzAsJWQwCQkJfCBTdGlja3kgYml0LgorMToJbW92ZS5sCSVkMCwoJWEwKQorCWxzbC5sCSVkMiwlZDEKKwlqZXEJZnBfbmRfcm91bmQKKwlic2V0CSMwLCVkMAorCWpyYQlmcF9uZF9yb3VuZAorCXwgU29ycnksIHRoZSBudW1iZXIgaXMganVzdCB0b28gc21hbGwuCisyOgljbHIubAkoJWEwKSsKKwljbHIubAkoJWEwKQorCW1vdmVxCSMxLCVkMAkJCXwgU21hbGxlc3QgcG9zc2libGUgZnJhY3Rpb24sCisJanJhCWZwX25kX3JvdW5kCQl8IHJvdW5kIGFzIGRlc2lyZWQuCisJfCB6ZXJvIGFuZCBkZW5vcm1hbGl6ZWQKK2ZwX25kX3plcm86CisJdHN0LmwJKCVhMCkrCisJam5lCTFmCisJdHN0LmwJKCVhMCkKKwlqbmUJMWYKKwlzdWJxLmwJIzgsJWEwCisJcHJpbnRmCVBOT1JNLCIlcCgiLDEsJWEwCisJcHJpbnR4CVBOT1JNLCVhMEAKKwlwcmludGYJUE5PUk0sIilcbiIKKwlydHMJCQkJfCB6ZXJvLiAgbm90aGluZyB0byBkby4KKwl8IFRoZXNlIGFyZSBub3QgbWVyZWx5IHN1Ym5vcm1hbCBudW1iZXJzLCBidXQgdHJ1ZSBkZW5vcm1hbHMsCisJfCBpLmUuIHBhdGhvbG9naWNhbGx5IHNtYWxsIChleHBvbmVudCBpcyAyKiotMTYzODMpIG51bWJlcnMuCisJfCBJdCBpcyBjbGVhcmx5IGltcG9zc2libGUgZm9yIGV2ZW4gYSBub3JtYWwgZXh0ZW5kZWQgbnVtYmVyCisJfCB3aXRoIHRoYXQgZXhwb25lbnQgdG8gZml0IGludG8gZG91YmxlIHByZWNpc2lvbiwgc28ganVzdAorCXwgd3JpdGUgdGhlc2Ugb25lcyBvZmYgYXMgInRvbyBkYXJuIHNtYWxsIi4KKzE6CWZwX3NldF9zciBGUFNSX0VYQ19VTkZMCQl8IFNldCBVTkZMIGJpdAorCWNsci5sCSglYTApCisJY2xyLmwJLSglYTApCisJbW92ZS53CSMweDNjMDEsLSglYTApCQl8IGkuZS4gMioqLTEwMjIKKwlhZGRxLmwJIzYsJWEwCisJbW92ZXEJIzEsJWQwCisJanJhCWZwX25kX3JvdW5kCQl8IHJvdW5kLgorCXwgRXhwb25lbnQgb3ZlcmZsb3cuICBKdXN0IGNhbGwgaXQgaW5maW5pdHkuCitmcF9uZF9sYXJnZToKKwltb3ZlLncJIzB4N2ZmLCVkMAorCWFuZC53CSg2LCVhMCksJWQwCisJamVxCTFmCisJZnBfc2V0X3NyIEZQU1JfRVhDX0lORVgyCisxOglmcF9zZXRfc3IgRlBTUl9FWENfT1ZGTAorCW1vdmUudwkoRlBEX1JORCxGUERBVEEpLCVkMgorCWpuZQkzZgkJCXwgJWQyID0gMCByb3VuZCB0byBuZWFyZXN0CisxOgltb3ZlLncJIzB4N2ZmZiwoLTIsJWEwKQorCWNsci5sCSglYTApKworCWNsci5sCSglYTApCisyOglzdWJxLmwJIzgsJWEwCisJcHJpbnRmCVBOT1JNLCIlcCgiLDEsJWEwCisJcHJpbnR4CVBOT1JNLCVhMEAKKwlwcmludGYJUE5PUk0sIilcbiIKKwlydHMKKzM6CXN1YnEudwkjMiwlZDIKKwlqY3MJNWYJCQl8ICVkMiA8IDIsIHJvdW5kIHRvIHplcm8KKwlqaGkJNGYJCQl8ICVkMiA+IDIsIHJvdW5kIHRvICtpbmZpbml0eQorCXRzdC5iCSgtMywlYTApCQl8IHRvIC1pbmYKKwlqbmUJMWIKKwlqcmEJNWYKKzQ6CXRzdC5iCSgtMywlYTApCQl8IHRvICtpbmYKKwlqZXEJMWIKKzU6CW1vdmUudwkjMHg0M2ZlLCgtMiwlYTApCisJbW92ZXEJIy0xLCVkMAorCW1vdmUubAklZDAsKCVhMCkrCisJbW92ZS53CSMweGY4MDAsJWQwCisJbW92ZS5sCSVkMCwoJWEwKQorCWpyYQkyYgorCXwgSW5maW5pdGllcyBvciBOYU5zCitmcF9uZF9odWdlOgorCXN1YnEubAkjNCwlYTAKKwlwcmludGYJUE5PUk0sIiVwKCIsMSwlYTAKKwlwcmludHgJUE5PUk0sJWEwQAorCXByaW50ZglQTk9STSwiKVxuIgorCXJ0cworCisJfCBmcF9ub3JtYWxpemVfc2luZ2xlOgorCXwgbm9ybWFsaXplIGFuIGV4dGVuZGVkIHdpdGggc2luZ2xlICgyMy1iaXQpIHByZWNpc2lvbgorCXwgYXJnczoJICVhMCAoc3RydWN0IGZwX2V4dCAqKQorCitmcF9ub3JtYWxpemVfc2luZ2xlOgorCXByaW50ZglQTk9STSwibnM6ICVwKCIsMSwlYTAKKwlwcmludHgJUE5PUk0sJWEwQAorCXByaW50ZglQTk9STSwiKSAiCisJYWRkcS5sCSMyLCVhMAorCW1vdmUudwkoJWEwKSssJWQyCisJamVxCWZwX25zX3plcm8JCXwgemVybyAvIGRlbm9ybWFsaXplZAorCWNtcC53CSMweDdmZmYsJWQyCisJamVxCWZwX25zX2h1Z2UJCXwgTmFOIC8gaW5maW5pdGl2ZS4KKwlzdWIudwkjMHg0MDAwLTB4N2YsJWQyCXwgd2lsbCB0aGUgZXhwb25lbnQgZml0PworCWpjcwlmcF9uc19zbWFsbAkJfCB0b28gc21hbGwuCisJY21wLncJIzB4ZmUsJWQyCisJamNjCWZwX25zX2xhcmdlCQl8IHRvbyBiaWcuCisJbW92ZS5sCSglYTApKywlZDAJCXwgZ2V0IGhpZ2ggbHdvcmQgb2YgbWFudGlzc2EKK2ZwX25zX3JvdW5kOgorCXRzdC5sCSglYTApCQkJfCBjaGVjayB0aGUgbG93IGx3b3JkCisJamVxCTFmCisJfCBTZXQgYSBzdGlja3kgYml0IGlmIGl0IGlzIG5vbi16ZXJvLiAgVGhpcyBzaG91bGQgb25seQorCXwgYWZmZWN0IHRoZSByb3VuZGluZyBpbiB3aGF0IHdvdWxkIG90aGVyd2lzZSBiZSBlcXVhbC0KKwl8IGRpc3RhbmNlIHNpdHVhdGlvbnMsIHdoaWNoIGlzIHdoYXQgd2Ugd2FudCBpdCB0byBkby4KKwlic2V0CSMwLCVkMAorMToJY2xyLmwJKCVhMCkJCQl8IHphcCBpdCBmcm9tIG1lbW9yeS4KKwl8IG5vdywgcm91bmQgb2ZmIHRoZSBsb3cgOCBiaXRzIG9mIHRoZSBoaSBsd29yZC4KKwl0c3QuYgklZDAJCQl8IDggbG93IGJpdHMuCisJam5lCWZwX25zX2NoZWNrcm91bmQJfCBBcmUgdGhleSBub24temVybz8KKwl8IG5vdGhpbmcgdG8gZG8gaGVyZQorCXN1YnEubAkjOCwlYTAKKwlwcmludGYJUE5PUk0sIiVwKCIsMSwlYTAKKwlwcmludHgJUE5PUk0sJWEwQAorCXByaW50ZglQTk9STSwiKVxuIgorCXJ0cworZnBfbnNfY2hlY2tyb3VuZDoKKwlmcF9zZXRfc3IgRlBTUl9FWENfSU5FWDIJfCBJTkVYMiBiaXQKKwljbHIuYgktKCVhMCkJCQl8IGNsZWFyIGxvdyBieXRlIG9mIGhpZ2ggbHdvcmQKKwlzdWJxLmwJIzMsJWEwCisJbW92ZS53CShGUERfUk5ELEZQREFUQSksJWQyCXwgcm91bmRpbmcgbW9kZQorCWpuZQkyZgkJCXwgJWQyID09IDAsIHJvdW5kIHRvIG5lYXJlc3QKKwl0c3QuYgklZDAJCQl8IHRlc3QgZ3VhcmQgYml0CisJanBsCTlmCQkJfCB6ZXJvIGlzIGNsb3NlcgorCWJ0c3QJIzgsJWQwCQkJfCB0ZXN0IGxzYiBiaXQKKwl8IHJvdW5kIHRvIGV2ZW4gYmVoYXZpb3VyLCBzZWUgYWJvdmUuCisJam5lCWZwX25zX2Rvcm91bmR1cAkJfCByb3VuZCB0byBpbmZpbml0eQorCWxzbC5iCSMxLCVkMAkJCXwgY2hlY2sgbG93IGJpdHMKKwlqZXEJOWYJCQl8IHJvdW5kIHRvIHplcm8KK2ZwX25zX2Rvcm91bmR1cDoKKwl8IHJvdW5kICh0aGUgbWFudGlzc2EsIHRoYXQgaXMpIHRvd2FyZHMgaW5maW5pdHkKKwlhZGQubAkjMHgxMDAsKCVhMCkKKwlqY2MJOWYJCQl8IG5vIG92ZXJmbG93LCBnb29kLgorCXwgT3ZlcmZsb3cuICBUaGlzIG1lYW5zIHRoYXQgdGhlICVkMSB3YXMgMHhmZmZmZmYwMCwgc28gaXQKKwl8IGlzIG5vdyB6ZXJvLiAgV2Ugd2lsbCBzZXQgdGhlIG1hbnRpc3NhIHRvIHJlZmxlY3QgdGhpcywgYW5kCisJfCBpbmNyZW1lbnQgdGhlIGV4cG9uZW50IChjaGVja2luZyBmb3Igb3ZlcmZsb3cgdGhlcmUgdG9vKQorCW1vdmUudwkjMHg4MDAwLCglYTApCisJYWRkcS53CSMxLC0oJWEwKQorCWNtcC53CSMweDQwN2YsKCVhMCkrCQl8IGV4cG9uZW50IG5vdyBvdmVyZmxvd24/CisJamVxCWZwX25zX2xhcmdlCQl8IHllcywgc28gbWFrZSBpdCBpbmZpbml0eS4KKzk6CXN1YnEubAkjNCwlYTAKKwlwcmludGYJUE5PUk0sIiVwKCIsMSwlYTAKKwlwcmludHgJUE5PUk0sJWEwQAorCXByaW50ZglQTk9STSwiKVxuIgorCXJ0cworCXwgY2hlY2sgbm9uZGVmYXVsdCByb3VuZGluZyBtb2RlcworMjoJc3VicS53CSMyLCVkMgorCWpjcwk5YgkJCXwgJWQyIDwgMiwgcm91bmQgdG8gemVybworCWpoaQkzZgkJCXwgJWQyID4gMiwgcm91bmQgdG8gK2luZmluaXR5CisJdHN0LmIJKC0zLCVhMCkJCXwgdG8gLWluZgorCWpuZQlmcF9uc19kb3JvdW5kdXAJCXwgbmVnYXRpdmUsIHJvdW5kIHRvIGluZmluaXR5CisJanJhCTliCQkJfCBwb3NpdGl2ZSwgcm91bmQgdG8gemVybworMzoJdHN0LmIJKC0zLCVhMCkJCXwgdG8gK2luZgorCWplcQlmcF9uc19kb3JvdW5kdXAJCXwgcG9zaXRpdmUsIHJvdW5kIHRvIGluZmluaXR5CisJanJhCTliCQkJfCBuZWdhdGl2ZSwgcm91bmQgdG8gemVybworCXwgRXhwb25lbnQgdW5kZXJmbG93LiAgVHJ5IHRvIG1ha2UgYSBkZW5vcm1hbCwgYW5kIHNldCBpdCB0bworCXwgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGZyYWN0aW9uIGlmIHRoaXMgZmFpbHMuCitmcF9uc19zbWFsbDoKKwlmcF9zZXRfc3IgRlBTUl9FWENfVU5GTAkJfCBzZXQgVU5GTCBiaXQKKwltb3ZlLncJIzB4M2Y4MSwoLTIsJWEwKQl8IDIqKi0xMjYKKwluZWcudwklZDIJCQl8IGRlZ3JlZSBvZiB1bmRlcmZsb3cKKwljbXAudwkjMzIsJWQyCQkJfCBzaW5nbGUgb3IgZG91YmxlIHNoaWZ0PworCWpjYwkyZgorCXwgYSAzMi1iaXQgc2hpZnQuCisJbW92ZS5sCSglYTApLCVkMAorCW1vdmUubAklZDAsJWQxCisJbHNyLmwJJWQyLCVkMAorCW1vdmUubAklZDAsKCVhMCkrCisJfCBDaGVjayB0byBzZWUgaWYgd2Ugc2hpZnRlZCBvZmYgYW55IHNpZ25pZmljYW50IGJpdHMuCisJbmVnLncJJWQyCisJYWRkLncJIzMyLCVkMgorCWxzbC5sCSVkMiwlZDEKKwlqZXEJMWYKKwlic2V0CSMwLCVkMAkJCXwgU3RpY2t5IGJpdC4KKwl8IENoZWNrIHRoZSBsb3dlciBsd29yZAorMToJdHN0LmwJKCVhMCkKKwlqZXEJZnBfbnNfcm91bmQKKwljbHIJKCVhMCkKKwlic2V0CSMwLCVkMAkJCXwgU3RpY2t5IGJpdC4KKwlqcmEJZnBfbnNfcm91bmQKKwl8IFNvcnJ5LCB0aGUgbnVtYmVyIGlzIGp1c3QgdG9vIHNtYWxsLgorMjoJY2xyLmwJKCVhMCkrCisJY2xyLmwJKCVhMCkKKwltb3ZlcQkjMSwlZDAJCQl8IFNtYWxsZXN0IHBvc3NpYmxlIGZyYWN0aW9uLAorCWpyYQlmcF9uc19yb3VuZAkJfCByb3VuZCBhcyBkZXNpcmVkLgorCXwgRXhwb25lbnQgb3ZlcmZsb3cuICBKdXN0IGNhbGwgaXQgaW5maW5pdHkuCitmcF9uc19sYXJnZToKKwl0c3QuYgkoMywlYTApCisJamVxCTFmCisJZnBfc2V0X3NyIEZQU1JfRVhDX0lORVgyCisxOglmcF9zZXRfc3IgRlBTUl9FWENfT1ZGTAorCW1vdmUudwkoRlBEX1JORCxGUERBVEEpLCVkMgorCWpuZQkzZgkJCXwgJWQyID0gMCByb3VuZCB0byBuZWFyZXN0CisxOgltb3ZlLncJIzB4N2ZmZiwoLTIsJWEwKQorCWNsci5sCSglYTApKworCWNsci5sCSglYTApCisyOglzdWJxLmwJIzgsJWEwCisJcHJpbnRmCVBOT1JNLCIlcCgiLDEsJWEwCisJcHJpbnR4CVBOT1JNLCVhMEAKKwlwcmludGYJUE5PUk0sIilcbiIKKwlydHMKKzM6CXN1YnEudwkjMiwlZDIKKwlqY3MJNWYJCQl8ICVkMiA8IDIsIHJvdW5kIHRvIHplcm8KKwlqaGkJNGYJCQl8ICVkMiA+IDIsIHJvdW5kIHRvICtpbmZpbml0eQorCXRzdC5iCSgtMywlYTApCQl8IHRvIC1pbmYKKwlqbmUJMWIKKwlqcmEJNWYKKzQ6CXRzdC5iCSgtMywlYTApCQl8IHRvICtpbmYKKwlqZXEJMWIKKzU6CW1vdmUudwkjMHg0MDdlLCgtMiwlYTApCisJbW92ZS5sCSMweGZmZmZmZjAwLCglYTApKworCWNsci5sCSglYTApCisJanJhCTJiCisJfCB6ZXJvIGFuZCBkZW5vcm1hbGl6ZWQKK2ZwX25zX3plcm86CisJdHN0LmwJKCVhMCkrCisJam5lCTFmCisJdHN0LmwJKCVhMCkKKwlqbmUJMWYKKwlzdWJxLmwJIzgsJWEwCisJcHJpbnRmCVBOT1JNLCIlcCgiLDEsJWEwCisJcHJpbnR4CVBOT1JNLCVhMEAKKwlwcmludGYJUE5PUk0sIilcbiIKKwlydHMJCQkJfCB6ZXJvLiAgbm90aGluZyB0byBkby4KKwl8IFRoZXNlIGFyZSBub3QgbWVyZWx5IHN1Ym5vcm1hbCBudW1iZXJzLCBidXQgdHJ1ZSBkZW5vcm1hbHMsCisJfCBpLmUuIHBhdGhvbG9naWNhbGx5IHNtYWxsIChleHBvbmVudCBpcyAyKiotMTYzODMpIG51bWJlcnMuCisJfCBJdCBpcyBjbGVhcmx5IGltcG9zc2libGUgZm9yIGV2ZW4gYSBub3JtYWwgZXh0ZW5kZWQgbnVtYmVyCisJfCB3aXRoIHRoYXQgZXhwb25lbnQgdG8gZml0IGludG8gc2luZ2xlIHByZWNpc2lvbiwgc28ganVzdAorCXwgd3JpdGUgdGhlc2Ugb25lcyBvZmYgYXMgInRvbyBkYXJuIHNtYWxsIi4KKzE6CWZwX3NldF9zciBGUFNSX0VYQ19VTkZMCQl8IFNldCBVTkZMIGJpdAorCWNsci5sCSglYTApCisJY2xyLmwJLSglYTApCisJbW92ZS53CSMweDNmODEsLSglYTApCQl8IGkuZS4gMioqLTEyNgorCWFkZHEubAkjNiwlYTAKKwltb3ZlcQkjMSwlZDAKKwlqcmEJZnBfbnNfcm91bmQJCXwgcm91bmQuCisJfCBJbmZpbml0aWVzIG9yIE5hTnMKK2ZwX25zX2h1Z2U6CisJc3VicS5sCSM0LCVhMAorCXByaW50ZglQTk9STSwiJXAoIiwxLCVhMAorCXByaW50eAlQTk9STSwlYTBACisJcHJpbnRmCVBOT1JNLCIpXG4iCisJcnRzCisKKwl8IGZwX25vcm1hbGl6ZV9zaW5nbGVfZmFzdDoKKwl8IG5vcm1hbGl6ZSBhbiBleHRlbmRlZCB3aXRoIHNpbmdsZSAoMjMtYml0KSBwcmVjaXNpb24KKwl8IHRoaXMgaXMgb25seSB1c2VkIGJ5IGZzZ2xkaXYvZnNnZGxtdWwsIHdoZXJlIHRoZQorCXwgb3BlcmFuZCBpcyBub3QgY29tcGxldGx5IG5vcm1hbGl6ZWQuCisJfCBhcmdzOgkgJWEwIChzdHJ1Y3QgZnBfZXh0ICopCisKK2ZwX25vcm1hbGl6ZV9zaW5nbGVfZmFzdDoKKwlwcmludGYJUE5PUk0sIm5zZjogJXAoIiwxLCVhMAorCXByaW50eAlQTk9STSwlYTBACisJcHJpbnRmCVBOT1JNLCIpICIKKwlhZGRxLmwJIzIsJWEwCisJbW92ZS53CSglYTApKywlZDIKKwljbXAudwkjMHg3ZmZmLCVkMgorCWplcQlmcF9uc2ZfaHVnZQkJfCBOYU4gLyBpbmZpbml0aXZlLgorCW1vdmUubAkoJWEwKSssJWQwCQl8IGdldCBoaWdoIGx3b3JkIG9mIG1hbnRpc3NhCitmcF9uc2Zfcm91bmQ6CisJdHN0LmwJKCVhMCkJCQl8IGNoZWNrIHRoZSBsb3cgbHdvcmQKKwlqZXEJMWYKKwl8IFNldCBhIHN0aWNreSBiaXQgaWYgaXQgaXMgbm9uLXplcm8uICBUaGlzIHNob3VsZCBvbmx5CisJfCBhZmZlY3QgdGhlIHJvdW5kaW5nIGluIHdoYXQgd291bGQgb3RoZXJ3aXNlIGJlIGVxdWFsLQorCXwgZGlzdGFuY2Ugc2l0dWF0aW9ucywgd2hpY2ggaXMgd2hhdCB3ZSB3YW50IGl0IHRvIGRvLgorCWJzZXQJIzAsJWQwCisxOgljbHIubAkoJWEwKQkJCXwgemFwIGl0IGZyb20gbWVtb3J5LgorCXwgbm93LCByb3VuZCBvZmYgdGhlIGxvdyA4IGJpdHMgb2YgdGhlIGhpIGx3b3JkLgorCXRzdC5iCSVkMAkJCXwgOCBsb3cgYml0cy4KKwlqbmUJZnBfbnNmX2NoZWNrcm91bmQJfCBBcmUgdGhleSBub24temVybz8KKwl8IG5vdGhpbmcgdG8gZG8gaGVyZQorCXN1YnEubAkjOCwlYTAKKwlwcmludGYJUE5PUk0sIiVwKCIsMSwlYTAKKwlwcmludHgJUE5PUk0sJWEwQAorCXByaW50ZglQTk9STSwiKVxuIgorCXJ0cworZnBfbnNmX2NoZWNrcm91bmQ6CisJZnBfc2V0X3NyIEZQU1JfRVhDX0lORVgyCXwgSU5FWDIgYml0CisJY2xyLmIJLSglYTApCQkJfCBjbGVhciBsb3cgYnl0ZSBvZiBoaWdoIGx3b3JkCisJc3VicS5sCSMzLCVhMAorCW1vdmUudwkoRlBEX1JORCxGUERBVEEpLCVkMgl8IHJvdW5kaW5nIG1vZGUKKwlqbmUJMmYJCQl8ICVkMiA9PSAwLCByb3VuZCB0byBuZWFyZXN0CisJdHN0LmIJJWQwCQkJfCB0ZXN0IGd1YXJkIGJpdAorCWpwbAk5ZgkJCXwgemVybyBpcyBjbG9zZXIKKwlidHN0CSM4LCVkMAkJCXwgdGVzdCBsc2IgYml0CisJfCByb3VuZCB0byBldmVuIGJlaGF2aW91ciwgc2VlIGFib3ZlLgorCWpuZQlmcF9uc2ZfZG9yb3VuZHVwCQl8IHJvdW5kIHRvIGluZmluaXR5CisJbHNsLmIJIzEsJWQwCQkJfCBjaGVjayBsb3cgYml0cworCWplcQk5ZgkJCXwgcm91bmQgdG8gemVybworZnBfbnNmX2Rvcm91bmR1cDoKKwl8IHJvdW5kICh0aGUgbWFudGlzc2EsIHRoYXQgaXMpIHRvd2FyZHMgaW5maW5pdHkKKwlhZGQubAkjMHgxMDAsKCVhMCkKKwlqY2MJOWYJCQl8IG5vIG92ZXJmbG93LCBnb29kLgorCXwgT3ZlcmZsb3cuICBUaGlzIG1lYW5zIHRoYXQgdGhlICVkMSB3YXMgMHhmZmZmZmYwMCwgc28gaXQKKwl8IGlzIG5vdyB6ZXJvLiAgV2Ugd2lsbCBzZXQgdGhlIG1hbnRpc3NhIHRvIHJlZmxlY3QgdGhpcywgYW5kCisJfCBpbmNyZW1lbnQgdGhlIGV4cG9uZW50IChjaGVja2luZyBmb3Igb3ZlcmZsb3cgdGhlcmUgdG9vKQorCW1vdmUudwkjMHg4MDAwLCglYTApCisJYWRkcS53CSMxLC0oJWEwKQorCWNtcC53CSMweDQwN2YsKCVhMCkrCQl8IGV4cG9uZW50IG5vdyBvdmVyZmxvd24/CisJamVxCWZwX25zZl9sYXJnZQkJfCB5ZXMsIHNvIG1ha2UgaXQgaW5maW5pdHkuCis5OglzdWJxLmwJIzQsJWEwCisJcHJpbnRmCVBOT1JNLCIlcCgiLDEsJWEwCisJcHJpbnR4CVBOT1JNLCVhMEAKKwlwcmludGYJUE5PUk0sIilcbiIKKwlydHMKKwl8IGNoZWNrIG5vbmRlZmF1bHQgcm91bmRpbmcgbW9kZXMKKzI6CXN1YnEudwkjMiwlZDIKKwlqY3MJOWIJCQl8ICVkMiA8IDIsIHJvdW5kIHRvIHplcm8KKwlqaGkJM2YJCQl8ICVkMiA+IDIsIHJvdW5kIHRvICtpbmZpbml0eQorCXRzdC5iCSgtMywlYTApCQl8IHRvIC1pbmYKKwlqbmUJZnBfbnNmX2Rvcm91bmR1cAl8IG5lZ2F0aXZlLCByb3VuZCB0byBpbmZpbml0eQorCWpyYQk5YgkJCXwgcG9zaXRpdmUsIHJvdW5kIHRvIHplcm8KKzM6CXRzdC5iCSgtMywlYTApCQl8IHRvICtpbmYKKwlqZXEJZnBfbnNmX2Rvcm91bmR1cAkJfCBwb3NpdGl2ZSwgcm91bmQgdG8gaW5maW5pdHkKKwlqcmEJOWIJCQl8IG5lZ2F0aXZlLCByb3VuZCB0byB6ZXJvCisJfCBFeHBvbmVudCBvdmVyZmxvdy4gIEp1c3QgY2FsbCBpdCBpbmZpbml0eS4KK2ZwX25zZl9sYXJnZToKKwl0c3QuYgkoMywlYTApCisJamVxCTFmCisJZnBfc2V0X3NyIEZQU1JfRVhDX0lORVgyCisxOglmcF9zZXRfc3IgRlBTUl9FWENfT1ZGTAorCW1vdmUudwkoRlBEX1JORCxGUERBVEEpLCVkMgorCWpuZQkzZgkJCXwgJWQyID0gMCByb3VuZCB0byBuZWFyZXN0CisxOgltb3ZlLncJIzB4N2ZmZiwoLTIsJWEwKQorCWNsci5sCSglYTApKworCWNsci5sCSglYTApCisyOglzdWJxLmwJIzgsJWEwCisJcHJpbnRmCVBOT1JNLCIlcCgiLDEsJWEwCisJcHJpbnR4CVBOT1JNLCVhMEAKKwlwcmludGYJUE5PUk0sIilcbiIKKwlydHMKKzM6CXN1YnEudwkjMiwlZDIKKwlqY3MJNWYJCQl8ICVkMiA8IDIsIHJvdW5kIHRvIHplcm8KKwlqaGkJNGYJCQl8ICVkMiA+IDIsIHJvdW5kIHRvICtpbmZpbml0eQorCXRzdC5iCSgtMywlYTApCQl8IHRvIC1pbmYKKwlqbmUJMWIKKwlqcmEJNWYKKzQ6CXRzdC5iCSgtMywlYTApCQl8IHRvICtpbmYKKwlqZXEJMWIKKzU6CW1vdmUudwkjMHg0MDdlLCgtMiwlYTApCisJbW92ZS5sCSMweGZmZmZmZjAwLCglYTApKworCWNsci5sCSglYTApCisJanJhCTJiCisJfCBJbmZpbml0aWVzIG9yIE5hTnMKK2ZwX25zZl9odWdlOgorCXN1YnEubAkjNCwlYTAKKwlwcmludGYJUE5PUk0sIiVwKCIsMSwlYTAKKwlwcmludHgJUE5PUk0sJWEwQAorCXByaW50ZglQTk9STSwiKVxuIgorCXJ0cworCisJfCBjb252X2V4dDJpbnQgKG1hY3JvKToKKwl8IEdlbmVyYXRlcyBhIHN1YnJvdXRpbmUgdGhhdCBjb252ZXJ0cyBhbiBleHRlbmRlZCB2YWx1ZSB0byBhbgorCXwgaW50ZWdlciBvZiBhIGdpdmVuIHNpemUsIGFnYWluLCB3aXRoIHRoZSBhcHByb3ByaWF0ZSB0eXBlIG9mCisJfCByb3VuZGluZy4KKworCXwgTWFjcm8gYXJndW1lbnRzOgorCXwgczoJc2l6ZSwgYXMgZ2l2ZW4gaW4gYW4gYXNzZW1ibHkgaW5zdHJ1Y3Rpb24uCisJfCBiOgludW1iZXIgb2YgYml0cyBpbiB0aGF0IHNpemUuCisKKwl8IFN1YnJvdXRpbmUgYXJndW1lbnRzOgorCXwgJWEwOglzb3VyY2UgKHN0cnVjdCBmcF9leHQgKikKKworCXwgUmV0dXJucyB0aGUgaW50ZWdlciBpbiAlZDAgKGxpa2UgaXQgc2hvdWxkKQorCisubWFjcm8gY29udl9leHQyaW50IHMsYgorCS5zZXQJaW5mLCgxPDwoXGItMSkpLTEJfCBpLmUuIE1BWElOVAorCXByaW50ZglQQ09OViwiZTJpJWQ6ICVwKCIsMiwjXGIsJWEwCisJcHJpbnR4CVBDT05WLCVhMEAKKwlwcmludGYJUENPTlYsIikgIgorCWFkZHEubAkjMiwlYTAKKwltb3ZlLncJKCVhMCkrLCVkMgkJfCBleHBvbmVudAorCWplcQlmcF9lMmlfemVyb1xiCQl8IHplcm8gLyBkZW5vcm0gKD09IDAsIGhlcmUpCisJY21wLncJIzB4N2ZmZiwlZDIKKwlqZXEJZnBfZTJpX2h1Z2VcYgkJfCBJbmYgLyBOYU4KKwlzdWIudwkjMHgzZmZlLCVkMgorCWpjcwlmcF9lMmlfc21hbGxcYgorCWNtcC53CSNcYiwlZDIKKwlqaGkJZnBfZTJpX2xhcmdlXGIKKwltb3ZlLmwJKCVhMCksJWQwCisJbW92ZS5sCSVkMCwlZDEKKwlsc2wubAklZDIsJWQxCisJam5lCWZwX2UyaV9yb3VuZFxiCisJdHN0LmwJKDQsJWEwKQorCWpuZQlmcF9lMmlfcm91bmRcYgorCW5lZy53CSVkMgorCWFkZC53CSMzMiwlZDIKKwlsc3IubAklZDIsJWQwCis5Ogl0c3QudwkoLTQsJWEwKQorCWpuZQkxZgorCXRzdC5ccwklZDAKKwlqbWkJZnBfZTJpX2xhcmdlXGIKKwlwcmludGYJUENPTlYsIi0+ICVwXG4iLDEsJWQwCisJcnRzCisxOgluZWcuXHMJJWQwCisJamVxCTFmCisJanBsCWZwX2UyaV9sYXJnZVxiCisxOglwcmludGYJUENPTlYsIi0+ICVwXG4iLDEsJWQwCisJcnRzCitmcF9lMmlfcm91bmRcYjoKKwlmcF9zZXRfc3IgRlBTUl9FWENfSU5FWDIJfCBJTkVYMiBiaXQKKwluZWcudwklZDIKKwlhZGQudwkjMzIsJWQyCisJLmlmCVxiPjE2CisJamVxCTVmCisJLmVuZGlmCisJbHNyLmwJJWQyLCVkMAorCW1vdmUudwkoRlBEX1JORCxGUERBVEEpLCVkMgl8IHJvdW5kaW5nIG1vZGUKKwlqbmUJMmYJCQl8ICVkMiA9PSAwLCByb3VuZCB0byBuZWFyZXN0CisJdHN0LmwJJWQxCQkJfCB0ZXN0IGd1YXJkIGJpdAorCWpwbAk5YgkJCXwgemVybyBpcyBjbG9zZXIKKwlidHN0CSVkMiwlZDAJCQl8IHRlc3QgbHNiIGJpdCAoJWQyIHN0aWxsIDApCisJam5lCWZwX2UyaV9kb3JvdW5kdXBcYgorCWxzbC5sCSMxLCVkMQkJCXwgY2hlY2sgbG93IGJpdHMKKwlqbmUJZnBfZTJpX2Rvcm91bmR1cFxiCisJdHN0LmwJKDQsJWEwKQorCWplcQk5YgorZnBfZTJpX2Rvcm91bmR1cFxiOgorCWFkZHEubAkjMSwlZDAKKwlqcmEJOWIKKwl8IGNoZWNrIG5vbmRlZmF1bHQgcm91bmRpbmcgbW9kZXMKKzI6CXN1YnEudwkjMiwlZDIKKwlqY3MJOWIJCQl8ICVkMiA8IDIsIHJvdW5kIHRvIHplcm8KKwlqaGkJM2YJCQl8ICVkMiA+IDIsIHJvdW5kIHRvICtpbmZpbml0eQorCXRzdC53CSgtNCwlYTApCQl8IHRvIC1pbmYKKwlqbmUJZnBfZTJpX2Rvcm91bmR1cFxiCXwgbmVnYXRpdmUsIHJvdW5kIHRvIGluZmluaXR5CisJanJhCTliCQkJfCBwb3NpdGl2ZSwgcm91bmQgdG8gemVybworMzoJdHN0LncJKC00LCVhMCkJCXwgdG8gK2luZgorCWplcQlmcF9lMmlfZG9yb3VuZHVwXGIJfCBwb3NpdGl2ZSwgcm91bmQgdG8gaW5maW5pdHkKKwlqcmEJOWIJfCBuZWdhdGl2ZSwgcm91bmQgdG8gemVybworCXwgd2UgYXJlIG9ubHkgd2FudCAtMioqMTI3IGdldCBjb3JyZWN0bHkgcm91bmRlZCBoZXJlLAorCXwgc2luY2UgdGhlIGd1YXJkIGJpdCBpcyBpbiB0aGUgbG93ZXIgbHdvcmQuCisJfCBldmVyeXRoaW5nIGVsc2UgZW5kcyB1cCBhbnl3YXkgYXMgb3ZlcmZsb3cuCisJLmlmCVxiPjE2Cis1Ogltb3ZlLncJKEZQRF9STkQsRlBEQVRBKSwlZDIJfCByb3VuZGluZyBtb2RlCisJam5lCTJiCQkJfCAlZDIgPT0gMCwgcm91bmQgdG8gbmVhcmVzdAorCW1vdmUubAkoNCwlYTApLCVkMQkJfCB0ZXN0IGd1YXJkIGJpdAorCWpwbAk5YgkJCXwgemVybyBpcyBjbG9zZXIKKwlsc2wubAkjMSwlZDEJCQl8IGNoZWNrIGxvdyBiaXRzCisJam5lCWZwX2UyaV9kb3JvdW5kdXBcYgorCWpyYQk5YgorCS5lbmRpZgorZnBfZTJpX3plcm9cYjoKKwljbHIubAklZDAKKwl0c3QubAkoJWEwKSsKKwlqbmUJMWYKKwl0c3QubAkoJWEwKQorCWplcQkzZgorMToJc3VicS5sCSM0LCVhMAorCWZwX2Nscl9zciBGUFNSX0VYQ19VTkZMCQl8IGZwX25vcm1hbGl6ZV9leHQgaGFzIHNldCB0aGlzIGJpdAorZnBfZTJpX3NtYWxsXGI6CisJZnBfc2V0X3NyIEZQU1JfRVhDX0lORVgyCisJY2xyLmwJJWQwCisJbW92ZS53CShGUERfUk5ELEZQREFUQSksJWQyCXwgcm91bmRpbmcgbW9kZQorCXN1YnEudwkjMiwlZDIKKwlqY3MJM2YJCQl8ICVkMiA8IDIsIHJvdW5kIHRvIG5lYXJlc3QvemVybworCWpoaQkyZgkJCXwgJWQyID4gMiwgcm91bmQgdG8gK2luZmluaXR5CisJdHN0LncJKC00LCVhMCkJCXwgdG8gLWluZgorCWplcQkzZgorCXN1YnEuXHMJIzEsJWQwCisJanJhCTNmCisyOgl0c3QudwkoLTQsJWEwKQkJfCB0byAraW5mCisJam5lCTNmCisJYWRkcS5ccwkjMSwlZDAKKzM6CXByaW50ZglQQ09OViwiLT4gJXBcbiIsMSwlZDAKKwlydHMKK2ZwX2UyaV9sYXJnZVxiOgorCWZwX3NldF9zciBGUFNSX0VYQ19PUEVSUgorCW1vdmUuXHMJI2luZiwlZDAKKwl0c3QudwkoLTQsJWEwKQorCWplcQkxZgorCWFkZHEuXHMJIzEsJWQwCisxOglwcmludGYJUENPTlYsIi0+ICVwXG4iLDEsJWQwCisJcnRzCitmcF9lMmlfaHVnZVxiOgorCW1vdmUuXHMJKCVhMCksJWQwCisJdHN0LmwJKCVhMCkKKwlqbmUJMWYKKwl0c3QubAkoJWEwKQorCWplcQlmcF9lMmlfbGFyZ2VcYgorCXwgZnBfbm9ybWFsaXplX2V4dCBoYXMgc2V0IHRoaXMgYml0IGFscmVhZHkKKwl8IGFuZCBtYWRlIHRoZSBudW1iZXIgbm9uc2lnbmFsaW5nCisxOglmcF90c3Rfc3IgRlBTUl9FWENfU05BTgorCWpuZQkxZgorCWZwX3NldF9zciBGUFNSX0VYQ19PUEVSUgorMToJcHJpbnRmCVBDT05WLCItPiAlcFxuIiwxLCVkMAorCXJ0cworLmVuZG0KKworZnBfY29udl9leHQybG9uZzoKKwljb252X2V4dDJpbnQgbCwzMgorCitmcF9jb252X2V4dDJzaG9ydDoKKwljb252X2V4dDJpbnQgdywxNgorCitmcF9jb252X2V4dDJieXRlOgorCWNvbnZfZXh0MmludCBiLDgKKworZnBfY29udl9leHQyZG91YmxlOgorCWpzcglmcF9ub3JtYWxpemVfZG91YmxlCisJcHJpbnRmCVBDT05WLCJlMmQ6ICVwKCIsMSwlYTAKKwlwcmludHgJUENPTlYsJWEwQAorCXByaW50ZglQQ09OViwiKSwgIgorCW1vdmUubAkoJWEwKSssJWQyCisJY21wLncJIzB4N2ZmZiwlZDIKKwlqbmUJMWYKKwltb3ZlLncJIzB4N2ZmLCVkMgorCW1vdmUubAkoJWEwKSssJWQwCisJanJhCTJmCisxOglzdWIudwkjMHgzZmZmLTB4M2ZmLCVkMgorCW1vdmUubAkoJWEwKSssJWQwCisJam1pCTJmCisJY2xyLncJJWQyCisyOglsc2wudwkjNSwlZDIKKwlsc2wubAkjNywlZDIKKwlsc2wubAkjOCwlZDIKKwltb3ZlLmwJJWQwLCVkMQorCWxzbC5sCSMxLCVkMAorCWxzci5sCSM0LCVkMAorCWxzci5sCSM4LCVkMAorCW9yLmwJJWQyLCVkMAorCXB1dHVzZXIubCAlZDAsKCVhMSkrLGZwX2Vycl91YTIsJWExCisJbW92ZXEJIzIxLCVkMAorCWxzbC5sCSVkMCwlZDEKKwltb3ZlLmwJKCVhMCksJWQwCisJbHNyLmwJIzQsJWQwCisJbHNyLmwJIzcsJWQwCisJb3IubAklZDEsJWQwCisJcHV0dXNlci5sICVkMCwoJWExKSxmcF9lcnJfdWEyLCVhMQorI2lmZGVmIEZQVV9FTVVfREVCVUcKKwlnZXR1c2VyLmwgJWExQCgtNCksJWQwLGZwX2Vycl91YTIsJWExCisJZ2V0dXNlci5sICVhMUAoMCksJWQxLGZwX2Vycl91YTIsJWExCisJcHJpbnRmCVBDT05WLCIlcCglMDh4JTA4eClcbiIsMywlYTEsJWQwLCVkMQorI2VuZGlmCisJcnRzCisKK2ZwX2NvbnZfZXh0MnNpbmdsZToKKwlqc3IJZnBfbm9ybWFsaXplX3NpbmdsZQorCXByaW50ZglQQ09OViwiZTJzOiAlcCgiLDEsJWEwCisJcHJpbnR4CVBDT05WLCVhMEAKKwlwcmludGYJUENPTlYsIiksICIKKwltb3ZlLmwJKCVhMCkrLCVkMQorCWNtcC53CSMweDdmZmYsJWQxCisJam5lCTFmCisJbW92ZS53CSMweGZmLCVkMQorCW1vdmUubAkoJWEwKSssJWQwCisJanJhCTJmCisxOglzdWIudwkjMHgzZmZmLTB4N2YsJWQxCisJbW92ZS5sCSglYTApKywlZDAKKwlqbWkJMmYKKwljbHIudwklZDEKKzI6CWxzbC53CSM4LCVkMQorCWxzbC5sCSM3LCVkMQorCWxzbC5sCSM4LCVkMQorCWJjbHIJIzMxLCVkMAorCWxzci5sCSM4LCVkMAorCW9yLmwJJWQxLCVkMAorCXByaW50ZglQQ09OViwiJTA4eFxuIiwxLCVkMAorCXJ0cworCisJfCBzcGVjaWFsIHJldHVybiBhZGRyZXNzZXMgZm9yIGluc3RyIHRoYXQKKwl8IGVuY29kZSB0aGUgcm91bmRpbmcgcHJlY2lzaW9uIGluIHRoZSBvcGNvZGUKKwl8IChlLmcuIGZzbW92ZSxmZG1vdmUpCisKK2ZwX2ZpbmFscm91bmRpbmdfc2luZ2xlOgorCWFkZHEubAkjOCwlc3AKKwlqc3IJZnBfbm9ybWFsaXplX2V4dAorCWpzcglmcF9ub3JtYWxpemVfc2luZ2xlCisJanJhCWZwX2ZpbmFsdGVzdAorCitmcF9maW5hbHJvdW5kaW5nX3NpbmdsZV9mYXN0OgorCWFkZHEubAkjOCwlc3AKKwlqc3IJZnBfbm9ybWFsaXplX2V4dAorCWpzcglmcF9ub3JtYWxpemVfc2luZ2xlX2Zhc3QKKwlqcmEJZnBfZmluYWx0ZXN0CisKK2ZwX2ZpbmFscm91bmRpbmdfZG91YmxlOgorCWFkZHEubAkjOCwlc3AKKwlqc3IJZnBfbm9ybWFsaXplX2V4dAorCWpzcglmcF9ub3JtYWxpemVfZG91YmxlCisJanJhCWZwX2ZpbmFsdGVzdAorCisJfCBmcF9maW5hbHRlc3Q6CisJfCBzZXQgdGhlIGVtdWxhdGVkIHN0YXR1cyByZWdpc3RlciBiYXNlZCBvbiB0aGUgb3V0Y29tZSBvZiBhbgorCXwgZW11bGF0ZWQgaW5zdHJ1Y3Rpb24uCisKK2ZwX2ZpbmFscm91bmRpbmc6CisJYWRkcS5sCSM4LCVzcAorfAlwcmludGYJLCJmOiAlcFxuIiwxLCVhMAorCWpzcglmcF9ub3JtYWxpemVfZXh0CisJbW92ZS53CShGUERfUFJFQyxGUERBVEEpLCVkMAorCXN1YnEudwkjMSwlZDAKKwlqY3MJZnBfZmluYWx0ZXN0CisJam5lCTFmCisJanNyCWZwX25vcm1hbGl6ZV9zaW5nbGUKKwlqcmEJMmYKKzE6CWpzcglmcF9ub3JtYWxpemVfZG91YmxlCisyOnwJcHJpbnRmCSwiZjogJXBcbiIsMSwlYTAKK2ZwX2ZpbmFsdGVzdDoKKwl8IEZpcnN0LCB3ZSBkbyBzb21lIG9mIHRoZSBvYnZpb3VzIHRlc3RzIGZvciB0aGUgZXhjZXB0aW9uCisJfCBzdGF0dXMgYnl0ZSBhbmQgY29uZGl0aW9uIGNvZGUgYnl0ZXMgb2YgZnBfc3IgaGVyZSwgc28gdGhhdAorCXwgdGhleSBkbyBub3QgaGF2ZSB0byBiZSBoYW5kbGVkIGluZGl2aWR1YWxseSBieSBldmVyeQorCXwgZW11bGF0ZWQgaW5zdHJ1Y3Rpb24uCisJY2xyLmwJJWQwCisJYWRkcS5sCSMxLCVhMAorCXRzdC5iCSglYTApKwkJCXwgc2lnbgorCWplcQkxZgorCWJzZXQJI0ZQU1JfQ0NfTkVHLTI0LCVkMAl8IE4gYml0CisxOgljbXAudwkjMHg3ZmZmLCglYTApKwkJfCBleHBvbmVudAorCWplcQkyZgorCXwgdGVzdCBmb3IgemVybworCW1vdmVxCSNGUFNSX0NDX1otMjQsJWQxCisJdHN0LmwJKCVhMCkrCisJam5lCTlmCisJdHN0LmwJKCVhMCkKKwlqbmUJOWYKKwlqcmEJOGYKKwl8IGluZmluaXRpdiBhbmQgTkFOCisyOgltb3ZlcQkjRlBTUl9DQ19OQU4tMjQsJWQxCisJbW92ZS5sCSglYTApKywlZDIKKwlsc2wubAkjMSwlZDIJCQl8IGlnbm9yZSBoaWdoIGJpdAorCWpuZQk4ZgorCXRzdC5sCSglYTApCisJam5lCThmCisJbW92ZXEJI0ZQU1JfQ0NfSU5GLTI0LCVkMQorODoJYnNldAklZDEsJWQwCis5Ogltb3ZlLmIJJWQwLChGUERfRlBTUiswLEZQREFUQSkJfCBzZXQgY29uZGl0aW9uIHRlc3QgcmVzdWx0CisJfCBtb3ZlIGluc3RydWN0aW9ucyBlbnRlciBoZXJlCisJfCBIZXJlLCB3ZSB0ZXN0IHRoaW5ncyBpbiB0aGUgZXhjZXB0aW9uIHN0YXR1cyBieXRlLCBhbmQgc2V0CisJfCBvdGhlciB0aGluZ3MgaW4gdGhlIGFjY3J1ZWQgZXhjZXB0aW9uIGJ5dGUgYWNjb3JkaW5nbHkuCisJfCBFbXVsYXRlZCBpbnN0cnVjdGlvbnMgY2FuIHNldCB2YXJpb3VzIHRoaW5ncyBpbiB0aGUgZm9ybWVyLAorCXwgYXMgZGVmaW5lZCBpbiBmcF9lbXUuaC4KK2ZwX2ZpbmFsOgorCW1vdmUubAkoRlBEX0ZQU1IsRlBEQVRBKSwlZDAKKyNpZiAwCisJYnRzdAkjRlBTUl9FWENfU05BTiwlZDAJfCBFWENfU05BTgorCWpuZQkxZgorCWJ0c3QJI0ZQU1JfRVhDX09QRVJSLCVkMAl8IEVYQ19PUEVSUgorCWplcQkyZgorMToJYnNldAkjRlBTUl9BRVhDX0lPUCwlZDAJfCBzZXQgSU9QIGJpdAorMjoJYnRzdAkjRlBTUl9FWENfT1ZGTCwlZDAJfCBFWENfT1ZGTAorCWplcQkxZgorCWJzZXQJI0ZQU1JfQUVYQ19PVkZMLCVkMAl8IHNldCBPVkZMIGJpdAorMToJYnRzdAkjRlBTUl9FWENfVU5GTCwlZDAJfCBFWENfVU5GTAorCWplcQkxZgorCWJ0c3QJI0ZQU1JfRVhDX0lORVgyLCVkMAl8IEVYQ19JTkVYMgorCWplcQkxZgorCWJzZXQJI0ZQU1JfQUVYQ19VTkZMLCVkMAl8IHNldCBVTkZMIGJpdAorMToJYnRzdAkjRlBTUl9FWENfRFosJWQwCXwgRVhDX0lORVgxCisJamVxCTFmCisJYnNldAkjRlBTUl9BRVhDX0RaLCVkMAl8IHNldCBEWiBiaXQKKzE6CWJ0c3QJI0ZQU1JfRVhDX09WRkwsJWQwCXwgRVhDX09WRkwKKwlqbmUJMWYKKwlidHN0CSNGUFNSX0VYQ19JTkVYMiwlZDAJfCBFWENfSU5FWDIKKwlqbmUJMWYKKwlidHN0CSNGUFNSX0VYQ19JTkVYMSwlZDAJfCBFWENfSU5FWDEKKwlqZXEJMmYKKzE6CWJzZXQJI0ZQU1JfQUVYQ19JTkVYLCVkMAl8IHNldCBJTkVYIGJpdAorMjoJbW92ZS5sCSVkMCwoRlBEX0ZQU1IsRlBEQVRBKQorI2Vsc2UKKwl8IHNhbWUgYXMgYWJvdmUsIGdyZWF0bHkgb3B0aW1pemVkLCBidXQgdW50ZXN0ZWQgKHlldCkKKwltb3ZlLmwJJWQwLCVkMgorCWxzci5sCSM1LCVkMAorCW1vdmUubAklZDAsJWQxCisJbHNyLmwJIzQsJWQxCisJb3IubAklZDAsJWQxCisJYW5kLmIJIzB4MDgsJWQxCisJbW92ZS5sCSVkMiwlZDAKKwlsc3IubAkjNiwlZDAKKwlvci5sCSVkMSwlZDAKKwltb3ZlLmwJJWQyLCVkMQorCWxzci5sCSM0LCVkMQorCW9yLmIJIzB4ZGYsJWQxCisJYW5kLmIJJWQxLCVkMAorCW1vdmUubAklZDIsJWQxCisJbHNyLmwJIzcsJWQxCisJYW5kLmIJIzB4ODAsJWQxCisJb3IuYgklZDEsJWQwCisJYW5kLmIJIzB4ZjgsJWQwCisJb3IuYgklZDAsJWQyCisJbW92ZS5sCSVkMiwoRlBEX0ZQU1IsRlBEQVRBKQorI2VuZGlmCisJbW92ZS5iCShGUERfRlBTUisyLEZQREFUQSksJWQwCisJYW5kLmIJKEZQRF9GUENSKzIsRlBEQVRBKSwlZDAKKwlqZXEJMWYKKwlwcmludGYJLCJzZW5kIHNpZ25hbCEhIVxuIgorMToJanJhCWZwX2VuZApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hdGgtZW11L211bHRpX2FyaXRoLmggYi9hcmNoL202OGsvbWF0aC1lbXUvbXVsdGlfYXJpdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjI1MWU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21hdGgtZW11L211bHRpX2FyaXRoLmgKQEAgLTAsMCArMSw4MTkgQEAKKy8qIG11bHRpX2FyaXRoLmg6IG11bHRpLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMgZnVuY3Rpb25zLCBuZWVkZWQKKyAgIHRvIGRvIGV4dGVuZGVkLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludC4KKworICAgKGMpIDE5OTggRGF2aWQgSHVnZ2lucy1EYWluZXMuCisKKyAgIFNvbWV3aGF0IGJhc2VkIG9uIGFyY2gvYWxwaGEvbWF0aC1lbXUvaWVlZS1tYXRoLmMsIHdoaWNoIGlzIChjKQorICAgRGF2aWQgTW9zYmVyZ2VyLVRhbmcuCisKKyAgIFlvdSBtYXkgY29weSwgbW9kaWZ5LCBhbmQgcmVkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YKKyAgIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBvciBhbnkgbGF0ZXIgdmVyc2lvbiwgYXQKKyAgIHlvdXIgY29udmVuaWVuY2UuICovCisKKy8qIE5vdGU6CisKKyAgIFRoZXNlIGFyZSBub3QgZ2VuZXJhbCBtdWx0aS1wcmVjaXNpb24gbWF0aCByb3V0aW5lcy4gIFJhdGhlciwgdGhleQorICAgaW1wbGVtZW50IHRoZSBzdWJzZXQgb2YgaW50ZWdlciBhcml0aG1ldGljIHRoYXQgd2UgbmVlZCBpbiBvcmRlciB0bworICAgbXVsdGlwbHksIGRpdmlkZSwgYW5kIG5vcm1hbGl6ZSAxMjgtYml0IHVuc2lnbmVkIG1hbnRpc3NhZS4gICovCisKKyNpZm5kZWYgTVVMVElfQVJJVEhfSAorI2RlZmluZSBNVUxUSV9BUklUSF9ICisKKyNpZiAwCS8qIG9sZCBjb2RlLi4uICovCisKKy8qIFVuc2lnbmVkIG9ubHksIGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCBzaWducyB0byBtdWx0aXBseSBhbmQgZGl2aWRlLiAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgaW50MTI4WzRdOworCisvKiBXb3JkIG9yZGVyICovCitlbnVtIHsKKwlNU1cxMjgsCisJTk1TVzEyOCwKKwlOTFNXMTI4LAorCUxTVzEyOAorfTsKKworLyogYmlnLWVuZGlhbiAqLworI2RlZmluZSBMT19XT1JEKGxsKSAoKCh1bnNpZ25lZCBpbnQgKikgJmxsKVsxXSkKKyNkZWZpbmUgSElfV09SRChsbCkgKCgodW5zaWduZWQgaW50ICopICZsbClbMF0pCisKKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byBzdHVmZiB2YXJpb3VzIGludGVnZXIgdmFsdWVzIGludG8gaW50MTI4cyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgemVybzEyOChpbnQxMjggYSkKK3sKKwlhW0xTVzEyOF0gPSBhW05MU1cxMjhdID0gYVtOTVNXMTI4XSA9IGFbTVNXMTI4XSA9IDA7Cit9CisKKy8qIEh1bWFuLXJlYWRhYmxlIHdvcmQgb3JkZXIgaW4gdGhlIGFyZ3VtZW50cyAqLworc3RhdGljIGlubGluZSB2b2lkIHNldDEyOCh1bnNpZ25lZCBpbnQgaTMsIHVuc2lnbmVkIGludCBpMiwgdW5zaWduZWQgaW50IGkxLAorCQkJICB1bnNpZ25lZCBpbnQgaTAsIGludDEyOCBhKQoreworCWFbTFNXMTI4XSA9IGkwOworCWFbTkxTVzEyOF0gPSBpMTsKKwlhW05NU1cxMjhdID0gaTI7CisJYVtNU1cxMjhdID0gaTM7Cit9CisKKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9ucyAoZm9yIHRlc3RpbmcgYXMgd2VsbCkgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnQ2NF90b18xMjgodW5zaWduZWQgbG9uZyBsb25nIHNyYywgaW50MTI4IGRlc3QpCit7CisJZGVzdFtMU1cxMjhdID0gKHVuc2lnbmVkIGludCkgc3JjOworCWRlc3RbTkxTVzEyOF0gPSBzcmMgPj4gMzI7CisJZGVzdFtOTVNXMTI4XSA9IGRlc3RbTVNXMTI4XSA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnQxMjhfdG9fNjQoY29uc3QgaW50MTI4IHNyYywgdW5zaWduZWQgbG9uZyBsb25nICpkZXN0KQoreworCSpkZXN0ID0gc3JjW0xTVzEyOF0gfCAobG9uZyBsb25nKSBzcmNbTkxTVzEyOF0gPDwgMzI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRfaTEyOChjb25zdCBpbnQxMjggYSkKK3sKKwlwcmludGsoIiUwOHggJTA4eCAlMDh4ICUwOHhcbiIsIGFbTVNXMTI4XSwgYVtOTVNXMTI4XSwKKwkgICAgICAgYVtOTFNXMTI4XSwgYVtMU1cxMjhdKTsKK30KKworLyogSW50ZXJuYWwgc2hpZnRlcnM6CisKKyAgIE5vdGUgdGhhdCB0aGVzZSBhcmUgb25seSBnb29kIGZvciAwIDwgY291bnQgPCAzMi4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgX2xzbDEyOCh1bnNpZ25lZCBpbnQgY291bnQsIGludDEyOCBhKQoreworCWFbTVNXMTI4XSA9IChhW01TVzEyOF0gPDwgY291bnQpIHwgKGFbTk1TVzEyOF0gPj4gKDMyIC0gY291bnQpKTsKKwlhW05NU1cxMjhdID0gKGFbTk1TVzEyOF0gPDwgY291bnQpIHwgKGFbTkxTVzEyOF0gPj4gKDMyIC0gY291bnQpKTsKKwlhW05MU1cxMjhdID0gKGFbTkxTVzEyOF0gPDwgY291bnQpIHwgKGFbTFNXMTI4XSA+PiAoMzIgLSBjb3VudCkpOworCWFbTFNXMTI4XSA8PD0gY291bnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfbHNyMTI4KHVuc2lnbmVkIGludCBjb3VudCwgaW50MTI4IGEpCit7CisJYVtMU1cxMjhdID0gKGFbTFNXMTI4XSA+PiBjb3VudCkgfCAoYVtOTFNXMTI4XSA8PCAoMzIgLSBjb3VudCkpOworCWFbTkxTVzEyOF0gPSAoYVtOTFNXMTI4XSA+PiBjb3VudCkgfCAoYVtOTVNXMTI4XSA8PCAoMzIgLSBjb3VudCkpOworCWFbTk1TVzEyOF0gPSAoYVtOTVNXMTI4XSA+PiBjb3VudCkgfCAoYVtNU1cxMjhdIDw8ICgzMiAtIGNvdW50KSk7CisJYVtNU1cxMjhdID4+PSBjb3VudDsKK30KKworLyogU2hvdWxkIGJlIGZhc3Rlciwgb25lIHdvdWxkIGhvcGUgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGxzbG9uZTEyOChpbnQxMjggYSkKK3sKKwlhc20gdm9sYXRpbGUgKCJsc2wubCAjMSwlMFxuIgorCQkgICAgICAicm94bC5sICMxLCUxXG4iCisJCSAgICAgICJyb3hsLmwgIzEsJTJcbiIKKwkJICAgICAgInJveGwubCAjMSwlM1xuIgorCQkgICAgICA6CisJCSAgICAgICI9ZCIgKGFbTFNXMTI4XSksCisJCSAgICAgICI9ZCIoYVtOTFNXMTI4XSksCisJCSAgICAgICI9ZCIoYVtOTVNXMTI4XSksCisJCSAgICAgICI9ZCIoYVtNU1cxMjhdKQorCQkgICAgICA6CisJCSAgICAgICIwIihhW0xTVzEyOF0pLAorCQkgICAgICAiMSIoYVtOTFNXMTI4XSksCisJCSAgICAgICIyIihhW05NU1cxMjhdKSwKKwkJICAgICAgIjMiKGFbTVNXMTI4XSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbHNyb25lMTI4KGludDEyOCBhKQoreworCWFzbSB2b2xhdGlsZSAoImxzci5sICMxLCUwXG4iCisJCSAgICAgICJyb3hyLmwgIzEsJTFcbiIKKwkJICAgICAgInJveHIubCAjMSwlMlxuIgorCQkgICAgICAicm94ci5sICMxLCUzXG4iCisJCSAgICAgIDoKKwkJICAgICAgIj1kIiAoYVtNU1cxMjhdKSwKKwkJICAgICAgIj1kIihhW05NU1cxMjhdKSwKKwkJICAgICAgIj1kIihhW05MU1cxMjhdKSwKKwkJICAgICAgIj1kIihhW0xTVzEyOF0pCisJCSAgICAgIDoKKwkJICAgICAgIjAiKGFbTVNXMTI4XSksCisJCSAgICAgICIxIihhW05NU1cxMjhdKSwKKwkJICAgICAgIjIiKGFbTkxTVzEyOF0pLAorCQkgICAgICAiMyIoYVtMU1cxMjhdKSk7Cit9CisKKy8qIEdlbmVyYWxpemVkIDEyOC1iaXQgc2hpZnRlcnM6CisKKyAgIFRoZXNlIGJpdC1zaGlmdCB0byBhIG11bHRpcGxlIG9mIDMyLCB0aGVuIG1vdmUgd2hvbGUgbG9uZ3dvcmRzLiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGxzbDEyOCh1bnNpZ25lZCBpbnQgY291bnQsIGludDEyOCBhKQoreworCWludCB3b3JkY291bnQsIGk7CisKKwlpZiAoY291bnQgJSAzMikKKwkJX2xzbDEyOChjb3VudCAlIDMyLCBhKTsKKworCWlmICgwID09ICh3b3JkY291bnQgPSBjb3VudCAvIDMyKSkKKwkJcmV0dXJuOworCisJLyogYXJnaCwgZ2FrLCBlbmRpYW4tc2Vuc2l0aXZlICovCisJZm9yIChpID0gMDsgaSA8IDQgLSB3b3JkY291bnQ7IGkrKykgeworCQlhW2ldID0gYVtpICsgd29yZGNvdW50XTsKKwl9CisJZm9yIChpID0gMzsgaSA+PSA0IC0gd29yZGNvdW50OyAtLWkpIHsKKwkJYVtpXSA9IDA7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbHNyMTI4KHVuc2lnbmVkIGludCBjb3VudCwgaW50MTI4IGEpCit7CisJaW50IHdvcmRjb3VudCwgaTsKKworCWlmIChjb3VudCAlIDMyKQorCQlfbHNyMTI4KGNvdW50ICUgMzIsIGEpOworCisJaWYgKDAgPT0gKHdvcmRjb3VudCA9IGNvdW50IC8gMzIpKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAzOyBpID49IHdvcmRjb3VudDsgLS1pKSB7CisJCWFbaV0gPSBhW2kgLSB3b3JkY291bnRdOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgd29yZGNvdW50OyBpKyspIHsKKwkJYVtpXSA9IDA7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCBvcmwxMjgoaW50IGEsIGludDEyOCBiKQoreworCWJbTFNXMTI4XSB8PSBhOworfQorCitzdGF0aWMgaW5saW5lIGludCBidHN0aGkxMjgoY29uc3QgaW50MTI4IGEpCit7CisJcmV0dXJuIGFbTVNXMTI4XSAmIDB4ODAwMDAwMDA7Cit9CisKKy8qIHRlc3QgYml0cyAobnVtYmVyZWQgZnJvbSAwID0gTFNCKSB1cCB0byBhbmQgaW5jbHVkaW5nICJ0b3AiICovCitzdGF0aWMgaW5saW5lIGludCBiZnRlc3RsbzEyOChpbnQgdG9wLCBjb25zdCBpbnQxMjggYSkKK3sKKwlpbnQgciA9IDA7CisKKwlpZiAodG9wID4gMzEpCisJCXIgfD0gYVtMU1cxMjhdOworCWlmICh0b3AgPiA2MykKKwkJciB8PSBhW05MU1cxMjhdOworCWlmICh0b3AgPiA5NSkKKwkJciB8PSBhW05NU1cxMjhdOworCisJciB8PSBhWzMgLSAodG9wIC8gMzIpXSAmICgoMSA8PCAodG9wICUgMzIgKyAxKSkgLSAxKTsKKworCXJldHVybiAociAhPSAwKTsKK30KKworLyogQWFyZ2guICBXZSBuZWVkIHRoZXNlIGJlY2F1c2UgR0NDIGlzIGJyb2tlbiAqLworLyogRklYTUU6IGRvIHRoZW0gaW4gYXNzZW1ibHksIGZvciBnb29kbmVzcycgc2FrZSEgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXNrNjQoaW50IHBvcywgdW5zaWduZWQgbG9uZyBsb25nICptYXNrKQoreworCSptYXNrID0gMDsKKworCWlmIChwb3MgPCAzMikgeworCQlMT19XT1JEKCptYXNrKSA9ICgxIDw8IHBvcykgLSAxOworCQlyZXR1cm47CisJfQorCUxPX1dPUkQoKm1hc2spID0gLTE7CisJSElfV09SRCgqbWFzaykgPSAoMSA8PCAocG9zIC0gMzIpKSAtIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBic2V0NjQoaW50IHBvcywgdW5zaWduZWQgbG9uZyBsb25nICpkZXN0KQoreworCS8qIFRoaXMgY29uZGl0aW9uYWwgd2lsbCBiZSBvcHRpbWl6ZWQgYXdheS4gIFRoYW5rcywgR0NDISAqLworCWlmIChwb3MgPCAzMikKKwkJYXNtIHZvbGF0aWxlICgiYnNldCAlMSwlMCI6Ij1tIgorCQkJICAgICAgKExPX1dPUkQoKmRlc3QpKToiaWQiKHBvcykpOworCWVsc2UKKwkJYXNtIHZvbGF0aWxlICgiYnNldCAlMSwlMCI6Ij1tIgorCQkJICAgICAgKEhJX1dPUkQoKmRlc3QpKToiaWQiKHBvcyAtIDMyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGJ0c3Q2NChpbnQgcG9zLCB1bnNpZ25lZCBsb25nIGxvbmcgZGVzdCkKK3sKKwlpZiAocG9zIDwgMzIpCisJCXJldHVybiAoMCAhPSAoTE9fV09SRChkZXN0KSAmICgxIDw8IHBvcykpKTsKKwllbHNlCisJCXJldHVybiAoMCAhPSAoSElfV09SRChkZXN0KSAmICgxIDw8IChwb3MgLSAzMikpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsc2w2NChpbnQgY291bnQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqZGVzdCkKK3sKKwlpZiAoY291bnQgPCAzMikgeworCQlISV9XT1JEKCpkZXN0KSA9IChISV9XT1JEKCpkZXN0KSA8PCBjb3VudCkKKwkJICAgIHwgKExPX1dPUkQoKmRlc3QpID4+IGNvdW50KTsKKwkJTE9fV09SRCgqZGVzdCkgPDw9IGNvdW50OworCQlyZXR1cm47CisJfQorCWNvdW50IC09IDMyOworCUhJX1dPUkQoKmRlc3QpID0gTE9fV09SRCgqZGVzdCkgPDwgY291bnQ7CisJTE9fV09SRCgqZGVzdCkgPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbHNyNjQoaW50IGNvdW50LCB1bnNpZ25lZCBsb25nIGxvbmcgKmRlc3QpCit7CisJaWYgKGNvdW50IDwgMzIpIHsKKwkJTE9fV09SRCgqZGVzdCkgPSAoTE9fV09SRCgqZGVzdCkgPj4gY291bnQpCisJCSAgICB8IChISV9XT1JEKCpkZXN0KSA8PCAoMzIgLSBjb3VudCkpOworCQlISV9XT1JEKCpkZXN0KSA+Pj0gY291bnQ7CisJCXJldHVybjsKKwl9CisJY291bnQgLT0gMzI7CisJTE9fV09SRCgqZGVzdCkgPSBISV9XT1JEKCpkZXN0KSA+PiBjb3VudDsKKwlISV9XT1JEKCpkZXN0KSA9IDA7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGZwX2Rlbm9ybWFsaXplKHN0cnVjdCBmcF9leHQgKnJlZywgdW5zaWduZWQgaW50IGNudCkKK3sKKwlyZWctPmV4cCArPSBjbnQ7CisKKwlzd2l0Y2ggKGNudCkgeworCWNhc2UgMCAuLi4gODoKKwkJcmVnLT5sb3dtYW50ID0gcmVnLT5tYW50Lm0zMlsxXSA8PCAoOCAtIGNudCk7CisJCXJlZy0+bWFudC5tMzJbMV0gPSAocmVnLT5tYW50Lm0zMlsxXSA+PiBjbnQpIHwKKwkJCQkgICAocmVnLT5tYW50Lm0zMlswXSA8PCAoMzIgLSBjbnQpKTsKKwkJcmVnLT5tYW50Lm0zMlswXSA9IHJlZy0+bWFudC5tMzJbMF0gPj4gY250OworCQlicmVhazsKKwljYXNlIDkgLi4uIDMyOgorCQlyZWctPmxvd21hbnQgPSByZWctPm1hbnQubTMyWzFdID4+IChjbnQgLSA4KTsKKwkJaWYgKHJlZy0+bWFudC5tMzJbMV0gPDwgKDQwIC0gY250KSkKKwkJCXJlZy0+bG93bWFudCB8PSAxOworCQlyZWctPm1hbnQubTMyWzFdID0gKHJlZy0+bWFudC5tMzJbMV0gPj4gY250KSB8CisJCQkJICAgKHJlZy0+bWFudC5tMzJbMF0gPDwgKDMyIC0gY250KSk7CisJCXJlZy0+bWFudC5tMzJbMF0gPSByZWctPm1hbnQubTMyWzBdID4+IGNudDsKKwkJYnJlYWs7CisJY2FzZSAzMyAuLi4gMzk6CisJCWFzbSB2b2xhdGlsZSAoImJmZXh0dSAlMXslMiwjOH0sJTAiIDogIj1kIiAocmVnLT5sb3dtYW50KQorCQkJOiAibSIgKHJlZy0+bWFudC5tMzJbMF0pLCAiZCIgKDY0IC0gY250KSk7CisJCWlmIChyZWctPm1hbnQubTMyWzFdIDw8ICg0MCAtIGNudCkpCisJCQlyZWctPmxvd21hbnQgfD0gMTsKKwkJcmVnLT5tYW50Lm0zMlsxXSA9IHJlZy0+bWFudC5tMzJbMF0gPj4gKGNudCAtIDMyKTsKKwkJcmVnLT5tYW50Lm0zMlswXSA9IDA7CisJCWJyZWFrOworCWNhc2UgNDAgLi4uIDcxOgorCQlyZWctPmxvd21hbnQgPSByZWctPm1hbnQubTMyWzBdID4+IChjbnQgLSA0MCk7CisJCWlmICgocmVnLT5tYW50Lm0zMlswXSA8PCAoNzIgLSBjbnQpKSB8fCByZWctPm1hbnQubTMyWzFdKQorCQkJcmVnLT5sb3dtYW50IHw9IDE7CisJCXJlZy0+bWFudC5tMzJbMV0gPSByZWctPm1hbnQubTMyWzBdID4+IChjbnQgLSAzMik7CisJCXJlZy0+bWFudC5tMzJbMF0gPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZWctPmxvd21hbnQgPSByZWctPm1hbnQubTMyWzBdIHx8IHJlZy0+bWFudC5tMzJbMV07CisJCXJlZy0+bWFudC5tMzJbMF0gPSAwOworCQlyZWctPm1hbnQubTMyWzFdID0gMDsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCBmcF9vdmVybm9ybWFsaXplKHN0cnVjdCBmcF9leHQgKnJlZykKK3sKKwlpbnQgc2hpZnQ7CisKKwlpZiAocmVnLT5tYW50Lm0zMlswXSkgeworCQlhc20gKCJiZmZmbyAlMXsjMCwjMzJ9LCUwIiA6ICI9ZCIgKHNoaWZ0KSA6ICJkbSIgKHJlZy0+bWFudC5tMzJbMF0pKTsKKwkJcmVnLT5tYW50Lm0zMlswXSA9IChyZWctPm1hbnQubTMyWzBdIDw8IHNoaWZ0KSB8IChyZWctPm1hbnQubTMyWzFdID4+ICgzMiAtIHNoaWZ0KSk7CisJCXJlZy0+bWFudC5tMzJbMV0gPSAocmVnLT5tYW50Lm0zMlsxXSA8PCBzaGlmdCk7CisJfSBlbHNlIHsKKwkJYXNtICgiYmZmZm8gJTF7IzAsIzMyfSwlMCIgOiAiPWQiIChzaGlmdCkgOiAiZG0iIChyZWctPm1hbnQubTMyWzFdKSk7CisJCXJlZy0+bWFudC5tMzJbMF0gPSAocmVnLT5tYW50Lm0zMlsxXSA8PCBzaGlmdCk7CisJCXJlZy0+bWFudC5tMzJbMV0gPSAwOworCQlzaGlmdCArPSAzMjsKKwl9CisKKwlyZXR1cm4gc2hpZnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZwX2FkZG1hbnQoc3RydWN0IGZwX2V4dCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjKQoreworCWludCBjYXJyeTsKKworCS8qIHdlIGFzc3VtZSBoZXJlLCBnY2Mgb25seSBpbnNlcnQgbW92ZSBhbmQgYSBjbHIgaW5zdHIgKi8KKwlhc20gdm9sYXRpbGUgKCJhZGQuYiAlMSwlMCIgOiAiPWQsZyIgKGRlc3QtPmxvd21hbnQpCisJCTogImcsZCIgKHNyYy0+bG93bWFudCksICIwLDAiIChkZXN0LT5sb3dtYW50KSk7CisJYXNtIHZvbGF0aWxlICgiYWRkeC5sICUxLCUwIiA6ICI9ZCIgKGRlc3QtPm1hbnQubTMyWzFdKQorCQk6ICJkIiAoc3JjLT5tYW50Lm0zMlsxXSksICIwIiAoZGVzdC0+bWFudC5tMzJbMV0pKTsKKwlhc20gdm9sYXRpbGUgKCJhZGR4LmwgJTEsJTAiIDogIj1kIiAoZGVzdC0+bWFudC5tMzJbMF0pCisJCTogImQiIChzcmMtPm1hbnQubTMyWzBdKSwgIjAiIChkZXN0LT5tYW50Lm0zMlswXSkpOworCWFzbSB2b2xhdGlsZSAoImFkZHgubCAlMCwlMCIgOiAiPWQiIChjYXJyeSkgOiAiMCIgKDApKTsKKworCXJldHVybiBjYXJyeTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZnBfYWRkY2Fycnkoc3RydWN0IGZwX2V4dCAqcmVnKQoreworCWlmICgrK3JlZy0+ZXhwID09IDB4N2ZmZikgeworCQlpZiAocmVnLT5tYW50Lm02NCkKKwkJCWZwX3NldF9zcihGUFNSX0VYQ19JTkVYMik7CisJCXJlZy0+bWFudC5tNjQgPSAwOworCQlmcF9zZXRfc3IoRlBTUl9FWENfT1ZGTCk7CisJCXJldHVybiAwOworCX0KKwlyZWctPmxvd21hbnQgPSAocmVnLT5tYW50Lm0zMlsxXSA8PCA3KSB8IChyZWctPmxvd21hbnQgPyAxIDogMCk7CisJcmVnLT5tYW50Lm0zMlsxXSA9IChyZWctPm1hbnQubTMyWzFdID4+IDEpIHwKKwkJCSAgIChyZWctPm1hbnQubTMyWzBdIDw8IDMxKTsKKwlyZWctPm1hbnQubTMyWzBdID0gKHJlZy0+bWFudC5tMzJbMF0gPj4gMSkgfCAweDgwMDAwMDAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcF9zdWJtYW50KHN0cnVjdCBmcF9leHQgKmRlc3QsIHN0cnVjdCBmcF9leHQgKnNyYzEsCisJCQkgICAgICBzdHJ1Y3QgZnBfZXh0ICpzcmMyKQoreworCS8qIHdlIGFzc3VtZSBoZXJlLCBnY2Mgb25seSBpbnNlcnQgbW92ZSBhbmQgYSBjbHIgaW5zdHIgKi8KKwlhc20gdm9sYXRpbGUgKCJzdWIuYiAlMSwlMCIgOiAiPWQsZyIgKGRlc3QtPmxvd21hbnQpCisJCTogImcsZCIgKHNyYzItPmxvd21hbnQpLCAiMCwwIiAoc3JjMS0+bG93bWFudCkpOworCWFzbSB2b2xhdGlsZSAoInN1YngubCAlMSwlMCIgOiAiPWQiIChkZXN0LT5tYW50Lm0zMlsxXSkKKwkJOiAiZCIgKHNyYzItPm1hbnQubTMyWzFdKSwgIjAiIChzcmMxLT5tYW50Lm0zMlsxXSkpOworCWFzbSB2b2xhdGlsZSAoInN1YngubCAlMSwlMCIgOiAiPWQiIChkZXN0LT5tYW50Lm0zMlswXSkKKwkJOiAiZCIgKHNyYzItPm1hbnQubTMyWzBdKSwgIjAiIChzcmMxLT5tYW50Lm0zMlswXSkpOworfQorCisjZGVmaW5lIGZwX211bDY0KGRlc3RoLCBkZXN0bCwgc3JjMSwgc3JjMikgKHsJCQkJXAorCWFzbSAoIm11bHUubCAlMiwlMTolMCIgOiAiPWQiIChkZXN0bCksICI9ZCIgKGRlc3RoKQkJXAorCQk6ICJnIiAoc3JjMSksICIwIiAoc3JjMikpOwkJCQlcCit9KQorI2RlZmluZSBmcF9kaXY2NChxdW90LCByZW0sIHNyY2gsIHNyY2wsIGRpdikJCQkJXAorCWFzbSAoImRpdnUubCAlMiwlMTolMCIgOiAiPWQiIChxdW90KSwgIj1kIiAocmVtKQkJXAorCQk6ICJkbSIgKGRpdiksICIxIiAoc3JjaCksICIwIiAoc3JjbCkpCisjZGVmaW5lIGZwX2FkZDY0KGRlc3QxLCBkZXN0Miwgc3JjMSwgc3JjMikgKHsJCQkJXAorCWFzbSAoImFkZC5sICUxLCUwIiA6ICI9ZCxkbSIgKGRlc3QyKQkJCQlcCisJCTogImRtLGQiIChzcmMyKSwgIjAsMCIgKGRlc3QyKSk7CQkJXAorCWFzbSAoImFkZHgubCAlMSwlMCIgOiAiPWQiIChkZXN0MSkJCQkJXAorCQk6ICJkIiAoc3JjMSksICIwIiAoZGVzdDEpKTsJCQkJXAorfSkKKyNkZWZpbmUgZnBfYWRkeDk2KGRlc3QsIHNyYykgKHsJCQkJCQlcCisJLyogd2UgYXNzdW1lIGhlcmUsIGdjYyBvbmx5IGluc2VydCBtb3ZlIGFuZCBhIGNsciBpbnN0ciAqLwlcCisJYXNtIHZvbGF0aWxlICgiYWRkLmwgJTEsJTAiIDogIj1kLGciIChkZXN0LT5tMzJbMl0pCQlcCisJCTogImcsZCIgKHRlbXAubTMyWzFdKSwgIjAsMCIgKGRlc3QtPm0zMlsyXSkpOwkJXAorCWFzbSB2b2xhdGlsZSAoImFkZHgubCAlMSwlMCIgOiAiPWQiIChkZXN0LT5tMzJbMV0pCQlcCisJCTogImQiICh0ZW1wLm0zMlswXSksICIwIiAoZGVzdC0+bTMyWzFdKSk7CQlcCisJYXNtIHZvbGF0aWxlICgiYWRkeC5sICUxLCUwIiA6ICI9ZCIgKGRlc3QtPm0zMlswXSkJCVwKKwkJOiAiZCIgKDApLCAiMCIgKGRlc3QtPm0zMlswXSkpOwkJCQlcCit9KQorI2RlZmluZSBmcF9zdWI2NChkZXN0LCBzcmMpICh7CQkJCQkJXAorCWFzbSAoInN1Yi5sICUxLCUwIiA6ICI9ZCxkbSIgKGRlc3QubTMyWzFdKQkJCVwKKwkJOiAiZG0sZCIgKHNyYy5tMzJbMV0pLCAiMCwwIiAoZGVzdC5tMzJbMV0pKTsJCVwKKwlhc20gKCJzdWJ4LmwgJTEsJTAiIDogIj1kIiAoZGVzdC5tMzJbMF0pCQkJXAorCQk6ICJkIiAoc3JjLm0zMlswXSksICIwIiAoZGVzdC5tMzJbMF0pKTsJCQlcCit9KQorI2RlZmluZSBmcF9zdWI5NmMoZGVzdCwgc3JjaCwgc3JjbSwgc3JjbCkgKHsJCQkJXAorCWNoYXIgY2Fycnk7CQkJCQkJCVwKKwlhc20gKCJzdWIubCAlMSwlMCIgOiAiPWQsZG0iIChkZXN0Lm0zMlsyXSkJCQlcCisJCTogImRtLGQiIChzcmNsKSwgIjAsMCIgKGRlc3QubTMyWzJdKSk7CQkJXAorCWFzbSAoInN1YngubCAlMSwlMCIgOiAiPWQiIChkZXN0Lm0zMlsxXSkJCQlcCisJCTogImQiIChzcmNtKSwgIjAiIChkZXN0Lm0zMlsxXSkpOwkJCVwKKwlhc20gKCJzdWJ4LmwgJTIsJTE7IHNjcyAlMCIgOiAiPWQiIChjYXJyeSksICI9ZCIgKGRlc3QubTMyWzBdKQlcCisJCTogImQiIChzcmNoKSwgIjEiIChkZXN0Lm0zMlswXSkpOwkJCVwKKwljYXJyeTsJCQkJCQkJCVwKK30pCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcF9tdWx0aXBseW1hbnQodW5pb24gZnBfbWFudDEyOCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjMSwKKwkJCQkgICBzdHJ1Y3QgZnBfZXh0ICpzcmMyKQoreworCXVuaW9uIGZwX21hbnQ2NCB0ZW1wOworCisJZnBfbXVsNjQoZGVzdC0+bTMyWzBdLCBkZXN0LT5tMzJbMV0sIHNyYzEtPm1hbnQubTMyWzBdLCBzcmMyLT5tYW50Lm0zMlswXSk7CisJZnBfbXVsNjQoZGVzdC0+bTMyWzJdLCBkZXN0LT5tMzJbM10sIHNyYzEtPm1hbnQubTMyWzFdLCBzcmMyLT5tYW50Lm0zMlsxXSk7CisKKwlmcF9tdWw2NCh0ZW1wLm0zMlswXSwgdGVtcC5tMzJbMV0sIHNyYzEtPm1hbnQubTMyWzBdLCBzcmMyLT5tYW50Lm0zMlsxXSk7CisJZnBfYWRkeDk2KGRlc3QsIHRlbXApOworCisJZnBfbXVsNjQodGVtcC5tMzJbMF0sIHRlbXAubTMyWzFdLCBzcmMxLT5tYW50Lm0zMlsxXSwgc3JjMi0+bWFudC5tMzJbMF0pOworCWZwX2FkZHg5NihkZXN0LCB0ZW1wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZwX2RpdmlkZW1hbnQodW5pb24gZnBfbWFudDEyOCAqZGVzdCwgc3RydWN0IGZwX2V4dCAqc3JjLAorCQkJCSBzdHJ1Y3QgZnBfZXh0ICpkaXYpCit7CisJdW5pb24gZnBfbWFudDEyOCB0bXA7CisJdW5pb24gZnBfbWFudDY0IHRtcDY0OworCXVuc2lnbmVkIGxvbmcgKm1hbnRwID0gZGVzdC0+bTMyOworCXVuc2lnbmVkIGxvbmcgZml4LCByZW0sIGZpcnN0LCBkdW1teTsKKwlpbnQgaTsKKworCS8qIHRoZSBhbGdvcml0aG0gYmVsb3cgcmVxdWlyZXMgZGVzdCB0byBiZSBzbWFsbGVyIHRoYW4gZGl2LAorCSAgIGJ1dCBib3RoIGhhdmUgdGhlIGhpZ2ggYml0IHNldCAqLworCWlmIChzcmMtPm1hbnQubTY0ID49IGRpdi0+bWFudC5tNjQpIHsKKwkJZnBfc3ViNjQoc3JjLT5tYW50LCBkaXYtPm1hbnQpOworCQkqbWFudHAgPSAxOworCX0gZWxzZQorCQkqbWFudHAgPSAwOworCW1hbnRwKys7CisKKwkvKiBiYXNpYyBpZGVhIGJlaGluZCB0aGlzIGFsZ29yaXRobTogd2UgY2FuJ3QgZGl2aWRlIHR3byA2NGJpdCBudW1iZXJzCisJICAgKEFCL0NEKSBkaXJlY3RseSwgYnV0IHdlIGNhbiBjYWxjdWxhdGUgQUIvQzAsIGJ1dCB0aGlzIG1lYW5zIHRoaXMKKwkgICBxdW90aWVudCBpcyBvZmYgYnkgQzAvQ0QsIHNvIHdlIGhhdmUgdG8gbXVsdGlwbHkgdGhlIGZpcnN0IHJlc3VsdAorCSAgIHRvIGZpeCB0aGUgcmVzdWx0LCBhZnRlciB0aGF0IHdlIGhhdmUgbmVhcmx5IHRoZSBjb3JyZWN0IHJlc3VsdAorCSAgIGFuZCBvbmx5IGEgZmV3IGNvcnJlY3Rpb25zIGFyZSBuZWVkZWQuICovCisKKwkvKiBDMC9DRCBjYW4gYmUgcHJlY2FsY3VsYXRlZCwgYnV0IGl0J3MgYW4gNjRiaXQgZGl2aXNpb24gYWdhaW4sIGJ1dAorCSAgIHdlIGNhbiBtYWtlIGl0IGEgYml0IGVhc2llciwgYnkgZGl2aWRpbmcgZmlyc3QgdGhyb3VnaCBDIHNvIHdlIGdldAorCSAgIDEwLzFEIGFuZCBub3cgb25seSBhIHNpbmdsZSBzaGlmdCBhbmQgdGhlIHZhbHVlIGZpdHMgaW50byAzMmJpdC4gKi8KKwlmaXggPSAweDgwMDAwMDAwOworCWR1bW15ID0gZGl2LT5tYW50Lm0zMlsxXSAvIGRpdi0+bWFudC5tMzJbMF0gKyAxOworCWR1bW15ID0gKGR1bW15ID4+IDEpIHwgZml4OworCWZwX2RpdjY0KGZpeCwgZHVtbXksIGZpeCwgMCwgZHVtbXkpOworCWZpeC0tOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKywgbWFudHArKykgeworCQlpZiAoc3JjLT5tYW50Lm0zMlswXSA9PSBkaXYtPm1hbnQubTMyWzBdKSB7CisJCQlmcF9kaXY2NChmaXJzdCwgcmVtLCAwLCBzcmMtPm1hbnQubTMyWzFdLCBkaXYtPm1hbnQubTMyWzBdKTsKKworCQkJZnBfbXVsNjQoKm1hbnRwLCBkdW1teSwgZmlyc3QsIGZpeCk7CisJCQkqbWFudHAgKz0gZml4OworCQl9IGVsc2UgeworCQkJZnBfZGl2NjQoZmlyc3QsIHJlbSwgc3JjLT5tYW50Lm0zMlswXSwgc3JjLT5tYW50Lm0zMlsxXSwgZGl2LT5tYW50Lm0zMlswXSk7CisKKwkJCWZwX211bDY0KCptYW50cCwgZHVtbXksIGZpcnN0LCBmaXgpOworCQl9CisKKwkJZnBfbXVsNjQodG1wLm0zMlswXSwgdG1wLm0zMlsxXSwgZGl2LT5tYW50Lm0zMlswXSwgZmlyc3QgLSAqbWFudHApOworCQlmcF9hZGQ2NCh0bXAubTMyWzBdLCB0bXAubTMyWzFdLCAwLCByZW0pOworCQl0bXAubTMyWzJdID0gMDsKKworCQlmcF9tdWw2NCh0bXA2NC5tMzJbMF0sIHRtcDY0Lm0zMlsxXSwgKm1hbnRwLCBkaXYtPm1hbnQubTMyWzFdKTsKKwkJZnBfc3ViOTZjKHRtcCwgMCwgdG1wNjQubTMyWzBdLCB0bXA2NC5tMzJbMV0pOworCisJCXNyYy0+bWFudC5tMzJbMF0gPSB0bXAubTMyWzFdOworCQlzcmMtPm1hbnQubTMyWzFdID0gdG1wLm0zMlsyXTsKKworCQl3aGlsZSAoIWZwX3N1Yjk2Yyh0bXAsIDAsIGRpdi0+bWFudC5tMzJbMF0sIGRpdi0+bWFudC5tMzJbMV0pKSB7CisJCQlzcmMtPm1hbnQubTMyWzBdID0gdG1wLm0zMlsxXTsKKwkJCXNyYy0+bWFudC5tMzJbMV0gPSB0bXAubTMyWzJdOworCQkJKm1hbnRwICs9IDE7CisJCX0KKwl9Cit9CisKKyNpZiAwCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmcF9mbHMxMjgodW5pb24gZnBfbWFudDEyOCAqc3JjKQoreworCXVuc2lnbmVkIGxvbmcgZGF0YTsKKwl1bnNpZ25lZCBpbnQgcmVzLCBvZmY7CisKKwlpZiAoKGRhdGEgPSBzcmMtPm0zMlswXSkpCisJCW9mZiA9IDA7CisJZWxzZSBpZiAoKGRhdGEgPSBzcmMtPm0zMlsxXSkpCisJCW9mZiA9IDMyOworCWVsc2UgaWYgKChkYXRhID0gc3JjLT5tMzJbMl0pKQorCQlvZmYgPSA2NDsKKwllbHNlIGlmICgoZGF0YSA9IHNyYy0+bTMyWzNdKSkKKwkJb2ZmID0gOTY7CisJZWxzZQorCQlyZXR1cm4gMTI4OworCisJYXNtICgiYmZmZm8gJTF7IzAsIzMyfSwlMCIgOiAiPWQiIChyZXMpIDogImRtIiAoZGF0YSkpOworCXJldHVybiByZXMgKyBvZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcF9zaGlmdG1hbnQxMjgodW5pb24gZnBfbWFudDEyOCAqc3JjLCBpbnQgc2hpZnQpCit7CisJdW5zaWduZWQgbG9uZyBzdGlja3k7CisKKwlzd2l0Y2ggKHNoaWZ0KSB7CisJY2FzZSAwOgorCQlyZXR1cm47CisJY2FzZSAxOgorCQlhc20gdm9sYXRpbGUgKCJsc2wubCAjMSwlMCIKKwkJCTogIj1kIiAoc3JjLT5tMzJbM10pIDogIjAiIChzcmMtPm0zMlszXSkpOworCQlhc20gdm9sYXRpbGUgKCJyb3hsLmwgIzEsJTAiCisJCQk6ICI9ZCIgKHNyYy0+bTMyWzJdKSA6ICIwIiAoc3JjLT5tMzJbMl0pKTsKKwkJYXNtIHZvbGF0aWxlICgicm94bC5sICMxLCUwIgorCQkJOiAiPWQiIChzcmMtPm0zMlsxXSkgOiAiMCIgKHNyYy0+bTMyWzFdKSk7CisJCWFzbSB2b2xhdGlsZSAoInJveGwubCAjMSwlMCIKKwkJCTogIj1kIiAoc3JjLT5tMzJbMF0pIDogIjAiIChzcmMtPm0zMlswXSkpOworCQlyZXR1cm47CisJY2FzZSAyIC4uLiAzMToKKwkJc3JjLT5tMzJbMF0gPSAoc3JjLT5tMzJbMF0gPDwgc2hpZnQpIHwgKHNyYy0+bTMyWzFdID4+ICgzMiAtIHNoaWZ0KSk7CisJCXNyYy0+bTMyWzFdID0gKHNyYy0+bTMyWzFdIDw8IHNoaWZ0KSB8IChzcmMtPm0zMlsyXSA+PiAoMzIgLSBzaGlmdCkpOworCQlzcmMtPm0zMlsyXSA9IChzcmMtPm0zMlsyXSA8PCBzaGlmdCkgfCAoc3JjLT5tMzJbM10gPj4gKDMyIC0gc2hpZnQpKTsKKwkJc3JjLT5tMzJbM10gPSAoc3JjLT5tMzJbM10gPDwgc2hpZnQpOworCQlyZXR1cm47CisJY2FzZSAzMiAuLi4gNjM6CisJCXNoaWZ0IC09IDMyOworCQlzcmMtPm0zMlswXSA9IChzcmMtPm0zMlsxXSA8PCBzaGlmdCkgfCAoc3JjLT5tMzJbMl0gPj4gKDMyIC0gc2hpZnQpKTsKKwkJc3JjLT5tMzJbMV0gPSAoc3JjLT5tMzJbMl0gPDwgc2hpZnQpIHwgKHNyYy0+bTMyWzNdID4+ICgzMiAtIHNoaWZ0KSk7CisJCXNyYy0+bTMyWzJdID0gKHNyYy0+bTMyWzNdIDw8IHNoaWZ0KTsKKwkJc3JjLT5tMzJbM10gPSAwOworCQlyZXR1cm47CisJY2FzZSA2NCAuLi4gOTU6CisJCXNoaWZ0IC09IDY0OworCQlzcmMtPm0zMlswXSA9IChzcmMtPm0zMlsyXSA8PCBzaGlmdCkgfCAoc3JjLT5tMzJbM10gPj4gKDMyIC0gc2hpZnQpKTsKKwkJc3JjLT5tMzJbMV0gPSAoc3JjLT5tMzJbM10gPDwgc2hpZnQpOworCQlzcmMtPm0zMlsyXSA9IHNyYy0+bTMyWzNdID0gMDsKKwkJcmV0dXJuOworCWNhc2UgOTYgLi4uIDEyNzoKKwkJc2hpZnQgLT0gOTY7CisJCXNyYy0+bTMyWzBdID0gKHNyYy0+bTMyWzNdIDw8IHNoaWZ0KTsKKwkJc3JjLT5tMzJbMV0gPSBzcmMtPm0zMlsyXSA9IHNyYy0+bTMyWzNdID0gMDsKKwkJcmV0dXJuOworCWNhc2UgLTMxIC4uLiAtMToKKwkJc2hpZnQgPSAtc2hpZnQ7CisJCXN0aWNreSA9IDA7CisJCWlmIChzcmMtPm0zMlszXSA8PCAoMzIgLSBzaGlmdCkpCisJCQlzdGlja3kgPSAxOworCQlzcmMtPm0zMlszXSA9IChzcmMtPm0zMlszXSA+PiBzaGlmdCkgfCAoc3JjLT5tMzJbMl0gPDwgKDMyIC0gc2hpZnQpKSB8IHN0aWNreTsKKwkJc3JjLT5tMzJbMl0gPSAoc3JjLT5tMzJbMl0gPj4gc2hpZnQpIHwgKHNyYy0+bTMyWzFdIDw8ICgzMiAtIHNoaWZ0KSk7CisJCXNyYy0+bTMyWzFdID0gKHNyYy0+bTMyWzFdID4+IHNoaWZ0KSB8IChzcmMtPm0zMlswXSA8PCAoMzIgLSBzaGlmdCkpOworCQlzcmMtPm0zMlswXSA9IChzcmMtPm0zMlswXSA+PiBzaGlmdCk7CisJCXJldHVybjsKKwljYXNlIC02MyAuLi4gLTMyOgorCQlzaGlmdCA9IC1zaGlmdCAtIDMyOworCQlzdGlja3kgPSAwOworCQlpZiAoKHNyYy0+bTMyWzJdIDw8ICgzMiAtIHNoaWZ0KSkgfHwgc3JjLT5tMzJbM10pCisJCQlzdGlja3kgPSAxOworCQlzcmMtPm0zMlszXSA9IChzcmMtPm0zMlsyXSA+PiBzaGlmdCkgfCAoc3JjLT5tMzJbMV0gPDwgKDMyIC0gc2hpZnQpKSB8IHN0aWNreTsKKwkJc3JjLT5tMzJbMl0gPSAoc3JjLT5tMzJbMV0gPj4gc2hpZnQpIHwgKHNyYy0+bTMyWzBdIDw8ICgzMiAtIHNoaWZ0KSk7CisJCXNyYy0+bTMyWzFdID0gKHNyYy0+bTMyWzBdID4+IHNoaWZ0KTsKKwkJc3JjLT5tMzJbMF0gPSAwOworCQlyZXR1cm47CisJY2FzZSAtOTUgLi4uIC02NDoKKwkJc2hpZnQgPSAtc2hpZnQgLSA2NDsKKwkJc3RpY2t5ID0gMDsKKwkJaWYgKChzcmMtPm0zMlsxXSA8PCAoMzIgLSBzaGlmdCkpIHx8IHNyYy0+bTMyWzJdIHx8IHNyYy0+bTMyWzNdKQorCQkJc3RpY2t5ID0gMTsKKwkJc3JjLT5tMzJbM10gPSAoc3JjLT5tMzJbMV0gPj4gc2hpZnQpIHwgKHNyYy0+bTMyWzBdIDw8ICgzMiAtIHNoaWZ0KSkgfCBzdGlja3k7CisJCXNyYy0+bTMyWzJdID0gKHNyYy0+bTMyWzBdID4+IHNoaWZ0KTsKKwkJc3JjLT5tMzJbMV0gPSBzcmMtPm0zMlswXSA9IDA7CisJCXJldHVybjsKKwljYXNlIC0xMjcgLi4uIC05NjoKKwkJc2hpZnQgPSAtc2hpZnQgLSA5NjsKKwkJc3RpY2t5ID0gMDsKKwkJaWYgKChzcmMtPm0zMlswXSA8PCAoMzIgLSBzaGlmdCkpIHx8IHNyYy0+bTMyWzFdIHx8IHNyYy0+bTMyWzJdIHx8IHNyYy0+bTMyWzNdKQorCQkJc3RpY2t5ID0gMTsKKwkJc3JjLT5tMzJbM10gPSAoc3JjLT5tMzJbMF0gPj4gc2hpZnQpIHwgc3RpY2t5OworCQlzcmMtPm0zMlsyXSA9IHNyYy0+bTMyWzFdID0gc3JjLT5tMzJbMF0gPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKHNoaWZ0IDwgMCAmJiAoc3JjLT5tMzJbMF0gfHwgc3JjLT5tMzJbMV0gfHwgc3JjLT5tMzJbMl0gfHwgc3JjLT5tMzJbM10pKQorCQlzcmMtPm0zMlszXSA9IDE7CisJZWxzZQorCQlzcmMtPm0zMlszXSA9IDA7CisJc3JjLT5tMzJbMl0gPSAwOworCXNyYy0+bTMyWzFdID0gMDsKKwlzcmMtPm0zMlswXSA9IDA7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIGZwX3B1dG1hbnQxMjgoc3RydWN0IGZwX2V4dCAqZGVzdCwgdW5pb24gZnBfbWFudDEyOCAqc3JjLAorCQkJCSBpbnQgc2hpZnQpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlzd2l0Y2ggKHNoaWZ0KSB7CisJY2FzZSAwOgorCQlkZXN0LT5tYW50Lm02NCA9IHNyYy0+bTY0WzBdOworCQlkZXN0LT5sb3dtYW50ID0gc3JjLT5tMzJbMl0gPj4gMjQ7CisJCWlmIChzcmMtPm0zMlszXSB8fCAoc3JjLT5tMzJbMl0gPDwgOCkpCisJCQlkZXN0LT5sb3dtYW50IHw9IDE7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYXNtIHZvbGF0aWxlICgibHNsLmwgIzEsJTAiCisJCQk6ICI9ZCIgKHRtcCkgOiAiMCIgKHNyYy0+bTMyWzJdKSk7CisJCWFzbSB2b2xhdGlsZSAoInJveGwubCAjMSwlMCIKKwkJCTogIj1kIiAoZGVzdC0+bWFudC5tMzJbMV0pIDogIjAiIChzcmMtPm0zMlsxXSkpOworCQlhc20gdm9sYXRpbGUgKCJyb3hsLmwgIzEsJTAiCisJCQk6ICI9ZCIgKGRlc3QtPm1hbnQubTMyWzBdKSA6ICIwIiAoc3JjLT5tMzJbMF0pKTsKKwkJZGVzdC0+bG93bWFudCA9IHRtcCA+PiAyNDsKKwkJaWYgKHNyYy0+bTMyWzNdIHx8ICh0bXAgPDwgOCkpCisJCQlkZXN0LT5sb3dtYW50IHw9IDE7CisJCWJyZWFrOworCWNhc2UgMzE6CisJCWFzbSB2b2xhdGlsZSAoImxzci5sICMxLCUxOyByb3hyLmwgIzEsJTAiCisJCQk6ICI9ZCIgKGRlc3QtPm1hbnQubTMyWzBdKQorCQkJOiAiZCIgKHNyYy0+bTMyWzBdKSwgIjAiIChzcmMtPm0zMlsxXSkpOworCQlhc20gdm9sYXRpbGUgKCJyb3hyLmwgIzEsJTAiCisJCQk6ICI9ZCIgKGRlc3QtPm1hbnQubTMyWzFdKSA6ICIwIiAoc3JjLT5tMzJbMl0pKTsKKwkJYXNtIHZvbGF0aWxlICgicm94ci5sICMxLCUwIgorCQkJOiAiPWQiICh0bXApIDogIjAiIChzcmMtPm0zMlszXSkpOworCQlkZXN0LT5sb3dtYW50ID0gdG1wID4+IDI0OworCQlpZiAoc3JjLT5tMzJbM10gPDwgNykKKwkJCWRlc3QtPmxvd21hbnQgfD0gMTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJZGVzdC0+bWFudC5tMzJbMF0gPSBzcmMtPm0zMlsxXTsKKwkJZGVzdC0+bWFudC5tMzJbMV0gPSBzcmMtPm0zMlsyXTsKKwkJZGVzdC0+bG93bWFudCA9IHNyYy0+bTMyWzNdID4+IDI0OworCQlpZiAoc3JjLT5tMzJbM10gPDwgOCkKKwkJCWRlc3QtPmxvd21hbnQgfD0gMTsKKwkJYnJlYWs7CisJfQorfQorCisjaWYgMCAvKiBvbGQgY29kZS4uLiAqLworc3RhdGljIGlubGluZSBpbnQgZmxzKHVuc2lnbmVkIGludCBhKQoreworCWludCByOworCisJYXNtIHZvbGF0aWxlICgiYmZmZm8gJTF7IzAsIzMyfSwlMCIKKwkJICAgICAgOiAiPWQiIChyKSA6ICJtZCIgKGEpKTsKKwlyZXR1cm4gcjsKK30KKworLyogZmxzID0gImZpbmQgbGFzdCBzZXQiIChjZi4gZmZzKDMpKSAqLworc3RhdGljIGlubGluZSBpbnQgZmxzMTI4KGNvbnN0IGludDEyOCBhKQoreworCWlmIChhW01TVzEyOF0pCisJCXJldHVybiBmbHMoYVtNU1cxMjhdKTsKKwlpZiAoYVtOTVNXMTI4XSkKKwkJcmV0dXJuIGZscyhhW05NU1cxMjhdKSArIDMyOworCS8qIFhYWDogaXQgcHJvYmFibHkgbmV2ZXIgZ2V0cyBiZXlvbmQgdGhpcyBwb2ludCBpbiBhY3R1YWwKKwkgICB1c2UsIGJ1dCB0aGF0J3MgaW5kaWNhdGl2ZSBvZiBhIG1vcmUgZ2VuZXJhbCBwcm9ibGVtIGluIHRoZQorCSAgIGFsZ29yaXRobSAoaS5lLiBhcyBwZXIgdGhlIGFjdHVhbCA2ODg4MSBpbXBsZW1lbnRhdGlvbiwgd2UKKwkgICByZWFsbHkgb25seSBuZWVkIGF0IG1vc3QgNjcgYml0cyBvZiBwcmVjaXNpb24gW3BsdXMKKwkgICBvdmVyZmxvd10pIHNvIEknbSBub3QgZ29pbmcgdG8gZml4IGl0LiAqLworCWlmIChhW05MU1cxMjhdKQorCQlyZXR1cm4gZmxzKGFbTkxTVzEyOF0pICsgNjQ7CisJaWYgKGFbTFNXMTI4XSkKKwkJcmV0dXJuIGZscyhhW0xTVzEyOF0pICsgOTY7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHplcm9wMTI4KGNvbnN0IGludDEyOCBhKQoreworCXJldHVybiAhKGFbTFNXMTI4XSB8IGFbTkxTVzEyOF0gfCBhW05NU1cxMjhdIHwgYVtNU1cxMjhdKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbm9uemVyb3AxMjgoY29uc3QgaW50MTI4IGEpCit7CisJcmV0dXJuIChhW0xTVzEyOF0gfCBhW05MU1cxMjhdIHwgYVtOTVNXMTI4XSB8IGFbTVNXMTI4XSk7Cit9CisKKy8qIEFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiAqLworLyogRG8gdGhlc2UgaW4gInB1cmUiIGFzc2VtYmx5LCBiZWNhdXNlICJleHRlbmRlZCIgYXNtIGlzIHVubWFuYWdlYWJsZQorICAgaGVyZSAqLworc3RhdGljIGlubGluZSB2b2lkIGFkZDEyOChjb25zdCBpbnQxMjggYSwgaW50MTI4IGIpCit7CisJLyogcm90YXRpbmcgY2FycnkgZmxhZ3MgKi8KKwl1bnNpZ25lZCBpbnQgY2FycnlbMl07CisKKwljYXJyeVswXSA9IGFbTFNXMTI4XSA+ICgweGZmZmZmZmZmIC0gYltMU1cxMjhdKTsKKwliW0xTVzEyOF0gKz0gYVtMU1cxMjhdOworCisJY2FycnlbMV0gPSBhW05MU1cxMjhdID4gKDB4ZmZmZmZmZmYgLSBiW05MU1cxMjhdIC0gY2FycnlbMF0pOworCWJbTkxTVzEyOF0gPSBhW05MU1cxMjhdICsgYltOTFNXMTI4XSArIGNhcnJ5WzBdOworCisJY2FycnlbMF0gPSBhW05NU1cxMjhdID4gKDB4ZmZmZmZmZmYgLSBiW05NU1cxMjhdIC0gY2FycnlbMV0pOworCWJbTk1TVzEyOF0gPSBhW05NU1cxMjhdICsgYltOTVNXMTI4XSArIGNhcnJ5WzFdOworCisJYltNU1cxMjhdID0gYVtNU1cxMjhdICsgYltNU1cxMjhdICsgY2FycnlbMF07Cit9CisKKy8qIE5vdGU6IGFzc2VtYmxlciBzZW1hbnRpY3M6ICJiIC09IGEiICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3ViMTI4KGNvbnN0IGludDEyOCBhLCBpbnQxMjggYikKK3sKKwkvKiByb3RhdGluZyBib3Jyb3cgZmxhZ3MgKi8KKwl1bnNpZ25lZCBpbnQgYm9ycm93WzJdOworCisJYm9ycm93WzBdID0gYltMU1cxMjhdIDwgYVtMU1cxMjhdOworCWJbTFNXMTI4XSAtPSBhW0xTVzEyOF07CisKKwlib3Jyb3dbMV0gPSBiW05MU1cxMjhdIDwgYVtOTFNXMTI4XSArIGJvcnJvd1swXTsKKwliW05MU1cxMjhdID0gYltOTFNXMTI4XSAtIGFbTkxTVzEyOF0gLSBib3Jyb3dbMF07CisKKwlib3Jyb3dbMF0gPSBiW05NU1cxMjhdIDwgYVtOTVNXMTI4XSArIGJvcnJvd1sxXTsKKwliW05NU1cxMjhdID0gYltOTVNXMTI4XSAtIGFbTk1TVzEyOF0gLSBib3Jyb3dbMV07CisKKwliW01TVzEyOF0gPSBiW01TVzEyOF0gLSBhW01TVzEyOF0gLSBib3Jyb3dbMF07Cit9CisKKy8qIFBvb3IgbWFuJ3MgNjQtYml0IGV4cGFuZGluZyBtdWx0aXBseSAqLworc3RhdGljIGlubGluZSB2b2lkIG11bDY0KHVuc2lnbmVkIGxvbmcgbG9uZyBhLCB1bnNpZ25lZCBsb25nIGxvbmcgYiwgaW50MTI4IGMpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGFjYzsKKwlpbnQxMjggYWNjMTI4OworCisJemVybzEyOChhY2MxMjgpOworCXplcm8xMjgoYyk7CisKKwkvKiBmaXJzdCB0aGUgbG93IHdvcmRzICovCisJaWYgKExPX1dPUkQoYSkgJiYgTE9fV09SRChiKSkgeworCQlhY2MgPSAobG9uZyBsb25nKSBMT19XT1JEKGEpICogTE9fV09SRChiKTsKKwkJY1tOTFNXMTI4XSA9IEhJX1dPUkQoYWNjKTsKKwkJY1tMU1cxMjhdID0gTE9fV09SRChhY2MpOworCX0KKwkvKiBOZXh0IHRoZSBoaWdoIHdvcmRzICovCisJaWYgKEhJX1dPUkQoYSkgJiYgSElfV09SRChiKSkgeworCQlhY2MgPSAobG9uZyBsb25nKSBISV9XT1JEKGEpICogSElfV09SRChiKTsKKwkJY1tNU1cxMjhdID0gSElfV09SRChhY2MpOworCQljW05NU1cxMjhdID0gTE9fV09SRChhY2MpOworCX0KKwkvKiBUaGUgbWlkZGxlIHdvcmRzICovCisJaWYgKExPX1dPUkQoYSkgJiYgSElfV09SRChiKSkgeworCQlhY2MgPSAobG9uZyBsb25nKSBMT19XT1JEKGEpICogSElfV09SRChiKTsKKwkJYWNjMTI4W05NU1cxMjhdID0gSElfV09SRChhY2MpOworCQlhY2MxMjhbTkxTVzEyOF0gPSBMT19XT1JEKGFjYyk7CisJCWFkZDEyOChhY2MxMjgsIGMpOworCX0KKwkvKiBUaGUgZmlyc3QgYW5kIGxhc3Qgd29yZHMgKi8KKwlpZiAoSElfV09SRChhKSAmJiBMT19XT1JEKGIpKSB7CisJCWFjYyA9IChsb25nIGxvbmcpIEhJX1dPUkQoYSkgKiBMT19XT1JEKGIpOworCQlhY2MxMjhbTk1TVzEyOF0gPSBISV9XT1JEKGFjYyk7CisJCWFjYzEyOFtOTFNXMTI4XSA9IExPX1dPUkQoYWNjKTsKKwkJYWRkMTI4KGFjYzEyOCwgYyk7CisJfQorfQorCisvKiBOb3RlOiB1bnNpZ25lZCAqLworc3RhdGljIGlubGluZSBpbnQgY21wMTI4KGludDEyOCBhLCBpbnQxMjggYikKK3sKKwlpZiAoYVtNU1cxMjhdIDwgYltNU1cxMjhdKQorCQlyZXR1cm4gLTE7CisJaWYgKGFbTVNXMTI4XSA+IGJbTVNXMTI4XSkKKwkJcmV0dXJuIDE7CisJaWYgKGFbTk1TVzEyOF0gPCBiW05NU1cxMjhdKQorCQlyZXR1cm4gLTE7CisJaWYgKGFbTk1TVzEyOF0gPiBiW05NU1cxMjhdKQorCQlyZXR1cm4gMTsKKwlpZiAoYVtOTFNXMTI4XSA8IGJbTkxTVzEyOF0pCisJCXJldHVybiAtMTsKKwlpZiAoYVtOTFNXMTI4XSA+IGJbTkxTVzEyOF0pCisJCXJldHVybiAxOworCisJcmV0dXJuIChzaWduZWQpIGFbTFNXMTI4XSAtIGJbTFNXMTI4XTsKK30KKworaW5saW5lIHZvaWQgZGl2MTI4KGludDEyOCBhLCBpbnQxMjggYiwgaW50MTI4IGMpCit7CisJaW50MTI4IG1hc2s7CisKKwkvKiBBbGdvcml0aG06CisKKwkgICBTaGlmdCB0aGUgZGl2aXNvciB1bnRpbCBpdCdzIGF0IGxlYXN0IGFzIGJpZyBhcyB0aGUKKwkgICBkaXZpZGVuZCwga2VlcGluZyB0cmFjayBvZiB0aGUgcG9zaXRpb24gdG8gd2hpY2ggd2UndmUKKwkgICBzaGlmdGVkIGl0LCBpLmUuIHRoZSBwb3dlciBvZiAyIHdoaWNoIHdlJ3ZlIG11bHRpcGxpZWQgaXQKKwkgICBieS4KKworCSAgIFRoZW4sIGZvciB0aGlzIHBvd2VyIG9mIDIgKHRoZSBtYXNrKSwgYW5kIGV2ZXJ5IG9uZSBzbWFsbGVyCisJICAgdGhhbiBpdCwgc3VidHJhY3QgdGhlIG1hc2sgZnJvbSB0aGUgZGl2aWRlbmQgYW5kIGFkZCBpdCB0bworCSAgIHRoZSBxdW90aWVudCB1bnRpbCB0aGUgZGl2aWRlbmQgaXMgc21hbGxlciB0aGFuIHRoZSByYWlzZWQKKwkgICBkaXZpc29yLiAgQXQgdGhpcyBwb2ludCwgZGl2aWRlIHRoZSBkaXZpZGVuZCBhbmQgdGhlIG1hc2sKKwkgICBieSAyIChpLmUuIHNoaWZ0IG9uZSBwbGFjZSB0byB0aGUgcmlnaHQpLiAgTGF0aGVyLCByaW5zZSwKKwkgICBhbmQgcmVwZWF0LCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSBwb3dlcnMgb2YgMiBsZWZ0LiAqLworCisJLyogRklYTUU6IG5lZWRsZXNzIHRvIHNheSwgdGhlcmUncyByb29tIGZvciBpbXByb3ZlbWVudCBoZXJlIHRvby4gKi8KKworCS8qIFNoaWZ0IHVwICovCisJLyogWFhYOiBzaW5jZSBpdCBqdXN0IGhhcyB0byBiZSAiYXQgbGVhc3QgYXMgYmlnIiwgd2UgY2FuCisJICAgcHJvYmFibHkgZWxpbWluYXRlIHRoaXMgaG9ycmlibHkgd2FzdGVmdWwgbG9vcC4gIEkgd2lsbAorCSAgIGhhdmUgdG8gcHJvdmUgdGhpcyBmaXJzdCwgdGhvdWdoICovCisJc2V0MTI4KDAsIDAsIDAsIDEsIG1hc2spOworCXdoaWxlIChjbXAxMjgoYiwgYSkgPCAwICYmICFidHN0aGkxMjgoYikpIHsKKwkJbHNsb25lMTI4KGIpOworCQlsc2xvbmUxMjgobWFzayk7CisJfQorCisJLyogU2hpZnQgZG93biAqLworCXplcm8xMjgoYyk7CisJZG8geworCQlpZiAoY21wMTI4KGEsIGIpID49IDApIHsKKwkJCXN1YjEyOChiLCBhKTsKKwkJCWFkZDEyOChtYXNrLCBjKTsKKwkJfQorCQlsc3JvbmUxMjgobWFzayk7CisJCWxzcm9uZTEyOChiKTsKKwl9IHdoaWxlIChub256ZXJvcDEyOChtYXNrKSk7CisKKwkvKiBUaGUgcmVtYWluZGVyIGlzIGluIGEuLi4gKi8KK30KKyNlbmRpZgorCisjZW5kaWYJLyogTVVMVElfQVJJVEhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21tL01ha2VmaWxlIGIvYXJjaC9tNjhrL21tL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZjFjNzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbW0vTWFrZWZpbGUKQEAgLTAsMCArMSw4IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXggbTY4ay1zcGVjaWZpYyBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZXIuCisjCisKK29iai15CQk6PSBpbml0Lm8gZmF1bHQubyBod3Rlc3QubworCitvYmotJChDT05GSUdfTU1VX01PVE9ST0xBKQkrPSBrbWFwLm8gbWVtb3J5Lm8gbW90b3JvbGEubworb2JqLSQoQ09ORklHX01NVV9TVU4zKQkJKz0gc3VuM2ttYXAubyBzdW4zbW11Lm8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9mYXVsdC5jIGIvYXJjaC9tNjhrL21tL2ZhdWx0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM0OGI2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tbS9mYXVsdC5jCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogIGxpbnV4L2FyY2gvbTY4ay9tbS9mYXVsdC5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NSAgSGFtaXNoIE1hY2RvbmFsZAorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisKK2V4dGVybiB2b2lkIGRpZV9pZl9rZXJuZWwoY2hhciAqLCBzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKK2V4dGVybiBjb25zdCBpbnQgZnJhbWVfZXh0cmFfc2l6ZXNbXTsgLyogaW4gbTY4ay9rZXJuZWwvc2lnbmFsLmMgKi8KKworaW50IHNlbmRfZmF1bHRfc2lnKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXNpZ2luZm9fdCBzaWdpbmZvID0geyAwLCAwLCAwLCB9OworCisJc2lnaW5mby5zaV9zaWdubyA9IGN1cnJlbnQtPnRocmVhZC5zaWdubzsKKwlzaWdpbmZvLnNpX2NvZGUgPSBjdXJyZW50LT50aHJlYWQuY29kZTsKKwlzaWdpbmZvLnNpX2FkZHIgPSAodm9pZCAqKWN1cnJlbnQtPnRocmVhZC5mYWRkcjsKKyNpZmRlZiBERUJVRworCXByaW50aygic2VuZF9mYXVsdF9zaWc6ICVwLCVkLCVkXG4iLCBzaWdpbmZvLnNpX2FkZHIsIHNpZ2luZm8uc2lfc2lnbm8sIHNpZ2luZm8uc2lfY29kZSk7CisjZW5kaWYKKworCWlmICh1c2VyX21vZGUocmVncykpIHsKKwkJZm9yY2Vfc2lnX2luZm8oc2lnaW5mby5zaV9zaWdubywKKwkJCSAgICAgICAmc2lnaW5mbywgY3VycmVudCk7CisJfSBlbHNlIHsKKwkJY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZml4dXA7CisKKwkJLyogQXJlIHdlIHByZXBhcmVkIHRvIGhhbmRsZSB0aGlzIGtlcm5lbCBmYXVsdD8gKi8KKwkJaWYgKChmaXh1cCA9IHNlYXJjaF9leGNlcHRpb25fdGFibGVzKHJlZ3MtPnBjKSkpIHsKKwkJCXN0cnVjdCBwdF9yZWdzICp0cmVnczsKKwkJCS8qIENyZWF0ZSBhIG5ldyBmb3VyIHdvcmQgc3RhY2sgZnJhbWUsIGRpc2NhcmRpbmcgdGhlIG9sZAorCQkJICAgb25lLiAgKi8KKwkJCXJlZ3MtPnN0a2FkaiA9IGZyYW1lX2V4dHJhX3NpemVzW3JlZ3MtPmZvcm1hdF07CisJCQl0cmVncyA9CShzdHJ1Y3QgcHRfcmVncyAqKSgodWxvbmcpcmVncyArIHJlZ3MtPnN0a2Fkaik7CisJCQl0cmVncy0+dmVjdG9yID0gcmVncy0+dmVjdG9yOworCQkJdHJlZ3MtPmZvcm1hdCA9IDA7CisJCQl0cmVncy0+cGMgPSBmaXh1cC0+Zml4dXA7CisJCQl0cmVncy0+c3IgPSByZWdzLT5zcjsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCS8vaWYgKHNpZ2luZm8uc2lfc2lnbm8gPT0gU0lHQlVTKQorCQkvLwlmb3JjZV9zaWdfaW5mbyhzaWdpbmZvLnNpX3NpZ25vLAorCQkvLwkJICAgICAgICZzaWdpbmZvLCBjdXJyZW50KTsKKworCQkvKgorCQkgKiBPb3BzLiBUaGUga2VybmVsIHRyaWVkIHRvIGFjY2VzcyBzb21lIGJhZCBwYWdlLiBXZSdsbCBoYXZlIHRvCisJCSAqIHRlcm1pbmF0ZSB0aGluZ3Mgd2l0aCBleHRyZW1lIHByZWp1ZGljZS4KKwkJICovCisJCWlmICgodW5zaWduZWQgbG9uZylzaWdpbmZvLnNpX2FkZHIgPCBQQUdFX1NJWkUpCisJCQlwcmludGsoS0VSTl9BTEVSVCAiVW5hYmxlIHRvIGhhbmRsZSBrZXJuZWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIik7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0FMRVJUICJVbmFibGUgdG8gaGFuZGxlIGtlcm5lbCBhY2Nlc3MiKTsKKwkJcHJpbnRrKCIgYXQgdmlydHVhbCBhZGRyZXNzICVwXG4iLCBzaWdpbmZvLnNpX2FkZHIpOworCQlkaWVfaWZfa2VybmVsKCJPb3BzIiwgcmVncywgMCAvKmVycm9yX2NvZGUqLyk7CisJCWRvX2V4aXQoU0lHS0lMTCk7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgaGFuZGxlcyBwYWdlIGZhdWx0cy4gIEl0IGRldGVybWluZXMgdGhlIHByb2JsZW0sIGFuZAorICogdGhlbiBwYXNzZXMgaXQgb2ZmIHRvIG9uZSBvZiB0aGUgYXBwcm9wcmlhdGUgcm91dGluZXMuCisgKgorICogZXJyb3JfY29kZToKKyAqCWJpdCAwID09IDAgbWVhbnMgbm8gcGFnZSBmb3VuZCwgMSBtZWFucyBwcm90ZWN0aW9uIGZhdWx0CisgKgliaXQgMSA9PSAwIG1lYW5zIHJlYWQsIDEgbWVhbnMgd3JpdGUKKyAqCisgKiBJZiB0aGlzIHJvdXRpbmUgZGV0ZWN0cyBhIGJhZCBhY2Nlc3MsIGl0IHJldHVybnMgMSwgb3RoZXJ3aXNlIGl0CisgKiByZXR1cm5zIDAuCisgKi8KK2ludCBkb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWE7CisJaW50IHdyaXRlLCBmYXVsdDsKKworI2lmZGVmIERFQlVHCisJcHJpbnRrICgiZG8gcGFnZSBmYXVsdDpcbnJlZ3MtPnNyPSUjeCwgcmVncy0+cGM9JSNseCwgYWRkcmVzcz0lI2x4LCAlbGQsICVwXG4iLAorCQlyZWdzLT5zciwgcmVncy0+cGMsIGFkZHJlc3MsIGVycm9yX2NvZGUsCisJCWN1cnJlbnQtPm1tLT5wZ2QpOworI2VuZGlmCisKKwkvKgorCSAqIElmIHdlJ3JlIGluIGFuIGludGVycnVwdCBvciBoYXZlIG5vIHVzZXIKKwkgKiBjb250ZXh0LCB3ZSBtdXN0IG5vdCB0YWtlIHRoZSBmYXVsdC4uCisJICovCisJaWYgKGluX2ludGVycnVwdCgpIHx8ICFtbSkKKwkJZ290byBub19jb250ZXh0OworCisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCisJdm1hID0gZmluZF92bWEobW0sIGFkZHJlc3MpOworCWlmICghdm1hKQorCQlnb3RvIG1hcF9lcnI7CisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9JTykKKwkJZ290byBhY2NfZXJyOworCWlmICh2bWEtPnZtX3N0YXJ0IDw9IGFkZHJlc3MpCisJCWdvdG8gZ29vZF9hcmVhOworCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9HUk9XU0RPV04pKQorCQlnb3RvIG1hcF9lcnI7CisJaWYgKHVzZXJfbW9kZShyZWdzKSkgeworCQkvKiBBY2Nlc3NpbmcgdGhlIHN0YWNrIGJlbG93IHVzcCBpcyBhbHdheXMgYSBidWcuICBUaGUKKwkJICAgIisgMjU2IiBpcyB0aGVyZSBkdWUgdG8gc29tZSBpbnN0cnVjdGlvbnMgZG9pbmcKKwkJICAgcHJlLWRlY3JlbWVudCBvbiB0aGUgc3RhY2sgYW5kIHRoYXQgZG9lc24ndCBzaG93IHVwCisJCSAgIHVudGlsIGxhdGVyLiAgKi8KKwkJaWYgKGFkZHJlc3MgKyAyNTYgPCByZHVzcCgpKQorCQkJZ290byBtYXBfZXJyOworCX0KKwlpZiAoZXhwYW5kX3N0YWNrKHZtYSwgYWRkcmVzcykpCisJCWdvdG8gbWFwX2VycjsKKworLyoKKyAqIE9rLCB3ZSBoYXZlIGEgZ29vZCB2bV9hcmVhIGZvciB0aGlzIG1lbW9yeSBhY2Nlc3MsIHNvCisgKiB3ZSBjYW4gaGFuZGxlIGl0Li4KKyAqLworZ29vZF9hcmVhOgorI2lmZGVmIERFQlVHCisJcHJpbnRrKCJkb19wYWdlX2ZhdWx0OiBnb29kX2FyZWFcbiIpOworI2VuZGlmCisJd3JpdGUgPSAwOworCXN3aXRjaCAoZXJyb3JfY29kZSAmIDMpIHsKKwkJZGVmYXVsdDoJLyogMzogd3JpdGUsIHByZXNlbnQgKi8KKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIDI6CQkvKiB3cml0ZSwgbm90IHByZXNlbnQgKi8KKwkJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpCisJCQkJZ290byBhY2NfZXJyOworCQkJd3JpdGUrKzsKKwkJCWJyZWFrOworCQljYXNlIDE6CQkvKiByZWFkLCBwcmVzZW50ICovCisJCQlnb3RvIGFjY19lcnI7CisJCWNhc2UgMDoJCS8qIHJlYWQsIG5vdCBwcmVzZW50ICovCisJCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgKFZNX1JFQUQgfCBWTV9FWEVDKSkpCisJCQkJZ290byBhY2NfZXJyOworCX0KKworCS8qCisJICogSWYgZm9yIGFueSByZWFzb24gYXQgYWxsIHdlIGNvdWxkbid0IGhhbmRsZSB0aGUgZmF1bHQsCisJICogbWFrZSBzdXJlIHdlIGV4aXQgZ3JhY2VmdWxseSByYXRoZXIgdGhhbiBlbmRsZXNzbHkgcmVkbworCSAqIHRoZSBmYXVsdC4KKwkgKi8KKworIHN1cnZpdmU6CisJZmF1bHQgPSBoYW5kbGVfbW1fZmF1bHQobW0sIHZtYSwgYWRkcmVzcywgd3JpdGUpOworI2lmZGVmIERFQlVHCisJcHJpbnRrKCJoYW5kbGVfbW1fZmF1bHQgcmV0dXJucyAlZFxuIixmYXVsdCk7CisjZW5kaWYKKwlzd2l0Y2ggKGZhdWx0KSB7CisJY2FzZSAxOgorCQljdXJyZW50LT5taW5fZmx0Kys7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJY3VycmVudC0+bWFqX2ZsdCsrOworCQlicmVhazsKKwljYXNlIDA6CisJCWdvdG8gYnVzX2VycjsKKwlkZWZhdWx0OgorCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJfQorCisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlyZXR1cm4gMDsKKworLyoKKyAqIFdlIHJhbiBvdXQgb2YgbWVtb3J5LCBvciBzb21lIG90aGVyIHRoaW5nIGhhcHBlbmVkIHRvIHVzIHRoYXQgbWFkZQorICogdXMgdW5hYmxlIHRvIGhhbmRsZSB0aGUgcGFnZSBmYXVsdCBncmFjZWZ1bGx5LgorICovCitvdXRfb2ZfbWVtb3J5OgorCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJaWYgKGN1cnJlbnQtPnBpZCA9PSAxKSB7CisJCXlpZWxkKCk7CisJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJZ290byBzdXJ2aXZlOworCX0KKworCXByaW50aygiVk06IGtpbGxpbmcgcHJvY2VzcyAlc1xuIiwgY3VycmVudC0+Y29tbSk7CisJaWYgKHVzZXJfbW9kZShyZWdzKSkKKwkJZG9fZXhpdChTSUdLSUxMKTsKKworbm9fY29udGV4dDoKKwljdXJyZW50LT50aHJlYWQuc2lnbm8gPSBTSUdCVVM7CisJY3VycmVudC0+dGhyZWFkLmZhZGRyID0gYWRkcmVzczsKKwlyZXR1cm4gc2VuZF9mYXVsdF9zaWcocmVncyk7CisKK2J1c19lcnI6CisJY3VycmVudC0+dGhyZWFkLnNpZ25vID0gU0lHQlVTOworCWN1cnJlbnQtPnRocmVhZC5jb2RlID0gQlVTX0FEUkVSUjsKKwljdXJyZW50LT50aHJlYWQuZmFkZHIgPSBhZGRyZXNzOworCWdvdG8gc2VuZF9zaWc7CisKK21hcF9lcnI6CisJY3VycmVudC0+dGhyZWFkLnNpZ25vID0gU0lHU0VHVjsKKwljdXJyZW50LT50aHJlYWQuY29kZSA9IFNFR1ZfTUFQRVJSOworCWN1cnJlbnQtPnRocmVhZC5mYWRkciA9IGFkZHJlc3M7CisJZ290byBzZW5kX3NpZzsKKworYWNjX2VycjoKKwljdXJyZW50LT50aHJlYWQuc2lnbm8gPSBTSUdTRUdWOworCWN1cnJlbnQtPnRocmVhZC5jb2RlID0gU0VHVl9BQ0NFUlI7CisJY3VycmVudC0+dGhyZWFkLmZhZGRyID0gYWRkcmVzczsKKworc2VuZF9zaWc6CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlyZXR1cm4gc2VuZF9mYXVsdF9zaWcocmVncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbW0vaHd0ZXN0LmMgYi9hcmNoL202OGsvbW0vaHd0ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3ZGRlMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tbS9od3Rlc3QuYwpAQCAtMCwwICsxLDg1IEBACisvKiBUZXN0cyBmb3IgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBoYXJkd2FyZSByZWdpc3RlcnMuCisgKiBUaGlzIGNvZGUgd2FzIG9yaWdpbmFsbHkgaW4gYXRhcmkvY29uZmlnLmMsIGJ1dCBJIG5vdGljZWQKKyAqIHRoYXQgaXQgd2FzIGFsc28gaW4gZHJpdmVycy9udWJ1cy9udWJ1cy5jIGFuZCBJIHdhbnRlZCB0bworICogdXNlIGl0IGluIGhwMzAwL2NvbmZpZy5jLCBzbyBpdCBzZWVtZWQgc2Vuc2libGUgdG8gcHVsbCBpdAorICogb3V0IGludG8gaXRzIG93biBmaWxlLgorICoKKyAqIFRoZSB0ZXN0IGlzIGZvciB1c2Ugd2hlbiB0cnlpbmcgdG8gcmVhZCBhIGhhcmR3YXJlIHJlZ2lzdGVyCisgKiB0aGF0IGlzbid0IHByZXNlbnQgd291bGQgY2F1c2UgYSBidXMgZXJyb3IuIFdlIHNldCB1cCBhCisgKiB0ZW1wb3JhcnkgaGFuZGxlciBzbyB0aGF0IHRoaXMgZG9lc24ndCBraWxsIHRoZSBrZXJuZWwuCisgKgorICogVGhlcmUgaXMgYSB0ZXN0LWJ5LXJlYWRpbmcgYW5kIGEgdGVzdC1ieS13cml0aW5nOyBJIHByZXNlbnQKKyAqIHRoZW0gaGVyZSBjb21wbGV0ZSB3aXRoIHRoZSBjb21tZW50cyBmcm9tIHRoZSBvcmlnaW5hbCBhdGFyaQorICogY29uZmlnLmMuLi4KKyAqICAgICAgICAgICAgICAgIC0tIFBNTSA8cG1heWRlbGxAY2hpYXJrLmdyZWVuZW5kLm9yZy51az4sIDA1LzE5OTgKKyAqLworCisvKiBUaGlzIGZ1bmN0aW9uIHRlc3RzIGZvciB0aGUgcHJlc2VuY2Ugb2YgYW4gYWRkcmVzcywgc3BlY2lhbGx5IGEKKyAqIGhhcmR3YXJlIHJlZ2lzdGVyIGFkZHJlc3MuIEl0IGlzIGNhbGxlZCB2ZXJ5IGVhcmx5IGluIHRoZSBrZXJuZWwKKyAqIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIHdoZW4gdGhlIFZCUiByZWdpc3RlciBpc24ndCBzZXQgdXAgeWV0LiBPbgorICogYW4gQXRhcmksIGl0IHN0aWxsIHBvaW50cyB0byBhZGRyZXNzIDAsIHdoaWNoIGlzIHVubWFwcGVkLiBTbyBhIGJ1cworICogZXJyb3Igd291bGQgY2F1c2UgYW5vdGhlciBidXMgZXJyb3Igd2hpbGUgZmV0Y2hpbmcgdGhlIGV4Y2VwdGlvbgorICogdmVjdG9yLCBhbmQgdGhlIENQVSB3b3VsZCBkbyBub3RoaW5nIGF0IGFsbC4gU28gd2UgbmVlZGVkIHRvIHNldCB1cAorICogYSB0ZW1wb3JhcnkgVkJSIGFuZCBhIHZlY3RvciB0YWJsZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSB0ZXN0LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworaW50IGh3cmVnX3ByZXNlbnQoIHZvbGF0aWxlIHZvaWQgKnJlZ3AgKQoreworICAgIGludAlyZXQgPSAwOworICAgIGxvbmcJc2F2ZV9zcCwgc2F2ZV92YnI7CisgICAgbG9uZwl0bXBfdmVjdG9yc1szXTsKKworICAgIF9fYXNtX18gX192b2xhdGlsZV9fCisJKAkibW92ZWMJJS92YnIsJTJcblx0IgorCQkibW92ZWwJI0xiZXJyMSwlNEAoOClcblx0IgorICAgICAgICAgICAgICAgICJtb3ZlYwklNCwlL3ZiclxuXHQiCisJCSJtb3ZlbAklL3NwLCUxXG5cdCIKKwkJIm1vdmVxCSMwLCUwXG5cdCIKKwkJInRzdGIJJTNAXG5cdCIKKwkJIm5vcFxuXHQiCisJCSJtb3ZlcQkjMSwlMFxuIgorICAgICAgICAgICAgICAgICJMYmVycjE6XG5cdCIKKwkJIm1vdmVsCSUxLCUvc3Bcblx0IgorCQkibW92ZWMJJTIsJS92YnIiCisJCTogIj0mZCIgKHJldCksICI9JnIiIChzYXZlX3NwKSwgIj0mciIgKHNhdmVfdmJyKQorCQk6ICJhIiAocmVncCksICJhIiAodG1wX3ZlY3RvcnMpCisgICAgICAgICAgICAgICAgKTsKKworICAgIHJldHVybiggcmV0ICk7Cit9CitFWFBPUlRfU1lNQk9MKGh3cmVnX3ByZXNlbnQpOworCisvKiBCYXNpY2FsbHkgdGhlIHNhbWUsIGJ1dCB3cml0ZXMgYSB2YWx1ZSBpbnRvIGEgd29yZCByZWdpc3RlciwgcHJvdGVjdGVkCisgKiBieSBhIGJ1cyBlcnJvciBoYW5kbGVyLiBSZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCwgMCBvdGhlcndpc2UuCisgKi8KKworaW50IGh3cmVnX3dyaXRlKCB2b2xhdGlsZSB2b2lkICpyZWdwLCB1bnNpZ25lZCBzaG9ydCB2YWwgKQoreworCWludAkJcmV0OworCWxvbmcJc2F2ZV9zcCwgc2F2ZV92YnI7CisJbG9uZwl0bXBfdmVjdG9yc1szXTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fCisJKAkibW92ZWMJJS92YnIsJTJcblx0IgorCQkibW92ZWwJI0xiZXJyMiwlNEAoOClcblx0IgorCQkibW92ZWMJJTQsJS92YnJcblx0IgorCQkibW92ZWwJJS9zcCwlMVxuXHQiCisJCSJtb3ZlcQkjMCwlMFxuXHQiCisJCSJtb3ZldwklNSwlM0Bcblx0IgorCQkibm9wCVxuXHQiCS8qIElmIHRoaXMgbm9wIGlzbid0IHByZXNlbnQsICdyZXQnIG1heSBhbHJlYWR5IGJlCisJCQkJICogbG9hZGVkIHdpdGggMSBhdCB0aGUgdGltZSB0aGUgYnVzIGVycm9yCisJCQkJICogaGFwcGVucyEgKi8KKwkJIm1vdmVxCSMxLCUwXG4iCisJIkxiZXJyMjpcblx0IgorCQkibW92ZWwJJTEsJS9zcFxuXHQiCisJCSJtb3ZlYwklMiwlL3ZiciIKKwkJOiAiPSZkIiAocmV0KSwgIj0mciIgKHNhdmVfc3ApLCAiPSZyIiAoc2F2ZV92YnIpCisJCTogImEiIChyZWdwKSwgImEiICh0bXBfdmVjdG9ycyksICJnIiAodmFsKQorCSk7CisKKwlyZXR1cm4oIHJldCApOworfQorRVhQT1JUX1NZTUJPTChod3JlZ193cml0ZSk7CisKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9pbml0LmMgYi9hcmNoL202OGsvbW0vaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NWJlYjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbW0vaW5pdC5jCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogIGxpbnV4L2FyY2gvbTY4ay9tbS9pbml0LmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1ICBIYW1pc2ggTWFjZG9uYWxkCisgKgorICogIENvbnRhaW5zIGNvbW1vbiBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgc3BlY2lmaWMgaW5pdCBjb2RlIG1vdmVkCisgKiAgdG8gbW90b3JvbGEuYyBhbmQgc3VuM21tdS5jCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaWZkZWYgQ09ORklHX0FUQVJJCisjaW5jbHVkZSA8YXNtL2F0YXJpX3N0cmFtLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhc20vdGxiLmg+CisKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7CisKKy8qCisgKiBaRVJPX1BBR0UgaXMgYSBzcGVjaWFsIHBhZ2UgdGhhdCBpcyB1c2VkIGZvciB6ZXJvLWluaXRpYWxpemVkCisgKiBkYXRhIGFuZCBDT1cuCisgKi8KKwordm9pZCAqZW1wdHlfemVyb19wYWdlOworCit2b2lkIHNob3dfbWVtKHZvaWQpCit7CisgICAgdW5zaWduZWQgbG9uZyBpOworICAgIGludCBmcmVlID0gMCwgdG90YWwgPSAwLCByZXNlcnZlZCA9IDAsIHNoYXJlZCA9IDA7CisgICAgaW50IGNhY2hlZCA9IDA7CisKKyAgICBwcmludGsoIlxuTWVtLWluZm86XG4iKTsKKyAgICBzaG93X2ZyZWVfYXJlYXMoKTsKKyAgICBwcmludGsoIkZyZWUgc3dhcDogICAgICAgJTZsZGtCXG4iLCBucl9zd2FwX3BhZ2VzPDwoUEFHRV9TSElGVC0xMCkpOworICAgIGkgPSBtYXhfbWFwbnI7CisgICAgd2hpbGUgKGktLSA+IDApIHsKKwl0b3RhbCsrOworCWlmIChQYWdlUmVzZXJ2ZWQobWVtX21hcCtpKSkKKwkgICAgcmVzZXJ2ZWQrKzsKKwllbHNlIGlmIChQYWdlU3dhcENhY2hlKG1lbV9tYXAraSkpCisJICAgIGNhY2hlZCsrOworCWVsc2UgaWYgKCFwYWdlX2NvdW50KG1lbV9tYXAraSkpCisJICAgIGZyZWUrKzsKKwllbHNlCisJICAgIHNoYXJlZCArPSBwYWdlX2NvdW50KG1lbV9tYXAraSkgLSAxOworICAgIH0KKyAgICBwcmludGsoIiVkIHBhZ2VzIG9mIFJBTVxuIix0b3RhbCk7CisgICAgcHJpbnRrKCIlZCBmcmVlIHBhZ2VzXG4iLGZyZWUpOworICAgIHByaW50aygiJWQgcmVzZXJ2ZWQgcGFnZXNcbiIscmVzZXJ2ZWQpOworICAgIHByaW50aygiJWQgcGFnZXMgc2hhcmVkXG4iLHNoYXJlZCk7CisgICAgcHJpbnRrKCIlZCBwYWdlcyBzd2FwIGNhY2hlZFxuIixjYWNoZWQpOworfQorCitleHRlcm4gdm9pZCBpbml0X3BvaW50ZXJfdGFibGUodW5zaWduZWQgbG9uZyBwdGFibGUpOworCisvKiBSZWZlcmVuY2VzIHRvIHNlY3Rpb24gYm91bmRhcmllcyAqLworCitleHRlcm4gY2hhciBfdGV4dCwgX2V0ZXh0LCBfZWRhdGEsIF9fYnNzX3N0YXJ0LCBfZW5kOworZXh0ZXJuIGNoYXIgX19pbml0X2JlZ2luLCBfX2luaXRfZW5kOworCitleHRlcm4gcG1kX3QgKnplcm9fcGd0YWJsZTsKKwordm9pZCBfX2luaXQgbWVtX2luaXQodm9pZCkKK3sKKwlpbnQgY29kZXBhZ2VzID0gMDsKKwlpbnQgZGF0YXBhZ2VzID0gMDsKKwlpbnQgaW5pdHBhZ2VzID0gMDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKyNpZm5kZWYgQ09ORklHX1NVTjMKKwlpbnQgaTsKKyNlbmRpZgorCisJbWF4X21hcG5yID0gbnVtX3BoeXNwYWdlcyA9ICgoKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgLSBQQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCk7CisKKyNpZmRlZiBDT05GSUdfQVRBUkkKKwlpZiAoTUFDSF9JU19BVEFSSSkKKwkJYXRhcmlfc3RyYW1fbWVtX2luaXRfaG9vaygpOworI2VuZGlmCisKKwkvKiB0aGlzIHdpbGwgcHV0IGFsbCBtZW1vcnkgb250byB0aGUgZnJlZWxpc3RzICovCisJdG90YWxyYW1fcGFnZXMgPSBmcmVlX2FsbF9ib290bWVtKCk7CisKKwlmb3IgKHRtcCA9IFBBR0VfT0ZGU0VUIDsgdG1wIDwgKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnk7IHRtcCArPSBQQUdFX1NJWkUpIHsKKwkJaWYgKFBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UodG1wKSkpIHsKKwkJCWlmICh0bXAgPj0gKHVuc2lnbmVkIGxvbmcpJl90ZXh0CisJCQkgICAgJiYgdG1wIDwgKHVuc2lnbmVkIGxvbmcpJl9ldGV4dCkKKwkJCQljb2RlcGFnZXMrKzsKKwkJCWVsc2UgaWYgKHRtcCA+PSAodW5zaWduZWQgbG9uZykgJl9faW5pdF9iZWdpbgorCQkJCSAmJiB0bXAgPCAodW5zaWduZWQgbG9uZykgJl9faW5pdF9lbmQpCisJCQkJaW5pdHBhZ2VzKys7CisJCQllbHNlCisJCQkJZGF0YXBhZ2VzKys7CisJCQljb250aW51ZTsKKwkJfQorCX0KKworI2lmbmRlZiBDT05GSUdfU1VOMworCS8qIGluc2VydCBwb2ludGVyIHRhYmxlcyBhbGxvY2F0ZWQgc28gZmFyIGludG8gdGhlIHRhYmxlbGlzdCAqLworCWluaXRfcG9pbnRlcl90YWJsZSgodW5zaWduZWQgbG9uZylrZXJuZWxfcGdfZGlyKTsKKwlmb3IgKGkgPSAwOyBpIDwgUFRSU19QRVJfUEdEOyBpKyspIHsKKwkJaWYgKHBnZF9wcmVzZW50KGtlcm5lbF9wZ19kaXJbaV0pKQorCQkJaW5pdF9wb2ludGVyX3RhYmxlKF9fcGdkX3BhZ2Uoa2VybmVsX3BnX2RpcltpXSkpOworCX0KKworCS8qIGluc2VydCBhbHNvIHBvaW50ZXIgdGFibGUgdGhhdCB3ZSB1c2VkIHRvIHVubWFwIHRoZSB6ZXJvIHBhZ2UgKi8KKwlpZiAoemVyb19wZ3RhYmxlKQorCQlpbml0X3BvaW50ZXJfdGFibGUoKHVuc2lnbmVkIGxvbmcpemVyb19wZ3RhYmxlKTsKKyNlbmRpZgorCisJcHJpbnRrKCJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUgKCVkayBrZXJuZWwgY29kZSwgJWRrIGRhdGEsICVkayBpbml0KVxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcpbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKKwkgICAgICAgbWF4X21hcG5yIDw8IChQQUdFX1NISUZULTEwKSwKKwkgICAgICAgY29kZXBhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKKwkgICAgICAgZGF0YXBhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwKKwkgICAgICAgaW5pdHBhZ2VzIDw8IChQQUdFX1NISUZULTEwKSk7Cit9CisKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKK3ZvaWQgZnJlZV9pbml0cmRfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWludCBwYWdlcyA9IDA7CisJZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSBQQUdFX1NJWkUpIHsKKwkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHN0YXJ0KSk7CisJCXNldF9wYWdlX2NvdW50KHZpcnRfdG9fcGFnZShzdGFydCksIDEpOworCQlmcmVlX3BhZ2Uoc3RhcnQpOworCQl0b3RhbHJhbV9wYWdlcysrOworCQlwYWdlcysrOworCX0KKwlwcmludGsgKCJGcmVlaW5nIGluaXRyZCBtZW1vcnk6ICVkayBmcmVlZFxuIiwgcGFnZXMpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbW0va21hcC5jIGIvYXJjaC9tNjhrL21tL2ttYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGNiM2ZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21tL2ttYXAuYwpAQCAtMCwwICsxLDM2MSBAQAorLyoKKyAqICBsaW51eC9hcmNoL202OGsvbW0va21hcC5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NyBSb21hbiBIb2RlaworICoKKyAqICAxMC8wMS85OSBjbGVhbmVkIHVwIHRoZSBjb2RlIGFuZCBjaGFuZ2luZyB0byB0aGUgc2FtZSBpbnRlcmZhY2UKKyAqCSAgICAgdXNlZCBieSBvdGhlciBhcmNoaXRlY3R1cmVzCQkvUm9tYW4gWmlwcGVsCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjdW5kZWYgREVCVUcKKworI2RlZmluZSBQVFJUUkVFU0laRQkoMjU2KjEwMjQpCisKKy8qCisgKiBGb3IgMDQwLzA2MCB3ZSBjYW4gdXNlIHRoZSB2aXJ0dWFsIG1lbW9yeSBhcmVhIGxpa2Ugb3RoZXIgYXJjaGl0ZWN0dXJlcywKKyAqIGJ1dCBmb3IgMDIwLzAzMCB3ZSB3YW50IHRvIHVzZSBlYXJseSB0ZXJtaW5hdGlvbiBwYWdlIGRlc2NyaXB0b3IgYW5kIHdlCisgKiBjYW4ndCBtaXggdGhpcyB3aXRoIG5vcm1hbCBwYWdlIGRlc2NyaXB0b3JzLCBzbyB3ZSBoYXZlIHRvIGNvcHkgdGhhdCBjb2RlCisgKiAobW0vdm1hbGxvYy5jKSBhbmQgcmV0dXJuIGFwcHJpb3JhdGUgYWxpZ25lZCBhZGRyZXNzZXMuCisgKi8KKworI2lmZGVmIENQVV9NNjgwNDBfT1JfTTY4MDYwX09OTFkKKworI2RlZmluZSBJT19TSVpFCQlQQUdFX1NJWkUKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1fc3RydWN0ICpnZXRfaW9fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIGdldF92bV9hcmVhKHNpemUsIFZNX0lPUkVNQVApOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2lvX2FyZWEodm9pZCAqYWRkcikKK3sKKwl2ZnJlZSgodm9pZCAqKShQQUdFX01BU0sgJiAodW5zaWduZWQgbG9uZylhZGRyKSk7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgSU9fU0laRQkJKDI1NioxMDI0KQorCitzdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqaW9saXN0OworCitzdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqZ2V0X2lvX2FyZWEodW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlzdHJ1Y3Qgdm1fc3RydWN0ICoqcCwgKnRtcCwgKmFyZWE7CisKKwlhcmVhID0gKHN0cnVjdCB2bV9zdHJ1Y3QgKilrbWFsbG9jKHNpemVvZigqYXJlYSksIEdGUF9LRVJORUwpOworCWlmICghYXJlYSkKKwkJcmV0dXJuIE5VTEw7CisJYWRkciA9IEtNQVBfU1RBUlQ7CisJZm9yIChwID0gJmlvbGlzdDsgKHRtcCA9ICpwKSA7IHAgPSAmdG1wLT5uZXh0KSB7CisJCWlmIChzaXplICsgYWRkciA8ICh1bnNpZ25lZCBsb25nKXRtcC0+YWRkcikKKwkJCWJyZWFrOworCQlpZiAoYWRkciA+IEtNQVBfRU5ELXNpemUpCisJCQlyZXR1cm4gTlVMTDsKKwkJYWRkciA9IHRtcC0+c2l6ZSArICh1bnNpZ25lZCBsb25nKXRtcC0+YWRkcjsKKwl9CisJYXJlYS0+YWRkciA9ICh2b2lkICopYWRkcjsKKwlhcmVhLT5zaXplID0gc2l6ZSArIElPX1NJWkU7CisJYXJlYS0+bmV4dCA9ICpwOworCSpwID0gYXJlYTsKKwlyZXR1cm4gYXJlYTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZyZWVfaW9fYXJlYSh2b2lkICphZGRyKQoreworCXN0cnVjdCB2bV9zdHJ1Y3QgKipwLCAqdG1wOworCisJaWYgKCFhZGRyKQorCQlyZXR1cm47CisJYWRkciA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25nKWFkZHIgJiAtSU9fU0laRSk7CisJZm9yIChwID0gJmlvbGlzdCA7ICh0bXAgPSAqcCkgOyBwID0gJnRtcC0+bmV4dCkgeworCQlpZiAodG1wLT5hZGRyID09IGFkZHIpIHsKKwkJCSpwID0gdG1wLT5uZXh0OworCQkJX19pb3VubWFwKHRtcC0+YWRkciwgdG1wLT5zaXplKTsKKwkJCWtmcmVlKHRtcCk7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKKyNlbmRpZgorCisvKgorICogTWFwIHNvbWUgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBpbnRvIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZS4gVGhlCisgKiBjb2RlIGlzIGNvcGllZCBhbmQgYWRhcHRlZCBmcm9tIG1hcF9jaHVuaygpLgorICovCisvKiBSZXdyaXR0ZW4gYnkgQW5kcmVhcyBTY2h3YWIgdG8gcmVtb3ZlIGFsbCByYWNlcy4gKi8KKwordm9pZCAqX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IGNhY2hlZmxhZykKK3sKKwlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOworCXVuc2lnbmVkIGxvbmcgdmlydGFkZHIsIHJldGFkZHI7CisJbG9uZyBvZmZzZXQ7CisJcGdkX3QgKnBnZF9kaXI7CisJcG1kX3QgKnBtZF9kaXI7CisJcHRlX3QgKnB0ZV9kaXI7CisKKwkvKgorCSAqIERvbid0IGFsbG93IG1hcHBpbmdzIHRoYXQgd3JhcC4uCisJICovCisJaWYgKCFzaXplIHx8IHNpemUgPiBwaHlzYWRkciArIHNpemUpCisJCXJldHVybiBOVUxMOworCisjaWZkZWYgQ09ORklHX0FNSUdBCisJaWYgKE1BQ0hfSVNfQU1JR0EpIHsKKwkJaWYgKChwaHlzYWRkciA+PSAweDQwMDAwMDAwKSAmJiAocGh5c2FkZHIgKyBzaXplIDwgMHg2MDAwMDAwMCkKKwkJICAgICYmIChjYWNoZWZsYWcgPT0gSU9NQVBfTk9DQUNIRV9TRVIpKQorCQkJcmV0dXJuICh2b2lkICopcGh5c2FkZHI7CisJfQorI2VuZGlmCisKKyNpZmRlZiBERUJVRworCXByaW50aygiaW9yZW1hcDogMHglbHgsMHglbHgoJWQpIC0gIiwgcGh5c2FkZHIsIHNpemUsIGNhY2hlZmxhZyk7CisjZW5kaWYKKwkvKgorCSAqIE1hcHBpbmdzIGhhdmUgdG8gYmUgYWxpZ25lZAorCSAqLworCW9mZnNldCA9IHBoeXNhZGRyICYgKElPX1NJWkUgLSAxKTsKKwlwaHlzYWRkciAmPSAtSU9fU0laRTsKKwlzaXplID0gKHNpemUgKyBvZmZzZXQgKyBJT19TSVpFIC0gMSkgJiAtSU9fU0laRTsKKworCS8qCisJICogT2ssIGdvIGZvciBpdC4uCisJICovCisJYXJlYSA9IGdldF9pb19hcmVhKHNpemUpOworCWlmICghYXJlYSkKKwkJcmV0dXJuIE5VTEw7CisKKwl2aXJ0YWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtPmFkZHI7CisJcmV0YWRkciA9IHZpcnRhZGRyICsgb2Zmc2V0OworI2lmZGVmIERFQlVHCisJcHJpbnRrKCIweCVseCwweCVseCwweCVseCIsIHBoeXNhZGRyLCB2aXJ0YWRkciwgcmV0YWRkcik7CisjZW5kaWYKKworCS8qCisJICogYWRkIGNhY2hlIGFuZCB0YWJsZSBmbGFncyB0byBwaHlzaWNhbCBhZGRyZXNzCisJICovCisJaWYgKENQVV9JU18wNDBfT1JfMDYwKSB7CisJCXBoeXNhZGRyIHw9IChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfR0xPQkFMMDQwIHwKKwkJCSAgICAgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSk7CisJCXN3aXRjaCAoY2FjaGVmbGFnKSB7CisJCWNhc2UgSU9NQVBfRlVMTF9DQUNISU5HOgorCQkJcGh5c2FkZHIgfD0gX1BBR0VfQ0FDSEUwNDA7CisJCQlicmVhazsKKwkJY2FzZSBJT01BUF9OT0NBQ0hFX1NFUjoKKwkJZGVmYXVsdDoKKwkJCXBoeXNhZGRyIHw9IF9QQUdFX05PQ0FDSEVfUzsKKwkJCWJyZWFrOworCQljYXNlIElPTUFQX05PQ0FDSEVfTk9OU0VSOgorCQkJcGh5c2FkZHIgfD0gX1BBR0VfTk9DQUNIRTsKKwkJCWJyZWFrOworCQljYXNlIElPTUFQX1dSSVRFVEhST1VHSDoKKwkJCXBoeXNhZGRyIHw9IF9QQUdFX0NBQ0hFMDQwVzsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJcGh5c2FkZHIgfD0gKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKTsKKwkJc3dpdGNoIChjYWNoZWZsYWcpIHsKKwkJY2FzZSBJT01BUF9OT0NBQ0hFX1NFUjoKKwkJY2FzZSBJT01BUF9OT0NBQ0hFX05PTlNFUjoKKwkJZGVmYXVsdDoKKwkJCXBoeXNhZGRyIHw9IF9QQUdFX05PQ0FDSEUwMzA7CisJCQlicmVhazsKKwkJY2FzZSBJT01BUF9GVUxMX0NBQ0hJTkc6CisJCWNhc2UgSU9NQVBfV1JJVEVUSFJPVUdIOgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwl3aGlsZSAoKGxvbmcpc2l6ZSA+IDApIHsKKyNpZmRlZiBERUJVRworCQlpZiAoISh2aXJ0YWRkciAmIChQVFJUUkVFU0laRS0xKSkpCisJCQlwcmludGsgKCJcbnBhPSUjbHggdmE9JSNseCAiLCBwaHlzYWRkciwgdmlydGFkZHIpOworI2VuZGlmCisJCXBnZF9kaXIgPSBwZ2Rfb2Zmc2V0X2sodmlydGFkZHIpOworCQlwbWRfZGlyID0gcG1kX2FsbG9jKCZpbml0X21tLCBwZ2RfZGlyLCB2aXJ0YWRkcik7CisJCWlmICghcG1kX2RpcikgeworCQkJcHJpbnRrKCJpb3JlbWFwOiBubyBtZW0gZm9yIHBtZF9kaXJcbiIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlpZiAoQ1BVX0lTXzAyMF9PUl8wMzApIHsKKwkJCXBtZF9kaXItPnBtZFsodmlydGFkZHIvUFRSVFJFRVNJWkUpICYgMTVdID0gcGh5c2FkZHI7CisJCQlwaHlzYWRkciArPSBQVFJUUkVFU0laRTsKKwkJCXZpcnRhZGRyICs9IFBUUlRSRUVTSVpFOworCQkJc2l6ZSAtPSBQVFJUUkVFU0laRTsKKwkJfSBlbHNlIHsKKwkJCXB0ZV9kaXIgPSBwdGVfYWxsb2Nfa2VybmVsKCZpbml0X21tLCBwbWRfZGlyLCB2aXJ0YWRkcik7CisJCQlpZiAoIXB0ZV9kaXIpIHsKKwkJCQlwcmludGsoImlvcmVtYXA6IG5vIG1lbSBmb3IgcHRlX2RpclxuIik7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisKKwkJCXB0ZV92YWwoKnB0ZV9kaXIpID0gcGh5c2FkZHI7CisJCQl2aXJ0YWRkciArPSBQQUdFX1NJWkU7CisJCQlwaHlzYWRkciArPSBQQUdFX1NJWkU7CisJCQlzaXplIC09IFBBR0VfU0laRTsKKwkJfQorCX0KKyNpZmRlZiBERUJVRworCXByaW50aygiXG4iKTsKKyNlbmRpZgorCWZsdXNoX3RsYl9hbGwoKTsKKworCXJldHVybiAodm9pZCAqKXJldGFkZHI7Cit9CisKKy8qCisgKiBVbm1hcCBhIGlvcmVtYXAoKWVkIHJlZ2lvbiBhZ2FpbgorICovCit2b2lkIGlvdW5tYXAodm9pZCAqYWRkcikKK3sKKyNpZmRlZiBDT05GSUdfQU1JR0EKKwlpZiAoKCFNQUNIX0lTX0FNSUdBKSB8fAorCSAgICAoKCh1bnNpZ25lZCBsb25nKWFkZHIgPCAweDQwMDAwMDAwKSB8fAorCSAgICAgKCh1bnNpZ25lZCBsb25nKWFkZHIgPiAweDYwMDAwMDAwKSkpCisJCQlmcmVlX2lvX2FyZWEoYWRkcik7CisjZWxzZQorCWZyZWVfaW9fYXJlYShhZGRyKTsKKyNlbmRpZgorfQorCisvKgorICogX19pb3VubWFwIHVubWFwcyBuZWFybHkgZXZlcnl0aGluZywgc28gYmUgY2FyZWZ1bAorICogaXQgZG9lc24ndCBmcmVlIGN1cnJlbnRseSBwb2ludGVyL3BhZ2UgdGFibGVzIGFueW1vcmUgYnV0IGl0CisgKiB3YW5zJ3QgdXNlZCBhbnl3YXkgYW5kIG1pZ2h0IGJlIGFkZGVkIGxhdGVyLgorICovCit2b2lkIF9faW91bm1hcCh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdW5zaWduZWQgbG9uZyB2aXJ0YWRkciA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CisJcGdkX3QgKnBnZF9kaXI7CisJcG1kX3QgKnBtZF9kaXI7CisJcHRlX3QgKnB0ZV9kaXI7CisKKwl3aGlsZSAoKGxvbmcpc2l6ZSA+IDApIHsKKwkJcGdkX2RpciA9IHBnZF9vZmZzZXRfayh2aXJ0YWRkcik7CisJCWlmIChwZ2RfYmFkKCpwZ2RfZGlyKSkgeworCQkJcHJpbnRrKCJpb3VubWFwOiBiYWQgcGdkKCUwOGx4KVxuIiwgcGdkX3ZhbCgqcGdkX2RpcikpOworCQkJcGdkX2NsZWFyKHBnZF9kaXIpOworCQkJcmV0dXJuOworCQl9CisJCXBtZF9kaXIgPSBwbWRfb2Zmc2V0KHBnZF9kaXIsIHZpcnRhZGRyKTsKKworCQlpZiAoQ1BVX0lTXzAyMF9PUl8wMzApIHsKKwkJCWludCBwbWRfb2ZmID0gKHZpcnRhZGRyL1BUUlRSRUVTSVpFKSAmIDE1OworCisJCQlpZiAoKHBtZF9kaXItPnBtZFtwbWRfb2ZmXSAmIF9ERVNDVFlQRV9NQVNLKSA9PSBfUEFHRV9QUkVTRU5UKSB7CisJCQkJcG1kX2Rpci0+cG1kW3BtZF9vZmZdID0gMDsKKwkJCQl2aXJ0YWRkciArPSBQVFJUUkVFU0laRTsKKwkJCQlzaXplIC09IFBUUlRSRUVTSVpFOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJaWYgKHBtZF9iYWQoKnBtZF9kaXIpKSB7CisJCQlwcmludGsoImlvdW5tYXA6IGJhZCBwbWQgKCUwOGx4KVxuIiwgcG1kX3ZhbCgqcG1kX2RpcikpOworCQkJcG1kX2NsZWFyKHBtZF9kaXIpOworCQkJcmV0dXJuOworCQl9CisJCXB0ZV9kaXIgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRfZGlyLCB2aXJ0YWRkcik7CisKKwkJcHRlX3ZhbCgqcHRlX2RpcikgPSAwOworCQl2aXJ0YWRkciArPSBQQUdFX1NJWkU7CisJCXNpemUgLT0gUEFHRV9TSVpFOworCX0KKworCWZsdXNoX3RsYl9hbGwoKTsKK30KKworLyoKKyAqIFNldCBuZXcgY2FjaGUgbW9kZSBmb3Igc29tZSBrZXJuZWwgYWRkcmVzcyBzcGFjZS4KKyAqIFRoZSBjYWxsZXIgbXVzdCBwdXNoIGRhdGEgZm9yIHRoYXQgcmFuZ2UgaXRzZWxmLCBpZiBzdWNoIGRhdGEgbWF5IGFscmVhZHkKKyAqIGJlIGluIHRoZSBjYWNoZS4KKyAqLwordm9pZCBrZXJuZWxfc2V0X2NhY2hlbW9kZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBjbW9kZSkKK3sKKwl1bnNpZ25lZCBsb25nIHZpcnRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKKwlwZ2RfdCAqcGdkX2RpcjsKKwlwbWRfdCAqcG1kX2RpcjsKKwlwdGVfdCAqcHRlX2RpcjsKKworCWlmIChDUFVfSVNfMDQwX09SXzA2MCkgeworCQlzd2l0Y2ggKGNtb2RlKSB7CisJCWNhc2UgSU9NQVBfRlVMTF9DQUNISU5HOgorCQkJY21vZGUgPSBfUEFHRV9DQUNIRTA0MDsKKwkJCWJyZWFrOworCQljYXNlIElPTUFQX05PQ0FDSEVfU0VSOgorCQlkZWZhdWx0OgorCQkJY21vZGUgPSBfUEFHRV9OT0NBQ0hFX1M7CisJCQlicmVhazsKKwkJY2FzZSBJT01BUF9OT0NBQ0hFX05PTlNFUjoKKwkJCWNtb2RlID0gX1BBR0VfTk9DQUNIRTsKKwkJCWJyZWFrOworCQljYXNlIElPTUFQX1dSSVRFVEhST1VHSDoKKwkJCWNtb2RlID0gX1BBR0VfQ0FDSEUwNDBXOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKGNtb2RlKSB7CisJCWNhc2UgSU9NQVBfTk9DQUNIRV9TRVI6CisJCWNhc2UgSU9NQVBfTk9DQUNIRV9OT05TRVI6CisJCWRlZmF1bHQ6CisJCQljbW9kZSA9IF9QQUdFX05PQ0FDSEUwMzA7CisJCQlicmVhazsKKwkJY2FzZSBJT01BUF9GVUxMX0NBQ0hJTkc6CisJCWNhc2UgSU9NQVBfV1JJVEVUSFJPVUdIOgorCQkJY21vZGUgPSAwOworCQl9CisJfQorCisJd2hpbGUgKChsb25nKXNpemUgPiAwKSB7CisJCXBnZF9kaXIgPSBwZ2Rfb2Zmc2V0X2sodmlydGFkZHIpOworCQlpZiAocGdkX2JhZCgqcGdkX2RpcikpIHsKKwkJCXByaW50aygiaW9jYWNoZW1vZGU6IGJhZCBwZ2QoJTA4bHgpXG4iLCBwZ2RfdmFsKCpwZ2RfZGlyKSk7CisJCQlwZ2RfY2xlYXIocGdkX2Rpcik7CisJCQlyZXR1cm47CisJCX0KKwkJcG1kX2RpciA9IHBtZF9vZmZzZXQocGdkX2RpciwgdmlydGFkZHIpOworCisJCWlmIChDUFVfSVNfMDIwX09SXzAzMCkgeworCQkJaW50IHBtZF9vZmYgPSAodmlydGFkZHIvUFRSVFJFRVNJWkUpICYgMTU7CisKKwkJCWlmICgocG1kX2Rpci0+cG1kW3BtZF9vZmZdICYgX0RFU0NUWVBFX01BU0spID09IF9QQUdFX1BSRVNFTlQpIHsKKwkJCQlwbWRfZGlyLT5wbWRbcG1kX29mZl0gPSAocG1kX2Rpci0+cG1kW3BtZF9vZmZdICYKKwkJCQkJCQkgX0NBQ0hFTUFTSzA0MCkgfCBjbW9kZTsKKwkJCQl2aXJ0YWRkciArPSBQVFJUUkVFU0laRTsKKwkJCQlzaXplIC09IFBUUlRSRUVTSVpFOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJaWYgKHBtZF9iYWQoKnBtZF9kaXIpKSB7CisJCQlwcmludGsoImlvY2FjaGVtb2RlOiBiYWQgcG1kICglMDhseClcbiIsIHBtZF92YWwoKnBtZF9kaXIpKTsKKwkJCXBtZF9jbGVhcihwbWRfZGlyKTsKKwkJCXJldHVybjsKKwkJfQorCQlwdGVfZGlyID0gcHRlX29mZnNldF9rZXJuZWwocG1kX2RpciwgdmlydGFkZHIpOworCisJCXB0ZV92YWwoKnB0ZV9kaXIpID0gKHB0ZV92YWwoKnB0ZV9kaXIpICYgX0NBQ0hFTUFTSzA0MCkgfCBjbW9kZTsKKwkJdmlydGFkZHIgKz0gUEFHRV9TSVpFOworCQlzaXplIC09IFBBR0VfU0laRTsKKwl9CisKKwlmbHVzaF90bGJfYWxsKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbW0vbWVtb3J5LmMgYi9hcmNoL202OGsvbW0vbWVtb3J5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ1M2E2MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tbS9tZW1vcnkuYwpAQCAtMCwwICsxLDQ3MSBAQAorLyoKKyAqICBsaW51eC9hcmNoL202OGsvbW0vbWVtb3J5LmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1ICBIYW1pc2ggTWFjZG9uYWxkCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorCisKKy8qICsrYW5kcmVhczoge2dldCxmcmVlfV9wb2ludGVyX3RhYmxlIHJld3JpdHRlbiB0byB1c2UgdW51c2VkIGZpZWxkcyBmcm9tCisgICBzdHJ1Y3QgcGFnZSBpbnN0ZWFkIG9mIHNlcGFyYXRlbHkga21hbGxvY2VkIHN0cnVjdC4gIFN0b2xlbiBmcm9tCisgICBhcmNoL3NwYXJjL21tL3NybW11LmMgLi4uICovCisKK3R5cGVkZWYgc3RydWN0IGxpc3RfaGVhZCBwdGFibGVfZGVzYzsKK3N0YXRpYyBMSVNUX0hFQUQocHRhYmxlX2xpc3QpOworCisjZGVmaW5lIFBEX1BUQUJMRShwYWdlKSAoKHB0YWJsZV9kZXNjICopJih2aXJ0X3RvX3BhZ2UocGFnZSktPmxydSkpCisjZGVmaW5lIFBEX1BBR0UocHRhYmxlKSAobGlzdF9lbnRyeShwdGFibGUsIHN0cnVjdCBwYWdlLCBscnUpKQorI2RlZmluZSBQRF9NQVJLQklUUyhkcCkgKCoodW5zaWduZWQgY2hhciAqKSZQRF9QQUdFKGRwKS0+aW5kZXgpCisKKyNkZWZpbmUgUFRBQkxFX1NJWkUgKFBUUlNfUEVSX1BNRCAqIHNpemVvZihwbWRfdCkpCisKK3ZvaWQgX19pbml0IGluaXRfcG9pbnRlcl90YWJsZSh1bnNpZ25lZCBsb25nIHB0YWJsZSkKK3sKKwlwdGFibGVfZGVzYyAqZHA7CisJdW5zaWduZWQgbG9uZyBwYWdlID0gcHRhYmxlICYgUEFHRV9NQVNLOworCXVuc2lnbmVkIGNoYXIgbWFzayA9IDEgPDwgKChwdGFibGUgLSBwYWdlKS9QVEFCTEVfU0laRSk7CisKKwlkcCA9IFBEX1BUQUJMRShwYWdlKTsKKwlpZiAoIShQRF9NQVJLQklUUyhkcCkgJiBtYXNrKSkgeworCQlQRF9NQVJLQklUUyhkcCkgPSAweGZmOworCQlsaXN0X2FkZChkcCwgJnB0YWJsZV9saXN0KTsKKwl9CisKKwlQRF9NQVJLQklUUyhkcCkgJj0gfm1hc2s7CisjaWZkZWYgREVCVUcKKwlwcmludGsoImluaXRfcG9pbnRlcl90YWJsZTogJWx4LCAleFxuIiwgcHRhYmxlLCBQRF9NQVJLQklUUyhkcCkpOworI2VuZGlmCisKKwkvKiB1bnJlc2VydmUgdGhlIHBhZ2Ugc28gaXQncyBwb3NzaWJsZSB0byBmcmVlIHRoYXQgcGFnZSAqLworCVBEX1BBR0UoZHApLT5mbGFncyAmPSB+KDEgPDwgUEdfcmVzZXJ2ZWQpOworCXNldF9wYWdlX2NvdW50KFBEX1BBR0UoZHApLCAxKTsKKworCXJldHVybjsKK30KKworcG1kX3QgKmdldF9wb2ludGVyX3RhYmxlICh2b2lkKQoreworCXB0YWJsZV9kZXNjICpkcCA9IHB0YWJsZV9saXN0Lm5leHQ7CisJdW5zaWduZWQgY2hhciBtYXNrID0gUERfTUFSS0JJVFMgKGRwKTsKKwl1bnNpZ25lZCBjaGFyIHRtcDsKKwl1bnNpZ25lZCBpbnQgb2ZmOworCisJLyoKKwkgKiBGb3IgYSBwb2ludGVyIHRhYmxlIGZvciBhIHVzZXIgcHJvY2VzcyBhZGRyZXNzIHNwYWNlLCBhCisJICogdGFibGUgaXMgdGFrZW4gZnJvbSBhIHBhZ2UgYWxsb2NhdGVkIGZvciB0aGUgcHVycG9zZS4gIEVhY2gKKwkgKiBwYWdlIGNhbiBob2xkIDggcG9pbnRlciB0YWJsZXMuICBUaGUgcGFnZSBpcyByZW1hcHBlZCBpbgorCSAqIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0byBiZSBub25jYWNoZWFibGUuCisJICovCisJaWYgKG1hc2sgPT0gMCkgeworCQl2b2lkICpwYWdlOworCQlwdGFibGVfZGVzYyAqbmV3OworCisJCWlmICghKHBhZ2UgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKSkpCisJCQlyZXR1cm4gTlVMTDsKKworCQlmbHVzaF90bGJfa2VybmVsX3BhZ2UocGFnZSk7CisJCW5vY2FjaGVfcGFnZShwYWdlKTsKKworCQluZXcgPSBQRF9QVEFCTEUocGFnZSk7CisJCVBEX01BUktCSVRTKG5ldykgPSAweGZlOworCQlsaXN0X2FkZF90YWlsKG5ldywgZHApOworCisJCXJldHVybiAocG1kX3QgKilwYWdlOworCX0KKworCWZvciAodG1wID0gMSwgb2ZmID0gMDsgKG1hc2sgJiB0bXApID09IDA7IHRtcCA8PD0gMSwgb2ZmICs9IFBUQUJMRV9TSVpFKQorCQk7CisJUERfTUFSS0JJVFMoZHApID0gbWFzayAmIH50bXA7CisJaWYgKCFQRF9NQVJLQklUUyhkcCkpIHsKKwkJLyogbW92ZSB0byBlbmQgb2YgbGlzdCAqLworCQlsaXN0X2RlbChkcCk7CisJCWxpc3RfYWRkX3RhaWwoZHAsICZwdGFibGVfbGlzdCk7CisJfQorCXJldHVybiAocG1kX3QgKikgKHBhZ2VfYWRkcmVzcyhQRF9QQUdFKGRwKSkgKyBvZmYpOworfQorCitpbnQgZnJlZV9wb2ludGVyX3RhYmxlIChwbWRfdCAqcHRhYmxlKQoreworCXB0YWJsZV9kZXNjICpkcDsKKwl1bnNpZ25lZCBsb25nIHBhZ2UgPSAodW5zaWduZWQgbG9uZylwdGFibGUgJiBQQUdFX01BU0s7CisJdW5zaWduZWQgY2hhciBtYXNrID0gMSA8PCAoKCh1bnNpZ25lZCBsb25nKXB0YWJsZSAtIHBhZ2UpL1BUQUJMRV9TSVpFKTsKKworCWRwID0gUERfUFRBQkxFKHBhZ2UpOworCWlmIChQRF9NQVJLQklUUyAoZHApICYgbWFzaykKKwkJcGFuaWMgKCJ0YWJsZSBhbHJlYWR5IGZyZWUhIik7CisKKwlQRF9NQVJLQklUUyAoZHApIHw9IG1hc2s7CisKKwlpZiAoUERfTUFSS0JJVFMoZHApID09IDB4ZmYpIHsKKwkJLyogYWxsIHRhYmxlcyBpbiBwYWdlIGFyZSBmcmVlLCBmcmVlIHBhZ2UgKi8KKwkJbGlzdF9kZWwoZHApOworCQljYWNoZV9wYWdlKCh2b2lkICopcGFnZSk7CisJCWZyZWVfcGFnZSAocGFnZSk7CisJCXJldHVybiAxOworCX0gZWxzZSBpZiAocHRhYmxlX2xpc3QubmV4dCAhPSBkcCkgeworCQkvKgorCQkgKiBtb3ZlIHRoaXMgZGVzY3JpcHRvciB0byB0aGUgZnJvbnQgb2YgdGhlIGxpc3QsIHNpbmNlCisJCSAqIGl0IGhhcyBvbmUgb3IgbW9yZSBmcmVlIHRhYmxlcy4KKwkJICovCisJCWxpc3RfZGVsKGRwKTsKKwkJbGlzdF9hZGQoZHAsICZwdGFibGVfbGlzdCk7CisJfQorCXJldHVybiAwOworfQorCisjaWZkZWYgREVCVUdfSU5WQUxJRF9QVE9WCitpbnQgbW1faW52X2NudCA9IDU7CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfU0lOR0xFX01FTU9SWV9DSFVOSworLyoKKyAqIFRoZSBmb2xsb3dpbmcgdHdvIHJvdXRpbmVzIG1hcCBmcm9tIGEgcGh5c2ljYWwgYWRkcmVzcyB0byBhIGtlcm5lbAorICogdmlydHVhbCBhZGRyZXNzIGFuZCB2aWNlIHZlcnNhLgorICovCit1bnNpZ25lZCBsb25nIG1tX3Z0b3AodW5zaWduZWQgbG9uZyB2YWRkcikKK3sKKwlpbnQgaT0wOworCXVuc2lnbmVkIGxvbmcgdm9mZiA9ICh1bnNpZ25lZCBsb25nKXZhZGRyIC0gUEFHRV9PRkZTRVQ7CisKKwlkbyB7CisJCWlmICh2b2ZmIDwgbTY4a19tZW1vcnlbaV0uc2l6ZSkgeworI2lmZGVmIERFQlVHUFYKKwkJCXByaW50ayAoIlZUT1AoJXApPSVseFxuIiwgdmFkZHIsCisJCQkJbTY4a19tZW1vcnlbaV0uYWRkciArIHZvZmYpOworI2VuZGlmCisJCQlyZXR1cm4gbTY4a19tZW1vcnlbaV0uYWRkciArIHZvZmY7CisJCX0KKwkJdm9mZiAtPSBtNjhrX21lbW9yeVtpXS5zaXplOworCX0gd2hpbGUgKCsraSA8IG02OGtfbnVtX21lbW9yeSk7CisKKwkvKiBBcyBhIHNwZWNpYWwgY2FzZSBhbGxvdyBgX19wYShoaWdoX21lbW9yeSknLiAgKi8KKwlpZiAodm9mZiA9PSAwKQorCQlyZXR1cm4gbTY4a19tZW1vcnlbaS0xXS5hZGRyICsgbTY4a19tZW1vcnlbaS0xXS5zaXplOworCisJcmV0dXJuIC0xOworfQorI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX1NJTkdMRV9NRU1PUllfQ0hVTksKK3Vuc2lnbmVkIGxvbmcgbW1fcHRvdiAodW5zaWduZWQgbG9uZyBwYWRkcikKK3sKKwlpbnQgaSA9IDA7CisJdW5zaWduZWQgbG9uZyBwb2ZmLCB2b2ZmID0gUEFHRV9PRkZTRVQ7CisKKwlkbyB7CisJCXBvZmYgPSBwYWRkciAtIG02OGtfbWVtb3J5W2ldLmFkZHI7CisJCWlmIChwb2ZmIDwgbTY4a19tZW1vcnlbaV0uc2l6ZSkgeworI2lmZGVmIERFQlVHUFYKKwkJCXByaW50ayAoIlBUT1YoJWx4KT0lbHhcbiIsIHBhZGRyLCBwb2ZmICsgdm9mZik7CisjZW5kaWYKKwkJCXJldHVybiBwb2ZmICsgdm9mZjsKKwkJfQorCQl2b2ZmICs9IG02OGtfbWVtb3J5W2ldLnNpemU7CisJfSB3aGlsZSAoKytpIDwgbTY4a19udW1fbWVtb3J5KTsKKworI2lmZGVmIERFQlVHX0lOVkFMSURfUFRPVgorCWlmIChtbV9pbnZfY250ID4gMCkgeworCQltbV9pbnZfY250LS07CisJCXByaW50aygiSW52YWxpZCB1c2Ugb2YgcGh5c190b192aXJ0KDB4JWx4KSBhdCAweCVwIVxuIiwKKwkJCXBhZGRyLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCX0KKyNlbmRpZgorCXJldHVybiAtMTsKK30KKyNlbmRpZgorCisvKiBpbnZhbGlkYXRlIHBhZ2UgaW4gYm90aCBjYWNoZXMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcjA0MCh1bnNpZ25lZCBsb25nIHBhZGRyKQoreworCWFzbSB2b2xhdGlsZSAoCisJCSJub3Bcblx0IgorCQkiLmNoaXAgNjgwNDBcblx0IgorCQkiY2ludnAgJSViYywoJTApXG5cdCIKKwkJIi5jaGlwIDY4ayIKKwkJOiA6ICJhIiAocGFkZHIpKTsKK30KKworLyogaW52YWxpZGF0ZSBwYWdlIGluIGktY2FjaGUgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcmkwNDAodW5zaWduZWQgbG9uZyBwYWRkcikKK3sKKwlhc20gdm9sYXRpbGUgKAorCQkibm9wXG5cdCIKKwkJIi5jaGlwIDY4MDQwXG5cdCIKKwkJImNpbnZwICUlaWMsKCUwKVxuXHQiCisJCSIuY2hpcCA2OGsiCisJCTogOiAiYSIgKHBhZGRyKSk7Cit9CisKKy8qIHB1c2ggcGFnZSBpbiBib3RoIGNhY2hlcyAqLworLyogUlo6IGNwdXNoICViYyBET0VTIGludmFsaWRhdGUgJWljLCByZWdhcmRsZXNzIG9mIERQSSAqLworc3RhdGljIGlubGluZSB2b2lkIHB1c2gwNDAodW5zaWduZWQgbG9uZyBwYWRkcikKK3sKKwlhc20gdm9sYXRpbGUgKAorCQkibm9wXG5cdCIKKwkJIi5jaGlwIDY4MDQwXG5cdCIKKwkJImNwdXNocCAlJWJjLCglMClcblx0IgorCQkiLmNoaXAgNjhrIgorCQk6IDogImEiIChwYWRkcikpOworfQorCisvKiBwdXNoIGFuZCBpbnZhbGlkYXRlIHBhZ2UgaW4gYm90aCBjYWNoZXMsIG11c3QgZGlzYWJsZSBpbnRzCisgKiB0byBhdm9pZCBpbnZhbGlkYXRpbmcgdmFsaWQgZGF0YSAqLworc3RhdGljIGlubGluZSB2b2lkIHB1c2hjbDA0MCh1bnNpZ25lZCBsb25nIHBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcHVzaDA0MChwYWRkcik7CisJaWYgKENQVV9JU18wNjApCisJCWNsZWFyMDQwKHBhZGRyKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiAwNDA6IEhpdCBldmVyeSBwYWdlIGNvbnRhaW5pbmcgYW4gYWRkcmVzcyBpbiB0aGUgcmFuZ2UgcGFkZHIuLnBhZGRyK2xlbi0xLgorICogKExvdyBvcmRlciBiaXRzIG9mIHRoZSBlYSBvZiBhIENJTlZQL0NQVVNIUCBhcmUgImRvbid0IGNhcmUicykuCisgKiBIaXQgZXZlcnkgcGFnZSB1bnRpbCB0aGVyZSBpcyBhIHBhZ2Ugb3IgbGVzcyB0byBnby4gSGl0IHRoZSBuZXh0IHBhZ2UsCisgKiBhbmQgdGhlIG9uZSBhZnRlciB0aGF0IGlmIHRoZSByYW5nZSBoaXRzIGl0LgorICovCisvKiArK3JvbWFuOiBBIGxpdHRsZSBiaXQgbW9yZSBjYXJlIGlzIHJlcXVpcmVkIGhlcmU6IFRoZSBDSU5WUCBpbnN0cnVjdGlvbgorICogaW52YWxpZGF0ZXMgY2FjaGUgZW50cmllcyBXSVRIT1VUIFdSSVRJTkcgRElSVFkgREFUQSBCQUNLISBTbyB0aGUgYmVnaW5uaW5nCisgKiBhbmQgdGhlIGVuZCBvZiB0aGUgcmVnaW9uIG11c3QgYmUgdHJlYXRlZCBkaWZmZXJlbnRseSBpZiB0aGV5IGFyZSBub3QKKyAqIGV4YWN0bHkgYXQgdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgYSBwYWdlIGJvdW5kYXJ5LiBFbHNlLCBtYXliZSB0b28gbXVjaAorICogZGF0YSBiZWNvbWVzIGludmFsaWRhdGVkIGFuZCB0aHVzIGxvc3QgZm9yZXZlci4gQ1BVU0hQIGRvZXMgd2hhdCB3ZSBuZWVkOgorICogaXQgaW52YWxpZGF0ZXMgdGhlIHBhZ2UgYWZ0ZXIgcHVzaGluZyBkaXJ0eSBkYXRhIHRvIG1lbW9yeS4gKFRoYW5rcyB0byBKZXMKKyAqIGZvciBkaXNjb3ZlcmluZyB0aGUgcHJvYmxlbSEpCisgKi8KKy8qIC4uLiBidXQgb24gdGhlICcwNjAsIENQVVNIIGRvZXNuJ3QgaW52YWxpZGF0ZSAoZm9yIHVzLCBzaW5jZSB3ZSBoYXZlIHNldAorICogdGhlIERQSSBiaXQgaW4gdGhlIENBQ1I7IHdvdWxkIGl0IGNhdXNlIHByb2JsZW1zIHdpdGggdGVtcG9yYXJpbHkgY2hhbmdpbmcKKyAqIHRoaXM/KS4gU28gd2UgaGF2ZSB0byBwdXNoIGZpcnN0IGFuZCB0aGVuIGFkZGl0aW9uYWxseSB0byBpbnZhbGlkYXRlLgorICovCisKKworLyoKKyAqIGNhY2hlX2NsZWFyKCkgc2VtYW50aWNzOiBDbGVhciBhbnkgY2FjaGUgZW50cmllcyBmb3IgdGhlIGFyZWEgaW4gcXVlc3Rpb24sCisgKiB3aXRob3V0IHdyaXRpbmcgYmFjayBkaXJ0eSBlbnRyaWVzIGZpcnN0LiBUaGlzIGlzIHVzZWZ1bCBpZiB0aGUgZGF0YSB3aWxsCisgKiBiZSBvdmVyd3JpdHRlbiBhbnl3YXksIGUuZy4gYnkgRE1BIHRvIG1lbW9yeS4gVGhlIHJhbmdlIGlzIGRlZmluZWQgYnkgYQorICogX3BoeXNpY2FsXyBhZGRyZXNzLgorICovCisKK3ZvaWQgY2FjaGVfY2xlYXIgKHVuc2lnbmVkIGxvbmcgcGFkZHIsIGludCBsZW4pCit7CisgICAgaWYgKENQVV9JU18wNDBfT1JfMDYwKSB7CisJaW50IHRtcDsKKworCS8qCisJICogV2UgbmVlZCBzcGVjaWFsIHRyZWF0bWVudCBmb3IgdGhlIGZpcnN0IHBhZ2UsIGluIGNhc2UgaXQKKwkgKiBpcyBub3QgcGFnZS1hbGlnbmVkLiBQYWdlIGFsaWduIHRoZSBhZGRyZXNzZXMgdG8gd29yaworCSAqIGFyb3VuZCBidWcgSTE3IGluIHRoZSA2ODA2MC4KKwkgKi8KKwlpZiAoKHRtcCA9IC1wYWRkciAmIChQQUdFX1NJWkUgLSAxKSkpIHsKKwkgICAgcHVzaGNsMDQwKHBhZGRyICYgUEFHRV9NQVNLKTsKKwkgICAgaWYgKChsZW4gLT0gdG1wKSA8PSAwKQorCQlyZXR1cm47CisJICAgIHBhZGRyICs9IHRtcDsKKwl9CisJdG1wID0gUEFHRV9TSVpFOworCXBhZGRyICY9IFBBR0VfTUFTSzsKKwl3aGlsZSAoKGxlbiAtPSB0bXApID49IDApIHsKKwkgICAgY2xlYXIwNDAocGFkZHIpOworCSAgICBwYWRkciArPSB0bXA7CisJfQorCWlmICgobGVuICs9IHRtcCkpCisJICAgIC8qIGEgcGFnZSBib3VuZGFyeSBnZXRzIGNyb3NzZWQgYXQgdGhlIGVuZCAqLworCSAgICBwdXNoY2wwNDAocGFkZHIpOworICAgIH0KKyAgICBlbHNlIC8qIDY4MDMwIG9yIDY4MDIwICovCisJYXNtIHZvbGF0aWxlICgibW92ZWMgJS9jYWNyLCUvZDBcblx0IgorCQkgICAgICAib3JpdyAlMCwlL2QwXG5cdCIKKwkJICAgICAgIm1vdmVjICUvZDAsJS9jYWNyIgorCQkgICAgICA6IDogImkiIChGTFVTSF9JX0FORF9EKQorCQkgICAgICA6ICJkMCIpOworI2lmZGVmIENPTkZJR19NNjhLX0wyX0NBQ0hFCisgICAgaWYobWFjaF9sMl9mbHVzaCkKKwltYWNoX2wyX2ZsdXNoKDApOworI2VuZGlmCit9CisKKworLyoKKyAqIGNhY2hlX3B1c2goKSBzZW1hbnRpY3M6IFdyaXRlIGJhY2sgYW55IGRpcnR5IGNhY2hlIGRhdGEgaW4gdGhlIGdpdmVuIGFyZWEsCisgKiBhbmQgaW52YWxpZGF0ZSB0aGUgcmFuZ2UgaW4gdGhlIGluc3RydWN0aW9uIGNhY2hlLiBJdCBuZWVkcyBub3QgKGJ1dCBtYXkpCisgKiBpbnZhbGlkYXRlIHRob3NlIGVudHJpZXMgYWxzbyBpbiB0aGUgZGF0YSBjYWNoZS4gVGhlIHJhbmdlIGlzIGRlZmluZWQgYnkgYQorICogX3BoeXNpY2FsXyBhZGRyZXNzLgorICovCisKK3ZvaWQgY2FjaGVfcHVzaCAodW5zaWduZWQgbG9uZyBwYWRkciwgaW50IGxlbikKK3sKKyAgICBpZiAoQ1BVX0lTXzA0MF9PUl8wNjApIHsKKwlpbnQgdG1wID0gUEFHRV9TSVpFOworCisJLyoKKyAgICAgICAgICogb24gNjgwNDAgb3IgNjgwNjAsIHB1c2ggY2FjaGUgbGluZXMgZm9yIHBhZ2VzIGluIHRoZSByYW5nZTsKKwkgKiBvbiB0aGUgJzA0MCB0aGlzIGFsc28gaW52YWxpZGF0ZXMgdGhlIHB1c2hlZCBsaW5lcywgYnV0IG5vdCBvbgorCSAqIHRoZSAnMDYwIQorCSAqLworCWxlbiArPSBwYWRkciAmIChQQUdFX1NJWkUgLSAxKTsKKworCS8qCisJICogV29yayBhcm91bmQgYnVnIEkxNyBpbiB0aGUgNjgwNjAgYWZmZWN0aW5nIHNvbWUgaW5zdHJ1Y3Rpb24KKwkgKiBsaW5lcyBub3QgYmVpbmcgaW52YWxpZGF0ZWQgcHJvcGVybHkuCisJICovCisJcGFkZHIgJj0gUEFHRV9NQVNLOworCisJZG8geworCSAgICBwdXNoMDQwKHBhZGRyKTsKKwkgICAgcGFkZHIgKz0gdG1wOworCX0gd2hpbGUgKChsZW4gLT0gdG1wKSA+IDApOworICAgIH0KKyAgICAvKgorICAgICAqIDY4MDMwLzY4MDIwIGhhdmUgbm8gd3JpdGViYWNrIGNhY2hlLiBPbiB0aGUgb3RoZXIgaGFuZCwKKyAgICAgKiBjYWNoZV9wdXNoIGlzIGFjdHVhbGx5IGEgc3VwZXJzZXQgb2YgY2FjaGVfY2xlYXIgKHRoZSBsaW5lcworICAgICAqIGdldCB3cml0dGVuIGJhY2sgYW5kIGludmFsaWRhdGVkKSwgc28gd2Ugc2hvdWxkIG1ha2Ugc3VyZQorICAgICAqIHRvIHBlcmZvcm0gdGhlIGNvcnJlc3BvbmRpbmcgYWN0aW9ucy4gQWZ0ZXIgYWxsLCB0aGlzIGlzIGdldHRpbmcKKyAgICAgKiBjYWxsZWQgaW4gcGxhY2VzIHdoZXJlIHdlJ3ZlIGp1c3QgbG9hZGVkIGNvZGUsIG9yIHdoYXRldmVyLCBzbworICAgICAqIGZsdXNoaW5nIHRoZSBpY2FjaGUgaXMgYXBwcm9wcmlhdGU7IGZsdXNoaW5nIHRoZSBkY2FjaGUgc2hvdWxkbid0CisgICAgICogYmUgcmVxdWlyZWQuCisgICAgICovCisgICAgZWxzZSAvKiA2ODAzMCBvciA2ODAyMCAqLworCWFzbSB2b2xhdGlsZSAoIm1vdmVjICUvY2FjciwlL2QwXG5cdCIKKwkJICAgICAgIm9yaXcgJTAsJS9kMFxuXHQiCisJCSAgICAgICJtb3ZlYyAlL2QwLCUvY2FjciIKKwkJICAgICAgOiA6ICJpIiAoRkxVU0hfSSkKKwkJICAgICAgOiAiZDAiKTsKKyNpZmRlZiBDT05GSUdfTTY4S19MMl9DQUNIRQorICAgIGlmKG1hY2hfbDJfZmx1c2gpCisJbWFjaF9sMl9mbHVzaCgxKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXNfc2xvdyh1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCWlmIChDUFVfSVNfMDYwKSB7CisJCW1tX3NlZ21lbnRfdCBmcyA9IGdldF9mcygpOworCQl1bnNpZ25lZCBsb25nIHBhZGRyOworCisJCXNldF9mcyhnZXRfZHMoKSk7CisKKwkJLyogVGhlIFBMUEFSIGluc3RydWN0aW9uIGNhdXNlcyBhbiBhY2Nlc3MgZXJyb3IgaWYgdGhlIHRyYW5zbGF0aW9uCisJCSAqIGlzIG5vdCBwb3NzaWJsZS4gVG8gY2F0Y2ggdGhpcyB3ZSB1c2UgdGhlIHNhbWUgZXhjZXB0aW9uIG1lY2hhbmlzbQorCQkgKiBhcyBmb3IgdXNlciBzcGFjZSBhY2Nlc3NlcyBpbiA8YXNtL3VhY2Nlc3MuaD4uICovCisJCWFzbSB2b2xhdGlsZSAoIi5jaGlwIDY4MDYwXG4iCisJCQkgICAgICAiMTogcGxwYXIgKCUwKVxuIgorCQkJICAgICAgIi5jaGlwIDY4a1xuIgorCQkJICAgICAgIjI6XG4iCisJCQkgICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgorCQkJICAgICAgIiAgIC5ldmVuXG4iCisJCQkgICAgICAiMzogc3ViLmwgJTAsJTBcbiIKKwkJCSAgICAgICIgICBqcmEgMmJcbiIKKwkJCSAgICAgICIucHJldmlvdXNcbiIKKwkJCSAgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJCQkgICAgICAiICAgLmFsaWduIDRcbiIKKwkJCSAgICAgICIgICAubG9uZyAxYiwzYlxuIgorCQkJICAgICAgIi5wcmV2aW91cyIKKwkJCSAgICAgIDogIj1hIiAocGFkZHIpCisJCQkgICAgICA6ICIwIiAodmFkZHIpKTsKKwkJc2V0X2ZzKGZzKTsKKwkJcmV0dXJuIHBhZGRyOworCX0gZWxzZSBpZiAoQ1BVX0lTXzA0MCkgeworCQltbV9zZWdtZW50X3QgZnMgPSBnZXRfZnMoKTsKKwkJdW5zaWduZWQgbG9uZyBtbXVzcjsKKworCQlzZXRfZnMoZ2V0X2RzKCkpOworCisJCWFzbSB2b2xhdGlsZSAoIi5jaGlwIDY4MDQwXG5cdCIKKwkJCSAgICAgICJwdGVzdHIgKCUxKVxuXHQiCisJCQkgICAgICAibW92ZWMgJSVtbXVzciwgJTBcblx0IgorCQkJICAgICAgIi5jaGlwIDY4ayIKKwkJCSAgICAgIDogIj1yIiAobW11c3IpCisJCQkgICAgICA6ICJhIiAodmFkZHIpKTsKKwkJc2V0X2ZzKGZzKTsKKworCQlpZiAobW11c3IgJiBNTVVfUl8wNDApCisJCQlyZXR1cm4gKG1tdXNyICYgUEFHRV9NQVNLKSB8ICh2YWRkciAmIH5QQUdFX01BU0spOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIHNob3J0IG1tdXNyOworCQl1bnNpZ25lZCBsb25nICpkZXNjYWRkcjsKKworCQlhc20gdm9sYXRpbGUgKCJwdGVzdHIgIzUsJTJALCM3LCUwXG5cdCIKKwkJCSAgICAgICJwbW92ZSAlJXBzciwlMUAiCisJCQkgICAgICA6ICI9YSYiIChkZXNjYWRkcikKKwkJCSAgICAgIDogImEiICgmbW11c3IpLCAiYSIgKHZhZGRyKSk7CisJCWlmIChtbXVzciAmIChNTVVfSXxNTVVfQnxNTVVfTCkpCisJCQlyZXR1cm4gMDsKKwkJZGVzY2FkZHIgPSBwaHlzX3RvX3ZpcnQoKHVuc2lnbmVkIGxvbmcpZGVzY2FkZHIpOworCQlzd2l0Y2ggKG1tdXNyICYgTU1VX05VTSkgeworCQljYXNlIDE6CisJCQlyZXR1cm4gKCpkZXNjYWRkciAmIDB4ZmUwMDAwMDApIHwgKHZhZGRyICYgMHgwMWZmZmZmZik7CisJCWNhc2UgMjoKKwkJCXJldHVybiAoKmRlc2NhZGRyICYgMHhmZmZjMDAwMCkgfCAodmFkZHIgJiAweDAwMDNmZmZmKTsKKwkJY2FzZSAzOgorCQkJcmV0dXJuICgqZGVzY2FkZHIgJiBQQUdFX01BU0spIHwgKHZhZGRyICYgflBBR0VfTUFTSyk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFB1c2ggbiBwYWdlcyBhdCBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIGFuZCBjbGVhciB0aGUgaWNhY2hlICovCisvKiBSWjogdXNlIGNwdXNoICViYyBpbnN0ZWFkIG9mIGNwdXNoICVkYywgY2ludiAlaWMgKi8KK3ZvaWQgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBlbmRhZGRyKQoreworCWlmIChDUFVfSVNfMDQwX09SXzA2MCkgeworCQlhZGRyZXNzICY9IFBBR0VfTUFTSzsKKworCQlpZiAoYWRkcmVzcyA+PSBQQUdFX09GRlNFVCAmJiBhZGRyZXNzIDwgKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkpIHsKKwkJCWRvIHsKKwkJCQlhc20gdm9sYXRpbGUgKCJub3Bcblx0IgorCQkJCQkgICAgICAiLmNoaXAgNjgwNDBcblx0IgorCQkJCQkgICAgICAiY3B1c2hwICUlYmMsKCUwKVxuXHQiCisJCQkJCSAgICAgICIuY2hpcCA2OGsiCisJCQkJCSAgICAgIDogOiAiYSIgKHZpcnRfdG9fcGh5cygodm9pZCAqKWFkZHJlc3MpKSk7CisJCQkJYWRkcmVzcyArPSBQQUdFX1NJWkU7CisJCQl9IHdoaWxlIChhZGRyZXNzIDwgZW5kYWRkcik7CisJCX0gZWxzZSB7CisJCQlkbyB7CisJCQkJYXNtIHZvbGF0aWxlICgibm9wXG5cdCIKKwkJCQkJICAgICAgIi5jaGlwIDY4MDQwXG5cdCIKKwkJCQkJICAgICAgImNwdXNocCAlJWJjLCglMClcblx0IgorCQkJCQkgICAgICAiLmNoaXAgNjhrIgorCQkJCQkgICAgICA6IDogImEiICh2aXJ0X3RvX3BoeXNfc2xvdyhhZGRyZXNzKSkpOworCQkJCWFkZHJlc3MgKz0gUEFHRV9TSVpFOworCQkJfSB3aGlsZSAoYWRkcmVzcyA8IGVuZGFkZHIpOworCQl9CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgbG9uZyB0bXA7CisJCWFzbSB2b2xhdGlsZSAoIm1vdmVjICUlY2FjciwlMFxuXHQiCisJCQkgICAgICAib3J3ICUxLCUwXG5cdCIKKwkJCSAgICAgICJtb3ZlYyAlMCwlJWNhY3IiCisJCQkgICAgICA6ICI9JmQiICh0bXApCisJCQkgICAgICA6ICJkaSIgKEZMVVNIX0kpKTsKKwl9Cit9CisKKworI2lmbmRlZiBDT05GSUdfU0lOR0xFX01FTU9SWV9DSFVOSworaW50IG1tX2VuZF9vZl9jaHVuayAodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGVuKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG02OGtfbnVtX21lbW9yeTsgaSsrKQorCQlpZiAobTY4a19tZW1vcnlbaV0uYWRkciArIG02OGtfbWVtb3J5W2ldLnNpemUgPT0gYWRkciArIGxlbikKKwkJCXJldHVybiAxOworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbW0vbW90b3JvbGEuYyBiL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NTVmZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbW0vbW90b3JvbGEuYwpAQCAtMCwwICsxLDI4NSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvbTY4ay9tb3Rvcm9sYS5jCisgKgorICogUm91dGluZXMgc3BlY2lmaWMgdG8gdGhlIE1vdG9yb2xhIE1NVSwgb3JpZ2luYWxseSBmcm9tOgorICogbGludXgvYXJjaC9tNjhrL2luaXQuYworICogd2hpY2ggYXJlIENvcHlyaWdodCAoQykgMTk5NSBIYW1pc2ggTWFjZG9uYWxkCisgKgorICogTW92ZWQgOC8yMC8xOTk5IFNhbSBDcmVhc2V5CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2lmZGVmIENPTkZJR19BVEFSSQorI2luY2x1ZGUgPGFzbS9hdGFyaV9zdHJhbS5oPgorI2VuZGlmCisKKyN1bmRlZiBERUJVRworCisjaWZuZGVmIG1tX2NhY2hlYml0cworLyoKKyAqIEJpdHMgdG8gYWRkIHRvIHBhZ2UgZGVzY3JpcHRvcnMgZm9yICJub3JtYWwiIGNhY2hpbmcgbW9kZS4KKyAqIEZvciA2ODAyMC8wMzAgdGhpcyBpcyAwLgorICogRm9yIDY4MDQwLCB0aGlzIGlzIF9QQUdFX0NBQ0hFMDQwIChjYWNoYWJsZSwgY29weWJhY2spCisgKi8KK3Vuc2lnbmVkIGxvbmcgbW1fY2FjaGViaXRzOworRVhQT1JUX1NZTUJPTChtbV9jYWNoZWJpdHMpOworI2VuZGlmCisKK3N0YXRpYyBwdGVfdCAqIF9faW5pdCBrZXJuZWxfcGFnZV90YWJsZSh2b2lkKQoreworCXB0ZV90ICpwdGFibGVwOworCisJcHRhYmxlcCA9IChwdGVfdCAqKWFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKFBBR0VfU0laRSk7CisKKwljbGVhcl9wYWdlKHB0YWJsZXApOworCV9fZmx1c2hfcGFnZV90b19yYW0ocHRhYmxlcCk7CisJZmx1c2hfdGxiX2tlcm5lbF9wYWdlKHB0YWJsZXApOworCW5vY2FjaGVfcGFnZShwdGFibGVwKTsKKworCXJldHVybiBwdGFibGVwOworfQorCitzdGF0aWMgcG1kX3QgKmxhc3RfcGd0YWJsZSBfX2luaXRkYXRhID0gTlVMTDsKK3BtZF90ICp6ZXJvX3BndGFibGUgX19pbml0ZGF0YSA9IE5VTEw7CisKK3N0YXRpYyBwbWRfdCAqIF9faW5pdCBrZXJuZWxfcHRyX3RhYmxlKHZvaWQpCit7CisJaWYgKCFsYXN0X3BndGFibGUpIHsKKwkJdW5zaWduZWQgbG9uZyBwbWQsIGxhc3Q7CisJCWludCBpOworCisJCS8qIEZpbmQgdGhlIGxhc3QgcHRyIHRhYmxlIHRoYXQgd2FzIHVzZWQgaW4gaGVhZC5TIGFuZAorCQkgKiByZXVzZSB0aGUgcmVtYWluaW5nIHNwYWNlIGluIHRoYXQgcGFnZSBmb3IgZnVydGhlcgorCQkgKiBwdHIgdGFibGVzLgorCQkgKi8KKwkJbGFzdCA9ICh1bnNpZ25lZCBsb25nKWtlcm5lbF9wZ19kaXI7CisJCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QR0Q7IGkrKykgeworCQkJaWYgKCFwZ2RfcHJlc2VudChrZXJuZWxfcGdfZGlyW2ldKSkKKwkJCQljb250aW51ZTsKKwkJCXBtZCA9IF9fcGdkX3BhZ2Uoa2VybmVsX3BnX2RpcltpXSk7CisJCQlpZiAocG1kID4gbGFzdCkKKwkJCQlsYXN0ID0gcG1kOworCQl9CisKKwkJbGFzdF9wZ3RhYmxlID0gKHBtZF90ICopbGFzdDsKKyNpZmRlZiBERUJVRworCQlwcmludGsoImtlcm5lbF9wdHJfaW5pdDogJXBcbiIsIGxhc3RfcGd0YWJsZSk7CisjZW5kaWYKKwl9CisKKwlsYXN0X3BndGFibGUgKz0gUFRSU19QRVJfUE1EOworCWlmICgoKHVuc2lnbmVkIGxvbmcpbGFzdF9wZ3RhYmxlICYgflBBR0VfTUFTSykgPT0gMCkgeworCQlsYXN0X3BndGFibGUgPSAocG1kX3QgKilhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOworCisJCWNsZWFyX3BhZ2UobGFzdF9wZ3RhYmxlKTsKKwkJX19mbHVzaF9wYWdlX3RvX3JhbShsYXN0X3BndGFibGUpOworCQlmbHVzaF90bGJfa2VybmVsX3BhZ2UobGFzdF9wZ3RhYmxlKTsKKwkJbm9jYWNoZV9wYWdlKGxhc3RfcGd0YWJsZSk7CisJfQorCisJcmV0dXJuIGxhc3RfcGd0YWJsZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0CittYXBfY2h1bmsgKHVuc2lnbmVkIGxvbmcgYWRkciwgbG9uZyBzaXplKQoreworI2RlZmluZSBQVFJUUkVFU0laRSAoMjU2KjEwMjQpCisjZGVmaW5lIFJPT1RUUkVFU0laRSAoMzIqMTAyNCoxMDI0KQorCXN0YXRpYyB1bnNpZ25lZCBsb25nIHZpcnRhZGRyID0gUEFHRV9PRkZTRVQ7CisJdW5zaWduZWQgbG9uZyBwaHlzYWRkcjsKKwlwZ2RfdCAqcGdkX2RpcjsKKwlwbWRfdCAqcG1kX2RpcjsKKwlwdGVfdCAqcHRlX2RpcjsKKworCXBoeXNhZGRyID0gKGFkZHIgfCBtNjhrX3N1cGVydmlzb3JfY2FjaGVtb2RlIHwKKwkJICAgIF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKTsKKwlpZiAoQ1BVX0lTXzA0MF9PUl8wNjApCisJCXBoeXNhZGRyIHw9IF9QQUdFX0dMT0JBTDA0MDsKKworCXdoaWxlIChzaXplID4gMCkgeworI2lmZGVmIERFQlVHCisJCWlmICghKHZpcnRhZGRyICYgKFBUUlRSRUVTSVpFLTEpKSkKKwkJCXByaW50ayAoIlxucGE9JSNseCB2YT0lI2x4ICIsIHBoeXNhZGRyICYgUEFHRV9NQVNLLAorCQkJCXZpcnRhZGRyKTsKKyNlbmRpZgorCQlwZ2RfZGlyID0gcGdkX29mZnNldF9rKHZpcnRhZGRyKTsKKwkJaWYgKHZpcnRhZGRyICYmIENQVV9JU18wMjBfT1JfMDMwKSB7CisJCQlpZiAoISh2aXJ0YWRkciAmIChST09UVFJFRVNJWkUtMSkpICYmCisJCQkgICAgc2l6ZSA+PSBST09UVFJFRVNJWkUpIHsKKyNpZmRlZiBERUJVRworCQkJCXByaW50ayAoIlt2ZXJ5IGVhcmx5IHRlcm1dIik7CisjZW5kaWYKKwkJCQlwZ2RfdmFsKCpwZ2RfZGlyKSA9IHBoeXNhZGRyOworCQkJCXNpemUgLT0gUk9PVFRSRUVTSVpFOworCQkJCXZpcnRhZGRyICs9IFJPT1RUUkVFU0laRTsKKwkJCQlwaHlzYWRkciArPSBST09UVFJFRVNJWkU7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJaWYgKCFwZ2RfcHJlc2VudCgqcGdkX2RpcikpIHsKKwkJCXBtZF9kaXIgPSBrZXJuZWxfcHRyX3RhYmxlKCk7CisjaWZkZWYgREVCVUcKKwkJCXByaW50ayAoIltuZXcgcG9pbnRlciAlcF0iLCBwbWRfZGlyKTsKKyNlbmRpZgorCQkJcGdkX3NldChwZ2RfZGlyLCBwbWRfZGlyKTsKKwkJfSBlbHNlCisJCQlwbWRfZGlyID0gcG1kX29mZnNldChwZ2RfZGlyLCB2aXJ0YWRkcik7CisKKwkJaWYgKENQVV9JU18wMjBfT1JfMDMwKSB7CisJCQlpZiAodmlydGFkZHIpIHsKKyNpZmRlZiBERUJVRworCQkJCXByaW50ayAoIltlYXJseSB0ZXJtXSIpOworI2VuZGlmCisJCQkJcG1kX2Rpci0+cG1kWyh2aXJ0YWRkci9QVFJUUkVFU0laRSkgJiAxNV0gPSBwaHlzYWRkcjsKKwkJCQlwaHlzYWRkciArPSBQVFJUUkVFU0laRTsKKwkJCX0gZWxzZSB7CisJCQkJaW50IGk7CisjaWZkZWYgREVCVUcKKwkJCQlwcmludGsgKCJbemVybyBtYXBdIik7CisjZW5kaWYKKwkJCQl6ZXJvX3BndGFibGUgPSBrZXJuZWxfcHRyX3RhYmxlKCk7CisJCQkJcHRlX2RpciA9IChwdGVfdCAqKXplcm9fcGd0YWJsZTsKKwkJCQlwbWRfZGlyLT5wbWRbMF0gPSB2aXJ0X3RvX3BoeXMocHRlX2RpcikgfAorCQkJCQlfUEFHRV9UQUJMRSB8IF9QQUdFX0FDQ0VTU0VEOworCQkJCXB0ZV92YWwoKnB0ZV9kaXIrKykgPSAwOworCQkJCXBoeXNhZGRyICs9IFBBR0VfU0laRTsKKwkJCQlmb3IgKGkgPSAxOyBpIDwgNjQ7IHBoeXNhZGRyICs9IFBBR0VfU0laRSwgaSsrKQorCQkJCQlwdGVfdmFsKCpwdGVfZGlyKyspID0gcGh5c2FkZHI7CisJCQl9CisJCQlzaXplIC09IFBUUlRSRUVTSVpFOworCQkJdmlydGFkZHIgKz0gUFRSVFJFRVNJWkU7CisJCX0gZWxzZSB7CisJCQlpZiAoIXBtZF9wcmVzZW50KCpwbWRfZGlyKSkgeworI2lmZGVmIERFQlVHCisJCQkJcHJpbnRrICgiW25ldyB0YWJsZV0iKTsKKyNlbmRpZgorCQkJCXB0ZV9kaXIgPSBrZXJuZWxfcGFnZV90YWJsZSgpOworCQkJCXBtZF9zZXQocG1kX2RpciwgcHRlX2Rpcik7CisJCQl9CisJCQlwdGVfZGlyID0gcHRlX29mZnNldF9rZXJuZWwocG1kX2RpciwgdmlydGFkZHIpOworCisJCQlpZiAodmlydGFkZHIpIHsKKwkJCQlpZiAoIXB0ZV9wcmVzZW50KCpwdGVfZGlyKSkKKwkJCQkJcHRlX3ZhbCgqcHRlX2RpcikgPSBwaHlzYWRkcjsKKwkJCX0gZWxzZQorCQkJCXB0ZV92YWwoKnB0ZV9kaXIpID0gMDsKKwkJCXNpemUgLT0gUEFHRV9TSVpFOworCQkJdmlydGFkZHIgKz0gUEFHRV9TSVpFOworCQkJcGh5c2FkZHIgKz0gUEFHRV9TSVpFOworCQl9CisKKwl9CisjaWZkZWYgREVCVUcKKwlwcmludGsoIlxuIik7CisjZW5kaWYKKworCXJldHVybiB2aXJ0YWRkcjsKK30KKworLyoKKyAqIHBhZ2luZ19pbml0KCkgY29udGludWVzIHRoZSB2aXJ0dWFsIG1lbW9yeSBlbnZpcm9ubWVudCBzZXR1cCB3aGljaAorICogd2FzIGJlZ3VuIGJ5IHRoZSBjb2RlIGluIGFyY2gvaGVhZC5TLgorICovCit2b2lkIF9faW5pdCBwYWdpbmdfaW5pdCh2b2lkKQoreworCWludCBjaHVuazsKKwl1bnNpZ25lZCBsb25nIG1lbV9hdmFpbCA9IDA7CisJdW5zaWduZWQgbG9uZyB6b25lc19zaXplWzNdID0geyAwLCB9OworCisjaWZkZWYgREVCVUcKKwl7CisJCWV4dGVybiB1bnNpZ25lZCBsb25nIGF2YWlsbWVtOworCQlwcmludGsgKCJzdGFydCBvZiBwYWdpbmdfaW5pdCAoJXAsICVseCwgJWx4LCAlbHgpXG4iLAorCQkJa2VybmVsX3BnX2RpciwgYXZhaWxtZW0sIHN0YXJ0X21lbSwgZW5kX21lbSk7CisJfQorI2VuZGlmCisKKwkvKiBGaXggdGhlIGNhY2hlIG1vZGUgaW4gdGhlIHBhZ2UgZGVzY3JpcHRvcnMgZm9yIHRoZSA2ODBbNDZdMC4gICovCisJaWYgKENQVV9JU18wNDBfT1JfMDYwKSB7CisJCWludCBpOworI2lmbmRlZiBtbV9jYWNoZWJpdHMKKwkJbW1fY2FjaGViaXRzID0gX1BBR0VfQ0FDSEUwNDA7CisjZW5kaWYKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCQlwZ3Byb3RfdmFsKHByb3RlY3Rpb25fbWFwW2ldKSB8PSBfUEFHRV9DQUNIRTA0MDsKKwl9CisKKwkvKgorCSAqIE1hcCB0aGUgcGh5c2ljYWwgbWVtb3J5IGF2YWlsYWJsZSBpbnRvIHRoZSBrZXJuZWwgdmlydHVhbAorCSAqIGFkZHJlc3Mgc3BhY2UuICBJdCBtYXkgYWxsb2NhdGUgc29tZSBtZW1vcnkgZm9yIHBhZ2UKKwkgKiB0YWJsZXMgYW5kIHRodXMgbW9kaWZ5IGF2YWlsbWVtLgorCSAqLworCisJZm9yIChjaHVuayA9IDA7IGNodW5rIDwgbTY4a19udW1fbWVtb3J5OyBjaHVuaysrKSB7CisJCW1lbV9hdmFpbCA9IG1hcF9jaHVuayAobTY4a19tZW1vcnlbY2h1bmtdLmFkZHIsCisJCQkJICAgICAgIG02OGtfbWVtb3J5W2NodW5rXS5zaXplKTsKKworCX0KKworCWZsdXNoX3RsYl9hbGwoKTsKKyNpZmRlZiBERUJVRworCXByaW50ayAoIm1lbW9yeSBhdmFpbGFibGUgaXMgJWxkS0JcbiIsIG1lbV9hdmFpbCA+PiAxMCk7CisJcHJpbnRrICgic3RhcnRfbWVtIGlzICUjbHhcbnZpcnR1YWxfZW5kIGlzICUjbHhcbiIsCisJCXN0YXJ0X21lbSwgZW5kX21lbSk7CisjZW5kaWYKKworCS8qCisJICogaW5pdGlhbGl6ZSB0aGUgYmFkIHBhZ2UgdGFibGUgYW5kIGJhZCBwYWdlIHRvIHBvaW50CisJICogdG8gYSBjb3VwbGUgb2YgYWxsb2NhdGVkIHBhZ2VzCisJICovCisJZW1wdHlfemVyb19wYWdlID0gYWxsb2NfYm9vdG1lbV9wYWdlcyhQQUdFX1NJWkUpOworCW1lbXNldChlbXB0eV96ZXJvX3BhZ2UsIDAsIFBBR0VfU0laRSk7CisKKwkvKgorCSAqIFNldCB1cCBTRkMvREZDIHJlZ2lzdGVycworCSAqLworCXNldF9mcyhLRVJORUxfRFMpOworCisjaWZkZWYgREVCVUcKKwlwcmludGsgKCJiZWZvcmUgZnJlZV9hcmVhX2luaXRcbiIpOworI2VuZGlmCisJem9uZXNfc2l6ZVswXSA9IChtYWNoX21heF9kbWFfYWRkcmVzcyA8ICh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ID8KKwkJCSAobWFjaF9tYXhfZG1hX2FkZHJlc3MrMSkgOiAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSk7CisJem9uZXNfc2l6ZVsxXSA9ICh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5IC0gem9uZXNfc2l6ZVswXTsKKworCXpvbmVzX3NpemVbMF0gPSAoem9uZXNfc2l6ZVswXSAtIFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUOworCXpvbmVzX3NpemVbMV0gPj49IFBBR0VfU0hJRlQ7CisKKwlmcmVlX2FyZWFfaW5pdCh6b25lc19zaXplKTsKK30KKworZXh0ZXJuIGNoYXIgX19pbml0X2JlZ2luLCBfX2luaXRfZW5kOworCit2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCWFkZHIgPSAodW5zaWduZWQgbG9uZykmX19pbml0X2JlZ2luOworCWZvciAoOyBhZGRyIDwgKHVuc2lnbmVkIGxvbmcpJl9faW5pdF9lbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CisJCXZpcnRfdG9fcGFnZShhZGRyKS0+ZmxhZ3MgJj0gfigxIDw8IFBHX3Jlc2VydmVkKTsKKwkJc2V0X3BhZ2VfY291bnQodmlydF90b19wYWdlKGFkZHIpLCAxKTsKKwkJZnJlZV9wYWdlKGFkZHIpOworCQl0b3RhbHJhbV9wYWdlcysrOworCX0KK30KKworCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbW0vc3VuM2ttYXAuYyBiL2FyY2gvbTY4ay9tbS9zdW4za21hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMGQ4NmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbW0vc3VuM2ttYXAuYwpAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvbTY4ay9tbS9zdW4za21hcC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFNhbSBDcmVhc2V5IDxzYW1teUBzYW1teS5uZXQ+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zdW4zbW11Lmg+CisKKyN1bmRlZiBTVU4zX0tNQVBfREVCVUcKKworI2lmZGVmIFNVTjNfS01BUF9ERUJVRworZXh0ZXJuIHZvaWQgcHJpbnRfcHRlX3ZhZGRyKHVuc2lnbmVkIGxvbmcgdmFkZHIpOworI2VuZGlmCisKK2V4dGVybiB2b2lkIG1tdV9lbXVfbWFwX3BtZWcgKGludCBjb250ZXh0LCBpbnQgdmFkZHIpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZG9fcGFnZV9tYXBpbih1bnNpZ25lZCBsb25nIHBoeXMsIHVuc2lnbmVkIGxvbmcgdmlydCwKKwkJCQkgdW5zaWduZWQgbG9uZyB0eXBlKQoreworCXVuc2lnbmVkIGxvbmcgcHRlOworCXB0ZV90IHB0ZXA7CisKKwlwdGVwID0gcGZuX3B0ZShwaHlzID4+IFBBR0VfU0hJRlQsIFBBR0VfS0VSTkVMKTsKKwlwdGUgPSBwdGVfdmFsKHB0ZXApOworCXB0ZSB8PSB0eXBlOworCisJc3VuM19wdXRfcHRlKHZpcnQsIHB0ZSk7CisKKyNpZmRlZiBTVU4zX0tNQVBfREVCVUcKKwlwcmludF9wdGVfdmFkZHIodmlydCk7CisjZW5kaWYKKworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG9fcG1lZ19tYXBpbih1bnNpZ25lZCBsb25nIHBoeXMsIHVuc2lnbmVkIGxvbmcgdmlydCwKKwkJCQkgdW5zaWduZWQgbG9uZyB0eXBlLCBpbnQgcGFnZXMpCit7CisKKwlpZihzdW4zX2dldF9zZWdtYXAodmlydCAmIH5TVU4zX1BNRUdfTUFTSykgPT0gU1VOM19JTlZBTElEX1BNRUcpCisJCW1tdV9lbXVfbWFwX3BtZWcoc3VuM19nZXRfY29udGV4dCgpLCB2aXJ0KTsKKworCXdoaWxlKHBhZ2VzKSB7CisJCWRvX3BhZ2VfbWFwaW4ocGh5cywgdmlydCwgdHlwZSk7CisJCXBoeXMgKz0gUEFHRV9TSVpFOworCQl2aXJ0ICs9IFBBR0VfU0laRTsKKwkJcGFnZXMtLTsKKwl9Cit9CisKK3ZvaWQgKnN1bjNfaW9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXMsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJICAgdW5zaWduZWQgbG9uZyB0eXBlKQoreworCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHZpcnQsIHJldDsKKwlpbnQgcGFnZXM7CisKKwlpZighc2l6ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBwYWdlIGFsaWduICovCisJb2Zmc2V0ID0gcGh5cyAmIChQQUdFX1NJWkUtMSk7CisJcGh5cyAmPSB+KFBBR0VfU0laRS0xKTsKKworCXNpemUgKz0gb2Zmc2V0OworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCWlmKChhcmVhID0gZ2V0X3ZtX2FyZWEoc2l6ZSwgVk1fSU9SRU1BUCkpID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisjaWZkZWYgU1VOM19LTUFQX0RFQlVHCisJcHJpbnRrKCJpb3JlbWFwOiBnb3QgdmlydCAlcCBzaXplICVseCglbHgpXG4iLAorCSAgICAgICBhcmVhLT5hZGRyLCBzaXplLCBhcmVhLT5zaXplKTsKKyNlbmRpZgorCisJcGFnZXMgPSBzaXplIC8gUEFHRV9TSVpFOworCXZpcnQgPSAodW5zaWduZWQgbG9uZylhcmVhLT5hZGRyOworCXJldCA9IHZpcnQgKyBvZmZzZXQ7CisKKwl3aGlsZShwYWdlcykgeworCQlpbnQgc2VnX3BhZ2VzOworCisJCXNlZ19wYWdlcyA9IChTVU4zX1BNRUdfU0laRSAtICh2aXJ0ICYgU1VOM19QTUVHX01BU0spKSAvIFBBR0VfU0laRTsKKwkJaWYoc2VnX3BhZ2VzID4gcGFnZXMpCisJCQlzZWdfcGFnZXMgPSBwYWdlczsKKworCQlkb19wbWVnX21hcGluKHBoeXMsIHZpcnQsIHR5cGUsIHNlZ19wYWdlcyk7CisKKwkJcGFnZXMgLT0gc2VnX3BhZ2VzOworCQlwaHlzICs9IHNlZ19wYWdlcyAqIFBBR0VfU0laRTsKKwkJdmlydCArPSBzZWdfcGFnZXMgKiBQQUdFX1NJWkU7CisJfQorCisJcmV0dXJuICh2b2lkICopcmV0OworCit9CisKKwordm9pZCAqX19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgY2FjaGUpCit7CisKKwlyZXR1cm4gc3VuM19pb3JlbWFwKHBoeXMsIHNpemUsIFNVTjNfUEFHRV9UWVBFX0lPKTsKKworfQorCit2b2lkIGlvdW5tYXAodm9pZCAqYWRkcikKK3sKKwl2ZnJlZSgodm9pZCAqKShQQUdFX01BU0sgJiAodW5zaWduZWQgbG9uZylhZGRyKSk7Cit9CisKKy8qIHN1bjNfbWFwX3Rlc3QoYWRkciwgdmFsKSAtLSBSZWFkcyBhIGJ5dGUgZnJvbSBhZGRyLCBzdG9yaW5nIHRvIHZhbCwKKyAqIHRyYXBwaW5nIHRoZSBwb3RlbnRpYWwgcmVhZCBmYXVsdC4gIFJldHVybnMgMCBpZiB0aGUgYWNjZXNzIGZhdWx0ZWQsCisgKiAxIG9uIHN1Y2Nlc3MuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBwcmltYXJpbHkgdXNlZCB0byBjaGVjayBhZGRyZXNzZXMgb24gdGhlIFZNRSBidXMuCisgKgorICogTXVja2luZyB3aXRoIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgc2VlbXMgYSBsaXR0bGUgaGFja2lzaCB0byBtZSwgYnV0CisgKiBTdW5PUywgTmV0QlNELCBhbmQgTWFjaCBhbGwgaW1wbGVtZW50ZWQgdGhpcyBjaGVjayBpbiBzdWNoIGEgbWFubmVyLAorICogc28gSSBmaWd1cmUgd2UncmUgYWxsb3dlZC4KKyAqLworaW50IHN1bjNfbWFwX3Rlc3QodW5zaWduZWQgbG9uZyBhZGRyLCBjaGFyICp2YWwpCit7CisJaW50IHJldCA9IDA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXworCQkoIi5nbG9ibCBfc3VuM19tYXBfdGVzdF9zdGFydFxuIgorCQkgIl9zdW4zX21hcF90ZXN0X3N0YXJ0OlxuIgorCQkgIjE6IG1vdmViICglMiksICglMClcbiIKKwkJICIgICBtb3ZlcSAjMSwgJTFcbiIKKwkJICIyOlxuIgorCQkgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKKwkJICIuZXZlblxuIgorCQkgIjM6IG1vdmVxICMwLCAlMVxuIgorCQkgIiAgIGptcCAyYlxuIgorCQkgIi5wcmV2aW91c1xuIgorCQkgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKKwkJICIuYWxpZ24gNFxuIgorCQkgIi5sb25nIDFiLDNiXG4iCisJCSAiLnByZXZpb3VzXG4iCisJCSAiLmdsb2JsIF9zdW4zX21hcF90ZXN0X2VuZFxuIgorCQkgIl9zdW4zX21hcF90ZXN0X2VuZDpcbiIKKwkJIDogIj1hIih2YWwpLCAiPXIiKHJldCkKKwkJIDogImEiKGFkZHIpKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbW0vc3VuM21tdS5jIGIvYXJjaC9tNjhrL21tL3N1bjNtbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDdiZTE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL21tL3N1bjNtbXUuYwpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvbTY4ay9tbS9zdW4zbW11LmMKKyAqCisgKiBJbXBsZW1lbnRhdGlvbnMgb2YgbW0gcm91dGluZXMgc3BlY2lmaWMgdG8gdGhlIHN1bjMgTU1VLgorICoKKyAqIE1vdmVkIGhlcmUgOC8yMC8xOTk5IFNhbSBDcmVhc2V5CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitleHRlcm4gdm9pZCBtbXVfZW11X2luaXQgKHVuc2lnbmVkIGxvbmcgYm9vdG1lbV9lbmQpOworCitjb25zdCBjaGFyIGJhZF9wbWRfc3RyaW5nW10gPSAiQmFkIHBtZCBpbiBwdGVfYWxsb2M6ICUwOGx4XG4iOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBudW1fcGFnZXM7CisKK3ZvaWQgZnJlZV9pbml0bWVtKHZvaWQpCit7Cit9CisKKy8qIEZvciB0aGUgc3VuMyB3ZSB0cnkgdG8gZm9sbG93IHRoZSBpMzg2IHBhZ2luZ19pbml0KCkgbW9yZSBjbG9zZWx5ICovCisvKiBzdGFydF9tZW0gYW5kIGVuZF9tZW0gaGF2ZSBQQUdFX09GRlNFVCBhZGRlZCBhbHJlYWR5ICovCisvKiBub3cgc2V0cyB1cCB0YWJsZXMgdXNpbmcgc3VuMyBQVEVzIHJhdGhlciB0aGFuIGkzODYgYXMgYmVmb3JlLiAtLW0gKi8KK3ZvaWQgX19pbml0IHBhZ2luZ19pbml0KHZvaWQpCit7CisJcGdkX3QgKiBwZ19kaXI7CisJcHRlX3QgKiBwZ190YWJsZTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisJdW5zaWduZWQgbG9uZyBuZXh0X3BndGFibGU7CisJdW5zaWduZWQgbG9uZyBib290bWVtX2VuZDsKKwl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbM10gPSB7MCwgMCwgMH07CisJdW5zaWduZWQgbG9uZyBzaXplOworCisKKyNpZmRlZiBURVNUX1ZFUklGWV9BUkVBCisJd3Bfd29ya3Nfb2sgPSAwOworI2VuZGlmCisJZW1wdHlfemVyb19wYWdlID0gYWxsb2NfYm9vdG1lbV9wYWdlcyhQQUdFX1NJWkUpOworCW1lbXNldChlbXB0eV96ZXJvX3BhZ2UsIDAsIFBBR0VfU0laRSk7CisKKwlhZGRyZXNzID0gUEFHRV9PRkZTRVQ7CisJcGdfZGlyID0gc3dhcHBlcl9wZ19kaXI7CisJbWVtc2V0IChzd2FwcGVyX3BnX2RpciwgMCwgc2l6ZW9mIChzd2FwcGVyX3BnX2RpcikpOworCW1lbXNldCAoa2VybmVsX3BnX2RpciwgIDAsIHNpemVvZiAoa2VybmVsX3BnX2RpcikpOworCisJc2l6ZSA9IG51bV9wYWdlcyAqIHNpemVvZihwdGVfdCk7CisJc2l6ZSA9IChzaXplICsgUEFHRV9TSVpFKSAmIH4oUEFHRV9TSVpFLTEpOworCisJbmV4dF9wZ3RhYmxlID0gKHVuc2lnbmVkIGxvbmcpYWxsb2NfYm9vdG1lbV9wYWdlcyhzaXplKTsKKwlib290bWVtX2VuZCA9IChuZXh0X3BndGFibGUgKyBzaXplICsgUEFHRV9TSVpFKSAmIFBBR0VfTUFTSzsKKworCS8qIE1hcCB3aG9sZSBtZW1vcnkgZnJvbSBQQUdFX09GRlNFVCAoMHgwRTAwMDAwMCkgKi8KKwlwZ19kaXIgKz0gUEFHRV9PRkZTRVQgPj4gUEdESVJfU0hJRlQ7CisKKwl3aGlsZSAoYWRkcmVzcyA8ICh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5KSB7CisJCXBnX3RhYmxlID0gKHB0ZV90ICopIF9fcGEgKG5leHRfcGd0YWJsZSk7CisJCW5leHRfcGd0YWJsZSArPSBQVFJTX1BFUl9QVEUgKiBzaXplb2YgKHB0ZV90KTsKKwkJcGdkX3ZhbCgqcGdfZGlyKSA9ICh1bnNpZ25lZCBsb25nKSBwZ190YWJsZTsKKwkJcGdfZGlyKys7CisKKwkJLyogbm93IGNoYW5nZSBwZ190YWJsZSB0byBrZXJuZWwgdmlydHVhbCBhZGRyZXNzZXMgKi8KKwkJcGdfdGFibGUgPSAocHRlX3QgKikgX192YSAoKHVuc2lnbmVkIGxvbmcpIHBnX3RhYmxlKTsKKwkJZm9yIChpPTA7IGk8UFRSU19QRVJfUFRFOyArK2ksICsrcGdfdGFibGUpIHsKKwkJCXB0ZV90IHB0ZSA9IHBmbl9wdGUodmlydF90b19wZm4oYWRkcmVzcyksIFBBR0VfSU5JVCk7CisJCQlpZiAoYWRkcmVzcyA+PSAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSkKKwkJCQlwdGVfdmFsIChwdGUpID0gMDsKKwkJCXNldF9wdGUgKHBnX3RhYmxlLCBwdGUpOworCQkJYWRkcmVzcyArPSBQQUdFX1NJWkU7CisJCX0KKwl9CisKKwltbXVfZW11X2luaXQoYm9vdG1lbV9lbmQpOworCisJY3VycmVudC0+bW0gPSBOVUxMOworCisJLyogbWVtb3J5IHNpemluZyBpcyBhIGhhY2sgc3RvbGVuIGZyb20gbW90b3JvbGEuYy4uICBob3BlIGl0IHdvcmtzIGZvciB1cyAqLworCXpvbmVzX3NpemVbMF0gPSAoKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgLSBQQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVDsKKwl6b25lc19zaXplWzFdID0gMDsKKworCWZyZWVfYXJlYV9pbml0KHpvbmVzX3NpemUpOworCit9CisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL212bWUxNDcvMTQ3aW50cy5jIGIvYXJjaC9tNjhrL212bWUxNDcvMTQ3aW50cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YTc0NGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbXZtZTE0Ny8xNDdpbnRzLmMKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBhcmNoL202OGsvbXZtZTE0Ny8xNDdpbnRzLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTcgUmljaGFyZCBIaXJzdCBbcmljaGFyZEBzbGVlcGllLmRlbW9uLmNvLnVrXQorICoKKyAqIGJhc2VkIG9uIGFtaWludHMuYyAtLSBBbWlnYSBMaW51eCBpbnRlcnJ1cHQgaGFuZGxpbmcgY29kZQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIFJFQURNRS5sZWdhbCBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKworc3RhdGljIGlycXJldHVybl90IG12bWUxNDdfZGVmaGFuZCAoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApOworCisvKgorICogVGhpcyBzaG91bGQgaWRlYWxseSBiZSA0IGVsZW1lbnRzIG9ubHksIGZvciBzcGVlZC4KKyAqLworCitzdGF0aWMgc3RydWN0IHsKKwlpcnFyZXR1cm5fdAkoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXZvaWQJCSpkZXZfaWQ7CisJY29uc3QgY2hhcgkqZGV2bmFtZTsKKwl1bnNpZ25lZAljb3VudDsKK30gaXJxX3RhYlsyNTZdOworCisvKgorICogdm9pZCBtdm1lMTQ3X2luaXRfSVJRICh2b2lkKQorICoKKyAqIFBhcmFtZXRlcnM6CU5vbmUKKyAqCisgKiBSZXR1cm5zOglOb3RoaW5nCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGtlcm5lbCBzdGFydHVwIHRvIGluaXRpYWxpemUKKyAqIHRoZSBtdm1lMTQ3IElSUSBoYW5kbGluZyByb3V0aW5lcy4KKyAqLworCit2b2lkIG12bWUxNDdfaW5pdF9JUlEgKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJaXJxX3RhYltpXS5oYW5kbGVyID0gbXZtZTE0N19kZWZoYW5kOworCQlpcnFfdGFiW2ldLmZsYWdzID0gSVJRX0ZMR19TVEQ7CisJCWlycV90YWJbaV0uZGV2X2lkID0gTlVMTDsKKwkJaXJxX3RhYltpXS5kZXZuYW1lID0gTlVMTDsKKwkJaXJxX3RhYltpXS5jb3VudCA9IDA7CisJfQorfQorCitpbnQgbXZtZTE0N19yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLAorCQlpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpkZXZuYW1lLCB2b2lkICpkZXZfaWQpCit7CisJaWYgKGlycSA+IDI1NSkgeworCQlwcmludGsoIiVzOiBJbmNvcnJlY3QgSVJRICVkIGZyb20gJXNcbiIsIF9fRlVOQ1RJT05fXywgaXJxLCBkZXZuYW1lKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisJaWYgKCEoaXJxX3RhYltpcnFdLmZsYWdzICYgSVJRX0ZMR19TVEQpKSB7CisJCWlmIChpcnFfdGFiW2lycV0uZmxhZ3MgJiBJUlFfRkxHX0xPQ0spIHsKKwkJCXByaW50aygiJXM6IElSUSAlZCBmcm9tICVzIGlzIG5vdCByZXBsYWNlYWJsZVxuIiwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGlycSwgaXJxX3RhYltpcnFdLmRldm5hbWUpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlpZiAoZmxhZ3MgJiBJUlFfRkxHX1JFUExBQ0UpIHsKKwkJCXByaW50aygiJXM6ICVzIGNhbid0IHJlcGxhY2UgSVJRICVkIGZyb20gJXNcbiIsCisJCQkgICAgICAgX19GVU5DVElPTl9fLCBkZXZuYW1lLCBpcnEsIGlycV90YWJbaXJxXS5kZXZuYW1lKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisJaXJxX3RhYltpcnFdLmhhbmRsZXIgPSBoYW5kbGVyOworCWlycV90YWJbaXJxXS5mbGFncyAgID0gZmxhZ3M7CisJaXJxX3RhYltpcnFdLmRldl9pZCAgPSBkZXZfaWQ7CisJaXJxX3RhYltpcnFdLmRldm5hbWUgPSBkZXZuYW1lOworCXJldHVybiAwOworfQorCit2b2lkIG12bWUxNDdfZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCWlmIChpcnEgPiAyNTUpIHsKKwkJcHJpbnRrKCIlczogSW5jb3JyZWN0IElSUSAlZFxuIiwgX19GVU5DVElPTl9fLCBpcnEpOworCQlyZXR1cm47CisJfQorCWlmIChpcnFfdGFiW2lycV0uZGV2X2lkICE9IGRldl9pZCkKKwkJcHJpbnRrKCIlczogUmVtb3ZpbmcgcHJvYmFibHkgd3JvbmcgSVJRICVkIGZyb20gJXNcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIGlycSwgaXJxX3RhYltpcnFdLmRldm5hbWUpOworCisJaXJxX3RhYltpcnFdLmhhbmRsZXIgPSBtdm1lMTQ3X2RlZmhhbmQ7CisJaXJxX3RhYltpcnFdLmZsYWdzICAgPSBJUlFfRkxHX1NURDsKKwlpcnFfdGFiW2lycV0uZGV2X2lkICA9IE5VTEw7CisJaXJxX3RhYltpcnFdLmRldm5hbWUgPSBOVUxMOworfQorCitpcnFyZXR1cm5fdCBtdm1lMTQ3X3Byb2Nlc3NfaW50ICh1bnNpZ25lZCBsb25nIHZlYywgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCWlmICh2ZWMgPiAyNTUpIHsKKwkJcHJpbnRrICgibXZtZTE0N19wcm9jZXNzX2ludDogSWxsZWdhbCB2ZWN0b3IgJWxkXG4iLCB2ZWMpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfSBlbHNlIHsKKwkJaXJxX3RhYlt2ZWNdLmNvdW50Kys7CisJCWlycV90YWJbdmVjXS5oYW5kbGVyKHZlYywgaXJxX3RhYlt2ZWNdLmRldl9pZCwgZnApOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorfQorCitpbnQgc2hvd19tdm1lMTQ3X2ludGVycnVwdHMgKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlpZiAoaXJxX3RhYltpXS5jb3VudCkKKwkJCXNlcV9wcmludGYocCwgIlZlYyAweCUwMng6ICU4ZCAgJXNcbiIsCisJCQkgICAgaSwgaXJxX3RhYltpXS5jb3VudCwKKwkJCSAgICBpcnFfdGFiW2ldLmRldm5hbWUgPyBpcnFfdGFiW2ldLmRldm5hbWUgOiAiZnJlZSIpOworCX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaXJxcmV0dXJuX3QgbXZtZTE0N19kZWZoYW5kIChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwlwcmludGsgKCJVbmtub3duIGludGVycnVwdCAweCUwMnhcbiIsIGlycSk7CisJcmV0dXJuIElSUV9OT05FOworfQorCit2b2lkIG12bWUxNDdfZW5hYmxlX2lycSAodW5zaWduZWQgaW50IGlycSkKK3sKK30KKworCit2b2lkIG12bWUxNDdfZGlzYWJsZV9pcnEgKHVuc2lnbmVkIGludCBpcnEpCit7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tdm1lMTQ3L01ha2VmaWxlIGIvYXJjaC9tNjhrL212bWUxNDcvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAxNTNlZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tdm1lMTQ3L01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorIworIyBNYWtlZmlsZSBmb3IgTGludXggYXJjaC9tNjhrL212bWUxNDcgc291cmNlIGRpcmVjdG9yeQorIworCitvYmoteQkJOj0gY29uZmlnLm8gMTQ3aW50cy5vCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbXZtZTE0Ny9jb25maWcuYyBiL2FyY2gvbTY4ay9tdm1lMTQ3L2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmY2Y5NzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbXZtZTE0Ny9jb25maWcuYwpAQCAtMCwwICsxLDIyOSBAQAorLyoKKyAqICBhcmNoL202OGsvbXZtZTE0Ny9jb25maWcuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2ZSBGcmFzY29uZSBbY2hhb3NAbWluZHNwcmluZy5jb21dCisgKiAgQ2xvbmVkIGZyb20gICAgICAgIFJpY2hhcmQgSGlyc3QgW3JpY2hhcmRAc2xlZXBpZS5kZW1vbi5jby51a10KKyAqCisgKiBCYXNlZCBvbjoKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTkzIEhhbWlzaCBNYWNkb25hbGQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBSRUFETUUubGVnYWwgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vcnRjLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vbXZtZTE0N2h3Lmg+CisKKworZXh0ZXJuIGlycXJldHVybl90IG12bWUxNDdfcHJvY2Vzc19pbnQgKGludCBsZXZlbCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgbXZtZTE0N19pbml0X0lSUSAodm9pZCk7CitleHRlcm4gdm9pZCBtdm1lMTQ3X2ZyZWVfaXJxICh1bnNpZ25lZCBpbnQsIHZvaWQgKik7CitleHRlcm4gaW50ICBzaG93X212bWUxNDdfaW50ZXJydXB0cyAoc3RydWN0IHNlcV9maWxlICosIHZvaWQgKik7CitleHRlcm4gdm9pZCBtdm1lMTQ3X2VuYWJsZV9pcnEgKHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBtdm1lMTQ3X2Rpc2FibGVfaXJxICh1bnNpZ25lZCBpbnQpOworc3RhdGljIHZvaWQgbXZtZTE0N19nZXRfbW9kZWwoY2hhciAqbW9kZWwpOworc3RhdGljIGludCAgbXZtZTE0N19nZXRfaGFyZHdhcmVfbGlzdChjaGFyICpidWZmZXIpOworZXh0ZXJuIGludCBtdm1lMTQ3X3JlcXVlc3RfaXJxICh1bnNpZ25lZCBpbnQgaXJxLCBpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKTsKK2V4dGVybiB2b2lkIG12bWUxNDdfc2NoZWRfaW5pdChpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtdm1lMTQ3X2dldHRpbWVvZmZzZXQgKHZvaWQpOworZXh0ZXJuIGludCBtdm1lMTQ3X2h3Y2xrIChpbnQsIHN0cnVjdCBydGNfdGltZSAqKTsKK2V4dGVybiBpbnQgbXZtZTE0N19zZXRfY2xvY2tfbW1zcyAodW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBtdm1lMTQ3X3Jlc2V0ICh2b2lkKTsKK2V4dGVybiB2b2lkIG12bWUxNDdfd2FpdGJ1dCh2b2lkKTsKKworCitzdGF0aWMgaW50IGJjZDJpbnQgKHVuc2lnbmVkIGNoYXIgYik7CisKKy8qIFNhdmUgdGljayBoYW5kbGVyIHJvdXRpbmUgcG9pbnRlciwgd2lsbCBwb2ludCB0byBkb190aW1lcigpIGluCisgKiBrZXJuZWwvc2NoZWQuYywgY2FsbGVkIHZpYSBtdm1lMTQ3X3Byb2Nlc3NfaW50KCkgKi8KKworaXJxcmV0dXJuX3QgKCp0aWNrX2hhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKworCitpbnQgbXZtZTE0N19wYXJzZV9ib290aW5mbyhjb25zdCBzdHJ1Y3QgYmlfcmVjb3JkICpiaSkKK3sKKwlpZiAoYmktPnRhZyA9PSBCSV9WTUVfVFlQRSB8fCBiaS0+dGFnID09IEJJX1ZNRV9CUkRJTkZPKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAxOworfQorCit2b2lkIG12bWUxNDdfcmVzZXQodm9pZCkKK3sKKwlwcmludGsgKCJcclxuXG5DYWxsZWQgbXZtZTE0N19yZXNldFxyXG4iKTsKKwltMTQ3X3BjYy0+d2F0Y2hkb2cgPSAweDBhOwkvKiBDbGVhciB0aW1lciAqLworCW0xNDdfcGNjLT53YXRjaGRvZyA9IDB4YTU7CS8qIEVuYWJsZSB3YXRjaGRvZyAtIDEwMG1zIHRvIHJlc2V0ICovCisJd2hpbGUgKDEpCisJCTsKK30KKworc3RhdGljIHZvaWQgbXZtZTE0N19nZXRfbW9kZWwoY2hhciAqbW9kZWwpCit7CisJc3ByaW50Zihtb2RlbCwgIk1vdG9yb2xhIE1WTUUxNDciKTsKK30KKworCitzdGF0aWMgaW50IG12bWUxNDdfZ2V0X2hhcmR3YXJlX2xpc3QoY2hhciAqYnVmZmVyKQoreworCSpidWZmZXIgPSAnXDAnOworCisJcmV0dXJuIDA7Cit9CisKKwordm9pZCBfX2luaXQgY29uZmlnX212bWUxNDcodm9pZCkKK3sKKwltYWNoX21heF9kbWFfYWRkcmVzcwk9IDB4MDEwMDAwMDA7CisJbWFjaF9zY2hlZF9pbml0CQk9IG12bWUxNDdfc2NoZWRfaW5pdDsKKwltYWNoX2luaXRfSVJRCQk9IG12bWUxNDdfaW5pdF9JUlE7CisJbWFjaF9nZXR0aW1lb2Zmc2V0CT0gbXZtZTE0N19nZXR0aW1lb2Zmc2V0OworCW1hY2hfaHdjbGsJCT0gbXZtZTE0N19od2NsazsKKwltYWNoX3NldF9jbG9ja19tbXNzCT0gbXZtZTE0N19zZXRfY2xvY2tfbW1zczsKKwltYWNoX3Jlc2V0CQk9IG12bWUxNDdfcmVzZXQ7CisJbWFjaF9mcmVlX2lycQkJPSBtdm1lMTQ3X2ZyZWVfaXJxOworCW1hY2hfcHJvY2Vzc19pbnQJPSBtdm1lMTQ3X3Byb2Nlc3NfaW50OworCW1hY2hfZ2V0X2lycV9saXN0CT0gc2hvd19tdm1lMTQ3X2ludGVycnVwdHM7CisJbWFjaF9yZXF1ZXN0X2lycQk9IG12bWUxNDdfcmVxdWVzdF9pcnE7CisJZW5hYmxlX2lycQkJPSBtdm1lMTQ3X2VuYWJsZV9pcnE7CisJZGlzYWJsZV9pcnEJCT0gbXZtZTE0N19kaXNhYmxlX2lycTsKKwltYWNoX2dldF9tb2RlbAkJPSBtdm1lMTQ3X2dldF9tb2RlbDsKKwltYWNoX2dldF9oYXJkd2FyZV9saXN0CT0gbXZtZTE0N19nZXRfaGFyZHdhcmVfbGlzdDsKKworCS8qIEJvYXJkIHR5cGUgaXMgb25seSBzZXQgYnkgbmV3ZXIgdmVyc2lvbnMgb2Ygdm1lbGlsby90ZnRwbGlsbyAqLworCWlmICghdm1lX2JyZHR5cGUpCisJCXZtZV9icmR0eXBlID0gVk1FX1RZUEVfTVZNRTE0NzsKK30KKworCisvKiBVc2luZyBwY2MgdGljayB0aW1lciAxICovCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdm1lMTQ3X3RpbWVyX2ludCAoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJbTE0N19wY2MtPnQxX2ludF9jbnRybCA9IFBDQ19USU1FUl9JTlRfQ0xSOworCW0xNDdfcGNjLT50MV9pbnRfY250cmwgPSBQQ0NfSU5UX0VOQUJ8UENDX0xFVkVMX1RJTUVSMTsKKwlyZXR1cm4gdGlja19oYW5kbGVyKGlycSwgZGV2X2lkLCBmcCk7Cit9CisKKwordm9pZCBtdm1lMTQ3X3NjaGVkX2luaXQgKGlycXJldHVybl90ICgqdGltZXJfcm91dGluZSkoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopKQoreworCXRpY2tfaGFuZGxlciA9IHRpbWVyX3JvdXRpbmU7CisJcmVxdWVzdF9pcnEgKFBDQ19JUlFfVElNRVIxLCBtdm1lMTQ3X3RpbWVyX2ludCwKKwkJSVJRX0ZMR19SRVBMQUNFLCAidGltZXIgMSIsIE5VTEwpOworCisJLyogSW5pdCB0aGUgY2xvY2sgd2l0aCBhIHZhbHVlICovCisJLyogb3VyIGNsb2NrIGdvZXMgb2ZmIGV2ZXJ5IDYuMjV1cyAqLworCW0xNDdfcGNjLT50MV9wcmVsb2FkID0gUENDX1RJTUVSX1BSRUxPQUQ7CisJbTE0N19wY2MtPnQxX2NudHJsID0gMHgwOwkvKiBjbGVhciB0aW1lciAqLworCW0xNDdfcGNjLT50MV9jbnRybCA9IDB4MzsJLyogc3RhcnQgdGltZXIgKi8KKwltMTQ3X3BjYy0+dDFfaW50X2NudHJsID0gUENDX1RJTUVSX0lOVF9DTFI7ICAvKiBjbGVhciBwZW5kaW5nIGludHMgKi8KKwltMTQ3X3BjYy0+dDFfaW50X2NudHJsID0gUENDX0lOVF9FTkFCfFBDQ19MRVZFTF9USU1FUjE7Cit9CisKKy8qIFRoaXMgaXMgYWx3YXlzIGV4ZWN1dGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4gICovCisvKiBYWFggVGhlcmUgYXJlIHJhY2UgaGF6YXJkcyBpbiB0aGlzIGNvZGUgWFhYICovCit1bnNpZ25lZCBsb25nIG12bWUxNDdfZ2V0dGltZW9mZnNldCAodm9pZCkKK3sKKwl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqY3AgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikweGZmZmUxMDEyOworCXVuc2lnbmVkIHNob3J0IG47CisKKwluID0gKmNwOworCXdoaWxlIChuICE9ICpjcCkKKwkJbiA9ICpjcDsKKworCW4gLT0gUENDX1RJTUVSX1BSRUxPQUQ7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKW4gKiAyNSAvIDQ7Cit9CisKK3N0YXRpYyBpbnQgYmNkMmludCAodW5zaWduZWQgY2hhciBiKQoreworCXJldHVybiAoKGI+PjQpKjEwICsgKGImMTUpKTsKK30KKworaW50IG12bWUxNDdfaHdjbGsoaW50IG9wLCBzdHJ1Y3QgcnRjX3RpbWUgKnQpCit7Cisjd2FybmluZyBjaGVjayBtZSEKKwlpZiAoIW9wKSB7CisJCW0xNDdfcnRjLT5jdHJsID0gUlRDX1JFQUQ7CisJCXQtPnRtX3llYXIgPSBiY2QyaW50IChtMTQ3X3J0Yy0+YmNkX3llYXIpOworCQl0LT50bV9tb24gID0gYmNkMmludCAobTE0N19ydGMtPmJjZF9tdGgpOworCQl0LT50bV9tZGF5ID0gYmNkMmludCAobTE0N19ydGMtPmJjZF9kb20pOworCQl0LT50bV9ob3VyID0gYmNkMmludCAobTE0N19ydGMtPmJjZF9ocik7CisJCXQtPnRtX21pbiAgPSBiY2QyaW50IChtMTQ3X3J0Yy0+YmNkX21pbik7CisJCXQtPnRtX3NlYyAgPSBiY2QyaW50IChtMTQ3X3J0Yy0+YmNkX3NlYyk7CisJCW0xNDdfcnRjLT5jdHJsID0gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBtdm1lMTQ3X3NldF9jbG9ja19tbXNzICh1bnNpZ25lZCBsb25nIG5vd3RpbWUpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLSAgU2VyaWFsIGNvbnNvbGUgc3R1ZmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQgc2NjX2RlbGF5ICh2b2lkKQoreworCWludCBuOworCXZvbGF0aWxlIGludCB0cmFzaDsKKworCWZvciAobiA9IDA7IG4gPCAyMDsgbisrKQorCQl0cmFzaCA9IG47Cit9CisKK3N0YXRpYyB2b2lkIHNjY193cml0ZSAoY2hhciBjaCkKK3sKKwl2b2xhdGlsZSBjaGFyICpwID0gKHZvbGF0aWxlIGNoYXIgKilNMTQ3X1NDQ19BX0FERFI7CisKKwlkbyB7CisJCXNjY19kZWxheSgpOworCX0KKwl3aGlsZSAoISgqcCAmIDQpKTsKKwlzY2NfZGVsYXkoKTsKKwkqcCA9IDg7CisJc2NjX2RlbGF5KCk7CisJKnAgPSBjaDsKK30KKworCit2b2lkIG0xNDdfc2NjX3dyaXRlIChzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXdoaWxlIChjb3VudC0tKQorCXsKKwkJaWYgKCpzdHIgPT0gJ1xuJykKKwkJCXNjY193cml0ZSAoJ1xyJyk7CisJCXNjY193cml0ZSAoKnN0cisrKTsKKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCit2b2lkIG12bWUxNDdfaW5pdF9jb25zb2xlX3BvcnQgKHN0cnVjdCBjb25zb2xlICpjbywgaW50IGNmbGFnKQoreworCWNvLT53cml0ZSAgICA9IG0xNDdfc2NjX3dyaXRlOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL212bWUxNngvMTZ4aW50cy5jIGIvYXJjaC9tNjhrL212bWUxNngvMTZ4aW50cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5M2VmNzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbXZtZTE2eC8xNnhpbnRzLmMKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBhcmNoL202OGsvbXZtZTE2eC8xNnhpbnRzLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgUmljaGFyZCBIaXJzdCBbcmljaGFyZEBzbGVlcGllLmRlbW9uLmNvLnVrXQorICoKKyAqIGJhc2VkIG9uIGFtaWludHMuYyAtLSBBbWlnYSBMaW51eCBpbnRlcnJ1cHQgaGFuZGxpbmcgY29kZQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIFJFQURNRS5sZWdhbCBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworc3RhdGljIGlycXJldHVybl90IG12bWUxNnhfZGVmaGFuZCAoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApOworCisvKgorICogVGhpcyBzaG91bGQgaWRlYWxseSBiZSA0IGVsZW1lbnRzIG9ubHksIGZvciBzcGVlZC4KKyAqLworCitzdGF0aWMgc3RydWN0IHsKKwlpcnFyZXR1cm5fdAkoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXZvaWQJCSpkZXZfaWQ7CisJY29uc3QgY2hhcgkqZGV2bmFtZTsKKwl1bnNpZ25lZAljb3VudDsKK30gaXJxX3RhYlsxOTJdOworCisvKgorICogdm9pZCBtdm1lMTZ4X2luaXRfSVJRICh2b2lkKQorICoKKyAqIFBhcmFtZXRlcnM6CU5vbmUKKyAqCisgKiBSZXR1cm5zOglOb3RoaW5nCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGtlcm5lbCBzdGFydHVwIHRvIGluaXRpYWxpemUKKyAqIHRoZSBtdm1lMTZ4IElSUSBoYW5kbGluZyByb3V0aW5lcy4gIFNob3VsZCBwcm9iYWJseSBlbnN1cmUKKyAqIHRoYXQgdGhlIGJhc2UgdmVjdG9ycyBmb3IgdGhlIFZNRUNoaXAyIGFuZCBQQ0NDaGlwMiBhcmUgdmFsaWQuCisgKi8KKwordm9pZCBtdm1lMTZ4X2luaXRfSVJRICh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDE5MjsgaSsrKSB7CisJCWlycV90YWJbaV0uaGFuZGxlciA9IG12bWUxNnhfZGVmaGFuZDsKKwkJaXJxX3RhYltpXS5mbGFncyA9IElSUV9GTEdfU1REOworCQlpcnFfdGFiW2ldLmRldl9pZCA9IE5VTEw7CisJCWlycV90YWJbaV0uZGV2bmFtZSA9IE5VTEw7CisJCWlycV90YWJbaV0uY291bnQgPSAwOworCX0KK30KKworaW50IG12bWUxNnhfcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGlycSwKKwkJaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKQoreworCWlmIChpcnEgPCA2NCB8fCBpcnEgPiAyNTUpIHsKKwkJcHJpbnRrKCIlczogSW5jb3JyZWN0IElSUSAlZCBmcm9tICVzXG4iLCBfX0ZVTkNUSU9OX18sIGlycSwgZGV2bmFtZSk7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJaWYgKCEoaXJxX3RhYltpcnEtNjRdLmZsYWdzICYgSVJRX0ZMR19TVEQpKSB7CisJCWlmIChpcnFfdGFiW2lycS02NF0uZmxhZ3MgJiBJUlFfRkxHX0xPQ0spIHsKKwkJCXByaW50aygiJXM6IElSUSAlZCBmcm9tICVzIGlzIG5vdCByZXBsYWNlYWJsZVxuIiwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGlycSwgaXJxX3RhYltpcnEtNjRdLmRldm5hbWUpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlpZiAoZmxhZ3MgJiBJUlFfRkxHX1JFUExBQ0UpIHsKKwkJCXByaW50aygiJXM6ICVzIGNhbid0IHJlcGxhY2UgSVJRICVkIGZyb20gJXNcbiIsCisJCQkgICAgICAgX19GVU5DVElPTl9fLCBkZXZuYW1lLCBpcnEsIGlycV90YWJbaXJxLTY0XS5kZXZuYW1lKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisJaXJxX3RhYltpcnEtNjRdLmhhbmRsZXIgPSBoYW5kbGVyOworCWlycV90YWJbaXJxLTY0XS5mbGFncyAgID0gZmxhZ3M7CisJaXJxX3RhYltpcnEtNjRdLmRldl9pZCAgPSBkZXZfaWQ7CisJaXJxX3RhYltpcnEtNjRdLmRldm5hbWUgPSBkZXZuYW1lOworCXJldHVybiAwOworfQorCit2b2lkIG12bWUxNnhfZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCWlmIChpcnEgPCA2NCB8fCBpcnEgPiAyNTUpIHsKKwkJcHJpbnRrKCIlczogSW5jb3JyZWN0IElSUSAlZFxuIiwgX19GVU5DVElPTl9fLCBpcnEpOworCQlyZXR1cm47CisJfQorCisJaWYgKGlycV90YWJbaXJxLTY0XS5kZXZfaWQgIT0gZGV2X2lkKQorCQlwcmludGsoIiVzOiBSZW1vdmluZyBwcm9iYWJseSB3cm9uZyBJUlEgJWQgZnJvbSAlc1xuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgaXJxLCBpcnFfdGFiW2lycS02NF0uZGV2bmFtZSk7CisKKwlpcnFfdGFiW2lycS02NF0uaGFuZGxlciA9IG12bWUxNnhfZGVmaGFuZDsKKwlpcnFfdGFiW2lycS02NF0uZmxhZ3MgICA9IElSUV9GTEdfU1REOworCWlycV90YWJbaXJxLTY0XS5kZXZfaWQgID0gTlVMTDsKKwlpcnFfdGFiW2lycS02NF0uZGV2bmFtZSA9IE5VTEw7Cit9CisKK2lycXJldHVybl90IG12bWUxNnhfcHJvY2Vzc19pbnQgKHVuc2lnbmVkIGxvbmcgdmVjLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJaWYgKHZlYyA8IDY0IHx8IHZlYyA+IDI1NSkgeworCQlwcmludGsgKCJtdm1lMTZ4X3Byb2Nlc3NfaW50OiBJbGxlZ2FsIHZlY3RvciAlbGQiLCB2ZWMpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfSBlbHNlIHsKKwkJaXJxX3RhYlt2ZWMtNjRdLmNvdW50Kys7CisJCWlycV90YWJbdmVjLTY0XS5oYW5kbGVyKHZlYywgaXJxX3RhYlt2ZWMtNjRdLmRldl9pZCwgZnApOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorfQorCitpbnQgc2hvd19tdm1lMTZ4X2ludGVycnVwdHMgKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAxOTI7IGkrKykgeworCQlpZiAoaXJxX3RhYltpXS5jb3VudCkKKwkJCXNlcV9wcmludGYocCwgIlZlYyAweCUwMng6ICU4ZCAgJXNcbiIsCisJCQkgICAgaSs2NCwgaXJxX3RhYltpXS5jb3VudCwKKwkJCSAgICBpcnFfdGFiW2ldLmRldm5hbWUgPyBpcnFfdGFiW2ldLmRldm5hbWUgOiAiZnJlZSIpOworCX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaXJxcmV0dXJuX3QgbXZtZTE2eF9kZWZoYW5kIChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwlwcmludGsgKCJVbmtub3duIGludGVycnVwdCAweCUwMnhcbiIsIGlycSk7CisJcmV0dXJuIElSUV9OT05FOworfQorCisKK3ZvaWQgbXZtZTE2eF9lbmFibGVfaXJxICh1bnNpZ25lZCBpbnQgaXJxKQoreworfQorCisKK3ZvaWQgbXZtZTE2eF9kaXNhYmxlX2lycSAodW5zaWduZWQgaW50IGlycSkKK3sKK30KKworCmRpZmYgLS1naXQgYS9hcmNoL202OGsvbXZtZTE2eC9NYWtlZmlsZSBiL2FyY2gvbTY4ay9tdm1lMTZ4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMjlmNTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbXZtZTE2eC9NYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIExpbnV4IGFyY2gvbTY4ay9tdm1lMTZ4IHNvdXJjZSBkaXJlY3RvcnkKKyMKKworb2JqLXkJCTo9IGNvbmZpZy5vIDE2eGludHMubyBydGMubyBtdm1lMTZ4X2tzeW1zLm8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tdm1lMTZ4L2NvbmZpZy5jIGIvYXJjaC9tNjhrL212bWUxNngvY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjZTgxYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9tdm1lMTZ4L2NvbmZpZy5jCkBAIC0wLDAgKzEsMjg2IEBACisvKgorICogIGFyY2gvbTY4ay9tdm1lMTZ4L2NvbmZpZy5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NSBSaWNoYXJkIEhpcnN0IFtyaWNoYXJkQHNsZWVwaWUuZGVtb24uY28udWtdCisgKgorICogQmFzZWQgb246CisgKgorICogIGxpbnV4L2FtaWdhL2NvbmZpZy5jCisgKgorICogIENvcHlyaWdodCAoQykgMTk5MyBIYW1pc2ggTWFjZG9uYWxkCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgUkVBRE1FLmxlZ2FsIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgorI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL3J0Yy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL212bWUxNnhody5oPgorCitleHRlcm4gdF9iZGlkIG12bWVfYmRpZDsKKworc3RhdGljIE1LNDhUMDhwdHJfdCB2b2xhdGlsZSBydGMgPSAoTUs0OFQwOHB0cl90KU1WTUVfUlRDX0JBU0U7CisKK2V4dGVybiBpcnFyZXR1cm5fdCBtdm1lMTZ4X3Byb2Nlc3NfaW50IChpbnQgbGV2ZWwsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIG12bWUxNnhfaW5pdF9JUlEgKHZvaWQpOworZXh0ZXJuIHZvaWQgbXZtZTE2eF9mcmVlX2lycSAodW5zaWduZWQgaW50LCB2b2lkICopOworZXh0ZXJuIGludCBzaG93X212bWUxNnhfaW50ZXJydXB0cyAoc3RydWN0IHNlcV9maWxlICosIHZvaWQgKik7CitleHRlcm4gdm9pZCBtdm1lMTZ4X2VuYWJsZV9pcnEgKHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBtdm1lMTZ4X2Rpc2FibGVfaXJxICh1bnNpZ25lZCBpbnQpOworc3RhdGljIHZvaWQgbXZtZTE2eF9nZXRfbW9kZWwoY2hhciAqbW9kZWwpOworc3RhdGljIGludCAgbXZtZTE2eF9nZXRfaGFyZHdhcmVfbGlzdChjaGFyICpidWZmZXIpOworZXh0ZXJuIGludCAgbXZtZTE2eF9yZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKTsKK2V4dGVybiB2b2lkIG12bWUxNnhfc2NoZWRfaW5pdChpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtdm1lMTZ4X2dldHRpbWVvZmZzZXQgKHZvaWQpOworZXh0ZXJuIGludCBtdm1lMTZ4X2h3Y2xrIChpbnQsIHN0cnVjdCBydGNfdGltZSAqKTsKK2V4dGVybiBpbnQgbXZtZTE2eF9zZXRfY2xvY2tfbW1zcyAodW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBtdm1lMTZ4X3Jlc2V0ICh2b2lkKTsKK2V4dGVybiB2b2lkIG12bWUxNnhfd2FpdGJ1dCh2b2lkKTsKKworaW50IGJjZDJpbnQgKHVuc2lnbmVkIGNoYXIgYik7CisKKy8qIFNhdmUgdGljayBoYW5kbGVyIHJvdXRpbmUgcG9pbnRlciwgd2lsbCBwb2ludCB0byBkb190aW1lcigpIGluCisgKiBrZXJuZWwvc2NoZWQuYywgY2FsbGVkIHZpYSBtdm1lMTZ4X3Byb2Nlc3NfaW50KCkgKi8KKworc3RhdGljIGlycXJldHVybl90ICgqdGlja19oYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisKKwordW5zaWduZWQgc2hvcnQgbXZtZTE2eF9jb25maWc7CisKKworaW50IG12bWUxNnhfcGFyc2VfYm9vdGluZm8oY29uc3Qgc3RydWN0IGJpX3JlY29yZCAqYmkpCit7CisJaWYgKGJpLT50YWcgPT0gQklfVk1FX1RZUEUgfHwgYmktPnRhZyA9PSBCSV9WTUVfQlJESU5GTykKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKwordm9pZCBtdm1lMTZ4X3Jlc2V0KHZvaWQpCit7CisJcHJpbnRrICgiXHJcblxuQ2FsbGVkIG12bWUxNnhfcmVzZXRcclxuIgorCQkJIlxyXHJcclxyXHJcclxyXHJcclxyXHJcclxyXHJcclxyXHJcciIpOworCS8qIFRoZSBzdHJpbmcgb2YgcmV0dXJucyBpcyB0byBkZWxheSB0aGUgcmVzZXQgdW50aWwgdGhlIHdob2xlCisJICogbWVzc2FnZSBpcyBvdXRwdXQuICBBc3NlcnQgcmVzZXQgYml0IGluIEdDU1IgKi8KKwkqKHZvbGF0aWxlIGNoYXIgKikweGZmZjQwMTA3ID0gMHg4MDsKK30KKworc3RhdGljIHZvaWQgbXZtZTE2eF9nZXRfbW9kZWwoY2hhciAqbW9kZWwpCit7CisgICAgcF9iZGlkIHAgPSAmbXZtZV9iZGlkOworICAgIGNoYXIgc3VmWzRdOworCisgICAgc3VmWzFdID0gcC0+YnJkc3VmZml4WzBdOworICAgIHN1ZlsyXSA9IHAtPmJyZHN1ZmZpeFsxXTsKKyAgICBzdWZbM10gPSAnXDAnOworICAgIHN1ZlswXSA9IHN1ZlsxXSA/ICctJyA6ICdcMCc7CisKKyAgICBzcHJpbnRmKG1vZGVsLCAiTW90b3JvbGEgTVZNRSV4JXMiLCBwLT5icmRubywgc3VmKTsKK30KKworCitzdGF0aWMgaW50IG12bWUxNnhfZ2V0X2hhcmR3YXJlX2xpc3QoY2hhciAqYnVmZmVyKQoreworICAgIHBfYmRpZCBwID0gJm12bWVfYmRpZDsKKyAgICBpbnQgbGVuID0gMDsKKworICAgIGlmIChwLT5icmRubyA9PSAweDAxNjIgfHwgcC0+YnJkbm8gPT0gMHgwMTcyKQorICAgIHsKKwl1bnNpZ25lZCBjaGFyIHJldiA9ICoodW5zaWduZWQgY2hhciAqKU1WTUUxNjJfVkVSU0lPTl9SRUc7CisKKwlsZW4gKz0gc3ByaW50ZiAoYnVmZmVyK2xlbiwgIlZNRWNoaXAyICAgICAgICAlc3ByZXNlbnRcbiIsCisJCQlyZXYgJiBNVk1FMTZ4X0NPTkZJR19OT19WTUVDSElQMiA/ICJOT1QgIiA6ICIiKTsKKwlsZW4gKz0gc3ByaW50ZiAoYnVmZmVyK2xlbiwgIlNDU0kgaW50ZXJmYWNlICAlc3ByZXNlbnRcbiIsCisJCQlyZXYgJiBNVk1FMTZ4X0NPTkZJR19OT19TQ1NJQ0hJUCA/ICJOT1QgIiA6ICIiKTsKKwlsZW4gKz0gc3ByaW50ZiAoYnVmZmVyK2xlbiwgIkV0aGVybmV0IGkvZiAgICAlc3ByZXNlbnRcbiIsCisJCQlyZXYgJiBNVk1FMTZ4X0NPTkZJR19OT19FVEhFUk5FVCA/ICJOT1QgIiA6ICIiKTsKKyAgICB9CisgICAgZWxzZQorCSpidWZmZXIgPSAnXDAnOworCisgICAgcmV0dXJuIChsZW4pOworfQorCisKKyNkZWZpbmUgcGNjMmNoaXAJKCh2b2xhdGlsZSB1X2NoYXIgKikweGZmZjQyMDAwKQorI2RlZmluZSBQY2NTQ0NNSUNSCTB4MWQKKyNkZWZpbmUgUGNjU0NDVElDUgkweDFlCisjZGVmaW5lIFBjY1NDQ1JJQ1IJMHgxZgorCit2b2lkIF9faW5pdCBjb25maWdfbXZtZTE2eCh2b2lkKQoreworICAgIHBfYmRpZCBwID0gJm12bWVfYmRpZDsKKyAgICBjaGFyIGlkWzQwXTsKKworICAgIG1hY2hfbWF4X2RtYV9hZGRyZXNzID0gMHhmZmZmZmZmZjsKKyAgICBtYWNoX3NjaGVkX2luaXQgICAgICA9IG12bWUxNnhfc2NoZWRfaW5pdDsKKyAgICBtYWNoX2luaXRfSVJRICAgICAgICA9IG12bWUxNnhfaW5pdF9JUlE7CisgICAgbWFjaF9nZXR0aW1lb2Zmc2V0ICAgPSBtdm1lMTZ4X2dldHRpbWVvZmZzZXQ7CisgICAgbWFjaF9od2NsayAgICAgICAgICAgPSBtdm1lMTZ4X2h3Y2xrOworICAgIG1hY2hfc2V0X2Nsb2NrX21tc3MJID0gbXZtZTE2eF9zZXRfY2xvY2tfbW1zczsKKyAgICBtYWNoX3Jlc2V0CQkgPSBtdm1lMTZ4X3Jlc2V0OworICAgIG1hY2hfZnJlZV9pcnEJID0gbXZtZTE2eF9mcmVlX2lycTsKKyAgICBtYWNoX3Byb2Nlc3NfaW50CSA9IG12bWUxNnhfcHJvY2Vzc19pbnQ7CisgICAgbWFjaF9nZXRfaXJxX2xpc3QJID0gc2hvd19tdm1lMTZ4X2ludGVycnVwdHM7CisgICAgbWFjaF9yZXF1ZXN0X2lycQkgPSBtdm1lMTZ4X3JlcXVlc3RfaXJxOworICAgIGVuYWJsZV9pcnEgICAgICAgICAgID0gbXZtZTE2eF9lbmFibGVfaXJxOworICAgIGRpc2FibGVfaXJxICAgICAgICAgID0gbXZtZTE2eF9kaXNhYmxlX2lycTsKKyAgICBtYWNoX2dldF9tb2RlbCAgICAgICA9IG12bWUxNnhfZ2V0X21vZGVsOworICAgIG1hY2hfZ2V0X2hhcmR3YXJlX2xpc3QgPSBtdm1lMTZ4X2dldF9oYXJkd2FyZV9saXN0OworCisgICAgLyogUmVwb3J0IGJvYXJkIHJldmlzaW9uICovCisKKyAgICBpZiAoc3RybmNtcCgiQkRJRCIsIHAtPmJkaWQsIDQpKQorICAgIHsKKwlwcmludGsgKCJcblxuQnVnIGNhbGwgLkJSRF9JRCByZXR1cm5lZCBnYXJiYWdlIC0gZ2l2aW5nIHVwXG5cbiIpOworCXdoaWxlICgxKQorCQk7CisgICAgfQorICAgIC8qIEJvYXJkIHR5cGUgaXMgb25seSBzZXQgYnkgbmV3ZXIgdmVyc2lvbnMgb2Ygdm1lbGlsby90ZnRwbGlsbyAqLworICAgIGlmICh2bWVfYnJkdHlwZSA9PSAwKQorCXZtZV9icmR0eXBlID0gcC0+YnJkbm87CisKKyAgICBtdm1lMTZ4X2dldF9tb2RlbChpZCk7CisgICAgcHJpbnRrICgiXG5CUkRfSUQ6ICVzICAgQlVHICV4LiV4ICUwMngvJTAyeC8lMDJ4XG4iLCBpZCwgcC0+cmV2Pj40LAorCQkJCQlwLT5yZXYmMHhmLCBwLT55ciwgcC0+bXRoLCBwLT5kYXkpOworICAgIGlmIChwLT5icmRubyA9PSAweDAxNjIgfHwgcC0+YnJkbm8gPT0gMHgxNzIpCisgICAgeworCXVuc2lnbmVkIGNoYXIgcmV2ID0gKih1bnNpZ25lZCBjaGFyICopTVZNRTE2Ml9WRVJTSU9OX1JFRzsKKworCW12bWUxNnhfY29uZmlnID0gcmV2IHwgTVZNRTE2eF9DT05GSUdfR09UX1NDQ0E7CisKKwlwcmludGsgKCJNVk1FJXggSGFyZHdhcmUgc3RhdHVzOlxuIiwgcC0+YnJkbm8pOworCXByaW50ayAoIiAgICBDUFUgVHlwZSAgICAgICAgICAgNjglczA0MFxuIiwKKwkJCXJldiAmIE1WTUUxNnhfQ09ORklHX0dPVF9GUFUgPyAiIiA6ICJMQyIpOworCXByaW50ayAoIiAgICBDUFUgY2xvY2sgICAgICAgICAgJWRNSHpcbiIsCisJCQlyZXYgJiBNVk1FMTZ4X0NPTkZJR19TUEVFRF8zMiA/IDMyIDogMjUpOworCXByaW50ayAoIiAgICBWTUVjaGlwMiAgICAgICAgICAgJXNwcmVzZW50XG4iLAorCQkJcmV2ICYgTVZNRTE2eF9DT05GSUdfTk9fVk1FQ0hJUDIgPyAiTk9UICIgOiAiIik7CisJcHJpbnRrICgiICAgIFNDU0kgaW50ZXJmYWNlICAgICAlc3ByZXNlbnRcbiIsCisJCQlyZXYgJiBNVk1FMTZ4X0NPTkZJR19OT19TQ1NJQ0hJUCA/ICJOT1QgIiA6ICIiKTsKKwlwcmludGsgKCIgICAgRXRoZXJuZXQgaW50ZXJmYWNlICVzcHJlc2VudFxuIiwKKwkJCXJldiAmIE1WTUUxNnhfQ09ORklHX05PX0VUSEVSTkVUID8gIk5PVCAiIDogIiIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCW12bWUxNnhfY29uZmlnID0gTVZNRTE2eF9DT05GSUdfR09UX0xQIHwgTVZNRTE2eF9DT05GSUdfR09UX0NEMjQwMTsKKworCS8qIERvbnQgYWxsb3cgYW55IGludGVycnVwdHMgZnJvbSB0aGUgQ0QyNDAxIHVudGlsIHRoZSBpbnRlcnJ1cHQgKi8KKwkvKiBoYW5kbGVycyBhcmUgaW5zdGFsbGVkCQkJCQkgKi8KKworCXBjYzJjaGlwW1BjY1NDQ01JQ1JdID0gMHgxMDsKKwlwY2MyY2hpcFtQY2NTQ0NUSUNSXSA9IDB4MTA7CisJcGNjMmNoaXBbUGNjU0NDUklDUl0gPSAweDEwOworICAgIH0KK30KKworc3RhdGljIGlycXJldHVybl90IG12bWUxNnhfYWJvcnRfaW50IChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwlwX2JkaWQgcCA9ICZtdm1lX2JkaWQ7CisJdW5zaWduZWQgbG9uZyAqbmV3ID0gKHVuc2lnbmVkIGxvbmcgKil2ZWN0b3JzOworCXVuc2lnbmVkIGxvbmcgKm9sZCA9ICh1bnNpZ25lZCBsb25nICopMHhmZmUwMDAwMDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHVjLCAqdWNwOworCisJaWYgKHAtPmJyZG5vID09IDB4MDE2MiB8fCBwLT5icmRubyA9PSAweDE3MikKKwl7CisJCXVjcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHhmZmY0MjA0MzsKKwkJdWMgPSAqdWNwIHwgODsKKwkJKnVjcCA9IHVjOworCX0KKwllbHNlCisJeworCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikweGZmZjQwMDc0ID0gMHg0MDAwMDAwMDsKKwl9CisJKihuZXcrNCkgPSAqKG9sZCs0KTsJCS8qIElsbGVnYWwgaW5zdHJ1Y3Rpb24gKi8KKwkqKG5ldys5KSA9ICoob2xkKzkpOwkJLyogVHJhY2UgKi8KKwkqKG5ldys0NykgPSAqKG9sZCs0Nyk7CQkvKiBUcmFwICMxNSAqLworCisJaWYgKHAtPmJyZG5vID09IDB4MDE2MiB8fCBwLT5icmRubyA9PSAweDE3MikKKwkJKihuZXcrMHg1ZSkgPSAqKG9sZCsweDVlKTsJLyogQUJPUlQgc3dpdGNoICovCisJZWxzZQorCQkqKG5ldysweDZlKSA9ICoob2xkKzB4NmUpOwkvKiBBQk9SVCBzd2l0Y2ggKi8KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdm1lMTZ4X3RpbWVyX2ludCAoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHhmZmY0MjAxYiB8PSA4OworICAgIHJldHVybiB0aWNrX2hhbmRsZXIoaXJxLCBkZXZfaWQsIGZwKTsKK30KKwordm9pZCBtdm1lMTZ4X3NjaGVkX2luaXQgKGlycXJldHVybl90ICgqdGltZXJfcm91dGluZSkoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopKQoreworICAgIHBfYmRpZCBwID0gJm12bWVfYmRpZDsKKyAgICBpbnQgaXJxOworCisgICAgdGlja19oYW5kbGVyID0gdGltZXJfcm91dGluZTsKKyAgICAvKiBVc2luZyBQQ0NjaGlwMiBvciBNQzIgY2hpcCB0aWNrIHRpbWVyIDEgKi8KKyAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikweGZmZjQyMDA4ID0gMDsKKyAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikweGZmZjQyMDA0ID0gMTAwMDA7CS8qIDEwbXMgKi8KKyAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikweGZmZjQyMDE3IHw9IDM7CisgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHhmZmY0MjAxYiA9IDB4MTY7CisgICAgaWYgKHJlcXVlc3RfaXJxKE1WTUUxNnhfSVJRX1RJTUVSLCBtdm1lMTZ4X3RpbWVyX2ludCwgMCwKKwkJCQkidGltZXIiLCBtdm1lMTZ4X3RpbWVyX2ludCkpCisJcGFuaWMgKCJDb3VsZG4ndCByZWdpc3RlciB0aW1lciBpbnQiKTsKKworICAgIGlmIChwLT5icmRubyA9PSAweDAxNjIgfHwgcC0+YnJkbm8gPT0gMHgxNzIpCisJaXJxID0gTVZNRTE2Ml9JUlFfQUJPUlQ7CisgICAgZWxzZQorICAgICAgICBpcnEgPSBNVk1FMTY3X0lSUV9BQk9SVDsKKyAgICBpZiAocmVxdWVzdF9pcnEoaXJxLCBtdm1lMTZ4X2Fib3J0X2ludCwgMCwKKwkJCQkiYWJvcnQiLCBtdm1lMTZ4X2Fib3J0X2ludCkpCisJcGFuaWMgKCJDb3VsZG4ndCByZWdpc3RlciBhYm9ydCBpbnQiKTsKK30KKworCisvKiBUaGlzIGlzIGFsd2F5cyBleGVjdXRlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuICAqLwordW5zaWduZWQgbG9uZyBtdm1lMTZ4X2dldHRpbWVvZmZzZXQgKHZvaWQpCit7CisgICAgcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikweGZmZjQyMDA4KTsKK30KKworaW50IGJjZDJpbnQgKHVuc2lnbmVkIGNoYXIgYikKK3sKKwlyZXR1cm4gKChiPj40KSoxMCArIChiJjE1KSk7Cit9CisKK2ludCBtdm1lMTZ4X2h3Y2xrKGludCBvcCwgc3RydWN0IHJ0Y190aW1lICp0KQoreworI3dhcm5pbmcgY2hlY2sgbWUhCisJaWYgKCFvcCkgeworCQlydGMtPmN0cmwgPSBSVENfUkVBRDsKKwkJdC0+dG1feWVhciA9IGJjZDJpbnQgKHJ0Yy0+YmNkX3llYXIpOworCQl0LT50bV9tb24gID0gYmNkMmludCAocnRjLT5iY2RfbXRoKTsKKwkJdC0+dG1fbWRheSA9IGJjZDJpbnQgKHJ0Yy0+YmNkX2RvbSk7CisJCXQtPnRtX2hvdXIgPSBiY2QyaW50IChydGMtPmJjZF9ocik7CisJCXQtPnRtX21pbiAgPSBiY2QyaW50IChydGMtPmJjZF9taW4pOworCQl0LT50bV9zZWMgID0gYmNkMmludCAocnRjLT5iY2Rfc2VjKTsKKwkJcnRjLT5jdHJsID0gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBtdm1lMTZ4X3NldF9jbG9ja19tbXNzICh1bnNpZ25lZCBsb25nIG5vd3RpbWUpCit7CisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tdm1lMTZ4L212bWUxNnhfa3N5bXMuYyBiL2FyY2gvbTY4ay9tdm1lMTZ4L212bWUxNnhfa3N5bXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YThhMzYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL212bWUxNngvbXZtZTE2eF9rc3ltcy5jCkBAIC0wLDAgKzEsNiBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9tdm1lMTZ4aHcuaD4KKworRVhQT1JUX1NZTUJPTChtdm1lMTZ4X2NvbmZpZyk7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbXZtZTE2eC9ydGMuYyBiL2FyY2gvbTY4ay9tdm1lMTZ4L3J0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMjQyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvbXZtZTE2eC9ydGMuYwpAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqCVJlYWwgVGltZSBDbG9jayBpbnRlcmZhY2UgZm9yIExpbnV4IG9uIHRoZSBNVk1FMTZ4CisgKgorICogQmFzZWQgb24gdGhlIFBDIGRyaXZlciBieSBQYXVsIEdvcnRtYWtlci4KKyAqLworCisjZGVmaW5lIFJUQ19WRVJTSU9OCQkiMS4wMCIKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgkvKiBGb3Igc3RydWN0IHJ0Y190aW1lIGFuZCBpb2N0bHMsIGV0YyAqLworI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8YXNtL212bWUxNnhody5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisKKy8qCisgKglXZSBzcG9uZ2UgYSBtaW5vciBvZmYgb2YgdGhlIG1pc2MgbWFqb3IuIE5vIG5lZWQgc2x1cnBpbmcKKyAqCXVwIGFub3RoZXIgdmFsdWFibGUgbWFqb3IgZGV2IG51bWJlciBmb3IgdGhpcy4gSWYgeW91IGFkZAorICoJYW4gaW9jdGwsIG1ha2Ugc3VyZSB5b3UgZG9uJ3QgY29uZmxpY3Qgd2l0aCBTUEFSQydzIFJUQworICoJaW9jdGxzLgorICovCisKKyNkZWZpbmUgQkNEMkJJTih2YWwpICgoKHZhbCkmMTUpICsgKCh2YWwpPj40KSoxMCkKKyNkZWZpbmUgQklOMkJDRCh2YWwpICgoKCh2YWwpLzEwKTw8NCkgKyAodmFsKSUxMCkKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGF5c19pbl9tb1tdID0KK3swLCAzMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxfTsKKworc3RhdGljIGF0b21pY190IHJ0Y19yZWFkeSA9IEFUT01JQ19JTklUKDEpOworCitzdGF0aWMgaW50IHJ0Y19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJICAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl2b2xhdGlsZSBNSzQ4VDA4cHRyX3QgcnRjID0gKE1LNDhUMDhwdHJfdClNVk1FX1JUQ19CQVNFOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHJ0Y190aW1lIHd0aW1lOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFJUQ19SRF9USU1FOgkvKiBSZWFkIHRoZSB0aW1lL2RhdGUgZnJvbSBSVEMJKi8KKwl7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJLyogRW5zdXJlIGNsb2NrIGFuZCByZWFsLXRpbWUtbW9kZS1yZWdpc3RlciBhcmUgYWNjZXNzaWJsZSAqLworCQlydGMtPmN0cmwgPSBSVENfUkVBRDsKKwkJbWVtc2V0KCZ3dGltZSwgMCwgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpOworCQl3dGltZS50bV9zZWMgPSAgQkNEMkJJTihydGMtPmJjZF9zZWMpOworCQl3dGltZS50bV9taW4gPSAgQkNEMkJJTihydGMtPmJjZF9taW4pOworCQl3dGltZS50bV9ob3VyID0gQkNEMkJJTihydGMtPmJjZF9ocik7CisJCXd0aW1lLnRtX21kYXkgPSAgQkNEMkJJTihydGMtPmJjZF9kb20pOworCQl3dGltZS50bV9tb24gPSAgQkNEMkJJTihydGMtPmJjZF9tdGgpLTE7CisJCXd0aW1lLnRtX3llYXIgPSBCQ0QyQklOKHJ0Yy0+YmNkX3llYXIpOworCQlpZiAod3RpbWUudG1feWVhciA8IDcwKQorCQkJd3RpbWUudG1feWVhciArPSAxMDA7CisJCXd0aW1lLnRtX3dkYXkgPSBCQ0QyQklOKHJ0Yy0+YmNkX2RvdyktMTsKKwkJcnRjLT5jdHJsID0gMDsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlyZXR1cm4gY29weV90b191c2VyKCh2b2lkICopYXJnLCAmd3RpbWUsIHNpemVvZiB3dGltZSkgPworCQkJCQkJCQktRUZBVUxUIDogMDsKKwl9CisJY2FzZSBSVENfU0VUX1RJTUU6CS8qIFNldCB0aGUgUlRDICovCisJeworCQlzdHJ1Y3QgcnRjX3RpbWUgcnRjX3RtOworCQl1bnNpZ25lZCBjaGFyIG1vbiwgZGF5LCBocnMsIG1pbiwgc2VjLCBsZWFwX3lyOworCQl1bnNpZ25lZCBpbnQgeXJzOworCisJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJCXJldHVybiAtRUFDQ0VTOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmcnRjX3RtLCAoc3RydWN0IHJ0Y190aW1lKilhcmcsCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBydGNfdGltZSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJeXJzID0gcnRjX3RtLnRtX3llYXI7CisJCWlmICh5cnMgPCAxOTAwKQorCQkJeXJzICs9IDE5MDA7CisJCW1vbiA9IHJ0Y190bS50bV9tb24gKyAxOyAgIC8qIHRtX21vbiBzdGFydHMgYXQgemVybyAqLworCQlkYXkgPSBydGNfdG0udG1fbWRheTsKKwkJaHJzID0gcnRjX3RtLnRtX2hvdXI7CisJCW1pbiA9IHJ0Y190bS50bV9taW47CisJCXNlYyA9IHJ0Y190bS50bV9zZWM7CisKKwkJbGVhcF95ciA9ICgoISh5cnMgJSA0KSAmJiAoeXJzICUgMTAwKSkgfHwgISh5cnMgJSA0MDApKTsKKworCQlpZiAoKG1vbiA+IDEyKSB8fCAoZGF5ID09IDApKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGRheSA+IChkYXlzX2luX21vW21vbl0gKyAoKG1vbiA9PSAyKSAmJiBsZWFwX3lyKSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoKGhycyA+PSAyNCkgfHwgKG1pbiA+PSA2MCkgfHwgKHNlYyA+PSA2MCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoeXJzID49IDIwNzApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCXJ0Yy0+Y3RybCAgICAgPSBSVENfV1JJVEU7CisKKwkJcnRjLT5iY2Rfc2VjICA9IEJJTjJCQ0Qoc2VjKTsKKwkJcnRjLT5iY2RfbWluICA9IEJJTjJCQ0QobWluKTsKKwkJcnRjLT5iY2RfaHIgICA9IEJJTjJCQ0QoaHJzKTsKKwkJcnRjLT5iY2RfZG9tICA9IEJJTjJCQ0QoZGF5KTsKKwkJcnRjLT5iY2RfbXRoICA9IEJJTjJCQ0QobW9uKTsKKwkJcnRjLT5iY2RfeWVhciA9IEJJTjJCQ0QoeXJzJTEwMCk7CisKKwkJcnRjLT5jdHJsICAgICA9IDA7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworLyoKKyAqCVdlIGVuZm9yY2Ugb25seSBvbmUgdXNlciBhdCBhIHRpbWUgaGVyZSB3aXRoIHRoZSBvcGVuL2Nsb3NlLgorICoJQWxzbyBjbGVhciB0aGUgcHJldmlvdXMgaW50ZXJydXB0IGRhdGEgb24gYW4gb3BlbiwgYW5kIGNsZWFuCisgKgl1cCB0aGluZ3Mgb24gYSBjbG9zZS4KKyAqLworCitzdGF0aWMgaW50IHJ0Y19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmKCAhYXRvbWljX2RlY19hbmRfdGVzdCgmcnRjX3JlYWR5KSApCisJeworCQlhdG9taWNfaW5jKCAmcnRjX3JlYWR5ICk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRjX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJYXRvbWljX2luYyggJnJ0Y19yZWFkeSApOworCXJldHVybiAwOworfQorCisvKgorICoJVGhlIHZhcmlvdXMgZmlsZSBvcGVyYXRpb25zIHdlIHN1cHBvcnQuCisgKi8KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcnRjX2ZvcHMgPSB7CisJLmlvY3RsID0JcnRjX2lvY3RsLAorCS5vcGVuID0JCXJ0Y19vcGVuLAorCS5yZWxlYXNlID0JcnRjX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgcnRjX2Rldj0KK3sKKwkubWlub3IgPQlSVENfTUlOT1IsCisJLm5hbWUgPQkJInJ0YyIsCisJLmZvcHMgPQkJJnJ0Y19mb3BzCit9OworCitpbnQgX19pbml0IHJ0Y19NSzQ4VDA4X2luaXQodm9pZCkKK3sKKwlpZiAoIU1BQ0hfSVNfTVZNRTE2eCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwcmludGsoS0VSTl9JTkZPICJNSzQ4VDA4IFJlYWwgVGltZSBDbG9jayBEcml2ZXIgdiVzXG4iLCBSVENfVkVSU0lPTik7CisJcmV0dXJuIG1pc2NfcmVnaXN0ZXIoJnJ0Y19kZXYpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL202OGsvcTQwL01ha2VmaWxlIGIvYXJjaC9tNjhrL3E0MC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2ViNDI3OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9xNDAvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACisjCisjIE1ha2VmaWxlIGZvciBMaW51eCBhcmNoL202OGsvcTQwIHNvdXJjZSBkaXJlY3RvcnkKKyMKKworb2JqLXkJCTo9IGNvbmZpZy5vIHE0MGludHMubwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3E0MC9SRUFETUUgYi9hcmNoL202OGsvcTQwL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmRiZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL3E0MC9SRUFETUUKQEAgLTAsMCArMSwxMzggQEAKK0xpbnV4IGZvciB0aGUgUTQwCis9PT09PT09PT09PT09PT09PQorCitZb3UgbWF5IHRyeSBodHRwOi8vd3d3Lmdlb2NpdGllcy5jb20vU2lsaWNvblZhbGxleS9CYXkvMjYwMi8gZm9yCitzb21lIHVwIHRvIGRhdGUgaW5mb3JtYXRpb24uIEJvb3RlciBhbmQgb3RoZXIgdG9vbHMgd2lsbCBiZSBhbHNvCithdmFpbGFibGUgZnJvbSB0aGlzIHBsYWNlIG9yIGZ0cC51bmktZXJsYW5nZW4uZGUvbGludXgvNjgweDAvcTQwLworYW5kIG1pcnJvcnMuCisKK0hpbnRzIHRvIGRvY3VtZW50YXRpb24gdXN1YWxseSByZWZlciB0byB0aGUgbGludXggc291cmNlIHRyZWUgaW4KKy91c3Ivc3JjL2xpbnV4L0RvY3VtZW50YXRpb24gdW5sZXNzIFVSTCBnaXZlbi4KKworSXQgc2VlbXMgSVJRIHVubWFza2luZyBjYW4ndCBiZSBzYWZlbHkgZG9uZSBvbiBhIFE0MC4gSVJRIHByb2JpbmcKK2lzIG5vdCBpbXBsZW1lbnRlZCAtIGRvIG5vdCB0cnkgaXQhIChTZWUgYmVsb3cpCisKK0ZvciBhIGxpc3Qgb2Yga2VybmVsIGNvbW1hbmQtbGluZSBvcHRpb25zIHJlYWQgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZQorcGFydGljdWxhciBkZXZpY2UgZHJpdmVycy4KKworVGhlIGZsb3BweSBpbXBvc2VzIGEgdmVyeSBoaWdoIGludGVycnVwdCBsb2FkIG9uIHRoZSBDUFUsIGFwcHJveCAzMEsvcy4KK1doZW4gc29tZXRoaW5nIGJsb2NrcyBpbnRlcnJ1cHRzIChIRCkgaXQgd2lsbCBsb3NlIHNvbWUgb2YgdGhlbSwgc28gZmFyCit0aGlzIGlzIG5vdCBrbm93biB0byBoYXZlIGNhdXNlZCBhbnkgZGF0YSBsb3NzLiBPbiBoaWdobHkgbG9hZGVkIHN5c3RlbXMKK2l0IGNhbiBtYWtlIHRoZSBmbG9wcHkgdmVyeSBzbG93IG9yIHByYWN0aWNhbGx5IHN0b3AuIE90aGVyIFE0MCBPUycgc2ltcGx5Citwb2xsIHRoZSBmbG9wcHkgZm9yIHRoaXMgcmVhc29uIC0gc29tZXRoaW5nIHRoYXQgY2FuJ3QgYmUgZG9uZSBpbiBMaW51eC4KK09ubHkgcG9zc2libGUgY3VyZSBpcyBnZXR0aW5nIGEgODIwNzIgY29udHJvbGxlciB3aXRoIGZpZm8gaW5zdGVhZCBvZgordGhlIDgyNzJBLgorCitkcml2ZXJzIHVzZWQgYnkgdGhlIFE0MCwgYXBhcnQgZnJvbSB0aGUgdmVyeSBvYnZpb3VzIChjb25zb2xlIGV0Yy4pOgorCWRyaXZlcnMvY2hhci9xNDBfa2V5Yi5jCQkjIHVzZSBQQyBrZXltYXBzIGZvciBuYXRpb25hbCBrZXlib2FyZHMKKwkJICAgICBzZXJpYWwuYwkJIyBub3JtYWwgUEMgZHJpdmVyIC0gYW55IHNwZWVkCisJICAgICAgICAgICAgIGxwLmMJCSMgcHJpbnRlciBkcml2ZXIKKwkJICAgICBnZW5ydGMuYwkJIyBSVEMKKwkJY2hhci9qb3lzdGljay8qCQkjIG1vc3Qgb2YgdGhpcyBzaG91bGQgd29yaywgbm90CisJCQkJICAgICAgICAjIGluIGRlZmF1bHQgY29uZmlnLmluCisJICAgICAgICBibG9jay9xNDBpZGUuYwkJIyBzdGFydHVwIGZvciBpZGUKKwkJICAgICAgaWRlKgkJIyBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0CisJCSAgICAgIGZsb3BweS5jCQkjIG5vcm1hbCBQQyBkcml2ZXIsIERNQSBlbXUgaW4gYXNtL2Zsb3BweS5oCisJCQkJCSMgYW5kIGFyY2gvbTY4ay9rZXJuZWwvZW50cnkuUworCQkJCQkjIHNlZSBkcml2ZXJzL2Jsb2NrL1JFQURNRS5mZAorCQluZXQvbmUuYworCQl2aWRlby9xNDBmYi5jCisJCXBhcnBvcnQvKgorCQlzb3VuZC9kbWFzb3VuZF9jb3JlLmMKKwkJICAgICAgZG1hc291bmRfcTQwLmMKKworVmFyaW91cyBvdGhlciBQQyBkcml2ZXJzIGNhbiBiZSBlbmFibGVkIHNpbXBseSBieSBhZGRpbmcgdGhlbSB0bworYXJjaC9tNjhrL2NvbmZpZy5pbiwgZXNwZWNpYWxseSA4IGJpdCBkZXZpY2VzIHNob3VsZCBiZSB3aXRob3V0IGFueQorcHJvYmxlbXMuIEZvciBjYXJkcyB1c2luZyAxNmJpdCBpby9tZW0gbW9yZSBjYXJlIGlzIHJlcXVpcmVkLCBsaWtlCitjaGVja2luZyBieXRlIG9yZGVyIGlzc3VlcywgaGFja2luZyBtZW1jcHlfKl9pbyBldGMuCisKKworRGVidWdnaW5nCis9PT09PT09PT0KKworVXBvbiBzdGFydHVwIHRoZSBrZXJuZWwgd2lsbCB1c3VhbGx5IG91dHB1dCAiQUJDUUdISUoiIGludG8gdGhlIFNSQU0sCitwcmVjZWRlZCBieSB0aGUgYm9vdGVyIHNpZ25hdHVyZS4gVGhpcyBpcyBhIHRyYWNlIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcKK3dlbnQgd3JvbmcgZHVyaW5nIGVhcmxpZXN0IHNldHVwIHN0YWdlcyBvZiBoZWFkLlMuCisqKkNoYW5nZWQqKiB0byBwcmVzZXJ2ZSBTUkFNIGNvbnRlbnRzIGJ5IGRlZmF1bHQsIHRoaXMgaXMgb25seSBkb25lIHdoZW4KK3JlcXVlc3RlZCAtIFNSQU0gbXVzdCBzdGFydCB3aXRoICclTFgkJyBzaWduYXR1cmUgdG8gZG8gdGhpcy4gJy1kJyBvcHRpb24KK3RvICdseHgnIGxvYWRlciBlbmFibGVzIHRoaXMuCisKK1NSQU0gY2FuIGFsc28gYmUgdXNlZCBhcyBhZGRpdGlvbmFsIGNvbnNvbGUgZGV2aWNlLCB1c2UgZGVidWc9bWVtLgorVGhpcyB3aWxsIHNhdmUga2VybmVsIHN0YXJ0dXAgbXNncyBpbnRvIFNSQU0sIHRoZSBzY3JlZW4gd2lsbCBkaXNwbGF5Citvbmx5IHRoZSBwZW5ndWluIC0gYW5kIHNoZWxsIHByb21wdCBpZiBpdCBnZXRzIHRoYXQgZmFyLi4KK1VuZm9ydHVuYXRlbHkgb25seSAyMDAwIGJ5dGVzIGFyZSBhdmFpbGFibGUuCisKK1NlcmlhbCBjb25zb2xlIHdvcmtzIGFuZCBjYW4gYWxzbyBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcsIHNlZSBsb2FkZXJfdHh0CisKK01vc3QgcHJvYmxlbXMgc2VlbSB0byBiZSBjYXVzZWQgYnkgZmF3bHR5IG9yIGJhZGx5IGNvbmZpZ3VyZWQgaW8tY2FyZHMgb3IKK2hhcmQgZHJpdmVzIGFueXdheS4KK01ha2Ugc3VyZSB0byBjb25maWd1cmUgdGhlIHBhcmFsbGVsIHBvcnQgYXMgU1BQIGFuZCByZW1vdmUgSVJRL0RNQSBqdW1wZXJzCitmb3IgZmlyc3QgdGVzdGluZy4gVGhlIFE0MCBkb2VzIG5vdCBzdXBwb3J0IERNQSBhbmQgbWF5IGhhdmUgdHJvdWJsZSB3aXRoCitwYXJhbGxlbCBwb3J0cyB2ZXJzaW9uIG9mIGludGVycnVwdHMuCisKKworUTQwIEhhcmR3YXJlIERlc2NyaXB0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBqdXN0IGFuIG92ZXJ2aWV3LCBzZWUgYXNtLW02OGsvKiBmb3IgZGV0YWlscyBhc2sgaWYgeW91IGhhdmUgYW55CitxdWVzdGlvbnMuCisKK1RoZSBRNDAgY29uc2lzdHMgb2YgYSA2ODA0MEA0MCBNSHosIDFNQiB2aWRlbyBSQU0sIHVwIHRvIDMyTUIgUkFNLCBBVC1zdHlsZQora2V5Ym9hcmQgaW50ZXJmYWNlLCAxIFByb2dyYW1tYWJsZSBMRUQsIDJ4OGJpdCBEQUNzIGFuZCB1cCB0byAxTUIgUk9NLCAxTUIKK3NoYWRvdyBST00uCitUaGUgUTYwIGhhcyBhbnkgb2YgNjgwNjAgb3IgNjhMQzA2MCBhbmQgdXAgdG8gMTI4IE1CIFJBTS4KKworTW9zdCBpbnRlcmZhY2luZyBsaWtlIGZsb3BweSwgSURFLCBzZXJpYWwgYW5kIHBhcmFsbGVsIHBvcnRzIGlzIGRvbmUgdmlhIElTQQorc2xvdHMuIFRoZSBJU0EgaW8gYW5kIG1lbSByYW5nZSBpcyBtYXBwZWQgKHNwYXJzZSZieXRlc3dhcHBlZCEpIGludG8gc2VwYXJhdGUKK3JlZ2lvbnMgb2YgdGhlIG1lbW9yeS4KK1RoZSBtYWluIGludGVycnVwdCByZWdpc3RlciBJSVJRX1JFRyB3aWxsIGluZGljYXRlIHdoZXRoZXIgYW4gSVJRIHdhcyBpbnRlcm5hbAorb3IgZnJvbSBzb21lIElTQSBkZXZpY2VzLCBFSVJRX1JFRyBjYW4gZGlzdGluZ3Vpc2ggdXAgdG8gOCBJU0EgSVJRcy4KKworVGhlIFE0MCBjdXN0b20gY2hpcCBpcyBwcm9ncmFtbWFibGUgdG8gcHJvdmlkZSAyIHBlcmlvZGljIHRpbWVyczoKKwktIDUwIG9yIDIwMCBIeiAtIGxldmVsIDIsICEhVEhJUyBDQU5UIEJFIERJU0FCTEVEISEKKwktIDEwIG9yIDIwIEtIeiAtIGxldmVsIDQsIHVzZWQgZm9yIGRtYS1zb3VuZAorCitMaW51eCB1c2VzIHRoZSAyMDAgSHogaW50ZXJydXB0IGZvciB0aW1lciBhbmQgYmVlcCBieSBkZWZhdWx0LgorCisKK0ludGVycnVwdHMKKz09PT09PT09PT0KKworcTQwIG1hc3RlciBjaGlwIGhhbmRsZXMgb25seSBhIHN1YnNldCBvZiBsZXZlbCB0cmlnZ2VyZWQgaW50ZXJydXB0cy4KKworTGludXggaGFzIHNvbWUgcmVxdWlyZW1lbnRzIHdydCBpbnRlcnJ1cHQgYXJjaGl0ZWN0dXJlLCB0aGVzZSBhcmUKK3RvIG15IGtub3dsZWRnZToKKwkoYSkgaW50ZXJydXB0IGhhbmRsZXIgbXVzdCBub3QgYmUgcmVlbnRlcmVkIGV2ZW4gd2hlbiBzdGkoKSBpcyBjYWxsZWQKKwkgICAgZnJvbSB3aXRoaW4gaGFuZGxlcgorCShiKSB3b3JraW5nIGVuYWJsZS9kaXNhYmxlX2lycQorCitMdWNraWx5IHRoZXNlIHJlcXVpcmVtZW50cyBhcmUgb25seSBpbXBvcnRhbnQgZm9yIGRyaXZlcnMgc2hhcmVkCit3aXRoIG90aGVyIGFyY2hpdGVjdHVyZXMgLSBpZGUsc2VyaWFsLHBhcmFsbGVsLCBldGhlcm5ldC4KK3E0MGludHMuYyBub3cgY29udGFpbnMgYSB0cml2aWFsIGhhY2sgZm9yIChhKSwgKGIpIGlzIG1vcmUgZGlmZmljdWx0CitiZWNhdXNlIG9ubHkgaXJxJ3MgNC0xNSBjYW4gYmUgZGlzYWJsZWQgLSBhbmQgb25seSBhbGwgb2YgdGhlbSBhdCBvbmNlLgorVGh1cyBkaXNhYmxlX2lycSgpIGNhbiBlZmZlY3RpdmVseSBibG9jayB0aGUgbWFjaGluZSBpZiB0aGUgZHJpdmVyIGdvZXMKK2FzbGVlcC4KK09uZSB0aGluZyB0byBrZWVwIGluIG1pbmQgd2hlbiBoYWNraW5nIGFyb3VuZCB0aGUgaW50ZXJydXB0IGNvZGUgaXMKK3RoYXQgdGhlcmUgaXMgbm8gd2F5IHRvIGZpbmQgb3V0IHdoaWNoIElSUSBjYXVzZWQgYSByZXF1ZXN0LCBbRUldSVJRX1JFRworZGlzcGxheXMgY3VycmVudCBzdGF0ZSBvZiB0aGUgdmFyaW91cyBJUlEgbGluZXMuCisKK0tleWJvYXJkCis9PT09PT09PQorCitxNDAgcmVjZWl2ZXMgQVQgbWFrZS9icmVhayBjb2RlcyBmcm9tIHRoZSBrZXlib2FyZCwgdGhlc2UgYXJlIHRyYW5zbGF0ZWQgdG8KK3RoZSBQQyBzY2FuY29kZXMgeDg2IExpbnV4IHVzZXMuIFNvIGJ5IHRoZW9yeSBldmVyeSBuYXRpb25hbCBrZXlib2FyZCBzaG91bGQKK3dvcmsganVzdCBieSBsb2FkaW5nIHRoZSBhcHByb3ByaWF0ZSB4ODYga2V5dGFibGUgLSBzZWUgYW55IG5hdGlvbmFsLUhPV1RPLgorCitVbmZvcnR1bmF0ZWx5IHRoZSBBVC0+UEMgdHJhbnNsYXRpb24gaXNuJ3QgcXVpdGUgdHJpdmlhbCBhbmQgZXZlbiB3b3JzZSwgbXkKK2RvY3VtZW50YXRpb24gb2YgaXQgaXMgYWJzb2x1dGVseSBtaW5pbWFsIC0gdGh1cyBzb21lIGV4b3RpYyBrZXlzIG1heSBub3QKK2JlaGF2ZSBleGFjdGx5IGFzIGV4cGVjdGVkLgorCitUaGVyZSBpcyBzdGlsbCBob3BlIHRoYXQgaXQgY2FuIGJlIGZpeGVkIGNvbXBsZXRlbHkgdGhvdWdoLiBJZiB5b3UgZW5jb3VudGVyCitwcm9ibGVtcywgZW1haWwgbWUgaWRlYWxseSB0aGlzOgorCS0gZXhhY3Qga2V5cHJlc3MvcmVsZWFzZSBzZXF1ZW5jZQorCS0gJ3Nob3drZXkgLXMnIHJ1biBvbiBxNDAsIG5vbi1YIHNlc3Npb24KKwktICdzaG93a2V5IC1zJyBydW4gb24gYSBQQywgbm9uLVggc2Vzc2lvbgorCS0gQVQgY29kZXMgYXMgZGlzcGxheWVkIGJ5IHRoZSBxNDAgZGVidWdnaW5nIFJPTQorYnR3IGlmIHRoZSBzaG93a2V5IG91dHB1dCBmcm9tIFBDIGFuZCBRNDAgZG9lc24ndCBkaWZmZXIgdGhlbiB5b3UgaGF2ZSBzb21lCitjbGFzc2ljIGNvbmZpZ3VyYXRpb24gcHJvYmxlbSAtIGRvbid0IHNlbmQgbWUgYW55dGhpbmcgaW4gdGhpcyBjYXNlCisKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9xNDAvY29uZmlnLmMgYi9hcmNoL202OGsvcTQwL2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYjYyNmJhZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9xNDAvY29uZmlnLmMKQEAgLTAsMCArMSwzNjUgQEAKKy8qCisgKiAgYXJjaC9tNjhrL3E0MC9jb25maWcuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgUmljaGFyZCBaaWRsaWNreQorICoKKyAqIG9yaWdpbmFsbHkgYmFzZWQgb246CisgKgorICogIGxpbnV4L2J2bWUvY29uZmlnLmMKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBSRUFETUUubGVnYWwgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3Z0X2tlcm4uaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9ydGMuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vcTQwX21hc3Rlci5oPgorCitleHRlcm4gdm9pZCBmbG9wcHlfc2V0dXAoY2hhciAqc3RyLCBpbnQgKmludHMpOworCitleHRlcm4gaXJxcmV0dXJuX3QgcTQwX3Byb2Nlc3NfaW50IChpbnQgbGV2ZWwsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiBpcnFyZXR1cm5fdCAoKnE0MF9kZWZhdWx0X2hhbmRsZXJbXSkgKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsgIC8qIGFkZGVkIGp1c3QgZm9yIGRlYnVnZ2luZyAqLworZXh0ZXJuIHZvaWQgcTQwX2luaXRfSVJRICh2b2lkKTsKK2V4dGVybiB2b2lkIHE0MF9mcmVlX2lycSAodW5zaWduZWQgaW50LCB2b2lkICopOworZXh0ZXJuIGludCAgc2hvd19xNDBfaW50ZXJydXB0cyAoc3RydWN0IHNlcV9maWxlICosIHZvaWQgKik7CitleHRlcm4gdm9pZCBxNDBfZW5hYmxlX2lycSAodW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIHE0MF9kaXNhYmxlX2lycSAodW5zaWduZWQgaW50KTsKK3N0YXRpYyB2b2lkIHE0MF9nZXRfbW9kZWwoY2hhciAqbW9kZWwpOworc3RhdGljIGludCAgcTQwX2dldF9oYXJkd2FyZV9saXN0KGNoYXIgKmJ1ZmZlcik7CitleHRlcm4gaW50ICBxNDBfcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGlycSwgaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCk7CitleHRlcm4gdm9pZCBxNDBfc2NoZWRfaW5pdChpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHE0MF9nZXR0aW1lb2Zmc2V0ICh2b2lkKTsKK2V4dGVybiBpbnQgcTQwX2h3Y2xrIChpbnQsIHN0cnVjdCBydGNfdGltZSAqKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgcTQwX2dldF9zcyAodm9pZCk7CitleHRlcm4gaW50IHE0MF9zZXRfY2xvY2tfbW1zcyAodW5zaWduZWQgbG9uZyk7CitzdGF0aWMgaW50IHE0MF9nZXRfcnRjX3BsbChzdHJ1Y3QgcnRjX3BsbF9pbmZvICpwbGwpOworc3RhdGljIGludCBxNDBfc2V0X3J0Y19wbGwoc3RydWN0IHJ0Y19wbGxfaW5mbyAqcGxsKTsKK2V4dGVybiB2b2lkIHE0MF9yZXNldCAodm9pZCk7Cit2b2lkIHE0MF9oYWx0KHZvaWQpOworZXh0ZXJuIHZvaWQgcTQwX3dhaXRidXQodm9pZCk7Cit2b2lkIHE0MF9zZXRfdmVjdG9ycyAodm9pZCk7CisKK2V4dGVybiB2b2lkIHE0MF9ta3NvdW5kKHVuc2lnbmVkIGludCAvKmZyZXEqLywgdW5zaWduZWQgaW50IC8qdGlja3MqLyApOworCitleHRlcm4gY2hhciBtNjhrX2RlYnVnX2RldmljZVtdOworc3RhdGljIHZvaWQgcTQwX21lbV9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqYiwKKwkJCQkgICAgdW5zaWduZWQgaW50IGNvdW50KTsKKworZXh0ZXJuIGludCBxbF90aWNrczsKKworc3RhdGljIHN0cnVjdCBjb25zb2xlIHE0MF9jb25zb2xlX2RyaXZlciA9IHsKKwkubmFtZSA9CQkiZGVidWciLAorCS5mbGFncyA9CUNPTl9QUklOVEJVRkZFUiwKKwkuaW5kZXggPQktMSwKK307CisKKworLyogZWFybHkgZGVidWdnaW5nIGZ1bmN0aW9uOiovCitleHRlcm4gY2hhciAqcTQwX21lbV9jcHRyOyAvKj0oY2hhciAqKTB4ZmYwMjAwMDA7Ki8KK3N0YXRpYyBpbnQgX2NwbGVmdDsKKworc3RhdGljIHZvaWQgcTQwX21lbV9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywKKwkJCQkgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgY2hhciAqcD0oY2hhciAqKXM7CisKKyAgaWYgKGNvdW50PF9jcGxlZnQpCisgICAgd2hpbGUgKGNvdW50LS0gPjApeworICAgICAgKnE0MF9tZW1fY3B0cj0qcCsrOworICAgICAgcTQwX21lbV9jcHRyKz00OworICAgICAgX2NwbGVmdC0tOworICAgIH0KK30KKyNpZiAwCit2b2lkIHByaW50cTQwKGNoYXIgKnN0cikKK3sKKyAgaW50IGw9c3RybGVuKHN0cik7CisgIGNoYXIgKnA9cTQwX21lbV9jcHRyOworCisgIHdoaWxlIChsLS0gPjAgJiYgX2NwbGVmdC0tID4wKQorICAgIHsKKyAgICAgICpwPSpzdHIrKzsKKyAgICAgIHArPTQ7CisgICAgfQorICBxNDBfbWVtX2NwdHI9cDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGhhbHRlZD0wOworCisjaWZkZWYgQ09ORklHX0hFQVJUQkVBVAorc3RhdGljIHZvaWQgcTQwX2hlYXJ0YmVhdChpbnQgb24pCit7CisgIGlmIChoYWx0ZWQpIHJldHVybjsKKworICBpZiAob24pCisgICAgUTQwX0xFRF9PTigpOworICBlbHNlCisgICAgUTQwX0xFRF9PRkYoKTsKK30KKyNlbmRpZgorCit2b2lkIHE0MF9yZXNldCh2b2lkKQoreworICAgICAgICBoYWx0ZWQ9MTsKKyAgICAgICAgcHJpbnRrICgiXG5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIKKwkJIkNhbGxlZCBxNDBfcmVzZXQgOiBwcmVzcyB0aGUgUkVTRVQgYnV0dG9uISEgXG4iCisJCSIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKKwlRNDBfTEVEX09OKCk7CisJd2hpbGUoMSkgOworfQordm9pZCBxNDBfaGFsdCh2b2lkKQoreworICAgICAgICBoYWx0ZWQ9MTsKKyAgICAgICAgcHJpbnRrICgiXG5cbioqKioqKioqKioqKioqKioqKipcbiIKKwkJICAgICIgIENhbGxlZCBxNDBfaGFsdFxuIgorCQkgICAgIioqKioqKioqKioqKioqKioqKipcbiIpOworCVE0MF9MRURfT04oKTsKKwl3aGlsZSgxKSA7Cit9CisKK3N0YXRpYyB2b2lkIHE0MF9nZXRfbW9kZWwoY2hhciAqbW9kZWwpCit7CisgICAgc3ByaW50Zihtb2RlbCwgIlE0MCIpOworfQorCisvKiBObyBoYXJkd2FyZSBvcHRpb25zIG9uIFE0MD8gKi8KKworc3RhdGljIGludCBxNDBfZ2V0X2hhcmR3YXJlX2xpc3QoY2hhciAqYnVmZmVyKQoreworICAgICpidWZmZXIgPSAnXDAnOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHNlcnBvcnRzW109ezB4M2Y4LDB4MmY4LDB4M2U4LDB4MmU4LDB9Owordm9pZCBxNDBfZGlzYWJsZV9pcnFzKHZvaWQpCit7CisgIHVuc2lnbmVkIGksajsKKworICBqPTA7CisgIHdoaWxlKChpPXNlcnBvcnRzW2orK10pKSBvdXRiKDAsaStVQVJUX0lFUik7CisgIG1hc3Rlcl9vdXRiKDAsRVhUX0VOQUJMRV9SRUcpOworICBtYXN0ZXJfb3V0YigwLEtFWV9JUlFfRU5BQkxFX1JFRyk7Cit9CisKK3ZvaWQgX19pbml0IGNvbmZpZ19xNDAodm9pZCkKK3sKKyAgICBtYWNoX3NjaGVkX2luaXQgICAgICA9IHE0MF9zY2hlZF9pbml0OworCisgICAgbWFjaF9pbml0X0lSUSAgICAgICAgPSBxNDBfaW5pdF9JUlE7CisgICAgbWFjaF9nZXR0aW1lb2Zmc2V0ICAgPSBxNDBfZ2V0dGltZW9mZnNldDsKKyAgICBtYWNoX2h3Y2xrICAgICAgICAgICA9IHE0MF9od2NsazsKKyAgICBtYWNoX2dldF9zcyAgICAgICAgICA9IHE0MF9nZXRfc3M7CisgICAgbWFjaF9nZXRfcnRjX3BsbCAgICAgPSBxNDBfZ2V0X3J0Y19wbGw7CisgICAgbWFjaF9zZXRfcnRjX3BsbCAgICAgPSBxNDBfc2V0X3J0Y19wbGw7CisgICAgbWFjaF9zZXRfY2xvY2tfbW1zcwkgPSBxNDBfc2V0X2Nsb2NrX21tc3M7CisKKyAgICBtYWNoX3Jlc2V0CQkgPSBxNDBfcmVzZXQ7CisgICAgbWFjaF9mcmVlX2lycQkgPSBxNDBfZnJlZV9pcnE7CisgICAgbWFjaF9wcm9jZXNzX2ludAkgPSBxNDBfcHJvY2Vzc19pbnQ7CisgICAgbWFjaF9nZXRfaXJxX2xpc3QJID0gc2hvd19xNDBfaW50ZXJydXB0czsKKyAgICBtYWNoX3JlcXVlc3RfaXJxCSA9IHE0MF9yZXF1ZXN0X2lycTsKKyAgICBlbmFibGVfaXJxCQkgPSBxNDBfZW5hYmxlX2lycTsKKyAgICBkaXNhYmxlX2lycSAgICAgICAgICA9IHE0MF9kaXNhYmxlX2lycTsKKyAgICBtYWNoX2RlZmF1bHRfaGFuZGxlciA9ICZxNDBfZGVmYXVsdF9oYW5kbGVyOworICAgIG1hY2hfZ2V0X21vZGVsICAgICAgID0gcTQwX2dldF9tb2RlbDsKKyAgICBtYWNoX2dldF9oYXJkd2FyZV9saXN0ID0gcTQwX2dldF9oYXJkd2FyZV9saXN0OworCisjaWYgZGVmaW5lZChDT05GSUdfSU5QVVRfTTY4S19CRUVQKSB8fCBkZWZpbmVkKENPTkZJR19JTlBVVF9NNjhLX0JFRVBfTU9EVUxFKQorICAgIG1hY2hfYmVlcCAgICAgICAgICAgID0gcTQwX21rc291bmQ7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCisgICAgbWFjaF9oZWFydGJlYXQgPSBxNDBfaGVhcnRiZWF0OworI2VuZGlmCisgICAgbWFjaF9oYWx0ID0gcTQwX2hhbHQ7CisjaWZkZWYgQ09ORklHX0RVTU1ZX0NPTlNPTEUKKyAgICBjb25zd2l0Y2hwID0gJmR1bW15X2NvbjsKKyNlbmRpZgorCisgICAgLyogZGlzYWJsZSBhIGZldyB0aGluZ3MgdGhhdCBTTVNRIG1pZ2h0IGhhdmUgbGVmdCBlbmFibGVkICovCisgICAgcTQwX2Rpc2FibGVfaXJxcygpOworCisgICAgLyogbm8gRE1BIGF0IGFsbCwgYnV0IGlkZS1zY3NpIHJlcXVpcmVzIGl0Li4gbWFrZSBzdXJlCisgICAgICogYWxsIHBoeXNpY2FsIFJBTSBmaXRzIGludG8gdGhlIGJvdW5kYXJ5IC0gb3RoZXJ3aXNlCisgICAgICogYWxsb2NhdG9yIG1heSBwbGF5IGNvc3RseSBhbmQgdXNlbGVzcyB0cmlja3MgKi8KKyAgICBtYWNoX21heF9kbWFfYWRkcmVzcyA9IDEwMjQqMTAyNCoxMDI0OworCisgICAgLyogdXNlZnVsIGZvciBlYXJseSBkZWJ1Z2dpbmcgc3RhZ2VzIC0gd3JpdGVzIGtlcm5lbCBtZXNzYWdlcyBpbnRvIFNSQU0gKi8KKyAgICBpZiAoIXN0cm5jbXAoIG02OGtfZGVidWdfZGV2aWNlLCJtZW0iLDMgKSkKKyAgICAgIHsKKwkvKnByaW50aygidXNpbmcgTlZSQU0gZGVidWcsIHE0MF9tZW1fY3B0cj0lcFxuIixxNDBfbWVtX2NwdHIpOyovCisJX2NwbGVmdD0yMDAwLSgobG9uZylxNDBfbWVtX2NwdHItMHhmZjAyMDAwMCkvNDsKKwlxNDBfY29uc29sZV9kcml2ZXIud3JpdGUgPSBxNDBfbWVtX2NvbnNvbGVfd3JpdGU7CisJcmVnaXN0ZXJfY29uc29sZSgmcTQwX2NvbnNvbGVfZHJpdmVyKTsKKyAgICAgIH0KK30KKworCitpbnQgcTQwX3BhcnNlX2Jvb3RpbmZvKGNvbnN0IHN0cnVjdCBiaV9yZWNvcmQgKnJlYykKK3sKKyAgcmV0dXJuIDE7Cit9CisKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGJjZDJiaW4gKHVuc2lnbmVkIGNoYXIgYikKK3sKKwlyZXR1cm4gKChiPj40KSoxMCArIChiJjE1KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBiaW4yYmNkICh1bnNpZ25lZCBjaGFyIGIpCit7CisJcmV0dXJuICgoKGIvMTApKjE2KSArIChiJTEwKSk7Cit9CisKKwordW5zaWduZWQgbG9uZyBxNDBfZ2V0dGltZW9mZnNldCAodm9pZCkKK3sKKyAgICByZXR1cm4gNTAwMCoocWxfdGlja3MhPTApOworfQorCisKKy8qCisgKiBMb29rcyBsaWtlIG9wIGlzIG5vbi16ZXJvIGZvciBzZXR0aW5nIHRoZSBjbG9jaywgYW5kIHplcm8gZm9yCisgKiByZWFkaW5nIHRoZSBjbG9jay4KKyAqCisgKiAgc3RydWN0IGh3Y2xrX3RpbWUgeworICogICAgICAgICB1bnNpZ25lZCAgICAgICAgc2VjOyAgICAgICAwLi41OQorICogICAgICAgICB1bnNpZ25lZCAgICAgICAgbWluOyAgICAgICAwLi41OQorICogICAgICAgICB1bnNpZ25lZCAgICAgICAgaG91cjsgICAgICAwLi4yMworICogICAgICAgICB1bnNpZ25lZCAgICAgICAgZGF5OyAgICAgICAxLi4zMQorICogICAgICAgICB1bnNpZ25lZCAgICAgICAgbW9uOyAgICAgICAwLi4xMQorICogICAgICAgICB1bnNpZ25lZCAgICAgICAgeWVhcjsgICAgICAwMC4uLgorICogICAgICAgICBpbnQgICAgICAgICAgICAgd2RheTsgICAgICAwLi42LCAwIGlzIFN1bmRheSwgLTEgbWVhbnMgdW5rbm93bi9kb24ndCBzZXQKKyAqIH07CisgKi8KKworaW50IHE0MF9od2NsayhpbnQgb3AsIHN0cnVjdCBydGNfdGltZSAqdCkKK3sKKyAgICAgICAgaWYgKG9wKQorCXsJLyogV3JpdGUuLi4uICovCisJICAgICAgICBRNDBfUlRDX0NUUkwgfD0gUTQwX1JUQ19XUklURTsKKworCQlRNDBfUlRDX1NFQ1MgPSBiaW4yYmNkKHQtPnRtX3NlYyk7CisJCVE0MF9SVENfTUlOUyA9IGJpbjJiY2QodC0+dG1fbWluKTsKKwkJUTQwX1JUQ19IT1VSID0gYmluMmJjZCh0LT50bV9ob3VyKTsKKwkJUTQwX1JUQ19EQVRFID0gYmluMmJjZCh0LT50bV9tZGF5KTsKKwkJUTQwX1JUQ19NTlRIID0gYmluMmJjZCh0LT50bV9tb24gKyAxKTsKKwkJUTQwX1JUQ19ZRUFSID0gYmluMmJjZCh0LT50bV95ZWFyJTEwMCk7CisJCWlmICh0LT50bV93ZGF5ID49IDApCisJCQlRNDBfUlRDX0RPVyA9IGJpbjJiY2QodC0+dG1fd2RheSsxKTsKKworCSAgICAgICAgUTQwX1JUQ19DVFJMICY9IH4oUTQwX1JUQ19XUklURSk7CisJfQorCWVsc2UKKwl7CS8qIFJlYWQuLi4uICAqLworCSAgUTQwX1JUQ19DVFJMIHw9IFE0MF9SVENfUkVBRDsKKworCSAgdC0+dG1feWVhciA9IGJjZDJiaW4gKFE0MF9SVENfWUVBUik7CisJICB0LT50bV9tb24gID0gYmNkMmJpbiAoUTQwX1JUQ19NTlRIKS0xOworCSAgdC0+dG1fbWRheSA9IGJjZDJiaW4gKFE0MF9SVENfREFURSk7CisJICB0LT50bV9ob3VyID0gYmNkMmJpbiAoUTQwX1JUQ19IT1VSKTsKKwkgIHQtPnRtX21pbiAgPSBiY2QyYmluIChRNDBfUlRDX01JTlMpOworCSAgdC0+dG1fc2VjICA9IGJjZDJiaW4gKFE0MF9SVENfU0VDUyk7CisKKwkgIFE0MF9SVENfQ1RSTCAmPSB+KFE0MF9SVENfUkVBRCk7CisKKwkgIGlmICh0LT50bV95ZWFyIDwgNzApCisJICAgIHQtPnRtX3llYXIgKz0gMTAwOworCSAgdC0+dG1fd2RheSA9IGJjZDJiaW4oUTQwX1JUQ19ET1cpLTE7CisKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IHE0MF9nZXRfc3Modm9pZCkKK3sKKwlyZXR1cm4gYmNkMmJpbihRNDBfUlRDX1NFQ1MpOworfQorCisvKgorICogU2V0IHRoZSBtaW51dGVzIGFuZCBzZWNvbmRzIGZyb20gc2Vjb25kcyB2YWx1ZSAnbm93dGltZScuICBGYWlsIGlmCisgKiBjbG9jayBpcyBvdXQgYnkgPiAzMCBtaW51dGVzLiAgTG9naWMgbGlmdGVkIGZyb20gYXRhcmkgY29kZS4KKyAqLworCitpbnQgcTQwX3NldF9jbG9ja19tbXNzICh1bnNpZ25lZCBsb25nIG5vd3RpbWUpCit7CisJaW50IHJldHZhbCA9IDA7CisJc2hvcnQgcmVhbF9zZWNvbmRzID0gbm93dGltZSAlIDYwLCByZWFsX21pbnV0ZXMgPSAobm93dGltZSAvIDYwKSAlIDYwOworCisJaW50IHJ0Y19taW51dGVzOworCisKKwlydGNfbWludXRlcyA9IGJjZDJiaW4gKFE0MF9SVENfTUlOUyk7CisKKwlpZiAoKHJ0Y19taW51dGVzIDwgcmVhbF9taW51dGVzCisJCT8gcmVhbF9taW51dGVzIC0gcnRjX21pbnV0ZXMKKwkJCTogcnRjX21pbnV0ZXMgLSByZWFsX21pbnV0ZXMpIDwgMzApCisJeworCSAgICAgICAgUTQwX1JUQ19DVFJMIHw9IFE0MF9SVENfV1JJVEU7CisJCVE0MF9SVENfTUlOUyA9IGJpbjJiY2QocmVhbF9taW51dGVzKTsKKwkJUTQwX1JUQ19TRUNTID0gYmluMmJjZChyZWFsX3NlY29uZHMpOworCQlRNDBfUlRDX0NUUkwgJj0gfihRNDBfUlRDX1dSSVRFKTsKKwl9CisJZWxzZQorCQlyZXR2YWwgPSAtMTsKKworCisJcmV0dXJuIHJldHZhbDsKK30KKworCisvKiBnZXQgYW5kIHNldCBQTEwgY2FsaWJyYXRpb24gb2YgUlRDIGNsb2NrICovCisjZGVmaW5lIFE0MF9SVENfUExMX01BU0sgKCgxPDw1KS0xKQorI2RlZmluZSBRNDBfUlRDX1BMTF9TSUdOICgxPDw1KQorCitzdGF0aWMgaW50IHE0MF9nZXRfcnRjX3BsbChzdHJ1Y3QgcnRjX3BsbF9pbmZvICpwbGwpCit7CisJaW50IHRtcD1RNDBfUlRDX0NUUkw7CisJcGxsLT5wbGxfdmFsdWUgPSB0bXAgJiBRNDBfUlRDX1BMTF9NQVNLOworCWlmICh0bXAgJiBRNDBfUlRDX1BMTF9TSUdOKQorCQlwbGwtPnBsbF92YWx1ZSA9IC1wbGwtPnBsbF92YWx1ZTsKKwlwbGwtPnBsbF9tYXg9MzE7CisJcGxsLT5wbGxfbWluPS0zMTsKKwlwbGwtPnBsbF9wb3NtdWx0PTUxMjsKKwlwbGwtPnBsbF9uZWdtdWx0PTI1NjsKKwlwbGwtPnBsbF9jbG9jaz0xMjU4MjkxMjA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcTQwX3NldF9ydGNfcGxsKHN0cnVjdCBydGNfcGxsX2luZm8gKnBsbCkKK3sKKwlpZiAoIXBsbC0+cGxsX2N0cmwpeworCQkvKiB0aGUgZG9jcyBhcmUgYSBiaXQgdW5jbGVhciBzbyBJIGFtIGRvdWJsZXNldHRpbmcgKi8KKwkJLyogUlRDX1dSSVRFIGhlcmUgLi4uICovCisJCWludCB0bXAgPSAocGxsLT5wbGxfdmFsdWUgJiAzMSkgfCAocGxsLT5wbGxfdmFsdWU8MCA/IDMyIDogMCkgfAorCQkJICBRNDBfUlRDX1dSSVRFOworCQlRNDBfUlRDX0NUUkwgfD0gUTQwX1JUQ19XUklURTsKKwkJUTQwX1JUQ19DVFJMID0gdG1wOworCQlRNDBfUlRDX0NUUkwgJj0gfihRNDBfUlRDX1dSSVRFKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiAtRUlOVkFMOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3E0MC9xNDBpbnRzLmMgYi9hcmNoL202OGsvcTQwL3E0MGludHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGVjYzI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL3E0MC9xNDBpbnRzLmMKQEAgLTAsMCArMSw0NzYgQEAKKy8qCisgKiBhcmNoL202OGsvcTQwL3E0MGludHMuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAxIFJpY2hhcmQgWmlkbGlja3kKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogLi4gdXNlZCB0byBiZSBsb29zZWx5IGJhc2VkIG9uIGJ2bWU2MDAwaW50cy5jCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKworI2luY2x1ZGUgPGFzbS9ydGMuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKworI2luY2x1ZGUgPGFzbS9xNDBfbWFzdGVyLmg+CisjaW5jbHVkZSA8YXNtL3E0MGludHMuaD4KKworLyoKKyAqIFE0MCBJUlFzIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6CisgKiAgICAgICAgICAgIDMsNCw1LDYsNywxMCwxMSwxNCwxNSA6IElTQSBkZXYgSVJRcworICogICAgICAgICAgICAxNi0zMTogcmVzZXJ2ZWQKKyAqICAgICAgICAgICAgMzIgICA6IGtleWJvYXJkIGludAorICogICAgICAgICAgICAzMyAgIDogZnJhbWUgaW50ICg1MC8yMDAgSHogcGVyaW9kaWMgdGltZXIpCisgKiAgICAgICAgICAgIDM0ICAgOiBzYW1wbGUgaW50ICgxMC8yMCBLSHogcGVyaW9kaWMgdGltZXIpCisgKgorKi8KKworZXh0ZXJuIGludCBpbnRzX2luaXRlZDsKKworCitpcnFyZXR1cm5fdCBxNDBfaXJxMl9oYW5kbGVyIChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKmZwKTsKKworCitzdGF0aWMgaXJxcmV0dXJuX3QgcTQwX2RlZmhhbmQgKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKmZwKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBkZWZhdWx0X2hhbmRsZXIoaW50IGxldiwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKworI2RlZmluZSBERVZOQU1FX1NJWkUgMjQKKworc3RhdGljIHN0cnVjdCBxNDBfaXJxX25vZGUgeworCWlycXJldHVybl90CSgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJdm9pZAkJKmRldl9pZDsKKyAgLyogICAgICAgIHN0cnVjdCBxNDBfaXJxX25vZGUgKm5leHQ7Ki8KKyAgICAgICAgY2hhcgkgICAgICAgIGRldm5hbWVbREVWTkFNRV9TSVpFXTsKKwl1bnNpZ25lZAljb3VudDsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgIHN0YXRlOworfSBpcnFfdGFiW1E0MF9JUlFfTUFYKzFdOworCitzaG9ydCB1bnNpZ25lZCBxNDBfYWJsZWNvdW50W1E0MF9JUlFfTUFYKzFdOworCisvKgorICogdm9pZCBxNDBfaW5pdF9JUlEgKHZvaWQpCisgKgorICogUGFyYW1ldGVyczoJTm9uZQorICoKKyAqIFJldHVybnM6CU5vdGhpbmcKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcga2VybmVsIHN0YXJ0dXAgdG8gaW5pdGlhbGl6ZQorICogdGhlIHE0MCBJUlEgaGFuZGxpbmcgcm91dGluZXMuCisgKi8KKworc3RhdGljIGludCBkaXNhYmxlZD0wOworCit2b2lkIHE0MF9pbml0X0lSUSAodm9pZCkKK3sKKwlpbnQgaTsKKworCWRpc2FibGVkPTA7CisJZm9yIChpID0gMDsgaSA8PSBRNDBfSVJRX01BWDsgaSsrKSB7CisJCWlycV90YWJbaV0uaGFuZGxlciA9IHE0MF9kZWZoYW5kOworCQlpcnFfdGFiW2ldLmZsYWdzID0gMDsKKwkJaXJxX3RhYltpXS5kZXZfaWQgPSBOVUxMOworCQkvKgkJaXJxX3RhYltpXS5uZXh0ID0gTlVMTDsqLworCQlpcnFfdGFiW2ldLmRldm5hbWVbMF0gPSAwOworCQlpcnFfdGFiW2ldLmNvdW50ID0gMDsKKwkJaXJxX3RhYltpXS5zdGF0ZSA9MDsKKwkJcTQwX2FibGVjb3VudFtpXT0wOyAgIC8qIGFsbCBlbmFibGVkICovCisJfQorCisJLyogc2V0dXAgaGFuZGxlciBmb3IgSVNBIGludHMgKi8KKwljcHVfcmVxdWVzdF9pcnEoSVJRMiwgcTQwX2lycTJfaGFuZGxlciwgMCwgInE0MCBJU0EgYW5kIG1hc3RlciBjaGlwIiwKKwkJCU5VTEwpOworCisJLyogbm93IGVuYWJsZSBzb21lIGludHMuLiAqLworCW1hc3Rlcl9vdXRiKDEsRVhUX0VOQUJMRV9SRUcpOyAgLyogSVNBIElSUSA1LTE1ICovCisKKwkvKiBtYWtlIHN1cmUga2V5Ym9hcmQgSVJRIGlzIGRpc2FibGVkICovCisJbWFzdGVyX291dGIoMCxLRVlfSVJRX0VOQUJMRV9SRUcpOworfQorCitpbnQgcTQwX3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsCisJCWlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkKK3sKKyAgLypwcmludGsoInE0MF9yZXF1ZXN0X2lycSAlZCwgJXNcbiIsaXJxLGRldm5hbWUpOyovCisKKwlpZiAoaXJxID4gUTQwX0lSUV9NQVggfHwgKGlycT4xNSAmJiBpcnE8MzIpKSB7CisJCXByaW50aygiJXM6IEluY29ycmVjdCBJUlEgJWQgZnJvbSAlc1xuIiwgX19GVU5DVElPTl9fLCBpcnEsIGRldm5hbWUpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCS8qIHRlc3QgZm9yIElTQSBpbnRzIG5vdCBpbXBsZW1lbnRlZCBieSBIVyAqLworCXN3aXRjaCAoaXJxKQorCSAgeworCSAgY2FzZSAxOiBjYXNlIDI6IGNhc2UgODogY2FzZSA5OgorCSAgY2FzZSAxMjogY2FzZSAxMzoKKwkgICAgcHJpbnRrKCIlczogSVNBIElSUSAlZCBmcm9tICVzIG5vdCBpbXBsZW1lbnRlZCBieSBIV1xuIiwgX19GVU5DVElPTl9fLCBpcnEsIGRldm5hbWUpOworCSAgICByZXR1cm4gLUVOWElPOworCSAgY2FzZSAxMToKKwkgICAgcHJpbnRrKCJ3YXJuaW5nIElSUSAxMCBhbmQgMTEgbm90IGRpc3Rpbmd1aXNoYWJsZVxuIik7CisJICAgIGlycT0xMDsKKwkgIGRlZmF1bHQ6CisJICAgIDsKKwkgIH0KKworCWlmIChpcnE8UTQwX0lSUV9TQU1QTEUpCisJICB7CisJICAgIGlmIChpcnFfdGFiW2lycV0uZGV2X2lkICE9IE5VTEwpCisJCSAgeworCQkgICAgcHJpbnRrKCIlczogSVJRICVkIGZyb20gJXMgaXMgbm90IHJlcGxhY2VhYmxlXG4iLAorCQkJICAgX19GVU5DVElPTl9fLCBpcnEsIGlycV90YWJbaXJxXS5kZXZuYW1lKTsKKwkJICAgIHJldHVybiAtRUJVU1k7CisJCSAgfQorCSAgICAvKnByaW50aygiSVJRICVkIHNldCB0byBoYW5kbGVyICVwXG4iLGlycSxoYW5kbGVyKTsqLworCSAgICBpZiAoZGV2X2lkPT1OVUxMKQorCQkgIHsKKwkJcHJpbnRrKCJXQVJOSU5HOiBkZXZfaWQgPT0gTlVMTCBpbiByZXF1ZXN0X2lycVxuIik7CisJCWRldl9pZD0odm9pZCopMTsKKwkgICAgICB9CisJICAgIGlycV90YWJbaXJxXS5oYW5kbGVyID0gaGFuZGxlcjsKKwkgICAgaXJxX3RhYltpcnFdLmZsYWdzICAgPSBmbGFnczsKKwkgICAgaXJxX3RhYltpcnFdLmRldl9pZCAgPSBkZXZfaWQ7CisJICAgIHN0cmxjcHkoaXJxX3RhYltpcnFdLmRldm5hbWUsZGV2bmFtZSxzaXplb2YoaXJxX3RhYltpcnFdLmRldm5hbWUpKTsKKwkgICAgaXJxX3RhYltpcnFdLnN0YXRlID0gMDsKKwkgICAgcmV0dXJuIDA7CisJICB9CisJZWxzZSB7CisJICAvKiBRNDBfSVJRX1NBTVBMRSA6c29tZXdoYXQgc3BlY2lhbCBhY3Rpb25zIHJlcXVpcmVkIGhlcmUgLi4qLworCSAgY3B1X3JlcXVlc3RfaXJxKDQsIGhhbmRsZXIsIGZsYWdzLCBkZXZuYW1lLCBkZXZfaWQpOworCSAgY3B1X3JlcXVlc3RfaXJxKDYsIGhhbmRsZXIsIGZsYWdzLCBkZXZuYW1lLCBkZXZfaWQpOworCSAgcmV0dXJuIDA7CisJfQorfQorCit2b2lkIHE0MF9mcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJaWYgKGlycSA+IFE0MF9JUlFfTUFYIHx8IChpcnE+MTUgJiYgaXJxPDMyKSkgeworCQlwcmludGsoIiVzOiBJbmNvcnJlY3QgSVJRICVkLCBkZXZfaWQgJXggXG4iLCBfX0ZVTkNUSU9OX18sIGlycSwgKHVuc2lnbmVkKWRldl9pZCk7CisJCXJldHVybjsKKwl9CisKKwkvKiB0ZXN0IGZvciBJU0EgaW50cyBub3QgaW1wbGVtZW50ZWQgYnkgSFcgKi8KKwlzd2l0Y2ggKGlycSkKKwkgIHsKKwkgIGNhc2UgMTogY2FzZSAyOiBjYXNlIDg6IGNhc2UgOToKKwkgIGNhc2UgMTI6IGNhc2UgMTM6CisJICAgIHByaW50aygiJXM6IElTQSBJUlEgJWQgZnJvbSAleCBpbnZhbGlkXG4iLCBfX0ZVTkNUSU9OX18sIGlycSwgKHVuc2lnbmVkKWRldl9pZCk7CisJICAgIHJldHVybjsKKwkgIGNhc2UgMTE6IGlycT0xMDsKKwkgIGRlZmF1bHQ6CisJICAgIDsKKwkgIH0KKworCWlmIChpcnE8UTQwX0lSUV9TQU1QTEUpCisJICB7CisJICAgIGlmIChpcnFfdGFiW2lycV0uZGV2X2lkICE9IGRldl9pZCkKKwkgICAgICBwcmludGsoIiVzOiBSZW1vdmluZyBwcm9iYWJseSB3cm9uZyBJUlEgJWQgZnJvbSAlc1xuIiwKKwkJICAgICBfX0ZVTkNUSU9OX18sIGlycSwgaXJxX3RhYltpcnFdLmRldm5hbWUpOworCisJICAgIGlycV90YWJbaXJxXS5oYW5kbGVyID0gcTQwX2RlZmhhbmQ7CisJICAgIGlycV90YWJbaXJxXS5mbGFncyAgID0gMDsKKwkgICAgaXJxX3RhYltpcnFdLmRldl9pZCAgPSBOVUxMOworCSAgICAvKiBpcnFfdGFiW2lycV0uZGV2bmFtZSA9IE5VTEw7ICovCisJICAgIC8qIGRvIG5vdCByZXNldCBzdGF0ZSAhISAqLworCSAgfQorCWVsc2UKKwkgIHsgLyogPT0gUTQwX0lSUV9TQU1QTEUgKi8KKwkgICAgY3B1X2ZyZWVfaXJxKDQsIGRldl9pZCk7CisJICAgIGNwdV9mcmVlX2lycSg2LCBkZXZfaWQpOworCSAgfQorfQorCisKK2lycXJldHVybl90IHE0MF9wcm9jZXNzX2ludCAoaW50IGxldmVsLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisgIHByaW50aygidW5leHBlY3RlZCBpbnRlcnJ1cHQgdmVjPSV4LCBwYz0lbHgsIGQwPSVseCwgZDBfb3JpZz0lbHgsIGQxPSVseCwgZDI9JWx4XG4iLAorICAgICAgICAgIGxldmVsLCBmcC0+cGMsIGZwLT5kMCwgZnAtPm9yaWdfZDAsIGZwLT5kMSwgZnAtPmQyKTsKKyAgcHJpbnRrKCJcdElJUlFfUkVHID0gJXgsIEVJUlFfUkVHID0gJXhcbiIsbWFzdGVyX2luYihJSVJRX1JFRyksbWFzdGVyX2luYihFSVJRX1JFRykpOworICByZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiB0aGlzIHN0dWZmIGRvZXNuJ3QgcmVhbGx5IGJlbG9uZyBoZXJlLi4KKyovCisKK2ludCBxbF90aWNrczsgICAgICAgICAgICAgIC8qIDIwMEh6IHRpY2tzIHNpbmNlIGxhc3QgamlmZmllICovCitzdGF0aWMgaW50IHNvdW5kX3RpY2tzOworCisjZGVmaW5lIFNWT0wgNDUKKwordm9pZCBxNDBfbWtzb3VuZCh1bnNpZ25lZCBpbnQgaHosIHVuc2lnbmVkIGludCB0aWNrcykKK3sKKyAgLyogZm9yIG5vdyBpZ25vcmUgaHosIGV4Y2VwdCB0aGF0IGh6PT0wIHN3aXRjaGVzIG9mZiBzb3VuZCAqLworICAvKiBzaW1wbHkgYWx0ZXJuYXRlIHRoZSBhbXBsICgxMjgtU1ZPTCktKDEyOCtTVk9MKS0uLi0uLiBhdCAyMDBIeiAqLworICBpZiAoaHo9PTApCisgICAgeworICAgICAgaWYgKHNvdW5kX3RpY2tzKQorCXNvdW5kX3RpY2tzPTE7CisKKyAgICAgICpEQUNfTEVGVD0xMjg7CisgICAgICAqREFDX1JJR0hUPTEyODsKKworICAgICAgcmV0dXJuOworICAgIH0KKyAgLyogc291bmQgaXRzZWxmIGlzIGRvbmUgaW4gcTQwX3RpbWVyX2ludCAqLworICBpZiAoc291bmRfdGlja3MgPT0gMCkgc291bmRfdGlja3M9MTAwMDsgLyogcHJldHR5IGxvbmcgYmVlcCAqLworICBzb3VuZF90aWNrcz10aWNrczw8MTsKK30KKworc3RhdGljIGlycXJldHVybl90ICgqcTQwX3RpbWVyX3JvdXRpbmUpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKworc3RhdGljIGlycXJldHVybl90IHE0MF90aW1lcl9pbnQgKGludCBpcnEsIHZvaWQgKiBkZXYsIHN0cnVjdCBwdF9yZWdzICogcmVncykKK3sKKyAgICBxbF90aWNrcyA9IHFsX3RpY2tzID8gMCA6IDE7CisgICAgaWYgKHNvdW5kX3RpY2tzKQorICAgICAgeworCXVuc2lnbmVkIGNoYXIgc3ZhbD0oc291bmRfdGlja3MgJiAxKSA/IDEyOC1TVk9MIDogMTI4K1NWT0w7CisJc291bmRfdGlja3MtLTsKKwkqREFDX0xFRlQ9c3ZhbDsKKwkqREFDX1JJR0hUPXN2YWw7CisgICAgICB9CisKKyAgICBpZiAoIXFsX3RpY2tzKQorCXE0MF90aW1lcl9yb3V0aW5lKGlycSwgZGV2LCByZWdzKTsKKyAgICByZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3ZvaWQgcTQwX3NjaGVkX2luaXQgKGlycXJldHVybl90ICgqdGltZXJfcm91dGluZSkoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopKQoreworICAgIGludCB0aW1lcl9pcnE7CisKKyAgICBxNDBfdGltZXJfcm91dGluZSA9IHRpbWVyX3JvdXRpbmU7CisgICAgdGltZXJfaXJxPVE0MF9JUlFfRlJBTUU7CisKKyAgICBpZiAocmVxdWVzdF9pcnEodGltZXJfaXJxLCBxNDBfdGltZXJfaW50LCAwLAorCQkJCSJ0aW1lciIsIHE0MF90aW1lcl9pbnQpKQorCXBhbmljICgiQ291bGRuJ3QgcmVnaXN0ZXIgdGltZXIgaW50Iik7CisKKyAgICBtYXN0ZXJfb3V0YigtMSxGUkFNRV9DTEVBUl9SRUcpOworICAgIG1hc3Rlcl9vdXRiKCAxLEZSQU1FX1JBVEVfUkVHKTsKK30KKworCisvKgorICogdGFibGVzIHRvIHRyYW5zbGF0ZSBiaXRzIGludG8gSVJRIG51bWJlcnMKKyAqIGl0IGlzIGEgZ29vZCBpZGVhIHRvIG9yZGVyIHRoZSBlbnRyaWVzIGJ5IHByaW9yaXR5CisgKgorKi8KKworc3RydWN0IElSUV9UQUJMRXsgdW5zaWduZWQgbWFzazsgaW50IGlycSA7fTsKKyNpZiAwCitzdGF0aWMgc3RydWN0IElSUV9UQUJMRSBpaXJxc1tdPXsKKyAge1E0MF9JUlFfRlJBTUVfTUFTSyxRNDBfSVJRX0ZSQU1FfSwKKyAge1E0MF9JUlFfS0VZQl9NQVNLLFE0MF9JUlFfS0VZQk9BUkR9LAorICB7MCwwfX07CisjZW5kaWYKK3N0YXRpYyBzdHJ1Y3QgSVJRX1RBQkxFIGVpcnFzW10gPSB7CisgIHsgLm1hc2sgPSBRNDBfSVJRM19NQVNLLAkuaXJxID0gMyB9LAkvKiBzZXIgMSAqLworICB7IC5tYXNrID0gUTQwX0lSUTRfTUFTSywJLmlycSA9IDQgfSwJLyogc2VyIDIgKi8KKyAgeyAubWFzayA9IFE0MF9JUlExNF9NQVNLLAkuaXJxID0gMTQgfSwJLyogSURFIDEgKi8KKyAgeyAubWFzayA9IFE0MF9JUlExNV9NQVNLLAkuaXJxID0gMTUgfSwJLyogSURFIDIgKi8KKyAgeyAubWFzayA9IFE0MF9JUlE2X01BU0ssCS5pcnEgPSA2IH0sCS8qIGZsb3BweSwgaGFuZGxlZCBlbHNld2hlcmUgKi8KKyAgeyAubWFzayA9IFE0MF9JUlE3X01BU0ssCS5pcnEgPSA3IH0sCS8qIHBhciAqLworICB7IC5tYXNrID0gUTQwX0lSUTVfTUFTSywJLmlycSA9IDUgfSwKKyAgeyAubWFzayA9IFE0MF9JUlExMF9NQVNLLAkuaXJxID0gMTAgfSwKKyAgezAsMH0KK307CisKKy8qIGNvbXBsYWluIG9ubHkgdGhpcyBtYW55IHRpbWVzIGFib3V0IHNwdXJpb3VzIGludHMgOiAqLworc3RhdGljIGludCBjY2xlaXJxPTYwOyAgICAvKiBJU0EgZGV2IElSUSdzKi8KKy8qc3RhdGljIGludCBjY2xpcnE9NjA7Ki8gICAgIC8qIGludGVybmFsICovCisKKy8qIEZJWE1FOiBhZGQgc2hhcmVkIGludHMsbWFzayx1bm1hc2sscHJvYmluZy4uLi4gKi8KKworI2RlZmluZSBJUlFfSU5QUk9HUkVTUyAxCisvKnN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzYXZlZF9tYXNrOyovCisvL3N0YXRpYyBpbnQgZG9fdGludD0wOworCisjZGVmaW5lIERFQlVHX1E0MElOVAorLyojZGVmaW5lIElQX1VTRV9ESVNBQkxFICovLyogd291bGQgYmUgbmljZSwgYnV0IGNyYXNoZXMgPz8/PyAqLworCitzdGF0aWMgaW50IG1leHRfZGlzYWJsZWQ9MDsgIC8qIGV4dCBpcnEgZGlzYWJsZWQgYnkgbWFzdGVyIGNoaXA/ICovCitzdGF0aWMgaW50IGFsaWFzZWRfaXJxPTA7ICAvKiBob3cgbWFueSB0aW1lcyBpbnNpZGUgaGFuZGxlciA/Ki8KKworCisvKiBnb3QgbGV2ZWwgMiBpbnRlcnJ1cHQsIGRpc3BhdGNoIHRvIElTQSBvciBrZXlib2FyZC90aW1lciBJUlFzICovCitpcnFyZXR1cm5fdCBxNDBfaXJxMl9oYW5kbGVyIChpbnQgdmVjLCB2b2lkICpkZXZuYW1lLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisgIHVuc2lnbmVkIG1pciwgbWVyOworICBpbnQgaXJxLGk7CisKKy8vcmVwZWF0OgorICBtaXI9bWFzdGVyX2luYihJSVJRX1JFRyk7CisgIGlmIChtaXImUTQwX0lSUV9GUkFNRV9NQVNLKSB7CisJICBpcnFfdGFiW1E0MF9JUlFfRlJBTUVdLmNvdW50Kys7CisJICBpcnFfdGFiW1E0MF9JUlFfRlJBTUVdLmhhbmRsZXIoUTQwX0lSUV9GUkFNRSxpcnFfdGFiW1E0MF9JUlFfRlJBTUVdLmRldl9pZCxmcCk7CisJICBtYXN0ZXJfb3V0YigtMSxGUkFNRV9DTEVBUl9SRUcpOworICB9CisgIGlmICgobWlyJlE0MF9JUlFfU0VSX01BU0spIHx8IChtaXImUTQwX0lSUV9FWFRfTUFTSykpIHsKKwkgIG1lcj1tYXN0ZXJfaW5iKEVJUlFfUkVHKTsKKwkgIGZvciAoaT0wOyBlaXJxc1tpXS5tYXNrOyBpKyspIHsKKwkJICBpZiAobWVyJihlaXJxc1tpXS5tYXNrKSkgeworCQkJICBpcnE9ZWlycXNbaV0uaXJxOworLyoKKyAqIFRoZXJlIGlzIGEgbGl0dGxlIG1lc3Mgd3J0IHdoaWNoIElSUSByZWFsbHkgY2F1c2VkIHRoaXMgaXJxIHJlcXVlc3QuIFRoZQorICogbWFpbiBwcm9ibGVtIGlzIHRoYXQgSUlSUV9SRUcgYW5kIEVJUlFfUkVHIHJlZmxlY3QgdGhlIHN0YXRlIHdoZW4gdGhleQorICogYXJlIHJlYWQgLSB3aGljaCBpcyBsb25nIGFmdGVyIHRoZSByZXF1ZXN0IGNhbWUgaW4uIEluIHRoZW9yeSBJUlFzIHNob3VsZAorICogbm90IGp1c3QgZ28gYXdheSBidXQgdGhleSBvY2Nhc3Npb25hbGx5IGRvCisgKi8KKwkJCSAgaWYgKGlycT40ICYmIGlycTw9MTUgJiYgbWV4dF9kaXNhYmxlZCkgeworCQkJCSAgLyphbGlhc2VkX2lycSsrOyovCisJCQkJICBnb3RvIGlpcnE7CisJCQkgIH0KKwkJCSAgaWYgKGlycV90YWJbaXJxXS5oYW5kbGVyID09IHE0MF9kZWZoYW5kICkgeworCQkJCSAgcHJpbnRrKCJoYW5kbGVyIGZvciBJUlEgJWQgbm90IGRlZmluZWRcbiIsaXJxKTsKKwkJCQkgIGNvbnRpbnVlOyAvKiBpZ25vcmUgdW5pbml0ZWQgSU5UcyA6LSggKi8KKwkJCSAgfQorCQkJICBpZiAoIGlycV90YWJbaXJxXS5zdGF0ZSAmIElSUV9JTlBST0dSRVNTICkgeworCQkJCSAgLyogc29tZSBoYW5kbGVycyBkbyBsb2NhbF9pcnFfZW5hYmxlKCkgZm9yIGlycSBsYXRlbmN5IHJlYXNvbnMsICovCisJCQkJICAvKiBob3dldmVyIHJlZW50ZXJpbmcgYW4gYWN0aXZlIGlycSBoYW5kbGVyIGlzIG5vdCBwZXJtaXR0ZWQgKi8KKyNpZmRlZiBJUF9VU0VfRElTQUJMRQorCQkJCSAgLyogaW4gdGhlb3J5IHRoaXMgaXMgdGhlIGJldHRlciB3YXkgdG8gZG8gaXQgYmVjYXVzZSBpdCBzdGlsbCAqLworCQkJCSAgLyogbGV0cyB0aHJvdWdoIGVnIHRoZSBzZXJpYWwgaXJxcywgdW5mb3J0dW5hdGVseSBpdCBjcmFzaGVzICovCisJCQkJICBkaXNhYmxlX2lycShpcnEpOworCQkJCSAgZGlzYWJsZWQ9MTsKKyNlbHNlCisJCQkJICAvKnByaW50aygiSVJRX0lOUFJPR1JFU1MgZGV0ZWN0ZWQgZm9yIGlycSAlZCwgZGlzYWJsaW5nIC0gJXMgZGlzYWJsZWRcbiIsaXJxLGRpc2FibGVkID8gImFscmVhZHkiIDogIm5vdCB5ZXQiKTsgKi8KKwkJCQkgIGZwLT5zciA9ICgoKGZwLT5zcikgJiAofjB4NzAwKSkrMHgyMDApOworCQkJCSAgZGlzYWJsZWQ9MTsKKyNlbmRpZgorCQkJCSAgZ290byBpaXJxOworCQkJICB9CisJCQkgIGlycV90YWJbaXJxXS5jb3VudCsrOworCQkJICBpcnFfdGFiW2lycV0uc3RhdGUgfD0gSVJRX0lOUFJPR1JFU1M7CisJCQkgIGlycV90YWJbaXJxXS5oYW5kbGVyKGlycSxpcnFfdGFiW2lycV0uZGV2X2lkLGZwKTsKKwkJCSAgaXJxX3RhYltpcnFdLnN0YXRlICY9IH5JUlFfSU5QUk9HUkVTUzsKKworCQkJICAvKiBuYWl2ZWx5IGVuYWJsZSBldmVyeXRoaW5nLCBpZiB0aGF0IGZhaWxzIHRoYW4gICAgKi8KKwkJCSAgLyogdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlZW50ZXJlZCBpbW1lZGlhdGVseSB0aHVzICovCisJCQkgIC8qIGdldHRpbmcgYW5vdGhlciBjaGFuY2UgdG8gZGlzYWJsZSB0aGUgSVJRICAgICAgICAqLworCisJCQkgIGlmICggZGlzYWJsZWQgKSB7CisjaWZkZWYgSVBfVVNFX0RJU0FCTEUKKwkJCQkgIGlmIChpcnE+NCl7CisJCQkJCSAgZGlzYWJsZWQ9MDsKKwkJCQkJICBlbmFibGVfaXJxKGlycSk7fQorI2Vsc2UKKwkJCQkgIGRpc2FibGVkPTA7CisJCQkJICAvKnByaW50aygicmVlbmFibGluZyBpcnEgJWRcbiIsaXJxKTsgKi8KKyNlbmRpZgorCQkJICB9CisvLyB1c2VkIHRvIGRvICdnb3RvIHJlcGVhdDsnIGhlcmUsIHRoaXMgZGVsYXllZCBiaCBwcm9jZXNzaW5nIHRvbyBsb25nCisJCQkgIHJldHVybiBJUlFfSEFORExFRDsKKwkJICB9CisJICB9CisJICBpZiAobWVyICYmIGNjbGVpcnE+MCAmJiAhYWxpYXNlZF9pcnEpCisJCSAgcHJpbnRrKCJJU0EgaW50ZXJydXB0IGZyb20gdW5rbm93biBzb3VyY2U/IEVJUlFfUkVHID0gJXhcbiIsbWVyKSxjY2xlaXJxLS07CisgIH0KKyBpaXJxOgorICBtaXI9bWFzdGVyX2luYihJSVJRX1JFRyk7CisgIC8qIHNob3VsZCB0ZXN0IHdoZXRoZXIga2V5Ym9hcmQgaXJxIGlzIHJlYWxseSBlbmFibGVkLCBkb2luZyBpdCBpbiBkZWZoYW5kICovCisgIGlmIChtaXImUTQwX0lSUV9LRVlCX01BU0spIHsKKwkgIGlycV90YWJbUTQwX0lSUV9LRVlCT0FSRF0uY291bnQrKzsKKwkgIGlycV90YWJbUTQwX0lSUV9LRVlCT0FSRF0uaGFuZGxlcihRNDBfSVJRX0tFWUJPQVJELGlycV90YWJbUTQwX0lSUV9LRVlCT0FSRF0uZGV2X2lkLGZwKTsKKyAgfQorICByZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK2ludCBzaG93X3E0MF9pbnRlcnJ1cHRzIChzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDw9IFE0MF9JUlFfTUFYOyBpKyspIHsKKwkJaWYgKGlycV90YWJbaV0uY291bnQpCisJCSAgICAgIHNlcV9wcmludGYocCwgIiVzSVJRICUwMmQ6ICU4ZCAgJXMlc1xuIiwKKwkJCSAgICAgIChpPD0xNSkgPyAiSVNBLSIgOiAiICAgICIgLAorCQkJICAgIGksIGlycV90YWJbaV0uY291bnQsCisJCQkgICAgaXJxX3RhYltpXS5kZXZuYW1lWzBdID8gaXJxX3RhYltpXS5kZXZuYW1lIDogIj8iLAorCQkJICAgIGlycV90YWJbaV0uaGFuZGxlciA9PSBxNDBfZGVmaGFuZCA/CisJCQkJCSIgKG5vdyB1bmFzc2lnbmVkKSIgOiAiIik7CisJfQorCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBxNDBfZGVmaGFuZCAoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisgICAgICAgIGlmIChpcnEhPVE0MF9JUlFfS0VZQk9BUkQpCisJICAgICBwcmludGsgKCJVbmtub3duIHE0MCBpbnRlcnJ1cHQgJWRcbiIsIGlycSk7CisJZWxzZSBtYXN0ZXJfb3V0YigtMSxLRVlCT0FSRF9VTkxPQ0tfUkVHKTsKKwlyZXR1cm4gSVJRX05PTkU7Cit9CitzdGF0aWMgaXJxcmV0dXJuX3QgZGVmYXVsdF9oYW5kbGVyKGludCBsZXYsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcHJpbnRrICgiVW5pbml0aWFsaXNlZCBpbnRlcnJ1cHQgbGV2ZWwgJWRcbiIsIGxldik7CisJcmV0dXJuIElSUV9OT05FOworfQorCitpcnFyZXR1cm5fdCAoKnE0MF9kZWZhdWx0X2hhbmRsZXJbU1lTX0lSUVNdKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikgPSB7CisJIFswXSA9IGRlZmF1bHRfaGFuZGxlciwKKwkgWzFdID0gZGVmYXVsdF9oYW5kbGVyLAorCSBbMl0gPSBkZWZhdWx0X2hhbmRsZXIsCisJIFszXSA9IGRlZmF1bHRfaGFuZGxlciwKKwkgWzRdID0gZGVmYXVsdF9oYW5kbGVyLAorCSBbNV0gPSBkZWZhdWx0X2hhbmRsZXIsCisJIFs2XSA9IGRlZmF1bHRfaGFuZGxlciwKKwkgWzddID0gZGVmYXVsdF9oYW5kbGVyCit9OworCisKK3ZvaWQgcTQwX2VuYWJsZV9pcnEgKHVuc2lnbmVkIGludCBpcnEpCit7CisgIGlmICggaXJxPj01ICYmIGlycTw9MTUgKQorICB7CisgICAgbWV4dF9kaXNhYmxlZC0tOworICAgIGlmIChtZXh0X2Rpc2FibGVkPjApCisJICBwcmludGsoInE0MF9lbmFibGVfaXJxIDogbmVzdGVkIGRpc2FibGUvZW5hYmxlXG4iKTsKKyAgICBpZiAobWV4dF9kaXNhYmxlZD09MCkKKyAgICBtYXN0ZXJfb3V0YigxLEVYVF9FTkFCTEVfUkVHKTsKKyAgICB9Cit9CisKKwordm9pZCBxNDBfZGlzYWJsZV9pcnEgKHVuc2lnbmVkIGludCBpcnEpCit7CisgIC8qIGRpc2FibGUgSVNBIGlxcyA6IG9ubHkgZG8gc29tZXRoaW5nIGlmIHRoZSBkcml2ZXIgaGFzIGJlZW4KKyAgICogdmVyaWZpZWQgdG8gYmUgUTQwICJjb21wYXRpYmxlIiAtIHJpZ2h0IG5vdyBJREUsIE5FMksKKyAgICogQW55IGRyaXZlciBzaG91bGQgbm90IGF0dGVtcHQgdG8gc2xlZXAgYWNyb3NzIGRpc2FibGVfaXJxICEhCisgICAqLworCisgIGlmICggaXJxPj01ICYmIGlycTw9MTUgKSB7CisgICAgbWFzdGVyX291dGIoMCxFWFRfRU5BQkxFX1JFRyk7CisgICAgbWV4dF9kaXNhYmxlZCsrOworICAgIGlmIChtZXh0X2Rpc2FibGVkPjEpIHByaW50aygiZGlzYWJsZV9pcnEgbmVzdGluZyBjb3VudCAlZFxuIixtZXh0X2Rpc2FibGVkKTsKKyAgfQorfQorCit1bnNpZ25lZCBsb25nIHE0MF9wcm9iZV9pcnFfb24gKHZvaWQpCit7CisgIHByaW50aygiaXJxIHByb2Jpbmcgbm90IHdvcmtpbmcgLSByZWNvbmZpZ3VyZSB0aGUgZHJpdmVyIHRvIGF2b2lkIHRoaXNcbiIpOworICByZXR1cm4gLTE7Cit9CitpbnQgcTQwX3Byb2JlX2lycV9vZmYgKHVuc2lnbmVkIGxvbmcgaXJxcykKK3sKKyAgcmV0dXJuIC0xOworfQorLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGNvbXBpbGUtY29tbWFuZDogIm02OGstbGludXgtZ2NjIC1EX19LRVJORUxfXyAtSS9ob21lL3J6L2x4L2xpbnV4LTIuMi42L2luY2x1ZGUgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLXBpcGUgLWZuby1zdHJlbmd0aC1yZWR1Y2UgLWZmaXhlZC1hMiAtbTY4MDQwICAgLWMgLW8gcTQwaW50cy5vIHE0MGludHMuYyIKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3N1bjMvTWFrZWZpbGUgYi9hcmNoL202OGsvc3VuMy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDRmMDY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL3N1bjMvTWFrZWZpbGUKQEAgLTAsMCArMSw3IEBACisjCisjIE1ha2VmaWxlIGZvciBMaW51eCBhcmNoL202OGsvc3VuMyBzb3VyY2UgZGlyZWN0b3J5CisjCisKK29iai15CTo9IHN1bjNfa3N5bXMubyBzdW4zaW50cy5vIHN1bjNkdm1hLm8gc2J1cy5vIGlkcHJvbS5vCisKK29iai0kKENPTkZJR19TVU4zKSArPSBjb25maWcubyBtbXVfZW11Lm8gbGVkcy5vIGR2bWEubyBpbnRlcnNpbC5vCmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9jb25maWcuYyBiL2FyY2gvbTY4ay9zdW4zL2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZDA1YmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvc3VuMy9jb25maWcuYwpAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqICBsaW51eC9hcmNoL202OGsvc3VuMy9jb25maWcuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTYsMTk5NyBQZWtrYSBQaWV0aWt7aW5lbgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorCisjaW5jbHVkZSA8YXNtL29wbGliLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2NvbnRyZWdzLmg+CisjaW5jbHVkZSA8YXNtL21vdnMuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9zdW4zLWhlYWQuaD4KKyNpbmNsdWRlIDxhc20vc3VuM21tdS5oPgorI2luY2x1ZGUgPGFzbS9ydGMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9pbnRlcnNpbC5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9zdW4zaW50cy5oPgorCitleHRlcm4gY2hhciBfdGV4dCwgX2VuZDsKKworY2hhciBzdW4zX3Jlc2VydmVkX3BtZWdbU1VOM19QTUVHU19OVU1dOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBzdW4zX2dldHRpbWVvZmZzZXQodm9pZCk7CitleHRlcm4gaW50IHNob3dfc3VuM19pbnRlcnJ1cHRzIChzdHJ1Y3Qgc2VxX2ZpbGUgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHN1bjNfc2NoZWRfaW5pdChpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSk7CitleHRlcm4gdm9pZCBzdW4zX2dldF9tb2RlbCAoY2hhciogbW9kZWwpOworZXh0ZXJuIHZvaWQgaWRwcm9tX2luaXQgKHZvaWQpOworZXh0ZXJuIGludCBzdW4zX2h3Y2xrKGludCBzZXQsIHN0cnVjdCBydGNfdGltZSAqdCk7CisKK3ZvbGF0aWxlIGNoYXIqIGNsb2NrX3ZhOworZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqIHN1bjNfaW50cmVnOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXZhaWxtZW07Cit1bnNpZ25lZCBsb25nIG51bV9wYWdlczsKKworc3RhdGljIGludCBzdW4zX2dldF9oYXJkd2FyZV9saXN0KGNoYXIgKmJ1ZmZlcikKK3sKKworCWludCBsZW4gPSAwOworCisJbGVuICs9IHNwcmludGYoYnVmZmVyICsgbGVuLCAiUFJPTSBSZXZpc2lvbjpcdCVzXG4iLAorCQkgICAgICAgcm9tdmVjLT5wdl9tb25pZCk7CisKKwlyZXR1cm4gbGVuOworCit9CisKK3ZvaWQgX19pbml0IHN1bjNfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgZW5hYmxlX3JlZ2lzdGVyOworCWludCBpOworCisJbTY4a19tYWNodHlwZT0gTUFDSF9TVU4zOworCW02OGtfY3B1dHlwZSA9IENQVV82ODAyMDsKKwltNjhrX2ZwdXR5cGUgPSBGUFVfNjg4ODE7IC8qIG1jNjg4ODEgYWN0dWFsbHkgKi8KKwltNjhrX21tdXR5cGUgPSBNTVVfU1VOMzsKKwljbG9ja192YSAgICA9ICAgICAgICAgIChjaGFyICopIDB4ZmUwNjAwMDsJLyogZGFyayAgKi8KKwlzdW4zX2ludHJlZyA9ICh1bnNpZ25lZCBjaGFyICopIDB4ZmUwYTAwMDsJLyogbWFnaWMgKi8KKwlzdW4zX2Rpc2FibGVfaW50ZXJydXB0cygpOworCisJcHJvbV9pbml0KCh2b2lkICopTElOVVhfT1BQUk9NX0JFR1ZNKTsKKworCUdFVF9DT05UUk9MX0JZVEUoQUNfU0VOQUJMRSxlbmFibGVfcmVnaXN0ZXIpOworCWVuYWJsZV9yZWdpc3RlciB8PSAweDUwOyAvKiBFbmFibGUgRlBVICovCisJU0VUX0NPTlRST0xfQllURShBQ19TRU5BQkxFLGVuYWJsZV9yZWdpc3Rlcik7CisJR0VUX0NPTlRST0xfQllURShBQ19TRU5BQkxFLGVuYWJsZV9yZWdpc3Rlcik7CisKKwkvKiBUaGlzIGNvZGUgbG9va3Mgc3VzcGljaW91cywgYmVjYXVzZSBpdCBkb2Vzbid0IHN1YnRyYWN0CisgICAgICAgICAgIG1lbW9yeSBiZWxvbmdpbmcgdG8gdGhlIGtlcm5lbCBmcm9tIHRoZSBhdmFpbGFibGUgc3BhY2UgKi8KKworCisJbWVtc2V0KHN1bjNfcmVzZXJ2ZWRfcG1lZywgMCwgc2l6ZW9mKHN1bjNfcmVzZXJ2ZWRfcG1lZykpOworCisJLyogUmVzZXJ2ZSBpbXBvcnRhbnQgUE1FR1MgKi8KKwkvKiBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIHByb2JlZCBpbnN0ZWFkIG9mIGhhcmRjb2RlZCAqLworCisJZm9yIChpPTA7IGk8ODsgaSsrKQkJLyogS2VybmVsIFBNRUdzICovCisJCXN1bjNfcmVzZXJ2ZWRfcG1lZ1tpXSA9IDE7CisKKwlzdW4zX3Jlc2VydmVkX3BtZWdbMjQ3XSA9IDE7CS8qIFJPTSBtYXBwaW5nICAqLworCXN1bjNfcmVzZXJ2ZWRfcG1lZ1syNDhdID0gMTsJLyogQU1EIEV0aGVybmV0ICovCisJc3VuM19yZXNlcnZlZF9wbWVnWzI1MV0gPSAxOwkvKiBWQiBhcmVhICAgICAgKi8KKwlzdW4zX3Jlc2VydmVkX3BtZWdbMjU0XSA9IDE7CS8qIG1haW4gSS9PICAgICAqLworCisJc3VuM19yZXNlcnZlZF9wbWVnWzI0OV0gPSAxOworCXN1bjNfcmVzZXJ2ZWRfcG1lZ1syNTJdID0gMTsKKwlzdW4zX3Jlc2VydmVkX3BtZWdbMjUzXSA9IDE7CisJc2V0X2ZzKEtFUk5FTF9EUyk7Cit9CisKKy8qIFdpdGhvdXQgdGhpcywgQmFkIFRoaW5ncyBoYXBwZW4gd2hlbiBzb21ldGhpbmcgY2FsbHMgYXJjaF9yZXNldC4gKi8KK3N0YXRpYyB2b2lkIHN1bjNfcmVib290ICh2b2lkKQoreworCXByb21fcmVib290ICgidm1saW51eCIpOworfQorCitzdGF0aWMgdm9pZCBzdW4zX2hhbHQgKHZvaWQpCit7CisJcHJvbV9oYWx0ICgpOworfQorCisvKiBzdW4zIGJvb3RtZW0gYWxsb2NhdGlvbiAqLworCit2b2lkIF9faW5pdCBzdW4zX2Jvb3RtZW1fYWxsb2ModW5zaWduZWQgbG9uZyBtZW1vcnlfc3RhcnQsIHVuc2lnbmVkIGxvbmcgbWVtb3J5X2VuZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BhZ2U7CisKKwkvKiBhbGlnbiBzdGFydC9lbmQgdG8gcGFnZSBib3VuZGFyaWVzICovCisJbWVtb3J5X3N0YXJ0ID0gKChtZW1vcnlfc3RhcnQgKyAoUEFHRV9TSVpFLTEpKSAmIFBBR0VfTUFTSyk7CisJbWVtb3J5X2VuZCA9IG1lbW9yeV9lbmQgJiBQQUdFX01BU0s7CisKKwlzdGFydF9wYWdlID0gX19wYShtZW1vcnlfc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisJbnVtX3BhZ2VzID0gX19wYShtZW1vcnlfZW5kKSA+PiBQQUdFX1NISUZUOworCisJaGlnaF9tZW1vcnkgPSAodm9pZCAqKW1lbW9yeV9lbmQ7CisJYXZhaWxtZW0gPSBtZW1vcnlfc3RhcnQ7CisKKwlhdmFpbG1lbSArPSBpbml0X2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksIHN0YXJ0X3BhZ2UsIDAsIG51bV9wYWdlcyk7CisJYXZhaWxtZW0gPSAoYXZhaWxtZW0gKyAoUEFHRV9TSVpFLTEpKSAmIFBBR0VfTUFTSzsKKworCWZyZWVfYm9vdG1lbShfX3BhKGF2YWlsbWVtKSwgbWVtb3J5X2VuZCAtIChhdmFpbG1lbSkpOworfQorCisKK3ZvaWQgX19pbml0IGNvbmZpZ19zdW4zKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBtZW1vcnlfc3RhcnQsIG1lbW9yeV9lbmQ7CisKKwlwcmludGsoIkFSQ0g6IFNVTjNcbiIpOworCWlkcHJvbV9pbml0KCk7CisKKwkvKiBTdWJ0cmFjdCBrZXJuZWwgbWVtb3J5IGZyb20gYXZhaWxhYmxlIG1lbW9yeSAqLworCisgICAgICAgIG1hY2hfc2NoZWRfaW5pdCAgICAgID0gIHN1bjNfc2NoZWRfaW5pdDsKKyAgICAgICAgbWFjaF9pbml0X0lSUSAgICAgICAgPSAgc3VuM19pbml0X0lSUTsKKyAgICAgICAgbWFjaF9kZWZhdWx0X2hhbmRsZXIgPSAmc3VuM19kZWZhdWx0X2hhbmRsZXI7CisgICAgICAgIG1hY2hfcmVxdWVzdF9pcnEgICAgID0gIHN1bjNfcmVxdWVzdF9pcnE7CisgICAgICAgIG1hY2hfZnJlZV9pcnEgICAgICAgID0gIHN1bjNfZnJlZV9pcnE7CisJZW5hYmxlX2lycQkgICAgID0gIHN1bjNfZW5hYmxlX2lycTsKKyAgICAgICAgZGlzYWJsZV9pcnEJICAgICA9ICBzdW4zX2Rpc2FibGVfaXJxOworCW1hY2hfcHJvY2Vzc19pbnQgICAgID0gIHN1bjNfcHJvY2Vzc19pbnQ7CisgICAgICAgIG1hY2hfZ2V0X2lycV9saXN0ICAgID0gIHNob3dfc3VuM19pbnRlcnJ1cHRzOworICAgICAgICBtYWNoX3Jlc2V0ICAgICAgICAgICA9ICBzdW4zX3JlYm9vdDsKKwltYWNoX2dldHRpbWVvZmZzZXQgICA9ICBzdW4zX2dldHRpbWVvZmZzZXQ7CisJbWFjaF9nZXRfbW9kZWwJICAgICA9ICBzdW4zX2dldF9tb2RlbDsKKwltYWNoX2h3Y2xrICAgICAgICAgICA9ICBzdW4zX2h3Y2xrOworCW1hY2hfaGFsdAkgICAgID0gIHN1bjNfaGFsdDsKKwltYWNoX2dldF9oYXJkd2FyZV9saXN0ID0gc3VuM19nZXRfaGFyZHdhcmVfbGlzdDsKKyNpZiBkZWZpbmVkKENPTkZJR19EVU1NWV9DT05TT0xFKQorCWNvbnN3aXRjaHAJICAgICA9ICZkdW1teV9jb247CisjZW5kaWYKKworCW1lbW9yeV9zdGFydCA9ICgoKChpbnQpJl9lbmQpICsgMHgyMDAwKSAmIH4weDFmZmYpOworLy8gUFJPTSBzZWVtcyB0byB3YW50IHRoZSBsYXN0IGNvdXBsZSBvZiBwaHlzaWNhbCBwYWdlcy4gLS1tCisJbWVtb3J5X2VuZCAgID0gKihyb212ZWMtPnB2X3N1bjNtZW0pICsgUEFHRV9PRkZTRVQgLSAyKlBBR0VfU0laRTsKKworCW02OGtfbnVtX21lbW9yeT0xOworICAgICAgICBtNjhrX21lbW9yeVswXS5zaXplPSoocm9tdmVjLT5wdl9zdW4zbWVtKTsKKworCXN1bjNfYm9vdG1lbV9hbGxvYyhtZW1vcnlfc3RhcnQsIG1lbW9yeV9lbmQpOworfQorCit2b2lkIF9faW5pdCBzdW4zX3NjaGVkX2luaXQoaXJxcmV0dXJuX3QgKCp0aW1lcl9yb3V0aW5lKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikpCit7CisJc3VuM19kaXNhYmxlX2ludGVycnVwdHMoKTsKKyAgICAgICAgaW50ZXJzaWxfY2xvY2stPmNtZF9yZWc9KElOVEVSU0lMX1JVTnxJTlRFUlNJTF9JTlRfRElTQUJMRXxJTlRFUlNJTF8yNEhfTU9ERSk7CisgICAgICAgIGludGVyc2lsX2Nsb2NrLT5pbnRfcmVnPUlOVEVSU0lMX0haXzEwMF9NQVNLOworCWludGVyc2lsX2NsZWFyKCk7CisgICAgICAgIHN1bjNfZW5hYmxlX2lycSg1KTsKKyAgICAgICAgaW50ZXJzaWxfY2xvY2stPmNtZF9yZWc9KElOVEVSU0lMX1JVTnxJTlRFUlNJTF9JTlRfRU5BQkxFfElOVEVSU0lMXzI0SF9NT0RFKTsKKyAgICAgICAgc3VuM19lbmFibGVfaW50ZXJydXB0cygpOworICAgICAgICBpbnRlcnNpbF9jbGVhcigpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9kdm1hLmMgYi9hcmNoL202OGsvc3VuMy9kdm1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJiMzA5MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9zdW4zL2R2bWEuYwpAQCAtMCwwICsxLDcxIEBACisvKgorICogbGludXgvYXJjaC9tNjhrL3N1bjMvZHZtYS5jCisgKgorICogV3JpdHRlbiBieSBTYW0gQ3JlYXNleQorICoKKyAqIFN1bjMgSU9NTVUgcm91dGluZXMgdXNlZCBmb3IgZHZtYSBhY2Nlc3Nlcy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3N1bjNtbXUuaD4KKyNpbmNsdWRlIDxhc20vZHZtYS5oPgorCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHB0ZWxpc3RbMTIwXTsKKworaW5saW5lIHVuc2lnbmVkIGxvbmcgZHZtYV9wYWdlKHVuc2lnbmVkIGxvbmcga2FkZHIsIHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBwdGU7CisJdW5zaWduZWQgbG9uZyBqOworCXB0ZV90IHB0ZXA7CisKKwlqID0gKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopa2FkZHI7CisJKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopa2FkZHIgPSBqOworCisJcHRlcCA9IHBmbl9wdGUodmlydF90b19wZm4oa2FkZHIpLCBQQUdFX0tFUk5FTCk7CisJcHRlID0gcHRlX3ZhbChwdGVwKTsKKy8vCQlwcmludGsoImR2bWFfcmVtYXA6IGFkZHIgJWx4IC0+ICVseCBwdGUgJTA4bHggbGVuICV4XG4iLAorLy8JCSAgICAgICBrYWRkciwgdmFkZHIsIHB0ZSwgbGVuKTsKKwlpZihwdGVsaXN0Wyh2YWRkciAmIDB4ZmYwMDApID4+IFBBR0VfU0hJRlRdICE9IHB0ZSkgeworCQlzdW4zX3B1dF9wdGUodmFkZHIsIHB0ZSk7CisJCXB0ZWxpc3RbKHZhZGRyICYgMHhmZjAwMCkgPj4gUEFHRV9TSElGVF0gPSBwdGU7CisJfQorCisJcmV0dXJuICh2YWRkciArIChrYWRkciAmIH5QQUdFX01BU0spKTsKKworfQorCitpbnQgZHZtYV9tYXBfaW9tbXUodW5zaWduZWQgbG9uZyBrYWRkciwgdW5zaWduZWQgbG9uZyBiYWRkciwKKwkJCSAgICAgIGludCBsZW4pCit7CisKKwl1bnNpZ25lZCBsb25nIGVuZDsKKwl1bnNpZ25lZCBsb25nIHZhZGRyOworCisJdmFkZHIgPSBkdm1hX2J0b3YoYmFkZHIpOworCisJZW5kID0gdmFkZHIgKyBsZW47CisKKwl3aGlsZSh2YWRkciA8IGVuZCkgeworCQlkdm1hX3BhZ2Uoa2FkZHIsIHZhZGRyKTsKKwkJa2FkZHIgKz0gUEFHRV9TSVpFOworCQl2YWRkciArPSBQQUdFX1NJWkU7CisJfQorCisJcmV0dXJuIDA7CisKK30KKwordm9pZCBzdW4zX2R2bWFfaW5pdCh2b2lkKQoreworCisJbWVtc2V0KHB0ZWxpc3QsIDAsIHNpemVvZihwdGVsaXN0KSk7CisKKworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3N1bjMvaWRwcm9tLmMgYi9hcmNoL202OGsvc3VuMy9pZHByb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmMxZmVlNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9zdW4zL2lkcHJvbS5jCkBAIC0wLDAgKzEsMTI5IEBACisvKiAkSWQ6IGlkcHJvbS5jLHYgMS4yMiAxOTk2LzExLzEzIDA1OjA5OjI1IGRhdmVtIEV4cCAkCisgKiBpZHByb20uYzogUm91dGluZXMgdG8gbG9hZCB0aGUgaWRwcm9tIGludG8ga2VybmVsIGFkZHJlc3NlcyBhbmQKKyAqICAgICAgICAgICBpbnRlcnByZXQgdGhlIGRhdGEgY29udGFpbmVkIHdpdGhpbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQorICogU3VuMy8zeCBtb2RlbHMgYWRkZWQgYnkgRGF2aWQgTW9ucm8gKGRhdmlkbUBwc3JnLmNzLnVzeWQuZWR1LmF1KQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorI2luY2x1ZGUgPGFzbS9pZHByb20uaD4KKyNpbmNsdWRlIDxhc20vbWFjaGluZXMuaD4gIC8qIEZ1biB3aXRoIFN1biByZWxlYXNlZCBhcmNoaXRlY3R1cmVzLiAqLworCitzdHJ1Y3QgaWRwcm9tICppZHByb207CitzdGF0aWMgc3RydWN0IGlkcHJvbSBpZHByb21fYnVmZmVyOworCisvKiBIZXJlIGlzIHRoZSBtYXN0ZXIgdGFibGUgb2YgU3VuIG1hY2hpbmVzIHdoaWNoIHVzZSBzb21lIGltcGxlbWVudGF0aW9uCisgKiBvZiB0aGUgU3BhcmMgQ1BVIGFuZCBoYXZlIGEgbWVhbmluZ2Z1bCBJRFBST00gbWFjaHR5cGUgdmFsdWUgdGhhdCB3ZQorICoga25vdyBhYm91dC4gIFNlZSBhc20tc3BhcmMvbWFjaGluZXMuaCBmb3IgZW1waXJpY2FsIGNvbnN0YW50cy4KKyAqLworc3RydWN0IFN1bl9NYWNoaW5lX01vZGVscyBTdW5fTWFjaGluZXNbTlVNX1NVTl9NQUNISU5FU10gPSB7CisvKiBGaXJzdCwgU3VuMydzICovCisgICAgeyAubmFtZSA9ICJTdW4gMy8xNjAgU2VyaWVzIiwJLmlkX21hY2h0eXBlID0gKFNNX1NVTjMgfCBTTV8zXzE2MCkgfSwKKyAgICB7IC5uYW1lID0gIlN1biAzLzUwIiwJCS5pZF9tYWNodHlwZSA9IChTTV9TVU4zIHwgU01fM181MCkgfSwKKyAgICB7IC5uYW1lID0gIlN1biAzLzI2MCBTZXJpZXMiLAkuaWRfbWFjaHR5cGUgPSAoU01fU1VOMyB8IFNNXzNfMjYwKSB9LAorICAgIHsgLm5hbWUgPSAiU3VuIDMvMTEwIFNlcmllcyIsCS5pZF9tYWNodHlwZSA9IChTTV9TVU4zIHwgU01fM18xMTApIH0sCisgICAgeyAubmFtZSA9ICJTdW4gMy82MCIsCQkuaWRfbWFjaHR5cGUgPSAoU01fU1VOMyB8IFNNXzNfNjApIH0sCisgICAgeyAubmFtZSA9ICJTdW4gMy9FIiwJCS5pZF9tYWNodHlwZSA9IChTTV9TVU4zIHwgU01fM19FKSB9LAorLyogTm93LCBTdW4zeCdzICovCisgICAgeyAubmFtZSA9ICJTdW4gMy80NjAgU2VyaWVzIiwJLmlkX21hY2h0eXBlID0gKFNNX1NVTjNYIHwgU01fM180NjApIH0sCisgICAgeyAubmFtZSA9ICJTdW4gMy84MCIsCQkuaWRfbWFjaHR5cGUgPSAoU01fU1VOM1ggfCBTTV8zXzgwKSB9LAorLyogVGhlbiwgU3VuNCdzICovCisvLyB7IC5uYW1lID0gIlN1biA0LzEwMCBTZXJpZXMiLAkuaWRfbWFjaHR5cGUgPSAoU01fU1VONCB8IFNNXzRfMTEwKSB9LAorLy8geyAubmFtZSA9ICJTdW4gNC8yMDAgU2VyaWVzIiwJLmlkX21hY2h0eXBlID0gKFNNX1NVTjQgfCBTTV80XzI2MCkgfSwKKy8vIHsgLm5hbWUgPSAiU3VuIDQvMzAwIFNlcmllcyIsCS5pZF9tYWNodHlwZSA9IChTTV9TVU40IHwgU01fNF8zMzApIH0sCisvLyB7IC5uYW1lID0gIlN1biA0LzQwMCBTZXJpZXMiLAkuaWRfbWFjaHR5cGUgPSAoU01fU1VONCB8IFNNXzRfNDcwKSB9LAorLyogQW5kIG5vdywgU3VuNGMncyAqLworLy8geyAubmFtZSA9ICJTdW40YyBTcGFyY1N0YXRpb24gMSIsCS5pZF9tYWNodHlwZSA9IChTTV9TVU40QyB8IFNNXzRDX1NTMSkgfSwKKy8vIHsgLm5hbWUgPSAiU3VuNGMgU3BhcmNTdGF0aW9uIElQQyIsCS5pZF9tYWNodHlwZSA9IChTTV9TVU40QyB8IFNNXzRDX0lQQykgfSwKKy8vIHsgLm5hbWUgPSAiU3VuNGMgU3BhcmNTdGF0aW9uIDErIiwJLmlkX21hY2h0eXBlID0gKFNNX1NVTjRDIHwgU01fNENfU1MxUExVUykgfSwKKy8vIHsgLm5hbWUgPSAiU3VuNGMgU3BhcmNTdGF0aW9uIFNMQyIsCS5pZF9tYWNodHlwZSA9IChTTV9TVU40QyB8IFNNXzRDX1NMQykgfSwKKy8vIHsgLm5hbWUgPSAiU3VuNGMgU3BhcmNTdGF0aW9uIDIiLAkuaWRfbWFjaHR5cGUgPSAoU01fU1VONEMgfCBTTV80Q19TUzIpIH0sCisvLyB7IC5uYW1lID0gIlN1bjRjIFNwYXJjU3RhdGlvbiBFTEMiLAkuaWRfbWFjaHR5cGUgPSAoU01fU1VONEMgfCBTTV80Q19FTEMpIH0sCisvLyB7IC5uYW1lID0gIlN1bjRjIFNwYXJjU3RhdGlvbiBJUFgiLAkuaWRfbWFjaHR5cGUgPSAoU01fU1VONEMgfCBTTV80Q19JUFgpIH0sCisvKiBGaW5hbGx5LCBlYXJseSBTdW40bSdzICovCisvLyB7IC5uYW1lID0gIlN1bjRtIFNwYXJjU3lzdGVtNjAwIiwJLmlkX21hY2h0eXBlID0gKFNNX1NVTjRNIHwgU01fNE1fU1M2MCkgfSwKKy8vIHsgLm5hbWUgPSAiU3VuNG0gU3BhcmNTdGF0aW9uMTAvMjAiLAkuaWRfbWFjaHR5cGUgPSAoU01fU1VONE0gfCBTTV80TV9TUzUwKSB9LAorLy8geyAubmFtZSA9ICJTdW40bSBTcGFyY1N0YXRpb241IiwJLmlkX21hY2h0eXBlID0gKFNNX1NVTjRNIHwgU01fNE1fU1M0MCkgfSwKKy8qIE9uZSBlbnRyeSBmb3IgdGhlIE9CUCBhcmNoJ3Mgd2hpY2ggYXJlIHN1bjRkLCBzdW40ZSwgYW5kIG5ld2VyIHN1bjRtJ3MgKi8KKy8vIHsgLm5hbWUgPSAiU3VuNE0gT0JQIGJhc2VkIHN5c3RlbSIsCS5pZF9tYWNodHlwZSA9IChTTV9TVU40TV9PQlAgfCAweDApIH0KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBkaXNwbGF5X3N5c3RlbV90eXBlKHVuc2lnbmVkIGNoYXIgbWFjaHR5cGUpCit7CisJcmVnaXN0ZXIgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1NVTl9NQUNISU5FUzsgaSsrKSB7CisJCWlmKFN1bl9NYWNoaW5lc1tpXS5pZF9tYWNodHlwZSA9PSBtYWNodHlwZSkgeworCQkJaWYgKG1hY2h0eXBlICE9IChTTV9TVU40TV9PQlAgfCAweDAwKSkKKwkJCQlwcmludGsoIlRZUEU6ICVzXG4iLCBTdW5fTWFjaGluZXNbaV0ubmFtZSk7CisJCQllbHNlIHsKKyNpZiAwCisJCQkJcHJvbV9nZXRwcm9wZXJ0eShwcm9tX3Jvb3Rfbm9kZSwgImJhbm5lci1uYW1lIiwKKwkJCQkJCSBzeXNuYW1lLCBzaXplb2Yoc3lzbmFtZSkpOworCQkJCXByaW50aygiVFlQRTogJXNcbiIsIHN5c25hbWUpOworI2VuZGlmCisJCQl9CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlwcm9tX3ByaW50ZigiSURQUk9NOiBCb2d1cyBpZF9tYWNodHlwZSB2YWx1ZSwgMHgleFxuIiwgbWFjaHR5cGUpOworCXByb21faGFsdCgpOworfQorCit2b2lkIHN1bjNfZ2V0X21vZGVsKHVuc2lnbmVkIGNoYXIqIG1vZGVsKQoreworCXJlZ2lzdGVyIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9TVU5fTUFDSElORVM7IGkrKykgeworCQlpZihTdW5fTWFjaGluZXNbaV0uaWRfbWFjaHR5cGUgPT0gaWRwcm9tLT5pZF9tYWNodHlwZSkgeworCQkgICAgICAgIHN0cmNweShtb2RlbCwgU3VuX01hY2hpbmVzW2ldLm5hbWUpOworCQkJcmV0dXJuOworCQl9CisJfQorfQorCisKKworLyogQ2FsY3VsYXRlIHRoZSBJRFBST00gY2hlY2tzdW0gKHhvciBvZiB0aGUgZGF0YSBieXRlcykuICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBfX2luaXQgY2FsY19pZHByb21fY2tzdW0oc3RydWN0IGlkcHJvbSAqaWRwcm9tKQoreworCXVuc2lnbmVkIGNoYXIgY2tzdW0sIGksICpwdHIgPSAodW5zaWduZWQgY2hhciAqKWlkcHJvbTsKKworCWZvciAoaSA9IGNrc3VtID0gMDsgaSA8PSAweDBFOyBpKyspCisJCWNrc3VtIF49ICpwdHIrKzsKKworCXJldHVybiBja3N1bTsKK30KKworLyogQ3JlYXRlIGEgbG9jYWwgSURQUk9NIGNvcHksIHZlcmlmeSBpbnRlZ3JpdHksIGFuZCBkaXNwbGF5IGluZm9ybWF0aW9uLiAqLwordm9pZCBfX2luaXQgaWRwcm9tX2luaXQodm9pZCkKK3sKKwlwcm9tX2dldF9pZHByb20oKGNoYXIgKikgJmlkcHJvbV9idWZmZXIsIHNpemVvZihpZHByb21fYnVmZmVyKSk7CisKKwlpZHByb20gPSAmaWRwcm9tX2J1ZmZlcjsKKworCWlmIChpZHByb20tPmlkX2Zvcm1hdCAhPSAweDAxKSAgeworCQlwcm9tX3ByaW50ZigiSURQUk9NOiBVbmtub3duIGZvcm1hdCB0eXBlIVxuIik7CisJCXByb21faGFsdCgpOworCX0KKworCWlmIChpZHByb20tPmlkX2Nrc3VtICE9IGNhbGNfaWRwcm9tX2Nrc3VtKGlkcHJvbSkpIHsKKwkJcHJvbV9wcmludGYoIklEUFJPTTogQ2hlY2tzdW0gZmFpbHVyZSAobnZyYW09JXgsIGNhbGM9JXgpIVxuIiwKKwkJCSAgICBpZHByb20tPmlkX2Nrc3VtLCBjYWxjX2lkcHJvbV9ja3N1bShpZHByb20pKTsKKwkJcHJvbV9oYWx0KCk7CisJfQorCisJZGlzcGxheV9zeXN0ZW1fdHlwZShpZHByb20tPmlkX21hY2h0eXBlKTsKKworCXByaW50aygiRXRoZXJuZXQgYWRkcmVzczogJXg6JXg6JXg6JXg6JXg6JXhcbiIsCisJCSAgICBpZHByb20tPmlkX2V0aGFkZHJbMF0sIGlkcHJvbS0+aWRfZXRoYWRkclsxXSwKKwkJICAgIGlkcHJvbS0+aWRfZXRoYWRkclsyXSwgaWRwcm9tLT5pZF9ldGhhZGRyWzNdLAorCQkgICAgaWRwcm9tLT5pZF9ldGhhZGRyWzRdLCBpZHByb20tPmlkX2V0aGFkZHJbNV0pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3N1bjMvaW50ZXJzaWwuYyBiL2FyY2gvbTY4ay9zdW4zL2ludGVyc2lsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIzNTlkNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9zdW4zL2ludGVyc2lsLmMKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIGFyY2gvbTY4ay9zdW4zL2ludGVyc2lsLmMKKyAqCisgKiBiYXNpYyByb3V0aW5lcyBmb3IgYWNjZXNzaW5nIHRoZSBpbnRlcnNpbCBjbG9jayB3aXRoaW4gdGhlIHN1bjMgbWFjaGluZXMKKyAqCisgKiBzdGFydGVkIDExLzEyLzE5OTkgU2FtIENyZWFzZXkKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorCisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxhc20vcnRjLmg+CisjaW5jbHVkZSA8YXNtL2ludGVyc2lsLmg+CisKKworLyogYml0cyB0byBzZXQgZm9yIHN0YXJ0L3J1biBvZiB0aGUgaW50ZXJzaWwgKi8KKyNkZWZpbmUgU1RPUF9WQUwgKElOVEVSU0lMX1NUT1AgfCBJTlRFUlNJTF9JTlRfRU5BQkxFIHwgSU5URVJTSUxfMjRIX01PREUpCisjZGVmaW5lIFNUQVJUX1ZBTCAoSU5URVJTSUxfUlVOIHwgSU5URVJTSUxfSU5UX0VOQUJMRSB8IElOVEVSU0lMXzI0SF9NT0RFKQorCisvKiBkb2VzIHRoaXMgbmVlZCB0byBiZSBpbXBsZW1lbnRlZD8gKi8KK3Vuc2lnbmVkIGxvbmcgc3VuM19nZXR0aW1lb2Zmc2V0KHZvaWQpCit7CisgIHJldHVybiAxOworfQorCisKKy8qIGdldC9zZXQgaHdjbG9jayAqLworCitpbnQgc3VuM19od2NsayhpbnQgc2V0LCBzdHJ1Y3QgcnRjX3RpbWUgKnQpCit7CisJdm9sYXRpbGUgc3RydWN0IGludGVyc2lsX2R0ICp0b2RpbnRlcnNpbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisgICAgICAgIHRvZGludGVyc2lsID0gKHN0cnVjdCBpbnRlcnNpbF9kdCAqKSAmaW50ZXJzaWxfY2xvY2stPmNvdW50ZXI7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlpbnRlcnNpbF9jbG9jay0+Y21kX3JlZyA9IFNUT1BfVkFMOworCisJLyogc2V0IG9yIHJlYWQgdGhlIGNsb2NrICovCisJaWYoc2V0KSB7CisJCXRvZGludGVyc2lsLT5jc2VjID0gMDsKKwkJdG9kaW50ZXJzaWwtPmhvdXIgPSB0LT50bV9ob3VyOworCQl0b2RpbnRlcnNpbC0+bWludXRlID0gdC0+dG1fbWluOworCQl0b2RpbnRlcnNpbC0+c2Vjb25kID0gdC0+dG1fc2VjOworCQl0b2RpbnRlcnNpbC0+bW9udGggPSB0LT50bV9tb247CisJCXRvZGludGVyc2lsLT5kYXkgPSB0LT50bV9tZGF5OworCQl0b2RpbnRlcnNpbC0+eWVhciA9IHQtPnRtX3llYXIgLSA2ODsKKwkJdG9kaW50ZXJzaWwtPndlZWtkYXkgPSB0LT50bV93ZGF5OworCX0gZWxzZSB7CisJCS8qIHJlYWQgY2xvY2sgKi8KKwkJdC0+dG1fc2VjID0gdG9kaW50ZXJzaWwtPmNzZWM7CisJCXQtPnRtX2hvdXIgPSB0b2RpbnRlcnNpbC0+aG91cjsKKwkJdC0+dG1fbWluID0gdG9kaW50ZXJzaWwtPm1pbnV0ZTsKKwkJdC0+dG1fc2VjID0gdG9kaW50ZXJzaWwtPnNlY29uZDsKKwkJdC0+dG1fbW9uID0gdG9kaW50ZXJzaWwtPm1vbnRoOworCQl0LT50bV9tZGF5ID0gdG9kaW50ZXJzaWwtPmRheTsKKwkJdC0+dG1feWVhciA9IHRvZGludGVyc2lsLT55ZWFyICsgNjg7CisJCXQtPnRtX3dkYXkgPSB0b2RpbnRlcnNpbC0+d2Vla2RheTsKKwl9CisKKwlpbnRlcnNpbF9jbG9jay0+Y21kX3JlZyA9IFNUQVJUX1ZBTDsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiAwOworCit9CisKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL2xlZHMuYyBiL2FyY2gvbTY4ay9zdW4zL2xlZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2U5NDg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL3N1bjMvbGVkcy5jCkBAIC0wLDAgKzEsMTMgQEAKKyNpbmNsdWRlIDxhc20vY29udHJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vc3VuM21tdS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCit2b2lkIHN1bjNfbGVkcyh1bnNpZ25lZCBjaGFyIGJ5dGUpCit7CisJdW5zaWduZWQgY2hhciBkZmM7CisKKwlHRVRfREZDKGRmYyk7CisgICAgICAgIFNFVF9ERkMoRkNfQ09OVFJPTCk7CisJU0VUX0NPTlRST0xfQllURShBQ19MRURTLGJ5dGUpOworCVNFVF9ERkMoZGZjKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL21tdV9lbXUuYyBiL2FyY2gvbTY4ay9zdW4zL21tdV9lbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTBlM2EyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL3N1bjMvbW11X2VtdS5jCkBAIC0wLDAgKzEsNDI3IEBACisvKgorKiogVGFibGV3YWxrIE1NVSBlbXVsYXRvcgorKioKKyoqIGJ5IFRvc2hpeWFzdSBNb3JpdGEKKyoqCisqKiBTdGFydGVkIDEvMTYvOTggQCAyOjIyIGFtCisqLworCisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3N1bjNtbXUuaD4KKyNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9kdm1hLmg+CisKK2V4dGVybiB2b2lkIHByb21fcmVib290IChjaGFyICopIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKKworI3VuZGVmIERFQlVHX01NVV9FTVUKKyNkZWZpbmUgREVCVUdfUFJPTV9NQVBTCisKKy8qCisqKiBEZWZpbmVzCisqLworCisjZGVmaW5lIENPTlRFWFRTX05VTQkJOAorI2RlZmluZSBTRUdNQVBTX1BFUl9DT05URVhUX05VTSAyMDQ4CisjZGVmaW5lIFBBR0VTX1BFUl9TRUdNRU5UCTE2CisjZGVmaW5lIFBNRUdTX05VTQkJMjU2CisjZGVmaW5lIFBNRUdfTUFTSwkJMHhGRgorCisvKgorKiogR2xvYmFscworKi8KKwordW5zaWduZWQgbG9uZyB2bWFsbG9jX2VuZDsKK0VYUE9SVF9TWU1CT0wodm1hbGxvY19lbmQpOworCit1bnNpZ25lZCBsb25nIHBtZWdfdmFkZHJbUE1FR1NfTlVNXTsKK3Vuc2lnbmVkIGNoYXIgcG1lZ19hbGxvY1tQTUVHU19OVU1dOwordW5zaWduZWQgY2hhciBwbWVnX2N0eFtQTUVHU19OVU1dOworCisvKiBwb2ludGVycyB0byB0aGUgbW0gc3RydWN0cyBmb3IgZWFjaCB0YXNrIGluIGVhY2gKKyAgIGNvbnRleHQuIDB4ZmZmZmZmZmYgaXMgYSBtYXJrZXIgZm9yIGtlcm5lbCBjb250ZXh0ICovCitzdHJ1Y3QgbW1fc3RydWN0ICpjdHhfYWxsb2NbQ09OVEVYVFNfTlVNXSA9IHsKKyAgICBbMF0gPSAoc3RydWN0IG1tX3N0cnVjdCAqKTB4ZmZmZmZmZmYKK307CisKKy8qIGhhcyB0aGlzIGNvbnRleHQgYmVlbiBtbWRyb3AnZD8gKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGN0eF9hdmFpbCA9IENPTlRFWFRTX05VTS0xOworCisvKiBhcnJheSBvZiBwYWdlcyB0byBiZSBtYXJrZWQgb2ZmIGZvciB0aGUgcm9tIHdoZW4gd2UgZG8gbWVtX2luaXQgbGF0ZXIgKi8KKy8qIDI1NiBwYWdlcyBsZXRzIHRoZSByb20gdGFrZSB1cCB0byAybWIgb2YgcGh5c2ljYWwgcmFtLi4gIEkgcmVhbGx5CisgICBob3BlIGl0IG5ldmVyIHdhbnRzIG1vdGUgdGhhbiB0aGF0LiAqLwordW5zaWduZWQgbG9uZyByb21fcGFnZXNbMjU2XTsKKworLyogUHJpbnQgYSBQVEUgdmFsdWUgaW4gc3ltYm9saWMgZm9ybS4gRm9yIGRlYnVnZ2luZy4gKi8KK3ZvaWQgcHJpbnRfcHRlIChwdGVfdCBwdGUpCit7CisjaWYgMAorCS8qIFZlcmJvc2UgdmVyc2lvbi4gKi8KKwl1bnNpZ25lZCBsb25nIHZhbCA9IHB0ZV92YWwgKHB0ZSk7CisJcHJpbnRrICgiIHB0ZT0lbHggW2FkZHI9JWx4IiwKKwkJdmFsLCAodmFsICYgU1VOM19QQUdFX1BHTlVNX01BU0spIDw8IFBBR0VfU0hJRlQpOworCWlmICh2YWwgJiBTVU4zX1BBR0VfVkFMSUQpCXByaW50ayAoIiB2YWxpZCIpOworCWlmICh2YWwgJiBTVU4zX1BBR0VfV1JJVEVBQkxFKQlwcmludGsgKCIgd3JpdGUiKTsKKwlpZiAodmFsICYgU1VOM19QQUdFX1NZU1RFTSkJcHJpbnRrICgiIHN5cyIpOworCWlmICh2YWwgJiBTVU4zX1BBR0VfTk9DQUNIRSkJcHJpbnRrICgiIG5vY2FjaGUiKTsKKwlpZiAodmFsICYgU1VOM19QQUdFX0FDQ0VTU0VEKQlwcmludGsgKCIgYWNjZXNzZWQiKTsKKwlpZiAodmFsICYgU1VOM19QQUdFX01PRElGSUVEKQlwcmludGsgKCIgbW9kaWZpZWQiKTsKKwlzd2l0Y2ggKHZhbCAmIFNVTjNfUEFHRV9UWVBFX01BU0spIHsKKwkJY2FzZSBTVU4zX1BBR0VfVFlQRV9NRU1PUlk6IHByaW50ayAoIiBtZW1vcnkiKTsgYnJlYWs7CisJCWNhc2UgU1VOM19QQUdFX1RZUEVfSU86ICAgICBwcmludGsgKCIgaW8iKTsgICAgIGJyZWFrOworCQljYXNlIFNVTjNfUEFHRV9UWVBFX1ZNRTE2OiAgcHJpbnRrICgiIHZtZTE2Iik7ICBicmVhazsKKwkJY2FzZSBTVU4zX1BBR0VfVFlQRV9WTUUzMjogIHByaW50ayAoIiB2bWUzMiIpOyAgYnJlYWs7CisJfQorCXByaW50ayAoIl1cbiIpOworI2Vsc2UKKwkvKiBUZXJzZSB2ZXJzaW9uLiBNb3JlIGxpa2VseSB0byBmaXQgb24gYSBsaW5lLiAqLworCXVuc2lnbmVkIGxvbmcgdmFsID0gcHRlX3ZhbCAocHRlKTsKKwljaGFyIGZsYWdzWzddLCAqdHlwZTsKKworCWZsYWdzWzBdID0gKHZhbCAmIFNVTjNfUEFHRV9WQUxJRCkgICAgID8gJ3YnIDogJy0nOworCWZsYWdzWzFdID0gKHZhbCAmIFNVTjNfUEFHRV9XUklURUFCTEUpID8gJ3cnIDogJy0nOworCWZsYWdzWzJdID0gKHZhbCAmIFNVTjNfUEFHRV9TWVNURU0pICAgID8gJ3MnIDogJy0nOworCWZsYWdzWzNdID0gKHZhbCAmIFNVTjNfUEFHRV9OT0NBQ0hFKSAgID8gJ3gnIDogJy0nOworCWZsYWdzWzRdID0gKHZhbCAmIFNVTjNfUEFHRV9BQ0NFU1NFRCkgID8gJ2EnIDogJy0nOworCWZsYWdzWzVdID0gKHZhbCAmIFNVTjNfUEFHRV9NT0RJRklFRCkgID8gJ20nIDogJy0nOworCWZsYWdzWzZdID0gJ1wwJzsKKworCXN3aXRjaCAodmFsICYgU1VOM19QQUdFX1RZUEVfTUFTSykgeworCQljYXNlIFNVTjNfUEFHRV9UWVBFX01FTU9SWTogdHlwZSA9ICJtZW1vcnkiOyBicmVhazsKKwkJY2FzZSBTVU4zX1BBR0VfVFlQRV9JTzogICAgIHR5cGUgPSAiaW8iICAgIDsgYnJlYWs7CisJCWNhc2UgU1VOM19QQUdFX1RZUEVfVk1FMTY6ICB0eXBlID0gInZtZTE2IiA7IGJyZWFrOworCQljYXNlIFNVTjNfUEFHRV9UWVBFX1ZNRTMyOiAgdHlwZSA9ICJ2bWUzMiIgOyBicmVhazsKKwkJZGVmYXVsdDogdHlwZSA9ICJ1bmtub3duPyI7IGJyZWFrOworCX0KKworCXByaW50ayAoIiBwdGU9JTA4bHggWyUwN2x4ICVzICVzXVxuIiwKKwkJdmFsLCAodmFsICYgU1VOM19QQUdFX1BHTlVNX01BU0spIDw8IFBBR0VfU0hJRlQsIGZsYWdzLCB0eXBlKTsKKyNlbmRpZgorfQorCisvKiBQcmludCB0aGUgUFRFIHZhbHVlIGZvciBhIGdpdmVuIHZpcnR1YWwgYWRkcmVzcy4gRm9yIGRlYnVnZ2luZy4gKi8KK3ZvaWQgcHJpbnRfcHRlX3ZhZGRyICh1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCXByaW50ayAoIiB2YWRkcj0lbHggWyUwMmx4XSIsIHZhZGRyLCBzdW4zX2dldF9zZWdtYXAgKHZhZGRyKSk7CisJcHJpbnRfcHRlIChfX3B0ZSAoc3VuM19nZXRfcHRlICh2YWRkcikpKTsKK30KKworLyoKKyAqIEluaXRpYWxpc2UgdGhlIE1NVSBlbXVsYXRvci4KKyAqLwordm9pZCBtbXVfZW11X2luaXQodW5zaWduZWQgbG9uZyBib290bWVtX2VuZCkKK3sKKwl1bnNpZ25lZCBsb25nIHNlZywgbnVtOworCWludCBpLGo7CisKKwltZW1zZXQocm9tX3BhZ2VzLCAwLCBzaXplb2Yocm9tX3BhZ2VzKSk7CisJbWVtc2V0KHBtZWdfdmFkZHIsIDAsIHNpemVvZihwbWVnX3ZhZGRyKSk7CisJbWVtc2V0KHBtZWdfYWxsb2MsIDAsIHNpemVvZihwbWVnX2FsbG9jKSk7CisJbWVtc2V0KHBtZWdfY3R4LCAwLCBzaXplb2YocG1lZ19jdHgpKTsKKworCS8qIHBtZWcgYWxpZ24gdGhlIGVuZCBvZiBib290bWVtLCBhZGRpbmcgYW5vdGhlciBwbWVnLAorCSAqIGxhdGVyIGJvb3RtZW0gYWxsb2NhdGlvbnMgd2lsbCBsaWtlbHkgbmVlZCBpdCAqLworCWJvb3RtZW1fZW5kID0gKGJvb3RtZW1fZW5kICsgKDIgKiBTVU4zX1BNRUdfU0laRSkpICYgflNVTjNfUE1FR19NQVNLOworCisJLyogbWFyayBhbGwgb2YgdGhlIHBtZWdzIHVzZWQgdGh1cyBmYXIgYXMgcmVzZXJ2ZWQgKi8KKwlmb3IgKGk9MDsgaSA8IF9fcGEoYm9vdG1lbV9lbmQpIC8gU1VOM19QTUVHX1NJWkUgOyArK2kpCisJCXBtZWdfYWxsb2NbaV0gPSAyOworCisKKwkvKiBJJ20gdGhpbmtpbmcgdGhhdCBtb3N0IG9mIHRoZSB0b3AgcG1lZydzIGFyZSBnb2luZyB0byBiZQorCSAgIHVzZWQgZm9yIHNvbWV0aGluZywgYW5kIHdlIHByb2JhYmx5IHNob3VsZG4ndCByaXNrIGl0ICovCisJZm9yKG51bSA9IDB4ZjA7IG51bSA8PSAweGZmOyBudW0rKykKKwkJcG1lZ19hbGxvY1tudW1dID0gMjsKKworCS8qIGxpYmVyYXRlIGFsbCBleGlzdGluZyBtYXBwaW5ncyBpbiB0aGUgcmVzdCBvZiBrZXJuZWwgc3BhY2UgKi8KKwlmb3Ioc2VnID0gYm9vdG1lbV9lbmQ7IHNlZyA8IDB4MGY4MDAwMDA7IHNlZyArPSBTVU4zX1BNRUdfU0laRSkgeworCQlpID0gc3VuM19nZXRfc2VnbWFwKHNlZyk7CisKKwkJaWYoIXBtZWdfYWxsb2NbaV0pIHsKKyNpZmRlZiBERUJVR19NTVVfRU1VCisJCQlwcmludGsoImZyZWVkOiAiKTsKKwkJCXByaW50X3B0ZV92YWRkciAoc2VnKTsKKyNlbmRpZgorCQkJc3VuM19wdXRfc2VnbWFwKHNlZywgU1VOM19JTlZBTElEX1BNRUcpOworCQl9CisJfQorCisJaiA9IDA7CisJZm9yIChudW09MCwgc2VnPTB4MEY4MDAwMDA7IHNlZzwweDEwMDAwMDAwOyBzZWcrPTE2KlBBR0VfU0laRSkgeworCQlpZiAoc3VuM19nZXRfc2VnbWFwIChzZWcpICE9IFNVTjNfSU5WQUxJRF9QTUVHKSB7CisjaWZkZWYgREVCVUdfUFJPTV9NQVBTCisJCQlmb3IoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCQkJcHJpbnRrICgibWFwcGVkOiIpOworCQkJCXByaW50X3B0ZV92YWRkciAoc2VnICsgKGkqUEFHRV9TSVpFKSk7CisJCQkJYnJlYWs7CisJCQl9CisjZW5kaWYKKwkJCS8vIHRoZSBsb3dlc3QgbWFwcGluZyBoZXJlIGlzIHRoZSBlbmQgb2Ygb3VyCisJCQkvLyB2bWFsbG9jIHJlZ2lvbgorCQkJaWYoIXZtYWxsb2NfZW5kKQorCQkJCXZtYWxsb2NfZW5kID0gc2VnOworCisJCQkvLyBtYXJrIHRoZSBzZWdtYXAgYWxsb2MnZCwgYW5kIHJlc2VydmUgYW55CisJCQkvLyBvZiB0aGUgZmlyc3QgMHhiZmYgcGFnZXMgdGhlIGhhcmR3YXJlIGlzCisJCQkvLyBhbHJlYWR5IHVzaW5nLi4uICBkb2VzIGFueSBzdW4zIHN1cHBvcnQgPiAyNG1iPworCQkJcG1lZ19hbGxvY1tzdW4zX2dldF9zZWdtYXAoc2VnKV0gPSAyOworCQl9CisJfQorCisJZHZtYV9pbml0KCk7CisKKworCS8qIGJsYW5rIGV2ZXJ5dGhpbmcgYmVsb3cgdGhlIGtlcm5lbCwgYW5kIHdlJ3ZlIGdvdCB0aGUgYmFzZQorCSAgIG1hcHBpbmcgdG8gc3RhcnQgYWxsIHRoZSBjb250ZXh0cyBvZmYgd2l0aC4uLiAqLworCWZvcihzZWcgPSAwOyBzZWcgPCBQQUdFX09GRlNFVDsgc2VnICs9IFNVTjNfUE1FR19TSVpFKQorCQlzdW4zX3B1dF9zZWdtYXAoc2VnLCBTVU4zX0lOVkFMSURfUE1FRyk7CisKKwlzZXRfZnMoTUFLRV9NTV9TRUcoMykpOworCWZvcihzZWcgPSAwOyBzZWcgPCAweDEwMDAwMDAwOyBzZWcgKz0gU1VOM19QTUVHX1NJWkUpIHsKKwkJaSA9IHN1bjNfZ2V0X3NlZ21hcChzZWcpOworCQlmb3IoaiA9IDE7IGogPCBDT05URVhUU19OVU07IGorKykKKwkJCSgqKHJvbXZlYy0+cHZfc2V0Y3R4dCkpKGosICh2b2lkICopc2VnLCBpKTsKKwl9CisJc2V0X2ZzKEtFUk5FTF9EUyk7CisKK30KKworLyogZXJhc2UgdGhlIG1hcHBpbmdzIGZvciBhIGRlYWQgY29udGV4dC4gIFVzZXMgdGhlIHBnX2RpciBmb3IgaGludHMKKyAgIGFzIHRoZSBwbWVnIHRhYmxlcyBwcm92ZWQgc29tZXdoYXQgdW5yZWxpYWJsZSwgYW5kIHVubWFwcGluZyBhbGwgb2YKKyAgIFRBU0tfU0laRSB3YXMgbXVjaCBzbG93ZXIgYW5kIG5vIG1vcmUgc3RhYmxlLiAqLworLyogdG9kbzogZmluZCBhIGJldHRlciB3YXkgdG8ga2VlcCB0cmFjayBvZiB0aGUgcG1lZ3MgdXNlZCBieSBhCisgICBjb250ZXh0IGZvciB3aGVuIHRoZXkncmUgY2xlYXJlZCAqLwordm9pZCBjbGVhcl9jb250ZXh0KHVuc2lnbmVkIGxvbmcgY29udGV4dCkKK3sKKyAgICAgdW5zaWduZWQgY2hhciBvbGRjdHg7CisgICAgIHVuc2lnbmVkIGxvbmcgaTsKKworICAgICBpZihjb250ZXh0KSB7CisJICAgICBpZighY3R4X2FsbG9jW2NvbnRleHRdKQorCQkgICAgIHBhbmljKCJjbGVhcl9jb250ZXh0OiBjb250ZXh0IG5vdCBhbGxvY2F0ZWRcbiIpOworCisJICAgICBjdHhfYWxsb2NbY29udGV4dF0tPmNvbnRleHQgPSBTVU4zX0lOVkFMSURfQ09OVEVYVDsKKwkgICAgIGN0eF9hbGxvY1tjb250ZXh0XSA9IChzdHJ1Y3QgbW1fc3RydWN0ICopMDsKKwkgICAgIGN0eF9hdmFpbCsrOworICAgICB9CisKKyAgICAgb2xkY3R4ID0gc3VuM19nZXRfY29udGV4dCgpOworCisgICAgIHN1bjNfcHV0X2NvbnRleHQoY29udGV4dCk7CisKKyAgICAgZm9yKGkgPSAwOyBpIDwgU1VOM19JTlZBTElEX1BNRUc7IGkrKykgeworCSAgICAgaWYoKHBtZWdfY3R4W2ldID09IGNvbnRleHQpICYmIChwbWVnX2FsbG9jW2ldID09IDEpKSB7CisJCSAgICAgc3VuM19wdXRfc2VnbWFwKHBtZWdfdmFkZHJbaV0sIFNVTjNfSU5WQUxJRF9QTUVHKTsKKwkJICAgICBwbWVnX2N0eFtpXSA9IDA7CisJCSAgICAgcG1lZ19hbGxvY1tpXSA9IDA7CisJCSAgICAgcG1lZ192YWRkcltpXSA9IDA7CisJICAgICB9CisgICAgIH0KKworICAgICBzdW4zX3B1dF9jb250ZXh0KG9sZGN0eCk7Cit9CisKKy8qIGdldHMgYW4gZW1wdHkgY29udGV4dC4gIGlmIGZ1bGwsIGtpbGxzIHRoZSBuZXh0IGNvbnRleHQgbGlzdGVkIHRvCisgICBkaWUgZmlyc3QgKi8KKy8qIFRoaXMgY29udGV4dCBpbnZhbGlkYXRpb24gc2NoZW1lIGlzLCB3ZWxsLCB0b3RhbGx5IGFyYml0cmFyeSwgSSdtCisgICBzdXJlIGl0IGNvdWxkIGJlIG11Y2ggbW9yZSBpbnRlbGxlZ2VudC4uLiAgYnV0IGl0IGdldHMgdGhlIGpvYiBkb25lCisgICBmb3Igbm93IHdpdGhvdXQgbXVjaCBvdmVyaGVhZCBpbiBtYWtpbmcgaXQncyBkZWNpc2lvbi4gKi8KKy8qIHRvZG86IGNvbWUgdXAgd2l0aCBvcHRpbWl6ZWQgc2NoZW1lIGZvciBmbHVzaGluZyBjb250ZXh0cyAqLwordW5zaWduZWQgbG9uZyBnZXRfZnJlZV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXVuc2lnbmVkIGxvbmcgbmV3ID0gMTsKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBuZXh0X3RvX2RpZSA9IDE7CisKKwlpZighY3R4X2F2YWlsKSB7CisJCS8qIGtpbGwgc29tZW9uZSB0byBnZXQgb3VyIGNvbnRleHQgKi8KKwkJbmV3ID0gbmV4dF90b19kaWU7CisJCWNsZWFyX2NvbnRleHQobmV3KTsKKwkJbmV4dF90b19kaWUgPSAobmV4dF90b19kaWUgKyAxKSAmIDB4NzsKKwkJaWYoIW5leHRfdG9fZGllKQorCQkJbmV4dF90b19kaWUrKzsKKwl9IGVsc2UgeworCQl3aGlsZShuZXcgPCBDT05URVhUU19OVU0pIHsKKwkJCWlmKGN0eF9hbGxvY1tuZXddKQorCQkJCW5ldysrOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJCS8vIGNoZWNrIHRvIG1ha2Ugc3VyZSBvbmUgd2FzIHJlYWxseSBmcmVlLi4uCisJCWlmKG5ldyA9PSBDT05URVhUU19OVU0pCisJCQlwYW5pYygiZ2V0X2ZyZWVfY29udGV4dDogZmFpbGVkIHRvIGZpbmQgZnJlZSBjb250ZXh0Iik7CisJfQorCisJY3R4X2FsbG9jW25ld10gPSBtbTsKKwljdHhfYXZhaWwtLTsKKworCXJldHVybiBuZXc7Cit9CisKKy8qCisgKiBEeW5hbWljYWxseSBzZWxlY3QgYSBgc3BhcmUnIFBNRUcgYW5kIHVzZSBpdCB0byBtYXAgdmlydHVhbCBgdmFkZHInIGluCisgKiBgY29udGV4dCcuIE1haW50YWluIGludGVybmFsIFBNRUcgbWFuYWdlbWVudCBzdHJ1Y3R1cmVzLiBUaGlzIGRvZXNuJ3QKKyAqIGFjdHVhbGx5IG1hcCB0aGUgcGh5c2ljYWwgYWRkcmVzcywgYnV0IGRvZXMgY2xlYXIgdGhlIG9sZCBtYXBwaW5ncy4KKyAqLworLy90b2RvOiBiZXR0ZXIgYWxsb2NhdGlvbiBzY2hlbWU/IGJ1dCBpcyBleHRyYSBjb21wbGV4aXR5IHdvcnRod2hpbGU/CisvL3RvZG86IG9ubHkgY2xlYXIgb2xkIGVudHJpZXMgaWYgbmVjZXNzYXJ5PyBob3cgdG8gdGVsbD8KKworaW5saW5lIHZvaWQgbW11X2VtdV9tYXBfcG1lZyAoaW50IGNvbnRleHQsIGludCB2YWRkcikKK3sKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBjdXJyX3BtZWcgPSAxMjg7CisJaW50IGk7CisKKwkvKiBSb3VuZCBhZGRyZXNzIHRvIFBNRUcgYm91bmRhcnkuICovCisJdmFkZHIgJj0gflNVTjNfUE1FR19NQVNLOworCisJLyogRmluZCBhIHNwYXJlIG9uZS4gKi8KKwl3aGlsZSAocG1lZ19hbGxvY1tjdXJyX3BtZWddID09IDIpCisJCSsrY3Vycl9wbWVnOworCisKKyNpZmRlZiBERUJVR19NTVVfRU1VCitwcmludGsoIm1tdV9lbXVfbWFwX3BtZWc6IHBtZWcgJXggdG8gY29udGV4dCAlZCB2YWRkciAleFxuIiwKKyAgICAgICBjdXJyX3BtZWcsIGNvbnRleHQsIHZhZGRyKTsKKyNlbmRpZgorCisJLyogSW52YWxpZGF0ZSBvbGQgbWFwcGluZyBmb3IgdGhlIHBtZWcsIGlmIGFueSAqLworCWlmIChwbWVnX2FsbG9jW2N1cnJfcG1lZ10gPT0gMSkgeworCQlzdW4zX3B1dF9jb250ZXh0KHBtZWdfY3R4W2N1cnJfcG1lZ10pOworCQlzdW4zX3B1dF9zZWdtYXAgKHBtZWdfdmFkZHJbY3Vycl9wbWVnXSwgU1VOM19JTlZBTElEX1BNRUcpOworCQlzdW4zX3B1dF9jb250ZXh0KGNvbnRleHQpOworCX0KKworCS8qIFVwZGF0ZSBQTUVHIG1hbmFnZW1lbnQgc3RydWN0dXJlcy4gKi8KKwkvLyBkb24ndCB0YWtlIHBtZWcncyBhd2F5IGZyb20gdGhlIGtlcm5lbC4uLgorCWlmKHZhZGRyID49IFBBR0VfT0ZGU0VUKSB7CisJCS8qIG1hcCBrZXJuZWwgcG1lZ3MgaW50byBhbGwgY29udGV4dHMgKi8KKwkJdW5zaWduZWQgY2hhciBpOworCisJCWZvcihpID0gMDsgaSA8IENPTlRFWFRTX05VTTsgaSsrKSB7CisJCQlzdW4zX3B1dF9jb250ZXh0KGkpOworCQkJc3VuM19wdXRfc2VnbWFwICh2YWRkciwgY3Vycl9wbWVnKTsKKwkJfQorCQlzdW4zX3B1dF9jb250ZXh0KGNvbnRleHQpOworCQlwbWVnX2FsbG9jW2N1cnJfcG1lZ10gPSAyOworCQlwbWVnX2N0eFtjdXJyX3BtZWddID0gMDsKKworCX0KKwllbHNlIHsKKwkJcG1lZ19hbGxvY1tjdXJyX3BtZWddID0gMTsKKwkJcG1lZ19jdHhbY3Vycl9wbWVnXSA9IGNvbnRleHQ7CisJCXN1bjNfcHV0X3NlZ21hcCAodmFkZHIsIGN1cnJfcG1lZyk7CisKKwl9CisJcG1lZ192YWRkcltjdXJyX3BtZWddID0gdmFkZHI7CisKKwkvKiBTZXQgaGFyZHdhcmUgbWFwcGluZyBhbmQgY2xlYXIgdGhlIG9sZCBQVEUgZW50cmllcy4gKi8KKwlmb3IgKGk9MDsgaTxTVU4zX1BNRUdfU0laRTsgaSs9U1VOM19QVEVfU0laRSkKKwkJc3VuM19wdXRfcHRlICh2YWRkciArIGksIFNVTjNfUEFHRV9TWVNURU0pOworCisJLyogQ29uc2lkZXIgYSBkaWZmZXJlbnQgb25lIG5leHQgdGltZS4gKi8KKwkrK2N1cnJfcG1lZzsKK30KKworLyoKKyAqIEhhbmRsZSBhIHBhZ2VmYXVsdCBhdCB2aXJ0dWFsIGFkZHJlc3MgYHZhZGRyJzsgY2hlY2sgaWYgdGhlcmUgc2hvdWxkIGJlIGEKKyAqIHBhZ2UgdGhlcmUgKHNwZWNpZmljYWxseSwgd2hldGhlciB0aGUgc29mdHdhcmUgcGFnZXRhYmxlcyBpbmRpY2F0ZSB0aGF0CisgKiB0aGVyZSBpcykuIFRoaXMgaXMgbmVjZXNzYXJ5IGR1ZSB0byB0aGUgbGltaXRlZCBzaXplIG9mIHRoZSBzZWNvbmQtbGV2ZWwKKyAqIFN1bjMgaGFyZHdhcmUgcGFnZXRhYmxlcyAoMjU2IGdyb3VwcyBvZiAxNiBwYWdlcykuIElmIHRoZXJlIHNob3VsZCBiZSBhCisgKiBtYXBwaW5nIHByZXNlbnQsIHdlIHNlbGVjdCBhIGBzcGFyZScgUE1FRyBhbmQgdXNlIGl0IHRvIGNyZWF0ZSBhIG1hcHBpbmcuCisgKiBgcmVhZF9mbGFnJyBpcyBub256ZXJvIGZvciBhIHJlYWQgZmF1bHQ7IHplcm8gZm9yIGEgd3JpdGUuIFJldHVybnMgbm9uemVybworICogaWYgd2Ugc3VjY2Vzc2Z1bGx5IGhhbmRsZWQgdGhlIGZhdWx0LgorICovCisvL3RvZG86IHNob3VsZCB3ZSBidW1wIG1pbm9yIHBhZ2VmYXVsdCBjb3VudGVyPyBpZiBzbywgaGVyZSBvciBpbiBjYWxsZXI/CisvL3RvZG86IHBvc3NpYmx5IGlubGluZSB0aGlzIGludG8gYnVzX2Vycm9yMDMwIGluIDxhc20vYnVzZXJyb3IuaD4gPworCisvLyBrZXJuZWxfZmF1bHQgaXMgc2V0IHdoZW4gYSBrZXJuZWwgcGFnZSBjb3VsZG4ndCBiZSBkZW1hbmQgbWFwcGVkLAorLy8gYW5kIGZvcmNlcyBhbm90aGVyIHRyeSB1c2luZyB0aGUga2VybmVsIHBhZ2UgdGFibGUuICBiYXNpY2FsbHkgYQorLy8gaGFjayBzbyB0aGF0IHZtYWxsb2Mgd291bGQgd29yayBjb3JyZWN0bHkuCisKK2ludCBtbXVfZW11X2hhbmRsZV9mYXVsdCAodW5zaWduZWQgbG9uZyB2YWRkciwgaW50IHJlYWRfZmxhZywgaW50IGtlcm5lbF9mYXVsdCkKK3sKKwl1bnNpZ25lZCBsb25nIHNlZ21lbnQsIG9mZnNldDsKKwl1bnNpZ25lZCBjaGFyIGNvbnRleHQ7CisJcHRlX3QgKnB0ZTsKKwlwZ2RfdCAqIGNycDsKKworCWlmKGN1cnJlbnQtPm1tID09IE5VTEwpIHsKKwkJY3JwID0gc3dhcHBlcl9wZ19kaXI7CisJCWNvbnRleHQgPSAwOworCX0gZWxzZSB7CisJCWNvbnRleHQgPSBjdXJyZW50LT5tbS0+Y29udGV4dDsKKwkJaWYoa2VybmVsX2ZhdWx0KQorCQkJY3JwID0gc3dhcHBlcl9wZ19kaXI7CisJCWVsc2UKKwkJCWNycCA9IGN1cnJlbnQtPm1tLT5wZ2Q7CisJfQorCisjaWZkZWYgREVCVUdfTU1VX0VNVQorCXByaW50ayAoIm1tdV9lbXVfaGFuZGxlX2ZhdWx0OiB2YWRkcj0lbHggdHlwZT0lcyBjcnA9JXBcbiIsCisJCXZhZGRyLCByZWFkX2ZsYWcgPyAicmVhZCIgOiAid3JpdGUiLCBjcnApOworI2VuZGlmCisKKwlzZWdtZW50ID0gKHZhZGRyID4+IFNVTjNfUE1FR19TSVpFX0JJVFMpICYgMHg3RkY7CisJb2Zmc2V0ICA9ICh2YWRkciA+PiBTVU4zX1BURV9TSVpFX0JJVFMpICYgMHhGOworCisjaWZkZWYgREVCVUdfTU1VX0VNVQorCXByaW50ayAoIm1tdV9lbXVfaGFuZGxlX2ZhdWx0OiBzZWdtZW50PSVseCBvZmZzZXQ9JWx4XG4iLCBzZWdtZW50LCBvZmZzZXQpOworI2VuZGlmCisKKwlwdGUgPSAocHRlX3QgKikgcGdkX3ZhbCAoKihjcnAgKyBzZWdtZW50KSk7CisKKy8vdG9kbzogbmV4dCBsaW5lIHNob3VsZCBjaGVjayBmb3IgdmFsaWQgcG1kIHByb3Blcmx5LgorCWlmICghcHRlKSB7CisvLyAgICAgICAgICAgICAgICBwcmludGsgKCJtbXVfZW11X2hhbmRsZV9mYXVsdDogaW52YWxpZCBwbWRcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKwlwdGUgPSAocHRlX3QgKikgX192YSAoKHVuc2lnbmVkIGxvbmcpKHB0ZSArIG9mZnNldCkpOworCisJLyogTWFrZSBzdXJlIHRoaXMgaXMgYSB2YWxpZCBwYWdlICovCisJaWYgKCEocHRlX3ZhbCAoKnB0ZSkgJiBTVU4zX1BBR0VfVkFMSUQpKQorCQlyZXR1cm4gMDsKKworCS8qIE1ha2Ugc3VyZSB0aGVyZSdzIGEgcG1lZyBhbGxvY2F0ZWQgZm9yIHRoZSBwYWdlICovCisJaWYgKHN1bjNfZ2V0X3NlZ21hcCAodmFkZHImflNVTjNfUE1FR19NQVNLKSA9PSBTVU4zX0lOVkFMSURfUE1FRykKKwkJbW11X2VtdV9tYXBfcG1lZyAoY29udGV4dCwgdmFkZHIpOworCisJLyogV3JpdGUgdGhlIHB0ZSB2YWx1ZSB0byBoYXJkd2FyZSBNTVUgKi8KKwlzdW4zX3B1dF9wdGUgKHZhZGRyJlBBR0VfTUFTSywgcHRlX3ZhbCAoKnB0ZSkpOworCisJLyogVXBkYXRlIHNvZnR3YXJlIGNvcHkgb2YgdGhlIHB0ZSB2YWx1ZSAqLworLy8gSSdtIG5vdCBzdXJlIHRoaXMgaXMgbmVjZXNzYXJ5LiBJZiB0aGlzIGlzIHJlcXVpcmVkLCB3ZSBvdWdodCB0byBzaW1wbHkKKy8vIGNvcHkgdGhpcyBvdXQgd2hlbiB3ZSByZXVzZSB0aGUgUE1FRyBvciBhdCBzb21lIG90aGVyIGNvbnZlbmllbnQgdGltZS4KKy8vIERvaW5nIGl0IGhlcmUgaXMgZmFpcmx5IG1lYW5pbmdsZXNzLCBhbnl3YXksIGFzIHdlIG9ubHkga25vdyBhYm91dCB0aGUKKy8vIGZpcnN0IGFjY2VzcyB0byBhIGdpdmVuIHBhZ2UuIC0tbQorCWlmICghcmVhZF9mbGFnKSB7CisJCWlmIChwdGVfdmFsICgqcHRlKSAmIFNVTjNfUEFHRV9XUklURUFCTEUpCisJCQlwdGVfdmFsICgqcHRlKSB8PSAoU1VOM19QQUdFX0FDQ0VTU0VECisJCQkJCSAgIHwgU1VOM19QQUdFX01PRElGSUVEKTsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CS8qIFdyaXRlLXByb3RlY3QgZXJyb3IuICovCisJfSBlbHNlCisJCXB0ZV92YWwgKCpwdGUpIHw9IFNVTjNfUEFHRV9BQ0NFU1NFRDsKKworI2lmZGVmIERFQlVHX01NVV9FTVUKKwlwcmludGsgKCJzZWc6JWQgY3JwOiVwIC0+IiwgZ2V0X2ZzKCkuc2VnLCBjcnApOworCXByaW50X3B0ZV92YWRkciAodmFkZHIpOworCXByaW50ayAoIlxuIik7CisjZW5kaWYKKworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3N1bjMvcHJvbS9NYWtlZmlsZSBiL2FyY2gvbTY4ay9zdW4zL3Byb20vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU0OGFlMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9zdW4zL3Byb20vTWFrZWZpbGUKQEAgLTAsMCArMSw3IEBACisjICRJZDogTWFrZWZpbGUsdiAxLjUgMTk5NS8xMS8yNSAwMDo1OTo0OCBkYXZlbSBFeHAgJAorIyBNYWtlZmlsZSBmb3IgdGhlIFN1biBCb290IFBST00gaW50ZXJmYWNlIGxpYnJhcnkgdW5kZXIKKyMgTGludXguCisjCisKK29iai15IDo9IGluaXQubyBjb25zb2xlLm8gcHJpbnRmLm8gIG1pc2MubworI2Jvb3RzdHIubyBpbml0Lm8gbWlzYy5vIHNlZ21lbnQubyBjb25zb2xlLm8gcHJpbnRmLm8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL3Byb20vY29uc29sZS5jIGIvYXJjaC9tNjhrL3N1bjMvcHJvbS9jb25zb2xlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjMTQyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9zdW4zL3Byb20vY29uc29sZS5jCkBAIC0wLDAgKzEsMTc0IEBACisvKiAkSWQ6IGNvbnNvbGUuYyx2IDEuMTAgMTk5Ni8xMi8xOCAwNjo0Njo1NCB0cmlkZ2UgRXhwICQKKyAqIGNvbnNvbGUuYzogUm91dGluZXMgdGhhdCBkZWFsIHdpdGggc2VuZGluZyBhbmQgcmVjZWl2aW5nIElPCisgKiAgICAgICAgICAgIHRvL2Zyb20gdGhlIGN1cnJlbnQgY29uc29sZSBkZXZpY2UgdXNpbmcgdGhlIFBST00uCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS9vcGVucHJvbS5oPgorI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworLyogTm9uIGJsb2NraW5nIGdldCBjaGFyYWN0ZXIgZnJvbSBjb25zb2xlIGlucHV0IGRldmljZSwgcmV0dXJucyAtMQorICogaWYgbm8gaW5wdXQgd2FzIHRha2VuLiAgVGhpcyBjYW4gYmUgdXNlZCBmb3IgcG9sbGluZy4KKyAqLworaW50Citwcm9tX25iZ2V0Y2hhcih2b2lkKQoreworCWludCBpID0gLTE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJaSA9ICgqKHJvbXZlYy0+cHZfbmJnZXRjaGFyKSkoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIGk7IC8qIFVnaCwgd2UgY291bGQgc3BpbiBmb3JldmVyIG9uIHVuc3VwcG9ydGVkIHByb21zIDsoICovCit9CisKKy8qIE5vbiBibG9ja2luZyBwdXQgY2hhcmFjdGVyIHRvIGNvbnNvbGUgZGV2aWNlLCByZXR1cm5zIC0xIGlmCisgKiB1bnN1Y2Nlc3NmdWwuCisgKi8KK2ludAorcHJvbV9uYnB1dGNoYXIoY2hhciBjKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGkgPSAtMTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJaSA9ICgqKHJvbXZlYy0+cHZfbmJwdXRjaGFyKSkoYyk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiBpOyAvKiBVZ2gsIHdlIGNvdWxkIHNwaW4gZm9yZXZlciBvbiB1bnN1cHBvcnRlZCBwcm9tcyA7KCAqLworfQorCisvKiBCbG9ja2luZyB2ZXJzaW9uIG9mIGdldCBjaGFyYWN0ZXIgcm91dGluZSBhYm92ZS4gKi8KK2NoYXIKK3Byb21fZ2V0Y2hhcih2b2lkKQoreworCWludCBjaGFyYWN0ZXI7CisJd2hpbGUoKGNoYXJhY3RlciA9IHByb21fbmJnZXRjaGFyKCkpID09IC0xKSA7CisJcmV0dXJuIChjaGFyKSBjaGFyYWN0ZXI7Cit9CisKKy8qIEJsb2NraW5nIHZlcnNpb24gb2YgcHV0IGNoYXJhY3RlciByb3V0aW5lIGFib3ZlLiAqLwordm9pZAorcHJvbV9wdXRjaGFyKGNoYXIgYykKK3sKKwl3aGlsZShwcm9tX25icHV0Y2hhcihjKSA9PSAtMSkgOworCXJldHVybjsKK30KKworLyogUXVlcnkgZm9yIGlucHV0IGRldmljZSB0eXBlICovCisjaWYgMAorZW51bSBwcm9tX2lucHV0X2RldmljZQorcHJvbV9xdWVyeV9pbnB1dF9kZXZpY2UoKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHN0X3A7CisJY2hhciBwcm9wYls2NF07CisJY2hhciAqcDsKKworCXN3aXRjaChwcm9tX3ZlcnMpIHsKKwljYXNlIFBST01fVjA6CisJY2FzZSBQUk9NX1YyOgorCWRlZmF1bHQ6CisJCXN3aXRjaCgqcm9tdmVjLT5wdl9zdGRpbikgeworCQljYXNlIFBST01ERVZfS0JEOglyZXR1cm4gUFJPTURFVl9JS0JEOworCQljYXNlIFBST01ERVZfVFRZQToJcmV0dXJuIFBST01ERVZfSVRUWUE7CisJCWNhc2UgUFJPTURFVl9UVFlCOglyZXR1cm4gUFJPTURFVl9JVFRZQjsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBQUk9NREVWX0lfVU5LOworCQl9OworCWNhc2UgUFJPTV9WMzoKKwljYXNlIFBST01fUDEyNzU6CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJc3RfcCA9ICgqcm9tdmVjLT5wdl92MmRldm9wcy52Ml9pbnN0MnBrZykoKnJvbXZlYy0+cHZfdjJib290YXJncy5mZF9zdGRpbik7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZCBbJTBdLCAlJWc2XG5cdCIgOiA6CisJCQkJICAgICAiciIgKCZjdXJyZW50X3NldFtzbXBfcHJvY2Vzc29yX2lkKCldKSA6CisJCQkJICAgICAibWVtb3J5Iik7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJaWYocHJvbV9ub2RlX2hhc19wcm9wZXJ0eShzdF9wLCAia2V5Ym9hcmQiKSkKKwkJCXJldHVybiBQUk9NREVWX0lLQkQ7CisJCXByb21fZ2V0cHJvcGVydHkoc3RfcCwgImRldmljZV90eXBlIiwgcHJvcGIsIHNpemVvZihwcm9wYikpOworCQlpZihzdHJuY21wKHByb3BiLCAic2VyaWFsIiwgc2l6ZW9mKCJzZXJpYWwiKSkpCisJCQlyZXR1cm4gUFJPTURFVl9JX1VOSzsKKwkJcHJvbV9nZXRwcm9wZXJ0eShwcm9tX3Jvb3Rfbm9kZSwgInN0ZGluLXBhdGgiLCBwcm9wYiwgc2l6ZW9mKHByb3BiKSk7CisJCXAgPSBwcm9wYjsKKwkJd2hpbGUoKnApIHArKzsgcCAtPSAyOworCQlpZihwWzBdID09ICc6JykgeworCQkJaWYocFsxXSA9PSAnYScpCisJCQkJcmV0dXJuIFBST01ERVZfSVRUWUE7CisJCQllbHNlIGlmKHBbMV0gPT0gJ2InKQorCQkJCXJldHVybiBQUk9NREVWX0lUVFlCOworCQl9CisJCXJldHVybiBQUk9NREVWX0lfVU5LOworCWNhc2UgUFJPTV9BUDEwMDA6CisJCXJldHVybiBQUk9NREVWX0lfVU5LOworCX07Cit9CisjZW5kaWYKKworLyogUXVlcnkgZm9yIG91dHB1dCBkZXZpY2UgdHlwZSAqLworCisjaWYgMAorZW51bSBwcm9tX291dHB1dF9kZXZpY2UKK3Byb21fcXVlcnlfb3V0cHV0X2RldmljZSgpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc3RfcDsKKwljaGFyIHByb3BiWzY0XTsKKwljaGFyICpwOworCWludCBwcm9wbDsKKworCXN3aXRjaChwcm9tX3ZlcnMpIHsKKwljYXNlIFBST01fVjA6CisJCXN3aXRjaCgqcm9tdmVjLT5wdl9zdGRpbikgeworCQljYXNlIFBST01ERVZfU0NSRUVOOglyZXR1cm4gUFJPTURFVl9PU0NSRUVOOworCQljYXNlIFBST01ERVZfVFRZQToJcmV0dXJuIFBST01ERVZfT1RUWUE7CisJCWNhc2UgUFJPTURFVl9UVFlCOglyZXR1cm4gUFJPTURFVl9PVFRZQjsKKwkJfTsKKwkJYnJlYWs7CisJY2FzZSBQUk9NX1YyOgorCWNhc2UgUFJPTV9WMzoKKwljYXNlIFBST01fUDEyNzU6CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJc3RfcCA9ICgqcm9tdmVjLT5wdl92MmRldm9wcy52Ml9pbnN0MnBrZykoKnJvbXZlYy0+cHZfdjJib290YXJncy5mZF9zdGRvdXQpOworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGQgWyUwXSwgJSVnNlxuXHQiIDogOgorCQkJCSAgICAgInIiICgmY3VycmVudF9zZXRbc21wX3Byb2Nlc3Nvcl9pZCgpXSkgOgorCQkJCSAgICAgIm1lbW9yeSIpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXByb3BsID0gcHJvbV9nZXRwcm9wZXJ0eShzdF9wLCAiZGV2aWNlX3R5cGUiLCBwcm9wYiwgc2l6ZW9mKHByb3BiKSk7CisJCWlmIChwcm9wbCA+PSAwICYmIHByb3BsID09IHNpemVvZigiZGlzcGxheSIpICYmCisJCQlzdHJuY21wKCJkaXNwbGF5IiwgcHJvcGIsIHNpemVvZigiZGlzcGxheSIpKSA9PSAwKQorCQl7CisJCQlyZXR1cm4gUFJPTURFVl9PU0NSRUVOOworCQl9CisJCWlmKHByb21fdmVycyA9PSBQUk9NX1YzKSB7CisJCQlpZihzdHJuY21wKCJzZXJpYWwiLCBwcm9wYiwgc2l6ZW9mKCJzZXJpYWwiKSkpCisJCQkJcmV0dXJuIFBST01ERVZfT19VTks7CisJCQlwcm9tX2dldHByb3BlcnR5KHByb21fcm9vdF9ub2RlLCAic3Rkb3V0LXBhdGgiLCBwcm9wYiwgc2l6ZW9mKHByb3BiKSk7CisJCQlwID0gcHJvcGI7CisJCQl3aGlsZSgqcCkgcCsrOyBwIC09IDI7CisJCQlpZihwWzBdPT0nOicpIHsKKwkJCQlpZihwWzFdID09ICdhJykKKwkJCQkJcmV0dXJuIFBST01ERVZfT1RUWUE7CisJCQkJZWxzZSBpZihwWzFdID09ICdiJykKKwkJCQkJcmV0dXJuIFBST01ERVZfT1RUWUI7CisJCQl9CisJCQlyZXR1cm4gUFJPTURFVl9PX1VOSzsKKwkJfSBlbHNlIHsKKwkJCS8qIFRoaXMgd29ya3Mgb24gU1MtMiAoYW4gZWFybHkgT3BlbkZpcm13YXJlKSBzdGlsbC4gKi8KKwkJCXN3aXRjaCgqcm9tdmVjLT5wdl9zdGRpbikgeworCQkJY2FzZSBQUk9NREVWX1RUWUE6CXJldHVybiBQUk9NREVWX09UVFlBOworCQkJY2FzZSBQUk9NREVWX1RUWUI6CXJldHVybiBQUk9NREVWX09UVFlCOworCQkJfTsKKwkJfQorCQlicmVhazsKKwljYXNlIFBST01fQVAxMDAwOgorCQlyZXR1cm4gUFJPTURFVl9JX1VOSzsKKwl9OworCXJldHVybiBQUk9NREVWX09fVU5LOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9wcm9tL2luaXQuYyBiL2FyY2gvbTY4ay9zdW4zL3Byb20vaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNmFlNTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvc3VuMy9wcm9tL2luaXQuYwpAQCAtMCwwICsxLDg5IEBACisvKiAkSWQ6IGluaXQuYyx2IDEuOSAxOTk2LzEyLzE4IDA2OjQ2OjU1IHRyaWRnZSBFeHAgJAorICogaW5pdC5jOiAgSW5pdGlhbGl6ZSBpbnRlcm5hbCB2YXJpYWJsZXMgdXNlZCBieSB0aGUgUFJPTQorICogICAgICAgICAgbGlicmFyeSBmdW5jdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL29wZW5wcm9tLmg+CisjaW5jbHVkZSA8YXNtL29wbGliLmg+CisKK3N0cnVjdCBsaW51eF9yb212ZWMgKnJvbXZlYzsKK2VudW0gcHJvbV9tYWpvcl92ZXJzaW9uIHByb21fdmVyczsKK3Vuc2lnbmVkIGludCBwcm9tX3JldiwgcHJvbV9wcmV2OworCisvKiBUaGUgcm9vdCBub2RlIG9mIHRoZSBwcm9tIGRldmljZSB0cmVlLiAqLworaW50IHByb21fcm9vdF9ub2RlOworCisvKiBQb2ludGVyIHRvIHRoZSBkZXZpY2UgdHJlZSBvcGVyYXRpb25zIHN0cnVjdHVyZS4gKi8KK3N0cnVjdCBsaW51eF9ub2Rlb3BzICpwcm9tX25vZGVvcHM7CisKKy8qIFlvdSBtdXN0IGNhbGwgcHJvbV9pbml0KCkgYmVmb3JlIHlvdSBhdHRlbXB0IHRvIHVzZSBhbnkgb2YgdGhlCisgKiByb3V0aW5lcyBpbiB0aGUgcHJvbSBsaWJyYXJ5LiAgSXQgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDEgb24KKyAqIGZhaWx1cmUuICBJdCBnZXRzIHBhc3NlZCB0aGUgcG9pbnRlciB0byB0aGUgUFJPTSB2ZWN0b3IuCisgKi8KKworZXh0ZXJuIHZvaWQgcHJvbV9tZW1pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgcHJvbV9yYW5nZXNfaW5pdCh2b2lkKTsKKwordm9pZCBfX2luaXQgcHJvbV9pbml0KHN0cnVjdCBsaW51eF9yb212ZWMgKnJwKQoreworI2lmZGVmIENPTkZJR19BUDEwMDAKKwlleHRlcm4gc3RydWN0IGxpbnV4X3JvbXZlYyAqYXBfcHJvbV9pbml0KHZvaWQpOworCXJwID0gYXBfcHJvbV9pbml0KCk7CisjZW5kaWYKKworCXJvbXZlYyA9IHJwOworI2lmbmRlZiBDT05GSUdfU1VOMworCXN3aXRjaChyb212ZWMtPnB2X3JvbXZlcnMpIHsKKwljYXNlIDA6CisJCXByb21fdmVycyA9IFBST01fVjA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcHJvbV92ZXJzID0gUFJPTV9WMjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwcm9tX3ZlcnMgPSBQUk9NX1YzOworCQlicmVhazsKKwljYXNlIDQ6CisJCXByb21fdmVycyA9IFBST01fUDEyNzU7CisJCXByb21fcHJpbnRmKCJQUk9NTElCOiBTdW4gSUVFRSBQcm9tIG5vdCBzdXBwb3J0ZWQgeWV0XG4iKTsKKwkJcHJvbV9oYWx0KCk7CisJCWJyZWFrOworCWNhc2UgNDI6IC8qIHdoeSBub3QgOi0pICovCisJCXByb21fdmVycyA9IFBST01fQVAxMDAwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByb21fcHJpbnRmKCJQUk9NTElCOiBCYWQgUFJPTSB2ZXJzaW9uICVkXG4iLAorCQkJICAgIHJvbXZlYy0+cHZfcm9tdmVycyk7CisJCXByb21faGFsdCgpOworCQlicmVhazsKKwl9OworCisJcHJvbV9yZXYgPSByb212ZWMtPnB2X3BsdWdpbl9yZXZpc2lvbjsKKwlwcm9tX3ByZXYgPSByb212ZWMtPnB2X3ByaW50cmV2OworCXByb21fbm9kZW9wcyA9IHJvbXZlYy0+cHZfbm9kZW9wczsKKworCXByb21fcm9vdF9ub2RlID0gcHJvbV9nZXRzaWJsaW5nKDApOworCWlmKChwcm9tX3Jvb3Rfbm9kZSA9PSAwKSB8fCAocHJvbV9yb290X25vZGUgPT0gLTEpKQorCQlwcm9tX2hhbHQoKTsKKworCWlmKCgoKHVuc2lnbmVkIGxvbmcpIHByb21fbm9kZW9wcykgPT0gMCkgfHwKKwkgICAoKCh1bnNpZ25lZCBsb25nKSBwcm9tX25vZGVvcHMpID09IC0xKSkKKwkJcHJvbV9oYWx0KCk7CisKKwlwcm9tX21lbWluaXQoKTsKKworCXByb21fcmFuZ2VzX2luaXQoKTsKKyNlbmRpZgorLy8JcHJpbnRrKCJQUk9NTElCOiBTdW4gQm9vdCBQcm9tIFZlcnNpb24gJWQgUmV2aXNpb24gJWRcbiIsCisvLwkgICAgICAgcm9tdmVjLT5wdl9yb212ZXJzLCBwcm9tX3Jldik7CisKKwkvKiBJbml0aWFsaXphdGlvbiBzdWNjZXNzZnVsLiAqLworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL3Byb20vbWlzYy5jIGIvYXJjaC9tNjhrL3N1bjMvcHJvbS9taXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4NzE2ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9zdW4zL3Byb20vbWlzYy5jCkBAIC0wLDAgKzEsOTQgQEAKKy8qICRJZDogbWlzYy5jLHYgMS4xNSAxOTk3LzA1LzE0IDIwOjQ1OjAwIGRhdmVtIEV4cCAkCisgKiBtaXNjLmM6ICBNaXNjZWxsYW5lb3VzIHByb20gZnVuY3Rpb25zIHRoYXQgZG9uJ3QgYmVsb25nCisgKiAgICAgICAgICBhbnl3aGVyZSBlbHNlLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NSBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vc3VuMy1oZWFkLmg+CisjaW5jbHVkZSA8YXNtL2lkcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9vcGVucHJvbS5oPgorI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorI2luY2x1ZGUgPGFzbS9tb3ZzLmg+CisKKy8qIFJlc2V0IGFuZCByZWJvb3QgdGhlIG1hY2hpbmUgd2l0aCB0aGUgY29tbWFuZCAnYmNvbW1hbmQnLiAqLwordm9pZAorcHJvbV9yZWJvb3QoY2hhciAqYmNvbW1hbmQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJKCoocm9tdmVjLT5wdl9yZWJvb3QpKShiY29tbWFuZCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKiBEcm9wIGludG8gdGhlIHByb20sIHdpdGggdGhlIGNoYW5jZSB0byBjb250aW51ZSB3aXRoIHRoZSAnZ28nCisgKiBwcm9tIGNvbW1hbmQuCisgKi8KK3ZvaWQKK3Byb21fY21kbGluZSh2b2lkKQoreworfQorCisvKiBEcm9wIGludG8gdGhlIHByb20sIGJ1dCBjb21wbGV0ZWx5IHRlcm1pbmF0ZSB0aGUgcHJvZ3JhbS4KKyAqIE5vIGNoYW5jZSBvZiBjb250aW51aW5nLgorICovCit2b2lkCitwcm9tX2hhbHQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworYWdhaW46CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCSgqKHJvbXZlYy0+cHZfaGFsdCkpKCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCWdvdG8gYWdhaW47IC8qIFBST00gaXMgb3V0IHRvIGdldCBtZSAtRGF2ZU0gKi8KK30KKwordHlwZWRlZiB2b2lkICgqc2Z1bmNfdCkodm9pZCk7CisKKy8qIEdldCB0aGUgaWRwcm9tIGFuZCBzdHVmZiBpdCBpbnRvIGJ1ZmZlciAnaWRidWYnLiAgUmV0dXJucyB0aGUKKyAqIGZvcm1hdCB0eXBlLiAgJ251bV9ieXRlcycgaXMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHlvdXIgaWRidWYKKyAqIGhhcyBzcGFjZSBmb3IuICBSZXR1cm5zIDB4ZmYgb24gZXJyb3IuCisgKi8KK3Vuc2lnbmVkIGNoYXIKK3Byb21fZ2V0X2lkcHJvbShjaGFyICppZGJ1ZiwgaW50IG51bV9ieXRlcykKK3sKKwlpbnQgaSwgb2xkc2ZjOworCUdFVF9TRkMob2xkc2ZjKTsKKwlTRVRfU0ZDKEZDX0NPTlRST0wpOworCWZvcihpPTA7aTxudW1fYnl0ZXM7IGkrKykKKwl7CisJCS8qIFRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSBHRVRfQ09OVFJPTF9CWVRFCisJCW1hY3JvOyBkZWZpbmluZyB0aGUgZXh0cmEgdmFyaWFibGUKKwkJZ2V0cyBhcm91bmQgaXQuCisJCSovCisJCWludCBjOworCQlHRVRfQ09OVFJPTF9CWVRFKFNVTjNfSURQUk9NX0JBU0UgKyBpLCBjKTsKKwkJaWRidWZbaV0gPSBjOworCX0KKwlTRVRfU0ZDKG9sZHNmYyk7CisJcmV0dXJuIGlkYnVmWzBdOworfQorCisvKiBHZXQgdGhlIG1ham9yIHByb20gdmVyc2lvbiBudW1iZXIuICovCitpbnQKK3Byb21fdmVyc2lvbih2b2lkKQoreworCXJldHVybiByb212ZWMtPnB2X3JvbXZlcnM7Cit9CisKKy8qIEdldCB0aGUgcHJvbSBwbHVnaW4tcmV2aXNpb24uICovCitpbnQKK3Byb21fZ2V0cmV2KHZvaWQpCit7CisJcmV0dXJuIHByb21fcmV2OworfQorCisvKiBHZXQgdGhlIHByb20gZmlybXdhcmUgcHJpbnQgcmV2aXNpb24uICovCitpbnQKK3Byb21fZ2V0cHJldih2b2lkKQoreworCXJldHVybiBwcm9tX3ByZXY7Cit9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9wcm9tL3ByaW50Zi5jIGIvYXJjaC9tNjhrL3N1bjMvcHJvbS9wcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmVlMTAwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL3N1bjMvcHJvbS9wcmludGYuYwpAQCAtMCwwICsxLDYxIEBACisvKiAkSWQ6IHByaW50Zi5jLHYgMS41IDE5OTYvMDQvMDQgMTY6MzE6MDcgdHJpZGdlIEV4cCAkCisgKiBwcmludGYuYzogIEludGVybmFsIHByb20gbGlicmFyeSBwcmludGYgZmFjaWxpdHkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKKyAqLworCisvKiBUaGlzIHJvdXRpbmUgaXMgaW50ZXJuYWwgdG8gdGhlIHByb20gbGlicmFyeSwgbm8gb25lIGVsc2Ugc2hvdWxkIGtub3cKKyAqIGFib3V0IG9yIHVzZSBpdCEgIEl0J3Mgc2ltcGxlIGFuZCBzbWVsbHkgYW55d2F5Li4uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGFzbS9vcGVucHJvbS5oPgorI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgorCisjaWZkZWYgQ09ORklHX0tHREIKK2V4dGVybiBpbnQga2dkYl9pbml0aWFsaXplZDsKKyNlbmRpZgorCitzdGF0aWMgY2hhciBwcGJ1ZlsxMDI0XTsKKwordm9pZAorcHJvbV9wcmludGYoY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCWNoYXIgY2gsICpicHRyOworCWludCBpOworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKworI2lmZGVmIENPTkZJR19LR0RCCisJcHBidWZbMF0gPSAnTyc7CisJaSA9IHZzcHJpbnRmKHBwYnVmICsgMSwgZm10LCBhcmdzKSArIDE7CisjZWxzZQorCWkgPSB2c3ByaW50ZihwcGJ1ZiwgZm10LCBhcmdzKTsKKyNlbmRpZgorCisJYnB0ciA9IHBwYnVmOworCisjaWZkZWYgQ09ORklHX0FQMTAwMAorICAgICAgICBhcF93cml0ZSgxLGJwdHIsc3RybGVuKGJwdHIpKTsKKyNlbHNlCisKKyNpZmRlZiBDT05GSUdfS0dEQgorCWlmIChrZ2RiX2luaXRpYWxpemVkKSB7CisJCXByaW50aygia2dkYl9pbml0aWFsaXplZCA9ICVkXG4iLCBrZ2RiX2luaXRpYWxpemVkKTsKKwkJcHV0cGFja2V0KGJwdHIsIDEpOworCX0gZWxzZQorI2Vsc2UKKwl3aGlsZSgoY2ggPSAqKGJwdHIrKykpICE9IDApIHsKKwkJaWYoY2ggPT0gJ1xuJykKKwkJCXByb21fcHV0Y2hhcignXHInKTsKKworCQlwcm9tX3B1dGNoYXIoY2gpOworCX0KKyNlbmRpZgorI2VuZGlmCisJdmFfZW5kKGFyZ3MpOworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL3NidXMuYyBiL2FyY2gvbTY4ay9zdW4zL3NidXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWJkYmZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL3N1bjMvc2J1cy5jCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBTQnVzIGhlbHBlciBmdW5jdGlvbnMKKyAqCisgKiBTdW4zIGRvbid0IGhhdmUgYSBzYnVzLCBidXQgbWFueSBvZiB0aGUgdXNlZCBkZXZpY2VzIGFyZSBhbHNvCisgKiB1c2VkIG9uIFNwYXJjIG1hY2hpbmVzIHdpdGggc2J1cy4gVG8gYXZvaWQgaGF2aW5nIGEgbG90IG9mCisgKiBkdXBsaWNhdGUgY29kZSwgd2UgcHJvdmlkZSBuZWNlc3NhcnkgZ2x1ZSBzdHVmZiB0byBtYWtlIHVzaW5nCisgKiBvZiB0aGUgc2J1cyBkcml2ZXIgY29kZSBwb3NzaWJsZS4KKyAqCisgKiAoQykgMTk5OSBUaG9tYXMgQm9nZW5kb2VyZmVyICh0c2JvZ2VuZEBhbHBoYS5mcmFua2VuLmRlKQorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCitpbnQgX19pbml0IHNidXNfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCit2b2lkICpzcGFyY19hbGxvY19pbyAodTMyIGFkZHJlc3MsIHZvaWQgKnZpcnR1YWwsIGludCBsZW4sIGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgdTMyIGJ1c190eXBlLCBpbnQgcmRvbmx5KQoreworCXJldHVybiAodm9pZCAqKWFkZHJlc3M7Cit9CisKK3N1YnN5c19pbml0Y2FsbChzYnVzX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3N1bjMvc3VuM19rc3ltcy5jIGIvYXJjaC9tNjhrL3N1bjMvc3VuM19rc3ltcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZTVhOWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvc3VuMy9zdW4zX2tzeW1zLmMKQEAgLTAsMCArMSwxMyBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2R2bWEuaD4KKyNpbmNsdWRlIDxhc20vaWRwcm9tLmg+CisKKy8qCisgKiBBZGQgdGhpbmdzIGhlcmUgd2hlbiB5b3UgZmluZCB0aGUgbmVlZCBmb3IgaXQuCisgKi8KK0VYUE9SVF9TWU1CT0woZHZtYV9tYXBfYWxpZ24pOworRVhQT1JUX1NZTUJPTChkdm1hX3VubWFwKTsKK0VYUE9SVF9TWU1CT0woZHZtYV9tYWxsb2NfYWxpZ24pOworRVhQT1JUX1NZTUJPTChkdm1hX2ZyZWUpOworRVhQT1JUX1NZTUJPTChpZHByb20pOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3N1bjMvc3VuM2R2bWEuYyBiL2FyY2gvbTY4ay9zdW4zL3N1bjNkdm1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA0YTFkMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9zdW4zL3N1bjNkdm1hLmMKQEAgLTAsMCArMSwzNzkgQEAKKy8qCisgKiBsaW51eC9hcmNoL202OGsvbW0vc3VuM2R2bWEuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBTYW0gQ3JlYXNleQorICoKKyAqIENvbnRhaW5zIGNvbW1vbiByb3V0aW5lcyBmb3Igc3VuMy9zdW4zeCBEVk1BIG1hbmFnZW1lbnQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9kdm1hLmg+CisKKyN1bmRlZiBEVk1BX0RFQlVHCisKKyNpZmRlZiBDT05GSUdfU1VOM1gKK2V4dGVybiB2b2lkIGR2bWFfdW5tYXBfaW9tbXUodW5zaWduZWQgbG9uZyBiYWRkciwgaW50IGxlbik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGR2bWFfdW5tYXBfaW9tbXUodW5zaWduZWQgbG9uZyBhLCBpbnQgYikKK3sKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NVTjMKK2V4dGVybiB2b2lkIHN1bjNfZHZtYV9pbml0KHZvaWQpOworI2VuZGlmCisKK3Vuc2lnbmVkIGxvbmcgaW9tbXVfdXNlW0lPTU1VX1RPVEFMX0VOVFJJRVNdOworCisjZGVmaW5lIGR2bWFfaW5kZXgoYmFkZHIpICgoYmFkZHIgLSBEVk1BX1NUQVJUKSA+PiBEVk1BX1BBR0VfU0hJRlQpCisKKyNkZWZpbmUgZHZtYV9lbnRyeV91c2UoYmFkZHIpCQkoaW9tbXVfdXNlW2R2bWFfaW5kZXgoYmFkZHIpXSkKKworc3RydWN0IGhvbGUgeworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGhvbGVfbGlzdDsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGhvbGVfY2FjaGU7CitzdGF0aWMgc3RydWN0IGhvbGUgaW5pdGhvbGVzWzY0XTsKKworI2lmZGVmIERWTUFfREVCVUcKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZHZtYV9hbGxvY3M7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBkdm1hX2ZyZWVzOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBkdm1hX2FsbG9jX2J5dGVzOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBkdm1hX2ZyZWVfYnl0ZXM7CisKK3N0YXRpYyB2b2lkIHByaW50X3VzZSh2b2lkKQoreworCisJaW50IGk7CisJaW50IGogPSAwOworCisJcHJpbnRrKCJkdm1hIGVudHJ5IHVzYWdlOlxuIik7CisKKwlmb3IoaSA9IDA7IGkgPCBJT01NVV9UT1RBTF9FTlRSSUVTOyBpKyspIHsKKwkJaWYoIWlvbW11X3VzZVtpXSkKKwkJCWNvbnRpbnVlOworCisJCWorKzsKKworCQlwcmludGsoImR2bWEgZW50cnk6ICUwOGx4IGxlbiAlMDhseFxuIiwKKwkJICAgICAgICggaSA8PCBEVk1BX1BBR0VfU0hJRlQpICsgRFZNQV9TVEFSVCwKKwkJICAgICAgIGlvbW11X3VzZVtpXSk7CisJfQorCisJcHJpbnRrKCIlZCBlbnRyaWVzIGluIHVzZSB0b3RhbFxuIiwgaik7CisKKwlwcmludGsoImFsbG9jYXRpb24vZnJlZSBjYWxsczogJWx1LyVsdVxuIiwgZHZtYV9hbGxvY3MsIGR2bWFfZnJlZXMpOworCXByaW50aygiYWxsb2NhdGlvbi9mcmVlIGJ5dGVzOiAlTHgvJUx4XG4iLCBkdm1hX2FsbG9jX2J5dGVzLAorCSAgICAgICBkdm1hX2ZyZWVfYnl0ZXMpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9ob2xlcyhzdHJ1Y3QgbGlzdF9oZWFkICpob2xlcykKK3sKKworCXN0cnVjdCBsaXN0X2hlYWQgKmN1cjsKKwlzdHJ1Y3QgaG9sZSAqaG9sZTsKKworCXByaW50aygibGlzdGluZyBkdm1hIGhvbGVzXG4iKTsKKwlsaXN0X2Zvcl9lYWNoKGN1ciwgaG9sZXMpIHsKKwkJaG9sZSA9IGxpc3RfZW50cnkoY3VyLCBzdHJ1Y3QgaG9sZSwgbGlzdCk7CisKKwkJaWYoKGhvbGUtPnN0YXJ0ID09IDApICYmIChob2xlLT5lbmQgPT0gMCkgJiYgKGhvbGUtPnNpemUgPT0gMCkpCisJCQljb250aW51ZTsKKworCQlwcmludGsoImhvbGU6IHN0YXJ0ICUwOGx4IGVuZCAlMDhseCBzaXplICUwOGx4XG4iLCBob2xlLT5zdGFydCwgaG9sZS0+ZW5kLCBob2xlLT5zaXplKTsKKwl9CisKKwlwcmludGsoImVuZCBvZiBob2xlIGxpc3RpbmcuLi5cbiIpOworCit9CisjZW5kaWYgLyogRFZNQV9ERUJVRyAqLworCitzdGF0aWMgaW5saW5lIGludCByZWZpbGwodm9pZCkKK3sKKworCXN0cnVjdCBob2xlICpob2xlOworCXN0cnVjdCBob2xlICpwcmV2ID0gTlVMTDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpjdXI7CisJaW50IHJldCA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoKGN1ciwgJmhvbGVfbGlzdCkgeworCQlob2xlID0gbGlzdF9lbnRyeShjdXIsIHN0cnVjdCBob2xlLCBsaXN0KTsKKworCQlpZighcHJldikgeworCQkJcHJldiA9IGhvbGU7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmKGhvbGUtPmVuZCA9PSBwcmV2LT5zdGFydCkgeworCQkJaG9sZS0+c2l6ZSArPSBwcmV2LT5zaXplOworCQkJaG9sZS0+ZW5kID0gcHJldi0+ZW5kOworCQkJbGlzdF9kZWwoJihwcmV2LT5saXN0KSk7CisJCQlsaXN0X2FkZCgmKHByZXYtPmxpc3QpLCAmaG9sZV9jYWNoZSk7CisJCQlyZXQrKzsKKwkJfQorCisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaG9sZSAqcm1jYWNoZSh2b2lkKQoreworCXN0cnVjdCBob2xlICpyZXQ7CisKKwlpZihsaXN0X2VtcHR5KCZob2xlX2NhY2hlKSkgeworCQlpZighcmVmaWxsKCkpIHsKKwkJCXByaW50aygib3V0IG9mIGR2bWEgaG9sZSBjYWNoZSFcbiIpOworCQkJQlVHKCk7CisJCX0KKwl9CisKKwlyZXQgPSBsaXN0X2VudHJ5KGhvbGVfY2FjaGUubmV4dCwgc3RydWN0IGhvbGUsIGxpc3QpOworCWxpc3RfZGVsKCYocmV0LT5saXN0KSk7CisKKwlyZXR1cm4gcmV0OworCit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfYmFkZHIoaW50IGxlbiwgdW5zaWduZWQgbG9uZyBhbGlnbikKK3sKKworCXN0cnVjdCBsaXN0X2hlYWQgKmN1cjsKKwlzdHJ1Y3QgaG9sZSAqaG9sZTsKKworCWlmKGxpc3RfZW1wdHkoJmhvbGVfbGlzdCkpIHsKKyNpZmRlZiBEVk1BX0RFQlVHCisJCXByaW50aygib3V0IG9mIGR2bWEgaG9sZXMhIChwcmludGluZyBob2xlIGNhY2hlKVxuIik7CisJCXByaW50X2hvbGVzKCZob2xlX2NhY2hlKTsKKwkJcHJpbnRfdXNlKCk7CisjZW5kaWYKKwkJQlVHKCk7CisJfQorCisJbGlzdF9mb3JfZWFjaChjdXIsICZob2xlX2xpc3QpIHsKKwkJdW5zaWduZWQgbG9uZyBuZXdsZW47CisKKwkJaG9sZSA9IGxpc3RfZW50cnkoY3VyLCBzdHJ1Y3QgaG9sZSwgbGlzdCk7CisKKwkJaWYoYWxpZ24gPiBEVk1BX1BBR0VfU0laRSkKKwkJCW5ld2xlbiA9IGxlbiArICgoaG9sZS0+ZW5kIC0gbGVuKSAmIChhbGlnbi0xKSk7CisJCWVsc2UKKwkJCW5ld2xlbiA9IGxlbjsKKworCQlpZihob2xlLT5zaXplID4gbmV3bGVuKSB7CisJCQlob2xlLT5lbmQgLT0gbmV3bGVuOworCQkJaG9sZS0+c2l6ZSAtPSBuZXdsZW47CisJCQlkdm1hX2VudHJ5X3VzZShob2xlLT5lbmQpID0gbmV3bGVuOworI2lmZGVmIERWTUFfREVCVUcKKwkJCWR2bWFfYWxsb2NzKys7CisJCQlkdm1hX2FsbG9jX2J5dGVzICs9IG5ld2xlbjsKKyNlbmRpZgorCQkJcmV0dXJuIGhvbGUtPmVuZDsKKwkJfSBlbHNlIGlmKGhvbGUtPnNpemUgPT0gbmV3bGVuKSB7CisJCQlsaXN0X2RlbCgmKGhvbGUtPmxpc3QpKTsKKwkJCWxpc3RfYWRkKCYoaG9sZS0+bGlzdCksICZob2xlX2NhY2hlKTsKKwkJCWR2bWFfZW50cnlfdXNlKGhvbGUtPnN0YXJ0KSA9IG5ld2xlbjsKKyNpZmRlZiBEVk1BX0RFQlVHCisJCQlkdm1hX2FsbG9jcysrOworCQkJZHZtYV9hbGxvY19ieXRlcyArPSBuZXdsZW47CisjZW5kaWYKKwkJCXJldHVybiBob2xlLT5zdGFydDsKKwkJfQorCisJfQorCisJcHJpbnRrKCJ1bmFibGUgdG8gZmluZCBkdm1hIGhvbGUhXG4iKTsKKwlCVUcoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZnJlZV9iYWRkcih1bnNpZ25lZCBsb25nIGJhZGRyKQoreworCisJdW5zaWduZWQgbG9uZyBsZW47CisJc3RydWN0IGhvbGUgKmhvbGU7CisJc3RydWN0IGxpc3RfaGVhZCAqY3VyOworCXVuc2lnbmVkIGxvbmcgb3JpZ19iYWRkcjsKKworCW9yaWdfYmFkZHIgPSBiYWRkcjsKKwlsZW4gPSBkdm1hX2VudHJ5X3VzZShiYWRkcik7CisJZHZtYV9lbnRyeV91c2UoYmFkZHIpID0gMDsKKwliYWRkciAmPSBEVk1BX1BBR0VfTUFTSzsKKwlkdm1hX3VubWFwX2lvbW11KGJhZGRyLCBsZW4pOworCisjaWZkZWYgRFZNQV9ERUJVRworCWR2bWFfZnJlZXMrKzsKKwlkdm1hX2ZyZWVfYnl0ZXMgKz0gbGVuOworI2VuZGlmCisKKwlsaXN0X2Zvcl9lYWNoKGN1ciwgJmhvbGVfbGlzdCkgeworCQlob2xlID0gbGlzdF9lbnRyeShjdXIsIHN0cnVjdCBob2xlLCBsaXN0KTsKKworCQlpZihob2xlLT5lbmQgPT0gYmFkZHIpIHsKKwkJCWhvbGUtPmVuZCArPSBsZW47CisJCQlob2xlLT5zaXplICs9IGxlbjsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgaWYoaG9sZS0+c3RhcnQgPT0gKGJhZGRyICsgbGVuKSkgeworCQkJaG9sZS0+c3RhcnQgPSBiYWRkcjsKKwkJCWhvbGUtPnNpemUgKz0gbGVuOworCQkJcmV0dXJuIDA7CisJCX0KKworCX0KKworCWhvbGUgPSBybWNhY2hlKCk7CisKKwlob2xlLT5zdGFydCA9IGJhZGRyOworCWhvbGUtPmVuZCA9IGJhZGRyICsgbGVuOworCWhvbGUtPnNpemUgPSBsZW47CisKKy8vCWxpc3RfYWRkX3RhaWwoJihob2xlLT5saXN0KSwgY3VyKTsKKwlsaXN0X2FkZCgmKGhvbGUtPmxpc3QpLCBjdXIpOworCisJcmV0dXJuIDA7CisKK30KKwordm9pZCBkdm1hX2luaXQodm9pZCkKK3sKKworCXN0cnVjdCBob2xlICpob2xlOworCWludCBpOworCisJSU5JVF9MSVNUX0hFQUQoJmhvbGVfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmhvbGVfY2FjaGUpOworCisJLyogcHJlcGFyZSB0aGUgaG9sZSBjYWNoZSAqLworCWZvcihpID0gMDsgaSA8IDY0OyBpKyspCisJCWxpc3RfYWRkKCYoaW5pdGhvbGVzW2ldLmxpc3QpLCAmaG9sZV9jYWNoZSk7CisKKwlob2xlID0gcm1jYWNoZSgpOworCWhvbGUtPnN0YXJ0ID0gRFZNQV9TVEFSVDsKKwlob2xlLT5lbmQgPSBEVk1BX0VORDsKKwlob2xlLT5zaXplID0gRFZNQV9TSVpFOworCisJbGlzdF9hZGQoJihob2xlLT5saXN0KSwgJmhvbGVfbGlzdCk7CisKKwltZW1zZXQoaW9tbXVfdXNlLCAwLCBzaXplb2YoaW9tbXVfdXNlKSk7CisKKwlkdm1hX3VubWFwX2lvbW11KERWTUFfU1RBUlQsIERWTUFfU0laRSk7CisKKyNpZmRlZiBDT05GSUdfU1VOMworCXN1bjNfZHZtYV9pbml0KCk7CisjZW5kaWYKKworfQorCitpbmxpbmUgdW5zaWduZWQgbG9uZyBkdm1hX21hcF9hbGlnbih1bnNpZ25lZCBsb25nIGthZGRyLCBpbnQgbGVuLCBpbnQgYWxpZ24pCit7CisKKwl1bnNpZ25lZCBsb25nIGJhZGRyOworCXVuc2lnbmVkIGxvbmcgb2ZmOworCisJaWYoIWxlbikKKwkJbGVuID0gMHg4MDA7CisKKwlpZigha2FkZHIgfHwgIWxlbikgeworLy8JCXByaW50aygiZXJyb3I6IGthZGRyICVseCBsZW4gJXhcbiIsIGthZGRyLCBsZW4pOworLy8JCSooaW50ICopNCA9IDA7CisJCXJldHVybiAwOworCX0KKworI2lmZGVmIERFQlVHCisJcHJpbnRrKCJkdm1hX21hcCByZXF1ZXN0ICUwOGx4IGJ5dGVzIGZyb20gJTA4bHhcbiIsCisJICAgICAgIGxlbiwga2FkZHIpOworI2VuZGlmCisJb2ZmID0ga2FkZHIgJiB+RFZNQV9QQUdFX01BU0s7CisJa2FkZHIgJj0gUEFHRV9NQVNLOworCWxlbiArPSBvZmY7CisJbGVuID0gKChsZW4gKyAoRFZNQV9QQUdFX1NJWkUtMSkpICYgRFZNQV9QQUdFX01BU0spOworCisJaWYoYWxpZ24gPT0gMCkKKwkJYWxpZ24gPSBEVk1BX1BBR0VfU0laRTsKKwllbHNlCisJCWFsaWduID0gKChhbGlnbiArIChEVk1BX1BBR0VfU0laRS0xKSkgJiBEVk1BX1BBR0VfTUFTSyk7CisKKwliYWRkciA9IGdldF9iYWRkcihsZW4sIGFsaWduKTsKKy8vCXByaW50aygidXNpbmcgYmFkZHIgJWx4XG4iLCBiYWRkcik7CisKKwlpZighZHZtYV9tYXBfaW9tbXUoa2FkZHIsIGJhZGRyLCBsZW4pKQorCQlyZXR1cm4gKGJhZGRyICsgb2ZmKTsKKworCXByaW50aygiZHZtYV9tYXAgZmFpbGVkIGthZGRyICVseCBiYWRkciAlbHggbGVuICV4XG4iLCBrYWRkciwgYmFkZHIsIGxlbik7CisJQlVHKCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZHZtYV91bm1hcCh2b2lkICpiYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlhZGRyID0gKHVuc2lnbmVkIGxvbmcpYmFkZHI7CisJLyogY2hlY2sgaWYgdGhpcyBpcyBhIHZtZSBtYXBwaW5nICovCisJaWYoIShhZGRyICYgMHgwMGYwMDAwMCkpCisJCWFkZHIgfD0gMHhmMDAwMDA7CisKKwlmcmVlX2JhZGRyKGFkZHIpOworCisJcmV0dXJuOworCit9CisKKwordm9pZCAqZHZtYV9tYWxsb2NfYWxpZ24odW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgYWxpZ24pCit7CisJdW5zaWduZWQgbG9uZyBrYWRkcjsKKwl1bnNpZ25lZCBsb25nIGJhZGRyOworCXVuc2lnbmVkIGxvbmcgdmFkZHI7CisKKwlpZighbGVuKQorCQlyZXR1cm4gTlVMTDsKKworI2lmZGVmIERFQlVHCisJcHJpbnRrKCJkdm1hX21hbGxvYyByZXF1ZXN0ICVseCBieXRlc1xuIiwgbGVuKTsKKyNlbmRpZgorCWxlbiA9ICgobGVuICsgKERWTUFfUEFHRV9TSVpFLTEpKSAmIERWTUFfUEFHRV9NQVNLKTsKKworICAgICAgICBpZigoa2FkZHIgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9BVE9NSUMsIGdldF9vcmRlcihsZW4pKSkgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZigoYmFkZHIgPSAodW5zaWduZWQgbG9uZylkdm1hX21hcF9hbGlnbihrYWRkciwgbGVuLCBhbGlnbikpID09IDApIHsKKwkJZnJlZV9wYWdlcyhrYWRkciwgZ2V0X29yZGVyKGxlbikpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwl2YWRkciA9IGR2bWFfYnRvdihiYWRkcik7CisKKwlpZihkdm1hX21hcF9jcHUoa2FkZHIsIHZhZGRyLCBsZW4pIDwgMCkgeworCQlkdm1hX3VubWFwKCh2b2lkICopYmFkZHIpOworCQlmcmVlX3BhZ2VzKGthZGRyLCBnZXRfb3JkZXIobGVuKSk7CisJCXJldHVybiBOVUxMOworCX0KKworI2lmZGVmIERFQlVHCisJcHJpbnRrKCJtYXBwZWQgJTA4bHggYnl0ZXMgJTA4bHgga2VybiAtPiAlMDhseCBidXNcbiIsCisJICAgICAgIGxlbiwga2FkZHIsIGJhZGRyKTsKKyNlbmRpZgorCisJcmV0dXJuICh2b2lkICopdmFkZHI7CisKK30KKwordm9pZCBkdm1hX2ZyZWUodm9pZCAqdmFkZHIpCit7CisKKwlyZXR1cm47CisKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zL3N1bjNpbnRzLmMgYi9hcmNoL202OGsvc3VuMy9zdW4zaW50cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MmEwMzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvc3VuMy9zdW4zaW50cy5jCkBAIC0wLDAgKzEsMjY1IEBACisgLyoKKyAqIGxpbnV4L2FyY2gvbTY4ay9zdW4zL3N1bjNpbnRzLmMgLS0gU3VuLTMoeCkgTGludXggaW50ZXJydXB0IGhhbmRsaW5nIGNvZGUKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL2ludGVyc2lsLmg+CisjaW5jbHVkZSA8YXNtL29wbGliLmg+CisjaW5jbHVkZSA8YXNtL3N1bjNpbnRzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworZXh0ZXJuIHZvaWQgc3VuM19sZWRzICh1bnNpZ25lZCBjaGFyKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBzdW4zX2ludGhhbmRsZShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCk7CisKK3ZvaWQgc3VuM19kaXNhYmxlX2ludGVycnVwdHModm9pZCkKK3sKKwlzdW4zX2Rpc2FibGVfaXJxKDApOworfQorCit2b2lkIHN1bjNfZW5hYmxlX2ludGVycnVwdHModm9pZCkKK3sKKwlzdW4zX2VuYWJsZV9pcnEoMCk7Cit9CisKK2ludCBsZWRfcGF0dGVybls4XSA9IHsKKyAgICAgICB+KDB4ODApLCB+KDB4MDEpLAorICAgICAgIH4oMHg0MCksIH4oMHgwMiksCisgICAgICAgfigweDIwKSwgfigweDA0KSwKKyAgICAgICB+KDB4MTApLCB+KDB4MDgpCit9OworCit2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKiBzdW4zX2ludHJlZzsKKwordm9pZCBzdW4zX2luc2VydF9pcnEoaXJxX25vZGVfdCAqKmxpc3QsIGlycV9ub2RlX3QgKm5vZGUpCit7Cit9CisKK3ZvaWQgc3VuM19kZWxldGVfaXJxKGlycV9ub2RlX3QgKipsaXN0LCB2b2lkICpkZXZfaWQpCit7Cit9CisKK3ZvaWQgc3VuM19lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJKnN1bjNfaW50cmVnIHw9ICAoMTw8aXJxKTsKK30KKwordm9pZCBzdW4zX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJKnN1bjNfaW50cmVnICY9IH4oMTw8aXJxKTsKK30KKworaW5saW5lIHZvaWQgc3VuM19kb19pcnEoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCWtzdGF0X2NwdSgwKS5pcnFzW1NZU19JUlFTICsgaXJxXSsrOworCSpzdW4zX2ludHJlZyAmPSB+KDE8PGlycSk7CisJKnN1bjNfaW50cmVnIHw9ICAoMTw8aXJxKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHN1bjNfaW50NyhpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwlzdW4zX2RvX2lycShpcnEsZnApOworCWlmKCEoa3N0YXRfY3B1KDApLmlycXNbU1lTX0lSUVMgKyBpcnFdICUgMjAwMCkpCisJCXN1bjNfbGVkcyhsZWRfcGF0dGVyblsoa3N0YXRfY3B1KDApLmlycXNbU1lTX0lSUVMraXJxXSUxNjAwMCkKKwkJCSAgLzIwMDBdKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzdW4zX2ludDUoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisgICAgICAgIGtzdGF0X2NwdSgwKS5pcnFzW1NZU19JUlFTICsgaXJxXSsrOworI2lmZGVmIENPTkZJR19TVU4zCisJaW50ZXJzaWxfY2xlYXIoKTsKKyNlbmRpZgorICAgICAgICAqc3VuM19pbnRyZWcgJj0gfigxPDxpcnEpOworICAgICAgICAqc3VuM19pbnRyZWcgfD0gICgxPDxpcnEpOworI2lmZGVmIENPTkZJR19TVU4zCisJaW50ZXJzaWxfY2xlYXIoKTsKKyNlbmRpZgorICAgICAgICBkb190aW1lcihmcCk7CisjaWZuZGVmIENPTkZJR19TTVAKKwl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUoZnApKTsKKyNlbmRpZgorICAgICAgICBpZighKGtzdGF0X2NwdSgwKS5pcnFzW1NZU19JUlFTICsgaXJxXSAlIDIwKSkKKyAgICAgICAgICAgICAgICBzdW4zX2xlZHMobGVkX3BhdHRlcm5bKGtzdGF0X2NwdSgwKS5pcnFzW1NZU19JUlFTK2lycV0lMTYwKQorICAgICAgICAgICAgICAgIC8yMF0pOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogaGFuZGxlIHJlcXVlc3RlZCBpbnRzLCBleGNlcHRpbmcgNSBhbmQgNywgd2hpY2ggYWx3YXlzIGRvIHRoZSBzYW1lCisgICB0aGluZyAqLworaXJxcmV0dXJuX3QgKCpzdW4zX2RlZmF1bHRfaGFuZGxlcltTWVNfSVJRU10pKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSA9IHsKKwlbMF0gPSBzdW4zX2ludGhhbmRsZSwKKwlbMV0gPSBzdW4zX2ludGhhbmRsZSwKKwlbMl0gPSBzdW4zX2ludGhhbmRsZSwKKwlbM10gPSBzdW4zX2ludGhhbmRsZSwKKwlbNF0gPSBzdW4zX2ludGhhbmRsZSwKKwlbNV0gPSBzdW4zX2ludDUsCisJWzZdID0gc3VuM19pbnRoYW5kbGUsCisJWzddID0gc3VuM19pbnQ3Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqZGV2X25hbWVzW1NZU19JUlFTXSA9IHsKKwlbNV0gPSAidGltZXIiLAorCVs3XSA9ICJpbnQ3IGhhbmRsZXIiCit9Oworc3RhdGljIHZvaWQgKmRldl9pZHNbU1lTX0lSUVNdOworc3RhdGljIGlycXJldHVybl90ICgqc3VuM19pbnRoYW5kbGVyW1NZU19JUlFTXSkoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopID0geworCVs1XSA9IHN1bjNfaW50NSwKKwlbN10gPSBzdW4zX2ludDcKK307CitzdGF0aWMgaXJxcmV0dXJuX3QgKCpzdW4zX3ZlY2hhbmRsZXJbU1VOM19JTlRfVkVDU10pKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK3N0YXRpYyB2b2lkICp2ZWNfaWRzW1NVTjNfSU5UX1ZFQ1NdOworc3RhdGljIGNvbnN0IGNoYXIgKnZlY19uYW1lc1tTVU4zX0lOVF9WRUNTXTsKK3N0YXRpYyBpbnQgdmVjX2ludHNbU1VOM19JTlRfVkVDU107CisKKworaW50IHNob3dfc3VuM19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKK3sKKwlpbnQgaTsKKworCWZvcihpID0gMDsgaSA8IChTVU4zX0lOVF9WRUNTLTEpOyBpKyspIHsKKwkJaWYoc3VuM192ZWNoYW5kbGVyW2ldICE9IE5VTEwpIHsKKwkJCXNlcV9wcmludGYocCwgInZlYyAlM2Q6ICUxMHUgJXNcbiIsIGkrNjQsCisJCQkJICAgdmVjX2ludHNbaV0sCisJCQkJICAgKHZlY19uYW1lc1tpXSkgPyB2ZWNfbmFtZXNbaV0gOgorCQkJCSAgICJzdW4zX3ZlY2hhbmRsZXIiKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3VuM19pbnRoYW5kbGUoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJaWYoc3VuM19pbnRoYW5kbGVyW2lycV0gPT0gTlVMTCkKKwkJcGFuaWMgKCJiYWQgaW50ZXJydXB0ICVkIHJlY2VpdmVkIChpZCAlcClcbiIsaXJxLCBkZXZfaWQpOworCisgICAgICAgIGtzdGF0X2NwdSgwKS5pcnFzW1NZU19JUlFTICsgaXJxXSsrOworICAgICAgICAqc3VuM19pbnRyZWcgJj0gfigxPDxpcnEpOworCisJc3VuM19pbnRoYW5kbGVyW2lycV0oaXJxLCBkZXZfaWRzW2lycV0sIGZwKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzdW4zX3ZlYzI1NShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKy8vCWludGVyc2lsX2NsZWFyKCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCit2b2lkIHN1bjNfaW5pdF9JUlEodm9pZCkKK3sKKwlpbnQgaTsKKworCSpzdW4zX2ludHJlZyA9IDE7CisKKwlmb3IoaSA9IDA7IGkgPCBTWVNfSVJRUzsgaSsrKQorCXsKKwkJaWYoZGV2X25hbWVzW2ldKQorCQkJY3B1X3JlcXVlc3RfaXJxKGksIHN1bjNfZGVmYXVsdF9oYW5kbGVyW2ldLCAwLAorCQkJCQlkZXZfbmFtZXNbaV0sIE5VTEwpOworCX0KKworCWZvcihpID0gMDsgaSA8IDE5MjsgaSsrKQorCQlzdW4zX3ZlY2hhbmRsZXJbaV0gPSBOVUxMOworCisJc3VuM192ZWNoYW5kbGVyWzE5MV0gPSBzdW4zX3ZlYzI1NTsKK30KKworaW50IHN1bjNfcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGlycSwgaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKQoreworCisJaWYoaXJxIDwgU1lTX0lSUVMpIHsKKwkJaWYoc3VuM19pbnRoYW5kbGVyW2lycV0gIT0gTlVMTCkgeworCQkJcHJpbnRrKCJzdW4zX3JlcXVlc3RfaXJxOiByZXF1ZXN0IGZvciBpcnEgJWQgLS0gYWxyZWFkeSB0YWtlbiFcbiIsIGlycSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCXN1bjNfaW50aGFuZGxlcltpcnFdID0gaGFuZGxlcjsKKwkJZGV2X2lkc1tpcnFdID0gZGV2X2lkOworCQlkZXZfbmFtZXNbaXJxXSA9IGRldm5hbWU7CisKKwkJLyogc2V0dGluZyBkZXZuYW1lIHdvdWxkIGJlIG5pY2UgKi8KKwkJY3B1X3JlcXVlc3RfaXJxKGlycSwgc3VuM19kZWZhdWx0X2hhbmRsZXJbaXJxXSwgMCwgZGV2bmFtZSwKKwkJCQlOVUxMKTsKKworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlpZigoaXJxID49IDY0KSAmJiAoaXJxIDw9IDI1NSkpIHsKKwkJICAgICAgICBpbnQgdmVjOworCisJCQl2ZWMgPSBpcnEgLSA2NDsKKwkJCWlmKHN1bjNfdmVjaGFuZGxlclt2ZWNdICE9IE5VTEwpIHsKKwkJCQlwcmludGsoInN1bjNfcmVxdWVzdF9pcnE6IHJlcXVlc3QgZm9yIHZlYyAlZCAtLSBhbHJlYWR5IHRha2VuIVxuIiwgaXJxKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKworCQkJc3VuM192ZWNoYW5kbGVyW3ZlY10gPSBoYW5kbGVyOworCQkJdmVjX2lkc1t2ZWNdID0gZGV2X2lkOworCQkJdmVjX25hbWVzW3ZlY10gPSBkZXZuYW1lOworCQkJdmVjX2ludHNbdmVjXSA9IDA7CisKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcHJpbnRrKCJzdW4zX3JlcXVlc3RfaXJxOiBpbnZhbGlkIGlycSAlZFxuIiwgaXJxKTsKKwlyZXR1cm4gMTsKKworfQorCit2b2lkIHN1bjNfZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCisJaWYoaXJxIDwgU1lTX0lSUVMpIHsKKwkJaWYoc3VuM19pbnRoYW5kbGVyW2lycV0gPT0gTlVMTCkKKwkJCXBhbmljKCJzdW4zX2ZyZWVfaW50OiBhdHRlbXB0IHRvIGZyZWUgdW51c2VkIGlycSAlZFxuIiwgaXJxKTsKKwkJaWYoZGV2X2lkc1tpcnFdICE9IGRldl9pZCkKKwkJCXBhbmljKCJzdW4zX2ZyZWVfaW50OiBpbmNvcnJlY3QgZGV2X2lkIGZvciBpcnEgJWRcbiIsIGlycSk7CisKKwkJc3VuM19pbnRoYW5kbGVyW2lycV0gPSBOVUxMOworCQlyZXR1cm47CisJfSBlbHNlIGlmKChpcnEgPj0gNjQpICYmIChpcnEgPD0gMjU1KSkgeworCQlpbnQgdmVjOworCisJCXZlYyA9IGlycSAtIDY0OworCQlpZihzdW4zX3ZlY2hhbmRsZXJbdmVjXSA9PSBOVUxMKQorCQkJcGFuaWMoInN1bjNfZnJlZV9pbnQ6IGF0dGVtcHQgdG8gZnJlZSB1bnVzZWQgdmVjdG9yICVkXG4iLCBpcnEpOworCQlpZih2ZWNfaWRzW2lycV0gIT0gZGV2X2lkKQorCQkJcGFuaWMoInN1bjNfZnJlZV9pbnQ6IGluY29ycmVjdCBkZXZfaWQgZm9yIHZlYyAlZFxuIiwgaXJxKTsKKworCQlzdW4zX3ZlY2hhbmRsZXJbdmVjXSA9IE5VTEw7CisJCXJldHVybjsKKwl9IGVsc2UgeworCQlwYW5pYygic3VuM19mcmVlX2lycTogaW52YWxpZCBpcnEgJWRcbiIsIGlycSk7CisJfQorfQorCitpcnFyZXR1cm5fdCBzdW4zX3Byb2Nlc3NfaW50KGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCisJaWYoKGlycSA+PSA2NCkgJiYgKGlycSA8PSAyNTUpKSB7CisJCWludCB2ZWM7CisKKwkJdmVjID0gaXJxIC0gNjQ7CisJCWlmKHN1bjNfdmVjaGFuZGxlclt2ZWNdID09IE5VTEwpCisJCQlwYW5pYyAoImJhZCBpbnRlcnJ1cHQgdmVjdG9yICVkIHJlY2VpdmVkXG4iLGlycSk7CisKKwkJdmVjX2ludHNbdmVjXSsrOworCQlyZXR1cm4gc3VuM192ZWNoYW5kbGVyW3ZlY10oaXJxLCB2ZWNfaWRzW3ZlY10sIHJlZ3MpOworCX0gZWxzZSB7CisJCXBhbmljKCJzdW4zX3Byb2Nlc3NfaW50OiB1bmFibGUgdG8gaGFuZGxlIGludGVycnVwdCB2ZWN0b3IgJWRcbiIsCisJCSAgICAgIGlycSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3N1bjN4L01ha2VmaWxlIGIvYXJjaC9tNjhrL3N1bjN4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTc3NmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvc3VuM3gvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACisjCisjIE1ha2VmaWxlIGZvciBMaW51eCBhcmNoL202OGsvc3VuM3ggc291cmNlIGRpcmVjdG9yeQorIworCitvYmoteQkJOj0gY29uZmlnLm8gdGltZS5vIGR2bWEubyBwcm9tLm8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zeC9jb25maWcuYyBiL2FyY2gvbTY4ay9zdW4zeC9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWY1NDdmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrL3N1bjN4L2NvbmZpZy5jCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBTZXR1cCBrZXJuZWwgZm9yIGEgU3VuM3ggbWFjaGluZQorICoKKyAqIChDKSAxOTk5IFRob21hcyBCb2dlbmRvZXJmZXIgKHRzYm9nZW5kQGFscGhhLmZyYW5rZW4uZGUpCisgKgorICogYmFzZWQgb24gY29kZSBmcm9tIE9saXZlciBKb3dldHQgPG9saXZlckBqb3dldHQubWFuYXdhdHUuZ2VuLm56PgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc3VuM3hwcm9tLmg+CisjaW5jbHVkZSA8YXNtL3N1bjNpbnRzLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL29wbGliLmg+CisKKyNpbmNsdWRlICJ0aW1lLmgiCisKK3ZvbGF0aWxlIGNoYXIgKmNsb2NrX3ZhOworZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnN1bjNfaW50cmVnOworCitleHRlcm4gdm9pZCBzdW4zX2dldF9tb2RlbChjaGFyICptb2RlbCk7CisKK3ZvaWQgc3VuM19sZWRzKHVuc2lnbmVkIGludCBpKQoreworCit9CisKK3N0YXRpYyBpbnQgc3VuM3hfZ2V0X2hhcmR3YXJlX2xpc3QoY2hhciAqYnVmZmVyKQoreworCisJaW50IGxlbiA9IDA7CisKKwlsZW4gKz0gc3ByaW50ZihidWZmZXIgKyBsZW4sICJQUk9NIFJldmlzaW9uOlx0JXNcbiIsCisJCSAgICAgICByb212ZWMtPnB2X21vbmlkKTsKKworCXJldHVybiBsZW47CisKK30KKworLyoKKyAqICBTZXR1cCB0aGUgc3VuM3ggY29uZmlndXJhdGlvbiBpbmZvCisgKi8KK3ZvaWQgX19pbml0IGNvbmZpZ19zdW4zeCh2b2lkKQoreworCisJc3VuM3hfcHJvbV9pbml0KCk7CisKKwltYWNoX2dldF9pcnFfbGlzdAkgPSBzaG93X3N1bjNfaW50ZXJydXB0czsKKwltYWNoX21heF9kbWFfYWRkcmVzcyA9IDB4ZmZmZmZmZmY7IC8qIHdlIGNhbiBETUEgYW55d2hlcmUsIHdoZWUgKi8KKworCW1hY2hfZGVmYXVsdF9oYW5kbGVyID0gJnN1bjNfZGVmYXVsdF9oYW5kbGVyOworCW1hY2hfc2NoZWRfaW5pdCAgICAgID0gc3VuM3hfc2NoZWRfaW5pdDsKKwltYWNoX2luaXRfSVJRICAgICAgICA9IHN1bjNfaW5pdF9JUlE7CisJZW5hYmxlX2lycSAgICAgICAgICAgPSBzdW4zX2VuYWJsZV9pcnE7CisJZGlzYWJsZV9pcnEgICAgICAgICAgPSBzdW4zX2Rpc2FibGVfaXJxOworCW1hY2hfcmVxdWVzdF9pcnEgICAgID0gc3VuM19yZXF1ZXN0X2lycTsKKwltYWNoX2ZyZWVfaXJxICAgICAgICA9IHN1bjNfZnJlZV9pcnE7CisJbWFjaF9wcm9jZXNzX2ludCAgICAgPSBzdW4zX3Byb2Nlc3NfaW50OworCisJbWFjaF9nZXR0aW1lb2Zmc2V0ICAgPSBzdW4zeF9nZXR0aW1lb2Zmc2V0OworCW1hY2hfcmVzZXQgICAgICAgICAgID0gc3VuM3hfcmVib290OworCisJbWFjaF9od2NsayAgICAgICAgICAgPSBzdW4zeF9od2NsazsKKwltYWNoX2dldF9tb2RlbCAgICAgICA9IHN1bjNfZ2V0X21vZGVsOworCW1hY2hfZ2V0X2hhcmR3YXJlX2xpc3QgPSBzdW4zeF9nZXRfaGFyZHdhcmVfbGlzdDsKKworI2lmZGVmIENPTkZJR19EVU1NWV9DT05TT0xFCisJY29uc3dpdGNocAkgICAgID0gJmR1bW15X2NvbjsKKyNlbmRpZgorCisJc3VuM19pbnRyZWcgPSAodW5zaWduZWQgY2hhciAqKVNVTjNYX0lOVFJFRzsKKworCS8qIG9ubHkgdGhlIHNlcmlhbCBjb25zb2xlIGlzIGtub3duIHRvIHdvcmsgYW55d2F5Li4uICovCisjaWYgMAorCXN3aXRjaCAoKih1bnNpZ25lZCBjaGFyICopU1VOM1hfRUVQUk9NX0NPTlMpIHsKKwljYXNlIDB4MTA6CisJCXNlcmlhbF9jb25zb2xlID0gMTsKKwkJY29uc3dpdGNocCA9IE5VTEw7CisJCWJyZWFrOworCWNhc2UgMHgxMToKKwkJc2VyaWFsX2NvbnNvbGUgPSAyOworCQljb25zd2l0Y2hwID0gTlVMTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc2VyaWFsX2NvbnNvbGUgPSAwOworCQljb25zd2l0Y2hwID0gJmR1bW15X2NvbjsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3N1bjN4L2R2bWEuYyBiL2FyY2gvbTY4ay9zdW4zeC9kdm1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJlNTVhZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9zdW4zeC9kdm1hLmMKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiBWaXJ0dWFsIERNQSBhbGxvY2F0aW9uCisgKgorICogKEMpIDE5OTkgVGhvbWFzIEJvZ2VuZG9lcmZlciAodHNib2dlbmRAYWxwaGEuZnJhbmtlbi5kZSkKKyAqCisgKiAxMS8yNi8yMDAwIC0tIGRpc2FibGVkIHRoZSBleGlzdGluZyBjb2RlIGJlY2F1c2UgaXQgZGlkbid0IHdvcmsgZm9yCisgKiBtZSBpbiAyLjQuICBSZXBsYWNlZCB3aXRoIGEgc2lnbmlmaWNhbnRseSBtb3JlIHByaW1pdGl2ZSB2ZXJzaW9uCisgKiBzaW1pbGFyIHRvIHRoZSBzdW4zIGNvZGUuICB0aGUgb2xkIGZ1bmN0aW9uYWxpdHkgd2FzIHByb2JhYmx5IG1vcmUKKyAqIGRlc2lyYWJsZSwgYnV0Li4uLiAgIC0tIFNhbSBDcmVhc2V5IChzYW1teUBvaC52ZXJpby5jb20pCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgPGFzbS9zdW4zeC5oPgorI2luY2x1ZGUgPGFzbS9kdm1hLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisKKy8qIElPTU1VIHN1cHBvcnQgKi8KKworI2RlZmluZSBJT01NVV9BRERSX01BU0sgICAgICAgICAgICAweDAzZmZlMDAwCisjZGVmaW5lIElPTU1VX0NBQ0hFX0lOSElCSVQgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgSU9NTVVfRlVMTF9CTE9DSyAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJT01NVV9NT0RJRklFRCAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIElPTU1VX1VTRUQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9NTVVfV1JJVEVfUFJPVEVDVCAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJT01NVV9EVF9NQVNLICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIElPTU1VX0RUX0lOVkFMSUQgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSU9NTVVfRFRfVkFMSUQgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJT01NVV9EVF9CQUQgICAgICAgICAgICAgICAweDAwMDAwMDAyCisKKworc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmlvbW11X3B0ZSA9ICh1bnNpZ25lZCBsb25nICopU1VOM1hfSU9NTVU7CisKKworI2RlZmluZSBkdm1hX2VudHJ5X3BhZGRyKGluZGV4KQkJKGlvbW11X3B0ZVtpbmRleF0gJiBJT01NVV9BRERSX01BU0spCisjZGVmaW5lIGR2bWFfZW50cnlfdmFkZHIoaW5kZXgscGFkZHIpCSgoaW5kZXggPDwgRFZNQV9QQUdFX1NISUZUKSB8ICBcCisJCQkJCSAocGFkZHIgJiAoRFZNQV9QQUdFX1NJWkUtMSkpKQorI2lmIDAKKyNkZWZpbmUgZHZtYV9lbnRyeV9zZXQoaW5kZXgsYWRkcikJKGlvbW11X3B0ZVtpbmRleF0gPSAgICAgICAgICAgIFwKKwkJCQkJICAgIChhZGRyICYgSU9NTVVfQUREUl9NQVNLKSB8IFwKKwkJCQkgICAgICAgICAgICAgSU9NTVVfRFRfVkFMSUQgfCBJT01NVV9DQUNIRV9JTkhJQklUKQorI2Vsc2UKKyNkZWZpbmUgZHZtYV9lbnRyeV9zZXQoaW5kZXgsYWRkcikJKGlvbW11X3B0ZVtpbmRleF0gPSAgICAgICAgICAgIFwKKwkJCQkJICAgIChhZGRyICYgSU9NTVVfQUREUl9NQVNLKSB8IFwKKwkJCQkgICAgICAgICAgICAgSU9NTVVfRFRfVkFMSUQpCisjZW5kaWYKKyNkZWZpbmUgZHZtYV9lbnRyeV9jbHIoaW5kZXgpCQkoaW9tbXVfcHRlW2luZGV4XSA9IElPTU1VX0RUX0lOVkFMSUQpCisjZGVmaW5lIGR2bWFfZW50cnlfaGFzaChhZGRyKQkJKChhZGRyID4+IERWTUFfUEFHRV9TSElGVCkgXiBcCisJCQkJCSAoKGFkZHIgJiAweDAzYzAwMDAwKSA+PiAgICAgXAorCQkJCQkJKERWTUFfUEFHRV9TSElGVCs0KSkpCisKKyN1bmRlZiBERUJVRworCisjaWZkZWYgREVCVUcKKy8qIGNvZGUgdG8gcHJpbnQgb3V0IGEgZHZtYSBtYXBwaW5nIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgKi8KK3ZvaWQgZHZtYV9wcmludCAodW5zaWduZWQgbG9uZyBkdm1hX2FkZHIpCit7CisKKyAgICAgICAgdW5zaWduZWQgbG9uZyBpbmRleDsKKworICAgICAgICBpbmRleCA9IGR2bWFfYWRkciA+PiBEVk1BX1BBR0VfU0hJRlQ7CisKKyAgICAgICAgcHJpbnRrKCJpZHggJWx4IGR2bWFfYWRkciAlMDhseCBwYWRkciAlMDhseFxuIiwgaW5kZXgsIGR2bWFfYWRkciwKKyAgICAgICAgICAgICAgIGR2bWFfZW50cnlfcGFkZHIoaW5kZXgpKTsKKworCit9CisjZW5kaWYKKworCisvKiBjcmVhdGUgYSB2aXJ0dWFsIG1hcHBpbmcgZm9yIGEgcGFnZSBhc3NpZ25lZCB3aXRoaW4gdGhlIElPTU1VCisgICBzbyB0aGF0IHRoZSBjcHUgY2FuIHJlYWNoIGl0IGVhc2lseSAqLworaW5saW5lIGludCBkdm1hX21hcF9jcHUodW5zaWduZWQgbG9uZyBrYWRkciwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHZhZGRyLCBpbnQgbGVuKQoreworCXBnZF90ICpwZ2Q7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisJaW50IHJldCA9IDA7CisKKwlrYWRkciAmPSBQQUdFX01BU0s7CisJdmFkZHIgJj0gUEFHRV9NQVNLOworCisJZW5kID0gUEFHRV9BTElHTih2YWRkciArIGxlbik7CisKKyNpZmRlZiBERUJVRworCXByaW50aygiZHZtYTogbWFwcGluZyBrZXJuICUwOGx4IHRvIHZpcnQgJTA4bHhcbiIsCisJICAgICAgIGthZGRyLCB2YWRkcik7CisjZW5kaWYKKwlwZ2QgPSBwZ2Rfb2Zmc2V0X2sodmFkZHIpOworCisJZG8geworCQlwbWRfdCAqcG1kOworCQl1bnNpZ25lZCBsb25nIGVuZDI7CisKKwkJaWYoKHBtZCA9IHBtZF9hbGxvYygmaW5pdF9tbSwgcGdkLCB2YWRkcikpID09IE5VTEwpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmKChlbmQgJiBQR0RJUl9NQVNLKSA+ICh2YWRkciAmIFBHRElSX01BU0spKQorCQkJZW5kMiA9ICh2YWRkciArIChQR0RJUl9TSVpFLTEpKSAmIFBHRElSX01BU0s7CisJCWVsc2UKKwkJCWVuZDIgPSBlbmQ7CisKKwkJZG8geworCQkJcHRlX3QgKnB0ZTsKKwkJCXVuc2lnbmVkIGxvbmcgZW5kMzsKKworCQkJaWYoKHB0ZSA9IHB0ZV9hbGxvY19rZXJuZWwoJmluaXRfbW0sIHBtZCwgdmFkZHIpKSA9PSBOVUxMKSB7CisJCQkJcmV0ID0gLUVOT01FTTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJaWYoKGVuZDIgJiBQTURfTUFTSykgPiAodmFkZHIgJiBQTURfTUFTSykpCisJCQkJZW5kMyA9ICh2YWRkciArIChQTURfU0laRS0xKSkgJiBQTURfTUFTSzsKKwkJCWVsc2UKKwkJCQllbmQzID0gZW5kMjsKKworCQkJZG8geworI2lmZGVmIERFQlVHCisJCQkJcHJpbnRrKCJtYXBwaW5nICUwOGx4IHBoeXMgdG8gJTA4bHhcbiIsCisJCQkJICAgICAgIF9fcGEoa2FkZHIpLCB2YWRkcik7CisjZW5kaWYKKwkJCQlzZXRfcHRlKHB0ZSwgcGZuX3B0ZSh2aXJ0X3RvX3BmbihrYWRkciksCisJCQkJCQkgICAgIFBBR0VfS0VSTkVMKSk7CisJCQkJcHRlKys7CisJCQkJa2FkZHIgKz0gUEFHRV9TSVpFOworCQkJCXZhZGRyICs9IFBBR0VfU0laRTsKKwkJCX0gd2hpbGUodmFkZHIgPCBlbmQzKTsKKworCQl9IHdoaWxlKHZhZGRyIDwgZW5kMik7CisKKwl9IHdoaWxlKHZhZGRyIDwgZW5kKTsKKworCWZsdXNoX3RsYl9hbGwoKTsKKworIG91dDoKKwlyZXR1cm4gcmV0OworfQorCisKK2lubGluZSBpbnQgZHZtYV9tYXBfaW9tbXUodW5zaWduZWQgbG9uZyBrYWRkciwgdW5zaWduZWQgbG9uZyBiYWRkciwKKwkJCQkgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIGVuZCwgaW5kZXg7CisKKwlpbmRleCA9IGJhZGRyID4+IERWTUFfUEFHRV9TSElGVDsKKwllbmQgPSAoKGJhZGRyK2xlbikgPj4gRFZNQV9QQUdFX1NISUZUKTsKKworCWlmKGxlbiAmIH5EVk1BX1BBR0VfTUFTSykKKwkJZW5kKys7CisKKwlmb3IoOyBpbmRleCA8IGVuZCA7IGluZGV4KyspIHsKKy8vCQlpZihkdm1hX2VudHJ5X3VzZShpbmRleCkpCisvLwkJCUJVRygpOworLy8JCXByaW50aygibWFwcGluZyBwYSAlbHggdG8gYmEgJWx4XG4iLCBfX3BhKGthZGRyKSwgaW5kZXggPDwgRFZNQV9QQUdFX1NISUZUKTsKKworCQlkdm1hX2VudHJ5X3NldChpbmRleCwgX19wYShrYWRkcikpOworCisJCWlvbW11X3B0ZVtpbmRleF0gfD0gSU9NTVVfRlVMTF9CTE9DSzsKKy8vCQlkdm1hX2VudHJ5X2luYyhpbmRleCk7CisKKwkJa2FkZHIgKz0gRFZNQV9QQUdFX1NJWkU7CisJfQorCisjaWZkZWYgREVCVUcKKwlmb3IoaW5kZXggPSAoYmFkZHIgPj4gRFZNQV9QQUdFX1NISUZUKTsgaW5kZXggPCBlbmQ7IGluZGV4KyspCisJCWR2bWFfcHJpbnQoaW5kZXggPDwgRFZNQV9QQUdFX1NISUZUKTsKKyNlbmRpZgorCXJldHVybiAwOworCit9CisKK3ZvaWQgZHZtYV91bm1hcF9pb21tdSh1bnNpZ25lZCBsb25nIGJhZGRyLCBpbnQgbGVuKQoreworCisJaW50IGluZGV4LCBlbmQ7CisKKworCWluZGV4ID0gYmFkZHIgPj4gRFZNQV9QQUdFX1NISUZUOworCWVuZCA9IChEVk1BX1BBR0VfQUxJR04oYmFkZHIrbGVuKSA+PiBEVk1BX1BBR0VfU0hJRlQpOworCisJZm9yKDsgaW5kZXggPCBlbmQgOyBpbmRleCsrKSB7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRrKCJmcmVlaW5nIGJ1cyBtYXBwaW5nICUwOHhcbiIsIGluZGV4IDw8IERWTUFfUEFHRV9TSElGVCk7CisjZW5kaWYKKyNpZiAwCisJCWlmKCFkdm1hX2VudHJ5X3VzZShpbmRleCkpCisJCQlwcmludGsoImR2bWFfdW5tYXAgZnJlZWluZyB1bnVzZWQgZW50cnkgJTA0eFxuIiwKKwkJCSAgICAgICBpbmRleCk7CisJCWVsc2UKKwkJCWR2bWFfZW50cnlfZGVjKGluZGV4KTsKKyNlbmRpZgorCQlkdm1hX2VudHJ5X2NscihpbmRleCk7CisJfQorCit9CisKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9zdW4zeC9wcm9tLmMgYi9hcmNoL202OGsvc3VuM3gvcHJvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NGNmMDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvc3VuM3gvcHJvbS5jCkBAIC0wLDAgKzEsMTY2IEBACisvKiBQcm9tIGFjY2VzcyByb3V0aW5lcyBmb3IgdGhlIHN1bjN4ICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vc3VuM3hwcm9tLmg+CisjaW5jbHVkZSA8YXNtL2lkcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL3N1bjNpbnRzLmg+CisjaW5jbHVkZSA8YXNtL29wZW5wcm9tLmg+CisjaW5jbHVkZSA8YXNtL21hY2hpbmVzLmg+CisKK3ZvaWQgKCpzdW4zeF9wdXRjaGFyKShpbnQpOworaW50ICgqc3VuM3hfZ2V0Y2hhcikodm9pZCk7CitpbnQgKCpzdW4zeF9tYXlnZXQpKHZvaWQpOworaW50ICgqc3VuM3hfbWF5cHV0KShpbnQpOwordm9pZCAoKnN1bjN4X3Byb21fcmVib290KSh2b2lkKTsKK2VfdmVjdG9yIHN1bjN4X3Byb21fYWJvcnQ7CitzdHJ1Y3QgbGludXhfcm9tdmVjICpyb212ZWM7CisKKy8qIHByb20gdmVjdG9yIHRhYmxlICovCitlX3ZlY3RvciAqc3VuM3hfcHJvbV92YnI7CisKKy8qIEhhbmRsZSByZXR1cm5pbmcgdG8gdGhlIHByb20gKi8KK3ZvaWQgc3VuM3hfaGFsdCh2b2lkKQoreworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyAgICAvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpbGUgd2UgbWVzcyB3aXRoIHRoaW5ncyAqLworICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworICAgIC8qIFJlc3RvcmUgcHJvbSB2YnIgKi8KKyAgICBfX2FzbV9fIHZvbGF0aWxlICgibW92ZWMgJTAsJSV2YnIiIDogOiAiciIgKCh2b2lkKilzdW4zeF9wcm9tX3ZicikpOworCisgICAgLyogUmVzdG9yZSBwcm9tIE5NSSBjbG9jayAqLworLy8gICAgc3VuM3hfZGlzYWJsZV9pbnRyZWcoNSk7CisgICAgc3VuM19lbmFibGVfaXJxKDcpOworCisgICAgLyogTGV0ICdlciByaXAgKi8KKyAgICBfX2FzbV9fIHZvbGF0aWxlICgidHJhcCAjMTQiIDogOiApOworCisgICAgLyogUmVzdG9yZSBldmVyeXRoaW5nICovCisgICAgc3VuM19kaXNhYmxlX2lycSg3KTsKKyAgICBzdW4zX2VuYWJsZV9pcnEoNSk7CisKKyAgICBfX2FzbV9fIHZvbGF0aWxlICgibW92ZWMgJTAsJSV2YnIiIDogOiAiciIgKCh2b2lkKil2ZWN0b3JzKSk7CisgICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCit2b2lkIHN1bjN4X3JlYm9vdCh2b2lkKQoreworICAgIC8qIFRoaXMgbmV2ZXIgcmV0dXJucywgZG9uJ3QgYm90aGVyIHNhdmluZyB0aGluZ3MgKi8KKyAgICBsb2NhbF9pcnFfZGlzYWJsZSgpOworCisgICAgLyogUmVzdG9yZSBwcm9tIHZiciAqLworICAgIF9fYXNtX18gdm9sYXRpbGUgKCJtb3ZlYyAlMCwlJXZiciIgOiA6ICJyIiAoKHZvaWQqKXN1bjN4X3Byb21fdmJyKSk7CisKKyAgICAvKiBSZXN0b3JlIHByb20gTk1JIGNsb2NrICovCisgICAgc3VuM19kaXNhYmxlX2lycSg1KTsKKyAgICBzdW4zX2VuYWJsZV9pcnEoNyk7CisKKyAgICAvKiBMZXQgJ2VyIHJpcCAqLworICAgICgqcm9tdmVjLT5wdl9yZWJvb3QpKCJ2bWxpbnV4Iik7Cit9CisKK2V4dGVybiBjaGFyIG02OGtfZGVidWdfZGV2aWNlW107CisKK3N0YXRpYyB2b2lkIHN1bjN4X3Byb21fd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQpCit7CisgICAgd2hpbGUgKGNvdW50LS0pIHsKKyAgICAgICAgaWYgKCpzID09ICdcbicpCisgICAgICAgICAgICBzdW4zeF9wdXRjaGFyKCdccicpOworICAgICAgICBzdW4zeF9wdXRjaGFyKCpzKyspOworICAgIH0KK30KKworLyogZGVidWcgY29uc29sZSAtIHdyaXRlLW9ubHkgKi8KKworc3RhdGljIHN0cnVjdCBjb25zb2xlIHN1bjN4X2RlYnVnID0geworCS5uYW1lICA9CSJkZWJ1ZyIsCisJLndyaXRlID0Jc3VuM3hfcHJvbV93cml0ZSwKKwkuZmxhZ3MgPQlDT05fUFJJTlRCVUZGRVIsCisJLmluZGV4ID0JLTEsCit9OworCit2b2lkIHN1bjN4X3Byb21faW5pdCh2b2lkKQoreworICAgIC8qIFJlYWQgdGhlIHZlY3RvciB0YWJsZSAqLworCisgICAgc3VuM3hfcHV0Y2hhciA9ICoodm9pZCAoKiopKGludCkpIChTVU4zWF9QX1BVVENIQVIpOworICAgIHN1bjN4X2dldGNoYXIgPSAqKGludCAoKiopKHZvaWQpKSAoU1VOM1hfUF9HRVRDSEFSKTsKKyAgICBzdW4zeF9tYXlnZXQgPSAqKGludCAoKiopKHZvaWQpKSAgKFNVTjNYX1BfTUFZR0VUKTsKKyAgICBzdW4zeF9tYXlwdXQgPSAqKGludCAoKiopKGludCkpICAgKFNVTjNYX1BfTUFZUFVUKTsKKyAgICBzdW4zeF9wcm9tX3JlYm9vdCA9ICoodm9pZCAoKiopKHZvaWQpKSAoU1VOM1hfUF9SRUJPT1QpOworICAgIHN1bjN4X3Byb21fYWJvcnQgPSAqKGVfdmVjdG9yICopICAoU1VOM1hfUF9BQk9SVCk7CisgICAgcm9tdmVjID0gKHN0cnVjdCBsaW51eF9yb212ZWMgKilTVU4zWF9QUk9NX0JBU0U7CisKKyAgICBpZHByb21faW5pdCgpOworCisgICAgaWYoISgoaWRwcm9tLT5pZF9tYWNodHlwZSAmIFNNX0FSQ0hfTUFTSykgPT0gU01fU1VOM1gpKSB7CisJICAgIHByaW50aygiV2FybmluZzogbWFjaGluZSByZXBvcnRzIHN0cmFuZ2UgdHlwZSAlMDJ4XG4iLAorCQkgICBpZHByb20tPmlkX21hY2h0eXBlKTsKKwkgICAgcHJpbnRrKCJQcmV0ZW5kaW5nIGl0J3MgYSAzLzgwLCBidXQgdmVyeSBhZnJhaWQuLi5cbiIpOworCSAgICBpZHByb20tPmlkX21hY2h0eXBlID0gU01fU1VOM1ggfCBTTV8zXzgwOworICAgIH0KKworICAgIC8qIHBvaW50IHRyYXAgIzE0IGF0IGFib3J0LgorICAgICAqIFhYWCB0aGlzIGlzIGZ1dGlsZSBzaW5jZSB3ZSByZXN0b3JlIHRoZSB2YnIgZmlyc3QgLSBvb3BzCisgICAgICovCisgICAgdmVjdG9yc1tWRUNfVFJBUDE0XSA9IHN1bjN4X3Byb21fYWJvcnQ7CisKKyAgICAvKiBJZiBkZWJ1Zz1wcm9tIHdhcyBzcGVjaWZpZWQsIHN0YXJ0IHRoZSBkZWJ1ZyBjb25zb2xlICovCisKKyAgICBpZiAoIXN0cmNtcChtNjhrX2RlYnVnX2RldmljZSwgInByb20iKSkKKyAgICAgICAgcmVnaXN0ZXJfY29uc29sZSgmc3VuM3hfZGVidWcpOworCisKK30KKworLyogc29tZSBwcm9tIGZ1bmN0aW9ucyB0byBleHBvcnQgKi8KK2ludCBwcm9tX2dldGludGRlZmF1bHQoaW50IG5vZGUsIGNoYXIgKnByb3BlcnR5LCBpbnQgZGVmbHQpCit7CisJcmV0dXJuIGRlZmx0OworfQorCitpbnQgcHJvbV9nZXRib29sIChpbnQgbm9kZSwgY2hhciAqcHJvcCkKK3sKKwlyZXR1cm4gMTsKK30KKwordm9pZCBwcm9tX3ByaW50ZihjaGFyICpmbXQsIC4uLikKK3sKKworfQorCit2b2lkIHByb21faGFsdCAodm9pZCkKK3sKKwlzdW4zeF9oYWx0KCk7Cit9CisKKy8qIEdldCB0aGUgaWRwcm9tIGFuZCBzdHVmZiBpdCBpbnRvIGJ1ZmZlciAnaWRidWYnLiAgUmV0dXJucyB0aGUKKyAqIGZvcm1hdCB0eXBlLiAgJ251bV9ieXRlcycgaXMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHlvdXIgaWRidWYKKyAqIGhhcyBzcGFjZSBmb3IuICBSZXR1cm5zIDB4ZmYgb24gZXJyb3IuCisgKi8KK3Vuc2lnbmVkIGNoYXIKK3Byb21fZ2V0X2lkcHJvbShjaGFyICppZGJ1ZiwgaW50IG51bV9ieXRlcykKK3sKKyAgICAgICAgaW50IGk7CisKKwkvKiBtYWtlIGEgY29weSBvZiB0aGUgaWRwcm9tIHN0cnVjdHVyZSAqLworCWZvcihpID0gMDsgaSA8IG51bV9ieXRlczsgaSsrKQorCQlpZGJ1ZltpXSA9ICgoY2hhciAqKVNVTjNYX0lEUFJPTSlbaV07CisKKyAgICAgICAgcmV0dXJuIGlkYnVmWzBdOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3N1bjN4L3RpbWUuYyBiL2FyY2gvbTY4ay9zdW4zeC90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY0MjA0ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9zdW4zeC90aW1lLmMKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiAgbGludXgvYXJjaC9tNjhrL3N1bjN4L3RpbWUuYworICoKKyAqICBTdW4zeC1zcGVjaWZpYyB0aW1lIGhhbmRsaW5nCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vc3VuM3guaD4KKyNpbmNsdWRlIDxhc20vc3VuM2ludHMuaD4KKyNpbmNsdWRlIDxhc20vcnRjLmg+CisKKyNpbmNsdWRlICJ0aW1lLmgiCisKKyNkZWZpbmUgTV9DT05UUk9MIDB4ZjgKKyNkZWZpbmUgTV9TRUMgICAgIDB4ZjkKKyNkZWZpbmUgTV9NSU4gICAgIDB4ZmEKKyNkZWZpbmUgTV9IT1VSICAgIDB4ZmIKKyNkZWZpbmUgTV9EQVkgICAgIDB4ZmMKKyNkZWZpbmUgTV9EQVRFICAgIDB4ZmQKKyNkZWZpbmUgTV9NT05USCAgIDB4ZmUKKyNkZWZpbmUgTV9ZRUFSICAgIDB4ZmYKKworI2RlZmluZSBDX1dSSVRFICAgMHg4MAorI2RlZmluZSBDX1JFQUQgICAgMHg0MAorI2RlZmluZSBDX1NJR04gICAgMHgyMAorI2RlZmluZSBDX0NBTElCICAgMHgxZgorCitpbnQgc3VuM3hfaHdjbGsoaW50IHNldCwgc3RydWN0IHJ0Y190aW1lICp0KQoreworCXZvbGF0aWxlIHN0cnVjdCBtb3N0ZWtfZHQgKmggPQorCQkoc3RydWN0IG1vc3Rla19kdCAqKShTVU4zWF9FRVBST00rTV9DT05UUk9MKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJaWYoc2V0KSB7CisJCWgtPmNzciB8PSBDX1dSSVRFOworCQloLT5zZWMgPSBCSU4yQkNEKHQtPnRtX3NlYyk7CisJCWgtPm1pbiA9IEJJTjJCQ0QodC0+dG1fbWluKTsKKwkJaC0+aG91ciA9IEJJTjJCQ0QodC0+dG1faG91cik7CisJCWgtPndkYXkgPSBCSU4yQkNEKHQtPnRtX3dkYXkpOworCQloLT5tZGF5ID0gQklOMkJDRCh0LT50bV9tZGF5KTsKKwkJaC0+bW9udGggPSBCSU4yQkNEKHQtPnRtX21vbik7CisJCWgtPnllYXIgPSBCSU4yQkNEKHQtPnRtX3llYXIpOworCQloLT5jc3IgJj0gfkNfV1JJVEU7CisJfSBlbHNlIHsKKwkJaC0+Y3NyIHw9IENfUkVBRDsKKwkJdC0+dG1fc2VjID0gQkNEMkJJTihoLT5zZWMpOworCQl0LT50bV9taW4gPSBCQ0QyQklOKGgtPm1pbik7CisJCXQtPnRtX2hvdXIgPSBCQ0QyQklOKGgtPmhvdXIpOworCQl0LT50bV93ZGF5ID0gQkNEMkJJTihoLT53ZGF5KTsKKwkJdC0+dG1fbWRheSA9IEJDRDJCSU4oaC0+bWRheSk7CisJCXQtPnRtX21vbiA9IEJDRDJCSU4oaC0+bW9udGgpOworCQl0LT50bV95ZWFyID0gQkNEMkJJTihoLT55ZWFyKTsKKwkJaC0+Y3NyICY9IH5DX1JFQUQ7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisvKiBOb3QgbXVjaCB3ZSBjYW4gZG8gaGVyZSAqLwordW5zaWduZWQgbG9uZyBzdW4zeF9nZXR0aW1lb2Zmc2V0ICh2b2lkKQoreworICAgIHJldHVybiAwTDsKK30KKworI2lmIDAKK3N0YXRpYyB2b2lkIHN1bjN4X3RpbWVyX3RpY2soaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyAgICB2b2lkICgqdmVjdG9yKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKikgPSBkZXZfaWQ7CisKKyAgICAvKiBDbGVhciB0aGUgcGVuZGluZyBpbnRlcnJ1cHQgLSBwdWxzZSB0aGUgZW5hYmxlIGxpbmUgbG93ICovCisgICAgZGlzYWJsZV9pcnEoNSk7CisgICAgZW5hYmxlX2lycSg1KTsKKworICAgIHZlY3RvcihpcnEsIE5VTEwsIHJlZ3MpOworfQorI2VuZGlmCisKK3ZvaWQgX19pbml0IHN1bjN4X3NjaGVkX2luaXQoaXJxcmV0dXJuX3QgKCp2ZWN0b3IpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSkKK3sKKworCXN1bjNfZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CisKKworICAgIC8qIFB1bHNlIGVuYWJsZSBsb3cgdG8gZ2V0IHRoZSBjbG9jayBzdGFydGVkICovCisJc3VuM19kaXNhYmxlX2lycSg1KTsKKwlzdW4zX2VuYWJsZV9pcnEoNSk7CisJc3VuM19lbmFibGVfaW50ZXJydXB0cygpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3N1bjN4L3RpbWUuaCBiL2FyY2gvbTY4ay9zdW4zeC90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdlNDNiNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9zdW4zeC90aW1lLmgKQEAgLTAsMCArMSwxOSBAQAorI2lmbmRlZiBTVU4zWF9USU1FX0gKKyNkZWZpbmUgU1VOM1hfVElNRV9ICisKK2V4dGVybiBpbnQgc3VuM3hfaHdjbGsoaW50IHNldCwgc3RydWN0IHJ0Y190aW1lICp0KTsKK3Vuc2lnbmVkIGxvbmcgc3VuM3hfZ2V0dGltZW9mZnNldCAodm9pZCk7Cit2b2lkIHN1bjN4X3NjaGVkX2luaXQoaXJxcmV0dXJuX3QgKCp2ZWN0b3IpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSk7CisKK3N0cnVjdCBtb3N0ZWtfZHQgeworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgY3NyOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgc2VjOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgbWluOworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgaG91cjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIHdkYXk7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBtZGF5OworCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgbW9udGg7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciB5ZWFyOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvdG9vbHMvYW1pZ2EvTWFrZWZpbGUgYi9hcmNoL202OGsvdG9vbHMvYW1pZ2EvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEzNDM2MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay90b29scy9hbWlnYS9NYWtlZmlsZQpAQCAtMCwwICsxLDExIEBACisKK0NDID0JCW02OGstY2JtLWFtaWdhZG9zLWdjYworQ0ZMQUdTID0JLVdhbGwgLU8yCisKKworQWxsOgkJZG1lc2cKKworCitkbWVzZzoJCWRtZXNnLmMKKwkJJChDQykgJChDRkxBR1MpIC1vIGRtZXNnIGRtZXNnLmMgLW5vaXhlbXVsCisKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay90b29scy9hbWlnYS9kbWVzZy5jIGIvYXJjaC9tNjhrL3Rvb2xzL2FtaWdhL2RtZXNnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg5Mjc0OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay90b29scy9hbWlnYS9kbWVzZy5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiAgbGludXgvYXJjaC9tNjhrL3Rvb2xzL2FtaWdhL2RtZXNnLmMgLS0gUmV0cmlldmUgdGhlIGtlcm5lbCBtZXNzYWdlcyBzdG9yZWQKKyAqCQkJCQkgICBpbiBDaGlwIFJBTSB3aXRoIHRoZSBrZXJuZWwgY29tbWFuZAorICoJCQkJCSAgIGxpbmUgb3B0aW9uIGBkZWJ1Zz1tZW0nLgorICoKKyAqICCpIENvcHlyaWdodCAxOTk2IGJ5IEdlZXJ0IFV5dHRlcmhvZXZlbiA8Z2VlcnRAbGludXgtbTY4ay5vcmc+CisgKgorICoKKyAqICBVc2FnZToKKyAqCisgKglkbWVzZworICoJZG1lc2cgPENISVBNRU1fRU5EPgorICoKKyAqCisgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoZSBMaW51eAorICogIGRpc3RyaWJ1dGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKworI2RlZmluZSBDSElQTUVNX1NUQVJUCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ0hJUE1FTV9FTkQJMHgwMDIwMDAwMAkvKiBvdmVycmlkZGVuIGJ5IGFyZ3ZbMV0gKi8KKworI2RlZmluZSBTQVZFS01TR19NQUdJQzEJMHg1MzQxNTY0NQkvKiAnU0FWRScgKi8KKyNkZWZpbmUgU0FWRUtNU0dfTUFHSUMyCTB4NEI0RDUzNDcJLyogJ0tNU0cnICovCisKK3N0cnVjdCBzYXZla21zZyB7CisgICAgdV9sb25nIG1hZ2ljMTsJLyogU0FWRUtNU0dfTUFHSUMxICovCisgICAgdV9sb25nIG1hZ2ljMjsJLyogU0FWRUtNU0dfTUFHSUMyICovCisgICAgdV9sb25nIG1hZ2ljcHRyOwkvKiBhZGRyZXNzIG9mIG1hZ2ljMSAqLworICAgIHVfbG9uZyBzaXplOworICAgIGNoYXIgZGF0YVswXTsKK307CisKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICB1X2xvbmcgc3RhcnQgPSBDSElQTUVNX1NUQVJULCBlbmQgPSBDSElQTUVNX0VORCwgcDsKKyAgICBpbnQgZm91bmQgPSAwOworICAgIHN0cnVjdCBzYXZla21zZyAqbSA9IE5VTEw7CisKKyAgICBpZiAoYXJnYyA+PSAyKQorCWVuZCA9IHN0cnRvdWwoYXJndlsxXSwgTlVMTCwgMCk7CisgICAgcHJpbnRmKCJTZWFyY2hpbmcgZm9yIFNBVkVLTVNHIG1hZ2ljLi4uXG4iKTsKKyAgICBmb3IgKHAgPSBzdGFydDsgcCA8PSBlbmQtc2l6ZW9mKHN0cnVjdCBzYXZla21zZyk7IHAgKz0gNCkgeworCW0gPSAoc3RydWN0IHNhdmVrbXNnICopcDsKKwlpZiAoKG0tPm1hZ2ljMSA9PSBTQVZFS01TR19NQUdJQzEpICYmIChtLT5tYWdpYzIgPT0gU0FWRUtNU0dfTUFHSUMyKSAmJgorCSAgICAobS0+bWFnaWNwdHIgPT0gcCkpIHsKKwkgICAgZm91bmQgPSAxOworCSAgICBicmVhazsKKwl9CisgICAgfQorICAgIGlmICghZm91bmQpCisJcHJpbnRmKCJOb3QgZm91bmRcbiIpOworICAgIGVsc2UgeworCXByaW50ZigiRm91bmQgJWxkIGJ5dGVzIGF0IDB4JTA4bHhcbiIsIG0tPnNpemUsICh1X2xvbmcpJm0tPmRhdGEpOworCXB1dHMoIj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Iik7CisJZmZsdXNoKHN0ZG91dCk7CisJd3JpdGUoMSwgJm0tPmRhdGEsIG0tPnNpemUpOworCWZmbHVzaChzdGRvdXQpOworCXB1dHMoIjw8PDw8PDw8PDw8PDw8PDw8PDw8Iik7CisgICAgfQorICAgIHJldHVybigwKTsKK30K